Changeset: 393 v1.19.29
- Bug: Error detectado cuando hay un campo llamado "text" y la línea anterior termina en "," en vez de ";" (M_N_M) - Optimizaciones y refactorizaciones
This commit is contained in:
@@ -2,8 +2,8 @@ Lparameters toUpdateInfo
|
|||||||
|
|
||||||
Local lcNote
|
Local lcNote
|
||||||
With toUpdateInfo
|
With toUpdateInfo
|
||||||
.VersionNumber = 'v1.19.28'
|
.VersionNumber = 'v1.19.29'
|
||||||
.VersionDate = Date(2014,07,26)
|
.VersionDate = Date(2014,08,01)
|
||||||
.SourceFileUrl = 'http://vfpxrepository.com/dl/thorupdate/Projects/FoxBin2Prg/FoxBin2Prg.Zip'
|
.SourceFileUrl = 'http://vfpxrepository.com/dl/thorupdate/Projects/FoxBin2Prg/FoxBin2Prg.Zip'
|
||||||
|
|
||||||
.Link = 'http://vfpx.codeplex.com/wikipage?title=FoxBin2PRG'
|
.Link = 'http://vfpx.codeplex.com/wikipage?title=FoxBin2PRG'
|
||||||
@@ -17,6 +17,10 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg
|
|||||||
|
|
||||||
Change History -------------------------------------------------------------
|
Change History -------------------------------------------------------------
|
||||||
|
|
||||||
|
2014/08/01 v1.19.29
|
||||||
|
- Bug Fix vcx/scx: Bad text/endtext block detection when there is a line that begins with a "text" field and previous line end with "," in regards of ";" (M_N_M)
|
||||||
|
- Optimizations and refactoring
|
||||||
|
|
||||||
2014/07/26 v1.19.28
|
2014/07/26 v1.19.28
|
||||||
- Feature: Added new options in foxbin2prg.cfg (DBF_Conversion_Included, DBF_Conversion_Excluded) and in filename.dbf.cfg (DBF_Conversion_Order, DBF_Conversion_Condition) for exporting DBFs data to text when DBF_Conversion_Support is 4 (Edyshor)
|
- Feature: Added new options in foxbin2prg.cfg (DBF_Conversion_Included, DBF_Conversion_Excluded) and in filename.dbf.cfg (DBF_Conversion_Order, DBF_Conversion_Condition) for exporting DBFs data to text when DBF_Conversion_Support is 4 (Edyshor)
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as
|
|||||||
|
|
||||||
*******************************************************************************************************************************************
|
*******************************************************************************************************************************************
|
||||||
FUNCTION Evaluate_results
|
FUNCTION Evaluate_results
|
||||||
LPARAMETERS taExpected_Pos, taPos, tnPos_Count
|
LPARAMETERS taExpected_Pos, taPos, tnPos_Count, taLineasExclusion_Esperadas, taLineasExclusion
|
||||||
|
|
||||||
LOCAL loObj AS c_conversor_base OF "FOXBIN2PRG.PRG"
|
LOCAL loObj AS c_conversor_base OF "FOXBIN2PRG.PRG"
|
||||||
loObj = THIS.icObj
|
loObj = THIS.icObj
|
||||||
@@ -37,11 +37,24 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as
|
|||||||
RETURN .T.
|
RETURN .T.
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
|
*-- INFORMACI<43>N
|
||||||
THIS.messageout( "Pares de posiciones esperados: " + TRANSFORM(tnPos_Count) )
|
THIS.messageout( "Pares de posiciones esperados: " + TRANSFORM(tnPos_Count) )
|
||||||
FOR I = 1 TO tnPos_Count
|
FOR I = 1 TO tnPos_Count
|
||||||
THIS.messageout( "Posici<63>n de Inicio/Fin esperados: " + TRANSFORM(taExpected_Pos(I,1)) + ',' + TRANSFORM(taExpected_Pos(I,2)) )
|
THIS.messageout( "Posici<63>n de Inicio/Fin esperados: " + TRANSFORM(taExpected_Pos(I,1)) + ',' + TRANSFORM(taExpected_Pos(I,2)) )
|
||||||
ENDFOR
|
ENDFOR
|
||||||
|
|
||||||
|
THIS.messageout( "" )
|
||||||
|
|
||||||
|
IF TYPE( "taLineasExclusion",1 ) = "A"
|
||||||
|
FOR I = 1 TO ALEN(taLineasExclusion_Esperadas,1)
|
||||||
|
THIS.messageout( "L<>nea de exclusi<73>n " + STR(I,2) + " esperada: " + TRANSFORM( taLineasExclusion_Esperadas(I) ) ;
|
||||||
|
+ IIF( taLineasExclusion_Esperadas(I), ' <', '' ) )
|
||||||
|
ENDFOR
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
THIS.messageout( REPLICATE("*",80) )
|
||||||
|
|
||||||
|
*-- TESTS
|
||||||
THIS.assertequals( ALEN(taExpected_Pos,1), ALEN(taPos,1), "Posici<63>n de Inicio/Fin" )
|
THIS.assertequals( ALEN(taExpected_Pos,1), ALEN(taPos,1), "Posici<63>n de Inicio/Fin" )
|
||||||
|
|
||||||
FOR I = 1 TO tnPos_Count
|
FOR I = 1 TO tnPos_Count
|
||||||
@@ -49,12 +62,17 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as
|
|||||||
, TRANSFORM(taPos(I,1)) + ',' + TRANSFORM(taPos(I,2)) ;
|
, TRANSFORM(taPos(I,1)) + ',' + TRANSFORM(taPos(I,2)) ;
|
||||||
, "Posici<63>n de Inicio/Fin" )
|
, "Posici<63>n de Inicio/Fin" )
|
||||||
ENDFOR
|
ENDFOR
|
||||||
|
|
||||||
|
IF TYPE( "taLineasExclusion",1 ) = "A"
|
||||||
|
THIS.assertequalsarrays( @taLineasExclusion_Esperadas, @taLineasExclusion, "L<>neas de Exclusi<73>n" )
|
||||||
|
ENDIF
|
||||||
ENDFUNC
|
ENDFUNC
|
||||||
|
|
||||||
|
|
||||||
*******************************************************************************************************************************************
|
*******************************************************************************************************************************************
|
||||||
FUNCTION Deberia_ObtenerLaUbicacionDelBloque_IF_ENDIF_CuandoCodigoCon_IF_ENDIF_predominante_esEvaluado
|
FUNCTION Deberia_ObtenerLaUbicacionDelBloque_IF_ENDIF_CuandoCodigoCon_IF_ENDIF_predominante_esEvaluado
|
||||||
LOCAL lcMethod, laLineas(1), lnLineas, laPos(1,2), lnPos_Count, laExpected_Pos(2,2)
|
LOCAL lcMethod, laLineas(1), lnLineas, laPos(1,2), lnPos_Count, laExpected_Pos(2,2) ;
|
||||||
|
, laLineasExclusion(10), laLineasExclusion_Esperadas(10)
|
||||||
LOCAL loObj AS c_conversor_prg_a_bin OF "FOXBIN2PRG.PRG"
|
LOCAL loObj AS c_conversor_prg_a_bin OF "FOXBIN2PRG.PRG"
|
||||||
loObj = THIS.icObj
|
loObj = THIS.icObj
|
||||||
|
|
||||||
@@ -64,6 +82,12 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as
|
|||||||
laExpected_Pos(1,2) = 5
|
laExpected_Pos(1,2) = 5
|
||||||
laExpected_Pos(2,1) = 7
|
laExpected_Pos(2,1) = 7
|
||||||
laExpected_Pos(2,2) = 9
|
laExpected_Pos(2,2) = 9
|
||||||
|
laLineasExclusion_Esperadas( 3) = .T.
|
||||||
|
laLineasExclusion_Esperadas( 4) = .T.
|
||||||
|
laLineasExclusion_Esperadas( 5) = .T.
|
||||||
|
laLineasExclusion_Esperadas( 7) = .T.
|
||||||
|
laLineasExclusion_Esperadas( 8) = .T.
|
||||||
|
laLineasExclusion_Esperadas( 9) = .T.
|
||||||
|
|
||||||
TEXT TO lcMethod NOSHOW TEXTMERGE FLAGS 1 PRETEXT 1+2+4
|
TEXT TO lcMethod NOSHOW TEXTMERGE FLAGS 1 PRETEXT 1+2+4
|
||||||
<<C_PROC>> myMethod_B
|
<<C_PROC>> myMethod_B
|
||||||
@@ -81,16 +105,18 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as
|
|||||||
lnLineas = ALINES( laLineas, lcMethod )
|
lnLineas = ALINES( laLineas, lcMethod )
|
||||||
|
|
||||||
*-- Test
|
*-- Test
|
||||||
loObj.identificarBloquesDeExclusion( @laLineas, lnLineas, , @laPos, @lnPos_Count )
|
loObj.identificarBloquesDeExclusion( @laLineas, lnLineas, , @laLineasExclusion, @lnPos_Count, @laPos )
|
||||||
|
|
||||||
THIS.Evaluate_results( @laExpected_Pos, @laPos, lnPos_Count )
|
*-- Evaluaci<EFBFBD>n de resultados
|
||||||
|
THIS.Evaluate_results( @laExpected_Pos, @laPos, lnPos_Count, @laLineasExclusion_Esperadas, @laLineasExclusion )
|
||||||
|
|
||||||
ENDFUNC
|
ENDFUNC
|
||||||
|
|
||||||
|
|
||||||
*******************************************************************************************************************************************
|
*******************************************************************************************************************************************
|
||||||
FUNCTION Deberia_ObtenerLaUbicacionDelBloque_IF_ENDIF_Externo_CuandoCodigoCon_IF_ENDIF_predominante_esEvaluado
|
FUNCTION Deberia_ObtenerLaUbicacionDelBloque_IF_ENDIF_Externo_CuandoCodigoCon_IF_ENDIF_predominante_esEvaluado
|
||||||
LOCAL lcMethod, laLineas(1), lnLineas, laPos(1,2), lnPos_Count, laExpected_Pos(1,2)
|
LOCAL lcMethod, laLineas(1), lnLineas, laPos(1,2), lnPos_Count, laExpected_Pos(1,2) ;
|
||||||
|
, laLineasExclusion(10), laLineasExclusion_Esperadas(10)
|
||||||
LOCAL loObj AS c_conversor_prg_a_bin OF "FOXBIN2PRG.PRG"
|
LOCAL loObj AS c_conversor_prg_a_bin OF "FOXBIN2PRG.PRG"
|
||||||
loObj = THIS.icObj
|
loObj = THIS.icObj
|
||||||
|
|
||||||
@@ -98,6 +124,13 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as
|
|||||||
STORE '' TO lcMethod
|
STORE '' TO lcMethod
|
||||||
laExpected_Pos(1,1) = 3
|
laExpected_Pos(1,1) = 3
|
||||||
laExpected_Pos(1,2) = 9
|
laExpected_Pos(1,2) = 9
|
||||||
|
laLineasExclusion_Esperadas( 3) = .T.
|
||||||
|
laLineasExclusion_Esperadas( 4) = .T.
|
||||||
|
laLineasExclusion_Esperadas( 5) = .T.
|
||||||
|
laLineasExclusion_Esperadas( 6) = .T.
|
||||||
|
laLineasExclusion_Esperadas( 7) = .T.
|
||||||
|
laLineasExclusion_Esperadas( 8) = .T.
|
||||||
|
laLineasExclusion_Esperadas( 9) = .T.
|
||||||
|
|
||||||
TEXT TO lcMethod NOSHOW TEXTMERGE FLAGS 1 PRETEXT 1+2+4
|
TEXT TO lcMethod NOSHOW TEXTMERGE FLAGS 1 PRETEXT 1+2+4
|
||||||
<<C_PROC>> myMethod_B
|
<<C_PROC>> myMethod_B
|
||||||
@@ -115,16 +148,18 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as
|
|||||||
lnLineas = ALINES( laLineas, lcMethod )
|
lnLineas = ALINES( laLineas, lcMethod )
|
||||||
|
|
||||||
*-- Test
|
*-- Test
|
||||||
loObj.identificarBloquesDeExclusion( @laLineas, lnLineas, , @laPos, @lnPos_Count )
|
loObj.identificarBloquesDeExclusion( @laLineas, lnLineas, , @laLineasExclusion, @lnPos_Count, @laPos )
|
||||||
|
|
||||||
THIS.Evaluate_results( @laExpected_Pos, @laPos, lnPos_Count )
|
*-- Evaluaci<EFBFBD>n de resultados
|
||||||
|
THIS.Evaluate_results( @laExpected_Pos, @laPos, lnPos_Count, @laLineasExclusion_Esperadas, @laLineasExclusion )
|
||||||
|
|
||||||
ENDFUNC
|
ENDFUNC
|
||||||
|
|
||||||
|
|
||||||
*******************************************************************************************************************************************
|
*******************************************************************************************************************************************
|
||||||
FUNCTION Deberia_ObtenerLaUbicacionDelBloque_TEXT_ENDTEXT_CuandoCodigoCon_TEXT_ENDTEXT_predominante_esEvaluado
|
FUNCTION Deberia_ObtenerLaUbicacionDelBloque_TEXT_ENDTEXT_CuandoCodigoCon_TEXT_ENDTEXT_predominante_esEvaluado
|
||||||
LOCAL lcMethod, laLineas(1), lnLineas, laPos(1,2), lnPos_Count, laExpected_Pos(2,2)
|
LOCAL lcMethod, laLineas(1), lnLineas, laPos(1,2), lnPos_Count, laExpected_Pos(2,2) ;
|
||||||
|
, laLineasExclusion(10), laLineasExclusion_Esperadas(10)
|
||||||
LOCAL loObj AS c_conversor_prg_a_bin OF "FOXBIN2PRG.PRG"
|
LOCAL loObj AS c_conversor_prg_a_bin OF "FOXBIN2PRG.PRG"
|
||||||
loObj = THIS.icObj
|
loObj = THIS.icObj
|
||||||
|
|
||||||
@@ -134,6 +169,12 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as
|
|||||||
laExpected_Pos(1,2) = 5
|
laExpected_Pos(1,2) = 5
|
||||||
laExpected_Pos(2,1) = 7
|
laExpected_Pos(2,1) = 7
|
||||||
laExpected_Pos(2,2) = 9
|
laExpected_Pos(2,2) = 9
|
||||||
|
laLineasExclusion_Esperadas( 3) = .T.
|
||||||
|
laLineasExclusion_Esperadas( 4) = .T.
|
||||||
|
laLineasExclusion_Esperadas( 5) = .T.
|
||||||
|
laLineasExclusion_Esperadas( 7) = .T.
|
||||||
|
laLineasExclusion_Esperadas( 8) = .T.
|
||||||
|
laLineasExclusion_Esperadas( 9) = .T.
|
||||||
|
|
||||||
TEXT TO lcMethod NOSHOW TEXTMERGE FLAGS 1 PRETEXT 1+2+4
|
TEXT TO lcMethod NOSHOW TEXTMERGE FLAGS 1 PRETEXT 1+2+4
|
||||||
<<C_PROC>> myMethod_B
|
<<C_PROC>> myMethod_B
|
||||||
@@ -151,15 +192,16 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as
|
|||||||
lnLineas = ALINES( laLineas, lcMethod )
|
lnLineas = ALINES( laLineas, lcMethod )
|
||||||
|
|
||||||
*-- Test
|
*-- Test
|
||||||
loObj.identificarBloquesDeExclusion( @laLineas, lnLineas, , @laPos, @lnPos_Count )
|
loObj.identificarBloquesDeExclusion( @laLineas, lnLineas, , @laLineasExclusion, @lnPos_Count, @laPos )
|
||||||
|
|
||||||
THIS.Evaluate_results( @laExpected_Pos, @laPos, lnPos_Count )
|
*-- Evaluaci<EFBFBD>n de resultados
|
||||||
|
THIS.Evaluate_results( @laExpected_Pos, @laPos, lnPos_Count, @laLineasExclusion_Esperadas, @laLineasExclusion )
|
||||||
|
|
||||||
ENDFUNC
|
ENDFUNC
|
||||||
|
|
||||||
|
|
||||||
*******************************************************************************************************************************************
|
*******************************************************************************************************************************************
|
||||||
FUNCTION Deberia_NoEncontrarNingunBloque_TEXT_ENDTEXT_CuandoUnaLineaQueComienzaConUnCampoLlamado_Text_esEvaluado
|
FUNCTION Deberia_NoEncontrarBloque_TEXT_ENDTEXT_CuandoEvaluaUnaLineaQueComienzaConUnCampoLlamado_Text_YLineaAnteriorTerminaEn_PuntoYComa
|
||||||
LOCAL lcMethod, laLineas(1), lnLineas, laPos(1,2), lnPos_Count, laExpected_Pos(1,2)
|
LOCAL lcMethod, laLineas(1), lnLineas, laPos(1,2), lnPos_Count, laExpected_Pos(1,2)
|
||||||
LOCAL loObj AS c_conversor_prg_a_bin OF "FOXBIN2PRG.PRG"
|
LOCAL loObj AS c_conversor_prg_a_bin OF "FOXBIN2PRG.PRG"
|
||||||
loObj = THIS.icObj
|
loObj = THIS.icObj
|
||||||
@@ -174,7 +216,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as
|
|||||||
*-- Code Block
|
*-- Code Block
|
||||||
IF !FOUND()
|
IF !FOUND()
|
||||||
APPEND BLANK
|
APPEND BLANK
|
||||||
REPLACE CURSOR WITH "cawlmain", START WITH 1, END WITH 999999, isnumeric WITH .F., lastused WITH "", ; && Worst case for next line
|
REPLACE CURSOR WITH "cawlmain", START WITH 1, END WITH 999999, isnumeric WITH .F., lastused WITH "", ; && Worst case for next line with a field called "text"
|
||||||
TEXT WITH "W<>rmeobjekte", standard WITH .T.
|
TEXT WITH "W<>rmeobjekte", standard WITH .T.
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
@@ -187,7 +229,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as
|
|||||||
Empfaenger C(2),;
|
Empfaenger C(2),;
|
||||||
Rohdatum C(8),;
|
Rohdatum C(8),;
|
||||||
RohZeit C(4),;
|
RohZeit C(4),;
|
||||||
LFDNr C(4),; && Worst case for next line
|
LFDNr C(4),; && Worst case for next line with a field called "text"
|
||||||
Text C(26),;
|
Text C(26),;
|
||||||
Trenner C(2),;
|
Trenner C(2),;
|
||||||
DATUM D NULL,;
|
DATUM D NULL,;
|
||||||
@@ -204,7 +246,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as
|
|||||||
lfdnr c(30) NULL DEFAULT .NULL.,;
|
lfdnr c(30) NULL DEFAULT .NULL.,;
|
||||||
linkkey int,;
|
linkkey int,;
|
||||||
email CHAR(60) NULL DEFAULT .NULL.,;
|
email CHAR(60) NULL DEFAULT .NULL.,;
|
||||||
subject VARCHAR(254) NULL DEFAULT .NULL.,; && Worst case for next line
|
subject VARCHAR(254) NULL DEFAULT .NULL.,; && Worst case for next line with a field called "text"
|
||||||
TEXT m NULL DEFAULT .NULL.,;
|
TEXT m NULL DEFAULT .NULL.,;
|
||||||
docname c(50) NULL DEFAULT .NULL.,;
|
docname c(50) NULL DEFAULT .NULL.,;
|
||||||
versenden l NOT NULL DEFAULT .F.,;
|
versenden l NOT NULL DEFAULT .F.,;
|
||||||
@@ -228,11 +270,69 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as
|
|||||||
lnLineas = ALINES( laLineas, lcMethod )
|
lnLineas = ALINES( laLineas, lcMethod )
|
||||||
|
|
||||||
*-- Test
|
*-- Test
|
||||||
loObj.identificarBloquesDeExclusion( @laLineas, lnLineas, , @laPos, @lnPos_Count )
|
loObj.identificarBloquesDeExclusion( @laLineas, lnLineas, , , @lnPos_Count, @laPos )
|
||||||
|
|
||||||
THIS.Evaluate_results( @laExpected_Pos, @laPos, lnPos_Count )
|
THIS.Evaluate_results( @laExpected_Pos, @laPos, lnPos_Count )
|
||||||
|
|
||||||
ENDFUNC
|
ENDFUNC
|
||||||
|
|
||||||
|
|
||||||
|
*******************************************************************************************************************************************
|
||||||
|
FUNCTION Deberia_NoEncontrarBloque_TEXT_ENDTEXT_CuandoEvaluaUnaLineaQueComienzaConUnCampoLlamado_Text_YLineaAnteriorTerminaEn_Coma
|
||||||
|
LOCAL lcMethod, laLineas(1), lnLineas, laPos(1,2), lnPos_Count, laExpected_Pos(1,2) ;
|
||||||
|
, laLineasExclusion(29), laLineasExclusion_Esperadas(29)
|
||||||
|
LOCAL loObj AS c_conversor_prg_a_bin OF "FOXBIN2PRG.PRG"
|
||||||
|
loObj = THIS.icObj
|
||||||
|
|
||||||
|
*-- Input and expected params
|
||||||
|
STORE '' TO lcMethod
|
||||||
|
laExpected_Pos(1,1) = 4
|
||||||
|
laExpected_Pos(1,2) = 15
|
||||||
|
FOR I = 4 TO 15
|
||||||
|
laLineasExclusion_Esperadas(I) = .T.
|
||||||
|
ENDFOR
|
||||||
|
|
||||||
|
TEXT TO lcMethod NOSHOW TEXTMERGE FLAGS 1 PRETEXT 1+2+4
|
||||||
|
<<C_PROC>> myMethod_B
|
||||||
|
*-- Code Block
|
||||||
|
IF ODBC_Query.odbc
|
||||||
|
<<C_TEXT>> TO cSQL NOSHOW
|
||||||
|
update menuitems
|
||||||
|
set parent_menuitem_id = ?iParent_menuitem_id, && Worst case for next line with a field called "text"
|
||||||
|
text = ?strText,
|
||||||
|
command = ?strCommand,
|
||||||
|
message = ?strMessage,
|
||||||
|
keyname = ?strKeyname,
|
||||||
|
keylabel = ?strKeylabel,
|
||||||
|
skipfor = ?strSkipfor,
|
||||||
|
sequence = ?iSequence
|
||||||
|
where menuitem_id = ?iMenuitem_id
|
||||||
|
<<C_ENDTEXT>>
|
||||||
|
ODBC_Query(cSQL)
|
||||||
|
ELSE
|
||||||
|
update menuitems;
|
||||||
|
set parent_menuitem_id = iParent_menuitem_id,; && Worst case for next line with a field called "text"
|
||||||
|
text = strText,;
|
||||||
|
command = strCommand,;
|
||||||
|
message = strMessage,;
|
||||||
|
keyname = strKeyname,;
|
||||||
|
keylabel = strKeylabel,;
|
||||||
|
skipfor = strSkipfor,;
|
||||||
|
sequence = iSequence;
|
||||||
|
where menuitem_id == iMenuitem_id
|
||||||
|
ENDIF
|
||||||
|
<<C_ENDPROC>>
|
||||||
|
ENDTEXT
|
||||||
|
|
||||||
|
lnLineas = ALINES( laLineas, lcMethod )
|
||||||
|
|
||||||
|
*-- Test
|
||||||
|
loObj.identificarBloquesDeExclusion( @laLineas, lnLineas, , @laLineasExclusion, @lnPos_Count, @laPos )
|
||||||
|
|
||||||
|
*-- Evaluaci<63>n de resultados
|
||||||
|
THIS.Evaluate_results( @laExpected_Pos, @laPos, lnPos_Count, @laLineasExclusion_Esperadas, @laLineasExclusion )
|
||||||
|
|
||||||
|
ENDFUNC
|
||||||
|
|
||||||
|
|
||||||
ENDDEFINE
|
ENDDEFINE
|
||||||
|
|||||||
BIN
foxbin2prg.exe
BIN
foxbin2prg.exe
Binary file not shown.
@@ -23,10 +23,10 @@ _CompanyName = "Fernando D. Bozzo"
|
|||||||
_FileDescription = "Conversor bidireccional de binarios FoxPro 9 (scx,vcx,pjx) a texto para sustituir al scctext :-)"
|
_FileDescription = "Conversor bidireccional de binarios FoxPro 9 (scx,vcx,pjx) a texto para sustituir al scctext :-)"
|
||||||
_LegalCopyright = "Creative Commons 4: Reconocimiento - CompartirIgual (by-sa): http://creativecommons.org/licenses/by/4.0/"
|
_LegalCopyright = "Creative Commons 4: Reconocimiento - CompartirIgual (by-sa): http://creativecommons.org/licenses/by/4.0/"
|
||||||
_LegalTrademark = "Creative Commons 4: Reconocimiento - CompartirIgual (by-sa): http://creativecommons.org/licenses/by/4.0/"
|
_LegalTrademark = "Creative Commons 4: Reconocimiento - CompartirIgual (by-sa): http://creativecommons.org/licenses/by/4.0/"
|
||||||
_ProductName = " FOXBIN2PRG v1.19.28"
|
_ProductName = " FOXBIN2PRG v1.19.29"
|
||||||
_MajorVer = "1"
|
_MajorVer = "1"
|
||||||
_MinorVer = "19"
|
_MinorVer = "19"
|
||||||
_Revision = "28"
|
_Revision = "29"
|
||||||
_LanguageID = "1034"
|
_LanguageID = "1034"
|
||||||
_AutoIncrement = "0"
|
_AutoIncrement = "0"
|
||||||
*</DevInfo>
|
*</DevInfo>
|
||||||
|
|||||||
BIN
foxbin2prg.pjt
BIN
foxbin2prg.pjt
Binary file not shown.
BIN
foxbin2prg.pjx
BIN
foxbin2prg.pjx
Binary file not shown.
628
foxbin2prg.prg
628
foxbin2prg.prg
@@ -95,6 +95,7 @@
|
|||||||
* 06/07/2014 FDBOZZO v1.19.26 Bug Fix cfg: ExtraBackupLevel no se tiene en cuenta cuando se usa multi-configuraci<63>n
|
* 06/07/2014 FDBOZZO v1.19.26 Bug Fix cfg: ExtraBackupLevel no se tiene en cuenta cuando se usa multi-configuraci<63>n
|
||||||
* 02/06/2014 DH/FDBOZZO v1.19.27 Mejora: Agregado soporte para exportar datos para DIFF (no para importar)
|
* 02/06/2014 DH/FDBOZZO v1.19.27 Mejora: Agregado soporte para exportar datos para DIFF (no para importar)
|
||||||
* 21/07/2014 FDBOZZO v1.19.28 Mejora: Agregada funcionalidad para filtrado de tablas y datos cuando se elige DBF_Conversion_Support:4 (Edyshor)
|
* 21/07/2014 FDBOZZO v1.19.28 Mejora: Agregada funcionalidad para filtrado de tablas y datos cuando se elige DBF_Conversion_Support:4 (Edyshor)
|
||||||
|
* 29/07/2014 FDBOZZO v1.19.29 Arreglo bug vcx/scx: Un campo de tabla llamado "text" que comienza la l<>nea puede confundirse con la estructura TEXT/ENDTEXT y reconocer mal el resto del c<>digo
|
||||||
* </HISTORIAL DE CAMBIOS Y NOTAS IMPORTANTES>
|
* </HISTORIAL DE CAMBIOS Y NOTAS IMPORTANTES>
|
||||||
*
|
*
|
||||||
*---------------------------------------------------------------------------------------------------
|
*---------------------------------------------------------------------------------------------------
|
||||||
@@ -133,6 +134,7 @@
|
|||||||
* 27/06/2014 Daniel S<>nchez MEJORA v1.19.25: Si el campo memo "methods" de los vcx/scx contiene asteriscos fuera de lugar (que no deber<65>a), FoxBin2Prg falla. Deber<65>a poder procesarlo igual.
|
* 27/06/2014 Daniel S<>nchez MEJORA v1.19.25: Si el campo memo "methods" de los vcx/scx contiene asteriscos fuera de lugar (que no deber<65>a), FoxBin2Prg falla. Deber<65>a poder procesarlo igual.
|
||||||
* 02/06/2014 Doug Hennig MEJORA v1.19.22: Agregada funcionalidad para exportar los datos de las tablas al archivo db2 (Agregado en v1.19.27)
|
* 02/06/2014 Doug Hennig MEJORA v1.19.22: Agregada funcionalidad para exportar los datos de las tablas al archivo db2 (Agregado en v1.19.27)
|
||||||
* 21/07/2014 Edyshor PROPUESTA DE MEJORA db2 v1.19.27: Ser<65>a <20>til poder filtrar tablas y datos cuando se elige DBF_Conversion_Support:4 (Agregado en v1.19.28)
|
* 21/07/2014 Edyshor PROPUESTA DE MEJORA db2 v1.19.27: Ser<65>a <20>til poder filtrar tablas y datos cuando se elige DBF_Conversion_Support:4 (Agregado en v1.19.28)
|
||||||
|
* 29/07/2014 M_N_M REPORTE BUG vcx/scx v1.19.28: Los campos de tabla con nombre "text" a veces provocan corrupci<63>n del binario generado (Arreglado en v1.19.29)
|
||||||
* </TESTEO Y REPORTE DE BUGS (AGRADECIMIENTOS)>
|
* </TESTEO Y REPORTE DE BUGS (AGRADECIMIENTOS)>
|
||||||
*
|
*
|
||||||
*---------------------------------------------------------------------------------------------------
|
*---------------------------------------------------------------------------------------------------
|
||||||
@@ -2376,13 +2378,16 @@ DEFINE CLASS c_conversor_base AS SESSION
|
|||||||
+ [<memberdata name="buscarobjetodelmetodopornombre" display="buscarObjetoDelMetodoPorNombre"/>] ;
|
+ [<memberdata name="buscarobjetodelmetodopornombre" display="buscarObjetoDelMetodoPorNombre"/>] ;
|
||||||
+ [<memberdata name="comprobarexpresionvalida" display="comprobarExpresionValida"/>] ;
|
+ [<memberdata name="comprobarexpresionvalida" display="comprobarExpresionValida"/>] ;
|
||||||
+ [<memberdata name="convertir" display="Convertir"/>] ;
|
+ [<memberdata name="convertir" display="Convertir"/>] ;
|
||||||
|
+ [<memberdata name="currentlineispreviouslinecontinuation" display="currentLineIsPreviousLineContinuation"/>] ;
|
||||||
+ [<memberdata name="decode_specialcodes_1_31" display="decode_SpecialCodes_1_31"/>] ;
|
+ [<memberdata name="decode_specialcodes_1_31" display="decode_SpecialCodes_1_31"/>] ;
|
||||||
+ [<memberdata name="desnormalizarasignacion" display="desnormalizarAsignacion"/>] ;
|
+ [<memberdata name="desnormalizarasignacion" display="desnormalizarAsignacion"/>] ;
|
||||||
+ [<memberdata name="desnormalizarvalorpropiedad" display="desnormalizarValorPropiedad"/>] ;
|
+ [<memberdata name="desnormalizarvalorpropiedad" display="desnormalizarValorPropiedad"/>] ;
|
||||||
+ [<memberdata name="desnormalizarvalorxml" display="desnormalizarValorXML"/>] ;
|
+ [<memberdata name="desnormalizarvalorxml" display="desnormalizarValorXML"/>] ;
|
||||||
|
+ [<memberdata name="eltextoevaluadoeseltokenindicado" display="elTextoEvaluadoEsElTokenIndicado"/>] ;
|
||||||
+ [<memberdata name="encode_specialcodes_1_31" display="encode_SpecialCodes_1_31"/>] ;
|
+ [<memberdata name="encode_specialcodes_1_31" display="encode_SpecialCodes_1_31"/>] ;
|
||||||
+ [<memberdata name="exception2str" display="Exception2Str"/>] ;
|
+ [<memberdata name="exception2str" display="Exception2Str"/>] ;
|
||||||
+ [<memberdata name="filetypecode" display="fileTypeCode"/>] ;
|
+ [<memberdata name="filetypecode" display="fileTypeCode"/>] ;
|
||||||
|
+ [<memberdata name="get_listnameswithvaluesfrom_inline_metadatatag" display="get_ListNamesWithValuesFrom_InLine_MetadataTag"/>] ;
|
||||||
+ [<memberdata name="get_separatedlineandcomment" display="get_SeparatedLineAndComment"/>] ;
|
+ [<memberdata name="get_separatedlineandcomment" display="get_SeparatedLineAndComment"/>] ;
|
||||||
+ [<memberdata name="get_separatedpropandvalue" display="get_SeparatedPropAndValue"/>] ;
|
+ [<memberdata name="get_separatedpropandvalue" display="get_SeparatedPropAndValue"/>] ;
|
||||||
+ [<memberdata name="get_valuefromnullterminatedvalue" display="get_ValueFromNullTerminatedValue"/>] ;
|
+ [<memberdata name="get_valuefromnullterminatedvalue" display="get_ValueFromNullTerminatedValue"/>] ;
|
||||||
@@ -2659,6 +2664,60 @@ DEFINE CLASS c_conversor_base AS SESSION
|
|||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
|
|
||||||
|
PROCEDURE currentLineIsPreviousLineContinuation
|
||||||
|
LPARAMETERS taCodeLines, I
|
||||||
|
|
||||||
|
LOCAL lcPrevLine, llIsContinuation
|
||||||
|
*-- Analizo la l<>nea anterior para saber si termina con ";" o "," y la actual es continuaci<63>n
|
||||||
|
IF I > 1
|
||||||
|
lcPrevLine = taCodeLines(I-1)
|
||||||
|
ELSE
|
||||||
|
lcPrevLine = ''
|
||||||
|
ENDIF
|
||||||
|
.get_SeparatedLineAndComment( @lcPrevLine )
|
||||||
|
IF INLIST( RIGHT( lcPrevLine,1 ), ';', ',' ) && Esta l<>nea es continuaci<63>n de la anterior
|
||||||
|
llIsContinuation = .T.
|
||||||
|
ENDIF
|
||||||
|
RETURN llIsContinuation
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
|
||||||
|
PROCEDURE elTextoEvaluadoEsElTokenIndicado
|
||||||
|
LPARAMETERS tcLine, ta_ID_Bloques, tnLen_IDFinBQ, X, tnIniFin
|
||||||
|
LOCAL llEncontrado, lcWord
|
||||||
|
|
||||||
|
TRY
|
||||||
|
IF tnIniFin = 1
|
||||||
|
*-- TOKENS DE INICIO
|
||||||
|
IF UPPER( LEFT( tcLine, LEN(ta_ID_Bloques(X,1)) ) ) == ta_ID_Bloques(X,1)
|
||||||
|
*-- Evaluar casos especiales
|
||||||
|
lcWord = UPPER( ALLTRIM(GETWORDNUM(tcLine,1) ) )
|
||||||
|
|
||||||
|
IF ta_ID_Bloques(X,1) == 'TEXT' AND NOT lcWord == 'TEXT'
|
||||||
|
EXIT
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
llEncontrado = .T.
|
||||||
|
ENDIF
|
||||||
|
ELSE
|
||||||
|
*-- TOKENS DE FIN
|
||||||
|
IF LEFT( UPPER( tcLine ), tnLen_IDFinBQ ) == ta_ID_Bloques(X,2) && Fin de bloque encontrado (#ENDI, ENDTEXT, etc)
|
||||||
|
*-- Evaluar casos especiales
|
||||||
|
lcWord = UPPER( ALLTRIM(GETWORDNUM(tcLine,1) ) )
|
||||||
|
|
||||||
|
IF ta_ID_Bloques(X,2) == 'ENDT' AND NOT lcWord == LEFT( 'ENDTEXT', LEN(lcWord) )
|
||||||
|
EXIT
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
llEncontrado = .T.
|
||||||
|
ENDIF
|
||||||
|
ENDIF
|
||||||
|
ENDTRY
|
||||||
|
|
||||||
|
RETURN llEncontrado
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE decode_SpecialCodes_1_31
|
PROCEDURE decode_SpecialCodes_1_31
|
||||||
*---------------------------------------------------------------------------------------------------
|
*---------------------------------------------------------------------------------------------------
|
||||||
* PAR<41>METROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
|
* PAR<41>METROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
|
||||||
@@ -2888,6 +2947,64 @@ DEFINE CLASS c_conversor_base AS SESSION
|
|||||||
ENDFUNC
|
ENDFUNC
|
||||||
|
|
||||||
|
|
||||||
|
PROCEDURE get_ListNamesWithValuesFrom_InLine_MetadataTag
|
||||||
|
*-- OBTENGO EL ARRAY DE DATOS Y VALORES DE LA LINEA DE METADATOS INDICADA
|
||||||
|
*-- NOTA: Los valores NO PUEDEN contener comillas dobles en su valor, ya que generar<61>a un error al parsearlos.
|
||||||
|
*-- Ejemplo:
|
||||||
|
*< FileMetadata: Type="V" Cpid="1252" Timestamp="1131901580" ID="1129207528" ObjRev="544" />
|
||||||
|
*< OLE: Nombre="frm_form.Pageframe1.Page1.Cnt_controles_h.Olecontrol1" Parent="frm_form.Pageframe1.Page1.Cnt_controles_h" ObjName="Olecontrol1" Checksum="1685567300" Value="0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPg...ADAP7AAAA==" />
|
||||||
|
*--------------------------------------------------------------------------------------------------------------
|
||||||
|
* PAR<41>METROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
|
||||||
|
* tcLineWithMetadata (!@ IN ) L<>nea con metadatos y un tag de metadatos
|
||||||
|
* taPropsAndValues (!@ OUT) Array a devolver con las propiedades y valores encontrados
|
||||||
|
* tnPropsAndValues_Count (!@ OUT) Cantidad de propiedades encontradas
|
||||||
|
* tcLeftTag (v! IN ) TAG de inicio de los metadatos
|
||||||
|
* tcRightTag (v! IN ) TAG de fin de los metadatos
|
||||||
|
*--------------------------------------------------------------------------------------------------------------
|
||||||
|
LPARAMETERS tcLineWithMetadata, taPropsAndValues, tnPropsAndValues_Count, tcLeftTag, tcRightTag
|
||||||
|
EXTERNAL ARRAY taPropsAndValues
|
||||||
|
|
||||||
|
LOCAL lcMetadatos, I, lnEqualSigns, lcNextVar, lcStr, lcVirtualMeta, lnPos1, lnPos2, lnLastPos, lnCantComillas
|
||||||
|
STORE '' TO lcVirtualMeta
|
||||||
|
STORE 0 TO lnPos1, lnPos2, lnLastPos, tnPropsAndValues_Count, I
|
||||||
|
|
||||||
|
lcMetadatos = ALLTRIM( STREXTRACT( tcLineWithMetadata, tcLeftTag, tcRightTag, 1, 1) )
|
||||||
|
lnCantComillas = OCCURS( '"', lcMetadatos )
|
||||||
|
|
||||||
|
IF lnCantComillas % 2 <> 0 && Valido que las comillas "" sean pares
|
||||||
|
*ERROR "Error de datos: No se puede parsear porque las comillas no son pares en la l<>nea [" + lcMetadatos + "]"
|
||||||
|
ERROR (TEXTMERGE(C_DATA_ERROR_CANT_PARSE_UNPAIRING_DOUBLE_QUOTES_LOC))
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
lnLastPos = 1
|
||||||
|
DIMENSION taPropsAndValues( lnCantComillas / 2, 2 )
|
||||||
|
|
||||||
|
*-------------------------------------------------------------------------------------
|
||||||
|
* IMPORTANTE!!
|
||||||
|
* ------------
|
||||||
|
* SI SE SEPARAN LAS IGUALDADES CON ESPACIOS, <20>STAS DEJAN DE RECONOCERSE!! (prop = "valor" en vez de prop="valor")
|
||||||
|
* TENER EN CUENTA AL GENERAR EL TEXTO O AL MODIFICARLO MANUALMENTE AL MERGEAR
|
||||||
|
*-------------------------------------------------------------------------------------
|
||||||
|
FOR I = 1 TO lnCantComillas STEP 2
|
||||||
|
tnPropsAndValues_Count = tnPropsAndValues_Count + 1
|
||||||
|
|
||||||
|
* Type="V" Cpid="1252"
|
||||||
|
* ^ ^ => Posiciones del par de comillas dobles
|
||||||
|
lnPos1 = AT( '"', lcMetadatos, I )
|
||||||
|
lnPos2 = AT( '"', lcMetadatos, I + 1 )
|
||||||
|
|
||||||
|
* Type="V" Cpid="1252"
|
||||||
|
* ^ ^ ^ => LastPos, lnPos1 y lnPos2
|
||||||
|
taPropsAndValues(tnPropsAndValues_Count,1) = ALLTRIM( GETWORDNUM( SUBSTR( lcMetadatos, lnLastPos, lnPos1 - lnLastPos ), 1, '=' ) )
|
||||||
|
taPropsAndValues(tnPropsAndValues_Count,2) = SUBSTR( lcMetadatos, lnPos1 + 1, lnPos2 - lnPos1 - 1 )
|
||||||
|
|
||||||
|
lnLastPos = lnPos2 + 1
|
||||||
|
ENDFOR
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE get_SeparatedLineAndComment
|
PROCEDURE get_SeparatedLineAndComment
|
||||||
*---------------------------------------------------------------------------------------------------
|
*---------------------------------------------------------------------------------------------------
|
||||||
* PAR<41>METROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
|
* PAR<41>METROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
|
||||||
@@ -2913,11 +3030,13 @@ DEFINE CLASS c_conversor_base AS SESSION
|
|||||||
*-- Si se indican m<>s de 3 par<61>metros, eval<61>a el valor completo a trav<61>s de las l<>neas de c<>digo (valores multi-l<>nea)
|
*-- Si se indican m<>s de 3 par<61>metros, eval<61>a el valor completo a trav<61>s de las l<>neas de c<>digo (valores multi-l<>nea)
|
||||||
*--------------------------------------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------------------------------------
|
||||||
* PAR<41>METROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
|
* PAR<41>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
|
* tcAsignacion (v! IN ) Asignaci<EFBFBD>n completa con variable, igualdad y valor
|
||||||
* tnCodeLines (!@ IN ) Cantidad de l<>neas de c<>digo
|
* tcPropName (@! OUT) Nombre de la variable
|
||||||
* taBloquesExclusion (!@ IN ) Array con las posiciones de inicio/fin de los bloques de exclusion
|
* tcValue (@? OUT) Valor
|
||||||
* tnBloquesExclusion (!@ IN ) Cantidad de bloques de exclusi<73>n
|
* toClase (v! IN )
|
||||||
* toModulo (@? OUT) Objeto con toda la informaci<63>n del m<>dulo analizado
|
* taCodeLines (@! IN ) L<>neas de c<>digo a analizar
|
||||||
|
* tnCodeLines (v! IN ) Cantidad de l<>neas de c<>digo
|
||||||
|
* I (@! IN/OUT) L<>nea actual
|
||||||
*--------------------------------------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------------------------------------
|
||||||
LPARAMETERS tcAsignacion, tcPropName, tcValue, toClase, taCodeLines, tnCodeLines, I
|
LPARAMETERS tcAsignacion, tcPropName, tcValue, toClase, taCodeLines, tnCodeLines, I
|
||||||
LOCAL ln_AT_Cmt
|
LOCAL ln_AT_Cmt
|
||||||
@@ -2970,25 +3089,135 @@ DEFINE CLASS c_conversor_base AS SESSION
|
|||||||
|
|
||||||
*******************************************************************************************************************
|
*******************************************************************************************************************
|
||||||
PROCEDURE identificarBloquesDeCodigo
|
PROCEDURE identificarBloquesDeCodigo
|
||||||
LPARAMETERS taCodeLines, tnCodeLines, taBloquesExclusion, tnBloquesExclusion, toModulo
|
LPARAMETERS taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toModulo
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
|
||||||
|
PROCEDURE identificarBloquesDeExclusion
|
||||||
|
LPARAMETERS taCodeLines, tnCodeLines, ta_ID_Bloques, taLineasExclusion, tnBloquesExclusion, taBloquesExclusion
|
||||||
|
* LOS BLOQUES DE EXCLUSI<53>N SON AQUELLOS QUE TIENEN TEXT/ENDTEXT OF #IF/#ENDIF Y SE USAN PARA NO BUSCAR
|
||||||
|
* INSTRUCCIONES COMO "DEFINE CLASS" O "PROCEDURE" EN LOS MISMOS.
|
||||||
|
*--------------------------------------------------------------------------------------------------------------
|
||||||
|
* PAR<41>METROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
|
||||||
|
* taCodeLines (!@ IN ) El array con las l<>neas del c<>digo de texto donde buscar
|
||||||
|
* tnCodeLines (@? IN ) Cantidad de l<>neas de c<>digo
|
||||||
|
* ta_ID_Bloques (@? IN ) Array de pares de identificadores (2 cols). Ej: '#IF .F.','#ENDI' ; 'TEXT','ENDTEXT' ; etc
|
||||||
|
* taLineasExclusion (@? OUT) Array unidimensional con un .T. o .F. seg<65>n la l<>nea sea de exclusi<73>n o no
|
||||||
|
* tnBloquesExclusion (@? OUT) Cantidad de bloques de exclusi<73>n
|
||||||
|
*--------------------------------------------------------------------------------------------------------------
|
||||||
|
EXTERNAL ARRAY ta_ID_Bloques, taLineasExclusion
|
||||||
|
|
||||||
|
TRY
|
||||||
|
LOCAL lnBloques, I, X, lnPrimerID, lnLen_IDFinBQ, lnID_Bloques_Count, lcWord, lnAnidamientos, lcLine, lcPrevLine
|
||||||
|
DIMENSION taLineasExclusion(tnCodeLines), taBloquesExclusion(1,2)
|
||||||
|
STORE 0 TO tnBloquesExclusion, lnPrimerID, I, X, lnLen_IDFinBQ
|
||||||
|
|
||||||
|
IF tnCodeLines > 1
|
||||||
|
IF EMPTY(ta_ID_Bloques)
|
||||||
|
DIMENSION ta_ID_Bloques(2,2)
|
||||||
|
ta_ID_Bloques(1,1) = '#IF'
|
||||||
|
ta_ID_Bloques(1,2) = '#ENDI'
|
||||||
|
ta_ID_Bloques(2,1) = 'TEXT'
|
||||||
|
ta_ID_Bloques(2,2) = 'ENDT'
|
||||||
|
lnID_Bloques_Count = ALEN( ta_ID_Bloques, 1 )
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
*-- B<>squeda del ID de inicio de bloque
|
||||||
|
WITH THIS AS c_conversor_prg_a_bin OF 'FOXBIN2PRG.PRG'
|
||||||
|
FOR I = 1 TO tnCodeLines
|
||||||
|
* Reduzco los espacios. Ej: '#IF .F. && cmt' ==> '#IF .F.&&cmt'
|
||||||
|
lcLine = LTRIM( STRTRAN( STRTRAN( CHRTRAN( taCodeLines(I), CHR(9), ' ' ), ' ', ' ' ), ' ', ' ' ) )
|
||||||
|
|
||||||
|
IF .lineIsOnlyCommentAndNoMetadata( @lcLine )
|
||||||
|
LOOP
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
lnPrimerID = 0
|
||||||
|
|
||||||
|
FOR X = 1 TO lnID_Bloques_Count
|
||||||
|
lnLen_IDFinBQ = LEN( ta_ID_Bloques(X,2) )
|
||||||
|
IF .elTextoEvaluadoEsElTokenIndicado( @lcLine, @ta_ID_Bloques, lnLen_IDFinBQ, X, 1 ) ;
|
||||||
|
AND NOT THIS.currentLineIsPreviousLineContinuation( @taCodeLines, I )
|
||||||
|
lnPrimerID = X
|
||||||
|
lnAnidamientos = 1
|
||||||
|
EXIT
|
||||||
|
ENDIF
|
||||||
|
ENDFOR
|
||||||
|
|
||||||
|
IF lnPrimerID > 0 && Se ha identificado un ID de bloque excluyente
|
||||||
|
tnBloquesExclusion = tnBloquesExclusion + 1
|
||||||
|
lnLen_IDFinBQ = LEN( ta_ID_Bloques(lnPrimerID,2) )
|
||||||
|
DIMENSION taBloquesExclusion(tnBloquesExclusion,2)
|
||||||
|
taBloquesExclusion(tnBloquesExclusion,1) = I
|
||||||
|
taLineasExclusion(I) = .T.
|
||||||
|
|
||||||
|
* B<>squeda del ID de fin de bloque
|
||||||
|
FOR I = I + 1 TO tnCodeLines
|
||||||
|
* Reduzco los espacios. Ej: '#IF .F. && cmt' ==> '#IF .F.&&cmt'
|
||||||
|
lcLine = LTRIM( STRTRAN( STRTRAN( CHRTRAN( taCodeLines(I), CHR(9), ' ' ), ' ', ' ' ), ' ', ' ' ) )
|
||||||
|
taLineasExclusion(I) = .T.
|
||||||
|
|
||||||
|
IF .lineIsOnlyCommentAndNoMetadata( @lcLine )
|
||||||
|
LOOP
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
DO CASE
|
||||||
|
CASE .elTextoEvaluadoEsElTokenIndicado( @lcLine, @ta_ID_Bloques, lnLen_IDFinBQ, X, 1 ) ;
|
||||||
|
AND NOT THIS.currentLineIsPreviousLineContinuation( @taCodeLines, I )
|
||||||
|
lnAnidamientos = lnAnidamientos + 1
|
||||||
|
|
||||||
|
CASE .elTextoEvaluadoEsElTokenIndicado( @lcLine, @ta_ID_Bloques, lnLen_IDFinBQ, X, 2 ) ;
|
||||||
|
AND NOT THIS.currentLineIsPreviousLineContinuation( @taCodeLines, I )
|
||||||
|
lnAnidamientos = lnAnidamientos - 1
|
||||||
|
|
||||||
|
IF lnAnidamientos = 0
|
||||||
|
taBloquesExclusion(tnBloquesExclusion,2) = I
|
||||||
|
EXIT
|
||||||
|
ENDIF
|
||||||
|
ENDCASE
|
||||||
|
ENDFOR
|
||||||
|
|
||||||
|
*-- Validaci<63>n
|
||||||
|
IF EMPTY(taBloquesExclusion(tnBloquesExclusion,2))
|
||||||
|
*ERROR 'No se ha encontrado el marcador de fin [' + ta_ID_Bloques(lnPrimerID,2) ;
|
||||||
|
+ '] que cierra al marcador de inicio [' + ta_ID_Bloques(lnPrimerID,1) ;
|
||||||
|
+ '] de la l<>nea ' + TRANSFORM(taBloquesExclusion(tnBloquesExclusion,1))
|
||||||
|
ERROR (TEXTMERGE(C_END_MARKER_NOT_FOUND_LOC))
|
||||||
|
ENDIF
|
||||||
|
ENDIF
|
||||||
|
ENDFOR
|
||||||
|
ENDWITH && THIS
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
CATCH TO loEx
|
||||||
|
IF THIS.l_Debug AND _VFP.STARTMODE = 0
|
||||||
|
SET STEP ON
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
THROW
|
||||||
|
|
||||||
|
ENDTRY
|
||||||
|
|
||||||
|
RETURN
|
||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
|
|
||||||
*******************************************************************************************************************
|
*******************************************************************************************************************
|
||||||
PROCEDURE lineaExcluida
|
PROCEDURE lineaExcluida
|
||||||
LPARAMETERS tn_Linea, tnBloquesExclusion, taBloquesExclusion
|
LPARAMETERS tn_Linea, tnBloquesExclusion, taLineasExclusion
|
||||||
|
|
||||||
EXTERNAL ARRAY taBloquesExclusion
|
EXTERNAL ARRAY taLineasExclusion
|
||||||
LOCAL X, llExcluida
|
*LOCAL X, llExcluida
|
||||||
|
|
||||||
FOR X = 1 TO tnBloquesExclusion
|
*FOR X = 1 TO tnBloquesExclusion
|
||||||
IF BETWEEN( tn_Linea, taBloquesExclusion(X,1), taBloquesExclusion(X,2) )
|
* IF BETWEEN( tn_Linea, taBloquesExclusion(X,1), taBloquesExclusion(X,2) )
|
||||||
llExcluida = .T.
|
* llExcluida = .T.
|
||||||
EXIT
|
* EXIT
|
||||||
ENDIF
|
* ENDIF
|
||||||
ENDFOR
|
*ENDFOR
|
||||||
|
|
||||||
RETURN llExcluida
|
*RETURN llExcluida
|
||||||
|
RETURN taLineasExclusion(tn_Linea)
|
||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
|
|
||||||
@@ -3586,17 +3815,14 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
|
|||||||
+ [<memberdata name="createreport" display="createReport"/>] ;
|
+ [<memberdata name="createreport" display="createReport"/>] ;
|
||||||
+ [<memberdata name="createmenu" display="createMenu"/>] ;
|
+ [<memberdata name="createmenu" display="createMenu"/>] ;
|
||||||
+ [<memberdata name="defined_pam2memo" display="defined_PAM2Memo"/>] ;
|
+ [<memberdata name="defined_pam2memo" display="defined_PAM2Memo"/>] ;
|
||||||
+ [<memberdata name="eltextoevaluadoeseltokenindicado" display="elTextoEvaluadoEsElTokenIndicado"/>] ;
|
|
||||||
+ [<memberdata name="emptyrecord" display="emptyRecord"/>] ;
|
+ [<memberdata name="emptyrecord" display="emptyRecord"/>] ;
|
||||||
+ [<memberdata name="escribirarchivobin" display="escribirArchivoBin"/>] ;
|
+ [<memberdata name="escribirarchivobin" display="escribirArchivoBin"/>] ;
|
||||||
+ [<memberdata name="evaluate_pam" display="Evaluate_PAM"/>] ;
|
+ [<memberdata name="evaluate_pam" display="Evaluate_PAM"/>] ;
|
||||||
+ [<memberdata name="evaluardefiniciondeprocedure" display="evaluarDefinicionDeProcedure"/>] ;
|
+ [<memberdata name="evaluardefiniciondeprocedure" display="evaluarDefinicionDeProcedure"/>] ;
|
||||||
+ [<memberdata name="getclassmethodcomment" display="getClassMethodComment"/>] ;
|
+ [<memberdata name="getclassmethodcomment" display="getClassMethodComment"/>] ;
|
||||||
+ [<memberdata name="getclasspropertycomment" display="getClassPropertyComment"/>] ;
|
+ [<memberdata name="getclasspropertycomment" display="getClassPropertyComment"/>] ;
|
||||||
+ [<memberdata name="get_listnameswithvaluesfrom_inline_metadatatag" display="get_ListNamesWithValuesFrom_InLine_MetadataTag"/>] ;
|
|
||||||
+ [<memberdata name="get_valuebyname_fromlistnameswithvalues" display="get_ValueByName_FromListNamesWithValues"/>] ;
|
+ [<memberdata name="get_valuebyname_fromlistnameswithvalues" display="get_ValueByName_FromListNamesWithValues"/>] ;
|
||||||
+ [<memberdata name="hiddenandprotected_pam" display="hiddenAndProtected_PAM"/>] ;
|
+ [<memberdata name="hiddenandprotected_pam" display="hiddenAndProtected_PAM"/>] ;
|
||||||
+ [<memberdata name="identificarbloquesdeexclusion" display="identificarBloquesDeExclusion"/>] ;
|
|
||||||
+ [<memberdata name="insert_allobjects" display="insert_AllObjects"/>] ;
|
+ [<memberdata name="insert_allobjects" display="insert_AllObjects"/>] ;
|
||||||
+ [<memberdata name="insert_object" display="insert_Object"/>] ;
|
+ [<memberdata name="insert_object" display="insert_Object"/>] ;
|
||||||
+ [<memberdata name="objectmethods2memo" display="objectMethods2Memo"/>] ;
|
+ [<memberdata name="objectmethods2memo" display="objectMethods2Memo"/>] ;
|
||||||
@@ -3661,214 +3887,6 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
|
|||||||
ENDFUNC
|
ENDFUNC
|
||||||
|
|
||||||
|
|
||||||
*******************************************************************************************************************
|
|
||||||
PROCEDURE get_ListNamesWithValuesFrom_InLine_MetadataTag
|
|
||||||
*-- OBTENGO EL ARRAY DE DATOS Y VALORES DE LA LINEA DE METADATOS INDICADA
|
|
||||||
*-- NOTA: Los valores NO PUEDEN contener comillas dobles en su valor, ya que generar<61>a un error al parsearlos.
|
|
||||||
*-- Ejemplo:
|
|
||||||
*< FileMetadata: Type="V" Cpid="1252" Timestamp="1131901580" ID="1129207528" ObjRev="544" />
|
|
||||||
*< OLE: Nombre="frm_form.Pageframe1.Page1.Cnt_controles_h.Olecontrol1" Parent="frm_form.Pageframe1.Page1.Cnt_controles_h" ObjName="Olecontrol1" Checksum="1685567300" Value="0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPg...ADAP7AAAA==" />
|
|
||||||
*--------------------------------------------------------------------------------------------------------------
|
|
||||||
* PAR<41>METROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
|
|
||||||
* tcLineWithMetadata (!@ IN ) L<>nea con metadatos y un tag de metadatos
|
|
||||||
* taPropsAndValues (!@ OUT) Array a devolver con las propiedades y valores encontrados
|
|
||||||
* tnPropsAndValues_Count (!@ OUT) Cantidad de propiedades encontradas
|
|
||||||
* tcLeftTag (v! IN ) TAG de inicio de los metadatos
|
|
||||||
* tcRightTag (v! IN ) TAG de fin de los metadatos
|
|
||||||
*--------------------------------------------------------------------------------------------------------------
|
|
||||||
LPARAMETERS tcLineWithMetadata, taPropsAndValues, tnPropsAndValues_Count, tcLeftTag, tcRightTag
|
|
||||||
EXTERNAL ARRAY taPropsAndValues
|
|
||||||
|
|
||||||
LOCAL lcMetadatos, I, lnEqualSigns, lcNextVar, lcStr, lcVirtualMeta, lnPos1, lnPos2, lnLastPos, lnCantComillas
|
|
||||||
STORE '' TO lcVirtualMeta
|
|
||||||
STORE 0 TO lnPos1, lnPos2, lnLastPos, tnPropsAndValues_Count, I
|
|
||||||
|
|
||||||
lcMetadatos = ALLTRIM( STREXTRACT( tcLineWithMetadata, tcLeftTag, tcRightTag, 1, 1) )
|
|
||||||
lnCantComillas = OCCURS( '"', lcMetadatos )
|
|
||||||
|
|
||||||
IF lnCantComillas % 2 <> 0 && Valido que las comillas "" sean pares
|
|
||||||
*ERROR "Error de datos: No se puede parsear porque las comillas no son pares en la l<>nea [" + lcMetadatos + "]"
|
|
||||||
ERROR (TEXTMERGE(C_DATA_ERROR_CANT_PARSE_UNPAIRING_DOUBLE_QUOTES_LOC))
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
lnLastPos = 1
|
|
||||||
DIMENSION taPropsAndValues( lnCantComillas / 2, 2 )
|
|
||||||
|
|
||||||
*-------------------------------------------------------------------------------------
|
|
||||||
* IMPORTANTE!!
|
|
||||||
* ------------
|
|
||||||
* SI SE SEPARAN LAS IGUALDADES CON ESPACIOS, <20>STAS DEJAN DE RECONOCERSE!! (prop = "valor" en vez de prop="valor")
|
|
||||||
* TENER EN CUENTA AL GENERAR EL TEXTO O AL MODIFICARLO MANUALMENTE AL MERGEAR
|
|
||||||
*-------------------------------------------------------------------------------------
|
|
||||||
FOR I = 1 TO lnCantComillas STEP 2
|
|
||||||
tnPropsAndValues_Count = tnPropsAndValues_Count + 1
|
|
||||||
|
|
||||||
* Type="V" Cpid="1252"
|
|
||||||
* ^ ^ => Posiciones del par de comillas dobles
|
|
||||||
lnPos1 = AT( '"', lcMetadatos, I )
|
|
||||||
lnPos2 = AT( '"', lcMetadatos, I + 1 )
|
|
||||||
|
|
||||||
* Type="V" Cpid="1252"
|
|
||||||
* ^ ^ ^ => LastPos, lnPos1 y lnPos2
|
|
||||||
taPropsAndValues(tnPropsAndValues_Count,1) = ALLTRIM( GETWORDNUM( SUBSTR( lcMetadatos, lnLastPos, lnPos1 - lnLastPos ), 1, '=' ) )
|
|
||||||
taPropsAndValues(tnPropsAndValues_Count,2) = SUBSTR( lcMetadatos, lnPos1 + 1, lnPos2 - lnPos1 - 1 )
|
|
||||||
|
|
||||||
lnLastPos = lnPos2 + 1
|
|
||||||
ENDFOR
|
|
||||||
|
|
||||||
RETURN
|
|
||||||
ENDPROC
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE elTextoEvaluadoEsElTokenIndicado
|
|
||||||
LPARAMETERS tcLine, ta_ID_Bloques, tnLen_IDFinBQ, X, tnIniFin
|
|
||||||
LOCAL llEncontrado, lcWord
|
|
||||||
|
|
||||||
TRY
|
|
||||||
IF tnIniFin = 1
|
|
||||||
*-- TOKENS DE INICIO
|
|
||||||
IF UPPER( LEFT( tcLine, LEN(ta_ID_Bloques(X,1)) ) ) == ta_ID_Bloques(X,1)
|
|
||||||
*-- Evaluar casos especiales
|
|
||||||
lcWord = UPPER( ALLTRIM(GETWORDNUM(tcLine,1) ) )
|
|
||||||
|
|
||||||
IF ta_ID_Bloques(X,1) == 'TEXT' AND NOT lcWord == 'TEXT'
|
|
||||||
EXIT
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
llEncontrado = .T.
|
|
||||||
ENDIF
|
|
||||||
ELSE
|
|
||||||
*-- TOKENS DE FIN
|
|
||||||
IF LEFT( UPPER( tcLine ), tnLen_IDFinBQ ) == ta_ID_Bloques(X,2) && Fin de bloque encontrado (#ENDI, ENDTEXT, etc)
|
|
||||||
*-- Evaluar casos especiales
|
|
||||||
lcWord = UPPER( ALLTRIM(GETWORDNUM(tcLine,1) ) )
|
|
||||||
|
|
||||||
IF ta_ID_Bloques(X,2) == 'ENDT' AND NOT lcWord == LEFT( 'ENDTEXT', LEN(lcWord) )
|
|
||||||
EXIT
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
llEncontrado = .T.
|
|
||||||
ENDIF
|
|
||||||
ENDIF
|
|
||||||
ENDTRY
|
|
||||||
|
|
||||||
RETURN llEncontrado
|
|
||||||
ENDPROC
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE identificarBloquesDeExclusion
|
|
||||||
LPARAMETERS taCodeLines, tnCodeLines, ta_ID_Bloques, taBloquesExclusion, tnBloquesExclusion
|
|
||||||
* LOS BLOQUES DE EXCLUSI<53>N SON AQUELLOS QUE TIENEN TEXT/ENDTEXT OF #IF .F./#ENDIF Y SE USAN PARA NO BUSCAR
|
|
||||||
* INSTRUCCIONES COMO "DEFINE CLASS" O "PROCEDURE" EN LOS MISMOS.
|
|
||||||
*--------------------------------------------------------------------------------------------------------------
|
|
||||||
* PAR<41>METROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
|
|
||||||
* taCodeLines (!@ IN ) El array con las l<>neas del c<>digo de texto donde buscar
|
|
||||||
* tnCodeLines (@? IN ) Cantidad de l<>neas de c<>digo
|
|
||||||
* ta_ID_Bloques (@? IN ) Array de pares de identificadores (2 cols). Ej: '#IF .F.','#ENDI' ; 'TEXT','ENDTEXT' ; etc
|
|
||||||
* taBloquesExclusion (@? OUT) Array con las posiciones de los bloques (2 cols). Ej: 3,14 ; 23,58 ; etc
|
|
||||||
* tnBloquesExclusion (@? OUT) Cantidad de bloques de exclusi<73>n
|
|
||||||
*--------------------------------------------------------------------------------------------------------------
|
|
||||||
EXTERNAL ARRAY ta_ID_Bloques, taBloquesExclusion
|
|
||||||
|
|
||||||
TRY
|
|
||||||
LOCAL lnBloques, I, X, lnPrimerID, lnLen_IDFinBQ, lnID_Bloques_Count, lcWord, lnAnidamientos, lcLine, lcPrevLine
|
|
||||||
DIMENSION taBloquesExclusion(1,2)
|
|
||||||
STORE 0 TO tnBloquesExclusion, lnPrimerID, I, X, lnLen_IDFinBQ
|
|
||||||
|
|
||||||
IF tnCodeLines > 1
|
|
||||||
IF EMPTY(ta_ID_Bloques)
|
|
||||||
DIMENSION ta_ID_Bloques(2,2)
|
|
||||||
ta_ID_Bloques(1,1) = '#IF'
|
|
||||||
ta_ID_Bloques(1,2) = '#ENDI'
|
|
||||||
ta_ID_Bloques(2,1) = 'TEXT'
|
|
||||||
ta_ID_Bloques(2,2) = 'ENDT'
|
|
||||||
lnID_Bloques_Count = ALEN( ta_ID_Bloques, 1 )
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
*-- B<>squeda del ID de inicio de bloque
|
|
||||||
WITH THIS AS c_conversor_prg_a_bin OF 'FOXBIN2PRG.PRG'
|
|
||||||
FOR I = 1 TO tnCodeLines
|
|
||||||
* Reduzco los espacios. Ej: '#IF .F. && cmt' ==> '#IF .F.&&cmt'
|
|
||||||
lcLine = LTRIM( STRTRAN( STRTRAN( CHRTRAN( taCodeLines(I), CHR(9), ' ' ), ' ', ' ' ), ' ', ' ' ) )
|
|
||||||
|
|
||||||
IF .lineIsOnlyCommentAndNoMetadata( @lcLine )
|
|
||||||
LOOP
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
lnPrimerID = 0
|
|
||||||
|
|
||||||
FOR X = 1 TO lnID_Bloques_Count
|
|
||||||
lnLen_IDFinBQ = LEN( ta_ID_Bloques(X,2) )
|
|
||||||
IF .elTextoEvaluadoEsElTokenIndicado( @lcLine, @ta_ID_Bloques, lnLen_IDFinBQ, X, 1 )
|
|
||||||
lnPrimerID = X
|
|
||||||
lnAnidamientos = 1
|
|
||||||
EXIT
|
|
||||||
ENDIF
|
|
||||||
ENDFOR
|
|
||||||
|
|
||||||
IF lnPrimerID > 0 && Se ha identificado un ID de bloque excluyente
|
|
||||||
IF I > 1
|
|
||||||
*-- Analizo la l<>nea anterior para saber si termina con ";" y la actual es continuaci<63>n
|
|
||||||
lcPrevLine = taCodeLines(I-1)
|
|
||||||
.get_SeparatedLineAndComment( @lcPrevLine )
|
|
||||||
IF RIGHT( lcPrevLine,1 ) = ';' && Esta l<>nea es continuaci<63>n de la anterior
|
|
||||||
LOOP
|
|
||||||
ENDIF
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
tnBloquesExclusion = tnBloquesExclusion + 1
|
|
||||||
lnLen_IDFinBQ = LEN( ta_ID_Bloques(lnPrimerID,2) )
|
|
||||||
DIMENSION taBloquesExclusion(tnBloquesExclusion,2)
|
|
||||||
taBloquesExclusion(tnBloquesExclusion,1) = I
|
|
||||||
|
|
||||||
* B<>squeda del ID de fin de bloque
|
|
||||||
FOR I = I + 1 TO tnCodeLines
|
|
||||||
* Reduzco los espacios. Ej: '#IF .F. && cmt' ==> '#IF .F.&&cmt'
|
|
||||||
lcLine = LTRIM( STRTRAN( STRTRAN( CHRTRAN( taCodeLines(I), CHR(9), ' ' ), ' ', ' ' ), ' ', ' ' ) )
|
|
||||||
|
|
||||||
IF .lineIsOnlyCommentAndNoMetadata( @lcLine )
|
|
||||||
LOOP
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
DO CASE
|
|
||||||
CASE .elTextoEvaluadoEsElTokenIndicado( @lcLine, @ta_ID_Bloques, lnLen_IDFinBQ, X, 1 )
|
|
||||||
lnAnidamientos = lnAnidamientos + 1
|
|
||||||
|
|
||||||
CASE .elTextoEvaluadoEsElTokenIndicado( @lcLine, @ta_ID_Bloques, lnLen_IDFinBQ, X, 2 )
|
|
||||||
lnAnidamientos = lnAnidamientos - 1
|
|
||||||
|
|
||||||
IF lnAnidamientos = 0
|
|
||||||
taBloquesExclusion(tnBloquesExclusion,2) = I
|
|
||||||
EXIT
|
|
||||||
ENDIF
|
|
||||||
ENDCASE
|
|
||||||
ENDFOR
|
|
||||||
|
|
||||||
*-- Validaci<63>n
|
|
||||||
IF EMPTY(taBloquesExclusion(tnBloquesExclusion,2))
|
|
||||||
*ERROR 'No se ha encontrado el marcador de fin [' + ta_ID_Bloques(lnPrimerID,2) ;
|
|
||||||
+ '] que cierra al marcador de inicio [' + ta_ID_Bloques(lnPrimerID,1) ;
|
|
||||||
+ '] de la l<>nea ' + TRANSFORM(taBloquesExclusion(tnBloquesExclusion,1))
|
|
||||||
ERROR (TEXTMERGE(C_END_MARKER_NOT_FOUND_LOC))
|
|
||||||
ENDIF
|
|
||||||
ENDIF
|
|
||||||
ENDFOR
|
|
||||||
ENDWITH && THIS
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
CATCH TO loEx
|
|
||||||
IF THIS.l_Debug AND _VFP.STARTMODE = 0
|
|
||||||
SET STEP ON
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
THROW
|
|
||||||
|
|
||||||
ENDTRY
|
|
||||||
|
|
||||||
RETURN
|
|
||||||
ENDPROC
|
|
||||||
|
|
||||||
|
|
||||||
*******************************************************************************************************************
|
*******************************************************************************************************************
|
||||||
PROCEDURE analizarBloque_FoxBin2Prg
|
PROCEDURE analizarBloque_FoxBin2Prg
|
||||||
*------------------------------------------------------
|
*------------------------------------------------------
|
||||||
@@ -4750,7 +4768,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
|
|||||||
*******************************************************************************************************************
|
*******************************************************************************************************************
|
||||||
PROCEDURE analizarLineasDeProcedure
|
PROCEDURE analizarLineasDeProcedure
|
||||||
LPARAMETERS toClase, toObjeto, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto, tc_Comentario ;
|
LPARAMETERS toClase, toObjeto, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto, tc_Comentario ;
|
||||||
, taBloquesExclusion, tnBloquesExclusion
|
, taLineasExclusion, tnBloquesExclusion
|
||||||
EXTERNAL ARRAY taCodeLines
|
EXTERNAL ARRAY taCodeLines
|
||||||
|
|
||||||
#IF .F.
|
#IF .F.
|
||||||
@@ -4773,7 +4791,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
|
|||||||
FOR I = I + 1 TO tnCodeLines
|
FOR I = I + 1 TO tnCodeLines
|
||||||
.set_Line( @tcLine, @taCodeLines, I )
|
.set_Line( @tcLine, @taCodeLines, I )
|
||||||
|
|
||||||
IF NOT .lineaExcluida( I, tnBloquesExclusion, @taBloquesExclusion ) ;
|
IF NOT .lineaExcluida( I, tnBloquesExclusion, @taLineasExclusion ) ;
|
||||||
AND NOT .lineIsOnlyCommentAndNoMetadata( @tcLine, @tc_Comentario )
|
AND NOT .lineIsOnlyCommentAndNoMetadata( @tcLine, @tc_Comentario )
|
||||||
|
|
||||||
DO CASE
|
DO CASE
|
||||||
@@ -5053,9 +5071,9 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
|
|||||||
*******************************************************************************************************************
|
*******************************************************************************************************************
|
||||||
PROCEDURE analizarBloque_DEFINE_CLASS
|
PROCEDURE analizarBloque_DEFINE_CLASS
|
||||||
LPARAMETERS toModulo, toClase, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto ;
|
LPARAMETERS toModulo, toClase, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto ;
|
||||||
, taBloquesExclusion, tnBloquesExclusion, tc_Comentario
|
, taLineasExclusion, tnBloquesExclusion, tc_Comentario
|
||||||
|
|
||||||
EXTERNAL ARRAY taCodeLines, tnBloquesExclusion, taBloquesExclusion
|
EXTERNAL ARRAY taCodeLines, tnBloquesExclusion, taLineasExclusion
|
||||||
|
|
||||||
#IF .F.
|
#IF .F.
|
||||||
LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG'
|
LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG'
|
||||||
@@ -5107,7 +5125,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
|
|||||||
LOOP
|
LOOP
|
||||||
|
|
||||||
CASE .analizarBloque_PROCEDURE( @toModulo, @toClase, @loObjeto, @tcLine, @taCodeLines, @I, @tnCodeLines ;
|
CASE .analizarBloque_PROCEDURE( @toModulo, @toClase, @loObjeto, @tcLine, @taCodeLines, @I, @tnCodeLines ;
|
||||||
, @tcProcedureAbierto, @tc_Comentario, @taBloquesExclusion, @tnBloquesExclusion )
|
, @tcProcedureAbierto, @tc_Comentario, @taLineasExclusion, @tnBloquesExclusion )
|
||||||
*-- OJO: Esta se analiza primero a prop<6F>sito, solo porque no puede estar detr<74>s de PROTECTED y HIDDEN
|
*-- OJO: Esta se analiza primero a prop<6F>sito, solo porque no puede estar detr<74>s de PROTECTED y HIDDEN
|
||||||
STORE .T. TO llCLASSCOMMENTS_Completed ;
|
STORE .T. TO llCLASSCOMMENTS_Completed ;
|
||||||
, llCLASS_PROPERTY_Completed ;
|
, llCLASS_PROPERTY_Completed ;
|
||||||
@@ -5463,7 +5481,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
|
|||||||
*******************************************************************************************************************
|
*******************************************************************************************************************
|
||||||
PROCEDURE analizarBloque_PROCEDURE
|
PROCEDURE analizarBloque_PROCEDURE
|
||||||
LPARAMETERS toModulo, toClase, toObjeto, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto ;
|
LPARAMETERS toModulo, toClase, toObjeto, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto ;
|
||||||
, tc_Comentario, taBloquesExclusion, tnBloquesExclusion
|
, tc_Comentario, taLineasExclusion, tnBloquesExclusion
|
||||||
|
|
||||||
#IF .F.
|
#IF .F.
|
||||||
LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG'
|
LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG'
|
||||||
@@ -5498,7 +5516,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
|
|||||||
IF llBloqueEncontrado
|
IF llBloqueEncontrado
|
||||||
*-- Eval<61>o todo el contenido del PROCEDURE
|
*-- Eval<61>o todo el contenido del PROCEDURE
|
||||||
THIS.analizarLineasDeProcedure( @toClase, @toObjeto, @tcLine, @taCodeLines, @I, @tnCodeLines, @tcProcedureAbierto ;
|
THIS.analizarLineasDeProcedure( @toClase, @toObjeto, @tcLine, @taCodeLines, @I, @tnCodeLines, @tcProcedureAbierto ;
|
||||||
, @tc_Comentario, @taBloquesExclusion, @tnBloquesExclusion )
|
, @tc_Comentario, @taLineasExclusion, @tnBloquesExclusion )
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
RETURN llBloqueEncontrado
|
RETURN llBloqueEncontrado
|
||||||
@@ -5601,18 +5619,18 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
|
|||||||
PROCEDURE identificarBloquesDeCodigo
|
PROCEDURE identificarBloquesDeCodigo
|
||||||
*--------------------------------------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------------------------------------
|
||||||
* PAR<41>METROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
|
* PAR<41>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
|
* taCodeLines (@! IN ) El array con las l<>neas del c<>digo donde buscar
|
||||||
* tnCodeLines (!@ IN ) Cantidad de l<>neas de c<>digo
|
* tnCodeLines (@! IN ) Cantidad de l<>neas de c<>digo
|
||||||
* taBloquesExclusion (!@ IN ) Array con las posiciones de inicio/fin de los bloques de exclusion
|
* taLineasExclusion (@! IN ) Array unidimensional con un .T. o .F. seg<65>n la l<>nea sea de exclusi<EFBFBD>n o no
|
||||||
* tnBloquesExclusion (!@ IN ) Cantidad de bloques de exclusi<73>n
|
* tnBloquesExclusion (@! IN ) Cantidad de bloques de exclusi<73>n
|
||||||
* toModulo (@? OUT) Objeto con toda la informaci<63>n del m<>dulo analizado
|
* toModulo (@? OUT) Objeto con toda la informaci<63>n del m<>dulo analizado
|
||||||
*
|
*
|
||||||
* NOTA:
|
* NOTA:
|
||||||
* Como identificador se usa el nombre de clase o de procedimiento, seg<65>n corresponda.
|
* Como identificador se usa el nombre de clase o de procedimiento, seg<65>n corresponda.
|
||||||
*--------------------------------------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------------------------------------
|
||||||
LPARAMETERS taCodeLines, tnCodeLines, taBloquesExclusion, tnBloquesExclusion, toModulo
|
LPARAMETERS taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toModulo
|
||||||
|
|
||||||
EXTERNAL ARRAY taCodeLines, taBloquesExclusion
|
EXTERNAL ARRAY taCodeLines, taLineasExclusion
|
||||||
|
|
||||||
#IF .F.
|
#IF .F.
|
||||||
LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG'
|
LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG'
|
||||||
@@ -5641,7 +5659,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
|
|||||||
.set_Line( @lcLine, @taCodeLines, I )
|
.set_Line( @lcLine, @taCodeLines, I )
|
||||||
|
|
||||||
DO CASE
|
DO CASE
|
||||||
CASE .lineaExcluida( I, tnBloquesExclusion, @taBloquesExclusion ) ;
|
CASE .lineaExcluida( I, tnBloquesExclusion, @taLineasExclusion ) ;
|
||||||
OR .lineIsOnlyCommentAndNoMetadata( @lcLine, @lc_Comentario ) && Excluida, vac<61>a o solo Comentarios
|
OR .lineIsOnlyCommentAndNoMetadata( @lcLine, @lc_Comentario ) && Excluida, vac<61>a o solo Comentarios
|
||||||
|
|
||||||
CASE NOT llFoxBin2Prg_Completed AND .analizarBloque_FoxBin2Prg( toModulo, @lcLine, @taCodeLines, @I, tnCodeLines )
|
CASE NOT llFoxBin2Prg_Completed AND .analizarBloque_FoxBin2Prg( toModulo, @lcLine, @taCodeLines, @I, tnCodeLines )
|
||||||
@@ -5660,7 +5678,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
|
|||||||
llINCLUDE_SCX_Completed = .T.
|
llINCLUDE_SCX_Completed = .T.
|
||||||
|
|
||||||
CASE .analizarBloque_DEFINE_CLASS( @toModulo, @loClase, @lcLine, @taCodeLines, @I, tnCodeLines ;
|
CASE .analizarBloque_DEFINE_CLASS( @toModulo, @loClase, @lcLine, @taCodeLines, @I, tnCodeLines ;
|
||||||
, @lcProcedureAbierto, @taBloquesExclusion, @tnBloquesExclusion, @lc_Comentario )
|
, @lcProcedureAbierto, @taLineasExclusion, @tnBloquesExclusion, @lc_Comentario )
|
||||||
*-- Puede haber varias
|
*-- Puede haber varias
|
||||||
|
|
||||||
ENDCASE
|
ENDCASE
|
||||||
@@ -5715,7 +5733,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin
|
|||||||
|
|
||||||
TRY
|
TRY
|
||||||
LOCAL lnCodError, lcLine, laCodeLines(1), lnCodeLines ;
|
LOCAL lnCodError, lcLine, laCodeLines(1), lnCodeLines ;
|
||||||
, laBloquesExclusion(1,2), lnBloquesExclusion, I
|
, laLineasExclusion(1), lnBloquesExclusion, I
|
||||||
|
|
||||||
WITH THIS AS c_conversor_prg_a_vcx OF 'FOXBIN2PRG.PRG'
|
WITH THIS AS c_conversor_prg_a_vcx OF 'FOXBIN2PRG.PRG'
|
||||||
STORE 0 TO lnCodError, lnCodeLines
|
STORE 0 TO lnCodError, lnCodeLines
|
||||||
@@ -5731,10 +5749,10 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin
|
|||||||
.createClasslib()
|
.createClasslib()
|
||||||
|
|
||||||
*-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF
|
*-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF
|
||||||
.identificarBloquesDeExclusion( @laCodeLines, lnCodeLines, .F., @laBloquesExclusion, @lnBloquesExclusion )
|
.identificarBloquesDeExclusion( @laCodeLines, lnCodeLines, .F., @laLineasExclusion, @lnBloquesExclusion )
|
||||||
|
|
||||||
*-- Identifico el inicio/fin de bloque, definici<63>n, cabecera y cuerpo de cada clase
|
*-- Identifico el inicio/fin de bloque, definici<63>n, cabecera y cuerpo de cada clase
|
||||||
.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toModulo )
|
.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo )
|
||||||
|
|
||||||
.escribirArchivoBin( @toModulo, toFoxBin2Prg )
|
.escribirArchivoBin( @toModulo, toFoxBin2Prg )
|
||||||
ENDWITH && THIS
|
ENDWITH && THIS
|
||||||
@@ -5749,7 +5767,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin
|
|||||||
|
|
||||||
FINALLY
|
FINALLY
|
||||||
USE IN (SELECT("TABLABIN"))
|
USE IN (SELECT("TABLABIN"))
|
||||||
RELEASE lnCodError, lcLine, laCodeLines, lnCodeLines, laBloquesExclusion, lnBloquesExclusion, I
|
RELEASE lnCodError, lcLine, laCodeLines, lnCodeLines, laLineasExclusion, lnBloquesExclusion, I
|
||||||
ENDTRY
|
ENDTRY
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
@@ -6019,7 +6037,7 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin
|
|||||||
|
|
||||||
TRY
|
TRY
|
||||||
LOCAL lnCodError, laCodeLines(1), lnCodeLines, lnFB2P_Version ;
|
LOCAL lnCodError, laCodeLines(1), lnCodeLines, lnFB2P_Version ;
|
||||||
, laBloquesExclusion(1,2), lnBloquesExclusion, I
|
, laLineasExclusion(1), lnBloquesExclusion, I
|
||||||
|
|
||||||
WITH THIS AS c_conversor_prg_a_scx OF 'FOXBIN2PRG.PRG'
|
WITH THIS AS c_conversor_prg_a_scx OF 'FOXBIN2PRG.PRG'
|
||||||
STORE 0 TO lnCodError, lnCodeLines, lnFB2P_Version
|
STORE 0 TO lnCodError, lnCodeLines, lnFB2P_Version
|
||||||
@@ -6034,10 +6052,10 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin
|
|||||||
.createForm()
|
.createForm()
|
||||||
|
|
||||||
*-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF
|
*-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF
|
||||||
.identificarBloquesDeExclusion( @laCodeLines, lnCodeLines, .F., @laBloquesExclusion, @lnBloquesExclusion )
|
.identificarBloquesDeExclusion( @laCodeLines, lnCodeLines, .F., @laLineasExclusion, @lnBloquesExclusion )
|
||||||
|
|
||||||
*-- Identifico el inicio/fin de bloque, definici<63>n, cabecera y cuerpo de cada clase
|
*-- Identifico el inicio/fin de bloque, definici<63>n, cabecera y cuerpo de cada clase
|
||||||
.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toModulo )
|
.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo )
|
||||||
|
|
||||||
.escribirArchivoBin( @toModulo, toFoxBin2Prg )
|
.escribirArchivoBin( @toModulo, toFoxBin2Prg )
|
||||||
ENDWITH && THIS
|
ENDWITH && THIS
|
||||||
@@ -6328,7 +6346,7 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin
|
|||||||
#ENDIF
|
#ENDIF
|
||||||
|
|
||||||
TRY
|
TRY
|
||||||
LOCAL laCodeLines(1), lnCodeLines, laBloquesExclusion(1,2), lnBloquesExclusion, I
|
LOCAL laCodeLines(1), lnCodeLines, laLineasExclusion(1), lnBloquesExclusion, I
|
||||||
|
|
||||||
WITH THIS AS c_conversor_prg_a_pjx OF 'FOXBIN2PRG.PRG'
|
WITH THIS AS c_conversor_prg_a_pjx OF 'FOXBIN2PRG.PRG'
|
||||||
STORE 0 TO lnCodeLines
|
STORE 0 TO lnCodeLines
|
||||||
@@ -6343,10 +6361,10 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin
|
|||||||
.createProject()
|
.createProject()
|
||||||
|
|
||||||
*-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF
|
*-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF
|
||||||
*.identificarBloquesDeExclusion( @laCodeLines, .F., @laBloquesExclusion, @lnBloquesExclusion )
|
*.identificarBloquesDeExclusion( @laCodeLines, .F., @laLineasExclusion, @lnBloquesExclusion )
|
||||||
|
|
||||||
*-- Identifico el inicio/fin de bloque, definici<63>n, cabecera y cuerpo de cada clase
|
*-- Identifico el inicio/fin de bloque, definici<63>n, cabecera y cuerpo de cada clase
|
||||||
.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toProject )
|
.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toProject )
|
||||||
|
|
||||||
.escribirArchivoBin( @toProject, toFoxBin2Prg )
|
.escribirArchivoBin( @toProject, toFoxBin2Prg )
|
||||||
ENDWITH && THIS
|
ENDWITH && THIS
|
||||||
@@ -6361,7 +6379,7 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin
|
|||||||
|
|
||||||
FINALLY
|
FINALLY
|
||||||
USE IN (SELECT("TABLABIN"))
|
USE IN (SELECT("TABLABIN"))
|
||||||
RELEASE laCodeLines, lnCodeLines, laBloquesExclusion, lnBloquesExclusion, I
|
RELEASE laCodeLines, lnCodeLines, laLineasExclusion, lnBloquesExclusion, I
|
||||||
ENDTRY
|
ENDTRY
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
@@ -6495,19 +6513,19 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin
|
|||||||
|
|
||||||
*******************************************************************************************************************
|
*******************************************************************************************************************
|
||||||
PROCEDURE identificarBloquesDeCodigo
|
PROCEDURE identificarBloquesDeCodigo
|
||||||
LPARAMETERS taCodeLines, tnCodeLines, taBloquesExclusion, tnBloquesExclusion, toProject
|
LPARAMETERS taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toProject
|
||||||
*--------------------------------------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------------------------------------
|
||||||
* PAR<41>METROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
|
* PAR<41>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
|
* taCodeLines (@! IN ) El array con las l<>neas del c<>digo donde buscar
|
||||||
* tnCodeLines (!@ IN ) Cantidad de l<>neas de c<>digo
|
* tnCodeLines (@! IN ) Cantidad de l<>neas de c<>digo
|
||||||
* taBloquesExclusion (!@ IN ) Array con las posiciones de inicio/fin de los bloques de exclusion
|
* taLineasExclusion (@! IN ) Array unidimensional con un .T. o .F. seg<65>n la l<>nea sea de exclusi<EFBFBD>n o no
|
||||||
* tnBloquesExclusion (!@ IN ) Cantidad de bloques de exclusi<73>n
|
* tnBloquesExclusion (@! IN ) Cantidad de bloques de exclusi<73>n
|
||||||
* toProject (@? OUT) Objeto con toda la informaci<63>n del proyecto analizado
|
* toProject (@? OUT) Objeto con toda la informaci<63>n del proyecto analizado
|
||||||
*
|
*
|
||||||
* NOTA:
|
* NOTA:
|
||||||
* Como identificador se usa el nombre de clase o de procedimiento, seg<65>n corresponda.
|
* Como identificador se usa el nombre de clase o de procedimiento, seg<65>n corresponda.
|
||||||
*--------------------------------------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------------------------------------
|
||||||
EXTERNAL ARRAY taCodeLines, taBloquesExclusion
|
EXTERNAL ARRAY taCodeLines, taLineasExclusion
|
||||||
|
|
||||||
#IF .F.
|
#IF .F.
|
||||||
LOCAL toProject AS CL_PROJECT OF 'FOXBIN2PRG.PRG'
|
LOCAL toProject AS CL_PROJECT OF 'FOXBIN2PRG.PRG'
|
||||||
@@ -7115,7 +7133,7 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin
|
|||||||
|
|
||||||
TRY
|
TRY
|
||||||
LOCAL lnCodError, loEx AS EXCEPTION, laCodeLines(1), lnCodeLines, lnFB2P_Version ;
|
LOCAL lnCodError, loEx AS EXCEPTION, laCodeLines(1), lnCodeLines, lnFB2P_Version ;
|
||||||
, laBloquesExclusion(1,2), lnBloquesExclusion, I
|
, laLineasExclusion(1), lnBloquesExclusion, I
|
||||||
|
|
||||||
WITH THIS AS c_conversor_prg_a_frx OF 'FOXBIN2PRG.PRG'
|
WITH THIS AS c_conversor_prg_a_frx OF 'FOXBIN2PRG.PRG'
|
||||||
STORE 0 TO lnCodError, lnCodeLines
|
STORE 0 TO lnCodError, lnCodeLines
|
||||||
@@ -7130,7 +7148,7 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin
|
|||||||
.createReport()
|
.createReport()
|
||||||
|
|
||||||
*-- Identifico el inicio/fin de bloque, definici<63>n, cabecera y cuerpo del reporte
|
*-- Identifico el inicio/fin de bloque, definici<63>n, cabecera y cuerpo del reporte
|
||||||
.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toReport )
|
.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toReport )
|
||||||
|
|
||||||
.escribirArchivoBin( @toReport, toFoxBin2Prg )
|
.escribirArchivoBin( @toReport, toFoxBin2Prg )
|
||||||
ENDWITH && THIS
|
ENDWITH && THIS
|
||||||
@@ -7249,19 +7267,19 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin
|
|||||||
|
|
||||||
*******************************************************************************************************************
|
*******************************************************************************************************************
|
||||||
PROCEDURE identificarBloquesDeCodigo
|
PROCEDURE identificarBloquesDeCodigo
|
||||||
LPARAMETERS taCodeLines, tnCodeLines, taBloquesExclusion, tnBloquesExclusion, toReport
|
LPARAMETERS taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toReport
|
||||||
*--------------------------------------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------------------------------------
|
||||||
* PAR<41>METROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
|
* PAR<41>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
|
* taCodeLines (!@ IN ) El array con las l<>neas del c<>digo donde buscar
|
||||||
* tnCodeLines (!@ IN ) Cantidad de l<>neas de c<>digo
|
* tnCodeLines (!@ IN ) Cantidad de l<>neas de c<>digo
|
||||||
* taBloquesExclusion (@? IN ) Sin uso
|
* taLineasExclusion (@! IN ) Array unidimensional con un .T. o .F. seg<65>n la l<>nea sea de exclusi<73>n o no
|
||||||
* tnBloquesExclusion (@? IN ) Sin uso
|
* tnBloquesExclusion (@? IN ) Cantidad de bloques de exclusion
|
||||||
* toReport (@? OUT) Objeto con toda la informaci<63>n del reporte analizado
|
* toReport (@? OUT) Objeto con toda la informaci<63>n del reporte analizado
|
||||||
*
|
*
|
||||||
* NOTA:
|
* NOTA:
|
||||||
* Como identificador se usa el nombre de clase o de procedimiento, seg<65>n corresponda.
|
* Como identificador se usa el nombre de clase o de procedimiento, seg<65>n corresponda.
|
||||||
*--------------------------------------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------------------------------------
|
||||||
EXTERNAL ARRAY taCodeLines, taBloquesExclusion
|
EXTERNAL ARRAY taCodeLines, taLineasExclusion
|
||||||
|
|
||||||
#IF .F.
|
#IF .F.
|
||||||
LOCAL toReport AS CL_REPORT OF 'FOXBIN2PRG.PRG'
|
LOCAL toReport AS CL_REPORT OF 'FOXBIN2PRG.PRG'
|
||||||
@@ -7542,7 +7560,7 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin
|
|||||||
#ENDIF
|
#ENDIF
|
||||||
|
|
||||||
TRY
|
TRY
|
||||||
LOCAL lnCodError, loEx AS EXCEPTION, laCodeLines(1), lnCodeLines, laBloquesExclusion(1,2), lnBloquesExclusion, I
|
LOCAL lnCodError, loEx AS EXCEPTION, laCodeLines(1), lnCodeLines, laLineasExclusion(1), lnBloquesExclusion, I
|
||||||
STORE 0 TO lnCodError, lnCodeLines
|
STORE 0 TO lnCodError, lnCodeLines
|
||||||
|
|
||||||
WITH THIS AS c_conversor_prg_a_dbf OF 'FOXBIN2PRG.PRG'
|
WITH THIS AS c_conversor_prg_a_dbf OF 'FOXBIN2PRG.PRG'
|
||||||
@@ -7552,7 +7570,7 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin
|
|||||||
toFoxBin2Prg.doBackup( .F., .T., '', '', '' )
|
toFoxBin2Prg.doBackup( .F., .T., '', '', '' )
|
||||||
|
|
||||||
*-- Identifico el inicio/fin de bloque, definici<63>n, cabecera y cuerpo del reporte
|
*-- Identifico el inicio/fin de bloque, definici<63>n, cabecera y cuerpo del reporte
|
||||||
.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toTable )
|
.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toTable )
|
||||||
|
|
||||||
.escribirArchivoBin( @toTable, @toFoxBin2Prg )
|
.escribirArchivoBin( @toTable, @toFoxBin2Prg )
|
||||||
ENDWITH && THIS
|
ENDWITH && THIS
|
||||||
@@ -7737,12 +7755,12 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin
|
|||||||
* PAR<41>METROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
|
* PAR<41>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
|
* taCodeLines (!@ IN ) El array con las l<>neas del c<>digo donde buscar
|
||||||
* tnCodeLines (!@ IN ) Cantidad de l<>neas de c<>digo
|
* tnCodeLines (!@ IN ) Cantidad de l<>neas de c<>digo
|
||||||
* taBloquesExclusion (@? IN ) Sin uso
|
* taLineasExclusion (@! IN ) Array unidimensional con un .T. o .F. seg<65>n la l<>nea sea de exclusi<73>n o no
|
||||||
* tnBloquesExclusion (@? IN ) Sin uso
|
* tnBloquesExclusion (@? IN ) Sin uso
|
||||||
* toTable (@? OUT) Objeto con toda la informaci<63>n de la tabla analizada
|
* toTable (@? OUT) Objeto con toda la informaci<63>n de la tabla analizada
|
||||||
*--------------------------------------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------------------------------------
|
||||||
LPARAMETERS taCodeLines, tnCodeLines, taBloquesExclusion, tnBloquesExclusion, toTable
|
LPARAMETERS taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toTable
|
||||||
EXTERNAL ARRAY taCodeLines, taBloquesExclusion
|
EXTERNAL ARRAY taCodeLines, taLineasExclusion
|
||||||
|
|
||||||
#IF .F.
|
#IF .F.
|
||||||
LOCAL toTable AS CL_DBF_TABLE OF 'FOXBIN2PRG.PRG'
|
LOCAL toTable AS CL_DBF_TABLE OF 'FOXBIN2PRG.PRG'
|
||||||
@@ -7827,7 +7845,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin
|
|||||||
|
|
||||||
TRY
|
TRY
|
||||||
LOCAL lnCodError, loEx AS EXCEPTION, loReg, lcLine, laCodeLines(1), lnCodeLines ;
|
LOCAL lnCodError, loEx AS EXCEPTION, loReg, lcLine, laCodeLines(1), lnCodeLines ;
|
||||||
, laBloquesExclusion(1,2), lnBloquesExclusion, I
|
, laLineasExclusion(1), lnBloquesExclusion, I
|
||||||
STORE 0 TO lnCodError, lnCodeLines
|
STORE 0 TO lnCodError, lnCodeLines
|
||||||
STORE '' TO lcLine
|
STORE '' TO lcLine
|
||||||
STORE NULL TO loReg, toModulo
|
STORE NULL TO loReg, toModulo
|
||||||
@@ -7842,7 +7860,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin
|
|||||||
*.createTable()
|
*.createTable()
|
||||||
|
|
||||||
*-- Identifico el inicio/fin de bloque, definici<63>n, cabecera y cuerpo del reporte
|
*-- Identifico el inicio/fin de bloque, definici<63>n, cabecera y cuerpo del reporte
|
||||||
.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toDatabase )
|
.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toDatabase )
|
||||||
|
|
||||||
.escribirArchivoBin( @toDatabase, toFoxBin2Prg )
|
.escribirArchivoBin( @toDatabase, toFoxBin2Prg )
|
||||||
ENDWITH && THIS
|
ENDWITH && THIS
|
||||||
@@ -7910,15 +7928,15 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin
|
|||||||
* PAR<41>METROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
|
* PAR<41>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
|
* taCodeLines (!@ IN ) El array con las l<>neas del c<>digo donde buscar
|
||||||
* tnCodeLines (!@ IN ) Cantidad de l<>neas de c<>digo
|
* tnCodeLines (!@ IN ) Cantidad de l<>neas de c<>digo
|
||||||
* taBloquesExclusion (@? IN ) Sin uso
|
* taLineasExclusion (@! IN ) Array unidimensional con un .T. o .F. seg<65>n la l<>nea sea de exclusi<73>n o no
|
||||||
* tnBloquesExclusion (@? IN ) Sin uso
|
* tnBloquesExclusion (@? IN ) Sin uso
|
||||||
* toDatabase (@? OUT) Objeto con toda la informaci<63>n de la base de datos analizada
|
* toDatabase (@? OUT) Objeto con toda la informaci<63>n de la base de datos analizada
|
||||||
*
|
*
|
||||||
* NOTA:
|
* NOTA:
|
||||||
* Como identificador se usa el nombre de clase o de procedimiento, seg<65>n corresponda.
|
* Como identificador se usa el nombre de clase o de procedimiento, seg<65>n corresponda.
|
||||||
*--------------------------------------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------------------------------------
|
||||||
LPARAMETERS taCodeLines, tnCodeLines, taBloquesExclusion, tnBloquesExclusion, toDatabase
|
LPARAMETERS taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toDatabase
|
||||||
EXTERNAL ARRAY taCodeLines, taBloquesExclusion
|
EXTERNAL ARRAY taCodeLines, taLineasExclusion
|
||||||
|
|
||||||
#IF .F.
|
#IF .F.
|
||||||
LOCAL toDatabase AS CL_DBC OF 'FOXBIN2PRG.PRG'
|
LOCAL toDatabase AS CL_DBC OF 'FOXBIN2PRG.PRG'
|
||||||
@@ -8002,7 +8020,7 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin
|
|||||||
|
|
||||||
TRY
|
TRY
|
||||||
LOCAL lnCodError, loEx AS EXCEPTION, loReg, lcLine, laCodeLines(1), lnCodeLines ;
|
LOCAL lnCodError, loEx AS EXCEPTION, loReg, lcLine, laCodeLines(1), lnCodeLines ;
|
||||||
, laBloquesExclusion(1,2), lnBloquesExclusion
|
, laLineasExclusion(1), lnBloquesExclusion
|
||||||
STORE 0 TO lnCodError, lnCodeLines
|
STORE 0 TO lnCodError, lnCodeLines
|
||||||
STORE '' TO lcLine
|
STORE '' TO lcLine
|
||||||
|
|
||||||
@@ -8016,7 +8034,7 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin
|
|||||||
.createMenu()
|
.createMenu()
|
||||||
|
|
||||||
*-- Identifico el inicio/fin de bloque, definici<63>n, cabecera y cuerpo del reporte
|
*-- Identifico el inicio/fin de bloque, definici<63>n, cabecera y cuerpo del reporte
|
||||||
.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toMenu )
|
.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toMenu )
|
||||||
|
|
||||||
.escribirArchivoBin( @toMenu )
|
.escribirArchivoBin( @toMenu )
|
||||||
ENDWITH && THIS
|
ENDWITH && THIS
|
||||||
@@ -8044,15 +8062,15 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin
|
|||||||
* PAR<41>METROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
|
* PAR<41>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
|
* taCodeLines (!@ IN ) El array con las l<>neas del c<>digo donde buscar
|
||||||
* tnCodeLines (!@ IN ) Cantidad de l<>neas de c<>digo
|
* tnCodeLines (!@ IN ) Cantidad de l<>neas de c<>digo
|
||||||
* taBloquesExclusion (@? IN ) Sin uso
|
* taLineasExclusion (@! IN ) Array unidimensional con un .T. o .F. seg<65>n la l<>nea sea de exclusi<73>n o no
|
||||||
* tnBloquesExclusion (@? IN ) Sin uso
|
* tnBloquesExclusion (@? IN ) Sin uso
|
||||||
* toMenu (@? OUT) Objeto con toda la informaci<63>n del men<65> analizado
|
* toMenu (@? OUT) Objeto con toda la informaci<63>n del men<65> analizado
|
||||||
*
|
*
|
||||||
* NOTA:
|
* NOTA:
|
||||||
* Como identificador se usa el nombre de clase o de procedimiento, seg<65>n corresponda.
|
* Como identificador se usa el nombre de clase o de procedimiento, seg<65>n corresponda.
|
||||||
*--------------------------------------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------------------------------------
|
||||||
LPARAMETERS taCodeLines, tnCodeLines, taBloquesExclusion, tnBloquesExclusion, toMenu
|
LPARAMETERS taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toMenu
|
||||||
EXTERNAL ARRAY taCodeLines, taBloquesExclusion
|
EXTERNAL ARRAY taCodeLines, taLineasExclusion
|
||||||
|
|
||||||
#IF .F.
|
#IF .F.
|
||||||
LOCAL toMenu AS CL_MENU OF 'FOXBIN2PRG.PRG'
|
LOCAL toMenu AS CL_MENU OF 'FOXBIN2PRG.PRG'
|
||||||
@@ -8471,9 +8489,17 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
|
|||||||
ASORT( taProtected, 1, -1, 0, 1 )
|
ASORT( taProtected, 1, -1, 0, 1 )
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
FOR I = 1 TO tnProtected_Count
|
FOR I = tnProtected_Count TO 1 STEP -1
|
||||||
tcSortedMemo = tcSortedMemo + taProtected(I) + CR_LF
|
*-- El ASCAN es para evitar valores repetidos, que se eliminar<61>n. v1.19.29
|
||||||
|
IF ASCAN( taProtected, taProtected(I), 1, -1, 0,1+2+4 ) = I
|
||||||
|
tcSortedMemo = tcSortedMemo + LOWER(taProtected(I)) + CR_LF
|
||||||
|
ELSE
|
||||||
|
ADEL( taProtected, I )
|
||||||
|
tnProtected_Count = tnProtected_Count - 1
|
||||||
|
ENDIF
|
||||||
ENDFOR
|
ENDFOR
|
||||||
|
|
||||||
|
DIMENSION taProtected(tnProtected_Count)
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
@@ -8621,8 +8647,9 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
|
|||||||
*-- taCode[1]
|
*-- taCode[1]
|
||||||
*-- Bloque de c<>digo del m<>todo en su posici<63>n original
|
*-- Bloque de c<>digo del m<>todo en su posici<63>n original
|
||||||
TRY
|
TRY
|
||||||
LOCAL lnLineCount, laLine(1), I, lnTextNodes, tcSorted, lnProtectedLine, lcMethod, lnLine_Len, lcLine, llProcOpen
|
LOCAL lnLineCount, laLine(1), I, lnTextNodes, tcSorted, lnProtectedLine, lcMethod, lnLine_Len, lcLine, llProcOpen ;
|
||||||
LOCAL loEx AS EXCEPTION
|
, laLineasExclusion(1), lnBloquesExclusion ;
|
||||||
|
, loEx AS EXCEPTION
|
||||||
DIMENSION taMethods(1,3)
|
DIMENSION taMethods(1,3)
|
||||||
STORE '' TO taMethods, tcSorted, taCode
|
STORE '' TO taMethods, tcSorted, taCode
|
||||||
tnMethodCount = 0
|
tnMethodCount = 0
|
||||||
@@ -8667,6 +8694,9 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
|
|||||||
ENDIF
|
ENDIF
|
||||||
ENDFOR
|
ENDFOR
|
||||||
|
|
||||||
|
*-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF
|
||||||
|
THIS.identificarBloquesDeExclusion( @laLine, lnLineCount, .F., @laLineasExclusion, @lnBloquesExclusion )
|
||||||
|
|
||||||
*-- Analyze and count line methods, get method names and consolidate block code
|
*-- Analyze and count line methods, get method names and consolidate block code
|
||||||
FOR I = 1 TO lnLineCount
|
FOR I = 1 TO lnLineCount
|
||||||
IF toFoxBin2Prg.l_DropNullCharsFromCode
|
IF toFoxBin2Prg.l_DropNullCharsFromCode
|
||||||
@@ -8676,35 +8706,9 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
|
|||||||
lnLine_Len = LEN( laLine(I) )
|
lnLine_Len = LEN( laLine(I) )
|
||||||
|
|
||||||
DO CASE
|
DO CASE
|
||||||
CASE UPPER( LEFT(laLine(I), 4) ) == 'TEXT'
|
CASE laLineasExclusion(I)
|
||||||
lcLine = UPPER( CHRTRAN( laLine(I) , '&'+CHR(9)+CHR(0), ' ') ) + ' '
|
|
||||||
IF lnLine_Len >= 4 AND LEFT(lcLine,5) == 'TEXT '
|
|
||||||
*-- Es el comando TEXT
|
|
||||||
ELSE
|
|
||||||
*-- Es otra cosa (variable, etc)
|
|
||||||
taCode(tnMethodCount) = taCode(tnMethodCount) + laLine(I) + CR_LF
|
|
||||||
LOOP
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
lnTextNodes = lnTextNodes + 1
|
|
||||||
taCode(tnMethodCount) = taCode(tnMethodCount) + laLine(I) + CR_LF
|
taCode(tnMethodCount) = taCode(tnMethodCount) + laLine(I) + CR_LF
|
||||||
|
|
||||||
CASE UPPER( LEFT(laLine(I), 4) ) == 'ENDT'
|
|
||||||
lcLine = UPPER( CHRTRAN( laLine(I) , '&'+CHR(9)+CHR(0), ' ') ) + ' '
|
|
||||||
IF lnLine_Len >= 7 AND LEFT(lcLine,8) == 'ENDTEXT ' ;
|
|
||||||
OR lnLine_Len >= 6 AND LEFT(lcLine,7) == 'ENDTEX ' ;
|
|
||||||
OR lnLine_Len >= 5 AND LEFT(lcLine,6) == 'ENDTE ' ;
|
|
||||||
OR lnLine_Len >= 4 AND LEFT(lcLine,5) == 'ENDT '
|
|
||||||
*-- Es el comando ENDTEXT
|
|
||||||
ELSE
|
|
||||||
*-- Es otra cosa (variable, etc)
|
|
||||||
taCode(tnMethodCount) = taCode(tnMethodCount) + laLine(I) + CR_LF
|
|
||||||
LOOP
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
lnTextNodes = lnTextNodes - 1
|
|
||||||
taCode(tnMethodCount) = taCode(tnMethodCount) + laLine(I) + CR_LF
|
|
||||||
|
|
||||||
CASE lnTextNodes = 0 AND UPPER( LEFT(laLine(I), 10) ) == 'PROCEDURE '
|
CASE lnTextNodes = 0 AND UPPER( LEFT(laLine(I), 10) ) == 'PROCEDURE '
|
||||||
tnMethodCount = tnMethodCount + 1
|
tnMethodCount = tnMethodCount + 1
|
||||||
DIMENSION taMethods(tnMethodCount, 3), taCode(tnMethodCount)
|
DIMENSION taMethods(tnMethodCount, 3), taCode(tnMethodCount)
|
||||||
|
|||||||
Reference in New Issue
Block a user