|
|
1.1 ! root 1: SUBROUTINE FORMAT ! 2: INTEGER STMT, PSTMT ! 3: LOGICAL TOKPNO, SIGN, ERROR ! 4: COMMON /INPUT/ NSTMT, PSTMT, STMT(1327) ! 5: C ! 6: C ROUTINE PROCESSES FORMAT STMT ! 7: C FORMAT (Q1 T1 Z1 T2 Z2 ... TN Q2) ! 8: C Q1,Q2 ARE EMPTY OR ARE SEPARARTERS ! 9: C T1,T2 ETC. ARE FORMAT-ITEMS ! 10: C Z1,Z2, ETC. ARE SEPARATERS ! 11: C CHECKS FOR <= 2 LEVELS OF PARENTHESES ! 12: C ! 13: ERROR = .FALSE. ! 14: ICNT = 0 ! 15: C ! 16: C "(" ! 17: C ! 18: IF (STMT(PSTMT).EQ.65) GO TO 30 ! 19: 10 CALL ERROR1(20H ILLEGAL PUNCTUATION, 20) ! 20: C ! 21: C SEARCH FOR FORMAT ITEMS ! 22: C ! 23: 20 RETURN ! 24: 30 ICNT = ICNT + 1 ! 25: IF (ICNT.GT.2) CALL ERROR1(28H TOO MANY PARENTHESES LEVELS, 28) ! 26: PSTMT = PSTMT + 1 ! 27: C ! 28: C LOOK FOR Q1 ! 29: C ! 30: CALL SEPAR(I) ! 31: C TAKES CARE OF FORMAT() ! 32: IF (STMT(PSTMT).EQ.62) GO TO 180 ! 33: IF (STMT(PSTMT-1).EQ.68) CALL ERROR1(25H ILLEGAL PUNCTUATION (, , ! 34: * 25) ! 35: 40 IF (STMT(PSTMT).EQ.65) GO TO 30 ! 36: IF (PSTMT.GE.NSTMT) GO TO 10 ! 37: SIGN = .FALSE. ! 38: C ! 39: C SEARCH FOR REPEAT FACTER (POSITIVE INTEGER) ! 40: C ! 41: IF (TOKPNO(PSTMT,K2,N)) GO TO 70 ! 42: C ! 43: C HOLLERITH STRINGS ! 44: C ! 45: IF (STMT(PSTMT).LT.0) GO TO 120 ! 46: C ! 47: C "-" IN P SCALING FORMAT-ITEM ! 48: C ! 49: IF (STMT(PSTMT).NE.61) GO TO 50 ! 50: SIGN = .TRUE. ! 51: PSTMT = PSTMT + 1 ! 52: 50 IF (PSTMT.GE.NSTMT) GO TO 10 ! 53: C ! 54: C LOOK FOR <INT> IN PSCALING FORMAT-ITEM ! 55: C P SCALING FORMAT-ITEM ! 56: C ( - ) <INTEGER> P REPEAT (A,I,L) <WIDTH> . <INT> ! 57: C ! 58: CALL NEXTOK(PSTMT, K2, K) ! 59: C ! 60: C CHECK FOR USE OF "-" WITH NON P-SCALING CONSTRUCTS ! 61: C ! 62: IF (K.NE.1 .AND. SIGN) GO TO 100 ! 63: IF (K.EQ.1) GO TO 60 ! 64: N = STMT(PSTMT) ! 65: GO TO 90 ! 66: 60 SIGN = .TRUE. ! 67: PSTMT = K2 ! 68: N = STMT(PSTMT) ! 69: GO TO 80 ! 70: C ! 71: C LOOK FOR PART OF FORMAT-ITEM AFTER REPEAT FACTOR ! 72: C ! 73: 70 PSTMT = K2 ! 74: N = STMT(PSTMT) ! 75: C ! 76: C "(" ! 77: C ! 78: IF (N.EQ.65) GO TO 30 ! 79: C ! 80: C "X" ! 81: C ! 82: IF (N.EQ.53) GO TO 120 ! 83: C ! 84: C "P" ! 85: C ! 86: 80 IF (N.EQ.45) GO TO 130 ! 87: IF (SIGN) GO TO 100 ! 88: C ! 89: C A,I,L ! 90: C ! 91: 90 IF (N.EQ.30 .OR. N.EQ.38 .OR. N.EQ.41) GO TO 110 ! 92: C ! 93: C D,E,F,G ! 94: C ! 95: IF (N.GE.33 .AND. N.LE.36) GO TO 150 ! 96: 100 CALL ERROR1(20H ILLEGAL FORMAT ITEM, 20) ! 97: GO TO 20 ! 98: C ! 99: C A,I,L FOUND. LOOK FOR <WIDTH> ! 100: C ! 101: 110 IF (PSTMT+1.GE.NSTMT) GO TO 10 ! 102: PSTMT = PSTMT + 1 ! 103: IF (.NOT.TOKPNO(PSTMT,K2,I)) GO TO 100 ! 104: IF (N.NE.30 .OR. I.EQ.1 .OR. ERROR) GO TO 160 ! 105: CALL ERROR1(48H WARNING - A FORMAT ITEM NOT PORTABLE FOR N.GT.1, ! 106: * 48) ! 107: ERROR = .TRUE. ! 108: GO TO 160 ! 109: C ! 110: C SKIP TO NEXT CHAR IN X OR HOLLERITH ! 111: C ! 112: 120 PSTMT = PSTMT + 1 ! 113: GO TO 170 ! 114: C ! 115: C LOOK FOR CONSTRUCT FOLLOWING THE P. CAN BE A REPEAT ! 116: C ! 117: 130 IF (PSTMT+1.GE.NSTMT) GO TO 10 ! 118: PSTMT = PSTMT + 1 ! 119: IF (STMT(PSTMT).GT.9 .OR. STMT(PSTMT).LT.0) GO TO 140 ! 120: CALL NEXTOK(PSTMT, K2, K) ! 121: IF (K.NE.1) GO TO 10 ! 122: PSTMT = K2 ! 123: C ! 124: C AFTER D,E,F,G FIND <WIDTH> . <INT> ! 125: C ! 126: 140 IF (STMT(PSTMT).LT.33 .OR. STMT(PSTMT).GT.36) GO TO 10 ! 127: 150 IF (PSTMT+1.GE.NSTMT) GO TO 10 ! 128: PSTMT = PSTMT + 1 ! 129: IF (.NOT.TOKPNO(PSTMT,K2,N)) GO TO 100 ! 130: IF (STMT(K2).NE.64) GO TO 100 ! 131: IF (K2+1.GE.NSTMT) GO TO 10 ! 132: PSTMT = K2 + 1 ! 133: CALL NEXTOK(PSTMT, K2, K) ! 134: IF (K.NE.1) GO TO 100 ! 135: 160 PSTMT = K2 ! 136: C ! 137: C FINISHED A FORMAT-ITEM ! 138: C LOOK FOR SEPARATER OR ")" ! 139: C ! 140: 170 IF (STMT(PSTMT).NE.62) GO TO 210 ! 141: 180 ICNT = ICNT - 1 ! 142: IF (ICNT.LT.0) GO TO 190 ! 143: IF (PSTMT+1.LT.NSTMT) GO TO 200 ! 144: IF (ICNT.EQ.0) GO TO 20 ! 145: 190 CALL ERROR1(28H ILLEGAL PARENTHESES NESTING, 28) ! 146: GO TO 20 ! 147: 200 PSTMT = PSTMT + 1 ! 148: GO TO 170 ! 149: 210 CALL SEPAR(I) ! 150: IF (I.EQ.0) CALL ERROR1(24H MISSING FIELD SEPARATOR, 24) ! 151: IF (STMT(PSTMT).NE.62) GO TO 40 ! 152: IF (STMT(PSTMT-1).EQ.68) CALL ERROR1(25H ILLEGAL PUNCTUATION ,) , ! 153: * 25) ! 154: GO TO 180 ! 155: END
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.