From 2c7bde1e2fcd49dcae0afabed19966eddfc178de Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 4 Dec 2014 11:01:49 +0100 Subject: [PATCH 01/20] =?UTF-8?q?Changeset:=20542=20fdbozzo=20-=2004/12/20?= =?UTF-8?q?14=2010:56:57:=20-=20Cambios=20iniciales=20en=20versi=C3=B3n=20?= =?UTF-8?q?del=20=20proyecto=20y=20del=20historial=20de=20versiones?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 7 +++++-- foxbin2prg.pj2 | 2 +- foxbin2prg.pjt | Bin 624170 -> 624170 bytes foxbin2prg.pjx | Bin 9123 -> 9123 bytes 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 4976511..e51b6aa 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,04) .SourceFileUrl = 'http://vfpxrepository.com/dl/thorupdate/Projects/FoxBin2Prg/FoxBin2Prg.Zip' .Link = 'http://vfpx.codeplex.com/wikipage?title=FoxBin2PRG' @@ -17,6 +17,9 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg Change History ------------------------------------------------------------- +2014/12/04 v1.19.38 +- + 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/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 e3cbbe58f1357580ca4915492e0eebfd2a25c487..34f7a7f0640b496ce5dfcb5b3c307f0472ccf688 100644 GIT binary patch delta 66 zcmZ40qqeF?ZG#~vhXn%zgQ0=3$wWcv$p^$)nj<*dBRCm>mm Date: Fri, 5 Dec 2014 15:47:01 +0100 Subject: [PATCH 02/20] =?UTF-8?q?Changeset:=20543=20fdbozzo=20-=2004/12/20?= =?UTF-8?q?14=2011:02:35:=20-=20Agregados=20nuevos=20modos=20para=20proces?= =?UTF-8?q?ar=20BIN2PRG,=20PRG2BIN=20y=20combinaci=C3=B3n=20con=20modo=20I?= =?UTF-8?q?NTERACTIVO=20para=20sustituir=20los=20scripts=20vbs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 190 +++++++++++++++++++++++++++++++++++++++++++++--- foxbin2prg_de.h | 2 + foxbin2prg_en.h | 2 + 3 files changed, 182 insertions(+), 12 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 93ae46f..7458765 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -117,6 +117,7 @@ * 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) * * *--------------------------------------------------------------------------------------------------- @@ -168,6 +169,7 @@ * 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 * * *--------------------------------------------------------------------------------------------------- @@ -178,8 +180,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 @@ -404,6 +409,7 @@ LPARAMETERS tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDeb #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_END_OF_PROCESS_LOC "Fin del Proceso" #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 [<>]" @@ -434,6 +440,7 @@ LPARAMETERS tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDeb #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_SCANNING_FILE_AND_DIR_INFO "Escaneando archivos e información de directorio para" #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 <>" @@ -453,6 +460,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', 'INTERACTIVE') THEN + pcParamX = tc_InputFile + tc_InputFile = tcType + tcType = pcParamX + RELEASE pcParamX +ENDIF + loCnv = CREATEOBJECT("c_foxbin2prg") loEx = NULL @@ -563,6 +578,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -574,6 +590,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -638,6 +655,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM n_FileHandle = 0 o_Conversor = NULL o_Frm_Avance = NULL + o_WSH = NULL o_FSO = NULL o_FNC = NULL && Filename_caps object o_Configuration = NULL @@ -688,7 +706,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM 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) ) @@ -712,6 +731,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM FINALLY ON ESCAPE THIS.o_FSO = NULL + THIS.o_WSH = NULL THIS.o_FNC = NULL ENDTRY @@ -1718,6 +1738,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 +1760,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 +1782,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) @@ -1788,9 +1813,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM TRY LOCAL I, lcPath, lnCodError, lcFileSpec, lcFile, laFiles(1,5) ; - , lnFileCount, lcErrorInfo ; + , lnFileCount, lcErrorInfo, lcErrorFile ; , loEx AS EXCEPTION ; - , loFSO AS Scripting.FileSystemObject + , loFSO AS Scripting.FileSystemObject ; + , loWSH AS WScript.Shell WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' lnCodError = 0 @@ -1819,7 +1845,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF loFSO = .o_FSO + loWSH = .o_WSH tcRecompile = EVL(tcRecompile,'1') + tcType = UPPER( EVL(tcType,'') ) DO CASE CASE VERSION(5) < 900 @@ -1881,10 +1909,77 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .AvanceDelProceso( C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) IF FILE( lcFile ) - lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) + lnCodError = .Convertir( lcFile, @toModulo, @toEx, .T., tcOriginalFileName ) ENDIF 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 + IF FILE( .c_LogFile ) + ERASE ( .c_LogFile ) + ENDIF + 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( C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) + lnCodError = .Convertir( lcFile, @toModulo, @toEx, .T., tcOriginalFileName ) + ENDFOR + + .AvanceDelProceso( 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 + IF FILE( .c_LogFile ) + ERASE ( .c_LogFile ) + ENDIF + 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( C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) + lnCodError = .Convertir( lcFile, @toModulo, @toEx, .T., tcOriginalFileName ) + ENDFOR + + .AvanceDelProceso( C_END_OF_PROCESS_LOC, lnFileCount, lnFileCount, 0 ) + + OTHERWISE *-- UN ARCHIVO INDIVIDUAL O CONSULTA DE SOPORTE DE ARCHIVO IF LEN(EVL(tc_InputFile,'')) = 1 @@ -2036,6 +2131,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ERASE ( .c_LogFile ) lnCodError = .Convertir( tc_InputFile, toModulo, toEx, .T., tcOriginalFileName ) + .AvanceDelProceso( C_END_OF_PROCESS_LOC, 1, 1, 0 ) ENDIF ENDIF ENDCASE @@ -2046,6 +2142,12 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CATCH TO toEx lnCodError = toEx.ERRORNO THIS.l_Error = .T. + + IF '-INTERACTIVE' $ ('-' + tcType) THEN + toEx.UserValue = 'tc_InputDir = [' + TRANSFORM(tc_InputFile) + ']' + THIS.l_ShowErrors = .F. && La opción "INTERACTIVE" muestra su propio mensaje + ENDIF + lcErrorInfo = THIS.Exception2Str(toEx) + CR_LF + CR_LF + C_SOURCEFILE_LOC + THIS.c_InputFile ADDPROPERTY(_SCREEN, 'ExitCode', toEx.ERRORNO) @@ -2057,7 +2159,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- 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 + CATCH TO loEx ENDTRY IF THIS.l_Debug @@ -2066,9 +2168,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF THIS.writeLog( lcErrorInfo ) ENDIF + IF THIS.l_ShowErrors MESSAGEBOX( lcErrorInfo, 0+16+4096, C_FOXBIN2PRG_ERROR_CAPTION_LOC, 60000 ) ENDIF + IF tlRelanzarError THROW ENDIF @@ -2078,11 +2182,32 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM THIS.writeLog_Flush() *THIS.descargar_frm_avance() CD (JUSTPATH(THIS.c_CurDir)) - STORE NULL TO loFSO + + IF '-INTERACTIVE' $ ('-' + tcType) THEN + lcErrorFile = FORCEPATH('FoxBin2Prg.LOG',GETENV('TEMP') ) + + DO CASE + CASE lnCodError = 1799 && Conversion Cancelled + MESSAGEBOX( 'Conversion Cancelled by User!', 0+48+4096, 'FoxBin2Prg', 60000 ) + STRTOFILE( THIS.c_ErrorLog, lcErrorFile ) + loWSH.Run( lcErrorFile, 1, .F. ) + + CASE lnCodError > 0 + MESSAGEBOX( C_END_OF_PROCESS_LOC + '! (with errors)', 0+48+4096, 'FoxBin2Prg', 60000 ) + STRTOFILE( THIS.c_ErrorLog, lcErrorFile ) + loWSH.Run( lcErrorFile, 1, .F. ) + + OTHERWISE + MESSAGEBOX( C_END_OF_PROCESS_LOC, 0+64+4096, 'FoxBin2Prg', 60000 ) + + ENDCASE + ENDIF + + 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 @@ -2356,7 +2481,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .o_Conversor.c_Foxbin2prg_FullPath = .c_Foxbin2prg_FullPath *-- .AvanceDelProceso( C_PROCESSING_LOC + ' ' + .c_InputFile + '...', 0, 0, 0 ) - BINDEVENT( .o_Conversor, 'AvanceDelProceso', THIS, 'AvanceDelProceso' ) + + IF AEVENTS( laEvents, .o_Conversor ) = 0 THEN + BINDEVENT( .o_Conversor, 'AvanceDelProceso', THIS, 'AvanceDelProceso' ) + ENDIF .o_Conversor.Convertir( @toModulo, .F., THIS ) .c_TextLog = .c_TextLog + CR_LF + .o_Conversor.c_TextLog && Recojo el LOG que haya generado el conversor @@ -2572,6 +2700,44 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC + PROCEDURE ObtenerArchivosDelDirectorio + LPARAMETERS tcDir, taFiles, lnFileCount + EXTERNAL ARRAY taFiles + + LOCAL laFiles(1), I, lnFiles + + IF TYPE("ALEN(laFiles)") # "N" OR EMPTY(lnFileCount) + lnFileCount = 0 + DIMENSION taFiles(1) + ENDIF + + tcDir = ADDBS(tcDir) + + IF DIRECTORY(tcDir) + THIS.AvanceDelProceso( C_SCANNING_FILE_AND_DIR_INFO + ' ' + 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 RenameFile LPARAMETERS tcFileName, tcEXE_CAPS, toFSO AS Scripting.FileSystemObject, tlRelanzarError diff --git a/foxbin2prg_de.h b/foxbin2prg_de.h index e2d9e06..bd64c1e 100644 --- a/foxbin2prg_de.h +++ b/foxbin2prg_de.h @@ -14,6 +14,7 @@ #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" @@ -44,6 +45,7 @@ #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 "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" diff --git a/foxbin2prg_en.h b/foxbin2prg_en.h index bac361d..6291a26 100644 --- a/foxbin2prg_en.h +++ b/foxbin2prg_en.h @@ -14,6 +14,7 @@ #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 [<>]" @@ -44,6 +45,7 @@ #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 "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 <>" From 799d8646d8f4834e2f9c4b7e8a14dbdf62172e79 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 6 Dec 2014 00:27:40 +0100 Subject: [PATCH 03/20] =?UTF-8?q?Changeset:=20544=20fdbozzo=20-=2005/12/20?= =?UTF-8?q?14=2015:47:02:=20-=20Redise=C3=B1o=20de=20la=20Localizaci=C3=B3?= =?UTF-8?q?n=20de=20mensajes,=20ahora=20como=20clase=20interna=20de=20carg?= =?UTF-8?q?a=20autom=C3=A1tica?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 616 +++++++++++++++++++++++++++++++++--------------- foxbin2prg_de.h | 2 + foxbin2prg_en.h | 2 + 3 files changed, 436 insertions(+), 184 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 7458765..8814565 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -388,67 +388,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_END_OF_PROCESS_LOC "Fin del Proceso" - #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_SCANNING_FILE_AND_DIR_INFO "Escaneando archivos e información de directorio para" - #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 @@ -534,6 +473,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -607,11 +547,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM 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_loc_processing_file = '' + c_loc_process_progress = '' c_FB2PRG_EXE_Version = 0 c_Foxbin2prg_FullPath = '' c_Foxbin2prg_ConfigFile = '' @@ -694,6 +633,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ON ESCAPE ERROR 1799 SET ESCAPE ON + _SCREEN.AddProperty( "o_FoxBin2Prg_Lang", CREATEOBJECT("CL_LANG") ) lcSys16 = SYS(16) IF LEFT(lcSys16,10) == 'PROCEDURE ' @@ -702,7 +642,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM lnPosProg = 1 ENDIF - THIS.c_Language = C_LANGUAGE_LOC + 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 THIS.c_Foxbin2prg_FullPath = SUBSTR( lcSys16, lnPosProg ) THIS.c_Foxbin2prg_ConfigFile = FORCEEXT( THIS.c_Foxbin2prg_FullPath, 'CFG' ) THIS.c_CurDir = SYS(5) + CURDIR() @@ -1180,12 +1122,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 ) @@ -1223,11 +1167,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 @@ -1296,18 +1240,21 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM LOCAL lcConfigFile, llExisteConfig, laConfig(1), I, lcConfData, lcExt, lcValue, lc_CFG_Path, lcConfigLine ; , 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 + loLang = _SCREEN.o_FoxBin2Prg_Lang tcRecompile = EVL(tcRecompile,'1') 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 + '"' + ERROR loLang.C_FILE_NOT_FOUND_LOC + ': .c_InputFile = "' + tc_InputFile + '"' ENDIF lcConfigFile = FORCEPATH( 'foxbin2prg.cfg', JUSTPATH(tc_InputFile) ) ENDIF @@ -1329,7 +1276,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF IF llExisteConfig AND .n_CFG_Actual = 0 - .writeLog( C_CONFIGFILE_LOC + ' ' + lcConfigFile ) + .writeLog( loLang.C_CONFIGFILE_LOC + ' ' + lcConfigFile ) IF .l_AllowMultiConfig AND .l_ConfigEvaluated AND .l_Main_CFG_Loaded lo_CFG = CREATEOBJECT('CL_CFG') @@ -1354,7 +1301,7 @@ 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( JUSTFNAME(lcConfigFile) + ' > ' + loLang.C_EXTENSION_RECONFIGURATION_LOC + ' ' + lcExt + ' a ' + UPPER( ALLTRIM( GETWORDNUM( lcConfData, 2, '=' ) ) ) ) ENDIF CASE LEFT( laConfig(I), 17 ) == LOWER('DontShowProgress:') @@ -1816,10 +1763,12 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM , lnFileCount, lcErrorInfo, lcErrorFile ; , loEx AS EXCEPTION ; , 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 + loLang = _SCREEN.o_FoxBin2Prg_Lang .writeLog( '---' ) .writeLog( .c_Foxbin2prg_FullPath + ' (EXE Version: ' + .c_FB2PRG_EXE_Version + ')' + CR_LF ; @@ -1852,12 +1801,12 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM 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, 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, 60000 ) lnCodError = 1 OTHERWISE @@ -1878,9 +1827,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 ) @@ -1906,7 +1855,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM FOR I = 1 TO lnFileCount lcFile = FORCEPATH( laFiles(I,1), JUSTPATH( lcFileSpec ) ) - .AvanceDelProceso( C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) + .AvanceDelProceso( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) IF FILE( lcFile ) lnCodError = .Convertir( lcFile, @toModulo, @toEx, .T., tcOriginalFileName ) @@ -1942,11 +1891,20 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM IF NOT .TieneSoporte_Bin2Prg( JUSTEXT(lcFile) ) OR NOT FILE(lcFile) THEN LOOP ENDIF - .AvanceDelProceso( C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) - lnCodError = .Convertir( lcFile, @toModulo, @toEx, .T., tcOriginalFileName ) + .AvanceDelProceso( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) + lnCodError = .Convertir( lcFile, @toModulo, @toEx, .F., tcOriginalFileName ) + + DO CASE + CASE lnCodError = 1799 && Conversion Cancelled + THROW + + CASE lnCodError > 0 + .l_Error = .T. + .ejecutar_WriteErrorLog( @toEx ) + ENDCASE ENDFOR - .AvanceDelProceso( C_END_OF_PROCESS_LOC, lnFileCount, lnFileCount, 0 ) + .AvanceDelProceso( loLang.C_END_OF_PROCESS_LOC, lnFileCount, lnFileCount, 0 ) CASE LEFT( tcType,7 ) == 'PRG2BIN' AND DIRECTORY(tc_InputFile) @@ -1973,11 +1931,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM IF NOT .TieneSoporte_Prg2Bin( JUSTEXT(lcFile) ) OR NOT FILE(lcFile) THEN LOOP ENDIF - .AvanceDelProceso( C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) + .AvanceDelProceso( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) lnCodError = .Convertir( lcFile, @toModulo, @toEx, .T., tcOriginalFileName ) ENDFOR - .AvanceDelProceso( C_END_OF_PROCESS_LOC, lnFileCount, lnFileCount, 0 ) + .AvanceDelProceso( loLang.C_END_OF_PROCESS_LOC, lnFileCount, lnFileCount, 0 ) OTHERWISE @@ -2053,7 +2011,7 @@ 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 ) @@ -2095,7 +2053,7 @@ 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 ) @@ -2131,7 +2089,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ERASE ( .c_LogFile ) lnCodError = .Convertir( tc_InputFile, toModulo, toEx, .T., tcOriginalFileName ) - .AvanceDelProceso( C_END_OF_PROCESS_LOC, 1, 1, 0 ) + .AvanceDelProceso( loLang.C_END_OF_PROCESS_LOC, 1, 1, 0 ) ENDIF ENDIF ENDCASE @@ -2148,29 +2106,16 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM THIS.l_ShowErrors = .F. && La opción "INTERACTIVE" muestra su propio mensaje ENDIF - lcErrorInfo = THIS.Exception2Str(toEx) + CR_LF + CR_LF + 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( lcErrorInfo ) - THIS.writeErrorLog( ) - - *-- Escribo la información de error en el archivo log de errores - TRY - STRTOFILE( STRCONV(lcErrorInfo,9), EVL(tc_InputFile,'foxbin2prg') + '.ERR' ) - CATCH TO loEx - 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 @@ -2188,17 +2133,17 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM DO CASE CASE lnCodError = 1799 && Conversion Cancelled - MESSAGEBOX( 'Conversion Cancelled by User!', 0+48+4096, 'FoxBin2Prg', 60000 ) + MESSAGEBOX( loLang.C_CONVERSION_CANCELLED_BY_USER + '!', 0+48+4096, 'FoxBin2Prg', 60000 ) STRTOFILE( THIS.c_ErrorLog, lcErrorFile ) loWSH.Run( lcErrorFile, 1, .F. ) - CASE lnCodError > 0 - MESSAGEBOX( C_END_OF_PROCESS_LOC + '! (with errors)', 0+48+4096, 'FoxBin2Prg', 60000 ) + CASE THIS.l_Error + MESSAGEBOX( loLang.C_END_OF_PROCESS_LOC + '! (' + loLang.C_WITH_ERRORS + ')', 0+48+4096, 'FoxBin2Prg', 60000 ) STRTOFILE( THIS.c_ErrorLog, lcErrorFile ) loWSH.Run( lcErrorFile, 1, .F. ) OTHERWISE - MESSAGEBOX( C_END_OF_PROCESS_LOC, 0+64+4096, 'FoxBin2Prg', 60000 ) + MESSAGEBOX( loLang.C_END_OF_PROCESS_LOC, 0+64+4096, 'FoxBin2Prg', 60000 ) ENDCASE ENDIF @@ -2214,6 +2159,29 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC + 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' ) + '.ERR' ) + CATCH + ENDTRY + + RETURN + ENDPROC + + PROCEDURE Convertir *-------------------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) @@ -2229,16 +2197,18 @@ 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' ; , 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 ) 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) ) ) @@ -2267,7 +2237,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .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) ) @@ -2276,7 +2246,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM 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' ) @@ -2284,7 +2254,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' ) @@ -2292,7 +2262,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' ) @@ -2300,7 +2270,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' ) @@ -2308,7 +2278,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' ) @@ -2316,7 +2286,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' ) @@ -2324,7 +2294,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' ) @@ -2332,7 +2302,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' ) @@ -2340,7 +2310,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' ) @@ -2348,7 +2318,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' ) @@ -2357,7 +2327,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' ) @@ -2366,7 +2336,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' ) @@ -2375,7 +2345,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' ) @@ -2384,7 +2354,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' ) @@ -2393,7 +2363,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' ) @@ -2403,7 +2373,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' ) @@ -2413,7 +2383,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' ) @@ -2422,7 +2392,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 @@ -2480,7 +2450,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .o_Conversor.c_OriginalFileName = .c_OriginalFileName .o_Conversor.c_Foxbin2prg_FullPath = .c_Foxbin2prg_FullPath *-- - .AvanceDelProceso( C_PROCESSING_LOC + ' ' + .c_InputFile + '...', 0, 0, 0 ) + .AvanceDelProceso( loLang.C_PROCESSING_LOC + ' ' + .c_InputFile + '...', 0, 0, 0 ) IF AEVENTS( laEvents, .o_Conversor ) = 0 THEN BINDEVENT( .o_Conversor, 'AvanceDelProceso', THIS, 'AvanceDelProceso' ) @@ -2491,7 +2461,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM 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 @@ -2500,7 +2470,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 @@ -2605,9 +2575,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 @@ -2626,7 +2598,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) @@ -2635,7 +2607,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 @@ -2704,17 +2676,19 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM LPARAMETERS tcDir, taFiles, lnFileCount EXTERNAL ARRAY taFiles - LOCAL laFiles(1), I, lnFiles + 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) - THIS.AvanceDelProceso( C_SCANNING_FILE_AND_DIR_INFO + ' ' + tcDir + '...', 0, 0, 0 ) + loLang = _SCREEN.o_FoxBin2Prg_Lang + THIS.AvanceDelProceso( loLang.C_SCANNING_FILE_AND_DIR_INFO + ' ' + tcDir + '...', 0, 0, 0 ) lnFiles = ADIR( laFiles, tcDir + '*.*', 'D', 1) *-- Busco los archivos @@ -2742,9 +2716,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM 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' ) @@ -2851,13 +2827,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 = [] ; @@ -2934,7 +2909,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, ; @@ -2955,7 +2930,7 @@ DEFINE CLASS frm_avance AS FORM ENDIF DOEVENTS ENDIF - + DO CASE CASE tnTipo = 0 IF NOT EMPTY(tcTexto) THEN @@ -2963,8 +2938,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 @@ -2973,8 +2948,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 @@ -2983,8 +2958,8 @@ DEFINE CLASS frm_avance AS FORM ENDIF IF tnTotal > 0 THEN - .nmax_value2 = tnTotal - .nvalue2 = tnValor + .nMax_value2 = tnTotal + .nValue2 = tnValor ENDIF ENDCASE @@ -2994,33 +2969,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 @@ -3147,9 +3125,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 @@ -3341,9 +3321,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 @@ -3681,6 +3663,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 @@ -3689,7 +3673,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 @@ -3831,6 +3815,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 @@ -3908,7 +3894,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 @@ -3923,7 +3909,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 @@ -4075,6 +4061,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,'')) @@ -4083,7 +4071,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 @@ -5549,6 +5537,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 @@ -5575,12 +5565,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 @@ -5873,6 +5863,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 ) ) ) @@ -5986,7 +5978,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 ) @@ -6683,17 +6675,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)) 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)) *CASE toModulo._ExternalClasses_Count <> toModulo._Clases_Count THEN ENDCASE @@ -6710,7 +6704,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)) ENDIF toModulo._Clases(lnItem)._Checked = .T. @@ -8280,6 +8274,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 @@ -8306,7 +8302,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) @@ -9805,6 +9801,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 @@ -9823,7 +9821,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 @@ -11128,12 +11126,14 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base #ENDIF LOCAL llFileExists + 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 @@ -11143,7 +11143,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base IF STRTOFILE( tcCodigo, tcOutputFile ) = 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 @@ -11842,7 +11842,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' @@ -12132,7 +12133,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 @@ -12181,7 +12182,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') @@ -12509,7 +12511,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 @@ -12559,6 +12561,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 @@ -12570,7 +12574,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 @@ -12725,6 +12729,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') @@ -12782,12 +12788,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 @@ -12825,7 +12831,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 ; @@ -12960,6 +12966,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' @@ -12971,7 +12979,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 @@ -14451,6 +14459,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 @@ -14469,7 +14479,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 @@ -21404,3 +21414,241 @@ DEFINE CLASS CL_CFG AS CUSTOM ENDDEFINE +DEFINE CLASS CL_LANG AS Custom + *-- 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 = "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 = "El conteo de clases externas (<>) no coincide con la cantidad encontrada (<>) para el archivo [<>]" + C_EXTERNAL_CLASS_NAME_DOES_NOT_FOUND = "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_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_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 = "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 = "con errores" + + + PROCEDURE INIT + WITH THIS AS CL_LANG OF 'FOXBIN2PRG.PRG' + DO CASE + CASE VERSION(3) == '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 = "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 = "External class count (<>) does not match found classes (<>) for file [<>]" + .C_EXTERNAL_CLASS_NAME_DOES_NOT_FOUND = "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_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_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 = "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 = "with errors" + + CASE VERSION(3) == '49' && 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 = "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_EXTENSION_RECONFIGURATION_LOC = "Erweiterungsneukonfiguration:" + .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 >>]" + .C_EXTERNAL_CLASS_NAME_DOES_NOT_FOUND = "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_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 = "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 = "mit Fehlern" + + CASE VERSION(3) == '33' && French (Francé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 = "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 = "External class count (<>) does not match found classes (<>) for file [<>]" + .C_EXTERNAL_CLASS_NAME_DOES_NOT_FOUND = "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_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_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 = "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 = "with errors" + + ENDCASE + ENDWITH && THIS AS CL_LANG OF 'FOXBIN2PRG.PRG' + ENDPROC + +ENDDEFINE diff --git a/foxbin2prg_de.h b/foxbin2prg_de.h index bd64c1e..eb394fd 100644 --- a/foxbin2prg_de.h +++ b/foxbin2prg_de.h @@ -8,6 +8,7 @@ #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 "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 <>" @@ -51,3 +52,4 @@ #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 "mit Fehlern" diff --git a/foxbin2prg_en.h b/foxbin2prg_en.h index 6291a26..b5194a7 100644 --- a/foxbin2prg_en.h +++ b/foxbin2prg_en.h @@ -8,6 +8,7 @@ #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 "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 <>" @@ -51,3 +52,4 @@ #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 "with errors" From 8a960021a56e6fe529fe68191bafe10f16ec190a Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 6 Dec 2014 00:54:26 +0100 Subject: [PATCH 04/20] =?UTF-8?q?Changeset:=20545=20fdbozzo=20-=2006/12/20?= =?UTF-8?q?14=2000:27:40:=20-=20Agregada=20traducci=C3=B3n=20al=20franc?= =?UTF-8?q?=C3=A9s=20(de=20Google=20Translate)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 104 +++++++++++++++++++++++++------------------------ 1 file changed, 54 insertions(+), 50 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 8814565..36b1192 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -21474,9 +21474,13 @@ DEFINE CLASS CL_LANG AS Custom PROCEDURE INIT + LPARAMETERS tcLanguage + + tcLanguage = EVL(tcLanguage, VERSION(3)) + WITH THIS AS CL_LANG OF 'FOXBIN2PRG.PRG' DO CASE - CASE VERSION(3) == '00' && English (Inglés) + CASE tcLanguage == '00' && English (Inglés) *------------------------------------------------------------------------------------------------------------------------------------------- *-- NOTE: MUST USE DOUBLE QUOTES, OR SYNTAX ERRORS HAPPEN WHEN COMPILING. STRANGE :( *------------------------------------------------------------------------------------------------------------------------------------------- @@ -21533,7 +21537,7 @@ DEFINE CLASS CL_LANG AS Custom .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 = "with errors" - CASE VERSION(3) == '49' && German (Alemán) + CASE tcLanguage == '49' && German (Alemán) *------------------------------------------------------------------------------------------------------------------------------------------- *-- NOTE: ES MÜSSEN ANFÜHRUNGSZEICHEN BENUTZT WERDEN, ODER SYNTAX ERRORS PASSIEREN BEIM COMPILE. SELTSAM :( *------------------------------------------------------------------------------------------------------------------------------------------- @@ -21590,62 +21594,62 @@ DEFINE CLASS CL_LANG AS Custom .C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC = "WARNUNG!!" + CR_LF+ "SICHERSTELLEN DAS KEIN TABELLENALIAS IN DEM INDEXAUSDRUCK BENUTZT WIRD!! (z.B.: index on <>.campo tag keyname)" .C_WITH_ERRORS = "mit Fehlern" - CASE VERSION(3) == '33' && French (Francés) + CASE tcLanguage == '33' && French (Francé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 = "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_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 = "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 = "External class count (<>) does not match found classes (<>) for file [<>]" - .C_EXTERNAL_CLASS_NAME_DOES_NOT_FOUND = "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_FOXBIN2PRG_ERROR_CAPTION_LOC = "FOXBIN2PRG: ERROR!!" + .C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES = "Nombre de classe externe (<>) ne correspond pas classes trouvées (<>) pour le fichier [<>]" + .C_EXTERNAL_CLASS_NAME_DOES_NOT_FOUND = "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_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 ; - + "Example of generating TXT from all VCX in 'c:\development\classes', without showing error window and generating LOG file: " + 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 ; - + "Example of generating TXT from all VCX is 'c:\development\classes', without showing error window and without LOG file: " + 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 is only for Visual FoxPro 9.0!" - .C_FOXBIN2PRG_WARN_CAPTION_LOC = "FOXBIN2PRG: WARNING!" - .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 = "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 = "with errors" + .C_FOXBIN2PRG_JUST_VFP_9_LOC = "FOXBIN2PRG est seulement pour Visual FoxPro 9.0!" + .C_FOXBIN2PRG_WARN_CAPTION_LOC = "FOXBIN2PRG: AVERTISSEMENT!" + .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 [<< THIS.c_OutputFile >>] 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 [<< THIS.c_OutputFile >>] 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 = "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 = "avec des erreurs" ENDCASE ENDWITH && THIS AS CL_LANG OF 'FOXBIN2PRG.PRG' From fd4284f9c09cd856eb9332559a79729aea5f82af Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 6 Dec 2014 01:09:09 +0100 Subject: [PATCH 05/20] =?UTF-8?q?Changeset:=20546=20fdbozzo=20-=2006/12/20?= =?UTF-8?q?14=2000:54:26:=20-=20Nuevo:=20Selecci=C3=B3n=20autom=C3=A1tica?= =?UTF-8?q?=20de=20lenguaje=20/=20Nuevo=20m=C3=A9todo=20ChangeLanguage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 36b1192..7d2a0ff 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -118,6 +118,7 @@ * 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. * * *--------------------------------------------------------------------------------------------------- @@ -478,6 +479,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -633,7 +635,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ON ESCAPE ERROR 1799 SET ESCAPE ON - _SCREEN.AddProperty( "o_FoxBin2Prg_Lang", CREATEOBJECT("CL_LANG") ) + THIS.ChangeLanguage() lcSys16 = SYS(16) IF LEFT(lcSys16,10) == 'PROCEDURE ' @@ -642,9 +644,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM lnPosProg = 1 ENDIF + *-- 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 + *-- THIS.c_Foxbin2prg_FullPath = SUBSTR( lcSys16, lnPosProg ) THIS.c_Foxbin2prg_ConfigFile = FORCEEXT( THIS.c_Foxbin2prg_FullPath, 'CFG' ) THIS.c_CurDir = SYS(5) + CURDIR() @@ -1660,6 +1664,16 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDFUNC + 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 + + PROCEDURE Get_Ext2FromExt LPARAMETERS tcExt LOCAL lcExt2 From 0e1a0717453d0792116630ef630d140a30a566e9 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 6 Dec 2014 03:06:16 +0100 Subject: [PATCH 06/20] =?UTF-8?q?Changeset:=20547=20fdbozzo=20-=2006/12/20?= =?UTF-8?q?14=2001:09:10:=20-=20Mejora=20en=20selecci=C3=B3n=20autom=C3=A1?= =?UTF-8?q?tica=20de=20lenguaje,=20selecci=C3=B3n=20manual=20y=20selecci?= =?UTF-8?q?=C3=B3n=20mediante=20lectura=20de=20foxbin2prg.h?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 544 +++++++++++++++++++++++++++--------------------- foxbin2prg_de.h | 11 +- foxbin2prg_en.h | 11 +- 3 files changed, 318 insertions(+), 248 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 7d2a0ff..56262d4 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -704,6 +704,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 @@ -1664,16 +1674,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDFUNC - 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 - - PROCEDURE Get_Ext2FromExt LPARAMETERS tcExt LOCAL lcExt2 @@ -2147,12 +2147,12 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM DO CASE CASE lnCodError = 1799 && Conversion Cancelled - MESSAGEBOX( loLang.C_CONVERSION_CANCELLED_BY_USER + '!', 0+48+4096, 'FoxBin2Prg', 60000 ) + MESSAGEBOX( loLang.C_CONVERSION_CANCELLED_BY_USER_LOC + '!', 0+48+4096, 'FoxBin2Prg', 60000 ) STRTOFILE( THIS.c_ErrorLog, lcErrorFile ) loWSH.Run( lcErrorFile, 1, .F. ) CASE THIS.l_Error - MESSAGEBOX( loLang.C_END_OF_PROCESS_LOC + '! (' + loLang.C_WITH_ERRORS + ')', 0+48+4096, 'FoxBin2Prg', 60000 ) + MESSAGEBOX( loLang.C_END_OF_PROCESS_LOC + '! (' + loLang.C_WITH_ERRORS_LOC + ')', 0+48+4096, 'FoxBin2Prg', 60000 ) STRTOFILE( THIS.c_ErrorLog, lcErrorFile ) loWSH.Run( lcErrorFile, 1, .F. ) @@ -2702,7 +2702,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM IF DIRECTORY(tcDir) loLang = _SCREEN.o_FoxBin2Prg_Lang - THIS.AvanceDelProceso( loLang.C_SCANNING_FILE_AND_DIR_INFO + ' ' + tcDir + '...', 0, 0, 0 ) + THIS.AvanceDelProceso( loLang.C_SCANNING_FILE_AND_DIR_INFO_LOC + ' ' + tcDir + '...', 0, 0, 0 ) lnFiles = ADIR( laFiles, tcDir + '*.*', 'D', 1) *-- Busco los archivos @@ -6697,11 +6697,11 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base 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(loLang.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(loLang.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 @@ -6718,7 +6718,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(loLang.C_EXTERNAL_CLASS_NAME_DOES_NOT_FOUND)) + ERROR (TEXTMERGE(loLang.C_EXTERNAL_CLASS_NAME_DOES_NOT_FOUND_LOC)) ENDIF toModulo._Clases(lnItem)._Checked = .T. @@ -21429,244 +21429,312 @@ 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) + *-- 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 = "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 = "El conteo de clases externas (<>) no coincide con la cantidad encontrada (<>) para el archivo [<>]" - C_EXTERNAL_CLASS_NAME_DOES_NOT_FOUND = "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_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 ; + 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_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_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 = "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 = "con errores" + C_FOXBIN2PRG_JUST_VFP_9_LOC = "¡FOXBIN2PRG es solo para Visual FoxPro 9.0!" + C_FOXBIN2PRG_WARN_CAPTION_LOC = "FOXBIN2PRG: ¡ATENCIÓN!" + 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" PROCEDURE INIT LPARAMETERS tcLanguage - - tcLanguage = EVL(tcLanguage, VERSION(3)) - WITH THIS AS CL_LANG OF 'FOXBIN2PRG.PRG' - DO CASE - 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 = "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 = "External class count (<>) does not match found classes (<>) for file [<>]" - .C_EXTERNAL_CLASS_NAME_DOES_NOT_FOUND = "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_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_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 = "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 = "with errors" + TRY + LOCAL lcSys16, lnPosProg, lc_Foxbin2prg_FullPath, lc_Foxbin2prg_LangFile, laDir(1,5) ; + , llLangFileExists, lcLangStr ; + , loEx as Exception - CASE tcLanguage == '49' && 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 = "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_EXTENSION_RECONFIGURATION_LOC = "Erweiterungsneukonfiguration:" - .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 >>]" - .C_EXTERNAL_CLASS_NAME_DOES_NOT_FOUND = "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_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 = "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 = "mit Fehlern" + WITH THIS AS CL_LANG OF 'FOXBIN2PRG.PRG' + *-- El lenguaje pasado por parámetro prevalece sobre el existente. + tcLanguage = EVL(tcLanguage,'') - CASE tcLanguage == '33' && 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 = "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 = "Nombre de classe externe (<>) ne correspond pas classes trouvées (<>) pour le fichier [<>]" - .C_EXTERNAL_CLASS_NAME_DOES_NOT_FOUND = "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_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_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 [<< THIS.c_OutputFile >>] 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 [<< THIS.c_OutputFile >>] 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 = "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 = "avec des erreurs" + 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 - ENDCASE - ENDWITH && THIS AS CL_LANG OF 'FOXBIN2PRG.PRG' + 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. + tcLanguage = VERSION(3) + .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 + + DO CASE + CASE llLangFileExists + *-- Ya se cargó + .n_LanguageSelectedMethod = 2 && 2=Loaded from foxbin2prg.h + + 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_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_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" + + CASE tcLanguage == '49' && 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_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_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" + + CASE tcLanguage == '33' && 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_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_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 [<< THIS.c_OutputFile >>] 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 [<< THIS.c_OutputFile >>] 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" + + 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 eb394fd..f833e10 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,7 +9,7 @@ #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 "Konvertierung durch den Benutzer abgebrochen" +#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 <>" @@ -21,8 +22,8 @@ #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 ; @@ -46,10 +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 "Scannen Datei- und Verzeichnisinformationen für" +#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 "mit Fehlern" +#DEFINE C_WITH_ERRORS_LOC "mit Fehlern" diff --git a/foxbin2prg_en.h b/foxbin2prg_en.h index b5194a7..1730c6e 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,7 +9,7 @@ #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 "Conversion Cancelled by the user" +#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 <>" @@ -17,8 +18,8 @@ #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" @@ -46,10 +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 "Scanning file and directory information for" +#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 "with errors" +#DEFINE C_WITH_ERRORS_LOC "with errors" From 0c27522cf333718a27693652d33d9f83fcdb9b85 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 6 Dec 2014 03:33:12 +0100 Subject: [PATCH 07/20] =?UTF-8?q?Changeset:=20549=20fdbozzo=20-=2006/12/20?= =?UTF-8?q?14=2003:12:00:=20-=20Cambiado=20a=20Ingl=C3=A9s=20por=20defecto?= =?UTF-8?q?=20si=20no=20se=20reconoce=20ning=C3=BAn=20lenguaje,=20ya=20que?= =?UTF-8?q?=20es=20m=C3=A1s=20Internacional?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 340 +++++++++++++++++++++++++------------------------ 1 file changed, 171 insertions(+), 169 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 56262d4..2a7c363 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -21439,62 +21439,63 @@ DEFINE CLASS CL_LANG AS Custom n_LanguageSelectedMethod = 0 && 0=Automatic by version(3) - *-- Spanish (Español) + *CASE tcLanguage == '00' && English (Inglés) *------------------------------------------------------------------------------------------------------------------------------------------- - *-- NOTA: SE DEBEN USAR COMILLAS DOBLES, O ERRORES DE SINTAXIS OCURREN AL COMPILAR. EXTRAÑO :( + *-- NOTE: MUST USE DOUBLE QUOTES, OR SYNTAX ERRORS HAPPEN WHEN COMPILING. STRANGE :( *------------------------------------------------------------------------------------------------------------------------------------------- - 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_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_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" + 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_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_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 @@ -21544,7 +21545,6 @@ DEFINE CLASS CL_LANG AS Custom *-- El archivo es antiguo o tiene errores TRY llLangFileExists = .F. - tcLanguage = VERSION(3) .n_LanguageSelectedMethod = 0 && 0=Automatic with VERSION(3) RENAME (lc_Foxbin2prg_LangFile) TO (FORCEEXT(lc_Foxbin2prg_LangFile, 'invalid')) CATCH && No quiero errores por RENAME @@ -21552,126 +21552,14 @@ DEFINE CLASS CL_LANG AS Custom ENDTRY ENDIF + + tcLanguage = EVL(tcLanguage, VERSION(3)) DO CASE CASE llLangFileExists *-- Ya se cargó .n_LanguageSelectedMethod = 2 && 2=Loaded from foxbin2prg.h - 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_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_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" - - CASE tcLanguage == '49' && 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_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_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" - CASE tcLanguage == '33' && French (Francés) *------------------------------------------------------------------------------------------------------------------------------------------- *-- NOTE: MUST USE DOUBLE QUOTES, OR SYNTAX ERRORS HAPPEN WHEN COMPILING. STRANGE :( @@ -21729,6 +21617,120 @@ DEFINE CLASS CL_LANG AS Custom .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 tcLanguage == '34' && 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_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_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 tcLanguage == '49' && 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_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_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) From 8be9181ff0f6cbfa2c81bb44fd62fd328f034ae0 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 6 Dec 2014 04:18:07 +0100 Subject: [PATCH 08/20] =?UTF-8?q?Changeset:=20550=20fdbozzo=20-=2006/12/20?= =?UTF-8?q?14=2003:33:12:=20-=20Agregada=20parametrizaci=C3=B3n=20del=20le?= =?UTF-8?q?nguaje=20en=20foxbin2prg.cfg?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.cfg | 11 ++++++----- foxbin2prg.prg | 53 ++++++++++++++++++++++++++++++++------------------ 2 files changed, 40 insertions(+), 24 deletions(-) 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.prg b/foxbin2prg.prg index 2a7c363..581dff5 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -550,7 +550,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- n_FB2PRG_Version = 1.19 *-- - c_Language = 'ES' + c_Language = '' && EN, FR, ES, DE c_loc_processing_file = '' c_loc_process_progress = '' c_FB2PRG_EXE_Version = 0 @@ -1411,6 +1411,13 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .writeLog( JUSTFNAME(lcConfigFile) + ' > DropNullCharsFromCode: ' + TRANSFORM(lcValue) ) ENDIF + CASE LEFT( laConfig(I), 9 ) == LOWER('Language:') + lcValue = ALLTRIM( SUBSTR( laConfig(I), 10 ) ) + IF .T. + .ChangeLanguage(lcValue) + .writeLog( 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 @@ -1529,6 +1536,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .writeLog( '> l_OptimizeByFilestamp: ' + TRANSFORM(.l_OptimizeByFilestamp) ) .writeLog( '> l_DropNullCharsFromCode: ' + TRANSFORM(.l_DropNullCharsFromCode) ) .writeLog( '> l_ClearDBFLastUpdate: ' + TRANSFORM(.l_ClearDBFLastUpdate) ) + .writeLog( '> c_Language: ' + TRANSFORM(.c_Language) ) lo_CFG = NULL RELEASE lo_CFG @@ -2173,7 +2181,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC - PROCEDURE ejecutar_WriteErrorLog + HIDDEN PROCEDURE ejecutar_WriteErrorLog LPARAMETERS toEx, tcErrorInfo LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' @@ -11139,7 +11147,7 @@ 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 @@ -11155,7 +11163,10 @@ 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( 'Generated file size: ' + TRANSFORM(lnBytes/1024) + ' KiB' ) + + IF lnBytes = 0 *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' ERROR (TEXTMERGE(loLang.C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) ENDIF @@ -21445,23 +21456,23 @@ DEFINE CLASS CL_LANG AS Custom *------------------------------------------------------------------------------------------------------------------------------------------- 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_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_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_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_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_FOXBIN2PRG_ERROR_CAPTION_LOC = "FOXBIN2PRG: ERROR!!" @@ -21471,23 +21482,24 @@ DEFINE CLASS CL_LANG AS Custom + " 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_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_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_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 <>" @@ -21560,7 +21572,7 @@ DEFINE CLASS CL_LANG AS Custom *-- Ya se cargó .n_LanguageSelectedMethod = 2 && 2=Loaded from foxbin2prg.h - CASE tcLanguage == '33' && French (Francés) + CASE INLIST(tcLanguage, '33', 'FR') && French (Francés) *------------------------------------------------------------------------------------------------------------------------------------------- *-- NOTE: MUST USE DOUBLE QUOTES, OR SYNTAX ERRORS HAPPEN WHEN COMPILING. STRANGE :( *------------------------------------------------------------------------------------------------------------------------------------------- @@ -21594,6 +21606,7 @@ DEFINE CLASS CL_LANG AS Custom + " 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é" @@ -21617,7 +21630,7 @@ DEFINE CLASS CL_LANG AS Custom .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 tcLanguage == '34' && Spanish (Español) + CASE INLIST(tcLanguage, '34', 'ES') && Spanish (Español) *------------------------------------------------------------------------------------------------------------------------------------------- *-- NOTA: SE DEBEN USAR COMILLAS DOBLES, O ERRORES DE SINTAXIS OCURREN AL COMPILAR. EXTRAÑO :( *------------------------------------------------------------------------------------------------------------------------------------------- @@ -21651,6 +21664,7 @@ DEFINE CLASS CL_LANG AS Custom + " 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 [<>]" @@ -21674,7 +21688,7 @@ DEFINE CLASS CL_LANG AS Custom .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 tcLanguage == '49' && German (Alemán) + CASE INLIST(tcLanguage, '49', 'DE') && German (Alemán) *------------------------------------------------------------------------------------------------------------------------------------------- *-- NOTE: ES MÜSSEN ANFÜHRUNGSZEICHEN BENUTZT WERDEN, ODER SYNTAX ERRORS PASSIEREN BEIM COMPILE. SELTSAM :( *------------------------------------------------------------------------------------------------------------------------------------------- @@ -21708,6 +21722,7 @@ DEFINE CLASS CL_LANG AS Custom + " 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" From 55be7ed7d2375e39bae90d8548f5b0cb7ca28d56 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 7 Dec 2014 03:33:54 +0100 Subject: [PATCH 09/20] =?UTF-8?q?Changeset:=20551=20fdbozzo=20-=2006/12/20?= =?UTF-8?q?14=2004:18:07:=20-=20Varias=20mejoras=20en=20el=20LOG=20-=20Var?= =?UTF-8?q?ias=20mejoras=20en=20el=20manejo=20de=20la=20configuraci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 300 +++++++++++++++++++++++++++--------------------- foxbin2prg_de.h | 2 +- foxbin2prg_en.h | 2 +- 3 files changed, 171 insertions(+), 133 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 581dff5..f8e7629 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -635,6 +635,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ON ESCAPE ERROR 1799 SET ESCAPE ON + THIS.writeLog( REPLICATE( '*', 100 ) ) + THIS.writeLog( 'FoxBin2Prg INIT' ) + THIS.writeLog( REPLICATE( '*', 100 ) ) THIS.ChangeLanguage() lcSys16 = SYS(16) @@ -644,11 +647,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM lnPosProg = 1 ENDIF - *-- 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 - *-- THIS.c_Foxbin2prg_FullPath = SUBSTR( lcSys16, lnPosProg ) THIS.c_Foxbin2prg_ConfigFile = FORCEEXT( THIS.c_Foxbin2prg_FullPath, 'CFG' ) THIS.c_CurDir = SYS(5) + CURDIR() @@ -658,6 +656,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM 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 @@ -670,6 +670,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 @@ -1251,7 +1254,7 @@ 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' ; @@ -1266,10 +1269,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM tc_InputFile = EVL(tc_InputFile, .c_InputFile) .c_InputFile = tc_InputFile - IF .l_AllowMultiConfig AND .l_Main_CFG_Loaded - IF EMPTY(tc_InputFile) - ERROR loLang.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 @@ -1279,26 +1282,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( loLang.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 ) @@ -1315,14 +1339,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) + ' > ' + loLang.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:') @@ -1331,233 +1355,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( JUSTFNAME(lcConfigFile) + ' > Language: ' + TRANSFORM(lcValue) + ' (' + .c_Language + ')' ) + .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) ) - .writeLog( '> c_Language: ' + TRANSFORM(.c_Language) ) - - 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) + ' (' + EVL(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 @@ -1572,7 +1601,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 @@ -1781,7 +1810,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM , tcBackupLevels, tcClearUniqueID, tcOptimizeByFilestamp TRY - LOCAL I, lcPath, lnCodError, lcFileSpec, lcFile, laFiles(1,5) ; + LOCAL I, lcPath, lnCodError, lcFileSpec, lcFile, laFiles(1,5), laDirInfo(1,5) ; , lnFileCount, lcErrorInfo, lcErrorFile ; , loEx AS EXCEPTION ; , loFSO AS Scripting.FileSystemObject ; @@ -1790,56 +1819,62 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' lnCodError = 0 - loLang = _SCREEN.o_FoxBin2Prg_Lang - - .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 ) - - IF _VFP.STARTMODE > 0 - SET ESCAPE OFF - ENDIF - loFSO = .o_FSO loWSH = .o_WSH + + 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 + tcRecompile = EVL(tcRecompile,'1') 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( loLang.C_FOXBIN2PRG_JUST_VFP_9_LOC, 0+64+4096, loLang.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( loLang.C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC, 0+64+4096, loLang.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 @@ -1918,7 +1953,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM DO CASE CASE lnCodError = 1799 && Conversion Cancelled - THROW + ERROR 1799 CASE lnCodError > 0 .l_Error = .T. @@ -2166,6 +2201,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM OTHERWISE MESSAGEBOX( loLang.C_END_OF_PROCESS_LOC, 0+64+4096, 'FoxBin2Prg', 60000 ) + STRTOFILE( THIS.c_ErrorLog, lcErrorFile ) ENDCASE ENDIF @@ -2227,6 +2263,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM loFSO = .o_FSO loLang = _SCREEN.o_FoxBin2Prg_Lang .c_InputFile = FULLPATH( tc_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 + ']' @@ -2255,7 +2294,8 @@ 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) @@ -2510,10 +2550,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM loFSO = NULL THIS.o_Conversor = NULL - IF lnCodError = 0 OR NOT THIS.l_ShowErrors THEN - THIS.writeLog( REPLICATE('-',80) ) - *THIS.writeLog_Flush() - ENDIF + *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 ; @@ -11164,7 +11203,8 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDIF lnBytes = STRTOFILE( tcCodigo, tcOutputFile ) - THIS.writeLog( 'Generated file size: ' + TRANSFORM(lnBytes/1024) + ' KiB' ) + THIS.writeLog( C_FILENAME_LOC + ': ' + tcOutputFile ) + THIS.writeLog( '- ' + loLang.C_GENERATED_FILE_SIZE_LOC + ': ' + TRANSFORM(lnBytes/1024,'######.##') + ' / ' + TRANSFORM(LEN(tcCodigo)/1024,'######.##') + ' KiB' ) IF lnBytes = 0 *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' @@ -21358,7 +21398,6 @@ DEFINE CLASS CL_CFG AS CUSTOM + [] ; + [] ; + [] ; - + [] ; + [] ; + [] ; + [] ; @@ -21370,16 +21409,11 @@ DEFINE CLASS CL_CFG AS CUSTOM + [] ; + [] ; + [] ; - + [] ; + [] ; - + [] ; + [] ; + [] ; - + [] ; + [] ; + [] ; - + [] ; - + [] ; + [] ; + [] ; + [] ; @@ -21475,6 +21509,7 @@ DEFINE CLASS CL_LANG AS Custom 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 ; @@ -21491,7 +21526,7 @@ DEFINE CLASS CL_LANG AS Custom C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC = "* Names capitalization program [<>] not found" C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC = "Object [<>] does not contain oReg object (level <>)" C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC = "Operation not recognized. Only SETNAME and GETNAME allowed." - C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC = "Optimization: Output file [<>] was not overwritten because it is the same as was generated." + 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:<>]" @@ -21565,7 +21600,7 @@ DEFINE CLASS CL_LANG AS Custom ENDTRY ENDIF - tcLanguage = EVL(tcLanguage, VERSION(3)) + tcLanguage = UPPER( EVL(tcLanguage, VERSION(3)) ) DO CASE CASE llLangFileExists @@ -21597,6 +21632,7 @@ DEFINE CLASS CL_LANG AS Custom .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 ; @@ -21613,8 +21649,8 @@ DEFINE CLASS CL_LANG AS Custom .C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC = "* Programme des noms de capitalisation [<>] introuvables" .C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC = "Object [<>] ne contient pas l'objet oReg (niveau <>)" .C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC = "Opération non reconnu. Seulement SETNAME et GETNAME permis." - .C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC = "Optimisation: fichier de sortie [<< THIS.c_OutputFile >>] 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 [<< THIS.c_OutputFile >>] n'a pas été régénéré car il est plus récent que le fichier d'entrée." + .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" @@ -21655,6 +21691,7 @@ DEFINE CLASS CL_LANG AS Custom .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 ; @@ -21671,7 +21708,7 @@ DEFINE CLASS CL_LANG AS Custom .C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC = "* No se ha encontrado el programa de capitalización de nombres [<>]" .C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC = "Objeto [<>] no contiene el objeto oReg (nivel <>)" .C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC = "Operación no reconocida. Solo re reconoce SETNAME y GETNAME." - .C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC = "Optimización: El archivo de salida [<>] no se sobreescribe por ser igual al generado." + .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:<>]" @@ -21710,6 +21747,7 @@ DEFINE CLASS CL_LANG AS Custom .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" @@ -21729,7 +21767,7 @@ DEFINE CLASS CL_LANG AS Custom .C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC = "* Programm für Großschreibungssetzung [<>] nicht gefunden" .C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC = "Objekt [<>] enthält nicht 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_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:<>]" diff --git a/foxbin2prg_de.h b/foxbin2prg_de.h index f833e10..aeb3074 100644 --- a/foxbin2prg_de.h +++ b/foxbin2prg_de.h @@ -39,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" diff --git a/foxbin2prg_en.h b/foxbin2prg_en.h index 1730c6e..aa46af2 100644 --- a/foxbin2prg_en.h +++ b/foxbin2prg_en.h @@ -39,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" From e65ee4e919b82081d087988aab0ae1fe48cba482 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 7 Dec 2014 23:56:34 +0100 Subject: [PATCH 10/20] =?UTF-8?q?Changeset:=20552=20fdbozzo=20-=2007/12/20?= =?UTF-8?q?14=2003:33:54:=20-=20Optimizaci=C3=B3n=20para=20no=20reprocesar?= =?UTF-8?q?=20innecesariamente=20archivos=20cuando=20se=20usa=20UseClassPe?= =?UTF-8?q?rFile:1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 156 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 108 insertions(+), 48 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index f8e7629..c8bc00a 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -448,6 +448,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM LOCAL THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF _MEMBERDATA = [] ; + + [] ; + [] ; + [] ; + [] ; @@ -461,6 +462,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -515,6 +517,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -546,6 +549,7 @@ 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 @@ -562,6 +566,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM c_LogFile = '' c_TextLog = '' c_OutputFile = '' + c_Recompile = '1' c_Type = '' t_InputFile_TimeStamp = {//::} t_OutputFile_TimeStamp = {//::} @@ -594,6 +599,7 @@ 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 @@ -754,15 +760,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 @@ -1264,7 +1261,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' STORE 0 TO lnKey loLang = _SCREEN.o_FoxBin2Prg_Lang - tcRecompile = EVL(tcRecompile,'1') + tcRecompile = EVL(tcRecompile,.c_Recompile) lcConfigFile = .c_Foxbin2prg_ConfigFile tc_InputFile = EVL(tc_InputFile, .c_InputFile) .c_InputFile = tc_InputFile @@ -1296,7 +1293,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM 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 @@ -1555,7 +1552,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + ' ( 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) + ' (' + EVL(tcRecompile,'') + ')' ) + .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) ) @@ -1579,7 +1576,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *ENDIF *.writeLog( '> l_CFG_CachedAccess: ' + TRANSFORM(.l_CFG_CachedAccess) ; - + ' ( InputFile=' + EVL(tc_InputFile,'(no)') + ', CFG=' + EVL(lo_CFG.c_Foxbin2prg_ConfigFile, '(Internal defaults)') + ' )' ) + + ' ( 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. @@ -1818,10 +1815,12 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM , loWSH AS WScript.Shell WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' - lnCodError = 0 - loFSO = .o_FSO - loWSH = .o_WSH - + lnCodError = 0 + loFSO = .o_FSO + loWSH = .o_WSH + DIMENSION .a_ProcessedFiles(1) + .n_ProcessedFiles = 0 + 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 @@ -1831,6 +1830,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF tcRecompile = EVL(tcRecompile,'1') + .c_Recompile = tcRecompile tcType = UPPER( EVL(tcType,'') ) .writeLog( REPLICATE( '*', 100 ) ) @@ -1855,8 +1855,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- ARCHIVO DE CONFIGURACIÓN PRINCIPAL *IF NOT .l_ConfigEvaluated THEN - .EvaluarConfiguracion( @tcDontShowProgress, @tcDontShowErrors, @tcNoTimestamps, @tcDebug, @tcRecompile, @tcBackupLevels ; - , @tcClearUniqueID, @tcOptimizeByFilestamp ) + .EvaluarConfiguracion( @tcDontShowProgress, @tcDontShowErrors, @tcNoTimestamps, @tcDebug, @tcRecompile, @tcBackupLevels ; + , @tcClearUniqueID, @tcOptimizeByFilestamp ) *ENDIF loLang = _SCREEN.o_FoxBin2Prg_Lang @@ -1933,7 +1933,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CD (tc_InputFile) ENDCASE - .c_LogFile = ADDBS(tc_InputFile) + '_' + tcType + '.LOG' + .c_LogFile = ADDBS(tc_InputFile) + tcType + '.LOG' IF .l_Debug IF FILE( .c_LogFile ) @@ -1973,7 +1973,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CD (tc_InputFile) ENDCASE - .c_LogFile = ADDBS(tc_InputFile) + '_' + tcType + '.LOG' + .c_LogFile = ADDBS(tc_InputFile) + tcType + '.LOG' IF .l_Debug IF FILE( .c_LogFile ) @@ -1990,6 +1990,15 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF .AvanceDelProceso( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) lnCodError = .Convertir( lcFile, @toModulo, @toEx, .T., tcOriginalFileName ) + + DO CASE + CASE lnCodError = 1799 && Conversion Cancelled + ERROR 1799 + + CASE lnCodError > 0 + .l_Error = .T. + .ejecutar_WriteErrorLog( @toEx ) + ENDCASE ENDFOR .AvanceDelProceso( loLang.C_END_OF_PROCESS_LOC, lnFileCount, lnFileCount, 0 ) @@ -2185,7 +2194,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *THIS.descargar_frm_avance() CD (JUSTPATH(THIS.c_CurDir)) - IF '-INTERACTIVE' $ ('-' + tcType) THEN + DO CASE + CASE '-INTERACTIVE' $ ('-' + tcType) lcErrorFile = FORCEPATH('FoxBin2Prg.LOG',GETENV('TEMP') ) DO CASE @@ -2204,7 +2214,12 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM STRTOFILE( THIS.c_ErrorLog, lcErrorFile ) ENDCASE - ENDIF + + CASE THIS.l_Debug + lcErrorFile = FORCEPATH('FoxBin2Prg.LOG',GETENV('TEMP') ) + STRTOFILE( THIS.c_ErrorLog, lcErrorFile ) + + ENDCASE STORE NULL TO loFSO, loWSH RELEASE tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDebug, tcDontShowProgress ; @@ -2232,7 +2247,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- Escribo la información de error en el archivo log de errores TRY - STRTOFILE( STRCONV(tcErrorInfo, 9 ), EVL( THIS.c_InputFile, 'foxbin2prg' ) + '.ERR' ) + STRTOFILE( STRCONV(tcErrorInfo, 9 ), EVL( THIS.c_InputFile, 'foxbin2prg_errorlog' ) + '.ERR' ) CATCH ENDTRY @@ -2263,6 +2278,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM 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 ) ) @@ -2273,17 +2289,41 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM 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 'aclx0010' $ LOWER(.c_InputFile) + * SET STEP ON + *ENDIF + 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 @@ -2302,7 +2342,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ERROR loLang.C_FILE_DOESNT_EXIST_LOC + ' [' + .c_InputFile + ']' ENDIF - lcExtension = UPPER( JUSTEXT(.c_InputFile) ) .normalizarCapitalizacionArchivos( .T. ) DO CASE @@ -6813,17 +6852,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) @@ -6838,6 +6879,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 ) @@ -7149,18 +7199,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) @@ -7175,6 +7226,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 ) @@ -11203,8 +11263,8 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDIF lnBytes = STRTOFILE( tcCodigo, tcOutputFile ) - THIS.writeLog( C_FILENAME_LOC + ': ' + tcOutputFile ) - THIS.writeLog( '- ' + loLang.C_GENERATED_FILE_SIZE_LOC + ': ' + TRANSFORM(lnBytes/1024,'######.##') + ' / ' + TRANSFORM(LEN(tcCodigo)/1024,'######.##') + ' KiB' ) + THIS.writeLog( loLang.C_FILENAME_LOC + ': ' + tcOutputFile + ' (' + ALLTRIM(TRANSFORM(lnBytes/1024,'######.##')) + '/' + ALLTRIM(TRANSFORM(LEN(tcCodigo)/1024,'######.##')) + ' KiB)' ) + *THIS.writeLog( '- ' + loLang.C_GENERATED_FILE_SIZE_LOC ) IF lnBytes = 0 *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' @@ -21596,10 +21656,10 @@ DEFINE CLASS CL_LANG AS Custom 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 From faa33e34ba5f15e1eace57e460d461b7a74273c5 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 12 Dec 2014 17:37:57 +0100 Subject: [PATCH 11/20] Changeset: 553 fdbozzo - 07/12/2014 23:56:34: - Mejoras en el LOG --- foxbin2prg.prg | 110 ++++++++++++++++++++++++++++++++++++------------- 1 file changed, 81 insertions(+), 29 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index c8bc00a..7d1b866 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -536,6 +536,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -563,7 +564,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM c_CurDir = '' c_InputFile = '' c_OriginalFileName = '' - c_LogFile = '' + c_LogFile = ADDBS( SYS(2023) ) + 'FoxBin2Prg.LOG' c_TextLog = '' c_OutputFile = '' c_Recompile = '1' @@ -1808,7 +1809,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM TRY LOCAL I, lcPath, lnCodError, lcFileSpec, lcFile, laFiles(1,5), laDirInfo(1,5) ; - , lnFileCount, lcErrorInfo, lcErrorFile ; + , lnFileCount, lcErrorInfo, lcErrorFile, lnPCount, laParams(1) ; , loEx AS EXCEPTION ; , loFSO AS Scripting.FileSystemObject ; , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' ; @@ -1820,6 +1821,18 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM loWSH = .o_WSH DIMENSION .a_ProcessedFiles(1) .n_ProcessedFiles = 0 + lnPCount = 0 + + *-- Funciona y lee los parámetros, pero no le veo un caso de uso claro. 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 EMPTY(tcRecompile) AND NOT EMPTY(tc_InputFile) AND ADIR(laDirInfo, tc_InputFile, "D")=1 THEN IF SUBSTR( laDirInfo(1,5), 5, 1 ) = "D" @@ -1903,9 +1916,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 = ADIR( laFiles, lcFileSpec, '', 1 ) @@ -1913,10 +1924,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM FOR I = 1 TO lnFileCount lcFile = FORCEPATH( laFiles(I,1), JUSTPATH( lcFileSpec ) ) .AvanceDelProceso( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) - - IF FILE( lcFile ) - lnCodError = .Convertir( lcFile, @toModulo, @toEx, .T., tcOriginalFileName ) - ENDIF + lnCodError = .Convertir( lcFile, @toModulo, @toEx, .T., tcOriginalFileName ) + .writeLog_Flush() ENDFOR @@ -1936,20 +1945,21 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .c_LogFile = ADDBS(tc_InputFile) + tcType + '.LOG' IF .l_Debug - IF FILE( .c_LogFile ) - ERASE ( .c_LogFile ) - ENDIF + 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 @@ -1976,20 +1986,21 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .c_LogFile = ADDBS(tc_InputFile) + tcType + '.LOG' IF .l_Debug - IF FILE( .c_LogFile ) - ERASE ( .c_LogFile ) - ENDIF + 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 @@ -2057,9 +2068,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 @@ -2081,6 +2090,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM IF .TieneSoporte_Bin2Prg( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) + .writeLog_Flush() ENDIF ENDFOR @@ -2098,9 +2108,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 ) @@ -2123,6 +2131,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM IF .TieneSoporte_Prg2Bin( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) + .writeLog_Flush() ENDIF ENDFOR @@ -2166,6 +2175,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CATCH TO toEx lnCodError = toEx.ERRORNO THIS.l_Error = .T. + + IF VARTYPE(loLang) <> 'O' THEN + loLang = CREATEOBJECT("CL_LANG","EN") + ENDIF IF '-INTERACTIVE' $ ('-' + tcType) THEN toEx.UserValue = 'tc_InputDir = [' + TRANSFORM(tc_InputFile) + ']' @@ -2189,6 +2202,12 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF FINALLY + lcErrorFile = FORCEPATH('FoxBin2Prg_Error.LOG', SYS(2023) ) + + IF VARTYPE(loLang) <> 'O' THEN + loLang = CREATEOBJECT("CL_LANG","EN") + ENDIF + USE IN (SELECT("TABLABIN")) THIS.writeLog_Flush() *THIS.descargar_frm_avance() @@ -2196,7 +2215,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM DO CASE CASE '-INTERACTIVE' $ ('-' + tcType) - lcErrorFile = FORCEPATH('FoxBin2Prg.LOG',GETENV('TEMP') ) DO CASE CASE lnCodError = 1799 && Conversion Cancelled @@ -2211,12 +2229,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM OTHERWISE MESSAGEBOX( loLang.C_END_OF_PROCESS_LOC, 0+64+4096, 'FoxBin2Prg', 60000 ) - STRTOFILE( THIS.c_ErrorLog, lcErrorFile ) ENDCASE CASE THIS.l_Debug - lcErrorFile = FORCEPATH('FoxBin2Prg.LOG',GETENV('TEMP') ) STRTOFILE( THIS.c_ErrorLog, lcErrorFile ) ENDCASE @@ -2295,9 +2311,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- OPTIMIZACIÓN VC2/SC2: VERIFICO SI EL ARCHIVO BASE FUE PROCESADO PARA DESCARTAR REPROCESOS - *IF 'aclx0010' $ LOWER(.c_InputFile) - * SET STEP ON - *ENDIF IF INLIST(lcExtension,'VC2','SC2') AND .l_UseClassPerFile AND .l_RedirectClassPerFileToMain IF OCCURS('.', JUSTSTEM(.c_InputFile)) = 0 THEN lc_BaseFile = .c_InputFile @@ -2558,7 +2571,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF .o_Conversor.Convertir( @toModulo, .F., THIS ) - .c_TextLog = .c_TextLog + CR_LF + .o_Conversor.c_TextLog && Recojo el LOG que haya generado el conversor + .writeLog() + .writeLog(.o_Conversor.c_TextLog) && Recojo el LOG que haya generado el conversor 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.' ) @@ -2812,6 +2826,44 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM 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 @@ -2885,8 +2937,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM 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 From 4450be21a4c0db8d88c39531661b546e8f6c9388 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 12 Dec 2014 21:16:16 +0100 Subject: [PATCH 12/20] =?UTF-8?q?Changeset:=20554=20fdbozzo=20-=2012/12/20?= =?UTF-8?q?14=2017:37:57:=20-=20Agregada=20detecci=C3=B3n=20de=20m=C3=A9to?= =?UTF-8?q?dos=20duplicados=20en=20los=20archivos=20sc2/vc2=20y=20log=20de?= =?UTF-8?q?l=20error?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 138 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 100 insertions(+), 38 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 7d1b866..eeb9347 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -401,7 +401,7 @@ LOCAL lnResp, loEx AS EXCEPTION *ENDIF *-- En el caso de recibir "BIN2PRG" o "PRG2BIN" en el primer parámetro, los invierto. -IF INLIST(UPPER(TRANSFORM(tc_InputFile)), 'BIN2PRG', 'PRG2BIN', 'INTERACTIVE') THEN +IF INLIST(UPPER(TRANSFORM(tc_InputFile)), 'BIN2PRG', 'PRG2BIN', 'BIN2PRG-INTERACTIVE', 'PRG2BIN-INTERACTIVE', 'INTERACTIVE') THEN pcParamX = tc_InputFile tc_InputFile = tcType tcType = pcParamX @@ -453,7 +453,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; - + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -461,6 +461,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -545,6 +546,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] @@ -564,7 +566,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM c_CurDir = '' c_InputFile = '' c_OriginalFileName = '' - c_LogFile = ADDBS( SYS(2023) ) + 'FoxBin2Prg.LOG' + c_LogFile = ADDBS( SYS(2023) ) + 'FoxBin2Prg_Debug.LOG' + c_ErrorLogFile = ADDBS( SYS(2023) ) + 'FoxBin2Prg_Error.LOG' c_TextLog = '' c_OutputFile = '' c_Recompile = '1' @@ -577,7 +580,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. @@ -642,6 +645,9 @@ 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 ) ) @@ -1966,7 +1972,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ERROR 1799 CASE lnCodError > 0 - .l_Error = .T. .ejecutar_WriteErrorLog( @toEx ) ENDCASE ENDFOR @@ -2007,7 +2012,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ERROR 1799 CASE lnCodError > 0 - .l_Error = .T. .ejecutar_WriteErrorLog( @toEx ) ENDCASE ENDFOR @@ -2174,7 +2178,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CATCH TO toEx lnCodError = toEx.ERRORNO - THIS.l_Error = .T. IF VARTYPE(loLang) <> 'O' THEN loLang = CREATEOBJECT("CL_LANG","EN") @@ -2202,8 +2205,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF FINALLY - lcErrorFile = FORCEPATH('FoxBin2Prg_Error.LOG', SYS(2023) ) - IF VARTYPE(loLang) <> 'O' THEN loLang = CREATEOBJECT("CL_LANG","EN") ENDIF @@ -2219,13 +2220,13 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM DO CASE CASE lnCodError = 1799 && Conversion Cancelled MESSAGEBOX( loLang.C_CONVERSION_CANCELLED_BY_USER_LOC + '!', 0+48+4096, 'FoxBin2Prg', 60000 ) - STRTOFILE( THIS.c_ErrorLog, lcErrorFile ) - loWSH.Run( lcErrorFile, 1, .F. ) + 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 ) - STRTOFILE( THIS.c_ErrorLog, lcErrorFile ) - loWSH.Run( lcErrorFile, 1, .F. ) + THIS.writeErrorLog_Flush( ) + loWSH.Run( THIS.c_ErrorLogFile, 1, .F. ) OTHERWISE MESSAGEBOX( loLang.C_END_OF_PROCESS_LOC, 0+64+4096, 'FoxBin2Prg', 60000 ) @@ -2233,7 +2234,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDCASE CASE THIS.l_Debug - STRTOFILE( THIS.c_ErrorLog, lcErrorFile ) + THIS.writeErrorLog_Flush( ) ENDCASE @@ -2287,6 +2288,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM 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 @@ -2552,17 +2554,18 @@ 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( loLang.C_PROCESSING_LOC + ' ' + .c_InputFile + '...', 0, 0, 0 ) @@ -2570,9 +2573,16 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM BINDEVENT( .o_Conversor, 'AvanceDelProceso', THIS, 'AvanceDelProceso' ) ENDIF - .o_Conversor.Convertir( @toModulo, .F., THIS ) + 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.' ) @@ -2600,8 +2610,8 @@ 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 + + STORE NULL TO loConversor, THIS.o_Conversor, loFSO *IF lnCodError = 0 OR NOT THIS.l_ShowErrors THEN * THIS.writeLog( REPLICATE('-',100) ) @@ -2610,7 +2620,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM RELEASE tc_InputFile, toModulo, toEx, tlRelanzarError, tcOriginalFileName ; , lcErrorInfo, laDirFile, lcExtension, lnFileCount, laFiles, I ; , ltFilestamp, lcExtA, lcExtB ; - , loFSO + , loConversor, loFSO ENDTRY RETURN lnCodError @@ -2916,12 +2926,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 @@ -2933,7 +2952,6 @@ 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 ) @@ -3192,6 +3210,7 @@ DEFINE CLASS c_conversor_base AS SESSION + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -3200,6 +3219,7 @@ DEFINE CLASS c_conversor_base AS SESSION + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -3233,6 +3253,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. @@ -4646,6 +4667,16 @@ DEFINE CLASS c_conversor_base AS SESSION ENDPROC + PROCEDURE writeErrorLog + LPARAMETERS tcText + + TRY + THIS.c_TextErr = THIS.c_TextErr + EVL(tcText,'') + CR_LF + CATCH + ENDTRY + ENDPROC + + ENDDEFINE @@ -6531,7 +6562,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' ; @@ -6539,12 +6570,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 @@ -6552,6 +6583,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 @@ -6595,7 +6627,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 @@ -6681,11 +6713,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 @@ -13206,15 +13243,17 @@ DEFINE CLASS CL_CUS_BASE AS CUSTOM , RESETTODEFAULT, SAVEASCLASS, SHOWWHATSTHIS, WRITEEXPRESSION, WRITEMETHOD _MEMBERDATA = [] ; + + [] ; + [] ; + [] ; + [] ; + [] ; + [] ; + [] ; + + [] ; + [] - + c_TextErr = '' l_Debug = .F. @@ -13268,6 +13307,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 @@ -13472,9 +13521,11 @@ DEFINE CLASS CL_CLASE AS CL_CUS_BASE + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -13524,8 +13575,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 = '' @@ -13582,9 +13634,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 @@ -13631,6 +13691,7 @@ DEFINE CLASS CL_PROCEDURE AS CL_CUS_BASE _MEMBERDATA = [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -13642,6 +13703,7 @@ DEFINE CLASS CL_PROCEDURE AS CL_CUS_BASE _ProcType = '' _Comentario = '' _ProcLine_Count = 0 + _Inicio = 0 ************************************************************************************************ From 3045133b1a5c28d85b63a804e26357ecff19b0a4 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 13 Dec 2014 00:51:33 +0100 Subject: [PATCH 13/20] =?UTF-8?q?Changeset:=20555=20fdbozzo=20-=2012/12/20?= =?UTF-8?q?14=2021:16:17:=20-=20Detecci=C3=B3n=20de=20m=C3=A9todos=20dupli?= =?UTF-8?q?cados=20de=20los=20ADD=20OBJECT=20en=20sc2/vc2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 112 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 109 insertions(+), 3 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index eeb9347..e336ce2 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -1829,7 +1829,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .n_ProcessedFiles = 0 lnPCount = 0 - *-- Funciona y lee los parámetros, pero no le veo un caso de uso claro. 12/12/2014 + *-- 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 @@ -2165,7 +2166,10 @@ 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 ) @@ -3222,6 +3226,7 @@ DEFINE CLASS c_conversor_base AS SESSION + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -3242,6 +3247,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 = '' @@ -4672,6 +4678,7 @@ DEFINE CLASS c_conversor_base AS SESSION TRY THIS.c_TextErr = THIS.c_TextErr + EVL(tcText,'') + CR_LF + THIS.l_Error = .T. CATCH ENDTRY ENDPROC @@ -6611,6 +6618,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 @@ -6988,6 +7001,11 @@ 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., '', '', '' ) @@ -7335,6 +7353,11 @@ 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., '', '', '' ) @@ -7655,6 +7678,11 @@ 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 ) .escribirArchivoBin( @toProject, toFoxBin2Prg ) ENDWITH && THIS @@ -8450,6 +8478,11 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin .AvanceDelProceso( 'Identifying Code Blocks...', 1, 2, 1 ) .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toReport ) + IF .l_Error + .writeLog( '*** ERRORS found - Generation Cancelled' ) + EXIT + ENDIF + .AvanceDelProceso( 'Generating Binary...', 2, 2, 1 ) .escribirArchivoBin( @toReport, toFoxBin2Prg ) ENDWITH && THIS @@ -8879,6 +8912,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 @@ -9179,6 +9217,11 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin .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 ) .escribirArchivoBin( @toDatabase, toFoxBin2Prg ) ENDWITH && THIS @@ -9359,6 +9402,11 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin .AvanceDelProceso( 'Identifying Code Blocks...', 1, 2, 1 ) .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toMenu ) + IF .l_Error + .writeLog( '*** ERRORS found - Generation Cancelled' ) + EXIT + ENDIF + .AvanceDelProceso( 'Generating Binary...', 1, 2, 1 ) .escribirArchivoBin( @toMenu ) ENDWITH && THIS @@ -11668,6 +11716,12 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg lcExternalHeader = lcExternalHeader + CR_LF ENDIF + IF .l_Error + .writeLog( '*** ERRORS found - Generation Cancelled' ) + EXIT + ENDIF + + *-- Genero el VC2 lnStep = lnStep + 1 .AvanceDelProceso( 'Writing VC2...', lnStep, lnClassTotal*lnStepCount, 1 ) @@ -11975,6 +12029,12 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg lcExternalHeader = lcExternalHeader + CR_LF ENDIF + IF .l_Error + .writeLog( '*** ERRORS found - Generation Cancelled' ) + EXIT + ENDIF + + *-- Genero el SC2 lnStep = lnStep + 1 .AvanceDelProceso( 'Writing SC2...', lnStep, lnClassTotal*lnStepCount, 1 ) @@ -12330,6 +12390,11 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg RETURN ENDTEXT + IF .l_Error + .writeLog( '*** ERRORS found - Generation Cancelled' ) + EXIT + ENDIF + *-- Genero el PJ2 .AvanceDelProceso( 'Writing PJ2...', 2, 2, 1 ) @@ -12708,6 +12773,11 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg RETURN ENDTEXT + IF .l_Error + .writeLog( '*** ERRORS found - Generation Cancelled' ) + EXIT + ENDIF + *-- Genero el PJ2 .AvanceDelProceso( 'Writing PJ2...', 2, 2, 1 ) @@ -12885,6 +12955,11 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg .write_DETALLE_REPORTE( @loRegCur ) ENDIF + IF .l_Error + .writeLog( '*** ERRORS found - Generation Cancelled' ) + EXIT + ENDIF + *-- Genero el FR2 .AvanceDelProceso( 'Writing FR2...', 2, 2, 1 ) @@ -12992,6 +13067,11 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, .c_InputFile, lc_FileTypeDesc, @toFoxBin2Prg ) FCLOSE( toFoxBin2Prg.n_FileHandle ) + IF .l_Error + .writeLog( '*** ERRORS found - Generation Cancelled' ) + EXIT + ENDIF + *-- Genero el DB2, renombrando el TMP .AvanceDelProceso( 'Writing DB2...', 3, 3, 1 ) @@ -13014,6 +13094,11 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg ELSE C_FB2PRG_CODE = C_FB2PRG_CODE + loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, .c_InputFile, lc_FileTypeDesc, @toFoxBin2Prg ) + IF .l_Error + .writeLog( '*** ERRORS found - Generation Cancelled' ) + EXIT + ENDIF + *-- Genero el DB2 .AvanceDelProceso( 'Writing DB2...', 3, 3, 1 ) @@ -13126,6 +13211,11 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg toDatabase = CREATEOBJECT('CL_DBC') C_FB2PRG_CODE = C_FB2PRG_CODE + toDatabase.toText() + IF .l_Error + .writeLog( '*** ERRORS found - Generation Cancelled' ) + EXIT + ENDIF + *-- Genero el DC2 .AvanceDelProceso( 'Writing DC2...', 2, 2, 1 ) @@ -13203,6 +13293,11 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg toMenu.get_DataFromTablabin() C_FB2PRG_CODE = C_FB2PRG_CODE + toMenu.toText() + IF .l_Error + .writeLog( '*** ERRORS found - Generation Cancelled' ) + EXIT + ENDIF + *-- Genero el MN2 .AvanceDelProceso( 'Writing MN2...', 2, 2, 1 ) @@ -13730,6 +13825,8 @@ DEFINE CLASS CL_OBJETO AS CL_CUS_BASE _MEMBERDATA = [] ; + [] ; + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -13749,7 +13846,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 = '' @@ -13780,9 +13878,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 object "' ; + + ._Nombre + '" of class "' + ._Parent + '" 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 From 909478c9137e3f3492ea1d4cb79c5ed7b50afc29 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 13 Dec 2014 14:36:10 +0100 Subject: [PATCH 14/20] Changeset: 556 fdbozzo - 13/12/2014 00:51:33: --- foxbin2prg.prg | 45 --------------------------------------------- 1 file changed, 45 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index e336ce2..824f747 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -11716,11 +11716,6 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg lcExternalHeader = lcExternalHeader + CR_LF ENDIF - IF .l_Error - .writeLog( '*** ERRORS found - Generation Cancelled' ) - EXIT - ENDIF - *-- Genero el VC2 lnStep = lnStep + 1 @@ -12029,11 +12024,6 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg lcExternalHeader = lcExternalHeader + CR_LF ENDIF - IF .l_Error - .writeLog( '*** ERRORS found - Generation Cancelled' ) - EXIT - ENDIF - *-- Genero el SC2 lnStep = lnStep + 1 @@ -12390,11 +12380,6 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg RETURN ENDTEXT - IF .l_Error - .writeLog( '*** ERRORS found - Generation Cancelled' ) - EXIT - ENDIF - *-- Genero el PJ2 .AvanceDelProceso( 'Writing PJ2...', 2, 2, 1 ) @@ -12773,11 +12758,6 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg RETURN ENDTEXT - IF .l_Error - .writeLog( '*** ERRORS found - Generation Cancelled' ) - EXIT - ENDIF - *-- Genero el PJ2 .AvanceDelProceso( 'Writing PJ2...', 2, 2, 1 ) @@ -12955,11 +12935,6 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg .write_DETALLE_REPORTE( @loRegCur ) ENDIF - IF .l_Error - .writeLog( '*** ERRORS found - Generation Cancelled' ) - EXIT - ENDIF - *-- Genero el FR2 .AvanceDelProceso( 'Writing FR2...', 2, 2, 1 ) @@ -13067,11 +13042,6 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, .c_InputFile, lc_FileTypeDesc, @toFoxBin2Prg ) FCLOSE( toFoxBin2Prg.n_FileHandle ) - IF .l_Error - .writeLog( '*** ERRORS found - Generation Cancelled' ) - EXIT - ENDIF - *-- Genero el DB2, renombrando el TMP .AvanceDelProceso( 'Writing DB2...', 3, 3, 1 ) @@ -13094,11 +13064,6 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg ELSE C_FB2PRG_CODE = C_FB2PRG_CODE + loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, .c_InputFile, lc_FileTypeDesc, @toFoxBin2Prg ) - IF .l_Error - .writeLog( '*** ERRORS found - Generation Cancelled' ) - EXIT - ENDIF - *-- Genero el DB2 .AvanceDelProceso( 'Writing DB2...', 3, 3, 1 ) @@ -13211,11 +13176,6 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg toDatabase = CREATEOBJECT('CL_DBC') C_FB2PRG_CODE = C_FB2PRG_CODE + toDatabase.toText() - IF .l_Error - .writeLog( '*** ERRORS found - Generation Cancelled' ) - EXIT - ENDIF - *-- Genero el DC2 .AvanceDelProceso( 'Writing DC2...', 2, 2, 1 ) @@ -13293,11 +13253,6 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg toMenu.get_DataFromTablabin() C_FB2PRG_CODE = C_FB2PRG_CODE + toMenu.toText() - IF .l_Error - .writeLog( '*** ERRORS found - Generation Cancelled' ) - EXIT - ENDIF - *-- Genero el MN2 .AvanceDelProceso( 'Writing MN2...', 2, 2, 1 ) From ccde6a01f5137af2040d7c400698bcd60992b5dc Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 13 Dec 2014 15:28:56 +0100 Subject: [PATCH 15/20] =?UTF-8?q?Changeset:=20557=20fdbozzo=20-=2013/12/20?= =?UTF-8?q?14=2014:36:10:=20-=20Normalizaci=C3=B3n=20y=20modificaci=C3=B3n?= =?UTF-8?q?=20UT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...rg__c_foxbin2prg__EvaluarConfiguracion.prg | 6 +- foxbin2prg.prg | 90 ++++++++++++------- 2 files changed, 60 insertions(+), 36 deletions(-) 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.prg b/foxbin2prg.prg index 824f747..e5b5fc3 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -4846,8 +4846,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) ; @@ -4877,7 +4882,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 @@ -4934,8 +4941,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) ; @@ -4960,7 +4972,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 @@ -4989,8 +5003,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) ; @@ -5015,7 +5034,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 @@ -5044,8 +5065,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) ; @@ -5122,15 +5148,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 ; @@ -5157,7 +5190,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 @@ -7008,9 +7043,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin .AvanceDelProceso( 'Generating Binary...', 0, lnCodeLines, 1 ) toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) - .createClasslib() - .escribirArchivoBin( @toModulo, @toFoxBin2Prg ) ENDWITH && THIS @@ -7359,11 +7392,8 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin ENDIF .AvanceDelProceso( 'Generating Binary...', 0, lnCodeLines, 1 ) - toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) - .createForm() - .escribirArchivoBin( @toModulo, @toFoxBin2Prg ) ENDWITH && THIS @@ -7666,11 +7696,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 ) @@ -7684,6 +7709,8 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin ENDIF .AvanceDelProceso( 'Generating Binary...', 2, 2, 1 ) + toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) + .createProject() .escribirArchivoBin( @toProject, toFoxBin2Prg ) ENDWITH && THIS @@ -8469,14 +8496,12 @@ 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' ) @@ -8484,6 +8509,8 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin ENDIF .AvanceDelProceso( 'Generating Binary...', 2, 2, 1 ) + toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) + .createReport() .escribirArchivoBin( @toReport, toFoxBin2Prg ) ENDWITH && THIS @@ -9208,11 +9235,6 @@ 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 ) @@ -9223,6 +9245,8 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ENDIF .AvanceDelProceso( 'Generating Binary...', 2, 2, 1 ) + toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) + *.createTable() .escribirArchivoBin( @toDatabase, toFoxBin2Prg ) ENDWITH && THIS @@ -9393,14 +9417,12 @@ 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' ) @@ -9408,6 +9430,8 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin ENDIF .AvanceDelProceso( 'Generating Binary...', 1, 2, 1 ) + toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) + .createMenu() .escribirArchivoBin( @toMenu ) ENDWITH && THIS From 0f53b46503d2a12de0b03b9ded601689b455798b Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 13 Dec 2014 16:05:17 +0100 Subject: [PATCH 16/20] =?UTF-8?q?Changeset:=20559=20fdbozzo=20-=2013/12/20?= =?UTF-8?q?14=2015:30:08:=20-=20Arreglo=20cosm=C3=A9tico=20de=20informaci?= =?UTF-8?q?=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index e5b5fc3..d247a58 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -13859,8 +13859,8 @@ DEFINE CLASS CL_OBJETO AS CL_CUS_BASE *-- 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 object "' ; - + ._Nombre + '" of class "' + ._Parent + '" in line ' + TRANSFORM(toProcedure._Inicio) ) + .writeErrorLog( '* Duplicated Method "' + toProcedure._Nombre + '" of class.object "' ; + + ._Nombre + '" in line ' + TRANSFORM(toProcedure._Inicio) ) ENDIF ._Procedure_Count = ._Procedure_Count + 1 From 2b76e41c4a5097ee34291dca691ada99c8cdb7e2 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 13 Dec 2014 16:40:31 +0100 Subject: [PATCH 17/20] =?UTF-8?q?Changeset:=20560=20fdbozzo=20-=2013/12/20?= =?UTF-8?q?14=2016:05:17:=20-=20Actualizaci=C3=B3n=20del=20archivo=20de=20?= =?UTF-8?q?versi=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 8 +++++--- foxbin2prg.exe | Bin 468467 -> 500655 bytes 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index e51b6aa..e033625 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -3,7 +3,7 @@ Lparameters toUpdateInfo Local lcNote With toUpdateInfo .VersionNumber = 'v1.19.38' - .VersionDate = Date(2014,12,04) + .VersionDate = Date(2014,12,13) .SourceFileUrl = 'http://vfpxrepository.com/dl/thorupdate/Projects/FoxBin2Prg/FoxBin2Prg.Zip' .Link = 'http://vfpx.codeplex.com/wikipage?title=FoxBin2PRG' @@ -17,8 +17,10 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg Change History ------------------------------------------------------------- -2014/12/04 v1.19.38 -- +2014/12/13 v1.19.38 +- Feature: Now is possible to use FoxBin2Prg for batch conversions directly from the File Explorer, 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) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index bc0aabe3f03f11bd813ddb580aa320ab29c5b3fd..5de752b2409174aa0e2d41d7f33640a1a09e8d93 100644 GIT binary patch delta 80235 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 delta 49814 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 From 3e505f1f0630d2de0fc90908196b0833c203050b Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 13 Dec 2014 16:45:30 +0100 Subject: [PATCH 18/20] =?UTF-8?q?Changeset:=20561=20fdbozzo=20-=2013/12/20?= =?UTF-8?q?14=2016:40:32:=20-=20Actualizaci=C3=B3n=20de=20los=20cr=C3=A9di?= =?UTF-8?q?tos=20y=20regeneraci=C3=B3n=20EXE=20final?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.exe | Bin 500655 -> 500655 bytes foxbin2prg.prg | 10 ++++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 5de752b2409174aa0e2d41d7f33640a1a09e8d93..8738b1282fcfeddacdce703b92674b0fb6ee9729 100644 GIT binary patch delta 7047 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 diff --git a/foxbin2prg.prg b/foxbin2prg.prg index d247a58..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) @@ -119,6 +119,7 @@ * 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) * * *--------------------------------------------------------------------------------------------------- @@ -171,6 +172,7 @@ * 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 * * *--------------------------------------------------------------------------------------------------- From 721d059b449d684878188097c5dff606c16bb165 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 13 Dec 2014 17:08:34 +0100 Subject: [PATCH 19/20] =?UTF-8?q?Changeset:=20563=20fdbozzo=20-=2013/12/20?= =?UTF-8?q?14=2016:48:22:=20-=20Actualizaci=C3=B3n=20del=20README.txt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.txt | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) 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: From 14d2db6bfdcc03bc140c3f5cc07c0ed372ac1781 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 13 Dec 2014 17:09:46 +0100 Subject: [PATCH 20/20] =?UTF-8?q?Changeset:=20564=20fdbozzo=20-=2013/12/20?= =?UTF-8?q?14=2017:08:35:=20-=20Aclaraci=C3=B3n=20en=20archivo=20de=20vers?= =?UTF-8?q?iones?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index e033625..11b4dd7 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -18,7 +18,7 @@ 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, without the need of vbs scripts, that sometimes can make trouble or are not permitted by IT department (Francisco Prieto) +- 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)