Annotation of researchv10no/cmd/pfort/PROC.f, revision 1.1

1.1     ! root        1:       SUBROUTINE PROC(IP, IM, IIM, OK)
        !             2: C
        !             3: C      P.U. AT LAT(IP) CALLS P.U. AT LAT(IM) (NODE(IIM))
        !             4: C      PROC COLLECTS ACTUAL PROC TEMPLATE(S) FROM THE CALL IF IT CAN
        !             5: C      CHECKS FOR MISSING SUBPGMS AND STORES TEMPLATES OFF PGM UNIT
        !             6: C      AT LAT(IM), THEM PROC CALLS ASLEV TO READJUST LEVELS OF ACTUALS
        !             7: C      SENT TO LAT(IM) VS LEVEL (IM)
        !             8: C
        !             9:       LOGICAL ERR, SYSERR, ABORT, OK
        !            10:       INTEGER STACK, SYMLEN, PDSA, DSA, REF, PREF, PNODE, PLAT, FINDND,
        !            11:      *    FIND, SS(120), KBR(1)
        !            12:       COMMON /CEXPRS/ LSTACK, STACK(620)
        !            13:       COMMON /PARAMS/ I1, I2, I3, SYMLEN, I4, I5, I6
        !            14:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !            15:       COMMON /CREF/ LREF, PREF, REF(100)
        !            16:       COMMON /HEAD/ LNODE, PNODE, NODE(500)
        !            17:       COMMON /SCR1/ LINODE, INODE(500)
        !            18:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !            19:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !            20:       EQUIVALENCE (SS(1),STACK(501))
        !            21:       DATA KBR(1) /0/
        !            22:       LSS = 501
        !            23: C      ARE THERE ARGS IN THIS REF
        !            24:       IF (REF(1).NE.0) GO TO 20
        !            25:    10 RETURN
        !            26: C      CYCLE THROUGH REF ARGS
        !            27: C      JJ IS LAST ENTRY IN REF FOR ARGS
        !            28: C      IS PTS TO FIRST FREE WD IN STACK
        !            29: C      MAX IS 1 IF NO DUMMY PROCS IN REF, ELSE IS EQUAL TO THE
        !            30: C      NUMBER OF ACTUAL PROCS SUBSTITUTABLE FOR THE DUMMY PROCS
        !            31:    20 JJ = REF(1) + 4
        !            32:       IS = 1
        !            33:       MAX = 0
        !            34:       DO 90 I=5,JJ,2
        !            35: C      SKIP OVER EXPR AS ACTUAL ARGS AND ALL ACTUALS BUT PROC ARGS
        !            36:         IF (REF(I).EQ.0) GO TO 90
        !            37:         IF (REF(I+1).NE.6) GO TO 90
        !            38: C      SEE IF ACTUAL ARG IS DUMMY PROC ARG AT LAT(IP)
        !            39: C      OR ACTUAL PROCEDURE
        !            40:         IF (IGATT1(REF(I),4).EQ.1) GO TO 40
        !            41: C      HAVE AN ACTUAL PROCEDURE
        !            42:         L = REF(I)
        !            43:         L = FINDND(DSA(L+4),K)
        !            44:         IF (L.NE.0) GO TO 30
        !            45: C      IF, AS GATHERING ACTUAL PROCS MATCHED TO DUMMY PROC ARGS
        !            46: C      PROC FINDS A MISSING SUBPROGM, PROCESSING OF THIS REF CEASES
        !            47:       L = REF(I)
        !            48:       CALL ERROR2(20H MISSING SUBPROGRAM , 20, DSA(L+4), 1, 1, 0)
        !            49:       CALL ERROR2(1H1, 0, REF(3), -1, 0, 1)
        !            50:         GO TO 10
        !            51:    30   IF (IS+2.GT.LSS) GO TO 200
        !            52: C      2 WD STACK ENTRY FOR AN ACTUAL PROC AS AN ACTUAL ARG
        !            53: C      IS FIRST WD - 1, 2ND WD - LAT INDEX OF ACTUAL PROC
        !            54:         STACK(IS) = 1
        !            55:         STACK(IS+1) = L
        !            56:         IF (MAX.EQ.0) MAX = 1
        !            57:         IS = IS + 2
        !            58:         GO TO 90
        !            59: C      HAVE A DUMMY PROC CHECK OUT NO OF ACTUALS
        !            60: C      MATCHED TO IT AND STACK THOSE WITH COUNTER ON TOP
        !            61:    40   L = IP + SYMLEN + 5
        !            62:         L = LAT(L)
        !            63:         IF (L.NE.0) GO TO 50
        !            64:       IF (.NOT.OK) GOTO 10
        !            65:       CALL ERROR2(26H MISSING ACTUAL PROCEDURES ,26, KBR(1), -1,1,1)
        !            66:       OK = .FALSE.
        !            67:         GO TO 10
        !            68: C      COLLECT ACTUALS CORRESPONDING TO THIS PROC ARG
        !            69: C      K IS REL POSIT OF PROC ARG AMONG ALL ARGS AT LAT(IP)
        !            70: C      L PTS TO TEMPLATE AT LAT(IP)
        !            71:    50   K = REF(I)
        !            72:         K = DSA(K+2)
        !            73: C     J POINTS TO FIRST ELEMENT ON ARGLIST
        !            74:         J = IP + SYMLEN + 1
        !            75:         J = LAT(J)
        !            76:         IF (K.LE.1) GO TO 70
        !            77:         DO 60 LL=2,K
        !            78:           J = LAT(J+3)
        !            79:    60   CONTINUE
        !            80: C      K IS REL POSIT OF PROC ARG AMONG PROC ARGS IN LAT(IP)
        !            81: C      THAT IS IT IS OFFSET NECESS TO READ CORRESP ACTUAL
        !            82: C      PROCS OFF TEMPLATES AT LAT(IP)
        !            83: C     J POINTS TO DUMMY PROC ARG ENTRY IN LAT (IP)
        !            84:    70   K = LAT(J+1)
        !            85:         IF (IS+1.GE.LSS) GO TO 200
        !            86: C      J POINTS TO POSITION IN STACK OF COUNT OF HOW MANY
        !            87: C      ACTUALS ARE MATCHED TO THIS DUMMY
        !            88:         J = IS
        !            89:         STACK(IS) = 0
        !            90:         IS = IS + 1
        !            91:    80   IF (IS+1.GE.LSS) GO TO 200
        !            92: C      N WD STACK ENTRY FOR DUMMY PROC ARGS USED AS ACTUAL ARGS IN REF
        !            93: C      WD 1 CONTAINS NO OF ACTUAL PROCS MATCHED TO THE DUMMY
        !            94: C      WDS 2 - N CONTAIN THE LAT INDICES OF EACH ACTUAL PROC
        !            95:         STACK(J) = STACK(J) + 1
        !            96:         LL = K + L
        !            97:         STACK(IS) = LAT(LL)
        !            98:         IS = IS + 1
        !            99:         L = LAT(L) + L
        !           100:         L = LAT(L)
        !           101:         IF (L.NE.0) GO TO 80
        !           102:         IF (STACK(J).GT.MAX) MAX = STACK(J)
        !           103:    90 CONTINUE
        !           104: C      HAVE COLLECTED ALL PROC ACTUALS CORRESP TO THE PROC
        !           105: C      ARGS IN THE REF, NOTE MAX IS NO OF TEMPLATES RESULTING FROM
        !           106: C      THIS REF TO BE PASSED TO LAT(IM) AS LONG AS THEIR DUPS
        !           107: C      ARE NOT THERE ALREADY
        !           108: C      BUILD EACH TEMPLATE IN LOOP AND CHECK FOR DUPLICATION
        !           109: C      IF NOT THERE COPY INTO LAT OFF LAT(IM) AND CHECK LEVEL OF ACTUALS
        !           110: C      PASSED DOWN VS LEVEL OF LAT(IM)
        !           111:       IF (MAX.EQ.0) GO TO 10
        !           112:       DO 190 I=1,MAX
        !           113: C      CREATE PROC INDICES PORTION OF TEMPLATE IN SS
        !           114:         K = 1
        !           115:         ISS = 1
        !           116:   100   IF (K.GE.IS) GO TO 110
        !           117:         L = 1
        !           118:         IF (STACK(K).GT.1) L = I
        !           119:         IF (ISS+1.GE.120) GO TO 200
        !           120:         J = K + L
        !           121:         SS(ISS) = STACK(J)
        !           122:         K = K + STACK(K) + 1
        !           123:         ISS = ISS + 1
        !           124:         GO TO 100
        !           125: C      HAVE TEMPLATE IN SS(1) THROUGH SS(ISS-1)
        !           126: C      SEE IF IT HAS A DUPLICATE AT LAT(IM)
        !           127:   110   K = IM + SYMLEN + 5
        !           128:         K = LAT(K)
        !           129:         IST = ISS - 1
        !           130:   120   IF (K.EQ.0) GO TO 150
        !           131:         DO 130 L=1,IST
        !           132:           J = K + L
        !           133:           IF (LAT(J).NE.SS(L)) GO TO 140
        !           134:   130   CONTINUE
        !           135: C      FOUND DUPLICATE
        !           136:         GO TO 190
        !           137: C      HAVENT FOUND A DUPLICATE YET
        !           138: C      SEE IF THERE ARE MORE TEMPLATES TO COMPARE
        !           139:   140   K = LAT(K) + K
        !           140:         K = LAT(K)
        !           141:         GO TO 120
        !           142: C      NOT A DUPLICATE WILL ADD IT ON
        !           143:   150   IF (PLAT+IST+2.LE.LLAT) GO TO 160
        !           144:         CALL ERROR1(32H IN PROC, TABLE OVERFLOW OF LAT , 32)
        !           145:         SYSERR = .TRUE.
        !           146:         GO TO 10
        !           147: C      MAKE AN ENTRY CONSISTING OF 1ST WORD - NO OF PROCS+1, SUBSEQUENT
        !           148: C      WORDS - PROCS LAT INDICES, LAST WORD - PTR
        !           149: C      TO NEXT SUCH TEMPLATE
        !           150:   160   DO 170 L=1,IST
        !           151:           J = PLAT + L
        !           152:           LAT(J) = SS(L)
        !           153:   170   CONTINUE
        !           154:         LAT(PLAT) = IST + 1
        !           155:         L = PLAT
        !           156:         PLAT = PLAT + IST + 2
        !           157:         J = IM + SYMLEN + 5
        !           158:         LAT(PLAT-1) = LAT(J)
        !           159:         LAT(J) = L
        !           160: C      CHECK LEVELS
        !           161:         DO 180 L=1,IST
        !           162:           J = FIND(SS(L))
        !           163: C     FIND HEAD OF GREEN LINKS LIST AT LAT(IM)
        !           164:       JR = IM + SYMLEN + 3
        !           165:       JLR = -SS(L)
        !           166:  210  IF(LAT(JR+1) .LE. 0) GOTO 220
        !           167:       JR = LAT(JR+1)
        !           168:       GOTO 210
        !           169: C     HAVE TOP OF GREEN LINKS LIST AT LAT(JR)
        !           170:  220  IF(LAT(JR+1) .EQ. 0) GOTO 230
        !           171:       JR = IABS( LAT(JR+1) )
        !           172: C     LOOK FOR DUPLICATE ENTRY ON GREEN LINKS LIST
        !           173:       IF(LAT(JR) .EQ. JLR) GOTO 240
        !           174:       GOTO 220
        !           175: C     ADD ON ENTRY TO GREEN LINKS LIST
        !           176:  230  IF(PLAT + 2 .GT. LLAT) GOTO 250
        !           177:       LAT(PLAT) = JLR
        !           178:       LAT(PLAT+1) = 0
        !           179:       LAT(JR+1) = -PLAT
        !           180:       PLAT = PLAT+2
        !           181:  240  IF((-1).EQ.INODE(J) .OR. (-2).EQ.INODE(J) .OR.
        !           182:      *  INODE(J).GT.INODE(IIM)) GOTO 180
        !           183:           INODE(J) = INODE(IIM) + 1
        !           184:       CALL ASLEV (-J)
        !           185:           IF (SYSERR .OR. ABORT) GO TO 10
        !           186:   180   CONTINUE
        !           187:   190 CONTINUE
        !           188:       GO TO 10
        !           189:   200 SYSERR = .TRUE.
        !           190:       CALL ERROR1(33H IN PROC, TABLE OVERFLOW OF STACK, 33)
        !           191:       GO TO 10
        !           192:  250  SYSERR = .TRUE.
        !           193:       CALL ERROR1(31H IN PROC, TABLE OVERFLOW OF LAT,31)
        !           194:       GOTO 10
        !           195:       END

unix.superglobalmegacorp.com

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