|
|
1.1 ! root 1: SUBROUTINE LIST ! 2: INTEGER STMT, PSTMT ! 3: LOGICAL ERR, SYSERR, ABORT, IDLIST, IDO, FINDO ! 4: LOGICAL SIO ! 5: COMMON /INPUT/ NSTMT, PSTMT, STMT(1327) ! 6: COMMON /DETECT/ ERR, SYSERR, ABORT ! 7: COMMON /LISTDO/ LPT, LEN, LS(64) ! 8: C ! 9: C ROUTINE PROCESSES THE LIST CONSTRUCT, USED IN I-O STMTS ! 10: C LEV USED TO COUNT PARENTHESES LEVELS ! 11: C ! 12: SIO = .FALSE. ! 13: LPT = LEN + 1 ! 14: FINDO = .FALSE. ! 15: ICNT = 0 ! 16: LEV = 0 ! 17: 10 IF (STMT(PSTMT).NE.65) GO TO 20 ! 18: LEV = LEV + 1 ! 19: IF (LEV.GT.ICNT) ICNT = ICNT + 1 ! 20: PSTMT = PSTMT + 1 ! 21: GO TO 10 ! 22: 20 IF (PSTMT.GE.NSTMT) GO TO 120 ! 23: C ! 24: C ALLOW <ID>=ARRAY,ARRAY ELE., VARIABLE ! 25: C ! 26: IF (.NOT.IDLIST(IDO)) GO TO 130 ! 27: C ! 28: C FALSE RETURN SIGNIFIES ERROR IN IDLIST ! 29: C TRUE RETURN SIGNIFIES NO ERROR IN IDLIST ! 30: C IDO = .TRUE. MEANS , <DOSPEC> IS NEXT ! 31: C IDO = .FALSE. MEANS AT END-OF-STMT, ", (" , OR ")" ! 32: C ! 33: C FOUND <DOSPEC> ) ! 34: C ! 35: IF (SYSERR) GO TO 130 ! 36: IF (.NOT.IDO) GO TO 30 ! 37: PSTMT = PSTMT + 1 ! 38: GO TO 100 ! 39: C ! 40: C FOUND END OF SIMPLE LIST "( <IDLIST> )" ! 41: C ! 42: 30 IF (STMT(PSTMT).EQ.62) GO TO 60 ! 43: 40 IF (PSTMT.NE.NSTMT) GO TO 50 ! 44: C ! 45: C AT END OF STMT ! 46: C ! 47: IF (FINDO) CALL LDOVAR ! 48: IF (LEV.NE.0) GO TO 120 ! 49: GO TO 130 ! 50: C ! 51: C NEED "," AND NEW <LIST> CONSTRUCT ! 52: C ! 53: 50 IF (STMT(PSTMT).NE.68) GO TO 120 ! 54: PSTMT = PSTMT + 1 ! 55: GO TO 10 ! 56: C ! 57: C MUST CHECK FOR ILLEGALLY NESTED SIMPLE LISTS ! 58: C SIMPLE LIST= ( <IDLIST> ) ! 59: C ICNT COUNTAINS LEVEL OF LAST SIMPLE LIST WITHIN A ! 60: C PARENTHESIZED EXPRESSION ! 61: C ! 62: 60 SIO = .TRUE. ! 63: IF (LEV.EQ.0) GO TO 120 ! 64: PSTMT = PSTMT + 1 ! 65: IF (ICNT.LE.LEV) GO TO 80 ! 66: 70 CALL ERROR1(28H ILLEGAL PARENTHESES NESTING, 28) ! 67: GO TO 130 ! 68: 80 LEV = LEV - 1 ! 69: IF (LEV) 120, 110, 90 ! 70: C ! 71: C CHECK FOR CONSTRUCT FOLLOWING <DOSPEC> ! 72: C ! 73: 90 IF (STMT(PSTMT).EQ.62) GO TO 70 ! 74: IF (STMT(PSTMT).NE.68) GO TO 120 ! 75: CALL NEXTOK(PSTMT+1, K2, K) ! 76: IF (K.NE.0 .OR. STMT(K2).NE.63) GO TO 40 ! 77: PSTMT = PSTMT + 1 ! 78: C ! 79: C LOOK FOR DOSPEC ! 80: C ! 81: 100 CALL DOSPEC(0, K2, .TRUE.) ! 82: IF (SYSERR .OR. ERR) GO TO 130 ! 83: FINDO = .TRUE. ! 84: IF (STMT(K2).NE.62) GO TO 120 ! 85: PSTMT = K2 + 1 ! 86: IF (ICNT.GT.LEV) ICNT = ICNT - 1 ! 87: GO TO 80 ! 88: C ! 89: C CHECK NESTED DOSPECS IN LIST ! 90: C ! 91: 110 IF (LEV.NE.0 .OR. .NOT.FINDO) GO TO 40 ! 92: FINDO = .FALSE. ! 93: CALL LDOVAR ! 94: LPT = LEN + 1 ! 95: GO TO 40 ! 96: 120 CALL ERROR1(20H ILLEGAL PUNCTUATION, 20) ! 97: IF (FINDO) CALL LDOVAR ! 98: 130 IF (SIO) CALL ERROR1(34H REDUNDANT PARENTHESES ARE ILLEGAL, 34) ! 99: RETURN ! 100: END
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.