CHST FLXRT1.FLX - I/O Routines for RT-11 Flecs INCLUDE "FLX:FLXAUT.FLX" C C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C C Routines GET, PUT, SLWRIT C C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C C PURPOSE: C To perform RT-11 specific I/O functions for the RT-11 version of C FLECS C C C USAGE: C GET: C C Called by FLECS procedure READ-NEXT-STATEMENT C C CALL GET (LINENO,SFLX,ENDFIL,INCLVL) C C PUT: C C Called by FLECS listing procedures C C CALL PUT (LINENO,SLIST,IOCLAS) C C SLWRIT: C C Called by RT-11 Flecs routines GET & PUT C C I = SLWRIT (LUN,OUTSTR,CC) C C C METHOD: C The RT-11 Flecs I/O routines use double buffered C RT-11 SYSLIB I/O. C C PARAMETERS: C C GET: C LINENO- Sequential linenumber filled in by GET C Cleared by CLEAR C SFLX - FLECS string containing next line from C input stream filled by GET C ENDFIL- Set to .TRUE. by GET on EOF C INCLVL- Current INCLUDE LEVEL set by GET C C PUT: C LINENO- Linenumber to use for listing. Flagged C as negative for error line listing. C SLIST- FLECS string to be output C IOCLAS- 1- List to FORTRAN source file C 2- List to FLECS listing file C 3- List to ERROR listing (TT:) C 4- List to Flecs INdented source file C C SLWRIT: C LUN- Output LUN C OUTSTR- STRING to be output C CC- FORTRAN carraige control charcter C SIDE EFFECTS: C NONE KNOWN C $P C CHEN$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $P C C SUBROUTINE GET(LINENO,SFLEX,ENDFIL,INCLVL) C $P C IMPLICIT INTEGER (A-Z) INCLUDE "FLX:FLXSY3" STRING SFORMF (1) C C INTEGER*2 LEN,OUTPTR,TLP,TLETTR,LUN BYTE SFLEX(1) LOGICAL*1 ENDFIL,TOLONG,NO_ALPHAS C C TOLONG IS SET TO TRUE IF INPUT RECORD IS TO LONG BYTE CHSPAC,CHTAB,TABS(80),BCH,CH,CHRRET,CHLF,EOF DATA CHRRET,CHLF,EOF /13,10,26/ DATA CHSPAC,CHTAB /32,9/ DATA CHFORM / 12/ DATA TLETTR, TLP, TBLANK /1,4,6/ DATA FINCL /4/ DATA TABS / 7 ,7 ,7 ,7 ,7 ,8 ,8 , 1 16,16,16,16,16,16,16,16, 1 24,24,24,24,24,24,24,24, 1 32,32,32,32,32,32,32,32, 1 40,40,40,40,40,40,40,40, 1 48,48,48,48,48,48,48,48, 1 56,56,56,56,56,56,56,56, 1 64,64,64,64,64,64,64,64, 1 72,72,72,72,72,72,72,72, 1 80,80,80,80,80,80,80,80, 1 88/ PERFORM-INITIALIZATION C READ STATEMENT FILL-IN-SFLEX INCLVL = INLEVL -1 RETURN $P TO DEAL-WITH-EOF WHEN (INLEVL .GT. 1) CALL PURGE (CHAN) CALL IFREEC (CHAN) INLEVL = INLEVL - 1 CHAN = FLXLUN (INLEVL) D TYPE *,'GET -END OF INCLUDE NEW LEVEL,CHAN ',INLEVL,CHAN OUTPTR=1 ! BEGIN NEW LINE WBF = WICHBF(INLEVL) TPTR = BFPTR (INLEVL) FIN ELSE ENDFIL = .TRUE. DONE = .TRUE. OUTPTR = 1 FIN FIN $P TO FILL-IN-SFLEX OUTPTR = 1 DONE = .FALSE. NO_ALPHAS = .TRUE. WHILE (.NOT. DONE .AND. OUTPTR.LE.MXINPL) GET-NEXT-CHARACTER CONDITIONAL (DONE) BREAK (ENDFIL) BREAK (CH .EQ. EOF) DEAL-WITH-EOF NEXT FIN (CH .EQ. CHSPAC) CONDITIONAL (OUTPTR .LE. 6) CONTINUE (OUTPTR .EQ. 7) WHILE ((CH .EQ. CHSPAC) .AND. (NO_ALPHAS)) GET-NEXT-CHARACTER FIN FIN FIN FIN (CH .EQ. CHTAB) CONDITIONAL (OUTPTR .LE. 6) GET-NEXT-CHARACTER IF (CH .EQ. CHTAB) WHILE (CH .EQ. CHTAB) GET-NEXT-CHARACTER FIN ICH = CH CHTYPE = CHTYP (ICH) CONDITIONAL (CHTYPE .EQ. TBLANK) OUTPTR = 7 (CHTYPE .EQ. TLETTR) OUTPTR = 7 (CHTYPE .EQ. TLP) OUTPTR = 7 (OTHERWISE) OUTPTR = 6 FIN FIN (OUTPTR .EQ. 7) !STRIP OFF LEADING TABS FOR FIN SOURCES WHILE (CH .EQ. CHTAB) GET-NEXT-CHARACTER FIN FIN (OUTPTR .GT. 7) OUTPTR = TABS (OUTPTR) CH = CHSPAC FIN FIN FIN (OTHERWISE) NO_ALPHAS = .FALSE. FIN FIN SFLEX (OUTPTR+2) = CH OUTPTR = OUTPTR + 1 FIN IF (.NOT. DONE) WHILE (CH .NE. CHRRET) GET-NEXT-CHARACTER CALL PRINT ('FLECS-W-Input record too long excess ignored') C FILL IN LENGTH OF STRING BEING PASSED IN SFLEX FIN LEN = OUTPTR - 1 IF (NO_ALPHAS) LEN = 0 CALL PUTINT (LEN,SFLEX(1)) FIN $P TO GET-NEXT-CHARACTER BCH = 0 CH = 0 WHILE ((CH .EQ. 0) .AND. (.NOT.DONE)) TPTR = BFPTR (INLEVL) IF ((TPTR - 512) .GT. 0) SWITCH-BUFFERS-START-FILL WBF = WICHBF (INLEVL) FIN UNLESS (DONE) BCH = INBUF (TPTR,WBF,INLEVL) FIN BFPTR (INLEVL) = TPTR + 1 CONDITIONAL (BCH .EQ. CHLF) CONTINUE (BCH .EQ. 0) CONTINUE (BCH .EQ. CHTAB) CH = BCH (BCH .EQ. CHRRET) DONE = .TRUE. FIN (BCH .EQ. CHFORM) CALL PAGE IF (FINLST) CALL PUTCH (SFORMF(2),1,CHFORM) SFORMF (1) = 1 CALL PUT (0,SFORMF,FINCL) FIN FIN (BCH .EQ. EOF) DEAL-WITH-EOF FIN (BCH .LT. CHSPAC) ! AVOID CONTROL CHARACTERS CALL PRINT (' WARNING _ EMBEDDED CONTROL CHAR. - IGNORED') FIN (OTHERWISE) CH = BCH FIN FIN FIN $P TO PERFORM-INITIALIZATION C SETUP-LINE-NUMBER LINENO = INPLIN + 1 INPLIN = LINENO C INITIALIZATION ENDFIL = .FALSE. LIM = 0 DO (I = 3,83) SFLEX(I) = CHSPAC TOLONG = .FALSE. WBF = WICHBF (INLEVL) FIN $P C................FOR FORTRAN I/O USE LINES BELOW............... C TO READ-INPUT-LINE C C READ (FLXLUN,100) LIM,(INPSTR(I),I=1,132) C100 FORMAT (Q,132A1) C C FIN C.................................................................. $P TO SWITCH-BUFFERS-START-FILL C GET RT-11 CHANNEL # CHAN = FLXLUN (INLEVL) C WAIT FOR PENDING INPUT IF (IWAIT (CHAN) .NE. 0) CALL FERROR (EWAITE) C CHECK COMPLETION CODE ST = CHSTAT (INLEVL) C NOW SWITCH BUFFERS WBF = WICHBF(INLEVL) WHEN (WBF .EQ. 1) WICHBF (INLEVL) = 2 ELSE WICHBF (INLEVL) = 1 C FILL A NEW BUFFER? TPTR = TPTR - 512 BFPTR (INLEVL) = TPTR CONDITIONAL (ST .EQ. 256) BLK = INBLK (INLEVL) D TYPE *,' GET ABOUT TO READ- CHAN,BLK,INLEVL',CHAN,BLK,INLEVL CHSTAT(INLEVL) = IREAD (256,INBUF(1,WBF,INLEVL),BLK,CHAN) INBLK (INLEVL) = INBLK (INLEVL) + 1 FIN (ST .EQ. -1) INBUF (1,WICHBF(INLEVL),INLEVL) = EOF FIN (ST .GT. 0) !LESS THAN FULL BUFFER (EOF ENCOUNTERED) INBUF ((ST*2+1),WICHBF(INLEVL),INLEVL) = EOF FIN (OTHERWISE) !ERROR READING FILE CALL FERROR (EREADE) FIN FIN FIN END SUBROUTINE PUT(LINNUM,BSTRNG,IOCLAS) IMPLICIT INTEGER (A-Z) C INCLUDE "FLX:FLXSY3" $NOLIST INCLUDE "FLX:FLXSY3" $LIST $P STRING ERRSTR ' ? ? ? ? ?' STRING OUTSTR (150) INTEGER*2 FORT,LIST,ERR,NEW INTEGER*2 SEMPTY(2) INTEGER*2 LEN,LIM LOGICAL*1 NEGFLG,FORFLG,ERRFLG,NOTEMT BYTE BWORK(200),BSTRNG(1),SIFSPC(4),SIFPAR(4),CHSPAC,CHTAB,CHC BYTE NOCC,FORMFD,DBLSPC,NOLF EQUIVALENCE (BWORK(1),OUTSTR(1),SSCRAT(1)) DATA SEMPTY /0,' '/ DATA FORT,LIST,ERR,NEW /1,2,3,4/ DATA SIFSPC,SIFPAR,CHSPAC,CHTAB,CHC / 1 'I','F',' ',0, 1 'I','F','(',0, 1 ' ', 1 9, 1 'C' / C DATA NOCC,FORMFD,DBLSPC,NOLF /' ','1','0','+'/ $P PERFORM-INITIALIZATION SELECT (IOCLAS) (FORT) UPDATE-FORTRAN-LINE-NUMBER UNLESS (NOFORT) OUTPUT-FORTRAN FIN (LIST) UNLESS (NOLIST) OUTPUT-TO-FLEX-LISTING FIN (ERR) UNLESS (TTYLST) OUTPUT-TO-TTY UNLESS (NOLIST) OUTPUT-TO-FLEX-LISTING FIN (NEW) IF (FINLST) OUTPUT-TO-NEW-INDENTED-SOURCE FIN FIN (OTHERWISE) CONTINUE FIN RETURN TO FLAG-ERROR-IN-LISTING C..............USE LINES BELOW FOR FORTRAN I/O...................... C C WRITE (LSTLUN,30,ERR=9000) C30 FORMAT (' ? ? ? ? ?') C C................................................................. IF (SLWRIT (LSTLUN,ERRSTR,NOCC) .LT. 0) QUIT-DO-TO-WRITE-ERROR FIN $P TO OUTPUT-FORTRAN WHEN (.NOT. NOLNUM) CALL CPYSTR (BWORK,BSTRNG) BWORK (LIM+1) = 0 !NULL TERMINATE CALL STRPAD (BWORK(3),72) C..............USE LINES BELOW FOR FORTRAN I/O...................... C C WRITE (FORLUN,10,ERR=9000) (BWORK(I),I=3,74),LINENO C10 FORMAT (72A1,2X,'!',I5) C C................................................................. ENCODE (8,10,BWORK(75),ERR=9000) LINENO 10 FORMAT (2X,'!',I5) OUTSTR(1)=80 IF (SLWRIT (FORLUN,OUTSTR,NOCC) .LT. 0) QUIT-DO-TO-WRITE-ERROR FIN ELSE C..............USE LINES BELOW FOR FORTRAN I/O...................... C C LIM = MIN0(LIM,75) C WRITE (FORLUN,12,ERR=9000) (BSTRNG(I),I=3,LIM) C12 FORMAT (75A1) C C................................................................. IF (LEN .GT. 80) CALL PUTINT (78,BSTRNG(1)) IF (SLWRIT (FORLUN,BSTRNG,NOCC) .LT. 0) QUIT-DO-TO-WRITE-ERROR FIN FIN $P TO OUTPUT-TO-FLEX-LISTING IF (LSTFLG) IF (PAGLIN .EQ. 0) START-NEW-LISTING-PAGE FIN PAGLIN = MOD ((PAGLIN+1),55) WHEN (LINENO.GT.0) WHEN ((FORLIN .NE. LASTLN) .AND. (FORLIN .GT. 0)) C..............USE LINES BELOW FOR FORTRAN I/O...................... C C WRITE (LSTLUN,20,ERR=9000) LINENO,FORLIN,(BSTRNG(I),I=3,LIM) C C................................................................. LEN = 11 + LEN ENCODE(LEN,20,OUTSTR(2),ERR=9000)LINENO,FORLIN,(BSTRNG(I),I=3,LIM) 20 FORMAT (1X,I4,1X,I4,1X,129A1) OUTSTR(1) = LEN LASTLN = FORLIN FIN ELSE C..............USE LINES BELOW FOR FORTRAN I/O...................... C C WRITE (LSTLUN,25,ERR=9000) LINENO,(BSTRNG(I),I=3,LIM) C C................................................................. LEN = 11 + LEN ENCODE (LEN,25,OUTSTR(2),ERR=9000) LINENO,(BSTRNG(I),I=3,LIM) 25 FORMAT (1X,I4,6X,129A1) OUTSTR(1) = LEN FIN FIN ELSE C..............USE LINES BELOW FOR FORTRAN I/O...................... C C WRITE (LSTLUN,27,ERR=9000) (BSTRNG(I),I=3,LIM) C C................................................................. LEN = 11 + LEN ENCODE (LEN,27,OUTSTR(2),ERR=9000) (BSTRNG(I),I=3,LIM) 27 FORMAT (11X,129A1) OUTSTR(1) = LEN FIN IF (SLWRIT (LSTLUN,OUTSTR,NOCC) .LT. 0) QUIT-DO-TO-WRITE-ERROR IF (NEGFLG) FLAG-ERROR-IN-LISTING FIN FIN $P TO OUTPUT-TO-NEW-INDENTED-SOURCE WHEN ((LEN .EQ. 1) .AND. (BSTRNG(3) .EQ. ' ')) C THIS TAKES CARE OF THE ONE BLANK CHARACTER LINE GENERATED BY C "LIST-BLANK-LINE" (FLXANL.FLX) IF (SLWRIT (NEWLUN,SEMPTY,NOCC) .LT. 0) QUIT-DO-TO-WRITE-ERROR FIN ELSE IF (SLWRIT (NEWLUN,BSTRNG,NOCC) .LT. 0) QUIT-DO-TO-WRITE-ERROR FIN FIN TO OUTPUT-TO-TTY IF (LIM .GT. 70) LIM = 70 ENCODE (LIM+10,40,SSCRAT,ERR=9000) LINENO,(BSTRNG(I),I=3,LIM) 40 FORMAT (2X,I5,3X,70A1) SSCRAT(LIM+9)= 0 CALL PRINT (SSCRAT) FIN TO QUIT-DO-TO-WRITE-ERROR 9000 CONTINUE CALL FERROR (EWRITE) FIN TO PERFORM-INITIALIZATION LINENO = LINNUM NEGFLG = .FALSE. LEN = BY2INT (BSTRNG(1)) LIM = LEN +2 WHEN (LINENO .LT. 0) LINENO = -LINENO NEGFLG = .TRUE. FIN ELSE CONTINUE FIN $P TO START-NEW-LISTING-PAGE C..............USE LINES BELOW FOR FORTRAN I/O...................... C C WRITE (LSTLUN,15,ERR=9000) C15 FORMAT ('1') C C................................................................. IF (SLWRIT (LSTLUN,SEMTPY,FORMFD) .LT. 0) QUIT-DO-TO-WRITE-ERROR IF (SLWRIT (LSTLUN,TITLN1,DBLSPC) .LT. 0) QUIT-DO-TO-WRITE-ERROR FIN TO UPDATE-FORTRAN-LINE-NUMBER IPTR = 9 !START PTR IN COL 7 WHILE ((BSTRNG(IPTR).EQ.CHSPAC).AND.(IPTR.LT.LIM)) IPTR = IPTR + 1 !FIND FIRST NON-BLANK FIN CONDITIONAL (BSTRNG(3).EQ. CHC) LASTLN = FORLIN !COLUMN 1 = 'C' (BSTRNG(8).NE.CHSPAC) LASTLN=FORLIN !COLUMN 6 .NE. ' ' (INDEX(BSTRNG(IPTR),SIFSPC).EQ.1) FORLIN = FORLIN + 2 ! "IF " (INDEX(BSTRNG(IPTR),SIFPAR).EQ.1) FORLIN = FORLIN + 2 ! "IF(" (OTHERWISE) FORLIN = FORLIN +1 FIN FIN END FUNCTION SLWRIT (LUN,BSTRNG,CC) C IMPLICIT INTEGER (A-Z) BYTE BSTRNG(1),CC,CH,CHLF,CHCR,CHFF BYTE NONE,FORMFD,NOCRLF,NOLF,DBLSPC,DUM DATA CHLF,CHCR,CHFF /10,13,12/ DATA NONE,FORMFD,NOCRLF,NOLF,DBLSPC / 1 ' ', '1', '$', '+', '0' / C INCLUDE "FLX:FLXSY3" $NOLIST INCLUDE "FLX:FLXSY3" $LIST WHEN ((LUN .GT. 0) .AND. (LUN .LE. MXOLUN)) SLWRIT = 0 !DEFAULT TO ALL OKAY PROCESS-STRING PROCESS-CARRAIGE-CONTROL FIN ELSE !BAD LUN CALL PRINT ( 'FLECS-F- Bad logical unit number in SLWRIT ') STOP FIN RETURN $P TO OUTPUT-CHARACTER WHEN (OPTR(LUN) .LE. 512) CD TYPE *,'SLWRIT OPTR,LUN' ,OPTR(LUN),LUN PTR = OPTR (LUN) WBF = WICHOB (LUN) OUTBUF (PTR,WBF,LUN) = CH OPTR (LUN) = OPTR (LUN) + 1 FIN ELSE !TIME TO INITIATE BUFFER EMPTYING D TYPE *,'SLWRIT ABOUT TO TRY TO OUTPUT BUFFR FOR LUN ',LUN CHAN = OCHAN (LUN) ST = IWAIT (CHAN) D TYPE *,'SLWRIT IWAIT STATUS',ST WHEN (ST .EQ. 0) ST = OSTAT (LUN) D TYPE *,'SLWRIT STATUS OF LUN CHANNEL',ST,OSTAT(LUN) WBF = WICHOB (LUN) WHEN (WBF .EQ. 1) WICHOB (LUN) = 2 ELSE WICHOB (LUN) = 1 CONDITIONAL (ST .GE. 0) SLWRIT = 0 !ALL OK BLK = OBLK (LUN) D TYPE *,'SLWRIT ABOUT TO WRITE BLK ',BLK,'FOR LUN',LUN OSTAT(LUN) = IWRITE (256,OUTBUF(1,WBF,LUN),BLK,CHAN) OBLK (LUN) = BLK + 1 FIN (ST .EQ. -1) SLWRIT = -1 !END OF FILE ENCOUNTERED (ST .EQ. -2) SLWRIT = -2 !HARDWARE ERROR (ST .EQ. -3) SLWRIT = -3 !CHANNEL NOT OPEN (OTHERWISE) SLWRIT = -4 !WHO KNOWS?? FIN UNLESS (ST .LT. 0) OUTBUF (1,WICHOB(LUN),LUN) = CH OPTR (LUN) = 2 FIN FIN ELSE SLWRIT = -5 !IWAIT ERROR FIN FIN FIN $P TO PROCESS-CARRAIGE-CONTROL SELECT (CC) (NONE) CH = CHCR OUTPUT-CHARACTER CH = CHLF OUTPUT-CHARACTER FIN (NOCRLF) CONTINUE (NOLF) CH = CHCR OUTPUT-CHARACTER FIN (FORMFD) CH = CHCR OUTPUT-CHARACTER CH = CHFF OUTPUT-CHARACTER FIN (DBLSPC) CH = CHCR OUTPUT-CHARACTER CH = CHLF OUTPUT-CHARACTER CH = CHLF OUTPUT-CHARACTER FIN FIN FIN $P TO PROCESS-STRING CURSOR = 3 ILEN = BY2INT (BSTRNG) LIM = CURSOR + ILEN WHILE (CURSOR .LT. LIM) CH = BSTRNG (CURSOR) OUTPUT-CHARACTER CURSOR = CURSOR + 1 FIN FIN END FUNCTION OPENI (SFSPC) CHST FLXRT1.FLX - FUNCTION TO OPEN "INCLUDE" FILES C C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C C LOGICAL FUNCTION OPENI C C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C C C PURPOSE: C TO ATTEMPT TO OPEN "INCLUDE" FILES C C USAGE: C USE : C OPENI (FILSPEC) AS A LOGICAL*1 VALUE C WILL BE TRUE IF SUCCESSFUL ELSE FALSE C C METHOD: C USE ICSI TO PARSE FILE SPEC AND CONVERT TO RAD50 C OPEN FILE FOR SYSLIB INPUT C C SUBPROGRAMS REQUIRED: C BY2INT -FLXSUP.FLX C ICSI -SYSLIB.OBJ C IDSTAT -SYSLIB.OBJ C IFETCH -SYSLIB.OBJ C IFREEC -SYSLIB.OBJ C IGETC -SYSLIB.OBJ C IREAD -SYSLIB.OBJ C LOOKUP -SYSLIB.OBJ C PURGE -SYSLIB.OBJ C PARAMETERS: C SFSPC -FLECS STRING CONTAINING FILE SPEC C INPUT: C FILE SPECS SEE ABOVE C OUTPUT: C OPENED FILE AND INITIALIZED BUFFER C C SIDE EFFECTS: C NONE KNOWN C C EDIT HISTORY: C BEGUN 1-JUN-80 BY R.CARTER C CHEN$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C $P C IMPLICIT INTEGER (A-Z) INTEGER*2 FILSPC(39),DEFTYP(4),LEN,CBLK(4) LOGICAL*1 OPENI BYTE SFSPC(1),CSILIN(20),BLEN(2) EQUIVALENCE (CSILIN(20),SSCRAT(1)) DATA DEFTYP /3RFLX,3RXXX,3RXXX,3RXXX/ EQUIVALENCE (BLEN(1),LEN) C INCLUDE "FLX:FLXSY3" $NOLIST INCLUDE "FLX:FLXSY3" $LIST OPENI = .FALSE. LEN = BY2INT (SFSPC) DO (I=1,LEN) CSILIN (I) =SFSPC(I+2) CSILIN(LEN+1) = 0 CONDITIONAL (INLEVL .GE. MXINLV) CALL PRINT (' FLECS-W-Too many levels of nested includes') FIN (ICSI(FILSPC,DEFTYP,CSILIN,,0).NE. 0) CALL PRINT (' FLECS-W- Bad INCLUDE file spec') FIN (FILSPC(17).EQ.0) CALL PRINT (' FLECS-W- Bad INCLUDE file spec') FIN (IFETCH (FILSPC(16)) .NE. 0) CALL PRINT ('FLECS-W-Can not fetch device') FIN (OTHERWISE) CHAN = IGETC() WHEN (LOOKUP (CHAN,FILSPC(16)) .GE. 0) INLEVL = INLEVL +1 CHSTAT(INLEVL) = IREAD(256,INBUF(1,1,INLEVL),0,CHAN) WICHBF(INLEVL) = 2 BFPTR(INLEVL)= 513 INBLK(INLEVL) = 1 FLXLUN(INLEVL) = CHAN OPENI = .TRUE. FIN ELSE CALL PURGE (CHAN) CALL IFREEC (CHAN) C FLECS ITSELF WILL INFORM THE USER THAT IT C CANNOT OPEN THE FILE FIN FIN FIN RETURN END