diff --git a/Convert_VFP9_BIN_2_PRG.vbs b/Convert_VFP9_BIN_2_PRG.vbs index 2e0fd2f..e2e2df1 100644 --- a/Convert_VFP9_BIN_2_PRG.vbs +++ b/Convert_VFP9_BIN_2_PRG.vbs @@ -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 = 5 'Cumulative Flags: 0=OFF, 1=Create FoxBin2prg LOG, 2=Only show script calls, 4=Don't show FoxBin2prg error modal messages +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 '--------------------------------------------------------------------------------------------------- If cConvertType = "BIN2PRG" Then @@ -84,6 +84,9 @@ If WScript.Arguments.Count = 0 Then If GetBit(nDebug, 3) Then cErrMsg = cErrMsg & Chr(13) & "Bit 2 ON: (4) Don't show FoxBin2prg error modal messages" End If + If GetBit(nDebug, 4) Then + cErrMsg = cErrMsg & Chr(13) & "Bit 3 ON: (8) Show End of Process message" + End If MsgBox cErrMsg, 64, "No parameters - Debug Status" Else cEXETool = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg.exe") @@ -91,6 +94,10 @@ Else For i = 0 To WScript.Arguments.Count-1 scanDirs( WScript.Arguments(i) ) Next + + If GetBit(nDebug, 4) Then + MsgBox "Fin del Proceso!", 64, WScript.ScriptName + End If End If WScript.Quit(nExitCode) @@ -117,16 +124,17 @@ End Sub Private Sub evaluateFile( tcFile ) For x = 1 TO 8 If aExtensions(x) = UCase( FileSystemObject.GetExtensionName( tcFile ) ) Then - cFlagGenerateLog = "'0'" - cFlagDontShowErrMsg = "'0'" - cFlagShowCall = "'0'" - If GetBit(nDebug,1) Then + cFlagGenerateLog = "'0'" + cFlagDontShowErrMsg = "'0'" + cFlagShowCall = "'0'" + + If GetBit(nDebug, 1) Then cFlagGenerateLog = "'1'" End If - If GetBit(nDebug,2) Then + If GetBit(nDebug, 2) Then cFlagJustShowCall = "1" End If - If GetBit(nDebug,3) Then + If GetBit(nDebug, 3) Then cFlagDontShowErrMsg = "'1'" End If @@ -136,7 +144,7 @@ Private Sub evaluateFile( tcFile ) cCMD = "DO " & chr(34) & cEXETool & chr(34) & " WITH '" & tcFile & "','0','0','0'," & cFlagDontShowErrMsg & "," & cFlagGenerateLog End If If cFlagJustShowCall = "1" Then - MsgBox cCMD, 0, "PARAMETROS ENVIADOS" + MsgBox cCMD, 64, "PARAMETROS ENVIADOS" Else oVFP9.DoCmd( cCMD ) nExitCode = oVFP9.Eval("_SCREEN.ExitCode") diff --git a/Convert_VFP9_PRG_2_BIN.vbs b/Convert_VFP9_PRG_2_BIN.vbs index ad4fcd8..804d25a 100644 --- a/Convert_VFP9_PRG_2_BIN.vbs +++ b/Convert_VFP9_PRG_2_BIN.vbs @@ -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 = 5 'Cumulative Flags: 0=OFF, 1=Create FoxBin2prg LOG, 2=Only show script calls, 4=Don't show FoxBin2prg error modal messages +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 '--------------------------------------------------------------------------------------------------- If cConvertType = "BIN2PRG" Then @@ -84,6 +84,9 @@ If WScript.Arguments.Count = 0 Then If GetBit(nDebug, 3) Then cErrMsg = cErrMsg & Chr(13) & "Bit 2 ON: (4) Don't show FoxBin2prg error modal messages" End If + If GetBit(nDebug, 4) Then + cErrMsg = cErrMsg & Chr(13) & "Bit 3 ON: (8) Show End of Process message" + End If MsgBox cErrMsg, 64, "No parameters - Debug Status" Else cEXETool = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg.exe") @@ -91,6 +94,10 @@ Else For i = 0 To WScript.Arguments.Count-1 scanDirs( WScript.Arguments(i) ) Next + + If GetBit(nDebug, 4) Then + MsgBox "Fin del Proceso!", 64, WScript.ScriptName + End If End If WScript.Quit(nExitCode) @@ -117,16 +124,17 @@ End Sub Private Sub evaluateFile( tcFile ) For x = 1 TO 8 If aExtensions(x) = UCase( FileSystemObject.GetExtensionName( tcFile ) ) Then - cFlagGenerateLog = "'0'" - cFlagDontShowErrMsg = "'0'" - cFlagShowCall = "'0'" - If GetBit(nDebug,1) Then + cFlagGenerateLog = "'0'" + cFlagDontShowErrMsg = "'0'" + cFlagShowCall = "'0'" + + If GetBit(nDebug, 1) Then cFlagGenerateLog = "'1'" End If - If GetBit(nDebug,2) Then + If GetBit(nDebug, 2) Then cFlagJustShowCall = "1" End If - If GetBit(nDebug,3) Then + If GetBit(nDebug, 3) Then cFlagDontShowErrMsg = "'1'" End If @@ -136,7 +144,7 @@ Private Sub evaluateFile( tcFile ) cCMD = "DO " & chr(34) & cEXETool & chr(34) & " WITH '" & tcFile & "','0','0','0'," & cFlagDontShowErrMsg & "," & cFlagGenerateLog End If If cFlagJustShowCall = "1" Then - MsgBox cCMD, 0, "PARAMETROS ENVIADOS" + MsgBox cCMD, 64, "PARAMETROS ENVIADOS" Else oVFP9.DoCmd( cCMD ) nExitCode = oVFP9.Eval("_SCREEN.ExitCode") diff --git a/Normalize_FileNames.vbs b/Normalize_FileNames.vbs index e06849f..ab244bb 100644 --- a/Normalize_FileNames.vbs +++ b/Normalize_FileNames.vbs @@ -17,7 +17,7 @@ Set oVFP9 = CreateObject("VisualFoxPro.Application.9") filename_caps_log = Replace(WScript.ScriptFullName, WScript.ScriptName, "filename_caps.log") nExitCode = 0 '--------------------------------------------------------------------------------------------------- -nDebug = 5 'Cumulative Flags: 0=OFF, 1=Create filename_caps LOG, 2=Only show script calls, 4=Don't show filename_caps error modal messages +nDebug = 13 'Cumulative Flags: 0=OFF, 1=Create filename_caps LOG, 2=Only show script calls, 4=Don't show filename_caps error modal messages, 8=Show end of process message '--------------------------------------------------------------------------------------------------- If WScript.Arguments.Count = 0 Then @@ -32,6 +32,9 @@ If WScript.Arguments.Count = 0 Then If GetBit(nDebug, 3) Then cErrMsg = cErrMsg & Chr(13) & "Bit 2 ON: (4) Don't show filename_caps error modal messages" End If + If GetBit(nDebug, 4) Then + cErrMsg = cErrMsg & Chr(13) & "Bit 3 ON: (8) Show End of Process message" + End If MsgBox cErrMsg, 64, "No parameters - Debug Status" Else cEXETool = Replace(WScript.ScriptFullName, WScript.ScriptName, "filename_caps.exe") @@ -42,6 +45,10 @@ Else For i = 0 To WScript.Arguments.Count-1 scanDirs( WScript.Arguments(i) ) Next + + If GetBit(nDebug, 4) Then + MsgBox "Fin del Proceso!", 64, WScript.ScriptName + End If End If WScript.Quit(nExitCode) @@ -66,16 +73,17 @@ End Sub Private Sub evaluateFile( tcFile ) - cFlagGenerateLog = "'0'" - cFlagDontShowErrMsg = "'0'" - cFlagShowCall = "'0'" - If GetBit(nDebug,1) Then + cFlagGenerateLog = "'0'" + cFlagDontShowErrMsg = "'0'" + cFlagShowCall = "'0'" + + If GetBit(nDebug, 1) Then cFlagGenerateLog = "'1'" End If - If GetBit(nDebug,2) Then + If GetBit(nDebug, 2) Then cFlagJustShowCall = "1" End If - If GetBit(nDebug,3) Then + If GetBit(nDebug, 3) Then cFlagDontShowErrMsg = "'1'" End If diff --git a/TESTS/DATOS_READONLY/FB2P_FREE.DB2 b/TESTS/DATOS_READONLY/FB2P_FREE.DB2 index 9d2fc7f..8348722 100644 --- a/TESTS/DATOS_READONLY/FB2P_FREE.DB2 +++ b/TESTS/DATOS_READONLY/FB2P_FREE.DB2 @@ -2,11 +2,11 @@ * (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!! * (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!! *-------------------------------------------------------------------------------------------------------------------------------------------------------- -*< FOXBIN2PRG: Version="1.14" SourceFile="C:\DESA\FOXBIN2PRG\TESTS\DATOS_READONLY\FB2P_FREE.DBF" Generated="2013/12/11 21:33:10" /> (Para uso con Visual FoxPro 9.0) +*< FOXBIN2PRG: Version="1.18" SourceFile="C:\DESA\foxbin2prg\TESTS\DATOS_READONLY\fb2p_free.dbf" Generated="2014/01/08 00:49:45" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries) * - C:\DESA\FOXBIN2PRG\TESTS\DATOS_READONLY\FB2P_FREE.FPT + 12522013/12/11 diff --git a/TESTS/DATOS_READONLY/bmps/CarpetaAbierta.bmp b/TESTS/DATOS_READONLY/bmps/CarpetaAbierta.bmp new file mode 100644 index 0000000..d36d9ad Binary files /dev/null and b/TESTS/DATOS_READONLY/bmps/CarpetaAbierta.bmp differ diff --git a/TESTS/DATOS_READONLY/bmps/CarpetaCerrada.bmp b/TESTS/DATOS_READONLY/bmps/CarpetaCerrada.bmp new file mode 100644 index 0000000..0224b18 Binary files /dev/null and b/TESTS/DATOS_READONLY/bmps/CarpetaCerrada.bmp differ diff --git a/TESTS/DATOS_READONLY/bmps/SCCCheckout.bmp b/TESTS/DATOS_READONLY/bmps/SCCCheckout.bmp new file mode 100644 index 0000000..3d92f64 Binary files /dev/null and b/TESTS/DATOS_READONLY/bmps/SCCCheckout.bmp differ diff --git a/TESTS/DATOS_READONLY/bmps/container.ico b/TESTS/DATOS_READONLY/bmps/container.ico new file mode 100644 index 0000000..83fbd37 Binary files /dev/null and b/TESTS/DATOS_READONLY/bmps/container.ico differ diff --git a/TESTS/DATOS_READONLY/fb2p_test.pjm b/TESTS/DATOS_READONLY/fb2p_test.pjm new file mode 100644 index 0000000..f155aa8 --- /dev/null +++ b/TESTS/DATOS_READONLY/fb2p_test.pjm @@ -0,0 +1,40 @@ +Version= 1.20 +Author=El autor +Company=La companía +Address=La dirección +City=Ciudad +State=State +Zip=Cod.Post +Country=País +SaveCode=.T. +Debug=.T. +Encrypt=.T. +NoLogo=.F. +CommentStyle=1 +Comments=Comentarios +CompanyName=Company Name +FileDescription=File Description +LegalCopyright=Legal Copyright +LegalTrademarks=Legal Trademark +ProductName=Product Name +Major=1 +Minor=0 +Revision=5 +AutoIncrement=.T. +[OLEServers] +C:\DESA\test2\fb2p_test.exe,fb2p_test,fb2p_test,fb2p_test Type Library,0,{97DF3026-912D-4604-B06D-60EF52C19B70} +cl_form,c:\desa\test2\fb2p_test.vcx,fb2p_test.cl_form,0,mi OLE server DLL,,1,{E888ECF1-F911-4F1B-A5DC-8739057087B1},{63194B79-0E07-44E6-9FC3-2EBCAA27787A} +cl_imagen,c:\desa\test2\fb2p_test.vcx,fb2p_test.cl_imagen,0,otro ole,,1,{BA0AD3CE-E874-402F-A835-85AE1CDCE515},{6B05B62A-2C51-4C45-921F-E09FA0E66CF5} +[OLEServersEnd] +[ProjectFiles] + 0,i,bmps\container.ico,.F.,.F.,0,,, +1132700355,V,fb2p_test.vcx,.F.,.T.,1252,,,clase descrip +1132700357,K,fb2p_frm_1.scx,.F.,.F.,1252,,, +1132700358,K,fb2p_frm_2.scx,.F.,.F.,1252,,, +1132700438,x,bmps\sobrepostal.bmp,.F.,.F.,0,,, +1132700438,x,bmps\scccheckout.bmp,.F.,.F.,0,,, +1132700438,x,bmps\carpetaabierta.bmp,.F.,.F.,0,,, +1132700438,x,bmps\carpetacerrada.bmp,.F.,.F.,0,,, +1132700438,x,bmps\treeview.bmp,.F.,.F.,0,,, +1132700450,T,config\config.fpw,.T.,.F.,1252,,, +[EOF] \ No newline at end of file diff --git a/TESTS/DATOS_READONLY/fb2p_test.pjt b/TESTS/DATOS_READONLY/fb2p_test.pjt index bedf8f9..b44124a 100644 Binary files a/TESTS/DATOS_READONLY/fb2p_test.pjt and b/TESTS/DATOS_READONLY/fb2p_test.pjt differ diff --git a/TESTS/DATOS_READONLY/fb2p_test.pjx b/TESTS/DATOS_READONLY/fb2p_test.pjx index bcbff62..baaabd2 100644 Binary files a/TESTS/DATOS_READONLY/fb2p_test.pjx and b/TESTS/DATOS_READONLY/fb2p_test.pjx differ diff --git a/TESTS/DATOS_READONLY/fb2p_test.vct b/TESTS/DATOS_READONLY/fb2p_test.vct index be2b80b..3b967f1 100644 Binary files a/TESTS/DATOS_READONLY/fb2p_test.vct and b/TESTS/DATOS_READONLY/fb2p_test.vct differ diff --git a/TESTS/DATOS_READONLY/fb2p_test.vcx b/TESTS/DATOS_READONLY/fb2p_test.vcx index f7b847c..e77f542 100644 Binary files a/TESTS/DATOS_READONLY/fb2p_test.vcx and b/TESTS/DATOS_READONLY/fb2p_test.vcx differ diff --git a/TESTS/ft__foxbin2prg__c_conversor_prg_a_mnx.prg b/TESTS/ft__foxbin2prg__c_conversor_prg_a_mnx.prg new file mode 100644 index 0000000..209ff67 --- /dev/null +++ b/TESTS/ft__foxbin2prg__c_conversor_prg_a_mnx.prg @@ -0,0 +1,387 @@ +DEFINE CLASS ft__foxbin2prg__c_conversor_prg_a_mnx AS FxuTestCase OF FxuTestCase.prg + + #IF .F. + LOCAL THIS AS ft__foxbin2prg__c_conversor_prg_a_mnx OF ft__foxbin2prg__c_conversor_prg_a_mnx.PRG + #ENDIF + + #DEFINE C_FB2P_VALUE_I '' + #DEFINE C_FB2P_VALUE_F '' + #DEFINE CR_LF CHR(13) + CHR(10) + #DEFINE C_CR CHR(13) + #DEFINE C_LF CHR(10) + #DEFINE C_TAB CHR(9) + #DEFINE C_PROC 'PROCEDURE' + #DEFINE C_ENDPROC 'ENDPROC' + #DEFINE C_TEXT 'TEXT' + #DEFINE C_ENDTEXT 'ENDTEXT' + #DEFINE C_IF_F '#IF .F.' + #DEFINE C_ENDIF '#ENDIF' + #DEFINE C_DEFINE_CLASS 'DEFINE CLASS' + #DEFINE C_ENDDEFINE_CLASS 'ENDDEFINE' + icObj = NULL + + + ******************************************************************************************************************************************* + FUNCTION SETUP + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + *LOCAL loObj AS c_conversor_base OF "FOXBIN2PRG.PRG" + SET PROCEDURE TO 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + oFXU_LIB = CREATEOBJECT('CL_FXU_CONFIG') + oFXU_LIB.setup_comun() + + *THIS.icObj = NEWOBJECT("c_conversor_base", "FOXBIN2PRG.PRG") + *loObj = THIS.icObj + *loObj.l_Test = .F. + + ENDFUNC + + + ******************************************************************************************************************************************* + FUNCTION TearDown + #IF .F. + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + #ENDIF + THIS.icObj = NULL + + IF VARTYPE(oFXU_LIB) = "O" + oFXU_LIB.teardown_comun() + oFXU_LIB = NULL + ENDIF + RELEASE PROCEDURE 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + + ENDFUNC + + + ******************************************************************************************************************************************* + FUNCTION Evaluate_results + LPARAMETERS toEx AS EXCEPTION, tnCodError_Esperado + + #IF .F. + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + #ENDIF + + IF PCOUNT() = 0 + THIS.messageout( "* Support method, not a valid test." ) + RETURN .T. + ENDIF + + + IF ISNULL(toEx) + *-- Validaciones en método + ELSE + *-- Evaluación de errores + THIS.messageout( "Error " + TRANSFORM(toEx.ERRORNO) + ', ' + TRANSFORM(toEx.MESSAGE) ) + THIS.messageout( toEx.PROCEDURE + ', ' + TRANSFORM(toEx.LINENO) ) + IF NOT INLIST( toEx.ERRORNO, 1098, 2071 ) && Error del usuario (ERROR y THROW) + THIS.messageout( TRANSFORM(toEx.LINECONTENTS) ) + ENDIF + + THIS.assertequals( tnCodError_Esperado, toEx.ERRORNO, 'Error' ) + ENDIF + + THIS.messageout( '' ) + THIS.messageout( REPLICATE('*',80) ) + ENDFUNC + + + ******************************************************************************************************************************************* + FUNCTION Deberia_Ejecutar_FOXBIN2PRG_ParaElArchivo_MENU1_MN2_YRegenerarEl_MNX_ConTodosSusObjetos + LOCAL lnCodError, lnCodError_Esperado ; + , lc_File, lc_InputFile, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado, loReg, lcTipoBinario ; + , laCampos_IN(1,18), laCampos_OUT(1,18), lnFields_OUT, lnFields_IN, I, X, lcMN2, lcMN3, lnLenHeader ; + , loModulo AS CL_CLASE OF "FOXBIN2PRG.PRG" ; + , loCnv AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ; + , loEx AS EXCEPTION + #IF .F. + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + #ENDIF + + TRY + loEx = NULL + loCnv = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG") + + + *-- DATOS DE ENTRADA + STORE 0 TO lnCodError + lc_File = 'MENU1.MNX' + lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' ) + lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' ) + lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) ) + + oFXU_LIB.copiarArchivosParaTest( FORCEEXT(lc_File,'*') ) + + *-- Genero el DC2 + loCnv.Ejecutar( FORCEEXT(lc_File,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + *-- Regenero el DBC + loCnv.Ejecutar( FORCEEXT(lc_File,'MN2'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + *-- Renombro el DC2 a DC3 (ORIGINAL) + RENAME (FORCEEXT(lc_OutputFile,'MN2')) TO (FORCEEXT(lc_OutputFile,'MN3')) + *-- Genero el DC2 desde el DBC regenerado + loCnv.Ejecutar( FORCEEXT(lc_File,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + *-- Comparo los MN2 y MN3 + lnLenHeader = LEN( loCnv.get_PROGRAM_HEADER() ) + lcMN2 = SUBSTR( FILETOSTR( FORCEEXT(lc_File,'MN2') ), lnLenHeader ) + lcMN3 = SUBSTR( FILETOSTR( FORCEEXT(lc_File,'MN3') ), lnLenHeader ) + + + *-- Visualización de valores + THIS.messageout( 'Bytes MN3: ' + TRANSFORM(LEN(lcMN3)) ) + THIS.messageout( 'Bytes MN2: ' + TRANSFORM(LEN(lcMN2)) ) + + + *-- Evaluación de valores + this.assertequals( lcMN2, lcMN3, '[Comparación MN2 y MN3]' ) + + + CATCH TO loEx + THIS.Evaluate_results( loEx, lnCodError_Esperado ) + + FINALLY + USE IN (SELECT("ARCHIVOBIN_IN")) + USE IN (SELECT("TABLABIN")) + ENDTRY + + ENDFUNC + + + ******************************************************************************************************************************************* + FUNCTION Deberia_Ejecutar_FOXBIN2PRG_ParaElArchivo_MENU2_MN2_YRegenerarEl_MNX_ConTodosSusObjetos + LOCAL lnCodError, lnCodError_Esperado ; + , lc_File, lc_InputFile, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado, loReg, lcTipoBinario ; + , laCampos_IN(1,18), laCampos_OUT(1,18), lnFields_OUT, lnFields_IN, I, X, lcMN2, lcMN3, lnLenHeader ; + , loModulo AS CL_CLASE OF "FOXBIN2PRG.PRG" ; + , loCnv AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ; + , loEx AS EXCEPTION + #IF .F. + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + #ENDIF + + TRY + loEx = NULL + loCnv = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG") + + + *-- DATOS DE ENTRADA + STORE 0 TO lnCodError + lc_File = 'MENU2.MNX' + lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' ) + lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' ) + lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) ) + + oFXU_LIB.copiarArchivosParaTest( FORCEEXT(lc_File,'*') ) + + *-- Genero el DC2 + loCnv.Ejecutar( FORCEEXT(lc_File,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + *-- Regenero el DBC + loCnv.Ejecutar( FORCEEXT(lc_File,'MN2'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + *-- Renombro el DC2 a DC3 (ORIGINAL) + RENAME (FORCEEXT(lc_OutputFile,'MN2')) TO (FORCEEXT(lc_OutputFile,'MN3')) + *-- Genero el DC2 desde el DBC regenerado + loCnv.Ejecutar( FORCEEXT(lc_File,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + *-- Comparo los MN2 y MN3 + lnLenHeader = LEN( loCnv.get_PROGRAM_HEADER() ) + lcMN2 = SUBSTR( FILETOSTR( FORCEEXT(lc_File,'MN2') ), lnLenHeader ) + lcMN3 = SUBSTR( FILETOSTR( FORCEEXT(lc_File,'MN3') ), lnLenHeader ) + + + *-- Visualización de valores + THIS.messageout( 'Bytes MN3: ' + TRANSFORM(LEN(lcMN3)) ) + THIS.messageout( 'Bytes MN2: ' + TRANSFORM(LEN(lcMN2)) ) + + + *-- Evaluación de valores + this.assertequals( lcMN2, lcMN3, '[Comparación MN2 y MN3]' ) + + + CATCH TO loEx + THIS.Evaluate_results( loEx, lnCodError_Esperado ) + + FINALLY + USE IN (SELECT("ARCHIVOBIN_IN")) + USE IN (SELECT("TABLABIN")) + ENDTRY + + ENDFUNC + + + ******************************************************************************************************************************************* + FUNCTION Deberia_Ejecutar_FOXBIN2PRG_ParaElArchivo_MENU3_MN2_YRegenerarEl_MNX_ConTodosSusObjetos + LOCAL lnCodError, lnCodError_Esperado ; + , lc_File, lc_InputFile, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado, loReg, lcTipoBinario ; + , laCampos_IN(1,18), laCampos_OUT(1,18), lnFields_OUT, lnFields_IN, I, X, lcMN2, lcMN3, lnLenHeader ; + , loModulo AS CL_CLASE OF "FOXBIN2PRG.PRG" ; + , loCnv AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ; + , loEx AS EXCEPTION + #IF .F. + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + #ENDIF + + TRY + loEx = NULL + loCnv = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG") + + + *-- DATOS DE ENTRADA + STORE 0 TO lnCodError + lc_File = 'MENU3.MNX' + lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' ) + lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' ) + lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) ) + + oFXU_LIB.copiarArchivosParaTest( FORCEEXT(lc_File,'*') ) + + *-- Genero el DC2 + loCnv.Ejecutar( FORCEEXT(lc_File,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + *-- Regenero el DBC + loCnv.Ejecutar( FORCEEXT(lc_File,'MN2'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + *-- Renombro el DC2 a DC3 (ORIGINAL) + RENAME (FORCEEXT(lc_OutputFile,'MN2')) TO (FORCEEXT(lc_OutputFile,'MN3')) + *-- Genero el DC2 desde el DBC regenerado + loCnv.Ejecutar( FORCEEXT(lc_File,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + *-- Comparo los MN2 y MN3 + lnLenHeader = LEN( loCnv.get_PROGRAM_HEADER() ) + lcMN2 = SUBSTR( FILETOSTR( FORCEEXT(lc_File,'MN2') ), lnLenHeader ) + lcMN3 = SUBSTR( FILETOSTR( FORCEEXT(lc_File,'MN3') ), lnLenHeader ) + + + *-- Visualización de valores + THIS.messageout( 'Bytes MN3: ' + TRANSFORM(LEN(lcMN3)) ) + THIS.messageout( 'Bytes MN2: ' + TRANSFORM(LEN(lcMN2)) ) + + + *-- Evaluación de valores + this.assertequals( lcMN2, lcMN3, '[Comparación MN2 y MN3]' ) + + + CATCH TO loEx + THIS.Evaluate_results( loEx, lnCodError_Esperado ) + + FINALLY + USE IN (SELECT("ARCHIVOBIN_IN")) + USE IN (SELECT("TABLABIN")) + ENDTRY + + ENDFUNC + + + ******************************************************************************************************************************************* + FUNCTION Deberia_Ejecutar_FOXBIN2PRG_ParaElArchivo_MENU_SHORTCUT_MN2_YRegenerarEl_MNX_ConTodosSusObjetos + LOCAL lnCodError, lnCodError_Esperado ; + , lc_File, lc_InputFile, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado, loReg, lcTipoBinario ; + , laCampos_IN(1,18), laCampos_OUT(1,18), lnFields_OUT, lnFields_IN, I, X, lcMN2, lcMN3, lnLenHeader ; + , loModulo AS CL_CLASE OF "FOXBIN2PRG.PRG" ; + , loCnv AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ; + , loEx AS EXCEPTION + #IF .F. + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + #ENDIF + + TRY + loEx = NULL + loCnv = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG") + + + *-- DATOS DE ENTRADA + STORE 0 TO lnCodError + lc_File = 'MENU_SHORTCUT.MNX' + lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' ) + lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' ) + lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) ) + + oFXU_LIB.copiarArchivosParaTest( FORCEEXT(lc_File,'*') ) + + *-- Genero el DC2 + loCnv.Ejecutar( FORCEEXT(lc_File,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + *-- Regenero el DBC + loCnv.Ejecutar( FORCEEXT(lc_File,'MN2'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + *-- Renombro el DC2 a DC3 (ORIGINAL) + RENAME (FORCEEXT(lc_OutputFile,'MN2')) TO (FORCEEXT(lc_OutputFile,'MN3')) + *-- Genero el DC2 desde el DBC regenerado + loCnv.Ejecutar( FORCEEXT(lc_File,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + *-- Comparo los MN2 y MN3 + lnLenHeader = LEN( loCnv.get_PROGRAM_HEADER() ) + lcMN2 = SUBSTR( FILETOSTR( FORCEEXT(lc_File,'MN2') ), lnLenHeader ) + lcMN3 = SUBSTR( FILETOSTR( FORCEEXT(lc_File,'MN3') ), lnLenHeader ) + + + *-- Visualización de valores + THIS.messageout( 'Bytes MN3: ' + TRANSFORM(LEN(lcMN3)) ) + THIS.messageout( 'Bytes MN2: ' + TRANSFORM(LEN(lcMN2)) ) + + + *-- Evaluación de valores + this.assertequals( lcMN2, lcMN3, '[Comparación MN2 y MN3]' ) + + + CATCH TO loEx + THIS.Evaluate_results( loEx, lnCodError_Esperado ) + + FINALLY + USE IN (SELECT("ARCHIVOBIN_IN")) + USE IN (SELECT("TABLABIN")) + ENDTRY + + ENDFUNC + + + ******************************************************************************************************************************************* + FUNCTION Deberia_Ejecutar_FOXBIN2PRG_ParaElArchivo_MENU_SHORTCUT2_MN2_YRegenerarEl_MNX_ConTodosSusObjetos + LOCAL lnCodError, lnCodError_Esperado ; + , lc_File, lc_InputFile, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado, loReg, lcTipoBinario ; + , laCampos_IN(1,18), laCampos_OUT(1,18), lnFields_OUT, lnFields_IN, I, X, lcMN2, lcMN3, lnLenHeader ; + , loModulo AS CL_CLASE OF "FOXBIN2PRG.PRG" ; + , loCnv AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ; + , loEx AS EXCEPTION + #IF .F. + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + #ENDIF + + TRY + loEx = NULL + loCnv = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG") + + + *-- DATOS DE ENTRADA + STORE 0 TO lnCodError + lc_File = 'MENU_SHORTCUT2.MNX' + lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' ) + lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' ) + lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) ) + + oFXU_LIB.copiarArchivosParaTest( FORCEEXT(lc_File,'*') ) + + *-- Genero el DC2 + loCnv.Ejecutar( FORCEEXT(lc_File,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + *-- Regenero el DBC + loCnv.Ejecutar( FORCEEXT(lc_File,'MN2'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + *-- Renombro el DC2 a DC3 (ORIGINAL) + RENAME (FORCEEXT(lc_OutputFile,'MN2')) TO (FORCEEXT(lc_OutputFile,'MN3')) + *-- Genero el DC2 desde el DBC regenerado + loCnv.Ejecutar( FORCEEXT(lc_File,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + *-- Comparo los MN2 y MN3 + lnLenHeader = LEN( loCnv.get_PROGRAM_HEADER() ) + lcMN2 = SUBSTR( FILETOSTR( FORCEEXT(lc_File,'MN2') ), lnLenHeader ) + lcMN3 = SUBSTR( FILETOSTR( FORCEEXT(lc_File,'MN3') ), lnLenHeader ) + + + *-- Visualización de valores + THIS.messageout( 'Bytes MN3: ' + TRANSFORM(LEN(lcMN3)) ) + THIS.messageout( 'Bytes MN2: ' + TRANSFORM(LEN(lcMN2)) ) + + + *-- Evaluación de valores + this.assertequals( lcMN2, lcMN3, '[Comparación MN2 y MN3]' ) + + + CATCH TO loEx + THIS.Evaluate_results( loEx, lnCodError_Esperado ) + + FINALLY + USE IN (SELECT("ARCHIVOBIN_IN")) + USE IN (SELECT("TABLABIN")) + ENDTRY + + ENDFUNC + + +ENDDEFINE diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2 index d218fe5..ddbac99 100644 --- a/foxbin2prg.pj2 +++ b/foxbin2prg.pj2 @@ -2,7 +2,7 @@ * (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!! * (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!! *-------------------------------------------------------------------------------------------------------------------------------------------------------- -*< FOXBIN2PRG: Version="1.18" SourceFile="C:\DESA\foxbin2prg\foxbin2prg.pjx" Generated="2014/01/07 00:46:40" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries) +*< FOXBIN2PRG: Version="1.18" SourceFile="C:\DESA\foxbin2prg\foxbin2prg.pjx" Generated="2014/01/08 00:50:45" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries) * LPARAMETERS tcDir @@ -10,7 +10,7 @@ lcCurdir = SYS(5)+CURDIR() CD ( EVL( tcDir, JUSTPATH( SYS(16) ) ) ) * -_Autor = "Fernando D. Bozzo" +_Author = "Fernando D. Bozzo" _Company = "" _Address = "" _City = "Coslada" @@ -26,7 +26,7 @@ _LegalTrademark = "Open Source" _ProductName = " FOXBIN2PRG" _MajorVer = "1" _MinorVer = "18" -_Revision = " 177" +_Revision = " 183" _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="1143388948" ID="1130644423" ObjRev="544" /> + .ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="1143473629" ID="1130644423" ObjRev="544" /> * .ITEM('__newproject.f2b').Remove() diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index fe04924..bdadb92 100644 Binary files a/foxbin2prg.pjt and b/foxbin2prg.pjt differ diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx index 09c4ecc..fde8842 100644 Binary files a/foxbin2prg.pjx and b/foxbin2prg.pjx differ diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 955b108..0f9e0d5 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -72,6 +72,7 @@ * 14/12/2013 Fidel Charny REPORTE BUG scx v1.13: La regeneración de los forms (SCX) no regenera el último registro COMMENT (arreglado en v.1.14) * 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) +* 07/01/2014 F.D.Bozzo BUG vcx/scx v1.18: Los *métodos deben ir siempre al final en el Reserved3, si no los eventos ACCESS no se disparan * * *--------------------------------------------------------------------------------------------------- @@ -439,7 +440,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM DO CASE CASE INLIST( lcExt_1, THIS.c_PJ2, THIS.c_VC2, THIS.c_SC2, THIS.c_FR2 ; - , THIS.c_LB2, THIS.c_DB2, THIS.c_DC2, THIS.c_MN2 ) + , THIS.c_LB2, THIS.c_DB2, THIS.c_DC2, THIS.c_MN2, 'PJM' ) *-- Extensiones TEXTO CASE lcExt_1 = 'DBF' @@ -687,14 +688,23 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' loFSO = THIS.o_FSO .c_InputFile = FULLPATH( tc_InputFile ) + IF ADIR( laDirFile, .c_InputFile, '', 1 ) = 0 ERROR 'No se encontró el archivo [' + .c_InputFile + ']' ENDIF + .c_InputFile = loFSO.GetAbsolutePathName( FORCEPATH( laDirFile(1,1), JUSTPATH(.c_InputFile) ) ) + IF NOT EMPTY(tcOriginalFileName) tcOriginalFileName = loFSO.GetAbsolutePathName( tcOriginalFileName ) ENDIF + .c_OriginalFileName = EVL( tcOriginalFileName, .c_InputFile ) + + IF UPPER( JUSTEXT(.c_OriginalFileName) ) = 'PJM' + .c_OriginalFileName = FORCEEXT(.c_OriginalFileName,'pjx') + ENDIF + THIS.writeLog( 'c_InputFile=' + .c_InputFile ) .o_Conversor = NULL @@ -724,6 +734,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .c_OutputFile = FORCEEXT( .c_InputFile, .c_PJ2 ) .o_Conversor = CREATEOBJECT( 'c_conversor_pjx_a_prg' ) + CASE lcExtension = 'PJM' + .c_OutputFile = FORCEEXT( .c_InputFile, .c_PJ2 ) + .o_Conversor = CREATEOBJECT( 'c_conversor_pjm_a_prg' ) + CASE lcExtension = 'FRX' .c_OutputFile = FORCEEXT( .c_InputFile, .c_FR2 ) .o_Conversor = CREATEOBJECT( 'c_conversor_frx_a_prg' ) @@ -791,7 +805,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .o_Conversor.l_MethodSort_Enabled = .l_MethodSort_Enabled .o_Conversor.l_PropSort_Enabled = .l_PropSort_Enabled .o_Conversor.l_ReportSort_Enabled = .l_ReportSort_Enabled - .o_Conversor.c_OriginalFileName = tcOriginalFileName + .o_Conversor.c_OriginalFileName = .c_OriginalFileName .o_Conversor.c_Foxbin2prg_FullPath = .c_Foxbin2prg_FullPath *-- .o_Conversor.Convertir( @toModulo, .F., THIS ) @@ -2010,6 +2024,8 @@ DEFINE CLASS c_conversor_base AS SESSION lcPropName = 'A590' + lcPropName CASE lcPropName == 'Dockable' lcPropName = 'A595' + lcPropName + CASE lcPropName == '_memberdata' + lcPropName = 'A995' + lcPropName CASE lcPropName == 'Name' lnPropType = 1 && System "Name" property lcPropName = 'A999' + lcPropName @@ -2041,7 +2057,7 @@ DEFINE CLASS c_conversor_base AS SESSION EXTERNAL ARRAY taPropsAndValues TRY - LOCAL I, X, lnArrayCols, laPropsAndValues(1,2), lcPropName + LOCAL I, X, lnArrayCols, laPropsAndValues(1,2), lcPropName, lcSortedMemo, lcMethods lnArrayCols = ALEN( taPropsAndValues, 2 ) DIMENSION laPropsAndValues( tnPropsAndValues_Count, lnArrayCols ) ACOPY( taPropsAndValues, laPropsAndValues ) @@ -2052,11 +2068,6 @@ DEFINE CLASS c_conversor_base AS SESSION * - A las que no tienen '.' les pongo 'A' por delante, y al resto 'B' por delante para que queden al final FOR I = 1 TO m.tnPropsAndValues_Count IF '.' $ laPropsAndValues(I,1) - *IF m.tnSortType = 2 AND JUSTEXT( laPropsAndValues(I,1) ) == 'Name' - * laPropsAndValues(I,1) = JUSTSTEM( laPropsAndValues(I,1) ) + '.' + CHR(255) + 'Name' - *ENDIF - - *laPropsAndValues(I,1) = 'B' + laPropsAndValues(I,1) IF m.tnSortType = 2 laPropsAndValues(I,1) = 'B' + JUSTSTEM(laPropsAndValues(I,1)) + '.' ; + .sortPropsAndValues_SetAndGetSCXPropNames( 'SETNAME', JUSTEXT(laPropsAndValues(I,1)) ) @@ -2064,11 +2075,6 @@ DEFINE CLASS c_conversor_base AS SESSION laPropsAndValues(I,1) = 'B' + laPropsAndValues(I,1) ENDIF ELSE - *IF m.tnSortType = 2 AND laPropsAndValues(I,1) == 'Name' - * laPropsAndValues(I,1) = CHR(255) + 'Name' - *ENDIF - - *laPropsAndValues(I,1) = 'A' + laPropsAndValues(I,1) IF m.tnSortType = 2 laPropsAndValues(I,1) = .sortPropsAndValues_SetAndGetSCXPropNames( 'SETNAME', laPropsAndValues(I,1) ) ELSE @@ -2083,8 +2089,6 @@ DEFINE CLASS c_conversor_base AS SESSION FOR I = 1 TO m.tnPropsAndValues_Count - *taPropsAndValues(I,1) = SUBSTR( laPropsAndValues(I,1), 2 ) && Quitar el carácter agregado - *-- Quitar caracteres agregados antes del SORT IF '.' $ laPropsAndValues(I,1) IF m.tnSortType = 2 @@ -2106,15 +2110,6 @@ DEFINE CLASS c_conversor_base AS SESSION IF lnArrayCols >= 3 taPropsAndValues(I,3) = laPropsAndValues(I,3) ENDIF - - *DO CASE - *CASE m.tnSortType <> 2 - * *-- Saltear - *CASE taPropsAndValues(I,1) == CHR(255) + 'Name' - * taPropsAndValues(I,1) = 'Name' - *CASE JUSTEXT( taPropsAndValues(I,1) ) == CHR(255) + 'Name' - * taPropsAndValues(I,1) = JUSTSTEM( taPropsAndValues(I,1) ) + '.Name' - *ENDCASE ENDFOR ELSE && m.tnSortType = 0 @@ -2156,20 +2151,6 @@ DEFINE CLASS c_conversor_base AS SESSION ENDIF ENDWITH && THIS AS C_CONVERSOR_BASE OF 'FOXBIN2PRG.PRG' - *-- VER ESTO SI HACE FALTA, SOBRE LO DE PONER LOS METODOS AL FINAL Y ADAPTAR - *-- Agregar propiedades primero - *FOR I = 1 TO m.tnPropsAndValues_Count - * *-- SI HACE FALTA QUE LOS MÉTODOS ESTÉN AL FINAL, DESCOMENTAR ESTO (Y EL DE MÁS ARRIBA) - * *IF LEFT(taPropsAndValues(I), 1) == '*' && Only Reserved3 have this - * * lcMethods = m.lcMethods + m.taPropsAndValues(I,1) + ' = ' + m.taPropsAndValues(I,2) + CR_LF - * * LOOP - * *ENDIF - - * tcSortedMemo = m.tcSortedMemo + m.laPropsAndValues(I,1) + ' = ' + m.laPropsAndValues(I,2) + CR_LF - *ENDFOR - - *-- Agregar métodos al final - *tcSortedMemo = m.tcSortedMemo + m.lcMethods CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -2529,7 +2510,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base , LOCAL ; , KEY ) ; VALUES ; - ( UPPER(THIS.c_OutputFile) ; + ( UPPER(EVL(THIS.c_OriginalFileName,THIS.c_OutputFile)) ; , 'H' ; , 0 ; , '' + CHR(0) ; @@ -3045,6 +3026,10 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ******************************************************************************************************************* PROCEDURE defined_PAM2Memo + *-------------------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * toClase (!@ IN ) Objeto de la Clase + *-------------------------------------------------------------------------------------------------------------- LPARAMETERS toClase RETURN toClase._Defined_PAM ENDPROC @@ -3409,6 +3394,18 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ******************************************************************************************************************* PROCEDURE analizarBloque_DEFINED_PAM + *-------------------------------------------------------------------------------------------------------------- + * 07/01/2014 FDBOZZO Los *métodos deben ir siempre al final, si no los eventos ACCESS no se ejecutan! + *-------------------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * toClase (!@ IN ) Objeto de la Clase + * tcLine (!@ IN ) Línea de datos en evaluación + * taCodeLines (!@ IN ) El array con las líneas del código de texto donde buscar + * tnCodeLines (!@ IN ) Cantidad de líneas de código + * I (!@ IN ) Número de línea en evaluación + *-------------------------------------------------------------------------------------------------------------- + LPARAMETERS toClase, tcLine, taCodeLines, tnCodeLines, I + *-- ESTRUCTURA A ANALIZAR: * *m: *metodovacio_con_comentarios && Este método no tiene código, pero tiene comentarios. A ver que pasa! @@ -3419,18 +3416,17 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base *a: ^array_2_d[1,2] && Array una dimension (1,2) *p: _memberdata && XML Metadata for customizable properties * - LPARAMETERS toClase, tcLine, taCodeLines, tnCodeLines, I #IF .F. LOCAL toClase AS CL_CLASE OF 'FOXBIN2PRG.PRG' #ENDIF TRY - LOCAL llBloqueEncontrado, lcDefinedPAM, lnPos, lnPos2, lcPAM_Name + LOCAL llBloqueEncontrado, lcDefinedPAM, lnPos, lnPos2, lcPAM_Name, lcItem, lcMethods IF LEFT( tcLine, C_LEN_DEFINED_PAM_I) == C_DEFINED_PAM_I llBloqueEncontrado = .T. - lcDefinedPAM = '' + STORE '' TO lcDefinedPAM, lcItem, lcMethods WITH THIS FOR I = I + 1 TO tnCodeLines @@ -3448,21 +3444,32 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base IF lnPos2 > 0 *-- Con comentarios lcPAM_Name = RTRIM( SUBSTR( tcLine, lnPos+1, lnPos2 - lnPos - 1 ), 0, ' ', CHR(9) ) - lcDefinedPAM = lcDefinedPAM ; - + lcPAM_Name + ' ' + SUBSTR( tcLine, lnPos2 + 3 ) ; - + CR_LF + lcItem = lcPAM_Name + ' ' + SUBSTR( tcLine, lnPos2 + 3 ) + CR_LF + + *-- Separo propiedades y métodos + IF LEFT(lcItem,1) == '*' + lcMethods = lcMethods + lcItem + ELSE + lcDefinedPAM = lcDefinedPAM + lcItem + ENDIF ELSE *-- Sin comentarios lcPAM_Name = RTRIM( SUBSTR( tcLine, lnPos+1 ), 0, ' ', CHR(9) ) - lcDefinedPAM = lcDefinedPAM ; - + lcPAM_Name + IIF(ISALPHA(lcPAM_Name), '', ' ') ; - + CR_LF + lcItem = lcPAM_Name + IIF(ISALPHA(lcPAM_Name), '', ' ') + CR_LF + + *-- Separo propiedades y métodos + IF LEFT(lcItem,1) == '*' + lcMethods = lcMethods + lcItem + ELSE + lcDefinedPAM = lcDefinedPAM + lcItem + ENDIF ENDIF ENDCASE ENDFOR ENDWITH && THIS - toClase._Defined_PAM = lcDefinedPAM + *-- Junto propiedades y los métodos al final. + toClase._Defined_PAM = lcDefinedPAM + lcMethods I = I - 1 ENDIF @@ -6489,7 +6496,6 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base * 29/11/2013 FDBOZZO En un pageframe, si las props.nativas del mismo no están antes que las de * los objetos contenidos, causa un error. Se deben ordenar primero las * props.nativas (sin punto) y luego las de los objetos (con punto) - * *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcMemo (v! IN ) Contenido de un campo MEMO @@ -6577,7 +6583,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *-- Agregar propiedades primero FOR I = 1 TO m.tnPropsAndValues_Count *-- SI HACE FALTA QUE LOS MÉTODOS ESTÉN AL FINAL, DESCOMENTAR ESTO (Y EL DE MÁS ARRIBA) - *IF LEFT(taPropsAndValues(I), 1) == '*' && Only Reserved3 have this + *IF LEFT(taPropsAndValues(I,1), 1) == '*' && Only Reserved3 have this * lcMethods = m.lcMethods + m.taPropsAndValues(I,1) + ' = ' + m.taPropsAndValues(I,2) + CR_LF * LOOP *ENDIF @@ -8413,6 +8419,376 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg ENDDEFINE +DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg + #IF .F. + LOCAL THIS AS c_conversor_pjm_a_prg OF 'FOXBIN2PRG.PRG' + #ENDIF + + + PROCEDURE Convertir + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * toModulo (@! OUT) Objeto generado de clase CL_PROJECT con la información leida del texto + * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal + *--------------------------------------------------------------------------------------------------- + LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxbin2prg + #IF .F. + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF + DODEFAULT( @toModulo, @toEx ) + + TRY + LOCAL lnCodError, lcStr, lnPos, lnLen, lnServerCount, loReg, lcDevInfo, lnLen ; + , lcStrPJM, laLines(1), laProps(1) ; + , loEx AS EXCEPTION ; + , loProject AS CL_PROJECT OF 'FOXBIN2PRG.PRG' ; + , loServerHead AS CL_PROJ_SRV_HEAD OF 'FOXBIN2PRG.PRG' ; + , loServerData AS CL_PROJ_SRV_DATA OF 'FOXBIN2PRG.PRG' + + STORE NULL TO loProject, loReg, loServerHead, loServerData + lcStrPJM = FILETOSTR( THIS.c_InputFile ) + loServerHead = CREATEOBJECT('CL_PROJ_SRV_HEAD') + + + *-- Obtengo los archivos del proyecto + loProject = CREATEOBJECT('CL_PROJECT') + + WITH loProject AS CL_PROJECT OF 'FOXBIN2PRG.PRG' + *-- Proj.Info + ._CmntStyle = STREXTRACT( lcStrPJM, 'CommentStyle=', CR_LF ) + ._Debug = STREXTRACT( lcStrPJM, 'Debug=', CR_LF ) + ._Encrypted = STREXTRACT( lcStrPJM, 'Encrypt=', CR_LF ) + ._HomeDir = ['] + LOWER( JUSTPATH( SYS(5)+CURDIR() ) ) + ['] + ._ID = '' + ._NoLogo = STREXTRACT( lcStrPJM, 'NoLogo=', CR_LF ) + ._ObjRev = 0 + ._ProjectHookClass = '' + ._ProjectHookLibrary = '' + ._SaveCode = STREXTRACT( lcStrPJM, 'SaveCode=', CR_LF ) + ._ServerHead = NULL + ._ServerInfo = 'ServerData' + ._SourceFile = '' + ._TimeStamp = 0 + ._Version = STREXTRACT( lcStrPJM, 'Version=', CR_LF ) + + *-- Dev.info + ._Author = STREXTRACT( lcStrPJM, 'Author=', CR_LF ) + ._Company = STREXTRACT( lcStrPJM, 'Company=', CR_LF ) + ._Address = STREXTRACT( lcStrPJM, 'Address=', CR_LF ) + ._City = STREXTRACT( lcStrPJM, 'City=', CR_LF ) + ._State = STREXTRACT( lcStrPJM, 'State=', CR_LF ) + ._PostalCode = STREXTRACT( lcStrPJM, 'Zip=', CR_LF ) + ._Country = STREXTRACT( lcStrPJM, 'Country=', CR_LF ) + + ._Comments = STREXTRACT( lcStrPJM, 'Comments=', CR_LF ) + ._CompanyName = STREXTRACT( lcStrPJM, 'CompanyName=', CR_LF ) + ._FileDescription = STREXTRACT( lcStrPJM, 'FileDescription=', CR_LF ) + ._LegalCopyright = STREXTRACT( lcStrPJM, 'LegalCopyright=', CR_LF ) + ._LegalTrademark = STREXTRACT( lcStrPJM, 'LegalTrademarks=', CR_LF ) + ._ProductName = STREXTRACT( lcStrPJM, 'ProductName=', CR_LF ) + ._MajorVer = STREXTRACT( lcStrPJM, 'Major=', CR_LF ) + ._MinorVer = STREXTRACT( lcStrPJM, 'Minor=', CR_LF ) + ._Revision = STREXTRACT( lcStrPJM, 'Revision=', CR_LF ) + ._AutoIncrement = IIF( STREXTRACT( lcStrPJM, 'AutoIncrement=', CR_LF ) = '.T.', '1', '0' ) + ENDWITH + + 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) + ._InternalName = laProps(2) + ._ProjectName = laProps(3) + ._TypeLibDesc = laProps(4) + ._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) + ._Description = laProps(5) + ._HelpFile = laProps(6) + ._ServerClass = laProps(1) + ._ClassLibrary = laProps(2) + ._Instancing = laProps(7) + ._CLSID = laProps(8) + ._Interface = laProps(9) + ENDWITH + + loServerHead.add_Server( loServerData ) + loServerData = NULL + ENDIF + ENDFOR + + + + *-- Escaneo el proyecto + 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, 'TYPE', laProps(2) ) + ADDPROPERTY( loReg, 'NAME', laProps(3) ) + ADDPROPERTY( loReg, 'EXCLUDE', EVALUATE( laProps(4) ) ) + ADDPROPERTY( loReg, 'MAINPROG', laProps(5) ) + ADDPROPERTY( loReg, 'CPID', VAL( laProps(6) ) ) + ADDPROPERTY( loReg, 'COMMENTS', laProps(9) ) + ADDPROPERTY( loReg, 'TIMESTAMP', 0 ) + ADDPROPERTY( loReg, 'OBJREV', 0 ) + + *-- TIP: Si el "Name" del objeto está vacío, lo salteo + IF EMPTY(loReg.NAME) + LOOP + ENDIF + + TRY + DO CASE + CASE loReg.MAINPROG = '.T.' + loProject._MainProg = loReg.NAME + loProject.ADD( loReg, loReg.NAME ) + CASE loReg.TYPE == 'W' + * + CASE loReg.TYPE == 'i' + loProject._Icon = loReg.NAME + OTHERWISE + loProject.ADD( loReg, loReg.NAME ) + ENDCASE + + CATCH TO loEx WHEN loEx.ERRORNO = 2062 && The specified key already exists ==> loProject.ADD( loReg, loReg.NAME ) + *-- Saltear y no agregar el archivo duplicado / Bypass and not add the duplicated file + FINALLY + loReg = NULL + ENDTRY + ENDFOR + + + C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxbin2prg.get_PROGRAM_HEADER() + + + *-- Directorio de inicio + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + LPARAMETERS tcDir + <<>> + lcCurdir = SYS(5)+CURDIR() + CD ( EVL( tcDir, JUSTPATH( SYS(16) ) ) ) + <<>> + ENDTEXT + + + *-- Información del programa + C_FB2PRG_CODE = C_FB2PRG_CODE + loProject.getFormattedDeviceInfoText() + CR_LF + + + *-- Información de los Servidores definidos + IF NOT EMPTY(loProject._ServerInfo) + C_FB2PRG_CODE = C_FB2PRG_CODE + loServerHead.getFormattedServerText() + CR_LF + loServerHead = NULL + ENDIF + + + *-- Generación del proyecto + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <> + <<>>*<.HomeDir = <> /> + <<>> + FOR EACH loProject IN _VFP.Projects FOXOBJECT + <<>> loProject.Close() + ENDFOR + <<>> + STRTOFILE( '', '__newproject.f2b' ) + BUILD PROJECT <> FROM '__newproject.f2b' + ENDTEXT + + + *-- Abro el proyecto + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + FOR EACH loProject IN _VFP.Projects FOXOBJECT + <<>> loProject.Close() + ENDFOR + <<>> + MODIFY PROJECT '<>' NOWAIT NOSHOW NOPROJECTHOOK + <<>> + loProject = _VFP.Projects('<>') + <<>> + WITH loProject.FILES + ENDTEXT + + + *-- Definir archivos del proyecto y metadata: CPID, Timestamp, ID, etc. + loProject.KEYSORT = 2 + + FOR EACH loReg IN loProject &&FOXOBJECT + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> .ADD('<>') + ENDTEXT + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2+4+8 + <<>> <<'&'>><<'&'>> <> + Type="<>" + Cpid="<>" + Timestamp="<>" + ID="<>" + ObjRev="<>" + <> + ENDTEXT + ENDFOR + + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <> + <<>> + <<>> .ITEM('__newproject.f2b').Remove() + <<>> + ENDTEXT + + + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <> + ENDTEXT + + + *-- Agrego los comentarios + loProject.KEYSORT = 2 + + FOR EACH loReg IN loProject &&FOXOBJECT + IF NOT EMPTY(loReg.COMMENTS) + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> .ITEM(lcCurdir + '<>').Description = '<>' + ENDTEXT + ENDIF + ENDFOR + + + *-- Exclusiones + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <> + <<>> + <<>> <> + ENDTEXT + + loProject.KEYSORT = 2 + + FOR EACH loReg IN loProject &&FOXOBJECT + IF loReg.EXCLUDE + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> .ITEM(lcCurdir + '<>').Exclude = .T. + ENDTEXT + ENDIF + ENDFOR + + + *-- Tipos de archivos especiales + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <> + <<>> + <<>> <> + ENDTEXT + + loProject.KEYSORT = 2 + + FOR EACH loReg IN loProject &&FOXOBJECT + IF INLIST( UPPER( JUSTEXT( loReg.NAME ) ), 'H','FPW' ) + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> .ITEM(lcCurdir + '<>').Type = 'T' + ENDTEXT + ENDIF + ENDFOR + + + *-- ProjectHook, Debug, Encrypt, Build y cierre + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <> + <> + <<>> + <> loProject + <<>> <> + ENDTEXT + + IF NOT EMPTY(loProject._MainProg) + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> .SetMain(lcCurdir + '<>') + ENDTEXT + ENDIF + + IF NOT EMPTY(loProject._Icon) + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> .Icon = lcCurdir + '<>' + ENDTEXT + ENDIF + + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> .Debug = <> + <<>> .Encrypted = <> + <<>> *<.CmntStyle = <> /> + <<>> *<.NoLogo = <> /> + <<>> *<.SaveCode = <> /> + <<>> .ProjectHookLibrary = '<>' + <<>> .ProjectHookClass = '<>' + <<>> <> + <> + <<>> + ENDTEXT + + + *-- Build y cierre + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + _VFP.Projects('<>').Close() + ENDTEXT + + *-- Restauro Directorio de inicio + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + *ERASE '__newproject.f2b' + CD (lcCurdir) + RETURN + ENDTEXT + + + toFoxbin2prg.doBackup( .F., .T., '', '', '' ) + + *-- Genero el PJ2 + IF THIS.l_Test + toModulo = C_FB2PRG_CODE + ELSE + lnLen = LEN( toFoxbin2prg.get_PROGRAM_HEADER() ) + DO CASE + CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) + THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + CASE 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 + + + CATCH TO toEx + lnCodError = toEx.ERRORNO + + DO CASE + CASE lnCodError = 2062 && The specified key already exists ==> loProject.ADD( loReg, loReg.NAME ) + toEx.USERVALUE = 'Archivo duplicado: ' + loReg.NAME + ENDCASE + + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + FINALLY + *USE IN (SELECT("TABLABIN")) + + ENDTRY + + RETURN + ENDPROC +ENDDEFINE + + ******************************************************************************************************************* DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg #IF .F. @@ -8738,6 +9114,11 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg STORE 0 TO lnCodError USE (THIS.c_InputFile) SHARED NOUPDATE ALIAS TABLABIN + + *-- 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)) + ENDIF *-- Header C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxbin2prg.get_PROGRAM_HEADER() @@ -9294,7 +9675,7 @@ DEFINE CLASS CL_PROJECT AS CL_COL_BASE + [] ; + [] ; + [] ; - + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -9340,7 +9721,7 @@ DEFINE CLASS CL_PROJECT AS CL_COL_BASE _Version = '' *-- Dev.info - _Autor = '' + _Author = '' _Company = '' _Address = '' _City = '' @@ -9411,7 +9792,7 @@ DEFINE CLASS CL_PROJECT AS CL_COL_BASE TRY WITH THIS - ._Autor = .parseNullTerminatedValue( @tcDevInfo, 1, 45 ) + ._Author = .parseNullTerminatedValue( @tcDevInfo, 1, 45 ) ._Company = .parseNullTerminatedValue( @tcDevInfo, 47, 45 ) ._Address = .parseNullTerminatedValue( @tcDevInfo, 93, 45 ) ._City = .parseNullTerminatedValue( @tcDevInfo, 139, 20 ) @@ -9454,7 +9835,7 @@ DEFINE CLASS CL_PROJECT AS CL_COL_BASE ENDIF WITH THIS - tcDevInfo = STUFF( tcDevInfo, 1, LEN(._Autor), ._Autor) + tcDevInfo = STUFF( tcDevInfo, 1, LEN(._Author), ._Autor) tcDevInfo = STUFF( tcDevInfo, 47, LEN(._Company), ._Company) tcDevInfo = STUFF( tcDevInfo, 93, LEN(._Address), ._Address) tcDevInfo = STUFF( tcDevInfo, 139, LEN(._City), ._City) @@ -9499,7 +9880,7 @@ DEFINE CLASS CL_PROJECT AS CL_COL_BASE WITH THIS TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <> - _Autor = "<<._Autor>>" + _Author = "<<._Author>>" _Company = "<<._Company>>" _Address = "<<._Address>>" _City = "<<._City>>" @@ -13508,7 +13889,7 @@ DEFINE CLASS CL_DBF_INDEX AS CL_CUS_BASE TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> <<>> <> - <<>> <> + <<>> <> <<>> <> <<>> <> <<>> <> @@ -13593,15 +13974,15 @@ DEFINE CLASS CL_PROJ_SRV_HEAD AS CL_CUS_BASE ************************************************************************************************ PROCEDURE add_Server - LPARAMETERS toServer + LPARAMETERS toServerData #IF .F. - LOCAL toServer AS CL_PROJ_SRV_HEAD OF 'FOXBIN2PRG.PRG' + LOCAL toServerData AS CL_PROJ_SRV_DATA OF 'FOXBIN2PRG.PRG' #ENDIF THIS._ServerCount = THIS._ServerCount + 1 DIMENSION THIS._Servers( THIS._ServerCount ) - THIS._Servers( THIS._ServerCount ) = toServer + THIS._Servers( THIS._ServerCount ) = toServerData ENDPROC