diff --git a/TESTS/ut__foxbin2prg__c_conversor_bin_a_prg__indentMemo.prg b/TESTS/ut__foxbin2prg__c_conversor_bin_a_prg__indentMemo.prg
index ef8d859..0ef757f 100644
--- a/TESTS/ut__foxbin2prg__c_conversor_bin_a_prg__indentMemo.prg
+++ b/TESTS/ut__foxbin2prg__c_conversor_bin_a_prg__indentMemo.prg
@@ -18,18 +18,20 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_bin_a_prg__indentMemo AS FxuTestCase OF
#DEFINE C_ENDIF '#ENDIF'
#DEFINE C_DEFINE_CLASS 'DEFINE CLASS'
#DEFINE C_ENDDEFINE_CLASS 'ENDDEFINE'
- icObj = NULL
+ 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'
+ SET PROCEDURE TO 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG', 'foxbin2prg.prg'
oFXU_LIB = CREATEOBJECT('CL_FXU_CONFIG')
oFXU_LIB.setup_comun()
- THIS.icObj = NEWOBJECT("c_conversor_bin_a_prg", "FOXBIN2PRG.PRG")
+ THIS.icObj = CREATEOBJECT("c_conversor_bin_a_prg")
+ _SCREEN.AddProperty( "o_FoxBin2Prg_Lang", CREATEOBJECT("CL_LANG") )
+
loObj = THIS.icObj
loObj.l_Test = .T.
@@ -47,7 +49,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_bin_a_prg__indentMemo AS FxuTestCase OF
oFXU_LIB.teardown_comun()
oFXU_LIB = NULL
ENDIF
- RELEASE PROCEDURE 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
+ RELEASE PROCEDURE 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG', 'foxbin2prg.prg'
ENDFUNC
diff --git a/TESTS/ut__foxbin2prg__c_foxbin2prg__evaluateConfiguration.prg b/TESTS/ut__foxbin2prg__c_foxbin2prg__evaluateConfiguration.prg
index 045d44e..db3adf5 100644
--- a/TESTS/ut__foxbin2prg__c_foxbin2prg__evaluateConfiguration.prg
+++ b/TESTS/ut__foxbin2prg__c_foxbin2prg__evaluateConfiguration.prg
@@ -19,9 +19,7 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__evaluateConfiguration AS FxuTestCase
oFXU_LIB = CREATEOBJECT('CL_FXU_CONFIG')
oFXU_LIB.setup_comun()
- THIS.ioFB2P = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG")
- *loFB2P = THIS.ioFB2P
- *loFB2P.l_Test = .F.
+ THIS.ioFB2P = CREATEOBJECT("c_foxbin2prg")
ERASE ('TESTS\DATOS_TEST\foxbin2prg.cfg')
ERASE ('TESTS\DATOS_TEST\foxbin2prg.cfg.bak')
@@ -152,7 +150,8 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__evaluateConfiguration AS FxuTestCase
TRY
loEx = NULL
loFB2P_Esperado = CREATEOBJECT("EMPTY")
- THIS.ioFB2P = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG", "", FORCEPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest ) )
+ THIS.ioFB2P = NULL
+ THIS.ioFB2P = CREATEOBJECT("c_foxbin2prg", FORCEPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest ) )
loFB2P = THIS.ioFB2P
*loFB2P.c_Foxbin2prg_ConfigFile = FORCEPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest )
@@ -653,7 +652,8 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__evaluateConfiguration AS FxuTestCase
TRY
loEx = NULL
- THIS.ioFB2P = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG", "", FORCEPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest ) )
+ THIS.ioFB2P = NULL
+ THIS.ioFB2P = CREATEOBJECT("c_foxbin2prg", FORCEPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest ) )
loFB2P = THIS.ioFB2P
*loFB2P.c_Foxbin2prg_ConfigFile = FORCEPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest )
loFB2P.l_ShowErrors = .F.
diff --git a/foxbin2prg.prg b/foxbin2prg.prg
index e49a56c..6a93b0c 100644
--- a/foxbin2prg.prg
+++ b/foxbin2prg.prg
@@ -2610,7 +2610,8 @@ DEFINE CLASS c_foxbin2prg AS Session
lnFileCount = ADIR( laFiles, lcFileSpec, '', 1 )
FOR I = 1 TO lnFileCount
- lcFile = FORCEPATH( laFiles(I,1), JUSTPATH( lcFileSpec ) )
+ toModulo = NULL
+ lcFile = FORCEPATH( laFiles(I,1), JUSTPATH( lcFileSpec ) )
DO CASE
CASE UPPER( JUSTEXT( EVL(tc_InputFile,'') ) ) == 'PJX' AND LEFT(EVL(tcType,'0'),1) == '*'
@@ -2715,7 +2716,8 @@ DEFINE CLASS c_foxbin2prg AS Session
.get_FilesFromDirectory( tc_InputFile, @laFiles, @lnFileCount )
FOR I = 1 TO lnFileCount
- lcFile = laFiles(I)
+ toModulo = NULL
+ lcFile = laFiles(I)
IF NOT .hasSupport_Bin2Prg( JUSTEXT(lcFile) ) OR NOT ADIR(laDirInfo, lcFile) > 0 THEN
LOOP
@@ -2775,7 +2777,8 @@ DEFINE CLASS c_foxbin2prg AS Session
.get_FilesFromDirectory( tc_InputFile, @laFiles, @lnFileCount )
FOR I = 1 TO lnFileCount
- lcFile = laFiles(I)
+ toModulo = NULL
+ lcFile = laFiles(I)
IF NOT .hasSupport_Prg2Bin( JUSTEXT(lcFile) ) OR NOT ADIR(laDirInfo, lcFile) > 0 THEN
LOOP
@@ -2893,7 +2896,7 @@ DEFINE CLASS c_foxbin2prg AS Session
ERASE ( .c_LogFile )
ENDIF
- lnCodError = .convert( tc_InputFile, toModulo, toEx, .T., tcOriginalFileName )
+ lnCodError = .convert( tc_InputFile, @toModulo, @toEx, .T., tcOriginalFileName )
*.updateProgressbar( loLang.C_END_OF_PROCESS_LOC, 1, 1, 0 )
ENDIF
ENDIF
@@ -3011,10 +3014,7 @@ DEFINE CLASS c_foxbin2prg AS Session
SET NOTIFY &lc_OldSetNotify.
STORE NULL TO loFSO, loWSH
- RELEASE tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDebug, tcDontShowProgress ;
- , toModulo, toEx, tlRelanzarError, tcOriginalFileName, tcRecompile, tcNoTimestamps ;
- , tcBackupLevels, tcClearUniqueID, tcOptimizeByFilestamp ;
- , I, lcPath, lcFileSpec, lcFile, laFiles, lnFileCount, lcErrorInfo, lcErrorFile, loEx, loFSO
+ RELEASE I, lcPath, lcFileSpec, lcFile, laFiles, lnFileCount, lcErrorInfo, lcErrorFile, loEx, loFSO
ENDTRY
RETURN lnCodError
@@ -3044,7 +3044,8 @@ DEFINE CLASS c_foxbin2prg AS Session
LPARAMETERS tc_InputFile, tcRecompile, toModulo, toEx, tcOriginalFileName, tcLogFile, tcType
LOCAL lcFileSpec, lnFileCount, laFiles(1,1), lcFile, lnCodError, I, lnFileCount, llError, laDirInfo(1,5) ;
- , loLang AS CL_LANG OF 'FOXBIN2PRG.PRG'
+ , loLang AS CL_LANG OF 'FOXBIN2PRG.PRG' ;
+ , loEx as Exception
TRY
WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
@@ -3124,6 +3125,13 @@ DEFINE CLASS c_foxbin2prg AS Session
ENDIF
ENDFOR
ENDWITH
+
+ CATCH TO loEx
+ THROW
+
+ FINALLY
+ STORE NULL TO loLang
+ RELEASE loLang
ENDTRY
ENDPROC
@@ -3151,7 +3159,8 @@ DEFINE CLASS c_foxbin2prg AS Session
LPARAMETERS tc_InputFile, tcRecompile, toModulo, toEx, tcOriginalFileName, tcLogFile, tcType
LOCAL lcFileSpec, lnFileCount, laFiles(1,1), lcFile, lnCodError, I, lnFileCount, llError, laDirInfo(1,5) ;
- , loLang AS CL_LANG OF 'FOXBIN2PRG.PRG'
+ , loLang AS CL_LANG OF 'FOXBIN2PRG.PRG' ;
+ , loEx as Exception
TRY
WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
@@ -3232,6 +3241,13 @@ DEFINE CLASS c_foxbin2prg AS Session
ENDIF
ENDFOR
ENDWITH
+
+ CATCH TO loEx
+ THROW
+
+ FINALLY
+ STORE NULL TO loLang
+ RELEASE loLang
ENDTRY
ENDPROC
@@ -3653,8 +3669,7 @@ DEFINE CLASS c_foxbin2prg AS Session
*THIS.updateProcessedFile( lnIDInputFile )
ENDIF
- RELEASE tc_InputFile, toModulo, toEx, tlRelanzarError, tcOriginalFileName ;
- , lcErrorInfo, laDirFile, lcExtension, lnFileCount, laFiles, I ;
+ RELEASE lcErrorInfo, laDirFile, lcExtension, lnFileCount, laFiles, I ;
, ltFilestamp, lcExtA, lcExtB ;
, loConversor, loFSO
ENDTRY
@@ -3905,6 +3920,209 @@ DEFINE CLASS c_foxbin2prg AS Session
ENDPROC
+ PROCEDURE loadModule
+ *--------------------------------------------------------------------------------------------------------------
+ * CARGA EL MÓDULO INDICADO EN tc_InputFile Y DEVUELVE SU REFERENCIA DE OBJETO EN toModulo
+ *--------------------------------------------------------------------------------------------------------------
+ * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
+ * tc_InputFile (v! IN ) Nombre del archivo de entrada
+ * toModulo (@? OUT) Referencia de objeto del módulo generado (para Unit Testing)
+ * toEx (@? OUT) Objeto con información del error
+ * tlRelanzarError (v? IN ) Indica si el error debe relanzarse o no
+ * tcOriginalFileName (v? IN ) Sirve para los casos en los que inputFile es un nombre temporal y se quiere generar
+ * el nombre correcto dentro de la versión texto (por ej: en los PJ2 y las cabeceras)
+ *--------------------------------------------------------------------------------------------------------------
+ LPARAMETERS tc_InputFile, toModulo, toEx AS EXCEPTION, tlRelanzarError, tcOriginalFileName
+
+ TRY
+ LOCAL lnCodError, lcErrorInfo, laDirFile(1,5), lcExtension, lnFileCount, laFiles(1,1), I ;
+ , ltFilestamp, lcExtA, lcExtB, laEvents(1,1), lnIDInputFile ;
+ , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' ;
+ , loConversor as c_conversor_base OF 'FOXBIN2PRG.PRG' ;
+ , loFSO AS Scripting.FileSystemObject
+ lnCodError = 0
+
+ WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+ STORE NULL TO toModulo
+ lc_OldSetNotify = SET("Notify")
+ SET NOTIFY OFF
+ loFSO = .o_FSO
+ loLang = _SCREEN.o_FoxBin2Prg_Lang
+ .c_InputFile = FULLPATH( tc_InputFile )
+ .l_Error = .F.
+ lcExtension = UPPER( JUSTEXT(.c_InputFile) )
+
+ .writeLog( REPLICATE( '*', 100 ) )
+ .writeLog( 'LOAD MODULE', 2 )
+ .writeLog( REPLICATE( '*', 100 ) )
+
+ IF ADIR( laDirFile, .c_InputFile, '', 1 ) = 0
+ *ERROR 'No se encontró el archivo [' + .c_InputFile + ']'
+ ERROR loLang.C_FILE_NOT_FOUND_LOC + ' [' + .c_InputFile + ']'
+ ENDIF
+
+ .c_InputFile = loFSO.GetAbsolutePathName( FORCEPATH( laDirFile(1,1), JUSTPATH(.c_InputFile) ) )
+
+ *-- VERIFICO SI HAY ARCHIVO DE CONFIGURACIÓN SECUNDARIO
+ .evaluateConfiguration()
+
+
+ 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
+
+ lnIDInputFile = .n_ProcessedFiles
+
+ .writeLog( C_TAB + 'c_OriginalFileName: ' + .c_OriginalFileName )
+ .writeLog( )
+
+ IF NOT ADIR(laDirFile, .c_InputFile) > 0 THEN
+ ERROR loLang.C_FILE_DOESNT_EXIST_LOC + ' [' + .c_InputFile + ']'
+ ENDIF
+
+ DO CASE
+ CASE lcExtension = 'VCX'
+ loConversor = CREATEOBJECT( 'c_conversor_vcx_a_prg' )
+
+ CASE lcExtension = 'SCX'
+ loConversor = CREATEOBJECT( 'c_conversor_scx_a_prg' )
+
+ CASE lcExtension = 'PJX'
+ loConversor = CREATEOBJECT( 'c_conversor_pjx_a_prg' )
+
+ CASE lcExtension = 'PJM'
+ loConversor = CREATEOBJECT( 'c_conversor_pjm_a_prg' )
+
+ CASE lcExtension = 'FRX'
+ loConversor = CREATEOBJECT( 'c_conversor_frx_a_prg' )
+
+ CASE lcExtension = 'LBX'
+ loConversor = CREATEOBJECT( 'c_conversor_frx_a_prg' )
+
+ CASE lcExtension = 'DBF'
+ loConversor = CREATEOBJECT( 'c_conversor_dbf_a_prg' )
+
+ CASE lcExtension = 'DBC'
+ loConversor = CREATEOBJECT( 'c_conversor_dbc_a_prg' )
+
+ CASE lcExtension = 'MNX'
+ loConversor = CREATEOBJECT( 'c_conversor_mnx_a_prg' )
+
+ CASE lcExtension = .c_VC2
+ loConversor = CREATEOBJECT( 'c_conversor_prg_a_vcx' )
+
+ CASE lcExtension = .c_SC2
+ loConversor = CREATEOBJECT( 'c_conversor_prg_a_scx' )
+
+ CASE lcExtension = .c_PJ2
+ loConversor = CREATEOBJECT( 'c_conversor_prg_a_pjx' )
+
+ CASE lcExtension = .c_FR2
+ loConversor = CREATEOBJECT( 'c_conversor_prg_a_frx' )
+
+ CASE lcExtension = .c_LB2
+ loConversor = CREATEOBJECT( 'c_conversor_prg_a_frx' )
+
+ CASE lcExtension = .c_DB2
+ loConversor = CREATEOBJECT( 'c_conversor_prg_a_dbf' )
+
+ CASE lcExtension = .c_DC2
+ loConversor = CREATEOBJECT( 'c_conversor_prg_a_dbc' )
+
+ CASE lcExtension = .c_MN2
+ loConversor = CREATEOBJECT( 'c_conversor_prg_a_mnx' )
+
+ OTHERWISE
+ *ERROR 'El archivo [' + .c_InputFile + '] no está soportado'
+ ERROR (TEXTMERGE(loLang.C_FILE_NAME_IS_NOT_SUPPORTED_LOC))
+
+ ENDCASE
+
+ .c_Type = UPPER(JUSTEXT(.c_OutputFile))
+ loConversor.c_InputFile = .c_InputFile
+ loConversor.c_OutputFile = .c_OutputFile
+ loConversor.c_LogFile = .c_LogFile
+ loConversor.n_Debug = .n_Debug
+ loConversor.l_Test = .l_Test
+ loConversor.n_FB2PRG_Version = .n_FB2PRG_Version
+ loConversor.l_MethodSort_Enabled = .l_MethodSort_Enabled
+ loConversor.l_PropSort_Enabled = .l_PropSort_Enabled
+ loConversor.l_ReportSort_Enabled = .l_ReportSort_Enabled
+ loConversor.c_OriginalFileName = .c_OriginalFileName
+ loConversor.c_Foxbin2prg_FullPath = .c_Foxbin2prg_FullPath
+ *--
+ *.updateProgressbar( loLang.C_PROCESSING_LOC + ' ' + .c_InputFile + '...', 0, 0, 0 )
+
+ *IF AEVENTS( laEvents, loConversor ) = 0 THEN
+ * BINDEVENT( loConversor, 'updateProgressbar', THIS, 'updateProgressbar' )
+ *ENDIF
+
+ loConversor.loadModule( @toModulo, .F., THIS )
+
+ IF loConversor.l_Error THEN
+ .l_Error = .T.
+ ENDIF
+
+ *.n_ProcessedFilesCount = .n_ProcessedFilesCount + 1
+ .writeLog()
+ .writeLog(loConversor.c_TextLog) && Recojo el LOG que haya generado el conversor
+
+ *-- Logueo los errores
+ IF NOT EMPTY(loConversor.c_TextErr) THEN
+ .writeErrorLog( REPLICATE( '-', 100 ), 1 )
+ .writeErrorLog( loLang.C_ERRORS_FOUND_IN_FILE_LOC + ' [' + .c_InputFile + '] ' )
+ .writeErrorLog( loConversor.c_TextErr )
+ .writeErrorLog( )
+ ENDIF
+
+ ENDWITH && THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+
+ CATCH TO toEx
+ lnCodError = toEx.ERRORNO
+ *lcErrorInfo = THIS.exception2Str(toEx) + CR_LF + CR_LF + loLang.C_SOURCEFILE_LOC + THIS.c_InputFile
+
+ *-- updateProcessedFile( tcProcessed, tcHasErrors, tcSupported, tcReserved )
+ *THIS.updateProcessedFile( lnIDInputFile, '', '', 'E1' )
+
+ IF THIS.n_Debug > 0 THEN
+ IF _VFP.STARTMODE = 0
+ SET STEP ON
+ ENDIF
+ ENDIF
+ IF tlRelanzarError && Usado en Unit Testing
+ THROW
+ ENDIF
+
+ FINALLY
+ SET NOTIFY &lc_OldSetNotify.
+
+ *IF AEVENTS( laEvents, loConversor ) > 0 THEN
+ * UNBINDEVENTS( loConversor )
+ *ENDIF
+
+ STORE NULL TO loConversor, loFSO
+
+ *IF lnCodError = 0 AND THIS.l_Error THEN
+ * THIS.updateProcessedFile( lnIDInputFile, '', '', 'E1' )
+ *ELSE
+ * *THIS.updateProcessedFile( lnIDInputFile )
+ *ENDIF
+
+ RELEASE lcErrorInfo, laDirFile, lcExtension, lnFileCount, laFiles, I ;
+ , ltFilestamp, lcExtA, lcExtB ;
+ , loConversor, loFSO
+ ENDTRY
+
+ RETURN lnCodError
+ ENDPROC
+
+
PROCEDURE readInputVFPParams
LPARAMETERS taParams, tnPCount
EXTERNAL ARRAY taParams
@@ -4941,6 +5159,7 @@ DEFINE CLASS c_conversor_base AS Custom
+ [] ;
+ [] ;
+ [] ;
+ + [] ;
+ [] ;
+ [] ;
+ [] ;
@@ -5924,6 +6143,26 @@ DEFINE CLASS c_conversor_base AS Custom
+ PROCEDURE loadModule
+ *---------------------------------------------------------------------------------------------------
+ * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
+ * toModulo (!@ OUT) Objeto generado de clase correspondiente con la información leida del texto
+ * toEx (!@ OUT) Objeto con información del error
+ * toFoxBin2Prg (!@ IN ) Referencia al objeto principal
+ *---------------------------------------------------------------------------------------------------
+ LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxBin2Prg
+ #IF .F.
+ LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+ #ENDIF
+ *LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG'
+ *loLang = _SCREEN.o_FoxBin2Prg_Lang
+ *THIS.writeLog( C_TAB + loLang.C_CONVERTING_FILE_LOC + ' ' + THIS.c_OutputFile + '...' )
+ *RELEASE loLang
+ RETURN
+ ENDPROC
+
+
+
PROCEDURE normalizeAssignment
LPARAMETERS tcAsignacion, tcComentario
LOCAL lcPropName, lcValor, lnCodError, lcExpNormalizada, lnPos
@@ -14711,6 +14950,10 @@ ENDDEFINE
DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg
+ _MEMBERDATA = [] ;
+ + [] ;
+ + []
+
#IF .F.
LOCAL THIS AS c_conversor_pjx_a_prg OF 'FOXBIN2PRG.PRG'
#ENDIF
@@ -14720,108 +14963,38 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg
PROCEDURE convert
*---------------------------------------------------------------------------------------------------
* PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (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
+ * toModulo (@! OUT) Objeto generado de clase CL_PROJECT con la información leida del texto
+ * toEx (@! OUT) Objeto con información del error
+ * toFoxBin2Prg (@! IN ) Referencia al objeto principal
*---------------------------------------------------------------------------------------------------
LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxBin2Prg
#IF .F.
LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+ LOCAL toModulo AS cl_project OF 'FOXBIN2PRG.PRG'
#ENDIF
DODEFAULT( @toModulo, @toEx, @toFoxBin2Prg )
TRY
- LOCAL lnCodError, lcStr, lnPos, lnLen, lnServerCount, loReg, lcDevInfo, lnLen ;
+ LOCAL lnCodError, lcStr, lnPos, lnLen, lnServerCount, loReg, lnLen ;
, 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'
LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG'
loLang = _SCREEN.o_FoxBin2Prg_Lang
- STORE NULL TO loProject, loReg, loServerHead, loServerData
+ STORE NULL TO loProject, loReg, loServerHead
WITH THIS AS c_conversor_pjx_a_prg OF 'FOXBIN2PRG.PRG'
IF toFoxBin2Prg.l_ProcessFiles THEN
- USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG
- SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN
- USE IN (SELECT("_TABLAORIG"))
-
- loServerHead = CREATEOBJECT('CL_PROJ_SRV_HEAD')
- .updateProgressbar( 'Processing Project ' + '...', 1, 2, 1 )
-
-
- *-- Obtengo los archivos del proyecto
- loProject = CREATEOBJECT('CL_PROJECT')
- SCATTER MEMO NAME loReg
-
- IF toFoxBin2Prg.l_NoTimestamps
- loReg.TIMESTAMP = 0
- ENDIF
- IF toFoxBin2Prg.l_ClearUniqueID
- loReg.ID = 0
+ IF VARTYPE(toModulo) = "O" AND toModulo.Class == 'Cl_project' THEN
+ *-- Ya esta cargado el objeto del Proyecto y se pasó por referencia
+ ELSE
+ .loadModule( @toModulo, @toEx, @toFoxBin2Prg )
ENDIF
- loProject._HomeDir = ['] + ALLTRIM( .get_ValueFromNullTerminatedValue( loReg.HOMEDIR ) ) + [']
-
- loProject._ServerInfo = loReg.RESERVED2
- loProject._Debug = loReg.DEBUG
- loProject._Encrypted = loReg.ENCRYPT
- lcDevInfo = loReg.DEVINFO
-
-
- *--- Ubico el programa principal
- LOCATE FOR MAINPROG
-
- IF FOUND()
- loProject._MainProg = LOWER( ALLTRIM( .get_ValueFromNullTerminatedValue( NAME ) ) )
- ENDIF
-
-
- *-- Ubico el Project Hook
- LOCATE FOR TYPE == 'W'
-
- IF FOUND()
- loProject._ProjectHookLibrary = LOWER( ALLTRIM( .get_ValueFromNullTerminatedValue( NAME ) ) )
- loProject._ProjectHookClass = LOWER( ALLTRIM( .get_ValueFromNullTerminatedValue( RESERVED1 ) ) )
- ENDIF
-
-
- *-- Ubico el icono del proyecto
- LOCATE FOR TYPE == 'i'
-
- IF FOUND()
- loProject._Icon = LOWER( ALLTRIM( .get_ValueFromNullTerminatedValue( NAME ) ) )
- ENDIF
-
-
- *-- Escaneo el proyecto
- SCAN ALL FOR NOT INLIST(TYPE, 'H','W','i' )
- loReg = NULL
- SCATTER FIELDS NAME,TYPE,EXCLUDE,COMMENTS,CPID,TIMESTAMP,ID,OBJREV MEMO NAME loReg
-
- IF toFoxBin2Prg.l_NoTimestamps
- loReg.TIMESTAMP = 0
- ENDIF
- IF toFoxBin2Prg.l_ClearUniqueID
- loReg.ID = 0
- ENDIF
-
- loReg.NAME = LOWER( ALLTRIM( .get_ValueFromNullTerminatedValue( loReg.NAME ) ) )
- loReg.COMMENTS = ALLTRIM( .get_ValueFromNullTerminatedValue( loReg.COMMENTS ) )
-
- *-- TIP: Si el "Name" del objeto está vacío, lo salteo
- IF EMPTY(loReg.NAME)
- LOOP
- ENDIF
-
- TRY
- loProject.ADD( loReg, loReg.NAME )
- 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
- ENDTRY
- ENDSCAN
-
-
+ .updateProgressbar( 'Processing Project info...', 2, 3, 1 )
+ loProject = toModulo
+ loServerHead = loProject._ServerHead
+
C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER()
@@ -14836,15 +15009,12 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg
*-- Información del programa
- loProject.parseDeviceInfo( lcDevInfo )
C_FB2PRG_CODE = C_FB2PRG_CODE + loProject.getFormattedDeviceInfoText() + CR_LF
*-- Información de los Servidores definidos
IF NOT EMPTY(loProject._ServerInfo)
- loServerHead.parseServerInfo( loProject._ServerInfo )
C_FB2PRG_CODE = C_FB2PRG_CODE + loServerHead.getFormattedServerText() + CR_LF
- loServerHead = NULL
ENDIF
@@ -14913,9 +15083,6 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg
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
C_FB2PRG_CODE = C_FB2PRG_CODE + CHR(13) + CHR(10) + CHR(9) + ".ITEM(lcCurdir + '" + loReg.NAME + "').Description = '" + loReg.COMMENTS + "'"
ENDIF
loReg = NULL
@@ -14992,7 +15159,6 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg
*-- Build y cierre
- * _VFP.Projects('<>').FILES('__newproject.f2b').Remove()
TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
<<>>
_VFP.Projects('<>').Close()
@@ -15023,7 +15189,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg
*-- Genero el PJ2
- .updateProgressbar( 'Writing ' + toFoxBin2Prg.c_PJ2 + '...', 2, 2, 1 )
+ .updateProgressbar( 'Writing ' + toFoxBin2Prg.c_PJ2 + '...', 3, 3, 1 )
IF .l_Test
toModulo = C_FB2PRG_CODE
@@ -15033,6 +15199,149 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg
ENDWITH && THIS
+ CATCH TO toEx
+ THIS.set_UserValue(@toEx)
+
+ lnCodError = toEx.ERRORNO
+
+ DO CASE
+ CASE lnCodError = 2062 && The specified key already exists ==> loProject.ADD( loReg, loReg.NAME )
+ toEx.USERVALUE = toEx.USERVALUE + loLang.C_DUPLICATED_FILE_LOC + ': ' + loReg.NAME
+ ENDCASE
+
+ IF THIS.n_Debug > 0 AND _VFP.STARTMODE = 0
+ SET STEP ON
+ ENDIF
+
+ THROW
+
+ FINALLY
+ USE IN (SELECT("TABLABIN"))
+ STORE NULL TO loProject, loReg, loServerHead
+ RELEASE toModulo, toEx, toFoxBin2Prg ;
+ , lnCodError, lcStr, lnPos, lnLen, lnServerCount, loReg, lnLen ;
+ , loProject, loServerHead
+
+ ENDTRY
+
+ RETURN
+ ENDPROC
+
+
+ PROCEDURE loadModule
+ *---------------------------------------------------------------------------------------------------
+ * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (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'
+ LOCAL toModulo AS CL_PROJECT OF 'FOXBIN2PRG.PRG'
+ #ENDIF
+ DODEFAULT( @toModulo, @toEx, @toFoxBin2Prg )
+
+ TRY
+ LOCAL lnCodError, lcStr, lnPos, lnLen, lnServerCount, loReg, lnLen ;
+ , 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'
+ LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG'
+ loLang = _SCREEN.o_FoxBin2Prg_Lang
+ STORE NULL TO loProject, loReg, loServerHead, loServerData
+
+ WITH THIS AS c_conversor_pjx_a_prg OF 'FOXBIN2PRG.PRG'
+ USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG
+ SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN
+ USE IN (SELECT("_TABLAORIG"))
+
+ .updateProgressbar( 'Loading Project info...', 1, 3, 1 )
+
+
+ *-- Obtengo los archivos del proyecto
+ loProject = CREATEOBJECT('CL_PROJECT')
+ toModulo = loProject
+ loServerHead = loProject._ServerHead
+
+ loProject.c_InputFile = .c_InputFile
+ SCATTER MEMO NAME loReg
+
+ IF toFoxBin2Prg.l_NoTimestamps
+ loReg.TIMESTAMP = 0
+ ENDIF
+ IF toFoxBin2Prg.l_ClearUniqueID
+ loReg.ID = 0
+ ENDIF
+
+ loProject._HomeDir = ['] + ALLTRIM( .get_ValueFromNullTerminatedValue( loReg.HOMEDIR ) ) + [']
+ loProject._ServerInfo = loReg.RESERVED2
+ loProject._Debug = loReg.DEBUG
+ loProject._Encrypted = loReg.ENCRYPT
+ loProject.parseDeviceInfo( loReg.DEVINFO )
+
+ *-- Información de los Servidores definidos
+ IF NOT EMPTY(loProject._ServerInfo)
+ loServerHead.parseServerInfo( loProject._ServerInfo )
+ loServerHead = NULL
+ ENDIF
+
+
+ *--- Ubico el programa principal
+ LOCATE FOR MAINPROG
+
+ IF FOUND()
+ loProject._MainProg = LOWER( ALLTRIM( .get_ValueFromNullTerminatedValue( NAME ) ) )
+ ENDIF
+
+
+ *-- Ubico el Project Hook
+ LOCATE FOR TYPE == 'W'
+
+ IF FOUND()
+ loProject._ProjectHookLibrary = LOWER( ALLTRIM( .get_ValueFromNullTerminatedValue( NAME ) ) )
+ loProject._ProjectHookClass = LOWER( ALLTRIM( .get_ValueFromNullTerminatedValue( RESERVED1 ) ) )
+ ENDIF
+
+
+ *-- Ubico el icono del proyecto
+ LOCATE FOR TYPE == 'i'
+
+ IF FOUND()
+ loProject._Icon = LOWER( ALLTRIM( .get_ValueFromNullTerminatedValue( NAME ) ) )
+ ENDIF
+
+
+ *-- Escaneo el proyecto
+ SCAN ALL FOR NOT INLIST(TYPE, 'H','W','i' )
+ loReg = NULL
+ SCATTER FIELDS NAME,TYPE,EXCLUDE,COMMENTS,CPID,TIMESTAMP,ID,OBJREV MEMO NAME loReg
+
+ IF toFoxBin2Prg.l_NoTimestamps
+ loReg.TIMESTAMP = 0
+ ENDIF
+ IF toFoxBin2Prg.l_ClearUniqueID
+ loReg.ID = 0
+ ENDIF
+
+ loReg.NAME = LOWER( ALLTRIM( .get_ValueFromNullTerminatedValue( loReg.NAME ) ) )
+ loReg.COMMENTS = ALLTRIM( .get_ValueFromNullTerminatedValue( loReg.COMMENTS ) )
+
+ *-- TIP: Si el "Name" del objeto está vacío, lo salteo
+ IF EMPTY(loReg.NAME)
+ LOOP
+ ENDIF
+
+ TRY
+ loProject.ADD( loReg, loReg.NAME )
+ 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
+ ENDTRY
+ ENDSCAN
+ ENDWITH && THIS
+
+
CATCH TO toEx
THIS.set_UserValue(@toEx)
@@ -15054,7 +15363,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg
USE IN (SELECT("TABLABIN"))
STORE NULL TO loProject, loReg, loServerHead, loServerData
RELEASE toModulo, toEx, toFoxBin2Prg ;
- , lnCodError, lcStr, lnPos, lnLen, lnServerCount, loReg, lcDevInfo, lnLen ;
+ , lnCodError, lcStr, lnPos, lnLen, lnServerCount, loReg, lnLen ;
, loProject, loServerHead, loServerData
ENDTRY
@@ -15090,7 +15399,7 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg
TRY
IF toFoxBin2Prg.l_ProcessFiles THEN
- LOCAL lnCodError, lcStr, lnPos, lnLen, lnServerCount, loReg, lcDevInfo, lnLen ;
+ LOCAL lnCodError, lcStr, lnPos, lnLen, lnServerCount, loReg, lnLen ;
, lcStrPJM, laLines(1), laProps(1) ;
, loEx AS EXCEPTION ;
, loProject AS CL_PROJECT OF 'FOXBIN2PRG.PRG' ;
@@ -15101,12 +15410,12 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg
loLang = _SCREEN.o_FoxBin2Prg_Lang
STORE NULL TO loProject, loReg, loServerHead, loServerData
lcStrPJM = FILETOSTR( THIS.c_InputFile )
- loServerHead = CREATEOBJECT('CL_PROJ_SRV_HEAD')
THIS.updateProgressbar( 'Scanning PJM...', 1, 2, 1 )
*-- Obtengo los archivos del proyecto
loProject = CREATEOBJECT('CL_PROJECT')
+ loServerHead = loProject._ServerHead
WITH loProject AS CL_PROJECT OF 'FOXBIN2PRG.PRG'
*-- Proj.Info
@@ -15161,7 +15470,7 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg
ENDWITH
ELSE
- loServerData = CREATEOBJECT("CL_PROJ_SRV_DATA")
+ loServerData = loServerHead.getServerDataObject()
WITH loServerData AS CL_PROJ_SRV_DATA OF 'FOXBIN2PRG.PRG'
._HelpContextID = laProps(4)
@@ -15449,7 +15758,7 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg
*USE IN (SELECT("TABLABIN"))
STORE NULL TO loProject, loReg, loServerHead, loServerData
RELEASE toModulo, toEx, toFoxBin2Prg ;
- , lnCodError, lcStr, lnPos, lnLen, lnServerCount, loReg, lcDevInfo, lnLen ;
+ , lnCodError, lcStr, lnPos, lnLen, lnServerCount, loReg, lnLen ;
, lcStrPJM, laLines, laProps, loProject, loServerHead, loServerData
ENDTRY
@@ -16139,6 +16448,7 @@ DEFINE CLASS CL_CUS_BASE AS CUSTOM
+ [] ;
+ [] ;
+ [] ;
+ + [] ;
+ [] ;
+ [] ;
+ [] ;
@@ -16176,6 +16486,29 @@ DEFINE CLASS CL_CUS_BASE AS CUSTOM
ENDPROC
+ PROCEDURE get_AbsolutePath
+ LPARAMETERS tc_InputFile, tc_FullPath
+
+ *-- Ajusto la ruta si no es absoluta
+ tc_InputFile = EVL(tc_InputFile,'')
+
+ IF NOT EMPTY( JUSTEXT(tc_FullPath) ) THEN
+ *-- Se indicó PATH+archivo.ext
+ tc_FullPath = JUSTPATH(tc_FullPath)
+ ENDIF
+
+ tc_FullPath = ADDBS( tc_FullPath )
+
+ IF LEN(tc_InputFile) > 1 ;
+ AND LEFT(LTRIM(tc_InputFile),2) <> '\\' ;
+ AND SUBSTR(LTRIM(tc_InputFile),2,1) <> ':' THEN
+ tc_InputFile = FULLPATH(tc_InputFile, tc_FullPath)
+ ENDIF
+
+ RETURN tc_InputFile
+ ENDPROC
+
+
PROCEDURE get_SeparatedLineAndComment
*---------------------------------------------------------------------------------------------------
* PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
@@ -16227,6 +16560,7 @@ DEFINE CLASS CL_COL_BASE AS COLLECTION
+ [] ;
+ [] ;
+ [] ;
+ + [] ;
+ [] ;
+ [] ;
+ []
@@ -16263,6 +16597,29 @@ DEFINE CLASS CL_COL_BASE AS COLLECTION
ENDPROC
+ PROCEDURE get_AbsolutePath
+ LPARAMETERS tc_InputFile, tc_FullPath
+
+ *-- Ajusto la ruta si no es absoluta
+ tc_InputFile = EVL(tc_InputFile,'')
+
+ IF NOT EMPTY( JUSTEXT(tc_FullPath) ) THEN
+ *-- Se indicó PATH+archivo.ext
+ tc_FullPath = JUSTPATH(tc_FullPath)
+ ENDIF
+
+ tc_FullPath = ADDBS( tc_FullPath )
+
+ IF LEN(tc_InputFile) > 1 ;
+ AND LEFT(LTRIM(tc_InputFile),2) <> '\\' ;
+ AND SUBSTR(LTRIM(tc_InputFile),2,1) <> ':' THEN
+ tc_InputFile = FULLPATH(tc_InputFile, tc_FullPath)
+ ENDIF
+
+ RETURN tc_InputFile
+ ENDPROC
+
+
PROCEDURE get_SeparatedLineAndComment
*---------------------------------------------------------------------------------------------------
* PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
@@ -16751,6 +17108,7 @@ DEFINE CLASS CL_PROJECT AS CL_COL_BASE
#ENDIF
_MEMBERDATA = [] ;
+ + [] ;
+ [] ;
+ [] ;
+ [] ;
@@ -16789,6 +17147,7 @@ DEFINE CLASS CL_PROJECT AS CL_COL_BASE
+ [] ;
+ [] ;
+ [] ;
+ + [] ;
+ [] ;
+ [] ;
+ [] ;
@@ -16797,6 +17156,8 @@ DEFINE CLASS CL_PROJECT AS CL_COL_BASE
+ []
+ c_InputFile = ''
+
*-- Proj.Info
_CmntStyle = 1
_Debug = .F.
@@ -16929,7 +17290,7 @@ DEFINE CLASS CL_PROJECT AS CL_COL_BASE
LPARAMETERS tcDevInfo
TRY
- WITH THIS
+ WITH THIS AS cl_project OF "FOXBIN2PRG.PRG"
._Author = .parseNullTerminatedValue( @tcDevInfo, 1, 45 )
._Company = .parseNullTerminatedValue( @tcDevInfo, 47, 45 )
._Address = .parseNullTerminatedValue( @tcDevInfo, 93, 45 )
@@ -16972,7 +17333,7 @@ DEFINE CLASS CL_PROJECT AS CL_COL_BASE
tcDevInfo = REPLICATE( CHR(0), 1795 )
ENDIF
- WITH THIS
+ WITH THIS AS cl_project OF "FOXBIN2PRG.PRG"
tcDevInfo = STUFF( tcDevInfo, 1, LEN(._Author), ._Author)
tcDevInfo = STUFF( tcDevInfo, 47, LEN(._Company), ._Company)
tcDevInfo = STUFF( tcDevInfo, 93, LEN(._Address), ._Address)
@@ -17015,7 +17376,7 @@ DEFINE CLASS CL_PROJECT AS CL_COL_BASE
LOCAL lcText
lcText = ''
- WITH THIS
+ WITH THIS AS cl_project OF "FOXBIN2PRG.PRG"
TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
<>
_Author = "<<._Author>>"
@@ -17055,6 +17416,47 @@ DEFINE CLASS CL_PROJECT AS CL_COL_BASE
ENDPROC
+ FUNCTION getFilesNotFound(taFiles) AS Integer
+ *---------------------------------------------------------------------------------------------------
+ * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
+ * taFiles (?@ OUT) Codifica los caracteres ASCII 10 y 13 de CHR(nCode) a {nCode}
+ *---------------------------------------------------------------------------------------------------
+ EXTERNAL ARRAY taFiles
+
+ TRY
+ LOCAL I, lnCount, laDirFile(1,5), lcHomeDir
+
+ WITH THIS AS cl_project OF "FOXBIN2PRG.PRG"
+ DIMENSION taFiles( MAX(1,.Count), 2)
+ taFiles(1,1) = ''
+ taFiles(1,2) = .F.
+ lnCount = 0
+ lcHomeDir = ADDBS( EVL(JUSTPATH(.c_InputFile), ._HomeDir) )
+
+ FOR I = 1 TO .Count
+ taFiles(I,1) = .Item(I).Name
+ taFiles(I,2) = ( ADIR(laDirFile, .get_AbsolutePath( taFiles(I,1), lcHomeDir) ) = 1 )
+
+ IF NOT taFiles(I,2)
+ lnCount = lnCount + 1
+ ENDIF
+ ENDFOR
+
+ ENDWITH && THIS
+
+ CATCH TO loEx
+ IF THIS.n_Debug > 0 AND _VFP.STARTMODE = 0
+ SET STEP ON
+ ENDIF
+
+ THROW
+
+ ENDTRY
+
+ RETURN lnCount
+ ENDFUNC
+
+
ENDDEFINE