diff --git a/Convert_VFP9_BIN_2_PRG.vbs b/Convert_VFP9_BIN_2_PRG.vbs index a93516c..26a7fb0 100644 --- a/Convert_VFP9_BIN_2_PRG.vbs +++ b/Convert_VFP9_BIN_2_PRG.vbs @@ -28,7 +28,7 @@ nExitCode = 0 ' 4=Don't show FoxBin2prg error modal messages ' 8=Show end of process message ' 16=Empty timestamps -nDebug = 1+0+4+0+16 +nDebug = 1+0+4+8 '--------------------------------------------------------------------------------------------------- If WScript.Arguments.Count = 0 Then @@ -102,7 +102,7 @@ Else & cFlagRecompile & "," & cNoTimestamps & " )" End If If cFlagJustShowCall = "1" Then - MsgBox cCMD, 64, "PARAMETROS ENVIADOS" + MsgBox cCMD, 64, "PARAMETERS" Else oVFP9.DoCmd( cCMD ) nExitCode = oVFP9.Eval("_SCREEN.ExitCode") @@ -115,7 +115,7 @@ Else oVFP9.DoCmd( "oFoxBin2prg = NULL" ) If GetBit(nDebug, 4) Then - MsgBox "Fin del Proceso!", 64, WScript.ScriptName + MsgBox "End of Process!", 64, WScript.ScriptName End If End If diff --git a/Convert_VFP9_PRG_2_BIN.vbs b/Convert_VFP9_PRG_2_BIN.vbs index 5c4f2b7..434efbf 100644 --- a/Convert_VFP9_PRG_2_BIN.vbs +++ b/Convert_VFP9_PRG_2_BIN.vbs @@ -28,7 +28,7 @@ nExitCode = 0 ' 4=Don't show FoxBin2prg error modal messages ' 8=Show end of process message ' 16=Empty timestamps -nDebug = 1+0+4+0+16 +nDebug = 1+0+4+8 '--------------------------------------------------------------------------------------------------- If WScript.Arguments.Count = 0 Then @@ -109,7 +109,7 @@ Else & cFlagRecompile & "," & cNoTimestamps & " )" End If If cFlagJustShowCall = "1" Then - MsgBox cCMD, 64, "PARAMETROS ENVIADOS" + MsgBox cCMD, 64, "PARAMETERS" Else oVFP9.DoCmd( cCMD ) nExitCode = oVFP9.Eval("_SCREEN.ExitCode") @@ -122,7 +122,7 @@ Else oVFP9.DoCmd( "oFoxBin2prg = NULL" ) If GetBit(nDebug, 4) Then - MsgBox "Fin del Proceso!", 64, WScript.ScriptName + MsgBox "End of Process!", 64, WScript.ScriptName End If End If diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 57e653d..278b9b2 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -2,8 +2,8 @@ Lparameters toUpdateInfo Local lcNote With toUpdateInfo - .VersionNumber = 'v1.19.23' - .VersionDate = Date(2014,06,07) + .VersionNumber = 'v1.19.24' + .VersionDate = Date(2014,06,15) .SourceFileUrl = 'http://vfpxrepository.com/dl/thorupdate/Projects/FoxBin2Prg/FoxBin2Prg.Zip' .Link = 'http://vfpx.codeplex.com/wikipage?title=FoxBin2PRG' @@ -17,6 +17,14 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg Change History ------------------------------------------------------------- +2014/06/15 v1.19.24 +- Bug Fix scx/vcx: The absence of AGAIN keyword on some USE commands throws "tabla in use" error if used the PRG version from VFP command window (Matt Slay) +- Bug Fix scx/vcx: A table field called "text" that begins the line can be confused with the TEXT/ENDTEXT structure and can wrong recognize the rest of the code (Mario Peschke) +- Bug Fix scx/vcx: GetTimeStamp internal method throwse an error when day or month have just 1 digit (happen from v1.19.23) +- New "run_aftercreate_db2" event that permits execution of an external program when using FoxBin2Prg as object (for example, to export table data) +- New FoxUnit Unit Tests to verify new functionality and "text" bug fix +- Added foxbin2prg_de.h file translation of most messages to German (Mario Peschke) + 2014/06/07 v1.19.23 - Timestamps and UniqueIds values are back on binaries, and they are just cleaned up on tx2 files if NoTimestamps and ClearUniqueID flags are set. This minimizes some differences on the binary side. - Added sccdata default value when regenerating PJX binary (which is automatically completed on the PJX when opened anyway) diff --git a/README.txt b/README.txt index 6314b83..7fdc564 100644 --- a/README.txt +++ b/README.txt @@ -1,56 +1,8 @@ 26/01/2014 FOXBIN2PRG v1.19 FOR VISUAL FOXPRO 9 BINARIES Fernando D. Bozzo (fdbozzo@gmail.com) Blog: http://fdbozzo.blogspot.com.es/ +Project info: https://vfpx.codeplex.com/wikipage?title=FoxBin2Prg - -ESPAÑOL -------------------------------------------------------------------------------------------- - -¿Que es FOXBIN2PRG? -Es un programa pensado para ser usado con herramientas SCM (Source Code Managers) que pretende -sustituir a SCCTEXT y mejorarlo, generando versiones TEXTO bidireccionales que permiten volver -a generar el archivo binario original. - -Ventajas: -- Genera versiones tipo "PRG" (no compilables), para comparación visual -- Permite modificar la versión TEXTO tan fácilmente como si se modificara un PRG -- Todo el código del programa está en un solo PRG, para simplificar su copia y mantenimiento -- Con las versiones TEXTO se pueden volver a generar los binarios, lo que sirve como backup -- Las extensiones son configurables si se crea un archivo FOXBIN2PRG.CFG -- Los métodos y propiedades de la versión TEXTO se ordenan alfabéticamente para facilitar su comparación -- Tiene compatibilidad con SCCTEXT a nivel de parámetros para usarlo como sustituto en SourceSafe - -Actualmente soporta las conversiones de archivos PJX,SCX,VCX,FRX,LBX,DBC,DBF y MNX para los que genera las -versiones TEXTO con extensión PJ2,SC2,VC2,FR2,LB2,DC2,DB2 y MN2, que pueden reconfigurarse para compatibilizar -con SourceSafe. - -Estructura del archivo de configuración FOXBIN2PRG.CFG -extension: SC2=SCA -extension: VC2=VCA -extension: PJ2=PJA - -USO: -DO FOXBIN2PRG.PRG WITH "\archivo.scx" ==> Genera la versión TEXTO con extensión sc2 -DO FOXBIN2PRG.PRG WITH "\archivo.sc2" ==> Regenera la versión binaria con extensión scx - -TRUCO UTIL: -Se puede crear un acceso directo en la carpeta "SendTo" del perfil del usuario, para poder "enviar" -el archivo elegido (pjx,pj2,etc) a Foxbin2prg.exe, y así se hacen conversiones al vuelo. - -LOCALIZACIÓN: -Si se crea un archivo [foxbin2prg.h], se pueden trasladar los textos a otros idiomas. Se adjunta -un archivo de ejemplo [foxbin2prg_en.h] con la traslación al inglés. -Es necesario recompilar el programa para que se actualicen los textos con el archivo include. - - -NOTA FINAL: -Este programa es Open Source y "libre", y como tal no ofrezco garantías de que cumpla con sus espectativas -o de que está libre de fallos, que intentaré solucionar si me reporta y mis obligaciones me lo permiten. -Project info and updated: https://vfpx.codeplex.com/wikipage?title=FoxBin2Prg - - -LICENCIA: -Esta obra está sujeta a la licencia Reconocimiento-CompartirIgual 4.0 Internacional de Creative Commons. -Para ver una copia de esta licencia, visite http://creativecommons.org/licenses/by-sa/4.0/deed.es_ES. - +ENGLISH/ESPAÑOL ENGLISH -------------------------------------------------------------------------------------------- @@ -95,9 +47,64 @@ Recompiling is necesary to update the strings from the include file. FINAL NOTE: This program is Open Source and "libre", and I don't make any garanties that it fulfills your espectations or that it will be free of bugs, that I will try to fix if my obligations let me do it. -Información del proyecto y actualizaciones: https://vfpx.codeplex.com/wikipage?title=FoxBin2Prg_es +Project info and updated: https://vfpx.codeplex.com/wikipage?title=FoxBin2Prg LICENCE: This work is licensed under the Creative Commons Attribution 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by/4.0/. + + + + +ESPAÑOL -------------------------------------------------------------------------------------------- + +¿Que es FOXBIN2PRG? +Es un programa pensado para ser usado con herramientas SCM (Source Code Managers) que pretende +sustituir a SCCTEXT y mejorarlo, generando versiones TEXTO bidireccionales que permiten volver +a generar el archivo binario original. + +Ventajas: +- Genera versiones tipo "PRG" (no compilables), para comparación visual +- Permite modificar la versión TEXTO tan fácilmente como si se modificara un PRG +- Todo el código del programa está en un solo PRG, para simplificar su copia y mantenimiento +- Con las versiones TEXTO se pueden volver a generar los binarios, lo que sirve como backup +- Las extensiones son configurables si se crea un archivo FOXBIN2PRG.CFG +- Los métodos y propiedades de la versión TEXTO se ordenan alfabéticamente para facilitar su comparación +- Tiene compatibilidad con SCCTEXT a nivel de parámetros para usarlo como sustituto en SourceSafe + +Actualmente soporta las conversiones de archivos PJX,SCX,VCX,FRX,LBX,DBC,DBF y MNX para los que genera las +versiones TEXTO con extensión PJ2,SC2,VC2,FR2,LB2,DC2,DB2 y MN2, que pueden reconfigurarse para compatibilizar +con SourceSafe. + +Estructura del archivo de configuración FOXBIN2PRG.CFG +extension: SC2=SCA +extension: VC2=VCA +extension: PJ2=PJA + +USO: +DO FOXBIN2PRG.PRG WITH "\archivo.scx" ==> Genera la versión TEXTO con extensión sc2 +DO FOXBIN2PRG.PRG WITH "\archivo.sc2" ==> Regenera la versión binaria con extensión scx + +TRUCO UTIL: +Se puede crear un acceso directo en la carpeta "SendTo" del perfil del usuario, para poder "enviar" +el archivo elegido (pjx,pj2,etc) a Foxbin2prg.exe, y así se hacen conversiones al vuelo. + +LOCALIZACIÓN: +Si se crea un archivo [foxbin2prg.h], se pueden trasladar los textos a otros idiomas. Se adjunta +un archivo de ejemplo [foxbin2prg_en.h] con la traslación al inglés. +Es necesario recompilar el programa para que se actualicen los textos con el archivo include. + + +NOTA FINAL: +Este programa es Open Source y "libre", y como tal no ofrezco garantías de que cumpla con sus espectativas +o de que está libre de fallos, que intentaré solucionar si me reporta y mis obligaciones me lo permiten. +Información del proyecto y actualizaciones: https://vfpx.codeplex.com/wikipage?title=FoxBin2Prg_es + + +LICENCIA: +Esta obra está sujeta a la licencia Reconocimiento-CompartirIgual 4.0 Internacional de Creative Commons. +Para ver una copia de esta licencia, visite http://creativecommons.org/licenses/by-sa/4.0/deed.es_ES. + + + diff --git a/TESTS/DATOS_READONLY/fb2p_test.pjt b/TESTS/DATOS_READONLY/fb2p_test.pjt index 765bccf..f14deef 100644 Binary files a/TESTS/DATOS_READONLY/fb2p_test.pjt and b/TESTS/DATOS_READONLY/fb2p_test.pjt differ diff --git a/TESTS/DATOS_READONLY/fb2p_test.pjx b/TESTS/DATOS_READONLY/fb2p_test.pjx index 528207e..f57071c 100644 Binary files a/TESTS/DATOS_READONLY/fb2p_test.pjx and b/TESTS/DATOS_READONLY/fb2p_test.pjx differ diff --git a/TESTS/ut__foxbin2prg.prg b/TESTS/ut__foxbin2prg.prg index f8675b2..9bb4e21 100644 --- a/TESTS/ut__foxbin2prg.prg +++ b/TESTS/ut__foxbin2prg.prg @@ -21,6 +21,8 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg icObj = NULL nMouseX = 0 nMouseY = 0 + run_AfterCreate_DB2__Ejecutado = .F. + run_AfterCreateTable__Ejecutado = .F. ******************************************************************************************************************************************* @@ -1415,4 +1417,131 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg ENDFUNC + ******************************************************************************************************************************************* + FUNCTION Deberia_CrearUnArchivo_DB2_DesdeUn_DBF_Y_EjecutarElMetodo__run_AfterCreate_DB2 + LOCAL lnCodError, lnCodError_Esperado ; + , lc_File, lcFileName, lc_OutputFile, lc_OutputFileTx2, lc_OutputFileBak, lcExt2 ; + , 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 + PUBLIC goFXU AS ut__foxbin2prg OF ut__foxbin2prg.prg + goFXU = THIS + loEx = NULL + loCnv = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG") + loCnv.EvaluarConfiguracion( '', '1', '1', '1', '1', '4', '1', '0' ) + *loCnv.l_Test = .T. + loCnv.run_AfterCreate_DB2 = 'run_AfterCreate_DB2__Ejecutado' + THIS.run_AfterCreate_DB2__Ejecutado = .F. + + + *-- DATOS DE ENTRADA + STORE 0 TO lnCodError, lnCodError_Esperado + + *-- Copio la librería en DATOS_TEST + lcFileName = FORCEPATH( 'FB2P_FREE.DBF', oFXU_LIB.cPathDatosReadOnly ) + lc_File = UPPER(lcFileName) + lcExt2 = loCnv.Get_Ext2FromExt( JUSTEXT( lcFileName ) ) + lc_OutputFile = FORCEPATH( lc_File, oFXU_LIB.cPathDatosTest ) + lc_OutputFileTx2 = FORCEEXT( FORCEPATH( lc_File, oFXU_LIB.cPathDatosTest ), lcExt2 ) + + oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, '*' ) ) + + *-- Genero TX2 + loCnv.Ejecutar( lc_OutputFile, .F., .F., .F., '1', '0', '1', '', '', .T., '', SYS(5)+CURDIR() ) + + *-- Comparo resultados + THIS.messageout( "Respuesta esperada = .T." ) + THIS.asserttrue( THIS.run_AfterCreate_DB2__Ejecutado, "RESPUESTA DE run_AfterCreate_DB2__Ejecutado" ) + + + CATCH TO loEx + THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado ) + + FINALLY + * USE IN (SELECT("ARCHIVOBIN_IN")) + * USE IN (SELECT("TABLABIN")) + STORE NULL TO loCnv, loCtl, goFXU + RELEASE loCnv, loCtl, goFXU + ENDTRY + + ENDFUNC + + + ******************************************************************************************************************************************* + FUNCTION Deberia_CrearUnArchivo_DBF_DesdeUn_DB2_Y_EjecutarElMetodo__run_AfterCreateTable + LOCAL lnCodError, lnCodError_Esperado ; + , lc_File, lcFileName, lc_OutputFile, lc_OutputFileTx2, lc_OutputFileBak, lcExt2 ; + , 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 + PUBLIC goFXU AS ut__foxbin2prg OF ut__foxbin2prg.prg + goFXU = THIS + loEx = NULL + loCnv = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG") + loCnv.EvaluarConfiguracion( '', '1', '1', '1', '1', '4', '1', '0' ) + *loCnv.l_Test = .T. + loCnv.DBF_Conversion_Support = 2 + loCnv.run_AfterCreateTable = 'run_AfterCreateTable__Ejecutado' + THIS.run_AfterCreateTable__Ejecutado = .F. + + + *-- DATOS DE ENTRADA + STORE 0 TO lnCodError, lnCodError_Esperado + + *-- Copio la librería en DATOS_TEST + lcFileName = FORCEPATH( 'FB2P_FREE.DB2', oFXU_LIB.cPathDatosReadOnly ) + lc_File = UPPER(lcFileName) + lcExt2 = loCnv.Get_Ext2FromExt( JUSTEXT( lcFileName ) ) + lc_OutputFile = FORCEPATH( lc_File, oFXU_LIB.cPathDatosTest ) + lc_OutputFileTx2 = FORCEEXT( FORCEPATH( lc_File, oFXU_LIB.cPathDatosTest ), lcExt2 ) + + oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, '*' ) ) + + *-- Genero TX2 + loCnv.Ejecutar( lc_OutputFile, .F., .F., .F., '1', '0', '1', '', '', .T., '', SYS(5)+CURDIR() ) + + *-- Comparo resultados + THIS.messageout( "Respuesta esperada = .T." ) + THIS.asserttrue( THIS.run_AfterCreateTable__Ejecutado, "RESPUESTA DE run_AfterCreateTable__Ejecutado" ) + + + CATCH TO loEx + THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado ) + + FINALLY + * USE IN (SELECT("ARCHIVOBIN_IN")) + * USE IN (SELECT("TABLABIN")) + STORE NULL TO loCnv, loCtl, goFXU + RELEASE loCnv, loCtl, goFXU + ENDTRY + + ENDFUNC + + ENDDEFINE + + +PROCEDURE run_AfterCreate_DB2__Ejecutado + LPARAMETERS tnDataSession, tcOutputFile, toTable + goFXU.run_AfterCreate_DB2__Ejecutado = .T. +ENDPROC + + +PROCEDURE run_AfterCreateTable__Ejecutado + LPARAMETERS tnDataSession, tcOutputFile, toTable + goFXU.run_AfterCreateTable__Ejecutado = .T. +ENDPROC + + diff --git a/TESTS/ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion.prg b/TESTS/ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion.prg index b7570de..0501f59 100644 --- a/TESTS/ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion.prg +++ b/TESTS/ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion.prg @@ -158,4 +158,81 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as ENDFUNC + ******************************************************************************************************************************************* + FUNCTION Deberia_NoEncontrarNingunBloque_TEXT_ENDTEXT_CuandoUnaLineaQueComienzaConUnCampoLlamado_Text_esEvaluado + LOCAL lcMethod, laLineas(1), lnLineas, laPos(1,2), lnPos_Count, laExpected_Pos(1,2) + LOCAL loObj AS c_conversor_prg_a_bin OF "FOXBIN2PRG.PRG" + loObj = THIS.icObj + + *-- Input and expected params + STORE '' TO lcMethod + laExpected_Pos(1,1) = 0 + laExpected_Pos(1,2) = 0 + + TEXT TO lcMethod NOSHOW TEXTMERGE FLAGS 1 PRETEXT 1+2+4 + <> myMethod_B + *-- Code Block + IF !FOUND() + APPEND BLANK + REPLACE CURSOR WITH "cawlmain", START WITH 1, END WITH 999999, isnumeric WITH .F., lastused WITH "", ; && Worst case for next line + TEXT WITH "Wärmeobjekte", standard WITH .T. + ENDIF + + *-- Code Block + CREATE CURSOR vorlaufsatz (; + Satzlaenge C(4),; + Satzart C(2),; + Folgekennz C(2),; + Absender C(2),; + Empfaenger C(2),; + Rohdatum C(8),; + RohZeit C(4),; + LFDNr C(4),; && Worst case for next line + Text C(26),; + Trenner C(2),; + DATUM D NULL,; + ZEIT C(8) NULL,; + KEYLINEID N(6,0) NULL ) + + *-- Code Block + CREATE CURSOR eomaildbf (; + adresse c(8) NULL DEFAULT .NULL.,; + zaehler i AUTOINC NEXTVALUE 1 STEP 1,; + startseite N(6) NOT NULL DEFAULT 0,; + endseite N(6) NOT NULL DEFAULT 0,; + vseite N(6) NOT NULL DEFAULT 0,; + lfdnr c(30) NULL DEFAULT .NULL.,; + linkkey int,; + email CHAR(60) NULL DEFAULT .NULL.,; + subject VARCHAR(254) NULL DEFAULT .NULL.,; && Worst case for next line + TEXT m NULL DEFAULT .NULL.,; + docname c(50) NULL DEFAULT .NULL.,; + versenden l NOT NULL DEFAULT .F.,; + signierung l NOT NULL DEFAULT .F.,; + praefix c(10) NULL DEFAULT .NULL.,; + signdatei VARCHAR(254) NULL DEFAULT .NULL.,; + signiert l NOT NULL DEFAULT .F.,; + ccemail VARCHAR(254) NULL DEFAULT .NULL.,; + datei VARCHAR(254) NULL DEFAULT .NULL.) + + *-- Code Block + CREATE CURSOR c_prf_zeilen (; + lauf I NULL, ; + zeile I NOT NULL, ; + Text C(200) NULL ; + ) + + <> + ENDTEXT + + lnLineas = ALINES( laLineas, lcMethod ) + + *-- Test + loObj.identificarBloquesDeExclusion( @laLineas, lnLineas, , @laPos, @lnPos_Count ) + + THIS.Evaluate_results( @laExpected_Pos, @laPos, lnPos_Count ) + + ENDFUNC + + ENDDEFINE diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 2d962cc..f6c6442 100644 Binary files a/foxbin2prg.exe and b/foxbin2prg.exe differ diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2 index 5538968..eaea165 100644 --- a/foxbin2prg.pj2 +++ b/foxbin2prg.pj2 @@ -23,10 +23,10 @@ _CompanyName = "Fernando D. Bozzo" _FileDescription = "Conversor bidireccional de binarios FoxPro 9 (scx,vcx,pjx) a texto para sustituir al scctext :-)" _LegalCopyright = "Creative Commons 4: Reconocimiento - CompartirIgual (by-sa): http://creativecommons.org/licenses/by/4.0/" _LegalTrademark = "Creative Commons 4: Reconocimiento - CompartirIgual (by-sa): http://creativecommons.org/licenses/by/4.0/" -_ProductName = " FOXBIN2PRG v1.19.23" +_ProductName = " FOXBIN2PRG v1.19.24" _MajorVer = "1" _MinorVer = "19" -_Revision = "23" +_Revision = "24" _LanguageID = "1034" _AutoIncrement = "0" * @@ -91,6 +91,7 @@ WITH loProject.FILES .ADD('props_xmladapter.txt') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="0" ID="0" ObjRev="0" /> .ADD('props_xmlfield.txt') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="0" ID="0" ObjRev="0" /> .ADD('props_xmltable.txt') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="0" ID="0" ObjRev="0" /> + .ADD('readme.txt') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="0" ID="0" ObjRev="0" /> .ADD('tests\foxunit_path.txt') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="0" ID="0" ObjRev="0" /> .ADD('tests\ft__foxbin2prg__c_conversor_prg_a_dbc.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" /> .ADD('tests\ft__foxbin2prg__c_conversor_prg_a_dbf.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" /> @@ -118,6 +119,7 @@ WITH loProject.FILES * * + .ITEM(lcCurdir + 'readme.txt').Exclude = .T. .ITEM(lcCurdir + 'tests\foxunit_path.txt').Exclude = .T. .ITEM(lcCurdir + 'tests\ft__foxbin2prg__c_conversor_prg_a_dbc.prg').Exclude = .T. .ITEM(lcCurdir + 'tests\ft__foxbin2prg__c_conversor_prg_a_dbf.prg').Exclude = .T. diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index cf02bca..c88d29b 100644 Binary files a/foxbin2prg.pjt and b/foxbin2prg.pjt differ diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx index 2916fb4..7b335c5 100644 Binary files a/foxbin2prg.pjx and b/foxbin2prg.pjx differ diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 8630553..e8facfb 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -1,6 +1,7 @@ *--------------------------------------------------------------------------------------------------- * Módulo.........: FOXBIN2PRG.PRG - PARA VISUAL FOXPRO 9.0 * Autor..........: Fernando D. Bozzo (mailto:fdbozzo@gmail.com) - http://fdbozzo.blogspot.com +* Project info...: https://vfpx.codeplex.com/wikipage?title=FoxBin2Prg * Fecha creación.: 04/11/2013 * * LICENCIA: @@ -84,7 +85,9 @@ * 17/04/2014 FDBOZZO v1.19.20 Relativización de directorios de CDX dentro de los DB2 para minimizar diferencias * 29/04/2014 FDBOZZO v1.19.21 Agregada posibilidad de convertir un proyecto entero a tx2 // Optimizaciones en generación según timestamps // AGAIN en aperturas // Simplificación sección PAM * 08/05/2014 FDBOZZO v1.19.22 Arreglo bug vcx/scx: La propiedad Picture de una clase form se pierde y no muestra la imagen -* 27/05/2014 FDBOZZO v1.19.23 Arreglo bugs vcx/scx: Redimensionamiento incorrecto de imagenes en ciertas situaciones (props_image.txt y props_optiongroup.txt actualizados) +* 27/05/2014 FDBOZZO v1.19.23 Arreglo bug vcx/scx: Redimensionamiento incorrecto de imagenes en ciertas situaciones (props_image.txt y props_optiongroup.txt actualizados) +* 09/06/2014 FDBOZZO v1.19.24 Arreglo bug vcx/scx: La falta de AGAIN en algunos comandos USE provoca error de "tabla en uso" si se usa el PRG desde la ventana de comandos +* 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 * * *--------------------------------------------------------------------------------------------------- @@ -114,7 +117,9 @@ * 07/05/2014 Fidel Charny REPORTE BUG vcx/scx v1.19.21: La propiedad Picture de una clase form se pierde y no muestra la imagen. No ocurre con la propiedad Picture de los controles (Arreglado en v1.19.22) * 09/05/2014 Miguel Durán REPORTE BUG vcx/scx v1.19.21: Algunas opciones del optiongroup pierden el width cuando se subclasan de una clase con autosize=.T. (Arreglado en v1.19.22) * 13/05/2014 Andrés Mendoza REPORTE BUG vcx/scx v1.19.21: Los métodos que contengan líneas o variables que comiencen con TEXT, provocan que los siguientes métodos queden mal indentados y se dupliquen vacíos (Arreglado en v1.19.22) -* 27/05/2014 Kenny Vermassen REPORTE DE BUG img v1.19.22: La propiedad Stretch no estaba incluida en la lista de propiedades props_image.txt, lo que provocaba un mal redimensionamiento de las imagenes en ciertas situaciones (Arreglado en v1.19.23) +* 27/05/2014 Kenny Vermassen REPORTE DE BUG img v1.19.22: La propiedad Stretch no estaba incluida en la lista de propiedades props_image.txt, lo que provocaba un mal redimensionamiento de las imagenes en ciertas situaciones (Arreglado en v1.19.23) +* 09/06/2014 Matt Slay REPORTE BUG vcx/scx v1.19.23: La falta de AGAIN en algunos comandos USE provoca error de "tabla en uso" si se usa el PRG desde la ventana de comandos (Arreglado en v1.19.24) +* 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) * * *--------------------------------------------------------------------------------------------------- @@ -428,6 +433,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -500,6 +506,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM o_Frm_Avance = NULL o_FSO = NULL run_AfterCreateTable = '' + run_AfterCreate_DB2 = '' c_VC2 = 'VC2' && VCX c_SC2 = 'SC2' && SCX c_PJ2 = 'PJ2' && PJX @@ -2408,8 +2415,8 @@ DEFINE CLASS c_conversor_base AS SESSION lnResto = lnResto % 2**5 lnSeconds = lnResto - lcTimeStamp = STR(lnYear,4) + "/" + STR(lnMonth,2) + "/" + STR(lnDay,2) + " " ; - + STR(lnHour,2) + ":" + STR(lnMinutes,2) + ":" + STR(lnSeconds,2) + lcTimeStamp = PADL(lnYear,4,'0') + "/" + PADL(lnMonth,2,'0') + "/" + PADL(lnDay,2,'0') + " " ; + + PADL(lnHour,2,'0') + ":" + PADL(lnMinutes,2,'0') + ":" + PADL(lnSeconds,2,'0') ltTimeStamp = EVALUATE( "{^" + lcTimeStamp + "}" ) @@ -3304,7 +3311,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base EXTERNAL ARRAY ta_ID_Bloques, taBloquesExclusion TRY - LOCAL lnBloques, I, X, lnPrimerID, lnLen_IDFinBQ, lnID_Bloques_Count, lcWord, lnAnidamientos + LOCAL lnBloques, I, X, lnPrimerID, lnLen_IDFinBQ, lnID_Bloques_Count, lcWord, lnAnidamientos, lcLine, lcPrevLine DIMENSION taBloquesExclusion(1,2) STORE 0 TO tnBloquesExclusion, lnPrimerID, I, X, lnLen_IDFinBQ @@ -3340,6 +3347,15 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDFOR IF lnPrimerID > 0 && Se ha identificado un ID de bloque excluyente + IF I > 1 + *-- Analizo la línea anterior para saber si termina con ";" y la actual es continuación + lcPrevLine = taCodeLines(I-1) + .get_SeparatedLineAndComment( @lcPrevLine ) + IF RIGHT( lcPrevLine,1 ) = ';' && Esta línea es continuación de la anterior + LOOP + ENDIF + ENDIF + tnBloquesExclusion = tnBloquesExclusion + 1 lnLen_IDFinBQ = LEN( ta_ID_Bloques(lnPrimerID,2) ) DIMENSION taBloquesExclusion(tnBloquesExclusion,2) @@ -4020,7 +4036,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base LOCAL lcStructure, lnSelect lnSelect = SELECT() SELECT 0 - USE (THIS.c_InputFile) AGAIN SHARED ALIAS _TABLABIN + USE (THIS.c_InputFile) SHARED AGAIN ALIAS _TABLABIN COPY STRUCTURE EXTENDED TO ( FORCEPATH( '_FRX_STRUC.DBF', ADDBS( SYS(2023) ) ) ) **** CONTINUAR SI ES NECESARIO - SIN USO POR AHORA @@ -7182,6 +7198,7 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin lcCreateTable = lcCreateTable + SUBSTR(lcFieldDef,3) + ')' &lcCreateTable. + *-- Hook para permitir ejecución externa (por ejemplo, para rellenar la tabla con datos) IF NOT EMPTY(toFoxBin2Prg.run_AfterCreateTable) lnSelect = SELECT() DO (toFoxBin2Prg.run_AfterCreateTable) WITH (lnDataSessionID), (.c_OutputFile), (toTable) @@ -9351,7 +9368,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg STORE NULL TO loRegClass, loRegObj WITH THIS AS c_conversor_vcx_a_prg OF 'FOXBIN2PRG.PRG' - USE (.c_InputFile) SHARED NOUPDATE ALIAS _TABLAORIG + USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN USE IN (SELECT("_TABLAORIG")) @@ -9573,7 +9590,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg STORE NULL TO loRegClass, loRegObj WITH THIS AS c_conversor_scx_a_prg OF 'FOXBIN2PRG.PRG' - USE (.c_InputFile) SHARED NOUPDATE ALIAS _TABLAORIG + USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN USE IN (SELECT("_TABLAORIG")) @@ -9810,7 +9827,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg STORE NULL TO loProject, loReg, loServerHead, loServerData WITH THIS AS c_conversor_pjx_a_prg OF 'FOXBIN2PRG.PRG' - USE (.c_InputFile) SHARED NOUPDATE ALIAS _TABLAORIG + USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN USE IN (SELECT("_TABLAORIG")) @@ -10536,7 +10553,7 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg STORE NULL TO loRegObj, loRegCab, loRegDataEnv, loRegCur WITH THIS AS c_conversor_pjm_a_prg OF 'FOXBIN2PRG.PRG' - USE (.c_InputFile) SHARED NOUPDATE ALIAS _TABLAORIG + USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN_0 USE IN (SELECT("_TABLAORIG")) @@ -10694,7 +10711,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg TRY LOCAL lnCodError, laDatabases(1), lnDatabases_Count, laDatabases2(1), lnLen, lc_FileTypeDesc ; - , ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name ; + , ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, lnDataSessionID, lnSelect ; , loTable AS CL_DBF_TABLE OF 'FOXBIN2PRG.PRG' ; , loDBFUtils AS CL_DBF_UTILS OF 'FOXBIN2PRG.PRG' STORE NULL TO loTable, loDBFUtils @@ -10707,6 +10724,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg lnDatabases_Count = ADATABASES(laDatabases) USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS TABLABIN + lnDataSessionID = .DATASESSIONID C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() @@ -10731,6 +10749,15 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) ENDCASE ENDIF + + *-- Hook para permitir ejecución externa (por ejemplo, para exportar datos) + IF NOT EMPTY(toFoxBin2Prg.run_AfterCreate_DB2) + lnSelect = SELECT() + DO (toFoxBin2Prg.run_AfterCreate_DB2) WITH (lnDataSessionID), (.c_OutputFile), (loTable) + SET DATASESSION TO (lnDataSessionID) && Por las dudas externamente se cambie + SELECT (lnSelect) + ENDIF + ENDWITH && THIS @@ -10774,7 +10801,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg STORE NULL TO loTable, loDBFUtils RELEASE lnCodError, laDatabases, lnDatabases_Count, laDatabases2, lnLen, lc_FileTypeDesc ; - , ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name ; + , ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, lnDataSessionID, lnSelect ; , loTable, loDBFUtils ENDTRY @@ -10887,7 +10914,7 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg STORE 0 TO lnCodError WITH THIS AS c_conversor_mnx_a_prg OF 'FOXBIN2PRG.PRG' - USE (.c_InputFile) SHARED NOUPDATE ALIAS _TABLAORIG + USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN USE IN (SELECT("_TABLAORIG")) @@ -11966,7 +11993,7 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE lcDBF = DBF() SELECT 0 - USE (lcDBF) AGAIN SHARED NOUPDATE ALIAS C_TABLABIN2 + USE (lcDBF) SHARED AGAIN NOUPDATE ALIAS C_TABLABIN2 IF INLIST( tcType, 'Index', 'Field' ) SELECT TB.Property FROM C_TABLABIN2 TB ; @@ -12421,7 +12448,7 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE lcDBF = DBF() SELECT 0 - USE (lcDBF) AGAIN SHARED NOUPDATE ALIAS C_TABLABIN2 + USE (lcDBF) SHARED AGAIN NOUPDATE ALIAS C_TABLABIN2 IF INLIST( tcType, 'Index', 'Field' ) SELECT TB.Property FROM C_TABLABIN2 TB ; diff --git a/foxbin2prg_de.h b/foxbin2prg_de.h new file mode 100644 index 0000000..c93bd27 --- /dev/null +++ b/foxbin2prg_de.h @@ -0,0 +1,47 @@ +*------------------------------------------------------------------------------------------------------------------------------------------- +*-- DEUTSCHE ÜBERSETZUNG => UMBENENNEN DIESER DATEI IN [foxbin2prg.h] UND NEUKOMPILIEREN DER FOXBIN2PRG.PRG - Jeder ist frei die Strings anzupassen und zu übersetzen. +*-- NOTE: ES MÜSSEN ANFÜHRUNGSZEICHEN BENUTZT WERDEN, ODER SYNTAX ERRORS PASSIEREN BEIM COMPILE. SELTSAM :( +*------------------------------------------------------------------------------------------------------------------------------------------- +#DEFINE C_ASTERISK_EXT_NOT_ALLOWED_LOC "* und ? Erweiterungen sind nicht erlaubt, da es gefährlich ist (binaries könnten überschrieben werden mit xx2 leeren Dateien)" +#DEFINE C_BACKLINK_CANT_UPDATE_BL_LOC "Backlink kann nicht geupdated werden" +#DEFINE C_BACKLINK_OF_TABLE_LOC "von Tabelle" +#DEFINE C_BACKUP_OF_LOC "Mache Backup von: " +#DEFINE C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC "Kann Datei [<>] nicht generieren da sie Schreibgeschützt ist" +#DEFINE C_CONFIGFILE_LOC "Benutze Konfigurationsdatei:" +#DEFINE C_CONVERTER_UNLOAD_LOC "Konverter wird entladen" +#DEFINE C_CONVERTING_FILE_LOC "Konvertiere Datei" +#DEFINE C_DATA_ERROR_CANT_PARSE_UNPAIRING_DOUBLE_QUOTES_LOC "Datenfehler: Keine Analyse möglich da ungepaarte Anführungszeichen in Zeile <>" +#DEFINE C_DUPLICATED_FILE_LOC "Doppelte Datei" +#DEFINE C_ENDDEFINE_MARKER_NOT_FOUND_LOC "Kann keinen Ende Marker [ENDDEFINE] in Zeile <> für die ID [<>] finden" +#DEFINE C_END_MARKER_NOT_FOUND_LOC "Kann keinen Ende Marker [<>] welcher den Start Marker [<>] in Zeile <> schließt" +#DEFINE C_FIELD_NOT_FOUND_ON_FILE_STRUCTURE_LOC "Feld [<>] nicht in der Struktur von Datei <> gefunden" +#DEFINE C_FILE_DOESNT_EXIST_LOC 'Datei existiert nicht:' +#DEFINE C_FILE_NAME_IS_NOT_SUPPORTED_LOC "Datei [<<.c_InputFile>>] wird nicht unterstützt" +#DEFINE C_FILE_NOT_FOUND_LOC "Datei nicht gefunden" +#DEFINE C_EXTENSION_RECONFIGURATION_LOC "Erweiterungsneukonfiguration:" +#DEFINE C_FOXBIN2PRG_ERROR_CAPTION_LOC "FOXBIN2PRG: FEHLER!!" +#DEFINE C_FOXBIN2PRG_INFO_SINTAX_LOC "FOXBIN2PRG: SYNTAX INFO" +#DEFINE C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC "FOXBIN2PRG [,cType ,cTextName ,cGenText ,cDontShowErrors ,cDebug, cDontShowProgress, cOriginalFileName, cRecompile, cNoTimestamps]" + CR_LF + CR_LF ; + + "Ein Beispiel für die Generierung der TXT von allen VCX in 'c:\development\classes', ohne Anzeige des Fehlerfensters und Generierung der LOG Datei: " + CR_LF ; + + " FOXBIN2PRG 'c:\development\classes\*.vcx' '0' '0' '0' '1' '1'" + CR_LF + CR_LF ; + + "Ein Beispiel für die Generierung der TXT von allen VCX in 'c:\development\classes', ohne Anzeige des Fehlerfensters und ohne LOG datei: " + CR_LF ; + + " FOXBIN2PRG 'c:\development\classes\*.vc2' '0' '0' '0' '1' '0'" +#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_MENU_NOT_IN_VFP9_FORMAT_LOC "Menu [<>] ist NICHT in VFP 9 Format! - Bitte zuerst nach VFP 9 konvertieren mit MODIFY MENU <>" +#DEFINE C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC "Objekt [<>] enthält nicht oReg Objekt (level <>)" +#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_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_PROCESSING_LOC "Bearbeite Datei" +#DEFINE C_PROCESS_PROGRESS_LOC "Bearbeitungsfortschritt:" +#DEFINE C_PROPERTY_NAME_NOT_RECOGNIZED_LOC "Eigenschaft [<>] nicht erkannt." +#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" +#DEFINE C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_2_LOC "Fehler in Verschachtelungsstruktur. ENDPROC wurde erwartet, aber es wurde ENDDEFINE in Klasse <> (<>.<>), Zeile <> der Datei <> gefunden" +#DEFINE C_UNKNOWN_CLASS_NAME_LOC "Unbekannte Klasse [<>]" +#DEFINE C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC "WARNUNG!!" + CR_LF+ "SICHERSTELLEN DAS KEIN TABELLENALIAS IN DEM INDEXAUSDRUCK BENUTZT WIRD!! (z.B.: index on <>.campo tag keyname)"