.TITLE DOSETUSER ; .LIBRARY "SYS$LIBRARY:LIB.MLB" .LINK "SYS$SYSTEM:SYS.STB" /SELECTIVE_SEARCH $JIBDEF ;JIB symbols $PCBDEF ;PCB symbols ; .PSECT DATA, PIC,USR,CON,REL,LCL,SHR,NOEXE,RD,WRT ; PROMPT: .ASCID /New username: / ;prompt for new username UNAME: .ASCID / / ;buffer for new username OWNER: .BLKL 1 ;place to store owner PID NOJIBMSG: .ASCID /%SETUSER-I-JIBNOTSET, Job username not set from subprocess/ ; .PSECT CODE, PIC,USR,CON,REL,LCL,SHR,EXE,RD,NOWRT ; .ENTRY DOSETUSER,^M<> ;main routine ; MOVAL PROMPT,-(SP) ;push address of prompt MOVAB UNAME,-(SP) ;push address of buffer descr. CALLS #2,G^LIB$GET_FOREIGN ;call get-foreign-command BLBC R0,9$ ;exit on error $CMKRNL_S ROUTIN=SETUSER ;go to kernel mode BLBC R0,9$ ;exit on error TSTL OWNER ;JIB changed? BEQL 9$ ;yes, OK PUSHAQ NOJIBMSG ;else display message CALLS #1,G^LIB$PUT_OUTPUT ; MOVZBL #^X93,R0 ;success but not SS$_NORMAL 9$: RET ;return with final status ; .ENTRY SETUSER,^M<> ;kernel-mode routine ; MOVC3 #12,@UNAME+4,CTL$T_USERNAME ;copy username to P1 space MOVL CTL$GL_PCB,R0 ;get PCB address MOVL PCB$L_OWNER(R0),OWNER ;do we have an owner? BNEQ 9$ ;yes, don't change JIB MOVL PCB$L_JIB(R0),R0 ;get address of JIB MOVC3 #12,CTL$T_USERNAME,JIB$T_USERNAME(R0) ;copy username to JIB 9$: MOVL #1,R0 ;report success RET ;return from kernel mode ; .END DOSETUSER ;The End!