V10/cmd/pfort/EXTERN.f

      SUBROUTINE EXTERN
      LOGICAL ERR, SYSERR, ABORT
      LOGICAL BR, INTEXT
      INTEGER STMT, PSTMT
      COMMON /FACTS/ NAME, NOST, ITYP, IASF
      COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
      COMMON /DETECT/ ERR, SYSERR, ABORT
C
C     PROCESS AN EXTERNAL STMT. CAUSES IDS TO BE MARKED AS EXTERNAL
C     PROCEDURES. ERROR OCCURS IF ID HAS PREVIOUSLY DEFINED INCONSISTANT
C     USAGE. EXTERNAL CAN'T APPEAR IN BLOCK DATA PGM UNIT.
C
      L = IGATT1(NAME,8)
      IF (L.EQ.11) GO TO 60
   10 CALL NEXTOK(PSTMT, K2, KK)
      IF (KK.EQ.0) GO TO 20
      CALL ERROR1(19H ILLEGAL IDENTIFIER, 19)
      GO TO 70
   20 KK = LOOKUP(K2,.FALSE.)
      IF (SYSERR) RETURN
      L = IGATT1(KK,8)
      IF (L.EQ.0) GO TO 30
      CALL ERROR1(26H ILLEGAL USE OF IDENTIFIER, 26)
      GO TO 40
   30 CALL SATT1(KK, 8, 13)
C
C     CAUSE EXTERNAL BIT TO BE SET IF POSSIBLE BASIC EXTERNAL
C
   40 BR = INTEXT(KK,0,0,.FALSE.)
      IF (K2.EQ.NSTMT) GO TO 70
      IF (STMT(K2).NE.68) GO TO 50
      PSTMT = K2 + 1
      GO TO 10
   50 CALL ERROR1(20H ILLEGAL PUNCTUATION, 20)
      GO TO 70
   60 CALL ERROR1(
     *60H ILLEGAL USAGE OF EXTERNAL STMT WITHIN BLOCK DATA SUBPROGRAM,
     *    60)
   70 RETURN
      END