Annotation of researchv10no/cmd/pfort/IO.f, revision 1.1.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.