diff --git a/foxbin2prg.prg b/foxbin2prg.prg
index 969d343..f939414 100644
--- a/foxbin2prg.prg
+++ b/foxbin2prg.prg
@@ -10805,6 +10805,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE
+ [] ;
+ [] ;
+ [] ;
+ + [] ;
+ [] ;
+ [] ;
+ [] ;
@@ -12124,6 +12125,30 @@ DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE
+ PROCEDURE write_EXTERNAL_MEMBER_HEADER
+ LPARAMETERS toFoxBin2Prg, tcMemberName, tcMemberType, tcCodigo
+ *-- < EXTERNAL_MEMBER Name = "member-name" Type="member-type" />
+ #IF .F.
+ LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+ #ENDIF
+
+ IF EMPTY(tcCodigo) THEN
+ TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+ *-- EXTERNAL_MEMBER identify external member names / EXTERNAL_MEMBER identifica los nombres de los miembros externos
+ ENDTEXT
+ ENDIF
+
+ IF NOT EMPTY(tcMemberName) AND NOT EMPTY(tcMemberType) THEN
+ TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+ <> Name="<>" Type="<>" <>
+ ENDTEXT
+ ENDIF
+
+ RETURN
+ ENDPROC
+
+
+
PROCEDURE write_INCLUDE
LPARAMETERS toReg, tcCodigo
*-- #INCLUDE
@@ -14301,10 +14326,15 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg
#ENDIF
TRY
- LOCAL lnCodError, laDatabases(1), lnDatabases_Count, lcEventsFile, laClasses(1,2), lnClasses_Count
+ LOCAL lnCodError, laDatabases(1), lnDatabases_Count, lcEventsFile, lcExternalHeader, lcCodigo ;
+ , lnClassCount, laClasses(1,3) ;
+ , loConnection AS CL_DBC_CONNECTION OF 'FOXBIN2PRG.PRG' ;
+ , loTable AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG' ;
+ , loView AS CL_DBC_VIEW OF 'FOXBIN2PRG.PRG'
- STORE 0 TO lnCodError, lnClasses_Count
- STORE '' TO laClasses
+ STORE NULL TO loRelation, loView, loTable
+ STORE 0 TO lnCodError, lnDatabases_Count, lnClassCount
+ STORE '' TO laDatabases, lcEventsFile, lcExternalHeader, laClasses, lcCodigo, C_FB2PRG_CODE
WITH THIS AS c_conversor_dbc_a_prg OF 'FOXBIN2PRG.PRG'
lnDatabases_Count = ADATABASES(laDatabases)
@@ -14333,18 +14363,90 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg
.AvanceDelProceso( 'Analyzing DBC metadata...', 1, 2, 1 )
- C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER()
-
- *-- Header
+ *C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER()
C_FB2PRG_CODE = C_FB2PRG_CODE + toDatabase.toText(@toFoxBin2Prg)
+ *-- Header
+ *fdb*
+ IF toFoxBin2Prg.l_UseClassPerFile
+ .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, .F., .F., @lcExternalHeader )
+
+ *-- Connections
+ FOR EACH loConnection IN toDatabase._Connections FOXOBJECT
+ lnClassCount = lnClassCount + 1
+ DIMENSION laClasses(lnClassCount,3)
+ laClasses(lnClassCount,1) = LOWER( loConnection._Name )
+ laClasses(lnClassCount,2) = loConnection._ToText
+ laClasses(lnClassCount,3) = 'connection'
+ .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, laClasses(lnClassCount,1), laClasses(lnClassCount,3), @lcExternalHeader )
+ ENDFOR
+
+ *-- Tables
+ FOR EACH loTable IN toDatabase._Tables FOXOBJECT
+ lnClassCount = lnClassCount + 1
+ DIMENSION laClasses(lnClassCount,3)
+ laClasses(lnClassCount,1) = LOWER( loTable._Name )
+ laClasses(lnClassCount,2) = loTable._ToText
+ laClasses(lnClassCount,3) = 'table'
+ .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, laClasses(lnClassCount,1), laClasses(lnClassCount,3), @lcExternalHeader )
+ ENDFOR
+
+ *-- Views
+ FOR EACH loView IN toDatabase._Views FOXOBJECT
+ lnClassCount = lnClassCount + 1
+ DIMENSION laClasses(lnClassCount,3)
+ laClasses(lnClassCount,1) = LOWER( loView._Name )
+ laClasses(lnClassCount,2) = loView._ToText
+ laClasses(lnClassCount,3) = 'view'
+ .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, laClasses(lnClassCount,1), laClasses(lnClassCount,3), @lcExternalHeader )
+ ENDFOR
+
+ *-- Stored Procedures
+ IF NOT EMPTY(toDatabase._StoredProcedures) THEN
+ lnClassCount = lnClassCount + 1
+ DIMENSION laClasses(lnClassCount,3)
+ laClasses(lnClassCount,1) = LOWER( 'sp' )
+ laClasses(lnClassCount,2) = toDatabase._StoredProcedures
+ laClasses(lnClassCount,3) = 'storedprocedures'
+ .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, laClasses(lnClassCount,1), laClasses(lnClassCount,3), @lcExternalHeader )
+ ENDIF
+
+ lcExternalHeader = lcExternalHeader + CR_LF
+ ENDIF
*-- Genero el DC2
.AvanceDelProceso( 'Writing DC2...', 2, 2, 1 )
+ *IF .l_Test
+ * toModulo = C_FB2PRG_CODE
+ *ELSE
+ * .write_OutputFile( (C_FB2PRG_CODE), .c_OutputFile, @toFoxBin2Prg )
+ *ENDIF
+
+ lcOutputFile = .c_OutputFile
+ lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + lcExternalHeader + C_FB2PRG_CODE
+
IF .l_Test
- toModulo = C_FB2PRG_CODE
+ *FOR I = 1 TO lnClassCount
+ * lcCodigo = lcCodigo + laClasses(I,2)
+ *ENDFOR
+ *toDatabase = lcCodigo
ELSE
- .write_OutputFile( (C_FB2PRG_CODE), .c_OutputFile, @toFoxBin2Prg )
+ IF toFoxBin2Prg.l_UseClassPerFile
+ .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg )
+
+ FOR I = 1 TO lnClassCount
+ * lcOutputFile = 'DBCName' + '.' + 'MemberType' + '.' + 'MemberName' + '.' + 'dc2'
+ lcOutputFile = ADDBS( JUSTPATH( .c_OutputFile ) ) + JUSTSTEM( .c_OutputFile ) + '.' + laClasses(I,3) + '.' + laClasses(I,1) + '.' + JUSTEXT( .c_OutputFile )
+ lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + laClasses(I,2)
+ .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg )
+ ENDFOR
+ ELSE
+ FOR I = 1 TO lnClassCount
+ lcCodigo = lcCodigo + laClasses(I,2)
+ ENDFOR
+
+ .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg )
+ ENDIF
ENDIF
ENDWITH && THIS
@@ -16678,17 +16780,19 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE
FROM TABLABIN ;
WHERE STR(ParentID) + ObjectType + LOWER(objectName) = STR(1) + PADR('Database',10) + PADR(LOWER('StoredProceduresSource'),128) ;
INTO ARRAY laCode
- ._StoredProcedures = laCode(1,1)
+ TEXT TO ._StoredProcedures TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+ <<>> <>
+ <>
+ <<>> <>
+ ENDTEXT
IF NOT toFoxBin2Prg.l_UseClassPerFile THEN
TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
- <<>><>
- <<>><>
- <<>><>
+ <>
+ <>
+ <>
<<>>
- <<>> <>
<<._StoredProcedures>>
- <<>> <>
ENDTEXT
ENDIF
@@ -17787,7 +17891,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE
<<>>
ENDTEXT
- *.KeySort = 2 && Comento para forzar modo LEGACY
+ .KeySort = 2 && Comento para forzar modo LEGACY
FOR EACH loField IN THIS &&FOXOBJECT
lcText = lcText + loField.toText( tcTable, loField._Name )
ENDFOR
@@ -18171,7 +18275,7 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE
<<>>
ENDTEXT
- *.KeySort = 2 && Comento para forzar modo LEGACY
+ .KeySort = 2 && Comento para forzar modo LEGACY
FOR EACH loIndex IN THIS &&FOXOBJECT
lcText = lcText + loIndex.toText( tcTable + '.' + loIndex._Name )
ENDFOR
@@ -19183,7 +19287,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE
<<>>
ENDTEXT
- *.KeySort = 2 && Comento para forzar modo LEGACY
+ .KeySort = 2 && Comento para forzar modo LEGACY
FOR EACH loField IN THIS &&FOXOBJECT
lcText = lcText + loField.toText( tcView, loField._Name )
ENDFOR