From cc9f1d9e24881d7d1228c3eb09cd30cbc6543a7d Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 28 Jun 2014 00:09:38 +0200 Subject: [PATCH 1/7] =?UTF-8?q?Changeset:=20341=20fdbozzo=20-=2027/06/2014?= =?UTF-8?q?=2019:01:21:=20-=20Quitar=20los=20asteriscos=20que=20pudieran?= =?UTF-8?q?=20haber=20entre=20los=20ENDPROC=20y=20PROCEDURE,=20analizados?= =?UTF-8?q?=20en=20ese=20orden,=20para=20regenerar=20binario=20sin=20error?= =?UTF-8?q?es.=20(Daniel=20S=C3=A1nchez)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 20 +++++++++++++++----- foxbin2prg_de.h | 2 +- foxbin2prg_en.h | 2 +- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index a9754df..51d8a1b 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -90,6 +90,7 @@ * 14/06/2014 FDBOZZO v1.19.24 Arreglo bug vcx/scx: Un campo de tabla llamado "text" que comienza la línea puede confundirse con la estructura TEXT/ENDTEXT y reconocer mal el resto del código * 16/06/2014 FDBOZZO v1.19.25 Mejora: Agregado soporte de configuraciones (CFG) por directorio que, si existen, se usan en lugar del principal (Mario Peschke) * 17/06/2014 FDBOZZO v1.19.25 Mejora: Si durante la generación de binarios o de textos se producen errores, mostrar un mensaje avisando de ello (Pedro Gutiérrez M.) +* 27/06/2014 FDBOZZO v1.19.26 Mejora: Si el campo memo "methods" de los vcx/scx contiene asteriscos fuera de lugar (que no debería), FoxBin2Prg lo procesa igualmente. (Daniel Sánchez) * * *--------------------------------------------------------------------------------------------------- @@ -124,6 +125,7 @@ * 13/06/2014 Mario Peschke REPORTE BUG vcx/scx v1.19.23: Los campos de tabla con nombre "text" a veces provocan corrupción del binario generado (Arreglado en v1.19.24) * 16/06/2014 Mario Peschke MEJORA v1.19.24: Agregado soporte de configuraciones (CFG) por directorio que, si existen, se usan en lugar del CFG principal (Agregado en v1.19.25) * 17/06/2014 Pedro Gutiérrez M. MEJORA v1.19.24: Si durante la generación de binarios o de textos se producen errores, mostrar un mensaje avisando de ello (Agregado en v1.19.25) +* 27/06/2014 Daniel Sánchez MEJORA v1.19.25: Si el campo memo "methods" de los vcx/scx contiene asteriscos fuera de lugar (que no debería), FoxBin2Prg falla. Debería poder procesarlo igual. * * *--------------------------------------------------------------------------------------------------- @@ -346,7 +348,7 @@ LPARAMETERS tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDeb #DEFINE C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC "Operación no reconocida. Solo re reconoce SETNAME y GETNAME." #DEFINE C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC "Optimización: El archivo de salida [<>] no se sobreescribe por ser igual al generado." #DEFINE C_OUTPUTFILE_NEWER_THAN_INPUTFILE_LOC "Optimización: El archivo de salida [<>] no se regenera por ser más nuevo que el de entrada." - #DEFINE C_PROCEDURE_NOT_CLOSED_ON_LINE_LOC "Procedimiento sin cerrar. La última línea de código debe ser ENDPROC. [<>]" + #DEFINE C_PROCEDURE_NOT_CLOSED_ON_LINE_LOC "Procedimiento sin cerrar. La última línea de código debe ser ENDPROC. [<>, Recno:<>]" #DEFINE C_PROCESSING_LOC "Procesando archivo" #DEFINE C_PROCESS_PROGRESS_LOC "Avance del proceso:" #DEFINE C_PROPERTY_NAME_NOT_RECOGNIZED_LOC "Propiedad [<>] no reconocida." @@ -8524,7 +8526,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *-- taCode[1] *-- Bloque de código del método en su posición original TRY - LOCAL lnLineCount, laLine(1), I, lnTextNodes, tcSorted, lnProtectedLine, lcMethod, lnLine_Len, lcLine + LOCAL lnLineCount, laLine(1), I, lnTextNodes, tcSorted, lnProtectedLine, lcMethod, lnLine_Len, lcLine, llProcOpen LOCAL loEx AS EXCEPTION DIMENSION taMethods(1,3) STORE '' TO taMethods, tcSorted, taCode @@ -8542,7 +8544,9 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *-- Delete beginning empty lines before first "PROCEDURE", that is the first not empty line. FOR I = 1 TO lnLineCount - IF NOT EMPTY(laLine(I)) + IF EMPTY(laLine(I)) OR LEFT( LTRIM(laLine(I)),1 ) = '*' + *-- Skip empty and commented lines + ELSE IF I > 1 FOR X = I-1 TO 1 STEP -1 ADEL(laLine, X) @@ -8556,7 +8560,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *-- Delete ending empty lines after last "ENDPROC", that is the last not empty line. FOR I = lnLineCount TO 1 STEP -1 - IF EMPTY(laLine(I)) + IF EMPTY(laLine(I)) OR LEFT( LTRIM(laLine(I)),1 ) = '*' ADEL(laLine, I) ELSE IF I < lnLineCount @@ -8608,6 +8612,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base taMethods(tnMethodCount, 2) = tnMethodCount taMethods(tnMethodCount, 3) = '' taCode(tnMethodCount) = laLine(I) + CR_LF + llProcOpen = .T. CASE lnTextNodes = 0 AND UPPER( LEFT(laLine(I), 17) ) == 'HIDDEN PROCEDURE ' tnMethodCount = tnMethodCount + 1 @@ -8616,6 +8621,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base taMethods(tnMethodCount, 2) = tnMethodCount taMethods(tnMethodCount, 3) = 'HIDDEN ' taCode(tnMethodCount) = laLine(I) + CR_LF + llProcOpen = .T. CASE lnTextNodes = 0 AND UPPER( LEFT(laLine(I), 20) ) == 'PROTECTED PROCEDURE ' tnMethodCount = tnMethodCount + 1 @@ -8624,6 +8630,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base taMethods(tnMethodCount, 2) = tnMethodCount taMethods(tnMethodCount, 3) = 'PROTECTED ' taCode(tnMethodCount) = laLine(I) + CR_LF + llProcOpen = .T. CASE lnTextNodes = 0 AND LEFT(laLine(I), 7) == 'ENDPROC' lcLine = UPPER( CHRTRAN( laLine(I) , '&'+CHR(9)+CHR(0), ' ') ) + ' ' @@ -8636,8 +8643,11 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDIF taCode(tnMethodCount) = taCode(tnMethodCount) + laLine(I) + CR_LF + llProcOpen = .F. - CASE tnMethodCount = 0 && Skip empty lines before methods begin + CASE tnMethodCount = 0 OR NOT llProcOpen AND LEFT( LTRIM(laLine(I)),1 ) = '*' + *-- Skip empty and commented lines before methods begin + *-- Aquí como condición podría poner: NOT llProcOpen AND LEFT(laLine(I), 7) # 'ENDPROC', pero abarcaría demasiado. OTHERWISE && Method Code taCode(tnMethodCount) = taCode(tnMethodCount) + laLine(I) + CR_LF diff --git a/foxbin2prg_de.h b/foxbin2prg_de.h index c93bd27..ed8845d 100644 --- a/foxbin2prg_de.h +++ b/foxbin2prg_de.h @@ -35,7 +35,7 @@ #DEFINE C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC "Befehl nicht erkannt. Nur SETNAME und GETNAME erlaubt." #DEFINE C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC "Optimierung: Ausgabedatei [<>] wurde nicht überschrieben da sie dieselbe ist wie die neu generierte." #DEFINE C_OUTPUTFILE_NEWER_THAN_INPUTFILE_LOC "Optimierung: Ausgabedatei [<>] wurde nicht erneuert da sie neuer ist als die Ursprungsdatei." -#DEFINE C_PROCEDURE_NOT_CLOSED_ON_LINE_LOC "Procedur nicht geschlossen. Letzte Zeile des Codes muss ENDPROC sein. [<>]" +#DEFINE C_PROCEDURE_NOT_CLOSED_ON_LINE_LOC "Procedur nicht geschlossen. Letzte Zeile des Codes muss ENDPROC sein. [<>, Recno:<>]" #DEFINE C_PROCESSING_LOC "Bearbeite Datei" #DEFINE C_PROCESS_PROGRESS_LOC "Bearbeitungsfortschritt:" #DEFINE C_PROPERTY_NAME_NOT_RECOGNIZED_LOC "Eigenschaft [<>] nicht erkannt." diff --git a/foxbin2prg_en.h b/foxbin2prg_en.h index af823ec..7c5d070 100644 --- a/foxbin2prg_en.h +++ b/foxbin2prg_en.h @@ -35,7 +35,7 @@ #DEFINE C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC "Operation not recognized. Only SETNAME and GETNAME allowed." #DEFINE C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC "Optimization: Output file [<>] was not overwritten because it is the same as was generated." #DEFINE C_OUTPUTFILE_NEWER_THAN_INPUTFILE_LOC "Optimization: Output file [<>] was not regenerated because it is newer than the inputfile." -#DEFINE C_PROCEDURE_NOT_CLOSED_ON_LINE_LOC "Procedure not closed. Last line of code must be ENDPROC. [<>]" +#DEFINE C_PROCEDURE_NOT_CLOSED_ON_LINE_LOC "Procedure not closed. Last line of code must be ENDPROC. [<>, Recno:<>]" #DEFINE C_PROCESSING_LOC "Processing file" #DEFINE C_PROCESS_PROGRESS_LOC "Process Progress:" #DEFINE C_PROPERTY_NAME_NOT_RECOGNIZED_LOC "Property [<>] is not recognized." From 8e92b753ac8e1a45e6dc461901362b77d811480a Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 6 Jul 2014 12:54:23 +0200 Subject: [PATCH 2/7] =?UTF-8?q?Changeset:=20342=20fdbozzo=20-=2005/07/2014?= =?UTF-8?q?=2012:21:17:=20-=20Agregar=20opci=C3=B3n=20l=5FDropNullCharsFro?= =?UTF-8?q?mCode,=20activada=20por=20defecto,=20para=20permitir=20quitar?= =?UTF-8?q?=20los=20NULLs=20del=20c=C3=B3digo=20fuente=20(Matt=20Slay)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TESTS/ut__foxbin2prg.prg | 114 +++++++++++++++++++++++++++++++++++++++ foxbin2prg.prg | 71 ++++++++++++++++-------- 2 files changed, 163 insertions(+), 22 deletions(-) diff --git a/TESTS/ut__foxbin2prg.prg b/TESTS/ut__foxbin2prg.prg index 7e069c4..979ed91 100644 --- a/TESTS/ut__foxbin2prg.prg +++ b/TESTS/ut__foxbin2prg.prg @@ -1272,6 +1272,120 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg ENDFUNC + ******************************************************************************************************************************************* + FUNCTION Deberia_GenerarUnArchivo_SC2_DesdeUnBinarioQueContieneNullsEnElCodigo_SinLosNulls + LOCAL lnCodError, lnCodError_Esperado ; + , lc_File, lc_OutputFile, lc_OutputFileTx2, lc_OutputFileBak, lcExt2, lcFileName, lnNulls, lnNulls_Esperados ; + , lcParent, lcClass, lcObjName, loReg_Esperado ; + , loCtl AS f_optiongroup OF "TESTS\DATOS_READONLY\LIB_CONTROLES.VCX" ; + , loCnv AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ; + , loEx AS EXCEPTION + #IF .F. + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + #ENDIF + + TRY + loEx = NULL + loCnv = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG") + loCnv.EvaluarConfiguracion( '', '', '1', '1', '1', '4', '1', '0' ) + *loCnv.l_DropNullCharsFromCode = .T. + *loCnv.l_Test = .T. + + + *-- DATOS DE ENTRADA + STORE 0 TO lnCodError, lnCodError_Esperado, lnNulls, lnNulls_Esperados + lcFileName = 'f_nullchars_incode.scx' + lnNulls_Esperados = 0 + + *-- Copio la librería en DATOS_TEST + lc_File = UPPER(lcFileName) + lcExt2 = loCnv.Get_Ext2FromExt( JUSTEXT( lc_File ) ) + lc_OutputFile = FORCEPATH( lc_File, oFXU_LIB.cPathDatosTest ) + lc_OutputFileTx2 = FORCEEXT( FORCEPATH( lc_File, oFXU_LIB.cPathDatosTest ), lcExt2 ) + lc_OutputFileBak = lc_OutputFileTx2 + '.bak' + + oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) ) + COPY FILE (lc_OutputFileTx2) TO (lc_OutputFileBak) + + *-- Genero TX2 + loCnv.Ejecutar( lc_OutputFile, .F., .F., .F., '1', '0', '1', '', '', .T., '', SYS(5)+CURDIR() ) + lnNulls = OCCURS( CHR(0), FILETOSTR( lc_OutputFileTx2 ) ) + + *-- Comparo resultados + THIS.messageout( "Se comprueba si el archivo texto generado contiene NULLs" ) + THIS.messageout( "NULLs esperados: " + TRANSFORM(lnNulls_Esperados) ) + THIS.messageout( "NULLs encontrados: " + TRANSFORM(lnNulls) ) + THIS.assertequals( lnNulls_Esperados, lnNulls, "COMPROBACIÓN THE NULLS" ) + + + CATCH TO loEx + THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado ) + + FINALLY + STORE NULL TO loCnv, loCtl + RELEASE loCnv, loCtl + ENDTRY + + ENDFUNC + + + ******************************************************************************************************************************************* + FUNCTION Deberia_GenerarUnArchivo_SC2_DesdeUnBinarioQueContieneNullsEnElCodigo_ConLosNulls + LOCAL lnCodError, lnCodError_Esperado ; + , lc_File, lc_OutputFile, lc_OutputFileTx2, lc_OutputFileBak, lcExt2, lcFileName, lnNulls, lnNulls_Esperados ; + , lcParent, lcClass, lcObjName, loReg_Esperado ; + , loCtl AS f_optiongroup OF "TESTS\DATOS_READONLY\LIB_CONTROLES.VCX" ; + , loCnv AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ; + , loEx AS EXCEPTION + #IF .F. + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + #ENDIF + + TRY + loEx = NULL + loCnv = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG") + loCnv.EvaluarConfiguracion( '', '', '1', '1', '1', '4', '1', '0' ) + loCnv.l_DropNullCharsFromCode = .F. + *loCnv.l_Test = .T. + + + *-- DATOS DE ENTRADA + STORE 0 TO lnCodError, lnCodError_Esperado, lnNulls, lnNulls_Esperados + lcFileName = 'f_nullchars_incode.scx' + lnNulls_Esperados = 2 + + *-- Copio la librería en DATOS_TEST + lc_File = UPPER(lcFileName) + lcExt2 = loCnv.Get_Ext2FromExt( JUSTEXT( lc_File ) ) + lc_OutputFile = FORCEPATH( lc_File, oFXU_LIB.cPathDatosTest ) + lc_OutputFileTx2 = FORCEEXT( FORCEPATH( lc_File, oFXU_LIB.cPathDatosTest ), lcExt2 ) + lc_OutputFileBak = lc_OutputFileTx2 + '.bak' + + oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) ) + COPY FILE (lc_OutputFileTx2) TO (lc_OutputFileBak) + + *-- Genero TX2 + loCnv.Ejecutar( lc_OutputFile, .F., .F., .F., '1', '0', '1', '', '', .T., '', SYS(5)+CURDIR() ) + lnNulls = OCCURS( CHR(0), FILETOSTR( lc_OutputFileTx2 ) ) + + *-- Comparo resultados + THIS.messageout( "Se comprueba si el archivo texto generado contiene NULLs" ) + THIS.messageout( "NULLs esperados: " + TRANSFORM(lnNulls_Esperados) ) + THIS.messageout( "NULLs encontrados: " + TRANSFORM(lnNulls) ) + THIS.assertequals( lnNulls_Esperados, lnNulls, "COMPROBACIÓN THE NULLS" ) + + + CATCH TO loEx + THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado ) + + FINALLY + STORE NULL TO loCnv, loCtl + RELEASE loCnv, loCtl + ENDTRY + + ENDFUNC + + ******************************************************************************************************************************************* FUNCTION Evaluate_TX2_Output_Test LPARAMETERS tcFileName diff --git a/foxbin2prg.prg b/foxbin2prg.prg index a9754df..7d7cffb 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -90,6 +90,7 @@ * 14/06/2014 FDBOZZO v1.19.24 Arreglo bug vcx/scx: Un campo de tabla llamado "text" que comienza la línea puede confundirse con la estructura TEXT/ENDTEXT y reconocer mal el resto del código * 16/06/2014 FDBOZZO v1.19.25 Mejora: Agregado soporte de configuraciones (CFG) por directorio que, si existen, se usan en lugar del principal (Mario Peschke) * 17/06/2014 FDBOZZO v1.19.25 Mejora: Si durante la generación de binarios o de textos se producen errores, mostrar un mensaje avisando de ello (Pedro Gutiérrez M.) +* 06/07/2014 FDBOZZO v1.19.26 Mejora: Cuando se convierten binarios a texto, los CHR(0) pasan también, pudiendo provocar falsa detección como binario. Se agrega opción para quitar los NULLs. (Matt Slay) * * *--------------------------------------------------------------------------------------------------- @@ -124,6 +125,7 @@ * 13/06/2014 Mario Peschke REPORTE BUG vcx/scx v1.19.23: Los campos de tabla con nombre "text" a veces provocan corrupción del binario generado (Arreglado en v1.19.24) * 16/06/2014 Mario Peschke MEJORA v1.19.24: Agregado soporte de configuraciones (CFG) por directorio que, si existen, se usan en lugar del CFG principal (Agregado en v1.19.25) * 17/06/2014 Pedro Gutiérrez M. MEJORA v1.19.24: Si durante la generación de binarios o de textos se producen errores, mostrar un mensaje avisando de ello (Agregado en v1.19.25) +* 02/07/2014 Matt Slay MEJORA v1.19.25: Se filtran algunos CHR(0) de los binarios al tx2, provocando que a veces no sea reconocido como texto. Deberían poderse quitar los NULLs (Arreglado en v1.19.26) * * *--------------------------------------------------------------------------------------------------- @@ -277,6 +279,7 @@ LPARAMETERS tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDeb #DEFINE C_TAB CHR(9) #DEFINE C_CR CHR(13) #DEFINE C_LF CHR(10) +#DEFINE C_NULL_CHAR CHR(0) #DEFINE CR_LF C_CR + C_LF #DEFINE C_MPROPHEADER REPLICATE( CHR(1), 517 ) *-- Fin / End @@ -444,6 +447,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -514,6 +518,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM l_ShowErrors = .T. l_ShowProgress = .T. l_AllowMultiConfig = .T. + l_DropNullCharsFromCode = .T. l_Recompile = .T. l_NoTimestamps = .T. l_ClearUniqueID = .T. @@ -1145,21 +1150,28 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM lcValue = ALLTRIM( SUBSTR( laConfig(I), 15 ) ) IF NOT INLIST( TRANSFORM(tcClearUniqueID), '0', '1' ) AND INLIST( lcValue, '0', '1' ) THEN tcClearUniqueID = lcValue - .writeLog( JUSTFNAME(lcConfigFile) + ' > ClearUniqueID: ' + TRANSFORM(ALLTRIM( SUBSTR( laConfig(I), 15 )) ) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > ClearUniqueID: ' + TRANSFORM(lcValue) ) ENDIF CASE LEFT( laConfig(I), 20 ) == LOWER('OptimizeByFilestamp:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 21 ) ) IF NOT INLIST( TRANSFORM(tcOptimizeByFilestamp), '0', '1' ) AND INLIST( lcValue, '0', '1' ) THEN tcOptimizeByFilestamp = lcValue - .writeLog( JUSTFNAME(lcConfigFile) + ' > OptimizeByFilestamp: ' + TRANSFORM(ALLTRIM( SUBSTR( laConfig(I), 21 )) ) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > OptimizeByFilestamp: ' + TRANSFORM(lcValue) ) ENDIF CASE LEFT( laConfig(I), 17 ) == LOWER('AllowMultiConfig:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 18 ) ) IF INLIST( lcValue, '0', '1' ) THEN .l_AllowMultiConfig = ( TRANSFORM(lcValue) == '1' ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > AllowMultiConfig: ' + TRANSFORM(ALLTRIM( SUBSTR( laConfig(I), 18 )) ) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > AllowMultiConfig: ' + TRANSFORM(lcValue) ) + ENDIF + + CASE LEFT( laConfig(I), 22 ) == LOWER('DropNullCharsFromCode:') + lcValue = ALLTRIM( SUBSTR( laConfig(I), 23 ) ) + IF INLIST( lcValue, '0', '1' ) THEN + .l_DropNullCharsFromCode = ( TRANSFORM(lcValue) == '1' ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > DropNullCharsFromCode: ' + TRANSFORM(lcValue) ) ENDIF CASE LEFT( laConfig(I), 23 ) == LOWER('PJX_Conversion_Support:') @@ -1251,14 +1263,15 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF .writeLog( '---' ) - .writeLog( '> l_ShowProgress: ' + TRANSFORM(.l_ShowProgress) ) - .writeLog( '> l_ShowErrors: ' + TRANSFORM(.l_ShowErrors) ) - .writeLog( '> l_Recompile: ' + TRANSFORM(.l_Recompile) + ' (' + EVL(tcRecompile,'') + ')' ) - .writeLog( '> l_NoTimestamps: ' + TRANSFORM(.l_NoTimestamps) ) - .writeLog( '> l_ClearUniqueID: ' + TRANSFORM(.l_ClearUniqueID) ) - .writeLog( '> l_Debug: ' + TRANSFORM(.l_Debug) ) - .writeLog( '> n_ExtraBackupLevels: ' + TRANSFORM(.n_ExtraBackupLevels) ) - .writeLog( '> l_OptimizeByFilestamp: ' + TRANSFORM(.l_OptimizeByFilestamp) ) + .writeLog( '> l_ShowProgress: ' + TRANSFORM(.l_ShowProgress) ) + .writeLog( '> l_ShowErrors: ' + TRANSFORM(.l_ShowErrors) ) + .writeLog( '> l_Recompile: ' + TRANSFORM(.l_Recompile) + ' (' + EVL(tcRecompile,'') + ')' ) + .writeLog( '> l_NoTimestamps: ' + TRANSFORM(.l_NoTimestamps) ) + .writeLog( '> l_ClearUniqueID: ' + TRANSFORM(.l_ClearUniqueID) ) + .writeLog( '> l_Debug: ' + TRANSFORM(.l_Debug) ) + .writeLog( '> n_ExtraBackupLevels: ' + TRANSFORM(.n_ExtraBackupLevels) ) + .writeLog( '> l_OptimizeByFilestamp: ' + TRANSFORM(.l_OptimizeByFilestamp) ) + .writeLog( '> l_DropNullCharsFromCode: ' + TRANSFORM(.l_DropNullCharsFromCode) ) lo_CFG = NULL RELEASE lo_CFG @@ -8119,16 +8132,20 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ******************************************************************************************************************* PROCEDURE get_ADD_OBJECT_METHODS LPARAMETERS toRegObj, toRegClass, tcMethods, taMethods, taCode, tnMethodCount ; - , taPropsAndComments, tnPropsAndComments_Count, taProtected, tnProtected_Count + , taPropsAndComments, tnPropsAndComments_Count, taProtected, tnProtected_Count ; + , toFoxBin2Prg EXTERNAL ARRAY taPropsAndComments, taProtected + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF TRY LOCAL lcMethodName WITH THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG' .SortMethod( toRegObj.METHODS, @taMethods, @taCode, '', @tnMethodCount ; - , @taPropsAndComments, tnPropsAndComments_Count, @taProtected, tnProtected_Count ) + , @taPropsAndComments, tnPropsAndComments_Count, @taProtected, tnProtected_Count, @toFoxBin2Prg ) *-- Ubico los métodos protegidos y les cambio la definición. *-- Los métodos se deben generar con la ruta completa, porque si no es imposible saber a que objeto corresponden, @@ -8510,11 +8527,14 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ******************************************************************************************************************* PROCEDURE SortMethod LPARAMETERS tcMethod, taMethods, taCode, tcSorted, tnMethodCount, taPropsAndComments, tnPropsAndComments_Count ; - , taProtected, tnProtected_Count + , taProtected, tnProtected_Count, toFoxBin2Prg *-- 29/10/2013 Fernando D. Bozzo *-- Se tiene en cuenta la posibilidad de que haya un PROC/ENDPROC dentro de un TEXT/ENDTEXT *-- cuando es usado en un generador de código o similar. EXTERNAL ARRAY taMethods, taCode, taPropsAndComments, taProtected + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF *-- ESTRUCTURA DE LOS ARRAYS CREADOS: *-- taMethods[1,3] @@ -8538,6 +8558,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base DIMENSION laLine(1), taMethods(1,3) STORE '' TO laLine, taMethods, taCode STORE 0 TO tnMethodCount, lnTextNodes + lnLineCount = ALINES(laLine, m.tcMethod) && NO aplicar nungún formato ni limpieza, que es el CÓDIGO FUENTE *-- Delete beginning empty lines before first "PROCEDURE", that is the first not empty line. @@ -8569,6 +8590,10 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *-- Analyze and count line methods, get method names and consolidate block code FOR I = 1 TO lnLineCount + IF toFoxBin2Prg.l_DropNullCharsFromCode + laLine(I) = CHRTRAN( laLine(I), C_NULL_CHAR, '' ) + ENDIF + lnLine_Len = LEN( laLine(I) ) DO CASE @@ -8777,7 +8802,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ******************************************************************************************************************* PROCEDURE write_ALL_OBJECT_METHODS - LPARAMETERS tcMethods, taPropsAndComments, tnPropsAndComments_Count, taProtected, tnProtected_Count + LPARAMETERS tcMethods, taPropsAndComments, tnPropsAndComments_Count, taProtected, tnProtected_Count, toFoxBin2Prg *-- Finalmente, todos los métodos los ordeno y escribo juntos LOCAL laMethods(1), laCode(1), lnMethodCount, I, lcMethods @@ -8788,7 +8813,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base WITH THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG' .SortMethod( @tcMethods, @laMethods, @laCode, '', @lnMethodCount ; - , @taPropsAndComments, tnPropsAndComments_Count, @taProtected, tnProtected_Count ) + , @taPropsAndComments, tnPropsAndComments_Count, @taProtected, tnProtected_Count, @toFoxBin2Prg ) FOR I = 1 TO lnMethodCount *-- Genero los métodos indentados @@ -9850,7 +9875,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg DIMENSION laMethods(1,3) laMethods = '' .SortMethod( loRegClass.METHODS, @laMethods, @laCode, '', @lnMethodCount ; - , @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count ) + , @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count, @toFoxBin2Prg ) .write_CLASS_METHODS( @lnMethodCount, @laMethods, @laCode, @laProtected, @laPropsAndComments ) @@ -9878,10 +9903,11 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg ENDIF .get_ADD_OBJECT_METHODS( @loRegObj, @loRegClass, @lcMethods, @laMethods, @laCode, @lnMethodCount ; - , @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count ) + , @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count, @toFoxBin2Prg ) ENDSCAN - .write_ALL_OBJECT_METHODS( @lcMethods, @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count ) + .write_ALL_OBJECT_METHODS( @lcMethods, @laPropsAndComments, lnPropsAndComments_Count, @laProtected ; + , lnProtected_Count, @toFoxBin2Prg ) GOTO RECORD (lnRecno) ENDSCAN @@ -10087,7 +10113,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg DIMENSION laMethods(1,3) laMethods = '' .SortMethod( loRegClass.METHODS, @laMethods, @laCode, '', @lnMethodCount ; - , @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count ) + , @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count, @toFoxBin2Prg ) .write_CLASS_METHODS( @lnMethodCount, @laMethods, @laCode, @laProtected, @laPropsAndComments ) @@ -10117,10 +10143,11 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg ENDIF .get_ADD_OBJECT_METHODS( @loRegObj, @loRegClass, @lcMethods, @laMethods, @laCode, @lnMethodCount ; - , @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count ) + , @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count, @toFoxBin2Prg ) ENDSCAN - .write_ALL_OBJECT_METHODS( @lcMethods, @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count ) + .write_ALL_OBJECT_METHODS( @lcMethods, @laPropsAndComments, lnPropsAndComments_Count, @laProtected ; + , lnProtected_Count, @toFoxBin2Prg ) GOTO RECORD (lnRecno) ENDSCAN From c6a12d1c07c5eb4347fff34a005b2b802697c112 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 6 Jul 2014 13:43:31 +0200 Subject: [PATCH 3/7] Changeset: 345 fdbozzo - 06/07/2014 13:05:21: --- TESTS/ut__foxbin2prg.prg | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/TESTS/ut__foxbin2prg.prg b/TESTS/ut__foxbin2prg.prg index 979ed91..81a72b7 100644 --- a/TESTS/ut__foxbin2prg.prg +++ b/TESTS/ut__foxbin2prg.prg @@ -128,10 +128,12 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg , laProtected(1), lnProtected_Count, laProtected_Esperado(1), lnProtected_Count_Esperado ; , laMethods(1,2), lnMethods_Count, laMethods_Esperado(1,2), lnMethods_Count_Esperado, lcExtraData LOCAL loObj AS c_conversor_bin_a_prg OF "FOXBIN2PRG.PRG" + LOCAL loFoxBin2Prg AS c_foxbin2prg OF "FOXBIN2PRG.PRG" *-- Algunos ajustes para mejor visualización de caracteres especiales *tcPropValue = oFXU_LIB.mejorarPresentacionCaracteresEspeciales( tcPropValue ) - loObj = NEWOBJECT("c_conversor_bin_a_prg", "FOXBIN2PRG.PRG") + loFoxBin2Prg = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG") + loObj = NEWOBJECT("c_conversor_bin_a_prg", "FOXBIN2PRG.PRG") *-- Reserved3 loObj.get_PropsAndCommentsFrom_RESERVED3( toReg.RESERVED3, .F., @laPropsAndComments, @lnPropsAndComments_Count, '' ) @@ -146,8 +148,8 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg loObj.get_PropsFrom_PROTECTED( toReg_Esperado.PROTECTED, .F., @laProtected_Esperado, @lnProtected_Count_Esperado, '' ) *-- Methods - loObj.get_ADD_OBJECT_METHODS( toReg, toReg, '', @laMethods, '', @lnMethods_Count, '', 0, '', 0 ) - loObj.get_ADD_OBJECT_METHODS( toReg_Esperado, toReg_Esperado, '', @laMethods_Esperado, '', @lnMethods_Count_Esperado, '', 0, '', 0 ) + loObj.get_ADD_OBJECT_METHODS( toReg, toReg, '', @laMethods, '', @lnMethods_Count, '', 0, '', 0, loFoxBin2Prg ) + loObj.get_ADD_OBJECT_METHODS( toReg_Esperado, toReg_Esperado, '', @laMethods_Esperado, '', @lnMethods_Count_Esperado, '', 0, '', 0, loFoxBin2Prg ) lcExtraData = tcParent + '.' + tcObjName + ' (' + tcClass + ')' @@ -257,6 +259,9 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg THIS.asserttrue( ASCAN( laMethods, laMethods_Esperado(I,1), 1, -1, 1, 0+2+4) > 0 ; , ' Comprobación de que existe el Method "' + TRANSFORM(laMethods_Esperado(I,1)) + '"' + " para " + lcExtraData ) ENDFOR + + loFoxBin2Prg = NULL + RELEASE loFoxBin2Prg ENDCASE @@ -438,7 +443,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg ******************************************************************************************************************************************* FUNCTION Deberia_Ejecutar_FOXBIN2PRG_ParaElForm_FB2P_FRM_1_SCX_YValidarLosCamposDelRegistro LOCAL lnCodError, lnCodError_Esperado ; - , lc_File, lc_InputFile, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado, loReg, lcTipoBinario ; + , lc_File, lc_InputFile, lc_OutputFile, lc_OutputFile2, lcParent, lcClass, lcObjName, loReg_Esperado, loReg, lcTipoBinario ; , loModulo AS CL_CLASE OF "FOXBIN2PRG.PRG" ; , loCnv AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ; , loEx AS EXCEPTION @@ -457,16 +462,17 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg *-- DATOS DE ENTRADA STORE 0 TO lnCodError lc_File = 'FB2P_FRM_1.SCX' - lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' ) - lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' ) + lc_InputFile = FORCEPATH( lc_File, oFXU_LIB.cPathDatosReadOnly ) + lc_OutputFile = FORCEPATH( lc_File, oFXU_LIB.cPathDatosTest ) + lc_OutputFile2 = FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ) lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) ) loCnv.l_NoTimestamps = .F. loCnv.l_ClearUniqueID = .F. 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, '', '', '', '', '', '', '', '', .T. ) + loCnv.Ejecutar( lc_OutputFile2, '', '', '', '', '', '', '', '', .T. ) SELECT 0 USE (lc_InputFile) SHARED AGAIN NOUPDATE ALIAS ARCHIVOBIN_IN From 21e3fcc4a0e9a74967cfa01e68a2ccf335df1382 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 6 Jul 2014 13:48:32 +0200 Subject: [PATCH 4/7] Changeset: 347 fdbozzo - 06/07/2014 13:47:45: - Nuevos test para l_DropNullCharsFromCode --- TESTS/DATOS_READONLY/f_nullchars_incode.sc2 | Bin 0 -> 1293 bytes TESTS/DATOS_READONLY/f_nullchars_incode.sct | Bin 0 -> 1243 bytes TESTS/DATOS_READONLY/f_nullchars_incode.scx | Bin 0 -> 1469 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 TESTS/DATOS_READONLY/f_nullchars_incode.sc2 create mode 100644 TESTS/DATOS_READONLY/f_nullchars_incode.sct create mode 100644 TESTS/DATOS_READONLY/f_nullchars_incode.scx diff --git a/TESTS/DATOS_READONLY/f_nullchars_incode.sc2 b/TESTS/DATOS_READONLY/f_nullchars_incode.sc2 new file mode 100644 index 0000000000000000000000000000000000000000..9e45a14f10f7b3d785cfe8858a9ebcd1b6493462 GIT binary patch literal 1293 zcmd5*+isgc5bdii`5(qSB~k6vNu|nBU1<$#Oa;5v?vl$>w8iTh6$1fWwV#u3>JN1m z($-0m2`A0DR36vv_wROA21)>C1F05K$r(o zabdBmKrL-sP@IRdZT>VPcvRbm!tW@gUj zHs5Divei|6o90QeHsd<^=D_I(IFdzHK&dMYpVC}cX;H)FVg*w;1)gW$VN+BOK*yW< z7+bfuM;8I3;D$s>SnEcc{A*ej`Of4G;QpRMgFf_7ber!HMJ`~jYm;QUu4m4ZWCv8b zGj*eP<;+1hiMB=@i1YMrZ_>4mU0WF>t!Hay&>!@B9_r}4!wkkO4#P2`OOt-yHi*2z zLufX?LZ){HQO8ytsCO_+73D+zRl07rT|DUH7uNZ<-5yNZ)fMzw^)PsN^qBYvB0fnY4Qb;UTA;p ih$<>1l#|y`p5b%;3Mm|g&2Pv4r!Xw^`q^~{)BFi-Fh4^8 literal 0 HcmV?d00001 diff --git a/TESTS/DATOS_READONLY/f_nullchars_incode.sct b/TESTS/DATOS_READONLY/f_nullchars_incode.sct new file mode 100644 index 0000000000000000000000000000000000000000..9019e2198f77ff0c9f65202b78e71ffb78379215 GIT binary patch literal 1243 zcmeH^%}T>S5XUDUMGP!epI|8n3Z*oSAU$}HB%%=0lD3MT3~g$IHVGm67M^_!@4kvJ zp{`)ci-33se06;?i<8QtI{r%dB?X`{?F5lyv8kp|c(d3+$64QhoNncFVew+@4IG-0t&sSeqv6%*bHtp5MMoWBtnA@#0EjMk{cbI1S zNfyQt89Sgu(N1nOuZ4l2=`~E->UcIcufy&YzC&~0+dsD3_~<;*%RH$e1~AQbEn3X9 z&n-^u_kOZt)=XL*zfQPJfA=iFVOc!NsBR*On7zlbfZU0ihBpNi=m2a$5gtYWD~R0i3)TxS5!K@KnnTtQ6a98nS2M(D1K F@eVWEi_!o9 literal 0 HcmV?d00001 diff --git a/TESTS/DATOS_READONLY/f_nullchars_incode.scx b/TESTS/DATOS_READONLY/f_nullchars_incode.scx new file mode 100644 index 0000000000000000000000000000000000000000..c00a4ef1c6c6202b0dae5b1d4321d841ef703d8f GIT binary patch literal 1469 zcmeH{u};G<5I{|-pdi7*f{>8Hz`%fLXaniM;3iiH|_l6Cc0_ z@B{3e(*R9y1Kl|(cb4DX`R*dSxw^PeXN)!KcchC_n`bNzx$21oiFk9Q8bueDMnOM? zz}I|<)N+Zd06{8_F=Nr1fqNmBavX!3WOXf*lJQV@w1-=y%Dl@ZVP8X%tjl6FV+lw|&cUbJF(9XDoRXma$pJdwo?wq`FJBKUl0N3_X^PL!!@}>wUh<$ Date: Sun, 6 Jul 2014 15:13:00 +0200 Subject: [PATCH 5/7] =?UTF-8?q?Changeset:=20350=20fdbozzo=20-=2006/07/2014?= =?UTF-8?q?=2015:11:19:=20-=20Bug=20Fix=20cfg:=20ExtraBackupLevel=20no=20s?= =?UTF-8?q?e=20tiene=20en=20cuenta=20cuando=20se=20usa=20multi-configuraci?= =?UTF-8?q?=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index a9754df..0dc7aac 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -90,6 +90,7 @@ * 14/06/2014 FDBOZZO v1.19.24 Arreglo bug vcx/scx: Un campo de tabla llamado "text" que comienza la línea puede confundirse con la estructura TEXT/ENDTEXT y reconocer mal el resto del código * 16/06/2014 FDBOZZO v1.19.25 Mejora: Agregado soporte de configuraciones (CFG) por directorio que, si existen, se usan en lugar del principal (Mario Peschke) * 17/06/2014 FDBOZZO v1.19.25 Mejora: Si durante la generación de binarios o de textos se producen errores, mostrar un mensaje avisando de ello (Pedro Gutiérrez M.) +* 06/07/2014 FDBOZZO v1.19.26 Bug Fix cfg: ExtraBackupLevel no se tiene en cuenta cuando se usa multi-configuración * * *--------------------------------------------------------------------------------------------------- @@ -963,7 +964,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM STORE '' TO tcBakFile_1, tcBakFile_2, tcBakFile_3 WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' - IF THIS.n_ExtraBackupLevels > 0 THEN + IF .n_ExtraBackupLevels > 0 THEN lcNext_Bak = .getNext_BAK( .c_OutputFile ) lcExt_1 = JUSTEXT( .c_OutputFile ) tcBakFile_1 = FORCEEXT(.c_OutputFile, lcExt_1 + lcNext_Bak) @@ -1245,7 +1246,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM lo_CFG.l_Debug = (TRANSFORM(tcDebug)=='1') ENDIF tcExtraBackupLevels = EVL( tcExtraBackupLevels, TRANSFORM( lo_CFG.n_ExtraBackupLevels ) ) - lo_CFG.n_ExtraBackupLevels = INT( VAL( TRANSFORM(tcExtraBackupLevels) ) ) + IF ISDIGIT(tcExtraBackupLevels) + lo_CFG.n_ExtraBackupLevels = INT( VAL( TRANSFORM(tcExtraBackupLevels) ) ) + ENDIF IF INLIST( TRANSFORM(tcOptimizeByFilestamp), '0', '1' ) THEN lo_CFG.l_OptimizeByFilestamp = NOT (TRANSFORM(tcOptimizeByFilestamp) == '0') ENDIF From 67671d62a8b6843bbd828b2873217a1ea414ce6e Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 6 Jul 2014 15:32:04 +0200 Subject: [PATCH 6/7] =?UTF-8?q?Changeset:=20354=20fdbozzo=20-=2006/07/2014?= =?UTF-8?q?=2015:15:43:=20-=20Generaci=C3=B3n=20EXE,=20actualizaci=C3=B3n?= =?UTF-8?q?=20documentaci=C3=B3n,=20actualizaci=C3=B3n=20versi=C3=B3n=20PJ?= =?UTF-8?q?X/PJ2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 9 +++++++-- foxbin2prg.cfg | 8 +++++--- foxbin2prg.exe | Bin 436313 -> 437042 bytes foxbin2prg.pj2 | 4 ++-- foxbin2prg.pjt | Bin 586712 -> 590989 bytes foxbin2prg.pjx | Bin 8993 -> 8993 bytes 6 files changed, 14 insertions(+), 7 deletions(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 97b9bad..9900418 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -2,8 +2,8 @@ Lparameters toUpdateInfo Local lcNote With toUpdateInfo - .VersionNumber = 'v1.19.25' - .VersionDate = Date(2014,06,25) + .VersionNumber = 'v1.19.26' + .VersionDate = Date(2014,07,06) .SourceFileUrl = 'http://vfpxrepository.com/dl/thorupdate/Projects/FoxBin2Prg/FoxBin2Prg.Zip' .Link = 'http://vfpx.codeplex.com/wikipage?title=FoxBin2PRG' @@ -17,6 +17,11 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg Change History ------------------------------------------------------------- +2014/07/06 v1.19.26 +- Feature: Drop asterisks between "ENDPROC" and "PROCEDURE", analyzed in that exact order, to regenerate binary without errors. (Daniel Sánchez) +- Feature: Add the l_DropNullCharsFromCode configuration option, enabled by default, to allow droping NULLs from source code. (Matt Slay) +- Bug Fix cfg: ExtraBackupLevel does not work when using multi-configuration + 2014/06/25 v1.19.25 - When processing one or multiple files with vbs scripts, show a message indicating the status of the generation, and show the error log if any error occurs (Pedro Gutiérrez M.) - Code cleaning and normalization diff --git a/foxbin2prg.cfg b/foxbin2prg.cfg index 76ed2b7..6af1247 100644 --- a/foxbin2prg.cfg +++ b/foxbin2prg.cfg @@ -1,5 +1,5 @@ **************************************************************************************************** -* FOXBIN2PRG v1.19.25 +* FOXBIN2PRG v1.19.26 * CONFIGURATION FILE / ARCHIVO DE CONFIGURACIÓN *--------------------------------------------------------------------------------------------------- * DON'T MODIFY THIS DOCUMENTATION SECTION / NO MODIFIQUE ESTA SECCIÓN DE DOCUMENTACIÓN @@ -12,10 +12,11 @@ * 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 * Debug: 0 && Don't Activate individual .Log by default / No Activar .Log por defecto -* ExtraBackupLevels: 0 && By default 1 BAK is created. With this you can make more .N.BAK, or none / Por defecto 1 BAK es creado. Con esto puede crear más .N.BAK, o ninguno +* ExtraBackupLevels: 1 && By default 1 BAK is created. With this you can make more .N.BAK, or none / Por defecto 1 BAK es creado. Con esto puede crear más .N.BAK, o ninguno * ClearUniqueID: 1 && 0=Keep UniqueID, 1=Clear Unique ID. Useful for Diff and Merge / 0=Mantener UniqueID, 1=Borrar Unique ID. Util para Diff y Merge * 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) * PJX_Conversion_Support: 2 && Default value * VCX_Conversion_Support: 2 && Default value @@ -54,10 +55,11 @@ *DontShowErrors: 1 *NoTimestamps: 0 *Debug: 1 -*ExtraBackupLevels: 3 +*ExtraBackupLevels: 0 *ClearUniqueID: 0 *OptimizeByFilestamp: 0 *AllowMultiConfig: 0 +*DropNullCharsFromCode: 0 * EN: Uncomment to activate the new value, comment to deactivate and use the default diff --git a/foxbin2prg.exe b/foxbin2prg.exe index e90bfb078b8b54d41eccab91e2863c50b8fc05c6..feaaa036150aa60174479ac7270f65bcc1373026 100644 GIT binary patch delta 18469 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%0D1L<8;v}PG;PK!qkaNy6 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 G^#1_CFp}8- delta 17694 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 q7e%U2Mz_!mUbY6IjBBYG@QbqQk1CX diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index 953073fb4354941b7c415ef639ae390ff5859c57..77c6c8f4890ead6d7e264d244db1fcc3c71d66c7 100644 GIT binary patch delta 33817 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

FXq9C!0 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 R@ruAdxW@kr)BhTO{tuki#Ww%| diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx index 3d076dfd27a2fd0ed68c148202caed9477a77a84..7d71dd03bd1f476d83ec5029bf06ce44be15f1e9 100644 GIT binary patch delta 710 zcmXw0O-NKx6h7BC^IqflMjb~-8OQguhKPvX8|RHPMo?+fCSow5MG&|sEO0T4AaP>4 zMMOWQ@#(@gB1A0`Y;aLfxNuoyWf6q^C#I!&Ik zFjf^oKueeWTfqtKoM^Ax7Fs9apt?sSD1Iy z<&^Gunw+Q;Lht`TbadA8dzNJxhIw9RfoZAS`-HvWKK;@R(Gy-5 z-p4{dSm=&GZ?JXi8PU{;V4XzVK}K8K8ECM5`4>dnYk9^@STP4_qYagYt$%q*G<2Q^ z%oc0o;0R#YYX57ZOgA1IS@rrGqE82K(9Eh$b41mxnBlbjEz!{$q#Luo+wX|ZXslw# gqE4K}Tk$vKLAc5B%uaAQYFRDChgmZGxYjiMA8^vsO#lD@ delta 707 zcmXw#O-K}B7{}jdXLqLEZPr{jcWqo}6c>sNW@cyB(GJ3Szgm zH|P*06@NVlmF-EQFC_v&g0N133g)FQbufYoGAarR?RC}X@c%!&&-?uN^OW=De9(-^ zsgdAlP&Un6tL{$H=!TV9pO@l5q?EV)Pl27PJ8iN z=sBEU&8ZK6g+9XtmD3w62>k;d^| zsFF^EbK5H6I^t1G#CNLZ%EU0T4sKOtu%pJOJ?O7lOqxt^x`%-Tm&OBx^xBg2S@@uE zRU$Ojmedw$nQVDZu0o!!_0`Um*Q{q*6>3+~mrjYDp=3$w6}}-=k{%0xAbeW*rn-{! zQ=+F&>WI|ZAhBaV7&C0!@dQ-I2Q35AEakhHJbFuL(+bK_h1j)J0ApGqG#Vy0fz9;? zWyf>OY#Rpa(~*IF0%6#$Ys1%DkdWgTRze7;EoEks*pVs1)^tHVJx(n3lGx&LOpGLT z%;_1Z4VL=uKC%4|#U$(HTy!f-lN$|I?9LFejj2VvXF9IHZ%4ImsWZLAdTxpZqt!IQ zqe~0WEqVA1v5_9U){AoAZer_w>@te--7UmkbYN1nm)8-S)!;W4W3v%rgHb`T9NWza dcsu@SVWgYf@PYP#xQc1ER<1Iq$8o)>|3Aii!zlm& From 04481f02ddce6ed2d348f4427194d3f5e6ff592b Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 6 Jul 2014 15:39:48 +0200 Subject: [PATCH 7/7] Changeset: 357 fdbozzo - 06/07/2014 15:38:06: --- TESTS/DATOS_READONLY/f_nullchars_incode.sc2 | Bin 1293 -> 1291 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/TESTS/DATOS_READONLY/f_nullchars_incode.sc2 b/TESTS/DATOS_READONLY/f_nullchars_incode.sc2 index 9e45a14f10f7b3d785cfe8858a9ebcd1b6493462..4c7ace6d90becc45da53cf2e6051bc4a04afd56c 100644 GIT binary patch delta 37 rcmeC>>gL+8n`QDI7IR5nE>2fJmw+IDXI?H|E+Esz)y>n-m6rgC$7n}v~K@@^J$DF$9HPFFvdfFOToUM^lPAk)Rw&C}17mkR*TjtMdV