From f3a86d592debe0d4e8e13434bdd39715f2a9e381 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 13 Dec 2014 21:48:11 +0100 Subject: [PATCH 01/21] =?UTF-8?q?Changeset:=20567=20fdbozzo=20-=2013/12/20?= =?UTF-8?q?14=2017:27:46:=20-=20Quitados=20los=20scripts=20de=20recompilac?= =?UTF-8?q?i=C3=B3n=20por=20idioma,=20que=20ya=20no=20hacen=20falta=20ni?= =?UTF-8?q?=20est=C3=A1n=20incluidos=20en=20el=20zip=20de=20la=20v1.19.38?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2Prg__Compilar_en_Español.vbs | 21 --------------------- FoxBin2Prg__Compile_in_English.vbs | 22 ---------------------- FoxBin2Prg__kompilieren_auf_Deutsch.vbs | 22 ---------------------- 3 files changed, 65 deletions(-) delete mode 100644 FoxBin2Prg__Compilar_en_Español.vbs delete mode 100644 FoxBin2Prg__Compile_in_English.vbs delete mode 100644 FoxBin2Prg__kompilieren_auf_Deutsch.vbs diff --git a/FoxBin2Prg__Compilar_en_Español.vbs b/FoxBin2Prg__Compilar_en_Español.vbs deleted file mode 100644 index 9c30316..0000000 --- a/FoxBin2Prg__Compilar_en_Español.vbs +++ /dev/null @@ -1,21 +0,0 @@ -'--------------------------------------------------------------------------------------------------- -' FoxBin2Prg__Compilar_en_Español.vbs - 10/08/2014 - Fernando D. Bozzo (fdbozzo@gmail.com) -'--------------------------------------------------------------------------------------------------- -' - FoxBin2Prg ya viene en Español por defecto, pero si lo llega a necesitar, solo ejecute este script. -'--------------------------------------------------------------------------------------------------- -Const ForReading = 1 -Dim WSHShell, FileSystemObject -Dim oVFP9, nExitCode, cOrigFile, cDestFile -Dim nRet -Set WSHShell = WScript.CreateObject("WScript.Shell") -Set FileSystemObject = WScript.CreateObject("Scripting.FileSystemObject") -Set oVFP9 = CreateObject("VisualFoxPro.Application.9") -foxbin2prg_exe = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg.exe") -nExitCode = 0 -cOrigFile = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg.h") -cPath = FileSystemObject.GetParentFolderName( cOrigFile ) -nRet = FileSystemObject.DeleteFile( cOrigFile, True ) -oVFP9.DoCmd( "SET DEFAULT TO '" & cPath & "'" ) -oVFP9.DoCmd( "BUILD EXE foxbin2prg.exe FROM foxbin2prg.pjx RECOMPILE" ) -WSHShell.run foxbin2prg_exe -WScript.Quit(nExitCode) diff --git a/FoxBin2Prg__Compile_in_English.vbs b/FoxBin2Prg__Compile_in_English.vbs deleted file mode 100644 index 1306797..0000000 --- a/FoxBin2Prg__Compile_in_English.vbs +++ /dev/null @@ -1,22 +0,0 @@ -'--------------------------------------------------------------------------------------------------- -' FoxBin2Prg__Compile_in_English.vbs - 10/08/2014 - Fernando D. Bozzo (fdbozzo@gmail.com) -'--------------------------------------------------------------------------------------------------- -' - Just execute on FoxBin2Prg main directory, and you get an EXE with texts translated -'--------------------------------------------------------------------------------------------------- -Const ForReading = 1 -Dim WSHShell, FileSystemObject -Dim oVFP9, nExitCode, cOrigFile, cDestFile -Dim nRet -Set WSHShell = WScript.CreateObject("WScript.Shell") -Set FileSystemObject = WScript.CreateObject("Scripting.FileSystemObject") -Set oVFP9 = CreateObject("VisualFoxPro.Application.9") -foxbin2prg_exe = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg.exe") -nExitCode = 0 -cOrigFile = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg_en.h") -cDestFile = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg.h") -cPath = FileSystemObject.GetParentFolderName( cOrigFile ) -nRet = FileSystemObject.CopyFile( cOrigFile, cDestFile, True ) -oVFP9.DoCmd( "SET DEFAULT TO '" & cPath & "'" ) -oVFP9.DoCmd( "BUILD EXE foxbin2prg.exe FROM foxbin2prg.pjx RECOMPILE" ) -WSHShell.run foxbin2prg_exe -WScript.Quit(nExitCode) diff --git a/FoxBin2Prg__kompilieren_auf_Deutsch.vbs b/FoxBin2Prg__kompilieren_auf_Deutsch.vbs deleted file mode 100644 index e7a5ab1..0000000 --- a/FoxBin2Prg__kompilieren_auf_Deutsch.vbs +++ /dev/null @@ -1,22 +0,0 @@ -'--------------------------------------------------------------------------------------------------- -' FoxBin2Prg__kompilieren_auf_Deutsch.vbs - 10/08/2014 - Fernando D. Bozzo (fdbozzo@gmail.com) -'--------------------------------------------------------------------------------------------------- -' - Führen Sie einfach auf FoxBin2Prg Hauptverzeichnis, und Sie erhalten eine EXE-Datei mit Texten übersetzt bekommen -'--------------------------------------------------------------------------------------------------- -Const ForReading = 1 -Dim WSHShell, FileSystemObject -Dim oVFP9, nExitCode, cOrigFile, cDestFile -Dim nRet -Set WSHShell = WScript.CreateObject("WScript.Shell") -Set FileSystemObject = WScript.CreateObject("Scripting.FileSystemObject") -Set oVFP9 = CreateObject("VisualFoxPro.Application.9") -foxbin2prg_exe = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg.exe") -nExitCode = 0 -cOrigFile = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg_de.h") -cDestFile = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg.h") -cPath = FileSystemObject.GetParentFolderName( cOrigFile ) -nRet = FileSystemObject.CopyFile( cOrigFile, cDestFile, True ) -oVFP9.DoCmd( "SET DEFAULT TO '" & cPath & "'" ) -oVFP9.DoCmd( "BUILD EXE foxbin2prg.exe FROM foxbin2prg.pjx RECOMPILE" ) -WSHShell.run foxbin2prg_exe -WScript.Quit(nExitCode) From cebecd2312f2b005ee61715f97e38d0fb6b17a4a Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 18 Dec 2014 01:07:13 +0100 Subject: [PATCH 02/21] =?UTF-8?q?Changeset:=20568=20fdbozzo=20-=2015/12/20?= =?UTF-8?q?14=2018:44:18:=20-=20Nuevo=20mensaje=20interactivo=20para=20sel?= =?UTF-8?q?ecci=C3=B3n=20de=20conversi=C3=B3n=20de=20directorio=20-=20Nuev?= =?UTF-8?q?os=20mensajes=20traducidos=20-=20Arreglo=20de=20los=20scripts?= =?UTF-8?q?=20vbs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Convert_VFP9_BIN_2_PRG.vbs | 23 +- Convert_VFP9_PRG_2_BIN.vbs | 23 +- VFP9_FoxBin2Prg.vbs | 23 +- foxbin2prg.prg | 660 +++++++++++++++++++++++-------------- 4 files changed, 453 insertions(+), 276 deletions(-) diff --git a/Convert_VFP9_BIN_2_PRG.vbs b/Convert_VFP9_BIN_2_PRG.vbs index 8a6bebf..cf356c6 100644 --- a/Convert_VFP9_BIN_2_PRG.vbs +++ b/Convert_VFP9_BIN_2_PRG.vbs @@ -13,7 +13,7 @@ ' - Ahora puede seleccionar archivos o directorios, pulsar click derecho y "Enviar a" FoxBin2prg para conversiones batch '--------------------------------------------------------------------------------------------------- Const ForReading = 1 -Dim WSHShell, FileSystemObject +Dim WSHShell, FileSystemObject, cEndOfProcessMsg, cWithErrorsMsg, cConvCancelByUserMsg Dim oVFP9, nExitCode, cEXETool, cCMD, nDebug, lcExt, foxbin2prg_cfg, aFiles(), nFile_Count Dim i, x, str_cfg, aConf, cErrMsg, cFlagGenerateLog, cFlagDontShowErrMsg, cFlagJustShowCall, cFlagRecompile, cFlagNoTimestamps, cErrFile Set WSHShell = WScript.CreateObject("WScript.Shell") @@ -111,20 +111,23 @@ Else Next If GetBit(nDebug, 4) Then - 'If oVFP9.Eval("oFoxBin2prg.l_Error") Then + cEndOfProcessMsg = oVFP9.Eval("_SCREEN.o_FoxBin2Prg_Lang.C_END_OF_PROCESS_LOC") + cWithErrorsMsg = oVFP9.Eval("_SCREEN.o_FoxBin2Prg_Lang.C_WITH_ERRORS_LOC") + cConvCancelByUserMsg = oVFP9.Eval("_SCREEN.o_FoxBin2Prg_Lang.C_CONVERSION_CANCELLED_BY_USER_LOC") + If nExitCode = 1799 Then - MsgBox "Conversion Cancelled by User!", 48, WScript.ScriptName - cErrFile = oVFP9.Eval("FORCEPATH('FoxBin2Prg.LOG',GETENV('TEMP') )") - oVFP9.DoCmd("STRTOFILE( oFoxBin2prg.c_ErrorLog, '" & cErrFile & "' )") + MsgBox cConvCancelByUserMsg & "!", 48+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" + oVFP9.DoCmd("oFoxBin2prg.writeErrorLog_Flush()") + cErrFile = oVFP9.Eval("oFoxBin2prg.c_ErrorLogFile") WSHShell.run cErrFile - ElseIf nExitCode > 0 Then - MsgBox "End of Process! (with errors)", 48, WScript.ScriptName - cErrFile = oVFP9.Eval("FORCEPATH('FoxBin2Prg.LOG',GETENV('TEMP') )") - oVFP9.DoCmd("STRTOFILE( oFoxBin2prg.c_ErrorLog, '" & cErrFile & "' )") + ElseIf oVFP9.Eval("oFoxBin2prg.l_Error") Then + MsgBox cEndOfProcessMsg & "! (" & cWithErrorsMsg & ")", 48+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" + oVFP9.DoCmd("oFoxBin2prg.writeErrorLog_Flush()") + cErrFile = oVFP9.Eval("oFoxBin2prg.c_ErrorLogFile") WSHShell.run cErrFile Else - MsgBox "End of Process!", 64, WScript.ScriptName + MsgBox cEndOfProcessMsg & "!", 64+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" End If End If diff --git a/Convert_VFP9_PRG_2_BIN.vbs b/Convert_VFP9_PRG_2_BIN.vbs index 1790852..234b647 100644 --- a/Convert_VFP9_PRG_2_BIN.vbs +++ b/Convert_VFP9_PRG_2_BIN.vbs @@ -13,7 +13,7 @@ ' - Ahora puede seleccionar archivos o directorios, pulsar click derecho y "Enviar a" FoxBin2prg para conversiones batch '--------------------------------------------------------------------------------------------------- Const ForReading = 1 -Dim WSHShell, FileSystemObject +Dim WSHShell, FileSystemObject, cEndOfProcessMsg, cWithErrorsMsg, cConvCancelByUserMsg Dim oVFP9, nExitCode, cEXETool, cCMD, nDebug, lcExt, foxbin2prg_cfg, aFiles(), nFile_Count Dim i, x, str_cfg, aConf, cErrMsg, cFlagGenerateLog, cFlagDontShowErrMsg, cFlagJustShowCall, cFlagRecompile, cFlagNoTimestamps, cErrFile Set WSHShell = WScript.CreateObject("WScript.Shell") @@ -117,20 +117,23 @@ Else Next If GetBit(nDebug, 4) Then - 'If oVFP9.Eval("oFoxBin2prg.l_Error") Then + cEndOfProcessMsg = oVFP9.Eval("_SCREEN.o_FoxBin2Prg_Lang.C_END_OF_PROCESS_LOC") + cWithErrorsMsg = oVFP9.Eval("_SCREEN.o_FoxBin2Prg_Lang.C_WITH_ERRORS_LOC") + cConvCancelByUserMsg = oVFP9.Eval("_SCREEN.o_FoxBin2Prg_Lang.C_CONVERSION_CANCELLED_BY_USER_LOC") + If nExitCode = 1799 Then - MsgBox "Conversion Cancelled by User!", 48, WScript.ScriptName - cErrFile = oVFP9.Eval("FORCEPATH('FoxBin2Prg.LOG',GETENV('TEMP') )") - oVFP9.DoCmd("STRTOFILE( oFoxBin2prg.c_ErrorLog, '" & cErrFile & "' )") + MsgBox cConvCancelByUserMsg & "!", 48+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" + oVFP9.DoCmd("oFoxBin2prg.writeErrorLog_Flush()") + cErrFile = oVFP9.Eval("oFoxBin2prg.c_ErrorLogFile") WSHShell.run cErrFile - ElseIf nExitCode > 0 Then - MsgBox "End of Process! (with errors)", 48, WScript.ScriptName - cErrFile = oVFP9.Eval("FORCEPATH('FoxBin2Prg.LOG',GETENV('TEMP') )") - oVFP9.DoCmd("STRTOFILE( oFoxBin2prg.c_ErrorLog, '" & cErrFile & "' )") + ElseIf oVFP9.Eval("oFoxBin2prg.l_Error") Then + MsgBox cEndOfProcessMsg & "! (" & cWithErrorsMsg & ")", 48+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" + oVFP9.DoCmd("oFoxBin2prg.writeErrorLog_Flush()") + cErrFile = oVFP9.Eval("oFoxBin2prg.c_ErrorLogFile") WSHShell.run cErrFile Else - MsgBox "End of Process!", 64, WScript.ScriptName + MsgBox cEndOfProcessMsg & "!", 64+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" End If End If diff --git a/VFP9_FoxBin2Prg.vbs b/VFP9_FoxBin2Prg.vbs index 5ef8430..932a5fe 100644 --- a/VFP9_FoxBin2Prg.vbs +++ b/VFP9_FoxBin2Prg.vbs @@ -13,7 +13,7 @@ ' en la carpeta "SendTo" del usuario ' - Ahora puede seleccionar archivos o directorios, pulsar click derecho y "Enviar a" FoxBin2prg para conversiones batch '--------------------------------------------------------------------------------------------------- -Dim WSHShell, FileSystemObject +Dim WSHShell, FileSystemObject, cEndOfProcessMsg, cWithErrorsMsg, cConvCancelByUserMsg Dim nExitCode, cEXETool, cEXETool2, nDebug Set wshShell = CreateObject( "WScript.Shell" ) Set FileSystemObject = WScript.CreateObject("Scripting.FileSystemObject") @@ -101,20 +101,23 @@ Else End If If GetBit(nDebug, 4) Then - 'If oVFP9.Eval("oFoxBin2prg.l_Error") Then + cEndOfProcessMsg = oVFP9.Eval("_SCREEN.o_FoxBin2Prg_Lang.C_END_OF_PROCESS_LOC") + cWithErrorsMsg = oVFP9.Eval("_SCREEN.o_FoxBin2Prg_Lang.C_WITH_ERRORS_LOC") + cConvCancelByUserMsg = oVFP9.Eval("_SCREEN.o_FoxBin2Prg_Lang.C_CONVERSION_CANCELLED_BY_USER_LOC") + If nExitCode = 1799 Then - MsgBox "Conversion Cancelled by User!", 48, WScript.ScriptName - cErrFile = oVFP9.Eval("FORCEPATH('FoxBin2Prg.LOG',GETENV('TEMP') )") - oVFP9.DoCmd("STRTOFILE( oFoxBin2prg.c_ErrorLog, '" & cErrFile & "' )") + MsgBox cConvCancelByUserMsg & "!", 48+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" + oVFP9.DoCmd("oFoxBin2prg.writeErrorLog_Flush()") + cErrFile = oVFP9.Eval("oFoxBin2prg.c_ErrorLogFile") WSHShell.run cErrFile - ElseIf nExitCode > 0 Then - MsgBox "End of Process! (with errors)", 48, WScript.ScriptName - cErrFile = oVFP9.Eval("FORCEPATH('FoxBin2Prg.LOG',GETENV('TEMP') )") - oVFP9.DoCmd("STRTOFILE( oFoxBin2prg.c_ErrorLog, '" & cErrFile & "' )") + ElseIf oVFP9.Eval("oFoxBin2prg.l_Error") Then + MsgBox cEndOfProcessMsg & "! (" & cWithErrorsMsg & ")", 48+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" + oVFP9.DoCmd("oFoxBin2prg.writeErrorLog_Flush()") + cErrFile = oVFP9.Eval("oFoxBin2prg.c_ErrorLogFile") WSHShell.run cErrFile Else - MsgBox "End of Process!", 64, WScript.ScriptName + MsgBox cEndOfProcessMsg & "!", 64+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" End If End If diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 1083630..d99f265 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -403,7 +403,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', 'BIN2PRG-INTERACTIVE', 'PRG2BIN-INTERACTIVE', 'INTERACTIVE') THEN +IF INLIST(UPPER(TRANSFORM(tc_InputFile)), 'BIN2PRG', 'PRG2BIN', 'BIN2PRG-SHOWMSG', 'PRG2BIN-SHOWMSG', 'SHOWMSG', 'INTERACTIVE') THEN pcParamX = tc_InputFile tc_InputFile = tcType tcType = pcParamX @@ -521,6 +521,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -562,7 +563,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM c_Language = '' && EN, FR, ES, DE c_loc_processing_file = '' c_loc_process_progress = '' - c_FB2PRG_EXE_Version = 0 + c_FB2PRG_EXE_Version = '' c_Foxbin2prg_FullPath = '' c_Foxbin2prg_ConfigFile = '' c_CurDir = '' @@ -605,7 +606,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM n_CFG_Actual = 0 n_ID = 0 n_FileHandle = 0 - n_ProcessedFiles = 0 + n_ProcessedFiles = 0 && Contador usado para los archivos file.class.ext + n_ProcessedFilesCount = 0 && Contador genérico de procesados o_Conversor = NULL o_Frm_Avance = NULL o_WSH = NULL @@ -669,7 +671,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM 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) ) + THIS.c_FB2PRG_EXE_Version = 'v' + IIF( AGETFILEVERSION( laValues, lc_Foxbin2prg_EXE ) = 0, TRANSFORM(THIS.n_FB2PRG_Version), laValues(4) ) + ADDPROPERTY(_SCREEN, 'c_FB2PRG_EXE_Version', THIS.c_FB2PRG_EXE_Version) ADDPROPERTY(_SCREEN, 'ExitCode', 0) THIS.writeLog( THIS.c_Foxbin2prg_FullPath + ' (EXE Version: ' + THIS.c_FB2PRG_EXE_Version + ')' ) THIS.EvaluarConfiguracion() @@ -1817,10 +1820,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM TRY LOCAL I, lcPath, lnCodError, lcFileSpec, lcFile, laFiles(1,5), laDirInfo(1,5) ; - , lnFileCount, lcErrorInfo, lcErrorFile, lnPCount, laParams(1) ; + , lnFileCount, lcErrorInfo, lcErrorFile, lnPCount, laParams(1), lnConversionOption ; , loEx AS EXCEPTION ; , loFSO AS Scripting.FileSystemObject ; - , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' ; + , loLang AS CL_LANG OF 'FOXBIN2PRG.PRG' ; + , loFrm_Interactive AS frm_interactive OF 'FOXBIN2PRG.PRG' ; , loWSH AS WScript.Shell WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' @@ -1876,9 +1880,14 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .writeLog( ) *-- ARCHIVO DE CONFIGURACIÓN PRINCIPAL + IF INLIST( LOWER(tc_InputFile), LOWER([C:\DESA\foxbin2prg\pruebas varias\v1.19.36\FB2P_Ideas__RyanHarris\New (Option On)\myClasslib.frmbase.vc2]) ) + *fdb* + SET STEP ON + ENDIF + *IF NOT .l_ConfigEvaluated THEN .EvaluarConfiguracion( @tcDontShowProgress, @tcDontShowErrors, @tcNoTimestamps, @tcDebug, @tcRecompile, @tcBackupLevels ; - , @tcClearUniqueID, @tcOptimizeByFilestamp ) + , @tcClearUniqueID, @tcOptimizeByFilestamp, @tc_InputFile ) *ENDIF loLang = _SCREEN.o_FoxBin2Prg_Lang @@ -1897,20 +1906,46 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM OTHERWISE *-- EJECUCIÓN NORMAL + + IF '-SHOWMSG' $ ('-' + tcType) AND NOT '-BIN2PRG' $ ('-' + tcType) AND NOT '-PRG2BIN' $ ('-' + tcType) AND DIRECTORY(tc_InputFile) + *-- Se seleccionó un directorio y se puede elegir: Bin2Txt, Txt2Bin y Nada + loFrm_Interactive = CREATEOBJECT('frm_interactive') + loFrm_Interactive.Show() + READ EVENTS + lnConversionOption = loFrm_Interactive.opg_conversiontype.Value + loFrm_Interactive.Release() + loFrm_Interactive = NULL + + DO CASE + CASE lnConversionOption = 1 && Bin2Txt + tcType = tcType + '-BIN2PRG' + + CASE lnConversionOption = 2 && Txt2Bin + tcType = tcType + '-PRG2BIN' + + OTHERWISE && None + EXIT + ENDCASE + ENDIF + + IF .l_ShowProgress .cargar_frm_avance() ENDIF + *-- Evaluación de FileSpec de entrada DO CASE 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( loLang.C_ASTERISK_EXT_NOT_ALLOWED_LOC, 0+48+4096, loLang.C_FOXBIN2PRG_ERROR_CAPTION_LOC, 60000 ) + EXIT ELSE ERROR loLang.C_ASTERISK_EXT_NOT_ALLOWED_LOC ENDIF + CASE '*' $ JUSTSTEM( tc_InputFile ) *-- SE QUIEREN TODOS LOS ARCHIVOS DE UNA EXTENSIÓN lcFileSpec = FULLPATH( tc_InputFile ) @@ -1937,248 +1972,262 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .writeLog_Flush() ENDFOR + EXIT - 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 + CASE '-BIN2PRG' $ ('-' + tcType) DO CASE - CASE .l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile) - CD (tcRecompile) - CASE .l_Recompile - CD (tc_InputFile) + CASE DIRECTORY(tc_InputFile) + *-- CONVERSION BIN2PRG DE UN DIRECTORIO Y SUBDIRECTORIOS + DO CASE + CASE .l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile) + CD (tcRecompile) + CASE .l_Recompile + CD (tc_InputFile) + ENDCASE + + .c_LogFile = ADDBS(tc_InputFile) + tcType + '.LOG' + + IF .l_Debug + ERASE ( .c_LogFile ) + ENDIF + + .ObtenerArchivosDelDirectorio( tc_InputFile, @laFiles, @lnFileCount ) + + FOR I = 1 TO lnFileCount + lcFile = laFiles(I) + + IF NOT .TieneSoporte_Bin2Prg( JUSTEXT(lcFile) ) OR NOT FILE(lcFile) THEN + LOOP + ENDIF + + .AvanceDelProceso( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) + lnCodError = .Convertir( lcFile, @toModulo, @toEx, .F., tcOriginalFileName ) + .writeLog_Flush() + + DO CASE + CASE lnCodError = 1799 && Conversion Cancelled + ERROR 1799 + + CASE lnCodError > 0 + .ejecutar_WriteErrorLog( @toEx ) + ENDCASE + ENDFOR + + .AvanceDelProceso( loLang.C_END_OF_PROCESS_LOC, lnFileCount, lnFileCount, 0 ) + EXIT + + CASE NOT .TieneSoporte_Bin2Prg( JUSTEXT(lcFile) ) OR NOT FILE(lcFile) + EXIT + ENDCASE - .c_LogFile = ADDBS(tc_InputFile) + tcType + '.LOG' - IF .l_Debug - ERASE ( .c_LogFile ) - ENDIF + CASE '-PRG2BIN' $ ('-' + tcType) + DO CASE + CASE 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 - .ObtenerArchivosDelDirectorio( tc_InputFile, @laFiles, @lnFileCount ) + .c_LogFile = ADDBS(tc_InputFile) + tcType + '.LOG' - FOR I = 1 TO lnFileCount - lcFile = laFiles(I) - - IF NOT .TieneSoporte_Bin2Prg( JUSTEXT(lcFile) ) OR NOT FILE(lcFile) THEN - LOOP + IF .l_Debug + ERASE ( .c_LogFile ) ENDIF - .AvanceDelProceso( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) - lnCodError = .Convertir( lcFile, @toModulo, @toEx, .F., tcOriginalFileName ) - .writeLog_Flush() + .ObtenerArchivosDelDirectorio( tc_InputFile, @laFiles, @lnFileCount ) - DO CASE - CASE lnCodError = 1799 && Conversion Cancelled - ERROR 1799 + FOR I = 1 TO lnFileCount + lcFile = laFiles(I) - CASE lnCodError > 0 - .ejecutar_WriteErrorLog( @toEx ) - ENDCASE - ENDFOR + IF NOT .TieneSoporte_Prg2Bin( JUSTEXT(lcFile) ) OR NOT FILE(lcFile) THEN + LOOP + ENDIF - .AvanceDelProceso( loLang.C_END_OF_PROCESS_LOC, lnFileCount, lnFileCount, 0 ) + .AvanceDelProceso( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) + lnCodError = .Convertir( lcFile, @toModulo, @toEx, .T., tcOriginalFileName ) + .writeLog_Flush() + DO CASE + CASE lnCodError = 1799 && Conversion Cancelled + ERROR 1799 + + CASE lnCodError > 0 + .ejecutar_WriteErrorLog( @toEx ) + ENDCASE + ENDFOR + + .AvanceDelProceso( loLang.C_END_OF_PROCESS_LOC, lnFileCount, lnFileCount, 0 ) + EXIT + + CASE NOT .TieneSoporte_Prg2Bin( JUSTEXT(lcFile) ) OR NOT FILE(lcFile) + EXIT - CASE LEFT( tcType,7 ) == 'PRG2BIN' AND DIRECTORY(tc_InputFile) - *-- CONVERSION PRG2BIN DE UN DIRECTORIO Y SUBDIRECTORIOS - DO CASE - CASE .l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile) - CD (tcRecompile) - CASE .l_Recompile - CD (tc_InputFile) ENDCASE - .c_LogFile = ADDBS(tc_InputFile) + tcType + '.LOG' - IF .l_Debug - ERASE ( .c_LogFile ) - ENDIF - - .ObtenerArchivosDelDirectorio( tc_InputFile, @laFiles, @lnFileCount ) - - FOR I = 1 TO lnFileCount - lcFile = laFiles(I) - - IF NOT .TieneSoporte_Prg2Bin( JUSTEXT(lcFile) ) OR NOT FILE(lcFile) THEN - LOOP - ENDIF - - .AvanceDelProceso( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) - lnCodError = .Convertir( lcFile, @toModulo, @toEx, .T., tcOriginalFileName ) - .writeLog_Flush() - - DO CASE - CASE lnCodError = 1799 && Conversion Cancelled - ERROR 1799 - - CASE lnCodError > 0 - .ejecutar_WriteErrorLog( @toEx ) - ENDCASE - ENDFOR - - .AvanceDelProceso( loLang.C_END_OF_PROCESS_LOC, lnFileCount, lnFileCount, 0 ) - - - OTHERWISE - *-- UN ARCHIVO INDIVIDUAL O CONSULTA DE SOPORTE DE ARCHIVO - IF LEN(EVL(tc_InputFile,'')) = 1 - *-- Consulta de soporte de conversión (compatibilidad con SourceSafe) - *-- SourceSafe consulta el tipo de soporte de cada archivo antes del Checkin/Checkout - *-- para saber si se puede hacer Diff y Merge. - *-- Para los códigos de tipo de archivo ver ayuda de "Type Property" - DO CASE - CASE tc_InputFile == FILETYPE_DATABASE - lnCodError = .DBC_Conversion_Support - - CASE tc_InputFile == FILETYPE_FREETABLE - lnCodError = .DBF_Conversion_Support - - CASE tc_InputFile == FILETYPE_FORM - lnCodError = .SCX_Conversion_Support - - CASE tc_InputFile == FILETYPE_LABEL - lnCodError = .LBX_Conversion_Support - - CASE tc_InputFile == FILETYPE_MENU - lnCodError = .MNX_Conversion_Support - - CASE tc_InputFile == FILETYPE_REPORT - lnCodError = .FRX_Conversion_Support - - CASE tc_InputFile == FILETYPE_CLASSLIB - lnCodError = .VCX_Conversion_Support - - CASE tc_InputFile $ FILETYPE_PROJECT && PJX (J no exite en FoxPro, es un valor inventado para evitar conflicto con los tipos existentes) - lnCodError = .PJX_Conversion_Support - - OTHERWISE - lnCodError = -1 - ENDCASE - - ELSE - - DO CASE - CASE UPPER( JUSTEXT( EVL(tc_InputFile,'') ) ) == 'PJX' AND EVL(tcType,'0') == '*' - *-- SE QUIEREN CONVERTIR A TEXTO TODOS LOS ARCHIVOS DE UN PROYECTO - lcFileSpec = FULLPATH( tc_InputFile ) - - DO CASE - CASE .l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile) - CD (tcRecompile) - CASE tcRecompile == '1' - CD (JUSTPATH(lcFileSpec)) - ENDCASE - - .c_LogFile = ADDBS( JUSTPATH( lcFileSpec ) ) + STRTRAN( JUSTFNAME( lcFileSpec ), '*', '_ALL' ) + '.LOG' - - IF .l_Debug - ERASE ( .c_LogFile ) - ENDIF - - SELECT 0 - USE (tc_InputFile) SHARED AGAIN NOUPDATE ALIAS TABLABIN - lnFileCount = 0 - - SCAN FOR NOT DELETED() - lnFileCount = lnFileCount + 1 - DIMENSION laFiles(lnFileCount,1) - laFiles(lnFileCount,1) = ADDBS( JUSTPATH( lcFileSpec ) ) + ALLTRIM( NAME, 0, ' ', CHR(0) ) - ENDSCAN - - USE IN (SELECT("TABLABIN")) - - *-- Luego convierto los archivos incluidos - FOR I = 1 TO lnFileCount - lcFile = laFiles(I,1) - .AvanceDelProceso( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) - - IF .TieneSoporte_Bin2Prg( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) - lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) - .writeLog_Flush() - ENDIF - ENDFOR - - CASE UPPER( JUSTEXT( EVL(tc_InputFile,'') ) ) == 'PJ2' AND EVL(tcType,'0') == '*' - *-- SE QUIEREN CONVERTIR A BINARIO TODOS LOS ARCHIVOS DE UN PROYECTO - lcFileSpec = FULLPATH( tc_InputFile ) - - DO CASE - CASE .l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile) - CD (tcRecompile) - CASE tcRecompile == '1' - CD (JUSTPATH(lcFileSpec)) - ENDCASE - - .c_LogFile = ADDBS( JUSTPATH( lcFileSpec ) ) + STRTRAN( JUSTFNAME( lcFileSpec ), '*', '_ALL' ) + '.LOG' - - IF .l_Debug - ERASE ( .c_LogFile ) - ENDIF - - lnFileCount = ALINES( laFiles, STREXTRACT( FILETOSTR(tc_InputFile), C_BUILDPROJ_I, C_BUILDPROJ_F ), 1+4 ) - - FOR I = lnFileCount TO 1 STEP -1 - IF '.ADD(' $ laFiles(I) - laFiles(I) = ADDBS( JUSTPATH( lcFileSpec ) ) + STREXTRACT( laFiles(I), ".ADD('", "')" ) - laFiles(I) = FORCEEXT( laFiles(I), .Get_Ext2FromExt( UPPER(JUSTEXT(laFiles(I))) ) ) - ELSE - lnFileCount = lnFileCount - 1 - ADEL( laFiles, I ) - DIMENSION laFiles(lnFileCount) - ENDIF - ENDFOR - - *-- Luego convierto los archivos incluidos - FOR I = 1 TO lnFileCount - lcFile = laFiles(I) - .AvanceDelProceso( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) - - IF .TieneSoporte_Prg2Bin( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) - lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) - .writeLog_Flush() - ENDIF - ENDFOR - - CASE EVL(tcType,'0') <> '0' AND EVL(tcTextName,'0') <> '0' - *-- Compatibilidad con SourceSafe - - IF NOT tlGenText - *-- COMPATIBILIDAD CON SOURCESAFE. 30/01/2014 - *-- Create BINARIO desde versión TEXTO - *-- Como el archivo de entrada siempre es el binario cuando se usa SCCAPI, - *-- para regenerar el binario (tlGenText=.F.) se debe usar como - *-- archivo de entrada tcTextName en su lugar. Aquí los intercambio. - tc_InputFile = tcTextName - .l_Recompile = .T. - ENDIF - ENDCASE - - IF FILE(tc_InputFile) - tc_InputFile = LOCFILE(tc_InputFile) - ERASE ( tc_InputFile + '.ERR' ) - - DO CASE - CASE .l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile) - CD (tcRecompile) - CASE tcRecompile == '1' - CD (JUSTPATH(tc_InputFile)) - ENDCASE - - .c_LogFile = tc_InputFile + '.LOG' - - IF .l_Debug - ERASE ( .c_LogFile ) - ENDIF - - lnCodError = .Convertir( tc_InputFile, toModulo, toEx, .T., tcOriginalFileName ) - .AvanceDelProceso( loLang.C_END_OF_PROCESS_LOC, 1, 1, 0 ) - ENDIF - ENDIF ENDCASE + *-- UN ARCHIVO INDIVIDUAL O CONSULTA DE SOPORTE DE ARCHIVO + IF LEN(EVL(tc_InputFile,'')) = 1 + *-- Consulta de soporte de conversión (compatibilidad con SourceSafe) + *-- SourceSafe consulta el tipo de soporte de cada archivo antes del Checkin/Checkout + *-- para saber si se puede hacer Diff y Merge. + *-- Para los códigos de tipo de archivo ver ayuda de "Type Property" + DO CASE + CASE tc_InputFile == FILETYPE_DATABASE + lnCodError = .DBC_Conversion_Support + + CASE tc_InputFile == FILETYPE_FREETABLE + lnCodError = .DBF_Conversion_Support + + CASE tc_InputFile == FILETYPE_FORM + lnCodError = .SCX_Conversion_Support + + CASE tc_InputFile == FILETYPE_LABEL + lnCodError = .LBX_Conversion_Support + + CASE tc_InputFile == FILETYPE_MENU + lnCodError = .MNX_Conversion_Support + + CASE tc_InputFile == FILETYPE_REPORT + lnCodError = .FRX_Conversion_Support + + CASE tc_InputFile == FILETYPE_CLASSLIB + lnCodError = .VCX_Conversion_Support + + CASE tc_InputFile $ FILETYPE_PROJECT && PJX (J no exite en FoxPro, es un valor inventado para evitar conflicto con los tipos existentes) + lnCodError = .PJX_Conversion_Support + + OTHERWISE + lnCodError = -1 + ENDCASE + + ELSE + + DO CASE + CASE UPPER( JUSTEXT( EVL(tc_InputFile,'') ) ) == 'PJX' AND EVL(tcType,'0') == '*' + *-- SE QUIEREN CONVERTIR A TEXTO TODOS LOS ARCHIVOS DE UN PROYECTO + lcFileSpec = FULLPATH( tc_InputFile ) + + DO CASE + CASE .l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile) + CD (tcRecompile) + CASE tcRecompile == '1' + CD (JUSTPATH(lcFileSpec)) + ENDCASE + + .c_LogFile = ADDBS( JUSTPATH( lcFileSpec ) ) + STRTRAN( JUSTFNAME( lcFileSpec ), '*', '_ALL' ) + '.LOG' + + IF .l_Debug + ERASE ( .c_LogFile ) + ENDIF + + SELECT 0 + USE (tc_InputFile) SHARED AGAIN NOUPDATE ALIAS TABLABIN + lnFileCount = 0 + + SCAN FOR NOT DELETED() + lnFileCount = lnFileCount + 1 + DIMENSION laFiles(lnFileCount,1) + laFiles(lnFileCount,1) = ADDBS( JUSTPATH( lcFileSpec ) ) + ALLTRIM( NAME, 0, ' ', CHR(0) ) + ENDSCAN + + USE IN (SELECT("TABLABIN")) + + *-- Luego convierto los archivos incluidos + FOR I = 1 TO lnFileCount + lcFile = laFiles(I,1) + .AvanceDelProceso( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) + + IF .TieneSoporte_Bin2Prg( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) + lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) + .writeLog_Flush() + ENDIF + ENDFOR + + CASE UPPER( JUSTEXT( EVL(tc_InputFile,'') ) ) == 'PJ2' AND EVL(tcType,'0') == '*' + *-- SE QUIEREN CONVERTIR A BINARIO TODOS LOS ARCHIVOS DE UN PROYECTO + lcFileSpec = FULLPATH( tc_InputFile ) + + DO CASE + CASE .l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile) + CD (tcRecompile) + CASE tcRecompile == '1' + CD (JUSTPATH(lcFileSpec)) + ENDCASE + + .c_LogFile = ADDBS( JUSTPATH( lcFileSpec ) ) + STRTRAN( JUSTFNAME( lcFileSpec ), '*', '_ALL' ) + '.LOG' + + IF .l_Debug + ERASE ( .c_LogFile ) + ENDIF + + lnFileCount = ALINES( laFiles, STREXTRACT( FILETOSTR(tc_InputFile), C_BUILDPROJ_I, C_BUILDPROJ_F ), 1+4 ) + + FOR I = lnFileCount TO 1 STEP -1 + IF '.ADD(' $ laFiles(I) + laFiles(I) = ADDBS( JUSTPATH( lcFileSpec ) ) + STREXTRACT( laFiles(I), ".ADD('", "')" ) + laFiles(I) = FORCEEXT( laFiles(I), .Get_Ext2FromExt( UPPER(JUSTEXT(laFiles(I))) ) ) + ELSE + lnFileCount = lnFileCount - 1 + ADEL( laFiles, I ) + DIMENSION laFiles(lnFileCount) + ENDIF + ENDFOR + + *-- Luego convierto los archivos incluidos + FOR I = 1 TO lnFileCount + lcFile = laFiles(I) + .AvanceDelProceso( loLang.C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) + + IF .TieneSoporte_Prg2Bin( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) + lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) + .writeLog_Flush() + ENDIF + ENDFOR + + CASE EVL(tcType,'0') <> '0' AND EVL(tcTextName,'0') <> '0' + *-- Compatibilidad con SourceSafe + + IF NOT tlGenText + *-- COMPATIBILIDAD CON SOURCESAFE. 30/01/2014 + *-- Create BINARIO desde versión TEXTO + *-- Como el archivo de entrada siempre es el binario cuando se usa SCCAPI, + *-- para regenerar el binario (tlGenText=.F.) se debe usar como + *-- archivo de entrada tcTextName en su lugar. Aquí los intercambio. + tc_InputFile = tcTextName + .l_Recompile = .T. + ENDIF + ENDCASE + + IF FILE(tc_InputFile) + tc_InputFile = LOCFILE(tc_InputFile) + ERASE ( tc_InputFile + '.ERR' ) + + DO CASE + CASE .l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile) + CD (tcRecompile) + CASE tcRecompile == '1' + CD (JUSTPATH(tc_InputFile)) + ENDCASE + + .c_LogFile = tc_InputFile + '.LOG' + + IF .l_Debug + ERASE ( .c_LogFile ) + ENDIF + + lnCodError = .Convertir( tc_InputFile, toModulo, toEx, .T., tcOriginalFileName ) + *.AvanceDelProceso( loLang.C_END_OF_PROCESS_LOC, 1, 1, 0 ) + ENDIF + ENDIF + ENDCASE ENDWITH && THIS @@ -2189,9 +2238,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM loLang = CREATEOBJECT("CL_LANG","EN") ENDIF - IF '-INTERACTIVE' $ ('-' + tcType) THEN + IF '-SHOWMSG' $ ('-' + tcType) THEN toEx.UserValue = 'tc_InputDir = [' + TRANSFORM(tc_InputFile) + ']' - THIS.l_ShowErrors = .F. && La opción "INTERACTIVE" muestra su propio mensaje + THIS.l_ShowErrors = .F. && La opción "SHOWMSG" muestra su propio mensaje ENDIF THIS.ejecutar_WriteErrorLog( @toEx, @lcErrorInfo ) @@ -2221,26 +2270,26 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CD (JUSTPATH(THIS.c_CurDir)) DO CASE - CASE '-INTERACTIVE' $ ('-' + tcType) + CASE '-SHOWMSG' $ ('-' + tcType) DO CASE CASE lnCodError = 1799 && Conversion Cancelled - MESSAGEBOX( loLang.C_CONVERSION_CANCELLED_BY_USER_LOC + '!', 0+48+4096, 'FoxBin2Prg', 60000 ) + MESSAGEBOX( loLang.C_CONVERSION_CANCELLED_BY_USER_LOC + '! [p:' + TRANSFORM( THIS.n_ProcessedFilesCount ) + ']', 0+48+4096, 'FoxBin2Prg', 60000 ) THIS.writeErrorLog_Flush( ) loWSH.Run( THIS.c_ErrorLogFile, 1, .F. ) CASE THIS.l_Error - MESSAGEBOX( loLang.C_END_OF_PROCESS_LOC + '! (' + loLang.C_WITH_ERRORS_LOC + ')', 0+48+4096, 'FoxBin2Prg', 60000 ) + MESSAGEBOX( loLang.C_END_OF_PROCESS_LOC + '! (' + loLang.C_WITH_ERRORS_LOC + ') [p:' + TRANSFORM( THIS.n_ProcessedFilesCount ) + ']', 0+48+4096, 'FoxBin2Prg', 60000 ) THIS.writeErrorLog_Flush( ) loWSH.Run( THIS.c_ErrorLogFile, 1, .F. ) OTHERWISE - MESSAGEBOX( loLang.C_END_OF_PROCESS_LOC, 0+64+4096, 'FoxBin2Prg', 60000 ) + MESSAGEBOX( loLang.C_END_OF_PROCESS_LOC + ' [p:' + TRANSFORM( THIS.n_ProcessedFilesCount ) + ']', 0+64+4096, 'FoxBin2Prg', 60000 ) ENDCASE - CASE THIS.l_Debug - THIS.writeErrorLog_Flush( ) + *CASE THIS.l_Debug + * THIS.writeErrorLog_Flush( ) ENDCASE @@ -2580,6 +2629,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF loConversor.Convertir( @toModulo, .F., THIS ) + .n_ProcessedFilesCount = .n_ProcessedFilesCount + 1 .writeLog() .writeLog(.o_Conversor.c_TextLog) && Recojo el LOG que haya generado el conversor @@ -3158,7 +3208,7 @@ DEFINE CLASS frm_avance AS FORM PROCEDURE Init 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.CAPTION = 'FoxBin2Prg ' + _SCREEN.c_FB2PRG_EXE_Version + ' - ' + loLang.C_PROCESS_PROGRESS_LOC + ' (' + loLang.C_PRESS_ESC_TO_CANCEL + ')' THIS.nValue = 0 THIS.nValue2 = 0 ENDPROC @@ -3182,6 +3232,82 @@ DEFINE CLASS frm_avance AS FORM ENDDEFINE +******************************************************************************************************************* +DEFINE CLASS frm_interactive AS form + Height = 102 + Width = 380 + ShowWindow = 2 + DoCreate = .T. + AutoCenter = .T. + BorderStyle = 2 + Caption = 'FoxBin2Prg ' + _SCREEN.c_FB2PRG_EXE_Version + ' - ' + _SCREEN.o_FoxBin2Prg_Lang.C_CONVERT_FOLDER_LOC + ControlBox = .F. + AlwaysOnTop = .T. + BackColor = RGB(255,255,255) + Name = "frm_interactive" + + + ADD OBJECT lbl_title AS label WITH ; + WordWrap = .T., ; + Alignment = 2, ; + BackStyle = 0, ; + Caption = _SCREEN.o_FoxBin2Prg_Lang.C_CONVERT_FOLDER_QUESTION_LOC, ; + Height = 36, ; + Left = 12, ; + Top = 16, ; + Width = 356, ; + Name = "lbl_Title" + + + ADD OBJECT opg_conversiontype AS optiongroup WITH ; + ButtonCount = 3, ; + BackStyle = 0, ; + BorderStyle = 0, ; + Value = 3, ; + Height = 28, ; + Left = 40, ; + Top = 64, ; + Width = 300, ; + Name = "opg_ConversionType", ; + Option1.Caption = _SCREEN.o_FoxBin2Prg_Lang.C_CONVERT_FOLDER_BIN2PRG_LOC, ; + Option1.Value = 1, ; + Option1.Height = 27, ; + Option1.Left = 0, ; + Option1.Style = 1, ; + Option1.Top = 0, ; + Option1.Width = 92, ; + Option1.Name = "opt_Bin2Prg", ; + Option2.Caption = _SCREEN.o_FoxBin2Prg_Lang.C_CONVERT_FOLDER_PRG2BIN_LOC, ; + Option2.Height = 27, ; + Option2.Left = 104, ; + Option2.Style = 1, ; + Option2.Top = 0, ; + Option2.Width = 92, ; + Option2.Name = "opt_Prg2Bin", ; + Option3.Caption = _SCREEN.o_FoxBin2Prg_Lang.C_CONVERT_FOLDER_NONE_LOC, ; + Option3.Height = 27, ; + Option3.Left = 208, ; + Option3.Style = 1, ; + Option3.Top = 0, ; + Option3.Width = 92, ; + Option3.Name = "opt_None" + + PROCEDURE Init + *LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' + *loLang = _SCREEN.o_FoxBin2Prg_Lang + ENDPROC + + + PROCEDURE opg_conversiontype.InteractiveChange + *-- Selección + THISFORM.Hide() + CLEAR EVENTS + ENDPROC + + +ENDDEFINE + + ******************************************************************************************************************* DEFINE CLASS c_conversor_base AS SESSION #IF .F. @@ -6983,13 +7109,15 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin TRY LOCAL lnCodError, laCodeLines(1), lnCodeLines, lcInputFile, lcInputFile_Class, lnFileCount, laFiles(1,5) ; - , laLineasExclusion(1), lnBloquesExclusion, I + , laLineasExclusion(1), lnBloquesExclusion, I ; + , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' WITH THIS AS c_conversor_prg_a_vcx OF 'FOXBIN2PRG.PRG' STORE 0 TO lnCodError, lnCodeLines STORE '' TO C_FB2PRG_CODE STORE NULL TO toModulo + loLang = _SCREEN.o_FoxBin2Prg_Lang toModulo = CREATEOBJECT('CL_MODULO') IF toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_RedirectClassPerFileToMain @@ -7012,9 +7140,12 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin *-- Verificación de las Clases, si son Externas y se indicó chequearlas IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toModulo._ExternalClasses , JUSTEXT( JUSTSTEM( lcInputFile_Class ) ), 1, 0, 1, 1+2+4 ) = 0 + .writeLog( C_TAB + '- ' + loLang.C_EXCLUDING_CLASS_LOC + ' ' + JUSTFNAME( lcInputFile_Class ) ) + .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_EXCLUDING_CLASS_LOC + ' ' + JUSTFNAME( lcInputFile_Class ) ) LOOP && Salteo esta clase ENDIF + .writeLog( C_TAB + '+ ' + loLang.C_INCLUDING_CLASS_LOC + ' ' + JUSTFNAME( lcInputFile_Class ) ) toFoxBin2Prg.normalizarCapitalizacionArchivos( .T., lcInputFile_Class ) C_FB2PRG_CODE = C_FB2PRG_CODE + FILETOSTR( lcInputFile_Class ) ENDFOR @@ -7333,13 +7464,15 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin TRY LOCAL lnCodError, laCodeLines(1), lnCodeLines, lcInputFile, lcInputFile_Class, lnFileCount, laFiles(1,5) ; - , laLineasExclusion(1), lnBloquesExclusion, I + , laLineasExclusion(1), lnBloquesExclusion, I ; + , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' - WITH THIS AS c_conversor_prg_a_scx OF 'FOXBIN2PRG.PRG' + WITH THIS AS c_conversor_prg_a_vcx OF 'FOXBIN2PRG.PRG' STORE 0 TO lnCodError, lnCodeLines STORE '' TO C_FB2PRG_CODE STORE NULL TO toModulo + loLang = _SCREEN.o_FoxBin2Prg_Lang toModulo = CREATEOBJECT('CL_MODULO') IF toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_RedirectClassPerFileToMain @@ -7362,9 +7495,12 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin *-- Verificación de las Clases, si son Externas y se indicó chequearlas IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toModulo._ExternalClasses , JUSTEXT( JUSTSTEM( lcInputFile_Class ) ), 1, 0, 1, 1+2+4 ) = 0 + .writeLog( C_TAB + '- ' + loLang.C_EXCLUDING_CLASS_LOC + ' ' + JUSTFNAME( lcInputFile_Class ) ) + .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_EXCLUDING_CLASS_LOC + ' ' + JUSTFNAME( lcInputFile_Class ) ) LOOP && Salteo esta clase ENDIF + .writeLog( C_TAB + '+ ' + loLang.C_INCLUDING_CLASS_LOC + ' ' + JUSTFNAME( lcInputFile_Class ) ) toFoxBin2Prg.normalizarCapitalizacionArchivos( .T., lcInputFile_Class ) C_FB2PRG_CODE = C_FB2PRG_CODE + FILETOSTR( lcInputFile_Class ) ENDFOR @@ -21756,6 +21892,11 @@ DEFINE CLASS CL_LANG AS Custom 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_CONVERT_FOLDER_LOC = "Convert Folder" + C_CONVERT_FOLDER_BIN2PRG_LOC = "Binary to Text" + C_CONVERT_FOLDER_PRG2BIN_LOC = "Text to Binary" + C_CONVERT_FOLDER_NONE_LOC = "None" + C_CONVERT_FOLDER_QUESTION_LOC = "What conversion should be performed on the files of this folder?" C_CONVERTER_UNLOAD_LOC = "Converter unload" C_CONVERTING_FILE_LOC = "Converting file" C_DATA_ERROR_CANT_PARSE_UNPAIRING_DOUBLE_QUOTES_LOC = "Data Error: Can't parse because of unpaired double-quotes on line <>" @@ -21763,6 +21904,7 @@ DEFINE CLASS CL_LANG AS Custom 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_EXCLUDING_CLASS_LOC = "Excluding class" 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 [<>]" @@ -21781,6 +21923,7 @@ DEFINE CLASS CL_LANG AS Custom 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_INCLUDING_CLASS_LOC = "Including class" 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" @@ -21801,7 +21944,8 @@ DEFINE CLASS CL_LANG AS Custom 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_WARNING_LOC = "WARNING!" + C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC = "WARNING!" + CR_LF+ "MAKE SURE YOU ARE NOT USING A TABLE ALIAS ON INDEX KEY EXPRESSIONS!! (ex: index on <>.campo tag keyname)" C_WITH_ERRORS_LOC = "with errors" @@ -21879,6 +22023,11 @@ DEFINE CLASS CL_LANG AS Custom .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_CONVERT_FOLDER_LOC = "Convertir un Dossier" + .C_CONVERT_FOLDER_BIN2PRG_LOC = "Binaire en Texte" + .C_CONVERT_FOLDER_PRG2BIN_LOC = "Texte à Binaire" + .C_CONVERT_FOLDER_NONE_LOC = "Aucun" + .C_CONVERT_FOLDER_QUESTION_LOC = "Que la conversion doit être effectuée sur les fichiers de ce dossier?" .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 <>" @@ -21886,6 +22035,7 @@ DEFINE CLASS CL_LANG AS Custom .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_EXCLUDING_CLASS_LOC = "Exclusing class" .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 [<>]" @@ -21904,6 +22054,7 @@ DEFINE CLASS CL_LANG AS Custom .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_INCLUDING_CLASS_LOC = "Including class" .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é" @@ -21924,7 +22075,8 @@ DEFINE CLASS CL_LANG AS Custom .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_WARNING_LOC = "AVERTISSEMENT!" + .C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC = "AVERTISSEMENT!" + CR_LF+ "ASSUREZ VOUS NE UTILISEZ PAS UN ALIAS DE TABLE SUR LES EXPRESSIONS INDEX CLÉS!! (exemple: index on <>.campo tag keyname)" .C_WITH_ERRORS_LOC = "avec des erreurs" CASE INLIST(tcLanguage, '34', 'ES') && Spanish (Español) @@ -21937,14 +22089,20 @@ DEFINE CLASS CL_LANG AS Custom .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_CONVERSION_CANCELLED_BY_USER_LOC = "Conversión Cancelada por el usuario" + .C_CONVERT_FOLDER_LOC = "Convertir Carpeta" + .C_CONVERT_FOLDER_BIN2PRG_LOC = "Binario a Texto" + .C_CONVERT_FOLDER_PRG2BIN_LOC = "Texto a Binario" + .C_CONVERT_FOLDER_NONE_LOC = "Ninguna" + .C_CONVERT_FOLDER_QUESTION_LOC = "¿Qué tipo de conversión se debe hacer en esta carpeta?" .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_EXCLUDING_CLASS_LOC = "Excluyendo clase" .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 [<>]" @@ -21964,6 +22122,7 @@ DEFINE CLASS CL_LANG AS Custom .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_INCLUDING_CLASS_LOC = "Incluyendo clase" .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 [<>]" @@ -21983,7 +22142,8 @@ DEFINE CLASS CL_LANG AS Custom .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_WARNING_LOC = "¡ATENCIÓN!" + .C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC = "¡ATENCIÓN!" + CR_LF+ "ASEGÚRESE DE QUE NO ESTÁ USANDO UN ALIAS DE TABLA EN LAS EXPRESIONES DE LOS ÍNDICES!! (ej: index on <>.campo tag nombreclave)" .C_WITH_ERRORS_LOC = "con errores" CASE INLIST(tcLanguage, '49', 'DE') && German (Alemán) @@ -21997,6 +22157,11 @@ DEFINE CLASS CL_LANG AS Custom .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_CONVERT_FOLDER_LOC = "Konvertieren Verzeichnis" + .C_CONVERT_FOLDER_BIN2PRG_LOC = "Binär zu Text" + .C_CONVERT_FOLDER_PRG2BIN_LOC = "Text zu Binär" + .C_CONVERT_FOLDER_NONE_LOC = "Nichts" + .C_CONVERT_FOLDER_QUESTION_LOC = "Welche Umwandlung sollte sich auf die Dateien dieses Verzeichnis durchgeführt werden?" .C_CONVERTER_UNLOAD_LOC = "Konverter wird entladen" .C_CONVERTING_FILE_LOC = "Konvertiere Datei" .C_DATA_ERROR_CANT_PARSE_UNPAIRING_DOUBLE_QUOTES_LOC = "Datenfehler: Keine Analyse möglich da ungepaarte Anführungszeichen in Zeile <>" @@ -22009,6 +22174,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_EXCLUDING_CLASS_LOC = "ohne Klasse" .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" @@ -22022,6 +22188,7 @@ DEFINE CLASS CL_LANG AS Custom .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_INCLUDING_CLASS_LOC = "einschließlich Klasse" .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" @@ -22042,7 +22209,8 @@ DEFINE CLASS CL_LANG AS Custom .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_WARNING_LOC = "WARNUNG!" + .C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC = "WARNUNG!" + CR_LF+ "SICHERSTELLEN DAS KEIN TABELLENALIAS IN DEM INDEXAUSDRUCK BENUTZT WIRD!! (z.B.: index on <>.campo tag keyname)" .C_WITH_ERRORS_LOC = "mit Fehlern" OTHERWISE && Si no existe, se queda el por defecto From c5c1324a48d2f009a7d1961da8aa4186639f763a Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 18 Dec 2014 19:28:09 +0100 Subject: [PATCH 03/21] Changeset: 569 fdbozzo - 18/12/2014 01:07:14: - Salida del form Interactive con tecla Esc --- foxbin2prg.prg | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index d99f265..fb89d91 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -3256,6 +3256,7 @@ DEFINE CLASS frm_interactive AS form Left = 12, ; Top = 16, ; Width = 356, ; + KeyPreview = .T., ; Name = "lbl_Title" @@ -3298,7 +3299,18 @@ DEFINE CLASS frm_interactive AS form ENDPROC - PROCEDURE opg_conversiontype.InteractiveChange + PROCEDURE KeyPress + LPARAMETERS nKeyCode, nShiftAltCtrl + + IF nKeyCode = 27 THEN + THISFORM.opg_ConversionType.Value = 3 + THISFORM.Hide() + CLEAR EVENTS + ENDIF + ENDPROC + + + PROCEDURE opg_conversiontype.Click *-- Selección THISFORM.Hide() CLEAR EVENTS From 1184fb0018366e153602251ede7ff82c24e038e5 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 19 Dec 2014 23:34:01 +0100 Subject: [PATCH 04/21] =?UTF-8?q?Changeset:=20570=20fdbozzo=20-=2018/12/20?= =?UTF-8?q?14=2019:28:09:=20-=20Log=20de=20informaci=C3=B3n=20y=20errores?= =?UTF-8?q?=20mejorado=20-=20Bug=20fix=20multi-config:=20Arreglada=20la=20?= =?UTF-8?q?multiconfiguraci=C3=B3n,=20que=20no=20se=20estaba=20aplicando?= =?UTF-8?q?=20correctamente=20a=20todos=20los=20archivos=20del=20directori?= =?UTF-8?q?o=20-=20Nuevo=20di=C3=A1logo=20de=20selecci=C3=B3n=20del=20tipo?= =?UTF-8?q?=20de=20conversi=C3=B3n=20cuando=20se=20elige=20un=20directorio?= =?UTF-8?q?=20con=20la=20palabra=20clave=20INTERACTIVE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 266 ++++++++++++++++++++++++++++--------------------- 1 file changed, 154 insertions(+), 112 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index fb89d91..9fea821 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -652,11 +652,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ERASE (THIS.c_ErrorLogFile) ERASE (THIS.c_LogFile) - THIS.writeLog( REPLICATE( '*', 100 ) ) - THIS.writeLog( 'FoxBin2Prg INIT' ) - THIS.writeLog( REPLICATE( '*', 100 ) ) - THIS.ChangeLanguage() - lcSys16 = SYS(16) IF LEFT(lcSys16,10) == 'PROCEDURE ' lnPosProg = AT(" ", lcSys16, 2) + 1 @@ -667,14 +662,20 @@ 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 = 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 = 'v' + IIF( AGETFILEVERSION( laValues, lc_Foxbin2prg_EXE ) = 0, TRANSFORM(THIS.n_FB2PRG_Version), laValues(4) ) ADDPROPERTY(_SCREEN, 'c_FB2PRG_EXE_Version', THIS.c_FB2PRG_EXE_Version) ADDPROPERTY(_SCREEN, 'ExitCode', 0) - THIS.writeLog( THIS.c_Foxbin2prg_FullPath + ' (EXE Version: ' + THIS.c_FB2PRG_EXE_Version + ')' ) + + THIS.writeLog( REPLICATE( '*', 100 ) ) + THIS.writeLog( 'FoxBin2Prg ' + THIS.c_FB2PRG_EXE_Version + ' INIT' ) + THIS.writeLog( REPLICATE( '*', 100 ) ) + THIS.writeLog( 'Executing: ' + THIS.c_Foxbin2prg_FullPath + ' (EXE Version: ' + THIS.c_FB2PRG_EXE_Version + ')' ) + THIS.ChangeLanguage() + + THIS.o_FSO = CREATEOBJECT("Scripting.FileSystemObject") + THIS.o_WSH = CREATEOBJECT("WScript.Shell") + THIS.o_Configuration = CREATEOBJECT("COLLECTION") THIS.EvaluarConfiguracion() RELEASE lcSys16, lnPosProg, lc_Foxbin2prg_EXE, laValues RETURN @@ -1289,14 +1290,19 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .n_CFG_Actual = 0 .l_CFG_CachedAccess = .F. lc_CFG_Path = UPPER( JUSTPATH( lcConfigFile ) ) + lo_CFG = THIS IF .l_Main_CFG_Loaded AND lo_Configuration.Count > 0 .n_CFG_Actual = lo_Configuration.GetKey( lc_CFG_Path ) && 0=No hay CFG cacheada, +1=Hay CFG cacheada - .l_CFG_CachedAccess = (.n_CFG_Actual > 0) + + IF .n_CFG_Actual > 0 THEN + lo_CFG = lo_Configuration.Item(.n_CFG_Actual) + .l_CFG_CachedAccess = .T. + ELSE + .l_CFG_CachedAccess = .F. + ENDIF ENDIF - lo_CFG = THIS - DO CASE CASE .n_CFG_Actual = 0 *-- Si no se encontró un CFG cacheado, se busca si existe un archivo CFG en disco @@ -1315,7 +1321,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- 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( '> ' + loLang.C_READING_CFG_VALUES_FROM_DISK_LOC + ':' ) .writeLog( C_TAB + loLang.C_CONFIGFILE_LOC + ' ' + lcConfigFile ) IF .l_AllowMultiConfig AND .l_ConfigEvaluated AND .l_Main_CFG_Loaded @@ -1529,6 +1535,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM * .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 @@ -1559,7 +1566,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM lo_CFG.l_OptimizeByFilestamp = NOT (TRANSFORM(tcOptimizeByFilestamp) == '0') ENDIF - .writeLog( '> USING THIS CONFIG:' ) + .writeLog( '> ' + UPPER(loLang.C_USING_THIS_SETTINGS_LOC) + ':' ) + .writeLog( C_TAB + 'n_CFG_Actual: ' + TRANSFORM(.n_CFG_Actual) + ICASE(.n_CFG_Actual=1, ' [MASTER]', ' [SECONDARY]') ) .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) ) @@ -1576,7 +1584,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .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 .n_CFG_Actual > 0 AND ISNULL( .o_Configuration( .n_CFG_Actual ) ) THEN @@ -1880,10 +1887,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .writeLog( ) *-- ARCHIVO DE CONFIGURACIÓN PRINCIPAL - IF INLIST( LOWER(tc_InputFile), LOWER([C:\DESA\foxbin2prg\pruebas varias\v1.19.36\FB2P_Ideas__RyanHarris\New (Option On)\myClasslib.frmbase.vc2]) ) - *fdb* - SET STEP ON - ENDIF *IF NOT .l_ConfigEvaluated THEN .EvaluarConfiguracion( @tcDontShowProgress, @tcDontShowErrors, @tcNoTimestamps, @tcDebug, @tcRecompile, @tcBackupLevels ; @@ -1909,10 +1912,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM IF '-SHOWMSG' $ ('-' + tcType) AND NOT '-BIN2PRG' $ ('-' + tcType) AND NOT '-PRG2BIN' $ ('-' + tcType) AND DIRECTORY(tc_InputFile) *-- Se seleccionó un directorio y se puede elegir: Bin2Txt, Txt2Bin y Nada + .writeLog( loLang.C_INTERACTIVE_DIRECTORY_SELECTION_LOC ) loFrm_Interactive = CREATEOBJECT('frm_interactive') loFrm_Interactive.Show() READ EVENTS - lnConversionOption = loFrm_Interactive.opg_conversiontype.Value + lnConversionOption = loFrm_Interactive.n_ConversionType loFrm_Interactive.Release() loFrm_Interactive = NULL @@ -1924,6 +1928,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM tcType = tcType + '-PRG2BIN' OTHERWISE && None + ERROR 1799 && Conversion Cancelled EXIT ENDCASE ENDIF @@ -1976,9 +1981,13 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE '-BIN2PRG' $ ('-' + tcType) + .writeLog( '> ' + loLang.C_OPTION_LOC + ': BIN2PRG' ) + DO CASE CASE DIRECTORY(tc_InputFile) *-- CONVERSION BIN2PRG DE UN DIRECTORIO Y SUBDIRECTORIOS + .writeLog( '> InputFile ' + loLang.C_IS_A_DIRECTORY_LOC ) + DO CASE CASE .l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile) CD (tcRecompile) @@ -2017,16 +2026,21 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .AvanceDelProceso( loLang.C_END_OF_PROCESS_LOC, lnFileCount, lnFileCount, 0 ) EXIT - CASE NOT .TieneSoporte_Bin2Prg( JUSTEXT(lcFile) ) OR NOT FILE(lcFile) + CASE NOT .TieneSoporte_Bin2Prg( JUSTEXT(tc_InputFile) ) OR NOT FILE(tc_InputFile) + .writeLog( '> InputFile ' + loLang.C_IS_UNSUPPORTED_LOC ) EXIT ENDCASE CASE '-PRG2BIN' $ ('-' + tcType) + .writeLog( '> ' + loLang.C_OPTION_LOC + ': PRG2BIN' ) + DO CASE CASE DIRECTORY(tc_InputFile) *-- CONVERSION PRG2BIN DE UN DIRECTORIO Y SUBDIRECTORIOS + .writeLog( '> InputFile ' + loLang.C_IS_A_DIRECTORY_LOC ) + DO CASE CASE .l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile) CD (tcRecompile) @@ -2065,7 +2079,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .AvanceDelProceso( loLang.C_END_OF_PROCESS_LOC, lnFileCount, lnFileCount, 0 ) EXIT - CASE NOT .TieneSoporte_Prg2Bin( JUSTEXT(lcFile) ) OR NOT FILE(lcFile) + CASE NOT .TieneSoporte_Prg2Bin( JUSTEXT(tc_InputFile) ) OR NOT FILE(tc_InputFile) + .writeLog( '> InputFile ' + loLang.C_IS_UNSUPPORTED_LOC ) EXIT ENDCASE @@ -2113,6 +2128,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM DO CASE CASE UPPER( JUSTEXT( EVL(tc_InputFile,'') ) ) == 'PJX' AND EVL(tcType,'0') == '*' *-- SE QUIEREN CONVERTIR A TEXTO TODOS LOS ARCHIVOS DE UN PROYECTO + .writeLog( '> ' + loLang.C_CONVERT_ALL_FILES_IN_A_PROJECT_LOC + ': ' + loLang.C_BINARY_TO_TEXT_LOC ) lcFileSpec = FULLPATH( tc_InputFile ) DO CASE @@ -2153,6 +2169,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE UPPER( JUSTEXT( EVL(tc_InputFile,'') ) ) == 'PJ2' AND EVL(tcType,'0') == '*' *-- SE QUIEREN CONVERTIR A BINARIO TODOS LOS ARCHIVOS DE UN PROYECTO + .writeLog( '> ' + loLang.C_CONVERT_ALL_FILES_IN_A_PROJECT_LOC + ': ' + loLang.C_TEXT_TO_BINARY_LOC ) lcFileSpec = FULLPATH( tc_InputFile ) DO CASE @@ -2207,6 +2224,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDCASE IF FILE(tc_InputFile) + .writeLog( '> InputFile ' + loLang.C_IS_A_FILE_LOC ) tc_InputFile = LOCFILE(tc_InputFile) ERASE ( tc_InputFile + '.ERR' ) @@ -2238,10 +2256,12 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM loLang = CREATEOBJECT("CL_LANG","EN") ENDIF - IF '-SHOWMSG' $ ('-' + tcType) THEN - toEx.UserValue = 'tc_InputDir = [' + TRANSFORM(tc_InputFile) + ']' + IF '-SHOWMSG' $ ('-' + tcType) OR '-INTERACTIVE' $ ('-' + tcType) THEN + toEx.UserValue = toEx.UserValue + 'tc_InputDir = [' + TRANSFORM(tc_InputFile) + ']' + CR_LF THIS.l_ShowErrors = .F. && La opción "SHOWMSG" muestra su propio mensaje ENDIF + + toEx.UserValue = toEx.UserValue + 'tc_InputFile = ' + TRANSFORM(tc_InputFile) + CR_LF THIS.ejecutar_WriteErrorLog( @toEx, @lcErrorInfo ) @@ -2270,7 +2290,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CD (JUSTPATH(THIS.c_CurDir)) DO CASE - CASE '-SHOWMSG' $ ('-' + tcType) + CASE '-SHOWMSG' $ ('-' + tcType) OR '-INTERACTIVE' $ ('-' + tcType) DO CASE CASE lnCodError = 1799 && Conversion Cancelled @@ -2309,7 +2329,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM 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 + tcErrorInfo = THIS.Exception2Str(@toEx) + CR_LF + CR_LF + loLang.C_SOURCEFILE_LOC + TRANSFORM(THIS.c_InputFile) ADDPROPERTY(_SCREEN, 'ExitCode', toEx.ERRORNO) *-- Escribo la información de error en la variable log de errores @@ -2362,7 +2382,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF .c_InputFile = loFSO.GetAbsolutePathName( FORCEPATH( laDirFile(1,1), JUSTPATH(.c_InputFile) ) ) - + *-- VERIFICO SI HAY ARCHIVO DE CONFIGURACIÓN SECUNDARIO .EvaluarConfiguracion() @@ -2378,7 +2398,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM 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 + ']' ) + *.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 @@ -2651,7 +2672,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CATCH TO toEx lnCodError = toEx.ERRORNO - lcErrorInfo = THIS.Exception2Str(toEx) + CR_LF + CR_LF + loLang.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 @@ -3022,7 +3043,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM LOCAL lcError lcError = 'Error ' + TRANSFORM(toEx.ERRORNO) + ', ' + toEx.MESSAGE + CR_LF ; + toEx.PROCEDURE + ', ' + TRANSFORM(toEx.LINENO) + CR_LF ; - + toEx.LINECONTENTS + CR_LF + CR_LF ; + + toEx.LINECONTENTS + CR_LF ; + EVL(toEx.USERVALUE,'') RETURN lcError ENDPROC @@ -3244,6 +3265,7 @@ DEFINE CLASS frm_interactive AS form ControlBox = .F. AlwaysOnTop = .T. BackColor = RGB(255,255,255) + n_ConversionType = 3 Name = "frm_interactive" @@ -3260,63 +3282,61 @@ DEFINE CLASS frm_interactive AS form Name = "lbl_Title" - ADD OBJECT opg_conversiontype AS optiongroup WITH ; - ButtonCount = 3, ; - BackStyle = 0, ; - BorderStyle = 0, ; - Value = 3, ; - Height = 28, ; - Left = 40, ; + ADD OBJECT cmd_Bin2Prg AS commandbutton WITH ; Top = 64, ; - Width = 300, ; - Name = "opg_ConversionType", ; - Option1.Caption = _SCREEN.o_FoxBin2Prg_Lang.C_CONVERT_FOLDER_BIN2PRG_LOC, ; - Option1.Value = 1, ; - Option1.Height = 27, ; - Option1.Left = 0, ; - Option1.Style = 1, ; - Option1.Top = 0, ; - Option1.Width = 92, ; - Option1.Name = "opt_Bin2Prg", ; - Option2.Caption = _SCREEN.o_FoxBin2Prg_Lang.C_CONVERT_FOLDER_PRG2BIN_LOC, ; - Option2.Height = 27, ; - Option2.Left = 104, ; - Option2.Style = 1, ; - Option2.Top = 0, ; - Option2.Width = 92, ; - Option2.Name = "opt_Prg2Bin", ; - Option3.Caption = _SCREEN.o_FoxBin2Prg_Lang.C_CONVERT_FOLDER_NONE_LOC, ; - Option3.Height = 27, ; - Option3.Left = 208, ; - Option3.Style = 1, ; - Option3.Top = 0, ; - Option3.Width = 92, ; - Option3.Name = "opt_None" - - PROCEDURE Init - *LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' - *loLang = _SCREEN.o_FoxBin2Prg_Lang - ENDPROC + Left = 40, ; + Height = 27, ; + Width = 92, ; + Caption = _SCREEN.o_FoxBin2Prg_Lang.C_BINARY_TO_TEXT_LOC, ; + Name = "cmd_Bin2Prg" - PROCEDURE KeyPress - LPARAMETERS nKeyCode, nShiftAltCtrl - - IF nKeyCode = 27 THEN - THISFORM.opg_ConversionType.Value = 3 - THISFORM.Hide() - CLEAR EVENTS - ENDIF - ENDPROC + ADD OBJECT cmd_Prg2Bin AS commandbutton WITH ; + Top = 64, ; + Left = 144, ; + Height = 27, ; + Width = 92, ; + Caption = _SCREEN.o_FoxBin2Prg_Lang.C_TEXT_TO_BINARY_LOC, ; + Name = "cmd_Prg2Bin" - PROCEDURE opg_conversiontype.Click - *-- Selección + ADD OBJECT cmd_None AS commandbutton WITH ; + Top = 64, ; + Left = 248, ; + Height = 27, ; + Width = 92, ; + Caption = _SCREEN.o_FoxBin2Prg_Lang.C_CONVERT_FOLDER_NONE_LOC, ; + Cancel = .T., ; + Name = "cmd_None" + + + PROCEDURE do_selection THISFORM.Hide() CLEAR EVENTS ENDPROC + PROCEDURE cmd_Bin2Prg.Click + *-- Selección + THISFORM.n_ConversionType = 1 + THISFORM.do_selection() + ENDPROC + + + PROCEDURE cmd_Prg2Bin.Click + *-- Selección + THISFORM.n_ConversionType = 2 + THISFORM.do_selection() + ENDPROC + + + PROCEDURE cmd_None.Click + *-- Selección + THISFORM.n_ConversionType = 3 + THISFORM.do_selection() + ENDPROC + + ENDDEFINE @@ -7051,24 +7071,12 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF - LOCAL lnItem, I, X + LOCAL lnItem, I, X, lcClaseExterna LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' loLang = _SCREEN.o_FoxBin2Prg_Lang *-- Verificación de las Clases, si son Externas y se indicó chequearlas IF toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_ClassPerFileCheck - 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_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_LOC)) - - *CASE toModulo._ExternalClasses_Count <> toModulo._Clases_Count THEN - ENDCASE - FOR I = 1 TO toModulo._ExternalClasses_Count lnItem = 0 @@ -7080,8 +7088,9 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDFOR IF lnItem = 0 THEN + lcClaseExterna = FORCEPATH( JUSTSTEM(toFoxBin2Prg.c_InputFile) + '.' + toModulo._ExternalClasses(I) + '.' + JUSTEXT(toFoxBin2Prg.c_InputFile), JUSTPATH(toFoxBin2Prg.c_InputFile) ) *ERROR 'No se ha encontrado la clase externa [' + toModulo._ExternalClasses(I) + '] en el archivo [' + toFoxBin2Prg.c_InputFile + ']' - ERROR (TEXTMERGE(loLang.C_EXTERNAL_CLASS_NAME_DOES_NOT_FOUND_LOC)) + ERROR ( loLang.C_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC + ' [' + lcClaseExterna + ']' ) ENDIF toModulo._Clases(lnItem)._Checked = .T. @@ -7146,14 +7155,14 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin lcInputFile = FORCEPATH( JUSTSTEM( JUSTSTEM(.c_InputFile) ), JUSTPATH(.c_InputFile) ) + '.*.' + JUSTEXT(.c_InputFile) lnFileCount = ADIR( laFiles, lcInputFile, "", 1 ) ASORT( laFiles, 1, 0, 0, 1) - + FOR I = 1 TO lnFileCount lcInputFile_Class = FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile ) *-- Verificación de las Clases, si son Externas y se indicó chequearlas IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toModulo._ExternalClasses , JUSTEXT( JUSTSTEM( lcInputFile_Class ) ), 1, 0, 1, 1+2+4 ) = 0 - .writeLog( C_TAB + '- ' + loLang.C_EXCLUDING_CLASS_LOC + ' ' + JUSTFNAME( lcInputFile_Class ) ) - .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_EXCLUDING_CLASS_LOC + ' ' + JUSTFNAME( lcInputFile_Class ) ) + .writeLog( C_TAB + '- ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) + .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) LOOP && Salteo esta clase ENDIF @@ -7507,8 +7516,8 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin *-- Verificación de las Clases, si son Externas y se indicó chequearlas IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toModulo._ExternalClasses , JUSTEXT( JUSTSTEM( lcInputFile_Class ) ), 1, 0, 1, 1+2+4 ) = 0 - .writeLog( C_TAB + '- ' + loLang.C_EXCLUDING_CLASS_LOC + ' ' + JUSTFNAME( lcInputFile_Class ) ) - .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_EXCLUDING_CLASS_LOC + ' ' + JUSTFNAME( lcInputFile_Class ) ) + .writeLog( C_TAB + '- ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) + .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) LOOP && Salteo esta clase ENDIF @@ -21902,11 +21911,13 @@ 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_CONFIGFILE_LOC = "Using configuration file:" C_CONVERSION_CANCELLED_BY_USER_LOC = "Conversion Cancelled by the user" + C_CONVERT_ALL_FILES_IN_A_PROJECT_LOC = "Convert all files in a Project" C_CONVERT_FOLDER_LOC = "Convert Folder" - C_CONVERT_FOLDER_BIN2PRG_LOC = "Binary to Text" - C_CONVERT_FOLDER_PRG2BIN_LOC = "Text to Binary" + C_BINARY_TO_TEXT_LOC = "Binary to Text" + C_TEXT_TO_BINARY_LOC = "Text to Binary" C_CONVERT_FOLDER_NONE_LOC = "None" C_CONVERT_FOLDER_QUESTION_LOC = "What conversion should be performed on the files of this folder?" C_CONVERTER_UNLOAD_LOC = "Converter unload" @@ -21916,10 +21927,9 @@ DEFINE CLASS CL_LANG AS Custom 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_EXCLUDING_CLASS_LOC = "Excluding class" 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_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC = "External class was not found" 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" @@ -21936,12 +21946,18 @@ DEFINE CLASS CL_LANG AS Custom C_FOXBIN2PRG_WARN_CAPTION_LOC = "FOXBIN2PRG: WARNING!" C_GENERATED_FILE_SIZE_LOC = "Generated file size" C_INCLUDING_CLASS_LOC = "Including class" + C_INTERACTIVE_DIRECTORY_SELECTION_LOC = "Interactive Directory Selection" + C_IS_A_FILE_LOC = "is a FILE" + C_IS_A_DIRECTORY_LOC = "is a DIRECTORY" + C_IS_UNSUPPORTED_LOC = "is unsupported" C_LANGUAGE_LOC = "EN" C_MENU_NOT_IN_VFP9_FORMAT_LOC = "Menu [<>] is NOT in VFP 9 Format! - Please convert to VFP 9 with MODIFY MENU '<>'" C_NAMES_CAPITALIZATION_PROGRAM_FOUND_LOC = "* Names capitalization program [<>] found" C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC = "* Names capitalization program [<>] not found" C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC = "Object [<>] does not contain oReg object (level <>)" C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC = "Operation not recognized. Only SETNAME and GETNAME allowed." + C_OPTION_LOC = "Option" + C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC = "The outer class does not match the inner classes" C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC = "Optimization: Output file [<>] was not overwritten because it is the same as was generated." C_OUTPUTFILE_NEWER_THAN_INPUTFILE_LOC = "Optimization: Output file [<>] was not regenerated because it is newer than the inputfile." C_PRESS_ESC_TO_CANCEL = "Press Esc to Cancel" @@ -21949,6 +21965,7 @@ DEFINE CLASS CL_LANG AS Custom C_PROCESSING_LOC = "Processing file" C_PROCESS_PROGRESS_LOC = "Process Progress:" C_PROPERTY_NAME_NOT_RECOGNIZED_LOC = "Property [<>] is not recognized." + C_READING_CFG_VALUES_FROM_DISK_LOC = "READING CFG VALUES FROM DISK" C_REPORT_NOT_IN_VFP9_FORMAT_LOC = "Report [<>] is NOT in VFP 9 Format! - Please convert to VFP 9 with MODIFY REPORT '<>'" C_REQUESTING_CAPITALIZATION_OF_FILE_LOC = "- Requesting capitalization of file [<>]" C_SCANNING_FILE_AND_DIR_INFO_LOC = "Scanning file and directory information for" @@ -21956,6 +21973,7 @@ DEFINE CLASS CL_LANG AS Custom C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_LOC = "Nesting structure error. ENDPROC expected but found ENDDEFINE on class <> (<>), line <> of file <>" C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_2_LOC = "Nesting structure error. ENDPROC expected but found ENDDEFINE on class <> (<>.<>), line <> of file <>" C_UNKNOWN_CLASS_NAME_LOC = "Unknown class [<>]" + C_USING_THIS_SETTINGS_LOC = "Using this settings" C_WARNING_LOC = "WARNING!" C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC = "WARNING!" + CR_LF+ "MAKE SURE YOU ARE NOT USING A TABLE ALIAS ON INDEX KEY EXPRESSIONS!! (ex: index on <>.campo tag keyname)" C_WITH_ERRORS_LOC = "with errors" @@ -22033,11 +22051,13 @@ 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_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" .C_CONVERT_FOLDER_LOC = "Convertir un Dossier" - .C_CONVERT_FOLDER_BIN2PRG_LOC = "Binaire en Texte" - .C_CONVERT_FOLDER_PRG2BIN_LOC = "Texte à Binaire" + .C_BINARY_TO_TEXT_LOC = "Binaire en Texte" + .C_TEXT_TO_BINARY_LOC = "Texte à Binaire" .C_CONVERT_FOLDER_NONE_LOC = "Aucun" .C_CONVERT_FOLDER_QUESTION_LOC = "Que la conversion doit être effectuée sur les fichiers de ce dossier?" .C_CONVERTER_UNLOAD_LOC = "Convertisseur déchargement" @@ -22047,10 +22067,9 @@ DEFINE CLASS CL_LANG AS Custom .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_EXCLUDING_CLASS_LOC = "Exclusing class" .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_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC = "Aucune classe externe est trouvé" .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é" @@ -22067,12 +22086,17 @@ DEFINE CLASS CL_LANG AS Custom .C_FOXBIN2PRG_WARN_CAPTION_LOC = "FOXBIN2PRG: AVERTISSEMENT!" .C_GENERATED_FILE_SIZE_LOC = "Taille du fichier généré" .C_INCLUDING_CLASS_LOC = "Including class" + .C_INTERACTIVE_DIRECTORY_SELECTION_LOC = "Sélection répertoire interactive" + .C_IS_A_FILE_LOC = "est un FICHIER" + .C_IS_A_DIRECTORY_LOC = "est un RÉPERTOIRE" + .C_IS_UNSUPPORTED_LOC = "ne est pas supporté" .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_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC = "La classe externe ne correspond pas à la classe interne" .C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC = "Optimisation: fichier de sortie [<>] ne était pas écrasé parce que ce est la même que celle générée." .C_OUTPUTFILE_NEWER_THAN_INPUTFILE_LOC = "Optimisation: fichier de sortie [<>] n'a pas été régénéré car il est plus récent que le fichier d'entrée." .C_PRESS_ESC_TO_CANCEL = "Appuyez sur Esc pour Annuler" @@ -22080,6 +22104,7 @@ DEFINE CLASS CL_LANG AS Custom .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_READING_CFG_VALUES_FROM_DISK_LOC = "VALEURS LECTURE CFG À PARTIR DU DISQUE" .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" @@ -22087,6 +22112,7 @@ DEFINE CLASS CL_LANG AS Custom .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_USING_THIS_SETTINGS_LOC = "Utilisation de ce paramètre" .C_WARNING_LOC = "AVERTISSEMENT!" .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" @@ -22100,11 +22126,13 @@ 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_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" .C_CONVERT_FOLDER_LOC = "Convertir Carpeta" - .C_CONVERT_FOLDER_BIN2PRG_LOC = "Binario a Texto" - .C_CONVERT_FOLDER_PRG2BIN_LOC = "Texto a Binario" + .C_BINARY_TO_TEXT_LOC = "Binario a Texto" + .C_TEXT_TO_BINARY_LOC = "Texto a Binario" .C_CONVERT_FOLDER_NONE_LOC = "Ninguna" .C_CONVERT_FOLDER_QUESTION_LOC = "¿Qué tipo de conversión se debe hacer en esta carpeta?" .C_CONVERTER_UNLOAD_LOC = "Descarga del conversor" @@ -22114,10 +22142,9 @@ DEFINE CLASS CL_LANG AS Custom .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_EXCLUDING_CLASS_LOC = "Excluyendo clase" .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_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC = "No se encontró la clase externa" .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" @@ -22135,11 +22162,16 @@ DEFINE CLASS CL_LANG AS Custom .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_INCLUDING_CLASS_LOC = "Incluyendo clase" + .C_INTERACTIVE_DIRECTORY_SELECTION_LOC = "Selección Interactiva de Directorio" + .C_IS_A_FILE_LOC = "es un ARCHIVO" + .C_IS_A_DIRECTORY_LOC = "es un DIRECTORIO" + .C_IS_UNSUPPORTED_LOC = "no está soportado" .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_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC = "La clase externa no coincide con la clase interna" .C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC = "Optimización: El archivo de salida [<>] no se sobreescribe por ser igual al generado." .C_OUTPUTFILE_NEWER_THAN_INPUTFILE_LOC = "Optimización: El archivo de salida [<>] no se regenera por ser más nuevo que el de entrada." .C_PRESS_ESC_TO_CANCEL = "Pulse Esc para Cancelar" @@ -22147,6 +22179,7 @@ DEFINE CLASS CL_LANG AS Custom .C_PROCESSING_LOC = "Procesando archivo" .C_PROCESS_PROGRESS_LOC = "Avance del proceso:" .C_PROPERTY_NAME_NOT_RECOGNIZED_LOC = "Propiedad [<>] no reconocida." + .C_READING_CFG_VALUES_FROM_DISK_LOC = "LEYENDO VALORES DEL ARCHIVO CFG DEL DISCO" .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" @@ -22154,6 +22187,7 @@ DEFINE CLASS CL_LANG AS Custom .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_USING_THIS_SETTINGS_LOC = "Usando esta configuración" .C_WARNING_LOC = "¡ATENCIÓN!" .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" @@ -22167,11 +22201,13 @@ DEFINE CLASS CL_LANG AS Custom .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_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" .C_CONVERT_FOLDER_LOC = "Konvertieren Verzeichnis" - .C_CONVERT_FOLDER_BIN2PRG_LOC = "Binär zu Text" - .C_CONVERT_FOLDER_PRG2BIN_LOC = "Text zu Binär" + .C_BINARY_TO_TEXT_LOC = "Binär zu Text" + .C_TEXT_TO_BINARY_LOC = "Text zu Binär" .C_CONVERT_FOLDER_NONE_LOC = "Nichts" .C_CONVERT_FOLDER_QUESTION_LOC = "Welche Umwandlung sollte sich auf die Dateien dieses Verzeichnis durchgeführt werden?" .C_CONVERTER_UNLOAD_LOC = "Konverter wird entladen" @@ -22186,10 +22222,9 @@ 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_EXCLUDING_CLASS_LOC = "ohne Klasse" .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_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC = "Keine externe Klasse 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 ; @@ -22201,12 +22236,17 @@ DEFINE CLASS CL_LANG AS Custom .C_FOXBIN2PRG_WARN_CAPTION_LOC = "FOXBIN2PRG: WARNUNG!" .C_GENERATED_FILE_SIZE_LOC = "Generierte Dateigröße" .C_INCLUDING_CLASS_LOC = "einschließlich Klasse" + .C_INTERACTIVE_DIRECTORY_SELECTION_LOC = "Auswählen interaktive Verzeichnis" + .C_IS_A_FILE_LOC = "ist eine DATEI" + .C_IS_A_DIRECTORY_LOC = "ist ein VERZEICHNIS" + .C_IS_UNSUPPORTED_LOC = "wird nicht unterstützt" .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_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC = "Die äußere Klasse nicht die innere Klassifizierung anzeigen lassen" .C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC = "Optimierung: Ausgabedatei [<>] wurde nicht überschrieben da sie dieselbe ist wie die neu generierte." .C_OUTPUTFILE_NEWER_THAN_INPUTFILE_LOC = "Optimierung: Ausgabedatei [<>] wurde nicht erneuert da sie neuer ist als die Ursprungsdatei." .C_PRESS_ESC_TO_CANCEL = "Drücken Sie Esc für Abbrechen" @@ -22214,6 +22254,7 @@ DEFINE CLASS CL_LANG AS Custom .C_PROCESSING_LOC = "Bearbeite Datei" .C_PROCESS_PROGRESS_LOC = "Bearbeitungsfortschritt:" .C_PROPERTY_NAME_NOT_RECOGNIZED_LOC = "Eigenschaft [<>] nicht erkannt." + .C_READING_CFG_VALUES_FROM_DISK_LOC = "LESEWERTE CFG-DATEI AUF DER FESTPLATTE" .C_REPORT_NOT_IN_VFP9_FORMAT_LOC = "Report [<>] ist NICHT in VFP 9 Format! - Bitte zuerst nach VFP 9 konvertieren mit MODIFY REPORT '<>'" .C_REQUESTING_CAPITALIZATION_OF_FILE_LOC = "- Forder Großschreibung für Datei [<>] an" .C_SCANNING_FILE_AND_DIR_INFO_LOC = "Scannen Datei- und Verzeichnisinformationen für" @@ -22221,6 +22262,7 @@ DEFINE CLASS CL_LANG AS Custom .C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_LOC = "Fehler in Verschachtelungsstruktur. ENDPROC erwartet, aber es wurde ENDDEFINE in Klasse <> (<>), Zeile <> der Datei <> gefunden" .C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_2_LOC = "Fehler in Verschachtelungsstruktur. ENDPROC wurde erwartet, aber es wurde ENDDEFINE in Klasse <> (<>.<>), Zeile <> der Datei <> gefunden" .C_UNKNOWN_CLASS_NAME_LOC = "Unbekannte Klasse [<>]" + .C_USING_THIS_SETTINGS_LOC = "Mit dieser einstellung" .C_WARNING_LOC = "WARNUNG!" .C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC = "WARNUNG!" + CR_LF+ "SICHERSTELLEN DAS KEIN TABELLENALIAS IN DEM INDEXAUSDRUCK BENUTZT WIRD!! (z.B.: index on <>.campo tag keyname)" .C_WITH_ERRORS_LOC = "mit Fehlern" From 1536a4dbe0342423c25a6bdd5253101ec5272e31 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 19 Dec 2014 23:56:24 +0100 Subject: [PATCH 05/21] Changeset: 571 fdbozzo - 19/12/2014 23:34:01: - Mejoras multiidioma --- foxbin2prg.prg | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 9fea821..02f0f3d 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -1867,9 +1867,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM tcType = UPPER( EVL(tcType,'') ) .writeLog( REPLICATE( '*', 100 ) ) - .writeLog( 'MAIN EXECUTION' ) + .writeLog( loLang.C_MAIN_EXECUTION_LOC ) .writeLog( REPLICATE( '*', 100 ) ) - .writeLog( '> EXTERNAL PARAMETERS' ) + .writeLog( '> ' + loLang.C_EXTERNAL_PARAMETERS_LOC + ':' ) .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' ) ) ) @@ -21930,6 +21930,7 @@ DEFINE CLASS CL_LANG AS Custom C_EXTENSION_RECONFIGURATION_LOC = "Extension Reconfiguration:" C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES_LOC = "External class count (<>) does not match found classes (<>) for file [<>]" C_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC = "External class was not found" + C_EXTERNAL_PARAMETERS_LOC = "EXTERNAL PARAMETERS" C_FIELD_NOT_FOUND_ON_FILE_STRUCTURE_LOC = "Field [<>] not found in structure of file <>" C_FILE_DOESNT_EXIST_LOC = "File does not exist:" C_FILE_NAME_IS_NOT_SUPPORTED_LOC = "File [<<.c_InputFile>>] is not supported" @@ -21951,6 +21952,7 @@ DEFINE CLASS CL_LANG AS Custom C_IS_A_DIRECTORY_LOC = "is a DIRECTORY" C_IS_UNSUPPORTED_LOC = "is unsupported" C_LANGUAGE_LOC = "EN" + C_MAIN_EXECUTION_LOC = "MAIN EXECUTION" C_MENU_NOT_IN_VFP9_FORMAT_LOC = "Menu [<>] is NOT in VFP 9 Format! - Please convert to VFP 9 with MODIFY MENU '<>'" C_NAMES_CAPITALIZATION_PROGRAM_FOUND_LOC = "* Names capitalization program [<>] found" C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC = "* Names capitalization program [<>] not found" @@ -22070,6 +22072,7 @@ DEFINE CLASS CL_LANG AS Custom .C_EXTENSION_RECONFIGURATION_LOC = "Extension Reconfiguration:" .C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES_LOC = "Nombre de classe externe (<>) ne correspond pas classes trouvées (<>) pour le fichier [<>]" .C_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC = "Aucune classe externe est trouvé" + .C_EXTERNAL_PARAMETERS_LOC = "PARAMÈTRES EXTERNES" .C_FIELD_NOT_FOUND_ON_FILE_STRUCTURE_LOC = "Champ [<< laProps (I) >>] ne trouve pas dans la structure du fichier DBF <<('TABLABIN')>>" .C_FILE_DOESNT_EXIST_LOC = "Fichier ne existe pas:" .C_FILE_NAME_IS_NOT_SUPPORTED_LOC = "File [<<.c_InputFile>>] ne est pas supporté" @@ -22091,6 +22094,7 @@ DEFINE CLASS CL_LANG AS Custom .C_IS_A_DIRECTORY_LOC = "est un RÉPERTOIRE" .C_IS_UNSUPPORTED_LOC = "ne est pas supporté" .C_LANGUAGE_LOC = "FR" + .C_MAIN_EXECUTION_LOC = "EXÉCUTION PRINCIPALE" .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" @@ -22145,6 +22149,7 @@ DEFINE CLASS CL_LANG AS Custom .C_EXTENSION_RECONFIGURATION_LOC = "Reconfiguración de extensión:" .C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES_LOC = "El conteo de clases externas (<>) no coincide con la cantidad encontrada (<>) para el archivo [<>]" .C_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC = "No se encontró la clase externa" + .C_EXTERNAL_PARAMETERS_LOC = "PARÁMETROS EXTERNOS" .C_FIELD_NOT_FOUND_ON_FILE_STRUCTURE_LOC = "No se encontró el campo [<>] en la estructura del archivo <>" .C_FILE_DOESNT_EXIST_LOC = "El archivo no existe:" .C_FILE_NAME_IS_NOT_SUPPORTED_LOC = "El archivo [<<.c_InputFile>>] no está soportado" @@ -22167,6 +22172,7 @@ DEFINE CLASS CL_LANG AS Custom .C_IS_A_DIRECTORY_LOC = "es un DIRECTORIO" .C_IS_UNSUPPORTED_LOC = "no está soportado" .C_LANGUAGE_LOC = "ES" + .C_MAIN_EXECUTION_LOC = "EJECUCIÓN PRINCIPAL" .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 <>)" @@ -22225,6 +22231,7 @@ DEFINE CLASS CL_LANG AS Custom .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_WAS_NOT_FOUND_LOC = "Keine externe Klasse gefunden" + .C_EXTERNAL_PARAMETERS_LOC = "EXTERNE PARAMETER" .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 ; @@ -22241,6 +22248,7 @@ DEFINE CLASS CL_LANG AS Custom .C_IS_A_DIRECTORY_LOC = "ist ein VERZEICHNIS" .C_IS_UNSUPPORTED_LOC = "wird nicht unterstützt" .C_LANGUAGE_LOC = "DE" + .C_MAIN_EXECUTION_LOC = "HAUPTAUSFÜHRUNGS" .C_MENU_NOT_IN_VFP9_FORMAT_LOC = "Menu [<>] ist NICHT in VFP 9 Format! - Bitte zuerst nach VFP 9 konvertieren mit MODIFY MENU '<>'" .C_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" From 1572ef6a57b705e687837d8d81fe3eb611531ffb Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 20 Dec 2014 13:44:27 +0100 Subject: [PATCH 06/21] =?UTF-8?q?Changeset:=20572=20fdbozzo=20-=2019/12/20?= =?UTF-8?q?14=2023:56:24:=20-=20Arreglo=20de=20la=20multiconfiguraci=C3=B3?= =?UTF-8?q?n:=20No=20se=20estaba=20detectando=20el=20caso=20de=20que=20inp?= =?UTF-8?q?utFile=20sea=20un=20directorio,=20y=20se=20usaba=20un=20CFG=20i?= =?UTF-8?q?ncorrecto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 125 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 90 insertions(+), 35 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 02f0f3d..f1085bb 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -389,6 +389,10 @@ LPARAMETERS tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDeb #DEFINE SERVERINSTANCE_SINGLEUSE 1 && Single use server #DEFINE SERVERINSTANCE_NOTCREATABLE 2 && Instances creatable only inside Visual FoxPro #DEFINE SERVERINSTANCE_MULTIUSE 3 && Multi-use server + +*-- FileTypes for ADIR() +#DEFINE C_FILETYPE_DIRECTORY "D" +#DEFINE C_FILETYPE_FILE "F" *-- Fin / End LOCAL loCnv AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' @@ -1261,10 +1265,27 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM PROCEDURE EvaluarConfiguracion + *-------------------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * tcDontShowProgress (v? IN ) '1' para inhabilitar la barra de progreso + * tcDontShowErrors (v? IN ) '1' para no mostrar mensajes de error (MESSAGEBOX) + * tcNoTimestamps (v? IN ) Indica si se debe anular el timestamp ('1') o no ('0' ó vacío) + * tcDebug (v? IN ) '1' para habilitar modo debug (SOLO DESARROLLO) + * tcRecompile (v? IN ) Indica recompilar ('1') el binario una vez regenerado. [Cambio de funcionamiento por defecto] + * Este cambio es para ganar tiempo, velocidad y seguridad. Además la recompilación que hace FoxBin2Prg + * se hace desde el directorio del archivo, con lo que las referencias relativas pueden + * generar errores de compilación, típicamente los #include. + * NOTA: Si en vez de '1' se indica un Path (p.ej, el del proyecto, se usará como base para recompilar + * tcExtraBackupLevels (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) + * tc_InputFile (v! IN ) Nombre completo (fullpath) del archivo a convertir o nombre del directorio a procesar + * tc_InputFile_Type (@? IN ) Tipo de archivo de entrada: (D)irectory o (F)ile + *-------------------------------------------------------------------------------------------------------------- LPARAMETERS tcDontShowProgress, tcDontShowErrors, tcNoTimestamps, tcDebug, tcRecompile, tcExtraBackupLevels ; - , tcClearUniqueID, tcOptimizeByFilestamp, tc_InputFile + , tcClearUniqueID, tcOptimizeByFilestamp, tc_InputFile, tcInputFile_Type - LOCAL lcConfigFile, llExiste_CFG_EnDisco, laConfig(1), I, lcConfData, lcExt, lcValue, lc_CFG_Path, lcConfigLine, laDir(1,5) ; + LOCAL lcConfigFile, llExiste_CFG_EnDisco, laConfig(1), I, lcConfData, lcExt, lcValue, lc_CFG_Path, lcConfigLine, laDirInfo(1,5) ; , lo_CFG AS CL_CFG OF 'FOXBIN2PRG.PRG' ; , lo_Configuration AS Collection ; , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' ; @@ -1278,12 +1299,26 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM lcConfigFile = .c_Foxbin2prg_ConfigFile tc_InputFile = EVL(tc_InputFile, .c_InputFile) .c_InputFile = tc_InputFile + tcInputFile_Type = EVL(tcInputFile_Type,'') + + *-- Determino el tipo de InputFile (Archivo o Directorio) + IF EMPTY(tcInputFile_Type) AND NOT EMPTY(tc_InputFile) + IF ADIR(laDirInfo, tc_InputFile, "D") = 1 AND SUBSTR( laDirInfo(1,5), 5, 1 ) = "D" THEN + tcInputFile_Type = C_FILETYPE_DIRECTORY + ELSE + tcInputFile_Type = C_FILETYPE_FILE + ENDIF + 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) ) + IF tcInputFile_Type == C_FILETYPE_DIRECTORY THEN + lcConfigFile = FORCEPATH( 'foxbin2prg.cfg', tc_InputFile ) + ELSE + lcConfigFile = FORCEPATH( 'foxbin2prg.cfg', JUSTPATH(tc_InputFile) ) + ENDIF ENDIF lo_Configuration = .o_Configuration @@ -1306,7 +1341,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM 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 ) + llExiste_CFG_EnDisco = ( ADIR( laDirInfo, lcConfigFile ) = 1 ) IF NOT llExiste_CFG_EnDisco .l_CFG_CachedAccess = .T. && Es cacheado porque sin archivo CFG usa config.interna @@ -1327,16 +1362,14 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM 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 ) && La NULL se carga solo cuando no hay Main_CFG_loaded todavía. - *.n_CFG_Actual = 0 - .n_CFG_Actual = lo_Configuration.Count ENDIF + .n_CFG_Actual = lo_Configuration.Count *lo_CFG.c_Foxbin2prg_FullPath = '' lo_CFG.c_Foxbin2prg_ConfigFile = lcConfigFile - *lo_CFG.c_CurDir = '' + *lo_CFG.c_CurDir = '' FOR I = 1 TO ALINES( laConfig, FILETOSTR( lcConfigFile ), 1+4 ) *laConfig(I) = LOWER( laConfig(I) ) @@ -1568,8 +1601,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .writeLog( '> ' + UPPER(loLang.C_USING_THIS_SETTINGS_LOC) + ':' ) .writeLog( C_TAB + 'n_CFG_Actual: ' + TRANSFORM(.n_CFG_Actual) + ICASE(.n_CFG_Actual=1, ' [MASTER]', ' [SECONDARY]') ) - .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_CFG_CachedAccess: ' + TRANSFORM(.l_CFG_CachedAccess) ) + .writeLog( C_TAB + 'c_Foxbin2prg_ConfigFile: ' + TRANSFORM(EVL(lo_CFG.c_Foxbin2prg_ConfigFile, '(Internal defaults)') ) ) + .writeLog( C_TAB + 'tc_InputFile: ' + TRANSFORM(EVL(tc_InputFile,'') ) ) .writeLog( C_TAB + 'l_ShowProgress: ' + TRANSFORM(.l_ShowProgress) ) .writeLog( C_TAB + 'l_ShowErrors: ' + TRANSFORM(.l_ShowErrors) ) .writeLog( C_TAB + 'l_Recompile: ' + TRANSFORM(.l_Recompile) + ' (' + tcRecompile + ')' ) @@ -1826,7 +1860,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM , tcBackupLevels, tcClearUniqueID, tcOptimizeByFilestamp TRY - LOCAL I, lcPath, lnCodError, lcFileSpec, lcFile, laFiles(1,5), laDirInfo(1,5) ; + LOCAL I, lcPath, lnCodError, lcFileSpec, lcFile, laFiles(1,5), laDirInfo(1,5), lcInputFile_Type ; , lnFileCount, lcErrorInfo, lcErrorFile, lnPCount, laParams(1), lnConversionOption ; , loEx AS EXCEPTION ; , loFSO AS Scripting.FileSystemObject ; @@ -1836,11 +1870,13 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' lnCodError = 0 + loLang = _SCREEN.o_FoxBin2Prg_Lang loFSO = .o_FSO loWSH = .o_WSH DIMENSION .a_ProcessedFiles(1) .n_ProcessedFiles = 0 lnPCount = 0 + lcInputFile_Type = '' *-- 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 @@ -1853,9 +1889,20 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM * ENDFOR * EXIT *ENDIF + + *-- Determino el tipo de InputFile (Archivo o Directorio) + IF EMPTY(lcInputFile_Type) AND NOT EMPTY(tc_InputFile) + IF ADIR(laDirInfo, tc_InputFile, "D") = 1 AND SUBSTR( laDirInfo(1,5), 5, 1 ) = "D" THEN + *-- Ejemplo: "c:\desa\" + lcInputFile_Type = C_FILETYPE_DIRECTORY + ELSE + *-- Ejemplo: "c:\desa\*.scx", "c:\desa\file.ext", (lista de archivos) + lcInputFile_Type = C_FILETYPE_FILE + ENDIF + 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" + IF EMPTY(tcRecompile) AND NOT EMPTY(lcInputFile_Type) THEN + IF lcInputFile_Type == C_FILETYPE_DIRECTORY THEN tcRecompile = tc_InputFile ELSE tcRecompile = JUSTPATH( tc_InputFile ) @@ -1887,11 +1934,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .writeLog( ) *-- ARCHIVO DE CONFIGURACIÓN PRINCIPAL - - *IF NOT .l_ConfigEvaluated THEN .EvaluarConfiguracion( @tcDontShowProgress, @tcDontShowErrors, @tcNoTimestamps, @tcDebug, @tcRecompile, @tcBackupLevels ; - , @tcClearUniqueID, @tcOptimizeByFilestamp, @tc_InputFile ) - *ENDIF + , @tcClearUniqueID, @tcOptimizeByFilestamp, @tc_InputFile, @lcInputFile_Type ) loLang = _SCREEN.o_FoxBin2Prg_Lang @@ -1910,7 +1954,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- EJECUCIÓN NORMAL - IF '-SHOWMSG' $ ('-' + tcType) AND NOT '-BIN2PRG' $ ('-' + tcType) AND NOT '-PRG2BIN' $ ('-' + tcType) AND DIRECTORY(tc_InputFile) + IF '-SHOWMSG' $ ('-' + tcType) AND NOT '-BIN2PRG' $ ('-' + tcType) AND NOT '-PRG2BIN' $ ('-' + tcType) ; + AND lcInputFile_Type == C_FILETYPE_DIRECTORY *-- Se seleccionó un directorio y se puede elegir: Bin2Txt, Txt2Bin y Nada .writeLog( loLang.C_INTERACTIVE_DIRECTORY_SELECTION_LOC ) loFrm_Interactive = CREATEOBJECT('frm_interactive') @@ -1929,7 +1974,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM OTHERWISE && None ERROR 1799 && Conversion Cancelled - EXIT ENDCASE ENDIF @@ -1941,7 +1985,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- Evaluación de FileSpec de entrada DO CASE - CASE '*' $ JUSTEXT( tc_InputFile ) OR '?' $ JUSTEXT( tc_InputFile ) + CASE lcInputFile_Type == C_FILETYPE_FILE AND '*' $ JUSTEXT( tc_InputFile ) OR '?' $ JUSTEXT( tc_InputFile ) IF .l_ShowErrors *MESSAGEBOX( 'No se admiten extensiones * o ? porque es peligroso (se pueden pisar binarios con archivo xx2 vacíos).', 0+48+4096, 'FOXBIN2PRG: ERROR!!', 60000 ) MESSAGEBOX( loLang.C_ASTERISK_EXT_NOT_ALLOWED_LOC, 0+48+4096, loLang.C_FOXBIN2PRG_ERROR_CAPTION_LOC, 60000 ) @@ -1951,7 +1995,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF - CASE '*' $ JUSTSTEM( tc_InputFile ) + CASE lcInputFile_Type == C_FILETYPE_FILE AND '*' $ JUSTSTEM( tc_InputFile ) *-- SE QUIEREN TODOS LOS ARCHIVOS DE UNA EXTENSIÓN lcFileSpec = FULLPATH( tc_InputFile ) @@ -1984,7 +2028,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .writeLog( '> ' + loLang.C_OPTION_LOC + ': BIN2PRG' ) DO CASE - CASE DIRECTORY(tc_InputFile) + CASE lcInputFile_Type == C_FILETYPE_DIRECTORY *-- CONVERSION BIN2PRG DE UN DIRECTORIO Y SUBDIRECTORIOS .writeLog( '> InputFile ' + loLang.C_IS_A_DIRECTORY_LOC ) @@ -2037,7 +2081,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .writeLog( '> ' + loLang.C_OPTION_LOC + ': PRG2BIN' ) DO CASE - CASE DIRECTORY(tc_InputFile) + CASE lcInputFile_Type == C_FILETYPE_DIRECTORY *-- CONVERSION PRG2BIN DE UN DIRECTORIO Y SUBDIRECTORIOS .writeLog( '> InputFile ' + loLang.C_IS_A_DIRECTORY_LOC ) @@ -2286,7 +2330,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM USE IN (SELECT("TABLABIN")) THIS.writeLog_Flush() - *THIS.descargar_frm_avance() + IF NOT THIS.l_ShowProgress + THIS.descargar_frm_avance() + *fdb* + ENDIF CD (JUSTPATH(THIS.c_CurDir)) DO CASE @@ -2656,7 +2703,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- Logueo los errores IF NOT EMPTY(loConversor.c_TextErr) THEN - .writeErrorLog( PADR( 'ERRORS FOUND IN FILE [' + .c_InputFile + '] ', 100, '-' ) ) + .writeErrorLog( PADR( loLang.C_ERRORS_FOUND_IN_FILE_LOC + ' [' + .c_InputFile + '] ', 100, '-' ) ) .writeErrorLog( loConversor.c_TextErr ) .writeErrorLog( ) ENDIF @@ -3920,17 +3967,17 @@ DEFINE CLASS c_conversor_base AS SESSION *-- CONVIERTE UN DATO TIMESTAMP NUMERICO USADO POR LOS ARCHIVOS SCX/VCX/etc. EN TIPO DATETIME TRY LOCAL lcTimeStamp,lnYear,lnMonth,lnDay,lnHour,lnMinutes,lnSeconds,lcTime,lnHour,ltTimeStamp,lnResto ; - ,lcTimeStamp_Ret, laDir[1,5], loEx AS EXCEPTION + ,lcTimeStamp_Ret, laDirInfo[1,5], loEx AS EXCEPTION lcTimeStamp_Ret = '' IF EMPTY(tnTimeStamp) IF THIS.lFileMode - IF ADIR(laDir,THIS.c_InputFile)=0 + IF ADIR(laDirInfo,THIS.c_InputFile)=0 EXIT ENDIF - ltTimeStamp = EVALUATE( '{^' + DTOC(laDir(1,3)) + ' ' + TRANSFORM(laDir(1,4)) + '}' ) + ltTimeStamp = EVALUATE( '{^' + DTOC(laDirInfo(1,3)) + ' ' + TRANSFORM(laDirInfo(1,4)) + '}' ) *-- En mi arreglo, si la hora pasada tiene 32 segundos o más, redondeo al siguiente minuto, ya que *-- la descodificación posterior de GetTimeStamp tiene ese margen de error. @@ -7195,7 +7242,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin EXIT ENDIF - .AvanceDelProceso( 'Generating Binary...', 0, lnCodeLines, 1 ) + .AvanceDelProceso( loLang.C_GENERATING_BINARY_LOC + '...', 0, lnCodeLines, 1 ) toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) .createClasslib() .escribirArchivoBin( @toModulo, @toFoxBin2Prg ) @@ -21927,6 +21974,7 @@ DEFINE CLASS CL_LANG AS Custom 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_ERRORS_FOUND_IN_FILE_LOC = "ERRORS FOUND IN FILE" C_EXTENSION_RECONFIGURATION_LOC = "Extension Reconfiguration:" C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES_LOC = "External class count (<>) does not match found classes (<>) for file [<>]" C_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC = "External class was not found" @@ -21946,6 +21994,7 @@ DEFINE CLASS CL_LANG AS Custom C_FOXBIN2PRG_JUST_VFP_9_LOC = "FOXBIN2PRG is only for Visual FoxPro 9.0!" C_FOXBIN2PRG_WARN_CAPTION_LOC = "FOXBIN2PRG: WARNING!" C_GENERATED_FILE_SIZE_LOC = "Generated file size" + C_GENERATING_BINARY_LOC = "Generating Binary" C_INCLUDING_CLASS_LOC = "Including class" C_INTERACTIVE_DIRECTORY_SELECTION_LOC = "Interactive Directory Selection" C_IS_A_FILE_LOC = "is a FILE" @@ -21986,7 +22035,7 @@ DEFINE CLASS CL_LANG AS Custom LPARAMETERS tcLanguage TRY - LOCAL lcSys16, lnPosProg, lc_Foxbin2prg_FullPath, lc_Foxbin2prg_LangFile, laDir(1,5) ; + LOCAL lcSys16, lnPosProg, lc_Foxbin2prg_FullPath, lc_Foxbin2prg_LangFile, laDirInfo(1,5) ; , llLangFileExists, lcLangStr ; , loEx as Exception @@ -22005,7 +22054,7 @@ DEFINE CLASS CL_LANG AS Custom lc_Foxbin2prg_FullPath = SUBSTR( lcSys16, lnPosProg ) lc_Foxbin2prg_LangFile = FORCEEXT( lc_Foxbin2prg_FullPath, 'H' ) - llLangFileExists = ( ADIR( laDir, lc_Foxbin2prg_LangFile ) = 1 ) + llLangFileExists = ( ADIR( laDirInfo, lc_Foxbin2prg_LangFile ) = 1 ) ELSE .n_LanguageSelectedMethod = 1 && 1=Assigned by Parameter ENDIF @@ -22069,6 +22118,7 @@ DEFINE CLASS CL_LANG AS Custom .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_ERRORS_FOUND_IN_FILE_LOC = "ERREURS TROUVÉ DANS LE FICHIER" .C_EXTENSION_RECONFIGURATION_LOC = "Extension Reconfiguration:" .C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES_LOC = "Nombre de classe externe (<>) ne correspond pas classes trouvées (<>) pour le fichier [<>]" .C_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC = "Aucune classe externe est trouvé" @@ -22088,6 +22138,7 @@ DEFINE CLASS CL_LANG AS Custom .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_GENERATING_BINARY_LOC = "Génération Binaire" .C_INCLUDING_CLASS_LOC = "Including class" .C_INTERACTIVE_DIRECTORY_SELECTION_LOC = "Sélection répertoire interactive" .C_IS_A_FILE_LOC = "est un FICHIER" @@ -22146,6 +22197,7 @@ DEFINE CLASS CL_LANG AS Custom .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_ERRORS_FOUND_IN_FILE_LOC = "SE HAN ENCONTRADOS ERRORES EN EL ARCHIVO" .C_EXTENSION_RECONFIGURATION_LOC = "Reconfiguración de extensión:" .C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES_LOC = "El conteo de clases externas (<>) no coincide con la cantidad encontrada (<>) para el archivo [<>]" .C_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC = "No se encontró la clase externa" @@ -22165,6 +22217,7 @@ DEFINE CLASS CL_LANG AS Custom .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_GENERATING_BINARY_LOC = "Generando Binario" .C_MENU_NOT_IN_VFP9_FORMAT_LOC = "El Menú [<>] NO está en formato VFP 9! - Por favor convertirlo a VFP 9 con MODIFY MENU '<>'" .C_INCLUDING_CLASS_LOC = "Incluyendo clase" .C_INTERACTIVE_DIRECTORY_SELECTION_LOC = "Selección Interactiva de Directorio" @@ -22223,15 +22276,16 @@ DEFINE CLASS CL_LANG AS Custom .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_ERRORS_FOUND_IN_FILE_LOC = "FEHLER IN FILE GEFUNDEN" + .C_EXTENSION_RECONFIGURATION_LOC = "Erweiterungsneukonfiguration:" + .C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES_LOC = "Externe Klassenzahl (<< toModulo._ExternalClasses_Count >>) nicht gefunden Klassen entsprechen (<< toModulo._Clases_Count >>) für Datei [<< toFoxBin2Prg.c_InputFile >>]" + .C_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC = "Keine externe Klasse gefunden" + .C_EXTERNAL_PARAMETERS_LOC = "EXTERNE PARAMETER" .C_FIELD_NOT_FOUND_ON_FILE_STRUCTURE_LOC = "Feld [<>] nicht in der Struktur von Datei <> gefunden" .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_WAS_NOT_FOUND_LOC = "Keine externe Klasse gefunden" - .C_EXTERNAL_PARAMETERS_LOC = "EXTERNE PARAMETER" .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 ; @@ -22242,6 +22296,7 @@ DEFINE CLASS CL_LANG AS Custom .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_GENERATING_BINARY_LOC = "Gene Binary" .C_INCLUDING_CLASS_LOC = "einschließlich Klasse" .C_INTERACTIVE_DIRECTORY_SELECTION_LOC = "Auswählen interaktive Verzeichnis" .C_IS_A_FILE_LOC = "ist eine DATEI" From 86a0f1032faa07e9b9545e0cd6ae67a59d643012 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 21 Dec 2014 02:01:02 +0100 Subject: [PATCH 07/21] =?UTF-8?q?Changeset:=20573=20fdbozzo=20-=2020/12/20?= =?UTF-8?q?14=2013:44:27:=20-=20Arreglo=20de=20multiconfiguraci=C3=B3n=20c?= =?UTF-8?q?uando=20se=20ejecuta=20desde=20scripts=20vbs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 47 +++++++++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index f1085bb..d9e6abd 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -1451,35 +1451,35 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE LEFT( laConfig(I), 17 ) == LOWER('AllowMultiConfig:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 18 ) ) IF INLIST( lcValue, '0', '1' ) THEN - .l_AllowMultiConfig = ( TRANSFORM(lcValue) == '1' ) + lo_CFG.l_AllowMultiConfig = ( TRANSFORM(lcValue) == '1' ) .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > AllowMultiConfig: ' + TRANSFORM(lcValue) ) ENDIF CASE LEFT( laConfig(I), 16 ) == LOWER('UseClassPerFile:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 17 ) ) IF INLIST( lcValue, '0', '1' ) THEN - .l_UseClassPerFile = ( TRANSFORM(lcValue) == '1' ) + lo_CFG.l_UseClassPerFile = ( TRANSFORM(lcValue) == '1' ) .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' ) + lo_CFG.l_ClassPerFileCheck = ( TRANSFORM(lcValue) == '1' ) .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' ) + lo_CFG.l_RedirectClassPerFileToMain = ( TRANSFORM(lcValue) == '1' ) .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' ) + lo_CFG.l_DropNullCharsFromCode = ( TRANSFORM(lcValue) == '1' ) .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > DropNullCharsFromCode: ' + TRANSFORM(lcValue) ) ENDIF @@ -1873,15 +1873,15 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM loLang = _SCREEN.o_FoxBin2Prg_Lang loFSO = .o_FSO loWSH = .o_WSH - DIMENSION .a_ProcessedFiles(1) - .n_ProcessedFiles = 0 + *DIMENSION .a_ProcessedFiles(1) + *.n_ProcessedFiles = 0 lnPCount = 0 lcInputFile_Type = '' *-- Funciona y lee los parámetros, pero no le veo un caso de uso claro, ya que si se eligen *-- varios directorios de proyecto, la compilación será errónea. 12/12/2014 *.ReadInputVFPParams( @laParams, @lnPCount ) - + *IF lnPCount > 0 THEN * .writeLog( 'Params.Externos: ' + TRANSFORM(lnPCount,'@L ##') ) * FOR I = 1 TO lnPCount @@ -1889,7 +1889,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM * ENDFOR * EXIT *ENDIF - + *-- Determino el tipo de InputFile (Archivo o Directorio) IF EMPTY(lcInputFile_Type) AND NOT EMPTY(tc_InputFile) IF ADIR(laDirInfo, tc_InputFile, "D") = 1 AND SUBSTR( laDirInfo(1,5), 5, 1 ) = "D" THEN @@ -1953,7 +1953,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM OTHERWISE *-- EJECUCIÓN NORMAL - + IF '-SHOWMSG' $ ('-' + tcType) AND NOT '-BIN2PRG' $ ('-' + tcType) AND NOT '-PRG2BIN' $ ('-' + tcType) ; AND lcInputFile_Type == C_FILETYPE_DIRECTORY *-- Se seleccionó un directorio y se puede elegir: Bin2Txt, Txt2Bin y Nada @@ -1964,7 +1964,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM lnConversionOption = loFrm_Interactive.n_ConversionType loFrm_Interactive.Release() loFrm_Interactive = NULL - + DO CASE CASE lnConversionOption = 1 && Bin2Txt tcType = tcType + '-BIN2PRG' @@ -2295,7 +2295,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CATCH TO toEx lnCodError = toEx.ERRORNO - + IF VARTYPE(loLang) <> 'O' THEN loLang = CREATEOBJECT("CL_LANG","EN") ENDIF @@ -2304,8 +2304,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM toEx.UserValue = toEx.UserValue + 'tc_InputDir = [' + TRANSFORM(tc_InputFile) + ']' + CR_LF THIS.l_ShowErrors = .F. && La opción "SHOWMSG" muestra su propio mensaje ENDIF - - toEx.UserValue = toEx.UserValue + 'tc_InputFile = ' + TRANSFORM(tc_InputFile) + CR_LF + + toEx.USERVALUE = toEx.USERVALUE + 'tc_InputFile = ' + TRANSFORM(tc_InputFile) + CR_LF THIS.ejecutar_WriteErrorLog( @toEx, @lcErrorInfo ) @@ -2330,9 +2330,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM USE IN (SELECT("TABLABIN")) THIS.writeLog_Flush() - IF NOT THIS.l_ShowProgress + IF THIS.l_ShowProgress THIS.descargar_frm_avance() - *fdb* ENDIF CD (JUSTPATH(THIS.c_CurDir)) @@ -2355,8 +2354,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDCASE - *CASE THIS.l_Debug - * THIS.writeErrorLog_Flush( ) + *CASE THIS.l_Debug + * THIS.writeErrorLog_Flush( ) ENDCASE @@ -2441,7 +2440,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM 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 @@ -2450,7 +2449,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM EXIT ENDIF ENDIF - + .n_ProcessedFiles = .n_ProcessedFiles + 1 DIMENSION .a_ProcessedFiles(.n_ProcessedFiles) .a_ProcessedFiles(.n_ProcessedFiles) = lc_BaseFile @@ -2987,7 +2986,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM 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 @@ -6860,7 +6859,7 @@ 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) @@ -6977,7 +6976,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDFOR .verificar_CLASES_EXTERNAS( @toModulo, @toFoxBin2Prg ) - + ENDIF ENDWITH && THIS @@ -7202,7 +7201,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin lcInputFile = FORCEPATH( JUSTSTEM( JUSTSTEM(.c_InputFile) ), JUSTPATH(.c_InputFile) ) + '.*.' + JUSTEXT(.c_InputFile) lnFileCount = ADIR( laFiles, lcInputFile, "", 1 ) ASORT( laFiles, 1, 0, 0, 1) - + FOR I = 1 TO lnFileCount lcInputFile_Class = FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile ) From f737c1473e1a41316cffaa4311bc596d24b46445 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 21 Dec 2014 03:02:13 +0100 Subject: [PATCH 08/21] =?UTF-8?q?Changeset:=20574=20fdbozzo=20-=2021/12/20?= =?UTF-8?q?14=2002:01:03:=20-=20Arreglo=20del=20manejo=20de=20errores=20en?= =?UTF-8?q?=20los=20scripts=20vbs=20y=20mejora=20de=20localizaci=C3=B3n=20?= =?UTF-8?q?de=20mensajes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Convert_VFP9_BIN_2_PRG.vbs | 23 +++++++++++------------ Convert_VFP9_PRG_2_BIN.vbs | 34 ++++++++++++++++------------------ VFP9_FoxBin2Prg.vbs | 9 +++++---- foxbin2prg.prg | 3 --- 4 files changed, 32 insertions(+), 37 deletions(-) diff --git a/Convert_VFP9_BIN_2_PRG.vbs b/Convert_VFP9_BIN_2_PRG.vbs index cf356c6..20dd635 100644 --- a/Convert_VFP9_BIN_2_PRG.vbs +++ b/Convert_VFP9_BIN_2_PRG.vbs @@ -13,7 +13,7 @@ ' - Ahora puede seleccionar archivos o directorios, pulsar click derecho y "Enviar a" FoxBin2prg para conversiones batch '--------------------------------------------------------------------------------------------------- Const ForReading = 1 -Dim WSHShell, FileSystemObject, cEndOfProcessMsg, cWithErrorsMsg, cConvCancelByUserMsg +Dim WSHShell, FileSystemObject, cEndOfProcessMsg, cWithErrorsMsg, cConvCancelByUserMsg, nProcessedFilesCount Dim oVFP9, nExitCode, cEXETool, cCMD, nDebug, lcExt, foxbin2prg_cfg, aFiles(), nFile_Count Dim i, x, str_cfg, aConf, cErrMsg, cFlagGenerateLog, cFlagDontShowErrMsg, cFlagJustShowCall, cFlagRecompile, cFlagNoTimestamps, cErrFile Set WSHShell = WScript.CreateObject("WScript.Shell") @@ -93,7 +93,7 @@ Else If nDebug = 0 Or nDebug = 2 Then cCMD = "oFoxBin2prg.ejecutar( '" & aFiles(i) & "' )" Else - cCMD = "oFoxBin2prg.ejecutar( '" & aFiles(i) & "','0','0','0'," _ + cCMD = "oFoxBin2prg.ejecutar( '" & aFiles(i) & "','BIN2PRG','0','0'," _ & cFlagDontShowErrMsg & "," & cFlagGenerateLog & ",'1','','',.F.,''," _ & cFlagRecompile & "," & cFlagNoTimestamps & " )" End If @@ -101,8 +101,7 @@ Else If cFlagJustShowCall = "1" Then MsgBox cCMD, 64, "PARAMETERS" Else - oVFP9.DoCmd( cCMD ) - nExitCode = oVFP9.Eval("_SCREEN.ExitCode") + nExitCode = oVFP9.Eval(cCMD) End If If nExitCode = 1799 Then 'Conversion cancelled by user @@ -114,20 +113,21 @@ Else cEndOfProcessMsg = oVFP9.Eval("_SCREEN.o_FoxBin2Prg_Lang.C_END_OF_PROCESS_LOC") cWithErrorsMsg = oVFP9.Eval("_SCREEN.o_FoxBin2Prg_Lang.C_WITH_ERRORS_LOC") cConvCancelByUserMsg = oVFP9.Eval("_SCREEN.o_FoxBin2Prg_Lang.C_CONVERSION_CANCELLED_BY_USER_LOC") + nProcessedFilesCount = oVFP9.Eval("oFoxBin2prg.n_ProcessedFilesCount") If nExitCode = 1799 Then - MsgBox cConvCancelByUserMsg & "!", 48+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" + MsgBox cConvCancelByUserMsg & "! [p:" & nProcessedFilesCount & "]", 48+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" oVFP9.DoCmd("oFoxBin2prg.writeErrorLog_Flush()") cErrFile = oVFP9.Eval("oFoxBin2prg.c_ErrorLogFile") WSHShell.run cErrFile ElseIf oVFP9.Eval("oFoxBin2prg.l_Error") Then - MsgBox cEndOfProcessMsg & "! (" & cWithErrorsMsg & ")", 48+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" + MsgBox cEndOfProcessMsg & "! (" & cWithErrorsMsg & ") [p:" & nProcessedFilesCount & "]", 48+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" oVFP9.DoCmd("oFoxBin2prg.writeErrorLog_Flush()") cErrFile = oVFP9.Eval("oFoxBin2prg.c_ErrorLogFile") WSHShell.run cErrFile Else - MsgBox cEndOfProcessMsg & "!", 64+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" + MsgBox cEndOfProcessMsg & "! [p:" & nProcessedFilesCount & "]", 64+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" End If End If @@ -159,18 +159,17 @@ End Sub Private Sub evaluateFile( tcFile ) - lcExt = UCase( FileSystemObject.GetExtensionName( tcFile ) ) - oVFP9.SetVar "gc_Ext", lcExt - oVFP9.DoCmd( "oFoxBin2prg.EvaluarConfiguracion( '1', '1', '', '', '', '', '', '', '" & tcFile & "' )" ) + 'lcExt = UCase( FileSystemObject.GetExtensionName( tcFile ) ) + 'oVFP9.DoCmd( "oFoxBin2prg.EvaluarConfiguracion( '1', '1', '', '', '', '', '', '', '" & tcFile & "' )" ) 'PROCEDURE EvaluarConfiguracion ' LPARAMETERS tcDontShowProgress, tcDontShowErrors, tcFlagNoTimestamps, tcDebug, tcRecompile, tcExtraBackupLevels ; ' , tcClearUniqueID, tcOptimizeByFilestamp, tc_InputFile - If oVFP9.Eval("oFoxBin2prg.TieneSoporte_Bin2Prg(gc_Ext)") Then + 'If oVFP9.Eval("oFoxBin2prg.TieneSoporte_Bin2Prg('" & lcExt & "')") Then nFile_Count = nFile_Count + 1 ReDim Preserve aFiles(nFile_Count) aFiles(nFile_Count) = tcFile - End If + 'End If End Sub diff --git a/Convert_VFP9_PRG_2_BIN.vbs b/Convert_VFP9_PRG_2_BIN.vbs index 234b647..df387a8 100644 --- a/Convert_VFP9_PRG_2_BIN.vbs +++ b/Convert_VFP9_PRG_2_BIN.vbs @@ -13,7 +13,7 @@ ' - Ahora puede seleccionar archivos o directorios, pulsar click derecho y "Enviar a" FoxBin2prg para conversiones batch '--------------------------------------------------------------------------------------------------- Const ForReading = 1 -Dim WSHShell, FileSystemObject, cEndOfProcessMsg, cWithErrorsMsg, cConvCancelByUserMsg +Dim WSHShell, FileSystemObject, cEndOfProcessMsg, cWithErrorsMsg, cConvCancelByUserMsg, nProcessedFilesCount Dim oVFP9, nExitCode, cEXETool, cCMD, nDebug, lcExt, foxbin2prg_cfg, aFiles(), nFile_Count Dim i, x, str_cfg, aConf, cErrMsg, cFlagGenerateLog, cFlagDontShowErrMsg, cFlagJustShowCall, cFlagRecompile, cFlagNoTimestamps, cErrFile Set WSHShell = WScript.CreateObject("WScript.Shell") @@ -99,7 +99,7 @@ Else If nDebug = 0 Or nDebug = 2 Then cCMD = "oFoxBin2prg.ejecutar( '" & aFiles(i) & "' )" Else - cCMD = "oFoxBin2prg.ejecutar( '" & aFiles(i) & "','0','0','0'," _ + cCMD = "oFoxBin2prg.ejecutar( '" & aFiles(i) & "','PRG2BIN','0','0'," _ & cFlagDontShowErrMsg & "," & cFlagGenerateLog & ",'1','','',.F.,''," _ & cFlagRecompile & "," & cFlagNoTimestamps & " )" End If @@ -107,8 +107,7 @@ Else If cFlagJustShowCall = "1" Then MsgBox cCMD, 64, "PARAMETERS" Else - oVFP9.DoCmd( cCMD ) - nExitCode = oVFP9.Eval("_SCREEN.ExitCode") + nExitCode = oVFP9.Eval(cCMD) End If If nExitCode = 1799 Then 'Conversion cancelled by user @@ -120,20 +119,21 @@ Else cEndOfProcessMsg = oVFP9.Eval("_SCREEN.o_FoxBin2Prg_Lang.C_END_OF_PROCESS_LOC") cWithErrorsMsg = oVFP9.Eval("_SCREEN.o_FoxBin2Prg_Lang.C_WITH_ERRORS_LOC") cConvCancelByUserMsg = oVFP9.Eval("_SCREEN.o_FoxBin2Prg_Lang.C_CONVERSION_CANCELLED_BY_USER_LOC") + nProcessedFilesCount = oVFP9.Eval("oFoxBin2prg.n_ProcessedFilesCount") If nExitCode = 1799 Then - MsgBox cConvCancelByUserMsg & "!", 48+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" + MsgBox cConvCancelByUserMsg & "! [p:" & nProcessedFilesCount & "]", 48+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" oVFP9.DoCmd("oFoxBin2prg.writeErrorLog_Flush()") cErrFile = oVFP9.Eval("oFoxBin2prg.c_ErrorLogFile") WSHShell.run cErrFile ElseIf oVFP9.Eval("oFoxBin2prg.l_Error") Then - MsgBox cEndOfProcessMsg & "! (" & cWithErrorsMsg & ")", 48+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" + MsgBox cEndOfProcessMsg & "! (" & cWithErrorsMsg & ") [p:" & nProcessedFilesCount & "]", 48+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" oVFP9.DoCmd("oFoxBin2prg.writeErrorLog_Flush()") cErrFile = oVFP9.Eval("oFoxBin2prg.c_ErrorLogFile") WSHShell.run cErrFile Else - MsgBox cEndOfProcessMsg & "!", 64+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" + MsgBox cEndOfProcessMsg & "! [p:" & nProcessedFilesCount & "]", 64+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" End If End If @@ -165,24 +165,22 @@ End Sub Private Sub evaluateFile( tcFile ) - lcExt = UCase( FileSystemObject.GetExtensionName( tcFile ) ) - lcFileName = FileSystemObject.GetFileName( tcFile ) - laPoints = Split( lcFileName, "." ) - lnPoints = UBound(laPoints) + 'lcExt = UCase( FileSystemObject.GetExtensionName( tcFile ) ) + 'lcFileName = FileSystemObject.GetFileName( tcFile ) + 'laPoints = Split( lcFileName, "." ) + 'lnPoints = UBound(laPoints) '-- No proceso los archivos con más de un punto (clases en archivos individuales) por performance - If lnPoints = 1 Then - oVFP9.SetVar "gc_Ext", lcExt - + 'If lnPoints = 1 Then 'PROCEDURE EvaluarConfiguracion ' LPARAMETERS tcDontShowProgress, tcDontShowErrors, tcFlagNoTimestamps, tcDebug, tcRecompile, tcExtraBackupLevels ; ' , tcClearUniqueID, tcOptimizeByFilestamp, tc_InputFile - oVFP9.DoCmd( "oFoxBin2prg.EvaluarConfiguracion( '1', '1', '', '', '', '', '', '', '" & tcFile & "' )" ) - If oVFP9.Eval("oFoxBin2prg.TieneSoporte_Prg2Bin(gc_Ext)") Then + 'oVFP9.DoCmd( "oFoxBin2prg.EvaluarConfiguracion( '1', '1', '', '', '', '', '', '', '" & tcFile & "' )" ) + 'If oVFP9.Eval("oFoxBin2prg.TieneSoporte_Prg2Bin('" & lcExt & "')") Then nFile_Count = nFile_Count + 1 ReDim Preserve aFiles(nFile_Count) aFiles(nFile_Count) = tcFile - End If - End If + 'End If + 'End If End Sub diff --git a/VFP9_FoxBin2Prg.vbs b/VFP9_FoxBin2Prg.vbs index 932a5fe..27aa407 100644 --- a/VFP9_FoxBin2Prg.vbs +++ b/VFP9_FoxBin2Prg.vbs @@ -13,7 +13,7 @@ ' en la carpeta "SendTo" del usuario ' - Ahora puede seleccionar archivos o directorios, pulsar click derecho y "Enviar a" FoxBin2prg para conversiones batch '--------------------------------------------------------------------------------------------------- -Dim WSHShell, FileSystemObject, cEndOfProcessMsg, cWithErrorsMsg, cConvCancelByUserMsg +Dim WSHShell, FileSystemObject, cEndOfProcessMsg, cWithErrorsMsg, cConvCancelByUserMsg, nProcessedFilesCount Dim nExitCode, cEXETool, cEXETool2, nDebug Set wshShell = CreateObject( "WScript.Shell" ) Set FileSystemObject = WScript.CreateObject("Scripting.FileSystemObject") @@ -104,20 +104,21 @@ Else cEndOfProcessMsg = oVFP9.Eval("_SCREEN.o_FoxBin2Prg_Lang.C_END_OF_PROCESS_LOC") cWithErrorsMsg = oVFP9.Eval("_SCREEN.o_FoxBin2Prg_Lang.C_WITH_ERRORS_LOC") cConvCancelByUserMsg = oVFP9.Eval("_SCREEN.o_FoxBin2Prg_Lang.C_CONVERSION_CANCELLED_BY_USER_LOC") + nProcessedFilesCount = oVFP9.Eval("oFoxBin2prg.n_ProcessedFilesCount") If nExitCode = 1799 Then - MsgBox cConvCancelByUserMsg & "!", 48+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" + MsgBox cConvCancelByUserMsg & "! [p:" & nProcessedFilesCount & "]", 48+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" oVFP9.DoCmd("oFoxBin2prg.writeErrorLog_Flush()") cErrFile = oVFP9.Eval("oFoxBin2prg.c_ErrorLogFile") WSHShell.run cErrFile ElseIf oVFP9.Eval("oFoxBin2prg.l_Error") Then - MsgBox cEndOfProcessMsg & "! (" & cWithErrorsMsg & ")", 48+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" + MsgBox cEndOfProcessMsg & "! (" & cWithErrorsMsg & ") [p:" & nProcessedFilesCount & "]", 48+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" oVFP9.DoCmd("oFoxBin2prg.writeErrorLog_Flush()") cErrFile = oVFP9.Eval("oFoxBin2prg.c_ErrorLogFile") WSHShell.run cErrFile Else - MsgBox cEndOfProcessMsg & "!", 64+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" + MsgBox cEndOfProcessMsg & "! [p:" & nProcessedFilesCount & "]", 64+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" End If End If diff --git a/foxbin2prg.prg b/foxbin2prg.prg index d9e6abd..4f6c467 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -2354,9 +2354,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDCASE - *CASE THIS.l_Debug - * THIS.writeErrorLog_Flush( ) - ENDCASE STORE NULL TO loFSO, loWSH From fc9c572679dcb1e3956ca487a457707afa9c6bf1 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 21 Dec 2014 17:18:22 +0100 Subject: [PATCH 09/21] Changeset: 575 fdbozzo - 21/12/2014 03:02:13: - Arreglo del CFG por defecto --- foxbin2prg.prg | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 4f6c467..44f9b35 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -1349,7 +1349,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE ISNULL( .o_Configuration( .n_CFG_Actual ) ) *-- Si existe una configuración y es NULL, se usa la predeterminada - *.n_CFG_Actual = 0 + .n_CFG_Actual = 0 + lo_CFG = THIS ENDCASE @@ -1366,13 +1367,12 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM lo_Configuration.Add( NULL, lc_CFG_Path ) && La NULL se carga solo cuando no hay Main_CFG_loaded todavía. ENDIF - .n_CFG_Actual = lo_Configuration.Count + .n_CFG_Actual = lo_Configuration.Count *lo_CFG.c_Foxbin2prg_FullPath = '' lo_CFG.c_Foxbin2prg_ConfigFile = lcConfigFile *lo_CFG.c_CurDir = '' FOR I = 1 TO ALINES( laConfig, FILETOSTR( lcConfigFile ), 1+4 ) - *laConfig(I) = LOWER( laConfig(I) ) .set_Line( @lcConfigLine, @laConfig, I ) .get_SeparatedLineAndComment( @lcConfigLine ) laConfig(I) = LOWER( lcConfigLine ) @@ -1591,7 +1591,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM IF INLIST( TRANSFORM(tcDebug), '0', '1' ) THEN lo_CFG.l_Debug = (TRANSFORM(tcDebug)=='1') ENDIF - tcExtraBackupLevels = EVL( tcExtraBackupLevels, TRANSFORM( lo_CFG.n_ExtraBackupLevels ) ) + tcExtraBackupLevels = EVL( tcExtraBackupLevels, TRANSFORM( .n_ExtraBackupLevels ) ) IF ISDIGIT(tcExtraBackupLevels) lo_CFG.n_ExtraBackupLevels = INT( VAL( TRANSFORM(tcExtraBackupLevels) ) ) ENDIF From b835631e72ee88cfe61316878dc1cdd272358f08 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 21 Dec 2014 17:24:33 +0100 Subject: [PATCH 10/21] =?UTF-8?q?Changeset:=20576=20fdbozzo=20-=2021/12/20?= =?UTF-8?q?14=2017:18:22:=20-=20Actualizaci=C3=B3n=20de=20la=20versi=C3=B3?= =?UTF-8?q?n=20del=20proyecto=20PJX?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.pj2 | 2 +- foxbin2prg.pjt | Bin 624170 -> 677563 bytes foxbin2prg.pjx | Bin 9123 -> 9123 bytes 3 files changed, 1 insertion(+), 1 deletion(-) diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2 index ea82618..c1c9b82 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 = "38" +_Revision = "39" _LanguageID = "1034" _AutoIncrement = "0" * diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index 34f7a7f0640b496ce5dfcb5b3c307f0472ccf688..9ad7cf4a8a5203fa8ea6331b5ddd30c81bf20901 100644 GIT binary patch delta 119078 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

itz((sp#zYP3k;x7w-+4#$0VDt5h>S%-PQqW7> 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 delta 67555 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 G%>4((<-5iJ delta 653 zcmXw#OGs2<6vxkTX72TMXL2+jje0+oNinML&fJ-~Qc#gNMN>^+v zyKq8t6++>E90)6Gbn*PXLd0DRgraCJ&hitSE>`>lWhIKMa8`2#A`2Do#5v7g*rkex zF<7dsdve~7dyX^fx0Ypj62oOG$8gY4-oy16DObD!ODYt1V6@_GZqoIfCNC~=zOvkU zw2o-n(^bY|uBRKbF%gM^BaS)KNR%z|p()a7Tx=jZGKE`_E~BTF=>1EqtZc(*jcts- zBeK`vc4e2br=I9p6058JSR?C+?uZ-`aW9#`KGVju9YtTY6a4aqX!tYhjhob~ti2XR zwqw2CLe%+O$08*qRKc78+X+l;B6^JbcDIq)NR+;WjOYq9W{CFVp-_Ain`;y&@U*54 z{fmUv=MY`{M*1HqQ?vg}+hO$A72-^7g&B)`v83l>ytbWxqP9*3QfZ Date: Mon, 22 Dec 2014 00:01:41 +0100 Subject: [PATCH 11/21] Changeset: 577 fdbozzo - 21/12/2014 17:24:33: --- VFP9_FoxBin2Prg.vbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VFP9_FoxBin2Prg.vbs b/VFP9_FoxBin2Prg.vbs index 27aa407..c053076 100644 --- a/VFP9_FoxBin2Prg.vbs +++ b/VFP9_FoxBin2Prg.vbs @@ -90,7 +90,7 @@ Else cCMD = "oFoxBin2prg.ejecutar( '" & WScript.Arguments(0) & "' )" Else cCMD = "oFoxBin2prg.ejecutar( '" & WScript.Arguments(0) & "','0','0','0'," _ - & cFlagDontShowErrMsg & "," & cFlagGenerateLog & ",'0','','',.F.,''," _ + & cFlagDontShowErrMsg & "," & cFlagGenerateLog & ",'1','','',.F.,''," _ & cFlagRecompile & "," & cNoTimestamps & " )" End If If cFlagJustShowCall = "1" Then From fed65fbb866593fcc18c7826a4ded9779fc0c6d3 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Tue, 23 Dec 2014 18:22:46 +0100 Subject: [PATCH 12/21] Changeset: 578 fdbozzo - 22/12/2014 00:01:42: - Arreglo del INTERACTIVE faltante y uso de ATC() en vez de $ --- foxbin2prg.prg | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 44f9b35..8f931da 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -1954,8 +1954,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- EJECUCIÓN NORMAL - IF '-SHOWMSG' $ ('-' + tcType) AND NOT '-BIN2PRG' $ ('-' + tcType) AND NOT '-PRG2BIN' $ ('-' + tcType) ; - AND lcInputFile_Type == C_FILETYPE_DIRECTORY + IF ( ATC('-SHOWMSG', ('-' + tcType)) = 1 OR ATC('-INTERACTIVE', ('-' + tcType)) = 1 ) ; + AND ATC('-BIN2PRG', ('-' + tcType)) = 0 AND ATC('-PRG2BIN', ('-' + tcType)) = 0 ; + AND lcInputFile_Type == C_FILETYPE_DIRECTORY THEN *-- Se seleccionó un directorio y se puede elegir: Bin2Txt, Txt2Bin y Nada .writeLog( loLang.C_INTERACTIVE_DIRECTORY_SELECTION_LOC ) loFrm_Interactive = CREATEOBJECT('frm_interactive') @@ -2024,7 +2025,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM EXIT - CASE '-BIN2PRG' $ ('-' + tcType) + CASE ATC('-BIN2PRG', ('-' + tcType)) = 1 .writeLog( '> ' + loLang.C_OPTION_LOC + ': BIN2PRG' ) DO CASE @@ -2077,7 +2078,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDCASE - CASE '-PRG2BIN' $ ('-' + tcType) + CASE ATC('-PRG2BIN', ('-' + tcType)) = 1 .writeLog( '> ' + loLang.C_OPTION_LOC + ': PRG2BIN' ) DO CASE @@ -2300,7 +2301,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM loLang = CREATEOBJECT("CL_LANG","EN") ENDIF - IF '-SHOWMSG' $ ('-' + tcType) OR '-INTERACTIVE' $ ('-' + tcType) THEN + IF ATC('-SHOWMSG', ('-' + tcType)) = 1 OR ATC('-INTERACTIVE', ('-' + tcType)) = 1 THEN toEx.UserValue = toEx.UserValue + 'tc_InputDir = [' + TRANSFORM(tc_InputFile) + ']' + CR_LF THIS.l_ShowErrors = .F. && La opción "SHOWMSG" muestra su propio mensaje ENDIF @@ -2336,7 +2337,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CD (JUSTPATH(THIS.c_CurDir)) DO CASE - CASE '-SHOWMSG' $ ('-' + tcType) OR '-INTERACTIVE' $ ('-' + tcType) + CASE ATC('-SHOWMSG', ('-' + tcType)) = 1 OR ATC('-INTERACTIVE', ('-' + tcType)) = 1 DO CASE CASE lnCodError = 1799 && Conversion Cancelled From 4d701a7eefc68700acecf7df3e060856a90482b6 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Tue, 23 Dec 2014 20:10:44 +0100 Subject: [PATCH 13/21] Changeset: 579 fdbozzo - 23/12/2014 18:22:46: - INTERACTIVE ya no muestra el mensaje de estado final, solo SHOWMSG, para que el script pueda aprovechar la nueva funcionalidad y seguir mostrando el mensaje --- VFP9_FoxBin2Prg.vbs | 2 +- foxbin2prg.prg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/VFP9_FoxBin2Prg.vbs b/VFP9_FoxBin2Prg.vbs index c053076..8dd760f 100644 --- a/VFP9_FoxBin2Prg.vbs +++ b/VFP9_FoxBin2Prg.vbs @@ -89,7 +89,7 @@ Else If nDebug = 0 Or nDebug = 2 Then cCMD = "oFoxBin2prg.ejecutar( '" & WScript.Arguments(0) & "' )" Else - cCMD = "oFoxBin2prg.ejecutar( '" & WScript.Arguments(0) & "','0','0','0'," _ + cCMD = "oFoxBin2prg.ejecutar( '" & WScript.Arguments(0) & "','INTERACTIVE','0','0'," _ & cFlagDontShowErrMsg & "," & cFlagGenerateLog & ",'1','','',.F.,''," _ & cFlagRecompile & "," & cNoTimestamps & " )" End If diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 8f931da..4a120a6 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -2337,7 +2337,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CD (JUSTPATH(THIS.c_CurDir)) DO CASE - CASE ATC('-SHOWMSG', ('-' + tcType)) = 1 OR ATC('-INTERACTIVE', ('-' + tcType)) = 1 + CASE ATC('-SHOWMSG', ('-' + tcType)) = 1 &&OR ATC('-INTERACTIVE', ('-' + tcType)) = 1 DO CASE CASE lnCodError = 1799 && Conversion Cancelled From 290965f8485e772f6457a7482fa0935c1350aa17 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Tue, 23 Dec 2014 23:46:48 +0100 Subject: [PATCH 14/21] =?UTF-8?q?Changeset:=20580=20fdbozzo=20-=2023/12/20?= =?UTF-8?q?14=2020:10:45:=20-=20Definici=C3=B3n=20final=20y=20arreglo=20de?= =?UTF-8?q?=20INTERACTIVE=20y=20SHOWMSG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 4a120a6..84b8e35 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -120,6 +120,11 @@ * 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) +* 18/12/2014 FDBOZZO v1.19.39 Mejora: Cuando se usan las claves BIN2PRG o PRG2BIN permitir procesar un archivo solo (Mike Potjer) +* 18/12/2014 FDBOZZO v1.19.39 Mejora: Agregar la clave SHOWMSG y dejar INTERACTIVE para un diálogo interactivo (Mike Potjer) +* 18/12/2014 FDBOZZO v1.19.39 Mejora: Cuando se procesa un directorio con foxbin2prg.exe solo y la clave INTERACTIVE, mostrar un diálogo para preguntar qué procesar (Mike Potjer) +* 18/12/2014 FDBOZZO v1.19.39 Bug fix vbs: Los scripts vbs no muestren los errores del proceso de FoxBin2Prg +* * * *--------------------------------------------------------------------------------------------------- @@ -173,6 +178,9 @@ * 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 +* 16/12/2014 Mike Potjer Mejora v1.19.38: Cuando se usan las claves BIN2PRG o PRG2BIN permitir procesar un archivo solo +* 16/12/2014 Mike Potjer Mejora v1.19.38: Agregar la clave SHOWMSG y dejar INTERACTIVE para un diálogo interactivo +* 16/12/2014 Mike Potjer Mejora v1.19.38: Cuando se procesa un directorio con foxbin2prg.exe solo y la clave INTERACTIVE, mostrar un diálogo para preguntar qué procesar * * *--------------------------------------------------------------------------------------------------- @@ -407,7 +415,11 @@ 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', 'BIN2PRG-SHOWMSG', 'PRG2BIN-SHOWMSG', 'SHOWMSG', 'INTERACTIVE') THEN +tc_InputFile = EVL(tc_InputFile,'') +tcType = EVL(tcType,'') + +IF ATC('-BIN2PRG','-'+tc_InputFile) >= 1 OR ATC('-PRG2BIN','-'+tc_InputFile) >= 1 ; + OR ATC('-SHOWMSG','-'+tc_InputFile) >= 1 OR ATC('-INTERACTIVE','-'+tc_InputFile) >= 1 THEN pcParamX = tc_InputFile tc_InputFile = tcType tcType = pcParamX @@ -1954,7 +1966,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- EJECUCIÓN NORMAL - IF ( ATC('-SHOWMSG', ('-' + tcType)) = 1 OR ATC('-INTERACTIVE', ('-' + tcType)) = 1 ) ; + IF ATC('-INTERACTIVE', ('-' + tcType)) >= 1 ; AND ATC('-BIN2PRG', ('-' + tcType)) = 0 AND ATC('-PRG2BIN', ('-' + tcType)) = 0 ; AND lcInputFile_Type == C_FILETYPE_DIRECTORY THEN *-- Se seleccionó un directorio y se puede elegir: Bin2Txt, Txt2Bin y Nada @@ -2025,7 +2037,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM EXIT - CASE ATC('-BIN2PRG', ('-' + tcType)) = 1 + CASE ATC('-BIN2PRG', ('-' + tcType)) >= 1 .writeLog( '> ' + loLang.C_OPTION_LOC + ': BIN2PRG' ) DO CASE @@ -2078,7 +2090,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDCASE - CASE ATC('-PRG2BIN', ('-' + tcType)) = 1 + CASE ATC('-PRG2BIN', ('-' + tcType)) >= 1 .writeLog( '> ' + loLang.C_OPTION_LOC + ': PRG2BIN' ) DO CASE @@ -2301,7 +2313,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM loLang = CREATEOBJECT("CL_LANG","EN") ENDIF - IF ATC('-SHOWMSG', ('-' + tcType)) = 1 OR ATC('-INTERACTIVE', ('-' + tcType)) = 1 THEN + IF ATC('-SHOWMSG', ('-' + tcType)) >= 1 THEN toEx.UserValue = toEx.UserValue + 'tc_InputDir = [' + TRANSFORM(tc_InputFile) + ']' + CR_LF THIS.l_ShowErrors = .F. && La opción "SHOWMSG" muestra su propio mensaje ENDIF @@ -2337,7 +2349,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CD (JUSTPATH(THIS.c_CurDir)) DO CASE - CASE ATC('-SHOWMSG', ('-' + tcType)) = 1 &&OR ATC('-INTERACTIVE', ('-' + tcType)) = 1 + CASE ATC('-SHOWMSG', ('-' + tcType)) >= 1 DO CASE CASE lnCodError = 1799 && Conversion Cancelled From 2cee2819d4c37f1c647799efb716a3b3c0d7cb03 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Wed, 31 Dec 2014 01:37:31 +0100 Subject: [PATCH 15/21] =?UTF-8?q?Changeset:=20581=20fdbozzo=20-=2023/12/20?= =?UTF-8?q?14=2023:46:48:=20-=20Bug=20fix=20dc2:=20Los=20datos=20de=20Disp?= =?UTF-8?q?layClass=20y=20DisplayClassLibrary=20ten=C3=ADan=20el=20valor?= =?UTF-8?q?=20de=20"Default"=20en=20vez=20del=20propio=20(Christopher=20Ku?= =?UTF-8?q?rth/Ryan=20Harris)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TESTS/DATOS_READONLY/FB2P_DBC.DC2 | 18 +++++++++--------- TESTS/DATOS_READONLY/fb2p_dbc.dbc | Bin 8968 -> 8968 bytes TESTS/DATOS_READONLY/fb2p_dbc.dct | Bin 138240 -> 147328 bytes foxbin2prg.prg | 6 ++++-- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/TESTS/DATOS_READONLY/FB2P_DBC.DC2 b/TESTS/DATOS_READONLY/FB2P_DBC.DC2 index 4957365..06eda8c 100644 --- a/TESTS/DATOS_READONLY/FB2P_DBC.DC2 +++ b/TESTS/DATOS_READONLY/FB2P_DBC.DC2 @@ -609,17 +609,17 @@ dummy - - + Dummy + Dummy_field_comment C(1) - - - - - + Depto. + cl_optiongroup + fb2p_test.vcx + ! + XXXXXXXXXX .F. - - + dummy_field_validation_rule() + dummy_field_validation_message .T. DUAL.DUMMY diff --git a/TESTS/DATOS_READONLY/fb2p_dbc.dbc b/TESTS/DATOS_READONLY/fb2p_dbc.dbc index e663ef900069390afe5579c6b750060653857050..39fe57a02a013aa2ca1f01903a9c2fcf50105719 100644 GIT binary patch delta 43 zcmV+`0M!48Mu|%G0__O1{0^840{RG(mKvi1(g>3~8>0gC2(#cDC|%G0>1&X{0^840?z=GmKvi1wE>em8>0fp0JGp5CMaGGu zT43HWAnzDZuPKyNSXnxLWxRY~qq$vD3rh0! zCJKszHI?Akq>iGAffsCqg-dB}ZY7Wj1|S!9;Wxzqk11k6?TifU@oAZQ=F}+G$&O<6Bf!}2hb^!5T`JxfnCRy z0!p)xv@rSOX<;6qCG$ZTeiNHK|1*hz36C<#GIbiuF2eeog NoS<(53(DI-4gfdVO#A=< delta 35 rcmZqp&(W}hgM)#Aqkw^d!C|A|C&q~ioXyNk?aWM!+nJe|{z?J>tQH91 diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 84b8e35..551c919 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -124,6 +124,7 @@ * 18/12/2014 FDBOZZO v1.19.39 Mejora: Agregar la clave SHOWMSG y dejar INTERACTIVE para un diálogo interactivo (Mike Potjer) * 18/12/2014 FDBOZZO v1.19.39 Mejora: Cuando se procesa un directorio con foxbin2prg.exe solo y la clave INTERACTIVE, mostrar un diálogo para preguntar qué procesar (Mike Potjer) * 18/12/2014 FDBOZZO v1.19.39 Bug fix vbs: Los scripts vbs no muestren los errores del proceso de FoxBin2Prg +* 30/12/2014 FDBOZZO v1.19.39 Bug fix dc2: Los datos de DisplayClass y DisplayClassLibrary tenían el valor de "Default" en vez del propio (Ryan Harris) * * * @@ -181,6 +182,7 @@ * 16/12/2014 Mike Potjer Mejora v1.19.38: Cuando se usan las claves BIN2PRG o PRG2BIN permitir procesar un archivo solo * 16/12/2014 Mike Potjer Mejora v1.19.38: Agregar la clave SHOWMSG y dejar INTERACTIVE para un diálogo interactivo * 16/12/2014 Mike Potjer Mejora v1.19.38: Cuando se procesa un directorio con foxbin2prg.exe solo y la clave INTERACTIVE, mostrar un diálogo para preguntar qué procesar +* 30/12/2014 Ryan Harris Bug Fix v1.19.38: Los datos de DisplayClass y DisplayClassLibrary tenían el valor de "Default" en vez del propio * * *--------------------------------------------------------------------------------------------------- @@ -17609,8 +17611,8 @@ DEFINE CLASS CL_DBC_FIELD_VW AS CL_DBC_BASE <<>> <> <<>> <> <<>> <> - <<>> <> - <<>> <> + <<>> <> + <<>> <> <<>> <> <<>> <> <<>> <> From 8365719d1ef42d271240ffafce731e80441994a3 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 1 Jan 2015 19:17:02 +0100 Subject: [PATCH 16/21] =?UTF-8?q?Changeset:=20582=20fdbozzo=20-=2031/12/20?= =?UTF-8?q?14=2001:37:32:=20-=20Actualizaci=C3=B3n=20de=20cr=C3=A9ditos=20?= =?UTF-8?q?y=20agradecimientos?= 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 551c919..61862d3 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -124,7 +124,7 @@ * 18/12/2014 FDBOZZO v1.19.39 Mejora: Agregar la clave SHOWMSG y dejar INTERACTIVE para un diálogo interactivo (Mike Potjer) * 18/12/2014 FDBOZZO v1.19.39 Mejora: Cuando se procesa un directorio con foxbin2prg.exe solo y la clave INTERACTIVE, mostrar un diálogo para preguntar qué procesar (Mike Potjer) * 18/12/2014 FDBOZZO v1.19.39 Bug fix vbs: Los scripts vbs no muestren los errores del proceso de FoxBin2Prg -* 30/12/2014 FDBOZZO v1.19.39 Bug fix dc2: Los datos de DisplayClass y DisplayClassLibrary tenían el valor de "Default" en vez del propio (Ryan Harris) +* 30/12/2014 FDBOZZO v1.19.39 Bug fix dc2: Los datos de DisplayClass y DisplayClassLibrary tenían el valor de "Default" en vez del propio (Christopher Kurth/Ryan Harris) * * * @@ -182,7 +182,7 @@ * 16/12/2014 Mike Potjer Mejora v1.19.38: Cuando se usan las claves BIN2PRG o PRG2BIN permitir procesar un archivo solo * 16/12/2014 Mike Potjer Mejora v1.19.38: Agregar la clave SHOWMSG y dejar INTERACTIVE para un diálogo interactivo * 16/12/2014 Mike Potjer Mejora v1.19.38: Cuando se procesa un directorio con foxbin2prg.exe solo y la clave INTERACTIVE, mostrar un diálogo para preguntar qué procesar -* 30/12/2014 Ryan Harris Bug Fix v1.19.38: Los datos de DisplayClass y DisplayClassLibrary tenían el valor de "Default" en vez del propio +* 30/12/2014 Ryan Harris Reporte bug dbc v1.19.38: Los datos de DisplayClass y DisplayClassLibrary tenían el valor de "Default" en vez del propio * * *--------------------------------------------------------------------------------------------------- From 2f9208474bf1fe79eca2794a9baebb446c46f28a Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 1 Jan 2015 19:29:36 +0100 Subject: [PATCH 17/21] Changeset: 583 fdbozzo - 01/01/2015 19:17:03: - Mostrar los mensajes de error siempre maximizados, para evitar que queden ocultos --- Convert_VFP9_BIN_2_PRG.vbs | 4 ++-- Convert_VFP9_PRG_2_BIN.vbs | 4 ++-- VFP9_FoxBin2Prg.vbs | 4 ++-- foxbin2prg.prg | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Convert_VFP9_BIN_2_PRG.vbs b/Convert_VFP9_BIN_2_PRG.vbs index 20dd635..75b9077 100644 --- a/Convert_VFP9_BIN_2_PRG.vbs +++ b/Convert_VFP9_BIN_2_PRG.vbs @@ -119,13 +119,13 @@ Else MsgBox cConvCancelByUserMsg & "! [p:" & nProcessedFilesCount & "]", 48+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" oVFP9.DoCmd("oFoxBin2prg.writeErrorLog_Flush()") cErrFile = oVFP9.Eval("oFoxBin2prg.c_ErrorLogFile") - WSHShell.run cErrFile + WSHShell.run cErrFile,3 ElseIf oVFP9.Eval("oFoxBin2prg.l_Error") Then MsgBox cEndOfProcessMsg & "! (" & cWithErrorsMsg & ") [p:" & nProcessedFilesCount & "]", 48+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" oVFP9.DoCmd("oFoxBin2prg.writeErrorLog_Flush()") cErrFile = oVFP9.Eval("oFoxBin2prg.c_ErrorLogFile") - WSHShell.run cErrFile + WSHShell.run cErrFile,3 Else MsgBox cEndOfProcessMsg & "! [p:" & nProcessedFilesCount & "]", 64+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" End If diff --git a/Convert_VFP9_PRG_2_BIN.vbs b/Convert_VFP9_PRG_2_BIN.vbs index df387a8..58f5ade 100644 --- a/Convert_VFP9_PRG_2_BIN.vbs +++ b/Convert_VFP9_PRG_2_BIN.vbs @@ -125,13 +125,13 @@ Else MsgBox cConvCancelByUserMsg & "! [p:" & nProcessedFilesCount & "]", 48+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" oVFP9.DoCmd("oFoxBin2prg.writeErrorLog_Flush()") cErrFile = oVFP9.Eval("oFoxBin2prg.c_ErrorLogFile") - WSHShell.run cErrFile + WSHShell.run cErrFile,3 ElseIf oVFP9.Eval("oFoxBin2prg.l_Error") Then MsgBox cEndOfProcessMsg & "! (" & cWithErrorsMsg & ") [p:" & nProcessedFilesCount & "]", 48+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" oVFP9.DoCmd("oFoxBin2prg.writeErrorLog_Flush()") cErrFile = oVFP9.Eval("oFoxBin2prg.c_ErrorLogFile") - WSHShell.run cErrFile + WSHShell.run cErrFile,3 Else MsgBox cEndOfProcessMsg & "! [p:" & nProcessedFilesCount & "]", 64+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" End If diff --git a/VFP9_FoxBin2Prg.vbs b/VFP9_FoxBin2Prg.vbs index 8dd760f..bfb05b3 100644 --- a/VFP9_FoxBin2Prg.vbs +++ b/VFP9_FoxBin2Prg.vbs @@ -110,13 +110,13 @@ Else MsgBox cConvCancelByUserMsg & "! [p:" & nProcessedFilesCount & "]", 48+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" oVFP9.DoCmd("oFoxBin2prg.writeErrorLog_Flush()") cErrFile = oVFP9.Eval("oFoxBin2prg.c_ErrorLogFile") - WSHShell.run cErrFile + WSHShell.run cErrFile,3 ElseIf oVFP9.Eval("oFoxBin2prg.l_Error") Then MsgBox cEndOfProcessMsg & "! (" & cWithErrorsMsg & ") [p:" & nProcessedFilesCount & "]", 48+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" oVFP9.DoCmd("oFoxBin2prg.writeErrorLog_Flush()") cErrFile = oVFP9.Eval("oFoxBin2prg.c_ErrorLogFile") - WSHShell.run cErrFile + WSHShell.run cErrFile,3 Else MsgBox cEndOfProcessMsg & "! [p:" & nProcessedFilesCount & "]", 64+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" End If diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 61862d3..9dd3df0 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -2357,12 +2357,12 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CASE lnCodError = 1799 && Conversion Cancelled MESSAGEBOX( loLang.C_CONVERSION_CANCELLED_BY_USER_LOC + '! [p:' + TRANSFORM( THIS.n_ProcessedFilesCount ) + ']', 0+48+4096, 'FoxBin2Prg', 60000 ) THIS.writeErrorLog_Flush( ) - loWSH.Run( THIS.c_ErrorLogFile, 1, .F. ) + loWSH.Run( THIS.c_ErrorLogFile, 3 ) CASE THIS.l_Error MESSAGEBOX( loLang.C_END_OF_PROCESS_LOC + '! (' + loLang.C_WITH_ERRORS_LOC + ') [p:' + TRANSFORM( THIS.n_ProcessedFilesCount ) + ']', 0+48+4096, 'FoxBin2Prg', 60000 ) THIS.writeErrorLog_Flush( ) - loWSH.Run( THIS.c_ErrorLogFile, 1, .F. ) + loWSH.Run( THIS.c_ErrorLogFile, 3 ) OTHERWISE MESSAGEBOX( loLang.C_END_OF_PROCESS_LOC + ' [p:' + TRANSFORM( THIS.n_ProcessedFilesCount ) + ']', 0+64+4096, 'FoxBin2Prg', 60000 ) From bd104c7ed24fca4243f9726c33c96e188a294e2d Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 1 Jan 2015 19:30:45 +0100 Subject: [PATCH 18/21] Changeset: 584 fdbozzo - 01/01/2015 19:29:36: - Limpieza foxbin2prg.cfg --- foxbin2prg.cfg | 2 -- 1 file changed, 2 deletions(-) diff --git a/foxbin2prg.cfg b/foxbin2prg.cfg index aa1c3ff..813537d 100644 --- a/foxbin2prg.cfg +++ b/foxbin2prg.cfg @@ -63,5 +63,3 @@ *extension: mn2=mna *extension: db2=dba *extension: dc2=dca - - From 85985f58bcd91dc75017b2550f27ad599498b30d Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 1 Jan 2015 20:04:52 +0100 Subject: [PATCH 19/21] Changeset: 585 fdbozzo - 01/01/2015 19:30:45: - Mejoras en info de LOG --- foxbin2prg.prg | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 9dd3df0..e42e802 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -686,9 +686,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ADDPROPERTY(_SCREEN, 'ExitCode', 0) THIS.writeLog( REPLICATE( '*', 100 ) ) - THIS.writeLog( 'FoxBin2Prg ' + THIS.c_FB2PRG_EXE_Version + ' INIT' ) + THIS.writeLog( 'FoxBin2Prg INIT' ) THIS.writeLog( REPLICATE( '*', 100 ) ) - THIS.writeLog( 'Executing: ' + THIS.c_Foxbin2prg_FullPath + ' (EXE Version: ' + THIS.c_FB2PRG_EXE_Version + ')' ) + THIS.writeLog( 'FoxBin2Prg: [' + THIS.c_Foxbin2prg_FullPath + '] (EXE Version: ' + THIS.c_FB2PRG_EXE_Version + ')' ) THIS.ChangeLanguage() THIS.o_FSO = CREATEOBJECT("Scripting.FileSystemObject") @@ -2314,13 +2314,15 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM 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 ATC('-SHOWMSG', ('-' + tcType)) >= 1 THEN - toEx.UserValue = toEx.UserValue + 'tc_InputDir = [' + TRANSFORM(tc_InputFile) + ']' + CR_LF + toEx.UserValue = toEx.UserValue + 'lcInputFile_Type = [' + TRANSFORM(lcInputFile_Type) + ']' + CR_LF THIS.l_ShowErrors = .F. && La opción "SHOWMSG" muestra su propio mensaje ENDIF - toEx.USERVALUE = toEx.USERVALUE + 'tc_InputFile = ' + TRANSFORM(tc_InputFile) + CR_LF + toEx.USERVALUE = toEx.USERVALUE + 'tc_InputFile = [' + TRANSFORM(tc_InputFile) + ']' + CR_LF THIS.ejecutar_WriteErrorLog( @toEx, @lcErrorInfo ) From 9313374745bea1b832d720bc0367a6254297f2bc Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 1 Jan 2015 20:22:33 +0100 Subject: [PATCH 20/21] Changeset: 586 fdbozzo - 01/01/2015 20:04:52: --- foxbin2prg.prg | 1 - 1 file changed, 1 deletion(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index e42e802..342095b 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -125,7 +125,6 @@ * 18/12/2014 FDBOZZO v1.19.39 Mejora: Cuando se procesa un directorio con foxbin2prg.exe solo y la clave INTERACTIVE, mostrar un diálogo para preguntar qué procesar (Mike Potjer) * 18/12/2014 FDBOZZO v1.19.39 Bug fix vbs: Los scripts vbs no muestren los errores del proceso de FoxBin2Prg * 30/12/2014 FDBOZZO v1.19.39 Bug fix dc2: Los datos de DisplayClass y DisplayClassLibrary tenían el valor de "Default" en vez del propio (Christopher Kurth/Ryan Harris) -* * * *--------------------------------------------------------------------------------------------------- From 43c5464d6c7adf8bf46dfd5639d237f5905305dc Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 1 Jan 2015 20:23:19 +0100 Subject: [PATCH 21/21] =?UTF-8?q?Changeset:=20587=20fdbozzo=20-=2001/01/20?= =?UTF-8?q?15=2020:22:33:=20-=20Generaci=C3=B3n=20del=20EXE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.exe | Bin 500655 -> 509708 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 8738b1282fcfeddacdce703b92674b0fb6ee9729..00e4b7dc2efb41810b5f77e0dc3300fe54db11bd 100644 GIT binary patch delta 43685 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≪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≪E#3|6KMCUj{0HxH`9rlM&2L1jZ=duY4j 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 MZI;O&)W_8S0BV^dPyhe` delta 34909 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