.TITLE GETUSR .IDENT /V01/ .SBTTL DESCRIPTION ; ; ; COMPONENT: GETUSR ; ; DATE: 17-SEP-70 ; ; AUTHOR: GR JOHNSON ; BATTELLE NORTHWEST ; P O BOX 999 ; RICHLAND WA 99352 ; ; SOURCE: MACRO-11 ; ; CALLER: FORTRAN IV-PLUS ; ; CALLING SEQUENCE: ; ; CALL GETUSR(LUN,USRNAM,[ISW]) ; ; LUN = LOGICAL UNIT NUMBER. ; ; USRNAM = ARRAY TO RECEIVE THE 12-CHARACTER ASCII USERNAME. ; ; ISW = OPTIONAL INTEGER STATUS WORD. ; ; 00 = SUCCESS ; ; -92 = INVALID DEVICE OR DEVICE NOT IN SYSTEM ; -96 = INVALID LOGICAL UNIT NUMBER ; ; ; DESCRIPTION: ; ; "GETUSR" RETURNS THE USERNAME ASSOCIATED WITH A SPECIFIED TERMINAL. ; THE TERMINAL MUST BE ASSIGNED TO "LUN" PRIOR TO CALLING GETUSR. THE ; CURRENT USERNAME IS RETURNED BY ASSIGNING A LOGICAL UNIT TO "TI:". ; ; EXAMPLES: ; ; RETURN THE USERNAME OF THE USER LOGGED INTO "TT10:" (IF ANY): ; ; CALL ASSIGN(LUN,'TT10:') ; CALL GETUSR(LUN,USRBUF,ISW) ; ; ; RETURN THE CURRENT USER'S USERNAME (LUN 5 = "TI:" BY DEFAULT): ; ; CALL GETUSR(5,USRBUF) ; ; ; RESTRICTIONS: ; ; THE "IASCOM" SYSTEM GLOBAL AREA MUST BE LINKED TO ANY TASK CALLING ; THIS ROUTINE: ; ; PDS> LINK/OPTIONS TEST+[1,1]COPIOUS/LIB+[1,1]IASCOM/SEL ; OPTION? LIBR=SYSRES:RO ; OPTION? LIBR=IASCOM:RO ; OPTION? / ; ; .SBTTL ENTRY POINT -- FETCH USERNAME ; ; ; .PSECT ; .MCALL GLUN$S ; ; LUNBUF: .BLKW 6 ; LUN PARAMETERS BUFFER ; GETUSR:: ; ; MOV #LUNBUF,R2 ; LUN BUFFER ADDRESS TO R2 GLUN$S @2(R5),R2 ; GET LUN INFORMATION BCS ERR0 ; RETURN ON ERROR ; MOV .DVTBA,R0 ; DEVICE TABLE BASE ADDRESS TO R0 SUB .DTESZ,R0 ; BACK OFF ONE ENTRY ; 2$: ADD .DTESZ,R0 ; ADVANCE ONE DVT ENTRY CMP .DVTRM,R0 ; END OF TERMINAL ENTRIES? BEQ ERR1 ; YES, TERMINATE DVT SCAN CMP .DVTEND,R0 ; END OF DVT? BEQ ERR1 ; YES, TERMINATE DVT SCAN ; MOV D.TN(R0),R1 ; UTN POINTER TO R1 CMP I.DN(R1),G.LUNA(R2) ; COMPARE DEVICE NAMES BNE 2$ ; NOT EQUAL, CONTINUE DVT SCAN CMPB I.TT(R1),G.LUNU(R2) ; COMPARE UNIT NUMBERS BNE 2$ ; NOT EQUAL, CONTINUE DVT SCAN ; ADD #I.UN,R1 ; USERNAME ADDRESS TO R1 MOV 4(R5),R2 ; STRING ADDRESS TO R2 MOV #12.,R3 ; BUFFER COUNT TO R3 4$: MOVB (R1)+,(R2) ; COPY USERNAME TO BUFFER BNE 6$ ; NON-ZERO? MOVB #040,(R2) ; NO, PACK SPACES 6$: INC R2 ; INCREMENT STRING POINTER SOB R3,4$ ; AND CONTINUE TO COPY ; ; SUC: CLR R4 ; SUCCESS (ISW=0) BR RTN ; ERR0: MOVB @#$DSW,R4 ; GET LUN ERROR BR RTN ; ERR1: MOV #-92.,R4 ; INVALID DEVICE OR UNIT ; ; RTN: CMPB #3,(R5) ; THREE ARGUMENTS? BGT 2$ ; NO, RETURN TO CALLER TST 6(R5) ; NULL ARGUMENT? BLT 2$ ; YES, RETURN TO CALLER MOV R4,@6(R5) ; NO, RETURN STATUS 2$: RTS PC ; RETURN TO CALLER .END ;