.TITLE PRFCS - PRINT FCS ERROR CODE .IDENT -010000- ;+ ; ABSTRACT: .PRFCS ; ; SUBROUTINE TO GET A TEXTUAL EXPLANATION FOR AN FCS ERROR. ; ; CALLING SEQUENCE: ; ; JSR PC,.PRFCS ; ; ARGUMENTS: ; ; R0 ADDRESS OF THE FDB WHICH HAD THE ERROR. ; R1 ADDRESS OF A USER TASKNAME BUFFER. ; R2 SIZE OF THE USER BUFFER. ; ; ON RETURN, ALL REGESTERS ARE UNCHANGED. ; ; WRITTEN: 18-JUN-77, -0.0.0-, BRUCE C. WRIGHT ; MODIFIED: 13-APR-79, -1.0.0-, BRUCE C. WRIGHT ; CONDITIONALISE FOR RSX-11M ; VERIFIED: ;- ; ;R$$11M = 0 ; DEFINE THIS SYMBOL TO ASSEMBLE FOR RSX-11M R$$11D = 0 ; DEFINE THIS SYMBOL TO ASSEMBLE FOR RSX-11D ;I$$AS = 0 ; DEFINE THIS SYMBOL TO ASSEMBLE FOR IAS. ; .MCALL QIOW$S,WSIG$S,ALUN$S,GLUN$S .IF DF R$$11D!I$$AS .MCALL MOUT$S .ENDC ; R$$11D!I$$AS .PRFCS:: MOV R3,-(SP) .IF DF R$$11D!I$$AS MOVB F.ERR(R0),R3 ; GET F.ERR NEG R3 ; GET I/O ERROR CODE BITB #200,F.ERR+1(R0) ; IS IT A DIR CODE? BEQ 10$ ; NO ADD #128.,R3 ; FIXUP CODE. 10$: MOUT$S #QIOSYM,#QIOPRM,R3,CONT,USBUF,#BUFFER,#BUFLEN,,,PRBAD MOV R2,QIOPRM ; SET THE LENGTH OF TSK STRING MOV R1,QIOPRM+2 ; SET THE ADDRESS OF TSK STR. MOV BUFFER+2,QIOPRM+4 ; LENGTH OF ERROR STRING. MOUT$S #PRNTIT,#QIOPRM,,CONT,#SY$STM,,,,,PRBAD MOV (SP)+,R3 RETURN PRBAD: TST (SP)+ ; POP OFF GARBAGE RETURN ADDRESS. .ENDC ; R$$11D!I$$AS MOV R4,-(SP) ; SAVE R4 ... MOV R5,-(SP) ; ... AND R5 MOVB F.ERR(R0),R5 ; GET ERROR CODE CLR R4 NEG R5 ; MAKE CODE POSITIVE. BLE 10$ ; NO ERROR -- LEAVE. DIV #10.,R4 ; DIVIDE THE CODE BY 10. SWAB R5 ; PUT RESULT IN HIGH BYTE. BIS R5,R4 ; SET THE LOW ORDER. BIS #"00,R4 ; MAKE IT NUMERIC. MOV #BUFFER,R3 ; POINT TO BUFFER. MOV R1,-(SP) MOV R2,-(SP) BLE 4$ ; NO 3$: MOVB (R1)+,(R3)+ ; SOB R2,3$ ; MOVE THINGS INTO BUFFER. 4$: MOV (SP)+,R2 MOV (SP)+,R1 MOV #STDSW,R5 ; GET DSW STRING TSTB F.ERR+1(R0) ; IS IT A DSW CODE? BMI 5$ ; YES MOV #STFCS,R5 ; NO 5$: MOVB (R5)+,(R3)+ ; MOVE IN THE STRING. BNE 5$ ; LOOP UNTIL "DONE" MOVB R4,-1(R3) ; MOVE IN LOW ORDER ERROR CODE SWAB R4 ; MOVB R4,(R3)+ ; AND HIGH ORDER ERROR CODE SUB #12.,SP ; GET SPACE FOR GLUN$ BUFFER. MOV SP,R5 ; POINT TO IT. GLUN$S .MOLUN,R5 ; GET LUN INFORMATION. ALUN$S .MOLUN,#"TI,#0 ; ALLOCATE THE LUN. SUB #BUFFER,R3 ; COMPUTE LENGTH OF QIO 10$: QIOW$S #IO.WVB,.MOLUN,#30.,,,,<#BUFFER,R3,#40> CMP @#$DSW,#-1 ; NO NODES? BNE 20$ ; NO -- OK WSIG$S ; WAIT A BIT BR 10$ ; AND TRY AGAIN. 20$: MOVB 2(R5),R4 ; GET THE UNIT NUMBER. ALUN$S .MOLUN,(R5),R4 ; FIXUP .MOLUN AGAIN. ADD #12.,SP ; POP BUFFER. MOV (SP)+,R5 ; RECOVER R5 MOV (SP)+,R4 ; RECOVER R4 MOV (SP)+,R3 ; RECOVER R3 RETURN ; AND RETURN. ; ; STRING DESCRIPTOR FOR GETTING ERROR NAME ; .IF DF R$$11D!I$$AS QIOSYM: .WORD QIOLEN .WORD QIOFIL ; ; FILE NAME WHERE ERROR NAMES ARE KEPT ; .IF DF R$$11D QIOFIL: .ASCIZ /SY:[1,2]QIOSYM.MSG/ .ENDC ;R$$11D .IF DF I$$AS QIOFIL: .ASCIZ /LB:[1,2]QIOSYM.MSG/ .ENDC ;I$$AS QIOLEN = .-QIOFIL .EVEN ; ; PARAMETER LIST ; QIOPRM: .WORD 0 ; LENGTH OF TASK STRING. .WORD 0 ; ADDRESS OF TASK STRING. .WORD 0 ; LENGTH OF ERROR STRING. .WORD BUFFER+4 ; ADDRESS OF ERROR STRING. ; ; STRING DESCRIPTOR ; PRNTIT: .WORD FMTLEN ; LENGTH OF STRING .WORD FMTSTR ; ADDRESS OF STRING ; ; FORMAT STRING ; FMTSTR: .ASCII /%VA -- %VA/ FMTLEN = .-FMTSTR .EVEN .ENDC ; R$$11D!I$$AS ; ; LUN FOR MO.... ; .MOLUN::.WORD 0 ; ; BUFFER FOR FCS CODE ; BUFFER: .BLKB 80. BUFLEN = .-BUFFER ; ; STRINGS FOR USE IF MO.... FAILS. ; STFCS: .ASCIZ / -- FCS -/ STDSW: .ASCIZ / -- DSW -/ .EVEN .END