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

1.1       root        1:       SUBROUTINE DOCHK(KK)
                      2:       INTEGER DOLIST, DOPT, OUTUT, SYMLEN, OUTUT2, DSA, PDSA, OUTUT3,
                      3:      *    STACK, OUTUT4
                      4:       COMMON /DOS/ DOPT, LDO, DOLIST(192)
                      5:       COMMON /CEXPRS/ LSTACK, STACK(620)
                      6:       COMMON /PARAMS/ INUT, OUTUT, NOCHAR, SYMLEN, OUTUT2, OUTUT3,
                      7:      *    OUTUT4
                      8:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
                      9:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
                     10: C
                     11: C     KK IS SYMBOL TABLE ENTRY OF LABEL
                     12: C     ROUTINE CHECKS ALL LABELS FOR BEING END OF DO-STMTS; IF LABEL IS
                     13: C     END-OF-DO, ALL LABELS WITHIN THAT DO, HAVE END-OF-DEFN STMT NO
                     14: C     RECORDED IN THEM; DOPT IS DECREMENTED, A MOCK END-OF-DO IS
                     15: C     CREATED BY THE END STMT IN THE PGM UNIT; DOLIST MUST BE EMPTY
                     16: C     AFTER THIS PROCESSING OF AN END,
                     17: C     PERFORMS FIXUP ON SCOPE OF LABELS ENDING MULTIPLE NESTED DO'S
                     18: C
                     19:       IF (ITYP.EQ.28) GO TO 50
                     20:       IF (DOLIST(DOPT+1).NE.KK) GO TO 40
                     21:    10 CALL FIXLAB(.FALSE.)
                     22:       DOPT = DOPT - 6
                     23:       IF (ITYP.EQ.15 .OR. ITYP.EQ.16 .OR. (ITYP.GE.19 .AND.
                     24:      *    ITYP.LE.22)) CALL ERROR1(26H ILLEGAL ENDING STMT ON DO, 26)
                     25:       IF (DOLIST(DOPT+1).NE.KK) GO TO 40
                     26: C
                     27: C     GET REFERENCE TO NESTED DO ENDING AND MAKE REFERENCE
                     28: C     TO DO STATEMENT  A NEGATIVE  NUMBER
                     29: C     SO IT WON'T BE AN ILLEGAL BRANCH
                     30: C
                     31:       K = DSA(KK+1)
                     32:       L = DOLIST(DOPT)
                     33:    20 IF (DSA(K).EQ.L) GO TO 30
                     34:       K = DSA(K+1)
                     35:       GO TO 20
                     36:    30 DSA(K) = -DSA(K)
                     37:       GO TO 10
                     38:    40 RETURN
                     39:    50 CALL FIXLAB(.TRUE.)
                     40:       IF (DOPT-6.LE.0) GO TO 40
                     41:       LL = 1
                     42:       L = DOPT/6
                     43:       DO 60 I=1,L
                     44:         J = DOPT + 7 - 6*I
                     45:         K = DOLIST(J)
                     46:         CALL S5UNPK(DSA(K+4), STACK(LL), 6)
                     47:         LL = LL + 6
                     48:    60 CONTINUE
                     49:       LL = LL - 1
                     50:       IF (LL.LE.55) GO TO 70
                     51: 99999 FORMAT (/25H MISSING DO ENDING LABEL , 55A1)
                     52:       WRITE (OUTUT,99999) (STACK(L),L=1,55)
                     53:       WRITE (OUTUT,99998) (STACK(L),L=56,LL)
                     54:       GO TO 40
                     55: 99998 FORMAT (25X, 55A1)
                     56:    70 WRITE (OUTUT,99999) (STACK(L),L=1,LL)
                     57:       GO TO 40
                     58:       END

unix.superglobalmegacorp.com

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