ARAP.OLB PAGE 1 CSIFP.MAC -- USE CSI TO PARSE FILE NAME STRINGS WRITTEN DATE 10/22/77 REVI CALL: CALL CSIFP(CIV,IPT,CSIBLK,NER) WHERE: CIV IS INPUT STRING TO PARSE IT IS TERMINATED BY A BLANK,TAB,OR NULL IPT SUBSCRIPT INTO CIV UPPED TO STRING END CSIBLK STANDARD CSI CONTROL BLOCK NER 0 => OK 1 => ERROR DURING SYNTAX PARSE 2 => ERROR DURING SEMANTIC PARSE 3 => STRING > 33 CHARACTERS THIS ROUTINE IS CALLED FROM DBKOF (THE USER INTERFACE). SEE DBKOF.FTN FOR COMMENTS. CALL DBKOF4 (LUN, MODE, NER) LUN = LOGICAL UNIT NUMBER TO OPEN MODE = 0-3 (SEE DBKOF) NER = 0 IF OK, FCS ERROR CODE IF NOT **NOTE** DBKOF4 IS CALLED FROM DBKOF.FTN - DBKOF.FTN FILLS IN THE FILE DESCRIPTOR BLOCKS BY CALLING FPARS. DBKOF4 SHOULD NOT BE CALLED IN ANY OTHER CONTEXT OR RESULTS WILL BE UNKNOWN. ARAP.OLB PAGE 2 + DBKRD/WR - DISK BLOCK READ/WRITE REFER ALSO TO DBKRD.FTN AND DBKCF.MAC AND - X1LU.FTN,X1DR.MAC,X1EF.FTN FOR RECORD ORIENTED ROUTINES. CALL DBKWR (LUN, NR, IBUF, NWR) CALL DBKRD (LUN, NR, IBUF, NWR, NWA) LUN = I*2 LOGICAL UNIT NUMBER OF FILE TO R/W NR = I*2 VIRTUAL BLOCK NUMBER IN FILE TO BEGIN TRANSFER NOTE THAT NR IS UPDATED ON EXIT FROM DBKRD/WR ON EXIT FROM DBKRD NR = NR + (NWR-1)/256 + 1 WHERE 256 IS THE NUMBER OF I*2 WORDS PER DISK BLOCK. IBUF = INPUT/OUTPUT AREA, CAN BE INTEGER OR REAL, BUT NOT BYTE I.E. MUST BE ON EVEN BYTE BOUNDARY. NWR = I*2 NUMBER OF I*2 WORDS TO READ/WRITE, BEGINNING AT NR ABOVE. 1 DISK BLOCK = 256 I*2 WORDS. NWA = RETURNED ONLY FROM DBKRD. I*2 NUMBER OF I*2 WORDS ACTUALLY READ. THIS IS USEFUL FOR CHECKING END-OF FILE CONDITIONS. IF THE END OF FILE IS REACHED NWA WILL BE LESS THAN NWR OR 0 IF A BLOCK IS REQUESTED THAT IS BEYOND THE END-OF-FILE. **NOTES** THERE ARE NO ERROR RETURNS. IF AN ERROR OCCURS DURING THE OPERATION THE PROGRAM WILL TERMINATE VIA THE TRAP INSTRUCTION - CAUSING F4P TO LOG THE MESSAGE. THE COMPATIBLE CLOSE ROUTINE TO DBKRD/WR IS DBKCF. => CALL DBKCF (LUN) =< DBKRD/WR ARE IN DB2:[350,2]ARAP.OLB ALONG WITH DBKOF (OPEN), DBKCF AND THEIR RELATED SUPPORT ROUTINES. FOR THOSE DOING OVERLAYS, THE FOLLOWING IS WHAT IS NECESSARY TO BE EXTRACTED FROM THE LIBRARY. FOR THE OPEN OVERLAY...... OP1: .FCTR [350,2]ARAP/LB:DBKOF:DBKOF1 - OP2 OP2: .FCTR [350,2]ARAP/LB:CSIFP:FPARS:FPARS1:FPARS2 - OP3 OP3: .FCTR [350,2]ARAP/LB:FFNAM:FFVERN:FPCFS:MONTRY FOR THE ROOT SEGMENT...... DISK1: .FCTR [350,2]ARAP/LB:DBKRD:FPUICT FOR THE CLOSE OVERLAY CLOSE1: .FCTR [350,2]ARAP/LB:DBKCF FOR UNOVERLAYED TASKS.... - ARAP.OLB PAGE 3 DELET.MAC -- FORTRAN CALLABLE DELETE AUTHOR: LEN DATE WRITTEN: 16-NOV-78 CALL: CALL DELETE (LUN, NERR) WHERE: LUN = FILE'S LOGICAL UNIT NERR = ERROR CODE 0=OK, NON-0=ERROR FBDMOD.MAC -- MODIFY FDB BEFORE OPEN AUTHOR: A. BARR DATE WRITTEN: 4/25/77 DATE REVISED: 04/29/77 10/30/78 LEN - ADDED FIX AND VAR OPTIONS CALL: CALL FBDMOD(LUN, ['NC'!'CC'] [,'SP'!'NS'] [,'LR',LRECL] 1 ['FI'], ['VA']) WHERE: LUN IS LUN # OF LUN TO MODIFY NC=> NO CARRIAGE CONTROL CC=> CARRIAGE CONTROL SP=> SPANNED BLOCKS NS=> NO SPANNED BLOCKS LR=> MAKE VAL OF NEXT PARM INTO LRECL FOR LUN PARMS OTHER THAN LUN MAY BE IN ANY ORDER FI=> SET FIXED LENGTH RECORD VA=> SET VARIABLE LENGTH RECORD ARAP.OLB PAGE 4 *FFNAM.MAC -- FETCH FILE NAME INFORMATION FROM FDB WRITTEN DATE 10/27/77 REVISED DATE CALL: CALL FFNAM(LUN,CIV,NC) WHERE: LUN LUN # OF FILE CIV RETURNED AS DEV:FILE-NAME.FILE-TYPE;VER-NO NC NC IN CIV - FPARS2.MAC -- USE .PARSE TO FILL IN FDB AUTHOR: A. BARR DATE WRITTEN: 12/27/77 DATE REVISED: 6-FEB-78 FOR BETTER UIC HANDLING CALL: CALL FPARS2(LUN,DSD,DFNB,NER) WHERE: ARAP.OLB PAGE 5 FPUICT DEFINE STORAGE AREA FOR UIC'S /1 WORD PER UINT GATTR.MAC -- GET FILE ATTRIBUTES AUTHOR: J. LEONARD DATE WRITTEN: 09-AUG-79 CALL: CALL GATTR (LUN, IFRTYP, IFRATT) WHERE: LUN = FILE'S LOGICAL UNIT IFRTYP = RECORD TYPE BYTE BUT RETURNED AS I*2 IFRATT = RECORD ATTRIBUTES (I*2) + CALL GETUSE(IUSER) RETURNS NAME OF USER DOING CALLING VERSION OF GETUSR FROM JACKSON LABS MODIFIED BY LEN 3/9/79 SO TASK DOES NOT HAVE TO PRIVLEDGED. MODIFIED FOR IAS VS3.0. TASK NOW HAS TO BE PRIVLEDGED IN ORDER TO GET .CRJOB. LEN 4/2/79 - ARAP.OLB PAGE 6 GSTAT.MAC -- PLUG STATISICS BLOCK ADDRESS AUTHOR: J. LEONARD DATE WRITTEN: 08-MAY-78 CALL: CALL GSTAT (LUN, STBLK) WHERE: LUN = FILE'S LOGICAL UNIT STBLK = I*2 STAT BLOCK, 5 WORDS LONG I = IBLUF (BCHR, BVEC) FIND BCHR IN BVEC, IF ENCOUNTER A ZERO BYTE IN BVEC THEN TERMINATE WITH I = -1, ELSE I = POSITION IN BVEC WHERE MATCH MADE ARAP.OLB PAGE 7 ICFGS.MAC -- CHARACTER GET/PUT ROUTINES AUTHOR: S. F. HEFFNER DATE WRITTEN: 5/2/76 DATE REVISED: 12/28/76,7/06/77 FOR ASCII USE ***NOTE--THE FOLLOWING ROUTINES (ICHGS THRU ICSPC) ARE NOT ***REENTRANT AND CAN'T BE, SINCE GNXCH/PNXCH DEPEND UPON ***ICHGS ETC. TO SET UP AND STORE ARGUMENTS ACROSS CALLS. ***ALSO, GNXCH AND PNXCH DON'T PRESERVE REGS! ICHGS--INITIALIZE CHAR GET SCAN GNXCH--GET NEXT CHAR ICFGS--ICHGS W/SPECIFIED MAX LENGTH ICSGC--ICHGS+GNXCH ICHPS--INITIALIZE CHAR PUT SCAN PNXCH--PUT NEXT CHAR ICSPC--ICHPS+PNXCH CALL ICHGS(VEC,IICP,ICP) CALL GNXCH(CHAR) CALL ICFGS(IPE,VEC,IICP,ICP) CALL ICSGC(VEC,IICP,ICP,CHAR) CALL ICHPS(VEC,IICP,ICP) CALL PNXCH(CHAR) CALL ICSPC(VEC,IICP,ICP,CHAR) WHERE: VEC = INTEGER*2 VECTOR IICP = INITIAL CHAR POSITION ICP = CHAR POSITION IPE = MAX NO. OF CHARS CHAR = INTEGER*2 VAR FOR CHAR ARAP.OLB PAGE 8 ICMP - LOGICAL COMPARE 09-JAN-79 LOGICAL COMPARE OF TWO I*2 WORDS N = ICMP( I1, I2) WHERE N=0 IF I1=I2 N=1 IF I1>I2 N=-1IF I1 STR2, RETURN 4. MODE 2: FOR LGTH OF SHORTER STRING, IF STR1 = STR2, RETURN 8. IF STR1 <> STR2, RETURN 0. MODE 3: IF STR2 A SUBSTR OF STR1, RETURN THE STARTING POSITION IN STR1 WHERE STR2 APPEARS. IF NOT, RETURN 0. MODE 4: DEFINING A DELIMITER AS ANY ASCII CHAR .NE. (0-9) OR (A-Z) IF STR2 IS A DELIMITED SUBSTR OF STR1 (DELIMITERS NOT REQUIRED AT START OR END OF STR1), RETURN THE STARTING POSITION IN STR1 WHERE STR2 APPEARS. IF NOT, RETURN 0. NOTE: NMWS SEQUENCE S1A,...,S2L IS REQUIRED BY SETUP CODE BELOW. ARAP.OLB PAGE 10 LCKCV.MAC -- CHECK BIT VALUE AUTHOR: LEN DATE WRITTEN: 23-JAN-78 FUNCTION LCKCV (IBIT, IVEC) IBIT = BIT TO CHECK (STARTS AT 0) IVEC = BIT STRING RETURNS 1 IF SET, 0 IF NOT MODFD.MAC -- MODIFY FDB FOR 0 BLOCK PRINT FILES AUTHOR: J. LEONARD DATE WRITTEN: 03-NOV-77 CALL: CALL MODFD (LUN, NBLKS) WHERE: LUN = FILE'S LOGICAL UNIT NBLKS = NUMBER OF BLOCKS ALLOCATED (FROM DIR/FU) ARAP.OLB PAGE 11 MONTRY MONITOR TRACE IN & TRACE OUT ROUTINE USED WHEN DEBUGGEG NOT IN MONTRI CALLED BY FORTRAN CALLABLE ASSEM RTNS. JSR R1,MONTRI .BYTE NPAR ;# PARMS EXPECTED BY ASSEM RTN ;NPAR IS -1 IF VAR NUM OF ARGS MONTRI POPS R5 FOR NON VARIABLE PARM LIST .BYTE 0 ;RES FOR FUTURE USE .RAD50 /ASSEM NAME(MUST BE 2 WORDS/ MONTRI WILL BUILD TRACE BACK CHAIN AND SAVE REGS MONTRO WILL RESTORE REGS(MONTRO IS CALLED INSTEAD OF ASSEM ROUTINE DOING AN RTS PC TO RETURN) POPS TRACE BACK CHAIN RESTORES REGS 0-4 MONTRF FUNCTION RETURN-SAME AS MONTRO EXCEPT DOESN'T RESTORE R0 NSCOPE.MAC - FIND TERMINAL SPEED AUTHOR: LEN DATE WRITTEN: 20-DEC-78 N = NSCOPE (LUN) WHERE LUN = LOGICAL UNIT NUMBER OF TERMINAL N = 0 IF NOT SCOPE, 1 IF IT IS ARAP.OLB PAGE 12 OPFID.MAC --OPEN ON FILE ID AUTHOR: J. LEONARD DATE WRITTEN: 12-MAY-78 CALL: CALL OPFID (LUN, ID, NERR) WHERE: LUN = FILE'S LOGICAL UNIT ID = 3 WORD FILE ID NERR = FCS ERROR CODE CALL STBLK (BUF1, BUF2, NCH) WHERE - BUF1 = INPUT BUFFER BUF2 = OUTPUT BUFFER (BUF1 CAN BE THE SAME AS BUF2) NCH = # OF CHARACTERS TO STRIP OUT BLANKS ALSO REFER TO STBLK.FTN FOR TRNASPORTABLE VERSION BLOCKED DISK READ WRITE CALL X1DR (ID, NR, NWR, IOAR) WHERE - ID = 6 WORD ID BLOCK (SEE X1LU) NR = RECORD # TO BEGIN READING NWR = # OF I*2 WORDS TO READ IOAR = BUFFER AREA TO ACCEPT DATA CALL X1DW (ID, NR, NWW, IOAR) WHERE - ID = 6 WORD ID BLOCK NR = RECORD # TO BEGIN WRITE NWW = # I*2 WORDS TO WRITE IOAR = OUTPUT AREA SAME AS ABOVE BUT DATA IS TRANSFERRED FROM IOAR TO THE BUFFER AREA AND EVENTUALLY TO DISK ** NOTE ** NR IS ASSUMED TO BE I*2 UNLESS BIT 0 IS SET IN ID(5). SEE X1LU. ARAP.OLB PAGE 13 X1EFBY.MAC -- FETCH EOF BLOCK NO. AND FIRST FREE BYTE. AUTHOR: J. LEONARD DATE WRITTEN: 02-NOV-78 CALL: CALL X1EFBY (LUN, ILOBLK, IHIBLK, IFBY) WHERE: LUN = FILE'S LOGICAL UNIT ILOBLK = LOW ORDER WORD OF EOF BLOCK IHIBLK = HI ORDER WORD OF EOF BLOCK IFBY = FIRST FREE BYTE