diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt
index 2c3c5d5..452ea29 100644
--- a/FoxBin2PRGVersionFile.txt
+++ b/FoxBin2PRGVersionFile.txt
@@ -37,6 +37,7 @@ Change History -------------------------------------------------------------
- Feature: Added new get_Target() API method for obtaining information about processed files (Lutz Scheffler)
- Feature: Added new file processing output to DOS stdOut (Lutz Scheffler)
- Bug Fix: Fixed processing cancelation with Esc key
+- Feature: Sort table/view fields alphabetically to facilitate diffing and merging, while maintaining a list with the original field order for correct DBC regeneration (Ryan Harris)
2015/01/18 v1.19.41
- Bug Fix db2: Erroneous detection of Invalid Table when size is less than 328 bytes. Lower limit was changed to 65 bytes.
diff --git a/TESTS/DATOS_READONLY/FB2P_DBC.DC2 b/TESTS/DATOS_READONLY/FB2P_DBC.DC2
index 06eda8c..7ddff4f 100644
--- a/TESTS/DATOS_READONLY/FB2P_DBC.DC2
+++ b/TESTS/DATOS_READONLY/FB2P_DBC.DC2
@@ -102,7 +102,16 @@
.T.
+
+ descrip
+
+ .F.
+
+
+
+
+
@@ -216,6 +225,18 @@
.F.
+
+
+
+ Relation 1
+ NOMBRELARGODELDBF
+ FB2P_DEPTO
+ DEPTO
+ DEPTO
+
+
+
+
@@ -393,6 +414,10 @@
STROSNC.DB_DEBUG_SETUP.USUARIO
+
+
+
+
@@ -502,6 +527,10 @@
fb2p_dbc!nombrelargodeldbf.depto
+
+
+
+
@@ -579,6 +608,10 @@
CONVENIOS.HISTORICO
+
+
+
+
@@ -624,6 +657,10 @@
DUAL.DUMMY
+
+
+
+
diff --git a/TESTS/DATOS_READONLY/fb2p_dbc.dbc b/TESTS/DATOS_READONLY/fb2p_dbc.dbc
index 39fe57a..4cc431d 100644
Binary files a/TESTS/DATOS_READONLY/fb2p_dbc.dbc and b/TESTS/DATOS_READONLY/fb2p_dbc.dbc differ
diff --git a/TESTS/DATOS_READONLY/fb2p_dbc.dct b/TESTS/DATOS_READONLY/fb2p_dbc.dct
index b5f6cf7..dfa83a0 100644
Binary files a/TESTS/DATOS_READONLY/fb2p_dbc.dct and b/TESTS/DATOS_READONLY/fb2p_dbc.dct differ
diff --git a/TESTS/DATOS_READONLY/fb2p_dbc.dcx b/TESTS/DATOS_READONLY/fb2p_dbc.dcx
index 2ed3928..65ee174 100644
Binary files a/TESTS/DATOS_READONLY/fb2p_dbc.dcx and b/TESTS/DATOS_READONLY/fb2p_dbc.dcx differ
diff --git a/TESTS/DATOS_READONLY/fb2p_depto.cdx b/TESTS/DATOS_READONLY/fb2p_depto.cdx
index cd8311d..3ff0d94 100644
Binary files a/TESTS/DATOS_READONLY/fb2p_depto.cdx and b/TESTS/DATOS_READONLY/fb2p_depto.cdx differ
diff --git a/TESTS/DATOS_READONLY/fb2p_depto.db2 b/TESTS/DATOS_READONLY/fb2p_depto.db2
index 219fad7..be40ecc 100644
--- a/TESTS/DATOS_READONLY/fb2p_depto.db2
+++ b/TESTS/DATOS_READONLY/fb2p_depto.db2
@@ -8,7 +8,7 @@
1252
- 2014/01/06
+
fb2p_dbc.dbc
0x00000030
Visual FoxPro
@@ -68,6 +68,22 @@
ASCENDING
MACHINE
+
+ DESCRIP
+ REGULAR
+ DESCRIP
+
+ DESCENDING
+ GENERAL
+
+
+
+
+ D.1.C
+ la descrip
+
+
+
diff --git a/TESTS/DATOS_READONLY/fb2p_depto.dbf b/TESTS/DATOS_READONLY/fb2p_depto.dbf
index b6df061..6b4840d 100644
Binary files a/TESTS/DATOS_READONLY/fb2p_depto.dbf and b/TESTS/DATOS_READONLY/fb2p_depto.dbf differ
diff --git a/foxbin2prg.exe b/foxbin2prg.exe
index 7799c2a..b37b7d2 100644
Binary files a/foxbin2prg.exe and b/foxbin2prg.exe differ
diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt
index 55ed204..f70ac2b 100644
Binary files a/foxbin2prg.pjt and b/foxbin2prg.pjt differ
diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx
index 54227d6..4a72f6a 100644
Binary files a/foxbin2prg.pjx and b/foxbin2prg.pjx differ
diff --git a/foxbin2prg.prg b/foxbin2prg.prg
index afb2c53..42f7539 100644
--- a/foxbin2prg.prg
+++ b/foxbin2prg.prg
@@ -131,8 +131,9 @@
* 07/01/2015 FDBOZZO v1.19.40 Mejora scx/vcx: Detección de nombres de objeto duplicados para notificar casos de corrupción
* 13/01/2015 FDBOZZO v1.19.41 Bug Fix scx/vcx: Detección errónea de estructuras PROCEDURE/ENDPROC cuando se usan como parámetros en LPARAMETERS (Ryan Harris)
* 13/01/2015 FDBOZZO v1.19.41 Bug Fix db2: Detección errónea de tabla inválida cuando el tamaño es inferior a 328 bytes. Límite mínimo cambiado a 65 bytes.
-* 20/01/2015 FDBOZZO v1.19.42 Mejora: Validación de versión de Visual FoxPro, para evitar problemas ajenos a FoxBin2Prg
-* 22/01/2015 FDBOZZO v1.19.42 Bug Fix: Compatibilidad con SourceSafe rota porque se genera un error al realizar la consulta para soporte de archivo (Tuvia Vinitsky)
+* 20/01/2015 FDBOZZO v1.19.42 Mejora: Validación de versión de Visual FoxPro SP1, para evitar problemas ajenos a FoxBin2Prg
+* 04/02/2015 FDBOZZO v1.19.42 Mejora dc2: Permitir ordenar los campos de vistas y tablas alfabéticamente y mantener en una lista aparte el orden real, para facilitar el diff y el merge (Ryan Harris)
+* 22/01/2015 FDBOZZO v1.19.42 Bug Fix: Compatibilidad con SourceSafe rota porque se genera un error al realizar la consulta para soporte de archivo (Tuvia Vinitsky)
* 25/02/2015 FDBOZZO v1.19.42 Bug Fix scx/vcx: Procesar solo un nivel de text/endtext, ya que no se admiten más niveles (Lutz Scheffler)
* 25/02/2015 FDBOZZO v1.19.42 Mejora: Hacer algunos mensajes de error más descriptivos (Lutz Scheffler)
* 03/03/2015 FDBOZZO v1.19.42 Mejora: Mejoras en la traducción al alemán (Lutz Scheffler)
@@ -209,6 +210,7 @@
* 06/01/2015 Jim Nelson Mejora v1.19.39: Permitir configurar la barra de progreso para que solamente aparezca cuando se procesan múltiples archivos y no cuando se procesa solo 1 (Agregado en v1.19.40)
* 06/01/2015 Mike Potjer Reporte bug db2: [Error 12, Variable "TCOUTPUTFILE" is not found] cuando DBF_Conversion_Support=4 y el archivo de salida es igual al generado (Agregado en v1.19.40)
* 13/01/2015 Ryan Harris Reporte bug vcx/scx v1.19.40: Detección errónea de estructuras PROCEDURE/ENDPROC cuando se usan como parámetros LPARAMETERS en línea aparte (Arreglado en v1.19.41)
+* 24/01/2015 Ryan Harris Mejora db2 v1.19.41: Permitir ordenar los campos de vistas y tablas alfabéticamente y mantener en una lista aparte el orden real, para facilitar el diff y el merge
* 22/01/2015 Tuvia Vinitsky Bug Fix v1.19.41: Compatibilidad con SourceSafe rota porque se genera un error al realizar la consulta para soporte de archivo (Arreglado en v1.19.42)
* 25/02/2015 Lutz Scheffler Reporte de Bug scx/vcx v1.19.41: Procesar solo un nivel de text/endtext, ya que no se admiten más niveles (Arreglado en v1.19.42)
* 25/02/2015 Lutz Scheffler Mejora v1.19.41: Hacer algunos mensajes de error más descriptivos (Agregado en v1.19.42)
@@ -269,6 +271,9 @@ LPARAMETERS tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDeb
#DEFINE C_EXTERNAL_CLASS_I '*< EXTERNAL_CLASS:'
#DEFINE C_EXTERNAL_CLASS_F '/>'
#DEFINE C_LEN_EXTERNAL_CLASS_I LEN(C_EXTERNAL_CLASS_I)
+#DEFINE C_EXTERNAL_MEMBER_I '*< EXTERNAL_MEMBER:'
+#DEFINE C_EXTERNAL_MEMBER_F '/>'
+#DEFINE C_LEN_EXTERNAL_MEMBER_I LEN(C_EXTERNAL_MEMBER_I)
#DEFINE C_OBJECTDATA_I '*< OBJECTDATA:'
#DEFINE C_OBJECTDATA_F '/>'
#DEFINE C_LEN_OBJECTDATA_I LEN(C_OBJECTDATA_I)
@@ -349,6 +354,8 @@ LPARAMETERS tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDeb
#DEFINE C_VIEW_F ''
#DEFINE C_VIEWS_I ''
#DEFINE C_VIEWS_F ''
+#DEFINE C_FIELD_ORDER_I ''
+#DEFINE C_FIELD_ORDER_F ''
#DEFINE C_FIELD_I ''
#DEFINE C_FIELD_F ''
#DEFINE C_FIELDS_I ''
@@ -500,7 +507,7 @@ ExitProcess(1) && Esta debe ser de las
QUIT
-*******************************************************************************************************************
+
DEFINE CLASS c_foxbin2prg AS SESSION
#IF .F.
LOCAL THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
@@ -547,6 +554,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION
+ [] ;
+ [] ;
+ [] ;
+ + [] ;
+ [] ;
+ [] ;
+ [] ;
@@ -578,13 +586,14 @@ DEFINE CLASS c_foxbin2prg AS SESSION
+ [] ;
+ [] ;
+ [] ;
- + [] ;
+ + [] ;
+ [] ;
+ [] ;
+ [] ;
+ [] ;
+ [] ;
+ [] ;
+ + [] ;
+ [] ;
+ [] ;
+ [] ;
@@ -661,7 +670,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION
l_CancelWithEscKey = .T.
l_DropNullCharsFromCode = .T.
l_Recompile = .T.
- l_UseClassPerFile = .F.
+ n_UseClassPerFile = 0
l_ClassPerFileCheck = .F.
l_RedirectClassPerFileToMain = .F.
l_NoTimestamps = .T.
@@ -678,7 +687,8 @@ DEFINE CLASS c_foxbin2prg AS SESSION
n_CFG_Actual = 0
n_ID = 0
n_FileHandle = 0
- n_ProcessedFiles = 0 && Contador usado para los archivos file.class.ext
+ n_Order_View_Fields = 1
+ n_ProcessedFiles = 0 && Contador usado para los archivos file.class.ext
n_ProcessedFilesCount = 0 && Contador genérico de procesados
o_Conversor = NULL
o_Frm_Avance = NULL
@@ -888,10 +898,10 @@ DEFINE CLASS c_foxbin2prg AS SESSION
LOCAL lnCount, I
lnCount = 0
-
+
WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
tcFileMask = EVL(tcFileMask, '*')
-
+
FOR I = 1 TO .n_ProcessedFiles
IF LIKE( tcFileMask, JUSTFNAME(.a_ProcessedFiles(I,1)) ) THEN
lnCount = lnCount + 1
@@ -904,7 +914,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION
ENDIF
ENDFOR
ENDWITH
-
+
RETURN lnCount
ENDFUNC
@@ -944,11 +954,11 @@ DEFINE CLASS c_foxbin2prg AS SESSION
ENDPROC
- PROCEDURE l_UseClassPerFile_ACCESS
+ PROCEDURE n_UseClassPerFile_ACCESS
IF THIS.n_CFG_Actual = 0 OR ISNULL( THIS.o_Configuration( THIS.n_CFG_Actual ) )
- RETURN THIS.l_UseClassPerFile
+ RETURN THIS.n_UseClassPerFile
ELSE
- RETURN NVL( THIS.o_Configuration( THIS.n_CFG_Actual ).l_UseClassPerFile, THIS.l_UseClassPerFile )
+ RETURN NVL( THIS.o_Configuration( THIS.n_CFG_Actual ).n_UseClassPerFile, THIS.n_UseClassPerFile )
ENDIF
ENDPROC
@@ -1631,8 +1641,8 @@ DEFINE CLASS c_foxbin2prg AS SESSION
CASE LEFT( laConfig(I), 16 ) == LOWER('UseClassPerFile:')
lcValue = ALLTRIM( SUBSTR( laConfig(I), 17 ) )
- IF INLIST( lcValue, '0', '1' ) THEN
- lo_CFG.l_UseClassPerFile = ( TRANSFORM(lcValue) == '1' )
+ IF INLIST( lcValue, '0', '1', '2' ) THEN
+ lo_CFG.n_UseClassPerFile = INT( VAL(lcValue) )
.writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > UseClassPerFile: ' + TRANSFORM(lcValue) )
ENDIF
@@ -1783,7 +1793,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION
.writeLog( C_TAB + 'l_Recompile: ' + TRANSFORM(.l_Recompile) + ' (' + tcRecompile + ')' )
.writeLog( C_TAB + 'l_NoTimestamps: ' + TRANSFORM(.l_NoTimestamps) )
.writeLog( C_TAB + 'l_ClearUniqueID: ' + TRANSFORM(.l_ClearUniqueID) )
- .writeLog( C_TAB + 'l_UseClassPerFile: ' + TRANSFORM(.l_UseClassPerFile) )
+ .writeLog( C_TAB + 'n_UseClassPerFile: ' + TRANSFORM(.n_UseClassPerFile) )
.writeLog( C_TAB + 'l_ClassPerFileCheck: ' + TRANSFORM(.l_ClassPerFileCheck) )
.writeLog( C_TAB + 'l_RedirectClassPerFileToMain: ' + TRANSFORM(.l_RedirectClassPerFileToMain) )
.writeLog( C_TAB + 'l_Debug: ' + TRANSFORM(.l_Debug) )
@@ -1926,6 +1936,35 @@ DEFINE CLASS c_foxbin2prg AS SESSION
ENDFUNC
+ PROCEDURE get_TextFileNames
+ LPARAMETERS tcInputFile, taOutputFiles
+
+ EXTERNAL ARRAY taOutputFiles
+ LOCAL I, lnOutputFiles, lcExt, lnCodeLines, lcCode, laCodeLines(1), lnFileCount, laFiles(1), lcInputFile
+
+ IF TYPE('taOutputFiles',1) # 'A' THEN
+ ERROR 9, 'taOutputFiles'
+ ENDIF
+
+ WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+ lnOutputFiles = 0
+ lcExt = UPPER( JUSTEXT( tcInputFile ) )
+
+ DO CASE
+ CASE lcExt = 'VCX'
+
+
+ CASE .F.
+
+
+ ENDCASE
+
+ ENDWITH
+
+ RETURN lnOutputFiles
+ ENDPROC
+
+
PROCEDURE Get_Ext2FromExt
LPARAMETERS tcExt
LOCAL lcExt2
@@ -2729,7 +2768,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION
LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG'
loLang = _SCREEN.o_FoxBin2Prg_Lang
-
+
IF toEx.ErrorNo = 1799 THEN && Conversion Cancelled
tcErrorInfo = loLang.C_CONVERSION_CANCELLED_BY_USER_LOC
ELSE
@@ -2799,18 +2838,34 @@ DEFINE CLASS c_foxbin2prg AS SESSION
ENDIF
- *-- OPTIMIZACIÓN VC2/SC2: VERIFICO SI EL ARCHIVO BASE FUE PROCESADO PARA DESCARTAR REPROCESOS
- IF INLIST(lcExtension,'VC2','SC2') AND .l_UseClassPerFile AND .l_RedirectClassPerFileToMain
- IF OCCURS('.', JUSTSTEM(.c_InputFile)) = 0 THEN
- lc_BaseFile = .c_InputFile
- ELSE
- lc_BaseFile = FORCEPATH( FORCEEXT( JUSTSTEM( JUSTSTEM(.c_InputFile) ), JUSTEXT(.c_InputFile)) , JUSTPATH(.c_InputFile) )
- ENDIF
+ *-- OPTIMIZACIÓN VC2/SC2/DC2: VERIFICO SI EL ARCHIVO BASE FUE PROCESADO PARA DESCARTAR REPROCESOS
+ IF .n_UseClassPerFile > 0 AND .l_RedirectClassPerFileToMain THEN
+ DO CASE
+ CASE .n_UseClassPerFile = 1 AND INLIST(lcExtension,'VC2','SC2')
+ IF OCCURS('.', JUSTSTEM(.c_InputFile)) = 0 THEN
+ lc_BaseFile = .c_InputFile
+ ELSE
+ lc_BaseFile = FORCEPATH( FORCEEXT( JUSTSTEM( JUSTSTEM(.c_InputFile) ), JUSTEXT(.c_InputFile)) , JUSTPATH(.c_InputFile) )
+ ENDIF
- *-- Verifico si se debe forzar la redirección al archivo principal
- IF '.' $ JUSTSTEM(.c_InputFile)
- .c_InputFile = lc_BaseFile
- ENDIF
+ *-- Verifico si se debe forzar la redirección al archivo principal
+ IF '.' $ JUSTSTEM(.c_InputFile)
+ .c_InputFile = lc_BaseFile
+ ENDIF
+
+ CASE .n_UseClassPerFile = 2 AND INLIST(lcExtension,'VC2','SC2') OR lcExtension = 'DC2'
+ IF OCCURS('.', JUSTSTEM(.c_InputFile)) = 0 THEN
+ lc_BaseFile = .c_InputFile
+ ELSE
+ lc_BaseFile = FORCEPATH( FORCEEXT( JUSTSTEM( JUSTSTEM( JUSTSTEM(.c_InputFile) ) ), JUSTEXT(.c_InputFile)) , JUSTPATH(.c_InputFile) )
+ ENDIF
+
+ *-- Verifico si se debe forzar la redirección al archivo principal
+ IF '.' $ JUSTSTEM(.c_InputFile)
+ .c_InputFile = lc_BaseFile
+ ENDIF
+
+ ENDCASE
ENDIF
IF NOT EMPTY(tcOriginalFileName)
@@ -2826,7 +2881,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION
*-- addProcessedFile( tcInputFile, tcProcessed, tcHasErrors, tcSupported, tcReserved )
IF NOT .addProcessedFile( .c_InputFile, 'P1', 'E0', 'S1', 'RR' ) THEN
*.writeLog( 'OPTIMIZACIÓN: El archivo Base [' + JUSTFNAME(lc_BaseFile) + '] ya fue procesado, por lo que no se procesará [' + JUSTFNAME(.c_InputFile) + ']' )
- .writeLog( TEXTMERGE( loLang.C_CLASSPERFILE_OPTIMIZATION_BASE_ALREADY_PROCESSED_LOC ) )
+ .writeLog( '> ' + TEXTMERGE( loLang.C_CLASSPERFILE_OPTIMIZATION_BASE_ALREADY_PROCESSED_LOC ) )
EXIT
ENDIF
@@ -3463,22 +3518,38 @@ DEFINE CLASS c_foxbin2prg AS SESSION
*---------------------------------------------------------------------------------------------------
LPARAMETERS tcProcessed, tcHasErrors, tcSupported, tcReserved
- WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
- IF NOT EMPTY(tcProcessed)
- .a_ProcessedFiles(.n_ProcessedFiles, 2) = EVL(tcProcessed, '')
+ TRY
+ LOCAL loEx as Exception
+
+ WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+ IF .n_ProcessedFiles = 0 THEN
+ EXIT
+ ENDIF
+ IF NOT EMPTY(tcProcessed)
+ .a_ProcessedFiles(.n_ProcessedFiles, 2) = EVL(tcProcessed, '')
+ ENDIF
+ IF NOT EMPTY(tcHasErrors)
+ .a_ProcessedFiles(.n_ProcessedFiles, 3) = EVL(tcHasErrors, '')
+ ENDIF
+ IF NOT EMPTY(tcSupported)
+ .a_ProcessedFiles(.n_ProcessedFiles, 4) = EVL(tcSupported, '')
+ ENDIF
+ .stdOut( .a_ProcessedFiles(.n_ProcessedFiles,2) ;
+ + ',' + .a_ProcessedFiles(.n_ProcessedFiles,3) ;
+ + ',' + .a_ProcessedFiles(.n_ProcessedFiles,4) ;
+ + ',' + .a_ProcessedFiles(.n_ProcessedFiles,5) ;
+ + ',' + LOWER(.a_ProcessedFiles(.n_ProcessedFiles,1)) )
+ ENDWITH
+
+ CATCH TO loEx
+ IF THIS.l_Debug
+ IF _VFP.STARTMODE = 0
+ SET STEP ON
+ ENDIF
ENDIF
- IF NOT EMPTY(tcHasErrors)
- .a_ProcessedFiles(.n_ProcessedFiles, 3) = EVL(tcHasErrors, '')
- ENDIF
- IF NOT EMPTY(tcSupported)
- .a_ProcessedFiles(.n_ProcessedFiles, 4) = EVL(tcSupported, '')
- ENDIF
- .stdOut( .a_ProcessedFiles(.n_ProcessedFiles,2) ;
- + ',' + .a_ProcessedFiles(.n_ProcessedFiles,3) ;
- + ',' + .a_ProcessedFiles(.n_ProcessedFiles,4) ;
- + ',' + .a_ProcessedFiles(.n_ProcessedFiles,5) ;
- + ',' + LOWER(.a_ProcessedFiles(.n_ProcessedFiles,1)) )
- ENDWITH
+ THROW
+
+ ENDTRY
ENDPROC
@@ -3565,7 +3636,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS frm_avance AS FORM
Height = 110
Width = 628
@@ -3984,7 +4055,7 @@ DEFINE CLASS frm_avance AS FORM
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS frm_interactive AS form
Height = 102
Width = 380
@@ -4071,7 +4142,7 @@ DEFINE CLASS frm_interactive AS form
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS C_CONVERSOR_BASE AS SESSION
#IF .F.
LOCAL THIS AS C_CONVERSOR_BASE OF 'FOXBIN2PRG.PRG'
@@ -5590,7 +5661,7 @@ ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE
#IF .F.
LOCAL THIS AS c_conversor_prg_a_bin OF 'FOXBIN2PRG.PRG'
@@ -5607,6 +5678,8 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE
+ [] ;
+ [] ;
+ [] ;
+ + [] ;
+ + [] ;
+ [] ;
+ [] ;
+ [] ;
@@ -5884,7 +5957,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE
LPARAMETERS toModulo
#IF .F.
- LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG'
+ LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG'
#ENDIF
INSERT INTO TABLABIN ;
@@ -5946,7 +6019,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE
LPARAMETERS toModulo
#IF .F.
- LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG'
+ LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG'
#ENDIF
INSERT INTO TABLABIN ;
@@ -6738,7 +6811,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE
EXTERNAL ARRAY taCodeLines
#IF .F.
- LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG'
+ LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG'
LOCAL toClase AS CL_CLASE OF 'FOXBIN2PRG.PRG'
LOCAL toObjeto AS CL_OBJETO OF 'FOXBIN2PRG.PRG'
#ENDIF
@@ -6989,7 +7062,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE
EXTERNAL ARRAY taCodeLines, tnBloquesExclusion, taLineasExclusion
#IF .F.
- LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG'
+ LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG'
LOCAL toClase AS CL_CLASE OF 'FOXBIN2PRG.PRG'
#ENDIF
@@ -7216,7 +7289,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE
LOCAL llBloqueEncontrado
#IF .F.
- LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG'
+ LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG'
LOCAL toClase AS CL_CLASE OF 'FOXBIN2PRG.PRG'
#ENDIF
@@ -7338,7 +7411,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE
LPARAMETERS toModulo, tcLine, taCodeLines, I, tnCodeLines
#IF .F.
- LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG'
+ LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG'
#ENDIF
LOCAL llBloqueEncontrado
@@ -7347,12 +7420,47 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE
LOCAL laPropsAndValues(1,2), lnPropsAndValues_Count
llBloqueEncontrado = .T.
- WITH THIS
+ WITH THIS AS c_conversor_prg_a_bin OF 'FOXBIN2PRG.PRG'
.get_ListNamesWithValuesFrom_InLine_MetadataTag( @tcLine, @laPropsAndValues, @lnPropsAndValues_Count, C_EXTERNAL_CLASS_I, C_EXTERNAL_CLASS_F )
toModulo._ExternalClasses_Count = toModulo._ExternalClasses_Count + 1
- DIMENSION toModulo._ExternalClasses( toModulo._ExternalClasses_Count )
- toModulo._ExternalClasses( toModulo._ExternalClasses_Count ) = .get_ValueByName_FromListNamesWithValues( 'Name', 'C', @laPropsAndValues )
+ DIMENSION toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 2 )
+ toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 1 ) = .get_ValueByName_FromListNamesWithValues( 'Name', 'C', @laPropsAndValues )
+ toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 2 ) = .get_ValueByName_FromListNamesWithValues( 'Baseclass', 'C', @laPropsAndValues ) ;
+ + '.' + toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 1 )
+ ENDWITH && THIS
+ ENDIF
+
+ RETURN llBloqueEncontrado
+ ENDPROC
+
+
+
+
+ PROCEDURE analizarBloque_EXTERNAL_MEMBER
+ *------------------------------------------------------
+ *-- Analiza el bloque *< EXTERNAL_MEMBER: Name="nombre-miembro" Type="tipo-de-miembro" />
+ *------------------------------------------------------
+ LPARAMETERS toDatabase, tcLine, taCodeLines, I, tnCodeLines
+
+ #IF .F.
+ LOCAL toDatabase AS CL_DBC OF 'FOXBIN2PRG.PRG'
+ #ENDIF
+
+ LOCAL llBloqueEncontrado
+
+ IF LEFT(tcLine, C_LEN_EXTERNAL_MEMBER_I) == C_EXTERNAL_MEMBER_I
+ LOCAL laPropsAndValues(1,2), lnPropsAndValues_Count
+ llBloqueEncontrado = .T.
+
+ WITH THIS
+ .get_ListNamesWithValuesFrom_InLine_MetadataTag( @tcLine, @laPropsAndValues, @lnPropsAndValues_Count, C_EXTERNAL_MEMBER_I, C_EXTERNAL_MEMBER_F )
+
+ toDatabase._ExternalClasses_Count = toDatabase._ExternalClasses_Count + 1
+ DIMENSION toDatabase._ExternalClasses( toDatabase._ExternalClasses_Count, 2 )
+ toDatabase._ExternalClasses( toDatabase._ExternalClasses_Count, 1 ) = .get_ValueByName_FromListNamesWithValues( 'Type', 'C', @laPropsAndValues ) ;
+ + '.' + .get_ValueByName_FromListNamesWithValues( 'Name', 'C', @laPropsAndValues )
+ *toDatabase._ExternalClasses( toDatabase._ExternalClasses_Count, 2 ) = .get_ValueByName_FromListNamesWithValues( 'Type', 'C', @laPropsAndValues )
ENDWITH && THIS
ENDIF
@@ -7403,7 +7511,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE
LOCAL llBloqueEncontrado
#IF .F.
- LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG'
+ LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG'
#ENDIF
IF LEFT( tcLine + ' ', C_LEN_OLE_I + 1 ) == C_OLE_I + ' '
@@ -7454,7 +7562,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE
, tc_Comentario, taLineasExclusion, tnBloquesExclusion
#IF .F.
- LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG'
+ LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG'
LOCAL toObjeto AS CL_OBJETO OF 'FOXBIN2PRG.PRG'
LOCAL toClase AS CL_CLASE OF 'FOXBIN2PRG.PRG'
#ENDIF
@@ -7618,7 +7726,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE
EXTERNAL ARRAY taCodeLines, taLineasExclusion
#IF .F.
- LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG'
+ LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG'
LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
#ENDIF
@@ -7635,14 +7743,6 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE
IF tnCodeLines > 1
- *-- Defino el objeto de módulo y sus propiedades
- *toModulo = NULL
- *toModulo = CREATEOBJECT('CL_MODULO')
-
- *IF NOT (toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_RedirectClassPerFileToMain)
- * llEXTERNAL_CLASS_Completed = .T.
- *ENDIF
-
*-- Búsqueda del ID de inicio de bloque (DEFINE CLASS / PROCEDURE)
FOR I = 1 TO tnCodeLines
STORE '' TO lc_Comentario
@@ -7652,26 +7752,6 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE
CASE .lineaExcluida( I, tnBloquesExclusion, @taLineasExclusion ) ;
OR .lineIsOnlyCommentAndNoMetadata( @lcLine, @lc_Comentario ) && Excluida, vacía o solo Comentarios
- *CASE NOT llFoxBin2Prg_Completed AND .analizarBloque_FoxBin2Prg( @toModulo, @lcLine, @taCodeLines, @I, tnCodeLines )
- * llFoxBin2Prg_Completed = .T.
-
- *CASE NOT llEXTERNAL_CLASS_Completed AND .analizarBloque_EXTERNAL_CLASS( @toModulo, @lcLine, @taCodeLines, @I, tnCodeLines )
- *-- Puede haber varias clases externas
-
- *CASE NOT llLIBCOMMENT_Completed AND .analizarBloque_LIBCOMMENT( @toModulo, @lcLine, @taCodeLines, @I, tnCodeLines )
- * llLIBCOMMENT_Completed = .T.
- * llEXTERNAL_CLASS_Completed = .T.
-
- *CASE NOT llOLE_DEF_Completed AND .analizarBloque_OLE_DEF( @toModulo, @lcLine, @taCodeLines ;
- , @I, tnCodeLines, @lcProcedureAbierto )
- *-- Puede haber varios objetos OLE
-
- *CASE NOT llINCLUDE_SCX_Completed AND .c_Type = 'SCX' AND .analizarBloque_INCLUDE( @toModulo, @loClase, @lcLine ;
- , @taCodeLines, @I, tnCodeLines, @lcProcedureAbierto )
- * Específico para SCX que lo tiene al inicio
- * llINCLUDE_SCX_Completed = .T.
- * llEXTERNAL_CLASS_Completed = .T.
-
CASE .analizarBloque_DEFINE_CLASS( @toModulo, @loClase, @lcLine, @taCodeLines, @I, tnCodeLines ;
, @lcProcedureAbierto, @taLineasExclusion, @tnBloquesExclusion, @lc_Comentario )
*-- Puede haber varias clases definidas
@@ -7727,7 +7807,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE
EXTERNAL ARRAY taCodeLines, taLineasExclusion
#IF .F.
- LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG'
+ LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG'
LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
#ENDIF
@@ -7744,11 +7824,8 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE
IF tnCodeLines > 1
- *-- Defino el objeto de módulo y sus propiedades
- *toModulo = NULL
- *toModulo = CREATEOBJECT('CL_MODULO')
-
- IF NOT (toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_RedirectClassPerFileToMain)
+ IF toFoxBin2Prg.n_UseClassPerFile > 0 AND toFoxBin2Prg.l_RedirectClassPerFileToMain
+ ELSE
llEXTERNAL_CLASS_Completed = .T.
ENDIF
@@ -7823,7 +7900,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE
LPARAMETERS toModulo, toFoxBin2Prg
#IF .F.
- LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG'
+ LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG'
LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
#ENDIF
@@ -7832,26 +7909,50 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE
loLang = _SCREEN.o_FoxBin2Prg_Lang
*-- Verificación de las Clases, si son Externas y se indicó chequearlas
- IF toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_ClassPerFileCheck
+ DO CASE
+ CASE toFoxBin2Prg.n_UseClassPerFile = 1 AND toFoxBin2Prg.l_ClassPerFileCheck
+ *-- El ClassPerFile original, con nomenclatura 'Libreria.NombreClase.vc2'
FOR I = 1 TO toModulo._ExternalClasses_Count
lnItem = 0
FOR X = 1 TO toModulo._Clases_Count
- IF LOWER( toModulo._Clases(X)._ObjName ) == LOWER( toModulo._ExternalClasses(I) )
+ IF LOWER( toModulo._Clases(X)._ObjName ) == LOWER( toModulo._ExternalClasses(I,1) )
lnItem = X
EXIT
ENDIF
ENDFOR
IF lnItem = 0 THEN
- lcClaseExterna = FORCEPATH( JUSTSTEM(toFoxBin2Prg.c_InputFile) + '.' + toModulo._ExternalClasses(I) + '.' + JUSTEXT(toFoxBin2Prg.c_InputFile), JUSTPATH(toFoxBin2Prg.c_InputFile) )
- *ERROR 'No se ha encontrado la clase externa [' + toModulo._ExternalClasses(I) + '] en el archivo [' + toFoxBin2Prg.c_InputFile + ']'
+ lcClaseExterna = FORCEPATH( JUSTSTEM(toFoxBin2Prg.c_InputFile) + '.' + toModulo._ExternalClasses(I,1) + '.' + JUSTEXT(toFoxBin2Prg.c_InputFile), JUSTPATH(toFoxBin2Prg.c_InputFile) )
+ *ERROR 'No se ha encontrado la clase externa [' + toModulo._ExternalClasses(I,1) + '] en el archivo [' + toFoxBin2Prg.c_InputFile + ']'
ERROR ( loLang.C_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC + ' [' + lcClaseExterna + ']' )
ENDIF
toModulo._Clases(lnItem)._Checked = .T.
ENDFOR
- ENDIF
+
+ CASE toFoxBin2Prg.n_UseClassPerFile = 2 AND toFoxBin2Prg.l_ClassPerFileCheck
+ *-- El nuevo ClassPerFile, con nomenclatura 'Libreria.ClaseBase.NombreClase.vc2'
+ FOR I = 1 TO toModulo._ExternalClasses_Count
+ lnItem = 0
+
+ FOR X = 1 TO toModulo._Clases_Count
+ IF LOWER( toModulo._Clases(X)._BaseClass + '.' + toModulo._Clases(X)._ObjName ) == LOWER( toModulo._ExternalClasses(I,2) )
+ lnItem = X
+ EXIT
+ ENDIF
+ ENDFOR
+
+ IF lnItem = 0 THEN
+ lcClaseExterna = FORCEPATH( JUSTSTEM(toFoxBin2Prg.c_InputFile) + '.' + toModulo._ExternalClasses(I,1) + '.' + JUSTEXT(toFoxBin2Prg.c_InputFile), JUSTPATH(toFoxBin2Prg.c_InputFile) )
+ *ERROR 'No se ha encontrado la clase externa [' + toModulo._ExternalClasses(I,1) + '] en el archivo [' + toFoxBin2Prg.c_InputFile + ']'
+ ERROR ( loLang.C_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC + ' [' + lcClaseExterna + ']' )
+ ENDIF
+
+ toModulo._Clases(lnItem)._Checked = .T.
+ ENDFOR
+
+ ENDCASE
ENDPROC
@@ -7860,7 +7961,7 @@ ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin
#IF .F.
LOCAL THIS AS c_conversor_prg_a_vcx OF 'FOXBIN2PRG.PRG'
@@ -7874,31 +7975,31 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin
PROCEDURE Convertir
*---------------------------------------------------------------------------------------------------
* PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
- * toModulo (@! OUT) Objeto generado de clase CL_MODULO con la información leida del texto
+ * toModulo (@! OUT) Objeto generado de clase CL_CLASSLIB con la información leida del texto
* toEx (@! OUT) Objeto con información del error
* toFoxBin2Prg (@? IN ) Referencia al objeto principal
*---------------------------------------------------------------------------------------------------
LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxBin2Prg
#IF .F.
- LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG'
+ LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG'
LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
#ENDIF
DODEFAULT( @toModulo, @toEx, @toFoxBin2Prg )
TRY
LOCAL lnCodError, laCodeLines(1), lnCodeLines, lcInputFile, lcInputFile_Class, lnFileCount, laFiles(1,5) ;
- , laLineasExclusion(1), lnBloquesExclusion, I ;
+ , laLineasExclusion(1), lnBloquesExclusion, I, lcClassName ;
, loLang as CL_LANG OF 'FOXBIN2PRG.PRG'
WITH THIS AS c_conversor_prg_a_vcx OF 'FOXBIN2PRG.PRG'
STORE 0 TO lnCodError, lnCodeLines
- STORE '' TO C_FB2PRG_CODE
+ STORE '' TO C_FB2PRG_CODE, lcClassName
STORE NULL TO toModulo
loLang = _SCREEN.o_FoxBin2Prg_Lang
- toModulo = CREATEOBJECT('CL_MODULO')
+ toModulo = CREATEOBJECT('CL_CLASSLIB')
- IF toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_RedirectClassPerFileToMain
+ IF toFoxBin2Prg.n_UseClassPerFile > 0 AND toFoxBin2Prg.l_RedirectClassPerFileToMain
C_FB2PRG_CODE = FILETOSTR( .c_InputFile )
lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE )
@@ -7908,19 +8009,42 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin
.AvanceDelProceso( 'Loading Code...', 2, lnCodeLines, 1 )
- *-- Esto crea la máscara de búsqueda "filename.*.ext" para encontrar las partes
- lcInputFile = FORCEPATH( JUSTSTEM( JUSTSTEM(.c_InputFile) ), JUSTPATH(.c_InputFile) ) + '.*.' + JUSTEXT(.c_InputFile)
+ *-- MÁSCARA DE BÚSQUEDA
+ IF toFoxBin2Prg.n_UseClassPerFile = 1 THEN
+ *-- Esto crea la máscara de búsqueda "filename.*.ext" para encontrar las partes
+ lcBaseFilename = JUSTSTEM( JUSTSTEM(.c_InputFile) )
+ lcInputFile = ADDBS( JUSTPATH(.c_InputFile) ) + lcBaseFilename + '.*.' + JUSTEXT(.c_InputFile)
+ ELSE && toFoxBin2Prg.n_UseClassPerFile = 2
+ *-- Esto crea la máscara de búsqueda "Database.*.*.ext" para encontrar las partes
+ *-- con la sintaxis "Database.MemberType.MemberName.ext"
+ lcBaseFilename = JUSTSTEM( JUSTSTEM( JUSTSTEM(.c_InputFile) ) )
+ lcInputFile = ADDBS( JUSTPATH(.c_InputFile) ) + lcBaseFilename + '.*.*.' + JUSTEXT(.c_InputFile)
+ ENDIF
+
lnFileCount = ADIR( laFiles, lcInputFile, "", 1 )
ASORT( laFiles, 1, 0, 0, 1)
FOR I = 1 TO lnFileCount
- lcInputFile_Class = FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile )
+ IF toFoxBin2Prg.n_UseClassPerFile = 1 THEN
+ lcInputFile_Class = FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile )
+ lcClassName = LOWER( GETWORDNUM( JUSTFNAME( lcInputFile_Class ), 2, '.' ) )
- *-- Verificación de las Clases, si son Externas y se indicó chequearlas
- IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toModulo._ExternalClasses , JUSTEXT( JUSTSTEM( lcInputFile_Class ) ), 1, 0, 1, 1+2+4 ) = 0
- .writeLog( C_TAB + '- ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' )
- .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' )
- LOOP && Salteo esta clase porque no concuerda con las anotadas
+ *-- Verificación de las Clases, si son Externas y se indicó chequearlas
+ IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toModulo._ExternalClasses , lcClassName, 1, 0, 1, 1+2+4 ) = 0
+ .writeLog( C_TAB + '- ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' )
+ .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' )
+ LOOP && Salteo esta clase
+ ENDIF
+ ELSE && toFoxBin2Prg.n_UseClassPerFile = 2
+ lcInputFile_Class = FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile )
+ lcClassName = LOWER( GETWORDNUM( JUSTFNAME( lcInputFile_Class ), 2, '.' ) + '.' + GETWORDNUM( JUSTFNAME( lcInputFile_Class ), 3, '.' ) )
+
+ *-- Verificación de las Clases, si son Externas y se indicó chequearlas
+ IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toModulo._ExternalClasses , lcClassName, 1, 0, 2, 1+2+4 ) = 0
+ .writeLog( C_TAB + '- ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' )
+ .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' )
+ LOOP && Salteo esta clase porque no concuerda con las anotadas
+ ENDIF
ENDIF
.writeLog( C_TAB + '+ ' + loLang.C_INCLUDING_CLASS_LOC + ' ' + JUSTFNAME( lcInputFile_Class ) )
@@ -8052,7 +8176,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin
*-- ProcLines[1] Líneas del procedimiento
*-- -----------------------------------------------------------------------------------------------------------
#IF .F.
- LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG'
+ LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG'
LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
#ENDIF
@@ -8222,7 +8346,7 @@ ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin
#IF .F.
LOCAL THIS AS c_conversor_prg_a_scx OF 'FOXBIN2PRG.PRG'
@@ -8236,13 +8360,13 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin
PROCEDURE Convertir
*---------------------------------------------------------------------------------------------------
* PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
- * toModulo (@! OUT) Objeto generado de clase CL_MODULO con la información leida del texto
+ * toModulo (@! OUT) Objeto generado de clase CL_CLASSLIB con la información leida del texto
* toEx (@! OUT) Objeto con información del error
* toFoxBin2Prg (@! IN ) Referencia al objeto principal
*---------------------------------------------------------------------------------------------------
LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxBin2Prg
#IF .F.
- LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG'
+ LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG'
LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
#ENDIF
DODEFAULT( @toModulo, @toEx, @toFoxBin2Prg )
@@ -8258,9 +8382,9 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin
STORE NULL TO toModulo
loLang = _SCREEN.o_FoxBin2Prg_Lang
- toModulo = CREATEOBJECT('CL_MODULO')
+ toModulo = CREATEOBJECT('CL_CLASSLIB')
- IF toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_RedirectClassPerFileToMain
+ IF toFoxBin2Prg.n_UseClassPerFile > 0 AND toFoxBin2Prg.l_RedirectClassPerFileToMain
C_FB2PRG_CODE = FILETOSTR( .c_InputFile )
lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE )
@@ -8270,19 +8394,42 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin
.AvanceDelProceso( 'Loading Code...', 2, lnCodeLines, 1 )
- *-- Esto crea la máscara de búsqueda "filename.*.ext" para encontrar las partes
- lcInputFile = FORCEPATH( JUSTSTEM( JUSTSTEM(.c_InputFile) ), JUSTPATH(.c_InputFile) ) + '.*.' + JUSTEXT(.c_InputFile)
+ *-- MÁSCARA DE BÚSQUEDA
+ IF toFoxBin2Prg.n_UseClassPerFile = 1 THEN
+ *-- Esto crea la máscara de búsqueda "filename.*.ext" para encontrar las partes
+ lcBaseFilename = JUSTSTEM( JUSTSTEM(.c_InputFile) )
+ lcInputFile = ADDBS( JUSTPATH(.c_InputFile) ) + lcBaseFilename + '.*.' + JUSTEXT(.c_InputFile)
+ ELSE && toFoxBin2Prg.n_UseClassPerFile = 2
+ *-- Esto crea la máscara de búsqueda "Database.*.*.ext" para encontrar las partes
+ *-- con la sintaxis "Database.MemberType.MemberName.ext"
+ lcBaseFilename = JUSTSTEM( JUSTSTEM( JUSTSTEM(.c_InputFile) ) )
+ lcInputFile = ADDBS( JUSTPATH(.c_InputFile) ) + lcBaseFilename + '.*.*.' + JUSTEXT(.c_InputFile)
+ ENDIF
+
lnFileCount = ADIR( laFiles, lcInputFile, "", 1 )
ASORT( laFiles, 1, 0, 0, 1)
FOR I = 1 TO lnFileCount
- lcInputFile_Class = FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile )
+ IF toFoxBin2Prg.n_UseClassPerFile = 1 THEN
+ lcInputFile_Class = FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile )
+ lcClassName = LOWER( GETWORDNUM( JUSTFNAME( lcInputFile_Class ), 2, '.' ) )
- *-- Verificación de las Clases, si son Externas y se indicó chequearlas
- IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toModulo._ExternalClasses , JUSTEXT( JUSTSTEM( lcInputFile_Class ) ), 1, 0, 1, 1+2+4 ) = 0
- .writeLog( C_TAB + '- ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' )
- .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' )
- LOOP && Salteo esta clase
+ *-- Verificación de las Clases, si son Externas y se indicó chequearlas
+ IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toModulo._ExternalClasses , lcClassName, 1, 0, 1, 1+2+4 ) = 0
+ .writeLog( C_TAB + '- ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' )
+ .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' )
+ LOOP && Salteo esta clase
+ ENDIF
+ ELSE && toFoxBin2Prg.n_UseClassPerFile = 2
+ lcInputFile_Class = FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile )
+ lcClassName = LOWER( GETWORDNUM( JUSTFNAME( lcInputFile_Class ), 2, '.' ) + '.' + GETWORDNUM( JUSTFNAME( lcInputFile_Class ), 3, '.' ) )
+
+ *-- Verificación de las Clases, si son Externas y se indicó chequearlas
+ IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toModulo._ExternalClasses , lcClassName, 1, 0, 2, 1+2+4 ) = 0
+ .writeLog( C_TAB + '- ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' )
+ .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' )
+ LOOP && Salteo esta clase
+ ENDIF
ENDIF
.writeLog( C_TAB + '+ ' + loLang.C_INCLUDING_CLASS_LOC + ' ' + JUSTFNAME( lcInputFile_Class ) )
@@ -8414,7 +8561,7 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin
*-- ProcLines[1] Líneas del procedimiento
*-- -----------------------------------------------------------------------------------------------------------
#IF .F.
- LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG'
+ LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG'
LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
#ENDIF
@@ -8581,7 +8728,7 @@ ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin
#IF .F.
LOCAL THIS AS c_conversor_prg_a_pjx OF 'FOXBIN2PRG.PRG'
@@ -9387,7 +9534,7 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin
#IF .F.
LOCAL THIS AS c_conversor_prg_a_frx OF 'FOXBIN2PRG.PRG'
@@ -9830,7 +9977,7 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin
ENDDEFINE && CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin
-*******************************************************************************************************************
+
DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin
#IF .F.
LOCAL THIS AS c_conversor_prg_a_dbf OF 'FOXBIN2PRG.PRG'
@@ -10090,11 +10237,10 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin
FOR I = 1 TO tnCodeLines
.set_Line( @lcLine, @taCodeLines, I )
- IF .lineIsOnlyCommentAndNoMetadata( @lcLine, @lc_Comentario ) && Vacía o solo Comentarios
- LOOP
- ENDIF
-
DO CASE
+ CASE .lineIsOnlyCommentAndNoMetadata( @lcLine, @lc_Comentario ) && Vacía o solo Comentarios
+ LOOP
+
CASE NOT llFoxBin2Prg_Completed AND .analizarBloque_FoxBin2Prg( toTable, @lcLine, @taCodeLines, @I, tnCodeLines )
llFoxBin2Prg_Completed = .T.
@@ -10125,7 +10271,7 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin
ENDDEFINE && CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin
-*******************************************************************************************************************
+
DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin
#IF .F.
LOCAL THIS AS c_conversor_prg_a_dbc OF 'FOXBIN2PRG.PRG'
@@ -10138,6 +10284,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin
+ [] ;
+ [] ;
+ [] ;
+ + [] ;
+ []
c_Type = 'DC2'
@@ -10158,19 +10305,152 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin
#ENDIF
TRY
- LOCAL lnCodError, loEx AS EXCEPTION, loReg, lcLine, laCodeLines(1), lnCodeLines ;
- , laLineasExclusion(1), lnBloquesExclusion, I
- STORE 0 TO lnCodError, lnCodeLines
- STORE '' TO lcLine
- STORE NULL TO loReg, toModulo
+ LOCAL lnCodError, loEx AS EXCEPTION, loReg, lcLine, laCodeLines(1), lnCodeLines, lcBaseFilename ;
+ , lcMemberType, lcMemberName, lcLastMemberType ;
+ , laLineasExclusion(1), lnBloquesExclusion, I, X, Y, laFiles(1,5), lnFileCount, lcTempTxt, laLines(1) ;
+ , loLang as CL_LANG OF 'FOXBIN2PRG.PRG'
+ STORE 0 TO lnCodError, lnCodeLines, lnFileCount
+ STORE '' TO lcLine, laLines, laCodeLines, lcBaseFilename, lcMemberType, lcLastMemberType, lcMemberName
+ STORE NULL TO loReg, toDatabase
WITH THIS AS c_conversor_prg_a_dbc OF 'FOXBIN2PRG.PRG'
- C_FB2PRG_CODE = FILETOSTR( .c_InputFile )
+ loLang = _SCREEN.o_FoxBin2Prg_Lang
+ toDatabase = CREATEOBJECT('CL_DBC')
+
+ IF toFoxBin2Prg.n_UseClassPerFile > 0 AND toFoxBin2Prg.l_RedirectClassPerFileToMain
+ C_FB2PRG_CODE = FILETOSTR( .c_InputFile )
+ lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE )
+ C_FB2PRG_CODE = ''
+
+ *-- Quito la última parte del cierre de para anexar lo intermedio
+ FOR X = 1 TO lnCodeLines
+ IF C_DATABASE_F $ laCodeLines(X) THEN
+ EXIT
+ ENDIF
+ C_FB2PRG_CODE = C_FB2PRG_CODE + laCodeLines(X) + CR_LF
+ ENDFOR
+
+ .AvanceDelProceso( 'Identifying Header Blocks...', 1, lnCodeLines, 1 )
+ .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toDatabase, @toFoxBin2Prg )
+
+ .AvanceDelProceso( 'Loading Code...', 2, lnCodeLines, 1 )
+
+ *-- Esto crea la máscara de búsqueda "Database.*.*.ext" para encontrar las partes
+ *-- con la sintaxis "Database.MemberType.MemberName.ext"
+ lcBaseFilename = JUSTSTEM( JUSTSTEM( JUSTSTEM(.c_InputFile) ) )
+ lcInputFile = ADDBS( JUSTPATH(.c_InputFile) ) + lcBaseFilename + '.*.*.' + JUSTEXT(.c_InputFile)
+ lnFileCount = ADIR( laFiles, lcInputFile, "", 1 )
+
+ *-- Busco "storedprocedures" y le pongo "z" al inicio
+ FOR I = 1 TO lnFileCount
+ IF LOWER( laFiles(I,1)) == lcBaseFilename + '.storedprocedures.sp.' + JUSTEXT(.c_InputFile) THEN
+ laFiles(I,1) = lcBaseFilename + '.zstoredprocedures.sp.' + JUSTEXT(.c_InputFile)
+ EXIT
+ ENDIF
+ ENDFOR
+
+ ASORT( laFiles, 1, -1, 0, 1) && "zstoredprocedures" quedará al final
+
+ *-- Busco "zstoredprocedures" y le quito la "z" del inicio
+ FOR I = 1 TO lnFileCount
+ IF LOWER( laFiles(I,1)) == lcBaseFilename + '.zstoredprocedures.sp.' + JUSTEXT(.c_InputFile) THEN
+ laFiles(I,1) = lcBaseFilename + '.storedprocedures.sp.' + JUSTEXT(.c_InputFile)
+ EXIT
+ ENDIF
+ ENDFOR
+
+ FOR I = 1 TO lnFileCount
+ lcInputFile_Class = FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile )
+ lcMemberType = LOWER( GETWORDNUM( JUSTFNAME( lcInputFile_Class ), 2, '.' ) )
+ lcMemberName = LOWER( GETWORDNUM( JUSTFNAME( lcInputFile_Class ), 3, '.' ) )
+
+ IF NOT lcMemberType == lcLastMemberType THEN
+ IF NOT EMPTY(lcLastMemberType) THEN
+ *-- Cambio de tipo de miembro, fin del anterior (connection, table, view, storedprocedures)
+ DO CASE
+ CASE lcLastMemberType == 'connection'
+ C_FB2PRG_CODE = C_FB2PRG_CODE + C_TAB + C_CONNECTIONS_F + CR_LF
+ CASE lcLastMemberType == 'table'
+ C_FB2PRG_CODE = C_FB2PRG_CODE + C_TAB + C_TABLES_F + CR_LF
+ CASE lcLastMemberType == 'view'
+ C_FB2PRG_CODE = C_FB2PRG_CODE + C_TAB + C_VIEWS_F + CR_LF
+ CASE lcLastMemberType == 'storedprocedures'
+ *C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + CR_LF
+ ENDCASE
+ ENDIF
+
+ *-- Cambio de tipo de miembro, inicio del actual (connection, table, view, storedprocedures)
+ DO CASE
+ CASE lcMemberType == 'connection'
+ C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + CR_LF + C_TAB + C_CONNECTIONS_I + CR_LF
+ CASE lcMemberType == 'table'
+ C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + CR_LF + C_TAB + C_TABLES_I + CR_LF
+ CASE lcMemberType == 'view'
+ C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + CR_LF + C_TAB + C_VIEWS_I + CR_LF
+ CASE lcMemberType == 'storedprocedures'
+ C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + CR_LF
+ ENDCASE
+ ENDIF
+
+ *-- Verificación de los Miembros, si son Externos y se indicó chequearlos
+ IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toDatabase._ExternalClasses, lcMemberType + '.' + lcMemberName, 1, 0, 1, 1+2+4 ) = 0
+ .writeLog( C_TAB + '- ' + loLang.C_OUTER_MEMBER_DOES_NOT_MATCH_INNER_MEMBERS_LOC + ' [' + lcInputFile_Class + ']' )
+ .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_OUTER_MEMBER_DOES_NOT_MATCH_INNER_MEMBERS_LOC + ' [' + lcInputFile_Class + ']' )
+ LOOP && Salteo este miembro porque no concuerda con los anotados
+ ENDIF
+
+ .writeLog( C_TAB + '+ ' + loLang.C_INCLUDING_CLASS_LOC + ' ' + JUSTFNAME( lcInputFile_Class ) )
+
+ *-- addProcessedFile( tcInputFile, tcProcessed, tcHasErrors, tcSupported, tcReserved )
+ IF toFoxBin2Prg.addProcessedFile( lcInputFile_Class, 'P2', 'E0', 'S1', 'RR' ) THEN
+ toFoxBin2Prg.updateProcessedFile()
+ ENDIF
+
+ toFoxBin2Prg.normalizarCapitalizacionArchivos( .T., lcInputFile_Class )
+ lcTempTxt = FILETOSTR( lcInputFile_Class )
+
+ FOR Y = 7 TO ALINES( laLines, lcTempTxt )
+ C_FB2PRG_CODE = C_FB2PRG_CODE + laLines(Y) + CR_LF
+ ENDFOR
+
+ lcLastMemberType = lcMemberType
+ ENDFOR
+
+ IF NOT EMPTY(lcLastMemberType) THEN
+ *-- Cambio de tipo de miembro, fin del anterior (connection, table, view, storedprocedures)
+ DO CASE
+ CASE lcLastMemberType == 'connection'
+ C_FB2PRG_CODE = C_FB2PRG_CODE + C_TAB + C_CONNECTIONS_F + CR_LF
+ CASE lcLastMemberType == 'table'
+ C_FB2PRG_CODE = C_FB2PRG_CODE + C_TAB + C_TABLES_F + CR_LF
+ CASE lcLastMemberType == 'view'
+ C_FB2PRG_CODE = C_FB2PRG_CODE + C_TAB + C_VIEWS_F + CR_LF
+ CASE lcLastMemberType == 'storedprocedures'
+ *C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + CR_LF
+ ENDCASE
+ ENDIF
+
+ *-- Agrego la última parte con el cierre de
+ FOR X = X TO lnCodeLines
+ C_FB2PRG_CODE = C_FB2PRG_CODE + laCodeLines(X) + CR_LF
+ ENDFOR
+
+ ELSE
+ *-- No es clase por archivo, o no se quiere redireccionar a Main.
+ C_FB2PRG_CODE = FILETOSTR( .c_InputFile )
+
+ lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE )
+
+ .AvanceDelProceso( 'Identifying Header Blocks...', 1, lnCodeLines, 1 )
+ .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toDatabase, @toFoxBin2Prg )
+
+ ENDIF
+
lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE )
*-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte
.AvanceDelProceso( 'Identifying Code Blocks...', 1, 2, 1 )
- .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toDatabase )
+ .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toDatabase, @toFoxBin2Prg )
IF .l_Error
.writeLog( '*** ERRORS found - Generation Cancelled' )
@@ -10211,10 +10491,21 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin
#ENDIF
TRY
- LOCAL lnCodError
+ LOCAL lnCodError, lcEventsFile
lnCodError = 0
- IF NOT EMPTY(toDatabase._DBCEventFilename) AND FILE(toDatabase._DBCEventFilename)
+ IF NOT EMPTY(toDatabase._DBCEventFilename)
+ IF LEFT(toDatabase._DBCEventFilename,1) = '.' THEN
+ lcEventsFile = ADDBS( JUSTPATH(.c_InputFile) ) + toDatabase._DBCEventFilename
+ ELSE
+ lcEventsFile = toDatabase._DBCEventFilename
+ ENDIF
+ IF FILE(lcEventsFile) THEN
+ lcEventsFile = ''
+ ELSE
+ STRTOFILE( '', lcEventsFile )
+ ENDIF
+
*-- Si no recompilo el EventFilename.prg, el EXE dará un error (aunque el PRG no)
COMPILE ( ADDBS( JUSTPATH( THIS.c_OutputFile ) ) + toDatabase._DBCEventFilename )
ENDIF
@@ -10234,6 +10525,12 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin
THROW
+ FINALLY
+ IF NOT EMPTY(lcEventsFile) THEN
+ ERASE (lcEventsFile)
+ ERASE (FORCEEXT(lcEventsFile,'FXP'))
+ ENDIF
+
ENDTRY
RETURN lnCodError
@@ -10241,6 +10538,86 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin
+ PROCEDURE identificarBloquesDeCabecera
+ *--------------------------------------------------------------------------------------------------------------
+ * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
+ * taCodeLines (@! IN ) El array con las líneas del código donde buscar
+ * tnCodeLines (@! IN ) Cantidad de líneas de código
+ * taLineasExclusion (@! IN ) Array unidimensional con un .T. o .F. según la línea sea de exclusión o no
+ * tnBloquesExclusion (@! IN ) Cantidad de bloques de exclusión
+ * toDatabase (@? OUT) Objeto con toda la información del módulo analizado
+ * toFoxBin2Prg (@? IN ) Referencia al objeto principal
+ *--------------------------------------------------------------------------------------------------------------
+ * NOTA:
+ * Como identificador se usa el nombre de clase o de procedimiento, según corresponda.
+ *--------------------------------------------------------------------------------------------------------------
+ LPARAMETERS taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toDatabase, toFoxBin2Prg
+
+ EXTERNAL ARRAY taCodeLines, taLineasExclusion
+
+ #IF .F.
+ LOCAL toDatabase AS CL_DBC OF 'FOXBIN2PRG.PRG'
+ LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+ #ENDIF
+
+ TRY
+ LOCAL I, loEx AS EXCEPTION ;
+ , llFoxBin2Prg_Completed, llOLE_DEF_Completed, llINCLUDE_SCX_Completed, llLIBCOMMENT_Completed, llEXTERNAL_MEMBER_Completed ;
+ , lc_Comentario, lcProcedureAbierto, lcLine ;
+ , loClase AS CL_CLASE OF 'FOXBIN2PRG.PRG'
+
+ WITH THIS AS c_conversor_prg_a_bin OF 'FOXBIN2PRG.PRG'
+ STORE '' TO lcProcedureAbierto
+
+ .c_Type = UPPER(JUSTEXT(.c_OutputFile))
+
+ IF tnCodeLines > 1
+
+ IF toFoxBin2Prg.n_UseClassPerFile > 0 AND toFoxBin2Prg.l_RedirectClassPerFileToMain
+ ELSE
+ llEXTERNAL_MEMBER_Completed = .T.
+ ENDIF
+
+ *-- Búsqueda del ID de inicio de bloque (DEFINE CLASS / PROCEDURE)
+ FOR I = 1 TO tnCodeLines
+ STORE '' TO lc_Comentario
+ .set_Line( @lcLine, @taCodeLines, I )
+
+ DO CASE
+ CASE .lineIsOnlyCommentAndNoMetadata( @lcLine, @lc_Comentario ) && Excluida, vacía o solo Comentarios
+
+ CASE NOT llFoxBin2Prg_Completed AND .analizarBloque_FoxBin2Prg( @toDatabase, @lcLine, @taCodeLines, @I, tnCodeLines )
+ llFoxBin2Prg_Completed = .T.
+
+ CASE NOT llEXTERNAL_MEMBER_Completed AND .analizarBloque_EXTERNAL_MEMBER( @toDatabase, @lcLine, @taCodeLines, @I, tnCodeLines )
+ *-- Puede haber varias clases externas
+
+ ENDCASE
+
+ ENDFOR
+
+ ENDIF
+ ENDWITH && THIS
+
+ CATCH TO loEx
+ IF THIS.l_Debug AND _VFP.STARTMODE = 0
+ SET STEP ON
+ ENDIF
+
+ THROW
+
+ FINALLY
+ STORE NULL TO loClase
+ RELEASE taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toDatabase, loClase, I ;
+ , llFoxBin2Prg_Completed, llOLE_DEF_Completed, llINCLUDE_SCX_Completed, llLIBCOMMENT_Completed ;
+ , lc_Comentario, lcProcedureAbierto, lcLine
+ ENDTRY
+
+ RETURN
+ ENDPROC
+
+
+
PROCEDURE identificarBloquesDeCodigo
*--------------------------------------------------------------------------------------------------------------
* PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
@@ -10248,17 +10625,19 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin
* tnCodeLines (!@ IN ) Cantidad de líneas de código
* taLineasExclusion (@! IN ) Array unidimensional con un .T. o .F. según la línea sea de exclusión o no
* tnBloquesExclusion (@? IN ) Sin uso
- * toDatabase (@? OUT) Objeto con toda la información de la base de datos analizada
- *
+ * toDatabase (@! IN ) Objeto con toda la información de la base de datos analizada
+ * toFoxBin2Prg (v! IN ) Referencia al objeto principal
+ *--------------------------------------------------------------------------------------------------------------
* NOTA:
* Como identificador se usa el nombre de clase o de procedimiento, según corresponda.
*--------------------------------------------------------------------------------------------------------------
- LPARAMETERS taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toDatabase
+ LPARAMETERS taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toDatabase, toFoxBin2Prg
EXTERNAL ARRAY taCodeLines, taLineasExclusion
#IF .F.
LOCAL toDatabase AS CL_DBC OF 'FOXBIN2PRG.PRG'
+ LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
#ENDIF
TRY
@@ -10269,25 +10648,23 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin
.c_Type = UPPER(JUSTEXT(.c_OutputFile))
IF tnCodeLines > 1
- toDatabase = NULL
- toDatabase = CREATEOBJECT('CL_DBC')
FOR I = 1 TO tnCodeLines
.set_Line( @lcLine, @taCodeLines, I )
- IF .lineIsOnlyCommentAndNoMetadata( @lcLine, @lc_Comentario ) && Vacía o solo Comentarios
- LOOP
- ENDIF
-
DO CASE
+ CASE .lineIsOnlyCommentAndNoMetadata( @lcLine, @lc_Comentario ) && Vacía o solo Comentarios
+
CASE NOT llFoxBin2Prg_Completed AND .analizarBloque_FoxBin2Prg( toDatabase, @lcLine, @taCodeLines, @I, tnCodeLines )
llFoxBin2Prg_Completed = .T.
- CASE NOT llBloqueDatabase_Completed AND toDatabase.analizarBloque( @lcLine, @taCodeLines, @I, tnCodeLines )
+ CASE NOT llBloqueDatabase_Completed AND toDatabase.analizarBloque( @lcLine, @taCodeLines, @I, tnCodeLines, @toFoxBin2Prg )
llBloqueDatabase_Completed = .T.
ENDCASE
ENDFOR
+
+ .verificar_MIEMBROS_EXTERNOS( @toDatabase, @toFoxBin2Prg )
ENDIF
ENDWITH && THIS
@@ -10307,10 +10684,53 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin
ENDPROC
+ PROCEDURE verificar_MIEMBROS_EXTERNOS
+ *--------------------------------------------------------------------------------
+ * Compara los miembros definidos en la cabecera con los miembros encontrados luego
+ *--------------------------------------------------------------------------------------------------------------
+ * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
+ * toDatabase (@! IN ) Objeto con toda la información del módulo analizado
+ * toFoxBin2Prg (@! IN ) Referencia al objeto principal
+ *--------------------------------------------------------------------------------------------------------------
+ LPARAMETERS toDatabase, toFoxBin2Prg
+
+ #IF .F.
+ LOCAL toDatabase AS CL_DBC OF 'FOXBIN2PRG.PRG'
+ LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+ #ENDIF
+
+ LOCAL lnItem, I, X, lcClaseExterna
+ LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG'
+ loLang = _SCREEN.o_FoxBin2Prg_Lang
+
+ *-- Verificación de los Miembros, si son Externos y se indicó chequearlos
+ IF toFoxBin2Prg.n_UseClassPerFile > 0 AND toFoxBin2Prg.l_ClassPerFileCheck
+ FOR I = 1 TO toDatabase._ExternalClasses_Count
+ lnItem = 0
+
+ FOR X = 1 TO toDatabase._Members_Count
+ IF LOWER( toDatabase._Members(X,1) ) == LOWER( toDatabase._ExternalClasses(I,1) )
+ lnItem = X
+ EXIT
+ ENDIF
+ ENDFOR
+
+ IF lnItem = 0 THEN
+ lcClaseExterna = FORCEPATH( JUSTSTEM(toFoxBin2Prg.c_InputFile) + '.' + toDatabase._ExternalClasses(I,1) + '.' + JUSTEXT(toFoxBin2Prg.c_InputFile), JUSTPATH(toFoxBin2Prg.c_InputFile) )
+ *ERROR 'No se ha encontrado la clase externa [' + toDatabase._ExternalClasses(I,1) + '] en el archivo [' + toFoxBin2Prg.c_InputFile + ']'
+ ERROR ( loLang.C_EXTERNAL_CLASS_NAME_WAS_NOT_FOUND_LOC + ' [' + lcClaseExterna + ']' )
+ ENDIF
+
+ toDatabase._Members(lnItem,2) = .T. && Checked
+ ENDFOR
+ ENDIF
+ ENDPROC
+
+
ENDDEFINE && CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin
-*******************************************************************************************************************
+
DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin
#IF .F.
LOCAL THIS AS c_conversor_prg_a_mnx OF 'FOXBIN2PRG.PRG'
@@ -10491,7 +10911,7 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin
ENDDEFINE && CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin
-*******************************************************************************************************************
+
DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE
#IF .F.
LOCAL THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG'
@@ -10535,6 +10955,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE
+ [] ;
+ [] ;
+ [] ;
+ + [] ;
+ [] ;
+ [] ;
+ [] ;
@@ -11202,7 +11623,12 @@ DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE
ENDIF
toEx.UserValue = toEx.UserValue + lcLocation + CR_LF
- toEx.UserValue = toEx.UserValue + '> ' + laCodeLines(THIS.n_Methods_LineNo) + CR_LF
+
+ IF THIS.n_Methods_LineNo = 0 THEN
+ toEx.UserValue = toEx.UserValue + '> (no evaluated code yet)' + CR_LF
+ ELSE
+ toEx.UserValue = toEx.UserValue + '> ' + laCodeLines(THIS.n_Methods_LineNo) + CR_LF
+ ENDIF
ENDIF
toEx.UserValue = toEx.UserValue + 'Recno: ' + TRANSFORM(RECNO()) + CR_LF
@@ -11854,6 +12280,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
@@ -12201,7 +12651,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE
IF llFileExists AND FILETOSTR( tcOutputFile ) == tcCodigo THEN
*.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' )
- THIS.writeLog( TEXTMERGE(loLang.C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) )
+ THIS.writeLog( '> ' + TEXTMERGE(loLang.C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) )
ELSE
IF llFileExists THEN
@@ -12210,7 +12660,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE
ENDIF
lnBytes = STRTOFILE( tcCodigo, tcOutputFile )
- THIS.writeLog( loLang.C_FILENAME_LOC + ': ' + tcOutputFile + ' (' + ALLTRIM(TRANSFORM(lnBytes/1024,'######.##')) + '/' + ALLTRIM(TRANSFORM(LEN(tcCodigo)/1024,'######.##')) + ' KiB)' )
+ THIS.writeLog( '> ' + loLang.C_FILENAME_LOC + ': ' + tcOutputFile + ' (' + ALLTRIM(TRANSFORM(lnBytes/1024,'######.##')) + '/' + ALLTRIM(TRANSFORM(LEN(tcCodigo)/1024,'######.##')) + ' KiB)' )
*THIS.writeLog( '- ' + loLang.C_GENERATED_FILE_SIZE_LOC )
IF lnBytes = 0
@@ -12293,7 +12743,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg
#IF .F.
LOCAL THIS AS c_conversor_vcx_a_prg OF 'FOXBIN2PRG.PRG'
@@ -12304,7 +12754,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg
PROCEDURE Convertir
*---------------------------------------------------------------------------------------------------
* PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
- * toModulo (!@ OUT) Objeto generado de clase CL_MODULO con la información leida del texto
+ * toModulo (!@ OUT) Objeto generado de clase CL_CLASSLIB con la información leida del texto
* toEx (!@ OUT) Objeto con información del error
* toFoxBin2Prg (v! IN ) Referencia al objeto principal
*---------------------------------------------------------------------------------------------------
@@ -12317,7 +12767,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg
TRY
LOCAL lnCodError, loRegClass, loRegObj, lnMethodCount, laMethods(1), laCode(1), laProtected(1), lnLen, lnObjCount ;
, laPropsAndValues(1), laPropsAndComments(1), lnLastClass, lnRecno, lcMethods, lcObjName, la_NombresObjsOle(1) ;
- , laObjs(1,4), I, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count, lcCodigo, laClasses(1,2) ;
+ , laObjs(1,4), I, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count, lcCodigo, laClasses(1,3) ;
, lnClassCount, lcOutputFile, lcExternalHeader, lnClassTotal, lnStepCount, lnStep, lcObjPathInsideClass, lnPos ;
, loLang as CL_LANG OF 'FOXBIN2PRG.PRG'
STORE 0 TO lnCodError, lnLastClass, lnObjCount, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count ;
@@ -12365,7 +12815,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg
STORE 0 TO lnMethodCount
STORE '' TO laMethods, laCode, lcCodigo
lnClassCount = lnClassCount + 1
- DIMENSION laClasses(lnClassCount,2)
+ DIMENSION laClasses(lnClassCount,3)
loRegClass = NULL
SCATTER MEMO NAME loRegClass
@@ -12387,6 +12837,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg
lcObjName = ALLTRIM( loRegClass.OBJNAME )
laClasses(lnClassCount,1) = LOWER( lcObjName )
+ laClasses(lnClassCount,3) = loRegClass.BASECLASS
lnStep = lnStep + 1
.AvanceDelProceso( 'Processing Class ' + lcObjName + '...', lnStep, lnClassTotal*lnStepCount, 1 )
@@ -12397,7 +12848,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg
.write_CLASSMETADATA( @loRegClass, @lcCodigo )
- IF toFoxBin2Prg.l_UseClassPerFile
+ IF toFoxBin2Prg.n_UseClassPerFile > 0 THEN
.write_EXTERNAL_CLASS_HEADER( @loRegClass, @toFoxBin2Prg, @lcExternalHeader )
ENDIF
@@ -12537,7 +12988,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg
laClasses(lnClassCount,2) = lcCodigo
ENDSCAN
- IF toFoxBin2Prg.l_UseClassPerFile
+ IF toFoxBin2Prg.n_UseClassPerFile > 0 THEN
lcExternalHeader = lcExternalHeader + CR_LF
ENDIF
@@ -12555,21 +13006,32 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg
ENDFOR
toModulo = lcCodigo
ELSE
- IF toFoxBin2Prg.l_UseClassPerFile
+ DO CASE
+ CASE toFoxBin2Prg.n_UseClassPerFile = 1 && LibName.ClassName.SC2
.write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg )
FOR I = 1 TO lnClassCount
- lcOutputFile = FORCEPATH( JUSTSTEM( .c_OutputFile ), JUSTPATH( .c_OutputFile ) ) + '.' + laClasses(I,1) + '.' + JUSTEXT( .c_OutputFile )
+ lcOutputFile = ADDBS( JUSTPATH( .c_OutputFile ) ) + JUSTSTEM( .c_OutputFile ) + '.' + laClasses(I,1) + '.' + JUSTEXT( .c_OutputFile )
lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + laClasses(I,2)
.write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg )
ENDFOR
- ELSE
+
+ CASE toFoxBin2Prg.n_UseClassPerFile = 2 && LibName.BaseClass.ClassName.SC2
+ .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg )
+
+ FOR I = 1 TO lnClassCount
+ 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
+
+ OTHERWISE
FOR I = 1 TO lnClassCount
lcCodigo = lcCodigo + laClasses(I,2)
ENDFOR
.write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg )
- ENDIF
+ ENDCASE
ENDIF
ENDWITH && THIS
@@ -12599,7 +13061,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg
#IF .F.
LOCAL THIS AS c_conversor_scx_a_prg OF 'FOXBIN2PRG.PRG'
@@ -12610,7 +13072,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg
PROCEDURE Convertir
*---------------------------------------------------------------------------------------------------
* PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
- * toModulo (!@ OUT) Objeto generado de clase CL_MODULO con la información leida del texto
+ * toModulo (!@ OUT) Objeto generado de clase CL_CLASSLIB con la información leida del texto
* toEx (!@ OUT) Objeto con información del error
* toFoxBin2Prg (v! IN ) Referencia al objeto principal
*---------------------------------------------------------------------------------------------------
@@ -12618,14 +13080,14 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg
DODEFAULT( @toModulo, @toEx, @toFoxBin2Prg )
#IF .F.
- LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG'
+ LOCAL toModulo AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG'
LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
#ENDIF
TRY
LOCAL lnCodError, loRegClass, loRegObj, lnMethodCount, laMethods(1), laCode(1), laProtected(1), lnLen, lnObjCount ;
, laPropsAndValues(1), laPropsAndComments(1), lnLastClass, lnRecno, lcMethods, lcObjName, la_NombresObjsOle(1) ;
- , laObjs(1,4), I, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count, lcCodigo, laClasses(1,2) ;
+ , laObjs(1,4), I, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count, lcCodigo, laClasses(1,3) ;
, lnClassCount, lcOutputFile, lcExternalHeader, lnClassTotal, lnStepCount, lnStep, lcObjPathInsideClass, lnPos ;
, loLang as CL_LANG OF 'FOXBIN2PRG.PRG'
STORE 0 TO lnCodError, lnLastClass, lnObjCount, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count ;
@@ -12688,7 +13150,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg
STORE 0 TO lnMethodCount
STORE '' TO laMethods, laCode, lcCodigo
lnClassCount = lnClassCount + 1
- DIMENSION laClasses(lnClassCount,2)
+ DIMENSION laClasses(lnClassCount,3)
loRegClass = NULL
SCATTER MEMO NAME loRegClass
@@ -12710,6 +13172,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg
lcObjName = ALLTRIM(loRegClass.OBJNAME)
laClasses(lnClassCount,1) = LOWER( lcObjName )
+ laClasses(lnClassCount,3) = loRegClass.BASECLASS
lnStep = lnStep + 1
.AvanceDelProceso( 'Processing Class ' + lcObjName + '...', lnStep, lnClassTotal*lnStepCount, 1 )
@@ -12720,7 +13183,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg
.write_CLASSMETADATA( @loRegClass, @lcCodigo )
- IF toFoxBin2Prg.l_UseClassPerFile
+ IF toFoxBin2Prg.n_UseClassPerFile > 0 THEN
.write_EXTERNAL_CLASS_HEADER( @loRegClass, @toFoxBin2Prg, @lcExternalHeader )
ENDIF
@@ -12862,7 +13325,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg
laClasses(lnClassCount,2) = lcCodigo
ENDSCAN
- IF toFoxBin2Prg.l_UseClassPerFile
+ IF toFoxBin2Prg.n_UseClassPerFile > 0 THEN
lcExternalHeader = lcExternalHeader + CR_LF
ENDIF
@@ -12880,21 +13343,32 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg
ENDFOR
toModulo = lcCodigo
ELSE
- IF toFoxBin2Prg.l_UseClassPerFile
+ DO CASE
+ CASE toFoxBin2Prg.n_UseClassPerFile = 1 && LibName.ClassName.SC2
.write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg )
FOR I = 1 TO lnClassCount
- lcOutputFile = FORCEPATH( JUSTSTEM( .c_OutputFile ), JUSTPATH( .c_OutputFile ) ) + '.' + laClasses(I,1) + '.' + JUSTEXT( .c_OutputFile )
+ lcOutputFile = ADDBS( JUSTPATH( .c_OutputFile ) ) + JUSTSTEM( .c_OutputFile ) + '.' + laClasses(I,1) + '.' + JUSTEXT( .c_OutputFile )
lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + laClasses(I,2)
.write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg )
ENDFOR
- ELSE
+
+ CASE toFoxBin2Prg.n_UseClassPerFile = 2 && LibName.BaseClass.ClassName.SC2
+ .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg )
+
+ FOR I = 1 TO lnClassCount
+ 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
+
+ OTHERWISE
FOR I = 1 TO lnClassCount
lcCodigo = lcCodigo + laClasses(I,2)
ENDFOR
.write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg )
- ENDIF
+ ENDCASE
ENDIF
ENDWITH && THIS
@@ -12924,7 +13398,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg
#IF .F.
LOCAL THIS AS c_conversor_pjx_a_prg OF 'FOXBIN2PRG.PRG'
@@ -13661,7 +14135,7 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg
#IF .F.
LOCAL THIS AS c_conversor_frx_a_prg OF 'FOXBIN2PRG.PRG'
@@ -13835,7 +14309,7 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg
#IF .F.
LOCAL THIS AS c_conversor_dbf_a_prg OF 'FOXBIN2PRG.PRG'
@@ -13921,7 +14395,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg
ERASE (.c_OutputFile + '.TMP')
*.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' )
lcOutputFile = .c_OutputFile
- .writeLog( TEXTMERGE(loLang.C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) )
+ .writeLog( '> ' + TEXTMERGE(loLang.C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) )
CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ;
AND toFoxBin2Prg.ChangeFileAttribute( .c_OutputFile, '-R' ) ;
AND NOT toFoxBin2Prg.RenameTmpFile2Tx2File( .c_OutputFile )
@@ -14007,7 +14481,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg
#IF .F.
LOCAL THIS AS c_conversor_dbc_a_prg OF 'FOXBIN2PRG.PRG'
@@ -14031,30 +14505,119 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg
#ENDIF
TRY
- LOCAL lnCodError, laDatabases(1), lnDatabases_Count, lnLen
+ 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
+ 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)
-
USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS TABLABIN
+ toDatabase = CREATEOBJECT('CL_DBC')
+ toDatabase._DBC = .c_InputFile
+ toDatabase.read_DBC_Header()
+
+ *-- Verifico si hay archivo de eventos, y si hay uno definido pero no existe el archivo,
+ *-- creo uno temporalmente para poder abrir la BDD y luego lo elimino.
+ IF toDatabase._DBCEvents AND NOT EMPTY(toDatabase._DBCEventFilename) THEN
+ *-- El archivo de eventos puede tener path relativo o absoluto
+ IF LEFT(toDatabase._DBCEventFilename,1) = '.' THEN
+ lcEventsFile = ADDBS( JUSTPATH(.c_InputFile) ) + toDatabase._DBCEventFilename
+ ELSE
+ lcEventsFile = toDatabase._DBCEventFilename
+ ENDIF
+ IF FILE(lcEventsFile) THEN
+ lcEventsFile = ''
+ ELSE
+ STRTOFILE( '', lcEventsFile )
+ ENDIF
+ ENDIF
+
OPEN DATABASE (.c_InputFile) SHARED NOUPDATE
+
.AvanceDelProceso( 'Analyzing DBC metadata...', 1, 2, 1 )
- C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER()
+ C_FB2PRG_CODE = C_FB2PRG_CODE + toDatabase.toText(@toFoxBin2Prg)
*-- Header
- toDatabase = CREATEOBJECT('CL_DBC')
- C_FB2PRG_CODE = C_FB2PRG_CODE + toDatabase.toText()
+ IF toFoxBin2Prg.n_UseClassPerFile > 0 THEN
+ .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 )
+ 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.n_UseClassPerFile > 0 THEN
+ .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
@@ -14071,8 +14634,12 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg
FINALLY
USE IN (SELECT("TABLABIN"))
CLOSE DATABASES
+ IF NOT EMPTY(lcEventsFile) THEN
+ ERASE (lcEventsFile)
+ ERASE (FORCEEXT(lcEventsFile,'FXP'))
+ ENDIF
RELEASE toDatabase, toEx, toFoxBin2Prg ;
- , lnCodError, laDatabases, lnDatabases_Count, lnLen
+ , lnCodError, laDatabases, lnDatabases_Count
ENDTRY
RETURN
@@ -14080,7 +14647,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg
#IF .F.
LOCAL THIS AS c_conversor_mnx_a_prg OF 'FOXBIN2PRG.PRG'
@@ -14158,7 +14725,7 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_CUS_BASE AS CUSTOM
*-- Propiedades (Se preservan: CONTROLCOUNT, CONTROLS, OBJECTS, PARENT, CLASS)
HIDDEN BASECLASS, TOP, WIDTH, CLASSLIB, CLASSLIBRARY, COMMENT ;
@@ -14246,7 +14813,7 @@ DEFINE CLASS CL_CUS_BASE AS CUSTOM
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_COL_BASE AS COLLECTION
#IF .F.
LOCAL THIS AS CL_COL_BASE OF 'FOXBIN2PRG.PRG'
@@ -14258,6 +14825,7 @@ DEFINE CLASS CL_COL_BASE AS COLLECTION
_MEMBERDATA = [] ;
+ [] ;
+ + [] ;
+ [] ;
+ [] ;
+ [] ;
@@ -14265,6 +14833,7 @@ DEFINE CLASS CL_COL_BASE AS COLLECTION
+ []
l_Debug = .F.
+ _Saved = .F. && Indica si la información fue leida y guardada en las propiedades.
PROCEDURE INIT
@@ -14326,10 +14895,10 @@ DEFINE CLASS CL_COL_BASE AS COLLECTION
ENDDEFINE
-*******************************************************************************************************************
-DEFINE CLASS CL_MODULO AS CL_CUS_BASE
+
+DEFINE CLASS CL_CLASSLIB AS CL_CUS_BASE
#IF .F.
- LOCAL THIS AS CL_MODULO OF 'FOXBIN2PRG.PRG'
+ LOCAL THIS AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG'
#ENDIF
_MEMBERDATA = [] ;
@@ -14349,7 +14918,7 @@ DEFINE CLASS CL_MODULO AS CL_CUS_BASE
+ []
- DIMENSION _Ole_Objs[1], _Clases[1], _ExternalClasses(1)
+ DIMENSION _Ole_Objs[1], _Clases[1], _ExternalClasses(1,2)
_Version = 0
_SourceFile = ''
_ExternalClasses_Count = 0
@@ -14367,7 +14936,7 @@ DEFINE CLASS CL_MODULO AS CL_CUS_BASE
LOCAL toOle AS CL_OLE OF 'FOXBIN2PRG.PRG'
#ENDIF
- WITH THIS AS CL_MODULO OF 'FOXBIN2PRG.PRG'
+ WITH THIS AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG'
._Ole_Obj_count = ._Ole_Obj_count + 1
DIMENSION ._Ole_Objs( ._Ole_Obj_count )
._Ole_Objs( ._Ole_Obj_count ) = toOle
@@ -14383,7 +14952,7 @@ DEFINE CLASS CL_MODULO AS CL_CUS_BASE
LOCAL toClase AS CL_CLASE OF 'FOXBIN2PRG.PRG'
#ENDIF
- WITH THIS AS CL_MODULO OF 'FOXBIN2PRG.PRG'
+ WITH THIS AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG'
._Clases_Count = ._Clases_Count + 1
DIMENSION ._Clases( ._Clases_Count )
._Clases( ._Clases_Count ) = toClase
@@ -14397,7 +14966,7 @@ DEFINE CLASS CL_MODULO AS CL_CUS_BASE
LPARAMETERS tcNombre, X
LOCAL llExiste
- WITH THIS AS CL_MODULO OF 'FOXBIN2PRG.PRG'
+ WITH THIS AS CL_CLASSLIB OF 'FOXBIN2PRG.PRG'
FOR X = 1 TO ._Ole_Obj_count
IF LOWER(._Ole_Objs(X)._Nombre) == LOWER(tcNombre)
llExiste = .T.
@@ -14413,7 +14982,7 @@ DEFINE CLASS CL_MODULO AS CL_CUS_BASE
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_OLE AS CL_CUS_BASE
#IF .F.
LOCAL THIS AS CL_OLE OF 'FOXBIN2PRG.PRG'
@@ -14435,7 +15004,7 @@ DEFINE CLASS CL_OLE AS CL_CUS_BASE
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_CLASE AS CL_CUS_BASE
#IF .F.
LOCAL THIS AS CL_CLASE OF 'FOXBIN2PRG.PRG'
@@ -14621,7 +15190,7 @@ DEFINE CLASS CL_CLASE AS CL_CUS_BASE
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_PROCEDURE AS CL_CUS_BASE
#IF .F.
LOCAL THIS AS CL_PROCEDURE OF 'FOXBIN2PRG.PRG'
@@ -14660,7 +15229,7 @@ DEFINE CLASS CL_PROCEDURE AS CL_CUS_BASE
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_OBJETO AS CL_CUS_BASE
#IF .F.
LOCAL THIS AS CL_OBJETO OF 'FOXBIN2PRG.PRG'
@@ -14753,7 +15322,7 @@ DEFINE CLASS CL_OBJETO AS CL_CUS_BASE
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_REPORT AS CL_COL_BASE
#IF .F.
LOCAL THIS AS CL_REPORT OF 'FOXBIN2PRG.PRG'
@@ -14774,7 +15343,7 @@ DEFINE CLASS CL_REPORT AS CL_COL_BASE
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_PROJECT AS CL_COL_BASE
#IF .F.
LOCAL THIS AS CL_PROJECT OF 'FOXBIN2PRG.PRG'
@@ -15093,7 +15662,7 @@ ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_DBC_COL_BASE AS CL_COL_BASE
#IF .F.
LOCAL THIS AS CL_DBC_COL_BASE OF 'FOXBIN2PRG.PRG'
@@ -15103,6 +15672,7 @@ DEFINE CLASS CL_DBC_COL_BASE AS CL_COL_BASE
+ [] ;
+ [] ;
+ [] ;
+ + [] ;
+ []
__ObjectID = 0
@@ -15137,7 +15707,7 @@ DEFINE CLASS CL_DBC_COL_BASE AS CL_COL_BASE
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE
#IF .F.
LOCAL THIS AS CL_DBC_BASE OF 'FOXBIN2PRG.PRG'
@@ -15146,7 +15716,10 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE
_MEMBERDATA = [] ;
+ [] ;
+ [] ;
+ + [] ;
+ [] ;
+ + [] ;
+ + [] ;
+ [] ;
+ [] ;
+ [] ;
@@ -15158,16 +15731,22 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE
+ [] ;
+ [] ;
+ [] ;
+ + [] ;
+ [] ;
+ [] ;
+ [] ;
+ + [] ;
+ + [] ;
+ [] ;
+ [] ;
+ []
__ObjectID = 0
+ _DBC = ''
_Name = ''
+ _Saved = .F. && Indica si la información fue leida y guardada en las propiedades.
+ _ToText = '' && Propiedades pasadas a Texto para guardar en archivo externo xx2
FUNCTION add_Property
@@ -15964,6 +16543,68 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE
ENDPROC
+ PROCEDURE readNext_DBC_HeaderDataRecord
+ LPARAMETERS tcHeader, tnPos, tnLen, tnID, tcDataType, tcPropName, teData
+
+ LOCAL lnOffset, llRetorno
+
+ TRY
+ WITH THIS AS CL_DBC_BASE OF 'FOXBIN2PRG.PRG'
+ tnPos = EVL(tnPos,1)
+
+ IF tnPos >= LEN(tcHeader) THEN
+ EXIT
+ ENDIF
+
+ tnLen = CTOBIN( SUBSTR(tcHeader, tnPos, 4), '4RS' )
+ tnID = ASC( SUBSTR(tcHeader, tnPos + 4 + 2, 1) )
+ tcDataType = .getDBCPropertyValueTypeByPropertyID(tnID)
+ lnOffset = IIF(tcDataType = 'C', 1, 0)
+ tcPropName = .getDBCPropertyNameByID(tnID, .T.)
+ teData = SUBSTR(tcHeader, tnPos + 4 + 2 + 1, tnLen - 4 - 2 - 1 - lnOffset)
+
+ DO CASE
+ CASE tcDataType = 'B'
+ teData = ASC(teData)
+
+ CASE tcDataType = 'L'
+ teData = ( CTOBIN( teData, "1S" ) = 1 )
+
+ CASE tcDataType = 'N'
+ teData = CTOBIN( teData, "4S" )
+
+ ENDCASE
+
+ tnPos = tnPos + tnLen
+ llRetorno = .T.
+ ENDWITH
+ ENDTRY
+
+ RETURN llRetorno
+ ENDPROC
+
+
+ PROCEDURE read_DBC_Header
+ LOCAL lnLen, lnID, leData, lcHeader, lnPos, lcPropName, lcDataType, lnOffset
+
+ TRY
+ WITH THIS AS CL_DBC_BASE OF 'FOXBIN2PRG.PRG'
+ GO TOP IN TABLABIN
+ lcHeader = TABLABIN.Property
+ ._Name = UPPER( JUSTFNAME( DBF("TABLABIN") ) )
+
+ DO WHILE .T.
+ IF NOT .readNext_DBC_HeaderDataRecord( @lcHeader, @lnPos, @lnLen, @lnID, @lcDataType, @lcPropName, @leData )
+ EXIT
+ ENDIF
+ .AddProperty( '_' + lcPropName, leData )
+ ENDDO
+
+ ENDWITH
+ ENDTRY
+ ENDPROC
+
+
PROCEDURE setNextID
LPARAMETERS tnLastID
tnLastID = tnLastID + 1
@@ -16028,7 +16669,7 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_DBC AS CL_DBC_BASE
#IF .F.
LOCAL THIS AS CL_DBC OF 'FOXBIN2PRG.PRG'
@@ -16047,20 +16688,28 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE
+ [] ;
+ [] ;
+ [] ;
+ + [] ;
+ + [] ;
+ + [] ;
+ + [] ;
+ + [] ;
+ []
*-- Modulo
- _Version = 0
- _SourceFile = ''
+ DIMENSION _ExternalClasses(1,2), _Members(1,2)
+ _ExternalClasses_Count = 0
+ _Members_Count = 0
+ _Version = 0
+ _SourceFile = ''
*-- Database Info
- _Name = ''
- _Comment = ''
- _Version = 0
- _DBCEvents = .F.
- _DBCEventFilename = ''
- _StoredProcedures = ''
+ _Name = ''
+ _Comment = ''
+ _Version = 0
+ _DBCEvents = .F.
+ _DBCEventFilename = ''
+ _StoredProcedures = ''
PROCEDURE INIT
@@ -16081,22 +16730,31 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE
* 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
+ * toFoxBin2Prg (v! IN ) Referencia al objeto principal
+ *--------------------------------------------------------------------------------------------------------------
+ LPARAMETERS tcLine, taCodeLines, I, tnCodeLines, toFoxBin2Prg
+
+ EXTERNAL ARRAY taCodeLines
+
+ #IF .F.
+ LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+ #ENDIF
TRY
LOCAL loConnections AS CL_DBC_CONNECTIONS OF 'FOXBIN2PRG.PRG' ;
+ , loConnection AS CL_DBC_CONNECTION OF 'FOXBIN2PRG.PRG' ;
, loTables AS CL_DBC_TABLES OF 'FOXBIN2PRG.PRG' ;
+ , loTable AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG' ;
, loViews AS CL_DBC_VIEWS OF 'FOXBIN2PRG.PRG' ;
- , loRelations AS CL_DBC_RELATIONS OF 'FOXBIN2PRG.PRG' ;
+ , loView AS CL_DBC_VIEW OF 'FOXBIN2PRG.PRG' ;
, llBloqueEncontrado, lcPropName, lcValue, loEx AS EXCEPTION
STORE '' TO lcPropName, lcValue
- STORE NULL TO loConnections, loTables, loViews, loRelations
+ STORE NULL TO loConnections, loTables, loViews, loConnection, loTable, loView
IF LEFT(tcLine, LEN(C_DATABASE_I)) == C_DATABASE_I
llBloqueEncontrado = .T.
- WITH THIS AS CL_DBC_BASE OF 'FOXBIN2PRG.PRG'
+ WITH THIS AS CL_DBC OF 'FOXBIN2PRG.PRG'
FOR I = I + 1 TO tnCodeLines
.set_Line( @tcLine, @taCodeLines, I )
@@ -16111,16 +16769,29 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE
loConnections = ._Connections
loConnections.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines )
+ FOR EACH loConnection IN loConnections FOXOBJECT
+ .add_DBCMember('connection.' + loConnection._Name)
+ ENDFOR
+
CASE C_TABLES_I $ tcLine
loTables = ._Tables
loTables.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines )
+ FOR EACH loTable IN loTables FOXOBJECT
+ .add_DBCMember('table.' + loTable._Name)
+ ENDFOR
+
CASE C_VIEWS_I $ tcLine
loViews = ._Views
loViews.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines )
+ FOR EACH loView IN loViews FOXOBJECT
+ .add_DBCMember('view.' + loView._Name)
+ ENDFOR
+
CASE C_STORED_PROC_I $ tcLine
.analizarBloque_SP( @tcLine, @taCodeLines, @I, tnCodeLines )
+ .add_DBCMember('storedprocedures.sp')
CASE '' $ tcLine
.analizarBloque_Comment( @tcLine, @taCodeLines, @I, tnCodeLines )
@@ -16148,8 +16819,8 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE
THROW
FINALLY
- STORE NULL TO loConnections, loTables, loViews, loRelations
- RELEASE loConnections, loTables, loViews, loRelations, lcPropName, lcValue
+ STORE NULL TO loConnections, loTables, loViews, loConnection, loTable, loView
+ RELEASE loConnections, loTables, loViews, loConnection, loTable, loView
ENDTRY
RETURN llBloqueEncontrado
@@ -16212,6 +16883,8 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE
lcStoredProcedures = ._StoredProcedures
ERASE (tc_OutputFile)
+ ERASE (FORCEEXT(tc_OutputFile,'DCX'))
+ ERASE (FORCEEXT(tc_OutputFile,'DCT'))
CREATE DATABASE (tc_OutputFile)
CLOSE DATABASES
OPEN DATABASE (tc_OutputFile) SHARED
@@ -16258,8 +16931,14 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE
PROCEDURE toText
+ LPARAMETERS toFoxBin2Prg
+
+ #IF .F.
+ LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+ #ENDIF
+
TRY
- LOCAL I, lcText, lcDBC, laCode(1,1), loEx AS EXCEPTION ;
+ LOCAL I, lcText, lcDBC, laCode(1,1), lcConnections, lcTables, lcViews, loEx AS EXCEPTION ;
, loConnections AS CL_DBC_CONNECTIONS OF 'FOXBIN2PRG.PRG' ;
, loTables AS CL_DBC_TABLES OF 'FOXBIN2PRG.PRG' ;
, loViews AS CL_DBC_VIEWS OF 'FOXBIN2PRG.PRG' ;
@@ -16267,7 +16946,7 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE
STORE NULL TO loRelations, loViews, loTables, loTables
WITH THIS AS CL_DBC OF 'FOXBIN2PRG.PRG'
- lcText = ''
+ STORE '' TO lcText, lcConnections, lcTables, lcViews
lcDBC = JUSTSTEM(DBC())
TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
@@ -16282,27 +16961,37 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE
*-- Connections
loConnections = ._Connections
- lcText = lcText + loConnections.toText()
+ lcConnections = loConnections.toText( @toFoxBin2Prg )
*-- Tables
loTables = ._Tables
- lcText = lcText + loTables.toText()
+ lcTables = loTables.toText( @toFoxBin2Prg )
*-- Views
loViews = ._Views
- lcText = lcText + loViews.toText()
+ lcViews = loViews.toText( @toFoxBin2Prg )
SELECT CODE ;
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.n_UseClassPerFile > 0 THEN
+ TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+ <>
+ <>
+ <>
+ <<>>
+ <<._StoredProcedures>>
+ ENDTEXT
+ ENDIF
TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
- <<>>
- <<>> <>
- <<._StoredProcedures>>
- <<>> <>
ENDTEXT
ENDWITH && THIS
@@ -16340,10 +17029,21 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE
ENDPROC
+ PROCEDURE add_DBCMember
+ LPARAMETERS tcMemberName
+
+ WITH THIS AS CL_DBC OF 'FOXBIN2PRG.PRG'
+ ._Members_Count = ._Members_Count + 1
+ DIMENSION ._Members( ._Members_Count, 2 )
+ ._Members( ._Members_Count, 1 ) = LOWER(tcMemberName)
+ ENDWITH && THIS
+ ENDPROC
+
+
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE
#IF .F.
LOCAL THIS AS CL_DBC_CONNECTIONS OF 'FOXBIN2PRG.PRG'
@@ -16421,40 +17121,92 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE
PROCEDURE toText
*---------------------------------------------------------------------------------------------------
* PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
- * taConnections (@? OUT) Array de conexiones
- * tnConnection_Count (@? OUT) Cantidad de conexiones
+ * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg
*---------------------------------------------------------------------------------------------------
- LPARAMETERS taConnections, tnConnection_Count
+ LPARAMETERS toFoxBin2Prg
+
+ #IF .F.
+ LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+ #ENDIF
TRY
- LOCAL I, lcText, loEx AS EXCEPTION ;
+ LOCAL lcText, loEx AS EXCEPTION ;
, loConnection AS CL_DBC_CONNECTION OF 'FOXBIN2PRG.PRG'
- loConnection = NULL
- lcText = ''
- DIMENSION taConnections(1)
- tnConnection_Count = ADBOBJECTS( taConnections,"CONNECTION" )
+ WITH THIS AS CL_DBC_CONNECTIONS OF 'FOXBIN2PRG.PRG'
+ loConnection = NULL
+ lcText = ''
+ .read_BinDataToProperties()
- IF tnConnection_Count > 0
- ASORT( taConnections, 1, -1, 0, 1 )
+ 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
- loConnection = CREATEOBJECT('CL_DBC_CONNECTION')
+ .KeySort = 2
+ FOR EACH loConnection IN THIS &&FOXOBJECT
+ lcText = lcText + loConnection.toText( loConnection._Name )
+ ENDFOR
- FOR I = 1 TO tnConnection_Count
- lcText = lcText + loConnection.toText( taConnections(I) )
- ENDFOR
+ TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+ <<>>
+ <<>>
+ ENDTEXT
+ ENDIF
- TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
- <<>>
- <<>>
- ENDTEXT
+ ENDWITH
+
+ CATCH TO loEx
+ IF THIS.l_Debug AND _VFP.STARTMODE = 0
+ SET STEP ON
ENDIF
+ THROW
+
+ FINALLY
+ loConnection = NULL
+ RELEASE loConnection
+
+ ENDTRY
+
+ RETURN lcText
+ ENDPROC
+
+
+ PROCEDURE read_BinDataToProperties
+ *---------------------------------------------------------------------------------------------------
+ * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
+ * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg
+ *---------------------------------------------------------------------------------------------------
+ LPARAMETERS toFoxBin2Prg
+
+ #IF .F.
+ LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+ #ENDIF
+
+ TRY
+ WITH THIS AS CL_DBC_CONNECTIONS OF 'FOXBIN2PRG.PRG'
+ LOCAL I, lnConnection_Count, laConnections(1), loEx AS EXCEPTION ;
+ , loConnection AS CL_DBC_CONNECTION OF 'FOXBIN2PRG.PRG'
+
+ IF ._Saved THEN
+ lnConnection_Count = .Count
+ EXIT
+ ENDIF
+
+ loConnection = NULL
+ lnConnection_Count = ADBOBJECTS( laConnections,"CONNECTION" )
+
+ IF lnConnection_Count > 0
+ FOR I = 1 TO lnConnection_Count
+ loConnection = CREATEOBJECT('CL_DBC_CONNECTION')
+ loConnection.read_BinDataToProperties( laConnections(I) )
+ .ADD( loConnection, loConnection._Name )
+ ENDFOR
+ ENDIF
+ ENDWITH
+
CATCH TO loEx
IF THIS.l_Debug AND _VFP.STARTMODE = 0
SET STEP ON
@@ -16468,14 +17220,14 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE
ENDTRY
- RETURN lcText
+ RETURN lnConnection_Count
ENDPROC
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_DBC_CONNECTION AS CL_DBC_BASE
#IF .F.
LOCAL THIS AS CL_DBC_CONNECTION OF 'FOXBIN2PRG.PRG'
@@ -16593,28 +17345,34 @@ DEFINE CLASS CL_DBC_CONNECTION AS CL_DBC_BASE
TRY
LOCAL lcText, loEx AS EXCEPTION
- TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
- <<>>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>>
- ENDTEXT
+ WITH THIS AS CL_DBC_CONNECTION OF 'FOXBIN2PRG.PRG'
+ .read_BinDataToProperties(tcConnection)
+
+ TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+ <<>>
+ <<>> <<._Name>>
+ <<>> <<._Comment>>
+ <<>> <<._DataSource>>
+ <<>> <<._Database>>
+ <<>> <<._ConnectString>>
+ <<>> <<._Asynchronous>>
+ <<>> <<._BatchMode>>
+ <<>> <<._ConnectTimeout>>
+ <<>> <<._DisconnectRollback>>
+ <<>> <<._DispLogin>>
+ <<>> <<._DispWarnings>>
+ <<>> <<._IdleTimeout>>
+ <<>> <<._PacketSize>>
+ <<>> <<._PassWord>>
+ <<>> <<._QueryTimeout>>
+ <<>> <<._Transactions>>
+ <<>> <<._UserId>>
+ <<>> <<._WaitTime>>
+ <<>>
+ ENDTEXT
+
+ ._ToText = lcText
+ ENDWITH
CATCH TO loEx
IF THIS.l_Debug AND _VFP.STARTMODE = 0
@@ -16657,10 +17415,40 @@ DEFINE CLASS CL_DBC_CONNECTION AS CL_DBC_BASE
ENDPROC
+ PROCEDURE read_BinDataToProperties
+ LPARAMETERS tcConnection
+
+ WITH THIS AS CL_DBC_CONNECTION OF 'FOXBIN2PRG.PRG'
+ IF NOT ._Saved THEN
+ ._Name = ALLTRIM(tcConnection)
+ ._Comment = DBGETPROP(tcConnection,"CONNECTION","Comment")
+ ._DataSource = DBGETPROP(tcConnection,"CONNECTION","DataSource")
+ ._Database = DBGETPROP(tcConnection,"CONNECTION","Database")
+ ._ConnectString = DBGETPROP(tcConnection,"CONNECTION","ConnectString")
+ ._Asynchronous = DBGETPROP(tcConnection,"CONNECTION","Asynchronous")
+ ._BatchMode = DBGETPROP(tcConnection,"CONNECTION","BatchMode")
+ ._ConnectTimeout = DBGETPROP(tcConnection,"CONNECTION","ConnectTimeout")
+ ._DisconnectRollback = DBGETPROP(tcConnection,"CONNECTION","DisconnectRollback")
+ ._DispLogin = DBGETPROP(tcConnection,"CONNECTION","DispLogin")
+ ._DispWarnings = DBGETPROP(tcConnection,"CONNECTION","DispWarnings")
+ ._IdleTimeout = DBGETPROP(tcConnection,"CONNECTION","IdleTimeout")
+ ._PacketSize = DBGETPROP(tcConnection,"CONNECTION","PacketSize")
+ ._PassWord = DBGETPROP(tcConnection,"CONNECTION","PassWord")
+ ._QueryTimeout = DBGETPROP(tcConnection,"CONNECTION","QueryTimeout")
+ ._Transactions = DBGETPROP(tcConnection,"CONNECTION","Transactions")
+ ._UserId = DBGETPROP(tcConnection,"CONNECTION","UserId")
+ ._WaitTime = DBGETPROP(tcConnection,"CONNECTION","WaitTime")
+ *--
+ ._Saved = .T.
+ ENDIF
+ ENDWITH
+ ENDPROC
+
+
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE
#IF .F.
LOCAL THIS AS CL_DBC_TABLES OF 'FOXBIN2PRG.PRG'
@@ -16735,47 +17523,46 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE
PROCEDURE toText
*---------------------------------------------------------------------------------------------------
* PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
- * taTables (@? OUT) Array de conexiones
- * lnTable_Count (@? OUT) Cantidad de conexiones
+ * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg
*---------------------------------------------------------------------------------------------------
- LPARAMETERS taTables, tnTable_Count
+ LPARAMETERS toFoxBin2Prg
- EXTERNAL ARRAY taTables
+ #IF .F.
+ LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+ #ENDIF
TRY
- LOCAL I, lcText, loEx AS EXCEPTION ;
+ LOCAL lcText, loEx AS EXCEPTION ;
, loTable AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG'
- STORE NULL TO loTable
- STORE 0 TO I, tnTable_Count
- lcText = ''
- DIMENSION taTables(1)
- tnTable_Count = ADBOBJECTS( taTables,"TABLE" )
+ WITH THIS AS CL_DBC_TABLES OF 'FOXBIN2PRG.PRG'
+ STORE NULL TO loTable
+ lcText = ''
+ .read_BinDataToProperties()
- IF tnTable_Count > 0
- ASORT( taTables, 1, -1, 0, 1 )
+ 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
+ FOR EACH loTable IN THIS &&FOXOBJECT
+ lcText = lcText + loTable.toText( loTable._Name )
+ ENDFOR
- loTable = CREATEOBJECT('CL_DBC_TABLE')
+ TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+ <<>>
+ <<>>
+ ENDTEXT
+ ENDIF
- FOR I = 1 TO tnTable_Count
- lcText = lcText + loTable.toText( taTables(I) )
- ENDFOR
- TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
- <<>>
- <<>>
- ENDTEXT
- ENDIF
+ ENDWITH
CATCH TO loEx
- IF BETWEEN(I, 1, tnTable_Count)
- loEx.USERVALUE = loEx.USERVALUE + CR_LF + "taTables(" + TRANSFORM(I) + ") = " + RTRIM(TRANSFORM(taTables(I)))
+ IF VARTYPE(loTable) = "O" THEN
+ loEx.USERVALUE = loEx.USERVALUE + CR_LF + "loTable._Name = " + TRANSFORM(loTable._Name)
ENDIF
IF THIS.l_Debug AND _VFP.STARTMODE = 0
@@ -16786,7 +17573,7 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE
FINALLY
STORE NULL TO loTable
- RELEASE I, loTable
+ RELEASE loTable
ENDTRY
@@ -16794,10 +17581,63 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE
ENDPROC
+ PROCEDURE read_BinDataToProperties
+ *---------------------------------------------------------------------------------------------------
+ * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
+ * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg
+ *---------------------------------------------------------------------------------------------------
+ LPARAMETERS toFoxBin2Prg
+
+ #IF .F.
+ LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+ #ENDIF
+
+ TRY
+ WITH THIS AS CL_DBC_TABLES OF 'FOXBIN2PRG.PRG'
+ LOCAL I, lnTable_Count, laTables(1), loEx AS EXCEPTION ;
+ , loTable AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG'
+
+ IF ._Saved THEN
+ lnTable_Count = .Count
+ EXIT
+ ENDIF
+
+ STORE NULL TO loTable
+ STORE 0 TO I, lnTable_Count
+ lnTable_Count = ADBOBJECTS( laTables,"TABLE" )
+
+ IF lnTable_Count > 0
+ FOR I = 1 TO lnTable_Count
+ loTable = CREATEOBJECT("CL_DBC_TABLE")
+ loTable.read_BinDataToProperties( laTables(I) )
+ .ADD( loTable, loTable._Name )
+ ENDFOR
+ ENDIF
+
+ ._Saved = .T.
+ ENDWITH
+
+ CATCH TO loEx
+ IF THIS.l_Debug AND _VFP.STARTMODE = 0
+ SET STEP ON
+ ENDIF
+
+ THROW
+
+ FINALLY
+ loTable = NULL
+ RELEASE I, loTable
+
+ ENDTRY
+
+ RETURN lnTable_Count
+ ENDPROC
+
+
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_DBC_TABLE AS CL_DBC_BASE
#IF .F.
LOCAL THIS AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG'
@@ -16873,6 +17713,10 @@ DEFINE CLASS CL_DBC_TABLE AS CL_DBC_BASE
CASE C_TABLE_F $ tcLine && Fin
EXIT
+ CASE C_FIELD_ORDER_I $ tcLine
+ loFields = ._Fields
+ loFields.analizarBloqueOrden( @tcLine, @taCodeLines, @I, tnCodeLines )
+
CASE C_FIELDS_I $ tcLine
loFields = ._Fields
loFields.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines )
@@ -16924,43 +17768,54 @@ DEFINE CLASS CL_DBC_TABLE AS CL_DBC_BASE
*---------------------------------------------------------------------------------------------------
* PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
* tcTable (v! IN ) Nombre de la Tabla
+ * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg
*---------------------------------------------------------------------------------------------------
- LPARAMETERS tcTable
+ LPARAMETERS tcTable, toFoxBin2Prg
+
+ #IF .F.
+ LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+ #ENDIF
TRY
- LOCAL lcText, loEx AS EXCEPTION ;
+ LOCAL lcText, lcFields, lcIndexes, lcRelations, loEx AS EXCEPTION ;
, loIndexes AS CL_DBC_INDEXES_DB OF 'FOXBIN2PRG.PRG' ;
, loFields AS CL_DBC_FIELDS_DB OF 'FOXBIN2PRG.PRG' ;
, loRelations AS CL_DBC_RELATIONS OF 'FOXBIN2PRG.PRG'
- STORE NULL TO loRelations, loFields, loIndexes
- lcText = ''
- TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
- <<>>
- <<>>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- ENDTEXT
+ WITH THIS AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG'
+ STORE NULL TO loRelations, loFields, loIndexes
+ STORE '' TO lcText, lcFields, lcIndexes, lcRelations
+ .read_BinDataToProperties(tcTable)
- loFields = CREATEOBJECT('CL_DBC_FIELDS_DB')
- lcText = lcText + loFields.toText( tcTable )
+ loFields = CREATEOBJECT('CL_DBC_FIELDS_DB')
+ lcFields = loFields.toText( tcTable, @toFoxBin2Prg )
- loIndexes = CREATEOBJECT('CL_DBC_INDEXES_DB')
- lcText = lcText + loIndexes.toText( tcTable )
+ loIndexes = CREATEOBJECT('CL_DBC_INDEXES_DB')
+ lcIndexes = loIndexes.toText( tcTable, @toFoxBin2Prg )
- loRelations = CREATEOBJECT('CL_DBC_RELATIONS')
- lcText = lcText + loRelations.toText( tcTable )
+ loRelations = CREATEOBJECT('CL_DBC_RELATIONS')
+ lcRelations = loRelations.toText( tcTable, @toFoxBin2Prg )
- 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
+ <<>>
+ <<>>
+ <<>> <<._Name>>
+ <<>> <<._Comment>>
+ <<>> <<._Path>>
+ <<>> <<._DeleteTrigger>>
+ <<>> <<._InsertTrigger>>
+ <<>> <<._UpdateTrigger>>
+ <<>> <<._PrimaryKey>>
+ <<>> <<._RuleExpression>>
+ <<>> <<._RuleText>>
+ <>
+ <>
+ <>
+ <<>>
+ ENDTEXT
+
+ ._ToText = lcText
+ ENDWITH
CATCH TO loEx
@@ -17022,15 +17877,46 @@ DEFINE CLASS CL_DBC_TABLE AS CL_DBC_BASE
ENDPROC
+ PROCEDURE read_BinDataToProperties
+ LPARAMETERS tcTable
+
+ WITH THIS AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG'
+ IF NOT ._Saved THEN
+ ._Name = ALLTRIM(tcTable)
+ ._Comment = DBGETPROP(tcTable,"TABLE","Comment")
+ ._Path = DBGETPROP(tcTable,"TABLE","Path")
+ ._DeleteTrigger = DBGETPROP(tcTable,"TABLE","DeleteTrigger")
+ ._InsertTrigger = DBGETPROP(tcTable,"TABLE","InsertTrigger")
+ ._UpdateTrigger = DBGETPROP(tcTable,"TABLE","UpdateTrigger")
+ ._PrimaryKey = DBGETPROP(tcTable,"TABLE","PrimaryKey")
+ ._RuleExpression = DBGETPROP(tcTable,"TABLE","RuleExpression")
+ ._RuleText = DBGETPROP(tcTable,"TABLE","RuleText")
+ *--
+ ._Saved = .T.
+ ENDIF
+ ENDWITH
+ ENDPROC
+
+
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE
#IF .F.
LOCAL THIS AS CL_DBC_FIELDS_DB OF 'FOXBIN2PRG.PRG'
#ENDIF
+ _MEMBERDATA = [] ;
+ + [] ;
+ + [] ;
+ + [] ;
+ + []
+
+
+ DIMENSION a_Campos(1,2) && col.1=campo, col.2=definición
+ n_Campos = 0
+
PROCEDURE analizarBloque
*---------------------------------------------------------------------------------------------------
@@ -17043,7 +17929,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE
LPARAMETERS tcLine, taCodeLines, I, tnCodeLines
TRY
- LOCAL llBloqueEncontrado, lcPropName, lcValue, loEx AS EXCEPTION ;
+ LOCAL llBloqueEncontrado, lcPropName, lcValue, lnPos, loEx AS EXCEPTION ;
, loField AS CL_DBC_FIELD_DB OF 'FOXBIN2PRG.PRG'
STORE NULL TO loField
STORE '' TO lcPropName, lcValue
@@ -17052,6 +17938,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE
llBloqueEncontrado = .T.
WITH THIS AS CL_DBC_FIELDS_DB OF 'FOXBIN2PRG.PRG'
+ *.n_Campos = 0 && Descomentar para forzar modo LEGACY
FOR I = I + 1 TO tnCodeLines
.set_Line( @tcLine, @taCodeLines, I )
@@ -17063,15 +17950,26 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE
EXIT
CASE C_FIELD_I $ tcLine
- loField = NULL
loField = CREATEOBJECT("CL_DBC_FIELD_DB")
loField.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines )
- .ADD( loField, loField._Name )
+
+ IF .n_Campos = 0 THEN
+ *-- MODO LEGACY: Cuando no existe tag de ordenamiento de campos, se agregan en el orden que se leen
+ .ADD( loField, loField._Name )
+ ELSE
+ lnPos = ASCAN( .a_Campos, loField._Name, 1, 0, 1, 1+2+4+8 )
+ .a_Campos( lnPos, 2) = loField
+ ENDIF
OTHERWISE && Otro valor
*-- No hay otros valores
ENDCASE
ENDFOR
+
+ *-- Restablezco el orden de los campos (Solo si n_Campos > 0, que significa que tiene el nuevo tag especial de orden)
+ FOR lnPos = 1 TO .n_Campos
+ .ADD( .a_Campos( lnPos, 2), .a_Campos( lnPos, 1) )
+ ENDFOR
ENDWITH && THIS
ENDIF
@@ -17096,48 +17994,124 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE
ENDPROC
+ PROCEDURE analizarBloqueOrden
+ *---------------------------------------------------------------------------------------------------
+ * 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, lcPropName, lcValue, loEx AS EXCEPTION ;
+ , loField AS CL_DBC_FIELD_DB OF 'FOXBIN2PRG.PRG'
+ STORE NULL TO loField
+ STORE '' TO lcPropName, lcValue
+
+ IF LEFT(tcLine, LEN(C_FIELD_ORDER_I)) == C_FIELD_ORDER_I
+ llBloqueEncontrado = .T.
+
+ WITH THIS AS CL_DBC_FIELDS_DB OF 'FOXBIN2PRG.PRG'
+ FOR I = I + 1 TO tnCodeLines
+ .set_Line( @tcLine, @taCodeLines, I )
+
+ DO CASE
+ CASE EMPTY( tcLine )
+ LOOP
+
+ CASE C_FIELD_ORDER_F $ tcLine && Fin
+ EXIT
+
+ OTHERWISE && nombre del campo en el orden original
+ .n_Campos = .n_Campos + 1
+ DIMENSION .a_Campos(.n_Campos, 2)
+ .a_Campos(.n_Campos, 1) = tcLine
+
+ ENDCASE
+ ENDFOR
+ ENDWITH && THIS
+ ENDIF
+
+ CATCH TO loEx
+ IF THIS.l_Debug AND _VFP.STARTMODE = 0
+ SET STEP ON
+ ENDIF
+
+ THROW
+
+ FINALLY
+ STORE NULL TO loField
+ RELEASE lcPropName, lcValue, loField
+
+ ENDTRY
+
+ RETURN llBloqueEncontrado
+ ENDPROC
+
+
PROCEDURE toText
*---------------------------------------------------------------------------------------------------
* PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
* tcTable (v! IN ) Nombre de la Tabla
+ * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg
*---------------------------------------------------------------------------------------------------
- LPARAMETERS tcTable
+ LPARAMETERS tcTable, toFoxBin2Prg
+
+ #IF .F.
+ LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+ #ENDIF
TRY
LOCAL X, lcText, lnField_Count, laFields(1), loEx AS EXCEPTION ;
, loField AS CL_DBC_FIELD_DB OF 'FOXBIN2PRG.PRG'
- STORE NULL TO loField
- STORE 0 TO X, lnField_Count
- lcText = ''
- _TALLY = 0
- SELECT LOWER(TB.objectName) FROM TABLABIN TB ;
- INNER JOIN TABLABIN TB2 ON STR(TB.ParentID)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Field',10) ;
- AND TB2.objectName = PADR(LOWER(tcTable),128) ;
- INTO ARRAY laFields
- lnField_Count = _TALLY
+ WITH THIS AS CL_DBC_FIELDS_DB OF 'FOXBIN2PRG.PRG'
+ STORE NULL TO loField
+ STORE 0 TO X, lnField_Count
+ lcText = ''
- IF lnField_Count > 0
- TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
- <<>>
- <<>>
- ENDTEXT
+ .read_BinDataToProperties( tcTable, @toFoxBin2Prg )
- loField = CREATEOBJECT('CL_DBC_FIELD_DB')
+ IF .Count > 0 THEN
+ TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+ <<>>
+ <<>>
+ ENDTEXT
- FOR X = 1 TO lnField_Count
- lcText = lcText + loField.toText( tcTable, laFields(X) )
- ENDFOR
+ SET TEXTMERGE TO MEMVAR lcText ADDITIVE NOSHOW
+ SET TEXTMERGE ON
- TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
- <<>>
- ENDTEXT
- ENDIF
+ .KeySort = 0
+ FOR EACH loField IN THIS &&FOXOBJECT
+ \ <>
+ ENDFOR
+
+ SET TEXTMERGE OFF
+ SET TEXTMERGE TO
+
+ TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+ <<>>
+ <<>>
+ <<>>
+ ENDTEXT
+
+ .KeySort = 2 && Comentar para forzar modo LEGACY
+ FOR EACH loField IN THIS &&FOXOBJECT
+ lcText = lcText + loField.toText( tcTable, loField._Name )
+ ENDFOR
+
+ TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+ <<>>
+ ENDTEXT
+ ENDIF
+ ENDWITH
CATCH TO loEx
- IF BETWEEN(X, 1, lnField_Count)
- loEx.USERVALUE = loEx.USERVALUE + CR_LF + "tcTable = " + RTRIM(TRANSFORM(tcTable)) + ", laFields(" + TRANSFORM(X) + ") = " + RTRIM(TRANSFORM(laFields(X)))
+ IF VARTYPE(loField) = "O" THEN
+ loEx.USERVALUE = loEx.USERVALUE + CR_LF + "tcTable = " + RTRIM(TRANSFORM(tcTable)) + ", loField._Name = " + TRANSFORM(loField._Name)
ENDIF
IF THIS.l_Debug AND _VFP.STARTMODE = 0
@@ -17147,10 +18121,8 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE
THROW
FINALLY
- USE IN (SELECT("TB"))
- USE IN (SELECT("TB2"))
STORE NULL TO loField
- RELEASE X, lnField_Count, laFields, loField
+ RELEASE loField
ENDTRY
@@ -17158,10 +18130,71 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE
ENDPROC
+ PROCEDURE read_BinDataToProperties
+ *---------------------------------------------------------------------------------------------------
+ * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
+ * tcTable (@! IN ) Nombre de la tabla de la que se obtendrán los campos
+ * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg
+ *---------------------------------------------------------------------------------------------------
+ LPARAMETERS tcTable, toFoxBin2Prg
+
+ #IF .F.
+ LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+ #ENDIF
+
+ TRY
+ WITH THIS AS CL_DBC_FIELDS_DB OF 'FOXBIN2PRG.PRG'
+ LOCAL I, lnField_Count, laFields(1), loEx AS EXCEPTION ;
+ , loField AS CL_DBC_FIELD_DB OF 'FOXBIN2PRG.PRG'
+
+ IF ._Saved THEN
+ lnField_Count = .Count
+ EXIT
+ ENDIF
+
+ STORE NULL TO loField
+ STORE 0 TO I, lnField_Count
+ _TALLY = 0
+ SELECT LOWER(TB.objectName) FROM TABLABIN TB ;
+ INNER JOIN TABLABIN TB2 ON STR(TB.ParentID)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Field',10) ;
+ AND TB2.objectName = PADR(LOWER(tcTable),128) ;
+ INTO ARRAY laFields
+ lnField_Count = _TALLY
+
+ IF lnField_Count > 0
+ FOR I = 1 TO lnField_Count
+ loField = CREATEOBJECT("CL_DBC_FIELD_DB")
+ loField.read_BinDataToProperties( tcTable, laFields(I) )
+ .ADD( loField, loField._Name )
+ ENDFOR
+ ENDIF
+
+ ._Saved = .T.
+ ENDWITH
+
+ CATCH TO loEx
+ IF THIS.l_Debug AND _VFP.STARTMODE = 0
+ SET STEP ON
+ ENDIF
+
+ THROW
+
+ FINALLY
+ USE IN (SELECT("TB"))
+ USE IN (SELECT("TB2"))
+ loField = NULL
+ RELEASE I, loField
+
+ ENDTRY
+
+ RETURN lnField_Count
+ ENDPROC
+
+
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_DBC_FIELD_DB AS CL_DBC_BASE
#IF .F.
LOCAL THIS AS CL_DBC_FIELD_DB OF 'FOXBIN2PRG.PRG'
@@ -17265,20 +18298,26 @@ DEFINE CLASS CL_DBC_FIELD_DB AS CL_DBC_BASE
LOCAL lcText, loEx AS EXCEPTION
lcText = ''
- TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
- <<>>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>>
- ENDTEXT
+ WITH THIS AS CL_DBC_FIELD_DB OF 'FOXBIN2PRG.PRG'
+ .read_BinDataToProperties(tcTable, tcField)
+
+ TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+ <<>>
+ <<>> <<._Name>>
+ <<>> <<._Caption>>
+ <<>> <<._Comment>>
+ <<>> <<._DefaultValue>>
+ <<>> <<._DisplayClass>>
+ <<>> <<._DisplayClassLibrary>>
+ <<>> <<._Format>>
+ <<>> <<._InputMask>>
+ <<>> <<._RuleExpression>>
+ <<>> <<._RuleText>>
+ <<>>
+ ENDTEXT
+
+ ._ToText = lcText
+ ENDWITH
CATCH TO loEx
@@ -17316,10 +18355,32 @@ DEFINE CLASS CL_DBC_FIELD_DB AS CL_DBC_BASE
ENDPROC
+ PROCEDURE read_BinDataToProperties
+ LPARAMETERS tcTable, tcField
+
+ WITH THIS AS CL_DBC_FIELD_DB OF 'FOXBIN2PRG.PRG'
+ IF NOT ._Saved THEN
+ ._Name = ALLTRIM(tcField)
+ ._Caption = DBGETPROP( RTRIM(tcTable) + '.' + RTRIM(tcField),"FIELD","Caption")
+ ._Comment = DBGETPROP( RTRIM(tcTable) + '.' + RTRIM(tcField),"FIELD","Comment")
+ ._DefaultValue = DBGETPROP( RTRIM(tcTable) + '.' + RTRIM(tcField),"FIELD","DefaultValue")
+ ._DisplayClass = DBGETPROP( RTRIM(tcTable) + '.' + RTRIM(tcField),"FIELD","DisplayClass")
+ ._DisplayClassLibrary = DBGETPROP( RTRIM(tcTable) + '.' + RTRIM(tcField),"FIELD","DisplayClassLibrary")
+ ._Format = DBGETPROP( RTRIM(tcTable) + '.' + RTRIM(tcField),"FIELD","Format")
+ ._InputMask = DBGETPROP( RTRIM(tcTable) + '.' + RTRIM(tcField),"FIELD","InputMask")
+ ._RuleExpression = DBGETPROP( RTRIM(tcTable) + '.' + RTRIM(tcField),"FIELD","RuleExpression")
+ ._RuleText = DBGETPROP( RTRIM(tcTable) + '.' + RTRIM(tcField),"FIELD","RuleText")
+ *--
+ ._Saved = .T.
+ ENDIF
+ ENDWITH
+ ENDPROC
+
+
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE
#IF .F.
LOCAL THIS AS CL_DBC_INDEXES_DB OF 'FOXBIN2PRG.PRG'
@@ -17398,44 +18459,44 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE
*---------------------------------------------------------------------------------------------------
* PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
* tcTable (v! IN ) Nombre de la Tabla
+ * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg
*---------------------------------------------------------------------------------------------------
- LPARAMETERS tcTable
+ LPARAMETERS tcTable, toFoxBin2Prg
+
+ #IF .F.
+ LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+ #ENDIF
TRY
- LOCAL X, lcText, lnIndex_Count, laIndexes(1), loEx AS EXCEPTION ;
+ LOCAL lcText, loEx AS EXCEPTION ;
, loIndex AS CL_DBC_INDEX_DB OF 'FOXBIN2PRG.PRG'
- STORE NULL TO loIndex
- STORE 0 TO X, lnIndex_Count
- lcText = ''
- _TALLY = 0
- SELECT LOWER(TB.objectName) FROM TABLABIN TB ;
- INNER JOIN TABLABIN TB2 ON STR(TB.ParentID)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Index',10) ;
- AND TB2.objectName = PADR(LOWER(tcTable),128) ;
- INTO ARRAY laIndexes
- lnIndex_Count = _TALLY
+ WITH THIS AS CL_DBC_INDEXES_DB OF 'FOXBIN2PRG.PRG'
+ STORE NULL TO loIndex
+ lcText = ''
+ .read_BinDataToProperties(tcTable, @toFoxBin2Prg)
- IF lnIndex_Count > 0
- TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
- <<>>
- <<>>
- ENDTEXT
+ IF .Count > 0 THEN
+ TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+ <<>>
+ ENDTEXT
- loIndex = CREATEOBJECT('CL_DBC_INDEX_DB')
+ .KeySort = 2 && Comentar para forzar modo LEGACY
+ FOR EACH loIndex IN THIS &&FOXOBJECT
+ lcText = lcText + loIndex.toText( tcTable + '.' + loIndex._Name )
+ ENDFOR
- FOR X = 1 TO lnIndex_Count
- lcText = lcText + loIndex.toText( tcTable + '.' + laIndexes(X) )
- ENDFOR
+ TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+ <<>>
+ ENDTEXT
+ ENDIF
- TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
- <<>>
- ENDTEXT
- ENDIF
+ ENDWITH
CATCH TO loEx
- IF BETWEEN(X, 1, lnField_Count)
- loEx.USERVALUE = loEx.USERVALUE + CR_LF + "laIndexes(" + TRANSFORM(X) + ") = " + RTRIM(laIndexes(X))
+ IF VARTYPE(loIndex) = "O" THEN
+ loEx.USERVALUE = loEx.USERVALUE + CR_LF + "loIndex._Name = " + RTRIM(loIndex._Name)
ENDIF
IF THIS.l_Debug AND _VFP.STARTMODE = 0
@@ -17445,10 +18506,8 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE
THROW
FINALLY
- USE IN (SELECT("TB"))
- USE IN (SELECT("TB2"))
STORE NULL TO loIndex
- RELEASE X, lnIndex_Count, laIndexes, loIndex
+ RELEASE loIndex
ENDTRY
@@ -17456,10 +18515,71 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE
ENDPROC
+ PROCEDURE read_BinDataToProperties
+ *---------------------------------------------------------------------------------------------------
+ * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
+ * tcTable (v! IN ) Nombre de la Tabla
+ * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg
+ *---------------------------------------------------------------------------------------------------
+ LPARAMETERS tcTable, toFoxBin2Prg
+
+ #IF .F.
+ LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+ #ENDIF
+
+ TRY
+ WITH THIS AS CL_DBC_FIELDS_DB OF 'FOXBIN2PRG.PRG'
+ LOCAL I, lnIndex_Count, laIndexes(1), loEx AS EXCEPTION ;
+ , loIndex AS CL_DBC_INDEX_DB OF 'FOXBIN2PRG.PRG'
+
+ IF ._Saved THEN
+ lnIndex_Count = .Count
+ EXIT
+ ENDIF
+
+ STORE NULL TO loIndex
+ STORE 0 TO I, lnIndex_Count
+ _TALLY = 0
+ SELECT LOWER(TB.objectName) FROM TABLABIN TB ;
+ INNER JOIN TABLABIN TB2 ON STR(TB.ParentID)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Index',10) ;
+ AND TB2.objectName = PADR(LOWER(tcTable),128) ;
+ INTO ARRAY laIndexes
+ lnIndex_Count = _TALLY
+
+ IF lnIndex_Count > 0
+ FOR I = 1 TO lnIndex_Count
+ loIndex = CREATEOBJECT("CL_DBC_INDEX_DB")
+ loIndex.read_BinDataToProperties( tcTable + '.' + laIndexes(I) )
+ .ADD( loIndex, loIndex._Name )
+ ENDFOR
+ ENDIF
+
+ ._Saved = .T.
+ ENDWITH
+
+ CATCH TO loEx
+ IF THIS.l_Debug AND _VFP.STARTMODE = 0
+ SET STEP ON
+ ENDIF
+
+ THROW
+
+ FINALLY
+ USE IN (SELECT("TB"))
+ USE IN (SELECT("TB2"))
+ loIndex = NULL
+ RELEASE I, loIndex
+
+ ENDTRY
+
+ RETURN lnIndex_Count
+ ENDPROC
+
+
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_DBC_INDEX_DB AS CL_DBC_BASE
#IF .F.
LOCAL THIS AS CL_DBC_INDEX_DB OF 'FOXBIN2PRG.PRG'
@@ -17549,13 +18669,17 @@ DEFINE CLASS CL_DBC_INDEX_DB AS CL_DBC_BASE
lcText = ''
WITH THIS AS CL_DBC_INDEX_DB OF 'FOXBIN2PRG.PRG'
+ .read_BinDataToProperties(tcIndex)
+
TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
<<>>
- <<>> <>
- <<>> <>
- <<>> <<.DBGETPROP(tcIndex,'Index','IsUnique')>>
+ <<>> <<._Name>>
+ <<>> <<._Comment>>
+ <<>> <<._IsUnique>>
<<>>
ENDTEXT
+
+ ._ToText = lcText
ENDWITH && THIS
CATCH TO loEx
@@ -17585,20 +18709,35 @@ DEFINE CLASS CL_DBC_INDEX_DB AS CL_DBC_BASE
ENDPROC
+ PROCEDURE read_BinDataToProperties
+ LPARAMETERS tcIndex
+
+ WITH THIS AS CL_DBC_INDEX_DB OF 'FOXBIN2PRG.PRG'
+ IF NOT ._Saved THEN
+ ._Name = ALLTRIM(JUSTEXT(tcIndex))
+ ._Comment = RTRIM( .DBGETPROP(tcIndex,'Index','Comment') )
+ ._IsUnique = .DBGETPROP(tcIndex,'Index','IsUnique')
+ *--
+ ._Saved = .T.
+ ENDIF
+ ENDWITH
+ ENDPROC
+
+
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_DBC_INDEXES_VW AS CL_DBC_INDEXES_DB
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_DBC_INDEX_VW AS CL_DBC_INDEX_DB
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE
#IF .F.
LOCAL THIS AS CL_DBC_VIEWS OF 'FOXBIN2PRG.PRG'
@@ -17672,48 +18811,46 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE
PROCEDURE toText
*---------------------------------------------------------------------------------------------------
* PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
- * taViews (@? OUT) Array de vistas
- * tnView_Count (@? OUT) Cantidad de vistas
+ * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg
*---------------------------------------------------------------------------------------------------
- LPARAMETERS taViews, tnView_Count
+ LPARAMETERS toFoxBin2Prg
- EXTERNAL ARRAY taViews
+ #IF .F.
+ LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+ #ENDIF
TRY
- LOCAL I, lcText, lcDBC, lnField_Count, laFields(1), loEx AS EXCEPTION ;
+ LOCAL lcText, lcDBC, loEx AS EXCEPTION ;
, loView AS CL_DBC_VIEW OF 'FOXBIN2PRG.PRG'
- STORE NULL TO loView
- STORE 0 TO I, X, tnView_Count, lnField_Count
- lcText = ''
- lcDBC = JUSTSTEM(DBC())
- DIMENSION taViews(1)
- tnView_Count = ADBOBJECTS( taViews,"VIEW" )
+ WITH THIS AS CL_DBC_VIEWS OF 'FOXBIN2PRG.PRG'
+ STORE NULL TO loView
+ lcText = ''
+ .read_BinDataToProperties()
- IF tnView_Count > 0
- ASORT( taViews, 1, -1, 0, 1 )
+ 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
+ FOR EACH loView IN THIS &&FOXOBJECT
+ lcText = lcText + loView.toText( loView._Name )
+ ENDFOR
- loView = CREATEOBJECT('CL_DBC_VIEW')
+ TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+ <<>>
+ <<>>
+ ENDTEXT
+ ENDIF
- FOR I = 1 TO tnView_Count
- lcText = lcText + loView.toText( taViews(I) )
- ENDFOR
-
- TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
- <<>>
- <<>>
- ENDTEXT
- ENDIF
+ ._Saved = .T.
+ ENDWITH
CATCH TO loEx
- IF BETWEEN(I, 1, tnTable_Count)
- loEx.USERVALUE = loEx.USERVALUE + CR_LF + "taViews(" + TRANSFORM(I) + ") = " + RTRIM(taViews(I))
+ IF VARTYPE(loView) = "O" THEN
+ loEx.USERVALUE = loEx.USERVALUE + CR_LF + "loView._Name = " + RTRIM(loView._Name)
ENDIF
IF THIS.l_Debug AND _VFP.STARTMODE = 0
@@ -17724,7 +18861,7 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE
FINALLY
STORE NULL TO loView
- RELEASE I, lcDBC, lnField_Count, laFields, loView
+ RELEASE loView
ENDTRY
@@ -17732,10 +18869,63 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE
ENDPROC
+ PROCEDURE read_BinDataToProperties
+ *---------------------------------------------------------------------------------------------------
+ * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
+ * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg
+ *---------------------------------------------------------------------------------------------------
+ LPARAMETERS toFoxBin2Prg
+
+ #IF .F.
+ LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+ #ENDIF
+
+ TRY
+ WITH THIS AS CL_DBC_VIEWS OF 'FOXBIN2PRG.PRG'
+ LOCAL I, lnView_Count, laViews(1), loEx AS EXCEPTION ;
+ , loTable AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG'
+ STORE NULL TO loTable
+ STORE 0 TO I, tnTable_Count
+
+ IF ._Saved THEN
+ lnView_Count = .Count
+ EXIT
+ ENDIF
+
+ lnView_Count = ADBOBJECTS( laViews, "VIEW" )
+
+ IF lnView_Count > 0
+ FOR I = 1 TO lnView_Count
+ loView = CREATEOBJECT("CL_DBC_VIEW")
+ loView.read_BinDataToProperties( laViews(I) )
+ .ADD( loView, loView._Name )
+ ENDFOR
+ ENDIF
+
+ ._Saved = .T.
+ ENDWITH
+
+ CATCH TO loEx
+ IF THIS.l_Debug AND _VFP.STARTMODE = 0
+ SET STEP ON
+ ENDIF
+
+ THROW
+
+ FINALLY
+ loView = NULL
+ RELEASE I, loView
+
+ ENDTRY
+
+ RETURN lnView_Count
+ ENDPROC
+
+
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE
#IF .F.
LOCAL THIS AS CL_DBC_VIEW OF 'FOXBIN2PRG.PRG'
@@ -17800,8 +18990,9 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE
_WhereType = 0
*-- Sub-objects
- *_Fields = NULL
+ *_Fields = NULL
*_Indexes = NULL
+ *_Relations = NULL
PROCEDURE INIT
@@ -17847,6 +19038,10 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE
CASE C_VIEW_F $ tcLine && Fin
EXIT
+ CASE C_FIELD_ORDER_I $ tcLine
+ loFields = ._Fields
+ loFields.analizarBloqueOrden( @tcLine, @taCodeLines, @I, tnCodeLines )
+
CASE C_FIELDS_I $ tcLine
loFields = NULL
loFields = ._Fields
@@ -17901,69 +19096,81 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE
*---------------------------------------------------------------------------------------------------
* PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
* tcView (v! IN ) Vista en evaluación
+ * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg
*---------------------------------------------------------------------------------------------------
- LPARAMETERS tcView
+ LPARAMETERS tcView, toFoxBin2Prg
+
+ #IF .F.
+ LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+ #ENDIF
TRY
- LOCAL I, lcText, lcDBC, lnField_Count, laFields(1), loEx AS EXCEPTION ;
+ LOCAL lcText, lcFields, lcIndexes, lcRelations, lcDBC, loEx AS EXCEPTION ;
, loFields AS CL_DBC_FIELDS_VW OF 'FOXBIN2PRG.PRG' ;
, loIndexes AS CL_DBC_INDEXES_VW OF 'FOXBIN2PRG.PRG' ;
, loRelations AS CL_DBC_RELATIONS OF 'FOXBIN2PRG.PRG'
STORE NULL TO loRelations, loIndexes, loFields
- lcText = ''
+ STORE '' TO lcText, lcFields, lcIndexes, lcRelations
WITH THIS AS CL_DBC_VIEW OF 'FOXBIN2PRG.PRG'
- TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+ .read_BinDataToProperties(tcView)
+
+ TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
<<>>
<<>>
<<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
+ <<>> <<._Comment>>
+ <<>> <<._Tables>>
+ <<>> <<._SQL>>
+ <<>> <<._AllowSimultaneousFetch>>
+ <<>> <<._BatchUpdateCount>>
+ <<>> <<._CompareMemo>>
+ <<>> <<._ConnectName>>
+ <<>> <<._FetchAsNeeded>>
+ <<>> <<._FetchMemo>>
+ <<>> <<._FetchSize>>
+ <<>> <<._MaxRecords>>
+ <<>> <<._Offline>>
+ <<>> <<._ParameterList>>
+ <<>> <<._Prepared>>
+ <<>> <<._RuleExpression>>
+ <<>> <<._RuleText>>
+ <<>> <<._SendUpdates>>
+ <<>> <<._ShareConnection>>
+ <<>> <<._SourceType>>
+ <<>> <<._UpdateType>>
+ <<>> <<._UseMemoSize>>
+ <<>> <<._WhereType>>
ENDTEXT
*-- ALGUNOS VALORES QUE EL DBGETPROP OFICIAL NO DEVUELVE
- *-- Path
- *-- OfflineRecordCount
- IF NOT EMPTY(._Offline) AND EVALUATE(._Offline)
- TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
- <<>> <<.DBGETPROP(tcView,"VIEW","Path")>>
- <<>> <<.DBGETPROP(tcView,"VIEW","RecordCount")>>
+ *-- Path
+ *-- OfflineRecordCount
+ IF ._Offline THEN
+ TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+ <<>> <<._Path>>
+ <<>> <<._RecordCount>>
ENDTEXT
ENDIF
*--
loFields = ._Fields
- lcText = lcText + loFields.toText( tcView )
+ lcFields = loFields.toText( tcView )
loIndexes = ._Indexes
- lcText = lcText + loIndexes.toText( tcView )
+ lcIndexes = loIndexes.toText( tcView )
- loRelations = CREATEOBJECT('CL_DBC_RELATIONS')
- lcText = lcText + loRelations.toText( tcView )
+ loRelations = ._Relations
+ lcRelations = loRelations.toText( tcView )
TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+ <>
+ <>
+ <>
<<>>
ENDTEXT
+
+ ._ToText = lcText
ENDWITH && THIS
@@ -17978,7 +19185,7 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE
FINALLY
STORE NULL TO loRelations, loIndexes, loFields
- RELEASE I, lcDBC, lnField_Count, laFields, loFields, loIndexes, loRelations
+ RELEASE loFields, loIndexes, loRelations
ENDTRY
@@ -18046,15 +19253,65 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE
ENDPROC
+ PROCEDURE read_BinDataToProperties
+ *---------------------------------------------------------------------------------------------------
+ * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
+ * tcView (v! IN ) Vista en evaluación
+ *---------------------------------------------------------------------------------------------------
+ LPARAMETERS tcView
+
+ WITH THIS AS CL_DBC_VIEW OF 'FOXBIN2PRG.PRG'
+ IF NOT ._Saved THEN
+ ._Name = ALLTRIM(tcView)
+ ._Comment = DBGETPROP(tcView,"VIEW","Comment")
+ ._Tables = DBGETPROP(tcView,"VIEW","Tables")
+ ._SQL = DBGETPROP(tcView,"VIEW","SQL")
+ ._AllowSimultaneousFetch = DBGETPROP(tcView,"VIEW","AllowSimultaneousFetch")
+ ._BatchUpdateCount = DBGETPROP(tcView,"VIEW","BatchUpdateCount")
+ ._CompareMemo = DBGETPROP(tcView,"VIEW","CompareMemo")
+ ._ConnectName = DBGETPROP(tcView,"VIEW","ConnectName")
+ ._FetchAsNeeded = DBGETPROP(tcView,"VIEW","FetchAsNeeded")
+ ._FetchMemo = DBGETPROP(tcView,"VIEW","FetchMemo")
+ ._FetchSize = DBGETPROP(tcView,"VIEW","FetchSize")
+ ._MaxRecords = DBGETPROP(tcView,"VIEW","MaxRecords")
+ ._Offline = DBGETPROP(tcView,"VIEW","Offline")
+ ._ParameterList = DBGETPROP(tcView,"VIEW","ParameterList")
+ ._Prepared = DBGETPROP(tcView,"VIEW","Prepared")
+ ._RuleExpression = DBGETPROP(tcView,"VIEW","RuleExpression")
+ ._RuleText = DBGETPROP(tcView,"VIEW","RuleText")
+ ._SendUpdates = DBGETPROP(tcView,"VIEW","SendUpdates")
+ ._ShareConnection = DBGETPROP(tcView,"VIEW","ShareConnection")
+ ._SourceType = DBGETPROP(tcView,"VIEW","SourceType")
+ ._UpdateType = DBGETPROP(tcView,"VIEW","UpdateType")
+ ._UseMemoSize = DBGETPROP(tcView,"VIEW","UseMemoSize")
+ ._WhereType = DBGETPROP(tcView,"VIEW","WhereType")
+ *--
+ ._Path = .DBGETPROP(tcView,"VIEW","Path")
+ ._RecordCount = .DBGETPROP(tcView,"VIEW","RecordCount")
+ *--
+ ._Saved = .T.
+ ENDIF
+ ENDWITH
+ ENDPROC
+
+
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE
#IF .F.
LOCAL THIS AS CL_DBC_FIELDS_VW OF 'FOXBIN2PRG.PRG'
#ENDIF
+ _MEMBERDATA = [] ;
+ + [] ;
+ + [] ;
+ + [] ;
+ + []
+
+ DIMENSION a_Campos(1,2) && col.1=campo, col.2=definición
+ n_Campos = 0
PROCEDURE analizarBloque
@@ -18077,6 +19334,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE
llBloqueEncontrado = .T.
WITH THIS AS CL_DBC_FIELDS_VW OF 'FOXBIN2PRG.PRG'
+ *.n_Campos = 0 && Descomentar para forzar modo LEGACY
FOR I = I + 1 TO tnCodeLines
.set_Line( @tcLine, @taCodeLines, I )
@@ -18091,12 +19349,24 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE
loField = NULL
loField = CREATEOBJECT("CL_DBC_FIELD_VW")
loField.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines )
- .ADD( loField, loField._Name )
+
+ IF .n_Campos = 0 THEN
+ *-- MODO LEGACY: Cuando no existe tag de ordenamiento de campos, se agregan en el orden que se leen
+ .ADD( loField, loField._Name )
+ ELSE
+ lnPos = ASCAN( .a_Campos, loField._Name, 1, 0, 1, 1+2+4+8 )
+ .a_Campos( lnPos, 2) = loField
+ ENDIF
OTHERWISE && Otro valor
*-- No hay otros valores
ENDCASE
ENDFOR
+
+ *-- Restablezco el orden de los campos (Solo si n_Campos > 0, que significa que tiene el nuevo tag especial de orden)
+ FOR lnPos = 1 TO .n_Campos
+ .ADD( .a_Campos( lnPos, 2), .a_Campos( lnPos, 1) )
+ ENDFOR
ENDWITH && THIS
ENDIF
@@ -18122,48 +19392,122 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE
+ PROCEDURE analizarBloqueOrden
+ *---------------------------------------------------------------------------------------------------
+ * 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, lcPropName, lcValue, loEx AS EXCEPTION ;
+ , loField AS CL_DBC_FIELD_DB OF 'FOXBIN2PRG.PRG'
+ STORE NULL TO loField
+ STORE '' TO lcPropName, lcValue
+
+ IF LEFT(tcLine, LEN(C_FIELD_ORDER_I)) == C_FIELD_ORDER_I
+ llBloqueEncontrado = .T.
+
+ WITH THIS AS CL_DBC_FIELDS_VW OF 'FOXBIN2PRG.PRG'
+ FOR I = I + 1 TO tnCodeLines
+ .set_Line( @tcLine, @taCodeLines, I )
+
+ DO CASE
+ CASE EMPTY( tcLine )
+ LOOP
+
+ CASE C_FIELD_ORDER_F $ tcLine && Fin
+ EXIT
+
+ OTHERWISE && nombre del campo en el orden original
+ .n_Campos = .n_Campos + 1
+ DIMENSION .a_Campos(.n_Campos, 2)
+ .a_Campos(.n_Campos, 1) = tcLine
+
+ ENDCASE
+ ENDFOR
+ ENDWITH && THIS
+ ENDIF
+
+ CATCH TO loEx
+ IF THIS.l_Debug AND _VFP.STARTMODE = 0
+ SET STEP ON
+ ENDIF
+
+ THROW
+
+ FINALLY
+ STORE NULL TO loField
+ RELEASE lcPropName, lcValue, loField
+
+ ENDTRY
+
+ RETURN llBloqueEncontrado
+ ENDPROC
+
+
PROCEDURE toText
*---------------------------------------------------------------------------------------------------
* PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
* tcView (v! IN ) Nombre de la Vista
+ * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg
*---------------------------------------------------------------------------------------------------
- LPARAMETERS tcView
+ LPARAMETERS tcView, toFoxBin2Prg
+
+ #IF .F.
+ LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+ #ENDIF
TRY
- LOCAL X, lcText, lnField_Count, laFields(1), loEx AS EXCEPTION ;
+ LOCAL lcText, loEx AS EXCEPTION ;
, loField AS CL_DBC_FIELD_VW OF 'FOXBIN2PRG.PRG'
STORE NULL TO loField
- STORE 0 TO X, tnTable_Count, lnField_Count
lcText = ''
- _TALLY = 0
- SELECT LOWER(TB.objectName) FROM TABLABIN TB ;
- INNER JOIN TABLABIN TB2 ON STR(TB.ParentID)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Field',10) ;
- AND TB2.objectName = PADR(LOWER(tcView),128) ;
- INTO ARRAY laFields
- lnField_Count = _TALLY
+ WITH THIS AS CL_DBC_FIELDS_VW OF 'FOXBIN2PRG.PRG'
+ .read_BinDataToProperties(tcView, @toFoxBin2Prg)
- IF lnField_Count > 0
- TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
- <<>>
- <<>>
- ENDTEXT
+ IF .Count > 0 THEN
+ TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+ <<>>
+ <<>>
+ ENDTEXT
- loField = CREATEOBJECT("CL_DBC_FIELD_VW")
+ SET TEXTMERGE TO MEMVAR lcText ADDITIVE NOSHOW
+ SET TEXTMERGE ON
- FOR X = 1 TO lnField_Count
- lcText = lcText + loField.toText( tcView, laFields(X) )
- ENDFOR
+ .KeySort = 0
+ FOR EACH loField IN THIS &&FOXOBJECT
+ \ <>
+ ENDFOR
- TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
- <<>>
- ENDTEXT
- ENDIF
+ SET TEXTMERGE OFF
+ SET TEXTMERGE TO
+
+ TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+ <<>>
+ <<>>
+ <<>>
+ ENDTEXT
+
+ .KeySort = 2 && Comentar para forzar modo LEGACY
+ FOR EACH loField IN THIS &&FOXOBJECT
+ lcText = lcText + loField.toText( tcView, loField._Name )
+ ENDFOR
+
+ TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+ <<>>
+ ENDTEXT
+ ENDIF
+ ENDWITH
CATCH TO loEx
- IF BETWEEN(X, 1, lnField_Count)
- loEx.USERVALUE = loEx.USERVALUE + CR_LF + "laFields(" + TRANSFORM(X) + ") = " + RTRIM(laFields(X))
+ IF VARTYPE(loField) = "O" THEN
+ loEx.USERVALUE = loEx.USERVALUE + CR_LF + "loField._Name = " + RTRIM(loField._Name)
ENDIF
IF THIS.l_Debug AND _VFP.STARTMODE = 0
@@ -18173,10 +19517,8 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE
THROW
FINALLY
- USE IN (SELECT("TB"))
- USE IN (SELECT("TB2"))
STORE NULL TO loField
- RELEASE X, lnField_Count, laFields, loField
+ RELEASE loField
ENDTRY
@@ -18184,10 +19526,72 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE
ENDPROC
+ PROCEDURE read_BinDataToProperties
+ *---------------------------------------------------------------------------------------------------
+ * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
+ * tcView (@! IN ) Nombre de la vista de la que se obtendrán los campos
+ * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg
+ *---------------------------------------------------------------------------------------------------
+ LPARAMETERS tcView, toFoxBin2Prg
+
+ #IF .F.
+ LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+ #ENDIF
+
+ TRY
+ LOCAL I, lcText, lnField_Count, laFields(1), loEx AS EXCEPTION ;
+ , loField AS CL_DBC_FIELD_VW OF 'FOXBIN2PRG.PRG'
+ STORE NULL TO loField
+ STORE 0 TO I, lnField_Count
+ lcText = ''
+
+ WITH THIS AS CL_DBC_FIELDS_VW OF 'FOXBIN2PRG.PRG'
+ IF ._Saved THEN
+ lnField_Count = .Count
+ EXIT
+ ENDIF
+
+ _TALLY = 0
+ SELECT LOWER(TB.objectName) FROM TABLABIN TB ;
+ INNER JOIN TABLABIN TB2 ON STR(TB.ParentID)+TB.ObjectType = STR(TB2.ObjectID)+PADR('Field',10) ;
+ AND TB2.objectName = PADR(LOWER(tcView),128) ;
+ INTO ARRAY laFields
+ lnField_Count = _TALLY
+
+ IF lnField_Count > 0
+ FOR I = 1 TO lnField_Count
+ loField = CREATEOBJECT("CL_DBC_FIELD_VW")
+ loField.read_BinDataToProperties( tcView, laFields(I) )
+ .ADD( loField, loField._Name )
+ ENDFOR
+ ENDIF
+
+ ._Saved = .T.
+ ENDWITH
+
+ CATCH TO loEx
+ IF THIS.l_Debug AND _VFP.STARTMODE = 0
+ SET STEP ON
+ ENDIF
+
+ THROW
+
+ FINALLY
+ USE IN (SELECT("TB"))
+ USE IN (SELECT("TB2"))
+ loField = NULL
+ RELEASE loField
+
+ ENDTRY
+
+ RETURN lnField_Count
+ ENDPROC
+
+
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_DBC_FIELD_VW AS CL_DBC_BASE
#IF .F.
LOCAL THIS AS CL_DBC_FIELD_VW OF 'FOXBIN2PRG.PRG'
@@ -18297,31 +19701,34 @@ DEFINE CLASS CL_DBC_FIELD_VW AS CL_DBC_BASE
LPARAMETERS tcView, tcField
TRY
- LOCAL lcText, loEx AS EXCEPTION
- lcText = ''
+ WITH THIS AS CL_DBC_FIELD_VW OF 'FOXBIN2PRG.PRG'
+ LOCAL lcText, loEx AS EXCEPTION
+ lcText = ''
- 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
+ <<>>
+ <<>> <<._Name>>
+ <<>> <<._Caption>>
+ <<>> <<._Comment>>
+ <<>> <<._DataType>>
+ <<>> <<._DefaultValue>>
+ <<>> <<._DisplayClass>>
+ <<>> <<._DisplayClassLibrary>>
+ <<>> <<._Format>>
+ <<>> <<._InputMask>>
+ <<>> <<._KeyField>>
+ <<>> <<._RuleExpression>>
+ <<>> <<._RuleText>>
+ <<>> <<._Updatable>>
+ <<>> <<._UpdateName>>
+ <<>>
+ ENDTEXT
+ ._ToText = lcText
+ ENDWITH
CATCH TO loEx
- loEx.USERVALUE = loEx.USERVALUE + CR_LF + "tcField = " + RTRIM(TRANSFORM(tcField))
+ loEx.USERVALUE = loEx.USERVALUE + CR_LF + "tcView.tcField = " + TRANSFORM(tcView) + '.' + TRANSFORM(tcField)
IF THIS.l_Debug AND _VFP.STARTMODE = 0
SET STEP ON
@@ -18359,10 +19766,36 @@ DEFINE CLASS CL_DBC_FIELD_VW AS CL_DBC_BASE
ENDPROC
+ PROCEDURE read_BinDataToProperties
+ LPARAMETERS tcView, tcField
+
+ WITH THIS AS CL_DBC_FIELD_VW OF 'FOXBIN2PRG.PRG'
+ IF NOT ._Saved THEN
+ ._Name = ALLTRIM(tcField)
+ ._Caption = DBGETPROP( RTRIM(tcView) + '.' + RTRIM(tcField),"FIELD","Caption")
+ ._Comment = DBGETPROP( RTRIM(tcView) + '.' + RTRIM(tcField),"FIELD","Comment")
+ ._DataType = DBGETPROP( RTRIM(tcView) + '.' + RTRIM(tcField),"FIELD","DataType")
+ ._DefaultValue = DBGETPROP( RTRIM(tcView) + '.' + RTRIM(tcField),"FIELD","DefaultValue")
+ ._DisplayClass = DBGETPROP( RTRIM(tcView) + '.' + RTRIM(tcField),"FIELD","DisplayClass")
+ ._DisplayClassLibrary = DBGETPROP( RTRIM(tcView) + '.' + RTRIM(tcField),"FIELD","DisplayClassLibrary")
+ ._Format = DBGETPROP( RTRIM(tcView) + '.' + RTRIM(tcField),"FIELD","Format")
+ ._InputMask = DBGETPROP( RTRIM(tcView) + '.' + RTRIM(tcField),"FIELD","InputMask")
+ ._KeyField = DBGETPROP( RTRIM(tcView) + '.' + RTRIM(tcField),"FIELD","KeyField")
+ ._RuleExpression = DBGETPROP( RTRIM(tcView) + '.' + RTRIM(tcField),"FIELD","RuleExpression")
+ ._RuleText = DBGETPROP( RTRIM(tcView) + '.' + RTRIM(tcField),"FIELD","RuleText")
+ ._Updatable = DBGETPROP( RTRIM(tcView) + '.' + RTRIM(tcField),"FIELD","Updatable")
+ ._UpdateName = DBGETPROP( RTRIM(tcView) + '.' + RTRIM(tcField),"FIELD","UpdateName")
+ *--
+ ._Saved = .T.
+ ENDIF
+ ENDWITH
+ ENDPROC
+
+
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE
#IF .F.
LOCAL THIS AS CL_DBC_RELATIONS OF 'FOXBIN2PRG.PRG'
@@ -18437,45 +19870,37 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE
*---------------------------------------------------------------------------------------------------
* PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
* tcTable (v! IN ) Tabla de la que obtener las relaciones
- * taRelations (@? OUT) Array de relaciones
- * tnRelation_Count (@? OUT) Cantidad de relaciones
+ * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg
*---------------------------------------------------------------------------------------------------
- LPARAMETERS tcTable, taRelations, tnRelation_Count
+ LPARAMETERS tcTable, toFoxBin2Prg
- EXTERNAL ARRAY taRelations
+ #IF .F.
+ LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+ #ENDIF
TRY
- LOCAL I, X, lcText, loEx AS EXCEPTION ;
- , loRelation AS CL_DBC_RELATION OF 'FOXBIN2PRG.PRG'
- STORE NULL TO loRelation
- lcText = ''
- X = 0
+ WITH THIS AS CL_DBC_RELATIONS OF 'FOXBIN2PRG.PRG'
+ LOCAL lcText, loEx AS EXCEPTION ;
+ , loRelation AS CL_DBC_RELATION OF 'FOXBIN2PRG.PRG'
+ STORE NULL TO loRelation
+ lcText = ''
+ .read_BinDataToProperties(tcTable, @toFoxBin2Prg)
- DIMENSION taRelations(1,5)
- tnRelation_Count = ADBOBJECTS( taRelations,"RELATION" )
+ IF .Count > 0 THEN
+ TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+ <<>>
+ ENDTEXT
- IF tnRelation_Count > 0
- ASORT( taRelations, 2, -1, 0, 1 )
- ASORT( taRelations, 1, -1, 0, 1 )
+ FOR EACH loRelation IN THIS &&FOXOBJECT
+ lcText = lcText + loRelation.toText()
+ ENDFOR
- TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
- <<>>
- <<>>
- ENDTEXT
-
- loRelation = CREATEOBJECT('CL_DBC_RELATION')
-
- FOR I = 1 TO tnRelation_Count
- IF taRelations(I,1) == UPPER( RTRIM( tcTable ) )
- lcText = lcText + loRelation.toText( @taRelations, I )
- ENDIF
- ENDFOR
-
- TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
- <<>>
- <<>>
- ENDTEXT
- ENDIF
+ TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+ <<>>
+ <<>>
+ ENDTEXT
+ ENDIF
+ ENDWITH
CATCH TO loEx
IF THIS.l_Debug AND _VFP.STARTMODE = 0
@@ -18494,10 +19919,66 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE
ENDPROC
+ PROCEDURE read_BinDataToProperties
+ *---------------------------------------------------------------------------------------------------
+ * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
+ * tcTable (v! IN ) Tabla de la que obtener las relaciones
+ * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg
+ *---------------------------------------------------------------------------------------------------
+ LPARAMETERS tcTable, toFoxBin2Prg
+
+ #IF .F.
+ LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+ #ENDIF
+
+ TRY
+ WITH THIS AS CL_DBC_RELATIONS OF 'FOXBIN2PRG.PRG'
+ LOCAL I, lnRelation_Count, laRelations(1,5), lcText, loEx AS EXCEPTION ;
+ , loRelation AS CL_DBC_RELATION OF 'FOXBIN2PRG.PRG'
+
+ STORE NULL TO loRelation
+ lcText = ''
+ I = 0
+
+ lnRelation_Count = ADBOBJECTS( laRelations, "RELATION" )
+
+ IF lnRelation_Count > 0
+ ASORT( laRelations, 2, -1, 0, 1 )
+ ASORT( laRelations, 1, -1, 0, 1 )
+
+ FOR I = 1 TO lnRelation_Count
+ IF laRelations(I,1) == UPPER( RTRIM( tcTable ) )
+ loRelation = CREATEOBJECT('CL_DBC_RELATION')
+ loRelation.read_BinDataToProperties( @laRelations, I )
+ .ADD( loRelation, loRelation._Name )
+ ENDIF
+ ENDFOR
+
+ ENDIF
+
+ ENDWITH
+
+ CATCH TO loEx
+ IF THIS.l_Debug AND _VFP.STARTMODE = 0
+ SET STEP ON
+ ENDIF
+
+ THROW
+
+ FINALLY
+ STORE NULL TO loRelation
+ RELEASE loRelation
+
+ ENDTRY
+
+ RETURN lcText
+ ENDPROC
+
+
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_DBC_RELATION AS CL_DBC_BASE
#IF .F.
LOCAL THIS AS CL_DBC_RELATION OF 'FOXBIN2PRG.PRG'
@@ -18581,25 +20062,31 @@ DEFINE CLASS CL_DBC_RELATION AS CL_DBC_BASE
*---------------------------------------------------------------------------------------------------
* PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
* taRelations (!@ IN ) Array de relaciones
- * I (!@ IN ) Número de relación evaluado
+ * X (!@ IN ) Número de relación evaluado
*---------------------------------------------------------------------------------------------------
- LPARAMETERS taRelations, I
+ LPARAMETERS taRelations, X
+
+ EXTERNAL ARRAY taRelations
TRY
- LOCAL lcText, loEx AS EXCEPTION
- lcText = ''
+ WITH THIS AS CL_DBC_RELATION OF 'FOXBIN2PRG.PRG'
+ LOCAL lcText, loEx AS EXCEPTION
+ lcText = ''
+ .read_BinDataToProperties(@taRelations, X)
- TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
- <<>>
- <<>> <<'Relation ' + TRANSFORM(I)>>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>> <>
- <<>>
- ENDTEXT
+ TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
+ <<>>
+ <<>> <<._Name>>
+ <<>> <<._ChildTable>>
+ <<>> <<._ParentTable>>
+ <<>> <<._ChildIndex>>
+ <<>> <<._ParentIndex>>
+ <<>> <<._RefIntegrity>>
+ <<>>
+ ENDTEXT
+ ._ToText = lcText
+ ENDWITH
CATCH TO loEx
IF THIS.l_Debug AND _VFP.STARTMODE = 0
@@ -18634,10 +20121,35 @@ DEFINE CLASS CL_DBC_RELATION AS CL_DBC_BASE
ENDPROC
+ PROCEDURE read_BinDataToProperties
+ *---------------------------------------------------------------------------------------------------
+ * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
+ * taRelations (!@ IN ) Array de relaciones
+ * I (!@ IN ) Número de relación evaluado
+ *---------------------------------------------------------------------------------------------------
+ LPARAMETERS taRelations, I
+
+ EXTERNAL ARRAY taRelations
+
+ WITH THIS AS CL_DBC_RELATION OF 'FOXBIN2PRG.PRG'
+ IF NOT ._Saved THEN
+ ._Name = 'Relation ' + TRANSFORM(I)
+ ._ChildTable = ALLTRIM(taRelations(I,1))
+ ._ParentTable = ALLTRIM(taRelations(I,2))
+ ._ChildIndex = ALLTRIM(taRelations(I,3))
+ ._ParentIndex = ALLTRIM(taRelations(I,4))
+ ._RefIntegrity = ALLTRIM(taRelations(I,5))
+ *--
+ ._Saved = .T.
+ ENDIF
+ ENDWITH
+ ENDPROC
+
+
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE
#IF .F.
LOCAL THIS AS CL_DBF_TABLE OF 'FOXBIN2PRG.PRG'
@@ -18888,7 +20400,7 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_DBF_FIELDS AS CL_COL_BASE
#IF .F.
LOCAL THIS AS CL_DBF_FIELDS OF 'FOXBIN2PRG.PRG'
@@ -18966,8 +20478,13 @@ DEFINE CLASS CL_DBF_FIELDS AS CL_COL_BASE
* PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
* taFields (@? OUT) Array de información de campos
* tnField_Count (@? OUT) Cantidad de campos
+ * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg
*---------------------------------------------------------------------------------------------------
- LPARAMETERS taFields, tnField_Count
+ LPARAMETERS taFields, tnField_Count, toFoxBin2Prg
+
+ #IF .F.
+ LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+ #ENDIF
EXTERNAL ARRAY taFields
@@ -19016,7 +20533,7 @@ DEFINE CLASS CL_DBF_FIELDS AS CL_COL_BASE
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_DBF_FIELD AS CL_CUS_BASE
#IF .F.
LOCAL THIS AS CL_DBF_FIELD OF 'FOXBIN2PRG.PRG'
@@ -19176,7 +20693,7 @@ DEFINE CLASS CL_DBF_FIELD AS CL_CUS_BASE
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_DBF_INDEXES AS CL_COL_BASE
#IF .F.
LOCAL THIS AS CL_DBF_INDEXES OF 'FOXBIN2PRG.PRG'
@@ -19253,8 +20770,13 @@ DEFINE CLASS CL_DBF_INDEXES AS CL_COL_BASE
* taTagInfo (@? OUT) Array de información de indices
* tnTagInfo_Count (@? OUT) Cantidad de índices
* tc_InputFile (v! IN ) Archivo de entrada (el DBF)
+ * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg
*---------------------------------------------------------------------------------------------------
- LPARAMETERS taTagInfo, tnTagInfo_Count, tc_InputFile
+ LPARAMETERS taTagInfo, tnTagInfo_Count, tc_InputFile, toFoxBin2Prg
+
+ #IF .F.
+ LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+ #ENDIF
EXTERNAL ARRAY taTagInfo
@@ -19274,6 +20796,7 @@ DEFINE CLASS CL_DBF_INDEXES AS CL_COL_BASE
ENDTEXT
tnTagInfo_Count = ATAGINFO( taTagInfo )
+ ASORT( taTagInfo, 1, -1, 0, 1 )
loIndex = CREATEOBJECT("CL_DBF_INDEX")
FOR I = 1 TO tnTagInfo_Count
@@ -19307,7 +20830,7 @@ DEFINE CLASS CL_DBF_INDEXES AS CL_COL_BASE
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_DBF_INDEX AS CL_CUS_BASE
#IF .F.
LOCAL THIS AS CL_DBF_INDEX OF 'FOXBIN2PRG.PRG'
@@ -19431,7 +20954,7 @@ 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'
@@ -19533,7 +21056,7 @@ DEFINE CLASS CL_DBF_RECORDS AS CL_COL_BASE
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_DBF_RECORD AS CL_CUS_BASE
#IF .F.
LOCAL THIS AS CL_DBF_RECORD OF 'FOXBIN2PRG.PRG'
@@ -19638,7 +21161,7 @@ ENDDEFINE
*** DH 06/02/2014: end of added classes
-*******************************************************************************************************************
+
DEFINE CLASS CL_PROJ_SRV_HEAD AS CL_CUS_BASE
#IF .F.
LOCAL THIS AS CL_PROJ_SRV_HEAD OF 'FOXBIN2PRG.PRG'
@@ -19927,7 +21450,7 @@ DEFINE CLASS CL_PROJ_SRV_HEAD AS CL_CUS_BASE
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_PROJ_SRV_DATA AS CL_CUS_BASE
#IF .F.
LOCAL THIS AS CL_PROJ_SRV_DATA OF 'FOXBIN2PRG.PRG'
@@ -20033,7 +21556,7 @@ DEFINE CLASS CL_PROJ_SRV_DATA AS CL_CUS_BASE
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_PROJ_FILE AS CL_CUS_BASE
#IF .F.
LOCAL THIS AS CL_PROJ_FILE OF 'FOXBIN2PRG.PRG'
@@ -20062,7 +21585,7 @@ DEFINE CLASS CL_PROJ_FILE AS CL_CUS_BASE
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_MENU_COL_BASE AS CL_COL_BASE
_MEMBERDATA = [] ;
+ [] ;
@@ -20293,7 +21816,7 @@ DEFINE CLASS CL_MENU_COL_BASE AS CL_COL_BASE
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE
#IF .F.
LOCAL THIS AS CL_MENU OF 'FOXBIN2PRG.PRG'
@@ -21009,7 +22532,7 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE
ENDDEFINE
-*******************************************************************************************************************
+
DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE
_MEMBERDATA = [] ;
+ [] ;
@@ -22663,7 +24186,7 @@ DEFINE CLASS CL_CFG AS CUSTOM
+ [] ;
+ [] ;
+ [] ;
- + [] ;
+ + [] ;
+ [] ;
+ [] ;
+ [] ;
@@ -22694,7 +24217,7 @@ DEFINE CLASS CL_CFG AS CUSTOM
l_ClearDBFLastUpdate = NULL
l_OptimizeByFilestamp = NULL
l_RedirectClassPerFileToMain = NULL
- l_UseClassPerFile = NULL
+ n_UseClassPerFile = NULL
l_ClassPerFileCheck = NULL
n_ExtraBackupLevels = NULL
c_VC2 = NULL
@@ -22787,6 +24310,7 @@ DEFINE CLASS CL_LANG AS Custom
C_OPTIMIZATION_SKIPPING_ALREADY_PROCESSED_FILE_LOC = ""
C_OPTION_LOC = ""
C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC = ""
+ C_OUTER_MEMBER_DOES_NOT_MATCH_INNER_MEMBERS_LOC = ""
C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC = ""
C_OUTPUTFILE_NEWER_THAN_INPUTFILE_LOC = ""
C_PRESS_ESC_TO_CANCEL = ""
@@ -22936,6 +24460,7 @@ DEFINE CLASS CL_LANG AS Custom
.C_OPTIMIZATION_SKIPPING_ALREADY_PROCESSED_FILE_LOC = "Optimisation: sauter fichier déjà traité [<<(lcFile)>>]"
.C_OPTION_LOC = "Option"
.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC = "La classe externe ne correspond pas à la classe interne"
+ .C_OUTER_MEMBER_DOES_NOT_MATCH_INNER_MEMBERS_LOC = "L'élément extérieur ne correspond pas aux éléments intérieur"
.C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC = "Optimisation: fichier de sortie [<>] ne était pas écrasé parce que ce est la même que celle générée."
.C_OUTPUTFILE_NEWER_THAN_INPUTFILE_LOC = "Optimisation: fichier de sortie [<>] n'a pas été régénéré car il est plus récent que le fichier d'entrée."
.C_PRESS_ESC_TO_CANCEL = "Appuyez sur Esc pour Annuler"
@@ -23020,7 +24545,8 @@ DEFINE CLASS CL_LANG AS Custom
.C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC = "Operación no reconocida. Solo re reconoce SETNAME y GETNAME."
.C_OPTIMIZATION_SKIPPING_ALREADY_PROCESSED_FILE_LOC = "Optimización: saltando el archivo ya procesado [<<(lcFile)>>]"
.C_OPTION_LOC = "Option"
- .C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC = "La clase externa no coincide con la clase interna"
+ .C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC = "La clase externa no coincide con las clases internas"
+ .C_OUTER_MEMBER_DOES_NOT_MATCH_INNER_MEMBERS_LOC = "El miembro externo no coincide con los miembros internos"
.C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC = "Optimización: el archivo de salida [<>] no se sobreescribe por ser igual al generado."
.C_OUTPUTFILE_NEWER_THAN_INPUTFILE_LOC = "Optimización: el archivo de salida [<>] no se regenera por ser más nuevo que el de entrada."
.C_PRESS_ESC_TO_CANCEL = "Pulse Esc para Cancelar"
@@ -23106,6 +24632,7 @@ DEFINE CLASS CL_LANG AS Custom
.C_OPTIMIZATION_SKIPPING_ALREADY_PROCESSED_FILE_LOC = "Optimierung: Überspringen von bereits bearbeiteten Datei [<<(lcFile)>>]"
.C_OPTION_LOC = "Option"
.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC = "Die äußere Klasse nicht die innere Klassifizierung anzeigen lassen"
+ .C_OUTER_MEMBER_DOES_NOT_MATCH_INNER_MEMBERS_LOC = "Das äußere Element nicht den inneren Elementen entsprechen"
.C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC = "Optimierung: Ausgabedatei [<>] wurde nicht überschrieben, da sie dieselbe ist wie die neu generierte."
.C_OUTPUTFILE_NEWER_THAN_INPUTFILE_LOC = "Optimierung: Ausgabedatei [<>] wurde nicht erneuert, da sie neuer ist als die Ursprungsdatei."
.C_PRESS_ESC_TO_CANCEL = "Drücken Sie Esc für Abbrechen"
@@ -23191,6 +24718,7 @@ DEFINE CLASS CL_LANG AS Custom
.C_OPTIMIZATION_SKIPPING_ALREADY_PROCESSED_FILE_LOC = "Optimization: skipping already processed file [<<(lcFile)>>]"
.C_OPTION_LOC = "Option"
.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC = "The outer class does not match the inner classes"
+ .C_OUTER_MEMBER_DOES_NOT_MATCH_INNER_MEMBERS_LOC = "The outer member does not match the inner members"
.C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC = "Optimization: output file [<>] was not overwritten because it is the same as was generated."
.C_OUTPUTFILE_NEWER_THAN_INPUTFILE_LOC = "Optimization: output file [<>] was not regenerated because it is newer than the inputfile."
.C_PRESS_ESC_TO_CANCEL = "Press Esc to Cancel"