[PENNMUSH-ANNOUNCE] 1.7.7-patch06

dunemush at tala.mede.uic.edu dunemush at tala.mede.uic.edu
Sat Jan 25 14:34:31 CST 2003


This is patch06 to PennMUSH 1.7.7. After applying this patch, you will
have version 1.7.7p6

** Because this patch is so substantial, you should consider getting
** a clean tarball instead, and patching any of your local changes
** into that. Really. Don't say I didn't warn you.

To apply this patch, save it to a file in your top-level MUSH directory,
and do the following:

	** Back up your existing databases! This patchlevel will convert
        ** them to the new flag system, and there's no going back!

	patch -p1 < 1.7.7-patch06

	** READ the UPGRADING file, section B, if you've hacked in
        ** flags in the past

	make update
	make install

If you use GNU patch 2.2, you probably want the above to be 'patch -b -p1',
not just 'patch -p1'.

Unix (or cygwin) users need not worry about failed hunks in src/switchinc.c,
hdrs/switches.h, hdrs/cmds.h, or hdrs/funs.h. These files are automatically
rebuilt on compile.

Then @shutdown and restart your MUSH.
    - Alan/Javelin

In this patch:

Major changes:
  * Rewrite of the flag system. The new system allows for any number
    of flags, which may apply to any set of object types (the flags/toggles
    distinction has been eliminated). Flags without single-character
    abbreviations are better supported. Flags are stored in the object
    database, and are referenced in hardcode and the db by the name
    of the flag rather than bit positions.  Older databases will be
    automatically converted to the new format on load, but can not be
    converted back (so make backups!). New flaglocal.dst file for
    hardcode patch hackers to add custom flags.
  * Rewrite of the matcher code (src/match.c). Some semantics of the
    matching have changed: matching adjectives are parsed earlier and
    restrict the match for greater efficiency; they also behave more
    close as described in the help with respect to object ordering.
    In addition, you can now do things by dbref without controlling
    the object in many cases that previously required control.
    Provoked by bug reports by Intrevis at M*U*S*H and Philip Mak.
Commands:
  * @flag allows God to manipulate flags within the game, including 
    adding new flags. Flags additions/changes are maintained across
    reboots, so this command does not need to be run at every startup.
Functions:
  * lflags(), orlflags(), andlflags() return or test flag lists.
Minor changes:
  * Much cleanup of @wall. Minimally-user-visible changes:
    The @rwallemit, @rwallpose, @wallemit, @wallpose, @wizemit and
    @wizpose commands have been removed. @wall no longer accepts the
    /wizard, /royalty, and /pose switches, and @rwall and @wizwall accept
    the /emit switch. Suggested by Vadiv at M*U*S*H, though he'd really
    rather see @wall removed.
  * @lock and @unlock now show which type of lock was set/cleared.
    @lset now specifically notes that lock flags are being changed.
    Suggested by Tanaku at M*U*S*H.
Fixes:
  * @boot/me will no longer boot a connection if it is the sole
    connection the player, even if it's technically inactive.
    Suggested by Ambrosia at M*U*S*H.
  * @boot'ing an active self (by descriptor) crashes the MUSH.
    Discovered by Ashlynn at ChicagoMUSH.
  * The thorn and eth characters generated with accent() would
    convert to 'th' when stripped or viewed under NOACCENT, which
    could be very confusing in object names. Same for the German sharp
    s, which converted to 'ss'. Until we can cleverly set up separate
    tables for object name unparsing, these have been reverted to their
    old behavior so that stripaccents(accent(X,Y)) should return X for
    any X and Y. Reported by DeeJee, Intrevis, and Time (@M*U*S*H).


Prereq: 1.7.7p5
*** 1_7_7.110/Patchlevel Tue, 07 Jan 2003 11:10:04 -0600 dunemush (pennmush/5_Patchlevel 1.17.1.11.1.7 600)
--- 1_7_7.146(w)/Patchlevel Thu, 23 Jan 2003 10:33:30 -0600 dunemush (pennmush/5_Patchlevel 1.17.1.11.1.8 600)
***************
*** 1,2 ****
  Do not edit this file. It is maintained by the official PennMUSH patches.
! This is PennMUSH 1.7.7p5
--- 1,2 ----
  Do not edit this file. It is maintained by the official PennMUSH patches.
! This is PennMUSH 1.7.7p6
*** 1_7_7.110/CHANGES Tue, 07 Jan 2003 11:10:04 -0600 dunemush (pennmush/g/23_CHANGES 1.31 600)
--- 1_7_7.146(w)/CHANGES Thu, 23 Jan 2003 22:16:38 -0600 dunemush (pennmush/g/23_CHANGES 1.43 600)
***************
*** 18,23 ****
--- 18,75 ----
  
  ==========================================================================
  
+ Version 1.7.7 patchlevel 6                      January 23, 2003
+ 
+ Major changes:
+   * Rewrite of the flag system. The new system allows for any number
+     of flags, which may apply to any set of object types (the flags/toggles
+     distinction has been eliminated). Flags without single-character
+     abbreviations are better supported. Flags are stored in the object
+     database, and are referenced in hardcode and the db by the name
+     of the flag rather than bit positions.  Older databases will be
+     automatically converted to the new format on load, but can not be
+     converted back (so make backups!). New flaglocal.dst file for
+     hardcode patch hackers to add custom flags.
+   * Rewrite of the matcher code (src/match.c). Some semantics of the
+     matching have changed: matching adjectives are parsed earlier and
+     restrict the match for greater efficiency; they also behave more
+     close as described in the help with respect to object ordering.
+     In addition, you can now do things by dbref without controlling
+     the object in many cases that previously required control.
+     Provoked by bug reports by Intrevis at M*U*S*H and Philip Mak.
+ Commands:
+   * @flag allows God to manipulate flags within the game, including 
+     adding new flags. Flags additions/changes are maintained across
+     reboots, so this command does not need to be run at every startup.
+ Functions:
+   * lflags(), orlflags(), andlflags() return or test flag lists.
+ Minor changes:
+   * New NUMVERSION macro defined in hdrs/version.h that can be tested
+     by hardcode hacks to add code conditional on version.
+   * Much cleanup of @wall. Minimally-user-visible changes:
+     The @rwallemit, @rwallpose, @wallemit, @wallpose, @wizemit and
+     @wizpose commands have been removed. @wall no longer accepts the
+     /wizard, /royalty, and /pose switches, and @rwall and @wizwall accept
+     the /emit switch. Suggested by Vadiv at M*U*S*H, though he'd really
+     rather see @wall removed.
+   * @lock and @unlock now show which type of lock was set/cleared.
+     @lset now specifically notes that lock flags are being changed.
+     Suggested by Tanaku at M*U*S*H.
+ Fixes:
+   * @boot/me will no longer boot a connection if it is the sole
+     connection the player, even if it's technically inactive.
+     Suggested by Ambrosia at M*U*S*H.
+   * @boot'ing an active self (by descriptor) crashes the MUSH.
+     Discovered by Ashlynn at ChicagoMUSH.
+   * The thorn and eth characters generated with accent() would
+     convert to 'th' when stripped or viewed under NOACCENT, which
+     could be very confusing in object names. Same for the German sharp
+     s, which converted to 'ss'. Until we can cleverly set up separate
+     tables for object name unparsing, these have been reverted to their
+     old behavior so that stripaccents(accent(X,Y)) should return X for
+     any X and Y. Reported by DeeJee, Intrevis, and Time (@M*U*S*H).
+ 
+ 
  Version 1.7.7 patchlevel 5                      January 7, 2003
  
  Fixes:
*** 1_7_7.110/game/txt/hlp/pennvers.hlp Tue, 07 Jan 2003 11:10:04 -0600 dunemush (pennmush/12_pennvers.h 1.169.1.42.1.3.1.2.2.2.1.1.1.3.1.1.1.5.1.4.1.1.1.1.1.1.1.1.1.5.1.1.1.3.1.1.1.3.1.1.1.54.1.10.1.2.1.1.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.2.1.1.1.1.1.7.1.1.1.1.1.2.1.1.1.4.1.2.1.1.1.1.1.1.1.2.1.4 600)
--- 1_7_7.146(w)/game/txt/hlp/pennvers.hlp Sat, 25 Jan 2003 13:52:38 -0600 dunemush (pennmush/12_pennvers.h 1.169.1.42.1.3.1.2.2.2.1.1.1.3.1.1.1.5.1.4.1.1.1.1.1.1.1.1.1.5.1.1.1.3.1.1.1.3.1.1.1.54.1.10.1.2.1.1.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.2.1.1.1.1.1.7.1.1.1.1.1.2.1.1.1.4.1.2.1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.1.1.1.1.4 600)
***************
*** 1,5 ****
  & changes
! & 1.7.7p5
  This is a list of changes in this patchlevel which are probably of
  interest to players. More information about new commands and functions
  can probably be gotten via 'help <name of whatever>'. 'help credits'
--- 1,5 ----
  & changes
! & 1.7.7p6
  This is a list of changes in this patchlevel which are probably of
  interest to players. More information about new commands and functions
  can probably be gotten via 'help <name of whatever>'. 'help credits'
***************
*** 11,16 ****
--- 11,69 ----
  A list of the patchlevels associated with each release can
  be read in 'help patchlevels'.
  
+ Version 1.7.7 patchlevel 6                      January 23, 2003
+ 
+ Major changes:
+   * Rewrite of the flag system. The new system allows for any number
+     of flags, which may apply to any set of object types (the flags/toggles
+     distinction has been eliminated). Flags without single-character
+     abbreviations are better supported. Flags are stored in the object
+     database, and are referenced in hardcode and the db by the name
+     of the flag rather than bit positions.  Older databases will be
+     automatically converted to the new format on load, but can not be
+     converted back (so make backups!). New flaglocal.dst file for
+     hardcode patch hackers to add custom flags.
+   * Rewrite of the matcher code (src/match.c). Some semantics of the
+     matching have changed: matching adjectives are parsed earlier and
+     restrict the match for greater efficiency; they also behave more
+     close as described in the help with respect to object ordering.
+     In addition, you can now do things by dbref without controlling
+     the object in many cases that previously required control.
+     Provoked by bug reports by Intrevis at M*U*S*H and Philip Mak.
+ Commands:
+   * @flag allows God to manipulate flags within the game, including 
+     adding new flags. Flags additions/changes are maintained across
+     reboots, so this command does not need to be run at every startup.
+ Functions:
+   * lflags(), orlflags(), andlflags() return or test flag lists.
+ Minor changes:
+   * New NUMVERSION macro defined in hdrs/version.h that can be tested
+     by hardcode hacks to add code conditional on version.
+   * Much cleanup of @wall. Minimally-user-visible changes:
+     The @rwallemit, @rwallpose, @wallemit, @wallpose, @wizemit and
+     @wizpose commands have been removed. @wall no longer accepts the
+     /wizard, /royalty, and /pose switches, and @rwall and @wizwall accept
+     the /emit switch. Suggested by Vadiv at M*U*S*H, though he'd really
+     rather see @wall removed.
+   * @lock and @unlock now show which type of lock was set/cleared.
+     @lset now specifically notes that lock flags are being changed.
+     Suggested by Tanaku at M*U*S*H.
+ Fixes:
+   * @boot/me will no longer boot a connection if it is the sole
+     connection the player, even if it's technically inactive.
+     Suggested by Ambrosia at M*U*S*H.
+   * @boot'ing an active self (by descriptor) crashes the MUSH.
+     Discovered by Ashlynn at ChicagoMUSH.
+   * The thorn and eth characters generated with accent() would
+     convert to 'th' when stripped or viewed under NOACCENT, which
+     could be very confusing in object names. Same for the German sharp
+     s, which converted to 'ss'. Until we can cleverly set up separate
+     tables for object name unparsing, these have been reverted to their
+     old behavior so that stripaccents(accent(X,Y)) should return X for
+     any X and Y. Reported by DeeJee, Intrevis, and Time (@M*U*S*H).
+ 
+ 
+ & 1.7.7p5
  Version 1.7.7 patchlevel 5                      January 7, 2003
  
  Fixes:
***************
*** 1323,1328 ****
--- 1376,1407 ----
    * Indentation fixes [SW]
    * Fixes up to 1.7.4p12 merged in.
  
+ & 1.7.6p6
+ Version 1.7.6 patchlevel 6                      January 23, 2003
+ 
+ Minor changes:
+    * nearby() always works for see_all players. Reported by Sparta.
+    * findable() now requires that executor control either the object
+      or the victim or be see_all. Reported by Sparta.
+ Fixes:
+    * POWER^ and CHANNEL^ locks tested the wrong object. [SW]
+    * @grep, @wipe, and @edit now report when no attributes are
+      matched. Suggested by Procyon at M3
+    * Changes to telnet negotiation strings to match those in
+      PennMUSH 1.7.7, which seems to fix some problems with display
+      of connect.txt in some clients. Report by Howie at NewFrontier.
+      Patch by Time at M*U*S*H.
+    * @mail/silent wasn't unless you used /send too. Report by
+      Moe at Chicago.
+    * Wizards could set attributes on garbage objects (which were useless,
+      but may have leaked memory needlessly). Reported by Taz at M*U*S*H.
+    * @chan/hide didn't check for hide permissions properly in some
+      cases. Reported by Tanaku at M*U*S*H.
+    * Better explanation of when regexp matching is case sensitive vs.
+      insensitive. Suggested by Jake at BrazilMUX, Brazil at BrazilMUX, and
+      Vadiv at M*U*S*H.
+ 
+ 
  & 1.7.6p5
  Version 1.7.6 patchlevel 5                      January 7, 2003
  
***************
*** 1431,1437 ****
     * Help fixes by Bird at M*U*S*H, Intrevis at M*U*S*H, Philip Mak.
     * @search type=something would report an error AND match the entire
       database when something wasn't object, player, exit or room. [SW]
!    * Cosmetic bug in @malias/list fixed. Report by Philip Mak.
     * The info_slave now properly obeys the use_dns setting in mush.cnf.
       This requires a full shutdown to put into effect. Report by
       BlaZe at M*U*S*H. [SW]
--- 1510,1516 ----
     * Help fixes by Bird at M*U*S*H, Intrevis at M*U*S*H, Philip Mak.
     * @search type=something would report an error AND match the entire
       database when something wasn't object, player, exit or room. [SW]
!    * Cosmetic bug in @malias/list fixed. Report by Tanaku at M*U*S*H.
     * The info_slave now properly obeys the use_dns setting in mush.cnf.
       This requires a full shutdown to put into effect. Report by
       BlaZe at M*U*S*H. [SW]
***************
*** 5945,5952 ****
  For information on a specific patchlevel of one of the versions listed,
  type 'help <version>p<patchlevel>'. For example, 'help 1.7.2p3'
  
! 1.7.7: 0, 1, 2, 3, 4, 5
! 1.7.6: 0, 1, 2, 3, 4, 5
  1.7.5: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
  1.7.4: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
         19, 20
--- 6024,6031 ----
  For information on a specific patchlevel of one of the versions listed,
  type 'help <version>p<patchlevel>'. For example, 'help 1.7.2p3'
  
! 1.7.7: 0, 1, 2, 3, 4, 5, 6
! 1.7.6: 0, 1, 2, 3, 4, 5, 6
  1.7.5: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
  1.7.4: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
         19, 20
*** 1_7_7.110/game/txt/hlp/penntop.hlp Mon, 30 Dec 2002 23:35:27 -0600 dunemush (pennmush/13_penntop.hl 1.2.1.27.1.3.1.2.1.2.1.1.1.1.1.1.1.1.1.12.1.2 600)
--- 1_7_7.146(w)/game/txt/hlp/penntop.hlp Thu, 23 Jan 2003 10:24:30 -0600 dunemush (pennmush/13_penntop.hl 1.2.1.27.1.3.1.2.1.2.1.1.1.1.1.1.1.1.1.12.1.4 600)
***************
*** 1061,1067 ****
    The '+' sign in the command has to be escaped out, or it is taken as
    a regexp token. Furthermore, the pattern-match has to be anchored
    with ^ and $, or something like 'try +setnum cookies=30 now' would
!   also match. Regexps are case-sensitive; wildcard globbing is not.
   
    Regular expression syntax is explained in 'help regexp syntax'.
  & REGEXP SYNTAX
--- 1061,1067 ----
    The '+' sign in the command has to be escaped out, or it is taken as
    a regexp token. Furthermore, the pattern-match has to be anchored
    with ^ and $, or something like 'try +setnum cookies=30 now' would
!   also match. 
   
    Regular expression syntax is explained in 'help regexp syntax'.
  & REGEXP SYNTAX
***************
*** 1078,1093 ****
    of escaping to make things work right. One way to escape an argument
    like %0 is: regeditall(%0,\\W,\\$0) or similar).
  
    A regular expression is a pattern that is matched against a subject
    string from left to right. Most characters stand for themselves in a
    pattern, and match the corresponding characters in the subject. 
  
!  (Cont'd in help regexp syntax2)
! & regexp syntax2
!   There are two different sets of meta-characters: those  that
!   are  recognized anywhere in the pattern except within square
!   brackets, and those that are recognized in square  brackets.
!   Outside square brackets, the meta-characters are as follows:
  
         \      general escape character with several uses
         ^      assert start of subject
--- 1078,1099 ----
    of escaping to make things work right. One way to escape an argument
    like %0 is: regeditall(%0,\\W,\\$0) or similar).
  
+   Regular expression matching in PennMUSH can be used on user-defined
+   command or listen patterns. In this usage, regular expressions
+   are matched case-insensitively unless the attribute has the CASE flag 
+   set. Regular expressions can also be matched in MUSHcode using
+   regmatch(), regrab(), regedit, etc. function families, which usually
+   come in case-sensitive and case-insensitive versions.
+  (Cont'd in help regexp syntax2)
+ & regexp syntax2
    A regular expression is a pattern that is matched against a subject
    string from left to right. Most characters stand for themselves in a
    pattern, and match the corresponding characters in the subject. 
  
!   There are two different sets of meta-characters: those  that are
!   recognized anywhere in the pattern except within square brackets,
!   and those that are recognized in square  brackets.  Outside square
!   brackets, the meta-characters are as follows:
  
         \      general escape character with several uses
         ^      assert start of subject
***************
*** 1778,1791 ****
      * me (yourself)
      * here (the room you're in)
    Usually, you can also qualify an object with an adjective to help
!   the MUSH determine which object you mean, when there is ambiguity.
!   Adjectives include:
      * my <obj> - an object you're carrying
      * this <obj> - an object in your location (also: this here <obj>)
      * toward <exit> - an exit in your location
      * 1st, 2nd, etc. <obj> - one of a set of objects with the same names.
        Objects are ordered in the order in which they're listed in your
!       inventory, room contents, and exit list (in that order).
     You may combine some adjectives (my 1st box, this here 2nd box).
  & &HELP
  This is the AHELP index.
--- 1784,1797 ----
      * me (yourself)
      * here (the room you're in)
    Usually, you can also qualify an object with an adjective to help
!   the MUSH determine which object you mean.  Adjectives include:
      * my <obj> - an object you're carrying
      * this <obj> - an object in your location (also: this here <obj>)
      * toward <exit> - an exit in your location
      * 1st, 2nd, etc. <obj> - one of a set of objects with the same names.
        Objects are ordered in the order in which they're listed in your
!       inventory, room contents, and exit list (in that order). If there
!       aren't enough objects, this will fail.
     You may combine some adjectives (my 1st box, this here 2nd box).
  & &HELP
  This is the AHELP index.
*** 1_7_7.110/game/txt/hlp/pennfunc.hlp Mon, 30 Dec 2002 19:03:18 -0600 dunemush (pennmush/16_pennfunc.h 1.2.1.50.1.1.1.1.1.2.1.7.1.8.1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.1.1.1.1.1.1.1.1.9.1.1.1.1.1.3.1.1.1.1.1.1.1.2 600)
--- 1_7_7.146(w)/game/txt/hlp/pennfunc.hlp Thu, 09 Jan 2003 21:37:52 -0600 dunemush (pennmush/16_pennfunc.h 1.2.1.50.1.1.1.1.1.2.1.7.1.8.1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.1.1.1.1.1.1.1.1.9.1.1.1.1.1.3.1.1.1.1.1.1.1.5 600)
***************
*** 119,132 ****
  & Information functions
    Information functions return values related to objects.
   
!   andflags()    config()      
!   conn()        controls()    ctime()       doing()       elock()
!   findable()    flags()       fullname()    hasattr()     hasattrp()
!   hasflag()     haspower()    hastype()     height()      hidden()
!   idle()        iname()       lock()        lstats()      lwho()
!   money()       mtime()       mwho()        name()        nattr()
!   nearby()      objmem()      orflags()     playermem()   poll()
!   ports()       powers()      quota()       type()        visible()
    width()
  
  & Mail functions
--- 119,132 ----
  & Information functions
    Information functions return values related to objects.
   
!   andflags()    andlflags()   config()      conn()        controls()    
!   ctime()       doing()       elock()       findable()    flags()       
!   fullname()    hasattr()     hasattrp()    hasflag()     haspower()    
!   hastype()     height()      hidden()      idle()        iname()       
!   lflags()      lock()        lstats()      lwho()        money()       
!   mtime()       mwho()        name()        nattr()       nearby()      
!   objmem()      orflags()     orlflags()    playermem()   poll()        
!   ports()       powers()      quota()       type()        visible()     
    width()
  
  & Mail functions
***************
*** 353,372 ****
  
    See also: BOOLEAN VALUES, or(), xor(), not()
  & ANDFLAGS()
!   andflags(<object>,<list of flags>)
  
    This function returns 1 if <object> has all the flags in a specified
!   list, and 0 if it does not. The list is specified with a single letter
!   standing for each flag, like the output of the FLAGS() function. A '!'
!   preceding a flag letter means "not flag".
!   
    Thus, ANDFLAGS(me,WD) would return 1 if I was set WIZARD and DARK.
    ANDFLAGS(me,W!Dc) would return 1 if I was set WIZARD, not DARK,
    and CONNECTED.
!   
!   If a letter does not correspond to any flag, <object> doesn't have
!   it, so the function returns 0. There can be an arbitrary number of
!   flags. Do not put spaces between flag letters.
  & ANSI()
    ansi(<codes>,<string>)
   
--- 353,385 ----
  
    See also: BOOLEAN VALUES, or(), xor(), not()
  & ANDFLAGS()
!   andflags(<object>,<string of flag letters>)
  
    This function returns 1 if <object> has all the flags in a specified
!   string, and 0 if it does not. The string is specified with a single
!   letter standing for each flag, like the output of the FLAGS()
!   function. A '!'  preceding a flag letter means "not flag".
! 
    Thus, ANDFLAGS(me,WD) would return 1 if I was set WIZARD and DARK.
    ANDFLAGS(me,W!Dc) would return 1 if I was set WIZARD, not DARK,
    and CONNECTED.
! 
!   If a letter does not correspond to any flag, <object> doesn't have it,
!   so the function returns 0. There can be an arbitrary number of flags. Do
!   not put spaces between flag letters.
! & ANDLFLAGS()
!   andlflags(<object>,<list of flags>)
! 
!   This function returns 1 if <object> has all the flags in a specified
!   list, and 0 if it does not. The list is a space-separated list of
!   flag names.  A '!' preceding a flag name means "not flag".
! 
!   Thus, ANDLFLAGS(me,wizard dark) would return 1 if I was set WIZARD
!   and DARK.  ANDFLAGS(me,wizard !Dark connected) would return 1 if I
!   was set WIZARD, not DARK, and CONNECTED.
! 
!   If a name does not correspond to any flag, <object> doesn't have it,
!   so the function returns 0. There can be an arbitrary number of flags.
  & ANSI()
    ansi(<codes>,<string>)
   
***************
*** 1118,1127 ****
--- 1131,1160 ----
  & FLAGS()
    flags(<object>)
    flags(<object>/<attribute>)
+   flags()
  
    Flags returns a string consisting of the flags attached to the 
    object or the attribute on the object. The string is a single word
    made up of all the appropriate flag letters.
+ 
+   Given no arguments, this function returns a string consisting of
+   all the flag letters of all the flags the server knows. Note that
+   some flags may not have flag letters, and multiple flags may have
+   the same letter (and will appear twice).
+ 
+   See also: lflags()
+ & LFLAGS()
+   lflags(<object>)
+   lflags(<object>/<attribute>)
+   lflags()
+ 
+   Lflags returns a space-separated list consisting of the names of flags
+   attached to the object or the attribute on the object.
+ 
+   Given no arguments, this function returns a space-separated list
+   of all flag names know to the server.
+ 
+   See also: flags()
  & FLIP()
  & REVERSE()
    flip(<string>)
***************
*** 1364,1369 ****
--- 1397,1403 ----
    If an attribute is given, checks to see if the attribute has the 
    given attribute flag. See help @set2 for attribute flag names.
  
+   See also: orlflags(), andlflags(), orflags(), andflags()
  & HASPOWER()
    haspower(<object>, <power name>)
   
***************
*** 2425,2443 ****
  
    See also: BOOLEAN VALUES, and()
  & ORFLAGS()
!   orflags(<object>,<list of flags>)
    
    This function returns 1 if <object> has at least one of the flags in
!   a specified list, and 0 if it does not. The list is specified with a
!   single letter standing for each flag, like the output of the FLAGS()
    function. A '!' preceding a flag letter means "not flag".
!   
    Thus, ORFLAGS(me,Wr) would return 1 if I am set WIZARD or ROYALTY.
    ORFLAGS(me,D!c) would return 1 if I am DARK or not CONNECTED.
!   
!   If a letter does not correspond to any flag, <object> doesn't have
!   it, so it is simply ignored. There can be an arbitrary number of
!   flags. Do not put spaces between flag letters.
  & OWNER()
    owner(<object>[/<attribute>])
   
--- 2459,2490 ----
  
    See also: BOOLEAN VALUES, and()
  & ORFLAGS()
!   orflags(<object>,<string of flag characters>)
    
    This function returns 1 if <object> has at least one of the flags in
!   a specified string, and 0 if it does not. The string is specified with
!   a single letter standing for each flag, like the output of the FLAGS()
    function. A '!' preceding a flag letter means "not flag".
! 
    Thus, ORFLAGS(me,Wr) would return 1 if I am set WIZARD or ROYALTY.
    ORFLAGS(me,D!c) would return 1 if I am DARK or not CONNECTED.
! 
!   If a letter does not correspond to any flag, <object> doesn't have it,
!   so it is simply ignored. There can be an arbitrary number of flags. Do
!   not put spaces between flag letters.
! & ORLFLAGS()
!   orlflags(<object>,<list of flag names>)
! 
!   This function returns 1 if <object> has at least one of the flags in
!   a specified list, and 0 if it does not. The list is a space-separated 
!   list of flag names.  A '!' preceding a flag name means "not flag".
! 
!   Thus, ORLFLAGS(me,wizard royalty) would return 1 if I am set 
!   WIZARD or ROYALTY.  ORLFLAGS(me,dark !connected)  would return 1 if I am 
!   DARK or not CONNECTED.
! 
!   If a name does not correspond to any flag, <object> doesn't have it,
!   so it is simply ignored. There can be an arbitrary number of flags.
  & OWNER()
    owner(<object>[/<attribute>])
   
*** 1_7_7.110/game/txt/hlp/pennflag.hlp Sun, 22 Dec 2002 00:51:08 -0600 dunemush (pennmush/17_pennflag.h 1.1.1.1.1.2.1.1.1.2.1.1.1.2.1.1.2.1.2.1.1.1.1.2.1.4.1.2 600)
--- 1_7_7.146(w)/game/txt/hlp/pennflag.hlp Wed, 08 Jan 2003 16:41:25 -0600 dunemush (pennmush/17_pennflag.h 1.1.1.1.1.2.1.1.1.2.1.1.1.2.1.1.2.1.2.1.1.1.1.2.1.4.1.2.1.1 600)
***************
*** 12,18 ****
    To un-set a flag, use the exclamation point (!) before the flag
    name. For help on any particular flag, type: help <flag name>
  
!   The list of flags is available in: help flag list
  
  (continued in help flags2)
  & FLAGS2
--- 12,19 ----
    To un-set a flag, use the exclamation point (!) before the flag
    name. For help on any particular flag, type: help <flag name>
  
!   A descriptive list of flags is available in: help flag list
!   A complete list of flags is available through: @flag/list
  
  (continued in help flags2)
  & FLAGS2
***************
*** 31,38 ****
    indicate the TYPE of an object. The absence of these four special flags
    indicates the object is of type THING.
  
!   See also: examine, flags(), hasflag(), orflags(), andflags()
!           types of objects, type(), hastype()
  & FLAG LIST
  & FLAGS LIST
  Flag  Title           Flag  Title              Flag  Title
--- 32,39 ----
    indicate the TYPE of an object. The absence of these four special flags
    indicates the object is of type THING.
  
!   See also: examine, flags(), hasflag(), orflags(), andflags(),
!   orlflags(), andlflags(), types of objects, type(), hastype(), @flag
  & FLAG LIST
  & FLAGS LIST
  Flag  Title           Flag  Title              Flag  Title
***************
*** 55,61 ****
    w - No_Warn           x - Terse               ? - Unregistered
    ^ - Listen_Parent     ~ - Noaccents
  ---------------------------------------------------------------------
! Some flags may not be enabled on some MUSHes.
  
  & ABODE
   Flag:  ABODE  (rooms)
--- 56,63 ----
    w - No_Warn           x - Terse               ? - Unregistered
    ^ - Listen_Parent     ~ - Noaccents
  ---------------------------------------------------------------------
! Some flags may not be enabled on some MUSHes. @flag/list will show
! which are available.
  
  & ABODE
   Flag:  ABODE  (rooms)
*** 1_7_7.110/game/txt/hlp/penncmd.hlp Thu, 02 Jan 2003 23:55:40 -0600 dunemush (pennmush/18_penncmd.hl 1.2.1.1.1.47.1.1.1.1.1.3.1.4.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.10.1.1.1.1.1.4 600)
--- 1_7_7.146(w)/game/txt/hlp/penncmd.hlp Thu, 23 Jan 2003 10:17:00 -0600 dunemush (pennmush/18_penncmd.hl 1.2.1.1.1.47.1.1.1.1.1.3.1.4.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.10.1.1.1.1.1.4.1.3 600)
***************
*** 57,78 ****
    @find          @force         @function      @gedit         @grep
    @halt          @lemit         @listmotd      @mail          @map
    @notify        @nspemit       @oemit         @password      @pemit
!   @ps            @remit         @restart       @rwall         @rwallemit
!   @rwallpose     @scan          @search        @select        @stats
!   @sweep         @switch        @teleport      @trigger       @verb
!   @version       @wait          @whereis       @zemit
  
  & @-WIZARD
  These '@' commands are only usable by wizards or privileged players:
   
    @allhalt       @allquota      @boot          @chownall      @chzoneall
    @comment       @dbck          @disable       @dump          @enable
!   @hide          @hook          @kick          @log           @motd
!   @newpassword   @pcreate       @poll          @poor          @power
!   @purge         @quota         @readcache     @rejectmotd    @shutdown
!   @sitelock      @squota        @uptime        @wall
!   @wallemit      @wallpose      @wizemit       @wizmotd       @wizpose
!   @wizwall       cd             ch             cv
   
  & @@
   
--- 57,77 ----
    @find          @force         @function      @gedit         @grep
    @halt          @lemit         @listmotd      @mail          @map
    @notify        @nspemit       @oemit         @password      @pemit
!   @ps            @remit         @restart       @scan          @search
!   @select        @stats         @sweep         @switch        @teleport
!   @trigger       @verb          @version       @wait          @whereis
!   @zemit
  
  & @-WIZARD
  These '@' commands are only usable by wizards or privileged players:
   
    @allhalt       @allquota      @boot          @chownall      @chzoneall
    @comment       @dbck          @disable       @dump          @enable
!   @flag          @hide          @hook          @kick          @log           
!   @motd          @newpassword   @pcreate       @poll          @poor          
!   @power         @purge         @quota         @readcache     @rejectmotd    
!   @shutdown      @sitelock      @squota        @uptime        @wall
!   @wizmotd       @wizwall       cd             ch             cv
   
  & @@
   
***************
*** 560,565 ****
--- 559,565 ----
    @config/functions
    @config/commands
    @config/attribs
+   @config/flags
    @config/list[/lowercase] [<option|option-type>]
    @config/set option=value
    
***************
*** 569,574 ****
--- 569,575 ----
  
    /functions  --   Lists all functions.
    /commands   --   Lists all commands.
+   /flags      --   Lists all flags.
    /attribs    --   Lists all standard attributes.
    /list       --   Lists the value of a particular <option> or <option-type>
                     if given one; lists the option-types if not.
***************
*** 1252,1257 ****
--- 1253,1324 ----
    > Lackey pages: Whee
  
  See also: PUPPET, DBREF 
+ & @flag
+   @flag <flag name>
+   @flag/list [<flag name pattern>]
+   @flag/add <flag name>=[<letter>], [<type(s)>], [<setperms>], [<unsetperms>]
+   @flag/delete <flag name>
+   @flag/alias <flag name>=<alias>
+   @flag/restrict <flag name>=[<setperms>], [<unsetperms>]
+   @flag/enable <flag name>
+   @flag/disable <flagname>
+ 
+   This command manipulates the list of flags in the database.
+   When given a flag name as an argument, the command displays information
+   about the flag, including aliases and permissions. @flag/list
+   lists names of enabled flags, and may be given a wildcarded pattern
+   to restrict which names it will show.
+ 
+   All other switches to this command are restricted to God:
+     /disable disables a flag, making it invisible and unusable
+     /enable re-enables a disabled flag
+     /alias adds a new alias for an existing flag
+     /restrict changes flag permissions (see help @flag2)
+     /delete deletes a flag completely, removing it from all objects
+       in the database and the removing it permanently from the 
+       flag table. It requires the exact flag name or alias to be used.
+       Be very very careful with this. 
+ 
+   See also: help flags. See help @flag2 for information on @flag/add
+ & @flag2
+   @flag/add is used to add a new flag with the given name. Arguments
+   other than the flag name are optional:
+ 
+   <letter> gives the flag's one-letter abbreviation, which must
+     not conflict with the one-letter abbreviation of another flag that
+     could be applied to the same object type(s). It defaults to none, which 
+     means it won't appear in a list of flag characters but can still be 
+     tested for with hasflag(), andlflags(), and orlflags(). 
+   <type> specifies the space-separated list of types to which the flag
+     applies, and may be 'any' or one or more of 'room', 'thing', 'player',
+     or 'exit'. It defaults to 'any'.
+   <setperms> specifies the space-separated list of permissions for who can
+     set and/or see the flag. See 'help flag permissions' for details.
+     It defaults to 'any'
+   <unsetperms> specifies the space-separated list of permissions for who
+     can clear the flag on an object they control. It defaults to 
+     whatever <setperms> is given, or 'any'.
+ 
+   Flags added with @flag/add are saved with the database when it
+   is dumped, and do not need to be re-added at startup. They are
+   treated exactly as any other flag in the server.
+ & flag permissions
+   The following permissions can be used when specifying whether
+   <actor> may set or clear a flag on an <object> they control:
+ 
+    trusted     <actor> must pass a TRUST check (see help TRUST)
+    royalty     <actor> must be ROYALTY or WIZARD
+    wizard      <actor> must be WIZARD
+    god         <actor> must be God (#1)
+ 
+   The following permissions can be used to specify whether <looker>
+   can see the flag on an <object>, and are given along with the
+   <setperms> in @flag/add. By default, anyone can see the flag:
+ 
+    dark        <actor> must be Only God (#1) to see the flag on objects.
+    mdark       <actor> must be WIZARD or ROYALTY 
+    odark       <actor> must own the <object> (or be WIZARD or ROYALTY)
+ 
  & @function
    @function [<function name>]
    @function <function name>=<object>,<attribute>[,<min args>, <max args>]
***************
*** 2494,2512 ****
  
  See also: @charges, use, ACTION LISTS
  & @rwall
!   @rwall <message>
  
!   Only wizards and royalty may use this command. It broadcasts a message to
!   all connected wizards and royals, prefixed with "Admin:". If the first
!   character is : or ; it does the same thing as @rwallpose.
! & @rwallemit
!   @rwallemit <message>
!   Only wizards and royalty may use this command. It is similar to @wizemit,
!   but broadcasts the message to all connected wizards and royals.
! & @rwallpose
!   @rwallpose <pose>
!   Only wizards and royalty may use this command. It's a variant of @rwall,
!   using a pose, and is identical to "@rwall :<pose>"
  & @scan
    @scan[/<switch>] <command>
    
--- 2561,2574 ----
  
  See also: @charges, use, ACTION LISTS
  & @rwall
!   @rwall[/emit] <message>
! 
!   Only wizards and royalty may use this command. It broadcasts a
!   message to all connected wizards and royals. If the /emit switch
!   is given, it's done as a prefixed emit. Otherwise, it acts like
!   a @channel.
  
! See also: @wall, @wizwall
  & @scan
    @scan[/<switch>] <command>
    
***************
*** 3067,3085 ****
    You cannot do a non-timed semaphore on an attribute with a numeric name,
    as that is taken as a timeout instead.
  & @wall
! & @wallemit
! & @wallpose
!   @wall [/<switch>] <message>
!   @wallemit <message>
!   @wallpose <pose>
  
    Only wizards can use this command, which allows the player to shout
!   a message to every player connected. It must be typed in full.
!   It can also take the following switches:
!   /wizard  : broadcast to wizards (like @wizwall)
!   /royalty : broadcast to wizards and royalty (like @rwall)
!   /pose    : pose a message to all (or use @wallpose)
!   /emit    : emit a message to all (or use @wallemit)
  
    You can also use @wall :<pose> to @wallpose.
  
--- 3129,3141 ----
    You cannot do a non-timed semaphore on an attribute with a numeric name,
    as that is taken as a timeout instead.
  & @wall
!   @wall[/<switch>] <message>
  
    Only wizards can use this command, which allows the player to shout
!   or pose a message to every player connected. It must be typed in full.
!   It can also take the following switches
!   /emit    : emit a prefixed message to all.
!   /noeval  : Don't evaluate the message.
  
    You can also use @wall :<pose> to @wallpose.
  
***************
*** 3174,3193 ****
    exceptions as given above. If <pattern> is given, it gets rid of
    all attributes which match that pattern. Note that the restrictions
    above still apply.
- & @wizemit
  & @wizwall
! & @wizpose
!   @wizwall <message>
!   @wizemit <message>
!   @wizpose <message>
  
    This wiz-only command works similarly to @rwall or @wall, sending
    a message in either say, pose, or emit format to all wizards who
    are currently logged in. 
  
-   @wizwall :<pose> or @wizwall ;<pose> will also send the message in
-   pose format.
- 
  See also: @wall, @rwall
  & @wizmotd
    @wizmotd <message>
--- 3230,3242 ----
    exceptions as given above. If <pattern> is given, it gets rid of
    all attributes which match that pattern. Note that the restrictions
    above still apply.
  & @wizwall
!   @wizwall[/emit] <message>
  
    This wiz-only command works similarly to @rwall or @wall, sending
    a message in either say, pose, or emit format to all wizards who
    are currently logged in. 
  
  See also: @wall, @rwall
  & @wizmotd
    @wizmotd <message>
*** 1_7_7.110/game/txt/hlp/index.hlp Sat, 07 Dec 2002 10:34:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.1 660)
--- 1_7_7.146(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.6 660)
***************
*** 74,263 ****
   1.7.5p5                   1.7.5p6                   1.7.5p7                  
   1.7.5p8                   1.7.5p9                   1.7.5p10                 
   1.7.5p11                  1.7.5p12                  1.7.6p0                  
!  1.7.6p1                   1.7.7p0                   :                        
!  ;                         @-attributes              @-building               
!  @-general                 @-wizard                  @@                       
!  @@()                      @aahear                   @aclone                  
!  @aconnect                 @adeath                   @adescribe               
!  @adestroy                 @adisconnect              @adrop                   
  
  For more, see Entries-5
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-5
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  @aefail                   @aenter                   @afailure                
!  @afollow                  @agive                    @ahear                   
!  @aidescribe               @aleave                   @alfail                  
!  @alias                    @allhalt                  @allquota                
!  @amhear                   @amove                    @apayment                
!  @areceive                 @asuccess                 @atport                  
!  @atrchown                 @atrlock                  @attribute               
!  @aufail                   @aunfollow                @ause                    
!  @away                     @azenter                  @azleave                 
!  @boot                     @break                    @cemit                   
!  @channel                  @channel2                 @channel3                
!  @channel4                 @channel5                 @charges                 
!  @chat                     @chown                    @chownall                
!  @chzone                   @chzone2                  @chzoneall               
!  @clock                    @clock2                   @clone                   
!  @command                  @comment                  @config                  
  
  For more, see Entries-6
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-6
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  @config attribs           @config chat              @config cmds             
!  @config cosmetic          @config cosmetic2         @config costs            
!  @config db                @config dump              @config funcs            
!  @config limits            @config limits2           @config log              
!  @config net               @config parameters        @config tiny             
!  @conformat                @cost                     @cpattr                  
!  @create                   @dbck                     @death                   
!  @decompile                @decompile2               @decompile3              
!  @descformat               @describe                 @destroy                 
!  @destroy2                 @dig                      @dig2                    
!  @disable                  @doing                    @dolist                  
!  @drain                    @drop                     @dump                    
!  @ealias                   @edit                     @efail                   
!  @elock                    @emit                     @enable                  
!  @enter                    @entrances                @eunlock                 
!  @exitformat               @failure                  @filter                  
  
  For more, see Entries-7
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-7
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  @filter2                  @find                     @firstexit               
!  @follow                   @force                    @force2                  
!  @forwardlist              @function                 @function2               
!  @function3                @function4                @gedit                   
!  @give                     @grep2                    @grep                    
!  @halt                     @haven                    @hide                    
!  @hook                     @hook2                    @idescribe               
!  @idle                     @infilter                 @inprefix                
!  @kick                     @lalias                   @leave                   
!  @lemit                    @lfail                    @link                    
!  @list                     @listen                   @listen2                 
!  @listmotd                 @lock                     @lock2                   
!  @lock3                    @lock4                    @lock5                   
!  @lock6                    @lock7                    @lock8                   
!  @lock9                    @log                      @logwipe                 
!  @lset                     @map2                     @mail                    
  
  For more, see Entries-8
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-8
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  @malias                   @malias2                  @malias3                 
!  @malias4                  @malias5                  @map                     
!  @motd                     @move                     @mvattr                  
!  @name                     @nameaccent               @nameformat              
!  @newpassword              @notify                   @nspemit                 
!  @nuke                     @odeath                   @odescribe               
!  @odrop                    @oefail                   @oemit                   
!  @oenter                   @ofailure                 @ofollow                 
!  @ogive                    @oidescribe               @oleave                  
!  @olfail                   @omove                    @opayment                
!  @open                     @oreceive                 @osuccess                
!  @otport                   @oufail                   @ounfollow               
!  @ouse                     @oxenter                  @oxleave                 
!  @oxmove                   @oxtport                  @ozenter                 
!  @ozleave                  @parent                   @password                
!  @payment                  @pcreate                  @pemit                   
  
  For more, see Entries-9
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-9
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  @pemit2                   @poll                     @poor                    
!  @power                    @prefix                   @ps                      
!  @purge                    @quota                    @readcache               
!  @receive                  @recycle                  @rejectmotd              
!  @remit                    @restart                  @runout                  
!  @rwall                    @rwallemit                @rwallpose               
!  @scan                     @search                   @search2                 
!  @search3                  @select                   @set                     
!  @sex                      @shutdown                 @sitelock                
!  @sitelock2                @sitelock3                @squota                  
!  @startup                  @stats                    @success                 
!  @sweep                    @switch                   @switch2                 
!  @teleport                 @tport                    @trigger                 
!  @trigger2                 @ufail                    @ulock                   
!  @undestroy                @unfollow                 @unlink                  
!  @unlock                   @unrecycle                @uptime                  
  
  For more, see Entries-10
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-10
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  @uptime2                  @use                      @uunlock                 
!  @verb                     @verb2                    @verb3                   
!  @verb4                    @version                  @vrml_url                
!  @wait                     @wait2                    @wall                    
!  @wallemit                 @wallpose                 @warnings                
   @warnings2                @warnings3                @wcheck                  
!  @whereis                  @wipe                     @wizemit                 
!  @wizmotd                  @wizpose                  @wizwall                 
!  @zemit                    @zenter                   @zleave                  
!  \                         ^                         abode                    
!  abs()                     accent()                  accent2                  
!  accent3                   accent4                   acos()                   
!  action lists              action2                   add()                    
!  after()                   ahelp                     alphamax()               
!  alphamin()                and()                     andflags()               
!  anews                     ansi                      ansi()                   
  
  For more, see Entries-11
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-11
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  aposs()                   art()                     asin()                   
!  atan()                    atan2()                   atrlock()                
!  attrcnt()                 attrib-ownership          attribute flags          
!  attribute functions       attribute list            attributes               
!  attributes list           attributes2               attributes3              
!  attributes4               audible                   audible2                 
!  band()                    beep()                    before()                 
!  being killed              bitwise functions         bnand()                  
!  bnot()                    boolean functions         boolean values           
!  boolean2                  boolean3                  bor()                    
!  bound()                   brackets()                brief                    
!  builder                   bxor()                    cand()                   
!  capstr()                  case()                    caseall()                
!  cat()                     cd                        ceil()                   
!  cemit()                   center()                  cflags()                 
!  ch                        changes                   channel functions        
  
  For more, see Entries-12
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-12
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  channel-list              channels()                chat                     
!  checkpass()               chown_ok                  chr()                    
!  clients                   clock()                   clone()                  
!  cloudy                    code                      color                    
!  commands                  communication functions   comp()                   
!  comsys                    con()                     config()                 
!  conn()                    connected                 control                  
!  controls()                convsecs()                convtime()               
!  convutcsecs()             copyright                 copyrite                 
!  cor()                     cos()                     costs                    
!  create()                  credits                   ctime()                  
!  ctitle()                  ctu()                     cv                       
!  cwho()                    dark                      dark2                    
!  database                  dbref #                   dbref functions          
!  dbref number              dbref2                    dbrefs                   
!  debug                     debug2                    dec()                    
  
  For more, see Entries-13
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-13
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  decrypt()                 default()                 delete()                 
!  desert                    destroy_ok                die()                    
!  dig()                     dismiss                   dist2d()                 
!  dist3d()                  div()                     doing                    
!  doing()                   drop                      drop-tos                 
   e()                       edefault()                edit()                   
   element()                 elements()                elist()                  
   elock()                   emit()                    enactor                  
--- 74,266 ----
   1.7.5p5                   1.7.5p6                   1.7.5p7                  
   1.7.5p8                   1.7.5p9                   1.7.5p10                 
   1.7.5p11                  1.7.5p12                  1.7.6p0                  
!  1.7.6p1                   1.7.6p2                   1.7.6p3                  
!  1.7.6p4                   1.7.6p5                   1.7.6p6                  
!  1.7.7p0                   1.7.7p1                   1.7.7p2                  
!  1.7.7p3                   1.7.7p4                   1.7.7p5                  
!  1.7.7p6                   :                         ;                        
!  @-attributes              @-building                @-general                
  
  For more, see Entries-5
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-5
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  @-wizard                  @@                        @@()                     
!  @aahear                   @aclone                   @aconnect                
!  @adeath                   @adescribe                @adestroy                
!  @adisconnect              @adrop                    @aefail                  
!  @aenter                   @afailure                 @afollow                 
!  @agive                    @ahear                    @aidescribe              
!  @aleave                   @alfail                   @alias                   
!  @allhalt                  @allquota                 @amhear                  
!  @amove                    @apayment                 @areceive                
!  @asuccess                 @atport                   @atrchown                
!  @atrlock                  @attribute                @aufail                  
!  @aunfollow                @ause                     @away                    
!  @azenter                  @azleave                  @boot                    
!  @break                    @cemit                    @channel                 
!  @channel2                 @channel3                 @channel4                
!  @channel5                 @charges                  @chat                    
  
  For more, see Entries-6
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-6
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  @chown                    @chownall                 @chzone                  
!  @chzone2                  @chzoneall                @clock                   
!  @clock2                   @clone                    @command                 
!  @comment                  @config                   @config attribs          
!  @config chat              @config cmds              @config cosmetic         
!  @config cosmetic2         @config costs             @config db               
!  @config dump              @config funcs             @config limits           
!  @config limits2           @config log               @config net              
!  @config parameters        @config tiny              @conformat               
!  @cost                     @cpattr                   @create                  
!  @dbck                     @death                    @decompile               
!  @decompile2               @decompile3               @descformat              
!  @describe                 @destroy                  @destroy2                
!  @dig                      @dig2                     @disable                 
!  @doing                    @dolist                   @drain                   
!  @drop                     @dump                     @ealias                  
  
  For more, see Entries-7
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-7
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  @edit                     @efail                    @elock                   
!  @emit                     @enable                   @enter                   
!  @entrances                @eunlock                  @exitformat              
!  @failure                  @filter                   @filter2                 
!  @find                     @firstexit                @flag                    
!  @flag2                    @follow                   @force                   
!  @force2                   @forwardlist              @function                
!  @function2                @function3                @function4               
!  @gedit                    @give                     @grep2                   
!  @grep                     @halt                     @haven                   
!  @hide                     @hook                     @hook2                   
!  @idescribe                @idle                     @infilter                
!  @inprefix                 @kick                     @lalias                  
!  @leave                    @lemit                    @lfail                   
!  @link                     @list                     @listen                  
!  @listen2                  @listmotd                 @lock                    
  
  For more, see Entries-8
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-8
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  @lock2                    @lock3                    @lock4                   
!  @lock5                    @lock6                    @lock7                   
!  @lock8                    @lock9                    @log                     
!  @logwipe                  @lset                     @map2                    
!  @mail                     @malias                   @malias2                 
!  @malias3                  @malias4                  @malias5                 
!  @map                      @motd                     @move                    
!  @mvattr                   @name                     @nameaccent              
!  @nameformat               @newpassword              @notify                  
!  @nspemit                  @nuke                     @odeath                  
!  @odescribe                @odrop                    @oefail                  
!  @oemit                    @oenter                   @ofailure                
!  @ofollow                  @ogive                    @oidescribe              
!  @oleave                   @olfail                   @omove                   
!  @opayment                 @open                     @oreceive                
!  @osuccess                 @otport                   @oufail                  
  
  For more, see Entries-9
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-9
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  @ounfollow                @ouse                     @oxenter                 
!  @oxleave                  @oxmove                   @oxtport                 
!  @ozenter                  @ozleave                  @parent                  
!  @password                 @payment                  @pcreate                 
!  @pemit                    @pemit2                   @poll                    
!  @poor                     @power                    @prefix                  
!  @ps                       @purge                    @quota                   
!  @readcache                @receive                  @recycle                 
!  @rejectmotd               @remit                    @restart                 
!  @runout                   @rwall                    @scan                    
!  @search                   @search2                  @search3                 
!  @select                   @set                      @sex                     
!  @shutdown                 @sitelock                 @sitelock2               
!  @sitelock3                @squota                   @startup                 
!  @stats                    @success                  @sweep                   
!  @switch                   @switch2                  @teleport                
  
  For more, see Entries-10
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-10
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  @tport                    @trigger                  @trigger2                
!  @ufail                    @ulock                    @undestroy               
!  @unfollow                 @unlink                   @unlock                  
!  @unrecycle                @uptime                   @uptime2                 
!  @use                      @uunlock                  @verb                    
!  @verb2                    @verb3                    @verb4                   
!  @version                  @vrml_url                 @wait                    
!  @wait2                    @wall                     @warnings                
   @warnings2                @warnings3                @wcheck                  
!  @whereis                  @wipe                     @wizmotd                 
!  @wizwall                  @zemit                    @zenter                  
!  @zleave                   \                         ^                        
!  abode                     abs()                     accent()                 
!  accent2                   accent3                   accent4                  
!  acos()                    action lists              action2                  
!  add()                     after()                   ahelp                    
  
  For more, see Entries-11
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-11
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  alphamax()                alphamin()                and()                    
!  andflags()                andlflags()               anews                    
!  ansi                      ansi()                    aposs()                  
!  art()                     asin()                    atan()                   
!  atan2()                   atrlock()                 attrcnt()                
!  attrib-ownership          attribute flags           attribute functions      
!  attribute list            attributes                attributes list          
!  attributes2               attributes3               attributes4              
!  audible                   audible2                  band()                   
!  beep()                    before()                  being killed             
!  bitwise functions         bnand()                   bnot()                   
!  boolean functions         boolean values            boolean2                 
!  boolean3                  bor()                     bound()                  
!  brackets()                brief                     builder                  
!  bxor()                    cand()                    capstr()                 
!  case()                    caseall()                 cat()                    
  
  For more, see Entries-12
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-12
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  cd                        ceil()                    cemit()                  
!  center()                  cflags()                  ch                       
!  changes                   channel functions         channel-list             
!  channels()                chat                      checkpass()              
!  chown_ok                  chr()                     clients                  
!  clock()                   clone()                   cloudy                   
!  code                      color                     commands                 
!  communication functions   comp()                    comsys                   
!  con()                     config()                  conn()                   
!  connected                 control                   controls()               
!  convsecs()                convtime()                convutcsecs()            
!  copyright                 copyrite                  cor()                    
!  cos()                     costs                     create()                 
!  credits                   ctime()                   ctitle()                 
!  ctu()                     cv                        cwho()                   
!  dark                      dark2                     database                 
  
  For more, see Entries-13
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-13
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  dbref #                   dbref functions           dbref number             
!  dbref2                    dbrefs                    debug                    
!  debug2                    dec()                     decrypt()                
!  default()                 delete()                  desert                   
!  destroy_ok                die()                     dig()                    
!  dismiss                   dist2d()                  dist3d()                 
!  div()                     doing                     doing()                  
!  drop                      drop-tos                  dynhelp()                
   e()                       edefault()                edit()                   
   element()                 elements()                elist()                  
   elock()                   emit()                    enactor                  
***************
*** 266,283 ****
   escape()                  etimefmt()                etimefmt2                
   eval()                    evaluation order          evaluation2              
   events                    examine                   executor                 
-  exit()                    exits                     exits2                   
-  exp()                     extract()                 failure                  
-  fdiv()                    filter()                  filterbool()             
  
  For more, see Entries-14
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-14
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
   findable()                first()                   fixed                    
!  flag list                 flags                     flags list               
!  flags()                   flags2                    flip()                   
!  floating                  floating point functions  floor()                  
   floordiv()                fmod()                    fold()                   
   fold2                     folderstats()             follow                   
   followers()               following()               foreach()                
--- 269,286 ----
   escape()                  etimefmt()                etimefmt2                
   eval()                    evaluation order          evaluation2              
   events                    examine                   executor                 
  
  For more, see Entries-14
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-14
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+  exit()                    exits                     exits2                   
+  exp()                     extract()                 failure                  
+  fdiv()                    filter()                  filterbool()             
   findable()                first()                   fixed                    
!  flag list                 flag permissions          flags                    
!  flags list                flags()                   flags2                   
!  flip()                    floating                  floor()                  
   floordiv()                fmod()                    fold()                   
   fold2                     folderstats()             follow                   
   followers()               following()               foreach()                
***************
*** 287,300 ****
   get()                     get_eval()                give                     
   global commands           globals                   go                       
   going                     goto                      grab()                   
-  graball()                 grep()                    grepi()                  
-  gt()                      gte()                     halt                     
-  hasattr()                 hasattrp()                hasattrpval()            
  
  For more, see Entries-15
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-15
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
   hasattrval()              hasflag()                 haspower()               
   hastype()                 haven                     height()                 
   here                      hidden()                  home                     
--- 290,303 ----
   get()                     get_eval()                give                     
   global commands           globals                   go                       
   going                     goto                      grab()                   
  
  For more, see Entries-15
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-15
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+  graball()                 grep()                    grepi()                  
+  gt()                      gte()                     halt                     
+  hasattr()                 hasattrp()                hasattrpval()            
   hasattrval()              hasflag()                 haspower()               
   hastype()                 haven                     height()                 
   here                      hidden()                  home                     
***************
*** 308,385 ****
   interiors2                internationalization      inum()                   
   inventory                 isdaylight()              isdbref()                
   isint()                   isnum()                   isword()                 
-  itemize()                 items()                   iter()                   
-  iter2                     itext()                   judge                    
-  jump_ok                   jury_ok                   kill                     
  
  For more, see Entries-16
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-16
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
   last & lastlogout         last()                    lastip                   
   lastsite                  lattr()                   lcon()                   
   lcstr()                   ldelete()                 leave                    
   left()                    lemit()                   lexits()                 
!  license                   light                     link()                   
!  link_ok                   linking                   list functions           
!  list()                    listen_parent             listening                
!  listening2                listening3                lists                    
!  lit()                     ljust()                   lmath()                  
!  ln()                      lnum()                    loc()                    
!  locale                    localize()                locate()                 
!  locate2                   lock list                 lock types               
!  lock types2               lock()                    locking                  
!  locklist                  locks                     locktypes                
!  locktypes2                log()                     logout                   
!  look                      look2                     looping                  
  
  For more, see Entries-17
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-17
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  lparent()                 lplayers()                lsearch()                
!  lsearch2                  lsearchr()                lstats()                 
!  lt()                      lte()                     lvcon()                  
!  lvexits()                 lvplayers()               lwho()                   
!  macros                    macros2                   mail                     
!  mail functions            mail()                    mail-admin               
!  mail-folders              mail-other                mail-reading             
!  mail-sending              maildstats()              mailfrom()               
!  mailfstats()              mailstats()               mailstatus()             
!  mailsubject()             mailtime()                map()                    
!  master room               match()                   matchall()               
!  matching                  math functions            max()                    
!  me                        mean()                    median()                 
!  member()                  merge()                   mid()                    
!  min()                     mix()                     mix2                     
!  mod()                     modulo()                  modulus()                
  
  For more, see Entries-18
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-18
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  money                     money()                   monitor                  
!  mortal                    move                      mtime()                  
!  mudname()                 mul()                     munge()                  
!  munge2                    munge3                    mushcode                 
!  mushcode2                 mwho()                    myopic                   
!  name()                    nand()                    nattr()                  
!  nearby()                  neq()                     new locks                
!  newbie                    newbie2                   newbie3                  
!  news                      next()                    no_command               
!  no_leave                  no_tel                    no_warn                  
!  noaccents                 noleave                   non-standard attributes  
!  nor()                     nospoof                   not()                    
!  nowarn                    nspemit()                 null()                   
!  num()                     obj()                     object parents           
!  objeval()                 objmem()                  oemit()                  
!  on-vacation               opaque                    open()                   
  
  For more, see Entries-19
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-19
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  or()                      ord()                     orflags()                
   owner()                   page                      page2                    
   paranoid                  parent                    parent()                 
   parents                   parents2                  parents3                 
--- 311,389 ----
   interiors2                internationalization      inum()                   
   inventory                 isdaylight()              isdbref()                
   isint()                   isnum()                   isword()                 
  
  For more, see Entries-16
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-16
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+  itemize()                 items()                   iter()                   
+  iter2                     itext()                   judge                    
+  jump_ok                   jury_ok                   kill                     
   last & lastlogout         last()                    lastip                   
   lastsite                  lattr()                   lcon()                   
   lcstr()                   ldelete()                 leave                    
   left()                    lemit()                   lexits()                 
!  lflags()                  license                   light                    
!  link()                    link_ok                   linking                  
!  list functions            list()                    listen_parent            
!  listening                 listening2                listening3               
!  lists                     lit()                     ljust()                  
!  lmath()                   ln()                      lnum()                   
!  loc()                     locale                    localize()               
!  locate()                  locate2                   lock list                
!  lock types                lock types2               lock()                   
  
  For more, see Entries-17
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-17
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  locking                   locklist                  locks                    
!  locktypes                 locktypes2                log()                    
!  logout                    look                      look2                    
!  looping                   lparent()                 lplayers()               
!  lpos()                    lsearch()                 lsearch2                 
!  lsearchr()                lstats()                  lt()                     
!  lte()                     lvcon()                   lvexits()                
!  lvplayers()               lwho()                    macros                   
!  macros2                   mail                      mail functions           
!  mail()                    mail-admin                mail-folders             
!  mail-other                mail-reading              mail-sending             
!  maildstats()              mailfrom()                mailfstats()             
!  mailstats()               mailstatus()              mailsubject()            
!  mailtime()                map()                     master room              
!  match()                   matchall()                matching                 
!  math functions            max()                     me                       
  
  For more, see Entries-18
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-18
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  mean()                    median()                  member()                 
!  merge()                   mid()                     min()                    
!  mix()                     mix2                      mod()                    
!  modulo()                  modulus()                 money                    
!  money()                   monitor                   mortal                   
!  move                      mtime()                   mudname()                
!  mul()                     munge()                   munge2                   
!  munge3                    mushcode                  mushcode2                
!  mwho()                    myopic                    name()                   
!  nand()                    nattr()                   nearby()                 
!  neq()                     new locks                 newbie                   
!  newbie2                   newbie3                   news                     
!  next()                    no_command                no_leave                 
!  no_tel                    no_warn                   noaccents                
!  noleave                   non-standard attributes   nor()                    
!  nospoof                   not()                     nowarn                   
  
  For more, see Entries-19
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-19
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  nspemit()                 null()                    num()                    
!  obj()                     object parents            objeval()                
!  objmem()                  oemit()                   on-vacation              
!  opaque                    open()                    or()                     
!  ord()                     orflags()                 orlflags()               
   owner()                   page                      page2                    
   paranoid                  parent                    parent()                 
   parents                   parents2                  parents3                 
***************
*** 391,405 ****
   poss()                    power()                   powers list              
   powers list2              powers()                  powers2                  
   pueblo                    pueblo features           pueblo()                 
-  puppet                    puppets                   puppets2                 
-  queue                     quiet                     quit                     
-  quota()                   r()                       r-function               
-  rand()                    read                      regedit()                
  
  For more, see Entries-20
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-20
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
   regeditall()              regeditalli()             regediti()               
   regexp                    regexp classes            regexp classes2          
   regexp examples           regexp syntax             regexp syntax2           
--- 395,409 ----
   poss()                    power()                   powers list              
   powers list2              powers()                  powers2                  
   pueblo                    pueblo features           pueblo()                 
  
  For more, see Entries-20
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-20
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+  puppet                    puppets                   puppets2                 
+  queue                     quiet                     quit                     
+  quota()                   r()                       r-function               
+  rand()                    read                      regedit()                
   regeditall()              regeditalli()             regediti()               
   regexp                    regexp classes            regexp classes2          
   regexp examples           regexp syntax             regexp syntax2           
***************
*** 412,426 ****
   remainder()               remit()                   remove()                 
   repeat()                  replace()                 rest()                   
   restarts()                restarttime()             restrict                 
-  restrict2                 restrict3                 reverse()                
-  revwords()                right()                   rjust()                  
-  rloc()                    rnum()                    room                     
-  room()                    round()                   royalty                  
  
  For more, see Entries-21
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-21
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
   rquota                    rules                     s()                      
   s-function                safe                      say                      
   score                     scramble()                screenheight             
--- 416,430 ----
   remainder()               remit()                   remove()                 
   repeat()                  replace()                 rest()                   
   restarts()                restarttime()             restrict                 
  
  For more, see Entries-21
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-21
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+  restrict2                 restrict3                 reverse()                
+  revwords()                right()                   rjust()                  
+  rloc()                    rnum()                    room                     
+  room()                    round()                   royalty                  
   rquota                    rules                     s()                      
   s-function                safe                      say                      
   score                     scramble()                screenheight             
***************
*** 433,447 ****
   setq3                     setr()                    setting-attributes       
   setunion()                sex                       sha1()                   
   shared                    shared players            shared players2          
-  shl()                     shr()                     shuffle()                
-  sign()                    sin()                     slay                     
-  softcode                  sort()                    sortby()                 
-  soundex()                 soundex2                  soundlike()              
  
  For more, see Entries-22
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-22
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
   soundslike()              space()                   spellnum()               
   splice()                  spoofing                  sqrt()                   
   squish()                  stack                     starttime()              
--- 437,451 ----
   setq3                     setr()                    setting-attributes       
   setunion()                sex                       sha1()                   
   shared                    shared players            shared players2          
  
  For more, see Entries-22
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-22
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+  shl()                     shr()                     shuffle()                
+  sign()                    sin()                     slay                     
+  softcode                  sort()                    sortby()                 
+  soundex()                 soundex2                  soundlike()              
   soundslike()              space()                   spellnum()               
   splice()                  spoofing                  sqrt()                   
   squish()                  stack                     starttime()              
***************
*** 454,502 ****
   substitutions4            success                   suspect                  
   switch wildcards          switch()                  switch2                  
   switchall()               switches                  t()                      
-  table()                   tag()                     tagwrap()                
-  take                      tan()                     teach                    
-  tel()                     tel_ok                    temple                   
-  terse                     textfile()                think                    
  
  For more, see Entries-23
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-23
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
   time functions            time()                    timefmt()                
   timefmt2                  timestring()              topics                   
   topics2                   translation               transparent              
   transparent2              trim()                    trunc()                  
   trust                     trust2                    type()                   
   types of objects          types2                    u()                      
!  u2                        u3                        ucstr()                  
!  udefault()                ufun()                    ufun2                    
!  ufun3                     uldefault()               ulocal()                 
!  ulocal2                   unfindable                unfollow                 
!  uninspected               unregistered              use                      
!  user-defined commands     user-defined2             utctime()                
!  utility functions         v()                       v-function               
!  vadd()                    val()                     valid()                  
!  vdim()                    vdot()                    verbose                  
!  verbs                     version()                 visible()                
  
  For more, see Entries-24
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-24
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  visual                    vmag()                    vmax()                   
!  vmin()                    vmul()                    vrml                     
!  vsub()                    vunit()                   warnings                 
!  warnings list             warnings list2            where()                  
!  whisper                   whisper2                  who                      
!  width()                   wildcards                 wipe()                   
!  with                      wizard                    wordpos()                
!  words()                   wrap()                    xget()                   
!  xor()                     z_tel                     zemit()                  
!  zfun()                    zmo                       zmp                      
!  zmr                       zone                      zone master objects      
!  zone master rooms         zone masters              zone objects             
!  zone()                    zones                     zones2                   
  
  & &Entries
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
--- 458,511 ----
   substitutions4            success                   suspect                  
   switch wildcards          switch()                  switch2                  
   switchall()               switches                  t()                      
  
  For more, see Entries-23
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-23
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+  table()                   tag()                     tagwrap()                
+  take                      tan()                     teach                    
+  tel()                     tel_ok                    temple                   
+  terse                     textfile()                think                    
   time functions            time()                    timefmt()                
   timefmt2                  timestring()              topics                   
   topics2                   translation               transparent              
   transparent2              trim()                    trunc()                  
   trust                     trust2                    type()                   
   types of objects          types2                    u()                      
!  u2                        ucstr()                   udefault()               
!  ufun()                    ufun2                     uldefault()              
!  ulocal()                  ulocal2                   unfindable               
!  unfollow                  uninspected               unregistered             
!  use                       user-defined commands     user-defined2            
!  utctime()                 utility functions         v()                      
  
  For more, see Entries-24
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-24
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  v-function                vadd()                    val()                    
!  valid()                   vdim()                    vdot()                   
!  verbose                   verbs                     version()                
!  visible()                 visual                    vmag()                   
!  vmax()                    vmin()                    vmul()                   
!  vrml                      vsub()                    vunit()                  
!  warnings                  warnings list             warnings list2           
!  where()                   whisper                   whisper2                 
!  who                       width()                   wildcards                
!  wipe()                    with                      wizard                   
!  wordpos()                 words()                   wrap()                   
!  xget()                    xor()                     z_tel                    
!  zemit()                   zfun()                    zmo                      
!  zmp                       zmr                       zone                     
!  zone master objects       zone master rooms         zone masters             
!  zone objects              zone()                    zones                    
! 
! For more, see Entries-25
! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
! & Entries-25
! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  zones2                                                                       
  
  & &Entries
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
*** 1_7_7.110/game/restart Tue, 17 Dec 2002 00:16:47 -0600 dunemush (pennmush/39_restart 1.1.1.1.1.1.1.2.1.1.1.1.1.2.1.2.2.1 700)
--- 1_7_7.146(w)/game/restart Wed, 01 Jan 2003 18:08:01 -0600 dunemush (pennmush/39_restart 1.1.1.1.1.1.1.2.1.1.1.1.1.2.1.2.2.2 700)
***************
*** 13,19 ****
  
  
  # The config file
! CONF_FILE=mush.cnf
  
  # The error log file
  LOG=log/netmush.log
--- 13,19 ----
  
  
  # The config file
! CONF_FILE=flags.cnf
  
  # The error log file
  LOG=log/netmush.log
*** 1_7_7.110/game/mushcnf.dst Mon, 06 Jan 2003 15:38:28 -0600 dunemush (pennmush/41_mushcnf.ds 1.1.1.19.1.1.1.2.1.1.1.8.1.1.1.1.1.5 600)
--- 1_7_7.146(w)/game/mushcnf.dst Sat, 25 Jan 2003 13:42:15 -0600 dunemush (pennmush/41_mushcnf.ds 1.1.1.19.1.1.1.2.1.1.1.8.1.1.1.1.1.6 600)
***************
*** 597,602 ****
--- 597,607 ----
  
  ###
  ### Default flags for newly created stuff
+ ### To get multiple flags, you may repeat these directives:
+ ###   player_flags flag1
+ ###   player_flags flag2
+ ### As of 1.7.7p6, you may also stack them on one directive:
+ ###   player_flags flag1 flag2
  ###
  
  # -- Default flags for exits
*** 1_7_7.110/src/cmdlocal.dst Sun, 01 Dec 2002 21:14:41 -0600 dunemush (pennmush/b/21_cmdlocal.d 1.10 660)
--- 1_7_7.146(w)/src/cmdlocal.dst Sat, 25 Jan 2003 13:52:54 -0600 dunemush (pennmush/b/21_cmdlocal.d 1.11 660)
***************
*** 63,69 ****
  local_commands()
  {
  #ifdef EXAMPLE
!   command_add("@SILLY", CMD_T_ANY, 0, 0, 0, switchmask("NOISY NOEVAL"),
  	      cmd_local_silly);
  #endif
  }
--- 63,69 ----
  local_commands()
  {
  #ifdef EXAMPLE
!   command_add("@SILLY", CMD_T_ANY, 0, 0, switchmask("NOISY NOEVAL"),
  	      cmd_local_silly);
  #endif
  }
*** 1_7_7.110/src/SWITCHES Wed, 30 Oct 2002 14:27:00 -0600 dunemush (pennmush/b/22_SWITCHES 1.12.1.3 600)
--- 1_7_7.146(w)/src/SWITCHES Tue, 14 Jan 2003 22:56:21 -0600 dunemush (pennmush/b/22_SWITCHES 1.12.1.3.1.2 600)
***************
*** 1,6 ****
--- 1,7 ----
  ACCESS
  ADD
  AFTER
+ ALIAS
  ALL
  ANY
  ATTRIBS
***************
*** 79,85 ****
  PARANOID
  PLAYERS
  PORT
- POSE
  PRESERVE
  PRINT
  PRIVS
--- 80,85 ----
***************
*** 96,102 ****
  RETROACTIVE
  ROOM
  ROOMS
- ROYALTY
  SEE
  SEEFLAG
  SELF
--- 96,101 ----
*** 1_7_7.110/src/wiz.c Mon, 06 Jan 2003 14:01:39 -0600 dunemush (pennmush/b/23_wiz.c 1.44.1.1.1.1.1.2.1.7.1.1.1.1.1.1.1.1.1.1.1.8.1.2.2.2.1.2.1.1.1.1.1.1.1.2.1.1.1.2 660)
--- 1_7_7.146(w)/src/wiz.c Sat, 25 Jan 2003 13:52:57 -0600 dunemush (pennmush/b/23_wiz.c 1.44.1.1.1.1.1.2.1.7.1.1.1.1.1.1.1.1.1.1.1.8.1.2.2.2.1.2.1.1.1.1.1.1.1.2.1.1.1.2.2.2 660)
***************
*** 273,279 ****
    if (!eval_lock(victim, dest, Tport_Lock))
      return 0;
  
!   if (Toggles(dest) & ROOM_JUMP_OK)
      return 1;
  
    return 0;
--- 273,279 ----
    if (!eval_lock(victim, dest, Tport_Lock))
      return 0;
  
!   if (JumpOk(dest))
      return 1;
  
    return 0;
***************
*** 720,726 ****
    case 1:
      /* boot by descriptor */
      victim = find_player_by_desc(atoi(name));
!     if (victim == NOTHING) {
        d = port_desc(atoi(name));
        if (!d) {
  	notify(player, "There is no one connected on that descriptor.");
--- 720,728 ----
    case 1:
      /* boot by descriptor */
      victim = find_player_by_desc(atoi(name));
!     if (victim == player)
!       flag = 2;
!     else if (victim == NOTHING) {
        d = port_desc(atoi(name));
        if (!d) {
  	notify(player, "There is no one connected on that descriptor.");
***************
*** 931,938 ****
      return;
  
    notify(player, object_header(player, thing));
!   notify_format(player, T("Flags value: 0x%08x"), Flags(thing));
!   notify_format(player, T("Toggles value: 0x%08x"), Toggles(thing));
    notify_format(player, T("Powers value: 0x%08x"), Powers(thing));
  
    notify_format(player, "Next: %d", Next(thing));
--- 933,940 ----
      return;
  
    notify(player, object_header(player, thing));
!   notify_format(player, T("Flags value: %s"),
! 		bits_to_string(Flags(thing), GOD, NOTHING));
    notify_format(player, T("Powers value: 0x%08x"), Powers(thing));
  
    notify_format(player, "Next: %d", Next(thing));
***************
*** 970,976 ****
  void
  do_power(dbref player, const char *name, const char *power)
  {
!   object_flag_type pwr;
    const char *s;
    dbref thing;
  
--- 972,978 ----
  void
  do_power(dbref player, const char *name, const char *power)
  {
!   int pwr;
    const char *s;
    dbref thing;
  
***************
*** 1248,1254 ****
    enum search_class sclass = S_OWNER;
    int n;
    int restrict_type = NOTYPE;
!   object_flag_type restrict_flags = 0;
    dbref restrict_obj = NOTHING, restrict_owner = ANY_OWNER;
    int is_wiz;
    dbref low = 0, high = db_top - 1;
--- 1250,1256 ----
    enum search_class sclass = S_OWNER;
    int n;
    int restrict_type = NOTYPE;
!   int restrict_powers = 0;
    dbref restrict_obj = NOTHING, restrict_owner = ANY_OWNER;
    int is_wiz;
    dbref low = 0, high = db_top - 1;
***************
*** 1358,1365 ****
      restrict_type = TYPE_PLAYER;
    } else if (string_prefix("powers", class)) {
      sclass = S_POWER;
!     restrict_flags = find_power(restriction);
!     if (restrict_flags == -1) {
        notify(player, T("No such power to search for."));
        return -1;
      }
--- 1360,1367 ----
      restrict_type = TYPE_PLAYER;
    } else if (string_prefix("powers", class)) {
      sclass = S_POWER;
!     restrict_powers = find_power(restriction);
!     if (restrict_powers == -1) {
        notify(player, T("No such power to search for."));
        return -1;
      }
***************
*** 1511,1517 ****
    case S_POWER:		/* @search power=see_all */
      for (n = low; n <= high; n++) {
        if ((restrict_owner == ANY_OWNER || Owner(n) == restrict_owner)
! 	  && (Powers(n) & restrict_flags) == restrict_flags) {
  	if (nresults >= result_size) {
  	  dbref *newresults;
  	  result_size *= 2;
--- 1513,1519 ----
    case S_POWER:		/* @search power=see_all */
      for (n = low; n <= high; n++) {
        if ((restrict_owner == ANY_OWNER || Owner(n) == restrict_owner)
! 	  && (Powers(n) & restrict_powers) == restrict_powers) {
  	if (nresults >= result_size) {
  	  dbref *newresults;
  	  result_size *= 2;
*** 1_7_7.110/src/timer.c Tue, 17 Dec 2002 00:18:29 -0600 dunemush (pennmush/b/29_timer.c 1.29.1.7.1.2 660)
--- 1_7_7.146(w)/src/timer.c Sat, 25 Jan 2003 13:52:57 -0600 dunemush (pennmush/b/29_timer.c 1.29.1.7.1.3 660)
***************
*** 146,152 ****
      strcpy(ccom, "dump");
      fork_and_dump(1);
  #ifdef VACATION_FLAG
!     flag_broadcast(0, PLAYER_VACATION, "%s",
  		   T
  		   ("Your ON-VACATION flag is set! If you're back, clear it."));
  #endif
--- 146,152 ----
      strcpy(ccom, "dump");
      fork_and_dump(1);
  #ifdef VACATION_FLAG
!     flag_broadcast(0, "ON-VACATION", "%s",
  		   T
  		   ("Your ON-VACATION flag is set! If you're back, clear it."));
  #endif
*** 1_7_7.110/src/help.c Sun, 01 Dec 2002 21:14:41 -0600 dunemush (pennmush/f/32_help.c 1.4.1.2.1.1.1.3.2.2.1.1.2.1.1.2.1.2.1.2.1.3.1.7 660)
--- 1_7_7.146(w)/src/help.c Sat, 25 Jan 2003 13:52:55 -0600 dunemush (pennmush/f/32_help.c 1.4.1.2.1.1.1.3.2.2.1.1.2.1.1.2.1.2.1.2.1.3.1.8 660)
***************
*** 108,114 ****
      mush_free(h, "help_file.entry");
      return;
    }
!   (void) command_add(h->command, CMD_T_ANY | CMD_T_NOPARSE, 0, 0, 0, NULL,
  		     cmd_helpcmd);
    hashadd(h->command, h, &help_files);
  }
--- 108,114 ----
      mush_free(h, "help_file.entry");
      return;
    }
!   (void) command_add(h->command, CMD_T_ANY | CMD_T_NOPARSE, 0, 0, NULL,
  		     cmd_helpcmd);
    hashadd(h->command, h, &help_files);
  }
*** 1_7_7.110/src/switchinc.c Tue, 07 Jan 2003 11:10:04 -0600 dunemush (pennmush/b/32_switchinc. 1.3.1.2.1.6.1.18.1.2.1.2.2.5.1.4.2.4.1.1.1.2.1.5.1.2.1.5.2.1.1.31.3.4.1.6 660)
--- 1_7_7.146(w)/src/switchinc.c Sat, 25 Jan 2003 13:52:56 -0600 dunemush (pennmush/b/32_switchinc. 1.3.1.2.1.6.1.18.1.2.1.2.2.5.1.4.2.4.1.1.1.2.1.5.1.2.1.5.2.1.1.31.3.4.1.2.1.4.1.2 660)
***************
*** 3,8 ****
--- 3,9 ----
    {"ACCESS", SWITCH_ACCESS},
    {"ADD", SWITCH_ADD},
    {"AFTER", SWITCH_AFTER},
+   {"ALIAS", SWITCH_ALIAS},
    {"ALL", SWITCH_ALL},
    {"ANY", SWITCH_ANY},
    {"ATTRIBS", SWITCH_ATTRIBS},
*** 1_7_7.110/src/speech.c Sun, 22 Dec 2002 01:40:58 -0600 dunemush (pennmush/b/35_speech.c 1.21.1.2.1.3.1.5.1.1.1.7.1.3.1.1.1.8.1.1.1.1.1.1.1.10.1.2.1.13.2.4.1.1 660)
--- 1_7_7.146(w)/src/speech.c Sat, 25 Jan 2003 13:52:56 -0600 dunemush (pennmush/b/35_speech.c 1.21.1.2.1.3.1.5.1.1.1.7.1.3.1.1.1.8.1.1.1.1.1.1.1.10.1.2.1.13.2.4.1.1.2.2 660)
***************
*** 534,605 ****
  }
  
  void
! do_wall(dbref player, const char *message, int privs, int key)
  {
    /* privs is 0 for wizard wizwall, 1 for royalty-wizard wizwall,
     * 2 is for general wall
     */
!   const char *gap, *prefix;
!   int mask;
  
    /* Only @wall is available to those with the announce power.
     * Only @rwall is available to royalty.
     */
    if (!(Wizard(player) ||
! 	((privs == 2) && Can_Announce(player)) ||
! 	((privs == 1) && Royalty(player)))) {
      notify(player, T("Posing as a wizard could be hazardous to your health."));
      return;
    }
    /* put together the message and figure out what type it is */
!   gap = " ";
!   switch (*message) {
!   case SAY_TOKEN:
!     key = 1;
!     if (CHAT_STRIP_QUOTE)
        message++;
!     break;
!   case SEMI_POSE_TOKEN:
!     gap = "";
!   case POSE_TOKEN:
!     key = 2;
!     message++;
!     break;
    }
  
    if (!*message) {
      notify(player, T("What did you want to say?"));
      return;
    }
!   if (privs == 0) {
      /* to wizards only */
!     mask = WIZARD;
      prefix = WIZWALL_PREFIX;
!   } else if (privs == 1) {
      /* to wizards and royalty */
!     mask = WIZARD | ROYALTY;
      prefix = RWALL_PREFIX;
    } else {
      /* to everyone */
!     mask = 0;
      prefix = WALL_PREFIX;
    }
  
    /* broadcast the message */
!   if (key == 2)
      flag_broadcast(mask, 0, "%s %s%s%s", prefix, Name(player), gap, message);
!   else if (key == 3)
      flag_broadcast(mask, 0, "%s [%s]: %s", prefix, Name(player), message);
    else
      flag_broadcast(mask, 0,
  		   "%s %s %s, \"%s\"", prefix, Name(player),
! 		   (privs != 2) ? "says" : "shouts", message);
  
    /* log it if necessary */
!   if ((privs == 2) || (options.log_walls && (privs == 0)))
!     do_log(LT_WIZ, player, NOTHING, "(MSG/%s) %s%s%s",
! 	   privs ? "all" : "wiz",
! 	   (key == 2) ? Name(player) : "", (key == 2) ? gap : "", message);
  }
  
  void
--- 534,624 ----
  }
  
  void
! do_wall(dbref player, const char *message, enum wall_type target, int emit)
  {
    /* privs is 0 for wizard wizwall, 1 for royalty-wizard wizwall,
     * 2 is for general wall
     */
!   const char *gap = "", *prefix;
!   const char *mask;
!   int pose = 0;
  
    /* Only @wall is available to those with the announce power.
     * Only @rwall is available to royalty.
     */
    if (!(Wizard(player) ||
! 	((target == WALL_ALL) && Can_Announce(player)) ||
! 	((target == WALL_RW) && Royalty(player)))) {
      notify(player, T("Posing as a wizard could be hazardous to your health."));
      return;
    }
    /* put together the message and figure out what type it is */
!   if (!emit) {
!     gap = " ";
!     switch (*message) {
!     case SAY_TOKEN:
!       if (CHAT_STRIP_QUOTE)
! 	message++;
!       break;
!     case SEMI_POSE_TOKEN:
!       gap = "";
!     case POSE_TOKEN:
!       pose = 1;
        message++;
!       break;
!     }
    }
  
    if (!*message) {
      notify(player, T("What did you want to say?"));
      return;
    }
!   if (target == WALL_WIZ) {
      /* to wizards only */
!     mask = "WIZARD";
      prefix = WIZWALL_PREFIX;
!   } else if (target == WALL_RW) {
      /* to wizards and royalty */
!     mask = "WIZARD ROYALTY";
      prefix = RWALL_PREFIX;
    } else {
      /* to everyone */
!     mask = NULL;
      prefix = WALL_PREFIX;
    }
  
    /* broadcast the message */
!   if (pose)
      flag_broadcast(mask, 0, "%s %s%s%s", prefix, Name(player), gap, message);
!   else if (emit)
      flag_broadcast(mask, 0, "%s [%s]: %s", prefix, Name(player), message);
    else
      flag_broadcast(mask, 0,
  		   "%s %s %s, \"%s\"", prefix, Name(player),
! 		   target == WALL_ALL ? "shouts" : "says", message);
  
    /* log it if necessary */
!   if (target == WALL_ALL || options.log_walls) {
!     const char *type = "";
!     switch (target) {
!     case WALL_ALL:
!       type = "all";
!       break;
!     case WALL_RW:
!       type = "roywiz";
!       break;
!     case WALL_WIZ:
!       type = "wiz";
!     }
!     if (pose)
!       do_log(LT_WIZ, player, NOTHING, "(MSG/%s) %s%s%s", type,
! 	     Name(player), gap, message);
!     else if (emit)
!       do_log(LT_WIZ, player, NOTHING, "(MSG/%s) %s", type, message);
!     else
!       do_log(LT_WIZ, player, NOTHING, "(MSG/%s) %s %s, \"%s\"", type,
! 	     Name(player), target == WALL_ALL ? "shouts" : "says", message);
!   }
  }
  
  void
*** 1_7_7.110/src/set.c Thu, 02 Jan 2003 23:55:40 -0600 dunemush (pennmush/b/38_set.c 1.26.1.5.1.1.2.1.1.1.1.1.1.11.1.2 660)
--- 1_7_7.146(w)/src/set.c Sat, 25 Jan 2003 13:52:56 -0600 dunemush (pennmush/b/38_set.c 1.26.1.5.1.1.2.1.1.1.1.1.1.11.1.1.1.3 660)
***************
*** 129,135 ****
        do_log(LT_CONN, 0, 0, T("Name change by %s(#%d) to %s"),
  	     Name(thing), thing, newname);
        if (Suspect(thing))
! 	flag_broadcast(WIZARD, 0,
  		       T("Broadcast: Suspect %s changed name to %s."),
  		       Name(thing), newname);
        delete_player(thing, NULL);
--- 129,135 ----
        do_log(LT_CONN, 0, 0, T("Name change by %s(#%d) to %s"),
  	     Name(thing), thing, newname);
        if (Suspect(thing))
! 	flag_broadcast("WIZARD", 0,
  		       T("Broadcast: Suspect %s changed name to %s."),
  		       Name(thing), newname);
        delete_player(thing, NULL);
***************
*** 293,304 ****
      Owner(thing) = Owner(newowner);
    }
    Zone(thing) = Zone(newowner);
!   Flags(thing) &= ~CHOWN_OK;
    if (!preserve || !Wizard(player)) {
!     Flags(thing) &= ~WIZARD;
!     Flags(thing) &= ~ROYALTY;
!     Flags(thing) &= ~INHERIT;
!     Flags(thing) |= HALT;
      Powers(thing) = 0;		/* wipe out all powers */
      do_halt(thing, "", thing);
    } else {
--- 293,304 ----
      Owner(thing) = Owner(newowner);
    }
    Zone(thing) = Zone(newowner);
!   clear_flag_internal(thing, "CHOWN_OK");
    if (!preserve || !Wizard(player)) {
!     clear_flag_internal(thing, "WIZARD");
!     clear_flag_internal(thing, "ROYALTY");
!     clear_flag_internal(thing, "TRUST");
!     set_flag_internal(thing, "HALT");
      Powers(thing) = 0;		/* wipe out all powers */
      do_halt(thing, "", thing);
    } else {
***************
*** 306,312 ****
        notify(player,
  	     T
  	     ("Warning: WIZ flag reset because @CHOWN/PRESERVE is to a third party."));
!       Flags(thing) &= ~WIZARD;
      }
      if (Powers(thing) || Wizard(thing) || Royalty(thing) || Inherit(thing))
        notify(player,
--- 306,312 ----
        notify(player,
  	     T
  	     ("Warning: WIZ flag reset because @CHOWN/PRESERVE is to a third party."));
!       clear_flag_internal(thing, "WIZARD");
      }
      if (Powers(thing) || Wizard(thing) || Royalty(thing) || Inherit(thing))
        notify(player,
***************
*** 422,439 ****
       * inconvenient -- although this may pose a bit of a security
       * risk. Be careful when @chzone'ing wizard or royal players.
       */
!     Flags(thing) &= ~WIZARD;
!     Flags(thing) &= ~ROYALTY;
!     Flags(thing) &= ~INHERIT;
      Powers(thing) = 0;		/* wipe out all powers */
    } else {
!     if (zone != NOTHING) {
        if (Hasprivs(thing))
! 	if (noisy)
! 	  notify(player, T("Warning: @chzoning a privileged player."));
!       if (Flags(thing) & INHERIT)
! 	if (noisy)
! 	  notify(player, T("Warning: @chzoning an TRUST player."));
      }
    }
    if (noisy)
--- 422,437 ----
       * inconvenient -- although this may pose a bit of a security
       * risk. Be careful when @chzone'ing wizard or royal players.
       */
!     clear_flag_internal(thing, "WIZARD");
!     clear_flag_internal(thing, "ROYALTY");
!     clear_flag_internal(thing, "TRUST");
      Powers(thing) = 0;		/* wipe out all powers */
    } else {
!     if (noisy && (zone != NOTHING)) {
        if (Hasprivs(thing))
! 	notify(player, T("Warning: @chzoning a privileged player."));
!       if (Inherit(thing))
! 	notify(player, T("Warning: @chzoning an TRUST player."));
      }
    }
    if (noisy)
***************
*** 807,813 ****
      notify(player, T("Nothing to do."));
      return;
    }
!   (void) atr_iter_get(player, thing, q, gedit_helper, argv);
  }
  
  
--- 805,812 ----
      notify(player, T("Nothing to do."));
      return;
    }
!   if (!atr_iter_get(player, thing, q, gedit_helper, argv))
!     notify(player, T("No matching attributes."));
  }
  
  
***************
*** 985,993 ****
      notify(player, T("That object is protected."));
      return;
    }
!   (void) atr_iter_get(player, thing, pattern, wipe_helper, NULL);
! 
!   notify(player, T("Attributes wiped."));
  }
  
  COMMAND (cmd_with) {
--- 984,993 ----
      notify(player, T("That object is protected."));
      return;
    }
!   if (!atr_iter_get(player, thing, pattern, wipe_helper, NULL))
!     notify(player, T("No matching attributes."));
!   else
!     notify(player, T("Attributes wiped."));
  }
  
  COMMAND (cmd_with) {
*** 1_7_7.110/src/rob.c Thu, 26 Dec 2002 14:20:42 -0600 dunemush (pennmush/b/42_rob.c 1.18.1.2.1.3.1.3.1.7 660)
--- 1_7_7.146(w)/src/rob.c Sat, 25 Jan 2003 13:52:56 -0600 dunemush (pennmush/b/42_rob.c 1.18.1.2.1.3.1.3.1.8 660)
***************
*** 47,53 ****
      break;
    default:
      if (Suspect(player))
!       flag_broadcast(WIZARD, 0,
  		     T("Broadcast: Suspect %s tried to kill %s(#%d)."),
  		     Name(player), Name(victim), victim);
      if (!Mobile(victim)) {
--- 47,53 ----
      break;
    default:
      if (Suspect(player))
!       flag_broadcast("WIZARD", 0,
  		     T("Broadcast: Suspect %s tried to kill %s(#%d)."),
  		     Name(player), Name(victim), victim);
      if (!Mobile(victim)) {
*** 1_7_7.110/src/predicat.c Sat, 30 Nov 2002 15:49:22 -0600 dunemush (pennmush/b/44_predicat.c 1.1.1.34.1.1.1.3.1.4.2.9 660)
--- 1_7_7.146(w)/src/predicat.c Sat, 25 Jan 2003 13:52:56 -0600 dunemush (pennmush/b/44_predicat.c 1.1.1.34.1.1.1.3.1.4.2.12 660)
***************
*** 623,629 ****
    for (scan = (unsigned char *) name; scan && *scan; scan++) {
      if (isalnum((unsigned char) *scan))
        continue;
!     if (!strchr(good, *scan))
        return 0;
    }
  
--- 623,629 ----
    for (scan = (unsigned char *) name; scan && *scan; scan++) {
      if (isalnum((unsigned char) *scan))
        continue;
!     if (!strchr((char *) good, *scan))
        return 0;
    }
  
***************
*** 1049,1066 ****
    return found;
  }
  
  void
! do_grep(player, obj, lookfor, flag, insensitive)
!     dbref player;
!     char *obj;
!     char *lookfor;
!     int flag;
!     int insensitive;
! 
! 
! 				/* this is an UNPARSED arg */
! 				/* 0 for just list, 1 for hilites */
! 				/* 0 for case-sensitive, 1 if not */
  {
    struct gh_args gh;
    dbref thing;
--- 1049,1059 ----
    return found;
  }
  
+ /* lookfor is an unparsed arg. flag is 0 for list and 1 for hilite.
+  * insensitive is 0 for case-sensitive, 1 for case-insensitive
+  */
  void
! do_grep(dbref player, char *obj, char *lookfor, int flag, int insensitive)
  {
    struct gh_args gh;
    dbref thing;
***************
*** 1092,1098 ****
      gh.lookfor = lookfor;
      gh.len = len;
      gh.insensitive = insensitive;
!     (void) atr_iter_get(player, thing, pattern, grep_helper, &gh);
    } else {
      tp = grep_util(player, thing, pattern, lookfor, len, insensitive);
      notify_format(player, T("Matches of '%s' on %s(#%d): %s"), lookfor,
--- 1085,1092 ----
      gh.lookfor = lookfor;
      gh.len = len;
      gh.insensitive = insensitive;
!     if (!atr_iter_get(player, thing, pattern, grep_helper, &gh))
!       notify(player, T("No matching attributes."));
    } else {
      tp = grep_util(player, thing, pattern, lookfor, len, insensitive);
      notify_format(player, T("Matches of '%s' on %s(#%d): %s"), lookfor,
*** 1_7_7.110/src/player.c Thu, 26 Dec 2002 14:24:59 -0600 dunemush (pennmush/b/47_player.c 1.15.1.1.1.1.1.4.1.6.1.2 660)
--- 1_7_7.146(w)/src/player.c Sat, 25 Jan 2003 13:52:56 -0600 dunemush (pennmush/b/47_player.c 1.15.1.1.1.1.1.4.1.6.1.5 660)
***************
*** 171,177 ****
      do_log(LT_CONN, 0, 0,
  	   T("Connection from Suspect site. Setting %s(#%d) suspect."),
  	   Name(player), player);
!     Toggles(player) |= PLAYER_SUSPECT;
    }
    return player;
  }
--- 171,177 ----
      do_log(LT_CONN, 0, 0,
  	   T("Connection from Suspect site. Setting %s(#%d) suspect."),
  	   Name(player), player);
!     set_flag_internal(player, "SUSPECT");
    }
    return player;
  }
***************
*** 353,358 ****
--- 353,359 ----
  #ifdef QUOTA
    char temp[SBUF_LEN];
  #endif
+   object_flag_type flags;
  
    /* else he doesn't already exist, create him */
    s = ctime(&mudtime);
***************
*** 367,377 ****
    Home(player) = PLAYER_START;
    Owner(player) = player;
    Parent(player) = NOTHING;
!   Flags(player) = TYPE_PLAYER;
!   Flags(player) |= options.player_flags;
!   Toggles(player) |= options.player_toggles;
    if (Suspect_Site(host, player) || Suspect_Site(ip, player))
!     Toggles(player) |= PLAYER_SUSPECT;
    set_initial_warnings(player);
    /* Modtime tracks login failures */
    ModTime(player) = (time_t) 0;
--- 368,379 ----
    Home(player) = PLAYER_START;
    Owner(player) = player;
    Parent(player) = NOTHING;
!   db[player].type = TYPE_PLAYER;
!   flags = string_to_bits(options.player_flags);
!   copy_flag_bitmask(Flags(player), flags);
!   destroy_flag_bitmask(flags);
    if (Suspect_Site(host, player) || Suspect_Site(ip, player))
!     set_flag_internal(player, "SUSPECT");
    set_initial_warnings(player);
    /* Modtime tracks login failures */
    ModTime(player) = (time_t) 0;
*** 1_7_7.110/src/move.c Mon, 30 Dec 2002 23:35:07 -0600 dunemush (pennmush/b/51_move.c 1.1.1.18.1.5.1.13.1.3.1.9.1.1.1.1.1.2.1.1.1.1.1.9 660)
--- 1_7_7.146(w)/src/move.c Sat, 25 Jan 2003 13:52:56 -0600 dunemush (pennmush/b/51_move.c 1.1.1.18.1.5.1.13.1.3.1.9.1.1.1.1.1.2.1.1.1.1.1.10 660)
***************
*** 682,688 ****
      }
      /* the object must pass the lock. Also, the thing being entered */
      /* has to be controlled, or must be enter_ok */
!     if (!(((Flags(thing) & ENTER_OK) || controls(player, thing)) &&
  	  (eval_lock(player, thing, Enter_Lock))
  	)) {
        did_it(player, thing, "EFAIL", T("Permission denied."), "OEFAIL",
--- 682,688 ----
      }
      /* the object must pass the lock. Also, the thing being entered */
      /* has to be controlled, or must be enter_ok */
!     if (!((EnterOk(thing) || controls(player, thing)) &&
  	  (eval_lock(player, thing, Enter_Lock))
  	)) {
        did_it(player, thing, "EFAIL", T("Permission denied."), "OEFAIL",
*** 1_7_7.110/src/match.c Tue, 07 Jan 2003 11:10:04 -0600 dunemush (pennmush/c/2_match.c 1.24.1.1.1.4.1.1.1.1.1.1.1.1.1.1.1.2 660)
--- 1_7_7.146(w)/src/match.c Sat, 25 Jan 2003 13:52:56 -0600 dunemush (pennmush/c/2_match.c 1.24.1.1.1.4.1.1.1.1.1.1.1.1.1.1.1.14 660)
***************
*** 2,14 ****
  /* Routines for parsing arguments */
  
  /***********************************************************************
!  * These are the PennMUSH name-matching routines, rewritten by
!  * Javelin to be fully re-entrant instead of using global variables,
!  * which fixes some bugs. [pl12]
!  *
!  * Calling these routines no longer requires using init_match,
!  * a bunch of match_<foo> calls, and then getting match_result().
!  * Instead, call one of these functions:
   *  match_result(who,name,type,flags) - return match, AMBIGUOUS, or NOTHING
   *  noisy_match_result(who,name,type,flags) - return match or NOTHING,
   *      and notify player on failures
--- 2,8 ----
  /* Routines for parsing arguments */
  
  /***********************************************************************
!  * These are the PennMUSH name-matching routines, fully re-entrant.
   *  match_result(who,name,type,flags) - return match, AMBIGUOUS, or NOTHING
   *  noisy_match_result(who,name,type,flags) - return match or NOTHING,
   *      and notify player on failures
***************
*** 62,108 ****
  
  static dbref match_result_internal
    (dbref who, const char *name, int type, long flags);
  static dbref match_me(const dbref who, const char *name);
  static dbref match_here(const dbref who, const char *name);
! static dbref match_absolute(const char *name);
  static dbref match_player(const dbref matcher, const char *match_name);
- static dbref match_list(const dbref match_who, const char *match_name,
- 			const int type, const long int flags, dbref first,
- 			dbref *last_match, int *match_count);
- static dbref match_neighbor(const dbref who, const char *name,
- 			    const int type, const long int flags,
- 			    dbref *last_match, int *match_count);
- static dbref match_possession(const dbref who, const char *name,
- 			      const int type, const long int flags,
- 			      dbref *last_match, int *match_count);
- static dbref match_exit(const dbref who, const char *name,
- 			const int type, const long int flags, int *match_count);
- static dbref match_exit_internal(const dbref match_who,
- 				 const char *match_name, const int type,
- 				 const long int flags, const dbref loc,
- 				 int *match_count);
- static dbref match_remote_contents(const dbref who, const char *name,
- 				   const int type, const long int flags,
- 				   dbref *last_match, int *match_count);
- static dbref match_container(const dbref who, const char *name,
- 			     const int type, const long int flags,
- 			     dbref *last_match, int *match_count);
- static dbref match_english(const dbref who, const char *name,
- 			   const long int flags);
  static dbref choose_thing(const dbref match_who, const int preferred_type,
! 			  long int flags, dbref thing1, dbref thing2,
! 			  int *match_count);
  extern int check_alias(const char *command, const char *list);	/* game.c */
  
  
  /* A wrapper for returning a match, AMBIGUOUS, or NOTHING
   */
  dbref
! match_result(who, name, type, flags)
!     const dbref who;
!     const char *name;
!     const int type;
!     const long int flags;
  {
    return match_result_internal(who, name, type, flags);
  }
--- 56,77 ----
  
  static dbref match_result_internal
    (dbref who, const char *name, int type, long flags);
+ static dbref simple_matches(dbref who, const char *name, long flags);
+ static int parse_english(const char **name, long *flags);
  static dbref match_me(const dbref who, const char *name);
  static dbref match_here(const dbref who, const char *name);
! #define match_absolute(name) parse_dbref(name)
  static dbref match_player(const dbref matcher, const char *match_name);
  static dbref choose_thing(const dbref match_who, const int preferred_type,
! 			  long int flags, dbref thing1, dbref thing2);
  extern int check_alias(const char *command, const char *list);	/* game.c */
  
  
  /* A wrapper for returning a match, AMBIGUOUS, or NOTHING
   */
  dbref
! match_result(const dbref who, const char *name, const int type,
! 	     const long flags)
  {
    return match_result_internal(who, name, type, flags);
  }
***************
*** 112,122 ****
   * It will also notify the player of non-matches or ambiguous matches
   */
  dbref
! noisy_match_result(who, name, type, flags)
!     const dbref who;
!     const char *name;
!     const int type;
!     const long int flags;
  {
    return match_result_internal(who, name, type, flags | MAT_NOISY);
  }
--- 81,88 ----
   * It will also notify the player of non-matches or ambiguous matches
   */
  dbref
! noisy_match_result(const dbref who, const char *name, const int type,
! 		   const long flags)
  {
    return match_result_internal(who, name, type, flag