V10/cmd/pfort/GETTOK.f

      INTEGER FUNCTION GETTOK(K1, K2)
C
C     GETTOK FINDS NEXT TOKEN IN STMT(K1)-STMT(K2-1)
C     AND RETURNS A VALUE:
C     0= DOUBLE PRECISION CONSTANT-
C     2= INTEGER CONSTANT
C     1= REAL CONSTANT-
C     3= COMPLEX CONSTANT
C     4= LOGICAL CONSTANT
C     5= HOLLERITH CONSTANT
C     6= ID
C    >10=OPERATOR   (10+CODE FOR OPERATOR;HERE ARRAY AND FCN REFS ARE 16
C
      INTEGER PSTMT, STMT
      LOGICAL ERR, SYSERR, ABORT, TOKLOP, TOKRL, TOKCOM, TOKLOG
      COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
      COMMON /DETECT/ ERR, SYSERR, ABORT
   10 GETTOK = -1
      IF (.NOT.TOKRL(K1,K2,K)) GO TO 20
      GETTOK = 1
      IF (K.EQ.0) GETTOK = 0
      GO TO 40
   20 CALL NEXTOK(K1, K2, K)
      K = K + 1
      GO TO (50, 30, 60, 70), K
   30 GETTOK = 2
   40 RETURN
C
C     PROCESS ID, SEE IF ITS A FCN  CALL OR ARRAY NAME
C
   50 GETTOK = 6
      IF (STMT(K2).NE.65) GO TO 40
      GETTOK = 16
      K2 = K2 + 1
      GO TO 40
   60 GETTOK = 5
      GO TO 40
   70 K = STMT(K1)
      IF (K.EQ.64) GO TO 100
      IF (K.EQ.65) GO TO 80
      IF (K.EQ.62) GETTOK = 12
      IF (K.EQ.68) GETTOK = 18
      IF (K.EQ.60 .OR. K.EQ.61) GETTOK = 11
      IF (K.EQ.66 .OR. K.EQ.67) GETTOK = 17
      IF (K2.EQ.K1+2) GETTOK = 13
      IF (GETTOK+1) 40, 120, 40
   80 GETTOK = 15
      IF (TOKCOM(K1,K)) GO TO 90
      GO TO 40
   90 GETTOK = 3
      K2 = K
      GO TO 40
C
C     CHECK FOR LOGICAL CONSTANTS,OPERATORS
C
  100 IF (.NOT.TOKLOG(K1,K2)) GO TO 110
      GETTOK = 4
      GO TO 40
  110 IF (.NOT.TOKLOP(K1,K2,K)) GO TO 120
      GETTOK = K
      GO TO 40
  120 CALL ERROR1(26H ILLEGAL CHARACTER IGNORED, 26)
      IF (K1+1.GE.NSTMT) GO TO 130
      K1 = K1 + 1
      GO TO 10
  130 ERR = .TRUE.
      RETURN
      END