Annotation of researchv10no/cmd/pfort/CONSTR.f, revision 1.1.1.1

1.1       root        1:       SUBROUTINE CONSTR(MAINND)
                      2:       LOGICAL SYSERR, ERR, ABORT, INSYM, GREEN, INDIR
                      3:       LOGICAL OVER
                      4: C      NOTE SETNOD SETS ABORT FOR 2 P.U. WITH SAME NAME
                      5: C      CONSTR SETS ABORT IF IT FINDS NO SYMBOL TABLES FROM PASS1
                      6: C      ASLEV SETS ABORT IF IT FINDS RECURSION IN CALLING GRAPH
                      7:       INTEGER OUTUT2, OUTUT3, OUTUT4, SYMLEN
                      8:       INTEGER PNODE, PLAT, LS(2)
                      9:       COMMON /HEAD/ LNODE, PNODE, NODE(500)
                     10:       COMMON /SCR1/ LINODE, INODE(500)
                     11:       COMMON /PARAMS/ I1, I2, I3, SYMLEN, OUTUT2, OUTUT3, OUTUT4
                     12:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
                     13:       COMMON /DETECT/ ERR, SYSERR, ABORT
                     14:       DATA IBR /1/, JBR /4/
                     15:       DATA LS(1) /1H,/, LS(2) /1H /
                     16: C
                     17: C      CONSTR DIRECTS THE FIRST PORTION OF PASS2
                     18: C      CALLS SETNOD TO CONSTRUCT THE LAT NODES FOR EACH P.U..
                     19: C      CALLS SETEXT TO SETUP BASIC EXERNALS NODES
                     20: C      AS NEEDED.
                     21: C      CALLS SETREF TO MAKE CONNECTS BETWEEN THE NODES
                     22: C      CALLS INVOKE TO CALCULATE LEVELS AND ASSIMILATE
                     23: C      ALL PROC INFO NECESSARY
                     24: C     CALLS ERASE TO GET RID OF NON-REFERENCE LINKS IN
                     25: C     CALLING GRAPH
                     26: C      CALLS CHKALL TO DO FINAL CHECKS OF ALL REFS AND TO
                     27: C      WRITE ALL GOOD REFS OUT FOR FUTURE PROCESSING
                     28: C     FORMS SUPERROOT IN GRAPH
                     29: C      CALLS OUTPUT ROUTINES WHENEVER CAN, TO GIVE PARTIAL
                     30: C      LISTINGS OF CURRENT DATA STRUCTURE
                     31: C
                     32: C     USE INSYM TO POSSIBLY SKIP OVER BAD REFS WITH DUMMY SYM TBL
                     33: C     SETREF READS REFS FROM OUTUT3, WRITES ON OUTUT4
                     34: C     INVOKE READS FROM OUTUT4
                     35: C     CHKALL READS FROM OUTUT4, WRITES OUTUT3
                     36: C     UNSAFE READS FROM OUTUT3
                     37: C      INITIALIZE LEVEL ARRAY AND ISR
                     38:       ISR = 0
                     39:       DO 10 I=1,LNODE
                     40:         INODE(I) = 0
                     41:    10 CONTINUE
                     42: C     INITIALIZE LOGICAL FLAGS FOR DETECTION OF PRESENCE OF
                     43: C     EXTERNAL ENTITIES (GREEN) AND INDIRECT REFS(INDIR)
                     44:       GREEN = .FALSE.
                     45:       INDIR = .FALSE.
                     46:  20   IF(.NOT.INSYM(0,0)) GOTO 30
                     47: C
                     48: C      SUCCESSFULLY READ SYMBOL TABLE
                     49: C
                     50:       CALL SETNOD
                     51:       IF (SYSERR .OR. ABORT) GO TO 130
                     52:       GO TO 20
                     53:    30 REWIND OUTUT2
                     54:       IF (PNODE.EQ.1) GO TO 150
                     55: C      CHANGE LEVEL ON ASFS SO DONT PROCESS THEM
                     56:       L = PNODE - 1
                     57:       DO 40 I=1,L
                     58:         IF (NODE(I).LT.0) INODE(I) = -2
                     59:    40 CONTINUE
                     60: C
                     61: C      SETUP BASIC EXTERNAL DEFNS AS NEEDED
                     62: C
                     63:       CALL SETEXT
                     64:       IF (SYSERR) GO TO 130
                     65: C
                     66: C      READ IN SYMBOL TABLES
                     67: C      SETREF WILL READ IN REFS
                     68: C
                     69:  50   IF(.NOT.INSYM(OUTUT3, OUTUT4)) GOTO 60
                     70:       CALL SETREF ( GREEN, INDIR  )
                     71:       IF (SYSERR .OR. ABORT) GO TO 130
                     72:       GO TO 50
                     73:    60 REWIND OUTUT2
                     74:       REWIND OUTUT3
                     75:       WRITE (OUTUT4) IBR, JBR, IBR
                     76:       REWIND OUTUT4
                     77:       IF(.NOT.INDIR) GOTO 70
                     78: C
                     79: C       CALL LEVEL ALG
                     80: C
                     81:       CALL INVOKE
                     82:       IF (ABORT .OR. SYSERR) GO TO 130
                     83:       REWIND OUTUT2
                     84:       REWIND OUTUT4
                     85: C
                     86: C      CHECK AND EXPAND REFS AND SAVE ALL GOOD ONES FOR LATER
                     87: C
                     88:  70   IF(.NOT.INSYM(OUTUT4,OUTUT3)) GOTO 80
                     89:       CALL CHKALL
                     90:       IF (SYSERR) GO TO 130
                     91:       GO TO 70
                     92:    80 WRITE (OUTUT3) IBR, JBR, IBR
                     93: C
                     94: C      CONSTRUCT SUPEROOT IN LAT
                     95: C
                     96:       IF (PNODE+1.GT.LNODE) GO TO 180
                     97:       IF (PLAT+SYMLEN+7.GT.LLAT) GO TO 160
                     98:       NODE(PNODE) = PLAT
                     99: C      MAINND IS SUPEROOT INDEX IN NODE
                    100: C      ISR IS SUPEROOT INDEX IN LAT
                    101:       MAINND = PNODE
                    102:       ISR = PLAT
                    103:       PNODE = PNODE + 1
                    104:       LAT(PLAT) = LS(1)
                    105:       PLAT = PLAT + 1
                    106:       IF (SYMLEN.EQ.1) GO TO 100
                    107:       DO 90 I=2,SYMLEN
                    108:         L = PLAT + I - 2
                    109:         LAT(L) = LS(2)
                    110:    90 CONTINUE
                    111:       PLAT = L + 1
                    112:   100 L = PLAT + 5
                    113:       DO 110 I=PLAT,L
                    114:         LAT(I) = 0
                    115:   110 CONTINUE
                    116:       LAT(L+1) = 5
                    117:       PLAT = L + 2
                    118: C
                    119: C      LOOK FOR CALLABLE PGM UNITS WITHOUT PARENTS
                    120: C
                    121:       L = PNODE - 2
                    122:       DO 120 I=1,L
                    123:         K = SYMLEN + 3 + IABS(NODE(I))
                    124:         IF (LAT(K).EQ.0) CALL SETPD(IABS(NODE(I)), ISR)
                    125:         IF (SYSERR) GO TO 130
                    126:  120  CONTINUE
                    127:  130  IF(.NOT.GREEN) GOTO 190
                    128: C     ERASE GREEN LINKS
                    129:       L = PNODE - 2
                    130:       DO 210 I = 1,L
                    131: C     SKIP ASF NODES
                    132:       IF(NODE(I) .LT. 0) GOTO 210
                    133: C     FIND HEAD OF GREEN LINKS
                    134:       N = NODE(I) + SYMLEN + 3
                    135:  220  IF(LAT(N+1) .LE. 0) GOTO 230
                    136:       N = LAT(N+1)
                    137:       GOTO 220
                    138:  230  LAT(N+1) = 0
                    139:  210  CONTINUE
                    140:  190  OVER = SYSERR
                    141:       SYSERR = .FALSE.
                    142:       CALL OUT2 (ISR)
                    143:       SYSERR = SYSERR.OR.OVER
                    144:       IF(SYSERR) CALL ERROR1(
                    145:      *    56H ILLEGAL COMMON USAGE AND UNSAFE REFERENCES NOT VERIFIED,
                    146:      *    56)
                    147:       CALL OUT2C
                    148:   140 RETURN
                    149:   150 ABORT = .TRUE.
                    150:       GO TO 140
                    151:   160 CALL ERROR1(33H IN CONSTR, TABLE OVERFLOW OF LAT, 33)
                    152:   170 SYSERR = .TRUE.
                    153:       GO TO 130
                    154:   180 CALL ERROR1(34H IN CONSTR, TABLE OVERFLOW OF NODE, 34)
                    155:       GO TO 170
                    156:       END

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.