diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 4976511..11b4dd7 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -2,8 +2,8 @@ Lparameters toUpdateInfo Local lcNote With toUpdateInfo - .VersionNumber = 'v1.19.37' - .VersionDate = Date(2014,11,30) + .VersionNumber = 'v1.19.38' + .VersionDate = Date(2014,12,13) .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 ------------------------------------------------------------- +2014/12/13 v1.19.38 +- Feature: Now is possible to use FoxBin2Prg for batch conversions directly from the File Explorer (see README.txt), without the need of vbs scripts, that sometimes can make trouble or are not permitted by IT department (Francisco Prieto) +- Feature: Enhanced Multilanguage support by 3 ways: 1-Automatic [DEFAULT] (depending on VERSION(3)); 2-By parameter, using the new method ChangeLanguage(); 3-Using the new setting "Language" in foxbin2prg.cfg +- Feature: Detection of duplicated methods on vc2/sc2 files to notify those cases of vcx/scx file corruption (Álvaro Castrillón) + 2014/11/30 v1.19.37 - Feature: Added Class per file support, configurable with UseClassPerFile:1 (Ryan Harris/Lutz Scheffler) - Feature: foxbin2prg.cfg configuration options can now have "&&" comments at the right of the values (edyshor) diff --git a/README.txt b/README.txt index 2ca91ef..d19bbff 100644 --- a/README.txt +++ b/README.txt @@ -1,4 +1,4 @@ -26/01/2014 FOXBIN2PRG v1.19 FOR VISUAL FOXPRO 9 BINARIES Fernando D. Bozzo (fdbozzo@gmail.com) +13/12/2014 FOXBIN2PRG v1.19 FOR VISUAL FOXPRO 9 BINARIES Fernando D. Bozzo (fdbozzo@gmail.com) Blog: http://fdbozzo.blogspot.com.es/ Project info: https://vfpx.codeplex.com/wikipage?title=FoxBin2Prg @@ -34,15 +34,21 @@ USE: DO FOXBIN2PRG.PRG WITH "\archivo.scx" ==> Generates the TEXT version sc2 extension DO FOXBIN2PRG.PRG WITH "\archivo.sc2" ==> Regenerates the binary version with scx extension -USEFUL TRICK: -You can create shortcuts for all vbs scripts in the "SendTo" folder on your user Windows Profile, so you can "send" -the selected file (pjx,pj2,etc) to the selected script, and make on-the-fly conversions. -In example: Select a file, right-click, SendTo -> VFP9_FoxBin2Prg.vbs +USEFUL SETUP: +You can create 3 shortcuts of FoxBin2Prg.exe and move them to "SendTo" folder on your Windows profile, +so you can "send" the selected file (pjx,pj2,etc) to the selected option, and make on-the-fly conversions, +then rename them as this (make sure you can see system file extensions): + +Name------------------------ Right-click/Properties/destination----------- What you can do with this option--------- +FoxBin2Prg - Binary2Text.lnk \foxbin2prg.exe "BIN2PRG-INTERACTIVE" Process directories or individual files +FoxBin2Prg - Text2Binary.lnk \foxbin2prg.exe "PRG2BIN-INTERACTIVE" Process directories or individual files +FoxBin2Prg.lnk \foxbin2prg.exe "INTERACTIVE" Process individual files + +In example: Select a file, right-click, SendTo -> FoxBin2Prg + LOCALIZATION: -If file [foxbin2prg.h] is created, texts to other languages can be translated. En example -file [foxbin2prg_en.h] is attached with english translation. -Recompiling is necesary to update the strings from the include file. +Is automatic starting at v1.19.38 (Languages: EN,ES,FR,DE) FINAL NOTE: @@ -87,15 +93,21 @@ USO: DO FOXBIN2PRG.PRG WITH "\archivo.scx" ==> Genera la versión TEXTO con extensión sc2 DO FOXBIN2PRG.PRG WITH "\archivo.sc2" ==> Regenera la versión binaria con extensión scx -TRUCO UTIL: -Se puede crear accesos directos de todos los scripts vbs en la carpeta "SendTo" del perfil del usuario, para poder "enviar" -el archivo elegido (pjx,pj2,etc) al script seleccionado, y así hacer conversiones al vuelo. -Por ejemplo: Seleccionar un archivo, click-derecho, Enviar A -> VFP9_FoxBin2Prg.vbs +CONFIGURACIÓN UTIL: +Se puede crear 3 accesos directos de FoxBin2Prg.exe y moverlos a la carpeta "SendTo" de su perfil de usuario Windows, +para poder "enviar" el archivo elegido (pjx,pj2,etc) a la opción seleccionada, y así hacer conversiones al vuelo, +luego puede renombrar y modificar esos accesos directos como sigue (asegúrese de que puede ver las extensiones del sistema): + +Nombre------------------------ Click-Derecho/Propiedades/destino------------ Qué puede hacer con esta opción---------- +FoxBin2Prg - Binary2Text.lnk \foxbin2prg.exe "BIN2PRG-INTERACTIVE" Procesar directorios o archivos individuales +FoxBin2Prg - Text2Binary.lnk \foxbin2prg.exe "PRG2BIN-INTERACTIVE" Procesar directorios o archivos individuales +FoxBin2Prg.lnk \foxbin2prg.exe "INTERACTIVE" Procesar archivos individuales + +Por ejemplo: Seleccionar un archivo, click-derecho, Enviar A -> FoxBin2Prg + LOCALIZACIÓN: -Si se crea un archivo [foxbin2prg.h], se pueden trasladar los textos a otros idiomas. Se adjunta -un archivo de ejemplo [foxbin2prg_en.h] con la traslación al inglés. -Es necesario recompilar el programa para que se actualicen los textos con el archivo include. +Es automática desde la v1.19.38 (Lenguajes: EN,ES,FR,DE) NOTA FINAL: diff --git a/TESTS/ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion.prg b/TESTS/ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion.prg index 9152d58..2eb40a6 100644 --- a/TESTS/ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion.prg +++ b/TESTS/ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion.prg @@ -292,7 +292,7 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O ADDPROPERTY( loFB2P_Esperado, 'DBC_Conversion_Support', 1 ) ADDPROPERTY( loFB2P_Esperado, 'l_ShowProgress', .T. ) ADDPROPERTY( loFB2P_Esperado, 'l_ShowErrors', .T. ) - ADDPROPERTY( loFB2P_Esperado, 'l_Recompile', .F. ) + ADDPROPERTY( loFB2P_Esperado, 'l_Recompile', .T. ) ADDPROPERTY( loFB2P_Esperado, 'l_NoTimestamps', .T. ) ADDPROPERTY( loFB2P_Esperado, 'l_ClearUniqueID', .T. ) ADDPROPERTY( loFB2P_Esperado, 'l_Debug', .T. ) @@ -2427,7 +2427,7 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O STORE 0 TO lnCodError lcSeteo = 'LBX_Conversion_Support:' leValorEsperado = 1 - laCFG_CachedAccess_Esperado(1) = .F. + laCFG_CachedAccess_Esperado(1) = .T. laCFG_CachedAccess_Esperado(2) = .T. laCFG_CachedAccess_Esperado(3) = .T. @@ -2489,7 +2489,7 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O STORE 0 TO lnCodError lcSeteo = 'LBX_Conversion_Support:' leValorEsperado = 0 - laCFG_CachedAccess_Esperado(1) = .F. + laCFG_CachedAccess_Esperado(1) = .T. laCFG_CachedAccess_Esperado(2) = .T. laCFG_CachedAccess_Esperado(3) = .T. diff --git a/foxbin2prg.cfg b/foxbin2prg.cfg index 38cbbf8..aa1c3ff 100644 --- a/foxbin2prg.cfg +++ b/foxbin2prg.cfg @@ -1,10 +1,13 @@ **************************************************************************************************** -* FOXBIN2PRG v1.19.37 +* FOXBIN2PRG v1.19.38 * CONFIGURATION FILE / ARCHIVO DE CONFIGURACIÓN **************************************************************************************************** **************************************************************************************************** -* OPTION DOCUMENTATION SECTION / SECCIÓN DE DOCUMENTACIÓN DE OPCIONES +* SECTION DOCUMENTATION OF OPTIONS / SECCIÓN DE DOCUMENTACIÓN DE OPCIONES +* +* EN: Note: This values have precedence over internal parameters and parameters used on scripts +* ES: Nota: Estos valores tienen precedencia sobre los parámetros internos y los parámetros usados en los scripts * * DETAIL OF SUPPORTED VALUES / DETALLE DE VALORES SOPORTADOS * If no values given, these are the DEFAULTS / Si no se proporcionan valores, estos son los PREDETERMINADOS @@ -20,6 +23,7 @@ * OptimizeByFilestamp: 0 && Optimize file regeneration depending on file timestamp / Optimizar la regeneración de archivos dependiendo del timestamp de archivo * AllowMultiConfig: 1 && 1=Allow CFG files per directory. if no CFG found, then use Main CFG. 0=Only use Main CFG * DropNullCharsFromCode: 1 && 1=Drop NULL chars from source code / 0=Leave Nulls in code, if any +* Language: (auto) && Language of shown messages and LOGs. EN=English, FR=French, ES=Español, DE=German, Not defined = AUTOMATIC [DEFAULT] *-- CONVERTION OPTIONS / OPCIONES DE CONVERSIÓN * XXX_Conversion_Support: N && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge) @@ -41,9 +45,6 @@ * RedirectClassPerFileToMain: 0 && 0=Don't redirect to file.tx2, 1=Redirect to file.tx2 when selecting file.class.tx2 / 0=No redireccionar a archivo.tx2, 1=Redireccionar a archivo.tx2 cuando se seleccione archivo.clase.tx2 * ClassPerFileCheck: 0 && 0=Don't check file.class.tx2 inclusion, 1=Check file.class.tx2 inclusion / 0=No verificar la inclusión de archivo.clase.tx2, 1=Verificar la inclusión de archivo.clase.tx2 * -* EN: Note: This values have precedence over internal parameters and parameters used on scripts -* ES: Nota: Estos valores tienen precedencia sobre los parámetros internos y los parámetros usados en los scripts -* * END DOCUMENTATION SECTION / FIN DE LA SECCIÓN DE DOCUMENTACIÓN **************************************************************************************************** diff --git a/foxbin2prg.exe b/foxbin2prg.exe index bc0aabe..8738b12 100644 Binary files a/foxbin2prg.exe and b/foxbin2prg.exe differ diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2 index dff68b5..ea82618 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 = "37" +_Revision = "38" _LanguageID = "1034" _AutoIncrement = "0" * diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index e3cbbe5..34f7a7f 100644 Binary files a/foxbin2prg.pjt and b/foxbin2prg.pjt differ diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx index 677609b..d6b8460 100644 Binary files a/foxbin2prg.pjx and b/foxbin2prg.pjx differ diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 93ae46f..1083630 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -4,14 +4,14 @@ * Project info...: https://vfpx.codeplex.com/wikipage?title=FoxBin2Prg * Fecha creación.: 04/11/2013 * -* LICENCIA: -* Esta obra está sujeta a la licencia Reconocimiento-CompartirIgual 4.0 Internacional de Creative Commons. -* Para ver una copia de esta licencia, visite http://creativecommons.org/licenses/by-sa/4.0/deed.es_ES. -* * LICENCE: * This work is licensed under the Creative Commons Attribution 4.0 International License. * To view a copy of this license, visit http://creativecommons.org/licenses/by/4.0/. * +* LICENCIA: +* Esta obra está sujeta a la licencia Reconocimiento-CompartirIgual 4.0 Internacional de Creative Commons. +* Para ver una copia de esta licencia, visite http://creativecommons.org/licenses/by-sa/4.0/deed.es_ES. +* *--------------------------------------------------------------------------------------------------- * DESCRIPCIÓN....: CONVIERTE EL ARCHIVO VCX/SCX/PJX INDICADO A UN "PRG HÍBRIDO" PARA POSTERIOR RECONVERSIÓN. * * EL PRG HÍBRIDO ES UN PRG CON ALGUNAS SECCIONES BINARIAS (OLE DATA, ETC) @@ -117,6 +117,9 @@ * 30/11/2014 FDBOZZO v1.19.37 Mejora: Indicador de avance de proceso más informativo * 30/11/2014 FDBOZZO v1.19.37 Mejora: Se puede cancelar el proceso con la tecla Esc * 30/11/2014 FDBOZZO v1.19.37 Mejora: Agregado control para detectar reportes no compatibles con VFP 9 +* 04/12/2014 FDBOZZO v1.19.38 Mejora: Permitir hacer conversiones masivas bin2prg y prg2bin sin los scripts vbs (Francisco Prieto) +* 06/12/2014 FDBOZZO v1.19.38 Mejora: Rediseño de la Internacionalización. Ahora la selección es automática al cargar y no requiere recompilar. +* 12/12/2014 FDBOZZO v1.19.38 Mejora: Detección de métodos duplicados para notificar casos de corrupción (Álvaro Castrillón) * * *--------------------------------------------------------------------------------------------------- @@ -168,6 +171,8 @@ * 19/11/2014 edyshor MEJORA dbf v1.19.36: Nuevo parámetro ClearDBFLastUpdate para evitar diferencias por este dato (Agregado en v1.19.37) * 14/10/2014 Lutz Scheffler MEJORA v1.19.36: Permitir generar una clase por archivo (pregunta) * 21/10/2014 Ryan Harris MEJORA v1.19.36: Permitir generar una clase por archivo (sugerencia) +* 04/12/2014 Francisco Prieto MEJORA v1.19.36: Permitir hacer conversiones masivas bin2prg y prg2bin sin los scripts vbs +* 12/12/2014 Álvaro Castrillón MEJORA v1.19.36: Detección de métodos duplicados para notificar casos de corrupción * * *--------------------------------------------------------------------------------------------------- @@ -178,8 +183,11 @@ * *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) -* tc_InputFile (v! IN ) Nombre completo (fullpath) del archivo a convertir -* tcType (v? IN ) Tipo de archivo de entrada. Compatibilidad con SCCTEXT.PRG // Si se indica "*" y tc_InputFile es un PJX, se procesa todo el proyecto +* tc_InputFile (v! IN ) Nombre completo (fullpath) del archivo a convertir o nombre del directorio a procesar +* - Si se indica "BIN2PRG", se procesa el directorio indicado en tcType para generar los TX2 +* - Si se indica "PRG2BIN", se procesa el directorio indicado en tcType para generar los BIN +* tcType (v? IN ) Tipo de archivo de entrada. Compatibilidad con SCCTEXT.PRG +* - Si se indica "*" y tc_InputFile es un PJX, se procesa todo el proyecto * tcTextName (v? IN ) Nombre del archivo texto. Compatibilidad con SCCTEXT.PRG * tlGenText (v? IN ) .T.=Genera Texto, .F.=Genera Binario. Compatibilidad con SCCTEXT.PRG * tcDontShowErrors (v? IN ) '1' para NO mostrar errores con MESSAGEBOX @@ -383,65 +391,6 @@ LPARAMETERS tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDeb #DEFINE SERVERINSTANCE_MULTIUSE 3 && Multi-use server *-- Fin / End -******************************************************************************************************************* -*-- INTERNACIONALIZACIÓN / INTERNATIONALIZATION -******************************************************************************************************************* -#IF FILE('foxbin2prg.h') && DO NOT CHANGE THIS! Just rename the .H file - #INCLUDE foxbin2prg.h && DO NOT CHANGE THIS! Just rename the .H file -#ELSE - *--------------------------------------------------------------------------------------------------------- - *-- TRANSLACIÓN AL ESPAÑOL - *--------------------------------------------------------------------------------------------------------- - #DEFINE C_ASTERISK_EXT_NOT_ALLOWED_LOC "No se admiten extensiones * o ? porque es peligroso (se pueden pisar binarios con archivo xx2 vacíos)." - #DEFINE C_BACKLINK_CANT_UPDATE_BL_LOC "No se pudo actualizar el backlink" - #DEFINE C_BACKLINK_OF_TABLE_LOC "de la tabla" - #DEFINE C_BACKUP_OF_LOC "Haciendo Backup de: " - #DEFINE C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC "No se puede generar el archivo [<>] porque es ReadOnly" - #DEFINE C_CONFIGFILE_LOC "Usando archivo de configuración:" - #DEFINE C_CONVERTER_UNLOAD_LOC "Descarga del conversor" - #DEFINE C_CONVERTING_FILE_LOC "Convirtiendo archivo" - #DEFINE C_DATA_ERROR_CANT_PARSE_UNPAIRING_DOUBLE_QUOTES_LOC "Error de datos: No se puede parsear porque las comillas no son pares en la línea <>" - #DEFINE C_DUPLICATED_FILE_LOC "Archivo duplicado" - #DEFINE C_ENDDEFINE_MARKER_NOT_FOUND_LOC "No se ha encontrado el marcador de fin [ENDDEFINE] de la línea <> para el identificador [<>]" - #DEFINE C_END_MARKER_NOT_FOUND_LOC "No se ha encontrado el marcador de fin [<>] que cierra al marcador de inicio [<>] de la línea <>" - #DEFINE C_EXTENSION_RECONFIGURATION_LOC "Reconfiguración de extensión:" - #DEFINE C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES "El conteo de clases externas (<>) no coincide con la cantidad encontrada (<>) para el archivo [<>]" - #DEFINE C_EXTERNAL_CLASS_NAME_DOES_NOT_FOUND "No se ha encontrado la clase externa [<>] del archivo [<>]" - #DEFINE C_FIELD_NOT_FOUND_ON_FILE_STRUCTURE_LOC "No se encontró el campo [<>] en la estructura del archivo <>" - #DEFINE C_FILE_DOESNT_EXIST_LOC "El archivo no existe:" - #DEFINE C_FILE_NAME_IS_NOT_SUPPORTED_LOC "El archivo [<<.c_InputFile>>] no está soportado" - #DEFINE C_FILE_NOT_FOUND_LOC "No se encontró el archivo" - #DEFINE C_FOXBIN2PRG_ERROR_CAPTION_LOC "FOXBIN2PRG: ERROR!!" - #DEFINE C_FOXBIN2PRG_INFO_SINTAX_LOC "FOXBIN2PRG: INFORMACIÓN DE SINTAXIS" - #DEFINE C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC "FOXBIN2PRG [,cType ,cTextName ,cGenText ,cNoMostrarErrores ,cDebug, cDontShowProgress, cOriginalFileName, cRecompile, cNoTimestamps]" + CR_LF + CR_LF ; - + "Ejemplo para generar los TXT de todos los VCX de 'c:\desa\clases', sin mostrar ventana de error y generando archivo LOG: " + CR_LF ; - + " FOXBIN2PRG 'c:\desa\clases\*.vcx' '0' '0' '0' '1' '1'" + CR_LF + CR_LF ; - + "Ejemplo para generar los VCX de todos los TXT de 'c:\desa\clases', sin mostrar ventana de error y sin LOG: " + CR_LF ; - + " FOXBIN2PRG 'c:\desa\clases\*.vc2' '0' '0' '0' '1' '0'" - #DEFINE C_FOXBIN2PRG_JUST_VFP_9_LOC "¡FOXBIN2PRG es solo para Visual FoxPro 9.0!" - #DEFINE C_FOXBIN2PRG_WARN_CAPTION_LOC "FOXBIN2PRG: ¡ATENCIÓN!" - #DEFINE C_MENU_NOT_IN_VFP9_FORMAT_LOC "El Menú [<>] NO está en formato VFP 9! - Por favor convertirlo a VFP 9 con MODIFY MENU '<>'" - #DEFINE C_LANGUAGE_LOC "ES" - #DEFINE C_NAMES_CAPITALIZATION_PROGRAM_FOUND_LOC "* Se ha encontrado el programa de capitalización de nombres [<>]" - #DEFINE C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC "* No se ha encontrado el programa de capitalización de nombres [<>]" - #DEFINE C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC "Objeto [<>] no contiene el objeto oReg (nivel <>)" - #DEFINE C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC "Operación no reconocida. Solo re reconoce SETNAME y GETNAME." - #DEFINE C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC "Optimización: El archivo de salida [<>] no se sobreescribe por ser igual al generado." - #DEFINE C_OUTPUTFILE_NEWER_THAN_INPUTFILE_LOC "Optimización: El archivo de salida [<>] no se regenera por ser más nuevo que el de entrada." - #DEFINE C_PROCEDURE_NOT_CLOSED_ON_LINE_LOC "Procedimiento sin cerrar. La última línea de código debe ser ENDPROC. [<>, Recno:<>]" - #DEFINE C_PROCESSING_LOC "Procesando archivo" - #DEFINE C_PROCESS_PROGRESS_LOC "Avance del proceso:" - #DEFINE C_PROPERTY_NAME_NOT_RECOGNIZED_LOC "Propiedad [<>] no reconocida." - #DEFINE C_REPORT_NOT_IN_VFP9_FORMAT_LOC "El Reporte [<>] NO está en formato VFP 9! - Por favor convertirlo a VFP 9 con MODIFY REPORT '<>'" - #DEFINE C_REQUESTING_CAPITALIZATION_OF_FILE_LOC "- Solicitado capitalizar el archivo [<>]" - #DEFINE C_SOURCEFILE_LOC "Archivo origen: " - #DEFINE 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 <>" - #DEFINE 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 <>" - #DEFINE C_UNKNOWN_CLASS_NAME_LOC "Clase [<>] desconocida" - #DEFINE C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC "¡¡ATENCIÓN!!" + CR_LF+ "ASEGÚRESE DE QUE NO ESTÁ USANDO UN ALIAS DE TABLA EN LAS EXPRESIONES DE LOS ÍNDICES!! (ej: index on <>.campo tag nombreclave)" -#ENDIF -******************************************************************************************************************* - LOCAL loCnv AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' LOCAL lnResp, loEx AS EXCEPTION @@ -453,6 +402,14 @@ LOCAL lnResp, loEx AS EXCEPTION * MESSAGEBOX( SYS(5)+CURDIR(),64+4096,PROGRAM(),5000) *ENDIF +*-- En el caso de recibir "BIN2PRG" o "PRG2BIN" en el primer parámetro, los invierto. +IF INLIST(UPPER(TRANSFORM(tc_InputFile)), 'BIN2PRG', 'PRG2BIN', 'BIN2PRG-INTERACTIVE', 'PRG2BIN-INTERACTIVE', 'INTERACTIVE') THEN + pcParamX = tc_InputFile + tc_InputFile = tcType + tcType = pcParamX + RELEASE pcParamX +ENDIF + loCnv = CREATEOBJECT("c_foxbin2prg") loEx = NULL @@ -493,11 +450,12 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM LOCAL THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF _MEMBERDATA = [] ; + + [] ; + [] ; + [] ; + [] ; + [] ; - + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -505,7 +463,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -519,10 +479,12 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -558,11 +520,13 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -574,6 +538,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -582,28 +548,31 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] + DIMENSION a_ProcessedFiles(1) PROTECTED l_ConfigEvaluated, n_CFG_Actual, l_Main_CFG_Loaded, o_Configuration, l_CFG_CachedAccess *-- n_FB2PRG_Version = 1.19 - *-- Localized properties - c_loc_processing_file = C_PROCESSING_LOC - c_loc_process_progress = C_PROCESS_PROGRESS_LOC *-- - c_Language = 'ES' + c_Language = '' && EN, FR, ES, DE + c_loc_processing_file = '' + c_loc_process_progress = '' c_FB2PRG_EXE_Version = 0 c_Foxbin2prg_FullPath = '' c_Foxbin2prg_ConfigFile = '' c_CurDir = '' c_InputFile = '' c_OriginalFileName = '' - c_LogFile = '' + c_LogFile = ADDBS( SYS(2023) ) + 'FoxBin2Prg_Debug.LOG' + c_ErrorLogFile = ADDBS( SYS(2023) ) + 'FoxBin2Prg_Error.LOG' c_TextLog = '' c_OutputFile = '' + c_Recompile = '1' c_Type = '' t_InputFile_TimeStamp = {//::} t_OutputFile_TimeStamp = {//::} @@ -613,7 +582,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM l_ConfigEvaluated = .F. l_Debug = .F. l_Error = .F. - c_ErrorLog = '' + c_TextErr = '' l_Test = .F. l_ShowErrors = .T. l_ShowProgress = .T. @@ -636,8 +605,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM n_CFG_Actual = 0 n_ID = 0 n_FileHandle = 0 + n_ProcessedFiles = 0 o_Conversor = NULL o_Frm_Avance = NULL + o_WSH = NULL o_FSO = NULL o_FNC = NULL && Filename_caps object o_Configuration = NULL @@ -676,6 +647,13 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ON ESCAPE ERROR 1799 SET ESCAPE ON + ERASE (THIS.c_ErrorLogFile) + ERASE (THIS.c_LogFile) + + THIS.writeLog( REPLICATE( '*', 100 ) ) + THIS.writeLog( 'FoxBin2Prg INIT' ) + THIS.writeLog( REPLICATE( '*', 100 ) ) + THIS.ChangeLanguage() lcSys16 = SYS(16) IF LEFT(lcSys16,10) == 'PROCEDURE ' @@ -684,15 +662,17 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM lnPosProg = 1 ENDIF - THIS.c_Language = C_LANGUAGE_LOC THIS.c_Foxbin2prg_FullPath = SUBSTR( lcSys16, lnPosProg ) THIS.c_Foxbin2prg_ConfigFile = FORCEEXT( THIS.c_Foxbin2prg_FullPath, 'CFG' ) THIS.c_CurDir = SYS(5) + CURDIR() - THIS.o_FSO = NEWOBJECT("Scripting.FileSystemObject") + THIS.o_FSO = CREATEOBJECT("Scripting.FileSystemObject") + THIS.o_WSH = CREATEOBJECT("WScript.Shell") THIS.o_Configuration = CREATEOBJECT("COLLECTION") lc_Foxbin2prg_EXE = FORCEEXT( THIS.c_Foxbin2prg_FullPath, 'EXE' ) THIS.c_FB2PRG_EXE_Version = IIF( AGETFILEVERSION( laValues, lc_Foxbin2prg_EXE ) = 0, TRANSFORM(THIS.n_FB2PRG_Version), laValues(4) ) ADDPROPERTY(_SCREEN, 'ExitCode', 0) + THIS.writeLog( THIS.c_Foxbin2prg_FullPath + ' (EXE Version: ' + THIS.c_FB2PRG_EXE_Version + ')' ) + THIS.EvaluarConfiguracion() RELEASE lcSys16, lnPosProg, lc_Foxbin2prg_EXE, laValues RETURN ENDPROC @@ -705,6 +685,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ERASE ( lcFileCDX ) + THIS.writeLog( 'FoxBin2Prg UNLOAD' ) + THIS.writeLog( REPLICATE( '*', 100 ) ) + THIS.writeLog( ) THIS.writeLog_Flush() THIS.descargar_frm_avance() CATCH @@ -712,6 +695,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM FINALLY ON ESCAPE THIS.o_FSO = NULL + THIS.o_WSH = NULL THIS.o_FNC = NULL ENDTRY @@ -738,6 +722,16 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC + PROCEDURE ChangeLanguage + LPARAMETERS tcLanguageId + _SCREEN.AddProperty( "o_FoxBin2Prg_Lang", CREATEOBJECT("CL_LANG", tcLanguageId) ) + *-- Localized properties + THIS.c_Language = _SCREEN.o_FoxBin2Prg_Lang.C_LANGUAGE_LOC + THIS.c_loc_processing_file = _SCREEN.o_FoxBin2Prg_Lang.C_PROCESSING_LOC + THIS.c_loc_process_progress = _SCREEN.o_FoxBin2Prg_Lang.C_PROCESS_PROGRESS_LOC + ENDPROC + + FUNCTION get_l_ConfigEvaluated RETURN THIS.l_ConfigEvaluated ENDFUNC @@ -775,15 +769,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC - PROCEDURE l_Recompile_ACCESS - IF THIS.n_CFG_Actual = 0 OR ISNULL( THIS.o_Configuration( THIS.n_CFG_Actual ) ) - RETURN THIS.l_Recompile - ELSE - RETURN NVL( THIS.o_Configuration( THIS.n_CFG_Actual ).l_Recompile, THIS.l_Recompile ) - ENDIF - ENDPROC - - PROCEDURE l_NoTimestamps_ACCESS IF THIS.n_CFG_Actual = 0 OR ISNULL( THIS.o_Configuration( THIS.n_CFG_Actual ) ) RETURN THIS.l_NoTimestamps @@ -1160,12 +1145,14 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM #ENDIF TRY - LOCAL lcNext_Bak, lcExt_1, lcExt_2, lcExt_3, tcOutputFile_Ext1, tcOutputFile_Ext2, tcOutputFile_Ext3 + LOCAL lcNext_Bak, lcExt_1, lcExt_2, lcExt_3, tcOutputFile_Ext1, tcOutputFile_Ext2, tcOutputFile_Ext3 ; + , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' STORE '' TO tcBakFile_1, tcBakFile_2, tcBakFile_3, lcExt_1, lcExt_2, lcExt_3 ; , tcOutputFile_Ext1, tcOutputFile_Ext2, tcOutputFile_Ext3 WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' IF .n_ExtraBackupLevels > 0 THEN + loLang = _SCREEN.o_FoxBin2Prg_Lang tcOutputFile = EVL( tcOutputFile, .c_OutputFile ) lcNext_Bak = .getNext_BAK( tcOutputFile ) lcExt_1 = JUSTEXT( tcOutputFile ) @@ -1203,11 +1190,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- LOG DO CASE CASE EMPTY(lcExt_2) - .writeLog( C_BACKUP_OF_LOC + tcOutputFile_Ext1 ) + .writeLog( loLang.C_BACKUP_OF_LOC + tcOutputFile_Ext1 ) CASE EMPTY(lcExt_3) - .writeLog( C_BACKUP_OF_LOC + tcOutputFile_Ext1 + '/' + lcExt_2 ) + .writeLog( loLang.C_BACKUP_OF_LOC + tcOutputFile_Ext1 + '/' + lcExt_2 ) OTHERWISE - .writeLog( C_BACKUP_OF_LOC + tcOutputFile_Ext1 + '/' + lcExt_2 + '/' + lcExt_3 ) + .writeLog( loLang.C_BACKUP_OF_LOC + tcOutputFile_Ext1 + '/' + lcExt_2 + '/' + lcExt_3 ) ENDCASE *-- COPIA BACKUP @@ -1273,22 +1260,25 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM LPARAMETERS tcDontShowProgress, tcDontShowErrors, tcNoTimestamps, tcDebug, tcRecompile, tcExtraBackupLevels ; , tcClearUniqueID, tcOptimizeByFilestamp, tc_InputFile - LOCAL lcConfigFile, llExisteConfig, laConfig(1), I, lcConfData, lcExt, lcValue, lc_CFG_Path, lcConfigLine ; + LOCAL lcConfigFile, llExiste_CFG_EnDisco, laConfig(1), I, lcConfData, lcExt, lcValue, lc_CFG_Path, lcConfigLine, laDir(1,5) ; , lo_CFG AS CL_CFG OF 'FOXBIN2PRG.PRG' ; , lo_Configuration AS Collection ; + , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' ; , loEx as Exception TRY WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' STORE 0 TO lnKey - tcRecompile = EVL(tcRecompile,'1') + loLang = _SCREEN.o_FoxBin2Prg_Lang + tcRecompile = EVL(tcRecompile,.c_Recompile) lcConfigFile = .c_Foxbin2prg_ConfigFile tc_InputFile = EVL(tc_InputFile, .c_InputFile) + .c_InputFile = tc_InputFile - IF .l_AllowMultiConfig AND .l_Main_CFG_Loaded - IF EMPTY(tc_InputFile) - ERROR C_FILE_NOT_FOUND_LOC + ': .c_InputFile = "' + tc_InputFile + '"' - ENDIF + IF .l_AllowMultiConfig AND .l_Main_CFG_Loaded AND NOT EMPTY(tc_InputFile) THEN + *IF EMPTY(tc_InputFile) + * ERROR loLang.C_FILE_NOT_FOUND_LOC + ': .c_InputFile = "' + tc_InputFile + '"' + *ENDIF lcConfigFile = FORCEPATH( 'foxbin2prg.cfg', JUSTPATH(tc_InputFile) ) ENDIF @@ -1298,26 +1288,47 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM lc_CFG_Path = UPPER( JUSTPATH( lcConfigFile ) ) IF .l_Main_CFG_Loaded AND lo_Configuration.Count > 0 - .n_CFG_Actual = lo_Configuration.GetKey( lc_CFG_Path ) + .n_CFG_Actual = lo_Configuration.GetKey( lc_CFG_Path ) && 0=No hay CFG cacheada, +1=Hay CFG cacheada .l_CFG_CachedAccess = (.n_CFG_Actual > 0) ENDIF lo_CFG = THIS - IF .n_CFG_Actual = 0 THEN - llExisteConfig = FILE( lcConfigFile ) - ENDIF + DO CASE + CASE .n_CFG_Actual = 0 + *-- Si no se encontró un CFG cacheado, se busca si existe un archivo CFG en disco + llExiste_CFG_EnDisco = ( ADIR( laDir, lcConfigFile ) = 1 ) - IF llExisteConfig AND .n_CFG_Actual = 0 - .writeLog( C_CONFIGFILE_LOC + ' ' + lcConfigFile ) + IF NOT llExiste_CFG_EnDisco + .l_CFG_CachedAccess = .T. && Es cacheado porque sin archivo CFG usa config.interna + ENDIF + + CASE ISNULL( .o_Configuration( .n_CFG_Actual ) ) + *-- Si existe una configuración y es NULL, se usa la predeterminada + *.n_CFG_Actual = 0 + + ENDCASE + + *-- NOTA: SOLO LOS QUE NO VENGAN DE PARÁMETROS EXTERNOS DEBEN ASIGNARSE A lo_CFG AQUÍ. + IF llExiste_CFG_EnDisco + .writeLog( ) + .writeLog( '> READING CFG VALUES FROM DISK' ) + .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 ) + .n_CFG_Actual = lo_Configuration.Count ELSE - lo_Configuration.Add( NULL, lc_CFG_Path ) + lo_Configuration.Add( NULL, lc_CFG_Path ) && La NULL se carga solo cuando no hay Main_CFG_loaded todavía. + *.n_CFG_Actual = 0 + .n_CFG_Actual = lo_Configuration.Count ENDIF + *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 ) *laConfig(I) = LOWER( laConfig(I) ) .set_Line( @lcConfigLine, @laConfig, I ) @@ -1334,14 +1345,14 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM IF PEMSTATUS( THIS, lcExt, 5 ) .ADDPROPERTY( lcExt, UPPER( ALLTRIM( GETWORDNUM( lcConfData, 2, '=' ) ) ) ) *.writeLog( 'Reconfiguración de extensión:' + ' ' + lcExt + ' a ' + UPPER( ALLTRIM( GETWORDNUM( lcConfData, 2, '=' ) ) ) ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > ' + C_EXTENSION_RECONFIGURATION_LOC + ' ' + 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 CASE LEFT( laConfig(I), 17 ) == LOWER('DontShowProgress:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 18 ) ) IF NOT INLIST( TRANSFORM(tcDontShowProgress), '0', '1' ) AND INLIST( lcValue, '0', '1' ) THEN tcDontShowProgress = lcValue - .writeLog( JUSTFNAME(lcConfigFile) + ' > tcDontShowProgress: ' + TRANSFORM(tcDontShowProgress) ) + .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > tcDontShowProgress: ' + TRANSFORM(tcDontShowProgress) ) ENDIF CASE LEFT( laConfig(I), 15 ) == LOWER('DontShowErrors:') @@ -1350,225 +1361,238 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM lcValue = ALLTRIM( SUBSTR( laConfig(I), 16 ) ) IF NOT INLIST( TRANSFORM(tcDontShowErrors), '0', '1' ) AND INLIST( lcValue, '0', '1' ) THEN tcDontShowErrors = lcValue - .writeLog( JUSTFNAME(lcConfigFile) + ' > tcDontShowErrors: ' + TRANSFORM(tcDontShowErrors) ) + .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > tcDontShowErrors: ' + TRANSFORM(tcDontShowErrors) ) ENDIF CASE LEFT( laConfig(I), 13 ) == LOWER('NoTimestamps:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 14 ) ) IF NOT INLIST( TRANSFORM(tcNoTimestamps), '0', '1' ) AND INLIST( lcValue, '0', '1' ) THEN tcNoTimestamps = lcValue - .writeLog( JUSTFNAME(lcConfigFile) + ' > tcNoTimestamps: ' + TRANSFORM(tcNoTimestamps) ) + .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > tcNoTimestamps: ' + TRANSFORM(tcNoTimestamps) ) ENDIF CASE LEFT( laConfig(I), 6 ) == LOWER('Debug:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 7 ) ) IF NOT INLIST( TRANSFORM(tcDebug), '0', '1' ) AND INLIST( lcValue, '0', '1' ) THEN tcDebug = lcValue - .writeLog( JUSTFNAME(lcConfigFile) + ' > tcDebug: ' + TRANSFORM(tcDebug) ) + .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > tcDebug: ' + TRANSFORM(tcDebug) ) ENDIF CASE LEFT( laConfig(I), 18 ) == LOWER('ExtraBackupLevels:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 19 ) ) IF NOT ISDIGIT( TRANSFORM(tcExtraBackupLevels) ) AND ISDIGIT( lcValue ) THEN tcExtraBackupLevels = lcValue - .writeLog( JUSTFNAME(lcConfigFile) + ' > tcExtraBackupLevels: ' + TRANSFORM(tcExtraBackupLevels) ) + .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > tcExtraBackupLevels: ' + TRANSFORM(tcExtraBackupLevels) ) ENDIF CASE LEFT( laConfig(I), 14 ) == LOWER('ClearUniqueID:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 15 ) ) IF NOT INLIST( TRANSFORM(tcClearUniqueID), '0', '1' ) AND INLIST( lcValue, '0', '1' ) THEN tcClearUniqueID = lcValue - .writeLog( JUSTFNAME(lcConfigFile) + ' > ClearUniqueID: ' + TRANSFORM(lcValue) ) + .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > ClearUniqueID: ' + TRANSFORM(lcValue) ) ENDIF CASE LEFT( laConfig(I), 19 ) == LOWER('ClearDBFLastUpdate:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 20 ) ) IF INLIST( lcValue, '0', '1' ) THEN lo_CFG.l_ClearDBFLastUpdate = ( TRANSFORM(lcValue) == '1' ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > ClearDBFLastUpdate: ' + TRANSFORM(lcValue) ) + .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > ClearDBFLastUpdate: ' + TRANSFORM(lcValue) ) ENDIF CASE LEFT( laConfig(I), 20 ) == LOWER('OptimizeByFilestamp:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 21 ) ) IF NOT INLIST( TRANSFORM(tcOptimizeByFilestamp), '0', '1' ) AND INLIST( lcValue, '0', '1' ) THEN tcOptimizeByFilestamp = lcValue - .writeLog( JUSTFNAME(lcConfigFile) + ' > OptimizeByFilestamp: ' + TRANSFORM(lcValue) ) + .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 .l_AllowMultiConfig = ( TRANSFORM(lcValue) == '1' ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > AllowMultiConfig: ' + TRANSFORM(lcValue) ) + .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' ) THEN .l_UseClassPerFile = ( TRANSFORM(lcValue) == '1' ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > UseClassPerFile: ' + TRANSFORM(lcValue) ) + .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > UseClassPerFile: ' + TRANSFORM(lcValue) ) ENDIF CASE LEFT( laConfig(I), 18 ) == LOWER('ClassPerFileCheck:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 19 ) ) IF INLIST( lcValue, '0', '1' ) THEN .l_ClassPerFileCheck = ( TRANSFORM(lcValue) == '1' ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > ClassPerFileCheck: ' + TRANSFORM(lcValue) ) + .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > ClassPerFileCheck: ' + TRANSFORM(lcValue) ) ENDIF CASE LEFT( laConfig(I), 27 ) == LOWER('RedirectClassPerFileToMain:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 28 ) ) IF INLIST( lcValue, '0', '1' ) THEN .l_RedirectClassPerFileToMain = ( TRANSFORM(lcValue) == '1' ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > RedirectClassPerFileToMain: ' + TRANSFORM(lcValue) ) + .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > RedirectClassPerFileToMain: ' + TRANSFORM(lcValue) ) ENDIF CASE LEFT( laConfig(I), 22 ) == LOWER('DropNullCharsFromCode:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 23 ) ) IF INLIST( lcValue, '0', '1' ) THEN .l_DropNullCharsFromCode = ( TRANSFORM(lcValue) == '1' ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > DropNullCharsFromCode: ' + TRANSFORM(lcValue) ) + .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > DropNullCharsFromCode: ' + TRANSFORM(lcValue) ) + ENDIF + + CASE LEFT( laConfig(I), 9 ) == LOWER('Language:') + *-- CASO ESPECIAL: El lenguaje no se guarda en lo_CFG, porque es un seteo Global. + lcValue = ALLTRIM( SUBSTR( laConfig(I), 10 ) ) + IF .T. + .ChangeLanguage(lcValue) + .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > Language: ' + TRANSFORM(lcValue) + ' (' + .c_Language + ')' ) ENDIF CASE LEFT( laConfig(I), 23 ) == LOWER('PJX_Conversion_Support:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) ) IF INLIST( lcValue, '0', '1', '2' ) THEN lo_CFG.PJX_Conversion_Support = INT( VAL( lcValue ) ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > PJX_Conversion_Support: ' + TRANSFORM(lo_CFG.PJX_Conversion_Support) ) + .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > PJX_Conversion_Support: ' + TRANSFORM(lo_CFG.PJX_Conversion_Support) ) ENDIF CASE LEFT( laConfig(I), 23 ) == LOWER('VCX_Conversion_Support:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) ) IF INLIST( lcValue, '0', '1', '2' ) THEN lo_CFG.VCX_Conversion_Support = INT( VAL( lcValue ) ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > VCX_Conversion_Support: ' + TRANSFORM(lo_CFG.VCX_Conversion_Support) ) + .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > VCX_Conversion_Support: ' + TRANSFORM(lo_CFG.VCX_Conversion_Support) ) ENDIF CASE LEFT( laConfig(I), 23 ) == LOWER('SCX_Conversion_Support:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) ) IF INLIST( lcValue, '0', '1', '2' ) THEN lo_CFG.SCX_Conversion_Support = INT( VAL( lcValue ) ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > SCX_Conversion_Support: ' + TRANSFORM(lo_CFG.SCX_Conversion_Support) ) + .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > SCX_Conversion_Support: ' + TRANSFORM(lo_CFG.SCX_Conversion_Support) ) ENDIF CASE LEFT( laConfig(I), 23 ) == LOWER('FRX_Conversion_Support:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) ) IF INLIST( lcValue, '0', '1', '2' ) THEN lo_CFG.FRX_Conversion_Support = INT( VAL( lcValue ) ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > FRX_Conversion_Support: ' + TRANSFORM(lo_CFG.FRX_Conversion_Support) ) + .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > FRX_Conversion_Support: ' + TRANSFORM(lo_CFG.FRX_Conversion_Support) ) ENDIF CASE LEFT( laConfig(I), 23 ) == LOWER('LBX_Conversion_Support:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) ) IF INLIST( lcValue, '0', '1', '2' ) THEN lo_CFG.LBX_Conversion_Support = INT( VAL( lcValue ) ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > LBX_Conversion_Support: ' + TRANSFORM(lo_CFG.LBX_Conversion_Support) ) + .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > LBX_Conversion_Support: ' + TRANSFORM(lo_CFG.LBX_Conversion_Support) ) ENDIF CASE LEFT( laConfig(I), 23 ) == LOWER('MNX_Conversion_Support:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) ) IF INLIST( lcValue, '0', '1', '2' ) THEN lo_CFG.MNX_Conversion_Support = INT( VAL( lcValue ) ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > MNX_Conversion_Support: ' + TRANSFORM(lo_CFG.MNX_Conversion_Support) ) + .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > MNX_Conversion_Support: ' + TRANSFORM(lo_CFG.MNX_Conversion_Support) ) ENDIF CASE LEFT( laConfig(I), 23 ) == LOWER('DBF_Conversion_Support:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) ) IF INLIST( lcValue, '0', '1', '2', '4' ) THEN lo_CFG.DBF_Conversion_Support = INT( VAL( lcValue ) ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > DBF_Conversion_Support: ' + TRANSFORM(lo_CFG.DBF_Conversion_Support) ) + .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > DBF_Conversion_Support: ' + TRANSFORM(lo_CFG.DBF_Conversion_Support) ) ENDIF CASE LEFT( laConfig(I), 24 ) == LOWER('DBF_Conversion_Included:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 25 ) ) IF NOT EMPTY(lcValue) THEN lo_CFG.DBF_Conversion_Included = lcValue - .writeLog( JUSTFNAME(lcConfigFile) + ' > DBF_Conversion_Included: ' + TRANSFORM(lo_CFG.DBF_Conversion_Included) ) + .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > DBF_Conversion_Included: ' + TRANSFORM(lo_CFG.DBF_Conversion_Included) ) ENDIF CASE LEFT( laConfig(I), 24 ) == LOWER('DBF_Conversion_Excluded:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 25 ) ) IF NOT EMPTY(lcValue) THEN lo_CFG.DBF_Conversion_Excluded = lcValue - .writeLog( JUSTFNAME(lcConfigFile) + ' > DBF_Conversion_Excluded: ' + TRANSFORM(lo_CFG.DBF_Conversion_Excluded) ) + .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > DBF_Conversion_Excluded: ' + TRANSFORM(lo_CFG.DBF_Conversion_Excluded) ) ENDIF CASE LEFT( laConfig(I), 23 ) == LOWER('DBC_Conversion_Support:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) ) IF INLIST( lcValue, '0', '1', '2' ) THEN lo_CFG.DBC_Conversion_Support = INT( VAL( lcValue ) ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > DBC_Conversion_Support: ' + TRANSFORM(lo_CFG.DBC_Conversion_Support) ) + .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > DBC_Conversion_Support: ' + TRANSFORM(lo_CFG.DBC_Conversion_Support) ) ENDIF 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 - ENDIF && llExisteConfig + *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 + *-- ESTOS SE EVALÚAN FUERA DEL IF PORQUE NO DEPENDEN DEL CFG + *-- Y PUEDEN VENIR TAMBIÉN DE PARÁMETROS EXTERNOS. IF INLIST( TRANSFORM(tcDontShowProgress), '0', '1' ) THEN lo_CFG.l_ShowProgress = NOT (TRANSFORM(tcDontShowProgress)=='1') ENDIF IF NOT EMPTY(tcDontShowErrors) - lo_CFG.l_ShowErrors = NOT (TRANSFORM(tcDontShowErrors) == '1') + lo_CFG.l_ShowErrors = NOT (TRANSFORM(tcDontShowErrors) == '1') ENDIF IF NOT .l_Main_CFG_Loaded - lo_CFG.l_Recompile = (EMPTY(tcRecompile) OR TRANSFORM(tcRecompile) == '1' OR DIRECTORY(tcRecompile)) + lo_CFG.l_Recompile = (EMPTY(tcRecompile) OR TRANSFORM(tcRecompile) == '1' OR DIRECTORY(tcRecompile)) ENDIF IF INLIST( TRANSFORM(tcNoTimestamps), '0', '1' ) THEN lo_CFG.l_NoTimestamps = NOT (TRANSFORM(tcNoTimestamps) == '0') ENDIF IF INLIST( TRANSFORM(tcClearUniqueID), '0', '1' ) THEN - lo_CFG.l_ClearUniqueID = NOT (TRANSFORM(tcClearUniqueID) == '0') + lo_CFG.l_ClearUniqueID = NOT (TRANSFORM(tcClearUniqueID) == '0') ENDIF IF INLIST( TRANSFORM(tcDebug), '0', '1' ) THEN - lo_CFG.l_Debug = (TRANSFORM(tcDebug)=='1') + lo_CFG.l_Debug = (TRANSFORM(tcDebug)=='1') ENDIF tcExtraBackupLevels = EVL( tcExtraBackupLevels, TRANSFORM( lo_CFG.n_ExtraBackupLevels ) ) IF ISDIGIT(tcExtraBackupLevels) - lo_CFG.n_ExtraBackupLevels = INT( VAL( TRANSFORM(tcExtraBackupLevels) ) ) + lo_CFG.n_ExtraBackupLevels = INT( VAL( TRANSFORM(tcExtraBackupLevels) ) ) ENDIF IF INLIST( TRANSFORM(tcOptimizeByFilestamp), '0', '1' ) THEN lo_CFG.l_OptimizeByFilestamp = NOT (TRANSFORM(tcOptimizeByFilestamp) == '0') ENDIF - .writeLog( '---' ) - .writeLog( '> l_ShowProgress: ' + TRANSFORM(.l_ShowProgress) ) - .writeLog( '> l_ShowErrors: ' + TRANSFORM(.l_ShowErrors) ) - .writeLog( '> l_Recompile: ' + TRANSFORM(.l_Recompile) + ' (' + EVL(tcRecompile,'') + ')' ) - .writeLog( '> l_NoTimestamps: ' + TRANSFORM(.l_NoTimestamps) ) - .writeLog( '> l_ClearUniqueID: ' + TRANSFORM(.l_ClearUniqueID) ) - .writeLog( '> l_UseClassPerFile: ' + TRANSFORM(.l_UseClassPerFile) ) - .writeLog( '> l_ClassPerFileCheck: ' + TRANSFORM(.l_ClassPerFileCheck) ) - .writeLog( '> l_RedirectClassPerFileToMain: ' + TRANSFORM(.l_RedirectClassPerFileToMain) ) - .writeLog( '> l_Debug: ' + TRANSFORM(.l_Debug) ) - .writeLog( '> n_ExtraBackupLevels: ' + TRANSFORM(.n_ExtraBackupLevels) ) - .writeLog( '> l_OptimizeByFilestamp: ' + TRANSFORM(.l_OptimizeByFilestamp) ) - .writeLog( '> l_DropNullCharsFromCode: ' + TRANSFORM(.l_DropNullCharsFromCode) ) - .writeLog( '> l_ClearDBFLastUpdate: ' + TRANSFORM(.l_ClearDBFLastUpdate) ) - - lo_CFG = NULL - RELEASE lo_CFG + .writeLog( '> USING THIS CONFIG:' ) + .writeLog( C_TAB + 'l_CFG_CachedAccess: ' + TRANSFORM(.l_CFG_CachedAccess) ; + + ' ( InputFile=[' + EVL(tc_InputFile,'') + '], CFG=[' + EVL(lo_CFG.c_Foxbin2prg_ConfigFile, '(Internal defaults)') + '] )' ) + .writeLog( C_TAB + 'l_ShowProgress: ' + TRANSFORM(.l_ShowProgress) ) + .writeLog( C_TAB + 'l_ShowErrors: ' + TRANSFORM(.l_ShowErrors) ) + .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 + 'l_ClassPerFileCheck: ' + TRANSFORM(.l_ClassPerFileCheck) ) + .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 + 'l_OptimizeByFilestamp: ' + TRANSFORM(.l_OptimizeByFilestamp) ) + .writeLog( C_TAB + 'l_DropNullCharsFromCode: ' + TRANSFORM(.l_DropNullCharsFromCode) ) + .writeLog( C_TAB + 'l_ClearDBFLastUpdate: ' + TRANSFORM(.l_ClearDBFLastUpdate) ) + .writeLog( C_TAB + 'c_Language: ' + TRANSFORM(.c_Language) ) + .writeLog( C_TAB + 'n_CFG_Actual: ' + TRANSFORM(.n_CFG_Actual) ) *-- Si existe una configuración y es NULL, se usa la predeterminada - *IF .l_AllowMultiConfig AND .n_CFG_Actual > 0 AND ISNULL( .o_Configuration( .n_CFG_Actual ) ) THEN - IF .n_CFG_Actual > 0 AND ISNULL( .o_Configuration( .n_CFG_Actual ) ) THEN - .n_CFG_Actual = 0 - ENDIF + *IF .n_CFG_Actual > 0 AND ISNULL( .o_Configuration( .n_CFG_Actual ) ) THEN + * .n_CFG_Actual = 0 + *ENDIF - .writeLog( '> l_CFG_CachedAccess: ' + TRANSFORM(.l_CFG_CachedAccess) + ' ( InputFile=' + tc_InputFile + ', CFG=' + FORCEPATH( 'foxbin2prg.cfg', lc_CFG_Path ) + ' )' ) + *IF NOT llExiste_CFG_EnDisco OR .n_CFG_Actual = 0 THEN + * .l_CFG_CachedAccess = .T. && Es acceso cacheado porque usa config.por defecto sin archivo CFG + *ENDIF - IF NOT llExisteConfig OR .n_CFG_Actual = 0 THEN - .l_CFG_CachedAccess = .T. && Es acceso cacheado porque usa config.por defecto sin archivo CFG - ENDIF + *.writeLog( '> l_CFG_CachedAccess: ' + TRANSFORM(.l_CFG_CachedAccess) ; + + ' ( InputFile=' + EVL(tc_InputFile,'(no)') + ', CFG=' + EVL(lo_CFG.c_Foxbin2prg_ConfigFile, '(Internal defaults)') + ' )' ) IF NOT .l_Main_CFG_Loaded THEN .l_Main_CFG_Loaded = .T. ENDIF .l_ConfigEvaluated = .T. + .writeLog( ) *ENDIF && .l_ConfigEvaluated ENDWITH && THIS @@ -1583,7 +1607,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM STORE NULL TO lo_Configuration, lo_CFG, loEx RELEASE tcDontShowProgress, tcDontShowErrors, tcNoTimestamps, tcDebug, tcRecompile, tcExtraBackupLevels ; , tcClearUniqueID, tcOptimizeByFilestamp, tc_InputFile ; - , lcConfigFile, llExisteConfig, laConfig, I, lcConfData, lcExt, lcValue, lc_CFG_Path ; + , lcConfigFile, llExiste_CFG_EnDisco, laConfig, I, lcConfData, lcExt, lcValue, lc_CFG_Path ; , lo_CFG, lo_Configuration, loEx ENDTRY @@ -1718,6 +1742,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM PROCEDURE TieneSoporte_Bin2Prg LPARAMETERS tcExt LOCAL llTieneSoporte + tcExt = UPPER(tcExt) WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' llTieneSoporte = ICASE( tcExt == 'PJX', .PJX_Conversion_Support >= 1 ; @@ -1739,6 +1764,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM PROCEDURE TieneSoporte_Prg2Bin LPARAMETERS tcExt LOCAL llTieneSoporte + tcExt = UPPER(tcExt) WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' llTieneSoporte = ICASE( tcExt == .c_PJ2, .PJX_Conversion_Support = 2 ; @@ -1760,8 +1786,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM PROCEDURE ejecutar *-------------------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) - * tc_InputFile (v! IN ) Nombre del archivo de entrada, o Tipo de archivo cuando SourceSafe consulta por tipo de Soporte habilitado - * tcType (v? IN ) Tipo de archivo de entrada. Compatibilidad con SCCTEXT.PRG // Si se indica "*" y tc_InputFile es un PJX, se procesa todo el proyecto + * tc_InputFile (v! IN ) Nombre completo (fullpath) del archivo a convertir o nombre del directorio a procesar + * tcType (v? IN ) Tipo de archivo de entrada. Compatibilidad con SCCTEXT.PRG + * - Si se indica "*" y tc_InputFile es un PJX, se procesa todo el proyecto + * - Si se indica "BIN2PRG", se procesa el directorio indicado en tc_InputFile para generar los TX2 + * - Si se indica "PRG2BIN", se procesa el directorio indicado en tc_InputFile para generar los BIN * tcTextName (v? IN ) Nombre del archivo texto. Compatibilidad con SCCTEXT.PRG * tlGenText (v? IN ) .T.=Genera Texto, .F.=Genera Binario. Compatibilidad con SCCTEXT.PRG * tcDontShowErrors (v? IN ) '1' para no mostrar mensajes de error (MESSAGEBOX) @@ -1787,60 +1816,87 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM , tcBackupLevels, tcClearUniqueID, tcOptimizeByFilestamp TRY - LOCAL I, lcPath, lnCodError, lcFileSpec, lcFile, laFiles(1,5) ; - , lnFileCount, lcErrorInfo ; + LOCAL I, lcPath, lnCodError, lcFileSpec, lcFile, laFiles(1,5), laDirInfo(1,5) ; + , lnFileCount, lcErrorInfo, lcErrorFile, lnPCount, laParams(1) ; , loEx AS EXCEPTION ; - , loFSO AS Scripting.FileSystemObject + , loFSO AS Scripting.FileSystemObject ; + , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' ; + , loWSH AS WScript.Shell WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' - lnCodError = 0 + lnCodError = 0 + loFSO = .o_FSO + loWSH = .o_WSH + DIMENSION .a_ProcessedFiles(1) + .n_ProcessedFiles = 0 + lnPCount = 0 - .writeLog( '---' ) - .writeLog( .c_Foxbin2prg_FullPath + ' (EXE Version: ' + .c_FB2PRG_EXE_Version + ')' + CR_LF ; - + C_TAB + 'tc_InputFile: ' + TRANSFORM(tc_InputFile) + CR_LF ; - + C_TAB + 'tcType: ' + TRANSFORM(tcType) + CR_LF; - + C_TAB + 'tcTextName: ' + TRANSFORM(tcTextName) + CR_LF ; - + C_TAB + 'tlGenText: ' + TRANSFORM(tlGenText) + CR_LF ; - + C_TAB + 'tcDontShowErrors: ' + TRANSFORM(tcDontShowErrors) + CR_LF ; - + C_TAB + 'tcDebug: ' + TRANSFORM(tcDebug) + CR_LF ; - + C_TAB + 'tcDontShowProgress: ' + TRANSFORM(tcDontShowProgress) + CR_LF ; - + C_TAB + 'toModulo: ' + TRANSFORM(toModulo) + CR_LF ; - + C_TAB + 'toEx: ' + TRANSFORM(toEx) + CR_LF ; - + C_TAB + 'tlRelanzarError: ' + TRANSFORM(tlRelanzarError) + CR_LF ; - + C_TAB + 'tcOriginalFileName: ' + TRANSFORM(tcOriginalFileName) + CR_LF ; - + C_TAB + 'tcRecompile: ' + TRANSFORM(tcRecompile) + CR_LF ; - + C_TAB + 'tcNoTimestamps: ' + TRANSFORM(tcNoTimestamps) + CR_LF ; - + C_TAB + 'tcBackupLevels: ' + TRANSFORM(tcBackupLevels) + CR_LF ; - + C_TAB + 'tcClearUniqueID: ' + TRANSFORM(tcClearUniqueID) + CR_LF ; - + C_TAB + 'tcOptimizeByFilestamp: ' + TRANSFORM(tcOptimizeByFilestamp) + CR_LF ) + *-- 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 ) + + *IF lnPCount > 0 THEN + * .writeLog( 'Params.Externos: ' + TRANSFORM(lnPCount,'@L ##') ) + * FOR I = 1 TO lnPCount + * .writeLog( 'Param.' + TRANSFORM(I,'@L ##') + ' [' + laParams(I) + ']' ) + * ENDFOR + * EXIT + *ENDIF - IF _VFP.STARTMODE > 0 - SET ESCAPE OFF + IF EMPTY(tcRecompile) AND NOT EMPTY(tc_InputFile) AND ADIR(laDirInfo, tc_InputFile, "D")=1 THEN + IF SUBSTR( laDirInfo(1,5), 5, 1 ) = "D" + tcRecompile = tc_InputFile + ELSE + tcRecompile = JUSTPATH( tc_InputFile ) + ENDIF ENDIF - loFSO = .o_FSO tcRecompile = EVL(tcRecompile,'1') + .c_Recompile = tcRecompile + tcType = UPPER( EVL(tcType,'') ) + + .writeLog( REPLICATE( '*', 100 ) ) + .writeLog( 'MAIN EXECUTION' ) + .writeLog( REPLICATE( '*', 100 ) ) + .writeLog( '> EXTERNAL PARAMETERS' ) + .writeLog( C_TAB + 'tc_InputFile: ' + TRANSFORM( EVL(tc_InputFile, '(empty) -> Will use Default' ) ) ) + .writeLog( C_TAB + 'tcType: ' + TRANSFORM( EVL(tcType, '(empty) -> Will use Default' ) ) ) + .writeLog( C_TAB + 'tcTextName: ' + TRANSFORM( EVL(tcTextName, '(empty) -> Will use Default' ) ) ) + .writeLog( C_TAB + 'tlGenText: ' + TRANSFORM( EVL(tlGenText, '(empty) -> Will use Default' ) ) ) + .writeLog( C_TAB + 'tcDontShowErrors: ' + TRANSFORM( EVL(tcDontShowErrors, '(empty) -> Will use Default' ) ) ) + .writeLog( C_TAB + 'tcDebug: ' + TRANSFORM( EVL(tcDebug, '(empty) -> Will use Default' ) ) ) + .writeLog( C_TAB + 'tcDontShowProgress: ' + TRANSFORM( EVL(tcDontShowProgress, '(empty) -> Will use Default' ) ) ) + .writeLog( C_TAB + 'tlRelanzarError: ' + TRANSFORM( EVL(tlRelanzarError, '(empty) -> Will use Default' ) ) ) + .writeLog( C_TAB + 'tcOriginalFileName: ' + TRANSFORM( EVL(tcOriginalFileName, '(empty) -> Will use Default' ) ) ) + .writeLog( C_TAB + 'tcRecompile: ' + TRANSFORM( EVL(tcRecompile, '(empty) -> Will use Default' ) ) ) + .writeLog( C_TAB + 'tcNoTimestamps: ' + TRANSFORM( EVL(tcNoTimestamps, '(empty) -> Will use Default' ) ) ) + .writeLog( C_TAB + 'tcBackupLevels: ' + TRANSFORM( EVL(tcBackupLevels, '(empty) -> Will use Default' ) ) ) + .writeLog( C_TAB + 'tcClearUniqueID: ' + TRANSFORM( EVL(tcClearUniqueID, '(empty) -> Will use Default' ) ) ) + .writeLog( C_TAB + 'tcOptimizeByFilestamp: ' + TRANSFORM( EVL(tcOptimizeByFilestamp, '(empty) -> Will use Default' ) ) ) + .writeLog( ) + + *-- ARCHIVO DE CONFIGURACIÓN PRINCIPAL + *IF NOT .l_ConfigEvaluated THEN + .EvaluarConfiguracion( @tcDontShowProgress, @tcDontShowErrors, @tcNoTimestamps, @tcDebug, @tcRecompile, @tcBackupLevels ; + , @tcClearUniqueID, @tcOptimizeByFilestamp ) + *ENDIF + + loLang = _SCREEN.o_FoxBin2Prg_Lang DO CASE CASE VERSION(5) < 900 *-- '¡FOXBIN2PRG es solo para Visual FoxPro 9.0!' - MESSAGEBOX( C_FOXBIN2PRG_JUST_VFP_9_LOC, 0+64+4096, C_FOXBIN2PRG_WARN_CAPTION_LOC, 60000 ) + MESSAGEBOX( loLang.C_FOXBIN2PRG_JUST_VFP_9_LOC, 0+64+4096, loLang.C_FOXBIN2PRG_WARN_CAPTION_LOC + ' (' + .c_Language + ')', 60000 ) lnCodError = 1 CASE EMPTY(tc_InputFile) *-- (Ejemplo de sintaxis y uso) - MESSAGEBOX( C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC, 0+64+4096, C_FOXBIN2PRG_INFO_SINTAX_LOC, 60000 ) + MESSAGEBOX( loLang.C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC, 0+64+4096, loLang.C_FOXBIN2PRG_INFO_SINTAX_LOC + ' (' + .c_Language + ')', 60000 ) lnCodError = 1 OTHERWISE *-- EJECUCIÓN NORMAL - *-- ARCHIVO DE CONFIGURACIÓN PRINCIPAL - IF NOT .l_ConfigEvaluated THEN - .EvaluarConfiguracion( @tcDontShowProgress, @tcDontShowErrors, @tcNoTimestamps, @tcDebug, @tcRecompile, @tcBackupLevels ; - , @tcClearUniqueID, @tcOptimizeByFilestamp ) - ENDIF - IF .l_ShowProgress .cargar_frm_avance() ENDIF @@ -1850,9 +1906,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE '*' $ 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( C_ASTERISK_EXT_NOT_ALLOWED_LOC, 0+48+4096, C_FOXBIN2PRG_ERROR_CAPTION_LOC, 60000 ) + MESSAGEBOX( loLang.C_ASTERISK_EXT_NOT_ALLOWED_LOC, 0+48+4096, loLang.C_FOXBIN2PRG_ERROR_CAPTION_LOC, 60000 ) ELSE - ERROR C_ASTERISK_EXT_NOT_ALLOWED_LOC + ERROR loLang.C_ASTERISK_EXT_NOT_ALLOWED_LOC ENDIF CASE '*' $ JUSTSTEM( tc_InputFile ) @@ -1869,22 +1925,103 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .c_LogFile = ADDBS( JUSTPATH( lcFileSpec ) ) + STRTRAN( JUSTFNAME( lcFileSpec ), '*', '_ALL' ) + '.LOG' IF .l_Debug - IF FILE( .c_LogFile ) - ERASE ( .c_LogFile ) - ENDIF + ERASE ( .c_LogFile ) ENDIF lnFileCount = ADIR( laFiles, lcFileSpec, '', 1 ) FOR I = 1 TO lnFileCount lcFile = FORCEPATH( laFiles(I,1), JUSTPATH( lcFileSpec ) ) - .AvanceDelProceso( C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) - - IF FILE( lcFile ) - lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) - ENDIF + .AvanceDelProceso( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) + lnCodError = .Convertir( lcFile, @toModulo, @toEx, .T., tcOriginalFileName ) + .writeLog_Flush() ENDFOR + + CASE LEFT( tcType,7 ) == 'BIN2PRG' + IF NOT DIRECTORY(tc_InputFile) + ERROR 1963, (tc_InputFile) && Directoty is not found + ENDIF + + *-- CONVERSION BIN2PRG DE UN DIRECTORIO Y SUBDIRECTORIOS + DO CASE + CASE .l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile) + CD (tcRecompile) + CASE .l_Recompile + CD (tc_InputFile) + ENDCASE + + .c_LogFile = ADDBS(tc_InputFile) + tcType + '.LOG' + + IF .l_Debug + ERASE ( .c_LogFile ) + ENDIF + + .ObtenerArchivosDelDirectorio( tc_InputFile, @laFiles, @lnFileCount ) + + FOR I = 1 TO lnFileCount + lcFile = laFiles(I) + + IF NOT .TieneSoporte_Bin2Prg( JUSTEXT(lcFile) ) OR NOT FILE(lcFile) THEN + LOOP + ENDIF + + .AvanceDelProceso( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) + 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 + ENDFOR + + .AvanceDelProceso( loLang.C_END_OF_PROCESS_LOC, lnFileCount, lnFileCount, 0 ) + + + CASE LEFT( tcType,7 ) == 'PRG2BIN' AND DIRECTORY(tc_InputFile) + *-- CONVERSION PRG2BIN DE UN DIRECTORIO Y SUBDIRECTORIOS + DO CASE + CASE .l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile) + CD (tcRecompile) + CASE .l_Recompile + CD (tc_InputFile) + ENDCASE + + .c_LogFile = ADDBS(tc_InputFile) + tcType + '.LOG' + + IF .l_Debug + ERASE ( .c_LogFile ) + ENDIF + + .ObtenerArchivosDelDirectorio( tc_InputFile, @laFiles, @lnFileCount ) + + FOR I = 1 TO lnFileCount + lcFile = laFiles(I) + + IF NOT .TieneSoporte_Prg2Bin( JUSTEXT(lcFile) ) OR NOT FILE(lcFile) THEN + LOOP + ENDIF + + .AvanceDelProceso( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) + lnCodError = .Convertir( lcFile, @toModulo, @toEx, .T., tcOriginalFileName ) + .writeLog_Flush() + + DO CASE + CASE lnCodError = 1799 && Conversion Cancelled + ERROR 1799 + + CASE lnCodError > 0 + .ejecutar_WriteErrorLog( @toEx ) + ENDCASE + ENDFOR + + .AvanceDelProceso( loLang.C_END_OF_PROCESS_LOC, lnFileCount, lnFileCount, 0 ) + + OTHERWISE *-- UN ARCHIVO INDIVIDUAL O CONSULTA DE SOPORTE DE ARCHIVO IF LEN(EVL(tc_InputFile,'')) = 1 @@ -1938,9 +2075,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .c_LogFile = ADDBS( JUSTPATH( lcFileSpec ) ) + STRTRAN( JUSTFNAME( lcFileSpec ), '*', '_ALL' ) + '.LOG' IF .l_Debug - IF FILE( .c_LogFile ) - ERASE ( .c_LogFile ) - ENDIF + ERASE ( .c_LogFile ) ENDIF SELECT 0 @@ -1958,10 +2093,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- Luego convierto los archivos incluidos FOR I = 1 TO lnFileCount lcFile = laFiles(I,1) - .AvanceDelProceso( C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) + .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 @@ -1979,9 +2115,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .c_LogFile = ADDBS( JUSTPATH( lcFileSpec ) ) + STRTRAN( JUSTFNAME( lcFileSpec ), '*', '_ALL' ) + '.LOG' IF .l_Debug - IF FILE( .c_LogFile ) - ERASE ( .c_LogFile ) - ENDIF + ERASE ( .c_LogFile ) ENDIF lnFileCount = ALINES( laFiles, STREXTRACT( FILETOSTR(tc_InputFile), C_BUILDPROJ_I, C_BUILDPROJ_F ), 1+4 ) @@ -2000,10 +2134,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- Luego convierto los archivos incluidos FOR I = 1 TO lnFileCount lcFile = laFiles(I) - .AvanceDelProceso( C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) + .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 @@ -2033,9 +2168,13 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDCASE .c_LogFile = tc_InputFile + '.LOG' - ERASE ( .c_LogFile ) + + IF .l_Debug + ERASE ( .c_LogFile ) + ENDIF lnCodError = .Convertir( tc_InputFile, toModulo, toEx, .T., tcOriginalFileName ) + .AvanceDelProceso( loLang.C_END_OF_PROCESS_LOC, 1, 1, 0 ) ENDIF ENDIF ENDCASE @@ -2045,50 +2184,100 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CATCH TO toEx lnCodError = toEx.ERRORNO - THIS.l_Error = .T. - lcErrorInfo = THIS.Exception2Str(toEx) + CR_LF + CR_LF + C_SOURCEFILE_LOC + THIS.c_InputFile - ADDPROPERTY(_SCREEN, 'ExitCode', toEx.ERRORNO) + + IF VARTYPE(loLang) <> 'O' THEN + loLang = CREATEOBJECT("CL_LANG","EN") + ENDIF - *-- Escribo la información de error en la variable log de errores - THIS.writeErrorLog( TTOC(DATETIME(),3) + ' ' + REPLICATE('-', 80) ) - THIS.writeErrorLog( lcErrorInfo ) - THIS.writeErrorLog( ) + IF '-INTERACTIVE' $ ('-' + tcType) THEN + toEx.UserValue = 'tc_InputDir = [' + TRANSFORM(tc_InputFile) + ']' + THIS.l_ShowErrors = .F. && La opción "INTERACTIVE" muestra su propio mensaje + ENDIF - *-- Escribo la información de error en el archivo log de errores - TRY - STRTOFILE( STRCONV(lcErrorInfo,9), EVL(tc_InputFile,'foxbin2prg') + '.ERR' ) - CATCH TO loEx2 - ENDTRY + THIS.ejecutar_WriteErrorLog( @toEx, @lcErrorInfo ) IF THIS.l_Debug IF _VFP.STARTMODE = 0 SET STEP ON ENDIF - THIS.writeLog( lcErrorInfo ) ENDIF + IF THIS.l_ShowErrors - MESSAGEBOX( lcErrorInfo, 0+16+4096, C_FOXBIN2PRG_ERROR_CAPTION_LOC, 60000 ) + MESSAGEBOX( lcErrorInfo, 0+16+4096, loLang.C_FOXBIN2PRG_ERROR_CAPTION_LOC, 60000 ) ENDIF + IF tlRelanzarError THROW ENDIF FINALLY + IF VARTYPE(loLang) <> 'O' THEN + loLang = CREATEOBJECT("CL_LANG","EN") + ENDIF + USE IN (SELECT("TABLABIN")) THIS.writeLog_Flush() *THIS.descargar_frm_avance() CD (JUSTPATH(THIS.c_CurDir)) - STORE NULL TO loFSO + + DO CASE + CASE '-INTERACTIVE' $ ('-' + tcType) + + DO CASE + CASE lnCodError = 1799 && Conversion Cancelled + MESSAGEBOX( loLang.C_CONVERSION_CANCELLED_BY_USER_LOC + '!', 0+48+4096, 'FoxBin2Prg', 60000 ) + THIS.writeErrorLog_Flush( ) + loWSH.Run( THIS.c_ErrorLogFile, 1, .F. ) + + CASE THIS.l_Error + MESSAGEBOX( loLang.C_END_OF_PROCESS_LOC + '! (' + loLang.C_WITH_ERRORS_LOC + ')', 0+48+4096, 'FoxBin2Prg', 60000 ) + THIS.writeErrorLog_Flush( ) + loWSH.Run( THIS.c_ErrorLogFile, 1, .F. ) + + OTHERWISE + MESSAGEBOX( loLang.C_END_OF_PROCESS_LOC, 0+64+4096, 'FoxBin2Prg', 60000 ) + + ENDCASE + + CASE THIS.l_Debug + THIS.writeErrorLog_Flush( ) + + ENDCASE + + STORE NULL TO loFSO, loWSH RELEASE tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDebug, tcDontShowProgress ; , toModulo, toEx, tlRelanzarError, tcOriginalFileName, tcRecompile, tcNoTimestamps ; , tcBackupLevels, tcClearUniqueID, tcOptimizeByFilestamp ; - , I, lcPath, lcFileSpec, lcFile, laFiles, lnFileCount, lcErrorInfo, loEx, loFSO + , I, lcPath, lcFileSpec, lcFile, laFiles, lnFileCount, lcErrorInfo, lcErrorFile, loEx, loFSO ENDTRY RETURN lnCodError ENDPROC + HIDDEN PROCEDURE ejecutar_WriteErrorLog + LPARAMETERS toEx, tcErrorInfo + + LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' + loLang = _SCREEN.o_FoxBin2Prg_Lang + tcErrorInfo = THIS.Exception2Str(toEx) + CR_LF + CR_LF + loLang.C_SOURCEFILE_LOC + THIS.c_InputFile + ADDPROPERTY(_SCREEN, 'ExitCode', toEx.ERRORNO) + + *-- Escribo la información de error en la variable log de errores + THIS.writeErrorLog( TTOC(DATETIME(),3) + ' ' + REPLICATE('-', 80) ) + THIS.writeErrorLog( tcErrorInfo ) + THIS.writeErrorLog( ) + + *-- Escribo la información de error en el archivo log de errores + TRY + STRTOFILE( STRCONV(tcErrorInfo, 9 ), EVL( THIS.c_InputFile, 'foxbin2prg_errorlog' ) + '.ERR' ) + CATCH + ENDTRY + + RETURN + ENDPROC + + PROCEDURE Convertir *-------------------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) @@ -2104,30 +2293,58 @@ 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) ; + , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' ; + , loConversor as C_CONVERSOR_BASE OF 'FOXBIN2PRG.PRG' ; , loFSO AS Scripting.FileSystemObject lnCodError = 0 WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' loFSO = .o_FSO + loLang = _SCREEN.o_FoxBin2Prg_Lang .c_InputFile = FULLPATH( tc_InputFile ) + lcExtension = UPPER( JUSTEXT(.c_InputFile) ) + .writeLog( REPLICATE( '*', 100 ) ) + .writeLog( 'CONVERSION PROCESS' ) + .writeLog( REPLICATE( '*', 100 ) ) IF ADIR( laDirFile, .c_InputFile, '', 1 ) = 0 *ERROR 'No se encontró el archivo [' + .c_InputFile + ']' - ERROR C_FILE_NOT_FOUND_LOC + ' [' + .c_InputFile + ']' + ERROR loLang.C_FILE_NOT_FOUND_LOC + ' [' + .c_InputFile + ']' ENDIF .c_InputFile = loFSO.GetAbsolutePathName( FORCEPATH( laDirFile(1,1), JUSTPATH(.c_InputFile) ) ) - - *-- ARCHIVO DE CONFIGURACIÓN SECUNDARIO + + *-- VERIFICO SI HAY ARCHIVO DE CONFIGURACIÓN SECUNDARIO .EvaluarConfiguracion() - IF .l_UseClassPerFile + + *-- 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 + + 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 [' + lc_BaseFile + '] ya fue procesado, por lo que no se procesará [' + .c_InputFile + ']' ) + 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 .l_RedirectClassPerFileToMain AND '.' $ JUSTSTEM(.c_InputFile) - .c_InputFile = FORCEPATH( FORCEEXT( JUSTSTEM( JUSTSTEM(.c_InputFile) ), JUSTEXT(.c_InputFile) ) , JUSTPATH(.c_InputFile) ) + IF '.' $ JUSTSTEM(.c_InputFile) + .c_InputFile = lc_BaseFile ENDIF ENDIF + IF NOT EMPTY(tcOriginalFileName) tcOriginalFileName = loFSO.GetAbsolutePathName( tcOriginalFileName ) ENDIF @@ -2138,20 +2355,20 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .c_OriginalFileName = FORCEEXT(.c_OriginalFileName,'pjx') ENDIF - .writeLog( '> c_OriginalFileName: ' + .c_OriginalFileName ) + .writeLog( C_TAB + 'c_OriginalFileName: ' + .c_OriginalFileName ) + .writeLog( ) .o_Conversor = NULL IF NOT FILE(.c_InputFile) - ERROR C_FILE_DOESNT_EXIST_LOC + ' [' + .c_InputFile + ']' + ERROR loLang.C_FILE_DOESNT_EXIST_LOC + ' [' + .c_InputFile + ']' ENDIF - lcExtension = UPPER( JUSTEXT(.c_InputFile) ) .normalizarCapitalizacionArchivos( .T. ) DO CASE CASE lcExtension = 'VCX' IF NOT INLIST(.VCX_Conversion_Support, 1, 2) - ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) + 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' ) @@ -2159,7 +2376,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE lcExtension = 'SCX' IF NOT INLIST(.SCX_Conversion_Support, 1, 2) - ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) + 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' ) @@ -2167,7 +2384,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE lcExtension = 'PJX' IF NOT INLIST(.PJX_Conversion_Support, 1, 2) - ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) + 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' ) @@ -2175,7 +2392,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE lcExtension = 'PJM' IF NOT INLIST(.PJX_Conversion_Support, 1, 2) - ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) + 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' ) @@ -2183,7 +2400,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE lcExtension = 'FRX' IF NOT INLIST(.FRX_Conversion_Support, 1, 2) - ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) + 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' ) @@ -2191,7 +2408,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE lcExtension = 'LBX' IF NOT INLIST(.LBX_Conversion_Support, 1, 2) - ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) + 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' ) @@ -2199,7 +2416,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE lcExtension = 'DBF' IF NOT INLIST(.DBF_Conversion_Support, 1, 2, 4) - ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) + 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' ) @@ -2207,7 +2424,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE lcExtension = 'DBC' IF NOT INLIST(.DBC_Conversion_Support, 1, 2) - ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) + 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' ) @@ -2215,7 +2432,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE lcExtension = 'MNX' IF NOT INLIST(.MNX_Conversion_Support, 1, 2) - ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) + 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' ) @@ -2223,7 +2440,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE lcExtension = .c_VC2 IF .VCX_Conversion_Support <> 2 - ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) + 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' ) @@ -2232,7 +2449,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE lcExtension = .c_SC2 IF .SCX_Conversion_Support <> 2 - ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) + 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' ) @@ -2241,7 +2458,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE lcExtension = .c_PJ2 IF .PJX_Conversion_Support <> 2 - ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) + 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' ) @@ -2250,7 +2467,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE lcExtension = .c_FR2 IF .FRX_Conversion_Support <> 2 - ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) + 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' ) @@ -2259,7 +2476,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE lcExtension = .c_LB2 IF .LBX_Conversion_Support <> 2 - ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) + 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' ) @@ -2268,7 +2485,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE lcExtension = .c_DB2 IF .DBF_Conversion_Support <> 2 - ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) + 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' ) @@ -2278,7 +2495,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE lcExtension = .c_DC2 IF .DBC_Conversion_Support <> 2 - ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) + 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' ) @@ -2288,7 +2505,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE lcExtension = .c_MN2 IF .MNX_Conversion_Support <> 2 - ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) + 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' ) @@ -2297,7 +2514,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM OTHERWISE *ERROR 'El archivo [' + .c_InputFile + '] no está soportado' - ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) + ERROR (TEXTMERGE(loLang.C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDCASE @@ -2343,27 +2560,39 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM IF NOT .l_OptimizeByFilestamp OR .t_InputFile_TimeStamp >= .t_OutputFile_TimeStamp THEN .c_Type = UPPER(JUSTEXT(.c_OutputFile)) - .o_Conversor.c_InputFile = .c_InputFile - .o_Conversor.c_OutputFile = .c_OutputFile - .o_Conversor.c_LogFile = .c_LogFile - .o_Conversor.l_Debug = .l_Debug - .o_Conversor.l_Test = .l_Test - .o_Conversor.n_FB2PRG_Version = .n_FB2PRG_Version - .o_Conversor.l_MethodSort_Enabled = .l_MethodSort_Enabled - .o_Conversor.l_PropSort_Enabled = .l_PropSort_Enabled - .o_Conversor.l_ReportSort_Enabled = .l_ReportSort_Enabled - .o_Conversor.c_OriginalFileName = .c_OriginalFileName - .o_Conversor.c_Foxbin2prg_FullPath = .c_Foxbin2prg_FullPath + loConversor = .o_Conversor + loConversor.c_InputFile = .c_InputFile + loConversor.c_OutputFile = .c_OutputFile + loConversor.c_LogFile = .c_LogFile + loConversor.l_Debug = .l_Debug + loConversor.l_Test = .l_Test + loConversor.n_FB2PRG_Version = .n_FB2PRG_Version + loConversor.l_MethodSort_Enabled = .l_MethodSort_Enabled + loConversor.l_PropSort_Enabled = .l_PropSort_Enabled + loConversor.l_ReportSort_Enabled = .l_ReportSort_Enabled + loConversor.c_OriginalFileName = .c_OriginalFileName + loConversor.c_Foxbin2prg_FullPath = .c_Foxbin2prg_FullPath *-- - .AvanceDelProceso( C_PROCESSING_LOC + ' ' + .c_InputFile + '...', 0, 0, 0 ) - BINDEVENT( .o_Conversor, 'AvanceDelProceso', THIS, 'AvanceDelProceso' ) + .AvanceDelProceso( loLang.C_PROCESSING_LOC + ' ' + .c_InputFile + '...', 0, 0, 0 ) - .o_Conversor.Convertir( @toModulo, .F., THIS ) - .c_TextLog = .c_TextLog + CR_LF + .o_Conversor.c_TextLog && Recojo el LOG que haya generado el conversor + IF AEVENTS( laEvents, .o_Conversor ) = 0 THEN + BINDEVENT( .o_Conversor, 'AvanceDelProceso', THIS, 'AvanceDelProceso' ) + ENDIF + + loConversor.Convertir( @toModulo, .F., THIS ) + .writeLog() + .writeLog(.o_Conversor.c_TextLog) && Recojo el LOG que haya generado el conversor + + *-- Logueo los errores + IF NOT EMPTY(loConversor.c_TextErr) THEN + .writeErrorLog( PADR( 'ERRORS FOUND IN FILE [' + .c_InputFile + '] ', 100, '-' ) ) + .writeErrorLog( loConversor.c_TextErr ) + .writeErrorLog( ) + ENDIF ELSE *-- Optimizado: El Origen es anterior al Destino - No hace falta regenerar *.writeLog( '> El archivo de salida [<>] no se regenera por ser más nuevo que el de entrada.' ) - .writeLog( TEXTMERGE(C_OUTPUTFILE_NEWER_THAN_INPUTFILE_LOC) ) + .writeLog( TEXTMERGE(loLang.C_OUTPUTFILE_NEWER_THAN_INPUTFILE_LOC) ) ENDIF @@ -2372,7 +2601,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CATCH TO toEx lnCodError = toEx.ERRORNO - lcErrorInfo = THIS.Exception2Str(toEx) + CR_LF + CR_LF + C_SOURCEFILE_LOC + THIS.c_InputFile + lcErrorInfo = THIS.Exception2Str(toEx) + CR_LF + CR_LF + loLang.C_SOURCEFILE_LOC + THIS.c_InputFile IF THIS.l_Debug IF _VFP.STARTMODE = 0 @@ -2387,18 +2616,17 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM IF AEVENTS( laEvents, THIS.o_Conversor ) > 0 THEN UNBINDEVENTS( THIS.o_Conversor ) ENDIF - loFSO = NULL - THIS.o_Conversor = NULL - IF lnCodError = 0 OR NOT THIS.l_ShowErrors THEN - THIS.writeLog( REPLICATE('-',80) ) - *THIS.writeLog_Flush() - ENDIF + STORE NULL TO loConversor, THIS.o_Conversor, loFSO + + *IF lnCodError = 0 OR NOT THIS.l_ShowErrors THEN + * THIS.writeLog( REPLICATE('-',100) ) + *ENDIF RELEASE tc_InputFile, toModulo, toEx, tlRelanzarError, tcOriginalFileName ; , lcErrorInfo, laDirFile, lcExtension, lnFileCount, laFiles, I ; , ltFilestamp, lcExtA, lcExtB ; - , loFSO + , loConversor, loFSO ENDTRY RETURN lnCodError @@ -2477,9 +2705,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM TRY LOCAL lcPath, lcEXE_CAPS, lcOutputFile, llRelanzarError, lcType ; , loEx AS EXCEPTION ; + , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' ; , loFSO AS Scripting.FileSystemObject WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + loLang = _SCREEN.o_FoxBin2Prg_Lang lcPath = JUSTPATH(.c_Foxbin2prg_FullPath) lcEXE_CAPS = FORCEPATH( 'filename_caps.exe', lcPath ) loFSO = .o_FSO @@ -2498,7 +2728,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- La primera vez vale -1, hace la verificación por única vez y cachea la respuesta IF FILE(lcEXE_CAPS) *.writeLog( '* Se ha encontrado el programa de capitalización de nombres [' + lcEXE_CAPS + ']' ) - .writeLog( TEXTMERGE(C_NAMES_CAPITALIZATION_PROGRAM_FOUND_LOC) ) + .writeLog( TEXTMERGE(loLang.C_NAMES_CAPITALIZATION_PROGRAM_FOUND_LOC) ) SET PROCEDURE TO (lcEXE_CAPS) ADDITIVE .o_FNC = CREATEOBJECT( 'cl_FileName_Caps' ) RELEASE PROCEDURE (lcEXE_CAPS) @@ -2507,7 +2737,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ELSE *-- No existe el programa de capitalización, así que no se capitalizan los nombres. *.writeLog( '* No se ha encontrado el programa de capitalización de nombres [' + lcEXE_CAPS + ']' ) - .writeLog( TEXTMERGE(C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC) ) + .writeLog( TEXTMERGE(loLang.C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC) ) .n_ExisteCapitalizacion = 0 EXIT ENDIF @@ -2572,13 +2802,93 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC + PROCEDURE ObtenerArchivosDelDirectorio + LPARAMETERS tcDir, taFiles, lnFileCount + EXTERNAL ARRAY taFiles + + LOCAL laFiles(1), I, lnFiles ; + , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' + + IF TYPE("ALEN(laFiles)") # "N" OR EMPTY(lnFileCount) + lnFileCount = 0 + DIMENSION taFiles(1) + ENDIF + + tcDir = ADDBS(tcDir) + + IF DIRECTORY(tcDir) + loLang = _SCREEN.o_FoxBin2Prg_Lang + THIS.AvanceDelProceso( loLang.C_SCANNING_FILE_AND_DIR_INFO_LOC + ' ' + tcDir + '...', 0, 0, 0 ) + lnFiles = ADIR( laFiles, tcDir + '*.*', 'D', 1) + + *-- Busco los archivos + FOR I = 1 TO lnFiles + IF SUBSTR( laFiles(I,5), 5, 1 ) == 'D' + LOOP + ENDIF + lnFileCount = lnFileCount + 1 + DIMENSION taFiles(lnFileCount) + taFiles(lnFileCount) = tcDir + laFiles(I,1) + ENDFOR + + *-- Busco los subdirectorios + FOR I = 1 TO lnFiles + IF NOT SUBSTR( laFiles(I,5), 5, 1 ) == 'D' OR LEFT(laFiles(I,1), 1) == '.' + LOOP + ENDIF + THIS.ObtenerArchivosDelDirectorio( tcDir + laFiles(I,1), @taFiles, @lnFileCount ) + ENDFOR + ENDIF + ENDPROC + + + PROCEDURE ReadInputVFPParams + LPARAMETERS taParams, tnPCount + EXTERNAL ARRAY taParams + *----------------------------------------------------------------------------- + * Obtengo la linea completa de comandos + * Adaptado de http://www.news2news.com/vfp/?example=51&function=78 + * Facilitado por Mario Lopez en el foro FoxPro de Google Español - 23/12/2013 + * https://groups.google.com/d/msg/publicesvfoxpro/llS-kTNrG9M/LA4D3fd152IJ + *----------------------------------------------------------------------------- + DECLARE INTEGER GetCommandLine IN kernel32 + DECLARE INTEGER GlobalSize IN kernel32 INTEGER HMEM + DECLARE RtlMoveMemory IN kernel32 AS CopyMemory STRING @Destination, INTEGER SOURCE, INTEGER nLength + + LOCAL lnAddress, lnBufsize, lsBuffer + lnAddress = GetCommandLine() && returns an address in memory + lnBufsize = GlobalSize(lnAddress) + + * allocating and filling a buffer + IF lnBufsize <> 0 + lsBuffer = REPLICATE(CHR(0), lnBufsize) + = CopyMemory(@lsBuffer, lnAddress, lnBufsize) + ENDIF + + lsBuffer = STRTRAN(lsBuffer, '"'+CHR(0), '"'+CHR(13)+CHR(10)) + lsBuffer = STRTRAN(lsBuffer, '" ', '"'+CHR(13)+CHR(10), 1, 1) + lsBuffer = STRTRAN(lsBuffer, CHR(0), ' ') + tnPCount = ALINES( taParams, lsBuffer, 4 ) + + IF tnPCount > 1 THEN + ADEL( taParams, 1 ) + tnPCount = tnPCount - 1 + DIMENSION taParams(tnPCount) + ENDIF + + RETURN + ENDPROC + + ******************************************************************************************************************* PROCEDURE RenameFile LPARAMETERS tcFileName, tcEXE_CAPS, toFSO AS Scripting.FileSystemObject, tlRelanzarError - LOCAL lcLog, laFile(1,5) + LOCAL lcLog, laFile(1,5) ; + , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' *THIS.writeLog( '- Se ha solicitado capitalizar el archivo [' + tcFileName + ']' ) - THIS.writeLog( TEXTMERGE(C_REQUESTING_CAPITALIZATION_OF_FILE_LOC) ) + loLang = _SCREEN.o_FoxBin2Prg_Lang + THIS.writeLog( TEXTMERGE(loLang.C_REQUESTING_CAPITALIZATION_OF_FILE_LOC) ) THIS.ChangeFileAttribute( tcFileName, '+N' ) lcLog = '' THIS.o_FNC.Capitalize( tcFileName, '', 'F', lcLog, tlRelanzarError, '1' ) @@ -2622,12 +2932,21 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM LPARAMETERS tcText TRY - THIS.c_ErrorLog = THIS.c_ErrorLog + EVL(tcText,'') + CR_LF + THIS.c_TextErr = THIS.c_TextErr + TTOC(DATETIME(),3) + ' ' + EVL(tcText,'') + CR_LF + THIS.l_Error = .T. CATCH ENDTRY ENDPROC + PROCEDURE writeErrorLog_Flush + IF NOT EMPTY(THIS.c_TextErr) + STRTOFILE( STRCONV(THIS.c_TextErr + CR_LF,9), THIS.c_ErrorLogFile, 1 ) + ENDIF + THIS.c_TextErr = '' + ENDPROC + + ******************************************************************************************************************* PROCEDURE writeLog LPARAMETERS tcText @@ -2639,12 +2958,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC - ******************************************************************************************************************* PROCEDURE writeLog_Flush IF THIS.l_Debug AND NOT EMPTY(THIS.c_TextLog) STRTOFILE( STRCONV(THIS.c_TextLog + CR_LF,9), THIS.c_LogFile, 1 ) - THIS.c_TextLog = '' ENDIF + THIS.c_TextLog = '' ENDPROC @@ -2685,13 +3003,12 @@ DEFINE CLASS frm_avance AS FORM DoCreate = .T. AutoCenter = .T. BorderStyle = 2 - CAPTION = 'FoxBin2Prg - ' + C_PROCESS_PROGRESS_LOC + ' (Press Esc to Cancel)' ControlBox = .F. BackColor = RGB(255,255,255) - nmax_value = 100 - nmax_value2 = 100 - nvalue = 0 - nvalue2 = 0 + nMax_value = 100 + nMax_value2 = 100 + nValue = 0 + nValue2 = 0 l_Cancelled = .F. Name = "frm_avance" _memberdata = [] ; @@ -2768,7 +3085,7 @@ DEFINE CLASS frm_avance AS FORM Name = "lbl_Tarea2" - ADD OBJECT cmdcancel AS commandbutton WITH ; + ADD OBJECT cmdCancel AS commandbutton WITH ; Top = 84, ; Left = 252, ; Height = 21, ; @@ -2789,7 +3106,7 @@ DEFINE CLASS frm_avance AS FORM ENDIF DOEVENTS ENDIF - + DO CASE CASE tnTipo = 0 IF NOT EMPTY(tcTexto) THEN @@ -2797,8 +3114,8 @@ DEFINE CLASS frm_avance AS FORM ENDIF IF tnTotal > 0 THEN - .nmax_value = tnTotal - .nvalue = tnValor + .nMax_value = tnTotal + .nValue = tnValor ENDIF CASE tnTipo = 1 @@ -2807,8 +3124,8 @@ DEFINE CLASS frm_avance AS FORM ENDIF IF tnTotal > 0 THEN - .nmax_value2 = tnTotal - .nvalue2 = tnValor + .nMax_value2 = tnTotal + .nValue2 = tnValor ENDIF CASE tnTipo = 2 @@ -2817,8 +3134,8 @@ DEFINE CLASS frm_avance AS FORM ENDIF IF tnTotal > 0 THEN - .nmax_value2 = tnTotal - .nvalue2 = tnValor + .nMax_value2 = tnTotal + .nValue2 = tnValor ENDIF ENDCASE @@ -2828,33 +3145,36 @@ DEFINE CLASS frm_avance AS FORM ENDPROC - PROCEDURE nvalue_assign + PROCEDURE nValue_assign LPARAMETERS vNewVal WITH THIS - .nvalue = m.vNewVal - .shp_avance.WIDTH = m.vNewVal * .shp_base.WIDTH / .nmax_value + .nValue = m.vNewVal + .shp_avance.WIDTH = m.vNewVal * .shp_base.WIDTH / .nMax_value ENDWITH ENDPROC PROCEDURE Init - THIS.nvalue = 0 - THIS.nvalue2 = 0 + LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' + loLang = _SCREEN.o_FoxBin2Prg_Lang + THIS.CAPTION = 'FoxBin2Prg - ' + loLang.C_PROCESS_PROGRESS_LOC + ' (' + loLang.C_PRESS_ESC_TO_CANCEL + ')' + THIS.nValue = 0 + THIS.nValue2 = 0 ENDPROC - PROCEDURE nvalue2_assign + PROCEDURE nValue2_assign LPARAMETERS vNewVal WITH THIS - .nvalue2 = m.vNewVal - .shp_avance2.WIDTH = m.vNewVal * .shp_base2.WIDTH / .nmax_value2 + .nValue2 = m.vNewVal + .shp_avance2.WIDTH = m.vNewVal * .shp_base2.WIDTH / .nMax_value2 ENDWITH ENDPROC - PROCEDURE cmdcancel.Click + PROCEDURE cmdCancel.Click THISFORM.l_Cancelled = .T. ENDPROC @@ -2896,6 +3216,7 @@ DEFINE CLASS c_conversor_base AS SESSION + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -2904,8 +3225,10 @@ DEFINE CLASS c_conversor_base AS SESSION + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -2926,6 +3249,7 @@ DEFINE CLASS c_conversor_base AS SESSION , a_SpecialProps_XMLAda(1), a_SpecialProps_XMLFld(1), a_SpecialProps_XMLTbl(1) l_Debug = .F. + l_Error = .F. l_Test = .F. c_InputFile = '' c_OutputFile = '' @@ -2937,6 +3261,7 @@ DEFINE CLASS c_conversor_base AS SESSION c_CurDir = '' c_LogFile = '' c_TextLog = '' + c_TextErr = '' l_MethodSort_Enabled = .T. l_PropSort_Enabled = .T. l_ReportSort_Enabled = .T. @@ -2981,9 +3306,11 @@ DEFINE CLASS c_conversor_base AS SESSION ******************************************************************************************************************* PROCEDURE DESTROY + LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' + loLang = _SCREEN.o_FoxBin2Prg_Lang C_FB2PRG_CODE = '' USE IN (SELECT("TABLABIN")) - THIS.writeLog( C_CONVERTER_UNLOAD_LOC ) + THIS.writeLog( loLang.C_CONVERTER_UNLOAD_LOC ) THIS.oFSO = NULL ENDPROC @@ -3175,9 +3502,11 @@ DEFINE CLASS c_conversor_base AS SESSION #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF + LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' + loLang = _SCREEN.o_FoxBin2Prg_Lang THIS.writeLog( '' ) - THIS.writeLog( C_CONVERTING_FILE_LOC + ' ' + THIS.c_OutputFile + '...' ) - RELEASE toModulo, toEx, toFoxBin2Prg + THIS.writeLog( loLang.C_CONVERTING_FILE_LOC + ' ' + THIS.c_OutputFile + '...' ) + RELEASE toModulo, toEx, toFoxBin2Prg, loLang RETURN ENDPROC @@ -3515,6 +3844,8 @@ DEFINE CLASS c_conversor_base AS SESSION EXTERNAL ARRAY taPropsAndValues LOCAL lcMetadatos, I, lcVirtualMeta, lnPos1, lnPos2, lnLastPos, lnCantComillas + LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' + loLang = _SCREEN.o_FoxBin2Prg_Lang STORE '' TO lcVirtualMeta STORE 0 TO lnPos1, lnPos2, lnLastPos, tnPropsAndValues_Count, I @@ -3523,7 +3854,7 @@ DEFINE CLASS c_conversor_base AS SESSION IF lnCantComillas % 2 <> 0 && Valido que las comillas "" sean pares *ERROR "Error de datos: No se puede parsear porque las comillas no son pares en la línea [" + lcMetadatos + "]" - ERROR (TEXTMERGE(C_DATA_ERROR_CANT_PARSE_UNPAIRING_DOUBLE_QUOTES_LOC)) + ERROR (TEXTMERGE(loLang.C_DATA_ERROR_CANT_PARSE_UNPAIRING_DOUBLE_QUOTES_LOC)) ENDIF lnLastPos = 1 @@ -3665,6 +3996,8 @@ DEFINE CLASS c_conversor_base AS SESSION TRY LOCAL lnBloques, I, X, lnPrimerID, lnLen_IDFinBQ, lnID_Bloques_Count, lcWord, lnAnidamientos, lcLine, lcPrevLine + 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 @@ -3742,7 +4075,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)) - ERROR (TEXTMERGE(C_END_MARKER_NOT_FOUND_LOC)) + ERROR (TEXTMERGE(loLang.C_END_MARKER_NOT_FOUND_LOC)) ENDIF ENDIF ENDFOR @@ -3757,7 +4090,7 @@ DEFINE CLASS c_conversor_base AS SESSION THROW FINALLY - RELEASE taCodeLines, tnCodeLines, ta_ID_Bloques, taLineasExclusion, tnBloquesExclusion, taBloquesExclusion ; + RELEASE taCodeLines, tnCodeLines, ta_ID_Bloques, taLineasExclusion, tnBloquesExclusion, taBloquesExclusion, loLang ; , lnBloques, I, X, lnPrimerID, lnLen_IDFinBQ, lnID_Bloques_Count, lcWord, lnAnidamientos, lcLine, lcPrevLine ENDTRY @@ -3909,6 +4242,8 @@ DEFINE CLASS c_conversor_base AS SESSION TRY LOCAL lcPropName, lnPos, loEx AS EXCEPTION + LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' + loLang = _SCREEN.o_FoxBin2Prg_Lang lcPropName = tcPropName tcOperation = UPPER(EVL(tcOperation,'')) @@ -3917,7 +4252,7 @@ DEFINE CLASS c_conversor_base AS SESSION lcPropName = SUBSTR(tcPropName,5) CASE NOT tcOperation == 'SETNAME' - ERROR C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC + ERROR loLang.C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC CASE lcPropName == 'Name' && System "Name" property lcPropName = 'A999' + lcPropName @@ -4340,6 +4675,17 @@ DEFINE CLASS c_conversor_base AS SESSION ENDPROC + PROCEDURE writeErrorLog + LPARAMETERS tcText + + TRY + THIS.c_TextErr = THIS.c_TextErr + EVL(tcText,'') + CR_LF + THIS.l_Error = .T. + CATCH + ENDTRY + ENDPROC + + ENDDEFINE @@ -4502,8 +4848,13 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ******************************************************************************************************************* PROCEDURE createProject + LPARAMETERS tcTableOrCursor && 'TABLE' or 'CURSOR' - CREATE TABLE (THIS.c_OutputFile) ; + LOCAL lcCursorName + tcTableOrCursor = EVL( tcTableOrCursor, 'TABLE' ) + lcCursorName = ICASE( tcTableOrCursor = 'TABLE', THIS.c_OutputFile, 'TABLABIN' ) + + CREATE &tcTableOrCursor. (lcCursorName) ; ( NAME M ; , TYPE C(1) ; , ID N(10) ; @@ -4533,7 +4884,9 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base , KEY C(32) ; , USER M ) - USE (THIS.c_OutputFile) ALIAS TABLABIN AGAIN SHARED + IF tcTableOrCursor = 'TABLE' THEN + USE (THIS.c_OutputFile) ALIAS TABLABIN AGAIN SHARED + ENDIF ENDPROC @@ -4590,8 +4943,13 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ******************************************************************************************************************* PROCEDURE createClasslib + LPARAMETERS tcTableOrCursor && 'TABLE' or 'CURSOR' - CREATE TABLE (THIS.c_OutputFile) ; + LOCAL lcCursorName + tcTableOrCursor = EVL( tcTableOrCursor, 'TABLE' ) + lcCursorName = ICASE( tcTableOrCursor = 'TABLE', THIS.c_OutputFile, 'TABLABIN' ) + + CREATE &tcTableOrCursor. (lcCursorName) ; ( PLATFORM C(8) ; , UNIQUEID C(10) ; , TIMESTAMP N(10) ; @@ -4616,7 +4974,9 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base , RESERVED8 M ; , USER M ) - USE (THIS.c_OutputFile) ALIAS TABLABIN AGAIN SHARED + IF tcTableOrCursor = 'TABLE' THEN + USE (THIS.c_OutputFile) ALIAS TABLABIN AGAIN SHARED + ENDIF ENDPROC @@ -4645,8 +5005,13 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ******************************************************************************************************************* PROCEDURE createForm + LPARAMETERS tcTableOrCursor && 'TABLE' or 'CURSOR' - CREATE TABLE (THIS.c_OutputFile) ; + LOCAL lcCursorName + tcTableOrCursor = EVL( tcTableOrCursor, 'TABLE' ) + lcCursorName = ICASE( tcTableOrCursor = 'TABLE', THIS.c_OutputFile, 'TABLABIN' ) + + CREATE &tcTableOrCursor. (lcCursorName) ; ( PLATFORM C(8) ; , UNIQUEID C(10) ; , TIMESTAMP N(10) ; @@ -4671,7 +5036,9 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base , RESERVED8 M ; , USER M ) - USE (THIS.c_OutputFile) ALIAS TABLABIN AGAIN SHARED + IF tcTableOrCursor = 'TABLE' THEN + USE (THIS.c_OutputFile) ALIAS TABLABIN AGAIN SHARED + ENDIF ENDPROC @@ -4700,8 +5067,13 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ******************************************************************************************************************* PROCEDURE createReport + LPARAMETERS tcTableOrCursor && 'TABLE' or 'CURSOR' - CREATE TABLE (THIS.c_OutputFile) ; + LOCAL lcCursorName + tcTableOrCursor = EVL( tcTableOrCursor, 'TABLE' ) + lcCursorName = ICASE( tcTableOrCursor = 'TABLE', THIS.c_OutputFile, 'TABLABIN' ) + + CREATE &tcTableOrCursor. (lcCursorName) ; ( 'PLATFORM' C(8) ; , 'UNIQUEID' C(10) ; , 'TIMESTAMP' N(10) ; @@ -4778,15 +5150,22 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base , 'SUPEXPR' M ; , 'USER' M ) - USE (THIS.c_OutputFile) ALIAS TABLABIN AGAIN SHARED + IF tcTableOrCursor = 'TABLE' THEN + USE (THIS.c_OutputFile) ALIAS TABLABIN AGAIN SHARED + ENDIF ENDPROC ******************************************************************************************************************* PROCEDURE createMenu + LPARAMETERS tcTableOrCursor && 'TABLE' or 'CURSOR' - CREATE TABLE (THIS.c_OutputFile) ; + LOCAL lcCursorName + tcTableOrCursor = EVL( tcTableOrCursor, 'TABLE' ) + lcCursorName = ICASE( tcTableOrCursor = 'TABLE', THIS.c_OutputFile, 'TABLABIN' ) + + CREATE &tcTableOrCursor. (lcCursorName) ; ( 'OBJTYPE' Numeric(2) ; , 'OBJCODE' Numeric(2) ; , 'NAME' MEMO ; @@ -4813,7 +5192,9 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base , 'SYSRES' Numeric(1) ; , 'RESNAME' MEMORY(4) ) - USE (THIS.c_OutputFile) ALIAS TABLABIN AGAIN SHARED + IF tcTableOrCursor = 'TABLE' THEN + USE (THIS.c_OutputFile) ALIAS TABLABIN AGAIN SHARED + ENDIF ENDPROC @@ -5383,6 +5764,8 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base TRY LOCAL llEsProcedureDeClase, loProcedure AS CL_PROCEDURE OF 'FOXBIN2PRG.PRG' + LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' + loLang = _SCREEN.o_FoxBin2Prg_Lang loProcedure = NULL IF '.' $ tcProcedureAbierto AND VARTYPE(toObjeto) = 'O' AND toObjeto._Procedure_Count > 0 @@ -5409,12 +5792,12 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base *ERROR 'Error de anidamiento de estructuras. Se esperaba ENDPROC y se encontró ENDDEFINE en la clase ' ; + toClase._Nombre + ' (' + loProcedure._Nombre + ')' ; + ', línea ' + TRANSFORM(I) + ' del archivo ' + .c_InputFile - ERROR (TEXTMERGE(C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_LOC)) + ERROR (TEXTMERGE(loLang.C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_LOC)) ELSE *ERROR 'Error de anidamiento de estructuras. Se esperaba ENDPROC y se encontró ENDDEFINE en la clase ' ; + toClase._Nombre + ' (' + toObjeto._Nombre + '.' + loProcedure._Nombre + ')' ; + ', línea ' + TRANSFORM(I) + ' del archivo ' + .c_InputFile - ERROR (TEXTMERGE(C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_2_LOC)) + ERROR (TEXTMERGE(loLang.C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_2_LOC)) ENDIF ENDCASE ENDIF @@ -5707,6 +6090,8 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base , llCLASSCOMMENTS_Completed ; , loObjeto AS CL_OBJETO OF 'FOXBIN2PRG.PRG' + LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' + loLang = _SCREEN.o_FoxBin2Prg_Lang STORE '' TO tcProcedureAbierto toClase = CREATEOBJECT('CL_CLASE') toClase._Nombre = LOWER( ALLTRIM( STREXTRACT( tcLine, 'DEFINE CLASS ', ' AS ', 1, 1 ) ) ) @@ -5820,7 +6205,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base + 'que cierra al marcador de inicio [DEFINE CLASS] ' ; + 'de la línea ' + TRANSFORM( toClase._Inicio ) + ' ' ; + 'para el identificador [' + toClase._Nombre + ']' - ERROR (TEXTMERGE(C_ENDDEFINE_MARKER_NOT_FOUND_LOC)) + ERROR (TEXTMERGE(loLang.C_ENDDEFINE_MARKER_NOT_FOUND_LOC)) ENDIF toClase._PROPERTIES = .classProps2Memo( toClase ) @@ -6221,7 +6606,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ******************************************************************************************************************* PROCEDURE evaluarDefinicionDeProcedure - LPARAMETERS toClase, tnX, tc_Comentario, tcProcName, tcProcType, toObjeto + LPARAMETERS toClase, I, tc_Comentario, tcProcName, tcProcType, toObjeto *-------------------------------------------------------------------------------------------------------------- #IF .F. LOCAL toClase AS CL_CLASE OF 'FOXBIN2PRG.PRG' ; @@ -6229,12 +6614,12 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base #ENDIF TRY - LOCAL I, lcNombreObjeto, lnObjProc ; + LOCAL lcNombreObjeto, lnObjProc ; , loProcedure AS CL_PROCEDURE OF 'FOXBIN2PRG.PRG' IF EMPTY(toClase._Fin_Cab) - toClase._Fin_Cab = tnX-1 - toClase._Ini_Cuerpo = tnX + toClase._Fin_Cab = I-1 + toClase._Ini_Cuerpo = I ENDIF loProcedure = NULL @@ -6242,6 +6627,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base loProcedure._Nombre = tcProcName loProcedure._ProcType = tcProcType loProcedure._Comentario = tc_Comentario + loProcedure._Inicio = I *-- Anoto en HiddenMethods y ProtectedMethods según corresponda DO CASE @@ -6269,6 +6655,12 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base *-- Procedimiento de objeto toObjeto = toClase._AddObjects( lnObjProc ) toObjeto.add_Procedure( loProcedure ) + + *-- Paso el log de errores + IF NOT EMPTY(toObjeto.c_TextErr) THEN + toClase.writeErrorLog(toObjeto.c_TextErr) + toObjeto.c_TextErr = '' + ENDIF ENDIF ELSE *-- Procedimiento de clase @@ -6285,7 +6677,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base FINALLY STORE NULL TO loProcedure RELEASE loProcedure, I, lcNombreObjeto, lnObjProc ; - , toClase, tnX, tc_Comentario, tcProcName, tcProcType, toObjeto + , toClase, tc_Comentario, tcProcName, tcProcType, toObjeto ENDTRY RETURN @@ -6371,11 +6763,16 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base *-- Puede haber varias clases definidas * llEXTERNAL_CLASS_Completed = .T. + *-- Logueo los errores + IF NOT EMPTY(loClase.c_TextErr) THEN + .writeErrorLog( loClase.c_TextErr ) + ENDIF ENDCASE ENDFOR .verificar_CLASES_EXTERNAS( @toModulo, @toFoxBin2Prg ) + ENDIF ENDWITH && THIS @@ -6517,17 +6914,19 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base #ENDIF LOCAL lnItem, I, X + 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 DO CASE CASE toModulo._ExternalClasses_Count = 0 AND toModulo._ExternalClasses_Count <> toModulo._Clases_Count *ERROR 'El conteo de clases externas (' + TRANSFORM(toModulo._ExternalClasses_Count) + ') no coincide con la cantidad encontrada (' + TRANSFORM(toModulo._Clases_Count) + ') en el archivo [' + toFoxBin2Prg.c_InputFile + ']' - ERROR (TEXTMERGE(C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES)) + ERROR (TEXTMERGE(loLang.C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES_LOC)) CASE toModulo._Clases_Count =0 AND toModulo._ExternalClasses_Count <> toModulo._Clases_Count *ERROR 'El conteo de clases externas (' + TRANSFORM(toModulo._ExternalClasses_Count) + ') no coincide con la cantidad encontrada (' + TRANSFORM(toModulo._Clases_Count) + ') en el archivo [' + toFoxBin2Prg.c_InputFile + ']' - ERROR (TEXTMERGE(C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES)) + ERROR (TEXTMERGE(loLang.C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES_LOC)) *CASE toModulo._ExternalClasses_Count <> toModulo._Clases_Count THEN ENDCASE @@ -6544,7 +6943,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base IF lnItem = 0 THEN *ERROR 'No se ha encontrado la clase externa [' + toModulo._ExternalClasses(I) + '] en el archivo [' + toFoxBin2Prg.c_InputFile + ']' - ERROR (TEXTMERGE(C_EXTERNAL_CLASS_NAME_DOES_NOT_FOUND)) + ERROR (TEXTMERGE(loLang.C_EXTERNAL_CLASS_NAME_DOES_NOT_FOUND_LOC)) ENDIF toModulo._Clases(lnItem)._Checked = .T. @@ -6592,17 +6991,19 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin STORE NULL TO toModulo toModulo = CREATEOBJECT('CL_MODULO') - C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) - lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + IF toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_RedirectClassPerFileToMain + C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) - .AvanceDelProceso( 'Identifying Header Blocks...', 1, lnCodeLines, 1 ) - .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) + 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 ) - .AvanceDelProceso( 'Loading Code...', 2, lnCodeLines, 1 ) - IF toFoxBin2Prg.l_UseClassPerFile *-- Esto crea la máscara de búsqueda "filename.*.ext" para encontrar las partes - lcInputFile = FORCEPATH( JUSTSTEM( .c_InputFile ), JUSTPATH( .c_InputFile ) ) + '.*.' + JUSTEXT( .c_InputFile ) + lcInputFile = FORCEPATH( JUSTSTEM( JUSTSTEM(.c_InputFile) ), JUSTPATH(.c_InputFile) ) + '.*.' + JUSTEXT(.c_InputFile) lnFileCount = ADIR( laFiles, lcInputFile, "", 1 ) ASORT( laFiles, 1, 0, 0, 1) @@ -6617,6 +7018,15 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin 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 lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) @@ -6628,11 +7038,14 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo de cada clase .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) + IF .l_Error + .writeLog( '*** ERRORS found - Generation Cancelled' ) + EXIT + ENDIF + .AvanceDelProceso( 'Generating Binary...', 0, lnCodeLines, 1 ) toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) - .createClasslib() - .escribirArchivoBin( @toModulo, @toFoxBin2Prg ) ENDWITH && THIS @@ -6928,18 +7341,19 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin STORE NULL TO toModulo toModulo = CREATEOBJECT('CL_MODULO') - C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) - lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + IF toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_RedirectClassPerFileToMain + C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) - .AvanceDelProceso( 'Identifying Header Blocks...', 1, lnCodeLines, 1 ) - .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) + lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - .AvanceDelProceso( 'Loading Code...', 2, lnCodeLines, 1 ) + .AvanceDelProceso( 'Identifying Header Blocks...', 1, lnCodeLines, 1 ) + .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) + + .AvanceDelProceso( 'Loading Code...', 2, lnCodeLines, 1 ) - IF toFoxBin2Prg.l_UseClassPerFile *-- Esto crea la máscara de búsqueda "filename.*.ext" para encontrar las partes - lcInputFile = FORCEPATH( JUSTSTEM( .c_InputFile ), JUSTPATH( .c_InputFile ) ) + '.*.' + JUSTEXT( .c_InputFile ) + lcInputFile = FORCEPATH( JUSTSTEM( JUSTSTEM(.c_InputFile) ), JUSTPATH(.c_InputFile) ) + '.*.' + JUSTEXT(.c_InputFile) lnFileCount = ADIR( laFiles, lcInputFile, "", 1 ) ASORT( laFiles, 1, 0, 0, 1) @@ -6954,6 +7368,15 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin 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 lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) @@ -6965,12 +7388,14 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo de cada clase .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) + IF .l_Error + .writeLog( '*** ERRORS found - Generation Cancelled' ) + EXIT + ENDIF + .AvanceDelProceso( 'Generating Binary...', 0, lnCodeLines, 1 ) - toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) - .createForm() - .escribirArchivoBin( @toModulo, @toFoxBin2Prg ) ENDWITH && THIS @@ -7273,11 +7698,6 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) - - *-- Creo solo la cabecera del proyecto - .createProject() - *-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF *.identificarBloquesDeExclusion( @laCodeLines, .F., @laLineasExclusion, @lnBloquesExclusion ) @@ -7285,7 +7705,14 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin .AvanceDelProceso( 'Identifying Code Blocks...', 1, 2, 1 ) .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toProject ) + IF .l_Error + .writeLog( '*** ERRORS found - Generation Cancelled' ) + EXIT + ENDIF + .AvanceDelProceso( 'Generating Binary...', 2, 2, 1 ) + toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) + .createProject() .escribirArchivoBin( @toProject, toFoxBin2Prg ) ENDWITH && THIS @@ -8071,16 +8498,21 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) - - *-- Creo el reporte - .createReport() + .createReport('CURSOR') *-- 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, @toReport ) + USE IN (SELECT('TABLABIN')) + + IF .l_Error + .writeLog( '*** ERRORS found - Generation Cancelled' ) + EXIT + ENDIF .AvanceDelProceso( 'Generating Binary...', 2, 2, 1 ) + toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) + .createReport() .escribirArchivoBin( @toReport, toFoxBin2Prg ) ENDWITH && THIS @@ -8114,6 +8546,8 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin TRY LOCAL loReg, I, lcFieldType, lnFieldLen, lnFieldDec, lnNumCampo, laFieldTypes(1,18) ; , luValor, lnCodError, loEx AS EXCEPTION + LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' + loLang = _SCREEN.o_FoxBin2Prg_Lang SELECT TABLABIN AFIELDS( laFieldTypes ) loReg = NULL @@ -8140,7 +8574,7 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin IF lnNumCampo = 0 *ERROR 'No se encontró el campo [' + laProps(I) + '] en la estructura del archivo ' + DBF("TABLABIN") - ERROR (TEXTMERGE(C_FIELD_NOT_FOUND_ON_FILE_STRUCTURE_LOC)) + ERROR (TEXTMERGE(loLang.C_FIELD_NOT_FOUND_ON_FILE_STRUCTURE_LOC)) ENDIF lcFieldType = laFieldTypes(lnNumCampo,2) @@ -8507,6 +8941,11 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toTable ) + IF .l_Error + .writeLog( '*** ERRORS found - Generation Cancelled' ) + EXIT + ENDIF + .escribirArchivoBin( @toTable, @toFoxBin2Prg ) ENDWITH && THIS @@ -8798,16 +9237,18 @@ 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 ) - toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) - - *-- Creo la tabla - *.createTable() - *-- 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 ) + IF .l_Error + .writeLog( '*** ERRORS found - Generation Cancelled' ) + EXIT + ENDIF + .AvanceDelProceso( 'Generating Binary...', 2, 2, 1 ) + toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) + *.createTable() .escribirArchivoBin( @toDatabase, toFoxBin2Prg ) ENDWITH && THIS @@ -8978,16 +9419,21 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) - - *-- Creo la tabla - .createMenu() + .createMenu('CURSOR') *-- 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, @toMenu ) + USE IN (SELECT('TABLABIN')) + + IF .l_Error + .writeLog( '*** ERRORS found - Generation Cancelled' ) + EXIT + ENDIF .AvanceDelProceso( 'Generating Binary...', 1, 2, 1 ) + toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) + .createMenu() .escribirArchivoBin( @toMenu ) ENDWITH && THIS @@ -9639,6 +10085,8 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *-- INDENTA EL CÓDIGO DE UN MÉTODO DADO Y QUITA LA CABECERA DE MÉTODO (PROCEDURE/ENDPROC) SI LA ENCUENTRA TRY LOCAL I, X, lcMethod, llProcedure, lnInicio, lnFin, laLineas(1), lnOffset + LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' + loLang = _SCREEN.o_FoxBin2Prg_Lang lcMethod = '' lnInicio = 1 lnOffset = 0 @@ -9657,7 +10105,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base IF NOT EMPTY(laLineas(I)) && Última línea de código IF llProcedure AND LEFT( laLineas(I), 10 ) <> C_ENDPROC *ERROR 'Procedimiento sin cerrar. La última línea de código debe ser ENDPROC. [' + laLineas(1) + ']' - ERROR (TEXTMERGE(C_PROCEDURE_NOT_CLOSED_ON_LINE_LOC)) + ERROR (TEXTMERGE(loLang.C_PROCEDURE_NOT_CLOSED_ON_LINE_LOC)) ENDIF EXIT ENDIF @@ -10961,13 +11409,15 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF - LOCAL llFileExists + LOCAL llFileExists, lnBytes + LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' + loLang = _SCREEN.o_FoxBin2Prg_Lang 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(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) + THIS.writeLog( TEXTMERGE(loLang.C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) ELSE IF llFileExists THEN @@ -10975,9 +11425,13 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base toFoxBin2Prg.ChangeFileAttribute( tcOutputFile, '-R' ) ENDIF - IF STRTOFILE( tcCodigo, tcOutputFile ) = 0 + 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(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) + ERROR (TEXTMERGE(loLang.C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) ENDIF ENDIF @@ -11288,6 +11742,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg lcExternalHeader = lcExternalHeader + CR_LF ENDIF + *-- Genero el VC2 lnStep = lnStep + 1 .AvanceDelProceso( 'Writing VC2...', lnStep, lnClassTotal*lnStepCount, 1 ) @@ -11595,6 +12050,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg lcExternalHeader = lcExternalHeader + CR_LF ENDIF + *-- Genero el SC2 lnStep = lnStep + 1 .AvanceDelProceso( 'Writing SC2...', lnStep, lnClassTotal*lnStepCount, 1 ) @@ -11676,7 +12132,8 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg , loProject AS CL_PROJECT OF 'FOXBIN2PRG.PRG' ; , loServerHead AS CL_PROJ_SRV_HEAD OF 'FOXBIN2PRG.PRG' ; , loServerData AS CL_PROJ_SRV_DATA OF 'FOXBIN2PRG.PRG' - + LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' + loLang = _SCREEN.o_FoxBin2Prg_Lang STORE NULL TO loProject, loReg, loServerHead, loServerData WITH THIS AS c_conversor_pjx_a_prg OF 'FOXBIN2PRG.PRG' @@ -11966,7 +12423,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg DO CASE CASE lnCodError = 2062 && The specified key already exists ==> loProject.ADD( loReg, loReg.NAME ) *toEx.USERVALUE = 'Archivo duplicado: ' + loReg.NAME - toEx.USERVALUE = C_DUPLICATED_FILE_LOC + ': ' + loReg.NAME + toEx.USERVALUE = loLang.C_DUPLICATED_FILE_LOC + ': ' + loReg.NAME ENDCASE IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -12015,7 +12472,8 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg , 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') @@ -12343,7 +12801,7 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg DO CASE CASE lnCodError = 2062 && The specified key already exists ==> loProject.ADD( loReg, loReg.NAME ) *toEx.USERVALUE = 'Archivo duplicado: ' + loReg.NAME - toEx.USERVALUE = C_DUPLICATED_FILE_LOC + ': ' + loReg.NAME + toEx.USERVALUE = loLang.C_DUPLICATED_FILE_LOC + ': ' + loReg.NAME ENDCASE IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -12393,6 +12851,8 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg 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 @@ -12404,7 +12864,7 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg *-- 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(C_REPORT_NOT_IN_VFP9_FORMAT_LOC)) + ERROR (TEXTMERGE(loLang.C_REPORT_NOT_IN_VFP9_FORMAT_LOC)) ENDIF SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN_0 @@ -12559,6 +13019,8 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg , 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') @@ -12616,12 +13078,12 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg CASE FILE(.c_OutputFile) AND toFoxBin2Prg.FilesComparedAreEqual( .c_OutputFile + '.TMP', .c_OutputFile ) = 1 ERASE (.c_OutputFile + '.TMP') *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) - .writeLog( TEXTMERGE(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 ) *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' - ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) + ERROR (TEXTMERGE(loLang.C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) ENDCASE ENDIF @@ -12659,7 +13121,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(C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC) + toEx.USERVALUE = TEXTMERGE(loLang.C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC) *!* CASE toEx.ErrorNo = 1976 && Cannot resolve backlink *!* toEx.UserValue = 'WARNING!!' + CR_LF ; @@ -12794,6 +13256,8 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg 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' @@ -12805,7 +13269,7 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg *-- 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(C_MENU_NOT_IN_VFP9_FORMAT_LOC)) + ERROR (TEXTMERGE(loLang.C_MENU_NOT_IN_VFP9_FORMAT_LOC)) ENDIF *-- Header @@ -12855,15 +13319,17 @@ DEFINE CLASS CL_CUS_BASE AS CUSTOM , RESETTODEFAULT, SAVEASCLASS, SHOWWHATSTHIS, WRITEEXPRESSION, WRITEMETHOD _MEMBERDATA = [] ; + + [] ; + [] ; + [] ; + [] ; + [] ; + [] ; + [] ; + + [] ; + [] - + c_TextErr = '' l_Debug = .F. @@ -12917,6 +13383,16 @@ DEFINE CLASS CL_CUS_BASE AS CUSTOM ENDPROC + PROCEDURE writeErrorLog + LPARAMETERS tcText + + TRY + THIS.c_TextErr = THIS.c_TextErr + EVL(tcText,'') + CR_LF + CATCH + ENDTRY + ENDPROC + + ENDDEFINE @@ -13121,9 +13597,11 @@ DEFINE CLASS CL_CLASE AS CL_CUS_BASE + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -13173,8 +13651,9 @@ DEFINE CLASS CL_CLASE AS CL_CUS_BASE + [] - DIMENSION _Props[1,2], _AddObjects[1], _Procedures[1] + DIMENSION _Props[1,2], _AddObjects[1], _Procedures[1], _aProcNames[1] l_ObjectMetadataInHeader = .F. + c_TextErr = '' _Nombre = '' _ObjName = '' _Parent = '' @@ -13231,9 +13710,17 @@ DEFINE CLASS CL_CLASE AS CL_CUS_BASE #ENDIF WITH THIS AS CL_CLASE OF 'FOXBIN2PRG.PRG' + *-- Verificación de Procedure repetido + IF ._Procedure_Count > 0 AND ASCAN( ._aProcNames, toProcedure._Nombre, 1, 0, 0, 1+2+4 ) > 0 THEN + .writeErrorLog( '* Duplicated Method "' + toProcedure._Nombre + '" of class "' ; + + ._Nombre + '" in line ' + TRANSFORM(toProcedure._Inicio) ) + ENDIF + ._Procedure_Count = ._Procedure_Count + 1 DIMENSION ._Procedures( ._Procedure_Count ) + DIMENSION ._aProcNames( ._Procedure_Count ) ._Procedures( ._Procedure_Count ) = toProcedure + ._aProcNames( ._Procedure_Count ) = toProcedure._Nombre ENDWITH && THIS ENDPROC @@ -13280,6 +13767,7 @@ DEFINE CLASS CL_PROCEDURE AS CL_CUS_BASE _MEMBERDATA = [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -13291,6 +13779,7 @@ DEFINE CLASS CL_PROCEDURE AS CL_CUS_BASE _ProcType = '' _Comentario = '' _ProcLine_Count = 0 + _Inicio = 0 ************************************************************************************************ @@ -13317,6 +13806,8 @@ DEFINE CLASS CL_OBJETO AS CL_CUS_BASE _MEMBERDATA = [] ; + [] ; + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -13336,7 +13827,8 @@ DEFINE CLASS CL_OBJETO AS CL_CUS_BASE + [] ; + [] - DIMENSION _Props[1,1], _Procedures[1] + DIMENSION _Props[1,1], _Procedures[1], _aProcNames[1] + c_TextErr = '' _Nombre = '' _ObjName = '' _Parent = '' @@ -13367,9 +13859,17 @@ DEFINE CLASS CL_OBJETO AS CL_CUS_BASE toProcedure._Nombre = SUBSTR( toProcedure._Nombre, AT( '.', toProcedure._Nombre, OCCURS( '.', ._Nombre) ) + 1 ) ENDIF + *-- Verificación de Procedure repetido + IF ._Procedure_Count > 0 AND ASCAN( ._aProcNames, toProcedure._Nombre, 1, 0, 0, 1+2+4 ) > 0 THEN + .writeErrorLog( '* Duplicated Method "' + toProcedure._Nombre + '" of class.object "' ; + + ._Nombre + '" in line ' + TRANSFORM(toProcedure._Inicio) ) + ENDIF + ._Procedure_Count = ._Procedure_Count + 1 DIMENSION ._Procedures( ._Procedure_Count ) + DIMENSION ._aProcNames( ._Procedure_Count ) ._Procedures( ._Procedure_Count ) = toProcedure + ._aProcNames( ._Procedure_Count ) = toProcedure._Nombre ENDWITH && THIS ENDPROC @@ -14285,6 +14785,8 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE *--------------------------------------------------------------------------------------------------- LPARAMETERS tnPropertyID LOCAL lcValueType + LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' + loLang = _SCREEN.o_FoxBin2Prg_Lang lcValueType = '' DO CASE @@ -14303,7 +14805,7 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE OTHERWISE *ERROR 'Propiedad [' + TRANSFORM(tnPropertyID) + '] no reconocida.' - ERROR (TEXTMERGE(C_PROPERTY_NAME_NOT_RECOGNIZED_LOC)) + ERROR (TEXTMERGE(loLang.C_PROPERTY_NAME_NOT_RECOGNIZED_LOC)) ENDCASE RETURN lcValueType @@ -21157,7 +21659,6 @@ DEFINE CLASS CL_CFG AS CUSTOM + [] ; + [] ; + [] ; - + [] ; + [] ; + [] ; + [] ; @@ -21169,16 +21670,11 @@ DEFINE CLASS CL_CFG AS CUSTOM + [] ; + [] ; + [] ; - + [] ; + [] ; - + [] ; + [] ; + [] ; - + [] ; + [] ; + [] ; - + [] ; - + [] ; + [] ; + [] ; + [] ; @@ -21238,3 +21734,323 @@ DEFINE CLASS CL_CFG AS CUSTOM ENDDEFINE +DEFINE CLASS CL_LANG AS Custom + _MEMBERDATA = [] ; + + [] ; + + [] + + #IF .F. + LOCAL THIS AS CL_LANG OF 'FOXBIN2PRG.PRG' + #ENDIF + + 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_CONFIGFILE_LOC = "Using configuration file:" + C_CONVERSION_CANCELLED_BY_USER_LOC = "Conversion Cancelled by the user" + 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_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_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_DOES_NOT_FOUND_LOC = "External class [<>] is not found in file [<>]" + 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_LANGUAGE_LOC = "EN" + 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_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_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_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" + + + + PROCEDURE INIT + LPARAMETERS tcLanguage + + TRY + LOCAL lcSys16, lnPosProg, lc_Foxbin2prg_FullPath, lc_Foxbin2prg_LangFile, laDir(1,5) ; + , llLangFileExists, lcLangStr ; + , loEx as Exception + + WITH THIS AS CL_LANG OF 'FOXBIN2PRG.PRG' + *-- El lenguaje pasado por parámetro prevalece sobre el existente. + tcLanguage = EVL(tcLanguage,'') + + IF EMPTY(tcLanguage) + *-- Reconocer archivo de idioma foxbin2prg.h + lcSys16 = SYS(16) + IF LEFT(lcSys16,10) == 'PROCEDURE ' + lnPosProg = AT(" ", lcSys16, 2) + 1 + ELSE + lnPosProg = 1 + ENDIF + + lc_Foxbin2prg_FullPath = SUBSTR( lcSys16, lnPosProg ) + lc_Foxbin2prg_LangFile = FORCEEXT( lc_Foxbin2prg_FullPath, 'H' ) + llLangFileExists = ( ADIR( laDir, lc_Foxbin2prg_LangFile ) = 1 ) + ELSE + .n_LanguageSelectedMethod = 1 && 1=Assigned by Parameter + ENDIF + + IF llLangFileExists + TRY + *-- Language file "foxbin2prg.h" will be loaded (slowest option) + lcLangStr = 'LPARAMETERS toLangObj' + CR_LF + FILETOSTR( lc_Foxbin2prg_LangFile ) + + IF ATC( '', lcLangStr ) = 0 THEN + *-- El archivo es antiguo + ERROR "Archivo FoxBin2Prg.h antiguo" && Da igual el error + ENDIF + + lcLangStr = STRTRAN( lcLangStr, '#DEFINE ', 'toLangObj.' ) + lcLangStr = STRTRAN( lcLangStr, '_LOC', '_LOC =', -1, -1, 2 ) + lcLangStr = STRTRAN( lcLangStr, 'CR_LF', 'CHR(13)+CHR(10)' ) + EXECSCRIPT( lcLangStr, THIS ) + + CATCH TO loEx + *-- El archivo es antiguo o tiene errores + TRY + llLangFileExists = .F. + .n_LanguageSelectedMethod = 0 && 0=Automatic with VERSION(3) + RENAME (lc_Foxbin2prg_LangFile) TO (FORCEEXT(lc_Foxbin2prg_LangFile, 'invalid')) + CATCH && No quiero errores por RENAME + ENDTRY + + ENDTRY + ENDIF + + tcLanguage = UPPER( EVL(tcLanguage, VERSION(3)) ) + + DO CASE + CASE llLangFileExists + *-- Ya se cargó + .n_LanguageSelectedMethod = 2 && 2=Loaded from foxbin2prg.h + + CASE INLIST(tcLanguage, '33', 'FR') && French (Francés) + *------------------------------------------------------------------------------------------------------------------------------------------- + *-- NOTE: MUST USE DOUBLE QUOTES, OR SYNTAX ERRORS HAPPEN WHEN COMPILING. STRANGE :( + *------------------------------------------------------------------------------------------------------------------------------------------- + .C_ASTERISK_EXT_NOT_ALLOWED_LOC = "* Et ? extensions ne sont pas autorisées car il est dangereux (binaires peuvent être remplacés par des fichiers vides de XX2)" + .C_BACKLINK_CANT_UPDATE_BL_LOC = "Impossible de mettre à jour backlink" + .C_BACKLINK_OF_TABLE_LOC = "de la table" + .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_CONFIGFILE_LOC = "Utilisation du fichier de configuration:" + .C_CONVERSION_CANCELLED_BY_USER_LOC = "Conversion Annulé par l'utilisateur" + .C_CONVERTER_UNLOAD_LOC = "Convertisseur déchargement" + .C_CONVERTING_FILE_LOC = "Conversion de fichiers" + .C_DATA_ERROR_CANT_PARSE_UNPAIRING_DOUBLE_QUOTES_LOC = "Erreur de données: ne peut pas analyser en raison de guillemets non appariés en ligne <>" + .C_DUPLICATED_FILE_LOC = "fichier dupliqué" + .C_ENDDEFINE_MARKER_NOT_FOUND_LOC = "Vous ne trouvez pas marqueur de fin [ENDDEFINE] de la ligne <> ID [<>]" + .C_END_MARKER_NOT_FOUND_LOC = "Vous ne trouvez pas fin marqueur [<>] qui ferme marqueur de début [<>] en ligne <>" + .C_END_OF_PROCESS_LOC = "Fin du processus" + .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_DOES_NOT_FOUND_LOC = "Classe externe [<>] est introuvable dans le fichier [<>]" + .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:" + .C_FILE_NAME_IS_NOT_SUPPORTED_LOC = "File [<<.c_InputFile>>] ne est pas supporté" + .C_FILE_NOT_FOUND_LOC = "Fichier introuvable" + .C_FILENAME_LOC = "Fichier" + .C_FOXBIN2PRG_ERROR_CAPTION_LOC = "FOXBIN2PRG: ERREUR!!" + .C_FOXBIN2PRG_INFO_SINTAX_LOC = "FOXBIN2PRG: SYNTAX INFO" + .C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC = "FOXBIN2PRG [,cType ,cTextName ,cGenText ,cDontShowErrors ,cDebug, cDontShowProgress, cOriginalFileName, cRecompile, cNoTimestamps]" + CR_LF + CR_LF ; + + "Exemple pour générer TXT de tous VCX dans 'c:\development\classes', sans montrer la fenêtre d'erreur et générer fichier LOG: " + CR_LF ; + + " FOXBIN2PRG 'c:\development\classes\*.vcx' '0' '0' '0' '1' '1'" + CR_LF + CR_LF ; + + "Exemple pour générer TXT de tous VCX est 'c:\development\classes', sans montrant fenêtre d'erreur et sans fichier LOG: " + CR_LF ; + + " FOXBIN2PRG 'c:\development\classes\*.vc2' '0' '0' '0' '1' '0'" + .C_FOXBIN2PRG_JUST_VFP_9_LOC = "FOXBIN2PRG est seulement pour Visual FoxPro 9.0!" + .C_FOXBIN2PRG_WARN_CAPTION_LOC = "FOXBIN2PRG: AVERTISSEMENT!" + .C_GENERATED_FILE_SIZE_LOC = "Taille du fichier généré" + .C_LANGUAGE_LOC = "FR" + .C_MENU_NOT_IN_VFP9_FORMAT_LOC = "Menu [<>] ne est pas dans VFP 9 Format! - Se il vous plaît se convertir à VFP 9 avec MODIFY MENU '<>'" + .C_NAMES_CAPITALIZATION_PROGRAM_FOUND_LOC = "* Programme des noms de capitalisation [<>] trouvé" + .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_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" + .C_PROCEDURE_NOT_CLOSED_ON_LINE_LOC = "Procédure pas fermé. Dernière ligne de code doit être ENDPROC. [<>, Recno:<>]" + .C_PROCESSING_LOC = "Traitement du fichier" + .C_PROCESS_PROGRESS_LOC = "Processus Progrès:" + .C_PROPERTY_NAME_NOT_RECOGNIZED_LOC = "Propriété [<>] ne est pas reconnu." + .C_REPORT_NOT_IN_VFP9_FORMAT_LOC = "Rapport [<>] ne est pas dans VFP 9 Format! - Se il vous plaît se convertir à VFP 9 avec MODIFY REPORT '<>'" + .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_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[<>]" + .C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC = "AVERTISSEMENT!!" + CR_LF+ "ASSUREZ VOUS NE UTILISEZ PAS UN ALIAS DE TABLE SUR LES EXPRESSIONS INDEX CLÉS!! (exemple: index on <>.campo tag keyname)" + .C_WITH_ERRORS_LOC = "avec des erreurs" + + CASE INLIST(tcLanguage, '34', 'ES') && Spanish (Español) + *------------------------------------------------------------------------------------------------------------------------------------------- + *-- NOTA: SE DEBEN USAR COMILLAS DOBLES, O ERRORES DE SINTAXIS OCURREN AL COMPILAR. EXTRAÑO :( + *------------------------------------------------------------------------------------------------------------------------------------------- + .C_ASTERISK_EXT_NOT_ALLOWED_LOC = "No se admiten extensiones * o ? porque es peligroso (se pueden pisar binarios con archivo xx2 vacíos)." + .C_BACKLINK_CANT_UPDATE_BL_LOC = "No se pudo actualizar el backlink" + .C_BACKLINK_OF_TABLE_LOC = "de la tabla" + .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_CONFIGFILE_LOC = "Usando archivo de configuración:" + .C_CONVERTER_UNLOAD_LOC = "Descarga del conversor" + .C_CONVERTING_FILE_LOC = "Convirtiendo archivo" + .C_CONVERSION_CANCELLED_BY_USER_LOC = "Conversión Cancelada por el usuario" + .C_DATA_ERROR_CANT_PARSE_UNPAIRING_DOUBLE_QUOTES_LOC = "Error de datos: No se puede parsear porque las comillas no son pares en la línea <>" + .C_DUPLICATED_FILE_LOC = "Archivo duplicado" + .C_ENDDEFINE_MARKER_NOT_FOUND_LOC = "No se ha encontrado el marcador de fin [ENDDEFINE] de la línea <> para el identificador [<>]" + .C_END_MARKER_NOT_FOUND_LOC = "No se ha encontrado el marcador de fin [<>] que cierra al marcador de inicio [<>] de la línea <>" + .C_END_OF_PROCESS_LOC = "Fin del Proceso" + .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_DOES_NOT_FOUND_LOC = "No se ha encontrado la clase externa [<>] del archivo [<>]" + .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:" + .C_FILE_NAME_IS_NOT_SUPPORTED_LOC = "El archivo [<<.c_InputFile>>] no está soportado" + .C_FILE_NOT_FOUND_LOC = "No se encontró el archivo" + .C_FILENAME_LOC = "Archivo" + .C_FOXBIN2PRG_ERROR_CAPTION_LOC = "FOXBIN2PRG: ERROR!!" + .C_FOXBIN2PRG_INFO_SINTAX_LOC = "FOXBIN2PRG: INFORMACIÓN DE SINTAXIS" + .C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC = "FOXBIN2PRG [,cType ,cTextName ,cGenText ,cNoMostrarErrores ,cDebug, cDontShowProgress, cOriginalFileName, cRecompile, cNoTimestamps]" + CR_LF + CR_LF ; + + "Ejemplo para generar los TXT de todos los VCX de 'c:\desa\clases', sin mostrar ventana de error y generando archivo LOG: " + CR_LF ; + + " FOXBIN2PRG 'c:\desa\clases\*.vcx' '0' '0' '0' '1' '1'" + CR_LF + CR_LF ; + + "Ejemplo para generar los VCX de todos los TXT de 'c:\desa\clases', sin mostrar ventana de error y sin LOG: " + CR_LF ; + + " FOXBIN2PRG 'c:\desa\clases\*.vc2' '0' '0' '0' '1' '0'" + .C_FOXBIN2PRG_JUST_VFP_9_LOC = "¡FOXBIN2PRG es solo para Visual FoxPro 9.0!" + .C_FOXBIN2PRG_WARN_CAPTION_LOC = "FOXBIN2PRG: ¡ATENCIÓN!" + .C_GENERATED_FILE_SIZE_LOC = "Tamaño del archivo generado" + .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_LANGUAGE_LOC = "ES" + .C_NAMES_CAPITALIZATION_PROGRAM_FOUND_LOC = "* Se ha encontrado el programa de capitalización de nombres [<>]" + .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_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" + .C_PROCESS_PROGRESS_LOC = "Avance del proceso:" + .C_PROPERTY_NAME_NOT_RECOGNIZED_LOC = "Propiedad [<>] no reconocida." + .C_REPORT_NOT_IN_VFP9_FORMAT_LOC = "El Reporte [<>] NO está en formato VFP 9! - Por favor convertirlo a VFP 9 con MODIFY REPORT '<>'" + .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_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" + .C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC = "¡¡ATENCIÓN!!" + CR_LF+ "ASEGÚRESE DE QUE NO ESTÁ USANDO UN ALIAS DE TABLA EN LAS EXPRESIONES DE LOS ÍNDICES!! (ej: index on <>.campo tag nombreclave)" + .C_WITH_ERRORS_LOC = "con errores" + + CASE INLIST(tcLanguage, '49', 'DE') && German (Alemán) + *------------------------------------------------------------------------------------------------------------------------------------------- + *-- 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_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_CONFIGFILE_LOC = "Benutze Konfigurationsdatei:" + .C_CONVERSION_CANCELLED_BY_USER_LOC = "Konvertierung durch den Benutzer abgebrochen" + .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_DUPLICATED_FILE_LOC = "Doppelte Datei" + .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_FIELD_NOT_FOUND_ON_FILE_STRUCTURE_LOC = "Feld [<>] nicht in der Struktur von Datei <> gefunden" + .C_FILE_DOESNT_EXIST_LOC = "Datei existiert nicht:" + .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_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_EXTERNAL_CLASS_NAME_DOES_NOT_FOUND_LOC = "Externe Klasse (<>) nicht in der Datei [<>] gefunden" + .C_FOXBIN2PRG_ERROR_CAPTION_LOC = "FOXBIN2PRG: FEHLER!!" + .C_FOXBIN2PRG_INFO_SINTAX_LOC = "FOXBIN2PRG: SYNTAX INFO" + .C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC = "FOXBIN2PRG [,cType ,cTextName ,cGenText ,cDontShowErrors ,cDebug, cDontShowProgress, cOriginalFileName, cRecompile, cNoTimestamps]" + CR_LF + CR_LF ; + + "Ein Beispiel für die Generierung der TXT von allen VCX in 'c:\development\classes', ohne Anzeige des Fehlerfensters und Generierung der LOG Datei: " + CR_LF ; + + " FOXBIN2PRG 'c:\development\classes\*.vcx' '0' '0' '0' '1' '1'" + CR_LF + CR_LF ; + + "Ein Beispiel für die Generierung der TXT von allen VCX in 'c:\development\classes', ohne Anzeige des Fehlerfensters und ohne LOG datei: " + CR_LF ; + + " FOXBIN2PRG 'c:\development\classes\*.vc2' '0' '0' '0' '1' '0'" + .C_FOXBIN2PRG_JUST_VFP_9_LOC = "FOXBIN2PRG ist nur für Visual FoxPro 9.0!" + .C_FOXBIN2PRG_WARN_CAPTION_LOC = "FOXBIN2PRG: WARNUNG!" + .C_GENERATED_FILE_SIZE_LOC = "Generierte Dateigröße" + .C_LANGUAGE_LOC = "DE" + .C_MENU_NOT_IN_VFP9_FORMAT_LOC = "Menu [<>] ist NICHT in VFP 9 Format! - Bitte zuerst nach VFP 9 konvertieren mit MODIFY MENU '<>'" + .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_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC = "Befehl nicht erkannt. Nur SETNAME und GETNAME erlaubt." + .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_PROCESSING_LOC = "Bearbeite Datei" + .C_PROCESS_PROGRESS_LOC = "Bearbeitungsfortschritt:" + .C_PROPERTY_NAME_NOT_RECOGNIZED_LOC = "Eigenschaft [<>] nicht erkannt." + .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_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_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 + .n_LanguageSelectedMethod = 0 && 0=Automatic with VERSION(3) + + ENDCASE + ENDWITH && THIS AS CL_LANG OF 'FOXBIN2PRG.PRG' + ENDTRY + ENDPROC + +ENDDEFINE diff --git a/foxbin2prg_de.h b/foxbin2prg_de.h index e2d9e06..aeb3074 100644 --- a/foxbin2prg_de.h +++ b/foxbin2prg_de.h @@ -1,6 +1,7 @@ *------------------------------------------------------------------------------------------------------------------------------------------- *-- DEUTSCHE ÜBERSETZUNG => UMBENENNEN DIESER DATEI IN [foxbin2prg.h] UND NEUKOMPILIEREN DER FOXBIN2PRG.PRG - Jeder ist frei die Strings anzupassen und zu übersetzen. *-- 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" @@ -8,19 +9,21 @@ #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_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_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_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_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 "Externe Klassenzahl (<< toModulo._ExternalClasses_Count >>) nicht gefunden Klassen entsprechen (<< toModulo._Clases_Count >>) für Datei [<< toFoxBin2Prg.c_InputFile >>]" -#DEFINE C_EXTERNAL_CLASS_NAME_DOES_NOT_FOUND "Externe Klasse (<>) nicht in der Datei [<>] gefunden" +#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_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" #DEFINE C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC "FOXBIN2PRG [,cType ,cTextName ,cGenText ,cDontShowErrors ,cDebug, cDontShowProgress, cOriginalFileName, cRecompile, cNoTimestamps]" + CR_LF + CR_LF ; @@ -36,7 +39,7 @@ #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_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_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_PROCESSING_LOC "Bearbeite Datei" @@ -44,8 +47,10 @@ #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_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_WITH_ERRORS_LOC "mit Fehlern" diff --git a/foxbin2prg_en.h b/foxbin2prg_en.h index bac361d..aa46af2 100644 --- a/foxbin2prg_en.h +++ b/foxbin2prg_en.h @@ -1,6 +1,7 @@ *------------------------------------------------------------------------------------------------------------------------------------------- *-- ENGLISH TRANSLATION => RENAME OR COPY TO [foxbin2prg.h] TO USE, AND RECOMPILE FOXBIN2PRG.PRG - Feel free to change or adapt the strings. *-- NOTE: MUST USE DOUBLE QUOTES, OR SYNTAX ERRORS HAPPEN WHEN COMPILING. STRANGE :( +*-- FoxBin2Prg v1.19.38 *------------------------------------------------------------------------------------------------------------------------------------------- #DEFINE C_ASTERISK_EXT_NOT_ALLOWED_LOC "* and ? extensions are not allowed because it's dangerous (binaries can be overwritten with xx2 empty files)" #DEFINE C_BACKLINK_CANT_UPDATE_BL_LOC "Could not update backlink" @@ -8,15 +9,17 @@ #DEFINE C_BACKUP_OF_LOC "Doing Backup of: " #DEFINE C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC "Cannot generate file [<>] because it is ReadOnly" #DEFINE C_CONFIGFILE_LOC "Using configuration file:" +#DEFINE C_CONVERSION_CANCELLED_BY_USER_LOC "Conversion Cancelled by the user" #DEFINE C_CONVERTER_UNLOAD_LOC "Converter unload" #DEFINE C_CONVERTING_FILE_LOC "Converting file" #DEFINE C_DATA_ERROR_CANT_PARSE_UNPAIRING_DOUBLE_QUOTES_LOC "Data Error: Can't parse because of unpaired double-quotes on line <>" #DEFINE C_DUPLICATED_FILE_LOC "Duplicated file" #DEFINE C_ENDDEFINE_MARKER_NOT_FOUND_LOC "Cannot find end marker [ENDDEFINE] of line <> for ID [<>]" #DEFINE C_END_MARKER_NOT_FOUND_LOC "Cannot find end marker [<>] that closes start marker [<>] on line <>" +#DEFINE C_END_OF_PROCESS_LOC "End of Process" #DEFINE C_EXTENSION_RECONFIGURATION_LOC "Extension Reconfiguration:" -#DEFINE C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES "External class count (<>) does not match found classes (<>) for file [<>]" -#DEFINE C_EXTERNAL_CLASS_NAME_DOES_NOT_FOUND "External class [<>] is not found in file [<>]" +#DEFINE C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES_LOC "External class count (<>) does not match found classes (<>) for file [<>]" +#DEFINE C_EXTERNAL_CLASS_NAME_DOES_NOT_FOUND_LOC "External class [<>] is not found in file [<>]" #DEFINE C_FIELD_NOT_FOUND_ON_FILE_STRUCTURE_LOC "Field [<>] not found in structure of file <>" #DEFINE C_FILE_DOESNT_EXIST_LOC 'File does not exist:' #DEFINE C_FILE_NAME_IS_NOT_SUPPORTED_LOC "File [<<.c_InputFile>>] is not supported" @@ -36,7 +39,7 @@ #DEFINE C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC "* Names capitalization program [<>] not found" #DEFINE C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC "Object [<>] does not contain oReg object (level <>)" #DEFINE C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC "Operation not recognized. Only SETNAME and GETNAME allowed." -#DEFINE C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC "Optimization: Output file [<>] was not overwritten because it is the same as was generated." +#DEFINE C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC "Optimization: Output file [<>] was not overwritten because it is the same as was generated." #DEFINE C_OUTPUTFILE_NEWER_THAN_INPUTFILE_LOC "Optimization: Output file [<>] was not regenerated because it is newer than the inputfile." #DEFINE C_PROCEDURE_NOT_CLOSED_ON_LINE_LOC "Procedure not closed. Last line of code must be ENDPROC. [<>, Recno:<>]" #DEFINE C_PROCESSING_LOC "Processing file" @@ -44,8 +47,10 @@ #DEFINE C_PROPERTY_NAME_NOT_RECOGNIZED_LOC "Property [<>] is not recognized." #DEFINE C_REPORT_NOT_IN_VFP9_FORMAT_LOC "Report [<>] is NOT in VFP 9 Format! - Please convert to VFP 9 with MODIFY REPORT '<>'" #DEFINE C_REQUESTING_CAPITALIZATION_OF_FILE_LOC "- Requesting capitalization of file [<>]" +#DEFINE C_SCANNING_FILE_AND_DIR_INFO_LOC "Scanning file and directory information for" #DEFINE C_SOURCEFILE_LOC "Source file: " #DEFINE C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_LOC "Nesting structure error. ENDPROC expected but found ENDDEFINE on class <> (<>), line <> of file <>" #DEFINE C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_2_LOC "Nesting structure error. ENDPROC expected but found ENDDEFINE on class <> (<>.<>), line <> of file <>" #DEFINE C_UNKNOWN_CLASS_NAME_LOC "Unknown class [<>]" #DEFINE 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)" +#DEFINE C_WITH_ERRORS_LOC "with errors"