.TITLE INOUTR .MCALL FDBDF$,FDAT$A,FDRC$A,FDOP$R,NMBLK$,FSRSZ$ .MCALL OPNS$R,READ$,CLOSE$,EXIT$S,FDBK$R .MCALL FDAT$R,FHDOF$,FDOF$L,QIOW$C,WAIT$ FHDOF$ DEF$L FDOF$L FDB1: FDBDF$ FSRSZ$ 0 FDRC$A FD.RWM IOST1: .BLKW 2 DSPT1: .BLKW 6 VB1: .BLKW 2 ; OPENR1:: MOV 2(R5),R0 ; SET UP PARAMETERS CLR (R0)+ ; CLEAR STATUS CLR (R0)+ ; CLEAR STATUS MOV 4.(R5),DSPT1+2. ; MOVE ADDRESS OF DEV TO DEV BLOCK MOV 6.(R5),R0 ; GET ADDRESS OF SIZE MOV 0(R0),DSPT1 ; MOVE SIZE TO DEV BLOCK MOV 8.(R5),DSPT1+6. ; MOVE ADDRESS OF UIC TO UIC BLOCK MOV 10.(R5),R0 ; GET ADDRESS OF SIZE MOV 0(R0),DSPT1+4. ; MOVE SIZE TO UIC BLOCK MOV 12.(R5),DSPT1+10. ; MOVE ADDRESS OF NAME TO NAME BLOCK MOV 14.(R5),R0 ; GET ADDRESS OF SIZE MOV 0(R0),DSPT1+8. ; MOVE SIZE TO NAME BLOCK FDOP$R #FDB1,#1,#DSPT1 FDBK$R #FDB1,2(R5),#512.,,#6,#IOST1 CLR VB1 CLR VB1+2 OPNS$R #FDB1 BCS ERROR1 ; JUMP IF ERROR ; ; SECTION FOR PASSING BACK PARAMETERS ; PARAM: MOV 2(R5),R0 CLR (R0)+ MOV FDB1+F.EFBK+2,(R0)+ ; MOVE LOWER OF EOF BLOCK MOV FDB1+F.HIBK+2,(R0)+ ; MOVE LOWER OF ALL BLOCKS MOV #H.UFAT,(R0)+ ; MOVE FDB OFFSET MOV #F.HIBK,(R0)+ ; MOVE ALL BLOCK OFFSET MOV #F.EFBK,(R0)+ ; MOVE OFFSET EOF BLOCK RTS PC ERROR1: MOV 2(R5),R0 MOV IOST1,(R0)+ MOV IOST1+2,(R0)+ ; CMPB #IE.EOF,FDB1+F.ERR ; BEQ CLOSR1 RTS PC READ1:: CLR @2(R5) ; CLEAR RETURN STATUS MOV @4(R5),VB1+2 ; GET BLOCK NUMBER READ$ #FDB1,,,#VB1 BCS ERROR1 ; BRANCH ON ERROR WAIT$ #FDB1,#6 BCS ERROR1 ; BRANCH ON ERROR RTS PC CLOSR1:: CLOSE$ #FDB1 BCS ERROR1 RTS PC ; ; SECTION FOR ANY FILE (ESP [0,0]INDEXF.SYS) ; FDB2: FDBDF$ FSRSZ$ 0 FDRC$A FD.RWM IOST2: .BLKW 2 DSPT2: .BLKW 6 VB2: .BLKW 2 ; OPENR2:: MOV 2(R5),R0 ; SET UP PARAMETERS CLR (R0)+ ; CLEAR STATUS CLR (R0)+ ; CLEAR STATUS MOV 4.(R5),DSPT2+2. ; MOVE ADDRESS OF DEV TO DEV BLOCK MOV 6.(R5),R0 ; GET ADDRESS OF SIZE MOV 0(R0),DSPT2 ; MOVE SIZE TO DEV BLOCK MOV 8.(R5),DSPT2+6. ; MOVE ADDRESS OF UIC TO UIC BLOCK MOV 10.(R5),R0 ; GET ADDRESS OF SIZE MOV 0(R0),DSPT2+4. ; MOVE SIZE TO UIC BLOCK MOV 12.(R5),DSPT2+10. ; MOVE ADDRESS OF NAME TO NAME BLOCK MOV 14.(R5),R0 ; GET ADDRESS OF SIZE MOV 0(R0),DSPT2+8. ; MOVE SIZE TO NAME BLOCK FDOP$R #FDB2,#2,#DSPT2 FDBK$R #FDB2,2(R5),#512.,,#7,#IOST2 CLR VB2 CLR VB2+2 MOV #512.,FDB2+F.OVBS ; OVERRIDE BLOCK BUFFER SIZE OPNS$R #FDB2 BCS ERROR2 ; JUMP IF ERROR MOV #1000,FDB2+F.HIBK ; PLACE HI BLOCK MOV #1000,FDB2+F.EFBK ; PLACE EOF BLOCK JMP PARAM ; FILL IN REST OF PARAMETERS ERROR2: MOV 2(R5),R0 MOV IOST2,(R0)+ MOV IOST2+2,(R0)+ RTS PC READ2:: CLR @2(R5) ; CLEAR RETURN STATUS MOV @4(R5),VB2+2 ; GET BOCK NUMBER READ$ #FDB2,,,#VB2 BCS ERROR2 ; BRANCH ON ERROR WAIT$ #FDB2,#7 BCS ERROR2 ; BRANCH ON ERROR RTS PC CLOSR2:: CLOSE$ #FDB2 BCS ERROR2 RTS PC .END