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