diff --git a/foxbin2prg.prg b/foxbin2prg.prg
index 5128ca6..f179cff 100644
--- a/foxbin2prg.prg
+++ b/foxbin2prg.prg
@@ -254,6 +254,9 @@
* 09/03/2021 LScheffler v1.19.59 Bug Fix: RedirectClassType = 2, UseClassPerFile = 2 failed.
* 09/03/2021 LScheffler v1.19.59 Enhancement: Added option to create config file template based on current values of a directory
* 09/03/2021 LScheffler v1.19.59 Enhancement: Log settings object handed to execute (Debug > 0)
+
+* xx/xx/2021 LScheffler v1.19.xx Enhancement: #DEFINES of index handling in wrong order (LEN(X) before X was defined)
+* xx/xx/2021 LScheffler v1.19.xx Enhancement: Handling of additional non structural index per DBF in Bin2Text and Text2Bin
*
*
*---------------------------------------------------------------------------------------------------
@@ -532,12 +535,23 @@ Lparameters tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDeb
#Define C_DBF_HEAD_F '/>'
#Define C_LEN_DBF_HEAD_I Len(C_DBF_HEAD_I)
#Define C_LEN_DBF_HEAD_F Len(C_DBF_HEAD_F)
-#Define C_CDX_I ''
-#Define C_CDX_F ''
-#Define C_LEN_CDX_I Len(C_CDX_I)
-#Define C_LEN_CDX_F Len(C_CDX_F)
-#Define C_LEN_INDEX_I Len(C_INDEX_I)
-#Define C_LEN_INDEX_F Len(C_INDEX_F)
+#Define C_CDXIDX_I '' && SF written, but not read
+#Define C_CDXIDX_F '' && SF written, but not read
+#Define C_CDX_I '' && SF written, but not read
+#DEFINE C_CDX_Type_ 'Type="'
+#DEFINE C_CDX_Type_Struct 'Structural'
+#DEFINE C_CDX_Type_Compound 'Compound'
+#DEFINE C_CDX_Type_IDX 'Standalone'
+#DEFINE C_CDX_File_ 'File="'
+#Define C_INDEXES_I '' && SF Read / write, no len, used w/o äDEFINE too, len
+#Define C_INDEXES_F '' && SF Read / write, no len, used w/o äDEFINE too, len
+#Define C_INDEX_I '' && SF used for read, not write?
+#Define C_INDEX_F '' && SF used for read, not write?
+*#Define C_LEN_CDX_I Len(C_CDX_I) && SF not used; deactivated
+*#Define C_LEN_CDX_F Len(C_CDX_F) && SF not used; deactivated
+*#Define C_LEN_INDEX_I Len(C_INDEX_I) && SF not used (possibly do to errornous definition of #DEFINE); deactivated
+*#Define C_LEN_INDEX_F Len(C_INDEX_F) && SF not used (possibly do to errornous definition of #DEFINE); deactivated
#Define C_DATABASE_I ''
#Define C_DATABASE_F ''
#Define C_STORED_PROC_I ''
#Define C_RELATIONS_I ''
#Define C_RELATIONS_F ''
-#Define C_INDEX_I ''
-#Define C_INDEX_F ''
-#Define C_INDEXES_I ''
-#Define C_INDEXES_F ''
#Define C_PROC_CODE_I '*'
#Define C_PROC_CODE_F '*'
#Define C_SETUPCODE_I '*'
@@ -882,6 +892,7 @@ Define Class c_foxbin2prg As Session
*!* ;&& SF -> String to long
+*!* + [] ;
*!* + [] ;
*!* + [] ;
*!* + [] ;
@@ -2904,7 +2915,7 @@ Define Class c_foxbin2prg As Session
Local to_out_DBF_CFG As CL_DBF_CFG Of 'FOXBIN2PRG.PRG'
#Endif
- Local lcTableCFG, lnFileCount, laDirFile(1,5), I, lcConfigItem
+ Local lcTableCFG, lnFileCount, laDirFile(1,5), I, lcConfigItem, lcValue
lcTableCFG = tc_InputFile + '.CFG'
lnFileCount = Adir(laDirFile, lcTableCFG)
@@ -2923,6 +2934,12 @@ Define Class c_foxbin2prg As Session
Case Inlist( Left( lcConfigItem, 1 ), '*', '#', '/', "'" )
Loop
+ Case Left( lcConfigItem, 23 ) == Lower('DBF_Conversion_Support:')
+ to_out_DBF_CFG.DBF_Conversion_Support = Int( Val( Substr( laConfig(m.I), 24 ) ) )
+ If tlGenerateLog Then
+ This.writeLog(' ' + Justfname(lcTableCFG) + ' > DBF_Conversion_Support: ' + Transform(to_out_DBF_CFG.DBF_Conversion_Support) )
+ Endif
+
Case Left( lcConfigItem, 21 ) == Lower('DBF_Conversion_Order:')
to_out_DBF_CFG.DBF_Conversion_Order = Alltrim( Substr( laConfig(m.I), 22 ) )
If tlGenerateLog Then
@@ -2935,33 +2952,41 @@ Define Class c_foxbin2prg As Session
This.writeLog(' ' + Justfname(lcTableCFG) + ' > DBF_Conversion_Condition: ' + to_out_DBF_CFG.DBF_Conversion_Condition )
Endif
- Case Left( lcConfigItem, 23 ) == Lower('DBF_Conversion_Support:')
- to_out_DBF_CFG.DBF_Conversion_Support = Int( Val( Substr( laConfig(m.I), 24 ) ) )
+*!* Changed by: Lutz Scheffler 18.03.2021
+*!* change date="{^2021-03-18,10:57:00}"
+* additional options controlling
+* - new operations of DBF, additional list of non structural index files
+ Case Left( lcConfigItem, 14 ) == Lower('DBF_IndexList:')
+ to_out_DBF_CFG.DBF_IndexList = Int( Val( Substr( laConfig(m.I), 15 ) ) )
If tlGenerateLog Then
- This.writeLog(' ' + Justfname(lcTableCFG) + ' > DBF_Conversion_Support: ' + Transform(to_out_DBF_CFG.DBF_Conversion_Support) )
+ This.writeLog(' ' + Justfname(lcTableCFG) + ' >DBF_IndexList: ' + Transform(to_out_DBF_CFG.DBF_IndexList) )
Endif
+*!* /Changed by: Lutz Scheffler 18.03.2021
*!* Changed by: Lutz Scheffler 21.02.2021
*!* change date="{^2021-02-21,10:57:00}"
* additional options controlling
* - new operations of DBF
*!* /Changed by: Lutz Scheffler 21.02.2021
- Case Left( lcConfigItem, 20 ) == Lower('DBF_BinChar_Base64:')
- If Inlist( laConfig(m.I), '0', '1' ) Then
- to_out_DBF_CFG.l_DBF_BinChar_Base64 = ( Transform(laConfig(m.I)) == '1' )
+ Case Left( lcConfigItem, 19 ) == Lower('DBF_BinChar_Base64:')
+ lcValue = Alltrim( Substr( laConfig(m.I), 20 ) )
+ If Inlist( m.lcValue, '0', '1' ) Then
+ to_out_DBF_CFG.l_DBF_BinChar_Base64 = ( Transform(m.lcValue ) == '1' )
If tlGenerateLog Then
This.writeLog(' ' + Justfname(lcTableCFG) + ' > DBF_BinChar_Base64: ' + Transform(to_out_DBF_CFG.l_DBF_BinChar_Base64) )
Endif
Endif
- Case Left( lcConfigItem, 20 ) == Lower('DBF_IncludeDeleted:')
- If Inlist( laConfig(m.I), '0', '1' ) Then
- to_out_DBF_CFG.l_DBF_IncludeDeleted = ( Transform(laConfig(m.I)) == '1' )
+ Case Left( lcConfigItem, 19 ) == Lower('DBF_IncludeDeleted:')
+ lcValue = Alltrim( Substr( laConfig(m.I), 20 ) )
+ If Inlist( m.lcValue, '0', '1' ) Then
+ to_out_DBF_CFG.l_DBF_IncludeDeleted = ( Transform( m.lcValue ) == '1' )
If tlGenerateLog Then
This.writeLog(' ' + Justfname(lcTableCFG) + ' > DBF_IncludeDeleted: ' + Transform(to_out_DBF_CFG.l_DBF_IncludeDeleted) )
Endif
Endif
*!* /Changed by: Lutz Scheffler 21.02.2021
+
Endcase
Endfor
@@ -3263,6 +3288,32 @@ Define Class c_foxbin2prg As Session
* EXIT
*ENDIF
+*!* *!* *!* Changed by: SF 15.3.2021
+*!* *!* *!*
+*!* *!* *!* Changed by: SF
+*!* *!* *!* add code to allow mutliple file input to define additional index per dbf
+*!* *!* *!* tc_InputFile holds multiple files delimited by chr(0)
+*!* *!* *!* first file is input file, followed by additional files
+*!* *!* *!* will always be processed to identify tc_InputFile, use only for DBF to PRG,
+*!* *!* *!* adding Nonstructural compound index (cdx) or Standalone index (.idx) files
+*!* *!* *!*
+*!* *!* *!*
+
+*!* *!* m.lnFileCount = ALINES(.a_InputFiles,tc_InputFile,5,0h00)
+*!* *!* * if string started wit 0h00 we set tc_InputFile to normal string
+*!* *!* tc_InputFile = ''+.a_InputFiles(1)
+*!* *!* IF m.lnFileCount = 1 THEN
+*!* *!* .a_InputFiles = ''
+*!* *!* ELSE &&m.lnFileCount = 1
+*!* *!* ADEL(.a_InputFiles,1)
+*!* *!* m.lnFileCount = m.lnFileCount-1
+*!* *!* DIMENSION;
+*!* *!* .a_InputFiles(m.lnFileCount)
+*!* *!* ENDIF &&m.lnFileCount = 1
+
+*!* *!* *!* /Changed by: SF 15.3.2021
+
+
*-- Reconocimiento de la clase indicada
*-- Ej: [c:\desa\test\library.vcx::classname]
If '::' $ tc_InputFile Then
@@ -3550,48 +3601,49 @@ Define Class c_foxbin2prg As Session
laOptions(33,1) = "*DBF_IncludeDeleted:" && 0,1 1=.t. 0=Do not include deleted records (default), 1=Include deleted records
laOptions(33,2) = ".l_DBF_IncludeDeleted"
laOptions(33,3) = 1
+
laOptions(34,1) = "*UseClassPerFile:" && n 0=One library tx2 file, 1=Multiple file.class.tx2 files, 2=Multiple file.baseclass.class.tx2 files
- laOptions(34,2) = ".n_UseClassPerFile"
- laOptions(34,3) = 0
- laOptions(35,1) = "*RedirectClassPerFileToMain:" && 0,1 1=.t. 0=Don't redirect to file.tx2, 1=Redirect to file.tx2 when selecting file.class.tx2
- laOptions(35,2) = ".l_RedirectClassPerFileToMain"
- laOptions(35,3) = 1
- laOptions(36,1) = "*RedirectClassType:" && 0,1,2 For classes created with UseClassPerFile>0 in the form file[.baseclass].class.tx2
- laOptions(36,2) = ".n_RedirectClassType"
- laOptions(36,3) = 0
- laOptions(37,1) = "*ClassPerFileCheck:" && 0,1 1=.t. 0=Don't check file.class.tx2 inclusion, 1=Check file.class.tx2 inclusion
- laOptions(37,2) = ".l_ClassPerFileCheck"
- laOptions(37,3) = 1
- laOptions(38,1) = "*extension: pj2=" && ext Text file to PJX
- laOptions(38,2) = ".c_pj2"
- laOptions(38,3) = 2
- laOptions(39,1) = "*extension: vc2=" && ext Text file to VCX
- laOptions(39,2) = ".c_vc2"
- laOptions(39,3) = 2
- laOptions(40,1) = "*extension: sc2=" && ext Text file to SCX
- laOptions(40,2) = ".c_sc2"
- laOptions(40,3) = 2
- laOptions(41,1) = "*extension: fr2=" && ext Text file to FRX
- laOptions(41,2) = ".c_fr2"
- laOptions(41,3) = 2
- laOptions(42,1) = "*extension: lb2=" && ext Text file to LBX
- laOptions(42,2) = ".c_lb2"
- laOptions(42,3) = 2
- laOptions(43,1) = "*extension: mn2=" && ext Text file to MNX
- laOptions(43,2) = ".c_mn2"
- laOptions(43,3) = 2
- laOptions(44,1) = "*extension: db2=" && ext Text file to DBF
- laOptions(44,2) = ".c_db2"
- laOptions(44,3) = 2
- laOptions(45,1) = "*extension: dc2=" && ext Text file to DBC
- laOptions(45,2) = ".c_dc2"
- laOptions(45,3) = 2
- laOptions(46,1) = "*extension: fk2=" && ext Text file to FKY
- laOptions(46,2) = ".c_fk2"
- laOptions(46,3) = 2
- laOptions(47,1) = "*extension: me2=" && ext Text file to MEM
- laOptions(47,2) = ".c_me2"
- laOptions(47,3) = 2
+ laOptions(34,2) = ".n_UseClassPerFile"
+ laOptions(34,3) = 0
+ laOptions(35,1) = "*RedirectClassPerFileToMain:" && 0,1 1=.t. 0=Don't redirect to file.tx2, 1=Redirect to file.tx2 when selecting file.class.tx2
+ laOptions(35,2) = ".l_RedirectClassPerFileToMain"
+ laOptions(35,3) = 1
+ laOptions(36,1) = "*RedirectClassType:" && 0,1,2 For classes created with UseClassPerFile>0 in the form file[.baseclass].class.tx2
+ laOptions(36,2) = ".n_RedirectClassType"
+ laOptions(36,3) = 0
+ laOptions(37,1) = "*ClassPerFileCheck:" && 0,1 1=.t. 0=Don't check file.class.tx2 inclusion, 1=Check file.class.tx2 inclusion
+ laOptions(37,2) = ".l_ClassPerFileCheck"
+ laOptions(37,3) = 1
+ laOptions(38,1) = "*extension: pj2=" && ext Text file to PJX
+ laOptions(38,2) = ".c_pj2"
+ laOptions(38,3) = 2
+ laOptions(39,1) = "*extension: vc2=" && ext Text file to VCX
+ laOptions(39,2) = ".c_vc2"
+ laOptions(39,3) = 2
+ laOptions(40,1) = "*extension: sc2=" && ext Text file to SCX
+ laOptions(40,2) = ".c_sc2"
+ laOptions(40,3) = 2
+ laOptions(41,1) = "*extension: fr2=" && ext Text file to FRX
+ laOptions(41,2) = ".c_fr2"
+ laOptions(41,3) = 2
+ laOptions(42,1) = "*extension: lb2=" && ext Text file to LBX
+ laOptions(42,2) = ".c_lb2"
+ laOptions(42,3) = 2
+ laOptions(43,1) = "*extension: mn2=" && ext Text file to MNX
+ laOptions(43,2) = ".c_mn2"
+ laOptions(43,3) = 2
+ laOptions(44,1) = "*extension: db2=" && ext Text file to DBF
+ laOptions(44,2) = ".c_db2"
+ laOptions(44,3) = 2
+ laOptions(45,1) = "*extension: dc2=" && ext Text file to DBC
+ laOptions(45,2) = ".c_dc2"
+ laOptions(45,3) = 2
+ laOptions(46,1) = "*extension: fk2=" && ext Text file to FKY
+ laOptions(46,2) = ".c_fk2"
+ laOptions(46,3) = 2
+ laOptions(47,1) = "*extension: me2=" && ext Text file to MEM
+ laOptions(47,2) = ".c_me2"
+ laOptions(47,3) = 2
For lnOption = 1 To m.lnOptions
lnLine = Ascan( m.laLines , m.laOptions( m.lnOption, 1 ), 1, -1, 1, 4)
@@ -13262,7 +13314,7 @@ Define Class c_conversor_prg_a_dbf As c_conversor_prg_a_bin
_MemberData = [] ;
+ [] ;
+ [] ;
- + [] ;
+ + [] ;
+ [] ;
+ [] ;
+ []
@@ -13547,7 +13599,7 @@ Define Class c_conversor_prg_a_dbf As c_conversor_prg_a_bin
Endproc
-
+* SF
Procedure writeBinaryFile_INDEXES
Lparameters toTable, toFoxBin2Prg
*-- -----------------------------------------------------------------------------------------------------------
@@ -13560,17 +13612,18 @@ Define Class c_conversor_prg_a_dbf As c_conversor_prg_a_bin
Local I, lnCodError, loEx As Exception ;
, loIndex As CL_DBF_INDEX Of 'FOXBIN2PRG.PRG' ;
, loDBFUtils As CL_DBF_UTILS Of 'FOXBIN2PRG.PRG' ;
- , ldLastUpdate
+ , ldLastUpdate ;
+ , lcIndexFile, llStandAlone
With This As c_conversor_prg_a_dbf Of 'FOXBIN2PRG.PRG'
Store Null To loIndex
Store 0 To lnCodError
- Store '' To lcIndex
+ Store '' To lcIndex, lcIndexFile
loDBFUtils = Createobject('CL_DBF_UTILS')
*-- Regenero los índices
For Each loIndex In toTable._Indexes FoxObject
- lcIndex = 'INDEX ON ' + loIndex._Key + ' TAG ' + loIndex._TagName
+ lcIndex = 'INDEX ON ' + loIndex._Key
If loIndex._TagType = 'BINARY'
lcIndex = lcIndex + ' BINARY'
@@ -13589,7 +13642,12 @@ Define Class c_conversor_prg_a_dbf As c_conversor_prg_a_bin
Endif
Endif
-
+ If m.loIndex._StandAlone Then
+ lcIndex = m.lcIndex + ' TO ' + m.loIndex._IndexFile
+ Else &&m.loIndex._StandAlone
+ lcIndex = m.lcIndex + ' TAG ' + loIndex._TagName + Iif( Empty( m.loIndex._IndexFile ), '', ' OF ' + m.loIndex._IndexFile )
+ Endif &&m.loIndex._StandAlone
+
&lcIndex.
Endfor
@@ -18263,7 +18321,8 @@ Define Class c_conversor_dbf_a_prg As c_conversor_bin_a_prg
Endif
Endif
Endif
-
+* SF
+*SET STEP ON
Use (.c_InputFile) Shared Again Noupdate Alias TABLABIN
lnDataSessionID = toFoxBin2Prg.DataSessionId
.RestoreDBCEvents(loDBC, @llDBCEventsEnabled)
@@ -22951,7 +23010,6 @@ Define Class CL_DBC_INDEXES_DB As CL_DBC_COL_BASE
*-- Info
_Name = ''
-
Procedure analyzeCodeBlock
*---------------------------------------------------------------------------------------------------
* PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
@@ -23037,10 +23095,13 @@ Define Class CL_DBC_INDEXES_DB As CL_DBC_COL_BASE
Store Null To loIndex
lcText = ''
.read_BinDataToProperties(tcTable, @toFoxBin2Prg)
-
+* SF tags
If .Count > 0 Then
+*!* TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+*!* <<>>
+*!* ENDTEXT
TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
- <<>>
+ <<>> <>
ENDTEXT
.KeySort = 2 && Comentar para forzar modo LEGACY
@@ -23048,11 +23109,14 @@ Define Class CL_DBC_INDEXES_DB As CL_DBC_COL_BASE
lcText = lcText + loIndex.toText( tcTable + '.' + loIndex._Name )
Endfor
+*!* TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+*!* <<>>
+*!* ENDTEXT
TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
- <<>>
+ <<>> <>
ENDTEXT
Endif
-
+* /SF
Endwith
@@ -23233,16 +23297,23 @@ Define Class CL_DBC_INDEX_DB As CL_DBC_BASE
With This As CL_DBC_INDEX_DB Of 'FOXBIN2PRG.PRG'
.read_BinDataToProperties(tcIndex)
-
+* SF tags
+*!* TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+*!* <<>>
+*!* <<>> <<._Name>>
+*!* <<>> <<._Comment>>
+*!* <<>> <<._IsUnique>>
+*!* <<>>
+*!* ENDTEXT
TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
- <<>>
+ <<>> <>
<<>> <<._Name>>
<<>> <<._Comment>>
<<>> <<._IsUnique>>
- <<>>
+ <<>> <>
ENDTEXT
- ._ToText = lcText
+* /SF ._ToText = lcText
Endwith && THIS
Catch To loEx
@@ -24828,11 +24899,20 @@ Define Class CL_DBF_TABLE As CL_CUS_BASE
Case C_TABLE_F $ tcLine && Fin
Exit
+ Case C_CDX_F $ tcLine && End of index file, temporary ignore
+ Loop
+
Case Not llFieldsEvaluated And C_FIELDS_I $ tcLine
loFields = ._Fields
loFields.analyzeCodeBlock( @tcLine, @taCodeLines, @m.I, tnCodeLines )
llFieldsEvaluated = .T.
+* new style, multiple index files
+ Case Not llIndexesEvaluated And C_CDXIDX_I $ tcLine
+ loIndexes = ._Indexes
+ loIndexes.analyzeIndexFilesBlock( @tcLine, @taCodeLines, @m.I, tnCodeLines )
+ llIndexesEvaluated = .T.
+
Case Not llIndexesEvaluated And C_INDEXES_I $ tcLine
loIndexes = ._Indexes
loIndexes.analyzeCodeBlock( @tcLine, @taCodeLines, @m.I, tnCodeLines )
@@ -24968,6 +25048,7 @@ Define Class CL_DBF_TABLE As CL_CUS_BASE
Endcase
+* setting temporary order
If llExportData Then
If lnFileCount = 1
lc_DBF_Conversion_Order = loDBF_CFG.DBF_Conversion_Order
@@ -24980,6 +25061,7 @@ Define Class CL_DBF_TABLE As CL_CUS_BASE
Endif
Endif
+* /setting temporary order
*** DH 06/02/2014: added _Records
If llExportData
@@ -25015,10 +25097,12 @@ Define Class CL_DBF_TABLE As CL_CUS_BASE
Throw
Finally
+* remove temporary order
If Not Empty(lcIndexFile) And File(lcIndexFile)
Set Index To
Erase (lcIndexFile)
Endif
+* /remove temporary order
Store Null To loIndexes, loFields, loRecords, loDBF_CFG, loTextStream
Release loFields, loIndexes, loRecords, loDBF_CFG, loTextStream
@@ -25336,8 +25420,8 @@ Define Class CL_DBF_INDEXES As CL_COL_BASE
Local This As CL_DBF_INDEXES Of 'FOXBIN2PRG.PRG'
#Endif
-
- Procedure analyzeCodeBlock
+* SF
+ Procedure analyzeIndexFilesBlock
*---------------------------------------------------------------------------------------------------
* PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
* tcLine (!@ IN/OUT) Contenido de la línea en análisis
@@ -25348,10 +25432,119 @@ Define Class CL_DBF_INDEXES As CL_COL_BASE
Lparameters tcLine, taCodeLines, I, tnCodeLines
Try
- Local llBloqueEncontrado, lcPropName, lcValue, loEx As Exception ;
+ Local llBloqueEncontrado, loEx As Exception
+
+ If Left(tcLine, Len(C_CDXIDX_I)) == C_CDXIDX_I
+ llBloqueEncontrado = .T.
+
+ With This As CL_DBF_INDEXES Of 'FOXBIN2PRG.PRG'
+ For I = m.I + 1 To tnCodeLines
+ .set_Line( @tcLine, @taCodeLines, m.I )
+
+ Do Case
+ Case Empty( tcLine )
+ Loop
+
+ Case C_CDXIDX_F $ tcLine && Fin
+ Exit
+
+ Case C_CDX_I $ tcLine
+ .analyzeIndexFileBlock( @tcLine, @taCodeLines, @m.I, tnCodeLines )
+
+ Otherwise && Otro valor
+*-- No hay otros valores
+ Endcase
+ Endfor
+ Endwith && THIS
+ Endif
+
+ Catch To loEx
+
+ If This.n_Debug > 0 And _vfp.StartMode = 0
+ Set Step On
+ Endif
+
+ Throw
+
+ Finally
+
+ Endtry
+
+ Return llBloqueEncontrado
+ ENDPROC &&analyzeIndexFilesBlock
+
+
+ Procedure analyzeIndexFileBlock
+*---------------------------------------------------------------------------------------------------
+* PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (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
+
+ Try
+ Local llBloqueEncontrado, loEx As Exception
+ Local lcFile As String, llStandAlone As Boolean
+
+ If Left(tcLine, Len(C_CDX_I)) == C_CDX_I
+ llBloqueEncontrado = .T.
+
+ lcFile = STREXTRACT(m.tcLine,C_CDX_File_,'"',1)
+ llStandAlone = STREXTRACT(m.tcLine,C_CDX_Type_,'"',1) == C_CDX_File_IDX
+
+ With This As CL_DBF_INDEXES Of 'FOXBIN2PRG.PRG'
+ For I = m.I + 1 To tnCodeLines
+ .set_Line( @tcLine, @taCodeLines, m.I )
+
+ Do Case
+ Case Empty( tcLine )
+ Loop
+
+ Case C_CDX_F $ tcLine && Fin
+ Exit
+
+ Case C_INDEXES_I $ tcLine
+ .analyzeCodeBlock( @tcLine, @taCodeLines, @I, m.tnCodeLines, m.lcFile, m.llStandAlone )
+
+ Otherwise && Otro valor
+*-- No hay otros valores
+ Endcase
+ Endfor
+ Endwith && THIS
+ Endif
+
+ Catch To loEx
+
+ If This.n_Debug > 0 And _vfp.StartMode = 0
+ Set Step On
+ Endif
+
+ Throw
+
+ Finally
+
+ Endtry
+
+ Return llBloqueEncontrado
+ ENDPROC &&analyzeIndexFileBlock
+* /SF
+
+ Procedure analyzeCodeBlock
+*---------------------------------------------------------------------------------------------------
+* PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (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, tcIndexFile, tlStandAlone
+
+ Try
+ Local llBloqueEncontrado, loEx As Exception ;
, loIndex As CL_DBF_INDEX Of 'FOXBIN2PRG.PRG'
Store Null To loIndex
- Store '' To lcPropName, lcValue
If Left(tcLine, Len(C_INDEXES_I)) == C_INDEXES_I
llBloqueEncontrado = .T.
@@ -25370,7 +25563,7 @@ Define Class CL_DBF_INDEXES As CL_COL_BASE
Case C_INDEX_I $ tcLine
loIndex = Null
loIndex = Createobject("CL_DBF_INDEX")
- loIndex.analyzeCodeBlock( @tcLine, @taCodeLines, @m.I, tnCodeLines )
+ loIndex.analyzeCodeBlock( @tcLine, @taCodeLines, @m.I, tnCodeLines, tcIndexFile, tlStandAlone )
.Add( loIndex, loIndex._TagName )
Otherwise && Otro valor
@@ -25381,10 +25574,6 @@ Define Class CL_DBF_INDEXES As CL_COL_BASE
Endif
Catch To loEx
- If loEx.ErrorNo = 1470 && Incorrect property name.
- loEx.UserValue = 'I=' + Transform(m.I) + ', tcLine=' + Transform(tcLine)
- Endif
-
If This.n_Debug > 0 And _vfp.StartMode = 0
Set Step On
Endif
@@ -25393,7 +25582,7 @@ Define Class CL_DBF_INDEXES As CL_COL_BASE
Finally
Store Null To loIndex
- Release lcPropName, lcValue, loIndex
+ Release loIndex
Endtry
@@ -25401,6 +25590,7 @@ Define Class CL_DBF_INDEXES As CL_COL_BASE
Endproc
+* sf proc wrapping index
Procedure toText
*---------------------------------------------------------------------------------------------------
* PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
@@ -25423,30 +25613,130 @@ Define Class CL_DBF_INDEXES As CL_COL_BASE
Store Null To loIndex
lcText = ''
Dimension taTagInfo(1,6)
+* SF tags
+*!* If Tagcount() > 0
+*!* TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+*!* <<>>
+*!* <<>> <><><>
+*!* <<>>
+*!* <<>> <>
+*!* ENDTEXT
+*!* tnTagInfo_Count = Ataginfo( taTagInfo )
+*!* Asort( taTagInfo, 1, -1, 0, 1 )
+*!* loIndex = Createobject("CL_DBF_INDEX")
+
+*!* For I = 1 To tnTagInfo_Count
+*!* lcText = lcText + loIndex.toText( @taTagInfo, m.I )
+*!* Endfor
+
+*!* TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+*!* <<>> <>
+*!* <<>>
+*!* ENDTEXT
+*!* Endif
+ Local;
+ lcText As String,;
+ loIndex As "CL_DBF_INDEX"
+
+ LOCAL Array;
+ taTagInfo (1,6)
+ Local;
+ lcFile As String,;
+ lcType As String
+
+ toFoxBin2Prg.writeLog( Replicate('-', 100) )
+ toFoxBin2Prg.writeLog( ' Processing index tags' )
If Tagcount() > 0
- TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
- <<>>
- <<>> <><><>
- <<>>
- <<>> <>
+ toFoxBin2Prg.writeLog( Replicate('-', 100) )
+ toFoxBin2Prg.writeLog( ' Structural' )
+ Text To m.lcText Additive Textmerge Noshow Flags 1+2 Pretext 1+2
+ <<>>
+ <<>> <> <><>" >
+ <<>>
+ <<>> <>
ENDTEXT
-
+
tnTagInfo_Count = Ataginfo( taTagInfo )
- Asort( taTagInfo, 1, -1, 0, 1 )
+ Asort( m.taTagInfo, 1, -1, 0, 1 )
loIndex = Createobject("CL_DBF_INDEX")
-
- For I = 1 To tnTagInfo_Count
- lcText = lcText + loIndex.toText( @taTagInfo, m.I )
+
+ For I = 1 To m.tnTagInfo_Count
+ lcText = m.lcText + m.loIndex.toText( @taTagInfo, m.I )
Endfor
-
- TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
- <<>> <>
- <<>>
+
+ Text To m.lcText Additive Textmerge Noshow Flags 1+2 Pretext 1+2
+ <<>> <>
+ <<>> <>
+ <<>>
ENDTEXT
Endif
+
+*!* IF ! EMPTY(toFoxBin2Prg.a_InputFiles) THEN
+*!* toFoxBin2Prg.writeLog( ' ' + Replicate('-', 98) )
+*!* toFoxBin2Prg.writeLog( ' Additional files' )
+*!* FOR EACH lcFile IN toFoxBin2Prg.a_InputFiles
+*!* Try
+*!* lcFile = SYS(2014, ''+m.lcFile, ADDBS(JUSTPATH(tc_InputFile) ) )
+*!* lcType = SUBSTR(FILETOSTR(m.lcFile),5,4)
+*!* lcType = IIF( m.lcType = 0hFFFFFFFF, C_CDX_Type_IDX, C_CDX_Type_Compound )
+*!* toFoxBin2Prg.writeLog( ' '+m.lcType + ' ' + m.lcFile )
+*!* SET INDEX TO ( m.lcFile )
+*!* If TAGCOUNT( m.lcFile ) > 0 THEN
+*!* lnTagInfo_Count = Ataginfo( taTagInfo , m.lcFile )
+*!* TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+*!* <<>>
+*!* <<>> <> <><> <><> >
+*!* <<>>
+*!* <<>> <>
+*!* ENDTEXT
+*!* lnTagInfo_Count = Ataginfo( laTagInfo , m.lcFile)
+*!* Asort( laTagInfo, 1, -1, 0, 1 )
+*!* loIndex = Createobject("CL_DBF_INDEX")
+*!* For I = 1 To lnTagInfo_Count
+*!* lcText = lcText + loIndex.toText( @laTagInfo, m.I )
+*!* Endfor
+
+*!* TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+*!* <<>> <>
+*!* <<>> <>
+*!* <<>>
+*!* ENDTEXT
+*!* ENDIF &&TAGCOUNT( m.lcFile ) > 0
+
+*!* Catch To m.loEx When m.loEx.ErrorNo = 1
+*!* *File Not found
+*!* toFoxBin2Prg.writeLog( ' Not a File ' + m.lcFile)
+
+*!* Catch To m.loEx When m.loEx.ErrorNo=114
+*!* *INDEX does not match
+*!* toFoxBin2Prg.writeLog( ' Index does not match table ' + m.lcFile)
+
+*!* Catch To m.loEx
+*!* If This.n_Debug > 0 And _vfp.StartMode = 0
+*!* Set Step On
+*!* Endif
+*!*
+*!* Throw
+*!*
+*!* Finally
+*!* Store Null To m.loIndex
+*!* Release I, m.loIndex
+*!*
+*!* Endtry
+*!* ENDFOR &&lcFile
+*!* ENDIF &&! EMPTY(toFoxBin2Prg.a_InputFiles)
+
+ IF !EMPTY(m.lcText) THEN
+ TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+ <<>> <><>
+ <<>> <>
+ ENDTEXT
+ ENDIF &&!EMPTY(m.lcText)
+ * /SF
+
Catch To loEx
If This.n_Debug > 0 And _vfp.StartMode = 0
Set Step On
@@ -25463,7 +25753,6 @@ Define Class CL_DBF_INDEXES As CL_COL_BASE
Return lcText
Endproc
-
Enddefine
@@ -25474,6 +25763,9 @@ Define Class CL_DBF_INDEX As CL_CUS_BASE
#Endif
_MemberData = [] ;
+ + [] ;
+ + [] ;
+ + [] ;
+ [] ;
+ [] ;
+ [] ;
@@ -25484,6 +25776,8 @@ Define Class CL_DBF_INDEX As CL_CUS_BASE
*-- Index Info
+ _IndexFile = ''
+ _StandAlone = .F.
_TagName = ''
_TagType = ''
_Key = ''
@@ -25500,7 +25794,7 @@ Define Class CL_DBF_INDEX As CL_CUS_BASE
* 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
+ Lparameters tcLine, taCodeLines, I, tnCodeLines, tcIndexFile, tlStandAlone
Try
Local llBloqueEncontrado, lcPropName, lcValue, loEx As Exception
@@ -25510,6 +25804,9 @@ Define Class CL_DBF_INDEX As CL_CUS_BASE
llBloqueEncontrado = .T.
With This As CL_DBF_INDEX Of 'FOXBIN2PRG.PRG'
+ ._IndexFile = EVL( m.tcIndexFile, '')
+ ._StandAlone = m.tlStandAlone
+
For I = m.I + 1 To tnCodeLines
.set_Line( @tcLine, @taCodeLines, m.I )
@@ -25567,18 +25864,28 @@ Define Class CL_DBF_INDEX As CL_CUS_BASE
Exit
Endif
Endfor
-
+* SF tags
+*!* TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+*!* <<>>
+*!* <<>> <>
+*!* <<>> <>
+*!* <<>> <>
+*!* <<>> <>
+*!* <<>> <>
+*!* <<>> <>
+*!* <<>>
+*!* ENDTEXT
TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
- <<>>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>>
+ <<>> <>
+ <<>> <>
+ <<>> <>
+ <<>> <>
+ <<>> <>
+ <<>> <>
+ <<>> <>
+ <<>> <>
ENDTEXT
-
+* /SF
Catch To loEx
If This.n_Debug > 0 And _vfp.StartMode = 0
@@ -30577,9 +30884,10 @@ Enddefine
Define Class CL_DBF_CFG As Custom
_MemberData = [] ;
+ + [] ;
+ [] ;
+ [] ;
- + [] ;
+ + [] ;
+ [] ;
+ [] ;
+ []
@@ -30590,9 +30898,10 @@ Define Class CL_DBF_CFG As Custom
*-- Configuration class. By default asumes master value, except when overriding one.
+ DBF_Conversion_Support = Null
DBF_Conversion_Order = ''
DBF_Conversion_Condition = ''
- DBF_Conversion_Support = Null
+ DBF_IndexList = ''
l_DBF_BinChar_Base64 = .Null.
l_DBF_IncludeDeleted = .Null.
Enddefine