SUBROUTINE GOTO INTEGER STMT, PSTMT LOGICAL TOKLAB, DONE, ERR, SYSERR, ABORT COMMON /DETECT/ ERR, SYSERR, ABORT COMMON /INPUT/ NSTMT, PSTMT, STMT(1327) C C PROCESSES UNCONDITIONAL, ASSIGNED, AND COMPUTED GOTO STMTS C IF (PSTMT.GE.NSTMT) GO TO 100 DONE = .FALSE. C C UNCONDITIONAL GOTO C IF (TOKLAB(1,K2,K,.FALSE.)) GO TO 110 C C COMPUTED GOTO C IF (SYSERR) GO TO 110 IF (STMT(PSTMT).EQ.65) GO TO 70 C C ASSIGNED GOTO: GOTO <VAR> , ( <LAB> , ETC. ) C 10 CALL NEXTOK(PSTMT, K2, K) IF (K.NE.0) GO TO 100 K = LOOKUP(K2,.FALSE.) IF (SYSERR) GO TO 110 I1 = IGATT1(K,1) IF (I1.NE.0) GO TO 20 I1 = 1 IF (STMT(PSTMT).GE.38 .AND. STMT(PSTMT).LE.43) I1 = 2 CALL SATT1(K, 1, I1) 20 I2 = IGATT1(K,7) IF (MOD(I1,8).NE.2 .OR. I2.NE.0) CALL ERROR1( * 31H NOT AN INTEGER SCALAR VARIABLE, 31) I1 = IGATT1(K,8) IF (DONE) GO TO 40 C C CHECK FOR ASSIGN VARIABLE IN USAGE C IF (I1.EQ.0) GO TO 30 IF (I1.NE.8) CALL ERROR1(26H ID NOT AN ASSIGN VARIABLE, 26) GO TO 60 30 CALL SATT1(K, 8, 8) GO TO 60 C C CHECK FOR VARIABLE IN USAGE C 40 IF (I1.EQ.0) GO TO 50 IF (I1.NE.10) CALL ERROR1(19H ILLEGAL ID IN GOTO, 19) GO TO 130 50 CALL SATT1(K, 8, 10) GO TO 130 C C LOOK FOR "," C 60 IF (STMT(K2).NE.68) GO TO 100 K2 = K2 + 1 DONE = .TRUE. IF (STMT(K2).NE.65) GO TO 100 GO TO 80 70 PSTMT = PSTMT + 1 GO TO 90 80 PSTMT = K2 + 1 C C LOOK FOR ( <LAB> , ETC.) C 90 IF (PSTMT.GE.NSTMT) GO TO 100 IF (.NOT.TOKLAB(1,K2,K,.FALSE.)) GO TO 100 IF(SYSERR) GOTO 110 IF (STMT(K2).EQ.68) GO TO 80 IF (STMT(K2).NE.62) GO TO 100 IF (DONE) GO TO 120 DONE = .TRUE. IF (STMT(K2+1).NE.68) GO TO 100 PSTMT = K2 + 2 IF (PSTMT.LT.NSTMT) GO TO 10 100 CALL ERROR1(15H ILLEGAL SYNTAX, 15) 110 RETURN C C CHECK END OF STMT IS REACHED C 120 K2 = K2 + 1 130 IF (K2.NE.NSTMT) CALL ERROR1( * 34H EXTRANEOUS INFO AFTER END OF STMT, 34) GO TO 110 END