.TITLE WHO .IDENT /MRH001/ .SBTTL TITLE PAGE ; 26-OCT-76 10:27:18 >SM:WHO.MAC=WHO ;REASSEMBLED BY F. BORGER, MICHAEL REESE HOSP ;FOR PURPOSES OF ENHANCING OPERATION .TITLE WHO .IDENT /MRHV01/ ; .PSECT . ABS.,OVL,RW,LCL,D ;MAX LEN = 000000 ;.GLOBL IO.WVB ;.GLOBL IS.SUC ;.GLOBL UC.TTY ;.GLOBL UF.OFL ;.GLOBL UT.LG ;.GLOBL UT.PR ;.GLOBL UT.SL ;.GLOBL U.C1 ;.GLOBL U.DN ;.GLOBL U.FB ;.GLOBL U.GC ;.GLOBL U.PC ;.GLOBL U.PR ;.GLOBL U.SZ ;.GLOBL U.UN ;.GLOBL $CBOMG ;.GLOBL .PUDBA ;.GLOBL .PUDEA ; .PSECT ,CON,RW,GBL,I ;MAX LEN = 000610 .MCALL DIR$,GMCR$,EXIT$,QIOW$ ; .PAGE .SBTTL MAIN CODE ; .PSECT START: DIR$ #GETMCR ;GET MCR COMMAND LINE TO FREE NODE MOV .CRTSK,R2 ;GET MY ATL MOV A.PD(R2),R2 ;NOW HAVE MY TPD POINTER ADD #T.RF,R2 ;BUMP TO MRL LISTHEAD FOR GEN PARTITION MOV R2,MRLSAV ;SAVE IT FOR LATER CLR R2 MOV .PUDBA,R3 ;SET FOR PUD SEARCH REGO: BIT #UC.TTY,U.C1(R3) ;IS THIS A TTY ? BEQ NOTTTY ;NO, IGNORE THIS DEVICE MOV #PTR1,R0 ;POINT R0 TO START OF MESSAGE LINE MOVB #40,PTR1+3 ;CLEAR POSSIBLE DOUBLE DIGIT FROM LAST TIME MOV U.DN(R3),(R0)+ ;ASCII DEVICE NAME TO MESSAGE LINE MOVB U.UN(R3),R1 ;UNIT # TO R1 CLR R2 ;SUPRESS LEADING 0'S JSR PC,$CBOMG ;AND PUT IT IN MESSAGE LINE AS ASCII MOV #PTR2,R0 ;POINT PAST "TTXX " BITB #UF.OFL,U.FB(R3) ;IS HE OFF LINE ? BNE OFFLIN ;YES REPORT HE'S OFF-LINE BITB #UT.SL,U.PR(R3) ;OR IS HE SLAVED ? BNE SLAVED ;REPORT THAT INSTEAD BITB #UT.LG,U.PR(R3) ;THEN IS HE LOGGED ON ? BEQ NOTLOG ;IF NOT REPORT IT MOVB #'[,(R0)+ ;INITIAL '[' TO BUFFER CLR R1 ;SET TO FIGURE GROUP,PROG. CODE BISB U.GC(R3),R1 ;GROUP CODE TO R1 JSR PC,$CBOMG ;PUT IN OUT BUFFER AS ASCII MOVB #',,(R0)+ ;SEPERATING COMMA CLR R1 ;NOW FOR PROGRAMMER CODE BISB U.PC(R3),R1 JSR PC,$CBOMG ;SAME AS BEFORE MOVB #'],(R0)+ ;FINISH UP WITH ']' 5$: CMP R0,#PTR2+9. ;TEST ALIGNMENT BGE 10$ ;ITS OK MOVB #40,(R0)+ ;NO FILL WITH SPACES BR 5$ ;AND TRY AGAIN 10$: BITB #UT.PR,U.PR(R3) ;IS HE PRIVILEGED ? BNE 2$ ;BR IF HE IS MOVB #11,(R0)+ MOVB #11,(R0)+ MOVB #11,(R0)+ ;TAB OVER SO IT LOOKS NICE BR NOTPR ;AND REPORT HIM 2$: MOVB #40,(R0)+ ;SET TO REPORT HIM AS PRIVILEGED MOV #PRIMES,R4 ;ADDRESS OF MESSAGE TO R4 MOV #PRILEN,R5 ;LENGTH TO R5 1$: MOVB (R4)+,(R0)+ ;XFER A CHARACTER SOB R5,1$ ;LOOP TILL DONE NOTPR: JSR PC,TSTATL ;LOOK FOR TASKS ACTIVE FOR HIM JSR PC,WRTLIN ;WRITE LINE NOTTTY: ADD #U.SZ,R3 ;BUMP TO NEXT PUD CMP .PUDEA,R3 ;THROUGH PUD ? BNE REGO ;IF NOT CHECK NEXT DEVICE SCRAM: DIR$ #EXITDP ;EXIT STAGE LEFT NOTLOG: MOV #NLGMES,R4 ;MESSAGE START TO R4 MOV #NLGLEN,R5 ;LENGTH TO R5 JSR PC,FILWRT ;FILL IN AND WRITE MESSAGE BR NOTTTY ;AND TRY NEXT DEVICE OFFLIN: MOV #OFFMES,R4 ;MESS START TO R4 MOV #OFFLEN,R5 ;LENGTH TO R5 JSR PC,FILWRT ;FILL IN AND WRITE LINE BR NOTTTY ;AND TRY NEXT PUD SLAVED: MOV #SLAMES,R4 ;MESSAGE START TO R4 MOV #SLALEN,R5 ;LENGTH TO R5 JSR PC,FILWRT ;INSERT AND WRITE LINE BR NOTTTY ;AND TRY NEXT PUD .PAGE .SBTTL SUBROUTINES ; ;SUB TO INSERT MESSAGE INTO LINE AND DO QIO ; FILWRT: MOVB (R4)+,(R0)+ ;XFER A CHARACTER SOB R5,FILWRT ;LOOP TILL DONE JSR PC,WRTLIN ;DO SUB TO WRITE LINE RTS PC ;AND RETURN ; ;SUB TO DO ACTUAL QIO ; WRTLIN: SUB #PTR1,R0 ;SUB START OF MESS FROM END MOV R0,QIODPB+Q.IOPL+2 ;FILL IN LENGTH IN PAR. LIST DIR$ #QIODPB ;DO QIO THING BCS SCRAM ;SCRAM IF DIRECTIVE FAILED CMPB #IS.SUC,IOST ;SUCCESS CODE ? BNE SCRAM ;EXIT TO IF QIO FAILED RTS PC ;ELSE DO RETURN ; ;SUB TO SCAN ATL ; TSTATL: MOV #.ATLLH,R5 ;USE R5 FOR SCAN TSTLOP: MOV (R5),R5 ;GET NEXT/FIRST ATL ENTRY CMP R5,#.ATLLH ;THROUGH ATL ? BNE 1$ ;BR IF NOT JMP TSTMRL ;ELSE TEST MRL 1$: CMP A.TI(R5),R3 ;SAME TI'S ? BNE TSTLOP ;NO, TRY AGAIN MOV A.TD(R5),R2 ;YES, GET STD POINTER CMP S.TN+2(R2),RAD... ;IS IT A HANDLER TASK ? BEQ TSTLOP ;YES IGNORE THEM MOV S.TN(R2),R1 ;FIRST HALF OF NAME TO R1 JSR PC,$C5TA ;CONVERT TO ASCII IN BUFFER MOV A.TD(R5),R2 ;RESTORE WIPED POINTER MOV S.TN+2(R2),R1 ;GET 2ND HALF OF NAME JSR PC,$C5TA ;AND INSERT IT MOVB #11,(R0)+ ;TAB SO IT LOOKS NICE BR TSTLOP ;AND TRY TRY AGAIN ; ;SUB TO SCAN MRL ; TSTMRL: MOV MRLSAV,R5 ;ADDR OF MRL LISTHEAD -> R5 MRLLOP: MOV (R5),R5 ;GET NEXT/FIRST MRL NODE CMP R5,MRLSAV ;THROUGH WITH MRL ? BNE 1$ ;BR IF NOT RTS PC ;ELSE RETURN 1$: CMP A.TI(R5),R3 ;CORRECT TI ? BNE MRLLOP ;TRY AGAIN IF NOT MOV MRLRAD,R1 ;REPORT HIM AS MRLXXX JSR PC,$C5TA ;CONVERT TO ASCII MOV A.TD(R5),R2 ;GET STD ADDRESS MOV S.TN+2(R2),R1 ;SECOND HALF OF TASK NAME -> R1 JSR PC,$C5TA ;REPORT NAME MOVB #11,(R0)+ ;INSERT A TAB BR MRLLOP ;AND TRY FOR MORE .SBTTL THE DATA AREAS ; EXITDP: EXIT$ ;EXIT DPB GETMCR: GMCR$ ;GET MCR DPB QIODPB: QIOW$ IO.WVB,5,5,,IOST,, PTR1: .BLKB 4 ;MESS START, BUFFER FOR 'TTXX' .ASCII / / PTR2: .BLKB 74. ;ROOM FOR REST OF LINE .EVEN IOST: .BLKW 2 ;IO STATUS BUFFER ; ;NOW THE ASCII MESSAGES ; NLGMES: .ASCII / NOT LOGGED ON/ NLGLEN=.-NLGMES OFFMES: .ASCII / OFFLINE/ OFFLEN=.-OFFMES PRIMES: .ASCII /PRIVILEGED/<11> PRILEN=.-PRIMES SLAMES: .ASCII / SLAVED/ SLALEN=.-SLAMES .EVEN RAD...: .RAD50 /.../ ;COMPARE STRING FOR HANDLER TASKS MRLRAD: .RAD50 /MRL/ ;RAD 50 STRING FOR MRL MRLSAV: .WORD 0 ;BUFFER TO SAVE MRL LISTHEAD POINTER .END START