	TITLE	'Who -> Print name of current user logged in'
;
;	WHO is on the system?
;	Who will allow the system operator to simply type WHO on the console
;	and the system will respond by looking up the user.  This is just one
;	of the many programs incorporated in the OxGate BBS system.  If
;	you would like more information on the OxGate, feel free to call
;	(408) 867-1768 (voice) in the evenings (Pacific Time).
;	NB: Who will also work with RBBS.
;
;	Copyright (C) 1983 By Paul Traina - All rights reserved.
;	This program has been released for non-commercial useage.
;	This program may not be sold without the express written
;	conscent of the Author.
;
	MACLIB	SEQIO22			;Public domain macro library
;
FILAREA:	EQU	14		;User area that LASTCALR is in
FILDRIV:	EQU	'A'		;Drive where LASTCALR resides
;
;**************************************************************************
;	End of user modifiable section
;**************************************************************************
		PAGE
;
BDOS		EQU	0005h		;BDOS vector
LF		EQU	10		;Ascii line feed
CR		EQU	13		;Ascii carriage return
EOF		EQU	1Ah		;CP/M end of file

OUTPUT		EQU	6		;BDOS console output function
PRINT		EQU	9		;BDOS print string
BSIZE		EQU	80H		;Size of buffer
FILERR		SET	ERROR		;Error exit routine
BUFFERS		SET	DBUF		;Disk buffer to use
;
; The following allocations are used by the 'FILE' macros
;
	ORG	100h
	JMP	PSTART
	DB	'Who - Copyright (C) 1982 by Paul Traina',CR,LF,EOF
PSTART:	PUSH	B	;SAVE STACK AND REGISTERS
	PUSH	D
	PUSH	H
	LXI	H,0
	DAD	SP
	SHLD	STACK
	XRA	A	;This makes WHO re-entrant
	STA	COMMA
	JMP	START
;
DEFAULT$USER:	DB	FILAREA
CUR$USER:	DB	0FFh
DEFAULT$DISK:	DB	FILDRIV-'A'
CUR$DISK:	DB	0FFh
PGSIZE:		DW	0
;
START:	FILE	INFILE,CALLER,,LASTCALR,,BSIZE,,PUBLIC,TRUE
;
GETLOOP	GET	CALLER		;Get a character from the file
	CPI	EOF
	JZ	EXIT
	CPI	','		;Don't print the ',' between names
	JNZ	CHAROK
	LDA	COMMA		;only allow one comma
	INR	A		;this is so that we don't see the date
	CPI	2		;that is right after the last name
	JZ	EXIT		;this is all we should print, STOP
	STA	COMMA		;save new comma value
	MVI	A,' '		;and instead of a comma, print a space
CHAROK:	CALL	CONOUT
	JMP	GETLOOP
;
CONOUT:	PUSH	B
	PUSH	D
	PUSH	H
	MOV	E,A		;move character to 'E' register
	MVI	C,OUTPUT	;tell BDOS to print it
	CALL	BDOS
	POP	H
	POP	D
	POP	B
	RET

ERROR:	MVI	C,PRINT
	LXI	D,ERRMSG
	CALL	BDOS

EXIT:	LHLD	STACK		;restore the stack
	SPHL
	POP	H		;restore the registers
	POP	D
	POP	B
	RET			;return to the CCP
;
ERRMSG:	DB	'File error?$'

	DS	20h		;lots of stack space
STACK:	DW	0		;save stack vector here
COMMA:	DB	0		;number of comma's so far
;
DBUF:	EQU	$		;must be last in program, disk buffer
	END
