CHST FLXRT2.FLX - INTERFACE BETWEEN FLECS AND RT-11 C INCLUDE "FLX:FLXAUT.FLX" C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C C SUBROUTINES OPENF,CLOSEF,CLEAR,SLOOPN,SLOCLS C C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C C C PURPOSE: C THESE ROUTINES GET COMMAND LINES FROM THE USER, PROCESS SWITCHES C INITIALIZE LINE NUMBERS, AND PERFORM FILE OPENING AND CLOSING C C USAGE: C THIS MODULE OF ROUTINES IS OVERLAYABLE BY ANY OF THE FOLLOWING C C SUBROUTINE ANALYZE C SUBROUTINE LIST C C THE CALLING SEQUENCE FOR EACH ROUTINE IS DESCRIBED IN THE HEADER C FOR THAT ROUTINE C C METHOD: C THIS MODULE (AS WELL AS FLXRT1.FLX) UTILIZES SYSLIB FUNCTIONS C FOR COMMAND LINE PROCESSING AND FOR ALL FILE I/O. THE FILE C I/O WAS ORIGINALLY NORMAL FORTRAN I/O BUT THIS WAS FOUND TO C TAKE ABOUT TWICE AS LONG TO PROCESS A FILE. MUCH OF THE CODE C FOR FORTAN CODE HAS ONLY BEEN COMMENTED OUT SO AS TO ASSIST ANYONE C WHO IS TRYING TO CONVERT BACK TO FORTRAN I/O. C C THE FOLLOWING SWITCHES ARE CURRENTLY IMPLEMENTED: C C C /D - INCLUDE SOURCE LINES WITH A "D" IN COLUMN 1 C (NOTE THESE LINES ARE COMPLETELY IGNORED C IF THE SWITCH IS NOT SPECIFIED AND DO C NOT APPEAR IN THE LISTING FILE) C /L - NUMBER THE GENERATED FORTRAN SOURCE WITH C THE CORRESPONDING FLECS LISTING LINE #'S C IN COLUMNS 75-80 C /C - INCLUDE COMMENT LINES IN GENERATED FORTRAN C FILE C /N -CREATE A NEW INDENTED SOURCE FILE C $P C CHEN$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C C C $P SUBROUTINE OPENF (CALLNO,DONE,SVER,SWITCH,MAKFIN) CHST FLXRT2.FLX - ROUTINE TO PROCESS COMMAND LINE AND OPEN FILES C C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C C SUBROUTINE OPENF C C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C C C PURPOSE: C TO ACCEPT AN RT-11 COMMAND LINE, PARSE IT, PROCESS SWITCHES C OPEN FILES AND INFORM THE CALLING ROUTINE IF THE USER IS DONE C C USAGE: C CALL OPENF (CALLNO,DONE,SVER) C (PARAMETERS DESCRIBED BELOW) C C METHOD: C SYSLIB ROUTINES GTLIN AND ICSI ARE USED TO GET AND PROCESS C THE COMMAND LINE. THIS ALLOWS FOR BOTH THE ACCEPTANCE OF AN C RT-11 STYLE COMMAND LINE AND ALLOWS COMMAND LINES TO BE ACCEPTED C FROM A COMMAND FILE C C C SUBPROGRAMS REQUIRED: C BY2INT -STRLIB.FLX C CATSTR -STRLIB.FLX C CLEAR -FLXRT2.FLX C CLOSEC -SYSLIB.OBJ C CPYSTR -STRLIB.FLX C DATE -SYSLIB.OBJ C FLNDEX -STRLIB.FLX C GTLIN -SYSLIB.OBJ C ICSI -SYSLIB.OBJ C IFETCH -SYSLIB.OBJ C IFREEC -SYSLIB.OBJ C IGETC -SYSLIB.OBJ C IREAD -SYSLIB.OBJ C LEN -SYSLIB.OBJ C LOOKUP -SYSLIB.OBJ C PURGE -SYSLIB.OBJ C PUTINT -STRLIB.FLX C SLOOPN -FLXRT2.FLX C TIME -SYSLIB.OBJ $P C PARAMETERS: C CALLNO - PASSED BY THE CALLING ROUTINE (FLECS) C REPRESENTS WHICH CALL TO OPENF (SINCE THE PROGRAM C WAS STARTED) THIS IS. IF CALLNO = 1 THEN OPENF C TYPES A STRING OF VERSION INFORMATION CONTAINED IN C SVER AT THE TERMINAL BEFORE PROMPTING FOR A COMMAND C LINE C DONE - A LOGICAL*1 VARIABLE THAT IS SET TO TRUE BY OPENF C IF THE USER SIGNIFIES HE IS DONE BY TYPING A C CONTROL-Z IN RESPONSE TO THE COMMAND PROMPT C [NOTE: THE NORMAL RT-11 CUSTOM OF TYPING CONTROL-C C WILL ALSO TERMINATE THE PROGRAM] C SVER - A FLEX STRING CONTAINING VERSION INFORMATION TO C BE TYPED IF CALLNO = 1 C INPUT: C PARAMETERS (SEE ABOVE) C COMMAND LINE FROM TERMINAL C OUTPUT: C OPENED FILES C CLEARED LINE NUMBER COMMON (BY CALL TO CLEAR) C VALUE OF "DONE" (DESCRIBED ABOVE) C C SIDE EFFECTS: C NONE KNOWN C C CHEN$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C C C C $P IMPLICIT INTEGER (A-Z) C INCLUDE "FLX:FLXSY3" $NOLIST INCLUDE "FLX:FLXSY3" $LIST $P STRING SB ' ' STRING DATSTR 'XX-MON-XX' STRING TIMSTR 'XX:XX:XX' STRING SSTARS ' **** ' STRING SEQUAL '=' STRING SWITCH (1) INTEGER*2 CALLNO,FILSPC(39),DEFTYP(4),SWT(4,4) INTEGER*2 D,N,TMPSPC(3),TT0,TTSPC,LEN BYTE SVER(1),PROMPT(2),CSILIN(82),EOF LOGICAL*1 DONE,ALLOK,MAKFIN DATA EOF /26/ DATA PROMPT /'*',"200/ DATA DEFTYP /3RFLX,3RFTX,3RFLL,3RFIN/ DATA FOREXT /3RFOR/ DATA TT0,TTSPC /3RTT0,3RTT / DATA D,N,C,L,F /1,2,3,4,5/ DATA SWT(1,1),SWT(1,2),SWT(1,3),SWT(1,4) 1 /'D','N','C','L'/ $P C................MAIN LOGIC FLOW OF ROUTINE..................... IF (CALLNO .EQ. 1 ) TYPE-VERSION CALL CLEAR !RESETS LINE NUMBERS ASSIGN-LOGICAL-UNIT-NUMBERS ASSIGN-DEFAULT-VALUES-TO-SWITCHES DONE = .FALSE. ALLOK = .FALSE. REPEAT UNTIL ( DONE .OR. ALLOK) ALLOK = .TRUE. GET-A-CSI-COMMAND-STRING UNLESS (DONE) PROCESS-CSI-COMMAND-STRING IF (ALLOK) OPEN-FILES FIN FIN CREATE-TITLE-LINES RETURN C................................................................. $P TO ASSIGN-DEFAULT-VALUES-TO-SWITCHES NOFORT = .FALSE. LSTFLG = .TRUE. NOLIST = .FALSE. TTYLST = .FALSE. MAKFIN = .FALSE. FINLST = .FALSE. DEBUG = .FALSE. LSTCOM = .FALSE. NOLNUM = .TRUE. FIN TO ASSIGN-LOGICAL-UNIT-NUMBERS FORLUN = 1 LSTLUN = 2 ERRLUN = 7 NEWLUN = 3 C BY MAKING ALL CHANNEL NUMBER = -1 INITIALIALY WE CAN LATER TELL IF A C CHANNEL HAS BEEN ASSOCIATED WITH THE VARIABLE (AND PRESUMABLY THE C CHANNEL OPENED) SINCE IGETC WILL RETURN A VALUE >= 0. DO (I=1,3) OCHAN (I) = -1 !MUST MAKE NON-(ZERO OR POSITIVE) DO (I=1,4) FLXLUN(I) = -1 FIN $P TO CHECK-FLECS-FILE-SPEC-AND-ASSIGN-TO-FLXLUN INLEVL = 1 TMPSPC(1) = FILSPC(16) TMPSPC(2) = FILSPC(17) TMPSPC(3) = FILSPC(18) CHAN = IGETC () WHEN (IFETCH (FILSPC(16)) .NE. 0) ALLOK = .FALSE. CALL PRINT (' FLECS-F- Cannot fetch input device') FIN ELSE WHEN (LOOKUP(CHAN,FILSPC(16)).GE.0) CHSTAT(1) = IREAD(256,INBUF(1,1,1),0,CHAN) WICHBF(1) = 2 BFPTR(1) = 513 INBLK (1) = 1 FLXLUN (1) = CHAN FIN ELSE 999 ALLOK = .FALSE. CALL PRINT (' FLECS-F-Input file not found') FIN IF ((FILSPC(1).EQ.0).AND.(FILSPC(6).EQ.0)) UNLESS (FILSPC(11) .NE. 0) C NO OUTPUT SPECS GIVEN. DEFAULT TO INPUT DEVICE AND FILENAME C AND DEFAULT EXTENSION FROM DEFTYP DO (I=1,3) FILSPC(I) = TMPSPC(I) FILSPC(I+5) = TMPSPC(I) IF (FINLST) FILSPC (I+10) = TMPSPC (I) FIN FILSPC(4) = DEFTYP (2) FILSPC(9) = DEFTYP (3) IF (FINLST) FILSPC (14) = DEFTYP (4) FIN FIN FIN FIN $P TO CHECK-FORTRAN-FILE-SPEC-AND-ASSIGN-TO-FORLUN CONDITIONAL (FILSPC(1) .EQ. 0) NOFORT = .TRUE. (IFETCH (FILSPC(1)) .NE. 0) CALL PRINT (' FLECS-F-Cannot fetch FORTRAN file device') FIN (OTHERWISE) CONTINUE FIN UNLESS ((.NOT. ALLOK) .OR. NOFORT) C.............BELOW FOR FORTRAN I/O............................... C C IF (IASIGN(FORLUN,FILSPC(1),FILSPC(2),FILSPC(5),17).NE.0) C C...................................................................... IF (SLOOPN (FORLUN,FILSPC(1)) .LT. 0) ALLOK = .FALSE. CALL PRINT (' FLECS-F-Can not open FORTRAN file') D TYPE *,' OPENF- FORTRAN FILE CHAN.,STATUS',OCHAN(FORLUN) D 1 ,OSTAT(FORLUN) FIN FIN FIN $P TO CHECK-LISTING-FILE-SPEC-AND-ASSIGN-TO-LSTLUN IF ((FILSPC(6).EQ.TT0).OR.(FILSPC(6).EQ.TTSPC)) TTYLST = .TRUE. FIN CONDITIONAL (FILSPC(6).EQ.0) NOLIST = .TRUE. FIN CONDITIONAL (NOLIST) CONTINUE (IFETCH (FILSPC (6)) .NE. 0) ALLOK = .FALSE. CALL PRINT (' FLECS-F-Can not fetch device for FLECS listing') FIN C.............BELOW FOR FORTRAN I/O............................... C C (IASIGN(LSTLUN,FILSPC(6),FILSPC(7),FILSPC(10),9).NE.0) C C...................................................................... (SLOOPN (LSTLUN,FILSPC(6)) .LT. 0) ALLOK = .FALSE. CALL PRINT (' FLECS-F-Can not open FLECS listing file') FIN (OTHERWISE) CONTINUE FIN FIN $P TO CHECK-FOR-NEW-INDENTED-SOURCE-FILE-SPEC-AND-ASSIGN-TO-NEWLUN IF (FILSPC (12) .NE. 0) FINLST = .TRUE. WHEN (FINLST) IF (FILSPC (11) .EQ. 0) FILSPC(11) = TMPSPC (1) FILSPC(12) = TMPSPC (2) FILSPC(13) = TMPSPC (3) FILSPC(14) = DEFTYP (4) FIN CONDITIONAL (IFETCH (FILSPC (11)) .NE. 0) ALLOK = .FALSE. CALL PRINT (' FLECS-F-Cannot fetch new source device') FIN (SLOOPN (NEWLUN,FILSPC(11)) .LT. 0) ALLOK = .FALSE. CALL PRINT (' FLECS-F-Can not create new indented source file') FIN (OTHERWISE) MAKFIN = .TRUE. !TELL FLECS THAT WE ARE MAKING FIN FILE FIN FIN FIN ELSE CONTINUE FIN $P TO CREATE-TITLE-LINES CALL CPYSTR (TITLN1,SSTARS) !PAD LEFT OF STRING W/ *'S EQPTR = FLNDEX (CSILIN,SEQUAL) !FIND "=" C COPY REMAINDER OF CSI STRING C (TO RIGHT OF EQUALS) TO TITLE CALL CATSUB (TITLN1,CSILIN,EQPTR+1,CSILEN-EQPTR) C ADD STARS TO RIGHT OF TITLE CALL CATSTR (TITLN1,SSTARS) C GET VERSION STRING C PAD TO 50 CHARS W/ BLANKS UNTIL (TITLN1(1) .GE. 50) CALL CATSTR (TITLN1,SB) C ADD DATE CALL DATE (DATSTR(2)) CALL CATSTR (TITLN1,DATSTR) C PAD TO 70 CHARS W/BLANKS UNTIL (TITLN1(1) .GE. 70) CALL CATSTR (TITLN1,SB) C AND ADD TIME CALL TIME (TIMSTR (2)) CALL CATSTR (TITLN1,TIMSTR) C PAD TO 80 CHARS AND ADD VERSION UNTIL (TITLN1(1) .GE. 80) CALL CATSTR (TITLN1,SB) CALL CATSTR (TITLN1,SVER) FIN TO GET-A-CSI-COMMAND-STRING CALL GTLIN (CSILIN(3),PROMPT) CSILEN = LEN (CSILIN (3)) CALL PUTINT (CSILEN,CSILIN(1)) SELECT (CSILIN(3)) C 0 - ONLY CARRAIGE RETURN SO PROMPT AGAIN (0) ALLOK = .FALSE. C EOF (=CNTRL-Z) -DONE (EOF) DONE = .TRUE. (OTHERWISE) C FILL IN SWITCH STRING FOR FLECS CALL CPYSTR (SWITCH,CSILIN) !GIVE FLECS ENTIRE CMD LINE FIN FIN FIN $P TO OPEN-FILES WHEN (FILSPC(17) .NE. 0) CHECK-FLECS-FILE-SPEC-AND-ASSIGN-TO-FLXLUN C NOW OPEN FORTRAN FILE CHECK-FORTRAN-FILE-SPEC-AND-ASSIGN-TO-FORLUN CHECK-LISTING-FILE-SPEC-AND-ASSIGN-TO-LSTLUN CHECK-FOR-NEW-INDENTED-SOURCE-FILE-SPEC-AND-ASSIGN-TO-NEWLUN FIN ELSE ALLOK = .FALSE. CALL PRINT (' FLECS-F- No input filename') FIN UNLESS (ALLOK) PURGE-OPEN-CHANNELS FIN FIN TO PURGE-OPEN-CHANNELS DO (LUN=1,3) ICHAN = OCHAN(LUN) IF (ICHAN .GE. 0) CALL PURGE (CHAN) CALL IFREEC (CHAN) FIN FIN ICHAN = FLXLUN (1) IF (ICHAN .GE. 0) CALL PURGE (ICHAN) CALL IFREEC (ICHAN) FIN FIN $P TO PROCESS-CSI-COMMAND-STRING ICSIST= ICSI(FILSPC,DEFTYP,CSILIN(3),SWT,4) SELECT (ISCIST) (0) CONTINUE (OTHERWISE) ALLOK = .FALSE. CALL PRINT (' FLECS-F-Illegal command line') FIN FIN IF (SWT(2,D) .NE. 0) DEBUG = .TRUE. !PROCESS DEBUG LINES? C MAKE NEW IDENTED SOURCE FILE? IF (SWT(2,N) .NE. 0) FINLST = .TRUE. C PASS COMMENT LINES TO FORTRAN FILE? IF (SWT(2,C) .NE. 0) LSTCOM = .TRUE. C NUMBER FORTRAN FILE? IF (SWT(2,L) .NE. 0) NOLNUM = .FALSE. FIN TO TYPE-VERSION ILEN = BY2INT (SVER(1)) ENCODE (ILEN+10,100,CSILIN) (SVER(I),I=3,3+ILEN) 100 FORMAT (10X,100A1) CSILIN (ILEN+11)=0 CALL PRINT (CSILIN) FIN END SUBROUTINE CLOSEF (MINERR,MAJERR) CHST FLXRT2.FLX - CLOSE FILES AND TYPE ERROR COUNT C C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C C SUBROUTINE CLOSEF C C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C C C PURPOSE: C TO CLOSE FILES AND TYPE ERROR COUNT ON TT: C C USAGE: C CALL CLOSEF (MINERR,MAJERR) C (PARAMETERS DESCRIBED BELOW) C C METHOD: C FOR ALL POSSIBLE CHANNEL VARIABLES C IF VARIABLE IS >=0 (CHANNEL HAS BEEN OPENED) C CLOSE OUPUT CHANNEL OR PURGE INPUT CHANNEL C FREE CHANNEL C C OUTPUT ERROR COUNT IF NON-ZERO C C SUBPROGRAMS REQUIRED: C FERROR -FLXRT1.FLX C IFREEC -SYSLIB.OBJ C PURGE -SYSLIB.OBJ C SLOCLS -FLXRT2.FLX C PARAMETERS: C MINERR -COUNT OF MINOR ERRORS C MAJERR -COUNT OF MAJOR ERRORS C INPUT: C PARAMETERS C OUTPUT: C CLOSED FILES C ERROR COUNT TO TERMINAL C C SIDE EFFECTS: C NONE KNOWN C CHEN$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C C $P IMPLICIT INTEGER (A-Z) C INCLUDE "FLX:FLXSY3" $NOLIST INCLUDE "FLX:FLXSY3" $LIST $P C FIRST CLOSE ALL CHANNELS DO (LUN = 1,3) CHAN = OCHAN (LUN) D TYPE *,' CLOSEF -- CLOSING LUN ',LUN,' CHAN ',CHAN UNLESS (CHAN .LT. 0) IF (SLOCLS (LUN) .LT. 0) CALL FERROR (ECLOSE) FIN FIN FIN DO (I =1,4) CHAN = FLXLUN (I) IF (CHAN .GE. 0) CALL PURGE (CHAN) CALL IFREEC (CHAN) FIN FIN C NOW OUTPUT ERROR COUNT IF ((MINERR + MAJERR) .GT. 0) DO (I=1,100) SSCRAT(I)=0 ENCODE (50,100,SSCRAT) MAJERR,MINERR 100 FORMAT (' FLECS-I-ERRORS: Major -',I3,' Minor -',I3) CALL PRINT (SSCRAT) FIN RETURN END SUBROUTINE CLEAR CHST FLXRT2.FLX - RESET (CLEAR) LINE NUMBERS C C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C C SUBROUTINE CLEAR C C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C C C PURPOSE: C TO RESET THE VARIOUS LINE NUMER VARIAVBLES CONTAINED IN C COMMON BLOCK /LINES/ TO 0 C C USAGE: C CALL CLEAR C C METHOD: C SET ALL VARIABLES IN /LINES/ TO 0 C C SUBPROGRAMS REQUIRED: C NONE C PARAMETERS: C NONE C INPUT: C VIA COMMON C NONE C OUTPUT: C RESET LINE NUMBER VARIABLES C C SIDE EFFECTS: C RESETS ALL LINE NUMBERS CHEN$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C C C INCLUDE "FLX:FLXSY3" $NOLIST INCLUDE "FLX:FLXSY3" $LIST INPLIN = 0 FORLIN = 0 PAGLIN = 0 RETURN END FUNCTION SLOOPN (LUN,FILSPC) CHST FLXRT2.FLX - OPEN FILES FOR SYSLIB OUTPUT C C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C C INTEGER FUNCTION SLOOPN C C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C C C PURPOSE: C TO OPEN FILES FOR OUTPUT WHERE OUTPUT C WILL BE BY MEANS OF ROUTINE SLWRIT (SYSLIB WRITE) C C USAGE: C USE SLOOPN (LUN,FILSPC) AS AN INTEGER C VALUE OF SLOOPN WILL BE THAT RETURNED BY IENTER (<0 INDICATES ERROR) C (SEE BELOW FOR PARAMETERS) C C METHOD: C USE IENTER TO CREATE FILE C INITIALIZE BUFFER POINTER VARIABLES (FOR DOUBLE BUFFERING) C C SUBPROGRAMS REQUIRED: C IENTER -SYSLIB.OBJ C IFREEC -SYSLIB.OBJ C IGETC -SYSLIB.OBJ C PURGE -SYSLIB.OBJ C PARAMETERS: C LUN -LOGICAL UNIT NUMBER USED AS INDEX TO OUTBUF C MUST BE >=1 AND NOT EXCEED THE THIRD DIMENSION OF C OUTBUF MATRIX C FILSPC - 4 WORD RAD50 FULL FILE SPEC C INPUT: C PARAMETERS C OUTPUT: C OPENED FILE C INITIALIZED BUFFER POINTER VARIABLES C C SIDE EFFECTS: C NONE KNOWN C C CHEN$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C C IMPLICIT INTEGER (A-Z) INTEGER*2 FILSPC(1) STRING SNOFIL 'SLOOPN NO OUTPUT FILE NAME' C INCLUDE "FLX:FLXSY3" $NOLIST INCLUDE "FLX:FLXSY3" $LIST INTEGER*2 DUMNAM(2) DATA DUMNAM /3RDUM,3RMY / IF ((LUN .GT. MXOLUN) .OR. (LUN .LT. 1)) STOP 'SLOOPN-- BAD LUN' IF (FILSPC (2) .EQ. 0) C TO AVOID PHYSICAL LOOKUP ASSIGN A DUMMY FILE NAME C [THIS SHOULD NEVER BE A PROBLEM BECAUSE ICSI C WILL NOT PERMIT A NULL OUTPUT FILESPEC UNLESS C TO A NON-FILE STRUCTURED DEVICE] FILSPC(2) = DUMNAM(1) FILSPC(3) = DUMNAM(2) FIN CHAN = IGETC () OCHAN(LUN) = CHAN D TYPE *,'SLOOPN LUN, CHAN',LUN,CHAN,OCHAN(LUN) ISTAT = IENTER (CHAN,FILSPC(1),FILSPC(5)) CONDITIONAL (FILSPC(5) .GT. ISTAT) !NOT ENOUGH ROOM ON DISK ISTAT = -5 FIN (ISTAT .GE. 0) !ALL OKAY OPTR (LUN) = 1 OBLK (LUN) = 0 WICHOB (LUN) = 1 OSTAT (LUN) = 1 FIN (OTHERWISE) D TYPE *,'SLOOPN PURGING CHANNEL' CALL PURGE (CHAN) CALL IFREEC (CHAN) FIN FIN SLOOPN = ISTAT RETURN END FUNCTION SLOCLS (LUN) CHST FLXRT2.FLX - FUNCTION TO CLOSE OUTPUT FILES C C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C C INTEGER FUNCTION SLOCLS C C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C C C PURPOSE: C TO CLOSE OUTPUT FILES WHICH HAVE BEEN OPENED USING SR. SLOOPN C AND WRITTEN USING SLWRIT C C USAGE: C USE SLOCLS (LUN) AS AN INTEGER VALUE C VALUE = -5 -IWAIT ERROR C VALUE = -6 -INVALID LUN C OTHERWISE VALUE = STATUS CODE FROM LAST IWRITE (<0 INDICATES ERROR) C C METHOD: C ZERO REMAINDER OF BUFFER C WRITE OUT LAST BLOCK C CLOSE FILE C FREE CHANNEL C C SUBPROGRAMS REQUIRED: C CLOSEC -SYSLIB.OBJ C IFREEC -SYSLIB.OBJ C IWAIT -SYSLIB.OBJ C IWRITW -SYSLIB.OBJ C PARAMETERS: C LUN -LOGICAL UNIT NUMBER USED AS INDEX TO OUTBUF C MUST BE >=1 AND NOT EXCEED THE THIRD DIMENSION OF C OUTBUF MATRIX C INPUT: C PARAMETER C OUTPUT: C COMPLETED FILE C C SIDE EFFECTS: C NONE KNOWN C C CHEN$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C C IMPLICIT INTEGER (A-Z) C INCLUDE "FLX:FLXSY3" $NOLIST INCLUDE "FLX:FLXSY3" $LIST BYTE FORMFD !FORM FEED CHARACTER DATA FORMFD /12/ D TYPE *,' SLOCLS -- LUN ',LUN WHEN ((LUN .GE. 1) .OR. (LUN .LE. MXOLUN)) CHAN = OCHAN (LUN) D TYPE *,' SLOCLS -- ABOUT TO TRY AND CLOSE CHAN #',CHAN UNLESS (CHAN .LT. 0) ISTAT = IWAIT (CHAN) D TYPE *,' SLOCLS -- WAIT STATUS',ISTAT WHEN (ISTAT .EQ. 0) C ADD A FINAL FORM FEED AND ZERO REST OF C BUFFER PTR = OPTR (LUN) WBF = WICHOB (LUN) WHEN (PTR .LT. 512) OUTBUF (PTR,WBF,LUN) = FORMFD DO (I=PTR+1,512) OUTBUF (I,WBF,LUN) = 0 FIN ELSE OUTBUF (512,WBF,LUN) = FORMFD !CLOBBERS LAST LINE FEED C SO WHAT BLK = OBLK (LUN) ISTAT = IWRITW (256,OUTBUF(1,WBF,LUN),BLK,CHAN) CALL CLOSEC (CHAN) CALL IFREEC (CHAN) WHEN (ISTAT .GE. 0) SLOCLS = ISTAT FIN ELSE SLOCLS = -5 RETURN FIN FIN ELSE SLOCLS = -5 RETURN FIN FIN FIN ELSE CALL PRINT (' FLECS-W-Attempt to close invalid LUN in SLOCLS') SLOCLS = -6 RETURN FIN RETURN END SUBROUTINE FLEXIT CALL EXIT RETURN END