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