From 9f5f8fa458b5a8436ad6dcde045ff107d2945bf7 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Mon, 1 Jun 2015 22:49:31 +0200 Subject: [PATCH 01/16] =?UTF-8?q?-=20Actualizaci=C3=B3n=20del=20archivo=20?= =?UTF-8?q?de=20versiones=20y=20nueva=20versi=C3=B3n=20del=20proyecto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 7 +++++-- foxbin2prg.pj2 | 2 +- foxbin2prg.pjt | Bin 767668 -> 768984 bytes foxbin2prg.pjx | Bin 9903 -> 9903 bytes 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index dbe53f4..50aa74b 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -2,8 +2,8 @@ Lparameters toUpdateInfo Local lcNote With toUpdateInfo - .VersionNumber = 'v1.19.44' - .VersionDate = Date(2015,05,31) + .VersionNumber = 'v1.19.45' + .VersionDate = Date(2015,06,01) .SourceFileUrl = 'http://vfpxrepository.com/dl/thorupdate/Projects/FoxBin2Prg/FoxBin2Prg.Zip' .Link = 'http://vfpx.codeplex.com/wikipage?title=FoxBin2PRG' @@ -17,6 +17,9 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg Change History ------------------------------------------------------------- +2015/06/01 v1.19.45 + + 2015/05/31 v1.19.44 - Bug Fix: In certain PCs FoxBin2Prg does not return error codes when called from an external program, so another terminating method is implemented (Ralf Wagner) - Allow exporting DBF data when using DBF_Conversion_Support:1 and optional individual CFG files diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2 index 999699b..3031e1e 100644 --- a/foxbin2prg.pj2 +++ b/foxbin2prg.pj2 @@ -26,7 +26,7 @@ _LegalTrademark = "Creative Commons 4: Reconocimiento - CompartirIgual (by-sa): _ProductName = "FOXBIN2PRG" _MajorVer = "1" _MinorVer = "19" -_Revision = "44" +_Revision = "45" _LanguageID = "1034" _AutoIncrement = "0" * diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index d49e64881e8acec3bf8f59c853aece0a389be6cb..8166154f4157aa5a3c19fdf38850e43e5a6b01c0 100644 GIT binary patch delta 113 zcmdn;R`14lJq`x$-8UE*7#KHiE!H#9IdnJ6gT9L3ol#mNZ7OhC*G w#4JF}3dC$c%nrmHKnzmDwLOZHJ8CU2$Sej1RvBifq3ukY4{%m6O;nHo0L(fY=Kufz delta 86 zcmccdU2n@TtO!T| delta 25 hcmZ4QyWW?@fS*-hBg Date: Mon, 1 Jun 2015 23:23:38 +0200 Subject: [PATCH 02/16] =?UTF-8?q?-=20Cuando=20se=20exporta=20a=20texto=20u?= =?UTF-8?q?n=20menu=20que=20usa=20comillas=20simples=20o=20una=20expresi?= =?UTF-8?q?=C3=B3n=20en=20el=20mensaje=20de=20las=20opciones,=20al=20regen?= =?UTF-8?q?erar=20el=20binario=20se=20recortan=20partes=20del=20mensaje=20?= =?UTF-8?q?de=20esas=20opciones=20(Mike=20Potjer)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 1 + foxbin2prg.exe | Bin 589739 -> 589715 bytes foxbin2prg.prg | 6 ++++-- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 50aa74b..ddb8f5f 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -18,6 +18,7 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg Change History ------------------------------------------------------------- 2015/06/01 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 cutted off (Mike Potjer) 2015/05/31 v1.19.44 diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 3753536e1bddd2ed95b13e93108fe8c79035d8a1..d942520a992a8ee9d415e96b4e93c1a9ae53ac64 100644 GIT binary patch delta 10685 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 I`boR|KPNLgZ~y=R delta 10720 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 C>^F}9 diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 8094777..dc779bb 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -167,6 +167,7 @@ * 14/05/2015 FDBOZZO v1.19.44 Bug Fix: En ciertos PCs FoxBin2Prg no retorna códigos de error cuando se llama como programa externo (Ralf Wagner) * 18/05/2015 FDBOZZO v1.19.44 Mejora: Permitir la exportación de datos de DBFs cuando se usa DBF_Conversion_Support:1 y CFG individual opcional * 31/05/2015 FDBOZZO v1.19.44 Bug Fix: Un arreglo previo en el manejo de errores en cascada provocó un reseteo del último estado de error de proceso, haciendo que a veces los errores no se reporten. +* 01/06/2015 FDBOZZO v1.19.45 Bug Fix: Cuando se exporta a texto un menu que usa comillas simples o una expresión en el mensaje de las opciones, al regenerar el binario se recortan partes del mensaje de esas opciones (Mike Potjer) * * *--------------------------------------------------------------------------------------------------- @@ -253,6 +254,7 @@ * 29/04/2015 Fidel Charny Reporte Bug v1.19.42: FoxBin2Prg a veces genera errores OLE cuando se ejecuta más de una vez en modo objeto sobre un archivo con errores (Arreglado en v1.19.43) * 10/05/2015 Esteban Herrero Reporte Bug v1.19.42: Cuando un form tiene AutoCenter=.T., hay veces en que al regenerar el binario y ejecutarlo no se muestra centrado (Arreglado en v1.19.43) * 29/04/2015 Ralf Wagner Reporte Bug v1.19.43: En ciertos PCs FoxBin2Prg no retorna códigos de error cuando se llama como programa externo (Arreglado en v1.19.44) +* 01/06/2015 Mike Potjer Reporte Bug v1.19.44: Cuando se exporta a texto un menu que usa comillas simples o una expresión en el mensaje de las opciones, al regenerar el binario se recortan partes del mensaje de esas opciones (Arreglado en v1.19.45) * * *--------------------------------------------------------------------------------------------------- @@ -24421,7 +24423,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE loReg.SKIPFOR = ALLTRIM( STREXTRACT( tcLine, 'SKIP FOR ', ';', 1, 2 ) ) CASE LEFT( tcLine, 8 ) == 'MESSAGE ' - loReg.MESSAGE = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) + loReg.MESSAGE = ALLTRIM( SUBSTR( tcLine, 9 ) ) CASE LEFT( tcLine, 8 ) == 'PICTURE ' loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"' ) ) @@ -24620,7 +24622,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE loReg.SKIPFOR = ALLTRIM( STREXTRACT( tcLine, 'SKIP FOR ', ';', 1, 2 ) ) CASE LEFT( tcLine, 8 ) == 'MESSAGE ' - loReg.MESSAGE = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) + loReg.MESSAGE = ALLTRIM( SUBSTR( tcLine, 9 ) ) CASE LEFT( tcLine, 8 ) == 'PICTURE ' loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"' ) ) From 72b1e6d65eb06d7322bae357419d67f8a122da3a Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Tue, 2 Jun 2015 23:08:09 +0200 Subject: [PATCH 03/16] =?UTF-8?q?Correcci=C3=B3n=20de=20"cutted"=20por=20"?= =?UTF-8?q?cut"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index ddb8f5f..1874396 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -18,7 +18,7 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg Change History ------------------------------------------------------------- 2015/06/01 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 cutted off (Mike Potjer) +- 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/05/31 v1.19.44 From 63f0f339b1c96577816c251b88d707d90e66c6db Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 7 Jun 2015 11:40:03 +0200 Subject: [PATCH 04/16] =?UTF-8?q?-=20Reconocer=20algunas=20palabras=20clav?= =?UTF-8?q?e=20y=20estructuras=20en=20may=C3=BAsculas=20y=20min=C3=BAscula?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index dc779bb..1aecb13 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -6736,7 +6736,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base LOCAL llBloqueEncontrado, laPropsAndValues(1,2), lnPropsAndValues_Count - IF LEFT( tcLine + ' ', LEN(C_FB2PRG_META_I) + 1 ) == C_FB2PRG_META_I + ' ' + IF UPPER( LEFT( tcLine + ' ', LEN(C_FB2PRG_META_I) + 1 ) ) == C_FB2PRG_META_I + ' ' WITH THIS AS c_conversor_prg_a_bin OF foxbin2prg.prg llBloqueEncontrado = .T. @@ -6762,7 +6762,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base LOCAL llBloqueEncontrado, laPropsAndValues(1,2), lnPropsAndValues_Count - IF LEFT( tcLine, LEN(C_LIBCOMMENT_I) ) == C_LIBCOMMENT_I + IF UPPER( LEFT( tcLine, LEN(C_LIBCOMMENT_I) ) ) == C_LIBCOMMENT_I llBloqueEncontrado = .T. *-- Metadatos del módulo @@ -7714,11 +7714,11 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base AND NOT .lineIsOnlyCommentAndNoMetadata( @tcLine, @tc_Comentario ) DO CASE - CASE LEFT( tcLine, 8 ) + ' ' == C_ENDPROC + ' ' && Fin del PROCEDURE + CASE UPPER( LEFT( tcLine + ' ', 8 ) ) == C_ENDPROC + ' ' && Fin del PROCEDURE tcProcedureAbierto = '' EXIT - CASE LEFT( tcLine + ' ', 10 ) == C_ENDDEFINE + ' ' && Fin de bloque (ENDDEFINE) encontrado + CASE UPPER( LEFT( tcLine + ' ', 10 ) ) == C_ENDDEFINE + ' ' && Fin de bloque (ENDDEFINE) encontrado IF llEsProcedureDeClase *ERROR 'Error de anidamiento de estructuras. Se esperaba ENDPROC y se encontró ENDDEFINE en la clase ' ; + toClase._Nombre + ' (' + loProcedure._Nombre + ')' ; @@ -7790,7 +7790,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base TRY LOCAL llBloqueEncontrado - IF LEFT( tcLine, 11 ) == 'ADD OBJECT ' + IF UPPER( LEFT( tcLine, 11 ) ) == 'ADD OBJECT ' *-- Estructura a reconocer: ADD OBJECT 'frm_a.Check1' AS check [WITH] WITH THIS AS c_conversor_prg_a_bin OF foxbin2prg.prg LOCAL laPropsAndValues(1,2), lnPropsAndValues_Count, Z, lcProp, lcValue, lcNombre, lcObjName, lnPos ; @@ -7860,7 +7860,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base FOR I = I + 1 TO tnCodeLines .set_Line( @tcLine, @taCodeLines, I ) - IF LEFT( tcLine, C_LEN_END_OBJECT_I) == C_END_OBJECT_I && Fin del ADD OBJECT y METADATOS + IF UPPER( LEFT( tcLine, C_LEN_END_OBJECT_I) ) == C_END_OBJECT_I && Fin del ADD OBJECT y METADATOS *< END OBJECT: baseclass = "olecontrol" Uniqueid = "_3X50L3I7V" OLEObject = "C:\WINDOWS\system32\FOXTLIB.OCX" checksum = "4101493921" /> .get_ListNamesWithValuesFrom_InLine_MetadataTag( @tcLine, @laPropsAndValues, @lnPropsAndValues_Count ; @@ -8068,7 +8068,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base LOCAL llBloqueEncontrado - IF LEFT(tcLine + ' ', 13) == C_DEFINE_CLASS + ' ' + IF UPPER(LEFT(tcLine + ' ', 13)) == C_DEFINE_CLASS + ' ' TRY llBloqueEncontrado = .T. LOCAL Z, lcProp, lcValue, loEx AS EXCEPTION ; @@ -8239,7 +8239,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base LOCAL llBloqueEncontrado - IF LEFT( tcLine + ' ', 10 ) == C_ENDDEFINE + ' ' && Fin de bloque (ENDDEF / ENDPROC) encontrado + IF UPPER( LEFT( tcLine + ' ', 10 ) ) == C_ENDDEFINE + ' ' && Fin de bloque (ENDDEF / ENDPROC) encontrado llBloqueEncontrado = .T. toClase._Fin = I @@ -8272,7 +8272,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base LOCAL llBloqueEncontrado - IF LEFT(tcLine, 7) == 'HIDDEN ' + IF UPPER(LEFT(tcLine, 7)) == 'HIDDEN ' llBloqueEncontrado = .T. toClase._HiddenProps = LOWER( ALLTRIM( SUBSTR( tcLine, 8 ) ) ) ENDIF @@ -8293,7 +8293,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base LOCAL toClase AS CL_CLASE OF 'FOXBIN2PRG.PRG' #ENDIF - IF LEFT(tcLine, 9) == '#INCLUDE ' + IF UPPER(LEFT(tcLine, 9)) == '#INCLUDE ' llBloqueEncontrado = .T. IF THIS.c_Type = 'SCX' toModulo._includeFile = LOWER( ALLTRIM( CHRTRAN( SUBSTR( tcLine, 10 ), ["'], [] ) ) ) @@ -8373,7 +8373,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base LOCAL llBloqueEncontrado - IF LEFT(tcLine, C_LEN_CLASSDATA_I) == C_CLASSDATA_I && METADATA de la CLASE + IF UPPER(LEFT(tcLine, C_LEN_CLASSDATA_I)) == C_CLASSDATA_I && METADATA de la CLASE *< CLASSDATA: Baseclass="custom" Timestamp="2013/11/19 11:51:04" Scale="Foxels" Uniqueid="_3WF0VSTN1" ProjectClassIcon="container.ico" ClassIcon="toolbar.ico" /> LOCAL laPropsAndValues(1,2), lnPropsAndValues_Count llBloqueEncontrado = .T. @@ -8416,7 +8416,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base LOCAL llBloqueEncontrado - IF LEFT(tcLine, C_LEN_EXTERNAL_CLASS_I) == C_EXTERNAL_CLASS_I + IF UPPER(LEFT(tcLine, C_LEN_EXTERNAL_CLASS_I)) == C_EXTERNAL_CLASS_I LOCAL laPropsAndValues(1,2), lnPropsAndValues_Count llBloqueEncontrado = .T. @@ -8449,7 +8449,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base LOCAL llBloqueEncontrado - IF LEFT(tcLine, C_LEN_EXTERNAL_MEMBER_I) == C_EXTERNAL_MEMBER_I + IF UPPER(LEFT(tcLine, C_LEN_EXTERNAL_MEMBER_I)) == C_EXTERNAL_MEMBER_I LOCAL laPropsAndValues(1,2), lnPropsAndValues_Count llBloqueEncontrado = .T. @@ -8479,7 +8479,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base LOCAL llBloqueEncontrado - IF LEFT(tcLine, C_LEN_OBJECTDATA_I) == C_OBJECTDATA_I && METADATA del ADD OBJECT + IF UPPER(LEFT(tcLine, C_LEN_OBJECTDATA_I)) == C_OBJECTDATA_I && METADATA del ADD OBJECT *< OBJECTDATA: ObjName="txtValor" Timestamp="2013/11/19 11:51:04" Uniqueid="_3WF0VSTN1" /> LOCAL laPropsAndValues(1,2), lnPropsAndValues_Count, loObjeto AS CL_OBJETO OF 'FOXBIN2PRG.PRG' llBloqueEncontrado = .T. @@ -8571,20 +8571,20 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base WITH THIS AS c_conversor_prg_a_bin OF 'FOXBIN2PRG.PRG' DO CASE - CASE LEFT( tcLine, 20 ) == 'PROTECTED PROCEDURE ' + CASE UPPER( LEFT( tcLine, 20 ) ) == 'PROTECTED PROCEDURE ' *-- Estructura a reconocer: PROTECTED PROCEDURE nombre_del_procedimiento llBloqueEncontrado = .T. tcProcedureAbierto = ALLTRIM( SUBSTR( tcLine, 21 ) ) .evaluateProcedureDefinition( @toClase, I, @tc_Comentario, tcProcedureAbierto, 'protected', @toObjeto ) - CASE LEFT( tcLine, 17 ) == 'HIDDEN PROCEDURE ' + CASE UPPER( LEFT( tcLine, 17 ) ) == 'HIDDEN PROCEDURE ' *-- Estructura a reconocer: HIDDEN PROCEDURE nombre_del_procedimiento llBloqueEncontrado = .T. tcProcedureAbierto = ALLTRIM( SUBSTR( tcLine, 18 ) ) .evaluateProcedureDefinition( @toClase, I, @tc_Comentario, tcProcedureAbierto, 'hidden', @toObjeto ) - CASE LEFT( tcLine, 10 ) == 'PROCEDURE ' + CASE UPPER( LEFT( tcLine, 10 ) ) == 'PROCEDURE ' *-- Estructura a reconocer: PROCEDURE [objeto.]nombre_del_procedimiento llBloqueEncontrado = .T. tcProcedureAbierto = ALLTRIM( SUBSTR( tcLine, 11 ) ) @@ -8617,7 +8617,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base LOCAL llBloqueEncontrado - IF LEFT(tcLine, 10) == 'PROTECTED ' + IF UPPER(LEFT(tcLine, 10)) == 'PROTECTED ' llBloqueEncontrado = .T. toClase._ProtectedProps = LOWER( ALLTRIM( SUBSTR( tcLine, 11 ) ) ) ENDIF From 80238b8fdb2f943b4dea842283d35901cdee2a9c Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Tue, 9 Jun 2015 20:38:45 +0200 Subject: [PATCH 05/16] Algunas funciones nuevas para tratamiento de tablas a bajo nivel --- foxbin2prg.prg | 147 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 111 insertions(+), 36 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 1aecb13..c9b792c 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -25055,6 +25055,11 @@ DEFINE CLASS CL_DBF_UTILS AS Session + [] ; + [] ; + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] @@ -25472,49 +25477,51 @@ DEFINE CLASS CL_DBF_UTILS AS Session TRY LOCAL lnHandle, ln_HexFileType, lcStr, lnDataPos, lnFieldCount, loEx AS EXCEPTION - IF NOT EMPTY(tcDBC_Name) - ln_HexFileType = 0 - lnHandle = FOPEN(tc_FileName,2) + tcDBC_Name = EVL(tcDBC_Name,'') - IF lnHandle = -1 - EXIT - ENDIF + *IF NOT EMPTY(tcDBC_Name) + ln_HexFileType = 0 + lnHandle = FOPEN(tc_FileName,2) - lcStr = FREAD(lnHandle,1) && File type - ln_HexFileType = EVALUATE( TRANSFORM(ASC(lcStr),'@0') ) + IF lnHandle = -1 + EXIT + ENDIF - IF EMPTY(tdLastUpdate) - lcStr = FREAD(lnHandle,3) && Last update (YYMMDD) - ELSE - lcStr = CHR( VAL( RIGHT( PADL( YEAR( tdLastUpdate ),4,'0'), 2 ) ) ) ; - + CHR( VAL( PADL( MONTH( tdLastUpdate ),2,'0' ) ) ) ; - + CHR( VAL( PADL( DAY( tdLastUpdate ),2,'0' ) ) ) && Last update (YYMMDD) - =FWRITE( lnHandle, PADR(lcStr,3,CHR(0)) ) - ENDIF + lcStr = FREAD(lnHandle,1) && File type + ln_HexFileType = EVALUATE( TRANSFORM(ASC(lcStr),'@0') ) - =FREAD(lnHandle,4) && Number of records in file - lcStr = FREAD(lnHandle,2) && Position of first data record - lnDataPos = CTOBIN(lcStr,"2RS") - IF INLIST(ln_HexFileType, 0x30, 0x31, 0x32) THEN - lnFieldCount = (lnDataPos - 296) / 32 - ELSE - EXIT && No DBC BackLink on older versions! - ENDIF - =FREAD(lnHandle,2) && Length of one data record, including delete flag - =FREAD(lnHandle,16) && Reserved - =FREAD(lnHandle,1) && Table flags: 0x01=Has CDX, 0x02=Has Memo, 0x04=Id DBC (flags acumulativos) - =FREAD(lnHandle,1) && Code page mark - =FREAD(lnHandle,2) && Reserved, contains 0x00 - =FREAD(lnHandle,32 * lnFieldCount) && Field subrecords (los salteo) - =FREAD(lnHandle,1) && Header Record Terminator (0x0D) + IF EMPTY(tdLastUpdate) + lcStr = FREAD(lnHandle,3) && Last update (YYMMDD) + ELSE + lcStr = CHR( VAL( RIGHT( PADL( YEAR( tdLastUpdate ),4,'0'), 2 ) ) ) ; + + CHR( VAL( PADL( MONTH( tdLastUpdate ),2,'0' ) ) ) ; + + CHR( VAL( PADL( DAY( tdLastUpdate ),2,'0' ) ) ) && Last update (YYMMDD) + =FWRITE( lnHandle, PADR(lcStr,3,CHR(0)) ) + ENDIF - IF INLIST(ln_HexFileType, 0x30, 0x31, 0x32) THEN - IF FWRITE( lnHandle, PADR(tcDBC_Name,263,CHR(0)) ) = 0 - *-- No se pudo actualizar el backlink [] de la tabla [] - ERROR C_BACKLINK_CANT_UPDATE_BL_LOC + ' [' + tcDBC_Name + '] ' + C_BACKLINK_OF_TABLE_LOC + ' [' + tc_FileName + ']' - ENDIF + =FREAD(lnHandle,4) && Number of records in file + lcStr = FREAD(lnHandle,2) && Position of first data record + lnDataPos = CTOBIN(lcStr,"2RS") + IF INLIST(ln_HexFileType, 0x30, 0x31, 0x32) THEN + lnFieldCount = (lnDataPos - 296) / 32 + ELSE + EXIT && No DBC BackLink on older versions! + ENDIF + =FREAD(lnHandle,2) && Length of one data record, including delete flag + =FREAD(lnHandle,16) && Reserved + =FREAD(lnHandle,1) && Table flags: 0x01=Has CDX, 0x02=Has Memo, 0x04=Id DBC (flags acumulativos) + =FREAD(lnHandle,1) && Code page mark + =FREAD(lnHandle,2) && Reserved, contains 0x00 + =FREAD(lnHandle,32 * lnFieldCount) && Field subrecords (los salteo) + =FREAD(lnHandle,1) && Header Record Terminator (0x0D) + + IF INLIST(ln_HexFileType, 0x30, 0x31, 0x32) THEN + IF FWRITE( lnHandle, PADR(tcDBC_Name,263,CHR(0)) ) = 0 + *-- No se pudo actualizar el backlink [] de la tabla [] + ERROR C_BACKLINK_CANT_UPDATE_BL_LOC + ' [' + tcDBC_Name + '] ' + C_BACKLINK_OF_TABLE_LOC + ' [' + tc_FileName + ']' ENDIF ENDIF + *ENDIF CATCH TO loEx @@ -25532,6 +25539,74 @@ DEFINE CLASS CL_DBF_UTILS AS Session ENDPROC + FUNCTION get_Structure + LPARAMETERS taFields, tc_FileName + + WITH THIS AS CL_DBF_UTILS OF 'lib_indices.prg' + LOCAL lnFieldCount + lnFieldCount = 0 + + IF NOT EMPTY(tc_FileName) + .getDBFmetadata(tc_FileName) + ENDIF + + lnFieldCount = .n_FieldCount + DIMENSION taFields(lnFieldCount,4) + + FOR I = 1 TO lnFieldCount + WITH .Fields.Item(I) + taFields(I,1) = .FieldName + taFields(I,2) = .FieldType + taFields(I,3) = .FieldWidth + taFields(I,4) = .FieldDecimals + ENDWITH + ENDFOR + ENDWITH + + RETURN lnFieldCount + ENDFUNC + + + PROCEDURE get_BinTableFlags + *-- Leo los flags de la tabla indicada + LPARAMETERS tcFile + + LOCAL lnHandle, lcTableFlags + lnHandle = FOPEN(tcFile,0) + FSEEK(lnHandle,28) + lcTableFlags = FREAD(lnHandle,1) + FCLOSE(lnHandle) + RETURN lcTableFlags + ENDPROC + + + PROCEDURE get_NumTableFlags + *-- Leo los flags de la tabla indicada + LPARAMETERS tcFile + RETURN ASC( THIS.get_BinTableFlags(tcFile) ) + ENDPROC + + + PROCEDURE set_BinTableFlags + *-- Seteo los flags en la tabla indicada + LPARAMETERS tcFile, tcBinTableFlags + + LOCAL lnHandle, lnWritten + lnHandle = FOPEN(tcFile,1) + FSEEK(lnHandle,28) + lnWritten = FWRITE(lnHandle, tcTableFlags, 1) + FCLOSE(lnHandle) + RETURN lnWritten + ENDPROC + + + PROCEDURE set_NumTableFlags + *-- Seteo los flags en la tabla indicada + LPARAMETERS tcFile, tnNumTableFlags + RETURN THIS.set_BinTableFlags( tcFile, CHR(tnNumTableFlags) ) + ENDPROC + + ENDDEFINE From e05bcf5c2e6f845b7d9a968326ead4cff6e65be1 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Tue, 9 Jun 2015 21:47:38 +0200 Subject: [PATCH 06/16] =?UTF-8?q?Bug:=20Cuando=20se=20procesan=20m=C3=BAlt?= =?UTF-8?q?iples=20archivos=20PJ2,=20puede=20ocurrir=20un=20error=20de=20"?= =?UTF-8?q?variable=20llError=20no=20definida"=20(Lutz=20Scheffler)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index c9b792c..73179d5 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -168,6 +168,7 @@ * 18/05/2015 FDBOZZO v1.19.44 Mejora: Permitir la exportación de datos de DBFs cuando se usa DBF_Conversion_Support:1 y CFG individual opcional * 31/05/2015 FDBOZZO v1.19.44 Bug Fix: Un arreglo previo en el manejo de errores en cascada provocó un reseteo del último estado de error de proceso, haciendo que a veces los errores no se reporten. * 01/06/2015 FDBOZZO v1.19.45 Bug Fix: Cuando se exporta a texto un menu que usa comillas simples o una expresión en el mensaje de las opciones, al regenerar el binario se recortan partes del mensaje de esas opciones (Mike Potjer) +* 09/06/2015 FDBOZZO v1.19.45 Bug Fix: Cuando se procesan múltiples archivos PJ2, puede ocurrir un error de "variable llError no definida" (Lutz Scheffler) * * *--------------------------------------------------------------------------------------------------- @@ -255,6 +256,7 @@ * 10/05/2015 Esteban Herrero Reporte Bug v1.19.42: Cuando un form tiene AutoCenter=.T., hay veces en que al regenerar el binario y ejecutarlo no se muestra centrado (Arreglado en v1.19.43) * 29/04/2015 Ralf Wagner Reporte Bug v1.19.43: En ciertos PCs FoxBin2Prg no retorna códigos de error cuando se llama como programa externo (Arreglado en v1.19.44) * 01/06/2015 Mike Potjer Reporte Bug v1.19.44: Cuando se exporta a texto un menu que usa comillas simples o una expresión en el mensaje de las opciones, al regenerar el binario se recortan partes del mensaje de esas opciones (Arreglado en v1.19.45) +* 09/06/2015 Lutz Scheffler Reporte bug v1.19.44: Cuando se procesan múltiples archivos PJ2, puede ocurrir un error de "variable llError no definida" (Arreglado en v1.19.45) * * *--------------------------------------------------------------------------------------------------- @@ -3146,7 +3148,7 @@ 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, laDirInfo(1,5) ; + LOCAL lcFileSpec, lnFileCount, laFiles(1,1), lcFile, lnCodError, I, lnFileCount, llError, laDirInfo(1,5) ; , loLang AS CL_LANG OF 'FOXBIN2PRG.PRG' TRY From 5e334dad4b6b032fb47f2eb35a113daa39a545bf Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Tue, 9 Jun 2015 21:50:03 +0200 Subject: [PATCH 07/16] EXE --- foxbin2prg.exe | Bin 589715 -> 594125 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index d942520a992a8ee9d415e96b4e93c1a9ae53ac64..f8b6e3fdd8bf83b17ba41b1c8595682c55a7c3fe 100644 GIT binary patch delta 19236 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 From 2715a6c01570ae760f2bd81c92c81e5ec8472cb9 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Tue, 9 Jun 2015 21:53:32 +0200 Subject: [PATCH 08/16] =?UTF-8?q?v1.19.45=20Beta-2=20Actualizaci=C3=B3n=20?= =?UTF-8?q?archivo=20de=20versiones?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 1874396..ac88b21 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,01) + .VersionDate = Date(2015,06,09) .SourceFileUrl = 'http://vfpxrepository.com/dl/thorupdate/Projects/FoxBin2Prg/FoxBin2Prg.Zip' .Link = 'http://vfpx.codeplex.com/wikipage?title=FoxBin2PRG' @@ -17,8 +17,9 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg Change History ------------------------------------------------------------- -2015/06/01 v1.19.45 +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) +- Bug Fix: When processing multiple PJ2 files, an error "variable llError not defined" can occur (Lutz Scheffler) 2015/05/31 v1.19.44 From 70f97cafcf8865e7ad8dc433f005aab80b3c8c49 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 12 Jun 2015 23:55:26 +0200 Subject: [PATCH 09/16] =?UTF-8?q?-=20Separaci=C3=B3n=20y=20encapsulaci?= =?UTF-8?q?=C3=B3n=20del=20proceso=20del=20PJX=20en=20carga=20y=20proceso?= =?UTF-8?q?=20(loadFile=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 10/16] =?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 5c39bece9838b9f9941005722bf0b5dadf8aff71 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Mon, 15 Jun 2015 20:57:53 +0200 Subject: [PATCH 11/16] Bug Fix pjx/pj2: Los proyectos PJX/PJ2 que referencian archivos de otras unidades de disco causan errores ne esos archivos al procesar con las opciones "*" o "*-" (Matt Slay) --- FoxBin2PRGVersionFile.txt | 1 + foxbin2prg.prg | 8 +++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index ac88b21..089fbc4 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -20,6 +20,7 @@ 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) - 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) 2015/05/31 v1.19.44 diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 73179d5..c076d1d 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -169,6 +169,7 @@ * 31/05/2015 FDBOZZO v1.19.44 Bug Fix: Un arreglo previo en el manejo de errores en cascada provocó un reseteo del último estado de error de proceso, haciendo que a veces los errores no se reporten. * 01/06/2015 FDBOZZO v1.19.45 Bug Fix: Cuando se exporta a texto un menu que usa comillas simples o una expresión en el mensaje de las opciones, al regenerar el binario se recortan partes del mensaje de esas opciones (Mike Potjer) * 09/06/2015 FDBOZZO v1.19.45 Bug Fix: Cuando se procesan múltiples archivos PJ2, puede ocurrir un error de "variable llError no definida" (Lutz Scheffler) +* 15/06/2015 FDBOZZO v1.19.45 Bug Fix pjx,*/pj2,*: Los proyectos PJX/PJ2 que referencian archivos de otras unidades de disco causan errores ne esos archivos al procesar con las opciones "*" o "*-" (Matt Slay) * * *--------------------------------------------------------------------------------------------------- @@ -257,6 +258,7 @@ * 29/04/2015 Ralf Wagner Reporte Bug v1.19.43: En ciertos PCs FoxBin2Prg no retorna códigos de error cuando se llama como programa externo (Arreglado en v1.19.44) * 01/06/2015 Mike Potjer Reporte Bug v1.19.44: Cuando se exporta a texto un menu que usa comillas simples o una expresión en el mensaje de las opciones, al regenerar el binario se recortan partes del mensaje de esas opciones (Arreglado en v1.19.45) * 09/06/2015 Lutz Scheffler Reporte bug v1.19.44: Cuando se procesan múltiples archivos PJ2, puede ocurrir un error de "variable llError no definida" (Arreglado en v1.19.45) +* 13/06/2015 Matt Slay Reporte bug v1.19.44: Los proyectos PJX/PJ2 que referencian archivos de otras unidades de disco causan errores ne esos archivos al procesar con las opciones "*" o "*-" (Arreglado en v1.19.45) * * *--------------------------------------------------------------------------------------------------- @@ -3078,7 +3080,7 @@ DEFINE CLASS c_foxbin2prg AS Session SCAN FOR NOT DELETED() AND Type <> 'H' lnFileCount = lnFileCount + 1 DIMENSION laFiles(lnFileCount,1) - laFiles(lnFileCount,1) = ADDBS( JUSTPATH( lcFileSpec ) ) + ALLTRIM( NAME, 0, ' ', CHR(0) ) + laFiles(lnFileCount,1) = .get_absolutepath( ALLTRIM( NAME, 0, ' ', CHR(0) ), ADDBS( JUSTPATH( lcFileSpec ) ) ) ENDSCAN USE IN (SELECT("TABLABIN")) @@ -3182,8 +3184,8 @@ DEFINE CLASS c_foxbin2prg AS Session FOR I = lnFileCount TO 1 STEP -1 IF '.ADD(' $ laFiles(I) - laFiles(I) = ADDBS( JUSTPATH( lcFileSpec ) ) + STREXTRACT( laFiles(I), ".ADD('", "')" ) - laFiles(I) = FORCEEXT( laFiles(I), .get_Ext2FromExt( UPPER(JUSTEXT(laFiles(I))) ) ) + lcFile = .get_absolutepath( STREXTRACT( laFiles(I), ".ADD('", "')" ), ADDBS( JUSTPATH( lcFileSpec ) ) ) + laFiles(I) = FORCEEXT( lcFile, .get_Ext2FromExt( UPPER(JUSTEXT(lcFile)) ) ) ELSE lnFileCount = lnFileCount - 1 ADEL( laFiles, I ) From bf6e19c77ab40b56e2eb92a110e75d483403d707 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Mon, 15 Jun 2015 20:59:19 +0200 Subject: [PATCH 12/16] v1.19.45 Beta-3 EXE --- foxbin2prg.exe | Bin 594125 -> 591389 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index f8b6e3fdd8bf83b17ba41b1c8595682c55a7c3fe..435c61361f0211e939b803c6ef4e611b74cfbf43 100644 GIT binary patch delta 17867 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 n-`gKk8+Y%s95u^3v@!C~`+W delta 16205 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 From 0047990e26125d9c55aefba3efb008c8e539aba2 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 20 Jun 2015 01:01:14 +0200 Subject: [PATCH 13/16] =?UTF-8?q?Bug=20Fix:=20Cuando=20se=20procesan=20m?= =?UTF-8?q?=C3=BAltiples=20archivos,=20a=20veces=20los=20errores=20no=20se?= =?UTF-8?q?=20muestran?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index c076d1d..5405431 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -2986,7 +2986,7 @@ DEFINE CLASS c_foxbin2prg AS Session CASE lnCodError = 1799 && Conversion Cancelled MESSAGEBOX( loLang.C_CONVERSION_CANCELLED_BY_USER_LOC + '!', 0+64+4096, 'FoxBin2Prg ' + THIS.c_FB2PRG_EXE_Version, 60000 ) - CASE THIS.l_Error + CASE THIS.l_Errors IF ADIR(laDirInfo, THIS.c_ErrorLogFile) > 0 THEN MESSAGEBOX( loLang.C_END_OF_PROCESS_LOC + '! (' + loLang.C_WITH_ERRORS_LOC + ')', 0+48+4096, 'FoxBin2Prg ' + THIS.c_FB2PRG_EXE_Version, 60000 ) loWSH.Run( THIS.c_ErrorLogFile, 3 ) @@ -3001,14 +3001,10 @@ DEFINE CLASS c_foxbin2prg AS Session ENDCASE - IF EMPTY(lnCodError) AND THIS.l_Error + IF EMPTY(lnCodError) AND THIS.l_Errors lnCodError = 1098 ENDIF - IF lnCodError > 0 THEN - THIS.l_Errors = .T. - ENDIF - SET NOTIFY &lc_OldSetNotify. STORE NULL TO loFSO, loWSH RELEASE tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDebug, tcDontShowProgress ; @@ -4113,6 +4109,7 @@ DEFINE CLASS c_foxbin2prg AS Session .errOut(tcText) .l_Error = .T. + .l_Errors = .T. ENDWITH CATCH ENDTRY From cd2e78fa00e6e90032e2c5653b9675b0bc9456d9 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 20 Jun 2015 14:17:19 +0200 Subject: [PATCH 14/16] Para imagen de fondo e icono, ahora uso FILE() en vez de ADIR() porque si no, no encuentra el archivo interno. --- foxbin2prg.prg | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 5405431..e49a56c 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -493,6 +493,10 @@ LPARAMETERS tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDeb #DEFINE C_FILETYPE_QUERYSUPPORT "Q" *-- Fin / End +IF _VFP.StartMode > 0 THEN + SYS(2450,1) +ENDIF + LOCAL loCnv AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' LOCAL lnResp, loEx AS EXCEPTION @@ -4635,11 +4639,13 @@ DEFINE CLASS frm_avance AS Form THISFORM.CAPTION = 'FoxBin2Prg ' + _SCREEN.c_FB2PRG_EXE_Version + ' > - ' + loLang.C_PROCESS_PROGRESS_LOC + ' (' + loLang.C_PRESS_ESC_TO_CANCEL + ')' ENDIF - IF ADIR( laDirInfo, FORCEEXT( toFoxBin2Prg.c_Foxbin2prg_FullPath, 'ICO' ) ) > 0 THEN + *IF ADIR( laDirInfo, FORCEEXT( toFoxBin2Prg.c_Foxbin2prg_FullPath, 'ICO' ) ) > 0 THEN + IF FILE( FORCEEXT( toFoxBin2Prg.c_Foxbin2prg_FullPath, 'ICO' ) ) THEN THISFORM.Icon = FORCEEXT( toFoxBin2Prg.c_Foxbin2prg_FullPath, 'ICO' ) ENDIF - IF ADIR( laDirInfo, toFoxBin2Prg.c_BackgroundImage ) > 0 THEN + *IF ADIR( laDirInfo, toFoxBin2Prg.c_BackgroundImage ) > 0 THEN + IF FILE( toFoxBin2Prg.c_BackgroundImage ) THEN CLEAR RESOURCES THISFORM.Picture = toFoxBin2Prg.c_BackgroundImage ENDIF From c419ece8a73cc6eef39fc697850efd15e1b121b4 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 21 Jun 2015 17:13:52 +0200 Subject: [PATCH 15/16] =?UTF-8?q?-=20Mejora=20API-PJX:=20Nuevo=20m=C3=A9to?= =?UTF-8?q?do=20loadModule()=20que=20devuelve=20el=20objeto=20Project=20in?= =?UTF-8?q?terno=20de=20FoxBin2Prg=20cuando=20se=20pasa=20un=20nombre=20de?= =?UTF-8?q?=20proyecto=20existente=20-=20Mejora=20API-PJX:=20Nuevo=20m?= =?UTF-8?q?=C3=A9todo=20getFilesNotFound()=20para=20el=20objeto=20Project?= =?UTF-8?q?=20de=20FoxBin2Prg,=20que=20devuelve=20la=20cantidad=20de=20arc?= =?UTF-8?q?hivos=20del=20proyecto=20que=20no=20se=20encuentran=20y=20un=20?= =?UTF-8?q?array=20con=20los=20estados=20de=20existencia=20de=20cada=20arc?= =?UTF-8?q?hivo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...prg__c_conversor_bin_a_prg__indentMemo.prg | 10 +- ...g__c_foxbin2prg__evaluateConfiguration.prg | 10 +- foxbin2prg.prg | 626 ++++++++++++++---- 3 files changed, 525 insertions(+), 121 deletions(-) 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 From cf082e012859a1cb03d1a1bce7e1d8b95d8d2d02 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 21 Jun 2015 17:31:33 +0200 Subject: [PATCH 16/16] =?UTF-8?q?Actualizaci=C3=B3n=20del=20archivo=20de?= =?UTF-8?q?=20versiones?= 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