INTEGER FUNCTION GFN(OUTSTR,OUTLEN,INSTR,INPTR,INLEN) CC C GFN - GET FILE NAME FROM STRING. C C ENTRY - C -INSTR- = STRING HOLDING FILE NAME(S) C -INPTR- = POINTER TO FIRST CHAR IN INPUT BUFFER-1 C -INLEN- = MAX INDEX OF INPUT STRING C C EXIT - C -OUTSTR- = FILE NAME (ZERO FILLED) C -INPTR- ADVANCED TO POINT AT EITHER TERMINATING COMMA, OR END OF C LINE. C IMPLICIT INTEGER(A-Z) LOGICAL*1 INSTR(1), OUTSTR(1), CH C GFN = -1 ! FLAG FILE NAME ENTERED NBRAK = 0 ! INIT BRACKET LEVEL FPTR = 1 ! OUTPUT FILE NAME POINTER 10 INPTR = INPTR+1 ! BUMP INPUT POINTER IF (INPTR.GT.INLEN) GOTO 30 ! IF END OF INPUT LINE CH = INSTR(INPTR) ! GET NEXT CHAR IF (CH.EQ.1H ) GOTO 10 ! IGNORE BLANKS GFN = -1 ! FLAG FILE NAME SPECIFIED IF (CH.EQ.1H[) NBRAK = NBRAK+1 IF (CH.EQ.1H]) NBRAK = NBRAK-1 IF (CH.EQ.1H:) GFN = 0 ! FLAG ONLY DEVICE SPEC IF (CH.NE.1H,) GOTO 20 ! IF NOT END OF FILE NAME IF (NBRAK.EQ.0) GOTO 30 ! IF FOUND END OF FILE NAME 20 OUTSTR(FPTR) = CH ! COPY TO FILE NAME FPTR = FPTR+1 IF (FPTR.LT.OUTLEN) GOTO 10 ! IF STILL HAVE ROOM 30 DO 32 I=FPTR,OUTLEN 32 OUTSTR(I) = 0 ! CLEAN REMAINDER OF FILE NAME 40 IF (GFN.LT.0) RETURN ! IF FILENAME SPECIFIED CC C CONVERT THE UNIT TO A NUMERIC AND PUT INTO THIRD CHAR OF -OUTSTR- C IF (FPTR.GT.4) GOTO 800 ! IF UNIT IS NON-NULL OUTSTR(3) = 0 ! FORCE UNIT 00 RETURN 800 OUTSTR(3) = OUTSTR(3)-"60 ! CONVERT FIRST DIGIT IF (FPTR.EQ.6) OUTSTR(3) = OUTSTR(3)*8+OUTSTR(4)-"60 RETURN END