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