From ac24952386cfceff0fac210eea81e477a5dc6f27 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Mon, 21 Jul 2014 23:13:10 +0200 Subject: [PATCH 1/6] =?UTF-8?q?Changeset:=20373=20fdbozzo=20-=2021/07/2014?= =?UTF-8?q?=2018:43:57:=20-=20Primera=20versi=C3=B3n=20funcional?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...g__c_foxbin2prg__FilenameFoundInFilter.prg | 239 ++++++++++++++++++ foxbin2prg.prg | 118 ++++++++- 2 files changed, 343 insertions(+), 14 deletions(-) create mode 100644 TESTS/ut__foxbin2prg__c_foxbin2prg__FilenameFoundInFilter.prg diff --git a/TESTS/ut__foxbin2prg__c_foxbin2prg__FilenameFoundInFilter.prg b/TESTS/ut__foxbin2prg__c_foxbin2prg__FilenameFoundInFilter.prg new file mode 100644 index 0000000..568548b --- /dev/null +++ b/TESTS/ut__foxbin2prg__c_foxbin2prg__FilenameFoundInFilter.prg @@ -0,0 +1,239 @@ +DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__FilenameFoundInFilter AS FxuTestCase OF FxuTestCase.prg + + #IF .F. + LOCAL THIS AS ut__foxbin2prg__c_foxbin2prg__FilenameFoundInFilter OF ut__foxbin2prg__c_foxbin2prg__FilenameFoundInFilter.PRG + #ENDIF + + icObj = NULL + + + ******************************************************************************************************************************************* + FUNCTION SETUP + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + *LOCAL loObj AS c_conversor_base OF "FOXBIN2PRG.PRG" + SET PROCEDURE TO 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + oFXU_LIB = CREATEOBJECT('CL_FXU_CONFIG') + *oFXU_LIB.setup_comun() + THIS.icObj = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG") + *loObj = THIS.icObj + *loObj.l_Test = .F. + + ENDFUNC + + + ******************************************************************************************************************************************* + FUNCTION TearDown + #IF .F. + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + #ENDIF + THIS.icObj = NULL + + IF VARTYPE(oFXU_LIB) = "O" + *oFXU_LIB.teardown_comun() + oFXU_LIB = NULL + ENDIF + RELEASE PROCEDURE 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + RELEASE oFXU_LIB + CLOSE PROCEDURES + CLEAR RESOURCES + + ENDFUNC + + + ******************************************************************************************************************************************* + FUNCTION Evaluate_results + LPARAMETERS toEx AS EXCEPTION, tnCodError_Esperado, tl_Valor, tl_ValorEsperado + + #IF .F. + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + #ENDIF + + IF PCOUNT() = 0 + THIS.messageout( "* Support method, not a valid test." ) + RETURN .T. + ENDIF + + LOCAL loFoxBin2Prg AS c_foxbin2prg OF "FOXBIN2PRG.PRG" + + IF ISNULL(toEx) + loFoxBin2Prg = THIS.icObj + + *-- MESSAGES + THIS.messageout( 'Filename found in filter >> Esperado: ' + TRANSFORM(tl_ValorEsperado) ) + THIS.messageout( 'Filename found in filter >> Actual : ' + TRANSFORM(tl_Valor) ) + + *-- ASSERTIONS + THIS.assertequals( tl_ValorEsperado, tl_Valor, 'Filename found in filter' ) + + loFoxBin2Prg = NULL + RELEASE loFoxBin2Prg + + ELSE + *-- Evaluación de errores + THIS.messageout( "Error " + TRANSFORM(toEx.ERRORNO) + ', ' + TRANSFORM(toEx.MESSAGE) ) + THIS.messageout( toEx.PROCEDURE + ', ' + TRANSFORM(toEx.LINENO) ) + IF NOT INLIST( toEx.ERRORNO, 1098, 2071 ) && Error del usuario (ERROR y THROW) + THIS.messageout( TRANSFORM(toEx.LINECONTENTS) ) + ENDIF + + THIS.assertequals( tnCodError_Esperado, toEx.ERRORNO, 'Error' ) + ENDIF + + THIS.messageout( '' ) + THIS.messageout( REPLICATE('*',80) ) + ENDFUNC + + + ******************************************************************************************************************************************* + FUNCTION Deberia_EncontrarElArchivo__FB2P_FOXUSER_DBF__UsandoElFiltro__TB2P_xpx + LOCAL lnCodError, lnCodError_Esperado ; + , lc_File, lc_Filtros, ll_Valor, ll_ValorEsperado ; + , loFoxBin2Prg AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ; + , loEx AS EXCEPTION + #IF .F. + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + #ENDIF + + TRY + loEx = NULL + loFoxBin2Prg = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG") + *loFoxBin2Prg.l_Debug = .F. + loFoxBin2Prg.l_ShowErrors = .F. + *loFoxBin2Prg.l_Test = .T. + + + *-- DATOS DE ENTRADA + STORE 0 TO lnCodError, lnCodError_Esperado + lc_File = 'FB2P_FOXUSER.DBF' + lc_Filtros = 'XX.DBF,FF.FRX,FB2P_*.*' + ll_ValorEsperado = .T. + + *-- EVALUACIÓN DEL TEST + ll_Valor = loFoxBin2Prg.FilenameFoundInFilter( lc_File, lc_Filtros ) + + CATCH TO loEx + + FINALLY + THIS.Evaluate_results( loEx, lnCodError_Esperado, ll_Valor, ll_ValorEsperado ) + STORE NULL TO loFoxBin2Prg + RELEASE loFoxBin2Prg + ENDTRY + + ENDFUNC + + + ******************************************************************************************************************************************* + FUNCTION Deberia_EncontrarElArchivo__FB2P_FOXUSER_DBF__UsandoElFiltro__x_FOXUSERpx + LOCAL lnCodError, lnCodError_Esperado ; + , lc_File, lc_Filtros, ll_Valor, ll_ValorEsperado ; + , loFoxBin2Prg AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ; + , loEx AS EXCEPTION + #IF .F. + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + #ENDIF + + TRY + loEx = NULL + loFoxBin2Prg = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG") + *loFoxBin2Prg.l_Debug = .F. + loFoxBin2Prg.l_ShowErrors = .F. + *loFoxBin2Prg.l_Test = .T. + + + *-- DATOS DE ENTRADA + STORE 0 TO lnCodError, lnCodError_Esperado + lc_File = 'FB2P_FOXUSER.DBF' + lc_Filtros = 'XX.DBF,FF.FRX,*_FOXUSER.*' + ll_ValorEsperado = .T. + + *-- EVALUACIÓN DEL TEST + ll_Valor = loFoxBin2Prg.FilenameFoundInFilter( lc_File, lc_Filtros ) + + CATCH TO loEx + + FINALLY + THIS.Evaluate_results( loEx, lnCodError_Esperado, ll_Valor, ll_ValorEsperado ) + STORE NULL TO loFoxBin2Prg + RELEASE loFoxBin2Prg + ENDTRY + + ENDFUNC + + + ******************************************************************************************************************************************* + FUNCTION Deberia_EncontrarElArchivo__FB2P_FOXUSER_DBF__UsandoElFiltro__x_F_Xxpx + LOCAL lnCodError, lnCodError_Esperado ; + , lc_File, lc_Filtros, ll_Valor, ll_ValorEsperado ; + , loFoxBin2Prg AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ; + , loEx AS EXCEPTION + #IF .F. + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + #ENDIF + + TRY + loEx = NULL + loFoxBin2Prg = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG") + *loFoxBin2Prg.l_Debug = .F. + loFoxBin2Prg.l_ShowErrors = .F. + *loFoxBin2Prg.l_Test = .T. + + + *-- DATOS DE ENTRADA + STORE 0 TO lnCodError, lnCodError_Esperado + lc_File = 'FB2P_FOXUSER.DBF' + lc_Filtros = 'XX.DBF,FF.FRX,*_F?X*.*' + ll_ValorEsperado = .T. + + *-- EVALUACIÓN DEL TEST + ll_Valor = loFoxBin2Prg.FilenameFoundInFilter( lc_File, lc_Filtros ) + + CATCH TO loEx + + FINALLY + THIS.Evaluate_results( loEx, lnCodError_Esperado, ll_Valor, ll_ValorEsperado ) + STORE NULL TO loFoxBin2Prg + RELEASE loFoxBin2Prg + ENDTRY + + ENDFUNC + + + ******************************************************************************************************************************************* + FUNCTION Deberia_NoEncontrarElArchivo__FB2P_FOXUSER_DBF__UsandoElFiltro__uuFxpx + LOCAL lnCodError, lnCodError_Esperado ; + , lc_File, lc_Filtros, ll_Valor, ll_ValorEsperado ; + , loFoxBin2Prg AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ; + , loEx AS EXCEPTION + #IF .F. + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + #ENDIF + + TRY + loEx = NULL + loFoxBin2Prg = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG") + *loFoxBin2Prg.l_Debug = .F. + loFoxBin2Prg.l_ShowErrors = .F. + *loFoxBin2Prg.l_Test = .T. + + + *-- DATOS DE ENTRADA + STORE 0 TO lnCodError, lnCodError_Esperado + lc_File = 'FB2P_FOXUSER.DBF' + lc_Filtros = 'XX.DBF,FF.FRX,??F*.*' + ll_ValorEsperado = .F. + + *-- EVALUACIÓN DEL TEST + ll_Valor = loFoxBin2Prg.FilenameFoundInFilter( lc_File, lc_Filtros ) + + CATCH TO loEx + + FINALLY + THIS.Evaluate_results( loEx, lnCodError_Esperado, ll_Valor, ll_ValorEsperado ) + STORE NULL TO loFoxBin2Prg + RELEASE loFoxBin2Prg + ENDTRY + + ENDFUNC + + +ENDDEFINE diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 5cd6a9f..a721a70 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -451,6 +451,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -492,6 +493,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -566,6 +569,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM MNX_Conversion_Support = 2 DBF_Conversion_Support = 1 DBC_Conversion_Support = 2 + DBF_Conversion_Included = '' + DBF_Conversion_Excluded = '' PROCEDURE INIT @@ -832,6 +837,24 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC + PROCEDURE DBF_Conversion_Included_ACCESS + IF THIS.n_CFG_Actual = 0 OR ISNULL( THIS.o_Configuration( THIS.n_CFG_Actual ) ) + RETURN THIS.DBF_Conversion_Included + ELSE + RETURN NVL( THIS.o_Configuration( THIS.n_CFG_Actual ).DBF_Conversion_Included, THIS.DBF_Conversion_Included ) + ENDIF + ENDPROC + + + PROCEDURE DBF_Conversion_Excluded_ACCESS + IF THIS.n_CFG_Actual = 0 OR ISNULL( THIS.o_Configuration( THIS.n_CFG_Actual ) ) + RETURN THIS.DBF_Conversion_Excluded + ELSE + RETURN NVL( THIS.o_Configuration( THIS.n_CFG_Actual ).DBF_Conversion_Excluded, THIS.DBF_Conversion_Excluded ) + ENDIF + ENDPROC + + PROCEDURE DBC_Conversion_Support_ACCESS IF THIS.n_CFG_Actual = 0 OR ISNULL( THIS.o_Configuration( THIS.n_CFG_Actual ) ) RETURN THIS.DBC_Conversion_Support @@ -1329,6 +1352,28 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC + FUNCTION FilenameFoundInFilter + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * tcFilename (v! IN ) Nombre del archivo a evaluar + * tcFilters (v! IN ) Filtros a evaluar (*,??E.*,R*.*) + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcFilename, tcFilters + + LOCAL llFound, laFiltros(1) + tcFilename = UPPER(tcFilename) + + FOR I = 1 TO ALINES( laFiltros, tcFilters + ',', 1+4, ',' ) + IF LIKE( UPPER(laFiltros(I)), tcFilename ) + llFound = .T. + EXIT + ENDIF + ENDFOR + + RETURN llFound + ENDFUNC + + PROCEDURE Get_Ext2FromExt LPARAMETERS tcExt LOCAL lcExt2 @@ -11131,7 +11176,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg DODEFAULT( @toModulo, @toEx ) TRY - LOCAL lnCodError, laDatabases(1), lnDatabases_Count, laDatabases2(1), lnLen, lc_FileTypeDesc ; + LOCAL lnCodError, laDatabases(1), lnDatabases_Count, laDatabases2(1), lnLen, lc_FileTypeDesc, laLines(1) ; , ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, lnDataSessionID, lnSelect ; , loTable AS CL_DBF_TABLE OF 'FOXBIN2PRG.PRG' ; , loDBFUtils AS CL_DBF_UTILS OF 'FOXBIN2PRG.PRG' @@ -11140,6 +11185,22 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg loDBFUtils = CREATEOBJECT('CL_DBF_UTILS') WITH THIS AS c_conversor_dbf_a_prg OF 'FOXBIN2PRG.PRG' + *-- EVALUAR OPCIONES ESPECÍFICAS DE DBF + + *-- Include + IF NOT EMPTY(toFoxBin2Prg.DBF_Conversion_Included) AND NOT toFoxBin2Prg.DBF_Conversion_Included == '*' ; + AND NOT toFoxBin2Prg.FilenameFoundInFilter( .c_InputFile, toFoxBin2Prg.DBF_Conversion_Included ) + toFoxBin2Prg.writeLog(' ' + .c_InputFile + ' no está en el filtro DBF_Conversion_Included (' + toFoxBin2Prg.DBF_Conversion_Included + ')' ) + EXIT + ENDIF + + *-- Exclude + IF NOT EMPTY(toFoxBin2Prg.DBF_Conversion_Excluded) ; + AND toFoxBin2Prg.FilenameFoundInFilter( .c_InputFile, toFoxBin2Prg.DBF_Conversion_Excluded ) + toFoxBin2Prg.writeLog(' ' + .c_InputFile + ' está en el filtro DBF_Conversion_Excluded (' + toFoxBin2Prg.DBF_Conversion_Included + ')' ) + 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) @@ -15900,7 +15961,9 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE #ENDIF TRY - LOCAL lcText, lcTableCFG, lcIndexKey, lcIndexFile, loEx AS EXCEPTION ; + LOCAL lcText, lcTableCFG, lcIndexKey, lcIndexFile, laConfig(1), lcValue, lcConfigItem ; + , lc_DBF_Conversion_Order, lc_DBF_Conversion_Condition ; + , loEx AS EXCEPTION ; , loRecords AS CL_DBF_RECORDS OF 'FOXBIN2PRG.PRG' ; , loFields AS CL_DBF_FIELDS OF 'FOXBIN2PRG.PRG' ; , loIndexes AS CL_DBF_INDEXES OF 'FOXBIN2PRG.PRG' @@ -15932,24 +15995,43 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE lcText = lcText + loIndexes.toText( '', '', tc_InputFile ) IF toFoxBin2Prg.DBF_Conversion_Support = 4 && BIN2PRG (DATA EXPORT FOR DIFF) - *-- If table CFG exists, use it to order records. FDBOZZO. 2014/06/15 + *-- If table CFG exists, use it for DBF-specific configuration. FDBOZZO. 2014/06/15 lcTableCFG = tc_InputFile + '.CFG' IF FILE(lcTableCFG) toFoxBin2Prg.writeLog() toFoxBin2Prg.writeLog('* Found configuration file: ' + lcTableCFG) - lcIndexKey = ALLTRIM( FILETOSTR(lcTableCFG), 0, ' ', CHR(13), CHR(10) ) - IF NOT EMPTY(lcIndexKey) + *-- Leer valores de configuración + FOR I = 1 TO ALINES( laConfig, FILETOSTR( lcTableCFG ), 1+4 ) + lcConfigItem = LOWER( laConfig(I) ) + + DO CASE + CASE INLIST( LEFT( lcConfigItem, 1 ), '*', '#', '/', "'" ) + LOOP + + CASE LEFT( lcConfigItem, 21 ) == LOWER('DBF_Conversion_Order:') + lc_DBF_Conversion_Order = ALLTRIM( SUBSTR( laConfig(I), 22 ) ) + toFoxBin2Prg.writeLog(' ' + JUSTFNAME(lcTableCFG) + ' -> DBF_Conversion_Order: ' + lc_DBF_Conversion_Order ) + + CASE LEFT( lcConfigItem, 25 ) == LOWER('DBF_Conversion_Condition:') + lc_DBF_Conversion_Condition = ALLTRIM( SUBSTR( laConfig(I), 26 ) ) + toFoxBin2Prg.writeLog(' ' + JUSTFNAME(lcTableCFG) + ' -> DBF_Conversion_Condition: ' + lc_DBF_Conversion_Condition ) + + ENDCASE + ENDFOR + + IF NOT EMPTY(lc_DBF_Conversion_Order) lcIndexFile = FORCEEXT(tc_InputFile,'IDX') - INDEX ON &lcIndexKey. TO (lcIndexFile) COMPACT - toFoxBin2Prg.writeLog(' > Using Index order key: ' + lcIndexKey) + INDEX ON &lc_DBF_Conversion_Order. TO (lcIndexFile) COMPACT + toFoxBin2Prg.writeLog(' > Using Index order key: ' + lc_DBF_Conversion_Order) ENDIF + ENDIF *** DH 06/02/2014: added _Records loRecords = THIS._Records - lcText = lcText + loRecords.toText(@laFields, lnFieldCount) + lcText = lcText + loRecords.toText(@laFields, lnFieldCount, lc_DBF_Conversion_Condition) ENDIF @@ -16548,11 +16630,12 @@ DEFINE CLASS CL_DBF_RECORDS AS CL_COL_BASE PROCEDURE toText *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) - * taFields (@! IN ) Array de información de campos - * tnField_Count (v! IN ) Cantidad de campos + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * taFields (@! IN ) Array de información de campos + * tnField_Count (v! IN ) Cantidad de campos + * tc_DBF_Conversion_Condition (v? IN ) Condición de filtro para la conversión. Solo se exporta lo que la cumpla. *--------------------------------------------------------------------------------------------------- - LPARAMETERS taFields, tnField_Count + LPARAMETERS taFields, tnField_Count, tc_DBF_Conversion_Condition EXTERNAL ARRAY taFields @@ -16567,8 +16650,12 @@ DEFINE CLASS CL_DBF_RECORDS AS CL_COL_BASE ENDTEXT loRecord = CREATEOBJECT('CL_DBF_RECORD') + + IF EMPTY(tc_DBF_Conversion_Condition) + tc_DBF_Conversion_Condition = '.T.' + ENDIF - SCAN + SCAN FOR &tc_DBF_Conversion_Condition. lcText = lcText + loRecord.toText(@taFields, tnField_Count) ENDSCAN @@ -16579,6 +16666,7 @@ DEFINE CLASS CL_DBF_RECORDS AS CL_COL_BASE CATCH TO loEx + loEx.UserValue = loEx.UserValue + 'tc_DBF_Conversion_Condition = [' + TRANSFORM(tc_DBF_Conversion_Condition) + ']' + CR_LF IF THIS.l_Debug AND _VFP.STARTMODE = 0 SET STEP ON ENDIF @@ -19652,7 +19740,7 @@ DEFINE CLASS CL_CFG AS CUSTOM #ENDIF - *-- + *-- Configuration class. By default asumes master value, except when overriding one. c_Foxbin2prg_FullPath = '' c_Foxbin2prg_ConfigFile = '' c_CurDir = '' @@ -19679,6 +19767,8 @@ DEFINE CLASS CL_CFG AS CUSTOM LBX_Conversion_Support = NULL MNX_Conversion_Support = NULL DBF_Conversion_Support = NULL + DBF_Conversion_Included = NULL + DBF_Conversion_Excluded = NULL DBC_Conversion_Support = NULL From 323093e0d89a84e13da97a7c85d15f6bdce077b0 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Mon, 21 Jul 2014 23:58:40 +0200 Subject: [PATCH 2/6] Changeset: 374 fdbozzo - 21/07/2014 23:13:11: --- foxbin2prg.prg | 58 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index a721a70..8bf3f9f 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -1150,7 +1150,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM lcValue = ALLTRIM( SUBSTR( laConfig(I), 18 ) ) IF NOT INLIST( TRANSFORM(tcDontShowProgress), '0', '1' ) AND INLIST( lcValue, '0', '1' ) THEN tcDontShowProgress = lcValue - .writeLog( JUSTFNAME(lcConfigFile) + ' > tcDontShowProgress: ' + TRANSFORM(tcDontShowProgress) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > tcDontShowProgress: ' + TRANSFORM(tcDontShowProgress) ) ENDIF CASE LEFT( laConfig(I), 15 ) == LOWER('DontShowErrors:') @@ -1159,112 +1159,126 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM lcValue = ALLTRIM( SUBSTR( laConfig(I), 16 ) ) IF NOT INLIST( TRANSFORM(tcDontShowErrors), '0', '1' ) AND INLIST( lcValue, '0', '1' ) THEN tcDontShowErrors = lcValue - .writeLog( JUSTFNAME(lcConfigFile) + ' > tcDontShowErrors: ' + TRANSFORM(tcDontShowErrors) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > tcDontShowErrors: ' + TRANSFORM(tcDontShowErrors) ) ENDIF CASE LEFT( laConfig(I), 13 ) == LOWER('NoTimestamps:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 14 ) ) IF NOT INLIST( TRANSFORM(tcNoTimestamps), '0', '1' ) AND INLIST( lcValue, '0', '1' ) THEN tcNoTimestamps = lcValue - .writeLog( JUSTFNAME(lcConfigFile) + ' > tcNoTimestamps: ' + TRANSFORM(tcNoTimestamps) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > tcNoTimestamps: ' + TRANSFORM(tcNoTimestamps) ) ENDIF CASE LEFT( laConfig(I), 6 ) == LOWER('Debug:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 7 ) ) IF NOT INLIST( TRANSFORM(tcDebug), '0', '1' ) AND INLIST( lcValue, '0', '1' ) THEN tcDebug = lcValue - .writeLog( JUSTFNAME(lcConfigFile) + ' > tcDebug: ' + TRANSFORM(tcDebug) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > tcDebug: ' + TRANSFORM(tcDebug) ) ENDIF CASE LEFT( laConfig(I), 18 ) == LOWER('ExtraBackupLevels:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 19 ) ) IF NOT ISDIGIT( TRANSFORM(tcExtraBackupLevels) ) AND ISDIGIT( lcValue ) THEN tcExtraBackupLevels = lcValue - .writeLog( JUSTFNAME(lcConfigFile) + ' > tcExtraBackupLevels: ' + TRANSFORM(tcExtraBackupLevels) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > tcExtraBackupLevels: ' + TRANSFORM(tcExtraBackupLevels) ) ENDIF CASE LEFT( laConfig(I), 14 ) == LOWER('ClearUniqueID:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 15 ) ) IF NOT INLIST( TRANSFORM(tcClearUniqueID), '0', '1' ) AND INLIST( lcValue, '0', '1' ) THEN tcClearUniqueID = lcValue - .writeLog( JUSTFNAME(lcConfigFile) + ' > ClearUniqueID: ' + TRANSFORM(lcValue) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > ClearUniqueID: ' + TRANSFORM(lcValue) ) ENDIF CASE LEFT( laConfig(I), 20 ) == LOWER('OptimizeByFilestamp:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 21 ) ) IF NOT INLIST( TRANSFORM(tcOptimizeByFilestamp), '0', '1' ) AND INLIST( lcValue, '0', '1' ) THEN tcOptimizeByFilestamp = lcValue - .writeLog( JUSTFNAME(lcConfigFile) + ' > OptimizeByFilestamp: ' + TRANSFORM(lcValue) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > OptimizeByFilestamp: ' + TRANSFORM(lcValue) ) ENDIF CASE LEFT( laConfig(I), 17 ) == LOWER('AllowMultiConfig:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 18 ) ) IF INLIST( lcValue, '0', '1' ) THEN .l_AllowMultiConfig = ( TRANSFORM(lcValue) == '1' ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > AllowMultiConfig: ' + TRANSFORM(lcValue) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > AllowMultiConfig: ' + TRANSFORM(lcValue) ) ENDIF CASE LEFT( laConfig(I), 22 ) == LOWER('DropNullCharsFromCode:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 23 ) ) IF INLIST( lcValue, '0', '1' ) THEN .l_DropNullCharsFromCode = ( TRANSFORM(lcValue) == '1' ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > DropNullCharsFromCode: ' + TRANSFORM(lcValue) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > DropNullCharsFromCode: ' + TRANSFORM(lcValue) ) ENDIF CASE LEFT( laConfig(I), 23 ) == LOWER('PJX_Conversion_Support:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) ) IF INLIST( lcValue, '0', '1', '2' ) THEN lo_CFG.PJX_Conversion_Support = INT( VAL( lcValue ) ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > PJX_Conversion_Support: ' + TRANSFORM(lo_CFG.PJX_Conversion_Support) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > PJX_Conversion_Support: ' + TRANSFORM(lo_CFG.PJX_Conversion_Support) ) ENDIF CASE LEFT( laConfig(I), 23 ) == LOWER('VCX_Conversion_Support:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) ) IF INLIST( lcValue, '0', '1', '2' ) THEN lo_CFG.VCX_Conversion_Support = INT( VAL( lcValue ) ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > VCX_Conversion_Support: ' + TRANSFORM(lo_CFG.VCX_Conversion_Support) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > VCX_Conversion_Support: ' + TRANSFORM(lo_CFG.VCX_Conversion_Support) ) ENDIF CASE LEFT( laConfig(I), 23 ) == LOWER('SCX_Conversion_Support:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) ) IF INLIST( lcValue, '0', '1', '2' ) THEN lo_CFG.SCX_Conversion_Support = INT( VAL( lcValue ) ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > SCX_Conversion_Support: ' + TRANSFORM(lo_CFG.SCX_Conversion_Support) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > SCX_Conversion_Support: ' + TRANSFORM(lo_CFG.SCX_Conversion_Support) ) ENDIF CASE LEFT( laConfig(I), 23 ) == LOWER('FRX_Conversion_Support:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) ) IF INLIST( lcValue, '0', '1', '2' ) THEN lo_CFG.FRX_Conversion_Support = INT( VAL( lcValue ) ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > FRX_Conversion_Support: ' + TRANSFORM(lo_CFG.FRX_Conversion_Support) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > FRX_Conversion_Support: ' + TRANSFORM(lo_CFG.FRX_Conversion_Support) ) ENDIF CASE LEFT( laConfig(I), 23 ) == LOWER('LBX_Conversion_Support:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) ) IF INLIST( lcValue, '0', '1', '2' ) THEN lo_CFG.LBX_Conversion_Support = INT( VAL( lcValue ) ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > LBX_Conversion_Support: ' + TRANSFORM(lo_CFG.LBX_Conversion_Support) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > LBX_Conversion_Support: ' + TRANSFORM(lo_CFG.LBX_Conversion_Support) ) ENDIF CASE LEFT( laConfig(I), 23 ) == LOWER('MNX_Conversion_Support:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) ) IF INLIST( lcValue, '0', '1', '2' ) THEN lo_CFG.MNX_Conversion_Support = INT( VAL( lcValue ) ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > MNX_Conversion_Support: ' + TRANSFORM(lo_CFG.MNX_Conversion_Support) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > MNX_Conversion_Support: ' + TRANSFORM(lo_CFG.MNX_Conversion_Support) ) ENDIF CASE LEFT( laConfig(I), 23 ) == LOWER('DBF_Conversion_Support:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) ) IF INLIST( lcValue, '0', '1', '2', '4' ) THEN lo_CFG.DBF_Conversion_Support = INT( VAL( lcValue ) ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > DBF_Conversion_Support: ' + TRANSFORM(lo_CFG.DBF_Conversion_Support) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > DBF_Conversion_Support: ' + TRANSFORM(lo_CFG.DBF_Conversion_Support) ) + ENDIF + + CASE LEFT( laConfig(I), 24 ) == LOWER('DBF_Conversion_Included:') + lcValue = ALLTRIM( SUBSTR( laConfig(I), 25 ) ) + IF NOT EMPTY(lcValue) THEN + lo_CFG.DBF_Conversion_Included = lcValue + .writeLog( JUSTFNAME(lcConfigFile) + ' > DBF_Conversion_Included: ' + TRANSFORM(lo_CFG.DBF_Conversion_Included) ) + ENDIF + + CASE LEFT( laConfig(I), 24 ) == LOWER('DBF_Conversion_Excluded:') + lcValue = ALLTRIM( SUBSTR( laConfig(I), 25 ) ) + IF NOT EMPTY(lcValue) THEN + lo_CFG.DBF_Conversion_Excluded = lcValue + .writeLog( JUSTFNAME(lcConfigFile) + ' > DBF_Conversion_Excluded: ' + TRANSFORM(lo_CFG.DBF_Conversion_Excluded) ) ENDIF CASE LEFT( laConfig(I), 23 ) == LOWER('DBC_Conversion_Support:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) ) IF INLIST( lcValue, '0', '1', '2' ) THEN lo_CFG.DBC_Conversion_Support = INT( VAL( lcValue ) ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > DBC_Conversion_Support: ' + TRANSFORM(lo_CFG.DBC_Conversion_Support) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > DBC_Conversion_Support: ' + TRANSFORM(lo_CFG.DBC_Conversion_Support) ) ENDIF ENDCASE @@ -11189,15 +11203,15 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg *-- Include IF NOT EMPTY(toFoxBin2Prg.DBF_Conversion_Included) AND NOT toFoxBin2Prg.DBF_Conversion_Included == '*' ; - AND NOT toFoxBin2Prg.FilenameFoundInFilter( .c_InputFile, toFoxBin2Prg.DBF_Conversion_Included ) - toFoxBin2Prg.writeLog(' ' + .c_InputFile + ' no está en el filtro DBF_Conversion_Included (' + 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 *-- Exclude IF NOT EMPTY(toFoxBin2Prg.DBF_Conversion_Excluded) ; - AND toFoxBin2Prg.FilenameFoundInFilter( .c_InputFile, toFoxBin2Prg.DBF_Conversion_Excluded ) - toFoxBin2Prg.writeLog(' ' + .c_InputFile + ' está en el filtro DBF_Conversion_Excluded (' + toFoxBin2Prg.DBF_Conversion_Included + ')' ) + 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 @@ -19732,6 +19746,8 @@ DEFINE CLASS CL_CFG AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + + [] ; + [] ; + [] From 0444de1fff34cf1ddaa44d8e15df2d530a1ef82a Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Tue, 22 Jul 2014 00:03:49 +0200 Subject: [PATCH 3/6] Changeset: 375 fdbozzo - 21/07/2014 23:58:40: --- foxbin2prg.prg | 2 ++ 1 file changed, 2 insertions(+) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 8bf3f9f..e14cd3f 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -94,6 +94,7 @@ * 27/06/2014 FDBOZZO v1.19.26 Mejora: Si el campo memo "methods" de los vcx/scx contiene asteriscos fuera de lugar (que no debería), FoxBin2Prg lo procesa igualmente. (Daniel Sánchez) * 06/07/2014 FDBOZZO v1.19.26 Bug Fix cfg: ExtraBackupLevel no se tiene en cuenta cuando se usa multi-configuración * 02/06/2014 DH/FDBOZZO v1.19.27 Mejora: Agregado soporte para exportar datos para DIFF (no para importar) +* 21/07/2014 FDBOZZO v1.19.28 Mejora: Agregada funcionalidad para filtrado de tablas y datos cuando se elige DBF_Conversion_Support:4 (Edyshor) * * *--------------------------------------------------------------------------------------------------- @@ -131,6 +132,7 @@ * 02/07/2014 Matt Slay MEJORA v1.19.25: Se filtran algunos CHR(0) de los binarios al tx2, provocando que a veces no sea reconocido como texto. Deberían poderse quitar los NULLs (Arreglado en v1.19.26) * 27/06/2014 Daniel Sánchez MEJORA v1.19.25: Si el campo memo "methods" de los vcx/scx contiene asteriscos fuera de lugar (que no debería), FoxBin2Prg falla. Debería poder procesarlo igual. * 02/06/2014 Doug Hennig MEJORA v1.19.22: Agregada funcionalidad para exportar los datos de las tablas al archivo db2 (Agregado en v1.19.27) +* 21/07/2014 Edyshor PROPUESTA DE MEJORA db2 v1.19.27: Sería útil poder filtrar tablas y datos cuando se elige DBF_Conversion_Support:4 (Agregado en v1.19.28) * * *--------------------------------------------------------------------------------------------------- From f70ed1589124ce1dd40438663c9bdc54d50f5156 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Tue, 22 Jul 2014 00:18:24 +0200 Subject: [PATCH 4/6] Changeset: 376 fdbozzo - 22/07/2014 00:03:49: --- foxbin2prg.cfg | 35 +++++++---------------------------- 1 file changed, 7 insertions(+), 28 deletions(-) diff --git a/foxbin2prg.cfg b/foxbin2prg.cfg index 0acd373..6cd76ad 100644 --- a/foxbin2prg.cfg +++ b/foxbin2prg.cfg @@ -2,7 +2,8 @@ * FOXBIN2PRG v1.19.26 * CONFIGURATION FILE / ARCHIVO DE CONFIGURACIÓN *--------------------------------------------------------------------------------------------------- -* DON'T MODIFY THIS DOCUMENTATION SECTION / NO MODIFIQUE ESTA SECCIÓN DE DOCUMENTACIÓN +* EN: DON'T MODIFY THIS DOCUMENTATION SECTION, MODIFY *UNDER* THIS SECTION +* ES: NO MODIFIQUE ESTA SECCIÓN DE DOCUMENTACIÓN, MODIFIQUE *DEBAJO* DE ESTA SECCIÓN * * DETAIL OF SUPPORTED VALUES / DETALLE DE VALORES SOPORTADOS * If no values given, this are the defaults / Si no se proporcionan valores, estos son los predeterminados @@ -27,6 +28,8 @@ * DBC_Conversion_Support: 2 && Default value * DBF_Conversion_Support: 1 && Default value >> EN: FoxBin2Prg support bi-directional convertion of DBFs, but does not keep data. Use with care. * >> ES: FoxBin2Prg tiene soporte bi-direccional para convertir DBF, pero no mantiene los datos. Usar con cuidado. +* DBF_Conversion_Included: * && If DBF_Conversion_Support:4, you can specify mnultiple filemasks: www,fb2p_free.dbf / Si DBF_Conversion_Support:4, se pueden indicar múltiples máscaras de archivo: www,fb2p_free.dbf +* DBF_Conversion_Excluded: && If DBF_Conversion_Support:4, you can specify mnultiple filemasks: www,fb2p_free.dbf / Si DBF_Conversion_Support:4, se pueden indicar múltiples máscaras de archivo: www,fb2p_free.dbf * * EN: Note: This values have precedence over internal parameters and parameters used on scripts * ES: Nota: Estos valores tienen precedencia sobre los parámetros internos y los parámetros usados en los scripts @@ -35,6 +38,9 @@ **************************************************************************************************** +**************************************************************************************************** +* YOU CAN MODIFY FROM HERE! / PUEDE MODIFICAR DESDE AQUÍ! + * EN: Uncomment for SourceSafe compatibility. You can change the extension on the right side. * ES: Descomentar para compatibilidad con SourceSafe. Puede cambiar la extensión del lado derecho. *--------------------------------------------------------------------------------------------------- @@ -47,30 +53,3 @@ *extension: db2=dba *extension: dc2=dca - -* EN: Uncomment to activate the new value, comment to deactivate and use the default -* ES: Descomente para activar el nuevo valor, comente para desactivarlo y usar el predeterminado -*--------------------------------------------------------------------------------------------------- -*DontShowProgress: 1 -*DontShowErrors: 1 -*NoTimestamps: 0 -*Debug: 1 -*ExtraBackupLevels: 0 -*ClearUniqueID: 0 -*OptimizeByFilestamp: 0 -*AllowMultiConfig: 0 -*DropNullCharsFromCode: 0 - - -* EN: Uncomment to activate the new value, comment to deactivate and use the default -* ES: Descomente para activar el nuevo valor, comente para desactivarlo y usar el predeterminado -* 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge) -*--------------------------------------------------------------------------------------------------- -*PJX_Conversion_Support: 2 -*VCX_Conversion_Support: 2 -*SCX_Conversion_Support: 2 -*FRX_Conversion_Support: 2 -*LBX_Conversion_Support: 2 -*MNX_Conversion_Support: 2 -*DBC_Conversion_Support: 2 -*DBF_Conversion_Support: 2 From 73479426265e103416b4e3dfeb94b8f1a90524e4 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 26 Jul 2014 17:43:48 +0200 Subject: [PATCH 5/6] Changeset: 377 fdbozzo - 22/07/2014 00:18:25: --- foxbin2prg.exe | Bin 440221 -> 443091 bytes foxbin2prg.pj2 | 4 ++-- foxbin2prg.pjt | Bin 593843 -> 597154 bytes foxbin2prg.pjx | Bin 8993 -> 8993 bytes 4 files changed, 2 insertions(+), 2 deletions(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 459d3d243629728ed7d793554be128aa79475ddc..608d91286d772b5587fe300e6a41dff5b740d0ee 100644 GIT binary patch delta 19894 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 diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2 index d8c1e4f..b132a4e 100644 --- a/foxbin2prg.pj2 +++ b/foxbin2prg.pj2 @@ -23,10 +23,10 @@ _CompanyName = "Fernando D. Bozzo" _FileDescription = "Conversor bidireccional de binarios FoxPro 9 (scx,vcx,pjx) a texto para sustituir al scctext :-)" _LegalCopyright = "Creative Commons 4: Reconocimiento - CompartirIgual (by-sa): http://creativecommons.org/licenses/by/4.0/" _LegalTrademark = "Creative Commons 4: Reconocimiento - CompartirIgual (by-sa): http://creativecommons.org/licenses/by/4.0/" -_ProductName = " FOXBIN2PRG v1.19.27" +_ProductName = " FOXBIN2PRG v1.19.28" _MajorVer = "1" _MinorVer = "19" -_Revision = "27" +_Revision = "28" _LanguageID = "1034" _AutoIncrement = "0" * diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index 704b77ec625611c973c123669054f68b0b86d22e..ca3885125b850e01893c38582d47396926da8c23 100644 GIT binary patch delta 19633 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 SrbgcUKikFsLFjP)^M3$jt)zwk delta 16669 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 diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx index 185998c93cfe6d26cd9c71ffa64a4c30c732a48d..030188adbedc23d0567dbe3529516e931903bf38 100644 GIT binary patch delta 73 zcmZ4Jw$P2mfR9~lBg+mJHcN9OGc(J{hgkk;gP5iU3{c<}qM+cW00gEcCLp0b0?Z6~ S8q5p|X2#~0n_sh<$pQdgmJdGw delta 73 zcmZ4Jw$P2mfRCMjBg+mJHd9k`QxoIKhgkk;gP6va3{c<}qM+cW00gEcCLp0b0?Z67 S8q5p|hUNwqn_sh<$pQdXSPsAd From f0fdf35b73eb2bea3017fb878e1a2432ca3095b8 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 26 Jul 2014 17:48:37 +0200 Subject: [PATCH 6/6] Changeset: 378 fdbozzo - 26/07/2014 17:45:23: --- FoxBin2PRGVersionFile.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 331619a..9413152 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -2,8 +2,8 @@ Lparameters toUpdateInfo Local lcNote With toUpdateInfo - .VersionNumber = 'v1.19.27' - .VersionDate = Date(2014,07,18) + .VersionNumber = 'v1.19.28' + .VersionDate = Date(2014,07,26) .SourceFileUrl = 'http://vfpxrepository.com/dl/thorupdate/Projects/FoxBin2Prg/FoxBin2Prg.Zip' .Link = 'http://vfpx.codeplex.com/wikipage?title=FoxBin2PRG' @@ -17,6 +17,8 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg Change History ------------------------------------------------------------- +2014/07/26 v1.19.28 +- Feature: Added new options in foxbin2prg.cfg (DBF_Conversion_Included, DBF_Conversion_Excluded) and in filename.dbf.cfg (DBF_Conversion_Order, DBF_Conversion_Condition) for exporting DBFs data to text when DBF_Conversion_Support is 4 (Edyshor) 2014/07/18 v1.19.27 - Feature: Added support for exporting DBF data for DIFF (It's intended just for DIFF small DBFs, as config ones, not for true Data export. Binary fields are not exported and there is not an Import Data feature) (Doug Hennig)