$NA SUBROUTINE ANALYZ C C SUBROUTINE TO OBTAIN AND ANALYZE NEXT FLECS STATEMENT C C C-------------------------------------- C C ANALYZE PATCHES NOVEMBER 3, 1977 C C B.SEARLE C C CANADIAN DEPARTMENT OF TRANSPORT C T.A.S.X. TOWER "C" C PLACE DE VILLE C OTTAWA CANADA K1A 0N8 C (613) 996-0218 C C--------------------------------------- C C FLECS TRANSLATOR (PRELIMINARY VERSION 22) C (FOR A MORE PRECISE VERSION NUMBER, SEE THE STRING SVER) C C AUTHOR -- TERRY BEYER C C ADDRESS -- COMPUTING CENTER C UNIVERSITY OF OREGON C EUGENE, OREGON 97405 C C--------------------------------------- C C DISCLAIMER C C NEITHER THE AUTHORS NOR THE U. OF OREGON NOR TRANSPORT CANADA C ARE LIBAL FOR ANY DIRECT OR INDIRECT, INCIDENTAL, CONSEQUENTIAL, C OR SPECIFIC DAMAGES OF ANY KIND OR FROM ANY CAUSE WHATSOEVER C ARISING OUT OF OR IN ANY WAY CONNECTED WITH THE USE OR C PERFORMANCE OF THIS PROGRAM. C C--------------------------------------- C INTEGER BLN , CH , CHC , CHSPAC, CHTYP , CHTYPE INTEGER CHZERO, CLASS , CPOS , CSAVE , CURSOR, CWD INTEGER ERRCL , ERROR , ERRSTK, ERSTOP INTEGER EXTYPE, FLXNO , FORTCL, HOLDNO, I , KCOND INTEGER INUMBR INTEGER KDO , KELSE , KEND , KFIN , KIF , KREPT INTEGER KSELCT, KTO , KUNLES, KUNTIL, KWHEN , KWHILE INTEGER LEN , LEVEL , LINENO, LISTCL, LSTLEV, MAJCNT INTEGER MINCNT, MLINE , NCHPWD, NUNITS, PCNT , PTABLE, QP INTEGER READ , REFNO , RETRY , SB , SB5 , SB6 INTEGER SB7 , SDASH , SDUM , SEND , SETUP , SFLX INTEGER SFSPCR, SHOLD , SLIST , SLP , SOURCE, SOWSE INTEGER SP , SPINV , SPUTGO, SRP , SSPACR, SST INTEGER SVER INTEGER SSTMAX, STACK , START , TBLANK, TCEXP , TCOND INTEGER TDIGIT, TDO , TELSE , TEND , TEOL , TEXEC INTEGER TFIN , TFORT , THYPHN, TIF , TINVOK, TLETTR INTEGER TLP , TOP , TOTHER, TRP , TRUNTL, TRWHIL INTEGER TSELCT, TTO , TUNLES, TUNTIL, TWHEN , TWHILE INTEGER UDO , UEXP , UFORT , ULEN , UOWSE , UPINV INTEGER USTART, UTYPE , WWIDTH INTEGER IICWD , IIJJKK, IIII INTEGER CHA , CHI , CHF , CHL , CHN , CHX , CHP INTEGER OFFSET, OFFST2 INTEGER EOUT , FOUT , IN , LOUT , LWIDTH, CHTAB , CHCOMT INTEGER CHSYST C LOGICAL BADCH , CONT , DONE , ENDFIL, ENDPGM, ERLST , FIRST LOGICAL FOUND , INDENT, INVOKE, NOPGM , PASS , SAVED , STREQ LOGICAL NEWVER, FORTOF, LISTOF, CONDOF, STATE , TRIMB LOGICAL SHORT , FAKE , LONG , COGOTO C COMMON BLN , CLASS , DONE , ENDFIL, ENDPGM, ERLST COMMON ERROR , ERRSTK, ERSTOP, EXTYPE, FIRST , FLXNO COMMON FOUND , HOLDNO, LEVEL , LINENO, LSTLEV, MAJCNT COMMON MINCNT, MLINE , NOPGM , NUNITS, PASS , PTABLE, QP COMMON REFNO , SAVED , SFLX , SHOLD , SLIST , SOURCE COMMON SPINV , SPUTGO, SST , STACK , TOP , ULEN COMMON USTART, UTYPE , WWIDTH COMMON SSPACR, SFSPCR, OFFSET, OFFST2 COMMON SHORT , FAKE , LONG , COGOTO COMMON /CONTRL/NEWVER, FORTOF, LISTOF, CONDOF COMMON /SYSTEM/ EOUT,FOUT,IN,LOUT,LWIDTH,CHTAB,CHCOMT,CHSYST COMMON /VERSON/ SVER C DIMENSION UTYPE (3) DIMENSION USTART (3) DIMENSION ULEN (3) DIMENSION INUMBR (11) DIMENSION STACK (1500) DIMENSION ERRSTK (5) DIMENSION SFLX (101) DIMENSION SHOLD (101) DIMENSION SLIST (201) DIMENSION SPINV (81) DIMENSION SPUTGO (21) DIMENSION SST (201) DIMENSION SB (2) DIMENSION SB5 (6) DIMENSION SB6 (7) DIMENSION SB7 (8) DIMENSION SDASH (41) DIMENSION SDUM (16) DIMENSION SEND (10) DIMENSION SFSPCR (4) DIMENSION SLP (2) DIMENSION SOWSE (12) DIMENSION SRP (2) DIMENSION SSPACR (4) DIMENSION SVER (22) DIMENSION KCOND (12) DIMENSION KDO (3) DIMENSION KELSE (5) DIMENSION KEND (4) DIMENSION KFIN (4) DIMENSION KIF (3) DIMENSION KREPT (7) DIMENSION KSELCT (7) DIMENSION KTO (3) DIMENSION KUNLES (7) DIMENSION KUNTIL (6) DIMENSION KWHEN (5) DIMENSION KWHILE (6) C DATA CHC,CHSPAC,CHZERO /1HC,1H ,1H0 / DATA TRIMB /.FALSE./ DATA CHA,CHI,CHF,CHL,CHN /1HA,1HI,1HF,1HL,1HN/ DATA CHX,CHP /1HX,1HP/ DATA INUMBR(1),INUMBR(2),INUMBR(3),INUMBR(4)/1H0,1H1,1H2,1H3/ DATA INUMBR(5),INUMBR(6),INUMBR(7),INUMBR(8)/1H4,1H5,1H6,1H7/ DATA INUMBR(9),INUMBR(10)/1H8,1H9/ DATA FORTCL /1/, LISTCL /2/, ERRCL /3/ DATA UEXP/1/, UFORT/2/, UOWSE/3/, UPINV/4/, UDO/5/ DATA TLETTR/1/, TDIGIT/2/, THYPHN/3/, TLP/4/, TRP/5/ DATA TBLANK/6/, TOTHER/7/, TEOL/8/ DATA TCEXP/1/, TELSE/2/, TEND/3/, TEXEC/4/, TFIN/5/, TTO/6/ DATA TCOND/1/, TDO/2/, TFORT/3/, TIF/4/, TINVOK/5/, TRUNTL/6/ DATA TRWHIL/7/, TSELCT/8/, TUNLES/9/, TUNTIL/10/, TWHEN/11/ DATA TWHILE/12/ DATA SETUP /1/, RETRY /2/, READ /3/ DATA SSTMAX /200/ DATA SB(1),SB(2)/ 1, 1H / DATA SB5(1),SB5(2),SB5(3),SB5(4),SB5(5),SB5(6)/ 5, 1H , 1H , 1H 1 , 1H , 1H / DATA SB6(1),SB6(2),SB6(3),SB6(4),SB6(5),SB6(6),SB6(7)/ 6, 1H 1 , 1H , 1H , 1H , 1H , 1H / DATA SB7(1),SB7(2),SB7(3),SB7(4),SB7(5),SB7(6),SB7(7),SB7(8)/ 7 1 , 1H , 1H , 1H , 1H , 1H , 1H , 1H / DATA SDASH(1),SDASH(2),SDASH(3),SDASH(4),SDASH(5),SDASH(6) 1 ,SDASH(7),SDASH(8),SDASH(9),SDASH(10),SDASH(11),SDASH(12) 1 ,SDASH(13),SDASH(14),SDASH(15),SDASH(16),SDASH(17) 1 ,SDASH(18),SDASH(19),SDASH(20),SDASH(21),SDASH(22) 1 ,SDASH(23),SDASH(24),SDASH(25),SDASH(26),SDASH(27) 1 ,SDASH(28),SDASH(29),SDASH(30),SDASH(31),SDASH(32) 1 ,SDASH(33),SDASH(34),SDASH(35),SDASH(36),SDASH(37) 1 ,SDASH(38),SDASH(39),SDASH(40),SDASH(41)/ 40, 1H-, 1H-, 1H- 1 , 1H-, 1H-, 1H-, 1H-, 1H-, 1H-, 1H-, 1H-, 1H- 1 , 1H-, 1H-, 1H-, 1H-, 1H-, 1H-, 1H-, 1H-, 1H- 1 , 1H-, 1H-, 1H-, 1H-, 1H-, 1H-, 1H-, 1H-, 1H- 1 , 1H-, 1H-, 1H-, 1H-, 1H-, 1H-, 1H-, 1H-, 1H- 1 , 1H-/ DATA SDUM(1),SDUM(2),SDUM(3),SDUM(4),SDUM(5),SDUM(6),SDUM(7) 1 ,SDUM(8),SDUM(9),SDUM(10),SDUM(11),SDUM(12),SDUM(13) 1 ,SDUM(14),SDUM(15),SDUM(16)/ 15, 1HD, 1HU, 1HM, 1HM, 1HY 1 , 1H-, 1HP, 1HR, 1HO, 1HC, 1HE, 1HD, 1HU, 1HR 1 , 1HE/ DATA SEND(1),SEND(2),SEND(3),SEND(4),SEND(5),SEND(6),SEND(7) 1 ,SEND(8),SEND(9),SEND(10)/ 9, 1H , 1H , 1H , 1H , 1H , 1H 1 , 1HE, 1HN, 1HD/ DATA SLP(1),SLP(2)/ 1, 1H(/ DATA SOWSE(1),SOWSE(2),SOWSE(3),SOWSE(4),SOWSE(5),SOWSE(6) 1 ,SOWSE(7),SOWSE(8),SOWSE(9),SOWSE(10),SOWSE(11),SOWSE(12)/ 11 1 , 1H(, 1HO, 1HT, 1HH, 1HE, 1HR, 1HW, 1HI, 1HS 1 , 1HE, 1H)/ DATA SRP(1),SRP(2)/ 1, 1H)/ DATA KCOND(1),KCOND(2),KCOND(3),KCOND(4),KCOND(5),KCOND(6) 1 ,KCOND(7),KCOND(8),KCOND(9),KCOND(10),KCOND(11),KCOND(12)/ 11 1 , 1HC, 1HO, 1HN, 1HD, 1HI, 1HT, 1HI, 1HO, 1HN 1 , 1HA, 1HL/ DATA KDO(1),KDO(2),KDO(3)/ 2, 1HD, 1HO/ DATA KELSE(1),KELSE(2),KELSE(3),KELSE(4),KELSE(5)/ 4, 1HE, 1HL 1 , 1HS, 1HE/ DATA KEND(1),KEND(2),KEND(3),KEND(4)/ 3, 1HE, 1HN, 1HD/ DATA KFIN(1),KFIN(2),KFIN(3),KFIN(4)/ 3, 1HF, 1HI, 1HN/ DATA KIF(1),KIF(2),KIF(3)/ 2, 1HI, 1HF/ DATA KREPT(1),KREPT(2),KREPT(3),KREPT(4),KREPT(5),KREPT(6) 1 ,KREPT(7)/ 6, 1HR, 1HE, 1HP, 1HE, 1HA, 1HT/ DATA KSELCT(1),KSELCT(2),KSELCT(3),KSELCT(4),KSELCT(5) 1 ,KSELCT(6),KSELCT(7)/ 6, 1HS, 1HE, 1HL, 1HE, 1HC, 1HT/ DATA KTO(1),KTO(2),KTO(3)/ 2, 1HT, 1HO/ DATA KUNLES(1),KUNLES(2),KUNLES(3),KUNLES(4),KUNLES(5) 1 ,KUNLES(6),KUNLES(7)/ 6, 1HU, 1HN, 1HL, 1HE, 1HS, 1HS/ DATA KUNTIL(1),KUNTIL(2),KUNTIL(3),KUNTIL(4),KUNTIL(5) 1 ,KUNTIL(6)/ 5, 1HU, 1HN, 1HT, 1HI, 1HL/ DATA KWHEN(1),KWHEN(2),KWHEN(3),KWHEN(4),KWHEN(5)/ 4, 1HW, 1HH 1 , 1HE, 1HN/ DATA KWHILE(1),KWHILE(2),KWHILE(3),KWHILE(4),KWHILE(5) 1 ,KWHILE(6)/ 5, 1HW, 1HH, 1HI, 1HL, 1HE/ C SELECT (SOURCE) (READ) READ-NEXT-STATEMENT (SETUP) CONTINUE (RETRY) LINENO=HOLDNO CALL CPYSTR(SFLX,SHOLD) FIN FIN ERROR=0 SAVED=.FALSE. NUNITS=0 ERSTOP=0 CURSOR=0 CWD=1 CLASS=0 TRIMB=.FALSE. SCAN-STATEMENT-NUMBER SCAN-CONTINUATION TRIMB=.TRUE. WHEN (CONT.OR.PASS) CLASS=TEXEC EXTYPE=TFORT FIN ELSE SCAN-KEYWORD SELECT (CLASS) (TEXEC) SELECT (EXTYPE) (TFORT) CONTINUE (TINVOK) SCAN-GARBAGE (TCOND) SCAN-GARBAGE (TSELCT) SCAN-CONTROL IF(NUNITS.GT.1) NUNITS=1 CURSOR=USTART(2) RESET-GET-CHARACTER SCAN-GARBAGE FIN FIN (OTHERWISE) SCAN-CONTROL FIN FIN (TFIN) SCAN-GARBAGE (TEND) CONTINUE (TELSE) SCAN-PINV-OR-FORT (TTO) CSAVE=CURSOR SCAN-PINV WHEN(FOUND) SCAN-PINV-OR-FORT ELSE ERSTOP=ERSTOP+1 ERRSTK(ERSTOP)=5 SAVE-ORIGINAL-STATEMENT SFLX(1)=CSAVE CALL CATSTR(SFLX,SDUM) CURSOR=CSAVE RESET-GET-CHARACTER SCAN-PINV FIN FIN (TCEXP) SCAN-CONTROL FIN IF(ERSTOP.GT.0) CLASS=0 LSTLEV=LEVEL RETURN C TO GET-CHARACTER CURSOR=CURSOR+1 CWD=CWD+1 WHEN(CURSOR.GT.SFLX(1)) CHTYPE=TEOL ELSE CH=SFLX(CWD) CHTYPE=CHTYP(CH) FIN IF (TRIMB) TRIM-LEADING-BLANKS FIN C TO LIST-BLANK-LINE UNLESS(LISTOF) LSTLEV=LEVEL WHEN (LSTLEV.EQ.0.OR.(SSPACR(1)*LSTLEV+SB6(1).GT.WWIDTH)) CALL PUT(BLN,SB,LISTCL) FIN ELSE CALL CPYSTR(SLIST,SB6) DO (I=1,LSTLEV) CALL CATSTR(SLIST,SSPACR) CALL PUT(BLN,SLIST,LISTCL) FIN BLN=0 FIN FIN C TO LIST-COMMENT-LINE UNLESS(LISTOF) CURSOR=1 RESET-GET-CHARACTER INDENT=.TRUE. I=2 REPEAT WHILE (I.LE.6.AND.INDENT) GET-CHARACTER IF (I.EQ.2.AND.CH.EQ.CHC.AND.SFLX(2).EQ.CHX) CHTYPE=TBLANK IF (CHTYPE.NE.TBLANK.AND.CHTYPE.NE.TEOL) INDENT=.FALSE. I=I+1 FIN WHEN (INDENT) LSTLEV=LEVEL CLASS=0 LIST-FLEX FIN ELSE CALL PUT(LINENO,SFLX,LISTCL) FIN FIN C TO LIST-DASHES UNLESS(LISTOF) CALL PUT(0,SB,LISTCL) CALL PUT(0,SDASH,LISTCL) CALL PUT(0,SB,LISTCL) FIN FIN C TO LIST-FLEX UNLESS(LISTOF) IF (CLASS.EQ.TTO) LIST-DASHES IF (SFLX(1).LT.7) CALL CATSTR(SFLX,SB7) CALL CPYSUB(SLIST,SFLX,1,6) UNLESS(LSTLEV.EQ.0.OR.(SSPACR(1)*LSTLEV+SFLX(1).GT.WWIDTH)) DO (I=1,LSTLEV) CALL CATSTR(SLIST,SSPACR) IF(CLASS.EQ.TFIN) SLIST(1)=SLIST(1)-SSPACR(1) CALL CATSTR(SLIST,SFSPCR) FIN FIN CALL CATSUB(SLIST,SFLX,7,SFLX(1)-6) IF (SLIST(1).GT.WWIDTH) CALL CPYSTR(SLIST,SFLX) WHEN (ERLST) CALL PUT(LINENO,SLIST,ERRCL) ERLST=.FALSE. FIN ELSE CALL PUT(LINENO,SLIST,LISTCL) FIN FIN C TO READ-NEXT-STATEMENT REPEAT UNTIL (FOUND) CALL GET(LINENO,SFLX,ENDFIL) IF (FIRST) UNTIL (SFLX(1).GT.0.OR.ENDFIL) CALL GET(LINENO,SFLX,ENDFIL) FIRST=.FALSE. IF(ENDFIL) NOPGM=.TRUE. FIN IF (ENDFIL) CALL CPYSTR(SFLX,SEND) LINENO=0 FIN CH=SFLX(2) CONDITIONAL (SFLX(1).EQ.0) BLN=LINENO LIST-BLANK-LINE FOUND=.FALSE. FIN (CH.EQ.CHC) LIST-COMMENT-LINE FOUND=.FALSE. FIN (CH.EQ.CHSYST) READ-SYSTEM-COMMANDS FOUND=.FALSE. FIN (CH.EQ.CHX) WHEN (CONDOF) FOUND=.FALSE. ELSE WHEN (SFLX(3).EQ.CHC) LIST-COMMENT-LINE FOUND=.FALSE. FIN ELSE FOUND=.TRUE. FIN FIN (OTHERWISE) FOUND=.TRUE. FIN FIN FIN C TO READ-SYSTEM-COMMANDS CH=SFLX(3) STATE=.FALSE. IF (CH.EQ.CHN) STATE=.TRUE. CH=SFLX(4) FIN SELECT(CH) (CHI) NEWVER=.TRUE. SSPACR(1)=2 SSPACR(2)=CHSPAC SFSPCR(1)=2 SFSPCR(2)=CHSPAC SFSPCR(3)=CHSPAC WWIDTH=72 FIN (CHF) FORTOF=STATE (CHL) LISTOF=STATE (CHX) CONDOF=STATE (CHA) C C*********************************************************************** C C CAN SUBSTITUTE 'COGOTO' FOR 'LONG' C CAN SUBSTITUTE 'FAKE' FOR 'SHORT' C C*********************************************************************** C LONG=(.NOT. STATE) SHORT=STATE WHEN (STATE) OFFSET=1 OFFST2=1 FIN ELSE OFFSET=2 OFFST2=3 FIN FIN (CHP) CALL PUT(0,SVER,LISTCL) (OTHERWISE) CONTINUE FIN LIST-COMMENT-LINE FIN C TO RESET-GET-CHARACTER CURSOR=CURSOR-1 CWD=CURSOR+1 GET-CHARACTER FIN C TO SAVE-ORIGINAL-STATEMENT UNLESS (SAVED) SAVED=.TRUE. HOLDNO=LINENO CALL CPYSTR(SHOLD,SFLX) FIN FIN C TO SCAN-CONTINUATION GET-CHARACTER CONDITIONAL (CHTYPE.EQ.TEOL) CONT=.FALSE. (CH.EQ.CHZERO.OR.CH.EQ.CHSPAC) CONT=.FALSE. (OTHERWISE) CONT=.TRUE. FIN FIN C TO SCAN-CONTROL WHILE (CHTYPE.EQ.TBLANK) GET-CHARACTER START=CURSOR IF (CHTYPE.NE.TLP) ERSTOP=ERSTOP+1 ERRSTK(ERSTOP)=3 SAVE-ORIGINAL-STATEMENT CALL CPYSTR(SST,SFLX) SFLX(1)=START-1 CALL CATSTR(SFLX,SLP) CALL CATSUB(SFLX,SST,START,SST(1)-START-1) FIN PCNT=1 FOUND=.TRUE. REPEAT UNTIL (PCNT.EQ.0.OR..NOT.FOUND) GET-CHARACTER SELECT (CHTYPE) (TRP) PCNT=PCNT-1 (TLP) PCNT=PCNT+1 (TEOL) FOUND=.FALSE. FIN FIN UNLESS (FOUND) ERSTOP=ERSTOP+1 ERRSTK(ERSTOP)=4 SAVE-ORIGINAL-STATEMENT DO (I=1,PCNT) CALL CATSTR(SFLX,SRP) CURSOR=SFLX(1) RESET-GET-CHARACTER FIN GET-CHARACTER NUNITS=NUNITS+1 UTYPE(NUNITS)=UEXP USTART(NUNITS)=START ULEN(NUNITS)=CURSOR-START CALL CPYSUB(SST,SFLX,START,CURSOR-START) IF(STREQ(SST,SOWSE)) UTYPE(NUNITS)=UOWSE SCAN-PINV-OR-FORT FIN C TO SCAN-GARBAGE WHILE (CHTYPE.EQ.TBLANK) GET-CHARACTER IF(CHTYPE.NE.TEOL) ERSTOP=ERSTOP+1 ERRSTK(ERSTOP)=2 SAVE-ORIGINAL-STATEMENT SFLX(1)=CURSOR-1 FIN FIN C TO SCAN-KEYWORD GET-CHARACTER WHILE (CHTYPE.EQ.TBLANK) GET-CHARACTER SELECT (CHTYPE) (TLETTR) START=CURSOR INVOKE=.FALSE. BADCH=.FALSE. REPEAT UNTIL (BADCH) GET-CHARACTER CONDITIONAL (CHTYPE.LE.TDIGIT) CONTINUE (CHTYPE.EQ.THYPHN) INVOKE=.TRUE. (OTHERWISE) BADCH=.TRUE. FIN FIN LEN=CURSOR-START WHEN (INVOKE) CLASS=TEXEC EXTYPE=TINVOK NUNITS=1 UTYPE(1)=UPINV USTART(1)=START ULEN(1)=LEN FIN ELSE CALL CPYSUB(SST,SFLX,START,LEN) CLASS=TEXEC EXTYPE=TFORT SELECT (SST(1)) (2) CONDITIONAL (STREQ(SST,KIF)) EXTYPE=TIF (STREQ(SST,KTO)) CLASS=TTO (STREQ(SST,KDO)) WHILE(CHTYPE.EQ.TBLANK) GET-CHARACTER WHEN (CHTYPE.EQ.TDIGIT) EXTYPE=TFORT ELSE EXTYPE=TDO FIN FIN FIN (3) CONDITIONAL (STREQ(SST,KFIN)) CLASS=TFIN (STREQ(SST,KEND)) IF (CHTYPE.EQ.TEOL) CLASS=TEND FIN FIN FIN (4) CONDITIONAL (STREQ(SST,KWHEN)) EXTYPE=TWHEN (STREQ(SST,KELSE)) CLASS=TELSE FIN FIN (5) CONDITIONAL (STREQ(SST,KWHILE)) EXTYPE=TWHILE (STREQ(SST,KUNTIL)) EXTYPE=TUNTIL FIN FIN (6) CONDITIONAL (STREQ(SST,KREPT)) WHILE(CHTYPE.EQ.TBLANK) GET-CHARACTER START=CURSOR WHILE(CHTYPE.EQ.TLETTR) GET-CHARACTER LEN=CURSOR-START CALL CPYSUB(SST,SFLX,START,LEN) CONDITIONAL (STREQ(SST,KWHILE)) EXTYPE=TRWHIL (STREQ(SST,KUNTIL)) EXTYPE=TRUNTL FIN FIN (STREQ(SST,KSELCT)) EXTYPE=TSELCT (STREQ(SST,KUNLES)) EXTYPE=TUNLES FIN FIN (11) IF (STREQ(SST,KCOND)) EXTYPE=TCOND FIN FIN FIN FIN (TLP) CLASS=TCEXP (OTHERWISE) CLASS=TEXEC EXTYPE=TFORT FIN FIN FIN C TO SCAN-PINV WHILE(CHTYPE.EQ.TBLANK) GET-CHARACTER FOUND=.FALSE. IF(CHTYPE.EQ.TLETTR) START=CURSOR REPEAT UNTIL (CHTYPE.GT.THYPHN) GET-CHARACTER IF(CHTYPE.EQ.THYPHN) FOUND=.TRUE. FIN FIN IF (FOUND) NUNITS=NUNITS+1 UTYPE(NUNITS)=UPINV USTART(NUNITS)=START ULEN(NUNITS)=CURSOR-START FIN FIN C TO SCAN-PINV-OR-FORT WHILE (CHTYPE.EQ.TBLANK) GET-CHARACTER UNLESS (CHTYPE.EQ.TEOL) CSAVE=CURSOR SCAN-PINV WHEN(FOUND) SCAN-GARBAGE ELSE NUNITS=NUNITS+1 UTYPE(NUNITS)=UFORT USTART(NUNITS)=CSAVE ULEN(NUNITS)=SFLX(1)+1-CSAVE FIN FIN FIN C TO SCAN-STATEMENT-NUMBER FLXNO=0 PASS=.FALSE. DO (I=1,5) GET-CHARACTER IF (I.EQ.1 .AND. CH.EQ.CHX) CHTYPE=TBLANK SELECT (CHTYPE) (TBLANK) CONTINUE (TDIGIT) DO (J=1,11) IF (INUMBR(J).EQ.CH) FLXNO=FLXNO*10+J-1 FIN (TEOL) CONTINUE (OTHERWISE) PASS=.TRUE. FIN FIN FIN C TO TRIM-LEADING-BLANKS IF (CH.EQ.CHSPAC) IICWD=CWD WHILE(CH.EQ.CHSPAC) IICWD=IICWD+1 CH=SFLX(IICWD) FIN SFLX(1)=SFLX(1)-IICWD+CWD IIJJKK=SFLX(1)+1 DO (IIII=CWD,IIJJKK) SFLX(IIII)=SFLX(IICWD) IICWD=IICWD+1 FIN CHTYPE=CHTYP(CH) FIN TRIMB=.FALSE. FIN C C END