From c31b81066524fc8ae4cf23328c9601c57ab39c77 Mon Sep 17 00:00:00 2001 From: Lutz Date: Sun, 14 Feb 2021 12:41:44 +0100 Subject: [PATCH] BugFix: Converting DBFs on simulated run If .l_ProcessFiles was true, conversion of DBF's failed Additional some minor improvements on german translation --- foxbin2prg.prg | 336 +++++++++++++++++++++++++++---------------------- 1 file changed, 184 insertions(+), 152 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 3c6eb7c..0945cf3 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -225,6 +225,9 @@ * 01/04/2020 DH v1.19.51 Bug Fix: Manejo de AutoIncrement incompatible con Project Explorer (Dan Lauer) * 01/04/2020 FDBOZZO v1.19.51 Bug Fix: La conversión de tablas falla si algún campo contiene una palabra reservada como UNIQUE (DAJU78) * 01/04/2020 FDBOZZO v1.19.51 Bug Fix: No se respetan las propiedades de VCX/SCX con nombre "note" (Tracy Pearson) + +* 14/02/21 Lutz Scheffler conversion dbf -> prg, error if only test mode (toFoxBin2Prg.l_ProcessFiles is false) +* minor translations * * *--------------------------------------------------------------------------------------------------- @@ -852,7 +855,7 @@ DEFINE CLASS c_foxbin2prg AS Session l_RemoveNullCharsFromCode = .T. l_RemoveZOrderSetFromProps = .F. l_Recompile = .T. - n_UseClassPerFile = 0 + n_UseClassPerFile = 0 n_PRG_Compat_Level = 0 && 0=COMPATIBLE WITH FoxBin2Prg v1.19.49 and earlier, 1=Include HELPSTRING n_ExcludeDBFAutoincNextval = 0 l_ClassPerFileCheck = .F. @@ -2137,6 +2140,7 @@ DEFINE CLASS c_foxbin2prg AS Session ELSE .writeLog( '> ' + UPPER(loLang.C_CACHING_CONFIG_FOR_DIRECTORY_LOC) + ': ' + lc_CFG_Path ) lo_CFG = CREATEOBJECT('CL_CFG') + lo_Configuration.Add( lo_CFG, lc_CFG_Path ) .n_CFG_Actual = lo_Configuration.Count @@ -13022,7 +13026,6 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin ENDDEFINE && CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin - DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin #IF .F. LOCAL THIS AS c_conversor_prg_a_dbc OF 'FOXBIN2PRG.PRG' @@ -17482,183 +17485,212 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg #ENDIF DODEFAULT( @toModulo, @toEx, @toFoxBin2Prg ) - TRY - WITH THIS AS c_conversor_dbf_a_prg OF 'FOXBIN2PRG.PRG' - IF NOT toFoxBin2Prg.l_ProcessFiles THEN - .write_OutputFile( '', .c_OutputFile, @toFoxBin2Prg ) - EXIT && Si se indicó no procesar, se sale aquí. (Modo de simulación) - ENDIF +*!* Changed by: Lutz Scheffler 11.2.2021 +*!* change date="{^2021-02-11,08:50:00}" +* If toFoxBin2Prg.l_ProcessFiles is not true +* and the try block was exited +* the stuff below was never instatiated - LOCAL lnCodError, laDatabases(1), lnDatabases_Count, laDatabases2(1) ; - , lnLen, lc_FileTypeDesc, laLines(1), lcOutputFile ; - , ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC ; - , lc_DBC_Name, lnDataSessionID, lnSelect, laDirInfo(1,5) ; - , llDBCEventsEnabled ; - , loTable AS CL_DBF_TABLE OF 'FOXBIN2PRG.PRG' ; - , loDBFUtils AS CL_DBF_UTILS OF 'FOXBIN2PRG.PRG' ; - , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' ; - , loFSO AS Scripting.FileSystemObject ; - , loTextStream AS Scripting.TextStream ; - , loDBC AS CL_DBC OF 'FOXBIN2PRG.PRG' +*so the whole try / catch block should not run - loLang = _SCREEN.o_FoxBin2Prg_Lang - loFSO = toFoxBin2Prg.o_FSO - STORE NULL TO loTable, loDBFUtils - STORE 0 TO lnCodError - loDBFUtils = CREATEOBJECT('CL_DBF_UTILS') - loDBC = CREATEOBJECT('CL_DBC') + IF NOT toFoxBin2Prg.l_ProcessFiles THEN + THIS.write_OutputFile( '', THIS.c_OutputFile, @toFoxBin2Prg ) + ELSE &&NOT toFoxBin2Prg.l_ProcessFiles +*!* /Changed by: Lutz Scheffler 11.2.2021 - *-- EVALUAR OPCIONES ESPECÍFICAS DE DBF - .updateProgressbar( 'Scanning DBF Structure...', 1, 3, 1 ) + TRY + WITH THIS AS c_conversor_dbf_a_prg OF 'FOXBIN2PRG.PRG' +*!* Changed by: Lutz Scheffler 11.2.2021 +*!* change date="{^2021-02-11,08:50:00}" +*moved up: +* IF NOT toFoxBin2Prg.l_ProcessFiles THEN +* .write_OutputFile( '', .c_OutputFile, @toFoxBin2Prg ) +* EXIT && Si se indicó no procesar, se sale aquí. (Modo de simulación) +* ENDIF +*!* /Changed by: Lutz Scheffler 11.2.2021 - *-- Include - IF NOT EMPTY(toFoxBin2Prg.DBF_Conversion_Included) AND NOT toFoxBin2Prg.DBF_Conversion_Included == '*' ; - AND NOT toFoxBin2Prg.filenameFoundInFilter( JUSTFNAME(.c_InputFile), toFoxBin2Prg.DBF_Conversion_Included ) - toFoxBin2Prg.writeLog(' ' + JUSTFNAME(.c_InputFile) + ' no está en el filtro DBF_Conversion_Included (' + toFoxBin2Prg.DBF_Conversion_Included + ')' ) - EXIT - ENDIF + LOCAL lnCodError, laDatabases(1), lnDatabases_Count, laDatabases2(1) ; + , lnLen, lc_FileTypeDesc, laLines(1), lcOutputFile ; + , ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC ; + , lc_DBC_Name, lnDataSessionID, lnSelect, laDirInfo(1,5) ; + , llDBCEventsEnabled ; + , loTable AS CL_DBF_TABLE OF 'FOXBIN2PRG.PRG' ; + , loDBFUtils AS CL_DBF_UTILS OF 'FOXBIN2PRG.PRG' ; + , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' ; + , loFSO AS Scripting.FileSystemObject ; + , loTextStream AS Scripting.TextStream ; + , loDBC AS CL_DBC OF 'FOXBIN2PRG.PRG' - *-- Exclude - IF NOT EMPTY(toFoxBin2Prg.DBF_Conversion_Excluded) ; - AND toFoxBin2Prg.filenameFoundInFilter( JUSTFNAME(.c_InputFile), toFoxBin2Prg.DBF_Conversion_Excluded ) - toFoxBin2Prg.writeLog(' ' + JUSTFNAME(.c_InputFile) + ' está en el filtro DBF_Conversion_Excluded (' + toFoxBin2Prg.DBF_Conversion_Excluded + ')' ) - EXIT - ENDIF + loLang = _SCREEN.o_FoxBin2Prg_Lang + loFSO = toFoxBin2Prg.o_FSO + STORE NULL TO loTable, loDBFUtils + STORE 0 TO lnCodError + loDBFUtils = CREATEOBJECT('CL_DBF_UTILS') + loDBC = CREATEOBJECT('CL_DBC') - loDBFUtils.getDBFmetadata( .c_InputFile, @ln_HexFileType, @ll_FileHasCDX, @ll_FileHasMemo, @ll_FileIsDBC, @lc_DBC_Name ) - lc_FileTypeDesc = loDBFUtils.fileTypeDescription(ln_HexFileType) - lnDatabases_Count = ADATABASES(laDatabases) + *-- EVALUAR OPCIONES ESPECÍFICAS DE DBF + .updateProgressbar( 'Scanning DBF Structure...', 1, 3, 1 ) - * Si la tabla pertenece a un DBC, desactivar temporalmente los eventos - IF NOT EMPTY(lc_DBC_Name) AND ADIR(laDirInfo, FULLPATH(lc_DBC_Name, .c_InputFile)) = 1 - loDBC._DBC = FULLPATH(lc_DBC_Name, .c_InputFile) - llDBCEventsEnabled = loDBC.DBGETPROP(lc_DBC_Name,"DATABASE","DBCEvents") - - * llDBCEventsEnabled no siempre devuelve .T./.F., a veces devuelve "" - IF EMPTY(llDBCEventsEnabled) - llDBCEventsEnabled = .F. + *-- Include + IF NOT EMPTY(toFoxBin2Prg.DBF_Conversion_Included) AND NOT toFoxBin2Prg.DBF_Conversion_Included == '*' ; + AND NOT toFoxBin2Prg.filenameFoundInFilter( JUSTFNAME(.c_InputFile), toFoxBin2Prg.DBF_Conversion_Included ) + toFoxBin2Prg.writeLog(' ' + JUSTFNAME(.c_InputFile) + ' no está en el filtro DBF_Conversion_Included (' + toFoxBin2Prg.DBF_Conversion_Included + ')' ) + EXIT ENDIF - IF llDBCEventsEnabled - IF NOT loDBC.DBSETPROP(lc_DBC_Name,"DATABASE","DBCEvents",.F.) + *-- Exclude + IF NOT EMPTY(toFoxBin2Prg.DBF_Conversion_Excluded) ; + AND toFoxBin2Prg.filenameFoundInFilter( JUSTFNAME(.c_InputFile), toFoxBin2Prg.DBF_Conversion_Excluded ) + toFoxBin2Prg.writeLog(' ' + JUSTFNAME(.c_InputFile) + ' está en el filtro DBF_Conversion_Excluded (' + toFoxBin2Prg.DBF_Conversion_Excluded + ')' ) + EXIT + ENDIF + + loDBFUtils.getDBFmetadata( .c_InputFile, @ln_HexFileType, @ll_FileHasCDX, @ll_FileHasMemo, @ll_FileIsDBC, @lc_DBC_Name ) + lc_FileTypeDesc = loDBFUtils.fileTypeDescription(ln_HexFileType) + lnDatabases_Count = ADATABASES(laDatabases) + + * Si la tabla pertenece a un DBC, desactivar temporalmente los eventos + IF NOT EMPTY(lc_DBC_Name) AND ADIR(laDirInfo, FULLPATH(lc_DBC_Name, .c_InputFile)) = 1 + loDBC._DBC = FULLPATH(lc_DBC_Name, .c_InputFile) + llDBCEventsEnabled = loDBC.DBGETPROP(lc_DBC_Name,"DATABASE","DBCEvents") + + * llDBCEventsEnabled no siempre devuelve .T./.F., a veces devuelve "" + IF EMPTY(llDBCEventsEnabled) llDBCEventsEnabled = .F. ENDIF + + IF llDBCEventsEnabled + IF NOT loDBC.DBSETPROP(lc_DBC_Name,"DATABASE","DBCEvents",.F.) + llDBCEventsEnabled = .F. + ENDIF + ENDIF ENDIF - ENDIF - USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS TABLABIN - lnDataSessionID = toFoxBin2Prg.DATASESSIONID - .RestoreDBCEvents(loDBC, @llDBCEventsEnabled) + USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS TABLABIN + lnDataSessionID = toFoxBin2Prg.DATASESSIONID + .RestoreDBCEvents(loDBC, @llDBCEventsEnabled) - C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() + C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() - *-- Header - loTable = CREATEOBJECT('CL_DBF_TABLE') + *-- Header + loTable = CREATEOBJECT('CL_DBF_TABLE') - *-- Exportación de estructura y datos (para Diff solamente) - ERASE (.c_OutputFile + '.TMP' ) - loTextStream = loFSO.CreateTextFile(.c_OutputFile + '.TMP' ) && Replace VFP low-level file funcs.because the 8-16KB limit. - toFoxBin2Prg.o_TextStream = loTextStream + *-- Exportación de estructura y datos (para Diff solamente) + ERASE (.c_OutputFile + '.TMP' ) + loTextStream = loFSO.CreateTextFile(.c_OutputFile + '.TMP' ) && Replace VFP low-level file funcs.because the 8-16KB limit. + toFoxBin2Prg.o_TextStream = loTextStream - IF toFoxBin2Prg.n_FileHandle = -1 THEN - ERROR 102, (.c_OutputFile) - ENDIF + IF toFoxBin2Prg.n_FileHandle = -1 THEN + ERROR 102, (.c_OutputFile) + ENDIF - loTextStream.WriteLine( C_FB2PRG_CODE ) && Replace VFP low-level file funcs.because the 8-16KB limit. - loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, .c_InputFile, lc_FileTypeDesc, @toFoxBin2Prg ) - loTextStream.Close() + loTextStream.WriteLine( C_FB2PRG_CODE ) && Replace VFP low-level file funcs.because the 8-16KB limit. + loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, .c_InputFile, lc_FileTypeDesc, @toFoxBin2Prg ) + loTextStream.Close() + + DO CASE + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I1' + ERROR 'InputFile Error Simulation' + CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I0' + .writeErrorLog( '*** SIMULATED ERROR' ) + ENDCASE + + IF .l_Error + .writeLog( '*** ERRORS found - Generation Cancelled' ) + EXIT + ENDIF + + toFoxBin2Prg.updateProcessedFile() + + + *-- Genero el DB2, renombrando el TMP + .updateProgressbar( 'Writing ' + toFoxBin2Prg.c_DB2 + '...', 3, 3, 1 ) + IF .l_Test + toModulo = C_FB2PRG_CODE + ELSE + DO CASE + CASE ADIR(laDirInfo, .c_OutputFile) > 0 AND toFoxBin2Prg.comparedFilesAreEqual( .c_OutputFile + '.TMP', .c_OutputFile ) = 1 + ERASE (.c_OutputFile + '.TMP') + *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + lcOutputFile = .c_OutputFile + .writeLog( C_TAB + C_TAB + '* ' + TEXTMERGE(loLang.C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) + CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; + AND toFoxBin2Prg.changeFileAttribute( .c_OutputFile + '.TMP', '-R' ) > 0 ; + AND NOT toFoxBin2Prg.renameTmpFile2Tx2File( .c_OutputFile ) + *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' + ERROR (TEXTMERGE(loLang.C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) + ENDCASE + ENDIF + + + *-- Hook para permitir ejecución externa (por ejemplo, para exportar datos) + IF NOT EMPTY(toFoxBin2Prg.run_AfterCreate_DB2) + lnSelect = SELECT() + DO (toFoxBin2Prg.run_AfterCreate_DB2) WITH (lnDataSessionID), (.c_OutputFile), (loTable) + SET DATASESSION TO (lnDataSessionID) && Por las dudas externamente se cambie + SELECT (lnSelect) + ENDIF + + ENDWITH && THIS + + + CATCH TO toEx + THIS.set_UserValue(@toEx) DO CASE - CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I1' - ERROR 'InputFile Error Simulation' - CASE toFoxBin2Prg.c_SimulateError = 'SIMERR_I0' - .writeErrorLog( '*** SIMULATED ERROR' ) + CASE toEx.ERRORNO = 13 && Alias not found + toEx.USERVALUE = toEx.USERVALUE + TEXTMERGE(loLang.C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC) + + *!* CASE toEx.ErrorNo = 1976 && Cannot resolve backlink + *!* toEx.UserValue = 'WARNING!!' + CR_LF ; + *!* + "MAY BE DATABASE FIELDS DOESN'T" ; + *!* + UPPER(JUSTSTEM(THIS.c_InputFile)) + '.field tag keyname)' + CR_LF + CR_LF ; + *!* + '¡¡ATENCIÓN!!' + CR_LF ; + *!* + 'ASEGÚRESE DE QUE NO ESTÁ USANDO UN ALIAS DE TABLA EN LAS EXPRESIONES DE LOS ÍNDICES!! (ej: index on ' ; + *!* + UPPER(JUSTSTEM(THIS.c_InputFile)) + '.campo tag nombreclave)' + ENDCASE - - IF .l_Error - .writeLog( '*** ERRORS found - Generation Cancelled' ) - EXIT + IF THIS.n_Debug > 0 AND _VFP.STARTMODE = 0 + SET STEP ON ENDIF - toFoxBin2Prg.updateProcessedFile() + THROW + FINALLY + USE IN (SELECT("TABLABIN")) + THIS.RestoreDBCEvents(loDBC, @llDBCEventsEnabled) - *-- Genero el DB2, renombrando el TMP - .updateProgressbar( 'Writing ' + toFoxBin2Prg.c_DB2 + '...', 3, 3, 1 ) - IF .l_Test - toModulo = C_FB2PRG_CODE - ELSE - DO CASE - CASE ADIR(laDirInfo, .c_OutputFile) > 0 AND toFoxBin2Prg.comparedFilesAreEqual( .c_OutputFile + '.TMP', .c_OutputFile ) = 1 - ERASE (.c_OutputFile + '.TMP') - *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) - lcOutputFile = .c_OutputFile - .writeLog( C_TAB + C_TAB + '* ' + TEXTMERGE(loLang.C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) - CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; - AND toFoxBin2Prg.changeFileAttribute( .c_OutputFile + '.TMP', '-R' ) > 0 ; - AND NOT toFoxBin2Prg.renameTmpFile2Tx2File( .c_OutputFile ) - *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' - ERROR (TEXTMERGE(loLang.C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) - ENDCASE + IF VARTYPE(loTextStream) = "O" THEN + loTextStream.Close() ENDIF + *-- Cierro DBC + FOR I = 1 TO ADATABASES(laDatabases2) + IF ASCAN( laDatabases, laDatabases2(m.I), 1, 0, 0, 1+2+4 ) = 0 + SET DATABASE TO (laDatabases2(m.I)) + CLOSE DATABASES + EXIT + ENDIF + ENDFOR - *-- Hook para permitir ejecución externa (por ejemplo, para exportar datos) - IF NOT EMPTY(toFoxBin2Prg.run_AfterCreate_DB2) - lnSelect = SELECT() - DO (toFoxBin2Prg.run_AfterCreate_DB2) WITH (lnDataSessionID), (.c_OutputFile), (loTable) - SET DATASESSION TO (lnDataSessionID) && Por las dudas externamente se cambie - SELECT (lnSelect) - ENDIF + STORE NULL TO loTable, loDBFUtils, loTextStream, toFoxBin2Prg.o_TextStream +*!* Changed by: Lutz Scheffler 11.2.2021 +*!* change date="{^2021-02-11,08:50:00}" +* Release different, parts moved outsidef IF .. ENDIF + RELEASE loTextStream ; + , lnCodError, laDatabases, lnDatabases_Count, laDatabases2, lnLen, lc_FileTypeDesc ; + , ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, lnDataSessionID, lnSelect ; + , loTable, loDBFUtils + ENDTRY +*!* Changed by: Lutz Scheffler 11.2.2021 +*!* change date="{^2021-02-11,08:50:00}" +* so the whole try / catch block should not run if in simulation - ENDWITH && THIS + ENDIF &&NOT toFoxBin2Prg.l_ProcessFiles - - CATCH TO toEx - THIS.set_UserValue(@toEx) - - DO CASE - CASE toEx.ERRORNO = 13 && Alias not found - toEx.USERVALUE = toEx.USERVALUE + TEXTMERGE(loLang.C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC) - - *!* CASE toEx.ErrorNo = 1976 && Cannot resolve backlink - *!* toEx.UserValue = 'WARNING!!' + CR_LF ; - *!* + "MAY BE DATABASE FIELDS DOESN'T" ; - *!* + UPPER(JUSTSTEM(THIS.c_InputFile)) + '.field tag keyname)' + CR_LF + CR_LF ; - *!* + '¡¡ATENCIÓN!!' + CR_LF ; - *!* + 'ASEGÚRESE DE QUE NO ESTÁ USANDO UN ALIAS DE TABLA EN LAS EXPRESIONES DE LOS ÍNDICES!! (ej: index on ' ; - *!* + UPPER(JUSTSTEM(THIS.c_InputFile)) + '.campo tag nombreclave)' - - ENDCASE - IF THIS.n_Debug > 0 AND _VFP.STARTMODE = 0 - SET STEP ON - ENDIF - - THROW - - FINALLY - USE IN (SELECT("TABLABIN")) - THIS.RestoreDBCEvents(loDBC, @llDBCEventsEnabled) - - IF VARTYPE(loTextStream) = "O" THEN - loTextStream.Close() - ENDIF - - *-- Cierro DBC - FOR I = 1 TO ADATABASES(laDatabases2) - IF ASCAN( laDatabases, laDatabases2(m.I), 1, 0, 0, 1+2+4 ) = 0 - SET DATABASE TO (laDatabases2(m.I)) - CLOSE DATABASES - EXIT - ENDIF - ENDFOR - - STORE NULL TO loTable, loDBFUtils, loTextStream, toFoxBin2Prg.o_TextStream - RELEASE toModulo, toEx, toFoxBin2Prg, loTextStream ; - , lnCodError, laDatabases, lnDatabases_Count, laDatabases2, lnLen, lc_FileTypeDesc ; - , ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, lnDataSessionID, lnSelect ; - , loTable, loDBFUtils - ENDTRY +* Release from above + RELEASE toModulo, toEx, toFoxBin2Prg, loTextStream ; +*!* /Changed by: Lutz Scheffler 11.2.2021 RETURN ENDPROC @@ -17828,9 +17860,9 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg *ENDFOR *toDatabase = lcCodigo ELSE + IF toFoxBin2Prg.n_UseClassPerFile > 0 THEN .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) - FOR I = 1 TO lnClassCount * lcOutputFile = 'DBCName' + '.' + 'MemberType' + '.' + 'MemberName' + '.' + 'dc2' lcOutputFile = ADDBS( JUSTPATH( .c_OutputFile ) ) + JUSTSTEM( .c_OutputFile ) + '.' + laClasses(m.I,3) + '.' + laClasses(m.I,1) + '.' + JUSTEXT( .c_OutputFile ) @@ -29067,7 +29099,7 @@ DEFINE CLASS CL_LANG AS Custom .C_CACHING_CONFIG_FOR_DIRECTORY_LOC = "Caching Config für Verzeichnis" .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_CONFIGFILE_LOC = "Benutzte 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" @@ -29205,7 +29237,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_READING_CFG_VALUES_FROM_DISK_LOC = "Gelesene Werte der CFG-DATEI von 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 = "Scanne Datei- und Verzeichnisinformationen für"