home *** CD-ROM | disk | FTP | other *** search
Text File | 1989-03-04 | 63.7 KB | 1,526 lines |
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C ----------------------------------------------------------------------
- C
- C P C A L L S - Process CALL statements
- C (look for alternate returns and external
- C function references in the argument list)
- C
-
- SUBROUTINE PCALLS
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C CONTROL VARIABLES
- COMMON / CNTRLC / IERRG, IFTYPG, ITYPEG,
- * IUNITG, JERRG, KERRG, LABFLG,
- * LINEG, LTYPEG, NBUFFG, NTOKG,
- * NTOK2G, NTOK3G, NTOK4G, NCOMG,
- * NCRTNG, NDDICG, NEDICG, NLABG,
- * NMASRG, NMSEG, NRDICG, NRTNG,
- * NSTMG, NTREEG, NTYPEG
-
- INTEGER IERRG,IFTYPG,ITYPEG,IUNITG,JERRG,KERRG,LABFLG,LINEG,
- + LTYPEG,NBUFFG,NTOKG,NTOK2G,NTOK3G,NTOK4G,NCOMG,NCRTNG,
- + NDDICG,NEDICG,NLABG,NMASRG,NMSEG,NRDICG,NRTNG,NSTMG,
- + NTREEG,NTYPEG
-
- SAVE /CNTRLC/
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C LOGICAL VARIABLES
- COMMON / LOGIC / ARITHG, ASSRTG, BLKDTG,
- * CARD1G, CGOTOG, ENTRYG, EXECG,
- * HISTG, IEOFG, IFDOG, INSRTG,
- * MAING, SEGMTG, STOPG, TRACEG,
- * TREEG
- LOGICAL ARITHG, ASSRTG, BLKDTG, CARD1G,
- * CGOTOG, ENTRYG, EXECG, HISTG,
- * IEOFG, IFDOG, INSRTG, MAING,
- * SEGMTG, STOPG, TRACEG, TREEG
-
- SAVE /LOGIC/
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C Option Settings
- COMMON /OPTSC/ INHSTG,INTRAG,ITHSTG,ITLSTG,ITTRAG,MCIRCG,
- + MTREQG,TIEG,ITRUNG
-
- INTEGER INHSTG,INTRAG,ITHSTG,ITLSTG,ITTRAG,MCIRCG,MTREQG,
- + ITRUNG
- LOGICAL TIEG
-
- SAVE /OPTSC/
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- COMMON/TOKENS/TOKTYP,TOKLEN,TXTPTR,TOKEN,NTOKSS,ISTTXT,ISTPTR,
- + MAXICH
- INTEGER TOKTYP(800),TOKLEN(800),TXTPTR(800),
- + TOKEN,NTOKSS,ISTTXT(1322+800),ISTPTR(800),
- + MAXICH
-
- SAVE /TOKENS/
-
- C
- C TOKTYP = array of token types for current statement
- C TOKLEN = parallel array of lengths of associated text strings
- C TXTPTR = parallel array of pointers into ISTMG character array of text
- C TOKEN = Current token number within statement being processed
- C NTOKSS = Number of tokens in statement
- C ISTTXT = IST text of token as read in before being converted by ZTOKTX
- C ISTPTR = parallel array (to TOKTYP) of pointers into ISTTXT
- C MAXICH = Last character used in ISTTXT array
- C
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C MAIN INTEGER STORAGE ARRAYS
- C MAXLBG = Maximum number of DO statement labels per routine
- INTEGER MAXLBG
- PARAMETER(MAXLBG=100)
- COMMON / WORKC / IABEG(201), ICRTNG(200), IPCNTG(75),
- * IRCNTG(75), ISBEG(201), ISCNTG(75), INSTG(250),
- * KEXECG(75), LABG(2,MAXLBG), KTOKG(81)
- INTEGER IABEG,ICRTNG,IPCNTG,IRCNTG,ISBEG,ISCNTG,INSTG,
- + KEXECG,LABG,KTOKG
- SAVE /WORKC/
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.4
- C---------------------------------------------------------
- C
- C TKLAST = LAST TOKEN NUMBER
- C
- INTEGER TZEOF ,TASSIG,TBACKS,TBLOCK,TCALL ,TCLOSE,TCOMMO,TCONTI,
- + TDATA ,TDO ,TDIMEN,TELSE ,TELSIF,TEND ,TENDFI,TENDIF,
- + TENTRY,TEQUIV,TEXTER,TFUNCT,TFORMA,TGOTO ,TIF ,TIMPLI,
- + TINQUI,TINTRI,TOPEN ,TPARAM,TPAUSE,TPRINT,TPROGR,TREAD ,
- + TRETUR,TREWIN,TSAVE ,TSTOP ,TSUBRO,TTHEN ,TTO ,TWRITE,
- + TINTEG,TREAL ,TDOUBL,TCOMPL,TLOGIC,TCHARA,TDCMPL,TCOMMA,
- + TEQUAL,TCOLON,TLPARN,TRPARN,TLE ,TLT ,TEQ ,TNE ,
- + TGE ,TGT ,TAND ,TOR ,TEQV ,TNEQV ,TNOT ,TSTAR ,
- + TDSTAR,TPLUS ,TMINUS,TSLASH,TCNCAT,TDCNST,TLCNST,TRCNST,
- + TPCNST,TCCNST,THCNST,TNAME ,TFIELD,TSCALE,TZEOS ,TCMMNT,
- + TFMTKD,TENDKD,TERRKD,TKLAST
- PARAMETER (TZEOF = 1,TASSIG= 2,TBACKS= 3,TBLOCK= 4,TCALL = 5,
- + TCLOSE= 6,TCOMMO= 7,TCONTI= 8,TDATA = 9,TDO =10,
- + TDIMEN=11,TELSE =12,TELSIF=13,TEND =14,TENDFI=15,
- + TENDIF=16,TENTRY=17,TEQUIV=18,TEXTER=19,TFUNCT=20,
- + TFORMA=21,TGOTO =22,TIF =23,TIMPLI=24,TINQUI=25,
- + TINTRI=26,TOPEN =27,TPARAM=28,TPAUSE=29,TPRINT=30,
- + TPROGR=31,TREAD =32,TRETUR=33,TREWIN=34,TSAVE =35,
- + TSTOP =36,TSUBRO=37,TTHEN =38,TTO =39,TWRITE=40,
- + TINTEG=41,TREAL =42,TDOUBL=43,TCOMPL=44,TLOGIC=45,
- + TCHARA=46,TDCMPL=47,TCOMMA=48,TEQUAL=49,TCOLON=50,
- + TLPARN=51,TRPARN=52,TLE =53,TLT =54,TEQ =55,
- + TNE =56,TGE =57,TGT =58,TAND =59,TOR =60,
- + TEQV =61,TNEQV =62,TNOT =63,TSTAR =64,TDSTAR=65,
- + TPLUS =66,TMINUS=67,TSLASH=68,TCNCAT=69,TDCNST=70,
- + TLCNST=71,TRCNST=72,TPCNST=73,TCCNST=74,THCNST=75,
- + TNAME =76,TFIELD=77,TSCALE=78,TZEOS =79,TCMMNT=80,
- + TFMTKD=81,TENDKD=82,TERRKD=83,TKLAST=83)
-
-
- INTEGER LEFTTK,COMMAT,ITOK,I,NUL
- CHARACTER*6 NAMEL
-
- INTEGER SFINDT
- CHARACTER*6 NAME
-
- C Output statement
- CALL OUTS
- C Find start of argument list
- LEFTTK=NTOKG+1
- 50 IF (LEFTTK.LT.NTOKSS .AND. TOKTYP(LEFTTK).NE.TLPARN) THEN
- LEFTTK=LEFTTK+1
- GOTO 50
- END IF
- C If argument list exists, check for alternate returns
- IF (TOKTYP(LEFTTK).EQ.TLPARN) THEN
- COMMAT=LEFTTK
- C Look for next special token in list
- 100 ITOK=SFINDT(COMMAT+1)
- IF (TOKTYP(ITOK).EQ.TSTAR .AND. (TOKTYP(ITOK-1).EQ.TLPARN
- + .OR. TOKTYP(ITOK-1).EQ.TCOMMA)) THEN
- C Alternate return found - request segment.
- ISCNTG(ITYPEG) = ISCNTG(ITYPEG) + 1
- SEGMTG = .FALSE.
- CALL SEGMTS(.TRUE.)
- ISCNTG(ITYPEG) = ISCNTG(ITYPEG) - 1
- ELSE IF (ITOK.LT.NTOKSS) THEN
- C Keep looking.
- COMMAT=ITOK
- GOTO 100
- ELSE
- C There are no alternate returns.
- SEGMTG = .FALSE.
- END IF
- ELSE
- C There is no argument list.
- SEGMTG = .FALSE.
- END IF
-
- END
- C ----------------------------------------------------------------------
- C
- C P C G O S - Process computed GOTO statements
- C
-
- SUBROUTINE PCGOS(ITOKA,NTOKA)
- INTEGER ITOKA,NTOKA
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C CONTROL VARIABLES
- COMMON / CNTRLC / IERRG, IFTYPG, ITYPEG,
- * IUNITG, JERRG, KERRG, LABFLG,
- * LINEG, LTYPEG, NBUFFG, NTOKG,
- * NTOK2G, NTOK3G, NTOK4G, NCOMG,
- * NCRTNG, NDDICG, NEDICG, NLABG,
- * NMASRG, NMSEG, NRDICG, NRTNG,
- * NSTMG, NTREEG, NTYPEG
-
- INTEGER IERRG,IFTYPG,ITYPEG,IUNITG,JERRG,KERRG,LABFLG,LINEG,
- + LTYPEG,NBUFFG,NTOKG,NTOK2G,NTOK3G,NTOK4G,NCOMG,NCRTNG,
- + NDDICG,NEDICG,NLABG,NMASRG,NMSEG,NRDICG,NRTNG,NSTMG,
- + NTREEG,NTYPEG
-
- SAVE /CNTRLC/
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C KEYWORD ID VARIABLES
- COMMON / KEYSC / KAGOG, KAIFG, KASMTG,
- * KASSNG, KBACKG, KBIFG, KBLOKG,
- * KCALLG, KCFUNG, KCGOG, KCHARG,
- * KCLOSG, KCMPXG, KCOMNG, KCONTG,
- * KDATAG, KDBLEG, KDFUNG, KDIMNG,
- * KDOG, KELSEG, KELSFG, KENDFG,
- * KENDG, KENDIG, KEQIVG, KEXTLG,
- * KFORMG, KIFUNG, KIMPLG, KINQRG,
- * KINSCG, KINTEG, KLFUNG, KLIFG,
- * KLOGCG, KNONEG, KNTRYG, KOPENG,
- * KPARAG, KPAUSG, KPRNTG, KPROGG,
- * KREADG, KREALG, KRETNG, KRFUNG,
- * KSAVEG, KSFUNG, KSTOPG, KSUBRG,
- * KUFUNG, KUGOG, KWINDG, KWRITG,
- * KXFUNG, LASRTG, LCMNTG, LERRG,
- * LLINEG, LSTMTG
-
- INTEGER KAGOG,KAIFG,KASMTG,KASSNG,KBACKG,KBIFG,KBLOKG,KCALLG,
- + KCFUNG,KCGOG,KCHARG,KCLOSG,KCMPXG,KCOMNG,KCONTG,KDATAG,
- + KDBLEG,KDFUNG,KDIMNG,KDOG,KELSEG,KELSFG,KENDFG,KENDG,
- + KENDIG,KEQIVG,KEXTLG,KFORMG,KIFUNG,KIMPLG,KINQRG,KINSCG,
- + KINTEG,KLFUNG,KLIFG,KLOGCG,KNONEG,KNTRYG,KOPENG,KPARAG,
- + KPAUSG,KPRNTG,KPROGG,KREADG,KREALG,KRETNG,KRFUNG,KSAVEG,
- + KSFUNG,KSTOPG,KSUNRG,KUUNG,KUGOG,KWINDG,KWRITG,KXFUNG,
- + LASRTG,LCMNTG,LERRG,LLINEG,LSTMTG
- INTEGER KUFUNG,KSUBRG
-
- SAVE /KEYSC/
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C LOGICAL VARIABLES
- COMMON / LOGIC / ARITHG, ASSRTG, BLKDTG,
- * CARD1G, CGOTOG, ENTRYG, EXECG,
- * HISTG, IEOFG, IFDOG, INSRTG,
- * MAING, SEGMTG, STOPG, TRACEG,
- * TREEG
- LOGICAL ARITHG, ASSRTG, BLKDTG, CARD1G,
- * CGOTOG, ENTRYG, EXECG, HISTG,
- * IEOFG, IFDOG, INSRTG, MAING,
- * SEGMTG, STOPG, TRACEG, TREEG
-
- SAVE /LOGIC/
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- COMMON/TOKENS/TOKTYP,TOKLEN,TXTPTR,TOKEN,NTOKSS,ISTTXT,ISTPTR,
- + MAXICH
- INTEGER TOKTYP(800),TOKLEN(800),TXTPTR(800),
- + TOKEN,NTOKSS,ISTTXT(1322+800),ISTPTR(800),
- + MAXICH
-
- SAVE /TOKENS/
-
- C
- C TOKTYP = array of token types for current statement
- C TOKLEN = parallel array of lengths of associated text strings
- C TXTPTR = parallel array of pointers into ISTMG character array of text
- C TOKEN = Current token number within statement being processed
- C NTOKSS = Number of tokens in statement
- C ISTTXT = IST text of token as read in before being converted by ZTOKTX
- C ISTPTR = parallel array (to TOKTYP) of pointers into ISTTXT
- C MAXICH = Last character used in ISTTXT array
- C
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- COMMON/ANVNAM/VNAMEG
- CHARACTER*5 VNAMEG
- SAVE/ANVNAM/
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.4
- C---------------------------------------------------------
- C
- C TKLAST = LAST TOKEN NUMBER
- C
- INTEGER TZEOF ,TASSIG,TBACKS,TBLOCK,TCALL ,TCLOSE,TCOMMO,TCONTI,
- + TDATA ,TDO ,TDIMEN,TELSE ,TELSIF,TEND ,TENDFI,TENDIF,
- + TENTRY,TEQUIV,TEXTER,TFUNCT,TFORMA,TGOTO ,TIF ,TIMPLI,
- + TINQUI,TINTRI,TOPEN ,TPARAM,TPAUSE,TPRINT,TPROGR,TREAD ,
- + TRETUR,TREWIN,TSAVE ,TSTOP ,TSUBRO,TTHEN ,TTO ,TWRITE,
- + TINTEG,TREAL ,TDOUBL,TCOMPL,TLOGIC,TCHARA,TDCMPL,TCOMMA,
- + TEQUAL,TCOLON,TLPARN,TRPARN,TLE ,TLT ,TEQ ,TNE ,
- + TGE ,TGT ,TAND ,TOR ,TEQV ,TNEQV ,TNOT ,TSTAR ,
- + TDSTAR,TPLUS ,TMINUS,TSLASH,TCNCAT,TDCNST,TLCNST,TRCNST,
- + TPCNST,TCCNST,THCNST,TNAME ,TFIELD,TSCALE,TZEOS ,TCMMNT,
- + TFMTKD,TENDKD,TERRKD,TKLAST
- PARAMETER (TZEOF = 1,TASSIG= 2,TBACKS= 3,TBLOCK= 4,TCALL = 5,
- + TCLOSE= 6,TCOMMO= 7,TCONTI= 8,TDATA = 9,TDO =10,
- + TDIMEN=11,TELSE =12,TELSIF=13,TEND =14,TENDFI=15,
- + TENDIF=16,TENTRY=17,TEQUIV=18,TEXTER=19,TFUNCT=20,
- + TFORMA=21,TGOTO =22,TIF =23,TIMPLI=24,TINQUI=25,
- + TINTRI=26,TOPEN =27,TPARAM=28,TPAUSE=29,TPRINT=30,
- + TPROGR=31,TREAD =32,TRETUR=33,TREWIN=34,TSAVE =35,
- + TSTOP =36,TSUBRO=37,TTHEN =38,TTO =39,TWRITE=40,
- + TINTEG=41,TREAL =42,TDOUBL=43,TCOMPL=44,TLOGIC=45,
- + TCHARA=46,TDCMPL=47,TCOMMA=48,TEQUAL=49,TCOLON=50,
- + TLPARN=51,TRPARN=52,TLE =53,TLT =54,TEQ =55,
- + TNE =56,TGE =57,TGT =58,TAND =59,TOR =60,
- + TEQV =61,TNEQV =62,TNOT =63,TSTAR =64,TDSTAR=65,
- + TPLUS =66,TMINUS=67,TSLASH=68,TCNCAT=69,TDCNST=70,
- + TLCNST=71,TRCNST=72,TPCNST=73,TCCNST=74,THCNST=75,
- + TNAME =76,TFIELD=77,TSCALE=78,TZEOS =79,TCMMNT=80,
- + TFMTKD=81,TENDKD=82,TERRKD=83,TKLAST=83)
-
-
- INTEGER NTOK2L,NTOK3L,ITOK,JTOK,NARGL,L
-
- INTEGER SFINDT
-
- C Balance parentheses and find following comma
- CALL BALPRT(NTOKA,NTOK2L)
- IF (NTOK2L.GT.0) THEN
- NTOK3L=NTOK2L+1
- IF (TOKTYP(NTOK3L).NE.TCOMMA) NTOK3L=NTOK3L-1
- C Count arguments
- NARGL = 0
- JTOK = NTOKA
- 100 ITOK = JTOK + 1
- JTOK=SFINDT(ITOK)
- IF (TOKTYP(JTOK).EQ.TCOMMA) THEN
- NARGL = NARGL + 1
- ELSE IF (TOKTYP(JTOK).EQ.TRPARN) THEN
- NARGL = NARGL + 1
- GOTO 110
- END IF
- GOTO 100
- C Pack first part of original 'GOTO'
- 110 IF (LABFLG.EQ.2) THEN
- IF (SEGMTG .AND. ITYPEG.EQ.KCGOG) THEN
- C Computed GOTO at end of active DO-loop: special instrumentation
- CALL OUTDOS
- ELSE IF (ITYPEG.EQ.KCGOG) THEN
- C Retain original label for other DO-loop ends
- CALL SENDTK(1,1)
- END IF
- ELSE IF (ITYPEG.EQ.KCGOG) THEN
- C No label for non-do-loops.
- C ... Output segmentation now if required
- IF (SEGMTG) CALL OUTSGS(NMSEG)
- CALL SENDCH(' ')
- END IF
- CALL SENDTK(ITOKA,NTOK3L)
- C Send constants
- CALL SENDCH('K'//VNAMEG//'(')
- C Send last part of original 'GOTO'
- CALL SENDTK(NTOK3L+1,NTOKSS)
- C Send last set of constants
- CALL SENDCH(',')
- CALL SENDI(NMSEG)
- CALL SENDCH(',')
- CALL SENDI(NARGL)
- CALL SENDCH(')')
- C Output statement
- CALL PCGO2S(NARGL)
- ELSE
- C Unbalanced parentheses
- CALL ERRORS(12)
- IF (SEGMTG) THEN
- CALL OUTANS(NMSEG)
- ELSE
- CALL OUTANS(0)
- END IF
- CALL INSOUT
- END IF
-
- END
- C ----------------------------------------------------------------------
- C
- C P C G O 2 S - Output computed goto statement and
- C instrumentation.
- C
-
- SUBROUTINE PCGO2S(NARGA)
- INTEGER NARGA
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C Character variables and arrays, except for dictionaries & VNAMEG
- INTEGER MAXCMG
- PARAMETER(MAXCMG=30)
- COMMON /CHARC/ IBUFFG,ICARDG,ICOMG,ISTMG,NAMEG
-
- CHARACTER IBUFFG(1326),ICARDG(72),ISTMG(1326)
- CHARACTER*6 NAMEG
- CHARACTER*72 ICOMG(MAXCMG)
-
- SAVE /CHARC/
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C LOGICAL VARIABLES
- COMMON / LOGIC / ARITHG, ASSRTG, BLKDTG,
- * CARD1G, CGOTOG, ENTRYG, EXECG,
- * HISTG, IEOFG, IFDOG, INSRTG,
- * MAING, SEGMTG, STOPG, TRACEG,
- * TREEG
- LOGICAL ARITHG, ASSRTG, BLKDTG, CARD1G,
- * CGOTOG, ENTRYG, EXECG, HISTG,
- * IEOFG, IFDOG, INSRTG, MAING,
- * SEGMTG, STOPG, TRACEG, TREEG
-
- SAVE /LOGIC/
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C CONTROL VARIABLES
- COMMON / CNTRLC / IERRG, IFTYPG, ITYPEG,
- * IUNITG, JERRG, KERRG, LABFLG,
- * LINEG, LTYPEG, NBUFFG, NTOKG,
- * NTOK2G, NTOK3G, NTOK4G, NCOMG,
- * NCRTNG, NDDICG, NEDICG, NLABG,
- * NMASRG, NMSEG, NRDICG, NRTNG,
- * NSTMG, NTREEG, NTYPEG
-
- INTEGER IERRG,IFTYPG,ITYPEG,IUNITG,JERRG,KERRG,LABFLG,LINEG,
- + LTYPEG,NBUFFG,NTOKG,NTOK2G,NTOK3G,NTOK4G,NCOMG,NCRTNG,
- + NDDICG,NEDICG,NLABG,NMASRG,NMSEG,NRDICG,NRTNG,NSTMG,
- + NTREEG,NTYPEG
-
- SAVE /CNTRLC/
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C ROUTINE INSTRUMENTATION FLAGS
- COMMON / INSTC / INST1G, INST2G, INST3G
-
- INTEGER INST1G,INST2G,INST3G
-
- SAVE /INSTC/
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C KEYWORD ID VARIABLES
- COMMON / KEYSC / KAGOG, KAIFG, KASMTG,
- * KASSNG, KBACKG, KBIFG, KBLOKG,
- * KCALLG, KCFUNG, KCGOG, KCHARG,
- * KCLOSG, KCMPXG, KCOMNG, KCONTG,
- * KDATAG, KDBLEG, KDFUNG, KDIMNG,
- * KDOG, KELSEG, KELSFG, KENDFG,
- * KENDG, KENDIG, KEQIVG, KEXTLG,
- * KFORMG, KIFUNG, KIMPLG, KINQRG,
- * KINSCG, KINTEG, KLFUNG, KLIFG,
- * KLOGCG, KNONEG, KNTRYG, KOPENG,
- * KPARAG, KPAUSG, KPRNTG, KPROGG,
- * KREADG, KREALG, KRETNG, KRFUNG,
- * KSAVEG, KSFUNG, KSTOPG, KSUBRG,
- * KUFUNG, KUGOG, KWINDG, KWRITG,
- * KXFUNG, LASRTG, LCMNTG, LERRG,
- * LLINEG, LSTMTG
-
- INTEGER KAGOG,KAIFG,KASMTG,KASSNG,KBACKG,KBIFG,KBLOKG,KCALLG,
- + KCFUNG,KCGOG,KCHARG,KCLOSG,KCMPXG,KCOMNG,KCONTG,KDATAG,
- + KDBLEG,KDFUNG,KDIMNG,KDOG,KELSEG,KELSFG,KENDFG,KENDG,
- + KENDIG,KEQIVG,KEXTLG,KFORMG,KIFUNG,KIMPLG,KINQRG,KINSCG,
- + KINTEG,KLFUNG,KLIFG,KLOGCG,KNONEG,KNTRYG,KOPENG,KPARAG,
- + KPAUSG,KPRNTG,KPROGG,KREADG,KREALG,KRETNG,KRFUNG,KSAVEG,
- + KSFUNG,KSTOPG,KSUNRG,KUUNG,KUGOG,KWINDG,KWRITG,KXFUNG,
- + LASRTG,LCMNTG,LERRG,LLINEG,LSTMTG
- INTEGER KUFUNG,KSUBRG
-
- SAVE /KEYSC/
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C MAIN INTEGER STORAGE ARRAYS
- C MAXLBG = Maximum number of DO statement labels per routine
- INTEGER MAXLBG
- PARAMETER(MAXLBG=100)
- COMMON / WORKC / IABEG(201), ICRTNG(200), IPCNTG(75),
- * IRCNTG(75), ISBEG(201), ISCNTG(75), INSTG(250),
- * KEXECG(75), LABG(2,MAXLBG), KTOKG(81)
- INTEGER IABEG,ICRTNG,IPCNTG,IRCNTG,ISBEG,ISCNTG,INSTG,
- + KEXECG,LABG,KTOKG
- SAVE /WORKC/
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.4
- C---------------------------------------------------------
- C
- C TKLAST = LAST TOKEN NUMBER
- C
- INTEGER TZEOF ,TASSIG,TBACKS,TBLOCK,TCALL ,TCLOSE,TCOMMO,TCONTI,
- + TDATA ,TDO ,TDIMEN,TELSE ,TELSIF,TEND ,TENDFI,TENDIF,
- + TENTRY,TEQUIV,TEXTER,TFUNCT,TFORMA,TGOTO ,TIF ,TIMPLI,
- + TINQUI,TINTRI,TOPEN ,TPARAM,TPAUSE,TPRINT,TPROGR,TREAD ,
- + TRETUR,TREWIN,TSAVE ,TSTOP ,TSUBRO,TTHEN ,TTO ,TWRITE,
- + TINTEG,TREAL ,TDOUBL,TCOMPL,TLOGIC,TCHARA,TDCMPL,TCOMMA,
- + TEQUAL,TCOLON,TLPARN,TRPARN,TLE ,TLT ,TEQ ,TNE ,
- + TGE ,TGT ,TAND ,TOR ,TEQV ,TNEQV ,TNOT ,TSTAR ,
- + TDSTAR,TPLUS ,TMINUS,TSLASH,TCNCAT,TDCNST,TLCNST,TRCNST,
- + TPCNST,TCCNST,THCNST,TNAME ,TFIELD,TSCALE,TZEOS ,TCMMNT,
- + TFMTKD,TENDKD,TERRKD,TKLAST
- PARAMETER (TZEOF = 1,TASSIG= 2,TBACKS= 3,TBLOCK= 4,TCALL = 5,
- + TCLOSE= 6,TCOMMO= 7,TCONTI= 8,TDATA = 9,TDO =10,
- + TDIMEN=11,TELSE =12,TELSIF=13,TEND =14,TENDFI=15,
- + TENDIF=16,TENTRY=17,TEQUIV=18,TEXTER=19,TFUNCT=20,
- + TFORMA=21,TGOTO =22,TIF =23,TIMPLI=24,TINQUI=25,
- + TINTRI=26,TOPEN =27,TPARAM=28,TPAUSE=29,TPRINT=30,
- + TPROGR=31,TREAD =32,TRETUR=33,TREWIN=34,TSAVE =35,
- + TSTOP =36,TSUBRO=37,TTHEN =38,TTO =39,TWRITE=40,
- + TINTEG=41,TREAL =42,TDOUBL=43,TCOMPL=44,TLOGIC=45,
- + TCHARA=46,TDCMPL=47,TCOMMA=48,TEQUAL=49,TCOLON=50,
- + TLPARN=51,TRPARN=52,TLE =53,TLT =54,TEQ =55,
- + TNE =56,TGE =57,TGT =58,TAND =59,TOR =60,
- + TEQV =61,TNEQV =62,TNOT =63,TSTAR =64,TDSTAR=65,
- + TPLUS =66,TMINUS=67,TSLASH=68,TCNCAT=69,TDCNST=70,
- + TLCNST=71,TRCNST=72,TPCNST=73,TCCNST=74,THCNST=75,
- + TNAME =76,TFIELD=77,TSCALE=78,TZEOS =79,TCMMNT=80,
- + TFMTKD=81,TENDKD=82,TERRKD=83,TKLAST=83)
-
-
- INTEGER L
- CHARACTER*5 SEG1,SEG2,NUML
-
- CGOTOG = .TRUE.
- INST2G = 1
- C Determine segment number for 'GOTO', if required.
- IF (SEGMTG) THEN
- WRITE(NUML,9000) NMSEG
- ELSE
- NUML=' '
- END IF
- C Output instrumented statement
- CALL SEND
- C Output annotated statement
- WRITE(SEG1,9000) NMSEG+1
- WRITE(SEG2,9000) NMSEG+NARGA
- CALL WRITOK(TCMMNT,'*$AN$'//NUML//' '//SEG1//' TO '//SEG2)
- CALL OUTANS(0)
- C Output statement file records for segments
- C Ensure 'GOTO' counted with initial segment
- ISCNTG(ITYPEG) = ISCNTG(ITYPEG) + 1
- IF (NARGA.GT.0) THEN
- DO 130 L=1,NARGA
- SEGMTG = .FALSE.
- 130 CALL SEGMTS(.TRUE.)
- END IF
- ISCNTG(ITYPEG) = ISCNTG(ITYPEG) - 1
-
- 9000 FORMAT(SS,I5)
- END
- C ----------------------------------------------------------------------
- C
- C P D I M N S - Process specifications for dimensioned
- C variables.
- C
-
- SUBROUTINE PDIMNS
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C Character variables and arrays, except for dictionaries & VNAMEG
- INTEGER MAXCMG
- PARAMETER(MAXCMG=30)
- COMMON /CHARC/ IBUFFG,ICARDG,ICOMG,ISTMG,NAMEG
-
- CHARACTER IBUFFG(1326),ICARDG(72),ISTMG(1326)
- CHARACTER*6 NAMEG
- CHARACTER*72 ICOMG(MAXCMG)
-
- SAVE /CHARC/
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C CONTROL VARIABLES
- COMMON / CNTRLC / IERRG, IFTYPG, ITYPEG,
- * IUNITG, JERRG, KERRG, LABFLG,
- * LINEG, LTYPEG, NBUFFG, NTOKG,
- * NTOK2G, NTOK3G, NTOK4G, NCOMG,
- * NCRTNG, NDDICG, NEDICG, NLABG,
- * NMASRG, NMSEG, NRDICG, NRTNG,
- * NSTMG, NTREEG, NTYPEG
-
- INTEGER IERRG,IFTYPG,ITYPEG,IUNITG,JERRG,KERRG,LABFLG,LINEG,
- + LTYPEG,NBUFFG,NTOKG,NTOK2G,NTOK3G,NTOK4G,NCOMG,NCRTNG,
- + NDDICG,NEDICG,NLABG,NMASRG,NMSEG,NRDICG,NRTNG,NSTMG,
- + NTREEG,NTYPEG
-
- SAVE /CNTRLC/
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C Dictionary
- C MAXDDG = Maximum number of dimension names in dictionary
- C MAXRDG = Maximum number of routine names in dictionary
- INTEGER MAXDDG,MAXRDG
- PARAMETER(MAXDDG=150,MAXRDG=250)
- COMMON /ANDICT/ DDICTG,RDICTG
- CHARACTER*6 DDICTG(MAXDDG),RDICTG(MAXRDG)
- SAVE /ANDICT/
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- COMMON/TOKENS/TOKTYP,TOKLEN,TXTPTR,TOKEN,NTOKSS,ISTTXT,ISTPTR,
- + MAXICH
- INTEGER TOKTYP(800),TOKLEN(800),TXTPTR(800),
- + TOKEN,NTOKSS,ISTTXT(1322+800),ISTPTR(800),
- + MAXICH
-
- SAVE /TOKENS/
-
- C
- C TOKTYP = array of token types for current statement
- C TOKLEN = parallel array of lengths of associated text strings
- C TXTPTR = parallel array of pointers into ISTMG character array of text
- C TOKEN = Current token number within statement being processed
- C NTOKSS = Number of tokens in statement
- C ISTTXT = IST text of token as read in before being converted by ZTOKTX
- C ISTPTR = parallel array (to TOKTYP) of pointers into ISTTXT
- C MAXICH = Last character used in ISTTXT array
- C
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.4
- C---------------------------------------------------------
- C
- C TKLAST = LAST TOKEN NUMBER
- C
- INTEGER TZEOF ,TASSIG,TBACKS,TBLOCK,TCALL ,TCLOSE,TCOMMO,TCONTI,
- + TDATA ,TDO ,TDIMEN,TELSE ,TELSIF,TEND ,TENDFI,TENDIF,
- + TENTRY,TEQUIV,TEXTER,TFUNCT,TFORMA,TGOTO ,TIF ,TIMPLI,
- + TINQUI,TINTRI,TOPEN ,TPARAM,TPAUSE,TPRINT,TPROGR,TREAD ,
- + TRETUR,TREWIN,TSAVE ,TSTOP ,TSUBRO,TTHEN ,TTO ,TWRITE,
- + TINTEG,TREAL ,TDOUBL,TCOMPL,TLOGIC,TCHARA,TDCMPL,TCOMMA,
- + TEQUAL,TCOLON,TLPARN,TRPARN,TLE ,TLT ,TEQ ,TNE ,
- + TGE ,TGT ,TAND ,TOR ,TEQV ,TNEQV ,TNOT ,TSTAR ,
- + TDSTAR,TPLUS ,TMINUS,TSLASH,TCNCAT,TDCNST,TLCNST,TRCNST,
- + TPCNST,TCCNST,THCNST,TNAME ,TFIELD,TSCALE,TZEOS ,TCMMNT,
- + TFMTKD,TENDKD,TERRKD,TKLAST
- PARAMETER (TZEOF = 1,TASSIG= 2,TBACKS= 3,TBLOCK= 4,TCALL = 5,
- + TCLOSE= 6,TCOMMO= 7,TCONTI= 8,TDATA = 9,TDO =10,
- + TDIMEN=11,TELSE =12,TELSIF=13,TEND =14,TENDFI=15,
- + TENDIF=16,TENTRY=17,TEQUIV=18,TEXTER=19,TFUNCT=20,
- + TFORMA=21,TGOTO =22,TIF =23,TIMPLI=24,TINQUI=25,
- + TINTRI=26,TOPEN =27,TPARAM=28,TPAUSE=29,TPRINT=30,
- + TPROGR=31,TREAD =32,TRETUR=33,TREWIN=34,TSAVE =35,
- + TSTOP =36,TSUBRO=37,TTHEN =38,TTO =39,TWRITE=40,
- + TINTEG=41,TREAL =42,TDOUBL=43,TCOMPL=44,TLOGIC=45,
- + TCHARA=46,TDCMPL=47,TCOMMA=48,TEQUAL=49,TCOLON=50,
- + TLPARN=51,TRPARN=52,TLE =53,TLT =54,TEQ =55,
- + TNE =56,TGE =57,TGT =58,TAND =59,TOR =60,
- + TEQV =61,TNEQV =62,TNOT =63,TSTAR =64,TDSTAR=65,
- + TPLUS =66,TMINUS=67,TSLASH=68,TCNCAT=69,TDCNST=70,
- + TLCNST=71,TRCNST=72,TPCNST=73,TCCNST=74,THCNST=75,
- + TNAME =76,TFIELD=77,TSCALE=78,TZEOS =79,TCMMNT=80,
- + TFMTKD=81,TENDKD=82,TERRKD=83,TKLAST=83)
-
-
- INTEGER JTOK,LOCL
- CHARACTER*6 NAMEL
-
- LOCL=1
- C Find a left parenthesis
- C (This relies on the last token in the stmt not being a TLPARN token;
- C this is true even in illegal Fortran because the last token is always
- C a TZEOS token).
- JTOK = NTOKG
- 100 JTOK = JTOK + 1
- IF (TOKTYP(JTOK).NE.TLPARN .AND. JTOK.LT.NTOKSS) GOTO 100
- IF (TOKTYP(JTOK).EQ.TLPARN) THEN
- NAMEL=' '
- IF (TOKTYP(JTOK-1).EQ.TNAME)
- + CALL ZITOF(ISTTXT(ISTPTR(JTOK-1)),1,6,NAMEL,.FALSE.)
- IF (NAMEL.NE.' ')
- + CALL NSAVES(NAMEL,DDICTG,NDDICG,MAXDDG,LOCL)
- IF (LOCL.GT.0) THEN
- C Name saved, keep going.
- GOTO 100
- ELSE
- C Dictionary overflow.
- CALL ERRORS(13)
- END IF
- END IF
- C Output statement
- CALL OUTS
-
- END
- C ----------------------------------------------------------------------
- C
- C P D O S - Process do statements
- C
-
- SUBROUTINE PDOS
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C CONTROL VARIABLES
- COMMON / CNTRLC / IERRG, IFTYPG, ITYPEG,
- * IUNITG, JERRG, KERRG, LABFLG,
- * LINEG, LTYPEG, NBUFFG, NTOKG,
- * NTOK2G, NTOK3G, NTOK4G, NCOMG,
- * NCRTNG, NDDICG, NEDICG, NLABG,
- * NMASRG, NMSEG, NRDICG, NRTNG,
- * NSTMG, NTREEG, NTYPEG
-
- INTEGER IERRG,IFTYPG,ITYPEG,IUNITG,JERRG,KERRG,LABFLG,LINEG,
- + LTYPEG,NBUFFG,NTOKG,NTOK2G,NTOK3G,NTOK4G,NCOMG,NCRTNG,
- + NDDICG,NEDICG,NLABG,NMASRG,NMSEG,NRDICG,NRTNG,NSTMG,
- + NTREEG,NTYPEG
-
- SAVE /CNTRLC/
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- COMMON/TOKENS/TOKTYP,TOKLEN,TXTPTR,TOKEN,NTOKSS,ISTTXT,ISTPTR,
- + MAXICH
- INTEGER TOKTYP(800),TOKLEN(800),TXTPTR(800),
- + TOKEN,NTOKSS,ISTTXT(1322+800),ISTPTR(800),
- + MAXICH
-
- SAVE /TOKENS/
-
- C
- C TOKTYP = array of token types for current statement
- C TOKLEN = parallel array of lengths of associated text strings
- C TXTPTR = parallel array of pointers into ISTMG character array of text
- C TOKEN = Current token number within statement being processed
- C NTOKSS = Number of tokens in statement
- C ISTTXT = IST text of token as read in before being converted by ZTOKTX
- C ISTPTR = parallel array (to TOKTYP) of pointers into ISTTXT
- C MAXICH = Last character used in ISTTXT array
- C
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C MAIN INTEGER STORAGE ARRAYS
- C MAXLBG = Maximum number of DO statement labels per routine
- INTEGER MAXLBG
- PARAMETER(MAXLBG=100)
- COMMON / WORKC / IABEG(201), ICRTNG(200), IPCNTG(75),
- * IRCNTG(75), ISBEG(201), ISCNTG(75), INSTG(250),
- * KEXECG(75), LABG(2,MAXLBG), KTOKG(81)
- INTEGER IABEG,ICRTNG,IPCNTG,IRCNTG,ISBEG,ISCNTG,INSTG,
- + KEXECG,LABG,KTOKG
- SAVE /WORKC/
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.4
- C---------------------------------------------------------
- C
- C TKLAST = LAST TOKEN NUMBER
- C
- INTEGER TZEOF ,TASSIG,TBACKS,TBLOCK,TCALL ,TCLOSE,TCOMMO,TCONTI,
- + TDATA ,TDO ,TDIMEN,TELSE ,TELSIF,TEND ,TENDFI,TENDIF,
- + TENTRY,TEQUIV,TEXTER,TFUNCT,TFORMA,TGOTO ,TIF ,TIMPLI,
- + TINQUI,TINTRI,TOPEN ,TPARAM,TPAUSE,TPRINT,TPROGR,TREAD ,
- + TRETUR,TREWIN,TSAVE ,TSTOP ,TSUBRO,TTHEN ,TTO ,TWRITE,
- + TINTEG,TREAL ,TDOUBL,TCOMPL,TLOGIC,TCHARA,TDCMPL,TCOMMA,
- + TEQUAL,TCOLON,TLPARN,TRPARN,TLE ,TLT ,TEQ ,TNE ,
- + TGE ,TGT ,TAND ,TOR ,TEQV ,TNEQV ,TNOT ,TSTAR ,
- + TDSTAR,TPLUS ,TMINUS,TSLASH,TCNCAT,TDCNST,TLCNST,TRCNST,
- + TPCNST,TCCNST,THCNST,TNAME ,TFIELD,TSCALE,TZEOS ,TCMMNT,
- + TFMTKD,TENDKD,TERRKD,TKLAST
- PARAMETER (TZEOF = 1,TASSIG= 2,TBACKS= 3,TBLOCK= 4,TCALL = 5,
- + TCLOSE= 6,TCOMMO= 7,TCONTI= 8,TDATA = 9,TDO =10,
- + TDIMEN=11,TELSE =12,TELSIF=13,TEND =14,TENDFI=15,
- + TENDIF=16,TENTRY=17,TEQUIV=18,TEXTER=19,TFUNCT=20,
- + TFORMA=21,TGOTO =22,TIF =23,TIMPLI=24,TINQUI=25,
- + TINTRI=26,TOPEN =27,TPARAM=28,TPAUSE=29,TPRINT=30,
- + TPROGR=31,TREAD =32,TRETUR=33,TREWIN=34,TSAVE =35,
- + TSTOP =36,TSUBRO=37,TTHEN =38,TTO =39,TWRITE=40,
- + TINTEG=41,TREAL =42,TDOUBL=43,TCOMPL=44,TLOGIC=45,
- + TCHARA=46,TDCMPL=47,TCOMMA=48,TEQUAL=49,TCOLON=50,
- + TLPARN=51,TRPARN=52,TLE =53,TLT =54,TEQ =55,
- + TNE =56,TGE =57,TGT =58,TAND =59,TOR =60,
- + TEQV =61,TNEQV =62,TNOT =63,TSTAR =64,TDSTAR=65,
- + TPLUS =66,TMINUS=67,TSLASH=68,TCNCAT=69,TDCNST=70,
- + TLCNST=71,TRCNST=72,TPCNST=73,TCCNST=74,THCNST=75,
- + TNAME =76,TFIELD=77,TSCALE=78,TZEOS =79,TCMMNT=80,
- + TFMTKD=81,TENDKD=82,TERRKD=83,TKLAST=83)
-
-
- INTEGER POINT,LABEL,L
-
- INTEGER CTOI
- EXTERNAL CTOI
-
- C If room left in storage, get DO-end label
- IF (NLABG.LT.MAXLBG) THEN
- IF (TOKTYP(NTOKG).NE.TDCNST) CALL ERROR('PDOS WRONG')
- POINT=1
- LABEL=CTOI(ISTTXT(ISTPTR(NTOKG)),POINT)
- C Ensure DO-end label has not been seen before
- IF (NLABG.GT.0) THEN
- DO 100 L=1,NLABG
- 100 IF (LABG(1,L).EQ.LABEL) GOTO 200
- END IF
- C Save DO-end label and current segment number
- NLABG = NLABG + 1
- LABG(1,NLABG) = LABEL
- LABG(2,NLABG) = NMSEG + 1
- ELSE
- C Too many nested DO-loops
- CALL ERRORS(17)
- END IF
- C Output statement
- 200 CALL OUTS
-
- END
- C ----------------------------------------------------------------------
- C
- C P E L S F S - Process ELSEIF statements
- C
-
- SUBROUTINE PELSFS
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C CONTROL VARIABLES
- COMMON / CNTRLC / IERRG, IFTYPG, ITYPEG,
- * IUNITG, JERRG, KERRG, LABFLG,
- * LINEG, LTYPEG, NBUFFG, NTOKG,
- * NTOK2G, NTOK3G, NTOK4G, NCOMG,
- * NCRTNG, NDDICG, NEDICG, NLABG,
- * NMASRG, NMSEG, NRDICG, NRTNG,
- * NSTMG, NTREEG, NTYPEG
-
- INTEGER IERRG,IFTYPG,ITYPEG,IUNITG,JERRG,KERRG,LABFLG,LINEG,
- + LTYPEG,NBUFFG,NTOKG,NTOK2G,NTOK3G,NTOK4G,NCOMG,NCRTNG,
- + NDDICG,NEDICG,NLABG,NMASRG,NMSEG,NRDICG,NRTNG,NSTMG,
- + NTREEG,NTYPEG
-
- SAVE /CNTRLC/
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C ROUTINE INSTRUMENTATION FLAGS
- COMMON / INSTC / INST1G, INST2G, INST3G
-
- INTEGER INST1G,INST2G,INST3G
-
- SAVE /INSTC/
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C LOGICAL VARIABLES
- COMMON / LOGIC / ARITHG, ASSRTG, BLKDTG,
- * CARD1G, CGOTOG, ENTRYG, EXECG,
- * HISTG, IEOFG, IFDOG, INSRTG,
- * MAING, SEGMTG, STOPG, TRACEG,
- * TREEG
- LOGICAL ARITHG, ASSRTG, BLKDTG, CARD1G,
- * CGOTOG, ENTRYG, EXECG, HISTG,
- * IEOFG, IFDOG, INSRTG, MAING,
- * SEGMTG, STOPG, TRACEG, TREEG
-
- SAVE /LOGIC/
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- COMMON/TOKENS/TOKTYP,TOKLEN,TXTPTR,TOKEN,NTOKSS,ISTTXT,ISTPTR,
- + MAXICH
- INTEGER TOKTYP(800),TOKLEN(800),TXTPTR(800),
- + TOKEN,NTOKSS,ISTTXT(1322+800),ISTPTR(800),
- + MAXICH
-
- SAVE /TOKENS/
-
- C
- C TOKTYP = array of token types for current statement
- C TOKLEN = parallel array of lengths of associated text strings
- C TXTPTR = parallel array of pointers into ISTMG character array of text
- C TOKEN = Current token number within statement being processed
- C NTOKSS = Number of tokens in statement
- C ISTTXT = IST text of token as read in before being converted by ZTOKTX
- C ISTPTR = parallel array (to TOKTYP) of pointers into ISTTXT
- C MAXICH = Last character used in ISTTXT array
- C
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- COMMON/ANVNAM/VNAMEG
- CHARACTER*5 VNAMEG
- SAVE/ANVNAM/
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C MAIN INTEGER STORAGE ARRAYS
- C MAXLBG = Maximum number of DO statement labels per routine
- INTEGER MAXLBG
- PARAMETER(MAXLBG=100)
- COMMON / WORKC / IABEG(201), ICRTNG(200), IPCNTG(75),
- * IRCNTG(75), ISBEG(201), ISCNTG(75), INSTG(250),
- * KEXECG(75), LABG(2,MAXLBG), KTOKG(81)
- INTEGER IABEG,ICRTNG,IPCNTG,IRCNTG,ISBEG,ISCNTG,INSTG,
- + KEXECG,LABG,KTOKG
- SAVE /WORKC/
-
- C Balance parentheses
- CALL BALPRT(NTOKG,NTOK2G)
- IF (NTOK2G.GT.0) THEN
- IF (.NOT.SEGMTG) CALL SEGMTS(.TRUE.)
- C Send initial section of statement
- CALL SENDCH(' ELSEIF(L'//VNAMEG//'(')
- C Pack conditional portion of 'ELSEIF'
- CALL SENDTK(NTOKG,NTOK2G)
- C Pack constants
- CALL SENDCH(',')
- CALL SENDI(NMSEG)
- C And finish it off
- CALL SENDCH(',0))THEN')
- C Output instrumented statement
- IFDOG = .TRUE.
- INST3G = 1
- CALL SEND
- C Output annotated statement
- CALL OUTANS(NMSEG)
- ELSE
- C Unbalanced parentheses
- CALL ERRORS(12)
- CALL OUTANS(0)
- CALL INSOUT
- END IF
-
- END
- C ----------------------------------------------------------------------
- C
- C P E N D S - Process 'END' statements
- C
-
- SUBROUTINE PENDS
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C CONTROL VARIABLES
- COMMON / CNTRLC / IERRG, IFTYPG, ITYPEG,
- * IUNITG, JERRG, KERRG, LABFLG,
- * LINEG, LTYPEG, NBUFFG, NTOKG,
- * NTOK2G, NTOK3G, NTOK4G, NCOMG,
- * NCRTNG, NDDICG, NEDICG, NLABG,
- * NMASRG, NMSEG, NRDICG, NRTNG,
- * NSTMG, NTREEG, NTYPEG
-
- INTEGER IERRG,IFTYPG,ITYPEG,IUNITG,JERRG,KERRG,LABFLG,LINEG,
- + LTYPEG,NBUFFG,NTOKG,NTOK2G,NTOK3G,NTOK4G,NCOMG,NCRTNG,
- + NDDICG,NEDICG,NLABG,NMASRG,NMSEG,NRDICG,NRTNG,NSTMG,
- + NTREEG,NTYPEG
-
- SAVE /CNTRLC/
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C KEYWORD ID VARIABLES
- COMMON / KEYSC / KAGOG, KAIFG, KASMTG,
- * KASSNG, KBACKG, KBIFG, KBLOKG,
- * KCALLG, KCFUNG, KCGOG, KCHARG,
- * KCLOSG, KCMPXG, KCOMNG, KCONTG,
- * KDATAG, KDBLEG, KDFUNG, KDIMNG,
- * KDOG, KELSEG, KELSFG, KENDFG,
- * KENDG, KENDIG, KEQIVG, KEXTLG,
- * KFORMG, KIFUNG, KIMPLG, KINQRG,
- * KINSCG, KINTEG, KLFUNG, KLIFG,
- * KLOGCG, KNONEG, KNTRYG, KOPENG,
- * KPARAG, KPAUSG, KPRNTG, KPROGG,
- * KREADG, KREALG, KRETNG, KRFUNG,
- * KSAVEG, KSFUNG, KSTOPG, KSUBRG,
- * KUFUNG, KUGOG, KWINDG, KWRITG,
- * KXFUNG, LASRTG, LCMNTG, LERRG,
- * LLINEG, LSTMTG
-
- INTEGER KAGOG,KAIFG,KASMTG,KASSNG,KBACKG,KBIFG,KBLOKG,KCALLG,
- + KCFUNG,KCGOG,KCHARG,KCLOSG,KCMPXG,KCOMNG,KCONTG,KDATAG,
- + KDBLEG,KDFUNG,KDIMNG,KDOG,KELSEG,KELSFG,KENDFG,KENDG,
- + KENDIG,KEQIVG,KEXTLG,KFORMG,KIFUNG,KIMPLG,KINQRG,KINSCG,
- + KINTEG,KLFUNG,KLIFG,KLOGCG,KNONEG,KNTRYG,KOPENG,KPARAG,
- + KPAUSG,KPRNTG,KPROGG,KREADG,KREALG,KRETNG,KRFUNG,KSAVEG,
- + KSFUNG,KSTOPG,KSUNRG,KUUNG,KUGOG,KWINDG,KWRITG,KXFUNG,
- + LASRTG,LCMNTG,LERRG,LLINEG,LSTMTG
- INTEGER KUFUNG,KSUBRG
-
- SAVE /KEYSC/
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C LOGICAL VARIABLES
- COMMON / LOGIC / ARITHG, ASSRTG, BLKDTG,
- * CARD1G, CGOTOG, ENTRYG, EXECG,
- * HISTG, IEOFG, IFDOG, INSRTG,
- * MAING, SEGMTG, STOPG, TRACEG,
- * TREEG
- LOGICAL ARITHG, ASSRTG, BLKDTG, CARD1G,
- * CGOTOG, ENTRYG, EXECG, HISTG,
- * IEOFG, IFDOG, INSRTG, MAING,
- * SEGMTG, STOPG, TRACEG, TREEG
-
- SAVE /LOGIC/
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- COMMON/ANVNAM/VNAMEG
- CHARACTER*5 VNAMEG
- SAVE/ANVNAM/
-
- IF (SEGMTG) THEN
- C 'END' starts segment. Output segment and annotated statement.
- CALL OUTSGS(NMSEG)
- CALL OUTANS(NMSEG)
- ELSE
- C Output un-annotated statement
- CALL OUTANS(0)
- END IF
- C If 'END' may be executed in main routine, add call to wrapup routine,
- C ... and say we have found a stopping point (prevents error message)
- IF (MAING) THEN
- IF ((LTYPEG.NE.KUGOG .AND. LTYPEG.NE.KAGOG .AND.
- + LTYPEG.NE.KAIFG .AND. LTYPEG.NE.KSTOPG) .OR.
- + LABFLG.GT.0) THEN
- CALL SENDCH(' CALL R'//VNAMEG)
- CALL SEND
- STOPG=.TRUE.
- END IF
- END IF
- C Output instrumented statement
- CALL UNLABL
- CALL INSOUT
- C Output last segment record to summary file
- CALL RDONES
- SEGMTG = .FALSE.
-
- END
- C ----------------------------------------------------------------------
- C
- C P I O S - Process input/output statements
- C
-
- SUBROUTINE PIOS
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C Character variables and arrays, except for dictionaries & VNAMEG
- INTEGER MAXCMG
- PARAMETER(MAXCMG=30)
- COMMON /CHARC/ IBUFFG,ICARDG,ICOMG,ISTMG,NAMEG
-
- CHARACTER IBUFFG(1326),ICARDG(72),ISTMG(1326)
- CHARACTER*6 NAMEG
- CHARACTER*72 ICOMG(MAXCMG)
-
- SAVE /CHARC/
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C CONTROL VARIABLES
- COMMON / CNTRLC / IERRG, IFTYPG, ITYPEG,
- * IUNITG, JERRG, KERRG, LABFLG,
- * LINEG, LTYPEG, NBUFFG, NTOKG,
- * NTOK2G, NTOK3G, NTOK4G, NCOMG,
- * NCRTNG, NDDICG, NEDICG, NLABG,
- * NMASRG, NMSEG, NRDICG, NRTNG,
- * NSTMG, NTREEG, NTYPEG
-
- INTEGER IERRG,IFTYPG,ITYPEG,IUNITG,JERRG,KERRG,LABFLG,LINEG,
- + LTYPEG,NBUFFG,NTOKG,NTOK2G,NTOK3G,NTOK4G,NCOMG,NCRTNG,
- + NDDICG,NEDICG,NLABG,NMASRG,NMSEG,NRDICG,NRTNG,NSTMG,
- + NTREEG,NTYPEG
-
- SAVE /CNTRLC/
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C KEYWORD ID VARIABLES
- COMMON / KEYSC / KAGOG, KAIFG, KASMTG,
- * KASSNG, KBACKG, KBIFG, KBLOKG,
- * KCALLG, KCFUNG, KCGOG, KCHARG,
- * KCLOSG, KCMPXG, KCOMNG, KCONTG,
- * KDATAG, KDBLEG, KDFUNG, KDIMNG,
- * KDOG, KELSEG, KELSFG, KENDFG,
- * KENDG, KENDIG, KEQIVG, KEXTLG,
- * KFORMG, KIFUNG, KIMPLG, KINQRG,
- * KINSCG, KINTEG, KLFUNG, KLIFG,
- * KLOGCG, KNONEG, KNTRYG, KOPENG,
- * KPARAG, KPAUSG, KPRNTG, KPROGG,
- * KREADG, KREALG, KRETNG, KRFUNG,
- * KSAVEG, KSFUNG, KSTOPG, KSUBRG,
- * KUFUNG, KUGOG, KWINDG, KWRITG,
- * KXFUNG, LASRTG, LCMNTG, LERRG,
- * LLINEG, LSTMTG
-
- INTEGER KAGOG,KAIFG,KASMTG,KASSNG,KBACKG,KBIFG,KBLOKG,KCALLG,
- + KCFUNG,KCGOG,KCHARG,KCLOSG,KCMPXG,KCOMNG,KCONTG,KDATAG,
- + KDBLEG,KDFUNG,KDIMNG,KDOG,KELSEG,KELSFG,KENDFG,KENDG,
- + KENDIG,KEQIVG,KEXTLG,KFORMG,KIFUNG,KIMPLG,KINQRG,KINSCG,
- + KINTEG,KLFUNG,KLIFG,KLOGCG,KNONEG,KNTRYG,KOPENG,KPARAG,
- + KPAUSG,KPRNTG,KPROGG,KREADG,KREALG,KRETNG,KRFUNG,KSAVEG,
- + KSFUNG,KSTOPG,KSUNRG,KUUNG,KUGOG,KWINDG,KWRITG,KXFUNG,
- + LASRTG,LCMNTG,LERRG,LLINEG,LSTMTG
- INTEGER KUFUNG,KSUBRG
-
- SAVE /KEYSC/
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C LOGICAL VARIABLES
- COMMON / LOGIC / ARITHG, ASSRTG, BLKDTG,
- * CARD1G, CGOTOG, ENTRYG, EXECG,
- * HISTG, IEOFG, IFDOG, INSRTG,
- * MAING, SEGMTG, STOPG, TRACEG,
- * TREEG
- LOGICAL ARITHG, ASSRTG, BLKDTG, CARD1G,
- * CGOTOG, ENTRYG, EXECG, HISTG,
- * IEOFG, IFDOG, INSRTG, MAING,
- * SEGMTG, STOPG, TRACEG, TREEG
-
- SAVE /LOGIC/
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- COMMON/TOKENS/TOKTYP,TOKLEN,TXTPTR,TOKEN,NTOKSS,ISTTXT,ISTPTR,
- + MAXICH
- INTEGER TOKTYP(800),TOKLEN(800),TXTPTR(800),
- + TOKEN,NTOKSS,ISTTXT(1322+800),ISTPTR(800),
- + MAXICH
-
- SAVE /TOKENS/
-
- C
- C TOKTYP = array of token types for current statement
- C TOKLEN = parallel array of lengths of associated text strings
- C TXTPTR = parallel array of pointers into ISTMG character array of text
- C TOKEN = Current token number within statement being processed
- C NTOKSS = Number of tokens in statement
- C ISTTXT = IST text of token as read in before being converted by ZTOKTX
- C ISTPTR = parallel array (to TOKTYP) of pointers into ISTTXT
- C MAXICH = Last character used in ISTTXT array
- C
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C MAIN INTEGER STORAGE ARRAYS
- C MAXLBG = Maximum number of DO statement labels per routine
- INTEGER MAXLBG
- PARAMETER(MAXLBG=100)
- COMMON / WORKC / IABEG(201), ICRTNG(200), IPCNTG(75),
- * IRCNTG(75), ISBEG(201), ISCNTG(75), INSTG(250),
- * KEXECG(75), LABG(2,MAXLBG), KTOKG(81)
- INTEGER IABEG,ICRTNG,IPCNTG,IRCNTG,ISBEG,ISCNTG,INSTG,
- + KEXECG,LABG,KTOKG
- SAVE /WORKC/
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.4
- C---------------------------------------------------------
- C
- C TKLAST = LAST TOKEN NUMBER
- C
- INTEGER TZEOF ,TASSIG,TBACKS,TBLOCK,TCALL ,TCLOSE,TCOMMO,TCONTI,
- + TDATA ,TDO ,TDIMEN,TELSE ,TELSIF,TEND ,TENDFI,TENDIF,
- + TENTRY,TEQUIV,TEXTER,TFUNCT,TFORMA,TGOTO ,TIF ,TIMPLI,
- + TINQUI,TINTRI,TOPEN ,TPARAM,TPAUSE,TPRINT,TPROGR,TREAD ,
- + TRETUR,TREWIN,TSAVE ,TSTOP ,TSUBRO,TTHEN ,TTO ,TWRITE,
- + TINTEG,TREAL ,TDOUBL,TCOMPL,TLOGIC,TCHARA,TDCMPL,TCOMMA,
- + TEQUAL,TCOLON,TLPARN,TRPARN,TLE ,TLT ,TEQ ,TNE ,
- + TGE ,TGT ,TAND ,TOR ,TEQV ,TNEQV ,TNOT ,TSTAR ,
- + TDSTAR,TPLUS ,TMINUS,TSLASH,TCNCAT,TDCNST,TLCNST,TRCNST,
- + TPCNST,TCCNST,THCNST,TNAME ,TFIELD,TSCALE,TZEOS ,TCMMNT,
- + TFMTKD,TENDKD,TERRKD,TKLAST
- PARAMETER (TZEOF = 1,TASSIG= 2,TBACKS= 3,TBLOCK= 4,TCALL = 5,
- + TCLOSE= 6,TCOMMO= 7,TCONTI= 8,TDATA = 9,TDO =10,
- + TDIMEN=11,TELSE =12,TELSIF=13,TEND =14,TENDFI=15,
- + TENDIF=16,TENTRY=17,TEQUIV=18,TEXTER=19,TFUNCT=20,
- + TFORMA=21,TGOTO =22,TIF =23,TIMPLI=24,TINQUI=25,
- + TINTRI=26,TOPEN =27,TPARAM=28,TPAUSE=29,TPRINT=30,
- + TPROGR=31,TREAD =32,TRETUR=33,TREWIN=34,TSAVE =35,
- + TSTOP =36,TSUBRO=37,TTHEN =38,TTO =39,TWRITE=40,
- + TINTEG=41,TREAL =42,TDOUBL=43,TCOMPL=44,TLOGIC=45,
- + TCHARA=46,TDCMPL=47,TCOMMA=48,TEQUAL=49,TCOLON=50,
- + TLPARN=51,TRPARN=52,TLE =53,TLT =54,TEQ =55,
- + TNE =56,TGE =57,TGT =58,TAND =59,TOR =60,
- + TEQV =61,TNEQV =62,TNOT =63,TSTAR =64,TDSTAR=65,
- + TPLUS =66,TMINUS=67,TSLASH=68,TCNCAT=69,TDCNST=70,
- + TLCNST=71,TRCNST=72,TPCNST=73,TCCNST=74,THCNST=75,
- + TNAME =76,TFIELD=77,TSCALE=78,TZEOS =79,TCMMNT=80,
- + TFMTKD=81,TENDKD=82,TERRKD=83,TKLAST=83)
-
-
- INTEGER I
-
- C Output statement
- CALL OUTS
- SEGMTG = .FALSE.
- DO 100 I=NTOKG,NTOKSS
- IF (TOKTYP(I).EQ.TENDKD .OR. TOKTYP(I).EQ.TERRKD) THEN
- C END= or ERR= found
- C Start segment after current statement.
- ISCNTG(ITYPEG) = ISCNTG(ITYPEG) + 1
- CALL SEGMTS(.TRUE.)
- ISCNTG(ITYPEG) = ISCNTG(ITYPEG) - 1
- END IF
- 100 CONTINUE
-
- END
- C ----------------------------------------------------------------------
- C
- C P L I F S - Process logical if statements
- C
-
- SUBROUTINE PLIFS
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C Character variables and arrays, except for dictionaries & VNAMEG
- INTEGER MAXCMG
- PARAMETER(MAXCMG=30)
- COMMON /CHARC/ IBUFFG,ICARDG,ICOMG,ISTMG,NAMEG
-
- CHARACTER IBUFFG(1326),ICARDG(72),ISTMG(1326)
- CHARACTER*6 NAMEG
- CHARACTER*72 ICOMG(MAXCMG)
-
- SAVE /CHARC/
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C LOGICAL VARIABLES
- COMMON / LOGIC / ARITHG, ASSRTG, BLKDTG,
- * CARD1G, CGOTOG, ENTRYG, EXECG,
- * HISTG, IEOFG, IFDOG, INSRTG,
- * MAING, SEGMTG, STOPG, TRACEG,
- * TREEG
- LOGICAL ARITHG, ASSRTG, BLKDTG, CARD1G,
- * CGOTOG, ENTRYG, EXECG, HISTG,
- * IEOFG, IFDOG, INSRTG, MAING,
- * SEGMTG, STOPG, TRACEG, TREEG
-
- SAVE /LOGIC/
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C CONTROL VARIABLES
- COMMON / CNTRLC / IERRG, IFTYPG, ITYPEG,
- * IUNITG, JERRG, KERRG, LABFLG,
- * LINEG, LTYPEG, NBUFFG, NTOKG,
- * NTOK2G, NTOK3G, NTOK4G, NCOMG,
- * NCRTNG, NDDICG, NEDICG, NLABG,
- * NMASRG, NMSEG, NRDICG, NRTNG,
- * NSTMG, NTREEG, NTYPEG
-
- INTEGER IERRG,IFTYPG,ITYPEG,IUNITG,JERRG,KERRG,LABFLG,LINEG,
- + LTYPEG,NBUFFG,NTOKG,NTOK2G,NTOK3G,NTOK4G,NCOMG,NCRTNG,
- + NDDICG,NEDICG,NLABG,NMASRG,NMSEG,NRDICG,NRTNG,NSTMG,
- + NTREEG,NTYPEG
-
- SAVE /CNTRLC/
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C KEYWORD ID VARIABLES
- COMMON / KEYSC / KAGOG, KAIFG, KASMTG,
- * KASSNG, KBACKG, KBIFG, KBLOKG,
- * KCALLG, KCFUNG, KCGOG, KCHARG,
- * KCLOSG, KCMPXG, KCOMNG, KCONTG,
- * KDATAG, KDBLEG, KDFUNG, KDIMNG,
- * KDOG, KELSEG, KELSFG, KENDFG,
- * KENDG, KENDIG, KEQIVG, KEXTLG,
- * KFORMG, KIFUNG, KIMPLG, KINQRG,
- * KINSCG, KINTEG, KLFUNG, KLIFG,
- * KLOGCG, KNONEG, KNTRYG, KOPENG,
- * KPARAG, KPAUSG, KPRNTG, KPROGG,
- * KREADG, KREALG, KRETNG, KRFUNG,
- * KSAVEG, KSFUNG, KSTOPG, KSUBRG,
- * KUFUNG, KUGOG, KWINDG, KWRITG,
- * KXFUNG, LASRTG, LCMNTG, LERRG,
- * LLINEG, LSTMTG
-
- INTEGER KAGOG,KAIFG,KASMTG,KASSNG,KBACKG,KBIFG,KBLOKG,KCALLG,
- + KCFUNG,KCGOG,KCHARG,KCLOSG,KCMPXG,KCOMNG,KCONTG,KDATAG,
- + KDBLEG,KDFUNG,KDIMNG,KDOG,KELSEG,KELSFG,KENDFG,KENDG,
- + KENDIG,KEQIVG,KEXTLG,KFORMG,KIFUNG,KIMPLG,KINQRG,KINSCG,
- + KINTEG,KLFUNG,KLIFG,KLOGCG,KNONEG,KNTRYG,KOPENG,KPARAG,
- + KPAUSG,KPRNTG,KPROGG,KREADG,KREALG,KRETNG,KRFUNG,KSAVEG,
- + KSFUNG,KSTOPG,KSUNRG,KUUNG,KUGOG,KWINDG,KWRITG,KXFUNG,
- + LASRTG,LCMNTG,LERRG,LLINEG,LSTMTG
- INTEGER KUFUNG,KSUBRG
-
- SAVE /KEYSC/
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C MAIN INTEGER STORAGE ARRAYS
- C MAXLBG = Maximum number of DO statement labels per routine
- INTEGER MAXLBG
- PARAMETER(MAXLBG=100)
- COMMON / WORKC / IABEG(201), ICRTNG(200), IPCNTG(75),
- * IRCNTG(75), ISBEG(201), ISCNTG(75), INSTG(250),
- * KEXECG(75), LABG(2,MAXLBG), KTOKG(81)
- INTEGER IABEG,ICRTNG,IPCNTG,IRCNTG,ISBEG,ISCNTG,INSTG,
- + KEXECG,LABG,KTOKG
- SAVE /WORKC/
-
- INTEGER NUL
- CHARACTER*6 NAMEL
-
- CHARACTER*6 NAME
-
- IF (IFTYPG.EQ.KCGOG .OR. IFTYPG.EQ.KAIFG) THEN
- C Arithmetic IF or computed GOTO consequence
- NBUFFG=0
- CALL SENDCH(' ')
- IF (LABFLG.EQ.2 .AND. SEGMTG) THEN
- C End of active DO-loop
- CALL IFDOS(NMSEG,0)
- ELSE
- C Other. Logical function insertion not required.
- CALL SENDTK(NTOKG-1,NTOK2G)
- END IF
- IF (IFTYPG .EQ. KCGOG) THEN
- CALL PCGOS(NTOK2G+1,NTOK3G)
- ELSE
- CALL PAIFS(NTOK3G,NTOK4G)
- END IF
- ELSE IF (LABFLG .EQ. 2) THEN
- C 'IF' at end of DO-loop
- ISCNTG(ITYPEG) = ISCNTG(ITYPEG) + 1
- IF (SEGMTG) THEN
- C Active DO-loop. 'IF' test is segment.
- CALL IFENDS(NMSEG,NMSEG+1)
- ELSE
- C Inactive DO-loop. 'IF' test is not segment.
- CALL IFENDS(0,NMSEG+1)
- END IF
- SEGMTG = .FALSE.
- CALL SEGMTS(.TRUE.)
- ISCNTG(ITYPEG) = ISCNTG(ITYPEG) - 1
- ELSE
- C Other IF consequence - use block instrumentation of 'IF'
- CALL IFBLKS
- END IF
-
- END
- C ----------------------------------------------------------------------
- C
- C P N T R Y S - Process ENTRY statements
- C
-
- SUBROUTINE PNTRYS
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C CONTROL VARIABLES
- COMMON / CNTRLC / IERRG, IFTYPG, ITYPEG,
- * IUNITG, JERRG, KERRG, LABFLG,
- * LINEG, LTYPEG, NBUFFG, NTOKG,
- * NTOK2G, NTOK3G, NTOK4G, NCOMG,
- * NCRTNG, NDDICG, NEDICG, NLABG,
- * NMASRG, NMSEG, NRDICG, NRTNG,
- * NSTMG, NTREEG, NTYPEG
-
- INTEGER IERRG,IFTYPG,ITYPEG,IUNITG,JERRG,KERRG,LABFLG,LINEG,
- + LTYPEG,NBUFFG,NTOKG,NTOK2G,NTOK3G,NTOK4G,NCOMG,NCRTNG,
- + NDDICG,NEDICG,NLABG,NMASRG,NMSEG,NRDICG,NRTNG,NSTMG,
- + NTREEG,NTYPEG
-
- SAVE /CNTRLC/
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C Dictionary
- C MAXDDG = Maximum number of dimension names in dictionary
- C MAXRDG = Maximum number of routine names in dictionary
- INTEGER MAXDDG,MAXRDG
- PARAMETER(MAXDDG=150,MAXRDG=250)
- COMMON /ANDICT/ DDICTG,RDICTG
- CHARACTER*6 DDICTG(MAXDDG),RDICTG(MAXRDG)
- SAVE /ANDICT/
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- COMMON/IO/IODINS,IODSTS,IODSUM,IODSCR,TKIDES,TKODES
- INTEGER IODINS,IODSTS,IODSUM,IODSCR,TKIDES,TKODES
-
- SAVE /IO/
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C KEYWORD ID VARIABLES
- COMMON / KEYSC / KAGOG, KAIFG, KASMTG,
- * KASSNG, KBACKG, KBIFG, KBLOKG,
- * KCALLG, KCFUNG, KCGOG, KCHARG,
- * KCLOSG, KCMPXG, KCOMNG, KCONTG,
- * KDATAG, KDBLEG, KDFUNG, KDIMNG,
- * KDOG, KELSEG, KELSFG, KENDFG,
- * KENDG, KENDIG, KEQIVG, KEXTLG,
- * KFORMG, KIFUNG, KIMPLG, KINQRG,
- * KINSCG, KINTEG, KLFUNG, KLIFG,
- * KLOGCG, KNONEG, KNTRYG, KOPENG,
- * KPARAG, KPAUSG, KPRNTG, KPROGG,
- * KREADG, KREALG, KRETNG, KRFUNG,
- * KSAVEG, KSFUNG, KSTOPG, KSUBRG,
- * KUFUNG, KUGOG, KWINDG, KWRITG,
- * KXFUNG, LASRTG, LCMNTG, LERRG,
- * LLINEG, LSTMTG
-
- INTEGER KAGOG,KAIFG,KASMTG,KASSNG,KBACKG,KBIFG,KBLOKG,KCALLG,
- + KCFUNG,KCGOG,KCHARG,KCLOSG,KCMPXG,KCOMNG,KCONTG,KDATAG,
- + KDBLEG,KDFUNG,KDIMNG,KDOG,KELSEG,KELSFG,KENDFG,KENDG,
- + KENDIG,KEQIVG,KEXTLG,KFORMG,KIFUNG,KIMPLG,KINQRG,KINSCG,
- + KINTEG,KLFUNG,KLIFG,KLOGCG,KNONEG,KNTRYG,KOPENG,KPARAG,
- + KPAUSG,KPRNTG,KPROGG,KREADG,KREALG,KRETNG,KRFUNG,KSAVEG,
- + KSFUNG,KSTOPG,KSUNRG,KUUNG,KUGOG,KWINDG,KWRITG,KXFUNG,
- + LASRTG,LCMNTG,LERRG,LLINEG,LSTMTG
- INTEGER KUFUNG,KSUBRG
-
- SAVE /KEYSC/
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C LOGICAL VARIABLES
- COMMON / LOGIC / ARITHG, ASSRTG, BLKDTG,
- * CARD1G, CGOTOG, ENTRYG, EXECG,
- * HISTG, IEOFG, IFDOG, INSRTG,
- * MAING, SEGMTG, STOPG, TRACEG,
- * TREEG
- LOGICAL ARITHG, ASSRTG, BLKDTG, CARD1G,
- * CGOTOG, ENTRYG, EXECG, HISTG,
- * IEOFG, IFDOG, INSRTG, MAING,
- * SEGMTG, STOPG, TRACEG, TREEG
-
- SAVE /LOGIC/
-
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- C MAIN INTEGER STORAGE ARRAYS
- C MAXLBG = Maximum number of DO statement labels per routine
- INTEGER MAXLBG
- PARAMETER(MAXLBG=100)
- COMMON / WORKC / IABEG(201), ICRTNG(200), IPCNTG(75),
- * IRCNTG(75), ISBEG(201), ISCNTG(75), INSTG(250),
- * KEXECG(75), LABG(2,MAXLBG), KTOKG(81)
- INTEGER IABEG,ICRTNG,IPCNTG,IRCNTG,ISBEG,ISCNTG,INSTG,
- + KEXECG,LABG,KTOKG
- SAVE /WORKC/
- C---------------------------------------------------------
- C TOOLPACK/1 Release: 2.3
- C---------------------------------------------------------
- COMMON/ANVNAM/VNAMEG
- CHARACTER*5 VNAMEG
- SAVE/ANVNAM/
-
- INTEGER NUL,NTRYL
- CHARACTER*5 SEGNUM
- CHARACTER*6 NAMEL
-
- CHARACTER*6 NAME
-
- C Pick up and save ENTRY name
- NAMEL=NAME(NTOKG)
- IF (NAMEL.NE.' ') THEN
- CALL NSAVES(NAMEL,RDICTG,NRDICG,MAXRDG,NTRYL)
- IF (NTRYL.GT.0) THEN
- C ENTRY name in dictionary. Remember it is an ENTRY.
- INSTG(NTRYL) = -1
- ELSE
- C Routine name dictionary overflow - stop now
- CALL ERRORS(14)
- END IF
- C Pick up arguments as possible dummy routine names
- CALL DARGS
- C Instrument ENTRY only if in executable code
- IF (EXECG) THEN
- IF (LTYPEG.EQ.KAGOG .OR. LTYPEG.EQ.KUGOG .OR.
- + LTYPEG.EQ.KAIFG .OR. LTYPEG.EQ.KRETNG .OR.
- + LTYPEG .EQ. KSTOPG) THEN
- C ENTRY follows unconditional branch - add main routine entry segment.
- CALL OUTS
- CALL OUTSGS(ISBEG(NRTNG))
- ELSE
- C ENTRY follows possible fall through. Instrument to conditionally
- C increment main routine segment.
- ENTRYG = .TRUE.
- CALL OUTMSG(' N'//VNAMEG//'=1',IODSCR)
- CALL OUTS
- WRITE(SEGNUM,9000) ISBEG(NRTNG)
- CALL OUTTXT(' IF(N'//VNAMEG//'.EQ.0) ',IODSCR)
- IF (TRACEG) THEN
- CALL OUTMSG('CALL T'//VNAMEG//'('//SEGNUM//')',
- + IODSCR)
- ELSE
- CALL OUTMSG('I'//VNAMEG//'('//SEGNUM//')=I'//
- + VNAMEG//'('//SEGNUM//')+1',IODSCR)
- END IF
- CALL OUTMSG(' N'//VNAMEG//'=0',IODSCR)
- END IF
- C Next statement starts segment
- CALL SEGMTS(.TRUE.)
- ELSE
- C ENTRY precedes executable code
- CALL OUTS
- END IF
- END IF
-
- 9000 FORMAT(SS,I5)
- END
-