.TITLE MTUERR .SBTTL SUBROUTINE--MAGTAPE ERROR REPORT ; ; ; THIS SUBROUTINE REPORTS MAGTAPE ERRORS THAT ARE ; DETECTED UPON COMPLETION OF SOME OPERATION. ; ERROR CODES ARE RETURNED IN IOST. THIS SUBROUTINE ; MATCHES THE VALUE OF THE ERROR CODE WITH THE ; APPROPRIATE MESSAGE AND PRINTS THAT MESSAGE. ; INFORMATION ABOUT WHICH TAPE THE ERROR OCCURED ON ; AND WHERE ON THE TAPE (FILE AND RECORD NUMBER) THE ; ERROR WAS ENCOUNTERED IS INCLUDED. CERTAIN ERRORS CAUSE ; THE SUBROUTINE TO MAKE AN ABNORMAL EXIT -- THUS ABORTING ; ANY SUBSEQUENT OPERATIONS. .GLOBL IOST,QGO,QWVB,FILE,FILCNT,CBDMG,DONE,RECCNT .GLOBL ASCBUF,FREAD .MCALL PUSH,POP .NLIST BEX QIOPL=14 ; ; TAPERR:: PUSH R2 ; SAVE REGISTER MOV #1,R2 ; INITIALIZE CLRB NUMFLG MOV #ASCBUF,FREAD CLRB FATFLG MOV #ERAD-6,R0 ; ADDRESS OF TABLE TAPADD: ADD #6,R0 ; NEXT TABLE ENTRY CMP R0,#ERLAD ; END OF TABLE? BGE TAPPRT ; YES ==> "TAPE ERROR" CMPB (R0),IOST ; MATCH FOR ERROR CODE? BNE TAPADD ; KEEP LOOKING TAPPRT: MOV #QWVB+QIOPL,R5 ; FOUND IT, NOW REPORT TST (R0)+ MOV (R0)+,(R5)+ ; PUT IN ADDRESS MOV (R0),(R5)+ ; AND LENGTH BGT TAPOUT ; <0 HAS SPECIAL MEANING NEG -(R5) ; MAKE COUNT POSITIVE CMP (R5),#100. ; MAGNITUDE TELLS IF FATAL BLT TAPFAT ; <100 MEANS FATAL SUB #100.,(R5)+ ; NO MESSAAGE IS THIS LONG INCB NUMFLG ; NON-FATAL W/ NUMBERS MOV #ASBUF,R0 ; PUT IN COUNT MOV IOST+2,R1 JSR PC,CBDMG ; IN ASCII BR TAPOUT ; NOW CONTINUE TAPFAT: TST (R5)+ ; POINT TO NEXT WORD INCB FATFLG ; REMEMBER THIS IS FATAL TAPOUT: MOV #44,(R5) CALL QGOLO TSTB NUMFLG BEQ TAPFR MOV #QWVB+QIOPL,R5 MOV #ASBUF,(R5)+ MOV #5,(R5)+ MOV #53,(R5) CALL QGOLO BR TAPDON TAPFR: CMP #1,FILE ; CHECK FOR INPUT OR OUTPUT BEQ TAPONE MOV #44440,ASCFR+4 ; " I" MOVB #116,ASCFR+6 ; "N" BR TAPNUM TAPONE: MOV #52517,ASCFR+4 ; "OU" MOVB #124,ASCFR+6 ; "T" TAPNUM: MOV FILCNT,R1 ; PUT ASCII FILE # IN MOV #ASCFR+21.,R0 CALL CBDMG MOV RECCNT,R1 ; PUT IN RECORD # ASCII MOV #ASCFR+34.,R0 CALL CBDMG MOV #QWVB+QIOPL,R5 ; FILL IN PARAMETERS MOV #ASCFR,(R5)+ TSTB FATFLG ; FATAL ERROR? BEQ .+10 MOV #47.,(R5)+ ; REPORT ERROR AS FATAL BR .+6 MOV #39.,(R5)+ MOV #53,(R5) CALL QGOLO ; PRINT IT TAPDON: POP R2 TSTB FATFLG ; NORMAL RETURN? BEQ TAPEND ; YES TST (SP)+ ; NO--MAINTAIN STACK JMP DONE ; ABORT OPERATION TAPEND: SUB #ASCBUF,FREAD ; GET BYTE COUNT RETURN ; ; ; SAVE ERROR MESSAGE ; QGOLO: PUSH R5 MOV -(R5),R1 ; LENGTH MOV -(R5),R0 ; ADDRRESS MOV FREAD,R5 ; FREE ADDRESS QGOUO: MOVB (R0)+,(R5)+ DEC R1 BNE QGOUO MOV R5,FREAD ; SAVE FOR NEXT TIME POP R5 CALL QGO ; PUT ON "TI" RETURN ; DONE ; ASCFR: .ASCII / ON XXXPUT TAPE-FILE NNNNN RECORD NNNNN *FATAL*/ .EVEN FATFLG: .BYTE 0 NUMFLG: .BYTE 0 ASBUF: .BLKW 3 ERAD: IE.ABO,ERABO,-17. IE.BBE,ERBBE,17. IE.BYT,ERBYT,17. IE.DAA,ERDAA,-23. IE.DAO,ERDAO,19. IE.DNA,ERDNA,19. IE.DNR,ERDNR,-15. IE.EOF,EREOF,-132. IE.EOV,EREOV,-137. IE.EOT,EREOT,3. IE.FHE,ERFHE,-20. IE.PRI,ERPRI,-33. IE.IFC,ERIFC,21. IE.SRE,ERSRE,17. IE.VER,ERVER,12. IE.WLK,ERWLK,-10. IE.SPC,ERSPC,25. ERLAD: 0,ERLAD1,10. ERSPC: .ASCII /FUNCTION VALIDATION ERROR/ ERABO: .ASCII /OPERATION ABORTED/ ERBBE: .ASCII /TAPE FORMAT ERROR/ ERBYT: .ASCII /ODD ADDRESS ERROR/ ERDAA: .ASCII /DEVICE ALREADY ATTACHED/ ERDAO: .ASCII /RECORD LENGTH ERROR/ ERDNA: .ASCII /DEVICE NOT ATTACHED/ ERDNR: .ASCII /DEVICE OFF-LINE/ EREOF: .ASCII @FILE MARK--RECORDS READ/SKIPPED=@ EREOV: .ASCII @DOUBLE FILE MARK--FILES READ/SKIPPED=@ EREOT: .ASCII /EOT/ ERFHE: .ASCII /FATAL HARDWARE ERROR/ ERPRI: .ASCII /TAPE MUST BE MOUNTED [ATCH,FOR]/<15><12> ERIFC: .ASCII /INVALID FUNCTION CODE/ ERSRE: .ASCII @SEND/REQUEST FAIL@ ERVER: .ASCII /PARITY ERROR/ ERWLK: .ASCII /WRITE LOCK/ ERLAD1: .ASCII /TAPE ERROR/ .EVEN .END