From c35e525d2e568a81e02f40c607116228d5615348 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Wed, 22 Apr 2015 21:39:40 +0200 Subject: [PATCH 01/14] =?UTF-8?q?-=20Inicio=20edici=C3=B3n=20archivo=20de?= =?UTF-8?q?=20versiones?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 6717306..c1ac125 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -2,8 +2,8 @@ Lparameters toUpdateInfo Local lcNote With toUpdateInfo - .VersionNumber = 'v1.19.42' - .VersionDate = Date(2015,04,16) + .VersionNumber = 'v1.19.43' + .VersionDate = Date(2015,04,22) .SourceFileUrl = 'http://vfpxrepository.com/dl/thorupdate/Projects/FoxBin2Prg/FoxBin2Prg.Zip' .Link = 'http://vfpx.codeplex.com/wikipage?title=FoxBin2PRG' @@ -17,6 +17,11 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg Change History ------------------------------------------------------------- +2015/04/23 v1.19.43 + + + + 2015/04/16 v1.19.42 - Feature: Added VFP 9 SP1 runtime validation - Bug Fix: Broken SourceSafe compatibility because an error is thrown when querying for file support (Tuvia Vinitsky) From 45ce56e72a9c6a7fd64acb72736feb8174f43fce Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 23 Apr 2015 00:52:41 +0200 Subject: [PATCH 02/14] =?UTF-8?q?-=20Nueva=20configuraci=C3=B3n=20"RemoveZ?= =?UTF-8?q?OrderSetFromProps"=20para=20quitar=20la=20propiedad=20ZOrderSet?= =?UTF-8?q?=20cuando=20se=20quiere=20mantener=20el=20ZOrder=20de=20la=20cl?= =?UTF-8?q?ase=20original=20siempre=20y=20evitar=20diferencias=20innecesar?= =?UTF-8?q?ias=20(Ryan=20Harris)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 163 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 132 insertions(+), 31 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 8c5035f..b0476dd 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -526,7 +526,6 @@ QUIT DEFINE CLASS c_foxbin2prg AS Session _MEMBERDATA = [] ; - + [] ; + [] ; + [] ; + [] ; @@ -578,7 +577,6 @@ DEFINE CLASS c_foxbin2prg AS Session + [] ; + [] ; + [] ; - + [] ; + [] ; + [] ; + [] ; @@ -586,11 +584,11 @@ DEFINE CLASS c_foxbin2prg AS Session + [] ; + [] ; + [] ; - + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] ; - + [] ; + [] ; + [] ; + [] ; @@ -682,7 +680,8 @@ DEFINE CLASS c_foxbin2prg AS Session l_AutoClearProcessedFiles = .T. && Por defecto limpia archivos procesados entre ejecución y ejecución l_ProcessFiles = .T. && Por defecto procesa los archivos. En .F. sirve para obtener sus nombres sin reescribirlos. l_CancelWithEscKey = .T. - l_DropNullCharsFromCode = .T. + l_RemoveNullCharsFromCode = .T. + l_RemoveZOrderSetFromProps = .F. l_Recompile = .T. n_UseClassPerFile = 0 l_ClassPerFileCheck = .F. @@ -1074,6 +1073,24 @@ DEFINE CLASS c_foxbin2prg AS Session ENDPROC + PROCEDURE l_RemoveNullCharsFromCode_ACCESS + IF THIS.n_CFG_Actual = 0 OR ISNULL( THIS.o_Configuration( THIS.n_CFG_Actual ) ) + RETURN THIS.l_RemoveNullCharsFromCode + ELSE + RETURN NVL( THIS.o_Configuration( THIS.n_CFG_Actual ).l_RemoveNullCharsFromCode, THIS.l_RemoveNullCharsFromCode ) + ENDIF + ENDPROC + + + PROCEDURE l_RemoveZOrderSetFromProps_ACCESS + IF THIS.n_CFG_Actual = 0 OR ISNULL( THIS.o_Configuration( THIS.n_CFG_Actual ) ) + RETURN THIS.l_RemoveZOrderSetFromProps + ELSE + RETURN NVL( THIS.o_Configuration( THIS.n_CFG_Actual ).l_RemoveZOrderSetFromProps, THIS.l_RemoveZOrderSetFromProps ) + ENDIF + ENDPROC + + PROCEDURE l_ClassPerFileCheck_ACCESS IF THIS.n_CFG_Actual = 0 OR ISNULL( THIS.o_Configuration( THIS.n_CFG_Actual ) ) RETURN THIS.l_ClassPerFileCheck @@ -1913,11 +1930,18 @@ DEFINE CLASS c_foxbin2prg AS Session .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > RedirectClassPerFileToMain: ' + TRANSFORM(lcValue) ) ENDIF - CASE LEFT( laConfig(I), 22 ) == LOWER('DropNullCharsFromCode:') - lcValue = ALLTRIM( SUBSTR( laConfig(I), 23 ) ) + CASE LEFT( laConfig(I), 24 ) == LOWER('RemoveNullCharsFromCode:') + lcValue = ALLTRIM( SUBSTR( laConfig(I), 25 ) ) IF INLIST( lcValue, '0', '1' ) THEN - lo_CFG.l_DropNullCharsFromCode = ( TRANSFORM(lcValue) == '1' ) - .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > DropNullCharsFromCode: ' + TRANSFORM(lcValue) ) + lo_CFG.l_RemoveNullCharsFromCode = ( TRANSFORM(lcValue) == '1' ) + .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > RemoveNullCharsFromCode: ' + TRANSFORM(lcValue) ) + ENDIF + + CASE LEFT( laConfig(I), 25 ) == LOWER('RemoveZOrderSetFromProps:') + lcValue = ALLTRIM( SUBSTR( laConfig(I), 26 ) ) + IF INLIST( lcValue, '0', '1' ) THEN + lo_CFG.l_RemoveZOrderSetFromProps = ( TRANSFORM(lcValue) == '1' ) + .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > RemoveZOrderSetFromProps: ' + TRANSFORM(lcValue) ) ENDIF CASE LEFT( laConfig(I), 9 ) == LOWER('Language:') @@ -2063,7 +2087,8 @@ DEFINE CLASS c_foxbin2prg AS Session .writeLog( C_TAB + 'n_ExtraBackupLevels: ' + TRANSFORM(.n_ExtraBackupLevels) ) .writeLog( C_TAB + 'c_BackgroundImage: ' + TRANSFORM(.c_BackgroundImage) ) .writeLog( C_TAB + 'n_OptimizeByFilestamp: ' + TRANSFORM(.n_OptimizeByFilestamp) ) - .writeLog( C_TAB + 'l_DropNullCharsFromCode: ' + TRANSFORM(.l_DropNullCharsFromCode) ) + .writeLog( C_TAB + 'l_RemoveNullCharsFromCode: ' + TRANSFORM(.l_RemoveNullCharsFromCode) ) + .writeLog( C_TAB + 'l_RemoveZOrderSetFromProps: ' + TRANSFORM(.l_RemoveZOrderSetFromProps) ) .writeLog( C_TAB + 'l_ClearDBFLastUpdate: ' + TRANSFORM(.l_ClearDBFLastUpdate) ) .writeLog( C_TAB + 'c_Language: ' + TRANSFORM(.c_Language) ) @@ -6807,11 +6832,18 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base PROCEDURE classProps2Memo - *-- ARMA EL MEMO DE PROPERTIES CON LAS PROPIEDADES Y SUS VALORES - LPARAMETERS toClase + *-------------------------------------------------------------------------------------------------------------- + * ARMA EL MEMO DE PROPERTIES CON LAS PROPIEDADES Y SUS VALORES + *-------------------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * toClase (!@ IN ) Objeto de la Clase + * toFoxBin2Prg (@? IN ) Referencia al objeto principal + *-------------------------------------------------------------------------------------------------------------- + LPARAMETERS toClase, toFoxBin2Prg #IF .F. LOCAL toClase AS CL_CLASE OF 'FOXBIN2PRG.PRG' + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF *-- ESTRUCTURA A ANALIZAR: Propiedades normales, con CR codificado () y con CR+LF () @@ -6849,6 +6881,12 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base *-- ARMO EL MEMO A DEVOLVER FOR I = 1 TO lnPropsAndValues_Count + * + * Skip ZOrderSet if configured to + * + IF toFoxBin2Prg.l_RemoveZOrderSetFromProps AND ATC( '.ZOrderSet.', '.' + laPropsAndValues(I, 1) + '.' ) > 0 THEN + LOOP + ENDIF lcMemo = lcMemo + laPropsAndValues(I,1) + ' = ' + laPropsAndValues(I,2) + CR_LF ENDFOR ENDWITH @@ -7424,7 +7462,17 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base PROCEDURE analyzeCodeBlock_ADD_OBJECT - LPARAMETERS toModulo, toClase, tcLine, I, taCodeLines, tnCodeLines + *-------------------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * toModulo (!@ IN ) Objeto del Modulo + * toClase (!@ IN ) Objeto de la Clase + * tcLine (!@ IN ) Línea de datos en evaluación + * taCodeLines (!@ IN ) El array con las líneas del código de texto donde buscar + * I (!@ IN ) Número de línea en evaluación + * tnCodeLines (!@ IN ) Cantidad de líneas de código + * toFoxBin2Prg (?@ IN ) Referencia al objeto principal + *-------------------------------------------------------------------------------------------------------------- + LPARAMETERS toModulo, toClase, tcLine, I, taCodeLines, tnCodeLines, toFoxBin2Prg EXTERNAL ARRAY taCodeLines @@ -7432,6 +7480,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG' LOCAL toClase AS CL_CLASE OF 'FOXBIN2PRG.PRG' LOCAL toObjeto AS CL_OBJETO OF 'FOXBIN2PRG.PRG' + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF TRY @@ -7541,9 +7590,23 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base IF RIGHT(tcLine, 3) == ', ;' && VALOR INTERMEDIO CON ", ;" .get_SeparatedPropAndValue( LEFT(tcLine, LEN(tcLine) - 3), @lcProp, @lcValue, toClase, @taCodeLines, @tnCodeLines, @I ) + + * + * Skip ZOrderSet if configured to + * + IF toFoxBin2Prg.l_RemoveZOrderSetFromProps AND ATC( '.ZOrderSet.', '.' + lcProp + '.' ) > 0 THEN + LOOP + ENDIF toObjeto.add_Property( @lcProp, @lcValue ) ELSE && VALOR FINAL SIN ", ;" (JUSTO ANTES DEL ) .get_SeparatedPropAndValue( tcLine, @lcProp, @lcValue, toClase, @taCodeLines, @tnCodeLines, @I ) + + * + * Skip ZOrderSet if configured to + * + IF toFoxBin2Prg.l_RemoveZOrderSetFromProps AND ATC( '.ZOrderSet.', '.' + lcProp + '.' ) > 0 THEN + LOOP + ENDIF toObjeto.add_Property( @lcProp, @lcValue ) ENDIF @@ -7674,14 +7737,29 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base PROCEDURE analyzeCodeBlock_DEFINE_CLASS + *-------------------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * toModulo (!@ IN ) Objeto del Modulo + * toClase (!@ IN ) Objeto de la Clase + * tcLine (!@ IN ) Línea de datos en evaluación + * taCodeLines (!@ IN ) El array con las líneas del código de texto donde buscar + * I (!@ IN ) Número de línea en evaluación + * tnCodeLines (!@ IN ) Cantidad de líneas de código + * tcProcedureAbierto (!v IN ) Nombre del Procedure abierto + * taLineasExclusion (!@ IN ) Array de líneas de exclusión + * tnBloquesExclusion (!@ IN ) Cantidad de líneas de exclusión + * tc_Comentario (!v IN ) Comentario + * toFoxBin2Prg (@? IN ) Referencia al objeto principal + *-------------------------------------------------------------------------------------------------------------- LPARAMETERS toModulo, toClase, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto ; - , taLineasExclusion, tnBloquesExclusion, tc_Comentario + , taLineasExclusion, tnBloquesExclusion, tc_Comentario, toFoxBin2Prg EXTERNAL ARRAY taCodeLines, tnBloquesExclusion, taLineasExclusion #IF .F. LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG' LOCAL toClase AS CL_CLASE OF 'FOXBIN2PRG.PRG' + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF LOCAL llBloqueEncontrado @@ -7772,7 +7850,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base llDEFINED_PAM_Completed = .T. - CASE .analyzeCodeBlock_ADD_OBJECT( @toModulo, @toClase, @tcLine, @I, @taCodeLines, @tnCodeLines ) + CASE .analyzeCodeBlock_ADD_OBJECT( @toModulo, @toClase, @tcLine, @I, @taCodeLines, @tnCodeLines, @toFoxBin2Prg ) STORE .T. TO llCLASSCOMMENTS_Completed ; , llCLASS_PROPERTY_Completed ; , llPROTECTED_Completed ; @@ -7813,12 +7891,12 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ERROR (TEXTMERGE(loLang.C_ENDDEFINE_MARKER_NOT_FOUND_LOC)) ENDIF - toClase._PROPERTIES = .classProps2Memo( toClase ) - toClase._PROTECTED = .hiddenAndProtected_PAM( toClase ) - toClase._METHODS = .classMethods2Memo( toClase ) + toClase._PROPERTIES = .classProps2Memo( @toClase, @toFoxBin2Prg ) + toClase._PROTECTED = .hiddenAndProtected_PAM( @toClase ) + toClase._METHODS = .classMethods2Memo( @toClase ) toClase._RESERVED1 = IIF( .c_Type = 'SCX', '', 'Class' ) toClase._RESERVED2 = IIF( .c_Type = 'VCX' OR PROPER(toClase._Class) == 'Dataenvironment', TRANSFORM( toClase._AddObject_Count + 1 ), '' ) - toClase._RESERVED3 = .defined_PAM2Memo( toClase ) + toClase._RESERVED3 = .defined_PAM2Memo( @toClase ) toClase._RESERVED4 = toClase._ClassIcon toClase._RESERVED5 = toClase._ProjectClassIcon toClase._RESERVED6 = toClase._Scale @@ -8373,7 +8451,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base OR .lineIsOnlyCommentAndNoMetadata( @lcLine, @lc_Comentario ) && Excluida, vacía o solo Comentarios CASE .analyzeCodeBlock_DEFINE_CLASS( @toModulo, @loClase, @lcLine, @taCodeLines, @I, tnCodeLines ; - , @lcProcedureAbierto, @taLineasExclusion, @tnBloquesExclusion, @lc_Comentario ) + , @lcProcedureAbierto, @taLineasExclusion, @tnBloquesExclusion, @lc_Comentario, @toFoxBin2Prg ) *-- Puede haber varias clases definidas * llEXTERNAL_CLASS_Completed = .T. @@ -11948,12 +12026,18 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base * tnSort (v? IN ) Indica si se deben ordenar alfabéticamente los objetos y props (1), o no (0) * taPropsAndValues (!@ OUT) Array con las propiedades y comentarios * tnPropsAndValues_Count (!@ OUT) Cantidad de propiedades - * tcSortedMemo (@? OUT) Contenido del campo memo ordenado + * tcSortedMemo (?@ OUT) Contenido del campo memo ordenado + * toFoxBin2Prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS tcMemo, tnSort, taPropsAndValues, tnPropsAndValues_Count, tcSortedMemo + LPARAMETERS tcMemo, tnSort, taPropsAndValues, tnPropsAndValues_Count, tcSortedMemo, toFoxBin2Prg EXTERNAL ARRAY taPropsAndValues + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF + + TRY LOCAL laItems(1), I, X, lnLenAcum, lnPosEQ, lcPropName, lnLenVal, lcValue, lcMethods, lcLastIncompletePropName STORE '' TO tcSortedMemo, lcLastIncompletePropName @@ -12024,6 +12108,12 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base lcLastIncompletePropName = laItems(I) LOOP ENDIF + + * Skip ZOrderSet property if configured to + IF toFoxBin2Prg.l_RemoveZOrderSetFromProps AND ATC( '.ZOrderSet.', '.' + lcLastIncompletePropName + LEFT( laItems(I), lnPosEQ - 2 ) + '.' ) > 0 THEN + lcLastIncompletePropName = '' + LOOP + ENDIF X = X + 1 DIMENSION taPropsAndValues(X,2) @@ -12468,7 +12558,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *-- Analyze and count line methods, get method names and consolidate block code FOR I = 1 TO lnLineCount - IF toFoxBin2Prg.l_DropNullCharsFromCode + IF toFoxBin2Prg.l_RemoveNullCharsFromCode laLine(I) = CHRTRAN( laLine(I), C_NULL_CHAR, '' ) ENDIF @@ -12640,10 +12730,17 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base PROCEDURE write_ADD_OBJECTS_WithProperties - LPARAMETERS toRegObj, tcCodigo + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * toRegObj (v! IN ) Objeto de registro + * tcCodigo (@? OUT) Codigo generado + * toFoxBin2Prg (v! IN ) Referencia al objeto principal + *--------------------------------------------------------------------------------------------------- + LPARAMETERS toRegObj, tcCodigo, toFoxBin2Prg #IF .F. LOCAL toRegObj AS CL_OBJETO OF 'FOXBIN2PRG.PRG' + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF TRY @@ -12651,7 +12748,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base WITH THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG' *-- Defino los objetos a cargar - .get_PropsAndValuesFrom_PROPERTIES( toRegObj.PROPERTIES, 1, @laPropsAndValues, @lnPropsAndValues_Count, @lcMemo ) + .get_PropsAndValuesFrom_PROPERTIES( toRegObj.PROPERTIES, 1, @laPropsAndValues, @lnPropsAndValues_Count, @lcMemo, @toFoxBin2Prg ) lcMemo = .set_MultilineMemoWithAddObjectProperties( @laPropsAndValues, @lnPropsAndValues_Count, C_TAB + C_TAB, .T. ) IF '.' $ toRegObj.PARENT @@ -12757,7 +12854,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base PROCEDURE write_CLASS_PROPERTIES LPARAMETERS toRegClass, taPropsAndValues, taPropsAndComments, taProtected ; - , tnPropsAndValues_Count, tnPropsAndComments_Count, tnProtected_Count, tcCodigo + , tnPropsAndValues_Count, tnPropsAndComments_Count, tnProtected_Count, tcCodigo, toFoxBin2Prg EXTERNAL ARRAY taPropsAndValues, taPropsAndComments @@ -12771,7 +12868,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base DIMENSION taProtected(1) STORE '' TO lcHiddenProp, lcProtectedProp, lcPropsMethodsDefd STORE 0 TO tnPropsAndValues_Count, tnPropsAndComments_Count, tnProtected_Count - .get_PropsAndValuesFrom_PROPERTIES( toRegClass.PROPERTIES, 1, @taPropsAndValues, @tnPropsAndValues_Count, '' ) + .get_PropsAndValuesFrom_PROPERTIES( toRegClass.PROPERTIES, 1, @taPropsAndValues, @tnPropsAndValues_Count, '', @toFoxBin2Prg ) .get_PropsAndCommentsFrom_RESERVED3( toRegClass.RESERVED3, .T., @taPropsAndComments, @tnPropsAndComments_Count, '' ) .get_PropsFrom_PROTECTED( toRegClass.PROTECTED, .T., @taProtected, @tnProtected_Count, '' ) @@ -13628,7 +13725,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg .updateProgressbar( 'Processing Class ' + lcObjName + ' > Writing Properties...', lnStep, lnClassTotal*lnStepCount, 1 ) .write_CLASS_PROPERTIES( @loRegClass, @laPropsAndValues, @laPropsAndComments, @laProtected ; - , @lnPropsAndValues_Count, @lnPropsAndComments_Count, @lnProtected_Count, @lcCodigo ) + , @lnPropsAndValues_Count, @lnPropsAndComments_Count, @lnProtected_Count, @lcCodigo, @toFoxBin2Prg ) ASORT(laObjs, 3, -1, 0, 0) && Orden Alfabético (del SCAN original) @@ -13636,7 +13733,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg .updateProgressbar( 'Processing Class ' + lcObjName + ' > Writing Obtects with Properties...', lnStep, lnClassTotal*lnStepCount, 1 ) FOR I = 1 TO lnObjCount - .write_ADD_OBJECTS_WithProperties( laObjs(I,1), @lcCodigo ) + .write_ADD_OBJECTS_WithProperties( laObjs(I,1), @lcCodigo, @toFoxBin2Prg ) ENDFOR @@ -13972,7 +14069,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg .updateProgressbar( 'Processing Class ' + lcObjName + ' > Writing Properties...', lnStep, lnClassTotal*lnStepCount, 1 ) .write_CLASS_PROPERTIES( @loRegClass, @laPropsAndValues, @laPropsAndComments, @laProtected ; - , @lnPropsAndValues_Count, @lnPropsAndComments_Count, @lnProtected_Count, @lcCodigo ) + , @lnPropsAndValues_Count, @lnPropsAndComments_Count, @lnProtected_Count, @lcCodigo, @toFoxBin2Prg ) ASORT(laObjs, 3, -1, 0, 0) && Orden Alfabético de objetos (del SCAN original) @@ -13980,7 +14077,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg .updateProgressbar( 'Processing Class ' + lcObjName + ' > Writing Obtects with Properties...', lnStep, lnClassTotal*lnStepCount, 1 ) FOR I = 1 TO lnObjCount - .write_ADD_OBJECTS_WithProperties( laObjs(I,1), @lcCodigo ) + .write_ADD_OBJECTS_WithProperties( laObjs(I,1), @lcCodigo, @toFoxBin2Prg ) ENDFOR @@ -25005,6 +25102,8 @@ DEFINE CLASS CL_CFG AS CUSTOM l_ClearDBFLastUpdate = NULL n_OptimizeByFilestamp = NULL l_RedirectClassPerFileToMain = NULL + l_RemoveNullCharsFromCode = NULL + l_RemoveZOrderSetFromProps = NULL n_UseClassPerFile = NULL l_ClassPerFileCheck = NULL n_ExtraBackupLevels = NULL @@ -25046,6 +25145,8 @@ DEFINE CLASS CL_CFG AS CUSTOM .l_ClearDBFLastUpdate = toParentCFG.l_ClearDBFLastUpdate .n_OptimizeByFilestamp = toParentCFG.n_OptimizeByFilestamp .l_RedirectClassPerFileToMain = toParentCFG.l_RedirectClassPerFileToMain + .l_RemoveNullCharsFromCode = toParentCFG.l_RemoveNullCharsFromCode + .l_RemoveZOrderSetFromProps = toParentCFG.l_RemoveZOrderSetFromProps .n_UseClassPerFile = toParentCFG.n_UseClassPerFile .l_ClassPerFileCheck = toParentCFG.l_ClassPerFileCheck .n_ExtraBackupLevels = toParentCFG.n_ExtraBackupLevels From 4e8eb23e77eb79004aed3633bcceaa7e220cf35f Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 23 Apr 2015 01:06:55 +0200 Subject: [PATCH 03/14] =?UTF-8?q?-=20Actualizaci=C3=B3n=20de=20cr=C3=A9dit?= =?UTF-8?q?os=20y=20log=20de=20cambios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 4 ++-- foxbin2prg.prg | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index c1ac125..d3ef46f 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -18,7 +18,7 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg Change History ------------------------------------------------------------- 2015/04/23 v1.19.43 - +- Feature: Added new CFG setting "RemoveZOrderSetFromProps" for removing ZOrderSet property when you want to maintain the original class ZOrder always and avoid unnecesary differences (Ryan Harris) @@ -291,7 +291,7 @@ Change History ------------------------------------------------------------- - Fix on PJX regeneration caused for something missing in the last change of "Autor" to "Author" 2014/01/08 v1.19.1 -- Small change on TX2 headers to drop the "Generated" timestamp that causes innecesary differences / Updated the EXE version with the correct one +- Small change on TX2 headers to drop the "Generated" timestamp that causes unnecesary differences / Updated the EXE version with the correct one 2014/01/08 v1.19 - Added new debug flag on .vbs scripts to show a "End process" message for batch processing diff --git a/foxbin2prg.prg b/foxbin2prg.prg index b0476dd..25245b1 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -159,6 +159,7 @@ * 12/04/2015 FDBOZZO v1.19.42 Mejora API: Crear un método API get_DirSettings() para obtener información de seteos del directorio indicado (Lutz Scheffler) * 13/04/2015 FDBOZZO v1.19.42 Mejora: Permitir generar texto de una clase de una librería (Lutz Scheffler) * 16/04/2015 FDBOZZO v1.19.42 Mejora API: Renombrados los nombres de los métodos al Inglés para facilitar su entendimiento internacional (Mike Potjer) +* 23/04/2015 FDBOZZO v1.19.43 Mejora: Nueva configuración "RemoveZOrderSetFromProps" para quitar la propiedad ZOrderSet cuando se quiere mantener el ZOrder de la clase original siempre y evitar diferencias innecesarias (Ryan Harris) * * *--------------------------------------------------------------------------------------------------- @@ -239,6 +240,7 @@ * 10/04/2015 Lutz Scheffler Mejora v1.19.41: Crear un método API get_DirSettings() para obtener información de seteos del directorio indicado (Agregado en v1.19.42) * 12/04/2015 Lutz Scheffler Mejora v1.19.41: Permitir generar texto de una clase de una librería (Agregado en v1.19.42) * 15/04/2015 Mike Potjer Sugerencia v1.19.41: Los nombres de los métodos en Inglés facilitarían su entendimiento a más personas (Agregado en v1.19.42) +* 22/04/2015 Ryan Harris Mejora v1.19.42: Permitir que FoxBin quie los ZOrderProps que cambian constantemente y provocan diferencias (Agregado en v1.19.43) * * *--------------------------------------------------------------------------------------------------- From 0947ba480296f1b4d70da166213185c5e3941b89 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 24 Apr 2015 18:19:16 +0200 Subject: [PATCH 04/14] =?UTF-8?q?-=20Arreglo=20mensaje=20ayuda=20con=20seg?= =?UTF-8?q?undo=20mensaje=20de=20"Proceso=20finalizado"=20-=20Hacer=20que?= =?UTF-8?q?=20la=20progressbar=20no=20se=20convierta=20en=20la=20ventana?= =?UTF-8?q?=20de=20salida=20por=20defecto=20de=20los=20=3F=20(Lutz=20Schef?= =?UTF-8?q?fler)=20-=20Actualizaci=C3=B3n=20cr=C3=A9ditos=20y=20archivo=20?= =?UTF-8?q?de=20versiones=20-=20Arreglo=20del=20mensaje=20de=20validaci?= =?UTF-8?q?=C3=B3n=20de=20VFP9=20SP1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 4 ++-- foxbin2prg.cfg.txt | 11 +++++------ foxbin2prg.exe | Bin 571640 -> 573254 bytes foxbin2prg.pj2 | 2 +- foxbin2prg.pjt | Bin 762957 -> 765019 bytes foxbin2prg.pjx | Bin 10033 -> 10033 bytes foxbin2prg.prg | 20 ++++++++++++-------- 7 files changed, 20 insertions(+), 17 deletions(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index d3ef46f..83e4d62 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -18,8 +18,8 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg Change History ------------------------------------------------------------- 2015/04/23 v1.19.43 -- Feature: Added new CFG setting "RemoveZOrderSetFromProps" for removing ZOrderSet property when you want to maintain the original class ZOrder always and avoid unnecesary differences (Ryan Harris) - +- Feature: Added new CFG setting "RemoveZOrderSetFromProps" for removing ZOrderSet property when you want to maintain the original class ZOrder always, avoid unnecesary differences and fix some visual on top/on bottom control problems (Ryan Harris) +- Feature: Do not allow progressbar window become the default output window of ? command (Lutz Scheffler) 2015/04/16 v1.19.42 diff --git a/foxbin2prg.cfg.txt b/foxbin2prg.cfg.txt index 228ed4c..08596bc 100644 --- a/foxbin2prg.cfg.txt +++ b/foxbin2prg.cfg.txt @@ -1,13 +1,13 @@ **************************************************************************************************** -* FOXBIN2PRG v1.19.40 +* FOXBIN2PRG v1.19.43 * CONFIGURATION FILE / ARCHIVO DE CONFIGURACIÓN **************************************************************************************************** **************************************************************************************************** * SECTION DOCUMENTATION OF OPTIONS / SECCIÓN DE DOCUMENTACIÓN DE OPCIONES * -* EN: Note: This values have precedence over internal parameters and parameters used on scripts -* ES: Nota: Estos valores tienen precedencia sobre los parámetros internos y los parámetros usados en los scripts +* EN: Note: This values have precedence over internal parameters +* ES: Nota: Estos valores tienen precedencia sobre los parámetros internos * * DETAIL OF SUPPORTED VALUES / DETALLE DE VALORES SOPORTADOS * If no values given, these are the DEFAULTS / Si no se proporcionan valores, estos son los PREDETERMINADOS @@ -21,7 +21,8 @@ * ClearUniqueID: 1 && 0=Keep UniqueID, 1=Clear Unique ID. Useful for Diff and Merge / 0=Mantener UniqueID, 1=Borrar Unique ID. Util para Diff y Merge * ClearDBFLastUpdate: 1 && 0=Keep DBF LastUpdate, 1=Clear DBF LastUpdate. Useful for Diff. / 0=Mantener DBF LastDate, , 1=Borrar DBF LastDate. Util para Diff. * OptimizeByFilestamp: 0 && Optimize file regeneration depending on file timestamp / Optimizar la regeneración de archivos dependiendo del timestamp de archivo -* DropNullCharsFromCode: 1 && 1=Drop NULL chars from source code / 0=Leave Nulls in code, if any +* RemoveNullCharsFromCode: 1 && 1=Drop NULL chars from source code / 0=Leave Nulls in code, if any +* RemoveZOrderSetFromProps: 0 && 0=Do not remove ZOrderSet property from object, 1=Remove ZOrderSet property from object / 0=No quitar la propiedad ZOrderSet de los objetos, 1=Quitar la propiedad ZOrderSet de los objetos * Language: (auto) && Language of shown messages and LOGs. EN=English, FR=French, ES=Español, DE=German, Not defined = AUTOMATIC [DEFAULT] *-- CONVERTION OPTIONS / OPCIONES DE CONVERSIÓN @@ -48,8 +49,6 @@ **************************************************************************************************** -* YOU CAN MODIFY FROM HERE / PUEDE MODIFICAR DESDE AQUÍ - * EN: Uncomment for SourceSafe compatibility. You can change the extension on the right side. * ES: Descomentar para compatibilidad con SourceSafe. Puede cambiar la extensión del lado derecho. *--------------------------------------------------------------------------------------------------- diff --git a/foxbin2prg.exe b/foxbin2prg.exe index e584548aaf1c9ea5c1241b8fe1ac97b476cd105f..cbb21a57e680d333648fcc1cb532161a40f797df 100644 GIT binary patch delta 30678 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 delta 30159 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 diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2 index a8fd6c2..1a14ed2 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 = "42" +_Revision = "43" _LanguageID = "1034" _AutoIncrement = "0" * diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index 2bb14b3af08a8eef0bb52c8979f62a25e6c60bc7..f09ef5448a3812433e84526a8526357c7a280c50 100644 GIT binary patch delta 34302 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®=rm?9(GHyMO=mti00xTwg->84c%R+yLhHf8NWY&2OtQA-xBf z!I)ea!Nzr`lHv!p4W!F&tFZw=gUxWw5zamQj=|LQ9W^pNbeI{2G1kz{E#mI>BL~;1 z(Z8s4(ogxOq^DV0IOBqfseI6pN7MXw)WERt(WZbGD>JSq8I_jYAMXTajiKG|sKH{( zadiA0H1)s|x{k!f6QvZqP7N2oD5DPRFs8;$r2KViP@G$ZGp0(6XXWtCFkRkJDpMRG z0gO&2X#uS~DxKLcnheK+y2;N;?Z2(cSM)69;X5Cs&T5{0#h=ag#D^7l{MC6TYg$*>cD}`o}*>&sxjK$m8JxG zdPEZ~P)vB04zE{()jnBinS*+!fAK1{Sg%HCj)olA_BD>QKH8to>nlqZBSM5hxbj8$icX+)OiE)>${CcZ9v6#+)0ma zP{YKB_Rvck)X1@Qd(C8AhIi?6&XC!^8qw>h8Q_w%oZt-Q-;yWJnE@`z(N`#HqZ$}7 z6dTCcW@kRE7_O%ZZjO6{9wlX?$5%dblLl>6W7LmC(U1w^73yc5+^2L*SrZ%W+Nee< zy)kai(KsC|PH?9)8(|U0y~u5o8ZQp?qc)qM|7D=5A49@EG{`3%G_U5ZLrtD5L(3vK z!}jm2pNgS%n@~*~6KMY?#J;Qe~&NUb)jfxhVzOc|F_-%=X38O2*sN;5WNGQOppR%}N1i=RZ>Hly3^nM%hut4+mK z50mYEwTV_fjYr_dV8e%cXn`#ron>MT-G{d%@51Fzm^^nj0jN)Dc4-lJ%WLOS_4{g~ z_}$aA;eFM=jdi|LmAlRUMOEX<3imy0^4y@xadK)!MZwe`mzdlrMk~{`C~?&q3bVu5 z$Gk&b?Z|Y@db;1P21n3lQ_jb9JNZ4+Gx}tuo1JjV7JA+eYYEs&TkUF`IDZ?R;Miw7 z$y?O8c29h0>N+Mt`HoH*ywha+I-)c>U;p&HRJ{G2`sPl`--0gm+8&y=1(j9)2`$^A z#)RMc#8mQjDCG^!!%N{g*|~Y?i$A3wAR@+nOTq_gQ1w&aI+M*Peki-7C^@6JsHCtm z<$Grg*`puA{H+q*1U~XX%slTqW(MH`NyVg6KDu+YItSO)u!D|sF?aMa$2{R%?B)wt zRJs^J?iN;!H|*|kJQ`Ub;sq`E()5R_Dhftd<)`JY?`g7Knh|*M1xHSI6ce*J1NY9H ziR~Z88NPQI^NTpc4+9gQz3ndM2s=y^xK;J`>-eAv?>O1+4^o${Xr1{FQo&Z$-#>4> zDPgK_F;DdA>FS2MWgfb&;{$+Hg zBWkkAHETqfLI<|NJ7rFx3;g%FDdfE!gVgaUl(-$;IpHDdw;es^_Eeg%9pi7vBU~FB zUwpZeTQ;R<(d6RMMcl(KnocXWt1i^gMp;^~zg!SopXCXKmO>XFgP;I$z&t2FX0t zK0V*sY(it%#)ly8zYf)B^4T6|p4d#?cc@X;OJ*S5{8+{A+WV%uvB6@tBcIuNVcgxJ zHp=U@#SHc|)_M6TWIi9biYkt6H3L*`vwXGKr{|FEPL`{_S2b27gKgo z^POsFqeY(?Oc<|AD{G(0avJ>cFQ{av8Wr*5HzwaSQRD@sdZ4Hx>)Sig`qUX98bi6+ zS>F4ezJ#tA{R3UzsRjiu{D}+4xWdn!GB8aX)T2M0e;UeQJ5w4lWx1MIOv$QLG3~Xf3`h0*1ctk$G1alDY%2KOv`f@jl zS{_Z8@oQD$jBq3WJ{RISXzUVBZ%Qd2LD;Va<$r{F8K20*6I|i%wKlL>iAp-{~TZf zqY}pqH32Vs(kCN1XmPhn{HnkVc2?rcg>-ojs-)vMgKt*Jvhf_WbmivPQcC$4r94te z`TV!%6q@-lN*nzMmuuycdtQ;=eXhYb>v7y% z>iUTq<@NT{rm$H>Ve_c;6GZX;JkCvWMe*ArgCD3Z<@{t9|Cwb5HVg5?3JzMk0>6Hh z&LgtGes6Go8yBD6Hn6Gm=DQrUbp@{2NZmh$(zeZ<-_FJV%fyCKv93l*bMO)1hscd@S5apM46Ke{?6E`&122irU2kJHSiBw_r~RJH*_t^AV-Q5oC@# z1B)uK!_f32>hPJ`B=Vb&Of_Hb7|o!bxUp+GwFmdmjL+1-!SnW*Le62sl;hFI?lnUU zZ_XEu1y$H~FvIz<``m%MX)ZrVe|&~XT#LixzE=$kc=Ky6*_mk$mxe{{pxE!I+g>%< z+Vwjl%%~;t=nph+FQ!t;8QQQHGrF>0>BwGG#EG+8Q}sSIu-Psvmr8MIzu;x!`dY^W44#>%(*g9?J~dL#N$vSZ z7$;+ViW>9quC6#nCR5A(YVeSX4kq85S9pHUqA_TooPt7LS>;{Lp!&%iNjG_>A^&Kg zZkWy)gJ%Y2%LRpKF0Tw)wjXl(BbZyFNr-gKk{6l zDUHkTyonqWRajhEUQ#eMCFWndVU*fS3%37yKrM8mYaKN|`}0TDEvk50~-J0-+y_L1vMI^2&N?JC8K}eNaII?$d(l$oJ}c8eD`t z96P2adsX8smcRJe80SHFk$_)7OfU}ha8Shg{7o~5NYgtcf3?gZ-5ewijZNtmCZ8*| zyd%Qj+A^*Jb3T9J3aXq;0!h!DS8>fITC>J;7QdH=Hy@z{ow9PIUsF zB7Y$Ow+wJ5W9ERr1^_(JiF=wDr!r4%=m(3|02IkqTE~};D|9l#F+CW#ez6v@^7rZat2f_iY)r+3{DR4R_xx7fK{3y`*p8czU2sal z2ZgRA^w9kOpZc{u>AE^i^z~r_aAEndZl1Lk&wS7(jAg!35MQ@-i(At_kWZC(|<<^VCqwN5keb|J+STn zR0Jx$sRsFmA(TwZ}V~*l_j&1;?n#id=!nBB>FDeZSJX!dN8zO?xNlMp4zP)+Oc=h z9&u0YHV*B$hP5r__tb9d&~9`W?OFHK#%oVTx#RDm{lY!9+dH%y-$ncFduroN4kPV^ zyJ+var*_9%bpv>NH@S=UH(a~ZzpX_vttHW+-t;c&zj5_8cU6bA8L2n>xBBxBYT7xgNx?(z55p_!uQ8=QO>jVJG&Agswqu=QQkU%sb$ zGOWo^Z*v#*^<4d~ZJP{hGSu7tTb*99+@o!io#xc80nLl|)O6ZY`vx>qrF*n(veTYA z{9Ds#TO51I_h{T?r&V>li@u+s|IgO-meIPM?xK?Letnq5%zvi%frpmuaWUPGnODISq4ASltt!trz2c_uRN8z5R zdoMJk^X*Cg+Pkw!tu)U~i>GooO`;4pt!cRVg8IK3H~|&mZU|=>(>HO1t7)3^YUDFH zq+ZP}CkP1!Bf${x3J_){%&nn*!nJN%SiM#YpeT3EuR7GB!{3(tPUX##pI2N}f{E+> zJZk3*&CEk5L}|7=&z@VAbXX@E_4z7XIJS zJFZgwJ$fgzZWPaaB3-fu|IZEpV%RQ zcc!Ly(}GQ9Tt(vxS!8;@p-daPXk&Tx=4$&wHD-)qxsOq9L=46%GNaDGVRXRBJ`ZTLvNW0ULoHcZLW@MP!7GTJO_~! zJV0~PGjg3`e;RspGe^^C=m0ZHPc_XENsSqrH2^7Gw+|bjJucFvfzHz1bj5wkF6U`O zMVdI+87AP~qL~rV{={JIbBn*l#lamWN0@9MJ6!w5J5q6RtS-vtqE!3v5^bdSWE^gMw#ksb&TFxy1eLgJ)}3Mc)7yCy-O9T)e-w5KTPgNzL6#FD%er zqaM$r-CJ+beC*i^wd)ey_q^7^j4#opokX*q*S7g5yBMuqR2zHV5-m}VZ0q8*b5ZSG zR0q;O(!y!iQtglEjxKH|7ljK+M)nx%Zh2<$#4ZWceGane^@_Gfq+gdiEwQ^xA(cG0 zYj{=bb9qTG z&40;j+C2ZhuE2gSDw9^drd^N34JU_QmW#@EQ91O%>sl{=+;egW<+`YWcKUus<>|0i4$b6nJu_K{y}(?q)PA7=+!=n7jzu%sYryd9|x z{Z@NP@PF17w%A2IM?uH5?)F|swdX{-_`S1Vz2p*DYKH*6&=7mdX#*=^7+#I z!CIib;FNaEDy*`noYNKw!czN}ziU&qIKKHBivbHCzvCo-UjU?09j`j{8`0ov+VB7K zjv(F-NKu5<_Uc>On_BxOssfK!e@{-re5zu?kv5#~Y3$V%m*Q?TE^8D|E;0kh^rlfZ zJyML%qM0_mg}Aej{|3=sn;s(0t2Dt)4t6;}q6+X|2PouV0S@K3&I=qgnred2Ie6+} z11!-%@0>Z{Ss^-5Z=5ZNc`cy+U)cGb@_Yl6mJx0?5#pL-EszdCX z`IOCnZ_TI2`EUFJvh&~U1@ybF2akAY0WYO)e6}+?6PKz7rfc}pW@cu38h-`*<7e*# z^Q(5a2WiR<8feIFdya=2U;V`OjlTs2zDT3o^ic7`muQ+B^62pnEpyYu#If(vcK&;O zGkx!-hl`S(YTfi0G4>M*ch@7tXFjDAcRg5~bC8C*>rKRrZ|HG%Jx(0|4ZXpC`I)&p z;`{D##{jZR87Us~m%`--(clifp)7ugy5 z$wQBgv7T|2jo%y?+$VjAQ2-8jJv2YV6Y!%Bo={G_K>a5N~_wF_ysK&w0rpLy)Ev!mPNuuVWuERsq6t75~Sav++h8@u-o1(M9&t5uV_J-9_T$< zKFq#i(L#Y(AjAk8MA5zhb9D<|g!wE|?-e2nhs9LZL)gG(vWY?}yTS?tZ~Q*X>;X~w z2oY~GSH|eC2vK(LSbe26W(zA9X0pq|Vd%`X2>48MfsiT)!f2sN_{NfoV=?=|rg~pd zz9Bruo}%y;`XawU27dtbCW=m)MvX@+?r)(_wq9bFMG>z-rnl7dLpO;JiT_3VuL_gJ zmBQnAoxTT)6=ZN$*>|?o`-#FPyPl+vbcfmoBr%63bkzq*mC|8m-_cbMvZys|4nkI0 zdeBd)`cpm?;z#T;X0fcYe8mO`1B4{e{%{ZdiYVqwa?H$ z;Q@6S`u_R>_OE;CU&Kn!S_(w_>hXG_r28O8sfZYLMM)3n{&b;Cf89G(*a$BEGeVQa zRQqe?dRsxc!bFswj!)EAi_ePo=@ohxNti*~ChPs^#AIEvD^v8nqTbyq{L)%T5^~Xa z1=a8)=cno|Dd=H+7p;F-m+0ujx}TUBP8S~50|H0ItYqDll`IF(C1EArn_J0N;1m79 zk08GrPEbVb&0=x+LHt0;8W6cF#4m<_)X-tQg1HT6BdyBExar++^qS)KOUxW4$1b#`0ZDFjM zr2#yE=O7qcA@CgN_walTydC%l&lSAl*4bMAq_h@0&Iy}=)e0wai>1APKBaEyX17&s7f zaBGmjN`WJB*O4UxT*EU3j7GqbkUE2B25>WAj}U=xM?0ev`z_US5N6t?J^O@cj&>P|fb{@DA_;=7h zHx}5Rz*B)E6L58~2|h3_q5gRd3Sz|9Ox;T0y_>I1pG4SlPF0oFm5q3?-8giJmVC!|0poN z0C;nxfIf#30UrlFaErhm2F4XPHjC4{1eRrk(Ez^%`n5d*dj%M$zU(mQXFq}A0!t|6 zZqNhv3T!{HJMaw9UI$XppWBHnTt`;{ZVP&QFOfY4 z{44N9&?Wsu_8ag`;Fmzpenw;4*MRr1P4D>e}L^cKZL*QGW zW8V|mGT;NiLqPArRpfj5F4^{L4E0Ve>@0X=fB$OZ!^0zV15$3Brg2;3fc z66lZvBAW!<1GqbA|IbA>2RIYB^I4Jo`bV|MZg|0Kf#H2YWG~@q=grtO;BBD0U%>;s z5O_T3>v-~kmjK887h!mcfnNYF1-$}KDezL@s=rWUbt3x+_+8*zpd)UJ>@@I3;7rg| zjepL9u^Eg{KzrfMr%S+FfIEYJ0uOfe*mmGe0T%XHu!W7nySPVz*Mja4YGIE9p8_rg z9og8zo&)w(8S4-FQ9PG`{ed@veyyd2;j3S)HSkf;)e(snmgvh^H!ymDKGzzbGzZQA zZr;YiV%u5R5a2xE9MBJUw!r(LbinU|KAB=+uLC~{9Ng8y!n#}7`@l1}Jm^k6EbJrT zr-3Je{<*h>eGU8?a6lhRHQUzT!el>m88EJZj?1yIX2AP^M}QugYhj&%zW`ncdeuM+ z>jnHZ@E4#x2IE=>@KNA)paZ>R>Cy3)ehf${l>ufl&auDQ=cxYncVWxr_lFjj0*?m0u(`yJ0{3!*|Nj8Mg4?GTz!(65 zj-baTNh}})MhE;X=oK9$)*SeL;C-NfNs-u-z~g}Zx+24PHUd8gJQVb`-V)ma{1kAb zJ`#H~Q(|%`nhf}R&>4e~Dd631@c&Z)<_wou2^dEp@FD1v7`&eYJ`L;423!I>1@s|2Ujdf^D-TPo?`(;E54-~S3DCJKpdXG5 zz?&`rJ${|Uz60(A{08W_gAz-Pz~~8_4|?AriQNXSUIm7Lfj#RhiA6=iYJul)`acqD z3%rFZfX1H;VOhZ614m)t?{*SjyaWC(a5d=lzo3SIMYz|?pnc9u>>#iga4zUpm$}`* zYXXl0-Lh6oMij z1pFTGLeO6|l38LjV?P3G@iOd2W($BNxc3XmGCSHI9~lL{AJ~>9vz8ckC&yGXHV=$h zr7~Odq|C}<(dNKMKu=#Iv)jNvaKF#LCA09&`1*Ss1{dIdp!e*SSz05M2KXxI6NhBB z3;229;KMR|2Y(GQG#;~Q;GaRW6Zq?hz$bw_fo^q1W-F?}u)rS|1GM>FX2*aV1DAuI zdRb<{jp4_E-v|8}K9f2WxDuFMm)Yf8G9%y@fs^ZG_KT#jZ-I9J>sBmPy%ZLgfDfYs zPXygH6z7h>VQ{}?pgYDYtom~>I)O0>U{Mo=sZG$wf%k!4-V%Ra1$Zj(5zt|s6*d)k z18`A_!d9m%>=)p#fWHDgbeO{8n__kY_xcp*BLxck40tf`%_4>MeM(^=%}^1*4}sn^ zAM>w2z_7qQ{xV--$6rDO%~1ou?n@Q+^J;}n0qzAH^qRtEy{)jVz$1aDtW(%RJHE{b zJPUXy=+V0rmeK-)3-AKaAMR1ubl~@ayMC=OpKld*4EO`!OwbpPrX9M34dX+mqhzYzD_$cTZ zepWWO6^s=44baoWtZWPLY2Y_O_pZj@?ZM~q`QNf&3qWVZSXp=?x()pIL!hrW!)x2X zU4bK;TiNi|R`v{VA@E|*6NX#aVPGBZdOPUAF;@0b5@tKVS)luj2QL|(6nHx5FDF@9 z3h<-Aw?S9G_b74&#!@iOfS!R5w{8Jm1H2V(A--1Z48Q=YOi{%2Q@0w;s^n`>oJz$bt+K%ZS;Wi5dvxcjh$)@qiu*vj(32nJ&o z=y}f}6Tp1H`4sez&s*67;3mKxORVghx2$X#@GM~Wx2^2A_pB_m4b}|6ft#&t@^&jL z0e%a3HRzomS=mb9Ex;E*SAJq;p8$UZJn0jZ(EC#>I|{}pV4MT(ans8F0Dcw&$Z61X zFuUy04wDi1?-5Bh=6j!wz0e+|h5H>b!p26;v$0DZ;P>Hf=Ym$|gVza727DUyv6VJf z1-ue?{VEUj&W&KPZh*HnLKV;hgy*ymu3g+HEyiQS=-Ha4RRG5|d07aNm)wXrk6 zF99ckZiVME@KWGB(96!+*q^}5fWHO($saZ*q`=^SFM=L%!N!7s*8^|HpTHP+#m2e- zZvn2J0Wcj;Z!kUp<5kdqT(z-G;O)ST{^i`I!d3Pl7_|_n z13e^CWix?A3>ecvua8pMd|(ZDW30+vj8oYMz&^kqHd9&0R`?bba5Qis=;?_n^Y6x3 zQ{aG9l?})9B5(`fXF)%orm_{lNs-kk0l>j@mAwrHAMr#?eRJ?^0qy`i1GL^pWjld0 zfqQ`dw6Ds31Re@}74(`Mm0bXy1pF=N!Xd~&cdQG5Uje=PK74l_cn9#Nkt(YmrLx(; zpH+kL4#4MlUIb%5@CU^xahb{v0AB(=13F=n%EVNR{ZW`7fW9?LWsQM{11HW_+1?ja zwi5U(@D0#zZ>yMkqsvAk)1bdwud=Uz=K|jbU9dxCSAnaKfH4Q)*Ig72($;z2OWM`Wga~-%LPsY{Vbj+;9kI6Kvx_=4FKN{ zeB=j}ZTwMXPXiYL{{*_|50xzeehv6}&^IotOh|_#1CG9;vL?7Y9Fty+@feIOfUhKt zje~%HEcSI|+z+v8Y&&oya5?A^HjNzsjt7oZH8$BBe>D_13wSB$a{(G_l!0X!4-eGX zp)ie&1bzniXspJ@H`Cb1!0!Uj2fZ~}W4Eip_y&xN0L?mUtaUF8G{B=ki>VsR2A1Nm z7zI7FkH#JXZVEgNbhB)YeE{4acogU}c^bP0JOQ}vFpY%`*H}((EY*PffSypKvHO76 z051gnbE(Fv*Madh7+M)hRDsWp0Url`3v|>J4VI4#0S^K#Jgl)u;G4kKNAbeW6B_Fc z+_Vt}BhZ(g(by8;Okm%68td@9#=Zoe20Q`ul$SLY(HEW&c=rm8bzQ4fvl(D~3`W6P z99ON=*f!wPz(+uj-lVbfz*m4@0KL|(VeW+*iHFf{LE^hK76;r6csytv?64x>{=lDu z-tmRTRsv51e(_6<1su`XpTN%ncLe?Tv1*MaW@2X&j4j8Iz;RSF@Fw6NK!^XRu|nV- zz{7viSlurgn*)3XIQmzOeS2PGdx6!)7=r&mbzae!+#iD#@VuKEtGuPLS-^?FD?qFG zu-vC(IGnPn}sPB@C%?nY^<~Uf&T-11@yQ?oy`Hh23(S? zvv2V?eLeI9ut0$&C03i_Q2ojnb#HoI z_9yT_;27*)Wk02}W&<#p0lxM$VosC+J4Clg#f#-pq{f^H10oMVq1>Js^&i=oW&ON5e zG7iAMxE#ap{U9zeIDpU?Mt}%RZpi}AfItk$xTPRMUJ@6LH8CqX8iiU&adF8c4Kz%q zm7w7USs^ee#2q1{GjF8SQgU+~r%swZ)E^&vo}Y)~xxDZ1@(RZWJT-)aP5A90O?+Nr zLE;C7%$mfFYEnpG4*{Qxngm_e?>oWXEU3=Q7yf3HC}x9hGF@Mfe>va*2Diui&}(CL7QGF91A+BOWrHqxYk78f8yv{VLOs49ibV+j{-rK%B_tNy^{6h7I(13I-^BfU zb#eG!mqEM+pFXEc;YA)$Db)@?z@c(um9zBWPb^^}f6ZAEN3rglKZ}(>K5~qs(`Fa8 zU^MFhZW4P+EQd5IZ+^2!0!GW4=G>#Vdf@;5g>_37U}^{6lybyyf z+nA2$3Yl9B2T_g&31OJ^3O19+33MV;OsiIsMhN~|sX-bTHl0}UvAFTLL4IbK{EG!S zHw$F;8^oVkp`8U*jlT|iF)RGRli7*C3fD6?@SAS(5!WQ_$J|gK%bLPB!ye2AQ|34p z9D#Ln!l1C3L7^FsW>C1qpkQ1|1Br(*C-gEW4B)M}VotC!Cu~cg!@*rS04}4?AHl!D zzksjNrZ1%J?!kQ@@@KT+Z{Z`jy@M0y5j3I}0%HWc4fN>&^ntkIQ9gu^&}O&NRzHbP z!nF}Jns^vK2%DmuBq)(Zg;&9ybh*#s8*m$JrK#PL#H)#WmN?0FTDCU43Gar>9;g17 zB(nnuoS?nB;yYigDXellz>lBArR!-*<^9K3!ZUO@70`;zC0bkw*7~=fEGd z&~&8p;PCeFfLn6`Td&r{FHG zckm$G2JfN1@4&Yiwp__++#Mf=3&?~A3%GN<1-?qA+e#*k!k@aM#Ggb|Mq*3G^I*M8=UAQvkEeI( wPm3Fgqmjf>MZg4?kvOj6?f8E9Ac>=-^wax?v}GQ?*XQv%(tP~)_5Uyb0*Xaj1^@s6 delta 32391 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 diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx index a9c01a286a73cdd259ea568a1acd20059b66d9d7..94552a9edcb946073687b1ceeb52fcd9478182f4 100644 GIT binary patch delta 211 zcmdn!x6zNqfS*NTBg=Lcb`ui=VOj~=3{c<}qM+cW00gEcCLp1%Rm==e zPB1e7`R2x(U$d?hVKFr}F`v9ZMq=^?sWb$~NE(T=MfwF;X7d6W7AAz619IuiP|cg2 mVVjWM#c * *--------------------------------------------------------------------------------------------------- @@ -240,7 +241,8 @@ * 10/04/2015 Lutz Scheffler Mejora v1.19.41: Crear un método API get_DirSettings() para obtener información de seteos del directorio indicado (Agregado en v1.19.42) * 12/04/2015 Lutz Scheffler Mejora v1.19.41: Permitir generar texto de una clase de una librería (Agregado en v1.19.42) * 15/04/2015 Mike Potjer Sugerencia v1.19.41: Los nombres de los métodos en Inglés facilitarían su entendimiento a más personas (Agregado en v1.19.42) -* 22/04/2015 Ryan Harris Mejora v1.19.42: Permitir que FoxBin quie los ZOrderProps que cambian constantemente y provocan diferencias (Agregado en v1.19.43) +* 22/04/2015 Ryan Harris Mejora v1.19.42: Permitir que FoxBin quite los ZOrderProps de los objetos, que cambian constantemente, provocan diferencias y a veces dan problemas de objeto encima/debajo (Agregado en v1.19.43) +* 23/04/2015 Lutz Scheffler Mejora v1.19.42: Hacer que la progressbar no se convierta en la ventana de salida por defecto de los ? (Agregado en v1.19.43) * * *--------------------------------------------------------------------------------------------------- @@ -2346,7 +2348,7 @@ DEFINE CLASS c_foxbin2prg AS Session IF VERSION(5) < 900 OR INT( VAL( SUBSTR( VERSION(4), RAT('.', VERSION(4)) + 1 ) ) ) < 3504 - ERROR C_INCORRECT_VFP9_VERSION__MISSING_SP1_LOC + ERROR loLang.C_INCORRECT_VFP9_VERSION__MISSING_SP1_LOC ENDIF IF .l_AutoClearProcessedFiles THEN @@ -2789,10 +2791,6 @@ DEFINE CLASS c_foxbin2prg AS Session ENDIF ENDIF - *IF THIS.l_ShowErrors AND ATC('-SHOWMSG', ('-' + tcType)) >= 1 - * MESSAGEBOX( lcErrorInfo, 0 + lnErrorIcon + 4096, loLang.C_FOXBIN2PRG_ERROR_CAPTION_LOC, 60000 ) - *ENDIF - IF tlRelanzarError THROW ENDIF @@ -2809,13 +2807,17 @@ DEFINE CLASS c_foxbin2prg AS Session DO CASE CASE EVL( lcInputFile_Type, C_FILETYPE_QUERYSUPPORT ) <> C_FILETYPE_QUERYSUPPORT ; - AND ( ATC('-SHOWMSG', ('-' + tcType)) >= 1 OR THIS.l_ShowErrors AND lnCodError > 0 ) + AND ATC('-SHOWMSG', ('-' + tcType)) >= 1 ; + OR THIS.l_ShowErrors AND lnCodError > 0 AND NOT ISNULL(toEx) THIS.writeErrorLog_Flush() DO CASE + CASE lnCodError = 1098 && User Error + MESSAGEBOX( toEx.Message, 0+64+4096, 'FoxBin2Prg', 60000 ) + loWSH.Run( THIS.c_ErrorLogFile, 3 ) + CASE lnCodError = 1799 && Conversion Cancelled MESSAGEBOX( loLang.C_CONVERSION_CANCELLED_BY_USER_LOC + '!', 0+64+4096, 'FoxBin2Prg', 60000 ) - *loWSH.Run( THIS.c_ErrorLogFile, 3 ) CASE THIS.l_Error MESSAGEBOX( loLang.C_END_OF_PROCESS_LOC + '! (' + loLang.C_WITH_ERRORS_LOC + ')', 0+48+4096, 'FoxBin2Prg', 60000 ) @@ -3993,6 +3995,7 @@ DEFINE CLASS frm_avance AS Form Width = 628 ShowWindow = 2 DoCreate = .T. + AllowOutput = .F. AutoCenter = .T. BorderStyle = 2 ControlBox = .F. @@ -4469,6 +4472,7 @@ DEFINE CLASS frm_interactive AS Form Width = 380 ShowWindow = 2 DoCreate = .T. + AllowOutput = .F. AutoCenter = .T. BorderStyle = 2 Caption = "FoxBin2Prg" From 06a84c0bbe9c1da08563c030c8774daaa7506f6c Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 24 Apr 2015 18:30:02 +0200 Subject: [PATCH 05/14] - Ajuste de comentarios en log de versiones --- FoxBin2PRGVersionFile.txt | 5 +++-- foxbin2prg.exe | Bin 573254 -> 573254 bytes foxbin2prg.prg | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 83e4d62..981a4d2 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -3,7 +3,7 @@ Lparameters toUpdateInfo Local lcNote With toUpdateInfo .VersionNumber = 'v1.19.43' - .VersionDate = Date(2015,04,22) + .VersionDate = Date(2015,04,24) .SourceFileUrl = 'http://vfpxrepository.com/dl/thorupdate/Projects/FoxBin2Prg/FoxBin2Prg.Zip' .Link = 'http://vfpx.codeplex.com/wikipage?title=FoxBin2PRG' @@ -17,9 +17,10 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg Change History ------------------------------------------------------------- -2015/04/23 v1.19.43 +2015/04/24 v1.19.43 - Feature: Added new CFG setting "RemoveZOrderSetFromProps" for removing ZOrderSet property when you want to maintain the original class ZOrder always, avoid unnecesary differences and fix some visual on top/on bottom control problems (Ryan Harris) - Feature: Do not allow progressbar window become the default output window of ? command (Lutz Scheffler) +- Bug Fix: Fixed VFP9 SP1 validation message 2015/04/16 v1.19.42 diff --git a/foxbin2prg.exe b/foxbin2prg.exe index cbb21a57e680d333648fcc1cb532161a40f797df..312775d5d1c08d6646f006b4f9126c2d9df773af 100644 GIT binary patch delta 7894 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�Uu5*eZSm0md>Uu-D}b{C6t;k<5WoJR;EZRXNsdhL>xVA1P27n5OGCegcIA%7 zm&x5*`E?fO;u+*8UHqz&MpLT7S#|X*l<_sLjQ8~RE0=K$SHUGd@GEJIU#Dnj3)#S=NS(t^xs&W&O?=JHzs5^}XhyLW3cb#8N@uxU;n_q=?__ZHT#7}

a z8$49P7s;y}Jl6^02?l;fUd{e~eF?4r7W?~#?B~z282J~^CC_2|{ysD5Q+$&wr|bVG zvY-U16*+;;Y>DUqZID7XxX*6&98IGF9?`?41#C7=?)d7s+$xvOu$jEg4Vk|e=(yLV zSoR7(a)XV>qsV31E8OH{CgD%W-?DE=Bu{1Jl4IC6%&N}Eg@=`|u)Mf_=hG_6Z|u(FJiR4}gcU&Od_J;I-sC zEYr)e?B0r_pL_TpG?sDr2rg)ty5lr?{!if~g(w&6^axY8u#cm3mu6MVGJ6rr>Y_N8 zJdb5{4vxbo$SGA#Mb+h|!js9_ta5AO-dLSY-DFWav>vS%M|L+gjV0Uncn;n}9_C^G z@7_>aMPWP3tG`QGEXBFYaa^dSQmlIBG^Uf`uH@IOa0WMFZpXFSS}MtcB)%!zEZmJe zE6Y-iW~`?0aq@1~3*DM?({YtOtQXF*9tdf{)x#x@vVywA{C|x?843aB`Z0{*$vkYp zyU05jqj3}#^M3~O`&b-@Pm{+n9oKEi_Z%M}&u4nwkivgb;&bE!%$65Z`IcZGvt?gq z!=GC5xA0HoWdUZh0q@Z3Dcm5x!wePNn&lLpL2k|DRD{WBalXkjnT#^&f0yPfRQi4>nQu@@Ik^=aM!x*INxPm_Dm3BT*W4ThJI|Dn?jrxRAi74Q2LOC$P_ w#?}z`AP3VovS>WLaNBkMNQKcj(rFxHD5Q{w(K!CZKjNk26`LvsdxC%bKftYqX8-^I delta 7894 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 diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 032f7b9..64919aa 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -159,7 +159,7 @@ * 12/04/2015 FDBOZZO v1.19.42 Mejora API: Crear un método API get_DirSettings() para obtener información de seteos del directorio indicado (Lutz Scheffler) * 13/04/2015 FDBOZZO v1.19.42 Mejora: Permitir generar texto de una clase de una librería (Lutz Scheffler) * 16/04/2015 FDBOZZO v1.19.42 Mejora API: Renombrados los nombres de los métodos al Inglés para facilitar su entendimiento internacional (Mike Potjer) -* 23/04/2015 FDBOZZO v1.19.43 Mejora: Nueva configuración "RemoveZOrderSetFromProps" para quitar la propiedad ZOrderSet cuando se quiere mantener el ZOrder de la clase original siempre y evitar diferencias innecesarias (Ryan Harris) +* 23/04/2015 FDBOZZO v1.19.43 Mejora: Nueva configuración "RemoveZOrderSetFromProps" para quitar la propiedad ZOrderSet de los objetos que cambian constantemente, provocan diferencias y a veces dan problemas de objeto encima/debajo (Ryan Harris) * 23/04/2015 FDBOZZO v1.19.43 Mejora: Hacer que la progressbar no se convierta en la ventana de salida por defecto de los ? (Lutz Scheffler) * * @@ -241,7 +241,7 @@ * 10/04/2015 Lutz Scheffler Mejora v1.19.41: Crear un método API get_DirSettings() para obtener información de seteos del directorio indicado (Agregado en v1.19.42) * 12/04/2015 Lutz Scheffler Mejora v1.19.41: Permitir generar texto de una clase de una librería (Agregado en v1.19.42) * 15/04/2015 Mike Potjer Sugerencia v1.19.41: Los nombres de los métodos en Inglés facilitarían su entendimiento a más personas (Agregado en v1.19.42) -* 22/04/2015 Ryan Harris Mejora v1.19.42: Permitir que FoxBin quite los ZOrderProps de los objetos, que cambian constantemente, provocan diferencias y a veces dan problemas de objeto encima/debajo (Agregado en v1.19.43) +* 22/04/2015 Ryan Harris Mejora v1.19.42: Permitir que FoxBin quite los ZOrderProps de los objetos que cambian constantemente, provocan diferencias y a veces dan problemas de objeto encima/debajo (Agregado en v1.19.43) * 23/04/2015 Lutz Scheffler Mejora v1.19.42: Hacer que la progressbar no se convierta en la ventana de salida por defecto de los ? (Agregado en v1.19.43) * * From 0976a43f0163ddd1aaec16a41dd7d91882209ae1 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 26 Apr 2015 14:42:28 +0200 Subject: [PATCH 06/14] =?UTF-8?q?-=20Validaci=C3=B3n=20de=20algunos=20par?= =?UTF-8?q?=C3=A1metros=20de=20entrada=20para=20evitar=20la=20entrada=20de?= =?UTF-8?q?=20m=C3=A1s=20de=20un=20archivo=20a=20convertir=20-=20Agregada?= =?UTF-8?q?=20la=20versi=C3=B3n=20de=20FoxBin2Prg=20en=20la=20cabecera=20d?= =?UTF-8?q?e=20algunos=20mensajes=20-=20Nuevo=20form=20de=20ayuda=20para?= =?UTF-8?q?=20mostrar=20la=20sintaxis=20de=20foxbin2prg.exe?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 260 ++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 213 insertions(+), 47 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 64919aa..1075a14 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -2334,6 +2334,7 @@ DEFINE CLASS c_foxbin2prg AS Session , loFSO AS Scripting.FileSystemObject ; , loLang AS CL_LANG OF 'FOXBIN2PRG.PRG' ; , loFrm_Interactive AS frm_interactive OF 'FOXBIN2PRG.PRG' ; + , loFrm_Main AS frm_main OF 'FOXBIN2PRG.PRG' ; , loWSH AS WScript.Shell WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' @@ -2347,9 +2348,18 @@ DEFINE CLASS c_foxbin2prg AS Session lcInputFile_Type = '' - IF VERSION(5) < 900 OR INT( VAL( SUBSTR( VERSION(4), RAT('.', VERSION(4)) + 1 ) ) ) < 3504 + DO CASE + CASE VERSION(5) < 900 OR INT( VAL( SUBSTR( VERSION(4), RAT('.', VERSION(4)) + 1 ) ) ) < 3504 ERROR loLang.C_INCORRECT_VFP9_VERSION__MISSING_SP1_LOC - ENDIF + + CASE '\' $ tcType + ERROR loLang.C_INVALID_PARAMETER_LOC + ':' + CR_LF ; + + 'tcType = "' + tcType + '"' + CR_LF ; + + CR_LF ; + + loLang.C_ALLOWED_VALUES_ARE_LOC + ': ' + CR_LF ; + + '*, *-, -BIN2PRG, -PRG2BIN, -SHOWMSG' + + ENDCASE IF .l_AutoClearProcessedFiles THEN .clearProcessedFiles() && Para evitar acumular procesos anteriores @@ -2435,13 +2445,16 @@ DEFINE CLASS c_foxbin2prg AS Session DO CASE CASE VERSION(5) < 900 *-- '¡FOXBIN2PRG es solo para Visual FoxPro 9.0!' - MESSAGEBOX( loLang.C_FOXBIN2PRG_JUST_VFP_9_LOC, 0+64+4096, loLang.C_FOXBIN2PRG_WARN_CAPTION_LOC + ' (' + .c_Language + ')', 60000 ) + MESSAGEBOX( loLang.C_FOXBIN2PRG_JUST_VFP_9_LOC, 0+64+4096, 'FoxBin2Prg ' + THIS.c_FB2PRG_EXE_Version + ': ' + loLang.C_FOXBIN2PRG_WARN_CAPTION_LOC + ' (' + .c_Language + ')', 60000 ) lnCodError = 1 CASE EMPTY(tc_InputFile) *-- (Ejemplo de sintaxis y uso) - MESSAGEBOX( loLang.C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC, 0+64+4096, loLang.C_FOXBIN2PRG_INFO_SINTAX_LOC + ' (' + .c_Language + ')', 60000 ) - lnCodError = 1 + *MESSAGEBOX( loLang.C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC, 0+64+4096, 'FoxBin2Prg ' + THIS.c_FB2PRG_EXE_Version + ': ' + loLang.C_FOXBIN2PRG_SYNTAX_INFO_LOC + ' (' + .c_Language + ')', 60000 ) + loFrm_Main = CREATEOBJECT('frm_main', THIS) + loFrm_Main.Show() + READ EVENTS + lnCodError = 0 OTHERWISE *-- EJECUCIÓN NORMAL @@ -2486,7 +2499,7 @@ DEFINE CLASS c_foxbin2prg AS Session CASE lcInputFile_Type == C_FILETYPE_FILE AND ( '*' $ JUSTEXT( tc_InputFile ) OR '?' $ JUSTEXT( tc_InputFile ) ) IF .l_ShowErrors *MESSAGEBOX( 'No se admiten extensiones * o ? porque es peligroso (se pueden pisar binarios con archivo xx2 vacíos).', 0+48+4096, 'FOXBIN2PRG: ERROR!!', 60000 ) - MESSAGEBOX( loLang.C_ASTERISK_EXT_NOT_ALLOWED_LOC, 0+48+4096, loLang.C_FOXBIN2PRG_ERROR_CAPTION_LOC, 60000 ) + MESSAGEBOX( loLang.C_ASTERISK_EXT_NOT_ALLOWED_LOC, 0+48+4096, 'FoxBin2Prg ' + THIS.c_FB2PRG_EXE_Version + ': ' + loLang.C_FOXBIN2PRG_ERROR_CAPTION_LOC, 60000 ) EXIT ELSE ERROR loLang.C_ASTERISK_EXT_NOT_ALLOWED_LOC @@ -2813,18 +2826,18 @@ DEFINE CLASS c_foxbin2prg AS Session DO CASE CASE lnCodError = 1098 && User Error - MESSAGEBOX( toEx.Message, 0+64+4096, 'FoxBin2Prg', 60000 ) + MESSAGEBOX( toEx.Message, 0+64+4096, 'FoxBin2Prg ' + THIS.c_FB2PRG_EXE_Version, 60000 ) loWSH.Run( THIS.c_ErrorLogFile, 3 ) CASE lnCodError = 1799 && Conversion Cancelled - MESSAGEBOX( loLang.C_CONVERSION_CANCELLED_BY_USER_LOC + '!', 0+64+4096, 'FoxBin2Prg', 60000 ) + MESSAGEBOX( loLang.C_CONVERSION_CANCELLED_BY_USER_LOC + '!', 0+64+4096, 'FoxBin2Prg ' + THIS.c_FB2PRG_EXE_Version, 60000 ) CASE THIS.l_Error - MESSAGEBOX( loLang.C_END_OF_PROCESS_LOC + '! (' + loLang.C_WITH_ERRORS_LOC + ')', 0+48+4096, 'FoxBin2Prg', 60000 ) + 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 ) OTHERWISE - MESSAGEBOX( loLang.C_END_OF_PROCESS_LOC + '', 0+64+4096, 'FoxBin2Prg', 60000 ) + MESSAGEBOX( loLang.C_END_OF_PROCESS_LOC + '', 0+64+4096, 'FoxBin2Prg ' + THIS.c_FB2PRG_EXE_Version, 60000 ) ENDCASE @@ -4430,11 +4443,12 @@ DEFINE CLASS frm_avance AS Form ENDIF IF FILE( FORCEEXT( toFoxBin2Prg.c_Foxbin2prg_FullPath, 'ICO' ) ) THEN - THIS.Icon = FORCEEXT( toFoxBin2Prg.c_Foxbin2prg_FullPath, 'ICO' ) + THISFORM.Icon = FORCEEXT( toFoxBin2Prg.c_Foxbin2prg_FullPath, 'ICO' ) ENDIF + IF FILE( toFoxBin2Prg.c_BackgroundImage ) THEN CLEAR RESOURCES - THIS.Picture = toFoxBin2Prg.c_BackgroundImage + THISFORM.Picture = toFoxBin2Prg.c_BackgroundImage ENDIF ENDIF @@ -4476,8 +4490,11 @@ DEFINE CLASS frm_interactive AS Form AutoCenter = .T. BorderStyle = 2 Caption = "FoxBin2Prg" - ControlBox = .F. + Closable = .T. + ControlBox = .T. AlwaysOnTop = .T. + MaxButton = .F. + MinButton = .F. BackColor = RGB(255,255,255) n_ConversionType = 3 l_FileTimeStampOptimization = .F. @@ -4570,12 +4587,19 @@ DEFINE CLASS frm_interactive AS Form THISFORM.l_FileTimeStampOptimization = (toFoxBin2Prg.n_OptimizeByFilestamp <> 0) IF FILE( FORCEEXT( toFoxBin2Prg.c_Foxbin2prg_FullPath, 'ICO' ) ) THEN - THIS.Icon = FORCEEXT( toFoxBin2Prg.c_Foxbin2prg_FullPath, 'ICO' ) + THISFORM.Icon = FORCEEXT( toFoxBin2Prg.c_Foxbin2prg_FullPath, 'ICO' ) ENDIF ENDIF ENDPROC + PROCEDURE QueryUnload + THISFORM.n_ConversionType = 3 + NODEFAULT + THISFORM.do_selection() + + ENDPROC + PROCEDURE do_selection THISFORM.Hide() CLEAR EVENTS @@ -4607,6 +4631,90 @@ ENDDEFINE +DEFINE CLASS frm_main AS form + AllowOutput = .F. + AlwaysOnTop = .T. + AutoCenter = .T. + BackColor = (RGB(255,255,255)) + BorderStyle = 2 + Caption = "FoxBin2Prg " + Closable = .T. + ControlBox = .T. + DoCreate = .T. + Height = 380 + KeyPreview = .T. + MaxButton = .F. + MinButton = .F. + Name = "FRM_MAIN" + ShowWindow = 2 + Width = 756 + + ADD OBJECT 'cmd_Close' AS commandbutton WITH ; + Cancel = .T., ; + Caption = "Cerrar", ; + Height = 27, ; + Left = 656, ; + Name = "cmd_Close", ; + Top = 344, ; + Width = 84 + *< END OBJECT: BaseClass="commandbutton" /> + + ADD OBJECT 'edt_Help' AS editbox WITH ; + BackStyle = 0, ; + BorderStyle = 0, ; + DisabledForeColor = (RGB(0,0,0)), ; + Enabled = .F., ; + Height = 324, ; + Left = 12, ; + Name = "edt_Help", ; + ScrollBars = 0, ; + Top = 12, ; + Width = 728 + *< END OBJECT: BaseClass="editbox" /> + + PROCEDURE Init + LPARAMETERS toFoxBin2Prg + + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF + + LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' + + IF VARTYPE(toFoxBin2Prg) = "O" THEN + IF VARTYPE(_SCREEN.o_FoxBin2Prg_Lang) = "O" THEN + loLang = _SCREEN.o_FoxBin2Prg_Lang + + IF PEMSTATUS(_SCREEN, 'c_FB2PRG_EXE_Version', 5) THEN + THISFORM.Caption = 'FoxBin2Prg ' + _SCREEN.c_FB2PRG_EXE_Version + ' - ' + loLang.C_FOXBIN2PRG_SYNTAX_INFO_LOC + ENDIF + + THISFORM.edt_help.Value = loLang.C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC + ENDIF + + IF FILE( FORCEEXT( toFoxBin2Prg.c_Foxbin2prg_FullPath, 'ICO' ) ) THEN + THISFORM.Icon = FORCEEXT( toFoxBin2Prg.c_Foxbin2prg_FullPath, 'ICO' ) + ENDIF + ENDIF + + ENDPROC + + PROCEDURE QueryUnload + CLEAR EVENTS + NODEFAULT + + ENDPROC + + PROCEDURE cmd_Close.Click + THISFORM.Hide() + CLEAR EVENTS + + ENDPROC + +ENDDEFINE + + + DEFINE CLASS c_conversor_base AS Session #IF .F. LOCAL THIS AS c_conversor_base OF 'FOXBIN2PRG.PRG' @@ -25193,6 +25301,7 @@ DEFINE CLASS CL_LANG AS Custom n_LanguageSelectedMethod = 0 && 0=Automatic by version(3) + C_ALLOWED_VALUES_ARE_LOC = "" C_ASTERISK_EXT_NOT_ALLOWED_LOC = "" C_BACKLINK_CANT_UPDATE_BL_LOC = "" C_BACKLINK_OF_TABLE_LOC = "" @@ -25229,7 +25338,7 @@ DEFINE CLASS CL_LANG AS Custom C_FILE_NOT_FOUND_LOC = "" C_FILENAME_LOC = "" C_FOXBIN2PRG_ERROR_CAPTION_LOC = "" - C_FOXBIN2PRG_INFO_SINTAX_LOC = "" + C_FOXBIN2PRG_SYNTAX_INFO_LOC = "" C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC = "" C_FOXBIN2PRG_JUST_VFP_9_LOC = "" C_FOXBIN2PRG_WARN_CAPTION_LOC = "" @@ -25240,6 +25349,7 @@ DEFINE CLASS CL_LANG AS Custom C_INCORRECT_VFP9_VERSION__MISSING_SP1_LOC = "" C_INHERITING_FROM_LOC = "" C_INTERACTIVE_DIRECTORY_SELECTION_LOC = "" + C_INVALID_PARAMETER_LOC = "" C_IS_A_FILE_LOC = "" C_IS_A_DIRECTORY_LOC = "" C_IS_UNSUPPORTED_LOC = "" @@ -25303,6 +25413,7 @@ DEFINE CLASS CL_LANG AS Custom *------------------------------------------------------------------------------------------------------------------------------------------- *-- NOTE: MUST USE DOUBLE QUOTES, OR SYNTAX ERRORS HAPPEN WHEN COMPILING. STRANGE :( *------------------------------------------------------------------------------------------------------------------------------------------- + .C_ALLOWED_VALUES_ARE_LOC = "Les valeurs autorisées sont" .C_ASTERISK_EXT_NOT_ALLOWED_LOC = "* Et ? extensions ne sont pas autorisées car il est dangereux (binaires peuvent être remplacés par des fichiers vides de XX2)" .C_BACKLINK_CANT_UPDATE_BL_LOC = "Impossible de mettre à jour backlink" .C_BACKLINK_OF_TABLE_LOC = "de la table" @@ -25338,15 +25449,27 @@ DEFINE CLASS CL_LANG AS Custom .C_FILE_NAME_IS_NOT_SUPPORTED_LOC = "File [<<.c_InputFile>>] ne est pas supporté" .C_FILE_NOT_FOUND_LOC = "Fichier introuvable" .C_FILENAME_LOC = "Fichier" - .C_FOXBIN2PRG_ERROR_CAPTION_LOC = "FOXBIN2PRG: ERREUR" - .C_FOXBIN2PRG_INFO_SINTAX_LOC = "FOXBIN2PRG: SYNTAX INFO" - .C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC = "FOXBIN2PRG [,cType ,cTextName ,cGenText ,cDontShowErrors ,cDebug, cDontShowProgress, cOriginalFileName, cRecompile, cNoTimestamps]" + CR_LF + CR_LF ; - + "Exemple pour générer TXT de tous VCX dans 'c:\development\classes', sans montrer la fenêtre d'erreur et générer fichier LOG: " + CR_LF ; - + " FOXBIN2PRG 'c:\development\classes\*.vcx' '0' '0' '0' '1' '1'" + CR_LF + CR_LF ; - + "Exemple pour générer TXT de tous VCX est 'c:\development\classes', sans montrant fenêtre d'erreur et sans fichier LOG: " + CR_LF ; - + " FOXBIN2PRG 'c:\development\classes\*.vc2' '0' '0' '0' '1' '0'" + .C_FOXBIN2PRG_ERROR_CAPTION_LOC = "ERREUR" + .C_FOXBIN2PRG_SYNTAX_INFO_LOC = "SYNTAX INFO" + .C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC = "FOXBIN2PRG.EXE [cType [cTextName [cGenText [cDontShowErrors [cDebug [cDontShowProgress [cOriginalFileName [cRecompile [cNoTimestamps [cCFG_File] ] ] ] ] ] ] ] ] ]" + CR_LF + CR_LF ; + + "cFileSpec.Ext: Full name (fullpath) of the file to convert or directory name to process" + CR_LF ; + + "- If 'BIN2PRG' is specified, the directory specified in tcType is processed for generating TX2" + CR_LF ; + + "- If 'PRG2BIN' is specified, the directory specified in tcType is processed for regenerating BIN" + CR_LF ; + + "- In SCCAPI (VSS) compatibility mode, it is used to query the conversion support for the file type specified" + CR_LF ; + + "cType: In SCCAPI (VSS) compatibility mode indicates the input file type. " ; + + "If specified '*' o '*-' and tc_InputFile is a PJX, all project files are processed" + CR_LF ; + + "cTextName = Text filename. Only for SCCAPI (VSS) compatibility mode." + CR_LF ; + + "lGenText: .T.=Generates Text, .F.=Regenerates Binary. Only for SCCAPI (VSS) compatibility mode." + CR_LF ; + + "cDontShowErrors: '1' for NOT showing errors" + CR_LF ; + + "cDebug: '1' for generating process LOGs" + CR_LF ; + + "cDontShowProgress: '1' for NOT showing the process window" + CR_LF ; + + "cOriginalFileName: used in those cases in which inputFile is a temporary filename and you want to generate" ; + + " the correct filename on the header of the text version" + CR_LF ; + + "cRecompile: Indicates recompile ('1') the binary once regenerated. You can specify a Path too (ie, the project one)" + CR_LF ; + + "cNoTimestamps: Indicates if timestamp must be cleared ('1' or empty) or not ('0')" + CR_LF ; + + "cCFG_File: Indicates a CFG filename for not using the default on foxbin2prg directory" .C_FOXBIN2PRG_JUST_VFP_9_LOC = "FOXBIN2PRG est seulement pour Visual FoxPro 9.0!" - .C_FOXBIN2PRG_WARN_CAPTION_LOC = "FOXBIN2PRG: AVERTISSEMENT!" + .C_FOXBIN2PRG_WARN_CAPTION_LOC = "AVERTISSEMENT!" .C_GENERATED_FILE_SIZE_LOC = "Taille du fichier généré" .C_GENERATING_BINARY_LOC = "Génération Binaire" .C_INCLUDING_CLASS_LOC = "classe, y compris" @@ -25354,6 +25477,7 @@ DEFINE CLASS CL_LANG AS Custom .C_INCORRECT_VFP9_VERSION__MISSING_SP1_LOC = "SourceSafe Compatibilité ModeIncorrect VFP 9 Version - SP1 manquant! Prévue: 3504 ou plus tard, réelle: " + VERSION(4) .C_INHERITING_FROM_LOC = "Héritant de" .C_INTERACTIVE_DIRECTORY_SELECTION_LOC = "Sélection répertoire interactive" + .C_INVALID_PARAMETER_LOC = "Paramètre non valide" .C_IS_A_FILE_LOC = "est un FICHIER" .C_IS_A_DIRECTORY_LOC = "est un RÉPERTOIRE" .C_IS_UNSUPPORTED_LOC = "ne est pas supporté" @@ -25395,6 +25519,7 @@ DEFINE CLASS CL_LANG AS Custom *------------------------------------------------------------------------------------------------------------------------------------------- *-- NOTA: SE DEBEN USAR COMILLAS DOBLES, O ERRORES DE SINTAXIS OCURREN AL COMPILAR. EXTRAÑO :( *------------------------------------------------------------------------------------------------------------------------------------------- + .C_ALLOWED_VALUES_ARE_LOC = "Los valores permitidos son" .C_ASTERISK_EXT_NOT_ALLOWED_LOC = "No se admiten extensiones * o ? porque es peligroso (se pueden pisar binarios con archivo xx2 vacíos)." .C_BACKLINK_CANT_UPDATE_BL_LOC = "No se pudo actualizar el backlink" .C_BACKLINK_OF_TABLE_LOC = "de la tabla" @@ -25430,15 +25555,27 @@ DEFINE CLASS CL_LANG AS Custom .C_FILE_NAME_IS_NOT_SUPPORTED_LOC = "El archivo [<<.c_InputFile>>] no está soportado" .C_FILE_NOT_FOUND_LOC = "No se encontró el archivo" .C_FILENAME_LOC = "Archivo" - .C_FOXBIN2PRG_ERROR_CAPTION_LOC = "FOXBIN2PRG: ERROR" - .C_FOXBIN2PRG_INFO_SINTAX_LOC = "FOXBIN2PRG: INFORMACIÓN DE SINTAXIS" - .C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC = "FOXBIN2PRG [,cType ,cTextName ,cGenText ,cNoMostrarErrores ,cDebug, cDontShowProgress, cOriginalFileName, cRecompile, cNoTimestamps]" + CR_LF + CR_LF ; - + "Ejemplo para generar los TXT de todos los VCX de 'c:\desa\clases', sin mostrar ventana de error y generando archivo LOG: " + CR_LF ; - + " FOXBIN2PRG 'c:\desa\clases\*.vcx' '0' '0' '0' '1' '1'" + CR_LF + CR_LF ; - + "Ejemplo para generar los VCX de todos los TXT de 'c:\desa\clases', sin mostrar ventana de error y sin LOG: " + CR_LF ; - + " FOXBIN2PRG 'c:\desa\clases\*.vc2' '0' '0' '0' '1' '0'" + .C_FOXBIN2PRG_ERROR_CAPTION_LOC = "ERROR" + .C_FOXBIN2PRG_SYNTAX_INFO_LOC = "INFORMACIÓN DE SINTAXIS" + .C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC = "FOXBIN2PRG.EXE [cType [cTextName [cGenText [cDontShowErrors [cDebug [cDontShowProgress [cOriginalFileName [cRecompile [cNoTimestamps [cCFG_File] ] ] ] ] ] ] ] ] ]" + CR_LF + CR_LF ; + + "cFileSpec.Ext: Nombre completo (fullpath) del archivo a convertir o del directorio a procesar" + CR_LF ; + + "- Si indica 'BIN2PRG', se procesa el directorio indicado en tcType para generar los TX2" + CR_LF ; + + "- Si indica 'PRG2BIN', se procesa el directorio indicado en tcType para generar los BIN" + CR_LF ; + + "- En modo compatibilidad con SCCAPI (VSS), se usa para preguntar el tipo de soporte de conversión para el tipo de archivo indicado" + CR_LF ; + + "cType: En modo compatibilidad con SCCAPI (VSS) es el Tipo de archivo de entrada. " ; + + "Si indica '*' o '*-' y tc_InputFile es un PJX, se procesa todo el proyecto" + CR_LF ; + + "cTextName = Nombre del archivo texto. (Solo para compatibilidad con Visual SourceSafe)" + CR_LF ; + + "lGenText: .T.=Genera Texto, .F.=Genera Binario. Solo para compatibilidad con SCCAPI (VSS)" + CR_LF ; + + "cDontShowErrors: '1' para NO mostrar errores" + CR_LF ; + + "cDebug: '1' para generar LOGs del proceso" + CR_LF ; + + "cDontShowProgress: '1' para NO mostrar la ventana de progreso" + CR_LF ; + + "cOriginalFileName: Sirve para los casos en los que inputFile es un nombre temporal y se quiere generar" + CR_LF ; + + " el nombre correcto en la cabecera de la versión texto" + CR_LF ; + + "cRecompile: Indica recompilar ('1') el binario una vez regenerado. También se puede indicar un Path (p.ej, el del proyecto)" + CR_LF ; + + "cNoTimestamps: Indica si se debe anular el timestamp ('1' o vacío) o no ('0')" + CR_LF ; + + "cCFG_File: Indica un nombre de archivo CFG para no usar el predeterminado en el directorio de foxbin2prg" .C_FOXBIN2PRG_JUST_VFP_9_LOC = "¡FOXBIN2PRG es solo para Visual FoxPro 9.0!" - .C_FOXBIN2PRG_WARN_CAPTION_LOC = "FOXBIN2PRG: ¡ATENCIÓN!" + .C_FOXBIN2PRG_WARN_CAPTION_LOC = "¡ATENCIÓN!" .C_GENERATED_FILE_SIZE_LOC = "Tamaño del archivo generado" .C_GENERATING_BINARY_LOC = "Generando Binario" .C_MENU_NOT_IN_VFP9_FORMAT_LOC = "El Menú [<>] NO está en formato VFP 9! - Por favor convertirlo a VFP 9 con MODIFY MENU '<>'" @@ -25447,6 +25584,7 @@ DEFINE CLASS CL_LANG AS Custom .C_INCORRECT_VFP9_VERSION__MISSING_SP1_LOC = "Versión Incorrecta de VFP 9 - Falta el SP1! Esperado: 3504 o posterior, actual: " + VERSION(4) .C_INHERITING_FROM_LOC = "Heredando desde" .C_INTERACTIVE_DIRECTORY_SELECTION_LOC = "Selección Interactiva de Directorio" + .C_INVALID_PARAMETER_LOC = "Parámetro inválido" .C_IS_A_FILE_LOC = "es un ARCHIVO" .C_IS_A_DIRECTORY_LOC = "es un DIRECTORIO" .C_IS_UNSUPPORTED_LOC = "no está soportado" @@ -25487,6 +25625,7 @@ DEFINE CLASS CL_LANG AS Custom *------------------------------------------------------------------------------------------------------------------------------------------- *-- NOTE: ES MÜSSEN ANFÜHRUNGSZEICHEN BENUTZT WERDEN, ODER SYNTAX ERRORS PASSIEREN BEIM COMPILE. SELTSAM :( *------------------------------------------------------------------------------------------------------------------------------------------- + .C_ALLOWED_VALUES_ARE_LOC = "Erlaubte Werte sind" .C_ASTERISK_EXT_NOT_ALLOWED_LOC = "Die Erweiterungen * und ? sind nicht erlaubt, da sie gefährlich sind (Binaries könnten mit xx2 leeren Dateien überschrieben werden)" .C_BACKLINK_CANT_UPDATE_BL_LOC = "Backlink kann nicht aktualisiert werden" .C_BACKLINK_OF_TABLE_LOC = "von Tabelle" @@ -25522,15 +25661,27 @@ DEFINE CLASS CL_LANG AS Custom .C_FILE_NAME_IS_NOT_SUPPORTED_LOC = "Datei [<<.c_InputFile>>] wird nicht unterstützt" .C_FILE_NOT_FOUND_LOC = "Datei nicht gefunden" .C_FILENAME_LOC = "Datei" - .C_FOXBIN2PRG_ERROR_CAPTION_LOC = "FOXBIN2PRG: FEHLER" - .C_FOXBIN2PRG_INFO_SINTAX_LOC = "FOXBIN2PRG: SYNTAX INFO" - .C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC = "FOXBIN2PRG [,cType ,cTextName ,cGenText ,cDontShowErrors ,cDebug, cDontShowProgress, cOriginalFileName, cRecompile, cNoTimestamps]" + CR_LF + CR_LF ; - + "Ein Beispiel für die Generierung der TXT von allen VCX in 'c:\development\classes', ohne Anzeige des Fehlerfensters und Generierung der LOG Datei: " + CR_LF ; - + " FOXBIN2PRG 'c:\development\classes\*.vcx' '0' '0' '0' '1' '1'" + CR_LF + CR_LF ; - + "Ein Beispiel für die Generierung der TXT von allen VCX in 'c:\development\classes', ohne Anzeige des Fehlerfensters und ohne LOG datei: " + CR_LF ; - + " FOXBIN2PRG 'c:\development\classes\*.vc2' '0' '0' '0' '1' '0'" + .C_FOXBIN2PRG_ERROR_CAPTION_LOC = "FEHLER" + .C_FOXBIN2PRG_SYNTAX_INFO_LOC = "SYNTAX INFO" + .C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC = "FOXBIN2PRG.EXE [cType [cTextName [cGenText [cDontShowErrors [cDebug [cDontShowProgress [cOriginalFileName [cRecompile [cNoTimestamps [cCFG_File] ] ] ] ] ] ] ] ] ]" + CR_LF + CR_LF ; + + "cFileSpec.Ext: Full name (fullpath) of the file to convert or directory name to process" + CR_LF ; + + "- If 'BIN2PRG' is specified, the directory specified in tcType is processed for generating TX2" + CR_LF ; + + "- If 'PRG2BIN' is specified, the directory specified in tcType is processed for regenerating BIN" + CR_LF ; + + "- In SCCAPI (VSS) compatibility mode, it is used to query the conversion support for the file type specified" + CR_LF ; + + "cType: In SCCAPI (VSS) compatibility mode indicates the input file type. " ; + + "If specified '*' o '*-' and tc_InputFile is a PJX, all project files are processed" + CR_LF ; + + "cTextName = Text filename. Only for SCCAPI (VSS) compatibility mode." + CR_LF ; + + "lGenText: .T.=Generates Text, .F.=Regenerates Binary. Only for SCCAPI (VSS) compatibility mode." + CR_LF ; + + "cDontShowErrors: '1' for NOT showing errors" + CR_LF ; + + "cDebug: '1' for generating process LOGs" + CR_LF ; + + "cDontShowProgress: '1' for NOT showing the process window" + CR_LF ; + + "cOriginalFileName: used in those cases in which inputFile is a temporary filename and you want to generate" ; + + " the correct filename on the header of the text version" + CR_LF ; + + "cRecompile: Indicates recompile ('1') the binary once regenerated. You can specify a Path too (ie, the project one)" + CR_LF ; + + "cNoTimestamps: Indicates if timestamp must be cleared ('1' or empty) or not ('0')" + CR_LF ; + + "cCFG_File: Indicates a CFG filename for not using the default on foxbin2prg directory" .C_FOXBIN2PRG_JUST_VFP_9_LOC = "FOXBIN2PRG arbeitet nur für Visual FoxPro 9.0!" - .C_FOXBIN2PRG_WARN_CAPTION_LOC = "FOXBIN2PRG: WARNUNG!" + .C_FOXBIN2PRG_WARN_CAPTION_LOC = "WARNUNG!" .C_GENERATED_FILE_SIZE_LOC = "Generierte Dateigröße" .C_GENERATING_BINARY_LOC = "Gene Binary" .C_INCLUDING_CLASS_LOC = "einschließlich Klasse" @@ -25538,6 +25689,7 @@ DEFINE CLASS CL_LANG AS Custom .C_INCORRECT_VFP9_VERSION__MISSING_SP1_LOC = "Source Kompatibilität ModeIncorrect VFP 9 Version - Fehlende SP1! Erwartet: 3504 oder später, aktuell:" + VERSION(4) .C_INHERITING_FROM_LOC = "Erben von" .C_INTERACTIVE_DIRECTORY_SELECTION_LOC = "Auswählen interaktive Verzeichnis" + .C_INVALID_PARAMETER_LOC = "Ungültige Parameter" .C_IS_A_FILE_LOC = "ist eine DATEI" .C_IS_A_DIRECTORY_LOC = "ist ein VERZEICHNIS" .C_IS_UNSUPPORTED_LOC = "wird nicht unterstützt" @@ -25579,6 +25731,7 @@ DEFINE CLASS CL_LANG AS Custom *------------------------------------------------------------------------------------------------------------------------------------------- *-- NOTE: MUST USE DOUBLE QUOTES, OR SYNTAX ERRORS HAPPEN WHEN COMPILING. STRANGE :( *------------------------------------------------------------------------------------------------------------------------------------------- + .C_ALLOWED_VALUES_ARE_LOC = "Allowed values are" .C_ASTERISK_EXT_NOT_ALLOWED_LOC = "* and ? extensions are not allowed because it's dangerous (binaries can be overwritten with xx2 empty files)" .C_BACKLINK_CANT_UPDATE_BL_LOC = "Could not update backlink" .C_BACKLINK_OF_TABLE_LOC = "of table" @@ -25614,15 +25767,27 @@ DEFINE CLASS CL_LANG AS Custom .C_FILE_NAME_IS_NOT_SUPPORTED_LOC = "File [<<.c_InputFile>>] is not supported" .C_FILE_NOT_FOUND_LOC = "File not found" .C_FILENAME_LOC = "File" - .C_FOXBIN2PRG_ERROR_CAPTION_LOC = "FOXBIN2PRG: ERROR" - .C_FOXBIN2PRG_INFO_SINTAX_LOC = "FOXBIN2PRG: SYNTAX INFO" - .C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC = "FOXBIN2PRG [,cType ,cTextName ,cGenText ,cDontShowErrors ,cDebug, cDontShowProgress, cOriginalFileName, cRecompile, cNoTimestamps]" + CR_LF + CR_LF ; - + "Example of generating TXT from all VCX in 'c:\development\classes', without showing error window and generating LOG file: " + CR_LF ; - + " FOXBIN2PRG 'c:\development\classes\*.vcx' '0' '0' '0' '1' '1'" + CR_LF + CR_LF ; - + "Example of generating TXT from all VCX is 'c:\development\classes', without showing error window and without LOG file: " + CR_LF ; - + " FOXBIN2PRG 'c:\development\classes\*.vc2' '0' '0' '0' '1' '0'" + .C_FOXBIN2PRG_ERROR_CAPTION_LOC = "ERROR" + .C_FOXBIN2PRG_SYNTAX_INFO_LOC = "SYNTAX INFO" + .C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC = "FOXBIN2PRG.EXE [cType [cTextName [cGenText [cDontShowErrors [cDebug [cDontShowProgress [cOriginalFileName [cRecompile [cNoTimestamps [cCFG_File] ] ] ] ] ] ] ] ] ]" + CR_LF + CR_LF ; + + "cFileSpec.Ext: Full name (fullpath) of the file to convert or directory name to process" + CR_LF ; + + "- If 'BIN2PRG' is specified, the directory specified in tcType is processed for generating TX2" + CR_LF ; + + "- If 'PRG2BIN' is specified, the directory specified in tcType is processed for regenerating BIN" + CR_LF ; + + "- In SCCAPI (VSS) compatibility mode, it is used to query the conversion support for the file type specified" + CR_LF ; + + "cType: In SCCAPI (VSS) compatibility mode indicates the input file type. " ; + + "If specified '*' o '*-' and tc_InputFile is a PJX, all project files are processed" + CR_LF ; + + "cTextName = Text filename. Only for SCCAPI (VSS) compatibility mode." + CR_LF ; + + "lGenText: .T.=Generates Text, .F.=Regenerates Binary. Only for SCCAPI (VSS) compatibility mode." + CR_LF ; + + "cDontShowErrors: '1' for NOT showing errors" + CR_LF ; + + "cDebug: '1' for generating process LOGs" + CR_LF ; + + "cDontShowProgress: '1' for NOT showing the process window" + CR_LF ; + + "cOriginalFileName: used in those cases in which inputFile is a temporary filename and you want to generate" ; + + " the correct filename on the header of the text version" + CR_LF ; + + "cRecompile: Indicates recompile ('1') the binary once regenerated. You can specify a Path too (ie, the project one)" + CR_LF ; + + "cNoTimestamps: Indicates if timestamp must be cleared ('1' or empty) or not ('0')" + CR_LF ; + + "cCFG_File: Indicates a CFG filename for not using the default on foxbin2prg directory" .C_FOXBIN2PRG_JUST_VFP_9_LOC = "FOXBIN2PRG is only for Visual FoxPro 9.0!" - .C_FOXBIN2PRG_WARN_CAPTION_LOC = "FOXBIN2PRG: WARNING!" + .C_FOXBIN2PRG_WARN_CAPTION_LOC = "WARNING!" .C_GENERATED_FILE_SIZE_LOC = "Generated file size" .C_GENERATING_BINARY_LOC = "Generating Binary" .C_INCLUDING_CLASS_LOC = "Including class" @@ -25630,6 +25795,7 @@ DEFINE CLASS CL_LANG AS Custom .C_INCORRECT_VFP9_VERSION__MISSING_SP1_LOC = "Incorrect VFP 9 version - Missing SP1! Expected: 3504 or later, actual: " + VERSION(4) .C_INHERITING_FROM_LOC = "Inheriting from" .C_INTERACTIVE_DIRECTORY_SELECTION_LOC = "Interactive Directory Selection" + .C_INVALID_PARAMETER_LOC = "Invalid parameter" .C_IS_A_FILE_LOC = "is a FILE" .C_IS_A_DIRECTORY_LOC = "is a DIRECTORY" .C_IS_UNSUPPORTED_LOC = "is unsupported" From 159d6f8972c4d62b8ca11cc7f32194dbaff07794 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Wed, 29 Apr 2015 05:03:08 +0200 Subject: [PATCH 07/14] - Bug Fix: FoxBin2Prg PRG2BIN does not return error codes (Ralf Wagner) - Bug Fix: FoxBin2Prg sometimes generates an OLE error when executed for second time on a file with problems (Fidel Charny) --- FoxBin2PRGVersionFile.txt | 6 +- TESTS/ut__foxbin2prg.prg | 10 +- ...prg__get_PropsAndValuesFrom_PROPERTIES.prg | 16 +- foxbin2prg.prg | 641 ++++++++++++++---- 4 files changed, 538 insertions(+), 135 deletions(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 981a4d2..4fb80a6 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -3,7 +3,7 @@ Lparameters toUpdateInfo Local lcNote With toUpdateInfo .VersionNumber = 'v1.19.43' - .VersionDate = Date(2015,04,24) + .VersionDate = Date(2015,04,28) .SourceFileUrl = 'http://vfpxrepository.com/dl/thorupdate/Projects/FoxBin2Prg/FoxBin2Prg.Zip' .Link = 'http://vfpx.codeplex.com/wikipage?title=FoxBin2PRG' @@ -17,10 +17,12 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg Change History ------------------------------------------------------------- -2015/04/24 v1.19.43 +2015/04/28 v1.19.43 - Feature: Added new CFG setting "RemoveZOrderSetFromProps" for removing ZOrderSet property when you want to maintain the original class ZOrder always, avoid unnecesary differences and fix some visual on top/on bottom control problems (Ryan Harris) - Feature: Do not allow progressbar window become the default output window of ? command (Lutz Scheffler) - Bug Fix: Fixed VFP9 SP1 validation message +- Bug Fix: FoxBin2Prg PRG2BIN does not return error codes (Ralf Wagner) +- Bug Fix: FoxBin2Prg sometimes generates an OLE error when executed for second time on a file with problems (Fidel Charny) 2015/04/16 v1.19.42 diff --git a/TESTS/ut__foxbin2prg.prg b/TESTS/ut__foxbin2prg.prg index bfe6bcd..7e87011 100644 --- a/TESTS/ut__foxbin2prg.prg +++ b/TESTS/ut__foxbin2prg.prg @@ -140,8 +140,8 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg loObj.get_PropsAndCommentsFrom_RESERVED3( toReg_Esperado.RESERVED3, .F., @laPropsAndComments_Esperado, @lnPropsAndComments_Count_Esperado, '' ) *-- Properties - loObj.get_PropsAndValuesFrom_PROPERTIES( toReg.PROPERTIES, 0, @laPropsAndValues, @lnPropsAndValues_Count, '' ) - loObj.get_PropsAndValuesFrom_PROPERTIES( toReg_Esperado.PROPERTIES, 0, @laPropsAndValues_Esperado, @lnPropsAndValues_Count_Esperado, '' ) + loObj.get_PropsAndValuesFrom_PROPERTIES( toReg.PROPERTIES, 0, @laPropsAndValues, @lnPropsAndValues_Count, '', @loFoxBin2Prg ) + loObj.get_PropsAndValuesFrom_PROPERTIES( toReg_Esperado.PROPERTIES, 0, @laPropsAndValues_Esperado, @lnPropsAndValues_Count_Esperado, '', @loFoxBin2Prg ) *-- Protected loObj.get_PropsFrom_PROTECTED( toReg.PROTECTED, .F., @laProtected, @lnProtected_Count, '' ) @@ -149,8 +149,8 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg *-- Methods STORE 0 TO lnMethods_Count, lnMethods_Count_Esperado - loObj.get_ADD_OBJECT_METHODS( toReg, toReg, '', @laMethods, '', @lnMethods_Count, '', 0, '', 0, loFoxBin2Prg ) - loObj.get_ADD_OBJECT_METHODS( toReg_Esperado, toReg_Esperado, '', @laMethods_Esperado, '', @lnMethods_Count_Esperado, '', 0, '', 0, loFoxBin2Prg ) + loObj.get_ADD_OBJECT_METHODS( toReg, toReg, '', @laMethods, '', @lnMethods_Count, '', 0, '', 0, @loFoxBin2Prg ) + loObj.get_ADD_OBJECT_METHODS( toReg_Esperado, toReg_Esperado, '', @laMethods_Esperado, '', @lnMethods_Count_Esperado, '', 0, '', 0, @loFoxBin2Prg ) lcExtraData = tcParent + '.' + tcObjName + ' (' + tcClass + ')' @@ -1410,7 +1410,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg loEx = NULL loCnv = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG") loCnv.evaluateConfiguration( '1', '1', '1', '0', '1', '4', '1', '0' ) - loCnv.l_DropNullCharsFromCode = .F. + loCnv.l_RemoveNullCharsFromCode = .F. *loCnv.l_Test = .T. diff --git a/TESTS/ut__foxbin2prg__c_conversor_bin_a_prg__get_PropsAndValuesFrom_PROPERTIES.prg b/TESTS/ut__foxbin2prg__c_conversor_bin_a_prg__get_PropsAndValuesFrom_PROPERTIES.prg index 46841c3..8c06d5a 100644 --- a/TESTS/ut__foxbin2prg__c_conversor_bin_a_prg__get_PropsAndValuesFrom_PROPERTIES.prg +++ b/TESTS/ut__foxbin2prg__c_conversor_bin_a_prg__get_PropsAndValuesFrom_PROPERTIES.prg @@ -122,10 +122,12 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_bin_a_prg__get_PropsAndValuesFrom_PROPE LOCAL lnCodError, lcMenError, lnCodError_Esperado ; , lnSort, laPropsAndValues(1,2), lnPropsAndValues_Count, lcMemo, lcSortedMemo ; , laPropsAndValues_Esperado(1,2), lnPropsAndValues_Count_Esperado, lcMemo_Esperado ; - , loEx AS EXCEPTION + , loEx AS EXCEPTION ; + , loFB2P AS c_foxbin2prg OF "FOXBIN2PRG.PRG" LOCAL loObj AS c_conversor_bin_a_prg OF "FOXBIN2PRG.PRG" loObj = THIS.icObj loEx = NULL + loFB2P = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG") *-- DATOS DE ENTRADA STORE 0 TO lnCodError @@ -195,12 +197,14 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_bin_a_prg__get_PropsAndValuesFrom_PROPE *-- TEST - loObj.get_PropsAndValuesFrom_PROPERTIES( @lcMemo, lnSort, @laPropsAndValues, @lnPropsAndValues_Count, @lcSortedMemo ) + loObj.get_PropsAndValuesFrom_PROPERTIES( @lcMemo, lnSort, @laPropsAndValues, @lnPropsAndValues_Count, @lcSortedMemo, @loFB2P ) THIS.Evaluate_results( loEx, lnCodError_Esperado ; , @lcMemo, lnSort, @laPropsAndValues, @lnPropsAndValues_Count, @lcSortedMemo ; , @laPropsAndValues_Esperado, @lnPropsAndValues_Count_Esperado, @lcMemo_Esperado ) + STORE NULL TO loObj, loFB2P + RELEASE loObj, loFB2P ENDFUNC @@ -209,10 +213,12 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_bin_a_prg__get_PropsAndValuesFrom_PROPE LOCAL lnCodError, lcMenError, lnCodError_Esperado ; , lnSort, laPropsAndValues(1,2), lnPropsAndValues_Count, lcMemo, lcSortedMemo ; , laPropsAndValues_Esperado(1,2), lnPropsAndValues_Count_Esperado, lcMemo_Esperado ; - , loEx AS EXCEPTION + , loEx AS EXCEPTION ; + , loFB2P AS c_foxbin2prg OF "FOXBIN2PRG.PRG" LOCAL loObj AS c_conversor_bin_a_prg OF "FOXBIN2PRG.PRG" loObj = THIS.icObj loEx = NULL + loFB2P = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG") *-- DATOS DE ENTRADA @@ -284,12 +290,14 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_bin_a_prg__get_PropsAndValuesFrom_PROPE *-- TEST - loObj.get_PropsAndValuesFrom_PROPERTIES( @lcMemo, lnSort, @laPropsAndValues, @lnPropsAndValues_Count, @lcSortedMemo ) + loObj.get_PropsAndValuesFrom_PROPERTIES( @lcMemo, lnSort, @laPropsAndValues, @lnPropsAndValues_Count, @lcSortedMemo, @loFB2P ) THIS.Evaluate_results( loEx, lnCodError_Esperado ; , @lcMemo, lnSort, @laPropsAndValues, @lnPropsAndValues_Count, @lcSortedMemo ; , @laPropsAndValues_Esperado, @lnPropsAndValues_Count_Esperado, @lcMemo_Esperado ) + STORE NULL TO loObj, loFB2P + RELEASE loObj, loFB2P ENDFUNC diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 1075a14..2d51065 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -161,6 +161,8 @@ * 16/04/2015 FDBOZZO v1.19.42 Mejora API: Renombrados los nombres de los métodos al Inglés para facilitar su entendimiento internacional (Mike Potjer) * 23/04/2015 FDBOZZO v1.19.43 Mejora: Nueva configuración "RemoveZOrderSetFromProps" para quitar la propiedad ZOrderSet de los objetos que cambian constantemente, provocan diferencias y a veces dan problemas de objeto encima/debajo (Ryan Harris) * 23/04/2015 FDBOZZO v1.19.43 Mejora: Hacer que la progressbar no se convierta en la ventana de salida por defecto de los ? (Lutz Scheffler) +* 28/04/2015 FDBOZZO v1.19.43 Bug Fix: FoxBin2Prg PRG2BIN does not return error codes (Ralf Wagner) +* 29/04/2015 FDBOZZO v1.19.42 Bug Fix: FoxBin2Prg a veces genera un error OLE cuando se ejecuta por segunda vez sobre un archivo con problemas (Fidel Charny) * * *--------------------------------------------------------------------------------------------------- @@ -243,6 +245,8 @@ * 15/04/2015 Mike Potjer Sugerencia v1.19.41: Los nombres de los métodos en Inglés facilitarían su entendimiento a más personas (Agregado en v1.19.42) * 22/04/2015 Ryan Harris Mejora v1.19.42: Permitir que FoxBin quite los ZOrderProps de los objetos que cambian constantemente, provocan diferencias y a veces dan problemas de objeto encima/debajo (Agregado en v1.19.43) * 23/04/2015 Lutz Scheffler Mejora v1.19.42: Hacer que la progressbar no se convierta en la ventana de salida por defecto de los ? (Agregado en v1.19.43) +* 28/04/2015 Ralf Wagner Reporte Bug v1.19.42: FoxBin2Prg no retorna los códigos de error (Arreglado en v1.19.43) +* 29/04/2015 Fidel Charny Reporte Bug v1.19.42: FoxBin2Prg a veces genera un error OLE cuando se ejecuta por segunda vez sobre un archivo con problemas (Arreglado en v1.19.43) * * *--------------------------------------------------------------------------------------------------- @@ -254,10 +258,13 @@ *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * tc_InputFile (v! IN ) Nombre completo (fullpath) del archivo a convertir o nombre del directorio a procesar -* - Si se indica "BIN2PRG", se procesa el directorio indicado en tcType para generar los TX2 -* - Si se indica "PRG2BIN", se procesa el directorio indicado en tcType para generar los BIN * - En modo compatibilidad con Visual SourceSafe, se usa para preguntar el tipo de soporte de conversión para el tipo de archivo indicado * tcType (v? IN ) Tipo de archivo de entrada +* - Si se indica "BIN2PRG", se procesa el directorio indicado para generar los TX2 +* - Si se indica "PRG2BIN", se procesa el directorio indicado para generar los BIN +* - Si se indica "SIMERR_I0", se simula un error de validación en el archivo de entrada +* - Si se indica "SIMERR_I1", se simula un error de programa en el archivo de entrada +* - Si se indica "SIMERR_O1", se simula un error de programa en el archivo de salida * - Si se indica "*" y tc_InputFile es un PJX, se procesa todo el proyecto * - En modo compatibilidad con Visual SourceSafe, indica el tipo de archivo a convertir * tcTextName (v? IN ) Nombre del archivo texto. (Solo para compatibilidad con Visual SourceSafe) @@ -485,12 +492,17 @@ LOCAL lnResp, loEx AS EXCEPTION * MESSAGEBOX( SYS(5)+CURDIR(),64+4096,PROGRAM(),5000) *ENDIF +*MESSAGEBOX( 'tc_InputFile = ' + TRANSFORM(tc_InputFile) + C_CR ; ++ 'tcType = ' + TRANSFORM(tcType) ) + *-- En el caso de recibir "BIN2PRG" o "PRG2BIN" en el primer parámetro, los invierto. tc_InputFile = EVL(tc_InputFile,'') tcType = EVL(tcType,'') -IF ATC('-BIN2PRG','-'+tc_InputFile) >= 1 OR ATC('-PRG2BIN','-'+tc_InputFile) >= 1 ; - OR ATC('-SHOWMSG','-'+tc_InputFile) >= 1 OR ATC('-INTERACTIVE','-'+tc_InputFile) >= 1 THEN +IF ATC('-BIN2PRG','-'+tc_InputFile) > 0 OR ATC('-PRG2BIN','-'+tc_InputFile) > 0 ; + OR ATC('-SHOWMSG','-'+tc_InputFile) > 0 OR ATC('-INTERACTIVE','-'+tc_InputFile) > 0 ; + OR ATC('-SIMERR_I0','-'+tc_InputFile) > 0 OR ATC('-SIMERR_I1','-'+tc_InputFile) > 0 ; + OR ATC('-SIMERR_O1','-'+tc_InputFile) > 0 THEN pcParamX = tc_InputFile tc_InputFile = tcType tcType = pcParamX @@ -512,7 +524,7 @@ IF _VFP.STARTMODE <> 4 && 4 = Visual FoxPro was started as a distributable .app RETURN lnResp && lnResp contiene un código de error, pero invocado desde SourceSafe puede contener el tipo de soporte de archivo (0,1,2). ENDIF -IF EMPTY(lnResp) OR VARTYPE(loEx) # "O" +IF EMPTY(lnResp) STORE NULL TO loEx, loCnv RELEASE loEx, loCnv QUIT @@ -654,6 +666,7 @@ DEFINE CLASS c_foxbin2prg AS Session n_FB2PRG_Version = 1.19 *-- c_Language = '' && EN, FR, ES, DE + c_SimulateError = '' && SIMERR_I0, SIMERR_I1, SIMERR_O1 c_loc_processing_file = '' c_loc_process_progress = '' c_FB2PRG_EXE_Version = '' @@ -893,13 +906,17 @@ DEFINE CLASS c_foxbin2prg AS Session * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * tcFileMask (v! IN ) Fullpath del archivo del que se desea saber si se procesó *--------------------------------------------------------------------------------------------------- - LPARAMETERS tcFile + LPARAMETERS tcFile, tnID - IF THIS.n_ProcessedFiles = 0 OR ASCAN( THIS.a_ProcessedFiles, tcFile, 1, 0, 1, 1+2+4 ) = 0 + tnID = 0 + + IF THIS.n_ProcessedFiles = 0 RETURN .F. - ELSE - RETURN .T. ENDIF + + tnID = ASCAN( THIS.a_ProcessedFiles, tcFile, 1, 0, 1, 1+2+4 ) + + RETURN (tnID > 0) ENDPROC @@ -2253,14 +2270,14 @@ DEFINE CLASS c_foxbin2prg AS Session tcExt = UPPER(JUSTEXT('.' + tcExt)) WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' - llhasSupport = ICASE( tcExt == 'PJX', .PJX_Conversion_Support >= 1 ; - , tcExt == 'VCX', .VCX_Conversion_Support >= 1 ; - , tcExt == 'SCX', .SCX_Conversion_Support >= 1 ; - , tcExt == 'FRX', .FRX_Conversion_Support >= 1 ; - , tcExt == 'LBX', .LBX_Conversion_Support >= 1 ; - , tcExt == 'MNX', .MNX_Conversion_Support >= 1 ; - , tcExt == 'DBF', .DBF_Conversion_Support >= 1 ; - , tcExt == 'DBC', .DBC_Conversion_Support >= 1 ; + llhasSupport = ICASE( tcExt == 'PJX', .PJX_Conversion_Support > 0 ; + , tcExt == 'VCX', .VCX_Conversion_Support > 0 ; + , tcExt == 'SCX', .SCX_Conversion_Support > 0 ; + , tcExt == 'FRX', .FRX_Conversion_Support > 0 ; + , tcExt == 'LBX', .LBX_Conversion_Support > 0 ; + , tcExt == 'MNX', .MNX_Conversion_Support > 0 ; + , tcExt == 'DBF', .DBF_Conversion_Support > 0 ; + , tcExt == 'DBC', .DBC_Conversion_Support > 0 ; , .F. ) ENDWITH && THIS @@ -2329,7 +2346,7 @@ DEFINE CLASS c_foxbin2prg AS Session TRY LOCAL I, lcPath, lnCodError, lcFileSpec, lcFile, laFiles(1,5), laDirInfo(1,5), lcInputFile_Type, lc_OldSetNotify ; - , lnFileCount, lcErrorInfo, lcErrorFile, lnPCount, laParams(1), lnConversionOption, lnErrorIcon ; + , lnFileCount, lcErrorInfo, lcErrorFile, lnPCount, laParams(1), lnConversionOption, lnErrorIcon, llError ; , loEx AS EXCEPTION ; , loFSO AS Scripting.FileSystemObject ; , loLang AS CL_LANG OF 'FOXBIN2PRG.PRG' ; @@ -2346,6 +2363,8 @@ DEFINE CLASS c_foxbin2prg AS Session loWSH = .o_WSH lnPCount = 0 lcInputFile_Type = '' + .l_Error = .F. + tcType = UPPER( EVL(tcType,'') ) DO CASE @@ -2357,10 +2376,19 @@ DEFINE CLASS c_foxbin2prg AS Session + 'tcType = "' + tcType + '"' + CR_LF ; + CR_LF ; + loLang.C_ALLOWED_VALUES_ARE_LOC + ': ' + CR_LF ; - + '*, *-, -BIN2PRG, -PRG2BIN, -SHOWMSG' + + '*, *-, -BIN2PRG, -PRG2BIN, -SHOWMSG, -SIMERR_I0, -SIMERR_I1, -SIMERR_O1' ENDCASE + DO CASE + CASE ATC('-SIMERR_I0','-'+tcType) > 0 + .c_SimulateError = 'SIMERR_I0' + CASE ATC('-SIMERR_I1','-'+tcType) > 0 + .c_SimulateError = 'SIMERR_I1' + CASE ATC('-SIMERR_O1','-'+tcType) > 0 + .c_SimulateError = 'SIMERR_O1' + ENDCASE + IF .l_AutoClearProcessedFiles THEN .clearProcessedFiles() && Para evitar acumular procesos anteriores ENDIF @@ -2414,7 +2442,6 @@ DEFINE CLASS c_foxbin2prg AS Session tcRecompile = EVL(tcRecompile,'1') .c_Recompile = tcRecompile - tcType = UPPER( EVL(tcType,'') ) .writeLog( REPLICATE( '*', 100 ) ) .writeLog( loLang.C_MAIN_EXECUTION_LOC, 2 ) @@ -2450,7 +2477,7 @@ DEFINE CLASS c_foxbin2prg AS Session CASE EMPTY(tc_InputFile) *-- (Ejemplo de sintaxis y uso) - *MESSAGEBOX( loLang.C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC, 0+64+4096, 'FoxBin2Prg ' + THIS.c_FB2PRG_EXE_Version + ': ' + loLang.C_FOXBIN2PRG_SYNTAX_INFO_LOC + ' (' + .c_Language + ')', 60000 ) + *MESSAGEBOX( loLang.C_FOXBIN2PRG_SYNTAX_INFO_EXAMPLE_LOC, 0+64+4096, 'FoxBin2Prg ' + THIS.c_FB2PRG_EXE_Version + ': ' + loLang.C_FOXBIN2PRG_SYNTAX_INFO_LOC + ' (' + .c_Language + ')', 60000 ) loFrm_Main = CREATEOBJECT('frm_main', THIS) loFrm_Main.Show() READ EVENTS @@ -2460,7 +2487,7 @@ DEFINE CLASS c_foxbin2prg AS Session *-- EJECUCIÓN NORMAL - IF ATC('-INTERACTIVE', ('-' + tcType)) >= 1 ; + IF ATC('-INTERACTIVE', ('-' + tcType)) > 0 ; AND ATC('-BIN2PRG', ('-' + tcType)) = 0 AND ATC('-PRG2BIN', ('-' + tcType)) = 0 ; AND lcInputFile_Type == C_FILETYPE_DIRECTORY THEN *-- Se seleccionó un directorio y se puede elegir: Bin2Txt, Txt2Bin y Nada @@ -2496,7 +2523,9 @@ DEFINE CLASS c_foxbin2prg AS Session *-- Evaluación de FileSpec de entrada DO CASE - CASE lcInputFile_Type == C_FILETYPE_FILE AND ( '*' $ JUSTEXT( tc_InputFile ) OR '?' $ JUSTEXT( tc_InputFile ) ) + CASE ATC('-BIN2PRG', ('-' + tcType)) = 0 AND ATC('-PRG2BIN', ('-' + tcType)) = 0 ; + AND lcInputFile_Type == C_FILETYPE_FILE ; + AND ( '*' $ JUSTEXT( tc_InputFile ) OR '?' $ JUSTEXT( tc_InputFile ) ) IF .l_ShowErrors *MESSAGEBOX( 'No se admiten extensiones * o ? porque es peligroso (se pueden pisar binarios con archivo xx2 vacíos).', 0+48+4096, 'FOXBIN2PRG: ERROR!!', 60000 ) MESSAGEBOX( loLang.C_ASTERISK_EXT_NOT_ALLOWED_LOC, 0+48+4096, 'FoxBin2Prg ' + THIS.c_FB2PRG_EXE_Version + ': ' + loLang.C_FOXBIN2PRG_ERROR_CAPTION_LOC, 60000 ) @@ -2544,19 +2573,69 @@ DEFINE CLASS c_foxbin2prg AS Session *-- Filespec: "*.PJ2", "*" .evaluate_Full_PJ2(lcFile, tcRecompile, @toModulo, @toEx, tcOriginalFileName, .c_LogFile, tcType) + CASE ATC('-BIN2PRG', ('-' + tcType)) > 0 + *-- SE QUIEREN CONVERTIR A TEXTO TODOS LOS ARCHIVOS DE UN DIRECTORIO + *-- Filespec: "*.*" + IF .hasSupport_Bin2Prg(lcFile) THEN + .updateProgressbar( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) + lnCodError = .convert( lcFile, @toModulo, @toEx, .F., tcOriginalFileName ) + .writeLog_Flush() + + DO CASE + CASE lnCodError = 1799 && Conversion Cancelled + ERROR 1799 + + CASE lnCodError > 0 + .doWriteErrorLog( @toEx ) + llError = .T. + .l_Error = .F. + ENDCASE + ENDIF + + CASE ATC('-PRG2BIN', ('-' + tcType)) > 0 + *-- SE QUIEREN CONVERTIR A BINARIO TODOS LOS ARCHIVOS DE UN DIRECTORIO + *-- Filespec: "*.*" + IF .hasSupport_Prg2Bin(lcFile) THEN + .updateProgressbar( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) + lnCodError = .convert( lcFile, @toModulo, @toEx, .F., tcOriginalFileName ) + .writeLog_Flush() + + DO CASE + CASE lnCodError = 1799 && Conversion Cancelled + ERROR 1799 + + CASE lnCodError > 0 + .doWriteErrorLog( @toEx ) + llError = .T. + .l_Error = .F. + ENDCASE + ENDIF + OTHERWISE *-- DEMÁS ARCHIVOS *-- Filespec: "*.EXT" .updateProgressbar( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) lnCodError = .convert( lcFile, @toModulo, @toEx, .T., tcOriginalFileName ) .writeLog_Flush() + + DO CASE + CASE lnCodError = 1799 && Conversion Cancelled + ERROR 1799 + + CASE lnCodError > 0 + .doWriteErrorLog( @toEx ) + ENDCASE ENDCASE ENDFOR + IF llError + .l_Error = .T. + ENDIF + EXIT - CASE ATC('-BIN2PRG', ('-' + tcType)) >= 1 + CASE ATC('-BIN2PRG', ('-' + tcType)) > 0 .writeLog( '> ' + loLang.C_OPTION_LOC + ': BIN2PRG' ) IF .n_ShowProgressbar <> 0 AND .l_ProcessFiles THEN @@ -2616,7 +2695,7 @@ DEFINE CLASS c_foxbin2prg AS Session ENDCASE - CASE ATC('-PRG2BIN', ('-' + tcType)) >= 1 + CASE ATC('-PRG2BIN', ('-' + tcType)) > 0 .writeLog( '> ' + loLang.C_OPTION_LOC + ': PRG2BIN' ) IF .n_ShowProgressbar <> 0 AND .l_ProcessFiles THEN @@ -2785,7 +2864,7 @@ DEFINE CLASS c_foxbin2prg AS Session lnErrorIcon = 16 ENDIF - IF ATC('-SHOWMSG', ('-' + tcType)) >= 1 THEN + IF ATC('-SHOWMSG', ('-' + tcType)) > 0 THEN IF lnCodError <> 1799 THEN && Conversion Cancelled toEx.UserValue = toEx.UserValue + 'lcInputFile_Type = [' + TRANSFORM(lcInputFile_Type) + ']' + CR_LF ENDIF @@ -2820,7 +2899,7 @@ DEFINE CLASS c_foxbin2prg AS Session DO CASE CASE EVL( lcInputFile_Type, C_FILETYPE_QUERYSUPPORT ) <> C_FILETYPE_QUERYSUPPORT ; - AND ATC('-SHOWMSG', ('-' + tcType)) >= 1 ; + AND ATC('-SHOWMSG', ('-' + tcType)) > 0 ; OR THIS.l_ShowErrors AND lnCodError > 0 AND NOT ISNULL(toEx) THIS.writeErrorLog_Flush() @@ -2833,8 +2912,12 @@ DEFINE CLASS c_foxbin2prg AS Session MESSAGEBOX( loLang.C_CONVERSION_CANCELLED_BY_USER_LOC + '!', 0+64+4096, 'FoxBin2Prg ' + THIS.c_FB2PRG_EXE_Version, 60000 ) CASE THIS.l_Error - 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 ) + 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 ) + ELSE + MESSAGEBOX( loLang.C_END_OF_PROCESS_LOC + '! (' + loLang.C_WITH_ERRORS_LOC + ')' + CR_LF + "[Warning: Can't show Error LOG file because does not exist!]", 0+48+4096, 'FoxBin2Prg ' + THIS.c_FB2PRG_EXE_Version, 60000 ) + ENDIF OTHERWISE MESSAGEBOX( loLang.C_END_OF_PROCESS_LOC + '', 0+64+4096, 'FoxBin2Prg ' + THIS.c_FB2PRG_EXE_Version, 60000 ) @@ -2843,6 +2926,10 @@ DEFINE CLASS c_foxbin2prg AS Session ENDCASE + IF EMPTY(lnCodError) AND THIS.l_Error + lnCodError = 1098 + ENDIF + SET NOTIFY &lc_OldSetNotify. STORE NULL TO loFSO, loWSH RELEASE tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDebug, tcDontShowProgress ; @@ -2877,7 +2964,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 ; + LOCAL lcFileSpec, lnFileCount, laFiles(1,1), lcFile, lnCodError, I, lnFileCount, llError ; , loLang AS CL_LANG OF 'FOXBIN2PRG.PRG' TRY @@ -2941,6 +3028,8 @@ DEFINE CLASS c_foxbin2prg AS Session CASE lnCodError > 0 .doWriteErrorLog( @toEx ) + llError = .T. + .l_Error = .F. ENDCASE ELSE *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) @@ -2950,6 +3039,10 @@ DEFINE CLASS c_foxbin2prg AS Session ENDIF .writeLog_Flush() + + IF llError + .l_Error = .T. + ENDIF ENDFOR ENDWITH ENDTRY @@ -3043,6 +3136,8 @@ DEFINE CLASS c_foxbin2prg AS Session CASE lnCodError > 0 .doWriteErrorLog( @toEx ) + llError = .T. + .l_Error = .F. ENDCASE ELSE *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) @@ -3052,6 +3147,10 @@ DEFINE CLASS c_foxbin2prg AS Session ENDIF .writeLog_Flush() + + IF llError + .l_Error = .T. + ENDIF ENDFOR ENDWITH ENDTRY @@ -3104,7 +3203,7 @@ DEFINE CLASS c_foxbin2prg AS Session TRY LOCAL lnCodError, lcErrorInfo, laDirFile(1,5), lcExtension, lnFileCount, laFiles(1,1), I ; - , ltFilestamp, lcExtA, lcExtB, laEvents(1,1), lcForceAttribs ; + , ltFilestamp, lcExtA, lcExtB, laEvents(1,1), lcForceAttribs, lnIDInputFile ; , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' ; , loConversor as c_conversor_base OF 'FOXBIN2PRG.PRG' ; , loFSO AS Scripting.FileSystemObject @@ -3115,6 +3214,7 @@ DEFINE CLASS c_foxbin2prg AS Session loLang = _SCREEN.o_FoxBin2Prg_Lang lcForceAttribs = '+N' .c_InputFile = FULLPATH( tc_InputFile ) + .l_Error = .F. lcExtension = UPPER( JUSTEXT(.c_InputFile) ) .writeLog( REPLICATE( '*', 100 ) ) @@ -3185,7 +3285,9 @@ DEFINE CLASS c_foxbin2prg AS Session EXIT ENDIF - .updateProcessedFile() + *.updateProcessedFile() + lnIDInputFile = .n_ProcessedFiles + .writeLog( C_TAB + 'c_OriginalFileName: ' + .c_OriginalFileName ) .writeLog( ) @@ -3353,7 +3455,7 @@ DEFINE CLASS c_foxbin2prg AS Session lnFileCount = ADIR( laFiles, FORCEEXT( .c_InputFile, '*' ), '', 1 ) STORE {//::} TO .t_InputFile_TimeStamp, .t_OutputFile_TimeStamp, ltFilestamp - IF lnFileCount >= 1 THEN + IF lnFileCount > 0 THEN *-- Busca el archivo de entrada original I = ASCAN( laFiles, JUSTFNAME(.c_InputFile), 1, 0, 1, 1+2+4+8 ) IF I > 0 THEN @@ -3422,6 +3524,11 @@ DEFINE CLASS c_foxbin2prg AS Session ENDIF loConversor.convert( @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 @@ -3443,7 +3550,7 @@ DEFINE CLASS c_foxbin2prg AS Session *lcErrorInfo = THIS.exception2Str(toEx) + CR_LF + CR_LF + loLang.C_SOURCEFILE_LOC + THIS.c_InputFile *-- updateProcessedFile( tcProcessed, tcHasErrors, tcSupported, tcReserved ) - THIS.updateProcessedFile( '', 'E1' ) + THIS.updateProcessedFile( lnIDInputFile, '', '', 'E1' ) IF THIS.n_Debug > 0 THEN IF _VFP.STARTMODE = 0 @@ -3461,9 +3568,11 @@ DEFINE CLASS c_foxbin2prg AS Session STORE NULL TO loConversor, loFSO - *IF lnCodError = 0 OR NOT THIS.l_ShowErrors THEN - * THIS.writeLog( REPLICATE('-',100) ) - *ENDIF + IF lnCodError = 0 AND THIS.l_Error THEN + THIS.updateProcessedFile( lnIDInputFile, '', '', 'E1' ) + ELSE + *THIS.updateProcessedFile( lnIDInputFile ) + ENDIF RELEASE tc_InputFile, toModulo, toEx, tlRelanzarError, tcOriginalFileName ; , lcErrorInfo, laDirFile, lcExtension, lnFileCount, laFiles, I ; @@ -3855,13 +3964,14 @@ DEFINE CLASS c_foxbin2prg AS Session * ACTUALIZA ALGUNOS DATOS DEL ARCHIVO PROCESADO ACTUAL *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * tnID (v? IN ) ID del archivo a actualizar. Si no se indica se asume el actual. * tcInOutType (v? IN ) Archivo de entrada o de salida ("I"=Input file, "O"=Output file) * tcProcessed (v? IN ) Procesado ("P0"=Not Processed, "P1"=Processed) * tcHasErrors (v? IN ) Tuvo Errores ("E0"=No Errors, "E1"=Has Errors) * tcSupported (v? IN ) Archivo soportado ("S0"=Unsupported, "S1"=Supported) * tcExpanded (v? IN ) Tipo de archivo ("X0"=Normal file, "X1"=Expanded multipart file) *--------------------------------------------------------------------------------------------------- - LPARAMETERS tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded + LPARAMETERS tnID, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded TRY LOCAL loEx as Exception @@ -3870,24 +3980,25 @@ DEFINE CLASS c_foxbin2prg AS Session IF .n_ProcessedFiles = 0 THEN EXIT ENDIF + tnID = EVL(tnID, .n_ProcessedFiles) IF NOT EMPTY(tcInOutType) - .a_ProcessedFiles(.n_ProcessedFiles, 2) = EVL(tcProcessed, '') + .a_ProcessedFiles(tnID, 2) = EVL(tcProcessed, '') ENDIF IF NOT EMPTY(tcProcessed) - .a_ProcessedFiles(.n_ProcessedFiles, 3) = EVL(tcProcessed, '') + .a_ProcessedFiles(tnID, 3) = EVL(tcProcessed, '') ENDIF IF NOT EMPTY(tcHasErrors) - .a_ProcessedFiles(.n_ProcessedFiles, 4) = EVL(tcHasErrors, '') + .a_ProcessedFiles(tnID, 4) = EVL(tcHasErrors, '') ENDIF IF NOT EMPTY(tcSupported) - .a_ProcessedFiles(.n_ProcessedFiles, 5) = EVL(tcSupported, '') + .a_ProcessedFiles(tnID, 5) = EVL(tcSupported, '') ENDIF - .stdOut( .a_ProcessedFiles(.n_ProcessedFiles,2) ; - + ',' + .a_ProcessedFiles(.n_ProcessedFiles,3) ; - + ',' + .a_ProcessedFiles(.n_ProcessedFiles,4) ; - + ',' + .a_ProcessedFiles(.n_ProcessedFiles,5) ; - + ',' + .a_ProcessedFiles(.n_ProcessedFiles,6) ; - + ',' + LOWER(.a_ProcessedFiles(.n_ProcessedFiles,1)) ) + .stdOut( .a_ProcessedFiles(tnID,2) ; + + ',' + .a_ProcessedFiles(tnID,3) ; + + ',' + .a_ProcessedFiles(tnID,4) ; + + ',' + .a_ProcessedFiles(tnID,5) ; + + ',' + .a_ProcessedFiles(tnID,6) ; + + ',' + LOWER(.a_ProcessedFiles(tnID,1)) ) ENDWITH CATCH TO loEx @@ -4365,7 +4476,7 @@ DEFINE CLASS frm_avance AS Form lnSecs = SECONDS() - IF lnSecs - .nLastSecCount >= 1 THEN + IF lnSecs - .nLastSecCount > 0 THEN .lblElapsedTime.Caption = 'Elapsed Time: ' + TTOC( {^2000-1-1,00:00:00} + lnSecs - .nSecsAtStart, 2 ) .nLastSecCount = lnSecs ENDIF @@ -4597,7 +4708,7 @@ DEFINE CLASS frm_interactive AS Form THISFORM.n_ConversionType = 3 NODEFAULT THISFORM.do_selection() - + ENDPROC PROCEDURE do_selection @@ -4631,7 +4742,7 @@ ENDDEFINE -DEFINE CLASS frm_main AS form +DEFINE CLASS frm_main AS form AllowOutput = .F. AlwaysOnTop = .T. AutoCenter = .T. @@ -4657,7 +4768,6 @@ DEFINE CLASS frm_main AS form Name = "cmd_Close", ; Top = 344, ; Width = 84 - *< END OBJECT: BaseClass="commandbutton" /> ADD OBJECT 'edt_Help' AS editbox WITH ; BackStyle = 0, ; @@ -4670,45 +4780,44 @@ DEFINE CLASS frm_main AS form ScrollBars = 0, ; Top = 12, ; Width = 728 - *< END OBJECT: BaseClass="editbox" /> - + PROCEDURE Init LPARAMETERS toFoxBin2Prg - + #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF - + LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' - + IF VARTYPE(toFoxBin2Prg) = "O" THEN IF VARTYPE(_SCREEN.o_FoxBin2Prg_Lang) = "O" THEN loLang = _SCREEN.o_FoxBin2Prg_Lang - + IF PEMSTATUS(_SCREEN, 'c_FB2PRG_EXE_Version', 5) THEN THISFORM.Caption = 'FoxBin2Prg ' + _SCREEN.c_FB2PRG_EXE_Version + ' - ' + loLang.C_FOXBIN2PRG_SYNTAX_INFO_LOC ENDIF - - THISFORM.edt_help.Value = loLang.C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC + + THISFORM.edt_help.Value = loLang.C_FOXBIN2PRG_SYNTAX_INFO_EXAMPLE_LOC ENDIF - + IF FILE( FORCEEXT( toFoxBin2Prg.c_Foxbin2prg_FullPath, 'ICO' ) ) THEN THISFORM.Icon = FORCEEXT( toFoxBin2Prg.c_Foxbin2prg_FullPath, 'ICO' ) ENDIF ENDIF - + ENDPROC PROCEDURE QueryUnload CLEAR EVENTS NODEFAULT - + ENDPROC PROCEDURE cmd_Close.Click THISFORM.Hide() CLEAR EVENTS - + ENDPROC ENDDEFINE @@ -6054,7 +6163,7 @@ DEFINE CLASS c_conversor_base AS Session ACOPY( taPropsAndValues, laPropsAndValues ) WITH THIS AS c_conversor_base OF 'FOXBIN2PRG.PRG' - IF m.tnSortType >= 1 + IF m.tnSortType > 0 * CON SORT: * - A las que no tienen '.' les pongo 'A' por delante, y al resto 'B' por delante para que queden al final FOR I = 1 TO m.tnPropsAndValues_Count @@ -7704,7 +7813,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base IF RIGHT(tcLine, 3) == ', ;' && VALOR INTERMEDIO CON ", ;" .get_SeparatedPropAndValue( LEFT(tcLine, LEN(tcLine) - 3), @lcProp, @lcValue, toClase, @taCodeLines, @tnCodeLines, @I ) - + * * Skip ZOrderSet if configured to * @@ -7714,7 +7823,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base toObjeto.add_Property( @lcProp, @lcValue ) ELSE && VALOR FINAL SIN ", ;" (JUSTO ANTES DEL ) .get_SeparatedPropAndValue( tcLine, @lcProp, @lcValue, toClase, @taCodeLines, @tnCodeLines, @I ) - + * * Skip ZOrderSet if configured to * @@ -8774,8 +8883,8 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin LOCAL THIS AS c_conversor_prg_a_vcx OF 'FOXBIN2PRG.PRG' #ENDIF *_MEMBERDATA = [] ; - + [] ; - + [] + + [] ; + + [] c_Type = 'VC2' @@ -8795,7 +8904,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin TRY LOCAL lnCodError, laCodeLines(1), lnCodeLines, lcInputFile, lcInputFile_Class, lnFileCount, laFiles(1,5) ; - , laLineasExclusion(1), lnBloquesExclusion, I, lcClassName ; + , laLineasExclusion(1), lnBloquesExclusion, I, lcClassName, lnIDInputFile ; , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' WITH THIS AS c_conversor_prg_a_vcx OF 'FOXBIN2PRG.PRG' @@ -8805,6 +8914,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin loLang = _SCREEN.o_FoxBin2Prg_Lang toModulo = CREATEOBJECT('CL_CLASSLIB') + lnIDInputFile = toFoxBin2Prg.n_ProcessedFiles IF toFoxBin2Prg.n_UseClassPerFile > 0 AND toFoxBin2Prg.l_RedirectClassPerFileToMain C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) @@ -8880,12 +8990,12 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin ENDIF - *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) - IF toFoxBin2Prg.addProcessedFile( .c_OutputFile, 'O', 'P1', 'E0', 'S1', 'X0' ) THEN - toFoxBin2Prg.updateProcessedFile() - ENDIF - IF NOT toFoxBin2Prg.l_ProcessFiles THEN + *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) + IF toFoxBin2Prg.addProcessedFile( .c_OutputFile, 'O', 'P1', 'E0', 'S1', 'X0' ) THEN + toFoxBin2Prg.updateProcessedFile() + ENDIF + EXIT && Si se indicó no procesar, se sale aquí. (Modo de simulación) ENDIF @@ -8896,11 +9006,19 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo de cada clase .identifyCodeBlocks( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) + DO CASE + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I1' + ERROR 'InputFile Error Simulation' + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I0' + .writeErrorLog( '*** SIMULATED ERROR' ) + ENDCASE + IF .l_Error .writeLog( '*** ERRORS found - Generation Cancelled' ) EXIT ENDIF + toFoxBin2Prg.updateProcessedFile( lnIDInputFile ) .updateProgressbar( loLang.C_GENERATING_BINARY_LOC + '...', 0, lnCodeLines, 1 ) toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) .createClasslib() @@ -9008,6 +9126,15 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin STORE NULL TO loFSO, loClase loFSO = .oFSO + *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) + toFoxBin2Prg.addProcessedFile( .c_OutputFile, 'O', 'P1', 'E0', 'S1', 'X0' ) + + + DO CASE + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_O1' + ERROR 'OutputFile Error Simulation' + ENDCASE + *-- Creo el registro de cabecera .createClasslib_RecordHeader( toModulo ) @@ -9139,11 +9266,14 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin IF toFoxBin2Prg.l_Recompile toFoxBin2Prg.compileFoxProBinary() ENDIF + + toFoxBin2Prg.updateProcessedFile() ENDWITH && THIS CATCH TO loEx lnCodError = loEx.ERRORNO + toFoxBin2Prg.updateProcessedFile( 0, '', '', 'E1' ) IF THIS.n_Debug > 0 AND _VFP.STARTMODE = 0 SET STEP ON @@ -9171,8 +9301,8 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin LOCAL THIS AS c_conversor_prg_a_scx OF 'FOXBIN2PRG.PRG' #ENDIF *_MEMBERDATA = [] ; - + [] ; - + [] + + [] ; + + [] c_Type = 'SC2' @@ -9192,7 +9322,7 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin TRY LOCAL lnCodError, laCodeLines(1), lnCodeLines, lcInputFile, lcInputFile_Class, lnFileCount, laFiles(1,5) ; - , laLineasExclusion(1), lnBloquesExclusion, I ; + , laLineasExclusion(1), lnBloquesExclusion, I, lnIDInputFile ; , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' WITH THIS AS c_conversor_prg_a_vcx OF 'FOXBIN2PRG.PRG' @@ -9202,6 +9332,7 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin loLang = _SCREEN.o_FoxBin2Prg_Lang toModulo = CREATEOBJECT('CL_CLASSLIB') + lnIDInputFile = toFoxBin2Prg.n_ProcessedFiles IF toFoxBin2Prg.n_UseClassPerFile > 0 AND toFoxBin2Prg.l_RedirectClassPerFileToMain C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) @@ -9273,12 +9404,12 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin ENDIF - *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) - IF toFoxBin2Prg.addProcessedFile( .c_OutputFile, 'O', 'P1', 'E0', 'S1', 'X0' ) THEN - toFoxBin2Prg.updateProcessedFile() - ENDIF - IF NOT toFoxBin2Prg.l_ProcessFiles THEN + *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) + IF toFoxBin2Prg.addProcessedFile( .c_OutputFile, 'O', 'P1', 'E0', 'S1', 'X0' ) THEN + toFoxBin2Prg.updateProcessedFile() + ENDIF + EXIT && Si se indicó no procesar, se sale aquí. (Modo de simulación) ENDIF @@ -9289,11 +9420,19 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo de cada clase .identifyCodeBlocks( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) + DO CASE + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I1' + ERROR 'InputFile Error Simulation' + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I0' + .writeErrorLog( '*** SIMULATED ERROR' ) + ENDCASE + IF .l_Error .writeLog( '*** ERRORS found - Generation Cancelled' ) EXIT ENDIF + toFoxBin2Prg.updateProcessedFile( lnIDInputFile ) .updateProgressbar( 'Generating Binary...', 0, lnCodeLines, 1 ) toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) .createForm() @@ -9397,6 +9536,14 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin , loClase AS CL_CLASE OF 'FOXBIN2PRG.PRG' WITH THIS AS c_conversor_prg_a_scx OF 'FOXBIN2PRG.PRG' + *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) + toFoxBin2Prg.addProcessedFile( .c_OutputFile, 'O', 'P1', 'E0', 'S1', 'X0' ) + + DO CASE + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_O1' + ERROR 'OutputFile Error Simulation' + ENDCASE + *-- Creo el registro de cabecera .createForm_RecordHeader( toModulo ) @@ -9532,10 +9679,14 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin IF toFoxBin2Prg.l_Recompile toFoxBin2Prg.compileFoxProBinary() ENDIF + + toFoxBin2Prg.updateProcessedFile() ENDWITH && THIS CATCH TO loEx + toFoxBin2Prg.updateProcessedFile( 0, '', '', 'E1' ) + IF THIS.n_Debug > 0 AND _VFP.STARTMODE = 0 SET STEP ON ENDIF @@ -9590,18 +9741,19 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin #ENDIF TRY - LOCAL laCodeLines(1), lnCodeLines, laLineasExclusion(1), lnBloquesExclusion, I + LOCAL laCodeLines(1), lnCodeLines, laLineasExclusion(1), lnBloquesExclusion, I, lnIDInputFile WITH THIS AS c_conversor_prg_a_pjx OF 'FOXBIN2PRG.PRG' STORE 0 TO lnCodeLines STORE NULL TO toModulo - - *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) - IF toFoxBin2Prg.addProcessedFile( .c_OutputFile, 'O', 'P1', 'E0', 'S1', 'X0' ) THEN - toFoxBin2Prg.updateProcessedFile() - ENDIF + lnIDInputFile = toFoxBin2Prg.n_ProcessedFiles IF NOT toFoxBin2Prg.l_ProcessFiles THEN + *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) + IF toFoxBin2Prg.addProcessedFile( .c_OutputFile, 'O', 'P1', 'E0', 'S1', 'X0' ) THEN + toFoxBin2Prg.updateProcessedFile() + ENDIF + EXIT && Si se indicó no procesar, se sale aquí. (Modo de simulación) ENDIF @@ -9615,15 +9767,23 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin .updateProgressbar( 'Identifying Code Blocks...', 1, 2, 1 ) .identifyCodeBlocks( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toProject ) + DO CASE + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I1' + ERROR 'InputFile Error Simulation' + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I0' + .writeErrorLog( '*** SIMULATED ERROR' ) + ENDCASE + IF .l_Error .writeLog( '*** ERRORS found - Generation Cancelled' ) EXIT ENDIF + toFoxBin2Prg.updateProcessedFile( lnIDInputFile ) .updateProgressbar( 'Generating Binary...', 2, 2, 1 ) toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) .createProject() - .writeBinaryFile( @toProject, toFoxBin2Prg ) + .writeBinaryFile( @toProject, @toFoxBin2Prg ) ENDWITH && THIS @@ -9662,6 +9822,14 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin toProject._HomeDir = CHRTRAN( toProject._HomeDir, ['], [] ) toProject._SccData = CHR(3) + CHR(0) + CHR(1) + REPLICATE( CHR(0), 651 ) + *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) + toFoxBin2Prg.addProcessedFile( .c_OutputFile, 'O', 'P1', 'E0', 'S1', 'X0' ) + + DO CASE + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_O1' + ERROR 'OutputFile Error Simulation' + ENDCASE + *-- Creo solo el registro de cabecera del proyecto .createProject_RecordHeader( toProject ) @@ -9745,11 +9913,13 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin ENDFOR USE IN (SELECT("TABLABIN")) + toFoxBin2Prg.updateProcessedFile() ENDWITH && THIS CATCH TO loEx lnCodError = loEx.ERRORNO + toFoxBin2Prg.updateProcessedFile( 0, '', '', 'E1' ) IF THIS.n_Debug > 0 AND _VFP.STARTMODE = 0 SET STEP ON @@ -10398,18 +10568,19 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin TRY LOCAL lnCodError, loEx AS EXCEPTION, laCodeLines(1), lnCodeLines ; - , laLineasExclusion(1), lnBloquesExclusion, I + , laLineasExclusion(1), lnBloquesExclusion, I, lnIDInputFile WITH THIS AS c_conversor_prg_a_frx OF 'FOXBIN2PRG.PRG' STORE 0 TO lnCodError, lnCodeLines STORE NULL TO toReport - - *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) - IF toFoxBin2Prg.addProcessedFile( .c_OutputFile, 'O', 'P1', 'E0', 'S1', 'X0' ) THEN - toFoxBin2Prg.updateProcessedFile() - ENDIF + lnIDInputFile = toFoxBin2Prg.n_ProcessedFiles IF NOT toFoxBin2Prg.l_ProcessFiles THEN + *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) + IF toFoxBin2Prg.addProcessedFile( .c_OutputFile, 'O', 'P1', 'E0', 'S1', 'X0' ) THEN + toFoxBin2Prg.updateProcessedFile() + ENDIF + EXIT && Si se indicó no procesar, se sale aquí. (Modo de simulación) ENDIF @@ -10423,15 +10594,23 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin .identifyCodeBlocks( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toReport ) USE IN (SELECT('TABLABIN')) + DO CASE + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I1' + ERROR 'InputFile Error Simulation' + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I0' + .writeErrorLog( '*** SIMULATED ERROR' ) + ENDCASE + IF .l_Error .writeLog( '*** ERRORS found - Generation Cancelled' ) EXIT ENDIF + toFoxBin2Prg.updateProcessedFile( lnIDInputFile ) .updateProgressbar( 'Generating Binary...', 2, 2, 1 ) toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) .createReport() - .writeBinaryFile( @toReport, toFoxBin2Prg ) + .writeBinaryFile( @toReport, @toFoxBin2Prg ) ENDWITH && THIS @@ -10470,6 +10649,14 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin AFIELDS( laFieldTypes ) loReg = NULL + *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) + toFoxBin2Prg.addProcessedFile( THIS.c_OutputFile, 'O', 'P1', 'E0', 'S1', 'X0' ) + + DO CASE + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_O1' + ERROR 'OutputFile Error Simulation' + ENDCASE + *-- Agrego los registros FOR EACH loReg IN toReport FOXOBJECT @@ -10527,9 +10714,12 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin toFoxBin2Prg.compileFoxProBinary() ENDIF + toFoxBin2Prg.updateProcessedFile() + CATCH TO loEx lnCodError = loEx.ERRORNO + toFoxBin2Prg.updateProcessedFile( 0, '', '', 'E1' ) IF THIS.n_Debug > 0 AND _VFP.STARTMODE = 0 SET STEP ON @@ -10847,16 +11037,19 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin #ENDIF TRY - LOCAL lnCodError, loEx AS EXCEPTION, laCodeLines(1), lnCodeLines, laLineasExclusion(1), lnBloquesExclusion, I + LOCAL lnCodError, loEx AS EXCEPTION, laCodeLines(1), lnCodeLines, laLineasExclusion(1), lnBloquesExclusion, I ; + , lnIDInputFile STORE 0 TO lnCodError, lnCodeLines WITH THIS AS c_conversor_prg_a_dbf OF 'FOXBIN2PRG.PRG' - *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) - IF toFoxBin2Prg.addProcessedFile( .c_OutputFile, 'O', 'P1', 'E0', 'S1', 'X0' ) THEN - toFoxBin2Prg.updateProcessedFile() - ENDIF + lnIDInputFile = toFoxBin2Prg.n_ProcessedFiles IF NOT toFoxBin2Prg.l_ProcessFiles THEN + *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) + IF toFoxBin2Prg.addProcessedFile( .c_OutputFile, 'O', 'P1', 'E0', 'S1', 'X0' ) THEN + toFoxBin2Prg.updateProcessedFile() + ENDIF + EXIT && Si se indicó no procesar, se sale aquí. (Modo de simulación) ENDIF @@ -10868,11 +11061,19 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte .identifyCodeBlocks( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toTable ) + DO CASE + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I1' + ERROR 'InputFile Error Simulation' + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I0' + .writeErrorLog( '*** SIMULATED ERROR' ) + ENDCASE + IF .l_Error .writeLog( '*** ERRORS found - Generation Cancelled' ) EXIT ENDIF + toFoxBin2Prg.updateProcessedFile( lnIDInputFile ) .writeBinaryFile( @toTable, @toFoxBin2Prg ) ENDWITH && THIS @@ -10918,6 +11119,14 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin STORE '' TO lcIndex, lcFieldDef lnDataSessionID = .DATASESSIONID + *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) + toFoxBin2Prg.addProcessedFile( .c_OutputFile, 'O', 'P1', 'E0', 'S1', 'X0' ) + + DO CASE + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_O1' + ERROR 'OutputFile Error Simulation' + ENDCASE + ERASE (FORCEEXT(.c_OutputFile, 'DBF')) ERASE (FORCEEXT(.c_OutputFile, 'FPT')) ERASE (FORCEEXT(.c_OutputFile, 'CDX')) @@ -11020,11 +11229,14 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin ENDIF loDBFUtils.write_DBC_BackLink( .c_OutputFile, toTable._Database, ldLastUpdate ) + + toFoxBin2Prg.updateProcessedFile() ENDWITH && THIS CATCH TO loEx lnCodError = loEx.ERRORNO + toFoxBin2Prg.updateProcessedFile( 0, '', '', 'E1' ) loEx.USERVALUE = 'lcIndex="' + TRANSFORM(lcIndex) + '"' + CR_LF ; + 'lcFieldDef="' + TRANSFORM(lcFieldDef) + '"' + CR_LF ; + 'lcCreateTable="' + TRANSFORM(lcCreateTable) + '"' @@ -11156,7 +11368,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin TRY LOCAL lnCodError, loEx AS EXCEPTION, loReg, lcLine, laCodeLines(1), lnCodeLines, lcBaseFilename, lcInputFile ; - , lcMemberType, lcMemberName, lcLastMemberType ; + , lcMemberType, lcMemberName, lcLastMemberType, lnIDInputFile ; , laLineasExclusion(1), lnBloquesExclusion, I, X, Y, laFiles(1,5), lnFileCount, lcTempTxt, laLines(1) ; , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' STORE 0 TO lnCodError, lnCodeLines, lnFileCount @@ -11166,11 +11378,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin WITH THIS AS c_conversor_prg_a_dbc OF 'FOXBIN2PRG.PRG' loLang = _SCREEN.o_FoxBin2Prg_Lang toDatabase = CREATEOBJECT('CL_DBC') - - *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) - IF toFoxBin2Prg.addProcessedFile( .c_OutputFile, 'O', 'P1', 'E0', 'S1', 'X0' ) THEN - toFoxBin2Prg.updateProcessedFile() - ENDIF + lnIDInputFile = toFoxBin2Prg.n_ProcessedFiles IF toFoxBin2Prg.n_UseClassPerFile > 0 AND toFoxBin2Prg.l_RedirectClassPerFileToMain C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) @@ -11278,6 +11486,11 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ENDFOR IF NOT toFoxBin2Prg.l_ProcessFiles THEN + *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) + IF toFoxBin2Prg.addProcessedFile( .c_OutputFile, 'O', 'P1', 'E0', 'S1', 'X0' ) THEN + toFoxBin2Prg.updateProcessedFile() + ENDIF + EXIT && Si se indicó no procesar, se sale aquí. (Modo de simulación) ENDIF @@ -11304,6 +11517,11 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ELSE *-- No es clase por archivo, o no se quiere redireccionar a Main. IF NOT toFoxBin2Prg.l_ProcessFiles THEN + *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) + IF toFoxBin2Prg.addProcessedFile( .c_OutputFile, 'O', 'P1', 'E0', 'S1', 'X0' ) THEN + toFoxBin2Prg.updateProcessedFile() + ENDIF + EXIT && Si se indicó no procesar, se sale aquí. (Modo de simulación) ENDIF @@ -11320,15 +11538,23 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin .updateProgressbar( 'Identifying Code Blocks...', 1, 2, 1 ) .identifyCodeBlocks( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toDatabase, @toFoxBin2Prg ) + DO CASE + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I1' + ERROR 'InputFile Error Simulation' + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I0' + .writeErrorLog( '*** SIMULATED ERROR' ) + ENDCASE + IF .l_Error .writeLog( '*** ERRORS found - Generation Cancelled' ) EXIT ENDIF + toFoxBin2Prg.updateProcessedFile( lnIDInputFile ) .updateProgressbar( 'Generating Binary...', 2, 2, 1 ) toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) *.createTable() - .writeBinaryFile( @toDatabase, toFoxBin2Prg ) + .writeBinaryFile( @toDatabase, @toFoxBin2Prg ) ENDWITH && THIS @@ -11362,6 +11588,14 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin LOCAL lnCodError, lcEventsFile lnCodError = 0 + *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) + toFoxBin2Prg.addProcessedFile( THIS.c_OutputFile, 'O', 'P1', 'E0', 'S1', 'X0' ) + + DO CASE + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_O1' + ERROR 'OutputFile Error Simulation' + ENDCASE + IF NOT EMPTY(toDatabase._DBCEventFilename) IF LEFT(toDatabase._DBCEventFilename,1) = '.' THEN lcEventsFile = ADDBS( JUSTPATH(.c_InputFile) ) + toDatabase._DBCEventFilename @@ -11384,9 +11618,12 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin toFoxBin2Prg.compileFoxProBinary() ENDIF + toFoxBin2Prg.updateProcessedFile() + CATCH TO loEx lnCodError = loEx.ERRORNO + toFoxBin2Prg.updateProcessedFile( 0, '', '', 'E1' ) IF THIS.n_Debug > 0 AND _VFP.STARTMODE = 0 SET STEP ON @@ -11633,17 +11870,19 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin TRY LOCAL lnCodError, loEx AS EXCEPTION, loReg, lcLine, laCodeLines(1), lnCodeLines ; - , laLineasExclusion(1), lnBloquesExclusion + , laLineasExclusion(1), lnBloquesExclusion, lnIDInputFile STORE 0 TO lnCodError, lnCodeLines STORE '' TO lcLine WITH THIS AS c_conversor_prg_a_mnx OF 'FOXBIN2PRG.PRG' - *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) - IF toFoxBin2Prg.addProcessedFile( .c_OutputFile, 'O', 'P1', 'E0', 'S1', 'X0' ) THEN - toFoxBin2Prg.updateProcessedFile() - ENDIF + lnIDInputFile = toFoxBin2Prg.n_ProcessedFiles IF NOT toFoxBin2Prg.l_ProcessFiles THEN + *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) + IF toFoxBin2Prg.addProcessedFile( .c_OutputFile, 'O', 'P1', 'E0', 'S1', 'X0' ) THEN + toFoxBin2Prg.updateProcessedFile() + ENDIF + EXIT && Si se indicó no procesar, se sale aquí. (Modo de simulación) ENDIF @@ -11657,15 +11896,23 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin .identifyCodeBlocks( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toMenu ) USE IN (SELECT('TABLABIN')) + DO CASE + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I1' + ERROR 'InputFile Error Simulation' + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I0' + .writeErrorLog( '*** SIMULATED ERROR' ) + ENDCASE + IF .l_Error .writeLog( '*** ERRORS found - Generation Cancelled' ) EXIT ENDIF + toFoxBin2Prg.updateProcessedFile( lnIDInputFile ) .updateProgressbar( 'Generating Binary...', 1, 2, 1 ) toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) .createMenu() - .writeBinaryFile( @toMenu ) + .writeBinaryFile( @toMenu, @toFoxBin2Prg ) ENDWITH && THIS @@ -11756,7 +12003,7 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * toMenu (!@ OUT) Objeto generado de clase CL_DBC con la información leida del texto *--------------------------------------------------------------------------------------------------- - LPARAMETERS toMenu + LPARAMETERS toMenu, toFoxBin2Prg #IF .F. LOCAL toMenu AS CL_MENU OF 'FOXBIN2PRG.PRG' @@ -11766,11 +12013,22 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin LOCAL lnCodError lnCodError = 0 + *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) + toFoxBin2Prg.addProcessedFile( THIS.c_OutputFile, 'O', 'P1', 'E0', 'S1', 'X0' ) + + DO CASE + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_O1' + ERROR 'OutputFile Error Simulation' + ENDCASE + toMenu.updateMENU( THIS ) + toFoxBin2Prg.updateProcessedFile() + CATCH TO loEx lnCodError = loEx.ERRORNO + toFoxBin2Prg.updateProcessedFile( 0, '', '', 'E1' ) IF THIS.n_Debug > 0 AND _VFP.STARTMODE = 0 SET STEP ON @@ -12222,7 +12480,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base lcLastIncompletePropName = laItems(I) LOOP ENDIF - + * Skip ZOrderSet property if configured to IF toFoxBin2Prg.l_RemoveZOrderSetFromProps AND ATC( '.ZOrderSet.', '.' + lcLastIncompletePropName + LEFT( laItems(I), lnPosEQ - 2 ) + '.' ) > 0 THEN lcLastIncompletePropName = '' @@ -13534,10 +13792,16 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base TRY LOCAL lcExpanded - lcExpanded = IIF( '.' $ JUSTFNAME(tcOutputFile), 'X1', 'X0' ) + lcExpanded = IIF( '.' $ JUSTSTEM(tcOutputFile), 'X1', 'X0' ) *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) IF toFoxBin2Prg.addProcessedFile( tcOutputFile, 'O', 'P1', 'E0', 'S1', lcExpanded ) THEN + + DO CASE + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_O1' + ERROR 'OutputFile Error Simulation' + ENDCASE + toFoxBin2Prg.updateProcessedFile() ENDIF @@ -13841,7 +14105,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg .write_CLASS_PROPERTIES( @loRegClass, @laPropsAndValues, @laPropsAndComments, @laProtected ; , @lnPropsAndValues_Count, @lnPropsAndComments_Count, @lnProtected_Count, @lcCodigo, @toFoxBin2Prg ) - ASORT(laObjs, 3, -1, 0, 0) && Orden Alfabético (del SCAN original) + ASORT(laObjs, 3, -1, 0, 0) && Orden Alfabético de objetos (del SCAN original) lnStep = lnStep + 1 .updateProgressbar( 'Processing Class ' + lcObjName + ' > Writing Obtects with Properties...', lnStep, lnClassTotal*lnStepCount, 1 ) @@ -13914,6 +14178,20 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg lcExternalHeader = lcExternalHeader + CR_LF ENDIF + DO CASE + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I1' + ERROR 'InputFile Error Simulation' + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I0' + .writeErrorLog( '*** SIMULATED ERROR' ) + ENDCASE + + IF .l_Error + .writeLog( '*** ERRORS found - Generation Cancelled' ) + EXIT + ENDIF + + toFoxBin2Prg.updateProcessedFile() + *-- Genero el VC2 lnStep = lnStep + 1 @@ -14260,6 +14538,20 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg lcExternalHeader = lcExternalHeader + CR_LF ENDIF + DO CASE + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I1' + ERROR 'InputFile Error Simulation' + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I0' + .writeErrorLog( '*** SIMULATED ERROR' ) + ENDCASE + + IF .l_Error + .writeLog( '*** ERRORS found - Generation Cancelled' ) + EXIT + ENDIF + + toFoxBin2Prg.updateProcessedFile() + *-- Genero el SC2 lnStep = lnStep + 1 @@ -14627,6 +14919,20 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg ENDIF + DO CASE + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I1' + ERROR 'InputFile Error Simulation' + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I0' + .writeErrorLog( '*** SIMULATED ERROR' ) + ENDCASE + + IF .l_Error + .writeLog( '*** ERRORS found - Generation Cancelled' ) + EXIT + ENDIF + + toFoxBin2Prg.updateProcessedFile() + *-- Genero el PJ2 .updateProgressbar( 'Writing ' + toFoxBin2Prg.c_PJ2 + '...', 2, 2, 1 ) @@ -15006,9 +15312,24 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg RETURN ENDTEXT + DO CASE + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I1' + ERROR 'InputFile Error Simulation' + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I0' + .writeErrorLog( '*** SIMULATED ERROR' ) + ENDCASE + + IF .l_Error + .writeLog( '*** ERRORS found - Generation Cancelled' ) + EXIT + ENDIF + ENDWITH && THIS ENDIF + toFoxBin2Prg.updateProcessedFile() + + *-- Genero el PJ2 THIS.updateProgressbar( 'Writing ' + toFoxBin2Prg.c_PJ2 + '...', 2, 2, 1 ) @@ -15198,6 +15519,21 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg ENDSCAN ENDIF + DO CASE + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I1' + ERROR 'InputFile Error Simulation' + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I0' + .writeErrorLog( '*** SIMULATED ERROR' ) + ENDCASE + + IF .l_Error + .writeLog( '*** ERRORS found - Generation Cancelled' ) + EXIT + ENDIF + + toFoxBin2Prg.updateProcessedFile() + + *-- Genero el FR2 .updateProgressbar( 'Writing ' + toFoxBin2Prg.c_FR2 + '...', 2, 2, 1 ) @@ -15314,6 +15650,20 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, .c_InputFile, lc_FileTypeDesc, @toFoxBin2Prg ) FCLOSE( toFoxBin2Prg.n_FileHandle ) + DO CASE + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I1' + ERROR 'InputFile Error Simulation' + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I0' + .writeErrorLog( '*** SIMULATED ERROR' ) + ENDCASE + + IF .l_Error + .writeLog( '*** ERRORS found - Generation Cancelled' ) + EXIT + ENDIF + + toFoxBin2Prg.updateProcessedFile() + *-- Genero el DB2, renombrando el TMP .updateProgressbar( 'Writing ' + toFoxBin2Prg.c_DB2 + '...', 3, 3, 1 ) @@ -15337,6 +15687,20 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg ELSE C_FB2PRG_CODE = C_FB2PRG_CODE + loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, .c_InputFile, lc_FileTypeDesc, @toFoxBin2Prg ) + DO CASE + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I1' + ERROR 'InputFile Error Simulation' + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I0' + .writeErrorLog( '*** SIMULATED ERROR' ) + ENDCASE + + IF .l_Error + .writeLog( '*** ERRORS found - Generation Cancelled' ) + EXIT + ENDIF + + toFoxBin2Prg.updateProcessedFile() + *-- Genero el DB2 .updateProgressbar( 'Writing ' + toFoxBin2Prg.c_DB2 + '...', 3, 3, 1 ) @@ -15526,6 +15890,21 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg lnClassCount = _TALLY ENDIF + DO CASE + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I1' + ERROR 'InputFile Error Simulation' + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I0' + .writeErrorLog( '*** SIMULATED ERROR' ) + ENDCASE + + IF .l_Error + .writeLog( '*** ERRORS found - Generation Cancelled' ) + EXIT + ENDIF + + toFoxBin2Prg.updateProcessedFile() + + *-- Genero el DC2 lcOutputFile = .c_OutputFile @@ -15635,6 +16014,20 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg C_FB2PRG_CODE = C_FB2PRG_CODE + toMenu.toText() ENDIF + DO CASE + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I1' + ERROR 'InputFile Error Simulation' + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I0' + .writeErrorLog( '*** SIMULATED ERROR' ) + ENDCASE + + IF .l_Error + .writeLog( '*** ERRORS found - Generation Cancelled' ) + EXIT + ENDIF + + toFoxBin2Prg.updateProcessedFile() + *-- Genero el MN2 IF toFoxBin2Prg.l_ProcessFiles THEN @@ -25339,7 +25732,7 @@ DEFINE CLASS CL_LANG AS Custom C_FILENAME_LOC = "" C_FOXBIN2PRG_ERROR_CAPTION_LOC = "" C_FOXBIN2PRG_SYNTAX_INFO_LOC = "" - C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC = "" + C_FOXBIN2PRG_SYNTAX_INFO_EXAMPLE_LOC = "" C_FOXBIN2PRG_JUST_VFP_9_LOC = "" C_FOXBIN2PRG_WARN_CAPTION_LOC = "" C_GENERATED_FILE_SIZE_LOC = "" @@ -25451,7 +25844,7 @@ DEFINE CLASS CL_LANG AS Custom .C_FILENAME_LOC = "Fichier" .C_FOXBIN2PRG_ERROR_CAPTION_LOC = "ERREUR" .C_FOXBIN2PRG_SYNTAX_INFO_LOC = "SYNTAX INFO" - .C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC = "FOXBIN2PRG.EXE [cType [cTextName [cGenText [cDontShowErrors [cDebug [cDontShowProgress [cOriginalFileName [cRecompile [cNoTimestamps [cCFG_File] ] ] ] ] ] ] ] ] ]" + CR_LF + CR_LF ; + .C_FOXBIN2PRG_SYNTAX_INFO_EXAMPLE_LOC = "FOXBIN2PRG.EXE [cType [cTextName [cGenText [cDontShowErrors [cDebug [cDontShowProgress [cOriginalFileName [cRecompile [cNoTimestamps [cCFG_File] ] ] ] ] ] ] ] ] ]" + CR_LF + CR_LF ; + "cFileSpec.Ext: Full name (fullpath) of the file to convert or directory name to process" + CR_LF ; + "- If 'BIN2PRG' is specified, the directory specified in tcType is processed for generating TX2" + CR_LF ; + "- If 'PRG2BIN' is specified, the directory specified in tcType is processed for regenerating BIN" + CR_LF ; @@ -25557,7 +25950,7 @@ DEFINE CLASS CL_LANG AS Custom .C_FILENAME_LOC = "Archivo" .C_FOXBIN2PRG_ERROR_CAPTION_LOC = "ERROR" .C_FOXBIN2PRG_SYNTAX_INFO_LOC = "INFORMACIÓN DE SINTAXIS" - .C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC = "FOXBIN2PRG.EXE [cType [cTextName [cGenText [cDontShowErrors [cDebug [cDontShowProgress [cOriginalFileName [cRecompile [cNoTimestamps [cCFG_File] ] ] ] ] ] ] ] ] ]" + CR_LF + CR_LF ; + .C_FOXBIN2PRG_SYNTAX_INFO_EXAMPLE_LOC = "FOXBIN2PRG.EXE [cType [cTextName [cGenText [cDontShowErrors [cDebug [cDontShowProgress [cOriginalFileName [cRecompile [cNoTimestamps [cCFG_File] ] ] ] ] ] ] ] ] ]" + CR_LF + CR_LF ; + "cFileSpec.Ext: Nombre completo (fullpath) del archivo a convertir o del directorio a procesar" + CR_LF ; + "- Si indica 'BIN2PRG', se procesa el directorio indicado en tcType para generar los TX2" + CR_LF ; + "- Si indica 'PRG2BIN', se procesa el directorio indicado en tcType para generar los BIN" + CR_LF ; @@ -25663,7 +26056,7 @@ DEFINE CLASS CL_LANG AS Custom .C_FILENAME_LOC = "Datei" .C_FOXBIN2PRG_ERROR_CAPTION_LOC = "FEHLER" .C_FOXBIN2PRG_SYNTAX_INFO_LOC = "SYNTAX INFO" - .C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC = "FOXBIN2PRG.EXE [cType [cTextName [cGenText [cDontShowErrors [cDebug [cDontShowProgress [cOriginalFileName [cRecompile [cNoTimestamps [cCFG_File] ] ] ] ] ] ] ] ] ]" + CR_LF + CR_LF ; + .C_FOXBIN2PRG_SYNTAX_INFO_EXAMPLE_LOC = "FOXBIN2PRG.EXE [cType [cTextName [cGenText [cDontShowErrors [cDebug [cDontShowProgress [cOriginalFileName [cRecompile [cNoTimestamps [cCFG_File] ] ] ] ] ] ] ] ] ]" + CR_LF + CR_LF ; + "cFileSpec.Ext: Full name (fullpath) of the file to convert or directory name to process" + CR_LF ; + "- If 'BIN2PRG' is specified, the directory specified in tcType is processed for generating TX2" + CR_LF ; + "- If 'PRG2BIN' is specified, the directory specified in tcType is processed for regenerating BIN" + CR_LF ; @@ -25769,7 +26162,7 @@ DEFINE CLASS CL_LANG AS Custom .C_FILENAME_LOC = "File" .C_FOXBIN2PRG_ERROR_CAPTION_LOC = "ERROR" .C_FOXBIN2PRG_SYNTAX_INFO_LOC = "SYNTAX INFO" - .C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC = "FOXBIN2PRG.EXE [cType [cTextName [cGenText [cDontShowErrors [cDebug [cDontShowProgress [cOriginalFileName [cRecompile [cNoTimestamps [cCFG_File] ] ] ] ] ] ] ] ] ]" + CR_LF + CR_LF ; + .C_FOXBIN2PRG_SYNTAX_INFO_EXAMPLE_LOC = "FOXBIN2PRG.EXE [cType [cTextName [cGenText [cDontShowErrors [cDebug [cDontShowProgress [cOriginalFileName [cRecompile [cNoTimestamps [cCFG_File] ] ] ] ] ] ] ] ] ]" + CR_LF + CR_LF ; + "cFileSpec.Ext: Full name (fullpath) of the file to convert or directory name to process" + CR_LF ; + "- If 'BIN2PRG' is specified, the directory specified in tcType is processed for generating TX2" + CR_LF ; + "- If 'PRG2BIN' is specified, the directory specified in tcType is processed for regenerating BIN" + CR_LF ; From 9b8aaed74ea0b35aa1b5f16d72aa1413ab647b1b Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Wed, 29 Apr 2015 23:24:03 +0200 Subject: [PATCH 08/14] =?UTF-8?q?-=20Centralizada=20la=20declaraci=C3=B3n?= =?UTF-8?q?=20de=20DLLs=20para=20poder=20inicializarlas=20en=20el=20Init()?= =?UTF-8?q?=20y=20en=20el=20execute()=20-=20Mejorado=20el=20OnEscape=20par?= =?UTF-8?q?a=20minimizar=20posibilidad=20de=20errores=20no=20controlados?= =?UTF-8?q?=20y=20restaurar=20seteo=20previo=20a=20FoxBin=20-=20Clase=20in?= =?UTF-8?q?terna=20c=5Fconversor=5Fbase=20cambiada=20de=20session=20a=20cu?= =?UTF-8?q?stom,=20ya=20que=20la=20principal=20(c=5Ffoxbin2prg)=20es=20ses?= =?UTF-8?q?sion,=20as=C3=AD=20se=20evitan=20funcionamientos=20raros?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 81 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 59 insertions(+), 22 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 2d51065..cfa3ac4 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -772,26 +772,7 @@ DEFINE CLASS c_foxbin2prg AS Session THIS.l_CancelWithEscKey = ( tcCancelWithEscKey == '1' ) ENDIF - IF THIS.l_CancelWithEscKey THEN - ON ESCAPE ERROR 1799 - SET ESCAPE ON - ENDIF - - *-- Funciones para escribir en StdOut - DECLARE INTEGER 'GetStdHandle' IN WIN32API AS fb2p_GetStdHandle INTEGER nHandleType - DECLARE INTEGER 'WriteFile' IN WIN32API AS fb2p_WriteFile INTEGER hFile, STRING @ cBuffer, INTEGER nBytes, INTEGER @ nBytes2, INTEGER @ nBytes3 - *-- Funciones para changeFileTime - DECLARE INTEGER 'SetFileTime' IN WIN32API AS fb2p_SetFileTime INTEGER hFile, STRING lpCreationTime, STRING lpLastAccessTime, STRING lpLastWriteTime - DECLARE INTEGER 'GetFileAttributesEx' IN Win32API AS fb2p_GetFileAttributesEx STRING lpFileName, INTEGER fInfoLevelId, STRING @ lpFileInformation - DECLARE INTEGER 'LocalFileTimeToFileTime' IN Win32API AS fb2p_LocalFileTimeToFileTime STRING LOCALFILETIME, STRING @ FILETIME - DECLARE INTEGER 'FileTimeToSystemTime' IN Win32API AS fb2p_FileTimeToSystemTime STRING FILETIME, STRING @ SYSTEMTIME - DECLARE INTEGER 'SystemTimeToFileTime' IN Win32API AS fb2p_SystemTimeToFileTime STRING lpSYSTEMTIME, STRING @ FILETIME - DECLARE INTEGER '_lopen' IN Win32API AS fb2p_lopen STRING lpFileName, INTEGER iReadWrite - DECLARE INTEGER '_lclose' IN Win32API AS fb2p_lclose INTEGER hFile - *-- Funciones para changeFileAttributes - DECLARE SHORT 'SetFileAttributes' IN Win32API AS fb2p_SetFileAttributes STRING tcFileName, INTEGER dwFileAttributes - DECLARE INTEGER 'GetFileAttributes' IN Win32API AS fb2p_GetFileAttributes STRING tcFileName - *-- + THIS.declareDLL() IF FILE(THIS.c_ErrorLogFile) THEN ERASE (THIS.c_ErrorLogFile + '.BAK') @@ -849,7 +830,6 @@ DEFINE CLASS c_foxbin2prg AS Session CATCH FINALLY - ON ESCAPE THIS.o_FSO = NULL THIS.o_WSH = NULL THIS.o_FNC = NULL @@ -964,6 +944,25 @@ DEFINE CLASS c_foxbin2prg AS Session ENDPROC + PROCEDURE declareDLL + *-- Funciones para escribir en StdOut + DECLARE INTEGER 'GetStdHandle' IN WIN32API AS fb2p_GetStdHandle INTEGER nHandleType + DECLARE INTEGER 'WriteFile' IN WIN32API AS fb2p_WriteFile INTEGER hFile, STRING @ cBuffer, INTEGER nBytes, INTEGER @ nBytes2, INTEGER @ nBytes3 + *-- Funciones para changeFileTime + DECLARE INTEGER 'SetFileTime' IN WIN32API AS fb2p_SetFileTime INTEGER hFile, STRING lpCreationTime, STRING lpLastAccessTime, STRING lpLastWriteTime + DECLARE INTEGER 'GetFileAttributesEx' IN Win32API AS fb2p_GetFileAttributesEx STRING lpFileName, INTEGER fInfoLevelId, STRING @ lpFileInformation + DECLARE INTEGER 'LocalFileTimeToFileTime' IN Win32API AS fb2p_LocalFileTimeToFileTime STRING LOCALFILETIME, STRING @ FILETIME + DECLARE INTEGER 'FileTimeToSystemTime' IN Win32API AS fb2p_FileTimeToSystemTime STRING FILETIME, STRING @ SYSTEMTIME + DECLARE INTEGER 'SystemTimeToFileTime' IN Win32API AS fb2p_SystemTimeToFileTime STRING lpSYSTEMTIME, STRING @ FILETIME + DECLARE INTEGER '_lopen' IN Win32API AS fb2p_lopen STRING lpFileName, INTEGER iReadWrite + DECLARE INTEGER '_lclose' IN Win32API AS fb2p_lclose INTEGER hFile + *-- Funciones para changeFileAttributes + DECLARE SHORT 'SetFileAttributes' IN Win32API AS fb2p_SetFileAttributes STRING tcFileName, INTEGER dwFileAttributes + DECLARE INTEGER 'GetFileAttributes' IN Win32API AS fb2p_GetFileAttributes STRING tcFileName + *-- + ENDPROC + + PROCEDURE get_AbsolutePath LPARAMETERS tc_InputFile, tc_FullPath @@ -2347,6 +2346,7 @@ DEFINE CLASS c_foxbin2prg AS Session TRY LOCAL I, lcPath, lnCodError, lcFileSpec, lcFile, laFiles(1,5), laDirInfo(1,5), lcInputFile_Type, lc_OldSetNotify ; , lnFileCount, lcErrorInfo, lcErrorFile, lnPCount, laParams(1), lnConversionOption, lnErrorIcon, llError ; + , lcOldSetEscape, lcOldOnEscape, llEscKeyRestored ; , loEx AS EXCEPTION ; , loFSO AS Scripting.FileSystemObject ; , loLang AS CL_LANG OF 'FOXBIN2PRG.PRG' ; @@ -2365,7 +2365,14 @@ DEFINE CLASS c_foxbin2prg AS Session lcInputFile_Type = '' .l_Error = .F. tcType = UPPER( EVL(tcType,'') ) + .declareDLL() + IF THIS.l_CancelWithEscKey THEN + lcOldSetEscape = SET("Escape") + lcOldOnEscape = ON("Escape") + ON ESCAPE ERROR 1799 + SET ESCAPE ON + ENDIF DO CASE CASE VERSION(5) < 900 OR INT( VAL( SUBSTR( VERSION(4), RAT('.', VERSION(4)) + 1 ) ) ) < 3504 @@ -2526,6 +2533,7 @@ DEFINE CLASS c_foxbin2prg AS Session CASE ATC('-BIN2PRG', ('-' + tcType)) = 0 AND ATC('-PRG2BIN', ('-' + tcType)) = 0 ; AND lcInputFile_Type == C_FILETYPE_FILE ; AND ( '*' $ JUSTEXT( tc_InputFile ) OR '?' $ JUSTEXT( tc_InputFile ) ) + IF .l_ShowErrors *MESSAGEBOX( 'No se admiten extensiones * o ? porque es peligroso (se pueden pisar binarios con archivo xx2 vacíos).', 0+48+4096, 'FOXBIN2PRG: ERROR!!', 60000 ) MESSAGEBOX( loLang.C_ASTERISK_EXT_NOT_ALLOWED_LOC, 0+48+4096, 'FoxBin2Prg ' + THIS.c_FB2PRG_EXE_Version + ': ' + loLang.C_FOXBIN2PRG_ERROR_CAPTION_LOC, 60000 ) @@ -2852,6 +2860,21 @@ DEFINE CLASS c_foxbin2prg AS Session ENDWITH && THIS CATCH TO toEx + IF THIS.l_CancelWithEscKey THEN + IF EMPTY(lcOldOnEscape) + ON ESCAPE + ELSE + ON ESCAPE &lcOldOnEscape. + ENDIF + + IF EMPTY(lcOldSetEscape) + SET ESCAPE OFF + ELSE + SET ESCAPE &lcOldSetEscape. + ENDIF + llEscKeyRestored = .T. + ENDIF + lnCodError = toEx.ERRORNO lnErrorIcon = 64 @@ -2888,6 +2911,20 @@ DEFINE CLASS c_foxbin2prg AS Session ENDIF FINALLY + IF NOT llEscKeyRestored AND THIS.l_CancelWithEscKey THEN + IF EMPTY(lcOldOnEscape) + ON ESCAPE + ELSE + ON ESCAPE &lcOldOnEscape. + ENDIF + + IF EMPTY(lcOldSetEscape) + SET ESCAPE OFF + ELSE + SET ESCAPE &lcOldSetEscape. + ENDIF + ENDIF + IF VARTYPE(loLang) <> 'O' THEN loLang = CREATEOBJECT("CL_LANG","EN") ENDIF @@ -4824,7 +4861,7 @@ ENDDEFINE -DEFINE CLASS c_conversor_base AS Session +DEFINE CLASS c_conversor_base AS Custom #IF .F. LOCAL THIS AS c_conversor_base OF 'FOXBIN2PRG.PRG' #ENDIF From d84df53c9292e53ae2ebbb9a6538c7e471c5b02b Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Wed, 29 Apr 2015 23:34:47 +0200 Subject: [PATCH 09/14] - Ajustes en log de cambios --- FoxBin2PRGVersionFile.txt | 4 ++-- foxbin2prg.prg | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 4fb80a6..eb12441 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -21,8 +21,8 @@ Change History ------------------------------------------------------------- - Feature: Added new CFG setting "RemoveZOrderSetFromProps" for removing ZOrderSet property when you want to maintain the original class ZOrder always, avoid unnecesary differences and fix some visual on top/on bottom control problems (Ryan Harris) - Feature: Do not allow progressbar window become the default output window of ? command (Lutz Scheffler) - Bug Fix: Fixed VFP9 SP1 validation message -- Bug Fix: FoxBin2Prg PRG2BIN does not return error codes (Ralf Wagner) -- Bug Fix: FoxBin2Prg sometimes generates an OLE error when executed for second time on a file with problems (Fidel Charny) +- Bug Fix: FoxBin2Prg does not return error codes when called from an external program (Ralf Wagner) +- Bug Fix: FoxBin2Prg sometimes generates an OLE error when executed as object more than once on a file with problems (Fidel Charny) 2015/04/16 v1.19.42 diff --git a/foxbin2prg.prg b/foxbin2prg.prg index cfa3ac4..83a4355 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -161,8 +161,8 @@ * 16/04/2015 FDBOZZO v1.19.42 Mejora API: Renombrados los nombres de los métodos al Inglés para facilitar su entendimiento internacional (Mike Potjer) * 23/04/2015 FDBOZZO v1.19.43 Mejora: Nueva configuración "RemoveZOrderSetFromProps" para quitar la propiedad ZOrderSet de los objetos que cambian constantemente, provocan diferencias y a veces dan problemas de objeto encima/debajo (Ryan Harris) * 23/04/2015 FDBOZZO v1.19.43 Mejora: Hacer que la progressbar no se convierta en la ventana de salida por defecto de los ? (Lutz Scheffler) -* 28/04/2015 FDBOZZO v1.19.43 Bug Fix: FoxBin2Prg PRG2BIN does not return error codes (Ralf Wagner) -* 29/04/2015 FDBOZZO v1.19.42 Bug Fix: FoxBin2Prg a veces genera un error OLE cuando se ejecuta por segunda vez sobre un archivo con problemas (Fidel Charny) +* 28/04/2015 FDBOZZO v1.19.43 Bug Fix: FoxBin2Prg no retorna códigos de error cuando se llama como programa externo (Ralf Wagner) +* 29/04/2015 FDBOZZO v1.19.42 Bug Fix: FoxBin2Prg a veces genera errores OLE cuando se ejecuta más de una vez en modo objeto sobre un archivo con errores (Fidel Charny) * * *--------------------------------------------------------------------------------------------------- @@ -245,8 +245,8 @@ * 15/04/2015 Mike Potjer Sugerencia v1.19.41: Los nombres de los métodos en Inglés facilitarían su entendimiento a más personas (Agregado en v1.19.42) * 22/04/2015 Ryan Harris Mejora v1.19.42: Permitir que FoxBin quite los ZOrderProps de los objetos que cambian constantemente, provocan diferencias y a veces dan problemas de objeto encima/debajo (Agregado en v1.19.43) * 23/04/2015 Lutz Scheffler Mejora v1.19.42: Hacer que la progressbar no se convierta en la ventana de salida por defecto de los ? (Agregado en v1.19.43) -* 28/04/2015 Ralf Wagner Reporte Bug v1.19.42: FoxBin2Prg no retorna los códigos de error (Arreglado en v1.19.43) -* 29/04/2015 Fidel Charny Reporte Bug v1.19.42: FoxBin2Prg a veces genera un error OLE cuando se ejecuta por segunda vez sobre un archivo con problemas (Arreglado en v1.19.43) +* 28/04/2015 Ralf Wagner Reporte Bug v1.19.42: FoxBin2Prg no retorna códigos de error cuando se llama como programa externo (Arreglado en v1.19.43) +* 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) * * *--------------------------------------------------------------------------------------------------- From 59aa7b7e10696bfaad58dca8a1abae76aaae1dbd Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Wed, 29 Apr 2015 23:36:06 +0200 Subject: [PATCH 10/14] EXE --- foxbin2prg.exe | Bin 573254 -> 591618 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 312775d5d1c08d6646f006b4f9126c2d9df773af..6a0d0b3b468eb4d026e1083f37de9f8eb1e62ef4 100644 GIT binary patch delta 66003 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 delta 53162 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 B2zLMg From 52d1b1944093526d5a65b34c11f233b48d7fdf01 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 30 Apr 2015 22:59:29 +0200 Subject: [PATCH 11/14] =?UTF-8?q?-=20Arreglo=20del=20DataSessionID=20que?= =?UTF-8?q?=20se=20perdi=C3=B3=20al=20cambiar=20la=20clase=20de=20base=20d?= =?UTF-8?q?e=20Session=20a=20Custom=20porque=20la=20principal=20ya=20hab?= =?UTF-8?q?=C3=ADa=20cambiado=20a=20Session=20-=20Cambio=20de=20todos=20lo?= =?UTF-8?q?s=20FILE()=20por=20ADIR()=20>=200?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 72 +++++++++++++++++++++++++------------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 83a4355..2d0cb57 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -756,7 +756,7 @@ DEFINE CLASS c_foxbin2prg AS Session LOCAL THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF - LOCAL lcSys16, lnPosProg, lc_Foxbin2prg_EXE, laValues(1,5), lcPicturePath + LOCAL lcSys16, lnPosProg, lc_Foxbin2prg_EXE, laValues(1,5), lcPicturePath, laDir(1,5) SET DELETED ON SET DATE YMD SET HOURS TO 24 @@ -774,12 +774,12 @@ DEFINE CLASS c_foxbin2prg AS Session THIS.declareDLL() - IF FILE(THIS.c_ErrorLogFile) THEN + IF ADIR(laDir, THIS.c_ErrorLogFile) > 0 THEN ERASE (THIS.c_ErrorLogFile + '.BAK') RENAME (THIS.c_ErrorLogFile) TO (THIS.c_ErrorLogFile + '.BAK') ENDIF - IF FILE(THIS.c_LogFile) THEN + IF ADIR(laDir, THIS.c_LogFile) > 0 THEN ERASE (THIS.c_LogFile + '.BAK') RENAME (THIS.c_LogFile) TO (THIS.c_LogFile + '.BAK') ENDIF @@ -1559,7 +1559,7 @@ DEFINE CLASS c_foxbin2prg AS Session #ENDIF TRY - LOCAL lcNext_Bak, lcExt_1, lcExt_2, lcExt_3, tcOutputFile_Ext1, tcOutputFile_Ext2, tcOutputFile_Ext3 ; + LOCAL lcNext_Bak, lcExt_1, lcExt_2, lcExt_3, tcOutputFile_Ext1, tcOutputFile_Ext2, tcOutputFile_Ext3, laDir(1,5) ; , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' STORE '' TO tcBakFile_1, tcBakFile_2, tcBakFile_3, lcExt_1, lcExt_2, lcExt_3 ; , tcOutputFile_Ext1, tcOutputFile_Ext2, tcOutputFile_Ext3 @@ -1600,7 +1600,7 @@ DEFINE CLASS c_foxbin2prg AS Session IF NOT EMPTY(lcExt_1) tcOutputFile_Ext1 = FORCEEXT(tcOutputFile, lcExt_1) - IF FILE( tcOutputFile_Ext1 ) + IF ADIR( laDir, tcOutputFile_Ext1 ) > 0 THEN *-- LOG DO CASE CASE EMPTY(lcExt_2) @@ -1617,7 +1617,7 @@ DEFINE CLASS c_foxbin2prg AS Session IF NOT EMPTY(lcExt_2) tcOutputFile_Ext2 = FORCEEXT(tcOutputFile, lcExt_2) - IF FILE( tcOutputFile_Ext2 ) + IF ADIR( laDir, tcOutputFile_Ext2 ) > 0 THEN COPY FILE ( tcOutputFile_Ext2 ) TO ( tcBakFile_2 ) ENDIF ENDIF @@ -1625,7 +1625,7 @@ DEFINE CLASS c_foxbin2prg AS Session IF NOT EMPTY(lcExt_3) tcOutputFile_Ext3 = FORCEEXT(tcOutputFile, lcExt_3) - IF FILE( tcOutputFile_Ext3 ) + IF ADIR( laDir, tcOutputFile_Ext3 ) > 0 THEN COPY FILE ( tcOutputFile_Ext3 ) TO ( tcBakFile_3 ) ENDIF ENDIF @@ -2042,7 +2042,7 @@ DEFINE CLASS c_foxbin2prg AS Session CASE LEFT( laConfig(I), 16 ) == LOWER('BackgroundImage:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 17 ) ) - IF EMPTY(lcValue) OR FILE( lcValue ) THEN + IF EMPTY(lcValue) OR ADIR( laDirInfo, lcValue ) > 0 THEN lo_CFG.c_BackgroundImage = lcValue .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > BackgroundImage: ' + TRANSFORM(lo_CFG.c_BackgroundImage) ) ENDIF @@ -2675,7 +2675,7 @@ DEFINE CLASS c_foxbin2prg AS Session FOR I = 1 TO lnFileCount lcFile = laFiles(I) - IF NOT .hasSupport_Bin2Prg( JUSTEXT(lcFile) ) OR NOT FILE(lcFile) THEN + IF NOT .hasSupport_Bin2Prg( JUSTEXT(lcFile) ) OR NOT ADIR(laDirInfo, lcFile) > 0 THEN LOOP ENDIF @@ -2695,7 +2695,7 @@ DEFINE CLASS c_foxbin2prg AS Session .updateProgressbar( loLang.C_END_OF_PROCESS_LOC, lnFileCount, lnFileCount, 0 ) EXIT - CASE NOT .hasSupport_Bin2Prg( JUSTEXT(tc_InputFile) ) OR NOT FILE(tc_InputFile) + CASE NOT .hasSupport_Bin2Prg( JUSTEXT(tc_InputFile) ) OR NOT ADIR(laDirInfo, tc_InputFile) > 0 .writeLog( '> InputFile ' + loLang.C_IS_UNSUPPORTED_LOC ) .writeLog() EXIT @@ -2735,7 +2735,7 @@ DEFINE CLASS c_foxbin2prg AS Session FOR I = 1 TO lnFileCount lcFile = laFiles(I) - IF NOT .hasSupport_Prg2Bin( JUSTEXT(lcFile) ) OR NOT FILE(lcFile) THEN + IF NOT .hasSupport_Prg2Bin( JUSTEXT(lcFile) ) OR NOT ADIR(laDirInfo, lcFile) > 0 THEN LOOP ENDIF @@ -2755,7 +2755,7 @@ DEFINE CLASS c_foxbin2prg AS Session .updateProgressbar( loLang.C_END_OF_PROCESS_LOC, lnFileCount, lnFileCount, 0 ) EXIT - CASE NOT .hasSupport_Prg2Bin( JUSTEXT(tc_InputFile) ) OR NOT FILE(tc_InputFile) + CASE NOT .hasSupport_Prg2Bin( JUSTEXT(tc_InputFile) ) OR NOT ADIR(laDirInfo, tc_InputFile) > 0 .writeLog( '> InputFile ' + loLang.C_IS_UNSUPPORTED_LOC ) .writeLog() EXIT @@ -2829,7 +2829,7 @@ DEFINE CLASS c_foxbin2prg AS Session ENDIF ENDCASE - IF FILE(tc_InputFile) + IF ADIR(laDirInfo, tc_InputFile) > 0 IF .n_ShowProgressbar <> 0 AND .l_ProcessFiles THEN .loadProgressbarForm() ENDIF @@ -3001,7 +3001,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, llError ; + LOCAL lcFileSpec, lnFileCount, laFiles(1,1), lcFile, lnCodError, I, lnFileCount, llError, laDirInfo(1,5) ; , loLang AS CL_LANG OF 'FOXBIN2PRG.PRG' TRY @@ -3055,7 +3055,7 @@ DEFINE CLASS c_foxbin2prg AS Session lcFile = laFiles(I,1) .updateProgressbar( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) - IF .hasSupport_Bin2Prg( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) + IF .hasSupport_Bin2Prg( UPPER(JUSTEXT(lcFile)) ) AND ADIR( laDirInfo, lcFile ) > 0 THEN lnCodError = .convert( lcFile, toModulo, @toEx, .F., tcOriginalFileName ) .writeLog_Flush() @@ -3108,7 +3108,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 ; + LOCAL lcFileSpec, lnFileCount, laFiles(1,1), lcFile, lnCodError, I, lnFileCount, laDirInfo(1,5) ; , loLang AS CL_LANG OF 'FOXBIN2PRG.PRG' TRY @@ -3163,7 +3163,7 @@ DEFINE CLASS c_foxbin2prg AS Session lcFile = laFiles(I) .updateProgressbar( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) - IF .hasSupport_Prg2Bin( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) + IF .hasSupport_Prg2Bin( UPPER(JUSTEXT(lcFile)) ) AND ADIR( laDirInfo, lcFile ) > 0 THEN lnCodError = .convert( lcFile, toModulo, @toEx, .F., tcOriginalFileName ) .writeLog_Flush() @@ -3328,7 +3328,7 @@ DEFINE CLASS c_foxbin2prg AS Session .writeLog( C_TAB + 'c_OriginalFileName: ' + .c_OriginalFileName ) .writeLog( ) - IF NOT FILE(.c_InputFile) + IF NOT ADIR(laDirFile, .c_InputFile) > 0 THEN ERROR loLang.C_FILE_DOESNT_EXIST_LOC + ' [' + .c_InputFile + ']' ENDIF @@ -3500,7 +3500,7 @@ DEFINE CLASS c_foxbin2prg AS Session , VAL(LEFT(laFiles(I,4),2)), VAL(SUBSTR(laFiles(I,4),4,2)), VAL(RIGHT(laFiles(I,4),2)) ) ENDIF - IF FILE( .c_OutputFile ) + IF ADIR( laDirFile, .c_OutputFile ) > 0 THEN I = ASCAN( laFiles, JUSTFNAME(.c_OutputFile), 1, 0, 1, 1+2+4+8 ) IF I > 0 THEN .t_OutputFile_TimeStamp = DATETIME( YEAR(laFiles(I,3)), MONTH(laFiles(I,3)), DAY(laFiles(I,3)) ; @@ -3672,17 +3672,17 @@ DEFINE CLASS c_foxbin2prg AS Session * tc_OutputFilename (v! IN ) Nombre del archivo de salida a crear el backup *-------------------------------------------------------------------------------------------------------------- LPARAMETERS tcOutputFileName - LOCAL lcNext_Bak, I + LOCAL lcNext_Bak, I, laDirInfo(1,5) lcNext_Bak = '.BAK' FOR I = 1 TO THIS.n_ExtraBackupLevels IF I = 1 - IF NOT FILE( tcOutputFileName + '.BAK' ) + IF NOT ADIR( laDirInfo, tcOutputFileName + '.BAK' ) > 0 THEN lcNext_Bak = '.BAK' EXIT ENDIF ELSE - IF NOT FILE( tcOutputFileName + '.' + PADL(I-1,1,'0') + '.BAK' ) + IF NOT ADIR( laDirInfo, tcOutputFileName + '.' + PADL(I-1,1,'0') + '.BAK' ) > 0 THEN lcNext_Bak = '.' + PADL(I-1,1,'0') + '.BAK' EXIT ENDIF @@ -3718,7 +3718,7 @@ DEFINE CLASS c_foxbin2prg AS Session LPARAMETERS tl_NormalizeInputFile, tcFileName TRY - LOCAL lcPath, lcEXE_CAPS, lcOutputFile, llRelanzarError, lcType ; + LOCAL lcPath, lcEXE_CAPS, lcOutputFile, llRelanzarError, lcType, laDirInfo(1,5) ; , loEx AS EXCEPTION ; , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' ; , loFSO AS Scripting.FileSystemObject @@ -3786,10 +3786,10 @@ DEFINE CLASS c_foxbin2prg AS Session .renameFile( FORCEEXT(tcFileName,'LBT'), lcEXE_CAPS, loFSO, llRelanzarError ) CASE lcType = 'DBF' - IF FILE( FORCEEXT(tcFileName,'FPT') ) + IF ADIR( laDirInfo, FORCEEXT(tcFileName,'FPT') ) > 0 THEN .renameFile( FORCEEXT(tcFileName,'FPT'), lcEXE_CAPS, loFSO, llRelanzarError ) ENDIF - IF FILE( FORCEEXT(tcFileName,'CDX') ) + IF ADIR( laDirInfo, FORCEEXT(tcFileName,'CDX') ) > 0 THEN .renameFile( FORCEEXT(tcFileName,'CDX'), lcEXE_CAPS, loFSO, llRelanzarError ) ENDIF @@ -4582,7 +4582,7 @@ DEFINE CLASS frm_avance AS Form LOCAL THISFORM AS frm_avance OF foxbin2prg.prg #ENDIF - LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' + LOCAL laDirInfo(1,5), loLang as CL_LANG OF 'FOXBIN2PRG.PRG' IF VARTYPE(toFoxBin2Prg) = "O" THEN IF TYPE("_SCREEN.o_FoxBin2Prg_Lang") = "O" THEN @@ -4590,11 +4590,11 @@ 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 FILE( FORCEEXT( toFoxBin2Prg.c_Foxbin2prg_FullPath, 'ICO' ) ) THEN + IF ADIR( laDirInfo, FORCEEXT( toFoxBin2Prg.c_Foxbin2prg_FullPath, 'ICO' ) ) > 0 THEN THISFORM.Icon = FORCEEXT( toFoxBin2Prg.c_Foxbin2prg_FullPath, 'ICO' ) ENDIF - IF FILE( toFoxBin2Prg.c_BackgroundImage ) THEN + IF ADIR( laDirInfo, toFoxBin2Prg.c_BackgroundImage ) > 0 THEN CLEAR RESOURCES THISFORM.Picture = toFoxBin2Prg.c_BackgroundImage ENDIF @@ -4715,7 +4715,7 @@ DEFINE CLASS frm_interactive AS Form LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF - LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' + LOCAL laDirInfo(1,5), loLang as CL_LANG OF 'FOXBIN2PRG.PRG' IF VARTYPE(toFoxBin2Prg) = "O" THEN IF VARTYPE(_SCREEN.o_FoxBin2Prg_Lang) = "O" THEN @@ -4734,7 +4734,7 @@ DEFINE CLASS frm_interactive AS Form THISFORM.l_FileTimeStampOptimization = (toFoxBin2Prg.n_OptimizeByFilestamp <> 0) - IF FILE( FORCEEXT( toFoxBin2Prg.c_Foxbin2prg_FullPath, 'ICO' ) ) THEN + IF ADIR( laDirInfo, FORCEEXT( toFoxBin2Prg.c_Foxbin2prg_FullPath, 'ICO' ) ) > 0 THEN THISFORM.Icon = FORCEEXT( toFoxBin2Prg.c_Foxbin2prg_FullPath, 'ICO' ) ENDIF ENDIF @@ -4825,7 +4825,7 @@ DEFINE CLASS frm_main AS form LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF - LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' + LOCAL laDirInfo(1,5), loLang as CL_LANG OF 'FOXBIN2PRG.PRG' IF VARTYPE(toFoxBin2Prg) = "O" THEN IF VARTYPE(_SCREEN.o_FoxBin2Prg_Lang) = "O" THEN @@ -4838,7 +4838,7 @@ DEFINE CLASS frm_main AS form THISFORM.edt_help.Value = loLang.C_FOXBIN2PRG_SYNTAX_INFO_EXAMPLE_LOC ENDIF - IF FILE( FORCEEXT( toFoxBin2Prg.c_Foxbin2prg_FullPath, 'ICO' ) ) THEN + IF ADIR( laDirInfo, FORCEEXT( toFoxBin2Prg.c_Foxbin2prg_FullPath, 'ICO' ) ) > 0 THEN THISFORM.Icon = FORCEEXT( toFoxBin2Prg.c_Foxbin2prg_FullPath, 'ICO' ) ENDIF ENDIF @@ -11154,7 +11154,7 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin STORE 0 TO lnCodError STORE '' TO lcIndex, lcFieldDef - lnDataSessionID = .DATASESSIONID + lnDataSessionID = toFoxBin2Prg.DATASESSIONID *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) toFoxBin2Prg.addProcessedFile( .c_OutputFile, 'O', 'P1', 'E0', 'S1', 'X0' ) @@ -15636,7 +15636,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg ENDIF LOCAL lnCodError, laDatabases(1), lnDatabases_Count, laDatabases2(1), lnLen, lc_FileTypeDesc, laLines(1), lcOutputFile ; - , ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, lnDataSessionID, lnSelect ; + , ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, lnDataSessionID, lnSelect, laDirInfo(1,5) ; , loTable AS CL_DBF_TABLE OF 'FOXBIN2PRG.PRG' ; , loDBFUtils AS CL_DBF_UTILS OF 'FOXBIN2PRG.PRG' LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' @@ -15667,7 +15667,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg lnDatabases_Count = ADATABASES(laDatabases) USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS TABLABIN - lnDataSessionID = .DATASESSIONID + lnDataSessionID = toFoxBin2Prg.DATASESSIONID C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() @@ -15708,7 +15708,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg toModulo = C_FB2PRG_CODE ELSE DO CASE - CASE FILE(.c_OutputFile) AND toFoxBin2Prg.comparedFilesAreEqual( .c_OutputFile + '.TMP', .c_OutputFile ) = 1 + CASE ADIR(laDirInfo, .c_OutputFile) > 0 AND toFoxBin2Prg.comparedFilesAreEqual( .c_OutputFile + '.TMP', .c_OutputFile ) = 1 ERASE (.c_OutputFile + '.TMP') *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) lcOutputFile = .c_OutputFile From 5d34d7517dd73c26027847a5d8a43c90fbc4fb82 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 3 May 2015 19:17:00 +0200 Subject: [PATCH 12/14] Preview-4 EXE --- foxbin2prg.exe | Bin 591618 -> 589360 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 6a0d0b3b468eb4d026e1083f37de9f8eb1e62ef4..69bbcbf7c9db485d97b110b539bb76e804bd65b9 100644 GIT binary patch delta 26933 zcmc(o2Y3`!`}Uui-JQ*DHl+8qsU(y%igXAm5J*T!LIf!xBq0PyVG~LeSQHgdlrq8r zMT!a*lpsNdf*D$U=f#iHrJ5`(1B>0gwHH|HpAyA ze7fLs8vf^l&qZ=;A8%ou@^hCw6#A^9@A99biy*)1jB%G|>bNb3s>wp7 zR8A$xt(3-6F>)@akyJrsr6MI#9JQr5O2pL`h2TYsBL^gINRWp_7OFz>3MA$K;wc7K zNBnF{ZNP1n_*sZmK}9s43US-Nr}}%E4rF!2O?YXll^c{(0m|18Kg+ z<{6fwRuyEXWYpM9J)xh*e`rFwhS0{AN=Aw*)SfqaC92ifV*D=UG(pL+3fh8vth{bT zxGXRi;y*PyuZdzR;MKG!)+!orMM7T2YV;T{1dq;d&1=AWP)%m0PShHi@qZ?v#@=GQk$Klu z!TxWx`|m5K)SovmZ?6As?bKS9p|)ix2Cwx<C_bt5X6GRIRiO@7x0DQl)T-3hz`WmD?|Nl+xI}mqVk9)gDx5fQNCJls_;4VA?@v^Cx(i+M5 zDZnrC7UJ%z?PJ~;f#HfLR~wTz|5!wA>O_p%3)&5nTKZ_+>wkY_7F!~>8`~Xd;Z_G4 zq?s4uA!dIg|JlRr9px_3@n`k)P;{W_or&(etfz|Fr5jo$9?&%Fs&%BbcZl?N1gdW% z8&g7D^>uoBa90o>>hV+eP*cy$2Q)3^CsPuw+o|4*a&H^xj*(m*Ajy4!;ypAE>$MbA z??j6qBq6NMksj6uP{f0ztG;*i#ABQ2s^?vSTp!-kg$wnbWPYGp?`tWhXJTIoIRsNz zn^E&H>Yu^<1_4QrW$M(J>7>R?o#g>#ocSJ&pArI?ARiley#Ng&Na;EzlN=of@^?;x0VSR!c z!WbehhCWMOCSxP#Y2df2;?z_-Xa})|;&MUT5l~$B@GV{VB|9-v0 z18f=Cd)^DVwN^{&&2ID%A{@*r`N*I54&deTl~48d=jHN~|LPqm_{%UM@njn6wW$`Yezrlev-_ylv>$6#9u@K}|=k(a1)Zb|)pZhgL4xF4IPrMl2yQQ|? z4Wr}y9T&0U-Q{}oTiPkW!a$7!ycu^3W_pq;Ra69qIWuGp=T8vSj-uHBS#e2G;8dQmw z$$?fN=Rd`If2Bk33I_A-W^^ZzB&3zj*9D-qYD|L?GfGn*ZjTw?Br1kNtc2`rX&fj) zxl3z%WF@YAda9ogAm5!DiJ22@_4IC1R>#J&Zj%$O(J}sN?Mw}|GyJ`FO`L(ZR({pm zHvJiGeF$oQ+nMeJDcyI|NavF71as|TKut$z>m}+HZ?^fF2=01do~VUki(+)3FYf6! zYwMq2<4i&uXC1-%C9aHx6lok}Y5Eq!S7G(> zwCcf~068urO89)kpVQ+c;e;Id(lf#y`K_0F2|G4ieJR*O+z}w3UFa#Bm+8!*yvs1O zR@`zSJ|R5_pmv=jiubkLdD%-sth{4cZ()e+ynMK@MXp@lPWVG!wY;McC7)g1MJSO2 zSF{(F$hj-xg)cX}xWYvztdZHOBjT!X7UC{?2mu?Odv}DhW^+WYt-SkmPO@)pq_A{D zkJ`b4@cM=&pB5X1g|fJPi?DFR*6kYv?GnHGGI`M6fDQ7umvq7m`RTpSyHEGV1i{es zp%Vfnd!TsHvg^JZsXA`Y#pqV%fGgGUIoyI*ED6S|htJmyCgUwvrGDPTO^PQs@(K?1 zLJP<6_LslgHO%{4uX{Sdb{luPr`7BE_&+DF|ISYoyyfo?bckxfhi?+rn}1{sQ)9-{ zQ8Yif+ra>N(Dxx|ooBx9Dg?`)ec#h3&gY(Pk>B5|(#=oKJmM?2+V7`(1`)oN`|b}H zK9DQ-dkbI7Gxv89$yeU7zjLY|Px)U~w%|Wj*5cc=vOXt$@9Dg31!=5oo$vg;zM_{O zuWa;Vm3=JZ$11x>Equ3wvE~#0w%Pub-#y(?f3=##d#s4}*iZ5+2ZM!2@<#`Q#bAH= z`-4G3clkO@`LffYV8JT4#?NJP#-ZTuU-{QJLrwX5asEyvx>T9k$g;tDPki)Q{hkN-ncnA!chRPzrt3mRu9X`S$x%-hE>0;nLU7H{|eSetf5hQOp z;wQ9`k00qEjFw%G_KABkq~3-5gqCzCp5H4a7#@vJw=l({9SlObpV@MsNG*Sz{PNLQ zXXjw1NIcR5II;3dilLGv~7J|D=g$Gt=DggjQxS3@2z=Y|k@_R$!Z zeM+_s1^pvL-g7iuUVYq4Y!xcU91D>z98b|r4&{?4=EQ*3=fctGd~?;3>YheBt37oM z;itpZF~aN9N6V*MPkG&m0hsgB$)3X7a@t9M(TJWqIaIqWy#5t=)X6~k!pTX(X?f_W zY|#|4Vg0F8gJ!8Vm^+t1ZT$#Z!$Jm#9&+qOAGf+@e_L{$vE)V?m{xU^F5FQ%%jz=A z_eOk~mDgVMNpRz>=X{f|vhKwFca%`?$SZKZ&I847NxA25dlFVt_#9Qq_bx^mW()Ok z2)g4fx40DN?xU;(NIa7#He(oj%Vn3mTVs*%Bk8_Kd?y0%=cCWp-YVO$b~}sp5pXo; z;mg-w@)vH(-(B(-okjWTrKspYLi6Qf$>W_kerWhxM-9 zn>#i%5+XbE7WTo+JYN@~6f*aY6KYxTu-?R5H4?gYlNn#AMMp$Dko7l%J2vOzIbYjQ zu_z?xW1U|ObybRnq3^__zO1$7Dd*qx6{6*-R~9%L)JE_W z!%vHjF)O_njPSqpUPwdlHQAW)-kYZMUegSfCgMIcT6<47`5(QPqWzD(hsaHOj}IY7 zjM1q@1eKv>Atl0UL=zLt@nbIqM`S~c+{)5-V0ZHuQ_^e_CI=WL)5Jm z8qwq<@4X!@Y~1kYZG#}J+wka5LF?ZRU6rkm7V`;8$U~TPdCX$-3B}G zZE#-FK<<|UrFw6k@cf;Y7_-7%LHx)F^EbK${RK}s@V<+@_^&)+y?pa8FL9t`Gmi94 z(KjTEYntp@Lkt&rzyq^}^ZjAL_eV(vYepK%z zmKg0xyFAMED05U6C$)t{zBt|H5hCS1kE-1LOt!#SWUBx3*}C!4Jk+6t9yn@*_qQQFux zwp!c97TRGuOOg;No=uX3S9Am1?&(%Dqh4qwtY%N>g<9cVc0(^LmX5pM)2;AgKRF0q z>>UTeU5xgSpS>5rjyec!#HUpqX%Jk56}3+o1UEt0$NCtB;iBlpJ~W~%Z?cC*VWQBU zjdv8f4-E8f*bU^M62u3wulK+029&)}g7@RQfd}69CpxSR?&N1c9{d2LkeN(EN8uxu zY7)YPO|_#@&n>Gk6s3IGafE55UT143d zUbe-ABMEh8YWSwB;TWWGf-Yb$c?;%F4gyXSnnn~TM&joh$jAW~*1)*+(m#`H1$NR~ zNERd(>?4Fe<}ng|gkxT@x+X_S%G3KLZT%Exo`7Xk{L`I1o1k@#)(cdw$ZQ(+& zUfoAH@_j_md37IQfS;WC`qMPH${oh+`i?-rV z(E_#_&dLKl-`^__^xTN$m+ySBE1mlH*e*(Jz8mJT&npK6>i&*<@HtpxMv3TuzKd`p zzFFpN+()!+?lcq>2X+(T6|kD%sK{Ve&TKsB>Yvz;xU++Pf~Vlge(@7p4t2vF(6F|m zr2Zq3mn{)0jRNr-+BPRz;(N>>%q6uPwqZD2gq3eB@w7gQRrm{@EsZ$W;|Cbtil^sQ zcnt>zXSAv#meex}#S!miYyAaZgFOK|=r4G55H_zsE_StaGWsd4bcU@76nr~1Z6*Fpr=@qXL;E}m``mlFI`x=DIU)(y zDO(FZlP)}jv*{w=`oz=O_}FoY4~qyA@|#ZZ+UJ9WAH9QSH8`pEw5CpY%sIhf@$)z~ zr#<{?4tuM;(8_va6ph1J-d7Pe|AqH;w=p~oyx-H3GMn_fw@_~lQ17OkvppV7&86XtS|A?U zXJ41$+%pTN` z(-s!KQ0yqAuwe_ueBm?pvTtMCNte;h0O?`+B*9pB z2>tJyC@DQ3D;X2=w0>GW9;Vo{t99XQ>vWBd9Xcn(hd5Ioxalaw=Ak&a=%aX-C^$zx z-0%3Xooh8o{roW~y6_g`BP4)U7;id}D$!akJdB2$UX+AwR1jS~qT2DZE|84;Id+y< zKZvjVI8ia1c_cP)ou;!>fX(6Zn89rMI*mu1ndj{JSWaesALPU{a?{l3J)Y5pb(#*D z=B61bqgUP2MDV!0Og?auK6r2AgFToJ_C7wC_qTnhE(DSB=1p~Z^_sw# zAiU7~Ld4@N4heHH)78llZc7otyEy`D1IiXj(nGdwt;U1xTCZ_!-W)DPIVW2n!M*cS zC2VJKh@G2}#ot2u!-t>^qZWRw@pp`}@B0E-?`t}+UpHwCR^I<=lvo~RiB37|Re~Ra?v?SY;*3AGyk2E$2*SrmtM{ngtO#HvK8f&&u)7;UQ zAJi(F-(c2bqsH5sKsN&)&ksYabvDni4R`FW1`Jc>e%#bn9gQfN3y!#wZX>&P$WD2; z%=a_=ychfUa0k4W%SGp^J+;E$G`N*d#oS?e&@gF5W(SJI>gLRA~0r97Y%P{KA6te;n~iZ_V3A7WqYqYSI|m zb$HC|taPOMx~>b?$|z}Ousc-z3{br-#&1L*lXU6Cn&7>ZJcAI?J;;GPQ& z_0hbxzhc9Rx!#qP*J^y7=JT@mvLYroy;iF+>l9DOKC9KFy4##$llOex7WUNyvzQ$k ziM_sB=RyTVMOl`L!s4o`;-b{jvBe%H zHN->{3##lPVfZScfG=ja()h}vg6d)flvt2vM1f^DTbeC-r(eTp=u)$^(s5R9rZ=z*3x?p8mbf=0YXK)%l4dsw&2gN5%!!qh4h~jua%k#>_cVu&|Z& z$dSB!uY0LkG^6tT{W@jFDd3@A-A-wxNp2_cgIfYMaeyWV@H)8sHmc6 zLE)J3l}9=?#28yqzz1lnSqk8_~JYK z)2DSpuhk717F9fHDXlI}u~;fB=@lg-K5j@_SW!Nq*i!x0M%HbRb%sftO83xS=F}lYM7BM#pMNMO2a?ApxQib zw%oExo@qkvqy+wX^O73uKvkHI>7|L~#TS23O%fGbEScl0+gxtos_G&zyP~ptqf=<~ zBloYexldu_Z@%6TX=2mH%TFCUzG~Euzo~%^qy(Z-C*M#l&FmI6rsbw;cS1iE7FSl| z>o^HH)t1m(s@Xu}%S*?NFV0U(9`(CwQe9R0W4=oIgNF&^MCEw}V-dZes;ac4JfKcB zYbmW?TJCBa!P6*_5^S*o@3G3kl6T&^dunV~8arZaPIZB$nvdz2wDQvGA8kQuMxKB1 zh$6lu*MEGmrDi}mAIl>iszwvWdVW>$Sac@pvhg81Jy`M`blMi`N`+-b`S?0g0)}f$ z(%90%F)i!WgqTbS>Q_--tlDdAcH9#s*r|}_@p~R2fn^Snyh1K0wb$U=b-bcZ0&fc~ z#(r{2PHuMQpdUo`;t(m=dPSoK{EN5$Os@uc)5y~DqKx9|Q58j1nIlG{8a-?JVW`#F zB6t#}MCr&HG+}8`%A`uZTA-q{jScs-O`4I8sv&|3$6GL3tJ6za@g6B4pu(gExKL?T zT6s}vA(ow@+=?;9<&{os$WX~FZgOT*hr;QHxv&*Or9g3v3)>2N@KIMar8`!ea`+3B z;OXLl8R<%IPViulc;bUzEM%Az65HKdjr_NPHN$2$p`LJBHI>Cl6-C8^eAu{Ql814# zubL=^*un3l7_n^-`)ZgJCiV?s7m%sw8p`zfQk3|1IE&Ah{KUl(EF)hEHj9yJIujqo zW5*X27p0e$7h7Aa)*xcn_rn7mY0W;&m;A+cv21s~6x8RiH zABGr@Wt9(YRwrdH52z}(C{+({$Kr=eaX~5V)I@GnRbi=ybFHjOEH6@`R83A~*5Q&* z^6U7*KOY;7Gjm_AYH?C$W`h^pF+erz$=0EkJZ{iYb7Egzk(!IU^4O1sk}v!6tYj3~ zKn23m(|RUlW@M!F%f0fH8r_Ks;m4HO$_G>I5LR3uh5BtDrUqlwE5S))F=fY=j%Z)N zRuo8KUUH!tZnTB-^`T=CJ6RwFrz{+)hGCsn(qbLITuPk;WMlaIaO6#N-Oh|(P`y;W>kG@3-KamzAAae&YGsi z#9)~KXN9)O&q~Z_|D0-dqSA77Y<0dm`JS83=AxB7M$J%z8{Bw#ammYUOCbuf>1E#Z zVPf4}CKO5GhB-^rn1O8lRLPw=o|PQMRV!G(A}Q3Ev{nuCCN}h(;t zpV2zox9|+j;;gOwhQ92JV#y#5{6>Yd9Dd%(el13EU){xAMxtFe?qjV+N&(^@2Uwqx zQgBJlF*Qf~xEphl8ze0J%39LchvP1(0rr>~H@HFn&zLSaGvERCn3FZ^z(~nEXrzOP z00;b_I;(6=*Ri(hcwob()Hm_6)jy?8_8poc~u&LZ&`qxA& zr?a1M7x&9As&VXzew@h+qfxztSuAceJY}DkS=MMwzE9_{F{3f82E4{*kCs}9Z5Oal zM@!L0aS_kJi7<|x?@QjTn=Mn>h{?k{l22f9g=%x6GEiE1W_dAp%AHoS*fCO^IA#?q z7$bSMUHo1{QtmX>g>Udjs?CI?d?8Fov{(viD%Y!4GqJM|F~-||&GwDK=iQy`w=pR6 z#yzarSjjgi`hXhGO&zfL$tkI6{ZjIkd1E-tQpRGmymy3+9xH{5=3{Iw=XZ{=P2l!E z$JMkpXPj@Fn5$2yW_MebN?sW$xrxb%xrtp)GUqbPpeN3-)@5ic@ht0CCWQvhIjbge zwI#|On46!Sl9idAn-X!3y@Dv>CpX#pGRep4f2-lPsil)Lv3X1_EgoA`mGEan4w;3M zuraK{EP;m{jlF7Cof?Fvcgy&4zJ~K;f7q<{j_rdJ0D+n{&b(h;G%z?f8ZugF2oBPv z(PByBQC!iz@TAz_TM7!R^OLfZid3^b@AZnotuf*6NdN)_$6B~-~3yT+kz#kuE@pH!P5CkT9gdW>G_%IDJvC&4}1VOD63(r%;Wf=v5F^^ zR-u8hLRD8F?j?HwkISE|5ybasdtT!y{Lper0Dt^18gD87a6uQm){q$9+i@3QWG`cZ9SJBVU2I{|Y5Y2EMT^JjMD|NfEiPpH?$+#sgwO5l-im^7+D5Y>7Fm z1{nC5<649I|bzhV{4u+&a|NQ?K_R= zc4}}#b^mxmVWoij%biu=PR6ZccMi?%MS89$vra%&x2Lid_|y+dQ^J+^dTeEfzE98ho-PEWQS{tzORK#o6OMcw1qm zwqngHHU*K~=Dg31@%BjbKV#$_wG83Vv3?*|bV2!1yzM_glcP>-rKa zn5Op?TV74+df&)$o6& z{QVF1=49;Vrq!`6lcfN!hj)3*F4#@0z75Z|118k78G zK}J?E1zWqXO>D*#EP`#Exm|q}a(ly9hZJ4yO?t?motc8WT#Z!iP4BX)IdhqcechK) zEM}_Y)6%^)kJHVb_SbeQH%$}UMX{+RYTt!@FjWfHWhEx}=*eZM+o$O~yt_S*bx*Q0 zQzhRgza6UDU3qik93F>2II=I|O|`vH4QhIu7GqSKI-KJb>Va(@6657BHq8ZinScXd z*3T;WTThSYv3p=6gK+NlvIN^!7^sg?8oC)%;lVj z4Odb{Weq<;-7ue9dfGO3e=<%< zc8iXEvQ6(Nu3po`a+O=oG_?eM4U6mACULT1!8a#Ye69CqGr!jRh)Elpgl^{X-`&*2 z@*6DD=}&n%+0E^GZx*o~1-bVb>$qK?ARgVt%J^sfE}kSoY`&X+dax_oQU0vm%HpVG2iNg z#a5Tu>~Hk};tN;V2mJG|n{3y&`am)CclOJ-`cO?G>6vMVK2U?N7_nA6^ghx`gPylc zd>5?;8@5C5Di%4jaXa+k;w)#z_~#){wq*yhzT?Tx?9ewCKl5e!o%&Ew9Moz2~eGI^WX%ANX1G04om+o=x=jWF{FN;UYFDlaYNNjvaX>tkka zyKsYk(X8_>++a})md|-&ESt%BNi6$t7Yg!8Jo|2!-Yjly$8K;w)sDIB)`x^;bm93o ze4zqQg2^cZA8WKxU05z6iUr-+#NEhXayPbkw?0f<(T#nH&#+U;_6)Ec?USFH_P195 zus750K?1M7EP4;_yfU5j*@GHBpUEuzv#LLPeUIK>d_I@e?$Mil*bttf(t-GeV07bZMVMr1$%ojosIgwOdyKujLm?(ybwRH#ezl*|Ktou=Y zAU^a*^-na?(4+b%#rXpJQ%CYYxMwpu>TR149 z=-Nce7Ps-*u^T_?TL>EFcN)_-TV(A|>sz}c+Bnp3zIY3XM<80ZSUcgg{-l>E2({U_ z^@SdSBm2a`AsozpbZ}@d&ePO-7#uu0TF3lKbWAIyJ*BS7q-~rI%as3S53|y&W2krtL=!PvM_!n@t8_oy1xMTYQ1Kv8(Wat?lSjND3 z@k8H0@9@O0If3z_hO}NdOT#&TfAAx459l}_ft~`R9#jb33n%@BV7#RuE40N=AnZ*E z_omg*EBsL@Fp|=7D_~cEKvQ7|gy9x+Ed=(Q7^rA6=v6@iVS7o@;Qi1Gf(2R(js<@S z{k&PAx4<}~r;nhkLIhe3?hIZ6Jt9<~jo?J^%h3Ii@fL6|u=Qy`k8soyh71^x^bFOhE+i7#y^qYTn@K;0)+gyv{I#XMvxAE{@0J z1$Yj40d!4w>~+CM!0$juWD0~On=}~M1E4$f7w8(;3p^D1%y4ug)`dZ$m8e;PK#Ooq zf?*gU?16rFgrNLQq+;+1==?1Ly@c>B7@$%z7yyq*b)3Zw8sH~Zh}3mFmwQ9brcETE2M8x%Bj%Cz9Ox1giFLtJ3yxn z70DIfvq%HiK-UcyX$p84IJ`ilkhev86FdoiGy}S5l}J&|Fg3w4^n?#YN&?H^rO^Is zL>d6Lu7n{65RD_qN*LCH3!$%kDbfqz-@yT2iIl%xq-$Uol=@ZZv%5s{!WTH2gAKby zirp(xS8zLUA@u%zBISU4g6p6&zY}Q;I0bBh-m+h$an9)fTo}#*njaErCL$DqpM)NJ zQlw?z=fDf0*^eR}1?9CD4|i@TD>E8{jvgpTrp@zF|pkfnS1-J&yu| zc{dG!Zt*i($OZjh3quzE5Y~OIhL+$PCg;HsIt{JC^#k}act7-PgNDw5?}KZhlZ`k_ zz?Y~5bXz6#Y+R0D4R|y3HC!%W-mQPSYG{&|hDyMG;N{R)aLu&B5CnsZw}#?z%>jpi z^PxY$wE!FrJ`Nq`g93t^gZn`*#`QM1CHS;I3KyiIqu@?peXxeYaoq%WxnoMeFc)C%q@icQCEz@0eX54$gBO9@K^Nir4g5Ozb?8?zG;|yM zDR?Wil&PT@4|q**3+O}H8cGE31$*S6bq3%I#o!a*4$vc>(%|pNz;F)+_LPQp57E#& zU;*FI7lz`cbH0W)f_2~y(4hqy+6s074}#uTqM?J}7T|j5x5sKo;|V7OJ_&8A&`>nE zA2=C0Wt@gOg0sPspkK0BVT55I44W)y9xQGB!9&48;}Ll(`V9Os_<88nFKcK$_-*jd z(1+%riNR~Y4miRcx(Ka?uN`d%zYZPqx`sM{_k;7HKf%=-d=PvU+TFTNLm4mxW3G3D zejC^K;85^c=&_qLbPOB^UJCtUEt(wM8T>hPDLfLs=0%y{#n1&?HPjY72wVkytgIeY=JdaOHzb!4sjaZ{eh_2!>rS9E1-31I>)T`W6Id(hr&iYiT984EzQ3!VoRZ z_9Yq*-U|J6sFs$4t>9RkMrqn==_2?!aBpbW4qEyX{02A!+M$b+aH?TFL}}4*mgpajKRkgTDgrfOhGlr8VH);6Bh3`)cVJcprE<^woY^ zx&}T5HfL(7UzV0U{4wajHPAB#YN-YIXYjg#@W0;;(b9`BT!-O4v?~sz)`4$;yF;HY z(b6a2W=_~MkJ8e-F{mZJ7ZwcO2HhHqd2?_oco=kfjh04(hk)OK-t~-@=7UFpA3z6T ztzQkE2!6^6aGHilFuVXmH|QJBYUwBNOtASmw8(TV{R*BBJ_;TEqLvxzIjywA2dx6}S&{yG2@h27C)V47wKA0q||G^*SK_9W5P)Ap-ur47%l4$RG#> z0FQ!B{!U9jfWHDi2mSDxmbwRHIfc9Jfa8$2Zomd^4n7Ip{1$3y#-IfchrWl+KpQY$ zA3EID(&oEbN(bk2|9=nQgO~r)VVHyn1EFVOcd!~f1H1?NSEG*hffs;VI_k*5MMu}c z?}HPe^*%as4Z*qq?g<@W)=@I}Eci+24?}b`5qt%F8G2z09nA*&aR0v>(7wHnPQ%a< z3q&dO>SP_ogkmuQ{|r4QOGmGOXMw-%uOnl*j?RLA1$Tn3dsRnM!r;2GKJ>xy!LHRh zdM+Hz3%(28Zl8|)Bj97e=?8QacS=VQkyvYZgkgYDS9DYjgCG3!V(1s{>gYbW7x+u) zY>h;D&50&}XF;#jOY|OC2LA+o#3a!v@Fs9GCy7qDN#qrUQ4jXSpR@|{l_(ed2s{{i zY_LQ!*ct)hfUZ%uR&Tne4PPoj6g z26)T4&?Uzt`V$-tegj&6MxqWe=>P68{PhzuyDHK67@~6U8tCjlB>EOS2Rs$J?_K=T zRV>lF;C*^MEjQ|^9Q*5KNnv{W1MCHFTLb-jxSl#$ zZIeI#pr>Avb0q*+|v~{?iegMaUS3#dEfh{-z+aVbIM&XZ-y{e}o@B?tt96c?4 zT~7nrAanTdqtFMI>FEP-3Rt&XPkA4}1}+1?2;F(To?P3az~Hga`i&?cco8@ediy7O z8V-IBTo3(4t=>u#VOS4CU9Fy;-K?hp=TvH z(2L;tSU-lfaiEG(4s_)SEXQ!)$)yf7%KDlEWpu=}gZo{-z=2xta-a>JurR>gJ_&so zS3(!`KX~142l77SK&jyGz}KLoA2^WM6@wV=w;p{_fgXW>2NywGN8pEJcRcOFFa!D^c9YKFI3a>+$=ND*l`AOPsAJrGwAge1I2=$1E)UydZLfP2H8MtF$w^_2|fV*!kV`f+#Brkv4IBH8YmzM0}^aq2#DKhphOrxhM^Gp{z(IU4o(auiaBMV z?!Or*HyOKFuoc?$hk>qv&w~@7U&Fa~vlMhu7(b>llAp#%R&YEx6S@SyKRp|q4W0$P z0@pThZW#RkZom;-J7CB|ga^=iqmlN42ZFmm_ri4m{1n&<{SvOD;343R(6gM3bP`+z z-VQy|)ku%PbHMYVv)qjol?uNPo&fzVu1?@(VOFf+fR(;RN`&DPL@=6-bP?A|@D{LJ zh>;e>8fhK)A$S*bOj{%Q_rh1k!%++9Azh8s1>6z*EVQndk)8vWfjdFhq#5ZLcp~_1 z=sA6G5Aakg4B35+^nQ+!?!&MO{5^EwAR~3}jU6u!ht}j9X(IRn*m0zhmX;am3|Jq5 z1qb?iwUK<&h+2U|#~W$b6eDGTlfW``yXp7>6L<*tH|Uq~L^B_3eGZ0ofMN5DbQp$} zJOQ*1!*2rj!3YPBdc#PWON=xcybnAXdilF}YXg1+-VW`(-blN^EhDkdgMNRbkzD%{ zwFRGn&iTwp5#S{7Oz5^>7^!1l^nWf4oxU{EYrBjz0ui1A?|=@&Gt)ZoJK$94F+UjT z3iv2^IrIl-jMO0=&yL{R=Z!S(s*zp?2Q-H(hdzqmvpEXx3^v{}(!xLS$Nn;~Jp=EB zK6MWRH3R)W1cuFj8R;3(k-8zmbnsH>Jr0g!1+N4@g1+VKNS}jugZH^QQkt(LIrqa9 z1CNFNB+!xifbolO^egnKAV;!*@tbkvg6F#|vm;Ff^KIEHA&wLu?MN%EFm#0>7hs5W zr1Rhca5w0W+d5KkCI%FEYd1$))!mVnf@gvcLwD)xNbiHc1m{ER@X+@NOws5D=!HWZ zsVECR1iTmeCLa1Gfm?$kMmy3Q7F2Kr4En}J`On-!dw?LP? zf(yJKyaal~YmT%Ld>h>Rbw}E{0tL>-5nc-{IMAQI=SYLW9l_V3yR3DjSHS7uanNTs zI$CKZ3MK!m#h6BgvOgVsK0FR_IS} zI8re<4}1!Gv}mFa!Arrx8WW!TP1J4xW(oKp^cWWtO#oj6_wzB)z+e+y086cKa0&f> zq=^FZP3SV+JX zDJBwnTy7#6oCC0eI{0<4o7F@Yagq=?2>X2SkQvY~ zn`kunC^#GX?kgsm3%&_%C7a+JOmrUHH3q9G^xhRF%6bX~1iQUuqV?<0;^2v3(?;B2 z!*&yW55vbWT!oI^W1_Z$G0MTCpf?@B4Z+vIze4xDWTNHZA+c~)&=aqjD0v7n1iuc= z@Flq#@EPzf=zba}oGIXi19&|24#|nk;M?FkR=^ZjC+Z4=e;k~J2mT~)gcH3Do&XMt zbfTXUoT&LQ%mT2~#)-7Jrhq>JFKO>Y?Gw8HQPP7Gl z5Ih$8#EVWeXE{y!Oz z@TU`vfPp_uWaAeupAeeSS@0QfuuC(V4d=i}AGVj)iCe_zE<>oK89L zitm7vM@lpq53kYi2_J#Ab0zY`!)H0B|5}U(4lyE=!gL#b-?2` zw2TJ{D@tz!{|sG&2Z{5D+YG!L+JfhZ)Q%Y8;H}W-@Z9hoo+Es~@px_s!LveFJU0Y@ z$3eHjv%-C_)eOUQz;k$T__`~c2>1}R6CNC1=!R`LI2rm)?E5c)+klTlyJOqlqdOKV za3=I4Y|CE*XM)?OBD}YOeg)@&)1hx++b#4!LxN)pvB|}*`|}>?|3xr(;KcbWY_rcJ z!dmb>=<(IqcqU?h2VMt#5xd@8@D*_Lr6}Orco^x4c@Iv5-r#GbFTmbtg{#nS_Q8^# ziYI081!!07plwHksh=E{-$|>-|IUD)1`kcW}+?hv!J} zW#~(|7V`D~Js6r}L$DR={Ttx5;0Ms}V|^Z!iN`4LZ_wMY-0si9wi_%gaHQWhI?^31 zzxTmyuzJqL>bN}{FP+fu2cY+#b)=a&coYMh&SCAx;?)L=S19-s=o%OJ{}`-J&A9}JepZtT@l4S2C>K(C%w2bzKxWc=<+n}%>>eX1I;sc8T=KHXal*xfXM z8w1nSfKyEaxN%^H8gQ*?05@7M*g~{IW01s+efq0O@cP;QPvXXc0ct>8(*SP#!xn(o zvG#uwH@-VqO@a5Y_J0yL_8!K@Y0(M2hdI!b`D&yIO(SvR3$}pSO#`^`{BSkJ@}>dY z*c@*Zd5f-V8o-UO7O4SSn+CjEWObm9@Tfe={-z<^IJ#5~IM+0Q8^0Q>2Hb8Mz>PC2 z)Bq!vr-pwLH?|q41~hLPz>U@~ENV#SrXk$;z!s3(G=LlPtJD;un+9-WVYM1CrD*^+ zeqak&*ff9}hfiRFgiaVf!GYG*sHrzMjl_*Jr>FsVuWSD&apMhJz?r52+}H)J%3Jie zrUBge$FphxY3w@18EPrA#?#m@2$VT((ksS!Wja?}kMz{asqKrlpSxz*>*z!9^ zTi}5Y4jAaoy|P0GPjT#Hxmkxmk5*0+U9#y(BN*tFE<`o+_4HuZTNNWaoYB~OY0b2` zib!82P;H3Zy>pOU*m;7jf@<9<j zEf;mqt~l4dTa?JO>};(NC<)ry7}~@lR|)~_?O_;iizY@1_HuSo(>^sCrClql9O#ii zPH5I@O|1i}jW^HbPF0Rb+7+ndIl#Y_RZhe!-UT*^+lU($Zy3x>%lJ{zL<P<%FCV66MlaTdlG0gSF zFf=NLIvC%Q50y3x{auY`sgGxD6wjg*_l8FHDQjm;($)r{67Jixo8ET42<(D;S5W`TbQZt}Xz z2Dbl@=qRtAvd8#YNNps&_oT{~_X=Ta#r&ylB;mBY(>6`mFL#*PTi9Lk(#!x?aksC$ zf1bCyr_vZswEnI{vFH+Q%&7St^7;QP5W?i#m3@RXxqRhFp+dG_)n2$E$F1rl_{%S? z>M9JEcdhCmtdQ@miWEMr2xX2s;a$1?o8O3UhBBv-qO0Is5%|_92hF^&jOTJ`V4It1 zo#b5~2MhTXmp&dU2xBWcZ?c+%TzTD&Jwk59h|enop|rwzmrfE(Jmgk~JmfY9@?8o& z(7(~+Jn6hZajwW^fV}y@AMGBy!=6#)rgmW`dgzYM5y(pw3**hND<2Le(_K9Z=SFQz zymaaA^4-IuJ$JcR>#F$8NYsU@wR%18#NWHim-l*!RqpbFBOUz%d3TJ(tlc;rEG$Yo zg?PTV{KtR038iwxp>Bd%9)Bpt)7P_FSLFToyasy9TMo3&`K^k)&WMk7E~3<({%}`n_NSbX>qMT zvNvtdV>m5JHV?@|PqcQp=wB;QZ?^!|rj=hmkt0~;niG-YPXTh9lM7r50@0$#syZkf zc$VZZPmU7~${oKP*TWKoIX&#j<=Cnze4*iE#t_6)j0{xfF4b?r?M9xXprGd`wJGxD zFFk?|2R)b1VL{L5b5@W%>_jWa)k?DU89fjruRakfPdnu<{uLzGo(PgZJr%F(8(gj1 zEZ3eI5V1KF70lhG7WD8%G@05UI}yGy^x4qptK}JXlxLnEAPkVdI~^lTl)cXQi04A& z4rhjICxq56mOGyDlRrH(Mc61uoJ|vd2(6fPwwF;eTN_Y6j~O*-v}u)-=qm5O?8+=n z#Bj+#JF9gwWV^~X!c@6?oi3Y}x*#m?drQQmj8xpM&SG4ooed>9CcwqPThif%%geEXuG)}E?@Wrs`t z!9fU9r%1jI-~4)X<--uV!xsRo%KQO(dGIBF+uu@CYjlgITBp&fHEM2{Hcx75P4vMN zK8x1WI`N6fTDWFpm z-izY3^`#0|OQrO*Mg>)dmK~2eQCpX$ocxoQ&{Q7#(@Htu*B$cypO0y-G;YG=XH6(p z*|GJ*gdlsR6)$Mj1ypgX9M19FH#kua^3oqYqa1nB9PX$-6t6BAnk9 zx$-4RRr10^zHaIu*C|7Dics5z7u`)ZU1;OtUSC&mtITlfxjpHEM+AHxPm&&s#Qji! z7xzg#@Cdaj%F&x1*Y_rGr8iwrdedV;o_l4SuY(2-RM?ZpI%*Xi7uOUXo`oJ72~(Wz zTiNdFFpH1kpeS>LSuVTUM;IaRz1qUrS7{@q7x}66t@fgCWT$K1TI3@@=|%ns`&%yx ze6AObR(jFjQd6_;psm)8`bRHnq5Yq|2$380BHn?`XqI49aeXfe`CBjgpiwVEudCL* z+t7=`)KWF>MZBO&FAC;S&(!sz5TzG2K`&ZV5%B9FjrhnzzIL;ju&%=4H=`iDS>bg{ z&^kDwl4C2;RBcSSca+@rPCGA~4j#0l>LeSulbjhlh)+E(^2|H#;!d5s|8AJP=T4^Q z`%@+4lB@PcC7F)*GlgJz z>3w(cxN10gKhtZQsXpCKjnf@&Qf?XfAj37stSl^*RV@%f8y&cVQ2gA5@jNdf3;6@!~4? ztg&lI^zBC_u0PjD;H6a}^s{e>kW#(W?Z*$3Xth4h1D>q(*JzT#0 zR~|M%{T}DSZQk;@opH2NZ2=$bUF1zq^6mMGjouQWEcTn_iBH-Ie)4-y7VDy&t94B7 zSkqEqvbAQrAj^KWuj>xERO=SYyK0+@Zmz7yMvd2srya!6s+9XbbrBXBD@H~k?w4#NjISLUres)udopz1lA@VIY_6(-F z83hMH)w(#oVOEP0ivm^R_=E4h`PN0*eRCrgV(x09Tm^rR?V!Zw?kA63sqE%ePm8;q znKrBhgG974_bZ%;yQjQfJBxLGmPYApqKI*gX&r|(#z5sH#f5G@z>>mOEj#MnqAB-J zH8lcur|7P(EW=4?5$S{nqMhn;*5My%V3Sp!2J(l;GaLoFXFAn)wNz1QGsT5Q9=X%3 zZ0iXn=Ep<)Ud6SxIyauVcO@4s@VTl zLu|K;;5qb_=Of0&B7wg}M3XhH?YRG=+LWRtB`Y7X2{HHLimBDm01x(_tB|$b(M`DEVQ&@cCZ8sJ@=@G6 z)*?c17Fx6J5kgDvgQWO#d`iJ+7LolpoXqi=i3yQ{t4#-gOGkm-10&#a354M$q3Qzz zn<}IS3DgY7oV;?mbA_`?bVg-`Pl!!X>$iq#ebq$yyzsXO>aFS#Ebdf~!CDBlIoQEej~_Mhbose2e-ghO)gXSlr0fmqm>=&c3^$dRLpgYTzlK)~j>sq@rB}+Jn1tl0 z)U@90fUn@Qy}Xt1pO%EAt1LCY z{773v_w{_jM@dkR29%`EioHy|m6xy1YJO(5JhQ^ttdDE|%<52YO{RvK&{NG9pRIV! zIrHhq0q5b*8p(wZqJ~DABh)vN;-~X_Tv)3Pg1e*Jzf~JUwKdzG9VNUk+6Vrxy7Q{5 zyC0tKWdB}w!+BTxKkJS!IlS($lm1(OGd))nw}zr9N0ds(QHx^vpGBGbP6uK8I~~N; zsV-#v`|3D~rOp+97e=t|^TZS*Uv+q|s${Rt6Wi%lV6FL@ot-E83STqF0zuK2%EV;OlW?IAM9eRpd|cY_hWukodLiyY2>@wrWjDl zx_5;Axj^hDXj$Y!u~c}Oy|++oD}2j-SST(Q3fS01;!xovJG4mbg$I}yivhwe)?%^P zNr+|E#bTDQogH2*juY%ynLMzV+;LmY;F5LkBRHVz36*aY)&nNr%eN9Jf{?)1O@5zSoxIBlRc+=pC z;pYj5!xQ7p69-23JxDotz)K+PHIBoyzAkmE2yPvQ0H&J%xZq1ePMES6ar(J_hf{7s503XOpe3A;w9Mb*y#9n;+^F$L@WVu4L19F? z?@kY!A`|w!#5~b(T3+vsm{(~@e~ot+vtTZA$lv})B#dL(F+|Aoqj zyu;X|OqErwxEHxVhpv?Y-%_cPx8vFDs9VTQ(`btP7=Hg|kU5!`vsNJ^Es zkyoR#({$vG??WV|qBaVV%?<1{tNK1K_$(QyzpWR@~<7*?pkTvkx7 zarbDCE`0V0&U`dAdS0E%Z_FKUlxtep{xV?CfLlG`$YEW4*a3B`7I2lJT6ff-IJ$hM ze}Nu}cD(z*#@`si)Ddm1{#I(V6K@?p$bHpUNLcYZD@}37L^zY}!nM+}_Y4g?Jmx)8 zGz;fg|4ka7u&zjtyYo$-@NtOKzm<60i^ke!e7g7z12dMYy0Yb)G+uU-jL3Fx8)9

7Wb&VXcZY(+mFDC7G3lbZ$SyMYVXNv}xc6-hio!{%&l+H?! zylgkj#9!BAWtyB_l3HAtV=XDM=037htxi-{l$%{@MZlP1gpA5AUW3mF@EhzYXKZ%C z7;7T_Da#&XJ>a0)T_`8tnqAzGRIj{zYsq!Is^>SEDA$^kpIvN?OH6#n2{!(T1VmcH)4=%`xvyLholNB8s8=s#3 zU-njC$yXS_cJ`Hm#9LnMVqeKmn8zLig&^kFPiiUbVSW2a&5XIeY7#;6j5mA?b@vbkk6YQu+AFQzS{(c=ZemQmRSbD%jpJ5!CQ;J0U(wjy z@VMa6XOWYV>y!AT&gv%%i#=FjlB5@6ShFOliFhT9^-q$*OtYJ)_xTaqx?b>Wv#jp!G3*vX1OszPmcoS(Sr`1W>({(KjkuUtb~Z`!7JqNf7A8x9!V>mz zvgGU4yrmkWz8mpwl94yT8ptjq*kyhvHP}G8g)!MV&_BW zB!BUEG|T5Wnk@i!h$&QWb5Oce{FKtDUd4qI@Y}6O4REHh*(K>^MMZ_hrCBj~1yQNR zW2Ui7DUy%N$`Un-o~%=>Ip~SsmoZDKbXD;RRz>-TWu)pN(o_ASI$3(@}g6s)aUVR&` zu+;vNU%S_?sbK~x!NU{t3apENQ7sZ#i;GjrN`GwNlG0pokLzrGf62%8&J8u59Zhar zyivDQv&-}5tX}zLC1Yp*UjH=Z9@IwYZPjA0Mu$a>>HSB2>eeYa)}m5;q9ZE3wD^lU zvyqyVDMKzRAYX?Afb?`*9S3i3(^)CH*tEm24$GxaaC7Ec{ekYAXc zyA2DjKq4l|+`_C9YrZvyXWsCHnbRdNzsM(Qs1xN($jw5BibBU~6`P-zGv4-uMW;*d zwlC|V;2C(LPYu68^ZYY3PgSFXl1glTVTn~u!=)}j&0klAv^dm@i%-u;OBpN)YAtwB zc0qRj)EBMMO2H>s3rbT)!xii8DGJ_7J^f2%Ue~cZ=~4hZY37t6`MK;esEO&Rt|PBB zvgiycLR@2FMH!N(xYo=TWJrPHRXg@^2BzCIdv+Q(imUC}ZEn{(GRFaukGR2^MGOFw z8%r4=1tk@@sR`R*a5ZZCZFOb~jppNjYLPXzFxNWIU5#wvgM_ye8f-$*4G-1YirCXb zQY$gXm;F9K3JH5LK(%`*Ln_@`lwFJ!D;En;QFKAB(i?gPvi6x$Q}L@{mX(RQ=vWAw zmMH}UMuyfu2)W8H%eCh6(Xy$9YV{}Pa};Av(~|v=i8AFzu&PYSzwgObYPb^>6c$g& z&d+<%Iw&boc~E3zeS*b>lN)m0GD@}DDFbpqiM3dXoZgmY4V2o5rES^rfymXy9;|$z zSNlr`W14?c>m&M+{-|ASu}U-Y_*7^Rf~gn~#B%pEt^y#ZC{BLfj8#tKp`) z@Ls5bv7?w_uoPfBoU4XmF;wnNv+`*+-}?L=N!Eh0`QufagIYw4m+a!Hd=A@OP#*v{ zp@cgmMI}*5)(M42>jE69a1_t)vyev<)mxm{dxIrs@mvYpIT*EBGnsvdOoq%mapr_4%zoxvs!LA&pGi7g)@xq4Y= zsxj>-uK;aVnw6sDVCyWlcZlTW%I2uS&!*c|^Vx4h@W`w4nQ18I?y#k-^-%Z@dsnjo zLy?7V*Rr$2BrkJ(a$H<|uY~0I;&QfbDDwK%CU#&bM$P2S%sfo;XUXR!gZR@H4o!@# zLVZpEyE{U1VFf=(27PQ|bb7jZI~z7kYHHf}d0hlz`+h)b_jd8ryo@P{@mYAzj=lV; z!Q$M5{I{dycT~!%=NlzF*ssjhbjfA6tEn z8zlNi)2+Lz1~kN+{yR75{~5DKwHnY6bECj&hf5y%m6C`%3~YIpTTj zvOo!7S-d90i&fw?DZV+0?HeftxM*HfZ*53x;dFKv4-vnb#q6>r4;QyNJc0#nRyX|{ z=du^F(POjbvJu%B5|ih%m$Km!U0cjv&qfz}c?H{^n0w|#%rNGK(-7)X5;iE7czVGmgqcFQ??`MCFLiY$e!hCa(*~`aR*Br^qKl7A& zm$N$A@Ueg~m!*uI4rf_O4!ZxhU$NJ6FhrBSVS72B{f1oud&PfOpIK$*%}Pj)O&kyx zf9`u0n2RML?;Puvi_wyMfep)$6nWGh(u^HI7^J>IFadBBe4rXT_C-8x4ZD^IrioyO_GkH2_ zaG%37!;4M1!SR`4Z8SGHA#Kcd@P~`Db4s&f(~3r^W;N+vnA|QY7UySo229{lT%H*Y zzsL=)&kQ@}a)Vo)C+5AF-L^`et}7OEt2;fL7GGb?yho#Me_hOajF#No%9p4yRL90? zDJKusf1>2#I$woGH!oYtmf>dGrMeJ_N((crQ%c`mrrd_yWas8)VXE7x7(6jrxj|XJ z5|{Hho~R(}l)MsDD(3IfLd3n*5WwT|ohO2l;ZC1f!SC=!btwUSTbx@~Z2d&Gsdh`f zy$Dq{wew2VYEtu{tPbg`RGUGu@eck-vH1Kw&371&=!-V5dz6yo)Ynz3S~pp%Ir)

z)Bt76omM#cS;)=x?4_|%aGOgT)ELIPoj>+(KYqwf0q8whbxU8vrr7ooJ2O^t z6*qsxe!+vq+;V2f!(MX9X4WPTLojGNOXa_#4zi*=sf8`zOP*998YeEMcYFr+KdJpr zKQpDPCewGS$&-6@@D2D{&+9oZyEHq^np0Su+rKV`j>kxd)1FsvFmvP{B%f!RH8ygm zE6J*zP}u1_^B;$tCY)zI$4MbxgX?11@mtk}ox7oV=h^geQdr8mAJvo{u+PfQ#pz~j z7GHI&#qBQDXB(TWWOT%YxGg``o76)SM1EXnQk(H~CA%{YPV}lP%rsu|X@2u2zaa>< z(Qw22w^UPo_ilezVHQ{<`FOqXNDWkbC6Y%mM_G&CuU3+E8Tc0u4#wK74h_3n4cjyx zv(k&iPLG#7J#L8ns~I5;5n?5UmBjVGn^g#!hdrpD(b)6Z(I0#8?8)ACtLk-4e z-&wuc-3cgd@4h@<(}s9!k`z`-D^5sd-3k!tP&zj@YlvhwP+_$avj(f6lp}J83cN-< zIt=B|vf;KVBNSF^GCo@kRJ+Ok98M8xO|HmQpy9rlaVj_JGf|~#e5EFn%T!Quuy2|Q zJO`rxEViyt@^fx6hZ|cpr1)SiJ6(ucSh0}ZEtEW+tCsNa)(zo3S1_L* zYL-=migxxHY{Vnq^MvAWIx&4I(d%DWXP2mGB^1zM_f&XdX_<|ht z)iIZqaJDr=^3~s{U0%|y z#W-PlVRc(xkU_}OjpRGZpo zUr?wgPRMaH-iN_g&Bh^mc3vKvJ_)C6S4w#7o^VI%R;yGTpYz6UI#ms*ucu9~sNCSV zV)fyNq39Ij&n$R8ZrKvf(eRjJ3yY@mQ_s(raZ60y^!#`wr&#i6GS_{wwB3EO-aFd+ ze0ToEKNF2Eo{*J2DZ3!YswKXm-#m`>-J$pK?EVrDHz?r~vhxbGG#a4^v)POtdVjI+ z+*P0JJ=teF^mu9emZGoj(0hwpKZcGHukv4>Eb()gJjxY4lk18t>AUql;^nW|>$~*6F0AK1y(dW5Wt8Xs)`LnP0>YIq6{_OEyeTdk?p9Sti z0aN{XBH?02ILq6I_-mT7#hhnEux*^*j$l9R!^3vBW{>yj1H~h4ncsf!<+iN*etnRb z-kD{C!wNd{T-(>bDNc)zO-YMOf36b7bY&a%BZ-&0vZMQvh4;I%Tm1Ls80K_9AK>sw zFP?-WPl8WaENGA3UGz<00}&{0?8~McK>imbv32+zGBt%qZg?|2AR{3$T~FzFm4%a@ z1!+nZ3h(J$StS~#I|5o>o)-%k+P z%!7JgW3bR)xGO|c@b(P{^@lY0)Wo@}AM6u_yR<^Qi`b)t?7IJ=>1E*) zf#rUqk8t^06rRBLcfZm9;4WUK?K6MV=eP3;h>uqLeFj@&^hp6@LuTc;R3<6qAc)T=$lP(fvwR3i*C5a9vz-Bvi00KWom zfntWX5hxHmA3PX3HWGUQ@KSII^uQkQQo%SirI(>KDFUqkYtXUVLc8}D=oZ)=+y#2( zNSrHTjvp-Ah_(PaXA3k1h7pL651lXyk-%2)H0XP~1zG^!gN_%nM99#`9f{y$`phIA6{b(fg^^*eq0LE^QJiZj@{nG;70lV5@I01OAqev1y33?d0 zJObScCzS8uLjn>WIt;qkFp-=rLQ6Kde_Gy4FKCV!0;#F_-2ucVAu@SY!Rvd9+BpN?}2ASA3Y$_ zEwCeU{Sdm(QIXsoh{C}Wq1kbfx`Eq+Pe8wLLZozX40r_ec3k7Z@!%hz!*Dz}(E;tB z0Ye|a(la8>LxddgKIm`GiL@5{GPoA{=?@}(3tj|n{i8@1aoqyTVC@Bwez=HFCxPDp z>n@4350@DqfOs2x51Rdq41;+y?SWo#88zgH_TLV}j#`m&G#Yx-31b|*7}{N{q3^-h z!7o4`(QD{3_%Zk{^h*Y8{GIXo5Y6@x^buTUum*e|x`|Okj$q!btsONayJ~0**c-eH zTI;5vc{UjQVQ2wJ#I+P01bz|vFs_y0Q1GA7-QAHva5y**`cqu*fLnkcd1>gPuZF$_ zcLrhw?2A=>sViD1&;{&1=_*3Nkd661YoRphF**76gU`+PZ-hI3JrY+ZUbHo{qkq1a&Q;$c4+G^4e30H zQot*rhws%;JMds|A@sHV`1=yzF<^%SXdYZy;5={%v~3O6+FTfp!SE%t501WqJ<%yK zne>I0{j{_JJOR7|dIkP|$s#YJGVpHbNr75g2eyG*;MC}8q?WFMUk1lTX~_;t>jUr` z-~?!GXDtPI<8P9Hdv?~^=&P<;>IB197^s_;R`=9W3V0XzYv`46TAB{t2R;aG!CJft zd>q^hx+FnM-+@np--P}pQA@YL-+_H`l+-s_ORhfXbl@`RS2DHK9DD`*aVF;9<5;|3 zh2eJ?s-W#~X0!$T2e=FLd2G+Nf$j0>EW>CmEzZMVaKT5K0>FEqo0VuO9NY^$1bW1?fx&qf3FuqMmwi|#5 zcn{}b2*doI2OSRYprt=D0M3Q(c|uFygZF`7g09A5-y;CaDW=8u?E=FTM96@iqtVeu@Lcc_ z=wA&wItgA04mavZ3uobX@Q2`T&>D9gIRz0N1$T$`^w&`w_-AlB^alYtnhd@Hz6!mf zsg4$bJ^B297!cJ?M;Bq}gayJ1{eBF-FB*)+2>cWDm}DI-2G0i{NWq8J^L6wy_&0C| z=zEKFG$RC4H`a$kI-jK68#AN3~Vw>^sS>r z?oH9_!A|&-Jl-A>Wq_Z82SShalSl^J!Z3fY2doH@=qnidfxm{H+gu{2X7FafAGegK z=L-^Lf!Bfypijn1v;}+-TmyZypF}>*u{we^i4p~*Ni+!TkLh_Jbi_c3R)IT%tBbL5?(ZTA#~M`5_N2a_U{41&5IHhUYDq> z6-ozQ1093E267m@6kGt^KK(*h2J5M_tqtEqz^M$;)0@rplnm|(z5wmjQ&023i@+(+RoH_2 zMG|cQ2lmFFRZ7-VKkzr;AndsJrRr%p_&QkXucyNqdfEaOFn#|4T{uEd--BC&S3#e( z>d6)mg{2e*(`Y?iU8JX6@Dp&`#d=!unw|!<#oCYg`!MwWxAgQ8I3D}}y4MGKIs={n zo&?w%Mx6x!6w!-ksXL_2rLr-(S zyTKnr&)B7>H^9fiA3`tOjYPm_!F!-b9@NtTFkfI~=);HgbPsI8{QnqQdsI&@?TMVh z-Jk~?(^D|m8$1WPAOA~Lkua3OF#D38vVKLIfoFi1KEd`U&VuNRBj6)@TFWcmc~XrtfxR3^d5L!azx# zFzhh>u7@k@cf>#yozbH)-S&q5FRrMrm@2{Rjv7dR!9cyhUxF_{->x>0*bSW+)9-)( zGEg^nBOM2S3U>A|(lI!bi@KwOgGV$m(i2=y!S}$;;7HoS@sGI&h9C@y(5sr^0~g?j z;8W0hB8=n%7BJoZ3Z2o)NKs$|xE$YI>lbCDOt2$(3iKpgqrgt!H=wVzGty|VE7-5S zku05zR16LPx9()L(J8pA^I-^r;cyQlRrWN}XW*t_6I|8s7$fY63?2ZzE!Ifig1dqj z4K~t|A$Vv{bV~3Y=r7^T&Ib1fKZH)nGSVC1A>c{SAB@BW9tHj=$7ZDExkfk|MB`xi zY`l>o3ytIwjcpcq81$qfBee#<47Q(Tq%>R=;5pz0(2HL&(oXPv@L}j9b8vwdga3l= z^Qw`)0xttkf!547(s}T^;LbL{-UUW_1j7~>Zb7eIW+X!l+8BHadKg0nz<0naq2GMN zNW;PIK|~whGScLAxCa~n-T-|FR|Pm2y!Atrb~Bm*+y{ISI`A_i`NpC@fNeto58$vz z!|(|VO%EGs|2ZS=0!IgUjld?*AW;p5#a#zNn9tugTR8pL>63Uz(c@s z&?&gS1rGyHg-$k`=m&5Kcph{M2NOL7F9i>Tc5^aO(_ZM1;4aV$aCHW+4Y8rx0pmPO z6b-{RL^$ndqL2Jdv;n*a{5|yW2or4q*MJv8{~2i_pWbk(Ly5eiOcd0`L|wt1z`dZq zh%?d4;0fTT(A|5R=sWOa@L1@KJ|?;be#r)dM}mn8`s3?tFuVtrp(`^@)T0l)A09r? zM8}4iXfpUJ_)HEy1~}eCm%#ckqF13mDK?Q;0#Qrwuh1dWOq2wU1rLJ$YbHJn1Re&i zm}R2W`6gNcw!I8P86ae-iN1zm1HS?K;(zcL%le{6gCkxyk?U&I68I!I8rr%6uVTPY z!SkRmU<-5%+@c9iJvO62pP0z0A7(l5JJ6onO%w)>1t&pQe{P~q{m}jyFg)F5qQOT@ zGzt-31}}uZeiBsMh)W&DnfODXiN@lWwH-Ha8 zZ?iMgF7R>iatAZnd*I_>$r!TWNa$%kW^6X#urx)Vf?nrqred%e{4KPbznNYFbGIxF z`@M%v%(UJHLpK<_!p(H5rI{+h*DIkSt7I;oqGmYEf?aW9^lj9Z0IQ~%=9VvKG^OxGc8(+45y*PHpe*<^bDL} z4Fz`se*!I(n`tpP5!?ZK!zX4NZGa&ghEWw}GVC_faqvQL3+QVHP{rw(<-pzt&D8t2 znc~4`z_(8z{?}$&3%<+aL$^9-rtiU)7DS_=XWrS`DUVpz#(B4%Coh!&|nx+VORv+sjY=x2bX~_x3|!5 zT`hDUyb5gJ%|e}HEYxx!#xS^DtOc{C1@1H!F7OTLZ;~xk4897UpJE}OGz*;o{{rp~ zZ60Ewb6}SU%oWhK@L?A68ieH+hA(m~^rh88ncy(6ZnTA@u@)KyZU*iQJr7p_xFvW8 zbjR@)Dg*ZbXG6c1Z^2OxWtaI*r7jV?^GPz4NAU@%X{ z4bv_3J9sttd+3j5q8bOo&j$z1u~6ka3ylMR3-*|Ap*;&Nvl~wH8Vpf((Mchn}yM{cS zu`L7Nhn|X)&`sdaJ7E6*3@|%Ti!lLjru7knK03HJBj1)~JuE=?P4O_%ZmG?9L%iTd`%TS{;u^b9y0Y5m}{f%iaff&=klBHT6bedt4WW@?uN zCljo-H&Y1K`x@|j;PKFTxRxj5`~X}Iy%Ed?_=;I=mA(A|C@%T8|}Ul`ahSJ-imfazGBD!@I#yP$hxF-p(Gya1jJ-3N=$1#o}x7toc-78)@S z+cIz<7Mr$MOAdjDfY(BQimAKRAPiIR1L)(Js{0K_T3~6Bh4wDN{QnsYOJI1q#6q(- zS?DY9D)0g5RLqQ@55dd_{txu`nE94tX8a876=_Evn3!f`<~s^bhSvRQN82zF{R)nT zHa)eYa?B&t1ye8dD9j_(;AUVM`p((yo`Vbz*0&1{G!TY2VTd;TNZj}U@3W8?>h9T( z#Elm^vgp4IF18CD4dl{Ejf9*u{7Bq5vzr=F(qKlxxiP7y8t`i40B(FGRt;FwIDi|q zcyY!v@>$~mZM+Q+>7|AoZydsnA-&ar9~%d7XF(O+H*wQ$F8~-y(4cOl}fE#;YLgh)}y==pe z#EnH`)PT#41B%9=5e|=2L+&>Y;l?Es)Buy%kQ7PW*r`wr2yYy~jR%X=0DQTn;YZ>| zaiSWK(Kvt`ZPvPwag9T`F|Sy?Wk%xwZroBAu&QwYH;yh<@A#;305@)%tOo3C9KelB zrm^fAG{TZ;7%sSY&Eb7(!;i#`F*DSF+l>Rbu^N@f@4y!`8-65iG|W;1@Zz)KN8-la lbpcHq2kf5ZXP`@Xx69M&(l~@0-`vX_YYo2I4o3|1{{X)q-x2@- From 2a8d3f8b330561f2826b88ff03411def4069aa72 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 10 May 2015 11:46:12 +0200 Subject: [PATCH 13/14] - Bug Fix: Cuando un form tiene AutoCenter, hay veces en que al regenerar el binario y ejecutarlo no se muestra centrado (Esteban H) --- .../FoxPro9_Order_for_Control_Properties.xlsx | Bin 56454 -> 56482 bytes FoxBin2PRGVersionFile.txt | 5 +++-- foxbin2prg.prg | 4 +++- props_all.txt | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Documentacion/FoxPro9_Order_for_Control_Properties.xlsx b/Documentacion/FoxPro9_Order_for_Control_Properties.xlsx index 5297f7406a191b9df2c29ad0a9a74309fc0c39d5..4600209fc783f746af878369c051c9befe4c10cd 100644 GIT binary patch delta 20069 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 G)Bgal(<%P| diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index eb12441..948fbdd 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -3,7 +3,7 @@ Lparameters toUpdateInfo Local lcNote With toUpdateInfo .VersionNumber = 'v1.19.43' - .VersionDate = Date(2015,04,28) + .VersionDate = Date(2015,05,10) .SourceFileUrl = 'http://vfpxrepository.com/dl/thorupdate/Projects/FoxBin2Prg/FoxBin2Prg.Zip' .Link = 'http://vfpx.codeplex.com/wikipage?title=FoxBin2PRG' @@ -17,12 +17,13 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg Change History ------------------------------------------------------------- -2015/04/28 v1.19.43 +2015/05/10 v1.19.43 - Feature: Added new CFG setting "RemoveZOrderSetFromProps" for removing ZOrderSet property when you want to maintain the original class ZOrder always, avoid unnecesary differences and fix some visual on top/on bottom control problems (Ryan Harris) - Feature: Do not allow progressbar window become the default output window of ? command (Lutz Scheffler) - Bug Fix: Fixed VFP9 SP1 validation message - Bug Fix: FoxBin2Prg does not return error codes when called from an external program (Ralf Wagner) - Bug Fix: FoxBin2Prg sometimes generates an OLE error when executed as object more than once on a file with problems (Fidel Charny) +- Bug Fix: When a form have AutoCenter=.T., there are times that when regenerating the binary and executing it does not shows centered (Esteban H) 2015/04/16 v1.19.42 diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 2d0cb57..8d90a0d 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -162,7 +162,8 @@ * 23/04/2015 FDBOZZO v1.19.43 Mejora: Nueva configuración "RemoveZOrderSetFromProps" para quitar la propiedad ZOrderSet de los objetos que cambian constantemente, provocan diferencias y a veces dan problemas de objeto encima/debajo (Ryan Harris) * 23/04/2015 FDBOZZO v1.19.43 Mejora: Hacer que la progressbar no se convierta en la ventana de salida por defecto de los ? (Lutz Scheffler) * 28/04/2015 FDBOZZO v1.19.43 Bug Fix: FoxBin2Prg no retorna códigos de error cuando se llama como programa externo (Ralf Wagner) -* 29/04/2015 FDBOZZO v1.19.42 Bug Fix: FoxBin2Prg a veces genera errores OLE cuando se ejecuta más de una vez en modo objeto sobre un archivo con errores (Fidel Charny) +* 29/04/2015 FDBOZZO v1.19.43 Bug Fix: FoxBin2Prg a veces genera errores OLE cuando se ejecuta más de una vez en modo objeto sobre un archivo con errores (Fidel Charny) +* 10/05/2015 FDBOZZO v1.19.43 Bug Fix: Cuando un form tiene AutoCenter=.T., hay veces en que al regenerar el binario y ejecutarlo no se muestra centrado (Esteban H) * * *--------------------------------------------------------------------------------------------------- @@ -247,6 +248,7 @@ * 23/04/2015 Lutz Scheffler Mejora v1.19.42: Hacer que la progressbar no se convierta en la ventana de salida por defecto de los ? (Agregado en v1.19.43) * 28/04/2015 Ralf Wagner Reporte Bug v1.19.42: FoxBin2Prg no retorna códigos de error cuando se llama como programa externo (Arreglado en v1.19.43) * 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 H 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) * * *--------------------------------------------------------------------------------------------------- diff --git a/props_all.txt b/props_all.txt index 39dfde3..80190cb 100644 --- a/props_all.txt +++ b/props_all.txt @@ -30,7 +30,6 @@ DragIcon TabStyle ShowTips BufferMode -AutoCenter Picture ControlBox Closable @@ -39,6 +38,7 @@ Top Left Height Width +AutoCenter FontBold FontItalic FontName From 8a31aa12e4be816c075f80a9cf2ee8bac30e7864 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 10 May 2015 11:51:49 +0200 Subject: [PATCH 14/14] EXE --- foxbin2prg.exe | Bin 589360 -> 589360 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 69bbcbf7c9db485d97b110b539bb76e804bd65b9..ec7fd27ef5a6c50524d4a6fa1df0826cd70c4261 100644 GIT binary patch delta 8037 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