From 70f97cafcf8865e7ad8dc433f005aab80b3c8c49 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 12 Jun 2015 23:55:26 +0200 Subject: [PATCH 1/3] =?UTF-8?q?-=20Separaci=C3=B3n=20y=20encapsulaci=C3=B3?= =?UTF-8?q?n=20del=20proceso=20del=20PJX=20en=20carga=20y=20proceso=20(loa?= =?UTF-8?q?dFile=20y=20convert)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 249 +++++++++++++++++++++++++++++++------------------ 1 file changed, 156 insertions(+), 93 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 73179d5..5d4a33e 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -14706,6 +14706,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 @@ -14726,7 +14730,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg 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' ; @@ -14737,86 +14741,11 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg 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 - 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 - + .loadFile( @toModulo, @toEx, @toFoxBin2Prg, @loProject ) + .updateProgressbar( 'Processing Project info...', 2, 3, 1 ) + loServerHead = loProject._ServerHead + C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() @@ -14831,15 +14760,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 @@ -14908,9 +14834,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 @@ -14987,7 +14910,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() @@ -15018,7 +14940,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 @@ -15028,6 +14950,147 @@ 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, loServerData + RELEASE toModulo, toEx, toFoxBin2Prg ; + , lnCodError, lcStr, lnPos, lnLen, lnServerCount, loReg, lnLen ; + , loProject, loServerHead, loServerData + + ENDTRY + + RETURN + ENDPROC + + + PROCEDURE loadFile + *--------------------------------------------------------------------------------------------------- + * 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, toProject + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + LOCAL toProject 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') + toProject = loProject + loServerHead = loProject._ServerHead + 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) @@ -15049,7 +15112,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 @@ -15085,7 +15148,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' ; @@ -15096,12 +15159,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 @@ -15156,7 +15219,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) @@ -15444,7 +15507,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 From bd25562386d8296818f7948085f15a5c0420bad7 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 14 Jun 2015 00:14:40 +0200 Subject: [PATCH 2/3] =?UTF-8?q?-=20Limpieza=20de=20c=C3=B3digo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 5d4a33e..5bcef48 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -2604,7 +2604,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) == '*' @@ -2709,7 +2710,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 @@ -2769,7 +2771,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 @@ -3010,7 +3013,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 ; + , tlRelanzarError, tcOriginalFileName, tcRecompile, tcNoTimestamps ; , tcBackupLevels, tcClearUniqueID, tcOptimizeByFilestamp ; , I, lcPath, lcFileSpec, lcFile, laFiles, lnFileCount, lcErrorInfo, lcErrorFile, loEx, loFSO ENDTRY @@ -14734,10 +14737,9 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg , 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 @@ -14968,10 +14970,10 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg FINALLY USE IN (SELECT("TABLABIN")) - STORE NULL TO loProject, loReg, loServerHead, loServerData + STORE NULL TO loProject, loReg, loServerHead RELEASE toModulo, toEx, toFoxBin2Prg ; , lnCodError, lcStr, lnPos, lnLen, lnServerCount, loReg, lnLen ; - , loProject, loServerHead, loServerData + , loProject, loServerHead ENDTRY From cf082e012859a1cb03d1a1bce7e1d8b95d8d2d02 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 21 Jun 2015 17:31:33 +0200 Subject: [PATCH 3/3] =?UTF-8?q?Actualizaci=C3=B3n=20del=20archivo=20de=20v?= =?UTF-8?q?ersiones?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 089fbc4..b4b9590 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -3,7 +3,7 @@ Lparameters toUpdateInfo Local lcNote With toUpdateInfo .VersionNumber = 'v1.19.45' - .VersionDate = Date(2015,06,09) + .VersionDate = Date(2015,06,21) .SourceFileUrl = 'http://vfpxrepository.com/dl/thorupdate/Projects/FoxBin2Prg/FoxBin2Prg.Zip' .Link = 'http://vfpx.codeplex.com/wikipage?title=FoxBin2PRG' @@ -17,10 +17,13 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg Change History ------------------------------------------------------------- -2015/06/09 v1.19.45 -- Bug Fix: When a menu that uses single quotes or an expression in the option's MESSAGE is exported to text, when regenerating the menu from the text there are parts of the message that are cut off (Mike Potjer) +2015/06/21 v1.19.45 +- Bug Fix mnx: When a menu that uses single quotes or an expression in the option's MESSAGE is exported to text, when regenerating the menu from the text there are parts of the message that are cut off (Mike Potjer) - Bug Fix: When processing multiple PJ2 files, an error "variable llError not defined" can occur (Lutz Scheffler) -- Bug Fix pjx,*/pj2,*: PJX/PJ2 projects that references files from other disk units throw errors for those files when processing with "*" or "*-" options (Matt Slay) +- Bug Fix pjx/pj2: PJX/PJ2 projects that references files from other disk units throw errors for those files when processing with "*" or "*-" options (Matt Slay) +- Bug Fix: When processing multiple-files, sometimes encountered errores are not reported +- Feature (API-PJX): New loadModule() method that returns the internal FoxBin2Prg Project object when the full name of an existent project file is specified +- Feature (API-PJX): New getFilesNotFound() method for the FoxBin2Prg's Project object, that returns the count of files referenced in the project that are not found on disk and an array with all the existence state of each file 2015/05/31 v1.19.44