From e8bda850202dd2709ac12a06b509a24d8bacad13 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Tue, 20 Jan 2015 19:56:04 +0100 Subject: [PATCH 001/123] =?UTF-8?q?Changeset:=20641=20-=20Agregada=20valid?= =?UTF-8?q?aci=C3=B3n=20de=20versi=C3=B3n=20SP2=20de=20runtime=20FoxPro?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index b04f0e4..9f219d5 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -131,6 +131,7 @@ * 07/01/2015 FDBOZZO v1.19.40 Mejora scx/vcx: Detección de nombres de objeto duplicados para notificar casos de corrupción * 13/01/2015 FDBOZZO v1.19.41 Bug Fix scx/vcx: Detección errónea de estructuras PROCEDURE/ENDPROC cuando se usan como parámetros en LPARAMETERS (Ryan Harris) * 13/01/2015 FDBOZZO v1.19.41 Bug Fix db2: Detección errónea de tabla inválida cuando el tamaño es inferior a 328 bytes. Límite mínimo cambiado a 65 bytes. +* 20/01/2015 FDBOZZO v1.19.42 Mejora: Validación de versión de Visual FoxPro, para evitar problemas ajenos a FoxBin2Prg * * *--------------------------------------------------------------------------------------------------- @@ -1913,6 +1914,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM * EXIT *ENDIF + IF VERSION(5) < 900 OR INT( VAL( SUBSTR( VERSION(4), RAT('.', VERSION(4)) + 1 ) ) ) < 5815 + ERROR "Incorrect VFP 9 version - Missing SP2! (" + VERSION(4) + ")" + ENDIF + *-- Determino el tipo de InputFile (Archivo o Directorio) IF EMPTY(lcInputFile_Type) AND NOT EMPTY(tc_InputFile) IF ADIR(laDirInfo, tc_InputFile, "D") = 1 AND SUBSTR( laDirInfo(1,5), 5, 1 ) = "D" THEN From c9687a2f4eff7a0298a707d2eb41bfe743018218 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 22 Jan 2015 21:41:17 +0100 Subject: [PATCH 002/123] Changeset: 642 - Bug Fix: Compatibilidad con SourceSafe rota porque se genera un error al realizar la consulta para soporte de archivo (Tuvia Vinitsky) --- foxbin2prg.prg | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 9f219d5..50fc0d7 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -412,14 +412,15 @@ LPARAMETERS tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDeb *-- FileTypes for ADIR() #DEFINE C_FILETYPE_DIRECTORY "D" #DEFINE C_FILETYPE_FILE "F" +#DEFINE C_FILETYPE_QUERYSUPPORT "Q" *-- Fin / End LOCAL loCnv AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' LOCAL lnResp, loEx AS EXCEPTION *SET COVERAGE TO c:\desa\foxbin2prg\foxbin2prg_coverage.log -*SYS(2030,1) -*SYS(2335,0) +*SYS(2030,1) && Enable system component debugging +*SYS(2335,0) && Unnatended server mode *IF PCOUNT() > 1 && Saltear las querys de SourceSafe sobre soporte de archivos * SET STEP ON * MESSAGEBOX( SYS(5)+CURDIR(),64+4096,PROGRAM(),5000) @@ -1304,7 +1305,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM * 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) * 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 o (F)ile + * tc_InputFile_Type (@? IN ) Tipo de archivo de entrada: (D)irectory, (F)ile, (Q)uerySupport *-------------------------------------------------------------------------------------------------------------- LPARAMETERS tcDontShowProgress, tcDontShowErrors, tcNoTimestamps, tcDebug, tcRecompile, tcExtraBackupLevels ; , tcClearUniqueID, tcOptimizeByFilestamp, tc_InputFile, tcInputFile_Type @@ -1327,14 +1328,19 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- Determino el tipo de InputFile (Archivo o Directorio) IF EMPTY(tcInputFile_Type) AND NOT EMPTY(tc_InputFile) - IF ADIR(laDirInfo, tc_InputFile, "D") = 1 AND SUBSTR( laDirInfo(1,5), 5, 1 ) = "D" THEN + DO CASE + CASE LEN(tc_InputFile) = 1 + tcInputFile_Type = C_FILETYPE_QUERYSUPPORT + + CASE ADIR(laDirInfo, tc_InputFile, "D") = 1 AND SUBSTR( laDirInfo(1,5), 5, 1 ) = "D" tcInputFile_Type = C_FILETYPE_DIRECTORY - ELSE + + OTHERWISE tcInputFile_Type = C_FILETYPE_FILE - ENDIF + ENDCASE ENDIF - IF .l_AllowMultiConfig AND .l_Main_CFG_Loaded AND NOT EMPTY(tc_InputFile) THEN + IF .l_AllowMultiConfig AND .l_Main_CFG_Loaded AND NOT EMPTY(tc_InputFile) AND NOT tcInputFile_Type == C_FILETYPE_QUERYSUPPORT THEN *IF EMPTY(tc_InputFile) * ERROR loLang.C_FILE_NOT_FOUND_LOC + ': .c_InputFile = "' + tc_InputFile + '"' *ENDIF @@ -1920,16 +1926,21 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- Determino el tipo de InputFile (Archivo o Directorio) IF EMPTY(lcInputFile_Type) AND NOT EMPTY(tc_InputFile) - IF ADIR(laDirInfo, tc_InputFile, "D") = 1 AND SUBSTR( laDirInfo(1,5), 5, 1 ) = "D" THEN + DO CASE + CASE LEN(tc_InputFile) = 1 + lcInputFile_Type = C_FILETYPE_QUERYSUPPORT + + CASE ADIR(laDirInfo, tc_InputFile, "D") = 1 AND SUBSTR( laDirInfo(1,5), 5, 1 ) = "D" *-- Ejemplo: "c:\desa\" lcInputFile_Type = C_FILETYPE_DIRECTORY - ELSE + + OTHERWISE *-- Ejemplo: "c:\desa\*.scx", "c:\desa\file.ext", (lista de archivos) lcInputFile_Type = C_FILETYPE_FILE - ENDIF + ENDCASE ENDIF - IF EMPTY(tcRecompile) AND NOT EMPTY(lcInputFile_Type) THEN + IF EMPTY(tcRecompile) AND NOT EMPTY(lcInputFile_Type) AND NOT lcInputFile_Type == C_FILETYPE_QUERYSUPPORT THEN IF lcInputFile_Type == C_FILETYPE_DIRECTORY THEN tcRecompile = tc_InputFile ELSE @@ -2171,7 +2182,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDCASE *-- UN ARCHIVO INDIVIDUAL O CONSULTA DE SOPORTE DE ARCHIVO - IF LEN(EVL(tc_InputFile,'')) = 1 + *IF LEN(EVL(tc_InputFile,'')) = 1 + IF lcInputFile_Type = C_FILETYPE_QUERYSUPPORT *-- Consulta de soporte de conversión (compatibilidad con SourceSafe) *-- SourceSafe consulta el tipo de soporte de cada archivo antes del Checkin/Checkout *-- para saber si se puede hacer Diff y Merge. From 5d0c2c9f97630ac44776ecbc1454f8b21a5223b4 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 23 Jan 2015 23:02:38 +0100 Subject: [PATCH 003/123] =?UTF-8?q?Changeset:=20643=20-=20Agregada=20infor?= =?UTF-8?q?maci=C3=B3n=20de=20log=20para=20saber=20si=20se=20est=C3=A1=20u?= =?UTF-8?q?sando=20la=20compatibilidad=20SourceSafe=20y=20el=20tipo=20de?= =?UTF-8?q?=20operaci=C3=B3n=20en=20curso?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 260 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 171 insertions(+), 89 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 50fc0d7..34d262e 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -1921,7 +1921,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *ENDIF IF VERSION(5) < 900 OR INT( VAL( SUBSTR( VERSION(4), RAT('.', VERSION(4)) + 1 ) ) ) < 5815 - ERROR "Incorrect VFP 9 version - Missing SP2! (" + VERSION(4) + ")" + ERROR C_INCORRECT_VFP9_VERSION__MISSING_SP2_LOC ENDIF *-- Determino el tipo de InputFile (Archivo o Directorio) @@ -2318,16 +2318,17 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM EXIT CASE EVL(tcType,'0') <> '0' AND EVL(tcTextName,'0') <> '0' - *-- Compatibilidad con SourceSafe - - IF NOT tlGenText - *-- COMPATIBILIDAD CON SOURCESAFE. 30/01/2014 + *-- COMPATIBILIDAD CON SOURCESAFE. 30/01/2014 + IF tlGenText + .writeLog( '> ' + loLang.C_SOURCESAFE_COMPATIBILITY_MODE_LOC + ': ' + loLang.C_BINARY_TO_TEXT_LOC ) + ELSE *-- Create BINARIO desde versión TEXTO *-- Como el archivo de entrada siempre es el binario cuando se usa SCCAPI, *-- para regenerar el binario (tlGenText=.F.) se debe usar como *-- archivo de entrada tcTextName en su lugar. Aquí los intercambio. tc_InputFile = tcTextName .l_Recompile = .T. + .writeLog( '> ' + loLang.C_SOURCESAFE_COMPATIBILITY_MODE_LOC + ': ' + loLang.C_TEXT_TO_BINARY_LOC ) ENDIF ENDCASE @@ -2409,12 +2410,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM DO CASE CASE lnCodError = 1799 && Conversion Cancelled MESSAGEBOX( loLang.C_CONVERSION_CANCELLED_BY_USER_LOC + '! [p:' + TRANSFORM( THIS.n_ProcessedFilesCount ) + ']', 0+48+4096, 'FoxBin2Prg', 60000 ) - THIS.writeErrorLog_Flush( ) loWSH.Run( THIS.c_ErrorLogFile, 3 ) CASE THIS.l_Error MESSAGEBOX( loLang.C_END_OF_PROCESS_LOC + '! (' + loLang.C_WITH_ERRORS_LOC + ') [p:' + TRANSFORM( THIS.n_ProcessedFilesCount ) + ']', 0+48+4096, 'FoxBin2Prg', 60000 ) - THIS.writeErrorLog_Flush( ) loWSH.Run( THIS.c_ErrorLogFile, 3 ) OTHERWISE @@ -2445,6 +2444,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- Escribo la información de error en la variable log de errores THIS.writeErrorLog( REPLICATE('-', 100), 1 ) + THIS.writeLog( tcErrorInfo ) THIS.writeErrorLog( tcErrorInfo ) THIS.writeErrorLog( ) @@ -22139,87 +22139,81 @@ DEFINE CLASS CL_LANG AS Custom n_LanguageSelectedMethod = 0 && 0=Automatic by version(3) - *CASE tcLanguage == '00' && English (Inglés) - *------------------------------------------------------------------------------------------------------------------------------------------- - *-- NOTE: MUST USE DOUBLE QUOTES, OR SYNTAX ERRORS HAPPEN WHEN COMPILING. STRANGE :( - *------------------------------------------------------------------------------------------------------------------------------------------- - 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" - C_BACKUP_OF_LOC = "Doing Backup of: " - C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC = "Cannot generate file [<>] because it is ReadOnly" - C_CLASSPERFILE_OPTIMIZATION_BASE_ALREADY_PROCESSED_LOC = "OPTIMIZATION: Base File [<>] already processed, skipping processing of file [<>]" - C_CONFIGFILE_LOC = "Using configuration file:" - C_CONVERSION_CANCELLED_BY_USER_LOC = "Conversion Cancelled by the user" - C_CONVERT_ALL_FILES_IN_A_PROJECT_LOC = "Convert all files in a Project" - C_CONVERT_FOLDER_LOC = "Convert Folder" - C_BINARY_TO_TEXT_LOC = "Binary to Text" - C_TEXT_TO_BINARY_LOC = "Text to Binary" - C_CONVERT_FOLDER_NONE_LOC = "None" - C_CONVERT_FOLDER_QUESTION_LOC = "What conversion should be performed on the files of this folder?" - C_CONVERTER_UNLOAD_LOC = "Converter unload" - C_CONVERTING_FILE_LOC = "Converting file" - C_DATA_ERROR_CANT_PARSE_UNPAIRING_DOUBLE_QUOTES_LOC = "Data Error: Can't parse because of unpaired double-quotes on line <>" - C_DUPLICATED_FILE_LOC = "Duplicated file" - C_DUPLICATED_OBJECT_LOC = "Duplicated Object" - C_ENDDEFINE_MARKER_NOT_FOUND_LOC = "Cannot find end marker [ENDDEFINE] of line <> for ID [<>]" - C_END_MARKER_NOT_FOUND_LOC = "Cannot find end marker [<>] that closes start marker [<>] on line <>" - C_END_OF_PROCESS_LOC = "End of Process" - C_ERROR_LOC = "ERROR" - C_ERRORS_FOUND_IN_FILE_LOC = "ERRORS FOUND IN FILE" - C_EXTENSION_RECONFIGURATION_LOC = "Extension Reconfiguration:" - C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES_LOC = "External class count (<>) does not match found classes (<>) for file [<>]" - C_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC = "External class was not found" - C_EXTERNAL_PARAMETERS_LOC = "EXTERNAL PARAMETERS" - C_FIELD_NOT_FOUND_ON_FILE_STRUCTURE_LOC = "Field [<>] not found in structure of file <>" - C_FILE_DOESNT_EXIST_LOC = "File does not exist:" - 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_JUST_VFP_9_LOC = "FOXBIN2PRG is only for Visual FoxPro 9.0!" - C_FOXBIN2PRG_WARN_CAPTION_LOC = "FOXBIN2PRG: WARNING!" - C_GENERATED_FILE_SIZE_LOC = "Generated file size" - C_GENERATING_BINARY_LOC = "Generating Binary" - C_INCLUDING_CLASS_LOC = "Including class" - C_INTERACTIVE_DIRECTORY_SELECTION_LOC = "Interactive Directory Selection" - C_IS_A_FILE_LOC = "is a FILE" - C_IS_A_DIRECTORY_LOC = "is a DIRECTORY" - C_IS_UNSUPPORTED_LOC = "is unsupported" - C_LANGUAGE_LOC = "EN" - C_MAIN_EXECUTION_LOC = "MAIN EXECUTION" - C_MENU_NOT_IN_VFP9_FORMAT_LOC = "Menu [<>] is NOT in VFP 9 Format! - Please convert to VFP 9 with MODIFY MENU '<>'" - C_NAMES_CAPITALIZATION_PROGRAM_FOUND_LOC = "* Names capitalization program [<>] found" - C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC = "* Names capitalization program [<>] not found" - C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC = "Object [<>] does not contain oReg object (level <>)" - C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC = "Operation not recognized. Only SETNAME and GETNAME allowed." - C_OPTION_LOC = "Option" - C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC = "The outer class does not match the inner classes" - 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_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" - C_PROCESS_PROGRESS_LOC = "Process Progress:" - C_PROPERTY_NAME_NOT_RECOGNIZED_LOC = "Property [<>] is not recognized." - C_READING_CFG_VALUES_FROM_DISK_LOC = "READING CFG VALUES FROM DISK" - C_REPORT_NOT_IN_VFP9_FORMAT_LOC = "Report [<>] is NOT in VFP 9 Format! - Please convert to VFP 9 with MODIFY REPORT '<>'" - C_REQUESTING_CAPITALIZATION_OF_FILE_LOC = "- Requesting capitalization of file [<>]" - C_SCANNING_FILE_AND_DIR_INFO_LOC = "Scanning file and directory information for" - C_SOURCEFILE_LOC = "Source file: " - C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_LOC = "Nesting structure error. ENDPROC expected but found ENDDEFINE on class <> (<>), line <> of file <>" - C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_2_LOC = "Nesting structure error. ENDPROC expected but found ENDDEFINE on class <> (<>.<>), line <> of file <>" - C_UNKNOWN_CLASS_NAME_LOC = "Unknown class [<>]" - C_USING_THIS_SETTINGS_LOC = "Using this settings" - C_WARNING_LOC = "WARNING!" - C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC = "WARNING!" + CR_LF+ "MAKE SURE YOU ARE NOT USING A TABLE ALIAS ON INDEX KEY EXPRESSIONS!! (ex: index on <>.campo tag keyname)" - C_WITH_ERRORS_LOC = "with errors" + C_ASTERISK_EXT_NOT_ALLOWED_LOC = "" + C_BACKLINK_CANT_UPDATE_BL_LOC = "" + C_BACKLINK_OF_TABLE_LOC = "" + C_BACKUP_OF_LOC = "" + C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC = "" + C_CLASSPERFILE_OPTIMIZATION_BASE_ALREADY_PROCESSED_LOC = "" + C_CONFIGFILE_LOC = "" + C_CONVERSION_CANCELLED_BY_USER_LOC = "" + C_CONVERT_ALL_FILES_IN_A_PROJECT_LOC = "" + C_CONVERT_FOLDER_LOC = "" + C_BINARY_TO_TEXT_LOC = "" + C_TEXT_TO_BINARY_LOC = "" + C_CONVERT_FOLDER_NONE_LOC = "" + C_CONVERT_FOLDER_QUESTION_LOC = "" + C_CONVERTER_UNLOAD_LOC = "" + C_CONVERTING_FILE_LOC = "" + C_DATA_ERROR_CANT_PARSE_UNPAIRING_DOUBLE_QUOTES_LOC = "" + C_DUPLICATED_FILE_LOC = "" + C_DUPLICATED_OBJECT_LOC = "" + C_ENDDEFINE_MARKER_NOT_FOUND_LOC = "" + C_END_MARKER_NOT_FOUND_LOC = "" + C_END_OF_PROCESS_LOC = "" + C_ERROR_LOC = "" + C_ERRORS_FOUND_IN_FILE_LOC = "" + C_EXTENSION_RECONFIGURATION_LOC = "" + C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES_LOC = "" + C_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC = "" + C_EXTERNAL_PARAMETERS_LOC = "" + C_FIELD_NOT_FOUND_ON_FILE_STRUCTURE_LOC = "" + C_FILE_DOESNT_EXIST_LOC = "" + C_FILE_NAME_IS_NOT_SUPPORTED_LOC = "" + C_FILE_NOT_FOUND_LOC = "" + C_FILENAME_LOC = "" + C_FOXBIN2PRG_ERROR_CAPTION_LOC = "" + C_FOXBIN2PRG_INFO_SINTAX_LOC = "" + C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC = "" + C_FOXBIN2PRG_JUST_VFP_9_LOC = "" + C_FOXBIN2PRG_WARN_CAPTION_LOC = "" + C_GENERATED_FILE_SIZE_LOC = "" + C_GENERATING_BINARY_LOC = "" + C_INCLUDING_CLASS_LOC = "" + C_INCORRECT_VFP9_VERSION__MISSING_SP2_LOC = "" + C_INTERACTIVE_DIRECTORY_SELECTION_LOC = "" + C_IS_A_FILE_LOC = "" + C_IS_A_DIRECTORY_LOC = "" + C_IS_UNSUPPORTED_LOC = "" + C_LANGUAGE_LOC = "" + C_MAIN_EXECUTION_LOC = "" + C_MENU_NOT_IN_VFP9_FORMAT_LOC = "" + C_NAMES_CAPITALIZATION_PROGRAM_FOUND_LOC = "" + C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC = "" + C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC = "" + C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC = "" + C_OPTION_LOC = "" + C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC = "" + C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC = "" + C_OUTPUTFILE_NEWER_THAN_INPUTFILE_LOC = "" + C_PRESS_ESC_TO_CANCEL = "" + C_PROCEDURE_NOT_CLOSED_ON_LINE_LOC = "" + C_PROCESSING_LOC = "" + C_PROCESS_PROGRESS_LOC = "" + C_PROPERTY_NAME_NOT_RECOGNIZED_LOC = "" + C_READING_CFG_VALUES_FROM_DISK_LOC = "" + C_REPORT_NOT_IN_VFP9_FORMAT_LOC = "" + C_REQUESTING_CAPITALIZATION_OF_FILE_LOC = "" + C_SCANNING_FILE_AND_DIR_INFO_LOC = "" + C_SOURCEFILE_LOC = "" + C_SOURCESAFE_COMPATIBILITY_MODE_LOC = "" + C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_LOC = "" + C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_2_LOC = "" + C_UNKNOWN_CLASS_NAME_LOC = "" + C_USING_THIS_SETTINGS_LOC = "" + C_WARNING_LOC = "" + C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC = "" + C_WITH_ERRORS_LOC = "" @@ -22334,6 +22328,7 @@ DEFINE CLASS CL_LANG AS Custom .C_GENERATED_FILE_SIZE_LOC = "Taille du fichier généré" .C_GENERATING_BINARY_LOC = "Génération Binaire" .C_INCLUDING_CLASS_LOC = "Including class" + .C_INCORRECT_VFP9_VERSION__MISSING_SP2_LOC = "SourceSafe Compatibilité ModeIncorrect VFP 9 Version - SP2 manquant! Prévue: 5185 ou plus tard, réelle: " + VERSION(4) .C_INTERACTIVE_DIRECTORY_SELECTION_LOC = "Sélection répertoire interactive" .C_IS_A_FILE_LOC = "est un FICHIER" .C_IS_A_DIRECTORY_LOC = "est un RÉPERTOIRE" @@ -22358,6 +22353,7 @@ DEFINE CLASS CL_LANG AS Custom .C_REQUESTING_CAPITALIZATION_OF_FILE_LOC = "- Demande de capitalisation de fichier [<>]" .C_SCANNING_FILE_AND_DIR_INFO_LOC = "Fichier de numérisation et de l'information de répertoire pour" .C_SOURCEFILE_LOC = "Fichier source: " + .C_SOURCESAFE_COMPATIBILITY_MODE_LOC = "Mode de compatibilité SourceSafe" .C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_LOC = "Nesting erreur de structure. ENDPROC prévu, mais a trouvé ENDDEFINE sur la classe <> (<>), ligne <> du fichier <>" .C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_2_LOC = "Nesting erreur de structure. ENDPROC attendue, mais ENDDEFINE sur la classe <> (<>.<>), ligne <> du fichier <>" .C_UNKNOWN_CLASS_NAME_LOC = "Classe inconnue[<>]" @@ -22416,6 +22412,7 @@ DEFINE CLASS CL_LANG AS Custom .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 '<>'" .C_INCLUDING_CLASS_LOC = "Incluyendo clase" + .C_INCORRECT_VFP9_VERSION__MISSING_SP2_LOC = "Versión Incorrecta de VFP 9 - Falta el SP2! Esperado: 5185 o posterior, actual: " + VERSION(4) .C_INTERACTIVE_DIRECTORY_SELECTION_LOC = "Selección Interactiva de Directorio" .C_IS_A_FILE_LOC = "es un ARCHIVO" .C_IS_A_DIRECTORY_LOC = "es un DIRECTORIO" @@ -22439,6 +22436,7 @@ DEFINE CLASS CL_LANG AS Custom .C_REQUESTING_CAPITALIZATION_OF_FILE_LOC = "- Solicitado capitalizar el archivo [<>]" .C_SCANNING_FILE_AND_DIR_INFO_LOC = "Escaneando archivos e información de directorio para" .C_SOURCEFILE_LOC = "Archivo origen: " + .C_SOURCESAFE_COMPATIBILITY_MODE_LOC = "Modo de Compatibilidad SourceSafe" .C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_LOC = "Error de anidamiento de estructuras. Se esperaba ENDPROC pero se encontró ENDDEFINE en la clase <> (<>), línea <> del archivo <>" .C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_2_LOC = "Error de anidamiento de estructuras. Se esperaba ENDPROC pero se encontró ENDDEFINE en la clase <> (<>.<>), línea <> del archivo <>" .C_UNKNOWN_CLASS_NAME_LOC = "Clase [<>] desconocida" @@ -22496,6 +22494,7 @@ DEFINE CLASS CL_LANG AS Custom .C_GENERATED_FILE_SIZE_LOC = "Generierte Dateigröße" .C_GENERATING_BINARY_LOC = "Gene Binary" .C_INCLUDING_CLASS_LOC = "einschließlich Klasse" + .C_INCORRECT_VFP9_VERSION__MISSING_SP2_LOC = "Source Kompatibilität ModeIncorrect VFP 9 Version - Fehlende SP2! Erwartet: 5185 oder später, aktuell:" + VERSION(4) .C_INTERACTIVE_DIRECTORY_SELECTION_LOC = "Auswählen interaktive Verzeichnis" .C_IS_A_FILE_LOC = "ist eine DATEI" .C_IS_A_DIRECTORY_LOC = "ist ein VERZEICHNIS" @@ -22520,6 +22519,7 @@ DEFINE CLASS CL_LANG AS Custom .C_REQUESTING_CAPITALIZATION_OF_FILE_LOC = "- Forder Großschreibung für Datei [<>] an" .C_SCANNING_FILE_AND_DIR_INFO_LOC = "Scannen Datei- und Verzeichnisinformationen für" .C_SOURCEFILE_LOC = "Source Datei: " + .C_SOURCESAFE_COMPATIBILITY_MODE_LOC = "Sourcesafe-Kompatibilitätsmodus" .C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_LOC = "Fehler in Verschachtelungsstruktur. ENDPROC erwartet, aber es wurde ENDDEFINE in Klasse <> (<>), Zeile <> der Datei <> gefunden" .C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_2_LOC = "Fehler in Verschachtelungsstruktur. ENDPROC wurde erwartet, aber es wurde ENDDEFINE in Klasse <> (<>.<>), Zeile <> der Datei <> gefunden" .C_UNKNOWN_CLASS_NAME_LOC = "Unbekannte Klasse [<>]" @@ -22528,7 +22528,89 @@ DEFINE CLASS CL_LANG AS Custom .C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC = "WARNUNG!" + CR_LF+ "SICHERSTELLEN DAS KEIN TABELLENALIAS IN DEM INDEXAUSDRUCK BENUTZT WIRD!! (z.B.: index on <>.campo tag keyname)" .C_WITH_ERRORS_LOC = "mit Fehlern" - OTHERWISE && Si no existe, se queda el por defecto + OTHERWISE && English (Inglés) + *------------------------------------------------------------------------------------------------------------------------------------------- + *-- NOTE: MUST USE DOUBLE QUOTES, OR SYNTAX ERRORS HAPPEN WHEN COMPILING. STRANGE :( + *------------------------------------------------------------------------------------------------------------------------------------------- + .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" + .C_BACKUP_OF_LOC = "Doing Backup of: " + .C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC = "Cannot generate file [<>] because it is ReadOnly" + .C_CLASSPERFILE_OPTIMIZATION_BASE_ALREADY_PROCESSED_LOC = "OPTIMIZATION: Base File [<>] already processed, skipping processing of file [<>]" + .C_CONFIGFILE_LOC = "Using configuration file:" + .C_CONVERSION_CANCELLED_BY_USER_LOC = "Conversion Cancelled by the user" + .C_CONVERT_ALL_FILES_IN_A_PROJECT_LOC = "Convert all files in a Project" + .C_CONVERT_FOLDER_LOC = "Convert Folder" + .C_BINARY_TO_TEXT_LOC = "Binary to Text" + .C_TEXT_TO_BINARY_LOC = "Text to Binary" + .C_CONVERT_FOLDER_NONE_LOC = "None" + .C_CONVERT_FOLDER_QUESTION_LOC = "What conversion should be performed on the files of this folder?" + .C_CONVERTER_UNLOAD_LOC = "Converter unload" + .C_CONVERTING_FILE_LOC = "Converting file" + .C_DATA_ERROR_CANT_PARSE_UNPAIRING_DOUBLE_QUOTES_LOC = "Data Error: Can't parse because of unpaired double-quotes on line <>" + .C_DUPLICATED_FILE_LOC = "Duplicated file" + .C_DUPLICATED_OBJECT_LOC = "Duplicated Object" + .C_ENDDEFINE_MARKER_NOT_FOUND_LOC = "Cannot find end marker [ENDDEFINE] of line <> for ID [<>]" + .C_END_MARKER_NOT_FOUND_LOC = "Cannot find end marker [<>] that closes start marker [<>] on line <>" + .C_END_OF_PROCESS_LOC = "End of Process" + .C_ERROR_LOC = "ERROR" + .C_ERRORS_FOUND_IN_FILE_LOC = "ERRORS FOUND IN FILE" + .C_EXTENSION_RECONFIGURATION_LOC = "Extension Reconfiguration:" + .C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES_LOC = "External class count (<>) does not match found classes (<>) for file [<>]" + .C_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC = "External class was not found" + .C_EXTERNAL_PARAMETERS_LOC = "EXTERNAL PARAMETERS" + .C_FIELD_NOT_FOUND_ON_FILE_STRUCTURE_LOC = "Field [<>] not found in structure of file <>" + .C_FILE_DOESNT_EXIST_LOC = "File does not exist:" + .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_JUST_VFP_9_LOC = "FOXBIN2PRG is only for Visual FoxPro 9.0!" + .C_FOXBIN2PRG_WARN_CAPTION_LOC = "FOXBIN2PRG: WARNING!" + .C_GENERATED_FILE_SIZE_LOC = "Generated file size" + .C_GENERATING_BINARY_LOC = "Generating Binary" + .C_INCLUDING_CLASS_LOC = "Including class" + .C_INCORRECT_VFP9_VERSION__MISSING_SP2_LOC = "Incorrect VFP 9 version - Missing SP2! Expected: 5185 or later, actual: " + VERSION(4) + .C_INTERACTIVE_DIRECTORY_SELECTION_LOC = "Interactive Directory Selection" + .C_IS_A_FILE_LOC = "is a FILE" + .C_IS_A_DIRECTORY_LOC = "is a DIRECTORY" + .C_IS_UNSUPPORTED_LOC = "is unsupported" + .C_LANGUAGE_LOC = "EN" + .C_MAIN_EXECUTION_LOC = "MAIN EXECUTION" + .C_MENU_NOT_IN_VFP9_FORMAT_LOC = "Menu [<>] is NOT in VFP 9 Format! - Please convert to VFP 9 with MODIFY MENU '<>'" + .C_NAMES_CAPITALIZATION_PROGRAM_FOUND_LOC = "* Names capitalization program [<>] found" + .C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC = "* Names capitalization program [<>] not found" + .C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC = "Object [<>] does not contain oReg object (level <>)" + .C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC = "Operation not recognized. Only SETNAME and GETNAME allowed." + .C_OPTION_LOC = "Option" + .C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC = "The outer class does not match the inner classes" + .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_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" + .C_PROCESS_PROGRESS_LOC = "Process Progress:" + .C_PROPERTY_NAME_NOT_RECOGNIZED_LOC = "Property [<>] is not recognized." + .C_READING_CFG_VALUES_FROM_DISK_LOC = "READING CFG VALUES FROM DISK" + .C_REPORT_NOT_IN_VFP9_FORMAT_LOC = "Report [<>] is NOT in VFP 9 Format! - Please convert to VFP 9 with MODIFY REPORT '<>'" + .C_REQUESTING_CAPITALIZATION_OF_FILE_LOC = "- Requesting capitalization of file [<>]" + .C_SCANNING_FILE_AND_DIR_INFO_LOC = "Scanning file and directory information for" + .C_SOURCEFILE_LOC = "Source file: " + .C_SOURCESAFE_COMPATIBILITY_MODE_LOC = "SourceSafe Compatibility Mode" + .C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_LOC = "Nesting structure error. ENDPROC expected but found ENDDEFINE on class <> (<>), line <> of file <>" + .C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_2_LOC = "Nesting structure error. ENDPROC expected but found ENDDEFINE on class <> (<>.<>), line <> of file <>" + .C_UNKNOWN_CLASS_NAME_LOC = "Unknown class [<>]" + .C_USING_THIS_SETTINGS_LOC = "Using this settings" + .C_WARNING_LOC = "WARNING!" + .C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC = "WARNING!" + CR_LF+ "MAKE SURE YOU ARE NOT USING A TABLE ALIAS ON INDEX KEY EXPRESSIONS!! (ex: index on <>.campo tag keyname)" + .C_WITH_ERRORS_LOC = "with errors" .n_LanguageSelectedMethod = 0 && 0=Automatic with VERSION(3) ENDCASE From 163faefff4d3c90fa0062330d63dd16541479fa8 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 23 Jan 2015 23:54:02 +0100 Subject: [PATCH 004/123] =?UTF-8?q?Changeset:=20644=20-=20Nueva=20propieda?= =?UTF-8?q?d=20"n=5FForceWriteIfReadOnly"=20para=20permitir=20hacer=20conv?= =?UTF-8?q?ersiones=20aunque=20los=20archivos=20est=C3=A9n=20de=20solo=20l?= =?UTF-8?q?ectura?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 76 ++++++++++++++++++++++++++++---------------------- 1 file changed, 42 insertions(+), 34 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 34d262e..ae7a113 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -548,6 +548,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -615,6 +616,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM l_Test = .F. l_ShowErrors = .T. n_ShowProgressbar = 1 + n_ForceWriteIfReadOnly = 0 l_AllowMultiConfig = .T. l_DropNullCharsFromCode = .T. l_Recompile = .T. @@ -1053,12 +1055,13 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM #DEFINE FILE_ATTRIBUTE_COMPRESSED 2048 TRY - LOCAL loEx AS EXCEPTION, dwFileAttributes + LOCAL loEx AS EXCEPTION, dwFileAttributes, dwFileAttributes_Orig, lnRet DECLARE SHORT 'SetFileAttributes' IN kernel32 AS fb2p_SetFileAttributes STRING tcFileName, INTEGER dwFileAttributes DECLARE INTEGER 'GetFileAttributes' IN kernel32 AS fb2p_GetFileAttributes STRING tcFileName * read current attributes for this file - dwFileAttributes = fb2p_GetFileAttributes(tcFileName) + dwFileAttributes = fb2p_GetFileAttributes(tcFileName) + dwFileAttributes_Orig = dwFileAttributes IF dwFileAttributes = -1 * the file does not exist @@ -1117,18 +1120,19 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF * setting selected attributes - =fb2p_SetFileAttributes(tcFileName, dwFileAttributes) + lnRet = fb2p_SetFileAttributes(tcFileName, dwFileAttributes) ENDIF CATCH TO loEx THROW FINALLY + THIS.writeLog( LOWER(PROGRAM()) + ' >> [' + tcFileName + '] lnRet = ' + TRANSFORM(lnRet) + ', dwFileAttributes_Orig = ' + TRANSFORM(dwFileAttributes_Orig) ) CLEAR DLLS fb2p_SetFileAttributes, fb2p_GetFileAttributes RELEASE tcFileName, tcAttrib, dwFileAttributes ENDTRY - RETURN + RETURN lnRet ENDPROC @@ -2472,7 +2476,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM TRY LOCAL lnCodError, lcErrorInfo, laDirFile(1,5), lcExtension, lnFileCount, laFiles(1,1), I ; - , ltFilestamp, lcExtA, lcExtB, laEvents(1,1) ; + , ltFilestamp, lcExtA, lcExtB, laEvents(1,1), lcForceAttribs ; , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' ; , loConversor as C_CONVERSOR_BASE OF 'FOXBIN2PRG.PRG' ; , loFSO AS Scripting.FileSystemObject @@ -2481,6 +2485,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' loFSO = .o_FSO loLang = _SCREEN.o_FoxBin2Prg_Lang + lcForceAttribs = '+N' .c_InputFile = FULLPATH( tc_InputFile ) lcExtension = UPPER( JUSTEXT(.c_InputFile) ) .writeLog( REPLICATE( '*', 100 ) ) @@ -2496,6 +2501,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- VERIFICO SI HAY ARCHIVO DE CONFIGURACIÓN SECUNDARIO .EvaluarConfiguracion() + + IF .n_ForceWriteIfReadOnly = 1 THEN + lcForceAttribs = lcForceAttribs + '-R' + ENDIF *-- OPTIMIZACIÓN VC2/SC2: VERIFICO SI EL ARCHIVO BASE FUE PROCESADO PARA DESCARTAR REPROCESOS @@ -2553,7 +2562,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, .c_VC2 ) .o_Conversor = CREATEOBJECT( 'c_conversor_vcx_a_prg' ) - .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_VC2 ), '+N' ) + .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_VC2 ), lcForceAttribs ) CASE lcExtension = 'SCX' IF NOT INLIST(.SCX_Conversion_Support, 1, 2) @@ -2561,7 +2570,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, .c_SC2 ) .o_Conversor = CREATEOBJECT( 'c_conversor_scx_a_prg' ) - .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_SC2 ), '+N' ) + .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_SC2 ), lcForceAttribs ) CASE lcExtension = 'PJX' IF NOT INLIST(.PJX_Conversion_Support, 1, 2) @@ -2569,7 +2578,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, .c_PJ2 ) .o_Conversor = CREATEOBJECT( 'c_conversor_pjx_a_prg' ) - .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_PJ2 ), '+N' ) + .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_PJ2 ), lcForceAttribs ) CASE lcExtension = 'PJM' IF NOT INLIST(.PJX_Conversion_Support, 1, 2) @@ -2577,7 +2586,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, .c_PJ2 ) .o_Conversor = CREATEOBJECT( 'c_conversor_pjm_a_prg' ) - .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_PJ2 ), '+N' ) + .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_PJ2 ), lcForceAttribs ) CASE lcExtension = 'FRX' IF NOT INLIST(.FRX_Conversion_Support, 1, 2) @@ -2585,7 +2594,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, .c_FR2 ) .o_Conversor = CREATEOBJECT( 'c_conversor_frx_a_prg' ) - .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_FR2 ), '+N' ) + .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_FR2 ), lcForceAttribs ) CASE lcExtension = 'LBX' IF NOT INLIST(.LBX_Conversion_Support, 1, 2) @@ -2593,7 +2602,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, .c_LB2 ) .o_Conversor = CREATEOBJECT( 'c_conversor_frx_a_prg' ) - .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_LB2 ), '+N' ) + .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_LB2 ), lcForceAttribs ) CASE lcExtension = 'DBF' IF NOT INLIST(.DBF_Conversion_Support, 1, 2, 4) @@ -2601,7 +2610,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, .c_DB2 ) .o_Conversor = CREATEOBJECT( 'c_conversor_dbf_a_prg' ) - .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_DB2 ), '+N' ) + .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_DB2 ), lcForceAttribs ) CASE lcExtension = 'DBC' IF NOT INLIST(.DBC_Conversion_Support, 1, 2) @@ -2609,7 +2618,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, .c_DC2 ) .o_Conversor = CREATEOBJECT( 'c_conversor_dbc_a_prg' ) - .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_DC2 ), '+N' ) + .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_DC2 ), lcForceAttribs ) CASE lcExtension = 'MNX' IF NOT INLIST(.MNX_Conversion_Support, 1, 2) @@ -2617,7 +2626,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, .c_MN2 ) .o_Conversor = CREATEOBJECT( 'c_conversor_mnx_a_prg' ) - .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_MN2 ), '+N' ) + .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_MN2 ), lcForceAttribs ) CASE lcExtension = .c_VC2 IF .VCX_Conversion_Support <> 2 @@ -2625,8 +2634,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, 'VCX' ) .o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_vcx' ) - .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'VCX' ), '+N' ) - .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'VCT' ), '+N' ) + .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'VCX' ), lcForceAttribs ) + .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'VCT' ), lcForceAttribs ) CASE lcExtension = .c_SC2 IF .SCX_Conversion_Support <> 2 @@ -2634,8 +2643,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, 'SCX' ) .o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_scx' ) - .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'SCX' ), '+N' ) - .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'SCT' ), '+N' ) + .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'SCX' ), lcForceAttribs ) + .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'SCT' ), lcForceAttribs ) CASE lcExtension = .c_PJ2 IF .PJX_Conversion_Support <> 2 @@ -2643,8 +2652,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, 'PJX' ) .o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_pjx' ) - .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'PJX' ), '+N' ) - .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'PJT' ), '+N' ) + .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'PJX' ), lcForceAttribs ) + .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'PJT' ), lcForceAttribs ) CASE lcExtension = .c_FR2 IF .FRX_Conversion_Support <> 2 @@ -2652,8 +2661,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, 'FRX' ) .o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_frx' ) - .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'FRX' ), '+N' ) - .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'FRT' ), '+N' ) + .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'FRX' ), lcForceAttribs ) + .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'FRT' ), lcForceAttribs ) CASE lcExtension = .c_LB2 IF .LBX_Conversion_Support <> 2 @@ -2661,8 +2670,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, 'LBX' ) .o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_frx' ) - .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'LBX' ), '+N' ) - .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'LBT' ), '+N' ) + .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'LBX' ), lcForceAttribs ) + .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'LBT' ), lcForceAttribs ) CASE lcExtension = .c_DB2 IF .DBF_Conversion_Support <> 2 @@ -2670,9 +2679,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, 'DBF' ) .o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_dbf' ) - .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'DBF' ), '+N' ) - .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'FPT' ), '+N' ) - .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'CDX' ), '+N' ) + .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'DBF' ), lcForceAttribs ) + .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'FPT' ), lcForceAttribs ) + .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'CDX' ), lcForceAttribs ) CASE lcExtension = .c_DC2 IF .DBC_Conversion_Support <> 2 @@ -2680,9 +2689,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, 'DBC' ) .o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_dbc' ) - .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'DBC' ), '+N' ) - .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'DCX' ), '+N' ) - .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'DCT' ), '+N' ) + .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'DBC' ), lcForceAttribs ) + .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'DCX' ), lcForceAttribs ) + .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'DCT' ), lcForceAttribs ) CASE lcExtension = .c_MN2 IF .MNX_Conversion_Support <> 2 @@ -2690,8 +2699,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, 'MNX' ) .o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_mnx' ) - .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'MNX' ), '+N' ) - .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'MNT' ), '+N' ) + .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'MNX' ), lcForceAttribs ) + .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'MNT' ), lcForceAttribs ) OTHERWISE *ERROR 'El archivo [' + .c_InputFile + '] no está soportado' @@ -3069,10 +3078,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM LOCAL lcLog, laFile(1,5) ; , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' - *THIS.writeLog( '- Se ha solicitado capitalizar el archivo [' + tcFileName + ']' ) loLang = _SCREEN.o_FoxBin2Prg_Lang THIS.writeLog( TEXTMERGE(loLang.C_REQUESTING_CAPITALIZATION_OF_FILE_LOC) ) - THIS.ChangeFileAttribute( tcFileName, '+N' ) + *THIS.ChangeFileAttribute( tcFileName, '+N' ) lcLog = '' THIS.o_FNC.Capitalize( tcFileName, '', 'F', lcLog, tlRelanzarError, '1' ) THIS.writeLog( lcLog ) From d5b3861ae1e5c9b01fda912d6ddff05a8366c5ba Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 24 Jan 2015 17:55:39 +0100 Subject: [PATCH 005/123] =?UTF-8?q?Changeset:=20645=20Ajuste=20cosm=C3=A9t?= =?UTF-8?q?ico=20del=20c=C3=B3digo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index ae7a113..1733834 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -419,7 +419,7 @@ LOCAL loCnv AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' LOCAL lnResp, loEx AS EXCEPTION *SET COVERAGE TO c:\desa\foxbin2prg\foxbin2prg_coverage.log -*SYS(2030,1) && Enable system component debugging +*SYS(2030,1) && Enable system component debugging *SYS(2335,0) && Unnatended server mode *IF PCOUNT() > 1 && Saltear las querys de SourceSafe sobre soporte de archivos * SET STEP ON From 57edb3a675da13d922d51140d67911cb89081a02 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Wed, 28 Jan 2015 20:55:13 +0100 Subject: [PATCH 006/123] =?UTF-8?q?Changeset:=20646=20-=20Cambiada=20la=20?= =?UTF-8?q?verificaci=C3=B3n=20de=20SP2=20(5815)=20a=20SP1=20(3504),=20ya?= =?UTF-8?q?=20que=20no=20hace=20falta=20realmente=20el=20SP2,=20pero=20s?= =?UTF-8?q?=C3=AD=20el=20SP1=20(Ryan=20Harris)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 1733834..e2bf2eb 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -1924,8 +1924,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM * EXIT *ENDIF - IF VERSION(5) < 900 OR INT( VAL( SUBSTR( VERSION(4), RAT('.', VERSION(4)) + 1 ) ) ) < 5815 - ERROR C_INCORRECT_VFP9_VERSION__MISSING_SP2_LOC + IF VERSION(5) < 900 OR INT( VAL( SUBSTR( VERSION(4), RAT('.', VERSION(4)) + 1 ) ) ) < 3504 + ERROR C_INCORRECT_VFP9_VERSION__MISSING_SP1_LOC ENDIF *-- Determino el tipo de InputFile (Archivo o Directorio) @@ -22188,7 +22188,7 @@ DEFINE CLASS CL_LANG AS Custom C_GENERATED_FILE_SIZE_LOC = "" C_GENERATING_BINARY_LOC = "" C_INCLUDING_CLASS_LOC = "" - C_INCORRECT_VFP9_VERSION__MISSING_SP2_LOC = "" + C_INCORRECT_VFP9_VERSION__MISSING_SP1_LOC = "" C_INTERACTIVE_DIRECTORY_SELECTION_LOC = "" C_IS_A_FILE_LOC = "" C_IS_A_DIRECTORY_LOC = "" @@ -22336,7 +22336,7 @@ DEFINE CLASS CL_LANG AS Custom .C_GENERATED_FILE_SIZE_LOC = "Taille du fichier généré" .C_GENERATING_BINARY_LOC = "Génération Binaire" .C_INCLUDING_CLASS_LOC = "Including class" - .C_INCORRECT_VFP9_VERSION__MISSING_SP2_LOC = "SourceSafe Compatibilité ModeIncorrect VFP 9 Version - SP2 manquant! Prévue: 5185 ou plus tard, réelle: " + VERSION(4) + .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_INTERACTIVE_DIRECTORY_SELECTION_LOC = "Sélection répertoire interactive" .C_IS_A_FILE_LOC = "est un FICHIER" .C_IS_A_DIRECTORY_LOC = "est un RÉPERTOIRE" @@ -22420,7 +22420,7 @@ DEFINE CLASS CL_LANG AS Custom .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 '<>'" .C_INCLUDING_CLASS_LOC = "Incluyendo clase" - .C_INCORRECT_VFP9_VERSION__MISSING_SP2_LOC = "Versión Incorrecta de VFP 9 - Falta el SP2! Esperado: 5185 o posterior, actual: " + VERSION(4) + .C_INCORRECT_VFP9_VERSION__MISSING_SP1_LOC = "Versión Incorrecta de VFP 9 - Falta el SP1! Esperado: 3504 o posterior, actual: " + VERSION(4) .C_INTERACTIVE_DIRECTORY_SELECTION_LOC = "Selección Interactiva de Directorio" .C_IS_A_FILE_LOC = "es un ARCHIVO" .C_IS_A_DIRECTORY_LOC = "es un DIRECTORIO" @@ -22502,7 +22502,7 @@ DEFINE CLASS CL_LANG AS Custom .C_GENERATED_FILE_SIZE_LOC = "Generierte Dateigröße" .C_GENERATING_BINARY_LOC = "Gene Binary" .C_INCLUDING_CLASS_LOC = "einschließlich Klasse" - .C_INCORRECT_VFP9_VERSION__MISSING_SP2_LOC = "Source Kompatibilität ModeIncorrect VFP 9 Version - Fehlende SP2! Erwartet: 5185 oder später, aktuell:" + VERSION(4) + .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_INTERACTIVE_DIRECTORY_SELECTION_LOC = "Auswählen interaktive Verzeichnis" .C_IS_A_FILE_LOC = "ist eine DATEI" .C_IS_A_DIRECTORY_LOC = "ist ein VERZEICHNIS" @@ -22585,7 +22585,7 @@ DEFINE CLASS CL_LANG AS Custom .C_GENERATED_FILE_SIZE_LOC = "Generated file size" .C_GENERATING_BINARY_LOC = "Generating Binary" .C_INCLUDING_CLASS_LOC = "Including class" - .C_INCORRECT_VFP9_VERSION__MISSING_SP2_LOC = "Incorrect VFP 9 version - Missing SP2! Expected: 5185 or later, actual: " + VERSION(4) + .C_INCORRECT_VFP9_VERSION__MISSING_SP1_LOC = "Incorrect VFP 9 version - Missing SP1! Expected: 3504 or later, actual: " + VERSION(4) .C_INTERACTIVE_DIRECTORY_SELECTION_LOC = "Interactive Directory Selection" .C_IS_A_FILE_LOC = "is a FILE" .C_IS_A_DIRECTORY_LOC = "is a DIRECTORY" From af713dcd12e088468a30e2974a2a76e568db8f55 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 8 Feb 2015 19:54:30 +0100 Subject: [PATCH 007/123] =?UTF-8?q?Changeset:=20647=20-=20Agregado=20el=20?= =?UTF-8?q?env=C3=ADo=20del=20objeto=20oFoxBin2Prg=20a=20algunos=20m=C3=A9?= =?UTF-8?q?todos=20para=20poder=20centralizar=20m=C3=A1s=20cosas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 102 ++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 83 insertions(+), 19 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index e2bf2eb..f7932b7 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -131,7 +131,8 @@ * 07/01/2015 FDBOZZO v1.19.40 Mejora scx/vcx: Detección de nombres de objeto duplicados para notificar casos de corrupción * 13/01/2015 FDBOZZO v1.19.41 Bug Fix scx/vcx: Detección errónea de estructuras PROCEDURE/ENDPROC cuando se usan como parámetros en LPARAMETERS (Ryan Harris) * 13/01/2015 FDBOZZO v1.19.41 Bug Fix db2: Detección errónea de tabla inválida cuando el tamaño es inferior a 328 bytes. Límite mínimo cambiado a 65 bytes. -* 20/01/2015 FDBOZZO v1.19.42 Mejora: Validación de versión de Visual FoxPro, para evitar problemas ajenos a FoxBin2Prg +* 20/01/2015 FDBOZZO v1.19.42 Mejora: Validación de versión de Visual FoxPro SP1, para evitar problemas ajenos a FoxBin2Prg +* 04/02/2015 FDBOZZO v1.19.42 Mejora db2 v1.19.41: Permitir ordenar los campos alfabéticamente y mantener en una lista aparte el orden real, para facilitar el diff y el merge (Ryan Harris) * * *--------------------------------------------------------------------------------------------------- @@ -192,6 +193,7 @@ * 06/01/2015 Jim Nelson Mejora v1.19.39: Permitir configurar la barra de progreso para que solamente aparezca cuando se procesan múltiples archivos y no cuando se procesa solo 1 (Agregado en v1.19.40) * 06/01/2015 Mike Potjer Reporte bug db2: [Error 12, Variable "TCOUTPUTFILE" is not found] cuando DBF_Conversion_Support=4 y el archivo de salida es igual al generado (Agregado en v1.19.40) * 13/01/2015 Ryan Harris Reporte bug vcx/scx v1.19.40: Detección errónea de estructuras PROCEDURE/ENDPROC cuando se usan como parámetros LPARAMETERS en línea aparte (Arreglado en v1.19.41) +* 24/01/2015 Ryan Harris Mejora db2 v1.19.41: Permitir ordenar los campos alfabéticamente y mantener en una lista aparte el orden real, para facilitar el diff y el merge * * *--------------------------------------------------------------------------------------------------- @@ -549,6 +551,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -636,6 +639,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM n_CFG_Actual = 0 n_ID = 0 n_FileHandle = 0 + n_Order_View_Fields = 1 n_ProcessedFiles = 0 && Contador usado para los archivos file.class.ext n_ProcessedFilesCount = 0 && Contador genérico de procesados o_Conversor = NULL @@ -13562,7 +13566,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg *-- Header toDatabase = CREATEOBJECT('CL_DBC') - C_FB2PRG_CODE = C_FB2PRG_CODE + toDatabase.toText() + C_FB2PRG_CODE = C_FB2PRG_CODE + toDatabase.toText(@toFoxBin2Prg) *-- Genero el DC2 @@ -15721,6 +15725,12 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE PROCEDURE toText + LPARAMETERS toFoxBin2Prg + + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF + TRY LOCAL I, lcText, lcDBC, laCode(1,1), loEx AS EXCEPTION ; , loConnections AS CL_DBC_CONNECTIONS OF 'FOXBIN2PRG.PRG' ; @@ -15745,15 +15755,15 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE *-- Connections loConnections = ._Connections - lcText = lcText + loConnections.toText() + lcText = lcText + loConnections.toText( .F., .F., @toFoxBin2Prg ) *-- Tables loTables = ._Tables - lcText = lcText + loTables.toText() + lcText = lcText + loTables.toText( .F., .F., @toFoxBin2Prg ) *-- Views loViews = ._Views - lcText = lcText + loViews.toText() + lcText = lcText + loViews.toText( .F., .F., @toFoxBin2Prg ) SELECT CODE ; FROM TABLABIN ; @@ -15886,8 +15896,13 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * taConnections (@? OUT) Array de conexiones * tnConnection_Count (@? OUT) Cantidad de conexiones + * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg *--------------------------------------------------------------------------------------------------- - LPARAMETERS taConnections, tnConnection_Count + LPARAMETERS taConnections, tnConnection_Count, toFoxBin2Prg + + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF TRY LOCAL I, lcText, loEx AS EXCEPTION ; @@ -16200,8 +16215,13 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * taTables (@? OUT) Array de conexiones * lnTable_Count (@? OUT) Cantidad de conexiones + * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg *--------------------------------------------------------------------------------------------------- - LPARAMETERS taTables, tnTable_Count + LPARAMETERS taTables, tnTable_Count, toFoxBin2Prg + + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF EXTERNAL ARRAY taTables @@ -16388,7 +16408,11 @@ DEFINE CLASS CL_DBC_TABLE AS CL_DBC_BASE * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * tcTable (v! IN ) Nombre de la Tabla *--------------------------------------------------------------------------------------------------- - LPARAMETERS tcTable + LPARAMETERS tcTable, toFoxBin2Prg + + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF TRY LOCAL lcText, loEx AS EXCEPTION ; @@ -16413,13 +16437,13 @@ DEFINE CLASS CL_DBC_TABLE AS CL_DBC_BASE ENDTEXT loFields = CREATEOBJECT('CL_DBC_FIELDS_DB') - lcText = lcText + loFields.toText( tcTable ) + lcText = lcText + loFields.toText( tcTable, @toFoxBin2Prg ) loIndexes = CREATEOBJECT('CL_DBC_INDEXES_DB') - lcText = lcText + loIndexes.toText( tcTable ) + lcText = lcText + loIndexes.toText( tcTable, @toFoxBin2Prg ) loRelations = CREATEOBJECT('CL_DBC_RELATIONS') - lcText = lcText + loRelations.toText( tcTable ) + lcText = lcText + loRelations.toText( tcTable, .F., .F., @toFoxBin2Prg ) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> @@ -16563,8 +16587,13 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * tcTable (v! IN ) Nombre de la Tabla + * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg *--------------------------------------------------------------------------------------------------- - LPARAMETERS tcTable + LPARAMETERS tcTable, toFoxBin2Prg + + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF TRY LOCAL X, lcText, lnField_Count, laFields(1), loEx AS EXCEPTION ; @@ -16861,8 +16890,13 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * tcTable (v! IN ) Nombre de la Tabla + * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg *--------------------------------------------------------------------------------------------------- - LPARAMETERS tcTable + LPARAMETERS tcTable, toFoxBin2Prg + + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF TRY LOCAL X, lcText, lnIndex_Count, laIndexes(1), loEx AS EXCEPTION ; @@ -17137,8 +17171,13 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * taViews (@? OUT) Array de vistas * tnView_Count (@? OUT) Cantidad de vistas + * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg *--------------------------------------------------------------------------------------------------- - LPARAMETERS taViews, tnView_Count + LPARAMETERS taViews, tnView_Count, toFoxBin2Prg + + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF EXTERNAL ARRAY taViews @@ -17364,8 +17403,13 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * tcView (v! IN ) Vista en evaluación + * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg *--------------------------------------------------------------------------------------------------- - LPARAMETERS tcView + LPARAMETERS tcView, toFoxBin2Prg + + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF TRY LOCAL I, lcText, lcDBC, lnField_Count, laFields(1), loEx AS EXCEPTION ; @@ -17589,8 +17633,13 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * tcView (v! IN ) Nombre de la Vista + * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg *--------------------------------------------------------------------------------------------------- - LPARAMETERS tcView + LPARAMETERS tcView, toFoxBin2Prg + + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF TRY LOCAL X, lcText, lnField_Count, laFields(1), loEx AS EXCEPTION ; @@ -17902,8 +17951,13 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE * tcTable (v! IN ) Tabla de la que obtener las relaciones * taRelations (@? OUT) Array de relaciones * tnRelation_Count (@? OUT) Cantidad de relaciones + * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg *--------------------------------------------------------------------------------------------------- - LPARAMETERS tcTable, taRelations, tnRelation_Count + LPARAMETERS tcTable, taRelations, tnRelation_Count, toFoxBin2Prg + + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF EXTERNAL ARRAY taRelations @@ -18429,8 +18483,13 @@ DEFINE CLASS CL_DBF_FIELDS AS CL_COL_BASE * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * taFields (@? OUT) Array de información de campos * tnField_Count (@? OUT) Cantidad de campos + * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg *--------------------------------------------------------------------------------------------------- - LPARAMETERS taFields, tnField_Count + LPARAMETERS taFields, tnField_Count, toFoxBin2Prg + + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF EXTERNAL ARRAY taFields @@ -18716,8 +18775,13 @@ DEFINE CLASS CL_DBF_INDEXES AS CL_COL_BASE * taTagInfo (@? OUT) Array de información de indices * tnTagInfo_Count (@? OUT) Cantidad de índices * tc_InputFile (v! IN ) Archivo de entrada (el DBF) + * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg *--------------------------------------------------------------------------------------------------- - LPARAMETERS taTagInfo, tnTagInfo_Count, tc_InputFile + LPARAMETERS taTagInfo, tnTagInfo_Count, tc_InputFile, toFoxBin2Prg + + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF EXTERNAL ARRAY taTagInfo From 0d740a6a36c9cab0f9c61d5a5e58473a63b8f8c0 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 1 Mar 2015 17:46:43 +0100 Subject: [PATCH 008/123] =?UTF-8?q?Changeset:=20649=20-=20Bug=20Fix=20scx/?= =?UTF-8?q?vcx:=20Procesar=20solo=20un=20nivel=20de=20text/endtext,=20ya?= =?UTF-8?q?=20que=20no=20se=20admiten=20m=C3=A1s=20niveles=20(Lutz=20Schef?= =?UTF-8?q?fler)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...or_base__IdentificarBloquesDeExclusion.prg | 108 +++++++++++++++++- foxbin2prg.prg | 45 ++++---- 2 files changed, 132 insertions(+), 21 deletions(-) diff --git a/TESTS/ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion.prg b/TESTS/ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion.prg index 8d47e20..cfffd4d 100644 --- a/TESTS/ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion.prg +++ b/TESTS/ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion.prg @@ -11,9 +11,11 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as #DEFINE C_IF_F '#IF' #DEFINE C_ENDIF '#ENDIF' icObj = NULL + icFB = NULL ******************************************************************************************************************************************* FUNCTION Setup + THIS.icFB = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG") THIS.icObj = NEWOBJECT("c_conversor_prg_a_bin", "FOXBIN2PRG.PRG") ENDFUNC @@ -22,6 +24,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as ******************************************************************************************************************************************* FUNCTION TearDown THIS.icObj = NULL + THIS.icFB = NULL ENDFUNC @@ -85,7 +88,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as laLineasExclusion_Esperadas( 3) = .T. laLineasExclusion_Esperadas( 4) = .T. laLineasExclusion_Esperadas( 5) = .T. - laLineasExclusion_Esperadas( 7) = .T. + laLineasExclusion_Esperadas( 6) = .T. laLineasExclusion_Esperadas( 8) = .T. laLineasExclusion_Esperadas( 9) = .T. laLineasExclusion_Esperadas(10) = .T. @@ -117,6 +120,56 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as ENDFUNC + ******************************************************************************************************************************************* + FUNCTION Deberia_ObtenerLaUbicacionDelBloque_IF_ENDIF_externo_CuandoOtros_IF_ENDIF_internos_sonEvaluados + LOCAL lcMethod, laLineas(1), lnLineas, laPos(1,2), lnPos_Count, laExpected_Pos(1,2) ; + , laLineasExclusion(14), laLineasExclusion_Esperadas(14) + LOCAL loObj AS c_conversor_prg_a_bin OF "FOXBIN2PRG.PRG" + loObj = THIS.icObj + + *-- Input and expected params + STORE '' TO lcMethod + laExpected_Pos(1,1) = 3 + laExpected_Pos(1,2) = 13 + laLineasExclusion_Esperadas( 3) = .T. + laLineasExclusion_Esperadas( 4) = .T. + laLineasExclusion_Esperadas( 5) = .T. + laLineasExclusion_Esperadas( 7) = .T. + laLineasExclusion_Esperadas( 8) = .T. + laLineasExclusion_Esperadas( 9) = .T. + laLineasExclusion_Esperadas(10) = .T. + laLineasExclusion_Esperadas(11) = .T. + laLineasExclusion_Esperadas(12) = .T. + laLineasExclusion_Esperadas(13) = .T. + + TEXT TO lcMethod NOSHOW TEXTMERGE FLAGS 1 PRETEXT 1+2 + <> myMethod_B + *-- Code Block + <> + <> + <> + value ; + <> + *-- Code Block + <> + value , + <> + <> + <> + <> + ENDTEXT + + lnLineas = ALINES( laLineas, lcMethod ) + + *-- Test + loObj.identificarBloquesDeExclusion( @laLineas, lnLineas, , @laLineasExclusion, @lnPos_Count, @laPos ) + + *-- Evaluación de resultados + THIS.Evaluate_results( @laExpected_Pos, @laPos, lnPos_Count, @laLineasExclusion_Esperadas, @laLineasExclusion ) + + ENDFUNC + + ******************************************************************************************************************************************* FUNCTION Deberia_ObtenerLaUbicacionDelBloque_IF_ENDIF_Externo_CuandoCodigoCon_IF_ENDIF_predominante_esEvaluado LOCAL lcMethod, laLineas(1), lnLineas, laPos(1,2), lnPos_Count, laExpected_Pos(1,2) ; @@ -208,6 +261,59 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as ENDFUNC + ******************************************************************************************************************************************* + FUNCTION Deberia_ObtenerLaUbicacionDelBloque_TEXT_ENDTEXT_CuandoCodigoConteniendo_TEXT_esEvaluado + LOCAL lcMethod, laLineas(1), lnLineas, laPos(1,2), lnPos_Count, laExpected_Pos(3,2) ; + , laLineasExclusion(14), laLineasExclusion_Esperadas(14) + LOCAL loObj AS c_conversor_prg_a_bin OF "FOXBIN2PRG.PRG" + loObj = THIS.icObj + + *-- Input and expected params + STORE '' TO lcMethod + laExpected_Pos(1,1) = 3 + laExpected_Pos(1,2) = 5 + laExpected_Pos(2,1) = 7 + laExpected_Pos(2,2) = 9 + laExpected_Pos(3,1) = 11 + laExpected_Pos(3,2) = 13 + laLineasExclusion_Esperadas( 3) = .T. + laLineasExclusion_Esperadas( 4) = .T. + laLineasExclusion_Esperadas( 5) = .T. + laLineasExclusion_Esperadas( 7) = .T. + laLineasExclusion_Esperadas( 8) = .T. + laLineasExclusion_Esperadas( 9) = .T. + laLineasExclusion_Esperadas(11) = .T. + laLineasExclusion_Esperadas(12) = .T. + laLineasExclusion_Esperadas(13) = .T. + + TEXT TO lcMethod NOSHOW TEXTMERGE FLAGS 1 PRETEXT 1+2 + <> myMethod_B + *-- Code Block + <> + <> + <> + *-- Code Block + <> + <> ; + <> + *-- Code Block + <> + <> , + <> + <> + ENDTEXT + + lnLineas = ALINES( laLineas, lcMethod ) + + *-- Test + loObj.identificarBloquesDeExclusion( @laLineas, lnLineas, , @laLineasExclusion, @lnPos_Count, @laPos ) + + *-- Evaluación de resultados + THIS.Evaluate_results( @laExpected_Pos, @laPos, lnPos_Count, @laLineasExclusion_Esperadas, @laLineasExclusion ) + + ENDFUNC + + ******************************************************************************************************************************************* FUNCTION Deberia_NoEncontrarBloque_TEXT_ENDTEXT_CuandoEvaluaUnaLineaQueComienzaConUnCampoLlamado_Text_YLineaAnteriorTerminaEn_PuntoYComa LOCAL lcMethod, laLineas(1), lnLineas, laPos(1,2), lnPos_Count, laExpected_Pos(1,2) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index e2bf2eb..3b51f22 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -132,6 +132,7 @@ * 13/01/2015 FDBOZZO v1.19.41 Bug Fix scx/vcx: Detección errónea de estructuras PROCEDURE/ENDPROC cuando se usan como parámetros en LPARAMETERS (Ryan Harris) * 13/01/2015 FDBOZZO v1.19.41 Bug Fix db2: Detección errónea de tabla inválida cuando el tamaño es inferior a 328 bytes. Límite mínimo cambiado a 65 bytes. * 20/01/2015 FDBOZZO v1.19.42 Mejora: Validación de versión de Visual FoxPro, para evitar problemas ajenos a FoxBin2Prg +* 25/02/2015 FDBOZZO v1.19.42 Bug Fix scx/vcx: Procesar solo un nivel de text/endtext, ya que no se admiten más niveles (Lutz Scheffler) * * *--------------------------------------------------------------------------------------------------- @@ -192,6 +193,7 @@ * 06/01/2015 Jim Nelson Mejora v1.19.39: Permitir configurar la barra de progreso para que solamente aparezca cuando se procesan múltiples archivos y no cuando se procesa solo 1 (Agregado en v1.19.40) * 06/01/2015 Mike Potjer Reporte bug db2: [Error 12, Variable "TCOUTPUTFILE" is not found] cuando DBF_Conversion_Support=4 y el archivo de salida es igual al generado (Agregado en v1.19.40) * 13/01/2015 Ryan Harris Reporte bug vcx/scx v1.19.40: Detección errónea de estructuras PROCEDURE/ENDPROC cuando se usan como parámetros LPARAMETERS en línea aparte (Arreglado en v1.19.41) +* 25/02/2015 Lutz Scheffler Reporte de Bug scx/vcx v1.19.41: Procesar solo un nivel de text/endtext, ya que no se admiten más niveles (Arreglado en v1.19.42) * * *--------------------------------------------------------------------------------------------------- @@ -1925,7 +1927,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *ENDIF IF VERSION(5) < 900 OR INT( VAL( SUBSTR( VERSION(4), RAT('.', VERSION(4)) + 1 ) ) ) < 3504 - ERROR C_INCORRECT_VFP9_VERSION__MISSING_SP1_LOC + ERROR C_INCORRECT_VFP9_VERSION__MISSING_SP1_LOC ENDIF *-- Determino el tipo de InputFile (Archivo o Directorio) @@ -2501,7 +2503,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- VERIFICO SI HAY ARCHIVO DE CONFIGURACIÓN SECUNDARIO .EvaluarConfiguracion() - + IF .n_ForceWriteIfReadOnly = 1 THEN lcForceAttribs = lcForceAttribs + '-R' ENDIF @@ -4075,7 +4077,7 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION IF tnIniFin = 1 *-- TOKENS DE INICIO - IF UPPER( LEFT( lcLine, LEN(ta_ID_Bloques(X,1)) ) ) == ta_ID_Bloques(X,1) + IF UPPER( LEFT( lcLine, ta_ID_Bloques(X,3) ) ) == ta_ID_Bloques(X,1) *-- Evaluar casos especiales lcWord = UPPER( ALLTRIM(GETWORDNUM(lcLine,1) ) ) @@ -4096,7 +4098,7 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION ENDIF ELSE *-- TOKENS DE FIN - IF LEFT( UPPER( lcLine ), tnLen_IDFinBQ ) == ta_ID_Bloques(X,2) && Fin de bloque encontrado (#ENDI, ENDTEXT, etc) + IF LEFT( UPPER( lcLine ), ta_ID_Bloques(X,4) ) == ta_ID_Bloques(X,2) && Fin de bloque encontrado (#ENDI, ENDTEXT, etc) *-- Evaluar casos especiales lcWord = UPPER( ALLTRIM(GETWORDNUM(lcLine,1) ) ) @@ -4284,7 +4286,7 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * tnTimeStamp (v! IN ) Timestamp en formato numérico *--------------------------------------------------------------------------------------------------- - LPARAMETERS tnTimeStamp + LPARAMETERS tnTimestamp *-- CONVIERTE UN DATO TIMESTAMP NUMERICO USADO POR LOS ARCHIVOS SCX/VCX/etc. EN TIPO DATETIME TRY LOCAL lcTimeStamp,lnYear,lnMonth,lnDay,lnHour,lnMinutes,lnSeconds,lcTime,lnHour,ltTimeStamp,lnResto ; @@ -4292,7 +4294,7 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION lcTimeStamp_Ret = '' - IF EMPTY(tnTimeStamp) + IF EMPTY(tnTimestamp) IF THIS.lFileMode IF ADIR(laDirInfo,THIS.c_InputFile)=0 EXIT @@ -4310,15 +4312,15 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION EXIT ENDIF - tnTimeStamp = THIS.n_ClassTimeStamp + tnTimestamp = THIS.n_ClassTimeStamp - IF EMPTY(tnTimeStamp) + IF EMPTY(tnTimestamp) EXIT ENDIF ENDIF *-- YYYY YYYM MMMD DDDD HHHH HMMM MMMS SSSS - lnResto = tnTimeStamp + lnResto = tnTimestamp lnYear = INT( lnResto / 2**25 + 1980) lnResto = lnResto % 2**25 lnMonth = INT( lnResto / 2**21 ) @@ -4524,15 +4526,19 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' loLang = _SCREEN.o_FoxBin2Prg_Lang DIMENSION taLineasExclusion(tnCodeLines), taBloquesExclusion(1,2) - STORE 0 TO tnBloquesExclusion, lnPrimerID, I, X, lnLen_IDFinBQ + STORE 0 TO tnBloquesExclusion, lnPrimerID, I, X IF tnCodeLines > 1 IF EMPTY(ta_ID_Bloques) - DIMENSION ta_ID_Bloques(2,2) + DIMENSION ta_ID_Bloques(2,4) ta_ID_Bloques(1,1) = '#IF' ta_ID_Bloques(1,2) = '#ENDI' + ta_ID_Bloques(1,3) = LEN( ta_ID_Bloques(1,1) ) + ta_ID_Bloques(1,4) = LEN( ta_ID_Bloques(1,2) ) ta_ID_Bloques(2,1) = 'TEXT' ta_ID_Bloques(2,2) = 'ENDT' + ta_ID_Bloques(2,3) = LEN( ta_ID_Bloques(2,1) ) + ta_ID_Bloques(2,4) = LEN( ta_ID_Bloques(2,2) ) lnID_Bloques_Count = ALEN( ta_ID_Bloques, 1 ) ENDIF @@ -4563,7 +4569,6 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION IF lnPrimerID > 0 && Se ha identificado un ID de bloque excluyente tnBloquesExclusion = tnBloquesExclusion + 1 - lnLen_IDFinBQ = LEN( ta_ID_Bloques(lnPrimerID,2) ) DIMENSION taBloquesExclusion(tnBloquesExclusion,2) taBloquesExclusion(tnBloquesExclusion,1) = I taLineasExclusion(I) = .T. @@ -4579,12 +4584,12 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION ENDIF DO CASE - CASE .elTextoEvaluadoEsElTokenIndicado( @lcLine, @ta_ID_Bloques, lnLen_IDFinBQ, X, 1 ) ; + CASE lnPrimerID = 1 AND .elTextoEvaluadoEsElTokenIndicado( @lcLine, @ta_ID_Bloques, 0, X, 1 ) ; AND NOT .currentLineIsPreviousLineContinuation( @taCodeLines, I ) - *-- Busca el primer marcador (#IF o TEXT) + *-- Busca el primer marcador (#IF) NOTA: No busco [TEXT] porque no se pueden anidar. lnAnidamientos = lnAnidamientos + 1 - CASE .elTextoEvaluadoEsElTokenIndicado( @lcLine, @ta_ID_Bloques, lnLen_IDFinBQ, X, 2 ) + CASE .elTextoEvaluadoEsElTokenIndicado( @lcLine, @ta_ID_Bloques, 0, X, 2 ) *-- Busca el segundo marcador (#ENDIF o ENDTEXT) lnAnidamientos = lnAnidamientos - 1 @@ -4616,7 +4621,7 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION FINALLY RELEASE taCodeLines, tnCodeLines, ta_ID_Bloques, taLineasExclusion, tnBloquesExclusion, taBloquesExclusion, loLang ; - , lnBloques, I, X, lnPrimerID, lnLen_IDFinBQ, lnID_Bloques_Count, lcWord, lnAnidamientos, lcLine, lcPrevLine + , lnBloques, I, X, lnPrimerID, lnID_Bloques_Count, lcWord, lnAnidamientos, lcLine, lcPrevLine ENDTRY RETURN @@ -4732,11 +4737,11 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION FUNCTION RowTimeStamp(ltDateTime) * Generate a FoxPro 3.0-style row timestamp *-- CONVIERTE UN DATO TIPO DATETIME EN TIMESTAMP NUMERICO USADO POR LOS ARCHIVOS SCX/VCX/etc. - LOCAL lcTimeValue, tnTimeStamp + LOCAL lcTimeValue, tnTimestamp TRY IF EMPTY(ltDateTime) - tnTimeStamp = 0 + tnTimestamp = 0 EXIT ENDIF @@ -4744,7 +4749,7 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION m.ltDateTime = DATETIME() ENDIF - tnTimeStamp = ( YEAR(m.ltDateTime) - 1980) * 2^25 ; + tnTimestamp = ( YEAR(m.ltDateTime) - 1980) * 2^25 ; + MONTH(m.ltDateTime) * 2^21 ; + DAY(m.ltDateTime) * 2^16 ; + HOUR(m.ltDateTime) * 2^11 ; @@ -4752,7 +4757,7 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION + SEC(m.ltDateTime) ENDTRY - RETURN INT(tnTimeStamp) + RETURN INT(tnTimestamp) ENDFUNC From d5e7165858fc2d278ce4459cb827404d33f11367 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 1 Mar 2015 18:13:52 +0100 Subject: [PATCH 009/123] =?UTF-8?q?Changeset:=20651=20-=20Actualizaci?= =?UTF-8?q?=C3=B3n=20del=20proyecto=20a=20v1.19.42?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.pj2 | 8 +++++++- foxbin2prg.pjt | Bin 676814 -> 701424 bytes foxbin2prg.pjx | Bin 9123 -> 9513 bytes 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2 index be83bd0..085a6e4 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 = "41" +_Revision = "42" _LanguageID = "1034" _AutoIncrement = "0" * @@ -93,6 +93,8 @@ WITH loProject.FILES .ADD('props_xmltable.txt') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="0" ID="0" ObjRev="0" /> .ADD('readme.txt') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="0" ID="0" ObjRev="0" /> .ADD('tests\foxunit_path.txt') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="0" ID="0" ObjRev="0" /> + .ADD('tests\ft__foxbin2prg__c_conversor_bin_a_prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" /> + .ADD('tests\ft__foxbin2prg__c_conversor_prg_a_bin.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" /> .ADD('tests\ft__foxbin2prg__c_conversor_prg_a_dbc.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" /> .ADD('tests\ft__foxbin2prg__c_conversor_prg_a_dbf.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" /> .ADD('tests\ft__foxbin2prg__c_conversor_prg_a_mnx.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" /> @@ -101,6 +103,7 @@ WITH loProject.FILES .ADD('tests\ut__foxbin2prg__c_conversor_base__dobackup.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" /> .ADD('tests\ut__foxbin2prg__c_conversor_base__get_separatedpropandvalue.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" /> .ADD('tests\ut__foxbin2prg__c_conversor_base__gettimestamp.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" /> + .ADD('tests\ut__foxbin2prg__c_conversor_base__identificarbloquesdecodigo.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" /> .ADD('tests\ut__foxbin2prg__c_conversor_base__identificarbloquesdeexclusion.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" /> .ADD('tests\ut__foxbin2prg__c_conversor_base__normalizarvalorpropiedad.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" /> .ADD('tests\ut__foxbin2prg__c_conversor_base__rowtimestamp.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" /> @@ -122,6 +125,8 @@ WITH loProject.FILES * .ITEM(lcCurdir + 'readme.txt').Exclude = .T. .ITEM(lcCurdir + 'tests\foxunit_path.txt').Exclude = .T. + .ITEM(lcCurdir + 'tests\ft__foxbin2prg__c_conversor_bin_a_prg.prg').Exclude = .T. + .ITEM(lcCurdir + 'tests\ft__foxbin2prg__c_conversor_prg_a_bin.prg').Exclude = .T. .ITEM(lcCurdir + 'tests\ft__foxbin2prg__c_conversor_prg_a_dbc.prg').Exclude = .T. .ITEM(lcCurdir + 'tests\ft__foxbin2prg__c_conversor_prg_a_dbf.prg').Exclude = .T. .ITEM(lcCurdir + 'tests\ft__foxbin2prg__c_conversor_prg_a_mnx.prg').Exclude = .T. @@ -130,6 +135,7 @@ WITH loProject.FILES .ITEM(lcCurdir + 'tests\ut__foxbin2prg__c_conversor_base__dobackup.prg').Exclude = .T. .ITEM(lcCurdir + 'tests\ut__foxbin2prg__c_conversor_base__get_separatedpropandvalue.prg').Exclude = .T. .ITEM(lcCurdir + 'tests\ut__foxbin2prg__c_conversor_base__gettimestamp.prg').Exclude = .T. + .ITEM(lcCurdir + 'tests\ut__foxbin2prg__c_conversor_base__identificarbloquesdecodigo.prg').Exclude = .T. .ITEM(lcCurdir + 'tests\ut__foxbin2prg__c_conversor_base__identificarbloquesdeexclusion.prg').Exclude = .T. .ITEM(lcCurdir + 'tests\ut__foxbin2prg__c_conversor_base__normalizarvalorpropiedad.prg').Exclude = .T. .ITEM(lcCurdir + 'tests\ut__foxbin2prg__c_conversor_base__rowtimestamp.prg').Exclude = .T. diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index 8d4a53a352b9297e5369b38dc8a9e692ad653cba..a59905a0cce9289af2fdd85a7746e41245be0d8b 100644 GIT binary patch delta 45044 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 VyXUvnyBB^q%PYT>%uk@-`M*aGx5oeg delta 28897 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 delta 255 zcmZ4Kwb-52fS-}qb|dRn77lZB69XedGt!>un9b4VE8RCd7n%J(+>U34zf&)oO>jJ+KnxM78kP1PyQgUI=Np?ki*o{*xc08 z&~Wks85ypf&l!PAOw5340_2@13(A{vF24X2QZP3#nB2$>*0p)E{9GnBpe8c|bD$;( h-f}|*2G=@}(+q$jAg6th7n(dlnP>A1B`!urDFAt%M9TmG From 58595c830477891c6813ac283de2f2ee5d0f0a57 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 1 Mar 2015 19:34:10 +0100 Subject: [PATCH 010/123] =?UTF-8?q?Changeset:=20652=20Actualizaci=C3=B3n?= =?UTF-8?q?=20del=20archivo=20de=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 5d34353..d3aba30 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -2,8 +2,8 @@ Lparameters toUpdateInfo Local lcNote With toUpdateInfo - .VersionNumber = 'v1.19.41' - .VersionDate = Date(2015,01,18) + .VersionNumber = 'v1.19.42' + .VersionDate = Date(2015,03,01) .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/03/01 v1.19.42 +- Added VFP 9 SP1 runtime validation +- Bug Fix: Broken SourceSafe compatibility because an error is thrown when querying for file support (Tuvia Vinitsky) +- Bug Fix scx/vcx: Process only one TEXT/ENDTEXT nesting level because TEXT/ENDTEXT can't be nested (Lutz Scheffler) + 2015/01/18 v1.19.41 - Bug Fix db2: Erroneous detection of Invalid Table when size is less than 328 bytes. Lower limit was changed to 65 bytes. - Bug Fix vcx/scx: Erroneous detection of PROCEDURE/ENDPROC structures when used as parameters of LPARAMETERS and start in new line (Ryan Harris) From 3e704c439d27ef3eb21a4f06bdac424dd86ffb91 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Mon, 2 Mar 2015 00:59:54 +0100 Subject: [PATCH 011/123] =?UTF-8?q?Changeset:=20654=20-=20Mejorada=20la=20?= =?UTF-8?q?informaci=C3=B3n=20de=20algunos=20errores=20para=20intentar=20d?= =?UTF-8?q?escribir=20la=20ubicaci=C3=B3n=20con=20m=C3=A1s=20precisi=C3=B3?= =?UTF-8?q?n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 112 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 100 insertions(+), 12 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 3b51f22..65e6536 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -2412,6 +2412,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM DO CASE CASE ATC('-SHOWMSG', ('-' + tcType)) >= 1 + THIS.writeErrorLog_Flush() DO CASE CASE lnCodError = 1799 && Conversion Cancelled @@ -3174,7 +3175,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM lcError = 'Error ' + TRANSFORM(toEx.ERRORNO) + ', ' + toEx.MESSAGE + CR_LF ; + toEx.PROCEDURE + ', ' + TRANSFORM(toEx.LINENO) + CR_LF - IF NOT EMPTY(toEx.LINECONTENTS) + IF NOT EMPTY(toEx.LINECONTENTS) AND toEx.ErrorNo <> 1098 lcError = lcError + toEx.LINECONTENTS + CR_LF ENDIF @@ -3739,6 +3740,7 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -3761,6 +3763,7 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION + [] ; + [] ; + [] ; + + [] ; + [] ; + [] @@ -3795,6 +3798,7 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION c_OriginalFileName = '' c_ClaseActual = '' oFSO = NULL + n_Methods_LineNo = 0 && Número de línea del error dentro de "Methods" @@ -4605,6 +4609,7 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION *ERROR 'No se ha encontrado el marcador de fin [' + ta_ID_Bloques(lnPrimerID,2) ; + '] que cierra al marcador de inicio [' + ta_ID_Bloques(lnPrimerID,1) ; + '] de la línea ' + TRANSFORM(taBloquesExclusion(tnBloquesExclusion,1)) + .n_Methods_LineNo = taBloquesExclusion(tnBloquesExclusion,1) ERROR (TEXTMERGE(loLang.C_END_MARKER_NOT_FOUND_LOC)) ENDIF ENDIF @@ -4761,6 +4766,10 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION ENDFUNC + PROCEDURE set_UserValue + LPARAMETERS toEx as Exception + ENDPROC + PROCEDURE sortPropsAndValues_SetAndGetSCXPropNames *-------------------------------------------------------------------------------------------------------------- @@ -7496,6 +7505,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin _MEMBERDATA = [] ; + [] ; + [] + c_Type = 'VC2' PROCEDURE Convertir @@ -7851,6 +7861,7 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin _MEMBERDATA = [] ; + [] ; + [] + c_Type = 'SC2' PROCEDURE Convertir @@ -8211,6 +8222,7 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin + [] ; + [] ; + [] + c_Type = 'PJ2' @@ -9011,6 +9023,7 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin + [] ; + [] ; + [] + c_Type = 'FR2' PROCEDURE Convertir @@ -9452,6 +9465,7 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin + [] ; + [] ; + [] + c_Type = 'DB2' PROCEDURE Convertir @@ -9750,6 +9764,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin + [] ; + [] ; + [] + c_Type = 'DC2' PROCEDURE Convertir @@ -9930,9 +9945,9 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin + [] ; + [] - - n_MenuType = 0 - c_MenuLocation = '' + c_Type = 'MN2' + n_MenuType = 0 + c_MenuLocation = '' PROCEDURE Convertir @@ -10154,7 +10169,6 @@ DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE + [] - PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) @@ -10236,7 +10250,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE WITH THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG' lnMethodCount = tnMethodCount .Method2Array( toRegObj.METHODS, @taMethods, @taCode, '', @tnMethodCount ; - , @taPropsAndComments, tnPropsAndComments_Count, @taProtected, tnProtected_Count, @toFoxBin2Prg ) + , @taPropsAndComments, tnPropsAndComments_Count, @taProtected, tnProtected_Count, @toFoxBin2Prg, @toRegObj ) *-- Ubico los métodos protegidos y les cambio la definición. *-- Los métodos se deben generar con la ruta completa, porque si no es imposible saber a que objeto corresponden, @@ -10762,6 +10776,56 @@ DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE ENDPROC + PROCEDURE set_UserValue + LPARAMETERS toEx as Exception + + LOCAL lcMethods, I, lcLine, laCodeLines(1), lcMethod, lcLocation + STORE '' TO lcMethods, lcLine, laCodeLines, lcMethod, lcLocation + + toEx.UserValue = toEx.UserValue + CR_LF + + IF INLIST(THIS.c_Type, 'SCX', 'VCX') THEN + lcMethods = Methods + toEx.UserValue = toEx.UserValue + 'Error location ' + '..............................' + CR_LF + + IF NOT EMPTY(Parent) + lcLocation = lcLocation + Parent + '.' + ENDIF + + lcLocation = lcLocation + ObjName + + *-- Busco el Procedure si hay un n_Methods_LineNo + ALINES(laCodeLines, lcMethods) + + FOR I = THIS.n_Methods_LineNo TO 1 STEP -1 + lcLine = LTRIM( laCodeLines(I), 0, ' ', CHR(9) ) + + DO CASE + CASE LEFT(lcLine, 10) == 'PROCEDURE ' + lcMethod = ALLTRIM( SUBSTR( lcLine, 11) ) + EXIT + + CASE LEFT(lcLine, 9) == 'FUNCTION ' + lcMethod = ALLTRIM( SUBSTR( lcLine, 10) ) + EXIT + + ENDCASE + + ENDFOR + + IF EMPTY(lcMethod) THEN + lcLocation = 'Class: ' + lcLocation + ELSE + lcLocation = 'Method: ' + lcLocation + '.' + lcMethod + ENDIF + + toEx.UserValue = toEx.UserValue + lcLocation + CR_LF + ENDIF + + toEx.UserValue = toEx.UserValue + 'Recno: ' + TRANSFORM(RECNO()) + CR_LF + toEx.UserValue = toEx.UserValue + '.............................................' + CR_LF + ENDPROC + PROCEDURE SortMethod LPARAMETERS tcMethod, taMethods, taCode, tcSorted, tnMethodCount, taPropsAndComments, tnPropsAndComments_Count ; @@ -10834,7 +10898,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE PROCEDURE Method2Array LPARAMETERS tcMethod, taMethods, taCode, tcSorted, tnMethodCount, taPropsAndComments, tnPropsAndComments_Count ; - , taProtected, tnProtected_Count, toFoxBin2Prg + , taProtected, tnProtected_Count, toFoxBin2Prg, toRegObj *-- 29/10/2013 Fernando D. Bozzo *-- Se tiene en cuenta la posibilidad de que haya un PROC/ENDPROC dentro de un TEXT/ENDTEXT *-- cuando es usado en un generador de código o similar. @@ -11851,6 +11915,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg #IF .F. LOCAL THIS AS c_conversor_vcx_a_prg OF 'FOXBIN2PRG.PRG' #ENDIF + c_Type = 'VCX' PROCEDURE Convertir @@ -12039,7 +12104,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg lnMethodCount = 0 .Method2Array( loRegClass.METHODS, @laMethods, @laCode, '', @lnMethodCount ; - , @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count, @toFoxBin2Prg ) + , @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count, @toFoxBin2Prg, @loRegClass ) .get_CLASS_METHODS( @lnMethodCount, @laMethods, @laCode, @laProtected, @laPropsAndComments ) @@ -12127,6 +12192,8 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg CATCH TO toEx + THIS.set_UserValue(@toEx) + IF THIS.l_Debug AND _VFP.STARTMODE = 0 SET STEP ON ENDIF @@ -12154,6 +12221,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg #IF .F. LOCAL THIS AS c_conversor_scx_a_prg OF 'FOXBIN2PRG.PRG' #ENDIF + c_Type = 'SCX' PROCEDURE Convertir @@ -12359,7 +12427,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg lnMethodCount = 0 .Method2Array( loRegClass.METHODS, @laMethods, @laCode, '', @lnMethodCount ; - , @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count, @toFoxBin2Prg ) + , @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count, @toFoxBin2Prg, @loRegClass ) .get_CLASS_METHODS( @lnMethodCount, @laMethods, @laCode, @laProtected, @laPropsAndComments ) @@ -12449,6 +12517,8 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg CATCH TO toEx + THIS.set_UserValue(@toEx) + IF THIS.l_Debug AND _VFP.STARTMODE = 0 SET STEP ON ENDIF @@ -12476,6 +12546,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg #IF .F. LOCAL THIS AS c_conversor_pjx_a_prg OF 'FOXBIN2PRG.PRG' #ENDIF + c_Type = 'PJX' PROCEDURE Convertir @@ -12783,12 +12854,14 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg CATCH TO toEx + THIS.set_UserValue(@toEx) + lnCodError = toEx.ERRORNO DO CASE CASE lnCodError = 2062 && The specified key already exists ==> loProject.ADD( loReg, loReg.NAME ) *toEx.USERVALUE = 'Archivo duplicado: ' + loReg.NAME - toEx.USERVALUE = loLang.C_DUPLICATED_FILE_LOC + ': ' + loReg.NAME + toEx.USERVALUE = toEx.USERVALUE + loLang.C_DUPLICATED_FILE_LOC + ': ' + loReg.NAME ENDCASE IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -12815,6 +12888,7 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg #IF .F. LOCAL THIS AS c_conversor_pjm_a_prg OF 'FOXBIN2PRG.PRG' #ENDIF + c_Type = 'PJM' PROCEDURE Convertir @@ -13161,12 +13235,14 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg CATCH TO toEx + THIS.set_UserValue(@toEx) + lnCodError = toEx.ERRORNO DO CASE CASE lnCodError = 2062 && The specified key already exists ==> loProject.ADD( loReg, loReg.NAME ) *toEx.USERVALUE = 'Archivo duplicado: ' + loReg.NAME - toEx.USERVALUE = loLang.C_DUPLICATED_FILE_LOC + ': ' + loReg.NAME + toEx.USERVALUE = toEx.USERVALUE + loLang.C_DUPLICATED_FILE_LOC + ': ' + loReg.NAME ENDCASE IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -13197,6 +13273,7 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg *_MEMBERDATA = [] ; + [] ; + [] + c_Type = 'FRX' @@ -13338,6 +13415,8 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg CATCH TO toEx + THIS.set_UserValue(@toEx) + IF THIS.l_Debug AND _VFP.STARTMODE = 0 SET STEP ON ENDIF @@ -13365,6 +13444,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg #IF .F. LOCAL THIS AS c_conversor_dbf_a_prg OF 'FOXBIN2PRG.PRG' #ENDIF + c_Type = 'DBF' PROCEDURE Convertir @@ -13480,6 +13560,8 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg CATCH TO toEx + THIS.set_UserValue(@toEx) + DO CASE CASE toEx.ERRORNO = 13 && Alias not found *toEx.USERVALUE = 'WARNING!!' + CR_LF ; @@ -13488,7 +13570,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg + '¡¡ATENCIÓN!!' + CR_LF ; + 'ASEGÚRESE DE QUE NO ESTÁ USANDO UN ALIAS DE TABLA EN LAS EXPRESIONES DE LOS ÍNDICES!! (ej: index on ' ; + UPPER(JUSTSTEM(THIS.c_InputFile)) + '.campo tag nombreclave)' - toEx.USERVALUE = TEXTMERGE(loLang.C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC) + toEx.USERVALUE = toEx.USERVALUE + TEXTMERGE(loLang.C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC) *!* CASE toEx.ErrorNo = 1976 && Cannot resolve backlink *!* toEx.UserValue = 'WARNING!!' + CR_LF ; @@ -13534,6 +13616,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg #IF .F. LOCAL THIS AS c_conversor_dbc_a_prg OF 'FOXBIN2PRG.PRG' #ENDIF + c_Type = 'DBC' PROCEDURE Convertir @@ -13581,6 +13664,8 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg CATCH TO toEx + THIS.set_UserValue(@toEx) + IF THIS.l_Debug AND _VFP.STARTMODE = 0 SET STEP ON ENDIF @@ -13604,6 +13689,7 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg #IF .F. LOCAL THIS AS c_conversor_mnx_a_prg OF 'FOXBIN2PRG.PRG' #ENDIF + c_Type = 'MNX' PROCEDURE Convertir @@ -13658,6 +13744,8 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg CATCH TO toEx + THIS.set_UserValue(@toEx) + IF THIS.l_Debug AND _VFP.STARTMODE = 0 SET STEP ON ENDIF From b14d8f74b1a5611c66743a5c7bd591a80879af1f Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Mon, 2 Mar 2015 01:01:27 +0100 Subject: [PATCH 012/123] =?UTF-8?q?Changeset:=20655=20-=20Actualizaci?= =?UTF-8?q?=C3=B3n=20del=20archivo=20de=20versiones?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index d3aba30..512e7ea 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -21,6 +21,7 @@ Change History ------------------------------------------------------------- - Added VFP 9 SP1 runtime validation - Bug Fix: Broken SourceSafe compatibility because an error is thrown when querying for file support (Tuvia Vinitsky) - Bug Fix scx/vcx: Process only one TEXT/ENDTEXT nesting level because TEXT/ENDTEXT can't be nested (Lutz Scheffler) +- Make some error descriptions more informative and precise (Lutz Scheffler) 2015/01/18 v1.19.41 - Bug Fix db2: Erroneous detection of Invalid Table when size is less than 328 bytes. Lower limit was changed to 65 bytes. From 657de7c56850d8883b8006ff3d8178bfef769987 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Mon, 2 Mar 2015 01:05:17 +0100 Subject: [PATCH 013/123] =?UTF-8?q?Changeset:=20656=20Correcci=C3=B3n=20hi?= =?UTF-8?q?storial=20y=20cr=C3=A9ditos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 2 ++ 1 file changed, 2 insertions(+) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 65e6536..85e8f3a 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -133,6 +133,7 @@ * 13/01/2015 FDBOZZO v1.19.41 Bug Fix db2: Detección errónea de tabla inválida cuando el tamaño es inferior a 328 bytes. Límite mínimo cambiado a 65 bytes. * 20/01/2015 FDBOZZO v1.19.42 Mejora: Validación de versión de Visual FoxPro, para evitar problemas ajenos a FoxBin2Prg * 25/02/2015 FDBOZZO v1.19.42 Bug Fix scx/vcx: Procesar solo un nivel de text/endtext, ya que no se admiten más niveles (Lutz Scheffler) +* 25/02/2015 FDBOZZO v1.19.42 Mejora: Hacer algunos mensajes de error más descriptivos (Lutz Scheffler) * * *--------------------------------------------------------------------------------------------------- @@ -194,6 +195,7 @@ * 06/01/2015 Mike Potjer Reporte bug db2: [Error 12, Variable "TCOUTPUTFILE" is not found] cuando DBF_Conversion_Support=4 y el archivo de salida es igual al generado (Agregado en v1.19.40) * 13/01/2015 Ryan Harris Reporte bug vcx/scx v1.19.40: Detección errónea de estructuras PROCEDURE/ENDPROC cuando se usan como parámetros LPARAMETERS en línea aparte (Arreglado en v1.19.41) * 25/02/2015 Lutz Scheffler Reporte de Bug scx/vcx v1.19.41: Procesar solo un nivel de text/endtext, ya que no se admiten más niveles (Arreglado en v1.19.42) +* 25/02/2015 Lutz Scheffler Mejora v1.19.41: Hacer algunos mensajes de error más descriptivos (Agregado en v1.19.42) * * *--------------------------------------------------------------------------------------------------- From 43cf365c78a4ea9550e39fbf2ae94db2e4469555 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Mon, 2 Mar 2015 01:18:44 +0100 Subject: [PATCH 014/123] =?UTF-8?q?Changeset:=20658=20-=20Indicaci=C3=B3n?= =?UTF-8?q?=20del=20n=C3=BAmero=20de=20l=C3=ADnea=20real=20y=20contenido?= =?UTF-8?q?=20de=20la=20misma?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 85e8f3a..b0f4f62 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -10781,8 +10781,9 @@ DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE PROCEDURE set_UserValue LPARAMETERS toEx as Exception - LOCAL lcMethods, I, lcLine, laCodeLines(1), lcMethod, lcLocation + LOCAL lcMethods, I, lcLine, laCodeLines(1), lcMethod, lcLocation, lnErrorLine STORE '' TO lcMethods, lcLine, laCodeLines, lcMethod, lcLocation + STORE 0 TO lnErrorLine, I toEx.UserValue = toEx.UserValue + CR_LF @@ -10805,10 +10806,12 @@ DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE DO CASE CASE LEFT(lcLine, 10) == 'PROCEDURE ' lcMethod = ALLTRIM( SUBSTR( lcLine, 11) ) + lnErrorLine = THIS.n_Methods_LineNo - I EXIT CASE LEFT(lcLine, 9) == 'FUNCTION ' lcMethod = ALLTRIM( SUBSTR( lcLine, 10) ) + lnErrorLine = THIS.n_Methods_LineNo - I EXIT ENDCASE @@ -10821,7 +10824,12 @@ DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE lcLocation = 'Method: ' + lcLocation + '.' + lcMethod ENDIF + IF lnErrorLine > 0 THEN + lcLocation = lcLocation + ', Line ' + TRANSFORM(lnErrorLine) + ENDIF + toEx.UserValue = toEx.UserValue + lcLocation + CR_LF + toEx.UserValue = toEx.UserValue + '> ' + laCodeLines(THIS.n_Methods_LineNo) + CR_LF ENDIF toEx.UserValue = toEx.UserValue + 'Recno: ' + TRANSFORM(RECNO()) + CR_LF From 262f5bb591292a49a9f79a3431842a1645f8e728 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Mon, 2 Mar 2015 01:26:13 +0100 Subject: [PATCH 015/123] =?UTF-8?q?Changeset:=20660=20-=20Agregado=20cr?= =?UTF-8?q?=C3=A9dito=20para=20Tuvia=20Vinitsky?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 2 ++ 1 file changed, 2 insertions(+) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index b0f4f62..41640c0 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -132,6 +132,7 @@ * 13/01/2015 FDBOZZO v1.19.41 Bug Fix scx/vcx: Detección errónea de estructuras PROCEDURE/ENDPROC cuando se usan como parámetros en LPARAMETERS (Ryan Harris) * 13/01/2015 FDBOZZO v1.19.41 Bug Fix db2: Detección errónea de tabla inválida cuando el tamaño es inferior a 328 bytes. Límite mínimo cambiado a 65 bytes. * 20/01/2015 FDBOZZO v1.19.42 Mejora: Validación de versión de Visual FoxPro, para evitar problemas ajenos a FoxBin2Prg +* 22/01/2015 FDBOZZO v1.19.42 Bug Fix: Compatibilidad con SourceSafe rota porque se genera un error al realizar la consulta para soporte de archivo (Tuvia Vinitsky) * 25/02/2015 FDBOZZO v1.19.42 Bug Fix scx/vcx: Procesar solo un nivel de text/endtext, ya que no se admiten más niveles (Lutz Scheffler) * 25/02/2015 FDBOZZO v1.19.42 Mejora: Hacer algunos mensajes de error más descriptivos (Lutz Scheffler) * @@ -194,6 +195,7 @@ * 06/01/2015 Jim Nelson Mejora v1.19.39: Permitir configurar la barra de progreso para que solamente aparezca cuando se procesan múltiples archivos y no cuando se procesa solo 1 (Agregado en v1.19.40) * 06/01/2015 Mike Potjer Reporte bug db2: [Error 12, Variable "TCOUTPUTFILE" is not found] cuando DBF_Conversion_Support=4 y el archivo de salida es igual al generado (Agregado en v1.19.40) * 13/01/2015 Ryan Harris Reporte bug vcx/scx v1.19.40: Detección errónea de estructuras PROCEDURE/ENDPROC cuando se usan como parámetros LPARAMETERS en línea aparte (Arreglado en v1.19.41) +* 22/01/2015 Tuvia Vinitsky Bug Fix v1.19.41: Compatibilidad con SourceSafe rota porque se genera un error al realizar la consulta para soporte de archivo (Arreglado en v1.19.42) * 25/02/2015 Lutz Scheffler Reporte de Bug scx/vcx v1.19.41: Procesar solo un nivel de text/endtext, ya que no se admiten más niveles (Arreglado en v1.19.42) * 25/02/2015 Lutz Scheffler Mejora v1.19.41: Hacer algunos mensajes de error más descriptivos (Agregado en v1.19.42) * From f6e4d9712851b2109012f421330c2b42e015f123 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Tue, 3 Mar 2015 20:55:30 +0100 Subject: [PATCH 016/123] Changeset: 661 - Permitir definir el archivo de entrada con un path relativo (Lutz Scheffler) --- FoxBin2PRGVersionFile.txt | 3 ++- foxbin2prg.prg | 23 ++++++++++++++++------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 512e7ea..9a25bee 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -21,7 +21,8 @@ Change History ------------------------------------------------------------- - Added VFP 9 SP1 runtime validation - Bug Fix: Broken SourceSafe compatibility because an error is thrown when querying for file support (Tuvia Vinitsky) - Bug Fix scx/vcx: Process only one TEXT/ENDTEXT nesting level because TEXT/ENDTEXT can't be nested (Lutz Scheffler) -- Make some error descriptions more informative and precise (Lutz Scheffler) +- Feature: Make some error descriptions more informative and precise (Lutz Scheffler) +- Feature: Allow specifying inputFile with relative path (Lutz Scheffler) 2015/01/18 v1.19.41 - Bug Fix db2: Erroneous detection of Invalid Table when size is less than 328 bytes. Lower limit was changed to 65 bytes. diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 41640c0..ca5b652 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -135,6 +135,7 @@ * 22/01/2015 FDBOZZO v1.19.42 Bug Fix: Compatibilidad con SourceSafe rota porque se genera un error al realizar la consulta para soporte de archivo (Tuvia Vinitsky) * 25/02/2015 FDBOZZO v1.19.42 Bug Fix scx/vcx: Procesar solo un nivel de text/endtext, ya que no se admiten más niveles (Lutz Scheffler) * 25/02/2015 FDBOZZO v1.19.42 Mejora: Hacer algunos mensajes de error más descriptivos (Lutz Scheffler) +* 03/03/2015 FDBOZZO v1.19.42 Mejora: Permitir definir el archivo de entrada con un path relativo (Lutz Scheffler) * * *--------------------------------------------------------------------------------------------------- @@ -198,6 +199,7 @@ * 22/01/2015 Tuvia Vinitsky Bug Fix v1.19.41: Compatibilidad con SourceSafe rota porque se genera un error al realizar la consulta para soporte de archivo (Arreglado en v1.19.42) * 25/02/2015 Lutz Scheffler Reporte de Bug scx/vcx v1.19.41: Procesar solo un nivel de text/endtext, ya que no se admiten más niveles (Arreglado en v1.19.42) * 25/02/2015 Lutz Scheffler Mejora v1.19.41: Hacer algunos mensajes de error más descriptivos (Agregado en v1.19.42) +* 03/03/2015 Lutz Scheffler Mejora v1.19.41: Permitir definir el archivo de entrada con un path relativo (Agregado en v1.19.42) * * *--------------------------------------------------------------------------------------------------- @@ -1934,6 +1936,13 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ERROR C_INCORRECT_VFP9_VERSION__MISSING_SP1_LOC ENDIF + *-- Ajusto la ruta si no es absoluta + IF lcInputFile_Type == C_FILETYPE_FILE ; + AND LEFT(LTRIM(tc_InputFile),2) <> '\\' ; + AND SUBSTR(LTRIM(tc_InputFile),2,1) <> ':' THEN + tc_InputFile = FULLPATH(tc_InputFile, .c_CurDir) + ENDIF + *-- Determino el tipo de InputFile (Archivo o Directorio) IF EMPTY(lcInputFile_Type) AND NOT EMPTY(tc_InputFile) DO CASE @@ -10790,32 +10799,32 @@ DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE toEx.UserValue = toEx.UserValue + CR_LF IF INLIST(THIS.c_Type, 'SCX', 'VCX') THEN - lcMethods = Methods + lcMethods = METHODS toEx.UserValue = toEx.UserValue + 'Error location ' + '..............................' + CR_LF IF NOT EMPTY(Parent) lcLocation = lcLocation + Parent + '.' ENDIF - - lcLocation = lcLocation + ObjName - + + lcLocation = lcLocation + OBJNAME + *-- Busco el Procedure si hay un n_Methods_LineNo ALINES(laCodeLines, lcMethods) FOR I = THIS.n_Methods_LineNo TO 1 STEP -1 lcLine = LTRIM( laCodeLines(I), 0, ' ', CHR(9) ) - + DO CASE CASE LEFT(lcLine, 10) == 'PROCEDURE ' lcMethod = ALLTRIM( SUBSTR( lcLine, 11) ) lnErrorLine = THIS.n_Methods_LineNo - I EXIT - + CASE LEFT(lcLine, 9) == 'FUNCTION ' lcMethod = ALLTRIM( SUBSTR( lcLine, 10) ) lnErrorLine = THIS.n_Methods_LineNo - I EXIT - + ENDCASE ENDFOR From 0210d533f13dccbe3f1d24f52f8f7d59e51c0f38 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Tue, 3 Mar 2015 21:07:22 +0100 Subject: [PATCH 017/123] Changeset: 663 - Metadato del Dataenvironment no se genera bien cuando el Dataenvironment es renombrado --- FoxBin2PRGVersionFile.txt | 1 + foxbin2prg.prg | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 9a25bee..85a207c 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -23,6 +23,7 @@ Change History ------------------------------------------------------------- - Bug Fix scx/vcx: Process only one TEXT/ENDTEXT nesting level because TEXT/ENDTEXT can't be nested (Lutz Scheffler) - Feature: Make some error descriptions more informative and precise (Lutz Scheffler) - Feature: Allow specifying inputFile with relative path (Lutz Scheffler) +- Bug Fix scx: Metadata of Dataenvironment not properly generated when Dataenvironment is renamed 2015/01/18 v1.19.41 - Bug Fix db2: Erroneous detection of Invalid Table when size is less than 328 bytes. Lower limit was changed to 65 bytes. diff --git a/foxbin2prg.prg b/foxbin2prg.prg index ca5b652..d41cd1d 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -136,6 +136,7 @@ * 25/02/2015 FDBOZZO v1.19.42 Bug Fix scx/vcx: Procesar solo un nivel de text/endtext, ya que no se admiten más niveles (Lutz Scheffler) * 25/02/2015 FDBOZZO v1.19.42 Mejora: Hacer algunos mensajes de error más descriptivos (Lutz Scheffler) * 03/03/2015 FDBOZZO v1.19.42 Mejora: Permitir definir el archivo de entrada con un path relativo (Lutz Scheffler) +* 03/03/2015 FDBOZZO v1.19.42 Bug Fix scx: Metadato del Dataenvironment no se genera bien cuando el Dataenvironment es renombrado * * *--------------------------------------------------------------------------------------------------- @@ -6776,7 +6777,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE 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._Nombre) == 'Dataenvironment', TRANSFORM( toClase._AddObject_Count + 1 ), '' ) + toClase._RESERVED2 = IIF( .c_Type = 'VCX' OR PROPER(toClase._Class) == 'Dataenvironment', TRANSFORM( toClase._AddObject_Count + 1 ), '' ) toClase._RESERVED3 = .defined_PAM2Memo( toClase ) toClase._RESERVED4 = toClase._ClassIcon toClase._RESERVED5 = toClase._ProjectClassIcon From 37d19f8592c34fdfcdfa1414ed7740b38adcf934 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Tue, 3 Mar 2015 21:16:45 +0100 Subject: [PATCH 018/123] =?UTF-8?q?Changeset:=20665=20-=20Actualizaci?= =?UTF-8?q?=C3=B3n=20del=20archivo=20de=20versi=C3=B3n=20y=20EXE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 2 +- foxbin2prg.exe | Bin 508922 -> 514065 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 85a207c..c190130 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -18,7 +18,7 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg Change History ------------------------------------------------------------- 2015/03/01 v1.19.42 -- Added VFP 9 SP1 runtime validation +- Feature: Added VFP 9 SP1 runtime validation - Bug Fix: Broken SourceSafe compatibility because an error is thrown when querying for file support (Tuvia Vinitsky) - Bug Fix scx/vcx: Process only one TEXT/ENDTEXT nesting level because TEXT/ENDTEXT can't be nested (Lutz Scheffler) - Feature: Make some error descriptions more informative and precise (Lutz Scheffler) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 0b4964299ffdb97a5d3a410059b707862fc59347..c936c2284edca4824e0b30cdd059586af43f5451 100644 GIT binary patch delta 37866 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 bu$k))9J0bZVKaGz!NB*2tni>Vg_isu(_~Y@ delta 33079 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 Date: Wed, 4 Mar 2015 22:19:50 +0100 Subject: [PATCH 019/123] =?UTF-8?q?Changeset:=20666=20-=20Arreglo=20del=20?= =?UTF-8?q?completado=20del=20path=20relativo=20-=20Agregada=20la=20genera?= =?UTF-8?q?ci=C3=B3n=20del=20PJX/PJ2=20cuando=20se=20indica=20"file.pjx",?= =?UTF-8?q?=20"*"=20(Lutz=20Scheffler)=20-=20Mejoras=20en=20la=20traducci?= =?UTF-8?q?=C3=B3n=20al=20alem=C3=A1n=20(Lutz=20Scheffler)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.exe | Bin 514065 -> 514325 bytes foxbin2prg.prg | 52 +++++++++++++++++++++++++++++++----------------- foxbin2prg_de.h | 36 ++++++++++++++++----------------- 3 files changed, 52 insertions(+), 36 deletions(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index c936c2284edca4824e0b30cdd059586af43f5451..b986c008636f1e7fe11ec4e36bea6b62ad4ad40b 100644 GIT binary patch delta 16277 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∈D`kHu~ziO zS`Z6XVXfGXwP0sYjDI`~bA}_+AvZVZMU)AiI0@?jQn6b+#uqHiM1fg4`Vh<~YW{2; z?MCWd0Gb}slN^ll`!q$DigVE$<>7Kx{8AAIBjPk?TRJTbB*63tl{ ziUFOFC^C>J9)a_q4UV?79_)-ap%1jW+?J{vfawhr z=2Gn+nH&EIP#k!|+CMTk1_UaOp|xftPi~x!U#IY@it9SKad2>$;+a&}GdNgHGn*@p zg>@a==p4c-Pph5FoI_A=OC{(~-5_oZ!*_jt!%KA?+?d}+aXhH&;Kr&N2mZ4{?H`#N z(>o|7eCs;WJCxz5*IDu4U+&lbk-1URMR9bk>)^&8A{9rUx(;p}5~DbV)pc-VUaaC6 zRoB6dWpishU)1$*x} zx(>%d7=)4<&xpDnZXAv5&x?$&>)^&cHIA?AI=HcPs8V80T?aQFFe;86bsgMTw!ox# zj@0#VqfNHrxLVi2jeT+y$HTe~Zq$rW9Hgr46Oy^neWc=Wt?S^%!z0;~b7~(O*J3sO EKdD_(=l}o! delta 16157 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 P)g1T)S=rpfs-^!2a3d)% diff --git a/foxbin2prg.prg b/foxbin2prg.prg index d41cd1d..2e1ac33 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -137,6 +137,7 @@ * 25/02/2015 FDBOZZO v1.19.42 Mejora: Hacer algunos mensajes de error más descriptivos (Lutz Scheffler) * 03/03/2015 FDBOZZO v1.19.42 Mejora: Permitir definir el archivo de entrada con un path relativo (Lutz Scheffler) * 03/03/2015 FDBOZZO v1.19.42 Bug Fix scx: Metadato del Dataenvironment no se genera bien cuando el Dataenvironment es renombrado +* 03/03/2015 FDBOZZO v1.19.42 Mejora: Permitir usar máscaras "*" para procesar múltiples proyectos a la vez (Lutz Scheffler) * * *--------------------------------------------------------------------------------------------------- @@ -201,6 +202,7 @@ * 25/02/2015 Lutz Scheffler Reporte de Bug scx/vcx v1.19.41: Procesar solo un nivel de text/endtext, ya que no se admiten más niveles (Arreglado en v1.19.42) * 25/02/2015 Lutz Scheffler Mejora v1.19.41: Hacer algunos mensajes de error más descriptivos (Agregado en v1.19.42) * 03/03/2015 Lutz Scheffler Mejora v1.19.41: Permitir definir el archivo de entrada con un path relativo (Agregado en v1.19.42) +* 28/03/2015 Lutz Scheffler Mejora v1.19.41: Permitir usar máscaras "*" para procesar múltiples proyectos a la vez (Agregado en v1.19.42) * * *--------------------------------------------------------------------------------------------------- @@ -1938,7 +1940,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF *-- Ajusto la ruta si no es absoluta - IF lcInputFile_Type == C_FILETYPE_FILE ; + IF LEN(tc_InputFile) > 1 ; AND LEFT(LTRIM(tc_InputFile),2) <> '\\' ; AND SUBSTR(LTRIM(tc_InputFile),2,1) <> ':' THEN tc_InputFile = FULLPATH(tc_InputFile, .c_CurDir) @@ -2275,6 +2277,13 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM USE IN (SELECT("TABLABIN")) + *-- Convierto primero el proyecto + lcFile = tc_InputFile + IF .TieneSoporte_Bin2Prg( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) + lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) + .writeLog_Flush() + ENDIF + *-- Luego convierto los archivos incluidos FOR I = 1 TO lnFileCount lcFile = laFiles(I,1) @@ -2324,6 +2333,13 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF ENDFOR + *-- Convierto primero el proyecto + lcFile = tc_InputFile + IF .TieneSoporte_Bin2Prg( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) + lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) + .writeLog_Flush() + ENDIF + *-- Luego convierto los archivos incluidos FOR I = 1 TO lnFileCount lcFile = laFiles(I) @@ -22572,11 +22588,11 @@ DEFINE CLASS CL_LANG AS Custom *------------------------------------------------------------------------------------------------------------------------------------------- *-- NOTE: ES MÜSSEN ANFÜHRUNGSZEICHEN BENUTZT WERDEN, ODER SYNTAX ERRORS PASSIEREN BEIM COMPILE. SELTSAM :( *------------------------------------------------------------------------------------------------------------------------------------------- - .C_ASTERISK_EXT_NOT_ALLOWED_LOC = "* und ? Erweiterungen sind nicht erlaubt, da es gefährlich ist (binaries könnten überschrieben werden mit xx2 leeren Dateien)" - .C_BACKLINK_CANT_UPDATE_BL_LOC = "Backlink kann nicht geupdated werden" + .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" - .C_BACKUP_OF_LOC = "Mache Backup von: " - .C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC = "Kann Datei [<>] nicht generieren da sie Schreibgeschützt ist" + .C_BACKUP_OF_LOC = "Erzeuge Backup von: " + .C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC = "Kann Datei [<>] nicht generieren, da sie schreibgeschützt ist" .C_CLASSPERFILE_OPTIMIZATION_BASE_ALREADY_PROCESSED_LOC = "Optimierung: Grund Datei [<>] Schon verarbeitet, das Überspringen Verarbeitung der Datei [<>]" .C_CONFIGFILE_LOC = "Benutze Konfigurationsdatei:" .C_CONVERSION_CANCELLED_BY_USER_LOC = "Konvertierung durch den Benutzer abgebrochen" @@ -22588,16 +22604,16 @@ DEFINE CLASS CL_LANG AS Custom .C_CONVERT_FOLDER_QUESTION_LOC = "Welche Umwandlung sollte sich auf die Dateien dieses Verzeichnis durchgeführt werden?" .C_CONVERTER_UNLOAD_LOC = "Konverter wird entladen" .C_CONVERTING_FILE_LOC = "Konvertiere Datei" - .C_DATA_ERROR_CANT_PARSE_UNPAIRING_DOUBLE_QUOTES_LOC = "Datenfehler: Keine Analyse möglich da ungepaarte Anführungszeichen in Zeile <>" + .C_DATA_ERROR_CANT_PARSE_UNPAIRING_DOUBLE_QUOTES_LOC = "Datenfehler: Keine Analyse möglich, da ungepaarte Anführungszeichen in Zeile <> sind." .C_DUPLICATED_FILE_LOC = "Doppelte Datei" .C_DUPLICATED_OBJECT_LOC = "Doppelte Objekt" .C_ENDDEFINE_MARKER_NOT_FOUND_LOC = "Kann keinen Ende Marker [ENDDEFINE] in Zeile <> für die ID [<>] finden" .C_END_MARKER_NOT_FOUND_LOC = "Kann keinen Ende Marker [<>] welcher den Start Marker [<>] in Zeile <> schließt" - .C_END_OF_PROCESS_LOC = "Ende der Prozess" + .C_END_OF_PROCESS_LOC = "Ende desr Prozesses" .C_ERROR_LOC = "FEHLER" .C_ERRORS_FOUND_IN_FILE_LOC = "FEHLER IN FILE GEFUNDEN" - .C_EXTENSION_RECONFIGURATION_LOC = "Erweiterungsneukonfiguration:" - .C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES_LOC = "Externe Klassenzahl (<< toModulo._ExternalClasses_Count >>) nicht gefunden Klassen entsprechen (<< toModulo._Clases_Count >>) für Datei [<< toFoxBin2Prg.c_InputFile >>]" + .C_EXTENSION_RECONFIGURATION_LOC = "Nneukonfiguration der Erweiterungen:" &&wir wollen es mal nicht übertreiben, mit den zusammengesetzten Substantiven + .C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES_LOC = "Die Anzahl externee Klassen (<< toModulo._ExternalClasses_Count >>) entspricht nicht der der gefunden Klassen (<< toModulo._Clases_Count >>), Datei: [<< toFoxBin2Prg.c_InputFile >>]" .C_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC = "Keine externe Klasse gefunden" .C_EXTERNAL_PARAMETERS_LOC = "EXTERNE PARAMETER" .C_FIELD_NOT_FOUND_ON_FILE_STRUCTURE_LOC = "Feld [<>] nicht in der Struktur von Datei <> gefunden" @@ -22612,7 +22628,7 @@ DEFINE CLASS CL_LANG AS Custom + " 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_JUST_VFP_9_LOC = "FOXBIN2PRG ist nur für Visual FoxPro 9.0!" + .C_FOXBIN2PRG_JUST_VFP_9_LOC = "FOXBIN2PRG arbeitet nur für Visual FoxPro 9.0!" .C_FOXBIN2PRG_WARN_CAPTION_LOC = "FOXBIN2PRG: WARNUNG!" .C_GENERATED_FILE_SIZE_LOC = "Generierte Dateigröße" .C_GENERATING_BINARY_LOC = "Gene Binary" @@ -22624,31 +22640,31 @@ DEFINE CLASS CL_LANG AS Custom .C_IS_UNSUPPORTED_LOC = "wird nicht unterstützt" .C_LANGUAGE_LOC = "DE" .C_MAIN_EXECUTION_LOC = "HAUPTAUSFÜHRUNGS" - .C_MENU_NOT_IN_VFP9_FORMAT_LOC = "Menu [<>] ist NICHT in VFP 9 Format! - Bitte zuerst nach VFP 9 konvertieren mit MODIFY MENU '<>'" + .C_MENU_NOT_IN_VFP9_FORMAT_LOC = "Menu [<>] ist NICHT in VFP 9 Format! - Bitte zuerst mit MODIFY MENU '<>' nach VFP 9 konvertieren." .C_NAMES_CAPITALIZATION_PROGRAM_FOUND_LOC = "* Programm für Großschreibungssetzung [<>] gefunden" .C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC = "* Programm für Großschreibungssetzung [<>] nicht gefunden" - .C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC = "Objekt [<>] enthält nicht oReg Objekt (level <>)" + .C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC = "Objekt [<>] enthält nicht das oReg Objekt (level <>)" .C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC = "Befehl nicht erkannt. Nur SETNAME und GETNAME erlaubt." .C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC = "Die äußere Klasse nicht die innere Klassifizierung anzeigen lassen" - .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_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_PRESS_ESC_TO_CANCEL = "Drücken Sie Esc für Abbrechen" - .C_PROCEDURE_NOT_CLOSED_ON_LINE_LOC = "Procedur nicht geschlossen. Letzte Zeile des Codes muss ENDPROC sein. [<>, Recno:<>]" + .C_PROCEDURE_NOT_CLOSED_ON_LINE_LOC = "Prozcedur nicht geschlossen. Letzte Zeile des Codes muss ENDPROC sein. [<>, Recno:<>]" .C_PROCESSING_LOC = "Bearbeite Datei" .C_PROCESS_PROGRESS_LOC = "Bearbeitungsfortschritt:" .C_PROPERTY_NAME_NOT_RECOGNIZED_LOC = "Eigenschaft [<>] nicht erkannt." .C_READING_CFG_VALUES_FROM_DISK_LOC = "LESEWERTE CFG-DATEI AUF DER FESTPLATTE" .C_REPORT_NOT_IN_VFP9_FORMAT_LOC = "Report [<>] ist NICHT in VFP 9 Format! - Bitte zuerst nach VFP 9 konvertieren mit MODIFY REPORT '<>'" .C_REQUESTING_CAPITALIZATION_OF_FILE_LOC = "- Forder Großschreibung für Datei [<>] an" - .C_SCANNING_FILE_AND_DIR_INFO_LOC = "Scannen Datei- und Verzeichnisinformationen für" - .C_SOURCEFILE_LOC = "Source Datei: " + .C_SCANNING_FILE_AND_DIR_INFO_LOC = "Scanne Datei- und Verzeichnisinformationen für" + .C_SOURCEFILE_LOC = "Quell Datei: " .C_SOURCESAFE_COMPATIBILITY_MODE_LOC = "Sourcesafe-Kompatibilitätsmodus" .C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_LOC = "Fehler in Verschachtelungsstruktur. ENDPROC erwartet, aber es wurde ENDDEFINE in Klasse <> (<>), Zeile <> der Datei <> gefunden" .C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_2_LOC = "Fehler in Verschachtelungsstruktur. ENDPROC wurde erwartet, aber es wurde ENDDEFINE in Klasse <> (<>.<>), Zeile <> der Datei <> gefunden" .C_UNKNOWN_CLASS_NAME_LOC = "Unbekannte Klasse [<>]" .C_USING_THIS_SETTINGS_LOC = "Mit dieser einstellung" .C_WARNING_LOC = "WARNUNG!" - .C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC = "WARNUNG!" + CR_LF+ "SICHERSTELLEN DAS KEIN TABELLENALIAS IN DEM INDEXAUSDRUCK BENUTZT WIRD!! (z.B.: index on <>.campo tag keyname)" + .C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC = "WARNUNG!" + CR_LF+ "STELLEN SIE SICHER, DAS KEIN TABELLENALIAS IM INDEXAUSDRUCK BENUTZT WIRD!! (z.B.: index on <>.campo tag keyname)" .C_WITH_ERRORS_LOC = "mit Fehlern" OTHERWISE && English (Inglés) diff --git a/foxbin2prg_de.h b/foxbin2prg_de.h index aeb3074..a643af0 100644 --- a/foxbin2prg_de.h +++ b/foxbin2prg_de.h @@ -3,26 +3,26 @@ *-- NOTE: ES MÜSSEN ANFÜHRUNGSZEICHEN BENUTZT WERDEN, ODER SYNTAX ERRORS PASSIEREN BEIM COMPILE. SELTSAM :( *-- FoxBin2Prg v1.19.38 *------------------------------------------------------------------------------------------------------------------------------------------- -#DEFINE C_ASTERISK_EXT_NOT_ALLOWED_LOC "* und ? Erweiterungen sind nicht erlaubt, da es gefährlich ist (binaries könnten überschrieben werden mit xx2 leeren Dateien)" -#DEFINE C_BACKLINK_CANT_UPDATE_BL_LOC "Backlink kann nicht geupdated werden" +#DEFINE 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)" +#DEFINE C_BACKLINK_CANT_UPDATE_BL_LOC "Backlink kann nicht aktualisiert werden" #DEFINE C_BACKLINK_OF_TABLE_LOC "von Tabelle" -#DEFINE C_BACKUP_OF_LOC "Mache Backup von: " -#DEFINE C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC "Kann Datei [<>] nicht generieren da sie Schreibgeschützt ist" +#DEFINE C_BACKUP_OF_LOC "Erzeuge Backup von: " +#DEFINE C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC "Kann Datei [<>] nicht generieren, da sie schreibgeschützt ist" #DEFINE C_CONFIGFILE_LOC "Benutze Konfigurationsdatei:" #DEFINE C_CONVERSION_CANCELLED_BY_USER_LOC "Konvertierung durch den Benutzer abgebrochen" -#DEFINE C_CONVERTER_UNLOAD_LOC "Konverter wird entladen" +#DEFINE C_CONVERTER_UNLOAD_LOC "Konverter wird entladen" &&don't realy grok it even in english #DEFINE C_CONVERTING_FILE_LOC "Konvertiere Datei" -#DEFINE C_DATA_ERROR_CANT_PARSE_UNPAIRING_DOUBLE_QUOTES_LOC "Datenfehler: Keine Analyse möglich da ungepaarte Anführungszeichen in Zeile <>" +#DEFINE C_DATA_ERROR_CANT_PARSE_UNPAIRING_DOUBLE_QUOTES_LOC "Datenfehler: Keine Analyse möglich, da ungepaarte Anführungszeichen in Zeile <> sind." #DEFINE C_DUPLICATED_FILE_LOC "Doppelte Datei" #DEFINE C_ENDDEFINE_MARKER_NOT_FOUND_LOC "Kann keinen Ende Marker [ENDDEFINE] in Zeile <> für die ID [<>] finden" #DEFINE C_END_MARKER_NOT_FOUND_LOC "Kann keinen Ende Marker [<>] welcher den Start Marker [<>] in Zeile <> schließt" -#DEFINE C_END_OF_PROCESS_LOC "Ende der Prozess" +#DEFINE C_END_OF_PROCESS_LOC "Ende desr Prozesses" #DEFINE C_FIELD_NOT_FOUND_ON_FILE_STRUCTURE_LOC "Feld [<>] nicht in der Struktur von Datei <> gefunden" #DEFINE C_FILE_DOESNT_EXIST_LOC "Datei existiert nicht:" #DEFINE C_FILE_NAME_IS_NOT_SUPPORTED_LOC "Datei [<<.c_InputFile>>] wird nicht unterstützt" #DEFINE C_FILE_NOT_FOUND_LOC "Datei nicht gefunden" -#DEFINE C_EXTENSION_RECONFIGURATION_LOC "Erweiterungsneukonfiguration:" -#DEFINE C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES_LOC "Externe Klassenzahl (<< toModulo._ExternalClasses_Count >>) nicht gefunden Klassen entsprechen (<< toModulo._Clases_Count >>) für Datei [<< toFoxBin2Prg.c_InputFile >>]" +#DEFINE C_EXTENSION_RECONFIGURATION_LOC " Nneukonfiguration der Erweiterungen:" &&wir wollen es mal nicht übertreiben, mit den zusammengesetzten Substantiven +#DEFINE C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES_LOC "Die Anzahl externee Klassen (<< toModulo._ExternalClasses_Count >>) entspricht nicht der der gefunden Klassen (<< toModulo._Clases_Count >>), Datei: [<< toFoxBin2Prg.c_InputFile >>]" #DEFINE C_EXTERNAL_CLASS_NAME_DOES_NOT_FOUND_LOC "Externe Klasse (<>) nicht in der Datei [<>] gefunden" #DEFINE C_FOXBIN2PRG_ERROR_CAPTION_LOC "FOXBIN2PRG: FEHLER!!" #DEFINE C_FOXBIN2PRG_INFO_SINTAX_LOC "FOXBIN2PRG: SYNTAX INFO" @@ -31,26 +31,26 @@ + " 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'" -#DEFINE C_FOXBIN2PRG_JUST_VFP_9_LOC "FOXBIN2PRG ist nur für Visual FoxPro 9.0!" +#DEFINE C_FOXBIN2PRG_JUST_VFP_9_LOC "FOXBIN2PRG arbeitet nur für Visual FoxPro 9.0!" #DEFINE C_FOXBIN2PRG_WARN_CAPTION_LOC "FOXBIN2PRG: WARNUNG!" #DEFINE C_LANGUAGE_LOC "DE" -#DEFINE C_MENU_NOT_IN_VFP9_FORMAT_LOC "Menu [<>] ist NICHT in VFP 9 Format! - Bitte zuerst nach VFP 9 konvertieren mit MODIFY MENU '<>'" +#DEFINE C_MENU_NOT_IN_VFP9_FORMAT_LOC "Menu [<>] ist NICHT in VFP 9 Format! - Bitte zuerst mit MODIFY MENU '<>' nach VFP 9 konvertieren." #DEFINE C_NAMES_CAPITALIZATION_PROGRAM_FOUND_LOC "* Programm für Großschreibungssetzung [<>] gefunden" #DEFINE C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC "* Programm für Großschreibungssetzung [<>] nicht gefunden" -#DEFINE C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC "Objekt [<>] enthält nicht oReg Objekt (level <>)" +#DEFINE C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC "Objekt [<>] enthält nicht das oReg Objekt (level <>)" #DEFINE C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC "Befehl nicht erkannt. Nur SETNAME und GETNAME erlaubt." -#DEFINE C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC "Optimierung: Ausgabedatei [<>] wurde nicht überschrieben da sie dieselbe ist wie die neu generierte." -#DEFINE C_OUTPUTFILE_NEWER_THAN_INPUTFILE_LOC "Optimierung: Ausgabedatei [<>] wurde nicht erneuert da sie neuer ist als die Ursprungsdatei." -#DEFINE C_PROCEDURE_NOT_CLOSED_ON_LINE_LOC "Procedur nicht geschlossen. Letzte Zeile des Codes muss ENDPROC sein. [<>, Recno:<>]" +#DEFINE C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC "Optimierung: Ausgabedatei [<>] wurde nicht überschrieben, da sie dieselbe ist wie die neu generierte." +#DEFINE C_OUTPUTFILE_NEWER_THAN_INPUTFILE_LOC "Optimierung: Ausgabedatei [<>] wurde nicht erneuert, da sie neuer ist als die Ursprungsdatei." +#DEFINE C_PROCEDURE_NOT_CLOSED_ON_LINE_LOC "Prozcedur nicht geschlossen. Letzte Zeile des Codes muss ENDPROC sein. [<>, Recno:<>]" #DEFINE C_PROCESSING_LOC "Bearbeite Datei" #DEFINE C_PROCESS_PROGRESS_LOC "Bearbeitungsfortschritt:" #DEFINE C_PROPERTY_NAME_NOT_RECOGNIZED_LOC "Eigenschaft [<>] nicht erkannt." #DEFINE C_REPORT_NOT_IN_VFP9_FORMAT_LOC "Report [<>] ist NICHT in VFP 9 Format! - Bitte zuerst nach VFP 9 konvertieren mit MODIFY REPORT '<>'" #DEFINE C_REQUESTING_CAPITALIZATION_OF_FILE_LOC "- Forder Großschreibung für Datei [<>] an" -#DEFINE C_SCANNING_FILE_AND_DIR_INFO_LOC "Scannen Datei- und Verzeichnisinformationen für" -#DEFINE C_SOURCEFILE_LOC "Source Datei: " +#DEFINE C_SCANNING_FILE_AND_DIR_INFO_LOC "Scanne Datei- und Verzeichnisinformationen für" +#DEFINE C_SOURCEFILE_LOC "Quell Datei: " #DEFINE C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_LOC "Fehler in Verschachtelungsstruktur. ENDPROC erwartet, aber es wurde ENDDEFINE in Klasse <> (<>), Zeile <> der Datei <> gefunden" #DEFINE C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_2_LOC "Fehler in Verschachtelungsstruktur. ENDPROC wurde erwartet, aber es wurde ENDDEFINE in Klasse <> (<>.<>), Zeile <> der Datei <> gefunden" #DEFINE C_UNKNOWN_CLASS_NAME_LOC "Unbekannte Klasse [<>]" -#DEFINE C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC "WARNUNG!!" + CR_LF+ "SICHERSTELLEN DAS KEIN TABELLENALIAS IN DEM INDEXAUSDRUCK BENUTZT WIRD!! (z.B.: index on <>.campo tag keyname)" +#DEFINE C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC "WARNUNG!!" + CR_LF+ "STELLEN SIE SICHER, DAS KEIN TABELLENALIAS IM INDEXAUSDRUCK BENUTZT WIRD!! (z.B.: index on <>.campo tag keyname)" #DEFINE C_WITH_ERRORS_LOC "mit Fehlern" From 38ab11a31c5c1c47e252360ab8d794562b5b4d49 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Wed, 4 Mar 2015 22:23:32 +0100 Subject: [PATCH 020/123] =?UTF-8?q?Changeset:=20667=20-=20Actualizaci?= =?UTF-8?q?=C3=B3n=20archivo=20de=20versiones?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index c190130..52c18a0 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -24,6 +24,8 @@ Change History ------------------------------------------------------------- - Feature: Make some error descriptions more informative and precise (Lutz Scheffler) - Feature: Allow specifying inputFile with relative path (Lutz Scheffler) - Bug Fix scx: Metadata of Dataenvironment not properly generated when Dataenvironment is renamed +- Bug Fix: Added PJX/PJ2 generation when specifying "file.pjx", "*" (Lutz Scheffler) +- Some enhancements in german translations (Lutz Scheffler) 2015/01/18 v1.19.41 - Bug Fix db2: Erroneous detection of Invalid Table when size is less than 328 bytes. Lower limit was changed to 65 bytes. From c7ab04ea35e9febffd2659fdd63121232f33ab24 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 5 Mar 2015 00:29:19 +0100 Subject: [PATCH 021/123] Changeset: 668 - Agregado soporte multi-proyecto (*.PJX, *.PJ2) cuando se especifica "file.pjx", "*" (Lutz Scheffler) --- foxbin2prg.prg | 379 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 248 insertions(+), 131 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 2e1ac33..1340bba 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -490,6 +490,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM #ENDIF _MEMBERDATA = [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -518,6 +519,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -560,6 +563,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -595,7 +599,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] - DIMENSION a_ProcessedFiles(1) + DIMENSION a_ProcessedFiles(1), a_ProcessedFiles_0(1) PROTECTED l_ConfigEvaluated, n_CFG_Actual, l_Main_CFG_Loaded, o_Configuration, l_CFG_CachedAccess *-- n_FB2PRG_Version = 1.19 @@ -649,6 +653,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM n_FileHandle = 0 n_ProcessedFiles = 0 && Contador usado para los archivos file.class.ext n_ProcessedFilesCount = 0 && Contador genérico de procesados + n_ProcessedFiles_0 = 0 && Contador usado para los archivos file.ext o_Conversor = NULL o_Frm_Avance = NULL o_WSH = NULL @@ -1918,8 +1923,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM loLang = _SCREEN.o_FoxBin2Prg_Lang loFSO = .o_FSO loWSH = .o_WSH - *DIMENSION .a_ProcessedFiles(1) - *.n_ProcessedFiles = 0 + DIMENSION .a_ProcessedFiles_0(1) + .n_ProcessedFiles_0 = 0 lnPCount = 0 lcInputFile_Type = '' @@ -2042,7 +2047,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- Evaluación de FileSpec de entrada DO CASE - CASE lcInputFile_Type == C_FILETYPE_FILE AND '*' $ JUSTEXT( tc_InputFile ) OR '?' $ JUSTEXT( tc_InputFile ) + 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 ) @@ -2054,32 +2059,50 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE lcInputFile_Type == C_FILETYPE_FILE AND '*' $ JUSTSTEM( tc_InputFile ) *-- SE QUIEREN TODOS LOS ARCHIVOS DE UNA EXTENSIÓN - IF .n_ShowProgressbar <> 0 THEN - .cargar_frm_avance() - ENDIF - lcFileSpec = FULLPATH( tc_InputFile ) - DO CASE - CASE .l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile) - CD (tcRecompile) - CASE tcRecompile == '1' - CD (JUSTPATH(lcFileSpec)) - ENDCASE + IF EVL(tcType,'0') <> '*' THEN + IF .n_ShowProgressbar <> 0 THEN + .cargar_frm_avance() + ENDIF - .c_LogFile = ADDBS( JUSTPATH( lcFileSpec ) ) + STRTRAN( JUSTFNAME( lcFileSpec ), '*', '_ALL' ) + '.LOG' + DO CASE + CASE .l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile) + CD (tcRecompile) + CASE tcRecompile == '1' + CD (JUSTPATH(lcFileSpec)) + ENDCASE - IF .l_Debug - ERASE ( .c_LogFile ) + .c_LogFile = ADDBS( JUSTPATH( lcFileSpec ) ) + STRTRAN( JUSTFNAME( lcFileSpec ), '*', '_ALL' ) + '.LOG' + + IF .l_Debug + ERASE ( .c_LogFile ) + ENDIF ENDIF lnFileCount = ADIR( laFiles, lcFileSpec, '', 1 ) FOR I = 1 TO lnFileCount lcFile = FORCEPATH( laFiles(I,1), JUSTPATH( lcFileSpec ) ) - .AvanceDelProceso( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) - lnCodError = .Convertir( lcFile, @toModulo, @toEx, .T., tcOriginalFileName ) - .writeLog_Flush() + + DO CASE + CASE UPPER( JUSTEXT( EVL(tc_InputFile,'') ) ) == 'PJX' AND EVL(tcType,'0') == '*' + *-- SE QUIEREN CONVERTIR A TEXTO TODOS LOS ARCHIVOS DE UNO O MÁS PROYECTOS PJX + *-- Filespec: "*.PJX", "*" + .Evaluate_Full_PJX(lcFile, tcRecompile, @toModulo, @toEx, tcOriginalFileName) + + CASE UPPER( JUSTEXT( EVL(tc_InputFile,'') ) ) == 'PJ2' AND EVL(tcType,'0') == '*' + *-- SE QUIEREN CONVERTIR A BINARIO TODOS LOS ARCHIVOS DE UNO O MÁS PROYECTOS PJ2 + *-- Filespec: "*.PJ2", "*" + .Evaluate_Full_PJ2(lcFile, tcRecompile, @toModulo, @toEx, tcOriginalFileName) + + OTHERWISE + *-- DEMÁS ARCHIVOS + *-- Filespec: "*.EXT" + .AvanceDelProceso( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) + lnCodError = .Convertir( lcFile, @toModulo, @toEx, .T., tcOriginalFileName ) + .writeLog_Flush() + ENDCASE ENDFOR EXIT @@ -2243,114 +2266,13 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM DO CASE CASE UPPER( JUSTEXT( EVL(tc_InputFile,'') ) ) == 'PJX' AND EVL(tcType,'0') == '*' - *-- SE QUIEREN CONVERTIR A TEXTO TODOS LOS ARCHIVOS DE UN PROYECTO - IF .n_ShowProgressbar <> 0 THEN - .cargar_frm_avance() - .o_Frm_Avance.Caption = STRTRAN( .o_Frm_Avance.Caption, '> -', '(Bin>Txt) -' ) - ENDIF - - .writeLog( '> ' + loLang.C_CONVERT_ALL_FILES_IN_A_PROJECT_LOC + ': ' + loLang.C_BINARY_TO_TEXT_LOC ) - lcFileSpec = FULLPATH( tc_InputFile ) - - DO CASE - CASE .l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile) - CD (tcRecompile) - CASE tcRecompile == '1' - CD (JUSTPATH(lcFileSpec)) - ENDCASE - - .c_LogFile = ADDBS( JUSTPATH( lcFileSpec ) ) + STRTRAN( JUSTFNAME( lcFileSpec ), '*', '_ALL' ) + '.LOG' - - IF .l_Debug - ERASE ( .c_LogFile ) - ENDIF - - SELECT 0 - USE (tc_InputFile) SHARED AGAIN NOUPDATE ALIAS TABLABIN - lnFileCount = 0 - - SCAN FOR NOT DELETED() - lnFileCount = lnFileCount + 1 - DIMENSION laFiles(lnFileCount,1) - laFiles(lnFileCount,1) = ADDBS( JUSTPATH( lcFileSpec ) ) + ALLTRIM( NAME, 0, ' ', CHR(0) ) - ENDSCAN - - USE IN (SELECT("TABLABIN")) - - *-- Convierto primero el proyecto - lcFile = tc_InputFile - IF .TieneSoporte_Bin2Prg( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) - lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) - .writeLog_Flush() - ENDIF - - *-- Luego convierto los archivos incluidos - FOR I = 1 TO lnFileCount - lcFile = laFiles(I,1) - .AvanceDelProceso( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) - - IF .TieneSoporte_Bin2Prg( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) - lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) - .writeLog_Flush() - ENDIF - ENDFOR - + *-- SE QUIEREN CONVERTIR A TEXTO TODOS LOS ARCHIVOS DE UN PROYECTO PJX + .Evaluate_Full_PJX(tc_InputFile, tcRecompile, @toModulo, @toEx, @tcOriginalFileName) EXIT CASE UPPER( JUSTEXT( EVL(tc_InputFile,'') ) ) == 'PJ2' AND EVL(tcType,'0') == '*' - *-- SE QUIEREN CONVERTIR A BINARIO TODOS LOS ARCHIVOS DE UN PROYECTO - IF .n_ShowProgressbar <> 0 THEN - .cargar_frm_avance() - .o_Frm_Avance.Caption = STRTRAN( .o_Frm_Avance.Caption, '> -', '(Txt>Bin) -' ) - ENDIF - - .writeLog( '> ' + loLang.C_CONVERT_ALL_FILES_IN_A_PROJECT_LOC + ': ' + loLang.C_TEXT_TO_BINARY_LOC ) - lcFileSpec = FULLPATH( tc_InputFile ) - - DO CASE - CASE .l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile) - CD (tcRecompile) - CASE tcRecompile == '1' - CD (JUSTPATH(lcFileSpec)) - ENDCASE - - .c_LogFile = ADDBS( JUSTPATH( lcFileSpec ) ) + STRTRAN( JUSTFNAME( lcFileSpec ), '*', '_ALL' ) + '.LOG' - - IF .l_Debug - ERASE ( .c_LogFile ) - ENDIF - - lnFileCount = ALINES( laFiles, STREXTRACT( FILETOSTR(tc_InputFile), C_BUILDPROJ_I, C_BUILDPROJ_F ), 1+4 ) - - FOR I = lnFileCount TO 1 STEP -1 - IF '.ADD(' $ laFiles(I) - laFiles(I) = ADDBS( JUSTPATH( lcFileSpec ) ) + STREXTRACT( laFiles(I), ".ADD('", "')" ) - laFiles(I) = FORCEEXT( laFiles(I), .Get_Ext2FromExt( UPPER(JUSTEXT(laFiles(I))) ) ) - ELSE - lnFileCount = lnFileCount - 1 - ADEL( laFiles, I ) - DIMENSION laFiles(lnFileCount) - ENDIF - ENDFOR - - *-- Convierto primero el proyecto - lcFile = tc_InputFile - IF .TieneSoporte_Bin2Prg( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) - lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) - .writeLog_Flush() - ENDIF - - *-- Luego convierto los archivos incluidos - FOR I = 1 TO lnFileCount - lcFile = laFiles(I) - .AvanceDelProceso( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) - - IF .TieneSoporte_Prg2Bin( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) - lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) - .writeLog_Flush() - ENDIF - ENDFOR - + *-- SE QUIEREN CONVERTIR A BINARIO TODOS LOS ARCHIVOS DE UN PROYECTO PJ2 + .Evaluate_Full_PJ2(tc_InputFile, tcRecompile, @toModulo, @toEx, @tcOriginalFileName) EXIT CASE EVL(tcType,'0') <> '0' AND EVL(tcTextName,'0') <> '0' @@ -2471,6 +2393,189 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC + PROCEDURE Evaluate_Full_PJX + *-------------------------------------------------------------------------------------------------------------- + * SE QUIEREN CONVERTIR A TEXTO TODOS LOS ARCHIVOS DE UN PROYECTO PJX + *-------------------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * tc_InputFile (v! IN ) Nombre del archivo de entrada + * tcRecompile (v? IN ) Indica recompilar ('1') el binario una vez regenerado. [Cambio de funcionamiento por defecto] + * Este cambio es para ganar tiempo, velocidad y seguridad. Además la recompilación que hace FoxBin2Prg + * se hace desde el directorio del archivo, con lo que las referencias relativas pueden + * generar errores de compilación, típicamente los #include. + * NOTA: Si en vez de '1' se indica un Path (p.ej, el del proyecto, se usará como base para recompilar + * toModulo (@? OUT) Referencia de objeto del módulo generado (para Unit Testing) + * toEx (@? OUT) Objeto con información del error + * tcOriginalFileName (v? IN ) Sirve para los casos en los que inputFile es un nombre temporal y se quiere generar + * el nombre correcto dentro de la versión texto (por ej: en los PJ2 y las cabeceras) + *-------------------------------------------------------------------------------------------------------------- + LPARAMETERS tc_InputFile, tcRecompile, toModulo, toEx, tcOriginalFileName + + LOCAL lcFileSpec, lnFileCount, laFiles(1,1), lcFile, lnCodError, I, lnFileCount ; + , loLang AS CL_LANG OF 'FOXBIN2PRG.PRG' + + TRY + WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + loLang = _SCREEN.o_FoxBin2Prg_Lang + lcFileSpec = FULLPATH( tc_InputFile ) + + IF .n_ShowProgressbar <> 0 THEN + .cargar_frm_avance() + .o_Frm_Avance.Caption = STRTRAN( .o_Frm_Avance.Caption, '> -', '(Bin>Txt) -' ) + ENDIF + + .writeLog( '> ' + loLang.C_CONVERT_ALL_FILES_IN_A_PROJECT_LOC + ': ' + loLang.C_BINARY_TO_TEXT_LOC ) + + DO CASE + CASE .l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile) + CD (tcRecompile) + CASE tcRecompile == '1' + CD (JUSTPATH(lcFileSpec)) + ENDCASE + + .c_LogFile = ADDBS( JUSTPATH( lcFileSpec ) ) + STRTRAN( JUSTFNAME( lcFileSpec ), '*', '_ALL' ) + '.LOG' + + IF .l_Debug + ERASE ( .c_LogFile ) + ENDIF + + SELECT 0 + USE (tc_InputFile) SHARED AGAIN NOUPDATE ALIAS TABLABIN + lnFileCount = 0 + + SCAN FOR NOT DELETED() + lnFileCount = lnFileCount + 1 + DIMENSION laFiles(lnFileCount,1) + laFiles(lnFileCount,1) = ADDBS( JUSTPATH( lcFileSpec ) ) + ALLTRIM( NAME, 0, ' ', CHR(0) ) + ENDSCAN + + USE IN (SELECT("TABLABIN")) + + *-- Convierto primero el proyecto + lcFile = tc_InputFile + IF .TieneSoporte_Bin2Prg( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) + lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) + .writeLog_Flush() + ENDIF + + *-- Luego convierto los archivos incluidos + FOR I = 1 TO lnFileCount + lcFile = laFiles(I,1) + .AvanceDelProceso( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) + + IF .TieneSoporte_Bin2Prg( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) + IF .n_ProcessedFiles_0 > 0 THEN + *-- Buscar si fue procesado antes + IF ASCAN( .a_ProcessedFiles_0, lcFile, 1, 0, 0, 1+2+4 ) > 0 THEN + *.writeLog( 'OPTIMIZACIÓN: saltando archivo ya procesado [' + (lcFile) + ']' ) + .writeLog( TEXTMERGE( loLang.C_OPTIMIZATION_SKIPPING_ALREADY_PROCESSED_FILE_LOC ) ) + LOOP + ENDIF + ENDIF + + lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) + .writeLog_Flush() + ENDIF + ENDFOR + + .writeLog_Flush() + ENDWITH + ENDTRY + ENDPROC + + + PROCEDURE Evaluate_Full_PJ2 + *-------------------------------------------------------------------------------------------------------------- + * SE QUIEREN CONVERTIR A BINARIO TODOS LOS ARCHIVOS DE UN PROYECTO PJ2 + *-------------------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * tc_InputFile (v! IN ) Nombre del archivo de entrada + * tcRecompile (v? IN ) Indica recompilar ('1') el binario una vez regenerado. [Cambio de funcionamiento por defecto] + * Este cambio es para ganar tiempo, velocidad y seguridad. Además la recompilación que hace FoxBin2Prg + * se hace desde el directorio del archivo, con lo que las referencias relativas pueden + * generar errores de compilación, típicamente los #include. + * NOTA: Si en vez de '1' se indica un Path (p.ej, el del proyecto, se usará como base para recompilar + * toModulo (@? OUT) Referencia de objeto del módulo generado (para Unit Testing) + * toEx (@? OUT) Objeto con información del error + * tcOriginalFileName (v? IN ) Sirve para los casos en los que inputFile es un nombre temporal y se quiere generar + * el nombre correcto dentro de la versión texto (por ej: en los PJ2 y las cabeceras) + *-------------------------------------------------------------------------------------------------------------- + LPARAMETERS tc_InputFile, tcRecompile, toModulo, toEx, tcOriginalFileName + + LOCAL lcFileSpec, lnFileCount, laFiles(1,1), lcFile, lnCodError, I, lnFileCount ; + , loLang AS CL_LANG OF 'FOXBIN2PRG.PRG' + + TRY + WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + loLang = _SCREEN.o_FoxBin2Prg_Lang + lcFileSpec = FULLPATH( tc_InputFile ) + + IF .n_ShowProgressbar <> 0 THEN + .cargar_frm_avance() + .o_Frm_Avance.Caption = STRTRAN( .o_Frm_Avance.Caption, '> -', '(Txt>Bin) -' ) + ENDIF + + .writeLog( '> ' + loLang.C_CONVERT_ALL_FILES_IN_A_PROJECT_LOC + ': ' + loLang.C_TEXT_TO_BINARY_LOC ) + + DO CASE + CASE .l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile) + CD (tcRecompile) + CASE tcRecompile == '1' + CD (JUSTPATH(lcFileSpec)) + ENDCASE + + .c_LogFile = ADDBS( JUSTPATH( lcFileSpec ) ) + STRTRAN( JUSTFNAME( lcFileSpec ), '*', '_ALL' ) + '.LOG' + + IF .l_Debug + ERASE ( .c_LogFile ) + ENDIF + + lnFileCount = ALINES( laFiles, STREXTRACT( FILETOSTR(tc_InputFile), C_BUILDPROJ_I, C_BUILDPROJ_F ), 1+4 ) + + FOR I = lnFileCount TO 1 STEP -1 + IF '.ADD(' $ laFiles(I) + laFiles(I) = ADDBS( JUSTPATH( lcFileSpec ) ) + STREXTRACT( laFiles(I), ".ADD('", "')" ) + laFiles(I) = FORCEEXT( laFiles(I), .Get_Ext2FromExt( UPPER(JUSTEXT(laFiles(I))) ) ) + ELSE + lnFileCount = lnFileCount - 1 + ADEL( laFiles, I ) + DIMENSION laFiles(lnFileCount) + ENDIF + ENDFOR + + *-- Convierto primero el proyecto + lcFile = tc_InputFile + IF .TieneSoporte_Bin2Prg( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) + lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) + .writeLog_Flush() + ENDIF + + *-- Luego convierto los archivos incluidos + FOR I = 1 TO lnFileCount + lcFile = laFiles(I) + .AvanceDelProceso( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) + + IF .TieneSoporte_Prg2Bin( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) + IF .n_ProcessedFiles_0 > 0 THEN + *-- Buscar si fue procesado antes + IF ASCAN( .a_ProcessedFiles_0, lcFile, 1, 0, 0, 1+2+4 ) > 0 THEN + *.writeLog( 'OPTIMIZACIÓN: saltando archivo ya procesado [' + (lcFile) + ']' ) + .writeLog( TEXTMERGE( loLang.C_OPTIMIZATION_SKIPPING_ALREADY_PROCESSED_FILE_LOC ) ) + LOOP + ENDIF + ENDIF + + lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) + .writeLog_Flush() + ENDIF + ENDFOR + + .writeLog_Flush() + ENDWITH + ENDTRY + ENDPROC + + HIDDEN PROCEDURE ejecutar_WriteErrorLog LPARAMETERS toEx, tcErrorInfo @@ -2567,7 +2672,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF ENDIF - IF NOT EMPTY(tcOriginalFileName) tcOriginalFileName = loFSO.GetAbsolutePathName( tcOriginalFileName ) ENDIF @@ -2578,6 +2682,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .c_OriginalFileName = FORCEEXT(.c_OriginalFileName,'pjx') ENDIF + *-- Conteo de archivos normales procesados + .n_ProcessedFiles_0 = .n_ProcessedFiles_0 + 1 + DIMENSION .a_ProcessedFiles_0(.n_ProcessedFiles_0) + .a_ProcessedFiles_0(.n_ProcessedFiles_0) = .c_InputFile + .writeLog( C_TAB + 'c_OriginalFileName: ' + .c_OriginalFileName ) .writeLog( ) .o_Conversor = NULL @@ -22331,6 +22440,7 @@ DEFINE CLASS CL_LANG AS Custom C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC = "" C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC = "" C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC = "" + C_OPTIMIZATION_SKIPPING_ALREADY_PROCESSED_FILE_LOC = "" C_OPTION_LOC = "" C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC = "" C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC = "" @@ -22479,6 +22589,8 @@ DEFINE CLASS CL_LANG AS Custom .C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC = "* Programme des noms de capitalisation [<>] introuvables" .C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC = "Object [<>] ne contient pas l'objet oReg (niveau <>)" .C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC = "Opération non reconnu. Seulement SETNAME et GETNAME permis." + .C_OPTIMIZATION_SKIPPING_ALREADY_PROCESSED_FILE_LOC = "Optimisation: sauter fichier déjà traité [<<(lcFile)>>]" + .C_OPTION_LOC = "Option" .C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC = "La classe externe ne correspond pas à la classe interne" .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." @@ -22562,9 +22674,11 @@ DEFINE CLASS CL_LANG AS Custom .C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC = "* No se ha encontrado el programa de capitalización de nombres [<>]" .C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC = "Objeto [<>] no contiene el objeto oReg (nivel <>)" .C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC = "Operación no reconocida. Solo re reconoce SETNAME y GETNAME." + .C_OPTIMIZATION_SKIPPING_ALREADY_PROCESSED_FILE_LOC = "Optimización: saltando el archivo ya procesado [<<(lcFile)>>]" + .C_OPTION_LOC = "Option" .C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC = "La clase externa no coincide con la clase interna" - .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_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_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" @@ -22645,6 +22759,8 @@ DEFINE CLASS CL_LANG AS Custom .C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC = "* Programm für Großschreibungssetzung [<>] nicht gefunden" .C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC = "Objekt [<>] enthält nicht das oReg Objekt (level <>)" .C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC = "Befehl nicht erkannt. Nur SETNAME und GETNAME erlaubt." + .C_OPTIMIZATION_SKIPPING_ALREADY_PROCESSED_FILE_LOC = "Optimierung: Überspringen von bereits bearbeiteten Datei [<<(lcFile)>>]" + .C_OPTION_LOC = "Option" .C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC = "Die äußere Klasse nicht die innere Klassifizierung anzeigen lassen" .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." @@ -22676,7 +22792,7 @@ DEFINE CLASS CL_LANG AS Custom .C_BACKLINK_OF_TABLE_LOC = "of table" .C_BACKUP_OF_LOC = "Doing Backup of: " .C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC = "Cannot generate file [<>] because it is ReadOnly" - .C_CLASSPERFILE_OPTIMIZATION_BASE_ALREADY_PROCESSED_LOC = "OPTIMIZATION: Base File [<>] already processed, skipping processing of file [<>]" + .C_CLASSPERFILE_OPTIMIZATION_BASE_ALREADY_PROCESSED_LOC = "Optimization: Base File [<>] already processed, skipping processing of file [<>]" .C_CONFIGFILE_LOC = "Using configuration file:" .C_CONVERSION_CANCELLED_BY_USER_LOC = "Conversion Cancelled by the user" .C_CONVERT_ALL_FILES_IN_A_PROJECT_LOC = "Convert all files in a Project" @@ -22728,10 +22844,11 @@ DEFINE CLASS CL_LANG AS Custom .C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC = "* Names capitalization program [<>] not found" .C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC = "Object [<>] does not contain oReg object (level <>)" .C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC = "Operation not recognized. Only SETNAME and GETNAME allowed." + .C_OPTIMIZATION_SKIPPING_ALREADY_PROCESSED_FILE_LOC = "Optimization: skipping already processed file [<<(lcFile)>>]" .C_OPTION_LOC = "Option" .C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC = "The outer class does not match the inner classes" - .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_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_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" From 288d31564c1ce8933b40fab739e915953947fdd4 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 5 Mar 2015 00:48:02 +0100 Subject: [PATCH 022/123] Changeset: 669 - Uso de log centralizado para proceso de multi-proyecto --- foxbin2prg.exe | Bin 514325 -> 517461 bytes foxbin2prg.prg | 53 +++++++++++++++++++++++++------------------------ 2 files changed, 27 insertions(+), 26 deletions(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index b986c008636f1e7fe11ec4e36bea6b62ad4ad40b..2d42321012d37263346a4703855fbd7184bd022b 100644 GIT binary patch delta 26824 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 delta 24176 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 J-FvK_{vS=&tjPcX diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 1340bba..34c0378 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -2060,6 +2060,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE lcInputFile_Type == C_FILETYPE_FILE AND '*' $ JUSTSTEM( tc_InputFile ) *-- SE QUIEREN TODOS LOS ARCHIVOS DE UNA EXTENSIÓN lcFileSpec = FULLPATH( tc_InputFile ) + .c_LogFile = ADDBS( JUSTPATH( lcFileSpec ) ) + STRTRAN( JUSTFNAME( lcFileSpec ), '*', '_ALL' ) + '.LOG' + + IF .l_Debug + ERASE ( .c_LogFile ) + ENDIF IF EVL(tcType,'0') <> '*' THEN IF .n_ShowProgressbar <> 0 THEN @@ -2072,12 +2077,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE tcRecompile == '1' CD (JUSTPATH(lcFileSpec)) ENDCASE - - .c_LogFile = ADDBS( JUSTPATH( lcFileSpec ) ) + STRTRAN( JUSTFNAME( lcFileSpec ), '*', '_ALL' ) + '.LOG' - - IF .l_Debug - ERASE ( .c_LogFile ) - ENDIF ENDIF lnFileCount = ADIR( laFiles, lcFileSpec, '', 1 ) @@ -2089,12 +2088,12 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE UPPER( JUSTEXT( EVL(tc_InputFile,'') ) ) == 'PJX' AND EVL(tcType,'0') == '*' *-- SE QUIEREN CONVERTIR A TEXTO TODOS LOS ARCHIVOS DE UNO O MÁS PROYECTOS PJX *-- Filespec: "*.PJX", "*" - .Evaluate_Full_PJX(lcFile, tcRecompile, @toModulo, @toEx, tcOriginalFileName) + .Evaluate_Full_PJX(lcFile, tcRecompile, @toModulo, @toEx, tcOriginalFileName, .c_LogFile) CASE UPPER( JUSTEXT( EVL(tc_InputFile,'') ) ) == 'PJ2' AND EVL(tcType,'0') == '*' *-- SE QUIEREN CONVERTIR A BINARIO TODOS LOS ARCHIVOS DE UNO O MÁS PROYECTOS PJ2 *-- Filespec: "*.PJ2", "*" - .Evaluate_Full_PJ2(lcFile, tcRecompile, @toModulo, @toEx, tcOriginalFileName) + .Evaluate_Full_PJ2(lcFile, tcRecompile, @toModulo, @toEx, tcOriginalFileName, .c_LogFile) OTHERWISE *-- DEMÁS ARCHIVOS @@ -2408,8 +2407,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM * toEx (@? OUT) Objeto con información del error * tcOriginalFileName (v? IN ) Sirve para los casos en los que inputFile es un nombre temporal y se quiere generar * el nombre correcto dentro de la versión texto (por ej: en los PJ2 y las cabeceras) + * tcLogFile (v? IN ) Nombre del log a usar *-------------------------------------------------------------------------------------------------------------- - LPARAMETERS tc_InputFile, tcRecompile, toModulo, toEx, tcOriginalFileName + LPARAMETERS tc_InputFile, tcRecompile, toModulo, toEx, tcOriginalFileName, tcLogFile LOCAL lcFileSpec, lnFileCount, laFiles(1,1), lcFile, lnCodError, I, lnFileCount ; , loLang AS CL_LANG OF 'FOXBIN2PRG.PRG' @@ -2424,6 +2424,14 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .o_Frm_Avance.Caption = STRTRAN( .o_Frm_Avance.Caption, '> -', '(Bin>Txt) -' ) ENDIF + IF EMPTY(tcLogFile) + .c_LogFile = ADDBS( JUSTPATH( lcFileSpec ) ) + STRTRAN( JUSTFNAME( lcFileSpec ), '*', '_ALL' ) + '.LOG' + + IF .l_Debug + ERASE ( .c_LogFile ) + ENDIF + ENDIF + .writeLog( '> ' + loLang.C_CONVERT_ALL_FILES_IN_A_PROJECT_LOC + ': ' + loLang.C_BINARY_TO_TEXT_LOC ) DO CASE @@ -2433,12 +2441,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CD (JUSTPATH(lcFileSpec)) ENDCASE - .c_LogFile = ADDBS( JUSTPATH( lcFileSpec ) ) + STRTRAN( JUSTFNAME( lcFileSpec ), '*', '_ALL' ) + '.LOG' - - IF .l_Debug - ERASE ( .c_LogFile ) - ENDIF - SELECT 0 USE (tc_InputFile) SHARED AGAIN NOUPDATE ALIAS TABLABIN lnFileCount = 0 @@ -2477,8 +2479,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .writeLog_Flush() ENDIF ENDFOR - - .writeLog_Flush() ENDWITH ENDTRY ENDPROC @@ -2499,8 +2499,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM * toEx (@? OUT) Objeto con información del error * tcOriginalFileName (v? IN ) Sirve para los casos en los que inputFile es un nombre temporal y se quiere generar * el nombre correcto dentro de la versión texto (por ej: en los PJ2 y las cabeceras) + * tcLogFile (v? IN ) Nombre del log a usar *-------------------------------------------------------------------------------------------------------------- - LPARAMETERS tc_InputFile, tcRecompile, toModulo, toEx, tcOriginalFileName + LPARAMETERS tc_InputFile, tcRecompile, toModulo, toEx, tcOriginalFileName, tcLogFile LOCAL lcFileSpec, lnFileCount, laFiles(1,1), lcFile, lnCodError, I, lnFileCount ; , loLang AS CL_LANG OF 'FOXBIN2PRG.PRG' @@ -2515,6 +2516,14 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .o_Frm_Avance.Caption = STRTRAN( .o_Frm_Avance.Caption, '> -', '(Txt>Bin) -' ) ENDIF + IF EMPTY(tcLogFile) + .c_LogFile = ADDBS( JUSTPATH( lcFileSpec ) ) + STRTRAN( JUSTFNAME( lcFileSpec ), '*', '_ALL' ) + '.LOG' + + IF .l_Debug + ERASE ( .c_LogFile ) + ENDIF + ENDIF + .writeLog( '> ' + loLang.C_CONVERT_ALL_FILES_IN_A_PROJECT_LOC + ': ' + loLang.C_TEXT_TO_BINARY_LOC ) DO CASE @@ -2524,12 +2533,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CD (JUSTPATH(lcFileSpec)) ENDCASE - .c_LogFile = ADDBS( JUSTPATH( lcFileSpec ) ) + STRTRAN( JUSTFNAME( lcFileSpec ), '*', '_ALL' ) + '.LOG' - - IF .l_Debug - ERASE ( .c_LogFile ) - ENDIF - lnFileCount = ALINES( laFiles, STREXTRACT( FILETOSTR(tc_InputFile), C_BUILDPROJ_I, C_BUILDPROJ_F ), 1+4 ) FOR I = lnFileCount TO 1 STEP -1 @@ -2569,8 +2572,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .writeLog_Flush() ENDIF ENDFOR - - .writeLog_Flush() ENDWITH ENDTRY ENDPROC From a95c3bb5e6317929370b90d2b1f7550fbb34cb87 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 5 Mar 2015 19:33:23 +0100 Subject: [PATCH 023/123] =?UTF-8?q?Changeset:=20670=20-=20Actualizaci?= =?UTF-8?q?=C3=B3n=20del=20archivo=20de=20versi=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 52c18a0..1fa66f8 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -26,6 +26,7 @@ Change History ------------------------------------------------------------- - Bug Fix scx: Metadata of Dataenvironment not properly generated when Dataenvironment is renamed - Bug Fix: Added PJX/PJ2 generation when specifying "file.pjx", "*" (Lutz Scheffler) - Some enhancements in german translations (Lutz Scheffler) +- Feature: Added multiprocessing of projects (*.pjx, *.pj2) when specifying "file.pjx", "*" (Lutz Scheffler) 2015/01/18 v1.19.41 - Bug Fix db2: Erroneous detection of Invalid Table when size is less than 328 bytes. Lower limit was changed to 65 bytes. From cff6226be2a2bcabb9e4a5859380d4fa834384d7 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 5 Mar 2015 20:44:23 +0100 Subject: [PATCH 024/123] Changeset: 671 - Cambio de la clase principal de FoxBin2Prg de custom a session (Lutz Scheffler) - Se cambia el uso de la propiedad o_Conversor por la variable loConversor --- ...rg__c_foxbin2prg__EvaluarConfiguracion.prg | 14 +++-- foxbin2prg.exe | Bin 517461 -> 517413 bytes foxbin2prg.prg | 54 +++++++++--------- 3 files changed, 35 insertions(+), 33 deletions(-) diff --git a/TESTS/ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion.prg b/TESTS/ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion.prg index d20a73a..9fb53ab 100644 --- a/TESTS/ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion.prg +++ b/TESTS/ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion.prg @@ -150,10 +150,11 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O #ENDIF TRY - loEx = NULL + loEx = NULL loFB2P_Esperado = CREATEOBJECT("EMPTY") - loFB2P = THIS.ioFB2P - loFB2P.c_Foxbin2prg_ConfigFile = FORCEPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest ) + THIS.ioFB2P = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG", "", FORCEPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest ) ) + loFB2P = THIS.ioFB2P + *loFB2P.c_Foxbin2prg_ConfigFile = FORCEPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest ) *-- DATOS DE ENTRADA @@ -651,9 +652,10 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O #ENDIF TRY - loEx = NULL - loFB2P = THIS.ioFB2P - loFB2P.c_Foxbin2prg_ConfigFile = FORCEPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest ) + loEx = NULL + THIS.ioFB2P = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG", "", FORCEPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest ) ) + loFB2P = THIS.ioFB2P + *loFB2P.c_Foxbin2prg_ConfigFile = FORCEPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest ) loFB2P.l_ShowErrors = .F. diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 2d42321012d37263346a4703855fbd7184bd022b..454db809bf29af4a02861748e83dc11b96fc3b19 100644 GIT binary patch delta 17880 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 bV-<&!rGpzUn;rP(;`!eP;bz?c?;rjj75D3U delta 17772 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 CV9YN7 diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 34c0378..128e16e 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -484,7 +484,7 @@ QUIT ******************************************************************************************************************* -DEFINE CLASS c_foxbin2prg AS CUSTOM +DEFINE CLASS c_foxbin2prg AS SESSION #IF .F. LOCAL THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF @@ -683,6 +683,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM PROCEDURE INIT + LPARAMETERS tcCFG_File + LOCAL lcSys16, lnPosProg, lc_Foxbin2prg_EXE, laValues(1,5) SET DELETED ON SET DATE YMD @@ -707,7 +709,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF THIS.c_Foxbin2prg_FullPath = SUBSTR( lcSys16, lnPosProg ) - THIS.c_Foxbin2prg_ConfigFile = FORCEEXT( THIS.c_Foxbin2prg_FullPath, 'CFG' ) + THIS.c_Foxbin2prg_ConfigFile = EVL( tcCFG_File, FORCEEXT( THIS.c_Foxbin2prg_FullPath, 'CFG' ) ) THIS.c_CurDir = SYS(5) + CURDIR() lc_Foxbin2prg_EXE = FORCEEXT( THIS.c_Foxbin2prg_FullPath, 'EXE' ) THIS.c_FB2PRG_EXE_Version = 'v' + IIF( AGETFILEVERSION( laValues, lc_Foxbin2prg_EXE ) = 0, TRANSFORM(THIS.n_FB2PRG_Version), laValues(4) ) @@ -2690,7 +2692,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .writeLog( C_TAB + 'c_OriginalFileName: ' + .c_OriginalFileName ) .writeLog( ) - .o_Conversor = NULL IF NOT FILE(.c_InputFile) ERROR loLang.C_FILE_DOESNT_EXIST_LOC + ' [' + .c_InputFile + ']' @@ -2704,7 +2705,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ERROR (TEXTMERGE(loLang.C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, .c_VC2 ) - .o_Conversor = CREATEOBJECT( 'c_conversor_vcx_a_prg' ) + loConversor = CREATEOBJECT( 'c_conversor_vcx_a_prg' ) .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_VC2 ), lcForceAttribs ) CASE lcExtension = 'SCX' @@ -2712,7 +2713,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ERROR (TEXTMERGE(loLang.C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, .c_SC2 ) - .o_Conversor = CREATEOBJECT( 'c_conversor_scx_a_prg' ) + loConversor = CREATEOBJECT( 'c_conversor_scx_a_prg' ) .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_SC2 ), lcForceAttribs ) CASE lcExtension = 'PJX' @@ -2720,7 +2721,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ERROR (TEXTMERGE(loLang.C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, .c_PJ2 ) - .o_Conversor = CREATEOBJECT( 'c_conversor_pjx_a_prg' ) + loConversor = CREATEOBJECT( 'c_conversor_pjx_a_prg' ) .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_PJ2 ), lcForceAttribs ) CASE lcExtension = 'PJM' @@ -2728,7 +2729,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ERROR (TEXTMERGE(loLang.C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, .c_PJ2 ) - .o_Conversor = CREATEOBJECT( 'c_conversor_pjm_a_prg' ) + loConversor = CREATEOBJECT( 'c_conversor_pjm_a_prg' ) .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_PJ2 ), lcForceAttribs ) CASE lcExtension = 'FRX' @@ -2736,7 +2737,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ERROR (TEXTMERGE(loLang.C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, .c_FR2 ) - .o_Conversor = CREATEOBJECT( 'c_conversor_frx_a_prg' ) + loConversor = CREATEOBJECT( 'c_conversor_frx_a_prg' ) .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_FR2 ), lcForceAttribs ) CASE lcExtension = 'LBX' @@ -2744,7 +2745,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ERROR (TEXTMERGE(loLang.C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, .c_LB2 ) - .o_Conversor = CREATEOBJECT( 'c_conversor_frx_a_prg' ) + loConversor = CREATEOBJECT( 'c_conversor_frx_a_prg' ) .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_LB2 ), lcForceAttribs ) CASE lcExtension = 'DBF' @@ -2752,7 +2753,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ERROR (TEXTMERGE(loLang.C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, .c_DB2 ) - .o_Conversor = CREATEOBJECT( 'c_conversor_dbf_a_prg' ) + loConversor = CREATEOBJECT( 'c_conversor_dbf_a_prg' ) .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_DB2 ), lcForceAttribs ) CASE lcExtension = 'DBC' @@ -2760,7 +2761,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ERROR (TEXTMERGE(loLang.C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, .c_DC2 ) - .o_Conversor = CREATEOBJECT( 'c_conversor_dbc_a_prg' ) + loConversor = CREATEOBJECT( 'c_conversor_dbc_a_prg' ) .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_DC2 ), lcForceAttribs ) CASE lcExtension = 'MNX' @@ -2768,7 +2769,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ERROR (TEXTMERGE(loLang.C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, .c_MN2 ) - .o_Conversor = CREATEOBJECT( 'c_conversor_mnx_a_prg' ) + loConversor = CREATEOBJECT( 'c_conversor_mnx_a_prg' ) .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_MN2 ), lcForceAttribs ) CASE lcExtension = .c_VC2 @@ -2776,7 +2777,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ERROR (TEXTMERGE(loLang.C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, 'VCX' ) - .o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_vcx' ) + loConversor = CREATEOBJECT( 'c_conversor_prg_a_vcx' ) .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'VCX' ), lcForceAttribs ) .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'VCT' ), lcForceAttribs ) @@ -2785,7 +2786,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ERROR (TEXTMERGE(loLang.C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, 'SCX' ) - .o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_scx' ) + loConversor = CREATEOBJECT( 'c_conversor_prg_a_scx' ) .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'SCX' ), lcForceAttribs ) .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'SCT' ), lcForceAttribs ) @@ -2794,7 +2795,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ERROR (TEXTMERGE(loLang.C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, 'PJX' ) - .o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_pjx' ) + loConversor = CREATEOBJECT( 'c_conversor_prg_a_pjx' ) .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'PJX' ), lcForceAttribs ) .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'PJT' ), lcForceAttribs ) @@ -2803,7 +2804,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ERROR (TEXTMERGE(loLang.C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, 'FRX' ) - .o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_frx' ) + loConversor = CREATEOBJECT( 'c_conversor_prg_a_frx' ) .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'FRX' ), lcForceAttribs ) .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'FRT' ), lcForceAttribs ) @@ -2812,7 +2813,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ERROR (TEXTMERGE(loLang.C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, 'LBX' ) - .o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_frx' ) + loConversor = CREATEOBJECT( 'c_conversor_prg_a_frx' ) .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'LBX' ), lcForceAttribs ) .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'LBT' ), lcForceAttribs ) @@ -2821,7 +2822,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ERROR (TEXTMERGE(loLang.C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, 'DBF' ) - .o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_dbf' ) + loConversor = CREATEOBJECT( 'c_conversor_prg_a_dbf' ) .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'DBF' ), lcForceAttribs ) .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'FPT' ), lcForceAttribs ) .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'CDX' ), lcForceAttribs ) @@ -2831,7 +2832,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ERROR (TEXTMERGE(loLang.C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, 'DBC' ) - .o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_dbc' ) + loConversor = CREATEOBJECT( 'c_conversor_prg_a_dbc' ) .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'DBC' ), lcForceAttribs ) .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'DCX' ), lcForceAttribs ) .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'DCT' ), lcForceAttribs ) @@ -2841,7 +2842,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ERROR (TEXTMERGE(loLang.C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, 'MNX' ) - .o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_mnx' ) + loConversor = CREATEOBJECT( 'c_conversor_prg_a_mnx' ) .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'MNX' ), lcForceAttribs ) .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'MNT' ), lcForceAttribs ) @@ -2893,7 +2894,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM IF NOT .l_OptimizeByFilestamp OR .t_InputFile_TimeStamp >= .t_OutputFile_TimeStamp THEN .c_Type = UPPER(JUSTEXT(.c_OutputFile)) - loConversor = .o_Conversor loConversor.c_InputFile = .c_InputFile loConversor.c_OutputFile = .c_OutputFile loConversor.c_LogFile = .c_LogFile @@ -2908,14 +2908,14 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- .AvanceDelProceso( loLang.C_PROCESSING_LOC + ' ' + .c_InputFile + '...', 0, 0, 0 ) - IF AEVENTS( laEvents, .o_Conversor ) = 0 THEN - BINDEVENT( .o_Conversor, 'AvanceDelProceso', THIS, 'AvanceDelProceso' ) + IF AEVENTS( laEvents, loConversor ) = 0 THEN + BINDEVENT( loConversor, 'AvanceDelProceso', THIS, 'AvanceDelProceso' ) ENDIF loConversor.Convertir( @toModulo, .F., THIS ) .n_ProcessedFilesCount = .n_ProcessedFilesCount + 1 .writeLog() - .writeLog(.o_Conversor.c_TextLog) && Recojo el LOG que haya generado el conversor + .writeLog(loConversor.c_TextLog) && Recojo el LOG que haya generado el conversor *-- Logueo los errores IF NOT EMPTY(loConversor.c_TextErr) THEN @@ -2948,11 +2948,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF FINALLY - IF AEVENTS( laEvents, THIS.o_Conversor ) > 0 THEN - UNBINDEVENTS( THIS.o_Conversor ) + IF AEVENTS( laEvents, loConversor ) > 0 THEN + UNBINDEVENTS( loConversor ) ENDIF - STORE NULL TO loConversor, THIS.o_Conversor, loFSO + STORE NULL TO loConversor, loFSO *IF lnCodError = 0 OR NOT THIS.l_ShowErrors THEN * THIS.writeLog( REPLICATE('-',100) ) From 80910569b256b34fe7c6e5af4e17c90d5c1f83e8 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 5 Mar 2015 20:47:24 +0100 Subject: [PATCH 025/123] =?UTF-8?q?Changeset:=20672=20-=20Actualizaci?= =?UTF-8?q?=C3=B3n=20del=20archivo=20de=20versi=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 1fa66f8..2db2a73 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -27,6 +27,7 @@ Change History ------------------------------------------------------------- - Bug Fix: Added PJX/PJ2 generation when specifying "file.pjx", "*" (Lutz Scheffler) - Some enhancements in german translations (Lutz Scheffler) - Feature: Added multiprocessing of projects (*.pjx, *.pj2) when specifying "file.pjx", "*" (Lutz Scheffler) +- Change FoxBin2Prg base class from custom to session (Lutz Scheffler) 2015/01/18 v1.19.41 - Bug Fix db2: Erroneous detection of Invalid Table when size is less than 328 bytes. Lower limit was changed to 65 bytes. From ec12d0c7d7b1bb6b17af71e153e16b80413b330f Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 5 Mar 2015 21:03:16 +0100 Subject: [PATCH 026/123] Changeset: 674 - Permitir procesar los archivos de un proyecto sin convertir el PJX/2 (Lutz Scheffler) --- foxbin2prg.exe | Bin 517413 -> 517509 bytes foxbin2prg.prg | 41 ++++++++++++++++++++++++++--------------- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 454db809bf29af4a02861748e83dc11b96fc3b19..513f3367b14bf26624f166c714876bfddbe723e6 100644 GIT binary patch delta 15512 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 delta 15846 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 '*-' THEN + lcFile = tc_InputFile + IF .TieneSoporte_Bin2Prg( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) + lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) + .writeLog_Flush() + ENDIF ENDIF *-- Luego convierto los archivos incluidos @@ -2502,8 +2508,11 @@ DEFINE CLASS c_foxbin2prg AS SESSION * tcOriginalFileName (v? IN ) Sirve para los casos en los que inputFile es un nombre temporal y se quiere generar * el nombre correcto dentro de la versión texto (por ej: en los PJ2 y las cabeceras) * tcLogFile (v? IN ) Nombre del log a usar + * tcType (v? IN ) Tipo de archivo de entrada. Compatibilidad con SCCTEXT.PRG + * - Si se indica "*" y tc_InputFile es un PJX, se procesan todos los archivos del proyecto y el PJX/2 + * - Si se indica "*-" y tc_InputFile es un PJX, se procesan todos los archivos del proyecto sin el PJX/2 *-------------------------------------------------------------------------------------------------------------- - LPARAMETERS tc_InputFile, tcRecompile, toModulo, toEx, tcOriginalFileName, tcLogFile + LPARAMETERS tc_InputFile, tcRecompile, toModulo, toEx, tcOriginalFileName, tcLogFile, tcType LOCAL lcFileSpec, lnFileCount, laFiles(1,1), lcFile, lnCodError, I, lnFileCount ; , loLang AS CL_LANG OF 'FOXBIN2PRG.PRG' @@ -2549,10 +2558,12 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDFOR *-- Convierto primero el proyecto - lcFile = tc_InputFile - IF .TieneSoporte_Bin2Prg( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) - lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) - .writeLog_Flush() + IF tcType <> '*-' THEN + lcFile = tc_InputFile + IF .TieneSoporte_Bin2Prg( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) + lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) + .writeLog_Flush() + ENDIF ENDIF *-- Luego convierto los archivos incluidos From 72e2d2f91ab595b1206ba52048bd929206794633 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 5 Mar 2015 21:04:55 +0100 Subject: [PATCH 027/123] =?UTF-8?q?Changeset:=20676=20-=20Actualizado=20el?= =?UTF-8?q?=20archivo=20de=20versi=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 2db2a73..c5dcc35 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -28,6 +28,7 @@ Change History ------------------------------------------------------------- - Some enhancements in german translations (Lutz Scheffler) - Feature: Added multiprocessing of projects (*.pjx, *.pj2) when specifying "file.pjx", "*" (Lutz Scheffler) - Change FoxBin2Prg base class from custom to session (Lutz Scheffler) +- Feature: Allow processing all project files without converting the PJX/2 (Lutz Scheffler) 2015/01/18 v1.19.41 - Bug Fix db2: Erroneous detection of Invalid Table when size is less than 328 bytes. Lower limit was changed to 65 bytes. From b4513600614e661eeb4718364e50dc5fb99d7c6a Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 5 Mar 2015 21:16:31 +0100 Subject: [PATCH 028/123] =?UTF-8?q?Changeset:=20678=20Correcci=C3=B3n=20de?= =?UTF-8?q?=20defectos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index e43f5a9..3aa4791 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -138,6 +138,7 @@ * 03/03/2015 FDBOZZO v1.19.42 Mejora: Permitir definir el archivo de entrada con un path relativo (Lutz Scheffler) * 03/03/2015 FDBOZZO v1.19.42 Bug Fix scx: Metadato del Dataenvironment no se genera bien cuando el Dataenvironment es renombrado * 03/03/2015 FDBOZZO v1.19.42 Mejora: Permitir usar máscaras "*" para procesar múltiples proyectos a la vez (Lutz Scheffler) +* 05/03/2015 FDBOZZO v1.19.42 Mejora: Permitir procesar los archivos de un proyecto sin convertir el PJX/2 (Lutz Scheffler) * * *--------------------------------------------------------------------------------------------------- @@ -203,6 +204,7 @@ * 25/02/2015 Lutz Scheffler Mejora v1.19.41: Hacer algunos mensajes de error más descriptivos (Agregado en v1.19.42) * 03/03/2015 Lutz Scheffler Mejora v1.19.41: Permitir definir el archivo de entrada con un path relativo (Agregado en v1.19.42) * 28/03/2015 Lutz Scheffler Mejora v1.19.41: Permitir usar máscaras "*" para procesar múltiples proyectos a la vez (Agregado en v1.19.42) +* 05/03/2015 Lutz Scheffler Mejora v1.19.41: Permitir procesar los archivos de un proyecto sin convertir el PJX/2 (Agregado en v1.19.42) * * *--------------------------------------------------------------------------------------------------- @@ -2267,14 +2269,14 @@ DEFINE CLASS c_foxbin2prg AS SESSION ELSE DO CASE - CASE UPPER( JUSTEXT( EVL(tc_InputFile,'') ) ) == 'PJX' AND EVL(tcType,'0') == '*' + CASE UPPER( JUSTEXT( EVL(tc_InputFile,'') ) ) == 'PJX' AND LEFT(EVL(tcType,'0'),1) == '*' *-- SE QUIEREN CONVERTIR A TEXTO TODOS LOS ARCHIVOS DE UN PROYECTO PJX - .Evaluate_Full_PJX(tc_InputFile, tcRecompile, @toModulo, @toEx, @tcOriginalFileName) + .Evaluate_Full_PJX(tc_InputFile, tcRecompile, @toModulo, @toEx, @tcOriginalFileName, tcType) EXIT - CASE UPPER( JUSTEXT( EVL(tc_InputFile,'') ) ) == 'PJ2' AND EVL(tcType,'0') == '*' + CASE UPPER( JUSTEXT( EVL(tc_InputFile,'') ) ) == 'PJ2' AND LEFT(EVL(tcType,'0'),1) == '*' *-- SE QUIEREN CONVERTIR A BINARIO TODOS LOS ARCHIVOS DE UN PROYECTO PJ2 - .Evaluate_Full_PJ2(tc_InputFile, tcRecompile, @toModulo, @toEx, @tcOriginalFileName) + .Evaluate_Full_PJ2(tc_InputFile, tcRecompile, @toModulo, @toEx, @tcOriginalFileName, tcType) EXIT CASE EVL(tcType,'0') <> '0' AND EVL(tcTextName,'0') <> '0' From 070c922cbe9aea6fac348f230c97de1a61a1b6f4 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 5 Mar 2015 21:29:58 +0100 Subject: [PATCH 029/123] =?UTF-8?q?Changeset:=20679=20-=20Actualizado=20lo?= =?UTF-8?q?g=20interno=20de=20cambios=20y=20cr=C3=A9ditos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.exe | Bin 517509 -> 517527 bytes foxbin2prg.prg | 10 ++++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 513f3367b14bf26624f166c714876bfddbe723e6..73e26b3a768463a86e45f410a5f0bfbf843831ae 100644 GIT binary patch delta 14081 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 delta 14116 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 Xss^7BMw^j3UJ;oPRdW0!K0^FI%ko~F diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 3aa4791..ae1166a 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -135,9 +135,12 @@ * 22/01/2015 FDBOZZO v1.19.42 Bug Fix: Compatibilidad con SourceSafe rota porque se genera un error al realizar la consulta para soporte de archivo (Tuvia Vinitsky) * 25/02/2015 FDBOZZO v1.19.42 Bug Fix scx/vcx: Procesar solo un nivel de text/endtext, ya que no se admiten más niveles (Lutz Scheffler) * 25/02/2015 FDBOZZO v1.19.42 Mejora: Hacer algunos mensajes de error más descriptivos (Lutz Scheffler) +* 03/03/2015 FDBOZZO v1.19.42 Mejora: Mejoras en la traducción al alemán (Lutz Scheffler) * 03/03/2015 FDBOZZO v1.19.42 Mejora: Permitir definir el archivo de entrada con un path relativo (Lutz Scheffler) * 03/03/2015 FDBOZZO v1.19.42 Bug Fix scx: Metadato del Dataenvironment no se genera bien cuando el Dataenvironment es renombrado -* 03/03/2015 FDBOZZO v1.19.42 Mejora: Permitir usar máscaras "*" para procesar múltiples proyectos a la vez (Lutz Scheffler) +* 03/03/2015 FDBOZZO v1.19.42 Bug Fix scx: Agregada la generación del PJX/PJ2 cuando se indica "file.pjx", "*" (Lutz Scheffler) +* 03/03/2015 FDBOZZO v1.19.42 Mejora: Agregado soporte multi-proyecto (*.PJX, *.PJ2) cuando se especifica "file.pjx", "*" (Lutz Scheffler) +* 05/03/2015 FDBOZZO v1.19.42 Mejora: Cambiada la clase de base de FoxBin2Prg de custom a session (Lutz Scheffler) * 05/03/2015 FDBOZZO v1.19.42 Mejora: Permitir procesar los archivos de un proyecto sin convertir el PJX/2 (Lutz Scheffler) * * @@ -202,8 +205,11 @@ * 22/01/2015 Tuvia Vinitsky Bug Fix v1.19.41: Compatibilidad con SourceSafe rota porque se genera un error al realizar la consulta para soporte de archivo (Arreglado en v1.19.42) * 25/02/2015 Lutz Scheffler Reporte de Bug scx/vcx v1.19.41: Procesar solo un nivel de text/endtext, ya que no se admiten más niveles (Arreglado en v1.19.42) * 25/02/2015 Lutz Scheffler Mejora v1.19.41: Hacer algunos mensajes de error más descriptivos (Agregado en v1.19.42) +* 03/03/2015 Lutz Scheffler Mejora v1.19.41: Mejoras en la traducción al alemán (Agregado en v1.19.42) * 03/03/2015 Lutz Scheffler Mejora v1.19.41: Permitir definir el archivo de entrada con un path relativo (Agregado en v1.19.42) -* 28/03/2015 Lutz Scheffler Mejora v1.19.41: Permitir usar máscaras "*" para procesar múltiples proyectos a la vez (Agregado en v1.19.42) +* 03/03/2015 Lutz Scheffler Bug Fix scx v1.19.41: Agregada la generación del PJX/PJ2 cuando se indica "file.pjx", "*" (Agregado en v1.19.42) +* 03/03/2015 Lutz Scheffler Mejora v1.19.41: Permitir proceso multi-proyecto (*.PJX, *.PJ2) cuando se especifica "file.pjx", "*" (Agregado en v1.19.42) +* 05/03/2015 Lutz Scheffler Mejora v1.19.41: Cambiar clase de base de FoxBin2Prg de custom a session (Agregado en v1.19.42) * 05/03/2015 Lutz Scheffler Mejora v1.19.41: Permitir procesar los archivos de un proyecto sin convertir el PJX/2 (Agregado en v1.19.42) * * From b724b71e02c9c177947125afdaceac08a767dae6 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 6 Mar 2015 17:57:30 +0100 Subject: [PATCH 030/123] Changeset: 682 - Bug Fix pjx/pj2: Si se usa fin de linea (CR+LF) en los datos de las propiedades "Build" del pjx, se genera un pj2 corrupto --- foxbin2prg.prg | 140 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 125 insertions(+), 15 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 9f219d5..03e5e96 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -132,6 +132,7 @@ * 13/01/2015 FDBOZZO v1.19.41 Bug Fix scx/vcx: Detección errónea de estructuras PROCEDURE/ENDPROC cuando se usan como parámetros en LPARAMETERS (Ryan Harris) * 13/01/2015 FDBOZZO v1.19.41 Bug Fix db2: Detección errónea de tabla inválida cuando el tamaño es inferior a 328 bytes. Límite mínimo cambiado a 65 bytes. * 20/01/2015 FDBOZZO v1.19.42 Mejora: Validación de versión de Visual FoxPro, para evitar problemas ajenos a FoxBin2Prg +* 06/03/2015 FDBOZZO v1.19.42 Bug Fix pjx: Permitir usar fin de linea (CR/LF) en los atributos de versión del PJX * * *--------------------------------------------------------------------------------------------------- @@ -4474,6 +4475,7 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION ELSE lcValue = CHRTRAN( LEFT( tcNullTerminatedValue, lnNullPos - 1 ), ['], ["] ) ENDIF + lcValue = THIS.encode_SpecialCodes_1_31(lcValue) RELEASE tcNullTerminatedValue, lnNullPos RETURN lcValue ENDPROC @@ -12787,6 +12789,10 @@ ENDDEFINE DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg + _MEMBERDATA = [] ; + + [] ; + + [] + #IF .F. LOCAL THIS AS c_conversor_pjm_a_prg OF 'FOXBIN2PRG.PRG' #ENDIF @@ -13161,6 +13167,15 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg RETURN ENDPROC + + + PROCEDURE strExtract_CR + LPARAMETERS tcText + tcText = THIS.decode_SpecialCodes_1_31( STREXTRACT( tcText, 'Comments=', CR_LF ) ) + RETURN tcText + ENDPROC + + ENDDEFINE @@ -14307,6 +14322,8 @@ DEFINE CLASS CL_PROJECT AS CL_COL_BASE + [] ; + [] ; + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -14366,6 +14383,34 @@ DEFINE CLASS CL_PROJECT AS CL_COL_BASE + PROCEDURE decode_SpecialCodes_1_31 + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * tcText (!@ IN ) Decodifica los primeros 31 caracteres ASCII de {nCode} a CHR(nCode) + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcText + LOCAL I + FOR I = 0 TO 31 + tcText = STRTRAN( tcText, '{' + TRANSFORM(I) + '}', CHR(I) ) + ENDFOR + RELEASE I + RETURN tcText + ENDPROC + + + + PROCEDURE encode_SpecialCodes_1_31 + LPARAMETERS tcText + LOCAL I + FOR I = 0 TO 31 + tcText = STRTRAN( tcText, CHR(I), '{' + TRANSFORM(I) + '}' ) + ENDFOR + RELEASE I + RETURN tcText + ENDPROC + + + PROCEDURE setParsedProjInfoLine LPARAMETERS tcProjInfoLine THIS.setParsedInfoLine( THIS, tcProjInfoLine ) @@ -14375,14 +14420,31 @@ DEFINE CLASS CL_PROJECT AS CL_COL_BASE PROCEDURE setParsedInfoLine LPARAMETERS toObject, tcInfoLine - LOCAL lcAsignacion, lcCurDir - lcCurDir = ADDBS(THIS._HomeDir) - IF LEFT(tcInfoLine,1) == '.' - lcAsignacion = 'toObject' + tcInfoLine - ELSE - lcAsignacion = 'toObject.' + tcInfoLine - ENDIF - &lcAsignacion. + + LOCAL lcAsignacion, lcCurDir, lcValue, loEx as Exception + + TRY + lcCurDir = ADDBS(THIS._HomeDir) + IF LEFT(tcInfoLine,1) == '.' + lcAsignacion = 'toObject' + tcInfoLine + ELSE + lcAsignacion = 'toObject.' + tcInfoLine + ENDIF + + lcValue = GETWORDNUM(lcAsignacion, 2, '=') + + IF TYPE(lcValue) = "C" THEN + lcAsignacion = GETWORDNUM(lcAsignacion, 1, '=') + '= THIS.encode_SpecialCodes_1_31(' + lcValue + ')' + ENDIF + + &lcAsignacion. + + CATCH TO loEx + loEx.UserValue = loEx.UserValue + 'lcAsignacion = [' + TRANSFORM(lcAsignacion) + ']' + CR_LF + THROW + ENDTRY + + RETURN ENDPROC @@ -14397,6 +14459,7 @@ DEFINE CLASS CL_PROJECT AS CL_COL_BASE ELSE lcValue = CHRTRAN( LEFT( lcStr, MIN(tnLen, lnNullPos - 1 ) ), ['], ["] ) ENDIF + lcValue = THIS.encode_SpecialCodes_1_31(lcValue) RETURN lcValue ENDPROC @@ -19097,6 +19160,8 @@ DEFINE CLASS CL_PROJ_SRV_HEAD AS CL_CUS_BASE + [] ; + [] ; + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -19120,6 +19185,34 @@ DEFINE CLASS CL_PROJ_SRV_HEAD AS CL_CUS_BASE + PROCEDURE decode_SpecialCodes_1_31 + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * tcText (!@ IN ) Decodifica los primeros 31 caracteres ASCII de {nCode} a CHR(nCode) + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcText + LOCAL I + FOR I = 0 TO 31 + tcText = STRTRAN( tcText, '{' + TRANSFORM(I) + '}', CHR(I) ) + ENDFOR + RELEASE I + RETURN tcText + ENDPROC + + + + PROCEDURE encode_SpecialCodes_1_31 + LPARAMETERS tcText + LOCAL I + FOR I = 0 TO 31 + tcText = STRTRAN( tcText, CHR(I), '{' + TRANSFORM(I) + '}' ) + ENDFOR + RELEASE I + RETURN tcText + ENDPROC + + + PROCEDURE setParsedHeadInfoLine LPARAMETERS tcHeadInfoLine THIS.setParsedInfoLine( THIS, tcHeadInfoLine ) @@ -19129,13 +19222,30 @@ DEFINE CLASS CL_PROJ_SRV_HEAD AS CL_CUS_BASE PROCEDURE setParsedInfoLine LPARAMETERS toObject, tcInfoLine - LOCAL lcAsignacion, lcCurDir - IF LEFT(tcInfoLine,1) == '.' - lcAsignacion = 'toObject' + tcInfoLine - ELSE - lcAsignacion = 'toObject.' + tcInfoLine - ENDIF - &lcAsignacion. + + LOCAL lcAsignacion, lcCurDir, lcValue, loEx as Exception + + TRY + IF LEFT(tcInfoLine,1) == '.' + lcAsignacion = 'toObject' + tcInfoLine + ELSE + lcAsignacion = 'toObject.' + tcInfoLine + ENDIF + + lcValue = GETWORDNUM(lcAsignacion, 2, '=') + + IF TYPE(lcValue) = "C" THEN + lcAsignacion = GETWORDNUM(lcAsignacion, 1, '=') + '= THIS.encode_SpecialCodes_1_31(' + GETWORDNUM(lcAsignacion, 2, '=') + ')' + ENDIF + + &lcAsignacion. + + CATCH TO loEx + loEx.UserValue = loEx.UserValue + 'lcAsignacion = [' + TRANSFORM(lcAsignacion) + ']' + CR_LF + THROW + ENDTRY + + RETURN ENDPROC From 7200d1d07cb5ae02ac0a93c7a64f8c70328e04ca Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 6 Mar 2015 18:34:29 +0100 Subject: [PATCH 031/123] =?UTF-8?q?Changeset:=20684=20-=20Arreglo=20de=20d?= =?UTF-8?q?efecto=20en=20par=C3=A1metros=20de=20nuevos=20m=C3=A9todos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index ae1166a..808857c 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -2277,12 +2277,12 @@ DEFINE CLASS c_foxbin2prg AS SESSION DO CASE CASE UPPER( JUSTEXT( EVL(tc_InputFile,'') ) ) == 'PJX' AND LEFT(EVL(tcType,'0'),1) == '*' *-- SE QUIEREN CONVERTIR A TEXTO TODOS LOS ARCHIVOS DE UN PROYECTO PJX - .Evaluate_Full_PJX(tc_InputFile, tcRecompile, @toModulo, @toEx, @tcOriginalFileName, tcType) + .Evaluate_Full_PJX(tc_InputFile, tcRecompile, @toModulo, @toEx, @tcOriginalFileName, '', tcType) EXIT CASE UPPER( JUSTEXT( EVL(tc_InputFile,'') ) ) == 'PJ2' AND LEFT(EVL(tcType,'0'),1) == '*' *-- SE QUIEREN CONVERTIR A BINARIO TODOS LOS ARCHIVOS DE UN PROYECTO PJ2 - .Evaluate_Full_PJ2(tc_InputFile, tcRecompile, @toModulo, @toEx, @tcOriginalFileName, tcType) + .Evaluate_Full_PJ2(tc_InputFile, tcRecompile, @toModulo, @toEx, @tcOriginalFileName, '', tcType) EXIT CASE EVL(tcType,'0') <> '0' AND EVL(tcTextName,'0') <> '0' From 21546622966051b56666d20a047badfc2148e8f2 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 6 Mar 2015 19:09:29 +0100 Subject: [PATCH 032/123] Changeset: 686 Me traigo el archivo de versiones --- FoxBin2PRGVersionFile.txt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 5d34353..d3aba30 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -2,8 +2,8 @@ Lparameters toUpdateInfo Local lcNote With toUpdateInfo - .VersionNumber = 'v1.19.41' - .VersionDate = Date(2015,01,18) + .VersionNumber = 'v1.19.42' + .VersionDate = Date(2015,03,01) .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/03/01 v1.19.42 +- Added VFP 9 SP1 runtime validation +- Bug Fix: Broken SourceSafe compatibility because an error is thrown when querying for file support (Tuvia Vinitsky) +- Bug Fix scx/vcx: Process only one TEXT/ENDTEXT nesting level because TEXT/ENDTEXT can't be nested (Lutz Scheffler) + 2015/01/18 v1.19.41 - Bug Fix db2: Erroneous detection of Invalid Table when size is less than 328 bytes. Lower limit was changed to 65 bytes. - Bug Fix vcx/scx: Erroneous detection of PROCEDURE/ENDPROC structures when used as parameters of LPARAMETERS and start in new line (Ryan Harris) From 163b5e2ebb3dcb9845e4bc06b9d23098ed351179 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 6 Mar 2015 19:11:56 +0100 Subject: [PATCH 033/123] =?UTF-8?q?Changeset:=20687=20-=20Actualizaci?= =?UTF-8?q?=C3=B3n=20del=20archivo=20de=20versiones?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index d3aba30..3d72b89 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -21,6 +21,7 @@ Change History ------------------------------------------------------------- - Added VFP 9 SP1 runtime validation - Bug Fix: Broken SourceSafe compatibility because an error is thrown when querying for file support (Tuvia Vinitsky) - Bug Fix scx/vcx: Process only one TEXT/ENDTEXT nesting level because TEXT/ENDTEXT can't be nested (Lutz Scheffler) +- Bug Fix pjx/pj2: If end of line (CR+LF) is used on pjx's "Build" properties data, generated pj2 is malformed 2015/01/18 v1.19.41 - Bug Fix db2: Erroneous detection of Invalid Table when size is less than 328 bytes. Lower limit was changed to 65 bytes. From 90a6630b1aac2cace8a215669c0236c2e4a5a12b Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Mon, 9 Mar 2015 21:02:40 +0100 Subject: [PATCH 034/123] - Regenero EXE --- foxbin2prg.exe | Bin 517527 -> 519588 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 73e26b3a768463a86e45f410a5f0bfbf843831ae..1805134b91cc103f96f0f71363ddd5fe78006947 100644 GIT binary patch delta 16882 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 delta 15866 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 Date: Mon, 9 Mar 2015 21:14:58 +0100 Subject: [PATCH 035/123] =?UTF-8?q?-=20Archivo=20foxbin2prg.cfg=20renombra?= =?UTF-8?q?do=20a=20foxbin2prg.cfg.txt=20para=20no=20sobreescribir=20el=20?= =?UTF-8?q?archivo=20de=20configuraci=C3=B3n=20del=20usuario=20(Lutz=20Sch?= =?UTF-8?q?effler)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 1 + foxbin2prg.cfg => foxbin2prg.cfg.txt | 0 2 files changed, 1 insertion(+) rename foxbin2prg.cfg => foxbin2prg.cfg.txt (100%) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index e64df08..83bb08b 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -30,6 +30,7 @@ Change History ------------------------------------------------------------- - Change FoxBin2Prg base class from custom to session (Lutz Scheffler) - Feature: Allow processing all project files without converting the PJX/2 (Lutz Scheffler) - Bug Fix pjx/pj2: If end of line (CR+LF) is used on pjx's "Build" properties data, generated pj2 is malformed +- Feature: Default foxbin2prg.cfg configuration file renamed to foxbin2prg.cfg.txt to no overwrite user cfg (Lutz Scheffler) 2015/01/18 v1.19.41 - Bug Fix db2: Erroneous detection of Invalid Table when size is less than 328 bytes. Lower limit was changed to 65 bytes. diff --git a/foxbin2prg.cfg b/foxbin2prg.cfg.txt similarity index 100% rename from foxbin2prg.cfg rename to foxbin2prg.cfg.txt From a41c2bf67da297cac7dd2fb4f49d9d1798d8ee92 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Mon, 9 Mar 2015 21:19:24 +0100 Subject: [PATCH 036/123] =?UTF-8?q?-=20filetypes.conf:=20Agregada=20extens?= =?UTF-8?q?i=C3=B3n=20vbs=20como=20tipo=20texto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- filetypes.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/filetypes.conf b/filetypes.conf index ebb8295..829965e 100644 --- a/filetypes.conf +++ b/filetypes.conf @@ -15,3 +15,4 @@ .db2:txt .dc2:txt .mn2:txt +.vbs:txt \ No newline at end of file From 2b7d196f51eb28cdfd6e020ccbdce0e6559706e6 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Tue, 10 Mar 2015 23:53:08 +0100 Subject: [PATCH 037/123] =?UTF-8?q?-=20Agregado=20soporte=20de=20errOut=20?= =?UTF-8?q?DOS=20e=20implementado=20en=20writeErrorLog=20cuando=20se=20log?= =?UTF-8?q?uean=20errores=20-=20Agregado=20soporte=20total=20de=20comodine?= =?UTF-8?q?s=20*=3F=20en=20nombres=20de=20archivo=20para=20procesar=20m?= =?UTF-8?q?=C3=BAltiples=20archivos=20de=20la=20misma=20extensi=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 60 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index dbd2553..d879a2f 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -143,6 +143,7 @@ * 05/03/2015 FDBOZZO v1.19.42 Mejora: Cambiada la clase de base de FoxBin2Prg de custom a session (Lutz Scheffler) * 05/03/2015 FDBOZZO v1.19.42 Mejora: Permitir procesar los archivos de un proyecto sin convertir el PJX/2 (Lutz Scheffler) * 06/03/2015 FDBOZZO v1.19.42 Bug Fix pjx: Permitir usar fin de linea (CR/LF) en los atributos de versión del PJX +* 10/03/2015 FDBOZZO v1.19.42 Mejora: Mejorar la API para poder obtener información interna para usar en pre o post-procesos externos (Lutz Scheffler) * * *--------------------------------------------------------------------------------------------------- @@ -212,6 +213,7 @@ * 03/03/2015 Lutz Scheffler Mejora v1.19.41: Permitir proceso multi-proyecto (*.PJX, *.PJ2) cuando se especifica "file.pjx", "*" (Agregado en v1.19.42) * 05/03/2015 Lutz Scheffler Mejora v1.19.41: Cambiar clase de base de FoxBin2Prg de custom a session (Agregado en v1.19.42) * 05/03/2015 Lutz Scheffler Mejora v1.19.41: Permitir procesar los archivos de un proyecto sin convertir el PJX/2 (Agregado en v1.19.42) +* 10/03/2015 Lutz Scheffler Mejora v1.19.41: Mejorar la API para poder obtener información interna para usar en pre o post-procesos externos (Agregado en v1.19.42) * * *--------------------------------------------------------------------------------------------------- @@ -564,6 +566,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -597,6 +600,8 @@ DEFINE CLASS c_foxbin2prg AS SESSION + [] ; + [] ; + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -654,6 +659,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION 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 + l_StdOutHabilitado = .T. l_Main_CFG_Loaded = .F. n_ExtraBackupLevels = 1 n_ClassTimeStamp = 1130668032 && 2013/11/04 20:00:00 @@ -707,6 +713,11 @@ DEFINE CLASS c_foxbin2prg AS SESSION ON ESCAPE ERROR 1799 SET ESCAPE ON + *-- Funciones para escribir en StdOut + DECLARE INTEGER GetStdHandle IN Win32API INTEGER nHandleType + DECLARE INTEGER WriteFile IN Win32API INTEGER hFile, STRING @ cBuffer ; + , INTEGER nBytes, INTEGER @ nBytes2, INTEGER @ nBytes3 + ERASE (THIS.c_ErrorLogFile) ERASE (THIS.c_LogFile) @@ -2069,7 +2080,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDIF - CASE lcInputFile_Type == C_FILETYPE_FILE AND '*' $ JUSTSTEM( tc_InputFile ) + CASE lcInputFile_Type == C_FILETYPE_FILE AND ( '*' $ JUSTSTEM( tc_InputFile ) OR '?' $ JUSTSTEM( tc_InputFile ) ) *-- SE QUIEREN TODOS LOS ARCHIVOS DE UNA EXTENSIÓN lcFileSpec = FULLPATH( tc_InputFile ) .c_LogFile = ADDBS( JUSTPATH( lcFileSpec ) ) + STRTRAN( JUSTFNAME( lcFileSpec ), '*', '_ALL' ) + '.LOG' @@ -3281,6 +3292,51 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDPROC + PROCEDURE errOut + *-- DEVOLUCIÓN DE SALIDA A ERROUT (-12) + LPARAMETERS tcTexto + + TRY + IF THIS.l_StdOutHabilitado + LOCAL loException as Exception, lcOutput, lnOutHandle, lnBytesWritten, lnOverlappedIO + lcOutput = EVL(tcTexto,'') + CR_LF + lnOutHandle = GetStdHandle(-12) && CAPTURAR ERROR DESDE CONSOLA: FOXBIN2PRG.EXE PARAMS 2>&1 | FIND /V "" + lnBytesWritten = 0 + lnOverlappedIO = 0 + WriteFile(lnOutHandle, @lcOutput, LEN(lcOutput), @lnBytesWritten, @lnOverlappedIO) + ENDIF + + CATCH TO loException + THIS.l_StdOutHabilitado = .F. + + ENDTRY + + RETURN + ENDPROC + + + PROCEDURE stdOut + *-- DEVOLUCIÓN DE SALIDA A STDOUT (-11) + LPARAMETERS tcTexto + + TRY + IF THIS.l_StdOutHabilitado + LOCAL loException as Exception, lcOutput, lnOutHandle, lnBytesWritten, lnOverlappedIO + lcOutput = EVL(tcTexto,'') + CR_LF + lnOutHandle = GetStdHandle(-11) && CAPTURAR STDOUT DESDE CONSOLA: FOXBIN2PRG.EXE PARAMS | FIND /V "" + lnBytesWritten = 0 + lnOverlappedIO = 0 + WriteFile(lnOutHandle, @lcOutput, LEN(lcOutput), @lnBytesWritten, @lnOverlappedIO) + ENDIF + + CATCH TO loException + THIS.l_StdOutHabilitado = .F. + + ENDTRY + + RETURN + ENDPROC + PROCEDURE writeErrorLog LPARAMETERS tcText, tnTimestamp @@ -3291,6 +3347,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDIF THIS.c_TextErr = THIS.c_TextErr + EVL(tcText,'') + CR_LF + THIS.errOut(tcText) THIS.l_Error = .T. CATCH ENDTRY @@ -3315,6 +3372,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDIF THIS.c_TextLog = THIS.c_TextLog + EVL(tcText,'') + CR_LF + THIS.stdOut(tcText) CATCH ENDTRY ENDPROC From 3947ac4ca84c7e6fe183dbde5487fd18c36c5401 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Tue, 10 Mar 2015 23:54:44 +0100 Subject: [PATCH 038/123] - Actualizado el proyecto por haber quitado un UT en desuso --- foxbin2prg.pj2 | 2 -- foxbin2prg.pjt | Bin 701424 -> 709438 bytes foxbin2prg.pjx | Bin 9513 -> 9513 bytes 3 files changed, 2 deletions(-) diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2 index 085a6e4..410e913 100644 --- a/foxbin2prg.pj2 +++ b/foxbin2prg.pj2 @@ -103,7 +103,6 @@ WITH loProject.FILES .ADD('tests\ut__foxbin2prg__c_conversor_base__dobackup.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" /> .ADD('tests\ut__foxbin2prg__c_conversor_base__get_separatedpropandvalue.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" /> .ADD('tests\ut__foxbin2prg__c_conversor_base__gettimestamp.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" /> - .ADD('tests\ut__foxbin2prg__c_conversor_base__identificarbloquesdecodigo.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" /> .ADD('tests\ut__foxbin2prg__c_conversor_base__identificarbloquesdeexclusion.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" /> .ADD('tests\ut__foxbin2prg__c_conversor_base__normalizarvalorpropiedad.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" /> .ADD('tests\ut__foxbin2prg__c_conversor_base__rowtimestamp.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" /> @@ -135,7 +134,6 @@ WITH loProject.FILES .ITEM(lcCurdir + 'tests\ut__foxbin2prg__c_conversor_base__dobackup.prg').Exclude = .T. .ITEM(lcCurdir + 'tests\ut__foxbin2prg__c_conversor_base__get_separatedpropandvalue.prg').Exclude = .T. .ITEM(lcCurdir + 'tests\ut__foxbin2prg__c_conversor_base__gettimestamp.prg').Exclude = .T. - .ITEM(lcCurdir + 'tests\ut__foxbin2prg__c_conversor_base__identificarbloquesdecodigo.prg').Exclude = .T. .ITEM(lcCurdir + 'tests\ut__foxbin2prg__c_conversor_base__identificarbloquesdeexclusion.prg').Exclude = .T. .ITEM(lcCurdir + 'tests\ut__foxbin2prg__c_conversor_base__normalizarvalorpropiedad.prg').Exclude = .T. .ITEM(lcCurdir + 'tests\ut__foxbin2prg__c_conversor_base__rowtimestamp.prg').Exclude = .T. diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index a59905a0cce9289af2fdd85a7746e41245be0d8b..55ed20485b7adee5cdec0fa301e632f255e3a83b 100644 GIT binary patch delta 39316 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 X^NWW#9V+bdH&ybV{l8!T|I2>?5QNN? delta 32810 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

{t)J6PgQ2Da~8v5)}`4f24I=L>va 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®`&5uH2SiT9`X&RC#M# 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 i)^jn`lyXguRqDqa9{W>aYZ From cadd91bda3788cb5f50772a23cfcf9acfc8723fb Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 14 Mar 2015 01:53:28 +0100 Subject: [PATCH 039/123] =?UTF-8?q?-=20Agregado=20nuevo=20par=C3=A1metro?= =?UTF-8?q?=20para=20permitir=20un=20CFG=20alternativo=20(Lutz=20Scheffler?= =?UTF-8?q?)=20-=20Agregado=20nuevo=20m=C3=A9todo=20API=20get=5FTarget()?= =?UTF-8?q?=20para=20obtener=20informaci=C3=B3n=20de=20los=20archivos=20pr?= =?UTF-8?q?ocesados=20(Lutz=20Scheffler)=20-=20Agregada=20nueva=20salida?= =?UTF-8?q?=20de=20archivos=20procesados=20a=20stdOut=20(Lutz=20Scheffler)?= =?UTF-8?q?=20-=20Arreglada=20la=20cancelaci=C3=B3n=20del=20procesamiento?= =?UTF-8?q?=20con=20tecla=20Esc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.exe | Bin 519588 -> 523416 bytes foxbin2prg.prg | 348 ++++++++++++++++++++++++++++++++++--------------- 2 files changed, 243 insertions(+), 105 deletions(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 1805134b91cc103f96f0f71363ddd5fe78006947..793fb6c9832effefc8008361d42a75524ff236e1 100644 GIT binary patch delta 33922 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 diff --git a/foxbin2prg.prg b/foxbin2prg.prg index d879a2f..4f9f6e0 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -242,11 +242,12 @@ * generar errores de compilación, típicamente los #include. * NOTA: Si en vez de '1' se indica un Path (p.ej, el del proyecto, se usará como base para recompilar * tcNoTimestamps (v? IN ) Indica si se debe anular el timestamp ('1') o no ('0' ó vacío) -* +* tcCFG_File (v? IN ) Indica si se debe usar un archivo de configuración distinto al predeterminado +*--------------------------------------------------------------------------------------------------- * Ej: DO FOXBIN2PRG.PRG WITH "C:\DESA\INTEGRACION\LIBRERIA.VCX" *--------------------------------------------------------------------------------------------------- LPARAMETERS tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDebug, tcDontShowProgress, tcOriginalFileName ; - , tcRecompile, tcNoTimestamps + , tcRecompile, tcNoTimestamps, tcCFG_File *-- NO modificar! / Do NOT change! #DEFINE C_CMT_I '*--' @@ -464,16 +465,14 @@ loCnv = CREATEOBJECT("c_foxbin2prg") loEx = NULL lnResp = loCnv.ejecutar( tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDebug ; - , tcDontShowProgress, NULL, @loEx, .F., tcOriginalFileName, tcRecompile, tcNoTimestamps ) + , tcDontShowProgress, NULL, @loEx, .F., tcOriginalFileName, tcRecompile, tcNoTimestamps ; + , .F., .F., .F., tcCFG_File ) ADDPROPERTY(_SCREEN, 'ExitCode', lnResp) -*IF _VFP.STARTMODE <= 1 -* RETURN lnResp -*ENDIF SET COVERAGE TO -IF _VFP.STARTMODE # 4 +IF _VFP.STARTMODE <> 4 && 4 = Visual FoxPro was started as a distributable .app or .exe file. STORE NULL TO loEx, loCnv RELEASE loEx, loCnv RETURN lnResp @@ -489,7 +488,7 @@ STORE NULL TO loEx, loCnv RELEASE loEx, loCnv *-- Muy útil para procesos batch que capturan el código de error -DECLARE ExitProcess IN Win32API INTEGER ExitCode +DECLARE ExitProcess IN Win32API INTEGER ExitCode && To read returned error code with ERRORLEVEL from Windows ExitProcess(1) && Esta debe ser de las últimas instrucciones QUIT @@ -500,9 +499,10 @@ DEFINE CLASS c_foxbin2prg AS SESSION LOCAL THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF _MEMBERDATA = [] ; - + [] ; - + [] ; + + [] ; + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -543,11 +543,13 @@ DEFINE CLASS c_foxbin2prg AS SESSION + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -575,7 +577,6 @@ DEFINE CLASS c_foxbin2prg AS SESSION + [] ; + [] ; + [] ; - + [] ; + [] ; + [] ; + [] ; @@ -606,6 +607,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -613,7 +615,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION + [] - DIMENSION a_ProcessedFiles(1), a_ProcessedFiles_0(1) + DIMENSION a_ProcessedFiles(1, 5) PROTECTED l_ConfigEvaluated, n_CFG_Actual, l_Main_CFG_Loaded, o_Configuration, l_CFG_CachedAccess *-- n_FB2PRG_Version = 1.19 @@ -647,6 +649,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION n_ShowProgressbar = 1 n_ForceWriteIfReadOnly = 0 l_AllowMultiConfig = .T. + l_CancelWithEscKey = .T. l_DropNullCharsFromCode = .T. l_Recompile = .T. l_UseClassPerFile = .F. @@ -668,7 +671,6 @@ DEFINE CLASS c_foxbin2prg AS SESSION n_FileHandle = 0 n_ProcessedFiles = 0 && Contador usado para los archivos file.class.ext n_ProcessedFilesCount = 0 && Contador genérico de procesados - n_ProcessedFiles_0 = 0 && Contador usado para los archivos file.ext o_Conversor = NULL o_Frm_Avance = NULL o_WSH = NULL @@ -698,7 +700,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION PROCEDURE INIT - LPARAMETERS tcCFG_File + LPARAMETERS tcCFG_File, tcCancelWithEscKey LOCAL lcSys16, lnPosProg, lc_Foxbin2prg_EXE, laValues(1,5) SET DELETED ON @@ -710,13 +712,21 @@ DEFINE CLASS c_foxbin2prg AS SESSION SET TABLEPROMPT OFF SET POINT TO '.' SET SEPARATOR TO ',' - ON ESCAPE ERROR 1799 - SET ESCAPE ON + tcCancelWithEscKey = EVL(tcCancelWithEscKey, '') + + IF NOT EMPTY(tcCancelWithEscKey) + 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 INTEGER nHandleType DECLARE INTEGER WriteFile IN Win32API INTEGER hFile, STRING @ cBuffer ; - , INTEGER nBytes, INTEGER @ nBytes2, INTEGER @ nBytes3 + , INTEGER nBytes, INTEGER @ nBytes2, INTEGER @ nBytes3 ERASE (THIS.c_ErrorLogFile) ERASE (THIS.c_LogFile) @@ -776,6 +786,39 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDPROC + PROCEDURE addProcessedFile + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * tcInputFile (v? IN ) Path del archivo (ej: 'C:\DESA\pruebas varias\lib.vcx') + * tcProcessed (v? IN ) Procesado ("P0"=Not Processed, "P1"=Processed, "P2"=Expanded) + * tcHasErrors (v? IN ) Tuvo Errores ("E0"=No Errors, "E1"=Has Errors) + * tcSupported (v? IN ) Archivo soportado ("S0"=Unsupported, "S1"=Supported) + * tcReserved (v? IN ) Reservado + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcInputFile, tcProcessed, tcHasErrors, tcSupported, tcReserved + + LOCAL llAdded + + IF NOT EMPTY(tcInputFile) THEN + WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + *-- Buscar si fue procesado antes + IF .n_ProcessedFiles = 0 OR ASCAN( .a_ProcessedFiles, tcInputFile, 1, 0, 1, 1+2+4 ) = 0 THEN + .n_ProcessedFiles = .n_ProcessedFiles + 1 + DIMENSION .a_ProcessedFiles(.n_ProcessedFiles, 5) + .a_ProcessedFiles(.n_ProcessedFiles, 1) = tcInputFile + .a_ProcessedFiles(.n_ProcessedFiles, 2) = EVL(tcProcessed, '') + .a_ProcessedFiles(.n_ProcessedFiles, 3) = EVL(tcHasErrors, '') + .a_ProcessedFiles(.n_ProcessedFiles, 4) = EVL(tcSupported, '') + .a_ProcessedFiles(.n_ProcessedFiles, 5) = EVL(tcReserved, '') + llAdded = .T. + ENDIF + ENDWITH + ENDIF + + RETURN llAdded + ENDPROC + + PROCEDURE AvanceDelProceso LPARAMETERS tcTexto, tnValor, tnTotal, tnTipo @@ -805,6 +848,16 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDPROC + PROCEDURE ClearProcessedFiles + WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + .n_ProcessedFilesCount = 0 + .n_ProcessedFiles = 0 + DIMENSION .a_ProcessedFiles(1, 5) + .a_ProcessedFiles = '' + ENDWITH + ENDPROC + + FUNCTION get_l_ConfigEvaluated RETURN THIS.l_ConfigEvaluated ENDFUNC @@ -815,6 +868,33 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDFUNC + FUNCTION get_Target + LPARAMETERS taTargets, tcFileMask + + EXTERNAL ARRAY taTargets + + LOCAL lnCount, I + lnCount = 0 + + WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + tcFileMask = EVL(tcFileMask, '*') + + FOR I = 1 TO .n_ProcessedFiles + IF LIKE( tcFileMask, .a_ProcessedFiles(I,1) ) THEN + lnCount = lnCount + 1 + DIMENSION taTargets(lnCount,5) + taTargets(lnCount,1) = .a_ProcessedFiles(I,1) + taTargets(lnCount,2) = .a_ProcessedFiles(I,2) + taTargets(lnCount,3) = .a_ProcessedFiles(I,3) + taTargets(lnCount,4) = .a_ProcessedFiles(I,4) + taTargets(lnCount,5) = .a_ProcessedFiles(I,5) + ENDIF + ENDFOR + ENDWITH + + RETURN lnCount + ENDFUNC + PROCEDURE l_Debug_ACCESS IF THIS.n_CFG_Actual = 0 OR ISNULL( THIS.o_Configuration( THIS.n_CFG_Actual ) ) RETURN THIS.l_Debug @@ -1847,7 +1927,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION , tcExt == 'MNX', .c_MN2 ; , tcExt == 'DBF', .c_DB2 ; , tcExt == 'DBC', .c_DC2 ; - , 'XXX' ) + , tcExt ) ENDWITH && THIS RELEASE tcExt @@ -1927,14 +2007,15 @@ DEFINE CLASS c_foxbin2prg AS SESSION * 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) + * 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 ; , toModulo, toEx AS EXCEPTION, tlRelanzarError, tcOriginalFileName, tcRecompile, tcNoTimestamps ; - , tcBackupLevels, tcClearUniqueID, tcOptimizeByFilestamp + , tcBackupLevels, tcClearUniqueID, tcOptimizeByFilestamp, tcCFG_File TRY LOCAL I, lcPath, lnCodError, lcFileSpec, lcFile, laFiles(1,5), laDirInfo(1,5), lcInputFile_Type ; - , lnFileCount, lcErrorInfo, lcErrorFile, lnPCount, laParams(1), lnConversionOption ; + , lnFileCount, lcErrorInfo, lcErrorFile, lnPCount, laParams(1), lnConversionOption, lnErrorIcon ; , loEx AS EXCEPTION ; , loFSO AS Scripting.FileSystemObject ; , loLang AS CL_LANG OF 'FOXBIN2PRG.PRG' ; @@ -1946,8 +2027,6 @@ DEFINE CLASS c_foxbin2prg AS SESSION loLang = _SCREEN.o_FoxBin2Prg_Lang loFSO = .o_FSO loWSH = .o_WSH - DIMENSION .a_ProcessedFiles_0(1) - .n_ProcessedFiles_0 = 0 lnPCount = 0 lcInputFile_Type = '' @@ -1963,6 +2042,8 @@ DEFINE CLASS c_foxbin2prg AS SESSION * EXIT *ENDIF + .c_Foxbin2prg_ConfigFile = EVL( tcCFG_File, .c_Foxbin2prg_ConfigFile ) + IF VERSION(5) < 900 OR INT( VAL( SUBSTR( VERSION(4), RAT('.', VERSION(4)) + 1 ) ) ) < 3504 ERROR C_INCORRECT_VFP9_VERSION__MISSING_SP1_LOC ENDIF @@ -2224,7 +2305,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDIF .AvanceDelProceso( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) - lnCodError = .Convertir( lcFile, @toModulo, @toEx, .T., tcOriginalFileName ) + lnCodError = .Convertir( lcFile, @toModulo, @toEx, .F., tcOriginalFileName ) .writeLog_Flush() DO CASE @@ -2344,19 +2425,27 @@ DEFINE CLASS c_foxbin2prg AS SESSION CATCH TO toEx lnCodError = toEx.ERRORNO + lnErrorIcon = 64 IF VARTYPE(loLang) <> 'O' THEN loLang = CREATEOBJECT("CL_LANG","EN") ENDIF - toEx.UserValue = toEx.UserValue + 'FoxBin2Prg: [' + THIS.c_Foxbin2prg_FullPath + '] (EXE Version: ' + THIS.c_FB2PRG_EXE_Version + ')' + CR_LF + IF lnCodError <> 1799 THEN && Conversion Cancelled + toEx.UserValue = toEx.UserValue + 'FoxBin2Prg: [' + THIS.c_Foxbin2prg_FullPath + '] (EXE Version: ' + THIS.c_FB2PRG_EXE_Version + ')' + CR_LF + lnErrorIcon = 16 + ENDIF IF ATC('-SHOWMSG', ('-' + tcType)) >= 1 THEN - toEx.UserValue = toEx.UserValue + 'lcInputFile_Type = [' + TRANSFORM(lcInputFile_Type) + ']' + CR_LF + IF lnCodError <> 1799 THEN && Conversion Cancelled + toEx.UserValue = toEx.UserValue + 'lcInputFile_Type = [' + TRANSFORM(lcInputFile_Type) + ']' + CR_LF + ENDIF THIS.l_ShowErrors = .F. && La opción "SHOWMSG" muestra su propio mensaje ENDIF - toEx.USERVALUE = toEx.USERVALUE + 'tc_InputFile = [' + TRANSFORM(tc_InputFile) + ']' + CR_LF + IF lnCodError <> 1799 THEN && Conversion Cancelled + toEx.USERVALUE = toEx.USERVALUE + 'tc_InputFile = [' + TRANSFORM(tc_InputFile) + ']' + CR_LF + ENDIF THIS.ejecutar_WriteErrorLog( @toEx, @lcErrorInfo ) @@ -2367,7 +2456,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDIF IF THIS.l_ShowErrors - MESSAGEBOX( lcErrorInfo, 0+16+4096, loLang.C_FOXBIN2PRG_ERROR_CAPTION_LOC, 60000 ) + MESSAGEBOX( lcErrorInfo, 0 + lnErrorIcon + 4096, loLang.C_FOXBIN2PRG_ERROR_CAPTION_LOC, 60000 ) ENDIF IF tlRelanzarError @@ -2471,7 +2560,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION USE (tc_InputFile) SHARED AGAIN NOUPDATE ALIAS TABLABIN lnFileCount = 0 - SCAN FOR NOT DELETED() + SCAN FOR NOT DELETED() AND Type <> 'H' lnFileCount = lnFileCount + 1 DIMENSION laFiles(lnFileCount,1) laFiles(lnFileCount,1) = ADDBS( JUSTPATH( lcFileSpec ) ) + ALLTRIM( NAME, 0, ' ', CHR(0) ) @@ -2481,11 +2570,9 @@ DEFINE CLASS c_foxbin2prg AS SESSION *-- Convierto primero el proyecto IF tcType <> '*-' THEN - lcFile = tc_InputFile - IF .TieneSoporte_Bin2Prg( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) - lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) - .writeLog_Flush() - ENDIF + lcFile = tc_InputFile + lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) + .writeLog_Flush() ENDIF *-- Luego convierto los archivos incluidos @@ -2494,18 +2581,24 @@ DEFINE CLASS c_foxbin2prg AS SESSION .AvanceDelProceso( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) IF .TieneSoporte_Bin2Prg( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) - IF .n_ProcessedFiles_0 > 0 THEN - *-- Buscar si fue procesado antes - IF ASCAN( .a_ProcessedFiles_0, lcFile, 1, 0, 0, 1+2+4 ) > 0 THEN - *.writeLog( 'OPTIMIZACIÓN: saltando archivo ya procesado [' + (lcFile) + ']' ) - .writeLog( TEXTMERGE( loLang.C_OPTIMIZATION_SKIPPING_ALREADY_PROCESSED_FILE_LOC ) ) - LOOP - ENDIF - ENDIF - - lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) + lnCodError = .Convertir( lcFile, toModulo, @toEx, .F., tcOriginalFileName ) .writeLog_Flush() + + DO CASE + CASE lnCodError = 1799 && Conversion Cancelled + ERROR 1799 + + CASE lnCodError > 0 + .ejecutar_WriteErrorLog( @toEx ) + ENDCASE + ELSE + *-- addProcessedFile( tcInputFile, tcProcessed, tcHasErrors, tcSupported, tcReserved ) + IF .addProcessedFile( lcFile, 'P0', 'E0', 'S0', 'RR' ) + .updateProcessedFile() + ENDIF ENDIF + + .writeLog_Flush() ENDFOR ENDWITH ENDTRY @@ -2580,10 +2673,8 @@ DEFINE CLASS c_foxbin2prg AS SESSION *-- Convierto primero el proyecto IF tcType <> '*-' THEN lcFile = tc_InputFile - IF .TieneSoporte_Bin2Prg( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) - lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) - .writeLog_Flush() - ENDIF + lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) + .writeLog_Flush() ENDIF *-- Luego convierto los archivos incluidos @@ -2592,18 +2683,24 @@ DEFINE CLASS c_foxbin2prg AS SESSION .AvanceDelProceso( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) IF .TieneSoporte_Prg2Bin( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) - IF .n_ProcessedFiles_0 > 0 THEN - *-- Buscar si fue procesado antes - IF ASCAN( .a_ProcessedFiles_0, lcFile, 1, 0, 0, 1+2+4 ) > 0 THEN - *.writeLog( 'OPTIMIZACIÓN: saltando archivo ya procesado [' + (lcFile) + ']' ) - .writeLog( TEXTMERGE( loLang.C_OPTIMIZATION_SKIPPING_ALREADY_PROCESSED_FILE_LOC ) ) - LOOP - ENDIF - ENDIF - - lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) + lnCodError = .Convertir( lcFile, toModulo, @toEx, .F., tcOriginalFileName ) .writeLog_Flush() + + DO CASE + CASE lnCodError = 1799 && Conversion Cancelled + ERROR 1799 + + CASE lnCodError > 0 + .ejecutar_WriteErrorLog( @toEx ) + ENDCASE + ELSE + *-- addProcessedFile( tcInputFile, tcProcessed, tcHasErrors, tcSupported, tcReserved ) + IF .addProcessedFile( lcFile, 'P0', 'E0', 'S0', 'RR' ) + .updateProcessedFile() + ENDIF ENDIF + + .writeLog_Flush() ENDFOR ENDWITH ENDTRY @@ -2611,11 +2708,17 @@ DEFINE CLASS c_foxbin2prg AS SESSION HIDDEN PROCEDURE ejecutar_WriteErrorLog - LPARAMETERS toEx, tcErrorInfo + LPARAMETERS toEx as Exception, tcErrorInfo LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' loLang = _SCREEN.o_FoxBin2Prg_Lang - tcErrorInfo = THIS.Exception2Str(@toEx) + CR_LF + loLang.C_SOURCEFILE_LOC + TRANSFORM(THIS.c_InputFile) + CR_LF + + IF toEx.ErrorNo = 1799 THEN && Conversion Cancelled + tcErrorInfo = loLang.C_CONVERSION_CANCELLED_BY_USER_LOC + ELSE + tcErrorInfo = THIS.Exception2Str(@toEx) + CR_LF + loLang.C_SOURCEFILE_LOC + TRANSFORM(THIS.c_InputFile) + CR_LF + ENDIF + ADDPROPERTY(_SCREEN, 'ExitCode', toEx.ERRORNO) *-- Escribo la información de error en la variable log de errores @@ -2687,19 +2790,6 @@ DEFINE CLASS c_foxbin2prg AS SESSION lc_BaseFile = FORCEPATH( FORCEEXT( JUSTSTEM( JUSTSTEM(.c_InputFile) ), JUSTEXT(.c_InputFile)) , JUSTPATH(.c_InputFile) ) ENDIF - IF .n_ProcessedFiles > 0 THEN - *-- Buscar si fue procesado antes - IF ASCAN( .a_ProcessedFiles, lc_BaseFile, 1, 0, 0, 1+2+4 ) > 0 THEN - *.writeLog( 'OPTIMIZACIÓN: El archivo Base [' + JUSTFNAME(lc_BaseFile) + '] ya fue procesado, por lo que no se procesará [' + JUSTFNAME(.c_InputFile) + ']' ) - .writeLog( TEXTMERGE( loLang.C_CLASSPERFILE_OPTIMIZATION_BASE_ALREADY_PROCESSED_LOC ) ) - EXIT - ENDIF - ENDIF - - .n_ProcessedFiles = .n_ProcessedFiles + 1 - DIMENSION .a_ProcessedFiles(.n_ProcessedFiles) - .a_ProcessedFiles(.n_ProcessedFiles) = lc_BaseFile - *-- Verifico si se debe forzar la redirección al archivo principal IF '.' $ JUSTSTEM(.c_InputFile) .c_InputFile = lc_BaseFile @@ -2716,10 +2806,12 @@ DEFINE CLASS c_foxbin2prg AS SESSION .c_OriginalFileName = FORCEEXT(.c_OriginalFileName,'pjx') ENDIF - *-- Conteo de archivos normales procesados - .n_ProcessedFiles_0 = .n_ProcessedFiles_0 + 1 - DIMENSION .a_ProcessedFiles_0(.n_ProcessedFiles_0) - .a_ProcessedFiles_0(.n_ProcessedFiles_0) = .c_InputFile + *-- addProcessedFile( tcInputFile, tcProcessed, tcHasErrors, tcSupported, tcReserved ) + IF NOT .addProcessedFile( .c_InputFile, 'P1', 'E0', 'S1', 'RR' ) THEN + *.writeLog( 'OPTIMIZACIÓN: El archivo Base [' + JUSTFNAME(lc_BaseFile) + '] ya fue procesado, por lo que no se procesará [' + JUSTFNAME(.c_InputFile) + ']' ) + .writeLog( TEXTMERGE( loLang.C_CLASSPERFILE_OPTIMIZATION_BASE_ALREADY_PROCESSED_LOC ) ) + EXIT + ENDIF .writeLog( C_TAB + 'c_OriginalFileName: ' + .c_OriginalFileName ) .writeLog( ) @@ -2963,12 +3055,16 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDIF .normalizarCapitalizacionArchivos() + .updateProcessedFile() ENDWITH && THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' CATCH TO toEx lnCodError = toEx.ERRORNO *lcErrorInfo = THIS.Exception2Str(toEx) + CR_LF + CR_LF + loLang.C_SOURCEFILE_LOC + THIS.c_InputFile + *-- updateProcessedFile( tcProcessed, tcHasErrors, tcSupported, tcReserved ) + THIS.updateProcessedFile( '', 'E1' ) + IF THIS.l_Debug IF _VFP.STARTMODE = 0 SET STEP ON @@ -3338,6 +3434,37 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDPROC + PROCEDURE updateProcessedFile + *--------------------------------------------------------------------------------------------------- + * ACTUALIZA ALGUNOS DATOS DEL ARCHIVO PROCESADO ACTUAL + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * tcProcessed (v? IN ) Fue Procesado ("P") + * tcHasErrors (v? IN ) Tuvo Errores ("E") + * tcSupported (v? IN ) Archivo soportado ("U"=Unsupported) + * tcReserved (v? IN ) Reservado + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcProcessed, tcHasErrors, tcSupported, tcReserved + + WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + IF NOT EMPTY(tcProcessed) + .a_ProcessedFiles(.n_ProcessedFiles, 2) = EVL(tcProcessed, '') + ENDIF + IF NOT EMPTY(tcHasErrors) + .a_ProcessedFiles(.n_ProcessedFiles, 3) = EVL(tcHasErrors, '') + ENDIF + IF NOT EMPTY(tcSupported) + .a_ProcessedFiles(.n_ProcessedFiles, 4) = EVL(tcSupported, '') + ENDIF + .stdOut( .a_ProcessedFiles(.n_ProcessedFiles,2) ; + + ',' + .a_ProcessedFiles(.n_ProcessedFiles,3) ; + + ',' + .a_ProcessedFiles(.n_ProcessedFiles,4) ; + + ',' + .a_ProcessedFiles(.n_ProcessedFiles,5) ; + + ',' + LOWER(.a_ProcessedFiles(.n_ProcessedFiles,1)) ) + ENDWITH + ENDPROC + + PROCEDURE writeErrorLog LPARAMETERS tcText, tnTimestamp @@ -3372,7 +3499,6 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDIF THIS.c_TextLog = THIS.c_TextLog + EVL(tcText,'') + CR_LF - THIS.stdOut(tcText) CATCH ENDTRY ENDPROC @@ -4246,7 +4372,7 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * toModulo (!@ OUT) Objeto generado de clase correspondiente con la información leida del texto * toEx (!@ OUT) Objeto con información del error - * toFoxBin2Prg (v! IN ) Referencia al objeto principal + * toFoxBin2Prg (!@ IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxBin2Prg #IF .F. @@ -5502,13 +5628,13 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * toModulo (!@ OUT) Objeto generado de clase correspondiente con la información leida del texto * toEx (!@ OUT) Objeto con información del error - * toFoxBin2Prg (v! IN ) Referencia al objeto principal + * toFoxBin2Prg (!@ IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxBin2Prg #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF - DODEFAULT( @toModulo, @toEx ) + DODEFAULT( @toModulo, @toEx, @toFoxBin2Prg ) ENDPROC @@ -7739,7 +7865,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF - DODEFAULT( @toModulo, @toEx ) + DODEFAULT( @toModulo, @toEx, @toFoxBin2Prg ) TRY LOCAL lnCodError, laCodeLines(1), lnCodeLines, lcInputFile, lcInputFile_Class, lnFileCount, laFiles(1,5) ; @@ -7776,10 +7902,16 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toModulo._ExternalClasses , JUSTEXT( JUSTSTEM( lcInputFile_Class ) ), 1, 0, 1, 1+2+4 ) = 0 .writeLog( C_TAB + '- ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) - LOOP && Salteo esta clase + LOOP && Salteo esta clase porque no concuerda con las anotadas ENDIF .writeLog( C_TAB + '+ ' + loLang.C_INCLUDING_CLASS_LOC + ' ' + JUSTFNAME( lcInputFile_Class ) ) + + *-- addProcessedFile( tcInputFile, tcProcessed, tcHasErrors, tcSupported, tcReserved ) + IF toFoxBin2Prg.addProcessedFile( lcInputFile_Class, 'P2', 'E0', 'S1', 'RR' ) THEN + toFoxBin2Prg.updateProcessedFile() + ENDIF + toFoxBin2Prg.normalizarCapitalizacionArchivos( .T., lcInputFile_Class ) C_FB2PRG_CODE = C_FB2PRG_CODE + FILETOSTR( lcInputFile_Class ) ENDFOR @@ -8095,7 +8227,7 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF - DODEFAULT( @toModulo, @toEx ) + DODEFAULT( @toModulo, @toEx, @toFoxBin2Prg ) TRY LOCAL lnCodError, laCodeLines(1), lnCodeLines, lcInputFile, lcInputFile_Class, lnFileCount, laFiles(1,5) ; @@ -8136,6 +8268,12 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin ENDIF .writeLog( C_TAB + '+ ' + loLang.C_INCLUDING_CLASS_LOC + ' ' + JUSTFNAME( lcInputFile_Class ) ) + + *-- addProcessedFile( tcInputFile, tcProcessed, tcHasErrors, tcSupported, tcReserved ) + IF toFoxBin2Prg.addProcessedFile( lcInputFile_Class, 'P2', 'E0', 'S1', 'RR' ) THEN + toFoxBin2Prg.updateProcessedFile() + ENDIF + toFoxBin2Prg.normalizarCapitalizacionArchivos( .T., lcInputFile_Class ) C_FB2PRG_CODE = C_FB2PRG_CODE + FILETOSTR( lcInputFile_Class ) ENDFOR @@ -8453,7 +8591,7 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin * toFoxBin2Prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- LPARAMETERS toProject, toEx AS EXCEPTION, toFoxBin2Prg - DODEFAULT( @toProject, @toEx ) + DODEFAULT( @toProject, @toEx, @toFoxBin2Prg ) #IF .F. LOCAL toProject AS CL_PROJECT OF 'FOXBIN2PRG.PRG' @@ -9253,7 +9391,7 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin * toFoxBin2Prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- LPARAMETERS toReport, toEx AS EXCEPTION, toFoxBin2Prg - DODEFAULT( @toReport, @toEx ) + DODEFAULT( @toReport, @toEx, @toFoxBin2Prg ) #IF .F. LOCAL toReport AS CL_REPORT OF 'FOXBIN2PRG.PRG' @@ -9695,7 +9833,7 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin * toFoxBin2Prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- LPARAMETERS toTable, toEx AS EXCEPTION, toFoxBin2Prg - DODEFAULT( @toTable, @toEx ) + DODEFAULT( @toTable, @toEx, @toFoxBin2Prg ) #IF .F. LOCAL toTable AS CL_DBF_TABLE OF 'FOXBIN2PRG.PRG' @@ -9994,7 +10132,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin * toFoxBin2Prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- LPARAMETERS toDatabase, toEx AS EXCEPTION, toFoxBin2Prg - DODEFAULT( @toDatabase, @toEx ) + DODEFAULT( @toDatabase, @toEx, @toFoxBin2Prg ) #IF .F. LOCAL toDatabase AS CL_DBC OF 'FOXBIN2PRG.PRG' @@ -10177,7 +10315,7 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin * toFoxBin2Prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- LPARAMETERS toMenu, toEx AS EXCEPTION, toFoxBin2Prg - DODEFAULT( @toMenu, @toEx ) + DODEFAULT( @toMenu, @toEx, @toFoxBin2Prg ) #IF .F. LOCAL toMenu AS CL_MENU OF 'FOXBIN2PRG.PRG' @@ -10399,7 +10537,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF - DODEFAULT( @toModulo, @toEx ) + DODEFAULT( @toModulo, @toEx, @toFoxBin2Prg ) ENDPROC @@ -12156,7 +12294,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF - DODEFAULT( @toModulo, @toEx ) + DODEFAULT( @toModulo, @toEx, @toFoxBin2Prg ) TRY LOCAL lnCodError, loRegClass, loRegObj, lnMethodCount, laMethods(1), laCode(1), laProtected(1), lnLen, lnObjCount ; @@ -12459,7 +12597,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg * toFoxBin2Prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxBin2Prg - DODEFAULT( @toModulo, @toEx ) + DODEFAULT( @toModulo, @toEx, @toFoxBin2Prg ) #IF .F. LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' @@ -12787,7 +12925,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF - DODEFAULT( @toModulo, @toEx ) + DODEFAULT( @toModulo, @toEx, @toFoxBin2Prg ) TRY LOCAL lnCodError, lcStr, lnPos, lnLen, lnServerCount, loReg, lcDevInfo, lnLen ; @@ -13133,7 +13271,7 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF - DODEFAULT( @toModulo, @toEx ) + DODEFAULT( @toModulo, @toEx, @toFoxBin2Prg ) TRY LOCAL lnCodError, lcStr, lnPos, lnLen, lnServerCount, loReg, lcDevInfo, lnLen ; @@ -13528,7 +13666,7 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF - DODEFAULT( @toModulo, @toEx ) + DODEFAULT( @toModulo, @toEx, @toFoxBin2Prg ) TRY LOCAL lnCodError, loRegCab, loRegDataEnv, loRegCur, loRegObj, lnMethodCount, laMethods(1), laCode(1), laProtected(1), lnLen ; @@ -13698,7 +13836,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF - DODEFAULT( @toModulo, @toEx ) + DODEFAULT( @toModulo, @toEx, @toFoxBin2Prg ) TRY LOCAL lnCodError, laDatabases(1), lnDatabases_Count, laDatabases2(1), lnLen, lc_FileTypeDesc, laLines(1), lcOutputFile ; @@ -13867,7 +14005,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg * toFoxBin2Prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- LPARAMETERS toDatabase, toEx AS EXCEPTION, toFoxBin2Prg - DODEFAULT( @toDatabase, @toEx ) + DODEFAULT( @toDatabase, @toEx, @toFoxBin2Prg ) #IF .F. LOCAL toDatabase AS CL_DBC OF 'FOXBIN2PRG.PRG' @@ -13940,7 +14078,7 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg * toFoxBin2Prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- LPARAMETERS toMenu, toEx AS EXCEPTION, toFoxBin2Prg - DODEFAULT( @toMenu, @toEx ) + DODEFAULT( @toMenu, @toEx, @toFoxBin2Prg ) #IF .F. LOCAL toMenu AS CL_MENU OF 'FOXBIN2PRG.PRG' @@ -22725,7 +22863,7 @@ DEFINE CLASS CL_LANG AS Custom .C_BACKLINK_OF_TABLE_LOC = "de la table" .C_BACKUP_OF_LOC = "Faire de sauvegarde des: " .C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC = "Vous ne pouvez pas générer un fichier [<>] car il est en lecture seule" - .C_CLASSPERFILE_OPTIMIZATION_BASE_ALREADY_PROCESSED_LOC = "OPTIMISATION: Fichier de base [<>] Déjà traitée, en sautant traitement de fichier [<>]" + .C_CLASSPERFILE_OPTIMIZATION_BASE_ALREADY_PROCESSED_LOC = "OPTIMISATION: Fichier de base [<>] Déjà traitée, en sautant traitement de fichier [<>]" .C_CONFIGFILE_LOC = "Utilisation du fichier de configuration:" .C_CONVERSION_CANCELLED_BY_USER_LOC = "Conversion Annulé par l'utilisateur" .C_CONVERT_ALL_FILES_IN_A_PROJECT_LOC = "Convertir tous les fichiers dans un Projet" @@ -22753,7 +22891,7 @@ 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_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 ; @@ -22810,7 +22948,7 @@ DEFINE CLASS CL_LANG AS Custom .C_BACKLINK_OF_TABLE_LOC = "de la tabla" .C_BACKUP_OF_LOC = "Haciendo Backup de: " .C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC = "No se puede generar el archivo [<>] porque es ReadOnly" - .C_CLASSPERFILE_OPTIMIZATION_BASE_ALREADY_PROCESSED_LOC = "OPTIMIZACIÓN: El archivo Base [<>] ya fue procesado, ignorando el procesamiento del archivo [<>]" + .C_CLASSPERFILE_OPTIMIZATION_BASE_ALREADY_PROCESSED_LOC = "OPTIMIZACIÓN: El archivo Base [<>] ya fue procesado, ignorando el procesamiento del archivo [<>]" .C_CONFIGFILE_LOC = "Usando archivo de configuración:" .C_CONVERSION_CANCELLED_BY_USER_LOC = "Conversión Cancelada por el usuario" .C_CONVERT_ALL_FILES_IN_A_PROJECT_LOC = "Convertir todos los archivos de un Proyecto" @@ -22838,7 +22976,7 @@ 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_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 ; @@ -22895,7 +23033,7 @@ DEFINE CLASS CL_LANG AS Custom .C_BACKLINK_OF_TABLE_LOC = "von Tabelle" .C_BACKUP_OF_LOC = "Erzeuge Backup von: " .C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC = "Kann Datei [<>] nicht generieren, da sie schreibgeschützt ist" - .C_CLASSPERFILE_OPTIMIZATION_BASE_ALREADY_PROCESSED_LOC = "Optimierung: Grund Datei [<>] Schon verarbeitet, das Überspringen Verarbeitung der Datei [<>]" + .C_CLASSPERFILE_OPTIMIZATION_BASE_ALREADY_PROCESSED_LOC = "Optimierung: Grund Datei [<>] Schon verarbeitet, das Überspringen Verarbeitung der Datei [<>]" .C_CONFIGFILE_LOC = "Benutze Konfigurationsdatei:" .C_CONVERSION_CANCELLED_BY_USER_LOC = "Konvertierung durch den Benutzer abgebrochen" .C_CONVERT_ALL_FILES_IN_A_PROJECT_LOC = "alle Dateien in einem Projekt zu konvertieren" @@ -22923,7 +23061,7 @@ 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_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 ; @@ -22980,7 +23118,7 @@ DEFINE CLASS CL_LANG AS Custom .C_BACKLINK_OF_TABLE_LOC = "of table" .C_BACKUP_OF_LOC = "Doing Backup of: " .C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC = "Cannot generate file [<>] because it is ReadOnly" - .C_CLASSPERFILE_OPTIMIZATION_BASE_ALREADY_PROCESSED_LOC = "Optimization: Base File [<>] already processed, skipping processing of file [<>]" + .C_CLASSPERFILE_OPTIMIZATION_BASE_ALREADY_PROCESSED_LOC = "Optimization: Base File [<>] already processed, skipping processing of file [<>]" .C_CONFIGFILE_LOC = "Using configuration file:" .C_CONVERSION_CANCELLED_BY_USER_LOC = "Conversion Cancelled by the user" .C_CONVERT_ALL_FILES_IN_A_PROJECT_LOC = "Convert all files in a Project" @@ -23008,7 +23146,7 @@ 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_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 ; From cd73d10b504cb320c6f67d106b06adf15b203b65 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 14 Mar 2015 13:55:26 +0100 Subject: [PATCH 040/123] =?UTF-8?q?-=20Agregado=20nuevo=20switch=20l=5FAut?= =?UTF-8?q?oClearProcessedFiles=20con=20.T.=20por=20defecto=20-=20Arreglad?= =?UTF-8?q?o=20reporte=20que=20ten=C3=ADa=20un=20CR=20en=20vez=20de=20un?= =?UTF-8?q?=20CR+LF=20en=20uno=20de=20los=20campos=20memo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TESTS/DATOS_READONLY/test_report.frt | Bin 2432 -> 828 bytes TESTS/DATOS_READONLY/test_report.frx | Bin 4300 -> 4300 bytes foxbin2prg.exe | Bin 523416 -> 523625 bytes foxbin2prg.prg | 39 ++++++++++++++++----------- 4 files changed, 24 insertions(+), 15 deletions(-) diff --git a/TESTS/DATOS_READONLY/test_report.frt b/TESTS/DATOS_READONLY/test_report.frt index 4d9e111014e6544a00ac5fd7011977152ba999bc..981baef4d752ca85b8383fbd658ba07980e5ee61 100644 GIT binary patch delta 73 zcmZn=-owVhz`$(7z`($`QScMvL

t%uHI78<@o=H!}-MFajlnl^hjHQj1Hhc)6St Z3raHc^Awf93Y=M-Co{8(Pj+UF0{~KZ5i9@z literal 2432 zcmeHH?`zaB7|y;)r3m{A-W8PX%h3%LQ7YD6#sZb~Qp2T5Lqy^?B`HYj} zFvu8XJUIyi$etg^F$}8LY5>#1`^L;=*ZqLQUe&r+7gp79auf!v5=A8vQO2*_2J1FY z%Zv~YnX!W4(&J6>X^2qE1+nMHN!&oc2ngDjgs#|thGJ< ztM-L*u}NN0IthbZF1#7};2$)iFu0$I$NxFy mom(NuP))f`X^JPb&30_4w*>(((1j zue(|Zap~l5@O?XWT!>Ojm)WWSNw0vrrXM02li$;*d`A2P+{poVd7)}2i&6-41HQ5qe7@NWfiK5TN%DAZ5_C|4TTef z0Tvs4hvO=rFP!he+{y4&K649?g`tTK`>)-B4gv}TKAeA?1dL_tD^+*UIc1Qtur z`w{K_00^Pa!qFaXT55|z884u?7ogu7>t~jEWoc$YpMx8=pV~9&Li!n`=NX>mT8Du2 zK88CvN3FNwemsWbgHJmCfam>)QkhE4e1y4x$5kP?dw|a?rAUBzkmpm~`1LgpF`VWf z1~3ng@GyXRWQ2zS%wr74{ObH{JN_k}mol8M#~DuZ3jyW{j$7k0nbH8olW_gj6Cwi- zXV5$aJ~;j@ZzpJ;W_S@UCy;rD;Z>u%^J$(1AD$o2b#7EG%ySH%S3b9Z2>tvBr*jW8 zFTf4+2et3+--`^-v<=HE^h@Bw`PHscF7-X=m&duYrO>Z1oIo)BD#NGNIZN3U`d(vr z-IVM6_&U!kBv@*1-e9<~l`55&sNZBb8Y@?o)PZ>mZn%D>oU3W2VSoQ zhvB||>ICiIW%yhfRY?sZ%zJRd^H-NL&5h3y=6#0GY%>iBRDS?|WdByOTqsFNQhzwY zGix33j~K2_tJF;uK7m4iJjP|_+ke7vd_QxaJ)!?ohSyC|$m#$@=*tY3vzgSnq;Hh| zjNvxRuz>(rzt7=@>xc7){^v9Y^993k{?`0UhCAz|Zcm{33Ve7z{QmkNVZP?M4L8_) z!}OmvRriI}-+~|6zowLWB@eIw`a7Q6B`)y_{Cl2PB@QW&`GM#2$~JUK&5v+HeYk&1 zi7yzAp#GU}-~EeG`~p7AuT9;hKT-V3@M}@`zX=hoax=55Iyx5zOQO!=D2aA={3>C4 zs5aR~5EbHKVaub<70u`+i=wX1H~X`0%MXYNV6-@iT{1}~8Ce`>QH&?5@#}nD=Gr&% z^b;i%h_Ln0M?_9&BHrTY4m4OtqHdsVe>d*ebg}gOTOz50^~}96FKsBY)!0d1i=pL1VwBjconDTI4BGu z_>1;n+k1QKT^|v-MM-VcQOdx0-d)@fnH-9AeBuddh#I$v$2muL@=^3cb~L;0(q|o-+dTu8-WY7rXuYPL8>Gx3NUranV{toYF$9Mn$ literal 4300 zcmeH}zl$VA6vxXu#k&LVl+#2I8v_I3mhRb^y8YOWv%0G7uHLy_gHr+1TvSM^@itLlkQ zA3t-w5aRNwKcM?^?6?r6mM*hZ0g_$=b)s(~8k67KsC-8JB-E(^cX^>|CyP=DbC%(D zdcp0NioDEiP{*j%5%AQ`mi%_~Bcz@fS$K%f;tr^5dsGN@v8+N@aVNv~N?QkR?n2|_ zV1nHa-{iQ;=ey32VD4u4BA>ZkkAy!*p<{4g)%;Y;y!@BH`dSW<&~w#guVnd^q<;`>8|trURa*kdv#e;YZ=La9P{2|Z#7Ns(knt2QJFdo+hc+3Hd6eN4 zf0)2LwuXlZ%;Rf#n7};2aKu;V2g~^{^SqRyzMf<_#TN|BQyjO(Wiq7+il?Fat0zPT z9%|4$13oDKC0_<;o@ICu4kwU#j^S0K+xj%mgAeP+bDbMi3-bcQ=as)(K!kpA4X3(? zn3tf2_Xqj6=kH~PXWEA475WwMVSKf#luP{x`qlN^*;44&7)~IFex2b{>zt+A75Tlv z@VY5i_v4#9uW-SVzj=${##X9SK1KaD!{Mx4Rnh?F9jM{@m2$48m6G=$zIPe_)arnR zevjdPd>RD)?=yU^jH;vt5#|G^Vg1#mOmpM!2=gJsXSSJ!3sipueq{d^vfNdYE=m3I z8lG9}h=0OxbwQX5RlZhU5F0``Z)wf6nl_DGFKbg9!Zv!{uxybuQ@} zrN3mj%`$8t0M_p-sNwpd{xJTWVlZDb9QC*2-!R-+C-t%d&9~sg`tbYfjfDA*=Qf;R z^F1?u+EncqR{sEgWdE8{>V@3L0_Y!kZufAA7vMkfyed(oK;~zj&nw%|AvM214fDhK z+mrZ$p#=4>ynp)_qxcPcc)vDvd;N*xcZT19zW+stXpx(lUDVN~aa_j-`^9FJB;)O5 zvNIk}q9mGZ(kh+6FM=c+aU4@49yZQ-)LqetUb4tPs7Y>rSx$S0I7(=?BzDOt8KIS7 zyskKU$s+&g^e4fLrX@L=WZkje!3;|~HpugnxSwrn>qqwLA0`=mJE5$aNFeJaJ4l=i zubO0cS&-zo4SY4rVFNk-OOtF4lZcSy`TtsyNj$QX?QkY1 z{F&T@Y~UAdK{mFwRtrKtkypKPJ(pks*Q(CqMmN#`(eg}^6A6mcQLQfDNXOl(JM4}U z=Ug1c*-aDzWOXJxHml}n6HRYMmN=hV?R~Qy8p)____SMFdPZLL{G%}q?Qbq>TtUv# z03pdMn5{$W&Ln3)!cImvW4>GboSaF&kMe3Iq6TK82T9-ZDsO+=p+DXr$y@&fE6k<) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 793fb6c9832effefc8008361d42a75524ff236e1..c2fc92665c8ece10bfb8a5949a6c241d1394c558 100644 GIT binary patch delta 17630 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 z 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 diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 4f9f6e0..e7730f2 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -549,6 +549,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -620,7 +621,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION *-- n_FB2PRG_Version = 1.19 *-- - c_Language = '' && EN, FR, ES, DE + c_Language = '' && EN, FR, ES, DE c_loc_processing_file = '' c_loc_process_progress = '' c_FB2PRG_EXE_Version = '' @@ -649,6 +650,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION n_ShowProgressbar = 1 n_ForceWriteIfReadOnly = 0 l_AllowMultiConfig = .T. + l_AutoClearProcessedFiles = .T. && Por defecto limpia archivos procesados entre ejecución y ejecución l_CancelWithEscKey = .T. l_DropNullCharsFromCode = .T. l_Recompile = .T. @@ -659,9 +661,9 @@ DEFINE CLASS c_foxbin2prg AS SESSION l_ClearUniqueID = .T. l_ClearDBFLastUpdate = .T. l_OptimizeByFilestamp = .F. - 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 + 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 l_StdOutHabilitado = .T. l_Main_CFG_Loaded = .F. n_ExtraBackupLevels = 1 @@ -669,24 +671,24 @@ DEFINE CLASS c_foxbin2prg AS SESSION n_CFG_Actual = 0 n_ID = 0 n_FileHandle = 0 - n_ProcessedFiles = 0 && Contador usado para los archivos file.class.ext - n_ProcessedFilesCount = 0 && Contador genérico de procesados + n_ProcessedFiles = 0 && Contador usado para los archivos file.class.ext + n_ProcessedFilesCount = 0 && Contador genérico de procesados o_Conversor = NULL o_Frm_Avance = NULL o_WSH = NULL o_FSO = NULL - o_FNC = NULL && Filename_caps object + o_FNC = NULL && Filename_caps object o_Configuration = NULL run_AfterCreateTable = '' run_AfterCreate_DB2 = '' - c_VC2 = 'VC2' && VCX - c_SC2 = 'SC2' && SCX - c_PJ2 = 'PJ2' && PJX - c_FR2 = 'FR2' && FRX - c_LB2 = 'LB2' && LBX - c_DB2 = 'DB2' && DBF - c_DC2 = 'DC2' && DBC - c_MN2 = 'MN2' && MNX + c_VC2 = 'VC2' && VCX + c_SC2 = 'SC2' && SCX + c_PJ2 = 'PJ2' && PJX + c_FR2 = 'FR2' && FRX + c_LB2 = 'LB2' && LBX + c_DB2 = 'DB2' && DBF + c_DC2 = 'DC2' && DBC + c_MN2 = 'MN2' && MNX PJX_Conversion_Support = 2 VCX_Conversion_Support = 2 SCX_Conversion_Support = 2 @@ -849,6 +851,9 @@ DEFINE CLASS c_foxbin2prg AS SESSION PROCEDURE ClearProcessedFiles + *-- Limpia las estadísticas de archivos procesados que se usan para optimizar + *-- el procesamiento y evitar el reproceso de los mismos archivos, por ejemplo, + *-- de un mismo VCX compartido por 2 ó más proyectos. WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' .n_ProcessedFilesCount = 0 .n_ProcessedFiles = 0 @@ -2030,6 +2035,10 @@ DEFINE CLASS c_foxbin2prg AS SESSION lnPCount = 0 lcInputFile_Type = '' + IF .l_AutoClearProcessedFiles THEN + .ClearProcessedFiles() && Para evitar acumular procesos anteriores + ENDIF + *-- Funciona y lee los parámetros, pero no le veo un caso de uso claro, ya que si se eligen *-- varios directorios de proyecto, la compilación será errónea. 12/12/2014 *.ReadInputVFPParams( @laParams, @lnPCount ) From d371fccccb4963a77ff54d2042dc51adeb0b3b93 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 14 Mar 2015 14:21:26 +0100 Subject: [PATCH 041/123] - Actualizado del log interno --- foxbin2prg.prg | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index e7730f2..f16ee9c 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -143,7 +143,12 @@ * 05/03/2015 FDBOZZO v1.19.42 Mejora: Cambiada la clase de base de FoxBin2Prg de custom a session (Lutz Scheffler) * 05/03/2015 FDBOZZO v1.19.42 Mejora: Permitir procesar los archivos de un proyecto sin convertir el PJX/2 (Lutz Scheffler) * 06/03/2015 FDBOZZO v1.19.42 Bug Fix pjx: Permitir usar fin de linea (CR/LF) en los atributos de versión del PJX -* 10/03/2015 FDBOZZO v1.19.42 Mejora: Mejorar la API para poder obtener información interna para usar en pre o post-procesos externos (Lutz Scheffler) +* 10/03/2015 FDBOZZO v1.19.42 Mejora: Agregado soporte de errOut e implementado en writeErrorLog +* 10/03/2015 FDBOZZO v1.19.42 Mejora: Agregado soporte total de comodines *? en nombres de archivo para procesar múltiples archivos de la misma extensión +* 10/03/2015 FDBOZZO v1.19.42 Mejora: Nuevo parámetro para permitir un CFG alternativo (Lutz Scheffler) +* 10/03/2015 FDBOZZO v1.19.42 Mejora: Nuevo método API get_Target() para obtener información de los archivos procesados (Lutz Scheffler) +* 10/03/2015 FDBOZZO v1.19.42 Mejora: Nueva salida de archivos procesados a stdOut (Lutz Scheffler) +* 10/03/2015 FDBOZZO v1.19.42 Bug Fix: Arreglada la cancelación del procesamiento con tecla Esc * * *--------------------------------------------------------------------------------------------------- @@ -213,7 +218,9 @@ * 03/03/2015 Lutz Scheffler Mejora v1.19.41: Permitir proceso multi-proyecto (*.PJX, *.PJ2) cuando se especifica "file.pjx", "*" (Agregado en v1.19.42) * 05/03/2015 Lutz Scheffler Mejora v1.19.41: Cambiar clase de base de FoxBin2Prg de custom a session (Agregado en v1.19.42) * 05/03/2015 Lutz Scheffler Mejora v1.19.41: Permitir procesar los archivos de un proyecto sin convertir el PJX/2 (Agregado en v1.19.42) -* 10/03/2015 Lutz Scheffler Mejora v1.19.41: Mejorar la API para poder obtener información interna para usar en pre o post-procesos externos (Agregado en v1.19.42) +* 10/03/2015 Lutz Scheffler Mejora v1.19.41: Permitir configurar un CFG alternativo (Agregado en v1.19.42) +* 10/03/2015 Lutz Scheffler Mejora v1.19.41: Crear un método API get_Target() para obtener información de los archivos procesados (Agregado en v1.19.42) +* 10/03/2015 Lutz Scheffler Mejora v1.19.41: Permitir salida de archivos procesados a stdOut (Agregado en v1.19.42) * * *--------------------------------------------------------------------------------------------------- From 7c7b505e49a8c507faceabf401a8ed9d79db5904 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 14 Mar 2015 15:09:47 +0100 Subject: [PATCH 042/123] =?UTF-8?q?-=20Actualizaci=C3=B3n=20del=20archivo?= =?UTF-8?q?=20de=20versiones?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 83bb08b..2c3c5d5 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -31,6 +31,12 @@ Change History ------------------------------------------------------------- - Feature: Allow processing all project files without converting the PJX/2 (Lutz Scheffler) - Bug Fix pjx/pj2: If end of line (CR+LF) is used on pjx's "Build" properties data, generated pj2 is malformed - Feature: Default foxbin2prg.cfg configuration file renamed to foxbin2prg.cfg.txt to no overwrite user cfg (Lutz Scheffler) +- Added DOS errOut output support and implemented in writeErrorLog when logging errors +- Feature: Added full support for *? file masks for multi-processing files of the same extension +- Feature: Added new parameter to allow alternative main CFG (Lutz Scheffler) +- Feature: Added new get_Target() API method for obtaining information about processed files (Lutz Scheffler) +- Feature: Added new file processing output to DOS stdOut (Lutz Scheffler) +- Bug Fix: Fixed processing cancelation with Esc key 2015/01/18 v1.19.41 - Bug Fix db2: Erroneous detection of Invalid Table when size is less than 328 bytes. Lower limit was changed to 65 bytes. From c0ee98d43488cccf7d2efddab110f6f216a4b47f Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 14 Mar 2015 15:10:20 +0100 Subject: [PATCH 043/123] - EXE --- foxbin2prg.exe | Bin 523625 -> 523625 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index c2fc92665c8ece10bfb8a5949a6c241d1394c558..683313d61321a6be403e738f7ece463ae75c6b33 100644 GIT binary patch delta 7369 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 From c7c5b8e9eae0eaaf58a3844752fb1a3ed860dee3 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 14 Mar 2015 15:34:41 +0100 Subject: [PATCH 044/123] =?UTF-8?q?-=20Arreglo=20de=20la=20evaulaci=C3=B3n?= =?UTF-8?q?=20de=20m=C3=A1scara=20de=20nombre=20de=20archivo=20para=20get?= =?UTF-8?q?=5FTarget()=20-=20Quitado=20mensajes=20de=20compilaci=C3=B3n=20?= =?UTF-8?q?con=20SET=20NOTIFY=20OFF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.exe | Bin 523625 -> 523644 bytes foxbin2prg.prg | 4 +++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index c2fc92665c8ece10bfb8a5949a6c241d1394c558..7799c2a621b5904d0c6b44f9203875c9683ea397 100644 GIT binary patch delta 14797 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 diff --git a/foxbin2prg.prg b/foxbin2prg.prg index f16ee9c..afb2c53 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -721,6 +721,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION SET TABLEPROMPT OFF SET POINT TO '.' SET SEPARATOR TO ',' + SET NOTIFY OFF tcCancelWithEscKey = EVL(tcCancelWithEscKey, '') IF NOT EMPTY(tcCancelWithEscKey) @@ -892,7 +893,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION tcFileMask = EVL(tcFileMask, '*') FOR I = 1 TO .n_ProcessedFiles - IF LIKE( tcFileMask, .a_ProcessedFiles(I,1) ) THEN + IF LIKE( tcFileMask, JUSTFNAME(.a_ProcessedFiles(I,1)) ) THEN lnCount = lnCount + 1 DIMENSION taTargets(lnCount,5) taTargets(lnCount,1) = .a_ProcessedFiles(I,1) @@ -4173,6 +4174,7 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION SET TABLEPROMPT OFF SET BLOCKSIZE TO 0 SET EXACT ON + SET NOTIFY OFF IF NOT EMPTY( ON("ESCAPE") ) THEN SET ESCAPE ON ENDIF From 9f966a547d4d5ee73325aba7025c00cb6bea9e23 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 15 Mar 2015 19:14:30 +0100 Subject: [PATCH 045/123] =?UTF-8?q?-=20Crear=20temporalmente=20el=20archiv?= =?UTF-8?q?o=20de=20eventos=20cuando=20se=20procesa=20un=20DBC=20que=20lo?= =?UTF-8?q?=20usa=20pero=20no=20existe=20f=C3=ADsicamente=20-=20Para=20vis?= =?UTF-8?q?tas=20y=20tablas=20de=20DBC,=20ordenar=20los=20campos=20alfab?= =?UTF-8?q?=C3=A9ticamente=20y=20mantener=20una=20lista=20separada=20del?= =?UTF-8?q?=20orden=20f=C3=ADsico=20de=20los=20mismos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 143 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 139 insertions(+), 4 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 47b2dbe..37026d6 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -14035,21 +14035,40 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg #ENDIF TRY - LOCAL lnCodError, laDatabases(1), lnDatabases_Count, lnLen + LOCAL lnCodError, laDatabases(1), lnDatabases_Count, lcEventsFile STORE 0 TO lnCodError WITH THIS AS c_conversor_dbc_a_prg OF 'FOXBIN2PRG.PRG' lnDatabases_Count = ADATABASES(laDatabases) - USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS TABLABIN + toDatabase = CREATEOBJECT('CL_DBC') + toDatabase._DBC = .c_InputFile + toDatabase.read_DBC_Header() + + *-- Verifico si hay archivo de eventos, y si hay uno definido pero no existe el archivo, + *-- creo uno temporalmente para poder abrir la BDD y luego lo elimino. + IF toDatabase._DBCEvents AND NOT EMPTY(toDatabase._DBCEventFilename) THEN + *-- El archivo de eventos puede tener path relativo o absoluto + IF LEFT(toDatabase._DBCEventFilename,1) = '.' THEN + lcEventsFile = ADDBS( JUSTPATH(.c_InputFile) ) + toDatabase._DBCEventFilename + ELSE + lcEventsFile = toDatabase._DBCEventFilename + ENDIF + IF FILE(lcEventsFile) THEN + lcEventsFile = '' + ELSE + STRTOFILE( '', lcEventsFile ) + ENDIF + ENDIF + OPEN DATABASE (.c_InputFile) SHARED NOUPDATE + .AvanceDelProceso( 'Analyzing DBC metadata...', 1, 2, 1 ) C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() *-- Header - toDatabase = CREATEOBJECT('CL_DBC') C_FB2PRG_CODE = C_FB2PRG_CODE + toDatabase.toText(@toFoxBin2Prg) @@ -14075,8 +14094,12 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg FINALLY USE IN (SELECT("TABLABIN")) CLOSE DATABASES + IF NOT EMPTY(lcEventsFile) THEN + ERASE (lcEventsFile) + ERASE (FORCEEXT(lcEventsFile,'FXP')) + ENDIF RELEASE toDatabase, toEx, toFoxBin2Prg ; - , lnCodError, laDatabases, lnDatabases_Count, lnLen + , lnCodError, laDatabases, lnDatabases_Count ENDTRY RETURN @@ -15150,6 +15173,7 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE _MEMBERDATA = [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -15165,12 +15189,15 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE + [] ; + [] ; + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] __ObjectID = 0 + _DBC = '' _Name = '' @@ -15968,6 +15995,68 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE ENDPROC + PROCEDURE readNext_DBC_HeaderDataRecord + LPARAMETERS tcHeader, tnPos, tnLen, tnID, tcDataType, tcPropName, teData + + LOCAL lnOffset, llRetorno + + TRY + WITH THIS AS CL_DBC_BASE OF 'FOXBIN2PRG.PRG' + tnPos = EVL(tnPos,1) + + IF tnPos >= LEN(tcHeader) THEN + EXIT + ENDIF + + tnLen = CTOBIN( SUBSTR(tcHeader, tnPos, 4), '4RS' ) + tnID = ASC( SUBSTR(tcHeader, tnPos + 4 + 2, 1) ) + tcDataType = .getDBCPropertyValueTypeByPropertyID(tnID) + lnOffset = IIF(tcDataType = 'C', 1, 0) + tcPropName = .getDBCPropertyNameByID(tnID, .T.) + teData = SUBSTR(tcHeader, tnPos + 4 + 2 + 1, tnLen - 4 - 2 - 1 - lnOffset) + + DO CASE + CASE tcDataType = 'B' + teData = ASC(teData) + + CASE tcDataType = 'L' + teData = ( CTOBIN( teData, "1S" ) = 1 ) + + CASE tcDataType = 'N' + teData = CTOBIN( teData, "4S" ) + + ENDCASE + + tnPos = tnPos + tnLen + llRetorno = .T. + ENDWITH + ENDTRY + + RETURN llRetorno + ENDPROC + + + PROCEDURE read_DBC_Header + LOCAL lnLen, lnID, leData, lcHeader, lnPos, lcPropName, lcDataType, lnOffset + + TRY + WITH THIS AS CL_DBC_BASE OF 'FOXBIN2PRG.PRG' + GO TOP IN TABLABIN + lcHeader = TABLABIN.property + ._Name = UPPER( JUSTFNAME( DBF("TABLABIN") ) ) + + DO WHILE .T. + IF NOT .readNext_DBC_HeaderDataRecord( @lcHeader, @lnPos, @lnLen, @lnID, @lcDataType, @lcPropName, @leData ) + EXIT + ENDIF + .AddProperty( '_' + lcPropName, leData ) + ENDDO + + ENDWITH + ENDTRY + ENDPROC + + PROCEDURE setNextID LPARAMETERS tnLastID tnLastID = tnLastID + 1 @@ -17148,6 +17237,29 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE IF lnField_Count > 0 TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> + <<>> + ENDTEXT + + SET TEXTMERGE TO MEMVAR lcText ADDITIVE NOSHOW + SET TEXTMERGE ON + + FOR X = 1 TO lnField_Count + \ <> + ENDFOR + + SET TEXTMERGE OFF + SET TEXTMERGE TO + + SELECT LOWER(TB.objectName) FROM TABLABIN TB ; + INNER JOIN TABLABIN TB2 ON STR(TB.ParentID)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Field',10) ; + AND TB2.objectName = PADR(LOWER(tcTable),128) ; + ORDER BY 1 ASC ; + INTO ARRAY laFields + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <<>> <<>> ENDTEXT @@ -18194,6 +18306,29 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE IF lnField_Count > 0 TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> + <<>> + ENDTEXT + + SET TEXTMERGE TO MEMVAR lcText ADDITIVE NOSHOW + SET TEXTMERGE ON + + FOR X = 1 TO lnField_Count + \ <> + ENDFOR + + SET TEXTMERGE OFF + SET TEXTMERGE TO + + SELECT LOWER(TB.objectName) FROM TABLABIN TB ; + INNER JOIN TABLABIN TB2 ON STR(TB.ParentID)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Field',10) ; + AND TB2.objectName = PADR(LOWER(tcView),128) ; + ORDER BY 1 ASC ; + INTO ARRAY laFields + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <<>> <<>> ENDTEXT From cc41fc1c2eaa80374fb9633a4f734baf40848b0b Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 15 Mar 2015 20:06:41 +0100 Subject: [PATCH 046/123] =?UTF-8?q?-=20Agregado=20el=20ordenamiento=20alfa?= =?UTF-8?q?b=C3=A9tico=20de=20los=20=C3=ADndices=20de=20las=20tablas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 37026d6..fbdaae2 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -682,7 +682,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION n_ID = 0 n_FileHandle = 0 n_Order_View_Fields = 1 - n_ProcessedFiles = 0 && Contador usado para los archivos file.class.ext + n_ProcessedFiles = 0 && Contador usado para los archivos file.class.ext n_ProcessedFilesCount = 0 && Contador genérico de procesados o_Conversor = NULL o_Frm_Avance = NULL @@ -892,10 +892,10 @@ DEFINE CLASS c_foxbin2prg AS SESSION LOCAL lnCount, I lnCount = 0 - + WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' tcFileMask = EVL(tcFileMask, '*') - + FOR I = 1 TO .n_ProcessedFiles IF LIKE( tcFileMask, JUSTFNAME(.a_ProcessedFiles(I,1)) ) THEN lnCount = lnCount + 1 @@ -908,7 +908,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDIF ENDFOR ENDWITH - + RETURN lnCount ENDFUNC @@ -2733,7 +2733,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' loLang = _SCREEN.o_FoxBin2Prg_Lang - + IF toEx.ErrorNo = 1799 THEN && Conversion Cancelled tcErrorInfo = loLang.C_CONVERSION_CANCELLED_BY_USER_LOC ELSE @@ -14035,7 +14035,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg #ENDIF TRY - LOCAL lnCodError, laDatabases(1), lnDatabases_Count, lcEventsFile + LOCAL lnCodError, laDatabases(1), lnDatabases_Count, lcEventsFile STORE 0 TO lnCodError @@ -14099,7 +14099,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg ERASE (FORCEEXT(lcEventsFile,'FXP')) ENDIF RELEASE toDatabase, toEx, toFoxBin2Prg ; - , lnCodError, laDatabases, lnDatabases_Count + , lnCodError, laDatabases, lnDatabases_Count ENDTRY RETURN @@ -15999,7 +15999,7 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE LPARAMETERS tcHeader, tnPos, tnLen, tnID, tcDataType, tcPropName, teData LOCAL lnOffset, llRetorno - + TRY WITH THIS AS CL_DBC_BASE OF 'FOXBIN2PRG.PRG' tnPos = EVL(tnPos,1) @@ -16038,13 +16038,13 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE PROCEDURE read_DBC_Header LOCAL lnLen, lnID, leData, lcHeader, lnPos, lcPropName, lcDataType, lnOffset - + TRY WITH THIS AS CL_DBC_BASE OF 'FOXBIN2PRG.PRG' GO TOP IN TABLABIN - lcHeader = TABLABIN.property + lcHeader = TABLABIN.Property ._Name = UPPER( JUSTFNAME( DBF("TABLABIN") ) ) - + DO WHILE .T. IF NOT .readNext_DBC_HeaderDataRecord( @lcHeader, @lnPos, @lnLen, @lnID, @lcDataType, @lcPropName, @leData ) EXIT @@ -17558,6 +17558,7 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE SELECT LOWER(TB.objectName) FROM TABLABIN TB ; INNER JOIN TABLABIN TB2 ON STR(TB.ParentID)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Index',10) ; AND TB2.objectName = PADR(LOWER(tcTable),128) ; + ORDER BY 1 ; INTO ARRAY laIndexes lnIndex_Count = _TALLY @@ -19473,6 +19474,7 @@ DEFINE CLASS CL_DBF_INDEXES AS CL_COL_BASE ENDTEXT tnTagInfo_Count = ATAGINFO( taTagInfo ) + ASORT( taTagInfo, 1, -1, 0, 1 ) loIndex = CREATEOBJECT("CL_DBF_INDEX") FOR I = 1 TO tnTagInfo_Count From 1f4c0103139d95d66874ac50623a89f310772da9 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 15 Mar 2015 21:30:57 +0100 Subject: [PATCH 047/123] =?UTF-8?q?-=20Reconstrucci=C3=B3n=20del=20DBC=20d?= =?UTF-8?q?esde=20un=20DC2=20con=20los=20nuevos=20campos=20de=20orden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 315 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 249 insertions(+), 66 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index fbdaae2..2a75a6e 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -351,6 +351,8 @@ LPARAMETERS tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDeb #DEFINE C_VIEW_F '' #DEFINE C_VIEWS_I '' #DEFINE C_VIEWS_F '' +#DEFINE C_FIELD_ORDER_I '' +#DEFINE C_FIELD_ORDER_F '' #DEFINE C_FIELD_I '' #DEFINE C_FIELD_F '' #DEFINE C_FIELDS_I '' @@ -502,7 +504,7 @@ ExitProcess(1) && Esta debe ser de las QUIT -******************************************************************************************************************* + DEFINE CLASS c_foxbin2prg AS SESSION #IF .F. LOCAL THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' @@ -3569,7 +3571,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS frm_avance AS FORM Height = 110 Width = 628 @@ -3988,7 +3990,7 @@ DEFINE CLASS frm_avance AS FORM ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS frm_interactive AS form Height = 102 Width = 380 @@ -4075,7 +4077,7 @@ DEFINE CLASS frm_interactive AS form ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS C_CONVERSOR_BASE AS SESSION #IF .F. LOCAL THIS AS C_CONVERSOR_BASE OF 'FOXBIN2PRG.PRG' @@ -5594,7 +5596,7 @@ ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE #IF .F. LOCAL THIS AS c_conversor_prg_a_bin OF 'FOXBIN2PRG.PRG' @@ -7864,7 +7866,7 @@ ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin #IF .F. LOCAL THIS AS c_conversor_prg_a_vcx OF 'FOXBIN2PRG.PRG' @@ -8226,7 +8228,7 @@ ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin #IF .F. LOCAL THIS AS c_conversor_prg_a_scx OF 'FOXBIN2PRG.PRG' @@ -8585,7 +8587,7 @@ ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin #IF .F. LOCAL THIS AS c_conversor_prg_a_pjx OF 'FOXBIN2PRG.PRG' @@ -9391,7 +9393,7 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin #IF .F. LOCAL THIS AS c_conversor_prg_a_frx OF 'FOXBIN2PRG.PRG' @@ -9834,7 +9836,7 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin ENDDEFINE && CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin -******************************************************************************************************************* + DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin #IF .F. LOCAL THIS AS c_conversor_prg_a_dbf OF 'FOXBIN2PRG.PRG' @@ -10129,7 +10131,7 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin ENDDEFINE && CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin -******************************************************************************************************************* + DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin #IF .F. LOCAL THIS AS c_conversor_prg_a_dbc OF 'FOXBIN2PRG.PRG' @@ -10215,10 +10217,21 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin #ENDIF TRY - LOCAL lnCodError + LOCAL lnCodError, lcEventsFile lnCodError = 0 - IF NOT EMPTY(toDatabase._DBCEventFilename) AND FILE(toDatabase._DBCEventFilename) + IF NOT EMPTY(toDatabase._DBCEventFilename) + IF LEFT(toDatabase._DBCEventFilename,1) = '.' THEN + lcEventsFile = ADDBS( JUSTPATH(.c_InputFile) ) + toDatabase._DBCEventFilename + ELSE + lcEventsFile = toDatabase._DBCEventFilename + ENDIF + IF FILE(lcEventsFile) THEN + lcEventsFile = '' + ELSE + STRTOFILE( '', lcEventsFile ) + ENDIF + *-- Si no recompilo el EventFilename.prg, el EXE dará un error (aunque el PRG no) COMPILE ( ADDBS( JUSTPATH( THIS.c_OutputFile ) ) + toDatabase._DBCEventFilename ) ENDIF @@ -10238,6 +10251,12 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin THROW + FINALLY + IF NOT EMPTY(lcEventsFile) THEN + ERASE (lcEventsFile) + ERASE (FORCEEXT(lcEventsFile,'FXP')) + ENDIF + ENDTRY RETURN lnCodError @@ -10314,7 +10333,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ENDDEFINE && CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin -******************************************************************************************************************* + DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin #IF .F. LOCAL THIS AS c_conversor_prg_a_mnx OF 'FOXBIN2PRG.PRG' @@ -10495,7 +10514,7 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin ENDDEFINE && CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin -******************************************************************************************************************* + DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE #IF .F. LOCAL THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG' @@ -12297,7 +12316,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg #IF .F. LOCAL THIS AS c_conversor_vcx_a_prg OF 'FOXBIN2PRG.PRG' @@ -12603,7 +12622,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg #IF .F. LOCAL THIS AS c_conversor_scx_a_prg OF 'FOXBIN2PRG.PRG' @@ -12928,7 +12947,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg #IF .F. LOCAL THIS AS c_conversor_pjx_a_prg OF 'FOXBIN2PRG.PRG' @@ -13665,7 +13684,7 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg #IF .F. LOCAL THIS AS c_conversor_frx_a_prg OF 'FOXBIN2PRG.PRG' @@ -13839,7 +13858,7 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg #IF .F. LOCAL THIS AS c_conversor_dbf_a_prg OF 'FOXBIN2PRG.PRG' @@ -14011,7 +14030,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg #IF .F. LOCAL THIS AS c_conversor_dbc_a_prg OF 'FOXBIN2PRG.PRG' @@ -14107,7 +14126,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg #IF .F. LOCAL THIS AS c_conversor_mnx_a_prg OF 'FOXBIN2PRG.PRG' @@ -14185,7 +14204,7 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_CUS_BASE AS CUSTOM *-- Propiedades (Se preservan: CONTROLCOUNT, CONTROLS, OBJECTS, PARENT, CLASS) HIDDEN BASECLASS, TOP, WIDTH, CLASSLIB, CLASSLIBRARY, COMMENT ; @@ -14273,7 +14292,7 @@ DEFINE CLASS CL_CUS_BASE AS CUSTOM ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_COL_BASE AS COLLECTION #IF .F. LOCAL THIS AS CL_COL_BASE OF 'FOXBIN2PRG.PRG' @@ -14353,7 +14372,7 @@ DEFINE CLASS CL_COL_BASE AS COLLECTION ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_MODULO AS CL_CUS_BASE #IF .F. LOCAL THIS AS CL_MODULO OF 'FOXBIN2PRG.PRG' @@ -14440,7 +14459,7 @@ DEFINE CLASS CL_MODULO AS CL_CUS_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_OLE AS CL_CUS_BASE #IF .F. LOCAL THIS AS CL_OLE OF 'FOXBIN2PRG.PRG' @@ -14462,7 +14481,7 @@ DEFINE CLASS CL_OLE AS CL_CUS_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_CLASE AS CL_CUS_BASE #IF .F. LOCAL THIS AS CL_CLASE OF 'FOXBIN2PRG.PRG' @@ -14648,7 +14667,7 @@ DEFINE CLASS CL_CLASE AS CL_CUS_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_PROCEDURE AS CL_CUS_BASE #IF .F. LOCAL THIS AS CL_PROCEDURE OF 'FOXBIN2PRG.PRG' @@ -14687,7 +14706,7 @@ DEFINE CLASS CL_PROCEDURE AS CL_CUS_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_OBJETO AS CL_CUS_BASE #IF .F. LOCAL THIS AS CL_OBJETO OF 'FOXBIN2PRG.PRG' @@ -14780,7 +14799,7 @@ DEFINE CLASS CL_OBJETO AS CL_CUS_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_REPORT AS CL_COL_BASE #IF .F. LOCAL THIS AS CL_REPORT OF 'FOXBIN2PRG.PRG' @@ -14801,7 +14820,7 @@ DEFINE CLASS CL_REPORT AS CL_COL_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_PROJECT AS CL_COL_BASE #IF .F. LOCAL THIS AS CL_PROJECT OF 'FOXBIN2PRG.PRG' @@ -15120,7 +15139,7 @@ ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_COL_BASE AS CL_COL_BASE #IF .F. LOCAL THIS AS CL_DBC_COL_BASE OF 'FOXBIN2PRG.PRG' @@ -15164,7 +15183,7 @@ DEFINE CLASS CL_DBC_COL_BASE AS CL_COL_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE #IF .F. LOCAL THIS AS CL_DBC_BASE OF 'FOXBIN2PRG.PRG' @@ -16121,7 +16140,7 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC AS CL_DBC_BASE #IF .F. LOCAL THIS AS CL_DBC OF 'FOXBIN2PRG.PRG' @@ -16442,7 +16461,7 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE #IF .F. LOCAL THIS AS CL_DBC_CONNECTIONS OF 'FOXBIN2PRG.PRG' @@ -16579,7 +16598,7 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_CONNECTION AS CL_DBC_BASE #IF .F. LOCAL THIS AS CL_DBC_CONNECTION OF 'FOXBIN2PRG.PRG' @@ -16764,7 +16783,7 @@ DEFINE CLASS CL_DBC_CONNECTION AS CL_DBC_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE #IF .F. LOCAL THIS AS CL_DBC_TABLES OF 'FOXBIN2PRG.PRG' @@ -16906,7 +16925,7 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_TABLE AS CL_DBC_BASE #IF .F. LOCAL THIS AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG' @@ -16982,6 +17001,10 @@ DEFINE CLASS CL_DBC_TABLE AS CL_DBC_BASE CASE C_TABLE_F $ tcLine && Fin EXIT + CASE C_FIELD_ORDER_I $ tcLine + loFields = ._Fields + loFields.analizarBloqueOrden( @tcLine, @taCodeLines, @I, tnCodeLines ) + CASE C_FIELDS_I $ tcLine loFields = ._Fields loFields.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) @@ -17138,12 +17161,22 @@ DEFINE CLASS CL_DBC_TABLE AS CL_DBC_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE #IF .F. LOCAL THIS AS CL_DBC_FIELDS_DB OF 'FOXBIN2PRG.PRG' #ENDIF + _MEMBERDATA = [] ; + + [] ; + + [] ; + + [] ; + + [] + + + DIMENSION a_Campos(1,2) && col.1=campo, col.2=definición + n_Campos = 0 + PROCEDURE analizarBloque *--------------------------------------------------------------------------------------------------- @@ -17156,7 +17189,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE LPARAMETERS tcLine, taCodeLines, I, tnCodeLines TRY - LOCAL llBloqueEncontrado, lcPropName, lcValue, loEx AS EXCEPTION ; + LOCAL llBloqueEncontrado, lcPropName, lcValue, lnPos, loEx AS EXCEPTION ; , loField AS CL_DBC_FIELD_DB OF 'FOXBIN2PRG.PRG' STORE NULL TO loField STORE '' TO lcPropName, lcValue @@ -17179,12 +17212,24 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE loField = NULL loField = CREATEOBJECT("CL_DBC_FIELD_DB") loField.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - .ADD( loField, loField._Name ) + + IF .n_Campos = 0 THEN + *-- MODO LEGACY: Cuando no existe tag de ordenamiento de campos, se agregan en el orden que se leen + .ADD( loField, loField._Name ) + ELSE + lnPos = ASCAN( .a_Campos, loField._Name, 1, 0, 1, 1+2+4+8 ) + .a_Campos( lnPos, 2) = loField + ENDIF OTHERWISE && Otro valor *-- No hay otros valores ENDCASE ENDFOR + + *-- Restablezco el orden de los campos (Solo si n_Campos > 0, que significa que tiene el nuevo tag especial de orden) + FOR lnPos = 1 TO .n_Campos + .ADD( .a_Campos( lnPos, 2), .a_Campos( lnPos, 1) ) + ENDFOR ENDWITH && THIS ENDIF @@ -17209,6 +17254,63 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE ENDPROC + PROCEDURE analizarBloqueOrden + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * tcLine (!@ IN/OUT) Contenido de la línea en análisis + * taCodeLines (!@ IN ) Array de líneas del programa analizado + * I (!@ IN/OUT) Número de línea en análisis + * tnCodeLines (!@ IN ) Cantidad de líneas del programa analizado + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcLine, taCodeLines, I, tnCodeLines + + TRY + LOCAL llBloqueEncontrado, lcPropName, lcValue, loEx AS EXCEPTION ; + , loField AS CL_DBC_FIELD_DB OF 'FOXBIN2PRG.PRG' + STORE NULL TO loField + STORE '' TO lcPropName, lcValue + + IF LEFT(tcLine, LEN(C_FIELD_ORDER_I)) == C_FIELD_ORDER_I + llBloqueEncontrado = .T. + + WITH THIS AS CL_DBC_FIELDS_DB OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) + + DO CASE + CASE EMPTY( tcLine ) + LOOP + + CASE C_FIELD_ORDER_F $ tcLine && Fin + EXIT + + OTHERWISE && campo + .n_Campos = .n_Campos + 1 + DIMENSION .a_Campos(.n_Campos, 2) + .a_Campos(.n_Campos, 1) = tcLine + + ENDCASE + ENDFOR + ENDWITH && THIS + ENDIF + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + FINALLY + STORE NULL TO loField + RELEASE lcPropName, lcValue, loField + + ENDTRY + + RETURN llBloqueEncontrado + ENDPROC + + PROCEDURE toText *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) @@ -17302,7 +17404,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_FIELD_DB AS CL_DBC_BASE #IF .F. LOCAL THIS AS CL_DBC_FIELD_DB OF 'FOXBIN2PRG.PRG' @@ -17460,7 +17562,7 @@ DEFINE CLASS CL_DBC_FIELD_DB AS CL_DBC_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE #IF .F. LOCAL THIS AS CL_DBC_INDEXES_DB OF 'FOXBIN2PRG.PRG' @@ -17606,7 +17708,7 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_INDEX_DB AS CL_DBC_BASE #IF .F. LOCAL THIS AS CL_DBC_INDEX_DB OF 'FOXBIN2PRG.PRG' @@ -17735,17 +17837,17 @@ DEFINE CLASS CL_DBC_INDEX_DB AS CL_DBC_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_INDEXES_VW AS CL_DBC_INDEXES_DB ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_INDEX_VW AS CL_DBC_INDEX_DB ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE #IF .F. LOCAL THIS AS CL_DBC_VIEWS OF 'FOXBIN2PRG.PRG' @@ -17887,7 +17989,7 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE #IF .F. LOCAL THIS AS CL_DBC_VIEW OF 'FOXBIN2PRG.PRG' @@ -17999,6 +18101,10 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE CASE C_VIEW_F $ tcLine && Fin EXIT + CASE C_FIELD_ORDER_I $ tcLine + loFields = ._Fields + loFields.analizarBloqueOrden( @tcLine, @taCodeLines, @I, tnCodeLines ) + CASE C_FIELDS_I $ tcLine loFields = NULL loFields = ._Fields @@ -18206,12 +18312,20 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE #IF .F. LOCAL THIS AS CL_DBC_FIELDS_VW OF 'FOXBIN2PRG.PRG' #ENDIF + _MEMBERDATA = [] ; + + [] ; + + [] ; + + [] ; + + [] + + DIMENSION a_Campos(1,2) && col.1=campo, col.2=definición + n_Campos = 0 PROCEDURE analizarBloque @@ -18248,12 +18362,24 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE loField = NULL loField = CREATEOBJECT("CL_DBC_FIELD_VW") loField.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - .ADD( loField, loField._Name ) + + IF .n_Campos = 0 THEN + *-- MODO LEGACY: Cuando no existe tag de ordenamiento de campos, se agregan en el orden que se leen + .ADD( loField, loField._Name ) + ELSE + lnPos = ASCAN( .a_Campos, loField._Name, 1, 0, 1, 1+2+4+8 ) + .a_Campos( lnPos, 2) = loField + ENDIF OTHERWISE && Otro valor *-- No hay otros valores ENDCASE ENDFOR + + *-- Restablezco el orden de los campos (Solo si n_Campos > 0, que significa que tiene el nuevo tag especial de orden) + FOR lnPos = 1 TO .n_Campos + .ADD( .a_Campos( lnPos, 2), .a_Campos( lnPos, 1) ) + ENDFOR ENDWITH && THIS ENDIF @@ -18279,6 +18405,63 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE + PROCEDURE analizarBloqueOrden + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * tcLine (!@ IN/OUT) Contenido de la línea en análisis + * taCodeLines (!@ IN ) Array de líneas del programa analizado + * I (!@ IN/OUT) Número de línea en análisis + * tnCodeLines (!@ IN ) Cantidad de líneas del programa analizado + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcLine, taCodeLines, I, tnCodeLines + + TRY + LOCAL llBloqueEncontrado, lcPropName, lcValue, loEx AS EXCEPTION ; + , loField AS CL_DBC_FIELD_DB OF 'FOXBIN2PRG.PRG' + STORE NULL TO loField + STORE '' TO lcPropName, lcValue + + IF LEFT(tcLine, LEN(C_FIELD_ORDER_I)) == C_FIELD_ORDER_I + llBloqueEncontrado = .T. + + WITH THIS AS CL_DBC_FIELDS_VW OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) + + DO CASE + CASE EMPTY( tcLine ) + LOOP + + CASE C_FIELD_ORDER_F $ tcLine && Fin + EXIT + + OTHERWISE && campo + .n_Campos = .n_Campos + 1 + DIMENSION .a_Campos(.n_Campos, 2) + .a_Campos(.n_Campos, 1) = tcLine + + ENDCASE + ENDFOR + ENDWITH && THIS + ENDIF + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + FINALLY + STORE NULL TO loField + RELEASE lcPropName, lcValue, loField + + ENDTRY + + RETURN llBloqueEncontrado + ENDPROC + + PROCEDURE toText *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) @@ -18372,7 +18555,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_FIELD_VW AS CL_DBC_BASE #IF .F. LOCAL THIS AS CL_DBC_FIELD_VW OF 'FOXBIN2PRG.PRG' @@ -18547,7 +18730,7 @@ DEFINE CLASS CL_DBC_FIELD_VW AS CL_DBC_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE #IF .F. LOCAL THIS AS CL_DBC_RELATIONS OF 'FOXBIN2PRG.PRG' @@ -18687,7 +18870,7 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_RELATION AS CL_DBC_BASE #IF .F. LOCAL THIS AS CL_DBC_RELATION OF 'FOXBIN2PRG.PRG' @@ -18827,7 +19010,7 @@ DEFINE CLASS CL_DBC_RELATION AS CL_DBC_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE #IF .F. LOCAL THIS AS CL_DBF_TABLE OF 'FOXBIN2PRG.PRG' @@ -19078,7 +19261,7 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBF_FIELDS AS CL_COL_BASE #IF .F. LOCAL THIS AS CL_DBF_FIELDS OF 'FOXBIN2PRG.PRG' @@ -19211,7 +19394,7 @@ DEFINE CLASS CL_DBF_FIELDS AS CL_COL_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBF_FIELD AS CL_CUS_BASE #IF .F. LOCAL THIS AS CL_DBF_FIELD OF 'FOXBIN2PRG.PRG' @@ -19371,7 +19554,7 @@ DEFINE CLASS CL_DBF_FIELD AS CL_CUS_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBF_INDEXES AS CL_COL_BASE #IF .F. LOCAL THIS AS CL_DBF_INDEXES OF 'FOXBIN2PRG.PRG' @@ -19508,7 +19691,7 @@ DEFINE CLASS CL_DBF_INDEXES AS CL_COL_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBF_INDEX AS CL_CUS_BASE #IF .F. LOCAL THIS AS CL_DBF_INDEX OF 'FOXBIN2PRG.PRG' @@ -19632,7 +19815,7 @@ ENDDEFINE *** DH 06/02/2014: added classes CL_DBF_RECORDS and CL_DBF_RECORD -******************************************************************************************************************* + DEFINE CLASS CL_DBF_RECORDS AS CL_COL_BASE #IF .F. LOCAL THIS AS CL_DBF_RECORDS OF 'FOXBIN2PRG.PRG' @@ -19734,7 +19917,7 @@ DEFINE CLASS CL_DBF_RECORDS AS CL_COL_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBF_RECORD AS CL_CUS_BASE #IF .F. LOCAL THIS AS CL_DBF_RECORD OF 'FOXBIN2PRG.PRG' @@ -19839,7 +20022,7 @@ ENDDEFINE *** DH 06/02/2014: end of added classes -******************************************************************************************************************* + DEFINE CLASS CL_PROJ_SRV_HEAD AS CL_CUS_BASE #IF .F. LOCAL THIS AS CL_PROJ_SRV_HEAD OF 'FOXBIN2PRG.PRG' @@ -20128,7 +20311,7 @@ DEFINE CLASS CL_PROJ_SRV_HEAD AS CL_CUS_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_PROJ_SRV_DATA AS CL_CUS_BASE #IF .F. LOCAL THIS AS CL_PROJ_SRV_DATA OF 'FOXBIN2PRG.PRG' @@ -20234,7 +20417,7 @@ DEFINE CLASS CL_PROJ_SRV_DATA AS CL_CUS_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_PROJ_FILE AS CL_CUS_BASE #IF .F. LOCAL THIS AS CL_PROJ_FILE OF 'FOXBIN2PRG.PRG' @@ -20263,7 +20446,7 @@ DEFINE CLASS CL_PROJ_FILE AS CL_CUS_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_MENU_COL_BASE AS CL_COL_BASE _MEMBERDATA = [] ; + [] ; @@ -20494,7 +20677,7 @@ DEFINE CLASS CL_MENU_COL_BASE AS CL_COL_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE #IF .F. LOCAL THIS AS CL_MENU OF 'FOXBIN2PRG.PRG' @@ -21210,7 +21393,7 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE _MEMBERDATA = [] ; + [] ; From 36d8945f40a3e1ff2f8824d4b1d48437e4d1a0ec Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 15 Mar 2015 23:53:10 +0100 Subject: [PATCH 048/123] - Reemplazado un SQL por un ASORT - Forzado modo legacy temporalmente (.n_Campos = 0) --- foxbin2prg.prg | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 2a75a6e..554adaf 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -17173,7 +17173,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE + [] ; + [] - + DIMENSION a_Campos(1,2) && col.1=campo, col.2=definición n_Campos = 0 @@ -17198,6 +17198,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE llBloqueEncontrado = .T. WITH THIS AS CL_DBC_FIELDS_DB OF 'FOXBIN2PRG.PRG' + .n_Campos = 0 FOR I = I + 1 TO tnCodeLines .set_Line( @tcLine, @taCodeLines, I ) @@ -17353,12 +17354,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE SET TEXTMERGE OFF SET TEXTMERGE TO - - SELECT LOWER(TB.objectName) FROM TABLABIN TB ; - INNER JOIN TABLABIN TB2 ON STR(TB.ParentID)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Field',10) ; - AND TB2.objectName = PADR(LOWER(tcTable),128) ; - ORDER BY 1 ASC ; - INTO ARRAY laFields + ASORT( laFields, 1, -1, 0, 1 ) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> @@ -18348,6 +18344,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE llBloqueEncontrado = .T. WITH THIS AS CL_DBC_FIELDS_VW OF 'FOXBIN2PRG.PRG' + .n_Campos = 0 FOR I = I + 1 TO tnCodeLines .set_Line( @tcLine, @taCodeLines, I ) @@ -18504,12 +18501,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE SET TEXTMERGE OFF SET TEXTMERGE TO - - SELECT LOWER(TB.objectName) FROM TABLABIN TB ; - INNER JOIN TABLABIN TB2 ON STR(TB.ParentID)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Field',10) ; - AND TB2.objectName = PADR(LOWER(tcView),128) ; - ORDER BY 1 ASC ; - INTO ARRAY laFields + ASORT( laFields, 1, -1, 0, 1 ) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> From 1b0821088a36b0220c9035f2aae9e6d0c840714e Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Mon, 16 Mar 2015 00:16:23 +0100 Subject: [PATCH 049/123] - Quitado el forzado del modo Legacy - Borrado del DCX/DCT cuando se crea un nuevo DBC (el DCX [memo] existente acumulaba los memos anteriores) --- foxbin2prg.prg | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 554adaf..703c73b 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -16324,6 +16324,8 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE lcStoredProcedures = ._StoredProcedures ERASE (tc_OutputFile) + ERASE (FORCEEXT(tc_OutputFile,'DCX')) + ERASE (FORCEEXT(tc_OutputFile,'DCT')) CREATE DATABASE (tc_OutputFile) CLOSE DATABASES OPEN DATABASE (tc_OutputFile) SHARED @@ -17198,7 +17200,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE llBloqueEncontrado = .T. WITH THIS AS CL_DBC_FIELDS_DB OF 'FOXBIN2PRG.PRG' - .n_Campos = 0 + *.n_Campos = 0 && Para forzar modo LEGACY FOR I = I + 1 TO tnCodeLines .set_Line( @tcLine, @taCodeLines, I ) @@ -18344,7 +18346,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE llBloqueEncontrado = .T. WITH THIS AS CL_DBC_FIELDS_VW OF 'FOXBIN2PRG.PRG' - .n_Campos = 0 + *.n_Campos = 0 && Para forzar modo LEGACY FOR I = I + 1 TO tnCodeLines .set_Line( @tcLine, @taCodeLines, I ) From ede506655c3637159225d2304d5c454d448179a9 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 19 Mar 2015 18:31:01 +0100 Subject: [PATCH 050/123] =?UTF-8?q?-=20Nuevo=20m=C3=A9todo=20"analizarBloq?= =?UTF-8?q?ue=5FEXTERNAL=5FMEMBER"=20(Prg->Bin)=20-=20Nuevo=20m=C3=A9todo?= =?UTF-8?q?=20"identificarBloquesDeCabecera"=20(Prg->Bin)=20-=20Nuevo=20m?= =?UTF-8?q?=C3=A9todo=20"verificar=5FMIEMBROS=5FEXTERNOS"=20(Prg->Bin)=20-?= =?UTF-8?q?=20Nueva=20propiedad=20"=5FSaved"=20en=20todas=20las=20clases?= =?UTF-8?q?=20intermedias=20para=20saver=20si=20los=20datos=20fueron=20pas?= =?UTF-8?q?ados=20a=20propiedades=20-=20Nueva=20propiedad=20"=5FToText"=20?= =?UTF-8?q?que=20guarda=20el=20texto=20generado=20por=20cada=20clase=20ind?= =?UTF-8?q?ependiente,=20para=20poder=20separar=20por=20archivo=20cuando?= =?UTF-8?q?=20se=20usa=20ClassPerFile=20-=20Nuevo=20m=C3=A9todo=20intermed?= =?UTF-8?q?io=20"read=5FBinDataToProperties"=20que=20lee=20los=20datos=20d?= =?UTF-8?q?el=20binario=20y=20los=20pasa=20a=20propiedades=20para=20luego?= =?UTF-8?q?=20generar=20los=20textos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TESTS/DATOS_READONLY/FB2P_DBC.DC2 | 37 + TESTS/DATOS_READONLY/fb2p_dbc.dbc | Bin 8968 -> 10123 bytes TESTS/DATOS_READONLY/fb2p_dbc.dct | Bin 147328 -> 155584 bytes TESTS/DATOS_READONLY/fb2p_dbc.dcx | Bin 5632 -> 5632 bytes TESTS/DATOS_READONLY/fb2p_depto.cdx | Bin 3072 -> 6144 bytes TESTS/DATOS_READONLY/fb2p_depto.db2 | 18 +- TESTS/DATOS_READONLY/fb2p_depto.dbf | Bin 422 -> 421 bytes foxbin2prg.prg | 1698 +++++++++++++++++++++------ 8 files changed, 1379 insertions(+), 374 deletions(-) diff --git a/TESTS/DATOS_READONLY/FB2P_DBC.DC2 b/TESTS/DATOS_READONLY/FB2P_DBC.DC2 index 06eda8c..7ddff4f 100644 --- a/TESTS/DATOS_READONLY/FB2P_DBC.DC2 +++ b/TESTS/DATOS_READONLY/FB2P_DBC.DC2 @@ -102,7 +102,16 @@ .T. + + descrip + + .F. + + + + + @@ -216,6 +225,18 @@ .F. + + + + Relation 1 + NOMBRELARGODELDBF + FB2P_DEPTO + DEPTO + DEPTO + + + +
@@ -393,6 +414,10 @@ STROSNC.DB_DEBUG_SETUP.USUARIO
+ + + + @@ -502,6 +527,10 @@ fb2p_dbc!nombrelargodeldbf.depto
+ + + + @@ -579,6 +608,10 @@ CONVENIOS.HISTORICO
+ + + + @@ -624,6 +657,10 @@ DUAL.DUMMY + + + + diff --git a/TESTS/DATOS_READONLY/fb2p_dbc.dbc b/TESTS/DATOS_READONLY/fb2p_dbc.dbc index 39fe57a02a013aa2ca1f01903a9c2fcf50105719..4cc431df52c764a5cabd4ee1bb8f81d6d4627046 100644 GIT binary patch delta 246 zcmeBh>-J|g;Aa-L+Q=%-E$qX|00s(R0AgxQ*5_WrsI~bDx3M^rmdRuT?ujDin5s-C zU*(>tV1p@P1~h{Yh&}UCQY$7uEu6&000s(R0Aeak*5_Wrq#!VPo$|!ZX*>(X7^ML79108o diff --git a/TESTS/DATOS_READONLY/fb2p_dbc.dct b/TESTS/DATOS_READONLY/fb2p_dbc.dct index b5f6cf72def8db2e42039a8d4f86acd6fb73d592..dfa83a048705f4f55c76cf7dd3d28c9e1500c91a 100644 GIT binary patch delta 125 zcmZqp&v9TsCkF!qXFUT0gTqF_PmB{4IGdT7+L@Ucw=**_)!I&OU}fLV-p2T!d3zfR z(?RCR?W_*l+gX?nFfRv^EF8SNK%I;Xypw%3O;{O$Z28F@Eb^0sHDx9@v$$Z_3DWEy=*Z$H4F(2)Y>l0~P)M&%wdLY{*ch zCst<8Rc66aZ7EhM#8qu2RykRn=fGq(-p#DV$wiq3lXvo}iUg(RB$j06=P4)@!B~cy z@A0azaT|cm1evQjnODS?YrBwz)=%w8TEDa>2Z%Uro+iT0IC-V0ItR>z$rnTo0N;c- A-T(jq delta 135 zcmZqBY0wd1U}1m(K`w>|jGGymUNCO{!N|p>D$c;b$H4F(2v#!u2P*pipM!&g*^r@1 zPppieqgp_$Qi!X1vM$eoi3;+Q-|}ppyp&gU^F3Y_Hf}wzE|5;s$-E-AZ2Vdmv?pmz c4iRyhsKBy$ng}=JL;&Cvfq!uR^Wfp8^WctY{%?=cV8GoCRAE?0Io`sE# ziE+V#je@rr6&i996`&dz#Nb9Vq%b5fLCwC&DCzF%=Njbb12hVo9Wuyv++kz}no?iS Z#LmvdxP@U0$P%vH1i_TFvZT_iVgRkJMA85N delta 42 scmZoLXpq>z#3ISa@E-~uF#i9~z`)Nhz{0}Jz!tDk@B!oI->j@`0Fj#z-~a#s diff --git a/TESTS/DATOS_READONLY/fb2p_depto.db2 b/TESTS/DATOS_READONLY/fb2p_depto.db2 index 219fad7..be40ecc 100644 --- a/TESTS/DATOS_READONLY/fb2p_depto.db2 +++ b/TESTS/DATOS_READONLY/fb2p_depto.db2 @@ -8,7 +8,7 @@ 1252 - 2014/01/06 + fb2p_dbc.dbc0x00000030Visual FoxPro @@ -68,6 +68,22 @@ ASCENDINGMACHINE + + DESCRIP + REGULAR + DESCRIP + + DESCENDING + GENERAL + + + + + D.1.C + la descrip + + +
diff --git a/TESTS/DATOS_READONLY/fb2p_depto.dbf b/TESTS/DATOS_READONLY/fb2p_depto.dbf index b6df06199def2dc9cf20071e0c8bf0b55cb25cf0..6b4840d8666262f7cde5db655ad10da522f9139d 100644 GIT binary patch delta 13 UcmZ3+yp);6fS*}-Bg;ZY02XBf0ssI2 delta 15 WcmZ3=yo{N}fRB-NBg;ZYMkxRs2m=fN diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 703c73b..01aa384 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -271,6 +271,9 @@ LPARAMETERS tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDeb #DEFINE C_EXTERNAL_CLASS_I '*< EXTERNAL_CLASS:' #DEFINE C_EXTERNAL_CLASS_F '/>' #DEFINE C_LEN_EXTERNAL_CLASS_I LEN(C_EXTERNAL_CLASS_I) +#DEFINE C_EXTERNAL_MEMBER_I '*< EXTERNAL_MEMBER:' +#DEFINE C_EXTERNAL_MEMBER_F '/>' +#DEFINE C_LEN_EXTERNAL_MEMBER_I LEN(C_EXTERNAL_MEMBER_I) #DEFINE C_OBJECTDATA_I '*< OBJECTDATA:' #DEFINE C_OBJECTDATA_F '/>' #DEFINE C_LEN_OBJECTDATA_I LEN(C_OBJECTDATA_I) @@ -551,6 +554,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -1932,6 +1936,35 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDFUNC + PROCEDURE get_TextFileNames + LPARAMETERS tcInputFile, taOutputFiles + + EXTERNAL ARRAY taOutputFiles + LOCAL I, lnOutputFiles, lcExt, lnCodeLines, lcCode, laCodeLines(1), lnFileCount, laFiles(1), lcInputFile + + IF TYPE('taOutputFiles',1) # 'A' THEN + ERROR 9, 'taOutputFiles' + ENDIF + + WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + lnOutputFiles = 0 + lcExt = UPPER( JUSTEXT( tcInputFile ) ) + + DO CASE + CASE lcExt = 'VCX' + + + CASE .F. + + + ENDCASE + + ENDWITH + + RETURN lnOutputFiles + ENDPROC + + PROCEDURE Get_Ext2FromExt LPARAMETERS tcExt LOCAL lcExt2 @@ -5613,6 +5646,8 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE + [] ; + [] ; + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -7353,12 +7388,45 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE LOCAL laPropsAndValues(1,2), lnPropsAndValues_Count llBloqueEncontrado = .T. - WITH THIS + WITH THIS AS c_conversor_prg_a_bin OF 'FOXBIN2PRG.PRG' .get_ListNamesWithValuesFrom_InLine_MetadataTag( @tcLine, @laPropsAndValues, @lnPropsAndValues_Count, C_EXTERNAL_CLASS_I, C_EXTERNAL_CLASS_F ) toModulo._ExternalClasses_Count = toModulo._ExternalClasses_Count + 1 - DIMENSION toModulo._ExternalClasses( toModulo._ExternalClasses_Count ) - toModulo._ExternalClasses( toModulo._ExternalClasses_Count ) = .get_ValueByName_FromListNamesWithValues( 'Name', 'C', @laPropsAndValues ) + DIMENSION toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 2 ) + toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 1 ) = .get_ValueByName_FromListNamesWithValues( 'Name', 'C', @laPropsAndValues ) + *toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 2 ) = .get_ValueByName_FromListNamesWithValues( 'Baseclass', 'C', @laPropsAndValues ) + ENDWITH && THIS + ENDIF + + RETURN llBloqueEncontrado + ENDPROC + + + + + PROCEDURE analizarBloque_EXTERNAL_MEMBER + *------------------------------------------------------ + *-- Analiza el bloque *< EXTERNAL_MEMBER: Name="nombre-miembro" Type="tipo-de-miembro" /> + *------------------------------------------------------ + LPARAMETERS toModulo, tcLine, taCodeLines, I, tnCodeLines + + #IF .F. + LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + #ENDIF + + LOCAL llBloqueEncontrado + + IF LEFT(tcLine, C_LEN_EXTERNAL_MEMBER_I) == C_EXTERNAL_MEMBER_I + LOCAL laPropsAndValues(1,2), lnPropsAndValues_Count + llBloqueEncontrado = .T. + + WITH THIS + .get_ListNamesWithValuesFrom_InLine_MetadataTag( @tcLine, @laPropsAndValues, @lnPropsAndValues_Count, C_EXTERNAL_MEMBER_I, C_EXTERNAL_MEMBER_F ) + + toModulo._ExternalClasses_Count = toModulo._ExternalClasses_Count + 1 + DIMENSION toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 2 ) + toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 1 ) = .get_ValueByName_FromListNamesWithValues( 'Name', 'C', @laPropsAndValues ) + toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 2 ) = .get_ValueByName_FromListNamesWithValues( 'Type', 'C', @laPropsAndValues ) ENDWITH && THIS ENDIF @@ -7843,15 +7911,15 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE lnItem = 0 FOR X = 1 TO toModulo._Clases_Count - IF LOWER( toModulo._Clases(X)._ObjName ) == LOWER( toModulo._ExternalClasses(I) ) + IF LOWER( toModulo._Clases(X)._ObjName ) == LOWER( toModulo._ExternalClasses(I,1) ) lnItem = X EXIT ENDIF ENDFOR IF lnItem = 0 THEN - lcClaseExterna = FORCEPATH( JUSTSTEM(toFoxBin2Prg.c_InputFile) + '.' + toModulo._ExternalClasses(I) + '.' + JUSTEXT(toFoxBin2Prg.c_InputFile), JUSTPATH(toFoxBin2Prg.c_InputFile) ) - *ERROR 'No se ha encontrado la clase externa [' + toModulo._ExternalClasses(I) + '] en el archivo [' + toFoxBin2Prg.c_InputFile + ']' + lcClaseExterna = FORCEPATH( JUSTSTEM(toFoxBin2Prg.c_InputFile) + '.' + toModulo._ExternalClasses(I,1) + '.' + JUSTEXT(toFoxBin2Prg.c_InputFile), JUSTPATH(toFoxBin2Prg.c_InputFile) ) + *ERROR 'No se ha encontrado la clase externa [' + toModulo._ExternalClasses(I,1) + '] en el archivo [' + toFoxBin2Prg.c_InputFile + ']' ERROR ( loLang.C_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC + ' [' + lcClaseExterna + ']' ) ENDIF @@ -10096,11 +10164,10 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin FOR I = 1 TO tnCodeLines .set_Line( @lcLine, @taCodeLines, I ) - IF .lineIsOnlyCommentAndNoMetadata( @lcLine, @lc_Comentario ) && Vacía o solo Comentarios - LOOP - ENDIF - DO CASE + CASE .lineIsOnlyCommentAndNoMetadata( @lcLine, @lc_Comentario ) && Vacía o solo Comentarios + LOOP + CASE NOT llFoxBin2Prg_Completed AND .analizarBloque_FoxBin2Prg( toTable, @lcLine, @taCodeLines, @I, tnCodeLines ) llFoxBin2Prg_Completed = .T. @@ -10165,18 +10232,72 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin TRY LOCAL lnCodError, loEx AS EXCEPTION, loReg, lcLine, laCodeLines(1), lnCodeLines ; - , laLineasExclusion(1), lnBloquesExclusion, I + , laLineasExclusion(1), lnBloquesExclusion, I ; + , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' STORE 0 TO lnCodError, lnCodeLines STORE '' TO lcLine STORE NULL TO loReg, toModulo WITH THIS AS c_conversor_prg_a_dbc OF 'FOXBIN2PRG.PRG' - C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) + + *-------- *fdb* + loLang = _SCREEN.o_FoxBin2Prg_Lang + toModulo = CREATEOBJECT('CL_MODULO') + + IF toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_RedirectClassPerFileToMain + C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) + + lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + + .AvanceDelProceso( 'Identifying Header Blocks...', 1, lnCodeLines, 1 ) + .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) + + .AvanceDelProceso( 'Loading Code...', 2, lnCodeLines, 1 ) + + *-- Esto crea la máscara de búsqueda "filename.*.ext" para encontrar las partes + lcInputFile = FORCEPATH( JUSTSTEM( JUSTSTEM(.c_InputFile) ), JUSTPATH(.c_InputFile) ) + '.*.' + JUSTEXT(.c_InputFile) + lnFileCount = ADIR( laFiles, lcInputFile, "", 1 ) + ASORT( laFiles, 1, 0, 0, 1) + + FOR I = 1 TO lnFileCount + lcInputFile_Class = FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile ) + + *-- Verificación de las Clases, si son Externas y se indicó chequearlas + IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toModulo._ExternalClasses , JUSTEXT( JUSTSTEM( lcInputFile_Class ) ), 1, 0, 1, 1+2+4 ) = 0 + .writeLog( C_TAB + '- ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) + .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) + LOOP && Salteo esta clase porque no concuerda con las anotadas + ENDIF + + .writeLog( C_TAB + '+ ' + loLang.C_INCLUDING_CLASS_LOC + ' ' + JUSTFNAME( lcInputFile_Class ) ) + + *-- addProcessedFile( tcInputFile, tcProcessed, tcHasErrors, tcSupported, tcReserved ) + IF toFoxBin2Prg.addProcessedFile( lcInputFile_Class, 'P2', 'E0', 'S1', 'RR' ) THEN + toFoxBin2Prg.updateProcessedFile() + ENDIF + + toFoxBin2Prg.normalizarCapitalizacionArchivos( .T., lcInputFile_Class ) + C_FB2PRG_CODE = C_FB2PRG_CODE + FILETOSTR( lcInputFile_Class ) + ENDFOR + ELSE + *-- No es clase por archivo, o no se quiere redireccionar a Main. + C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) + + lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + + .AvanceDelProceso( 'Identifying Header Blocks...', 1, lnCodeLines, 1 ) + .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) + + ENDIF + *-------- + + + *C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte .AvanceDelProceso( 'Identifying Code Blocks...', 1, 2, 1 ) - .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toDatabase ) + .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toDatabase, @toFoxBin2Prg ) IF .l_Error .writeLog( '*** ERRORS found - Generation Cancelled' ) @@ -10264,6 +10385,89 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin + PROCEDURE identificarBloquesDeCabecera + *-------------------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * taCodeLines (@! IN ) El array con las líneas del código donde buscar + * tnCodeLines (@! IN ) Cantidad de líneas de código + * taLineasExclusion (@! IN ) Array unidimensional con un .T. o .F. según la línea sea de exclusión o no + * tnBloquesExclusion (@! IN ) Cantidad de bloques de exclusión + * toModulo (@? OUT) Objeto con toda la información del módulo analizado + * toFoxBin2Prg (@? IN ) Referencia al objeto principal + *-------------------------------------------------------------------------------------------------------------- + * NOTA: + * Como identificador se usa el nombre de clase o de procedimiento, según corresponda. + *-------------------------------------------------------------------------------------------------------------- + LPARAMETERS taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toModulo, toFoxBin2Prg + + EXTERNAL ARRAY taCodeLines, taLineasExclusion + + #IF .F. + LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF + + TRY + LOCAL I, loEx AS EXCEPTION ; + , llFoxBin2Prg_Completed, llOLE_DEF_Completed, llINCLUDE_SCX_Completed, llLIBCOMMENT_Completed, llEXTERNAL_CLASS_Completed ; + , lc_Comentario, lcProcedureAbierto, lcLine ; + , loClase AS CL_CLASE OF 'FOXBIN2PRG.PRG' + + WITH THIS AS c_conversor_prg_a_bin OF 'FOXBIN2PRG.PRG' + STORE '' TO lcProcedureAbierto + + .c_Type = UPPER(JUSTEXT(.c_OutputFile)) + + IF tnCodeLines > 1 + + *-- Defino el objeto de módulo y sus propiedades + *toModulo = NULL + *toModulo = CREATEOBJECT('CL_MODULO') + + IF NOT (toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_RedirectClassPerFileToMain) + llEXTERNAL_CLASS_Completed = .T. + ENDIF + + *-- Búsqueda del ID de inicio de bloque (DEFINE CLASS / PROCEDURE) + FOR I = 1 TO tnCodeLines + STORE '' TO lc_Comentario + .set_Line( @lcLine, @taCodeLines, I ) + + DO CASE + CASE .lineIsOnlyCommentAndNoMetadata( @lcLine, @lc_Comentario ) && Excluida, vacía o solo Comentarios + + CASE NOT llFoxBin2Prg_Completed AND .analizarBloque_FoxBin2Prg( @toModulo, @lcLine, @taCodeLines, @I, tnCodeLines ) + llFoxBin2Prg_Completed = .T. + + CASE NOT llEXTERNAL_CLASS_Completed AND .analizarBloque_EXTERNAL_MEMBER( @toModulo, @lcLine, @taCodeLines, @I, tnCodeLines ) + *-- Puede haber varias clases externas + + ENDCASE + + ENDFOR + + ENDIF + ENDWITH && THIS + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + FINALLY + STORE NULL TO loClase + RELEASE taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toModulo, loClase, I ; + , llFoxBin2Prg_Completed, llOLE_DEF_Completed, llINCLUDE_SCX_Completed, llLIBCOMMENT_Completed ; + , lc_Comentario, lcProcedureAbierto, lcLine + ENDTRY + + RETURN + ENDPROC + + + PROCEDURE identificarBloquesDeCodigo *-------------------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) @@ -10272,16 +10476,18 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin * taLineasExclusion (@! IN ) Array unidimensional con un .T. o .F. según la línea sea de exclusión o no * tnBloquesExclusion (@? IN ) Sin uso * toDatabase (@? OUT) Objeto con toda la información de la base de datos analizada - * + * toFoxBin2Prg (v! IN ) Referencia al objeto principal + *-------------------------------------------------------------------------------------------------------------- * NOTA: * Como identificador se usa el nombre de clase o de procedimiento, según corresponda. *-------------------------------------------------------------------------------------------------------------- - LPARAMETERS taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toDatabase + LPARAMETERS taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toDatabase, toFoxBin2Prg EXTERNAL ARRAY taCodeLines, taLineasExclusion #IF .F. LOCAL toDatabase AS CL_DBC OF 'FOXBIN2PRG.PRG' + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF TRY @@ -10298,15 +10504,13 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin FOR I = 1 TO tnCodeLines .set_Line( @lcLine, @taCodeLines, I ) - IF .lineIsOnlyCommentAndNoMetadata( @lcLine, @lc_Comentario ) && Vacía o solo Comentarios - LOOP - ENDIF - DO CASE + CASE .lineIsOnlyCommentAndNoMetadata( @lcLine, @lc_Comentario ) && Vacía o solo Comentarios + CASE NOT llFoxBin2Prg_Completed AND .analizarBloque_FoxBin2Prg( toDatabase, @lcLine, @taCodeLines, @I, tnCodeLines ) llFoxBin2Prg_Completed = .T. - CASE NOT llBloqueDatabase_Completed AND toDatabase.analizarBloque( @lcLine, @taCodeLines, @I, tnCodeLines ) + CASE NOT llBloqueDatabase_Completed AND toDatabase.analizarBloque( @lcLine, @taCodeLines, @I, tnCodeLines, @toFoxBin2Prg ) llBloqueDatabase_Completed = .T. ENDCASE @@ -10330,6 +10534,49 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ENDPROC + PROCEDURE verificar_MIEMBROS_EXTERNOS + *-------------------------------------------------------------------------------- + * Compara las clases definidas en la cabecera con las clases encontradas luego + *-------------------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * toModulo (@? OUT) Objeto con toda la información del módulo analizado + * toFoxBin2Prg (@? IN ) Referencia al objeto principal + *-------------------------------------------------------------------------------------------------------------- + LPARAMETERS toModulo, toFoxBin2Prg + + #IF .F. + LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF + + LOCAL lnItem, I, X, lcClaseExterna + LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' + loLang = _SCREEN.o_FoxBin2Prg_Lang + + *-- Verificación de las Clases, si son Externas y se indicó chequearlas + IF toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_ClassPerFileCheck + FOR I = 1 TO toModulo._ExternalClasses_Count + lnItem = 0 + + FOR X = 1 TO toModulo._Clases_Count + IF LOWER( toModulo._Clases(X)._ObjName ) == LOWER( toModulo._ExternalClasses(I,1) ) + lnItem = X + EXIT + ENDIF + ENDFOR + + IF lnItem = 0 THEN + lcClaseExterna = FORCEPATH( JUSTSTEM(toFoxBin2Prg.c_InputFile) + '.' + toModulo._ExternalClasses(I,1) + '.' + JUSTEXT(toFoxBin2Prg.c_InputFile), JUSTPATH(toFoxBin2Prg.c_InputFile) ) + *ERROR 'No se ha encontrado la clase externa [' + toModulo._ExternalClasses(I,1) + '] en el archivo [' + toFoxBin2Prg.c_InputFile + ']' + ERROR ( loLang.C_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC + ' [' + lcClaseExterna + ']' ) + ENDIF + + toModulo._Clases(lnItem)._Checked = .T. + ENDFOR + ENDIF + ENDPROC + + ENDDEFINE && CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin @@ -14054,9 +14301,10 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg #ENDIF TRY - LOCAL lnCodError, laDatabases(1), lnDatabases_Count, lcEventsFile + LOCAL lnCodError, laDatabases(1), lnDatabases_Count, lcEventsFile, laClasses(1,2), lnClasses_Count - STORE 0 TO lnCodError + STORE 0 TO lnCodError, lnClasses_Count + STORE '' TO laClasses WITH THIS AS c_conversor_dbc_a_prg OF 'FOXBIN2PRG.PRG' lnDatabases_Count = ADATABASES(laDatabases) @@ -14304,6 +14552,7 @@ DEFINE CLASS CL_COL_BASE AS COLLECTION _MEMBERDATA = [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -14311,6 +14560,7 @@ DEFINE CLASS CL_COL_BASE AS COLLECTION + [] l_Debug = .F. + _Saved = .F. && Indica si la información fue leida y guardada en las propiedades. PROCEDURE INIT @@ -14395,7 +14645,7 @@ DEFINE CLASS CL_MODULO AS CL_CUS_BASE + [] - DIMENSION _Ole_Objs[1], _Clases[1], _ExternalClasses(1) + DIMENSION _Ole_Objs[1], _Clases[1], _ExternalClasses(1,2) _Version = 0 _SourceFile = '' _ExternalClasses_Count = 0 @@ -15194,6 +15444,8 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE + [] ; + [] ; + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -15205,6 +15457,7 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -15218,6 +15471,8 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE __ObjectID = 0 _DBC = '' _Name = '' + _Saved = .F. && Indica si la información fue leida y guardada en las propiedades. + _ToText = '' && Propiedades pasadas a Texto para guardar en archivo externo xx2 FUNCTION add_Property @@ -16193,8 +16448,15 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE * taCodeLines (!@ IN ) Array de líneas del programa analizado * I (!@ IN/OUT) Número de línea en análisis * tnCodeLines (!@ IN ) Cantidad de líneas del programa analizado - *--------------------------------------------------------------------------------------------------- - LPARAMETERS tcLine, taCodeLines, I, tnCodeLines + * toFoxBin2Prg (v! IN ) Referencia al objeto principal + *-------------------------------------------------------------------------------------------------------------- + LPARAMETERS tcLine, taCodeLines, I, tnCodeLines, toFoxBin2Prg + + EXTERNAL ARRAY taCodeLines + + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF TRY LOCAL loConnections AS CL_DBC_CONNECTIONS OF 'FOXBIN2PRG.PRG' ; @@ -16372,14 +16634,14 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE PROCEDURE toText - LPARAMETERS toFoxBin2Prg + LPARAMETERS toFoxBin2Prg #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF TRY - LOCAL I, lcText, lcDBC, laCode(1,1), loEx AS EXCEPTION ; + LOCAL I, lcText, lcDBC, laCode(1,1), lcConnections, lcTables, lcViews, loEx AS EXCEPTION ; , loConnections AS CL_DBC_CONNECTIONS OF 'FOXBIN2PRG.PRG' ; , loTables AS CL_DBC_TABLES OF 'FOXBIN2PRG.PRG' ; , loViews AS CL_DBC_VIEWS OF 'FOXBIN2PRG.PRG' ; @@ -16387,7 +16649,7 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE STORE NULL TO loRelations, loViews, loTables, loTables WITH THIS AS CL_DBC OF 'FOXBIN2PRG.PRG' - lcText = '' + STORE '' TO lcText, lcConnections, lcTables, lcViews lcDBC = JUSTSTEM(DBC()) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 @@ -16402,15 +16664,15 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE *-- Connections loConnections = ._Connections - lcText = lcText + loConnections.toText( .F., .F., @toFoxBin2Prg ) + lcConnections = loConnections.toText( @toFoxBin2Prg ) *-- Tables loTables = ._Tables - lcText = lcText + loTables.toText( .F., .F., @toFoxBin2Prg ) + lcTables = loTables.toText( @toFoxBin2Prg ) *-- Views loViews = ._Views - lcText = lcText + loViews.toText( .F., .F., @toFoxBin2Prg ) + lcViews = loViews.toText( @toFoxBin2Prg ) SELECT CODE ; FROM TABLABIN ; @@ -16418,11 +16680,19 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE INTO ARRAY laCode ._StoredProcedures = laCode(1,1) + IF NOT toFoxBin2Prg.l_UseClassPerFile THEN + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>><> + <<>><> + <<>><> + <<>> + <<>> <> + <<._StoredProcedures>> + <<>> <> + ENDTEXT + ENDIF + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> <> - <<._StoredProcedures>> - <<>> <> ENDTEXT ENDWITH && THIS @@ -16541,11 +16811,9 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE PROCEDURE toText *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) - * taConnections (@? OUT) Array de conexiones - * tnConnection_Count (@? OUT) Cantidad de conexiones * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg *--------------------------------------------------------------------------------------------------- - LPARAMETERS taConnections, tnConnection_Count, toFoxBin2Prg + LPARAMETERS toFoxBin2Prg #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' @@ -16554,31 +16822,40 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE TRY LOCAL I, lcText, loEx AS EXCEPTION ; , loConnection AS CL_DBC_CONNECTION OF 'FOXBIN2PRG.PRG' - loConnection = NULL - lcText = '' - DIMENSION taConnections(1) - tnConnection_Count = ADBOBJECTS( taConnections,"CONNECTION" ) + WITH THIS AS CL_DBC_CONNECTIONS OF 'FOXBIN2PRG.PRG' + loConnection = NULL + lcText = '' + *DIMENSION taConnections(1) + *tnConnection_Count = ADBOBJECTS( taConnections,"CONNECTION" ) + .read_bindatatoproperties() - IF tnConnection_Count > 0 - ASORT( taConnections, 1, -1, 0, 1 ) + *IF tnConnection_Count > 0 + IF .Count > 0 THEN + *ASORT( taConnections, 1, -1, 0, 1 ) - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> - ENDTEXT + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> + ENDTEXT - loConnection = CREATEOBJECT('CL_DBC_CONNECTION') + *FOR I = 1 TO tnConnection_Count + * loConnection = CREATEOBJECT('CL_DBC_CONNECTION') + * lcText = lcText + loConnection.toText( taConnections(I) ) + * loConnection = NULL + *ENDFOR + .KeySort = 2 + FOR EACH loConnection IN THIS &&FOXOBJECT + lcText = lcText + loConnection.toText( loConnection._Name ) + ENDFOR - FOR I = 1 TO tnConnection_Count - lcText = lcText + loConnection.toText( taConnections(I) ) - ENDFOR + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> + ENDTEXT + ENDIF - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> - ENDTEXT - ENDIF + ENDWITH CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -16597,6 +16874,58 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE ENDPROC + PROCEDURE read_bindatatoproperties + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg + *--------------------------------------------------------------------------------------------------- + LPARAMETERS toFoxBin2Prg + + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF + + TRY + WITH THIS AS CL_DBC_CONNECTIONS OF 'FOXBIN2PRG.PRG' + LOCAL I, lnConnection_Count, laConnections(1), loEx AS EXCEPTION ; + , loConnection AS CL_DBC_CONNECTION OF 'FOXBIN2PRG.PRG' + + IF ._Saved THEN + lnConnection_Count = .Count + EXIT + ENDIF + + loConnection = NULL + lnConnection_Count = ADBOBJECTS( laConnections,"CONNECTION" ) + + IF lnConnection_Count > 0 + *ASORT( laConnections, 1, -1, 0, 1 ) + + FOR I = 1 TO lnConnection_Count + loConnection = CREATEOBJECT('CL_DBC_CONNECTION') + loConnection.read_bindatatoproperties( laConnections(I) ) + .ADD( loConnection, loConnection._Name ) + ENDFOR + ENDIF + ENDWITH + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + FINALLY + loConnection = NULL + RELEASE I, loConnection + + ENDTRY + + RETURN lnConnection_Count + ENDPROC + + ENDDEFINE @@ -16718,28 +17047,34 @@ DEFINE CLASS CL_DBC_CONNECTION AS CL_DBC_BASE TRY LOCAL lcText, loEx AS EXCEPTION - TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> - ENDTEXT + WITH THIS AS CL_DBC_CONNECTION OF 'FOXBIN2PRG.PRG' + .read_bindatatoproperties(tcConnection) + + TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> <<._Name>> + <<>> <<._Comment>> + <<>> <<._DataSource>> + <<>> <<._Database>> + <<>> <<._ConnectString>> + <<>> <<._Asynchronous>> + <<>> <<._BatchMode>> + <<>> <<._ConnectTimeout>> + <<>> <<._DisconnectRollback>> + <<>> <<._DispLogin>> + <<>> <<._DispWarnings>> + <<>> <<._IdleTimeout>> + <<>> <<._PacketSize>> + <<>> <<._PassWord>> + <<>> <<._QueryTimeout>> + <<>> <<._Transactions>> + <<>> <<._UserId>> + <<>> <<._WaitTime>> + <<>> + ENDTEXT + + ._ToText = lcText + ENDWITH CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -16782,6 +17117,36 @@ DEFINE CLASS CL_DBC_CONNECTION AS CL_DBC_BASE ENDPROC + PROCEDURE read_bindatatoproperties + LPARAMETERS tcConnection + + WITH THIS AS CL_DBC_CONNECTION OF 'FOXBIN2PRG.PRG' + IF NOT ._Saved THEN + ._Name = ALLTRIM(tcConnection) + ._Comment = DBGETPROP(tcConnection,"CONNECTION","Comment") + ._DataSource = DBGETPROP(tcConnection,"CONNECTION","DataSource") + ._Database = DBGETPROP(tcConnection,"CONNECTION","Database") + ._ConnectString = DBGETPROP(tcConnection,"CONNECTION","ConnectString") + ._Asynchronous = DBGETPROP(tcConnection,"CONNECTION","Asynchronous") + ._BatchMode = DBGETPROP(tcConnection,"CONNECTION","BatchMode") + ._ConnectTimeout = DBGETPROP(tcConnection,"CONNECTION","ConnectTimeout") + ._DisconnectRollback = DBGETPROP(tcConnection,"CONNECTION","DisconnectRollback") + ._DispLogin = DBGETPROP(tcConnection,"CONNECTION","DispLogin") + ._DispWarnings = DBGETPROP(tcConnection,"CONNECTION","DispWarnings") + ._IdleTimeout = DBGETPROP(tcConnection,"CONNECTION","IdleTimeout") + ._PacketSize = DBGETPROP(tcConnection,"CONNECTION","PacketSize") + ._PassWord = DBGETPROP(tcConnection,"CONNECTION","PassWord") + ._QueryTimeout = DBGETPROP(tcConnection,"CONNECTION","QueryTimeout") + ._Transactions = DBGETPROP(tcConnection,"CONNECTION","Transactions") + ._UserId = DBGETPROP(tcConnection,"CONNECTION","UserId") + ._WaitTime = DBGETPROP(tcConnection,"CONNECTION","WaitTime") + *-- + ._Saved = .T. + ENDIF + ENDWITH + ENDPROC + + ENDDEFINE @@ -16860,52 +17225,59 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE PROCEDURE toText *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) - * taTables (@? OUT) Array de conexiones - * lnTable_Count (@? OUT) Cantidad de conexiones * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg *--------------------------------------------------------------------------------------------------- - LPARAMETERS taTables, tnTable_Count, toFoxBin2Prg + LPARAMETERS toFoxBin2Prg #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF - EXTERNAL ARRAY taTables - TRY LOCAL I, lcText, loEx AS EXCEPTION ; , loTable AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG' - STORE NULL TO loTable - STORE 0 TO I, tnTable_Count - lcText = '' - DIMENSION taTables(1) - tnTable_Count = ADBOBJECTS( taTables,"TABLE" ) + WITH THIS AS CL_DBC_TABLES OF 'FOXBIN2PRG.PRG' + STORE NULL TO loTable + STORE 0 TO I, tnTable_Count + lcText = '' + .read_bindatatoproperties() - IF tnTable_Count > 0 - ASORT( taTables, 1, -1, 0, 1 ) + *DIMENSION taTables(1) + *tnTable_Count = ADBOBJECTS( taTables,"TABLE" ) - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> - ENDTEXT + *IF tnTable_Count > 0 + IF .Count > 0 THEN + *ASORT( taTables, 1, -1, 0, 1 ) - loTable = CREATEOBJECT('CL_DBC_TABLE') + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> + ENDTEXT - FOR I = 1 TO tnTable_Count - lcText = lcText + loTable.toText( taTables(I) ) - ENDFOR + *FOR I = 1 TO tnTable_Count + * loTable = CREATEOBJECT('CL_DBC_TABLE') + * lcText = lcText + loTable.toText( taTables(I) ) + * loTable = NULL + *ENDFOR + .KeySort = 2 + FOR EACH loTable IN THIS &&FOXOBJECT + lcText = lcText + loTable.toText( loTable._Name ) + ENDFOR - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> - ENDTEXT - ENDIF + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> + ENDTEXT + ENDIF + + + ENDWITH CATCH TO loEx - IF BETWEEN(I, 1, tnTable_Count) - loEx.USERVALUE = loEx.USERVALUE + CR_LF + "taTables(" + TRANSFORM(I) + ") = " + RTRIM(TRANSFORM(taTables(I))) + IF VARTYPE(loTable) = "O" THEN + loEx.USERVALUE = loEx.USERVALUE + CR_LF + "loTable._Name = " + TRANSFORM(loTable._Name) ENDIF IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -16924,6 +17296,61 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE ENDPROC + PROCEDURE read_bindatatoproperties + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg + *--------------------------------------------------------------------------------------------------- + LPARAMETERS toFoxBin2Prg + + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF + + TRY + WITH THIS AS CL_DBC_TABLES OF 'FOXBIN2PRG.PRG' + LOCAL I, lnTable_Count, laTables(1), loEx AS EXCEPTION ; + , loTable AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG' + + IF ._Saved THEN + lnTable_Count = .Count + EXIT + ENDIF + + STORE NULL TO loTable + STORE 0 TO I, lnTable_Count + lnTable_Count = ADBOBJECTS( laTables,"TABLE" ) + + IF lnTable_Count > 0 + *ASORT( laTables, 1, -1, 0, 1 ) + + FOR I = 1 TO lnTable_Count + loTable = CREATEOBJECT("CL_DBC_TABLE") + loTable.read_bindatatoproperties( laTables(I) ) + .ADD( loTable, loTable._Name ) + ENDFOR + ENDIF + + ._Saved = .T. + ENDWITH + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + FINALLY + loTable = NULL + RELEASE I, loTable + + ENDTRY + + RETURN lnTable_Count + ENDPROC + + ENDDEFINE @@ -17058,6 +17485,7 @@ DEFINE CLASS CL_DBC_TABLE AS CL_DBC_BASE *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * tcTable (v! IN ) Nombre de la Tabla + * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg *--------------------------------------------------------------------------------------------------- LPARAMETERS tcTable, toFoxBin2Prg @@ -17066,39 +17494,45 @@ DEFINE CLASS CL_DBC_TABLE AS CL_DBC_BASE #ENDIF TRY - LOCAL lcText, loEx AS EXCEPTION ; + LOCAL lcText, lcFields, lcIndexes, lcRelations, loEx AS EXCEPTION ; , loIndexes AS CL_DBC_INDEXES_DB OF 'FOXBIN2PRG.PRG' ; , loFields AS CL_DBC_FIELDS_DB OF 'FOXBIN2PRG.PRG' ; , loRelations AS CL_DBC_RELATIONS OF 'FOXBIN2PRG.PRG' - STORE NULL TO loRelations, loFields, loIndexes - lcText = '' - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - ENDTEXT + WITH THIS AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG' + STORE NULL TO loRelations, loFields, loIndexes + STORE '' TO lcText, lcFields, lcIndexes, lcRelations + .read_bindatatoproperties(tcTable) - loFields = CREATEOBJECT('CL_DBC_FIELDS_DB') - lcText = lcText + loFields.toText( tcTable, @toFoxBin2Prg ) + loFields = CREATEOBJECT('CL_DBC_FIELDS_DB') + lcFields = loFields.toText( tcTable, @toFoxBin2Prg ) - loIndexes = CREATEOBJECT('CL_DBC_INDEXES_DB') - lcText = lcText + loIndexes.toText( tcTable, @toFoxBin2Prg ) + loIndexes = CREATEOBJECT('CL_DBC_INDEXES_DB') + lcIndexes = loIndexes.toText( tcTable, @toFoxBin2Prg ) - loRelations = CREATEOBJECT('CL_DBC_RELATIONS') - lcText = lcText + loRelations.toText( tcTable, .F., .F., @toFoxBin2Prg ) + loRelations = CREATEOBJECT('CL_DBC_RELATIONS') + lcRelations = loRelations.toText( tcTable, @toFoxBin2Prg ) - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>>
- ENDTEXT + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> + <<>> <<._Name>> + <<>> <<._Comment>> + <<>> <<._Path>> + <<>> <<._DeleteTrigger>> + <<>> <<._InsertTrigger>> + <<>> <<._UpdateTrigger>> + <<>> <<._PrimaryKey>> + <<>> <<._RuleExpression>> + <<>> <<._RuleText>> + <> + <> + <> + <<>>
+ ENDTEXT + + ._ToText = lcText + ENDWITH CATCH TO loEx @@ -17160,6 +17594,27 @@ DEFINE CLASS CL_DBC_TABLE AS CL_DBC_BASE ENDPROC + PROCEDURE read_bindatatoproperties + LPARAMETERS tcTable + + WITH THIS AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG' + IF NOT ._Saved THEN + ._Name = ALLTRIM(tcTable) + ._Comment = DBGETPROP(tcTable,"TABLE","Comment") + ._Path = DBGETPROP(tcTable,"TABLE","Path") + ._DeleteTrigger = DBGETPROP(tcTable,"TABLE","DeleteTrigger") + ._InsertTrigger = DBGETPROP(tcTable,"TABLE","InsertTrigger") + ._UpdateTrigger = DBGETPROP(tcTable,"TABLE","UpdateTrigger") + ._PrimaryKey = DBGETPROP(tcTable,"TABLE","PrimaryKey") + ._RuleExpression = DBGETPROP(tcTable,"TABLE","RuleExpression") + ._RuleText = DBGETPROP(tcTable,"TABLE","RuleText") + *-- + ._Saved = .T. + ENDIF + ENDWITH + ENDPROC + + ENDDEFINE @@ -17212,7 +17667,6 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE EXIT CASE C_FIELD_I $ tcLine - loField = NULL loField = CREATEOBJECT("CL_DBC_FIELD_DB") loField.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) @@ -17329,56 +17783,70 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE TRY LOCAL X, lcText, lnField_Count, laFields(1), loEx AS EXCEPTION ; , loField AS CL_DBC_FIELD_DB OF 'FOXBIN2PRG.PRG' - STORE NULL TO loField - STORE 0 TO X, lnField_Count - lcText = '' - _TALLY = 0 - SELECT LOWER(TB.objectName) FROM TABLABIN TB ; + WITH THIS AS CL_DBC_FIELDS_DB OF 'FOXBIN2PRG.PRG' + STORE NULL TO loField + STORE 0 TO X, lnField_Count + lcText = '' + + .read_bindatatoproperties( tcTable, @toFoxBin2Prg ) + + *_TALLY = 0 + *SELECT LOWER(TB.objectName) FROM TABLABIN TB ; INNER JOIN TABLABIN TB2 ON STR(TB.ParentID)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Field',10) ; AND TB2.objectName = PADR(LOWER(tcTable),128) ; INTO ARRAY laFields - lnField_Count = _TALLY + *lnField_Count = _TALLY - IF lnField_Count > 0 - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> - <<>> - ENDTEXT + *IF lnField_Count > 0 + IF .Count > 0 THEN + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> + <<>> + ENDTEXT - SET TEXTMERGE TO MEMVAR lcText ADDITIVE NOSHOW - SET TEXTMERGE ON + SET TEXTMERGE TO MEMVAR lcText ADDITIVE NOSHOW + SET TEXTMERGE ON - FOR X = 1 TO lnField_Count - \ <> - ENDFOR + *FOR X = 1 TO lnField_Count + * \ <> + *ENDFOR + .KeySort = 0 + FOR EACH loField IN THIS &&FOXOBJECT + \ <> + ENDFOR - SET TEXTMERGE OFF - SET TEXTMERGE TO - ASORT( laFields, 1, -1, 0, 1 ) + SET TEXTMERGE OFF + SET TEXTMERGE TO + *ASORT( laFields, 1, -1, 0, 1 ) - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> - <<>> - ENDTEXT + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> + <<>> + ENDTEXT - loField = CREATEOBJECT('CL_DBC_FIELD_DB') + *FOR X = 1 TO lnField_Count + * loField = CREATEOBJECT('CL_DBC_FIELD_DB') + * lcText = lcText + loField.toText( tcTable, laFields(X) ) + * loField = NULL + *ENDFOR + .KeySort = 2 + FOR EACH loField IN THIS &&FOXOBJECT + lcText = lcText + loField.toText( tcTable, loField._Name ) + ENDFOR - FOR X = 1 TO lnField_Count - lcText = lcText + loField.toText( tcTable, laFields(X) ) - ENDFOR - - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - ENDTEXT - ENDIF + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + ENDTEXT + ENDIF + ENDWITH CATCH TO loEx - IF BETWEEN(X, 1, lnField_Count) - loEx.USERVALUE = loEx.USERVALUE + CR_LF + "tcTable = " + RTRIM(TRANSFORM(tcTable)) + ", laFields(" + TRANSFORM(X) + ") = " + RTRIM(TRANSFORM(laFields(X))) + IF VARTYPE(loField) = "O" THEN + loEx.USERVALUE = loEx.USERVALUE + CR_LF + "tcTable = " + RTRIM(TRANSFORM(tcTable)) + ", loField._Name = " + TRANSFORM(loField._Name) ENDIF IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -17388,10 +17856,8 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE THROW FINALLY - USE IN (SELECT("TB")) - USE IN (SELECT("TB2")) STORE NULL TO loField - RELEASE X, lnField_Count, laFields, loField + RELEASE loField ENDTRY @@ -17399,6 +17865,70 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE ENDPROC + PROCEDURE read_bindatatoproperties + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * tcTable (@! IN ) Nombre de la tabla de la que se obtendrán los campos + * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcTable, toFoxBin2Prg + + EXTERNAL ARRAY taFields + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF + + TRY + WITH THIS AS CL_DBC_FIELDS_DB OF 'FOXBIN2PRG.PRG' + LOCAL I, lnField_Count, laFields(1), loEx AS EXCEPTION ; + , loField AS CL_DBC_FIELD_DB OF 'FOXBIN2PRG.PRG' + + IF ._Saved THEN + lnField_Count = .Count + EXIT + ENDIF + + STORE NULL TO loField + STORE 0 TO I, lnField_Count + _TALLY = 0 + SELECT LOWER(TB.objectName) FROM TABLABIN TB ; + INNER JOIN TABLABIN TB2 ON STR(TB.ParentID)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Field',10) ; + AND TB2.objectName = PADR(LOWER(tcTable),128) ; + INTO ARRAY laFields + lnField_Count = _TALLY + + IF lnField_Count > 0 + *ASORT( laFields, 1, -1, 0, 1 ) + + FOR I = 1 TO lnField_Count + loField = CREATEOBJECT("CL_DBC_FIELD_DB") + loField.read_bindatatoproperties( tcTable, laFields(I) ) + .ADD( loField, loField._Name ) + ENDFOR + ENDIF + + ._Saved = .T. + ENDWITH + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + FINALLY + USE IN (SELECT("TB")) + USE IN (SELECT("TB2")) + loField = NULL + RELEASE I, loField + + ENDTRY + + RETURN lnField_Count + ENDPROC + + ENDDEFINE @@ -17506,20 +18036,26 @@ DEFINE CLASS CL_DBC_FIELD_DB AS CL_DBC_BASE LOCAL lcText, loEx AS EXCEPTION lcText = '' - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> - ENDTEXT + WITH THIS AS CL_DBC_FIELD_DB OF 'FOXBIN2PRG.PRG' + .read_bindatatoproperties(tcTable, tcField) + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> <<._Name>> + <<>> <<._Caption>> + <<>> <<._Comment>> + <<>> <<._DefaultValue>> + <<>> <<._DisplayClass>> + <<>> <<._DisplayClassLibrary>> + <<>> <<._Format>> + <<>> <<._InputMask>> + <<>> <<._RuleExpression>> + <<>> <<._RuleText>> + <<>> + ENDTEXT + + ._ToText = lcText + ENDWITH CATCH TO loEx @@ -17557,6 +18093,28 @@ DEFINE CLASS CL_DBC_FIELD_DB AS CL_DBC_BASE ENDPROC + PROCEDURE read_bindatatoproperties + LPARAMETERS tcTable, tcField + + WITH THIS AS CL_DBC_FIELD_DB OF 'FOXBIN2PRG.PRG' + IF NOT ._Saved THEN + ._Name = ALLTRIM(tcField) + ._Caption = DBGETPROP( RTRIM(tcTable) + '.' + RTRIM(tcField),"FIELD","Caption") + ._Comment = DBGETPROP( RTRIM(tcTable) + '.' + RTRIM(tcField),"FIELD","Comment") + ._DefaultValue = DBGETPROP( RTRIM(tcTable) + '.' + RTRIM(tcField),"FIELD","DefaultValue") + ._DisplayClass = DBGETPROP( RTRIM(tcTable) + '.' + RTRIM(tcField),"FIELD","DisplayClass") + ._DisplayClassLibrary = DBGETPROP( RTRIM(tcTable) + '.' + RTRIM(tcField),"FIELD","DisplayClassLibrary") + ._Format = DBGETPROP( RTRIM(tcTable) + '.' + RTRIM(tcField),"FIELD","Format") + ._InputMask = DBGETPROP( RTRIM(tcTable) + '.' + RTRIM(tcField),"FIELD","InputMask") + ._RuleExpression = DBGETPROP( RTRIM(tcTable) + '.' + RTRIM(tcField),"FIELD","RuleExpression") + ._RuleText = DBGETPROP( RTRIM(tcTable) + '.' + RTRIM(tcField),"FIELD","RuleText") + *-- + ._Saved = .T. + ENDIF + ENDWITH + ENDPROC + + ENDDEFINE @@ -17648,41 +18206,50 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE #ENDIF TRY - LOCAL X, lcText, lnIndex_Count, laIndexes(1), loEx AS EXCEPTION ; + LOCAL X, lcText, loEx AS EXCEPTION ; , loIndex AS CL_DBC_INDEX_DB OF 'FOXBIN2PRG.PRG' - STORE NULL TO loIndex - STORE 0 TO X, lnIndex_Count - lcText = '' - _TALLY = 0 - SELECT LOWER(TB.objectName) FROM TABLABIN TB ; + WITH THIS AS CL_DBC_INDEXES_DB OF 'FOXBIN2PRG.PRG' + STORE NULL TO loIndex + lcText = '' + .read_bindatatoproperties(tcTable, @toFoxBin2Prg) + + *_TALLY = 0 + *SELECT LOWER(TB.objectName) FROM TABLABIN TB ; INNER JOIN TABLABIN TB2 ON STR(TB.ParentID)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Index',10) ; AND TB2.objectName = PADR(LOWER(tcTable),128) ; ORDER BY 1 ; INTO ARRAY laIndexes - lnIndex_Count = _TALLY + *lnIndex_Count = _TALLY - IF lnIndex_Count > 0 - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> - ENDTEXT + *IF lnIndex_Count > 0 + IF .Count > 0 THEN + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> + ENDTEXT - loIndex = CREATEOBJECT('CL_DBC_INDEX_DB') + *FOR X = 1 TO lnIndex_Count + * loIndex = CREATEOBJECT('CL_DBC_INDEX_DB') + * lcText = lcText + loIndex.toText( tcTable + '.' + laIndexes(X) ) + * loIndex = NULL + *ENDFOR + *.KeySort = 2 + FOR EACH loIndex IN THIS &&FOXOBJECT + lcText = lcText + loIndex.toText( tcTable + '.' + loIndex._Name ) + ENDFOR - FOR X = 1 TO lnIndex_Count - lcText = lcText + loIndex.toText( tcTable + '.' + laIndexes(X) ) - ENDFOR + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + ENDTEXT + ENDIF - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - ENDTEXT - ENDIF + ENDWITH CATCH TO loEx - IF BETWEEN(X, 1, lnField_Count) - loEx.USERVALUE = loEx.USERVALUE + CR_LF + "laIndexes(" + TRANSFORM(X) + ") = " + RTRIM(laIndexes(X)) + IF VARTYPE(loIndex) = "O" THEN + loEx.USERVALUE = loEx.USERVALUE + CR_LF + "loIndex._Name = " + RTRIM(loIndex._Name) ENDIF IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -17692,8 +18259,6 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE THROW FINALLY - USE IN (SELECT("TB")) - USE IN (SELECT("TB2")) STORE NULL TO loIndex RELEASE X, lnIndex_Count, laIndexes, loIndex @@ -17703,6 +18268,70 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE ENDPROC + PROCEDURE read_bindatatoproperties + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * tcTable (v! IN ) Nombre de la Tabla + * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcTable, toFoxBin2Prg + + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF + + TRY + WITH THIS AS CL_DBC_FIELDS_DB OF 'FOXBIN2PRG.PRG' + LOCAL I, lnIndex_Count, laIndexes(1), loEx AS EXCEPTION ; + , loIndex AS CL_DBC_INDEX_DB OF 'FOXBIN2PRG.PRG' + + IF ._Saved THEN + lnIndex_Count = .Count + EXIT + ENDIF + + STORE NULL TO loIndex + STORE 0 TO I, lnIndex_Count + _TALLY = 0 + SELECT LOWER(TB.objectName) FROM TABLABIN TB ; + INNER JOIN TABLABIN TB2 ON STR(TB.ParentID)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Index',10) ; + AND TB2.objectName = PADR(LOWER(tcTable),128) ; + ORDER BY 1 ; + INTO ARRAY laIndexes + lnIndex_Count = _TALLY + + IF lnIndex_Count > 0 + *ASORT( laFields, 1, -1, 0, 1 ) + + FOR I = 1 TO lnIndex_Count + loIndex = CREATEOBJECT("CL_DBC_INDEX_DB") + loIndex.read_bindatatoproperties( tcTable + '.' + laIndexes(I) ) + .ADD( loIndex, loIndex._Name ) + ENDFOR + ENDIF + + ._Saved = .T. + ENDWITH + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + FINALLY + USE IN (SELECT("TB")) + USE IN (SELECT("TB2")) + loIndex = NULL + RELEASE I, loIndex + + ENDTRY + + RETURN lnIndex_Count + ENDPROC + + ENDDEFINE @@ -17796,13 +18425,17 @@ DEFINE CLASS CL_DBC_INDEX_DB AS CL_DBC_BASE lcText = '' WITH THIS AS CL_DBC_INDEX_DB OF 'FOXBIN2PRG.PRG' + .read_bindatatoproperties(tcIndex) + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> - <<>> <> - <<>> <> - <<>> <<.DBGETPROP(tcIndex,'Index','IsUnique')>> + <<>> <<._Name>> + <<>> <<._Comment>> + <<>> <<._IsUnique>> <<>> ENDTEXT + + ._ToText = lcText ENDWITH && THIS CATCH TO loEx @@ -17832,6 +18465,21 @@ DEFINE CLASS CL_DBC_INDEX_DB AS CL_DBC_BASE ENDPROC + PROCEDURE read_bindatatoproperties + LPARAMETERS tcIndex + + WITH THIS AS CL_DBC_INDEX_DB OF 'FOXBIN2PRG.PRG' + IF NOT ._Saved THEN + ._Name = ALLTRIM(JUSTEXT(tcIndex)) + ._Comment = RTRIM( .DBGETPROP(tcIndex,'Index','Comment') ) + ._IsUnique = .DBGETPROP(tcIndex,'Index','IsUnique') + *-- + ._Saved = .T. + ENDIF + ENDWITH + ENDPROC + + ENDDEFINE @@ -17919,53 +18567,59 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE PROCEDURE toText *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) - * taViews (@? OUT) Array de vistas - * tnView_Count (@? OUT) Cantidad de vistas * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg *--------------------------------------------------------------------------------------------------- - LPARAMETERS taViews, tnView_Count, toFoxBin2Prg + LPARAMETERS toFoxBin2Prg #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF - EXTERNAL ARRAY taViews - TRY - LOCAL I, lcText, lcDBC, lnField_Count, laFields(1), loEx AS EXCEPTION ; + LOCAL lcText, lcDBC, loEx AS EXCEPTION ; , loView AS CL_DBC_VIEW OF 'FOXBIN2PRG.PRG' - STORE NULL TO loView - STORE 0 TO I, X, tnView_Count, lnField_Count - lcText = '' - lcDBC = JUSTSTEM(DBC()) - DIMENSION taViews(1) - tnView_Count = ADBOBJECTS( taViews,"VIEW" ) + WITH THIS AS CL_DBC_VIEWS OF 'FOXBIN2PRG.PRG' + STORE NULL TO loView + lcText = '' + *lcDBC = JUSTSTEM(DBC()) + .read_bindatatoproperties() - IF tnView_Count > 0 - ASORT( taViews, 1, -1, 0, 1 ) + *DIMENSION taViews(1) + *tnView_Count = ADBOBJECTS( taViews,"VIEW" ) - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> - ENDTEXT + *IF tnView_Count > 0 + IF .Count > 0 THEN + *ASORT( taViews, 1, -1, 0, 1 ) - loView = CREATEOBJECT('CL_DBC_VIEW') + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> + ENDTEXT - FOR I = 1 TO tnView_Count - lcText = lcText + loView.toText( taViews(I) ) - ENDFOR + loView = CREATEOBJECT('CL_DBC_VIEW') - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> - ENDTEXT - ENDIF + *FOR I = 1 TO tnView_Count + * lcText = lcText + loView.toText( taViews(I) ) + *ENDFOR + .KeySort = 2 + FOR EACH loView IN THIS &&FOXOBJECT + lcText = lcText + loView.toText( loView._Name ) + ENDFOR + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> + ENDTEXT + ENDIF + + ._Saved = .T. + ENDWITH CATCH TO loEx - IF BETWEEN(I, 1, tnTable_Count) - loEx.USERVALUE = loEx.USERVALUE + CR_LF + "taViews(" + TRANSFORM(I) + ") = " + RTRIM(taViews(I)) + IF VARTYPE(loView) = "O" THEN + loEx.USERVALUE = loEx.USERVALUE + CR_LF + "loView._Name = " + RTRIM(loView._Name) ENDIF IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -17984,6 +18638,61 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE ENDPROC + PROCEDURE read_bindatatoproperties + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg + *--------------------------------------------------------------------------------------------------- + LPARAMETERS toFoxBin2Prg + + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF + + TRY + WITH THIS AS CL_DBC_VIEWS OF 'FOXBIN2PRG.PRG' + LOCAL I, lnView_Count, laViews(1), loEx AS EXCEPTION ; + , loTable AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG' + STORE NULL TO loTable + STORE 0 TO I, tnTable_Count + + IF ._Saved THEN + lnView_Count = .Count + EXIT + ENDIF + + lnView_Count = ADBOBJECTS( laViews,"VIEW" ) + + IF lnView_Count > 0 + *ASORT( taTables, 1, -1, 0, 1 ) + + FOR I = 1 TO lnView_Count + loView = CREATEOBJECT("CL_DBC_VIEW") + loView.read_bindatatoproperties( laViews(I) ) + .ADD( loView, loView._Name ) + ENDFOR + ENDIF + + ._Saved = .T. + ENDWITH + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + FINALLY + loView = NULL + RELEASE I, loView + + ENDTRY + + RETURN lnView_Count + ENDPROC + + ENDDEFINE @@ -18166,65 +18875,74 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE #ENDIF TRY - LOCAL I, lcText, lcDBC, lnField_Count, laFields(1), loEx AS EXCEPTION ; + LOCAL lcText, lcFields, lcIndexes, lcRelations, lcDBC, loEx AS EXCEPTION ; , loFields AS CL_DBC_FIELDS_VW OF 'FOXBIN2PRG.PRG' ; , loIndexes AS CL_DBC_INDEXES_VW OF 'FOXBIN2PRG.PRG' ; , loRelations AS CL_DBC_RELATIONS OF 'FOXBIN2PRG.PRG' STORE NULL TO loRelations, loIndexes, loFields - lcText = '' + STORE '' TO lcText, lcFields, lcIndexes, lcRelations WITH THIS AS CL_DBC_VIEW OF 'FOXBIN2PRG.PRG' + .read_bindatatoproperties(tcView) + TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> <<>> <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> + <<>> <<._Comment>> + <<>> <<._Tables>> + <<>> <<._SQL>> + <<>> <<._AllowSimultaneousFetch>> + <<>> <<._BatchUpdateCount>> + <<>> <<._CompareMemo>> + <<>> <<._ConnectName>> + <<>> <<._FetchAsNeeded>> + <<>> <<._FetchMemo>> + <<>> <<._FetchSize>> + <<>> <<._MaxRecords>> + <<>> <<._Offline>> + <<>> <<._ParameterList>> + <<>> <<._Prepared>> + <<>> <<._RuleExpression>> + <<>> <<._RuleText>> + <<>> <<._SendUpdates>> + <<>> <<._ShareConnection>> + <<>> <<._SourceType>> + <<>> <<._UpdateType>> + <<>> <<._UseMemoSize>> + <<>> <<._WhereType>> ENDTEXT *-- ALGUNOS VALORES QUE EL DBGETPROP OFICIAL NO DEVUELVE *-- Path *-- OfflineRecordCount - IF NOT EMPTY(._Offline) AND EVALUATE(._Offline) + *IF NOT EMPTY(._Offline) AND EVALUATE(._Offline) + IF ._Offline THEN TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <<.DBGETPROP(tcView,"VIEW","Path")>> - <<>> <<.DBGETPROP(tcView,"VIEW","RecordCount")>> + <<>> <<._Path>> + <<>> <<._RecordCount>> ENDTEXT ENDIF *-- loFields = ._Fields - lcText = lcText + loFields.toText( tcView ) + lcFields = loFields.toText( tcView ) loIndexes = ._Indexes - lcText = lcText + loIndexes.toText( tcView ) + lcIndexes = loIndexes.toText( tcView ) - loRelations = CREATEOBJECT('CL_DBC_RELATIONS') - lcText = lcText + loRelations.toText( tcView ) + *loRelations = CREATEOBJECT('CL_DBC_RELATIONS') + loRelations = ._Relations + lcRelations = loRelations.toText( tcView ) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <> + <> + <> <<>> ENDTEXT + + ._ToText = lcText ENDWITH && THIS @@ -18307,6 +19025,48 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE ENDPROC + PROCEDURE read_bindatatoproperties + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * tcView (v! IN ) Vista en evaluación + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcView + + WITH THIS AS CL_DBC_VIEW OF 'FOXBIN2PRG.PRG' + IF NOT ._Saved THEN + ._Name = ALLTRIM(tcView) + ._Comment = DBGETPROP(tcView,"VIEW","Comment") + ._Tables = DBGETPROP(tcView,"VIEW","Tables") + ._SQL = DBGETPROP(tcView,"VIEW","SQL") + ._AllowSimultaneousFetch = DBGETPROP(tcView,"VIEW","AllowSimultaneousFetch") + ._BatchUpdateCount = DBGETPROP(tcView,"VIEW","BatchUpdateCount") + ._CompareMemo = DBGETPROP(tcView,"VIEW","CompareMemo") + ._ConnectName = DBGETPROP(tcView,"VIEW","ConnectName") + ._FetchAsNeeded = DBGETPROP(tcView,"VIEW","FetchAsNeeded") + ._FetchMemo = DBGETPROP(tcView,"VIEW","FetchMemo") + ._FetchSize = DBGETPROP(tcView,"VIEW","FetchSize") + ._MaxRecords = DBGETPROP(tcView,"VIEW","MaxRecords") + ._Offline = DBGETPROP(tcView,"VIEW","Offline") + ._ParameterList = DBGETPROP(tcView,"VIEW","ParameterList") + ._Prepared = DBGETPROP(tcView,"VIEW","Prepared") + ._RuleExpression = DBGETPROP(tcView,"VIEW","RuleExpression") + ._RuleText = DBGETPROP(tcView,"VIEW","RuleText") + ._SendUpdates = DBGETPROP(tcView,"VIEW","SendUpdates") + ._ShareConnection = DBGETPROP(tcView,"VIEW","ShareConnection") + ._SourceType = DBGETPROP(tcView,"VIEW","SourceType") + ._UpdateType = DBGETPROP(tcView,"VIEW","UpdateType") + ._UseMemoSize = DBGETPROP(tcView,"VIEW","UseMemoSize") + ._WhereType = DBGETPROP(tcView,"VIEW","WhereType") + *-- + ._Path = .DBGETPROP(tcView,"VIEW","Path") + ._RecordCount = .DBGETPROP(tcView,"VIEW","RecordCount") + *-- + ._Saved = .T. + ENDIF + ENDWITH + ENDPROC + + ENDDEFINE @@ -18474,58 +19234,69 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE #ENDIF TRY - LOCAL X, lcText, lnField_Count, laFields(1), loEx AS EXCEPTION ; + LOCAL lcText, loEx AS EXCEPTION ; , loField AS CL_DBC_FIELD_VW OF 'FOXBIN2PRG.PRG' STORE NULL TO loField - STORE 0 TO X, tnTable_Count, lnField_Count lcText = '' - _TALLY = 0 - SELECT LOWER(TB.objectName) FROM TABLABIN TB ; + WITH THIS AS CL_DBC_FIELDS_VW OF 'FOXBIN2PRG.PRG' + *_TALLY = 0 + *SELECT LOWER(TB.objectName) FROM TABLABIN TB ; INNER JOIN TABLABIN TB2 ON STR(TB.ParentID)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Field',10) ; AND TB2.objectName = PADR(LOWER(tcView),128) ; INTO ARRAY laFields - lnField_Count = _TALLY + *lnField_Count = _TALLY + .read_bindatatoproperties(tcView, @toFoxBin2Prg) - IF lnField_Count > 0 - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> - <<>> - ENDTEXT + *IF lnField_Count > 0 + IF .Count > 0 THEN + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> + <<>> + ENDTEXT - SET TEXTMERGE TO MEMVAR lcText ADDITIVE NOSHOW - SET TEXTMERGE ON + SET TEXTMERGE TO MEMVAR lcText ADDITIVE NOSHOW + SET TEXTMERGE ON - FOR X = 1 TO lnField_Count - \ <> - ENDFOR + *FOR X = 1 TO lnField_Count + * \ <> + *ENDFOR + .KeySort = 0 + FOR EACH loField IN THIS &&FOXOBJECT + \ <> + ENDFOR - SET TEXTMERGE OFF - SET TEXTMERGE TO - ASORT( laFields, 1, -1, 0, 1 ) + SET TEXTMERGE OFF + SET TEXTMERGE TO + *ASORT( laFields, 1, -1, 0, 1 ) - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> - <<>> - ENDTEXT + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> + <<>> + ENDTEXT - loField = CREATEOBJECT("CL_DBC_FIELD_VW") + *loField = CREATEOBJECT("CL_DBC_FIELD_VW") - FOR X = 1 TO lnField_Count - lcText = lcText + loField.toText( tcView, laFields(X) ) - ENDFOR + *FOR X = 1 TO lnField_Count + * lcText = lcText + loField.toText( tcView, laFields(X) ) + *ENDFOR + .KeySort = 2 + FOR EACH loField IN THIS &&FOXOBJECT + lcText = lcText + loField.toText( tcView, loField._Name ) + ENDFOR - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - ENDTEXT - ENDIF + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + ENDTEXT + ENDIF + ENDWITH CATCH TO loEx - IF BETWEEN(X, 1, lnField_Count) - loEx.USERVALUE = loEx.USERVALUE + CR_LF + "laFields(" + TRANSFORM(X) + ") = " + RTRIM(laFields(X)) + IF VARTYPE(loField) = "O" THEN + loEx.USERVALUE = loEx.USERVALUE + CR_LF + "loField._Name = " + RTRIM(loField._Name) ENDIF IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -18535,8 +19306,6 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE THROW FINALLY - USE IN (SELECT("TB")) - USE IN (SELECT("TB2")) STORE NULL TO loField RELEASE X, lnField_Count, laFields, loField @@ -18546,6 +19315,70 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE ENDPROC + PROCEDURE read_bindatatoproperties + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * tcView (@! IN ) Nombre de la vista de la que se obtendrán los campos + * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcView, toFoxBin2Prg + + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF + + TRY + LOCAL I, lcText, lnField_Count, laFields(1), loEx AS EXCEPTION ; + , loField AS CL_DBC_FIELD_VW OF 'FOXBIN2PRG.PRG' + STORE NULL TO loField + STORE 0 TO I, lnField_Count + lcText = '' + + WITH THIS AS CL_DBC_FIELDS_VW OF 'FOXBIN2PRG.PRG' + IF ._Saved THEN + lnField_Count = .Count + EXIT + ENDIF + + _TALLY = 0 + SELECT LOWER(TB.objectName) FROM TABLABIN TB ; + INNER JOIN TABLABIN TB2 ON STR(TB.ParentID)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Field',10) ; + AND TB2.objectName = PADR(LOWER(tcView),128) ; + INTO ARRAY laFields + lnField_Count = _TALLY + + IF lnField_Count > 0 + *ASORT( taFields, 1, -1, 0, 1 ) + + FOR I = 1 TO lnField_Count + loField = CREATEOBJECT("CL_DBC_FIELD_VW") + loField.read_bindatatoproperties( tcView, laFields(I) ) + .ADD( loField, loField._Name ) + ENDFOR + ENDIF + + ._Saved = .T. + ENDWITH + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + FINALLY + USE IN (SELECT("TB")) + USE IN (SELECT("TB2")) + loField = NULL + RELEASE I, loField + + ENDTRY + + RETURN lnField_Count + ENDPROC + + ENDDEFINE @@ -18659,31 +19492,34 @@ DEFINE CLASS CL_DBC_FIELD_VW AS CL_DBC_BASE LPARAMETERS tcView, tcField TRY - LOCAL lcText, loEx AS EXCEPTION - lcText = '' + WITH THIS AS CL_DBC_FIELD_VW OF 'FOXBIN2PRG.PRG' + LOCAL lcText, loEx AS EXCEPTION + lcText = '' - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> - ENDTEXT + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> <<._Name>> + <<>> <<._Caption>> + <<>> <<._Comment>> + <<>> <<._DataType>> + <<>> <<._DefaultValue>> + <<>> <<._DisplayClass>> + <<>> <<._DisplayClassLibrary>> + <<>> <<._Format>> + <<>> <<._InputMask>> + <<>> <<._KeyField>> + <<>> <<._RuleExpression>> + <<>> <<._RuleText>> + <<>> <<._Updatable>> + <<>> <<._UpdateName>> + <<>> + ENDTEXT + ._ToText = lcText + ENDWITH CATCH TO loEx - loEx.USERVALUE = loEx.USERVALUE + CR_LF + "tcField = " + RTRIM(TRANSFORM(tcField)) + loEx.USERVALUE = loEx.USERVALUE + CR_LF + "tcView.tcField = " + TRANSFORM(tcView) + '.' + TRANSFORM(tcField) IF THIS.l_Debug AND _VFP.STARTMODE = 0 SET STEP ON @@ -18721,6 +19557,32 @@ DEFINE CLASS CL_DBC_FIELD_VW AS CL_DBC_BASE ENDPROC + PROCEDURE read_bindatatoproperties + LPARAMETERS tcView, tcField + + WITH THIS AS CL_DBC_FIELD_VW OF 'FOXBIN2PRG.PRG' + IF NOT ._Saved THEN + ._Name = ALLTRIM(tcField) + ._Caption = DBGETPROP( RTRIM(tcView) + '.' + RTRIM(tcField),"FIELD","Caption") + ._Comment = DBGETPROP( RTRIM(tcView) + '.' + RTRIM(tcField),"FIELD","Comment") + ._DataType = DBGETPROP( RTRIM(tcView) + '.' + RTRIM(tcField),"FIELD","DataType") + ._DefaultValue = DBGETPROP( RTRIM(tcView) + '.' + RTRIM(tcField),"FIELD","DefaultValue") + ._DisplayClass = DBGETPROP( RTRIM(tcView) + '.' + RTRIM(tcField),"FIELD","DisplayClass") + ._DisplayClassLibrary = DBGETPROP( RTRIM(tcView) + '.' + RTRIM(tcField),"FIELD","DisplayClassLibrary") + ._Format = DBGETPROP( RTRIM(tcView) + '.' + RTRIM(tcField),"FIELD","Format") + ._InputMask = DBGETPROP( RTRIM(tcView) + '.' + RTRIM(tcField),"FIELD","InputMask") + ._KeyField = DBGETPROP( RTRIM(tcView) + '.' + RTRIM(tcField),"FIELD","KeyField") + ._RuleExpression = DBGETPROP( RTRIM(tcView) + '.' + RTRIM(tcField),"FIELD","RuleExpression") + ._RuleText = DBGETPROP( RTRIM(tcView) + '.' + RTRIM(tcField),"FIELD","RuleText") + ._Updatable = DBGETPROP( RTRIM(tcView) + '.' + RTRIM(tcField),"FIELD","Updatable") + ._UpdateName = DBGETPROP( RTRIM(tcView) + '.' + RTRIM(tcField),"FIELD","UpdateName") + *-- + ._Saved = .T. + ENDIF + ENDWITH + ENDPROC + + ENDDEFINE @@ -18799,50 +19661,53 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * tcTable (v! IN ) Tabla de la que obtener las relaciones - * taRelations (@? OUT) Array de relaciones - * tnRelation_Count (@? OUT) Cantidad de relaciones * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg *--------------------------------------------------------------------------------------------------- - LPARAMETERS tcTable, taRelations, tnRelation_Count, toFoxBin2Prg + LPARAMETERS tcTable, toFoxBin2Prg #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF - EXTERNAL ARRAY taRelations - TRY - LOCAL I, X, lcText, loEx AS EXCEPTION ; - , loRelation AS CL_DBC_RELATION OF 'FOXBIN2PRG.PRG' - STORE NULL TO loRelation - lcText = '' - X = 0 + WITH THIS AS CL_DBC_RELATIONS OF 'FOXBIN2PRG.PRG' + LOCAL I, lnRelation_Count, laRelations(1,5), lcText, loEx AS EXCEPTION ; + , loRelation AS CL_DBC_RELATION OF 'FOXBIN2PRG.PRG' + STORE NULL TO loRelation + lcText = '' + X = 0 + .read_bindatatoproperties(tcTable, @toFoxBin2Prg) - DIMENSION taRelations(1,5) - tnRelation_Count = ADBOBJECTS( taRelations,"RELATION" ) + *DIMENSION laRelations(1,5) + *lnRelation_Count = ADBOBJECTS( laRelations,"RELATION" ) - IF tnRelation_Count > 0 - ASORT( taRelations, 2, -1, 0, 1 ) - ASORT( taRelations, 1, -1, 0, 1 ) + *IF lnRelation_Count > 0 + IF .Count > 0 THEN + *ASORT( laRelations, 2, -1, 0, 1 ) + *ASORT( laRelations, 1, -1, 0, 1 ) - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> - ENDTEXT + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> + ENDTEXT - loRelation = CREATEOBJECT('CL_DBC_RELATION') + *loRelation = CREATEOBJECT('CL_DBC_RELATION') - FOR I = 1 TO tnRelation_Count - IF taRelations(I,1) == UPPER( RTRIM( tcTable ) ) - lcText = lcText + loRelation.toText( @taRelations, I ) - ENDIF - ENDFOR + *FOR I = 1 TO lnRelation_Count + * IF laRelations(I,1) == UPPER( RTRIM( tcTable ) ) + * lcText = lcText + loRelation.toText( @laRelations, I ) + * ENDIF + *ENDFOR + FOR EACH loRelation IN THIS &&FOXOBJECT + lcText = lcText + loRelation.toText() + ENDFOR - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> - ENDTEXT - ENDIF + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> + ENDTEXT + ENDIF + ENDWITH CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -18861,6 +19726,62 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE ENDPROC + PROCEDURE read_bindatatoproperties + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * tcTable (v! IN ) Tabla de la que obtener las relaciones + * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcTable, toFoxBin2Prg + + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF + + TRY + WITH THIS AS CL_DBC_RELATIONS OF 'FOXBIN2PRG.PRG' + LOCAL X, lnRelation_Count, laRelations(1,5), lcText, loEx AS EXCEPTION ; + , loRelation AS CL_DBC_RELATION OF 'FOXBIN2PRG.PRG' + + STORE NULL TO loRelation + lcText = '' + X = 0 + + lnRelation_Count = ADBOBJECTS( laRelations, "RELATION" ) + + IF lnRelation_Count > 0 + ASORT( laRelations, 2, -1, 0, 1 ) + ASORT( laRelations, 1, -1, 0, 1 ) + + FOR X = 1 TO lnRelation_Count + IF laRelations(X,1) == UPPER( RTRIM( tcTable ) ) + loRelation = CREATEOBJECT('CL_DBC_RELATION') + loRelation.read_bindatatoproperties( @laRelations, X ) + .ADD( loRelation, loRelation._Name ) + ENDIF + ENDFOR + + ENDIF + + ENDWITH + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + FINALLY + STORE NULL TO loRelation + RELEASE X, loRelation + + ENDTRY + + RETURN lcText + ENDPROC + + ENDDEFINE @@ -18948,25 +19869,31 @@ DEFINE CLASS CL_DBC_RELATION AS CL_DBC_BASE *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * taRelations (!@ IN ) Array de relaciones - * I (!@ IN ) Número de relación evaluado + * X (!@ IN ) Número de relación evaluado *--------------------------------------------------------------------------------------------------- - LPARAMETERS taRelations, I + LPARAMETERS taRelations, X + + EXTERNAL ARRAY taRelations TRY - LOCAL lcText, loEx AS EXCEPTION - lcText = '' + WITH THIS AS CL_DBC_RELATION OF 'FOXBIN2PRG.PRG' + LOCAL lcText, loEx AS EXCEPTION + lcText = '' + .read_bindatatoproperties(@taRelations, X) - TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> <<'Relation ' + TRANSFORM(I)>> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> - ENDTEXT + TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> <<._Name>> + <<>> <<._ChildTable>> + <<>> <<._ParentTable>> + <<>> <<._ChildIndex>> + <<>> <<._ParentIndex>> + <<>> <<._RefIntegrity>> + <<>> + ENDTEXT + ._ToText = lcText + ENDWITH CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -19001,6 +19928,31 @@ DEFINE CLASS CL_DBC_RELATION AS CL_DBC_BASE ENDPROC + PROCEDURE read_bindatatoproperties + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * taRelations (!@ IN ) Array de relaciones + * I (!@ IN ) Número de relación evaluado + *--------------------------------------------------------------------------------------------------- + LPARAMETERS taRelations, I + + EXTERNAL ARRAY taRelations + + WITH THIS AS CL_DBC_RELATION OF 'FOXBIN2PRG.PRG' + IF NOT ._Saved THEN + ._Name = 'Relation ' + TRANSFORM(I) + ._ChildTable = ALLTRIM(taRelations(I,1)) + ._ParentTable = ALLTRIM(taRelations(I,2)) + ._ChildIndex = ALLTRIM(taRelations(I,3)) + ._ParentIndex = ALLTRIM(taRelations(I,4)) + ._RefIntegrity = ALLTRIM(taRelations(I,5)) + *-- + ._Saved = .T. + ENDIF + ENDWITH + ENDPROC + + ENDDEFINE From a5cd143212d8889936924072c7c660355bb1130d Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 19 Mar 2015 18:58:04 +0100 Subject: [PATCH 051/123] =?UTF-8?q?-=20Agregados=20algunos=20ADDITIVE=20qu?= =?UTF-8?q?e=20faltaban=20y=20que=20causaban=20p=C3=A9rdida=20de=20datos?= =?UTF-8?q?=20del=20dc2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 01aa384..996a47b 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -16835,7 +16835,6 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE *ASORT( taConnections, 1, -1, 0, 1 ) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <<>> ENDTEXT @@ -17251,7 +17250,6 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE *ASORT( taTables, 1, -1, 0, 1 ) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <<>> ENDTEXT @@ -17801,7 +17799,6 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE *IF lnField_Count > 0 IF .Count > 0 THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <<>> <<>> ENDTEXT @@ -18225,7 +18222,6 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE *IF lnIndex_Count > 0 IF .Count > 0 THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <<>> ENDTEXT @@ -18593,7 +18589,6 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE *ASORT( taViews, 1, -1, 0, 1 ) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <<>> ENDTEXT @@ -18885,7 +18880,7 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE WITH THIS AS CL_DBC_VIEW OF 'FOXBIN2PRG.PRG' .read_bindatatoproperties(tcView) - TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> <<>> <<>> <> @@ -18918,7 +18913,7 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE *-- OfflineRecordCount *IF NOT EMPTY(._Offline) AND EVALUATE(._Offline) IF ._Offline THEN - TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> <<._Path>> <<>> <<._RecordCount>> ENDTEXT @@ -19251,7 +19246,6 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE *IF lnField_Count > 0 IF .Count > 0 THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <<>> <<>> ENDTEXT @@ -19687,7 +19681,6 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE *ASORT( laRelations, 1, -1, 0, 1 ) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <<>> ENDTEXT @@ -19881,7 +19874,7 @@ DEFINE CLASS CL_DBC_RELATION AS CL_DBC_BASE lcText = '' .read_bindatatoproperties(@taRelations, X) - TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> <<>> <<._Name>> <<>> <<._ChildTable>> From 9c4d3e9d6f3029f4714d25d00ecd3d790e45ca31 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 19 Mar 2015 19:25:29 +0100 Subject: [PATCH 052/123] =?UTF-8?q?-=20Algunos=20cambios=20para=20poder=20?= =?UTF-8?q?regenerar=20en=20modo=20Legacy=20-=20Limpieza=20de=20c=C3=B3dig?= =?UTF-8?q?o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 192 +++++++++++-------------------------------------- 1 file changed, 41 insertions(+), 151 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 996a47b..969d343 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -16820,29 +16820,20 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE #ENDIF TRY - LOCAL I, lcText, loEx AS EXCEPTION ; + LOCAL lcText, loEx AS EXCEPTION ; , loConnection AS CL_DBC_CONNECTION OF 'FOXBIN2PRG.PRG' WITH THIS AS CL_DBC_CONNECTIONS OF 'FOXBIN2PRG.PRG' loConnection = NULL lcText = '' - *DIMENSION taConnections(1) - *tnConnection_Count = ADBOBJECTS( taConnections,"CONNECTION" ) .read_bindatatoproperties() - *IF tnConnection_Count > 0 IF .Count > 0 THEN - *ASORT( taConnections, 1, -1, 0, 1 ) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> ENDTEXT - *FOR I = 1 TO tnConnection_Count - * loConnection = CREATEOBJECT('CL_DBC_CONNECTION') - * lcText = lcText + loConnection.toText( taConnections(I) ) - * loConnection = NULL - *ENDFOR .KeySort = 2 FOR EACH loConnection IN THIS &&FOXOBJECT lcText = lcText + loConnection.toText( loConnection._Name ) @@ -16865,7 +16856,7 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE FINALLY loConnection = NULL - RELEASE I, loConnection + RELEASE loConnection ENDTRY @@ -16898,8 +16889,6 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE lnConnection_Count = ADBOBJECTS( laConnections,"CONNECTION" ) IF lnConnection_Count > 0 - *ASORT( laConnections, 1, -1, 0, 1 ) - FOR I = 1 TO lnConnection_Count loConnection = CREATEOBJECT('CL_DBC_CONNECTION') loConnection.read_bindatatoproperties( laConnections(I) ) @@ -17233,31 +17222,19 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE #ENDIF TRY - LOCAL I, lcText, loEx AS EXCEPTION ; + LOCAL lcText, loEx AS EXCEPTION ; , loTable AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG' WITH THIS AS CL_DBC_TABLES OF 'FOXBIN2PRG.PRG' STORE NULL TO loTable - STORE 0 TO I, tnTable_Count lcText = '' .read_bindatatoproperties() - *DIMENSION taTables(1) - *tnTable_Count = ADBOBJECTS( taTables,"TABLE" ) - - *IF tnTable_Count > 0 IF .Count > 0 THEN - *ASORT( taTables, 1, -1, 0, 1 ) - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> ENDTEXT - *FOR I = 1 TO tnTable_Count - * loTable = CREATEOBJECT('CL_DBC_TABLE') - * lcText = lcText + loTable.toText( taTables(I) ) - * loTable = NULL - *ENDFOR .KeySort = 2 FOR EACH loTable IN THIS &&FOXOBJECT lcText = lcText + loTable.toText( loTable._Name ) @@ -17286,7 +17263,7 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE FINALLY STORE NULL TO loTable - RELEASE I, loTable + RELEASE loTable ENDTRY @@ -17320,8 +17297,6 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE lnTable_Count = ADBOBJECTS( laTables,"TABLE" ) IF lnTable_Count > 0 - *ASORT( laTables, 1, -1, 0, 1 ) - FOR I = 1 TO lnTable_Count loTable = CREATEOBJECT("CL_DBC_TABLE") loTable.read_bindatatoproperties( laTables(I) ) @@ -17668,13 +17643,13 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE loField = CREATEOBJECT("CL_DBC_FIELD_DB") loField.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - IF .n_Campos = 0 THEN + *IF .n_Campos = 0 THEN *-- MODO LEGACY: Cuando no existe tag de ordenamiento de campos, se agregan en el orden que se leen .ADD( loField, loField._Name ) - ELSE - lnPos = ASCAN( .a_Campos, loField._Name, 1, 0, 1, 1+2+4+8 ) - .a_Campos( lnPos, 2) = loField - ENDIF + *ELSE + * lnPos = ASCAN( .a_Campos, loField._Name, 1, 0, 1, 1+2+4+8 ) + * .a_Campos( lnPos, 2) = loField + *ENDIF OTHERWISE && Otro valor *-- No hay otros valores @@ -17682,9 +17657,9 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE ENDFOR *-- Restablezco el orden de los campos (Solo si n_Campos > 0, que significa que tiene el nuevo tag especial de orden) - FOR lnPos = 1 TO .n_Campos - .ADD( .a_Campos( lnPos, 2), .a_Campos( lnPos, 1) ) - ENDFOR + *FOR lnPos = 1 TO .n_Campos + * .ADD( .a_Campos( lnPos, 2), .a_Campos( lnPos, 1) ) + *ENDFOR ENDWITH && THIS ENDIF @@ -17789,14 +17764,6 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE .read_bindatatoproperties( tcTable, @toFoxBin2Prg ) - *_TALLY = 0 - *SELECT LOWER(TB.objectName) FROM TABLABIN TB ; - INNER JOIN TABLABIN TB2 ON STR(TB.ParentID)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Field',10) ; - AND TB2.objectName = PADR(LOWER(tcTable),128) ; - INTO ARRAY laFields - *lnField_Count = _TALLY - - *IF lnField_Count > 0 IF .Count > 0 THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> @@ -17806,9 +17773,6 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE SET TEXTMERGE TO MEMVAR lcText ADDITIVE NOSHOW SET TEXTMERGE ON - *FOR X = 1 TO lnField_Count - * \ <> - *ENDFOR .KeySort = 0 FOR EACH loField IN THIS &&FOXOBJECT \ <> @@ -17816,7 +17780,6 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE SET TEXTMERGE OFF SET TEXTMERGE TO - *ASORT( laFields, 1, -1, 0, 1 ) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> @@ -17824,12 +17787,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE <<>> ENDTEXT - *FOR X = 1 TO lnField_Count - * loField = CREATEOBJECT('CL_DBC_FIELD_DB') - * lcText = lcText + loField.toText( tcTable, laFields(X) ) - * loField = NULL - *ENDFOR - .KeySort = 2 + *.KeySort = 2 && Comento para forzar modo LEGACY FOR EACH loField IN THIS &&FOXOBJECT lcText = lcText + loField.toText( tcTable, loField._Name ) ENDFOR @@ -17870,7 +17828,6 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE *--------------------------------------------------------------------------------------------------- LPARAMETERS tcTable, toFoxBin2Prg - EXTERNAL ARRAY taFields #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF @@ -17895,8 +17852,6 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE lnField_Count = _TALLY IF lnField_Count > 0 - *ASORT( laFields, 1, -1, 0, 1 ) - FOR I = 1 TO lnField_Count loField = CREATEOBJECT("CL_DBC_FIELD_DB") loField.read_bindatatoproperties( tcTable, laFields(I) ) @@ -18203,7 +18158,7 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE #ENDIF TRY - LOCAL X, lcText, loEx AS EXCEPTION ; + LOCAL lcText, loEx AS EXCEPTION ; , loIndex AS CL_DBC_INDEX_DB OF 'FOXBIN2PRG.PRG' WITH THIS AS CL_DBC_INDEXES_DB OF 'FOXBIN2PRG.PRG' @@ -18211,26 +18166,12 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE lcText = '' .read_bindatatoproperties(tcTable, @toFoxBin2Prg) - *_TALLY = 0 - *SELECT LOWER(TB.objectName) FROM TABLABIN TB ; - INNER JOIN TABLABIN TB2 ON STR(TB.ParentID)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Index',10) ; - AND TB2.objectName = PADR(LOWER(tcTable),128) ; - ORDER BY 1 ; - INTO ARRAY laIndexes - *lnIndex_Count = _TALLY - - *IF lnIndex_Count > 0 IF .Count > 0 THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> ENDTEXT - *FOR X = 1 TO lnIndex_Count - * loIndex = CREATEOBJECT('CL_DBC_INDEX_DB') - * lcText = lcText + loIndex.toText( tcTable + '.' + laIndexes(X) ) - * loIndex = NULL - *ENDFOR - *.KeySort = 2 + *.KeySort = 2 && Comento para forzar modo LEGACY FOR EACH loIndex IN THIS &&FOXOBJECT lcText = lcText + loIndex.toText( tcTable + '.' + loIndex._Name ) ENDFOR @@ -18256,7 +18197,7 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE FINALLY STORE NULL TO loIndex - RELEASE X, lnIndex_Count, laIndexes, loIndex + RELEASE loIndex ENDTRY @@ -18292,13 +18233,10 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE SELECT LOWER(TB.objectName) FROM TABLABIN TB ; INNER JOIN TABLABIN TB2 ON STR(TB.ParentID)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Index',10) ; AND TB2.objectName = PADR(LOWER(tcTable),128) ; - ORDER BY 1 ; INTO ARRAY laIndexes lnIndex_Count = _TALLY IF lnIndex_Count > 0 - *ASORT( laFields, 1, -1, 0, 1 ) - FOR I = 1 TO lnIndex_Count loIndex = CREATEOBJECT("CL_DBC_INDEX_DB") loIndex.read_bindatatoproperties( tcTable + '.' + laIndexes(I) ) @@ -18578,25 +18516,13 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE WITH THIS AS CL_DBC_VIEWS OF 'FOXBIN2PRG.PRG' STORE NULL TO loView lcText = '' - *lcDBC = JUSTSTEM(DBC()) .read_bindatatoproperties() - *DIMENSION taViews(1) - *tnView_Count = ADBOBJECTS( taViews,"VIEW" ) - - *IF tnView_Count > 0 IF .Count > 0 THEN - *ASORT( taViews, 1, -1, 0, 1 ) - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> ENDTEXT - loView = CREATEOBJECT('CL_DBC_VIEW') - - *FOR I = 1 TO tnView_Count - * lcText = lcText + loView.toText( taViews(I) ) - *ENDFOR .KeySort = 2 FOR EACH loView IN THIS &&FOXOBJECT lcText = lcText + loView.toText( loView._Name ) @@ -18625,7 +18551,7 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE FINALLY STORE NULL TO loView - RELEASE I, lcDBC, lnField_Count, laFields, loView + RELEASE loView ENDTRY @@ -18656,11 +18582,9 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE EXIT ENDIF - lnView_Count = ADBOBJECTS( laViews,"VIEW" ) + lnView_Count = ADBOBJECTS( laViews, "VIEW" ) IF lnView_Count > 0 - *ASORT( taTables, 1, -1, 0, 1 ) - FOR I = 1 TO lnView_Count loView = CREATEOBJECT("CL_DBC_VIEW") loView.read_bindatatoproperties( laViews(I) ) @@ -18756,8 +18680,9 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE _WhereType = 0 *-- Sub-objects - *_Fields = NULL + *_Fields = NULL *_Indexes = NULL + *_Relations = NULL PROCEDURE INIT @@ -18909,9 +18834,8 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE ENDTEXT *-- ALGUNOS VALORES QUE EL DBGETPROP OFICIAL NO DEVUELVE - *-- Path - *-- OfflineRecordCount - *IF NOT EMPTY(._Offline) AND EVALUATE(._Offline) + *-- Path + *-- OfflineRecordCount IF ._Offline THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> <<._Path>> @@ -18926,7 +18850,6 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE loIndexes = ._Indexes lcIndexes = loIndexes.toText( tcView ) - *loRelations = CREATEOBJECT('CL_DBC_RELATIONS') loRelations = ._Relations lcRelations = loRelations.toText( tcView ) @@ -18952,7 +18875,7 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE FINALLY STORE NULL TO loRelations, loIndexes, loFields - RELEASE I, lcDBC, lnField_Count, laFields, loFields, loIndexes, loRelations + RELEASE loFields, loIndexes, loRelations ENDTRY @@ -19117,13 +19040,13 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE loField = CREATEOBJECT("CL_DBC_FIELD_VW") loField.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - IF .n_Campos = 0 THEN + *IF .n_Campos = 0 THEN *-- MODO LEGACY: Cuando no existe tag de ordenamiento de campos, se agregan en el orden que se leen .ADD( loField, loField._Name ) - ELSE - lnPos = ASCAN( .a_Campos, loField._Name, 1, 0, 1, 1+2+4+8 ) - .a_Campos( lnPos, 2) = loField - ENDIF + *ELSE + * lnPos = ASCAN( .a_Campos, loField._Name, 1, 0, 1, 1+2+4+8 ) + * .a_Campos( lnPos, 2) = loField + *ENDIF OTHERWISE && Otro valor *-- No hay otros valores @@ -19131,9 +19054,9 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE ENDFOR *-- Restablezco el orden de los campos (Solo si n_Campos > 0, que significa que tiene el nuevo tag especial de orden) - FOR lnPos = 1 TO .n_Campos - .ADD( .a_Campos( lnPos, 2), .a_Campos( lnPos, 1) ) - ENDFOR + *FOR lnPos = 1 TO .n_Campos + * .ADD( .a_Campos( lnPos, 2), .a_Campos( lnPos, 1) ) + *ENDFOR ENDWITH && THIS ENDIF @@ -19235,15 +19158,8 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE lcText = '' WITH THIS AS CL_DBC_FIELDS_VW OF 'FOXBIN2PRG.PRG' - *_TALLY = 0 - *SELECT LOWER(TB.objectName) FROM TABLABIN TB ; - INNER JOIN TABLABIN TB2 ON STR(TB.ParentID)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Field',10) ; - AND TB2.objectName = PADR(LOWER(tcView),128) ; - INTO ARRAY laFields - *lnField_Count = _TALLY .read_bindatatoproperties(tcView, @toFoxBin2Prg) - *IF lnField_Count > 0 IF .Count > 0 THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> @@ -19253,9 +19169,6 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE SET TEXTMERGE TO MEMVAR lcText ADDITIVE NOSHOW SET TEXTMERGE ON - *FOR X = 1 TO lnField_Count - * \ <> - *ENDFOR .KeySort = 0 FOR EACH loField IN THIS &&FOXOBJECT \ <> @@ -19263,7 +19176,6 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE SET TEXTMERGE OFF SET TEXTMERGE TO - *ASORT( laFields, 1, -1, 0, 1 ) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> @@ -19271,12 +19183,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE <<>> ENDTEXT - *loField = CREATEOBJECT("CL_DBC_FIELD_VW") - - *FOR X = 1 TO lnField_Count - * lcText = lcText + loField.toText( tcView, laFields(X) ) - *ENDFOR - .KeySort = 2 + *.KeySort = 2 && Comento para forzar modo LEGACY FOR EACH loField IN THIS &&FOXOBJECT lcText = lcText + loField.toText( tcView, loField._Name ) ENDFOR @@ -19301,7 +19208,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE FINALLY STORE NULL TO loField - RELEASE X, lnField_Count, laFields, loField + RELEASE loField ENDTRY @@ -19342,8 +19249,6 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE lnField_Count = _TALLY IF lnField_Count > 0 - *ASORT( taFields, 1, -1, 0, 1 ) - FOR I = 1 TO lnField_Count loField = CREATEOBJECT("CL_DBC_FIELD_VW") loField.read_bindatatoproperties( tcView, laFields(I) ) @@ -19365,7 +19270,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE USE IN (SELECT("TB")) USE IN (SELECT("TB2")) loField = NULL - RELEASE I, loField + RELEASE loField ENDTRY @@ -19665,32 +19570,17 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE TRY WITH THIS AS CL_DBC_RELATIONS OF 'FOXBIN2PRG.PRG' - LOCAL I, lnRelation_Count, laRelations(1,5), lcText, loEx AS EXCEPTION ; + LOCAL lcText, loEx AS EXCEPTION ; , loRelation AS CL_DBC_RELATION OF 'FOXBIN2PRG.PRG' STORE NULL TO loRelation lcText = '' - X = 0 .read_bindatatoproperties(tcTable, @toFoxBin2Prg) - *DIMENSION laRelations(1,5) - *lnRelation_Count = ADBOBJECTS( laRelations,"RELATION" ) - - *IF lnRelation_Count > 0 IF .Count > 0 THEN - *ASORT( laRelations, 2, -1, 0, 1 ) - *ASORT( laRelations, 1, -1, 0, 1 ) - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> ENDTEXT - *loRelation = CREATEOBJECT('CL_DBC_RELATION') - - *FOR I = 1 TO lnRelation_Count - * IF laRelations(I,1) == UPPER( RTRIM( tcTable ) ) - * lcText = lcText + loRelation.toText( @laRelations, I ) - * ENDIF - *ENDFOR FOR EACH loRelation IN THIS &&FOXOBJECT lcText = lcText + loRelation.toText() ENDFOR @@ -19733,12 +19623,12 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE TRY WITH THIS AS CL_DBC_RELATIONS OF 'FOXBIN2PRG.PRG' - LOCAL X, lnRelation_Count, laRelations(1,5), lcText, loEx AS EXCEPTION ; + LOCAL I, lnRelation_Count, laRelations(1,5), lcText, loEx AS EXCEPTION ; , loRelation AS CL_DBC_RELATION OF 'FOXBIN2PRG.PRG' STORE NULL TO loRelation lcText = '' - X = 0 + I = 0 lnRelation_Count = ADBOBJECTS( laRelations, "RELATION" ) @@ -19746,10 +19636,10 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE ASORT( laRelations, 2, -1, 0, 1 ) ASORT( laRelations, 1, -1, 0, 1 ) - FOR X = 1 TO lnRelation_Count - IF laRelations(X,1) == UPPER( RTRIM( tcTable ) ) + FOR I = 1 TO lnRelation_Count + IF laRelations(I,1) == UPPER( RTRIM( tcTable ) ) loRelation = CREATEOBJECT('CL_DBC_RELATION') - loRelation.read_bindatatoproperties( @laRelations, X ) + loRelation.read_bindatatoproperties( @laRelations, I ) .ADD( loRelation, loRelation._Name ) ENDIF ENDFOR @@ -19767,7 +19657,7 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE FINALLY STORE NULL TO loRelation - RELEASE X, loRelation + RELEASE loRelation ENDTRY From 1341a67d5c658acfb8fa9e94f2ea189ecb5eaae2 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 20 Mar 2015 00:58:38 +0100 Subject: [PATCH 053/123] - Aplicado ClassPerFile a los miembros del DBC :-) --- foxbin2prg.prg | 138 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 121 insertions(+), 17 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 969d343..f939414 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -10805,6 +10805,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -12124,6 +12125,30 @@ DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE + PROCEDURE write_EXTERNAL_MEMBER_HEADER + LPARAMETERS toFoxBin2Prg, tcMemberName, tcMemberType, tcCodigo + *-- < EXTERNAL_MEMBER Name = "member-name" Type="member-type" /> + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF + + IF EMPTY(tcCodigo) THEN + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + *-- EXTERNAL_MEMBER identify external member names / EXTERNAL_MEMBER identifica los nombres de los miembros externos + ENDTEXT + ENDIF + + IF NOT EMPTY(tcMemberName) AND NOT EMPTY(tcMemberType) THEN + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <> Name="<>" Type="<>" <> + ENDTEXT + ENDIF + + RETURN + ENDPROC + + + PROCEDURE write_INCLUDE LPARAMETERS toReg, tcCodigo *-- #INCLUDE @@ -14301,10 +14326,15 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg #ENDIF TRY - LOCAL lnCodError, laDatabases(1), lnDatabases_Count, lcEventsFile, laClasses(1,2), lnClasses_Count + LOCAL lnCodError, laDatabases(1), lnDatabases_Count, lcEventsFile, lcExternalHeader, lcCodigo ; + , lnClassCount, laClasses(1,3) ; + , loConnection AS CL_DBC_CONNECTION OF 'FOXBIN2PRG.PRG' ; + , loTable AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG' ; + , loView AS CL_DBC_VIEW OF 'FOXBIN2PRG.PRG' - STORE 0 TO lnCodError, lnClasses_Count - STORE '' TO laClasses + STORE NULL TO loRelation, loView, loTable + STORE 0 TO lnCodError, lnDatabases_Count, lnClassCount + STORE '' TO laDatabases, lcEventsFile, lcExternalHeader, laClasses, lcCodigo, C_FB2PRG_CODE WITH THIS AS c_conversor_dbc_a_prg OF 'FOXBIN2PRG.PRG' lnDatabases_Count = ADATABASES(laDatabases) @@ -14333,18 +14363,90 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg .AvanceDelProceso( 'Analyzing DBC metadata...', 1, 2, 1 ) - C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() - - *-- Header + *C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() C_FB2PRG_CODE = C_FB2PRG_CODE + toDatabase.toText(@toFoxBin2Prg) + *-- Header + *fdb* + IF toFoxBin2Prg.l_UseClassPerFile + .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, .F., .F., @lcExternalHeader ) + + *-- Connections + FOR EACH loConnection IN toDatabase._Connections FOXOBJECT + lnClassCount = lnClassCount + 1 + DIMENSION laClasses(lnClassCount,3) + laClasses(lnClassCount,1) = LOWER( loConnection._Name ) + laClasses(lnClassCount,2) = loConnection._ToText + laClasses(lnClassCount,3) = 'connection' + .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, laClasses(lnClassCount,1), laClasses(lnClassCount,3), @lcExternalHeader ) + ENDFOR + + *-- Tables + FOR EACH loTable IN toDatabase._Tables FOXOBJECT + lnClassCount = lnClassCount + 1 + DIMENSION laClasses(lnClassCount,3) + laClasses(lnClassCount,1) = LOWER( loTable._Name ) + laClasses(lnClassCount,2) = loTable._ToText + laClasses(lnClassCount,3) = 'table' + .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, laClasses(lnClassCount,1), laClasses(lnClassCount,3), @lcExternalHeader ) + ENDFOR + + *-- Views + FOR EACH loView IN toDatabase._Views FOXOBJECT + lnClassCount = lnClassCount + 1 + DIMENSION laClasses(lnClassCount,3) + laClasses(lnClassCount,1) = LOWER( loView._Name ) + laClasses(lnClassCount,2) = loView._ToText + laClasses(lnClassCount,3) = 'view' + .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, laClasses(lnClassCount,1), laClasses(lnClassCount,3), @lcExternalHeader ) + ENDFOR + + *-- Stored Procedures + IF NOT EMPTY(toDatabase._StoredProcedures) THEN + lnClassCount = lnClassCount + 1 + DIMENSION laClasses(lnClassCount,3) + laClasses(lnClassCount,1) = LOWER( 'sp' ) + laClasses(lnClassCount,2) = toDatabase._StoredProcedures + laClasses(lnClassCount,3) = 'storedprocedures' + .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, laClasses(lnClassCount,1), laClasses(lnClassCount,3), @lcExternalHeader ) + ENDIF + + lcExternalHeader = lcExternalHeader + CR_LF + ENDIF *-- Genero el DC2 .AvanceDelProceso( 'Writing DC2...', 2, 2, 1 ) + *IF .l_Test + * toModulo = C_FB2PRG_CODE + *ELSE + * .write_OutputFile( (C_FB2PRG_CODE), .c_OutputFile, @toFoxBin2Prg ) + *ENDIF + + lcOutputFile = .c_OutputFile + lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + lcExternalHeader + C_FB2PRG_CODE + IF .l_Test - toModulo = C_FB2PRG_CODE + *FOR I = 1 TO lnClassCount + * lcCodigo = lcCodigo + laClasses(I,2) + *ENDFOR + *toDatabase = lcCodigo ELSE - .write_OutputFile( (C_FB2PRG_CODE), .c_OutputFile, @toFoxBin2Prg ) + IF toFoxBin2Prg.l_UseClassPerFile + .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) + + FOR I = 1 TO lnClassCount + * lcOutputFile = 'DBCName' + '.' + 'MemberType' + '.' + 'MemberName' + '.' + 'dc2' + lcOutputFile = ADDBS( JUSTPATH( .c_OutputFile ) ) + JUSTSTEM( .c_OutputFile ) + '.' + laClasses(I,3) + '.' + laClasses(I,1) + '.' + JUSTEXT( .c_OutputFile ) + lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + laClasses(I,2) + .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) + ENDFOR + ELSE + FOR I = 1 TO lnClassCount + lcCodigo = lcCodigo + laClasses(I,2) + ENDFOR + + .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) + ENDIF ENDIF ENDWITH && THIS @@ -16678,17 +16780,19 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE FROM TABLABIN ; WHERE STR(ParentID) + ObjectType + LOWER(objectName) = STR(1) + PADR('Database',10) + PADR(LOWER('StoredProceduresSource'),128) ; INTO ARRAY laCode - ._StoredProcedures = laCode(1,1) + TEXT TO ._StoredProcedures TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <> + <> + <<>> <> + ENDTEXT IF NOT toFoxBin2Prg.l_UseClassPerFile THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>><> - <<>><> - <<>><> + <> + <> + <> <<>> - <<>> <> <<._StoredProcedures>> - <<>> <> ENDTEXT ENDIF @@ -17787,7 +17891,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE <<>> ENDTEXT - *.KeySort = 2 && Comento para forzar modo LEGACY + .KeySort = 2 && Comento para forzar modo LEGACY FOR EACH loField IN THIS &&FOXOBJECT lcText = lcText + loField.toText( tcTable, loField._Name ) ENDFOR @@ -18171,7 +18275,7 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE <<>> ENDTEXT - *.KeySort = 2 && Comento para forzar modo LEGACY + .KeySort = 2 && Comento para forzar modo LEGACY FOR EACH loIndex IN THIS &&FOXOBJECT lcText = lcText + loIndex.toText( tcTable + '.' + loIndex._Name ) ENDFOR @@ -19183,7 +19287,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE <<>> ENDTEXT - *.KeySort = 2 && Comento para forzar modo LEGACY + .KeySort = 2 && Comento para forzar modo LEGACY FOR EACH loField IN THIS &&FOXOBJECT lcText = lcText + loField.toText( tcView, loField._Name ) ENDFOR From a40ccbb2377e65e7bf90e7ff2a56bd80f8132b0a Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 20 Mar 2015 01:26:06 +0100 Subject: [PATCH 054/123] - Mejora visual del LOG de proceso --- foxbin2prg.prg | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index f939414..8b14bf3 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -2865,7 +2865,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION *-- addProcessedFile( tcInputFile, tcProcessed, tcHasErrors, tcSupported, tcReserved ) IF NOT .addProcessedFile( .c_InputFile, 'P1', 'E0', 'S1', 'RR' ) THEN *.writeLog( 'OPTIMIZACIÓN: El archivo Base [' + JUSTFNAME(lc_BaseFile) + '] ya fue procesado, por lo que no se procesará [' + JUSTFNAME(.c_InputFile) + ']' ) - .writeLog( TEXTMERGE( loLang.C_CLASSPERFILE_OPTIMIZATION_BASE_ALREADY_PROCESSED_LOC ) ) + .writeLog( '> ' + TEXTMERGE( loLang.C_CLASSPERFILE_OPTIMIZATION_BASE_ALREADY_PROCESSED_LOC ) ) EXIT ENDIF @@ -12496,7 +12496,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE IF llFileExists AND FILETOSTR( tcOutputFile ) == tcCodigo THEN *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) - THIS.writeLog( TEXTMERGE(loLang.C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) + THIS.writeLog( '> ' + TEXTMERGE(loLang.C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) ELSE IF llFileExists THEN @@ -12505,7 +12505,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE ENDIF lnBytes = STRTOFILE( tcCodigo, tcOutputFile ) - THIS.writeLog( loLang.C_FILENAME_LOC + ': ' + tcOutputFile + ' (' + ALLTRIM(TRANSFORM(lnBytes/1024,'######.##')) + '/' + ALLTRIM(TRANSFORM(LEN(tcCodigo)/1024,'######.##')) + ' KiB)' ) + THIS.writeLog( '> ' + loLang.C_FILENAME_LOC + ': ' + tcOutputFile + ' (' + ALLTRIM(TRANSFORM(lnBytes/1024,'######.##')) + '/' + ALLTRIM(TRANSFORM(LEN(tcCodigo)/1024,'######.##')) + ' KiB)' ) *THIS.writeLog( '- ' + loLang.C_GENERATED_FILE_SIZE_LOC ) IF lnBytes = 0 @@ -14216,7 +14216,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg ERASE (.c_OutputFile + '.TMP') *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) lcOutputFile = .c_OutputFile - .writeLog( TEXTMERGE(loLang.C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) + .writeLog( '> ' + TEXTMERGE(loLang.C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; AND toFoxBin2Prg.ChangeFileAttribute( .c_OutputFile, '-R' ) ; AND NOT toFoxBin2Prg.RenameTmpFile2Tx2File( .c_OutputFile ) From 5bba833c3215eea33f3c1a8d4a870f9faff22af6 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 21 Mar 2015 02:24:11 +0100 Subject: [PATCH 055/123] =?UTF-8?q?-=20Actualizaci=C3=B3n=20del=20archivo?= =?UTF-8?q?=20de=20versi=C3=B3n=20-=20Reunir=20los=20miembros=20del=20DBC?= =?UTF-8?q?=20y=20regenerar=20el=20DBC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 1 + foxbin2prg.prg | 129 ++++++++++++++++++++++++++++++++------ 2 files changed, 110 insertions(+), 20 deletions(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 2c3c5d5..452ea29 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -37,6 +37,7 @@ Change History ------------------------------------------------------------- - Feature: Added new get_Target() API method for obtaining information about processed files (Lutz Scheffler) - Feature: Added new file processing output to DOS stdOut (Lutz Scheffler) - Bug Fix: Fixed processing cancelation with Esc key +- Feature: Sort table/view fields alphabetically to facilitate diffing and merging, while maintaining a list with the original field order for correct DBC regeneration (Ryan Harris) 2015/01/18 v1.19.41 - Bug Fix db2: Erroneous detection of Invalid Table when size is less than 328 bytes. Lower limit was changed to 65 bytes. diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 8b14bf3..714209a 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -132,7 +132,7 @@ * 13/01/2015 FDBOZZO v1.19.41 Bug Fix scx/vcx: Detección errónea de estructuras PROCEDURE/ENDPROC cuando se usan como parámetros en LPARAMETERS (Ryan Harris) * 13/01/2015 FDBOZZO v1.19.41 Bug Fix db2: Detección errónea de tabla inválida cuando el tamaño es inferior a 328 bytes. Límite mínimo cambiado a 65 bytes. * 20/01/2015 FDBOZZO v1.19.42 Mejora: Validación de versión de Visual FoxPro SP1, para evitar problemas ajenos a FoxBin2Prg -* 04/02/2015 FDBOZZO v1.19.42 Mejora db2 v1.19.41: Permitir ordenar los campos alfabéticamente y mantener en una lista aparte el orden real, para facilitar el diff y el merge (Ryan Harris) +* 04/02/2015 FDBOZZO v1.19.42 Mejora dc2: Permitir ordenar los campos de vistas y tablas alfabéticamente y mantener en una lista aparte el orden real, para facilitar el diff y el merge (Ryan Harris) * 22/01/2015 FDBOZZO v1.19.42 Bug Fix: Compatibilidad con SourceSafe rota porque se genera un error al realizar la consulta para soporte de archivo (Tuvia Vinitsky) * 25/02/2015 FDBOZZO v1.19.42 Bug Fix scx/vcx: Procesar solo un nivel de text/endtext, ya que no se admiten más niveles (Lutz Scheffler) * 25/02/2015 FDBOZZO v1.19.42 Mejora: Hacer algunos mensajes de error más descriptivos (Lutz Scheffler) @@ -210,7 +210,7 @@ * 06/01/2015 Jim Nelson Mejora v1.19.39: Permitir configurar la barra de progreso para que solamente aparezca cuando se procesan múltiples archivos y no cuando se procesa solo 1 (Agregado en v1.19.40) * 06/01/2015 Mike Potjer Reporte bug db2: [Error 12, Variable "TCOUTPUTFILE" is not found] cuando DBF_Conversion_Support=4 y el archivo de salida es igual al generado (Agregado en v1.19.40) * 13/01/2015 Ryan Harris Reporte bug vcx/scx v1.19.40: Detección errónea de estructuras PROCEDURE/ENDPROC cuando se usan como parámetros LPARAMETERS en línea aparte (Arreglado en v1.19.41) -* 24/01/2015 Ryan Harris Mejora db2 v1.19.41: Permitir ordenar los campos alfabéticamente y mantener en una lista aparte el orden real, para facilitar el diff y el merge +* 24/01/2015 Ryan Harris Mejora db2 v1.19.41: Permitir ordenar los campos de vistas y tablas alfabéticamente y mantener en una lista aparte el orden real, para facilitar el diff y el merge * 22/01/2015 Tuvia Vinitsky Bug Fix v1.19.41: Compatibilidad con SourceSafe rota porque se genera un error al realizar la consulta para soporte de archivo (Arreglado en v1.19.42) * 25/02/2015 Lutz Scheffler Reporte de Bug scx/vcx v1.19.41: Procesar solo un nivel de text/endtext, ya que no se admiten más niveles (Arreglado en v1.19.42) * 25/02/2015 Lutz Scheffler Mejora v1.19.41: Hacer algunos mensajes de error más descriptivos (Agregado en v1.19.42) @@ -10231,11 +10231,12 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin #ENDIF TRY - LOCAL lnCodError, loEx AS EXCEPTION, loReg, lcLine, laCodeLines(1), lnCodeLines ; - , laLineasExclusion(1), lnBloquesExclusion, I ; + LOCAL lnCodError, loEx AS EXCEPTION, loReg, lcLine, laCodeLines(1), lnCodeLines, lcBaseFilename ; + , lcMemberType, lcLastMemberType ; + , 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 - STORE '' TO lcLine + STORE 0 TO lnCodError, lnCodeLines, lnFileCount + STORE '' TO lcLine, laLines, laCodeLines, lcBaseFilename, lcMemberType, lcLastMemberType STORE NULL TO loReg, toModulo WITH THIS AS c_conversor_prg_a_dbc OF 'FOXBIN2PRG.PRG' @@ -10246,24 +10247,80 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin IF toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_RedirectClassPerFileToMain C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) - lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + C_FB2PRG_CODE = '' + + *-- Quito la última parte del cierre de para anexar lo intermedio + FOR X = 1 TO lnCodeLines + IF C_DATABASE_F $ laCodeLines(X) THEN + EXIT + ENDIF + C_FB2PRG_CODE = C_FB2PRG_CODE + laCodeLines(X) + CR_LF + ENDFOR .AvanceDelProceso( 'Identifying Header Blocks...', 1, lnCodeLines, 1 ) .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) .AvanceDelProceso( 'Loading Code...', 2, lnCodeLines, 1 ) - *-- Esto crea la máscara de búsqueda "filename.*.ext" para encontrar las partes - lcInputFile = FORCEPATH( JUSTSTEM( JUSTSTEM(.c_InputFile) ), JUSTPATH(.c_InputFile) ) + '.*.' + JUSTEXT(.c_InputFile) + *-- Esto crea la máscara de búsqueda "Database.*.*.ext" para encontrar las partes + *-- con la sintaxis "Database.MemberType.MemberName.ext" + lcBaseFilename = JUSTSTEM( JUSTSTEM( JUSTSTEM(.c_InputFile) ) ) + lcInputFile = ADDBS( JUSTPATH(.c_InputFile) ) + lcBaseFilename + '.*.*.' + JUSTEXT(.c_InputFile) lnFileCount = ADIR( laFiles, lcInputFile, "", 1 ) - ASORT( laFiles, 1, 0, 0, 1) + + *-- Busco "storedprocedures" y le pongo "z" al inicio + FOR I = 1 TO lnFileCount + IF LOWER( laFiles(I,1)) == lcBaseFilename + '.storedprocedures.sp.' + JUSTEXT(.c_InputFile) THEN + laFiles(I,1) = lcBaseFilename + '.zstoredprocedures.sp.' + JUSTEXT(.c_InputFile) + EXIT + ENDIF + ENDFOR + + ASORT( laFiles, 1, -1, 0, 1) && "zstoredprocedures" quedará al final + + *-- Busco "zstoredprocedures" y le quito la "z" del inicio + FOR I = 1 TO lnFileCount + IF LOWER( laFiles(I,1)) == lcBaseFilename + '.zstoredprocedures.sp.' + JUSTEXT(.c_InputFile) THEN + laFiles(I,1) = lcBaseFilename + '.storedprocedures.sp.' + JUSTEXT(.c_InputFile) + EXIT + ENDIF + ENDFOR FOR I = 1 TO lnFileCount lcInputFile_Class = FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile ) + lcMemberType = LOWER( GETWORDNUM( JUSTFNAME( lcInputFile_Class ), 2, '.' ) ) + + IF NOT lcMemberType == lcLastMemberType THEN + IF NOT EMPTY(lcLastMemberType) THEN + *-- Cambio de tipo de miembro, fin del anterior (connection, table, view, storedprocedures) + DO CASE + CASE lcLastMemberType == 'connection' + C_FB2PRG_CODE = C_FB2PRG_CODE + C_TAB + C_CONNECTIONS_F + CR_LF + CASE lcLastMemberType == 'table' + C_FB2PRG_CODE = C_FB2PRG_CODE + C_TAB + C_TABLES_F + CR_LF + CASE lcLastMemberType == 'view' + C_FB2PRG_CODE = C_FB2PRG_CODE + C_TAB + C_VIEWS_F + CR_LF + CASE lcLastMemberType == 'storedprocedures' + *C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + CR_LF + ENDCASE + ENDIF + + *-- Cambio de tipo de miembro, inicio del actual (connection, table, view, storedprocedures) + DO CASE + CASE lcMemberType == 'connection' + C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + CR_LF + C_TAB + C_CONNECTIONS_I + CR_LF + CASE lcMemberType == 'table' + C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + CR_LF + C_TAB + C_TABLES_I + CR_LF + CASE lcMemberType == 'view' + C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + CR_LF + C_TAB + C_VIEWS_I + CR_LF + CASE lcMemberType == 'storedprocedures' + C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + CR_LF + ENDCASE + ENDIF *-- Verificación de las Clases, si son Externas y se indicó chequearlas - IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toModulo._ExternalClasses , JUSTEXT( JUSTSTEM( lcInputFile_Class ) ), 1, 0, 1, 1+2+4 ) = 0 + IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toDatabase._ExternalClasses , JUSTEXT( JUSTEXT( JUSTSTEM( lcInputFile_Class ) ) ), 1, 0, 1, 1+2+4 ) = 0 .writeLog( C_TAB + '- ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) LOOP && Salteo esta clase porque no concuerda con las anotadas @@ -10277,8 +10334,35 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ENDIF toFoxBin2Prg.normalizarCapitalizacionArchivos( .T., lcInputFile_Class ) - C_FB2PRG_CODE = C_FB2PRG_CODE + FILETOSTR( lcInputFile_Class ) + lcTempTxt = FILETOSTR( lcInputFile_Class ) + + FOR Y = 7 TO ALINES( laLines, lcTempTxt ) + C_FB2PRG_CODE = C_FB2PRG_CODE + laLines(Y) + CR_LF + ENDFOR + + lcLastMemberType = lcMemberType ENDFOR + + IF NOT EMPTY(lcLastMemberType) THEN + *-- Cambio de tipo de miembro, fin del anterior (connection, table, view, storedprocedures) + DO CASE + CASE lcLastMemberType == 'connection' + C_FB2PRG_CODE = C_FB2PRG_CODE + C_TAB + C_CONNECTIONS_F + CR_LF + CASE lcLastMemberType == 'table' + C_FB2PRG_CODE = C_FB2PRG_CODE + C_TAB + C_TABLES_F + CR_LF + CASE lcLastMemberType == 'view' + C_FB2PRG_CODE = C_FB2PRG_CODE + C_TAB + C_VIEWS_F + CR_LF + CASE lcLastMemberType == 'storedprocedures' + *C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + CR_LF + ENDCASE + ENDIF + + *-- Agrego la última parte con el cierre de + FOR X = X TO lnCodeLines + C_FB2PRG_CODE = C_FB2PRG_CODE + laCodeLines(X) + CR_LF + ENDFOR + + STRTOFILE( C_FB2PRG_CODE, .c_InputFile + '.txt' ) ELSE *-- No es clase por archivo, o no se quiere redireccionar a Main. C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) @@ -10289,6 +10373,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) ENDIF + *-------- @@ -16516,20 +16601,24 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE + [] ; + [] ; + [] ; + + [] ; + + [] ; + [] *-- Modulo - _Version = 0 - _SourceFile = '' + DIMENSION _ExternalClasses(1,2) + _ExternalClasses_Count = 0 + _Version = 0 + _SourceFile = '' *-- Database Info - _Name = '' - _Comment = '' - _Version = 0 - _DBCEvents = .F. - _DBCEventFilename = '' - _StoredProcedures = '' + _Name = '' + _Comment = '' + _Version = 0 + _DBCEvents = .F. + _DBCEventFilename = '' + _StoredProcedures = '' PROCEDURE INIT From 045a20623f4be44eb6b3b4d3b788f6969dfc57d4 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 21 Mar 2015 15:15:57 +0100 Subject: [PATCH 056/123] =?UTF-8?q?-=20Ajuste=20de=20c=C3=B3digo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 714209a..ee25dd2 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -10240,8 +10240,6 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin STORE NULL TO loReg, toModulo WITH THIS AS c_conversor_prg_a_dbc OF 'FOXBIN2PRG.PRG' - - *-------- *fdb* loLang = _SCREEN.o_FoxBin2Prg_Lang toModulo = CREATEOBJECT('CL_MODULO') @@ -10249,7 +10247,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) C_FB2PRG_CODE = '' - + *-- Quito la última parte del cierre de para anexar lo intermedio FOR X = 1 TO lnCodeLines IF C_DATABASE_F $ laCodeLines(X) THEN @@ -10290,7 +10288,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin FOR I = 1 TO lnFileCount lcInputFile_Class = FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile ) lcMemberType = LOWER( GETWORDNUM( JUSTFNAME( lcInputFile_Class ), 2, '.' ) ) - + IF NOT lcMemberType == lcLastMemberType THEN IF NOT EMPTY(lcLastMemberType) THEN *-- Cambio de tipo de miembro, fin del anterior (connection, table, view, storedprocedures) @@ -10335,11 +10333,11 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin toFoxBin2Prg.normalizarCapitalizacionArchivos( .T., lcInputFile_Class ) lcTempTxt = FILETOSTR( lcInputFile_Class ) - + FOR Y = 7 TO ALINES( laLines, lcTempTxt ) C_FB2PRG_CODE = C_FB2PRG_CODE + laLines(Y) + CR_LF ENDFOR - + lcLastMemberType = lcMemberType ENDFOR @@ -10361,7 +10359,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin FOR X = X TO lnCodeLines C_FB2PRG_CODE = C_FB2PRG_CODE + laCodeLines(X) + CR_LF ENDFOR - + STRTOFILE( C_FB2PRG_CODE, .c_InputFile + '.txt' ) ELSE *-- No es clase por archivo, o no se quiere redireccionar a Main. @@ -10374,10 +10372,6 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ENDIF - *-------- - - - *C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte @@ -14485,7 +14479,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg laClasses(lnClassCount,3) = 'view' .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, laClasses(lnClassCount,1), laClasses(lnClassCount,3), @lcExternalHeader ) ENDFOR - + *-- Stored Procedures IF NOT EMPTY(toDatabase._StoredProcedures) THEN lnClassCount = lnClassCount + 1 @@ -16825,7 +16819,7 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE PROCEDURE toText - LPARAMETERS toFoxBin2Prg + LPARAMETERS toFoxBin2Prg #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' @@ -17837,8 +17831,8 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE loField.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) *IF .n_Campos = 0 THEN - *-- MODO LEGACY: Cuando no existe tag de ordenamiento de campos, se agregan en el orden que se leen - .ADD( loField, loField._Name ) + *-- MODO LEGACY: Cuando no existe tag de ordenamiento de campos, se agregan en el orden que se leen + .ADD( loField, loField._Name ) *ELSE * lnPos = ASCAN( .a_Campos, loField._Name, 1, 0, 1, 1+2+4+8 ) * .a_Campos( lnPos, 2) = loField @@ -19234,8 +19228,8 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE loField.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) *IF .n_Campos = 0 THEN - *-- MODO LEGACY: Cuando no existe tag de ordenamiento de campos, se agregan en el orden que se leen - .ADD( loField, loField._Name ) + *-- MODO LEGACY: Cuando no existe tag de ordenamiento de campos, se agregan en el orden que se leen + .ADD( loField, loField._Name ) *ELSE * lnPos = ASCAN( .a_Campos, loField._Name, 1, 0, 1, 1+2+4+8 ) * .a_Campos( lnPos, 2) = loField From c90ecbc7e985328b36e0c0dd1f14bc3fb14cfba2 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 21 Mar 2015 16:25:22 +0100 Subject: [PATCH 057/123] =?UTF-8?q?-=20Regeneraci=C3=B3n=20de=20DBC=20desd?= =?UTF-8?q?e=20DC2=20con=20el=20orden=20correcto,=20tanto=20con=20ClassPer?= =?UTF-8?q?File=20habilitado=20como=20deshabilitado?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 125 +++++++++++++++++++++++++------------------------ 1 file changed, 63 insertions(+), 62 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index ee25dd2..612ee7f 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -10360,7 +10360,6 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin C_FB2PRG_CODE = C_FB2PRG_CODE + laCodeLines(X) + CR_LF ENDFOR - STRTOFILE( C_FB2PRG_CODE, .c_InputFile + '.txt' ) ELSE *-- No es clase por archivo, o no se quiere redireccionar a Main. C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) @@ -10372,6 +10371,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ENDIF + *STRTOFILE( C_FB2PRG_CODE, .c_InputFile + '.txt' ) && *fdb* lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte @@ -15580,6 +15580,7 @@ DEFINE CLASS CL_DBC_COL_BASE AS CL_COL_BASE + [] ; + [] ; + [] ; + + [] ; + [] __ObjectID = 0 @@ -17013,7 +17014,7 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE WITH THIS AS CL_DBC_CONNECTIONS OF 'FOXBIN2PRG.PRG' loConnection = NULL lcText = '' - .read_bindatatoproperties() + .read_BinDataToProperties() IF .Count > 0 THEN @@ -17051,7 +17052,7 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE ENDPROC - PROCEDURE read_bindatatoproperties + PROCEDURE read_BinDataToProperties *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg @@ -17078,7 +17079,7 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE IF lnConnection_Count > 0 FOR I = 1 TO lnConnection_Count loConnection = CREATEOBJECT('CL_DBC_CONNECTION') - loConnection.read_bindatatoproperties( laConnections(I) ) + loConnection.read_BinDataToProperties( laConnections(I) ) .ADD( loConnection, loConnection._Name ) ENDFOR ENDIF @@ -17223,7 +17224,7 @@ DEFINE CLASS CL_DBC_CONNECTION AS CL_DBC_BASE LOCAL lcText, loEx AS EXCEPTION WITH THIS AS CL_DBC_CONNECTION OF 'FOXBIN2PRG.PRG' - .read_bindatatoproperties(tcConnection) + .read_BinDataToProperties(tcConnection) TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> @@ -17292,7 +17293,7 @@ DEFINE CLASS CL_DBC_CONNECTION AS CL_DBC_BASE ENDPROC - PROCEDURE read_bindatatoproperties + PROCEDURE read_BinDataToProperties LPARAMETERS tcConnection WITH THIS AS CL_DBC_CONNECTION OF 'FOXBIN2PRG.PRG' @@ -17415,7 +17416,7 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE WITH THIS AS CL_DBC_TABLES OF 'FOXBIN2PRG.PRG' STORE NULL TO loTable lcText = '' - .read_bindatatoproperties() + .read_BinDataToProperties() IF .Count > 0 THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 @@ -17458,7 +17459,7 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE ENDPROC - PROCEDURE read_bindatatoproperties + PROCEDURE read_BinDataToProperties *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg @@ -17486,7 +17487,7 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE IF lnTable_Count > 0 FOR I = 1 TO lnTable_Count loTable = CREATEOBJECT("CL_DBC_TABLE") - loTable.read_bindatatoproperties( laTables(I) ) + loTable.read_BinDataToProperties( laTables(I) ) .ADD( loTable, loTable._Name ) ENDFOR ENDIF @@ -17662,7 +17663,7 @@ DEFINE CLASS CL_DBC_TABLE AS CL_DBC_BASE WITH THIS AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG' STORE NULL TO loRelations, loFields, loIndexes STORE '' TO lcText, lcFields, lcIndexes, lcRelations - .read_bindatatoproperties(tcTable) + .read_BinDataToProperties(tcTable) loFields = CREATEOBJECT('CL_DBC_FIELDS_DB') lcFields = loFields.toText( tcTable, @toFoxBin2Prg ) @@ -17754,7 +17755,7 @@ DEFINE CLASS CL_DBC_TABLE AS CL_DBC_BASE ENDPROC - PROCEDURE read_bindatatoproperties + PROCEDURE read_BinDataToProperties LPARAMETERS tcTable WITH THIS AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG' @@ -17815,7 +17816,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE llBloqueEncontrado = .T. WITH THIS AS CL_DBC_FIELDS_DB OF 'FOXBIN2PRG.PRG' - *.n_Campos = 0 && Para forzar modo LEGACY + *.n_Campos = 0 && Descomentar para forzar modo LEGACY FOR I = I + 1 TO tnCodeLines .set_Line( @tcLine, @taCodeLines, I ) @@ -17830,13 +17831,13 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE loField = CREATEOBJECT("CL_DBC_FIELD_DB") loField.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - *IF .n_Campos = 0 THEN - *-- MODO LEGACY: Cuando no existe tag de ordenamiento de campos, se agregan en el orden que se leen - .ADD( loField, loField._Name ) - *ELSE - * lnPos = ASCAN( .a_Campos, loField._Name, 1, 0, 1, 1+2+4+8 ) - * .a_Campos( lnPos, 2) = loField - *ENDIF + IF .n_Campos = 0 THEN + *-- MODO LEGACY: Cuando no existe tag de ordenamiento de campos, se agregan en el orden que se leen + .ADD( loField, loField._Name ) + ELSE + lnPos = ASCAN( .a_Campos, loField._Name, 1, 0, 1, 1+2+4+8 ) + .a_Campos( lnPos, 2) = loField + ENDIF OTHERWISE && Otro valor *-- No hay otros valores @@ -17844,9 +17845,9 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE ENDFOR *-- Restablezco el orden de los campos (Solo si n_Campos > 0, que significa que tiene el nuevo tag especial de orden) - *FOR lnPos = 1 TO .n_Campos - * .ADD( .a_Campos( lnPos, 2), .a_Campos( lnPos, 1) ) - *ENDFOR + FOR lnPos = 1 TO .n_Campos + .ADD( .a_Campos( lnPos, 2), .a_Campos( lnPos, 1) ) + ENDFOR ENDWITH && THIS ENDIF @@ -17901,7 +17902,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE CASE C_FIELD_ORDER_F $ tcLine && Fin EXIT - OTHERWISE && campo + OTHERWISE && nombre del campo en el orden original .n_Campos = .n_Campos + 1 DIMENSION .a_Campos(.n_Campos, 2) .a_Campos(.n_Campos, 1) = tcLine @@ -17949,7 +17950,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE STORE 0 TO X, lnField_Count lcText = '' - .read_bindatatoproperties( tcTable, @toFoxBin2Prg ) + .read_BinDataToProperties( tcTable, @toFoxBin2Prg ) IF .Count > 0 THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 @@ -17974,7 +17975,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE <<>> ENDTEXT - .KeySort = 2 && Comento para forzar modo LEGACY + .KeySort = 2 && Comentar para forzar modo LEGACY FOR EACH loField IN THIS &&FOXOBJECT lcText = lcText + loField.toText( tcTable, loField._Name ) ENDFOR @@ -18007,7 +18008,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE ENDPROC - PROCEDURE read_bindatatoproperties + PROCEDURE read_BinDataToProperties *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * tcTable (@! IN ) Nombre de la tabla de la que se obtendrán los campos @@ -18041,7 +18042,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE IF lnField_Count > 0 FOR I = 1 TO lnField_Count loField = CREATEOBJECT("CL_DBC_FIELD_DB") - loField.read_bindatatoproperties( tcTable, laFields(I) ) + loField.read_BinDataToProperties( tcTable, laFields(I) ) .ADD( loField, loField._Name ) ENDFOR ENDIF @@ -18176,7 +18177,7 @@ DEFINE CLASS CL_DBC_FIELD_DB AS CL_DBC_BASE lcText = '' WITH THIS AS CL_DBC_FIELD_DB OF 'FOXBIN2PRG.PRG' - .read_bindatatoproperties(tcTable, tcField) + .read_BinDataToProperties(tcTable, tcField) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> @@ -18232,7 +18233,7 @@ DEFINE CLASS CL_DBC_FIELD_DB AS CL_DBC_BASE ENDPROC - PROCEDURE read_bindatatoproperties + PROCEDURE read_BinDataToProperties LPARAMETERS tcTable, tcField WITH THIS AS CL_DBC_FIELD_DB OF 'FOXBIN2PRG.PRG' @@ -18351,14 +18352,14 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE WITH THIS AS CL_DBC_INDEXES_DB OF 'FOXBIN2PRG.PRG' STORE NULL TO loIndex lcText = '' - .read_bindatatoproperties(tcTable, @toFoxBin2Prg) + .read_BinDataToProperties(tcTable, @toFoxBin2Prg) IF .Count > 0 THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> ENDTEXT - .KeySort = 2 && Comento para forzar modo LEGACY + .KeySort = 2 && Comentar para forzar modo LEGACY FOR EACH loIndex IN THIS &&FOXOBJECT lcText = lcText + loIndex.toText( tcTable + '.' + loIndex._Name ) ENDFOR @@ -18392,7 +18393,7 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE ENDPROC - PROCEDURE read_bindatatoproperties + PROCEDURE read_BinDataToProperties *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * tcTable (v! IN ) Nombre de la Tabla @@ -18426,7 +18427,7 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE IF lnIndex_Count > 0 FOR I = 1 TO lnIndex_Count loIndex = CREATEOBJECT("CL_DBC_INDEX_DB") - loIndex.read_bindatatoproperties( tcTable + '.' + laIndexes(I) ) + loIndex.read_BinDataToProperties( tcTable + '.' + laIndexes(I) ) .ADD( loIndex, loIndex._Name ) ENDFOR ENDIF @@ -18546,7 +18547,7 @@ DEFINE CLASS CL_DBC_INDEX_DB AS CL_DBC_BASE lcText = '' WITH THIS AS CL_DBC_INDEX_DB OF 'FOXBIN2PRG.PRG' - .read_bindatatoproperties(tcIndex) + .read_BinDataToProperties(tcIndex) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> @@ -18586,7 +18587,7 @@ DEFINE CLASS CL_DBC_INDEX_DB AS CL_DBC_BASE ENDPROC - PROCEDURE read_bindatatoproperties + PROCEDURE read_BinDataToProperties LPARAMETERS tcIndex WITH THIS AS CL_DBC_INDEX_DB OF 'FOXBIN2PRG.PRG' @@ -18703,7 +18704,7 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE WITH THIS AS CL_DBC_VIEWS OF 'FOXBIN2PRG.PRG' STORE NULL TO loView lcText = '' - .read_bindatatoproperties() + .read_BinDataToProperties() IF .Count > 0 THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 @@ -18746,7 +18747,7 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE ENDPROC - PROCEDURE read_bindatatoproperties + PROCEDURE read_BinDataToProperties *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg @@ -18774,7 +18775,7 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE IF lnView_Count > 0 FOR I = 1 TO lnView_Count loView = CREATEOBJECT("CL_DBC_VIEW") - loView.read_bindatatoproperties( laViews(I) ) + loView.read_BinDataToProperties( laViews(I) ) .ADD( loView, loView._Name ) ENDFOR ENDIF @@ -18990,7 +18991,7 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE STORE '' TO lcText, lcFields, lcIndexes, lcRelations WITH THIS AS CL_DBC_VIEW OF 'FOXBIN2PRG.PRG' - .read_bindatatoproperties(tcView) + .read_BinDataToProperties(tcView) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> @@ -19130,7 +19131,7 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE ENDPROC - PROCEDURE read_bindatatoproperties + PROCEDURE read_BinDataToProperties *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * tcView (v! IN ) Vista en evaluación @@ -19211,7 +19212,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE llBloqueEncontrado = .T. WITH THIS AS CL_DBC_FIELDS_VW OF 'FOXBIN2PRG.PRG' - *.n_Campos = 0 && Para forzar modo LEGACY + *.n_Campos = 0 && Descomentar para forzar modo LEGACY FOR I = I + 1 TO tnCodeLines .set_Line( @tcLine, @taCodeLines, I ) @@ -19227,13 +19228,13 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE loField = CREATEOBJECT("CL_DBC_FIELD_VW") loField.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - *IF .n_Campos = 0 THEN - *-- MODO LEGACY: Cuando no existe tag de ordenamiento de campos, se agregan en el orden que se leen - .ADD( loField, loField._Name ) - *ELSE - * lnPos = ASCAN( .a_Campos, loField._Name, 1, 0, 1, 1+2+4+8 ) - * .a_Campos( lnPos, 2) = loField - *ENDIF + IF .n_Campos = 0 THEN + *-- MODO LEGACY: Cuando no existe tag de ordenamiento de campos, se agregan en el orden que se leen + .ADD( loField, loField._Name ) + ELSE + lnPos = ASCAN( .a_Campos, loField._Name, 1, 0, 1, 1+2+4+8 ) + .a_Campos( lnPos, 2) = loField + ENDIF OTHERWISE && Otro valor *-- No hay otros valores @@ -19241,9 +19242,9 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE ENDFOR *-- Restablezco el orden de los campos (Solo si n_Campos > 0, que significa que tiene el nuevo tag especial de orden) - *FOR lnPos = 1 TO .n_Campos - * .ADD( .a_Campos( lnPos, 2), .a_Campos( lnPos, 1) ) - *ENDFOR + FOR lnPos = 1 TO .n_Campos + .ADD( .a_Campos( lnPos, 2), .a_Campos( lnPos, 1) ) + ENDFOR ENDWITH && THIS ENDIF @@ -19299,7 +19300,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE CASE C_FIELD_ORDER_F $ tcLine && Fin EXIT - OTHERWISE && campo + OTHERWISE && nombre del campo en el orden original .n_Campos = .n_Campos + 1 DIMENSION .a_Campos(.n_Campos, 2) .a_Campos(.n_Campos, 1) = tcLine @@ -19345,7 +19346,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE lcText = '' WITH THIS AS CL_DBC_FIELDS_VW OF 'FOXBIN2PRG.PRG' - .read_bindatatoproperties(tcView, @toFoxBin2Prg) + .read_BinDataToProperties(tcView, @toFoxBin2Prg) IF .Count > 0 THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 @@ -19370,7 +19371,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE <<>> ENDTEXT - .KeySort = 2 && Comento para forzar modo LEGACY + .KeySort = 2 && Comentar para forzar modo LEGACY FOR EACH loField IN THIS &&FOXOBJECT lcText = lcText + loField.toText( tcView, loField._Name ) ENDFOR @@ -19403,7 +19404,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE ENDPROC - PROCEDURE read_bindatatoproperties + PROCEDURE read_BinDataToProperties *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * tcView (@! IN ) Nombre de la vista de la que se obtendrán los campos @@ -19438,7 +19439,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE IF lnField_Count > 0 FOR I = 1 TO lnField_Count loField = CREATEOBJECT("CL_DBC_FIELD_VW") - loField.read_bindatatoproperties( tcView, laFields(I) ) + loField.read_BinDataToProperties( tcView, laFields(I) ) .ADD( loField, loField._Name ) ENDFOR ENDIF @@ -19643,7 +19644,7 @@ DEFINE CLASS CL_DBC_FIELD_VW AS CL_DBC_BASE ENDPROC - PROCEDURE read_bindatatoproperties + PROCEDURE read_BinDataToProperties LPARAMETERS tcView, tcField WITH THIS AS CL_DBC_FIELD_VW OF 'FOXBIN2PRG.PRG' @@ -19761,7 +19762,7 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE , loRelation AS CL_DBC_RELATION OF 'FOXBIN2PRG.PRG' STORE NULL TO loRelation lcText = '' - .read_bindatatoproperties(tcTable, @toFoxBin2Prg) + .read_BinDataToProperties(tcTable, @toFoxBin2Prg) IF .Count > 0 THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 @@ -19796,7 +19797,7 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE ENDPROC - PROCEDURE read_bindatatoproperties + PROCEDURE read_BinDataToProperties *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * tcTable (v! IN ) Tabla de la que obtener las relaciones @@ -19826,7 +19827,7 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE FOR I = 1 TO lnRelation_Count IF laRelations(I,1) == UPPER( RTRIM( tcTable ) ) loRelation = CREATEOBJECT('CL_DBC_RELATION') - loRelation.read_bindatatoproperties( @laRelations, I ) + loRelation.read_BinDataToProperties( @laRelations, I ) .ADD( loRelation, loRelation._Name ) ENDIF ENDFOR @@ -19949,7 +19950,7 @@ DEFINE CLASS CL_DBC_RELATION AS CL_DBC_BASE WITH THIS AS CL_DBC_RELATION OF 'FOXBIN2PRG.PRG' LOCAL lcText, loEx AS EXCEPTION lcText = '' - .read_bindatatoproperties(@taRelations, X) + .read_BinDataToProperties(@taRelations, X) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> @@ -19998,7 +19999,7 @@ DEFINE CLASS CL_DBC_RELATION AS CL_DBC_BASE ENDPROC - PROCEDURE read_bindatatoproperties + PROCEDURE read_BinDataToProperties *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * taRelations (!@ IN ) Array de relaciones From 85d721c9fe8f5ec76c8fa626e3a069489d705cf6 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 21 Mar 2015 17:31:46 +0100 Subject: [PATCH 058/123] =?UTF-8?q?-=20Agregada=20la=20verificaci=C3=B3n?= =?UTF-8?q?=20de=20miembros=20del=20DBC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 92 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 55 insertions(+), 37 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 612ee7f..0b0dcd2 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -2838,18 +2838,35 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDIF - *-- OPTIMIZACIÓN VC2/SC2: VERIFICO SI EL ARCHIVO BASE FUE PROCESADO PARA DESCARTAR REPROCESOS - IF INLIST(lcExtension,'VC2','SC2') AND .l_UseClassPerFile AND .l_RedirectClassPerFileToMain - IF OCCURS('.', JUSTSTEM(.c_InputFile)) = 0 THEN - lc_BaseFile = .c_InputFile - ELSE - lc_BaseFile = FORCEPATH( FORCEEXT( JUSTSTEM( JUSTSTEM(.c_InputFile) ), JUSTEXT(.c_InputFile)) , JUSTPATH(.c_InputFile) ) - ENDIF + *-- OPTIMIZACIÓN VC2/SC2/DC2: VERIFICO SI EL ARCHIVO BASE FUE PROCESADO PARA DESCARTAR REPROCESOS + *fdb* + IF .l_UseClassPerFile AND .l_RedirectClassPerFileToMain THEN + DO CASE + CASE INLIST(lcExtension,'VC2','SC2') + IF OCCURS('.', JUSTSTEM(.c_InputFile)) = 0 THEN + lc_BaseFile = .c_InputFile + ELSE + lc_BaseFile = FORCEPATH( FORCEEXT( JUSTSTEM( JUSTSTEM(.c_InputFile) ), JUSTEXT(.c_InputFile)) , JUSTPATH(.c_InputFile) ) + ENDIF - *-- Verifico si se debe forzar la redirección al archivo principal - IF '.' $ JUSTSTEM(.c_InputFile) - .c_InputFile = lc_BaseFile - ENDIF + *-- Verifico si se debe forzar la redirección al archivo principal + IF '.' $ JUSTSTEM(.c_InputFile) + .c_InputFile = lc_BaseFile + ENDIF + + CASE lcExtension = 'DC2' + IF OCCURS('.', JUSTSTEM(.c_InputFile)) = 0 THEN + lc_BaseFile = .c_InputFile + ELSE + lc_BaseFile = FORCEPATH( FORCEEXT( JUSTSTEM( JUSTSTEM( JUSTSTEM(.c_InputFile) ) ), JUSTEXT(.c_InputFile)) , JUSTPATH(.c_InputFile) ) + ENDIF + + *-- Verifico si se debe forzar la redirección al archivo principal + IF '.' $ JUSTSTEM(.c_InputFile) + .c_InputFile = lc_BaseFile + ENDIF + + ENDCASE ENDIF IF NOT EMPTY(tcOriginalFileName) @@ -7394,7 +7411,8 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE toModulo._ExternalClasses_Count = toModulo._ExternalClasses_Count + 1 DIMENSION toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 2 ) toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 1 ) = .get_ValueByName_FromListNamesWithValues( 'Name', 'C', @laPropsAndValues ) - *toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 2 ) = .get_ValueByName_FromListNamesWithValues( 'Baseclass', 'C', @laPropsAndValues ) + toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 2 ) = .get_ValueByName_FromListNamesWithValues( 'Baseclass', 'C', @laPropsAndValues ) ; + + '.' + toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 1 ) ENDWITH && THIS ENDIF @@ -7425,8 +7443,9 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE toModulo._ExternalClasses_Count = toModulo._ExternalClasses_Count + 1 DIMENSION toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 2 ) - toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 1 ) = .get_ValueByName_FromListNamesWithValues( 'Name', 'C', @laPropsAndValues ) - toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 2 ) = .get_ValueByName_FromListNamesWithValues( 'Type', 'C', @laPropsAndValues ) + toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 1 ) = .get_ValueByName_FromListNamesWithValues( 'Type', 'C', @laPropsAndValues ) ; + + '.' + .get_ValueByName_FromListNamesWithValues( 'Name', 'C', @laPropsAndValues ) + *toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 2 ) = .get_ValueByName_FromListNamesWithValues( 'Type', 'C', @laPropsAndValues ) ENDWITH && THIS ENDIF @@ -7961,12 +7980,12 @@ 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 ; + , laLineasExclusion(1), lnBloquesExclusion, I, lcClassName ; , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' WITH THIS AS c_conversor_prg_a_vcx OF 'FOXBIN2PRG.PRG' STORE 0 TO lnCodError, lnCodeLines - STORE '' TO C_FB2PRG_CODE + STORE '' TO C_FB2PRG_CODE, lcClassName STORE NULL TO toModulo loLang = _SCREEN.o_FoxBin2Prg_Lang @@ -7989,9 +8008,10 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin FOR I = 1 TO lnFileCount lcInputFile_Class = FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile ) + lcClassName = JUSTEXT( JUSTSTEM( lcInputFile_Class ) ) *-- Verificación de las Clases, si son Externas y se indicó chequearlas - IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toModulo._ExternalClasses , JUSTEXT( JUSTSTEM( lcInputFile_Class ) ), 1, 0, 1, 1+2+4 ) = 0 + IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toModulo._ExternalClasses, lcClassName, 1, 0, 1, 1+2+4 ) = 0 .writeLog( C_TAB + '- ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) LOOP && Salteo esta clase porque no concuerda con las anotadas @@ -10232,16 +10252,16 @@ 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 ; - , lcMemberType, lcLastMemberType ; + , lcMemberType, lcMemberName, lcLastMemberType ; , 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 - STORE '' TO lcLine, laLines, laCodeLines, lcBaseFilename, lcMemberType, lcLastMemberType - STORE NULL TO loReg, toModulo + STORE '' TO lcLine, laLines, laCodeLines, lcBaseFilename, lcMemberType, lcLastMemberType, lcMemberName + STORE NULL TO loReg, toDatabase WITH THIS AS c_conversor_prg_a_dbc OF 'FOXBIN2PRG.PRG' loLang = _SCREEN.o_FoxBin2Prg_Lang - toModulo = CREATEOBJECT('CL_MODULO') + toDatabase = CREATEOBJECT('CL_DBC') IF toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_RedirectClassPerFileToMain C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) @@ -10257,7 +10277,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ENDFOR .AvanceDelProceso( 'Identifying Header Blocks...', 1, lnCodeLines, 1 ) - .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) + .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toDatabase, @toFoxBin2Prg ) .AvanceDelProceso( 'Loading Code...', 2, lnCodeLines, 1 ) @@ -10288,6 +10308,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin FOR I = 1 TO lnFileCount lcInputFile_Class = FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile ) lcMemberType = LOWER( GETWORDNUM( JUSTFNAME( lcInputFile_Class ), 2, '.' ) ) + lcMemberName = LOWER( GETWORDNUM( JUSTFNAME( lcInputFile_Class ), 3, '.' ) ) IF NOT lcMemberType == lcLastMemberType THEN IF NOT EMPTY(lcLastMemberType) THEN @@ -10317,11 +10338,11 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ENDCASE ENDIF - *-- Verificación de las Clases, si son Externas y se indicó chequearlas - IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toDatabase._ExternalClasses , JUSTEXT( JUSTEXT( JUSTSTEM( lcInputFile_Class ) ) ), 1, 0, 1, 1+2+4 ) = 0 - .writeLog( C_TAB + '- ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) - .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) - LOOP && Salteo esta clase porque no concuerda con las anotadas + *-- Verificación de los Miembros, si son Externos y se indicó chequearlos + IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toDatabase._ExternalClasses, lcMemberType + '.' + lcMemberName, 1, 0, 1, 1+2+4 ) = 0 + .writeLog( C_TAB + '- ' + loLang.C_OUTER_MEMBER_DOES_NOT_MATCH_INNER_MEMBERS_LOC + ' [' + lcInputFile_Class + ']' ) + .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_OUTER_MEMBER_DOES_NOT_MATCH_INNER_MEMBERS_LOC + ' [' + lcInputFile_Class + ']' ) + LOOP && Salteo este miembro porque no concuerda con los anotados ENDIF .writeLog( C_TAB + '+ ' + loLang.C_INCLUDING_CLASS_LOC + ' ' + JUSTFNAME( lcInputFile_Class ) ) @@ -10367,7 +10388,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) .AvanceDelProceso( 'Identifying Header Blocks...', 1, lnCodeLines, 1 ) - .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) + .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toDatabase, @toFoxBin2Prg ) ENDIF @@ -14442,11 +14463,9 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg .AvanceDelProceso( 'Analyzing DBC metadata...', 1, 2, 1 ) - *C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() C_FB2PRG_CODE = C_FB2PRG_CODE + toDatabase.toText(@toFoxBin2Prg) *-- Header - *fdb* IF toFoxBin2Prg.l_UseClassPerFile .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, .F., .F., @lcExternalHeader ) @@ -14495,12 +14514,6 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg *-- Genero el DC2 .AvanceDelProceso( 'Writing DC2...', 2, 2, 1 ) - *IF .l_Test - * toModulo = C_FB2PRG_CODE - *ELSE - * .write_OutputFile( (C_FB2PRG_CODE), .c_OutputFile, @toFoxBin2Prg ) - *ENDIF - lcOutputFile = .c_OutputFile lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + lcExternalHeader + C_FB2PRG_CODE @@ -24188,6 +24201,7 @@ DEFINE CLASS CL_LANG AS Custom C_OPTIMIZATION_SKIPPING_ALREADY_PROCESSED_FILE_LOC = "" C_OPTION_LOC = "" 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_PRESS_ESC_TO_CANCEL = "" @@ -24337,6 +24351,7 @@ DEFINE CLASS CL_LANG AS Custom .C_OPTIMIZATION_SKIPPING_ALREADY_PROCESSED_FILE_LOC = "Optimisation: sauter fichier déjà traité [<<(lcFile)>>]" .C_OPTION_LOC = "Option" .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_PRESS_ESC_TO_CANCEL = "Appuyez sur Esc pour Annuler" @@ -24421,7 +24436,8 @@ DEFINE CLASS CL_LANG AS Custom .C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC = "Operación no reconocida. Solo re reconoce SETNAME y GETNAME." .C_OPTIMIZATION_SKIPPING_ALREADY_PROCESSED_FILE_LOC = "Optimización: saltando el archivo ya procesado [<<(lcFile)>>]" .C_OPTION_LOC = "Option" - .C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC = "La clase externa no coincide con la clase interna" + .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_PRESS_ESC_TO_CANCEL = "Pulse Esc para Cancelar" @@ -24507,6 +24523,7 @@ DEFINE CLASS CL_LANG AS Custom .C_OPTIMIZATION_SKIPPING_ALREADY_PROCESSED_FILE_LOC = "Optimierung: Überspringen von bereits bearbeiteten Datei [<<(lcFile)>>]" .C_OPTION_LOC = "Option" .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_PRESS_ESC_TO_CANCEL = "Drücken Sie Esc für Abbrechen" @@ -24592,6 +24609,7 @@ DEFINE CLASS CL_LANG AS Custom .C_OPTIMIZATION_SKIPPING_ALREADY_PROCESSED_FILE_LOC = "Optimization: skipping already processed file [<<(lcFile)>>]" .C_OPTION_LOC = "Option" .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_PRESS_ESC_TO_CANCEL = "Press Esc to Cancel" From 799cbad54b93c87a94dbbfbf60ff5691be5dddad Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 21 Mar 2015 23:31:19 +0100 Subject: [PATCH 059/123] =?UTF-8?q?-=20Implementaci=C3=B3n=20de=20n=5FUseC?= =?UTF-8?q?lassPerFile:2=20para=20poder=20generar=20clases=20y=20forms=20c?= =?UTF-8?q?omo=20Archivo.ClaseBase.Clase.ext2=20en=20vez=20de=20Archivo.Cl?= =?UTF-8?q?ase.ext2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 455 ++++++++++++++++++++++++++++++------------------- 1 file changed, 282 insertions(+), 173 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 0b0dcd2..42f7539 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -586,7 +586,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION + [] ; + [] ; + [] ; - + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -670,7 +670,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION l_CancelWithEscKey = .T. l_DropNullCharsFromCode = .T. l_Recompile = .T. - l_UseClassPerFile = .F. + n_UseClassPerFile = 0 l_ClassPerFileCheck = .F. l_RedirectClassPerFileToMain = .F. l_NoTimestamps = .T. @@ -954,11 +954,11 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDPROC - PROCEDURE l_UseClassPerFile_ACCESS + PROCEDURE n_UseClassPerFile_ACCESS IF THIS.n_CFG_Actual = 0 OR ISNULL( THIS.o_Configuration( THIS.n_CFG_Actual ) ) - RETURN THIS.l_UseClassPerFile + RETURN THIS.n_UseClassPerFile ELSE - RETURN NVL( THIS.o_Configuration( THIS.n_CFG_Actual ).l_UseClassPerFile, THIS.l_UseClassPerFile ) + RETURN NVL( THIS.o_Configuration( THIS.n_CFG_Actual ).n_UseClassPerFile, THIS.n_UseClassPerFile ) ENDIF ENDPROC @@ -1641,8 +1641,8 @@ DEFINE CLASS c_foxbin2prg AS SESSION CASE LEFT( laConfig(I), 16 ) == LOWER('UseClassPerFile:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 17 ) ) - IF INLIST( lcValue, '0', '1' ) THEN - lo_CFG.l_UseClassPerFile = ( TRANSFORM(lcValue) == '1' ) + IF INLIST( lcValue, '0', '1', '2' ) THEN + lo_CFG.n_UseClassPerFile = INT( VAL(lcValue) ) .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > UseClassPerFile: ' + TRANSFORM(lcValue) ) ENDIF @@ -1793,7 +1793,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION .writeLog( C_TAB + 'l_Recompile: ' + TRANSFORM(.l_Recompile) + ' (' + tcRecompile + ')' ) .writeLog( C_TAB + 'l_NoTimestamps: ' + TRANSFORM(.l_NoTimestamps) ) .writeLog( C_TAB + 'l_ClearUniqueID: ' + TRANSFORM(.l_ClearUniqueID) ) - .writeLog( C_TAB + 'l_UseClassPerFile: ' + TRANSFORM(.l_UseClassPerFile) ) + .writeLog( C_TAB + 'n_UseClassPerFile: ' + TRANSFORM(.n_UseClassPerFile) ) .writeLog( C_TAB + 'l_ClassPerFileCheck: ' + TRANSFORM(.l_ClassPerFileCheck) ) .writeLog( C_TAB + 'l_RedirectClassPerFileToMain: ' + TRANSFORM(.l_RedirectClassPerFileToMain) ) .writeLog( C_TAB + 'l_Debug: ' + TRANSFORM(.l_Debug) ) @@ -2839,10 +2839,9 @@ DEFINE CLASS c_foxbin2prg AS SESSION *-- OPTIMIZACIÓN VC2/SC2/DC2: VERIFICO SI EL ARCHIVO BASE FUE PROCESADO PARA DESCARTAR REPROCESOS - *fdb* - IF .l_UseClassPerFile AND .l_RedirectClassPerFileToMain THEN + IF .n_UseClassPerFile > 0 AND .l_RedirectClassPerFileToMain THEN DO CASE - CASE INLIST(lcExtension,'VC2','SC2') + CASE .n_UseClassPerFile = 1 AND INLIST(lcExtension,'VC2','SC2') IF OCCURS('.', JUSTSTEM(.c_InputFile)) = 0 THEN lc_BaseFile = .c_InputFile ELSE @@ -2854,7 +2853,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION .c_InputFile = lc_BaseFile ENDIF - CASE lcExtension = 'DC2' + CASE .n_UseClassPerFile = 2 AND INLIST(lcExtension,'VC2','SC2') OR lcExtension = 'DC2' IF OCCURS('.', JUSTSTEM(.c_InputFile)) = 0 THEN lc_BaseFile = .c_InputFile ELSE @@ -3519,22 +3518,38 @@ DEFINE CLASS c_foxbin2prg AS SESSION *--------------------------------------------------------------------------------------------------- LPARAMETERS tcProcessed, tcHasErrors, tcSupported, tcReserved - WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' - IF NOT EMPTY(tcProcessed) - .a_ProcessedFiles(.n_ProcessedFiles, 2) = EVL(tcProcessed, '') + TRY + LOCAL loEx as Exception + + WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + IF .n_ProcessedFiles = 0 THEN + EXIT + ENDIF + IF NOT EMPTY(tcProcessed) + .a_ProcessedFiles(.n_ProcessedFiles, 2) = EVL(tcProcessed, '') + ENDIF + IF NOT EMPTY(tcHasErrors) + .a_ProcessedFiles(.n_ProcessedFiles, 3) = EVL(tcHasErrors, '') + ENDIF + IF NOT EMPTY(tcSupported) + .a_ProcessedFiles(.n_ProcessedFiles, 4) = EVL(tcSupported, '') + ENDIF + .stdOut( .a_ProcessedFiles(.n_ProcessedFiles,2) ; + + ',' + .a_ProcessedFiles(.n_ProcessedFiles,3) ; + + ',' + .a_ProcessedFiles(.n_ProcessedFiles,4) ; + + ',' + .a_ProcessedFiles(.n_ProcessedFiles,5) ; + + ',' + LOWER(.a_ProcessedFiles(.n_ProcessedFiles,1)) ) + ENDWITH + + CATCH TO loEx + IF THIS.l_Debug + IF _VFP.STARTMODE = 0 + SET STEP ON + ENDIF ENDIF - IF NOT EMPTY(tcHasErrors) - .a_ProcessedFiles(.n_ProcessedFiles, 3) = EVL(tcHasErrors, '') - ENDIF - IF NOT EMPTY(tcSupported) - .a_ProcessedFiles(.n_ProcessedFiles, 4) = EVL(tcSupported, '') - ENDIF - .stdOut( .a_ProcessedFiles(.n_ProcessedFiles,2) ; - + ',' + .a_ProcessedFiles(.n_ProcessedFiles,3) ; - + ',' + .a_ProcessedFiles(.n_ProcessedFiles,4) ; - + ',' + .a_ProcessedFiles(.n_ProcessedFiles,5) ; - + ',' + LOWER(.a_ProcessedFiles(.n_ProcessedFiles,1)) ) - ENDWITH + THROW + + ENDTRY ENDPROC @@ -5942,7 +5957,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE LPARAMETERS toModulo #IF .F. - LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG' #ENDIF INSERT INTO TABLABIN ; @@ -6004,7 +6019,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE LPARAMETERS toModulo #IF .F. - LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG' #ENDIF INSERT INTO TABLABIN ; @@ -6796,7 +6811,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE EXTERNAL ARRAY taCodeLines #IF .F. - LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG' LOCAL toClase AS CL_CLASE OF 'FOXBIN2PRG.PRG' LOCAL toObjeto AS CL_OBJETO OF 'FOXBIN2PRG.PRG' #ENDIF @@ -7047,7 +7062,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE EXTERNAL ARRAY taCodeLines, tnBloquesExclusion, taLineasExclusion #IF .F. - LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG' LOCAL toClase AS CL_CLASE OF 'FOXBIN2PRG.PRG' #ENDIF @@ -7274,7 +7289,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE LOCAL llBloqueEncontrado #IF .F. - LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG' LOCAL toClase AS CL_CLASE OF 'FOXBIN2PRG.PRG' #ENDIF @@ -7396,7 +7411,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE LPARAMETERS toModulo, tcLine, taCodeLines, I, tnCodeLines #IF .F. - LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG' #ENDIF LOCAL llBloqueEncontrado @@ -7426,10 +7441,10 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE *------------------------------------------------------ *-- Analiza el bloque *< EXTERNAL_MEMBER: Name="nombre-miembro" Type="tipo-de-miembro" /> *------------------------------------------------------ - LPARAMETERS toModulo, tcLine, taCodeLines, I, tnCodeLines + LPARAMETERS toDatabase, tcLine, taCodeLines, I, tnCodeLines #IF .F. - LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toDatabase AS CL_DBC OF 'FOXBIN2PRG.PRG' #ENDIF LOCAL llBloqueEncontrado @@ -7441,11 +7456,11 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE WITH THIS .get_ListNamesWithValuesFrom_InLine_MetadataTag( @tcLine, @laPropsAndValues, @lnPropsAndValues_Count, C_EXTERNAL_MEMBER_I, C_EXTERNAL_MEMBER_F ) - toModulo._ExternalClasses_Count = toModulo._ExternalClasses_Count + 1 - DIMENSION toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 2 ) - toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 1 ) = .get_ValueByName_FromListNamesWithValues( 'Type', 'C', @laPropsAndValues ) ; + toDatabase._ExternalClasses_Count = toDatabase._ExternalClasses_Count + 1 + DIMENSION toDatabase._ExternalClasses( toDatabase._ExternalClasses_Count, 2 ) + toDatabase._ExternalClasses( toDatabase._ExternalClasses_Count, 1 ) = .get_ValueByName_FromListNamesWithValues( 'Type', 'C', @laPropsAndValues ) ; + '.' + .get_ValueByName_FromListNamesWithValues( 'Name', 'C', @laPropsAndValues ) - *toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 2 ) = .get_ValueByName_FromListNamesWithValues( 'Type', 'C', @laPropsAndValues ) + *toDatabase._ExternalClasses( toDatabase._ExternalClasses_Count, 2 ) = .get_ValueByName_FromListNamesWithValues( 'Type', 'C', @laPropsAndValues ) ENDWITH && THIS ENDIF @@ -7496,7 +7511,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE LOCAL llBloqueEncontrado #IF .F. - LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG' #ENDIF IF LEFT( tcLine + ' ', C_LEN_OLE_I + 1 ) == C_OLE_I + ' ' @@ -7547,7 +7562,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE , tc_Comentario, taLineasExclusion, tnBloquesExclusion #IF .F. - LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG' LOCAL toObjeto AS CL_OBJETO OF 'FOXBIN2PRG.PRG' LOCAL toClase AS CL_CLASE OF 'FOXBIN2PRG.PRG' #ENDIF @@ -7711,7 +7726,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE EXTERNAL ARRAY taCodeLines, taLineasExclusion #IF .F. - LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG' LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF @@ -7728,14 +7743,6 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE IF tnCodeLines > 1 - *-- Defino el objeto de módulo y sus propiedades - *toModulo = NULL - *toModulo = CREATEOBJECT('CL_MODULO') - - *IF NOT (toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_RedirectClassPerFileToMain) - * llEXTERNAL_CLASS_Completed = .T. - *ENDIF - *-- Búsqueda del ID de inicio de bloque (DEFINE CLASS / PROCEDURE) FOR I = 1 TO tnCodeLines STORE '' TO lc_Comentario @@ -7745,26 +7752,6 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE CASE .lineaExcluida( I, tnBloquesExclusion, @taLineasExclusion ) ; OR .lineIsOnlyCommentAndNoMetadata( @lcLine, @lc_Comentario ) && Excluida, vacía o solo Comentarios - *CASE NOT llFoxBin2Prg_Completed AND .analizarBloque_FoxBin2Prg( @toModulo, @lcLine, @taCodeLines, @I, tnCodeLines ) - * llFoxBin2Prg_Completed = .T. - - *CASE NOT llEXTERNAL_CLASS_Completed AND .analizarBloque_EXTERNAL_CLASS( @toModulo, @lcLine, @taCodeLines, @I, tnCodeLines ) - *-- Puede haber varias clases externas - - *CASE NOT llLIBCOMMENT_Completed AND .analizarBloque_LIBCOMMENT( @toModulo, @lcLine, @taCodeLines, @I, tnCodeLines ) - * llLIBCOMMENT_Completed = .T. - * llEXTERNAL_CLASS_Completed = .T. - - *CASE NOT llOLE_DEF_Completed AND .analizarBloque_OLE_DEF( @toModulo, @lcLine, @taCodeLines ; - , @I, tnCodeLines, @lcProcedureAbierto ) - *-- Puede haber varios objetos OLE - - *CASE NOT llINCLUDE_SCX_Completed AND .c_Type = 'SCX' AND .analizarBloque_INCLUDE( @toModulo, @loClase, @lcLine ; - , @taCodeLines, @I, tnCodeLines, @lcProcedureAbierto ) - * Específico para SCX que lo tiene al inicio - * llINCLUDE_SCX_Completed = .T. - * llEXTERNAL_CLASS_Completed = .T. - CASE .analizarBloque_DEFINE_CLASS( @toModulo, @loClase, @lcLine, @taCodeLines, @I, tnCodeLines ; , @lcProcedureAbierto, @taLineasExclusion, @tnBloquesExclusion, @lc_Comentario ) *-- Puede haber varias clases definidas @@ -7820,7 +7807,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE EXTERNAL ARRAY taCodeLines, taLineasExclusion #IF .F. - LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG' LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF @@ -7837,11 +7824,8 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE IF tnCodeLines > 1 - *-- Defino el objeto de módulo y sus propiedades - *toModulo = NULL - *toModulo = CREATEOBJECT('CL_MODULO') - - IF NOT (toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_RedirectClassPerFileToMain) + IF toFoxBin2Prg.n_UseClassPerFile > 0 AND toFoxBin2Prg.l_RedirectClassPerFileToMain + ELSE llEXTERNAL_CLASS_Completed = .T. ENDIF @@ -7916,7 +7900,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE LPARAMETERS toModulo, toFoxBin2Prg #IF .F. - LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG' LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF @@ -7925,7 +7909,9 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE loLang = _SCREEN.o_FoxBin2Prg_Lang *-- Verificación de las Clases, si son Externas y se indicó chequearlas - IF toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_ClassPerFileCheck + DO CASE + CASE toFoxBin2Prg.n_UseClassPerFile = 1 AND toFoxBin2Prg.l_ClassPerFileCheck + *-- El ClassPerFile original, con nomenclatura 'Libreria.NombreClase.vc2' FOR I = 1 TO toModulo._ExternalClasses_Count lnItem = 0 @@ -7944,7 +7930,29 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE toModulo._Clases(lnItem)._Checked = .T. ENDFOR - ENDIF + + CASE toFoxBin2Prg.n_UseClassPerFile = 2 AND toFoxBin2Prg.l_ClassPerFileCheck + *-- El nuevo ClassPerFile, con nomenclatura 'Libreria.ClaseBase.NombreClase.vc2' + FOR I = 1 TO toModulo._ExternalClasses_Count + lnItem = 0 + + FOR X = 1 TO toModulo._Clases_Count + IF LOWER( toModulo._Clases(X)._BaseClass + '.' + toModulo._Clases(X)._ObjName ) == LOWER( toModulo._ExternalClasses(I,2) ) + lnItem = X + EXIT + ENDIF + ENDFOR + + IF lnItem = 0 THEN + lcClaseExterna = FORCEPATH( JUSTSTEM(toFoxBin2Prg.c_InputFile) + '.' + toModulo._ExternalClasses(I,1) + '.' + JUSTEXT(toFoxBin2Prg.c_InputFile), JUSTPATH(toFoxBin2Prg.c_InputFile) ) + *ERROR 'No se ha encontrado la clase externa [' + toModulo._ExternalClasses(I,1) + '] en el archivo [' + toFoxBin2Prg.c_InputFile + ']' + ERROR ( loLang.C_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC + ' [' + lcClaseExterna + ']' ) + ENDIF + + toModulo._Clases(lnItem)._Checked = .T. + ENDFOR + + ENDCASE ENDPROC @@ -7967,13 +7975,13 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) - * toModulo (@! OUT) Objeto generado de clase CL_MODULO con la información leida del texto + * toModulo (@! OUT) Objeto generado de clase CL_CLASSLIB con la información leida del texto * toEx (@! OUT) Objeto con información del error * toFoxBin2Prg (@? IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxBin2Prg #IF .F. - LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG' LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF DODEFAULT( @toModulo, @toEx, @toFoxBin2Prg ) @@ -7989,9 +7997,9 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin STORE NULL TO toModulo loLang = _SCREEN.o_FoxBin2Prg_Lang - toModulo = CREATEOBJECT('CL_MODULO') + toModulo = CREATEOBJECT('CL_CLASSLIB') - IF toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_RedirectClassPerFileToMain + IF toFoxBin2Prg.n_UseClassPerFile > 0 AND toFoxBin2Prg.l_RedirectClassPerFileToMain C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) @@ -8001,20 +8009,42 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin .AvanceDelProceso( 'Loading Code...', 2, lnCodeLines, 1 ) - *-- Esto crea la máscara de búsqueda "filename.*.ext" para encontrar las partes - lcInputFile = FORCEPATH( JUSTSTEM( JUSTSTEM(.c_InputFile) ), JUSTPATH(.c_InputFile) ) + '.*.' + JUSTEXT(.c_InputFile) + *-- MÁSCARA DE BÚSQUEDA + IF toFoxBin2Prg.n_UseClassPerFile = 1 THEN + *-- Esto crea la máscara de búsqueda "filename.*.ext" para encontrar las partes + lcBaseFilename = JUSTSTEM( JUSTSTEM(.c_InputFile) ) + lcInputFile = ADDBS( JUSTPATH(.c_InputFile) ) + lcBaseFilename + '.*.' + JUSTEXT(.c_InputFile) + ELSE && toFoxBin2Prg.n_UseClassPerFile = 2 + *-- Esto crea la máscara de búsqueda "Database.*.*.ext" para encontrar las partes + *-- con la sintaxis "Database.MemberType.MemberName.ext" + lcBaseFilename = JUSTSTEM( JUSTSTEM( JUSTSTEM(.c_InputFile) ) ) + lcInputFile = ADDBS( JUSTPATH(.c_InputFile) ) + lcBaseFilename + '.*.*.' + JUSTEXT(.c_InputFile) + ENDIF + lnFileCount = ADIR( laFiles, lcInputFile, "", 1 ) ASORT( laFiles, 1, 0, 0, 1) FOR I = 1 TO lnFileCount - lcInputFile_Class = FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile ) - lcClassName = JUSTEXT( JUSTSTEM( lcInputFile_Class ) ) + IF toFoxBin2Prg.n_UseClassPerFile = 1 THEN + lcInputFile_Class = FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile ) + lcClassName = LOWER( GETWORDNUM( JUSTFNAME( lcInputFile_Class ), 2, '.' ) ) - *-- Verificación de las Clases, si son Externas y se indicó chequearlas - IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toModulo._ExternalClasses, lcClassName, 1, 0, 1, 1+2+4 ) = 0 - .writeLog( C_TAB + '- ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) - .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) - LOOP && Salteo esta clase porque no concuerda con las anotadas + *-- Verificación de las Clases, si son Externas y se indicó chequearlas + IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toModulo._ExternalClasses , lcClassName, 1, 0, 1, 1+2+4 ) = 0 + .writeLog( C_TAB + '- ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) + .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) + LOOP && Salteo esta clase + ENDIF + ELSE && toFoxBin2Prg.n_UseClassPerFile = 2 + lcInputFile_Class = FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile ) + lcClassName = LOWER( GETWORDNUM( JUSTFNAME( lcInputFile_Class ), 2, '.' ) + '.' + GETWORDNUM( JUSTFNAME( lcInputFile_Class ), 3, '.' ) ) + + *-- Verificación de las Clases, si son Externas y se indicó chequearlas + IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toModulo._ExternalClasses , lcClassName, 1, 0, 2, 1+2+4 ) = 0 + .writeLog( C_TAB + '- ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) + .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) + LOOP && Salteo esta clase porque no concuerda con las anotadas + ENDIF ENDIF .writeLog( C_TAB + '+ ' + loLang.C_INCLUDING_CLASS_LOC + ' ' + JUSTFNAME( lcInputFile_Class ) ) @@ -8146,7 +8176,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin *-- ProcLines[1] Líneas del procedimiento *-- ----------------------------------------------------------------------------------------------------------- #IF .F. - LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG' LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF @@ -8330,13 +8360,13 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) - * toModulo (@! OUT) Objeto generado de clase CL_MODULO con la información leida del texto + * toModulo (@! OUT) Objeto generado de clase CL_CLASSLIB con la información leida del texto * toEx (@! OUT) Objeto con información del error * toFoxBin2Prg (@! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxBin2Prg #IF .F. - LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG' LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF DODEFAULT( @toModulo, @toEx, @toFoxBin2Prg ) @@ -8352,9 +8382,9 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin STORE NULL TO toModulo loLang = _SCREEN.o_FoxBin2Prg_Lang - toModulo = CREATEOBJECT('CL_MODULO') + toModulo = CREATEOBJECT('CL_CLASSLIB') - IF toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_RedirectClassPerFileToMain + IF toFoxBin2Prg.n_UseClassPerFile > 0 AND toFoxBin2Prg.l_RedirectClassPerFileToMain C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) @@ -8364,19 +8394,42 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin .AvanceDelProceso( 'Loading Code...', 2, lnCodeLines, 1 ) - *-- Esto crea la máscara de búsqueda "filename.*.ext" para encontrar las partes - lcInputFile = FORCEPATH( JUSTSTEM( JUSTSTEM(.c_InputFile) ), JUSTPATH(.c_InputFile) ) + '.*.' + JUSTEXT(.c_InputFile) + *-- MÁSCARA DE BÚSQUEDA + IF toFoxBin2Prg.n_UseClassPerFile = 1 THEN + *-- Esto crea la máscara de búsqueda "filename.*.ext" para encontrar las partes + lcBaseFilename = JUSTSTEM( JUSTSTEM(.c_InputFile) ) + lcInputFile = ADDBS( JUSTPATH(.c_InputFile) ) + lcBaseFilename + '.*.' + JUSTEXT(.c_InputFile) + ELSE && toFoxBin2Prg.n_UseClassPerFile = 2 + *-- Esto crea la máscara de búsqueda "Database.*.*.ext" para encontrar las partes + *-- con la sintaxis "Database.MemberType.MemberName.ext" + lcBaseFilename = JUSTSTEM( JUSTSTEM( JUSTSTEM(.c_InputFile) ) ) + lcInputFile = ADDBS( JUSTPATH(.c_InputFile) ) + lcBaseFilename + '.*.*.' + JUSTEXT(.c_InputFile) + ENDIF + lnFileCount = ADIR( laFiles, lcInputFile, "", 1 ) ASORT( laFiles, 1, 0, 0, 1) FOR I = 1 TO lnFileCount - lcInputFile_Class = FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile ) + IF toFoxBin2Prg.n_UseClassPerFile = 1 THEN + lcInputFile_Class = FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile ) + lcClassName = LOWER( GETWORDNUM( JUSTFNAME( lcInputFile_Class ), 2, '.' ) ) - *-- Verificación de las Clases, si son Externas y se indicó chequearlas - IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toModulo._ExternalClasses , JUSTEXT( JUSTSTEM( lcInputFile_Class ) ), 1, 0, 1, 1+2+4 ) = 0 - .writeLog( C_TAB + '- ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) - .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) - LOOP && Salteo esta clase + *-- Verificación de las Clases, si son Externas y se indicó chequearlas + IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toModulo._ExternalClasses , lcClassName, 1, 0, 1, 1+2+4 ) = 0 + .writeLog( C_TAB + '- ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) + .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) + LOOP && Salteo esta clase + ENDIF + ELSE && toFoxBin2Prg.n_UseClassPerFile = 2 + lcInputFile_Class = FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile ) + lcClassName = LOWER( GETWORDNUM( JUSTFNAME( lcInputFile_Class ), 2, '.' ) + '.' + GETWORDNUM( JUSTFNAME( lcInputFile_Class ), 3, '.' ) ) + + *-- Verificación de las Clases, si son Externas y se indicó chequearlas + IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toModulo._ExternalClasses , lcClassName, 1, 0, 2, 1+2+4 ) = 0 + .writeLog( C_TAB + '- ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) + .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) + LOOP && Salteo esta clase + ENDIF ENDIF .writeLog( C_TAB + '+ ' + loLang.C_INCLUDING_CLASS_LOC + ' ' + JUSTFNAME( lcInputFile_Class ) ) @@ -8508,7 +8561,7 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin *-- ProcLines[1] Líneas del procedimiento *-- ----------------------------------------------------------------------------------------------------------- #IF .F. - LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG' LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF @@ -10231,6 +10284,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin + [] ; + [] ; + [] ; + + [] ; + [] c_Type = 'DC2' @@ -10263,7 +10317,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin loLang = _SCREEN.o_FoxBin2Prg_Lang toDatabase = CREATEOBJECT('CL_DBC') - IF toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_RedirectClassPerFileToMain + IF toFoxBin2Prg.n_UseClassPerFile > 0 AND toFoxBin2Prg.l_RedirectClassPerFileToMain C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) C_FB2PRG_CODE = '' @@ -10392,7 +10446,6 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ENDIF - *STRTOFILE( C_FB2PRG_CODE, .c_InputFile + '.txt' ) && *fdb* lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte @@ -10492,24 +10545,24 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin * tnCodeLines (@! IN ) Cantidad de líneas de código * taLineasExclusion (@! IN ) Array unidimensional con un .T. o .F. según la línea sea de exclusión o no * tnBloquesExclusion (@! IN ) Cantidad de bloques de exclusión - * toModulo (@? OUT) Objeto con toda la información del módulo analizado + * toDatabase (@? OUT) Objeto con toda la información del módulo analizado * toFoxBin2Prg (@? IN ) Referencia al objeto principal *-------------------------------------------------------------------------------------------------------------- * NOTA: * Como identificador se usa el nombre de clase o de procedimiento, según corresponda. *-------------------------------------------------------------------------------------------------------------- - LPARAMETERS taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toModulo, toFoxBin2Prg + LPARAMETERS taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toDatabase, toFoxBin2Prg EXTERNAL ARRAY taCodeLines, taLineasExclusion #IF .F. - LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toDatabase AS CL_DBC OF 'FOXBIN2PRG.PRG' LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF TRY LOCAL I, loEx AS EXCEPTION ; - , llFoxBin2Prg_Completed, llOLE_DEF_Completed, llINCLUDE_SCX_Completed, llLIBCOMMENT_Completed, llEXTERNAL_CLASS_Completed ; + , llFoxBin2Prg_Completed, llOLE_DEF_Completed, llINCLUDE_SCX_Completed, llLIBCOMMENT_Completed, llEXTERNAL_MEMBER_Completed ; , lc_Comentario, lcProcedureAbierto, lcLine ; , loClase AS CL_CLASE OF 'FOXBIN2PRG.PRG' @@ -10520,12 +10573,9 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin IF tnCodeLines > 1 - *-- Defino el objeto de módulo y sus propiedades - *toModulo = NULL - *toModulo = CREATEOBJECT('CL_MODULO') - - IF NOT (toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_RedirectClassPerFileToMain) - llEXTERNAL_CLASS_Completed = .T. + IF toFoxBin2Prg.n_UseClassPerFile > 0 AND toFoxBin2Prg.l_RedirectClassPerFileToMain + ELSE + llEXTERNAL_MEMBER_Completed = .T. ENDIF *-- Búsqueda del ID de inicio de bloque (DEFINE CLASS / PROCEDURE) @@ -10536,10 +10586,10 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin DO CASE CASE .lineIsOnlyCommentAndNoMetadata( @lcLine, @lc_Comentario ) && Excluida, vacía o solo Comentarios - CASE NOT llFoxBin2Prg_Completed AND .analizarBloque_FoxBin2Prg( @toModulo, @lcLine, @taCodeLines, @I, tnCodeLines ) + CASE NOT llFoxBin2Prg_Completed AND .analizarBloque_FoxBin2Prg( @toDatabase, @lcLine, @taCodeLines, @I, tnCodeLines ) llFoxBin2Prg_Completed = .T. - CASE NOT llEXTERNAL_CLASS_Completed AND .analizarBloque_EXTERNAL_MEMBER( @toModulo, @lcLine, @taCodeLines, @I, tnCodeLines ) + CASE NOT llEXTERNAL_MEMBER_Completed AND .analizarBloque_EXTERNAL_MEMBER( @toDatabase, @lcLine, @taCodeLines, @I, tnCodeLines ) *-- Puede haber varias clases externas ENDCASE @@ -10558,7 +10608,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin FINALLY STORE NULL TO loClase - RELEASE taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toModulo, loClase, I ; + RELEASE taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toDatabase, loClase, I ; , llFoxBin2Prg_Completed, llOLE_DEF_Completed, llINCLUDE_SCX_Completed, llLIBCOMMENT_Completed ; , lc_Comentario, lcProcedureAbierto, lcLine ENDTRY @@ -10575,7 +10625,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin * tnCodeLines (!@ IN ) Cantidad de líneas de código * taLineasExclusion (@! IN ) Array unidimensional con un .T. o .F. según la línea sea de exclusión o no * tnBloquesExclusion (@? IN ) Sin uso - * toDatabase (@? OUT) Objeto con toda la información de la base de datos analizada + * toDatabase (@! IN ) Objeto con toda la información de la base de datos analizada * toFoxBin2Prg (v! IN ) Referencia al objeto principal *-------------------------------------------------------------------------------------------------------------- * NOTA: @@ -10598,8 +10648,6 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin .c_Type = UPPER(JUSTEXT(.c_OutputFile)) IF tnCodeLines > 1 - toDatabase = NULL - toDatabase = CREATEOBJECT('CL_DBC') FOR I = 1 TO tnCodeLines .set_Line( @lcLine, @taCodeLines, I ) @@ -10615,6 +10663,8 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ENDCASE ENDFOR + + .verificar_MIEMBROS_EXTERNOS( @toDatabase, @toFoxBin2Prg ) ENDIF ENDWITH && THIS @@ -10636,16 +10686,16 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin PROCEDURE verificar_MIEMBROS_EXTERNOS *-------------------------------------------------------------------------------- - * Compara las clases definidas en la cabecera con las clases encontradas luego + * Compara los miembros definidos en la cabecera con los miembros encontrados luego *-------------------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) - * toModulo (@? OUT) Objeto con toda la información del módulo analizado - * toFoxBin2Prg (@? IN ) Referencia al objeto principal + * toDatabase (@! IN ) Objeto con toda la información del módulo analizado + * toFoxBin2Prg (@! IN ) Referencia al objeto principal *-------------------------------------------------------------------------------------------------------------- - LPARAMETERS toModulo, toFoxBin2Prg + LPARAMETERS toDatabase, toFoxBin2Prg #IF .F. - LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toDatabase AS CL_DBC OF 'FOXBIN2PRG.PRG' LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF @@ -10653,25 +10703,25 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' loLang = _SCREEN.o_FoxBin2Prg_Lang - *-- Verificación de las Clases, si son Externas y se indicó chequearlas - IF toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_ClassPerFileCheck - FOR I = 1 TO toModulo._ExternalClasses_Count + *-- Verificación de los Miembros, si son Externos y se indicó chequearlos + IF toFoxBin2Prg.n_UseClassPerFile > 0 AND toFoxBin2Prg.l_ClassPerFileCheck + FOR I = 1 TO toDatabase._ExternalClasses_Count lnItem = 0 - FOR X = 1 TO toModulo._Clases_Count - IF LOWER( toModulo._Clases(X)._ObjName ) == LOWER( toModulo._ExternalClasses(I,1) ) + FOR X = 1 TO toDatabase._Members_Count + IF LOWER( toDatabase._Members(X,1) ) == LOWER( toDatabase._ExternalClasses(I,1) ) lnItem = X EXIT ENDIF ENDFOR IF lnItem = 0 THEN - lcClaseExterna = FORCEPATH( JUSTSTEM(toFoxBin2Prg.c_InputFile) + '.' + toModulo._ExternalClasses(I,1) + '.' + JUSTEXT(toFoxBin2Prg.c_InputFile), JUSTPATH(toFoxBin2Prg.c_InputFile) ) - *ERROR 'No se ha encontrado la clase externa [' + toModulo._ExternalClasses(I,1) + '] en el archivo [' + toFoxBin2Prg.c_InputFile + ']' + lcClaseExterna = FORCEPATH( JUSTSTEM(toFoxBin2Prg.c_InputFile) + '.' + toDatabase._ExternalClasses(I,1) + '.' + JUSTEXT(toFoxBin2Prg.c_InputFile), JUSTPATH(toFoxBin2Prg.c_InputFile) ) + *ERROR 'No se ha encontrado la clase externa [' + toDatabase._ExternalClasses(I,1) + '] en el archivo [' + toFoxBin2Prg.c_InputFile + ']' ERROR ( loLang.C_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC + ' [' + lcClaseExterna + ']' ) ENDIF - toModulo._Clases(lnItem)._Checked = .T. + toDatabase._Members(lnItem,2) = .T. && Checked ENDFOR ENDIF ENDPROC @@ -11573,7 +11623,12 @@ DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE ENDIF toEx.UserValue = toEx.UserValue + lcLocation + CR_LF - toEx.UserValue = toEx.UserValue + '> ' + laCodeLines(THIS.n_Methods_LineNo) + CR_LF + + IF THIS.n_Methods_LineNo = 0 THEN + toEx.UserValue = toEx.UserValue + '> (no evaluated code yet)' + CR_LF + ELSE + toEx.UserValue = toEx.UserValue + '> ' + laCodeLines(THIS.n_Methods_LineNo) + CR_LF + ENDIF ENDIF toEx.UserValue = toEx.UserValue + 'Recno: ' + TRANSFORM(RECNO()) + CR_LF @@ -12699,7 +12754,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) - * toModulo (!@ OUT) Objeto generado de clase CL_MODULO con la información leida del texto + * toModulo (!@ OUT) Objeto generado de clase CL_CLASSLIB con la información leida del texto * toEx (!@ OUT) Objeto con información del error * toFoxBin2Prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- @@ -12712,7 +12767,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg TRY LOCAL lnCodError, loRegClass, loRegObj, lnMethodCount, laMethods(1), laCode(1), laProtected(1), lnLen, lnObjCount ; , laPropsAndValues(1), laPropsAndComments(1), lnLastClass, lnRecno, lcMethods, lcObjName, la_NombresObjsOle(1) ; - , laObjs(1,4), I, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count, lcCodigo, laClasses(1,2) ; + , laObjs(1,4), I, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count, lcCodigo, laClasses(1,3) ; , lnClassCount, lcOutputFile, lcExternalHeader, lnClassTotal, lnStepCount, lnStep, lcObjPathInsideClass, lnPos ; , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' STORE 0 TO lnCodError, lnLastClass, lnObjCount, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count ; @@ -12760,7 +12815,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg STORE 0 TO lnMethodCount STORE '' TO laMethods, laCode, lcCodigo lnClassCount = lnClassCount + 1 - DIMENSION laClasses(lnClassCount,2) + DIMENSION laClasses(lnClassCount,3) loRegClass = NULL SCATTER MEMO NAME loRegClass @@ -12782,6 +12837,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg lcObjName = ALLTRIM( loRegClass.OBJNAME ) laClasses(lnClassCount,1) = LOWER( lcObjName ) + laClasses(lnClassCount,3) = loRegClass.BASECLASS lnStep = lnStep + 1 .AvanceDelProceso( 'Processing Class ' + lcObjName + '...', lnStep, lnClassTotal*lnStepCount, 1 ) @@ -12792,7 +12848,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg .write_CLASSMETADATA( @loRegClass, @lcCodigo ) - IF toFoxBin2Prg.l_UseClassPerFile + IF toFoxBin2Prg.n_UseClassPerFile > 0 THEN .write_EXTERNAL_CLASS_HEADER( @loRegClass, @toFoxBin2Prg, @lcExternalHeader ) ENDIF @@ -12932,7 +12988,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg laClasses(lnClassCount,2) = lcCodigo ENDSCAN - IF toFoxBin2Prg.l_UseClassPerFile + IF toFoxBin2Prg.n_UseClassPerFile > 0 THEN lcExternalHeader = lcExternalHeader + CR_LF ENDIF @@ -12950,21 +13006,32 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg ENDFOR toModulo = lcCodigo ELSE - IF toFoxBin2Prg.l_UseClassPerFile + DO CASE + CASE toFoxBin2Prg.n_UseClassPerFile = 1 && LibName.ClassName.SC2 .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) FOR I = 1 TO lnClassCount - lcOutputFile = FORCEPATH( JUSTSTEM( .c_OutputFile ), JUSTPATH( .c_OutputFile ) ) + '.' + laClasses(I,1) + '.' + JUSTEXT( .c_OutputFile ) + lcOutputFile = ADDBS( JUSTPATH( .c_OutputFile ) ) + JUSTSTEM( .c_OutputFile ) + '.' + laClasses(I,1) + '.' + JUSTEXT( .c_OutputFile ) lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + laClasses(I,2) .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) ENDFOR - ELSE + + CASE toFoxBin2Prg.n_UseClassPerFile = 2 && LibName.BaseClass.ClassName.SC2 + .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) + + FOR I = 1 TO lnClassCount + lcOutputFile = ADDBS( JUSTPATH( .c_OutputFile ) ) + JUSTSTEM( .c_OutputFile ) + '.' + laClasses(I,3) + '.' + laClasses(I,1) + '.' + JUSTEXT( .c_OutputFile ) + lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + laClasses(I,2) + .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) + ENDFOR + + OTHERWISE FOR I = 1 TO lnClassCount lcCodigo = lcCodigo + laClasses(I,2) ENDFOR .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) - ENDIF + ENDCASE ENDIF ENDWITH && THIS @@ -13005,7 +13072,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) - * toModulo (!@ OUT) Objeto generado de clase CL_MODULO con la información leida del texto + * toModulo (!@ OUT) Objeto generado de clase CL_CLASSLIB con la información leida del texto * toEx (!@ OUT) Objeto con información del error * toFoxBin2Prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- @@ -13013,14 +13080,14 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg DODEFAULT( @toModulo, @toEx, @toFoxBin2Prg ) #IF .F. - LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG' LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF TRY LOCAL lnCodError, loRegClass, loRegObj, lnMethodCount, laMethods(1), laCode(1), laProtected(1), lnLen, lnObjCount ; , laPropsAndValues(1), laPropsAndComments(1), lnLastClass, lnRecno, lcMethods, lcObjName, la_NombresObjsOle(1) ; - , laObjs(1,4), I, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count, lcCodigo, laClasses(1,2) ; + , laObjs(1,4), I, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count, lcCodigo, laClasses(1,3) ; , lnClassCount, lcOutputFile, lcExternalHeader, lnClassTotal, lnStepCount, lnStep, lcObjPathInsideClass, lnPos ; , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' STORE 0 TO lnCodError, lnLastClass, lnObjCount, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count ; @@ -13083,7 +13150,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg STORE 0 TO lnMethodCount STORE '' TO laMethods, laCode, lcCodigo lnClassCount = lnClassCount + 1 - DIMENSION laClasses(lnClassCount,2) + DIMENSION laClasses(lnClassCount,3) loRegClass = NULL SCATTER MEMO NAME loRegClass @@ -13105,6 +13172,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg lcObjName = ALLTRIM(loRegClass.OBJNAME) laClasses(lnClassCount,1) = LOWER( lcObjName ) + laClasses(lnClassCount,3) = loRegClass.BASECLASS lnStep = lnStep + 1 .AvanceDelProceso( 'Processing Class ' + lcObjName + '...', lnStep, lnClassTotal*lnStepCount, 1 ) @@ -13115,7 +13183,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg .write_CLASSMETADATA( @loRegClass, @lcCodigo ) - IF toFoxBin2Prg.l_UseClassPerFile + IF toFoxBin2Prg.n_UseClassPerFile > 0 THEN .write_EXTERNAL_CLASS_HEADER( @loRegClass, @toFoxBin2Prg, @lcExternalHeader ) ENDIF @@ -13257,7 +13325,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg laClasses(lnClassCount,2) = lcCodigo ENDSCAN - IF toFoxBin2Prg.l_UseClassPerFile + IF toFoxBin2Prg.n_UseClassPerFile > 0 THEN lcExternalHeader = lcExternalHeader + CR_LF ENDIF @@ -13275,21 +13343,32 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg ENDFOR toModulo = lcCodigo ELSE - IF toFoxBin2Prg.l_UseClassPerFile + DO CASE + CASE toFoxBin2Prg.n_UseClassPerFile = 1 && LibName.ClassName.SC2 .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) FOR I = 1 TO lnClassCount - lcOutputFile = FORCEPATH( JUSTSTEM( .c_OutputFile ), JUSTPATH( .c_OutputFile ) ) + '.' + laClasses(I,1) + '.' + JUSTEXT( .c_OutputFile ) + lcOutputFile = ADDBS( JUSTPATH( .c_OutputFile ) ) + JUSTSTEM( .c_OutputFile ) + '.' + laClasses(I,1) + '.' + JUSTEXT( .c_OutputFile ) lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + laClasses(I,2) .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) ENDFOR - ELSE + + CASE toFoxBin2Prg.n_UseClassPerFile = 2 && LibName.BaseClass.ClassName.SC2 + .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) + + FOR I = 1 TO lnClassCount + lcOutputFile = ADDBS( JUSTPATH( .c_OutputFile ) ) + JUSTSTEM( .c_OutputFile ) + '.' + laClasses(I,3) + '.' + laClasses(I,1) + '.' + JUSTEXT( .c_OutputFile ) + lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + laClasses(I,2) + .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) + ENDFOR + + OTHERWISE FOR I = 1 TO lnClassCount lcCodigo = lcCodigo + laClasses(I,2) ENDFOR .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) - ENDIF + ENDCASE ENDIF ENDWITH && THIS @@ -14466,7 +14545,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg C_FB2PRG_CODE = C_FB2PRG_CODE + toDatabase.toText(@toFoxBin2Prg) *-- Header - IF toFoxBin2Prg.l_UseClassPerFile + IF toFoxBin2Prg.n_UseClassPerFile > 0 THEN .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, .F., .F., @lcExternalHeader ) *-- Connections @@ -14523,7 +14602,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg *ENDFOR *toDatabase = lcCodigo ELSE - IF toFoxBin2Prg.l_UseClassPerFile + IF toFoxBin2Prg.n_UseClassPerFile > 0 THEN .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) FOR I = 1 TO lnClassCount @@ -14817,9 +14896,9 @@ ENDDEFINE -DEFINE CLASS CL_MODULO AS CL_CUS_BASE +DEFINE CLASS CL_CLASSLIB AS CL_CUS_BASE #IF .F. - LOCAL THIS AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL THIS AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG' #ENDIF _MEMBERDATA = [] ; @@ -14857,7 +14936,7 @@ DEFINE CLASS CL_MODULO AS CL_CUS_BASE LOCAL toOle AS CL_OLE OF 'FOXBIN2PRG.PRG' #ENDIF - WITH THIS AS CL_MODULO OF 'FOXBIN2PRG.PRG' + WITH THIS AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG' ._Ole_Obj_count = ._Ole_Obj_count + 1 DIMENSION ._Ole_Objs( ._Ole_Obj_count ) ._Ole_Objs( ._Ole_Obj_count ) = toOle @@ -14873,7 +14952,7 @@ DEFINE CLASS CL_MODULO AS CL_CUS_BASE LOCAL toClase AS CL_CLASE OF 'FOXBIN2PRG.PRG' #ENDIF - WITH THIS AS CL_MODULO OF 'FOXBIN2PRG.PRG' + WITH THIS AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG' ._Clases_Count = ._Clases_Count + 1 DIMENSION ._Clases( ._Clases_Count ) ._Clases( ._Clases_Count ) = toClase @@ -14887,7 +14966,7 @@ DEFINE CLASS CL_MODULO AS CL_CUS_BASE LPARAMETERS tcNombre, X LOCAL llExiste - WITH THIS AS CL_MODULO OF 'FOXBIN2PRG.PRG' + WITH THIS AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG' FOR X = 1 TO ._Ole_Obj_count IF LOWER(._Ole_Objs(X)._Nombre) == LOWER(tcNombre) llExiste = .T. @@ -16611,12 +16690,16 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE + [] ; + [] ; + [] ; + + [] ; + + [] ; + + [] ; + [] *-- Modulo - DIMENSION _ExternalClasses(1,2) + DIMENSION _ExternalClasses(1,2), _Members(1,2) _ExternalClasses_Count = 0 + _Members_Count = 0 _Version = 0 _SourceFile = '' @@ -16659,17 +16742,19 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE TRY LOCAL loConnections AS CL_DBC_CONNECTIONS OF 'FOXBIN2PRG.PRG' ; + , loConnection AS CL_DBC_CONNECTION OF 'FOXBIN2PRG.PRG' ; , loTables AS CL_DBC_TABLES OF 'FOXBIN2PRG.PRG' ; + , loTable AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG' ; , loViews AS CL_DBC_VIEWS OF 'FOXBIN2PRG.PRG' ; - , loRelations AS CL_DBC_RELATIONS OF 'FOXBIN2PRG.PRG' ; + , loView AS CL_DBC_VIEW OF 'FOXBIN2PRG.PRG' ; , llBloqueEncontrado, lcPropName, lcValue, loEx AS EXCEPTION STORE '' TO lcPropName, lcValue - STORE NULL TO loConnections, loTables, loViews, loRelations + STORE NULL TO loConnections, loTables, loViews, loConnection, loTable, loView IF LEFT(tcLine, LEN(C_DATABASE_I)) == C_DATABASE_I llBloqueEncontrado = .T. - WITH THIS AS CL_DBC_BASE OF 'FOXBIN2PRG.PRG' + WITH THIS AS CL_DBC OF 'FOXBIN2PRG.PRG' FOR I = I + 1 TO tnCodeLines .set_Line( @tcLine, @taCodeLines, I ) @@ -16684,16 +16769,29 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE loConnections = ._Connections loConnections.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + FOR EACH loConnection IN loConnections FOXOBJECT + .add_DBCMember('connection.' + loConnection._Name) + ENDFOR + CASE C_TABLES_I $ tcLine loTables = ._Tables loTables.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + FOR EACH loTable IN loTables FOXOBJECT + .add_DBCMember('table.' + loTable._Name) + ENDFOR + CASE C_VIEWS_I $ tcLine loViews = ._Views loViews.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + FOR EACH loView IN loViews FOXOBJECT + .add_DBCMember('view.' + loView._Name) + ENDFOR + CASE C_STORED_PROC_I $ tcLine .analizarBloque_SP( @tcLine, @taCodeLines, @I, tnCodeLines ) + .add_DBCMember('storedprocedures.sp') CASE '' $ tcLine .analizarBloque_Comment( @tcLine, @taCodeLines, @I, tnCodeLines ) @@ -16721,8 +16819,8 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE THROW FINALLY - STORE NULL TO loConnections, loTables, loViews, loRelations - RELEASE loConnections, loTables, loViews, loRelations, lcPropName, lcValue + STORE NULL TO loConnections, loTables, loViews, loConnection, loTable, loView + RELEASE loConnections, loTables, loViews, loConnection, loTable, loView ENDTRY RETURN llBloqueEncontrado @@ -16883,7 +16981,7 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE <<>> <> ENDTEXT - IF NOT toFoxBin2Prg.l_UseClassPerFile THEN + IF NOT toFoxBin2Prg.n_UseClassPerFile > 0 THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <> <> @@ -16931,6 +17029,17 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE ENDPROC + PROCEDURE add_DBCMember + LPARAMETERS tcMemberName + + WITH THIS AS CL_DBC OF 'FOXBIN2PRG.PRG' + ._Members_Count = ._Members_Count + 1 + DIMENSION ._Members( ._Members_Count, 2 ) + ._Members( ._Members_Count, 1 ) = LOWER(tcMemberName) + ENDWITH && THIS + ENDPROC + + ENDDEFINE @@ -24077,7 +24186,7 @@ DEFINE CLASS CL_CFG AS CUSTOM + [] ; + [] ; + [] ; - + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -24108,7 +24217,7 @@ DEFINE CLASS CL_CFG AS CUSTOM l_ClearDBFLastUpdate = NULL l_OptimizeByFilestamp = NULL l_RedirectClassPerFileToMain = NULL - l_UseClassPerFile = NULL + n_UseClassPerFile = NULL l_ClassPerFileCheck = NULL n_ExtraBackupLevels = NULL c_VC2 = NULL From 18e4adc0c5e3d265922fc66ca21ccdcb160fbaad Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 22 Mar 2015 00:31:31 +0100 Subject: [PATCH 060/123] - Compilo el archivo de eventos del DBC antes de abrir el DBC porque si no da error en modo EXE - Arreglo de la ruta absoluta/relativa del archivo de eventos --- foxbin2prg.prg | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 42f7539..2fc5d3a 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -14526,7 +14526,10 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg *-- creo uno temporalmente para poder abrir la BDD y luego lo elimino. IF toDatabase._DBCEvents AND NOT EMPTY(toDatabase._DBCEventFilename) THEN *-- El archivo de eventos puede tener path relativo o absoluto - IF LEFT(toDatabase._DBCEventFilename,1) = '.' THEN + *-- Ajusto la ruta si no es absoluta + IF LEN(toDatabase._DBCEventFilename) > 1 ; + AND LEFT(LTRIM(toDatabase._DBCEventFilename),2) <> '\\' ; + AND SUBSTR(LTRIM(toDatabase._DBCEventFilename),2,1) <> ':' THEN lcEventsFile = ADDBS( JUSTPATH(.c_InputFile) ) + toDatabase._DBCEventFilename ELSE lcEventsFile = toDatabase._DBCEventFilename @@ -14535,6 +14538,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg lcEventsFile = '' ELSE STRTOFILE( '', lcEventsFile ) + COMPILE (lcEventsFile) ENDIF ENDIF From ed7d5eba4f4d434afeb09ef11b559e897b645241 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 22 Mar 2015 01:03:23 +0100 Subject: [PATCH 061/123] - Arreglo del Path para las tablas de las vistas locales Offline --- foxbin2prg.prg | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 2fc5d3a..261d76a 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -19250,6 +19250,7 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE lcBinData = lcBinData + .getBinPropertyDataRecord( ._UseMemoSize, .getDBCPropertyIDByName('UseMemoSize', .T.) ) lcBinData = lcBinData + .getBinPropertyDataRecord( ._Offline, .getDBCPropertyIDByName('Offline', .T.) ) && Undocumented lcBinData = lcBinData + .getBinPropertyDataRecord( ._RecordCount, .getDBCPropertyIDByName('RecordCount', .T.) ) && Undocumented + lcBinData = lcBinData + .getBinPropertyDataRecord( ._Path, .getDBCPropertyIDByName('Path', .T.) ) && Undocumented lcBinData = lcBinData + .getBinPropertyDataRecord( 0, .getDBCPropertyIDByName('undocumented_view_prop_85', .T.) ) && Undocumented ENDWITH && THIS @@ -19290,8 +19291,8 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE ._UseMemoSize = DBGETPROP(tcView,"VIEW","UseMemoSize") ._WhereType = DBGETPROP(tcView,"VIEW","WhereType") *-- - ._Path = .DBGETPROP(tcView,"VIEW","Path") - ._RecordCount = .DBGETPROP(tcView,"VIEW","RecordCount") + ._Path = .DBGETPROP(tcView,"VIEW","Path") && Para las Vistas el DBGETPROP oficial no funciona con Path + ._RecordCount = .DBGETPROP(tcView,"VIEW","RecordCount") && Para las Vistas el DBGETPROP oficial no funciona con RecordCount *-- ._Saved = .T. ENDIF From dfafc7ff3867b82ba8a10079e0da5eba94b42109 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 22 Mar 2015 02:08:51 +0100 Subject: [PATCH 062/123] =?UTF-8?q?-=20Arreglo=20de=20la=20informaci=C3=B3?= =?UTF-8?q?n=20de=20los=20=C3=ADndices=20que=20se=20hab=C3=ADa=20desacomod?= =?UTF-8?q?ado=20por=20ordenarlos=20alfab=C3=A9ticamente=20-=20Arreglo=20d?= =?UTF-8?q?el=20test=20de=20=C3=ADndices=20para=20que=20no=20tenga=20en=20?= =?UTF-8?q?cuenta=20el=20orden=20de=20los=20mismos,=20sino=20su=20estructu?= =?UTF-8?q?ra=20-=20Nueva=20vista=20local=20offline=20para=20testear=20la?= =?UTF-8?q?=20BDD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TESTS/DATOS_READONLY/FB2P_DBC.DC2 | 131 ++++++++++++++++-- TESTS/DATOS_READONLY/fb2p_dbc.dbc | Bin 10123 -> 9463 bytes TESTS/DATOS_READONLY/fb2p_dbc.dct | Bin 155584 -> 29413 bytes TESTS/DATOS_READONLY/fb2p_dbc.dcx | Bin 5632 -> 5632 bytes TESTS/DATOS_READONLY/foxbin2prg.cfg | 1 + TESTS/DATOS_READONLY/vw_local_encuestas.dbf | Bin 0 -> 579 bytes TESTS/DATOS_READONLY/vw_local_encuestas.tbf | Bin 0 -> 456 bytes .../ft__foxbin2prg__c_conversor_prg_a_dbf.prg | 16 ++- foxbin2prg.prg | 16 ++- 9 files changed, 149 insertions(+), 15 deletions(-) create mode 100644 TESTS/DATOS_READONLY/foxbin2prg.cfg create mode 100644 TESTS/DATOS_READONLY/vw_local_encuestas.dbf create mode 100644 TESTS/DATOS_READONLY/vw_local_encuestas.tbf diff --git a/TESTS/DATOS_READONLY/FB2P_DBC.DC2 b/TESTS/DATOS_READONLY/FB2P_DBC.DC2 index 7ddff4f..6cc2582 100644 --- a/TESTS/DATOS_READONLY/FB2P_DBC.DC2 +++ b/TESTS/DATOS_READONLY/FB2P_DBC.DC2 @@ -190,17 +190,12 @@ - id - - .T. - - - edad_nd + depto .F. - notdeleted + edad_nd .F. @@ -210,17 +205,22 @@ .T. - depto + i_nombre .F. + + id + + .T. + nombre .F. - i_nombre + notdeleted .F. @@ -533,6 +533,119 @@ + + VW_LOCAL_ENCUESTAS + + + SELECT ENCUESTAS.Promotor,ENCUESTAS.Idenc,ENCUESTAS.Calific,ENCUESTAS.Fecha, ENCUESTAS.Resultado FROM C:\DESA\FOXBIN2PRG\TESTS\DATOS_READONLY\ENCUESTAS.DBF ENCUESTAS + .F. + 1 + .T. + + .F. + .T. + 100 + -1 + .T. + + .F. + + + .F. + .T. + 1 + 1 + 255 + 3 + + + + promotor + + + C(20) + + + + + + .F. + + + .F. + promotor + + + idenc + + + C(20) + + + + + + .F. + + + .F. + idenc + + + calific + + + C(2) + + + + + + .F. + + + .F. + calific + + + fecha + + + D + + + + + + .F. + + + .F. + fecha + + + resultado + + + C(10) + + + + + + .F. + + + .F. + resultado + + + + + + + + VW_ORA_CONVENIOS diff --git a/TESTS/DATOS_READONLY/fb2p_dbc.dbc b/TESTS/DATOS_READONLY/fb2p_dbc.dbc index 4cc431df52c764a5cabd4ee1bb8f81d6d4627046..b3887164b5dd879586a284347360ad542f49a35c 100644 GIT binary patch literal 9463 zcmd^_TaOe)6vrD-L2w08QNc@l2N4An6TywU%nUHV>`Z1y4bi02mzv#{neMSK1NtI~ zAHfG7Of)9?=2!5+Z@{~WKKTXw1pZG|FFn;~qHk3up3PL(sp`)8^{F~_>Dto=_Z)f0 zah&73e?qFu-aU@fzj(FN8g<*K>Fz>uAO03)us-Z;RQ2~SsaMaBZVWn3>p|4-UwjyO zRll*`L;a)B?=1?`tGY`>lSvQ$5oAW=Z|9+ugX-mv^+j#pQwO=AFw2 zo1I~m@BM&`{&tSDvUB7A{OVHU)35Cpe&FZAb?cmKMGoy&ZK8}*-lY;9a+LW=?uSL3 zCfCy~^PCD1Xi_93qN)M8S)`eW23Z=4sLVvZnU+}y51SIg`V78P_9P_5f$qsBWIy;+ zgoP4<@Qj$HCc|7l~Psnn2<< z&c92D8suK61bQhJlSn>ckx$xRIZuchGxHQQTWEb7; zwk)^p$x|GXX5l8JT~DrZ$OC}X11CwRK_(`Cwv|Tcr@`1zGw+z`ama@NNuYJ$D9D{h z%wL1|fCEvMWsVjxI;4nv73Svoq(#CaS%7>Psty@jMN~6R1M(n)4C1Xq+%`B5Hd>4T zNftbL2&(Q$+e45f)FB_KApbk#myC|8khsq=$T1>2kL(4` zM;y{!0=ezyh0os5RKa%~@_7as#hC~xZah0*2>#@dFEGe5Fa0dG6*jJW?jn#N3w`oM zsJrm1XPkMA#`Y#@=ub?wux95DhkOZu1X|BH2pg;4f<9>j2eRPFm!ayAwwG!@a>!R0 zr0wm)UmWsP25I}_z-o2uw9wqg8Kmuf_g5V91RxvHeM^P5htK4tK%^V_QeFr6T@Lvg zAPKaN?pc;jQyi1jkD1MNE&~UmtjgR;q&j3wCkrFi4!#m6O7^w&-2C0wjoXjm*7?ltp)%`CgbNbCJZU;n;TF7Kc0y zNCK^+JC5!Fnr-LG+LvAOp61CjP<2Q(ciRK~l|!CoklR?QrCA)>T2b!1N`BNl`4-fr zeKIO7ttT&Y$hQGWpmm>&%IWlTE4@(}UAqPxh|*;498&URD@_udy<=;W3CxOu`eapr hPeUe8#a6EqmA4Rcidlrk^XH^+zua8hNnlpwQBs1mT`Um_}sAPb?=7p zd(4}muE*C-ufq6lXn)ukAC3mY-e`Odx>rAfqB(zeu+pn;S^cDCeAMr+of(u@bU%f! zJFAPgzTRE$jjHaW~Tj1j3--^uTL}p5ex+YlUn`%k)Avj41DF3 zTTinZQXn@%o{3;-%YI%&A@H$^Vn8Cd4XHxOy5J?D4T;;-hUDIpEs*yS$Vs%Bt4j_Y zqh8l#*#e0{jIGH~>e=i~C9op(t+gdjC!2mL#0 zas(j-#<@Z)YbW$&u1i!KO20dTsj(&=h61hoy+~cuIEyIDr9VvqId#of&i4=5lj0Eo zL{QVZc@5`Fph3|ZDr>k+ZAk6_<16F>F(7f9+K}7<#+4G$f_$7nat9b+Q^+R>B)6aZ zoamXDTmTKgF-$!h#sqy$_lQTKmcQ`+h8E4v#Dv>+%~Cf*6obLDPm*F{a>r zY0mE@q6PUhg8A~3vz)Nkk3NX zhCB}`ZIVU-mwkUxBASq$=b+0zW{Hy=-a4q9D-imL#*@zzNX!=fm@icOnL@rmAh|Vp zfLiy91d==NK1d;t6G-lq_7H_UK_I!0Sq>A(&Pf6pF~1QzLLkLUw;beA0@-;PAe(3A zyst=3(YFt;v_SHnPrgYZU#%d`Gjm?ZeFRdRs`ljaq@4ZC{4EOkTFY|t?#as(^7R%- V-sS#)LgIh8HQ(d#Liz-9&owY%Lg4@a diff --git a/TESTS/DATOS_READONLY/fb2p_dbc.dct b/TESTS/DATOS_READONLY/fb2p_dbc.dct index dfa83a048705f4f55c76cf7dd3d28c9e1500c91a..45879097533517f995a05b8e1ba57eb3213f1687 100644 GIT binary patch delta 1731 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 Pog?B@TqWMnH`vHuaQ+O= diff --git a/TESTS/DATOS_READONLY/foxbin2prg.cfg b/TESTS/DATOS_READONLY/foxbin2prg.cfg new file mode 100644 index 0000000..8300bd9 --- /dev/null +++ b/TESTS/DATOS_READONLY/foxbin2prg.cfg @@ -0,0 +1 @@ +DBF_Conversion_Support:4 \ No newline at end of file diff --git a/TESTS/DATOS_READONLY/vw_local_encuestas.dbf b/TESTS/DATOS_READONLY/vw_local_encuestas.dbf new file mode 100644 index 0000000000000000000000000000000000000000..9e4efd3e9142503e1f01d1534c6255b6a62fa4fb GIT binary patch literal 579 zcmXruXBJ~(U|=}GXbU9K05bzaK#;$$e~5n&P{x@NNQj^*@pN(ZbB2gHi(-*?cJ%Rd z^8~AK)&$Cf>_P@^uFf8g5CIo$AkBd+31kPk28a5DIJ)=)?KcMUxzOZ!(~^t|;!~26 y^?(>nZX|IP0$c-J70^ItiXobaf03f#w AdjJ3c literal 0 HcmV?d00001 diff --git a/TESTS/ft__foxbin2prg__c_conversor_prg_a_dbf.prg b/TESTS/ft__foxbin2prg__c_conversor_prg_a_dbf.prg index c7a48a5..f0bef09 100644 --- a/TESTS/ft__foxbin2prg__c_conversor_prg_a_dbf.prg +++ b/TESTS/ft__foxbin2prg__c_conversor_prg_a_dbf.prg @@ -360,8 +360,22 @@ DEFINE CLASS ft__foxbin2prg__c_conversor_prg_a_dbf AS FxuTestCase OF FxuTestCase this.assertequals( lnIndices_OUT, lnIndices_IN, '[Cantidad de campos IN y OUT]' ) FOR I = 1 TO lnIndices_IN + *- Busco el índice a evaluar + FOR Z = 1 TO lnIndices_OUT + IF LOWER(laIndices_OUT(Z,1)) == LOWER(laIndices_IN(I,1)) + EXIT + ENDIF + ENDFOR + + *-- Si no se encontró, registro error + THIS.asserttrue( Z <= lnIndices_OUT, 'El índice "' + laIndices_IN(I,1) + '" no se encontró' ) + IF Z > lnIndices_OUT THEN + LOOP + ENDIF + + *-- Si se encontró, comparo su especificación FOR X = 1 TO 6 - THIS.assertequals( laIndices_IN(I,X), laIndices_OUT(I,X), '[Comparando estructura del indice ' + laIndices_IN(I,1) + ']' ) + THIS.assertequals( laIndices_IN(I,X), laIndices_OUT(Z,X), '[Comparando estructura del indice ' + laIndices_IN(I,1) + ']' ) ENDFOR ENDFOR diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 261d76a..fc8a853 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -20919,24 +20919,30 @@ DEFINE CLASS CL_DBF_INDEX AS CL_CUS_BASE PROCEDURE toText *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) - * taTagInfo (@? IN ) Array de información de indices - * I (@? IN ) Indice en evaluación + * taTagInfo (@! IN ) Array de información de indices + * I (@! IN ) Indice en evaluación *--------------------------------------------------------------------------------------------------- LPARAMETERS taTagInfo, I EXTERNAL ARRAY taTagInfo TRY - LOCAL I, lcText, loEx AS EXCEPTION + LOCAL X, lcText, loEx AS EXCEPTION lcText = '' + + FOR X = 1 TO ALEN(taTagInfo,1) + IF TAG('', X) == taTagInfo(I,1) THEN + EXIT + ENDIF + ENDFOR TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> <<>> <> - <<>> <> + <<>> <> <<>> <> <<>> <> - <<>> <> + <<>> <> <<>> <> <<>> ENDTEXT From 8e6c2362ab087e8c2507886cfd2d8332b2be9584 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 22 Mar 2015 02:21:21 +0100 Subject: [PATCH 063/123] =?UTF-8?q?-=20Actualizaci=C3=B3n=20de=20cr=C3=A9d?= =?UTF-8?q?itos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 1 + foxbin2prg.prg | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 452ea29..28e4e4c 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -38,6 +38,7 @@ Change History ------------------------------------------------------------- - Feature: Added new file processing output to DOS stdOut (Lutz Scheffler) - Bug Fix: Fixed processing cancelation with Esc key - Feature: Sort table/view fields alphabetically to facilitate diffing and merging, while maintaining a list with the original field order for correct DBC regeneration (Ryan Harris) +- Feature: Apply ClassPerFile to DBC connections, tables, views and SPs (Ryan Harris) 2015/01/18 v1.19.41 - Bug Fix db2: Erroneous detection of Invalid Table when size is less than 328 bytes. Lower limit was changed to 65 bytes. diff --git a/foxbin2prg.prg b/foxbin2prg.prg index fc8a853..acbbda0 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -150,6 +150,8 @@ * 10/03/2015 FDBOZZO v1.19.42 Mejora: Nuevo método API get_Target() para obtener información de los archivos procesados (Lutz Scheffler) * 10/03/2015 FDBOZZO v1.19.42 Mejora: Nueva salida de archivos procesados a stdOut (Lutz Scheffler) * 10/03/2015 FDBOZZO v1.19.42 Bug Fix: Arreglada la cancelación del procesamiento con tecla Esc +* 22/03/2015 FDBOZZO v1.19.42 Mejora: Permitir ordenar los campos de vistas y tablas alfabéticamente y mantener en una lista aparte el orden real, para facilitar el diff y el merge (Ryan Harris) +* 22/03/2015 FDBOZZO v1.19.42 Mejora: Aplicar ClassPerFile a las conexiones, tablas, vistas y stored procedures de los DBC (Ryan Harris) * * *--------------------------------------------------------------------------------------------------- @@ -210,7 +212,8 @@ * 06/01/2015 Jim Nelson Mejora v1.19.39: Permitir configurar la barra de progreso para que solamente aparezca cuando se procesan múltiples archivos y no cuando se procesa solo 1 (Agregado en v1.19.40) * 06/01/2015 Mike Potjer Reporte bug db2: [Error 12, Variable "TCOUTPUTFILE" is not found] cuando DBF_Conversion_Support=4 y el archivo de salida es igual al generado (Agregado en v1.19.40) * 13/01/2015 Ryan Harris Reporte bug vcx/scx v1.19.40: Detección errónea de estructuras PROCEDURE/ENDPROC cuando se usan como parámetros LPARAMETERS en línea aparte (Arreglado en v1.19.41) -* 24/01/2015 Ryan Harris Mejora db2 v1.19.41: Permitir ordenar los campos de vistas y tablas alfabéticamente y mantener en una lista aparte el orden real, para facilitar el diff y el merge +* 24/01/2015 Ryan Harris Mejora dc2 v1.19.41: Permitir ordenar los campos de vistas y tablas alfabéticamente y mantener en una lista aparte el orden real, para facilitar el diff y el merge (Agregado en v1.19.42) +* 24/01/2015 Ryan Harris Mejora dc2 v1.19.41: Aplicar ClassPerFile a las conexiones, tablas, vistas y stored procedures de los DBC (Agregado en v1.19.42) * 22/01/2015 Tuvia Vinitsky Bug Fix v1.19.41: Compatibilidad con SourceSafe rota porque se genera un error al realizar la consulta para soporte de archivo (Arreglado en v1.19.42) * 25/02/2015 Lutz Scheffler Reporte de Bug scx/vcx v1.19.41: Procesar solo un nivel de text/endtext, ya que no se admiten más niveles (Arreglado en v1.19.42) * 25/02/2015 Lutz Scheffler Mejora v1.19.41: Hacer algunos mensajes de error más descriptivos (Agregado en v1.19.42) From 2cde52a15c7acfb9afac714dd154f071ab88721e Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 22 Mar 2015 02:21:38 +0100 Subject: [PATCH 064/123] EXE --- foxbin2prg.exe | Bin 524011 -> 550361 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index b37b7d24718aaf77a3a084d3180bb3dca2813e79..fb785e3c04462fbd6c294ee6efc8a986754b7e93 100644 GIT binary patch delta 60901 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 Date: Sun, 22 Mar 2015 20:16:15 +0100 Subject: [PATCH 065/123] - New default FoxBin2Prg App icon and background image, configurable with a new CFG "BackgroundImage" setting --- FoxBin2PRGVersionFile.txt | 2 ++ foxbin2prg.exe | Bin 550361 -> 556997 bytes foxbin2prg.ico | Bin 0 -> 4286 bytes foxbin2prg.jpg | Bin 0 -> 11298 bytes foxbin2prg.pj2 | 3 ++ foxbin2prg.pjt | Bin 713965 -> 744222 bytes foxbin2prg.pjx | Bin 9513 -> 9903 bytes foxbin2prg.prg | 65 +++++++++++++++++++++++++++++++++----- 8 files changed, 62 insertions(+), 8 deletions(-) create mode 100644 foxbin2prg.ico create mode 100644 foxbin2prg.jpg diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 28e4e4c..eb1c747 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -39,6 +39,8 @@ Change History ------------------------------------------------------------- - Bug Fix: Fixed processing cancelation with Esc key - Feature: Sort table/view fields alphabetically to facilitate diffing and merging, while maintaining a list with the original field order for correct DBC regeneration (Ryan Harris) - Feature: Apply ClassPerFile to DBC connections, tables, views and SPs (Ryan Harris) +- Bug Fix: Views now save/restore their Path and RecordCount properties +- Feature: New default FoxBin2Prg App icon and background image, configurable with a new CFG "BackgroundImage" setting 2015/01/18 v1.19.41 - Bug Fix db2: Erroneous detection of Invalid Table when size is less than 328 bytes. Lower limit was changed to 65 bytes. diff --git a/foxbin2prg.exe b/foxbin2prg.exe index fb785e3c04462fbd6c294ee6efc8a986754b7e93..0984974fdc0eecfb1c0c107faa99c2261eafad51 100644 GIT binary patch delta 42682 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 delta 29578 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 t-rG?e4-G%-kJzP=*B21ru1 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 diff --git a/foxbin2prg.ico b/foxbin2prg.ico new file mode 100644 index 0000000000000000000000000000000000000000..b2c8b7d8f62e33c08c00e3b4641db08a14ae1936 GIT binary patch literal 4286 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 literal 0 HcmV?d00001 diff --git a/foxbin2prg.jpg b/foxbin2prg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..62f369f0bc741c4d783dcf42dfd0e6e5d1098165 GIT binary patch literal 11298 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 literal 0 HcmV?d00001 diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2 index 410e913..ffaa5f7 100644 --- a/foxbin2prg.pj2 +++ b/foxbin2prg.pj2 @@ -51,6 +51,8 @@ loProject = _VFP.Projects('foxbin2prg.pjx') WITH loProject.FILES .ADD('config\config.fpw') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="0" ID="0" ObjRev="0" /> + .ADD('foxbin2prg.ico') && *< FileMetadata: Type="x" Cpid="0" Timestamp="0" ID="0" ObjRev="0" /> + .ADD('foxbin2prg.jpg') && *< FileMetadata: Type="x" Cpid="1252" Timestamp="0" ID="0" ObjRev="0" /> .ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" /> .ADD('props_all.txt') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="0" ID="0" ObjRev="0" /> .ADD('props_checkbox.txt') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="0" ID="0" ObjRev="0" /> @@ -153,6 +155,7 @@ ENDWITH WITH loProject * .SetMain(lcCurdir + 'foxbin2prg.prg') + .Icon = lcCurdir + 'foxbin2prg.ico' .Debug = .T. .Encrypted = .F. *<.CmntStyle = 1 /> diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index f70ac2bca8f81de804889cfe616aefea76a9f9a3..4b6ebc8d284fd327c0d7ac252060885cf0d7e0b3 100644 GIT binary patch delta 64823 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

}i?uqWmv%K7eEhJ8+qQ`O% z#06O2qOkxy@h@oqbqXP zLqnKHZlx{yPqtLJ65NpcAWpNjgR8<-3FNTG+zjiL*5l|S#AFiO9*&RTfhMmZ)8Q^~FLZjOA$f2Qcm{fU zlp*tAz4W&W{j_Ze_n-<7r^?spGXt>LNYci5J}ZQ--%v}vZS zf_uV4(fQL&*$oeei_mF)_JOnE>(Enkxr+gw0k1D6>yd3@=UHkz1!0X@zt4-;*&Xg6rAmvSX8u~A`ci{Kny6a6b zHktAf{5jkd{XE-Q*nbkkNx*o@lnWS6!M(SelKQkMS631_17C~2hph*E4&H?Rfvq2W z9!}yB!`s=0z`wu>eVlD1{5yQ-Yo-i;)0BO14eG@VbieBX!!_fUsnz9pq41Nf` z;~P`{1Mh}UqN|-I(UmFxmoW4PE__c#t1R+5-0F-e>(84~2R;FRg1+y9DT84BUYlpN z{>_wWaHK6V8@+@F8E3&U@IL)e<6ovc0#}9`qfbU!vJUP9r?PlGBHohk{1~pmun?GC z-I6A}p5`X_d2~{eC0*dV;2Y6DBwLaL&xV_(;Gb<4`~dtS`q?&?%z+QVCFmYBcr%XN zgJ+{N+w=N3xCFi*-JAyi{fQX9!7vVp&9I~?%<7nwZ+?A>O`8#{QLL^bLVd>-BT8J^7>h~Zugck@8khG#9g3%(D24_)JVOBTR$;eqIx zd&p*ZKD-INd%q=b!As!J(Z9b&s(7)?D!9SxmW*Y~gxA7L&|BE9h1bKMpuh3+wAN@0 zFJq{|^I9VhS+Wv-7oLay?T95s@OilDe=XT{%n}bT5%STyeT|MeVab(nH8>qT=ANtoCClLc@ZIP~&R9|i-vIAL z=kk=*+i*6#6TR#&OKK*NLU_N{+!H?;-T)6nKkDW!G zS9;|7noPGa97CV!9|QhTnMPh#4VA z>N4EZTUM|lq%bK$#w0OLz`xXwkSfh1!LUiT#B4i5OwF>=zUm*XZ2#IS%FG%;f?ns2h{Lb^Ya0%QAJ;m@!qsB~1 z>D{)YAC2+Kjc`Nw4fG?`ys`uC0l$V$OZ3V)cof_q$t!O+^2(K0Fj&D>W3OyZ^UCe; zDnEu#0IRiEwqw`i{24le+XjxnpTcSA zw-$J%UNe#J;mXXz-pOap8;+!V{Tcn|<6fBnw}k62^UA2zq!PXsUV?t`b+4R(4SLHD z&`S<_rKCCK-wMOqz{wB1((FoN2q%2#m3vBfJ3E{WZ$`&|{d*;%hRsSMTd`{)~f@Je-fAG{1bfp3#HPo@0d!LSsV{xfe8$HNEk zW_15QhyeU6oQvMca{mKx1-j!?=u#t6Ho#TkEBN$o244Vs7On&5pnv17#RuTK;Z`*w z#g`l@>1i}WxIKDy!$?`=$FLMbA@FvyNO>M!3;%}BO^uY#;BD|Mbe*(FIScQAe?>of zQ=~++pktytzIjZfBrJ`Tt}U7K)4i6WU)mQbi(84r(VN=)BW3vyk@9_OB1~_10Nt56 zyMIg@vJb-?CUPlJQF1pt1HOQMCM8Nz+A@cS=huspZ#qQDdvJStyP}R!a(fT_w_{*| zrEiohVfzFg5AQ?2#C8&%0G~iN8xSR5!*{^r&?7RV{Bj<{bPThY_?=;M+EXjx9>b#K z2wQV_4(uHsB_6i+uUJ4hXZ@iwHc;Uz4Yi^3-`vFlh zA6^ANfqs6hKT1|$*nr`yu~E|N<|x?$?}F>hAco8?`(4e*2hT!}&W)0h@Eh=4bV**6 zWW&X9)GQ)5J4)_@KY=?uNbb#vlBeJjxaT8L@=88A0H1}wM@RXYoi(xF1}5XO#FiKF7;yI*Lrfa14E7Zwqw&mI`v;w$4I;)W_H^as7Z1f7f!SBPb zpx0-+)xHH_u4|Et{%K{8D zFib!n9Bj*Z_!0Og^o8qeshUCR;lxq4tQu#_DEK@0FuKaEw(Nj^f;*xckGJJz_z(CS z^nq+!K7i{dGfP6Z;)J4lSFSC<{_((?8MX|%O4;UloWz?OndwoHJH6h=ez;X_;Y zd~8d_9@GJN&!@K3`@)vCuu+e*ZS*$IciIc40ZPx=@*;+zcxdp0EzkXGOLR{< zCRqNo<*o=v?toXo%h4bC9EN2Ahohq%d7L|WKY`zb-$8#C=g4XJ2)rkr(;pt&i0#Fc ztv&}u_f2sm6RzjSkPBRB?8pKPz2NtoIMS!3Bgf#|;5*Q}+Bj0PH#HnSh5op$BVFNn za7;VCX4u}5f$$P|?$wSIW;l`q?}ZPeAL!-CPWTwS2fe$$BWGa0G+;2e#*xhR3mn!yVxv==0f*ybJr`nmLX+N%-VSic$d@Xv@YmQtCzXgAW?)SDM+3+zq@*PJO9(H629NCC^gKqVyBOmmq z{2O2x52PP+#2LWA1Alqk5&iV)_3$ll;x~@eIYR*OEOn0f%+KhY;Yz*obQ z(O%A*TMgoZ68u$DpPc42c?~=RuGGpW?XUL9r|>HHG`d+=pH$1F3BrTWzxMXYHSo9a zs(wCMKg1{gofx98U_=AXj_}DhaAWw?wLZCL6fqo3F9kn|o;}Vdsqjens+)cC#;rbi z2p$E0i@tucPnN=S;QP>b=lJA9cnMtX9-s7{;gc#u2n)_d*PQ9|OA3bd7zWPt$&+kX z!kgfC(EW0Kauxgnd?$Kq9(P&8`{D1b$H4ERV`@Z8 z2|O9@gl?J~Eq}uK@H6$I<(jLaWyA=^0r(!YzfIR@`4~f;=A25QN3k`(mg_n2H$9@| z$05{ zYOR>jaEZJjr}IOr5;^#8^rxJ@4@x9Q;HF=5?SRwuV&)RF;21xzBG}F8@IZ#n6&Sqt zMaYeuz1~Sby%|1*Ud732D!te)xZ%eU(wURX;q)2%;MdWyoI55_!{34zqnmPW@F5)C zn!W+OjPnG(1}v4}uhI25H|Rj*<6!?(;0;a`7O-=53{{IFr9USIC(w1+oFGfiXCb8q0r2gER{(l&7h&kF)40W#J zRH>aUZJ0KVNTbQeavXabmP)3{0I6CCLndY zQ~q$wCroIWPc-U5W9f`VvFJ$);Sp)Y%U)P@D7TyN0MHjH$ z)SC$@d=h3ob?P<(lfZ@C^75 z^qX|W(LU+6)v_~bEoCAAzLt6Xdl;_R5iKX^D6;5i&cKNgF>;EIVgwyU6g9hgY>c!@jFEM4Gk6^OH2uc; X8`R@pIO%aK)<%-=@^!eWR{rSOfvvbazIdf*_%$zf4=H9*cxdA`E zkz^v;S3eR$xTkmebaR{b28dTHysq%vs4u@ z5{t+^QH135BVLf%7o1Ex1W7^O!x3;999UU@fEJ3cL?G98WGku3jT2Y>s$(C-YE?6QAQJz zhHZEaC7gmE%V_X?gG+_y?-WXSY!i1^pgy6SJ8#h~o!nqe&++Elz4ceV=E}|2z8cNz zuSN^L#X`s{{JAWw`~Jb~63JXN2o`@01+ph$W>c zq;n9A)rG*Q*l(}mvW+3Teu6}nZIQ`BUxl;|A!N;?G8wV7L0_f|*9+WpI=@T!k~3LI z#TkWkc|qVy!T`=2@?H`mI3Jk*l8}bboi7O~oG-ljk`Nx?OD@>_$(`r3v%5Kx_`6V3 ziUrU5!o`<_;j!LCMr?v?ppej=5>mhqfdQ-z3(VXjBy;|7-5#tX03O~Wge!rV?@Q8Q zZJ->$1;N*QgfC#`4pq~Szbrgv#u2#rpm2wWzVBndA$V z1u-T(k5mS`U9fr5R(45bJ2viIF!s73OCE%XV!U}!h=c8TC=$hf+yuQv6d&Rs(Ijfn zPZkGpSx_O1@LP}ke9+Y>FYej zKLkC@B0eVxVPO??Kx1Kcr^y{mA!2`SmOdy%jN!OxdU>dLLE$Q(w4b;Qzs~d%8wNF- zZQh0gMw6})i@Sty@K!g1CFPBLBx*atpK5EJ2>WHBHx$>*G8_3JBpq@RoIi;?6hA4B%wyL>J$JLYdq6o>Oa_`t`B z;%NT7F9amv1o0mzdhr#$ke?*ZPuuN#PWs)K)z#C84}Jf%5x>LUf!GMEU7FNEV!y}- zE%pJu$?u%B&BC}5+Uqs6*B^(rL1F~=7Tiw1et>7`mm9oCzmnlM`c(jy6#S}#q4*VW zlLg11qRSVR_(a!CR2dUVL&mT;MGW#R3A9(X%W_VN34mGgIO?I0n2O5rV+xMaDw>|` z5fgxPvFE!4I*uR1&8cD%YS#;?V!3ZYAc{zJnQEw^{pApmCeDx^3OFbI2CLJ=e*F6Z z@J^f<%>4#0r-?(jcsP?LPUIeiv4c?qo`WX(l>+w<7H{-@Imlp#^3qYK3jYLT4iOij zJ$ZZx_VM&!T=-+p<5E#WRe@^Bp)d}6r-<`I7MX0pOr|tD&F`FOi0%!UQ^l3M z%>*w`6)oHY6zmV(Q<3qls)O+`SH>e%7twB+CRX^3)$9``7U_7Z+4~Ke{tz}@Z1MZS zkxl!|$ZpXni~jH?&A!uYFHO74$c{AA>^uGP-0V369XW3sIsKvEOtHoHS4TE&w^48f zl*|z0;4tR;?RMA~+F~O&&K;s=i}A2#mUy$@IuASVA&%_RM)tFQX`c2R+G?ZV3ur*7 zxL$L_T7IG@1$<${9I=GI#Rrbf5eM^GUSO#d*YG#`08}D;&I{hE6mOElyw6E3J}_sl zn8f4vjdR84ObtG^CAe(4L1?8|2hUcCBl*Yu^wU+MH>Y*^+J;hv?ec-BYS9lOs>K%m zVL!O7TCC(>_k-W6#dLnQ1qRoMgDp80$AVFek{S!fI15}^BL*c+xAa~Uj#~+4|O!69*W!2WFl{7DiJU$Ya8M#{` zkr|N#B4z4yQ^5ri85wUtvfbyufPG`|P>=`qvlBKsV3buQu&+=Ifyz&0SvTJ#hI9Jv zo5j7)^3fa|7li=0JzE-w8;@mq(m>7w(sHDUF}}otwVpMT^R#k}To7!DSd%LX9?Ow} zb+25>jnk_qNauaHi7kRx{nl$M;*k;+@@^jKs4z|vdViUe6ws@-A*#w6NbH8>YUG8KY zg#`+q^&sP@d+{yotCAALnVfAb{8S}{Kxwr!R}QCogA=nA-L6B`(rD&>@8ozm^sYQg zm`}FD;Yc|MBCS#)9K1rB%C}0;Z<#bQ4L3We{nUR}Np?YHVR6png5py}7mS6LYLK_l z5={6QE!iW$^DCv*;JaLkOU4}_DnAy^Ms@Zjr`|vHK1;lJ>M&~5z{G)cdSJ%8@&%Z= zK+4DQdtreT3Pmd<%kW{euaL1nIUPgj?(bLt$_#>#>z;0;343SqW$cWU}t~abHA}#8pb6+)0bidM6^rK+ZRCC zxI`MG&s`(MaL+YJ6HUCE3_G8ZhRIh+w#z8P>i@3{|BsXb6;fO+O)8A(8FD)MeTJNB zfk<42{Dqz&?{6RSIOmY>WJAv35IToE{?CW}lj*Qy3$6p{7bI`)5h%JK<-j|Kq#$&P z9={;<-dkEJo(J)qg70si3}N;1&UUFJ0p!gcaaD1BM#r+6AO-U=O`NQ1dMVTVoX z&mZGpLx?Ga|By3w|LFB+-iBMbcXmsPUh=7wz;O+bdA&4T?B;CaAoXo20QTU{MNqoT zaO|8Esd|!$=fAoTj|v5Jvo8){nT3*a0gIVysN*<2?zy-q~ z9c@<-Og}9TfSB{r6nBo~n@B}5TVP?QE=5DwP0}PteqKs#|CyMbo(k^&UOXq=L2L@y zj&kAJRDoZ16C6Qp1T`K4dMu}L$!6&kx-`rsxM*LEi!l{eBB$Ov^)}0uahp#!8Af|q zCT5(Ku|394j4LPDyU5`-S{p7-Xt>UrjNS-m%aV${f$k6O4JyhR)v(*FH?T6Zy*J#P zz3~Bo<4;S0Dvw;yG`SP_u~Q1BOO%_ZH>u3Y%FdmVTU0?^8u;QoMzh}fNh-m~vvZ3S z$TatUrnyu#xcdyvjl7$~WwZkAqZeur4WAjw>~5J_E@TOv7o`ktU zUC9)C6I1Mu?TUTGuGsE9iVdjP6KMn7;HTfDm!a}ADVV#-P;>o$+^NQ)fIB1QZ5Sc0 zh?2+i@N0}bL{I7`Hzw%=OXchUek%u|_le=qHCGxAuP>C-_$>tXUMU9nnh0(Wuj8=a z9lQ5$A-PtbWVRXuAyY2^uB(+7a@Xjcweoy{Z}c{na(=ZJbS#nYKpS7VPW~KB4RQp( z!VBiCm&fW08{}s=e!T}oT`y+~`~?9b-j^+~yh;8B?!QI$hFflshrr%uIn%??0JOqm zr~*6ztVsDZMa!aAKRZiiW;i^{ocg_#4Y?EWS5pZ9d9KfT) z`uPeu7{(u!+~JEhd5E|~wOs{=H^}~wvO#X=OH_zjCI{%REtO|*+^c%zGC7RrpL2)9 zH_D;3l3a{gZe1bA@N?W@OPlP^U8#SzLhjFb_7=_qheRF=lUK?G{6bGCzFoHPQ$3+$ zHLfEcu9SUzmU=OTb~Go#3-+y&lS4ziY$H)yLg-3@Ys)0`FxVIRDX{i-bc`BS$zv5` zESkOSjIn!H%fl_<#?5hHP_zf!u1^+=@A%rn|u>L$KFweMn|y` z@UHWAj({P)1@^9zEt@yXfuY{sy#}Fx4FZ1I2VolP|ApR0|8s?~akZR=CB*=`cCn9( z$=vM?Ccr^>#+wvFa4FL@W`V7t-mlycINVziKx{ErFM&3uzbV5$$M#B9k1L^+2kwN`cYB<~py7OK?$R+1Meei; znG{r3s*y0OE=BAk=z;E9WJ7EJs@ zj{mO;eE)|W7k`hdrMFvnqcV)#UQ!vFhMNhVC0&D}IF4CQpwYvwz8>nj@s-}K&QvP8J!kh1yp3|io=0v?08p*CR11)FhzgQ#L9od1@C z%wi?dl)}QNBD4paB4R~y))PwyVS#QFNjFYW%QLVjhecZ%sRVWZRwDXIj5LsvDkR-F zV|7s4W3n>rK}uORDB-~pC6TxBFldPqhyjY@|5k$e!GZyL(=$;c3Xjr;qe5dCuv7^P z)v&EpaE$w;<20g2qZx8HPtpe=MaL2)L_;L?j82^OgQy#nz0v_LVI?BzD)I7zL2Mx?Oz-h& z3YC3L)PKWS5d={;;_zNQR~ZCZYw%A=xiV0{ty~$z2gC}VPOp>3$C&4NAACGn+0We# zTc;>FV4jNU0yr{N*%$sk@0^=~_PH74^!VN}{9h$lu+a%>OjZ5MY04tbXOv{0REA^w ztZ4fLDrYEB@X^(ZFAOSF5@CIzG7PTxmlCu&$YkhaT$n@is3MxE))^l>ibXxs;K?E- z+Hp|ZN=UWy zGK9DkISHwXpTK>|WeH7o!Wz+1} zZOzsexOEPWlmCQ@KxvMxgef$NQuS z14p|h&Ec>I5QrFsxPrNgC#;&QJOuo|BtLypmD0%ZAMnQFqOYq~ZV_T4`O9h1F3y&Z z3y*-qCKC9lRvBACeRn!K=(|%ZLEU&dZU|V;5@OsU5sdR(y4cYjA0Db{q~|WhsXOQy zBf7~PZ5};i)NyM!!W06(RLZ_Ece*SZeHa-=x&s{Dmyw~S_pm6>Kx+{JH!s4q&zflR z^Iyzi=P_AOAQo*qOW>A7(?DPBd|G;tOK~{tAq8nhq=t6=FYr^MDU?6OwhZoGys;#* zHo|};Q+OCQ)b%!q52+~XVF&x-zwgX;NF*& zAl07~(h$+ycVOpMbgo}(P<+P>B;D~wV-0ChV~VPlSToYoTdT7h>g%m|65ddsk&!;g zK-;E}?h+Sjh?u4Lx4V)iNB77VjX=YaCD!`Z=mg5b4rJIWN%wRYE^2yCRclpwLtAq- ztvM%ad~O9stxMwnf^koY=yrp74>%YVh4(lfa!YooMnA?cpii!tpZ zc%e~oEBISd+q<;9wYj!_fumE5US_Bao0W7|;%2u|37Pn}IA*piudiO%+)&@p*1{ON zVlr&ANcR*11Dlk<_P@n1tE#nnVPQj!z3EOc!?u`oTQ6xl>PJQG5^Fwg@$6nas~ zPzj^K_F}y{!NJOQ1?g@g@I;dmHRW$fom1OV&9t?wp{{OTRrO-~$X$ZB_sHhvzuO_m zy0M^PL2bR0BLnS2#THqd=QwjH>C~#`dK}x9|JWTB`Rzt`xEAWE!pX)qk95!K)$RE; zbyi15{mseZQiN4uAlmH%cj(fI{fJD(i07H;F(7)CGF;uN#B3g7^3y+SRi=x4yWJ&t zW)*sX+!`3SRJ34BmU)!BU`>K45ne1*LZIXyiVBn7RNN;~*MMW;&C9z2!DyIWTmcD9 zDc+*|yIuec+n{*HI`$0I?Bh|P{kW>z%^oqVv|r3jGzI!M{;4Yv3-_#5Gq zC(!Qn1j=~(Z508#j6<;>L-!y;$7oyJY{ATJqJnr@Rt zd(<9|jh7=}R;I~A3LxFy1kyJsA%iY))C?8q@zDxMcb>~i;_%T7s^n;6`2N&0%O>4p zT*|8HB~`5p`z+Ia7*PtgJ{YvNIi!19FBUo0IxBp)L2=7+wdH-dP@-0AMRVfy?dv=0GgZuvL-nnFPMLMG5;W>B`#bthvh?aWmI~Mu>6gjmxkV zlkWUp@=<~c>$1L{TAzkHsGVm1NPz8}`f%8lT4~$?gs%+SF@l)Cb03xg}~P-6KL_;AB1@Z5zDPF&cgWWdH(OlDYgzoJ3O8O0A? zI-`V5Gm)c5XpF)hqA0~ENhHRxO{B|>%%EQw*v+OfDGxFu8*d2Z)mrOn&{91md!6EQ}!qlWso(8@DJyGw9IMSPQ+OZP%r| z{M>>ZyC%_xNT_C@*~EuPQ0vfe9^ecOq?eb_DjMpEe=sa989`!Cs-hxU$LhPzQ*ncq zUzC7ULs4W@lxG~)m^ZAkXjo%3F_ox27@(uitQg-geXG)MsF@^3)>RpeHS93o*A5#M z_qM~{;QgrR$34!*=^Ui)Qep-$ty2gpU^+@m?Etd}h;nKi#(Aj+zl6gA!G*$i76=}vZCJ9@$b zWff)lg}5;{nro~OEHJQybT7aQ{M|}mRnICP>7X{&n1slr$hd)V_}77EOp>FGTB%K{ zYNSpzThHu323`|H)-L-j)v#!joLv4c^UH=JR+8?exZZXvVW>}zxWj+TI>$P{s;#bd zN>yE(BV^!$$*{3X&OfRI&+BCx{_A>hgIQO#Ji87zP<9*Xg2}LTknS4^U_Jdt{qK!| z(t6Dg?*!d@UI~&Gk?tA-FP&Ec%Kvwcc@51=s_Zc!md>!XknSY}embuNPygQ;=hrv3 zwH8*j*mwI*FvE5g>0U|T<;Ro=7c=_bc6V=!dU-3`NV*sGQcgA9X)=x7d4+wK^}ke3 zt#wbehV8~H8gykG`?wMm>NITilC6*#Ho6m{22M1VCV2F5B^5hsSVkH-uxHlW$&=%ZQgO*~_Be4|LZrdL88)UN61aP>5*qs#h4Wh`*Vi_+S>qC5 z?_OmT<#Oqpx34(RI%*rQ=3n{-{-)C94ik<7p1iV0b6Bv$&6rKOyp7&DH@rw(!;J4(2&mUw!rQN&_CfVB1{IE;k%KMw(lZvvNfsVzrPH2=Y44aKeZBGU-u`s08^%41 z);q!;CVDR*o8A!%Miq$0TL8s0pCi+HW|KWsQt2|AV&6hl$+QPXCc6ekHo;qOD`{LQ zTzp#@#TVM+A^FaDhzFMo%imE_jaUdi@2CA+8DbBG1eLIJB05@l7Dmq^FCP{0#bt{g zn$dG-JK-e(5hAHGb0Brwk0*UmI+wx@B< z?0J*-7dX6d=KZu1KqE+-%=EC&cn*PJH@t%f&-EH)!*S&U^J_FG9w<7b?S6O1dYxaCb2O^RDQ}l+0j5 zsa&`kg$#~R`98W8f7)Q9Fg0e_L+Sm zIk(n*kQs)0!P*a%kdc4R$T*&_Sl(z?PIg>RVSDl2Sp3gb+a5f17Vm*CxA5Qz7M(Pg zIf3levo2(8#M@mkmz%>=7h0RGhRnTBPJ3~65;2}mkVO+i=neW481cgU^9nIi?@%v& zhl)4KAv4$HHz9{~XE5Ehn?$t{Dn@Mi=%KkGJ2Ro$!PS|xT$7DUqfm1^%9o!fCXt;0FAnP@cze& zPmiyypqKZVW*dSI9Uh|?@iO`i{+}qxe)vR~@hS)(r?34UJ_w6fR6_#H&e$vUh1pdj zjQwIX3>N3&w!`yAtg8K>qTtgQTRuStVZbPpxtD7OOK-%0ZrZ0xjNz>7*MF*na{PV~ zN<1-)x$85$#rT|l@-rn}g!~iA1TI9s^@OsDyG(?3jy)us@wcL}GPr+_b~qJ!EPml&WuL)Ifu5HQ z%wh)Klj;+gr6+|fFe|xi#a#lk(D0iQG5T`h*Mol@e)V$f7>sbQGyK}K+eROq?GIeT zuMNB{_b+$bD(<%bEC~BIHrqrtHrt!oX8X(kWwUK)B#p>w&U4dBc=D{0(>pk;;~qO( z@QYUZy1)<0|L^0nb)tAhrCt9m)pm$u=ro8S`h zWd@4gAaX>7Gi)14_YEut>|)FR%Q||6fNM#2H46ck{m*@Kxd?DG>8@iDU>C39zZBFN z@nt>X1T$=x(I7mSHP(kqdVhj(qVf0Uf`bXG&;e!G){^ck|2*LQ_jvyu7xXgiaypdE zrzvB1C;!WybTDD6Z3tH^o1;EId-vGL5zeiI&hqu)9cN6YuMdn$)iTnxXtXzP6uS0W{Luj`_Q@_g)Wim0U4o%WLba1}e@ zob)P<1)>j3W2lHn2@Tg_%6$5IftOjJke=S-5k5Ypj<4NAI_iVsvkmMb5}v$b;LWJi zYnCYt7MM*w@Gf3)i8IEC`i>LrPYU3j^h=)&%`!}MP+d#FE+W+XlGtSHMYD$gq}D~!)~35(~G?(9CLvlrIZ z)fhn~T&FS%3fOsTm4jJJe138&i>y;hcRMND%flgGlVAH^7fxe^anp_WvKcAfw7|Ls_9R>->CtJ==oj z+E%jw$A1_`t+|>ZK)!&7-2+YIz&6J8kAe9K$#ErkoSs=WJuW#rvnVG& zC$l0K6$Fn!98g^HTGB6ECx zQC=~e9BfL0?K!5g`p$8tInQ~e%y2!^Ntgien3_H1HS~#-Z1`SP+wlR?#hQ9O#-@MM)C4XMBFt(dwsoUfjfU@{RCm9Yww6eI z)MP>PcP*nXpkiUse0bNaPQYu1p>FD6eDbiwO}!f*3HrfJ&B3QMQ{B}`ToJ5tSHrOH z?siuPa3%1DyZSGTjc@Q!-^CZI%=1)}xpKJ0Q;iR+z?J1A50W`0x2z%`-)d8cPk~2W zupOWkO@^bM>V9qt-0h_fR}Wyz&i7Xn_~W^HT%7t(PxD$sa>~91?i;R# zL;7%aHn!oe;p!@EL*NKC5!;YGLS2S!*gZlG#Ws92LXE{XTpXe1VjFTt8bh*tq5JsrH;lnY#5~mm*!y`ftWaHq&DmOLG-pqt8jj8RtWeFv=JYEYLcGfKoMSL^&1O zmrQQKJN=QZ3u{{a)t!*@~X^ zvbGij8MD-YkbNe62oYaJ>qV++*rQo3E!LX6+B&N@+%roJ3g+Axfd|Q6SXIBkT7ZAr zsuoz!xWS=WY6uqsKg?3Y`S(4*ZMGV2!Dpxpei~U|ZLO@RYQ`^o_3LakAl%KHW%-i2 z%JPK`SL8M~H#E0YW@gj3Lfs3kv(+eWC~QV9=EFXWG?3K6%UG6M1Ru=CxhI1-M~&g0 zfcQB$4<^BcIch)tYYWulw|0#`D-?{;uK~O-JUK^IruPeANHMy=r$ShfFo;Uy1E6uP zs^AMzH&m+q)h|OGSxwHYYv5Cw6&voz+ULmP_lHB$T%1G;pmeU)DXW>@vNYU)HGz_ zLl|w1GZJ7gTs_HiJ#Xy2x7H)>_qkp%OOEQv-!*H(o;%LHuhsz+>}J zOJ{d5QoIJ(P`?x_tZiPo2|k~v1_#``on@J+0vF-Em&&ZnNl8zEXSEu`S3eCys?~Tt z{27>2t@dlb@QA3jsIBGL;F++QuVLTW;Vk-0M+FBOA^g67mQT_ei zVA(2RHybMRb8dJO?wzFuj*UM^vpC{T>W#~1m3T3%c0v8EZ!@$=^6P6`quybVhn*o)z8b;zKL+22WZM$tClo|orH}G)M5PGAK~={SjCFd@Z$nCiXYbr zUJKQD<+ERnQjpSs^&U9`a~7(x!J~h3)JqTAs<869w%VGiXU-G22lF-c0?WrcUWeza zep;%H!GUD+J8EF~{EH0qA@%f9U0v;ps%9MdhURI71wY~q;#$=&=sSF0JMD0HL!Ifv zK!$F3icnaqrtm5FaD1&AJZ-ucBl9BVIK9got<|+vbO0J#S^`*($*GUG^mDN6rO`qx zL%WR2>R9NkRR?KDjVzG_5vV(XOThhckh@5Y3fi7Pi-;&(b+Z+3*kgsbYP6n7g!V;h zbntZpST?GZk!@UctgD^ZJqUI!Qe(oW;d|U^am}7j14}kL4xdO$`A!YUn>m!xpzSeu zlv(Ne#SiOUvd~)J7Lm?yW@25^*t(n@sN{|{kg%gcweU;ELgQjJVE8(QM0?#ZkIHNG zQyM*^>dIt1aDLEhnT6KYg$*?=M%IRG*t1v-=3f{OA1_8-%$*3`i%}QSCP8qW8p~f_ z0GV}aV0%*`W8sCXOLJ{wWez@=S5GhYw`{ZL_>+aTH8s}y%zEl9w4wl3oQs)-Ek&%P zo821VDvj945{7jrwZ_vBmBoh4HS#_tb!$t@WR};n1lCW7pX<~pZTEDR zg9GVxTn$n$%wcda%w3}TD><~nleI8?3C@7M^{}sA4KU{x<>ch%;p^>_R>GDg*y0;k z!B)&r^NX?zCgijs{{4<51G09^C+S1C#{@)iFB3@~Q)(6=GK5rtdyE-Y?DVc-4` zwl}I_@&q(Zai7q16t8{`ha0hjT93ooMwIc}uOPGu%T#^`8BJ<@@XOyD3|%Yi|1(9I zScOM_VF0aA*z!9EyPMQ#;ks^oNoJE8F5GN068_Ol)vYbVIGz@EU>Y9jyC5J+ytUCzqkFtt^U7<7IN<>ZF{ zX}F*s{R=wnPLE|+cS523`r>*kHQW_B@Ib4YGHGqDBb%CZ=NkCfc!t)DHIL2JFD5zo zGdL}?xw&fj>0*YBB!DlZjnwwcWiZ;8C7c#GCT2c^{n;8>nO%@sUQXYvT0%Fbx#d4C zWcl9qd^R79*^*z6@4dohA)yI&wPCwoZ-!%S*e_YFpe$8mg7&wvqIUNIpPVr!&8VeN zyHpK{Ke&`-``I}cXHCT4if~M!{VP~5E{5SIEkNs7$zbZ8t6Fea_$mfF`P`8U--xud?cJAK2Bhbftds}8;OGDYEw1$#Wm zi62mu7d3aS&AH23>D&7&v&-tvGPDcjM+VB(6mgAnX=2C)5jxR>&pr-wqF~N|0Qfo z{3w+_PG^UEI+bDI?FDN1um|kfGHGp~SHu@v7`Z~XmX*Z?xy=Rw-)LbV42$aR4;jmG z8~UU_r47IirL^=80vZGwzwE#r(sI?(-V#U&@C7=I0KEhB+Lw0+F|5X_FszGT2*a5S z9G#0V7?@xj7=yXv{UbG@lrW?Z%TeJB%eo>mfg#1%ME=0`x}3N&b>lSc&9(4L%{YLJbIA9mAM;(XB;U!xcH!rM1;oTB@@@ z9A2SD=N(UE6sp~u$9tY152UDYbbBl9<}*LXzF%EEh-LNelkJ0Gzp!+GM7SJ8tiXLpFWnc%lljT}8;Cd-nj?D;ue zvl(dYlBj1&7r)RsE=ao6QDpKQXg~&h`W)z3sm2r**ooXJBjyiK?{=0Qt-U6u&oVt#^-hv8=URckhx0r&uy!rgpt@qy{AECdC9;IPdXQ53S z8O&O>4mYB!)qsTCD6*fE=;}Ke?9!69`wSG5{MIeBnExn``zbQkS#HXM4DKsL(4!RJ z-$^$MqsQ$yPBBkI${N*w>Rtmjgc@1<3d`(UX!NTT zpX4mmyr03W2ll-oz}U5_C2`Z66rJoO`{dsYcIkr`J~2>6b;5g}vVvnnzNFXz&Vtq7 zFu1QA;io8mpp&lZM+0Wu4xSO9<0{oMYQ*mpJIG1(Xg7oVa@%I3_!K7{zATf!T8&ZW zi6X@tT)l2!fPDpjM}nOYvz={J;PP_pSQMAc`OCq+1dS zoyd38@hFNP;>5?{tH>zaw|r+A6`e5~NE+$vo=1;G|3-xMN3~J< zPj{*#c>HOb@W-_fu1?SXhx)p^N*`i~!$|x9@PAZ|Nu*#Bf_QdAlgT~F0hEYg2U09p zA64UUjv83{96=f;>0vg$g0rG)Fzk2~4-xQ1wvVb2{Siqih8q-k`c8on4uIA(5`nKk zc}z`fr$_Ym*N|mk(*7E6sMfW5}Dq*$l>DH-mE+ zT##jla~X{BZfqj0AkU6)FdWa|!Xhj{rJsN>UIc(IA5#mX?aeD@I7UEErkt{u>XnbH zK0J3Xc>c<_L+5sNi2uDO$#{$x+iZ=IxR1EHx2R5cV%MLNEE3I)>-g>Kpc}v-pT2Cq=O{RpLyQ>b`HN^*&>@8Yj zpWw;dz3}5Fc&4@u%%7?|^^ZSQzZFDxj|_Zg9?Q7!vM?kPV@`T)Qbjza5uk5Ki#Fy;9+x@8Uio> zp{kZ$PNLn;)JxF$hx)x`j}w7mYkS}Ch0bnul(^g@+1+R`40P8lP<(?Lr7t_L`kD3b z6b;`z{plarT_1GgZ>Bwq2Wm$9eIUfF1#l&)5> z@QtQ<8f}IVZdl}7N)gX}N53MuY)CR|{b8>g(x1`~x@oI;{Lu-Ad_Oo-^rs|Q4L>+~gQ`W};iU=OK%;X{JIi!BQ@=P<7*MtIK0|xf z-%Y`{vF7AvO&PvG)?n>t#MjRm{9<)irDKHohb=ZP&H1o z=)1>hyEw6v>?M#oTg!yqSz0~ZGEqxldV`M=+6$|oXKM)}Cy$cYV0L9|H^IHra74Gv z(}HNh0{zBZ?GO)7PSB2me>8U2@QK=5xM7@@=4*)J>EwoCTmqj?)U2>8TZ#Xg-iRNlO=TLYtteLyLvtQY||o0PQT! z^(ZI%XqrMILNX=%#VBmqR9G`j3)fT1wC$oL#z}}FVte~y^$SyQM0t!s>?qOvOh)Np z!cCAeTbrh1;V1ZncqcUmgze=Lov9>eDjBM-KzWPjYGw$Zs>yKeOl@wcT}liV+lvmQ zDWe`mA2?h4frsy=XrVA}u6E1dez*f=FH$zvI-`B`=Rld34z`!1@xaQW%)(rr+if4f z!Yb{4%Md3ehL!DQhC${gCX@on^RyU8uMKxnjIeVhWScTVcImYr=V{$COrD7|?TcC1 zixG>o>71iI8P4(;Znn3_qQ6|H{UJcVxmqaa37Kr?mpL=bA$^TjmQvwFU<}zVbQIH~DbB2^&eSx0&l+vM+8guRSf8tDX5Zh6?C2Za{7Iw>r`Dov8&J9O}Y#WZwpDDqp(LiLZ60 z7CBRkovAu!YKb#d?@To~Q;m9UhxRIGX>wwkov9Wb72z!&2Cm2Xp1Vm)*KgRYJu63F z>7-ccOs#UJR$~e_ZonmD={?$61x@0T2eb}OIICWza}Q~uQjh;L>TzwP0D2Yb@|FNC zSpWG+Z6ZhKY&1;Rsr`tT9O%zv>NB6x#&TS}zWr%!p6Fp{_*JwzBrMXCp4YyS>E(kv z_*ow}Nw|h;#!p>V8K-U{p|{e0_y@&b@)MXMnU4o7cWkGbUL+eIZ7sr!H|51;csg62 ztB`WMLV%Aozws0$*mU@c04RJ#^O0Y9-46S~@>jHA`PlnT_z4Q%^nnvTj<7J|LkVoJ zXsPn~Pn;R~uOi_)pE==G6z=~8g&}H=7y!?_ss#uiAD7^rSG8o}>zmR+2uM*tz znieQzV&eJNw9x6-;wxkbjSM<|>d1IlI(u@t(IG>Br@6+@NnqTqSJsW^X%@b}t-uHs z_s&eUNib-?7S3OV@5JA)h4P>Hz!Lgh5(GEy*TVQ^!SLvQEt=mH5ARUAhZEqZ{aO(J z_8?FXXbG}DSf>5LS@DUGNe47{{>WgMaX{ zbfi?ohu4GqL2S*BjWCpcf7lGO4{9Ou@iwEoB9EH)+ARIsP!G zANaSH!U;|IgJFLh(w=~)4{LM5azxt#?;X+h^PQZ2&%0Wd5c>?jlRHk$9W^2>tBnU36FoQy&P7>caltz!+%3a6FGuJ z9Fh(p$H{3SRe$soZJo?*(Nj)nKTGB##9L_QQn{^sras|2Er@f!k~>VAxFh5helFJp zbtkpq{C*A|I;l;lxS!jKnJ5c?*pM!h_;8)VD=1krelkf4mr4$Blew!%wY*L6M%ta^ z7t(>!dvj%6mXOLf^Y3CSJGf@9ldl%`@oNQGcS_q6{-0?E>N~&JUXLK#<$Rl}X4Ib0|u zzrZNjd^5KLZj#NZ{de%Gs4m~|_g~zhOPD~xaa+!px z(FqjtFn6o*_bTHrQgQI4ml=P)+r#XE3c1_EoDG7fIb+zf?oHfN{9)`u)Fza;ir**h z6QiUiIg@-zc5;qSu3TzRcnjYAJ|3?3G!KN=Jk4csU8n%JiaT)}Py$qetp?d)l*5N_ z=ID1bcN~AbZ>g7gQ3AJ*JI+^0ol=LiRxXwINjv2xWuH_kN68ddinvt#KFoo)w>bmW zdYg+z(h9C3Sy+WP>e&&p)maIh&97i}tdb6tpK9H!*or0*wGYPmm@{EO7^=f2AM>yw z&myCvYAP~8iKzBqQ&Yv`68&E)dCQ$xi02P;KKSAJPGpRmRmImlAuNN?9)HRZ;VSI$ zGM66T2KQRb!^f9NOuko0KV=`z=q8kAE6Vo^vY~5CGq)2VCS9k5(s5M?Wns%YvF~@1 zRF2N5M%WQ-9t=;0n}fsG8iICkQNm&Qu)I&%r+BMdk;9bhr1K)b~}Wy0mE zrj^mEtBk7mIjgRs9dp^LH*&Bu*qlb|_77-7xoG`axZrN(_6Z$Qs)Q_IkH0wze)Tt( z6|zyGRd*mAhw9hi9G51n?kVTEtaTZe%wE;+#6h5~-T`k0mrWhU$hH2ZNJycTGl60=sw#G1$cr-4nKFqAxpdP5spih})};Vtde$WHt4!ehba zvSiw+%{bSignjZpxl`V$>{K|lLyl59Wp7g_ewX6l8ft<+fDwY@abt+NBy|Kw=Kxi} z!}vc9HJ(nio~cHM`miw%9MkQmAaf8*4mD2j(!FLL9V37GPs7}E@7gNk>VxtoEH4IHPPk`>x zxSl|&IgdXkz!$0J3K*JZ_DUo{Tgf4DE1An}B_%E&615e7T@`WoIYjaP(2{0O!tuB- z&AbM$dqxj7$HAn*<{jc8{`jkKaj<#AsAEW&!fz#!!d61?GY(-QZ6$k=$z1%<)pozk zaTu3Uwvvq=JrEomVy;O!CZv+b`_ud#Sb8pU@)FUysyz0|VRAp&i&!rdHU;?*Vc!v0 zFw~rkFJ`)Js5t@l4K>GWbA3{Yh~+o>!mmTkiTok_{jOo=$be$YQ&|3S@=yFwsfLqC zZeOaeK4X}xn4a-DA$V|2mLYsCrtdmNNDji+Ap9DpQ%?{w72z8YuEO-0 zFYz1U4uoUBLR$Q^*CS#RB9z1mPPoJ@q@JMfgdCuf_Dd zlZ5;O;b##BOs_pf$O8z|$mP?Rz73;)+Y#P}@Ee$Z8e@Pu!Uquk71OpKNjvH)A$S>; z48>qz?9WJuFkbs4(=eTm!M-C1e}r%=rWaty504ee7YJ{`^kxkFeTDGX2)~W#moWT? z2Ze-29lyc!>DM7o0}Y&jxdcmjV5>?$Z=#I!Xpu`$Mgc8Ba0EH z(VwlDz6&L7MVN+g-ox}^kt3@Ro`kR)1|Cf^N7f^Z7yC#SrbjCrxdmYwZCQ-z_F{jI z+<}OD5z&t6d4U}H1L2(rUyJD-C~5$1O!0Ta$mf`zhhe$(2%kfE6Q;*uaBc&_7ZGm4 zbn|jtX%SAuZoVJW*=z9(T0vz+xE0g&*KlMh!t)Wn>l*I=lyoQXF`fG#$G>Lg%$##3 zvBuH_C6*+J5c`@SLL#Xpl%P~CEox0sl%dp8P5r4Qs!~C$x0Ke>qST&fRis+6CM776 zRJCsFQumYl@9Xt=ec!)KGc#v-p68sLnd8%-1!a^G`FVaB{eZK0k>Legn#P51`4-(LPuhx{?sTZDEp@?{$j!N`Z3liC4! zujNvME-`y{DhrDf+Lm~JdetwM{$8}#Vv6nY7(Fd|I zI?kc7xDh@~j!tptUECIrACm|}p0u2_9REe0yT+l(I1O(gfBUgR@8ER&fINMz zL+{~DIFtM>Z7JS@=Vv&SNjs0Xd)WVTLCp;g{Y2q29*{s@O}mCa$H&P28y&iZzr>Zk z;udiS9f~h6<>0_W4&9@T$Cq&EVTUfC;YDD}WB|=#anmkhFHRv(JnzsI9A>irZw3!? z9I9M__0Iz;USRQEbSM;ez>moHxPq)b?tw!tvAV9Yitu`N8x}Jkv%TvCJRE)LEsVpwzsa1vb&zEe-xzedQ zX->uSfQtBQa>81tUc*6n204I>dfvwMa3Z-J*YjlJFx;NJV6#&{<7W6M`TiECp5vA{ zV5?I@cJPMycvCc9K|cB~r#kp3bfIt`{QV`19Vg=8y-r1OVb3nyACD$)q2=L0_!7C8 zR)Al@)xUNs{9C8);Awa;dEE)8>Q|E%;P1&D&p8!`Kf@Eqj~QBhA5b_>p;0b>XTIpv ze*6QTPu~2qQ|Iw@{0liHB(0B<7qV=Q*Pz~aUWO7k@qG5#C3BQL$dc7+Xk$3x_t z0;k&GD)>41_+6(@eJO-d`17t)S06gH5f8$~?<_LfUw8;kBVTyNAP^}1ANKo)@44n8 zoFrU?TL-vQ$VD}Un2&a=b})CH?%+~l5UUTrPR@yP=_y`c1lC)Dv+9Lm6cYQ9VRaVjqJ9$w*6 z-I~%qtd+dGPh47pzr!`SL?n1OkHKDg%YNi3=Ur;`B4Y)Py5N$x(4{7|nCRe+WZw;^ zp$rOJDXcLKeOcbn`r33dxR9J&!_YPS7hX{Z zjx-q`A%7lis2yH`?~-@L8k&j^;9p}6pNbQBQVQ28ge4kknPlh@cF{eKBM(eA6j_(C z8m}S8y=rI@?uqLS=O)x+3?0Q2anM*px270+j_CI zJb6CXX~ZlxbcKRJcQ}JQYNa9n`t*djTAHET>4s+D0l4a?hSu<>jNSNae1Tl&prJk? zbVNArh@q#a3}xcd?lt^0ODEe<0WMGPS3*9M%MuD@8^BF`{N3Xx{)91@LSG90*I633 zc@jJo-z59r;|1b{c<N>24jv!|`SElnl3w#%z#y z7rEIco&)>v1af$$TTStz(*FN-@cS0Gq9}aC18Qz%qPESget0d8BwyU=)^L0To4ed< zyT`2+_(wdEJpBu|_TsB}4>|iww@%<&_z8Jlwp+P4ithOk`J-HxSOmucrTzag@a&RX z859QNhIy<{W|L>|Xgr1dq`<8QI0Zi?r~TsAb37H_zRBvS=utouHYmF1-jzK1u!~2r zO*!(xmts819PiPRNVW-j)88g|G&jSe!e%UyY`V)Gp#BDr2DYH@#|6y4XYKQ7B5p!= zd3wJ`GcI@(*pfwtPvm+Of5oFycpF}E)uX6FkIJ=@&g0m79$leLz?ZQ5zDF+FOq_?q z$SFlk{#vpAuTt0n()q5uB|P8`K0|Kt(4+OZ7*FCm;@p3FbPPYnP010obC`Q>t1mg7 zTR>dEPw-FVtS25_#|GW+1M-rm9zDVyTvEp5NZQnkty%wNDMW%qm#K)>9LwRE)GeRX26MhN*nq5I-URT+383ZiQ9bRC2H>qYdLbogL*u?Lz{>A13FV zG4&gc#*fI}EK~J5a^#Dfkvq~F;21oLJSmI$cLar43Y#hHrZvai@vr1RXl-yjuF2f{ z(Rch3JPg0^JxhQ#9FN2wl4EjBjlu8WZkJ32=b1W%=ix;1^jo}0yccgF`}=-1RVRvF zj6ySV!9#utF2U~KO(i|yUE)B7=tbnyPfcCGb@6|mnYw6LdVmw~6LO%RrHE(_Oz=mQ zEY%9Kl#Z9-F66FtE#=`ocm~gqBCdfm$n_E|<>N%$o%~)uUO;D#_3;jJ)nrSP@GP7_{`M6fgFnC}LoA<~j764-1h8}G-fwpu!}%hEl3 z9sfc;yU$XCuB@Iq94~%rDTqUweb^tzlFNP1yTs8rlAL$dQl(gy0Dev$!`X^Scme*@ z2VN@T9Z}duVRo^lqkmdDfY0MXa^y2hf8&4S)=pcyZCh`2W1FbU07NzdY;D4Aa9i@? zKwG&u0q+m8c_Fs`#3^_<`Q-+-T6E|13-*l7`Ht>qLBQrJRn+s0Nl&cTz(sk9QD zi;t1>xhwl0_!=J4$yUA2wj$zKI=B}(x`(Yc*uNf6NG^WG)*Rdq2Mo2fZj>!6p1q_V z{r^$$@|(8eDSW~Mw!dZT^O?2|;KMkV{Ony@zu|mbXFi|oU1BS|2Yq>c79-hSZfhKF zi0iDh750g((>MVqkX;$Jp5qaC!UkJqGHpdB&!UoD|tYZUAB(xwv~og z<3e)(uWV)FWB6@y%0XL&_&lC}+}6I6wt^EG?Qju!(J7t)=i@_U`?Rf&_$F>k{)#hD zUGZZdg80ZwrO}eB0{6XSViG_yg}G_jzusR!?3bUPCs^ zdKHEnhcft7@M?H%uhQ{ooJP(I@ygYU)q%^0dX?PRtG0L}P9@*rD0d>R6vi|z#w-7L zuL63r{u@(h0>XxP71x_pfCrNEU-ha0r(@4BuVP2=JzsbSo<<%yj$hJ;BOmm*EwkBsczr7ub(OFFcr>SLD^da0&Jld-W!_MKE4wl{BL3B`>3m#!Yb>7aujJ zZN$y+hvY8;{j}9bVFiVo;1AA1Ht5fh3a-_JuMh6vr;)f;IE$S8My#K1<2byUJhzvh zst=%p#2LwcTEJP#kMSbhdO9D6<$Lj8NoF8x%#PMCvrhsaH7Iyk41gii6j2@W{dCp_*)vI3~xX zUpbbn&$zK0?{pdJ&!Ji>-F7w(9A@Y(j;y|*kI2IlRvBt~kmJAcrF#H{Mu#{O;?QU% z8{B=I^P{04j(lEX1A2@r+&8qDS+A4z-GZ6zXlA_?nDzSevo`ogavHPVC~^ndAZES0 znDx$Q*4qg`BR6M~dzo2pH~eq%!hJrEMl#FoK_PxW4`!BIsU?F4?#3*)FSFbuI0;u} zmK(<`*JKjeA3q{@VUqeXehoh)uVj+B6OYB6pLukbIpjb19lYFaYJ$l$j5*^x9Aud~ z>SK~Pmck(l6YH9)9?Fb`Ip9g0MShDpVFJF2YjbvTT}xBjZ~^Yo%2W%cXy4$fyvuv! zsZ7b9F=eZX>y0$khY3j-Q?8EqDfuGvhfPdClJHXI557<)424V}22i+0KGBHrKAOP- zPY<_rnejiQ6TKdOzrCd&7{B-8RJ?GArK{sCt?SIY!%N3Ak}@1O=)y*ZhcX<0&hUE% z@4&-Xa~BFm*W?&xK=|xt#{Vn|mnrO{FlURU*|ZyYKaOPh&11N|g%9CH`z;MFvNX9X zO8^HjT1GQE?vCXs2tOjPX7r2h#`?xRgKUjpv@5|5)_c{43`Xs2&Fs#ZQk>r2XX`1W zlP8YdjKXI__#fW1<%nnT;ec_ryz}TCaYuZZT#dmdqzBU}e1=?+!DScji9HN1)fh_} zCa{Qc7TI^u)-pT*4>`o(MA!TTr{HTou#LVrh^}`Yh2;CTDsYPOJ)DY9lB<-ZGr}wJ zDRK%u-{PL^cDTWKud2|q_3OjgaXf(hDIHHt5|70{k(bg>Or)Q=jn9%-&`-QhKk*y~ po&ax;p*NyXr#X`lay2>*XY%T-f!LklBA z6GI~-^T`WjB-o#5F)&;xWZrBk&B(}PC%D;0hKZ4x|0CmOM_EQjPN(0D3<|~;W~P%1 z+2tpHkXN1DFK5cNof&ASp^2G=@#Fw`=gorhj?A2Um6(9`8W@;^?foDxG?hw-@v>J40y?b%Y`wXmrI9&=Woc%F@E_ETAPVH=2A~EIP%t(&vILvU#ir_# ziENCqA;cIXGb01AS|9-qBB)Uyv3W3K6f6ym3_%hGlO3gGCiAi>v04M=GA9eN3iG09 ZpUlW5GWijU_+(x#9!9sxTx=?gQULMOS#7FSwlp@~{D$>}2xp-k6N7@0k%`6Rg~IZaA4sb*&YavLZNUCSi-E!VDdT2K zX+}n-Pdb}zWSAJ4_bV}Nc9dmg] ; + [] ; + [] ; @@ -580,6 +577,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -677,6 +675,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION l_ClassPerFileCheck = .F. l_RedirectClassPerFileToMain = .F. l_NoTimestamps = .T. + c_BackgroundImage = '' l_ClearUniqueID = .T. l_ClearDBFLastUpdate = .T. l_OptimizeByFilestamp = .F. @@ -724,6 +723,10 @@ DEFINE CLASS c_foxbin2prg AS SESSION PROCEDURE INIT LPARAMETERS tcCFG_File, tcCancelWithEscKey + #IF .F. + LOCAL THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF + LOCAL lcSys16, lnPosProg, lc_Foxbin2prg_EXE, laValues(1,5) SET DELETED ON SET DATE YMD @@ -763,6 +766,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION THIS.c_Foxbin2prg_FullPath = SUBSTR( lcSys16, lnPosProg ) THIS.c_Foxbin2prg_ConfigFile = EVL( tcCFG_File, FORCEEXT( THIS.c_Foxbin2prg_FullPath, 'CFG' ) ) + THIS.c_BackgroundImage = ADDBS(JUSTPATH(THIS.c_Foxbin2prg_FullPath)) + 'foxbin2prg.jpg' THIS.c_CurDir = SYS(5) + CURDIR() lc_Foxbin2prg_EXE = FORCEEXT( THIS.c_Foxbin2prg_FullPath, 'EXE' ) THIS.c_FB2PRG_EXE_Version = 'v' + IIF( AGETFILEVERSION( laValues, lc_Foxbin2prg_EXE ) = 0, TRANSFORM(THIS.n_FB2PRG_Version), laValues(4) ) @@ -1182,6 +1186,15 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDPROC + PROCEDURE c_BackgroundImage_ACCESS + IF THIS.n_CFG_Actual = 0 OR ISNULL( THIS.o_Configuration( THIS.n_CFG_Actual ) ) + RETURN THIS.c_BackgroundImage + ELSE + RETURN NVL( THIS.o_Configuration( THIS.n_CFG_Actual ).c_BackgroundImage, THIS.c_BackgroundImage ) + ENDIF + ENDPROC + + PROCEDURE ChangeFileAttribute * Using Win32 Functions in Visual FoxPro * example=103 @@ -1422,7 +1435,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION PROCEDURE cargar_frm_avance IF VARTYPE(THIS.o_Frm_Avance) <> "O" THEN - THIS.o_Frm_Avance = CREATEOBJECT("frm_avance") + THIS.o_Frm_Avance = CREATEOBJECT("frm_avance", THIS) THIS.o_Frm_Avance.Show() ENDIF ENDPROC @@ -1748,6 +1761,13 @@ DEFINE CLASS c_foxbin2prg AS SESSION .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > DBC_Conversion_Support: ' + TRANSFORM(lo_CFG.DBC_Conversion_Support) ) ENDIF + CASE LEFT( laConfig(I), 16 ) == LOWER('BackgroundImage:') + lcValue = ALLTRIM( SUBSTR( laConfig(I), 17 ) ) + IF EMPTY(lcValue) OR FILE( lcValue ) THEN + lo_CFG.c_BackgroundImage = lcValue + .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > BackgroundImage: ' + TRANSFORM(lo_CFG.c_BackgroundImage) ) + ENDIF + ENDCASE ENDFOR @@ -1801,6 +1821,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION .writeLog( C_TAB + 'l_RedirectClassPerFileToMain: ' + TRANSFORM(.l_RedirectClassPerFileToMain) ) .writeLog( C_TAB + 'l_Debug: ' + TRANSFORM(.l_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 + 'l_DropNullCharsFromCode: ' + TRANSFORM(.l_DropNullCharsFromCode) ) .writeLog( C_TAB + 'l_ClearDBFLastUpdate: ' + TRANSFORM(.l_ClearDBFLastUpdate) ) @@ -2188,7 +2209,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION AND lcInputFile_Type == C_FILETYPE_DIRECTORY THEN *-- Se seleccionó un directorio y se puede elegir: Bin2Txt, Txt2Bin y Nada .writeLog( loLang.C_INTERACTIVE_DIRECTORY_SELECTION_LOC ) - loFrm_Interactive = CREATEOBJECT('frm_interactive') + loFrm_Interactive = CREATEOBJECT('frm_interactive', THIS) loFrm_Interactive.Show() READ EVENTS lnConversionOption = loFrm_Interactive.n_ConversionType @@ -4031,9 +4052,25 @@ DEFINE CLASS frm_avance AS FORM ENDPROC - PROCEDURE Init + PROCEDURE INIT + LPARAMETERS toFoxBin2Prg + + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' loLang = _SCREEN.o_FoxBin2Prg_Lang + + IF VARTYPE(toFoxBin2Prg) = "O" THEN + IF FILE( FORCEEXT( toFoxBin2Prg.c_Foxbin2prg_FullPath, 'ICO' ) ) THEN + THIS.Icon = FORCEEXT( toFoxBin2Prg.c_Foxbin2prg_FullPath, 'ICO' ) + ENDIF + IF FILE( toFoxBin2Prg.c_BackgroundImage ) THEN + CLEAR RESOURCES + THIS.Picture = toFoxBin2Prg.c_BackgroundImage + ENDIF + ENDIF + THIS.CAPTION = 'FoxBin2Prg ' + _SCREEN.c_FB2PRG_EXE_Version + ' > - ' + loLang.C_PROCESS_PROGRESS_LOC + ' (' + loLang.C_PRESS_ESC_TO_CANCEL + ')' THIS.nValue = 0 THIS.nValue2 = 0 @@ -4115,6 +4152,17 @@ DEFINE CLASS frm_interactive AS form Name = "cmd_None" + PROCEDURE INIT + LPARAMETERS toFoxBin2Prg + + IF VARTYPE(toFoxBin2Prg) = "O" THEN + IF FILE( FORCEEXT( toFoxBin2Prg.c_Foxbin2prg_FullPath, 'ICO' ) ) THEN + THIS.Icon = FORCEEXT( toFoxBin2Prg.c_Foxbin2prg_FullPath, 'ICO' ) + ENDIF + ENDIF + ENDPROC + + PROCEDURE do_selection THISFORM.Hide() CLEAR EVENTS @@ -20932,7 +20980,7 @@ DEFINE CLASS CL_DBF_INDEX AS CL_CUS_BASE TRY LOCAL X, lcText, loEx AS EXCEPTION lcText = '' - + FOR X = 1 TO ALEN(taTagInfo,1) IF TAG('', X) == taTagInfo(I,1) THEN EXIT @@ -24211,6 +24259,7 @@ DEFINE CLASS CL_CFG AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] #IF .F. @@ -24252,7 +24301,7 @@ DEFINE CLASS CL_CFG AS CUSTOM DBF_Conversion_Included = NULL DBF_Conversion_Excluded = NULL DBC_Conversion_Support = NULL - + c_BackgroundImage = NULL ENDDEFINE From 73ada5aaeb33016fa8740858c1082680866a5331 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Mon, 23 Mar 2015 20:23:08 +0100 Subject: [PATCH 066/123] =?UTF-8?q?-=20Bug=20Fix=20mnx:=20No=20se=20mantie?= =?UTF-8?q?ne=20el=20Pad=20vac=C3=ADo=20al=20regenerar=20el=20men=C3=BA=20?= =?UTF-8?q?cuando=20se=20define=20un=20menu=20con=20un=20Pad=20sin=20nombr?= =?UTF-8?q?e=20(Lutz=20Scheffler)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 3 ++- foxbin2prg.exe | Bin 556997 -> 557123 bytes foxbin2prg.prg | 21 ++++++++++++++++++--- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index eb1c747..3252d7e 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -39,8 +39,9 @@ Change History ------------------------------------------------------------- - Bug Fix: Fixed processing cancelation with Esc key - Feature: Sort table/view fields alphabetically to facilitate diffing and merging, while maintaining a list with the original field order for correct DBC regeneration (Ryan Harris) - Feature: Apply ClassPerFile to DBC connections, tables, views and SPs (Ryan Harris) -- Bug Fix: Views now save/restore their Path and RecordCount properties +- Bug Fix vw: Views now save/restore their Path and RecordCount properties - Feature: New default FoxBin2Prg App icon and background image, configurable with a new CFG "BackgroundImage" setting +- Bug Fix mnx: Empty Pad name is not kept when regenerating a menu defined with and empty Pad name (Lutz Scheffler) 2015/01/18 v1.19.41 - Bug Fix db2: Erroneous detection of Invalid Table when size is less than 328 bytes. Lower limit was changed to 65 bytes. diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 0984974fdc0eecfb1c0c107faa99c2261eafad51..ef342655d2a7076b0c86bd2cf8e51de176de9be2 100644 GIT binary patch delta 9964 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 delta 9689 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 db#qs0mUkt)SUo1Up-r9! * *--------------------------------------------------------------------------------------------------- @@ -214,18 +215,19 @@ * 13/01/2015 Ryan Harris Reporte bug vcx/scx v1.19.40: Detección errónea de estructuras PROCEDURE/ENDPROC cuando se usan como parámetros LPARAMETERS en línea aparte (Arreglado en v1.19.41) * 24/01/2015 Ryan Harris Mejora dc2 v1.19.41: Permitir ordenar los campos de vistas y tablas alfabéticamente y mantener en una lista aparte el orden real, para facilitar el diff y el merge (Agregado en v1.19.42) * 24/01/2015 Ryan Harris Mejora dc2 v1.19.41: Aplicar ClassPerFile a las conexiones, tablas, vistas y stored procedures de los DBC (Agregado en v1.19.42) -* 22/01/2015 Tuvia Vinitsky Bug Fix v1.19.41: Compatibilidad con SourceSafe rota porque se genera un error al realizar la consulta para soporte de archivo (Arreglado en v1.19.42) +* 22/01/2015 Tuvia Vinitsky Reporte bug v1.19.41: Compatibilidad con SourceSafe rota porque se genera un error al realizar la consulta para soporte de archivo (Arreglado en v1.19.42) * 25/02/2015 Lutz Scheffler Reporte de Bug scx/vcx v1.19.41: Procesar solo un nivel de text/endtext, ya que no se admiten más niveles (Arreglado en v1.19.42) * 25/02/2015 Lutz Scheffler Mejora v1.19.41: Hacer algunos mensajes de error más descriptivos (Agregado en v1.19.42) * 03/03/2015 Lutz Scheffler Mejora v1.19.41: Mejoras en la traducción al alemán (Agregado en v1.19.42) * 03/03/2015 Lutz Scheffler Mejora v1.19.41: Permitir definir el archivo de entrada con un path relativo (Agregado en v1.19.42) -* 03/03/2015 Lutz Scheffler Bug Fix scx v1.19.41: Agregada la generación del PJX/PJ2 cuando se indica "file.pjx", "*" (Agregado en v1.19.42) +* 03/03/2015 Lutz Scheffler Reporte bug scx v1.19.41: Agregada la generación del PJX/PJ2 cuando se indica "file.pjx", "*" (Agregado en v1.19.42) * 03/03/2015 Lutz Scheffler Mejora v1.19.41: Permitir proceso multi-proyecto (*.PJX, *.PJ2) cuando se especifica "file.pjx", "*" (Agregado en v1.19.42) * 05/03/2015 Lutz Scheffler Mejora v1.19.41: Cambiar clase de base de FoxBin2Prg de custom a session (Agregado en v1.19.42) * 05/03/2015 Lutz Scheffler Mejora v1.19.41: Permitir procesar los archivos de un proyecto sin convertir el PJX/2 (Agregado en v1.19.42) * 10/03/2015 Lutz Scheffler Mejora v1.19.41: Permitir configurar un CFG alternativo (Agregado en v1.19.42) * 10/03/2015 Lutz Scheffler Mejora v1.19.41: Crear un método API get_Target() para obtener información de los archivos procesados (Agregado en v1.19.42) * 10/03/2015 Lutz Scheffler Mejora v1.19.41: Permitir salida de archivos procesados a stdOut (Agregado en v1.19.42) +* 23/03/2015 Lutz Scheffler Reporte bug mnx v1.19.41: No se mantiene el Pad vacío al regenerar el menú cuando se define un menu con un Pad sin nombre (Arreglado en v1.19.42) * * *--------------------------------------------------------------------------------------------------- @@ -1962,6 +1964,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION PROCEDURE get_TextFileNames LPARAMETERS tcInputFile, taOutputFiles + *fdb* EXTERNAL ARRAY taOutputFiles LOCAL I, lnOutputFiles, lcExt, lnCodeLines, lcCode, laCodeLines(1), lnFileCount, laFiles(1), lcInputFile @@ -22531,7 +22534,8 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE * toConversor (v! IN ) Referencia al conversor para poder usar sus métodos *--------------------------------------------------------------------------------------------------- LPARAMETERS toObj AS COLLECTION, tnNivel, toConversor - LOCAL loReg, loEx AS EXCEPTION + + LOCAL loReg, lcTempName, loEx AS EXCEPTION STORE NULL TO loReg #IF .F. @@ -22542,6 +22546,17 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE WITH THIS AS CL_MENU OF 'FOXBIN2PRG.PRG' IF VARTYPE( toObj.oReg ) = 'O' loReg = toObj.oReg + + IF loReg.ObjType = C_OBJTYPE_MENUTYPE_OPTION + lcTempName = '_' + PADL( INT( VAL(loReg.itemnum) ), 9, '0') + + *-- Si el nombre es del tipo "_0000000001" y coincide con el itemNum + *-- que uso para darle un nombre temporal, lo vuelvo a quitar en el binario. + IF loReg.Name = lcTempName THEN + loReg.Name = '' + ENDIF + ENDIF + INSERT INTO TABLABIN FROM NAME loReg IF .l_Debug From bd3c75dc48d5efecf478ba260e0c03320ad13f92 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Tue, 24 Mar 2015 23:45:29 +0100 Subject: [PATCH 067/123] =?UTF-8?q?-=20Restablecimiento=20de=20SET=20NOTIF?= =?UTF-8?q?Y=20-=20Cambio=20de=20la=20codificaci=C3=B3n/decodificaci=C3=B3?= =?UTF-8?q?n=20de=20las=20propiedades=20del=20proyecto=20solo=20para=20CR?= =?UTF-8?q?=20y=20LF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 109 +++++++++++++++++++++++++++++++------------------ 1 file changed, 69 insertions(+), 40 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 11810ee..f5a483b 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -489,7 +489,7 @@ lnResp = loCnv.ejecutar( tc_InputFile, tcType, tcTextName, tlGenText, tcDontShow ADDPROPERTY(_SCREEN, 'ExitCode', lnResp) -SET COVERAGE TO +*SET COVERAGE TO IF _VFP.STARTMODE <> 4 && 4 = Visual FoxPro was started as a distributable .app or .exe file. STORE NULL TO loEx, loCnv @@ -739,7 +739,6 @@ DEFINE CLASS c_foxbin2prg AS SESSION SET TABLEPROMPT OFF SET POINT TO '.' SET SEPARATOR TO ',' - SET NOTIFY OFF tcCancelWithEscKey = EVL(tcCancelWithEscKey, '') IF NOT EMPTY(tcCancelWithEscKey) @@ -900,7 +899,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDFUNC - FUNCTION get_Target + FUNCTION get_Processed LPARAMETERS taTargets, tcFileMask EXTERNAL ARRAY taTargets @@ -2093,7 +2092,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION , tcBackupLevels, tcClearUniqueID, tcOptimizeByFilestamp, tcCFG_File TRY - LOCAL I, lcPath, lnCodError, lcFileSpec, lcFile, laFiles(1,5), laDirInfo(1,5), lcInputFile_Type ; + LOCAL I, lcPath, lnCodError, lcFileSpec, lcFile, laFiles(1,5), laDirInfo(1,5), lcInputFile_Type, lc_OldSetNotify ; , lnFileCount, lcErrorInfo, lcErrorFile, lnPCount, laParams(1), lnConversionOption, lnErrorIcon ; , loEx AS EXCEPTION ; , loFSO AS Scripting.FileSystemObject ; @@ -2102,6 +2101,8 @@ DEFINE CLASS c_foxbin2prg AS SESSION , loWSH AS WScript.Shell WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + lc_OldSetNotify = SET("Notify") + SET NOTIFY OFF lnCodError = 0 loLang = _SCREEN.o_FoxBin2Prg_Lang loFSO = .o_FSO @@ -2576,6 +2577,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDCASE + SET NOTIFY &lc_OldSetNotify. STORE NULL TO loFSO, loWSH RELEASE tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDebug, tcDontShowProgress ; , toModulo, toEx, tlRelanzarError, tcOriginalFileName, tcRecompile, tcNoTimestamps ; @@ -4210,16 +4212,19 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -4299,7 +4304,6 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION SET TABLEPROMPT OFF SET BLOCKSIZE TO 0 SET EXACT ON - SET NOTIFY OFF IF NOT EMPTY( ON("ESCAPE") ) THEN SET ESCAPE ON ENDIF @@ -4625,6 +4629,18 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION + PROCEDURE decode_SpecialCodes_CR_LF + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * tcText (!@ IN ) Decodifica los caracteres ASCII 10 y 13 de {nCode} a CHR(nCode) + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcText + tcText = STRTRAN( STRTRAN( tcText, '{10}', CHR(10) ), '{13}', CHR(13) ) + RETURN tcText + ENDPROC + + + PROCEDURE desnormalizarAsignacion LPARAMETERS tcAsignacion LOCAL lcPropName, lcValor, lnCodError, lcExpNormalizada, lnPos, lcComentario @@ -4727,6 +4743,10 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION PROCEDURE encode_SpecialCodes_1_31 + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * tcText (!@ IN ) Decodifica los primeros 31 caracteres ASCII de CHR(nCode) a {nCode} + *--------------------------------------------------------------------------------------------------- LPARAMETERS tcText LOCAL I FOR I = 0 TO 31 @@ -4738,6 +4758,18 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION + PROCEDURE encode_SpecialCodes_CR_LF + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * tcText (!@ IN ) Codifica los caracteres ASCII 10 y 13 de CHR(nCode) a {nCode} + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcText + tcText = STRTRAN( STRTRAN( tcText, CHR(10), '{10}' ), CHR(13), '{13}' ) + RETURN tcText + ENDPROC + + + HIDDEN PROCEDURE Exception2Str LPARAMETERS toEx AS EXCEPTION LOCAL lcError @@ -4977,6 +5009,11 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION ENDPROC + PROCEDURE get_TextFileNames + LPARAMETERS tcInputFile + *fdb* + ENDPROC + PROCEDURE get_ValueFromNullTerminatedValue LPARAMETERS tcNullTerminatedValue @@ -4987,7 +5024,7 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION ELSE lcValue = CHRTRAN( LEFT( tcNullTerminatedValue, lnNullPos - 1 ), ['], ["] ) ENDIF - lcValue = THIS.encode_SpecialCodes_1_31(lcValue) + lcValue = THIS.encode_SpecialCodes_CR_LF(lcValue) RELEASE tcNullTerminatedValue, lnNullPos RETURN lcValue ENDPROC @@ -14181,7 +14218,7 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg PROCEDURE strExtract_CR LPARAMETERS tcText - tcText = THIS.decode_SpecialCodes_1_31( STREXTRACT( tcText, 'Comments=', CR_LF ) ) + tcText = THIS.decode_SpecialCodes_CR_LF( STREXTRACT( tcText, 'Comments=', CR_LF ) ) RETURN tcText ENDPROC @@ -15443,8 +15480,8 @@ DEFINE CLASS CL_PROJECT AS CL_COL_BASE + [] ; + [] ; + [] ; - + [] ; - + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -15504,29 +15541,25 @@ DEFINE CLASS CL_PROJECT AS CL_COL_BASE - PROCEDURE decode_SpecialCodes_1_31 + PROCEDURE decode_SpecialCodes_CR_LF *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) - * tcText (!@ IN ) Decodifica los primeros 31 caracteres ASCII de {nCode} a CHR(nCode) + * tcText (!@ IN ) Decodifica los caracteres ASCII 10 y 13 de {nCode} a CHR(nCode) *--------------------------------------------------------------------------------------------------- LPARAMETERS tcText - LOCAL I - FOR I = 0 TO 31 - tcText = STRTRAN( tcText, '{' + TRANSFORM(I) + '}', CHR(I) ) - ENDFOR - RELEASE I + tcText = STRTRAN( STRTRAN( tcText, '{10}', CHR(10) ), '{13}', CHR(13) ) RETURN tcText ENDPROC - PROCEDURE encode_SpecialCodes_1_31 + PROCEDURE encode_SpecialCodes_CR_LF + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * tcText (!@ IN ) Codifica los caracteres ASCII 10 y 13 de CHR(nCode) a {nCode} + *--------------------------------------------------------------------------------------------------- LPARAMETERS tcText - LOCAL I - FOR I = 0 TO 31 - tcText = STRTRAN( tcText, CHR(I), '{' + TRANSFORM(I) + '}' ) - ENDFOR - RELEASE I + tcText = STRTRAN( STRTRAN( tcText, CHR(10), '{10}' ), CHR(13), '{13}' ) RETURN tcText ENDPROC @@ -15555,7 +15588,7 @@ DEFINE CLASS CL_PROJECT AS CL_COL_BASE lcValue = GETWORDNUM(lcAsignacion, 2, '=') IF TYPE(lcValue) = "C" THEN - lcAsignacion = GETWORDNUM(lcAsignacion, 1, '=') + '= THIS.encode_SpecialCodes_1_31(' + lcValue + ')' + lcAsignacion = GETWORDNUM(lcAsignacion, 1, '=') + '= THIS.encode_SpecialCodes_CR_LF(' + lcValue + ')' ENDIF &lcAsignacion. @@ -15580,7 +15613,7 @@ DEFINE CLASS CL_PROJECT AS CL_COL_BASE ELSE lcValue = CHRTRAN( LEFT( lcStr, MIN(tnLen, lnNullPos - 1 ) ), ['], ["] ) ENDIF - lcValue = THIS.encode_SpecialCodes_1_31(lcValue) + lcValue = THIS.encode_SpecialCodes_CR_LF(lcValue) RETURN lcValue ENDPROC @@ -21242,8 +21275,8 @@ DEFINE CLASS CL_PROJ_SRV_HEAD AS CL_CUS_BASE + [] ; + [] ; + [] ; - + [] ; - + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -21267,29 +21300,25 @@ DEFINE CLASS CL_PROJ_SRV_HEAD AS CL_CUS_BASE - PROCEDURE decode_SpecialCodes_1_31 + PROCEDURE decode_SpecialCodes_CR_LF *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) - * tcText (!@ IN ) Decodifica los primeros 31 caracteres ASCII de {nCode} a CHR(nCode) + * tcText (!@ IN ) Decodifica los caracteres ASCII 10 y 13 de {nCode} a CHR(nCode) *--------------------------------------------------------------------------------------------------- LPARAMETERS tcText - LOCAL I - FOR I = 0 TO 31 - tcText = STRTRAN( tcText, '{' + TRANSFORM(I) + '}', CHR(I) ) - ENDFOR - RELEASE I + tcText = STRTRAN( STRTRAN( tcText, '{10}', CHR(10) ), '{13}', CHR(13) ) RETURN tcText ENDPROC - PROCEDURE encode_SpecialCodes_1_31 + PROCEDURE encode_SpecialCodes_CR_LF + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * tcText (!@ IN ) Codifica los caracteres ASCII 10 y 13 de CHR(nCode) a {nCode} + *--------------------------------------------------------------------------------------------------- LPARAMETERS tcText - LOCAL I - FOR I = 0 TO 31 - tcText = STRTRAN( tcText, CHR(I), '{' + TRANSFORM(I) + '}' ) - ENDFOR - RELEASE I + tcText = STRTRAN( STRTRAN( tcText, CHR(10), '{10}' ), CHR(13), '{13}' ) RETURN tcText ENDPROC @@ -21317,7 +21346,7 @@ DEFINE CLASS CL_PROJ_SRV_HEAD AS CL_CUS_BASE lcValue = GETWORDNUM(lcAsignacion, 2, '=') IF TYPE(lcValue) = "C" THEN - lcAsignacion = GETWORDNUM(lcAsignacion, 1, '=') + '= THIS.encode_SpecialCodes_1_31(' + GETWORDNUM(lcAsignacion, 2, '=') + ')' + lcAsignacion = GETWORDNUM(lcAsignacion, 1, '=') + '= THIS.encode_SpecialCodes_CR_LF(' + GETWORDNUM(lcAsignacion, 2, '=') + ')' ENDIF &lcAsignacion. From 49a1920ea9416fb7e30dec305cfc576a6203bd65 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Wed, 25 Mar 2015 00:05:31 +0100 Subject: [PATCH 068/123] EXE --- foxbin2prg.exe | Bin 557123 -> 572173 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index ef342655d2a7076b0c86bd2cf8e51de176de9be2..6acbb262c3136d3b37dacc5973228ebeb0eb60a9 100644 GIT binary patch delta 32370 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 Date: Thu, 26 Mar 2015 00:33:41 +0100 Subject: [PATCH 069/123] =?UTF-8?q?-=20Arregladas=20las=20estad=C3=ADstica?= =?UTF-8?q?s=20de=20procesamiento=20-=20Agregado=20un=20modo=20de=20"no-pr?= =?UTF-8?q?oceso"=20configurable=20con=20la=20propiedad=20l=5FProcessFiles?= =?UTF-8?q?=20-=20Agregadas=20algunas=20traducciones=20para=20los=20nuevos?= =?UTF-8?q?=20miembros=20del=20DBC/DB2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 1937 ++++++++++++++++++++++++++---------------------- 1 file changed, 1033 insertions(+), 904 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index f5a483b..93d0ae1 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -147,7 +147,7 @@ * 10/03/2015 FDBOZZO v1.19.42 Mejora: Agregado soporte de errOut e implementado en writeErrorLog * 10/03/2015 FDBOZZO v1.19.42 Mejora: Agregado soporte total de comodines *? en nombres de archivo para procesar múltiples archivos de la misma extensión * 10/03/2015 FDBOZZO v1.19.42 Mejora: Nuevo parámetro para permitir un CFG alternativo (Lutz Scheffler) -* 10/03/2015 FDBOZZO v1.19.42 Mejora: Nuevo método API get_Target() para obtener información de los archivos procesados (Lutz Scheffler) +* 10/03/2015 FDBOZZO v1.19.42 Mejora: Nuevo método API get_Processed() para obtener información de los archivos procesados (Lutz Scheffler) * 10/03/2015 FDBOZZO v1.19.42 Mejora: Nueva salida de archivos procesados a stdOut (Lutz Scheffler) * 10/03/2015 FDBOZZO v1.19.42 Bug Fix: Arreglada la cancelación del procesamiento con tecla Esc * 22/03/2015 FDBOZZO v1.19.42 Mejora: Permitir ordenar los campos de vistas y tablas alfabéticamente y mantener en una lista aparte el orden real, para facilitar el diff y el merge (Ryan Harris) @@ -225,7 +225,7 @@ * 05/03/2015 Lutz Scheffler Mejora v1.19.41: Cambiar clase de base de FoxBin2Prg de custom a session (Agregado en v1.19.42) * 05/03/2015 Lutz Scheffler Mejora v1.19.41: Permitir procesar los archivos de un proyecto sin convertir el PJX/2 (Agregado en v1.19.42) * 10/03/2015 Lutz Scheffler Mejora v1.19.41: Permitir configurar un CFG alternativo (Agregado en v1.19.42) -* 10/03/2015 Lutz Scheffler Mejora v1.19.41: Crear un método API get_Target() para obtener información de los archivos procesados (Agregado en v1.19.42) +* 10/03/2015 Lutz Scheffler Mejora v1.19.41: Crear un método API get_Processed() para obtener información de los archivos procesados (Agregado en v1.19.42) * 10/03/2015 Lutz Scheffler Mejora v1.19.41: Permitir salida de archivos procesados a stdOut (Agregado en v1.19.42) * 23/03/2015 Lutz Scheffler Reporte bug mnx v1.19.41: No se mantiene el Pad vacío al regenerar el menú cuando se define un menu con un Pad sin nombre (Arreglado en v1.19.42) * @@ -560,7 +560,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION + [] ; + [] ; + [] ; - + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -635,7 +635,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION + [] - DIMENSION a_ProcessedFiles(1, 5) + DIMENSION a_ProcessedFiles(1, 6) PROTECTED l_ConfigEvaluated, n_CFG_Actual, l_Main_CFG_Loaded, o_Configuration, l_CFG_CachedAccess *-- n_FB2PRG_Version = 1.19 @@ -670,6 +670,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION n_ForceWriteIfReadOnly = 0 l_AllowMultiConfig = .T. 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_Recompile = .T. @@ -817,27 +818,29 @@ DEFINE CLASS c_foxbin2prg AS SESSION PROCEDURE addProcessedFile *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) - * tcInputFile (v? IN ) Path del archivo (ej: 'C:\DESA\pruebas varias\lib.vcx') - * tcProcessed (v? IN ) Procesado ("P0"=Not Processed, "P1"=Processed, "P2"=Expanded) + * tcFile (v? IN ) Path del archivo (ej: 'C:\DESA\pruebas varias\lib.vcx') + * 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) - * tcReserved (v? IN ) Reservado + * tcExpanded (v? IN ) Tipo de archivo ("X0"=Normal file, "X1"=Expanded multipart file) *--------------------------------------------------------------------------------------------------- - LPARAMETERS tcInputFile, tcProcessed, tcHasErrors, tcSupported, tcReserved + LPARAMETERS tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded LOCAL llAdded - IF NOT EMPTY(tcInputFile) THEN + IF NOT EMPTY(tcFile) THEN WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' *-- Buscar si fue procesado antes - IF .n_ProcessedFiles = 0 OR ASCAN( .a_ProcessedFiles, tcInputFile, 1, 0, 1, 1+2+4 ) = 0 THEN + IF NOT .wasProcessed(tcFile) THEN .n_ProcessedFiles = .n_ProcessedFiles + 1 - DIMENSION .a_ProcessedFiles(.n_ProcessedFiles, 5) - .a_ProcessedFiles(.n_ProcessedFiles, 1) = tcInputFile - .a_ProcessedFiles(.n_ProcessedFiles, 2) = EVL(tcProcessed, '') - .a_ProcessedFiles(.n_ProcessedFiles, 3) = EVL(tcHasErrors, '') - .a_ProcessedFiles(.n_ProcessedFiles, 4) = EVL(tcSupported, '') - .a_ProcessedFiles(.n_ProcessedFiles, 5) = EVL(tcReserved, '') + DIMENSION .a_ProcessedFiles(.n_ProcessedFiles, 6) + .a_ProcessedFiles(.n_ProcessedFiles, 1) = tcFile + .a_ProcessedFiles(.n_ProcessedFiles, 2) = EVL(tcInOutType, '') + .a_ProcessedFiles(.n_ProcessedFiles, 3) = EVL(tcProcessed, '') + .a_ProcessedFiles(.n_ProcessedFiles, 4) = EVL(tcHasErrors, '') + .a_ProcessedFiles(.n_ProcessedFiles, 5) = EVL(tcSupported, '') + .a_ProcessedFiles(.n_ProcessedFiles, 6) = EVL(tcExpanded, '') llAdded = .T. ENDIF ENDWITH @@ -847,12 +850,22 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDPROC + PROCEDURE wasProcessed + LPARAMETERS tcFile + IF THIS.n_ProcessedFiles = 0 OR ASCAN( THIS.a_ProcessedFiles, tcFile, 1, 0, 1, 1+2+4 ) = 0 + RETURN .F. + ELSE + RETURN .T. + ENDIF + ENDPROC + + PROCEDURE AvanceDelProceso LPARAMETERS tcTexto, tnValor, tnTotal, tnTipo TRY *-- Si o_Frm_Avance se habilitó de forma externa, n_ShowProgressbar podría ser 0 para controlarlo desde fuera. - IF VARTYPE(THIS.o_Frm_Avance) = "O" THEN + IF THIS.l_ProcessFiles AND VARTYPE(THIS.o_Frm_Avance) = "O" THEN *-- Cuando esta rutina se invoca desde el script, este método es el #1 y no puede cancelarse todavía IF THIS.o_Frm_Avance.l_Cancelled AND PROGRAM(-1) > 1 THEN ERROR 1799 @@ -883,7 +896,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' .n_ProcessedFilesCount = 0 .n_ProcessedFiles = 0 - DIMENSION .a_ProcessedFiles(1, 5) + DIMENSION .a_ProcessedFiles(1, 6) .a_ProcessedFiles = '' ENDWITH ENDPROC @@ -900,9 +913,9 @@ DEFINE CLASS c_foxbin2prg AS SESSION FUNCTION get_Processed - LPARAMETERS taTargets, tcFileMask + LPARAMETERS taProcessed, tcFileMask - EXTERNAL ARRAY taTargets + EXTERNAL ARRAY taProcessed LOCAL lnCount, I lnCount = 0 @@ -913,12 +926,13 @@ DEFINE CLASS c_foxbin2prg AS SESSION FOR I = 1 TO .n_ProcessedFiles IF LIKE( tcFileMask, JUSTFNAME(.a_ProcessedFiles(I,1)) ) THEN lnCount = lnCount + 1 - DIMENSION taTargets(lnCount,5) - taTargets(lnCount,1) = .a_ProcessedFiles(I,1) - taTargets(lnCount,2) = .a_ProcessedFiles(I,2) - taTargets(lnCount,3) = .a_ProcessedFiles(I,3) - taTargets(lnCount,4) = .a_ProcessedFiles(I,4) - taTargets(lnCount,5) = .a_ProcessedFiles(I,5) + DIMENSION taProcessed(lnCount,6) + taProcessed(lnCount,1) = .a_ProcessedFiles(I,1) + taProcessed(lnCount,2) = .a_ProcessedFiles(I,2) + taProcessed(lnCount,3) = .a_ProcessedFiles(I,3) + taProcessed(lnCount,4) = .a_ProcessedFiles(I,4) + taProcessed(lnCount,5) = .a_ProcessedFiles(I,5) + taProcessed(lnCount,6) = .a_ProcessedFiles(I,6) ENDIF ENDFOR ENDWITH @@ -926,6 +940,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION RETURN lnCount ENDFUNC + PROCEDURE l_Debug_ACCESS IF THIS.n_CFG_Actual = 0 OR ISNULL( THIS.o_Configuration( THIS.n_CFG_Actual ) ) RETURN THIS.l_Debug @@ -1961,36 +1976,6 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDFUNC - PROCEDURE get_TextFileNames - LPARAMETERS tcInputFile, taOutputFiles - *fdb* - - EXTERNAL ARRAY taOutputFiles - LOCAL I, lnOutputFiles, lcExt, lnCodeLines, lcCode, laCodeLines(1), lnFileCount, laFiles(1), lcInputFile - - IF TYPE('taOutputFiles',1) # 'A' THEN - ERROR 9, 'taOutputFiles' - ENDIF - - WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' - lnOutputFiles = 0 - lcExt = UPPER( JUSTEXT( tcInputFile ) ) - - DO CASE - CASE lcExt = 'VCX' - - - CASE .F. - - - ENDCASE - - ENDWITH - - RETURN lnOutputFiles - ENDPROC - - PROCEDURE Get_Ext2FromExt LPARAMETERS tcExt LOCAL lcExt2 @@ -2677,8 +2662,8 @@ DEFINE CLASS c_foxbin2prg AS SESSION .ejecutar_WriteErrorLog( @toEx ) ENDCASE ELSE - *-- addProcessedFile( tcInputFile, tcProcessed, tcHasErrors, tcSupported, tcReserved ) - IF .addProcessedFile( lcFile, 'P0', 'E0', 'S0', 'RR' ) + *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) + IF .addProcessedFile( lcFile, 'I', 'P0', 'E0', 'S0', 'X0' ) .updateProcessedFile() ENDIF ENDIF @@ -2779,8 +2764,8 @@ DEFINE CLASS c_foxbin2prg AS SESSION .ejecutar_WriteErrorLog( @toEx ) ENDCASE ELSE - *-- addProcessedFile( tcInputFile, tcProcessed, tcHasErrors, tcSupported, tcReserved ) - IF .addProcessedFile( lcFile, 'P0', 'E0', 'S0', 'RR' ) + *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) + IF .addProcessedFile( lcFile, 'I', 'P0', 'E0', 'S0', 'X0' ) .updateProcessedFile() ENDIF ENDIF @@ -2907,13 +2892,14 @@ DEFINE CLASS c_foxbin2prg AS SESSION .c_OriginalFileName = FORCEEXT(.c_OriginalFileName,'pjx') ENDIF - *-- addProcessedFile( tcInputFile, tcProcessed, tcHasErrors, tcSupported, tcReserved ) - IF NOT .addProcessedFile( .c_InputFile, 'P1', 'E0', 'S1', 'RR' ) THEN + *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) + IF NOT .addProcessedFile( .c_InputFile, 'I', 'P1', 'E0', 'S1', 'X0' ) THEN *.writeLog( 'OPTIMIZACIÓN: El archivo Base [' + JUSTFNAME(lc_BaseFile) + '] ya fue procesado, por lo que no se procesará [' + JUSTFNAME(.c_InputFile) + ']' ) .writeLog( '> ' + TEXTMERGE( loLang.C_CLASSPERFILE_OPTIMIZATION_BASE_ALREADY_PROCESSED_LOC ) ) EXIT ENDIF + .updateProcessedFile() .writeLog( C_TAB + 'c_OriginalFileName: ' + .c_OriginalFileName ) .writeLog( ) @@ -3156,7 +3142,6 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDIF .normalizarCapitalizacionArchivos() - .updateProcessedFile() ENDWITH && THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' CATCH TO toEx @@ -3540,12 +3525,13 @@ 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) - * tcProcessed (v? IN ) Fue Procesado ("P") - * tcHasErrors (v? IN ) Tuvo Errores ("E") - * tcSupported (v? IN ) Archivo soportado ("U"=Unsupported) - * tcReserved (v? IN ) Reservado + * 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 tcProcessed, tcHasErrors, tcSupported, tcReserved + LPARAMETERS tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded TRY LOCAL loEx as Exception @@ -3554,19 +3540,23 @@ DEFINE CLASS c_foxbin2prg AS SESSION IF .n_ProcessedFiles = 0 THEN EXIT ENDIF - IF NOT EMPTY(tcProcessed) + IF NOT EMPTY(tcInOutType) .a_ProcessedFiles(.n_ProcessedFiles, 2) = EVL(tcProcessed, '') ENDIF + IF NOT EMPTY(tcProcessed) + .a_ProcessedFiles(.n_ProcessedFiles, 3) = EVL(tcProcessed, '') + ENDIF IF NOT EMPTY(tcHasErrors) - .a_ProcessedFiles(.n_ProcessedFiles, 3) = EVL(tcHasErrors, '') + .a_ProcessedFiles(.n_ProcessedFiles, 4) = EVL(tcHasErrors, '') ENDIF IF NOT EMPTY(tcSupported) - .a_ProcessedFiles(.n_ProcessedFiles, 4) = EVL(tcSupported, '') + .a_ProcessedFiles(.n_ProcessedFiles, 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)) ) ENDWITH @@ -5009,12 +4999,6 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION ENDPROC - PROCEDURE get_TextFileNames - LPARAMETERS tcInputFile - *fdb* - ENDPROC - - PROCEDURE get_ValueFromNullTerminatedValue LPARAMETERS tcNullTerminatedValue LOCAL lcValue, lnNullPos @@ -8140,25 +8124,38 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin .writeLog( C_TAB + '+ ' + loLang.C_INCLUDING_CLASS_LOC + ' ' + JUSTFNAME( lcInputFile_Class ) ) - *-- addProcessedFile( tcInputFile, tcProcessed, tcHasErrors, tcSupported, tcReserved ) - IF toFoxBin2Prg.addProcessedFile( lcInputFile_Class, 'P2', 'E0', 'S1', 'RR' ) THEN + *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) + IF toFoxBin2Prg.addProcessedFile( lcInputFile_Class, 'I', 'P1', 'E0', 'S1', 'X1' ) THEN toFoxBin2Prg.updateProcessedFile() ENDIF - toFoxBin2Prg.normalizarCapitalizacionArchivos( .T., lcInputFile_Class ) - C_FB2PRG_CODE = C_FB2PRG_CODE + FILETOSTR( lcInputFile_Class ) + IF toFoxBin2Prg.l_ProcessFiles THEN + toFoxBin2Prg.normalizarCapitalizacionArchivos( .T., lcInputFile_Class ) + C_FB2PRG_CODE = C_FB2PRG_CODE + FILETOSTR( lcInputFile_Class ) + ENDIF ENDFOR ELSE *-- No es clase por archivo, o no se quiere redireccionar a Main. - C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) + IF toFoxBin2Prg.l_ProcessFiles THEN + C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) - lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - .AvanceDelProceso( 'Identifying Header Blocks...', 1, lnCodeLines, 1 ) - .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) + .AvanceDelProceso( 'Identifying Header Blocks...', 1, lnCodeLines, 1 ) + .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) + ENDIF 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 + EXIT && Si se indicó no procesar, se sale aquí. (Modo de simulación) + ENDIF + lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) *-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF @@ -8525,8 +8522,8 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin .writeLog( C_TAB + '+ ' + loLang.C_INCLUDING_CLASS_LOC + ' ' + JUSTFNAME( lcInputFile_Class ) ) - *-- addProcessedFile( tcInputFile, tcProcessed, tcHasErrors, tcSupported, tcReserved ) - IF toFoxBin2Prg.addProcessedFile( lcInputFile_Class, 'P2', 'E0', 'S1', 'RR' ) THEN + *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) + IF toFoxBin2Prg.addProcessedFile( lcInputFile_Class, 'I', 'P1', 'E0', 'S1', 'X1' ) THEN toFoxBin2Prg.updateProcessedFile() ENDIF @@ -8544,6 +8541,15 @@ 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 + EXIT && Si se indicó no procesar, se sale aquí. (Modo de simulación) + ENDIF + lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) *-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF @@ -8861,6 +8867,15 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin 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 + + IF NOT toFoxBin2Prg.l_ProcessFiles THEN + EXIT && Si se indicó no procesar, se sale aquí. (Modo de simulación) + ENDIF + C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) @@ -9662,6 +9677,15 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin 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 + + IF NOT toFoxBin2Prg.l_ProcessFiles THEN + EXIT && Si se indicó no procesar, se sale aquí. (Modo de simulación) + ENDIF + C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) @@ -10101,6 +10125,15 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin 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 + + IF NOT toFoxBin2Prg.l_ProcessFiles THEN + EXIT && Si se indicó no procesar, se sale aquí. (Modo de simulación) + ENDIF + C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) @@ -10408,6 +10441,11 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin 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 + IF toFoxBin2Prg.n_UseClassPerFile > 0 AND toFoxBin2Prg.l_RedirectClassPerFileToMain C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) @@ -10434,8 +10472,8 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin *-- Busco "storedprocedures" y le pongo "z" al inicio FOR I = 1 TO lnFileCount - IF LOWER( laFiles(I,1)) == lcBaseFilename + '.storedprocedures.sp.' + JUSTEXT(.c_InputFile) THEN - laFiles(I,1) = lcBaseFilename + '.zstoredprocedures.sp.' + JUSTEXT(.c_InputFile) + IF LOWER( laFiles(I,1)) == lcBaseFilename + '.database.storedproceduressource.' + JUSTEXT(.c_InputFile) THEN + laFiles(I,1) = lcBaseFilename + '.zdatabase.storedproceduressource.' + JUSTEXT(.c_InputFile) EXIT ENDIF ENDFOR @@ -10444,8 +10482,8 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin *-- Busco "zstoredprocedures" y le quito la "z" del inicio FOR I = 1 TO lnFileCount - IF LOWER( laFiles(I,1)) == lcBaseFilename + '.zstoredprocedures.sp.' + JUSTEXT(.c_InputFile) THEN - laFiles(I,1) = lcBaseFilename + '.storedprocedures.sp.' + JUSTEXT(.c_InputFile) + IF LOWER( laFiles(I,1)) == lcBaseFilename + '.zdatabase.storedproceduressource.' + JUSTEXT(.c_InputFile) THEN + laFiles(I,1) = lcBaseFilename + '.database.storedproceduressource.' + JUSTEXT(.c_InputFile) EXIT ENDIF ENDFOR @@ -10455,32 +10493,34 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin lcMemberType = LOWER( GETWORDNUM( JUSTFNAME( lcInputFile_Class ), 2, '.' ) ) lcMemberName = LOWER( GETWORDNUM( JUSTFNAME( lcInputFile_Class ), 3, '.' ) ) - IF NOT lcMemberType == lcLastMemberType THEN - IF NOT EMPTY(lcLastMemberType) THEN - *-- Cambio de tipo de miembro, fin del anterior (connection, table, view, storedprocedures) + IF toFoxBin2Prg.l_ProcessFiles THEN + IF NOT lcMemberType == lcLastMemberType THEN + IF NOT EMPTY(lcLastMemberType) THEN + *-- Cambio de tipo de miembro, fin del anterior (connection, table, view, storedprocedures) + DO CASE + CASE lcLastMemberType == 'connection' + C_FB2PRG_CODE = C_FB2PRG_CODE + C_TAB + C_CONNECTIONS_F + CR_LF + CASE lcLastMemberType == 'table' + C_FB2PRG_CODE = C_FB2PRG_CODE + C_TAB + C_TABLES_F + CR_LF + CASE lcLastMemberType == 'view' + C_FB2PRG_CODE = C_FB2PRG_CODE + C_TAB + C_VIEWS_F + CR_LF + CASE lcLastMemberType == 'database' + *C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + CR_LF + ENDCASE + ENDIF + + *-- Cambio de tipo de miembro, inicio del actual (connection, table, view, storedprocedures) DO CASE - CASE lcLastMemberType == 'connection' - C_FB2PRG_CODE = C_FB2PRG_CODE + C_TAB + C_CONNECTIONS_F + CR_LF - CASE lcLastMemberType == 'table' - C_FB2PRG_CODE = C_FB2PRG_CODE + C_TAB + C_TABLES_F + CR_LF - CASE lcLastMemberType == 'view' - C_FB2PRG_CODE = C_FB2PRG_CODE + C_TAB + C_VIEWS_F + CR_LF - CASE lcLastMemberType == 'storedprocedures' - *C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + CR_LF + CASE lcMemberType == 'connection' + C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + CR_LF + C_TAB + C_CONNECTIONS_I + CR_LF + CASE lcMemberType == 'table' + C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + CR_LF + C_TAB + C_TABLES_I + CR_LF + CASE lcMemberType == 'view' + C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + CR_LF + C_TAB + C_VIEWS_I + CR_LF + CASE lcMemberType == 'database' + C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + CR_LF ENDCASE ENDIF - - *-- Cambio de tipo de miembro, inicio del actual (connection, table, view, storedprocedures) - DO CASE - CASE lcMemberType == 'connection' - C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + CR_LF + C_TAB + C_CONNECTIONS_I + CR_LF - CASE lcMemberType == 'table' - C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + CR_LF + C_TAB + C_TABLES_I + CR_LF - CASE lcMemberType == 'view' - C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + CR_LF + C_TAB + C_VIEWS_I + CR_LF - CASE lcMemberType == 'storedprocedures' - C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + CR_LF - ENDCASE ENDIF *-- Verificación de los Miembros, si son Externos y se indicó chequearlos @@ -10490,23 +10530,29 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin LOOP && Salteo este miembro porque no concuerda con los anotados ENDIF - .writeLog( C_TAB + '+ ' + loLang.C_INCLUDING_CLASS_LOC + ' ' + JUSTFNAME( lcInputFile_Class ) ) + .writeLog( C_TAB + '+ ' + loLang.C_INCLUDING_MEMBER_LOC + ' ' + JUSTFNAME( lcInputFile_Class ) ) - *-- addProcessedFile( tcInputFile, tcProcessed, tcHasErrors, tcSupported, tcReserved ) - IF toFoxBin2Prg.addProcessedFile( lcInputFile_Class, 'P2', 'E0', 'S1', 'RR' ) THEN + *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) + IF toFoxBin2Prg.addProcessedFile( lcInputFile_Class, 'I', 'P1', 'E0', 'S1', 'X1' ) THEN toFoxBin2Prg.updateProcessedFile() ENDIF - toFoxBin2Prg.normalizarCapitalizacionArchivos( .T., lcInputFile_Class ) - lcTempTxt = FILETOSTR( lcInputFile_Class ) + IF toFoxBin2Prg.l_ProcessFiles THEN + toFoxBin2Prg.normalizarCapitalizacionArchivos( .T., lcInputFile_Class ) + lcTempTxt = FILETOSTR( lcInputFile_Class ) - FOR Y = 7 TO ALINES( laLines, lcTempTxt ) - C_FB2PRG_CODE = C_FB2PRG_CODE + laLines(Y) + CR_LF - ENDFOR + FOR Y = 7 TO ALINES( laLines, lcTempTxt ) + C_FB2PRG_CODE = C_FB2PRG_CODE + laLines(Y) + CR_LF + ENDFOR - lcLastMemberType = lcMemberType + lcLastMemberType = lcMemberType + ENDIF ENDFOR + IF NOT toFoxBin2Prg.l_ProcessFiles THEN + EXIT && Si se indicó no procesar, se sale aquí. (Modo de simulación) + ENDIF + IF NOT EMPTY(lcLastMemberType) THEN *-- Cambio de tipo de miembro, fin del anterior (connection, table, view, storedprocedures) DO CASE @@ -10516,7 +10562,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin C_FB2PRG_CODE = C_FB2PRG_CODE + C_TAB + C_TABLES_F + CR_LF CASE lcLastMemberType == 'view' C_FB2PRG_CODE = C_FB2PRG_CODE + C_TAB + C_VIEWS_F + CR_LF - CASE lcLastMemberType == 'storedprocedures' + CASE lcLastMemberType == 'database' *C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + CR_LF ENDCASE ENDIF @@ -10528,6 +10574,10 @@ 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 + EXIT && Si se indicó no procesar, se sale aquí. (Modo de simulación) + ENDIF + C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) @@ -10809,7 +10859,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin IF lnItem = 0 THEN lcClaseExterna = FORCEPATH( JUSTSTEM(toFoxBin2Prg.c_InputFile) + '.' + toDatabase._ExternalClasses(I,1) + '.' + JUSTEXT(toFoxBin2Prg.c_InputFile), JUSTPATH(toFoxBin2Prg.c_InputFile) ) *ERROR 'No se ha encontrado la clase externa [' + toDatabase._ExternalClasses(I,1) + '] en el archivo [' + toFoxBin2Prg.c_InputFile + ']' - ERROR ( loLang.C_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC + ' [' + lcClaseExterna + ']' ) + ERROR ( loLang.C_EXTERNAL_MEMBER_NAME_WAS_NOT_FOUND_LOC + ' [' + lcClaseExterna + ']' ) ENDIF toDatabase._Members(lnItem,2) = .T. && Checked @@ -10858,6 +10908,15 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin 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 + + IF NOT toFoxBin2Prg.l_ProcessFiles THEN + EXIT && Si se indicó no procesar, se sale aquí. (Modo de simulación) + ENDIF + C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) @@ -12734,33 +12793,47 @@ DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF - LOCAL llFileExists, lnBytes, lcOutputFile - LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' - loLang = _SCREEN.o_FoxBin2Prg_Lang - lcOutputFile = tcOutputFile - llFileExists = FILE(tcOutputFile) + TRY + LOCAL lcExpanded + lcExpanded = IIF( '.' $ JUSTFNAME(tcOutputFile), 'X1', 'X0' ) - IF llFileExists AND FILETOSTR( tcOutputFile ) == tcCodigo THEN - *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) - THIS.writeLog( '> ' + TEXTMERGE(loLang.C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) - - ELSE - IF llFileExists THEN - toFoxBin2Prg.doBackup( .F., .T., '', '', '', tcOutputFile ) - toFoxBin2Prg.ChangeFileAttribute( tcOutputFile, '-R' ) + *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) + IF toFoxBin2Prg.addProcessedFile( tcOutputFile, 'O', 'P1', 'E0', 'S1', lcExpanded ) THEN + toFoxBin2Prg.updateProcessedFile() ENDIF - lnBytes = STRTOFILE( tcCodigo, tcOutputFile ) - THIS.writeLog( '> ' + loLang.C_FILENAME_LOC + ': ' + tcOutputFile + ' (' + ALLTRIM(TRANSFORM(lnBytes/1024,'######.##')) + '/' + ALLTRIM(TRANSFORM(LEN(tcCodigo)/1024,'######.##')) + ' KiB)' ) - *THIS.writeLog( '- ' + loLang.C_GENERATED_FILE_SIZE_LOC ) - - IF lnBytes = 0 - *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' - ERROR (TEXTMERGE(loLang.C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) + IF NOT toFoxBin2Prg.l_ProcessFiles THEN + EXIT && Si se indicó no procesar, salgo del proceso. (Modo de simulación) ENDIF - ENDIF - toFoxBin2Prg.normalizarCapitalizacionArchivos( .F., tcOutputFile ) + LOCAL llFileExists, lnBytes, lcOutputFile + LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' + loLang = _SCREEN.o_FoxBin2Prg_Lang + lcOutputFile = tcOutputFile + llFileExists = FILE(tcOutputFile) + + IF llFileExists AND FILETOSTR( tcOutputFile ) == tcCodigo THEN + *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + THIS.writeLog( '> ' + TEXTMERGE(loLang.C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) + + ELSE + IF llFileExists THEN + toFoxBin2Prg.doBackup( .F., .T., '', '', '', tcOutputFile ) + toFoxBin2Prg.ChangeFileAttribute( tcOutputFile, '-R' ) + ENDIF + + lnBytes = STRTOFILE( tcCodigo, tcOutputFile ) + THIS.writeLog( '> ' + loLang.C_FILENAME_LOC + ': ' + tcOutputFile + ' (' + ALLTRIM(TRANSFORM(lnBytes/1024,'######.##')) + '/' + ALLTRIM(TRANSFORM(LEN(tcCodigo)/1024,'######.##')) + ' KiB)' ) + *THIS.writeLog( '- ' + loLang.C_GENERATED_FILE_SIZE_LOC ) + + IF lnBytes = 0 + *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' + ERROR (TEXTMERGE(loLang.C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) + ENDIF + ENDIF + + toFoxBin2Prg.normalizarCapitalizacionArchivos( .F., tcOutputFile ) + ENDTRY ENDPROC @@ -12928,8 +13001,13 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg lcObjName = ALLTRIM( loRegClass.OBJNAME ) laClasses(lnClassCount,1) = LOWER( lcObjName ) + laClasses(lnClassCount,2) = '' laClasses(lnClassCount,3) = loRegClass.BASECLASS + IF NOT toFoxBin2Prg.l_ProcessFiles THEN + LOOP && Si se indicó no procesar, salteo el resto del proceso. (Modo de simulación) + ENDIF + lnStep = lnStep + 1 .AvanceDelProceso( 'Processing Class ' + lcObjName + '...', lnStep, lnClassTotal*lnStepCount, 1 ) @@ -13086,16 +13164,16 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg *-- Genero el VC2 lnStep = lnStep + 1 - .AvanceDelProceso( 'Writing VC2...', lnStep, lnClassTotal*lnStepCount, 1 ) - lcOutputFile = .c_OutputFile + + .AvanceDelProceso( 'Writing VC2...', lnStep, lnClassTotal*lnStepCount, 1 ) lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + lcExternalHeader + C_FB2PRG_CODE IF .l_Test - FOR I = 1 TO lnClassCount - lcCodigo = lcCodigo + laClasses(I,2) - ENDFOR - toModulo = lcCodigo + *FOR I = 1 TO lnClassCount + * lcCodigo = lcCodigo + laClasses(I,2) + *ENDFOR + *toModulo = lcCodigo ELSE DO CASE CASE toFoxBin2Prg.n_UseClassPerFile = 1 && LibName.ClassName.SC2 @@ -13263,8 +13341,13 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg lcObjName = ALLTRIM(loRegClass.OBJNAME) laClasses(lnClassCount,1) = LOWER( lcObjName ) + laClasses(lnClassCount,2) = '' laClasses(lnClassCount,3) = loRegClass.BASECLASS + IF NOT toFoxBin2Prg.l_ProcessFiles THEN + LOOP && Si se indicó no procesar, salteo el resto del proceso. (Modo de simulación) + ENDIF + lnStep = lnStep + 1 .AvanceDelProceso( 'Processing Class ' + lcObjName + '...', lnStep, lnClassTotal*lnStepCount, 1 ) @@ -13423,16 +13506,16 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg *-- Genero el SC2 lnStep = lnStep + 1 - .AvanceDelProceso( 'Writing SC2...', lnStep, lnClassTotal*lnStepCount, 1 ) - lcOutputFile = .c_OutputFile + + .AvanceDelProceso( 'Writing SC2...', lnStep, lnClassTotal*lnStepCount, 1 ) lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + lcExternalHeader + C_FB2PRG_CODE IF .l_Test - FOR I = 1 TO lnClassCount - lcCodigo = lcCodigo + laClasses(I,2) - ENDFOR - toModulo = lcCodigo + *FOR I = 1 TO lnClassCount + * lcCodigo = lcCodigo + laClasses(I,2) + *ENDFOR + *toModulo = lcCodigo ELSE DO CASE CASE toFoxBin2Prg.n_UseClassPerFile = 1 && LibName.ClassName.SC2 @@ -13521,62 +13604,18 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg STORE NULL TO loProject, loReg, loServerHead, loServerData WITH THIS AS c_conversor_pjx_a_prg OF 'FOXBIN2PRG.PRG' - USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG - SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN - USE IN (SELECT("_TABLAORIG")) + IF toFoxBin2Prg.l_ProcessFiles THEN + USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG + SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN + USE IN (SELECT("_TABLAORIG")) - loServerHead = CREATEOBJECT('CL_PROJ_SRV_HEAD') - .AvanceDelProceso( 'Processing Project ' + '...', 1, 2, 1 ) + loServerHead = CREATEOBJECT('CL_PROJ_SRV_HEAD') + .AvanceDelProceso( 'Processing Project ' + '...', 1, 2, 1 ) - *-- Obtengo los archivos del proyecto - loProject = CREATEOBJECT('CL_PROJECT') - SCATTER MEMO NAME loReg - - IF toFoxBin2Prg.l_NoTimestamps - loReg.TIMESTAMP = 0 - ENDIF - IF toFoxBin2Prg.l_ClearUniqueID - loReg.ID = 0 - ENDIF - - loProject._HomeDir = ['] + ALLTRIM( .get_ValueFromNullTerminatedValue( loReg.HOMEDIR ) ) + ['] - - loProject._ServerInfo = loReg.RESERVED2 - loProject._Debug = loReg.DEBUG - loProject._Encrypted = loReg.ENCRYPT - lcDevInfo = loReg.DEVINFO - - - *--- Ubico el programa principal - LOCATE FOR MAINPROG - - IF FOUND() - loProject._MainProg = LOWER( ALLTRIM( .get_ValueFromNullTerminatedValue( NAME ) ) ) - ENDIF - - - *-- Ubico el Project Hook - LOCATE FOR TYPE == 'W' - - IF FOUND() - loProject._ProjectHookLibrary = LOWER( ALLTRIM( .get_ValueFromNullTerminatedValue( NAME ) ) ) - loProject._ProjectHookClass = LOWER( ALLTRIM( .get_ValueFromNullTerminatedValue( RESERVED1 ) ) ) - ENDIF - - - *-- Ubico el icono del proyecto - LOCATE FOR TYPE == 'i' - - IF FOUND() - loProject._Icon = LOWER( ALLTRIM( .get_ValueFromNullTerminatedValue( NAME ) ) ) - ENDIF - - - *-- Escaneo el proyecto - SCAN ALL FOR NOT INLIST(TYPE, 'H','W','i' ) - loReg = NULL - SCATTER FIELDS NAME,TYPE,EXCLUDE,COMMENTS,CPID,TIMESTAMP,ID,OBJREV MEMO NAME loReg + *-- Obtengo los archivos del proyecto + loProject = CREATEOBJECT('CL_PROJECT') + SCATTER MEMO NAME loReg IF toFoxBin2Prg.l_NoTimestamps loReg.TIMESTAMP = 0 @@ -13585,214 +13624,262 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg loReg.ID = 0 ENDIF - loReg.NAME = LOWER( ALLTRIM( .get_ValueFromNullTerminatedValue( loReg.NAME ) ) ) - loReg.COMMENTS = ALLTRIM( .get_ValueFromNullTerminatedValue( loReg.COMMENTS ) ) + loProject._HomeDir = ['] + ALLTRIM( .get_ValueFromNullTerminatedValue( loReg.HOMEDIR ) ) + ['] - *-- TIP: Si el "Name" del objeto está vacío, lo salteo - IF EMPTY(loReg.NAME) - LOOP + loProject._ServerInfo = loReg.RESERVED2 + loProject._Debug = loReg.DEBUG + loProject._Encrypted = loReg.ENCRYPT + lcDevInfo = loReg.DEVINFO + + + *--- Ubico el programa principal + LOCATE FOR MAINPROG + + IF FOUND() + loProject._MainProg = LOWER( ALLTRIM( .get_ValueFromNullTerminatedValue( NAME ) ) ) ENDIF - TRY - loProject.ADD( loReg, loReg.NAME ) - CATCH TO loEx WHEN loEx.ERRORNO = 2062 && The specified key already exists ==> loProject.ADD( loReg, loReg.NAME ) - *-- Saltear y no agregar el archivo duplicado / Bypass and not add the duplicated file - ENDTRY - ENDSCAN + + *-- Ubico el Project Hook + LOCATE FOR TYPE == 'W' + + IF FOUND() + loProject._ProjectHookLibrary = LOWER( ALLTRIM( .get_ValueFromNullTerminatedValue( NAME ) ) ) + loProject._ProjectHookClass = LOWER( ALLTRIM( .get_ValueFromNullTerminatedValue( RESERVED1 ) ) ) + ENDIF - C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() + *-- Ubico el icono del proyecto + LOCATE FOR TYPE == 'i' + + IF FOUND() + loProject._Icon = LOWER( ALLTRIM( .get_ValueFromNullTerminatedValue( NAME ) ) ) + ENDIF - *-- Directorio de inicio - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - LPARAMETERS tcDir - <<>> - lcCurdir = SYS(5)+CURDIR() - CD ( EVL( tcDir, JUSTPATH( SYS(16) ) ) ) - <<>> - ENDTEXT + *-- Escaneo el proyecto + SCAN ALL FOR NOT INLIST(TYPE, 'H','W','i' ) + loReg = NULL + SCATTER FIELDS NAME,TYPE,EXCLUDE,COMMENTS,CPID,TIMESTAMP,ID,OBJREV MEMO NAME loReg + + IF toFoxBin2Prg.l_NoTimestamps + loReg.TIMESTAMP = 0 + ENDIF + IF toFoxBin2Prg.l_ClearUniqueID + loReg.ID = 0 + ENDIF + + loReg.NAME = LOWER( ALLTRIM( .get_ValueFromNullTerminatedValue( loReg.NAME ) ) ) + loReg.COMMENTS = ALLTRIM( .get_ValueFromNullTerminatedValue( loReg.COMMENTS ) ) + + *-- TIP: Si el "Name" del objeto está vacío, lo salteo + IF EMPTY(loReg.NAME) + LOOP + ENDIF + + TRY + loProject.ADD( loReg, loReg.NAME ) + CATCH TO loEx WHEN loEx.ERRORNO = 2062 && The specified key already exists ==> loProject.ADD( loReg, loReg.NAME ) + *-- Saltear y no agregar el archivo duplicado / Bypass and not add the duplicated file + ENDTRY + ENDSCAN - *-- Información del programa - loProject.parseDeviceInfo( lcDevInfo ) - C_FB2PRG_CODE = C_FB2PRG_CODE + loProject.getFormattedDeviceInfoText() + CR_LF + C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() - *-- Información de los Servidores definidos - IF NOT EMPTY(loProject._ServerInfo) - loServerHead.parseServerInfo( loProject._ServerInfo ) - C_FB2PRG_CODE = C_FB2PRG_CODE + loServerHead.getFormattedServerText() + CR_LF - loServerHead = NULL - ENDIF + *-- Directorio de inicio + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + LPARAMETERS tcDir + <<>> + lcCurdir = SYS(5)+CURDIR() + CD ( EVL( tcDir, JUSTPATH( SYS(16) ) ) ) + <<>> + ENDTEXT - *-- Generación del proyecto - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <> - <<>>*<.HomeDir = <> /> - <<>> - FOR EACH loProject IN _VFP.Projects FOXOBJECT - <<>> loProject.Close() + *-- Información del programa + loProject.parseDeviceInfo( lcDevInfo ) + C_FB2PRG_CODE = C_FB2PRG_CODE + loProject.getFormattedDeviceInfoText() + CR_LF + + + *-- Información de los Servidores definidos + IF NOT EMPTY(loProject._ServerInfo) + loServerHead.parseServerInfo( loProject._ServerInfo ) + C_FB2PRG_CODE = C_FB2PRG_CODE + loServerHead.getFormattedServerText() + CR_LF + loServerHead = NULL + ENDIF + + + *-- Generación del proyecto + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <> + <<>>*<.HomeDir = <> /> + <<>> + FOR EACH loProject IN _VFP.Projects FOXOBJECT + <<>> loProject.Close() + ENDFOR + <<>> + STRTOFILE( '', '__newproject.f2b' ) + BUILD PROJECT <> FROM '__newproject.f2b' + ENDTEXT + + + *-- Abro el proyecto + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + FOR EACH loProject IN _VFP.Projects FOXOBJECT + <<>> loProject.Close() + ENDFOR + <<>> + MODIFY PROJECT '<>' NOWAIT NOSHOW NOPROJECTHOOK + <<>> + loProject = _VFP.Projects('<>') + <<>> + WITH loProject.FILES + ENDTEXT + + + *-- Definir archivos del proyecto y metadata: CPID, Timestamp, ID, etc. + loProject.KEYSORT = 2 + + FOR EACH loReg IN loProject &&FOXOBJECT + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> .ADD('<>') + ENDTEXT + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2+4+8 + <<>> <<'&'>><<'&'>> <> + Type="<>" + Cpid="<>" + Timestamp="<>" + ID="<>" + ObjRev="<>" + <> + ENDTEXT + loReg = NULL ENDFOR - <<>> - STRTOFILE( '', '__newproject.f2b' ) - BUILD PROJECT <> FROM '__newproject.f2b' - ENDTEXT + + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <> + <<>> + <<>> .ITEM('__newproject.f2b').Remove() + <<>> + ENDTEXT - *-- Abro el proyecto - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - FOR EACH loProject IN _VFP.Projects FOXOBJECT - <<>> loProject.Close() + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <> + ENDTEXT + + + *-- Agrego los comentarios + loProject.KEYSORT = 2 + + FOR EACH loReg IN loProject &&FOXOBJECT + IF NOT EMPTY(loReg.COMMENTS) + *TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> .ITEM(lcCurdir + '<>').Description = '<>' + *ENDTEXT + C_FB2PRG_CODE = C_FB2PRG_CODE + CHR(13) + CHR(10) + CHR(9) + ".ITEM(lcCurdir + '" + loReg.NAME + "').Description = '" + loReg.COMMENTS + "'" + ENDIF + loReg = NULL ENDFOR - <<>> - MODIFY PROJECT '<>' NOWAIT NOSHOW NOPROJECTHOOK - <<>> - loProject = _VFP.Projects('<>') - <<>> - WITH loProject.FILES - ENDTEXT - *-- Definir archivos del proyecto y metadata: CPID, Timestamp, ID, etc. - loProject.KEYSORT = 2 - - FOR EACH loReg IN loProject &&FOXOBJECT + *-- Exclusiones TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .ADD('<>') + <<>> <> + <<>> + <<>> <> ENDTEXT - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2+4+8 - <<>> <<'&'>><<'&'>> <> - Type="<>" - Cpid="<>" - Timestamp="<>" - ID="<>" - ObjRev="<>" - <> - ENDTEXT - loReg = NULL - ENDFOR - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <> - <<>> - <<>> .ITEM('__newproject.f2b').Remove() - <<>> - ENDTEXT + loProject.KEYSORT = 2 + + FOR EACH loReg IN loProject &&FOXOBJECT + IF loReg.EXCLUDE + *TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> .ITEM(lcCurdir + '<>').Exclude = .T. + *ENDTEXT + C_FB2PRG_CODE = C_FB2PRG_CODE + CHR(13) + CHR(10) + CHR(9) + ".ITEM(lcCurdir + '" + loReg.NAME + "').Exclude = .T." + ENDIF + loReg = NULL + ENDFOR - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <> - ENDTEXT - - - *-- Agrego los comentarios - loProject.KEYSORT = 2 - - FOR EACH loReg IN loProject &&FOXOBJECT - IF NOT EMPTY(loReg.COMMENTS) - *TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - * <<>> .ITEM(lcCurdir + '<>').Description = '<>' - *ENDTEXT - C_FB2PRG_CODE = C_FB2PRG_CODE + CHR(13) + CHR(10) + CHR(9) + ".ITEM(lcCurdir + '" + loReg.NAME + "').Description = '" + loReg.COMMENTS + "'" - ENDIF - loReg = NULL - ENDFOR - - - *-- Exclusiones - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <> - <<>> - <<>> <> - ENDTEXT - - loProject.KEYSORT = 2 - - FOR EACH loReg IN loProject &&FOXOBJECT - IF loReg.EXCLUDE - *TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - * <<>> .ITEM(lcCurdir + '<>').Exclude = .T. - *ENDTEXT - C_FB2PRG_CODE = C_FB2PRG_CODE + CHR(13) + CHR(10) + CHR(9) + ".ITEM(lcCurdir + '" + loReg.NAME + "').Exclude = .T." - ENDIF - loReg = NULL - ENDFOR - - - *-- Tipos de archivos especiales - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <> - <<>> - <<>> <> - ENDTEXT - - loProject.KEYSORT = 2 - - FOR EACH loReg IN loProject &&FOXOBJECT - IF INLIST( UPPER( JUSTEXT( loReg.NAME ) ), 'H','FPW' ) - *TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - * <<>> .ITEM(lcCurdir + '<>').Type = 'T' - *ENDTEXT - C_FB2PRG_CODE = C_FB2PRG_CODE + CHR(13) + CHR(10) + CHR(9) + ".ITEM(lcCurdir + '" + loReg.NAME + "').Type = 'T'" - ENDIF - loReg = NULL - ENDFOR - - - *-- ProjectHook, Debug, Encrypt, Build y cierre - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <> - <> - <<>> - <> loProject - <<>> <> - ENDTEXT - - IF NOT EMPTY(loProject._MainProg) + *-- Tipos de archivos especiales TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .SetMain(lcCurdir + '<>') + <<>> <> + <<>> + <<>> <> ENDTEXT + + loProject.KEYSORT = 2 + + FOR EACH loReg IN loProject &&FOXOBJECT + IF INLIST( UPPER( JUSTEXT( loReg.NAME ) ), 'H','FPW' ) + *TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> .ITEM(lcCurdir + '<>').Type = 'T' + *ENDTEXT + C_FB2PRG_CODE = C_FB2PRG_CODE + CHR(13) + CHR(10) + CHR(9) + ".ITEM(lcCurdir + '" + loReg.NAME + "').Type = 'T'" + ENDIF + loReg = NULL + ENDFOR + + + *-- ProjectHook, Debug, Encrypt, Build y cierre + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <> + <> + <<>> + <> loProject + <<>> <> + ENDTEXT + + IF NOT EMPTY(loProject._MainProg) + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> .SetMain(lcCurdir + '<>') + ENDTEXT + ENDIF + + IF NOT EMPTY(loProject._Icon) + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> .Icon = lcCurdir + '<>' + ENDTEXT + ENDIF + + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> .Debug = <> + <<>> .Encrypted = <> + <<>> *<.CmntStyle = <> /> + <<>> *<.NoLogo = <> /> + <<>> *<.SaveCode = <> /> + <<>> .ProjectHookLibrary = '<>' + <<>> .ProjectHookClass = '<>' + <<>> <> + <> + <<>> + ENDTEXT + + + *-- Build y cierre + * _VFP.Projects('<>').FILES('__newproject.f2b').Remove() + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + _VFP.Projects('<>').Close() + ENDTEXT + + *-- Restauro Directorio de inicio + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + *ERASE '__newproject.f2b' + CD (lcCurdir) + RETURN + ENDTEXT + ENDIF - IF NOT EMPTY(loProject._Icon) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .Icon = lcCurdir + '<>' - ENDTEXT - ENDIF - - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .Debug = <> - <<>> .Encrypted = <> - <<>> *<.CmntStyle = <> /> - <<>> *<.NoLogo = <> /> - <<>> *<.SaveCode = <> /> - <<>> .ProjectHookLibrary = '<>' - <<>> .ProjectHookClass = '<>' - <<>> <> - <> - <<>> - ENDTEXT - - - *-- Build y cierre - * _VFP.Projects('<>').FILES('__newproject.f2b').Remove() - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - _VFP.Projects('<>').Close() - ENDTEXT - - *-- Restauro Directorio de inicio - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - *ERASE '__newproject.f2b' - CD (lcCurdir) - RETURN - ENDTEXT - *-- Genero el PJ2 .AvanceDelProceso( 'Writing PJ2...', 2, 2, 1 ) + IF .l_Test toModulo = C_FB2PRG_CODE ELSE @@ -13857,333 +13944,337 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg DODEFAULT( @toModulo, @toEx, @toFoxBin2Prg ) TRY - LOCAL lnCodError, lcStr, lnPos, lnLen, lnServerCount, loReg, lcDevInfo, lnLen ; - , lcStrPJM, laLines(1), laProps(1) ; - , loEx AS EXCEPTION ; - , loProject AS CL_PROJECT OF 'FOXBIN2PRG.PRG' ; - , loServerHead AS CL_PROJ_SRV_HEAD OF 'FOXBIN2PRG.PRG' ; - , loServerData AS CL_PROJ_SRV_DATA OF 'FOXBIN2PRG.PRG' - LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' - loLang = _SCREEN.o_FoxBin2Prg_Lang - STORE NULL TO loProject, loReg, loServerHead, loServerData - lcStrPJM = FILETOSTR( THIS.c_InputFile ) - loServerHead = CREATEOBJECT('CL_PROJ_SRV_HEAD') - THIS.AvanceDelProceso( 'Scanning PJM...', 1, 2, 1 ) + IF toFoxBin2Prg.l_ProcessFiles THEN + LOCAL lnCodError, lcStr, lnPos, lnLen, lnServerCount, loReg, lcDevInfo, lnLen ; + , lcStrPJM, laLines(1), laProps(1) ; + , loEx AS EXCEPTION ; + , loProject AS CL_PROJECT OF 'FOXBIN2PRG.PRG' ; + , loServerHead AS CL_PROJ_SRV_HEAD OF 'FOXBIN2PRG.PRG' ; + , loServerData AS CL_PROJ_SRV_DATA OF 'FOXBIN2PRG.PRG' + + LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' + loLang = _SCREEN.o_FoxBin2Prg_Lang + STORE NULL TO loProject, loReg, loServerHead, loServerData + lcStrPJM = FILETOSTR( THIS.c_InputFile ) + loServerHead = CREATEOBJECT('CL_PROJ_SRV_HEAD') + THIS.AvanceDelProceso( 'Scanning PJM...', 1, 2, 1 ) - *-- Obtengo los archivos del proyecto - loProject = CREATEOBJECT('CL_PROJECT') + *-- Obtengo los archivos del proyecto + loProject = CREATEOBJECT('CL_PROJECT') - WITH loProject AS CL_PROJECT OF 'FOXBIN2PRG.PRG' - *-- Proj.Info - ._CmntStyle = STREXTRACT( lcStrPJM, 'CommentStyle=', CR_LF ) - ._Debug = STREXTRACT( lcStrPJM, 'Debug=', CR_LF ) - ._Encrypted = STREXTRACT( lcStrPJM, 'Encrypt=', CR_LF ) - ._HomeDir = ['] + LOWER( JUSTPATH( SYS(5)+CURDIR() ) ) + ['] - ._ID = '' - ._NoLogo = STREXTRACT( lcStrPJM, 'NoLogo=', CR_LF ) - ._ObjRev = 0 - ._ProjectHookClass = '' - ._ProjectHookLibrary = '' - ._SaveCode = STREXTRACT( lcStrPJM, 'SaveCode=', CR_LF ) - ._ServerHead = NULL - ._ServerInfo = 'ServerData' - ._SourceFile = '' - ._TimeStamp = 0 - ._Version = STREXTRACT( lcStrPJM, 'Version=', CR_LF ) + WITH loProject AS CL_PROJECT OF 'FOXBIN2PRG.PRG' + *-- Proj.Info + ._CmntStyle = STREXTRACT( lcStrPJM, 'CommentStyle=', CR_LF ) + ._Debug = STREXTRACT( lcStrPJM, 'Debug=', CR_LF ) + ._Encrypted = STREXTRACT( lcStrPJM, 'Encrypt=', CR_LF ) + ._HomeDir = ['] + LOWER( JUSTPATH( SYS(5)+CURDIR() ) ) + ['] + ._ID = '' + ._NoLogo = STREXTRACT( lcStrPJM, 'NoLogo=', CR_LF ) + ._ObjRev = 0 + ._ProjectHookClass = '' + ._ProjectHookLibrary = '' + ._SaveCode = STREXTRACT( lcStrPJM, 'SaveCode=', CR_LF ) + ._ServerHead = NULL + ._ServerInfo = 'ServerData' + ._SourceFile = '' + ._TimeStamp = 0 + ._Version = STREXTRACT( lcStrPJM, 'Version=', CR_LF ) - *-- Dev.info - ._Author = STREXTRACT( lcStrPJM, 'Author=', CR_LF ) - ._Company = STREXTRACT( lcStrPJM, 'Company=', CR_LF ) - ._Address = STREXTRACT( lcStrPJM, 'Address=', CR_LF ) - ._City = STREXTRACT( lcStrPJM, 'City=', CR_LF ) - ._State = STREXTRACT( lcStrPJM, 'State=', CR_LF ) - ._PostalCode = STREXTRACT( lcStrPJM, 'Zip=', CR_LF ) - ._Country = STREXTRACT( lcStrPJM, 'Country=', CR_LF ) + *-- Dev.info + ._Author = STREXTRACT( lcStrPJM, 'Author=', CR_LF ) + ._Company = STREXTRACT( lcStrPJM, 'Company=', CR_LF ) + ._Address = STREXTRACT( lcStrPJM, 'Address=', CR_LF ) + ._City = STREXTRACT( lcStrPJM, 'City=', CR_LF ) + ._State = STREXTRACT( lcStrPJM, 'State=', CR_LF ) + ._PostalCode = STREXTRACT( lcStrPJM, 'Zip=', CR_LF ) + ._Country = STREXTRACT( lcStrPJM, 'Country=', CR_LF ) - ._Comments = STREXTRACT( lcStrPJM, 'Comments=', CR_LF ) - ._CompanyName = STREXTRACT( lcStrPJM, 'CompanyName=', CR_LF ) - ._FileDescription = STREXTRACT( lcStrPJM, 'FileDescription=', CR_LF ) - ._LegalCopyright = STREXTRACT( lcStrPJM, 'LegalCopyright=', CR_LF ) - ._LegalTrademark = STREXTRACT( lcStrPJM, 'LegalTrademarks=', CR_LF ) - ._ProductName = STREXTRACT( lcStrPJM, 'ProductName=', CR_LF ) - ._MajorVer = STREXTRACT( lcStrPJM, 'Major=', CR_LF ) - ._MinorVer = STREXTRACT( lcStrPJM, 'Minor=', CR_LF ) - ._Revision = STREXTRACT( lcStrPJM, 'Revision=', CR_LF ) - ._AutoIncrement = IIF( STREXTRACT( lcStrPJM, 'AutoIncrement=', CR_LF ) = '.T.', '1', '0' ) - ENDWITH + ._Comments = STREXTRACT( lcStrPJM, 'Comments=', CR_LF ) + ._CompanyName = STREXTRACT( lcStrPJM, 'CompanyName=', CR_LF ) + ._FileDescription = STREXTRACT( lcStrPJM, 'FileDescription=', CR_LF ) + ._LegalCopyright = STREXTRACT( lcStrPJM, 'LegalCopyright=', CR_LF ) + ._LegalTrademark = STREXTRACT( lcStrPJM, 'LegalTrademarks=', CR_LF ) + ._ProductName = STREXTRACT( lcStrPJM, 'ProductName=', CR_LF ) + ._MajorVer = STREXTRACT( lcStrPJM, 'Major=', CR_LF ) + ._MinorVer = STREXTRACT( lcStrPJM, 'Minor=', CR_LF ) + ._Revision = STREXTRACT( lcStrPJM, 'Revision=', CR_LF ) + ._AutoIncrement = IIF( STREXTRACT( lcStrPJM, 'AutoIncrement=', CR_LF ) = '.T.', '1', '0' ) + ENDWITH - FOR I = 1 TO ALINES( laLines, STREXTRACT( lcStrPJM, '[OLEServers]', '[OLEServersEnd]' ), 4 ) - ALINES( laProps, laLines(I), 1, ',' ) + FOR I = 1 TO ALINES( laLines, STREXTRACT( lcStrPJM, '[OLEServers]', '[OLEServersEnd]' ), 4 ) + ALINES( laProps, laLines(I), 1, ',' ) - IF I = 1 - WITH loServerHead AS CL_PROJ_SRV_HEAD OF 'FOXBIN2PRG.PRG' - ._LibraryName = laProps(1) - ._InternalName = laProps(2) - ._ProjectName = laProps(3) - ._TypeLibDesc = laProps(4) - ._ServerType = PADL(laProps(5),4) - ._TypeLib = laProps(6) - ENDWITH + IF I = 1 + WITH loServerHead AS CL_PROJ_SRV_HEAD OF 'FOXBIN2PRG.PRG' + ._LibraryName = laProps(1) + ._InternalName = laProps(2) + ._ProjectName = laProps(3) + ._TypeLibDesc = laProps(4) + ._ServerType = PADL(laProps(5),4) + ._TypeLib = laProps(6) + ENDWITH - ELSE - loServerData = CREATEOBJECT("CL_PROJ_SRV_DATA") + ELSE + loServerData = CREATEOBJECT("CL_PROJ_SRV_DATA") - WITH loServerData AS CL_PROJ_SRV_DATA OF 'FOXBIN2PRG.PRG' - ._HelpContextID = laProps(4) - ._ServerName = laProps(3) - ._Description = laProps(5) - ._HelpFile = laProps(6) - ._ServerClass = laProps(1) - ._ClassLibrary = laProps(2) - ._Instancing = laProps(7) - ._CLSID = laProps(8) - ._Interface = laProps(9) - ENDWITH + WITH loServerData AS CL_PROJ_SRV_DATA OF 'FOXBIN2PRG.PRG' + ._HelpContextID = laProps(4) + ._ServerName = laProps(3) + ._Description = laProps(5) + ._HelpFile = laProps(6) + ._ServerClass = laProps(1) + ._ClassLibrary = laProps(2) + ._Instancing = laProps(7) + ._CLSID = laProps(8) + ._Interface = laProps(9) + ENDWITH - loServerHead.add_Server( loServerData ) - loServerData = NULL - ENDIF - ENDFOR + loServerHead.add_Server( loServerData ) + loServerData = NULL + ENDIF + ENDFOR - *-- Escaneo el proyecto - FOR I = 1 TO ALINES( laLines, STREXTRACT( lcStrPJM, '[ProjectFiles]', '[EOF]' ), 4 ) - ALINES( laProps, laLines(I) + ',', 1, ',' ) - loReg = NULL - loReg = CREATEOBJECT("EMPTY") - ADDPROPERTY( loReg, 'ID', IIF( toFoxBin2Prg.l_ClearUniqueID, 0, VAL( laProps(1) ) ) ) - ADDPROPERTY( loReg, 'TYPE', laProps(2) ) - ADDPROPERTY( loReg, 'NAME', laProps(3) ) - ADDPROPERTY( loReg, 'EXCLUDE', EVALUATE( laProps(4) ) ) - ADDPROPERTY( loReg, 'MAINPROG', laProps(5) ) - ADDPROPERTY( loReg, 'CPID', VAL( laProps(6) ) ) - ADDPROPERTY( loReg, 'COMMENTS', laProps(9) ) - ADDPROPERTY( loReg, 'TIMESTAMP', 0 ) - ADDPROPERTY( loReg, 'OBJREV', 0 ) - - *-- TIP: Si el "Name" del objeto está vacío, lo salteo - IF EMPTY(loReg.NAME) - LOOP - ENDIF - - TRY - DO CASE - CASE loReg.MAINPROG = '.T.' - loProject._MainProg = loReg.NAME - loProject.ADD( loReg, loReg.NAME ) - CASE loReg.TYPE == 'W' - * - CASE loReg.TYPE == 'i' - loProject._Icon = loReg.NAME - OTHERWISE - loProject.ADD( loReg, loReg.NAME ) - ENDCASE - - CATCH TO loEx WHEN loEx.ERRORNO = 2062 && The specified key already exists ==> loProject.ADD( loReg, loReg.NAME ) - *-- Saltear y no agregar el archivo duplicado / Bypass and not add the duplicated file - FINALLY + *-- Escaneo el proyecto + FOR I = 1 TO ALINES( laLines, STREXTRACT( lcStrPJM, '[ProjectFiles]', '[EOF]' ), 4 ) + ALINES( laProps, laLines(I) + ',', 1, ',' ) loReg = NULL - ENDTRY - ENDFOR + loReg = CREATEOBJECT("EMPTY") + ADDPROPERTY( loReg, 'ID', IIF( toFoxBin2Prg.l_ClearUniqueID, 0, VAL( laProps(1) ) ) ) + ADDPROPERTY( loReg, 'TYPE', laProps(2) ) + ADDPROPERTY( loReg, 'NAME', laProps(3) ) + ADDPROPERTY( loReg, 'EXCLUDE', EVALUATE( laProps(4) ) ) + ADDPROPERTY( loReg, 'MAINPROG', laProps(5) ) + ADDPROPERTY( loReg, 'CPID', VAL( laProps(6) ) ) + ADDPROPERTY( loReg, 'COMMENTS', laProps(9) ) + ADDPROPERTY( loReg, 'TIMESTAMP', 0 ) + ADDPROPERTY( loReg, 'OBJREV', 0 ) + + *-- TIP: Si el "Name" del objeto está vacío, lo salteo + IF EMPTY(loReg.NAME) + LOOP + ENDIF + + TRY + DO CASE + CASE loReg.MAINPROG = '.T.' + loProject._MainProg = loReg.NAME + loProject.ADD( loReg, loReg.NAME ) + CASE loReg.TYPE == 'W' + * + CASE loReg.TYPE == 'i' + loProject._Icon = loReg.NAME + OTHERWISE + loProject.ADD( loReg, loReg.NAME ) + ENDCASE + + CATCH TO loEx WHEN loEx.ERRORNO = 2062 && The specified key already exists ==> loProject.ADD( loReg, loReg.NAME ) + *-- Saltear y no agregar el archivo duplicado / Bypass and not add the duplicated file + FINALLY + loReg = NULL + ENDTRY + ENDFOR - C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() + C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() - *-- Directorio de inicio - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - LPARAMETERS tcDir - <<>> - lcCurdir = SYS(5)+CURDIR() - CD ( EVL( tcDir, JUSTPATH( SYS(16) ) ) ) - <<>> - ENDTEXT + *-- Directorio de inicio + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + LPARAMETERS tcDir + <<>> + lcCurdir = SYS(5)+CURDIR() + CD ( EVL( tcDir, JUSTPATH( SYS(16) ) ) ) + <<>> + ENDTEXT - *-- Información del programa - C_FB2PRG_CODE = C_FB2PRG_CODE + loProject.getFormattedDeviceInfoText() + CR_LF + *-- Información del programa + C_FB2PRG_CODE = C_FB2PRG_CODE + loProject.getFormattedDeviceInfoText() + CR_LF - *-- Información de los Servidores definidos - IF NOT EMPTY(loProject._ServerInfo) - C_FB2PRG_CODE = C_FB2PRG_CODE + loServerHead.getFormattedServerText() + CR_LF - loServerHead = NULL + *-- Información de los Servidores definidos + IF NOT EMPTY(loProject._ServerInfo) + C_FB2PRG_CODE = C_FB2PRG_CODE + loServerHead.getFormattedServerText() + CR_LF + loServerHead = NULL + ENDIF + + WITH THIS AS c_conversor_pjm_a_prg OF 'FOXBIN2PRG.PRG' + + *-- Generación del proyecto + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <> + <<>>*<.HomeDir = <> /> + <<>> + FOR EACH loProject IN _VFP.Projects FOXOBJECT + <<>> loProject.Close() + ENDFOR + <<>> + STRTOFILE( '', '__newproject.f2b' ) + BUILD PROJECT <> FROM '__newproject.f2b' + ENDTEXT + + + *-- Abro el proyecto + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + FOR EACH loProject IN _VFP.Projects FOXOBJECT + <<>> loProject.Close() + ENDFOR + <<>> + MODIFY PROJECT '<>' NOWAIT NOSHOW NOPROJECTHOOK + <<>> + loProject = _VFP.Projects('<>') + <<>> + WITH loProject.FILES + ENDTEXT + + + *-- Definir archivos del proyecto y metadata: CPID, Timestamp, ID, etc. + loProject.KEYSORT = 2 + + FOR EACH loReg IN loProject &&FOXOBJECT + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> .ADD('<>') + ENDTEXT + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2+4+8 + <<>> <<'&'>><<'&'>> <> + Type="<>" + Cpid="<>" + Timestamp="<>" + ID="<>" + ObjRev="<>" + <> + ENDTEXT + loReg = NULL + ENDFOR + + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <> + <<>> + <<>> .ITEM('__newproject.f2b').Remove() + <<>> + ENDTEXT + + + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <> + ENDTEXT + + + *-- Agrego los comentarios + loProject.KEYSORT = 2 + + FOR EACH loReg IN loProject &&FOXOBJECT + IF NOT EMPTY(loReg.COMMENTS) + *TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> .ITEM(lcCurdir + '<>').Description = '<>' + *ENDTEXT + C_FB2PRG_CODE = C_FB2PRG_CODE + CHR(13) + CHR(10) + CHR(9) + ".ITEM(lcCurdir + '" + loReg.NAME + "').Description = '" + loReg.COMMENTS + "'" + ENDIF + ENDFOR + + + *-- Exclusiones + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <> + <<>> + <<>> <> + ENDTEXT + + loProject.KEYSORT = 2 + + FOR EACH loReg IN loProject &&FOXOBJECT + IF loReg.EXCLUDE + *TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> .ITEM(lcCurdir + '<>').Exclude = .T. + *ENDTEXT + C_FB2PRG_CODE = C_FB2PRG_CODE + CHR(13) + CHR(10) + CHR(9) + ".ITEM(lcCurdir + '" + loReg.NAME + "').Exclude = .T." + ENDIF + loReg = NULL + ENDFOR + + + *-- Tipos de archivos especiales + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <> + <<>> + <<>> <> + ENDTEXT + + loProject.KEYSORT = 2 + + FOR EACH loReg IN loProject &&FOXOBJECT + IF INLIST( UPPER( JUSTEXT( loReg.NAME ) ), 'H','FPW' ) + *TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> .ITEM(lcCurdir + '<>').Type = 'T' + *ENDTEXT + C_FB2PRG_CODE = C_FB2PRG_CODE + CHR(13) + CHR(10) + CHR(9) + ".ITEM(lcCurdir + '" + loReg.NAME + "').Type = 'T'" + ENDIF + loReg = NULL + ENDFOR + + + *-- ProjectHook, Debug, Encrypt, Build y cierre + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <> + <> + <<>> + <> loProject + <<>> <> + ENDTEXT + + IF NOT EMPTY(loProject._MainProg) + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> .SetMain(lcCurdir + '<>') + ENDTEXT + ENDIF + + IF NOT EMPTY(loProject._Icon) + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> .Icon = lcCurdir + '<>' + ENDTEXT + ENDIF + + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> .Debug = <> + <<>> .Encrypted = <> + <<>> *<.CmntStyle = <> /> + <<>> *<.NoLogo = <> /> + <<>> *<.SaveCode = <> /> + <<>> .ProjectHookLibrary = '<>' + <<>> .ProjectHookClass = '<>' + <<>> <> + <> + <<>> + ENDTEXT + + + *-- Build y cierre + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + _VFP.Projects('<>').Close() + ENDTEXT + + *-- Restauro Directorio de inicio + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + *ERASE '__newproject.f2b' + CD (lcCurdir) + RETURN + ENDTEXT + + ENDWITH && THIS ENDIF - WITH THIS AS c_conversor_pjm_a_prg OF 'FOXBIN2PRG.PRG' + *-- Genero el PJ2 + THIS.AvanceDelProceso( 'Writing PJ2...', 2, 2, 1 ) - *-- Generación del proyecto - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <> - <<>>*<.HomeDir = <> /> - <<>> - FOR EACH loProject IN _VFP.Projects FOXOBJECT - <<>> loProject.Close() - ENDFOR - <<>> - STRTOFILE( '', '__newproject.f2b' ) - BUILD PROJECT <> FROM '__newproject.f2b' - ENDTEXT - - - *-- Abro el proyecto - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - FOR EACH loProject IN _VFP.Projects FOXOBJECT - <<>> loProject.Close() - ENDFOR - <<>> - MODIFY PROJECT '<>' NOWAIT NOSHOW NOPROJECTHOOK - <<>> - loProject = _VFP.Projects('<>') - <<>> - WITH loProject.FILES - ENDTEXT - - - *-- Definir archivos del proyecto y metadata: CPID, Timestamp, ID, etc. - loProject.KEYSORT = 2 - - FOR EACH loReg IN loProject &&FOXOBJECT - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .ADD('<>') - ENDTEXT - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2+4+8 - <<>> <<'&'>><<'&'>> <> - Type="<>" - Cpid="<>" - Timestamp="<>" - ID="<>" - ObjRev="<>" - <> - ENDTEXT - loReg = NULL - ENDFOR - - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <> - <<>> - <<>> .ITEM('__newproject.f2b').Remove() - <<>> - ENDTEXT - - - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <> - ENDTEXT - - - *-- Agrego los comentarios - loProject.KEYSORT = 2 - - FOR EACH loReg IN loProject &&FOXOBJECT - IF NOT EMPTY(loReg.COMMENTS) - *TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - * <<>> .ITEM(lcCurdir + '<>').Description = '<>' - *ENDTEXT - C_FB2PRG_CODE = C_FB2PRG_CODE + CHR(13) + CHR(10) + CHR(9) + ".ITEM(lcCurdir + '" + loReg.NAME + "').Description = '" + loReg.COMMENTS + "'" - ENDIF - ENDFOR - - - *-- Exclusiones - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <> - <<>> - <<>> <> - ENDTEXT - - loProject.KEYSORT = 2 - - FOR EACH loReg IN loProject &&FOXOBJECT - IF loReg.EXCLUDE - *TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - * <<>> .ITEM(lcCurdir + '<>').Exclude = .T. - *ENDTEXT - C_FB2PRG_CODE = C_FB2PRG_CODE + CHR(13) + CHR(10) + CHR(9) + ".ITEM(lcCurdir + '" + loReg.NAME + "').Exclude = .T." - ENDIF - loReg = NULL - ENDFOR - - - *-- Tipos de archivos especiales - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <> - <<>> - <<>> <> - ENDTEXT - - loProject.KEYSORT = 2 - - FOR EACH loReg IN loProject &&FOXOBJECT - IF INLIST( UPPER( JUSTEXT( loReg.NAME ) ), 'H','FPW' ) - *TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - * <<>> .ITEM(lcCurdir + '<>').Type = 'T' - *ENDTEXT - C_FB2PRG_CODE = C_FB2PRG_CODE + CHR(13) + CHR(10) + CHR(9) + ".ITEM(lcCurdir + '" + loReg.NAME + "').Type = 'T'" - ENDIF - loReg = NULL - ENDFOR - - - *-- ProjectHook, Debug, Encrypt, Build y cierre - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <> - <> - <<>> - <> loProject - <<>> <> - ENDTEXT - - IF NOT EMPTY(loProject._MainProg) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .SetMain(lcCurdir + '<>') - ENDTEXT - ENDIF - - IF NOT EMPTY(loProject._Icon) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .Icon = lcCurdir + '<>' - ENDTEXT - ENDIF - - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .Debug = <> - <<>> .Encrypted = <> - <<>> *<.CmntStyle = <> /> - <<>> *<.NoLogo = <> /> - <<>> *<.SaveCode = <> /> - <<>> .ProjectHookLibrary = '<>' - <<>> .ProjectHookClass = '<>' - <<>> <> - <> - <<>> - ENDTEXT - - - *-- Build y cierre - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - _VFP.Projects('<>').Close() - ENDTEXT - - *-- Restauro Directorio de inicio - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - *ERASE '__newproject.f2b' - CD (lcCurdir) - RETURN - ENDTEXT - - - *-- Genero el PJ2 - .AvanceDelProceso( 'Writing PJ2...', 2, 2, 1 ) - IF .l_Test - toModulo = C_FB2PRG_CODE - ELSE - .write_OutputFile( (C_FB2PRG_CODE), .c_OutputFile, @toFoxBin2Prg ) - ENDIF - ENDWITH && THIS + IF THIS.l_Test + toModulo = C_FB2PRG_CODE + ELSE + THIS.write_OutputFile( (C_FB2PRG_CODE), THIS.c_OutputFile, @toFoxBin2Prg ) + ENDIF CATCH TO toEx @@ -14252,121 +14343,123 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg DODEFAULT( @toModulo, @toEx, @toFoxBin2Prg ) TRY - LOCAL lnCodError, loRegCab, loRegDataEnv, loRegCur, loRegObj, lnMethodCount, laMethods(1), laCode(1), laProtected(1), lnLen ; - , laPropsAndValues(1), laPropsAndComments(1), lnLastClass, lnRecno, lcMethods, lcObjName, la_NombresObjsOle(1) - LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' - loLang = _SCREEN.o_FoxBin2Prg_Lang - STORE 0 TO lnCodError, lnLastClass - STORE '' TO laMethods(1), laCode(1), laProtected(1), laPropsAndComments(1) - STORE NULL TO loRegObj, loRegCab, loRegDataEnv, loRegCur - WITH THIS AS c_conversor_pjm_a_prg OF 'FOXBIN2PRG.PRG' - USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG - THIS.AvanceDelProceso( 'Scanning FRX...', 1, 2, 1 ) + IF toFoxBin2Prg.l_ProcessFiles THEN + LOCAL lnCodError, loRegCab, loRegDataEnv, loRegCur, loRegObj, lnMethodCount, laMethods(1), laCode(1), laProtected(1), lnLen ; + , laPropsAndValues(1), laPropsAndComments(1), lnLastClass, lnRecno, lcMethods, lcObjName, la_NombresObjsOle(1) + LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' + loLang = _SCREEN.o_FoxBin2Prg_Lang + STORE 0 TO lnCodError, lnLastClass + STORE '' TO laMethods(1), laCode(1), laProtected(1), laPropsAndComments(1) + STORE NULL TO loRegObj, loRegCab, loRegDataEnv, loRegCur - *-- Verificación de REPORTE VFP 9 - IF FCOUNT() < 75 OR EMPTY(FIELD("USER")) - *ERROR 'Report [' + (.c_InputFile) + '] is NOT VFP 9 Format! - Please convert to VFP 9 with MODIFY REPORT ' + JUSTFNAME((.c_InputFile)) - ERROR (TEXTMERGE(loLang.C_REPORT_NOT_IN_VFP9_FORMAT_LOC)) - ENDIF + USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG + THIS.AvanceDelProceso( 'Scanning FRX...', 1, 2, 1 ) - C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() - - *SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN_0 - *USE IN (SELECT("_TABLAORIG")) - SELECT * FROM _TABLAORIG ; - WHERE ObjType IN (1,25,26) ; - ORDER BY ObjType ASC ; - INTO CURSOR TABLABIN_0 READWRITE - - *-- Header - SELECT TABLABIN_0 - LOCATE FOR ObjType = 1 - IF FOUND() - loRegCab = NULL - SCATTER MEMO NAME loRegCab - - IF toFoxBin2Prg.l_NoTimestamps - loRegCab.TIMESTAMP = 0 + *-- Verificación de REPORTE VFP 9 + IF FCOUNT() < 75 OR EMPTY(FIELD("USER")) + *ERROR 'Report [' + (.c_InputFile) + '] is NOT VFP 9 Format! - Please convert to VFP 9 with MODIFY REPORT ' + JUSTFNAME((.c_InputFile)) + ERROR (TEXTMERGE(loLang.C_REPORT_NOT_IN_VFP9_FORMAT_LOC)) ENDIF - IF toFoxBin2Prg.l_ClearUniqueID - loRegCab.UNIQUEID = '' + + C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() + + *SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN_0 + *USE IN (SELECT("_TABLAORIG")) + SELECT * FROM _TABLAORIG ; + WHERE ObjType IN (1,25,26) ; + ORDER BY ObjType ASC ; + INTO CURSOR TABLABIN_0 READWRITE + + *-- Header + SELECT TABLABIN_0 + LOCATE FOR ObjType = 1 + IF FOUND() + loRegCab = NULL + SCATTER MEMO NAME loRegCab + + IF toFoxBin2Prg.l_NoTimestamps + loRegCab.TIMESTAMP = 0 + ENDIF + IF toFoxBin2Prg.l_ClearUniqueID + loRegCab.UNIQUEID = '' + ENDIF ENDIF - ENDIF - IF .l_ReportSort_Enabled - *-- ORDENADO - SELECT * FROM _TABLAORIG ; - WHERE ObjType NOT IN (1,25,26) ; - ORDER BY vpos,hpos ASC ; - INTO CURSOR TABLABIN READWRITE - ELSE - *-- SIN ORDENAR (Sólo para poder comparar con el original) - SELECT * FROM _TABLAORIG ; - WHERE ObjType NOT IN (1,25,26) ; - INTO CURSOR TABLABIN - ENDIF + IF .l_ReportSort_Enabled + *-- ORDENADO + SELECT * FROM _TABLAORIG ; + WHERE ObjType NOT IN (1,25,26) ; + ORDER BY vpos,hpos ASC ; + INTO CURSOR TABLABIN READWRITE + ELSE + *-- SIN ORDENAR (Sólo para poder comparar con el original) + SELECT * FROM _TABLAORIG ; + WHERE ObjType NOT IN (1,25,26) ; + INTO CURSOR TABLABIN + ENDIF - loRegObj = NULL - - - *-- Recorro los registros y genero el texto - IF VARTYPE(loRegCab) = "O" - .write_TXT_REPORTE( @loRegCab ) - ENDIF - - SELECT TABLABIN - - SCAN ALL loRegObj = NULL - SCATTER MEMO NAME loRegObj - IF toFoxBin2Prg.l_NoTimestamps - loRegObj.TIMESTAMP = 0 - ENDIF - IF toFoxBin2Prg.l_ClearUniqueID - loRegObj.UNIQUEID = '' + + *-- Recorro los registros y genero el texto + IF VARTYPE(loRegCab) = "O" + .write_TXT_REPORTE( @loRegCab ) ENDIF - .write_TXT_REPORTE( @loRegObj ) - ENDSCAN + SELECT TABLABIN - *-- Dataenvironment - SELECT TABLABIN_0 - LOCATE FOR ObjType = 25 - IF FOUND() - loRegDataEnv = NULL - SCATTER MEMO NAME loRegDataEnv + SCAN ALL + loRegObj = NULL + SCATTER MEMO NAME loRegObj - IF toFoxBin2Prg.l_NoTimestamps - loRegDataEnv.TIMESTAMP = 0 - ENDIF - IF toFoxBin2Prg.l_ClearUniqueID - loRegDataEnv.UNIQUEID = '' + IF toFoxBin2Prg.l_NoTimestamps + loRegObj.TIMESTAMP = 0 + ENDIF + IF toFoxBin2Prg.l_ClearUniqueID + loRegObj.UNIQUEID = '' + ENDIF + + .write_TXT_REPORTE( @loRegObj ) + ENDSCAN + + *-- Dataenvironment + SELECT TABLABIN_0 + LOCATE FOR ObjType = 25 + IF FOUND() + loRegDataEnv = NULL + SCATTER MEMO NAME loRegDataEnv + + IF toFoxBin2Prg.l_NoTimestamps + loRegDataEnv.TIMESTAMP = 0 + ENDIF + IF toFoxBin2Prg.l_ClearUniqueID + loRegDataEnv.UNIQUEID = '' + ENDIF + + .write_TXT_REPORTE( @loRegDataEnv ) ENDIF - .write_TXT_REPORTE( @loRegDataEnv ) + *-- Cursors and Relations + SELECT TABLABIN_0 + SCAN ALL FOR ObjType = 26 + loRegCur = NULL + SCATTER MEMO NAME loRegCur + + IF toFoxBin2Prg.l_NoTimestamps + loRegCur.TIMESTAMP = 0 + ENDIF + IF toFoxBin2Prg.l_ClearUniqueID + loRegCur.UNIQUEID = '' + ENDIF + + .write_TXT_REPORTE( @loRegCur ) + ENDSCAN ENDIF - *-- Cursors and Relations - SELECT TABLABIN_0 - SCAN ALL FOR ObjType = 26 - loRegCur = NULL - SCATTER MEMO NAME loRegCur - - IF toFoxBin2Prg.l_NoTimestamps - loRegCur.TIMESTAMP = 0 - ENDIF - IF toFoxBin2Prg.l_ClearUniqueID - loRegCur.UNIQUEID = '' - ENDIF - - .write_TXT_REPORTE( @loRegCur ) - ENDSCAN - - *-- Genero el FR2 .AvanceDelProceso( 'Writing FR2...', 2, 2, 1 ) + IF .l_Test toModulo = C_FB2PRG_CODE ELSE @@ -14422,17 +14515,22 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg DODEFAULT( @toModulo, @toEx, @toFoxBin2Prg ) TRY - 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 ; - , loTable AS CL_DBF_TABLE OF 'FOXBIN2PRG.PRG' ; - , loDBFUtils AS CL_DBF_UTILS OF 'FOXBIN2PRG.PRG' - LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' - loLang = _SCREEN.o_FoxBin2Prg_Lang - STORE NULL TO loTable, loDBFUtils - STORE 0 TO lnCodError - loDBFUtils = CREATEOBJECT('CL_DBF_UTILS') - WITH THIS AS c_conversor_dbf_a_prg OF 'FOXBIN2PRG.PRG' + IF NOT toFoxBin2Prg.l_ProcessFiles THEN + .write_OutputFile( '', .c_OutputFile, @toFoxBin2Prg ) + EXIT && Si se indicó no procesar, se sale aquí. (Modo de simulación) + 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 ; + , loTable AS CL_DBF_TABLE OF 'FOXBIN2PRG.PRG' ; + , loDBFUtils AS CL_DBF_UTILS OF 'FOXBIN2PRG.PRG' + LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' + loLang = _SCREEN.o_FoxBin2Prg_Lang + STORE NULL TO loTable, loDBFUtils + STORE 0 TO lnCodError + loDBFUtils = CREATEOBJECT('CL_DBF_UTILS') + *-- EVALUAR OPCIONES ESPECÍFICAS DE DBF .AvanceDelProceso( 'Scanning DBF Structure...', 1, 3, 1 ) @@ -14596,100 +14694,116 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg #ENDIF TRY - LOCAL lnCodError, laDatabases(1), lnDatabases_Count, lcEventsFile, lcExternalHeader, lcCodigo ; - , lnClassCount, laClasses(1,3) ; - , loConnection AS CL_DBC_CONNECTION OF 'FOXBIN2PRG.PRG' ; - , loTable AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG' ; - , loView AS CL_DBC_VIEW OF 'FOXBIN2PRG.PRG' - - STORE NULL TO loRelation, loView, loTable - STORE 0 TO lnCodError, lnDatabases_Count, lnClassCount - STORE '' TO laDatabases, lcEventsFile, lcExternalHeader, laClasses, lcCodigo, C_FB2PRG_CODE - WITH THIS AS c_conversor_dbc_a_prg OF 'FOXBIN2PRG.PRG' + LOCAL lnCodError, laDatabases(1), lnDatabases_Count, lcEventsFile, lcExternalHeader, lcCodigo ; + , lnClassCount, laClasses(1,3) ; + , loConnection AS CL_DBC_CONNECTION OF 'FOXBIN2PRG.PRG' ; + , loTable AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG' ; + , loView AS CL_DBC_VIEW OF 'FOXBIN2PRG.PRG' + + STORE NULL TO loRelation, loView, loTable + STORE 0 TO lnCodError, lnDatabases_Count, lnClassCount + STORE '' TO laDatabases, lcEventsFile, lcExternalHeader, laClasses, lcCodigo, C_FB2PRG_CODE + lnDatabases_Count = ADATABASES(laDatabases) USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS TABLABIN - toDatabase = CREATEOBJECT('CL_DBC') - toDatabase._DBC = .c_InputFile - toDatabase.read_DBC_Header() + + IF toFoxBin2Prg.l_ProcessFiles THEN + toDatabase = CREATEOBJECT('CL_DBC') + toDatabase._DBC = .c_InputFile + toDatabase.read_DBC_Header() - *-- Verifico si hay archivo de eventos, y si hay uno definido pero no existe el archivo, - *-- creo uno temporalmente para poder abrir la BDD y luego lo elimino. - IF toDatabase._DBCEvents AND NOT EMPTY(toDatabase._DBCEventFilename) THEN - *-- El archivo de eventos puede tener path relativo o absoluto - *-- Ajusto la ruta si no es absoluta - IF LEN(toDatabase._DBCEventFilename) > 1 ; - AND LEFT(LTRIM(toDatabase._DBCEventFilename),2) <> '\\' ; - AND SUBSTR(LTRIM(toDatabase._DBCEventFilename),2,1) <> ':' THEN - lcEventsFile = ADDBS( JUSTPATH(.c_InputFile) ) + toDatabase._DBCEventFilename - ELSE - lcEventsFile = toDatabase._DBCEventFilename - ENDIF - IF FILE(lcEventsFile) THEN - lcEventsFile = '' - ELSE - STRTOFILE( '', lcEventsFile ) - COMPILE (lcEventsFile) - ENDIF - ENDIF - - OPEN DATABASE (.c_InputFile) SHARED NOUPDATE - - .AvanceDelProceso( 'Analyzing DBC metadata...', 1, 2, 1 ) - - C_FB2PRG_CODE = C_FB2PRG_CODE + toDatabase.toText(@toFoxBin2Prg) - - *-- Header - IF toFoxBin2Prg.n_UseClassPerFile > 0 THEN - .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, .F., .F., @lcExternalHeader ) - - *-- Connections - FOR EACH loConnection IN toDatabase._Connections FOXOBJECT - lnClassCount = lnClassCount + 1 - DIMENSION laClasses(lnClassCount,3) - laClasses(lnClassCount,1) = LOWER( loConnection._Name ) - laClasses(lnClassCount,2) = loConnection._ToText - laClasses(lnClassCount,3) = 'connection' - .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, laClasses(lnClassCount,1), laClasses(lnClassCount,3), @lcExternalHeader ) - ENDFOR - - *-- Tables - FOR EACH loTable IN toDatabase._Tables FOXOBJECT - lnClassCount = lnClassCount + 1 - DIMENSION laClasses(lnClassCount,3) - laClasses(lnClassCount,1) = LOWER( loTable._Name ) - laClasses(lnClassCount,2) = loTable._ToText - laClasses(lnClassCount,3) = 'table' - .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, laClasses(lnClassCount,1), laClasses(lnClassCount,3), @lcExternalHeader ) - ENDFOR - - *-- Views - FOR EACH loView IN toDatabase._Views FOXOBJECT - lnClassCount = lnClassCount + 1 - DIMENSION laClasses(lnClassCount,3) - laClasses(lnClassCount,1) = LOWER( loView._Name ) - laClasses(lnClassCount,2) = loView._ToText - laClasses(lnClassCount,3) = 'view' - .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, laClasses(lnClassCount,1), laClasses(lnClassCount,3), @lcExternalHeader ) - ENDFOR - - *-- Stored Procedures - IF NOT EMPTY(toDatabase._StoredProcedures) THEN - lnClassCount = lnClassCount + 1 - DIMENSION laClasses(lnClassCount,3) - laClasses(lnClassCount,1) = LOWER( 'sp' ) - laClasses(lnClassCount,2) = toDatabase._StoredProcedures - laClasses(lnClassCount,3) = 'storedprocedures' - .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, laClasses(lnClassCount,1), laClasses(lnClassCount,3), @lcExternalHeader ) + *-- Verifico si hay archivo de eventos, y si hay uno definido pero no existe el archivo, + *-- creo uno temporalmente para poder abrir la BDD y luego lo elimino. + IF toDatabase._DBCEvents AND NOT EMPTY(toDatabase._DBCEventFilename) THEN + *-- El archivo de eventos puede tener path relativo o absoluto + *-- Ajusto la ruta si no es absoluta + IF LEN(toDatabase._DBCEventFilename) > 1 ; + AND LEFT(LTRIM(toDatabase._DBCEventFilename),2) <> '\\' ; + AND SUBSTR(LTRIM(toDatabase._DBCEventFilename),2,1) <> ':' THEN + lcEventsFile = ADDBS( JUSTPATH(.c_InputFile) ) + toDatabase._DBCEventFilename + ELSE + lcEventsFile = toDatabase._DBCEventFilename + ENDIF + IF FILE(lcEventsFile) THEN + lcEventsFile = '' + ELSE + STRTOFILE( '', lcEventsFile ) + COMPILE (lcEventsFile) + ENDIF ENDIF - lcExternalHeader = lcExternalHeader + CR_LF + OPEN DATABASE (.c_InputFile) SHARED NOUPDATE + + .AvanceDelProceso( 'Analyzing DBC metadata...', 1, 2, 1 ) + + C_FB2PRG_CODE = C_FB2PRG_CODE + toDatabase.toText(@toFoxBin2Prg) + + *-- Header + IF toFoxBin2Prg.n_UseClassPerFile > 0 THEN + .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, .F., .F., @lcExternalHeader ) + + *-- Connections + FOR EACH loConnection IN toDatabase._Connections FOXOBJECT + lnClassCount = lnClassCount + 1 + DIMENSION laClasses(lnClassCount,3) + laClasses(lnClassCount,1) = LOWER( loConnection._Name ) + laClasses(lnClassCount,2) = loConnection._ToText + laClasses(lnClassCount,3) = 'connection' + .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, laClasses(lnClassCount,1), laClasses(lnClassCount,3), @lcExternalHeader ) + ENDFOR + + *-- Tables + FOR EACH loTable IN toDatabase._Tables FOXOBJECT + lnClassCount = lnClassCount + 1 + DIMENSION laClasses(lnClassCount,3) + laClasses(lnClassCount,1) = LOWER( loTable._Name ) + laClasses(lnClassCount,2) = loTable._ToText + laClasses(lnClassCount,3) = 'table' + .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, laClasses(lnClassCount,1), laClasses(lnClassCount,3), @lcExternalHeader ) + ENDFOR + + *-- Views + FOR EACH loView IN toDatabase._Views FOXOBJECT + lnClassCount = lnClassCount + 1 + DIMENSION laClasses(lnClassCount,3) + laClasses(lnClassCount,1) = LOWER( loView._Name ) + laClasses(lnClassCount,2) = loView._ToText + laClasses(lnClassCount,3) = 'view' + .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, laClasses(lnClassCount,1), laClasses(lnClassCount,3), @lcExternalHeader ) + ENDFOR + + *-- Stored Procedures + IF NOT EMPTY(toDatabase._StoredProcedures) THEN + lnClassCount = lnClassCount + 1 + DIMENSION laClasses(lnClassCount,3) + laClasses(lnClassCount,1) = LOWER( 'storedproceduressource' ) + laClasses(lnClassCount,2) = toDatabase._StoredProcedures + laClasses(lnClassCount,3) = 'database' + .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, laClasses(lnClassCount,1), laClasses(lnClassCount,3), @lcExternalHeader ) + ENDIF + + lcExternalHeader = lcExternalHeader + CR_LF + ENDIF + + ELSE + *-- No procesar, solo reportar + _TALLY = 0 + SELECT LOWER(TB.ObjectName), '', LOWER(TB.ObjectType) ; + FROM TABLABIN TB ; + WHERE TB.ParentId = 1 AND ( TB.ObjectType IN (PADR('View',10), PADR('Table',10), PADR('Connection',10) ) ; + OR TB.ObjectType = PADR('Database',10) AND TB.ObjectName = PADR('StoredProceduresSource',128) AND NOT EMPTY(TB.Code) ) ; + INTO ARRAY laClasses + lnClassCount = _TALLY ENDIF *-- Genero el DC2 - .AvanceDelProceso( 'Writing DC2...', 2, 2, 1 ) lcOutputFile = .c_OutputFile - lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + lcExternalHeader + C_FB2PRG_CODE + + IF toFoxBin2Prg.l_ProcessFiles THEN + .AvanceDelProceso( 'Writing DC2...', 2, 2, 1 ) + lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + lcExternalHeader + C_FB2PRG_CODE + ENDIF IF .l_Test *FOR I = 1 TO lnClassCount @@ -14766,33 +14880,38 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg #ENDIF TRY - LOCAL lnCodError, lnLen - LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' - loLang = _SCREEN.o_FoxBin2Prg_Lang - STORE 0 TO lnCodError - WITH THIS AS c_conversor_mnx_a_prg OF 'FOXBIN2PRG.PRG' - USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG - SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN - USE IN (SELECT("_TABLAORIG")) - .AvanceDelProceso( 'Analyzing MNX...', 1, 2, 1 ) + IF toFoxBin2Prg.l_ProcessFiles THEN + LOCAL lnCodError, lnLen + LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' + loLang = _SCREEN.o_FoxBin2Prg_Lang + STORE 0 TO lnCodError - *-- Verificación de menú VFP 9 - IF FCOUNT() < 25 OR EMPTY(FIELD("RESNAME")) OR EMPTY(FIELD("SYSRES")) - *ERROR 'Menu [' + (.c_InputFile) + '] is NOT VFP 9 Format! - Please convert to VFP 9 with MODIFY MENU ' + JUSTFNAME((.c_InputFile)) - ERROR (TEXTMERGE(loLang.C_MENU_NOT_IN_VFP9_FORMAT_LOC)) + USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG + SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN + USE IN (SELECT("_TABLAORIG")) + .AvanceDelProceso( 'Analyzing MNX...', 1, 2, 1 ) + + *-- Verificación de menú VFP 9 + IF FCOUNT() < 25 OR EMPTY(FIELD("RESNAME")) OR EMPTY(FIELD("SYSRES")) + *ERROR 'Menu [' + (.c_InputFile) + '] is NOT VFP 9 Format! - Please convert to VFP 9 with MODIFY MENU ' + JUSTFNAME((.c_InputFile)) + ERROR (TEXTMERGE(loLang.C_MENU_NOT_IN_VFP9_FORMAT_LOC)) + ENDIF + + *-- Header + C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() + + toMenu = CREATEOBJECT('CL_MENU') + toMenu.get_DataFromTablabin() + C_FB2PRG_CODE = C_FB2PRG_CODE + toMenu.toText() ENDIF - *-- Header - C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() - - toMenu = CREATEOBJECT('CL_MENU') - toMenu.get_DataFromTablabin() - C_FB2PRG_CODE = C_FB2PRG_CODE + toMenu.toText() - *-- Genero el MN2 - .AvanceDelProceso( 'Writing MN2...', 2, 2, 1 ) + IF toFoxBin2Prg.l_ProcessFiles THEN + .AvanceDelProceso( 'Writing MN2...', 2, 2, 1 ) + ENDIF + IF .l_Test toMenu = C_FB2PRG_CODE ELSE @@ -16882,7 +17001,7 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE CASE C_STORED_PROC_I $ tcLine .analizarBloque_SP( @tcLine, @taCodeLines, @I, tnCodeLines ) - .add_DBCMember('storedprocedures.sp') + .add_DBCMember('database.storedproceduressource') CASE '' $ tcLine .analizarBloque_Comment( @tcLine, @taCodeLines, @I, tnCodeLines ) @@ -24388,6 +24507,7 @@ DEFINE CLASS CL_LANG AS Custom C_EXTENSION_RECONFIGURATION_LOC = "" C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES_LOC = "" C_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC = "" + C_EXTERNAL_MEMBER_NAME_WAS_NOT_FOUND_LOC = "" C_EXTERNAL_PARAMETERS_LOC = "" C_FIELD_NOT_FOUND_ON_FILE_STRUCTURE_LOC = "" C_FILE_DOESNT_EXIST_LOC = "" @@ -24402,6 +24522,7 @@ DEFINE CLASS CL_LANG AS Custom C_GENERATED_FILE_SIZE_LOC = "" C_GENERATING_BINARY_LOC = "" C_INCLUDING_CLASS_LOC = "" + C_INCLUDING_MEMBER_LOC = "" C_INCORRECT_VFP9_VERSION__MISSING_SP1_LOC = "" C_INTERACTIVE_DIRECTORY_SELECTION_LOC = "" C_IS_A_FILE_LOC = "" @@ -24534,6 +24655,7 @@ DEFINE CLASS CL_LANG AS Custom .C_EXTENSION_RECONFIGURATION_LOC = "Extension Reconfiguration:" .C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES_LOC = "Nombre de classe externe (<>) ne correspond pas classes trouvées (<>) pour le fichier [<>]" .C_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC = "Aucune classe externe est trouvé" + .C_EXTERNAL_MEMBER_NAME_WAS_NOT_FOUND_LOC = "Nom de membre externe n'a pas été trouvé" .C_EXTERNAL_PARAMETERS_LOC = "PARAMÈTRES EXTERNES" .C_FIELD_NOT_FOUND_ON_FILE_STRUCTURE_LOC = "Champ [<< laProps (I) >>] ne trouve pas dans la structure du fichier DBF <<('TABLABIN')>>" .C_FILE_DOESNT_EXIST_LOC = "Fichier ne existe pas:" @@ -24551,7 +24673,8 @@ DEFINE CLASS CL_LANG AS Custom .C_FOXBIN2PRG_WARN_CAPTION_LOC = "FOXBIN2PRG: AVERTISSEMENT!" .C_GENERATED_FILE_SIZE_LOC = "Taille du fichier généré" .C_GENERATING_BINARY_LOC = "Génération Binaire" - .C_INCLUDING_CLASS_LOC = "Including class" + .C_INCLUDING_CLASS_LOC = "classe, y compris" + .C_INCLUDING_MEMBER_LOC = "membres, y compris" .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_INTERACTIVE_DIRECTORY_SELECTION_LOC = "Sélection répertoire interactive" .C_IS_A_FILE_LOC = "est un FICHIER" @@ -24620,6 +24743,7 @@ DEFINE CLASS CL_LANG AS Custom .C_EXTENSION_RECONFIGURATION_LOC = "Reconfiguración de extensión:" .C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES_LOC = "El conteo de clases externas (<>) no coincide con la cantidad encontrada (<>) para el archivo [<>]" .C_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC = "No se encontró la clase externa" + .C_EXTERNAL_MEMBER_NAME_WAS_NOT_FOUND_LOC = "No se encontró el miembro externo" .C_EXTERNAL_PARAMETERS_LOC = "PARÁMETROS EXTERNOS" .C_FIELD_NOT_FOUND_ON_FILE_STRUCTURE_LOC = "No se encontró el campo [<>] en la estructura del archivo <>" .C_FILE_DOESNT_EXIST_LOC = "El archivo no existe:" @@ -24639,6 +24763,7 @@ DEFINE CLASS CL_LANG AS Custom .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 '<>'" .C_INCLUDING_CLASS_LOC = "Incluyendo clase" + .C_INCLUDING_MEMBER_LOC = "Incluyendo miembro" .C_INCORRECT_VFP9_VERSION__MISSING_SP1_LOC = "Versión Incorrecta de VFP 9 - Falta el SP1! Esperado: 3504 o posterior, actual: " + VERSION(4) .C_INTERACTIVE_DIRECTORY_SELECTION_LOC = "Selección Interactiva de Directorio" .C_IS_A_FILE_LOC = "es un ARCHIVO" @@ -24706,6 +24831,7 @@ DEFINE CLASS CL_LANG AS Custom .C_EXTENSION_RECONFIGURATION_LOC = "Nneukonfiguration der Erweiterungen:" &&wir wollen es mal nicht übertreiben, mit den zusammengesetzten Substantiven .C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES_LOC = "Die Anzahl externee Klassen (<< toModulo._ExternalClasses_Count >>) entspricht nicht der der gefunden Klassen (<< toModulo._Clases_Count >>), Datei: [<< toFoxBin2Prg.c_InputFile >>]" .C_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC = "Keine externe Klasse gefunden" + .C_EXTERNAL_MEMBER_NAME_WAS_NOT_FOUND_LOC = "Externe Mitglied wurde nicht gefunden" .C_EXTERNAL_PARAMETERS_LOC = "EXTERNE PARAMETER" .C_FIELD_NOT_FOUND_ON_FILE_STRUCTURE_LOC = "Feld [<>] nicht in der Struktur von Datei <> gefunden" .C_FILE_DOESNT_EXIST_LOC = "Datei existiert nicht:" @@ -24724,6 +24850,7 @@ DEFINE CLASS CL_LANG AS Custom .C_GENERATED_FILE_SIZE_LOC = "Generierte Dateigröße" .C_GENERATING_BINARY_LOC = "Gene Binary" .C_INCLUDING_CLASS_LOC = "einschließlich Klasse" + .C_INCLUDING_MEMBER_LOC = "inklusive Mitglied" .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_INTERACTIVE_DIRECTORY_SELECTION_LOC = "Auswählen interaktive Verzeichnis" .C_IS_A_FILE_LOC = "ist eine DATEI" @@ -24792,6 +24919,7 @@ DEFINE CLASS CL_LANG AS Custom .C_EXTENSION_RECONFIGURATION_LOC = "Extension Reconfiguration:" .C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES_LOC = "External class count (<>) does not match found classes (<>) for file [<>]" .C_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC = "External class was not found" + .C_EXTERNAL_MEMBER_NAME_WAS_NOT_FOUND_LOC = "External member name was not found" .C_EXTERNAL_PARAMETERS_LOC = "EXTERNAL PARAMETERS" .C_FIELD_NOT_FOUND_ON_FILE_STRUCTURE_LOC = "Field [<>] not found in structure of file <>" .C_FILE_DOESNT_EXIST_LOC = "File does not exist:" @@ -24810,6 +24938,7 @@ DEFINE CLASS CL_LANG AS Custom .C_GENERATED_FILE_SIZE_LOC = "Generated file size" .C_GENERATING_BINARY_LOC = "Generating Binary" .C_INCLUDING_CLASS_LOC = "Including class" + .C_INCLUDING_MEMBER_LOC = "Including member" .C_INCORRECT_VFP9_VERSION__MISSING_SP1_LOC = "Incorrect VFP 9 version - Missing SP1! Expected: 3504 or later, actual: " + VERSION(4) .C_INTERACTIVE_DIRECTORY_SELECTION_LOC = "Interactive Directory Selection" .C_IS_A_FILE_LOC = "is a FILE" From 77ed1eaf7470d3e0eb3df5cbb760b2fc56147b8c Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 26 Mar 2015 00:53:10 +0100 Subject: [PATCH 070/123] - Arreglo de CR_LF sobrante en algunos archivos FR2/LB2 --- foxbin2prg.prg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 93d0ae1..b8623e9 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -10040,7 +10040,7 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin CASE loReg.ObjType == "1" loReg.TAG = .decode_SpecialCodes_1_31( loReg.TAG ) CASE INLIST(loReg.ObjType, "25", "26") && Dataenvironment, cursors and relations - loReg.TAG = SUBSTR(loReg.TAG,3) && Quito el ENTER agregado antes + loReg.TAG = IIF( EMPTY( CHRTRAN( loReg.TAG, CR_LF+C_TAB, '') ), '', SUBSTR(loReg.TAG,3) ) && Quito el ENTER agregado antes OTHERWISE loReg.TAG = .decode_SpecialCodes_1_31( loReg.TAG ) ENDCASE @@ -12667,7 +12667,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + " " IF INLIST(toReg.ObjType, 25, 26) && Dataenvironment, cursors and relations - C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + " " + C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + " " C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + " " ELSE C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + " " From 80baca7f031740a7b12b8f782c5cd4c3f42fa6e2 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 26 Mar 2015 01:14:42 +0100 Subject: [PATCH 071/123] EXE --- foxbin2prg.exe | Bin 572173 -> 574844 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 6acbb262c3136d3b37dacc5973228ebeb0eb60a9..d201ed7229716197b4c7fb6418ecd3320d0905f0 100644 GIT binary patch delta 43814 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 From 26e135432828c0355f171d368cb85b93ce398199 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 26 Mar 2015 01:36:26 +0100 Subject: [PATCH 072/123] - Borrar archivo ERR cuando se usa UseClassPerFile --- foxbin2prg.exe | Bin 574844 -> 574845 bytes foxbin2prg.prg | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index d201ed7229716197b4c7fb6418ecd3320d0905f0..8df1f3a4360c86d2bc3e7180a8b70ab90ded12f4 100644 GIT binary patch delta 14943 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 U)7pO`H=S9pA2pt;&0RJ0|GEq(9RL6T delta 15094 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 VXRWpWL~gpUo(DAEs`c3#`X6LTN+bXP diff --git a/foxbin2prg.prg b/foxbin2prg.prg index b8623e9..47be5f4 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -2469,7 +2469,6 @@ DEFINE CLASS c_foxbin2prg AS SESSION .writeLog( '> InputFile ' + loLang.C_IS_A_FILE_LOC ) tc_InputFile = LOCFILE(tc_InputFile) - ERASE ( tc_InputFile + '.ERR' ) DO CASE CASE .l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile) @@ -2882,6 +2881,8 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDCASE ENDIF + ERASE ( .c_InputFile + '.ERR' ) + IF NOT EMPTY(tcOriginalFileName) tcOriginalFileName = loFSO.GetAbsolutePathName( tcOriginalFileName ) ENDIF From 26129d1d3e7321005082aeb0e6910503afedbaa3 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 26 Mar 2015 01:58:58 +0100 Subject: [PATCH 073/123] =?UTF-8?q?-=20Actualizaci=C3=B3n=20de=20cr=C3=A9d?= =?UTF-8?q?itos,=20EXE=20y=20archivo=20de=20versiones?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 9 ++++++--- foxbin2prg.exe | Bin 574845 -> 563069 bytes foxbin2prg.prg | 4 ++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 3252d7e..5506bf2 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -3,7 +3,7 @@ Lparameters toUpdateInfo Local lcNote With toUpdateInfo .VersionNumber = 'v1.19.42' - .VersionDate = Date(2015,03,01) + .VersionDate = Date(2015,03,26) .SourceFileUrl = 'http://vfpxrepository.com/dl/thorupdate/Projects/FoxBin2Prg/FoxBin2Prg.Zip' .Link = 'http://vfpx.codeplex.com/wikipage?title=FoxBin2PRG' @@ -17,7 +17,7 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg Change History ------------------------------------------------------------- -2015/03/01 v1.19.42 +2015/03/26 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) - Bug Fix scx/vcx: Process only one TEXT/ENDTEXT nesting level because TEXT/ENDTEXT can't be nested (Lutz Scheffler) @@ -34,7 +34,7 @@ Change History ------------------------------------------------------------- - Added DOS errOut output support and implemented in writeErrorLog when logging errors - Feature: Added full support for *? file masks for multi-processing files of the same extension - Feature: Added new parameter to allow alternative main CFG (Lutz Scheffler) -- Feature: Added new get_Target() API method for obtaining information about processed files (Lutz Scheffler) +- Feature: Added new get_Processed() API method for obtaining information about processed files (Lutz Scheffler) - Feature: Added new file processing output to DOS stdOut (Lutz Scheffler) - Bug Fix: Fixed processing cancelation with Esc key - Feature: Sort table/view fields alphabetically to facilitate diffing and merging, while maintaining a list with the original field order for correct DBC regeneration (Ryan Harris) @@ -42,6 +42,9 @@ Change History ------------------------------------------------------------- - Bug Fix vw: Views now save/restore their Path and RecordCount properties - Feature: New default FoxBin2Prg App icon and background image, configurable with a new CFG "BackgroundImage" setting - Bug Fix mnx: Empty Pad name is not kept when regenerating a menu defined with and empty Pad name (Lutz Scheffler) +- Feature: New property "l_ProcessFiles" that allow setting to .F. when using foxbin2prg as object to get Processing file info with get_Processed method without actual processing +- Bug Fix frx/lbx: Trimmed some extra CR,LF,TAB from FR2/LB2 tag that where included in previous versions (Ryan Harris) +- Bug Fix scx/vcx/dbc: Delete ERR files when processing with UseClassPerFile switch (Ryan Harris) 2015/01/18 v1.19.41 - Bug Fix db2: Erroneous detection of Invalid Table when size is less than 328 bytes. Lower limit was changed to 65 bytes. diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 8df1f3a4360c86d2bc3e7180a8b70ab90ded12f4..0e5efe67a6e940357e33e61a2e2e5eb4974a7fb2 100644 GIT binary patch delta 8501 zcmciHb#zqczQ*xq_8!@@_as;nq`12iv^a!Nf>T^7XfLEtg0};-6o&?DiA|fkG$}2p%YMziH1|cinT&UF-gJSnFk;&ySIJ%e*qY8kg_Y%Dk&HxLmoXW^|Qu zb(vb*RmJ!vV(QLxRi(#%h=cZn|mb4_jbp5Xv=v*^tf~)ZV6h3Srh4JElJYf)S$!Yn^Q@0g}NNBRc znwCDkw0qr$9mcsbq@9G^xzjq6`_FfFt-GJKl^JYWt8U%s#!+qB{5|}K9gO-9f8alT zUS#8cD*XSvwo{P|M#*%a7mFQTEY?LcXeP}~^U%Br#bSMZa=TV1%$)4o(>M6#X{qRC z=~qMIN~tmV_7y1ym#iz!oG8sok|HrTuzn_Yy(zWDK|F>0(=F)(JRbi}Zh1!g>QG5WGeM0T2bPgZI9mw6ENmuddv_qH+CZ+Nw6fW?Do#chjd0%`L zUm_oSA-%*Lto(mSZ)hIA0rXXoFQtO7q)<#h)Px-Vnxn?NRMpAuH&SlQgG%t%BU%yc z3A*SVxBfL+SqctzTrM4_RmFTe^n$#@aH%fNjBk-wnJ&fP9QYi0uG^(|alSN@k9%C| zjEi8$>yq2&QV(1TS0`7rTp->esAkVQ~`W)B7XUWIt*#sPg?SM;W zh)dIP46aVD5}MWt?jamU?wih~#kej0k-UIGWi{@M&y#m^WSiZb|E?4sfwQ??+Qk!= zV_zPZZs&C=zen1R({Wgp%DPkw8{DYf$SJhd*oX6!bLj|e6Ar;|$XiFbv=i6hvL%xz zPIRfAPm0Cc$eX@$X^Af=4W)1$ES%!fcAoGBK11#}-KEnw?M|IU4*$lbJ9q}JLY|V$ z$Yn{1bb1GQ>1&t5Y%V7sdY1f7dP9S8J3NYfB@+$z#-1=km75!S6{IkX$)X2%=Uqc_ z0ci~WguJP(q0x9IP9g8@VCZ|i0DC$bs?*C*0=|idk%#s%lruy!>Etr<%TEl|$Jua! z{)TSG8S0Jm;<4KXwm*TR#?hlUwigPY<%$gjUJ zv>*4ug-02x^(7yQ2jjlv7qkE~;Ac3`XhY5zL*aNdjwBx%V+56t!UPJhDf}?bP;vY< zK0uy3-cWTsAGcd%DC;sqv(oWh$92fR&<^8Ya5DMG3PWe{Mf{xn-_!?eIK0$X_uT7&ItMBgbFo18{G=j~tR@Xd)hr z%aKpqGV~oDfx~X|0e20p$CGgba_j@n3SNsBkk33aWM-89hC?44%J9@sCcF(tk%Nz) z8OlXrABB>shUUHI65!wPN%A1mR44ofuOeUdnEC?y{8Co0sce?1Y1qLrG_|#q zsmXXWenM_k+SEKe7Jo_ptgfjA_zYe~PFK%VE*2!`aU*iJC{u;-4IC2{H1({3scIDN zQ79R0>et3}0K55WI!#QSY-VZ@4#hXf?ODx?#@X>G@&eiqI48bE-r3vK68srXAy;MU zYZfk@!oA3~zcF{%ba`33B-|@G233<;+Q+2aQKj8c15~ob{!HaPx za(~(YywqX*{~oNnU}_kJ-8|tMIo}miTkr|og8cLErY_^>_z8JfvZ*{-nHL!S){@WM z=RUx1VLQcC@rS0m;-a_*`S~MLBXK2M^s%W6PfUG_s|FbV15Ztjd&ViIP>(0DDcrHe3%SzaMa`QZ|kdk0)QJO~lJ^&JefSWN~XczKExg zN0oHzcU(EhaJd8YuIAQ|x1^8pQu3zOZe7EB@dI-Ec5cOIXJWze{bmNtVrP#FfGolE)?qF6XaDa z21ekvIElP`q+1K|KzxJz={UE};YoNS*vXKn>@bGGoURJZbG^2n2i zfra6;6*;wxM>B9eTqDw>6E!@Vo|ms2Hfwq`u#ra>@GQKV9N*rfHu<>z2Po`MLpP7s z=aW+LMDoI39(nU~dKpeHk&ncBR2f&q-j6*x9OqGg+#dS|coZ1s(ONtLN0D2O^ymRz zjK`A)jq#{-0qHPKAa|eaQEZUHLkh>@JqnrS(Keiw;juc|w}=iDWV*#Q$ssE}>V{)+ z6uI+yj~3u5csjZJW{u^!LkX(4MSE;xSexH0{h*vd=vjfN3hk6x1(yJDDBtA}V zJtIhuC>)?LafVliXVZZa3_>`SoO_{Hb#Nwz(?;Z^MP5z7g>Z?*Uj4qzs~>SqobgAm zvaa>&1pY5vlRR*3v#>L-8JRj|iW(;<9)a`EXXBl5rF^Sy=|&@+q_o3m9CF+%daP zIdE${k=%sEWO2L}k0E!i>eEvEH$15->+ch_eR@IRJO$P9>8)s=N|oiV#SO_v-|?vh zPQk~?y&L&h|Ff9D4Ptzn%j$9{P8+V{f(jP!(r|{?9qWAh`m#@96&T1EO|M^5C`-m@OQmos4i*JbV=UF6@Pltmdigv$_?@K`9FEh^x0L*YrPnwQ zj#ywRcA=&4YJ3gx4D$X(mh$4V_~24YYnEAx!Bz0-HI|xf;0)mCwDEr!n6c4f){~m^ zgp#a8`_W3g&A5)2kyjkBR35j*H^@ncEY-vvakgJ9^`JGvUGO*Ld`B&{!2NMM^5tW^ zCmxOi$GHS&ERDo-ax(tk2K_J50Se4WT0vfY)zVpYjsX3-b_A6D}f*4 zo%bzmdSa>J`#f+CN%CC|!etB!Lx5G`zJ!n;Ne*6`A z7Of^Ohrp^3niR<8T+y&soRQUjy<3+h7cN6?o4`@vmv|ES;C8?E;7s|rEadrn z{JM&Z<2HN!8gke#yB;?+o=1*8$r;9R_%rhObAF8uQkYKR!bQJ!UGggt&&J7Q^Oj$C z@KIclJm8^U)$6nM#&tYug88HPnow8@4raF15ii7V$nk7xmg58Xd|q2ki`oilz;uj1A+IiNs{wWj@U32ZZ(s-YfI=LFwhe5ZY;3DUG#d%Lys52x zZEOw4TXB8zgbud0;8S=fc}+)Kzu^lwiCnO=t@}6$zt_dqxbC(xHsm*A6`lJkF}KrPr}8?M`qaSgOB0I4UaT;d!_# z*?rtro)~_1#b2M{%`V#-k8k2~2RcOL*1GrR}qlUCD z_%sfZ=R`Q_iZA06R?H!Mcv7;t4pKd?nh^DZCu-Xy#~d8%MR9F>c^n~?USHpw)vgQ43kfY|!nM^3mCm;CK(KtK=@BGYBixG4X55oh<9mY92hJVEA#ygrn z(NU2W++g@;a^!RxK8IVAn}6+S08YYB<~mCK&e1x28!{XCN5$Ud9>W932}VHicv^AB|9haKKcIaS*6@Un$a``I^a|%G z!H-1bJNW~e-t(mpEleR_y#$DjetJIn{g}h>F9uF;zZoB zQGj0|Xl;3INyh(tAhB0K!zuJG$@b`@fIPG_I2KRs6VRNY0X@VU@d-| zbI9{n1r*VqH6h+bF19V8Yxp2;OFnZTpn4s+T&$ek2LtMPHlVq{h z5N*Jd@Z1U^`n*zz%5~=Y&!$k}-4M0E8=@B!{N;GjVooJLy;=riKTafH%dipe&Ux;Gd*KHenDQ&k5*lAU;Lb$!gjuI1S@1*d#hWs*}nJA#W;cQk&Uu!Ky!2b zFH&d;;@A$4WNLka_mGdXdtJjg?oL~~@AYU5o6|T(y%3x}nVl}1%LNP~*>JClUKMBW zIGk@x0lbPllzl>VZrE=45P1pvg#KlDE>0ysVxN#uj_cotLLD{=^Vuk*y?H;{eR3@O zg6@$F5_miLdLc_s*(VIc<=Ge1U|+C^eZg=%ne1XO(7H1Je}J2j-MuVjU>QCJS0#^+ zv-BaJiuaOJS(a}NQkYAjJU{4OXW1RfvU(MMYaCA)Z>cNZh|5f1SDlcmi#3{NL-V^MnqM`K-M70n_x=&#O#kwV^^mgccW zi^K!*8FG4-O{ulGL2+yHSXM}V>M%FpL*!Mgcna2K#e^S_zhy;Z)|0lRy`DUu1;`G3 z0w1Qi|)8X^veoVjnaU@P4XJj_5-iR9#Hz${S5VZ9{48P$}7{v5g znAxvXW9DkygWQqXD+%|-Gs&q;PVr1uBXJ~?Q!G^=8jIH=e;fRBdx-;~a!f7|^0`hN+d=c+5S8$^iY8X%^2DW>QgyFaq zx!!CBo=c2ug(#dPPhg<%rwu%KKRKR(LW~Pt@J{k2{zs`19)&}rLe!mcV@^VkTvqs^ F{|1fD6siCK delta 17767 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 diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 47be5f4..8f90e5d 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -153,6 +153,8 @@ * 22/03/2015 FDBOZZO v1.19.42 Mejora: Permitir ordenar los campos de vistas y tablas alfabéticamente y mantener en una lista aparte el orden real, para facilitar el diff y el merge (Ryan Harris) * 22/03/2015 FDBOZZO v1.19.42 Mejora: Aplicar ClassPerFile a las conexiones, tablas, vistas y stored procedures de los DBC (Ryan Harris) * 23/03/2015 FDBOZZO v1.19.42 Bug Fix mnx: No se mantiene el Pad vacío al regenerar el menú cuando se define un menu con un Pad sin nombre (Lutz Scheffler) +* 25/03/2015 FDBOZZO v1.19.42 Mejora: Nueva propiedad l_ProcessFiles que permite obtener la lista de archivos a procesar sin procesarlos realmente usando el valor .F. +* 25/03/2015 FDBOZZO v1.19.42 Bug Fix frx/lbx: Arreglo de CR,LF,TAB sobrantes en algunos archivos FR2/LB2 agregados en versiones anteriores (Ryan Harris) * * *--------------------------------------------------------------------------------------------------- @@ -228,6 +230,8 @@ * 10/03/2015 Lutz Scheffler Mejora v1.19.41: Crear un método API get_Processed() para obtener información de los archivos procesados (Agregado en v1.19.42) * 10/03/2015 Lutz Scheffler Mejora v1.19.41: Permitir salida de archivos procesados a stdOut (Agregado en v1.19.42) * 23/03/2015 Lutz Scheffler Reporte bug mnx v1.19.41: No se mantiene el Pad vacío al regenerar el menú cuando se define un menu con un Pad sin nombre (Arreglado en v1.19.42) +* 24/03/2015 Ryan Harris Reporte bug frx/lbx v1.19.41: Hay algunos CR,LF,TAB sobrantes en las etiquetas tag de algunos archivos FR2/LB2 +* 24/03/2015 Ryan Harris Mejora v1.19.41: Borrar archivos ERR al procesar, cuando se usa UseClassPerFile * * *--------------------------------------------------------------------------------------------------- From 8beb197040a2ff3382aa2052378c065c9a1851d7 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 27 Mar 2015 01:02:59 +0100 Subject: [PATCH 074/123] =?UTF-8?q?-=20Ajuste=20de=20c=C3=B3digo=20-=20Agr?= =?UTF-8?q?egada=20la=20toma=20de=20tiempo=20durante=20el=20proceso=20para?= =?UTF-8?q?=20poder=20saber=20cu=C3=A1nto=20lleva=20y=20cu=C3=A1nto=20le?= =?UTF-8?q?=20falta?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.exe | Bin 563069 -> 561102 bytes foxbin2prg.prg | 99 +++++++++++++++++++++++++++++++++---------------- 2 files changed, 68 insertions(+), 31 deletions(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 0e5efe67a6e940357e33e61a2e2e5eb4974a7fb2..0a5799f3d6b86b2972067a7616d51a7f974afb10 100644 GIT binary patch delta 20674 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 t5;wl] ; + [] ; + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -3992,10 +3996,37 @@ DEFINE CLASS frm_avance AS FORM Width = 604, ; Name = "lbl_Tarea2" + ADD OBJECT 'lblStartTime' AS label WITH ; + BackStyle = 0, ; + Caption = "Start time: __/__/____ __:__:__", ; + Height = 17, ; + Left = 12, ; + Name = "lblStartTime", ; + Top = 88, ; + Width = 176 + + ADD OBJECT 'lblElapsedTime' AS label WITH ; + BackStyle = 0, ; + Caption = "Elapsed Time: __:__:__", ; + Height = 17, ; + Left = 480, ; + Name = "lblElapsedTime", ; + Top = 88, ; + Width = 136 + PROCEDURE AvanceDelProceso LPARAMETERS tcTexto, tnValor, tnTotal, tnTipo - WITH THIS AS frm_avance OF foxbin2prg.prg + WITH THISFORM AS frm_avance OF foxbin2prg.prg + LOCAL lnSecs + + lnSecs = SECONDS() + + IF lnSecs - .nLastSecCount >= 1 THEN + .lblElapsedTime.Caption = 'Elapsed Time: ' + TTOC( {^2000-1-1,00:00:00} + lnSecs - .nSecsAtStart, 2 ) + .nLastSecCount = lnSecs + ENDIF + *-- Habilita el botón de cancelar una vez que se comienzan a pasar valores IF NOT EMPTY(tnValor) THEN IF NOT .cmdCancel.Enabled THEN @@ -4057,6 +4088,7 @@ DEFINE CLASS frm_avance AS FORM #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + LOCAL THISFORM AS frm_avance OF foxbin2prg.prg #ENDIF LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' loLang = _SCREEN.o_FoxBin2Prg_Lang @@ -4071,9 +4103,10 @@ DEFINE CLASS frm_avance AS FORM ENDIF ENDIF - THIS.CAPTION = 'FoxBin2Prg ' + _SCREEN.c_FB2PRG_EXE_Version + ' > - ' + loLang.C_PROCESS_PROGRESS_LOC + ' (' + loLang.C_PRESS_ESC_TO_CANCEL + ')' - THIS.nValue = 0 - THIS.nValue2 = 0 + THISFORM.CAPTION = 'FoxBin2Prg ' + _SCREEN.c_FB2PRG_EXE_Version + ' > - ' + loLang.C_PROCESS_PROGRESS_LOC + ' (' + loLang.C_PRESS_ESC_TO_CANCEL + ')' + THISFORM.nValue = 0 + THISFORM.nValue2 = 0 + THISFORM.nLastSecCount = SECONDS() ENDPROC @@ -4092,6 +4125,10 @@ DEFINE CLASS frm_avance AS FORM ENDPROC + PROCEDURE lblStartTime.Init + THIS.Caption = "Start Time: " + TTOC(DATETIME()) + ENDPROC + ENDDEFINE @@ -12957,7 +12994,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg .get_NombresObjetosOLEPublic( @la_NombresObjsOle ) - .write_DefinicionObjetosOLE( toFoxBin2Prg ) + .write_DefinicionObjetosOLE( @toFoxBin2Prg ) *-- Escribo los métodos ordenados lnLastClass = 0 @@ -13281,7 +13318,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg .get_NombresObjetosOLEPublic( @la_NombresObjsOle ) - .write_DefinicionObjetosOLE( toFoxBin2Prg ) + .write_DefinicionObjetosOLE( @toFoxBin2Prg ) *-- Escribo los métodos ordenados lnLastObj = 0 @@ -14712,7 +14749,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg lnDatabases_Count = ADATABASES(laDatabases) USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS TABLABIN - + IF toFoxBin2Prg.l_ProcessFiles THEN toDatabase = CREATEOBJECT('CL_DBC') toDatabase._DBC = .c_InputFile @@ -16086,13 +16123,13 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE IF INLIST( tcType, 'Index', 'Field' ) SELECT TB.Property FROM C_TABLABIN2 TB ; - INNER JOIN C_TABLABIN2 TB2 ON STR(TB.ParentID)+TB.ObjectType+LOWER(TB.objectName) = STR(TB2.ObjectID)+PADR(tcType,10)+PADR(LOWER(JUSTEXT(tcName)),128) ; - AND TB2.objectName = PADR(LOWER(JUSTSTEM(tcName)),128) ; + INNER JOIN C_TABLABIN2 TB2 ON STR(TB.ParentId)+TB.ObjectType+LOWER(TB.ObjectName) = STR(TB2.ObjectID)+PADR(tcType,10)+PADR(LOWER(JUSTEXT(tcName)),128) ; + AND TB2.ObjectName = PADR(LOWER(JUSTSTEM(tcName)),128) ; INTO ARRAY laProperty ELSE SELECT TB.Property FROM C_TABLABIN2 TB ; - INNER JOIN C_TABLABIN2 TB2 ON STR(TB.ParentID)+TB.ObjectType+LOWER(TB.objectName) = STR(TB2.ObjectID)+PADR(tcType,10)+PADR(LOWER(tcName),128) ; + INNER JOIN C_TABLABIN2 TB2 ON STR(TB.ParentId)+TB.ObjectType+LOWER(TB.ObjectName) = STR(TB2.ObjectID)+PADR(tcType,10)+PADR(LOWER(tcName),128) ; INTO ARRAY laProperty ENDIF @@ -16543,13 +16580,13 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE IF INLIST( tcType, 'Index', 'Field' ) SELECT TB.Property FROM C_TABLABIN2 TB ; - INNER JOIN C_TABLABIN2 TB2 ON STR(TB.ParentID)+TB.ObjectType+LOWER(TB.objectName) = STR(TB2.ObjectID)+PADR(tcType,10)+PADR(LOWER(JUSTEXT(tcName)),128) ; - AND TB2.objectName = PADR(LOWER(JUSTSTEM(tcName)),128) ; + INNER JOIN C_TABLABIN2 TB2 ON STR(TB.ParentId)+TB.ObjectType+LOWER(TB.ObjectName) = STR(TB2.ObjectID)+PADR(tcType,10)+PADR(LOWER(JUSTEXT(tcName)),128) ; + AND TB2.ObjectName = PADR(LOWER(JUSTSTEM(tcName)),128) ; INTO ARRAY laProperty ELSE SELECT TB.Property FROM C_TABLABIN2 TB ; - INNER JOIN C_TABLABIN2 TB2 ON STR(TB.ParentID)+TB.ObjectType+LOWER(TB.objectName) = STR(TB2.ObjectID)+PADR(tcType,10)+PADR(LOWER(tcName),128) ; + INNER JOIN C_TABLABIN2 TB2 ON STR(TB.ParentId)+TB.ObjectType+LOWER(TB.ObjectName) = STR(TB2.ObjectID)+PADR(tcType,10)+PADR(LOWER(tcName),128) ; INTO ARRAY laProperty ENDIF @@ -16850,9 +16887,9 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE INSERT INTO TABLABIN ; ( ObjectID ; - , ParentID ; + , ParentId ; , ObjectType ; - , objectName ; + , ObjectName ; , Property ; , CODE ; , RIInfo ; @@ -17111,12 +17148,12 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE lcMemoWithProperties = .getBinMemoFromProperties() UPDATE TABLABIN ; SET Property = lcMemoWithProperties ; - WHERE STR(ParentID) + ObjectType + LOWER(objectName) = STR(1) + PADR('Database',10) + PADR(LOWER('Database'),128) + WHERE STR(ParentId) + ObjectType + LOWER(ObjectName) = STR(1) + PADR('Database',10) + PADR(LOWER('Database'),128) IF NOT EMPTY(lcStoredProcedures) UPDATE TABLABIN ; SET CODE = lcStoredProcedures ; - WHERE STR(ParentID) + ObjectType + LOWER(objectName) = STR(1) + PADR('Database',10) + PADR(LOWER('StoredProceduresSource'),128) + WHERE STR(ParentId) + ObjectType + LOWER(ObjectName) = STR(1) + PADR('Database',10) + PADR(LOWER('StoredProceduresSource'),128) ENDIF loTables.updateDBC( tc_OutputFile, @tnLastID, tnParentID ) @@ -17188,7 +17225,7 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE SELECT CODE ; FROM TABLABIN ; - WHERE STR(ParentID) + ObjectType + LOWER(objectName) = STR(1) + PADR('Database',10) + PADR(LOWER('StoredProceduresSource'),128) ; + WHERE STR(ParentId) + ObjectType + LOWER(ObjectName) = STR(1) + PADR('Database',10) + PADR(LOWER('StoredProceduresSource'),128) ; INTO ARRAY laCode TEXT TO ._StoredProcedures TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> <> @@ -18370,9 +18407,9 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE STORE NULL TO loField STORE 0 TO I, lnField_Count _TALLY = 0 - SELECT LOWER(TB.objectName) FROM TABLABIN TB ; - INNER JOIN TABLABIN TB2 ON STR(TB.ParentID)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Field',10) ; - AND TB2.objectName = PADR(LOWER(tcTable),128) ; + SELECT LOWER(TB.ObjectName) FROM TABLABIN TB ; + INNER JOIN TABLABIN TB2 ON STR(TB.ParentId)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Field',10) ; + AND TB2.ObjectName = PADR(LOWER(tcTable),128) ; INTO ARRAY laFields lnField_Count = _TALLY @@ -18755,9 +18792,9 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE STORE NULL TO loIndex STORE 0 TO I, lnIndex_Count _TALLY = 0 - SELECT LOWER(TB.objectName) FROM TABLABIN TB ; - INNER JOIN TABLABIN TB2 ON STR(TB.ParentID)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Index',10) ; - AND TB2.objectName = PADR(LOWER(tcTable),128) ; + SELECT LOWER(TB.ObjectName) FROM TABLABIN TB ; + INNER JOIN TABLABIN TB2 ON STR(TB.ParentId)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Index',10) ; + AND TB2.ObjectName = PADR(LOWER(tcTable),128) ; INTO ARRAY laIndexes lnIndex_Count = _TALLY @@ -19768,9 +19805,9 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE ENDIF _TALLY = 0 - SELECT LOWER(TB.objectName) FROM TABLABIN TB ; - INNER JOIN TABLABIN TB2 ON STR(TB.ParentID)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Field',10) ; - AND TB2.objectName = PADR(LOWER(tcView),128) ; + SELECT LOWER(TB.ObjectName) FROM TABLABIN TB ; + INNER JOIN TABLABIN TB2 ON STR(TB.ParentId)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Field',10) ; + AND TB2.ObjectName = PADR(LOWER(tcView),128) ; INTO ARRAY laFields lnField_Count = _TALLY @@ -22699,17 +22736,17 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE WITH THIS AS CL_MENU OF 'FOXBIN2PRG.PRG' IF VARTYPE( toObj.oReg ) = 'O' loReg = toObj.oReg - + IF loReg.ObjType = C_OBJTYPE_MENUTYPE_OPTION - lcTempName = '_' + PADL( INT( VAL(loReg.itemnum) ), 9, '0') - + lcTempName = '_' + PADL( INT( VAL(loReg.ItemNum) ), 9, '0') + *-- Si el nombre es del tipo "_0000000001" y coincide con el itemNum *-- que uso para darle un nombre temporal, lo vuelvo a quitar en el binario. IF loReg.Name = lcTempName THEN loReg.Name = '' ENDIF ENDIF - + INSERT INTO TABLABIN FROM NAME loReg IF .l_Debug From 208ec60fc3b9126f83a91495cbccfef716fb7f51 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Mon, 30 Mar 2015 01:32:24 +0200 Subject: [PATCH 075/123] =?UTF-8?q?-=20Agragada=20posibilidad=20de=20indic?= =?UTF-8?q?ar=20PATH=20relativo=20para=20la=20imagen=20del=20progressbar?= =?UTF-8?q?=20-=20Documentaci=C3=B3n=20de=20par=C3=A1metros=20-=20Encapsul?= =?UTF-8?q?aci=C3=B3n=20de=20obtenci=C3=B3n=20de=20ruta=20absoluta=20en=20?= =?UTF-8?q?nueva=20funcion=20get=5FAbsolutePath?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.exe | Bin 561102 -> 564149 bytes foxbin2prg.prg | 65 +++++++++++++++++++++++++++++++++++++------------ 2 files changed, 49 insertions(+), 16 deletions(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 0a5799f3d6b86b2972067a7616d51a7f974afb10..b5fcd20d4a956080af8206d5e5393145361df9ff 100644 GIT binary patch delta 22895 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 diff --git a/foxbin2prg.prg b/foxbin2prg.prg index f59d165..d7cbe36 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -734,7 +734,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) + LOCAL lcSys16, lnPosProg, lc_Foxbin2prg_EXE, laValues(1,5), lcPicturePath SET DELETED ON SET DATE YMD SET HOURS TO 24 @@ -770,10 +770,10 @@ DEFINE CLASS c_foxbin2prg AS SESSION lnPosProg = 1 ENDIF + THIS.c_CurDir = SYS(5) + CURDIR() && Directorio actual, que no necesariamente es donde está FoxBin2Prg THIS.c_Foxbin2prg_FullPath = SUBSTR( lcSys16, lnPosProg ) THIS.c_Foxbin2prg_ConfigFile = EVL( tcCFG_File, FORCEEXT( THIS.c_Foxbin2prg_FullPath, 'CFG' ) ) - THIS.c_BackgroundImage = ADDBS(JUSTPATH(THIS.c_Foxbin2prg_FullPath)) + 'foxbin2prg.jpg' - THIS.c_CurDir = SYS(5) + CURDIR() + THIS.c_BackgroundImage = THIS.get_AbsolutePath( ADDBS(JUSTPATH(THIS.c_Foxbin2prg_FullPath)) + 'foxbin2prg.jpg' ) lc_Foxbin2prg_EXE = FORCEEXT( THIS.c_Foxbin2prg_FullPath, 'EXE' ) THIS.c_FB2PRG_EXE_Version = 'v' + IIF( AGETFILEVERSION( laValues, lc_Foxbin2prg_EXE ) = 0, TRANSFORM(THIS.n_FB2PRG_Version), laValues(4) ) ADDPROPERTY(_SCREEN, 'c_FB2PRG_EXE_Version', THIS.c_FB2PRG_EXE_Version) @@ -855,7 +855,12 @@ DEFINE CLASS c_foxbin2prg AS SESSION PROCEDURE wasProcessed + *--------------------------------------------------------------------------------------------------- + * 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 + IF THIS.n_ProcessedFiles = 0 OR ASCAN( THIS.a_ProcessedFiles, tcFile, 1, 0, 1, 1+2+4 ) = 0 RETURN .F. ELSE @@ -906,6 +911,30 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDPROC + PROCEDURE get_AbsolutePath + LPARAMETERS tc_InputFile, tc_FullPath + + *-- Ajusto la ruta si no es absoluta + tc_InputFile = EVL(tc_InputFile,'') + tc_FullPath = EVL(tc_FullPath, THIS.c_Foxbin2prg_FullPath) + + IF NOT EMPTY( JUSTEXT(tc_FullPath) ) THEN + *-- Se indicó PATH+archivo.ext + tc_FullPath = JUSTPATH(tc_FullPath) + ENDIF + + tc_FullPath = ADDBS( tc_FullPath ) + + IF LEN(tc_InputFile) > 1 ; + AND LEFT(LTRIM(tc_InputFile),2) <> '\\' ; + AND SUBSTR(LTRIM(tc_InputFile),2,1) <> ':' THEN + tc_InputFile = FULLPATH(tc_InputFile, tc_FullPath) + ENDIF + + RETURN tc_InputFile + ENDPROC + + FUNCTION get_l_ConfigEvaluated RETURN THIS.l_ConfigEvaluated ENDFUNC @@ -917,6 +946,19 @@ DEFINE CLASS c_foxbin2prg AS SESSION FUNCTION get_Processed + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * taProcessed (@! OUT) Array donde se devolverá la información de los archivos de la máscara indicada + * tcFileMask (v? IN ) Máscara de archivo a buscar (nombre, "*", "?") + *--------------------------------------------------------------------------------------------------- + * ESTRUCTURA DEL ARRAY DEVUELTO: + * col(1) tcFile - Path del archivo (ej: 'C:\DESA\pruebas varias\lib.vcx') + * col(2) tcInOutType - Archivo de entrada o de salida ("I"=Input file, "O"=Output file) + * col(3) tcProcessed - Procesado ("P0"=Not Processed, "P1"=Processed) + * col(4) tcHasErrors - Tuvo Errores ("E0"=No Errors, "E1"=Has Errors) + * col(5) tcSupported - Archivo soportado ("S0"=Unsupported, "S1"=Supported) + * col(6) tcExpanded - Tipo de archivo ("X0"=Normal file, "X1"=Expanded multipart file) + *--------------------------------------------------------------------------------------------------- LPARAMETERS taProcessed, tcFileMask EXTERNAL ARRAY taProcessed @@ -1462,7 +1504,8 @@ DEFINE CLASS c_foxbin2prg AS SESSION PROCEDURE descargar_frm_avance - IF THIS.n_ShowProgressbar <> 0 AND VARTYPE(THIS.o_Frm_Avance) = "O" THEN + LPARAMETERS tlForceUnload + IF (tlForceUnload OR THIS.n_ShowProgressbar <> 0) AND VARTYPE(THIS.o_Frm_Avance) = "O" THEN THIS.o_Frm_Avance.Hide() THIS.o_Frm_Avance.Release() THIS.o_Frm_Avance = NULL @@ -2122,11 +2165,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDIF *-- Ajusto la ruta si no es absoluta - IF LEN(tc_InputFile) > 1 ; - AND LEFT(LTRIM(tc_InputFile),2) <> '\\' ; - AND SUBSTR(LTRIM(tc_InputFile),2,1) <> ':' THEN - tc_InputFile = FULLPATH(tc_InputFile, .c_CurDir) - ENDIF + tc_InputFile = .get_AbsolutePath( tc_InputFile, .c_CurDir ) *-- Determino el tipo de InputFile (Archivo o Directorio) IF EMPTY(lcInputFile_Type) AND NOT EMPTY(tc_InputFile) @@ -14760,13 +14799,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg IF toDatabase._DBCEvents AND NOT EMPTY(toDatabase._DBCEventFilename) THEN *-- El archivo de eventos puede tener path relativo o absoluto *-- Ajusto la ruta si no es absoluta - IF LEN(toDatabase._DBCEventFilename) > 1 ; - AND LEFT(LTRIM(toDatabase._DBCEventFilename),2) <> '\\' ; - AND SUBSTR(LTRIM(toDatabase._DBCEventFilename),2,1) <> ':' THEN - lcEventsFile = ADDBS( JUSTPATH(.c_InputFile) ) + toDatabase._DBCEventFilename - ELSE - lcEventsFile = toDatabase._DBCEventFilename - ENDIF + lcEventsFile = toFoxBin2Prg.get_AbsolutePath( toDatabase._DBCEventFilename, .c_InputFile ) IF FILE(lcEventsFile) THEN lcEventsFile = '' ELSE From 1b78938a9b83ec3b8435be5401c49f68db4e7db7 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Mon, 30 Mar 2015 02:32:09 +0200 Subject: [PATCH 076/123] EXE --- foxbin2prg.exe | Bin 564149 -> 561385 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index b5fcd20d4a956080af8206d5e5393145361df9ff..0e47c9699906bab225ac4cb032a0e6d577b039a4 100644 GIT binary patch delta 1880 zcmc(fOKeP07{~v2+*XxP@7a(W5vJ%vGmC00ih3oYv?54EMn}icnQ86}nOe9_x?mwf zW@BMvCs;ITq&5;ui!LlIEi5cZB(@eJe&4wreS`=bXXZQKd3}%n|D5|hpWgE6(U!^8 zp0};G#=DZ(yQy|R(NlZjO*Ze{B&iqKJQXG$uHW9EB}}@d@kaCs^h)$)bPIZ%e-izm z)|TApO}hSd?L6c6Zv55yM2lCuo7~{1JgIgsxz6vd502CaXJ!W{FEgm_lOE&!gO6ug zFd*Gwy*__7D6M0?K7YkLMRxW1$FtHYvUc<7(TS#~E%!V9sdudpy(ra~#`3fVb%Fk% z1{fVxzm79MN`Hv4wU_>v?~{jUwfWZviYFXDJ3@yhBH)cuLaSLq->;_}AKs{>1nY9(( z*iXicWV^aD>%T(xXK)U`(Q9=5ExH(G0kj3uFx12NF+BonrnBhbSv~YCHll@e{52b2 zN!!ygc*r^CjD=C&kip4Ol`4)IyW9-pyu1Bi_PrH28x;u|@bUC$8Q;FW0ed7RbRJas zS%U4}+7NReKh)5<3;A|(TwQ!=DbS8_uFSj@kAX{|LP9<2;Af9=ej>z*aA$c~8trKN zz&fBW&tbdUGJTm9bKF6i?bL-1dj|T(nfb_1VViMJwtx=RYByK5tZww{3{}EPco*jebl9=cNAFP=jUg*n=>^r8&8@DI$7CA)BOIMy lM4J5%{#12m(w~^=y*1P8Aqiv&;v)@6BeHaQrnl+SxgRPnOpE{k delta 266 zcmaF4P-*LSr453Nj0%&57_*qph)tfzWHosQ;|8uXVhjun4nQoixrk|ws5}b;GmvAz zz|g=3q&mdOF81=}Z9aO@M{V`%mSJAi@V4A8J9vo Date: Mon, 30 Mar 2015 16:06:50 +0200 Subject: [PATCH 077/123] =?UTF-8?q?-=20Arreglo=20de=20la=20clave=20=C3=BAn?= =?UTF-8?q?ica=20para=20los=20objetos=20Relation=20de=20los=20DBC,=20que?= =?UTF-8?q?=20daba=20error=20de=20clave=20duplicada=20cuando=20se=20refere?= =?UTF-8?q?nciaba=20a=20la=20misma=20tabla=20m=C3=A1s=20de=20una=20vez?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.exe | Bin 561385 -> 561442 bytes foxbin2prg.prg | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 0e47c9699906bab225ac4cb032a0e6d577b039a4..75fc0bb62b404090bd91ffd9111de20360d8f8ee 100644 GIT binary patch delta 4416 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 diff --git a/foxbin2prg.prg b/foxbin2prg.prg index d7cbe36..0743cae 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -20122,7 +20122,7 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE loRelation = NULL loRelation = CREATEOBJECT("CL_DBC_RELATION") loRelation.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - .ADD( loRelation, loRelation._ChildTable + loRelation._ParentTable ) + .ADD( loRelation, loRelation._ChildTable + '.' + loRelation._ChildIndex + '=>' + loRelation._ParentTable + '.' + loRelation._ParentIndex ) OTHERWISE && Otro valor *-- No hay otros valores From a176614e2629eb0a018842812b94954f16a3309c Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Mon, 30 Mar 2015 21:16:34 +0200 Subject: [PATCH 078/123] - Mejoras en ordenamientos de miembros del DBC --- foxbin2prg.exe | Bin 561442 -> 561665 bytes foxbin2prg.prg | 47 ++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 75fc0bb62b404090bd91ffd9111de20360d8f8ee..5b6f27178f8db887c018543a6fdacfbf934ec73a 100644 GIT binary patch delta 10715 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 OJp6k$zF7<7HTplOc*A`F delta 10475 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 W&;#8a1KfNmlU-h}1{lJItMq@EBUrxx diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 0743cae..5430b52 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -14819,7 +14819,8 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, .F., .F., @lcExternalHeader ) *-- Connections - FOR EACH loConnection IN toDatabase._Connections FOXOBJECT + toDatabase._Connections.KeySort=2 + FOR EACH loConnection IN toDatabase._Connections &&FOXOBJECT lnClassCount = lnClassCount + 1 DIMENSION laClasses(lnClassCount,3) laClasses(lnClassCount,1) = LOWER( loConnection._Name ) @@ -14829,7 +14830,8 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg ENDFOR *-- Tables - FOR EACH loTable IN toDatabase._Tables FOXOBJECT + toDatabase._Tables.KeySort=2 + FOR EACH loTable IN toDatabase._Tables &&FOXOBJECT lnClassCount = lnClassCount + 1 DIMENSION laClasses(lnClassCount,3) laClasses(lnClassCount,1) = LOWER( loTable._Name ) @@ -14839,7 +14841,8 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg ENDFOR *-- Views - FOR EACH loView IN toDatabase._Views FOXOBJECT + toDatabase._Views.KeySort=2 + FOR EACH loView IN toDatabase._Views &&FOXOBJECT lnClassCount = lnClassCount + 1 DIMENSION laClasses(lnClassCount,3) laClasses(lnClassCount,1) = LOWER( loView._Name ) @@ -17054,7 +17057,8 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE loConnections = ._Connections loConnections.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - FOR EACH loConnection IN loConnections FOXOBJECT + loConnections.KeySort=2 + FOR EACH loConnection IN loConnections &&FOXOBJECT .add_DBCMember('connection.' + loConnection._Name) ENDFOR @@ -17062,7 +17066,8 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE loTables = ._Tables loTables.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - FOR EACH loTable IN loTables FOXOBJECT + loTables.KeySort=2 + FOR EACH loTable IN loTables &&FOXOBJECT .add_DBCMember('table.' + loTable._Name) ENDFOR @@ -17070,7 +17075,8 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE loViews = ._Views loViews.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - FOR EACH loView IN loViews FOXOBJECT + loViews.KeySort=2 + FOR EACH loView IN loViews &&FOXOBJECT .add_DBCMember('view.' + loView._Name) ENDFOR @@ -20122,7 +20128,17 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE loRelation = NULL loRelation = CREATEOBJECT("CL_DBC_RELATION") loRelation.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - .ADD( loRelation, loRelation._ChildTable + '.' + loRelation._ChildIndex + '=>' + loRelation._ParentTable + '.' + loRelation._ParentIndex ) + + TRY + *-- Renombro la relación con un nombre más útil + *loRelation._Name = loRelation._ParentTable + '.' + loRelation._ParentIndex ; + + '->' + loRelation._ChildTable + '.' + loRelation._ChildIndex ; + + ':' + loRelation._RefIntegrity ; + + '.' + loRelation._Name + '' + .ADD( loRelation, loRelation._Name ) + CATCH TO loEx WHEN loEx.ERRORNO = 2062 && The specified Key already exists. + *-- Saltear este error, porque implica que la relación está duplicada + ENDTRY OTHERWISE && Otro valor *-- No hay otros valores @@ -20177,6 +20193,7 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE <<>> ENDTEXT + .KeySort=2 && Comentar para forzar modo LEGACY FOR EACH loRelation IN THIS &&FOXOBJECT lcText = lcText + loRelation.toText() ENDFOR @@ -20229,14 +20246,26 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE lnRelation_Count = ADBOBJECTS( laRelations, "RELATION" ) IF lnRelation_Count > 0 - ASORT( laRelations, 2, -1, 0, 1 ) + *-- Ordenamiento: Comentar los ASORT para el orden original + ASORT( laRelations, 3, -1, 0, 1 ) ASORT( laRelations, 1, -1, 0, 1 ) + ASORT( laRelations, 4, -1, 0, 1 ) + ASORT( laRelations, 2, -1, 0, 1 ) FOR I = 1 TO lnRelation_Count IF laRelations(I,1) == UPPER( RTRIM( tcTable ) ) loRelation = CREATEOBJECT('CL_DBC_RELATION') loRelation.read_BinDataToProperties( @laRelations, I ) - .ADD( loRelation, loRelation._Name ) + *-- Renombro la relación con un nombre más útil + *loRelation._Name = loRelation._ParentTable + '.' + loRelation._ParentIndex ; + + '->' + loRelation._ChildTable + '.' + loRelation._ChildIndex ; + + ':' + loRelation._RefIntegrity + + TRY + .ADD( loRelation, loRelation._Name ) + CATCH TO loEx WHEN loEx.ERRORNO = 2062 && The specified Key already exists. + *-- Saltear este error, porque implica que la relación está duplicada + ENDTRY ENDIF ENDFOR From 70136baa81e2291ab03132f613415a318b980394 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Mon, 30 Mar 2015 23:42:13 +0200 Subject: [PATCH 079/123] =?UTF-8?q?-=20Limpieza=20de=20c=C3=B3digo=20y=20g?= =?UTF-8?q?arbage=20collect?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.exe | Bin 561665 -> 561673 bytes foxbin2prg.prg | 14 ++------------ 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 5b6f27178f8db887c018543a6fdacfbf934ec73a..f46715ecdf83898b1fededccdda02eddb35fb81a 100644 GIT binary patch delta 11686 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 delta 11494 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' + loRelation._ChildTable + '.' + loRelation._ChildIndex ; - + ':' + loRelation._RefIntegrity ; - + '.' + loRelation._Name + '' .ADD( loRelation, loRelation._Name ) CATCH TO loEx WHEN loEx.ERRORNO = 2062 && The specified Key already exists. *-- Saltear este error, porque implica que la relación está duplicada @@ -20256,11 +20251,6 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE IF laRelations(I,1) == UPPER( RTRIM( tcTable ) ) loRelation = CREATEOBJECT('CL_DBC_RELATION') loRelation.read_BinDataToProperties( @laRelations, I ) - *-- Renombro la relación con un nombre más útil - *loRelation._Name = loRelation._ParentTable + '.' + loRelation._ParentIndex ; - + '->' + loRelation._ChildTable + '.' + loRelation._ChildIndex ; - + ':' + loRelation._RefIntegrity - TRY .ADD( loRelation, loRelation._Name ) CATCH TO loEx WHEN loEx.ERRORNO = 2062 && The specified Key already exists. From dd5189a49c990a6962cc4cef3088b5f0834be42b Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Wed, 1 Apr 2015 00:15:21 +0200 Subject: [PATCH 080/123] =?UTF-8?q?-=20Reporte=20de=20bug:=20La=20conversi?= =?UTF-8?q?=C3=B3n=20de=20los=20DBF=20a=20DB2=20deja=20archivos=20TMP=20si?= =?UTF-8?q?n=20renombrar=20a=20DB2=20y=20devuelve=20un=20Error=2011=20(Mik?= =?UTF-8?q?e=20Potjer)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index cd351c8..32e9048 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -775,7 +775,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION THIS.c_Foxbin2prg_ConfigFile = EVL( tcCFG_File, FORCEEXT( THIS.c_Foxbin2prg_FullPath, 'CFG' ) ) THIS.c_BackgroundImage = THIS.get_AbsolutePath( ADDBS(JUSTPATH(THIS.c_Foxbin2prg_FullPath)) + 'foxbin2prg.jpg' ) lc_Foxbin2prg_EXE = FORCEEXT( THIS.c_Foxbin2prg_FullPath, 'EXE' ) - THIS.c_FB2PRG_EXE_Version = 'v' + IIF( AGETFILEVERSION( laValues, lc_Foxbin2prg_EXE ) = 0, TRANSFORM(THIS.n_FB2PRG_Version), laValues(4) ) + THIS.c_FB2PRG_EXE_Version = 'v' + IIF( AGETFILEVERSION( laValues, lc_Foxbin2prg_EXE ) = 0, TRANSFORM(THIS.n_FB2PRG_Version), laValues(11) ) ADDPROPERTY(_SCREEN, 'c_FB2PRG_EXE_Version', THIS.c_FB2PRG_EXE_Version) ADDPROPERTY(_SCREEN, 'ExitCode', 0) @@ -1277,6 +1277,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION LOCAL loEx AS EXCEPTION, dwFileAttributes, dwFileAttributes_Orig, lnRet DECLARE SHORT 'SetFileAttributes' IN kernel32 AS fb2p_SetFileAttributes STRING tcFileName, INTEGER dwFileAttributes DECLARE INTEGER 'GetFileAttributes' IN kernel32 AS fb2p_GetFileAttributes STRING tcFileName + lnRet = 0 * read current attributes for this file dwFileAttributes = fb2p_GetFileAttributes(tcFileName) @@ -14667,7 +14668,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg lcOutputFile = .c_OutputFile .writeLog( '> ' + TEXTMERGE(loLang.C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; - AND toFoxBin2Prg.ChangeFileAttribute( .c_OutputFile, '-R' ) ; + AND toFoxBin2Prg.ChangeFileAttribute( .c_OutputFile + '.TMP', '-R' ) > 0 ; AND NOT toFoxBin2Prg.RenameTmpFile2Tx2File( .c_OutputFile ) *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' ERROR (TEXTMERGE(loLang.C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) From 34e14ddf588053c2ae6e43e0c4f914d2ed30f8c6 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Wed, 1 Apr 2015 21:33:14 +0200 Subject: [PATCH 081/123] EXE --- foxbin2prg.exe | Bin 561673 -> 561700 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index f46715ecdf83898b1fededccdda02eddb35fb81a..37cda2a5c9b8f4952c7049874832608b186b54dc 100644 GIT binary patch delta 15455 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 delta 15412 zcmZ{q2YeMp`?jAwC%bz}0)!+agq9FG(t9_JPJo0KS_tF-fskMdHsmPaD+q!ZU{J9j z3N{2AC>?tN1XQY^sJzm<^uTv*HpIyL{rUYixv%?~ot@pCoq1-$>#x_G{d&zcq4&9} zPu!)+q8jcGtKN6Ut$#DvB{_xVT32>#SYBAabyRqV4|K_{V#*X{%AK|%57jp1u?^Ec z9M$@=?$8209MmzRhE}m~!>}l=ci}I?-Yi@&ys@K53bzdp5A7asJ49;Vy6KRH$yYVe zimvNz3r`QPuZ=FOG@`yXxA1;`t}UFv&)*6c^3zkenV+o+kB?}ejVcTo*}?I=LuqXs zl?um>jMnxP&KlWP^A>L7XF}l(em+*%BCRboWTmy&E*7p#>!39*{3ESH(C~oU0kY|~ zOEzBD9Wxq^daB_ljl;37;V9>u0ge-U^fNQr%#Q|NW{V+*YIH%MQ8HNZjXxY|p~R z;&F4Q6I8niR9jJ{PH>LX&Z%t^oS|AdwReKEnU<|w6P-geQRx$%l`Fq$T-SFSw?ifH z)@4nuHkWITpbFHmTNO@pc5+-ZRI>;z)N#aA(QZd2b(?dv$5lj@vz|8fsn{$hN5Hz+ zEPd<~A+;NdXd>d0jGVaiF%t_WC#v;l^vF()o7;g<$?)ZkNzWaZo|`r{cT!sVl=SQ| zzNMwn#3|`n1?jo*IoV?~#}(wJkIBr*?yG{&>eaQms;TvBy6SsYkI)9H@n`jFy*H%Y zt#?4CFWZ-rGdU+W-5Ib!8fKLKRwr*VLQQMUx~6^3$n7(`t=;L zM(sYUM`~x)>9cx`(5DyK1>HhhrucI6GjrckHO}c(DsBJJj(BC9FF(omP<~omY_C++ z@0?ysTc8Tg>GieV>XmbP?P_mru}fBzWM6tlkL<|>`GdOl>zAIJJ}ECx9X+RqcvgR5 z7YXBCG&91+HT%kDm*n~K(|TuS`|5mcJBIjjbNd$L=a+I`eg?er8#^8%1(P$<^L_nt zbH@1c@_ZRxGqZg4zO#ct@?dUezArI1Hz&7u&bV*YBj@$14d2~y_hQ9S0=0MAPC2_g zPFmNjg1qtj)wc6`rLeRg?66w~W@kQ7;7jX~@Ww865uvs9hKI@Th(V>=JfmFBg+j zOi4&g8IasJb-Xe!>h-iPs_8|&vgT1eFY0w$cl*sc$0-pqCTG&*+?>(rxrq-=&h_PS zVQx1wBmKbdc8N0mJ@BM)!tEwm-HydrQ>Sc zB|S!KsODUvgP&DzQ&Q`pwqMd~YU|XwOM0c&ch1?>2g+Dp>wt$R`{Hvle7n!zb-VfU z2V_q2rR1kin%w-N?KT$GEX`=F6{rc9>6`P_{L550PFxB|u|P@Ad9bvFw@cih;$A*5&u5h{@YPo5{??mmT~+iIy^5Bj zI$hB#cbXk#*WfDcl5aG!oqIZU<;J#M<_#=Vg;(^Z+DY}r74G~~^%uV)zG!Zh3!tZt z$@SSE41+_yM@3)NV=BMg+K!ehiN$=R!MZe`^W?nd zeSDL0UQ`XQ>6NPn^|I@sgIn=FzWnhy8Fq=+)u?McxF6KiYkHJ6OuclC?$ljvyr$Qw z^2$K_vwQWUQLpxi3cs$`7&d#bT`usS0g{5PQ*Ad$GP8MG`DuMe zThDCy(7SCZv17Bc>`311k#^{xfo!H)a9ywI*)!S>R2KFAWTUbtWW3FhjDQaqVP=BW zusgZx)^)n)UKMpikB*9c(k>Gw>DhMwip$Ee#-Hvz5)u-VmZ|g`dJX!`6F2nQ+IwoH z^=q`+aYL^|4VQ1|bsbX{sGT?TaP?chQLg5uLc6+3_g2@pcVb#XV%HgqRkT(3(VM#4 zk^F)UF9F&rwelu)4^caA(z++q1&cma;kWdfq0Qd4Yc13NVpN}7dX>;Y8?1;fWg>}c zsugLq(~1~nBOj@Eh?uJnSP@foxvf`o?EF=2Dbm9|aRr%K8T5z=P8C$7*KmwIrTQ1? z)%5O6FI!c=B0BkNDzAu-JxDDnqG^w-%|&{&K%>Ik>n>!tZ@Rle5zE$I|6L3;sU}*nQoXH!;*MQ0A7ui?l3vaW6NA zRJXypy~ua#6+_u(oor}Xp5nspfR4o=RaNY5y^<<_OE%f>lWp50DGVI;7hb>MZgn;{kIl_Zf4IF` zuNn0{uBYuFBXYR~Muav=84jaH)wa*scCbBkT3x$GQeyE3R;XefMinhjjc^#XJQbJP z1*`E*E;g!>YQ2T6RZu$}M(v21uh`L&@iwhTQhe`$35ns#>tqspQ`K{F%5v4!X+)7( zj&m9@j+-mhT&Gc)d}syOy!t104HZfnLfS$uWF;swN+LnhHS?jqS-$37GksYZd9~C{ zrxEFo+hm^?C^~tFZ(pR^8cz4x)ENve{ajI#20)wiyUG* z#Z|RhQ4%&JKW6|5Y*rt;xGCuw8EFiHdBsLJH(?pYQ(&n2O*bO^A0=5u!+D5Sq+fde zc*gsr^hv%YeXT%c9%OOANnV2a8KX*y?YW9QEA!o2 z>_nEWvc6U4!~s^xDtxXbmnyC^c98Ab52CJm)i7#$CJnaCYP3r=+Z#~X^Kl82ZtvQ` zWK(3bS`%!9l5s_uMs#GGAXK?hVKzZ@s0sj)7j zVcmVRtut%z0uti7B@XD9+_#@|?mt$FZEaScxQyug^+G$MTZ2=NgpU^4SiC;5vP5g# zIZ)QL5-!U;VVf$}V^lG(m%zK_jp`BZ#daM*R+aYqv2xDJ>H)V=XKcSEcC@^ZKxL$H z!)ewGXDGY^sZ$uPbj>l#IoPi{8y|3QUCKj3{pjIBeM3ZEA4QZ zr#s>;+q&C*|5~LwdW@+1k9}nOb{FJA+~a6p?!dMG{|o5rEI*pr*ZvCLQ%gNYv=**5 zdyMe#$F^9}nx)a*pA~cQv(g?^F0T>YWY>1P%)Os-%iWeAQ+n?BpNd(P^BPrpM(neL z_T4{pz@l3JbN9Ut+Wy_f{q(ENWgf#fY7>pnj;UX*U+GEuZ$;~sM(c$Xv)%EggxO#{ohIEY*(L97Tc2>tZ&+Hx%*bN4A8DUzcF=yL zTWVNz-~TjmL6q&^eWY#b*j(n3#;9uLXmuCW#rm~IrI$0p&GMbBa*b4tK%-K4U~Dmz zwqsAc9kd!>e_}T~cyHss?rHgrOHcBs^VDx%NiMeS2RmkvUFP0%?;mRUO-j$*q=uKL zZLQU`@71qVE0`OQoH$JHc?x7*>j>=vc=mgzR%+vpavEWc%Gxrfyz>-1UkEW1^y z{m25F?>&9NLd$PmT5gvL3O2%{cPz2&Hl=pp^LIHhdko{;>nbsrF~82smfiO5m`_SF zC)lX2tyOOa8rc?G6j67-m7R-3%lR-T2$V+&JNxCyzW=`h0rIasH6}hCg#wWR;iBvo4i{qPHR5s z{*7uBV%W=@_|1Fl(s#d#3qRQ$YTaO(b^l#+b0!T)ADxvxIx}1U&5o9B+%9!B#HiM3 z_fb1^Z{s5WYx$i@-`ZbiZ7y3yUDZF-2zNC8Tg?qMss;3mP3WxVgc{MoALu$KcP>47 zwAvJEL=MWUWZQN+o>07??U$ZmJ?2SO?NHh3cg5JA-SzhsQy0bu?l2*)>m*-(IvZ!{ zZq+EvsG8w#Y!&W8hC|qTT>a9=6;Ju-i@sp?vPv#PdJg(aI&4tI>&nQTU=zR6~o!`0q~ zX~|}!<7{^uJ^-{A)Q)7c1?yfd#cbj5B-x>)6w3Y5*M{kU)>6Gh0d0`lonkiDau*K( zMyrAh4H4(U@Nz9=e}??a{z7Jt+KEkH+*W@K(n$I zqc#jQt81C+;6Sqm_iU zO#XL)RWqytW?_zsl8AL4(Z(#^JZE5^C8QXNc-I*bLGfYUE(Ew$@9{9Bf8ulhqr8&3amM zwR5l;<9KMTiXCExDc2A)M2l2ahnO*1in@P@*^ot3))2FCQ|J{`hi*`f{% z;q1?qBbAbFRVUS~=Q#eI>X&NPtQqvZb>-scK|f3z5F6L~-;J-U7N(lfS~Imam6r5Y z`#4M6tZrCzKvfwE?NObFn$eCk2UPk{u24}uIh3pSR&NibOf~hrMNg^o7FANg!)V|! z)z130OQjE^#~o19hH?JMt7_RWGqiFaHbRAi$JIMFsT(yhRCJBOJU9f7R4 zrKT1qu~Jb}zl}6Q)!C7zQT$^a>RM~fx$dt;W{*Z%g>}t7H$V0GmmCo}=nzSv-i_!X zzll_Hium9s(eA%QTEh>)&C$LSBB`(+eh$6ql*o8^4tyLv;Ec$l@B(-yI-H%+C*dV< z0(!;;&VyfvKe|9QKVrO%u>wP9YqU1UYWPh!3H|(a3c{PLlHQFTn@UKLn5fz_d*aU6U&uZQ(nxwKsc=gS14jr5t;+KXH(8 z2%D@@t7~?eh1Ggr_;c)m6dYMNPA6yOo4*e`=X2UV?r)YnmCJ(~(;WyFQ zL7F@cH?bJKtehsZ;a2b=^iSnAc@Ac;RQ%;Cu#Lr)U&M&Th())rsLAVaH#i?XDMXW1 za36Rj`qfZP*1{?9LG+JdnrwmDg_LrY*cYPZ-@s{bB04rglijcneiWTwS(AhCMA|NI z0fmv8{DJWR1wKcwlFqH|B80e^ocP0VA2}BmE#~B0$)JyWXtz= zm@O^2gWfog`d}8;at8g(VojdpOPcEB{ci?7d7it#m_>m<(Qmw{$w_ztyca#ki4l5nFRCaSy_r6In5ypVSgix=YZROhb+fv57&O&A=5ZEz@6Y_ z=-;P1WEJcq=TV+??gqaT>>kQVT4cnNy? zvkvK4j`#l@#ws9gfkS#yfIlQl0XnkKAt~@{@crnpg%0t-@4~g-cgU`fX+U}U2YdrP zW359%Du^70Uq}D>sY9y4XW{bed72z;;mhzh=s!8)D)9cVU{u`TkOYoy6u1sQy_FVk zbI4P0@q0&a;CK#p@}5tiTYlz{C9naHMz7*{1$M*x(J`MpWCa`quRq|B*}piXd@!FW zyc+F4?2zVujHVcyfSeP&S2!JBivFJCd3X%$I_VJo0vCXvfIFa{xag1r@H6mAbk{2m zISns@XQBPq=>8Syr0_=cA4Lv{fWLwxZu7MHqmjQa#!igsz>^NAq``aO4e0R!PMHWF zf?q?2c%AYPd=>77K3(1^Z^I#O2BQj28CcONyWlGDGw6AtPWcV40dGV97{)npZTL32 zO9bEFHH-!r<070A6YZ38AtHm|Z1iF_@CLy-@J{r$W=>fIKLTGxr?sa6@O*eFx@kwJ z9D-kjGtpZ)PQfq1H_#W^?m7>jgsb;=%8dSg?l6==0b?u1JodEm;Op=<^u&QqnFTxe zc3(p$4Wj{Y1nft5W3%ZCxF(#6{$Uh%2{(nWqa)Itat>||k3hG2#3`5I=im(VYCqdX zFNN`mU>rfOecdThmH6x!3l5<(-f+rtnAAw-p)0O%$||@Qe3)tReRfGMz)A2G^p*{5 z5`^zWBL9WIMz{UjDGlHtM!!t- zc_#Zwa131MhEsapa>^382|Nw`>TRAH+!_AmHt&BDY5z`)-WV^V`;r|TgZsjdqi;I{ zk%OLWdum$s!YAG5B?bfb4)L!9&qe^Law>95~g|ivy%qb-oz5feH{mI|BpZ zci@faNvz~2zz41I|4qP2cCi8DCIvd9pW7H9fi)N?7~i*}2YeGCli^T(`l0lT+R-6o zZT9Fg3ijW?nDUb@8-LMd2Syc!$1~`h^ST7p6L}1N6MgoYF7Lswz*-Tlk1|B7FH(=u zEE~PNwjn>lz2GD0EzJz^HXsIHLvQY2$T0XB_zHS-ydf_&;QcSh7@TNGL6RW{DexWq zE;?nfAyEy zCk;usPb3RIkIp33nsXoTKOf_5pvHVdUZKEZI1PR5H5vpThN~>6^>5LDMzkLO5Bk0L z4Ve$uW%xaa&i~Mm{cs0(1A59jL$1OD;8)QrHycvDF=Gn66Rm$`$VflN3XIM`lQTR< zIEmqO8oKipLl!k*zK09Y^KKe)6kZH}j*c-+aW!Qifm6_%%bU^{J`A5jKV8w3=in3Y z7wGO`rmTdo!!yxwl}zz(#&9saP6f=$rfi3U;5c+hRa1V4BjGOS=xV0ifNR1j=qoj8 zKr_Y!xPFW&!|IsQ4ju+CK)+Del%en#_($}qdZuK;6X7cLO*!1z^vgpSUtv`0V#=9r zru+@>gsXNpWmI2Nx;Cdn!t>B?4K(FZ_y)WmJz|I{ufPEe&uQqJ93Q~e{IECGltyz* z`5OKX4w!4o!&^-8v=mv$XxneADRoczxkxKUGKSaO)28&Q;gZd*S%@%v7N9S1v}wy1 z0=J8H$%K|J=>s2tV_Ui8%YH7o4!2_TTiV|xHzvB|?RJcO@a`;^6czCIvi2-O;RTPl zq|T!*`3n9S?vL*4=f@t5y%_oE&5yZcFMI&LfLS!4=_$&2cU{u1BjW%ZvdSgrSG%Me+!C(5#wEG$yJRHX z34R{^{Rb|Y2q(fjK6d%#qqQzsjL`>U|0b6V*v1ophr@pK^PjooBJ6{k{pgYcjwzkk zbbwc(*Zk~~$KWjZIQqmsm&}GI!`1e4F^)xW9{eJ@&LNj9g`a{)9P+#5=r1nWfKiB1 z{xGlLcUlRrfzO~HJV68CAK^9V56`$HsxzMv{Mk8|%)984(XfLFX(Rd&#}rtHzqm== znp@t48^UMN%}lra3dh1(e!vm#mVhoy4j8S_J4lD8!L^vtq@i1aJG&+Pe#U*cKl(_V zTUNtg!U6Ga8QsqY2FIcCCbV1FU-GRJI; zb{JowcXP~xJHWEuX=;@Njhe7`L2) zpMW#bpKwSVIcGHE{}Eterdv#mr4;y^WPjIWS_vuu+$C0e5* z7e(LM?UqJx9K3dqTlODt%OH5XAEO9Z`KwzNW6XhnL7({3EkDBV!0k@BC5k1>eO>7T za4&TF-)?CGAA@J2f4c3Kr{UmQjE?BBtXO`8BjFd(6-*$l?J!1A`Z3oxL^ho&$9%%w!fD_O&Cwim}4>dQm~KZc%K)5|o?-NGNCf8h8Oz6=M%c%^1-uWW{k;KAsh>UsUL z10%3L9jTF5Ry6iX#eVc+csF`m8?RJ_JHmgWb9#DZ3_KIA$rAXTWUrit-+_0cGlqDj zQGfOc;lxp1>BTbmMffzFjb4)Nl^@~q4fu+3yfSBs-zyc8*+j&6Z;Dq2KjxKwu$8G6 z5pzCeU4-liu7ggR>y|BR{s{9-5w|%hLe`VJN-bf{eki_M$M*dpQ4W(3zVzyXjuPmpg1{( zjbOHd-#Hs7KXWXC$HHtmMR4CJm*lf9h-*vU4}XFFfpx(}cm-UeKWR8?f#s|V-i8OD z%_%M!N*e#3AEPrckGy^r#;5SN=$oYFI%)P7a2qyw|03-k4F3#QUrb!N%n$eOFex6mueqThg9!AH>}zHo_yq}JaaV+pX0tTr4Y2X>w% zjV6mtCQF?H*S_SE*GSR)@JsLkbT%neY#eg|{4x43GNkqKd~$I8_uLXhmXn*nCkFRL zUnQaGo5;oCmdD75NI(L+^8T-3BzTzn8;}%qW1?uoJ8I~Wn&brSy0eIY$D_M2|6hWm zVL$pg=JWME_!}O45WSxxsVDg$T$TAfk|PCf3=c!!WI7)Lw}RXFJ+h1GH?$Y;e>g_i zCbAu-)2DlLF?bDnL6JvR_aSSA_o7!Z`#qY(unM0+|6b24U6{NST%$fiHf&|sm=PuGNbl3vm^g08;RO$%Af;w;N`Lb%iO2lpXUno z?>k7fzu0BIEnCJiuapE1l?_;Cv!nJIr^^N`b5luxKN*+)Gb}Uan0-d|vVoXmRdG+) zk)~xMmbqPxnokS2BOgC!m+4=&jAce&v;(8c1}wAbB|9*sY``){mIUUO4Or#|{%~eJ z+*iv6He60J$!6@xnz9kg9CytQY%LqG%!;?{zz<~umKm>NpXHw7i%kB*fUEd=m&=y1 z%yj+$XEnsb40QLOVVQxt9jIG2V3~{f6P_E>l0htk7atZfvm;688 Date: Thu, 2 Apr 2015 13:43:11 +0200 Subject: [PATCH 082/123] - Implementada la herencia de CFGs entre directorios --- foxbin2prg.prg | 223 ++++++++++++++++++++++++++++++++++++------------- 1 file changed, 166 insertions(+), 57 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 32e9048..7dff887 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -569,14 +569,12 @@ DEFINE CLASS c_foxbin2prg AS SESSION + [] ; + [] ; + [] ; - + [] ; + [] ; + [] ; + [] ; + [] ; + [] ; + [] ; - + [] ; + [] ; + [] ; + [] ; @@ -640,7 +638,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION DIMENSION a_ProcessedFiles(1, 6) - PROTECTED l_ConfigEvaluated, n_CFG_Actual, l_Main_CFG_Loaded, o_Configuration, l_CFG_CachedAccess + PROTECTED n_CFG_Actual, l_Main_CFG_Loaded, o_Configuration, l_CFG_CachedAccess *-- n_FB2PRG_Version = 1.19 *-- @@ -664,7 +662,6 @@ DEFINE CLASS c_foxbin2prg AS SESSION lFileMode = .F. n_ExisteCapitalizacion = -1 l_CFG_CachedAccess = .F. - l_ConfigEvaluated = .F. l_Debug = .F. l_Error = .F. c_TextErr = '' @@ -672,7 +669,6 @@ DEFINE CLASS c_foxbin2prg AS SESSION l_ShowErrors = .T. n_ShowProgressbar = 1 n_ForceWriteIfReadOnly = 0 - l_AllowMultiConfig = .T. 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. @@ -780,9 +776,9 @@ DEFINE CLASS c_foxbin2prg AS SESSION ADDPROPERTY(_SCREEN, 'ExitCode', 0) THIS.writeLog( REPLICATE( '*', 100 ) ) - THIS.writeLog( 'FoxBin2Prg INIT' ) + THIS.writeLog( 'FoxBin2Prg INIT -', 2 ) THIS.writeLog( REPLICATE( '*', 100 ) ) - THIS.writeLog( 'FoxBin2Prg: [' + THIS.c_Foxbin2prg_FullPath + '] (EXE Version: ' + THIS.c_FB2PRG_EXE_Version + ')' ) + THIS.writeLog( 'FoxBin2Prg: [' + THIS.c_Foxbin2prg_FullPath + '] (EXE Version: ' + THIS.c_FB2PRG_EXE_Version + ', FoxPro Version: ' + VERSION(4) + ')' ) THIS.ChangeLanguage() THIS.o_FSO = CREATEOBJECT("Scripting.FileSystemObject") @@ -801,7 +797,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION ERASE ( lcFileCDX ) - THIS.writeLog( 'FoxBin2Prg UNLOAD' ) + THIS.writeLog( 'FoxBin2Prg UNLOAD -', 2 ) THIS.writeLog( REPLICATE( '*', 100 ) ) THIS.writeLog( ) THIS.writeLog_Flush() @@ -936,7 +932,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION FUNCTION get_l_ConfigEvaluated - RETURN THIS.l_ConfigEvaluated + RETURN THIS.l_Main_CFG_Loaded ENDFUNC @@ -1531,11 +1527,17 @@ DEFINE CLASS c_foxbin2prg AS SESSION * tcOptimizeByFilestamp (v? IN ) Indica si se debe optimizar por filestamp ('1') o no ('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 *-------------------------------------------------------------------------------------------------------------- LPARAMETERS tcDontShowProgress, tcDontShowErrors, tcNoTimestamps, tcDebug, tcRecompile, tcExtraBackupLevels ; - , tcClearUniqueID, tcOptimizeByFilestamp, tc_InputFile, tcInputFile_Type + , tcClearUniqueID, tcOptimizeByFilestamp, tc_InputFile, tcInputFile_Type, toParentCFG + + #IF .F. + LOCAL toParentCFG AS CL_CFG OF 'FOXBIN2PRG.PRG' + #ENDIF LOCAL lcConfigFile, llExiste_CFG_EnDisco, laConfig(1), I, lcConfData, lcExt, lcValue, lc_CFG_Path, lcConfigLine, laDirInfo(1,5) ; + , lnDirs, laDirs(1) ; , lo_CFG AS CL_CFG OF 'FOXBIN2PRG.PRG' ; , lo_Configuration AS Collection ; , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' ; @@ -1545,11 +1547,19 @@ DEFINE CLASS c_foxbin2prg AS SESSION WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' STORE 0 TO lnKey loLang = _SCREEN.o_FoxBin2Prg_Lang - tcRecompile = EVL(tcRecompile,.c_Recompile) + tcRecompile = EVL(tcRecompile, .c_Recompile) lcConfigFile = .c_Foxbin2prg_ConfigFile tc_InputFile = EVL(tc_InputFile, .c_InputFile) - .c_InputFile = tc_InputFile tcInputFile_Type = EVL(tcInputFile_Type,'') + lo_Configuration = .o_Configuration + + IF VARTYPE(toParentCFG) <> 'O' THEN + toParentCFG = NULL + ENDIF + + IF ISNULL(toParentCFG) THEN + .c_InputFile = tc_InputFile + ENDIF *-- Determino el tipo de InputFile (Archivo o Directorio) IF EMPTY(tcInputFile_Type) AND NOT EMPTY(tc_InputFile) @@ -1565,10 +1575,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDCASE ENDIF - IF .l_AllowMultiConfig AND .l_Main_CFG_Loaded AND NOT EMPTY(tc_InputFile) AND NOT tcInputFile_Type == C_FILETYPE_QUERYSUPPORT THEN - *IF EMPTY(tc_InputFile) - * ERROR loLang.C_FILE_NOT_FOUND_LOC + ': .c_InputFile = "' + tc_InputFile + '"' - *ENDIF + IF .l_Main_CFG_Loaded AND NOT EMPTY(tc_InputFile) AND NOT tcInputFile_Type == C_FILETYPE_QUERYSUPPORT THEN IF tcInputFile_Type == C_FILETYPE_DIRECTORY THEN lcConfigFile = FORCEPATH( 'foxbin2prg.cfg', tc_InputFile ) ELSE @@ -1582,14 +1589,49 @@ DEFINE CLASS c_foxbin2prg AS SESSION lc_CFG_Path = UPPER( JUSTPATH( lcConfigFile ) ) lo_CFG = THIS - IF .l_Main_CFG_Loaded AND lo_Configuration.Count > 0 - .n_CFG_Actual = lo_Configuration.GetKey( lc_CFG_Path ) && 0=No hay CFG cacheada, +1=Hay CFG cacheada + *-- Búsqueda del CFG del PATH indicado en la caché + IF .l_Main_CFG_Loaded - IF .n_CFG_Actual > 0 THEN - lo_CFG = lo_Configuration.Item(.n_CFG_Actual) - .l_CFG_CachedAccess = .T. - ELSE - .l_CFG_CachedAccess = .F. + IF lo_Configuration.Count > 0 THEN + .n_CFG_Actual = lo_Configuration.GetKey( lc_CFG_Path ) && 0 = No hay CFG cacheada, >0 = Hay CFG cacheada + + IF .n_CFG_Actual > 0 THEN + lo_CFG = lo_Configuration.Item(.n_CFG_Actual) + .l_CFG_CachedAccess = .T. + ENDIF + ENDIF + + *-- Si no se pasó un CFG padre y no hay CFGs o no encuentra el del PATH indicado, analizo la jararquía + IF ISNULL(toParentCFG) AND (lo_Configuration.Count = 0 OR .n_CFG_Actual = 0) THEN + toParentCFG = THIS + + IF LEFT( lc_CFG_Path, 2 ) == '\\' THEN + lnDirs = OCCURS( '\', lc_CFG_Path ) - 3 + ELSE + lnDirs = OCCURS( '\', lc_CFG_Path ) + ENDIF + + IF lnDirs > 0 THEN + DIMENSION laDirs(lnDirs) + + *-- Creo el array con los PATH intermedios + FOR I = lnDirs TO 1 STEP -1 + IF I = lnDirs THEN + laDirs(I) = JUSTPATH(lc_CFG_Path) + ELSE + laDirs(I) = JUSTPATH(laDirs(I+1)) + ENDIF + ENDFOR + + *-- Ahora evalúo las configuraciones de los PATH intermedios desde la raíz en adelante + *-- y mantengo la última configuración CFG Padre en toParentCFG para usarla como base. + FOR I = 1 TO lnDirs + .EvaluarConfiguracion( '', '', '', '', '', '', '', '', laDirs(I), C_FILETYPE_DIRECTORY, @toParentCFG) + ENDFOR + + .n_CFG_Actual = 0 + .l_CFG_CachedAccess = .F. + ENDIF ENDIF ENDIF @@ -1609,23 +1651,34 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDCASE + IF .l_Main_CFG_Loaded + IF .l_CFG_CachedAccess THEN + toParentCFG = lo_CFG + .writeLog( '> ' + UPPER(loLang.C_USING_THIS_SETTINGS_LOC) + ': ' + tc_InputFile + ' => (' + lo_CFG.c_Foxbin2prg_ConfigFile + ')' ) + .writeLog() + EXIT + ENDIF + + lo_CFG = CREATEOBJECT('CL_CFG') + lo_Configuration.Add( lo_CFG, lc_CFG_Path ) + + IF NOT ISNULL(toParentCFG) + lo_CFG.CopyFrom(toParentCFG) + toParentCFG = lo_CFG + ENDIF + + ELSE + lo_Configuration.Add( NULL, lc_CFG_Path ) && La NULL se carga solo cuando no hay Main_CFG_loaded todavía. + ENDIF + *-- NOTA: SOLO LOS QUE NO VENGAN DE PARÁMETROS EXTERNOS DEBEN ASIGNARSE A lo_CFG AQUÍ. IF llExiste_CFG_EnDisco .writeLog( ) .writeLog( '> ' + loLang.C_READING_CFG_VALUES_FROM_DISK_LOC + ':' ) .writeLog( C_TAB + loLang.C_CONFIGFILE_LOC + ' ' + lcConfigFile ) - IF .l_AllowMultiConfig AND .l_ConfigEvaluated AND .l_Main_CFG_Loaded - lo_CFG = CREATEOBJECT('CL_CFG') - lo_Configuration.Add( lo_CFG, lc_CFG_Path ) - ELSE - lo_Configuration.Add( NULL, lc_CFG_Path ) && La NULL se carga solo cuando no hay Main_CFG_loaded todavía. - ENDIF - .n_CFG_Actual = lo_Configuration.Count - *lo_CFG.c_Foxbin2prg_FullPath = '' lo_CFG.c_Foxbin2prg_ConfigFile = lcConfigFile - *lo_CFG.c_CurDir = '' FOR I = 1 TO ALINES( laConfig, FILETOSTR( lcConfigFile ), 1+4 ) .set_Line( @lcConfigLine, @laConfig, I ) @@ -1639,8 +1692,8 @@ DEFINE CLASS c_foxbin2prg AS SESSION CASE LEFT( laConfig(I), 10 ) == LOWER('Extension:') lcConfData = ALLTRIM( SUBSTR( laConfig(I), 11 ) ) lcExt = 'c_' + ALLTRIM( GETWORDNUM( lcConfData, 1, '=' ) ) - IF PEMSTATUS( THIS, lcExt, 5 ) - .ADDPROPERTY( lcExt, UPPER( ALLTRIM( GETWORDNUM( lcConfData, 2, '=' ) ) ) ) + IF PEMSTATUS( lo_CFG, lcExt, 5 ) + lo_CFG.ADDPROPERTY( lcExt, UPPER( ALLTRIM( GETWORDNUM( lcConfData, 2, '=' ) ) ) ) *.writeLog( 'Reconfiguración de extensión:' + ' ' + lcExt + ' a ' + UPPER( ALLTRIM( GETWORDNUM( lcConfData, 2, '=' ) ) ) ) .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > ' + loLang.C_EXTENSION_RECONFIGURATION_LOC + ' ' + lcExt + ' a ' + UPPER( ALLTRIM( GETWORDNUM( lcConfData, 2, '=' ) ) ) ) ENDIF @@ -1712,13 +1765,6 @@ DEFINE CLASS c_foxbin2prg AS SESSION .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > OptimizeByFilestamp: ' + TRANSFORM(lcValue) ) ENDIF - CASE LEFT( laConfig(I), 17 ) == LOWER('AllowMultiConfig:') - lcValue = ALLTRIM( SUBSTR( laConfig(I), 18 ) ) - IF INLIST( lcValue, '0', '1' ) THEN - lo_CFG.l_AllowMultiConfig = ( TRANSFORM(lcValue) == '1' ) - .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > AllowMultiConfig: ' + TRANSFORM(lcValue) ) - ENDIF - CASE LEFT( laConfig(I), 16 ) == LOWER('UseClassPerFile:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 17 ) ) IF INLIST( lcValue, '0', '1', '2' ) THEN @@ -1835,9 +1881,6 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDCASE ENDFOR - *IF .l_AllowMultiConfig AND .l_Main_CFG_Loaded AND lo_Configuration.Count > 0 - * .n_CFG_Actual = lo_Configuration.Count &&lo_Configuration.GetKey( UPPER( JUSTPATH( lcConfigFile ) ) ) - *ENDIF .writeLog( ) ENDIF && llExiste_CFG_EnDisco @@ -1895,7 +1938,6 @@ DEFINE CLASS c_foxbin2prg AS SESSION .l_Main_CFG_Loaded = .T. ENDIF - .l_ConfigEvaluated = .T. .writeLog( ) ENDWITH && THIS @@ -3621,13 +3663,24 @@ DEFINE CLASS c_foxbin2prg AS SESSION LPARAMETERS tcText, tnTimestamp TRY - IF EVL(tnTimestamp,0) = 1 THEN - THIS.c_TextErr = THIS.c_TextErr + TTOC(DATETIME(),3) + ' ' - ENDIF + WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + IF EVL(tnTimestamp,0) = 1 THEN + *-- Format: Timestamp__Text + .c_TextErr = .c_TextErr + TTOC(DATETIME(),3) + ' ' + ENDIF - THIS.c_TextErr = THIS.c_TextErr + EVL(tcText,'') + CR_LF - THIS.errOut(tcText) - THIS.l_Error = .T. + *-- Format: Text + .c_TextErr = .c_TextErr + EVL(tcText,'') + + IF EVL(tnTimestamp,0) = 2 THEN + *-- Format: Text__Timestamp + .c_TextErr = .c_TextErr + ' ' + TTOC(DATETIME(),3) + ENDIF + + .c_TextErr = .c_TextErr + CR_LF + .errOut(tcText) + .l_Error = .T. + ENDWITH CATCH ENDTRY ENDPROC @@ -3646,11 +3699,22 @@ DEFINE CLASS c_foxbin2prg AS SESSION LPARAMETERS tcText, tnTimestamp TRY - IF EVL(tnTimestamp,0) = 1 THEN - THIS.c_TextLog = THIS.c_TextLog + TTOC(DATETIME(),3) + ' ' - ENDIF + WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + IF EVL(tnTimestamp,0) = 1 THEN + *-- Format: Timestamp__Text + .c_TextLog = .c_TextLog + TTOC(DATETIME(),3) + ' ' + ENDIF - THIS.c_TextLog = THIS.c_TextLog + EVL(tcText,'') + CR_LF + *-- Format: Text + .c_TextLog = .c_TextLog + EVL(tcText,'') + + IF EVL(tnTimestamp,0) = 2 THEN + *-- Format: Text__Timestamp + .c_TextLog = .c_TextLog + ' ' + TTOC(DATETIME(),3) + ENDIF + + .c_TextLog = .c_TextLog + CR_LF + ENDWITH CATCH ENDTRY ENDPROC @@ -24518,6 +24582,7 @@ DEFINE CLASS CL_CFG AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] #IF .F. @@ -24535,8 +24600,8 @@ DEFINE CLASS CL_CFG AS CUSTOM l_Recompile = NULL l_NoTimestamps = NULL l_ClearUniqueID = NULL - l_ClearDBFLastUpdate = NULL - l_OptimizeByFilestamp = NULL + l_ClearDBFLastUpdate = NULL + l_OptimizeByFilestamp = NULL l_RedirectClassPerFileToMain = NULL n_UseClassPerFile = NULL l_ClassPerFileCheck = NULL @@ -24561,6 +24626,50 @@ DEFINE CLASS CL_CFG AS CUSTOM DBC_Conversion_Support = NULL c_BackgroundImage = NULL + + PROCEDURE CopyFrom + *-- Copia las propiedades del CFG indicado + LPARAMETERS toParentCFG + + WITH THIS AS CL_CFG OF 'FOXBIN2PRG.PRG' + .c_Foxbin2prg_FullPath = toParentCFG.c_Foxbin2prg_FullPath + .c_Foxbin2prg_ConfigFile = toParentCFG.c_Foxbin2prg_ConfigFile + .c_CurDir = toParentCFG.c_CurDir + .l_Debug = toParentCFG.l_Debug + .l_ShowErrors = toParentCFG.l_ShowErrors + .n_ShowProgressbar = toParentCFG.n_ShowProgressbar + .l_Recompile = toParentCFG.l_Recompile + .l_NoTimestamps = toParentCFG.l_NoTimestamps + .l_ClearUniqueID = toParentCFG.l_ClearUniqueID + .l_ClearDBFLastUpdate = toParentCFG.l_ClearDBFLastUpdate + .l_OptimizeByFilestamp = toParentCFG.l_OptimizeByFilestamp + .l_RedirectClassPerFileToMain = toParentCFG.l_RedirectClassPerFileToMain + .n_UseClassPerFile = toParentCFG.n_UseClassPerFile + .l_ClassPerFileCheck = toParentCFG.l_ClassPerFileCheck + .n_ExtraBackupLevels = toParentCFG.n_ExtraBackupLevels + .c_VC2 = toParentCFG.c_VC2 + .c_SC2 = toParentCFG.c_SC2 + .c_PJ2 = toParentCFG.c_PJ2 + .c_FR2 = toParentCFG.c_FR2 + .c_LB2 = toParentCFG.c_LB2 + .c_DB2 = toParentCFG.c_DB2 + .c_DC2 = toParentCFG.c_DC2 + .c_MN2 = toParentCFG.c_MN2 + .PJX_Conversion_Support = toParentCFG.PJX_Conversion_Support + .VCX_Conversion_Support = toParentCFG.VCX_Conversion_Support + .SCX_Conversion_Support = toParentCFG.SCX_Conversion_Support + .FRX_Conversion_Support = toParentCFG.FRX_Conversion_Support + .LBX_Conversion_Support = toParentCFG.LBX_Conversion_Support + .MNX_Conversion_Support = toParentCFG.MNX_Conversion_Support + .DBF_Conversion_Support = toParentCFG.DBF_Conversion_Support + .DBF_Conversion_Included = toParentCFG.DBF_Conversion_Included + .DBF_Conversion_Excluded = toParentCFG.DBF_Conversion_Excluded + .DBC_Conversion_Support = toParentCFG.DBC_Conversion_Support + .c_BackgroundImage = toParentCFG.c_BackgroundImage + ENDWITH + ENDPROC + + ENDDEFINE From eacdb713732db8ad872ea9653b86b38fc3d336d0 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 2 Apr 2015 13:55:57 +0200 Subject: [PATCH 083/123] =?UTF-8?q?-=20Actualizaci=C3=B3n=20del=20archivo?= =?UTF-8?q?=20LOG=20de=20cambios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 1 + foxbin2prg.prg | 1 + 2 files changed, 2 insertions(+) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 5506bf2..a0ab304 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -45,6 +45,7 @@ Change History ------------------------------------------------------------- - Feature: New property "l_ProcessFiles" that allow setting to .F. when using foxbin2prg as object to get Processing file info with get_Processed method without actual processing - Bug Fix frx/lbx: Trimmed some extra CR,LF,TAB from FR2/LB2 tag that where included in previous versions (Ryan Harris) - Bug Fix scx/vcx/dbc: Delete ERR files when processing with UseClassPerFile switch (Ryan Harris) +- Feature: Implemented CFG inheritance between directories 2015/01/18 v1.19.41 - Bug Fix db2: Erroneous detection of Invalid Table when size is less than 328 bytes. Lower limit was changed to 65 bytes. diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 7dff887..655b0a0 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -155,6 +155,7 @@ * 23/03/2015 FDBOZZO v1.19.42 Bug Fix mnx: No se mantiene el Pad vacío al regenerar el menú cuando se define un menu con un Pad sin nombre (Lutz Scheffler) * 25/03/2015 FDBOZZO v1.19.42 Mejora: Nueva propiedad l_ProcessFiles que permite obtener la lista de archivos a procesar sin procesarlos realmente usando el valor .F. * 25/03/2015 FDBOZZO v1.19.42 Bug Fix frx/lbx: Arreglo de CR,LF,TAB sobrantes en algunos archivos FR2/LB2 agregados en versiones anteriores (Ryan Harris) +* 02/04/2015 FDBOZZO v1.19.42 Mejora: Herencia de CFGs entre directorios * * *--------------------------------------------------------------------------------------------------- From 8dc145234967334a2718d314ab8666aa0b1c8056 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 2 Apr 2015 15:59:31 +0200 Subject: [PATCH 084/123] =?UTF-8?q?-=20Ajustes=20de=20tests=20unitarios=20?= =?UTF-8?q?para=20comprobar=20la=20funcionalidad=20de=20la=20evaluaci?= =?UTF-8?q?=C3=B3n=20de=20configuraci=C3=B3n=20con=20herencia=20por=20dire?= =?UTF-8?q?ctorio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...rg__c_foxbin2prg__EvaluarConfiguracion.prg | 162 +++++++++++++++++- foxbin2prg.prg | 6 +- 2 files changed, 158 insertions(+), 10 deletions(-) diff --git a/TESTS/ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion.prg b/TESTS/ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion.prg index 9fb53ab..3aea210 100644 --- a/TESTS/ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion.prg +++ b/TESTS/ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion.prg @@ -1805,6 +1805,85 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O ENDFUNC + ******************************************************************************************************************************************* + FUNCTION Deberia_SetearElSoporte_DBF_Como_2_CuandoExistaElArhivo_foxbin2prg_cfg_EnDirArchivo_YDirectorioPadreTengaOtroValor + LOCAL lnCodError, lnCodError_Esperado, lcSeteo, leValorEsperado, leValor ; + , loFB2P AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ; + , loEx AS EXCEPTION + #IF .F. + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + #ENDIF + + TRY + loEx = NULL + loFB2P = THIS.ioFB2P + loFB2P.l_ShowErrors = .F. + loFB2P.c_Foxbin2prg_ConfigFile = FULLPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest ) + STRTOFILE( 'DBF_Conversion_Support:0', FULLPATH( 'foxbin2prg.cfg', ADDBS(oFXU_LIB.cPathDatosTest) + '..\' ) ) && Escribe en \TESTS + STRTOFILE( 'DBF_Conversion_Support:2', loFB2P.c_Foxbin2prg_ConfigFile ) + + + *-- DATOS DE ENTRADA + STORE 0 TO lnCodError + lcSeteo = 'DBF_Conversion_Support:' + leValorEsperado = 2 + + + *-- TEST + loFB2P.EvaluarConfiguracion() + leValor = loFB2P.DBF_Conversion_Support + + + CATCH TO loEx + + FINALLY + THIS.Evaluate_results( loEx, lnCodError_Esperado, lcSeteo, leValorEsperado, leValor ) + ERASE (FULLPATH( 'foxbin2prg.cfg', ADDBS(oFXU_LIB.cPathDatosTest) + '..\' )) + + ENDTRY + + ENDFUNC + + + ******************************************************************************************************************************************* + FUNCTION Deberia_SetearElSoporte_DBF_Como_2_CuandoExistaElArhivo_foxbin2prg_cfg_EnDirectorioPadre + LOCAL lnCodError, lnCodError_Esperado, lcSeteo, leValorEsperado, leValor ; + , loFB2P AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ; + , loEx AS EXCEPTION + #IF .F. + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + #ENDIF + + TRY + loEx = NULL + loFB2P = THIS.ioFB2P + loFB2P.l_ShowErrors = .F. + loFB2P.c_Foxbin2prg_ConfigFile = FULLPATH( 'foxbin2prg.cfg', ADDBS(oFXU_LIB.cPathDatosTest) + '..\' ) + STRTOFILE( 'DBF_Conversion_Support:2', loFB2P.c_Foxbin2prg_ConfigFile ) + + + *-- DATOS DE ENTRADA + STORE 0 TO lnCodError + lcSeteo = 'DBF_Conversion_Support:' + leValorEsperado = 2 + + + *-- TEST + loFB2P.EvaluarConfiguracion() + leValor = loFB2P.DBF_Conversion_Support + + + CATCH TO loEx + + FINALLY + THIS.Evaluate_results( loEx, lnCodError_Esperado, lcSeteo, leValorEsperado, leValor ) + ERASE (loFB2P.c_Foxbin2prg_ConfigFile) + + ENDTRY + + ENDFUNC + + ******************************************************************************************************************************************* FUNCTION Deberia_SetearElSoporte_DBF_Como_1_CuandoNoExistaElArhivo_foxbin2prg_cfg LOCAL lnCodError, lnCodError_Esperado, lcSeteo, leValorEsperado, leValor ; @@ -2419,7 +2498,6 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O loEx = NULL loFB2P = THIS.ioFB2P loFB2P.l_ShowErrors = .F. - loFB2P.l_AllowMultiConfig = .T. loFB2P.c_InputFile = FORCEPATH( 'test.vcx', oFXU_LIB.cPathDatosTest ) lcCFG_File = FORCEPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest ) STRTOFILE( 'LBX_Conversion_Support: 1', lcCFG_File ) @@ -2480,7 +2558,6 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O loEx = NULL loFB2P = THIS.ioFB2P loFB2P.l_ShowErrors = .F. - loFB2P.l_AllowMultiConfig = .T. loFB2P.c_Foxbin2prg_ConfigFile = FORCEPATH( 'foxbin2prg.cfg', ADDBS(oFXU_LIB.cPathDatosTest) + 'noexiste' ) loFB2P.c_InputFile = FORCEPATH( 'test.vcx', oFXU_LIB.cPathDatosTest ) lcCFG_File = FORCEPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest ) @@ -2546,7 +2623,6 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O loEx = NULL loFB2P = THIS.ioFB2P loFB2P.l_ShowErrors = .F. - loFB2P.l_AllowMultiConfig = .T. lcCFG_File = FORCEPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest ) STRTOFILE( 'LBX_Conversion_Support: 1', lcCFG_File ) @@ -2561,16 +2637,86 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O *-- TEST - loFB2P.EvaluarConfiguracion() && Carga config.Principal + *loFB2P.EvaluarConfiguracion() && Carga config.Principal + *-- c:\desa\foxbin2prg\foxbin2prg.cfg loFB2P.c_InputFile = loFB2P.c_Foxbin2prg_ConfigFile loFB2P.EvaluarConfiguracion() && Carga config.secundaria laCFG_CachedAccess(1) = loFB2P.get_l_CFG_CachedAccess() + *-- c:\desa\foxbin2prg\tests\datos_test\foxbin2prg.cfg + loFB2P.c_InputFile = FORCEPATH( 'test.vcx', ADDBS(oFXU_LIB.cPathDatosTest) + '..\otro' ) + loFB2P.EvaluarConfiguracion() && Carga config.secundaria + laCFG_CachedAccess(2) = loFB2P.get_l_CFG_CachedAccess() + + *-- c:\desa\foxbin2prg\tests\datos_test\otro\foxbin2prg.cfg + loFB2P.c_InputFile = FORCEPATH( 'test.vcx', oFXU_LIB.cPathDatosTest ) + loFB2P.EvaluarConfiguracion() && Carga config.secundaria + laCFG_CachedAccess(3) = loFB2P.get_l_CFG_CachedAccess() + + leValor = loFB2P.LBX_Conversion_Support + + + + CATCH TO loEx + + FINALLY + THIS.Evaluate_results( loEx, lnCodError_Esperado, lcSeteo, leValorEsperado, leValor ) + + THIS.messageout( 'Configuración Principal: ' + loFB2P.c_Foxbin2prg_ConfigFile ) + THIS.messageout( 'Configuración Secundaria: ' + lcCFG_File ) + + FOR I = 1 TO ALEN(laCFG_CachedAccess_Esperado) + THIS.messageout( 'Configuración cacheada en acceso ' + TRANSFORM(I) + ' esperada: ' + TRANSFORM( laCFG_CachedAccess_Esperado(I) ) ) + THIS.assertequals( laCFG_CachedAccess_Esperado(I), laCFG_CachedAccess(I), 'CONFIGURACIÓN CACHEADA EN ACCESO ' + TRANSFORM(I) ) + ENDFOR + + ENDTRY + + ENDFUNC + + + ******************************************************************************************************************************************* + FUNCTION Deberia_SetearElSoporte_LBX_Como_0_CuandoExista_CFG_Secundario_EnElDirEvaluado_Y_UsarValorCacheadoEnSegundoAcceso + LOCAL lnCodError, lnCodError_Esperado, lcSeteo, leValorEsperado, leValor, lcCFG_File ; + , laCFG_CachedAccess(3), laCFG_CachedAccess_Esperado(3), I ; + , loFB2P AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ; + , loEx AS EXCEPTION + #IF .F. + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + #ENDIF + + TRY + loEx = NULL + loFB2P = THIS.ioFB2P + loFB2P.l_ShowErrors = .F. + lcCFG_File = FORCEPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest ) + STRTOFILE( 'LBX_Conversion_Support: 1', lcCFG_File ) + + + *-- DATOS DE ENTRADA + STORE 0 TO lnCodError + lcSeteo = 'LBX_Conversion_Support:' + leValorEsperado = 1 + laCFG_CachedAccess_Esperado(1) = .T. + laCFG_CachedAccess_Esperado(2) = .T. + laCFG_CachedAccess_Esperado(3) = .T. + + + *-- TEST + *loFB2P.EvaluarConfiguracion() && Carga config.Principal + + *-- c:\desa\foxbin2prg\foxbin2prg.cfg + loFB2P.c_InputFile = loFB2P.c_Foxbin2prg_ConfigFile + loFB2P.EvaluarConfiguracion() && Carga config.secundaria + laCFG_CachedAccess(1) = loFB2P.get_l_CFG_CachedAccess() + + *-- c:\desa\foxbin2prg\tests\datos_test\otro\foxbin2prg.cfg loFB2P.c_InputFile = FORCEPATH( 'test.vcx', ADDBS(oFXU_LIB.cPathDatosTest) + 'otro' ) loFB2P.EvaluarConfiguracion() && Carga config.secundaria laCFG_CachedAccess(2) = loFB2P.get_l_CFG_CachedAccess() + *-- c:\desa\foxbin2prg\tests\datos_test\foxbin2prg.cfg (DEBE CACHEAR DE CUANDO PROCESÓ EL ANTERIOR) loFB2P.c_InputFile = FORCEPATH( 'test.vcx', oFXU_LIB.cPathDatosTest ) loFB2P.EvaluarConfiguracion() && Carga config.secundaria laCFG_CachedAccess(3) = loFB2P.get_l_CFG_CachedAccess() @@ -2611,7 +2757,6 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O loEx = NULL loFB2P = THIS.ioFB2P loFB2P.l_ShowErrors = .F. - loFB2P.l_AllowMultiConfig = .T. *loFB2P.c_Foxbin2prg_ConfigFile = FORCEPATH( 'foxbin2prg.cfg', ADDBS(oFXU_LIB.cPathDatosTest) + 'noexiste' ) *loFB2P.c_InputFile = FORCEPATH( 'test.vcx', oFXU_LIB.cPathDatosTest ) lcCFG_File = FORCEPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest ) @@ -2628,18 +2773,21 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O *-- TEST - loFB2P.EvaluarConfiguracion() && Carga config.Principal + *loFB2P.EvaluarConfiguracion() && Carga config.Principal *loFB2P.c_InputFile = loFB2P.c_Foxbin2prg_ConfigFile - loFB2P.c_InputFile = FORCEPATH( 'test1.vcx', ADDBS(oFXU_LIB.cPathDatosTest) + 'otro' ) + *-- c:\desa\foxbin2prg\foxbin2prg.cfg + loFB2P.c_InputFile = FORCEPATH( 'test1.vcx', loFB2P.c_Foxbin2prg_ConfigFile ) loFB2P.EvaluarConfiguracion() && Carga config.secundaria laCFG_CachedAccess(1) = loFB2P.get_l_CFG_CachedAccess() + *-- c:\desa\foxbin2prg\tests\datos_test\foxbin2prg.cfg loFB2P.c_InputFile = FORCEPATH( 'test2.vcx', oFXU_LIB.cPathDatosTest ) loFB2P.EvaluarConfiguracion() && Carga config.secundaria laCFG_CachedAccess(2) = loFB2P.get_l_CFG_CachedAccess() + *-- c:\desa\foxbin2prg\tests\datos_test\foxbin2prg.cfg loFB2P.c_InputFile = FORCEPATH( 'test3.vcx', oFXU_LIB.cPathDatosTest ) loFB2P.EvaluarConfiguracion() && Carga config.secundaria laCFG_CachedAccess(3) = loFB2P.get_l_CFG_CachedAccess() diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 655b0a0..953cdf2 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -1578,16 +1578,16 @@ DEFINE CLASS c_foxbin2prg AS SESSION IF .l_Main_CFG_Loaded AND NOT EMPTY(tc_InputFile) AND NOT tcInputFile_Type == C_FILETYPE_QUERYSUPPORT THEN IF tcInputFile_Type == C_FILETYPE_DIRECTORY THEN - lcConfigFile = FORCEPATH( 'foxbin2prg.cfg', tc_InputFile ) + lcConfigFile = FULLPATH( 'foxbin2prg.cfg', ADDBS(tc_InputFile) ) ELSE - lcConfigFile = FORCEPATH( 'foxbin2prg.cfg', JUSTPATH(tc_InputFile) ) + lcConfigFile = FULLPATH( 'foxbin2prg.cfg', tc_InputFile ) ENDIF ENDIF lo_Configuration = .o_Configuration .n_CFG_Actual = 0 .l_CFG_CachedAccess = .F. - lc_CFG_Path = UPPER( JUSTPATH( lcConfigFile ) ) + lc_CFG_Path = UPPER( JUSTPATH( FULLPATH( lcConfigFile ) ) ) lo_CFG = THIS *-- Búsqueda del CFG del PATH indicado en la caché From 2df37c592926a551b42ac1bb195030dd38da580c Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 2 Apr 2015 16:02:56 +0200 Subject: [PATCH 085/123] - Ajuste UT de reportes FRX - Ajuste de vista texto FRX para verificar el nuevo resultado de donde se quitan CRLF innecesarios de algunos tags --- TESTS/DATOS_READONLY/test_report.fr2 | 3 +-- TESTS/ut__foxbin2prg.prg | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/TESTS/DATOS_READONLY/test_report.fr2 b/TESTS/DATOS_READONLY/test_report.fr2 index 4cb613f..81ef573 100644 --- a/TESTS/DATOS_READONLY/test_report.fr2 +++ b/TESTS/DATOS_READONLY/test_report.fr2 @@ -84,8 +84,7 @@ and .t.]]> - +