Wizlog.muf allows wizards to edit and view a list stored on players.
It's intended use is for recording administrative information, such
as warnings about AUP violations.
INSTALLATION:
Port the program and set it Wizard. Link a global action with a
name such as @wizlog or wizlog to it. Wizlog.muf requires lib-lmgr
and a pmatch macro, both of which should be available on any
established MUCK.
USAGE:
<cmd> <player> = <entry> .. Make a log entry for <player>
<cmd> <player> ............ Display log for <player>
<cmd> #clear <player> ..... Clear log for <player>
Wizlog.muf may be freely ported. Please comment any changes.
)
"The wiz-only " command @ strcat
" command allows wizards to record and view log entries for "
"specific players." strcat Tell " " Tell
"Syntax:" Tell " " Tell
" $command <player> = <entry> .... Make a log entry for <player>"
command @ "$command" subst Tell
" $command <player> .............. View log entries for <player>"
command @ "$command" subst Tell
" $command #clear <player> ....... Clear log for <player>"
command @ "$command" subst Tell " " Tell
;
: DoAddListLine ( s -- ) (* add a line to @/wizlog# on ourPlayer *)
"@/wizlog" swap over ourPlayer @
LMGR-GetCount 1 + 3 pick ourPlayer @
LMGR-PutElem pop
;
: DoShowList ( d s -- ) (* display list s on object d *)
"@/wizlog" ourPlayer @ LMGR-GetList
begin
dup while
swap Tell
1 -
repeat
pop
">> Done." Tell
;
: DoLogEntry ( -- ) (* add an entry to specifed player's log *)
me @ "W" flag? not if (* check permission *)
">> Permission denied." Tell exit
then
ourArg @ dup "=" instr strcut strip ourArg !
dup if
strip dup strlen 1 - strcut pop strip
.pmatch dup if (* find player *)
dup #-2 dbcmp if
">> Ambiguous. I'm not sure who you mean." Tell pop exit
else
ourPlayer !
then
else
">> Player not found." Tell pop exit
then
(* format entry *)
"$me %D : " ourArg @ strcat
me @ name "$me" subst
systime timefmt dup ourArg !
DoAddListLine (* add to log *)
">> " ourArg @ strcat Tell
">> Entry created for $player"
ourPlayer @ name "$player" subst Tell
else
DoHelp exit
then
;
: DoShowLog ( -- ) (* show log for specified player *)
me @ "W" flag? not if (* check permission *)
">> Permission denied." Tell exit
then
ourArg @ strip .pmatch (* find player *)
dup if
dup #-2 dbcmp if
">> Ambiguous. I'm not sure who you mean." Tell
else
ourPlayer ! (* show log *)
">> WizLog entries for $player:"
ourPlayer @ name "$player" subst Tell
DoShowList
then
else
">> Player not found." Tell
then
;
: DoClear ( s -- ) (* clear log for player *)
me @ "W" flag? not if (* check permission *)
">> Permission denied." Tell exit
then
(* find player *)
ourArg @ dup " " instr strcut swap pop strip .pmatch
dup if
dup #-2 dbcmp if
">> Ambiguous. I'm not sure who you mean." Tell pop exit
else
ourPlayer !
then
else
">> Player not found." Tell pop exit
then
begin (* get confirmation *)
">> Please confirm: You wish to clear the wizlog for $player? (y/n)"
ourPlayer @ name "$player" subst Tell
read
(* clear log *)
"yes" over stringpfx if
ourPlayer @ "@/wizlog#/" nextprop
begin
dup while
ourPlayer @ over nextprop
ourPlayer @ rot remove_prop
repeat
pop
ourPlayer @ "@/wizlog#" remove_prop
">> Log cleared for $player."
ourPlayer @ name "$player" subst Tell exit
else
"no" swap stringpfx if
">> Aborted." Tell exit
else
">> Entry not understood." pop
then
then
repeat
;
: main
"me" match me ! (* make sure I'm me *)
dup if (* parse and route *)
ourArg !
else
DoHelp exit
then
"#help" ourArg @ stringpfx if DoHelp exit then
ourArg @ dup " " instr strcut pop strip
dup if
"#clear" swap stringpfx if
DoClear exit
then
then
ourArg @ "=" instr if
DoLogEntry
else
DoShowLog
then
;