.TITLE LOGUIC .IDENT /V2.0/ ; ; Written by: Bruce Zielinski ; RCA mail-stop 138-2 ; Marne Highway ; Moorestown N.J. 08057 ; ; This program will set the user's uic back to the login uic ; and the default device as long as accounting is active on the ; rsx11m+ system. If accounting is not running (or was not running ; when the user logged on) an exit status of 0 is returned. ; Exit status is 1 if accounting is running. (We install this with ; a taskname of ...MIN.) ; ; To compile: ; MAC LOGUIC=[1,1]EXEMC/ML,RSXMC/PA:1,[grp,own]LOGUIC ; To build: ; TKB LOGUIC/PR=LOGUIC,[1,54]RSX11M.STB ; .MCALL QIOW$,EXST$S,UCBDF$,TCBDF$,ACNDF$,DIR$,SPWN$,WTSE$S SPNASN: SPWN$ MCR...,,,,,5,,,ASN,ASNE ASN: .ASCIZ /ASN SY:=SY:/<33> ASNE=.-ASN-1 DEASN: .ASCIZ /ASN =SY:/<33> DEASNE=.-DEASN-1 .EVEN OUTQIO: QIOW$ IO.WLB,5,10.,,,, NULL: .ASCII /NL/ STAT: .WORD 0 BUCB: .WORD 0 TUCB: .WORD 0 ARGLST: ARG1: .BYTE 0 ARG2: .BYTE 0 ARGOUT: .BLKW 2 OUTMSG: .ASCIZ \SET /UIC=[%O,%O]\ BUFFL=.-OUTMSG+6 OUTBUF: .BLKB BUFFL .EVEN TCBDF$ UCBDF$ ,,0, ACNDF$ START: MOV $TKTCB,R0 ; GET TASK CONTROL BLOCK FOR THIS TASK MOV T.UCB(R0),TUCB ; GET UCB FROM TCB AND STORE IT MOV T.UCB(R0),R0 ; GET UCB FROM TCB CALL $SWSTK,10$ ;; ENTER SYSTEM STATE MOV @#KDSAR6,-(SP) ;; SAVE INFO FROM APR6 ON STACK MOV U.UAB(R0),@#KDSAR6 ;; MAP APR6 TO USER ACNT BLOCK ;; CONTAINED IN SECONDARY POOL MOV @#140000+B.UCB,BUCB ;; GET UCB FROM UAB AND STORE IT MOV @#140000+B.UUIC,ARGLST ;; PLACE LOGIN UIC INTO ARGLST MOV (SP)+,@#KDSAR6 ;; RESTORE ORIGINAL VALUE TO APR6 RETURN ;; LEAVE SYSTEM STATE 10$: CMP BUCB,TUCB ; IF UCBS DON'T MATCH, ACCOUNTING NOT BNE 30$ ; ACTIVE NOW OR WHEN TERM SIGNED ON. MOV #1,STAT ; STATUS SUCCESSFUL DIR$ #SPNASN ; AVOID "ASN -- Logical device not in ; system" MESSAGE IS SY: NOT ASSIGNED WTSE$S #5 ; WAIT FOR ASSIGNMENT TO COMPLETE MOV #DEASN,SPNASN+S.PWCA ; MOVE ADDRESS OF DEASSIGN MESSAGE MOV #DEASNE,SPNASN+S.PWCL ; AND COUNT INTO SPNASN AREA DIR$ #SPNASN ; CALL SPAWN AGAIN CMP U.UIC(R0),ARGLST ; CHECK IF CURRENT UIC IS SAME AS LOGIN BEQ 30$ ; YES, BRANCH TO 30$ MOV ARGLST,U.UIC(R0) ; SET LOCAL UIC TO LOGIN UIC MOV ARGLST,U.LUIC(R0) ; SET DEFAULT CHARACTERISTIC UIC ; TO LOGIN UIC (A PRIVLEGED USER ; CHANGES THIS WHEN HE/SHE CHANGES ; HIS/HER UIC) 20$: MOV #OUTBUF,R0 ; SET UP FOR OUTPUTTING MESSAGE MOV #OUTMSG,R1 ; INFORMING USER HIS/HER UIC HAS BEEN MOV #ARGOUT,R2 ; SET BACK TO HIS/HER LOGIN UIC MOVB ARG2,ARGOUT ; MOVB ARG1,ARGOUT+2 ; CALL $EDMSG ; $EDMSG RETURNS LENGTH OF OUTPUT BLOCK MOV R1,OUTQIO+Q.IOPL+2 ; IN R1. MOVE LENGTH TO SECOND PARAM IN DIR$ #OUTQIO ; THE QIO AND THEN PRINT MSG 30$: EXST$S STAT ; AND EXIT .END START