	.TITLE	SETACC - SET ACCOUNT NAME

	.ENABL	DBG

	.LIBRARY	"SYS$LIBRARY:LIB.MLB"

	$ACCDEF
	$JPIDEF
	$PCBDEF
	$PHDDEF

	ACC=	4			;OFFSET TO ACCOUNT NAME

ACCNAM:	.BLKB	8			;STORAGE FOR NAME

; ARG BLOCK FOR $SNDACC SYSTEM CALL

ACCDSC:	.LONG	ACCEND-ACCBLK
	.ADDRESS	ACCBLK
ACCBLK:	.WORD	ACC$K_INSMESG		;MESSAGE TYPE
	.BYTE	ACCEND-CPUTIM		;MAKE COUNTED ASCII STRING
CPUTIM:	.LONG	0			;CPU TIME
PAGFLT:	.LONG	0			;PAGE FAULT COUNT
PGFLPK:	.LONG	0			;PEAK SIZE OF PAGING FILE
WSPEAK:	.LONG	0			;PEAK WORKING SET SIZE
BIOCNT:	.LONG	0			;BUFFERED I/O COUNT
DIOCNT:	.LONG	0			;DIRECT I/O COUNT
VOLUMS:	.LONG	0			;NUMBER OF VOLUMES MOUNTED
LOGIN:	.LONG	0,0			;TIME AT LOGIN
OWNER:	.LONG	0			;PID OF OWNER (IF SUBPROCESS)
JOBNAM:	.BLKB	8			;JOB NAME (IF BATCH)
QUENAM:	.BLKB	16			;QUEUE NAME (IF BATCH)
JOBTYP:	.WORD	0			;TYPE OF JOB (ALSO INDICATES ACCSET REC)
ACCEND:

; ARG BLOCK FOR $GETJPI SYSTEM CALL

JPIBLK:	.WORD	4,JPI$_CPUTIM
	.ADDRESS	CPUTIM
	.LONG	0
	.WORD	4,JPI$_PAGEFLTS
	.ADDRESS	PAGFLT
	.LONG	0
	.WORD	4,JPI$_PGFLQUOTA
	.ADDRESS	PGFLPK
	.LONG	0
	.WORD	4,JPI$_WSPEAK
	.ADDRESS	WSPEAK
	.LONG	0
	.WORD	4,JPI$_BIOCNT
	.ADDRESS	BIOCNT
	.LONG	0
	.WORD	4,JPI$_DIOCNT
	.ADDRESS	DIOCNT
	.LONG	0
	.WORD	4,JPI$_VOLUMES
	.ADDRESS	VOLUMS
	.LONG	0
	.WORD	8,JPI$_LOGINTIM
	.ADDRESS	LOGIN
	.LONG	0
	.WORD	4,JPI$_OWNER
	.ADDRESS	OWNER
	.LONG	0
	.LONG	0				;END OF THE LIST
JPIEND:

	.ENTRY	SETACC,^M<R2,R3,R4,R5,R6,R7,R8,R9,R10>

; HERE WE GO....

	MOVC5	#0,JOBNAM,#^A/ /,#8,JOBNAM	;BLANK FILL JOB NAME
	MOVC5	#0,QUENAM,#0,#16,QUENAM	;ZERO FILL (ALSO COUNT) QUEUE NAME
	MOVC3	#8,@ACC(AP),ACCNAM	;GET ACCOUNT NAME
	$GETJPI_S	ITMLST=JPIBLK	;GET JOB INFO
	BLBS	R0,10$			;XFER IF ALL OK
	PUSHL	R0			;ELSE SAVE STATUS
	CALLS	#1,LIB$STOP		; AND EXIT AWAY
10$:	$CMKRNL_S	GETTYP		;GET TYPE OF JOB PROCESS IS
	MOVW	R0,JOBTYP		;SAVE FOR LATER
	$SNDACC_S	MSGBUF=ACCDSC	;WRITE ACCOUNTING RECORD
	BLBS	R0,20$			;XFER IF ALL OK
	PUSHL	R0			;ELSE SAVE ERROR CODE
	CALLS	#1,LIB$STOP		; AND TERMINATE
20$:	$CMKRNL_S	SETNAM		;GET TO WHERE I CAN DO THE STUFF
	MOVL	#SS$_NORMAL,R0		;SET NORMAL STATUS
	RET				;RETURN WHEN DONE

; RESET VARIOUS COUNTS AND SET ACCOUNT NAME

SETNAM:	.WORD	^M<R0,R1,R2,R3,R4,R5>	;REGS TO SAVE
	MOVQ	EXE$GQ_SYSTIME,CTL$GQ_LOGIN	;SET NEW LOGIN TIME
	CLRL	CTL$GL_VOLUMES		;NO MOUNTED VOLUMES
	CLRL	CTL$GL_WSPEAK		;PEAK W.S. = 0
	MOVL	@#SCH$GL_CURPCB,R4	;GET ADDRESS OF CURRENT PCB
	MOVL	PCB$L_PHD(R4),R5	;GET ADDR OF CURRENT PHD
	CLRL	PHD$L_BIOCNT(R5)	;RESET BUFFERED I/O COUNT
	CLRL	PHD$L_DIOCNT(R5)	;RESET DIRECT I/O COUNT
	CLRL	PHD$L_CPUTIM(R5)	;RESET CPU TIME USED
	CLRL	PHD$L_PAGEFLTS(R5)	;RESET NUMBER OF PAGEFAULTS
	MOVC3	#8,ACCNAM,@#CTL$T_ACCOUNT	;SET ACCOUNT NAME
	RET				;RETURN

; DETERMINE JOB TYPE

GETTYP:	.WORD	^M<R1,R2,R3,R4,R5>
	MOVL	@#SCH$GL_CURPCB,R4	;GET ADDRESS OF CURRENT PCB
	MOVL	PCB$L_STS(R4),R1	;GET PROCESS STATUS
	MOVL	#-ACC$K_INTTRM,R0	;SET FOR INTERACTIVE JOB
	BBC	#PCB$V_BATCH,R1,10$	;XFER IF I GOT IT RIGHT
	MOVL	#-ACC$K_BATTRM,R0	;ELSE SET AS BATCH JOB
10$:	RET				; AND RETURN

	.END				;THAT'S ALL FOLKS
