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