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