@q
@program bell.muf
1 99999 d
i
  
(2345678901234567890123456789012345678901234567890123456789012345678901)
  
$include $lib/reflist
  
$define Tell me @ swap notify $enddef
 
lvar ourString                    (* string: formatted message string *)
 
: DoAdminPerm?  (  --  )                  (* check: admin permission? *)
  
  trig owner me @ dbcmp
  me @ "W" flag? or not if
    "Permission denied." pid kill
  then
;
 
: DoHelp  (  --  )                                (* show help screen *)
  
  " " Tell
  prog name " (#" strcat prog intostr strcat ")" strcat Tell " " Tell
  
  "A simple utility that notifies players in a list with a configured "
  "message string." strcat Tell " " Tell
  
  "Syntax:" Tell " " Tell
  
  "  $command .................. Send default message to registered players"
  command  @ "$command" subst Tell
  "  $command <mesg> ........... Send <mesg> to registered players"
  command  @ "$command" subst Tell
  "  $command #add <player> .... Add <player> to registered list (admin)"
  command  @ "$command" subst Tell
  "  $command #remove <player> . Remove <player> from registered list (admin)"
  command  @ "$command" subst Tell
  "  $command #message <mesg> .. Set default message to
	<mesg> (admin)"
  command  @ "$command" subst Tell
  "  $command #message ......... Clear default message (admin)"
  command  @ "$command" subst Tell
  "  $command #public .......... Set action public (admin)"
  command  @ "$command" subst Tell
  "  $command #!public ......... Set action not-public (admin)"
  command  @ "$command" subst Tell " " Tell
  
  "Wizards and the owner of the trigger action have admin permission. "
  "Anyone can add or remove themselves from a public action. If the "
  "action is not public, only admins can add or remove players."
  strcat strcat Tell
;
 
: DoAdd
  
  DoAdminPerm?
  dup " " instr if
    dup " " instr strcut swap pop
    .pmatch
    dup #-1 dbcmp if
      "Player not found." Tell exit
    then
    dup #-2 dbcmp if 
      "Ambiguous. I don't know who you mean!" Tell exit
    then
    trig "_list" 3 pick REF-add
    name " added to notification list." strcat Tell
  else
    "Syntax: $command #add <player>
    command @ "$command" subst Tell
  then
;
 
: DoRemove
  
  DoAdminPerm?
  dup " " instr if
    dup " " instr strcut swap pop
    .pmatch
    dup #-1 dbcmp if
      "Player not found." Tell exit
    then
    dup #-2 dbcmp if 
      "Ambiguous. I don't know who you mean!" Tell exit
    then
    trig "_list" 3 pick REF-delete
    name " removed from notification list." strcat Tell
  else
    "Syntax: $command #remove <player>
    command @ "$command" subst Tell
  then
;
 
: DoMessage
  
  DoAdminPerm?
  dup " " instr if
    dup " " instr strcut swap pop
    trig "_message" 3 pick setprop
    "Message set to `" swap strcat "'." strcat Tell
  else
    trig "_message" remove_prop
    "Message cleared." Tell
  then
;
 
: DoPublic
  
  DoAdminPerm?
  trig "_public" "yes" setprop
  "Action set public." Tell
;
 
: DoNotPublic
  
  DoAdminPerm?
  trig "_public" remove_prop
  "Action set not-public." Tell
;
  
: DoBell
  
  trig "_message" getpropstr dup if
    ourString !
  else
    pop "%n rings the bell." ourString !
  then

  me @ ourString @ pronoun_sub ourString !

  dup if
    ourString @ " \"" strcat swap strcat "\"" strcat ourString !
  then

  trig "_list" REF-allrefs
  begin
    dup while
    swap dup me @ dbcmp if
      pop
    else
      ourString @ notify
    then
    1 -
  repeat
  pop

  me @ ourString @ notify
;
 
: main
   
  "me" match me !
	dup if
	  dup "#h*"  smatch if DoHelp      else
    dup "#a*"  smatch if DoAdd       else
    dup "#r*"  smatch if DoRemove    else
    dup "#m*"  smatch if DoMessage   else
    dup "#p*"  smatch if DoPublic    else
    dup "#!p*" smatch if DoNotPublic else
                         DoBell
    then then then then then then
  else
    DoBell
  then
;
.
c
q