.TITLE RKRANSEEK .IDENT /MRHV01/ .SBTTL INTRO PAGE .LIST MEB ; ;THIS PROGRAM IS DESIGNED TO DO RANDOM SEEKS ON AN RK DISK ; ; ;DEFINE SOME NEEDED VARIABLES ; READSZ=1000 ;READ ONE BLOCK BLOCKH=0 BLOCKL=4800. ;MAXIMUM BLOCK # ; ; .MCALL QIOW$,DIR$,EXIT$S,GMCR$ .PAGE .SBTTL THE CODE ; ;FIRST SET THINGS UP ; START: DIR$ #GETMCR ;SO WE RECALL THE CALLER MOV #START,R5 ;POINT PSEUDO RANDOM POINTER TO START OF CODE REGO: ADD (R5)+,R4 ;ADD SOME TO RANDOM BLOCK NUMBER INC R4 ;JUST IN CASE WE GOT A 0 CMP R5,#END ;PAST END OF CODE ? BLT 1$ ;BRANCH IF NOT MOV #START,R5 ;ELSE RESET POINTER 1$: TST R4 ;DID BLOCK NUMBER GO NEGATIVE ? BGT 2$ ;BR IF NOT NEG R4 ;FUDGE THINGS 2$: CMP R4,#BLOCKL ;IS IT TOO BIG ? BLT 3$ ;BR IF OK SUB #BLOCKL,R4 ;TAKE SOME OFF BR 2$ ;AND CHECK AGAIN 3$: MOV R4,REAQIO+Q.IOPL+10 ;FILL IN BLOCK NUMBER IN IO REQUEST MOV #0,REAQIO+Q.IOPL+6 DIR$ #REAQIO ;DO DISK READ BR REGO ;AND DO IT AGAIN ; .PAGE .SBTTL DATA AREAS ; ; ;NOW THE DISK READ QIO ; REAQIO: QIOW$ IO.RLB,2,1,,IOSB,, ; IOSB: .WORD 0,0 ;RETURNED STATUS ; GETMCR: GMCR$ ;GET MCR DPB ; ;MISC VARIABLES ; READBF: .BLKB READSZ ;BUFFER FOR READING 1. BLOCK END: ;END OF CODE POINTER .END START