.TITLE GTUSER Get User/process strings .NLIST BEX .ENABL LC ; ; Pdp11/dcn - Get user/process strings ; ; External symbols ; ; Entry symbols ; .GLOBL GTUSER ;get local user string .GLOBL GTPROC ;get local process string ; ; System definitions ; .ASECT .MCALL .COM,.CHR,.PSA,.CLP,.IOD,.LGD ;dcnlib definitions .MCALL .GVAL,.GTJB ;rt-11 macroni .MCALL CALL ;netlib macros .COM ;define common data .CHR ;define ascii character codes .PSA ;define psa and par areas .CLP ;define rt-11 monitor area extension .IOD ;emulator monitor area extension .LGD ;define login file entry ; ; Procedure segment ; .PSECT $BOSI,RO,I ; ; GTUSER (gth) get local user string ; Ulp/c calling sequence: code = gtuser( strptr) ; code 0: ok ; strptr output string pointer ; GTUSER: MOV R1,-(SP) ;ulp/c entry MOV 4(SP),R1 .GVAL #ARGBLK,#CONFIG ;is this a fuzzball BIT #FUZZY$,R0 BEQ 1$ ;branch if no MOV @#SYSPTR,R0 ;yes. is user logged in BITB #AF.LOG,IOHCAP(R0) BEQ 1$ ;branch if no ADD #IOHUSR,R0 ;yes. copy user string BR GTCOPY ; 1$: CLRB (R1)+ ;default user string BR GTEXIT ; GTCOPY: MOVB (R0)+,(R1)+ BNE GTCOPY BR GTEXIT ; ; GTPROC (gth) get local process string ; Ulp/c calling sequence: code = gtuser( strptr) ; code 0: ok ; strptr output string pointer ; GTPROC: MOV R1,-(SP) ;ulp/c entry MOV 4(SP),R1 .GVAL #ARGBLK,#CONFIG ;is this a fuzzball BIT #FUZZY$,R0 BEQ 1$ ;branch if no .GTJB #ARGBLK,#AREA,#-1 ;yes. get process poop MOV AREA+22,R0 ;(process name) BR 2$ ; 1$: MOV #<^RBGD>,R0 ;not fuzzball. set "BGD" process name 2$: JSR PC,PRD50 ;convert to ascii GTEXIT: CLR R0 ;ulp/c exit MOV (SP)+,R1 RTS PC ; ; Prd50 (r50) output rad50 word (three ascii chars) ; R0 = rad50 char ; PRD50: MOV R2,-(SP) ;save MOV R3,-(SP) MOV R0,R2 ;save arg MOV #DIVTAB,R3 ;r3 -> division table 1$: MOV #-1,R0 ;initialize quotient reg 2$: INC R0 ;divide by appropriate power of 50(8) SUB @R3,R2 BCC 2$ ADD @R3,R2 ;restore dividend TST R0 ;character is a blank? BEQ 5$ ;yes CMP R0,#33 ;decode rad50 char BLO 3$ ;branch if alpha ADD #22-100,R0 ;digit 3$: ADD #100,R0 ;add offset 4$: MOVB R0,(R1)+ 5$: TST -(R3) ;is conversion done BNE 1$ ;branch if no MOV (SP)+,R3 ;evas MOV (SP)+,R2 RTS PC ; ; Data segments ; .PSECT $BOSD,RO,D ; .WORD 0 ;rad50 convert table .WORD 1 .WORD 50 DIVTAB: .WORD 3100 .EVEN ; .PSECT $ERAS,RW,I ; ARGBLK: .BLKW 5 ;rt-11 argument block AREA: .BLKW 20 ;gtjb argument block .EVEN ; .END