;$IO DARIO RANDOM I/O AT THE RECORD LEVEL ;. 13-SEPT-76 P. CANNON ;. THIS MODULE PROVIDES THE FORTRAN PROGRAMMER WITH ACCESS ;. TO THE GET$R (READ RANDOM) AND PUT$R (WRITE RANDOM) MACROS. ;. THE USER IS PERMITTED TO ACCESS RECORDS IN A FILE RANDOMLY. ;. THE RECORD MAY BE OF ARBITRARY LENGTH, BUT ALL RECORDS ;. MUST HAVE THE SAME FIXED LENGTH. ;. THESE MODULES RETURN WHEN THE I/O OPERATION IS COMPLETE, ;. A CALL TO THE WAIT MODULE MUST NOT BE ISSUED. ;. ;. CALL DARRD(FDB,BUF,LB,IREC,/NBT/,/IER/) ;. CALL DARWT(FDB,BUF,NB,IREC,/NBT/,/IER/) ;. ;. FDB FILE DESCRIPTOR BLOCK ;. BUF DATA BUFFER IN WHICH DATA IS TO BE READ OR WRITTEN ;. LB LENGTH OF BUFFER IN BYTES ;. NB NUMBER OF BYTES TO WRITE ;. IREC INTEGER*2 VARIABLE CONTAINING THE RECORD NUMBER ;. TO BE READ OR WRITTEN ;. NBT NUMBER OF BYTES TRANSFERRED ;. IER ERROR FLAG ;. POSITIVE IMPLIES NO ERROR ;. ZERO IMPLIES END OF FILE ;. NEGATIVE IMPLIES HARDWARE I/O ERROR ;. ; ; THE GENERAL FORM OF THE GET$R MACRO IS : ; GET$R FDB,URBA,URBS,LRCNM,HRCNM,ERR ; ; WHERE: ; FDB ADDRESS OF FILE DESCRIPTOR BLOCK. ; URBA ADDRESS OF USER RECORD BUFFER. ; URBS NUMERIC VALUE DEFINING THE SIZE (IN BYTES) OF THE ; USER RECORD BUFFER. ; LRCNM A NUMERIC VALUE THAT REPRESENTS THE LOW ORDER 16 ; BITS OF THE NUMBER OF THE RECORD TO BE READ. ; HRCNM A NUMERIC VALUE SPECIFYING THE HIGH-ORDER 15 BITS ; OF THE NUMBER OF THE RECORD TO BE READ. ; ERR THE SYMBOLIC ADDRESS OF AN OPTIONAL USER-CODED ; ERROR-HANDLING ROUTINE. ; .TITLE DARIO - RANDOM I/O AT THE RECORD LEVEL .IDENT /V01/ .PSECT .GLOBL DARRD,DARWT .GLOBL PARM,RIOCMP .MCALL GET$R,PUT$R .SBTTL DARRD - READ A RANDOM RECORD,RETURN ON I/O COMPLETE EF: .WORD 0 ;ADDRESS OF PARAMETER LIST .WORD 0 ;NBR OF TIMES CALLED DARRD: MOV R5,EF ;SAVE ADDRESS OF PARAMETER LIST INC EF+2 ;ADD ONE TO THE NBR OF TIMES CALLED JSR PC,PARM ;LOAD PARAMETERS ;R4= NBR OF PARAMETERS ;RO= ADDRESS OF FDB ;R1= ADDRESS OF DATA BUFFER ;R2= NBR OF BYTES TO READ MOV @(R5)+,R3 ;LOAD THE RECORD NUMBER GET$R R0,R1,R2,R3,#0 ;READ A RANDOM RECORD SUB #4,R4 ;COMPUTE THE NBR OF OPTIONAL PARAMETERS JSR PC,RIOCMP ;UPDATE THE OPTIONAL PARAMETERS RTS PC ; ; ; THE GENERAL FORM OF THE PUT$R MACRO IS : ; PUT$R FDB,NRBA,NRBS,LRCNM,HRCNM,ERR ; ; WHERE: ; FDB ADDRESS OF FILE DESCRIPTOR BLOCK ; NRBA ADDRESS OF THE NEXT RECORD BUFFER TO BE WRITTEN ; NRBS A NUMERIC VALUE SPECIFYING THE SIZE (IN BYTES) ; OF THE NEXT RECORD BUFFER,I.E., THE LENGTH OF ; THE RECORD TO BE WRITTEN. ; LRCNM A NUMERIC VALUE SPECIFYING THE LOW-ORDER 16 BITS ; OF THE NUMBER OF THE RECORD TO BE WRITTEN. ; HRCNM A NUMERIC VALUE SPECIFYING THE HIGH-ORDER 15 BITS ; OF THE NUMBER OF THE RECORD TO BE WRITTEN. ; ERR THE SYMBOLIC ADDRESS OF AN OPTIONAL USER-CODED ; ERROR-HANDLING ROUTINE. ; .SBTTL DARWT - WRITE A RANDOM RECORD,RETURN ON I/O COMPLETE EF1: .WORD 0 ;ADDRESS OF PARAMETER LIST .WORD 0 ;NBR OF TIMES CALLED DARWT: MOV R5,EF1 ;SAVE ADDRESS OF PARAMETER LIST INC EF1+2 ;ADD ONE TO THE NBR OF TIMES CALLED JSR PC,PARM ;LOAD PARAMETERS ;R4= NBR OF PARAMETERS ;R0= ADDRESS OF FDB ;R1= ADDRESS OF DATA BUFFER ;R2= NUMBER OF BYTES TO WRITE MOV @(R5)+,R3 ;LOAD THE RECORD NUMBER PUT$R R0,R1,R2,R3 ;WRITE A RANDOM RECORD SUB #4,R4 ;COMPUTE THE NBR OF OPTIONAL PARAMETERS JSR PC,RIOCMP ;UPDATE THE OPTIONAL PARAMETERS RTS PC .END