Changeset: 238 fdbozzo - 13/05/2014 23:05:03:

- La detección incorrecta de PROCEDURE/ENDPROC/TEXT/ENDTEXT puede causar pérdida de algunos métodos en determinadas circunstancias (Andres Mendoza)
This commit is contained in:
fdbozzo
2014-05-14 00:44:57 +02:00
parent 03e4452dba
commit a655b38977
4 changed files with 198 additions and 165 deletions

View File

@@ -26,7 +26,7 @@ _LegalTrademark = "Creative Commons 4: Reconocimiento - CompartirIgual (by-sa):
_ProductName = " FOXBIN2PRG v1.19.22" _ProductName = " FOXBIN2PRG v1.19.22"
_MajorVer = "1" _MajorVer = "1"
_MinorVer = "19" _MinorVer = "19"
_Revision = " 321" _Revision = " 325"
_LanguageID = "1034" _LanguageID = "1034"
_AutoIncrement = "1" _AutoIncrement = "1"
*</DevInfo> *</DevInfo>
@@ -52,6 +52,7 @@ loProject = _VFP.Projects('foxbin2prg.pjx')
WITH loProject.FILES WITH loProject.FILES
.ADD('config\config.fpw') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="0" ID="0" ObjRev="0" /> .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" /> .ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" />
.ADD('props_all.txt') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="0" ID="0" ObjRev="0" />
*</BuildProj> *</BuildProj>
.ITEM('__newproject.f2b').Remove() .ITEM('__newproject.f2b').Remove()

Binary file not shown.

Binary file not shown.

View File

@@ -2706,7 +2706,7 @@ DEFINE CLASS c_conversor_base AS SESSION
PROCEDURE SortSpecialProps PROCEDURE SortSpecialProps
TRY TRY
LOCAL I, loEx as Exception, lcPropsFile LOCAL I, loEx AS EXCEPTION, lcPropsFile
lcPropsFile = '' lcPropsFile = ''
WITH THIS AS conversor_base OF "FOXBIN2PRG.PRG" WITH THIS AS conversor_base OF "FOXBIN2PRG.PRG"
@@ -2860,7 +2860,7 @@ DEFINE CLASS c_conversor_base AS SESSION
ENDWITH ENDWITH
CATCH TO loEx CATCH TO loEx
loEx.UserValue = 'lcPropsFile = ' + lcPropsFile loEx.USERVALUE = 'lcPropsFile = ' + lcPropsFile
IF THIS.l_Debug AND _VFP.STARTMODE = 0 IF THIS.l_Debug AND _VFP.STARTMODE = 0
SET STEP ON SET STEP ON
@@ -7840,7 +7840,7 @@ 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 LOCAL lnLineCount, laLine(1), I, lnTextNodes, tcSorted, lnProtectedLine, lcMethod, lnLine_Len, lcLine
LOCAL loEx AS EXCEPTION LOCAL loEx AS EXCEPTION
DIMENSION taMethods(1,3) DIMENSION taMethods(1,3)
STORE '' TO taMethods, m.tcSorted, taCode STORE '' TO taMethods, m.tcSorted, taCode
@@ -7885,16 +7885,39 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
*-- 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
lnLine_Len = LEN( laLine(I) )
DO CASE DO CASE
CASE LEFT(laLine(I), 4) == C_TEXT CASE UPPER( LEFT(laLine(I), 4) ) == "TEXT"
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 lnTextNodes = lnTextNodes + 1
taCode(tnMethodCount) = taCode(tnMethodCount) + laLine(I) + CR_LF taCode(tnMethodCount) = taCode(tnMethodCount) + laLine(I) + CR_LF
CASE LEFT(laLine(I), 7) == C_ENDTEXT 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 lnTextNodes = lnTextNodes - 1
taCode(tnMethodCount) = taCode(tnMethodCount) + laLine(I) + CR_LF taCode(tnMethodCount) = taCode(tnMethodCount) + laLine(I) + CR_LF
CASE lnTextNodes = 0 AND 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)
taMethods(tnMethodCount, 1) = RTRIM( SUBSTR(laLine(I), 11) ) taMethods(tnMethodCount, 1) = RTRIM( SUBSTR(laLine(I), 11) )
@@ -7902,7 +7925,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
taMethods(tnMethodCount, 3) = '' taMethods(tnMethodCount, 3) = ''
taCode(tnMethodCount) = laLine(I) + CR_LF taCode(tnMethodCount) = laLine(I) + CR_LF
CASE lnTextNodes = 0 AND LEFT(laLine(I), 17) == 'HIDDEN PROCEDURE ' CASE lnTextNodes = 0 AND UPPER( LEFT(laLine(I), 17) ) == 'HIDDEN PROCEDURE '
tnMethodCount = tnMethodCount + 1 tnMethodCount = tnMethodCount + 1
DIMENSION taMethods(tnMethodCount, 3), taCode(tnMethodCount) DIMENSION taMethods(tnMethodCount, 3), taCode(tnMethodCount)
taMethods(tnMethodCount, 1) = RTRIM( SUBSTR(laLine(I), 18) ) taMethods(tnMethodCount, 1) = RTRIM( SUBSTR(laLine(I), 18) )
@@ -7910,7 +7933,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
taMethods(tnMethodCount, 3) = 'HIDDEN ' taMethods(tnMethodCount, 3) = 'HIDDEN '
taCode(tnMethodCount) = laLine(I) + CR_LF taCode(tnMethodCount) = laLine(I) + CR_LF
CASE lnTextNodes = 0 AND LEFT(laLine(I), 20) == 'PROTECTED PROCEDURE ' CASE lnTextNodes = 0 AND UPPER( LEFT(laLine(I), 20) ) == 'PROTECTED PROCEDURE '
tnMethodCount = tnMethodCount + 1 tnMethodCount = tnMethodCount + 1
DIMENSION taMethods(tnMethodCount, 3), taCode(tnMethodCount) DIMENSION taMethods(tnMethodCount, 3), taCode(tnMethodCount)
taMethods(tnMethodCount, 1) = RTRIM( SUBSTR(laLine(I), 21) ) taMethods(tnMethodCount, 1) = RTRIM( SUBSTR(laLine(I), 21) )
@@ -7919,6 +7942,15 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
taCode(tnMethodCount) = laLine(I) + CR_LF taCode(tnMethodCount) = laLine(I) + CR_LF
CASE lnTextNodes = 0 AND LEFT(laLine(I), 7) == 'ENDPROC' CASE lnTextNodes = 0 AND LEFT(laLine(I), 7) == 'ENDPROC'
lcLine = UPPER( CHRTRAN( laLine(I) , '&'+CHR(9)+CHR(0), ' ') ) + ' '
IF lnLine_Len >= 7 AND LEFT(lcLine,8) == 'ENDPROC '
*-- Es el final de estructura ENDPROC
ELSE
*-- Es otra cosa (variable, etc)
taCode(tnMethodCount) = taCode(tnMethodCount) + laLine(I) + CR_LF
LOOP
ENDIF
taCode(tnMethodCount) = taCode(tnMethodCount) + laLine(I) + CR_LF taCode(tnMethodCount) = taCode(tnMethodCount) + laLine(I) + CR_LF
CASE tnMethodCount = 0 && Skip empty lines before methods begin CASE tnMethodCount = 0 && Skip empty lines before methods begin