.TITLE DBHQIO HANDLES ALL I/O FOR DATA BASE HANDLER .IDENT /02/ ; ; ; MODIFICATIONS: FEB 1979 (P. GANDHI) ; ; CALLING SEQ: ; ; CALL DBHQIO( FUNCT , FNM , # , % , ISTAT , IPAR , ISW ) ; WHERE ; FUNCT 0 - FOR READ 1 - FOR WRITE ; ; FNM NUMBER OF DATA BASE FILE ; ; ISTAT 2 WORD STATUS RETURN BLOCK ; 1ST BYTE SHOULD BE 1 FOR SUCCESSFUL OPERATION ; ; IPAR 6 WORD QIO PARAMETER LIST ; .MCALL OPEN$,CLOSE$,FSRSZ$,FDBDF$,QIOW$S FDB: FDBDF$ ; ; CONSTANTS FROM SGA ; FDTDSP=184. ; FILE DESC. TABLE DISP IN BYTES FDTSIZ=38. ; FILE DESC. TABLE SIZE IN BYTES RDSDSP=150. ; DISP. OF DBHRDS IN SGA WTSDSP=154. ; DISP. OF DBHWTS IN SGA ; DBHQIO::MOV #1,LUN ; DEFAULT L.U.N. MOV @4(R5),R2 ; GET FILE NUMBER MOV #SGA+FDTDSP,R3 ; GET STARTING ADDRESS OF FILDFT DEC R2 CLC MOV #FDTSIZ,R1 MUL R2,R1 ADD R1,R3 MOV R3,FDADR ; MOVB (R3),R2 SUB #60,R2 ; DISC # IN BINARY BEQ VIOTST ; SKIP IF ZERO ADD #4,R2 ; DISK 1 2 3 4 . . . ; LUN 5 6 7 8 . . . MOV R2,LUN ; VIOTST: CMP #12345,#IOMODE ;LOGICAL I/O? BEQ LOWTST ; MOVB (R3),SDV+2 ; GET DEVICE NUMBER MOV 2(R3),FNM MOV 4(R3),FNM+2 MOV 6(R3),FNM+4 OPSTST: OPEN$ #FDB,#FA.SHR!FO.MFY,LUN,#SDSC,,#FD.RWM,#FDB,#0,ERR LOWTST: MOV #6,R1 ; LOOP COUNTER MOV 14(R5),R0 ; ADDRESS OF QIO PARM LIST MOV #QIOP,R2 30$: MOV (R0)+,(R2)+ SOB R1,30$ MOV @2(R5),FNC ; GET FUNCTION CODE ; ; TEST IF SECTOR NUMBER IS IN FILE RANGE ; RNGTST: MOV FDADR,R3 CMP QIOP4,10.(R3) ; H CUR SEC : H 1ST SEC BLO ERREXT BHI 50$ CMP QIOP5,8.(R3) ; L CUR SEC : L 1ST SEC BLO ERREXT ; 50$: CMP QIOP4,14.(R3) ; H CUR SEC : H LST SEC BHI ERREXT BLO QIOSET CMP QIOP5,12.(R3) ; L CUR SEC : L LST SEC BHI ERREXT ; QIOSET: CMP #11000,FNC ; IO.WVB BNE INCRD INC SGA+WTSDSP ; INCRIMENT DBHWTS WORD BNE TSTMOD INC SGA+WTSDSP+2 ; INC HIGH ORDER WORD OF WTS BR TSTMOD INCRD: INC SGA+RDSDSP ; INCRIMENT DBHRDS FIELD BNE TSTMOD INC SGA+RDSDSP+2 ; HIGH ORDER WTS WORD TSTMOD: CMP #12345,#IOMODE ; LOGICAL I/O BNE QIO CMP #11000,FNC ; WRITE ? BEQ 25$ MOV #1000,FNC ; SET IO.RLB BR QIO 25$: MOV #400,FNC ; IO.WLB QIO: QIOW$S FNC,LUN,#1,,12(R5),, CMP #12345,#IOMODE BEQ EXT CLS: CLOSE$ #FDB EXT: RETURN ; ERR: TST (SP)+ MOVB FDB+F.ERR,@12(R5) RETURN ERREXT: MOVB #200,@12(R5) BR CLS QIOP: BUFADR: QIOP1: .WORD 0 BUFSIZ: QIOP2: .WORD 0 QIOP3: .WORD 0 HGHSEC: QIOP4: .WORD 0 LOWSEC: QIOP5: .WORD 0 QIOP6: .WORD 0 ; LUN: .BLKW 1 FNC: .BLKW 1 FDADR: .BLKW 1 ; SDSC: .WORD SDSZ,SDV .WORD SUSZ,SUIC .WORD FNMLEN,FNM SDV: .ASCII /DB0:/ SDSZ=.-SDV SUIC: .ASCII /[100,105]/ SUSZ=.-SUIC .EVEN FNM: .ASCII /------/ .ASCII /.DAT/ FNMLEN=.-FNM .EVEN .PSECT SGA050,RW,D,GBL,OVR SGA: .BLKW 2560. .END