.TITLE TERMS .IDENT /22NOV6/ ; ; TERMS TERMINAL DISPLAY FOR STATUS ; ; AUTHOR: M. KELLOGG ; SYSTEM: RSX-11D ; DATE: 22-NOV-76 ; ; THIS SUBROUTINE DISPLAYS THE STATUS OF THE TERMINALS IN THE SYSTEM. ; ; DISPLAY FORMAT: ; ; 5 TERMINALS PER LINE ARE DISPLAYED, USING ONE OF THE FOLLOWING FORMATS: ; ; TTN: ; NO ONE IS LOGGED IN ; ; TTN:[GRP,USR] ; THE DISPLAYED UIC IS LOGGED IN. THE UIC FOR A PRIVILEGED USER ; WILL BLINK. ; ; TTN:SLAVED ; THE TERMINAL IS SLAVED. ; ; TTN:OFFLINE ; THE TERMINAL IS OFF LINE. ; ; INPUTS: ; ; R0 LINE NUMBER OF START OF DISPLAY ; ; OUTPUTS: ; ; R0 NUMBER OF NEXT FREE LINE ; ; NO REGISTERS PRESERVED. ; .MCALL DIR$ ; .BYTE 33,'B ;START BLINK SEQ FOR PRIVILEGED USER UBUFF: .ASCII /[XXX,XXX] / .BYTE 33,'S ;END BLINK SEQ FOR PRIVILEGED USER OFFLIN: .ASCII /OFFLINE / SLVD: .ASCII /SLAVED / .EVEN TERMS:: MOVB #177,CURCH ;SET CHAR POSITION MOVB #177,CURLIN ;SET LINE POSITION BICB R0,CURLIN DIR$ #SETCUR ;SET CURSOR MOV R0,-(SP) ;SAVE LINE NO CALL INLINE ;INIT FIRST LINE MOV .PUDBA,R5 ;INIT PUD SEARCH ; ; PROCESS A TERMINAL ENTRY ; DOENT: BIT #UC.TTY,U.C1(R5) ;IS THIS A TERMINAL? BEQ EDONE ;NO - SKIP IT MOVB U.DN(R5),(R0)+ ;PUT DEV NAME IN LINE MOVB U.DN+1(R5),(R0)+ MOVB U.UN(R5),R1 ;GET UNIT NO CLR R2 MOV R0,R3 ;POINT TO CURRENT LINE POS CMPB (R3)+,(R3)+ ;SKIP 2 CHARS MOVB #' ,(R3)+ ;INSERT BLANK IN CASE NEEDED CALL $CBOMG ;CONVERT UNIT TO ASCII (NO LEAD ZEROS) MOVB #':,(R0)+ ;PUT COLON IN LINE MOV R3,R0 ;POINT PAST INSERTED BLANK 10$: MOV #11.,R4 ;SET UP FOR 11 CHARS MOV #OFFLIN,R1 ;ASSUME OFFLINE BITB #UF.OFL,U.FB(R5) ;OFFLINE? BNE 30$ ;YES MOV #SLVD,R1 ;ASSUME SLAVED BITB #UT.SL,U.PR(R5) ;SLAVED? BNE 30$ ;YES MOV #UBUFF+11.,R1 ;POINT TO END OF UIC BUFFER 20$: MOVB #' ,-(R1) ;BLANK THE UIC BUFFER SOB R4,20$ BITB #UT.LG,U.PR(R5) ;LOGGED IN? BEQ 25$ ;NO MOV R1,R2 ;POINT TO UIC BUFFER MOV U.UI(R5),R3 ;GET UIC CALL .PPASC ;CONVERT TO ASCII STRING BITB #UT.PR,U.PR(R5) ;PRIVILEGED? BEQ 25$ ;NO CMPB -(R1),-(R1) ;YES - SET UP TO BLINK MOV #4,R4 25$: ADD #11.,R4 ;COMPLETE CHAR COUNT 30$: MOVB (R1)+,(R0)+ ;MOVE FORMATTED UIC SOB R4,30$ DEC ITMCNT ;COUNT ITEM BNE 40$ ;LINE NOT DONE CALL DOLINE ;OUTPUT LINE 40$: EDONE: ADD #U.SZ,R5 ;GO TO NEXT PUD ENTRY CMP R5,.PUDEA ;DONE ALL YET? BLO DOENT ;NO CALL DOLINE ;OUTPUT LAST LINE MOV (SP)+,R0 ;RESTORE LINE NO RETURN ; ; OUTPUT A LINE ; DOLINE: SUB #BUFF,R0 ;GET COUNT OF CHARS IN LINE BEQ INLINE ;EMPTY LINE INC 2(SP) ;COUNT LINE MOV R0,CHCNT ;SET CHAR COUNT DIR$ #LINOUT ;WRITE THE LINE ; ; INITIALIZE A LINE ; INLINE: MOV #5,(PC)+ ;INITIALIZE ITEM COUNT ITMCNT: .WORD 5 MOV #BUFF,R0 ;INITIALIZE BUFFER PONTER RETURN .END