[ nwe help ]
Search Help   »  General   »  MOO  »   JHC  »   Wizard Help

MOO Administrator (Wizard) Help


  $site_db                @@who                   @abort-shutdown
  blacklist               @blacklist              @chown
  @denewt                 @detoad                 @dump-database
  @egrep                  @grant                  graylist
  @graylist               @grep                   @grepcore
  @guests                 @log                    make-core-database
  @make-guest             @make-player            @net-who
  @newt                   @players                @programmer
  @quota                  @recycle                redlist
  @redlist                @shout                  @shutdown
  @toad                   @unnewt                 @untoad
  @who-calls          

$site_db

$site_db is a database of places people have connected from.
Important verbs and properties are:

  :add(sitename,player)
      records the fact that player connected from sitename.
  :load()
      clears the db and reloads all of the player connection info.

  .domain
      default domain for unqualified sitenames given to :add.

For each domain we keep a list of players and subdomains. 

For example, :add("doc.ic.ac.uk",#666) enters #666 on the lists for
"doc.ic.ac.uk", and, if we have to create an entry for "doc.ic.ac.uk",
we enter "doc" on the list for "ic.ac.uk", "ic" on the list for
"ac.uk", etc....  In this case, :find("ic") will return the "ic.ac.uk"
list if there is no other domain in $site_db starting with "ic".  Note
that the "ic.ac.uk" list may contain both objects, i.e., players that
have connected from the site "ic.ac.uk", and strings, i.e., subdomains
of "ic.ac.uk" like "doc".

  :find_exact(string)    => player/subdomain list or $failed_match
  :find_all_keys(string) => list of all domains that begin with string
  :find_key     (string) => unique domain that begins with string, 
                            $ambiguous_match or $failed_match

The other $generic_db functions (:find, :find_all) are also available,
though admittedly less useful.


@@who

Syntax:  @net-who [<player>...]
         @net-who from [<domain>]
Synonym: @@who

@net-who without any arguments prints all connected users and hosts.
If one or more <player> arguments are given, the specified users are
printed along with their current or most recent connected hosts.  If
any of these hosts are mentioned on $login.blacklist or
$login.graylist (see `help blacklist'[1]), an annotation appears.

With a `from...' argument, this command consults $site_db and prints
all players who have ever connected from the given domain.


@abort-shutdown

Syntax:  @abort-sh*utdown [<text>]

This aborts any shutdown currently in progress (i.e., set in motion by
@shutdown).  All players are notified that no shutdown will actually
occur; <text>, if given will be included in this notification.


the site blacklist

$login maintains three lists of hosts/domains to support player
registration schemes and blocking of connections from highly untrusted
hosts:

  .redlist   -- all connections from these sites are disabled 
  .blacklist -- player creation and guest logins are disabled
  .graylist  -- advisory list of potential trouble spots (putting a
                site on the .graylist merely annotates it in @net-who listings).

The lists are kept in a special format so it is highly recommended
that you either use $wiz:@*list/@un*list or the following verbs to
query/update the respective lists rather than bash them directly:

  $login:*listed     (host)              is host is on .*list?
  $login:*list_add   (domain or subnet)  add domain or subnet to .*list
  $login:*list_remove(domain or subnet)  remove domain or subnet from .*list

where `*' is one of `black', `red', or `gray'.

One may either specify a domain name (e.g., "baz.edu") or a numeric IP
address (e.g., "36.0.23.17").  Domain names match all hosts underneath
that domain, so, e.g., puting "baz.edu" on a list effectively adds
"x.bax.edu" for all x as well.

Likewise, an incomplete numeric address, e.g., "128.42" will match
that entire subnet, in this case all hosts whose IP numbers have the
form "128.42.m.n" for arbitrary integers m and n.

One may also give a domain name containing a wildcard ("*"), e.g.,
"fritz*.baz.edu", in which case all hostnames matching in the sense of
$string_utils:match_string() are considred to be on the list.
Wildcard matching should be avoided since it is more time-consuming.

It should be noted that, since there is no direct access to the domain
name service from within the MOO, it is possible for a host to be
blacklisted or redlisted via its domain name, and yet have someone be
able to connect from that host (and, in the case of a blacklisted
host, create a character) --- this can happen if the name service is
down and connection_name() on that player thus has given the numeric
IP address rather than the domain name.  Similarly, if you list a host
by IP number alone, it will still be possible to get in via the site's
domain name.  Thus to be completely assured of shutting out a site,
you need to list it both by domain name and IP number.


@blacklist

 

Syntax:  @redlist   [<domain or subnet> [commentary]]
         @blacklist [<domain or subnet> [commentary]]
         @graylist  [<domain or subnet> [commentary]]

Syntax:  @unredlist   [<domain or subnet> [commentary]]
         @unblacklist [<domain or subnet> [commentary]]
         @ungraylist  [<domain or subnet> [commentary]]

With no argument, the current contents of the <color>list are printed.
Otherwise, the specified domain or subnet is added to or removed from
the list and mail will be sent to $site_log.

If the given domain or subnet has subdomains/subsubnets that are
already on the list, you will be prompted as to whether you want to
remove them.  Note that adding an entry for a particular domain or
subnet effectively adds all subdomains/subsubnets, so unless there's
some reason for keeping an explicit entry for a particular subdomain,
chances are you will indeed want to remove them.  One reason to keep
an explicit entry for a subdomain would be if you intended to unlist
the full domain later but wanted to be sure you didn't unlist the
subdomain in the process.

See `help blacklist'[1] for a description of the functions of these
<color>lists.


@chown

Syntax:  @chown <object>            [to] <owner>
         @chown <object>.<propname> [to] <owner>
         @chown <object>:<verbname> [to] <owner>

Changes the ownership of the indicated object, property or verb.

Verb ownership changes are fairly straightforward, being merely a
matter of changing the verb_info() on a single verb.

Changing an object ownership includes changing the ownership on all +c
properties on that object.  Note that @chown will not change the
ownership of any other properties, nor will it change verb ownerships.
Use @grant if you need to do a more complete ownership change.  The
quota of the former owner is increased by one, as is the quota of the
new owner decreased by one.

Changing a property ownership is truly hairy.  If the property is +c
one shouldnot be doing this, unless it is to correct a past injustice
which caused the property to be owned by the wrong player.  In the
case of -c properties, the property ownership is changed on all
descendent objects (currently, if +c instances of a -c property are
found in the traversal of all of the descendants, these are not
changed, being deemed sufficiently weird that they should be handled
on a case-by-case basis...).

If there's any justice, a future version of the server will prevent
occurrences of (1) +c properties being owned by someone other than the
object owner (2) -c properties with different owners on descendant
objects (3) -c properties that are +c on some descendants.


@denewt

Syntax:    @denewt <user> [commentary]
Synonyms:  @unnewt
           @get-better

@denewt reverses the effects of @newt, moving a user's :denewt_confunc
back to :confunc, but checking first that :confunc is the same as
$wiz_utils:newt_confunc (if not, we save :confunc as :newt_confunc and
complain).

Mail is sent to $newt_log including any commentary you provide.  E.g.,

  @denewt Twit He promises not to do it again.


@detoad

Syntax:  @untoad <object> [as <name>,<alias>,<alias>...]
Synonym: @detoad

Turns the object into a player.  If the name/alias... specification is
given, the object is also renamed.

In order for this to work, the object must be a nonplayer descendant
of $player and the new object name (or the original name if none is
given in the command line) must be available for use as a player name.
As with ordinary player @renaming, any aliases which are unavailable
for use as player names are eliminated.

If the object is a descendant of $guest, then it becomes a new guest
character.  Otherwise the object is chowned to itself.  In the latter
case, it is advisable to check that the .password property has
something nontrivial in it.

If the object is a descendant of $prog, then its .programmer flag is
set.  Note that the .wizard flag is not set under any circumstances.


@dump-database

Syntax:  @dump-database

Invokes the builtin dump_database(), which requests that the server
checkpoint the database at its next opportunity.  It is not normally
necessary to call this function; the server automatically checkpoints
the database at regular intervals; see the chapter on server
assumptions about the database for details.


@egrep

Syntax:  @grep <string> in <object>
         @grep <string> in {<objectlist>}

         @egrep <regexp> in <object>
         @egrep <regexp> in {<objectlist>}

These are named for the corresponding unix utilities.

@grep searches the given object(s) for verbs whose verbcode contains
the given string as a substring of one of its lines.

@egrep searches the given object(s) for verbs whose verbcode contains
a substring matching the given regular expression (see `help
regular-expressions'[1]).


For wizards, the following forms are also available for doing full-db
searches

         @grep  <pattern>
         @egrep <pattern>
         @grep  <pattern> from [#]<n>
         @egrep <pattern> from [#]<n>

the first two search all objects in the database while the last two
search the range [#<n>..max_object()]

See also:  @grepcore, @who-calls.


@grant

Usage:  @grant <object> to <recipient> (used by owner)
        @grant <object> to me          (used by recipient)

Change the ownership of an object, including all properties and verbs
owned by the owner.  This is a two-step process: First the owner
offers it to the recipient, then the recipient accepts it.

All properties and verbs on the object that are owned by its owner
will be given to the recipient.  This means you should probably be
careful in accepting an object.  In addition, !c verbs owned by this
object's owner will change hands on all descendants.

Wizards can @grant objects in one step.


the site blacklist

$login maintains three lists of hosts/domains to support player
registration schemes and blocking of connections from highly untrusted
hosts:

  .redlist   -- all connections from these sites are disabled 
  .blacklist -- player creation and guest logins are disabled
  .graylist  -- advisory list of potential trouble spots (putting a
                site on the .graylist merely annotates it in @net-who listings).

The lists are kept in a special format so it is highly recommended
that you either use $wiz:@*list/@un*list or the following verbs to
query/update the respective lists rather than bash them directly:

  $login:*listed     (host)              is host is on .*list?
  $login:*list_add   (domain or subnet)  add domain or subnet to .*list
  $login:*list_remove(domain or subnet)  remove domain or subnet from .*list

where `*' is one of `black', `red', or `gray'.

One may either specify a domain name (e.g., "baz.edu") or a numeric IP
address (e.g., "36.0.23.17").  Domain names match all hosts underneath
that domain, so, e.g., puting "baz.edu" on a list effectively adds
"x.bax.edu" for all x as well.

Likewise, an incomplete numeric address, e.g., "128.42" will match
that entire subnet, in this case all hosts whose IP numbers have the
form "128.42.m.n" for arbitrary integers m and n.

One may also give a domain name containing a wildcard ("*"), e.g.,
"fritz*.baz.edu", in which case all hostnames matching in the sense of
$string_utils:match_string() are considred to be on the list.
Wildcard matching should be avoided since it is more time-consuming.

It should be noted that, since there is no direct access to the domain
name service from within the MOO, it is possible for a host to be
blacklisted or redlisted via its domain name, and yet have someone be
able to connect from that host (and, in the case of a blacklisted
host, create a character) --- this can happen if the name service is
down and connection_name() on that player thus has given the numeric
IP address rather than the domain name.  Similarly, if you list a host
by IP number alone, it will still be possible to get in via the site's
domain name.  Thus to be completely assured of shutting out a site,
you need to list it both by domain name and IP number.


@graylist

Syntax:  @redlist   [<domain or subnet> [commentary]]
         @blacklist [<domain or subnet> [commentary]]
         @graylist  [<domain or subnet> [commentary]]

Syntax:  @unredlist   [<domain or subnet> [commentary]]
         @unblacklist [<domain or subnet> [commentary]]
         @ungraylist  [<domain or subnet> [commentary]]

With no argument, the current contents of the <color>list are printed.
Otherwise, the specified domain or subnet is added to or removed from
the list and mail will be sent to $site_log.

If the given domain or subnet has subdomains/subsubnets that are
already on the list, you will be prompted as to whether you want to
remove them.  Note that adding an entry for a particular domain or
subnet effectively adds all subdomains/subsubnets, so unless there's
some reason for keeping an explicit entry for a particular subdomain,
chances are you will indeed want to remove them.  One reason to keep
an explicit entry for a subdomain would be if you intended to unlist
the full domain later but wanted to be sure you didn't unlist the
subdomain in the process.

See `help blacklist'[1] for a description of the functions of these
<color>lists.


@grep

Syntax:  @grep <string> in <object>
         @grep <string> in {<objectlist>}

         @egrep <regexp> in <object>
         @egrep <regexp> in {<objectlist>}

These are named for the corresponding unix utilities.

@grep searches the given object(s) for verbs whose verbcode contains
the given string as a substring of one of its lines.

@egrep searches the given object(s) for verbs whose verbcode contains
a substring matching the given regular expression (see `help
regular-expressions'[1]).


For wizards, the following forms are also available for doing full-db
searches

         @grep  <pattern>
         @egrep <pattern>
         @grep  <pattern> from [#]<n>
         @egrep <pattern> from [#]<n>

the first two search all objects in the database while the last two
search the range [#<n>..max_object()]

See also:  @grepcore, @who-calls.


@grepcore

Syntax:  @grepcore <pattern>
         @who-calls <verbname>

@grepcore pattern is @grep pattern in {all core objects}.  Core
objects are computed for you by #0:core_objects().

@who-calls greps for the verbname + "(", hoping to catch it as a verb
call.  Currently @who-calls does not allow you to restrict the search
as @grep does.  (Volunteers?)


@guests

Syntax:  @guests [<n>]

Prints out the log of guest player connections, indicating
connect/disconnect times and where they came from.  If a numeric
argument n is given, then only the last n entries in the log are
consulted (useful for when the full log is rather long) --- note that
connections and disconnections are separate entries so the actual
printed listing will be about half this length.

Alternate:  @guests now

Prints out in @who format all connected guests.  In place of the
location field is the current connect site.


@log

Syntax:  @log <message>
         @log

The first form enters <message> as a one-line comment in the server
log.  The second form prompts for a sequence of lines to be
collectively entered as an extended comment.  This uses
$command_utils:read_lines so all of those conventions apply, i.e., a
period on a line by itself ends the text, `@abort' aborts the command,
etc...).  Example: If Wizard (#2) types

    @log I did $dump_interval=3600

the following line appears in the server log

    Aug 19 22:36:52:  COMMENT:  from Wizard (#2):  I did $dump_interval=3600


make-core-database

Syntax:  make-core-database

...makes a core database (surprise).  Film at 11...


@make-guest

Syntax:  @make-guest <adjective>

This creates a new guest character.  For example,
  @make-guest Loud
creates a child of $guest, owned by $hacker, named Loud_Guest and with
aliases Loud and Loud_Guest.

Note that in order to have `connect guest' connect to a guest
character, there needs to exist some guest character having "Guest" as
a name or alias.

See also `help @make-player'[1].


@make-player

Syntax:  @make-player <name>[,<aliases>] [<email-address> [password>]]

This creates a new player having the given name and password.  If an
email address is given, this information is sent off to
$new_player_log.  If password is null or not given, a random password
is generated.


@net-who

Syntax:  @net-who [<player>...]
         @net-who from [<domain>]
Synonym: @@who

@net-who without any arguments prints all connected users and hosts.
If one or more <player> arguments are given, the specified users are
printed along with their current or most recent connected hosts.  If
any of these hosts are mentioned on $login.blacklist or
$login.graylist (see `help blacklist'[1]), an annotation appears.

With a `from...' argument, this command consults $site_db and prints
all players who have ever connected from the given domain.


@newt

Syntax:  @newt <player> [commentary]

The @newt command temporarily prevents logins on a given player.  It
works by installing a confunc ($wiz_utils:newt_confunc) on player that
does an immediate ;boot_player(), saving any existing :confunc the
user may have as :denewt_confunc.  Use @denewt to reverse this.

You must give either the player's full name or its object number.
Also, this command does not let you @newt yourself.

Mail will be sent to $newt_log, listing the player's
.all_connect_places and including any commentary you provide.  E.g.,

  @newt Twit  did real annoying things.

As with @toad and @programmer, there are messages that one may set

@newt  [{list}]
  Printed to everyone in the room in which the victim is being @newted.
  If you're worried about accidentally newting yourself in the process of
  setting this message, you can't (see above).

@newt_victim  []
  Printed to the victim.  
  This is followed by $login:newt_registration_string().

See `help @toad'[1] if you need something more drastic.


@players

Syntax:  @players [with objects]

Hmmm... what *does* this do, anyway?


@programmer

Syntax:  @programmer <player>

Sets the programmer flag on the indicated player and sends mail to $new_prog_log.  

If the player is not already a descendant of $prog, we @chparent
him/her to $prog.  In this case, if $prog has a larger
.ownership_quota than its ancestors, then we raise the player's quota
by the difference between $prog.ownership_quota and the
.ownership_quota of the common ancestor of player and $prog, be this
$player or some intermediate class.

There are messages that one may set to customize how the granting of a
programmer bit looks to the victim and to any onlookers.  After all,
this is a seminal event in a MOOer's life...  Thus we have

@programmer  [{list}]
  Printed to everyone in the room with the victim being @programmer'ed.

@programmer_victim  [You are now a programmer.]
  Printed to the victim.

These are pronoun subbed with victim == dobj.


@quota

Usage:  @quota [<someone>]

Each player has a limit as to how much database disk space e may
consume with their objects, properties, and verbs.  Objects are
periodically measured (and can have their measurement forced---see
help @measure).  If a player is over quota after a measurement, e will
not be able to @create any objects, use @copy, @verb, or @property to
grow any objects.  Existing properties and verbs may be edited/changed
at will, even while over quota.

The @quota command prints out your current quota and measured usage.
If you have more than one character, it will summarize all your other
characters' usage as well.

@quota <player> will print out the quota and usage of another player.
[Note: you will not be able to obtain second character information for
another player; whether primary or secondary character, the @quota
display will only show one character's quota.]

@quota prints a time of measurement in its display.  This is the time
of the oldest measurement out of all your objects.  For example, if
you @measure three of your objects right now, those individual times
get updated, but if you still have a couple of objects with older
measurements, that older time will be the time printed by @quota.
This is confusing to many people.

If you want to get more quota, please see `help quota-policy'[1].


 - - - - - - - - - - - - - - - - - - - - - - - - - -
Syntax:  @quota <player> is <number> [<reason>]

This second and more interesting form of the verb changes a player's
quota to the given number.  Mail will be sent to $quota_log; the
message will include the <reason> if such is given.


@recycle

Syntax:  @recycle <object-name-or-number>

Destroys the indicated object utterly and irretrievably.  Naturally,
you may only do this to objects that you own.

Of course, wizards are allowed to @recycle anything at all.

There is, however, a block (in $player:recycle) against recycling
actual players, i.e., descendants of $player that have the player flag
set.  This is mainly to prevent stupid mistakes.  If, for some reason,
you want to recycle a player, you need to @toad it first.


the site blacklist

$login maintains three lists of hosts/domains to support player
registration schemes and blocking of connections from highly untrusted
hosts:

  .redlist   -- all connections from these sites are disabled 
  .blacklist -- player creation and guest logins are disabled

  .graylist -- advisory list of potential trouble spots (putting a site
               on the .graylist merely annotates it in @net-who listings).

The lists are kept in a special format so it is highly recommended
that you either use $wiz:@*list/@un*list or the following verbs to
query/update the respective lists rather than bash them directly:

  $login:*listed     (host)              is host is on .*list?
  $login:*list_add   (domain or subnet)  add domain or subnet to .*list
  $login:*list_remove(domain or subnet)  remove domain or subnet from .*list

where `*' is one of `black', `red', or `gray'.

One may either specify a domain name (e.g., "baz.edu") or a numeric IP
address (e.g., "36.0.23.17").  Domain names match all hosts underneath
that domain, so, e.g., puting "baz.edu" on a list effectively adds
"x.bax.edu" for all x as well.

Likewise, an incomplete numeric address, e.g., "128.42" will match
that entire subnet, in this case all hosts whose IP numbers have the
form "128.42.m.n" for arbitrary integers m and n.

One may also give a domain name containing a wildcard ("*"), e.g.,
"fritz*.baz.edu", in which case all hostnames matching in the sense of
$string_utils:match_string() are considred to be on the list.
Wildcard matching should be avoided since it is more time-consuming.

It should be noted that, since there is no direct access to the domain
name service from within the MOO, it is possible for a host to be
blacklisted or redlisted via its domain name, and yet have someone be
able to connect from that host (and, in the case of a blacklisted
host, create a character) --- this can happen if the name service is
down and connection_name() on that player thus has given the numeric
IP address rather than the domain name.  Similarly, if you list a host
by IP number alone, it will still be possible to get in via the site's
domain name.  Thus to be completely assured of shutting out a site,
you need to list it both by domain name and IP number.


@redlist

Syntax:  @redlist   [<domain or subnet> [commentary]]
         @blacklist [<domain or subnet> [commentary]]
         @graylist  [<domain or subnet> [commentary]]

Syntax:  @unredlist   [<domain or subnet> [commentary]]
         @unblacklist [<domain or subnet> [commentary]]
         @ungraylist  [<domain or subnet> [commentary]]

With no argument, the current contents of the <color>list are
printed.  Otherwise, the specified domain or subnet is added to or
removed from the list and mail will be sent to $site_log.

If the given domain or subnet has subdomains/subsubnets that are
already on the list, you will be prompted as to whether you want to
remove them.  Note that adding an entry for a particular domain or
subnet effectively adds all subdomains/subsubnets, so unless there's
some reason for keeping an explicit entry for a particular subdomain,
chances are you will indeed want to remove them.  One reason to keep
an explicit entry for a subdomain would be if you intended to unlist
the full domain later but wanted to be sure you didn't unlist the
subdomain in the process.

See `help blacklist'[1] for a description of the functions of these <color>lists.


@shout

Syntax:  @shout <text>

Broadcasts the given text to all connected players.


@shutdown

Syntax:  @shutdown [<text>]

This is the friendly way to do a server shutdown; it arranges for the
actual shutdown to take place two minutes hence.  Shutdown is preceded
by a sequence of warnings to all connected players.  Warnings are
likewise given to all players who connect during this time.
<text>, if given is included in these warning messages, perhaps
as an explanation for why the server is being shut down.

Shutdown may be aborted at any time by using @abort-shutdown.


@toad

Syntax:  @toad   <player>  [graylist|blacklist|redlist] [commentary]
         @toad!  <player>                               [commentary]
         @toad!! <player>                               [commentary]

Resets the player flag of <player> (thus causing <player>
to be booted), resets the .programmer and .wizard flags, chowns the
player object to $hacker, and removes all of its names and aliases
from $player_db.

You must give either the player's full name or its object number.
Also, this command does not let you @toad yourself.

A message will be sent to $newt_log, containing a list of sites the
player has connected from, and the commentary if you provided any.

In some cases you may wish to add the player's last connected site to
the site graylist, blacklist or redlist -- see `help blacklist' -- in
order to invoke various kinds of blocking on that site (e.g., if
player creation is enabled, you may want to enter the player on the
blacklist to keep him from immediately creating a new character).
Specifying one of the listnames `graylist', `blacklist' or `redlist'
will do this.

@toad!  <player>  is synonymous with  @toad <player> blacklist
@toad!! <player>  is synonymous with  @toad <player> redlist

There are messages that one may set to customize toading.  After all,
a toading is (supposed to be) a rare event and you will doubtless want
to put on a good show.  Thus we have

@toad [{list}]
  Printed to everyone in the room in which the victim is being @toaded.
  If you're worried about accidentally toading yourself in the process of
  setting this message, see above.

@toad_victim  [Have a nice life...]
  Printed to the victim.

These are pronoun_subbed with victim == dobj.


@unnewt

Syntax:    @denewt <user> [commentary]
Synonyms:  @unnewt
           @get-better

@denewt reverses the effects of @newt, moving a user's :denewt_confunc
back to :confunc, but checking first that :confunc is the same as
$wiz_utils:newt_confunc (if not, we save :confunc as :newt_confunc and
complain).

Mail is sent to $newt_log including any commentary you provide.  E.g.,

  @denewt Twit He promises not to do it again.


@untoad

Syntax:  @untoad <object> [as <name>,<alias>,<alias>...]
Synonym: @detoad

Turns the object into a player.  If the name/alias... specification is
given, the object is also renamed.

In order for this to work, the object must be a nonplayer descendant
of $player and the new object name (or the original name if none is
given in the command line) must be available for use as a player name.
As with ordinary player @renaming, any aliases which are unavailable
for use as player names are eliminated.

If the object is a descendant of $guest, then it becomes a new guest
character.  Otherwise the object is chowned to itself.  In the latter
case, it is advisable to check that the .password property has
something nontrivial in it.

If the object is a descendant of $prog, then its .programmer flag is
set.  Note that the .wizard flag is not set under any circumstances.


@who-calls

Syntax:  @grepcore <pattern>
         @who-calls <verbname>

@grepcore pattern is @grep pattern in {all core objects}.  Core
objects are computed for you by #0:core_objects().

@who-calls greps for the verbname + "(", hoping to catch it as a verb
call.  Currently @who-calls does not allow you to restrict the search
as @grep does.  (Volunteers?)

 


help@nwe.ufl.edu
http://web.nwe.ufl.edu/writing/help/moo/jhc/wizard_help.html
Last modified: Tue May 15 14:56:55 2001