Changeset: 202 v1.19.16

- Arreglo bug vcx/scx: las propiedades pierden la visibilidad hidden/protected cuando no tienen valor asignado (Ryan Harris)
- Arreglo bug vcx/scx: valor character con longitud >255 en propiedad de addobject, se regenera con tag <fb2p_value> incluido (Ryan Harris)
- Arreglo bug vcx/scx: Al regenerar binario con procedimiento vacío hace que se cuelgue FoxPro al intentar modificar
- Arreglo bug scx/vcx: Si la clase tiene un comentario multilínea, el binario generado se puede corromper (Tested on: Ffc\_frxcursor.vcx)
- Arreglo bug: Si _memberdata contiene CR entre sus valores, esos valores pueden perderse al regenerar el tx2
- Arreglo bug: Los valores de las propiedades con espacios a la derecha pierden esos espacios
- Arreglo de bug: cuando 2 o más métodos contienen el mismo nombre (ej: met y met2) se genera mal el tx2 (Ryan Harris)
This commit is contained in:
fdbozzo
2014-03-10 00:14:35 +01:00
10 changed files with 484 additions and 257 deletions

View File

@@ -2,15 +2,17 @@
* (ES) AUTOGENERADO - <20><>ATENCI<43>N!! - <20><>NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!!
* (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!!
*--------------------------------------------------------------------------------------------------------------------------------------------------------
*< FOXBIN2PRG: Version="1.19" SourceFile="C:\DESA\foxbin2prg\TESTS\DATOS_READONLY\fb2p_test.vcx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
*< FOXBIN2PRG: Version="1.19" SourceFile="fb2p_test.vcx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
*
*< OLE: Nombre="cl_olecontrol" Parent="" ObjName="cl_olecontrol" OLEObject="C:\Windows\system32\richtx32.ocx" Checksum="3873290752" Value="0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAEAAAAgAAAAEAAAD+////AAAAAAAAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/////v////7////+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////1IAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA//////////8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDfG05c8M4BAwAAAAACAAAAAAAAAwBPAGwAZQBPAGIAagBlAGMAdABEAGEAdABhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAgEDAAAAAgAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAAAAAAAAAADAEEAYwBjAGUAcwBzAE8AYgBqAFMAaQB0AGUARABhAHQAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgACAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABPAAAAAAAAAAMAQwBoAGEAbgBnAGUAZABQAHIAbwBwAHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAIA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAEoAAAAAAAAABAAAAAIAAAD+////BQAAAAYAAAD+////BwAAAP7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9giHw7j9cbELm1BAIcAJQCIUM0EggAAACKDQAA7QYAACFDNBIBAAYAoAAAAAAA//8AAP//AQAAAAAAAAAAAAAATwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABcAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcWhqIFp0dVFoYTtqZGZuW2lhZXRyIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAACADAAAAFJpZ2h0TWFyZ2luABEAAABODQAAAAcAAAAAAAAAAAAAAAUAAABUZXh0ABQAAABIAAAAAAsAAABPAAAAAAUAAIAAAAAAAAABAAAAAQABAAIACAAAAHtccnRmMVxhbnNpXGRlZmYwe1xmb250dGJse1xmMFxmbmlsXGxlY29udHJvbDEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmY2hhcnNldDAgQXJpYWw7fX0NClx2aWV3a2luZDRcdWMxXHBhcmRcbGFuZzMwODJcZnMxOCBPbGVjb250cm9sMQ0KXHBhciB9DQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" />
*
DEFINE CLASS cl_commandgroup AS commandgroup && Descripci<63>n de cl_CommandGroup
*< CLASSDATA: Baseclass="commandgroup" Timestamp="2013/12/03 19:51:29" Scale="Pixels" Uniqueid="_3XW0ATDKL" />
*< CLASSDATA: Baseclass="commandgroup" Timestamp="" Scale="Pixels" Uniqueid="" />
*<DefinedPropArrayMethod>
*p: una_prop_cmgroup && Con comentario, pero sin valor
*</DefinedPropArrayMethod>
ButtonCount = 2
Height = 66
Name = "cl_commandgroup"
@@ -33,14 +35,39 @@ DEFINE CLASS cl_commandgroup AS commandgroup && Descripci
ENDDEFINE
DEFINE CLASS cl_form AS form OLEPUBLIC && mi OLE server DLL
*< CLASSDATA: Baseclass="form" Timestamp="2014/01/07 19:58:17" Scale="Pixels" Uniqueid="_3XW0AGC4F" ProjectClassIcon="bmps\container.ico" ClassIcon="bmps\container.ico" />
*< CLASSDATA: Baseclass="form" Timestamp="" Scale="Pixels" Uniqueid="" ProjectClassIcon="bmps\container.ico" ClassIcon="bmps\container.ico" />
*-- OBJECTDATA items order determines ZOrder / El orden de los items OBJECTDATA determina el ZOrder
*< OBJECTDATA: ObjPath="Cl_optiongroup1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="Cl_commandgroup1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="Cl_imagen1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="Cl_imagen2" UniqueID="" Timestamp="" />
*<DefinedPropArrayMethod>
*p: chidden && Prop.Hidden
*p: cprotected && Prop.Protegida
*a: ^ahidden[1,0] && Array Oculto
*a: ^aprotected[1,0] && Array Protegido
*p: _memberdata && XML Metadata for customizable properties
*</DefinedPropArrayMethod>
HIDDEN chidden
PROTECTED cprotected
Caption = "Form"
chidden = && Prop.Hidden
cprotected = && Prop.Protegida
DoCreate = .T.
Height = 345
Left = 0
Name = "cl_form"
Top = 0
Width = 570
_memberdata = <VFPData>
<memberdata name="ahidden" display="aHidden"/>
<memberdata name="aprotected" display="aProtected"/>
<memberdata name="chidden" display="cHidden"/>
<memberdata name="cprotected" display="cProtected"/>
</VFPData> && XML Metadata for customizable properties
ADD OBJECT 'Cl_commandgroup1' AS cl_commandgroup WITH ;
BackColor = 255,128,192, ;
@@ -63,7 +90,7 @@ DEFINE CLASS cl_form AS form OLEPUBLIC && mi OLE server DLL
Command2.Picture = bmps\carpetacerrada.bmp, ;
Command2.Top = 4, ;
Command2.Width = 104
*< END OBJECT: ClassLib="fb2p_test.vcx" BaseClass="commandgroup" UniqueID="_3XW0AX81B" Timestamp="2013/12/03 19:50:23" ZOrder="1000" />
*< END OBJECT: ClassLib="fb2p_test.vcx" BaseClass="commandgroup" />
ADD OBJECT 'Cl_imagen1' AS cl_imagen WITH ;
Height = 34, ;
@@ -73,7 +100,7 @@ DEFINE CLASS cl_form AS form OLEPUBLIC && mi OLE server DLL
Stretch = 1, ;
Top = 276, ;
Width = 38
*< END OBJECT: ClassLib="fb2p_test.vcx" BaseClass="image" UniqueID="_3XW0AGC4F" Timestamp="2014/01/07 19:58:17" ZOrder="1100" />
*< END OBJECT: ClassLib="fb2p_test.vcx" BaseClass="image" />
ADD OBJECT 'Cl_imagen2' AS cl_imagen WITH ;
Height = 34, ;
@@ -83,7 +110,7 @@ DEFINE CLASS cl_form AS form OLEPUBLIC && mi OLE server DLL
Stretch = 1, ;
Top = 276, ;
Width = 38
*< END OBJECT: ClassLib="fb2p_test.vcx" BaseClass="image" UniqueID="_3XW0BP1GV" Timestamp="2014/01/07 19:58:17" ZOrder="1200" />
*< END OBJECT: ClassLib="fb2p_test.vcx" BaseClass="image" />
ADD OBJECT 'Cl_optiongroup1' AS cl_optiongroup WITH ;
BackColor = 0,128,255, ;
@@ -106,7 +133,7 @@ DEFINE CLASS cl_form AS form OLEPUBLIC && mi OLE server DLL
Option2.Style = 1, ;
Option2.Top = 8, ;
Option2.Width = 104
*< END OBJECT: ClassLib="fb2p_test.vcx" BaseClass="optiongroup" UniqueID="_3XW0AONF4" Timestamp="2013/12/07 02:23:11" ZOrder="900" />
*< END OBJECT: ClassLib="fb2p_test.vcx" BaseClass="optiongroup" />
PROCEDURE Cl_optiongroup1.Init
*-- Prueba para comprobar que respeta espacios y TABS del c<>digo
@@ -123,10 +150,12 @@ DEFINE CLASS cl_form AS form OLEPUBLIC && mi OLE server DLL
ENDDEFINE
DEFINE CLASS cl_imagen AS image OLEPUBLIC && otro ole
*< CLASSDATA: Baseclass="image" Timestamp="2014/01/07 20:06:20" Scale="Pixels" Uniqueid="_3XW0BNCFT" />
*< CLASSDATA: Baseclass="image" Timestamp="" Scale="Pixels" Uniqueid="" />
*<DefinedPropArrayMethod>
*m: *un_metodo_de_clase && Para testear si el c<>digo se va a la clase cl_form
*</DefinedPropArrayMethod>
Height = 16
Name = "cl_imagen"
Picture = bmps\sobrepostal.bmp
@@ -139,7 +168,8 @@ DEFINE CLASS cl_imagen AS image OLEPUBLIC && otro ole
ENDDEFINE
DEFINE CLASS cl_olecontrol AS olecontrol
*< CLASSDATA: Baseclass="olecontrol" Timestamp="2013/12/03 20:17:14" Scale="Pixels" Uniqueid="_3XW0BVZ14" OLEObject="C:\Windows\system32\richtx32.ocx" CheckSum="3873290752" />
*< CLASSDATA: Baseclass="olecontrol" Timestamp="" Scale="Pixels" Uniqueid="" Nombre="cl_olecontrol" Parent="" ObjName="cl_olecontrol" OLEObject="C:\Windows\system32\richtx32.ocx" Value="0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAEAAAAgAAAAEAAAD+////AAAAAAAAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/////v////7////+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////1IAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA//////////8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDfG05c8M4BAwAAAAACAAAAAAAAAwBPAGwAZQBPAGIAagBlAGMAdABEAGEAdABhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAgEDAAAAAgAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAAAAAAAAAADAEEAYwBjAGUAcwBzAE8AYgBqAFMAaQB0AGUARABhAHQAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgACAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABPAAAAAAAAAAMAQwBoAGEAbgBnAGUAZABQAHIAbwBwAHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAIA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAEoAAAAAAAAABAAAAAIAAAD+////BQAAAAYAAAD+////BwAAAP7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9giHw7j9cbELm1BAIcAJQCIUM0EggAAACKDQAA7QYAACFDNBIBAAYAoAAAAAAA//8AAP//AQAAAAAAAAAAAAAATwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABcAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcWhqIFp0dVFoYTtqZGZuW2lhZXRyIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAACADAAAAFJpZ2h0TWFyZ2luABEAAABODQAAAAcAAAAAAAAAAAAAAAUAAABUZXh0ABQAAABIAAAAAAsAAABPAAAAAAUAAIAAAAAAAAABAAAAAQABAAIACAAAAHtccnRmMVxhbnNpXGRlZmYwe1xmb250dGJse1xmMFxmbmlsXGxlY29udHJvbDEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmY2hhcnNldDAgQXJpYWw7fX0NClx2aWV3a2luZDRcdWMxXHBhcmRcbGFuZzMwODJcZnMxOCBPbGVjb250cm9sMQ0KXHBhciB9DQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" />
Height = 67
Name = "cl_olecontrol"
Width = 131
@@ -147,13 +177,15 @@ DEFINE CLASS cl_olecontrol AS olecontrol
ENDDEFINE
DEFINE CLASS cl_optiongroup AS optiongroup && descripcion
*< CLASSDATA: Baseclass="optiongroup" Timestamp="2013/12/03 19:43:10" Scale="Pixels" Uniqueid="_3XW0ALVUS" />
*< CLASSDATA: Baseclass="optiongroup" Timestamp="" Scale="Pixels" Uniqueid="" />
*<DefinedPropArrayMethod>
*m: *propiedad_de_clase_con_valor_access
*m: *propiedad_de_clase_con_valor_assign
*p: propiedad_de_clase_con_valor && Tiene un valor por defecto
*p: propiedad_de_clase_sin_valor && Una propiedad sin valor para heredar
*</DefinedPropArrayMethod>
ButtonCount = 2
Height = 46
Name = "cl_optiongroup"
@@ -191,7 +223,8 @@ DEFINE CLASS cl_optiongroup AS optiongroup && descripcion
ENDDEFINE
DEFINE CLASS proj_hook AS projecthook
*< CLASSDATA: Baseclass="projecthook" Timestamp="2014/01/07 20:48:17" Scale="Pixels" Uniqueid="_3YX18LJ09" />
*< CLASSDATA: Baseclass="projecthook" Timestamp="" Scale="Pixels" Uniqueid="" />
Height = 22
Name = "proj_hook"
Width = 23

Binary file not shown.

Binary file not shown.

View File

@@ -133,9 +133,8 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg
loObj.get_PropsFrom_PROTECTED( toReg_Esperado.PROTECTED, .F., @laProtected_Esperado, @lnProtected_Count_Esperado, '' )
*-- Methods
loObj.get_ADD_OBJECT_METHODS( toReg, toReg, '', @laMethods, '', @lnMethods_Count )
loObj.get_ADD_OBJECT_METHODS( toReg_Esperado, toReg_Esperado, '', @laMethods_Esperado, '', @lnMethods_Count_Esperado )
loObj.get_ADD_OBJECT_METHODS( toReg, toReg, '', @laMethods, '', @lnMethods_Count, '', 0, '', 0 )
loObj.get_ADD_OBJECT_METHODS( toReg_Esperado, toReg_Esperado, '', @laMethods_Esperado, '', @lnMethods_Count_Esperado, '', 0, '', 0 )
lcExtraData = tcParent + '.' + tcObjName + ' (' + tcClass + ')'

View File

@@ -234,7 +234,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_prg_a_bin__analizarAsignacion_TAG_Indic
FUNCTION Deberia_analizarAsignacion_TAG__memberdata__EnUnaAsignacion_MultiLine
LOCAL lnCodError, lcMenError, lnCodError_Esperado ;
, lcPropName, lcPropValue, laProps(1,2), lnProp_Count, I, lcTag_I, lcTag_F, lnLen_lcTag_I, lnLen_lcTag_F, lcMemo ;
, lcValue_Esperado ;
, lcValue_Esperado, lcMemberdata ;
, loEx AS EXCEPTION
LOCAL loObj AS c_conversor_prg_a_bin OF "FOXBIN2PRG.PRG"
loObj = THIS.icObj
@@ -247,6 +247,12 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_prg_a_bin__analizarAsignacion_TAG_Indic
lnLen_lcTag_I = LEN(lcTag_I)
lnLen_lcTag_F = LEN(lcTag_F)
lnProp_Count = 17
lcMemberdata = '<memberdata name="mimetodo_1" display="miMetodo_1"/>' + CR_LF
lcMemberdata = lcMemberdata + '<memberdata name="mimetodo_2" display="miMetodo_2"/>' + CR_LF
lcMemberdata = lcMemberdata + '<memberdata name="mimetodo_3" display="miMetodo_3"/>' + CR_LF
lcMemberdata = lcMemberdata + '<memberdata name="mimetodo_4" display="miMetodo_4"/>' + CR_LF
lcMemberdata = lcMemberdata + '<memberdata name="mimetodo_5" display="miMetodo_5"/>' + CR_LF
lcMemberdata = lcMemberdata + '<memberdata name="mimetodo_6" display="miMetodo_6"/>'
DIMENSION laProps(lnProp_Count,2)
laProps = ''
laProps( 1,1) = 'Height = 2.73'
@@ -275,7 +281,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_prg_a_bin__analizarAsignacion_TAG_Indic
laProps(12,2) = ''
laProps(13,1) = '_memberdata = <VFPData>'
laProps(13,2) = ''
laProps(14,1) = '<memberdata name="mimetodo" display="miMetodo"/>'
laProps(14,1) = lcMemberdata
laProps(14,2) = ''
laProps(15,1) = '</VFPData>'
laProps(15,2) = 'XML Metadata for customizable properties'
@@ -284,7 +290,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_prg_a_bin__analizarAsignacion_TAG_Indic
*-- DATOS ESPERADOS
STORE 0 TO lnCodError_Esperado
lcValue_Esperado = REPLICATE( CHR(1), 517 ) + STR(71,8) + '<VFPData>' + CR_LF + '<memberdata name="mimetodo" display="miMetodo"/>' + CR_LF + '</VFPData>'
lcValue_Esperado = REPLICATE( CHR(1), 517 ) + STR(23 + LEN(lcMemberdata),8) + '<VFPData>' + CR_LF + lcMemberdata + CR_LF + '</VFPData>'
*-- TEST
loObj.analizarAsignacion_TAG_Indicado( @lcPropName, @lcPropValue, @laProps, @lnProp_Count ;

View File

@@ -26,7 +26,7 @@ _LegalTrademark = "Open Source"
_ProductName = " FOXBIN2PRG"
_MajorVer = "1"
_MinorVer = "19"
_Revision = " 288"
_Revision = " 299"
_LanguageID = "1034"
_AutoIncrement = "1"
*</DevInfo>
@@ -50,8 +50,8 @@ MODIFY PROJECT 'foxbin2prg.pjx' NOWAIT NOSHOW NOPROJECTHOOK
loProject = _VFP.Projects('foxbin2prg.pjx')
WITH loProject.FILES
.ADD('config\config.fpw') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="1132857145" ID="0" ObjRev="0" />
.ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="1147452450" ID="0" ObjRev="544" />
.ADD('config\config.fpw') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="0" ID="0" ObjRev="0" />
.ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" />
*</BuildProj>
.ITEM('__newproject.f2b').Remove()

Binary file not shown.

Binary file not shown.

View File

@@ -76,6 +76,8 @@
* 21/02/2014 FDBOZZO v1.19.12 Centralizar ZOrder controles en metadata de cabecera de clase para minimizar diferencias / Tambi<62>n mover UniqueIDs y Timestamps a metadata
* 26/02/2014 FDBOZZO v1.19.13 Arreglo bug TimeStamp en archivo cfg / ExtraBackupLevels se puede desactivar / Optimizaciones / Casos FoxUnit
* 01/03/2014 FDBOZZO v1.19.14 Arreglo bug regresion cuando no se define ExtraBackupLevels no hace backups / Optimizaci<63>n carga cfg en batch
* 04/03/2014 FDBOZZO v1.19.15 Arreglo bugs: OLE TX2 legacy / NoTimestamp=0 / DBFs backlink
* 07/03/2014 FDBOZZO v1.19.16 Arreglo bugs: Propiedades y m<>todos Hidden/Protected que no se generan /// Crash m<>todos vac<61>os
* </HISTORIAL DE CAMBIOS Y NOTAS IMPORTANTES>
*
*---------------------------------------------------------------------------------------------------
@@ -93,7 +95,9 @@
* 01/01/2014 Fidel Charny REPORTE BUG mnx v1.16: El men<65> no siempre respeta la posici<63>n original LOCATION y a veces se genera mal el MNX (se arregla en v1.17)
* 05/01/2014 Fidel Charny REPORTE BUG mnx v1.17: Se genera cl<63>usula "DO" o llamada Command cuando no Procedure ni Command que llamar // Diferencia de Case en NAME (se arregla en v1.18)
* 20/02/2014 Ryan Harris PROPUESTA DE MEJORA v1.19.11: Centralizar los ZOrder de los controles en metadata de cabecera de la clase para minimizar diferencias
* 23/02/2014 Ryan Harris BUG cfg v1.19.12: Si se define NoTimestamp en FoxBin2Prg.cfg, se toma el valor opuesto (solucionado en v1.19.13)
* 27/02/2014 BUG REGRESION v1.19.13: Si no se define ExtraBackupLevels no se generan backups (solucionado en v1.19.14)
* 06/03/2014 Ryan Harris REPORTE BUG vcx/scx v1.19.15: Algunas propiedades no mantienen su visibilidad Hidden/Protected // Orden de properties defTop,defLeft,etc
* </TESTEO Y REPORTE DE BUGS (AGRADECIMIENTOS)>
*
*---------------------------------------------------------------------------------------------------
@@ -127,6 +131,10 @@ LPARAMETERS tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDeb
*-- NO modificar! / Do NOT change!
#DEFINE C_CMT_I '*--'
#DEFINE C_CMT_F '--*'
#DEFINE C_CLASSCOMMENTS_I '*<ClassComment>'
#DEFINE C_CLASSCOMMENTS_F '*</ClassComment>'
#DEFINE C_LEN_CLASSCOMMENTS_I LEN(C_CLASSCOMMENTS_I)
#DEFINE C_LEN_CLASSCOMMENTS_F LEN(C_CLASSCOMMENTS_F)
#DEFINE C_CLASSDATA_I '*< CLASSDATA:'
#DEFINE C_CLASSDATA_F '/>'
#DEFINE C_LEN_CLASSDATA_I LEN(C_CLASSDATA_I)
@@ -437,7 +445,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
l_ConfigEvaluated = .F.
l_Debug = .F.
l_Test = .F.
l_ShowErrors = .F.
l_ShowErrors = .T.
l_ShowProgress = .F.
l_Recompile = .F.
l_NoTimestamps = .T.
@@ -740,7 +748,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
.writeLog( JUSTFNAME(lcConfigFile) + ' > tcDontShowProgress: ' + TRANSFORM(tcDontShowProgress) )
CASE LEFT( laConfig(I), 15 ) == LOWER('DontShowErrors:')
*-- Priorizo si tcDontShowErrors NO viene con "0" como par<61>metro, ya que los scripts vbs
*-- los utilizan para sobreescribir la configuraci<63>n por defecto de foxbin2prg.cfg
IF NOT TRANSFORM(tcDontShowErrors) == '0'
tcDontShowErrors = ALLTRIM( SUBSTR( laConfig(I), 16 ) )
ENDIF
.writeLog( JUSTFNAME(lcConfigFile) + ' > tcDontShowErrors: ' + TRANSFORM(tcDontShowErrors) )
CASE LEFT( laConfig(I), 13 ) == LOWER('NoTimestamps:')
@@ -796,7 +808,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
ENDIF
.l_ShowProgress = NOT (TRANSFORM(tcDontShowProgress)=='1')
IF NOT EMPTY(tcDontShowErrors)
.l_ShowErrors = NOT (TRANSFORM(tcDontShowErrors) == '1')
ENDIF
.l_Recompile = (EMPTY(tcRecompile) OR TRANSFORM(tcRecompile) == '1' OR DIRECTORY(tcRecompile))
.l_NoTimestamps = NOT (TRANSFORM(tcNoTimestamps) == '0')
.l_Debug = (TRANSFORM(tcDebug)=='1')
@@ -1074,7 +1088,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
ENDIF
THIS.writeLog( lcErrorInfo )
ENDIF
IF THIS.l_Debug AND THIS.l_ShowErrors
IF THIS.l_ShowErrors
MESSAGEBOX( lcErrorInfo, 0+16+4096, C_FOXBIN2PRG_ERROR_CAPTION_LOC, 60000 )
ENDIF
IF tlRelanzarError
@@ -1082,7 +1096,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
ENDIF
FINALLY
IF THIS.l_ShowProgress
THIS.writeLog_Flush()
IF THIS.l_ShowProgress AND VARTYPE(THIS.o_Frm_Avance) = "O"
THIS.o_Frm_Avance.HIDE()
THIS.o_Frm_Avance.RELEASE()
STORE NULL TO THIS.o_Frm_Avance
@@ -1333,7 +1348,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
FINALLY
loFSO = NULL
THIS.o_Conversor = NULL
THIS.writeLog_Flush()
*THIS.writeLog_Flush()
ENDTRY
@@ -1869,7 +1884,7 @@ DEFINE CLASS c_conversor_base AS SESSION
FOR I = 1 TO OCCURS( '/>', tcValue )
TEXT TO lcValue TEXTMERGE ADDITIVE NOSHOW FLAGS 1+2 PRETEXT 1+2
<<STREXTRACT( tcValue, '<memberdata ', '/>', I, 1+4 )>>
<<CHRTRAN( STREXTRACT( tcValue, '<memberdata ', '/>', I, 1+4 ), CR_LF, ' ' )>>
ENDTEXT
ENDFOR
@@ -1879,7 +1894,11 @@ DEFINE CLASS c_conversor_base AS SESSION
</VFPData>
ENDTEXT
IF LEN(lcValue) > 255
tcValue = C_MPROPHEADER + STR( LEN(tcValue), 8 ) + tcValue
ELSE
tcValue = CHRTRAN( tcValue, CR_LF, '' )
ENDIF
CASE LEFT( tcValue, C_LEN_FB2P_VALUE_I ) == C_FB2P_VALUE_I
*-- Valor especial Fox con cabecera CHR(1): Debo agregarla y desnormalizar el valor
@@ -2059,7 +2078,8 @@ DEFINE CLASS c_conversor_base AS SESSION
IF '&'+'&' $ tcLine
ln_AT_Cmt = AT( '&'+'&', tcLine)
tcComment = LTRIM( SUBSTR( tcLine, ln_AT_Cmt + 2 ) )
tcLine = RTRIM( LEFT( tcLine, ln_AT_Cmt - 1 ), 0, ' ', CHR(9) ) && Quito espacios y TABS
*tcLine = RTRIM( LEFT( tcLine, ln_AT_Cmt - 1 ), 0, ' ', CHR(9) ) && Quito espacios y TABS
tcLine = RTRIM( LEFT( tcLine, ln_AT_Cmt - 1 ), 0, CHR(9) ) && Quito TABS
ENDIF
RETURN
@@ -2085,7 +2105,7 @@ DEFINE CLASS c_conversor_base AS SESSION
IF '=' $ tcAsignacion
ln_AT_Cmt = AT( '=', tcAsignacion)
tcPropName = ALLTRIM( LEFT( tcAsignacion, ln_AT_Cmt - 2 ), 0, ' ', CHR(9) ) && Quito espacios y TABS
tcValue = ALLTRIM( SUBSTR( tcAsignacion, ln_AT_Cmt + 2 ) )
tcValue = LTRIM( SUBSTR( tcAsignacion, ln_AT_Cmt + 2 ) )
IF PCOUNT() > 3
*-- EVALUAR UNA ASIGNACI<43>N QUE PUEDE SER MULTIL<49>NEA (memberdata, fb2p_value, etc)
@@ -2195,7 +2215,7 @@ DEFINE CLASS c_conversor_base AS SESSION
FOR I = 1 TO OCCURS( '/>', tcValue )
TEXT TO lcValue TEXTMERGE ADDITIVE NOSHOW FLAGS 1+2 PRETEXT 1+2
<<>> <<STREXTRACT( tcValue, '<memberdata ', '/>', I, 1+4 )>>
<<>> <<CHRTRAN( STREXTRACT( tcValue, '<memberdata ', '/>', I, 1+4 ), CR_LF, ' ' )>>
ENDTEXT
ENDFOR
@@ -2282,6 +2302,8 @@ DEFINE CLASS c_conversor_base AS SESSION
lcPropName = SUBSTR(tcPropName,5)
CASE NOT tcOperation == 'SETNAME'
ERROR C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC
CASE lcPropName == 'FRXDataSession' && En un VCX lo v<> primero de todo y tambi<62>n luego de Height <20>?
lcPropName = 'A001' + lcPropName
CASE lcPropName == 'ErasePage' && PageFrame: Debe estar antes que PageCount
lcPropName = 'A002' + lcPropName
CASE lcPropName == 'PageCount' && PageFrame: Debe estar antes que ActivePage
@@ -2306,6 +2328,14 @@ DEFINE CLASS c_conversor_base AS SESSION
lcPropName = 'A040' + lcPropName
CASE lcPropName == 'Tag'
lcPropName = 'A045' + lcPropName
CASE lcPropName == 'DefTop' && Propiedad con evaluaci<63>n: Debe estar antes que Top
lcPropName = 'A046' + lcPropName
CASE lcPropName == 'DefLeft' && Propiedad con evaluaci<63>n: Debe estar antes que Left
lcPropName = 'A047' + lcPropName
CASE lcPropName == 'DefHeight' && Propiedad con evaluaci<63>n: Debe estar antes que Height
lcPropName = 'A048' + lcPropName
CASE lcPropName == 'DefWidth' && Propiedad con evaluaci<63>n: Debe estar antes que Width
lcPropName = 'A049' + lcPropName
CASE lcPropName == 'Top'
lcPropName = 'A050' + lcPropName
CASE lcPropName == 'Left'
@@ -2693,6 +2723,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
+ [<memberdata name="analizarbloque_foxbin2prg" display="analizarBloque_FoxBin2Prg"/>] ;
+ [<memberdata name="analizarbloque_hidden" display="analizarBloque_HIDDEN"/>] ;
+ [<memberdata name="analizarbloque_include" display="analizarBloque_INCLUDE"/>] ;
+ [<memberdata name="analizarbloque_classcomments" display="analizarBloque_CLASSCOMMENTS"/>] ;
+ [<memberdata name="analizarbloque_classmetadata" display="analizarBloque_CLASSMETADATA"/>] ;
+ [<memberdata name="analizarbloque_objectmetadata" display="analizarBloque_OBJECTMETADATA"/>] ;
+ [<memberdata name="analizarbloque_ole_def" display="analizarBloque_OLE_DEF"/>] ;
@@ -3432,6 +3463,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
loProcedure = NULL
loProcedure = toClase._Procedures(I)
IF loProcedure._ProcLine_Count > 0 THEN
IF '.' $ loProcedure._Nombre
*-- cboNombre.InteractiveChange ==> No debe acortarse por ser m<>todo modificado de combobox heredado de la clase
*-- cntDatos.txtEdad.Valid ==> Debe acortarse si cntDatos es un objeto existente
@@ -3463,6 +3495,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
<<C_ENDPROC>>
<<>>
ENDTEXT
ENDIF
ENDFOR
loProcedure = NULL
@@ -3971,10 +4004,10 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
ENDIF
IF RIGHT(tcLine, 3) == ', ;' && VALOR INTERMEDIO CON ", ;"
.get_SeparatedPropAndValue( LEFT(tcLine, LEN(tcLine) - 3), @lcProp, @lcValue )
.get_SeparatedPropAndValue( LEFT(tcLine, LEN(tcLine) - 3), @lcProp, @lcValue, toClase, @taCodeLines, @tnCodeLines, @I )
toObjeto.add_Property( @lcProp, @lcValue )
ELSE && VALOR FINAL SIN ", ;" (JUSTO ANTES DEL <END OBJECT>)
.get_SeparatedPropAndValue( RTRIM(tcLine), @lcProp, @lcValue )
.get_SeparatedPropAndValue( tcLine, @lcProp, @lcValue, toClase, @taCodeLines, @tnCodeLines, @I )
toObjeto.add_Property( @lcProp, @lcValue )
ENDIF
@@ -4058,7 +4091,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
ELSE
*-- Sin comentarios
lcPAM_Name = LOWER( RTRIM( SUBSTR( tcLine, lnPos+1 ), 0, ' ', CHR(9) ) )
lcItem = lcPAM_Name + IIF(ISALPHA(lcPAM_Name), '', ' ') + CR_LF
lcItem = lcPAM_Name + IIF( LEFT(lcPAM_Name,1) $ '^*' , ' ', '') + CR_LF
*-- Separo propiedades y m<>todos
IF LEFT(lcItem,1) == '*'
@@ -4111,6 +4144,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
LOCAL Z, lcProp, lcValue, loEx AS EXCEPTION ;
, llCLASSMETADATA_Completed, llPROTECTED_Completed, llHIDDEN_Completed, llDEFINED_PAM_Completed ;
, llINCLUDE_Completed, llCLASS_PROPERTY_Completed, llOBJECTMETADATA_Completed ;
, llCLASSCOMMENTS_Completed ;
, loObjeto AS CL_OBJETO OF 'FOXBIN2PRG.PRG'
STORE '' TO tcProcedureAbierto
@@ -4137,7 +4171,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
ENDIF
* B<>squeda del ID de fin de bloque (ENDDEFINE)
WITH THIS
WITH THIS AS c_conversor_prg_a_bin OF 'FOXBIN2PRG.PRG'
FOR I = toClase._Ini_Cab TO tnCodeLines
tc_Comentario = ''
.set_Line( @tcLine, @taCodeLines, I )
@@ -4149,13 +4183,14 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
CASE .analizarBloque_PROCEDURE( @toModulo, @toClase, @loObjeto, @tcLine, @taCodeLines, @I, @tnCodeLines ;
, @tcProcedureAbierto, @tc_Comentario, @taBloquesExclusion, @tnBloquesExclusion )
*-- OJO: Esta se analiza primero a prop<6F>sito, solo porque no puede estar detr<74>s de PROTECTED y HIDDEN
llCLASS_PROPERTY_Completed = .T.
llPROTECTED_Completed = .T.
llHIDDEN_Completed = .T.
llINCLUDE_Completed = .T.
llCLASSMETADATA_Completed = .T.
llOBJECTMETADATA_Completed = .T.
llDEFINED_PAM_Completed = .T.
STORE .T. TO llCLASSCOMMENTS_Completed ;
, llCLASS_PROPERTY_Completed ;
, llPROTECTED_Completed ;
, llHIDDEN_Completed ;
, llINCLUDE_Completed ;
, llCLASSMETADATA_Completed ;
, llOBJECTMETADATA_Completed ;
, llDEFINED_PAM_Completed
CASE NOT llPROTECTED_Completed AND .analizarBloque_PROTECTED( @toClase, @tcLine )
@@ -4171,12 +4206,16 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
llINCLUDE_Completed = .T.
CASE NOT llCLASSCOMMENTS_Completed AND .analizarBloque_CLASSCOMMENTS( @toClase, @tcLine ,@taCodeLines, tnCodeLines, @I )
llCLASSCOMMENTS_Completed = .T.
CASE NOT llCLASSMETADATA_Completed AND .analizarBloque_CLASSMETADATA( @toClase, @tcLine )
llCLASSMETADATA_Completed = .T.
CASE NOT llOBJECTMETADATA_Completed AND .analizarBloque_OBJECTMETADATA( @toClase, @tcLine )
*llOBJECTMETADATA_Completed = .T.
* No se usa flag porque puede haber m<>ltiples ObjectMetadata.
CASE NOT llDEFINED_PAM_Completed AND .analizarBloque_DEFINED_PAM( @toClase, @tcLine, @taCodeLines, tnCodeLines, @I )
@@ -4184,13 +4223,14 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
CASE .analizarBloque_ADD_OBJECT( @toModulo, @toClase, @tcLine, @I, @taCodeLines, @tnCodeLines )
llCLASS_PROPERTY_Completed = .T.
llPROTECTED_Completed = .T.
llHIDDEN_Completed = .T.
llINCLUDE_Completed = .T.
llCLASSMETADATA_Completed = .T.
llOBJECTMETADATA_Completed = .T.
llDEFINED_PAM_Completed = .T.
STORE .T. TO llCLASSCOMMENTS_Completed ;
, llCLASS_PROPERTY_Completed ;
, llPROTECTED_Completed ;
, llHIDDEN_Completed ;
, llINCLUDE_Completed ;
, llCLASSMETADATA_Completed ;
, llOBJECTMETADATA_Completed ;
, llDEFINED_PAM_Completed
CASE .analizarBloque_ENDDEFINE( @toClase, @tcLine, @I, @tcProcedureAbierto )
@@ -4203,7 +4243,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
*-- NOTA: Las propiedades se agregan tal cual, incluso aunque est<73>n separadas en
*-- varias l<>neas (memberdata y fb2p_value), ya que luego se ensamblan en classProps2Memo().
*
.get_SeparatedPropAndValue( RTRIM(tcLine), @lcProp, @lcValue, @toClase, @taCodeLines, tnCodeLines, @I )
.get_SeparatedPropAndValue( tcLine, @lcProp, @lcValue, @toClase, @taCodeLines, tnCodeLines, @I )
toClase.add_Property( @lcProp, @lcValue, RTRIM(tc_Comentario) )
@@ -4323,7 +4363,57 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
ENDPROC
*******************************************************************************************************************
PROCEDURE analizarBloque_CLASSCOMMENTS
LPARAMETERS toClase, tcLine ,taCodeLines, tnCodeLines, I
EXTERNAL ARRAY taCodeLines
#IF .F.
LOCAL toClase AS CL_CLASE OF 'FOXBIN2PRG.PRG'
#ENDIF
TRY
LOCAL llBloqueEncontrado
IF LEFT( tcLine, C_LEN_CLASSCOMMENTS_I ) == C_CLASSCOMMENTS_I
llBloqueEncontrado = .T.
toClase._Comentario = ''
WITH THIS AS c_conversor_prg_a_bin OF 'FOXBIN2PRG.PRG'
FOR I = I + 1 TO tnCodeLines
.set_Line( @tcLine, @taCodeLines, I )
DO CASE
CASE LEFT( tcLine, C_LEN_CLASSCOMMENTS_F ) == C_CLASSCOMMENTS_F
I = I + 1
EXIT
OTHERWISE
toClase._Comentario = toClase._Comentario + CR_LF + SUBSTR( tcLine, 2 ) && Le quito el '*' inicial
ENDCASE
ENDFOR
ENDWITH && THIS
I = I - 1
IF NOT EMPTY(toClase._Comentario)
toClase._Comentario = SUBSTR( toClase._Comentario, 3 ) + CR_LF && Quito el primer CR+LF
ENDIF
ENDIF
CATCH TO loEx
IF THIS.l_Debug AND _VFP.STARTMODE = 0
SET STEP ON
ENDIF
THROW
ENDTRY
RETURN llBloqueEncontrado
ENDPROC
PROCEDURE analizarBloque_CLASSMETADATA
LPARAMETERS toClase, tcLine
@@ -7090,36 +7180,46 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
*******************************************************************************************************************
PROCEDURE get_ADD_OBJECT_METHODS
LPARAMETERS toRegObj, toRegClass, tcMethods, taMethods, taCode, tnMethodCount
LPARAMETERS toRegObj, toRegClass, tcMethods, taMethods, taCode, tnMethodCount ;
, taPropsAndComments, tnPropsAndComments_Count, taProtected, tnProtected_Count
EXTERNAL ARRAY taPropsAndComments, taProtected
TRY
LOCAL lcMethodName
WITH THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG'
.SortMethod( toRegObj.METHODS, @taMethods, @taCode, '', @tnMethodCount )
.SortMethod( toRegObj.METHODS, @taMethods, @taCode, '', @tnMethodCount ;
, @taPropsAndComments, tnPropsAndComments_Count, @taProtected, tnProtected_Count )
*-- Ubico los m<>todos protegidos y les cambio la definici<63>n.
*-- Los m<>todos se deben generar con la ruta completa, porque si no es imposible saber a que objeto corresponden,
*-- o si son de la clase.
IF tnMethodCount > 0 THEN
FOR I = 1 TO tnMethodCount
IF taMethods(I,2) = 0
LOOP
ENDIF
IF EMPTY(toRegObj.PARENT)
tcMethodName = toRegObj.OBJNAME + '.' + taMethods(I,1)
lcMethodName = toRegObj.OBJNAME + '.' + taMethods(I,1)
ELSE
DO CASE
CASE '.' $ toRegObj.PARENT
tcMethodName = SUBSTR(toRegObj.PARENT, AT('.', toRegObj.PARENT) + 1) + '.' + toRegObj.OBJNAME + '.' + taMethods(I,1)
lcMethodName = SUBSTR(toRegObj.PARENT, AT('.', toRegObj.PARENT) + 1) + '.' + toRegObj.OBJNAME + '.' + taMethods(I,1)
CASE LEFT(toRegObj.PARENT + '.', LEN( toRegClass.OBJNAME + '.' ) ) == toRegClass.OBJNAME + '.'
tcMethodName = toRegObj.OBJNAME + '.' + taMethods(I,1)
lcMethodName = toRegObj.OBJNAME + '.' + taMethods(I,1)
OTHERWISE
tcMethodName = toRegObj.PARENT + '.' + toRegObj.OBJNAME + '.' + taMethods(I,1)
lcMethodName = toRegObj.PARENT + '.' + toRegObj.OBJNAME + '.' + taMethods(I,1)
ENDCASE
ENDIF
*-- Genero el m<>todo SIN indentar, ya que se hace luego
*-- Sustituyo el TEXT/ENDTEXT aqu<71> porque a veces quita espacios de la derecha, y eso es peligroso
tcMethods = tcMethods + CR_LF + 'PROCEDURE ' + tcMethodName
tcMethods = tcMethods + CR_LF + 'PROCEDURE ' + lcMethodName
tcMethods = tcMethods + CR_LF + .IndentarMemo( taCode(taMethods(I,2)) )
tcMethods = tcMethods + CR_LF + 'ENDPROC'
ENDFOR
@@ -7379,7 +7479,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
X = 0
FOR I = lnFin TO 1 STEP -1
IF NOT EMPTY(laLineas(I)) && <20>ltima l<>nea de c<>digo
IF LEFT( laLineas(I), 10 ) <> C_ENDPROC
IF llProcedure AND LEFT( laLineas(I), 10 ) <> C_ENDPROC
*ERROR 'Procedimiento sin cerrar. La <20>ltima l<>nea de c<>digo debe ser ENDPROC. [' + laLineas(1) + ']'
ERROR (TEXTMERGE(C_PROCEDURE_NOT_CLOSED_ON_LINE_LOC))
ENDIF
@@ -7482,11 +7582,12 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
*******************************************************************************************************************
PROCEDURE SortMethod
LPARAMETERS tcMethod, taMethods, taCode, tcSorted, tnMethodCount
LPARAMETERS tcMethod, taMethods, taCode, tcSorted, tnMethodCount, taPropsAndComments, tnPropsAndComments_Count ;
, taProtected, tnProtected_Count
*-- 29/10/2013 Fernando D. Bozzo
*-- Se tiene en cuenta la posibilidad de que haya un PROC/ENDPROC dentro de un TEXT/ENDTEXT
*-- cuando es usado en un generador de c<>digo o similar.
EXTERNAL ARRAY taMethods, taCode
EXTERNAL ARRAY taMethods, taCode, taPropsAndComments, taProtected
*-- ESTRUCTURA DE LOS ARRAYS CREADOS:
*-- taMethods[1,3]
@@ -7496,7 +7597,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
*-- taCode[1]
*-- Bloque de c<>digo del m<>todo en su posici<63>n original
TRY
LOCAL lnLineCount, laLine(1), I, lnTextNodes, tcSorted
LOCAL lnLineCount, laLine(1), I, lnTextNodes, tcSorted, lnProtectedLine, lcMethod
LOCAL loEx AS EXCEPTION
DIMENSION taMethods(1,3)
STORE '' TO taMethods, m.tcSorted, taCode
@@ -7585,13 +7686,44 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
ENDCASE
ENDFOR
*-- Agrego los m<>todos definidos, pero sin c<>digo (Protected/Reserved3)
FOR I = 1 TO tnPropsAndComments_Count
lcMethod = CHRTRAN( taPropsAndComments(I,1), '*', '' )
IF LEFT( taPropsAndComments(I,1), 1 ) == '*' AND ASCAN( taMethods, lcMethod, 1, 0, 1, 1+2+4+8 ) = 0
tnMethodCount = tnMethodCount + 1
DIMENSION taMethods(tnMethodCount, 3) &&, taCode(tnMethodCount)
taMethods(tnMethodCount, 1) = lcMethod
taMethods(tnMethodCount, 2) = 0
lnProtectedLine = ASCAN( taProtected, lcMethod, 1, 0, 1, 1+2+4+8 )
IF lnProtectedLine = 0 THEN
IF tnProtected_Count = 0
lnProtectedLine = 0
ELSE
lnProtectedLine = ASCAN( taProtected, lcMethod + '^', 1, 0, 1, 1+2+4+8 )
ENDIF
IF lnProtectedLine = 0 THEN
taMethods(tnMethodCount, 3) = ''
ELSE
taMethods(tnMethodCount, 3) = 'HIDDEN '
ENDIF
ELSE
taMethods(tnMethodCount, 3) = 'PROTECTED '
ENDIF
ENDIF
ENDFOR
*-- Alphabetical ordering of methods
IF THIS.l_MethodSort_Enabled
ASORT(taMethods,1,-1,0,1)
ENDIF
FOR I = 1 TO tnMethodCount
IF taMethods(I,2) > 0 THEN
m.tcSorted = m.tcSorted + taCode(taMethods(I,2))
ENDIF
ENDFOR
ENDIF
@@ -7686,7 +7818,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
*******************************************************************************************************************
PROCEDURE write_ALL_OBJECT_METHODS
LPARAMETERS tcMethods
LPARAMETERS tcMethods, taPropsAndComments, tnPropsAndComments_Count, taProtected, tnProtected_Count
*-- Finalmente, todos los m<>todos los ordeno y escribo juntos
LOCAL laMethods(1), laCode(1), lnMethodCount, I, lcMethods, lcMethods2
@@ -7696,11 +7828,16 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
DIMENSION laMethods(1,3)
WITH THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG'
.SortMethod( @tcMethods, @laMethods, @laCode, '', @lnMethodCount )
.SortMethod( @tcMethods, @laMethods, @laCode, '', @lnMethodCount ;
, @taPropsAndComments, tnPropsAndComments_Count, @taProtected, tnProtected_Count )
FOR I = 1 TO lnMethodCount
*-- Genero los m<>todos indentados
*-- Sustituyo el TEXT/ENDTEXT aqu<71> porque a veces quita espacios de la derecha, y eso es peligroso
IF laMethods(I,2) = 0
LOOP
ENDIF
lcMethods = lcMethods + CR_LF + C_TAB + laMethods(I,3) + C_PROCEDURE + ' ' + laMethods(I,1)
lcMethods = lcMethods + CR_LF + .IndentarMemo( laCode(laMethods(I,2)), CHR(9) + CHR(9) )
lcMethods = lcMethods + CR_LF + C_TAB + C_ENDPROC
@@ -7730,23 +7867,24 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
WITH THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG'
FOR I = 1 TO tnMethodCount
lcMethod = CHRTRAN( taMethods(I,1), '^', '' )
lnProtectedItem = ASCAN( taProtected, taMethods(I,1), 1, 0, 0, 1)
lnCommentRow = ASCAN( taPropsAndComments, '*' + lcMethod, 1, 0, 1, 1+8)
lnProtectedItem = ASCAN( taProtected, taMethods(I,1), 1, 0, 0, 1+2+4)
DO CASE
CASE lnProtectedItem = 0
IF lnProtectedItem = 0
lnProtectedItem = ASCAN( taProtected, taMethods(I,1) + '^', 1, 0, 0, 1+2+4)
IF lnProtectedItem = 0
*-- M<>todo com<6F>n
lcProcDef = 'PROCEDURE'
CASE taProtected(lnProtectedItem) == taMethods(I,1)
*-- M<>todo protegido
lcProcDef = 'PROTECTED PROCEDURE'
CASE taProtected(lnProtectedItem) == taMethods(I,1) + '^'
ELSE
*-- M<>todo oculto
lcProcDef = 'HIDDEN PROCEDURE'
ENDIF
ELSE
*-- M<>todo protegido
lcProcDef = 'PROTECTED PROCEDURE'
ENDIF
ENDCASE
lnCommentRow = ASCAN( taPropsAndComments, '*' + lcMethod, 1, 0, 1, 1+2+4+8)
*-- Nombre del m<>todo
TEXT TO lcMethods ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
@@ -7762,7 +7900,10 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
*-- C<>digo del m<>todo
*-- Sustituyo el TEXT/ENDTEXT aqu<71> porque a veces quita espacios de la derecha, y eso es peligroso
IF taMethods(I,2) > 0 THEN
lcMethods = lcMethods + CR_LF + .IndentarMemo( taCode(taMethods(I,2)), C_TAB + C_TAB )
ENDIF
lcMethods = lcMethods + CR_LF + C_TAB + 'ENDPROC'
lcMethods = lcMethods + CR_LF
ENDFOR
@@ -7786,31 +7927,37 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
*******************************************************************************************************************
PROCEDURE write_CLASS_PROPERTIES
LPARAMETERS toRegClass, taPropsAndValues, taPropsAndComments, taProtected
LPARAMETERS toRegClass, taPropsAndValues, taPropsAndComments, taProtected ;
, tnPropsAndValues_Count, tnPropsAndComments_Count, tnProtected_Count
EXTERNAL ARRAY taPropsAndValues, taPropsAndComments
TRY
LOCAL lnPropsAndValues_Count, lcHiddenProp, lcProtectedProp, lcPropsMethodsDefd, lnPropsAndComments_Count, I ;
LOCAL lcHiddenProp, lcProtectedProp, lcPropsMethodsDefd, I ;
, lcPropName, lnProtectedItem, lcComentarios
WITH THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG'
*-- DEFINIR PROPIEDADES ( HIDDEN, PROTECTED, *DEFINED_PAM )
DIMENSION taProtected(1)
STORE '' TO lcHiddenProp, lcProtectedProp, lcPropsMethodsDefd
.get_PropsAndValuesFrom_PROPERTIES( toRegClass.PROPERTIES, 1, @taPropsAndValues, @lnPropsAndValues_Count, '' )
.get_PropsAndCommentsFrom_RESERVED3( toRegClass.RESERVED3, .T., @taPropsAndComments, @lnPropsAndComments_Count, '' )
.get_PropsFrom_PROTECTED( toRegClass.PROTECTED, .T., @taProtected, 0, '' )
STORE 0 TO tnPropsAndValues_Count, tnPropsAndComments_Count, tnProtected_Count
.get_PropsAndValuesFrom_PROPERTIES( toRegClass.PROPERTIES, 1, @taPropsAndValues, @tnPropsAndValues_Count, '' )
.get_PropsAndCommentsFrom_RESERVED3( toRegClass.RESERVED3, .T., @taPropsAndComments, @tnPropsAndComments_Count, '' )
.get_PropsFrom_PROTECTED( toRegClass.PROTECTED, .T., @taProtected, @tnProtected_Count, '' )
IF lnPropsAndValues_Count > 0 THEN
IF tnPropsAndValues_Count > 0 THEN
*-- Recorro las propiedades (campo Properties) para ir conformando
*-- las definiciones HIDDEN y PROTECTED
FOR I = 1 TO lnPropsAndValues_Count
FOR I = 1 TO tnPropsAndValues_Count
IF EMPTY(taPropsAndValues(I,1))
LOOP
ENDIF
IF tnProtected_Count = 0
lnProtectedItem = 0
ELSE
lnProtectedItem = ASCAN(taProtected, taPropsAndValues(I,1), 1, 0, 0, 1)
ENDIF
DO CASE
CASE lnProtectedItem = 0
@@ -7827,7 +7974,27 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
ENDCASE
ENDFOR
.write_DEFINED_PAM( @taPropsAndComments, lnPropsAndComments_Count )
*-- Segunda barrida para las propiedades Hidden/Protected que no est<73>n definidas en Properties
FOR I = 1 TO tnProtected_Count
*-- La propiedad evaluada no debe ser vac<61>a, debe estar en la lista de PROPERTIES y no debe ser un *M<>todo
IF EMPTY(taProtected(I,1)) ;
OR ASCAN(taPropsAndValues, CHRTRAN( taProtected(I), '^', '' ), 1, 0, 1, 1) > 0 ;
OR ASCAN(taPropsAndComments, '*' + CHRTRAN( taProtected(I), '^', '' ), 1, 0, 1, 1) > 0
LOOP
ENDIF
IF RIGHT( taProtected(I), 1 ) == '^'
*-- Propiedad oculta
lcHiddenProp = lcHiddenProp + ',' + CHRTRAN( taProtected(I), '^', '' )
ELSE
*-- Propiedad protegida
lcProtectedProp = lcProtectedProp + ',' + taProtected(I)
ENDIF
ENDFOR
.write_DEFINED_PAM( @taPropsAndComments, tnPropsAndComments_Count )
.write_HIDDEN_Properties( @lcHiddenProp )
@@ -7946,10 +8113,19 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
LPARAMETERS toRegClass
*-- Comentario de la clase
IF NOT EMPTY(toRegClass.RESERVED7) THEN
*-- Si es multil<69>nea, debe ir en un tag <ClassComments> aparte
IF OCCURS( CHR(13), toRegClass.RESERVED7 ) > 0 THEN
TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
<<>> <<C_CLASSCOMMENTS_I>>
<<THIS.IndentarMemo( toRegClass.Reserved7, C_TAB + C_TAB + '*' )>>
<<>> <<C_CLASSCOMMENTS_F>>
ENDTEXT
ELSE && Comentario in-line
TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2
<<>> <<'&'+'&'>> <<toRegClass.Reserved7>>
ENDTEXT
ENDIF
ENDIF
ENDPROC
@@ -8571,9 +8747,10 @@ 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,3), I
STORE 0 TO lnCodError, lnLastClass, lnObjCount
STORE '' TO laMethods(1), laCode(1), laProtected(1), laPropsAndComments(1), laObjs(1)
, laObjs(1,3), I, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count
STORE 0 TO lnCodError, lnLastClass, lnObjCount, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count ;
, lnMethodCount
STORE '' TO laMethods, laCode, laProtected, laPropsAndComments, laObjs
STORE NULL TO loRegClass, loRegObj
WITH THIS AS c_conversor_vcx_a_prg OF 'FOXBIN2PRG.PRG'
@@ -8663,7 +8840,8 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg
.write_INCLUDE( @loRegClass )
.write_CLASS_PROPERTIES( @loRegClass, @laPropsAndValues, @laPropsAndComments, @laProtected )
.write_CLASS_PROPERTIES( @loRegClass, @laPropsAndValues, @laPropsAndComments, @laProtected ;
, @lnPropsAndValues_Count, @lnPropsAndComments_Count, @lnProtected_Count )
ASORT(laObjs, 3, -1, 0, 0) && Orden Alfab<61>tico (del SCAN original)
@@ -8674,8 +8852,9 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg
*-- OBTENGO LOS M<>TODOS DE LA CLASE PARA POSTERIOR TRATAMIENTO
DIMENSION laMethods(1,3)
lcMethods = ''
.SortMethod( loRegClass.METHODS, @laMethods, @laCode, '', @lnMethodCount )
laMethods = ''
.SortMethod( loRegClass.METHODS, @laMethods, @laCode, '', @lnMethodCount ;
, @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count )
.write_CLASS_METHODS( @lnMethodCount, @laMethods, @laCode, @laProtected, @laPropsAndComments )
@@ -8701,10 +8880,11 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg
loRegObj.UNIQUEID = ALLTRIM(loRegObj.UNIQUEID)
ENDIF
.get_ADD_OBJECT_METHODS( @loRegObj, @loRegClass, @lcMethods )
.get_ADD_OBJECT_METHODS( @loRegObj, @loRegClass, @lcMethods, @laMethods, @laCode, @lnMethodCount ;
, @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count )
ENDSCAN
.write_ALL_OBJECT_METHODS( @lcMethods )
.write_ALL_OBJECT_METHODS( @lcMethods, @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count )
GOTO RECORD (lnRecno)
ENDSCAN
@@ -8772,9 +8952,10 @@ DEFINE CLASS c_conversor_scx_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,3), I
STORE 0 TO lnCodError, lnLastClass, lnObjCount
STORE '' TO laMethods(1), laCode(1), laProtected(1), laPropsAndComments(1)
, laObjs(1,3), I, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count
STORE 0 TO lnCodError, lnLastClass, lnObjCount, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count ;
, lnMethodCount
STORE '' TO laMethods, laCode, laProtected, laPropsAndComments, laObjs
STORE NULL TO loRegClass, loRegObj
WITH THIS AS c_conversor_scx_a_prg OF 'FOXBIN2PRG.PRG'
@@ -8880,7 +9061,8 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg
.write_INCLUDE( @loRegClass )
.write_CLASS_PROPERTIES( @loRegClass, @laPropsAndValues, @laPropsAndComments, @laProtected )
.write_CLASS_PROPERTIES( @loRegClass, @laPropsAndValues, @laPropsAndComments, @laProtected ;
, @lnPropsAndValues_Count, @lnPropsAndComments_Count, @lnProtected_Count )
ASORT(laObjs, 3, -1, 0, 0) && Orden Alfab<61>tico de objetos (del SCAN original)
@@ -8892,8 +9074,9 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg
*-- OBTENGO LOS M<>TODOS DE LA CLASE PARA POSTERIOR TRATAMIENTO
DIMENSION laMethods(1,3)
lcMethods = ''
.SortMethod( loRegClass.METHODS, @laMethods, @laCode, '', @lnMethodCount )
laMethods = ''
.SortMethod( loRegClass.METHODS, @laMethods, @laCode, '', @lnMethodCount ;
, @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count )
.write_CLASS_METHODS( @lnMethodCount, @laMethods, @laCode, @laProtected, @laPropsAndComments )
@@ -8921,10 +9104,11 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg
loRegObj.UNIQUEID = ALLTRIM(loRegObj.UNIQUEID)
ENDIF
.get_ADD_OBJECT_METHODS( @loRegObj, @loRegClass, @lcMethods )
.get_ADD_OBJECT_METHODS( @loRegObj, @loRegClass, @lcMethods, @laMethods, @laCode, @lnMethodCount ;
, @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count )
ENDSCAN
.write_ALL_OBJECT_METHODS( @lcMethods )
.write_ALL_OBJECT_METHODS( @lcMethods, @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count )
GOTO RECORD (lnRecno)
ENDSCAN

View File

@@ -1,7 +1,12 @@
*.FXP
*.LNK
*.SCC
*.TMP
*.BAK
*/FXUResults.*
*/FXUPersist*.*
*.7z
*.bak
*.fxp
*.lnk
*.log
*.mpx
*.scc
*.spx
*.tbk
*.zip
*/vfp_init.prg
*/includefilelist.txt