diff --git a/Convert_VFP9_BIN_2_PRG.vbs b/Convert_VFP9_BIN_2_PRG.vbs index 8a6bebf..75b9077 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, 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 @@ -111,20 +110,24 @@ Else Next If GetBit(nDebug, 4) Then - 'If oVFP9.Eval("oFoxBin2prg.l_Error") Then - 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 & "' )") - WSHShell.run cErrFile + 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") - 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 & "' )") - WSHShell.run cErrFile + If nExitCode = 1799 Then + 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,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,3 Else - MsgBox "End of Process!", 64, WScript.ScriptName + MsgBox cEndOfProcessMsg & "! [p:" & nProcessedFilesCount & "]", 64+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" End If End If @@ -156,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 1790852..58f5ade 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, 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 @@ -117,20 +116,24 @@ Else Next If GetBit(nDebug, 4) Then - 'If oVFP9.Eval("oFoxBin2prg.l_Error") Then - 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 & "' )") - WSHShell.run cErrFile + 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") - 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 & "' )") - WSHShell.run cErrFile + If nExitCode = 1799 Then + 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,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,3 Else - MsgBox "End of Process!", 64, WScript.ScriptName + MsgBox cEndOfProcessMsg & "! [p:" & nProcessedFilesCount & "]", 64+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" End If End If @@ -162,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/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 11b4dd7..47019ad 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -2,8 +2,8 @@ Lparameters toUpdateInfo Local lcNote With toUpdateInfo - .VersionNumber = 'v1.19.38' - .VersionDate = Date(2014,12,13) + .VersionNumber = 'v1.19.39' + .VersionDate = Date(2015,01,01) .SourceFileUrl = 'http://vfpxrepository.com/dl/thorupdate/Projects/FoxBin2Prg/FoxBin2Prg.Zip' .Link = 'http://vfpx.codeplex.com/wikipage?title=FoxBin2PRG' @@ -17,6 +17,14 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg Change History ------------------------------------------------------------- +2015/01/01 v1.19.39 +- Bug fix vbs: vbs scripts does not show FoxBin2Prg process errors correctly +- When using BIN2PRG or PRG2BIN keywords with FoxBin2Prg command line, allow processing one file (Mike Potjer) +- Add keyword SHOWMSG and use INTERACTIVE keyword for an interactive dialog (Mike Potjer) +- When processing a directory from commandline with foxbin2prg alone and the INTERACTIVE keyword, show a dialog to ask what to process (Mike Potjer) +- Bug fix dc2: DisplayClass and DisplayClassLibrary values got the wrong value "Default" and not the corresponding own values (Christopher Kurth/Ryan Harris) +- Deleted recompilation scripts for language, because it is an automatic selection now + 2014/12/13 v1.19.38 - Feature: Now is possible to use FoxBin2Prg for batch conversions directly from the File Explorer (see README.txt), without the need of vbs scripts, that sometimes can make trouble or are not permitted by IT department (Francisco Prieto) - Feature: Enhanced Multilanguage support by 3 ways: 1-Automatic [DEFAULT] (depending on VERSION(3)); 2-By parameter, using the new method ChangeLanguage(); 3-Using the new setting "Language" in foxbin2prg.cfg 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 e663ef9..39fe57a 100644 Binary files a/TESTS/DATOS_READONLY/fb2p_dbc.dbc and b/TESTS/DATOS_READONLY/fb2p_dbc.dbc differ diff --git a/TESTS/DATOS_READONLY/fb2p_dbc.dct b/TESTS/DATOS_READONLY/fb2p_dbc.dct index 2efee30..b5f6cf7 100644 Binary files a/TESTS/DATOS_READONLY/fb2p_dbc.dct and b/TESTS/DATOS_READONLY/fb2p_dbc.dct differ diff --git a/TESTS/ft__foxbin2prg__c_conversor_prg_a_dbf.prg b/TESTS/ft__foxbin2prg__c_conversor_prg_a_dbf.prg index 2bdc3b1..c7a48a5 100644 --- a/TESTS/ft__foxbin2prg__c_conversor_prg_a_dbf.prg +++ b/TESTS/ft__foxbin2prg__c_conversor_prg_a_dbf.prg @@ -113,7 +113,7 @@ DEFINE CLASS ft__foxbin2prg__c_conversor_prg_a_dbf AS FxuTestCase OF FxuTestCase oFXU_LIB.copiarArchivosParaTest( lc_File ) - loCnv.Ejecutar( lc_File, '', '', '', '1', '0', '1',.F.,.F.,.T. ) + loCnv.Ejecutar( lc_OutputFile, '', '', '', '1', '0', '1',.F.,.F.,.T. ) SELECT 0 USE (FORCEEXT(lc_InputFile,'DBF')) SHARED AGAIN NOUPDATE ALIAS ARCHIVOBIN_IN @@ -185,7 +185,7 @@ DEFINE CLASS ft__foxbin2prg__c_conversor_prg_a_dbf AS FxuTestCase OF FxuTestCase oFXU_LIB.copiarArchivosParaTest( lc_File ) - loCnv.Ejecutar( lc_File, '', '', '', '1', '0', '1',.F.,.F.,.T. ) + loCnv.Ejecutar( lc_OutputFile, '', '', '', '1', '0', '1',.F.,.F.,.T. ) SELECT 0 USE (FORCEEXT(lc_InputFile,'DBF')) SHARED AGAIN NOUPDATE ALIAS ARCHIVOBIN_IN @@ -258,8 +258,8 @@ DEFINE CLASS ft__foxbin2prg__c_conversor_prg_a_dbf AS FxuTestCase OF FxuTestCase oFXU_LIB.copiarArchivosParaTest( FORCEEXT(lc_File,'*') ) - loCnv.Ejecutar( FORCEEXT(lc_File,'DBF'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) - loCnv.Ejecutar( FORCEEXT(lc_File,'DB2'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile,'DBF'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile,'DB2'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) SELECT 0 USE (FORCEEXT(lc_InputFile,'DBF')) SHARED AGAIN NOUPDATE ALIAS ARCHIVOBIN_IN @@ -331,8 +331,8 @@ DEFINE CLASS ft__foxbin2prg__c_conversor_prg_a_dbf AS FxuTestCase OF FxuTestCase oFXU_LIB.copiarArchivosParaTest( FORCEEXT(lc_File,'*') ) - loCnv.Ejecutar( FORCEEXT(lc_File,'DBF'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) - loCnv.Ejecutar( FORCEEXT(lc_File,'DB2'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile,'DBF'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile,'DB2'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) SELECT 0 USE (FORCEEXT(lc_InputFile,'DBF')) SHARED AGAIN NOUPDATE ALIAS ARCHIVOBIN_IN diff --git a/TESTS/ft__foxbin2prg__c_conversor_prg_a_mnx.prg b/TESTS/ft__foxbin2prg__c_conversor_prg_a_mnx.prg index 209ff67..6fb2ccd 100644 --- a/TESTS/ft__foxbin2prg__c_conversor_prg_a_mnx.prg +++ b/TESTS/ft__foxbin2prg__c_conversor_prg_a_mnx.prg @@ -111,17 +111,17 @@ DEFINE CLASS ft__foxbin2prg__c_conversor_prg_a_mnx AS FxuTestCase OF FxuTestCase oFXU_LIB.copiarArchivosParaTest( FORCEEXT(lc_File,'*') ) *-- Genero el DC2 - loCnv.Ejecutar( FORCEEXT(lc_File,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) *-- Regenero el DBC - loCnv.Ejecutar( FORCEEXT(lc_File,'MN2'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile,'MN2'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) *-- Renombro el DC2 a DC3 (ORIGINAL) RENAME (FORCEEXT(lc_OutputFile,'MN2')) TO (FORCEEXT(lc_OutputFile,'MN3')) *-- Genero el DC2 desde el DBC regenerado - loCnv.Ejecutar( FORCEEXT(lc_File,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) *-- Comparo los MN2 y MN3 lnLenHeader = LEN( loCnv.get_PROGRAM_HEADER() ) - lcMN2 = SUBSTR( FILETOSTR( FORCEEXT(lc_File,'MN2') ), lnLenHeader ) - lcMN3 = SUBSTR( FILETOSTR( FORCEEXT(lc_File,'MN3') ), lnLenHeader ) + lcMN2 = SUBSTR( FILETOSTR( FORCEEXT(lc_OutputFile,'MN2') ), lnLenHeader ) + lcMN3 = SUBSTR( FILETOSTR( FORCEEXT(lc_OutputFile,'MN3') ), lnLenHeader ) *-- Visualización de valores @@ -171,17 +171,17 @@ DEFINE CLASS ft__foxbin2prg__c_conversor_prg_a_mnx AS FxuTestCase OF FxuTestCase oFXU_LIB.copiarArchivosParaTest( FORCEEXT(lc_File,'*') ) *-- Genero el DC2 - loCnv.Ejecutar( FORCEEXT(lc_File,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) *-- Regenero el DBC - loCnv.Ejecutar( FORCEEXT(lc_File,'MN2'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile,'MN2'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) *-- Renombro el DC2 a DC3 (ORIGINAL) RENAME (FORCEEXT(lc_OutputFile,'MN2')) TO (FORCEEXT(lc_OutputFile,'MN3')) *-- Genero el DC2 desde el DBC regenerado - loCnv.Ejecutar( FORCEEXT(lc_File,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) *-- Comparo los MN2 y MN3 lnLenHeader = LEN( loCnv.get_PROGRAM_HEADER() ) - lcMN2 = SUBSTR( FILETOSTR( FORCEEXT(lc_File,'MN2') ), lnLenHeader ) - lcMN3 = SUBSTR( FILETOSTR( FORCEEXT(lc_File,'MN3') ), lnLenHeader ) + lcMN2 = SUBSTR( FILETOSTR( FORCEEXT(lc_OutputFile,'MN2') ), lnLenHeader ) + lcMN3 = SUBSTR( FILETOSTR( FORCEEXT(lc_OutputFile,'MN3') ), lnLenHeader ) *-- Visualización de valores @@ -231,17 +231,17 @@ DEFINE CLASS ft__foxbin2prg__c_conversor_prg_a_mnx AS FxuTestCase OF FxuTestCase oFXU_LIB.copiarArchivosParaTest( FORCEEXT(lc_File,'*') ) *-- Genero el DC2 - loCnv.Ejecutar( FORCEEXT(lc_File,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) *-- Regenero el DBC - loCnv.Ejecutar( FORCEEXT(lc_File,'MN2'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile,'MN2'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) *-- Renombro el DC2 a DC3 (ORIGINAL) RENAME (FORCEEXT(lc_OutputFile,'MN2')) TO (FORCEEXT(lc_OutputFile,'MN3')) *-- Genero el DC2 desde el DBC regenerado - loCnv.Ejecutar( FORCEEXT(lc_File,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) *-- Comparo los MN2 y MN3 lnLenHeader = LEN( loCnv.get_PROGRAM_HEADER() ) - lcMN2 = SUBSTR( FILETOSTR( FORCEEXT(lc_File,'MN2') ), lnLenHeader ) - lcMN3 = SUBSTR( FILETOSTR( FORCEEXT(lc_File,'MN3') ), lnLenHeader ) + lcMN2 = SUBSTR( FILETOSTR( FORCEEXT(lc_OutputFile,'MN2') ), lnLenHeader ) + lcMN3 = SUBSTR( FILETOSTR( FORCEEXT(lc_OutputFile,'MN3') ), lnLenHeader ) *-- Visualización de valores @@ -291,17 +291,17 @@ DEFINE CLASS ft__foxbin2prg__c_conversor_prg_a_mnx AS FxuTestCase OF FxuTestCase oFXU_LIB.copiarArchivosParaTest( FORCEEXT(lc_File,'*') ) *-- Genero el DC2 - loCnv.Ejecutar( FORCEEXT(lc_File,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) *-- Regenero el DBC - loCnv.Ejecutar( FORCEEXT(lc_File,'MN2'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile,'MN2'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) *-- Renombro el DC2 a DC3 (ORIGINAL) RENAME (FORCEEXT(lc_OutputFile,'MN2')) TO (FORCEEXT(lc_OutputFile,'MN3')) *-- Genero el DC2 desde el DBC regenerado - loCnv.Ejecutar( FORCEEXT(lc_File,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) *-- Comparo los MN2 y MN3 lnLenHeader = LEN( loCnv.get_PROGRAM_HEADER() ) - lcMN2 = SUBSTR( FILETOSTR( FORCEEXT(lc_File,'MN2') ), lnLenHeader ) - lcMN3 = SUBSTR( FILETOSTR( FORCEEXT(lc_File,'MN3') ), lnLenHeader ) + lcMN2 = SUBSTR( FILETOSTR( FORCEEXT(lc_OutputFile,'MN2') ), lnLenHeader ) + lcMN3 = SUBSTR( FILETOSTR( FORCEEXT(lc_OutputFile,'MN3') ), lnLenHeader ) *-- Visualización de valores @@ -351,17 +351,17 @@ DEFINE CLASS ft__foxbin2prg__c_conversor_prg_a_mnx AS FxuTestCase OF FxuTestCase oFXU_LIB.copiarArchivosParaTest( FORCEEXT(lc_File,'*') ) *-- Genero el DC2 - loCnv.Ejecutar( FORCEEXT(lc_File,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) *-- Regenero el DBC - loCnv.Ejecutar( FORCEEXT(lc_File,'MN2'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile,'MN2'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) *-- Renombro el DC2 a DC3 (ORIGINAL) RENAME (FORCEEXT(lc_OutputFile,'MN2')) TO (FORCEEXT(lc_OutputFile,'MN3')) *-- Genero el DC2 desde el DBC regenerado - loCnv.Ejecutar( FORCEEXT(lc_File,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile,'MNX'), '', '', '', '1', '0', '1',.F.,.F.,.T. ) *-- Comparo los MN2 y MN3 lnLenHeader = LEN( loCnv.get_PROGRAM_HEADER() ) - lcMN2 = SUBSTR( FILETOSTR( FORCEEXT(lc_File,'MN2') ), lnLenHeader ) - lcMN3 = SUBSTR( FILETOSTR( FORCEEXT(lc_File,'MN3') ), lnLenHeader ) + lcMN2 = SUBSTR( FILETOSTR( FORCEEXT(lc_OutputFile,'MN2') ), lnLenHeader ) + lcMN3 = SUBSTR( FILETOSTR( FORCEEXT(lc_OutputFile,'MN3') ), lnLenHeader ) *-- Visualización de valores diff --git a/VFP9_FoxBin2Prg.vbs b/VFP9_FoxBin2Prg.vbs index 5ef8430..bfb05b3 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, nProcessedFilesCount Dim nExitCode, cEXETool, cEXETool2, nDebug Set wshShell = CreateObject( "WScript.Shell" ) Set FileSystemObject = WScript.CreateObject("Scripting.FileSystemObject") @@ -89,8 +89,8 @@ Else If nDebug = 0 Or nDebug = 2 Then cCMD = "oFoxBin2prg.ejecutar( '" & WScript.Arguments(0) & "' )" Else - cCMD = "oFoxBin2prg.ejecutar( '" & WScript.Arguments(0) & "','0','0','0'," _ - & cFlagDontShowErrMsg & "," & cFlagGenerateLog & ",'0','','',.F.,''," _ + cCMD = "oFoxBin2prg.ejecutar( '" & WScript.Arguments(0) & "','INTERACTIVE','0','0'," _ + & cFlagDontShowErrMsg & "," & cFlagGenerateLog & ",'1','','',.F.,''," _ & cFlagRecompile & "," & cNoTimestamps & " )" End If If cFlagJustShowCall = "1" Then @@ -101,20 +101,24 @@ Else End If If GetBit(nDebug, 4) Then - 'If oVFP9.Eval("oFoxBin2prg.l_Error") Then - 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 & "' )") - WSHShell.run cErrFile + 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") - 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 & "' )") - WSHShell.run cErrFile + If nExitCode = 1799 Then + 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,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,3 Else - MsgBox "End of Process!", 64, WScript.ScriptName + MsgBox cEndOfProcessMsg & "! [p:" & nProcessedFilesCount & "]", 64+4096, WScript.ScriptName & " (" & oVFP9.Eval("oFoxBin2prg.c_FB2PRG_EXE_Version") & ")" End If End If 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 - - diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 8738b12..dd4f859 100644 Binary files a/foxbin2prg.exe and b/foxbin2prg.exe differ 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 34f7a7f..9ad7cf4 100644 Binary files a/foxbin2prg.pjt and b/foxbin2prg.pjt differ diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx index d6b8460..7cf24a5 100644 Binary files a/foxbin2prg.pjx and b/foxbin2prg.pjx differ diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 1083630..30509dd 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 +* 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) * * *--------------------------------------------------------------------------------------------------- @@ -173,6 +178,10 @@ * 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 +* 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 * * *--------------------------------------------------------------------------------------------------- @@ -389,6 +398,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' @@ -403,7 +416,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-INTERACTIVE', 'PRG2BIN-INTERACTIVE', '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 @@ -521,6 +538,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -562,7 +580,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 +623,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 @@ -650,11 +669,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 @@ -665,13 +679,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() + 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( REPLICATE( '*', 100 ) ) + THIS.writeLog( 'FoxBin2Prg INIT' ) + THIS.writeLog( REPLICATE( '*', 100 ) ) + THIS.writeLog( 'FoxBin2Prg: [' + 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") - lc_Foxbin2prg_EXE = FORCEEXT( THIS.c_Foxbin2prg_FullPath, 'EXE' ) - THIS.c_FB2PRG_EXE_Version = IIF( AGETFILEVERSION( laValues, lc_Foxbin2prg_EXE ) = 0, TRANSFORM(THIS.n_FB2PRG_Version), laValues(4) ) - ADDPROPERTY(_SCREEN, 'ExitCode', 0) - THIS.writeLog( THIS.c_Foxbin2prg_FullPath + ' (EXE Version: ' + THIS.c_FB2PRG_EXE_Version + ')' ) THIS.EvaluarConfiguracion() RELEASE lcSys16, lnPosProg, lc_Foxbin2prg_EXE, laValues RETURN @@ -1257,10 +1278,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' ; @@ -1274,30 +1312,49 @@ 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 .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 - 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 @@ -1305,32 +1362,30 @@ 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 *-- 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 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) ) .set_Line( @lcConfigLine, @laConfig, I ) .get_SeparatedLineAndComment( @lcConfigLine ) laConfig(I) = LOWER( lcConfigLine ) @@ -1409,35 +1464,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 @@ -1526,6 +1581,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 @@ -1548,7 +1604,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 @@ -1556,9 +1612,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM lo_CFG.l_OptimizeByFilestamp = NOT (TRANSFORM(tcOptimizeByFilestamp) == '0') ENDIF - .writeLog( '> USING THIS CONFIG:' ) - .writeLog( C_TAB + 'l_CFG_CachedAccess: ' + TRANSFORM(.l_CFG_CachedAccess) ; - + ' ( InputFile=[' + EVL(tc_InputFile,'') + '], CFG=[' + EVL(lo_CFG.c_Foxbin2prg_ConfigFile, '(Internal defaults)') + '] )' ) + .writeLog( '> ' + 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) ) + .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 + ')' ) @@ -1573,7 +1631,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 @@ -1597,6 +1654,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDWITH && THIS CATCH TO loEx + loEx.UserValue = loEx.UserValue + 'lcConfigFile = [' + TRANSFORM(lcConfigFile) + ']' + CR_LF + loEx.UserValue = loEx.UserValue + 'lc_CFG_Path = [' + TRANSFORM(lc_CFG_Path) + ']' + CR_LF + loEx.UserValue = loEx.UserValue + 'lcValue = [' + TRANSFORM(lcValue) + ']' + CR_LF + IF THIS.l_Debug AND _VFP.STARTMODE = 0 SET STEP ON ENDIF @@ -1816,25 +1877,28 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM , tcBackupLevels, tcClearUniqueID, tcOptimizeByFilestamp TRY - LOCAL I, lcPath, lnCodError, lcFileSpec, lcFile, laFiles(1,5), laDirInfo(1,5) ; - , lnFileCount, lcErrorInfo, lcErrorFile, lnPCount, laParams(1) ; + 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 ; - , 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' lnCodError = 0 + 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 @@ -1843,8 +1907,19 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM * EXIT *ENDIF - IF EMPTY(tcRecompile) AND NOT EMPTY(tc_InputFile) AND ADIR(laDirInfo, tc_InputFile, "D")=1 THEN - IF SUBSTR( laDirInfo(1,5), 5, 1 ) = "D" + *-- 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(lcInputFile_Type) THEN + IF lcInputFile_Type == C_FILETYPE_DIRECTORY THEN tcRecompile = tc_InputFile ELSE tcRecompile = JUSTPATH( tc_InputFile ) @@ -1856,9 +1931,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' ) ) ) @@ -1876,10 +1951,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 ) - *ENDIF + , @tcClearUniqueID, @tcOptimizeByFilestamp, @tc_InputFile, @lcInputFile_Type ) loLang = _SCREEN.o_FoxBin2Prg_Lang @@ -1897,21 +1970,50 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM OTHERWISE *-- EJECUCIÓN NORMAL + + 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 + .writeLog( loLang.C_INTERACTIVE_DIRECTORY_SELECTION_LOC ) + loFrm_Interactive = CREATEOBJECT('frm_interactive') + loFrm_Interactive.Show() + READ EVENTS + lnConversionOption = loFrm_Interactive.n_ConversionType + loFrm_Interactive.Release() + loFrm_Interactive = NULL + + DO CASE + CASE lnConversionOption = 1 && Bin2Txt + tcType = tcType + '-BIN2PRG' + + CASE lnConversionOption = 2 && Txt2Bin + tcType = tcType + '-PRG2BIN' + + OTHERWISE && None + ERROR 1799 && Conversion Cancelled + 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 ) + 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 ) + EXIT ELSE ERROR loLang.C_ASTERISK_EXT_NOT_ALLOWED_LOC 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 ) @@ -1937,263 +2039,294 @@ 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 ATC('-BIN2PRG', ('-' + tcType)) >= 1 + .writeLog( '> ' + loLang.C_OPTION_LOC + ': BIN2PRG' ) + DO CASE - CASE .l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile) - CD (tcRecompile) - CASE .l_Recompile - CD (tc_InputFile) + CASE lcInputFile_Type == C_FILETYPE_DIRECTORY + *-- 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) + 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(tc_InputFile) ) OR NOT FILE(tc_InputFile) + .writeLog( '> InputFile ' + loLang.C_IS_UNSUPPORTED_LOC ) + EXIT + ENDCASE - .c_LogFile = ADDBS(tc_InputFile) + tcType + '.LOG' - IF .l_Debug - ERASE ( .c_LogFile ) - ENDIF + CASE ATC('-PRG2BIN', ('-' + tcType)) >= 1 + .writeLog( '> ' + loLang.C_OPTION_LOC + ': PRG2BIN' ) - .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 lcInputFile_Type == C_FILETYPE_DIRECTORY + *-- CONVERSION PRG2BIN DE UN DIRECTORIO Y SUBDIRECTORIOS + .writeLog( '> InputFile ' + loLang.C_IS_A_DIRECTORY_LOC ) DO CASE - CASE lnCodError = 1799 && Conversion Cancelled - ERROR 1799 - - CASE lnCodError > 0 - .ejecutar_WriteErrorLog( @toEx ) + CASE .l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile) + CD (tcRecompile) + CASE .l_Recompile + CD (tc_InputFile) ENDCASE - ENDFOR - .AvanceDelProceso( loLang.C_END_OF_PROCESS_LOC, lnFileCount, lnFileCount, 0 ) + .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 ) + EXIT + + CASE NOT .TieneSoporte_Prg2Bin( JUSTEXT(tc_InputFile) ) OR NOT FILE(tc_InputFile) + .writeLog( '> InputFile ' + loLang.C_IS_UNSUPPORTED_LOC ) + 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 + .writeLog( '> ' + loLang.C_CONVERT_ALL_FILES_IN_A_PROJECT_LOC + ': ' + loLang.C_BINARY_TO_TEXT_LOC ) + 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 + .writeLog( '> ' + loLang.C_CONVERT_ALL_FILES_IN_A_PROJECT_LOC + ': ' + loLang.C_TEXT_TO_BINARY_LOC ) + 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) + .writeLog( '> InputFile ' + loLang.C_IS_A_FILE_LOC ) + 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 CATCH TO toEx lnCodError = toEx.ERRORNO - + 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 '-INTERACTIVE' $ ('-' + tcType) THEN - toEx.UserValue = 'tc_InputDir = [' + TRANSFORM(tc_InputFile) + ']' - THIS.l_ShowErrors = .F. && La opción "INTERACTIVE" muestra su propio mensaje + IF ATC('-SHOWMSG', ('-' + tcType)) >= 1 THEN + 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 + THIS.ejecutar_WriteErrorLog( @toEx, @lcErrorInfo ) IF THIS.l_Debug @@ -2217,31 +2350,30 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM USE IN (SELECT("TABLABIN")) THIS.writeLog_Flush() - *THIS.descargar_frm_avance() + IF THIS.l_ShowProgress + THIS.descargar_frm_avance() + ENDIF CD (JUSTPATH(THIS.c_CurDir)) DO CASE - CASE '-INTERACTIVE' $ ('-' + tcType) + CASE ATC('-SHOWMSG', ('-' + tcType)) >= 1 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. ) + loWSH.Run( THIS.c_ErrorLogFile, 3 ) 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. ) + loWSH.Run( THIS.c_ErrorLogFile, 3 ) 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( ) - ENDCASE STORE NULL TO loFSO, loWSH @@ -2260,7 +2392,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 @@ -2313,7 +2445,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() @@ -2325,15 +2457,16 @@ 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 - .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 - + .n_ProcessedFiles = .n_ProcessedFiles + 1 DIMENSION .a_ProcessedFiles(.n_ProcessedFiles) .a_ProcessedFiles(.n_ProcessedFiles) = lc_BaseFile @@ -2580,12 +2713,13 @@ 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 *-- 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 @@ -2601,7 +2735,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 @@ -2869,7 +3003,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 @@ -2972,7 +3106,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 @@ -3158,7 +3292,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 +3316,93 @@ 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) + n_ConversionType = 3 + 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, ; + KeyPreview = .T., ; + Name = "lbl_Title" + + + ADD OBJECT cmd_Bin2Prg AS commandbutton WITH ; + Top = 64, ; + Left = 40, ; + Height = 27, ; + Width = 92, ; + Caption = _SCREEN.o_FoxBin2Prg_Lang.C_BINARY_TO_TEXT_LOC, ; + Name = "cmd_Bin2Prg" + + + 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" + + + 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 + + ******************************************************************************************************************* DEFINE CLASS c_conversor_base AS SESSION #IF .F. @@ -3762,17 +3983,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. @@ -6655,7 +6876,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) @@ -6772,7 +6993,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDFOR .verificar_CLASES_EXTERNAS( @toModulo, @toFoxBin2Prg ) - + ENDIF ENDWITH && THIS @@ -6913,24 +7134,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 @@ -6942,8 +7151,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. @@ -6983,13 +7193,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 +7224,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_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 + .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 @@ -7043,7 +7258,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 ) @@ -7333,13 +7548,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 +7579,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_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 + .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 @@ -17396,8 +17616,8 @@ DEFINE CLASS CL_DBC_FIELD_VW AS CL_DBC_BASE <<>> <> <<>> <> <<>> <> - <<>> <> - <<>> <> + <<>> <> + <<>> <> <<>> <> <<>> <> <<>> <> @@ -21754,8 +21974,15 @@ 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_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" 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,9 +21990,11 @@ 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_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_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" @@ -21781,12 +22010,21 @@ 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" + 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" 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" @@ -21794,6 +22032,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" @@ -21801,7 +22040,9 @@ 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_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" @@ -21810,7 +22051,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 @@ -21829,7 +22070,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 @@ -21877,8 +22118,15 @@ 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_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" .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,9 +22134,11 @@ 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_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_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é" @@ -21904,12 +22154,20 @@ 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" + .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" .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" @@ -21917,6 +22175,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" @@ -21924,7 +22183,9 @@ 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_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" CASE INLIST(tcLanguage, '34', 'ES') && Spanish (Español) @@ -21936,18 +22197,27 @@ 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_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" .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_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_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_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" @@ -21963,12 +22233,20 @@ 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" + .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_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 <>)" .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" @@ -21976,6 +22254,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" @@ -21983,7 +22262,9 @@ 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_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" CASE INLIST(tcLanguage, '49', 'DE') && German (Alemán) @@ -21995,8 +22276,15 @@ 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_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" .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 <>" @@ -22004,14 +22292,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_DOES_NOT_FOUND_LOC = "Externe Klasse (<>) nicht in der Datei [<>] gefunden" .C_FOXBIN2PRG_ERROR_CAPTION_LOC = "FOXBIN2PRG: FEHLER!!" .C_FOXBIN2PRG_INFO_SINTAX_LOC = "FOXBIN2PRG: SYNTAX INFO" .C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC = "FOXBIN2PRG [,cType ,cTextName ,cGenText ,cDontShowErrors ,cDebug, cDontShowProgress, cOriginalFileName, cRecompile, cNoTimestamps]" + CR_LF + CR_LF ; @@ -22022,12 +22312,20 @@ 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" + .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" .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" @@ -22035,6 +22333,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" @@ -22042,7 +22341,9 @@ 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_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" OTHERWISE && Si no existe, se queda el por defecto