From 7fe7739a89e7b414eba26e1293ad4962d3932eef Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 21 Nov 2014 18:44:36 +0100 Subject: [PATCH 01/25] =?UTF-8?q?Changeset:=20505=20fdbozzo=20-=2021/11/20?= =?UTF-8?q?14=2018:41:03:=20-=20Algunas=20mejoras=20en=20foxbin2prg.cfg=20?= =?UTF-8?q?y=20cambio=20de=20versi=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.cfg | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/foxbin2prg.cfg b/foxbin2prg.cfg index 8f79247..45ee918 100644 --- a/foxbin2prg.cfg +++ b/foxbin2prg.cfg @@ -1,8 +1,11 @@ **************************************************************************************************** -* FOXBIN2PRG v1.19.26 +* FOXBIN2PRG v1.19.37 * CONFIGURATION FILE / ARCHIVO DE CONFIGURACIÓN -*--------------------------------------------------------------------------------------------------- -* DON'T MODIFY THIS DOCUMENTATION SECTION / NO MODIFIQUE ESTA SECCIÓN DE DOCUMENTACIÓN +**************************************************************************************************** + + +**************************************************************************************************** +* DOCUMENTATION SECTION / SECCIÓN DE DOCUMENTACIÓN * * DETAIL OF SUPPORTED VALUES / DETALLE DE VALORES SOPORTADOS * If no values given, this are the defaults / Si no se proporcionan valores, estos son los predeterminados @@ -39,7 +42,7 @@ **************************************************************************************************** -* YOU CAN MODIFY FROM HERE! / PUEDE MODIFICAR DESDE AQUÍ! +* YOU CAN MODIFY FROM HERE / PUEDE MODIFICAR DESDE AQUÍ * EN: Uncomment for SourceSafe compatibility. You can change the extension on the right side. * ES: Descomentar para compatibilidad con SourceSafe. Puede cambiar la extensión del lado derecho. From f7f400cd0157175108e4d85385747c9247e431e4 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 21 Nov 2014 20:12:16 +0100 Subject: [PATCH 02/25] =?UTF-8?q?Changeset:=20506=20fdbozzo=20-=2021/11/20?= =?UTF-8?q?14=2018:49:02:=20-=20Normalizaci=C3=B3n=20de=20foxbin2prg.cfg?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.cfg | 62 +++++++++++++++++--------------------------------- 1 file changed, 21 insertions(+), 41 deletions(-) diff --git a/foxbin2prg.cfg b/foxbin2prg.cfg index 45ee918..38cbbf8 100644 --- a/foxbin2prg.cfg +++ b/foxbin2prg.cfg @@ -3,14 +3,13 @@ * CONFIGURATION FILE / ARCHIVO DE CONFIGURACIÓN **************************************************************************************************** - **************************************************************************************************** -* DOCUMENTATION SECTION / SECCIÓN DE DOCUMENTACIÓN +* OPTION DOCUMENTATION SECTION / SECCIÓN DE DOCUMENTACIÓN DE OPCIONES * * DETAIL OF SUPPORTED VALUES / DETALLE DE VALORES SOPORTADOS -* If no values given, this are the defaults / Si no se proporcionan valores, estos son los predeterminados +* If no values given, these are the DEFAULTS / Si no se proporcionan valores, estos son los PREDETERMINADOS * -* extension: xx2 && Default FoxBin2Prg extensions ends in '2' / Las extensiones por defecto de FoxBin2Prg terminan en '2' +* extension: tx2=newext && Default FoxBin2Prg extensions ends in '2' (see at the bottom) / Las extensiones por defecto de FoxBin2Prg terminan en '2' (ver debajo de todo) * DontShowProgress: 0 && Show progress bar by default in multi-file processing / Mostrar barra de progreso por defecto en procesamiento multi-archivo * DontShowErrors: 0 && Show message errors by default / Mostrar mensajes de error por defecto * NoTimestamps: 1 && Crear timespampt by default for minimize differences / Vaciar Timestamps por defecto para minimizar diferencias @@ -21,18 +20,26 @@ * OptimizeByFilestamp: 0 && Optimize file regeneration depending on file timestamp / Optimizar la regeneración de archivos dependiendo del timestamp de archivo * AllowMultiConfig: 1 && 1=Allow CFG files per directory. if no CFG found, then use Main CFG. 0=Only use Main CFG * DropNullCharsFromCode: 1 && 1=Drop NULL chars from source code / 0=Leave Nulls in code, if any -* XXX_Conversion_Support: N && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge), 4=Generate TXT with DATA for DIFF (DBF only) -* PJX_Conversion_Support: 2 && Default value -* VCX_Conversion_Support: 2 && Default value -* SCX_Conversion_Support: 2 && Default value -* FRX_Conversion_Support: 2 && Default value -* LBX_Conversion_Support: 2 && Default value -* MNX_Conversion_Support: 2 && Default value -* DBC_Conversion_Support: 2 && Default value -* DBF_Conversion_Support: 1 && Default value >> EN: FoxBin2Prg support bi-directional convertion of DBFs, but does not keep data. Use with care. -* >> ES: FoxBin2Prg tiene soporte bi-direccional para convertir DBF, pero no mantiene los datos. Usar con cuidado. + +*-- CONVERTION OPTIONS / OPCIONES DE CONVERSIÓN +* XXX_Conversion_Support: N && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge) +* PJX_Conversion_Support: 2 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge) +* VCX_Conversion_Support: 2 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge) +* SCX_Conversion_Support: 2 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge) +* FRX_Conversion_Support: 2 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge) +* LBX_Conversion_Support: 2 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge) +* MNX_Conversion_Support: 2 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge) +* DBC_Conversion_Support: 2 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge) +* DBF_Conversion_Support: 1 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge), 4=Generate TXT with DATA for DIFF (No Bidirectional!) +* >>DBF_Conversion_Support NOTE: >> EN: FoxBin2Prg support bi-directional convertion of DBFs, but does not keep data. Use with care. +* >> ES: FoxBin2Prg tiene soporte bi-direccional para convertir DBF, pero no mantiene los datos. Usar con cuidado. * DBF_Conversion_Included: * && If DBF_Conversion_Support:4, you can specify mnultiple filemasks: www,fb2p_free.dbf / Si DBF_Conversion_Support:4, se pueden indicar múltiples máscaras de archivo: www,fb2p_free.dbf * DBF_Conversion_Excluded: && If DBF_Conversion_Support:4, you can specify mnultiple filemasks: www,fb2p_free.dbf / Si DBF_Conversion_Support:4, se pueden indicar múltiples máscaras de archivo: www,fb2p_free.dbf + +*-- "CLASS PER FILE" OPTIONS (UseClassPerFile: 1) / OPCIONES DE "CLASE POR ARCHIVO" (UseClassPerFile: 1) +* UseClassPerFile: 0 && 0=One library tx2 file, 1=Multiple file.class.tx2 files / 0=Una archivo librería tx2, 1=Múltiples archivo.clase.tx2 +* RedirectClassPerFileToMain: 0 && 0=Don't redirect to file.tx2, 1=Redirect to file.tx2 when selecting file.class.tx2 / 0=No redireccionar a archivo.tx2, 1=Redireccionar a archivo.tx2 cuando se seleccione archivo.clase.tx2 +* ClassPerFileCheck: 0 && 0=Don't check file.class.tx2 inclusion, 1=Check file.class.tx2 inclusion / 0=No verificar la inclusión de archivo.clase.tx2, 1=Verificar la inclusión de archivo.clase.tx2 * * EN: Note: This values have precedence over internal parameters and parameters used on scripts * ES: Nota: Estos valores tienen precedencia sobre los parámetros internos y los parámetros usados en los scripts @@ -57,30 +64,3 @@ *extension: dc2=dca -* EN: Uncomment to activate the new value, comment to deactivate and use the default -* ES: Descomente para activar el nuevo valor, comente para desactivarlo y usar el predeterminado -*--------------------------------------------------------------------------------------------------- -*DontShowProgress: 1 -*DontShowErrors: 1 -*NoTimestamps: 0 -*Debug: 1 -*ExtraBackupLevels: 0 -*ClearUniqueID: 0 -*ClearDBFLastUpdate: 0 -*OptimizeByFilestamp: 0 -*AllowMultiConfig: 0 -*DropNullCharsFromCode: 0 - - -* EN: Uncomment to activate the new value, comment to deactivate and use the default -* ES: Descomente para activar el nuevo valor, comente para desactivarlo y usar el predeterminado -* 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge), 4=Generate TXT with DATA for DIFF (DBF only) -*--------------------------------------------------------------------------------------------------- -*PJX_Conversion_Support: 2 -*VCX_Conversion_Support: 2 -*SCX_Conversion_Support: 2 -*FRX_Conversion_Support: 2 -*LBX_Conversion_Support: 2 -*MNX_Conversion_Support: 2 -*DBC_Conversion_Support: 2 -*DBF_Conversion_Support: 4 From d092ee398f9219ce80f2f5c17881d47cc7252115 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 21 Nov 2014 20:17:27 +0100 Subject: [PATCH 03/25] Changeset: 507 fdbozzo - 21/11/2014 20:12:17: - Actualizado FoxBin2PRGVersionFile --- FoxBin2PRGVersionFile.txt | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 0526886..0840076 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -2,8 +2,8 @@ Lparameters toUpdateInfo Local lcNote With toUpdateInfo - .VersionNumber = 'v1.19.36' - .VersionDate = Date(2014,10,08) + .VersionNumber = 'v1.19.37' + .VersionDate = Date(2014,11,22) .SourceFileUrl = 'http://vfpxrepository.com/dl/thorupdate/Projects/FoxBin2Prg/FoxBin2Prg.Zip' .Link = 'http://vfpx.codeplex.com/wikipage?title=FoxBin2PRG' @@ -17,6 +17,13 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg Change History ------------------------------------------------------------- +2014/11/22 v1.19.37 +- Added Class per file support, configurable with UseClassPerFile:1 (Ryan Harris/Lutz Scheffler) +- Code Optimizations +- Enhancement: foxbin2prg.cfg configuration options can now have "&&" comments at the right of the values (edyshor) +- Bug Fix dbf: "Error 1903, String is too long to fit" when converting long DBF files with "DBF_Conversion_Support:4" to text (edyshor) +- Added support for the new "ClearDBFLastUpdate" setting in FoxBin2Prg.cfg, activated by default to minimize DB2 differences (edyshor) + 2014/10/08 v1.19.36 - Bug fix mnx: When generating mn2 text view, menu all pad IDs are generated as _000000000 (bug introduced in v1.19.36) - Enhancement: New "VFP9_FoxBin2Prg.vbs" script for "SendTo" menu, that replaces FoxBin2Prg.exe in this menu and adds a process status message From 34d0dca24e1667ff1bffda0a6b88c0778774c586 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 21 Nov 2014 22:49:04 +0100 Subject: [PATCH 04/25] Changeset: 508 fdbozzo - 21/11/2014 22:47:07: --- foxbin2prg.prg | 1 + 1 file changed, 1 insertion(+) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 1ac51d0..b5c78a2 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -1405,6 +1405,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .writeLog( '> n_ExtraBackupLevels: ' + TRANSFORM(.n_ExtraBackupLevels) ) .writeLog( '> l_OptimizeByFilestamp: ' + TRANSFORM(.l_OptimizeByFilestamp) ) .writeLog( '> l_DropNullCharsFromCode: ' + TRANSFORM(.l_DropNullCharsFromCode) ) + .writeLog( '> l_ClearDBFLastUpdate: ' + TRANSFORM(.l_ClearDBFLastUpdate) ) lo_CFG = NULL RELEASE lo_CFG From ca7bc99d6356bc42a67a79ef000d516b02499f87 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 22 Nov 2014 11:41:05 +0100 Subject: [PATCH 05/25] =?UTF-8?q?Changeset:=20510=20fdbozzo=20-=2021/11/20?= =?UTF-8?q?14=2023:28:37:=20-=20Nuevo=20m=C3=A9todo=20"AvanceDelProceso"?= =?UTF-8?q?=20y=20propiedades=20"n=5Favance=5Fproceso"=20y=20"n=5Favance?= =?UTF-8?q?=5Fmaximo"=20-=20Implementaci=C3=B3n=20de=20la=20propiedad=20"n?= =?UTF-8?q?=5Favance=5Fmaximo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 95b393f..b3dd852 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -2740,6 +2740,7 @@ DEFINE CLASS c_conversor_base AS SESSION #ENDIF _MEMBERDATA = [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -2781,6 +2782,8 @@ DEFINE CLASS c_conversor_base AS SESSION + [] ; + [] ; + [] ; + + [] ; + + [] ; + [] ; + [] @@ -2813,6 +2816,8 @@ DEFINE CLASS c_conversor_base AS SESSION c_OriginalFileName = '' c_ClaseActual = '' oFSO = NULL + n_Avance_Proceso = 0 + n_Avance_Maximo = 0 ******************************************************************************************************************* @@ -2947,6 +2952,11 @@ DEFINE CLASS c_conversor_base AS SESSION ENDPROC + PROCEDURE AvanceDelProceso + LPARAMETERS tcTexto, tnValor, tnTotal + ENDPROC + + ******************************************************************************************************************* PROCEDURE buscarObjetoDelMetodoPorNombre LPARAMETERS tcNombreObjeto, toClase @@ -6462,7 +6472,8 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin ENDFOR ENDIF - lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + .n_Avance_Maximo = lnCodeLines *-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF .identificarBloquesDeExclusion( @laCodeLines, lnCodeLines, .F., @laLineasExclusion, @lnBloquesExclusion ) @@ -6795,6 +6806,7 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin ENDIF lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + .n_Avance_Maximo = lnCodeLines *-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF .identificarBloquesDeExclusion( @laCodeLines, lnCodeLines, .F., @laLineasExclusion, @lnBloquesExclusion ) @@ -7107,6 +7119,7 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + .n_Avance_Maximo = lnCodeLines toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) @@ -7903,6 +7916,7 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + .n_Avance_Maximo = lnCodeLines toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) @@ -8332,6 +8346,7 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin WITH THIS AS c_conversor_prg_a_dbf OF 'FOXBIN2PRG.PRG' C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + .n_Avance_Maximo = lnCodeLines toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) @@ -8628,6 +8643,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin WITH THIS AS c_conversor_prg_a_dbc OF 'FOXBIN2PRG.PRG' C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + .n_Avance_Maximo = lnCodeLines toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) @@ -8806,6 +8822,7 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin WITH THIS AS c_conversor_prg_a_mnx OF 'FOXBIN2PRG.PRG' C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + .n_Avance_Maximo = lnCodeLines toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) @@ -10858,6 +10875,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg WITH THIS AS c_conversor_vcx_a_prg OF 'FOXBIN2PRG.PRG' USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN + .n_Avance_Maximo = _TALLY USE IN (SELECT("_TABLAORIG")) INDEX ON PADR(LOWER(PLATFORM + IIF(EMPTY(PARENT),'',ALLTRIM(PARENT)+'.')+OBJNAME),240) TAG PARENT_OBJ OF TABLABIN ADDITIVE @@ -11108,6 +11126,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg WITH THIS AS c_conversor_scx_a_prg OF 'FOXBIN2PRG.PRG' USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN + .n_Avance_Maximo = _TALLY USE IN (SELECT("_TABLAORIG")) INDEX ON PADR(LOWER(PLATFORM + IIF(EMPTY(PARENT),'',ALLTRIM(PARENT)+'.')+OBJNAME),240) TAG PARENT_OBJ OF TABLABIN ADDITIVE @@ -11370,6 +11389,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg WITH THIS AS c_conversor_pjx_a_prg OF 'FOXBIN2PRG.PRG' USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN + .n_Avance_Maximo = _TALLY USE IN (SELECT("_TABLAORIG")) loServerHead = CREATEOBJECT('CL_PROJ_SRV_HEAD') @@ -12078,6 +12098,7 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg WITH THIS AS c_conversor_pjm_a_prg OF 'FOXBIN2PRG.PRG' USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN_0 + .n_Avance_Maximo = _TALLY USE IN (SELECT("_TABLAORIG")) *-- Header @@ -12463,6 +12484,7 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg WITH THIS AS c_conversor_mnx_a_prg OF 'FOXBIN2PRG.PRG' USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN + .n_Avance_Maximo = _TALLY USE IN (SELECT("_TABLAORIG")) *-- Verificación de menú VFP 9 From a55b15c993c43b636774ecce4419760323a8e104 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 22 Nov 2014 19:36:54 +0100 Subject: [PATCH 06/25] =?UTF-8?q?Changeset:=20511=20fdbozzo=20-=2022/11/20?= =?UTF-8?q?14=2015:56:57:=20-=20Mejora=20en=20la=20b=C3=BAsqueda=20de=20re?= =?UTF-8?q?gistros=20ignorando=20la=20capitalizaci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 95b393f..c7af5b1 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -2825,6 +2825,7 @@ DEFINE CLASS c_conversor_base AS SESSION SET SAFETY OFF SET TABLEPROMPT OFF SET BLOCKSIZE TO 0 + SET EXACT ON PUBLIC C_FB2PRG_CODE C_FB2PRG_CODE = '' && Contendrá todo el código generado @@ -10887,7 +10888,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg ENDIF - SCAN ALL FOR TABLABIN.PLATFORM = "WINDOWS" AND TABLABIN.RESERVED1=="Class" + SCAN ALL FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND PROPER( TABLABIN.RESERVED1 ) == "Class" STORE 0 TO lnMethodCount STORE '' TO laMethods, laCode, lcCodigo lnClassCount = lnClassCount + 1 @@ -10905,8 +10906,8 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg loRegClass.UNIQUEID = ALLTRIM(loRegClass.UNIQUEID) ENDIF - lcObjName = ALLTRIM(loRegClass.OBJNAME) - laClasses(lnClassCount,1) = LOWER(lcObjName) + lcObjName = LOWER( ALLTRIM( loRegClass.OBJNAME ) ) + laClasses(lnClassCount,1) = lcObjName .write_DEFINE_CLASS( @la_NombresObjsOle, @loRegClass, @lcCodigo ) @@ -10923,9 +10924,9 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg *------------------------------------------------------------------------------- lnObjCount = 0 lnRecno = RECNO() - LOCATE FOR TABLABIN.PLATFORM = "WINDOWS" AND ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName + LOCATE FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName - SCAN REST WHILE TABLABIN.PLATFORM = "WINDOWS" AND ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName + SCAN REST WHILE UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName lnObjCount = lnObjCount + 1 DIMENSION laObjs(lnObjCount,3) loRegObj = NULL @@ -10986,11 +10987,11 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg *-- RECORRO LOS OBJETOS DENTRO DE LA CLASE ACTUAL PARA OBTENER SUS MÉTODOS lnRecno = RECNO() - LOCATE FOR TABLABIN.PLATFORM = "WINDOWS" AND ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName + LOCATE FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName SCAN REST ; - FOR TABLABIN.PLATFORM = "WINDOWS" AND NOT TABLABIN.RESERVED1=="Class" ; - WHILE ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName + FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND NOT PROPER( TABLABIN.RESERVED1 ) == "Class" ; + WHILE LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName loRegObj = NULL SCATTER MEMO NAME loRegObj @@ -11148,8 +11149,8 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg SCAN ALL FOR TABLABIN.PLATFORM = "WINDOWS" ; - AND (EMPTY(TABLABIN.PARENT) ; - AND (TABLABIN.BASECLASS == 'dataenvironment' OR TABLABIN.BASECLASS == 'form' OR TABLABIN.BASECLASS == 'formset' ) ) + AND ( EMPTY( TABLABIN.PARENT ) ; + AND INLIST( LOWER( TABLABIN.BASECLASS ), 'dataenvironment', 'form', 'formset' ) ) STORE 0 TO lnMethodCount STORE '' TO laMethods, laCode, lcCodigo @@ -11168,8 +11169,8 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg loRegClass.UNIQUEID = ALLTRIM(loRegClass.UNIQUEID) ENDIF - lcObjName = ALLTRIM(loRegClass.OBJNAME) - laClasses(lnClassCount,1) = LOWER(lcObjName) + lcObjName = LOWER( ALLTRIM(loRegClass.OBJNAME) ) + laClasses(lnClassCount,1) = lcObjName .write_DEFINE_CLASS( @la_NombresObjsOle, @loRegClass, @lcCodigo ) @@ -11186,9 +11187,9 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg *------------------------------------------------------------------------------- lnObjCount = 0 lnRecno = RECNO() - LOCATE FOR TABLABIN.PLATFORM = "WINDOWS" AND ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName + LOCATE FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName - SCAN REST WHILE TABLABIN.PLATFORM = "WINDOWS" AND ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName + SCAN REST WHILE UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName lnObjCount = lnObjCount + 1 DIMENSION laObjs(lnObjCount,3) loRegObj = NULL @@ -11250,13 +11251,13 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg *-- RECORRO LOS OBJETOS DENTRO DE LA CLASE ACTUAL PARA OBTENER SUS MÉTODOS lnRecno = RECNO() - LOCATE FOR TABLABIN.PLATFORM = "WINDOWS" AND ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName + LOCATE FOR TABLABIN.PLATFORM = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName SCAN REST ; - FOR TABLABIN.PLATFORM = "WINDOWS" ; + FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" ; AND NOT (EMPTY(TABLABIN.PARENT) ; - AND (TABLABIN.BASECLASS == 'dataenvironment' OR TABLABIN.BASECLASS == 'form' OR TABLABIN.BASECLASS == 'formset' ) ) ; - WHILE ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName + AND ( INLIST( LOWER( TABLABIN.BASECLASS ), 'dataenvironment' , 'form', 'formset' ) ) ) ; + WHILE LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName loRegObj = NULL SCATTER MEMO NAME loRegObj From 9251b41c05e86692f1b94582446fcfa9c99abcc2 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 22 Nov 2014 19:42:30 +0100 Subject: [PATCH 07/25] =?UTF-8?q?Changeset:=20512=20fdbozzo=20-=2022/11/20?= =?UTF-8?q?14=2019:37:49:=20-=20Arreglo=20de=20l=C3=ADnea=20vac=C3=ADa=20f?= =?UTF-8?q?altante=20en=20la=20cabecera=20OLE=20del=20inicio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 1 + 1 file changed, 1 insertion(+) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 8c882a3..c59e524 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -10340,6 +10340,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *!* ENDSCAN TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> * ENDTEXT From 6ca039c68b9c42eb8d762d84d80475b08da87405 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 23 Nov 2014 02:27:03 +0100 Subject: [PATCH 08/25] =?UTF-8?q?Changeset:=20514=20fdbozzo=20-=2022/11/20?= =?UTF-8?q?14=2019:47:12:=20-=20Encapsulaci=C3=B3n=20y=20optimizaci=C3=B3n?= =?UTF-8?q?=20en=20nuevo=20m=C3=A9todo=20"Classify=5FPAM=5FHidden=5FProtec?= =?UTF-8?q?ted"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 102 +++++++++++++++++++++++++------------------------ 1 file changed, 52 insertions(+), 50 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index c7af5b1..4794ae4 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -8947,8 +8947,10 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base #IF .F. LOCAL THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG' #ENDIF + _MEMBERDATA = [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -9011,6 +9013,54 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDPROC + PROCEDURE Classify_PAM_Hidden_Protected + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * tnPropsAndValues_Count (@! IN ) + * taPropsAndValues (@! IN ) + * tnProtected_Count (@! IN ) + * taProtected (@! IN ) + * tnPropsAndComments_Count (@! IN ) + * taPropsAndComments (@! IN ) + * tcHiddenProp (@! OUT) Lista de propiedades Hidden + * tcProtectedProp (@! OUT) Lista de propiedades Protected + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tnPropsAndValues_Count, taPropsAndValues, tnProtected_Count, taProtected ; + , tnPropsAndComments_Count, taPropsAndComments, tcHiddenProp, tcProtectedProp + + IF tnPropsAndValues_Count > 0 THEN + *-- Recorro las propiedades (campo Properties) para ir conformando + *-- las definiciones HIDDEN y PROTECTED + LOCAL lcProp, I + + STORE '' TO tcHiddenProp, tcProtectedProp + + FOR I = 1 TO tnProtected_Count + DO CASE + CASE EMPTY( taProtected(I) ) + LOOP + + CASE RIGHT( taProtected(I), 1 ) == '^' + *-- Hidden Property or method + lcProp = CHRTRAN( taProtected(I), '^', '' ) + IF ASCAN(taPropsAndComments, '*' + lcProp, 1, 0, 1, 1+2+4) > 0 + LOOP && method + ENDIF + tcHiddenProp = tcHiddenProp + ',' + lcProp + + OTHERWISE + *-- Protected Property or method + IF ASCAN(taPropsAndComments, '*' + taProtected(I), 1, 0, 1, 1+2+4) > 0 + LOOP && method + ENDIF + tcProtectedProp = tcProtectedProp + ',' + taProtected(I) + ENDCASE + ENDFOR + + ENDIF + ENDPROC + + ******************************************************************************************************************* PROCEDURE get_ADD_OBJECT_METHODS LPARAMETERS toRegObj, toRegClass, tcMethods, taMethods, taCode, tnMethodCount ; @@ -9959,58 +10009,10 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base .get_PropsFrom_PROTECTED( toRegClass.PROTECTED, .T., @taProtected, @tnProtected_Count, '' ) IF tnPropsAndValues_Count > 0 THEN - *-- Recorro las propiedades (campo Properties) para ir conformando - *-- las definiciones HIDDEN y PROTECTED - FOR I = 1 TO tnPropsAndValues_Count - IF EMPTY(taPropsAndValues(I,1)) - LOOP - ENDIF - - IF tnProtected_Count = 0 - lnProtectedItem = 0 - ELSE - lnProtectedItem = ASCAN(taProtected, taPropsAndValues(I,1), 1, 0, 0, 1) - ENDIF - - DO CASE - CASE lnProtectedItem = 0 - *-- Propiedad común - - CASE LOWER( taProtected(lnProtectedItem) ) == LOWER( taPropsAndValues(I,1) ) - *-- Propiedad protegida - lcProtectedProp = lcProtectedProp + ',' + taPropsAndValues(I,1) - - CASE LOWER( taProtected(lnProtectedItem) ) == LOWER( taPropsAndValues(I,1) + '^' ) - *-- Propiedad oculta - lcHiddenProp = lcHiddenProp + ',' + taPropsAndValues(I,1) - - ENDCASE - ENDFOR - - *-- Segunda barrida para las propiedades Hidden/Protected que no estén definidas en Properties - FOR I = 1 TO tnProtected_Count - *-- La propiedad evaluada no debe ser vacía, debe estar en la lista de PROPERTIES y no debe ser un *Método - IF EMPTY(taProtected(I,1)) ; - OR ASCAN(taPropsAndValues, CHRTRAN( taProtected(I), '^', '' ), 1, 0, 1, 1) > 0 ; - OR ASCAN(taPropsAndComments, '*' + CHRTRAN( taProtected(I), '^', '' ), 1, 0, 1, 1) > 0 - LOOP - ENDIF - - IF RIGHT( taProtected(I), 1 ) == '^' - *-- Propiedad oculta - lcHiddenProp = lcHiddenProp + ',' + CHRTRAN( taProtected(I), '^', '' ) - - ELSE - *-- Propiedad protegida - lcProtectedProp = lcProtectedProp + ',' + taProtected(I) - - ENDIF - ENDFOR - + .Classify_PAM_Hidden_Protected( @tnPropsAndValues_Count, @taPropsAndValues, @tnProtected_Count, @taProtected ; + , @tnPropsAndComments_Count, @taPropsAndComments, @lcHiddenProp, @lcProtectedProp ) .write_DEFINED_PAM( @taPropsAndComments, tnPropsAndComments_Count, @tcCodigo ) - .write_HIDDEN_Properties( @lcHiddenProp, @tcCodigo ) - .write_PROTECTED_Properties( @lcProtectedProp, @tcCodigo ) *-- Escribo las propiedades de la clase y sus comentarios (los comentarios aquí son redundantes) From 5ab9309dd6cb2a1438b532945167f18886f5659e Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 23 Nov 2014 17:36:22 +0100 Subject: [PATCH 09/25] =?UTF-8?q?Changeset:=20515=20fdbozzo=20-=2023/11/20?= =?UTF-8?q?14=2012:07:18:=20-=20Mejoras=20en=20normalizaci=C3=B3n=20de=20c?= =?UTF-8?q?apitalizaci=C3=B3n=20-=20Quitados=20los=20datos=20innecesarios?= =?UTF-8?q?=20y=20redundantes=20de=20los=20objetos=20OLE=20(Nombre,=20Pare?= =?UTF-8?q?nt,=20ObjName)=20-=20Mejoras=20en=20ASCAN()=20para=20b=C3=BAsqu?= =?UTF-8?q?edas=20exactas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 90 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 64 insertions(+), 26 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 4794ae4..2dec675 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -9205,11 +9205,19 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base PROCEDURE get_NombresObjetosOLEPublic LPARAMETERS ta_NombresObjsOle *-- Obtengo los objetos "OLEPublic" + LOCAL I + SELECT PADR(OBJNAME,100) OBJNAME ; FROM TABLABIN ; WHERE TABLABIN.PLATFORM = "COMMENT" AND TABLABIN.RESERVED2 == "OLEPublic" ; ORDER BY 1 ; INTO ARRAY ta_NombresObjsOle + + FOR I = 1 TO _TALLY + ta_NombresObjsOle(I) = ALLTRIM( ta_NombresObjsOle(I) ) + ENDFOR + + RETURN ENDPROC @@ -9244,10 +9252,10 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base lnPos = AT(' ', laLines(I)) && Un espacio separa la propiedad de su comentario (si tiene) IF lnPos = 0 - taPropsAndComments(I,1) = laLines(I) + taPropsAndComments(I,1) = LOWER( laLines(I) ) taPropsAndComments(I,2) = '' ELSE - taPropsAndComments(I,1) = LEFT( laLines(I), lnPos - 1 ) + taPropsAndComments(I,1) = LOWER( LEFT( laLines(I), lnPos - 1 ) ) taPropsAndComments(I,2) = SUBSTR( laLines(I), lnPos + 1 ) ENDIF ENDFOR @@ -9349,7 +9357,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *-- Propiedad normal lnPosEQ = AT( '=', laItems(I) ) taPropsAndValues(X,1) = LEFT( laItems(I), lnPosEQ - 2 ) - taPropsAndValues(X,2) = .normalizarValorPropiedad( taPropsAndValues(X,1), LTRIM( SUBSTR( laItems(I), lnPosEQ + 2 ) ), '' ) + taPropsAndValues(X,2) = .normalizarValorPropiedad( taPropsAndValues(X,1), LTRIM( SUBSTR( laItems(I), lnPosEQ + 2 ) ), '' ) ENDIF ENDFOR @@ -9417,7 +9425,8 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base FOR I = tnProtected_Count TO 1 STEP -1 *-- El ASCAN es para evitar valores repetidos, que se eliminarán. v1.19.29 - IF ASCAN( taProtected, taProtected(I), 1, -1, 0,1+2+4 ) = I + taProtected(I) = LOWER( taProtected(I) ) + IF ASCAN( taProtected, taProtected(I), 1, -1, 0, 1+2+4 ) = I tcSortedMemo = tcSortedMemo + LOWER(taProtected(I)) + CR_LF ELSE ADEL( taProtected, I ) @@ -9920,10 +9929,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *-- Agrego metainformación para objetos OLE IF toRegObj.BASECLASS == 'olecontrol' TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2+4+8 - <<>> Nombre="<>" - Parent="<>" - ObjName="<>" - OLEObject="< 0 ) + llOleObject = ( ASCAN( ta_NombresObjsOle, toRegClass.OBJNAME, 1, 0, 1, 1+2+4+8) > 0 ) IF NOT EMPTY(toRegClass.CLASSLOC) lcOF_Classlib = 'OF "' + LOWER(ALLTRIM(toRegClass.CLASSLOC)) + '" ' @@ -10132,7 +10138,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *-- DEFINICIÓN DE LA CLASE ( DEFINE CLASS 'className' AS 'classType' [OF 'classLib'] [OLEPUBLIC] ) TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<'DEFINE CLASS'>> <> AS <> <> + <<'DEFINE CLASS'>> <> AS <> <> ENDTEXT RETURN @@ -10854,7 +10860,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg , lnClassCount, lcOutputFile, lcExternalHeader STORE 0 TO lnCodError, lnLastClass, lnObjCount, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count ; , lnMethodCount, lnClassCount - STORE '' TO laMethods, laCode, laProtected, laPropsAndComments, laObjs, lcCodigo, laClasses(1,2), lcOutputFile ; + STORE '' TO laMethods, laCode, laProtected, laPropsAndComments, laObjs, lcCodigo, laClasses, lcOutputFile ; , C_FB2PRG_CODE, lcExternalHeader STORE NULL TO loRegClass, loRegObj @@ -10899,6 +10905,11 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg loRegClass = NULL SCATTER MEMO NAME loRegClass + *-- Normalización de capitalización y de datos según parametrización + loRegClass.BASECLASS = LOWER( loRegClass.BASECLASS ) + loRegClass.CLASSLOC = LOWER( loRegClass.CLASSLOC ) + loRegClass.CLASS = LOWER( loRegClass.CLASS ) + IF toFoxBin2Prg.l_NoTimestamps loRegClass.TIMESTAMP = 0 ENDIF @@ -10908,8 +10919,8 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg loRegClass.UNIQUEID = ALLTRIM(loRegClass.UNIQUEID) ENDIF - lcObjName = LOWER( ALLTRIM( loRegClass.OBJNAME ) ) - laClasses(lnClassCount,1) = lcObjName + lcObjName = ALLTRIM( loRegClass.OBJNAME ) + laClasses(lnClassCount,1) = LOWER( lcObjName ) .write_DEFINE_CLASS( @la_NombresObjsOle, @loRegClass, @lcCodigo ) @@ -10926,13 +10937,19 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg *------------------------------------------------------------------------------- lnObjCount = 0 lnRecno = RECNO() - LOCATE FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName + LOCATE FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == LOWER(lcObjName) - SCAN REST WHILE UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName + SCAN REST WHILE UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == LOWER(lcObjName) lnObjCount = lnObjCount + 1 DIMENSION laObjs(lnObjCount,3) loRegObj = NULL SCATTER MEMO NAME loRegObj + + *-- Normalización de capitalización y de datos según parametrización + loRegObj.BASECLASS = LOWER( loRegObj.BASECLASS ) + loRegObj.CLASSLOC = LOWER( loRegObj.CLASSLOC ) + loRegObj.CLASS = LOWER( loRegObj.CLASS ) + laObjs(lnObjCount,1) = loRegObj laObjs(lnObjCount,2) = RECNO() && ZOrder laObjs(lnObjCount,3) = lnObjCount && Alphabetic order @@ -10989,15 +11006,20 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg *-- RECORRO LOS OBJETOS DENTRO DE LA CLASE ACTUAL PARA OBTENER SUS MÉTODOS lnRecno = RECNO() - LOCATE FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName + LOCATE FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == LOWER(lcObjName) SCAN REST ; FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND NOT PROPER( TABLABIN.RESERVED1 ) == "Class" ; - WHILE LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName + WHILE LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == LOWER(lcObjName) loRegObj = NULL SCATTER MEMO NAME loRegObj + *-- Normalización de capitalización y de datos según parametrización + loRegObj.BASECLASS = LOWER( loRegObj.BASECLASS ) + loRegObj.CLASSLOC = LOWER( loRegObj.CLASSLOC ) + loRegObj.CLASS = LOWER( loRegObj.CLASS ) + IF toFoxBin2Prg.l_NoTimestamps loRegObj.TIMESTAMP = 0 ENDIF @@ -11104,7 +11126,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg , lnClassCount, lcOutputFile, lcExternalHeader STORE 0 TO lnCodError, lnLastClass, lnObjCount, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count ; , lnMethodCount, lnClassCount - STORE '' TO laMethods, laCode, laProtected, laPropsAndComments, laObjs, lcCodigo, laClasses(1,2), lcOutputFile ; + STORE '' TO laMethods, laCode, laProtected, laPropsAndComments, laObjs, lcCodigo, laClasses, lcOutputFile ; , C_FB2PRG_CODE, lcExternalHeader STORE NULL TO loRegClass, loRegObj @@ -11162,6 +11184,11 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg loRegClass = NULL SCATTER MEMO NAME loRegClass + *-- Normalización de capitalización y de datos según parametrización + loRegClass.BASECLASS = LOWER( loRegClass.BASECLASS ) + loRegClass.CLASSLOC = LOWER( loRegClass.CLASSLOC ) + loRegClass.CLASS = LOWER( loRegClass.CLASS ) + IF toFoxBin2Prg.l_NoTimestamps loRegClass.TIMESTAMP = 0 ENDIF @@ -11171,8 +11198,8 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg loRegClass.UNIQUEID = ALLTRIM(loRegClass.UNIQUEID) ENDIF - lcObjName = LOWER( ALLTRIM(loRegClass.OBJNAME) ) - laClasses(lnClassCount,1) = lcObjName + lcObjName = ALLTRIM(loRegClass.OBJNAME) + laClasses(lnClassCount,1) = LOWER( lcObjName ) .write_DEFINE_CLASS( @la_NombresObjsOle, @loRegClass, @lcCodigo ) @@ -11189,13 +11216,19 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg *------------------------------------------------------------------------------- lnObjCount = 0 lnRecno = RECNO() - LOCATE FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName + LOCATE FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == LOWER(lcObjName) - SCAN REST WHILE UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName + SCAN REST WHILE UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == LOWER(lcObjName) lnObjCount = lnObjCount + 1 DIMENSION laObjs(lnObjCount,3) loRegObj = NULL SCATTER MEMO NAME loRegObj + + *-- Normalización de capitalización y de datos según parametrización + loRegObj.BASECLASS = LOWER( loRegObj.BASECLASS ) + loRegObj.CLASSLOC = LOWER( loRegObj.CLASSLOC ) + loRegObj.CLASS = LOWER( loRegObj.CLASS ) + laObjs(lnObjCount,1) = loRegObj laObjs(lnObjCount,2) = RECNO() && ZOrder laObjs(lnObjCount,3) = lnObjCount && Orden alfabético @@ -11253,17 +11286,22 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg *-- RECORRO LOS OBJETOS DENTRO DE LA CLASE ACTUAL PARA OBTENER SUS MÉTODOS lnRecno = RECNO() - LOCATE FOR TABLABIN.PLATFORM = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName + LOCATE FOR TABLABIN.PLATFORM = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == LOWER(lcObjName) SCAN REST ; FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" ; AND NOT (EMPTY(TABLABIN.PARENT) ; AND ( INLIST( LOWER( TABLABIN.BASECLASS ), 'dataenvironment' , 'form', 'formset' ) ) ) ; - WHILE LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName + WHILE LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == LOWER(lcObjName) loRegObj = NULL SCATTER MEMO NAME loRegObj + *-- Normalización de capitalización y de datos según parametrización + loRegObj.BASECLASS = LOWER( loRegObj.BASECLASS ) + loRegObj.CLASSLOC = LOWER( loRegObj.CLASSLOC ) + loRegObj.CLASS = LOWER( loRegObj.CLASS ) + IF toFoxBin2Prg.l_NoTimestamps loRegObj.TIMESTAMP = 0 ENDIF @@ -12350,7 +12388,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg *-- Cierro DBC FOR I = 1 TO ADATABASES(laDatabases2) - IF ASCAN( laDatabases, laDatabases2(I) ) = 0 + IF ASCAN( laDatabases, laDatabases2(I), 1, 0, 0, 1+2+4 ) = 0 SET DATABASE TO (laDatabases2(I)) CLOSE DATABASES EXIT From c0f84601f6c879e547a6cf2ead778074a679c400 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 23 Nov 2014 17:40:49 +0100 Subject: [PATCH 10/25] =?UTF-8?q?Changeset:=20516=20fdbozzo=20-=2023/11/20?= =?UTF-8?q?14=2017:37:54:=20-=20Optimizaci=C3=B3n=20en=20m=C3=A9todo=20"wr?= =?UTF-8?q?ite=5FCLASS=5FPROPERTIES"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 2dec675..9bccdae 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -10022,17 +10022,19 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base .write_PROTECTED_Properties( @lcProtectedProp, @tcCodigo ) *-- Escribo las propiedades de la clase y sus comentarios (los comentarios aquí son redundantes) - FOR I = 1 TO ALEN(taPropsAndValues, 1) + FOR I = 1 TO tnPropsAndValues_Count TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> <> = <> ENDTEXT - lnComment = ASCAN( taPropsAndComments, taPropsAndValues(I,1), 1, 0, 1, 1+2+4+8) + IF tnPropsAndComments_Count > 0 THEN + lnComment = ASCAN( taPropsAndComments, taPropsAndValues(I,1), 1, 0, 1, 1+2+4+8) - IF lnComment > 0 AND NOT EMPTY(taPropsAndComments(lnComment,2)) - TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 - <<>> && <> - ENDTEXT + IF lnComment > 0 AND NOT EMPTY(taPropsAndComments(lnComment,2)) + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 + <<>> && <> + ENDTEXT + ENDIF ENDIF ENDFOR From 381051471b14a0c47585817f3a7324283fb8efde Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 23 Nov 2014 18:09:03 +0100 Subject: [PATCH 11/25] =?UTF-8?q?Changeset:=20518=20fdbozzo=20-=2023/11/20?= =?UTF-8?q?14=2017:49:25:=20-=20Arreglo=20de=20capitalizaci=C3=B3n=20en=20?= =?UTF-8?q?DEFINE=20CLASS=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TESTS/ut__foxbin2prg.prg | 2 +- foxbin2prg.prg | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/TESTS/ut__foxbin2prg.prg b/TESTS/ut__foxbin2prg.prg index bc66dcd..c6625b5 100644 --- a/TESTS/ut__foxbin2prg.prg +++ b/TESTS/ut__foxbin2prg.prg @@ -212,7 +212,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg THIS.assertequals( toReg_Esperado.Reserved8, toReg.Reserved8, "Valor de RESERVED8 para " + lcExtraData ) THIS.assertequals( LEN(toReg_Esperado.Reserved8), LEN(toReg.Reserved8), "Tamaño de RESERVED8 para " + lcExtraData ) - THIS.assertequals( toReg_Esperado.OLE2, toReg.OLE2, "Valor de OLE2 para " + lcExtraData ) + THIS.assertequals( LOWER(toReg_Esperado.OLE2), LOWER(toReg.OLE2), "Valor de OLE2 para " + lcExtraData ) THIS.assertequals( LEN(toReg_Esperado.OLE2), LEN(toReg.OLE2), "Tamaño de OLE2 para " + lcExtraData ) THIS.assertequals( SYS(2007, toReg_Esperado.OLE), SYS(2007, toReg.OLE), "Valor de OLE (Checksum) para " + lcExtraData ) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 9bccdae..acb448a 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -5556,7 +5556,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base STORE '' TO tcProcedureAbierto toClase = CREATEOBJECT('CL_CLASE') - toClase._Nombre = ALLTRIM( STREXTRACT( tcLine, 'DEFINE CLASS ', ' AS ', 1, 1 ) ) + toClase._Nombre = LOWER( ALLTRIM( STREXTRACT( tcLine, 'DEFINE CLASS ', ' AS ', 1, 1 ) ) ) toClase._ObjName = toClase._Nombre toClase._Definicion = ALLTRIM( tcLine ) IF NOT ' OF ' $ UPPER(tcLine) && Puede no tener "OF libreria.vcx" @@ -12780,7 +12780,7 @@ DEFINE CLASS CL_MODULO AS CL_CUS_BASE WITH THIS AS CL_MODULO OF 'FOXBIN2PRG.PRG' FOR X = 1 TO ._Ole_Obj_count - IF ._Ole_Objs(X)._Nombre == tcNombre + IF LOWER(._Ole_Objs(X)._Nombre) == LOWER(tcNombre) llExiste = .T. EXIT ENDIF From 3300547d7f5fce5e626e206cb0b7d6fe26c813c2 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 23 Nov 2014 19:23:15 +0100 Subject: [PATCH 12/25] =?UTF-8?q?Changeset:=20520=20fdbozzo=20-=2023/11/20?= =?UTF-8?q?14=2019:16:28:=20-=20Arreglo=20bug=20introducido=20en=20el=20de?= =?UTF-8?q?sarrollo=20respecto=20de=20la=20l=C3=ADnea=20vac=C3=ADa=20en=20?= =?UTF-8?q?cabecera=20que=20solo=20debe=20crearse=20cuando=20hay=20OLE=20(?= =?UTF-8?q?por=20compatibilidad)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index c59e524..782b822 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -10300,6 +10300,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *-- Crea la definición del tag *< OLE: /> con la información de todos los objetos OLE LPARAMETERS toFoxBin2Prg + LOCAL laOLE(1) *!* LOCAL lnOLECount, lcOLEChecksum, llOleExistente, loReg *!* #IF .F. @@ -10339,10 +10340,21 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *!* ENDSCAN - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - * - ENDTEXT + SELECT COUNT(*) FROM TABLABIN WHERE TABLABIN.PLATFORM = "WINDOWS" AND BASECLASS == 'olecontrol' INTO ARRAY laOLE + + IF laOLE(1) > 0 THEN + *-- Lo del <<>> para crear una línea vacía es solamente por compatibilidad con lo antiguo, + *-- donde se creaba esta línea cuando el form o clase tenía al menos un objeto OLE. + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + * + ENDTEXT + ELSE + + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * + ENDTEXT + ENDIF *!* CATCH TO loEx *!* IF THIS.l_Debug AND _VFP.STARTMODE = 0 From 7e20d4a0fbdf4c717e5c496afb688881b4b7aa39 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 29 Nov 2014 04:13:07 +0100 Subject: [PATCH 13/25] Changeset: 524 fdbozzo - 28/11/2014 09:32:22: - Varias optimizaciones reemplazando "TEXT TO" con "var = var + string" - Agregados indicadores de proceso --- TESTS/ut__foxbin2prg.prg | 28 +-- foxbin2prg.prg | 527 ++++++++++++++++++++++++++------------- 2 files changed, 364 insertions(+), 191 deletions(-) diff --git a/TESTS/ut__foxbin2prg.prg b/TESTS/ut__foxbin2prg.prg index c6625b5..7426854 100644 --- a/TESTS/ut__foxbin2prg.prg +++ b/TESTS/ut__foxbin2prg.prg @@ -314,8 +314,8 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) ) - loCnv.Convertir( lc_OutputFile, .F., .F., .T. ) - loCnv.Convertir( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), .F., .F., .T. ) + loCnv.Ejecutar( lc_OutputFile, '', '', '', '0', '0', '0', '', '', .T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), '', '', '', '0', '0', '0', '', '', .T. ) SELECT 0 USE (lc_InputFile) SHARED AGAIN NOUPDATE ALIAS ARCHIVOBIN_IN @@ -555,8 +555,8 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) ) - loCnv.Convertir( lc_OutputFile, .F., .F., .T. ) - loCnv.Convertir( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), .F., .F., .T. ) + loCnv.Ejecutar( lc_OutputFile, '', '', '', '0', '0', '0', '', '', .T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), '', '', '', '0', '0', '0', '', '', .T. ) SELECT 0 USE (lc_OutputFile) SHARED AGAIN NOUPDATE ALIAS TABLABIN @@ -640,8 +640,8 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) ) - loCnv.Convertir( lc_OutputFile, .F., .F., .T. ) - loCnv.Convertir( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), .F., .F., .T. ) + loCnv.Ejecutar( lc_OutputFile, '', '', '', '0', '0', '0', '', '', .T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), '', '', '', '0', '0', '0', '', '', .T. ) SELECT 0 USE (lc_OutputFile) SHARED AGAIN NOUPDATE ALIAS TABLABIN @@ -735,8 +735,8 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) ) - loCnv.Convertir( lc_OutputFile, .F., .F., .T. ) - loCnv.Convertir( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), .F., .F., .T. ) + loCnv.Ejecutar( lc_OutputFile, '', '', '', '0', '0', '0', '', '', .T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), '', '', '', '0', '0', '0', '', '', .T. ) SELECT 0 USE (lc_InputFile) SHARED AGAIN NOUPDATE ALIAS ARCHIVOBIN_IN @@ -819,8 +819,8 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) ) - loCnv.Convertir( lc_OutputFile, .F., .F., .T. ) - loCnv.Convertir( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), .F., .F., .T. ) + loCnv.Ejecutar( lc_OutputFile, '', '', '', '0', '0', '0', '', '', .T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), '', '', '', '0', '0', '0', '', '', .T. ) SELECT 0 USE (lc_InputFile) SHARED AGAIN NOUPDATE ALIAS ARCHIVOBIN_IN @@ -903,8 +903,8 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) ) - loCnv.Convertir( lc_OutputFile, .F., .F., .T. ) - *loCnv.Convertir( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), .F., .F., .T. ) + loCnv.Ejecutar( lc_OutputFile, '', '', '', '0', '0', '0', '', '', .T. ) + *loCnv.Ejecutar( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), '', '', '', '0', '0', '0', '', '', .T. ) *-- Comparo resultados lcTXT0 = FORCEPATH( FORCEEXT(lc_File,'VC2'), ADDBS( oFXU_LIB.cPathDatosReadOnly ) ) @@ -961,8 +961,8 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) ) - loCnv.Convertir( lc_OutputFile, .F., .F., .T. ) - loCnv.Convertir( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), .F., .F., .T. ) + loCnv.Ejecutar( lc_OutputFile, '', '', '', '0', '0', '0', '', '', .T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), '', '', '', '0', '0', '0', '', '', .T. ) SELECT 0 USE (lc_InputFile) SHARED AGAIN NOUPDATE ALIAS ARCHIVOBIN_IN diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 34ea86b..f31e509 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -487,6 +487,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM LOCAL THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF _MEMBERDATA = [] ; + + [] ; + [] ; + [] ; + [] ; @@ -665,6 +666,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM SET TABLEPROMPT OFF SET POINT TO '.' SET SEPARATOR TO ',' + ON ESCAPE ERROR 1799 + SET ESCAPE ON + lcSys16 = SYS(16) IF LEFT(lcSys16,10) == 'PROCEDURE ' @@ -699,6 +703,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CATCH FINALLY + ON ESCAPE THIS.o_FSO = NULL THIS.o_FNC = NULL ENDTRY @@ -707,6 +712,15 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC + PROCEDURE AvanceDelProceso + LPARAMETERS tcTexto, tnValor, tnTotal, tnTipo + + IF THIS.l_ShowProgress AND PEMSTATUS(THIS, 'o_Frm_Avance', 5) THEN + THIS.o_Frm_Avance.AvanceDelProceso( tcTexto, tnValor, tnTotal, tnTipo ) + ENDIF + ENDPROC + + FUNCTION get_l_ConfigEvaluated RETURN THIS.l_ConfigEvaluated ENDFUNC @@ -1223,6 +1237,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM PROCEDURE cargar_frm_avance THIS.o_Frm_Avance = CREATEOBJECT("frm_avance") + THIS.o_Frm_Avance.Show() ENDPROC @@ -1834,18 +1849,19 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM lnFileCount = ADIR( laFiles, lcFileSpec, '', 1 ) - IF .l_ShowProgress - .o_Frm_Avance.nMAX_VALUE = lnFileCount - ENDIF + *IF .l_ShowProgress + * .o_Frm_Avance.nMAX_VALUE = lnFileCount + *ENDIF FOR I = 1 TO lnFileCount lcFile = FORCEPATH( laFiles(I,1), JUSTPATH( lcFileSpec ) ) - .o_Frm_Avance.lbl_TAREA.CAPTION = C_PROCESSING_LOC + ' ' + lcFile + '...' - .o_Frm_Avance.nVALUE = I + *.o_Frm_Avance.lbl_TAREA.CAPTION = C_PROCESSING_LOC + ' ' + lcFile + '...' + *.o_Frm_Avance.nVALUE = I + .AvanceDelProceso( C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) - IF .l_ShowProgress - .o_Frm_Avance.SHOW() - ENDIF + *IF .l_ShowProgress + * .o_Frm_Avance.SHOW() + *ENDIF IF FILE( lcFile ) lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) @@ -1922,9 +1938,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM USE IN (SELECT("TABLABIN")) - IF .l_ShowProgress - .o_Frm_Avance.nMAX_VALUE = lnFileCount - ENDIF + *IF .l_ShowProgress + * .o_Frm_Avance.nMAX_VALUE = lnFileCount + *ENDIF *-- Primero convierto el proyecto *IF .TieneSoporte_Bin2Prg( UPPER(JUSTEXT(tc_InputFile)) ) @@ -1934,12 +1950,13 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- Luego convierto los archivos incluidos FOR I = 1 TO lnFileCount lcFile = laFiles(I,1) - .o_Frm_Avance.lbl_TAREA.CAPTION = C_PROCESSING_LOC + ' ' + lcFile + '...' - .o_Frm_Avance.nVALUE = I + *.o_Frm_Avance.lbl_TAREA.CAPTION = C_PROCESSING_LOC + ' ' + lcFile + '...' + *.o_Frm_Avance.nVALUE = I + .AvanceDelProceso( C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) - IF .l_ShowProgress - .o_Frm_Avance.SHOW() - ENDIF + *IF .l_ShowProgress + * .o_Frm_Avance.SHOW() + *ENDIF IF .TieneSoporte_Bin2Prg( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) @@ -1978,9 +1995,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF ENDFOR - IF .l_ShowProgress - .o_Frm_Avance.nMAX_VALUE = lnFileCount - ENDIF + *IF .l_ShowProgress + * .o_Frm_Avance.nMAX_VALUE = lnFileCount + *ENDIF *-- Primero convierto el proyecto *IF .TieneSoporte_Prg2Bin( UPPER(JUSTEXT(tc_InputFile)) ) @@ -1990,12 +2007,13 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- Luego convierto los archivos incluidos FOR I = 1 TO lnFileCount lcFile = laFiles(I) - .o_Frm_Avance.lbl_TAREA.CAPTION = C_PROCESSING_LOC + ' ' + lcFile + '...' - .o_Frm_Avance.nVALUE = I + *.o_Frm_Avance.lbl_TAREA.CAPTION = C_PROCESSING_LOC + ' ' + lcFile + '...' + *.o_Frm_Avance.nVALUE = I + .AvanceDelProceso( C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) - IF .l_ShowProgress - .o_Frm_Avance.SHOW() - ENDIF + *IF .l_ShowProgress + * .o_Frm_Avance.SHOW() + *ENDIF IF .TieneSoporte_Prg2Bin( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) @@ -2017,6 +2035,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDCASE IF FILE(tc_InputFile) + tc_InputFile = LOCFILE(tc_InputFile) ERASE ( tc_InputFile + '.ERR' ) DO CASE @@ -2101,7 +2120,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM TRY LOCAL lnCodError, lcErrorInfo, laDirFile(1,5), lcExtension, lnFileCount, laFiles(1,1), I ; - , ltFilestamp, lcExtA, lcExtB ; + , ltFilestamp, lcExtA, lcExtB, laEvents(1,1) ; , loFSO AS Scripting.FileSystemObject lnCodError = 0 @@ -2353,6 +2372,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .o_Conversor.c_OriginalFileName = .c_OriginalFileName .o_Conversor.c_Foxbin2prg_FullPath = .c_Foxbin2prg_FullPath *-- + .AvanceDelProceso( C_PROCESSING_LOC + ' ' + .c_InputFile + '...', 1, 1, 0 ) + BINDEVENT( .o_Conversor, 'AvanceDelProceso', THIS, 'AvanceDelProceso' ) + .o_Conversor.Convertir( @toModulo, .F., THIS ) .c_TextLog = .c_TextLog + CR_LF + .o_Conversor.c_TextLog && Recojo el LOG que haya generado el conversor ELSE @@ -2379,6 +2401,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF FINALLY + IF AEVENTS( laEvents, THIS.o_Conversor ) > 0 THEN + UNBINDEVENTS( THIS.o_Conversor ) + ENDIF loFSO = NULL THIS.o_Conversor = NULL @@ -2671,62 +2696,143 @@ ENDDEFINE ******************************************************************************************************************* DEFINE CLASS frm_avance AS FORM - HEIGHT = 79 - WIDTH = 628 - SHOWWINDOW = 2 - DOCREATE = .T. - AUTOCENTER = .T. - BORDERSTYLE = 2 + Height = 100 + Width = 628 + ShowWindow = 2 + DoCreate = .T. + AutoCenter = .T. + BorderStyle = 2 CAPTION = C_PROCESS_PROGRESS_LOC + ' ' - CONTROLBOX = .F. - BACKCOLOR = RGB(255,255,255) - nMAX_VALUE = 100 - nVALUE = 0 - NAME = "FRM_AVANCE" + ControlBox = .F. + BackColor = RGB(255,255,255) + nmax_value = 100 + nmax_value2 = 100 + nvalue = 0 + nvalue2 = 0 + Name = "frm_avance" + _memberdata = [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] - ADD OBJECT shp_base AS SHAPE WITH ; - TOP = 50, ; - LEFT = 12, ; - HEIGHT = 13, ; - WIDTH = 601, ; - CURVATURE = 15, ; - NAME = "shp_base" + ADD OBJECT shp_base AS shape WITH ; + Top = 32, ; + Left = 12, ; + Height = 13, ; + Width = 604, ; + Curvature = 15, ; + Name = "shp_base" - ADD OBJECT shp_avance AS SHAPE WITH ; - TOP = 50, ; - LEFT = 12, ; - HEIGHT = 13, ; - WIDTH = 36, ; - CURVATURE = 15, ; - BACKCOLOR = RGB(255,255,128), ; - BORDERCOLOR = RGB(255,0,0), ; - NAME = "shp_Avance" + ADD OBJECT shp_avance AS shape WITH ; + Top = 32, ; + Left = 12, ; + Height = 13, ; + Width = 36, ; + Curvature = 15, ; + BackColor = RGB(255,255,128), ; + BorderColor = RGB(255,0,0), ; + Name = "shp_Avance" - ADD OBJECT lbl_TAREA AS LABEL WITH ; - BACKSTYLE = 0, ; - CAPTION = ".", ; - HEIGHT = 17, ; - LEFT = 12, ; - TOP = 20, ; - WIDTH = 604, ; - NAME = "lbl_Tarea" + ADD OBJECT lbl_tarea AS label WITH ; + BackStyle = 0, ; + Caption = ".", ; + Height = 17, ; + Left = 12, ; + Top = 12, ; + Width = 604, ; + Name = "lbl_Tarea" + + + ADD OBJECT shp_base2 AS shape WITH ; + Top = 68, ; + Left = 12, ; + Height = 13, ; + Width = 604, ; + Curvature = 15, ; + Name = "shp_base2" + + + ADD OBJECT shp_avance2 AS shape WITH ; + Top = 68, ; + Left = 12, ; + Height = 13, ; + Width = 36, ; + Curvature = 15, ; + BackColor = RGB(255,255,128), ; + BorderColor = RGB(255,0,0), ; + Name = "shp_Avance2" + + + ADD OBJECT lbl_tarea2 AS label WITH ; + BackStyle = 0, ; + Caption = ".", ; + Height = 17, ; + Left = 12, ; + Top = 48, ; + Width = 604, ; + Name = "lbl_Tarea2" + + + PROCEDURE AvanceDelProceso + LPARAMETERS tcTexto, tnValor, tnTotal, tnTipo + + WITH THIS AS frm_avance OF foxbin2prg.prg + DO CASE + CASE tnTipo = 0 + .lbl_tarea.Caption = tcTexto + .nMax_Value = tnTotal + .nValue = tnValor + + CASE tnTipo = 1 + .lbl_tarea2.Caption = tcTexto + .nMax_Value2 = tnTotal + .nValue2 = tnValor + + CASE tnTipo = 2 + .lbl_tarea2.Caption = tcTexto + .nMax_Value2 = tnTotal + .nValue2 = tnValor + + ENDCASE + ENDWITH && THIS + + RETURN + ENDPROC PROCEDURE nvalue_assign LPARAMETERS vNewVal WITH THIS - .nVALUE = m.vNewVal - .shp_avance.WIDTH = m.vNewVal * .shp_base.WIDTH / .nMAX_VALUE + .nValue = m.vNewVal + .shp_avance.WIDTH = m.vNewVal * .shp_base.WIDTH / .nMax_Value ENDWITH ENDPROC - PROCEDURE INIT - THIS.nVALUE = 0 + PROCEDURE Init + THIS.nValue = 0 + THIS.nValue2 = 0 + ENDPROC + + + PROCEDURE nvalue2_assign + LPARAMETERS vNewVal + + WITH THIS + .nValue2 = m.vNewVal + .shp_avance2.WIDTH = m.vNewVal * .shp_base2.WIDTH / .nMax_Value2 + ENDWITH ENDPROC @@ -2954,7 +3060,7 @@ DEFINE CLASS c_conversor_base AS SESSION PROCEDURE AvanceDelProceso - LPARAMETERS tcTexto, tnValor, tnTotal + LPARAMETERS tcTexto, tnValor, tnTotal, tnTipo ENDPROC @@ -3181,9 +3287,10 @@ DEFINE CLASS c_conversor_base AS SESSION lcValue = '' FOR I = 1 TO OCCURS( '/>', tcValue ) - TEXT TO lcValue TEXTMERGE ADDITIVE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <', I, 1+4 ), CR_LF, ' ' )>> - ENDTEXT + *TEXT TO lcValue TEXTMERGE ADDITIVE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <', I, 1+4 ), CR_LF, ' ' )>> + *ENDTEXT + lcValue = lcValue + CHR(13) + CHR(10) + CHRTRAN( STREXTRACT( tcValue, '', I, 1+4 ), CR_LF, ' ' ) ENDFOR TEXT TO tcValue TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 @@ -3697,9 +3804,10 @@ DEFINE CLASS c_conversor_base AS SESSION lcValue = '' FOR I = 1 TO OCCURS( '/>', tcValue ) - TEXT TO lcValue TEXTMERGE ADDITIVE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <', I, 1+4 ), CR_LF, ' ' )>> - ENDTEXT + *TEXT TO lcValue TEXTMERGE ADDITIVE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> <', I, 1+4 ), CR_LF, ' ' )>> + *ENDTEXT + lcValue = lcValue + CHR(13) + CHR(10) + CHR(9) + CHR(9) + CHRTRAN( STREXTRACT( tcValue, '', I, 1+4 ), CR_LF, ' ' ) ENDFOR TEXT TO tcValue TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 @@ -4733,6 +4841,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base lcMemo = '' IF toClase._Prop_Count > 0 + THIS.AvanceDelProceso( 'Generating Props for Class ' + toClase._Nombre + '...', 0, 1, 2 ) THIS.c_ClaseActual = LOWER(toClase._BaseClass) DIMENSION laPropsAndValues( toClase._Prop_Count, 3 ) ACOPY( toClase._Props, laPropsAndValues ) @@ -4812,44 +4921,53 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base lcMemo = '' *-- Recorrer los métodos - FOR I = 1 TO toClase._Procedure_Count - loProcedure = NULL - loProcedure = toClase._Procedures(I) + WITH THIS AS c_conversor_prg_a_bin OF foxbin2prg.prg + FOR I = 1 TO toClase._Procedure_Count + loProcedure = NULL + loProcedure = toClase._Procedures(I) - IF loProcedure._ProcLine_Count > 0 THEN - IF '.' $ loProcedure._Nombre - *-- cboNombre.InteractiveChange ==> No debe acortarse por ser método modificado de combobox heredado de la clase - *-- cntDatos.txtEdad.Valid ==> Debe acortarse si cntDatos es un objeto existente - lcNombreObjeto = LEFT( loProcedure._Nombre, AT('.', loProcedure._Nombre) - 1 ) + IF loProcedure._ProcLine_Count > 0 THEN + .AvanceDelProceso( 'Generating Procedure ' + toClase._Nombre + '.' + loProcedure._Nombre + '...', I, toClase._Procedure_Count, 2 ) - IF THIS.buscarObjetoDelMetodoPorNombre( lcNombreObjeto, toClase ) = 0 + IF '.' $ loProcedure._Nombre + *-- cboNombre.InteractiveChange ==> No debe acortarse por ser método modificado de combobox heredado de la clase + *-- cntDatos.txtEdad.Valid ==> Debe acortarse si cntDatos es un objeto existente + lcNombreObjeto = LEFT( loProcedure._Nombre, AT('.', loProcedure._Nombre) - 1 ) + + IF .buscarObjetoDelMetodoPorNombre( lcNombreObjeto, toClase ) = 0 + TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 + <> <> + ENDTEXT + *lcMemo = lcMemo + C_PROCEDURE + ' ' + loProcedure._Nombre + ELSE + TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 + <> <> + ENDTEXT + *lcMemo = lcMemo + C_PROCEDURE + ' ' + SUBSTR( loProcedure._Nombre, AT('.', loProcedure._Nombre) + 1 ) + ENDIF + ELSE TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 <> <> ENDTEXT - ELSE - TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 - <> <> - ENDTEXT + *lcMemo = lcMemo + C_PROCEDURE + ' ' + loProcedure._Nombre ENDIF - ELSE - TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 - <> <> + + *-- Incluir las líneas del método + *.AvanceDelProceso( 'Generating Lines of Procedure ' + toClase._Nombre + '.' + loProcedure._Nombre + '...', I, toClase._Procedure_Count, 2 ) + FOR X = 1 TO loProcedure._ProcLine_Count + *TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <> + *ENDTEXT + lcMemo = lcMemo + CHR(13) + CHR(10) + loProcedure._ProcLines(X) + ENDFOR + + TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <> + <<>> ENDTEXT ENDIF - - *-- Incluir las líneas del método - FOR X = 1 TO loProcedure._ProcLine_Count - TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <> - ENDTEXT - ENDFOR - - TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <> - <<>> - ENDTEXT - ENDIF - ENDFOR + ENDFOR + ENDWITH loProcedure = NULL RELEASE toClase, I, X, lcNombreObjeto, loProcedure @@ -4871,6 +4989,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base lcMemo = '' *-- Recorrer los métodos + THIS.AvanceDelProceso( 'Generating Object Methods for ' + toClase._Nombre + '.' + toObjeto._ObjName + '...', 0, 1, 2 ) FOR I = 1 TO toObjeto._Procedure_Count loProcedure = NULL loProcedure = toObjeto._Procedures(I) @@ -4881,9 +5000,10 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base *-- Incluir las líneas del método FOR X = 1 TO loProcedure._ProcLine_Count - TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <> - ENDTEXT + *TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <> + *ENDTEXT + lcMemo = lcMemo + CHR(13) + CHR(10) + loProcedure._ProcLines(X) ENDFOR TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 @@ -5325,54 +5445,55 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base IF LEFT( tcLine, 11 ) == 'ADD OBJECT ' *-- Estructura a reconocer: ADD OBJECT 'frm_a.Check1' AS check [WITH] - llBloqueEncontrado = .T. - LOCAL laPropsAndValues(1,2), lnPropsAndValues_Count, Z, lcProp, lcValue, lcNombre, lcObjName - tcLine = CHRTRAN( tcLine, ['], ["] ) + WITH THIS AS c_conversor_prg_a_bin OF foxbin2prg.prg + llBloqueEncontrado = .T. + LOCAL laPropsAndValues(1,2), lnPropsAndValues_Count, Z, lcProp, lcValue, lcNombre, lcObjName + tcLine = CHRTRAN( tcLine, ['], ["] ) - IF EMPTY(toClase._Fin_Cab) - toClase._Fin_Cab = I-1 - toClase._Ini_Cuerpo = I - ENDIF + IF EMPTY(toClase._Fin_Cab) + toClase._Fin_Cab = I-1 + toClase._Ini_Cuerpo = I + ENDIF - toObjeto = NULL - lcNombre = ALLTRIM( CHRTRAN( STREXTRACT(tcLine, 'ADD OBJECT ', ' AS ', 1, 1), ['"], [] ) ) - lcObjName = JUSTEXT( '.' + lcNombre ) + toObjeto = NULL + lcNombre = ALLTRIM( CHRTRAN( STREXTRACT(tcLine, 'ADD OBJECT ', ' AS ', 1, 1), ['"], [] ) ) + lcObjName = JUSTEXT( '.' + lcNombre ) + .AvanceDelProceso( 'Analyzing Block Add Object ' + toClase._Nombre + '.' + lcObjName + '...', I, tnCodeLines, 1 ) - IF toClase.l_ObjectMetadataInHeader - FOR Z = 1 TO toClase._AddObject_Count - IF LOWER(toClase._AddObjects(Z)._Nombre) == LOWER(lcNombre) THEN - toObjeto = toClase._AddObjects(Z) - EXIT - ENDIF - ENDFOR - ENDIF + IF toClase.l_ObjectMetadataInHeader + FOR Z = 1 TO toClase._AddObject_Count + IF LOWER(toClase._AddObjects(Z)._Nombre) == LOWER(lcNombre) THEN + toObjeto = toClase._AddObjects(Z) + EXIT + ENDIF + ENDFOR + ENDIF - IF ISNULL(toObjeto) - toObjeto = CREATEOBJECT('CL_OBJETO') - *-- Luego se reasigna el ZOrder, pero si no lo hace, se pone último como si se acabara de agregar. - *-- Puede pasar si se agrega manualmente al TX2 y se olvida agregar la metadata OBJECTDATA. - toObjeto._ZOrder = 9999 - toObjeto._Nombre = lcNombre - ENDIF + IF ISNULL(toObjeto) + toObjeto = CREATEOBJECT('CL_OBJETO') + *-- Luego se reasigna el ZOrder, pero si no lo hace, se pone último como si se acabara de agregar. + *-- Puede pasar si se agrega manualmente al TX2 y se olvida agregar la metadata OBJECTDATA. + toObjeto._ZOrder = 9999 + toObjeto._Nombre = lcNombre + ENDIF - toObjeto._ObjName = lcObjName + toObjeto._ObjName = lcObjName - IF '.' $ toObjeto._Nombre - toObjeto._Parent = toClase._ObjName + '.' + JUSTSTEM( toObjeto._Nombre ) - ELSE - toObjeto._Parent = toClase._ObjName - ENDIF + IF '.' $ toObjeto._Nombre + toObjeto._Parent = toClase._ObjName + '.' + JUSTSTEM( toObjeto._Nombre ) + ELSE + toObjeto._Parent = toClase._ObjName + ENDIF - toObjeto._Nombre = toObjeto._Parent + '.' + toObjeto._ObjName - toObjeto._Class = ALLTRIM( STREXTRACT(tcLine + ' WITH', ' AS ', ' WITH', 1, 1) ) + toObjeto._Nombre = toObjeto._Parent + '.' + toObjeto._ObjName + toObjeto._Class = ALLTRIM( STREXTRACT(tcLine + ' WITH', ' AS ', ' WITH', 1, 1) ) - IF NOT toClase.l_ObjectMetadataInHeader - toClase.add_Object( toObjeto ) - ENDIF + IF NOT toClase.l_ObjectMetadataInHeader + toClase.add_Object( toObjeto ) + ENDIF - *-- Propiedades del ADD OBJECT - WITH THIS + *-- Propiedades del ADD OBJECT FOR I = I + 1 TO tnCodeLines .set_Line( @tcLine, @taCodeLines, I ) @@ -6043,6 +6164,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base IF llBloqueEncontrado *-- Evalúo todo el contenido del PROCEDURE + THIS.AvanceDelProceso( 'Analyzing Procedure ' + toClase._Nombre + '.' + tcProcedureAbierto + '...', I, tnCodeLines, 1 ) THIS.analizarLineasDeProcedure( @toClase, @toObjeto, @tcLine, @taCodeLines, @I, @tnCodeLines, @tcProcedureAbierto ; , @tc_Comentario, @taLineasExclusion, @tnBloquesExclusion ) ENDIF @@ -6452,8 +6574,10 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + .AvanceDelProceso( 'Identifying Header Blocks...', 1, lnCodeLines, 1 ) .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) + .AvanceDelProceso( 'Loading Code...', 2, lnCodeLines, 1 ) IF toFoxBin2Prg.l_UseClassPerFile *-- Esto crea la máscara de búsqueda "filename.*.ext" para encontrar las partes lcInputFile = FORCEPATH( JUSTSTEM( .c_InputFile ), JUSTPATH( .c_InputFile ) ) + '.*.' + JUSTEXT( .c_InputFile ) @@ -6477,11 +6601,13 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin .n_Avance_Maximo = lnCodeLines *-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF + .AvanceDelProceso( 'Identifying Excluded Blocks...', 3, lnCodeLines, 1 ) .identificarBloquesDeExclusion( @laCodeLines, lnCodeLines, .F., @laLineasExclusion, @lnBloquesExclusion ) *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo de cada clase .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) + .AvanceDelProceso( 'Generating Binary...', 0, lnCodeLines, 1 ) toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) .createClasslib() @@ -6785,8 +6911,11 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + .AvanceDelProceso( 'Identifying Header Blocks...', 1, lnCodeLines, 1 ) .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) + .AvanceDelProceso( 'Loading Code...', 2, lnCodeLines, 1 ) + IF toFoxBin2Prg.l_UseClassPerFile *-- Esto crea la máscara de búsqueda "filename.*.ext" para encontrar las partes lcInputFile = FORCEPATH( JUSTSTEM( .c_InputFile ), JUSTPATH( .c_InputFile ) ) + '.*.' + JUSTEXT( .c_InputFile ) @@ -6810,11 +6939,14 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin .n_Avance_Maximo = lnCodeLines *-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF + .AvanceDelProceso( 'Identifying Excluded Blocks...', 3, lnCodeLines, 1 ) .identificarBloquesDeExclusion( @laCodeLines, lnCodeLines, .F., @laLineasExclusion, @lnBloquesExclusion ) *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo de cada clase .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) + .AvanceDelProceso( 'Generating Binary...', 0, lnCodeLines, 1 ) + toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) .createForm() @@ -7131,8 +7263,10 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin *.identificarBloquesDeExclusion( @laCodeLines, .F., @laLineasExclusion, @lnBloquesExclusion ) *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo de cada clase + .AvanceDelProceso( 'Identifying Code Blocks...', 1, 2, 1 ) .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toProject ) + .AvanceDelProceso( 'Generating Binary...', 2, 2, 1 ) .escribirArchivoBin( @toProject, toFoxBin2Prg ) ENDWITH && THIS @@ -7925,8 +8059,10 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin .createReport() *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte + .AvanceDelProceso( 'Identifying Code Blocks...', 1, 2, 1 ) .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toReport ) + .AvanceDelProceso( 'Generating Binary...', 2, 2, 1 ) .escribirArchivoBin( @toReport, toFoxBin2Prg ) ENDWITH && THIS @@ -8652,8 +8788,10 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin *.createTable() *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte + .AvanceDelProceso( 'Identifying Code Blocks...', 1, 2, 1 ) .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toDatabase ) + .AvanceDelProceso( 'Generating Binary...', 2, 2, 1 ) .escribirArchivoBin( @toDatabase, toFoxBin2Prg ) ENDWITH && THIS @@ -8831,8 +8969,10 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin .createMenu() *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte + .AvanceDelProceso( 'Identifying Code Blocks...', 1, 2, 1 ) .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toMenu ) + .AvanceDelProceso( 'Generating Binary...', 1, 2, 1 ) .escribirArchivoBin( @toMenu ) ENDWITH && THIS @@ -10040,17 +10180,19 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *-- Escribo las propiedades de la clase y sus comentarios (los comentarios aquí son redundantes) FOR I = 1 TO tnPropsAndValues_Count - TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <> = <> - ENDTEXT + *TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> <> = <> + *ENDTEXT + tcCodigo = tcCodigo + CHR(13) + CHR(10) + CHR(9) + taPropsAndValues(I,1) + ' = ' + taPropsAndValues(I,2) IF tnPropsAndComments_Count > 0 THEN lnComment = ASCAN( taPropsAndComments, taPropsAndValues(I,1), 1, 0, 1, 1+2+4+8) IF lnComment > 0 AND NOT EMPTY(taPropsAndComments(lnComment,2)) - TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 - <<>> && <> - ENDTEXT + *TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 + * <<>> && <> + *ENDTEXT + tcCodigo = tcCodigo + CHR(13) + CHR(10) + CHR(9) + CHR(9) + '&' + '& ' + taPropsAndComments(lnComment,2) ENDIF ENDIF ENDFOR @@ -10113,19 +10255,22 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base , 'p' ) IF lcType == 'p' THEN - TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> *<>: <> - ENDTEXT + *TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> *<>: <> + *ENDTEXT + tcCodigo = tcCodigo + CHR(13) + CHR(10) + CHR(9) + CHR(9) + '*' + lcType + ': ' + taPropsAndComments(I,1) ELSE - TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> *<>: <> - ENDTEXT + *TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> *<>: <> + *ENDTEXT + tcCodigo = tcCodigo + CHR(13) + CHR(10) + CHR(9) + CHR(9) + '*' + lcType + ': ' + SUBSTR( taPropsAndComments(I,1), 2) ENDIF IF NOT EMPTY(taPropsAndComments(I,2)) - TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 - <<>> <<'&'>><<'&'>> <> - ENDTEXT + *TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 + * <<>> <<'&'>><<'&'>> <> + *ENDTEXT + tcCodigo = tcCodigo + CHR(9) + CHR(9) + '&' + '& ' + taPropsAndComments(I,2) ENDIF ENDFOR @@ -10889,7 +11034,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg LOCAL lnCodError, loRegClass, loRegObj, lnMethodCount, laMethods(1), laCode(1), laProtected(1), lnLen, lnObjCount ; , laPropsAndValues(1), laPropsAndComments(1), lnLastClass, lnRecno, lcMethods, lcObjName, la_NombresObjsOle(1) ; , laObjs(1,3), I, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count, lcCodigo, laClasses(1,2) ; - , lnClassCount, lcOutputFile, lcExternalHeader + , lnClassCount, lcOutputFile, lcExternalHeader, lnClassTotal STORE 0 TO lnCodError, lnLastClass, lnObjCount, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count ; , lnMethodCount, lnClassCount STORE '' TO laMethods, laCode, laProtected, laPropsAndComments, laObjs, lcCodigo, laClasses, lcOutputFile ; @@ -10928,6 +11073,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg ENDTEXT ENDIF + COUNT ALL FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND PROPER( TABLABIN.RESERVED1 ) == "Class" TO lnClassTotal SCAN ALL FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND PROPER( TABLABIN.RESERVED1 ) == "Class" STORE 0 TO lnMethodCount @@ -10954,6 +11100,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg lcObjName = ALLTRIM( loRegClass.OBJNAME ) laClasses(lnClassCount,1) = LOWER( lcObjName ) + .AvanceDelProceso( 'Processing Class ' + lcObjName + '...', lnClassCount, lnClassTotal, 1 ) .write_DEFINE_CLASS( @la_NombresObjsOle, @loRegClass, @lcCodigo ) @@ -11079,6 +11226,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg ENDIF *-- Genero el VC2 + .AvanceDelProceso( 'Writing VC2...', 2, 2, 1 ) lcOutputFile = .c_OutputFile lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + lcExternalHeader + C_FB2PRG_CODE @@ -11156,7 +11304,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg LOCAL lnCodError, loRegClass, loRegObj, lnMethodCount, laMethods(1), laCode(1), laProtected(1), lnLen, lnObjCount ; , laPropsAndValues(1), laPropsAndComments(1), lnLastClass, lnRecno, lcMethods, lcObjName, la_NombresObjsOle(1) ; , laObjs(1,3), I, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count, lcCodigo, laClasses(1,2) ; - , lnClassCount, lcOutputFile, lcExternalHeader + , lnClassCount, lcOutputFile, lcExternalHeader, lnClassTotal STORE 0 TO lnCodError, lnLastClass, lnObjCount, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count ; , lnMethodCount, lnClassCount STORE '' TO laMethods, laCode, laProtected, laPropsAndComments, laObjs, lcCodigo, laClasses, lcOutputFile ; @@ -11206,6 +11354,10 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg ENDIF + COUNT ALL FOR TABLABIN.PLATFORM = "WINDOWS" ; + AND ( EMPTY( TABLABIN.PARENT ) ; + AND INLIST( LOWER( TABLABIN.BASECLASS ), 'dataenvironment', 'form', 'formset' ) ) TO lnClassTotal + SCAN ALL FOR TABLABIN.PLATFORM = "WINDOWS" ; AND ( EMPTY( TABLABIN.PARENT ) ; AND INLIST( LOWER( TABLABIN.BASECLASS ), 'dataenvironment', 'form', 'formset' ) ) @@ -11234,6 +11386,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg lcObjName = ALLTRIM(loRegClass.OBJNAME) laClasses(lnClassCount,1) = LOWER( lcObjName ) + .AvanceDelProceso( 'Processing Class ' + lcObjName + '...', lnClassCount, lnClassTotal, 1 ) .write_DEFINE_CLASS( @la_NombresObjsOle, @loRegClass, @lcCodigo ) @@ -11362,6 +11515,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg ENDIF *-- Genero el SC2 + .AvanceDelProceso( 'Writing SC2...', 2, 2, 1 ) lcOutputFile = .c_OutputFile lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + lcExternalHeader + C_FB2PRG_CODE @@ -11449,6 +11603,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg USE IN (SELECT("_TABLAORIG")) loServerHead = CREATEOBJECT('CL_PROJ_SRV_HEAD') + .AvanceDelProceso( 'Processing Project ' + '...', 1, 2, 1 ) *-- Obtengo los archivos del proyecto @@ -11614,9 +11769,10 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg FOR EACH loReg IN loProject &&FOXOBJECT IF NOT EMPTY(loReg.COMMENTS) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .ITEM(lcCurdir + '<>').Description = '<>' - ENDTEXT + *TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> .ITEM(lcCurdir + '<>').Description = '<>' + *ENDTEXT + C_FB2PRG_CODE = C_FB2PRG_CODE + CHR(13) + CHR(10) + CHR(9) + ".ITEM(lcCurdir + '" + loReg.NAME + "').Description = '" + loReg.COMMENTS + "'" ENDIF loReg = NULL ENDFOR @@ -11633,9 +11789,10 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg FOR EACH loReg IN loProject &&FOXOBJECT IF loReg.EXCLUDE - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .ITEM(lcCurdir + '<>').Exclude = .T. - ENDTEXT + *TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> .ITEM(lcCurdir + '<>').Exclude = .T. + *ENDTEXT + C_FB2PRG_CODE = C_FB2PRG_CODE + CHR(13) + CHR(10) + CHR(9) + ".ITEM(lcCurdir + '" + loReg.NAME + "').Exclude = .T." ENDIF loReg = NULL ENDFOR @@ -11652,9 +11809,10 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg FOR EACH loReg IN loProject &&FOXOBJECT IF INLIST( UPPER( JUSTEXT( loReg.NAME ) ), 'H','FPW' ) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .ITEM(lcCurdir + '<>').Type = 'T' - ENDTEXT + *TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> .ITEM(lcCurdir + '<>').Type = 'T' + *ENDTEXT + C_FB2PRG_CODE = C_FB2PRG_CODE + CHR(13) + CHR(10) + CHR(9) + ".ITEM(lcCurdir + '" + loReg.NAME + "').Type = 'T'" ENDIF loReg = NULL ENDFOR @@ -11711,6 +11869,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg *-- Genero el PJ2 + .AvanceDelProceso( 'Writing PJ2...', 2, 2, 1 ) IF .l_Test toModulo = C_FB2PRG_CODE ELSE @@ -11778,6 +11937,7 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg STORE NULL TO loProject, loReg, loServerHead, loServerData lcStrPJM = FILETOSTR( THIS.c_InputFile ) loServerHead = CREATEOBJECT('CL_PROJ_SRV_HEAD') + THIS.AvanceDelProceso( 'Scanning PJM...', 1, 2, 1 ) *-- Obtengo los archivos del proyecto @@ -11988,9 +12148,10 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg FOR EACH loReg IN loProject &&FOXOBJECT IF NOT EMPTY(loReg.COMMENTS) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .ITEM(lcCurdir + '<>').Description = '<>' - ENDTEXT + *TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> .ITEM(lcCurdir + '<>').Description = '<>' + *ENDTEXT + C_FB2PRG_CODE = C_FB2PRG_CODE + CHR(13) + CHR(10) + CHR(9) + ".ITEM(lcCurdir + '" + loReg.NAME + "').Description = '" + loReg.COMMENTS + "'" ENDIF ENDFOR @@ -12006,9 +12167,10 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg FOR EACH loReg IN loProject &&FOXOBJECT IF loReg.EXCLUDE - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .ITEM(lcCurdir + '<>').Exclude = .T. - ENDTEXT + *TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> .ITEM(lcCurdir + '<>').Exclude = .T. + *ENDTEXT + C_FB2PRG_CODE = C_FB2PRG_CODE + CHR(13) + CHR(10) + CHR(9) + ".ITEM(lcCurdir + '" + loReg.NAME + "').Exclude = .T." ENDIF loReg = NULL ENDFOR @@ -12025,9 +12187,10 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg FOR EACH loReg IN loProject &&FOXOBJECT IF INLIST( UPPER( JUSTEXT( loReg.NAME ) ), 'H','FPW' ) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .ITEM(lcCurdir + '<>').Type = 'T' - ENDTEXT + *TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> .ITEM(lcCurdir + '<>').Type = 'T' + *ENDTEXT + C_FB2PRG_CODE = C_FB2PRG_CODE + CHR(13) + CHR(10) + CHR(9) + ".ITEM(lcCurdir + '" + loReg.NAME + "').Type = 'T'" ENDIF loReg = NULL ENDFOR @@ -12083,6 +12246,7 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg *-- Genero el PJ2 + .AvanceDelProceso( 'Writing PJ2...', 2, 2, 1 ) IF .l_Test toModulo = C_FB2PRG_CODE ELSE @@ -12156,6 +12320,7 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN_0 .n_Avance_Maximo = _TALLY USE IN (SELECT("_TABLAORIG")) + THIS.AvanceDelProceso( 'Scanning FRX...', 1, 2, 1 ) *-- Header LOCATE FOR ObjType = 1 @@ -12250,6 +12415,7 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg *-- Genero el FR2 + .AvanceDelProceso( 'Writing FR2...', 2, 2, 1 ) IF .l_Test toModulo = C_FB2PRG_CODE ELSE @@ -12311,6 +12477,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg WITH THIS AS c_conversor_dbf_a_prg OF 'FOXBIN2PRG.PRG' *-- EVALUAR OPCIONES ESPECÍFICAS DE DBF + .AvanceDelProceso( 'Scanning DBF Structure...', 1, 2, 1 ) *-- Include IF NOT EMPTY(toFoxBin2Prg.DBF_Conversion_Included) AND NOT toFoxBin2Prg.DBF_Conversion_Included == '*' ; @@ -12353,6 +12520,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg *-- Genero el DB2, renombrando el TMP + .AvanceDelProceso( 'Writing DB2...', 2, 2, 1 ) IF .l_Test toModulo = C_FB2PRG_CODE ELSE @@ -12374,6 +12542,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg *-- Genero el DB2 + .AvanceDelProceso( 'Writing DB2...', 2, 2, 1 ) IF .l_Test toModulo = C_FB2PRG_CODE ELSE @@ -12475,6 +12644,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS TABLABIN OPEN DATABASE (.c_InputFile) SHARED NOUPDATE + .AvanceDelProceso( 'Analyzing DBC metadata...', 1, 2, 1 ) C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() @@ -12484,6 +12654,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg *-- Genero el DC2 + .AvanceDelProceso( 'Writing DC2...', 2, 2, 1 ) IF .l_Test toModulo = C_FB2PRG_CODE ELSE @@ -12542,6 +12713,7 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN .n_Avance_Maximo = _TALLY USE IN (SELECT("_TABLAORIG")) + .AvanceDelProceso( 'Analyzing MNX...', 2, 2, 1 ) *-- Verificación de menú VFP 9 IF FCOUNT() < 25 OR EMPTY(FIELD("RESNAME")) OR EMPTY(FIELD("SYSRES")) @@ -12558,6 +12730,7 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg *-- Genero el MN2 + .AvanceDelProceso( 'Writing MN2...', 2, 2, 1 ) IF .l_Test toMenu = C_FB2PRG_CODE ELSE From cd23962bf256ba2ffb1d768b3eab439cddd46dd8 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 29 Nov 2014 14:19:12 +0100 Subject: [PATCH 14/25] =?UTF-8?q?Changeset:=20525=20fdbozzo=20-=2029/11/20?= =?UTF-8?q?14=2004:13:08:=20-=20Arreglo=20para=20detecci=C3=B3n=20de=20END?= =?UTF-8?q?PROC=20redundantes=20-=20Arreglo=20de=20comentario=20PAM=20fuer?= =?UTF-8?q?a=20de=20l=C3=ADnea?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index f31e509..3716cb8 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -9952,6 +9952,10 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base lcLine = UPPER( CHRTRAN( laLine(I) , '&'+CHR(9)+CHR(0), ' ') ) + ' ' IF lnLine_Len >= 7 AND LEFT(lcLine,8) == 'ENDPROC ' *-- Es el final de estructura ENDPROC + IF NOT llProcOpen + *-- Esto no es normal, porque hay más de un ENDPROC, por lo que se ignora. + LOOP + ENDIF ELSE *-- Es otra cosa (variable, etc) taCode(tnMethodCount) = taCode(tnMethodCount) + laLine(I) + CR_LF @@ -9965,6 +9969,10 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base lcLine = UPPER( CHRTRAN( laLine(I) , '&'+CHR(9)+CHR(0), ' ') ) + ' ' IF lnLine_Len >= 7 AND LEFT(lcLine,8) == 'ENDFUNC ' *-- Es el final de estructura ENDPROC + IF NOT llProcOpen + *-- Esto no es normal, porque hay más de un ENDFUNC, por lo que se ignora. + LOOP + ENDIF laLine(I) = STRTRAN( laLine(I), 'ENDFUNC', 'ENDPROC' ) ELSE *-- Es otra cosa (variable, etc) @@ -10192,7 +10200,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 * <<>> && <> *ENDTEXT - tcCodigo = tcCodigo + CHR(13) + CHR(10) + CHR(9) + CHR(9) + '&' + '& ' + taPropsAndComments(lnComment,2) + tcCodigo = tcCodigo + CHR(9) + CHR(9) + '&' + '& ' + taPropsAndComments(lnComment,2) ENDIF ENDIF ENDFOR From 702840ebf689f152a5c533227c510f5d64b04eee Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 29 Nov 2014 15:56:15 +0100 Subject: [PATCH 15/25] =?UTF-8?q?Changeset:=20526=20fdbozzo=20-=2029/11/20?= =?UTF-8?q?14=2014:19:13:=20-=20Normalizaci=C3=B3n=20capitalizaci=C3=B3n?= =?UTF-8?q?=20nombre=20clases=20a=20min=C3=BAsculas=20(por=20compatibilida?= =?UTF-8?q?d=20con=20FoxBin2Prg=20anteriores)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 3716cb8..7790ce0 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -5301,7 +5301,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base FOR EACH loObjeto IN toClase._AddObjects FOXOBJECT *-- Verifico que sea el objeto que corresponde - IF loObjeto._WriteOrder = 0 AND loObjeto._Nombre == lcObjName + IF loObjeto._WriteOrder = 0 AND LOWER(loObjeto._Nombre) == LOWER(lcObjName) N = N + 1 loObjeto._WriteOrder = N .insert_Object( toClase, loObjeto, toFoxBin2Prg ) @@ -5688,7 +5688,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base STORE '' TO tcProcedureAbierto toClase = CREATEOBJECT('CL_CLASE') toClase._Nombre = LOWER( ALLTRIM( STREXTRACT( tcLine, 'DEFINE CLASS ', ' AS ', 1, 1 ) ) ) - toClase._ObjName = toClase._Nombre + toClase._ObjName = LOWER( toClase._Nombre ) toClase._Definicion = ALLTRIM( tcLine ) IF NOT ' OF ' $ UPPER(tcLine) && Puede no tener "OF libreria.vcx" toClase._Class = ALLTRIM( CHRTRAN( STREXTRACT( tcLine + ' OLEPUBLIC', ' AS ', ' OLEPUBLIC', 1, 1 ), ["'], [] ) ) @@ -9254,7 +9254,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base CASE '.' $ toRegObj.PARENT lcMethodName = SUBSTR(toRegObj.PARENT, AT('.', toRegObj.PARENT) + 1) + '.' + toRegObj.OBJNAME + '.' + taMethods(I,1) - CASE LEFT(toRegObj.PARENT + '.', LEN( toRegClass.OBJNAME + '.' ) ) == toRegClass.OBJNAME + '.' + CASE LOWER( LEFT(toRegObj.PARENT + '.', LEN( toRegClass.OBJNAME + '.' ) ) ) == LOWER( toRegClass.OBJNAME + '.' ) lcMethodName = toRegObj.OBJNAME + '.' + taMethods(I,1) OTHERWISE @@ -11096,6 +11096,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg loRegClass.BASECLASS = LOWER( loRegClass.BASECLASS ) loRegClass.CLASSLOC = LOWER( loRegClass.CLASSLOC ) loRegClass.CLASS = LOWER( loRegClass.CLASS ) + loRegClass.OBJNAME = LOWER( loRegClass.OBJNAME ) IF toFoxBin2Prg.l_NoTimestamps loRegClass.TIMESTAMP = 0 @@ -11382,6 +11383,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg loRegClass.BASECLASS = LOWER( loRegClass.BASECLASS ) loRegClass.CLASSLOC = LOWER( loRegClass.CLASSLOC ) loRegClass.CLASS = LOWER( loRegClass.CLASS ) + loRegClass.OBJNAME = LOWER( loRegClass.OBJNAME ) IF toFoxBin2Prg.l_NoTimestamps loRegClass.TIMESTAMP = 0 From 4d0535e501f3f0fcafd371ac6a54ba6d6d74db7e Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 29 Nov 2014 16:20:39 +0100 Subject: [PATCH 16/25] Changeset: 527 fdbozzo - 29/11/2014 15:56:16: - Nuevo: AutoFix para propiedades partidas debido a ediciones manuales del scx/vcx --- foxbin2prg.prg | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 7790ce0..53bb96b 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -9458,8 +9458,8 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base EXTERNAL ARRAY taPropsAndValues TRY - LOCAL laItems(1), I, X, lnLenAcum, lnPosEQ, lcPropName, lnLenVal, lcValue, lcMethods - tcSortedMemo = '' + LOCAL laItems(1), I, X, lnLenAcum, lnPosEQ, lcPropName, lnLenVal, lcValue, lcMethods, lcLastIncompletePropName + STORE '' TO tcSortedMemo, lcLastIncompletePropName tnPropsAndValues_Count = 0 IF NOT EMPTY(m.tcMemo) @@ -9480,14 +9480,11 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base LOOP ENDIF - X = X + 1 - DIMENSION taPropsAndValues(X,2) - IF C_MPROPHEADER $ laItems(I) *-- Solo entrará por aquí cuando se evalúe una propiedad de PROPERTIES con un valor especial (largo) lnLenAcum = 0 lnPosEQ = AT( '=', laItems(I) ) - lcPropName = LEFT( laItems(I), lnPosEQ - 2 ) + lcPropName = lcLastIncompletePropName + LEFT( laItems(I), lnPosEQ - 2 ) lnLenVal = INT( VAL( SUBSTR( laItems(I), lnPosEQ + 2 + 517, 8) ) ) lcValue = SUBSTR( laItems(I), lnPosEQ + 2 + 517 + 8 ) @@ -9507,15 +9504,37 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDIF *-- Es un valor especial, por lo que se encapsula en un marcador especial + X = X + 1 + DIMENSION taPropsAndValues(X,2) taPropsAndValues(X,1) = lcPropName taPropsAndValues(X,2) = .normalizarValorPropiedad( lcPropName, lcValue, '' ) ELSE *-- Propiedad normal lnPosEQ = AT( '=', laItems(I) ) - taPropsAndValues(X,1) = LEFT( laItems(I), lnPosEQ - 2 ) + + IF lnPosEQ = 0 THEN + *-- AUTOFIX DE PROPIEDAD PARTIDA: + *-- Esto solo puede ocurrir cuando en el memo de Propiedades hay alguna propiedad + *-- partida debido a una edición manual con un Enter erróneo, algo como esto: + * comm + * AND2.Caption = "Command2" + * + *-- En el caso anterior, las 2 líneas son realmente una: + * command2.Caption = "Command2" + * + *-- Solución: Guardar esta parte del nombre y agregarlo a la próxima propiedad. + lcLastIncompletePropName = laItems(I) + LOOP + ENDIF + + X = X + 1 + DIMENSION taPropsAndValues(X,2) + taPropsAndValues(X,1) = lcLastIncompletePropName + LEFT( laItems(I), lnPosEQ - 2 ) taPropsAndValues(X,2) = .normalizarValorPropiedad( taPropsAndValues(X,1), LTRIM( SUBSTR( laItems(I), lnPosEQ + 2 ) ), '' ) ENDIF + + lcLastIncompletePropName = '' ENDFOR From fe40d8dd833ec298c297bda65fb2760354bfe1be Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 29 Nov 2014 16:39:19 +0100 Subject: [PATCH 17/25] =?UTF-8?q?Changeset:=20528=20fdbozzo=20-=2029/11/20?= =?UTF-8?q?14=2016:20:40:=20-=20Quitada=20la=20l=C3=ADnea=20vac=C3=ADa=20e?= =?UTF-8?q?=20la=20cabecera=20cuando=20el=20form=20tiene=20objetos=20OLE?= =?UTF-8?q?=20(bug=20del=20antiguo=20manejo=20de=20OLE=20en=20cabecera,=20?= =?UTF-8?q?antes=20de=20encapsularlo=20en=20el=20objeto=20mismo)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 53bb96b..aa8b9c6 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -10902,21 +10902,24 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *!* ENDSCAN - SELECT COUNT(*) FROM TABLABIN WHERE TABLABIN.PLATFORM = "WINDOWS" AND BASECLASS == 'olecontrol' INTO ARRAY laOLE + *-- LO QUE SIGUE LO COMENTÉ PORQUE POR CADA OBJETO OLE SE AGREGABA UNA LÍNEA VACÍA QUE QUEDA MUY MAL Y ES INNECESARIA. + *-- COMO CONSECUENCIA, LOS FORMS O CLASES CON OBJETOS OLE DARÁN DIFERENCIA POR ÚNICA VEZ EN LA CABECERA. - fdbozzo. 29/11/2014 (v1.19.37) + * + *SELECT COUNT(*) FROM TABLABIN WHERE TABLABIN.PLATFORM = "WINDOWS" AND BASECLASS == 'olecontrol' INTO ARRAY laOLE - IF laOLE(1) > 0 THEN - *-- Lo del <<>> para crear una línea vacía es solamente por compatibilidad con lo antiguo, - *-- donde se creaba esta línea cuando el form o clase tenía al menos un objeto OLE. - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - * - ENDTEXT - ELSE + *IF laOLE(1) > 0 THEN + * *-- Lo del <<>> para crear una línea vacía es solamente por compatibilidad con lo antiguo, + * *-- donde se creaba esta línea cuando el form o clase tenía al menos un objeto OLE. + * TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> + * * + * ENDTEXT + *ELSE TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 * ENDTEXT - ENDIF + *ENDIF *!* CATCH TO loEx *!* IF THIS.l_Debug AND _VFP.STARTMODE = 0 From 5af062db63b4c224d5a2431a5ac75d19e380d79b Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 29 Nov 2014 17:16:34 +0100 Subject: [PATCH 18/25] =?UTF-8?q?Changeset:=20529=20fdbozzo=20-=2029/11/20?= =?UTF-8?q?14=2016:39:20:=20-=20Arreglo=20defecto:=20Quitada=20la=20capita?= =?UTF-8?q?lizaci=C3=B3n=20a=20min=C3=BAsculas=20de=20propiedades=20Protec?= =?UTF-8?q?ted?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index aa8b9c6..711e2b8 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -9601,9 +9601,9 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base FOR I = tnProtected_Count TO 1 STEP -1 *-- El ASCAN es para evitar valores repetidos, que se eliminarán. v1.19.29 - taProtected(I) = LOWER( taProtected(I) ) + taProtected(I) = taProtected(I) IF ASCAN( taProtected, taProtected(I), 1, -1, 0, 1+2+4 ) = I - tcSortedMemo = tcSortedMemo + LOWER(taProtected(I)) + CR_LF + tcSortedMemo = tcSortedMemo + taProtected(I) + CR_LF ELSE ADEL( taProtected, I ) tnProtected_Count = tnProtected_Count - 1 From d464d6541c3da7fbd483f7ca7ab5b91b583c9db0 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 30 Nov 2014 16:32:35 +0100 Subject: [PATCH 19/25] =?UTF-8?q?Changeset:=20530=20fdbozzo=20-=2029/11/20?= =?UTF-8?q?14=2017:16:34:=20-=20Agregado=20control=20para=20detectar=20rep?= =?UTF-8?q?ortes=20no=20compatibles=20con=20VFP=209=20-=20Agregada=20posib?= =?UTF-8?q?ilidad=20de=20cancelar=20proceso=20con=20tecla=20Esc=20-=20Vari?= =?UTF-8?q?as=20mejoras=20al=20indicador=20de=20progreso=20-=20Adaptados?= =?UTF-8?q?=20los=20scripts=20vbs=20para=20el=20nuevo=20funcionamiento=20d?= =?UTF-8?q?el=20indicador=20de=20progreso=20y=20cancelaci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Convert_VFP9_BIN_2_PRG.vbs | 45 +++--- Convert_VFP9_PRG_2_BIN.vbs | 47 +++--- VFP9_FoxBin2Prg.vbs | 6 +- foxbin2prg.prg | 307 +++++++++++++++++++++++-------------- foxbin2prg_de.h | 3 +- foxbin2prg_en.h | 3 +- 6 files changed, 251 insertions(+), 160 deletions(-) diff --git a/Convert_VFP9_BIN_2_PRG.vbs b/Convert_VFP9_BIN_2_PRG.vbs index 47cc1f5..ecd0fe8 100644 --- a/Convert_VFP9_BIN_2_PRG.vbs +++ b/Convert_VFP9_BIN_2_PRG.vbs @@ -15,7 +15,7 @@ Const ForReading = 1 Dim WSHShell, FileSystemObject Dim oVFP9, nExitCode, cEXETool, cCMD, nDebug, lcExt, foxbin2prg_cfg, aFiles(), nFile_Count -Dim i, x, str_cfg, aConf, cErrMsg, cFlagGenerateLog, cFlagDontShowErrMsg, cFlagJustShowCall, cFlagRecompile, cNoTimestamps, cErrFile +Dim i, x, str_cfg, aConf, cErrMsg, cFlagGenerateLog, cFlagDontShowErrMsg, cFlagJustShowCall, cFlagRecompile, cFlagNoTimestamps, cErrFile Set WSHShell = WScript.CreateObject("WScript.Shell") Set FileSystemObject = WScript.CreateObject("Scripting.FileSystemObject") Set oVFP9 = CreateObject("VisualFoxPro.Application.9") @@ -59,8 +59,6 @@ Else oVFP9.DoCmd( "SET PROCEDURE TO '" & cEXETool & "'" ) oVFP9.DoCmd( "PUBLIC oFoxBin2prg" ) oVFP9.DoCmd( "oFoxBin2prg = CREATEOBJECT('c_foxbin2prg')" ) - '.o_FoxBin2Prg.EvaluarConfiguracion( tcDontShowProgress, tcDontShowErrors, tcNoTimestamps, tcDebug, tcRecompile, tcExtraBackupLevels ) - oVFP9.DoCmd( "oFoxBin2prg.EvaluarConfiguracion( '1', '1' )" ) oVFP9.DoCmd( "oFoxBin2prg.cargar_frm_avance()" ) For i = 0 To WScript.Arguments.Count-1 @@ -82,17 +80,11 @@ Else cFlagDontShowErrMsg = "'1'" End If If GetBit(nDebug, 5) Then - cNoTimestamps = "'1'" + cFlagNoTimestamps = "'1'" End If - oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.nMAX_VALUE = " & nFile_Count ) - oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.nVALUE = " & 0 ) - 'oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.AlwaysOnTop = .T." ) - oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.SHOW()" ) - For i = 1 To nFile_Count - oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.lbl_TAREA.CAPTION = oFoxBin2Prg.c_loc_processing_file + ' " & aFiles(i) & "...'" ) - oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.nVALUE = " & i ) + oVFP9.DoCmd( "oFoxBin2Prg.AvanceDelProceso(oFoxBin2Prg.c_loc_processing_file + ' " & aFiles(i) & "...', " & i & ", " & nFile_Count & ", 0)" ) cFlagRecompile = "'" & FileSystemObject.GetParentFolderName( aFiles(i) ) & "'" If nDebug = 0 Or nDebug = 2 Then @@ -100,22 +92,30 @@ Else Else cCMD = "oFoxBin2prg.ejecutar( '" & aFiles(i) & "','0','0','0'," _ & cFlagDontShowErrMsg & "," & cFlagGenerateLog & ",'1','','',.F.,''," _ - & cFlagRecompile & "," & cNoTimestamps & " )" + & cFlagRecompile & "," & cFlagNoTimestamps & " )" End If + If cFlagJustShowCall = "1" Then MsgBox cCMD, 64, "PARAMETERS" Else oVFP9.DoCmd( cCMD ) nExitCode = oVFP9.Eval("_SCREEN.ExitCode") End If - + + If nExitCode = 1799 Then 'Conversion cancelled by user + Exit For + End If Next - oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.HIDE()" ) - oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance = NULL" ) - If GetBit(nDebug, 4) Then - If oVFP9.Eval("oFoxBin2prg.l_Error") Then + 'If oVFP9.Eval("oFoxBin2prg.l_Error") Then + If nExitCode = 1799 Then + MsgBox "Conversion Cancelled by User!", 48, WScript.ScriptName + cErrFile = oVFP9.Eval("FORCEPATH('FoxBin2Prg.LOG',GETENV('TEMP') )") + oVFP9.DoCmd("STRTOFILE( oFoxBin2prg.c_ErrorLog, '" & cErrFile & "' )") + WSHShell.run cErrFile + + ElseIf nExitCode > 0 Then MsgBox "End of Process! (with errors)", 48, WScript.ScriptName cErrFile = oVFP9.Eval("FORCEPATH('FoxBin2Prg.LOG',GETENV('TEMP') )") oVFP9.DoCmd("STRTOFILE( oFoxBin2prg.c_ErrorLog, '" & cErrFile & "' )") @@ -126,15 +126,18 @@ Else End If oVFP9.DoCmd( "oFoxBin2prg = NULL" ) + oVFP9.DoCmd( "CLEAR ALL" ) + Set oVFP9 = Nothing End If -WScript.Quit(nExitCode) +WScript.Quit nExitCode Private Sub scanDirs( tcArgument ) Dim omFolder, oFolder If FileSystemObject.FolderExists( tcArgument ) Then '-- Es un directorio + oVFP9.DoCmd( "oFoxBin2Prg.AvanceDelProceso('Scanning file and directory information on " & tcArgument & "...', 0, 0, 0)" ) Set omFolder = FileSystemObject.GetFolder( tcArgument ) For Each oFile IN omFolder.Files evaluateFile( oFile.Path ) @@ -152,7 +155,11 @@ End Sub Private Sub evaluateFile( tcFile ) lcExt = UCase( FileSystemObject.GetExtensionName( tcFile ) ) oVFP9.SetVar "gc_Ext", lcExt - oVFP9.DoCmd( "oFoxBin2prg.EvaluarConfiguracion( '', '', '', '', '', '', '', '', '" & tcFile & "' )" ) + oVFP9.DoCmd( "oFoxBin2prg.EvaluarConfiguracion( '1', '1', '', '', '', '', '', '', '" & tcFile & "' )" ) + + 'PROCEDURE EvaluarConfiguracion + ' LPARAMETERS tcDontShowProgress, tcDontShowErrors, tcFlagNoTimestamps, tcDebug, tcRecompile, tcExtraBackupLevels ; + ' , tcClearUniqueID, tcOptimizeByFilestamp, tc_InputFile If oVFP9.Eval("oFoxBin2prg.TieneSoporte_Bin2Prg(gc_Ext)") Then nFile_Count = nFile_Count + 1 ReDim Preserve aFiles(nFile_Count) diff --git a/Convert_VFP9_PRG_2_BIN.vbs b/Convert_VFP9_PRG_2_BIN.vbs index 6f030d9..1b7d8bd 100644 --- a/Convert_VFP9_PRG_2_BIN.vbs +++ b/Convert_VFP9_PRG_2_BIN.vbs @@ -15,7 +15,7 @@ Const ForReading = 1 Dim WSHShell, FileSystemObject Dim oVFP9, nExitCode, cEXETool, cCMD, nDebug, lcExt, foxbin2prg_cfg, aFiles(), nFile_Count -Dim i, x, str_cfg, aConf, cErrMsg, cFlagGenerateLog, cFlagDontShowErrMsg, cFlagJustShowCall, cFlagRecompile, cNoTimestamps, cErrFile +Dim i, x, str_cfg, aConf, cErrMsg, cFlagGenerateLog, cFlagDontShowErrMsg, cFlagJustShowCall, cFlagRecompile, cFlagNoTimestamps, cErrFile Set WSHShell = WScript.CreateObject("WScript.Shell") Set FileSystemObject = WScript.CreateObject("Scripting.FileSystemObject") Set oVFP9 = CreateObject("VisualFoxPro.Application.9") @@ -59,8 +59,6 @@ Else oVFP9.DoCmd( "SET PROCEDURE TO '" & cEXETool & "'" ) oVFP9.DoCmd( "PUBLIC oFoxBin2prg" ) oVFP9.DoCmd( "oFoxBin2prg = CREATEOBJECT('c_foxbin2prg')" ) - '.o_FoxBin2Prg.EvaluarConfiguracion( tcDontShowProgress, tcDontShowErrors, tcNoTimestamps, tcDebug, tcRecompile, tcExtraBackupLevels ) - oVFP9.DoCmd( "oFoxBin2prg.EvaluarConfiguracion( '1', '1' )" ) oVFP9.DoCmd( "oFoxBin2prg.cargar_frm_avance()" ) For i = 0 To WScript.Arguments.Count-1 @@ -77,7 +75,6 @@ Else cFlagGenerateLog = "'0'" cFlagDontShowErrMsg = "'0'" cFlagShowCall = "'0'" - 'cFlagRecompile = "'1'" If GetBit(nDebug, 1) Then cFlagGenerateLog = "'1'" @@ -89,17 +86,11 @@ Else cFlagDontShowErrMsg = "'1'" End If If GetBit(nDebug, 5) Then - cNoTimestamps = "'1'" + cFlagNoTimestamps = "'1'" End If - oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.nMAX_VALUE = " & nFile_Count ) - oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.nVALUE = " & 0 ) - 'oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.AlwaysOnTop = .T." ) - oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.SHOW()" ) - For i = 1 To nFile_Count - oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.lbl_TAREA.CAPTION = oFoxBin2Prg.c_loc_processing_file + ' " & aFiles(i) & "...'" ) - oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.nVALUE = " & i ) + oVFP9.DoCmd( "oFoxBin2Prg.AvanceDelProceso(oFoxBin2Prg.c_loc_processing_file + ' " & aFiles(i) & "...', " & i & ", " & nFile_Count & ", 0)" ) cFlagRecompile = "'" & FileSystemObject.GetParentFolderName( aFiles(i) ) & "'" If nDebug = 0 Or nDebug = 2 Then @@ -107,22 +98,30 @@ Else Else cCMD = "oFoxBin2prg.ejecutar( '" & aFiles(i) & "','0','0','0'," _ & cFlagDontShowErrMsg & "," & cFlagGenerateLog & ",'1','','',.F.,''," _ - & cFlagRecompile & "," & cNoTimestamps & " )" + & cFlagRecompile & "," & cFlagNoTimestamps & " )" End If + If cFlagJustShowCall = "1" Then MsgBox cCMD, 64, "PARAMETERS" Else oVFP9.DoCmd( cCMD ) nExitCode = oVFP9.Eval("_SCREEN.ExitCode") End If - + + If nExitCode = 1799 Then 'Conversion cancelled by user + Exit For + End If Next - oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.HIDE()" ) - oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance = NULL" ) - If GetBit(nDebug, 4) Then - If oVFP9.Eval("oFoxBin2prg.l_Error") Then + 'If oVFP9.Eval("oFoxBin2prg.l_Error") Then + If nExitCode = 1799 Then + MsgBox "Conversion Cancelled by User!", 48, WScript.ScriptName + cErrFile = oVFP9.Eval("FORCEPATH('FoxBin2Prg.LOG',GETENV('TEMP') )") + oVFP9.DoCmd("STRTOFILE( oFoxBin2prg.c_ErrorLog, '" & cErrFile & "' )") + WSHShell.run cErrFile + + ElseIf nExitCode > 0 Then MsgBox "End of Process! (with errors)", 48, WScript.ScriptName cErrFile = oVFP9.Eval("FORCEPATH('FoxBin2Prg.LOG',GETENV('TEMP') )") oVFP9.DoCmd("STRTOFILE( oFoxBin2prg.c_ErrorLog, '" & cErrFile & "' )") @@ -133,15 +132,18 @@ Else End If oVFP9.DoCmd( "oFoxBin2prg = NULL" ) + oVFP9.DoCmd( "CLEAR ALL" ) + Set oVFP9 = Nothing End If -WScript.Quit(nExitCode) +WScript.Quit nExitCode Private Sub scanDirs( tcArgument ) Dim omFolder, oFolder If FileSystemObject.FolderExists( tcArgument ) Then '-- Es un directorio + oVFP9.DoCmd( "oFoxBin2Prg.AvanceDelProceso('Scanning file and directory information on " & tcArgument & "...', 0, 0, 0)" ) Set omFolder = FileSystemObject.GetFolder( tcArgument ) For Each oFile IN omFolder.Files evaluateFile( oFile.Path ) @@ -160,16 +162,15 @@ Private Sub evaluateFile( tcFile ) lcExt = UCase( FileSystemObject.GetExtensionName( tcFile ) ) lcFileName = FileSystemObject.GetFileName( tcFile ) laPoints = Split( lcFileName, "." ) - lnPoints = UBound(laPoint) + lnPoints = UBound(laPoints) '-- No proceso los archivos con más de un punto (clases en archivos individuales) por performance If lnPoints = 1 Then oVFP9.SetVar "gc_Ext", lcExt 'PROCEDURE EvaluarConfiguracion - ' LPARAMETERS tcDontShowProgress, tcDontShowErrors, tcNoTimestamps, tcDebug, tcRecompile, tcExtraBackupLevels ; + ' LPARAMETERS tcDontShowProgress, tcDontShowErrors, tcFlagNoTimestamps, tcDebug, tcRecompile, tcExtraBackupLevels ; ' , tcClearUniqueID, tcOptimizeByFilestamp, tc_InputFile - - oVFP9.DoCmd( "oFoxBin2prg.EvaluarConfiguracion( '', '', '', '', '', '', '', '', '" & tcFile & "' )" ) + oVFP9.DoCmd( "oFoxBin2prg.EvaluarConfiguracion( '1', '1', '', '', '', '', '', '', '" & tcFile & "' )" ) If oVFP9.Eval("oFoxBin2prg.TieneSoporte_Prg2Bin(gc_Ext)") Then nFile_Count = nFile_Count + 1 ReDim Preserve aFiles(nFile_Count) diff --git a/VFP9_FoxBin2Prg.vbs b/VFP9_FoxBin2Prg.vbs index 82340e9..73899ab 100644 --- a/VFP9_FoxBin2Prg.vbs +++ b/VFP9_FoxBin2Prg.vbs @@ -61,7 +61,7 @@ Else oVFP9.DoCmd( "SET PROCEDURE TO '" & cEXETool & "'" ) oVFP9.DoCmd( "PUBLIC oFoxBin2prg" ) oVFP9.DoCmd( "oFoxBin2prg = CREATEOBJECT('c_foxbin2prg')" ) - oVFP9.DoCmd( "oFoxBin2prg.EvaluarConfiguracion( '1', '1' )" ) + oVFP9.DoCmd( "oFoxBin2prg.cargar_frm_avance()" ) cFlagGenerateLog = "'0'" cFlagDontShowErrMsg = "'0'" @@ -87,7 +87,7 @@ Else cCMD = "oFoxBin2prg.ejecutar( '" & WScript.Arguments(0) & "' )" Else cCMD = "oFoxBin2prg.ejecutar( '" & WScript.Arguments(0) & "','0','0','0'," _ - & cFlagDontShowErrMsg & "," & cFlagGenerateLog & ",'1','','',.F.,''," _ + & cFlagDontShowErrMsg & "," & cFlagGenerateLog & ",'0','','',.F.,''," _ & cFlagRecompile & "," & cNoTimestamps & " )" End If If cFlagJustShowCall = "1" Then @@ -113,7 +113,7 @@ Else Set oVFP9 = Nothing End If -WScript.Quit(nExitCode) +WScript.Quit nExitCode Function GetBit(lngValue, BitNum) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 711e2b8..c3e9ea5 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -415,7 +415,7 @@ LPARAMETERS tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDeb + " FOXBIN2PRG 'c:\desa\clases\*.vc2' '0' '0' '0' '1' '0'" #DEFINE C_FOXBIN2PRG_JUST_VFP_9_LOC "¡FOXBIN2PRG es solo para Visual FoxPro 9.0!" #DEFINE C_FOXBIN2PRG_WARN_CAPTION_LOC "FOXBIN2PRG: ¡ATENCIÓN!" - #DEFINE C_MENU_NOT_IN_VFP9_FORMAT_LOC "El Menú [<>] NO está en formato VFP 9! - Por favor convertirlo a VFP 9 con MODIFY MENU <>" + #DEFINE C_MENU_NOT_IN_VFP9_FORMAT_LOC "El Menú [<>] NO está en formato VFP 9! - Por favor convertirlo a VFP 9 con MODIFY MENU '<>'" #DEFINE C_LANGUAGE_LOC "ES" #DEFINE C_NAMES_CAPITALIZATION_PROGRAM_FOUND_LOC "* Se ha encontrado el programa de capitalización de nombres [<>]" #DEFINE C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC "* No se ha encontrado el programa de capitalización de nombres [<>]" @@ -427,6 +427,7 @@ LPARAMETERS tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDeb #DEFINE C_PROCESSING_LOC "Procesando archivo" #DEFINE C_PROCESS_PROGRESS_LOC "Avance del proceso:" #DEFINE C_PROPERTY_NAME_NOT_RECOGNIZED_LOC "Propiedad [<>] no reconocida." + #DEFINE C_REPORT_NOT_IN_VFP9_FORMAT_LOC "El Reporte [<>] NO está en formato VFP 9! - Por favor convertirlo a VFP 9 con MODIFY REPORT '<>'" #DEFINE C_REQUESTING_CAPITALIZATION_OF_FILE_LOC "- Solicitado capitalizar el archivo [<>]" #DEFINE C_SOURCEFILE_LOC "Archivo origen: " #DEFINE C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_LOC "Error de anidamiento de estructuras. Se esperaba ENDPROC pero se encontró ENDDEFINE en la clase <> (<>), línea <> del archivo <>" @@ -451,7 +452,7 @@ loCnv = CREATEOBJECT("c_foxbin2prg") loEx = NULL lnResp = loCnv.ejecutar( tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDebug ; - , '', NULL, @loEx, .F., tcOriginalFileName, tcRecompile, tcNoTimestamps ) + , tcDontShowProgress, NULL, @loEx, .F., tcOriginalFileName, tcRecompile, tcNoTimestamps ) ADDPROPERTY(_SCREEN, 'ExitCode', lnResp) *IF _VFP.STARTMODE <= 1 @@ -668,7 +669,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM SET SEPARATOR TO ',' ON ESCAPE ERROR 1799 SET ESCAPE ON - + lcSys16 = SYS(16) IF LEFT(lcSys16,10) == 'PROCEDURE ' @@ -699,11 +700,12 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ERASE ( lcFileCDX ) THIS.writeLog_Flush() - + THIS.descargar_frm_avance() CATCH FINALLY ON ESCAPE + THIS.o_Frm_Avance = NULL THIS.o_FSO = NULL THIS.o_FNC = NULL ENDTRY @@ -715,7 +717,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM PROCEDURE AvanceDelProceso LPARAMETERS tcTexto, tnValor, tnTotal, tnTipo - IF THIS.l_ShowProgress AND PEMSTATUS(THIS, 'o_Frm_Avance', 5) THEN + *IF THIS.l_ShowProgress AND VARTYPE(THIS.o_Frm_Avance) = "O" THEN + *-- Si o_Frm_Avance se habilitó de forma externa, l_ShowProgress podría ser .F. para controlarlo desde fuera. + IF VARTYPE(THIS.o_Frm_Avance) = "O" THEN THIS.o_Frm_Avance.AvanceDelProceso( tcTexto, tnValor, tnTotal, tnTipo ) ENDIF ENDPROC @@ -1183,17 +1187,17 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM tcOutputFile_Ext1 = FORCEEXT(tcOutputFile, lcExt_1) IF FILE( tcOutputFile_Ext1 ) - *-- LOG - DO CASE - CASE EMPTY(lcExt_2) + *-- LOG + DO CASE + CASE EMPTY(lcExt_2) .writeLog( C_BACKUP_OF_LOC + tcOutputFile_Ext1 ) - CASE EMPTY(lcExt_3) + CASE EMPTY(lcExt_3) .writeLog( C_BACKUP_OF_LOC + tcOutputFile_Ext1 + '/' + lcExt_2 ) - OTHERWISE + OTHERWISE .writeLog( C_BACKUP_OF_LOC + tcOutputFile_Ext1 + '/' + lcExt_2 + '/' + lcExt_3 ) - ENDCASE + ENDCASE - *-- COPIA BACKUP + *-- COPIA BACKUP COPY FILE ( tcOutputFile_Ext1 ) TO ( tcBakFile_1 ) IF NOT EMPTY(lcExt_2) @@ -1201,7 +1205,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM IF FILE( tcOutputFile_Ext2 ) COPY FILE ( tcOutputFile_Ext2 ) TO ( tcBakFile_2 ) - ENDIF + ENDIF ENDIF IF NOT EMPTY(lcExt_3) @@ -1209,11 +1213,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM IF FILE( tcOutputFile_Ext3 ) COPY FILE ( tcOutputFile_Ext3 ) TO ( tcBakFile_3 ) + ENDIF + ENDIF ENDIF ENDIF ENDIF - ENDIF - ENDIF ENDWITH && THIS CATCH TO toEx @@ -1236,8 +1240,19 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM PROCEDURE cargar_frm_avance - THIS.o_Frm_Avance = CREATEOBJECT("frm_avance") - THIS.o_Frm_Avance.Show() + IF VARTYPE(THIS.o_Frm_Avance) <> "O" THEN + THIS.o_Frm_Avance = CREATEOBJECT("frm_avance") + THIS.o_Frm_Avance.Show() + ENDIF + ENDPROC + + + PROCEDURE descargar_frm_avance + IF THIS.l_ShowProgress AND VARTYPE(THIS.o_Frm_Avance) = "O" THEN + THIS.o_Frm_Avance.Hide() + THIS.o_Frm_Avance.Release() + THIS.o_Frm_Avance = NULL + ENDIF ENDPROC @@ -1274,7 +1289,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .l_CFG_CachedAccess = (.n_CFG_Actual > 0) ENDIF - *IF NOT .l_ConfigEvaluated lo_CFG = THIS IF .n_CFG_Actual = 0 THEN @@ -1520,7 +1534,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .writeLog( '> n_ExtraBackupLevels: ' + TRANSFORM(.n_ExtraBackupLevels) ) .writeLog( '> l_OptimizeByFilestamp: ' + TRANSFORM(.l_OptimizeByFilestamp) ) .writeLog( '> l_DropNullCharsFromCode: ' + TRANSFORM(.l_DropNullCharsFromCode) ) - .writeLog( '> l_ClearDBFLastUpdate: ' + TRANSFORM(.l_ClearDBFLastUpdate) ) + .writeLog( '> l_ClearDBFLastUpdate: ' + TRANSFORM(.l_ClearDBFLastUpdate) ) lo_CFG = NULL RELEASE lo_CFG @@ -1573,7 +1587,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM * tcStrFileName2 (v! IN ) ***NO IMPLEMENTADO*** Contenido del archivo2 a comparar *--------------------------------------------------------------------------------------------------- LPARAMETERS tcFilename1, tcFilename2, tcStrFileName2 - + LOCAL lnComparacion, lnLen1, lnLen2, lnHandle1, lnHandle2, lnTipoComp, lnChunkSize ; , loEx as Exception @@ -1605,30 +1619,30 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM lnComparacion = 0 && Son distintos EXIT ENDIF - + *-- Comparación de contenido FSEEK( lnHandle1, 0, 0 ) FSEEK( lnHandle2, 0, 0 ) - + DO WHILE NOT ( FEOF(lnHandle1) OR FEOF(lnHandle2) ) IF NOT SYS( 2007, FREAD( lnHandle1, lnChunkSize ), -1, 1 ) == SYS( 2007, FREAD( lnHandle2, lnChunkSize ), -1, 1 ) THEN lnComparacion = 0 && Son distintos EXIT ENDIF ENDDO - + IF lnComparacion = 0 THEN EXIT ENDIF - + lnComparacion = 1 && Son iguales ENDCASE - + CATCH TO loEx lnComparacion = -1 && Error THROW - + FINALLY DO CASE CASE lnTipoComp = 1 @@ -1638,7 +1652,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDCASE ENDTRY - + RETURN lnComparacion ENDFUNC @@ -2069,7 +2083,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- Escribo la información de error en el archivo log de errores TRY - STRTOFILE( lcErrorInfo, EVL(tc_InputFile,'foxbin2prg') + '.ERR' ) + STRTOFILE( STRCONV(lcErrorInfo,9), EVL(tc_InputFile,'foxbin2prg') + '.ERR' ) CATCH TO loEx2 ENDTRY @@ -2089,11 +2103,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM FINALLY USE IN (SELECT("TABLABIN")) THIS.writeLog_Flush() - IF THIS.l_ShowProgress AND VARTYPE(THIS.o_Frm_Avance) = "O" - THIS.o_Frm_Avance.HIDE() - THIS.o_Frm_Avance.RELEASE() - STORE NULL TO THIS.o_Frm_Avance - ENDIF + *THIS.descargar_frm_avance() CD (JUSTPATH(THIS.c_CurDir)) STORE NULL TO loFSO RELEASE tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDebug, tcDontShowProgress ; @@ -2372,7 +2382,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .o_Conversor.c_OriginalFileName = .c_OriginalFileName .o_Conversor.c_Foxbin2prg_FullPath = .c_Foxbin2prg_FullPath *-- - .AvanceDelProceso( C_PROCESSING_LOC + ' ' + .c_InputFile + '...', 1, 1, 0 ) + .AvanceDelProceso( C_PROCESSING_LOC + ' ' + .c_InputFile + '...', 0, 0, 0 ) BINDEVENT( .o_Conversor, 'AvanceDelProceso', THIS, 'AvanceDelProceso' ) .o_Conversor.Convertir( @toModulo, .F., THIS ) @@ -2538,41 +2548,41 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDCASE - *-- Normalizar archivo(s) de entrada. El primero siempre se normaliza (??2, ??X, DBF, DBC) + *-- Normalizar archivo(s) de entrada. El primero siempre se normaliza (??2, ??X, DBF, DBC) .RenameFile( tcFileName, lcEXE_CAPS, loFSO, llRelanzarError ) - DO CASE - CASE lcType = 'PJX' + DO CASE + CASE lcType = 'PJX' .RenameFile( FORCEEXT(tcFileName,'PJT'), lcEXE_CAPS, loFSO, llRelanzarError ) - CASE lcType = 'VCX' + CASE lcType = 'VCX' .RenameFile( FORCEEXT(tcFileName,'VCT'), lcEXE_CAPS, loFSO, llRelanzarError ) - CASE lcType = 'SCX' + CASE lcType = 'SCX' .RenameFile( FORCEEXT(tcFileName,'SCT'), lcEXE_CAPS, loFSO, llRelanzarError ) - CASE lcType = 'FRX' + CASE lcType = 'FRX' .RenameFile( FORCEEXT(tcFileName,'FRT'), lcEXE_CAPS, loFSO, llRelanzarError ) - CASE lcType = 'LBX' + CASE lcType = 'LBX' .RenameFile( FORCEEXT(tcFileName,'LBT'), lcEXE_CAPS, loFSO, llRelanzarError ) - CASE lcType = 'DBF' + CASE lcType = 'DBF' IF FILE( FORCEEXT(tcFileName,'FPT') ) .RenameFile( FORCEEXT(tcFileName,'FPT'), lcEXE_CAPS, loFSO, llRelanzarError ) - ENDIF + ENDIF IF FILE( FORCEEXT(tcFileName,'CDX') ) .RenameFile( FORCEEXT(tcFileName,'CDX'), lcEXE_CAPS, loFSO, llRelanzarError ) - ENDIF + ENDIF - CASE lcType = 'DBC' + CASE lcType = 'DBC' .RenameFile( FORCEEXT(tcFileName,'DCX'), lcEXE_CAPS, loFSO, llRelanzarError ) .RenameFile( FORCEEXT(tcFileName,'DCT'), lcEXE_CAPS, loFSO, llRelanzarError ) - CASE lcType = 'MNX' + CASE lcType = 'MNX' .RenameFile( FORCEEXT(tcFileName,'MNT'), lcEXE_CAPS, loFSO, llRelanzarError ) - ENDCASE + ENDCASE ENDWITH && THIS @@ -2608,7 +2618,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM LPARAMETERS tcFileName LOCAL lcTmpFile, loFSO AS Scripting.FileSystemObject, loEx as Exception - + TRY *loFSO = THIS.o_FSO lcTmpFile = tcFileName + '.TMP' @@ -2659,7 +2669,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ******************************************************************************************************************* PROCEDURE writeLog_Flush IF THIS.l_Debug AND NOT EMPTY(THIS.c_TextLog) - STRTOFILE( THIS.c_TextLog + CR_LF, THIS.c_LogFile, 1 ) + STRTOFILE( STRCONV(THIS.c_TextLog + CR_LF,9), THIS.c_LogFile, 1 ) THIS.c_TextLog = '' ENDIF ENDPROC @@ -2702,7 +2712,7 @@ DEFINE CLASS frm_avance AS FORM DoCreate = .T. AutoCenter = .T. BorderStyle = 2 - CAPTION = C_PROCESS_PROGRESS_LOC + ' ' + CAPTION = C_PROCESS_PROGRESS_LOC + ' (Press Esc to Cancel)' ControlBox = .F. BackColor = RGB(255,255,255) nmax_value = 100 @@ -2785,23 +2795,38 @@ DEFINE CLASS frm_avance AS FORM PROCEDURE AvanceDelProceso LPARAMETERS tcTexto, tnValor, tnTotal, tnTipo - + WITH THIS AS frm_avance OF foxbin2prg.prg DO CASE CASE tnTipo = 0 - .lbl_tarea.Caption = tcTexto - .nMax_Value = tnTotal - .nValue = tnValor + IF NOT EMPTY(tcTexto) THEN + .lbl_tarea.Caption = tcTexto + ENDIF + + IF tnTotal > 0 THEN + .nmax_value = tnTotal + .nvalue = tnValor + ENDIF CASE tnTipo = 1 - .lbl_tarea2.Caption = tcTexto - .nMax_Value2 = tnTotal - .nValue2 = tnValor + IF NOT EMPTY(tcTexto) THEN + .lbl_tarea2.Caption = tcTexto + ENDIF + + IF tnTotal > 0 THEN + .nmax_value2 = tnTotal + .nvalue2 = tnValor + ENDIF CASE tnTipo = 2 - .lbl_tarea2.Caption = tcTexto - .nMax_Value2 = tnTotal - .nValue2 = tnValor + IF NOT EMPTY(tcTexto) THEN + .lbl_tarea2.Caption = tcTexto + ENDIF + + IF tnTotal > 0 THEN + .nmax_value2 = tnTotal + .nvalue2 = tnValor + ENDIF ENDCASE ENDWITH && THIS @@ -2814,15 +2839,15 @@ DEFINE CLASS frm_avance AS FORM LPARAMETERS vNewVal WITH THIS - .nValue = m.vNewVal - .shp_avance.WIDTH = m.vNewVal * .shp_base.WIDTH / .nMax_Value + .nvalue = m.vNewVal + .shp_avance.WIDTH = m.vNewVal * .shp_base.WIDTH / .nmax_value ENDWITH ENDPROC PROCEDURE Init - THIS.nValue = 0 - THIS.nValue2 = 0 + THIS.nvalue = 0 + THIS.nvalue2 = 0 ENDPROC @@ -2830,8 +2855,8 @@ DEFINE CLASS frm_avance AS FORM LPARAMETERS vNewVal WITH THIS - .nValue2 = m.vNewVal - .shp_avance2.WIDTH = m.vNewVal * .shp_base2.WIDTH / .nMax_Value2 + .nvalue2 = m.vNewVal + .shp_avance2.WIDTH = m.vNewVal * .shp_base2.WIDTH / .nmax_value2 ENDWITH ENDPROC @@ -2937,6 +2962,8 @@ DEFINE CLASS c_conversor_base AS SESSION SET TABLEPROMPT OFF SET BLOCKSIZE TO 0 SET EXACT ON + *ON ESCAPE ERROR 1799 + SET ESCAPE ON PUBLIC C_FB2PRG_CODE C_FB2PRG_CODE = '' && Contendrá todo el código generado @@ -6448,7 +6475,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base llEXTERNAL_CLASS_Completed = .T. *CASE .analizarBloque_DEFINE_CLASS( @toModulo, @loClase, @lcLine, @taCodeLines, @I, tnCodeLines ; - , @lcProcedureAbierto, @taLineasExclusion, @tnBloquesExclusion, @lc_Comentario ) + , @lcProcedureAbierto, @taLineasExclusion, @tnBloquesExclusion, @lc_Comentario ) *-- Puede haber varias clases definidas * llEXTERNAL_CLASS_Completed = .T. @@ -9173,12 +9200,12 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base PROCEDURE Classify_PAM_Hidden_Protected *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) - * tnPropsAndValues_Count (@! IN ) - * taPropsAndValues (@! IN ) - * tnProtected_Count (@! IN ) - * taProtected (@! IN ) - * tnPropsAndComments_Count (@! IN ) - * taPropsAndComments (@! IN ) + * tnPropsAndValues_Count (@! IN ) + * taPropsAndValues (@! IN ) + * tnProtected_Count (@! IN ) + * taProtected (@! IN ) + * tnPropsAndComments_Count (@! IN ) + * taPropsAndComments (@! IN ) * tcHiddenProp (@! OUT) Lista de propiedades Hidden * tcProtectedProp (@! OUT) Lista de propiedades Protected *--------------------------------------------------------------------------------------------------- @@ -9196,7 +9223,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base DO CASE CASE EMPTY( taProtected(I) ) LOOP - + CASE RIGHT( taProtected(I), 1 ) == '^' *-- Hidden Property or method lcProp = CHRTRAN( taProtected(I), '^', '' ) @@ -9369,7 +9396,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base WHERE TABLABIN.PLATFORM = "COMMENT" AND TABLABIN.RESERVED2 == "OLEPublic" ; ORDER BY 1 ; INTO ARRAY ta_NombresObjsOle - + FOR I = 1 TO _TALLY ta_NombresObjsOle(I) = ALLTRIM( ta_NombresObjsOle(I) ) ENDFOR @@ -10215,12 +10242,12 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base IF tnPropsAndComments_Count > 0 THEN lnComment = ASCAN( taPropsAndComments, taPropsAndValues(I,1), 1, 0, 1, 1+2+4+8) - IF lnComment > 0 AND NOT EMPTY(taPropsAndComments(lnComment,2)) - *TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 - * <<>> && <> - *ENDTEXT - tcCodigo = tcCodigo + CHR(9) + CHR(9) + '&' + '& ' + taPropsAndComments(lnComment,2) - ENDIF + IF lnComment > 0 AND NOT EMPTY(taPropsAndComments(lnComment,2)) + *TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 + * <<>> && <> + *ENDTEXT + tcCodigo = tcCodigo + CHR(9) + CHR(9) + '&' + '& ' + taPropsAndComments(lnComment,2) + ENDIF ENDIF ENDFOR @@ -10906,7 +10933,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *-- COMO CONSECUENCIA, LOS FORMS O CLASES CON OBJETOS OLE DARÁN DIFERENCIA POR ÚNICA VEZ EN LA CABECERA. - fdbozzo. 29/11/2014 (v1.19.37) * *SELECT COUNT(*) FROM TABLABIN WHERE TABLABIN.PLATFORM = "WINDOWS" AND BASECLASS == 'olecontrol' INTO ARRAY laOLE - + *IF laOLE(1) > 0 THEN * *-- Lo del <<>> para crear una línea vacía es solamente por compatibilidad con lo antiguo, * *-- donde se creaba esta línea cuando el form o clase tenía al menos un objeto OLE. @@ -10916,9 +10943,9 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base * ENDTEXT *ELSE - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 * - ENDTEXT + ENDTEXT *ENDIF *!* CATCH TO loEx @@ -11064,9 +11091,9 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg LOCAL lnCodError, loRegClass, loRegObj, lnMethodCount, laMethods(1), laCode(1), laProtected(1), lnLen, lnObjCount ; , laPropsAndValues(1), laPropsAndComments(1), lnLastClass, lnRecno, lcMethods, lcObjName, la_NombresObjsOle(1) ; , laObjs(1,3), I, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count, lcCodigo, laClasses(1,2) ; - , lnClassCount, lcOutputFile, lcExternalHeader, lnClassTotal + , lnClassCount, lcOutputFile, lcExternalHeader, lnClassTotal, lnStepCount, lnStep STORE 0 TO lnCodError, lnLastClass, lnObjCount, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count ; - , lnMethodCount, lnClassCount + , lnMethodCount, lnClassCount, lnStepCount, lnStep STORE '' TO laMethods, laCode, laProtected, laPropsAndComments, laObjs, lcCodigo, laClasses, lcOutputFile ; , C_FB2PRG_CODE, lcExternalHeader STORE NULL TO loRegClass, loRegObj @@ -11075,6 +11102,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN .n_Avance_Maximo = _TALLY + lnStepCount = 7 USE IN (SELECT("_TABLAORIG")) INDEX ON PADR(LOWER(PLATFORM + IIF(EMPTY(PARENT),'',ALLTRIM(PARENT)+'.')+OBJNAME),240) TAG PARENT_OBJ OF TABLABIN ADDITIVE @@ -11131,7 +11159,9 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg lcObjName = ALLTRIM( loRegClass.OBJNAME ) laClasses(lnClassCount,1) = LOWER( lcObjName ) - .AvanceDelProceso( 'Processing Class ' + lcObjName + '...', lnClassCount, lnClassTotal, 1 ) + + lnStep = lnStep + 1 + .AvanceDelProceso( 'Processing Class ' + lcObjName + '...', lnStep, lnClassTotal*lnStepCount, 1 ) .write_DEFINE_CLASS( @la_NombresObjsOle, @loRegClass, @lcCodigo ) @@ -11192,17 +11222,26 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg .write_INCLUDE( @loRegClass, @lcCodigo ) + lnStep = lnStep + 1 + .AvanceDelProceso( 'Processing Class ' + lcObjName + ' > Writing Properties...', lnStep, lnClassTotal*lnStepCount, 1 ) + .write_CLASS_PROPERTIES( @loRegClass, @laPropsAndValues, @laPropsAndComments, @laProtected ; , @lnPropsAndValues_Count, @lnPropsAndComments_Count, @lnProtected_Count, @lcCodigo ) ASORT(laObjs, 3, -1, 0, 0) && Orden Alfabético (del SCAN original) + lnStep = lnStep + 1 + .AvanceDelProceso( 'Processing Class ' + lcObjName + ' > Writing Obtects with Properties...', lnStep, lnClassTotal*lnStepCount, 1 ) + FOR I = 1 TO lnObjCount .write_ADD_OBJECTS_WithProperties( laObjs(I,1), @lcCodigo ) ENDFOR *-- OBTENGO LOS MÉTODOS DE LA CLASE PARA POSTERIOR TRATAMIENTO + lnStep = lnStep + 1 + .AvanceDelProceso( 'Processing Class ' + lcObjName + ' > Getting Methods...', lnStep, lnClassTotal*lnStepCount, 1 ) + DIMENSION laMethods(1,3), laCode(1) STORE '' TO laMethods, laCode lnMethodCount = 0 @@ -11216,6 +11255,9 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg lcMethods = '' *-- RECORRO LOS OBJETOS DENTRO DE LA CLASE ACTUAL PARA OBTENER SUS MÉTODOS + lnStep = lnStep + 1 + .AvanceDelProceso( 'Processing Class ' + lcObjName + ' > Getting Objects Methods...', lnStep, lnClassTotal*lnStepCount, 1 ) + lnRecno = RECNO() LOCATE FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == LOWER(lcObjName) @@ -11244,6 +11286,9 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg , @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count, @toFoxBin2Prg ) ENDSCAN + lnStep = lnStep + 1 + .AvanceDelProceso( 'Processing Class ' + lcObjName + ' > Writing Objects Methods...', lnStep, lnClassTotal*lnStepCount, 1 ) + .write_ALL_OBJECT_METHODS( @lcMethods, @laMethods, @laCode, @lnMethodCount, @laPropsAndComments, lnPropsAndComments_Count, @laProtected ; , lnProtected_Count, @toFoxBin2Prg, @lcCodigo ) @@ -11257,7 +11302,9 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg ENDIF *-- Genero el VC2 - .AvanceDelProceso( 'Writing VC2...', 2, 2, 1 ) + lnStep = lnStep + 1 + .AvanceDelProceso( 'Writing VC2...', lnStep, lnClassTotal*lnStepCount, 1 ) + lcOutputFile = .c_OutputFile lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + lcExternalHeader + C_FB2PRG_CODE @@ -11281,7 +11328,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg ENDFOR .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) - ENDIF + ENDIF ENDIF ENDWITH && THIS @@ -11335,9 +11382,9 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg LOCAL lnCodError, loRegClass, loRegObj, lnMethodCount, laMethods(1), laCode(1), laProtected(1), lnLen, lnObjCount ; , laPropsAndValues(1), laPropsAndComments(1), lnLastClass, lnRecno, lcMethods, lcObjName, la_NombresObjsOle(1) ; , laObjs(1,3), I, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count, lcCodigo, laClasses(1,2) ; - , lnClassCount, lcOutputFile, lcExternalHeader, lnClassTotal + , lnClassCount, lcOutputFile, lcExternalHeader, lnClassTotal, lnStepCount, lnStep STORE 0 TO lnCodError, lnLastClass, lnObjCount, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count ; - , lnMethodCount, lnClassCount + , lnMethodCount, lnClassCount, lnStepCount, lnStep STORE '' TO laMethods, laCode, laProtected, laPropsAndComments, laObjs, lcCodigo, laClasses, lcOutputFile ; , C_FB2PRG_CODE, lcExternalHeader STORE NULL TO loRegClass, loRegObj @@ -11386,8 +11433,8 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg COUNT ALL FOR TABLABIN.PLATFORM = "WINDOWS" ; - AND ( EMPTY( TABLABIN.PARENT ) ; - AND INLIST( LOWER( TABLABIN.BASECLASS ), 'dataenvironment', 'form', 'formset' ) ) TO lnClassTotal + AND ( EMPTY( TABLABIN.PARENT ) ; + AND INLIST( LOWER( TABLABIN.BASECLASS ), 'dataenvironment', 'form', 'formset' ) ) TO lnClassTotal SCAN ALL FOR TABLABIN.PLATFORM = "WINDOWS" ; AND ( EMPTY( TABLABIN.PARENT ) ; @@ -11418,7 +11465,9 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg lcObjName = ALLTRIM(loRegClass.OBJNAME) laClasses(lnClassCount,1) = LOWER( lcObjName ) - .AvanceDelProceso( 'Processing Class ' + lcObjName + '...', lnClassCount, lnClassTotal, 1 ) + + lnStep = lnStep + 1 + .AvanceDelProceso( 'Processing Class ' + lcObjName + '...', lnStep, lnClassTotal*lnStepCount, 1 ) .write_DEFINE_CLASS( @la_NombresObjsOle, @loRegClass, @lcCodigo ) @@ -11479,18 +11528,26 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg .write_INCLUDE( @loRegClass, @lcCodigo ) + lnStep = lnStep + 1 + .AvanceDelProceso( 'Processing Class ' + lcObjName + ' > Writing Properties...', lnStep, lnClassTotal*lnStepCount, 1 ) + .write_CLASS_PROPERTIES( @loRegClass, @laPropsAndValues, @laPropsAndComments, @laProtected ; , @lnPropsAndValues_Count, @lnPropsAndComments_Count, @lnProtected_Count, @lcCodigo ) - ASORT(laObjs, 3, -1, 0, 0) && Orden Alfabético de objetos (del SCAN original) + lnStep = lnStep + 1 + .AvanceDelProceso( 'Processing Class ' + lcObjName + ' > Writing Obtects with Properties...', lnStep, lnClassTotal*lnStepCount, 1 ) + FOR I = 1 TO lnObjCount .write_ADD_OBJECTS_WithProperties( laObjs(I,1), @lcCodigo ) ENDFOR *-- OBTENGO LOS MÉTODOS DE LA CLASE PARA POSTERIOR TRATAMIENTO + lnStep = lnStep + 1 + .AvanceDelProceso( 'Processing Class ' + lcObjName + ' > Getting Methods...', lnStep, lnClassTotal*lnStepCount, 1 ) + DIMENSION laMethods(1,3), laCode(1) STORE '' TO laMethods, laCode lnMethodCount = 0 @@ -11504,6 +11561,9 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg lcMethods = '' *-- RECORRO LOS OBJETOS DENTRO DE LA CLASE ACTUAL PARA OBTENER SUS MÉTODOS + lnStep = lnStep + 1 + .AvanceDelProceso( 'Processing Class ' + lcObjName + ' > Getting Objects Methods...', lnStep, lnClassTotal*lnStepCount, 1 ) + lnRecno = RECNO() LOCATE FOR TABLABIN.PLATFORM = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == LOWER(lcObjName) @@ -11534,6 +11594,9 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg , @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count, @toFoxBin2Prg ) ENDSCAN + lnStep = lnStep + 1 + .AvanceDelProceso( 'Processing Class ' + lcObjName + ' > Writing Objects Methods...', lnStep, lnClassTotal*lnStepCount, 1 ) + .write_ALL_OBJECT_METHODS( @lcMethods, @laMethods, @laCode, @lnMethodCount, @laPropsAndComments, lnPropsAndComments_Count, @laProtected ; , lnProtected_Count, @toFoxBin2Prg, @lcCodigo ) @@ -11547,7 +11610,9 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg ENDIF *-- Genero el SC2 - .AvanceDelProceso( 'Writing SC2...', 2, 2, 1 ) + lnStep = lnStep + 1 + .AvanceDelProceso( 'Writing SC2...', lnStep, lnClassTotal*lnStepCount, 1 ) + lcOutputFile = .c_OutputFile lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + lcExternalHeader + C_FB2PRG_CODE @@ -11571,7 +11636,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg ENDFOR .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) - ENDIF + ENDIF ENDIF ENDWITH && THIS @@ -12349,10 +12414,17 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg WITH THIS AS c_conversor_pjm_a_prg OF 'FOXBIN2PRG.PRG' USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG + THIS.AvanceDelProceso( 'Scanning FRX...', 1, 2, 1 ) + + *-- Verificación de REPORTE VFP 9 + IF FCOUNT() < 75 OR EMPTY(FIELD("USER")) + *ERROR 'Report [' + (.c_InputFile) + '] is NOT VFP 9 Format! - Please convert to VFP 9 with MODIFY REPORT ' + JUSTFNAME((.c_InputFile)) + ERROR (TEXTMERGE(C_REPORT_NOT_IN_VFP9_FORMAT_LOC)) + ENDIF + SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN_0 .n_Avance_Maximo = _TALLY USE IN (SELECT("_TABLAORIG")) - THIS.AvanceDelProceso( 'Scanning FRX...', 1, 2, 1 ) *-- Header LOCATE FOR ObjType = 1 @@ -12509,7 +12581,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg WITH THIS AS c_conversor_dbf_a_prg OF 'FOXBIN2PRG.PRG' *-- EVALUAR OPCIONES ESPECÍFICAS DE DBF - .AvanceDelProceso( 'Scanning DBF Structure...', 1, 2, 1 ) + .AvanceDelProceso( 'Scanning DBF Structure...', 1, 3, 1 ) *-- Include IF NOT EMPTY(toFoxBin2Prg.DBF_Conversion_Included) AND NOT toFoxBin2Prg.DBF_Conversion_Included == '*' ; @@ -12536,23 +12608,23 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg *-- Header loTable = CREATEOBJECT('CL_DBF_TABLE') - + IF toFoxBin2Prg.DBF_Conversion_Support = 4 *-- Exportación de estructura y datos (para Diff solamente) ERASE (.c_OutputFile + '.TMP' ) toFoxBin2Prg.n_FileHandle = FCREATE( .c_OutputFile + '.TMP' ) - + IF toFoxBin2Prg.n_FileHandle = -1 THEN ERROR 102, (.c_OutputFile) ENDIF - + FWRITE( toFoxBin2Prg.n_FileHandle, C_FB2PRG_CODE ) loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, .c_InputFile, lc_FileTypeDesc, @toFoxBin2Prg ) FCLOSE( toFoxBin2Prg.n_FileHandle ) - + *-- Genero el DB2, renombrando el TMP - .AvanceDelProceso( 'Writing DB2...', 2, 2, 1 ) + .AvanceDelProceso( 'Writing DB2...', 3, 3, 1 ) IF .l_Test toModulo = C_FB2PRG_CODE ELSE @@ -12574,7 +12646,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg *-- Genero el DB2 - .AvanceDelProceso( 'Writing DB2...', 2, 2, 1 ) + .AvanceDelProceso( 'Writing DB2...', 3, 3, 1 ) IF .l_Test toModulo = C_FB2PRG_CODE ELSE @@ -12745,7 +12817,7 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN .n_Avance_Maximo = _TALLY USE IN (SELECT("_TABLAORIG")) - .AvanceDelProceso( 'Analyzing MNX...', 2, 2, 1 ) + .AvanceDelProceso( 'Analyzing MNX...', 1, 2, 1 ) *-- Verificación de menú VFP 9 IF FCOUNT() < 25 OR EMPTY(FIELD("RESNAME")) OR EMPTY(FIELD("SYSRES")) @@ -18001,10 +18073,11 @@ DEFINE CLASS CL_DBF_RECORDS AS CL_COL_BASE #ENDIF TRY - LOCAL lcText, loEx AS EXCEPTION, I ; + LOCAL lcText, loEx AS EXCEPTION, I, lnReccount ; , loRecord AS CL_DBF_RECORD OF 'FOXBIN2PRG.PRG' - lcText = '' - I = 0 + lcText = '' + I = 0 + lnReccount = RECCOUNT() && Realmente no es muy exacto, pero al menos muestra el avance. TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> @@ -18023,11 +18096,15 @@ DEFINE CLASS CL_DBF_RECORDS AS CL_COL_BASE I = I + 1 lcText = loRecord.toText(@taFields, tnField_Count) FWRITE( toFoxBin2Prg.n_FileHandle, lcText ) - IF MOD(I,10000) = 0 THEN - FFLUSH( toFoxBin2Prg.n_FileHandle, .T. ) + IF MOD(I,1000) = 0 THEN + toFoxBin2Prg.AvanceDelProceso( 'Exporting DBF Data...', 1+(I/lnReccount), 3, 2 ) + + IF MOD(I,10000) = 0 THEN + FFLUSH( toFoxBin2Prg.n_FileHandle, .T. ) + ENDIF ENDIF ENDSCAN - + lcText = '' TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 @@ -20615,7 +20692,7 @@ DEFINE CLASS CL_DBF_UTILS AS SESSION , loField AS CL_DBF_UTILS_FIELD OF 'FOXBIN2PRG.PRG' STORE NULL TO loField tn_HexFileType = 0 - tcDBC_Name = '' + STORE '' TO tcDBC_Name, lcStr lnHandle = FOPEN(tc_FileName,0) IF lnHandle = -1 @@ -20696,6 +20773,10 @@ DEFINE CLASS CL_DBF_UTILS AS SESSION ENDWITH CATCH TO loEx + loEx.UserValue = loEx.UserValue + 'lcStr = [' + TRANSFORM(lcStr) + '] / LenStr = ' + TRANSFORM(LEN(TRANSFORM(lcStr))) + CR_LF + IF loEx.ErrorNo = 11 THEN && + loEx.UserValue = loEx.UserValue + '> POSSIBLE CORRUPTED TABLE' + CR_LF + ENDIF IF THIS.l_Debug AND _VFP.STARTMODE = 0 SET STEP ON ENDIF diff --git a/foxbin2prg_de.h b/foxbin2prg_de.h index ce53faf..e2d9e06 100644 --- a/foxbin2prg_de.h +++ b/foxbin2prg_de.h @@ -31,7 +31,7 @@ #DEFINE C_FOXBIN2PRG_JUST_VFP_9_LOC "FOXBIN2PRG ist nur für Visual FoxPro 9.0!" #DEFINE C_FOXBIN2PRG_WARN_CAPTION_LOC "FOXBIN2PRG: WARNUNG!" #DEFINE C_LANGUAGE_LOC "DE" -#DEFINE C_MENU_NOT_IN_VFP9_FORMAT_LOC "Menu [<>] ist NICHT in VFP 9 Format! - Bitte zuerst nach VFP 9 konvertieren mit MODIFY MENU <>" +#DEFINE C_MENU_NOT_IN_VFP9_FORMAT_LOC "Menu [<>] ist NICHT in VFP 9 Format! - Bitte zuerst nach VFP 9 konvertieren mit MODIFY MENU '<>'" #DEFINE C_NAMES_CAPITALIZATION_PROGRAM_FOUND_LOC "* Programm für Großschreibungssetzung [<>] gefunden" #DEFINE C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC "* Programm für Großschreibungssetzung [<>] nicht gefunden" #DEFINE C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC "Objekt [<>] enthält nicht oReg Objekt (level <>)" @@ -42,6 +42,7 @@ #DEFINE C_PROCESSING_LOC "Bearbeite Datei" #DEFINE C_PROCESS_PROGRESS_LOC "Bearbeitungsfortschritt:" #DEFINE C_PROPERTY_NAME_NOT_RECOGNIZED_LOC "Eigenschaft [<>] nicht erkannt." +#DEFINE C_REPORT_NOT_IN_VFP9_FORMAT_LOC "Report [<>] ist NICHT in VFP 9 Format! - Bitte zuerst nach VFP 9 konvertieren mit MODIFY REPORT '<>'" #DEFINE C_REQUESTING_CAPITALIZATION_OF_FILE_LOC "- Forder Großschreibung für Datei [<>] an" #DEFINE C_SOURCEFILE_LOC "Source Datei: " #DEFINE C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_LOC "Fehler in Verschachtelungsstruktur. ENDPROC erwartet, aber es wurde ENDDEFINE in Klasse <> (<>), Zeile <> der Datei <> gefunden" diff --git a/foxbin2prg_en.h b/foxbin2prg_en.h index b811b7b..bac361d 100644 --- a/foxbin2prg_en.h +++ b/foxbin2prg_en.h @@ -31,7 +31,7 @@ #DEFINE C_FOXBIN2PRG_JUST_VFP_9_LOC "FOXBIN2PRG is only for Visual FoxPro 9.0!" #DEFINE C_FOXBIN2PRG_WARN_CAPTION_LOC "FOXBIN2PRG: WARNING!" #DEFINE C_LANGUAGE_LOC "EN" -#DEFINE C_MENU_NOT_IN_VFP9_FORMAT_LOC "Menu [<>] is NOT in VFP 9 Format! - Please convert to VFP 9 with MODIFY MENU <>" +#DEFINE C_MENU_NOT_IN_VFP9_FORMAT_LOC "Menu [<>] is NOT in VFP 9 Format! - Please convert to VFP 9 with MODIFY MENU '<>'" #DEFINE C_NAMES_CAPITALIZATION_PROGRAM_FOUND_LOC "* Names capitalization program [<>] found" #DEFINE C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC "* Names capitalization program [<>] not found" #DEFINE C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC "Object [<>] does not contain oReg object (level <>)" @@ -42,6 +42,7 @@ #DEFINE C_PROCESSING_LOC "Processing file" #DEFINE C_PROCESS_PROGRESS_LOC "Process Progress:" #DEFINE C_PROPERTY_NAME_NOT_RECOGNIZED_LOC "Property [<>] is not recognized." +#DEFINE C_REPORT_NOT_IN_VFP9_FORMAT_LOC "Report [<>] is NOT in VFP 9 Format! - Please convert to VFP 9 with MODIFY REPORT '<>'" #DEFINE C_REQUESTING_CAPITALIZATION_OF_FILE_LOC "- Requesting capitalization of file [<>]" #DEFINE C_SOURCEFILE_LOC "Source file: " #DEFINE C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_LOC "Nesting structure error. ENDPROC expected but found ENDDEFINE on class <> (<>), line <> of file <>" From b93fbe67f1e550d088efbf20b75e4d0de50cad20 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 30 Nov 2014 16:59:58 +0100 Subject: [PATCH 20/25] =?UTF-8?q?Changeset:=20531=20fdbozzo=20-=2030/11/20?= =?UTF-8?q?14=2016:32:36:=20-=20Actualizaci=C3=B3n=20del=20log=20interno?= =?UTF-8?q?=20de=20cambios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index c3e9ea5..7a2ae35 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -111,7 +111,12 @@ * 19/11/2014 FDBOZZO v1.19.37 Arreglo bug: "String is too long to fit" cuando se procesa un DBF grande con DBF_Conversion_Support = 4 (edyshor) * 19/11/2014 FDBOZZO v1.19.37 Mejora dbf: Nuevo parámetro ClearDBFLastUpdate para evitar diferencias por este dato (edyshor) * 21/10/2014 FDBOZZO v1.19.37 Mejora: Permitir generar una clase por archivo (Ryan Harris/Lutz Scheffler) -* 30/10/2014 FDBOZZO v1.19.37 Mejora: Optimizaciones +* 29/11/2014 FDBOZZO v1.19.37 Arreglo bug scx/vcx: Algunas propiedades a veces tomaban la descripción de otras propiedades similares +* 29/11/2014 FDBOZZO v1.19.37 Arreglo bug scx/vcx: Las propiedades "Protected" y "Hidden" no siempre estaban ordenadas alfabéticamente +* 30/10/2014 FDBOZZO v1.19.37 Mejora: Optimizaciones en velocidad de proceso para scx/vcx/dbf +* 30/11/2014 FDBOZZO v1.19.37 Mejora: Indicador de avance de proceso más informativo +* 30/11/2014 FDBOZZO v1.19.37 Mejora: Se puede cancelar el proceso con la tecla Esc +* 30/11/2014 FDBOZZO v1.19.37 Mejora: Agregado control para detectar reportes no compatibles con VFP 9 * * *--------------------------------------------------------------------------------------------------- From edc7bb67352e9b5c2fe5e76269df7872d8f46cf4 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 30 Nov 2014 17:13:18 +0100 Subject: [PATCH 21/25] =?UTF-8?q?Changeset:=20532=20fdbozzo=20-=2030/11/20?= =?UTF-8?q?14=2017:02:06:=20-=20Limpieza=20de=20c=C3=B3digo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 52 ++++++-------------------------------------------- 1 file changed, 6 insertions(+), 46 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 7a2ae35..6ccbab0 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -722,7 +722,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM PROCEDURE AvanceDelProceso LPARAMETERS tcTexto, tnValor, tnTotal, tnTipo - *IF THIS.l_ShowProgress AND VARTYPE(THIS.o_Frm_Avance) = "O" THEN *-- Si o_Frm_Avance se habilitó de forma externa, l_ShowProgress podría ser .F. para controlarlo desde fuera. IF VARTYPE(THIS.o_Frm_Avance) = "O" THEN THIS.o_Frm_Avance.AvanceDelProceso( tcTexto, tnValor, tnTotal, tnTipo ) @@ -1868,20 +1867,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM lnFileCount = ADIR( laFiles, lcFileSpec, '', 1 ) - *IF .l_ShowProgress - * .o_Frm_Avance.nMAX_VALUE = lnFileCount - *ENDIF - FOR I = 1 TO lnFileCount lcFile = FORCEPATH( laFiles(I,1), JUSTPATH( lcFileSpec ) ) - *.o_Frm_Avance.lbl_TAREA.CAPTION = C_PROCESSING_LOC + ' ' + lcFile + '...' - *.o_Frm_Avance.nVALUE = I .AvanceDelProceso( C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) - *IF .l_ShowProgress - * .o_Frm_Avance.SHOW() - *ENDIF - IF FILE( lcFile ) lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) ENDIF @@ -1957,26 +1946,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM USE IN (SELECT("TABLABIN")) - *IF .l_ShowProgress - * .o_Frm_Avance.nMAX_VALUE = lnFileCount - *ENDIF - - *-- Primero convierto el proyecto - *IF .TieneSoporte_Bin2Prg( UPPER(JUSTEXT(tc_InputFile)) ) - * lnCodError = .Convertir( tc_InputFile, toModulo, toEx, tlRelanzarError, tcOriginalFileName ) - *ENDIF - *-- Luego convierto los archivos incluidos FOR I = 1 TO lnFileCount lcFile = laFiles(I,1) - *.o_Frm_Avance.lbl_TAREA.CAPTION = C_PROCESSING_LOC + ' ' + lcFile + '...' - *.o_Frm_Avance.nVALUE = I .AvanceDelProceso( C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) - *IF .l_ShowProgress - * .o_Frm_Avance.SHOW() - *ENDIF - IF .TieneSoporte_Bin2Prg( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) ENDIF @@ -2014,26 +1988,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF ENDFOR - *IF .l_ShowProgress - * .o_Frm_Avance.nMAX_VALUE = lnFileCount - *ENDIF - - *-- Primero convierto el proyecto - *IF .TieneSoporte_Prg2Bin( UPPER(JUSTEXT(tc_InputFile)) ) - * lnCodError = .Convertir( tc_InputFile, toModulo, toEx, tlRelanzarError, tcOriginalFileName ) - *ENDIF - *-- Luego convierto los archivos incluidos FOR I = 1 TO lnFileCount lcFile = laFiles(I) - *.o_Frm_Avance.lbl_TAREA.CAPTION = C_PROCESSING_LOC + ' ' + lcFile + '...' - *.o_Frm_Avance.nVALUE = I .AvanceDelProceso( C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) - *IF .l_ShowProgress - * .o_Frm_Avance.SHOW() - *ENDIF - IF .TieneSoporte_Prg2Bin( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) ENDIF @@ -2967,8 +2926,9 @@ DEFINE CLASS c_conversor_base AS SESSION SET TABLEPROMPT OFF SET BLOCKSIZE TO 0 SET EXACT ON - *ON ESCAPE ERROR 1799 - SET ESCAPE ON + IF NOT EMPTY( ON("ESCAPE") ) THEN + SET ESCAPE ON + ENDIF PUBLIC C_FB2PRG_CODE C_FB2PRG_CODE = '' && Contendrá todo el código generado @@ -5336,7 +5296,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base IF loObjeto._WriteOrder = 0 AND LOWER(loObjeto._Nombre) == LOWER(lcObjName) N = N + 1 loObjeto._WriteOrder = N - .insert_Object( toClase, loObjeto, toFoxBin2Prg ) + .insert_Object( @toClase, @loObjeto, @toFoxBin2Prg ) EXIT ENDIF ENDFOR @@ -5346,7 +5306,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base *-- Recorro los objetos Desconocidos FOR EACH loObjeto IN toClase._AddObjects FOXOBJECT IF loObjeto._WriteOrder = 0 - .insert_Object( toClase, loObjeto, toFoxBin2Prg ) + .insert_Object( @toClase, @loObjeto, @toFoxBin2Prg ) ENDIF ENDFOR @@ -20779,7 +20739,7 @@ DEFINE CLASS CL_DBF_UTILS AS SESSION CATCH TO loEx loEx.UserValue = loEx.UserValue + 'lcStr = [' + TRANSFORM(lcStr) + '] / LenStr = ' + TRANSFORM(LEN(TRANSFORM(lcStr))) + CR_LF - IF loEx.ErrorNo = 11 THEN && + IF loEx.ErrorNo = 11 THEN && Function argument value, type, or count is invalid loEx.UserValue = loEx.UserValue + '> POSSIBLE CORRUPTED TABLE' + CR_LF ENDIF IF THIS.l_Debug AND _VFP.STARTMODE = 0 From 111097fbc7d0e670978bb0d10f5c389e285541d4 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 30 Nov 2014 17:18:34 +0100 Subject: [PATCH 22/25] =?UTF-8?q?Changeset:=20533=20fdbozzo=20-=2030/11/20?= =?UTF-8?q?14=2017:17:04:=20-=20Limpieza=20de=20c=C3=B3digo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 6ccbab0..5922edd 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -2877,8 +2877,6 @@ DEFINE CLASS c_conversor_base AS SESSION + [] ; + [] ; + [] ; - + [] ; - + [] ; + [] ; + [] @@ -2911,8 +2909,6 @@ DEFINE CLASS c_conversor_base AS SESSION c_OriginalFileName = '' c_ClaseActual = '' oFSO = NULL - n_Avance_Proceso = 0 - n_Avance_Maximo = 0 ******************************************************************************************************************* @@ -6590,7 +6586,6 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin ENDIF lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - .n_Avance_Maximo = lnCodeLines *-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF .AvanceDelProceso( 'Identifying Excluded Blocks...', 3, lnCodeLines, 1 ) @@ -6928,7 +6923,6 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin ENDIF lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - .n_Avance_Maximo = lnCodeLines *-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF .AvanceDelProceso( 'Identifying Excluded Blocks...', 3, lnCodeLines, 1 ) @@ -7244,7 +7238,6 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - .n_Avance_Maximo = lnCodeLines toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) @@ -8043,7 +8036,6 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - .n_Avance_Maximo = lnCodeLines toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) @@ -8475,7 +8467,6 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin WITH THIS AS c_conversor_prg_a_dbf OF 'FOXBIN2PRG.PRG' C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - .n_Avance_Maximo = lnCodeLines toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) @@ -8772,7 +8763,6 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin WITH THIS AS c_conversor_prg_a_dbc OF 'FOXBIN2PRG.PRG' C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - .n_Avance_Maximo = lnCodeLines toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) @@ -8953,7 +8943,6 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin WITH THIS AS c_conversor_prg_a_mnx OF 'FOXBIN2PRG.PRG' C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - .n_Avance_Maximo = lnCodeLines toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) @@ -11066,7 +11055,6 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg WITH THIS AS c_conversor_vcx_a_prg OF 'FOXBIN2PRG.PRG' USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN - .n_Avance_Maximo = _TALLY lnStepCount = 7 USE IN (SELECT("_TABLAORIG")) @@ -11357,7 +11345,6 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg WITH THIS AS c_conversor_scx_a_prg OF 'FOXBIN2PRG.PRG' USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN - .n_Avance_Maximo = _TALLY USE IN (SELECT("_TABLAORIG")) INDEX ON PADR(LOWER(PLATFORM + IIF(EMPTY(PARENT),'',ALLTRIM(PARENT)+'.')+OBJNAME),240) TAG PARENT_OBJ OF TABLABIN ADDITIVE @@ -11661,7 +11648,6 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg WITH THIS AS c_conversor_pjx_a_prg OF 'FOXBIN2PRG.PRG' USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN - .n_Avance_Maximo = _TALLY USE IN (SELECT("_TABLAORIG")) loServerHead = CREATEOBJECT('CL_PROJ_SRV_HEAD') @@ -12388,7 +12374,6 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg ENDIF SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN_0 - .n_Avance_Maximo = _TALLY USE IN (SELECT("_TABLAORIG")) *-- Header @@ -12780,7 +12765,6 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg WITH THIS AS c_conversor_mnx_a_prg OF 'FOXBIN2PRG.PRG' USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN - .n_Avance_Maximo = _TALLY USE IN (SELECT("_TABLAORIG")) .AvanceDelProceso( 'Analyzing MNX...', 1, 2, 1 ) From 78ad48e005ca35d0fa8312e49bf3e865060bfd3c Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 30 Nov 2014 17:25:59 +0100 Subject: [PATCH 23/25] =?UTF-8?q?Changeset:=20535=20fdbozzo=20-=2030/11/20?= =?UTF-8?q?14=2017:22:25:=20-=20Generaci=C3=B3n=20del=20EXE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.exe | Bin 459895 -> 467912 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index e88254e09a7fa7b0e103156f59c7ca4b2ed67d7f..5e7e9b5fbccae202217612ccaa1ba4d656d401fe 100644 GIT binary patch delta 47923 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 TxPd+6|2s`;axWkJ)Ykt2;#57! delta 41163 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 From b9a1aa494e31a46424f2e4a414a12cd63c9fbcd2 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 30 Nov 2014 17:45:27 +0100 Subject: [PATCH 24/25] =?UTF-8?q?Changeset:=20537=20fdbozzo=20-=2030/11/20?= =?UTF-8?q?14=2017:28:06:=20-=20Actualizaci=C3=B3n=20del=20archivo=20de=20?= =?UTF-8?q?log=20de=20versiones?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 0840076..4976511 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -3,7 +3,7 @@ Lparameters toUpdateInfo Local lcNote With toUpdateInfo .VersionNumber = 'v1.19.37' - .VersionDate = Date(2014,11,22) + .VersionDate = Date(2014,11,30) .SourceFileUrl = 'http://vfpxrepository.com/dl/thorupdate/Projects/FoxBin2Prg/FoxBin2Prg.Zip' .Link = 'http://vfpx.codeplex.com/wikipage?title=FoxBin2PRG' @@ -17,12 +17,19 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg Change History ------------------------------------------------------------- -2014/11/22 v1.19.37 -- Added Class per file support, configurable with UseClassPerFile:1 (Ryan Harris/Lutz Scheffler) -- Code Optimizations -- Enhancement: foxbin2prg.cfg configuration options can now have "&&" comments at the right of the values (edyshor) +2014/11/30 v1.19.37 +- Feature: Added Class per file support, configurable with UseClassPerFile:1 (Ryan Harris/Lutz Scheffler) +- Feature: foxbin2prg.cfg configuration options can now have "&&" comments at the right of the values (edyshor) +- Feature: Added support for the new "ClearDBFLastUpdate" setting in FoxBin2Prg.cfg, activated by default to minimize DB2 differences (edyshor) +- Feature: Enhanced progressbar indication, with more detailed information +- Feature: vcx/scx broken properties autofix because an erroneous manual user edition on the vcx/scx +- Feature: vcx/scx autofix por Hidden and Protected duplicated properties (some type of corruption or bad manual user edit) +- Feature: Added a validation for FRX to notify the user if it is not a VFP 9 REPORT +- Feature: Batch convertions can now be interrupted with the Esc key - Bug Fix dbf: "Error 1903, String is too long to fit" when converting long DBF files with "DBF_Conversion_Support:4" to text (edyshor) -- Added support for the new "ClearDBFLastUpdate" setting in FoxBin2Prg.cfg, activated by default to minimize DB2 differences (edyshor) +- Bug Fix vcx/scx: Sometimes some properties get the description of a similarly named property +- Bug Fix vcx/scx: Hidden and Protected properties are not ordered alphabetically +- Various Code Optimizations for enhancing processing performance 2014/10/08 v1.19.36 - Bug fix mnx: When generating mn2 text view, menu all pad IDs are generated as _000000000 (bug introduced in v1.19.36) From cffb65c31030d1fe008b66a59fcfeaf961011941 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 30 Nov 2014 21:03:36 +0100 Subject: [PATCH 25/25] =?UTF-8?q?Changeset:=20539=20fdbozzo=20-=2030/11/20?= =?UTF-8?q?14=2018:55:29:=20-=20Agregado=20bot=C3=B3n=20Cancel=20en=20el?= =?UTF-8?q?=20form=20de=20progreso?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Convert_VFP9_BIN_2_PRG.vbs | 3 ++ Convert_VFP9_PRG_2_BIN.vbs | 3 ++ VFP9_FoxBin2Prg.vbs | 12 +++++++- foxbin2prg.exe | Bin 467912 -> 468467 bytes foxbin2prg.prg | 60 +++++++++++++++++++++++++++++-------- 5 files changed, 64 insertions(+), 14 deletions(-) diff --git a/Convert_VFP9_BIN_2_PRG.vbs b/Convert_VFP9_BIN_2_PRG.vbs index ecd0fe8..8a6bebf 100644 --- a/Convert_VFP9_BIN_2_PRG.vbs +++ b/Convert_VFP9_BIN_2_PRG.vbs @@ -60,6 +60,7 @@ Else oVFP9.DoCmd( "PUBLIC oFoxBin2prg" ) oVFP9.DoCmd( "oFoxBin2prg = CREATEOBJECT('c_foxbin2prg')" ) oVFP9.DoCmd( "oFoxBin2prg.cargar_frm_avance()" ) + oVFP9.DoCmd( "oFoxBin2prg.o_frm_avance.Caption = '" & FileSystemObject.GetBaseName( WScript.ScriptName ) & " - ' + oFoxBin2Prg.c_loc_process_progress" ) For i = 0 To WScript.Arguments.Count-1 scanDirs( WScript.Arguments(i) ) @@ -83,6 +84,8 @@ Else cFlagNoTimestamps = "'1'" End If + oVFP9.DoCmd( "oFoxBin2prg.o_frm_avance.Caption = '" & FileSystemObject.GetBaseName( WScript.ScriptName ) & " - ' + oFoxBin2Prg.c_loc_process_progress + ' (Press Esc to Cancel)'" ) + For i = 1 To nFile_Count oVFP9.DoCmd( "oFoxBin2Prg.AvanceDelProceso(oFoxBin2Prg.c_loc_processing_file + ' " & aFiles(i) & "...', " & i & ", " & nFile_Count & ", 0)" ) cFlagRecompile = "'" & FileSystemObject.GetParentFolderName( aFiles(i) ) & "'" diff --git a/Convert_VFP9_PRG_2_BIN.vbs b/Convert_VFP9_PRG_2_BIN.vbs index 1b7d8bd..1790852 100644 --- a/Convert_VFP9_PRG_2_BIN.vbs +++ b/Convert_VFP9_PRG_2_BIN.vbs @@ -60,6 +60,7 @@ Else oVFP9.DoCmd( "PUBLIC oFoxBin2prg" ) oVFP9.DoCmd( "oFoxBin2prg = CREATEOBJECT('c_foxbin2prg')" ) oVFP9.DoCmd( "oFoxBin2prg.cargar_frm_avance()" ) + oVFP9.DoCmd( "oFoxBin2prg.o_frm_avance.Caption = '" & FileSystemObject.GetBaseName( WScript.ScriptName ) & " - ' + oFoxBin2Prg.c_loc_process_progress" ) For i = 0 To WScript.Arguments.Count-1 scanDirs( WScript.Arguments(i) ) @@ -89,6 +90,8 @@ Else cFlagNoTimestamps = "'1'" End If + oVFP9.DoCmd( "oFoxBin2prg.o_frm_avance.Caption = '" & FileSystemObject.GetBaseName( WScript.ScriptName ) & " - ' + oFoxBin2Prg.c_loc_process_progress + ' (Press Esc to Cancel)'" ) + For i = 1 To nFile_Count oVFP9.DoCmd( "oFoxBin2Prg.AvanceDelProceso(oFoxBin2Prg.c_loc_processing_file + ' " & aFiles(i) & "...', " & i & ", " & nFile_Count & ", 0)" ) cFlagRecompile = "'" & FileSystemObject.GetParentFolderName( aFiles(i) ) & "'" diff --git a/VFP9_FoxBin2Prg.vbs b/VFP9_FoxBin2Prg.vbs index 73899ab..5ef8430 100644 --- a/VFP9_FoxBin2Prg.vbs +++ b/VFP9_FoxBin2Prg.vbs @@ -62,6 +62,7 @@ Else oVFP9.DoCmd( "PUBLIC oFoxBin2prg" ) oVFP9.DoCmd( "oFoxBin2prg = CREATEOBJECT('c_foxbin2prg')" ) oVFP9.DoCmd( "oFoxBin2prg.cargar_frm_avance()" ) + oVFP9.DoCmd( "oFoxBin2prg.o_frm_avance.Caption = '" & FileSystemObject.GetBaseName( WScript.ScriptName ) & " - ' + oFoxBin2Prg.c_loc_process_progress" ) cFlagGenerateLog = "'0'" cFlagDontShowErrMsg = "'0'" @@ -83,6 +84,8 @@ Else cFlagRecompile = "'" & FileSystemObject.GetParentFolderName( WScript.Arguments(0) ) & "'" + oVFP9.DoCmd( "oFoxBin2prg.o_frm_avance.Caption = '" & FileSystemObject.GetBaseName( WScript.ScriptName ) & " - ' + oFoxBin2Prg.c_loc_process_progress + ' (Press Esc to Cancel)'" ) + If nDebug = 0 Or nDebug = 2 Then cCMD = "oFoxBin2prg.ejecutar( '" & WScript.Arguments(0) & "' )" Else @@ -98,7 +101,14 @@ Else End If If GetBit(nDebug, 4) Then - If oVFP9.Eval("oFoxBin2prg.l_Error") Then + 'If oVFP9.Eval("oFoxBin2prg.l_Error") Then + If nExitCode = 1799 Then + MsgBox "Conversion Cancelled by User!", 48, WScript.ScriptName + cErrFile = oVFP9.Eval("FORCEPATH('FoxBin2Prg.LOG',GETENV('TEMP') )") + oVFP9.DoCmd("STRTOFILE( oFoxBin2prg.c_ErrorLog, '" & cErrFile & "' )") + WSHShell.run cErrFile + + ElseIf nExitCode > 0 Then MsgBox "End of Process! (with errors)", 48, WScript.ScriptName cErrFile = oVFP9.Eval("FORCEPATH('FoxBin2Prg.LOG',GETENV('TEMP') )") oVFP9.DoCmd("STRTOFILE( oFoxBin2prg.c_ErrorLog, '" & cErrFile & "' )") diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 5e7e9b5fbccae202217612ccaa1ba4d656d401fe..bc0aabe3f03f11bd813ddb580aa320ab29c5b3fd 100644 GIT binary patch delta 17250 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 B=l%cy diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 5922edd..93ae46f 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -592,6 +592,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM n_FB2PRG_Version = 1.19 *-- Localized properties c_loc_processing_file = C_PROCESSING_LOC + c_loc_process_progress = C_PROCESS_PROGRESS_LOC *-- c_Language = 'ES' c_FB2PRG_EXE_Version = 0 @@ -710,7 +711,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM FINALLY ON ESCAPE - THIS.o_Frm_Avance = NULL THIS.o_FSO = NULL THIS.o_FNC = NULL ENDTRY @@ -722,10 +722,19 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM PROCEDURE AvanceDelProceso LPARAMETERS tcTexto, tnValor, tnTotal, tnTipo - *-- Si o_Frm_Avance se habilitó de forma externa, l_ShowProgress podría ser .F. para controlarlo desde fuera. - IF VARTYPE(THIS.o_Frm_Avance) = "O" THEN - THIS.o_Frm_Avance.AvanceDelProceso( tcTexto, tnValor, tnTotal, tnTipo ) - ENDIF + TRY + *-- Si o_Frm_Avance se habilitó de forma externa, l_ShowProgress podría ser .F. para controlarlo desde fuera. + IF VARTYPE(THIS.o_Frm_Avance) = "O" THEN + *-- Cuando esta rutina se invoca desde el script, este método es el #1 y no puede cancelarse todavía + IF THIS.o_Frm_Avance.l_Cancelled AND PROGRAM(-1) > 1 THEN + ERROR 1799 + ENDIF + THIS.o_Frm_Avance.AvanceDelProceso( tcTexto, tnValor, tnTotal, tnTipo ) + ENDIF + + CATCH + THROW + ENDTRY ENDPROC @@ -2670,19 +2679,20 @@ ENDDEFINE ******************************************************************************************************************* DEFINE CLASS frm_avance AS FORM - Height = 100 + Height = 110 Width = 628 ShowWindow = 2 DoCreate = .T. AutoCenter = .T. BorderStyle = 2 - CAPTION = C_PROCESS_PROGRESS_LOC + ' (Press Esc to Cancel)' + CAPTION = 'FoxBin2Prg - ' + C_PROCESS_PROGRESS_LOC + ' (Press Esc to Cancel)' ControlBox = .F. BackColor = RGB(255,255,255) nmax_value = 100 nmax_value2 = 100 nvalue = 0 nvalue2 = 0 + l_Cancelled = .F. Name = "frm_avance" _memberdata = [] ; + [] ; @@ -2694,11 +2704,12 @@ DEFINE CLASS frm_avance AS FORM + [] ; + [] ; + [] ; + + [] ; + [] ADD OBJECT shp_base AS shape WITH ; - Top = 32, ; + Top = 28, ; Left = 12, ; Height = 13, ; Width = 604, ; @@ -2707,7 +2718,7 @@ DEFINE CLASS frm_avance AS FORM ADD OBJECT shp_avance AS shape WITH ; - Top = 32, ; + Top = 28, ; Left = 12, ; Height = 13, ; Width = 36, ; @@ -2722,13 +2733,13 @@ DEFINE CLASS frm_avance AS FORM Caption = ".", ; Height = 17, ; Left = 12, ; - Top = 12, ; + Top = 8, ; Width = 604, ; Name = "lbl_Tarea" ADD OBJECT shp_base2 AS shape WITH ; - Top = 68, ; + Top = 64, ; Left = 12, ; Height = 13, ; Width = 604, ; @@ -2737,7 +2748,7 @@ DEFINE CLASS frm_avance AS FORM ADD OBJECT shp_avance2 AS shape WITH ; - Top = 68, ; + Top = 64, ; Left = 12, ; Height = 13, ; Width = 36, ; @@ -2752,15 +2763,33 @@ DEFINE CLASS frm_avance AS FORM Caption = ".", ; Height = 17, ; Left = 12, ; - Top = 48, ; + Top = 44, ; Width = 604, ; Name = "lbl_Tarea2" + ADD OBJECT cmdcancel AS commandbutton WITH ; + Top = 84, ; + Left = 252, ; + Height = 21, ; + Width = 100, ; + Caption = "Cancel", ; + Enabled = .F., ; + Name = "cmdCancel" + + PROCEDURE AvanceDelProceso LPARAMETERS tcTexto, tnValor, tnTotal, tnTipo WITH THIS AS frm_avance OF foxbin2prg.prg + *-- Habilita el botón de cancelar una vez que se comienzan a pasar valores + IF NOT EMPTY(tnValor) THEN + IF NOT .cmdCancel.Enabled THEN + .cmdCancel.Enabled = .T. + ENDIF + DOEVENTS + ENDIF + DO CASE CASE tnTipo = 0 IF NOT EMPTY(tcTexto) THEN @@ -2825,6 +2854,11 @@ DEFINE CLASS frm_avance AS FORM ENDPROC + PROCEDURE cmdcancel.Click + THISFORM.l_Cancelled = .T. + ENDPROC + + ENDDEFINE