Annotation of researchv10dc/cmd/pfort/IO.f, revision 1.1

1.1     ! root        1:       SUBROUTINE IO
        !             2:       LOGICAL ERR, SYSERR, TOKPNO, OK, ABORT, TOKLAB
        !             3:       INTEGER STMT, PSTMT
        !             4:       INTEGER EN(4)
        !             5:       LOGICAL SW
        !             6:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !             7:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !             8:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !             9:       COMMON /SWS/ SW(10)
        !            10:       DATA EN(1), EN(2), EN(3), EN(4) /34,43,33,63/
        !            11: C
        !            12: C     ROUTINE RECOGNIZES READ,WRITE,REWIND,BACKSPACE,ENDFILE,PAUSE STMTS
        !            13: C
        !            14:       OK = .TRUE.
        !            15:       ASSIGN 160 TO IFORM
        !            16:       IF (ITYP.NE.23 .AND. ITYP.NE.24) GO TO 240
        !            17: C
        !            18: C     SYNTAX OF READ, WRITE STMTS IS THE SAME EXCEPT A BINARY WRITE
        !            19: C     NEEDS A <LIST>. (SEE USE OF OK)
        !            20: C        "READ" (U<UNIT> / <UNIT> , <FORM>!)   U<LIST>!
        !            21: C         <UNIT> IS INTEGER SCALAR VARIABLE OR POSITIVE INTEGER CONST
        !            22: C         <FORM> IS <LABEL> OR  <ARRAY NAME>.
        !            23: C
        !            24:       IF (STMT(PSTMT).NE.65) GO TO 230
        !            25:       PSTMT = PSTMT + 1
        !            26:       IF (PSTMT.GE.NSTMT) GO TO 120
        !            27:    10 IF (TOKPNO(PSTMT,K2,K)) GO TO 60
        !            28:       CALL NEXTOK(PSTMT, K2, K)
        !            29:       IF (K.EQ.0) GO TO 20
        !            30:       CALL ERROR1(13H ILLEGAL UNIT, 13)
        !            31:       GO TO 110
        !            32:    20 K = LOOKUP(K2,.FALSE.)
        !            33:       IF (SYSERR) GO TO 110
        !            34:       I1 = IGATT1(K,1)
        !            35:       I2 = IGATT1(K,7)
        !            36:       I3 = IGATT1(K,8)
        !            37:       IF (I3.NE.0) GO TO 30
        !            38:       CALL SATT1(K, 8, 10)
        !            39:       GO TO 40
        !            40:    30 IF (I3.EQ.10) GO TO 40
        !            41:       CALL ERROR1(13H ILLEGAL UNIT, 13)
        !            42:    40 IF (I1.NE.0) GO TO 50
        !            43:       I1 = 1
        !            44:       IF (STMT(PSTMT).GE.38 .AND. STMT(PSTMT).LE.43) I1 = 2
        !            45:       CALL SATT1(K, 1, I1)
        !            46:    50 IF (MOD(I1,8).NE.2 .OR. I2.NE.0) CALL ERROR1(13H ILLEGAL UNIT, 13)
        !            47:    60 PSTMT = K2
        !            48: C
        !            49: C     DISTINGUISH ( <UNIT> )  FROM  ( <UNIT>,<FORM> )
        !            50: C
        !            51:       IF (ITYP.NE.23 .AND. ITYP.NE.24) GO TO 100
        !            52:       IF (STMT(PSTMT).EQ.68) GO TO 130
        !            53:       IF (STMT(PSTMT).EQ.62 .AND. ITYP.EQ.24) OK = .FALSE.
        !            54: C
        !            55: C     CODE FINDS ")" AND TRIES TO FIND LIST
        !            56: C
        !            57:    70 IF (STMT(PSTMT).NE.62) GO TO 230
        !            58:       PSTMT = PSTMT + 1
        !            59:       IF (PSTMT.GE.NSTMT) GO TO 90
        !            60:       CALL LIST
        !            61:       GO TO 110
        !            62:    80 CALL ERROR1(20H ILLEGAL PUNCTUATION, 20)
        !            63:       PSTMT = PSTMT + 1
        !            64:       GO TO 70
        !            65:    90 IF (OK) GO TO 110
        !            66:       CALL ERROR1(13H MISSING LIST, 13)
        !            67:   100 IF (PSTMT.LT.NSTMT) CALL ERROR1(
        !            68:      *    34H EXTRANEOUS INFO AFTER END OF STMT, 34)
        !            69:   110 RETURN
        !            70:   120 CALL ERROR1(15H ILLEGAL SYNTAX, 15)
        !            71:       GO TO 110
        !            72: C
        !            73: C     IDENTIFY END= IF THERE
        !            74: C
        !            75:   130 IF (ITYP.NE.23) GO TO IFORM, (160, 80)
        !            76:       I1 = PSTMT + 1
        !            77:       DO 140 K=1,4
        !            78:         IF (STMT(I1).NE.EN(K)) GO TO IFORM, (160, 80)
        !            79:         I1 = I1 + 1
        !            80:   140 CONTINUE
        !            81:       IF (.NOT.SW(1)) CALL ERROR1(
        !            82:      *    37H WARNING - NON-PORTABLE EOF CONSTRUCT, 37)
        !            83: C
        !            84: C     HAVE FOUND END=, TRY FOR LABEL
        !            85: C
        !            86:       PSTMT = I1
        !            87:       IF(.NOT.TOKLAB(1,K2,K,.FALSE.))
        !            88:      1CALL ERROR1(44H MISSING LABEL IN NON-PORTABLE EOF CONSTRUCT ,44)
        !            89:       IF(SYSERR) GOTO 110
        !            90:   150 PSTMT = K2
        !            91:       GO TO 70
        !            92: C
        !            93: C     SEARCH FOR FORM
        !            94: C
        !            95:   160 PSTMT = PSTMT + 1
        !            96:       IF (PSTMT.GE.NSTMT) GO TO 230
        !            97:       IF (TOKLAB(3,K2,K,.FALSE.)) GO TO 220
        !            98:       IF(SYSERR) GOTO 110
        !            99:       CALL NEXTOK(PSTMT, K2, K)
        !           100:       IF (K.EQ.0) GO TO 180
        !           101:   170 CALL ERROR1(13H ILLEGAL FORM, 13)
        !           102:       GO TO 110
        !           103:   180 K = LOOKUP(K2,.FALSE.)
        !           104:       IF (SYSERR) GO TO 110
        !           105:       I1 = IGATT1(K,1)
        !           106:       I2 = IGATT1(K,7)
        !           107:       I3 = IGATT1(K,8)
        !           108:       IF (I3.NE.0) GO TO 190
        !           109:       CALL SATT1(K, 8, 10)
        !           110:       GO TO 200
        !           111:   190 IF (I3.EQ.10) GO TO 200
        !           112:       CALL ERROR1(13H ILLEGAL FORM, 13)
        !           113:   200 IF (I1.NE.0) GO TO 210
        !           114:       I1 = 2
        !           115:       IF (STMT(PSTMT).GE.38 .AND. STMT(PSTMT).LE.43) I1 = 2
        !           116:       CALL SATT1(K, 1, I1)
        !           117:  210  IF((MOD(I1,8).NE.2.AND.MOD(I1,8).NE.5).OR.I2.EQ.0) GOTO 170
        !           118: C
        !           119: C     HAVE SUCCESSFULLY FOUND A FORM
        !           120: C
        !           121:   220 IF (SYSERR) GO TO 110
        !           122:       PSTMT = K2
        !           123:       ASSIGN 80 TO IFORM
        !           124:       IF (STMT(PSTMT).EQ.68) GO TO 130
        !           125:       GO TO 70
        !           126:   230 CALL ERROR1(20H ILLEGAL PUNCTUATION, 20)
        !           127:       GO TO 110
        !           128: C
        !           129: C     LAST 4 I-O  STMTS
        !           130: C
        !           131:   240 IF (ITYP.EQ.27 .OR. ITYP.EQ.22) CALL ERROR1(
        !           132:      *    39H WARNING - USE OF NON-PORTABLE I/O STMT, 39)
        !           133:       IF (ITYP.EQ.22) GO TO 100
        !           134:       IF (PSTMT.LT.NSTMT) GO TO 10
        !           135:       CALL ERROR1(13H MISSING UNIT, 13)
        !           136:       GO TO 110
        !           137:       END

unix.superglobalmegacorp.com

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