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