Strictly speaking, EXTERNAL is required for FUNCTION names passed as a parameter to a subprogram, as otherwise a compiler could flag the name as a variable name.
For example
EXTERNAL LIAM, MICK
CALL INIO (JOHN, KEITH, LIAM)
CALL INIO (JOHN, KEITH, MICK)
would be correctly interpreted as variable, variable, function, but without the EXTERNAL if would be variable, variable, variable.
Until I used Clearwin, I couldn't see the point of this, as if in INIO, LIAM is always used as a function, there is no point in passing its name, and if INIO is sometimes called with LIAM, and sometimes with MICK, one could pass a single value of 1 or 2 (say) and within the routine, call LIAM for 1, and MICK for 2 (or .TRUE. and .FALSE., 0 or 1 etc).
I can't imagine that any compiler/linker throws a sulk if a symbolic name declared EXTERNAL *hasn't *been used in a subprogram call anywhere in the code, and so the habit arose of declaring many or all subprogram names as EXTERNAL, just to show in the source code that they are not simple variables and that they should be searched for a link time. I saw this a lot when I read programs that had (multiple) named BLOCK DATA sections, as these are not otherwise referred to in the source code, and if missing would not be noticed.
It all gets a bit complicated with Fortran 90 et seq.
Eddie
PS I noticed when reading CLEARWIN.INS (v 6.10) that there is this:
C_EXTERNAL CREATE_INTERPROCESS_SHAERMEM@ &
&'__create_interprocess_shared_memory' (STRING,VAL)
Is it a typo, and if so, has it been fixed?
E