Changeset: 301 fdbozzo - 15/06/2014 19:26:49:

v1.19.24
- Bug Fix: La falta de AGAIN en algunos comandos USE provoca error de "tabla en uso" si se usa el PRG desde la ventana de comandos de VFP (Matt Slay)
- Bug Fix: 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 (Mario Peschke)
- Modificado el README.txt para que primero esté el texto en Inglés (Internacionalización)
- Bug Fix: El método GetTimeStamp genera un error cuando el dia o mes tiene solo 1 dígito
- Nuevo evento "run_aftercreate_db2" que permite ejecutar un programa externo cuando se usa FoxBin2Prg como objeto (por ejemplo, para exportar los datos)
- Nuevos tests unitarios para comprobar la nueva funcionalidad
- Agregada la translación de los mensajes al alemán (Mario Peschke)
This commit is contained in:
fdbozzo
2014-06-15 19:27:37 +02:00
14 changed files with 373 additions and 76 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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 "<ruta>\archivo.scx" ==> Genera la versión TEXTO con extensión sc2
DO FOXBIN2PRG.PRG WITH "<ruta>\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 "<ruta>\archivo.scx" ==> Genera la versión TEXTO con extensión sc2
DO FOXBIN2PRG.PRG WITH "<ruta>\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.

Binary file not shown.

Binary file not shown.

View File

@@ -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<65>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<65>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

View File

@@ -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
<<C_PROC>> 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 ;
)
<<C_ENDPROC>>
ENDTEXT
lnLineas = ALINES( laLineas, lcMethod )
*-- Test
loObj.identificarBloquesDeExclusion( @laLineas, lnLineas, , @laPos, @lnPos_Count )
THIS.Evaluate_results( @laExpected_Pos, @laPos, lnPos_Count )
ENDFUNC
ENDDEFINE

Binary file not shown.

View File

@@ -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"
*</DevInfo>
@@ -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
*</FileComments>
*<ExcludedFiles>
.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.

Binary file not shown.

Binary file not shown.

View File

@@ -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<63>n.: 04/11/2013
*
* LICENCIA:
@@ -84,7 +85,9 @@
* 17/04/2014 FDBOZZO v1.19.20 Relativizaci<63>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<63>n seg<65>n timestamps // AGAIN en aperturas // Simplificaci<63>n secci<63>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
* </HISTORIAL DE CAMBIOS Y NOTAS IMPORTANTES>
*
*---------------------------------------------------------------------------------------------------
@@ -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<75>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<64>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<61>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<63>n del binario generado (Arreglado en v1.19.24)
* </TESTEO Y REPORTE DE BUGS (AGRADECIMIENTOS)>
*
*---------------------------------------------------------------------------------------------------
@@ -428,6 +433,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
+ [<memberdata name="get_program_header" display="get_PROGRAM_HEADER"/>] ;
+ [<memberdata name="getnext_bak" display="getNext_BAK"/>] ;
+ [<memberdata name="run_aftercreatetable" display="run_AfterCreateTable"/>] ;
+ [<memberdata name="run_aftercreate_db2" display="run_AfterCreate_DB2"/>] ;
+ [<memberdata name="lfilemode" display="lFileMode"/>] ;
+ [<memberdata name="l_clearuniqueid" display="l_ClearUniqueID"/>] ;
+ [<memberdata name="l_configevaluated" display="l_ConfigEvaluated"/>] ;
@@ -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<63>n
lcPrevLine = taCodeLines(I-1)
.get_SeparatedLineAndComment( @lcPrevLine )
IF RIGHT( lcPrevLine,1 ) = ';' && Esta l<>nea es continuaci<63>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<63>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<63>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 ;

47
foxbin2prg_de.h Normal file
View File

@@ -0,0 +1,47 @@
*-------------------------------------------------------------------------------------------------------------------------------------------
*-- DEUTSCHE <EFBFBD>BERSETZUNG => UMBENENNEN DIESER DATEI IN [foxbin2prg.h] UND NEUKOMPILIEREN DER FOXBIN2PRG.PRG - Jeder ist frei die Strings anzupassen und zu <EFBFBD>bersetzen.
*-- NOTE: ES M<EFBFBD>SSEN ANF<EFBFBD>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<65>hrlich ist (binaries k<>nnten <20>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 [<<THIS.c_OutputFile>>] nicht generieren da sie Schreibgesch<63>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<6E>hrungszeichen in Zeile <<lcMetadatos>>"
#DEFINE C_DUPLICATED_FILE_LOC "Doppelte Datei"
#DEFINE C_ENDDEFINE_MARKER_NOT_FOUND_LOC "Kann keinen Ende Marker [ENDDEFINE] in Zeile <<TRANSFORM( toClase._Inicio )>> f<>r die ID [<<toClase._Nombre>>] finden"
#DEFINE C_END_MARKER_NOT_FOUND_LOC "Kann keinen Ende Marker [<<ta_ID_Bloques(lnPrimerID,2)>>] welcher den Start Marker [<<ta_ID_Bloques(lnPrimerID,1)>>] in Zeile <<TRANSFORM(taBloquesExclusion(tnBloquesExclusion,1))>> schlie<69>t"
#DEFINE C_FIELD_NOT_FOUND_ON_FILE_STRUCTURE_LOC "Feld [<<laProps(I)>>] nicht in der Struktur von Datei <<DBF('TABLABIN')>> gefunden"
#DEFINE C_FILE_DOESNT_EXIST_LOC 'Datei existiert nicht:'
#DEFINE C_FILE_NAME_IS_NOT_SUPPORTED_LOC "Datei [<<.c_InputFile>>] wird nicht unterst<73>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 <cFileSpec.Ext> [,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 [<<THIS.c_InputFile>>] ist NICHT in VFP 9 Format! - Bitte zuerst nach VFP 9 konvertieren mit MODIFY MENU <<JUSTFNAME((THIS.c_InputFile))>>"
#DEFINE C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC "Objekt [<<toObj.CLASS>>] enth<74>lt nicht oReg Objekt (level <<TRANSFORM(tnNivel)>>)"
#DEFINE C_NAMES_CAPITALIZATION_PROGRAM_FOUND_LOC "* Programm f<>r Gro<72>schreibungssetzung [<<lcEXE_CAPS>>] gefunden"
#DEFINE C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC "* Programm f<>r Gro<72>schreibungssetzung [<<lcEXE_CAPS>>] 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 [<<THIS.c_OutputFile>>] wurde nicht <20>berschrieben da sie dieselbe ist wie die neu generierte."
#DEFINE C_OUTPUTFILE_NEWER_THAN_INPUTFILE_LOC "Optimierung: Ausgabedatei [<<THIS.c_OutputFile>>] 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. [<<laLineas(1)>>]"
#DEFINE C_PROCESSING_LOC "Bearbeite Datei"
#DEFINE C_PROCESS_PROGRESS_LOC "Bearbeitungsfortschritt:"
#DEFINE C_PROPERTY_NAME_NOT_RECOGNIZED_LOC "Eigenschaft [<<TRANSFORM(tnPropertyID)>>] nicht erkannt."
#DEFINE C_REQUESTING_CAPITALIZATION_OF_FILE_LOC "- Forder Gro<72>schreibung f<>r Datei [<<tcFileName>>] 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 <<toClase._Nombre>> (<<loProcedure._Nombre>>), Zeile <<TRANSFORM(I)>> der Datei <<THIS.c_InputFile>> gefunden"
#DEFINE C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_2_LOC "Fehler in Verschachtelungsstruktur. ENDPROC wurde erwartet, aber es wurde ENDDEFINE in Klasse <<toClase._Nombre>> (<<toObjeto._Nombre>>.<<loProcedure._Nombre>>), Zeile <<TRANSFORM(I)>> der Datei <<THIS.c_InputFile>> gefunden"
#DEFINE C_UNKNOWN_CLASS_NAME_LOC "Unbekannte Klasse [<<THIS.CLASS>>]"
#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 <<UPPER(JUSTSTEM(THIS.c_InputFile))>>.campo tag keyname)"