From f69cdd73c9d9d3e711002ee630cd58f41155d65e Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Mon, 14 Jul 2014 18:20:20 +0200 Subject: [PATCH 1/7] Changeset: 360 fdbozzo - 14/07/2014 18:19:38: --- foxbin2prg.prg | 188 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 186 insertions(+), 2 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 26babfc..4cf0296 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -268,6 +268,15 @@ LPARAMETERS tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDeb #DEFINE C_LF CHR(10) #DEFINE CR_LF C_CR + C_LF #DEFINE C_MPROPHEADER REPLICATE( CHR(1), 517 ) + +*** DH 06/02/2014: added additional constants +#DEFINE C_RECORDS_I '' +#DEFINE C_RECORDS_F '' +#DEFINE C_RECORD_I '' +#DEFINE C_RECORD_F '' +#DEFINE C_RECNO_I '' +#DEFINE C_RECNO_F '' + *-- Fin / End *-- From FOXPRO.H @@ -7032,7 +7041,6 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin LOCAL toTable AS CL_DBF_TABLE OF 'FOXBIN2PRG.PRG' LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF - TRY LOCAL I, lnCodError, loEx AS EXCEPTION ; , loField AS CL_DBF_FIELD OF 'FOXBIN2PRG.PRG' ; @@ -15280,6 +15288,8 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE *-- THIS.ADDOBJECT("_Fields", "CL_DBF_FIELDS") THIS.ADDOBJECT("_Indexes", "CL_DBF_INDEXES") +*** DH 06/02/2014: added _Records + THIS.ADDOBJECT("_Records", "CL_DBF_RECORDS") ENDPROC @@ -15385,14 +15395,22 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE <<>> <> ENDTEXT +*** DH 06/02/2014: created variables + local laFields[1], lnFieldCount + *-- Fields loFields = THIS._Fields - lcText = lcText + loFields.toText() +*** DH 06/02/2014: passed variables to toText +* lcText = lcText + loFields.toText() + lcText = lcText + loFields.toText(@laFields, @lnFieldCount) *-- Indexes loIndexes = THIS._Indexes lcText = lcText + loIndexes.toText( '', '', tc_InputFile ) +*** DH 06/02/2014: added _Records + lcText = lcText + This._Records.toText(@laFields, lnFieldCount) + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <> <<>> @@ -15959,6 +15977,172 @@ DEFINE CLASS CL_DBF_INDEX AS CL_CUS_BASE ENDDEFINE +*** DH 06/02/2014: added classes CL_DBF_RECORDS and CL_DBF_RECORD + +******************************************************************************************************************* +DEFINE CLASS CL_DBF_RECORDS AS CL_COL_BASE + #IF .F. + LOCAL THIS AS CL_DBF_RECORDS OF 'FOXBIN2PRG.PRG' + #ENDIF + + + ******************************************************************************************************************* + PROCEDURE analizarBloque + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tcLine (@! IN/OUT) Contenido de la línea en análisis + * taCodeLines (@! IN ) Array de líneas del programa analizado + * I (@! IN/OUT) Número de línea en análisis + * tnCodeLines (@! IN ) Cantidad de líneas del programa analizado + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcLine, taCodeLines, I, tnCodeLines +*** DH 06/02/2014: not implemented + ENDPROC + + + PROCEDURE toText + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * taFields (@? OUT) Array de información de campos + * tnField_Count (@? OUT) Cantidad de campos + *--------------------------------------------------------------------------------------------------- + LPARAMETERS taFields, tnField_Count + + EXTERNAL ARRAY taFields + + TRY + LOCAL lcText, loEx AS EXCEPTION ; + , loRecord AS CL_DBF_RECORD OF 'FOXBIN2PRG.PRG' + lcText = '' + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> <> + ENDTEXT + + loRecord = CREATEOBJECT('CL_DBF_RECORD') + + scan + lcText = lcText + loRecord.toText(@taFields, tnField_Count) + endscan + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <> + <<>> + ENDTEXT + + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + FINALLY + STORE NULL TO loRecord + RELEASE loRecord + + ENDTRY + + RETURN lcText + ENDPROC + + +ENDDEFINE + + +******************************************************************************************************************* +DEFINE CLASS CL_DBF_RECORD AS CL_CUS_BASE + #IF .F. + LOCAL THIS AS CL_DBF_RECORD OF 'FOXBIN2PRG.PRG' + #ENDIF + + + ******************************************************************************************************************* + PROCEDURE analizarBloque + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tcLine (@! IN/OUT) Contenido de la línea en análisis + * taCodeLines (@! IN ) Array de líneas del programa analizado + * I (@! IN/OUT) Número de línea en análisis + * tnCodeLines (@! IN ) Cantidad de líneas del programa analizado + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcLine, taCodeLines, I, tnCodeLines +*** DH 06/02/2014: not implemented + ENDPROC + + + PROCEDURE toText + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * taFields (@? OUT) Array de información de campos + * tnField_Count (@? OUT) Cantidad de campos + *--------------------------------------------------------------------------------------------------- + LPARAMETERS taFields, tnField_Count + + EXTERNAL ARRAY taFields + + TRY + LOCAL I, lcText, loEx AS EXCEPTION, lcField, luValue + lcText = '' + + TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <> + <<>> <><><> + endtext + + for I = 1 to tnField_Count + lcField = taFields[I, 1] + luValue = evaluate(lcField) + do case + case taFields[I, 2] $ 'CMV' + luValue = trim(luValue) + if This.Encode(luValue) <> luValue + luValue = '' + endif This.Encode(luValue) <> luValue + endcase + TEXT TO lcText TEXTMERGE NOSHOW flags 1+2 PRETEXT 1+2 additive + <<>> <<'<' + lcField + '>'>><>>> + endtext + next + + TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 additive + <<>> <> + ENDTEXT + + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY + + RETURN lcText + endproc + + procedure Encode + lparameters tcString + local lcString + lcString = strtran(tcString, '&', '&') + lcString = strtran(lcString, '>', '>') + lcString = strtran(lcString, '<', '<') + lcString = strtran(lcString, '"', '"') + lcString = strtran(lcString, "'", ''') + lcString = strtran(lcString, '/', '/') + lcString = strtran(lcString, chr(13), ' ') + lcString = strtran(lcString, chr(10), ' ') + lcString = strtran(lcString, chr(9), ' ') + return lcString + endproc + +ENDDEFINE + +*** DH 06/02/2014: end of added classes + ******************************************************************************************************************* DEFINE CLASS CL_PROJ_SRV_HEAD AS CL_CUS_BASE From dfd5386ab1d57d218f14381b97915b94cf067981 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Tue, 15 Jul 2014 20:38:03 +0200 Subject: [PATCH 2/7] =?UTF-8?q?Changeset:=20361=20fdbozzo=20-=2014/07/2014?= =?UTF-8?q?=2018:20:21:=20Optimizaciones=20sobre=20el=20c=C3=B3digo=20de?= =?UTF-8?q?=20Doug=20Hennig?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 114 +++++++++++++++++++++++++++---------------------- 1 file changed, 63 insertions(+), 51 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 4cf0296..5caa3c1 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -272,7 +272,7 @@ LPARAMETERS tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDeb *** DH 06/02/2014: added additional constants #DEFINE C_RECORDS_I '' #DEFINE C_RECORDS_F '' -#DEFINE C_RECORD_I '' +#DEFINE C_RECORD_I '' && *** FDBOZZO 2014/07/15: Optimized RECORD tag adding num property to not use REGNUM field #DEFINE C_RECORD_F '' #DEFINE C_RECNO_I '' #DEFINE C_RECNO_F '' @@ -11726,13 +11726,13 @@ DEFINE CLASS CL_DBC_COL_BASE AS CL_COL_BASE * tnParentID (v! IN ) ID del objeto Padre *--------------------------------------------------------------------------------------------------- LPARAMETERS tc_OutputFile, tnLastID, tnParentID - LOCAL loObject - loObject = NULL + LOCAL loObject + loObject = NULL FOR EACH loObject IN THIS FOXOBJECT - loObject.updateDBC( tc_OutputFile, @tnLastID, tnParentID ) + loObject.updateDBC( tc_OutputFile, @tnLastID, tnParentID ) loObject = NULL - ENDFOR + ENDFOR RETURN ENDPROC @@ -15288,7 +15288,7 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE *-- THIS.ADDOBJECT("_Fields", "CL_DBF_FIELDS") THIS.ADDOBJECT("_Indexes", "CL_DBF_INDEXES") -*** DH 06/02/2014: added _Records + *** DH 06/02/2014: added _Records THIS.ADDOBJECT("_Records", "CL_DBF_RECORDS") ENDPROC @@ -15381,6 +15381,9 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE LOCAL lcText, loEx AS EXCEPTION ; , loFields AS CL_DBF_FIELDS OF 'FOXBIN2PRG.PRG' ; , loIndexes AS CL_DBF_INDEXES OF 'FOXBIN2PRG.PRG' + *** DH 06/02/2014: created variables + LOCAL laFields[1], lnFieldCount + STORE NULL TO loIndexes, loFields lcText = '' @@ -15395,21 +15398,17 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE <<>> <> ENDTEXT -*** DH 06/02/2014: created variables - local laFields[1], lnFieldCount - *-- Fields loFields = THIS._Fields -*** DH 06/02/2014: passed variables to toText -* lcText = lcText + loFields.toText() + *** DH 06/02/2014: passed variables to toText lcText = lcText + loFields.toText(@laFields, @lnFieldCount) *-- Indexes loIndexes = THIS._Indexes lcText = lcText + loIndexes.toText( '', '', tc_InputFile ) -*** DH 06/02/2014: added _Records - lcText = lcText + This._Records.toText(@laFields, lnFieldCount) + *** DH 06/02/2014: added _Records + lcText = lcText + THIS._Records.toText(@laFields, lnFieldCount) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <> @@ -15996,7 +15995,7 @@ DEFINE CLASS CL_DBF_RECORDS AS CL_COL_BASE * tnCodeLines (@! IN ) Cantidad de líneas del programa analizado *--------------------------------------------------------------------------------------------------- LPARAMETERS tcLine, taCodeLines, I, tnCodeLines -*** DH 06/02/2014: not implemented + *** DH 06/02/2014: not implemented ENDPROC @@ -16022,9 +16021,9 @@ DEFINE CLASS CL_DBF_RECORDS AS CL_COL_BASE loRecord = CREATEOBJECT('CL_DBF_RECORD') - scan + SCAN lcText = lcText + loRecord.toText(@taFields, tnField_Count) - endscan + ENDSCAN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> <> @@ -16069,7 +16068,7 @@ DEFINE CLASS CL_DBF_RECORD AS CL_CUS_BASE * tnCodeLines (@! IN ) Cantidad de líneas del programa analizado *--------------------------------------------------------------------------------------------------- LPARAMETERS tcLine, taCodeLines, I, tnCodeLines -*** DH 06/02/2014: not implemented + *** DH 06/02/2014: not implemented ENDPROC @@ -16084,28 +16083,41 @@ DEFINE CLASS CL_DBF_RECORD AS CL_CUS_BASE EXTERNAL ARRAY taFields TRY - LOCAL I, lcText, loEx AS EXCEPTION, lcField, luValue + LOCAL I, lcText, loEx AS EXCEPTION, lcField, luValue, lcFieldType lcText = '' + *** FDBOZZO 2014/07/15: New "num" property invalidates the use of REGNUM field TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <> - <<>> <><><> - endtext + <<>> <> + ENDTEXT - for I = 1 to tnField_Count - lcField = taFields[I, 1] - luValue = evaluate(lcField) - do case - case taFields[I, 2] $ 'CMV' - luValue = trim(luValue) - if This.Encode(luValue) <> luValue - luValue = '' - endif This.Encode(luValue) <> luValue - endcase + FOR I = 1 TO tnField_Count + lcField = taFields[I, 1] + lcFieldType = taFields[I, 2] + + *** FDBOZZO 2014/07/15: Added field restrictions on binary and general fields + DO CASE + CASE lcFieldType == 'G' + luValue = 'GENERAL FIELD NOT SUPPORTED' + CASE lcFieldType == 'W' + luValue = 'BLOB FIELD NOT SUPPORTED' + CASE lcFieldType == 'Q' + luValue = 'VARBINARY FIELD NOT SUPPORTED' + OTHERWISE + luValue = EVALUATE(lcField) + ENDCASE + + DO CASE + CASE taFields[I, 2] $ 'CMV' + luValue = TRIM(luValue) + IF THIS.Encode(luValue) <> luValue + luValue = '' + ENDIF THIS.Encode(luValue) <> luValue + ENDCASE TEXT TO lcText TEXTMERGE NOSHOW flags 1+2 PRETEXT 1+2 additive <<>> <<'<' + lcField + '>'>><>>> - endtext - next + ENDTEXT + NEXT TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 additive <<>> <> @@ -16122,22 +16134,22 @@ DEFINE CLASS CL_DBF_RECORD AS CL_CUS_BASE ENDTRY RETURN lcText - endproc - - procedure Encode - lparameters tcString - local lcString - lcString = strtran(tcString, '&', '&') - lcString = strtran(lcString, '>', '>') - lcString = strtran(lcString, '<', '<') - lcString = strtran(lcString, '"', '"') - lcString = strtran(lcString, "'", ''') - lcString = strtran(lcString, '/', '/') - lcString = strtran(lcString, chr(13), ' ') - lcString = strtran(lcString, chr(10), ' ') - lcString = strtran(lcString, chr(9), ' ') - return lcString - endproc + ENDPROC + + PROCEDURE Encode + LPARAMETERS tcString + LOCAL lcString + lcString = STRTRAN(tcString, '&', '&') + lcString = STRTRAN(lcString, '>', '>') + lcString = STRTRAN(lcString, '<', '<') + lcString = STRTRAN(lcString, '"', '"') + lcString = STRTRAN(lcString, "'", ''') + lcString = STRTRAN(lcString, '/', '/') + lcString = STRTRAN(lcString, CHR(13), ' ') + lcString = STRTRAN(lcString, CHR(10), ' ') + lcString = STRTRAN(lcString, CHR(9), ' ') + RETURN lcString + ENDPROC ENDDEFINE @@ -16633,14 +16645,14 @@ DEFINE CLASS CL_MENU_COL_BASE AS CL_COL_BASE THROW FINALLY - IF toReg.ObjType = 2 + IF toReg.ObjType = 2 lnLastKey = toCol_LastLevelName.GETKEY(toReg.LevelName) IF lnLastKey > 0 toCol_LastLevelName.REMOVE(lnLastKey) ENDIF ENDIF STORE NULL TO loBarPop, loOption - RELEASE I, lcLevelName, lnLastKey, llHayDatos, loReg, loBarPop, loOption + RELEASE I, lcLevelName, lnLastKey, llHayDatos, loReg, loBarPop, loOption ENDTRY RETURN llRetorno From d84a89e2c52c620b6f945b50b4eb1e063e9c9aea Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Tue, 15 Jul 2014 20:45:30 +0200 Subject: [PATCH 3/7] Changeset: 362 fdbozzo - 15/07/2014 20:43:09: --- foxbin2prg.prg | 2 ++ 1 file changed, 2 insertions(+) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 5caa3c1..917d7f0 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -15400,7 +15400,9 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE *-- Fields loFields = THIS._Fields + *** DH 06/02/2014: passed variables to toText + *lcText = lcText + loFields.toText() lcText = lcText + loFields.toText(@laFields, @lnFieldCount) *-- Indexes From 78abb0380fd37c086ac75188c5d7ed1af77487d8 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Tue, 15 Jul 2014 21:17:18 +0200 Subject: [PATCH 4/7] Changeset: 364 fdbozzo - 15/07/2014 20:47:01: --- foxbin2prg.prg | 269 ++++++++++++++++++++++++++----------------------- 1 file changed, 142 insertions(+), 127 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 0a48338..03871c9 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -1065,45 +1065,45 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM , loEx as Exception TRY - WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' STORE 0 TO lnKey tcRecompile = EVL(tcRecompile,'1') lcConfigFile = .c_Foxbin2prg_ConfigFile tc_InputFile = EVL(tc_InputFile, .c_InputFile) - + IF .l_AllowMultiConfig AND .l_Main_CFG_Loaded IF EMPTY(tc_InputFile) ERROR C_FILE_NOT_FOUND_LOC + ': .c_InputFile = "' + tc_InputFile + '"' ENDIF lcConfigFile = FORCEPATH( 'foxbin2prg.cfg', JUSTPATH(tc_InputFile) ) ENDIF - + lo_Configuration = .o_Configuration .n_CFG_Actual = 0 .l_CFG_CachedAccess = .F. lc_CFG_Path = UPPER( JUSTPATH( lcConfigFile ) ) - + IF .l_Main_CFG_Loaded AND lo_Configuration.Count > 0 .n_CFG_Actual = lo_Configuration.GetKey( lc_CFG_Path ) .l_CFG_CachedAccess = (.n_CFG_Actual > 0) ENDIF *IF NOT .l_ConfigEvaluated - lo_CFG = THIS - - IF .n_CFG_Actual = 0 THEN - llExisteConfig = FILE( lcConfigFile ) - ENDIF + lo_CFG = THIS - IF llExisteConfig AND .n_CFG_Actual = 0 + IF .n_CFG_Actual = 0 THEN + llExisteConfig = FILE( lcConfigFile ) + ENDIF + + IF llExisteConfig AND .n_CFG_Actual = 0 .writeLog( C_CONFIGFILE_LOC + ' ' + lcConfigFile ) - IF .l_AllowMultiConfig AND .l_ConfigEvaluated AND .l_Main_CFG_Loaded - lo_CFG = CREATEOBJECT('CL_CFG') + IF .l_AllowMultiConfig AND .l_ConfigEvaluated AND .l_Main_CFG_Loaded + lo_CFG = CREATEOBJECT('CL_CFG') lo_Configuration.Add( lo_CFG, lc_CFG_Path ) - ELSE + ELSE lo_Configuration.Add( NULL, lc_CFG_Path ) - ENDIF + ENDIF FOR I = 1 TO ALINES( laConfig, FILETOSTR( lcConfigFile ), 1+4 ) laConfig(I) = LOWER( laConfig(I) ) @@ -1162,84 +1162,84 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM 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) ) - 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) ) + 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) ) - 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) ) + 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) ) + lo_CFG.PJX_Conversion_Support = INT( VAL( lcValue ) ) + .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) ) + lo_CFG.VCX_Conversion_Support = INT( VAL( lcValue ) ) + .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) ) + lo_CFG.SCX_Conversion_Support = INT( VAL( lcValue ) ) + .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) ) + lo_CFG.FRX_Conversion_Support = INT( VAL( lcValue ) ) + .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) ) + lo_CFG.LBX_Conversion_Support = INT( VAL( lcValue ) ) + .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) ) + lo_CFG.MNX_Conversion_Support = INT( VAL( lcValue ) ) + .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' ) THEN - lo_CFG.DBF_Conversion_Support = INT( VAL( lcValue ) ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > DBF_Conversion_Support: ' + TRANSFORM(lo_CFG.DBF_Conversion_Support) ) + 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) ) 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) ) + lo_CFG.DBC_Conversion_Support = INT( VAL( lcValue ) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > DBC_Conversion_Support: ' + TRANSFORM(lo_CFG.DBC_Conversion_Support) ) ENDIF ENDCASE @@ -1247,80 +1247,80 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM IF .l_AllowMultiConfig AND .l_Main_CFG_Loaded AND lo_Configuration.Count > 0 .n_CFG_Actual = lo_Configuration.Count &&lo_Configuration.GetKey( UPPER( JUSTPATH( lcConfigFile ) ) ) - ENDIF - ENDIF && llExisteConfig + ENDIF + ENDIF && llExisteConfig IF INLIST( TRANSFORM(tcDontShowProgress), '0', '1' ) THEN - lo_CFG.l_ShowProgress = NOT (TRANSFORM(tcDontShowProgress)=='1') + lo_CFG.l_ShowProgress = NOT (TRANSFORM(tcDontShowProgress)=='1') ENDIF IF NOT EMPTY(tcDontShowErrors) - lo_CFG.l_ShowErrors = NOT (TRANSFORM(tcDontShowErrors) == '1') + lo_CFG.l_ShowErrors = NOT (TRANSFORM(tcDontShowErrors) == '1') + ENDIF + IF NOT .l_Main_CFG_Loaded + lo_CFG.l_Recompile = (EMPTY(tcRecompile) OR TRANSFORM(tcRecompile) == '1' OR DIRECTORY(tcRecompile)) ENDIF - IF NOT .l_Main_CFG_Loaded - lo_CFG.l_Recompile = (EMPTY(tcRecompile) OR TRANSFORM(tcRecompile) == '1' OR DIRECTORY(tcRecompile)) - ENDIF IF INLIST( TRANSFORM(tcNoTimestamps), '0', '1' ) THEN - lo_CFG.l_NoTimestamps = NOT (TRANSFORM(tcNoTimestamps) == '0') + lo_CFG.l_NoTimestamps = NOT (TRANSFORM(tcNoTimestamps) == '0') ENDIF IF INLIST( TRANSFORM(tcClearUniqueID), '0', '1' ) THEN - lo_CFG.l_ClearUniqueID = NOT (TRANSFORM(tcClearUniqueID) == '0') + lo_CFG.l_ClearUniqueID = NOT (TRANSFORM(tcClearUniqueID) == '0') ENDIF IF INLIST( TRANSFORM(tcDebug), '0', '1' ) THEN - lo_CFG.l_Debug = (TRANSFORM(tcDebug)=='1') + lo_CFG.l_Debug = (TRANSFORM(tcDebug)=='1') ENDIF - tcExtraBackupLevels = EVL( tcExtraBackupLevels, TRANSFORM( lo_CFG.n_ExtraBackupLevels ) ) - IF ISDIGIT(tcExtraBackupLevels) + tcExtraBackupLevels = EVL( tcExtraBackupLevels, TRANSFORM( lo_CFG.n_ExtraBackupLevels ) ) + IF ISDIGIT(tcExtraBackupLevels) lo_CFG.n_ExtraBackupLevels = INT( VAL( TRANSFORM(tcExtraBackupLevels) ) ) - ENDIF + ENDIF IF INLIST( TRANSFORM(tcOptimizeByFilestamp), '0', '1' ) THEN - lo_CFG.l_OptimizeByFilestamp = NOT (TRANSFORM(tcOptimizeByFilestamp) == '0') + lo_CFG.l_OptimizeByFilestamp = NOT (TRANSFORM(tcOptimizeByFilestamp) == '0') ENDIF .writeLog( '---' ) - .writeLog( '> l_ShowProgress: ' + TRANSFORM(.l_ShowProgress) ) - .writeLog( '> l_ShowErrors: ' + TRANSFORM(.l_ShowErrors) ) - .writeLog( '> l_Recompile: ' + TRANSFORM(.l_Recompile) + ' (' + EVL(tcRecompile,'') + ')' ) - .writeLog( '> l_NoTimestamps: ' + TRANSFORM(.l_NoTimestamps) ) - .writeLog( '> l_ClearUniqueID: ' + TRANSFORM(.l_ClearUniqueID) ) - .writeLog( '> l_Debug: ' + TRANSFORM(.l_Debug) ) - .writeLog( '> n_ExtraBackupLevels: ' + TRANSFORM(.n_ExtraBackupLevels) ) - .writeLog( '> l_OptimizeByFilestamp: ' + TRANSFORM(.l_OptimizeByFilestamp) ) - .writeLog( '> l_DropNullCharsFromCode: ' + TRANSFORM(.l_DropNullCharsFromCode) ) + .writeLog( '> l_ShowProgress: ' + TRANSFORM(.l_ShowProgress) ) + .writeLog( '> l_ShowErrors: ' + TRANSFORM(.l_ShowErrors) ) + .writeLog( '> l_Recompile: ' + TRANSFORM(.l_Recompile) + ' (' + EVL(tcRecompile,'') + ')' ) + .writeLog( '> l_NoTimestamps: ' + TRANSFORM(.l_NoTimestamps) ) + .writeLog( '> l_ClearUniqueID: ' + TRANSFORM(.l_ClearUniqueID) ) + .writeLog( '> l_Debug: ' + TRANSFORM(.l_Debug) ) + .writeLog( '> n_ExtraBackupLevels: ' + TRANSFORM(.n_ExtraBackupLevels) ) + .writeLog( '> l_OptimizeByFilestamp: ' + TRANSFORM(.l_OptimizeByFilestamp) ) + .writeLog( '> l_DropNullCharsFromCode: ' + TRANSFORM(.l_DropNullCharsFromCode) ) - lo_CFG = NULL - RELEASE lo_CFG - - *-- Si existe una configuración y es NULL, se usa la predeterminada - *IF .l_AllowMultiConfig AND .n_CFG_Actual > 0 AND ISNULL( .o_Configuration( .n_CFG_Actual ) ) THEN - IF .n_CFG_Actual > 0 AND ISNULL( .o_Configuration( .n_CFG_Actual ) ) THEN - .n_CFG_Actual = 0 - ENDIF + lo_CFG = NULL + RELEASE lo_CFG - .writeLog( '> l_CFG_CachedAccess: ' + TRANSFORM(.l_CFG_CachedAccess) + ' ( InputFile=' + tc_InputFile + ', CFG=' + FORCEPATH( 'foxbin2prg.cfg', lc_CFG_Path ) + ' )' ) + *-- Si existe una configuración y es NULL, se usa la predeterminada + *IF .l_AllowMultiConfig AND .n_CFG_Actual > 0 AND ISNULL( .o_Configuration( .n_CFG_Actual ) ) THEN + IF .n_CFG_Actual > 0 AND ISNULL( .o_Configuration( .n_CFG_Actual ) ) THEN + .n_CFG_Actual = 0 + ENDIF - IF NOT llExisteConfig OR .n_CFG_Actual = 0 THEN - .l_CFG_CachedAccess = .T. && Es acceso cacheado porque usa config.por defecto sin archivo CFG - ENDIF + .writeLog( '> l_CFG_CachedAccess: ' + TRANSFORM(.l_CFG_CachedAccess) + ' ( InputFile=' + tc_InputFile + ', CFG=' + FORCEPATH( 'foxbin2prg.cfg', lc_CFG_Path ) + ' )' ) - IF NOT .l_Main_CFG_Loaded THEN - .l_Main_CFG_Loaded = .T. - ENDIF + IF NOT llExisteConfig OR .n_CFG_Actual = 0 THEN + .l_CFG_CachedAccess = .T. && Es acceso cacheado porque usa config.por defecto sin archivo CFG + ENDIF + + IF NOT .l_Main_CFG_Loaded THEN + .l_Main_CFG_Loaded = .T. + ENDIF .l_ConfigEvaluated = .T. *ENDIF && .l_ConfigEvaluated - ENDWITH && THIS - + ENDWITH && THIS + CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 SET STEP ON ENDIF THROW - + FINALLY STORE NULL TO lo_Configuration, lo_CFG RELEASE lo_Configuration, lo_CFG - + ENDTRY RETURN @@ -1370,14 +1370,14 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM LPARAMETERS tcExt LOCAL llTieneSoporte WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' - llTieneSoporte = ICASE( tcExt == .c_PJ2, .PJX_Conversion_Support >= 2 ; - , tcExt == .c_VC2, .VCX_Conversion_Support >= 2 ; - , tcExt == .c_SC2, .SCX_Conversion_Support >= 2 ; - , tcExt == .c_FR2, .FRX_Conversion_Support >= 2 ; - , tcExt == .c_LB2, .LBX_Conversion_Support >= 2 ; - , tcExt == .c_MN2, .MNX_Conversion_Support >= 2 ; - , tcExt == .c_DB2, .DBF_Conversion_Support >= 2 ; - , tcExt == .c_DC2, .DBC_Conversion_Support >= 2 ; + llTieneSoporte = ICASE( tcExt == .c_PJ2, .PJX_Conversion_Support = 2 ; + , tcExt == .c_VC2, .VCX_Conversion_Support = 2 ; + , tcExt == .c_SC2, .SCX_Conversion_Support = 2 ; + , tcExt == .c_FR2, .FRX_Conversion_Support = 2 ; + , tcExt == .c_LB2, .LBX_Conversion_Support = 2 ; + , tcExt == .c_MN2, .MNX_Conversion_Support = 2 ; + , tcExt == .c_DB2, .DBF_Conversion_Support = 2 ; + , tcExt == .c_DC2, .DBC_Conversion_Support = 2 ; , .F. ) ENDWITH && THIS RETURN llTieneSoporte @@ -1463,8 +1463,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- ARCHIVO DE CONFIGURACIÓN PRINCIPAL IF NOT THIS.l_ConfigEvaluated THEN - .EvaluarConfiguracion( @tcDontShowProgress, @tcDontShowErrors, @tcNoTimestamps, @tcDebug, @tcRecompile, @tcBackupLevels ; - , @tcClearUniqueID, @tcOptimizeByFilestamp ) + .EvaluarConfiguracion( @tcDontShowProgress, @tcDontShowErrors, @tcNoTimestamps, @tcDebug, @tcRecompile, @tcBackupLevels ; + , @tcClearUniqueID, @tcOptimizeByFilestamp ) ENDIF IF .l_ShowProgress @@ -1853,7 +1853,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_LB2 ), '+N' ) CASE lcExtension = 'DBF' - IF NOT INLIST(.DBF_Conversion_Support, 1, 2) + IF NOT INLIST(.DBF_Conversion_Support, 1, 2, 4) ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, .c_DB2 ) @@ -1974,9 +1974,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .t_OutputFile_TimeStamp = DATETIME( YEAR(laFiles(I,3)), MONTH(laFiles(I,3)), DAY(laFiles(I,3)) ; , VAL(LEFT(laFiles(I,4),2)), VAL(SUBSTR(laFiles(I,4),4,2)), VAL(RIGHT(laFiles(I,4),2)) ) ENDIF - + lcExtA = UPPER(JUSTEXT(.c_OutputFile)) - + DO CASE CASE INLIST(lcExtA, 'SCX', 'VCX', 'MNX', 'FRX', 'LBX') lcExtB = ICASE(lcExtA = 'SCX', 'SCT' ; @@ -1988,12 +1988,12 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM IF I > 0 THEN ltFilestamp = DATETIME( YEAR(laFiles(I,3)), MONTH(laFiles(I,3)), DAY(laFiles(I,3)) ; , VAL(LEFT(laFiles(I,4),2)), VAL(SUBSTR(laFiles(I,4),4,2)), VAL(RIGHT(laFiles(I,4),2)) ) - ENDIF + ENDIF ENDCASE - + .t_OutputFile_TimeStamp = MAX( .t_OutputFile_TimeStamp, ltFilestamp ) - ENDIF + ENDIF ENDIF IF NOT .l_OptimizeByFilestamp OR .t_InputFile_TimeStamp >= .t_OutputFile_TimeStamp THEN @@ -8572,7 +8572,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base DIMENSION laLine(1), taMethods(1,3) STORE '' TO laLine, taMethods, taCode STORE 0 TO tnMethodCount, lnTextNodes - + lnLineCount = ALINES(laLine, m.tcMethod) && NO aplicar nungún formato ni limpieza, que es el CÓDIGO FUENTE *-- Delete beginning empty lines before first "PROCEDURE", that is the first not empty line. @@ -11149,7 +11149,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg *-- Header loTable = CREATEOBJECT('CL_DBF_TABLE') - C_FB2PRG_CODE = C_FB2PRG_CODE + loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, .c_InputFile, lc_FileTypeDesc ) + C_FB2PRG_CODE = C_FB2PRG_CODE + loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, .c_InputFile, lc_FileTypeDesc, @toFoxBin2Prg ) *-- Genero el DB2 @@ -12241,13 +12241,13 @@ DEFINE CLASS CL_DBC_COL_BASE AS CL_COL_BASE * tnParentID (v! IN ) ID del objeto Padre *--------------------------------------------------------------------------------------------------- LPARAMETERS tc_OutputFile, tnLastID, tnParentID - LOCAL loObject - loObject = NULL + LOCAL loObject + loObject = NULL FOR EACH loObject IN THIS FOXOBJECT - loObject.updateDBC( tc_OutputFile, @tnLastID, tnParentID ) + loObject.updateDBC( tc_OutputFile, @tnLastID, tnParentID ) loObject = NULL - ENDFOR + ENDFOR RETURN ENDPROC @@ -15889,17 +15889,23 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE * tc_DBC_Name (v! IN ) Nombre del DBC (si tiene) * tc_InputFile (v! IN ) Nombre del archivo de salida * tc_FileTypeDesc (v! IN ) Descripción del Tipo de archivo + * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg *--------------------------------------------------------------------------------------------------- - LPARAMETERS tn_HexFileType, tl_FileHasCDX, tl_FileHasMemo, tl_FileIsDBC, tc_DBC_Name, tc_InputFile, tc_FileTypeDesc + LPARAMETERS tn_HexFileType, tl_FileHasCDX, tl_FileHasMemo, tl_FileIsDBC, tc_DBC_Name, tc_InputFile, tc_FileTypeDesc, toFoxBin2Prg + + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF TRY LOCAL lcText, 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' *** DH 06/02/2014: created variables LOCAL laFields[1], lnFieldCount - STORE NULL TO loIndexes, loFields + STORE NULL TO loIndexes, loFields, loRecords lcText = '' TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 @@ -15916,16 +15922,25 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE *-- Fields loFields = THIS._Fields - *** DH 06/02/2014: passed variables to toText - *lcText = lcText + loFields.toText() - lcText = lcText + loFields.toText(@laFields, @lnFieldCount) + DO CASE + CASE INLIST(toFoxBin2Prg.DBF_Conversion_Support, 1, 2) && BIN2PRG o PRG2BIN + lcText = lcText + loFields.toText() - *-- Indexes - loIndexes = THIS._Indexes - lcText = lcText + loIndexes.toText( '', '', tc_InputFile ) + CASE toFoxBin2Prg.DBF_Conversion_Support = 4 && BIN2PRG (DATA EXPORT FOR DIFF) + *** DH 06/02/2014: passed variables to toText + lcText = lcText + loFields.toText(@laFields, @lnFieldCount) - *** DH 06/02/2014: added _Records - lcText = lcText + THIS._Records.toText(@laFields, lnFieldCount) + *-- Indexes + loIndexes = THIS._Indexes + lcText = lcText + loIndexes.toText( '', '', tc_InputFile ) + + *** DH 06/02/2014: added _Records + loRecords = THIS._Records + lcText = lcText + loRecords.toText(@laFields, lnFieldCount) + + OTHERWISE + *-- Ignorar soporte no contemplado + ENDCASE TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <> @@ -15941,8 +15956,8 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE THROW FINALLY - STORE NULL TO loIndexes, loFields - RELEASE loFields, loIndexes + STORE NULL TO loIndexes, loFields, loRecords + RELEASE loFields, loIndexes, loRecords ENDTRY RETURN lcText @@ -16519,8 +16534,8 @@ 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 (@? OUT) Array de información de campos - * tnField_Count (@? OUT) Cantidad de campos + * taFields (@! IN ) Array de información de campos + * tnField_Count (v! IN ) Cantidad de campos *--------------------------------------------------------------------------------------------------- LPARAMETERS taFields, tnField_Count @@ -16592,8 +16607,8 @@ DEFINE CLASS CL_DBF_RECORD AS CL_CUS_BASE PROCEDURE toText *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) - * taFields (@? OUT) Array de información de campos - * tnField_Count (@? OUT) Cantidad de campos + * taFields (@! IN ) Array de información de campos + * tnField_Count (@! IN ) Cantidad de campos *--------------------------------------------------------------------------------------------------- LPARAMETERS taFields, tnField_Count @@ -17162,14 +17177,14 @@ DEFINE CLASS CL_MENU_COL_BASE AS CL_COL_BASE THROW FINALLY - IF toReg.ObjType = 2 + IF toReg.ObjType = 2 lnLastKey = toCol_LastLevelName.GETKEY(toReg.LevelName) IF lnLastKey > 0 toCol_LastLevelName.REMOVE(lnLastKey) ENDIF ENDIF STORE NULL TO loBarPop, loOption - RELEASE I, lcLevelName, lnLastKey, llHayDatos, loReg, loBarPop, loOption + RELEASE I, lcLevelName, lnLastKey, llHayDatos, loReg, loBarPop, loOption ENDTRY RETURN llRetorno From a9ffe632a8c3232684bb7f7d4a467087931e62c2 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Tue, 15 Jul 2014 21:31:51 +0200 Subject: [PATCH 5/7] Changeset: 365 fdbozzo - 15/07/2014 21:17:20: --- foxbin2prg.cfg | 2 +- foxbin2prg.exe | Bin 437042 -> 439886 bytes foxbin2prg.pj2 | 4 ++-- foxbin2prg.pjt | Bin 590989 -> 593843 bytes foxbin2prg.pjx | Bin 8993 -> 8993 bytes foxbin2prg.prg | 2 ++ 6 files changed, 5 insertions(+), 3 deletions(-) diff --git a/foxbin2prg.cfg b/foxbin2prg.cfg index 6af1247..0acd373 100644 --- a/foxbin2prg.cfg +++ b/foxbin2prg.cfg @@ -17,7 +17,7 @@ * OptimizeByFilestamp: 0 && Optimize file regeneration depending on file timestamp / Optimizar la regeneración de archivos dependiendo del timestamp de archivo * AllowMultiConfig: 1 && 1=Allow CFG files per directory. if no CFG found, then use Main CFG. 0=Only use Main CFG * DropNullCharsFromCode: 1 && 1=Drop NULL chars from source code / 0=Leave Nulls in code, if any -* XXX_Conversion_Support: N && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge) +* XXX_Conversion_Support: N && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge), 4=Generate TXT with DATA for DIFF (DBF only) * PJX_Conversion_Support: 2 && Default value * VCX_Conversion_Support: 2 && Default value * SCX_Conversion_Support: 2 && Default value diff --git a/foxbin2prg.exe b/foxbin2prg.exe index feaaa036150aa60174479ac7270f65bcc1373026..ad11a4c34f653e8cff4fe4d51dbe1274159fd229 100644 GIT binary patch delta 16894 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 delta 14363 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 diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index 77c6c8f4890ead6d7e264d244db1fcc3c71d66c7..704b77ec625611c973c123669054f68b0b86d22e 100644 GIT binary patch delta 15902 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 delta 13559 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 D@t>x0 diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx index 7d71dd03bd1f476d83ec5029bf06ce44be15f1e9..185998c93cfe6d26cd9c71ffa64a4c30c732a48d 100644 GIT binary patch delta 621 zcmX|+OK1~u5XNV^c{HZmrb*fuw#lxAV4)UvlWelpLwnE&MPd#;>Y?C+3PlQfC?v!` zq7o^j@+lQWFoK|mA|j|1sk9eCvt|o1PxaGU<%SI-XUMYC>A$1f0fk&W3K>?`bh7y5KE$&a@d)+l zuhk2~wj2|+Py%6Zfmg8CD>#M^k^>lR7Q7Ejl9L$o3BHQ2l8-RHPH-K|k`WyC3m(Kb z$q`Jn2rlEhh!;jVWiSH)t124P(e8;@1{d#Wk_l?TvmFdo(q?G3R;KY zF`SpoL+=#ahgzplTi&kuryR>_xC}=M{27-bg70JFdcl`*Me;a$qk{KbpNT50R$deB zTqZJ-$+ROw>3E|hz?$Vg!AyB%wNlfHf*aZq_wH9jx3Hy4H0_$eTvyTEzd-Z_1F@3( z=pxZw%*RUVriVn~3F((|GB(D&I_i1?)wsnon2!tf<71)&g2^zlrU~I+-9xuLl_x~o z_v4;k^qhP~bSH-$M$r?0PPF7;QMQ9Gh^!72HWXVgz9hGhK+8Gq|&G@1D5bL&m Ur_ai9(loP;XX<(olig?j0QT~^^#A|> delta 621 zcmXYtUr1AN6vxlm-F7p*{+V+oSG`wb_z=;(+wL}vD9YAL#4z7_@;LcN5bk3|+0LD=6XiJ~lnpt3qn&%@_?IEQoio>R`0Gk&L54^H{- z`*p9|^J1|C=KL#LS93R=qV>r1+jhp5@DhpDQh1c;SC>Y1A{kG{@i}mWXD|>{#=_sV z30tNelpCW6>semGpsu(Bi^4rPyg~6WJ_*M$Ql)qrUxhD_+o<>lmW3vcRx9qsPvIa& zYZRZvZ{ZCT48?Q!CtQT8Ra^tDPVqLJ5*~nFuXqG!>Xmkm8Ad}mA#UCvdSYir&Vow%fnZ_e^J+-z3-6kVGXPvW-lEVi^L9-6+>qOmddj_BYr zkuBd(izy55%_!J(15;wE4=J^LSw3EztvPZ&kjlZ6%6MI(aaSlJDyH@$mtfAtSCzDE>B^$T^V1V6HT0uzMXO$sOq&oEH^mzk|;NX zhgLp#;T6%xeb{g3gPjXRO+A>GwD&d9p$M`a`Py4=h>q#9#ZAP#B(hcy{+Ly0>-4Ig T-Ia38aZ;6ImaGuYcV7Ar-EX+Y diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 03871c9..584e1ad 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -93,6 +93,7 @@ * 06/07/2014 FDBOZZO v1.19.26 Mejora: Cuando se convierten binarios a texto, los CHR(0) pasan también, pudiendo provocar falsa detección como binario. Se agrega opción para quitar los NULLs. (Matt Slay) * 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 v1.19.27 Mejora: Agregado soporte para exportar datos para DIFF (no para importar) (Doug Hennig/FDBOZZO) * * *--------------------------------------------------------------------------------------------------- @@ -129,6 +130,7 @@ * 17/06/2014 Pedro Gutiérrez M. MEJORA v1.19.24: Si durante la generación de binarios o de textos se producen errores, mostrar un mensaje avisando de ello (Agregado en v1.19.25) * 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) * * *--------------------------------------------------------------------------------------------------- From 4f69cf19b3625b5d49f519a71a9515d1d24c4f46 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Tue, 15 Jul 2014 22:20:35 +0200 Subject: [PATCH 6/7] Changeset: 367 fdbozzo - 15/07/2014 21:50:03: --- foxbin2prg.exe | Bin 439886 -> 440221 bytes foxbin2prg.prg | 41 +++++++++++++++++++++++++++-------------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index ad11a4c34f653e8cff4fe4d51dbe1274159fd229..459d3d243629728ed7d793554be128aa79475ddc 100644 GIT binary patch delta 9865 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 delta 9586 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 * *--------------------------------------------------------------------------------------------------- @@ -15900,7 +15900,7 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE #ENDIF TRY - LOCAL lcText, loEx AS EXCEPTION ; + LOCAL lcText, lcTableCFG, lcIndexKey, lcIndexFile, 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' @@ -15924,25 +15924,34 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE *-- Fields loFields = THIS._Fields - DO CASE - CASE INLIST(toFoxBin2Prg.DBF_Conversion_Support, 1, 2) && BIN2PRG o PRG2BIN - lcText = lcText + loFields.toText() + *** DH 06/02/2014: passed variables to toText + lcText = lcText + loFields.toText(@laFields, @lnFieldCount) - CASE toFoxBin2Prg.DBF_Conversion_Support = 4 && BIN2PRG (DATA EXPORT FOR DIFF) - *** DH 06/02/2014: passed variables to toText - lcText = lcText + loFields.toText(@laFields, @lnFieldCount) + *-- Indexes + loIndexes = THIS._Indexes + lcText = lcText + loIndexes.toText( '', '', tc_InputFile ) - *-- Indexes - loIndexes = THIS._Indexes - 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 + 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) + lcIndexFile = FORCEEXT(tc_InputFile,'IDX') + INDEX ON &lcIndexKey. TO (lcIndexFile) COMPACT + toFoxBin2Prg.writeLog(' > Using Index order key: ' + lcIndexKey) + ENDIF + ENDIF + *** DH 06/02/2014: added _Records loRecords = THIS._Records lcText = lcText + loRecords.toText(@laFields, lnFieldCount) - OTHERWISE - *-- Ignorar soporte no contemplado - ENDCASE + ENDIF TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <> @@ -15960,6 +15969,10 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE FINALLY STORE NULL TO loIndexes, loFields, loRecords RELEASE loFields, loIndexes, loRecords + IF NOT EMPTY(lcIndexFile) AND FILE(lcIndexFile) + SET INDEX TO + ERASE (lcIndexFile) + ENDIF ENDTRY RETURN lcText From 46b0a17ad194ff8a25a2ee2167dfeb3760b1de38 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 18 Jul 2014 20:55:07 +0200 Subject: [PATCH 7/7] Changeset: 370 fdbozzo - 18/07/2014 20:46:26: --- FoxBin2PRGVersionFile.txt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 9900418..331619a 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -2,8 +2,8 @@ Lparameters toUpdateInfo Local lcNote With toUpdateInfo - .VersionNumber = 'v1.19.26' - .VersionDate = Date(2014,07,06) + .VersionNumber = 'v1.19.27' + .VersionDate = Date(2014,07,18) .SourceFileUrl = 'http://vfpxrepository.com/dl/thorupdate/Projects/FoxBin2Prg/FoxBin2Prg.Zip' .Link = 'http://vfpx.codeplex.com/wikipage?title=FoxBin2PRG' @@ -17,6 +17,10 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg Change History ------------------------------------------------------------- + +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) + 2014/07/06 v1.19.26 - Feature: Drop asterisks between "ENDPROC" and "PROCEDURE", analyzed in that exact order, to regenerate binary without errors. (Daniel Sánchez) - Feature: Add the l_DropNullCharsFromCode configuration option, enabled by default, to allow droping NULLs from source code. (Matt Slay)