diff --git a/foxbin2prg.prg b/foxbin2prg.prg index d6a5262..3559f33 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -581,7 +581,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION + [] ; + [] ; + [] ; - + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -680,7 +680,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION c_BackgroundImage = '' l_ClearUniqueID = .T. l_ClearDBFLastUpdate = .T. - l_OptimizeByFilestamp = .F. + n_OptimizeByFilestamp = 2 l_MethodSort_Enabled = .T. && Para Unit Testing se puede cambiar a .F. para buscar diferencias l_PropSort_Enabled = .T. && Para Unit Testing se puede cambiar a .F. para buscar diferencias l_ReportSort_Enabled = .T. && Para Unit Testing se puede cambiar a .F. para buscar diferencias @@ -1072,11 +1072,11 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDPROC - PROCEDURE l_OptimizeByFilestamp_ACCESS + PROCEDURE n_OptimizeByFilestamp_ACCESS IF THIS.n_CFG_Actual = 0 OR ISNULL( THIS.o_Configuration( THIS.n_CFG_Actual ) ) - RETURN THIS.l_OptimizeByFilestamp + RETURN THIS.n_OptimizeByFilestamp ELSE - RETURN NVL( THIS.o_Configuration( THIS.n_CFG_Actual ).l_OptimizeByFilestamp, THIS.l_OptimizeByFilestamp ) + RETURN NVL( THIS.o_Configuration( THIS.n_CFG_Actual ).n_OptimizeByFilestamp, THIS.n_OptimizeByFilestamp ) ENDIF ENDPROC @@ -1532,7 +1532,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION * NOTA: Si en vez de '1' se indica un Path (p.ej, el del proyecto, se usará como base para recompilar * tcExtraBackupLevels (v? IN ) Indica la cantidad de niveles de backup a realizar (por defecto '1') * tcClearUniqueID (v? IN ) Indica si se debe limpiar el UniqueID ('1') o no ('0' ó vacío) - * tcOptimizeByFilestamp (v? IN ) Indica si se debe optimizar por filestamp ('1') o no ('0' ó vacío) + * tcOptimizeByFilestamp (v? IN ) Indica si se debe optimizar por filestamp mayor o igual ('1'), solo igual ('2') o no optimizar ('0' ó vacío) * tc_InputFile (v! IN ) Nombre completo (fullpath) del archivo a convertir o nombre del directorio a procesar * tc_InputFile_Type (@? IN ) Tipo de archivo de entrada: (D)irectory, (F)ile, (Q)uerySupport * toParentCFG (@? IN ) (Uso interno) Si se pasa un valor, el nuevo CFG copiará primero sus valores de aquí para heredarlos @@ -1771,7 +1771,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION CASE LEFT( laConfig(I), 20 ) == LOWER('OptimizeByFilestamp:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 21 ) ) - IF NOT INLIST( TRANSFORM(tcOptimizeByFilestamp), '0', '1' ) AND INLIST( lcValue, '0', '1' ) THEN + IF NOT INLIST( TRANSFORM(tcOptimizeByFilestamp), '0', '1', '2' ) AND INLIST( lcValue, '0', '1', '2' ) THEN tcOptimizeByFilestamp = lcValue .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > OptimizeByFilestamp: ' + TRANSFORM(lcValue) ) ENDIF @@ -1918,8 +1918,8 @@ DEFINE CLASS c_foxbin2prg AS SESSION IF ISDIGIT(tcExtraBackupLevels) lo_CFG.n_ExtraBackupLevels = INT( VAL( TRANSFORM(tcExtraBackupLevels) ) ) ENDIF - IF INLIST( TRANSFORM(tcOptimizeByFilestamp), '0', '1' ) THEN - lo_CFG.l_OptimizeByFilestamp = NOT (TRANSFORM(tcOptimizeByFilestamp) == '0') + IF INLIST( TRANSFORM(tcOptimizeByFilestamp), '0', '1', '2' ) THEN + lo_CFG.n_OptimizeByFilestamp = INT(VAL(tcOptimizeByFilestamp)) ENDIF .l_Main_CFG_Loaded = .T. @@ -1946,7 +1946,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION .writeLog( C_TAB + 'n_Debug: ' + TRANSFORM(.n_Debug) ) .writeLog( C_TAB + 'n_ExtraBackupLevels: ' + TRANSFORM(.n_ExtraBackupLevels) ) .writeLog( C_TAB + 'c_BackgroundImage: ' + TRANSFORM(.c_BackgroundImage) ) - .writeLog( C_TAB + 'l_OptimizeByFilestamp: ' + TRANSFORM(.l_OptimizeByFilestamp) ) + .writeLog( C_TAB + 'n_OptimizeByFilestamp: ' + TRANSFORM(.n_OptimizeByFilestamp) ) .writeLog( C_TAB + 'l_DropNullCharsFromCode: ' + TRANSFORM(.l_DropNullCharsFromCode) ) .writeLog( C_TAB + 'l_ClearDBFLastUpdate: ' + TRANSFORM(.l_ClearDBFLastUpdate) ) .writeLog( C_TAB + 'c_Language: ' + TRANSFORM(.c_Language) ) @@ -2173,7 +2173,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION * tcNoTimestamps (v? IN ) Indica si se debe anular el timestamp ('1') o no ('0' ó vacío) * tcBackupLevels (v? IN ) Indica la cantidad de niveles de backup a realizar (por defecto '1') * tcClearUniqueID (v? IN ) Indica si se debe limpiar el UniqueID ('1') o no ('0' ó vacío) - * tcOptimizeByFilestamp (v? IN ) Indica si se debe optimizar por filestamp ('1') o no ('0' ó vacío) + * tcOptimizeByFilestamp (v? IN ) Indica si se debe optimizar por filestamp mayor o igual ('1'), solo igual ('2') o no optimizar ('0' ó vacío) * tcCFG_File (v? IN ) Indica si se debe usar un archivo de configuración distinto al predeterminado *-------------------------------------------------------------------------------------------------------------- LPARAMETERS tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDebug, tcDontShowProgress ; @@ -2269,7 +2269,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION .writeLog( C_TAB + 'tcNoTimestamps: ' + TRANSFORM( EVL(tcNoTimestamps, '(empty) -> Will use Default [' + TRANSFORM(.l_NoTimestamps) + ']' ) ) ) .writeLog( C_TAB + 'tcBackupLevels: ' + TRANSFORM( EVL(tcBackupLevels, '(empty) -> Will use Default [' + TRANSFORM(.n_ExtraBackupLevels) + ']' ) ) ) .writeLog( C_TAB + 'tcClearUniqueID: ' + TRANSFORM( EVL(tcClearUniqueID, '(empty) -> Will use Default [' + TRANSFORM(.l_ClearUniqueID) + ']' ) ) ) - .writeLog( C_TAB + 'tcOptimizeByFilestamp: ' + TRANSFORM( EVL(tcOptimizeByFilestamp, '(empty) -> Will use Default [' + TRANSFORM(.l_OptimizeByFilestamp) + ']' ) ) ) + .writeLog( C_TAB + 'tcOptimizeByFilestamp: ' + TRANSFORM( EVL(tcOptimizeByFilestamp, '(empty) -> Will use Default [' + TRANSFORM(.n_OptimizeByFilestamp) + ']' ) ) ) .writeLog( ) *-- ARCHIVO DE CONFIGURACIÓN PRINCIPAL @@ -3211,7 +3211,18 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDIF ENDIF - IF NOT .l_OptimizeByFilestamp OR .t_InputFile_TimeStamp >= .t_OutputFile_TimeStamp THEN + DO CASE + CASE .n_OptimizeByFilestamp = 1 AND .t_InputFile_TimeStamp < .t_OutputFile_TimeStamp + *-- Optimizado: El Origen es anterior al Destino - No hace falta regenerar + *.writeLog( '> El archivo de salida [<>] no se regenera porque su timestamp es más nuevo que el de entrada.' ) + .writeLog( C_TAB + C_TAB + '* ' + TEXTMERGE(loLang.C_OUTPUTFILE_TIMESTAMP_NEWER_THAN_INPUTFILE_TIMESTAMP_LOC) ) + + CASE .n_OptimizeByFilestamp = 2 AND .t_InputFile_TimeStamp = .t_OutputFile_TimeStamp + *-- Optimizado: El Origen es igual al Destino - No hace falta regenerar + *.writeLog( '> El archivo de salida [<>] no se regenera porque su timestamp es igual que el de entrada.' ) + .writeLog( C_TAB + C_TAB + '* ' + TEXTMERGE(loLang.C_OUTPUTFILE_TIMESTAMP_EQUAL_THAN_INPUTFILE_TIMESTAMP_LOC) ) + + OTHERWISE .c_Type = UPPER(JUSTEXT(.c_OutputFile)) loConversor.c_InputFile = .c_InputFile loConversor.c_OutputFile = .c_OutputFile @@ -24707,7 +24718,7 @@ DEFINE CLASS CL_CFG AS CUSTOM + [] ; + [] ; + [] ; - + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -24743,7 +24754,7 @@ DEFINE CLASS CL_CFG AS CUSTOM l_NoTimestamps = NULL l_ClearUniqueID = NULL l_ClearDBFLastUpdate = NULL - l_OptimizeByFilestamp = NULL + n_OptimizeByFilestamp = NULL l_RedirectClassPerFileToMain = NULL n_UseClassPerFile = NULL l_ClassPerFileCheck = NULL @@ -24784,7 +24795,7 @@ DEFINE CLASS CL_CFG AS CUSTOM .l_NoTimestamps = toParentCFG.l_NoTimestamps .l_ClearUniqueID = toParentCFG.l_ClearUniqueID .l_ClearDBFLastUpdate = toParentCFG.l_ClearDBFLastUpdate - .l_OptimizeByFilestamp = toParentCFG.l_OptimizeByFilestamp + .n_OptimizeByFilestamp = toParentCFG.n_OptimizeByFilestamp .l_RedirectClassPerFileToMain = toParentCFG.l_RedirectClassPerFileToMain .n_UseClassPerFile = toParentCFG.n_UseClassPerFile .l_ClassPerFileCheck = toParentCFG.l_ClassPerFileCheck @@ -24888,7 +24899,8 @@ DEFINE CLASS CL_LANG AS Custom C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC = "" C_OUTER_MEMBER_DOES_NOT_MATCH_INNER_MEMBERS_LOC = "" C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC = "" - C_OUTPUTFILE_NEWER_THAN_INPUTFILE_LOC = "" + C_OUTPUTFILE_TIMESTAMP_NEWER_THAN_INPUTFILE_TIMESTAMP_LOC = "" + C_OUTPUTFILE_TIMESTAMP_EQUAL_THAN_INPUTFILE_TIMESTAMP_LOC = "" C_PRESS_ESC_TO_CANCEL = "" C_PROCEDURE_NOT_CLOSED_ON_LINE_LOC = "" C_PROCESSING_LOC = "" @@ -25000,7 +25012,8 @@ DEFINE CLASS CL_LANG AS Custom .C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC = "La classe externe ne correspond pas à la classe interne" .C_OUTER_MEMBER_DOES_NOT_MATCH_INNER_MEMBERS_LOC = "L'élément extérieur ne correspond pas aux éléments intérieur" .C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC = "Optimisation: fichier de sortie [<>] ne était pas écrasé parce que ce est la même que celle générée." - .C_OUTPUTFILE_NEWER_THAN_INPUTFILE_LOC = "Optimisation: fichier de sortie [<>] n'a pas été régénéré car il est plus récent que le fichier d'entrée." + .C_OUTPUTFILE_TIMESTAMP_EQUAL_THAN_INPUTFILE_TIMESTAMP_LOC = "Optimisation: le fichier de sortie [<>] pas régénéré en ayant le même horodatage que l'entrée." + .C_OUTPUTFILE_TIMESTAMP_NEWER_THAN_INPUTFILE_TIMESTAMP_LOC = "Optimisation: le fichier de sortie [<>] n'a pas été régénéré car il est plus récent que le fichier d'entrée." .C_PRESS_ESC_TO_CANCEL = "Appuyez sur Esc pour Annuler" .C_PROCEDURE_NOT_CLOSED_ON_LINE_LOC = "Procédure pas fermé. Dernière ligne de code doit être ENDPROC. [<>, Recno:<>]" .C_PROCESSING_LOC = "Traitement du fichier" @@ -25090,7 +25103,8 @@ DEFINE CLASS CL_LANG AS Custom .C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC = "La clase externa no coincide con las clases internas" .C_OUTER_MEMBER_DOES_NOT_MATCH_INNER_MEMBERS_LOC = "El miembro externo no coincide con los miembros internos" .C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC = "Optimización: el archivo de salida [<>] no se sobreescribe por ser igual al generado." - .C_OUTPUTFILE_NEWER_THAN_INPUTFILE_LOC = "Optimización: el archivo de salida [<>] no se regenera por ser más nuevo que el de entrada." + .C_OUTPUTFILE_TIMESTAMP_EQUAL_THAN_INPUTFILE_TIMESTAMP_LOC = "Optimización: el archivo de salida [<>] no se regenera por tener el mismo timestamp que el de entrada." + .C_OUTPUTFILE_TIMESTAMP_NEWER_THAN_INPUTFILE_TIMESTAMP_LOC = "Optimización: el archivo de salida [<>] no se regenera por tener un timestamp más nuevo que el de entrada." .C_PRESS_ESC_TO_CANCEL = "Pulse Esc para Cancelar" .C_PROCEDURE_NOT_CLOSED_ON_LINE_LOC = "Procedimiento sin cerrar. La última línea de código debe ser ENDPROC. [<>, Recno:<>]" .C_PROCESSING_LOC = "Procesando archivo" @@ -25180,7 +25194,8 @@ DEFINE CLASS CL_LANG AS Custom .C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC = "Die äußere Klasse nicht die innere Klassifizierung anzeigen lassen" .C_OUTER_MEMBER_DOES_NOT_MATCH_INNER_MEMBERS_LOC = "Das äußere Element nicht den inneren Elementen entsprechen" .C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC = "Optimierung: Ausgabedatei [<>] wurde nicht überschrieben, da sie dieselbe ist wie die neu generierte." - .C_OUTPUTFILE_NEWER_THAN_INPUTFILE_LOC = "Optimierung: Ausgabedatei [<>] wurde nicht erneuert, da sie neuer ist als die Ursprungsdatei." + .C_OUTPUTFILE_TIMESTAMP_EQUAL_THAN_INPUTFILE_TIMESTAMP_LOC = "Optimierung: Ausgabedatei [<>] wurde nicht verlängert, weil seine Zeitmarke ist die gleiche wie die Quelldatei." + .C_OUTPUTFILE_TIMESTAMP_NEWER_THAN_INPUTFILE_TIMESTAMP_LOC = "Optimierung: Ausgabedatei [<>] wurde nicht erneuert, da sie neuer ist als die Ursprungsdatei." .C_PRESS_ESC_TO_CANCEL = "Drücken Sie Esc für Abbrechen" .C_PROCEDURE_NOT_CLOSED_ON_LINE_LOC = "Prozcedur nicht geschlossen. Letzte Zeile des Codes muss ENDPROC sein. [<>, Recno:<>]" .C_PROCESSING_LOC = "Bearbeite Datei" @@ -25270,7 +25285,8 @@ DEFINE CLASS CL_LANG AS Custom .C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC = "The outer class does not match the inner classes" .C_OUTER_MEMBER_DOES_NOT_MATCH_INNER_MEMBERS_LOC = "The outer member does not match the inner members" .C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC = "Optimization: output file [<>] was not overwritten because it is the same as was generated." - .C_OUTPUTFILE_NEWER_THAN_INPUTFILE_LOC = "Optimization: output file [<>] was not regenerated because it is newer than the inputfile." + .C_OUTPUTFILE_TIMESTAMP_EQUAL_THAN_INPUTFILE_TIMESTAMP_LOC = "Optimization: output file [<>] was not regenerated because it's filestamp is equal than the inputfile." + .C_OUTPUTFILE_TIMESTAMP_NEWER_THAN_INPUTFILE_TIMESTAMP_LOC = "Optimization: output file [<>] was not regenerated because it's filestamp is newer than the inputfile." .C_PRESS_ESC_TO_CANCEL = "Press Esc to Cancel" .C_PROCEDURE_NOT_CLOSED_ON_LINE_LOC = "Procedure not closed. Last line of code must be ENDPROC. [<>, Recno:<>]" .C_PROCESSING_LOC = "Processing file"