From af713dcd12e088468a30e2974a2a76e568db8f55 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 8 Feb 2015 19:54:30 +0100 Subject: [PATCH 01/16] =?UTF-8?q?Changeset:=20647=20-=20Agregado=20el=20en?= =?UTF-8?q?v=C3=ADo=20del=20objeto=20oFoxBin2Prg=20a=20algunos=20m=C3=A9to?= =?UTF-8?q?dos=20para=20poder=20centralizar=20m=C3=A1s=20cosas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 102 ++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 83 insertions(+), 19 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index e2bf2eb..f7932b7 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -131,7 +131,8 @@ * 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 +* 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 db2 v1.19.41: Permitir ordenar los campos alfabéticamente y mantener en una lista aparte el orden real, para facilitar el diff y el merge (Ryan Harris) * * *--------------------------------------------------------------------------------------------------- @@ -192,6 +193,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 alfabéticamente y mantener en una lista aparte el orden real, para facilitar el diff y el merge * * *--------------------------------------------------------------------------------------------------- @@ -549,6 +551,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -636,6 +639,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM n_CFG_Actual = 0 n_ID = 0 n_FileHandle = 0 + 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 @@ -13562,7 +13566,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg *-- Header toDatabase = CREATEOBJECT('CL_DBC') - C_FB2PRG_CODE = C_FB2PRG_CODE + toDatabase.toText() + C_FB2PRG_CODE = C_FB2PRG_CODE + toDatabase.toText(@toFoxBin2Prg) *-- Genero el DC2 @@ -15721,6 +15725,12 @@ 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 ; , loConnections AS CL_DBC_CONNECTIONS OF 'FOXBIN2PRG.PRG' ; @@ -15745,15 +15755,15 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE *-- Connections loConnections = ._Connections - lcText = lcText + loConnections.toText() + lcText = lcText + loConnections.toText( .F., .F., @toFoxBin2Prg ) *-- Tables loTables = ._Tables - lcText = lcText + loTables.toText() + lcText = lcText + loTables.toText( .F., .F., @toFoxBin2Prg ) *-- Views loViews = ._Views - lcText = lcText + loViews.toText() + lcText = lcText + loViews.toText( .F., .F., @toFoxBin2Prg ) SELECT CODE ; FROM TABLABIN ; @@ -15886,8 +15896,13 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE * 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 taConnections, tnConnection_Count, toFoxBin2Prg + + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF TRY LOCAL I, lcText, loEx AS EXCEPTION ; @@ -16200,8 +16215,13 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE * 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 taTables, tnTable_Count, toFoxBin2Prg + + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF EXTERNAL ARRAY taTables @@ -16388,7 +16408,11 @@ 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 *--------------------------------------------------------------------------------------------------- - LPARAMETERS tcTable + LPARAMETERS tcTable, toFoxBin2Prg + + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF TRY LOCAL lcText, loEx AS EXCEPTION ; @@ -16413,13 +16437,13 @@ DEFINE CLASS CL_DBC_TABLE AS CL_DBC_BASE ENDTEXT loFields = CREATEOBJECT('CL_DBC_FIELDS_DB') - lcText = lcText + loFields.toText( tcTable ) + lcText = lcText + loFields.toText( tcTable, @toFoxBin2Prg ) loIndexes = CREATEOBJECT('CL_DBC_INDEXES_DB') - lcText = lcText + loIndexes.toText( tcTable ) + lcText = lcText + loIndexes.toText( tcTable, @toFoxBin2Prg ) loRelations = CREATEOBJECT('CL_DBC_RELATIONS') - lcText = lcText + loRelations.toText( tcTable ) + lcText = lcText + loRelations.toText( tcTable, .F., .F., @toFoxBin2Prg ) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> @@ -16563,8 +16587,13 @@ DEFINE CLASS CL_DBC_FIELDS_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, lnField_Count, laFields(1), loEx AS EXCEPTION ; @@ -16861,8 +16890,13 @@ 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 ; @@ -17137,8 +17171,13 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE * 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 taViews, tnView_Count, toFoxBin2Prg + + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF EXTERNAL ARRAY taViews @@ -17364,8 +17403,13 @@ 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 ; @@ -17589,8 +17633,13 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE *--------------------------------------------------------------------------------------------------- * 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 ; @@ -17902,8 +17951,13 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE * 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, taRelations, tnRelation_Count, toFoxBin2Prg + + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF EXTERNAL ARRAY taRelations @@ -18429,8 +18483,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 @@ -18716,8 +18775,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 From 9f966a547d4d5ee73325aba7025c00cb6bea9e23 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 15 Mar 2015 19:14:30 +0100 Subject: [PATCH 02/16] =?UTF-8?q?-=20Crear=20temporalmente=20el=20archivo?= =?UTF-8?q?=20de=20eventos=20cuando=20se=20procesa=20un=20DBC=20que=20lo?= =?UTF-8?q?=20usa=20pero=20no=20existe=20f=C3=ADsicamente=20-=20Para=20vis?= =?UTF-8?q?tas=20y=20tablas=20de=20DBC,=20ordenar=20los=20campos=20alfab?= =?UTF-8?q?=C3=A9ticamente=20y=20mantener=20una=20lista=20separada=20del?= =?UTF-8?q?=20orden=20f=C3=ADsico=20de=20los=20mismos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 143 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 139 insertions(+), 4 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 47b2dbe..37026d6 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -14035,21 +14035,40 @@ 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 STORE 0 TO lnCodError 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() *-- Header - toDatabase = CREATEOBJECT('CL_DBC') C_FB2PRG_CODE = C_FB2PRG_CODE + toDatabase.toText(@toFoxBin2Prg) @@ -14075,8 +14094,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 @@ -15150,6 +15173,7 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE _MEMBERDATA = [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -15165,12 +15189,15 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE + [] ; + [] ; + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] __ObjectID = 0 + _DBC = '' _Name = '' @@ -15968,6 +15995,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 @@ -17148,6 +17237,29 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE IF lnField_Count > 0 TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> + <<>> + ENDTEXT + + SET TEXTMERGE TO MEMVAR lcText ADDITIVE NOSHOW + SET TEXTMERGE ON + + FOR X = 1 TO lnField_Count + \ <> + ENDFOR + + SET TEXTMERGE OFF + SET TEXTMERGE TO + + 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) ; + ORDER BY 1 ASC ; + INTO ARRAY laFields + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <<>> <<>> ENDTEXT @@ -18194,6 +18306,29 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE IF lnField_Count > 0 TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> + <<>> + ENDTEXT + + SET TEXTMERGE TO MEMVAR lcText ADDITIVE NOSHOW + SET TEXTMERGE ON + + FOR X = 1 TO lnField_Count + \ <> + ENDFOR + + SET TEXTMERGE OFF + SET TEXTMERGE TO + + 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) ; + ORDER BY 1 ASC ; + INTO ARRAY laFields + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <<>> <<>> ENDTEXT From cc41fc1c2eaa80374fb9633a4f734baf40848b0b Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 15 Mar 2015 20:06:41 +0100 Subject: [PATCH 03/16] =?UTF-8?q?-=20Agregado=20el=20ordenamiento=20alfab?= =?UTF-8?q?=C3=A9tico=20de=20los=20=C3=ADndices=20de=20las=20tablas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 37026d6..fbdaae2 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -682,7 +682,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION n_ID = 0 n_FileHandle = 0 n_Order_View_Fields = 1 - n_ProcessedFiles = 0 && Contador usado para los archivos file.class.ext + 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 @@ -892,10 +892,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 @@ -908,7 +908,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDIF ENDFOR ENDWITH - + RETURN lnCount ENDFUNC @@ -2733,7 +2733,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 @@ -14035,7 +14035,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg #ENDIF TRY - LOCAL lnCodError, laDatabases(1), lnDatabases_Count, lcEventsFile + LOCAL lnCodError, laDatabases(1), lnDatabases_Count, lcEventsFile STORE 0 TO lnCodError @@ -14099,7 +14099,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg ERASE (FORCEEXT(lcEventsFile,'FXP')) ENDIF RELEASE toDatabase, toEx, toFoxBin2Prg ; - , lnCodError, laDatabases, lnDatabases_Count + , lnCodError, laDatabases, lnDatabases_Count ENDTRY RETURN @@ -15999,7 +15999,7 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE 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) @@ -16038,13 +16038,13 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE 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 + lcHeader = TABLABIN.Property ._Name = UPPER( JUSTFNAME( DBF("TABLABIN") ) ) - + DO WHILE .T. IF NOT .readNext_DBC_HeaderDataRecord( @lcHeader, @lnPos, @lnLen, @lnID, @lcDataType, @lcPropName, @leData ) EXIT @@ -17558,6 +17558,7 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE 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) ; + ORDER BY 1 ; INTO ARRAY laIndexes lnIndex_Count = _TALLY @@ -19473,6 +19474,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 From 1f4c0103139d95d66874ac50623a89f310772da9 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 15 Mar 2015 21:30:57 +0100 Subject: [PATCH 04/16] =?UTF-8?q?-=20Reconstrucci=C3=B3n=20del=20DBC=20des?= =?UTF-8?q?de=20un=20DC2=20con=20los=20nuevos=20campos=20de=20orden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 315 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 249 insertions(+), 66 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index fbdaae2..2a75a6e 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -351,6 +351,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 '' @@ -502,7 +504,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' @@ -3569,7 +3571,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS frm_avance AS FORM Height = 110 Width = 628 @@ -3988,7 +3990,7 @@ DEFINE CLASS frm_avance AS FORM ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS frm_interactive AS form Height = 102 Width = 380 @@ -4075,7 +4077,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' @@ -5594,7 +5596,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' @@ -7864,7 +7866,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' @@ -8226,7 +8228,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' @@ -8585,7 +8587,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' @@ -9391,7 +9393,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' @@ -9834,7 +9836,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' @@ -10129,7 +10131,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' @@ -10215,10 +10217,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 @@ -10238,6 +10251,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 @@ -10314,7 +10333,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin 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' @@ -10495,7 +10514,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' @@ -12297,7 +12316,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' @@ -12603,7 +12622,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' @@ -12928,7 +12947,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' @@ -13665,7 +13684,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' @@ -13839,7 +13858,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' @@ -14011,7 +14030,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' @@ -14107,7 +14126,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' @@ -14185,7 +14204,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 ; @@ -14273,7 +14292,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' @@ -14353,7 +14372,7 @@ DEFINE CLASS CL_COL_BASE AS COLLECTION ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_MODULO AS CL_CUS_BASE #IF .F. LOCAL THIS AS CL_MODULO OF 'FOXBIN2PRG.PRG' @@ -14440,7 +14459,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' @@ -14462,7 +14481,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' @@ -14648,7 +14667,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' @@ -14687,7 +14706,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' @@ -14780,7 +14799,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' @@ -14801,7 +14820,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' @@ -15120,7 +15139,7 @@ ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_COL_BASE AS CL_COL_BASE #IF .F. LOCAL THIS AS CL_DBC_COL_BASE OF 'FOXBIN2PRG.PRG' @@ -15164,7 +15183,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' @@ -16121,7 +16140,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' @@ -16442,7 +16461,7 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE #IF .F. LOCAL THIS AS CL_DBC_CONNECTIONS OF 'FOXBIN2PRG.PRG' @@ -16579,7 +16598,7 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_CONNECTION AS CL_DBC_BASE #IF .F. LOCAL THIS AS CL_DBC_CONNECTION OF 'FOXBIN2PRG.PRG' @@ -16764,7 +16783,7 @@ DEFINE CLASS CL_DBC_CONNECTION AS CL_DBC_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE #IF .F. LOCAL THIS AS CL_DBC_TABLES OF 'FOXBIN2PRG.PRG' @@ -16906,7 +16925,7 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_TABLE AS CL_DBC_BASE #IF .F. LOCAL THIS AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG' @@ -16982,6 +17001,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 ) @@ -17138,12 +17161,22 @@ DEFINE CLASS CL_DBC_TABLE AS CL_DBC_BASE 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 *--------------------------------------------------------------------------------------------------- @@ -17156,7 +17189,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 @@ -17179,12 +17212,24 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE 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 @@ -17209,6 +17254,63 @@ 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 && campo + .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) @@ -17302,7 +17404,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_FIELD_DB AS CL_DBC_BASE #IF .F. LOCAL THIS AS CL_DBC_FIELD_DB OF 'FOXBIN2PRG.PRG' @@ -17460,7 +17562,7 @@ DEFINE CLASS CL_DBC_FIELD_DB AS CL_DBC_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE #IF .F. LOCAL THIS AS CL_DBC_INDEXES_DB OF 'FOXBIN2PRG.PRG' @@ -17606,7 +17708,7 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_INDEX_DB AS CL_DBC_BASE #IF .F. LOCAL THIS AS CL_DBC_INDEX_DB OF 'FOXBIN2PRG.PRG' @@ -17735,17 +17837,17 @@ DEFINE CLASS CL_DBC_INDEX_DB AS CL_DBC_BASE 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' @@ -17887,7 +17989,7 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE #IF .F. LOCAL THIS AS CL_DBC_VIEW OF 'FOXBIN2PRG.PRG' @@ -17999,6 +18101,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 @@ -18206,12 +18312,20 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE 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 @@ -18248,12 +18362,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 @@ -18279,6 +18405,63 @@ 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 && campo + .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) @@ -18372,7 +18555,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_FIELD_VW AS CL_DBC_BASE #IF .F. LOCAL THIS AS CL_DBC_FIELD_VW OF 'FOXBIN2PRG.PRG' @@ -18547,7 +18730,7 @@ DEFINE CLASS CL_DBC_FIELD_VW AS CL_DBC_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE #IF .F. LOCAL THIS AS CL_DBC_RELATIONS OF 'FOXBIN2PRG.PRG' @@ -18687,7 +18870,7 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBC_RELATION AS CL_DBC_BASE #IF .F. LOCAL THIS AS CL_DBC_RELATION OF 'FOXBIN2PRG.PRG' @@ -18827,7 +19010,7 @@ DEFINE CLASS CL_DBC_RELATION AS CL_DBC_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE #IF .F. LOCAL THIS AS CL_DBF_TABLE OF 'FOXBIN2PRG.PRG' @@ -19078,7 +19261,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' @@ -19211,7 +19394,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' @@ -19371,7 +19554,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' @@ -19508,7 +19691,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' @@ -19632,7 +19815,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' @@ -19734,7 +19917,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' @@ -19839,7 +20022,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' @@ -20128,7 +20311,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' @@ -20234,7 +20417,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' @@ -20263,7 +20446,7 @@ DEFINE CLASS CL_PROJ_FILE AS CL_CUS_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_MENU_COL_BASE AS CL_COL_BASE _MEMBERDATA = [] ; + [] ; @@ -20494,7 +20677,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' @@ -21210,7 +21393,7 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE ENDDEFINE -******************************************************************************************************************* + DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE _MEMBERDATA = [] ; + [] ; From 36d8945f40a3e1ff2f8824d4b1d48437e4d1a0ec Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 15 Mar 2015 23:53:10 +0100 Subject: [PATCH 05/16] - Reemplazado un SQL por un ASORT - Forzado modo legacy temporalmente (.n_Campos = 0) --- foxbin2prg.prg | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 2a75a6e..554adaf 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -17173,7 +17173,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE + [] ; + [] - + DIMENSION a_Campos(1,2) && col.1=campo, col.2=definición n_Campos = 0 @@ -17198,6 +17198,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 FOR I = I + 1 TO tnCodeLines .set_Line( @tcLine, @taCodeLines, I ) @@ -17353,12 +17354,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE SET TEXTMERGE OFF SET TEXTMERGE TO - - 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) ; - ORDER BY 1 ASC ; - INTO ARRAY laFields + ASORT( laFields, 1, -1, 0, 1 ) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> @@ -18348,6 +18344,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 FOR I = I + 1 TO tnCodeLines .set_Line( @tcLine, @taCodeLines, I ) @@ -18504,12 +18501,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE SET TEXTMERGE OFF SET TEXTMERGE TO - - 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) ; - ORDER BY 1 ASC ; - INTO ARRAY laFields + ASORT( laFields, 1, -1, 0, 1 ) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> From 1b0821088a36b0220c9035f2aae9e6d0c840714e Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Mon, 16 Mar 2015 00:16:23 +0100 Subject: [PATCH 06/16] - Quitado el forzado del modo Legacy - Borrado del DCX/DCT cuando se crea un nuevo DBC (el DCX [memo] existente acumulaba los memos anteriores) --- foxbin2prg.prg | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 554adaf..703c73b 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -16324,6 +16324,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 @@ -17198,7 +17200,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 + *.n_Campos = 0 && Para forzar modo LEGACY FOR I = I + 1 TO tnCodeLines .set_Line( @tcLine, @taCodeLines, I ) @@ -18344,7 +18346,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 + *.n_Campos = 0 && Para forzar modo LEGACY FOR I = I + 1 TO tnCodeLines .set_Line( @tcLine, @taCodeLines, I ) From ede506655c3637159225d2304d5c454d448179a9 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 19 Mar 2015 18:31:01 +0100 Subject: [PATCH 07/16] =?UTF-8?q?-=20Nuevo=20m=C3=A9todo=20"analizarBloque?= =?UTF-8?q?=5FEXTERNAL=5FMEMBER"=20(Prg->Bin)=20-=20Nuevo=20m=C3=A9todo=20?= =?UTF-8?q?"identificarBloquesDeCabecera"=20(Prg->Bin)=20-=20Nuevo=20m?= =?UTF-8?q?=C3=A9todo=20"verificar=5FMIEMBROS=5FEXTERNOS"=20(Prg->Bin)=20-?= =?UTF-8?q?=20Nueva=20propiedad=20"=5FSaved"=20en=20todas=20las=20clases?= =?UTF-8?q?=20intermedias=20para=20saver=20si=20los=20datos=20fueron=20pas?= =?UTF-8?q?ados=20a=20propiedades=20-=20Nueva=20propiedad=20"=5FToText"=20?= =?UTF-8?q?que=20guarda=20el=20texto=20generado=20por=20cada=20clase=20ind?= =?UTF-8?q?ependiente,=20para=20poder=20separar=20por=20archivo=20cuando?= =?UTF-8?q?=20se=20usa=20ClassPerFile=20-=20Nuevo=20m=C3=A9todo=20intermed?= =?UTF-8?q?io=20"read=5FBinDataToProperties"=20que=20lee=20los=20datos=20d?= =?UTF-8?q?el=20binario=20y=20los=20pasa=20a=20propiedades=20para=20luego?= =?UTF-8?q?=20generar=20los=20textos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TESTS/DATOS_READONLY/FB2P_DBC.DC2 | 37 + TESTS/DATOS_READONLY/fb2p_dbc.dbc | Bin 8968 -> 10123 bytes TESTS/DATOS_READONLY/fb2p_dbc.dct | Bin 147328 -> 155584 bytes TESTS/DATOS_READONLY/fb2p_dbc.dcx | Bin 5632 -> 5632 bytes TESTS/DATOS_READONLY/fb2p_depto.cdx | Bin 3072 -> 6144 bytes TESTS/DATOS_READONLY/fb2p_depto.db2 | 18 +- TESTS/DATOS_READONLY/fb2p_depto.dbf | Bin 422 -> 421 bytes foxbin2prg.prg | 1698 +++++++++++++++++++++------ 8 files changed, 1379 insertions(+), 374 deletions(-) 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 39fe57a02a013aa2ca1f01903a9c2fcf50105719..4cc431df52c764a5cabd4ee1bb8f81d6d4627046 100644 GIT binary patch delta 246 zcmeBh>-J|g;Aa-L+Q=%-E$qX|00s(R0AgxQ*5_WrsI~bDx3M^rmdRuT?ujDin5s-C zU*(>tV1p@P1~h{Yh&}UCQY$7uEu6&000s(R0Aeak*5_Wrq#!VPo$|!ZX*>(X7^ML79108o diff --git a/TESTS/DATOS_READONLY/fb2p_dbc.dct b/TESTS/DATOS_READONLY/fb2p_dbc.dct index b5f6cf72def8db2e42039a8d4f86acd6fb73d592..dfa83a048705f4f55c76cf7dd3d28c9e1500c91a 100644 GIT binary patch delta 125 zcmZqp&v9TsCkF!qXFUT0gTqF_PmB{4IGdT7+L@Ucw=**_)!I&OU}fLV-p2T!d3zfR z(?RCR?W_*l+gX?nFfRv^EF8SNK%I;Xypw%3O;{O$Z28F@Eb^0sHDx9@v$$Z_3DWEy=*Z$H4F(2)Y>l0~P)M&%wdLY{*ch zCst<8Rc66aZ7EhM#8qu2RykRn=fGq(-p#DV$wiq3lXvo}iUg(RB$j06=P4)@!B~cy z@A0azaT|cm1evQjnODS?YrBwz)=%w8TEDa>2Z%Uro+iT0IC-V0ItR>z$rnTo0N;c- A-T(jq delta 135 zcmZqBY0wd1U}1m(K`w>|jGGymUNCO{!N|p>D$c;b$H4F(2v#!u2P*pipM!&g*^r@1 zPppieqgp_$Qi!X1vM$eoi3;+Q-|}ppyp&gU^F3Y_Hf}wzE|5;s$-E-AZ2Vdmv?pmz c4iRyhsKBy$ng}=JL;&Cvfq!uR^Wfp8^WctY{%?=cV8GoCRAE?0Io`sE# ziE+V#je@rr6&i996`&dz#Nb9Vq%b5fLCwC&DCzF%=Njbb12hVo9Wuyv++kz}no?iS Z#LmvdxP@U0$P%vH1i_TFvZT_iVgRkJMA85N delta 42 scmZoLXpq>z#3ISa@E-~uF#i9~z`)Nhz{0}Jz!tDk@B!oI->j@`0Fj#z-~a#s 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.dbc0x00000030Visual FoxPro @@ -68,6 +68,22 @@ ASCENDINGMACHINE + + 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 b6df06199def2dc9cf20071e0c8bf0b55cb25cf0..6b4840d8666262f7cde5db655ad10da522f9139d 100644 GIT binary patch delta 13 UcmZ3+yp);6fS*}-Bg;ZY02XBf0ssI2 delta 15 WcmZ3=yo{N}fRB-NBg;ZYMkxRs2m=fN diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 703c73b..01aa384 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -271,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) @@ -551,6 +554,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -1932,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 @@ -5613,6 +5646,8 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE + [] ; + [] ; + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -7353,12 +7388,45 @@ 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 ) + ENDWITH && THIS + ENDIF + + RETURN llBloqueEncontrado + ENDPROC + + + + + PROCEDURE analizarBloque_EXTERNAL_MEMBER + *------------------------------------------------------ + *-- Analiza el bloque *< EXTERNAL_MEMBER: Name="nombre-miembro" Type="tipo-de-miembro" /> + *------------------------------------------------------ + LPARAMETERS toModulo, tcLine, taCodeLines, I, tnCodeLines + + #IF .F. + LOCAL toModulo AS CL_MODULO 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 ) + + toModulo._ExternalClasses_Count = toModulo._ExternalClasses_Count + 1 + 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( 'Type', 'C', @laPropsAndValues ) ENDWITH && THIS ENDIF @@ -7843,15 +7911,15 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE 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 @@ -10096,11 +10164,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. @@ -10165,18 +10232,72 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin TRY LOCAL lnCodError, loEx AS EXCEPTION, loReg, lcLine, laCodeLines(1), lnCodeLines ; - , laLineasExclusion(1), lnBloquesExclusion, I + , laLineasExclusion(1), lnBloquesExclusion, I ; + , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' STORE 0 TO lnCodError, lnCodeLines STORE '' TO lcLine STORE NULL TO loReg, toModulo WITH THIS AS c_conversor_prg_a_dbc OF 'FOXBIN2PRG.PRG' - C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) + + *-------- *fdb* + loLang = _SCREEN.o_FoxBin2Prg_Lang + toModulo = CREATEOBJECT('CL_MODULO') + + IF toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_RedirectClassPerFileToMain + C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) + + lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + + .AvanceDelProceso( 'Identifying Header Blocks...', 1, lnCodeLines, 1 ) + .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) + + .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) + 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 ) + + *-- 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 + 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 ) + C_FB2PRG_CODE = C_FB2PRG_CODE + FILETOSTR( lcInputFile_Class ) + 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, @toModulo, @toFoxBin2Prg ) + + ENDIF + *-------- + + + *C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) 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' ) @@ -10264,6 +10385,89 @@ 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 + * toModulo (@? 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, toModulo, toFoxBin2Prg + + EXTERNAL ARRAY taCodeLines, taLineasExclusion + + #IF .F. + LOCAL toModulo AS CL_MODULO 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_CLASS_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 + + *-- 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 + .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( @toModulo, @lcLine, @taCodeLines, @I, tnCodeLines ) + llFoxBin2Prg_Completed = .T. + + CASE NOT llEXTERNAL_CLASS_Completed AND .analizarBloque_EXTERNAL_MEMBER( @toModulo, @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, toModulo, 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) @@ -10272,16 +10476,18 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin * 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 - * + * 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 @@ -10298,15 +10504,13 @@ DEFINE CLASS c_conversor_prg_a_dbc 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 + 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 @@ -10330,6 +10534,49 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ENDPROC + PROCEDURE verificar_MIEMBROS_EXTERNOS + *-------------------------------------------------------------------------------- + * Compara las clases definidas en la cabecera con las clases encontradas luego + *-------------------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * toModulo (@? OUT) Objeto con toda la información del módulo analizado + * toFoxBin2Prg (@? IN ) Referencia al objeto principal + *-------------------------------------------------------------------------------------------------------------- + LPARAMETERS toModulo, toFoxBin2Prg + + #IF .F. + LOCAL toModulo AS CL_MODULO 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 las Clases, si son Externas y se indicó chequearlas + IF toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_ClassPerFileCheck + 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,1) ) + 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 + ENDIF + ENDPROC + + ENDDEFINE && CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin @@ -14054,9 +14301,10 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg #ENDIF TRY - LOCAL lnCodError, laDatabases(1), lnDatabases_Count, lcEventsFile + LOCAL lnCodError, laDatabases(1), lnDatabases_Count, lcEventsFile, laClasses(1,2), lnClasses_Count - STORE 0 TO lnCodError + STORE 0 TO lnCodError, lnClasses_Count + STORE '' TO laClasses WITH THIS AS c_conversor_dbc_a_prg OF 'FOXBIN2PRG.PRG' lnDatabases_Count = ADATABASES(laDatabases) @@ -14304,6 +14552,7 @@ DEFINE CLASS CL_COL_BASE AS COLLECTION _MEMBERDATA = [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -14311,6 +14560,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 @@ -14395,7 +14645,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 @@ -15194,6 +15444,8 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE + [] ; + [] ; + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -15205,6 +15457,7 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -15218,6 +15471,8 @@ 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 @@ -16193,8 +16448,15 @@ 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' ; @@ -16372,14 +16634,14 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE PROCEDURE toText - LPARAMETERS toFoxBin2Prg + 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' ; @@ -16387,7 +16649,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 @@ -16402,15 +16664,15 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE *-- Connections loConnections = ._Connections - lcText = lcText + loConnections.toText( .F., .F., @toFoxBin2Prg ) + lcConnections = loConnections.toText( @toFoxBin2Prg ) *-- Tables loTables = ._Tables - lcText = lcText + loTables.toText( .F., .F., @toFoxBin2Prg ) + lcTables = loTables.toText( @toFoxBin2Prg ) *-- Views loViews = ._Views - lcText = lcText + loViews.toText( .F., .F., @toFoxBin2Prg ) + lcViews = loViews.toText( @toFoxBin2Prg ) SELECT CODE ; FROM TABLABIN ; @@ -16418,11 +16680,19 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE INTO ARRAY laCode ._StoredProcedures = laCode(1,1) + IF NOT toFoxBin2Prg.l_UseClassPerFile 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 @@ -16541,11 +16811,9 @@ 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, toFoxBin2Prg + LPARAMETERS toFoxBin2Prg #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' @@ -16554,31 +16822,40 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE TRY LOCAL I, 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 = '' + *DIMENSION taConnections(1) + *tnConnection_Count = ADBOBJECTS( taConnections,"CONNECTION" ) + .read_bindatatoproperties() - IF tnConnection_Count > 0 - ASORT( taConnections, 1, -1, 0, 1 ) + *IF tnConnection_Count > 0 + IF .Count > 0 THEN + *ASORT( taConnections, 1, -1, 0, 1 ) - 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') + *FOR I = 1 TO tnConnection_Count + * loConnection = CREATEOBJECT('CL_DBC_CONNECTION') + * lcText = lcText + loConnection.toText( taConnections(I) ) + * loConnection = NULL + *ENDFOR + .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 - ENDIF + ENDWITH CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -16597,6 +16874,58 @@ DEFINE CLASS CL_DBC_CONNECTIONS 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_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 + *ASORT( laConnections, 1, -1, 0, 1 ) + + 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 + ENDIF + + THROW + + FINALLY + loConnection = NULL + RELEASE I, loConnection + + ENDTRY + + RETURN lnConnection_Count + ENDPROC + + ENDDEFINE @@ -16718,28 +17047,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 @@ -16782,6 +17117,36 @@ 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 @@ -16860,52 +17225,59 @@ 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, toFoxBin2Prg + LPARAMETERS toFoxBin2Prg #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF - EXTERNAL ARRAY taTables - TRY LOCAL I, 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 + STORE 0 TO I, tnTable_Count + lcText = '' + .read_bindatatoproperties() - IF tnTable_Count > 0 - ASORT( taTables, 1, -1, 0, 1 ) + *DIMENSION taTables(1) + *tnTable_Count = ADBOBJECTS( taTables,"TABLE" ) - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> - ENDTEXT + *IF tnTable_Count > 0 + IF .Count > 0 THEN + *ASORT( taTables, 1, -1, 0, 1 ) - loTable = CREATEOBJECT('CL_DBC_TABLE') + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> + ENDTEXT - FOR I = 1 TO tnTable_Count - lcText = lcText + loTable.toText( taTables(I) ) - ENDFOR + *FOR I = 1 TO tnTable_Count + * loTable = CREATEOBJECT('CL_DBC_TABLE') + * lcText = lcText + loTable.toText( taTables(I) ) + * loTable = NULL + *ENDFOR + .KeySort = 2 + FOR EACH loTable IN THIS &&FOXOBJECT + lcText = lcText + loTable.toText( loTable._Name ) + 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(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 @@ -16924,6 +17296,61 @@ 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 + *ASORT( laTables, 1, -1, 0, 1 ) + + 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 @@ -17058,6 +17485,7 @@ 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, toFoxBin2Prg @@ -17066,39 +17494,45 @@ DEFINE CLASS CL_DBC_TABLE AS CL_DBC_BASE #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, @toFoxBin2Prg ) + loFields = CREATEOBJECT('CL_DBC_FIELDS_DB') + lcFields = loFields.toText( tcTable, @toFoxBin2Prg ) - loIndexes = CREATEOBJECT('CL_DBC_INDEXES_DB') - lcText = lcText + loIndexes.toText( tcTable, @toFoxBin2Prg ) + loIndexes = CREATEOBJECT('CL_DBC_INDEXES_DB') + lcIndexes = loIndexes.toText( tcTable, @toFoxBin2Prg ) - loRelations = CREATEOBJECT('CL_DBC_RELATIONS') - lcText = lcText + loRelations.toText( tcTable, .F., .F., @toFoxBin2Prg ) + 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 @@ -17160,6 +17594,27 @@ 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 @@ -17212,7 +17667,6 @@ 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 ) @@ -17329,56 +17783,70 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE 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 ; + WITH THIS AS CL_DBC_FIELDS_DB OF 'FOXBIN2PRG.PRG' + STORE NULL TO loField + STORE 0 TO X, lnField_Count + lcText = '' + + .read_bindatatoproperties( tcTable, @toFoxBin2Prg ) + + *_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 + *lnField_Count = _TALLY - IF lnField_Count > 0 - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> - <<>> - ENDTEXT + *IF lnField_Count > 0 + IF .Count > 0 THEN + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> + <<>> + ENDTEXT - SET TEXTMERGE TO MEMVAR lcText ADDITIVE NOSHOW - SET TEXTMERGE ON + SET TEXTMERGE TO MEMVAR lcText ADDITIVE NOSHOW + SET TEXTMERGE ON - FOR X = 1 TO lnField_Count - \ <> - ENDFOR + *FOR X = 1 TO lnField_Count + * \ <> + *ENDFOR + .KeySort = 0 + FOR EACH loField IN THIS &&FOXOBJECT + \ <> + ENDFOR - SET TEXTMERGE OFF - SET TEXTMERGE TO - ASORT( laFields, 1, -1, 0, 1 ) + SET TEXTMERGE OFF + SET TEXTMERGE TO + *ASORT( laFields, 1, -1, 0, 1 ) - 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 - loField = CREATEOBJECT('CL_DBC_FIELD_DB') + *FOR X = 1 TO lnField_Count + * loField = CREATEOBJECT('CL_DBC_FIELD_DB') + * lcText = lcText + loField.toText( tcTable, laFields(X) ) + * loField = NULL + *ENDFOR + .KeySort = 2 + FOR EACH loField IN THIS &&FOXOBJECT + lcText = lcText + loField.toText( tcTable, loField._Name ) + ENDFOR - FOR X = 1 TO lnField_Count - lcText = lcText + loField.toText( tcTable, laFields(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 + "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 @@ -17388,10 +17856,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 @@ -17399,6 +17865,70 @@ 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 + + EXTERNAL ARRAY taFields + #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 + *ASORT( laFields, 1, -1, 0, 1 ) + + 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 @@ -17506,20 +18036,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 @@ -17557,6 +18093,28 @@ 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 @@ -17648,41 +18206,50 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE #ENDIF TRY - LOCAL X, lcText, lnIndex_Count, laIndexes(1), loEx AS EXCEPTION ; + LOCAL X, 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 ; + WITH THIS AS CL_DBC_INDEXES_DB OF 'FOXBIN2PRG.PRG' + STORE NULL TO loIndex + lcText = '' + .read_bindatatoproperties(tcTable, @toFoxBin2Prg) + + *_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) ; ORDER BY 1 ; INTO ARRAY laIndexes - lnIndex_Count = _TALLY + *lnIndex_Count = _TALLY - IF lnIndex_Count > 0 - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> - ENDTEXT + *IF lnIndex_Count > 0 + IF .Count > 0 THEN + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> + ENDTEXT - loIndex = CREATEOBJECT('CL_DBC_INDEX_DB') + *FOR X = 1 TO lnIndex_Count + * loIndex = CREATEOBJECT('CL_DBC_INDEX_DB') + * lcText = lcText + loIndex.toText( tcTable + '.' + laIndexes(X) ) + * loIndex = NULL + *ENDFOR + *.KeySort = 2 + 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 @@ -17692,8 +18259,6 @@ 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 @@ -17703,6 +18268,70 @@ 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) ; + ORDER BY 1 ; + INTO ARRAY laIndexes + lnIndex_Count = _TALLY + + IF lnIndex_Count > 0 + *ASORT( laFields, 1, -1, 0, 1 ) + + 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 @@ -17796,13 +18425,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 @@ -17832,6 +18465,21 @@ 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 @@ -17919,53 +18567,59 @@ 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, toFoxBin2Prg + LPARAMETERS toFoxBin2Prg #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF - EXTERNAL ARRAY taViews - 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 = '' + *lcDBC = JUSTSTEM(DBC()) + .read_bindatatoproperties() - IF tnView_Count > 0 - ASORT( taViews, 1, -1, 0, 1 ) + *DIMENSION taViews(1) + *tnView_Count = ADBOBJECTS( taViews,"VIEW" ) - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> - ENDTEXT + *IF tnView_Count > 0 + IF .Count > 0 THEN + *ASORT( taViews, 1, -1, 0, 1 ) - loView = CREATEOBJECT('CL_DBC_VIEW') + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> + ENDTEXT - FOR I = 1 TO tnView_Count - lcText = lcText + loView.toText( taViews(I) ) - 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 + .KeySort = 2 + FOR EACH loView IN THIS &&FOXOBJECT + lcText = lcText + loView.toText( loView._Name ) + 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 @@ -17984,6 +18638,61 @@ 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 + *ASORT( taTables, 1, -1, 0, 1 ) + + 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 @@ -18166,65 +18875,74 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE #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' + .read_bindatatoproperties(tcView) + TEXT TO lcText 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) + *IF NOT EMPTY(._Offline) AND EVALUATE(._Offline) + IF ._Offline THEN TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <<.DBGETPROP(tcView,"VIEW","Path")>> - <<>> <<.DBGETPROP(tcView,"VIEW","RecordCount")>> + <<>> <<._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 = CREATEOBJECT('CL_DBC_RELATIONS') + loRelations = ._Relations + lcRelations = loRelations.toText( tcView ) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <> + <> + <> <<>> ENDTEXT + + ._ToText = lcText ENDWITH && THIS @@ -18307,6 +19025,48 @@ 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 @@ -18474,58 +19234,69 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE #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 ; + WITH THIS AS CL_DBC_FIELDS_VW OF 'FOXBIN2PRG.PRG' + *_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 + *lnField_Count = _TALLY + .read_bindatatoproperties(tcView, @toFoxBin2Prg) - IF lnField_Count > 0 - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> - <<>> - ENDTEXT + *IF lnField_Count > 0 + IF .Count > 0 THEN + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> + <<>> + ENDTEXT - SET TEXTMERGE TO MEMVAR lcText ADDITIVE NOSHOW - SET TEXTMERGE ON + SET TEXTMERGE TO MEMVAR lcText ADDITIVE NOSHOW + SET TEXTMERGE ON - FOR X = 1 TO lnField_Count - \ <> - ENDFOR + *FOR X = 1 TO lnField_Count + * \ <> + *ENDFOR + .KeySort = 0 + FOR EACH loField IN THIS &&FOXOBJECT + \ <> + ENDFOR - SET TEXTMERGE OFF - SET TEXTMERGE TO - ASORT( laFields, 1, -1, 0, 1 ) + SET TEXTMERGE OFF + SET TEXTMERGE TO + *ASORT( laFields, 1, -1, 0, 1 ) - 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 - loField = CREATEOBJECT("CL_DBC_FIELD_VW") + *loField = CREATEOBJECT("CL_DBC_FIELD_VW") - FOR X = 1 TO lnField_Count - lcText = lcText + loField.toText( tcView, laFields(X) ) - ENDFOR + *FOR X = 1 TO lnField_Count + * lcText = lcText + loField.toText( tcView, laFields(X) ) + *ENDFOR + .KeySort = 2 + 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 + 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 @@ -18535,8 +19306,6 @@ 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 @@ -18546,6 +19315,70 @@ 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 + *ASORT( taFields, 1, -1, 0, 1 ) + + 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 I, loField + + ENDTRY + + RETURN lnField_Count + ENDPROC + + ENDDEFINE @@ -18659,31 +19492,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 @@ -18721,6 +19557,32 @@ 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 @@ -18799,50 +19661,53 @@ 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, toFoxBin2Prg + LPARAMETERS tcTable, toFoxBin2Prg #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF - EXTERNAL ARRAY taRelations - 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 I, lnRelation_Count, laRelations(1,5), lcText, loEx AS EXCEPTION ; + , loRelation AS CL_DBC_RELATION OF 'FOXBIN2PRG.PRG' + STORE NULL TO loRelation + lcText = '' + X = 0 + .read_bindatatoproperties(tcTable, @toFoxBin2Prg) - DIMENSION taRelations(1,5) - tnRelation_Count = ADBOBJECTS( taRelations,"RELATION" ) + *DIMENSION laRelations(1,5) + *lnRelation_Count = ADBOBJECTS( laRelations,"RELATION" ) - IF tnRelation_Count > 0 - ASORT( taRelations, 2, -1, 0, 1 ) - ASORT( taRelations, 1, -1, 0, 1 ) + *IF lnRelation_Count > 0 + IF .Count > 0 THEN + *ASORT( laRelations, 2, -1, 0, 1 ) + *ASORT( laRelations, 1, -1, 0, 1 ) - 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 - loRelation = CREATEOBJECT('CL_DBC_RELATION') + *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 + *FOR I = 1 TO lnRelation_Count + * IF laRelations(I,1) == UPPER( RTRIM( tcTable ) ) + * lcText = lcText + loRelation.toText( @laRelations, I ) + * ENDIF + *ENDFOR + FOR EACH loRelation IN THIS &&FOXOBJECT + lcText = lcText + loRelation.toText() + 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 @@ -18861,6 +19726,62 @@ 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 X, lnRelation_Count, laRelations(1,5), lcText, loEx AS EXCEPTION ; + , loRelation AS CL_DBC_RELATION OF 'FOXBIN2PRG.PRG' + + STORE NULL TO loRelation + lcText = '' + X = 0 + + lnRelation_Count = ADBOBJECTS( laRelations, "RELATION" ) + + IF lnRelation_Count > 0 + ASORT( laRelations, 2, -1, 0, 1 ) + ASORT( laRelations, 1, -1, 0, 1 ) + + FOR X = 1 TO lnRelation_Count + IF laRelations(X,1) == UPPER( RTRIM( tcTable ) ) + loRelation = CREATEOBJECT('CL_DBC_RELATION') + loRelation.read_bindatatoproperties( @laRelations, X ) + .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 X, loRelation + + ENDTRY + + RETURN lcText + ENDPROC + + ENDDEFINE @@ -18948,25 +19869,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 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 @@ -19001,6 +19928,31 @@ 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 From a5cd143212d8889936924072c7c660355bb1130d Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 19 Mar 2015 18:58:04 +0100 Subject: [PATCH 08/16] =?UTF-8?q?-=20Agregados=20algunos=20ADDITIVE=20que?= =?UTF-8?q?=20faltaban=20y=20que=20causaban=20p=C3=A9rdida=20de=20datos=20?= =?UTF-8?q?del=20dc2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 01aa384..996a47b 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -16835,7 +16835,6 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE *ASORT( taConnections, 1, -1, 0, 1 ) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <<>> ENDTEXT @@ -17251,7 +17250,6 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE *ASORT( taTables, 1, -1, 0, 1 ) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <<>> ENDTEXT @@ -17801,7 +17799,6 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE *IF lnField_Count > 0 IF .Count > 0 THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <<>> <<>> ENDTEXT @@ -18225,7 +18222,6 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE *IF lnIndex_Count > 0 IF .Count > 0 THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <<>> ENDTEXT @@ -18593,7 +18589,6 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE *ASORT( taViews, 1, -1, 0, 1 ) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <<>> ENDTEXT @@ -18885,7 +18880,7 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE WITH THIS AS CL_DBC_VIEW OF 'FOXBIN2PRG.PRG' .read_bindatatoproperties(tcView) - TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> <<>> <<>> <> @@ -18918,7 +18913,7 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE *-- OfflineRecordCount *IF NOT EMPTY(._Offline) AND EVALUATE(._Offline) IF ._Offline THEN - TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> <<._Path>> <<>> <<._RecordCount>> ENDTEXT @@ -19251,7 +19246,6 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE *IF lnField_Count > 0 IF .Count > 0 THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <<>> <<>> ENDTEXT @@ -19687,7 +19681,6 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE *ASORT( laRelations, 1, -1, 0, 1 ) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <<>> ENDTEXT @@ -19881,7 +19874,7 @@ DEFINE CLASS CL_DBC_RELATION AS CL_DBC_BASE lcText = '' .read_bindatatoproperties(@taRelations, X) - TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> <<>> <<._Name>> <<>> <<._ChildTable>> From 9c4d3e9d6f3029f4714d25d00ecd3d790e45ca31 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 19 Mar 2015 19:25:29 +0100 Subject: [PATCH 09/16] =?UTF-8?q?-=20Algunos=20cambios=20para=20poder=20re?= =?UTF-8?q?generar=20en=20modo=20Legacy=20-=20Limpieza=20de=20c=C3=B3digo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 192 +++++++++++-------------------------------------- 1 file changed, 41 insertions(+), 151 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 996a47b..969d343 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -16820,29 +16820,20 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE #ENDIF TRY - LOCAL I, lcText, loEx AS EXCEPTION ; + LOCAL lcText, loEx AS EXCEPTION ; , loConnection AS CL_DBC_CONNECTION OF 'FOXBIN2PRG.PRG' WITH THIS AS CL_DBC_CONNECTIONS OF 'FOXBIN2PRG.PRG' loConnection = NULL lcText = '' - *DIMENSION taConnections(1) - *tnConnection_Count = ADBOBJECTS( taConnections,"CONNECTION" ) .read_bindatatoproperties() - *IF tnConnection_Count > 0 IF .Count > 0 THEN - *ASORT( taConnections, 1, -1, 0, 1 ) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> ENDTEXT - *FOR I = 1 TO tnConnection_Count - * loConnection = CREATEOBJECT('CL_DBC_CONNECTION') - * lcText = lcText + loConnection.toText( taConnections(I) ) - * loConnection = NULL - *ENDFOR .KeySort = 2 FOR EACH loConnection IN THIS &&FOXOBJECT lcText = lcText + loConnection.toText( loConnection._Name ) @@ -16865,7 +16856,7 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE FINALLY loConnection = NULL - RELEASE I, loConnection + RELEASE loConnection ENDTRY @@ -16898,8 +16889,6 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE lnConnection_Count = ADBOBJECTS( laConnections,"CONNECTION" ) IF lnConnection_Count > 0 - *ASORT( laConnections, 1, -1, 0, 1 ) - FOR I = 1 TO lnConnection_Count loConnection = CREATEOBJECT('CL_DBC_CONNECTION') loConnection.read_bindatatoproperties( laConnections(I) ) @@ -17233,31 +17222,19 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE #ENDIF TRY - LOCAL I, lcText, loEx AS EXCEPTION ; + LOCAL lcText, loEx AS EXCEPTION ; , loTable AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG' WITH THIS AS CL_DBC_TABLES OF 'FOXBIN2PRG.PRG' STORE NULL TO loTable - STORE 0 TO I, tnTable_Count lcText = '' .read_bindatatoproperties() - *DIMENSION taTables(1) - *tnTable_Count = ADBOBJECTS( taTables,"TABLE" ) - - *IF tnTable_Count > 0 IF .Count > 0 THEN - *ASORT( taTables, 1, -1, 0, 1 ) - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> ENDTEXT - *FOR I = 1 TO tnTable_Count - * loTable = CREATEOBJECT('CL_DBC_TABLE') - * lcText = lcText + loTable.toText( taTables(I) ) - * loTable = NULL - *ENDFOR .KeySort = 2 FOR EACH loTable IN THIS &&FOXOBJECT lcText = lcText + loTable.toText( loTable._Name ) @@ -17286,7 +17263,7 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE FINALLY STORE NULL TO loTable - RELEASE I, loTable + RELEASE loTable ENDTRY @@ -17320,8 +17297,6 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE lnTable_Count = ADBOBJECTS( laTables,"TABLE" ) IF lnTable_Count > 0 - *ASORT( laTables, 1, -1, 0, 1 ) - FOR I = 1 TO lnTable_Count loTable = CREATEOBJECT("CL_DBC_TABLE") loTable.read_bindatatoproperties( laTables(I) ) @@ -17668,13 +17643,13 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE loField = CREATEOBJECT("CL_DBC_FIELD_DB") loField.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - IF .n_Campos = 0 THEN + *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 + *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 @@ -17682,9 +17657,9 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE 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 + *FOR lnPos = 1 TO .n_Campos + * .ADD( .a_Campos( lnPos, 2), .a_Campos( lnPos, 1) ) + *ENDFOR ENDWITH && THIS ENDIF @@ -17789,14 +17764,6 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE .read_bindatatoproperties( tcTable, @toFoxBin2Prg ) - *_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 IF .Count > 0 THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> @@ -17806,9 +17773,6 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE SET TEXTMERGE TO MEMVAR lcText ADDITIVE NOSHOW SET TEXTMERGE ON - *FOR X = 1 TO lnField_Count - * \ <> - *ENDFOR .KeySort = 0 FOR EACH loField IN THIS &&FOXOBJECT \ <> @@ -17816,7 +17780,6 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE SET TEXTMERGE OFF SET TEXTMERGE TO - *ASORT( laFields, 1, -1, 0, 1 ) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> @@ -17824,12 +17787,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE <<>> ENDTEXT - *FOR X = 1 TO lnField_Count - * loField = CREATEOBJECT('CL_DBC_FIELD_DB') - * lcText = lcText + loField.toText( tcTable, laFields(X) ) - * loField = NULL - *ENDFOR - .KeySort = 2 + *.KeySort = 2 && Comento para forzar modo LEGACY FOR EACH loField IN THIS &&FOXOBJECT lcText = lcText + loField.toText( tcTable, loField._Name ) ENDFOR @@ -17870,7 +17828,6 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE *--------------------------------------------------------------------------------------------------- LPARAMETERS tcTable, toFoxBin2Prg - EXTERNAL ARRAY taFields #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF @@ -17895,8 +17852,6 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE lnField_Count = _TALLY IF lnField_Count > 0 - *ASORT( laFields, 1, -1, 0, 1 ) - FOR I = 1 TO lnField_Count loField = CREATEOBJECT("CL_DBC_FIELD_DB") loField.read_bindatatoproperties( tcTable, laFields(I) ) @@ -18203,7 +18158,7 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE #ENDIF TRY - LOCAL X, lcText, loEx AS EXCEPTION ; + LOCAL lcText, loEx AS EXCEPTION ; , loIndex AS CL_DBC_INDEX_DB OF 'FOXBIN2PRG.PRG' WITH THIS AS CL_DBC_INDEXES_DB OF 'FOXBIN2PRG.PRG' @@ -18211,26 +18166,12 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE lcText = '' .read_bindatatoproperties(tcTable, @toFoxBin2Prg) - *_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) ; - ORDER BY 1 ; - INTO ARRAY laIndexes - *lnIndex_Count = _TALLY - - *IF lnIndex_Count > 0 IF .Count > 0 THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> ENDTEXT - *FOR X = 1 TO lnIndex_Count - * loIndex = CREATEOBJECT('CL_DBC_INDEX_DB') - * lcText = lcText + loIndex.toText( tcTable + '.' + laIndexes(X) ) - * loIndex = NULL - *ENDFOR - *.KeySort = 2 + *.KeySort = 2 && Comento para forzar modo LEGACY FOR EACH loIndex IN THIS &&FOXOBJECT lcText = lcText + loIndex.toText( tcTable + '.' + loIndex._Name ) ENDFOR @@ -18256,7 +18197,7 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE FINALLY STORE NULL TO loIndex - RELEASE X, lnIndex_Count, laIndexes, loIndex + RELEASE loIndex ENDTRY @@ -18292,13 +18233,10 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE 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) ; - ORDER BY 1 ; INTO ARRAY laIndexes lnIndex_Count = _TALLY IF lnIndex_Count > 0 - *ASORT( laFields, 1, -1, 0, 1 ) - FOR I = 1 TO lnIndex_Count loIndex = CREATEOBJECT("CL_DBC_INDEX_DB") loIndex.read_bindatatoproperties( tcTable + '.' + laIndexes(I) ) @@ -18578,25 +18516,13 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE WITH THIS AS CL_DBC_VIEWS OF 'FOXBIN2PRG.PRG' STORE NULL TO loView lcText = '' - *lcDBC = JUSTSTEM(DBC()) .read_bindatatoproperties() - *DIMENSION taViews(1) - *tnView_Count = ADBOBJECTS( taViews,"VIEW" ) - - *IF tnView_Count > 0 IF .Count > 0 THEN - *ASORT( taViews, 1, -1, 0, 1 ) - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> ENDTEXT - loView = CREATEOBJECT('CL_DBC_VIEW') - - *FOR I = 1 TO tnView_Count - * lcText = lcText + loView.toText( taViews(I) ) - *ENDFOR .KeySort = 2 FOR EACH loView IN THIS &&FOXOBJECT lcText = lcText + loView.toText( loView._Name ) @@ -18625,7 +18551,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 @@ -18656,11 +18582,9 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE EXIT ENDIF - lnView_Count = ADBOBJECTS( laViews,"VIEW" ) + lnView_Count = ADBOBJECTS( laViews, "VIEW" ) IF lnView_Count > 0 - *ASORT( taTables, 1, -1, 0, 1 ) - FOR I = 1 TO lnView_Count loView = CREATEOBJECT("CL_DBC_VIEW") loView.read_bindatatoproperties( laViews(I) ) @@ -18756,8 +18680,9 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE _WhereType = 0 *-- Sub-objects - *_Fields = NULL + *_Fields = NULL *_Indexes = NULL + *_Relations = NULL PROCEDURE INIT @@ -18909,9 +18834,8 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE ENDTEXT *-- ALGUNOS VALORES QUE EL DBGETPROP OFICIAL NO DEVUELVE - *-- Path - *-- OfflineRecordCount - *IF NOT EMPTY(._Offline) AND EVALUATE(._Offline) + *-- Path + *-- OfflineRecordCount IF ._Offline THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> <<._Path>> @@ -18926,7 +18850,6 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE loIndexes = ._Indexes lcIndexes = loIndexes.toText( tcView ) - *loRelations = CREATEOBJECT('CL_DBC_RELATIONS') loRelations = ._Relations lcRelations = loRelations.toText( tcView ) @@ -18952,7 +18875,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 @@ -19117,13 +19040,13 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE loField = CREATEOBJECT("CL_DBC_FIELD_VW") loField.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - IF .n_Campos = 0 THEN + *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 + *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 @@ -19131,9 +19054,9 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE 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 + *FOR lnPos = 1 TO .n_Campos + * .ADD( .a_Campos( lnPos, 2), .a_Campos( lnPos, 1) ) + *ENDFOR ENDWITH && THIS ENDIF @@ -19235,15 +19158,8 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE lcText = '' WITH THIS AS CL_DBC_FIELDS_VW OF 'FOXBIN2PRG.PRG' - *_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 .read_bindatatoproperties(tcView, @toFoxBin2Prg) - *IF lnField_Count > 0 IF .Count > 0 THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> @@ -19253,9 +19169,6 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE SET TEXTMERGE TO MEMVAR lcText ADDITIVE NOSHOW SET TEXTMERGE ON - *FOR X = 1 TO lnField_Count - * \ <> - *ENDFOR .KeySort = 0 FOR EACH loField IN THIS &&FOXOBJECT \ <> @@ -19263,7 +19176,6 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE SET TEXTMERGE OFF SET TEXTMERGE TO - *ASORT( laFields, 1, -1, 0, 1 ) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> @@ -19271,12 +19183,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE <<>> ENDTEXT - *loField = CREATEOBJECT("CL_DBC_FIELD_VW") - - *FOR X = 1 TO lnField_Count - * lcText = lcText + loField.toText( tcView, laFields(X) ) - *ENDFOR - .KeySort = 2 + *.KeySort = 2 && Comento para forzar modo LEGACY FOR EACH loField IN THIS &&FOXOBJECT lcText = lcText + loField.toText( tcView, loField._Name ) ENDFOR @@ -19301,7 +19208,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE FINALLY STORE NULL TO loField - RELEASE X, lnField_Count, laFields, loField + RELEASE loField ENDTRY @@ -19342,8 +19249,6 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE lnField_Count = _TALLY IF lnField_Count > 0 - *ASORT( taFields, 1, -1, 0, 1 ) - FOR I = 1 TO lnField_Count loField = CREATEOBJECT("CL_DBC_FIELD_VW") loField.read_bindatatoproperties( tcView, laFields(I) ) @@ -19365,7 +19270,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE USE IN (SELECT("TB")) USE IN (SELECT("TB2")) loField = NULL - RELEASE I, loField + RELEASE loField ENDTRY @@ -19665,32 +19570,17 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE TRY WITH THIS AS CL_DBC_RELATIONS OF 'FOXBIN2PRG.PRG' - LOCAL I, lnRelation_Count, laRelations(1,5), lcText, loEx AS EXCEPTION ; + LOCAL lcText, loEx AS EXCEPTION ; , loRelation AS CL_DBC_RELATION OF 'FOXBIN2PRG.PRG' STORE NULL TO loRelation lcText = '' - X = 0 .read_bindatatoproperties(tcTable, @toFoxBin2Prg) - *DIMENSION laRelations(1,5) - *lnRelation_Count = ADBOBJECTS( laRelations,"RELATION" ) - - *IF lnRelation_Count > 0 IF .Count > 0 THEN - *ASORT( laRelations, 2, -1, 0, 1 ) - *ASORT( laRelations, 1, -1, 0, 1 ) - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> ENDTEXT - *loRelation = CREATEOBJECT('CL_DBC_RELATION') - - *FOR I = 1 TO lnRelation_Count - * IF laRelations(I,1) == UPPER( RTRIM( tcTable ) ) - * lcText = lcText + loRelation.toText( @laRelations, I ) - * ENDIF - *ENDFOR FOR EACH loRelation IN THIS &&FOXOBJECT lcText = lcText + loRelation.toText() ENDFOR @@ -19733,12 +19623,12 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE TRY WITH THIS AS CL_DBC_RELATIONS OF 'FOXBIN2PRG.PRG' - LOCAL X, lnRelation_Count, laRelations(1,5), lcText, loEx AS EXCEPTION ; + LOCAL I, lnRelation_Count, laRelations(1,5), lcText, loEx AS EXCEPTION ; , loRelation AS CL_DBC_RELATION OF 'FOXBIN2PRG.PRG' STORE NULL TO loRelation lcText = '' - X = 0 + I = 0 lnRelation_Count = ADBOBJECTS( laRelations, "RELATION" ) @@ -19746,10 +19636,10 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE ASORT( laRelations, 2, -1, 0, 1 ) ASORT( laRelations, 1, -1, 0, 1 ) - FOR X = 1 TO lnRelation_Count - IF laRelations(X,1) == UPPER( RTRIM( tcTable ) ) + FOR I = 1 TO lnRelation_Count + IF laRelations(I,1) == UPPER( RTRIM( tcTable ) ) loRelation = CREATEOBJECT('CL_DBC_RELATION') - loRelation.read_bindatatoproperties( @laRelations, X ) + loRelation.read_bindatatoproperties( @laRelations, I ) .ADD( loRelation, loRelation._Name ) ENDIF ENDFOR @@ -19767,7 +19657,7 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE FINALLY STORE NULL TO loRelation - RELEASE X, loRelation + RELEASE loRelation ENDTRY From 1341a67d5c658acfb8fa9e94f2ea189ecb5eaae2 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 20 Mar 2015 00:58:38 +0100 Subject: [PATCH 10/16] - Aplicado ClassPerFile a los miembros del DBC :-) --- foxbin2prg.prg | 138 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 121 insertions(+), 17 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 969d343..f939414 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -10805,6 +10805,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -12124,6 +12125,30 @@ DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE + PROCEDURE write_EXTERNAL_MEMBER_HEADER + LPARAMETERS toFoxBin2Prg, tcMemberName, tcMemberType, tcCodigo + *-- < EXTERNAL_MEMBER Name = "member-name" Type="member-type" /> + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF + + IF EMPTY(tcCodigo) THEN + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + *-- EXTERNAL_MEMBER identify external member names / EXTERNAL_MEMBER identifica los nombres de los miembros externos + ENDTEXT + ENDIF + + IF NOT EMPTY(tcMemberName) AND NOT EMPTY(tcMemberType) THEN + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <> Name="<>" Type="<>" <> + ENDTEXT + ENDIF + + RETURN + ENDPROC + + + PROCEDURE write_INCLUDE LPARAMETERS toReg, tcCodigo *-- #INCLUDE @@ -14301,10 +14326,15 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg #ENDIF TRY - LOCAL lnCodError, laDatabases(1), lnDatabases_Count, lcEventsFile, laClasses(1,2), lnClasses_Count + LOCAL lnCodError, laDatabases(1), lnDatabases_Count, lcEventsFile, lcExternalHeader, lcCodigo ; + , lnClassCount, laClasses(1,3) ; + , loConnection AS CL_DBC_CONNECTION OF 'FOXBIN2PRG.PRG' ; + , loTable AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG' ; + , loView AS CL_DBC_VIEW OF 'FOXBIN2PRG.PRG' - STORE 0 TO lnCodError, lnClasses_Count - STORE '' TO laClasses + STORE NULL TO loRelation, loView, loTable + STORE 0 TO lnCodError, lnDatabases_Count, lnClassCount + STORE '' TO laDatabases, lcEventsFile, lcExternalHeader, laClasses, lcCodigo, C_FB2PRG_CODE WITH THIS AS c_conversor_dbc_a_prg OF 'FOXBIN2PRG.PRG' lnDatabases_Count = ADATABASES(laDatabases) @@ -14333,18 +14363,90 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg .AvanceDelProceso( 'Analyzing DBC metadata...', 1, 2, 1 ) - C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() - - *-- Header + *C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() C_FB2PRG_CODE = C_FB2PRG_CODE + toDatabase.toText(@toFoxBin2Prg) + *-- Header + *fdb* + IF toFoxBin2Prg.l_UseClassPerFile + .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, .F., .F., @lcExternalHeader ) + + *-- Connections + FOR EACH loConnection IN toDatabase._Connections FOXOBJECT + lnClassCount = lnClassCount + 1 + DIMENSION laClasses(lnClassCount,3) + laClasses(lnClassCount,1) = LOWER( loConnection._Name ) + laClasses(lnClassCount,2) = loConnection._ToText + laClasses(lnClassCount,3) = 'connection' + .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, laClasses(lnClassCount,1), laClasses(lnClassCount,3), @lcExternalHeader ) + ENDFOR + + *-- Tables + FOR EACH loTable IN toDatabase._Tables FOXOBJECT + lnClassCount = lnClassCount + 1 + DIMENSION laClasses(lnClassCount,3) + laClasses(lnClassCount,1) = LOWER( loTable._Name ) + laClasses(lnClassCount,2) = loTable._ToText + laClasses(lnClassCount,3) = 'table' + .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, laClasses(lnClassCount,1), laClasses(lnClassCount,3), @lcExternalHeader ) + ENDFOR + + *-- Views + FOR EACH loView IN toDatabase._Views FOXOBJECT + lnClassCount = lnClassCount + 1 + DIMENSION laClasses(lnClassCount,3) + laClasses(lnClassCount,1) = LOWER( loView._Name ) + laClasses(lnClassCount,2) = loView._ToText + laClasses(lnClassCount,3) = 'view' + .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, laClasses(lnClassCount,1), laClasses(lnClassCount,3), @lcExternalHeader ) + ENDFOR + + *-- Stored Procedures + IF NOT EMPTY(toDatabase._StoredProcedures) THEN + lnClassCount = lnClassCount + 1 + DIMENSION laClasses(lnClassCount,3) + laClasses(lnClassCount,1) = LOWER( 'sp' ) + laClasses(lnClassCount,2) = toDatabase._StoredProcedures + laClasses(lnClassCount,3) = 'storedprocedures' + .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, laClasses(lnClassCount,1), laClasses(lnClassCount,3), @lcExternalHeader ) + ENDIF + + lcExternalHeader = lcExternalHeader + CR_LF + ENDIF *-- Genero el DC2 .AvanceDelProceso( 'Writing DC2...', 2, 2, 1 ) + *IF .l_Test + * toModulo = C_FB2PRG_CODE + *ELSE + * .write_OutputFile( (C_FB2PRG_CODE), .c_OutputFile, @toFoxBin2Prg ) + *ENDIF + + lcOutputFile = .c_OutputFile + lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + lcExternalHeader + C_FB2PRG_CODE + IF .l_Test - toModulo = C_FB2PRG_CODE + *FOR I = 1 TO lnClassCount + * lcCodigo = lcCodigo + laClasses(I,2) + *ENDFOR + *toDatabase = lcCodigo ELSE - .write_OutputFile( (C_FB2PRG_CODE), .c_OutputFile, @toFoxBin2Prg ) + IF toFoxBin2Prg.l_UseClassPerFile + .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) + + FOR I = 1 TO lnClassCount + * lcOutputFile = 'DBCName' + '.' + 'MemberType' + '.' + 'MemberName' + '.' + 'dc2' + lcOutputFile = ADDBS( JUSTPATH( .c_OutputFile ) ) + JUSTSTEM( .c_OutputFile ) + '.' + laClasses(I,3) + '.' + laClasses(I,1) + '.' + JUSTEXT( .c_OutputFile ) + lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + laClasses(I,2) + .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) + ENDFOR + ELSE + FOR I = 1 TO lnClassCount + lcCodigo = lcCodigo + laClasses(I,2) + ENDFOR + + .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) + ENDIF ENDIF ENDWITH && THIS @@ -16678,17 +16780,19 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE FROM TABLABIN ; WHERE STR(ParentID) + ObjectType + LOWER(objectName) = STR(1) + PADR('Database',10) + PADR(LOWER('StoredProceduresSource'),128) ; INTO ARRAY laCode - ._StoredProcedures = laCode(1,1) + TEXT TO ._StoredProcedures TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <> + <> + <<>> <> + ENDTEXT IF NOT toFoxBin2Prg.l_UseClassPerFile THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>><> - <<>><> - <<>><> + <> + <> + <> <<>> - <<>> <> <<._StoredProcedures>> - <<>> <> ENDTEXT ENDIF @@ -17787,7 +17891,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE <<>> ENDTEXT - *.KeySort = 2 && Comento para forzar modo LEGACY + .KeySort = 2 && Comento para forzar modo LEGACY FOR EACH loField IN THIS &&FOXOBJECT lcText = lcText + loField.toText( tcTable, loField._Name ) ENDFOR @@ -18171,7 +18275,7 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE <<>> ENDTEXT - *.KeySort = 2 && Comento para forzar modo LEGACY + .KeySort = 2 && Comento para forzar modo LEGACY FOR EACH loIndex IN THIS &&FOXOBJECT lcText = lcText + loIndex.toText( tcTable + '.' + loIndex._Name ) ENDFOR @@ -19183,7 +19287,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE <<>> ENDTEXT - *.KeySort = 2 && Comento para forzar modo LEGACY + .KeySort = 2 && Comento para forzar modo LEGACY FOR EACH loField IN THIS &&FOXOBJECT lcText = lcText + loField.toText( tcView, loField._Name ) ENDFOR From a40ccbb2377e65e7bf90e7ff2a56bd80f8132b0a Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 20 Mar 2015 01:26:06 +0100 Subject: [PATCH 11/16] - Mejora visual del LOG de proceso --- foxbin2prg.prg | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index f939414..8b14bf3 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -2865,7 +2865,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 @@ -12496,7 +12496,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 @@ -12505,7 +12505,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 @@ -14216,7 +14216,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 ) From 5bba833c3215eea33f3c1a8d4a870f9faff22af6 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 21 Mar 2015 02:24:11 +0100 Subject: [PATCH 12/16] =?UTF-8?q?-=20Actualizaci=C3=B3n=20del=20archivo=20?= =?UTF-8?q?de=20versi=C3=B3n=20-=20Reunir=20los=20miembros=20del=20DBC=20y?= =?UTF-8?q?=20regenerar=20el=20DBC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 1 + foxbin2prg.prg | 129 ++++++++++++++++++++++++++++++++------ 2 files changed, 110 insertions(+), 20 deletions(-) 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/foxbin2prg.prg b/foxbin2prg.prg index 8b14bf3..714209a 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -132,7 +132,7 @@ * 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 SP1, para evitar problemas ajenos a FoxBin2Prg -* 04/02/2015 FDBOZZO v1.19.42 Mejora db2 v1.19.41: Permitir ordenar los campos alfabéticamente y mantener en una lista aparte el orden real, para facilitar el diff y el merge (Ryan Harris) +* 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) @@ -210,7 +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 alfabéticamente y mantener en una lista aparte el orden real, para facilitar el diff y el merge +* 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) @@ -10231,11 +10231,12 @@ 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 ; + LOCAL lnCodError, loEx AS EXCEPTION, loReg, lcLine, laCodeLines(1), lnCodeLines, lcBaseFilename ; + , lcMemberType, 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 - STORE '' TO lcLine + STORE 0 TO lnCodError, lnCodeLines, lnFileCount + STORE '' TO lcLine, laLines, laCodeLines, lcBaseFilename, lcMemberType, lcLastMemberType STORE NULL TO loReg, toModulo WITH THIS AS c_conversor_prg_a_dbc OF 'FOXBIN2PRG.PRG' @@ -10246,24 +10247,80 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin IF toFoxBin2Prg.l_UseClassPerFile 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, @toModulo, @toFoxBin2Prg ) .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) + *-- 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 ) - ASORT( laFiles, 1, 0, 0, 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, '.' ) ) + + 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 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 + IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toDatabase._ExternalClasses , JUSTEXT( 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 @@ -10277,8 +10334,35 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ENDIF toFoxBin2Prg.normalizarCapitalizacionArchivos( .T., lcInputFile_Class ) - C_FB2PRG_CODE = C_FB2PRG_CODE + FILETOSTR( 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 + + STRTOFILE( C_FB2PRG_CODE, .c_InputFile + '.txt' ) ELSE *-- No es clase por archivo, o no se quiere redireccionar a Main. C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) @@ -10289,6 +10373,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) ENDIF + *-------- @@ -16516,20 +16601,24 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE + [] ; + [] ; + [] ; + + [] ; + + [] ; + [] *-- Modulo - _Version = 0 - _SourceFile = '' + DIMENSION _ExternalClasses(1,2) + _ExternalClasses_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 From 045a20623f4be44eb6b3b4d3b788f6969dfc57d4 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 21 Mar 2015 15:15:57 +0100 Subject: [PATCH 13/16] =?UTF-8?q?-=20Ajuste=20de=20c=C3=B3digo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 714209a..ee25dd2 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -10240,8 +10240,6 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin STORE NULL TO loReg, toModulo WITH THIS AS c_conversor_prg_a_dbc OF 'FOXBIN2PRG.PRG' - - *-------- *fdb* loLang = _SCREEN.o_FoxBin2Prg_Lang toModulo = CREATEOBJECT('CL_MODULO') @@ -10249,7 +10247,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin 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 @@ -10290,7 +10288,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin 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, '.' ) ) - + IF NOT lcMemberType == lcLastMemberType THEN IF NOT EMPTY(lcLastMemberType) THEN *-- Cambio de tipo de miembro, fin del anterior (connection, table, view, storedprocedures) @@ -10335,11 +10333,11 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin 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 @@ -10361,7 +10359,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin FOR X = X TO lnCodeLines C_FB2PRG_CODE = C_FB2PRG_CODE + laCodeLines(X) + CR_LF ENDFOR - + STRTOFILE( C_FB2PRG_CODE, .c_InputFile + '.txt' ) ELSE *-- No es clase por archivo, o no se quiere redireccionar a Main. @@ -10374,10 +10372,6 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ENDIF - *-------- - - - *C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte @@ -14485,7 +14479,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg 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 @@ -16825,7 +16819,7 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE PROCEDURE toText - LPARAMETERS toFoxBin2Prg + LPARAMETERS toFoxBin2Prg #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' @@ -17837,8 +17831,8 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE loField.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) *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 ) + *-- 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 @@ -19234,8 +19228,8 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE loField.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) *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 ) + *-- 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 From c90ecbc7e985328b36e0c0dd1f14bc3fb14cfba2 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 21 Mar 2015 16:25:22 +0100 Subject: [PATCH 14/16] =?UTF-8?q?-=20Regeneraci=C3=B3n=20de=20DBC=20desde?= =?UTF-8?q?=20DC2=20con=20el=20orden=20correcto,=20tanto=20con=20ClassPerF?= =?UTF-8?q?ile=20habilitado=20como=20deshabilitado?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 125 +++++++++++++++++++++++++------------------------ 1 file changed, 63 insertions(+), 62 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index ee25dd2..612ee7f 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -10360,7 +10360,6 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin C_FB2PRG_CODE = C_FB2PRG_CODE + laCodeLines(X) + CR_LF ENDFOR - STRTOFILE( C_FB2PRG_CODE, .c_InputFile + '.txt' ) ELSE *-- No es clase por archivo, o no se quiere redireccionar a Main. C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) @@ -10372,6 +10371,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ENDIF + *STRTOFILE( C_FB2PRG_CODE, .c_InputFile + '.txt' ) && *fdb* lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte @@ -15580,6 +15580,7 @@ DEFINE CLASS CL_DBC_COL_BASE AS CL_COL_BASE + [] ; + [] ; + [] ; + + [] ; + [] __ObjectID = 0 @@ -17013,7 +17014,7 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE WITH THIS AS CL_DBC_CONNECTIONS OF 'FOXBIN2PRG.PRG' loConnection = NULL lcText = '' - .read_bindatatoproperties() + .read_BinDataToProperties() IF .Count > 0 THEN @@ -17051,7 +17052,7 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE ENDPROC - PROCEDURE read_bindatatoproperties + PROCEDURE read_BinDataToProperties *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg @@ -17078,7 +17079,7 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE IF lnConnection_Count > 0 FOR I = 1 TO lnConnection_Count loConnection = CREATEOBJECT('CL_DBC_CONNECTION') - loConnection.read_bindatatoproperties( laConnections(I) ) + loConnection.read_BinDataToProperties( laConnections(I) ) .ADD( loConnection, loConnection._Name ) ENDFOR ENDIF @@ -17223,7 +17224,7 @@ DEFINE CLASS CL_DBC_CONNECTION AS CL_DBC_BASE LOCAL lcText, loEx AS EXCEPTION WITH THIS AS CL_DBC_CONNECTION OF 'FOXBIN2PRG.PRG' - .read_bindatatoproperties(tcConnection) + .read_BinDataToProperties(tcConnection) TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> @@ -17292,7 +17293,7 @@ DEFINE CLASS CL_DBC_CONNECTION AS CL_DBC_BASE ENDPROC - PROCEDURE read_bindatatoproperties + PROCEDURE read_BinDataToProperties LPARAMETERS tcConnection WITH THIS AS CL_DBC_CONNECTION OF 'FOXBIN2PRG.PRG' @@ -17415,7 +17416,7 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE WITH THIS AS CL_DBC_TABLES OF 'FOXBIN2PRG.PRG' STORE NULL TO loTable lcText = '' - .read_bindatatoproperties() + .read_BinDataToProperties() IF .Count > 0 THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 @@ -17458,7 +17459,7 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE ENDPROC - PROCEDURE read_bindatatoproperties + PROCEDURE read_BinDataToProperties *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg @@ -17486,7 +17487,7 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE IF lnTable_Count > 0 FOR I = 1 TO lnTable_Count loTable = CREATEOBJECT("CL_DBC_TABLE") - loTable.read_bindatatoproperties( laTables(I) ) + loTable.read_BinDataToProperties( laTables(I) ) .ADD( loTable, loTable._Name ) ENDFOR ENDIF @@ -17662,7 +17663,7 @@ DEFINE CLASS CL_DBC_TABLE AS CL_DBC_BASE WITH THIS AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG' STORE NULL TO loRelations, loFields, loIndexes STORE '' TO lcText, lcFields, lcIndexes, lcRelations - .read_bindatatoproperties(tcTable) + .read_BinDataToProperties(tcTable) loFields = CREATEOBJECT('CL_DBC_FIELDS_DB') lcFields = loFields.toText( tcTable, @toFoxBin2Prg ) @@ -17754,7 +17755,7 @@ DEFINE CLASS CL_DBC_TABLE AS CL_DBC_BASE ENDPROC - PROCEDURE read_bindatatoproperties + PROCEDURE read_BinDataToProperties LPARAMETERS tcTable WITH THIS AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG' @@ -17815,7 +17816,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 && Para forzar modo LEGACY + *.n_Campos = 0 && Descomentar para forzar modo LEGACY FOR I = I + 1 TO tnCodeLines .set_Line( @tcLine, @taCodeLines, I ) @@ -17830,13 +17831,13 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE loField = CREATEOBJECT("CL_DBC_FIELD_DB") loField.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - *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 + 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 @@ -17844,9 +17845,9 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE 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 + FOR lnPos = 1 TO .n_Campos + .ADD( .a_Campos( lnPos, 2), .a_Campos( lnPos, 1) ) + ENDFOR ENDWITH && THIS ENDIF @@ -17901,7 +17902,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE CASE C_FIELD_ORDER_F $ tcLine && Fin EXIT - OTHERWISE && campo + 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 @@ -17949,7 +17950,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE STORE 0 TO X, lnField_Count lcText = '' - .read_bindatatoproperties( tcTable, @toFoxBin2Prg ) + .read_BinDataToProperties( tcTable, @toFoxBin2Prg ) IF .Count > 0 THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 @@ -17974,7 +17975,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE <<>> ENDTEXT - .KeySort = 2 && Comento para forzar modo LEGACY + .KeySort = 2 && Comentar para forzar modo LEGACY FOR EACH loField IN THIS &&FOXOBJECT lcText = lcText + loField.toText( tcTable, loField._Name ) ENDFOR @@ -18007,7 +18008,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE ENDPROC - PROCEDURE read_bindatatoproperties + 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 @@ -18041,7 +18042,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE IF lnField_Count > 0 FOR I = 1 TO lnField_Count loField = CREATEOBJECT("CL_DBC_FIELD_DB") - loField.read_bindatatoproperties( tcTable, laFields(I) ) + loField.read_BinDataToProperties( tcTable, laFields(I) ) .ADD( loField, loField._Name ) ENDFOR ENDIF @@ -18176,7 +18177,7 @@ DEFINE CLASS CL_DBC_FIELD_DB AS CL_DBC_BASE lcText = '' WITH THIS AS CL_DBC_FIELD_DB OF 'FOXBIN2PRG.PRG' - .read_bindatatoproperties(tcTable, tcField) + .read_BinDataToProperties(tcTable, tcField) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> @@ -18232,7 +18233,7 @@ DEFINE CLASS CL_DBC_FIELD_DB AS CL_DBC_BASE ENDPROC - PROCEDURE read_bindatatoproperties + PROCEDURE read_BinDataToProperties LPARAMETERS tcTable, tcField WITH THIS AS CL_DBC_FIELD_DB OF 'FOXBIN2PRG.PRG' @@ -18351,14 +18352,14 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE WITH THIS AS CL_DBC_INDEXES_DB OF 'FOXBIN2PRG.PRG' STORE NULL TO loIndex lcText = '' - .read_bindatatoproperties(tcTable, @toFoxBin2Prg) + .read_BinDataToProperties(tcTable, @toFoxBin2Prg) IF .Count > 0 THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> ENDTEXT - .KeySort = 2 && Comento para forzar modo LEGACY + .KeySort = 2 && Comentar para forzar modo LEGACY FOR EACH loIndex IN THIS &&FOXOBJECT lcText = lcText + loIndex.toText( tcTable + '.' + loIndex._Name ) ENDFOR @@ -18392,7 +18393,7 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE ENDPROC - PROCEDURE read_bindatatoproperties + PROCEDURE read_BinDataToProperties *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * tcTable (v! IN ) Nombre de la Tabla @@ -18426,7 +18427,7 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE IF lnIndex_Count > 0 FOR I = 1 TO lnIndex_Count loIndex = CREATEOBJECT("CL_DBC_INDEX_DB") - loIndex.read_bindatatoproperties( tcTable + '.' + laIndexes(I) ) + loIndex.read_BinDataToProperties( tcTable + '.' + laIndexes(I) ) .ADD( loIndex, loIndex._Name ) ENDFOR ENDIF @@ -18546,7 +18547,7 @@ DEFINE CLASS CL_DBC_INDEX_DB AS CL_DBC_BASE lcText = '' WITH THIS AS CL_DBC_INDEX_DB OF 'FOXBIN2PRG.PRG' - .read_bindatatoproperties(tcIndex) + .read_BinDataToProperties(tcIndex) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> @@ -18586,7 +18587,7 @@ DEFINE CLASS CL_DBC_INDEX_DB AS CL_DBC_BASE ENDPROC - PROCEDURE read_bindatatoproperties + PROCEDURE read_BinDataToProperties LPARAMETERS tcIndex WITH THIS AS CL_DBC_INDEX_DB OF 'FOXBIN2PRG.PRG' @@ -18703,7 +18704,7 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE WITH THIS AS CL_DBC_VIEWS OF 'FOXBIN2PRG.PRG' STORE NULL TO loView lcText = '' - .read_bindatatoproperties() + .read_BinDataToProperties() IF .Count > 0 THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 @@ -18746,7 +18747,7 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE ENDPROC - PROCEDURE read_bindatatoproperties + PROCEDURE read_BinDataToProperties *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg @@ -18774,7 +18775,7 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE IF lnView_Count > 0 FOR I = 1 TO lnView_Count loView = CREATEOBJECT("CL_DBC_VIEW") - loView.read_bindatatoproperties( laViews(I) ) + loView.read_BinDataToProperties( laViews(I) ) .ADD( loView, loView._Name ) ENDFOR ENDIF @@ -18990,7 +18991,7 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE STORE '' TO lcText, lcFields, lcIndexes, lcRelations WITH THIS AS CL_DBC_VIEW OF 'FOXBIN2PRG.PRG' - .read_bindatatoproperties(tcView) + .read_BinDataToProperties(tcView) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> @@ -19130,7 +19131,7 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE ENDPROC - PROCEDURE read_bindatatoproperties + PROCEDURE read_BinDataToProperties *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * tcView (v! IN ) Vista en evaluación @@ -19211,7 +19212,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 && Para forzar modo LEGACY + *.n_Campos = 0 && Descomentar para forzar modo LEGACY FOR I = I + 1 TO tnCodeLines .set_Line( @tcLine, @taCodeLines, I ) @@ -19227,13 +19228,13 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE loField = CREATEOBJECT("CL_DBC_FIELD_VW") loField.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - *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 + 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 @@ -19241,9 +19242,9 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE 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 + FOR lnPos = 1 TO .n_Campos + .ADD( .a_Campos( lnPos, 2), .a_Campos( lnPos, 1) ) + ENDFOR ENDWITH && THIS ENDIF @@ -19299,7 +19300,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE CASE C_FIELD_ORDER_F $ tcLine && Fin EXIT - OTHERWISE && campo + 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 @@ -19345,7 +19346,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE lcText = '' WITH THIS AS CL_DBC_FIELDS_VW OF 'FOXBIN2PRG.PRG' - .read_bindatatoproperties(tcView, @toFoxBin2Prg) + .read_BinDataToProperties(tcView, @toFoxBin2Prg) IF .Count > 0 THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 @@ -19370,7 +19371,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE <<>> ENDTEXT - .KeySort = 2 && Comento para forzar modo LEGACY + .KeySort = 2 && Comentar para forzar modo LEGACY FOR EACH loField IN THIS &&FOXOBJECT lcText = lcText + loField.toText( tcView, loField._Name ) ENDFOR @@ -19403,7 +19404,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE ENDPROC - PROCEDURE read_bindatatoproperties + 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 @@ -19438,7 +19439,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE IF lnField_Count > 0 FOR I = 1 TO lnField_Count loField = CREATEOBJECT("CL_DBC_FIELD_VW") - loField.read_bindatatoproperties( tcView, laFields(I) ) + loField.read_BinDataToProperties( tcView, laFields(I) ) .ADD( loField, loField._Name ) ENDFOR ENDIF @@ -19643,7 +19644,7 @@ DEFINE CLASS CL_DBC_FIELD_VW AS CL_DBC_BASE ENDPROC - PROCEDURE read_bindatatoproperties + PROCEDURE read_BinDataToProperties LPARAMETERS tcView, tcField WITH THIS AS CL_DBC_FIELD_VW OF 'FOXBIN2PRG.PRG' @@ -19761,7 +19762,7 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE , loRelation AS CL_DBC_RELATION OF 'FOXBIN2PRG.PRG' STORE NULL TO loRelation lcText = '' - .read_bindatatoproperties(tcTable, @toFoxBin2Prg) + .read_BinDataToProperties(tcTable, @toFoxBin2Prg) IF .Count > 0 THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 @@ -19796,7 +19797,7 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE ENDPROC - PROCEDURE read_bindatatoproperties + 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 @@ -19826,7 +19827,7 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE FOR I = 1 TO lnRelation_Count IF laRelations(I,1) == UPPER( RTRIM( tcTable ) ) loRelation = CREATEOBJECT('CL_DBC_RELATION') - loRelation.read_bindatatoproperties( @laRelations, I ) + loRelation.read_BinDataToProperties( @laRelations, I ) .ADD( loRelation, loRelation._Name ) ENDIF ENDFOR @@ -19949,7 +19950,7 @@ DEFINE CLASS CL_DBC_RELATION AS CL_DBC_BASE WITH THIS AS CL_DBC_RELATION OF 'FOXBIN2PRG.PRG' LOCAL lcText, loEx AS EXCEPTION lcText = '' - .read_bindatatoproperties(@taRelations, X) + .read_BinDataToProperties(@taRelations, X) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> @@ -19998,7 +19999,7 @@ DEFINE CLASS CL_DBC_RELATION AS CL_DBC_BASE ENDPROC - PROCEDURE read_bindatatoproperties + PROCEDURE read_BinDataToProperties *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) * taRelations (!@ IN ) Array de relaciones From 85d721c9fe8f5ec76c8fa626e3a069489d705cf6 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 21 Mar 2015 17:31:46 +0100 Subject: [PATCH 15/16] =?UTF-8?q?-=20Agregada=20la=20verificaci=C3=B3n=20d?= =?UTF-8?q?e=20miembros=20del=20DBC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 92 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 55 insertions(+), 37 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 612ee7f..0b0dcd2 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -2838,18 +2838,35 @@ 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 + *fdb* + IF .l_UseClassPerFile AND .l_RedirectClassPerFileToMain THEN + DO CASE + CASE 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 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) @@ -7394,7 +7411,8 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE toModulo._ExternalClasses_Count = toModulo._ExternalClasses_Count + 1 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, 2 ) = .get_ValueByName_FromListNamesWithValues( 'Baseclass', 'C', @laPropsAndValues ) ; + + '.' + toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 1 ) ENDWITH && THIS ENDIF @@ -7425,8 +7443,9 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE toModulo._ExternalClasses_Count = toModulo._ExternalClasses_Count + 1 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( 'Type', 'C', @laPropsAndValues ) + toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 1 ) = .get_ValueByName_FromListNamesWithValues( 'Type', 'C', @laPropsAndValues ) ; + + '.' + .get_ValueByName_FromListNamesWithValues( 'Name', 'C', @laPropsAndValues ) + *toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 2 ) = .get_ValueByName_FromListNamesWithValues( 'Type', 'C', @laPropsAndValues ) ENDWITH && THIS ENDIF @@ -7961,12 +7980,12 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin 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 @@ -7989,9 +8008,10 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin FOR I = 1 TO lnFileCount lcInputFile_Class = FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile ) + lcClassName = JUSTEXT( JUSTSTEM( lcInputFile_Class ) ) *-- 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 + 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 porque no concuerda con las anotadas @@ -10232,16 +10252,16 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin TRY LOCAL lnCodError, loEx AS EXCEPTION, loReg, lcLine, laCodeLines(1), lnCodeLines, lcBaseFilename ; - , lcMemberType, lcLastMemberType ; + , 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 - STORE NULL TO loReg, toModulo + 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' loLang = _SCREEN.o_FoxBin2Prg_Lang - toModulo = CREATEOBJECT('CL_MODULO') + toDatabase = CREATEOBJECT('CL_DBC') IF toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_RedirectClassPerFileToMain C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) @@ -10257,7 +10277,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ENDFOR .AvanceDelProceso( 'Identifying Header Blocks...', 1, lnCodeLines, 1 ) - .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) + .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toDatabase, @toFoxBin2Prg ) .AvanceDelProceso( 'Loading Code...', 2, lnCodeLines, 1 ) @@ -10288,6 +10308,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin 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 @@ -10317,11 +10338,11 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ENDCASE ENDIF - *-- Verificación de las Clases, si son Externas y se indicó chequearlas - IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toDatabase._ExternalClasses , JUSTEXT( 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 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 ) ) @@ -10367,7 +10388,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) .AvanceDelProceso( 'Identifying Header Blocks...', 1, lnCodeLines, 1 ) - .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) + .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toDatabase, @toFoxBin2Prg ) ENDIF @@ -14442,11 +14463,9 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg .AvanceDelProceso( 'Analyzing DBC metadata...', 1, 2, 1 ) - *C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() C_FB2PRG_CODE = C_FB2PRG_CODE + toDatabase.toText(@toFoxBin2Prg) *-- Header - *fdb* IF toFoxBin2Prg.l_UseClassPerFile .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, .F., .F., @lcExternalHeader ) @@ -14495,12 +14514,6 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg *-- Genero el DC2 .AvanceDelProceso( 'Writing DC2...', 2, 2, 1 ) - *IF .l_Test - * toModulo = C_FB2PRG_CODE - *ELSE - * .write_OutputFile( (C_FB2PRG_CODE), .c_OutputFile, @toFoxBin2Prg ) - *ENDIF - lcOutputFile = .c_OutputFile lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + lcExternalHeader + C_FB2PRG_CODE @@ -24188,6 +24201,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 = "" @@ -24337,6 +24351,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" @@ -24421,7 +24436,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" @@ -24507,6 +24523,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" @@ -24592,6 +24609,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" From 799cbad54b93c87a94dbbfbf60ff5691be5dddad Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 21 Mar 2015 23:31:19 +0100 Subject: [PATCH 16/16] =?UTF-8?q?-=20Implementaci=C3=B3n=20de=20n=5FUseCla?= =?UTF-8?q?ssPerFile:2=20para=20poder=20generar=20clases=20y=20forms=20com?= =?UTF-8?q?o=20Archivo.ClaseBase.Clase.ext2=20en=20vez=20de=20Archivo.Clas?= =?UTF-8?q?e.ext2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 455 ++++++++++++++++++++++++++++++------------------- 1 file changed, 282 insertions(+), 173 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 0b0dcd2..42f7539 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -586,7 +586,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION + [] ; + [] ; + [] ; - + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -670,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. @@ -954,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 @@ -1641,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 @@ -1793,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) ) @@ -2839,10 +2839,9 @@ DEFINE CLASS c_foxbin2prg AS SESSION *-- OPTIMIZACIÓN VC2/SC2/DC2: VERIFICO SI EL ARCHIVO BASE FUE PROCESADO PARA DESCARTAR REPROCESOS - *fdb* - IF .l_UseClassPerFile AND .l_RedirectClassPerFileToMain THEN + IF .n_UseClassPerFile > 0 AND .l_RedirectClassPerFileToMain THEN DO CASE - CASE INLIST(lcExtension,'VC2','SC2') + CASE .n_UseClassPerFile = 1 AND INLIST(lcExtension,'VC2','SC2') IF OCCURS('.', JUSTSTEM(.c_InputFile)) = 0 THEN lc_BaseFile = .c_InputFile ELSE @@ -2854,7 +2853,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION .c_InputFile = lc_BaseFile ENDIF - CASE lcExtension = 'DC2' + CASE .n_UseClassPerFile = 2 AND INLIST(lcExtension,'VC2','SC2') OR lcExtension = 'DC2' IF OCCURS('.', JUSTSTEM(.c_InputFile)) = 0 THEN lc_BaseFile = .c_InputFile ELSE @@ -3519,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 @@ -5942,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 ; @@ -6004,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 ; @@ -6796,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 @@ -7047,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 @@ -7274,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 @@ -7396,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 @@ -7426,10 +7441,10 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE *------------------------------------------------------ *-- Analiza el bloque *< EXTERNAL_MEMBER: Name="nombre-miembro" Type="tipo-de-miembro" /> *------------------------------------------------------ - LPARAMETERS toModulo, tcLine, taCodeLines, I, tnCodeLines + LPARAMETERS toDatabase, tcLine, taCodeLines, I, tnCodeLines #IF .F. - LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toDatabase AS CL_DBC OF 'FOXBIN2PRG.PRG' #ENDIF LOCAL llBloqueEncontrado @@ -7441,11 +7456,11 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE WITH THIS .get_ListNamesWithValuesFrom_InLine_MetadataTag( @tcLine, @laPropsAndValues, @lnPropsAndValues_Count, C_EXTERNAL_MEMBER_I, C_EXTERNAL_MEMBER_F ) - toModulo._ExternalClasses_Count = toModulo._ExternalClasses_Count + 1 - DIMENSION toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 2 ) - toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 1 ) = .get_ValueByName_FromListNamesWithValues( 'Type', 'C', @laPropsAndValues ) ; + 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 ) - *toModulo._ExternalClasses( toModulo._ExternalClasses_Count, 2 ) = .get_ValueByName_FromListNamesWithValues( 'Type', 'C', @laPropsAndValues ) + *toDatabase._ExternalClasses( toDatabase._ExternalClasses_Count, 2 ) = .get_ValueByName_FromListNamesWithValues( 'Type', 'C', @laPropsAndValues ) ENDWITH && THIS ENDIF @@ -7496,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 + ' ' @@ -7547,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 @@ -7711,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 @@ -7728,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 @@ -7745,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 @@ -7820,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 @@ -7837,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 @@ -7916,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 @@ -7925,7 +7909,9 @@ 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 @@ -7944,7 +7930,29 @@ DEFINE CLASS c_conversor_prg_a_bin AS C_CONVERSOR_BASE 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 @@ -7967,13 +7975,13 @@ 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 ) @@ -7989,9 +7997,9 @@ DEFINE CLASS c_conversor_prg_a_vcx 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 ) @@ -8001,20 +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 ) - lcClassName = JUSTEXT( JUSTSTEM( lcInputFile_Class ) ) + 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, 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 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 ) ) @@ -8146,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 @@ -8330,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 ) @@ -8352,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 ) @@ -8364,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 ) ) @@ -8508,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 @@ -10231,6 +10284,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin + [] ; + [] ; + [] ; + + [] ; + [] c_Type = 'DC2' @@ -10263,7 +10317,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin loLang = _SCREEN.o_FoxBin2Prg_Lang toDatabase = CREATEOBJECT('CL_DBC') - 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 ) C_FB2PRG_CODE = '' @@ -10392,7 +10446,6 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ENDIF - *STRTOFILE( C_FB2PRG_CODE, .c_InputFile + '.txt' ) && *fdb* lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte @@ -10492,24 +10545,24 @@ 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 ) Cantidad de bloques de exclusión - * toModulo (@? OUT) Objeto con toda la información del módulo analizado + * 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, toModulo, toFoxBin2Prg + LPARAMETERS taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toDatabase, toFoxBin2Prg EXTERNAL ARRAY taCodeLines, taLineasExclusion #IF .F. - LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + 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_CLASS_Completed ; + , llFoxBin2Prg_Completed, llOLE_DEF_Completed, llINCLUDE_SCX_Completed, llLIBCOMMENT_Completed, llEXTERNAL_MEMBER_Completed ; , lc_Comentario, lcProcedureAbierto, lcLine ; , loClase AS CL_CLASE OF 'FOXBIN2PRG.PRG' @@ -10520,12 +10573,9 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin 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. + 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) @@ -10536,10 +10586,10 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin DO CASE CASE .lineIsOnlyCommentAndNoMetadata( @lcLine, @lc_Comentario ) && Excluida, vacía o solo Comentarios - CASE NOT llFoxBin2Prg_Completed AND .analizarBloque_FoxBin2Prg( @toModulo, @lcLine, @taCodeLines, @I, tnCodeLines ) + CASE NOT llFoxBin2Prg_Completed AND .analizarBloque_FoxBin2Prg( @toDatabase, @lcLine, @taCodeLines, @I, tnCodeLines ) llFoxBin2Prg_Completed = .T. - CASE NOT llEXTERNAL_CLASS_Completed AND .analizarBloque_EXTERNAL_MEMBER( @toModulo, @lcLine, @taCodeLines, @I, tnCodeLines ) + CASE NOT llEXTERNAL_MEMBER_Completed AND .analizarBloque_EXTERNAL_MEMBER( @toDatabase, @lcLine, @taCodeLines, @I, tnCodeLines ) *-- Puede haber varias clases externas ENDCASE @@ -10558,7 +10608,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin FINALLY STORE NULL TO loClase - RELEASE taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toModulo, loClase, I ; + RELEASE taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toDatabase, loClase, I ; , llFoxBin2Prg_Completed, llOLE_DEF_Completed, llINCLUDE_SCX_Completed, llLIBCOMMENT_Completed ; , lc_Comentario, lcProcedureAbierto, lcLine ENDTRY @@ -10575,7 +10625,7 @@ 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: @@ -10598,8 +10648,6 @@ 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 ) @@ -10615,6 +10663,8 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ENDCASE ENDFOR + + .verificar_MIEMBROS_EXTERNOS( @toDatabase, @toFoxBin2Prg ) ENDIF ENDWITH && THIS @@ -10636,16 +10686,16 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin PROCEDURE verificar_MIEMBROS_EXTERNOS *-------------------------------------------------------------------------------- - * Compara las clases definidas en la cabecera con las clases encontradas luego + * 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) - * toModulo (@? OUT) Objeto con toda la información del módulo analizado - * toFoxBin2Prg (@? IN ) Referencia al objeto principal + * toDatabase (@! IN ) Objeto con toda la información del módulo analizado + * toFoxBin2Prg (@! IN ) Referencia al objeto principal *-------------------------------------------------------------------------------------------------------------- - LPARAMETERS toModulo, toFoxBin2Prg + LPARAMETERS toDatabase, toFoxBin2Prg #IF .F. - LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toDatabase AS CL_DBC OF 'FOXBIN2PRG.PRG' LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF @@ -10653,25 +10703,25 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' 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 - FOR I = 1 TO toModulo._ExternalClasses_Count + *-- 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 toModulo._Clases_Count - IF LOWER( toModulo._Clases(X)._ObjName ) == LOWER( toModulo._ExternalClasses(I,1) ) + 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) + '.' + 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 + ']' + 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 - toModulo._Clases(lnItem)._Checked = .T. + toDatabase._Members(lnItem,2) = .T. && Checked ENDFOR ENDIF ENDPROC @@ -11573,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 @@ -12699,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 *--------------------------------------------------------------------------------------------------- @@ -12712,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 ; @@ -12760,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 @@ -12782,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 ) @@ -12792,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 @@ -12932,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 @@ -12950,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 @@ -13005,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 *--------------------------------------------------------------------------------------------------- @@ -13013,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 ; @@ -13083,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 @@ -13105,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 ) @@ -13115,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 @@ -13257,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 @@ -13275,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 @@ -14466,7 +14545,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg C_FB2PRG_CODE = C_FB2PRG_CODE + toDatabase.toText(@toFoxBin2Prg) *-- Header - IF toFoxBin2Prg.l_UseClassPerFile + IF toFoxBin2Prg.n_UseClassPerFile > 0 THEN .write_EXTERNAL_MEMBER_HEADER( @toFoxBin2Prg, .F., .F., @lcExternalHeader ) *-- Connections @@ -14523,7 +14602,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg *ENDFOR *toDatabase = lcCodigo ELSE - IF toFoxBin2Prg.l_UseClassPerFile + IF toFoxBin2Prg.n_UseClassPerFile > 0 THEN .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) FOR I = 1 TO lnClassCount @@ -14817,9 +14896,9 @@ 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 = [] ; @@ -14857,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 @@ -14873,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 @@ -14887,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. @@ -16611,12 +16690,16 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE + [] ; + [] ; + [] ; + + [] ; + + [] ; + + [] ; + [] *-- Modulo - DIMENSION _ExternalClasses(1,2) + DIMENSION _ExternalClasses(1,2), _Members(1,2) _ExternalClasses_Count = 0 + _Members_Count = 0 _Version = 0 _SourceFile = '' @@ -16659,17 +16742,19 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE 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 ) @@ -16684,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 ) @@ -16721,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 @@ -16883,7 +16981,7 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE <<>> <> ENDTEXT - IF NOT toFoxBin2Prg.l_UseClassPerFile THEN + IF NOT toFoxBin2Prg.n_UseClassPerFile > 0 THEN TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <> <> @@ -16931,6 +17029,17 @@ 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 @@ -24077,7 +24186,7 @@ DEFINE CLASS CL_CFG AS CUSTOM + [] ; + [] ; + [] ; - + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -24108,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