From c9a276a116ee8bd84987598abf0e0a0936156a08 Mon Sep 17 00:00:00 2001 From: fernando Date: Sat, 1 Mar 2014 17:29:13 +0100 Subject: [PATCH] Changeset: 180 fernando - 01/03/2014 12:23:43: v1.19.14 - Agregadas 2 funciones para poder evaluar el soporte de conversiones de forma externa (requiere EvaluarConfiguracion() previamente). Usado en los scripts - Arreglo bug ExtraBackupLevels: cuando no se define no se genera backup --- Convert_VFP9_BIN_2_PRG.vbs | 69 +++++++------------------------------ Convert_VFP9_PRG_2_BIN.vbs | 69 +++++++------------------------------ foxbin2prg.cfg | 1 + foxbin2prg.pj2 | 6 ++-- foxbin2prg.pjt | Bin 360064 -> 361408 bytes foxbin2prg.pjx | Bin 1583 -> 1583 bytes foxbin2prg.prg | 58 ++++++++++++++++++++++++++----- 7 files changed, 77 insertions(+), 126 deletions(-) diff --git a/Convert_VFP9_BIN_2_PRG.vbs b/Convert_VFP9_BIN_2_PRG.vbs index 6a6fde3..a93516c 100644 --- a/Convert_VFP9_BIN_2_PRG.vbs +++ b/Convert_VFP9_BIN_2_PRG.vbs @@ -13,14 +13,13 @@ '--------------------------------------------------------------------------------------------------- Const ForReading = 1 Dim WSHShell, FileSystemObject -Dim oVFP9, nExitCode, cEXETool, cCMD, nDebug, cConvertType, aExtensions(8), foxbin2prg_cfg, aFiles(), nFile_Count +Dim oVFP9, nExitCode, cEXETool, cCMD, nDebug, lcExt, foxbin2prg_cfg, aFiles(), nFile_Count Dim i, x, str_cfg, aConf, cErrMsg, cFlagGenerateLog, cFlagDontShowErrMsg, cFlagJustShowCall, cFlagRecompile, cNoTimestamps Set WSHShell = WScript.CreateObject("WScript.Shell") Set FileSystemObject = WScript.CreateObject("Scripting.FileSystemObject") Set oVFP9 = CreateObject("VisualFoxPro.Application.9") foxbin2prg_cfg = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg.cfg") nExitCode = 0 -cConvertType = "BIN2PRG" '<<< This is the only difference between the 2 scripts '--------------------------------------------------------------------------------------------------- 'Cumulative Flags: ' 0=OFF @@ -32,54 +31,8 @@ cConvertType = "BIN2PRG" '<<< This is the only difference between the 2 scripts nDebug = 1+0+4+0+16 '--------------------------------------------------------------------------------------------------- -If cConvertType = "BIN2PRG" Then - aExtensions(1) = "PJX" - aExtensions(2) = "VCX" - aExtensions(3) = "SCX" - aExtensions(4) = "FRX" - aExtensions(5) = "LBX" - aExtensions(6) = "DBF" - aExtensions(7) = "DBC" - aExtensions(8) = "MNX" -Else - '-- Extensiones TXT por defecto - aExtensions(1) = "PJ2" - aExtensions(2) = "VC2" - aExtensions(3) = "SC2" - aExtensions(4) = "FR2" - aExtensions(5) = "LB2" - aExtensions(6) = "DB2" - aExtensions(7) = "DC2" - aExtensions(8) = "MN2" - - If FileSystemObject.FileExists( foxbin2prg_cfg ) Then - '-- Existe el archivo de configuración foxbin2prg.cgf - Set objTextFile = FileSystemObject.OpenTextFile( foxbin2prg_cfg, ForReading ) - - Do Until objTextFile.AtEndOfStream - strNextLine = objTextFile.Readline - arrFb2p_CFG = Split(strNextLine , ",") - For i = 0 to Ubound(arrFb2p_CFG) - If Left( arrFb2p_CFG(i), 10 ) = "extension:" Then - aConf = Split( arrFb2p_CFG(i), ":" ) 'Obtengo la separación de "extensión:" y "ext:equiv" - str_cfg = UCase( Trim( aConf(1) ) ) - aConf = Split( str_cfg, "=" ) 'Obtengo la separación de extensión y equivalencia (vc2=vca) - - For x = 1 TO 8 - If aExtensions(x) = aConf(0) Then - aExtensions(x) = UCase( aConf(1) ) - Exit For - End If - Next - Else - 'Wscript.Echo "Saltear: " & arrFb2p_CFG(i) - End If - Next - Loop - End If -End if - If WScript.Arguments.Count = 0 Then + 'SIN PARÁMETROS nExitCode = 1 cErrMsg = "nDebug = " & nDebug If GetBit(nDebug, 1) Then @@ -99,11 +52,14 @@ If WScript.Arguments.Count = 0 Then End If MsgBox cErrMsg, 64, "No parameters - Debug Status" Else + 'CON PARÁMETROS 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')" ) + '.o_FoxBin2Prg.EvaluarConfiguracion( tcDontShowProgress, tcDontShowErrors, tcNoTimestamps, tcDebug, tcRecompile, tcExtraBackupLevels ) + oVFP9.DoCmd( "oFoxBin2prg.EvaluarConfiguracion( '1', '1' )" ) oVFP9.DoCmd( "oFoxBin2prg.cargar_frm_avance()" ) For i = 0 To WScript.Arguments.Count-1 @@ -185,14 +141,13 @@ End Sub Private Sub evaluateFile( tcFile ) - For x = 1 TO UBound(aExtensions,1) - If aExtensions(x) = UCase( FileSystemObject.GetExtensionName( tcFile ) ) Then - nFile_Count = nFile_Count + 1 - ReDim Preserve aFiles(nFile_Count) - aFiles(nFile_Count) = tcFile - Exit For - End If - Next + lcExt = UCase( FileSystemObject.GetExtensionName( tcFile ) ) + oVFP9.SetVar "gc_Ext", lcExt + If oVFP9.Eval("oFoxBin2prg.TieneSoporte_Bin2Prg(gc_Ext)") Then + nFile_Count = nFile_Count + 1 + ReDim Preserve aFiles(nFile_Count) + aFiles(nFile_Count) = tcFile + End If End Sub diff --git a/Convert_VFP9_PRG_2_BIN.vbs b/Convert_VFP9_PRG_2_BIN.vbs index cd518eb..907974a 100644 --- a/Convert_VFP9_PRG_2_BIN.vbs +++ b/Convert_VFP9_PRG_2_BIN.vbs @@ -13,14 +13,13 @@ '--------------------------------------------------------------------------------------------------- Const ForReading = 1 Dim WSHShell, FileSystemObject -Dim oVFP9, nExitCode, cEXETool, cCMD, nDebug, cConvertType, aExtensions(8), foxbin2prg_cfg, aFiles(), nFile_Count +Dim oVFP9, nExitCode, cEXETool, cCMD, nDebug, lcExt, foxbin2prg_cfg, aFiles(), nFile_Count Dim i, x, str_cfg, aConf, cErrMsg, cFlagGenerateLog, cFlagDontShowErrMsg, cFlagJustShowCall, cFlagRecompile, cNoTimestamps Set WSHShell = WScript.CreateObject("WScript.Shell") Set FileSystemObject = WScript.CreateObject("Scripting.FileSystemObject") Set oVFP9 = CreateObject("VisualFoxPro.Application.9") foxbin2prg_cfg = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg.cfg") nExitCode = 0 -cConvertType = "PRG2BIN" '<<< This is the only difference between the 2 scripts '--------------------------------------------------------------------------------------------------- 'Cumulative Flags: ' 0=OFF @@ -32,54 +31,8 @@ cConvertType = "PRG2BIN" '<<< This is the only difference between the 2 scripts nDebug = 1+0+4+0+16 '--------------------------------------------------------------------------------------------------- -If cConvertType = "BIN2PRG" Then - aExtensions(1) = "PJX" - aExtensions(2) = "VCX" - aExtensions(3) = "SCX" - aExtensions(4) = "FRX" - aExtensions(5) = "LBX" - aExtensions(6) = "DBF" - aExtensions(7) = "DBC" - aExtensions(8) = "MNX" -Else - '-- Extensiones TXT por defecto - aExtensions(1) = "PJ2" - aExtensions(2) = "VC2" - aExtensions(3) = "SC2" - aExtensions(4) = "FR2" - aExtensions(5) = "LB2" - aExtensions(6) = "DB2" - aExtensions(7) = "DC2" - aExtensions(8) = "MN2" - - If FileSystemObject.FileExists( foxbin2prg_cfg ) Then - '-- Existe el archivo de configuración foxbin2prg.cgf - Set objTextFile = FileSystemObject.OpenTextFile( foxbin2prg_cfg, ForReading ) - - Do Until objTextFile.AtEndOfStream - strNextLine = objTextFile.Readline - arrFb2p_CFG = Split(strNextLine , ",") - For i = 0 to Ubound(arrFb2p_CFG) - If Left( arrFb2p_CFG(i), 10 ) = "extension:" Then - aConf = Split( arrFb2p_CFG(i), ":" ) 'Obtengo la separación de "extensión:" y "ext:equiv" - str_cfg = UCase( Trim( aConf(1) ) ) - aConf = Split( str_cfg, "=" ) 'Obtengo la separación de extensión y equivalencia (vc2=vca) - - For x = 1 TO 8 - If aExtensions(x) = aConf(0) Then - aExtensions(x) = UCase( aConf(1) ) - Exit For - End If - Next - Else - 'Wscript.Echo "Saltear: " & arrFb2p_CFG(i) - End If - Next - Loop - End If -End if - If WScript.Arguments.Count = 0 Then + 'SIN PARÁMETROS nExitCode = 1 cErrMsg = "nDebug = " & nDebug If GetBit(nDebug, 1) Then @@ -99,11 +52,14 @@ If WScript.Arguments.Count = 0 Then End If MsgBox cErrMsg, 64, "No parameters - Debug Status" Else + 'CON PARÁMETROS 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')" ) + '.o_FoxBin2Prg.EvaluarConfiguracion( tcDontShowProgress, tcDontShowErrors, tcNoTimestamps, tcDebug, tcRecompile, tcExtraBackupLevels ) + oVFP9.DoCmd( "oFoxBin2prg.EvaluarConfiguracion( '1', '1' )" ) oVFP9.DoCmd( "oFoxBin2prg.cargar_frm_avance()" ) For i = 0 To WScript.Arguments.Count-1 @@ -185,14 +141,13 @@ End Sub Private Sub evaluateFile( tcFile ) - For x = 1 TO UBound(aExtensions,1) - If aExtensions(x) = UCase( FileSystemObject.GetExtensionName( tcFile ) ) Then - nFile_Count = nFile_Count + 1 - ReDim Preserve aFiles(nFile_Count) - aFiles(nFile_Count) = tcFile - Exit For - End If - Next + lcExt = UCase( FileSystemObject.GetExtensionName( tcFile ) ) + oVFP9.SetVar "gc_Ext", lcExt + If oVFP9.Eval("oFoxBin2prg.TieneSoporte_Prg2Bin(gc_Ext)") Then + nFile_Count = nFile_Count + 1 + ReDim Preserve aFiles(nFile_Count) + aFiles(nFile_Count) = tcFile + End If End Sub diff --git a/foxbin2prg.cfg b/foxbin2prg.cfg index 5e8f5a3..9436874 100644 --- a/foxbin2prg.cfg +++ b/foxbin2prg.cfg @@ -58,6 +58,7 @@ * EN: Uncomment to activate the new value, comment to deactivate and use the default * ES: Descomente para activar el nuevo valor, comente para desactivarlo y usar el predeterminado +* 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge) *--------------------------------------------------------------------------------------------------- *PJX_Conversion_Support: 2 *VCX_Conversion_Support: 2 diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2 index 5901394..ea33e3f 100644 --- a/foxbin2prg.pj2 +++ b/foxbin2prg.pj2 @@ -26,7 +26,7 @@ _LegalTrademark = "Open Source" _ProductName = " FOXBIN2PRG" _MajorVer = "1" _MinorVer = "19" -_Revision = " 282" +_Revision = " 286" _LanguageID = "1034" _AutoIncrement = "1" * @@ -50,8 +50,8 @@ MODIFY PROJECT 'foxbin2prg.pjx' NOWAIT NOSHOW NOPROJECTHOOK 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="1147207961" ID="1130644423" ObjRev="544" /> + .ADD('config\config.fpw') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="0" ID="0" ObjRev="0" /> + .ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" /> * .ITEM('__newproject.f2b').Remove() diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index ee1f00b4678d26fb1ce1b40cd9f7b701a426d0d1..6dfc31d76e1cd79d017a24fc29108a2e76334f8f 100644 GIT binary patch delta 15294 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 delta 14399 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 diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx index f1d8fe4638e910d2aed95bcdb6233f9d98b73976..0a99a17f1a377c8dfdc6517d2504ea08e3aa5b87 100644 GIT binary patch delta 37 rcmZ3_vz}+eUKUmpV`EG6$%k0}gIGqElaH|~vKm^N7#d7|!|DtG=7S5P delta 37 qcmZ3_vz}+eUKUmZb4xSR$%k0}gIR`?kFhGU8k?CLSxkPz>I?wq2n(?Q diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 93f80a1..c0a0253 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -74,6 +74,8 @@ * 09/02/2014 FDBOZZO v1.19.10 Parametrización soporte de tipo de conversión por archivo / ClearUniqueID * 13/02/2014 FDBOZZO v1.19.11 Optimizaciones WITH/ENDWITH (16%+velocidad) / Arreglo bug #IF anidados * 21/02/2014 FDBOZZO v1.19.12 Centralizar ZOrder controles en metadata de cabecera de clase para minimizar diferencias / También mover UniqueIDs y Timestamps a metadata +* 26/02/2014 FDBOZZO v1.19.13 Arreglo bug TimeStamp en archivo cfg / ExtraBackupLevels se puede desactivar / Optimizaciones / Casos FoxUnit +* 01/03/2014 FDBOZZO v1.19.14 Arreglo bug regresion cuando no se define ExtraBackupLevels no hace backups / Optimización carga cfg en batch * * *--------------------------------------------------------------------------------------------------- @@ -91,6 +93,7 @@ * 01/01/2014 Fidel Charny REPORTE BUG mnx v1.16: El menú no siempre respeta la posición original LOCATION y a veces se genera mal el MNX (se arregla en v1.17) * 05/01/2014 Fidel Charny REPORTE BUG mnx v1.17: Se genera cláusula "DO" o llamada Command cuando no Procedure ni Command que llamar // Diferencia de Case en NAME (se arregla en v1.18) * 20/02/2014 Ryan Harris PROPUESTA DE MEJORA v1.19.11: Centralizar los ZOrder de los controles en metadata de cabecera de la clase para minimizar diferencias +* 27/02/2014 BUG REGRESION v1.19.13: Si no se define ExtraBackupLevels no se generan backups (solucionado en v1.19.14) * * *--------------------------------------------------------------------------------------------------- @@ -411,6 +414,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] @@ -795,7 +800,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .l_Recompile = (EMPTY(tcRecompile) OR TRANSFORM(tcRecompile) == '1' OR DIRECTORY(tcRecompile)) .l_NoTimestamps = NOT (TRANSFORM(tcNoTimestamps) == '0') .l_Debug = (TRANSFORM(tcDebug)=='1') - .n_ExtraBackupLevels = INT(VAL(TRANSFORM(tcExtraBackupLevels))) + tcExtraBackupLevels = EVL( tcExtraBackupLevels, TRANSFORM( .n_ExtraBackupLevels ) ) + .n_ExtraBackupLevels = INT( VAL( TRANSFORM(tcExtraBackupLevels) ) ) .writeLog( '---' ) .writeLog( '> l_ShowProgress: ' + TRANSFORM(.l_ShowProgress) ) @@ -813,13 +819,49 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC + PROCEDURE TieneSoporte_Bin2Prg + LPARAMETERS tcExt + LOCAL llTieneSoporte + WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + llTieneSoporte = ICASE( tcExt == 'PJX', .PJX_Conversion_Support >= 1 ; + , tcExt == 'VCX', .VCX_Conversion_Support >= 1 ; + , tcExt == 'SCX', .SCX_Conversion_Support >= 1 ; + , tcExt == 'FRX', .FRX_Conversion_Support >= 1 ; + , tcExt == 'LBX', .LBX_Conversion_Support >= 1 ; + , tcExt == 'MNX', .MNX_Conversion_Support >= 1 ; + , tcExt == 'DBF', .DBF_Conversion_Support >= 1 ; + , tcExt == 'DBC', .DBC_Conversion_Support >= 1 ; + , .F. ) + ENDWITH && THIS + RETURN llTieneSoporte + ENDPROC + + + PROCEDURE TieneSoporte_Prg2Bin + LPARAMETERS tcExt + LOCAL llTieneSoporte + WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + llTieneSoporte = ICASE( tcExt == .c_PJ2, .PJX_Conversion_Support >= 2 ; + , tcExt == .c_VC2, .VCX_Conversion_Support >= 2 ; + , tcExt == .c_SC2, .SCX_Conversion_Support >= 2 ; + , tcExt == .c_FR2, .FRX_Conversion_Support >= 2 ; + , tcExt == .c_LB2, .LBX_Conversion_Support >= 2 ; + , tcExt == .c_MN2, .MNX_Conversion_Support >= 2 ; + , tcExt == .c_DB2, .DBF_Conversion_Support >= 2 ; + , tcExt == .c_DC2, .DBC_Conversion_Support >= 2 ; + , .F. ) + ENDWITH && THIS + RETURN llTieneSoporte + ENDPROC + + PROCEDURE ejecutar *-------------------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tc_InputFile (!v IN ) Nombre del archivo de entrada * tcType (?v IN ) NO DISPONIBLE. Se mantiene por compatibilidad con SourceSafe * tcTextName (?v IN ) NO DISPONIBLE. Se mantiene por compatibilidad con SourceSafe - * tlGenText (?v IN ) NO DISPONIBLE. Se mantiene por compatibilidad con SourceSafe + * tlGenText (?v IN ) NO DISPONIBLE. Se mantiene por compatibilidad con SourceSafe * tcDontShowErrors (?v IN ) '1' para no mostrar mensajes de error (MESSAGEBOX) * tcDebug (?v IN ) '1' para habilitar modo debug (SOLO DESARROLLO) * tcDontShowProgress (?v IN ) '1' para inhabilitar la barra de progreso @@ -2230,11 +2272,11 @@ DEFINE CLASS c_conversor_base AS SESSION * tcPropName (!v IN ) Nombre de la propiedad *-------------------------------------------------------------------------------------------------------------- LPARAMETERS tcOperation, tcPropName - LOCAL lcPropName, lnPropType + LOCAL lcPropName lcPropName = tcPropName tcOperation = UPPER(EVL(tcOperation,'')) - lnPropType = 0 && System property + *-- Por defecto son todas System Properties DO CASE CASE tcOperation == 'GETNAME' lcPropName = SUBSTR(tcPropName,5) @@ -2486,11 +2528,9 @@ DEFINE CLASS c_conversor_base AS SESSION lcPropName = 'A595' + lcPropName CASE lcPropName == '_memberdata' lcPropName = 'A995' + lcPropName - CASE lcPropName == 'Name' - lnPropType = 1 && System "Name" property + CASE lcPropName == 'Name' && System "Name" property lcPropName = 'A999' + lcPropName - OTHERWISE - lnPropType = 2 && User property + OTHERWISE && User Property lcPropName = 'A998' + lcPropName ENDCASE @@ -9375,7 +9415,7 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg FOR I = 1 TO ALINES( laLines, STREXTRACT( lcStrPJM, '[ProjectFiles]', '[EOF]' ), 4 ) ALINES( laProps, laLines(I) + ',', 1, ',' ) loReg = CREATEOBJECT("EMPTY") - ADDPROPERTY( loReg, 'ID', VAL( laProps(1) ) ) + ADDPROPERTY( loReg, 'ID', IIF( toFoxBin2Prg.l_ClearUniqueID, 0, VAL( laProps(1) ) ) ) ADDPROPERTY( loReg, 'TYPE', laProps(2) ) ADDPROPERTY( loReg, 'NAME', laProps(3) ) ADDPROPERTY( loReg, 'EXCLUDE', EVALUATE( laProps(4) ) )