From ae70d7b3f24876fb6a879ad57b9112311bbe7bef Mon Sep 17 00:00:00 2001 From: fernando Date: Wed, 22 Jan 2014 14:44:13 +0100 Subject: [PATCH 1/5] =?UTF-8?q?Changeset:=20139=20v1.19.4=20-=20Nuevo=20pa?= =?UTF-8?q?r=C3=A1metro=20Recompile=20para=20forzar=20la=20recompilaci?= =?UTF-8?q?=C3=B3n.=20Ahora=20por=20defecto=20el=20binario=20no=20se=20rec?= =?UTF-8?q?ompila=20para=20ganar=20velocidad=20y=20evitar=20errores.=20Deb?= =?UTF-8?q?e=20recompilar=20manualmente.=20-=20DBC:=20Agregado=20soporte?= =?UTF-8?q?=20para=20comentarios=20multil=C3=ADnea=20(propiedad=20Comment)?= =?UTF-8?q?=20-=20Agregada=20barra=20de=20progreso=20a=20los=20scripts=20d?= =?UTF-8?q?e=20conversi=C3=B3n=20batch=20VBS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Convert_VFP9_BIN_2_PRG.vbs | 84 ++++++++----- Convert_VFP9_PRG_2_BIN.vbs | 84 ++++++++----- foxbin2prg.pj2 | 4 +- foxbin2prg.pjt | Bin 334272 -> 336256 bytes foxbin2prg.pjx | Bin 1583 -> 1583 bytes foxbin2prg.prg | 250 ++++++++++++++++++++++++++----------- 6 files changed, 288 insertions(+), 134 deletions(-) diff --git a/Convert_VFP9_BIN_2_PRG.vbs b/Convert_VFP9_BIN_2_PRG.vbs index e2e2df1..3bd943b 100644 --- a/Convert_VFP9_BIN_2_PRG.vbs +++ b/Convert_VFP9_BIN_2_PRG.vbs @@ -13,8 +13,8 @@ '--------------------------------------------------------------------------------------------------- Const ForReading = 1 Dim WSHShell, FileSystemObject -Dim oVFP9, nExitCode, cEXETool, cCMD, nDebug, cConvertType, aExtensions(8), foxbin2prg_cfg -Dim i, x, str_cfg, aConf, cErrMsg, cFlagGenerateLog, cFlagDontShowErrMsg, cFlagJustShowCall +Dim oVFP9, nExitCode, cEXETool, cCMD, nDebug, cConvertType, aExtensions(8), foxbin2prg_cfg, aFiles(), nFile_Count +Dim i, x, str_cfg, aConf, cErrMsg, cFlagGenerateLog, cFlagDontShowErrMsg, cFlagJustShowCall, cFlagRecompile Set WSHShell = WScript.CreateObject("WScript.Shell") Set FileSystemObject = WScript.CreateObject("Scripting.FileSystemObject") Set oVFP9 = CreateObject("VisualFoxPro.Application.9") @@ -22,7 +22,7 @@ foxbin2prg_cfg = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg nExitCode = 0 cConvertType = "BIN2PRG" '<<< This is the only difference between the 2 scripts '--------------------------------------------------------------------------------------------------- -nDebug = 13 'Cumulative Flags: 0=OFF, 1=Create FoxBin2prg LOG, 2=Only show script calls, 4=Don't show FoxBin2prg error modal messages, 8=Show end of process message +nDebug = 1+0+4+0 'Cumulative Flags: 0=OFF, 1=Create FoxBin2prg LOG, 2=Only show script calls, 4=Don't show FoxBin2prg error modal messages, 8=Show end of process message '--------------------------------------------------------------------------------------------------- If cConvertType = "BIN2PRG" Then @@ -90,11 +90,59 @@ If WScript.Arguments.Count = 0 Then MsgBox cErrMsg, 64, "No parameters - Debug Status" Else cEXETool = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg.exe") + nFile_Count = 0 + oVFP9.DoCmd( "SET PROCEDURE TO '" & cEXETool & "'" ) + oVFP9.DoCmd( "PUBLIC oFoxBin2prg" ) + oVFP9.DoCmd( "oFoxBin2prg = CREATEOBJECT('c_foxbin2prg')" ) + oVFP9.DoCmd( "oFoxBin2prg.cargar_frm_avance()" ) For i = 0 To WScript.Arguments.Count-1 scanDirs( WScript.Arguments(i) ) Next + cFlagGenerateLog = "'0'" + cFlagDontShowErrMsg = "'0'" + cFlagShowCall = "'0'" + cFlagRecompile = "'0'" + + If GetBit(nDebug, 1) Then + cFlagGenerateLog = "'1'" + End If + If GetBit(nDebug, 2) Then + cFlagJustShowCall = "1" + End If + If GetBit(nDebug, 3) Then + cFlagDontShowErrMsg = "'1'" + End If + + oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.nMAX_VALUE = " & nFile_Count ) + oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.nVALUE = " & 0 ) + oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.AlwaysOnTop = .T." ) + oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.SHOW()" ) + + For i = 1 To nFile_Count + oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.lbl_TAREA.CAPTION = 'Procesando " & aFiles(i) & "...'" ) + oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.nVALUE = " & i ) + + If nDebug = 0 Or nDebug = 2 Then + cCMD = "oFoxBin2prg.ejecutar( '" & aFiles(i) & "' )" + Else + cCMD = "oFoxBin2prg.ejecutar( '" & aFiles(i) & "','0','0','0'," _ + & cFlagDontShowErrMsg & "," & cFlagGenerateLog & ",'1','','',.F.,''," & cFlagRecompile & " )" + End If + If cFlagJustShowCall = "1" Then + MsgBox cCMD, 64, "PARAMETROS ENVIADOS" + Else + oVFP9.DoCmd( cCMD ) + nExitCode = oVFP9.Eval("_SCREEN.ExitCode") + End If + + Next + + oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.HIDE()" ) + oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance = NULL" ) + oVFP9.DoCmd( "oFoxBin2prg = NULL" ) + If GetBit(nDebug, 4) Then MsgBox "Fin del Proceso!", 64, WScript.ScriptName End If @@ -122,33 +170,11 @@ End Sub Private Sub evaluateFile( tcFile ) - For x = 1 TO 8 + For x = 1 TO UBound(aExtensions,1) If aExtensions(x) = UCase( FileSystemObject.GetExtensionName( tcFile ) ) Then - cFlagGenerateLog = "'0'" - cFlagDontShowErrMsg = "'0'" - cFlagShowCall = "'0'" - - If GetBit(nDebug, 1) Then - cFlagGenerateLog = "'1'" - End If - If GetBit(nDebug, 2) Then - cFlagJustShowCall = "1" - End If - If GetBit(nDebug, 3) Then - cFlagDontShowErrMsg = "'1'" - End If - - If nDebug = 0 Or nDebug = 2 Then - cCMD = "DO " & chr(34) & cEXETool & chr(34) & " WITH " & chr(34) & tcFile & chr(34) - Else - cCMD = "DO " & chr(34) & cEXETool & chr(34) & " WITH '" & tcFile & "','0','0','0'," & cFlagDontShowErrMsg & "," & cFlagGenerateLog - End If - If cFlagJustShowCall = "1" Then - MsgBox cCMD, 64, "PARAMETROS ENVIADOS" - Else - oVFP9.DoCmd( cCMD ) - nExitCode = oVFP9.Eval("_SCREEN.ExitCode") - End If + nFile_Count = nFile_Count + 1 + ReDim Preserve aFiles(nFile_Count) + aFiles(nFile_Count) = tcFile Exit For End If Next diff --git a/Convert_VFP9_PRG_2_BIN.vbs b/Convert_VFP9_PRG_2_BIN.vbs index 804d25a..7fe5f47 100644 --- a/Convert_VFP9_PRG_2_BIN.vbs +++ b/Convert_VFP9_PRG_2_BIN.vbs @@ -13,8 +13,8 @@ '--------------------------------------------------------------------------------------------------- Const ForReading = 1 Dim WSHShell, FileSystemObject -Dim oVFP9, nExitCode, cEXETool, cCMD, nDebug, cConvertType, aExtensions(8), foxbin2prg_cfg -Dim i, x, str_cfg, aConf, cErrMsg, cFlagGenerateLog, cFlagDontShowErrMsg, cFlagJustShowCall +Dim oVFP9, nExitCode, cEXETool, cCMD, nDebug, cConvertType, aExtensions(8), foxbin2prg_cfg, aFiles(), nFile_Count +Dim i, x, str_cfg, aConf, cErrMsg, cFlagGenerateLog, cFlagDontShowErrMsg, cFlagJustShowCall, cFlagRecompile Set WSHShell = WScript.CreateObject("WScript.Shell") Set FileSystemObject = WScript.CreateObject("Scripting.FileSystemObject") Set oVFP9 = CreateObject("VisualFoxPro.Application.9") @@ -22,7 +22,7 @@ foxbin2prg_cfg = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg nExitCode = 0 cConvertType = "PRG2BIN" '<<< This is the only difference between the 2 scripts '--------------------------------------------------------------------------------------------------- -nDebug = 13 'Cumulative Flags: 0=OFF, 1=Create FoxBin2prg LOG, 2=Only show script calls, 4=Don't show FoxBin2prg error modal messages, 8=Show end of process message +nDebug = 1+0+4+0 'Cumulative Flags: 0=OFF, 1=Create FoxBin2prg LOG, 2=Only show script calls, 4=Don't show FoxBin2prg error modal messages, 8=Show end of process message '--------------------------------------------------------------------------------------------------- If cConvertType = "BIN2PRG" Then @@ -90,11 +90,59 @@ If WScript.Arguments.Count = 0 Then MsgBox cErrMsg, 64, "No parameters - Debug Status" Else cEXETool = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg.exe") + nFile_Count = 0 + oVFP9.DoCmd( "SET PROCEDURE TO '" & cEXETool & "'" ) + oVFP9.DoCmd( "PUBLIC oFoxBin2prg" ) + oVFP9.DoCmd( "oFoxBin2prg = CREATEOBJECT('c_foxbin2prg')" ) + oVFP9.DoCmd( "oFoxBin2prg.cargar_frm_avance()" ) For i = 0 To WScript.Arguments.Count-1 scanDirs( WScript.Arguments(i) ) Next + cFlagGenerateLog = "'0'" + cFlagDontShowErrMsg = "'0'" + cFlagShowCall = "'0'" + cFlagRecompile = "'0'" + + If GetBit(nDebug, 1) Then + cFlagGenerateLog = "'1'" + End If + If GetBit(nDebug, 2) Then + cFlagJustShowCall = "1" + End If + If GetBit(nDebug, 3) Then + cFlagDontShowErrMsg = "'1'" + End If + + oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.nMAX_VALUE = " & nFile_Count ) + oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.nVALUE = " & 0 ) + oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.AlwaysOnTop = .T." ) + oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.SHOW()" ) + + For i = 1 To nFile_Count + oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.lbl_TAREA.CAPTION = 'Procesando " & aFiles(i) & "...'" ) + oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.nVALUE = " & i ) + + If nDebug = 0 Or nDebug = 2 Then + cCMD = "oFoxBin2prg.ejecutar( '" & aFiles(i) & "' )" + Else + cCMD = "oFoxBin2prg.ejecutar( '" & aFiles(i) & "','0','0','0'," _ + & cFlagDontShowErrMsg & "," & cFlagGenerateLog & ",'1','','',.F.,''," & cFlagRecompile & " )" + End If + If cFlagJustShowCall = "1" Then + MsgBox cCMD, 64, "PARAMETROS ENVIADOS" + Else + oVFP9.DoCmd( cCMD ) + nExitCode = oVFP9.Eval("_SCREEN.ExitCode") + End If + + Next + + oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.HIDE()" ) + oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance = NULL" ) + oVFP9.DoCmd( "oFoxBin2prg = NULL" ) + If GetBit(nDebug, 4) Then MsgBox "Fin del Proceso!", 64, WScript.ScriptName End If @@ -122,33 +170,11 @@ End Sub Private Sub evaluateFile( tcFile ) - For x = 1 TO 8 + For x = 1 TO UBound(aExtensions,1) If aExtensions(x) = UCase( FileSystemObject.GetExtensionName( tcFile ) ) Then - cFlagGenerateLog = "'0'" - cFlagDontShowErrMsg = "'0'" - cFlagShowCall = "'0'" - - If GetBit(nDebug, 1) Then - cFlagGenerateLog = "'1'" - End If - If GetBit(nDebug, 2) Then - cFlagJustShowCall = "1" - End If - If GetBit(nDebug, 3) Then - cFlagDontShowErrMsg = "'1'" - End If - - If nDebug = 0 Or nDebug = 2 Then - cCMD = "DO " & chr(34) & cEXETool & chr(34) & " WITH " & chr(34) & tcFile & chr(34) - Else - cCMD = "DO " & chr(34) & cEXETool & chr(34) & " WITH '" & tcFile & "','0','0','0'," & cFlagDontShowErrMsg & "," & cFlagGenerateLog - End If - If cFlagJustShowCall = "1" Then - MsgBox cCMD, 64, "PARAMETROS ENVIADOS" - Else - oVFP9.DoCmd( cCMD ) - nExitCode = oVFP9.Eval("_SCREEN.ExitCode") - End If + nFile_Count = nFile_Count + 1 + ReDim Preserve aFiles(nFile_Count) + aFiles(nFile_Count) = tcFile Exit For End If Next diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2 index a69321f..2f21e9b 100644 --- a/foxbin2prg.pj2 +++ b/foxbin2prg.pj2 @@ -26,7 +26,7 @@ _LegalTrademark = "Open Source" _ProductName = " FOXBIN2PRG" _MajorVer = "1" _MinorVer = "19" -_Revision = " 194" +_Revision = " 205" _LanguageID = "1034" _AutoIncrement = "1" * @@ -51,7 +51,7 @@ loProject = _VFP.Projects('foxbin2prg.pjx') WITH loProject.FILES .ADD('config\config.fpw') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="1132857145" ID="1131721714" ObjRev="0" /> - .ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="1144160955" ID="1130644423" ObjRev="544" /> + .ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="1144393743" ID="1130644423" ObjRev="544" /> * .ITEM('__newproject.f2b').Remove() diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index 1a26c9f4301463352a950382c10f7e31b83b5072..887f819ccabb3b193703dc6d920740954b2721f1 100644 GIT binary patch delta 19314 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 delta 17483 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 I!_=t%0W!&%^Z)<= diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx index 34803bf53aa3676f980325df0ab8dafe8afb298f..cbae08e6bad2fee0e83dea39ae507a6dd0fbe026 100644 GIT binary patch delta 83 zcmZ3_vz~{=fR9mZBg+mJHe*X;a}$fnhgj?x^(M2iX-w8)ou&g8G-iMTw-5ydHw7Rt YH8BARIRo(oAXYFnFgG=u{D##T0L#M<)&Kwi delta 83 zcmZ3_vz~{=fR9mVBg+mJHbXN*6El;^hgj?xt0uFtX-w8)ou*@GW?*S*$^Zp!Aqom^ b3P50LVgeG<1LA%lRxq?MFg2X~hSeDW)?N?s diff --git a/foxbin2prg.prg b/foxbin2prg.prg index fdb8b63..b4013d5 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -37,25 +37,35 @@ * *--------------------------------------------------------------------------------------------------- * -* 04/11/2013 FDBOZZO v1.0 Creación inicial de las clases y soporte de los archivos VCX/SCX/PJX -* 22/11/2013 FDBOZZO v1.1 Corrección de bugs -* 23/11/2013 FDBOZZO v1.2 Corrección de bugs, limpieza de código y refactorización -* 24/11/2013 FDBOZZO v1.3 Corrección de bugs, limpieza de código y refactorización -* 27/11/2013 FDBOZZO v1.4 Agregado soporte comodines *.VCX, configuración de extensiones (vca), parámetro p/log -* 27/11/2013 FDBOZZO v1.5 Arreglo bug que no generaba form completo -* 01/12/2013 FDBOZZO v1.6 Refactorización completa generación BIN y PRG, cambio de algoritmos, arreglo de bugs, Unit Testing con FoxUnit -* 02/12/2013 FDBOZZO v1.7 Arreglo bug "Name", barra de progreso, agregado mensaje de ayuda si se llama sin parámetros, verificación y logueo de archivos READONLY con debug activa -* 03/12/2013 FDBOZZO v1.8 Arreglo bug "Name" (otra vez), sort encapsulado y reutilizado para versiones TEXTO y BIN por seguridad -* 06/12/2013 FDBOZZO v1.9 Arreglo bug pérdida de propiedades causado por una mejora anterior -* 06/12/2013 FDBOZZO v1.10 Arreglo del bug de mezcla de métodos de una clase con la siguiente -* 07/12/2013 FDBOZZO v1.11 Arreglo del bug de _amembers detectado por Edgar K.con la clase BlowFish.vcx (http://www.tortugaproductiva.galeon.com/docs/blowfish/index.html) -* 07/12/2013 FDBOZZO v1.12 Agregado soporte preliminar de conversión de reportes y etiquetas (FRX/LBX) -* 08/12/2013 FDBOZZO v1.13 Arreglo bug "Error 1924, TOREG is not an object" -* 15/12/2013 FDBOZZO v1.14 Arreglo de bug AutoCenter y registro COMMENT en regeneración de forms -* 08/12/2013 FDBOZZO v1.15 Agregado soporte preliminar de conversión de tablas, índices y bases de datos (DBF,CDX,DBC) -* 18/12/2013 FDBOZZO v1.16 Agregado soporte para menús (MNX) -* 03/01/2014 FDBOZZO v1.17 Agregado Unit Testing de menús y arreglo de las incidencias del menu -* 05/01/2013 FDBOZZO v1.18 Agregado soporte para generar estructuras TEXTO de DBFs anteriores a VFP 9, pero los binarios a VFP 9 // Arreglado bug de datos faltantes en campos de vistas // Arreglado bug mnx +* 04/11/2013 FDBOZZO v1.0 Creación inicial de las clases y soporte de los archivos VCX/SCX/PJX +* 22/11/2013 FDBOZZO v1.1 Corrección de bugs +* 23/11/2013 FDBOZZO v1.2 Corrección de bugs, limpieza de código y refactorización +* 24/11/2013 FDBOZZO v1.3 Corrección de bugs, limpieza de código y refactorización +* 27/11/2013 FDBOZZO v1.4 Agregado soporte comodines *.VCX, configuración de extensiones (vca), parámetro p/log +* 27/11/2013 FDBOZZO v1.5 Arreglo bug que no generaba form completo +* 01/12/2013 FDBOZZO v1.6 Refactorización completa generación BIN y PRG, cambio de algoritmos, arreglo de bugs, Unit Testing con FoxUnit +* 02/12/2013 FDBOZZO v1.7 Arreglo bug "Name", barra de progreso, agregado mensaje de ayuda si se llama sin parámetros, verificación y logueo de archivos READONLY con debug activa +* 03/12/2013 FDBOZZO v1.8 Arreglo bug "Name" (otra vez), sort encapsulado y reutilizado para versiones TEXTO y BIN por seguridad +* 06/12/2013 FDBOZZO v1.9 Arreglo bug pérdida de propiedades causado por una mejora anterior +* 06/12/2013 FDBOZZO v1.10 Arreglo del bug de mezcla de métodos de una clase con la siguiente +* 07/12/2013 FDBOZZO v1.11 Arreglo del bug de _amembers detectado por Edgar K.con la clase BlowFish.vcx (http://www.tortugaproductiva.galeon.com/docs/blowfish/index.html) +* 07/12/2013 FDBOZZO v1.12 Agregado soporte preliminar de conversión de reportes y etiquetas (FRX/LBX) +* 08/12/2013 FDBOZZO v1.13 Arreglo bug "Error 1924, TOREG is not an object" +* 15/12/2013 FDBOZZO v1.14 Arreglo de bug AutoCenter y registro COMMENT en regeneración de forms +* 08/12/2013 FDBOZZO v1.15 Agregado soporte preliminar de conversión de tablas, índices y bases de datos (DBF,CDX,DBC) +* 18/12/2013 FDBOZZO v1.16 Agregado soporte para menús (MNX) +* 03/01/2014 FDBOZZO v1.17 Agregado Unit Testing de menús y arreglo de las incidencias del menu +* 05/01/2013 FDBOZZO v1.18 Agregado soporte para generar estructuras TEXTO de DBFs anteriores a VFP 9, pero los binarios a VFP 9 // Arreglado bug de datos faltantes en campos de vistas // Arreglado bug mnx +* 08/01/2014 FDBOZZO v1.19 Arreglo bug SCX-VCX: Orden incorrecto en Reserved3 ocaciona que no se disparen eventos ACCESS (y probablemente ASIGN) +* 08/01/2014 FDBOZZO v1.19 Arreglo bug DBF: Tipo de índice generado incorrecto en DB2 cuando es Candidate +* 08/01/2014 FDBOZZO v1.19 Agregado soporte para convertir PJM a PJ2 +* 08/01/2014 FDBOZZO v1.19 Agregada validación al convertir Menús con estructura anterior a VFP9 +* 08/01/2014 FDBOZZO v1.19 Cambiada la propiedad "Autor" por "Author" en los archivos MN2 +* 08/01/2014 FDBOZZO v1.19.1 Cambio en los headers de los archivos TX2 para quitar el timestamp "Generated" que causa diferencias innecesarias +* 08/01/2014 FDBOZZO v1.19.2 Arreglo de bug PJ2: Al regenerar da un error por buscar "Autor" en vez de "Author" +* 08/01/2014 FDBOZZO v1.19.3 Cambio en los timestamps de los TXT para mantener los valores vacíos que generaban muchísimas diferencias +* 22/01/2014 FDBOZZO v1.19.4 Nuevo parámetro Recompile para forzar la recompilación. Ahora por defecto el binario no se recompila para ganar velocidad y evitar errores. Debe recompilar manualmente. +* 22/01/2014 FDBOZZO v1.19.4 DBC: Agregado soporte para comentarios multilínea (propiedad Comment) * * *--------------------------------------------------------------------------------------------------- @@ -92,10 +102,14 @@ * tcDontShowProgress (v? IN ) '1' para NO mostrar la ventana de progreso * tcOriginalFileName (v? IN ) Sirve para los casos en los que inputFile es un nombre temporal y se quiere generar * el nombre correcto dentro de la versión texto (por ej: en los PJ2 y las cabeceras) +* tcRecompile (v? IN ) Indica recompilar ('1') el binario una vez regenerado. [Cambio de funcionamiento por defecto] +* Este cambio es para ganar tiempo, velocidad y seguridad. Además la recompilación que hace FoxBin2Prg +* se hace desde el directorio del archivo, con lo que las referencias relativas pueden +* generar errores de compilación, típicamente los #include. * * Ej: DO FOXBIN2PRG.PRG WITH "C:\DESA\INTEGRACION\LIBRERIA.VCX" *--------------------------------------------------------------------------------------------------- -LPARAMETERS tc_InputFile, tcType_na, tcTextName_na, tlGenText_na, tcDontShowErrors, tcDebug, tcDontShowProgress, tcOriginalFileName +LPARAMETERS tc_InputFile, tcType_na, tcTextName_na, tlGenText_na, tcDontShowErrors, tcDebug, tcDontShowProgress, tcOriginalFileName, tcRecompile *-- Internacionalización / Internationalization *-- Fin / End @@ -265,7 +279,7 @@ LPARAMETERS tc_InputFile, tcType_na, tcTextName_na, tlGenText_na, tcDontShowErro #ELSE && English #DEFINE C_FOXBIN2PRG_JUST_VFP_9_LOC 'FOXBIN2PRG is only for Visual FoxPro 9.0!' #DEFINE C_FOXBIN2PRG_WARN_CAPTION_LOC 'FOXBIN2PRG: WARNING!' - #DEFINE FOXBIN2PRG_INFO_SINTAX_LOC 'FOXBIN2PRG [cType_NA cTextName_NA cGenText_NA cDontShowErrors cDebug]' + CR_LF + CR_LF ; + #DEFINE FOXBIN2PRG_INFO_SINTAX_LOC 'FOXBIN2PRG [cType_NA cTextName_NA cGenText_NA cDontShowErrors cDebug cDontShowProgress cOriginalFileName cRecompile]' + CR_LF + CR_LF ; + 'Example to generate TXT of all VCX of "c:\desa\clases", without showing error window and generating LOG file: ' + CR_LF ; + ' FOXBIN2PRG "c:\desa\clases\*.vcx" "0" "0" "0" "1" "1"' + CR_LF + CR_LF ; + 'Example to generate TXT of all VCX of "c:\desa\clases", without showing error window and without LOG file: ' + CR_LF ; @@ -289,7 +303,7 @@ PUBLIC goCnv AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' LOCAL lnResp goCnv = CREATEOBJECT("c_foxbin2prg") lnResp = goCnv.ejecutar( tc_InputFile, tcType_na, tcTextName_na, tlGenText_na, tcDontShowErrors, tcDebug ; - , '', NULL, NULL, .F., tcOriginalFileName ) + , '', NULL, NULL, .F., tcOriginalFileName, tcRecompile ) ADDPROPERTY(_SCREEN, 'ExitCode', lnResp) IF _VFP.STARTMODE <= 1 @@ -337,6 +351,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -368,6 +383,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM l_Test = .F. l_ShowErrors = .F. l_ShowProgress = .T. + l_Recompile = .T. l_MethodSort_Enabled = .T. && Para Unit Testing se puede cambiar a .F. para buscar diferencias l_PropSort_Enabled = .T. && Para Unit Testing se puede cambiar a .F. para buscar diferencias l_ReportSort_Enabled = .T. && Para Unit Testing se puede cambiar a .F. para buscar diferencias @@ -397,6 +413,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM THIS.c_Foxbin2prg_FullPath = SUBSTR( SYS(16), AT( 'C_FOXBIN2PRG.INIT', SYS(16) ) + LEN('C_FOXBIN2PRG.INIT') + 1 ) THIS.c_CurDir = SYS(5) + CURDIR() THIS.o_FSO = NEWOBJECT("Scripting.FileSystemObject") + ADDPROPERTY(_SCREEN, 'ExitCode', 0) ENDPROC @@ -502,6 +519,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC + PROCEDURE cargar_frm_avance + THIS.o_Frm_Avance = CREATEOBJECT("frm_avance") + ENDPROC + + PROCEDURE ejecutar *-------------------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) @@ -517,9 +539,13 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM * tlRelanzarError (?v IN ) Indica si el error debe relanzarse o no * tcOriginalFileName (v? IN ) Sirve para los casos en los que inputFile es un nombre temporal y se quiere generar * el nombre correcto dentro de la versión texto (por ej: en los PJ2 y las cabeceras) + * tcRecompile (v? IN ) Indica recompilar ('1') el binario una vez regenerado. [Cambio de funcionamiento por defecto] + * Este cambio es para ganar tiempo, velocidad y seguridad. Además la recompilación que hace FoxBin2Prg + * se hace desde el directorio del archivo, con lo que las referencias relativas pueden + * generar errores de compilación, típicamente los #include. *-------------------------------------------------------------------------------------------------------------- LPARAMETERS tc_InputFile, tcType_na, tcTextName_na, tlGenText_na, tcDontShowErrors, tcDebug, tcDontShowProgress ; - , toModulo, toEx AS EXCEPTION, tlRelanzarError, tcOriginalFileName + , toModulo, toEx AS EXCEPTION, tlRelanzarError, tcOriginalFileName, tcRecompile TRY LOCAL I, lcPath, lnResp, lcFileSpec, lcFile, laFiles(1,5), laConfig(1), lcConfigFile, lcExt ; @@ -557,10 +583,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- Ejecución normal THIS.l_ShowProgress = NOT (TRANSFORM(tcDontShowProgress)=='1') THIS.l_ShowErrors = NOT (TRANSFORM(tcDontShowErrors) == '1') + THIS.l_Recompile = (TRANSFORM(tcRecompile) == '1') THIS.l_Debug = (TRANSFORM(tcDebug)=='1' OR FILE(FORCEEXT(THIS.c_Foxbin2prg_FullPath,'LOG'))) IF THIS.l_ShowProgress - THIS.o_Frm_Avance = CREATEOBJECT("frm_avance") + THIS.cargar_frm_avance() ENDIF *-- Configuración @@ -645,6 +672,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDCASE CATCH TO toEx + ADDPROPERTY(_SCREEN, 'ExitCode', toEx.ERRORNO) IF llExisteConfig THIS.writeLog( 'ERROR: ' + TRANSFORM(toEx.ERRORNO) + ', ' + toEx.MESSAGE + CR_LF ; + toEx.PROCEDURE + ', line ' + TRANSFORM(toEx.LINENO) + CR_LF ; @@ -655,7 +683,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF FINALLY - IF VARTYPE(THIS.o_Frm_Avance) = "O" + IF THIS.l_ShowProgress THIS.o_Frm_Avance.HIDE() THIS.o_Frm_Avance.RELEASE() STORE NULL TO THIS.o_Frm_Avance @@ -1020,18 +1048,18 @@ DEFINE CLASS frm_avance AS FORM ADD OBJECT shp_base AS SHAPE WITH ; - TOP = 40, ; + TOP = 50, ; LEFT = 12, ; - HEIGHT = 21, ; + HEIGHT = 13, ; WIDTH = 601, ; CURVATURE = 15, ; NAME = "shp_base" ADD OBJECT shp_avance AS SHAPE WITH ; - TOP = 40, ; + TOP = 50, ; LEFT = 12, ; - HEIGHT = 21, ; + HEIGHT = 13, ; WIDTH = 36, ; CURVATURE = 15, ; BACKCOLOR = RGB(255,255,128), ; @@ -1759,7 +1787,7 @@ DEFINE CLASS c_conversor_base AS SESSION tnTimeStamp = 0 EXIT ENDIF - + IF VARTYPE(m.ltDateTime) <> 'T' m.ltDateTime = DATETIME() ENDIF @@ -1771,7 +1799,7 @@ DEFINE CLASS c_conversor_base AS SESSION + MINUTE(m.ltDateTime) * 2^5 ; + SEC(m.ltDateTime) ENDTRY - + RETURN INT(tnTimeStamp) ENDFUNC @@ -4074,7 +4102,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo de cada clase THIS.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toModulo ) - THIS.escribirArchivoBin( @toModulo ) + THIS.escribirArchivoBin( @toModulo, toFoxbin2prg ) CATCH TO toEx @@ -4094,7 +4122,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin ******************************************************************************************************************* PROCEDURE escribirArchivoBin - LPARAMETERS toModulo + LPARAMETERS toModulo, toFoxbin2prg *-- Estructura del objeto toModulo generado: *-- ----------------------------------------------------------------------------------------------------------- *-- Version Versión usada para generar la versión PRG analizada @@ -4162,6 +4190,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin *-- ----------------------------------------------------------------------------------------------------------- #IF .F. LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF TRY @@ -4284,7 +4313,10 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin ENDFOR && I = 1 TO toModulo._Clases_Count USE IN (SELECT("TABLABIN")) - COMPILE CLASSLIB (THIS.c_OutputFile) + + IF toFoxbin2prg.l_Recompile + COMPILE CLASSLIB (THIS.c_OutputFile) + ENDIF CATCH TO loEx @@ -4351,7 +4383,7 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo de cada clase THIS.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toModulo ) - THIS.escribirArchivoBin( @toModulo ) + THIS.escribirArchivoBin( @toModulo, toFoxbin2prg ) CATCH TO toEx @@ -4371,7 +4403,7 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin ******************************************************************************************************************* PROCEDURE escribirArchivoBin - LPARAMETERS toModulo + LPARAMETERS toModulo, toFoxbin2prg *-- Estructura del objeto toModulo generado: *-- ----------------------------------------------------------------------------------------------------------- *-- Version Versión usada para generar la versión PRG analizada @@ -4439,6 +4471,7 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin *-- ----------------------------------------------------------------------------------------------------------- #IF .F. LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF TRY @@ -4562,7 +4595,10 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin , '' ) USE IN (SELECT("TABLABIN")) - COMPILE FORM (THIS.c_OutputFile) + + IF toFoxbin2prg.l_Recompile + COMPILE FORM (THIS.c_OutputFile) + ENDIF CATCH TO loEx @@ -5358,7 +5394,7 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte THIS.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toReport ) - THIS.escribirArchivoBin( @toReport ) + THIS.escribirArchivoBin( @toReport, toFoxbin2prg ) CATCH TO loEx @@ -5380,10 +5416,11 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin ******************************************************************************************************************* PROCEDURE escribirArchivoBin - LPARAMETERS toReport + LPARAMETERS toReport, toFoxbin2prg *-- ----------------------------------------------------------------------------------------------------------- #IF .F. LOCAL toReport AS CL_REPORT OF 'FOXBIN2PRG.PRG' + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF TRY @@ -5431,10 +5468,12 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin USE IN (SELECT("TABLABIN")) - IF THIS.c_Type = 'FRX' - COMPILE REPORT (THIS.c_OutputFile) - ELSE - COMPILE LABEL (THIS.c_OutputFile) + IF toFoxbin2prg.l_Recompile + IF THIS.c_Type = 'FRX' + COMPILE REPORT (THIS.c_OutputFile) + ELSE + COMPILE LABEL (THIS.c_OutputFile) + ENDIF ENDIF @@ -5792,7 +5831,7 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin STORE 0 TO lnCodError STORE '' TO lcIndex, lcFieldDef - + ERASE (FORCEEXT(THIS.c_OutputFile, 'DBF')) ERASE (FORCEEXT(THIS.c_OutputFile, 'FPT')) ERASE (FORCEEXT(THIS.c_OutputFile, 'CDX')) @@ -5882,7 +5921,7 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin *-- La actualización de la fecha sirve para evitar diferencias al regenerar el DBF ldLastUpdate = EVALUATE( '{^' + toTable._LastUpdate + '}' ) loDBFUtils.write_DBC_BackLink( THIS.c_OutputFile, toTable._Database, ldLastUpdate ) - + CATCH TO loEx lnCodError = loEx.ERRORNO @@ -6024,7 +6063,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte THIS.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toDatabase ) - THIS.escribirArchivoBin( @toDatabase ) + THIS.escribirArchivoBin( @toDatabase, toFoxbin2prg ) CATCH TO loEx @@ -6046,10 +6085,11 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ******************************************************************************************************************* PROCEDURE escribirArchivoBin - LPARAMETERS toDatabase + LPARAMETERS toDatabase, toFoxbin2prg *-- ----------------------------------------------------------------------------------------------------------- #IF .F. LOCAL toDatabase AS CL_DBC OF 'FOXBIN2PRG.PRG' + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF TRY @@ -6059,6 +6099,10 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin toDatabase.updateDBC( THIS.c_OutputFile ) + IF toFoxbin2prg.l_Recompile + COMPILE DATABASE (THIS.c_OutputFile) + ENDIF + CATCH TO loEx lnCodError = loEx.ERRORNO @@ -8401,7 +8445,6 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg CASE toFoxbin2prg.doBackup( .F., .T., '', '', '' ) AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' ENDCASE - *COMPILE ( THIS.c_outputFile ) ENDIF @@ -8505,7 +8548,7 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg FOR I = 1 TO ALINES( laLines, STREXTRACT( lcStrPJM, '[OLEServers]', '[OLEServersEnd]' ), 4 ) ALINES( laProps, laLines(I), 1, ',' ) - + IF I = 1 WITH loServerHead AS CL_PROJ_SRV_HEAD OF 'FOXBIN2PRG.PRG' ._LibraryName = laProps(1) @@ -8515,10 +8558,10 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg ._ServerType = PADL(laProps(5),4) ._TypeLib = laProps(6) ENDWITH - + ELSE loServerData = CREATEOBJECT("CL_PROJ_SRV_DATA") - + WITH loServerData AS CL_PROJ_SRV_DATA OF 'FOXBIN2PRG.PRG' ._HelpContextID = laProps(4) ._ServerName = laProps(3) @@ -8530,12 +8573,12 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg ._CLSID = laProps(8) ._Interface = laProps(9) ENDWITH - + loServerHead.add_Server( loServerData ) loServerData = NULL ENDIF ENDFOR - + *-- Escaneo el proyecto @@ -8769,7 +8812,6 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg CASE toFoxbin2prg.doBackup( .F., .T., '', '', '' ) AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' ENDCASE - *COMPILE ( THIS.c_outputFile ) ENDIF @@ -8981,21 +9023,21 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg CATCH TO toEx DO CASE - CASE toEx.ErrorNo = 13 && Alias not found - toEx.UserValue = 'WARNING!!' + CR_LF ; + CASE toEx.ERRORNO = 13 && Alias not found + toEx.USERVALUE = 'WARNING!!' + CR_LF ; + 'MAKE SURE YOU ARE NOT USING A TABLE ALIAS ON INDEX KEY EXPRESSIONS!! (ex: index on ' ; + UPPER(JUSTSTEM(THIS.c_InputFile)) + '.field tag keyname)' + CR_LF + CR_LF ; + '¡¡ATENCIÓN!!' + CR_LF ; + 'ASEGÚRESE DE QUE NO ESTÁ USANDO UN ALIAS DE TABLA EN LAS EXPRESIONES DE LOS ÍNDICES!! (ej: index on ' ; + UPPER(JUSTSTEM(THIS.c_InputFile)) + '.campo tag nombreclave)' -*!* CASE toEx.ErrorNo = 1976 && Cannot resolve backlink -*!* toEx.UserValue = 'WARNING!!' + CR_LF ; -*!* + "MAY BE DATABASE FIELDS DOESN'T" ; -*!* + UPPER(JUSTSTEM(THIS.c_InputFile)) + '.field tag keyname)' + CR_LF + CR_LF ; -*!* + '¡¡ATENCIÓN!!' + CR_LF ; -*!* + 'ASEGÚRESE DE QUE NO ESTÁ USANDO UN ALIAS DE TABLA EN LAS EXPRESIONES DE LOS ÍNDICES!! (ej: index on ' ; -*!* + UPPER(JUSTSTEM(THIS.c_InputFile)) + '.campo tag nombreclave)' + *!* CASE toEx.ErrorNo = 1976 && Cannot resolve backlink + *!* toEx.UserValue = 'WARNING!!' + CR_LF ; + *!* + "MAY BE DATABASE FIELDS DOESN'T" ; + *!* + UPPER(JUSTSTEM(THIS.c_InputFile)) + '.field tag keyname)' + CR_LF + CR_LF ; + *!* + '¡¡ATENCIÓN!!' + CR_LF ; + *!* + 'ASEGÚRESE DE QUE NO ESTÁ USANDO UN ALIAS DE TABLA EN LAS EXPRESIONES DE LOS ÍNDICES!! (ej: index on ' ; + *!* + UPPER(JUSTSTEM(THIS.c_InputFile)) + '.campo tag nombreclave)' ENDCASE IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -9123,7 +9165,7 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg USE (THIS.c_InputFile) SHARED NOUPDATE ALIAS _TABLAORIG SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN USE IN (SELECT("_TABLAORIG")) - + *-- Verificación de menú VFP 9 IF FCOUNT() < 25 OR EMPTY(FIELD("RESNAME")) OR EMPTY(FIELD("SYSRES")) ERROR 'Menu [' + (THIS.c_InputFile) + '] is NOT VFP 9 Format! - Please convert to VFP 9 with MODIFY MENU ' + JUSTFNAME((THIS.c_InputFile)) @@ -9979,6 +10021,7 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE _MEMBERDATA = [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -10055,6 +10098,41 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE ENDFUNC + PROCEDURE analizarBloque_Comment + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tcLine (@! IN/OUT) Contenido de la línea en análisis + * taCodeLines (@! IN ) Array de líneas del programa analizado + * I (@! IN/OUT) Número de línea en análisis + * tnCodeLines (@! IN ) Cantidad de líneas del programa analizado + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcLine, taCodeLines, I, tnCodeLines + + IF LEFT(tcLine, LEN('')) == '' + LOCAL lcValue + llBloqueEncontrado = .T. + lcValue = STREXTRACT( taCodeLines(I), '', '', 1, 2 ) + + IF NOT '' $ tcLine THEN + FOR I = I + 1 TO tnCodeLines + THIS.set_Line( @tcLine, @taCodeLines, I ) + + DO CASE + CASE '' $ tcLine && Fin + lcValue = lcValue + CR_LF + LEFT( taCodeLines(I), AT( '', taCodeLines(I) ) - 1 ) + EXIT + + OTHERWISE && Línea de Stored Procedure + lcValue = lcValue + CR_LF + taCodeLines(I) + ENDCASE + ENDFOR + ENDIF + + THIS.ADDPROPERTY( '_Comment', lcValue ) + ENDIF + ENDPROC + + PROCEDURE getAllPropertiesFromObjectname *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) @@ -10900,6 +10978,9 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE CASE C_STORED_PROC_I $ tcLine THIS.analizarBloque_SP( @tcLine, @taCodeLines, @I, tnCodeLines ) + CASE '' $ tcLine + THIS.analizarBloque_Comment( @tcLine, @taCodeLines, @I, tnCodeLines ) + OTHERWISE && Otro valor *-- Estructura a reconocer: * ID @@ -11138,6 +11219,9 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE loConnection.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) THIS.ADD( loConnection, loConnection._Name ) + CASE '' $ tcLine + THIS.analizarBloque_Comment( @tcLine, @taCodeLines, @I, tnCodeLines ) + OTHERWISE && Otro valor *-- No hay otros valores ENDCASE @@ -11290,6 +11374,9 @@ DEFINE CLASS CL_DBC_CONNECTION AS CL_DBC_BASE CASE C_CONNECTION_F $ tcLine && Fin EXIT + CASE '' $ tcLine + THIS.analizarBloque_Comment( @tcLine, @taCodeLines, @I, tnCodeLines ) + OTHERWISE && Propiedad de CONNECTION *-- Estructura a reconocer: * NOMBRE @@ -11607,6 +11694,9 @@ DEFINE CLASS CL_DBC_TABLE AS CL_DBC_BASE loRelations = THIS._Relations loRelations.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + CASE '' $ tcLine + THIS.analizarBloque_Comment( @tcLine, @taCodeLines, @I, tnCodeLines ) + OTHERWISE && Propiedad de TABLE *-- Estructura a reconocer: * NOMBRE @@ -11915,6 +12005,9 @@ DEFINE CLASS CL_DBC_FIELD_DB AS CL_DBC_BASE CASE C_FIELD_F $ tcLine && Fin EXIT + CASE '' $ tcLine + THIS.analizarBloque_Comment( @tcLine, @taCodeLines, @I, tnCodeLines ) + OTHERWISE && Propiedad de FIELD *-- Estructura a reconocer: * NOMBRE @@ -12182,6 +12275,9 @@ DEFINE CLASS CL_DBC_INDEX_DB AS CL_DBC_BASE CASE C_INDEX_F $ tcLine && Fin EXIT + CASE '' $ tcLine + THIS.analizarBloque_Comment( @tcLine, @taCodeLines, @I, tnCodeLines ) + OTHERWISE && Propiedad de FIELD *-- Estructura a reconocer: * NOMBRE @@ -12512,6 +12608,9 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE loRelations = THIS._Relations loRelations.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + CASE '' $ tcLine + THIS.analizarBloque_Comment( @tcLine, @taCodeLines, @I, tnCodeLines ) + OTHERWISE && Propiedad de VIEW *-- Estructura a reconocer: * NOMBRE @@ -12875,6 +12974,9 @@ DEFINE CLASS CL_DBC_FIELD_VW AS CL_DBC_BASE CASE C_FIELD_F $ tcLine && Fin EXIT + CASE '' $ tcLine + THIS.analizarBloque_Comment( @tcLine, @taCodeLines, @I, tnCodeLines ) + OTHERWISE && Propiedad de FIELD *-- Estructura a reconocer: * NOMBRE @@ -16191,11 +16293,11 @@ DEFINE CLASS CL_DBF_UTILS AS SESSION n_NumberOfRecords = 0 n_NumberOfRecordsReal = 0 n_PosOfFirstDataRecord = 0 - Fields = NULL + FIELDS = NULL PROCEDURE INIT - THIS.Fields = CREATEOBJECT("COLLECTION") + THIS.FIELDS = CREATEOBJECT("COLLECTION") ENDPROC @@ -16260,7 +16362,7 @@ DEFINE CLASS CL_DBF_UTILS AS SESSION *--- FOR I = 1 TO .n_FieldCount loField = CREATEOBJECT("CL_DBF_UTILS_FIELD") - + WITH loField AS CL_DBF_UTILS_FIELD OF 'FOXBIN2PRG.PRG' lcStr = FREAD(lnHandle,11) .FieldName = RTRIM( lcStr, 0, CHR(0), ' ' ) @@ -16281,7 +16383,7 @@ DEFINE CLASS CL_DBF_UTILS AS SESSION lcStr = FREAD(lnHandle,8) ENDWITH - .Fields.Add(loField) + .FIELDS.ADD(loField) loField = NULL ENDFOR *--- @@ -16292,7 +16394,7 @@ DEFINE CLASS CL_DBF_UTILS AS SESSION tcDBC_Name = RTRIM(lcStr,0,CHR(0)) && DBC Name (si tiene) .c_Backlink_DBC_Name = tcDBC_Name ENDIF - + .n_FileSize = FSEEK(lnHandle, 0, 2) .n_NumberOfRecordsReal = INT( (.n_FileSize - .n_HeaderSize) / .n_DataRecordLength ) ENDWITH @@ -16469,7 +16571,7 @@ DEFINE CLASS CL_DBF_UTILS AS SESSION laCodePage(27,3) = 0x97 lnPos = ASCAN( laCodePage, tnHexCodePage, 1, -1, 3, 8 ) - + IF lnPos > 0 tnCodePage = laCodePage(lnPos,1) tcDescrip = laCodePage(lnPos,2) @@ -16477,7 +16579,7 @@ DEFINE CLASS CL_DBF_UTILS AS SESSION tnCodePage = 0 tcDescrip = '' ENDIF - + RETURN ENDPROC @@ -16511,10 +16613,10 @@ DEFINE CLASS CL_DBF_UTILS AS SESSION ENDTEXT *-- Fields - loField = THIS.Fields.Item(1) + loField = THIS.FIELDS.ITEM(1) lcText = lcText + CR_LF + loField.toText(.T.) - FOR EACH loField AS CL_DBF_UTILS_FIELD OF 'FOXBIN2PRG.PRG' IN THIS.Fields + FOR EACH loField AS CL_DBF_UTILS_FIELD OF 'FOXBIN2PRG.PRG' IN THIS.FIELDS lcText = lcText + CR_LF + loField.toText() ENDFOR @@ -16529,7 +16631,7 @@ DEFINE CLASS CL_DBF_UTILS AS SESSION 0x0C Column is autoincrementing ENDTEXT - + ENDWITH RETURN lcText From a5a866df3cb7f352f0e66a1792735d8a7ab76dd8 Mon Sep 17 00:00:00 2001 From: fernando Date: Wed, 22 Jan 2014 20:43:08 +0100 Subject: [PATCH 2/5] =?UTF-8?q?Changeset:=20140=20v1.19.4=20-=20El=20par?= =?UTF-8?q?=C3=A1metro=20cRecompile=20ahora=20permite=20poner=20un=20Path?= =?UTF-8?q?=20base=20de=20compilaci=C3=B3n=20(el=20del=20PJX)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.pj2 | 4 ++-- foxbin2prg.pjt | Bin 336256 -> 336384 bytes foxbin2prg.pjx | Bin 1583 -> 1583 bytes foxbin2prg.prg | 19 ++++++++++++++++--- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2 index 2f21e9b..a0a1a0d 100644 --- a/foxbin2prg.pj2 +++ b/foxbin2prg.pj2 @@ -26,7 +26,7 @@ _LegalTrademark = "Open Source" _ProductName = " FOXBIN2PRG" _MajorVer = "1" _MinorVer = "19" -_Revision = " 205" +_Revision = " 207" _LanguageID = "1034" _AutoIncrement = "1" * @@ -51,7 +51,7 @@ loProject = _VFP.Projects('foxbin2prg.pjx') WITH loProject.FILES .ADD('config\config.fpw') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="1132857145" ID="1131721714" ObjRev="0" /> - .ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="1144393743" ID="1130644423" ObjRev="544" /> + .ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="1144431831" ID="1130644423" ObjRev="544" /> * .ITEM('__newproject.f2b').Remove() diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index 887f819ccabb3b193703dc6d920740954b2721f1..62aa9ea01fed79f85e6161c54d49d22776729d00 100644 GIT binary patch delta 11363 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 delta 11195 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 EAJc`~?f?J) diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx index cbae08e6bad2fee0e83dea39ae507a6dd0fbe026..945a7b5082011231d0876bfffb042402519ae1dd 100644 GIT binary patch delta 29 icmZ3_vz}+e9u_teV?zsbqsfO@{(+gshLex6W&!|^=?Q)S delta 29 hcmZ3_vz}+e9u_uZOJj2ri^+#r{y~_=laH}x0sxWH36KB) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index b4013d5..97fff6f 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -106,6 +106,7 @@ * Este cambio es para ganar tiempo, velocidad y seguridad. Además la recompilación que hace FoxBin2Prg * se hace desde el directorio del archivo, con lo que las referencias relativas pueden * generar errores de compilación, típicamente los #include. +* NOTA: Si en vez de '1' se indica un Path (p.ej, el del proyecto, se usará como base para recompilar * * Ej: DO FOXBIN2PRG.PRG WITH "C:\DESA\INTEGRACION\LIBRERIA.VCX" *--------------------------------------------------------------------------------------------------- @@ -543,6 +544,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM * Este cambio es para ganar tiempo, velocidad y seguridad. Además la recompilación que hace FoxBin2Prg * se hace desde el directorio del archivo, con lo que las referencias relativas pueden * generar errores de compilación, típicamente los #include. + * NOTA: Si en vez de '1' se indica un Path (p.ej, el del proyecto, se usará como base para recompilar *-------------------------------------------------------------------------------------------------------------- LPARAMETERS tc_InputFile, tcType_na, tcTextName_na, tlGenText_na, tcDontShowErrors, tcDebug, tcDontShowProgress ; , toModulo, toEx AS EXCEPTION, tlRelanzarError, tcOriginalFileName, tcRecompile @@ -583,7 +585,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- Ejecución normal THIS.l_ShowProgress = NOT (TRANSFORM(tcDontShowProgress)=='1') THIS.l_ShowErrors = NOT (TRANSFORM(tcDontShowErrors) == '1') - THIS.l_Recompile = (TRANSFORM(tcRecompile) == '1') + THIS.l_Recompile = (NOT EMPTY(tcRecompile) AND (TRANSFORM(tcRecompile) == '1' OR DIRECTORY(tcRecompile))) THIS.l_Debug = (TRANSFORM(tcDebug)=='1' OR FILE(FORCEEXT(THIS.c_Foxbin2prg_FullPath,'LOG'))) IF THIS.l_ShowProgress @@ -619,7 +621,12 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE '*' $ JUSTSTEM( tc_InputFile ) *-- SE QUIEREN TODOS LOS ARCHIVOS DE UNA EXTENSIÓN lcFileSpec = FULLPATH( tc_InputFile ) - CD (JUSTPATH(lcFileSpec)) + + IF THIS.l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile) + CD (tcRecompile) + ELSE + CD (JUSTPATH(lcFileSpec)) + ENDIF THIS.c_LogFile = ADDBS( JUSTPATH( lcFileSpec ) ) + STRTRAN( JUSTFNAME( lcFileSpec ), '*', '_ALL' ) + '.LOG' IF THIS.l_Debug @@ -655,7 +662,13 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM OTHERWISE *-- UN ARCHIVO INDIVIDUAL IF FILE(tc_InputFile) - CD (JUSTPATH(tc_InputFile)) + + IF THIS.l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile) + CD (tcRecompile) + ELSE + CD (JUSTPATH(tc_InputFile)) + ENDIF + THIS.c_LogFile = tc_InputFile + '.LOG' IF THIS.l_Debug From 31cd7c999f3e30e554791d33fcc39950e60220a1 Mon Sep 17 00:00:00 2001 From: fernando Date: Thu, 23 Jan 2014 12:44:50 +0100 Subject: [PATCH 3/5] =?UTF-8?q?Changeset:=20141=20v1.19.4=20-=20Encapsulad?= =?UTF-8?q?a=20la=20recompilaci=C3=B3n=20de=20binarios=20seg=C3=BAn=20la?= =?UTF-8?q?=20extensi=C3=B3n=20en=20nuevo=20m=C3=A9todo=20compileFoxProBin?= =?UTF-8?q?ary()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.pj2 | 4 ++-- foxbin2prg.pjt | Bin 336384 -> 336896 bytes foxbin2prg.pjx | Bin 1583 -> 1583 bytes foxbin2prg.prg | 39 +++++++++++++++++++++++++++++++-------- 4 files changed, 33 insertions(+), 10 deletions(-) diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2 index a0a1a0d..c2a678a 100644 --- a/foxbin2prg.pj2 +++ b/foxbin2prg.pj2 @@ -26,7 +26,7 @@ _LegalTrademark = "Open Source" _ProductName = " FOXBIN2PRG" _MajorVer = "1" _MinorVer = "19" -_Revision = " 207" +_Revision = " 208" _LanguageID = "1034" _AutoIncrement = "1" * @@ -51,7 +51,7 @@ loProject = _VFP.Projects('foxbin2prg.pjx') WITH loProject.FILES .ADD('config\config.fpw') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="1132857145" ID="1131721714" ObjRev="0" /> - .ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="1144431831" ID="1130644423" ObjRev="544" /> + .ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="1144481002" ID="1130644423" ObjRev="544" /> * .ITEM('__newproject.f2b').Remove() diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index 62aa9ea01fed79f85e6161c54d49d22776729d00..c1f3b8ea2e0f01cf5fcb5dbb0ffab71a81b8b257 100644 GIT binary patch delta 13394 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 Tbu@#ml>dWA`7daeQ?vgAvH6Jq delta 12691 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 YJ;prmCq~s!2Aj42YeM^nl7IjGAK1Z;*Z=?k diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx index 945a7b5082011231d0876bfffb042402519ae1dd..6575b5fa24efd78a67edfacde725c044665531ff 100644 GIT binary patch delta 71 zcmZ3_vz~{=fR9mpBg;+}RtrM|W3$PJSpI7RSq4T7P~aA#px~we1g0h?AR%WUo(RMW OCPtQ~Mw8#LIs*U`jt#~D delta 71 zcmZ3_vz~{=fR9mZBg;+}R%1g8bEC] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -434,6 +435,32 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC + PROCEDURE compileFoxProBinary + LPARAMETERS tcFilename + LOCAL lcType + tcFilename = EVL(tcFilename, THIS.c_OutputFile) + lcType = UPPER(JUSTEXT(tcFilename)) + + DO CASE + CASE lcType = 'VCX' + COMPILE CLASSLIB (tcFilename) + + CASE lcType = 'SCX' + COMPILE FORM (tcFilename) + + CASE lcType = 'FRX' + COMPILE REPORT (tcFilename) + + CASE lcType = 'LBX' + COMPILE LABEL (tcFilename) + + CASE lcType = 'DBC' + COMPILE DATABASE (tcFilename) + + ENDCASE + ENDPROC + + PROCEDURE doBackup *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) @@ -4328,7 +4355,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin USE IN (SELECT("TABLABIN")) IF toFoxbin2prg.l_Recompile - COMPILE CLASSLIB (THIS.c_OutputFile) + toFoxbin2prg.compileFoxProBinary() ENDIF @@ -4610,7 +4637,7 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin USE IN (SELECT("TABLABIN")) IF toFoxbin2prg.l_Recompile - COMPILE FORM (THIS.c_OutputFile) + toFoxbin2prg.compileFoxProBinary() ENDIF @@ -5482,11 +5509,7 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin USE IN (SELECT("TABLABIN")) IF toFoxbin2prg.l_Recompile - IF THIS.c_Type = 'FRX' - COMPILE REPORT (THIS.c_OutputFile) - ELSE - COMPILE LABEL (THIS.c_OutputFile) - ENDIF + toFoxbin2prg.compileFoxProBinary() ENDIF @@ -6113,7 +6136,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin toDatabase.updateDBC( THIS.c_OutputFile ) IF toFoxbin2prg.l_Recompile - COMPILE DATABASE (THIS.c_OutputFile) + toFoxbin2prg.compileFoxProBinary() ENDIF From 434a515bd7893d1dc1925760441edfcec0ed2742 Mon Sep 17 00:00:00 2001 From: fernando Date: Thu, 23 Jan 2014 15:35:00 +0100 Subject: [PATCH 4/5] =?UTF-8?q?Changeset:=20142=20v1.19.4=20-=20Agregada?= =?UTF-8?q?=20devoluci=C3=B3n=20de=20nCodError=20cuando=20ocurre=20un=20er?= =?UTF-8?q?ror=20en=20Ejecutar()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 0f58d37..dd66ae6 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -577,12 +577,12 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM , toModulo, toEx AS EXCEPTION, tlRelanzarError, tcOriginalFileName, tcRecompile TRY - LOCAL I, lcPath, lnResp, lcFileSpec, lcFile, laFiles(1,5), laConfig(1), lcConfigFile, lcExt ; + LOCAL I, lcPath, lnCodError, lcFileSpec, lcFile, laFiles(1,5), laConfig(1), lcConfigFile, lcExt ; , llExisteConfig, lcConfData, lnFileCount ; , loEx AS EXCEPTION ; , loFSO AS Scripting.FileSystemObject - lnResp = 0 + lnCodError = 0 SET DELETED ON SET DATE YMD @@ -601,12 +601,12 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE VERSION(5) < 900 *-- '¡FOXBIN2PRG es solo para Visual FoxPro 9.0!' MESSAGEBOX( C_FOXBIN2PRG_JUST_VFP_9_LOC, 0+64+4096, C_FOXBIN2PRG_WARN_CAPTION_LOC, 60000 ) - lnResp = 1 + lnCodError = 1 CASE EMPTY(tc_InputFile) *-- (Ejemplo de sintaxis y uso) MESSAGEBOX( FOXBIN2PRG_INFO_SINTAX_LOC, 0+64+4096, 'FOXBIN2PRG: SINTAXIS INFO', 60000 ) - lnResp = 1 + lnCodError = 1 OTHERWISE *-- Ejecución normal @@ -682,7 +682,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF IF FILE( lcFile ) - lnResp = THIS.Convertir( lcFile, toModulo, toEx, tlRelanzarError, tcOriginalFileName ) + lnCodError = THIS.Convertir( lcFile, toModulo, toEx, tlRelanzarError, tcOriginalFileName ) ENDIF ENDFOR @@ -705,13 +705,14 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM THIS.writeLog( THIS.c_Foxbin2prg_FullPath + ' - FileSpec: ' + EVL(tc_InputFile,'') ) ENDIF - lnResp = THIS.Convertir( tc_InputFile, toModulo, toEx, tlRelanzarError, tcOriginalFileName ) + lnCodError = THIS.Convertir( tc_InputFile, toModulo, toEx, tlRelanzarError, tcOriginalFileName ) ENDIF ENDCASE ENDCASE CATCH TO toEx + lnCodError = toEx.ErrorNo ADDPROPERTY(_SCREEN, 'ExitCode', toEx.ERRORNO) IF llExisteConfig THIS.writeLog( 'ERROR: ' + TRANSFORM(toEx.ERRORNO) + ', ' + toEx.MESSAGE + CR_LF ; @@ -732,7 +733,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *SET PATH TO (lcPath) ENDTRY - RETURN lnResp + RETURN lnCodError ENDPROC From 38f2f243d5e3154d7df98d40d0d9852cbb50ce88 Mon Sep 17 00:00:00 2001 From: fernando Date: Thu, 23 Jan 2014 15:39:17 +0100 Subject: [PATCH 5/5] Changeset: 143 EXE --- foxbin2prg.pj2 | 4 ++-- foxbin2prg.pjt | Bin 336896 -> 336896 bytes foxbin2prg.pjx | Bin 1583 -> 1583 bytes 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2 index c2a678a..55f045a 100644 --- a/foxbin2prg.pj2 +++ b/foxbin2prg.pj2 @@ -26,7 +26,7 @@ _LegalTrademark = "Open Source" _ProductName = " FOXBIN2PRG" _MajorVer = "1" _MinorVer = "19" -_Revision = " 208" +_Revision = " 209" _LanguageID = "1034" _AutoIncrement = "1" * @@ -51,7 +51,7 @@ loProject = _VFP.Projects('foxbin2prg.pjx') WITH loProject.FILES .ADD('config\config.fpw') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="1132857145" ID="1131721714" ObjRev="0" /> - .ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="1144481002" ID="1130644423" ObjRev="544" /> + .ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="1144485039" ID="1130644423" ObjRev="544" /> * .ITEM('__newproject.f2b').Remove() diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index c1f3b8ea2e0f01cf5fcb5dbb0ffab71a81b8b257..bf607df37bc06eb3cff12eb7d352b839f76f66dc 100644 GIT binary patch delta 10386 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