.TITLE UERQIO .IDENT /V01/ ;THIS PROGRAM PRINTS OUT AN ERROR MESSAGE WHEN AN I/O ERROR OCCURS IN ;EITHER ASSEMBLY LANGUAGE OR FORTRAN. IN ASSEMBLY LANGUAGE THE CALL IS ;MADE AFTER A "QIO" OR "QIOW". IN FORTRAN THE CALL IS MADE INDIRECTLY ;THROUGH THE PROGRAM "UERINI". THE PROGRAM USES INFORMATION STORED IN ;R5 TO PRINT OUT THE MESSAGE. ; ; CALLING SEQUENCE: ; CALL UERQIO(LUN,ISB) ; WHERE LUN IS THE LOGICAL UNIT AND ISB IS THE I/O STATUS BLOCK ; ; ROBERT KRONINGER SEPTEMBER 17,1981 ; ; THIS ROUTINE IS ASSEMBLED AS FOLLOWS: ; MAC UERQIO,UERQIO/-SP=UERQIO ; ; REGISTER USAGE: R0 - \ USED IN THE CONVERSION ROUTINES ; R1 - | $CBDSG,$TIM, AND $CBTMG ; R2 - / AS INPUT ARGUMENTS. ; R5 - INFORMATION FOR MESSAGE. ; ; MACRO CALLS ; .MCALL GLUN$S,GTIM$S ; ; SUBROUTINES CALLED: ; $TIM (TIME CONVERSION - SYSTEM LIBRARY ROUTINES SECT. 6.2.2) ; $CBDSG (CONVERT BINARY TO DECIMAL - SYS. LIB. ROUT. SECT. 5.1.3) ; $CBTMG (CONVERT BINARY TO OCTAL - SYS. LIB. ROUT. SECT. 5.2.3) ; $ERRLG (ERROR PRINTING MESSAGE - OTS REF. MAN. SECT. 7.5) ; .LIST MEB .PSECT UERQIO ; UERQIO:: TSTB @4(R5) ;CHECK IF ERROR OCCURED.(A NEGATIVE #) BGE FINISH ;IF NOT, GO BACK TO MAIN PROGRAM. MOVB @2(R5),R1 ;PLACE LUN INTO THE MOV #DEVLUN,R0 ;BUFFER "DEVNAM" AND CLR R2 ;CONVERT THE BINARY NUMBER CALL $CBDSG ;INTO DECIMAL. LOOP: MOVB #' ,(R0)+ ;THIS LOOP PUTS SPACES BETWEEN CMPB R0,#TAB ;THE LUN AND THE TIME IN THE BLO LOOP ;FIRST LINE OF THE MESSAGE. GTIM$S #BTIME ;PUT BINARY TIME IN BUFFER "BTIME". MOV #TIME,R0 ;CONVERT THE BINARY TIME MOV #BTIME+G.TIHR,R1 ;TO DECIMAL AND PLACE THE MOVB #3,R2 ;CONVERTED TIME IN THE CALL $TIM ;BUFFER "TIME". GLUN$S @2(R5),#LUNNAM ;USE LUN TO GET DEVICE NAME AND BINARY BCS FINISH ;IF CARRY BIT IS SET,AN ERROR OCCURRED MOV LUNNAM+G.LUNA,DEVNAM ;CODE FOR PHYSICAL UNIT NUMBER. STORE MOVB LUNNAM+G.LUNU,R1 ;NAME IN BUFFER "DEVNAM". CONVERT THE MOV #DEVNAM+2,R0 ;PHYSICAL UNIT NUMBER TO OCTAL AND CLR R2 ;STORE IN BUFFER "DEVNAM". CALL $CBTMG MOVB #':,(R0)+ ;PLACE A COLON AFTER THE OCTAL NUMBER. LOOP2: MOVB #' ,(R0)+ ;THIS LOOP PUTS SPACES BETWEEN CMPB R0,#MES2 ;THE DEVICE NAME AND THE WORD "CODE" BLO LOOP2 ;IN THE SECOND LINE OF THE MESSAGE. MOVB @4(R5),R1 ;CONVERT THE BINARY ERROR MOV #ERROR,R0 ;CODE TO DECIMAL. CLR R2 CALL $CBDSG MOVB #0,(R0) ;A ZERO FLAGS THAT MESSAGE IS COMPLETE CLR R1 MOV #MBLK,R0 CALL $ERRLG ;PRINT OUT MESSAGES. FINISH: RETURN ; LUNNAM: .BLKW 6 BTIME: .BLKW 10 MBLK: .WORD DEVLUN,0 DEVLUN: .BLKB 4 TAB: .BYTE 11,11 TIME: .BLKB 10 .BYTE 7,15,12,7 MES: .ASCII "]=>I/O ERROR: DEVICE=" DEVNAM: .BLKB 6 MES2: .ASCII /CODE= / ERROR: .BLKB 6 .EVEN .END