From 920c5c9239de638ec2b68d78ddf3975e856d3240 Mon Sep 17 00:00:00 2001 From: fernando Date: Sun, 26 Jan 2014 14:59:54 +0100 Subject: [PATCH] =?UTF-8?q?Changeset:=20145=20Estructuraci=C3=B3n=20en=20a?= =?UTF-8?q?rchivo=20.h=20y=20localizaci=C3=B3n=20de=20los=20textos=20en=20?= =?UTF-8?q?Ingl=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.txt | 13 ++- foxbin2prg.pj2 | 4 +- foxbin2prg.pjt | Bin 336896 -> 337408 bytes foxbin2prg.pjx | Bin 1583 -> 1583 bytes foxbin2prg.prg | 283 +++++++++++++++++++++++++++---------------------- 5 files changed, 168 insertions(+), 132 deletions(-) diff --git a/README.txt b/README.txt index ad331e8..923990e 100644 --- a/README.txt +++ b/README.txt @@ -1,4 +1,4 @@ -06/01/2014 FOXBIN2PRG VER.1.18 FOR VISUAL FOXPRO 9 BINARIES Fernando D. Bozzo (fdbozzo@gmail.com) +26/01/2014 FOXBIN2PRG v1.19 FOR VISUAL FOXPRO 9 BINARIES Fernando D. Bozzo (fdbozzo@gmail.com) ESPAÑOL -------------------------------------------------------------------------------------------- @@ -33,6 +33,12 @@ TRUCO UTIL: Se puede crear un acceso directo en la carpeta "SendTo" del perfil del usuario, para poder "enviar" el archivo elegido (pjx,pj2,etc) a Foxbin2prg.exe, y así se hacen conversiones al vuelo. +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. + + NOTA FINAL: Este programa es Open Source y "libre", y como tal no ofrezco garantías de que cumpla con sus espectativas o de que está libre de fallos, que intentaré solucionar si me reporta y mis obligaciones me lo permiten. @@ -77,6 +83,11 @@ USEFUL TRICK: You can create a shortcut in the "SendTo" folder on your user Windows Profile, so you can "send" the selected file (pjx,pj2,etc) to Foxbin2prg.exe, and make on-the-fly conversions. +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. + FINAL NOTE: This program is Open Source and "libre", and I don't make any garanties that it fulfills your espectations diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2 index 55f045a..8a9caae 100644 --- a/foxbin2prg.pj2 +++ b/foxbin2prg.pj2 @@ -26,7 +26,7 @@ _LegalTrademark = "Open Source" _ProductName = " FOXBIN2PRG" _MajorVer = "1" _MinorVer = "19" -_Revision = " 209" +_Revision = " 210" _LanguageID = "1034" _AutoIncrement = "1" * @@ -51,7 +51,7 @@ loProject = _VFP.Projects('foxbin2prg.pjx') WITH loProject.FILES .ADD('config\config.fpw') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="1132857145" ID="1131721714" ObjRev="0" /> - .ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="1144485039" ID="1130644423" ObjRev="544" /> + .ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="1144682071" ID="1130644423" ObjRev="544" /> * .ITEM('__newproject.f2b').Remove() diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index bf607df37bc06eb3cff12eb7d352b839f76f66dc..f205034dac689633653258103eb9cc20e9fcd3f6 100644 GIT binary patch delta 16426 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 S{Hln5_UDxWvhO^D-Twfv2NX;I delta 16294 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 diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx index eb7e26b7b07e307644ffe90ed3d6b32df49096dd..e17e388ca22b48e7f46c06ec90e2b33e83695a61 100644 GIT binary patch delta 35 pcmZ3_vz~{=fR9mXBg+mJHZuz&BO~+4hgklBmV% diff --git a/foxbin2prg.prg b/foxbin2prg.prg index dd66ae6..eea25b7 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -257,49 +257,58 @@ LPARAMETERS tc_InputFile, tcType_na, tcTextName_na, tlGenText_na, tcDontShowErro ******************************************************************************************************************* *-- INTERNACIONALIZACIÓN / INTERNATIONALIZATION ******************************************************************************************************************* -#IF .T. &&VERSION(3) == "34" && Español (Spanish) [NO FUNCIONA MÁS ESTO :( ] - #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 FOXBIN2PRG_INFO_SINTAX_LOC 'FOXBIN2PRG [cType_ND cTextName_ND cGenText_ND cNoMostrarErrores cDebug]' + CR_LF + CR_LF ; +#IF FILE('foxbin2prg.h') + #INCLUDE FOXBIN2PRG.H +#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 '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 '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_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_CFG_EXTENSION_LOC 'extension:' + #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_ND cTextName_ND cGenText_ND cNoMostrarErrores cDebug]' + 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 ASTERISK_EXT_NOT_ALLOWED_LOC 'No se admiten extensiones * o ? porque es peligroso (se pueden pisar binarios con archivo xx2 vacíos).' - #DEFINE C_PROCESSING_LOC 'Procesando archivo ' - #DEFINE C_FILE_DOESNT_EXIST_LOC "El archivo no existe:" - #DEFINE C_SOURCEFILE_LOC "Archivo origen: " - #DEFINE C_PROCESS_PROGRESS_LOC "Avance del proceso: " - #DEFINE C_CONVERTER_UNLOAD_LOC "Descarga del conversor" - #DEFINE C_CONVERTING_FILE_LOC "Convirtiendo archivo " - #DEFINE C_BACKUP_OF_LOC "Backup de: " - #DEFINE C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC 'Operación no reconocida. Solo re reconoce SETNAME y GETNAME.' - #DEFINE C_BACKLINK_CANT_UPDATE_BL_LOC 'No se pudo actualizar el backlink' - #DEFINE C_BACKLINK_OF_TABLE_LOC 'de la tabla' - -#ELSE && English - #DEFINE C_FOXBIN2PRG_JUST_VFP_9_LOC 'FOXBIN2PRG is only for Visual FoxPro 9.0!' - #DEFINE C_FOXBIN2PRG_WARN_CAPTION_LOC 'FOXBIN2PRG: WARNING!' - #DEFINE FOXBIN2PRG_INFO_SINTAX_LOC 'FOXBIN2PRG [cType_NA cTextName_NA cGenText_NA cDontShowErrors cDebug cDontShowProgress cOriginalFileName cRecompile]' + CR_LF + CR_LF ; - + 'Example to generate TXT of all VCX of "c:\desa\clases", without showing error window and generating LOG file: ' + CR_LF ; - + ' FOXBIN2PRG "c:\desa\clases\*.vcx" "0" "0" "0" "1" "1"' + CR_LF + CR_LF ; - + 'Example to generate TXT of all VCX of "c:\desa\clases", without showing error window and without LOG file: ' + CR_LF ; - + ' FOXBIN2PRG "c:\desa\clases\*.vc2" "0" "0" "0" "1" "0"' - #DEFINE ASTERISK_EXT_NOT_ALLOWED_LOC '* and ? extensions are not allowed because is dangerous (binaries can be overwriten with xx2 empty files)' - #DEFINE C_PROCESSING_LOC 'Processing file ' - #DEFINE C_FILE_DOESNT_EXIST_LOC "File doesn't exist:" - #DEFINE C_SOURCEFILE_LOC "Source file: " - #DEFINE C_PROCESS_PROGRESS_LOC "Process Progress: " - #DEFINE C_CONVERTER_UNLOAD_LOC "Converter unload" - #DEFINE C_CONVERTING_FILE_LOC "Converting file " - #DEFINE C_BACKUP_OF_LOC "Backup of: " - #DEFINE C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC 'Operation not recognized. Only SETNAME and GETNAME allowed.' - #DEFINE C_BACKLINK_CANT_UPDATE_BL_LOC 'Could not update backlink' - #DEFINE C_BACKLINK_OF_TABLE_LOC 'of table' - + #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_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_PROCEDURE_NOT_CLOSED_ON_LINE_LOC 'Procedimiento sin cerrar. La última línea de código debe ser ENDPROC. [<>]' + #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_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 ******************************************************************************************************************* + PUBLIC goCnv AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' LOCAL lnResp goCnv = CREATEOBJECT("c_foxbin2prg") @@ -384,8 +393,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM l_Debug = .F. l_Test = .F. l_ShowErrors = .F. - l_ShowProgress = .T. - l_Recompile = .T. + l_ShowProgress = .F. + l_Recompile = .F. l_MethodSort_Enabled = .T. && Para Unit Testing se puede cambiar a .F. para buscar diferencias l_PropSort_Enabled = .T. && Para Unit Testing se puede cambiar a .F. para buscar diferencias l_ReportSort_Enabled = .T. && Para Unit Testing se puede cambiar a .F. para buscar diferencias @@ -605,7 +614,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE EMPTY(tc_InputFile) *-- (Ejemplo de sintaxis y uso) - MESSAGEBOX( FOXBIN2PRG_INFO_SINTAX_LOC, 0+64+4096, 'FOXBIN2PRG: SINTAXIS INFO', 60000 ) + MESSAGEBOX( C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC, 0+64+4096, C_FOXBIN2PRG_INFO_SINTAX_LOC, 60000 ) lnCodError = 1 OTHERWISE @@ -625,7 +634,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM IF llExisteConfig FOR I = 1 TO ALINES( laConfig, FILETOSTR( lcConfigFile ), 1+4 ) - IF LOWER( LEFT( laConfig(I), 10 ) ) == 'extension:' + IF LOWER( LEFT( laConfig(I), 10 ) ) == C_FOXBIN2PRG_CFG_EXTENSION_LOC && 'extension:' lcConfData = ALLTRIM( SUBSTR( laConfig(I), 11 ) ) lcExt = 'c_' + ALLTRIM( GETWORDNUM( lcConfData, 1, '=' ) ) IF PEMSTATUS( THIS, lcExt, 5 ) @@ -640,9 +649,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM DO CASE CASE '*' $ JUSTEXT( tc_InputFile ) OR '?' $ JUSTEXT( tc_InputFile ) IF THIS.l_ShowErrors - MESSAGEBOX( ASTERISK_EXT_NOT_ALLOWED_LOC, 0+48+4096, 'FOXBIN2PRG: ERROR!!', 60000 ) + *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 ) ELSE - ERROR ASTERISK_EXT_NOT_ALLOWED_LOC + ERROR C_ASTERISK_EXT_NOT_ALLOWED_LOC ENDIF CASE '*' $ JUSTSTEM( tc_InputFile ) @@ -662,7 +672,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF THIS.writeLog( THIS.c_Foxbin2prg_FullPath + ' - FileSpec: ' + EVL(tc_InputFile,'') ) IF llExisteConfig - THIS.writeLog( 'ConfigFile: ' + lcConfigFile ) + *THIS.writeLog( 'ConfigFile:' + ' ' + lcConfigFile ) + THIS.writeLog( C_CONFIGFILE_LOC + ' ' + lcConfigFile ) ENDIF ENDIF @@ -674,7 +685,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM FOR I = 1 TO lnFileCount lcFile = FORCEPATH( laFiles(I,1), JUSTPATH( lcFileSpec ) ) - THIS.o_Frm_Avance.lbl_TAREA.CAPTION = C_PROCESSING_LOC + lcFile + '...' + THIS.o_Frm_Avance.lbl_TAREA.CAPTION = C_PROCESSING_LOC + ' ' + lcFile + '...' THIS.o_Frm_Avance.nVALUE = I IF THIS.l_ShowProgress @@ -759,7 +770,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .c_InputFile = FULLPATH( tc_InputFile ) IF ADIR( laDirFile, .c_InputFile, '', 1 ) = 0 - ERROR 'No se encontró el archivo [' + .c_InputFile + ']' + *ERROR 'No se encontró el archivo [' + .c_InputFile + ']' + ERROR C_FILE_NOT_FOUND_LOC + ' [' + .c_InputFile + ']' ENDIF .c_InputFile = loFSO.GetAbsolutePathName( FORCEPATH( laDirFile(1,1), JUSTPATH(.c_InputFile) ) ) @@ -860,7 +872,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_mnx' ) OTHERWISE - ERROR 'El archivo [' + .c_InputFile + '] no está soportado' + *ERROR 'El archivo [' + .c_InputFile + '] no está soportado' + ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDCASE @@ -898,7 +911,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM THIS.writeLog( lcErrorInfo ) ENDIF IF THIS.l_Debug AND THIS.l_ShowErrors - MESSAGEBOX( lcErrorInfo, 0+16+4096, 'FOXBIN2PRG: ERROR!!', 60000 ) + MESSAGEBOX( lcErrorInfo, 0+16+4096, C_FOXBIN2PRG_ERROR_CAPTION_LOC, 60000 ) ENDIF IF tlRelanzarError && Usado en Unit Testing THROW @@ -942,21 +955,21 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM LOCAL lcNext_Bak, I lcNext_Bak = '' - FOR I = 0 TO 99 + FOR I = 0 TO 9 IF I = 0 IF NOT FILE( tcOutputFileName + '.BAK' ) lcNext_Bak = '.BAK' EXIT ENDIF ELSE - IF NOT FILE( tcOutputFileName + '.' + PADL(I,2,'0') + '.BAK' ) - lcNext_Bak = '.' + PADL(I,2,'0') + '.BAK' + IF NOT FILE( tcOutputFileName + '.' + PADL(I,1,'0') + '.BAK' ) + lcNext_Bak = '.' + PADL(I,1,'0') + '.BAK' EXIT ENDIF ENDIF ENDFOR - lcNext_Bak = EVL( lcNext_Bak, '.100.BAK' ) && Para que no quede nunca vacío + lcNext_Bak = EVL( lcNext_Bak, '.X.BAK' ) && Para que no quede nunca vacío RETURN lcNext_Bak ENDPROC @@ -972,10 +985,12 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM loFSO = THIS.o_FSO IF FILE(lcEXE_CAPS) - THIS.writeLog( '* Se ha encontrado el programa de capitalización de nombres [' + lcEXE_CAPS + ']' ) + *THIS.writeLog( '* Se ha encontrado el programa de capitalización de nombres [' + lcEXE_CAPS + ']' ) + THIS.writeLog( TEXTMERGE(C_NAMES_CAPITALIZATION_PROGRAM_FOUND_LOC) ) ELSE *-- No existe el programa de capitalización, así que no se capitalizan los nombres. - THIS.writeLog( '* No se ha encontrado el programa de capitalización de nombres [' + lcEXE_CAPS + ']' ) + *THIS.writeLog( '* No se ha encontrado el programa de capitalización de nombres [' + lcEXE_CAPS + ']' ) + THIS.writeLog( TEXTMERGE(C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC) ) EXIT ENDIF @@ -1024,15 +1039,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM LPARAMETERS tcFileName, tcEXE_CAPS, toFSO AS Scripting.FileSystemObject LOCAL lcLog, laFile(1,5) - THIS.writeLog( '- Se ha solicitado capitalizar el archivo [' + tcFileName + ']' ) + *THIS.writeLog( '- Se ha solicitado capitalizar el archivo [' + tcFileName + ']' ) + THIS.writeLog( TEXTMERGE(C_REQUESTING_CAPITALIZATION_OF_FILE_LOC) ) lcLog = '' DO (tcEXE_CAPS) WITH tcFileName, '', 'F', lcLog, .T. - *IF ADIR( laFile, tcFileName, '', 1 ) > 0 AND laFile(1,1) <> JUSTFNAME(tcFileName) - * toFSO.MoveFile( FORCEPATH( laFile(1,1), JUSTPATH(tcFileName) ), tcFileName ) - * THIS.writeLog( ' => Se renombrará a [' + tcFileName + ']' ) - *ELSE - * THIS.writeLog( ' => No se renombrará a [' + tcFileName + '] porque ya estaba correcto.' ) - *ENDIF THIS.writeLog( lcLog ) ENDPROC @@ -1080,7 +1090,7 @@ DEFINE CLASS frm_avance AS FORM DOCREATE = .T. AUTOCENTER = .T. BORDERSTYLE = 2 - CAPTION = C_PROCESS_PROGRESS_LOC + CAPTION = C_PROCESS_PROGRESS_LOC + ' ' CONTROLBOX = .F. BACKCOLOR = RGB(255,255,255) nMAX_VALUE = 100 @@ -1394,7 +1404,7 @@ DEFINE CLASS c_conversor_base AS SESSION LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF THIS.writeLog( '' ) - THIS.writeLog( C_CONVERTING_FILE_LOC + THIS.c_OutputFile + '...' ) + THIS.writeLog( C_CONVERTING_FILE_LOC + ' ' + THIS.c_OutputFile + '...' ) ENDPROC @@ -1563,19 +1573,6 @@ DEFINE CLASS c_conversor_base AS SESSION EXIT ENDIF - *-- Esto fuerza la conversión a formato 12 hs, que no me interesa. - *lcTime=laDir[1,4] - *lnHour=VAL(lcTime) - *IF lnHour<12 - * lcTime=ALLTRIM(STR(IIF(lnHour=0,12,lnHour),2))+SUBSTR(lcTime,3)+" AM" - *ELSE - * lcTime=ALLTRIM(STR(IIF(lnHour=12,24,lnHour)-12,2))+SUBSTR(lcTime,3)+" PM" - *ENDIF - *IF VAL(lcTime)<10 - * lcTime="0"+lcTime - *ENDIF - *lcTimeStamp_Ret = DTOC(laDir[1,3])+" "+lcTime - ltTimeStamp = EVALUATE( '{^' + DTOC(laDir(1,3)) + ' ' + TRANSFORM(laDir(1,4)) + '}' ) *-- En mi arreglo, si la hora pasada tiene 32 segundos o más, redondeo al siguiente minuto, ya que @@ -2386,7 +2383,8 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base lnCantComillas = OCCURS( '"', lcMetadatos ) 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 "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)) ENDIF lnLastPos = 1 @@ -2479,9 +2477,10 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base *-- Validación IF EMPTY(taBloquesExclusion(tnBloquesExclusion,2)) - ERROR 'No se ha encontrado el marcador de fin [' + ta_ID_Bloques(lnPrimerID,2) ; + *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)) ENDIF ENDIF ENDFOR @@ -2848,22 +2847,20 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base #ENDIF *-- ESTRUCTURA A ANALIZAR: Propiedades normales, con CR codificado () y con CR+LF () - #IF .F. - HEIGHT = 2.73 - NAME = "c1" - prop1 = .F. && Mi prop 1 - prop_especial_cr = Este es el valor 1 Este el 2 Y Este bajo Shift_Enter el 3 - prop_especial_crlf = - Este es el valor 1 - Este el 2 - Y Este bajo Shift_Enter el 3 - - WIDTH = 27.40 - _MEMBERDATA = - - - && XML Metadata for customizable properties - #ENDIF + * HEIGHT = 2.73 + * NAME = "c1" + * prop1 = .F. && Mi prop 1 + * prop_especial_cr = Este es el valor 1 Este el 2 Y Este bajo Shift_Enter el 3 + * prop_especial_crlf = + * Este es el valor 1 + * Este el 2 + * Y Este bajo Shift_Enter el 3 + * + * WIDTH = 27.40 + * _MEMBERDATA = + * + * + * && XML Metadata for customizable properties *-- Fin: ESTRUCTURA A ANALIZAR: TRY @@ -3333,13 +3330,15 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base CASE LEFT( tcLine + ' ', 10 ) == C_ENDDEFINE + ' ' && Fin de bloque (ENDDEFINE) encontrado IF llEsProcedureDeClase - ERROR 'Error de anidamiento de estructuras. Se esperaba ENDPROC y se encontró ENDDEFINE en la clase ' ; + *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 ' + THIS.c_InputFile + ERROR (TEXTMERGE(C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_LOC)) ELSE - ERROR 'Error de anidamiento de estructuras. Se esperaba ENDPROC y se encontró ENDDEFINE en la clase ' ; + *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 ' + THIS.c_InputFile + ERROR (TEXTMERGE(C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_2_LOC)) ENDIF ENDCASE ENDIF @@ -3686,10 +3685,11 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base *-- Validación IF EMPTY( toClase._Fin ) - ERROR 'No se ha encontrado el marcador de fin [ENDDEFINE] ' ; + *ERROR 'No se ha encontrado el marcador de fin [ENDDEFINE] ' ; + '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)) ENDIF toClase._PROPERTIES = THIS.classProps2Memo( toClase ) @@ -5478,7 +5478,8 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin lnNumCampo = ASCAN( laFieldTypes, laProps(I), 1, -1, 1, 1+2+4+8 ) IF lnNumCampo = 0 - ERROR 'No se encontró el campo [' + laProps(I) + '] en la estructura del archivo ' + DBF("TABLABIN") + *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)) ENDIF lcFieldType = laFieldTypes(lnNumCampo,2) @@ -6751,7 +6752,8 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base FOR I = lnFin TO 1 STEP -1 IF NOT EMPTY(laLineas(I)) && Última línea de código IF LEFT( laLineas(I), 10 ) <> C_ENDPROC - ERROR 'Procedimiento sin cerrar. La última línea de código debe ser ENDPROC. [' + laLineas(1) + ']' + *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)) ENDIF EXIT ENDIF @@ -8006,9 +8008,11 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg lnLen = LEN( toFoxbin2prg.get_PROGRAM_HEADER() ) DO CASE CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) - THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + *THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + THIS.writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) CASE toFoxbin2prg.doBackup( .F., .T., '', '', '' ) AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 - ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' + *ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' + ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) ENDCASE ENDIF @@ -8171,9 +8175,11 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg lnLen = LEN( toFoxbin2prg.get_PROGRAM_HEADER() ) DO CASE CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) - THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + *THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + THIS.writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) CASE toFoxbin2prg.doBackup( .F., .T., '', '', '' ) AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 - ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' + *ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' + ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) ENDCASE ENDIF @@ -8478,9 +8484,11 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg lnLen = LEN( toFoxbin2prg.get_PROGRAM_HEADER() ) DO CASE CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) - THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + *THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + THIS.writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) CASE toFoxbin2prg.doBackup( .F., .T., '', '', '' ) AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 - ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' + *ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' + ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) ENDCASE ENDIF @@ -8490,7 +8498,8 @@ 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 = 'Archivo duplicado: ' + loReg.NAME + toEx.USERVALUE = C_DUPLICATED_FILE_LOC + ': ' + loReg.NAME ENDCASE IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -8845,9 +8854,11 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg lnLen = LEN( toFoxbin2prg.get_PROGRAM_HEADER() ) DO CASE CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) - THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + *THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + THIS.writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) CASE toFoxbin2prg.doBackup( .F., .T., '', '', '' ) AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 - ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' + *ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' + ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) ENDCASE ENDIF @@ -8857,7 +8868,8 @@ 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 = 'Archivo duplicado: ' + loReg.NAME + toEx.USERVALUE = C_DUPLICATED_FILE_LOC + ': ' + loReg.NAME ENDCASE IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -8977,9 +8989,11 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg lnLen = LEN( toFoxbin2prg.get_PROGRAM_HEADER() ) DO CASE CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) - THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + *THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + THIS.writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) CASE toFoxbin2prg.doBackup( .F., .T., '', '', '' ) AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 - ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' + *ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' + ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) ENDCASE ENDIF @@ -9051,9 +9065,11 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg lnLen = LEN( toFoxbin2prg.get_PROGRAM_HEADER() ) DO CASE CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) - THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + *THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + THIS.writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) CASE toFoxbin2prg.doBackup( .F., .T., '', '', '' ) AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 - ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' + *ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' + ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) ENDCASE ENDIF @@ -9061,20 +9077,21 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg CATCH TO toEx DO CASE CASE toEx.ERRORNO = 13 && Alias not found - toEx.USERVALUE = 'WARNING!!' + CR_LF ; + *toEx.USERVALUE = 'WARNING!!' + CR_LF ; + 'MAKE SURE YOU ARE NOT USING A TABLE ALIAS ON INDEX KEY EXPRESSIONS!! (ex: index on ' ; + UPPER(JUSTSTEM(THIS.c_InputFile)) + '.field tag keyname)' + CR_LF + CR_LF ; + '¡¡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) - *!* CASE toEx.ErrorNo = 1976 && Cannot resolve backlink - *!* toEx.UserValue = 'WARNING!!' + CR_LF ; - *!* + "MAY BE DATABASE FIELDS DOESN'T" ; - *!* + UPPER(JUSTSTEM(THIS.c_InputFile)) + '.field tag keyname)' + CR_LF + CR_LF ; - *!* + '¡¡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)' + *!* CASE toEx.ErrorNo = 1976 && Cannot resolve backlink + *!* toEx.UserValue = 'WARNING!!' + CR_LF ; + *!* + "MAY BE DATABASE FIELDS DOESN'T" ; + *!* + UPPER(JUSTSTEM(THIS.c_InputFile)) + '.field tag keyname)' + CR_LF + CR_LF ; + *!* + '¡¡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)' ENDCASE IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -9148,9 +9165,11 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg lnLen = LEN( toFoxbin2prg.get_PROGRAM_HEADER() ) DO CASE CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) - THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + *THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + THIS.writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) CASE toFoxbin2prg.doBackup( .F., .T., '', '', '' ) AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 - ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' + *ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' + ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) ENDCASE ENDIF @@ -9205,7 +9224,8 @@ 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 [' + (THIS.c_InputFile) + '] is NOT VFP 9 Format! - Please convert to VFP 9 with MODIFY MENU ' + JUSTFNAME((THIS.c_InputFile)) + *ERROR 'Menu [' + (THIS.c_InputFile) + '] is NOT VFP 9 Format! - Please convert to VFP 9 with MODIFY MENU ' + JUSTFNAME((THIS.c_InputFile)) + ERROR (TEXTMERGE(C_MENU_NOT_IN_VFP9_FORMAT_LOC)) ENDIF *-- Header @@ -9223,9 +9243,11 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg lnLen = LEN( toFoxbin2prg.get_PROGRAM_HEADER() ) DO CASE CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) - THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + *THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + THIS.writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) CASE toFoxbin2prg.doBackup( .F., .T., '', '', '' ) AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 - ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' + *ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' + ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) ENDCASE ENDIF @@ -10618,7 +10640,8 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE lcValueType = 'C' OTHERWISE - ERROR 'Propiedad [' + TRANSFORM(tnPropertyID) + '] no reconocida.' + *ERROR 'Propiedad [' + TRANSFORM(tnPropertyID) + '] no reconocida.' + ERROR (TEXTMERGE(C_PROPERTY_NAME_NOT_RECOGNIZED_LOC)) ENDCASE RETURN lcValueType @@ -10853,7 +10876,8 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE lcType = 'Field' OTHERWISE - ERROR 'Clase [' + THIS.CLASS + '] desconocida' + *ERROR 'Clase [' + THIS.CLASS + '] desconocida' + ERROR (TEXTMERGE(C_UNKNOWN_CLASS_NAME_LOC)) ENDCASE @@ -15286,8 +15310,9 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE ELSE IF THIS.l_Debug - toConversor.writeLog( REPLICATE(C_TAB,tnNivel) ; - + 'Objeto [' + toObj.CLASS + '] sin registro oReg (nivel ' + TRANSFORM(tnNivel) + ')' ) + *toConversor.writeLog( REPLICATE(C_TAB,tnNivel) ; + + 'Objeto [' + toObj.CLASS + '] no contiene el objeto oReg (nivel ' + TRANSFORM(tnNivel) + ')' ) + toConversor.writeLog( REPLICATE(C_TAB,tnNivel) + TEXTMERGE(C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC) ) ENDIF ENDIF