try: .GTDID .B 01-Input: R0 = FDB addresst R1 = FNB address" R2 = Directory descriptor address.B 01Output: See ..GTDI.B 01n All registers preserved.B 01 Conditionals: R$$ELP.LM -5.F .HL 02 MKDLr.PFThis module contains the internal routine to mark a file for deletion.EWhile the file is deleted by this routine, the directory entry is notnremoved..NFi.LM +5.TS 21,29,37,45,53,61p.B 02l Entry: ..MKDLo.B 01 Input: R0 = FDB address R1 = FNB address6.B 010 Output: C = 0, delete successful$ = 1, delete failed, F.ERR(R0) set.B 01  R0 preserved, R1-R5 destroyed.B 01uConditionals: None.LM -5.F s .HL 02 MOVREC.PGThis routine transfers records to and from user buffers. It is designedo6to work correctly for odd address and odd byte counts..NFl.LM +5.TS 21,29,37,45,53,61o.B 02t Entry: ..MVR1t.B 01oInput: R0 = FDB address5 R1 = Address of source R2 = Address of destination R3 = Size of block to moveR.B 01 )Output: R1 = Address of last byte moved+1c# R2 = Address of last byte stored+1R.B 01! R0,R4 preserved, R3,R4 destroyedy.B 010Conditionals: None.LM -5.F .HL 02 MRKDL.PCThis module contains the user interface for deleting a file withoutdremoving the directory entry. .NFd.LM +5.TS 21,29,37,45,53,61l.B 025 Entry: .MRKDL4.B 01oInput: R0 = FDB address.B 01 Output: C = 0, delete successful$ = 1, delete failed, F.ERR(R0) set.B 01n All registers preserved.B 01BConditionals: None.LM -5.F b .HL 02 OPEN.PGThis module contains the code for accessing a file. It can be assembledeGinto three different versions: normal open (R$$OPF=0), open by filenamedDblock (R$$OPF=1), and open by file-ID (R$$OPF=2). See the RSX-11/IAS>I/O Operations Reference Manual, pages 3-2 to 3-17 for further1descriptions of the calling sequence and outputs.s.NFB.LM +5.TS 21,29,37,45,53,61c.B 02Entry: .OPEN, .OPFNB, .OPFID.B 01Input: R0 = FDB addresse.B 01#Output: C = 0, operation successfulF' = 1, operation failed, F.ERR(R0) seti.B 01c All registers preserved.B 01b)Conditionals: R$$ANI,R$$BBF,R$$DPB,R$$EIS:0 R$$MBF,R$$NAM,R$$OPF,R$$RSL,R$$11M.LM -5.F .HL 02 PARDI.PEThis routine continues the directory parsing process for the default2>directory. If the device and unit agree with the current saved@directory-ID's device, the saved default directory-ID is copied.@Otherwise, the directory-ID is obtained and saved for later use..NF .LM +5.TS 21,29,37,45,53,61=.B 02r Entry: ..PDI.B 010Input: R0 = FDB addresss R1 = FNB address0.B 01d1 0(SP) = Directory lookup routine (..DIDF/..DIRF)  2(SP) = Return address$.B 011#Output: C = 0, operation successful' = 1, operation failed, F.ERR(R0) sets.B 01c All registers preserved.B 01IConditionals: R$$SCS.LM -5.F c .HL 02 PARDIDi.PEThis routine is a short-hand version of the directory lookup process,t<specifically designed for default directories. It sets up to<call ..DIDF for directory processing and continues in ..PDI..NFR.LM +5.TS 21,29,37,45,53,61r.B 02B Entry: ..PDIDD.B 01yInput: R0 = FDB address. R1 = FNB addresst.B 01rOutput: See ..PDIt.B 01, All registers preserved.B 01pConditionals: None.LM -5.F 0 .HL 02 PARSDIe.P8This module contains the logic for parsing the directoryspecification..NFs.LM +5.TS 21,29,37,45,53,61n.B 02 Entry: .PRSDI, ..PSDIs.B 01cInput: R0 = FDB addressa R1 = FNB address ! R2 = DSD address or zero if noner) R3 = Default FNB address or zero if none.B 01#Output: C = 0, operation successful:' = 1, operation failed, F.ERR(R0) set..B 01  All registers preserved.B 01 Conditionals: None.LM -5.F.PFDirectory processing in FCS appears somewhat complex the first time it=is examined. The following routines and entries are involved:c .TS 13,21s.TP 11.NF .B 017 DIDFND ..DIDF DIFND ..DID1 ..DIDP DIRFND ..DIRF GETDI ..GTDId GETDID .GTDID GETDIR .GTDIR PARDI ..PDI PARDID ..PDID PARSDI .PRSDI ..PSDIr.B 01z.F@For the three user-level entries (.GTDID,.GTDIR, and .PRSDI) the?following flow occurs. Note, for .PRSDI, there are three flows:+dataset(1), default-FNB(2), and neither(3):i.TS 13,21,29,37,45,53,61.TP 06.NFh.B 01l .GTDID .GTDIR (1) (2) (3)e ..GTDI ..GTDI ..DIRF none ..PDI ..PDID ..DIRF ..DID ..DIRF ..PDI ..DID ..DID ..DIDF .F .HL 02 PARSDV..PEThis module contains the code to parse the device name and assign theIFDB's LUN to the parsed device.P.NF..LM +5.TS 21,29,37,45,53,61e.B 02lEntry: .PRSDV, ..PSDVT.B 01dInput: R0 = FDB addressl R1 = FNB addressr! R2 = DSD address or zero if nonea) R3 = Default FNB address or zero if none.B 012#Output: C = 0, operation successfull' = 1, operation failed, F.ERR(R0) set .B 01.# If .PRSDV, all registers preservedD.B 01F, If ..PSDV, R0-R3 preserved, R4,R5 destroyed.B 01DConditionals: R$$ELP.LM -5.F .HL 02 PARSE.P<This module contains the routines to completely parse a fileBspecification. The individual parsing modules (PARSDI, PARSDV, and9PARSFN) are called for each component of a specification.S.PEThe routine ..STFN is an internal entry used to parse the filename if0Dno file-ID has been set. If parsing is needed, it falls into ..PARS.#Otherwise the routine merely exits. .NFt.LM +5.TS 21,29,37,45,53,61S.B 02R Entry: ..STFN,.B 01rInput: R0 = FDB addresss.B 01POutput: R1 = FNB address.B 01P R0 preserved, R2-R5 destroyed.LM -5.F.P>The routines .PARSE and ..PARS parse a complete specification..NF,.LM +5.TS 21,29,37,45,53,61d.B 02cEntry: .PARSE, ..PARSi.B 01SInput: R0 = FDB addressi R1 = FNB address ! R2 = DSD address or zero if nonef) R3 = Default FNB address or zero if nonei.B 01 #Output: C = 0, operation successfule' = 1, operation failed, F.ERR(R0) set4.B 01S# If .PARSE, all registers preservedu.B 01 , If ..PARS, R0-R3 preserved, R4,R5 destroyed.B 01PConditionals: R$$ELP,R$$SPLy.LM -5.F .HL 02 PARSFNs.P4This module contains the code to parse the filename..NF5.LM +5.TS 21,29,37,45,53,61c.B 02:Entry: .PRSFN, ..PSFNS.B 01:Input: R0 = FDB address  R1 = FNB address ! R2 = DSD address or zero if none ) R3 = Default FNB address or zero if none .B 01t#Output: C = 0, operation successful1' = 1, operation failed, F.ERR(R0) setS.B 01P# If .PRSFN, all registers preserved .B 01., If ..PSFN, R0-R3 preserved, R4,R5 destroyed.B 01tConditionals: None.LM -5.F .HL 02 PGCRR.PBThis routine checks to see if the FDB is properly setup for recordFinput and output. The file is checked to see if it has been opened andGthe proper I/O mode is checked (sequential/random/block). The module isnBassembled into two versions depending on the definition of R$$SEQ..PAThe routine ..PGCR checks for proper random or sequential I/O. IfBFrandom I/O, it checks that the device is not sequential in nature. TheGroutine ..PGCS checks for sequential I/O only. The calling arguments to both are the same..NFe.LM +5.TS 21,29,37,45,53,61o.B 02eEntry: ..PGCR, ..PGCSn.B 01tInput: R0 = FDB addresss.B 01tOutput: C = 0, operation OKp( = 1, operation illegal, F.ERR(R0) set.B 01  All registers preserved.B 01oConditionals: R$$SEQ.LM -5.F .HL 02 PNTMRK.PDThis module contains the user routines for returning to a previouslyDnoted position in a file and for getting the current position in theGfile. A file's position is designated by a double-word block number andh$a single word byte within the block..PBThe .POINT routine positions a file to a previous marked position..NFs.LM +5.TS 21,29,37,45,53,61a.B 02p Entry: .POINTt.B 01eInput: R0 = FDB address R1 = New VBN number (high part) R2 = New VBN number (low part)F R3 = Byte number within block.B 01o#Output: C = 0, operation successfulg' = 1, operation failed, F.ERR(R0) sete.B 01r All registers preserved.LM -5.F.PDThe .MARK routine retrieves the current record position. The virtualCblock number is taken from the F.VBN doubleword. The byte number iss<calculated from the current position in the block I/O buffer(F.NREC+F.VBSZ-F.EOBB).n.NF..LM +5.TS 21,29,37,45,53,61 .B 02 Entry: .MARK.B 01rInput: R0 = FDB addressB.B 01r#Output: R1 = VBN number (high part)n R2 = VBN number (low part), R3 = Byte number within block.B 01o R0,R4,R5 preservede.B 010Conditionals: None.LM -5.F 5 .HL 02 POINT.PGThis module contains the internal code for repositioning a file. If therCdesired block is different from the current block, the old block isfEwritten if dirty and the new block read. The record pointers are then) set up for the desired position..NF .LM +5.TS 21,29,37,45,53,61.B 02R Entry: ..PNT1B.B 01rInput: R0 = FDB address R1 = New VBN number (high part) R2 = New VBN number (low part)n R3 = Byte number within block.B 01B#Output: C = 0, operation successful' = 1, operation failed, F.ERR(R0) sets.B 01t R0 preserved, R1-R5 destroyed.B 01 Conditionals: R$$ANI,R$$BBFe.LM -5.F r .HL 02 POSIT.P=This module contains the code for calculating the positioning Finformation necessary for use with .POINT for a file with fixed-lengthrecords..NF6.LM +5.TS 21,29,37,45,53,610.B 02uEntry: .POSIT, ..PSITR.B 01 Input: R0 = FDB addressR.B 01 / F.RCNM doubleword set to desired record numberb.B 01B Output: C = 0, operation success' = 1, operation failed, F.ERR(R0) set(.B 01s- If successful, following registers returned: .B 01t R1 = VBN number (high part) R2 = VBN number (low part)h R3 = Byte number within block.B 01t If .POSIT, R0,R4,R5 preserved.B 01s) If ..PSIT, R0 preserved, R4,R5 destroyede.B 01hConditionals: R$$EIS.LM -5.F 7 .HL 02 POSREC0.PFThis module contains the routines used to position a fixed-length fileFto a specific record. Besides the entry documented below (.POSRC), theDentries ..PSR1, ..PSRC, and ..PSRG are also in this module. However,=they are merely call other routines are are therefore are notbdocumented further. .NFu.LM +5.TS 21,29,37,45,53,61m.B 02h Entry: .POSRCt.B 01PInput: R0 = FDB address.B 01( F.RCNM doubleword set to desired record.B 01h#Output: C = 0, operation successful7' = 1, operation failed, F.ERR(R0) sets.B 01u All registers preserved.B 01nConditionals: None.LM -5.F i .HL 02 PPNASCo.P:This routine translates a binary UIC into its ASCII stringrepresentation. .NFe.LM +5.TS 21,29,37,45,53,61l.B 02r Entry: .PPASC .B 01r-Input: R2 = String address to store ASCII UIC$ R3 = Binary UIC (.BYTE owner,group) R4 = Conversion Flags.B 01D" Bit 0 = 0, suppress leading zeros = 1, output leading zeros# Bit 1 = 0, output separators ([,])% = 1, suppress separator outputs.B 01uOutput: String outputv.B 010 R2 = Last byte output+1.B 01F R0,R1,R3-R5 preserved.B 01rConditionals: R$$EIS.LM -5.F t .HL 02 PPNR50.P:This routine translates a binary UIC into two RAD50 words..NF:.LM +5.TS 21,29,37,45,53,61t.B 02d Entry: .PPR50S.B 015Input: R1 = Doubleword address to store RAD50 resultsn$ R2 = Binary UIC (.BYTE owner,group).B 01zOutput: UIC converted to RAD50.B 01$ R0,R4,R5 preserved, R1-R3 destroyed.B 01=Conditionals: None.LM -5.F 0 .HL 02 PUT.PDThis module contains the code for outputting a logical record to theCdevice/file. The module can be assembled for either sequential onlyEsupport (R$$SEQ) or random/sequential support. See the RSX-11/IAS I/OLFOperations Reference Manual, pages 3-23 to 3-28 for further details on#calling sequence and return values.e.NFn.LM +5.TS 21,29,37,45,53,61,.B 02Entry: .PUT, .PUTSQo.B 01 Input: R0 = FDB addressR.B 01rOutput: C = 0, record input' = 1, operation failed, F.ERR(R0) set2.B 01P All registers preserved.B 01o0Conditionals: R$$ANI,R$$EIS,R$$RSL,R$$SEQ,R$$11M.LM -5.F .HL 02 RDRNf.PFThis routine inputs the next virtual block, writing the current one ifit is dirty (FD.WRT=1).p.NFo.LM +5.TS 21,29,37,45,53,61 .B 02 Entry: ..RDRNa.B 01Input: R0 = FDB addressr.B 01s#Output: C = 0, operation successful6' = 1, operation failed, F.ERR(R0) set.B 01R R0 preserved, R1-R5 destroyed.B 01,Conditionals: None.LM -5.F a .HL 02 RDWAIT .P>This module contains the routines for reading the next virtualKblock. ..RWAT increments the block number (F.VBN) and falls into ..RWAC. ItiEalso checks for record-oriented transfers and handles them correctly.F.NF=.LM +5.TS 21,29,37,45,53,617.B 026 Entry: ..RWATr.B 01RInput: R0 = FDB addressD.B 01s% See ..RWAC for remaining descriptionc.LM -5.F.PFThe routine ..RWAC reads the current virtual block. It only expects tobe called for block I/O..NF.LM +5.TS 21,29,37,45,53,61.B 02s Entry: ..RWACs.B 01uInput: R0 = FDB addresst.B 01l F.VBN(R0) = Block number& F.BDB(R0) = Address of buffer header% F.BBFS(R0) = Number of bytes to readn.B 01n#Output: C = 0, operation successfulN' = 1, operation failed, F.ERR(R0) set6.B 01:' F.NREC(R0) = Address of start of blockD$ F.EOBB(R0) = Address of last byte+1.B 01o R0 preserved, R1-R5 destroyed.B 01rConditionals: R$$BBF,R$$MBFk.LM -5.F t .HL 02 RDWRIT .P@This module contains the common routines for READ/WRITE I/O. TheCroutine ..RWCK checks that block I/O is allowed. It checks that the Ffile is opened (F.DBD nonzero), READ/WRITE mode is set (FD.RWM=1), and(the device is block oriented (FD.REC=0)..NFn.LM +5.TS 21,29,37,45,53,61 .B 02 Entry: ..RWCK.B 01Input: R0 = FDB addresss.B 01 Output: C = 0, Block I/O allowed1 = 1, Block I/O not allowed, F.ERR(R0) = IE.ILL.B 01 All registers preserved.LM -5.F.PDThe routine ..WTRD actually issues the block I/O requests. The block)number is bumped after the I/O completes.h.NFo.LM +5.TS 21,29,37,45,53,61a.B 02 Entry: ..WTRD(.B 01oInput: R0 = FDB addresss' R4 = I/O function code (IO.WVB/IO.RVB) .B 01d( F.VBN(R0) = Block number to read/write F.BKDS(R0) = Buffer descriptor& F.BKST(R0) = I/O status block address" F.BKDN(R0) = I/O done AST address.B 01 #Output: C = 0, operation successful.' = 1, operation failed, F.ERR(R0) setL.B 01F R0 preserved, R1-R5 destroyed.B 01sConditionals: None.LM -5.F .HL 02 READp.PDThis routine is the user interface for reading a block via block I/OGmode. See the RSX-11/IAS I/O Operations Reference Manual, pages 3-28 tod?3-31 for further details on calling sequence and return values.i.NFF.LM +5.TS 21,29,37,45,53,61.B 02( Entry: .READ.B 01kInput: R0 = FDB address/.B 01A#Output: C = 0, operation successfule' = 1, operation failed, F.ERR(R0) setl.B 01R All registers preserved.B 01,Conditionals: None.LM -5.F a .HL 02 RENAME5.PGThis routine is the user interface for renaming a file. Only the file'sbAdirectory entry is manipulated, the filename internal to the filecheader is untouched..NF-.LM +5.TS 21,29,37,45,53,61n.B 02n Entry: .RENAMa.B 01&Input: R0 = FDB address (old filename) R1 = FDB address (new filename).B 01D#Output: C = 0, operation successfule' = 1, operation failed, F.ERR(R0) setl.B 01R All registers preserved.B 01sConditionals: None.LM -5.F o .HL 02 RETADR.PFThis routine correctly sets up the FDB record pointers for locate mode,I/O. If called for move mode, it is a no-op..NFd.LM +5.TS 21,29,37,45,53,61f.B 02e Entry: ..RTADe.B 01-Input: R0 = FDB address,.B 010Output: F.NRBD(R0) = Set to record size, address.B 01o$ R0,R1,R3-R5 preserved, R2 destroyed.B 01)Conditionals: R$$ANI,R$$BBFa.LM -5.F e .HL 02 RSTFDBt.PGThis routine resets a FDB so it can be used for another open. If recordoDI/O was used, the block buffer is returned to the pool. Locations inEthe FDB that are assumed to be zero if no file is opened are cleared.v.NFe.LM +5.TS 21,29,37,45,53,61.B 022 Entry: ..RFDB.B 01Input: R0 = FDB addressn.B 01 %Output: FDB reset to non-opened stateR.B 01t R0 preserved, R1-R5 destroyed.B 011Conditionals: R$$MBF.LM -5.F ) .HL 02 RWBLK.PGThis module contains the routines used to issue the read/write requestsD?for record I/O. The routines are used for both record and blockhDoriented devices. The only difference between the entries is the I/O3codes used. ..RBLK uses IO.RVB. ..WBLK uses IO.WVB.v.PFThe carriage control and VBN are always stored in the constructed QIO.CWhen issued to record devices, QIO parameters 4 and 5 are typicallyAignored. Similarly, block I/O devices ignore parameter 3. The I/OFDstatus block is assumed to be at the beginning of the buffer header,?which is assumed to be immediately in front of the data buffer.n.PFNo implicit wait for I/O completion is made. The carry bit will be set only if the QIO directive fails..NF .LM +5.TS 21,29,37,45,53,61K.B 02OEntry: ..RBLK, ..WBLKe.B 01lInput: R0 = FDB addressd R1 = Address of data buffer R2 = Size of data bufferQ R3 = Carriage control character.B 01o F.VBN(R0) = Block number.B 01g(Output: R1 = Address of I/O status block.B 01e R0 preserved, R2-R5 destroyed.B 01hConditionals: R$$MBF.LM -5.F a .HL 02 RWFSR2f.PGThis module contains a collection of routines to allow the user to ready(and write fields in $$FSR2. The routinesD(.RDFDR, .WDFDR, .RDFFP, .WDFFP, .RFOWN, .WFOWN, .RDFUI, and .WDFUI)@are described in the RSX-11/IAS I/O Operations Reference Manual,pages 4-2 to 4-6.o a .HL 02 RWLONG .PGThis routine is used to perform block I/O transfers when the byte countpBis greater than one block (512 bytes). This routine is selected byFthe .READ/.WRITE routines when appropriate. Otherwise, ..WTRD is used..NFh.LM +5.TS 21,29,37,45,53,61 .B 02i Entry: ..RWLGe.B 01oInput: R0 = FDB addressi' R4 = I/O function code (IO.RVB/IO.WVB)..B 01. FDB setup for block I/O request.B 01)#Output: C = 0, operation successful ' = 1, operation failed, F.ERR(R0) seto.B 01 All registers preserved.B 01iConditionals: None.LM -5.F n .HL 02 TRNCLSb.P@This routine truncates a file to its EOF position and closes thefile.y.NF .LM +5.TS 21,29,37,45,53,61o.B 02 Entry: .TRNCLR.B 01eInput: R0 = FDB address2.B 01,# F.EFBK, F.FFBY set to EOF positiono.B 01:#Output: C = 0, operation successfuln' = 1, operation failed, F.ERR(R0) setp.B 01o All registers preserved.B 01 Conditionals: None.LM -5.F .HL 02 UDIRECd.PAThis module contains the user interface routines for issueing thesDdirectory primitive functions: find filename (.FIND), enter filenameA(.ENTER), and remove filename (.REMOV). The calling sequences and1Creturn values are documented fully in the RSX-11/IAS I/O Operationsr%Reference Manual, pages 4-12 to 4-14.F.NFt.LM +5.TS 21,29,37,45,53,61e.B 02sEntry: .FIND, .ENTER, .REMOV.B 01 Input: R0 = FDB addressA R1 = FNB addressv.B 010#Output: C = 0, operation successful ' = 1, operation failed, F.ERR(R0) sets.B 01e All registers preserved.B 01 Conditionals: R$$NAM.LM -5.F f .HL 02 UPWARDF.P8This routine provides extended file lookup abilities for6SCS-11 systems. It is not compiled for RSX-11M systems l .HL 02 WAITI.PFThis module contains routines used to issue QIO's for FCS and wait forCtheir completion. The first routine, ..QIOW, issues a QIO and falls Dinto ..WAIT. It watches for errors due to insufficient pool and will6loop, waiting for a significant event if this happens..NFe.LM +5.TS 21,29,37,45,53,61e.B 02B Entry: ..QIOWa.B 01NInput: R0 = FDB address2 R4 = I/O function codee.B 01e Scratch DPB setup in $$FSR2.B 01#Output: C = 0, operation successfulr' = 1, operation failed, F.ERR(R0) seth.B 01l R1 = I/O status block address.B 01  R0 preserved, R2-R5 destroyed.LM -5.F.PEThe routine ..WAIT stores the I/O status into F.ERR(R0). It waits for EI/O completion by waiting for a non-zero I/O status value. If the I/On6status is zero, it falls into ..WAEF and then repeats..NFe.LM +5.TS 21,29,37,45,53,61N.B 02: Entry: ..WAITs.B 01 Input: R0 = FDB address0 R1 = I/O status block address.B 01)Output: C = 0, I/O completed successfully=3 = 1, I/O failed, F.ERR(R0) set from status block/.B 01s All registers preserved.LM -5.F.PCThe routine ..WAEF waits for the FDB's event flag, F.EFN(R0). If nosAevent flags was specified, event flag 32(10) is used. The flag is-!cleared after the wait completes..NFs.LM +5.TS 21,29,37,45,53,61a.B 02 Entry: ..WAEF.B 01Input: R0 = FDB addressB.B 01nOutput: Event flag cleared R.B 01  All registers preserved.B 01aConditionals: None.LM -5.F c .HL 02 WAITU.PFThis routine is the user interface for waiting for I/O completion whenGperforming block I/O. If an I/O status block has been specified (F.BKSTBFnonzero), the routine ..WAIT is used. Otherwise, the routine ..WAEF iscalled. .NF .LM +5.TS 21,29,37,45,53,61 .B 02m Entry: .WAIT.B 015Input: R0 = FDB address.B 01Output: I/O wait completed.B 01  All registers preserved.B 01nConditionals: None.LM -5.F s .HL 02 WATNOD.PFThis routine checks the I/O status for errors due to insufficient poolE(IE.UPN) and doers a wait-for-significant event if true. Otherwise itomerely returns. .NFs.LM +5.TS 21,29,37,45,53,61S.B 02z Entry: ..WANDn.B 01TInput: R0 = FDB addressr R1 = I/O status block address.B 015-Output: C = 0, IE.UPN occured, wait completed = 1, Error was not IE.UPN.B 010 All registers preserved.B 01BConditionals: None.LM -5.F 0 .HL 02 WATSETs.PEThis routine waits for I/O completion and sets up the record pointerst5based on the contents the the second I/O status word.e.NFw.LM +5.TS 21,29,37,45,53,61u.B 02r Entry: ..WASTy.B 01sInput: R0 = FDB address2 R1 = I/O status block address.B 01; I/O status is assumed to be at start of buffer descriptor.e.B 010)Output: C = 0, I/O completed successfullyp! = 1, I/O failed, F.ERR(R0) setN.B 010$ F.NREC(R0) set to beginning of data F.EOBB(R0) set to end of data.B 012$ R0,R1,R3-R5 preserved, R2 destroyed.B 01lConditionals: R$$BBF.LM -5.F t .HL 02 WRITE.PDThis routine is the user interface for writing a block via block I/OEmode. See the RSX-11/IAS I/O Operations Reference Manual, pages 3-31, ?3-32 for further details on calling sequence and return values. .NF .LM +5.TS 21,29,37,45,53,61.B 02 Entry: .WRITEl.B 01cInput: R0 = FDB addressa.B 01.#Output: C = 0, operation successful ' = 1, operation failed, F.ERR(R0) sete.B 01a All registers preserved.B 01dConditionals: None.LM -5.F s .HL 02 WTWAIT5.P>This module contains the routines for writing the next virtualLblock. ..WTWA outputs the VBN and returns with the record buffers set up for the next PUT. .NF .LM +5.TS 21,29,37,45,53,61a.B 02e Entry: ..WTWAr.B 01sInput: R0 = FDB address2.B 01, F.VBN(R0) = Block number& F.BDB(R0) = Address of buffer header% F.BBFS(R0) = Number of bytes to readu.B 01=#Output: C = 0, operation successful' = 1, operation failed, F.ERR(R0) set.B 01o' F.NREC(R0) = Address of start of block5$ F.EOBB(R0) = Address of last byte+1.B 01r R0 preserved, R1-R5 destroyed.B 01uConditionals: R$$BBF,R$$MBFh.LM -5.F f .HL 02 XQIOI.PFThis module contains the routines used to build and issue internal FCSEQIO's. They use the QIO DPB in $$FSR2. The routine ..XQIO sets up therDstandard parameters and issues the QIO directive. It assumes the I/OBparameters have already been set. This routine gets the I/O status+block address and AST address from the FDB.E.NF .LM +5.TS 21,29,37,45,53,61F.B 020 Entry: ..XQIOl.B 01eInput: R0 = FDB address, R3 = Directive code, size R4 = I/O function codeh R5 = DPB addressH.B 01IOutput: See ..XQI1 below.LM -5.F.PCAn alternate entry is ..XQI1. This routine is passed the I/O status$Fblock address and AST address. It gets the lun and event flag from the1FDB, sets up the DPB, and issues the I/O request.v.NFe.LM +5.TS 21,29,37,45,53,61 .B 02 Entry: ..XQI1d.B 01nInput: R0 = FDB addressB& R1 = I/O status block address or zero" R2 = I/O Done AST address or zero R3 = Directive code, size R4 = I/O function codeR R5 = DPB addressd.B 01 #Output: C = 0, operation successful.5 = 1, QIO directive failed, F.ERR(R0) set from $DSW1.B 01r R1 = I/O status block address.B 01 $ R0,R4 preserved, R2,R3,R5 destroyed.LM -5.F.P@The routine ..IDPB initializes t