.TITLE INERR - INSERT ERROR ; ; .INERR - INSERT ERROR MESSAGE INTO EDF ; ;INPUTS: ; R0 FDB OF EDF (MUST BE OPEN FOR BLOCK I/O WITH BUFFER, LENGTH ; STATUS BLOCK, EVENT FLAG,AND LUN SPECIFIED) ; R1 ERROR NUMBER (NEGATIVE) ; R2 ERROR RECORD ADDRESS ; ;OUTPUTS: ; ALL REGISTERS PRESERVED ; ; .MCALL ENTER,LEAVE,READ$,WRITE$,WAIT$ .MCALL PERRS ; ; .INERR::ENTER R1,R2,R3,R4,R5 COM R1 ;GET POSITIVE ERROR NUMBER - 1 BPL 1$ ;CAN'T BE NEGATIVE AT THIS POINT LEAVE PERRS ^*/BAD ERROR NUMBER SPECIFIED/* 1$: CLR R3 ;PREPARE TO SPLIT INTO BLOCK #/DISPLACEMENT ASR R1 ROR R3 ASR R1 ROR R3 ASR R1 ;R1 NOW HAS BLOCK NUMBER INC R1 ;RELOCATE INTO 1 ORIGIN INDEXING ROR R3 ;R3 NOW HAS RECORD # SHIFTED LEFT 13 BITS SWAB R3 ;5 BITS ROL R3 ;6 BITS = DISPLACEMENT ADD F.BKDS+2(R0),R3 ;ADDRESS WITHIN BUFFER CLR F.BKVB(R0) ;INSERT BLOCK NUMBER INTO FDB MOV R1,F.BKVB+2(R0) ;.. READ$ R0 ;READ RECORD BCC 4$ ;OK, GOT IT CMPB #IE.EOF,F.ERR(R0) ;EOF MEANS WASN'T A BLOCK THERE BEFORE BEQ 2$ ;SO WE HAVE TO INITIALIZE A NEW BLOCK CALL IOERR ;OTHERWISE SOMETHING SERIOUS ; 2$: MOV F.BKDS+2(R0),R4 ;GET BUFFER ADDRESS MOV #400,R5 ;AND LENGTH IN WORDS 3$: CLR (R4)+ ;CLEAR IT ALL OUT SOB R5,3$ ;... BR 5$ ;AND INSERT NEW ERROR MESSAGE ; 4$: WAIT$ R0,,,IOERR ;WAIT FOR BLOCK TO READ 5$: MOV #40,R5 ;LENGTH OF RECORD IN WORDS 6$: MOV (R2)+,(R3)+ ;COPY RECORD INTO BUFFER SOB R5,6$ ;.. MOV R1,F.BKVB+2(R0) ;RESTORE BLOCK NUMBER WRITE$ R0,,,,,,,IOERR ;WRITE BLOCK BACK WAIT$ R0,,,IOERR ;AND WAIT FOR COMPLETION LEAVE RETURN ; ; .END