.TITLE IGETAB - GET USER ACCOUNT BLOCK .IDENT /LMF01/ .MCALL GIN$,DIR$,ACNDF$,GTIM$ ; ACNDF$ ; DEFINE ACCOUNTING BLOCK OFFSETS ; ;+ ; IGETAB ; Get the user's account block if non-priveledged task or get the ; accounting info for any terminal if priv. ; ; CALL SYNTAX: ; IERR = IGETAB(IBUFF,ISIZE, [ IDEV,IUNIT ] ) ; ; WHERE: ; IBUFF = BUFFER FOR RETURN OF ACCOUNTING INFO ; ISIZE = LENGTH OF BUFFER (MIN 124(8)) ; IDEV = TERMINAL DEVICE REQUESTED ; IUNIT = UNIT NUMBER REQUESTED ;- GIN: GIN$ GI.UAB,0,0,0,0 ; IGETAB:: MOVB (R5),R4 ; GET NUMBER ARGS MOV 2(R5),GIN+G.IP01 ; PLANT BUFFER ADDRESS MOV @4(R5),GIN+G.IP02 ; GET SIZE ; CLR GIN+G.IP03 ; ASSUME P3 ABSENT CLR GIN+G.IP04 ; ASSUME P4 ABSENT SUB #2,R4 ; COUNT DOWN ARGS BEQ 20$ MOV 6(R5),R0 ; GET NEXT ADDRESS CMP R0,#-1 ; IS IT ABSENT BEQ 10$ ; IF EQ NOT THERE MOV (R0),GIN+G.IP03 ; PUT INTO DPB 10$: DEC R4 ; COUNT THIS ONE BLE 20$ ; DON'T CHECK MOV 10(R5),R0 ; GET ITS' ADDRESS CMP R0,#-1 ; IS IT THERE BEQ 20$ ; NOT IF EQUAL MOV (R0),GIN+G.IP04 ; SET UNIT NUMBER INTO DPB 20$: DIR$ #GIN ; ISSUE DIRECTIVE MOV @#$DSW,R0 ; RETURN ERROR CODE MOV 2(R5),R1 ; GET BUFFER ADDRESS AGAIN ; MOV B.CPU(R1),R2 ; REVERSE I*4 FIELDS MOV B.CPU+2(R1),B.CPU(R1) MOV R2,B.CPU+2(R1) ; MOV B.DIR(R1),R2 ; REVERSE I*4 FIELDS MOV B.DIR+2(R1),B.DIR(R1) MOV R2,B.DIR+2(R1) ; MOV B.QIO(R1),R2 ; REVERSE I*4 FIELDS MOV B.QIO+2(R1),B.QIO(R1) MOV R2,B.QIO+2(R1) ; MOV B.TAS(R1),R2 ; REVERSE I*4 FIELDS MOV B.TAS+2(R1),B.TAS(R1) MOV R2,B.TAS+2(R1) ; RETURN ; .SBTTL GET TIME INTO BYTE VECTOR ;+ ; GTIM - GET SYSTEM TIME VECTOR ; ; CALL SYNTAX: FORTRAN ; ; CALL GTIM (IBUF) ; ; WHERE: ; IBUF = BYTE BUFFER SIX LONG ;- TIME: GTIM$ BUF ; GET SYSTEM TIME DPB .EVEN BUF: .BLKW 8. ; TEMP BUFFER FOR TIME ; GTIM:: DIR$ #TIME ; GET SYSTEM TIME MOV #6,R3 ; GET NO FIELDS TO MOVE MOV #BUF,R0 ; POINT TO INPUT VECTOR MOV 2(R5),R1 ; AND OUTPUT VECTOR 10$: ; COPY ALL TO CALLERS' BUFFER MOV (R0)+,R2 ; GET NEXT ONE MOVB R2,(R1)+ ; COMPRESS TO OUTPUT SOB R3,10$ ; FOR ALL OF IT ; RETURN ; .END