From f69cdd73c9d9d3e711002ee630cd58f41155d65e Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Mon, 14 Jul 2014 18:20:20 +0200 Subject: [PATCH 1/5] 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/5] =?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/5] 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/5] 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/5] 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) * * *---------------------------------------------------------------------------------------------------