; WHO.MAC - derived from SYSTAT which is a local-use program ;an RTDS module ;(c) 1984 ESKAY ; ; This program combines functions similar to WHO and STATUS ; under TurboPlus for use with RTDS. ; ; Displayed are (for each active station 1..15): ; - caller login time ; - caller access level ; - caller name ; - current command line ; - execution time of CL ; - his current TOS ; .z80 .request syslib ; cr equ 0dh lf equ 0ah bdos equ 5 tdos equ 50h dbuff equ 80h uacl equ dbuff ulog equ dbuff+1 uintm equ dbuff+2 uusr equ dbuff+7 udrv equ dbuff+8 ucurt equ dbuff+9 uname equ dbuff+10h ucmdl equ dbuff+20h ; extrn print,condin,mafdc,crlf,pstr,cout extrn @dcvrt public @dcfld extrn timdif public sttime,entime,elaptm ; start: ld sp,stack ld c,12 ;get station number call bdos ld a,'@' add a,e ld (lstn),a ; ; outer loop ; oloop: ld de,dbuff ld c,105 call bdos ld (dbuff+4),a ld hl,dbuff+2 ld de,entime call bcda ld hl,(dbuff) call @dcvrt ld hl,@dcfld ld de,curdat ld bc,8 push bc ldir ld hl,entime ld de,curtim pop bc ldir call print db cr,lf,lf,lf,lf,lf,lf,0 call print db ' [RTDS (c) 1984 ESKAY]',cr,lf,0 call print db ' [SYSTAT v1.20 - st ' lstn: db ' ]',cr,lf,0 call print db ' [' curdat: db '00/00/00 - ' curtim: db '00:00:00]' db cr,lf,lf,lf db 'ST ' db 'NAME ' db 'DATE ON TIME ON ' db 'AC ' db 'UUD: ' db 'TOS ' db 'COMMAND LINE',cr,lf db '----------------------------------------' db '--------------------------------------',cr,lf,0 xor a ;set acc ld (stn),a ;save as station # iloop: call crlf ilop1: ld hl,info ;point to info line ld b,@dcfld-info ;79 chars total zlp1: ld (hl),' ' inc hl djnz zlp1 ld hl,cmdln ld b,entime-1-cmdln zlp2: ld (hl),' ' inc hl djnz zlp2 ld a,(stn) ld e,a inc a ld (stn),a cp 10 jp z,exit ld a,'@' add a,e ld (statn),a ld (ulog),a ld d,0 ld b,0feh ld c,41 ld h,91h call tdos inc a jp z,ilop1 ld a,(ulog) cp 77h jp nz,ilop1 ld hl,uname ;get name ld de,name call copyhd ld hl,ucmdl ;get command line ld de,cmdln call copyhd ld hl,(uintm) ;get login date call @dcvrt ld hl,uintm+2 ;get login time ld de,sttime call bcda call timdif ld a,(uacl) add a,'0' ld (aclvl),a ld a,(uusr) cp 10 ld hl,du jr nc,noten ld (hl),'0' inc hl noten: ex de,hl call mafdc ld a,(udrv) add a,'A' ld (driv),a ld hl,info call pstr jp iloop ; exit: ld a,(5dh) cp 'C' jp nz,0 delay: call condin cp 3 jp z,0 ld c,10 call tdos inc c jr nz,delay ld a,27 call cout ld a,'E' call cout jp oloop ; copyhd: ld a,(hl) cp ' ' ret c cp 'z'+1 ret nc ld (de),a inc de inc hl jr copyhd ; bcda: ld b,3 bcdal: ld a,(hl) inc hl call bcdaf inc de djnz bcdal ret ; bcdaf: push af rra rra rra rra call putn pop af putn: and 0fh add a,'0' ld (de),a inc de ret ; stn: db 0 once: db 0 ; ; this is the "info" line updated for each station: ; info: statn: db ' ' ;station letter (@=master) name: db ' ' ;name (last first) @dcfld: db '00/00/00 ' ;date on sttime: db '00:00:00 ' ;time on aclvl: db ' ' ;access level du: db '00' driv: db 'A: ' ;user/drive elaptm: db '00:00:00 ' ;time on system cmdln: db ' ',0 ; entime: db '00:00:00' ;current time ds 80 stack equ $ end