[PENNMUSH-ANNOUNCE] 1.7.5-patch08

dunemush@pennmush.org dunemush at pennmush.org
Thu, 4 Jul 2002 16:15:11 -0500


This is patch08 to PennMUSH 1.7.5. After applying this patch, you will
have version 1.7.5p8

To apply this patch, save it to a file in your top-level MUSH directory,
and do the following:
	patch -p1 < 1.7.5-patch08
	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:

Minor Changes:
  * Added @nspemit and nspemit(). Wizard-only versions of @pemit and
    pemit() that don't print nospoof information. Suggested by many people,
    most recently Mike Griffiths and Nymeria@M*U*S*H. [SW]
  * Help updates. [SW]
  * Force the pipes to compression program for database reads and saves to be
    block-buffered. [SW]
  * @function name=obj/attrib now works, as well as
    @function name=obj,attrib [TAP]
  * The AF_PREFIXMATCH flag is no longer shown on attributes it's set
    on when you examine them.
Fixes:
  * A bunch of internal code cleanup, especially around casts. [SW]
  * The disconnected room check is skipped on GOING rooms. Suggested
    by Philip Mak.
  * The dbck check for nameless rooms was only checking disconnected
    rooms; now it checks all rooms.
  * hasflag() did not work with single-character flag abbreviations.
    Report by Mystery8.
  * The variable named 'template' in src/strutil.c has been renamed
    to avoid clashes with the C++ reserved word. Suggested by Mac@M*U*S*H.
  * Improvement to help @filter. Suggested by Philip Mak. [SW]
  * Files in the patches directory ending in ~ are ignored
    when patches.h is rebuilt. [SW]
  * Removed a // comment from strutil.c, as we're still
    just following the c89 standard, not c99. Report by
    Vadiv@M*U*S*H. [SW]
  * make indent now indents the .dst files before the .c ones.
    Fixes some spurious warnings from later makes. Suggested by
    Vadiv@M*U*S*H. [SW]
  * Code cleanup, mostly tprintf() and unneeded header file
    checking elimination. [SW]
  * Since a Windows header #defines OPAQUE, which conflicts with a
    #define for the mush flag of the same name, rename
    our #define rather than #undefining the Windows one. [SW]


Prereq: 1.7.5p7
*** 1_7_5.188/Patchlevel Tue, 14 May 2002 23:25:01 -0500 dunemush (pennmush/5_Patchlevel 1.17.1.8 600)
--- 1_7_5.213(w)/Patchlevel Wed, 26 Jun 2002 10:09:31 -0500 dunemush (pennmush/5_Patchlevel 1.17.1.9 600)
***************
*** 1,2 ****
  Do not edit this file. It is maintained by the official PennMUSH patches.
! This is PennMUSH 1.7.5p7
--- 1,2 ----
  Do not edit this file. It is maintained by the official PennMUSH patches.
! This is PennMUSH 1.7.5p8
*** 1_7_5.188/CHANGES.174 Tue, 14 May 2002 21:59:33 -0500 dunemush (pennmush/8_CHANGES 1.219.1.72.1.52 600)
--- 1_7_5.213(w)/CHANGES.174 Wed, 19 Jun 2002 21:50:34 -0500 dunemush (pennmush/8_CHANGES 1.219.1.72.1.65 600)
***************
*** 18,28 ****
  
  ==========================================================================
  
! Version 1.7.4 patchlevel 19		       May 6, 2002
  
  Fixes:
    * Win32 portability fixes. [EEH]
! 
  
  Version 1.7.4 patchlevel 18		       May 6, 2002
  
--- 18,53 ----
  
  ==========================================================================
  
! Version 1.7.4 patchlevel 19		       June 14, 2002
  
+ Minor changes:
+   * Wizards can now unset the WIZARD flag on any thing, whether they
+     own it or not. Suggested by Cerekk@bDv.
+   * Circular zoning is no longer allowed. Fixes part of a bug reported
+     by Philip Mak. [SW]
  Fixes:
    * Win32 portability fixes. [EEH]
!   * grep for 'grep' rather than 'egrep' in restart because in grep 2.5.1,
!     egrep is a shell script that exec's grep instead of a link.
!     Fix by Vadiv@M*U*S*H.
!   * The messages for a possessive get used the object's new location
!     instead of its old one. Fixed by Apollo@Restoration.
!   * Attempts by unlinked exits to @link an exit could crash. 
!   * %1 in @areceive was being set to the recipient rather than the giver.
!     Fixed. Report by jubjup@trekmush.org
!   * @uptime fix for Linux 2.4 kernel. [SW]
!   * The @@() function no longer complains about commas. Report by
!     Trispis@M*U*S*H. [TAP]
!   * @search flags=<flaglist> is now smarter about toggles with the same
!     letter and different types. Report by Philip Mak.
!   * English-style matching now ignores the type of object being matched.
!     This fixes a bug with, e.g., @link my 1st object=me reported by
!     Oriens@Alexandria.
!   * bound() now listed in the math functions list. Report by Dandy@M*U*S*H.
!   * Help fix for member() by Cerekk@bDV TrekMUSH
!   * The server can now transparently read mush.cnf (and included) files
!     that have Dos- or Mac-style line-endings. Suggested by Paleran.
!   * Crash bug in @search fixed. Reported by Philip Mak.
  
  Version 1.7.4 patchlevel 18		       May 6, 2002
  
*** 1_7_5.188/CHANGES Wed, 15 May 2002 22:11:33 -0500 dunemush (pennmush/g/7_CHANGES 1.27.1.36 600)
--- 1_7_5.213(w)/CHANGES Thu, 04 Jul 2002 14:33:55 -0500 dunemush (pennmush/g/7_CHANGES 1.27.1.43 600)
***************
*** 18,23 ****
--- 18,62 ----
  
  ==========================================================================
  
+ Version 1.7.5 patchlevel 8                     June 26, 2002
+ 
+ Minor Changes:
+   * Added @nspemit and nspemit(). Wizard-only versions of @pemit and
+     pemit() that don't print nospoof information. Suggested by many people,
+     most recently Mike Griffiths and Nymeria@M*U*S*H. [SW]
+   * Help updates. [SW]
+   * Force the pipes to compression program for database reads and saves to be
+     block-buffered. [SW]
+   * @function name=obj/attrib now works, as well as
+     @function name=obj,attrib [TAP]
+   * The AF_PREFIXMATCH flag is no longer shown on attributes it's set
+     on when you examine them.
+ Fixes:
+   * A bunch of internal code cleanup, especially around casts. [SW]
+   * The disconnected room check is skipped on GOING rooms. Suggested
+     by Philip Mak.
+   * The dbck check for nameless rooms was only checking disconnected
+     rooms; now it checks all rooms.
+   * hasflag() did not work with single-character flag abbreviations.
+     Report by Mystery8.
+   * The variable named 'template' in src/strutil.c has been renamed
+     to avoid clashes with the C++ reserved word. Suggested by Mac@M*U*S*H.
+   * Improvement to help @filter. Suggested by Philip Mak. [SW]
+   * Files in the patches directory ending in ~ are ignored
+     when patches.h is rebuilt. [SW]
+   * Removed a // comment from strutil.c, as we're still
+     just following the c89 standard, not c99. Report by
+     Vadiv@M*U*S*H. [SW]
+   * make indent now indents the .dst files before the .c ones.
+     Fixes some spurious warnings from later makes. Suggested by
+     Vadiv@M*U*S*H. [SW]
+   * Code cleanup, mostly tprintf() and unneeded header file
+     checking elimination. [SW]
+   * Since a Windows header #defines OPAQUE, which conflicts with a
+     #define for the mush flag of the same name, rename
+     our #define rather than #undefining the Windows one. [SW]
+ 
+ 
  Version 1.7.5 patchlevel 7                     May 14, 2002
  
  Utilities:
*** 1_7_5.188/game/txt/hlp/pennvers.hlp Wed, 15 May 2002 22:11:33 -0500 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.7 600)
--- 1_7_5.213(w)/game/txt/hlp/pennvers.hlp Thu, 04 Jul 2002 14:33:58 -0500 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.6 600)
***************
*** 1,5 ****
  & changes
! & 1.7.5p7
  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.5p8
  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,56 ----
  A list of the patchlevels associated with each release can
  be read in 'help patchlevels'.
  
+ Version 1.7.5 patchlevel 8                     June 26, 2002
+ 
+ Minor Changes:
+   * Added @nspemit and nspemit(). Wizard-only versions of @pemit and
+     pemit() that don't print nospoof information. Suggested by many people,
+     most recently Mike Griffiths and Nymeria@M*U*S*H. [SW]
+   * Help updates. [SW]
+   * Force the pipes to compression program for database reads and saves to be
+     block-buffered. [SW]
+   * @function name=obj/attrib now works, as well as
+     @function name=obj,attrib [TAP]
+   * The AF_PREFIXMATCH flag is no longer shown on attributes it's set
+     on when you examine them.
+ Fixes:
+   * A bunch of internal code cleanup, especially around casts. [SW]
+   * The disconnected room check is skipped on GOING rooms. Suggested
+     by Philip Mak.
+   * The dbck check for nameless rooms was only checking disconnected
+     rooms; now it checks all rooms.
+   * hasflag() did not work with single-character flag abbreviations.
+     Report by Mystery8.
+   * The variable named 'template' in src/strutil.c has been renamed
+     to avoid clashes with the C++ reserved word. Suggested by Mac@M*U*S*H.
+   * Improvement to help @filter. Suggested by Philip Mak. [SW]
+   * Files in the patches directory ending in ~ are ignored
+     when patches.h is rebuilt. [SW]
+   * Removed a // comment from strutil.c, as we're still
+     just following the c89 standard, not c99. Report by
+     Vadiv@M*U*S*H. [SW]
+   * make indent now indents the .dst files before the .c ones.
+     Fixes some spurious warnings from later makes. Suggested by
+     Vadiv@M*U*S*H. [SW]
+   * Code cleanup, mostly tprintf() and unneeded header file
+     checking elimination. [SW]
+   * Since a Windows header #defines OPAQUE, which conflicts with a
+     #define for the mush flag of the same name, rename
+     our #define rather than #undefining the Windows one. [SW]
+ 
+ 
+ & 1.7.5p7
  Version 1.7.5 patchlevel 7                     May 14, 2002
  
  Utilities:
***************
*** 269,279 ****
    * Fixes up to 1.7.4p12 merged in.
  
  & 1.7.4p19
! Version 1.7.4 patchlevel 19		       May 6, 2002
  
  Fixes:
    * Win32 portability fixes. [EEH]
! 
  
  & 1.7.4p18
  Version 1.7.4 patchlevel 18		       May 6, 2002
--- 309,344 ----
    * Fixes up to 1.7.4p12 merged in.
  
  & 1.7.4p19
! Version 1.7.4 patchlevel 19		       June 14, 2002
  
+ Minor changes:
+   * Wizards can now unset the WIZARD flag on any thing, whether they
+     own it or not. Suggested by Cerekk@bDv.
+   * Circular zoning is no longer allowed. Fixes part of a bug reported
+     by Philip Mak. [SW]
  Fixes:
    * Win32 portability fixes. [EEH]
!   * grep for 'grep' rather than 'egrep' in restart because in grep 2.5.1,
!     egrep is a shell script that exec's grep instead of a link.
!     Fix by Vadiv@M*U*S*H.
!   * The messages for a possessive get used the object's new location
!     instead of its old one. Fixed by Apollo@Restoration.
!   * Attempts by unlinked exits to @link an exit could crash. 
!   * %1 in @areceive was being set to the recipient rather than the giver.
!     Fixed. Report by jubjup@trekmush.org
!   * @uptime fix for Linux 2.4 kernel. [SW]
!   * The @@() function no longer complains about commas. Report by
!     Trispis@M*U*S*H. [TAP]
!   * @search flags=<flaglist> is now smarter about toggles with the same
!     letter and different types. Report by Philip Mak.
!   * English-style matching now ignores the type of object being matched.
!     This fixes a bug with, e.g., @link my 1st object=me reported by
!     Oriens@Alexandria.
!   * bound() now listed in the math functions list. Report by Dandy@M*U*S*H.
!   * Help fix for member() by Cerekk@bDV TrekMUSH
!   * The server can now transparently read mush.cnf (and included) files
!     that have Dos- or Mac-style line-endings. Suggested by Paleran.
!   * Crash bug in @search fixed. Reported by Philip Mak.
  
  & 1.7.4p18
  Version 1.7.4 patchlevel 18		       May 6, 2002
***************
*** 5363,5369 ****
  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.5: 0, 1, 2, 3, 4, 5, 6, 7
  1.7.4: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
  1.7.3: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
  1.7.2: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
--- 5428,5434 ----
  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.5: 0, 1, 2, 3, 4, 5, 6, 7, 8
  1.7.4: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
  1.7.3: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
  1.7.2: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
*** 1_7_5.188/game/txt/hlp/penntop.hlp Wed, 10 Apr 2002 20:36:23 -0500 dunemush (pennmush/13_penntop.hl 1.2.1.27.1.3.1.2.1.2.1.1.1.1.1.1.1.2 600)
--- 1_7_5.213(w)/game/txt/hlp/penntop.hlp Mon, 10 Jun 2002 17:36:59 -0500 dunemush (pennmush/13_penntop.hl 1.2.1.27.1.3.1.2.1.2.1.1.1.1.1.1.1.3 600)
***************
*** 267,277 ****
    Value                 tiny_booleans=no        tiny_booleans=yes  Gotcha
    0                     FALSE                   FALSE
    non-zero number       TRUE                    TRUE 
!   #<non-negative>       TRUE                    TRUE
!   #<negative>           FALSE                   TRUE                *
    null string           FALSE                   FALSE
    0<non-numbers..>      TRUE                    FALSE               *
!   <non-numbers...>      TRUE                    TRUE
  
  (continued in help boolean3)
  & BOOLEAN3
--- 267,277 ----
    Value                 tiny_booleans=no        tiny_booleans=yes  Gotcha
    0                     FALSE                   FALSE
    non-zero number       TRUE                    TRUE 
!   #<non-negative>       TRUE                    FALSE               *
!   #<negative>           FALSE                   FALSE                
    null string           FALSE                   FALSE
    0<non-numbers..>      TRUE                    FALSE               *
!   <non-numbers...>      TRUE                    FALSE               *
  
  (continued in help boolean3)
  & BOOLEAN3
*** 1_7_5.188/game/txt/hlp/pennfunc.hlp Fri, 10 May 2002 22:07:51 -0500 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.2 600)
--- 1_7_5.213(w)/game/txt/hlp/pennfunc.hlp Wed, 19 Jun 2002 21:50:39 -0500 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.2 600)
***************
*** 42,47 ****
--- 42,49 ----
    Attribute functions: attribute-related manipulations (GET, UFUN)
    Bitwise functions: Manipulation of individual bits of numbers (SHL, BOR)
    Boolean functions:  produce 0 or 1 (false or true) answers  (OR, AND)
+   Channel functions: Get information about channels (CTITLE, CWHO)
+   Communication functions: Send messages to objects (PEMIT, OEMIT)
    Dbref functions: return dbref info related to objects (LOC, LEXITS)
    Floating point functions: floating point math (SIN, ROUND)
    Global functions: local MUSH-specific functions defined with @function
***************
*** 92,97 ****
--- 94,109 ----
    nor()         not()         or()          t()           xor()
      
  See also: BOOLEAN VALUES, @config
+ & Channel functions
+   Channel functions work with the channel system.
+ 
+   cflags()      channels()    clock()      ctitle()       cwho()
+ & Communication functions
+   Communication functions are side-effect functions that send a message
+   to an object or objects.
+ 
+   cemit()       emit()        lemit()       nspemit()     oemit()
+   pemit()       remit()       zemit() 
  & Dbref functions
    Dbref functions return a dbref or list of dbrefs related to some value
    on an object.
***************
*** 104,120 ****
    
  See also: DBREF
  & Information functions
!   Information functions return values related to objects or channels.
   
!   andflags()    cflags()      channels()    clock()       config()      
!   conn()        controls()    ctime()       ctitle()      cwho()
!   doing()       elock()       findable()    flags()       fullname()    
!   hasattr()     hasattrp()    hasflag()     haspower()    hastype()     
!   hidden()      idle()        iname()       lock()        lstats()      
!   lwho()        money()       mtime()       mwho()        name()        
!   nattr()       nearby()      objmem()      orflags()     playermem()   
!   poll()        ports()       powers()      quota()       type()        
!   visible()
  
  & Mail functions
    Mail functions work with @mail.
--- 116,131 ----
    
  See also: DBREF
  & Information functions
!   Information functions return values related to objects.
   
!   andflags()    config()      
!   conn()        controls()    ctime()       doing()       elock()
!   findable()    flags()       fullname()    hasattr()     hasattrp()
!   hasflag()     haspower()    hastype()     hidden()      idle()
!   iname()       lock()        lstats()      lwho()        money()
!   mtime()       mwho()        name()        nattr()       nearby()
!   objmem()      orflags()     playermem()   poll()        ports()
!   powers()      quota()       type()        visible()
  
  & Mail functions
    Mail functions work with @mail.
***************
*** 154,162 ****
    Math functions take one or more numbers and return a numeric value.
    What is allowed as a 'number' depends on @config settings (see help).
    These functions can taken both integers and floating point numbers:
!   add()         lmath()       max()         mean()        median()
!   min()         mul()         sign()        stddev()      sub()
!   trunc()       val()
   
    These functions operate only on integers (if passed floating point
    numbers, an error will be reported):
--- 165,173 ----
    Math functions take one or more numbers and return a numeric value.
    What is allowed as a 'number' depends on @config settings (see help).
    These functions can taken both integers and floating point numbers:
!   add()         bound()       lmath()       max()         mean()        
!   median()      min()         mul()         sign()        stddev()      
!   sub()         trunc()       val()
   
    These functions operate only on integers (if passed floating point
    numbers, an error will be reported):
***************
*** 208,222 ****
  & Utility functions
    These functions don't quite fit into any other category.
    
!   ansi()        atrlock()     beep()        cemit()       clone()
!   create()      die()         dig()         emit()        functions()
!   isdbref()     isint()       isnum()       isword()      lemit()
!   localize()    link()        list()        lnum()        mudname()
!   null()        objeval()     oemit()       open()        pcreate()
!   pemit()       r-function    rand()        remit()       restarts()    
!   s-function    set()         setq()        setr()        soundex()     
!   soundslike()  tel()         textfile()    valid()       version()     
!   wipe()        zemit()       @@()
  
  & @@()
  & NULL()
--- 219,232 ----
  & Utility functions
    These functions don't quite fit into any other category.
    
!   ansi()        atrlock()     beep()        clone()       create()
!   die()         dig()         functions()   isdbref()     isint()
!   isnum()       isword()      localize()    link()        list()
!   lnum()        mudname()     null()        objeval()     open()
!   pcreate()     r-function    rand()        restarts()    s-function
!   set()         setq()        setr()        soundex()     soundslike()
!   tel()         textfile()    valid()       version()     wipe()
!   @@()
  
  & @@()
  & NULL()
***************
*** 2045,2054 ****
  & MEMBER()
    member(<list>,<word>[,<delimiter>])
  
!   Member takes a list and a word, and returns the position of <word>
    if <word> is a word in <list>.  A word is defined as a string which
    has no interior spaces.  So '  hello  ' would be one word, while
    'hello there' would be two.  See LISTS
  & MERGE()
    merge(<string1>, <string2>, <character>)
    
--- 2055,2066 ----
  & MEMBER()
    member(<list>,<word>[,<delimiter>])
  
!   Takes a list and a word, and returns the position of <word>
    if <word> is a word in <list>.  A word is defined as a string which
    has no interior spaces.  So '  hello  ' would be one word, while
    'hello there' would be two.  See LISTS
+ 
+   member() is case-sensitive.
  & MERGE()
    merge(<string1>, <string2>, <character>)
    
***************
*** 2282,2287 ****
--- 2294,2309 ----
    see help BOOLEAN VALUES for details.
   
    See also: and(), or(), nor(), xor()
+ & NSPEMIT()
+   nspemit(<object list>,<message>)
+ 
+   This wizard-only function will send each object on the list a
+   message, as per the @nspemit/list command. It returns nothing. It is
+   similar to pemit(), except it does not include any nospoof information.
+   Like @nspemit, it is meant for use with globals where nospoof
+   information isn't wanted.
+   
+   See also: pemit(), @nspemit
  & NUM()
    num(<object>)
  
***************
*** 2365,2372 ****
    pemit(<object list>,<message>)
  
    This function will send each object on the list a message, as per
!   the @pemit/list command (that is, the list must be a list of dbrefs). 
!   It returns nothing. It respects page-locks and HAVEN flags on players.
  & PI()
    pi()
    
--- 2387,2394 ----
    pemit(<object list>,<message>)
  
    This function will send each object on the list a message, as per
!   the @pemit/list command. It returns nothing. It respects page-locks and
!   HAVEN flags on players.
  & PI()
    pi()
    
*** 1_7_5.188/game/txt/hlp/penncmd.hlp Mon, 06 May 2002 20:42:49 -0500 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.4 600)
--- 1_7_5.213(w)/game/txt/hlp/penncmd.hlp Thu, 04 Jul 2002 14:47:51 -0500 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.10 600)
***************
*** 55,65 ****
    @dolist        @drain         @edit          @emit          @entrances
    @find          @force         @function      @gedit         @grep
    @halt          @lemit         @listmotd      @mail          @map
!   @notify        @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:
--- 55,65 ----
    @dolist        @drain         @edit          @emit          @entrances
    @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:
***************
*** 1133,1140 ****
    with the @filter set. (Note: @filter on rooms has no effect!)
   
    Please note that you should NOT use curly brackets {} in an @filter
!   pattern. Also note that AUDIBLE exits will not take effect unless the
!   room they lead from is also set AUDIBLE.
  
    See 'help @filter2' for more.
  & @filter2
--- 1133,1141 ----
    with the @filter set. (Note: @filter on rooms has no effect!)
   
    Please note that you should NOT use curly brackets {} in an @filter
!   pattern. If you want to filter a message containing a comma, you
!   need to put a \ before it. Also note that AUDIBLE exits will not
!   take effect unless the room they lead from is also set AUDIBLE.
  
    See 'help @filter2' for more.
  & @filter2
***************
*** 1240,1245 ****
--- 1241,1247 ----
  & @function
    @function [<function name>]
    @function <function name>=<object>,<attribute>
+     or @function <function name>=<object>/<attribute>
    @function/<switch> <function name>
    
    When used without any arguments, this command lists all global
***************
*** 1947,1952 ****
--- 1949,1963 ----
    Similarly, you may not specify both the /all switch and a number.
  
  See also: SEMAPHORES, @drain, @wait
+ & @nspemit
+   @nspemit[/switches] <object>=<message>
+ 
+   This wizard-only command is similar to @pemit, with two differences.
+   It will not include nospoof information, and it doesn't accept the
+   /contents switch. It is meant to be used by commands in the master
+   room where the nospoof information is just useless noise.
+ 
+ See also: @pemit, nspemit()
  & @odeath
    @odeath <player> [=<message>]
  
***************
*** 2293,2299 ****
    There can be any number of objects in the list. The objects must be
    specified by dbref number. You will not get back a "confirmation"
    message for the /list form of this command. 
!   
  (continued in help @pemit2)
  & @pemit2
    The @pemit command can take the following additional switches:
--- 2304,2310 ----
    There can be any number of objects in the list. The objects must be
    specified by dbref number. You will not get back a "confirmation"
    message for the /list form of this command. 
! 
  (continued in help @pemit2)
  & @pemit2
    The @pemit command can take the following additional switches:
***************
*** 2541,2547 ****
    @set <object>=<attribute>:<value>
    @set <object>/<attribute>=[!]<atrflag>
    
!   The first form sets (or unsets) a flag on <object>.
      Ex: @set me=VISUAL
  
    The second form sets a pre-defined attribute on <object>
--- 2552,2558 ----
    @set <object>=<attribute>:<value>
    @set <object>/<attribute>=[!]<atrflag>
    
!   The first form sets (or unsets) a flag on <object>. See 'help flags'.
      Ex: @set me=VISUAL
  
    The second form sets a pre-defined attribute on <object>
***************
*** 2552,2589 ****
      Ex: @set Test Object=random:This is a random attribute.
          &random Test Object=This is a random attribute.
    
-   See "help @set2" for more.
- & @set2
    The fourth form sets (or unsets) an attribute flag on the specified
!   attribute. Possible flags are:
!  
!   no_command        Attribute will not be checked for '$' commands and
!                     '^' listen patterns. In an 'examine', this is denoted
!                     by '$' next to the dbref of the attribute's owner.
!   visual            Attribute can be seen by anyone via get(), eval(),
!                     ufun(), zfun(), and similar functions. In 'examine',
!                     this is denoted by 'v'.
! 
! (continued in help @set3)
! & @set3
!   no_inherit        Attribute will not be inherited by the children of
!                     this object. In 'examine', this is denoted by 'i'.
!                     "private" is a synonym for no_inherit.
!   no_clone          Attribute will not be copied if the object is @clone'd.
!                     In 'examine', this is denoted by 'c'.
!   mortal_dark       Attribute cannot be seen by mortals. Denoted by 'm'.
!                     This flag can only be set by royalty and wizards.
!                     "hidden" is a synonym for mortal_dark.
!   regexp            Match $-commands and ^-listens using regular expressions.
!                     See 'help regexps'. Denoted by 'R'.
!   case              Match $-commands and ^-listens case sensitively.
!                     Otherwise case doesn't count. Denoted by 'C'.
!   wizard            Attribute can only be set by wizards. Denoted by 'w'.
                      This flag can only be set by royalty and wizards.
!   safe              Attribute may not be modified, without unsetting this
!                     flag.  Denoted by 'S'.
!   
! See also: FLAGS, NON-STANDARD ATTRIBUTES.
  & @sex
    @sex <player> = <gender>  
  
--- 2563,2593 ----
      Ex: @set Test Object=random:This is a random attribute.
          &random Test Object=This is a random attribute.
    
    The fourth form sets (or unsets) an attribute flag on the specified
!   attribute. See 'help attribute flags'.
! & attribute flags
!   Attribute flags are set on an object's attributes using @set, or applied
!   to attributes globally using @attrib. Their names (and, when applicable,
!   the character used in examine as shorthand for the flag) include:
!  
!   no_command ($)    Attribute will not be checked for '$' commands and
!                     '^' listen patterns. 
!   visual (v)        Attribute can be seen by anyone via get(), eval(),
!                     ufun(), zfun(), and similar functions. 
!   no_inherit (i)    Attribute will not be inherited by the children of
!                     this object. 
!   no_clone (c)      Attribute will not be copied if the object is @clone'd.
!   regexp (R)        Match $-commands and ^-listens using regular expressions.
!                     See 'help regexps'.
!   case (C)          Match $-commands and ^-listens case sensitively.
!   safe (S)          Attribute may not be modified, without unsetting this flag.
!   mortal_dark (m)   Attribute cannot be seen by mortals. This flag can only 
!                     be set by royalty and wizards.  "hidden" is a synonym.
!   wizard (w)        Attribute can only be set by wizards. 
                      This flag can only be set by royalty and wizards.
!   prefixmatch       When a user attempts to set an attribute using @<attrib>,
!                     this attribute will be matched down to its unique
!                     prefixes. This flag is primarily used internally.
  & @sex
    @sex <player> = <gender>  
  
*** 1_7_5.188/game/restart Mon, 16 Jul 2001 11:57:35 -0500 dunemush (pennmush/39_restart 1.1.1.1.1.1.1.2.1.1.1.1.1.2.1.1 700)
--- 1_7_5.213(w)/game/restart Sat, 25 May 2002 11:52:09 -0500 dunemush (pennmush/39_restart 1.1.1.1.1.1.1.2.1.1.1.1.1.2.1.2 700)
***************
*** 55,61 ****
  
  # Prevent double-starting things. You may need to provide a pathname for
  #  some of the commands. System V flavors need "ps -f" instead of "ps uwx".
! mush=`ps uwx | egrep $CONF_FILE | grep -v egrep | wc -l`
  
  
  if [ $mush -gt 0 ]; then
--- 55,61 ----
  
  # Prevent double-starting things. You may need to provide a pathname for
  #  some of the commands. System V flavors need "ps -f" instead of "ps uwx".
! mush=`ps uwx | grep $CONF_FILE | grep -v grep | wc -l`
  
  
  if [ $mush -gt 0 ]; then
*** 1_7_5.188/utils/mkcmds.sh Tue, 25 Sep 2001 15:42:13 -0500 dunemush (pennmush/45_mkcmds.sh 1.6 700)
--- 1_7_5.213(w)/utils/mkcmds.sh Wed, 26 Jun 2002 08:44:02 -0500 dunemush (pennmush/45_mkcmds.sh 1.7 700)
***************
*** 14,20 ****
  
  if [ -d ../patches ]; then
    echo "Rebuilding list of installed Patches"
!   for bu in ../patches/*; do
      name=`grep "^# Patch name:" $bu | sed 's/[^:]*://'`
      ver=`grep "^# Patch version:" $bu | sed 's/[^:]*://'`
      name=`echo $name`
--- 14,20 ----
  
  if [ -d ../patches ]; then
    echo "Rebuilding list of installed Patches"
!   for bu in ../patches/*[^~]; do
      name=`grep "^# Patch name:" $bu | sed 's/[^:]*://'`
      ver=`grep "^# Patch version:" $bu | sed 's/[^:]*://'`
      name=`echo $name`
*** 1_7_5.188/src/shs.c Sun, 25 Feb 2001 13:37:15 -0600 dunemush (pennmush/b/18_shs.c 1.4 660)
--- 1_7_5.213(w)/src/shs.c Thu, 04 Jul 2002 16:11:38 -0500 dunemush (pennmush/b/18_shs.c 1.5 660)
***************
*** 23,33 ****
  #include "copyrite.h"
  #include "config.h"
  
- #ifdef I_STRING
  #include <string.h>
- #else
- /* #include <strings.h>  Not sure why this is commented out. */
- #endif
  
  #include "shs.h"
  
--- 23,29 ----
***************
*** 138,148 ****
  /* some optimizing compilers - it may be necessary to split it into sections, e.g. */
  /* based on the four subrounds */
  
! static void shsTransform _((SHS_INFO * shsInfo));
  
  static void
! shsTransform(shsInfo)
!     SHS_INFO *shsInfo;
  {
    LONG W[80], temp;
    int i;
--- 134,143 ----
  /* some optimizing compilers - it may be necessary to split it into sections, e.g. */
  /* based on the four subrounds */
  
! static void shsTransform(SHS_INFO * shsInfo);
  
  static void
! shsTransform(SHS_INFO * shsInfo)
  {
    LONG W[80], temp;
    int i;
***************
*** 320,330 ****
  
  }				/* end of shsTransform */
  
! static void byteReverse _((LONG * buffer, int byteCount));
  static void
! byteReverse(buffer, byteCount)
!     LONG *buffer;
!     int byteCount;
  {
    LONG value;
    int count;
--- 315,323 ----
  
  }				/* end of shsTransform */
  
! static void byteReverse(LONG * buffer, int byteCount);
  static void
! byteReverse(LONG * buffer, int byteCount)
  {
    LONG value;
    int count;
***************
*** 343,352 ****
  /* away with the need to handle partial blocks between calls to shsUpdate () */
  
  void
! shsUpdate(shsInfo, buffer, count)
!     SHS_INFO *shsInfo;
!     BYTE *buffer;
!     int count;
  {
    /* Update bitcount */
  
--- 336,342 ----
  /* away with the need to handle partial blocks between calls to shsUpdate () */
  
  void
! shsUpdate(SHS_INFO * shsInfo, const BYTE * buffer, int count)
  {
    /* Update bitcount */
  
***************
*** 373,383 ****
  
  }				/* end of shsUpdate */
  
- void shsFile _((SHS_INFO * shsInfo));
- 
  void
! shsFinal(shsInfo)
!     SHS_INFO *shsInfo;
  {
    int count;
    LONG lowBitcount = shsInfo->countLo, highBitcount = shsInfo->countHi;
--- 363,370 ----
  
  }				/* end of shsUpdate */
  
  void
! shsFinal(SHS_INFO * shsInfo)
  {
    int count;
    LONG lowBitcount = shsInfo->countLo, highBitcount = shsInfo->countHi;
*** 1_7_5.188/src/wiz.c Fri, 03 May 2002 22:41:51 -0500 dunemush (pennmush/b/23_wiz.c 1.44.1.1.1.1.1.2.1.7.1.1.1.1.1.2 660)
--- 1_7_5.213(w)/src/wiz.c Thu, 04 Jul 2002 16:11:39 -0500 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.6 660)
***************
*** 8,27 ****
  #ifdef I_UNISTD
  #include <unistd.h>
  #endif
- #ifdef I_STRING
  #include <string.h>
- #else
- #include <strings.h>
- #endif
  #include <math.h>
  #ifdef I_SYS_TIME
  #include <sys/time.h>
  #else
  #include <time.h>
  #endif
- #ifdef I_STDLIB
  #include <stdlib.h>
- #endif
  #include <ctype.h>
  #ifdef I_FCNTL
  #include <fcntl.h>
--- 8,21 ----
***************
*** 29,35 ****
  #ifdef WIN32
  #include <windows.h>
  #include "process.h"
- #undef OPAQUE
  #endif
  #include "conf.h"
  #include "mushdb.h"
--- 23,28 ----
***************
*** 55,66 ****
  
  #include "confmagic.h"
  
! extern dbref find_entrance _((dbref door));
! extern int convert_flags _((dbref player, char *s, object_flag_type *p_mask,
! 			    object_flag_type *p_toggle,
! 			    object_flag_type *p_type));
! struct db_stat_info *get_stats _((dbref owner));
! extern dbref find_player_by_desc _((int port));
  extern int paranoid_dump;
  extern int paranoid_checkpt;
  
--- 48,58 ----
  
  #include "confmagic.h"
  
! extern dbref find_entrance(dbref door);
! extern int convert_flags(dbref player, const char *s, object_flag_type *p_mask,
! 			 object_flag_type *p_toggle, object_flag_type *p_type);
! struct db_stat_info *get_stats(dbref owner);
! extern dbref find_player_by_desc(int port);
  extern int paranoid_dump;
  extern int paranoid_checkpt;
  
***************
*** 74,85 ****
  extern int reserved;
  #endif
  
! int tport_dest_ok _((dbref player, dbref victim, dbref dest));
! int tport_control_ok _((dbref player, dbref victim, dbref loc));
! static int mem_usage _((dbref thing));
  
  #ifdef INFO_SLAVE
! void kill_info_slave _((void));
  #endif
  
  extern char confname[BUFFER_LEN];
--- 66,77 ----
  extern int reserved;
  #endif
  
! int tport_dest_ok(dbref player, dbref victim, dbref dest);
! int tport_control_ok(dbref player, dbref victim, dbref loc);
! static int mem_usage(dbref thing);
  
  #ifdef INFO_SLAVE
! void kill_info_slave(void);
  #endif
  
  extern char confname[BUFFER_LEN];
***************
*** 158,164 ****
  
    /* the quotas of priv'ed players are unlimited and cannot be set. */
    if (NoQuota(who)) {
!     notify(player, tprintf(T("Objects: %d   Limit: UNLIMITED"), owned));
      return;
    }
    /* if we're not doing a change, determine the mortal's quota limit. 
--- 150,156 ----
  
    /* the quotas of priv'ed players are unlimited and cannot be set. */
    if (NoQuota(who)) {
!     notify_format(player, T("Objects: %d   Limit: UNLIMITED"), owned);
      return;
    }
    /* if we're not doing a change, determine the mortal's quota limit. 
***************
*** 167,179 ****
  
    if (!set_q) {
      limit = get_current_quota(who);
!     notify(player, tprintf(T("Objects: %d   Limit: %d"), owned, owned + limit));
      return;
    }
    /* set a new quota */
    if (!arg2 || !*arg2) {
      limit = get_current_quota(who);
!     notify(player, tprintf(T("Objects: %d   Limit: %d"), owned, owned + limit));
      notify(player, T("What do you want to set the quota to?"));
      return;
    }
--- 159,171 ----
  
    if (!set_q) {
      limit = get_current_quota(who);
!     notify_format(player, T("Objects: %d   Limit: %d"), owned, owned + limit);
      return;
    }
    /* set a new quota */
    if (!arg2 || !*arg2) {
      limit = get_current_quota(who);
!     notify_format(player, T("Objects: %d   Limit: %d"), owned, owned + limit);
      notify(player, T("What do you want to set the quota to?"));
      return;
    }
***************
*** 188,194 ****
    (void) atr_add(Owner(who), "RQUOTA", tprintf("%d", limit - owned), GOD,
  		 NOTHING);
  
!   notify(player, tprintf(T("Objects: %d   Limit: %d"), owned, limit));
  }
  
  
--- 180,186 ----
    (void) atr_add(Owner(who), "RQUOTA", tprintf("%d", limit - owned), GOD,
  		 NOTHING);
  
!   notify_format(player, T("Objects: %d   Limit: %d"), owned, limit);
  }
  
  
***************
*** 233,246 ****
  
      if (NoQuota(who)) {
        if (!quiet)
! 	notify(player, tprintf("%s: Objects: %d   Limit: UNLIMITED",
! 			       Name(who), owned));
        continue;
      }
      if (!quiet) {
        oldlimit = get_current_quota(who);
!       notify(player, tprintf("%s: Objects: %d   Limit: %d",
! 			     Name(who), owned, oldlimit));
      }
      if (limit != -1) {
        if (limit <= owned)
--- 225,238 ----
  
      if (NoQuota(who)) {
        if (!quiet)
! 	notify_format(player, "%s: Objects: %d   Limit: UNLIMITED",
! 		      Name(who), owned);
        continue;
      }
      if (!quiet) {
        oldlimit = get_current_quota(who);
!       notify_format(player, "%s: Objects: %d   Limit: %d",
! 		    Name(who), owned, oldlimit);
      }
      if (limit != -1) {
        if (limit <= owned)
***************
*** 253,259 ****
    if (limit == -1)
      notify(player, T("Quotas not changed."));
    else
!     notify(player, tprintf(T("All quotas changed to %d."), limit));
  }
  #endif				/* QUOTA */
  
--- 245,251 ----
    if (limit == -1)
      notify(player, T("Quotas not changed."));
    else
!     notify_format(player, T("All quotas changed to %d."), limit);
  }
  #endif				/* QUOTA */
  
***************
*** 529,537 ****
  	  || controls(player, Location(victim)))
  	do_move(victim, to, 0);
        else
! 	notify(victim,
! 	       tprintf(T("%s tries to impose his will on you and fails."),
! 		       Name(player)));
      }
    }
  }
--- 521,529 ----
  	  || controls(player, Location(victim)))
  	do_move(victim, to, 0);
        else
! 	notify_format(victim,
! 		      T("%s tries to impose his will on you and fails."),
! 		      Name(player));
      }
    }
  }
***************
*** 656,662 ****
    else
      owner = lookup_player(name);
    if (owner == NOTHING) {
!     notify(player, tprintf(T("%s: No such player."), name));
      return;
    }
    if (!Search_All(player)) {
--- 648,654 ----
    else
      owner = lookup_player(name);
    if (owner == NOTHING) {
!     notify_format(player, T("%s: No such player."), name);
      return;
    }
    if (!Search_All(player)) {
***************
*** 667,687 ****
    }
    si = get_stats(owner);
    if (owner == ANY_OWNER) {
!     notify(player,
! 	   tprintf
! 	   (T
! 	    ("%d objects = %d rooms, %d exits, %d things, %d players, %d garbage."),
! 	    si->total, si->rooms, si->exits, si->things, si->players,
! 	    si->garbage));
      if (first_free != NOTHING)
!       notify(player, tprintf(T("The next object to be created will be #%d."),
! 			     first_free));
    } else {
!     notify(player,
! 	   tprintf
! 	   (T("%d objects = %d rooms, %d exits, %d things, %d players."),
! 	    si->total - si->garbage, si->rooms, si->exits, si->things,
! 	    si->players));
    }
  }
  
--- 659,677 ----
    }
    si = get_stats(owner);
    if (owner == ANY_OWNER) {
!     notify_format(player,
! 		  T
! 		  ("%d objects = %d rooms, %d exits, %d things, %d players, %d garbage."),
! 		  si->total, si->rooms, si->exits, si->things, si->players,
! 		  si->garbage);
      if (first_free != NOTHING)
!       notify_format(player, T("The next object to be created will be #%d."),
! 		    first_free);
    } else {
!     notify_format(player,
! 		  T("%d objects = %d rooms, %d exits, %d things, %d players."),
! 		  si->total - si->garbage, si->rooms, si->exits, si->things,
! 		  si->players);
    }
  }
  
***************
*** 842,848 ****
    change_quota(n_target, -count);
  #endif
  
!   notify(player, tprintf(T("Ownership changed for %d objects."), count));
  }
  
  void
--- 832,838 ----
    change_quota(n_target, -count);
  #endif
  
!   notify_format(player, T("Ownership changed for %d objects."), count);
  }
  
  void
***************
*** 889,895 ****
        count += do_chzone(player, unparse_dbref(i), target, 0);
      }
    }
!   notify(player, tprintf(T("Zone changed for %d objects."), count));
  }
  
  /*-----------------------------------------------------------------------
--- 879,885 ----
        count += do_chzone(player, unparse_dbref(i), target, 0);
      }
    }
!   notify_format(player, T("Zone changed for %d objects."), count);
  }
  
  /*-----------------------------------------------------------------------
***************
*** 921,927 ****
    }
    n = do_top(n);
  
!   notify(player, tprintf(T("%d commands executed."), n));
  
  }
  
--- 911,917 ----
    }
    n = do_top(n);
  
!   notify_format(player, T("%d commands executed."), n);
  
  }
  
***************
*** 945,975 ****
      return;
  
    notify(player, object_header(player, thing));
!   notify(player, tprintf(T("Flags value: 0x%08x"), Flags(thing)));
!   notify(player, tprintf(T("Toggles value: 0x%08x"), Toggles(thing)));
!   notify(player, tprintf(T("Powers value: 0x%08x"), Powers(thing)));
  
!   notify(player, tprintf("Next: %d", Next(thing)));
!   notify(player, tprintf("Contents: %d", Contents(thing)));
  
    switch (Typeof(thing)) {
    case TYPE_PLAYER:
  #ifdef USE_MAILER
      mp = desc_mail(thing);
!     notify(player,
! 	   tprintf(T("First mail sender: %d"), mp ? mp->from : NOTHING));
  #endif
    case TYPE_THING:
!     notify(player, tprintf("Location: %d", Location(thing)));
!     notify(player, tprintf("Home: %d", Home(thing)));
      break;
    case TYPE_EXIT:
!     notify(player, tprintf("Destination: %d", Location(thing)));
!     notify(player, tprintf("Source: %d", Source(thing)));
      break;
    case TYPE_ROOM:
!     notify(player, tprintf("Drop-to: %d", Location(thing)));
!     notify(player, tprintf("Exits: %d", Exits(thing)));
      break;
    case TYPE_GARBAGE:
      break;
--- 935,964 ----
      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));
!   notify_format(player, "Contents: %d", Contents(thing));
  
    switch (Typeof(thing)) {
    case TYPE_PLAYER:
  #ifdef USE_MAILER
      mp = desc_mail(thing);
!     notify_format(player, T("First mail sender: %d"), mp ? mp->from : NOTHING);
  #endif
    case TYPE_THING:
!     notify_format(player, "Location: %d", Location(thing));
!     notify_format(player, "Home: %d", Home(thing));
      break;
    case TYPE_EXIT:
!     notify_format(player, "Destination: %d", Location(thing));
!     notify_format(player, "Source: %d", Source(thing));
      break;
    case TYPE_ROOM:
!     notify_format(player, "Drop-to: %d", Location(thing));
!     notify_format(player, "Exits: %d", Exits(thing));
      break;
    case TYPE_GARBAGE:
      break;
***************
*** 1036,1048 ****
  #endif
  
  void
! do_power(player, name, power)
!     dbref player;
!     const char *name;
!     const char *power;
  {
    object_flag_type pwr;
!   char *s;
    dbref thing;
  
    if (!Wizard(player)) {
--- 1025,1034 ----
  #endif
  
  void
! do_power(dbref player, const char *name, const char *power)
  {
    object_flag_type pwr;
!   const char *s;
    dbref thing;
  
    if (!Wizard(player)) {
***************
*** 1063,1069 ****
      return;
    }
    /* move past the not token if there is one */
!   for (s = (char *) power; *s && ((*s == NOT_TOKEN) || isspace(*s)); s++) ;
  
    if (*s == '\0') {
      notify(player, T("You must specify a power."));
--- 1049,1055 ----
      return;
    }
    /* move past the not token if there is one */
!   for (s = power; *s && ((*s == NOT_TOKEN) || isspace(*s)); s++) ;
  
    if (*s == '\0') {
      notify(player, T("You must specify a power."));
***************
*** 1077,1083 ****
    if (*power == NOT_TOKEN) {
      Powers(thing) &= ~pwr;
      if (!AreQuiet(player, thing))
!       notify(player, tprintf(T("%s - power removed."), Name(thing)));
      do_log(LT_WIZ, player, thing, T("Power Removed: %s"), power);
    } else {
      if (Hasprivs(thing) && (pwr == IS_GUEST)) {
--- 1063,1069 ----
    if (*power == NOT_TOKEN) {
      Powers(thing) &= ~pwr;
      if (!AreQuiet(player, thing))
!       notify_format(player, T("%s - power removed."), Name(thing));
      do_log(LT_WIZ, player, thing, T("Power Removed: %s"), power);
    } else {
      if (Hasprivs(thing) && (pwr == IS_GUEST)) {
***************
*** 1086,1092 ****
      }
      Powers(thing) |= pwr;
      if (!AreQuiet(player, thing))
!       notify(player, tprintf(T("%s - power granted."), Name(thing)));
      do_log(LT_WIZ, player, thing, T("Power Granted: %s"), power);
    }
  }
--- 1072,1078 ----
      }
      Powers(thing) |= pwr;
      if (!AreQuiet(player, thing))
!       notify_format(player, T("%s - power granted."), Name(thing));
      do_log(LT_WIZ, player, thing, T("Power Granted: %s"), power);
    }
  }
***************
*** 1096,1104 ****
   */
  
  
! int raw_search _((dbref player, const char *owner, const char *class,
! 		  const char *restriction, const char *start, const char *stop,
! 		  dbref **result, PE_Info * pe_info));
  
  void
  do_search(player, arg1, arg3)
--- 1082,1090 ----
   */
  
  
! int raw_search(dbref player, const char *owner, const char *class,
! 	       const char *restriction, const char *start, const char *stop,
! 	       dbref **result, PE_Info * pe_info);
  
  void
  do_search(player, arg1, arg3)
***************
*** 1106,1112 ****
      const char *arg1;
      char **arg3;
  {
!   char *arg2;
    dbref *results = NULL;
    int nresults;
  
--- 1092,1098 ----
      const char *arg1;
      char **arg3;
  {
!   char tbuf[BUFFER_LEN], *arg2 = tbuf;
    dbref *results = NULL;
    int nresults;
  
***************
*** 1117,1123 ****
    /* First argument is a player, so we could have a quoted name */
    if (PLAYER_NAME_SPACES && *arg1 == '\"') {
      for (; *arg1 && ((*arg1 == '\"') || isspace(*arg1)); arg1++) ;
!     arg2 = (char *) arg1;
      while (*arg2 && (*arg2 != '\"')) {
        while (*arg2 && (*arg2 != '\"'))
  	arg2++;
--- 1103,1109 ----
    /* First argument is a player, so we could have a quoted name */
    if (PLAYER_NAME_SPACES && *arg1 == '\"') {
      for (; *arg1 && ((*arg1 == '\"') || isspace(*arg1)); arg1++) ;
!     strcpy(tbuf, arg1);
      while (*arg2 && (*arg2 != '\"')) {
        while (*arg2 && (*arg2 != '\"'))
  	arg2++;
***************
*** 1129,1135 ****
        }
      }
    } else {
!     arg2 = (char *) arg1;
      while (*arg2 && !isspace(*arg2))
        arg2++;
      if (*arg2)
--- 1115,1121 ----
        }
      }
    } else {
!     strcpy(tbuf, arg1);
      while (*arg2 && !isspace(*arg2))
        arg2++;
      if (*arg2)
***************
*** 1142,1153 ****
      if (!arg3[1] || !*arg3[1])
        arg2 = (char *) "";	/* arg1 */
      else {
!       arg2 = (char *) arg1;	/* arg2, arg3 */
!       arg1 = (char *) "";
      }
    }
  
!   nresults = raw_search(player, arg1, arg2, arg3[1], arg3[2], arg3[3],
  			&results, NULL);
  
    if (nresults == 0) {
--- 1128,1139 ----
      if (!arg3[1] || !*arg3[1])
        arg2 = (char *) "";	/* arg1 */
      else {
!       arg2 = (char *) arg1;	/* arg2=arg3 */
!       tbuf[0] = '\0';
      }
    }
  
!   nresults = raw_search(player, tbuf, arg2, arg3[1], arg3[2], arg3[3],
  			&results, NULL);
  
    if (nresults == 0) {
***************
*** 1156,1165 ****
      /* Split the results up by type and report. */
      int n;
      int nthings = 0, nexits = 0, nrooms = 0, nplayers = 0;
!     char *tbuf, *tbuf1;
      dbref *things, *exits, *rooms, *players;
  
-     tbuf = (char *) mush_malloc(BUFFER_LEN, "string");
      tbuf1 = (char *) mush_malloc(BUFFER_LEN, "string");
      things = (dbref *) mush_malloc(sizeof(dbref) * nresults, "dbref_list");
      exits = (dbref *) mush_malloc(sizeof(dbref) * nresults, "dbref_list");
--- 1142,1150 ----
      /* Split the results up by type and report. */
      int n;
      int nthings = 0, nexits = 0, nrooms = 0, nplayers = 0;
!     char *tbuf1;
      dbref *things, *exits, *rooms, *players;
  
      tbuf1 = (char *) mush_malloc(BUFFER_LEN, "string");
      things = (dbref *) mush_malloc(sizeof(dbref) * nresults, "dbref_list");
      exits = (dbref *) mush_malloc(sizeof(dbref) * nresults, "dbref_list");
***************
*** 1190,1198 ****
        notify(player, "\nROOMS:");
        for (n = 0; n < nrooms; n++) {
  	strcpy(tbuf1, object_header(player, Owner(rooms[n])));
! 	sprintf(tbuf, T("%s [owner: %s]"), object_header(player, rooms[n]),
! 		tbuf1);
! 	notify(player, tbuf);
        }
      }
  
--- 1175,1182 ----
        notify(player, "\nROOMS:");
        for (n = 0; n < nrooms; n++) {
  	strcpy(tbuf1, object_header(player, Owner(rooms[n])));
! 	notify_format(player, T("%s [owner: %s]"),
! 		      object_header(player, rooms[n]), tbuf1);
        }
      }
  
***************
*** 1211,1219 ****
  	strcpy(tbuf1,
  	       (from == NOTHING) ? "NOWHERE" : object_header(player, from));
  	strcpy(tbuf2, (to == NOTHING) ? "NOWHERE" : object_header(player, to));
! 	sprintf(tbuf, T("%s [from %s to %s]"), object_header(player, exits[n]),
! 		tbuf1, tbuf2);
! 	notify(player, tbuf);
        }
        mush_free((Malloc_t) tbuf2, "string");
      }
--- 1195,1202 ----
  	strcpy(tbuf1,
  	       (from == NOTHING) ? "NOWHERE" : object_header(player, from));
  	strcpy(tbuf2, (to == NOTHING) ? "NOWHERE" : object_header(player, to));
! 	notify_format(player, T("%s [from %s to %s]"),
! 		      object_header(player, exits[n]), tbuf1, tbuf2);
        }
        mush_free((Malloc_t) tbuf2, "string");
      }
***************
*** 1222,1230 ****
        notify(player, "\nOBJECTS:");
        for (n = 0; n < nthings; n++) {
  	strcpy(tbuf1, object_header(player, Owner(things[n])));
! 	sprintf(tbuf, T("%s [owner: %s]"), object_header(player, things[n]),
! 		tbuf1);
! 	notify(player, tbuf);
        }
      }
  
--- 1205,1212 ----
        notify(player, "\nOBJECTS:");
        for (n = 0; n < nthings; n++) {
  	strcpy(tbuf1, object_header(player, Owner(things[n])));
! 	notify_format(player, T("%s [owner: %s]"),
! 		      object_header(player, things[n]), tbuf1);
        }
      }
  
***************
*** 1244,1254 ****
      }
  
      notify(player, T("----------  Search Done  ----------"));
!     notify(player,
! 	   tprintf(T
! 		   ("Totals: Rooms...%d  Exits...%d  Objects...%d  Players...%d"),
! 		   nrooms, nexits, nthings, nplayers));
!     mush_free((Malloc_t) tbuf, "string");
      mush_free((Malloc_t) tbuf1, "string");
      mush_free((Malloc_t) rooms, "dbref_list");
      mush_free((Malloc_t) exits, "dbref_list");
--- 1226,1235 ----
      }
  
      notify(player, T("----------  Search Done  ----------"));
!     notify_format(player,
! 		  T
! 		  ("Totals: Rooms...%d  Exits...%d  Objects...%d  Players...%d"),
! 		  nrooms, nexits, nthings, nplayers);
      mush_free((Malloc_t) tbuf1, "string");
      mush_free((Malloc_t) rooms, "dbref_list");
      mush_free((Malloc_t) exits, "dbref_list");
***************
*** 1310,1331 ****
  
  /* Does the actual searching */
  int
! raw_search(player, owner, class, restriction, start, stop, result, pe_info)
!     dbref player;
!     const char *owner;
!     const char *class;
!     const char *restriction;
!     const char *start;
!     const char *stop;
!     dbref **result;
!     PE_Info *pe_info;
  {
    Size_t result_size;
    Size_t nresults = 0;
    enum search_class sclass = S_OWNER;
    int n;
    int restrict_type = NOTYPE;
!   object_flag_type restrict_flags = 0, restrict_toggles = 0;
    dbref restrict_obj = NOTHING, restrict_owner = ANY_OWNER;
    int is_wiz;
    dbref low = 0, high = db_top;
--- 1291,1306 ----
  
  /* Does the actual searching */
  int
! raw_search(dbref player, const char *owner, const char *class,
! 	   const char *restriction, const char *start, const char *stop,
! 	   dbref **result, PE_Info * pe_info)
  {
    Size_t result_size;
    Size_t nresults = 0;
    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;
***************
*** 1444,1458 ****
        return -1;
      }
    } else if (string_prefix("flags", class)) {
!     /*
!      * convert_flags ignores previous values of flag_mask and
!      * restrict_type while setting them
!      */
      sclass = S_FLAG;
!     if (restriction && *restriction &&
! 	!convert_flags(player, (char *) restriction, &restrict_flags,
! 		       &restrict_toggles, &restrict_type))
        return -1;
    } else {
      notify(player, T("Unknown search class."));
      return -1;
--- 1419,1430 ----
        return -1;
      }
    } else if (string_prefix("flags", class)) {
!     /* Handle the checking later.  */
      sclass = S_FLAG;
!     if (!restriction || !*restriction) {
!       notify(player, T("You must give a flag list."));
        return -1;
+     }
    } else {
      notify(player, T("Unknown search class."));
      return -1;
***************
*** 1466,1473 ****
  
    /* make sure player has money to do the search */
    if (!payfor(player, FIND_COST)) {
!     notify(player, tprintf(T("Searches cost %d %s."), FIND_COST,
! 			   ((FIND_COST == 1) ? MONEY : MONIES)));
      return -1;
    }
  
--- 1438,1445 ----
  
    /* make sure player has money to do the search */
    if (!payfor(player, FIND_COST)) {
!     notify_format(player, T("Searches cost %d %s."), FIND_COST,
! 		  ((FIND_COST == 1) ? MONEY : MONIES));
      return -1;
    }
  
***************
*** 1558,1569 ****
        char tbuf1[BUFFER_LEN];
        char *bp;
  
        for (n = low; n < high; n++) {
  	if (!((restrict_owner == ANY_OWNER || Owner(n) == restrict_owner)
  	      && (restrict_type == NOTYPE || Typeof(n) == restrict_type)))
  	  continue;
  
! 	ebuf1 = replace_string("##", tprintf("#%d", n), restriction);
  	ebuf2 = ebuf1;
  	bp = tbuf1;
  	process_expression(tbuf1, &bp, &ebuf2, player, player, player,
--- 1530,1544 ----
        char tbuf1[BUFFER_LEN];
        char *bp;
  
+       if (!restriction || !*restriction)
+ 	break;
+ 
        for (n = low; n < high; n++) {
  	if (!((restrict_owner == ANY_OWNER || Owner(n) == restrict_owner)
  	      && (restrict_type == NOTYPE || Typeof(n) == restrict_type)))
  	  continue;
  
! 	ebuf1 = replace_string("##", unparse_dbref(n), restriction);
  	ebuf2 = ebuf1;
  	bp = tbuf1;
  	process_expression(tbuf1, &bp, &ebuf2, player, player, player,
***************
*** 1610,1617 ****
      for (n = low; n < high; n++) {
        if ((restrict_owner == ANY_OWNER || Owner(n) == restrict_owner)
  	  && (restrict_type == NOTYPE || Typeof(n) == restrict_type)
! 	  && (Flags(n) & restrict_flags) == restrict_flags
! 	  && (Toggles(n) & restrict_toggles) == restrict_toggles) {
  	if (nresults >= result_size) {
  	  dbref *newresults;
  	  result_size *= 2;
--- 1585,1591 ----
      for (n = low; n < high; n++) {
        if ((restrict_owner == ANY_OWNER || Owner(n) == restrict_owner)
  	  && (restrict_type == NOTYPE || Typeof(n) == restrict_type)
! 	  && flaglist_check(player, n, restriction, 1)) {
  	if (nresults >= result_size) {
  	  dbref *newresults;
  	  result_size *= 2;
***************
*** 1734,1748 ****
      add_access_sitelock(player, site, whod, can, cant);
      write_access_file();
      if (whod != AMBIGUOUS) {
!       notify(player,
! 	     tprintf(T("Site %s access options for %s(%s) set to %s"),
! 		     site, Name(whod), unparse_dbref(whod), opts));
        do_log(LT_WIZ, player, NOTHING,
  	     T("*** SITELOCK *** %s for %s(%s) --> %s"), site,
  	     Name(whod), unparse_dbref(whod), opts);
      } else {
!       notify(player,
! 	     tprintf(T("Site %s access options set to %s"), site, opts));
        do_log(LT_WIZ, player, NOTHING, "*** SITELOCK *** %s --> %s", site, opts);
      }
      return;
--- 1708,1721 ----
      add_access_sitelock(player, site, whod, can, cant);
      write_access_file();
      if (whod != AMBIGUOUS) {
!       notify_format(player,
! 		    T("Site %s access options for %s(%s) set to %s"),
! 		    site, Name(whod), unparse_dbref(whod), opts);
        do_log(LT_WIZ, player, NOTHING,
  	     T("*** SITELOCK *** %s for %s(%s) --> %s"), site,
  	     Name(whod), unparse_dbref(whod), opts);
      } else {
!       notify_format(player, T("Site %s access options set to %s"), site, opts);
        do_log(LT_WIZ, player, NOTHING, "*** SITELOCK *** %s --> %s", site, opts);
      }
      return;
***************
*** 1764,1770 ****
        else
  	add_access_sitelock(player, site, AMBIGUOUS, 0, ACS_DEFAULT);
        write_access_file();
!       notify(player, tprintf(T("Site %s locked"), site));
        do_log(LT_WIZ, player, NOTHING, "*** SITELOCK *** %s", site);
        break;
      case 3:{
--- 1737,1743 ----
        else
  	add_access_sitelock(player, site, AMBIGUOUS, 0, ACS_DEFAULT);
        write_access_file();
!       notify_format(player, T("Site %s locked"), site);
        do_log(LT_WIZ, player, NOTHING, "*** SITELOCK *** %s", site);
        break;
      case 3:{
***************
*** 1852,1858 ****
  	/* Put a newline at the end of the site */
  	fprintf(fp, "%s\n", site);
  	fclose(fp);
! 	notify(player, tprintf(T("Name %s locked"), site));
  	do_log(LT_WIZ, player, NOTHING, "*** NAMELOCK *** %s", site);
        } else {
  	notify(player, T("Error writing to file."));
--- 1825,1831 ----
  	/* Put a newline at the end of the site */
  	fprintf(fp, "%s\n", site);
  	fclose(fp);
! 	notify_format(player, T("Name %s locked"), site);
  	do_log(LT_WIZ, player, NOTHING, "*** NAMELOCK *** %s", site);
        } else {
  	notify(player, T("Error writing to file."));
*** 1_7_5.188/src/utils.c Tue, 14 May 2002 22:08:43 -0500 dunemush (pennmush/b/27_utils.c 1.30.1.1.1.2 660)
--- 1_7_5.213(w)/src/utils.c Thu, 04 Jul 2002 16:11:38 -0500 dunemush (pennmush/b/27_utils.c 1.30.1.1.1.3 660)
***************
*** 29,35 ****
  #ifdef WIN32
  #include <wtypes.h>
  #include <winbase.h>		/* For GetCurrentProcessId() */
- #undef OPAQUE			/* Clashes with flags.h */
  #endif
  #include <ctype.h>
  #include <fcntl.h>
--- 29,34 ----
*** 1_7_5.188/src/timer.c Mon, 22 Apr 2002 11:34:33 -0500 dunemush (pennmush/b/29_timer.c 1.29.1.2 660)
--- 1_7_5.213(w)/src/timer.c Thu, 04 Jul 2002 16:11:38 -0500 dunemush (pennmush/b/29_timer.c 1.29.1.3 660)
***************
*** 15,21 ****
  #endif
  #ifdef WIN32
  #include <windows.h>
- #undef OPAQUE			/* conflict */
  #endif
  #include <signal.h>
  #ifdef I_UNISTD
--- 15,20 ----
*** 1_7_5.188/src/help.c Mon, 29 Apr 2002 10:47:50 -0500 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.2 660)
--- 1_7_5.213(w)/src/help.c Thu, 04 Jul 2002 16:11:37 -0500 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.3 660)
***************
*** 33,39 ****
  
  static void do_new_spitfile _((dbref player, char *arg1,
  			       help_file *help_dat, int restricted));
! static char *string_spitfile(help_file *help_dat, char *arg1);
  
  static void help_build_index _((help_file *h, int restricted));
  
--- 33,39 ----
  
  static void do_new_spitfile _((dbref player, char *arg1,
  			       help_file *help_dat, int restricted));
! static const char *string_spitfile(help_file *help_dat, char *arg1);
  
  static void help_build_index _((help_file *h, int restricted));
  
***************
*** 437,443 ****
  }
  
  
! static char *
  string_spitfile(help_file *help_dat, char *arg1)
  {
    help_indx *entry = NULL;
--- 437,443 ----
  }
  
  
! static const char *
  string_spitfile(help_file *help_dat, char *arg1)
  {
    help_indx *entry = NULL;
*** 1_7_5.188/src/privtab.c Tue, 03 Oct 2000 09:25:10 -0500 dunemush (pennmush/b/31_privtab.c 1.3 660)
--- 1_7_5.213(w)/src/privtab.c Thu, 04 Jul 2002 16:11:38 -0500 dunemush (pennmush/b/31_privtab.c 1.5 660)
***************
*** 140,146 ****
  
    bp = buf;
    for (c = table; c->name; c++) {
!     if (privs & c->bits_to_show) {
        safe_chr(c->letter, buf, &bp);
        privs &= ~c->bits_to_set;
      }
--- 140,146 ----
  
    bp = buf;
    for (c = table; c->name; c++) {
!     if ((privs & c->bits_to_show) && c->letter) {
        safe_chr(c->letter, buf, &bp);
        privs &= ~c->bits_to_set;
      }
*** 1_7_5.188/src/switchinc.c Fri, 17 May 2002 11:04:48 -0500 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.6 660)
--- 1_7_5.213(w)/src/switchinc.c Thu, 04 Jul 2002 16:11:38 -0500 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.9 660)
***************
*** 1,520 ****
  {
!   "ACCESS", SWITCH_ACCESS
! }
! ,
! {
!   "ADD", SWITCH_ADD
! }
! ,
! {
!   "ALL", SWITCH_ALL
! }
! ,
! {
!   "ANY", SWITCH_ANY
! }
! ,
! {
!   "ATTRIBS", SWITCH_ATTRIBS
! }
! ,
! {
!   "BAN", SWITCH_BAN
! }
! ,
! {
!   "BLIND", SWITCH_BLIND
! }
! ,
! {
!   "BRIEF", SWITCH_BRIEF
! }
! ,
! {
!   "CHECK", SWITCH_CHECK
! }
! ,
! {
!   "CHOWN", SWITCH_CHOWN
! }
! ,
! {
!   "CLEAR", SWITCH_CLEAR
! }
! ,
! {
!   "CMD", SWITCH_CMD
! }
! ,
! {
!   "COMMANDS", SWITCH_COMMANDS
! }
! ,
! {
!   "CONN", SWITCH_CONN
! }
! ,
! {
!   "CONNECT", SWITCH_CONNECT
! }
! ,
! {
!   "CONNECTED", SWITCH_CONNECTED
! }
! ,
! {
!   "CONTENTS", SWITCH_CONTENTS
! }
! ,
! {
!   "COSTS", SWITCH_COSTS
! }
! ,
! {
!   "COUNT", SWITCH_COUNT
! }
! ,
! {
!   "CREATE", SWITCH_CREATE
! }
! ,
! {
!   "DATABASE", SWITCH_DATABASE
! }
! ,
! {
!   "DB", SWITCH_DB
! }
! ,
! {
!   "DEBUG", SWITCH_DEBUG
! }
! ,
! {
!   "DECOMPILE", SWITCH_DECOMPILE
! }
! ,
! {
!   "DEFAULTS", SWITCH_DEFAULTS
! }
! ,
! {
!   "DELETE", SWITCH_DELETE
! }
! ,
! {
!   "DELIMIT", SWITCH_DELIMIT
! }
! ,
! {
!   "DESCRIBE", SWITCH_DESCRIBE
! }
! ,
! {
!   "DESTROY", SWITCH_DESTROY
! }
! ,
! {
!   "DISABLE", SWITCH_DISABLE
! }
! ,
! {
!   "DOWN", SWITCH_DOWN
! }
! ,
! {
!   "DSTATS", SWITCH_DSTATS
! }
! ,
! {
!   "EMIT", SWITCH_EMIT
! }
! ,
! {
!   "ENABLE", SWITCH_ENABLE
! }
! ,
! {
!   "ERR", SWITCH_ERR
! }
! ,
! {
!   "EXITS", SWITCH_EXITS
! }
! ,
! {
!   "FILE", SWITCH_FILE
! }
! ,
! {
!   "FIRST", SWITCH_FIRST
! }
! ,
! {
!   "FLAGS", SWITCH_FLAGS
! }
! ,
! {
!   "FOLDERS", SWITCH_FOLDERS
! }
! ,
! {
!   "FORWARD", SWITCH_FORWARD
! }
! ,
! {
!   "FSTATS", SWITCH_FSTATS
! }
! ,
! {
!   "FULL", SWITCH_FULL
! }
! ,
! {
!   "FUNCTIONS", SWITCH_FUNCTIONS
! }
! ,
! {
!   "FWD", SWITCH_FWD
! }
! ,
! {
!   "GAG", SWITCH_GAG
! }
! ,
! {
!   "GLOBALS", SWITCH_GLOBALS
! }
! ,
! {
!   "HEADER", SWITCH_HEADER
! }
! ,
! {
!   "HERE", SWITCH_HERE
! }
! ,
! {
!   "HIDE", SWITCH_HIDE
! }
! ,
! {
!   "ILIST", SWITCH_ILIST
! }
! ,
! {
!   "INVENTORY", SWITCH_INVENTORY
! }
! ,
! {
!   "IPRINT", SWITCH_IPRINT
! }
! ,
! {
!   "JOIN", SWITCH_JOIN
! }
! ,
! {
!   "LIST", SWITCH_LIST
! }
! ,
! {
!   "LOWERCASE", SWITCH_LOWERCASE
! }
! ,
! {
!   "ME", SWITCH_ME
! }
! ,
! {
!   "MEMBERS", SWITCH_MEMBERS
! }
! ,
! {
!   "MOD", SWITCH_MOD
! }
! ,
! {
!   "MORTAL", SWITCH_MORTAL
! }
! ,
! {
!   "MOTD", SWITCH_MOTD
! }
! ,
! {
!   "MUTE", SWITCH_MUTE
! }
! ,
! {
!   "NAME", SWITCH_NAME
! }
! ,
! {
!   "NO", SWITCH_NO
! }
! ,
! {
!   "NOEVAL", SWITCH_NOEVAL
! }
! ,
! {
!   "NOFLAGCOPY", SWITCH_NOFLAGCOPY
! }
! ,
! {
!   "NOISY", SWITCH_NOISY
! }
! ,
! {
!   "NOSIG", SWITCH_NOSIG
! }
! ,
! {
!   "NOSPACE", SWITCH_NOSPACE
! }
! ,
! {
!   "NOTIFY", SWITCH_NOTIFY
! }
! ,
! {
!   "NUKE", SWITCH_NUKE
! }
! ,
! {
!   "OFF", SWITCH_OFF
! }
! ,
! {
!   "ON", SWITCH_ON
! }
! ,
! {
!   "OUTSIDE", SWITCH_OUTSIDE
! }
! ,
! {
!   "OVERRIDE", SWITCH_OVERRIDE
! }
! ,
! {
!   "PANIC", SWITCH_PANIC
! }
! ,
! {
!   "PARANOID", SWITCH_PARANOID
! }
! ,
! {
!   "PLAYERS", SWITCH_PLAYERS
! }
! ,
! {
!   "PORT", SWITCH_PORT
! }
! ,
! {
!   "POSE", SWITCH_POSE
! }
! ,
! {
!   "PRESERVE", SWITCH_PRESERVE
! }
! ,
! {
!   "PRINT", SWITCH_PRINT
! }
! ,
! {
!   "PRIVS", SWITCH_PRIVS
! }
! ,
! {
!   "PURGE", SWITCH_PURGE
! }
! ,
! {
!   "QUICK", SWITCH_QUICK
! }
! ,
! {
!   "QUIET", SWITCH_QUIET
! }
! ,
! {
!   "READ", SWITCH_READ
! }
! ,
! {
!   "REBOOT", SWITCH_REBOOT
! }
! ,
! {
!   "REGISTER", SWITCH_REGISTER
! }
! ,
! {
!   "REMOVE", SWITCH_REMOVE
! }
! ,
! {
!   "RENAME", SWITCH_RENAME
! }
! ,
! {
!   "RESTORE", SWITCH_RESTORE
! }
! ,
! {
!   "RESTRICT", SWITCH_RESTRICT
! }
! ,
! {
!   "RETROACTIVE", SWITCH_RETROACTIVE
! }
! ,
! {
!   "ROOM", SWITCH_ROOM
! }
! ,
! {
!   "ROOMS", SWITCH_ROOMS
! }
! ,
! {
!   "ROYALTY", SWITCH_ROYALTY
! }
! ,
! {
!   "SEE", SWITCH_SEE
! }
! ,
! {
!   "SEEFLAG", SWITCH_SEEFLAG
! }
! ,
! {
!   "SELF", SWITCH_SELF
! }
! ,
! {
!   "SEND", SWITCH_SEND
! }
! ,
! {
!   "SET", SWITCH_SET
! }
! ,
! {
!   "SILENT", SWITCH_SILENT
! }
! ,
! {
!   "SKIPDEFAULTS", SWITCH_SKIPDEFAULTS
! }
! ,
! {
!   "SPEAK", SWITCH_SPEAK
! }
! ,
! {
!   "STATS", SWITCH_STATS
! }
! ,
! {
!   "SUMMARY", SWITCH_SUMMARY
! }
! ,
! {
!   "TABLES", SWITCH_TABLES
! }
! ,
! {
!   "TAG", SWITCH_TAG
! }
! ,
! {
!   "TELEPORT", SWITCH_TELEPORT
! }
! ,
! {
!   "TF", SWITCH_TF
! }
! ,
! {
!   "THINGS", SWITCH_THINGS
! }
! ,
! {
!   "TITLE", SWITCH_TITLE
! }
! ,
! {
!   "TRACE", SWITCH_TRACE
! }
! ,
! {
!   "UNCLEAR", SWITCH_UNCLEAR
! }
! ,
! {
!   "UNFOLDER", SWITCH_UNFOLDER
! }
! ,
! {
!   "UNGAG", SWITCH_UNGAG
! }
! ,
! {
!   "UNHIDE", SWITCH_UNHIDE
! }
! ,
! {
!   "UNMUTE", SWITCH_UNMUTE
! }
! ,
! {
!   "UNTAG", SWITCH_UNTAG
! }
! ,
! {
!   "UNTIL", SWITCH_UNTIL
! }
! ,
! {
!   "URGENT", SWITCH_URGENT
! }
! ,
! {
!   "USEFLAG", SWITCH_USEFLAG
! }
! ,
! {
!   "WHAT", SWITCH_WHAT
! }
! ,
! {
!   "WHO", SWITCH_WHO
! }
! ,
! {
!   "WIPE", SWITCH_WIPE
! }
! ,
! {
!   "WIZ", SWITCH_WIZ
! }
! ,
! {
!   "WIZARD", SWITCH_WIZARD
! }
! ,
! {
!   "YES", SWITCH_YES
! }
! ,
! {
!   "ZONE", SWITCH_ZONE
! }
  ,
--- 1,391 ----
  {
! "ACCESS", SWITCH_ACCESS}
! 
! , {
! "ADD", SWITCH_ADD}
! 
! , {
! "ALL", SWITCH_ALL}
! 
! , {
! "ANY", SWITCH_ANY}
! 
! , {
! "ATTRIBS", SWITCH_ATTRIBS}
! 
! , {
! "BAN", SWITCH_BAN}
! 
! , {
! "BLIND", SWITCH_BLIND}
! 
! , {
! "BRIEF", SWITCH_BRIEF}
! 
! , {
! "CHECK", SWITCH_CHECK}
! 
! , {
! "CHOWN", SWITCH_CHOWN}
! 
! , {
! "CLEAR", SWITCH_CLEAR}
! 
! , {
! "CMD", SWITCH_CMD}
! 
! , {
! "COMMANDS", SWITCH_COMMANDS}
! 
! , {
! "CONN", SWITCH_CONN}
! 
! , {
! "CONNECT", SWITCH_CONNECT}
! 
! , {
! "CONNECTED", SWITCH_CONNECTED}
! 
! , {
! "CONTENTS", SWITCH_CONTENTS}
! 
! , {
! "COSTS", SWITCH_COSTS}
! 
! , {
! "COUNT", SWITCH_COUNT}
! 
! , {
! "CREATE", SWITCH_CREATE}
! 
! , {
! "DATABASE", SWITCH_DATABASE}
! 
! , {
! "DB", SWITCH_DB}
! 
! , {
! "DEBUG", SWITCH_DEBUG}
! 
! , {
! "DECOMPILE", SWITCH_DECOMPILE}
! 
! , {
! "DEFAULTS", SWITCH_DEFAULTS}
! 
! , {
! "DELETE", SWITCH_DELETE}
! 
! , {
! "DELIMIT", SWITCH_DELIMIT}
! 
! , {
! "DESCRIBE", SWITCH_DESCRIBE}
! 
! , {
! "DESTROY", SWITCH_DESTROY}
! 
! , {
! "DISABLE", SWITCH_DISABLE}
! 
! , {
! "DOWN", SWITCH_DOWN}
! 
! , {
! "DSTATS", SWITCH_DSTATS}
! 
! , {
! "EMIT", SWITCH_EMIT}
! 
! , {
! "ENABLE", SWITCH_ENABLE}
! 
! , {
! "ERR", SWITCH_ERR}
! 
! , {
! "EXITS", SWITCH_EXITS}
! 
! , {
! "FILE", SWITCH_FILE}
! 
! , {
! "FIRST", SWITCH_FIRST}
! 
! , {
! "FLAGS", SWITCH_FLAGS}
! 
! , {
! "FOLDERS", SWITCH_FOLDERS}
! 
! , {
! "FORWARD", SWITCH_FORWARD}
! 
! , {
! "FSTATS", SWITCH_FSTATS}
! 
! , {
! "FULL", SWITCH_FULL}
! 
! , {
! "FUNCTIONS", SWITCH_FUNCTIONS}
! 
! , {
! "FWD", SWITCH_FWD}
! 
! , {
! "GAG", SWITCH_GAG}
! 
! , {
! "GLOBALS", SWITCH_GLOBALS}
! 
! , {
! "HEADER", SWITCH_HEADER}
! 
! , {
! "HERE", SWITCH_HERE}
! 
! , {
! "HIDE", SWITCH_HIDE}
! 
! , {
! "ILIST", SWITCH_ILIST}
! 
! , {
! "INVENTORY", SWITCH_INVENTORY}
! 
! , {
! "IPRINT", SWITCH_IPRINT}
! 
! , {
! "JOIN", SWITCH_JOIN}
! 
! , {
! "LIST", SWITCH_LIST}
! 
! , {
! "LOWERCASE", SWITCH_LOWERCASE}
! 
! , {
! "ME", SWITCH_ME}
! 
! , {
! "MEMBERS", SWITCH_MEMBERS}
! 
! , {
! "MOD", SWITCH_MOD}
! 
! , {
! "MORTAL", SWITCH_MORTAL}
! 
! , {
! "MOTD", SWITCH_MOTD}
! 
! , {
! "MUTE", SWITCH_MUTE}
! 
! , {
! "NAME", SWITCH_NAME}
! 
! , {
! "NO", SWITCH_NO}
! 
! , {
! "NOEVAL", SWITCH_NOEVAL}
! 
! , {
! "NOFLAGCOPY", SWITCH_NOFLAGCOPY}
! 
! , {
! "NOISY", SWITCH_NOISY}
! 
! , {
! "NOSIG", SWITCH_NOSIG}
! 
! , {
! "NOSPACE", SWITCH_NOSPACE}
! 
! , {
! "NOTIFY", SWITCH_NOTIFY}
! 
! , {
! "NUKE", SWITCH_NUKE}
! 
! , {
! "OFF", SWITCH_OFF}
! 
! , {
! "ON", SWITCH_ON}
! 
! , {
! "OUTSIDE", SWITCH_OUTSIDE}
! 
! , {
! "OVERRIDE", SWITCH_OVERRIDE}
! 
! , {
! "PANIC", SWITCH_PANIC}
! 
! , {
! "PARANOID", SWITCH_PARANOID}
! 
! , {
! "PLAYERS", SWITCH_PLAYERS}
! 
! , {
! "PORT", SWITCH_PORT}
! 
! , {
! "POSE", SWITCH_POSE}
! 
! , {
! "PRESERVE", SWITCH_PRESERVE}
! 
! , {
! "PRINT", SWITCH_PRINT}
! 
! , {
! "PRIVS", SWITCH_PRIVS}
! 
! , {
! "PURGE", SWITCH_PURGE}
! 
! , {
! "QUICK", SWITCH_QUICK}
! 
! , {
! "QUIET", SWITCH_QUIET}
! 
! , {
! "READ", SWITCH_READ}
! 
! , {
! "REBOOT", SWITCH_REBOOT}
! 
! , {
! "REGISTER", SWITCH_REGISTER}
! 
! , {
! "REMOVE", SWITCH_REMOVE}
! 
! , {
! "RENAME", SWITCH_RENAME}
! 
! , {
! "RESTORE", SWITCH_RESTORE}
! 
! , {
! "RESTRICT", SWITCH_RESTRICT}
! 
! , {
! "RETROACTIVE", SWITCH_RETROACTIVE}
! 
! , {
! "ROOM", SWITCH_ROOM}
! 
! , {
! "ROOMS", SWITCH_ROOMS}
! 
! , {
! "ROYALTY", SWITCH_ROYALTY}
! 
! , {
! "SEE", SWITCH_SEE}
! 
! , {
! "SEEFLAG", SWITCH_SEEFLAG}
! 
! , {
! "SELF", SWITCH_SELF}
! 
! , {
! "SEND", SWITCH_SEND}
! 
! , {
! "SET", SWITCH_SET}
! 
! , {
! "SILENT", SWITCH_SILENT}
! 
! , {
! "SKIPDEFAULTS", SWITCH_SKIPDEFAULTS}
! 
! , {
! "SPEAK", SWITCH_SPEAK}
! 
! , {
! "STATS", SWITCH_STATS}
! 
! , {
! "SUMMARY", SWITCH_SUMMARY}
! 
! , {
! "TABLES", SWITCH_TABLES}
! 
! , {
! "TAG", SWITCH_TAG}
! 
! , {
! "TELEPORT", SWITCH_TELEPORT}
! 
! , {
! "TF", SWITCH_TF}
! 
! , {
! "THINGS", SWITCH_THINGS}
! 
! , {
! "TITLE", SWITCH_TITLE}
! 
! , {
! "TRACE", SWITCH_TRACE}
! 
! , {
! "UNCLEAR", SWITCH_UNCLEAR}
! 
! , {
! "UNFOLDER", SWITCH_UNFOLDER}
! 
! , {
! "UNGAG", SWITCH_UNGAG}
! 
! , {
! "UNHIDE", SWITCH_UNHIDE}
! 
! , {
! "UNMUTE", SWITCH_UNMUTE}
! 
! , {
! "UNTAG", SWITCH_UNTAG}
! 
! , {
! "UNTIL", SWITCH_UNTIL}
! 
! , {
! "URGENT", SWITCH_URGENT}
! 
! , {
! "USEFLAG", SWITCH_USEFLAG}
! 
! , {
! "WHAT", SWITCH_WHAT}
! 
! , {
! "WHO", SWITCH_WHO}
! 
! , {
! "WIPE", SWITCH_WIPE}
! 
! , {
! "WIZ", SWITCH_WIZ}
! 
! , {
! "WIZARD", SWITCH_WIZARD}
! 
! , {
! "YES", SWITCH_YES}
! 
! , {
! "ZONE", SWITCH_ZONE}
! 
  ,
*** 1_7_5.188/src/strutil.c Mon, 29 Apr 2002 10:17:15 -0500 dunemush (pennmush/b/33_strutil.c 1.28.1.3.1.3.1.7.2.1.1.2.1.1.1.1.1.3 660)
--- 1_7_5.213(w)/src/strutil.c Thu, 04 Jul 2002 16:11:38 -0500 dunemush (pennmush/b/33_strutil.c 1.28.1.3.1.3.1.7.2.1.1.2.1.1.1.1.1.6 660)
***************
*** 180,196 ****
  }
  
  int
! safe_accent(const char *base, const char *template, size_t len, char *buff,
  	    char **bp)
  {
!   /* base and template must be the same length */
    size_t n;
    unsigned char c;
  
    for (n = 0; n < len; n++) {
      switch (base[n]) {
      case 'A':
!       switch (template[n]) {
        case '`':
  	c = 192;
  	break;
--- 180,196 ----
  }
  
  int
! safe_accent(const char *base, const char *tmplate, size_t len, char *buff,
  	    char **bp)
  {
!   /* base and tmplate must be the same length */
    size_t n;
    unsigned char c;
  
    for (n = 0; n < len; n++) {
      switch (base[n]) {
      case 'A':
!       switch (tmplate[n]) {
        case '`':
  	c = 192;
  	break;
***************
*** 214,220 ****
        }
        break;
      case 'a':
!       switch (template[n]) {
        case '`':
  	c = 224;
  	break;
--- 214,220 ----
        }
        break;
      case 'a':
!       switch (tmplate[n]) {
        case '`':
  	c = 224;
  	break;
***************
*** 238,256 ****
        }
        break;
      case 'C':
!       if (template[n] == ',')
  	c = 199;
        else
  	c = 'C';
        break;
      case 'c':
!       if (template[n] == ',')
  	c = 231;
        else
  	c = 'c';
        break;
      case 'E':
!       switch (template[n]) {
        case '`':
  	c = 200;
  	break;
--- 238,256 ----
        }
        break;
      case 'C':
!       if (tmplate[n] == ',')
  	c = 199;
        else
  	c = 'C';
        break;
      case 'c':
!       if (tmplate[n] == ',')
  	c = 231;
        else
  	c = 'c';
        break;
      case 'E':
!       switch (tmplate[n]) {
        case '`':
  	c = 200;
  	break;
***************
*** 268,274 ****
        }
        break;
      case 'e':
!       switch (template[n]) {
        case '`':
  	c = 232;
  	break;
--- 268,274 ----
        }
        break;
      case 'e':
!       switch (tmplate[n]) {
        case '`':
  	c = 232;
  	break;
***************
*** 286,292 ****
        }
        break;
      case 'I':
!       switch (template[n]) {
        case '`':
  	c = 204;
  	break;
--- 286,292 ----
        }
        break;
      case 'I':
!       switch (tmplate[n]) {
        case '`':
  	c = 204;
  	break;
***************
*** 304,310 ****
        }
        break;
      case 'i':
!       switch (template[n]) {
        case '`':
  	c = 236;
  	break;
--- 304,310 ----
        }
        break;
      case 'i':
!       switch (tmplate[n]) {
        case '`':
  	c = 236;
  	break;
***************
*** 322,340 ****
        }
        break;
      case 'N':
!       if (template[n] == '~')
  	c = 209;
        else
  	c = 'N';
        break;
      case 'n':
!       if (template[n] == '~')
  	c = 241;
        else
  	c = 'n';
        break;
      case 'O':
!       switch (template[n]) {
        case '`':
  	c = 210;
  	break;
--- 322,340 ----
        }
        break;
      case 'N':
!       if (tmplate[n] == '~')
  	c = 209;
        else
  	c = 'N';
        break;
      case 'n':
!       if (tmplate[n] == '~')
  	c = 241;
        else
  	c = 'n';
        break;
      case 'O':
!       switch (tmplate[n]) {
        case '`':
  	c = 210;
  	break;
***************
*** 355,361 ****
        }
        break;
      case 'o':
!       switch (template[n]) {
        case '&':
  	c = 240;
  	break;
--- 355,361 ----
        }
        break;
      case 'o':
!       switch (tmplate[n]) {
        case '&':
  	c = 240;
  	break;
***************
*** 379,385 ****
        }
        break;
      case 'U':
!       switch (template[n]) {
        case '`':
  	c = 217;
  	break;
--- 379,385 ----
        }
        break;
      case 'U':
!       switch (tmplate[n]) {
        case '`':
  	c = 217;
  	break;
***************
*** 397,403 ****
        }
        break;
      case 'u':
!       switch (template[n]) {
        case '`':
  	c = 249;
  	break;
--- 397,403 ----
        }
        break;
      case 'u':
!       switch (tmplate[n]) {
        case '`':
  	c = 249;
  	break;
***************
*** 415,477 ****
        }
        break;
      case 'Y':
!       if (template[n] == '\'')
  	c = 221;
        else
  	c = 'Y';
        break;
      case 'y':
!       if (template[n] == '\'')
  	c = 253;
!       else if (template[n] == ':')
  	c = 255;
        else
  	c = 'y';
        break;
      case '?':
!       if (template[n] == 'u')
  	c = 191;
        else
  	c = '?';
        break;
      case '!':
!       if (template[n] == 'u')
  	c = 161;
        else
  	c = '!';
        break;
      case '<':
!       if (template[n] == '"')
  	c = 171;
        else
  	c = '<';
        break;
      case '>':
!       if (template[n] == '"')
  	c = 187;
        else
  	c = '>';
        break;
      case 's':
!       if (template[n] == 'B')
  	c = 223;
        else
  	c = 's';
        break;
      case 'p':
!       if (template[n] == '|')
  	c = 254;
        else
  	c = 'p';
        break;
      case 'P':
!       if (template[n] == '|')
  	c = 222;
        else
  	c = 'P';
        break;
      case 'D':
!       if (template[n] == '-')
  	c = 208;
        else
  	c = 'D';
--- 415,477 ----
        }
        break;
      case 'Y':
!       if (tmplate[n] == '\'')
  	c = 221;
        else
  	c = 'Y';
        break;
      case 'y':
!       if (tmplate[n] == '\'')
  	c = 253;
!       else if (tmplate[n] == ':')
  	c = 255;
        else
  	c = 'y';
        break;
      case '?':
!       if (tmplate[n] == 'u')
  	c = 191;
        else
  	c = '?';
        break;
      case '!':
!       if (tmplate[n] == 'u')
  	c = 161;
        else
  	c = '!';
        break;
      case '<':
!       if (tmplate[n] == '"')
  	c = 171;
        else
  	c = '<';
        break;
      case '>':
!       if (tmplate[n] == '"')
  	c = 187;
        else
  	c = '>';
        break;
      case 's':
!       if (tmplate[n] == 'B')
  	c = 223;
        else
  	c = 's';
        break;
      case 'p':
!       if (tmplate[n] == '|')
  	c = 254;
        else
  	c = 'p';
        break;
      case 'P':
!       if (tmplate[n] == '|')
  	c = 222;
        else
  	c = 'P';
        break;
      case 'D':
!       if (tmplate[n] == '-')
  	c = 208;
        else
  	c = 'D';
***************
*** 676,688 ****
  int
  u_strlen(const unsigned char *s)
  {
!   return strlen((char *) s);
  }
  
  unsigned char *
  u_strcpy(unsigned char *target, const unsigned char *source)
  {
!   return (unsigned char *) strcpy((char *) target, (char *) source);
  }
  
  char *
--- 676,688 ----
  int
  u_strlen(const unsigned char *s)
  {
!   return strlen((const char *) s);
  }
  
  unsigned char *
  u_strcpy(unsigned char *target, const unsigned char *source)
  {
!   return (unsigned char *) strcpy((char *) target, (const char *) source);
  }
  
  char *
***************
*** 862,874 ****
  /* Strlen that ignores ansi and HTML sequences */
  
  int
! ansi_strlen(const char *string)
  {
    int i = 0;
!   char *p;
!   if (!ANSI_JUSTIFY)
!     return strlen(string);
!   p = (char *) string;
    if (!p)
      return 0;
  
--- 862,871 ----
  /* Strlen that ignores ansi and HTML sequences */
  
  int
! ansi_strlen(const char *p)
  {
    int i = 0;
! 
    if (!p)
      return 0;
  
***************
*** 893,903 ****
  /* Returns true length of string up to numchars visible characters. 
   */
  int
! ansi_strnlen(const char *string, Size_t numchars)
  {
    int i = 0;
!   char *p;
!   p = (char *) string;
    if (!p)
      return 0;
    while (*p && numchars > 0) {
--- 890,899 ----
  /* Returns true length of string up to numchars visible characters. 
   */
  int
! ansi_strnlen(const char *p, size_t numchars)
  {
    int i = 0;
! 
    if (!p)
      return 0;
    while (*p && numchars > 0) {
***************
*** 951,957 ****
  }
  
  char *
! next_in_list(char **head)
  {
    int paren = 0;
    static char buf[BUFFER_LEN];
--- 947,953 ----
  }
  
  char *
! next_in_list(const char **head)
  {
    int paren = 0;
    static char buf[BUFFER_LEN];
***************
*** 987,999 ****
  {
    static char buff[BUFFER_LEN];
    char *bp = buff;
!   char *q;
!   Size_t len = 0;
  
    if (!orig)
      return NULL;
  
!   for (q = (char *) orig; *q;) {
      switch (*q) {
      case ESC_CHAR:
        /* Skip over ansi */
--- 983,995 ----
  {
    static char buff[BUFFER_LEN];
    char *bp = buff;
!   const char *q;
!   size_t len = 0;
  
    if (!orig)
      return NULL;
  
!   for (q = orig; *q;) {
      switch (*q) {
      case ESC_CHAR:
        /* Skip over ansi */
***************
*** 1075,1081 ****
  
    size = stack + sizeof(stack) - current;
  
!   //  if (size < (int) ((buff + maxlen - 1) - *bp)) {
    if (((int) (*bp - buff)) + size < maxlen - 2) {
      switch (size % 8) {
      case 0:
--- 1071,1077 ----
  
    size = stack + sizeof(stack) - current;
  
!   /* if (size < (int) ((buff + maxlen - 1) - *bp)) { */
    if (((int) (*bp - buff)) + size < maxlen - 2) {
      switch (size % 8) {
      case 0:
***************
*** 1172,1180 ****
  #endif				/* HAS_STRXFRM && !WIN32 */
  
  char *
! skip_leading_ansi(const char *s)
  {
-   char *p = (char *) s;
    if (!p)
      return NULL;
    while (*p == ESC_CHAR || *p == TAG_START) {
--- 1168,1175 ----
  #endif				/* HAS_STRXFRM && !WIN32 */
  
  char *
! skip_leading_ansi(const char *p)
  {
    if (!p)
      return NULL;
    while (*p == ESC_CHAR || *p == TAG_START) {
***************
*** 1188,1194 ****
      if (*p)
        p++;
    }
!   return p;
  
  }
  
--- 1183,1189 ----
      if (*p)
        p++;
    }
!   return (char *) p;
  
  }
  
***************
*** 1206,1212 ****
    if (!data)
      return NULL;
  
!   data->len = ansi_strlen((char *) src);
  
    while (*src) {
      y = skip_leading_ansi(src);
--- 1201,1207 ----
    if (!data)
      return NULL;
  
!   data->len = ansi_strlen(src);
  
    while (*src) {
      y = skip_leading_ansi(src);
*** 1_7_5.188/src/speech.c Mon, 29 Apr 2002 10:17:15 -0500 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 660)
--- 1_7_5.213(w)/src/speech.c Thu, 04 Jul 2002 16:11:38 -0500 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.3 660)
***************
*** 298,307 ****
    dbref good[100];
    int gcount, bcount;
    char *bad, *bptr;
!   char *head;
    int overheard;
    char *current;
!   char **start;
  
    if (!arg1 || !*arg1) {
      notify(player, T("Whisper to whom?"));
--- 298,307 ----
    dbref good[100];
    int gcount, bcount;
    char *bad, *bptr;
!   const char *head;
    int overheard;
    char *current;
!   const char **start;
  
    if (!arg1 || !*arg1) {
      notify(player, T("Whisper to whom?"));
***************
*** 319,325 ****
      panic("Unable to allocate memory in do_whisper_list");
  
    overheard = 0;
!   head = (char *) arg1;
    start = &head;
    /* Figure out what kind of message */
    gap = " ";
--- 319,325 ----
      panic("Unable to allocate memory in do_whisper_list");
  
    overheard = 0;
!   head = arg1;
    start = &head;
    /* Figure out what kind of message */
    gap = " ";
***************
*** 340,346 ****
    bptr = bad;
    safe_str(T("Unable to whisper to:"), bad, &bptr);
    while (head && *head) {
!     current = (char *) next_in_list(start);
      who = match_result(player, current, TYPE_PLAYER, MAT_NEAR_THINGS |
  		       MAT_CONTAINER);
      if (!GoodObject(who)) {
--- 340,346 ----
    bptr = bad;
    safe_str(T("Unable to whisper to:"), bad, &bptr);
    while (head && *head) {
!     current = next_in_list(start);
      who = match_result(player, current, TYPE_PLAYER, MAT_NEAR_THINGS |
  		       MAT_CONTAINER);
      if (!GoodObject(who)) {
***************
*** 485,491 ****
  }
  
  void
! do_pemit_list(dbref player, char *list, const char *message)
  {
    /* Send a message to a list of dbrefs. To avoid repeated generation
     * of the NOSPOOF string, we set it up the first time we encounter
--- 485,491 ----
  }
  
  void
! do_pemit_list(dbref player, char *list, const char *message, int nospoof)
  {
    /* Send a message to a list of dbrefs. To avoid repeated generation
     * of the NOSPOOF string, we set it up the first time we encounter
***************
*** 510,516 ****
    while ((p = split_token(&l, ' '))) {
      who = noisy_match_result(player, p, NOTYPE, MAT_ABSOLUTE);
      if (GoodObject(who) && okay_pemit(player, who)) {
!       if (Nospoof(who)) {
  	bp = tbuf;
  	if (Paranoid(who))
  	  safe_format(tbuf, &bp, "[%s(#%d)->] ", Name(player), player);
--- 510,516 ----
    while ((p = split_token(&l, ' '))) {
      who = noisy_match_result(player, p, NOTYPE, MAT_ABSOLUTE);
      if (GoodObject(who) && okay_pemit(player, who)) {
!       if (nospoof && Nospoof(who)) {
  	bp = tbuf;
  	if (Paranoid(who))
  	  safe_format(tbuf, &bp, "[%s(#%d)->] ", Name(player), player);
***************
*** 527,539 ****
  }
  
  void
! do_pemit(dbref player, const char *arg1, const char *arg2, int silent)
  {
    dbref who;
  
!   switch (who =
! 	  match_result(player, arg1, NOTYPE,
! 		       MAT_OBJECTS | MAT_HERE | MAT_CONTAINER)) {
    case NOTHING:
      notify(player, T("I don't see that here."));
      break;
--- 527,539 ----
  }
  
  void
! do_pemit(dbref player, const char *arg1, const char *arg2, int silent,
! 	 int nospoof)
  {
    dbref who;
  
!   switch (who = match_result(player, arg1, NOTYPE,
! 			     MAT_OBJECTS | MAT_HERE | MAT_CONTAINER)) {
    case NOTHING:
      notify(player, T("I don't see that here."));
      break;
***************
*** 553,559 ****
      }
      if (!silent)
        notify_format(player, T("You pemit \"%s\" to %s."), arg2, Name(who));
!     if (Nospoof(who)) {
        if (Paranoid(who))
  	notify_format(who, "[%s(#%d)->%s] %s", Name(player), player,
  		      Name(who), arg2);
--- 553,559 ----
      }
      if (!silent)
        notify_format(player, T("You pemit \"%s\" to %s."), arg2, Name(who));
!     if (nospoof && Nospoof(who)) {
        if (Paranoid(who))
  	notify_format(who, "[%s(#%d)->%s] %s", Name(player), player,
  		      Name(who), arg2);
***************
*** 697,703 ****
  	int noeval, int multipage)
  {
    dbref target;
!   char *message;
    const char *gap;
    int key;
    char *tbuf, *tbuf2;
--- 697,703 ----
  	int noeval, int multipage)
  {
    dbref target;
!   const char *message;
    const char *gap;
    int key;
    char *tbuf, *tbuf2;
***************
*** 705,714 ****
    char *rp, *rplist;
    dbref good[100];
    int gcount = 0, bcount = 0;
!   char tobuf[BUFFER_LEN];
!   char msgbuf[BUFFER_LEN];
!   char *head;
!   char **start;
    char *current;
    char *s;
    int i;
--- 705,714 ----
    char *rp, *rplist;
    dbref good[100];
    int gcount = 0, bcount = 0;
!   char tobuf[BUFFER_LEN], *tb;
!   char msgbuf[BUFFER_LEN], *mb;
!   const char *head;
!   const char **start;
    char *current;
    char *s;
    int i;
***************
*** 717,746 ****
  
    if (arg2 && *arg2) {
      /* page to=msg. Always evaluate to, maybe evaluate msg */
!     head = tobuf;
!     process_expression(tobuf, &head, &arg1, player, cause, cause,
  		       PE_DEFAULT, PT_DEFAULT, NULL);
!     *head = '\0';
      head = tobuf;
      if (noeval) {
!       message = (char *) arg2;
      } else {
!       message = msgbuf;
!       process_expression(msgbuf, &message, &arg2, player, cause, cause,
  			 PE_DEFAULT, PT_DEFAULT, NULL);
!       *message = '\0';
        message = msgbuf;
      }
    } else {
      /* page msg. A repage. Maybe evaluate msg */
      head = NULL;
      if (noeval) {
!       message = (char *) arg1;
      } else {
!       message = msgbuf;
!       process_expression(msgbuf, &message, &arg1, player, cause, cause,
  			 PE_DEFAULT, PT_DEFAULT, NULL);
!       *message = '\0';
        message = msgbuf;
      }
    }
--- 717,746 ----
  
    if (arg2 && *arg2) {
      /* page to=msg. Always evaluate to, maybe evaluate msg */
!     tb = tobuf;
!     process_expression(tobuf, &tb, &arg1, player, cause, cause,
  		       PE_DEFAULT, PT_DEFAULT, NULL);
!     *tb = '\0';
      head = tobuf;
      if (noeval) {
!       message = arg2;
      } else {
!       mb = msgbuf;
!       process_expression(msgbuf, &mb, &arg2, player, cause, cause,
  			 PE_DEFAULT, PT_DEFAULT, NULL);
!       *mb = '\0';
        message = msgbuf;
      }
    } else {
      /* page msg. A repage. Maybe evaluate msg */
      head = NULL;
      if (noeval) {
!       message = arg1;
      } else {
!       mb = msgbuf;
!       process_expression(msgbuf, &mb, &arg1, player, cause, cause,
  			 PE_DEFAULT, PT_DEFAULT, NULL);
!       *mb = '\0';
        message = msgbuf;
      }
    }
***************
*** 805,811 ****
    safe_str(T("Unable to page:"), tbuf, &tp);
  
    while (head && *head) {
!     current = (char *) next_in_list(start);
      target = lookup_player(current);
      if (!GoodObject(target))
        target = short_page(current);
--- 805,811 ----
    safe_str(T("Unable to page:"), tbuf, &tp);
  
    while (head && *head) {
!     current = next_in_list(start);
      target = lookup_player(current);
      if (!GoodObject(target))
        target = short_page(current);
***************
*** 1075,1082 ****
  const char *
  make_prefixstr(dbref thing, const char *msg)
  {
!   char *bp;
!   char const *asave, *ap;
    static char tbuf1[BUFFER_LEN];
    char *wsave[10], *preserve[NUMQ];
    ATTR *a;
--- 1075,1082 ----
  const char *
  make_prefixstr(dbref thing, const char *msg)
  {
!   char *bp, *asave;
!   char const *ap;
    static char tbuf1[BUFFER_LEN];
    char *wsave[10], *preserve[NUMQ];
    ATTR *a;
*** 1_7_5.188/src/set.c Wed, 10 Apr 2002 20:36:23 -0500 dunemush (pennmush/b/38_set.c 1.26.1.5.1.1.2.1.1.2 660)
--- 1_7_5.213(w)/src/set.c Thu, 04 Jul 2002 16:11:38 -0500 dunemush (pennmush/b/38_set.c 1.26.1.5.1.1.2.1.1.1.1.1.1.3 660)
***************
*** 6,16 ****
  /* commands which set parameters */
  #include <stdio.h>
  #include <ctype.h>
- #ifdef I_STRING
  #include <string.h>
- #else
- #include <strings.h>
- #endif
  #ifdef I_SYS_TIME
  #include <sys/time.h>
  #else
--- 6,12 ----
***************
*** 19,27 ****
  #ifdef I_SYS_TYPES
  #include <sys/types.h>
  #endif
- #ifdef I_STDLIB
  #include <stdlib.h>
- #endif
  
  #include "conf.h"
  #include "mushdb.h"
--- 15,21 ----
***************
*** 372,377 ****
--- 366,385 ----
        notify(player, T("You shouldn't zone objects to themselves!"));
      return 0;
    }
+   /* Don't allow circular zones */
+   {
+     dbref tmp;
+     for (tmp = Zone(zone); GoodObject(tmp); tmp = Zone(tmp)) {
+       if (tmp == thing) {
+ 	notify(player, T("You can't make circular zones!"));
+ 	return 0;
+       }
+       if (tmp == Zone(tmp))	/* Ran into an object zoned to itself */
+ 	break;
+     }
+   }
+ 
+ 
    /* Don't allow chzone to objects without elocks! 
     * If no lock is set, set a default lock (warn if zmo are used for control)
     * This checks for many trivial elocks (canuse/1, where &canuse=1)
***************
*** 454,461 ****
    if (!(Can_Write_Attr(player, thing, AL_ATTR(atr)) ||
  	((*af->flag == NOT_TOKEN) && (af->f == AF_SAFE) &&
  	 Can_Write_Attr_Ignore_Safe(player, thing, AL_ATTR(atr))))) {
!     notify(player,
! 	   tprintf(T("You cannot set %s/%s"), Name(thing), AL_NAME(atr)));
      return 0;
    }
    if (*af->flag == NOT_TOKEN)
--- 462,468 ----
    if (!(Can_Write_Attr(player, thing, AL_ATTR(atr)) ||
  	((*af->flag == NOT_TOKEN) && (af->f == AF_SAFE) &&
  	 Can_Write_Attr_Ignore_Safe(player, thing, AL_ATTR(atr))))) {
!     notify_format(player, T("You cannot set %s/%s"), Name(thing), AL_NAME(atr));
      return 0;
    }
    if (*af->flag == NOT_TOKEN)
***************
*** 464,470 ****
      AL_FLAGS(atr) |= af->f;
  
    if (!Quiet(player) && !(Quiet(thing) && (Owner(thing) == player)))
!     notify(player, tprintf("%s/%s - Set.", Name(thing), AL_NAME(atr)));
  
    return 1;
  }
--- 471,477 ----
      AL_FLAGS(atr) |= af->f;
  
    if (!Quiet(player) && !(Quiet(thing) && (Owner(thing) == player)))
!     notify_format(player, "%s/%s - Set.", Name(thing), AL_NAME(atr));
  
    return 1;
  }
***************
*** 479,487 ****
    if (!atr)
      return;
    if (!Can_Write_Attr(player, target, AL_ATTR(atr))) {
!     notify(player,
! 	   tprintf(T("You cannot set attrib flags on %s/%s"), Name(target),
! 		   AL_NAME(atr)));
      return;
    }
    AL_FLAGS(atr) = flags;
--- 486,494 ----
    if (!atr)
      return;
    if (!Can_Write_Attr(player, target, AL_ATTR(atr))) {
!     notify_format(player,
! 		  T("You cannot set attrib flags on %s/%s"), Name(target),
! 		  AL_NAME(atr));
      return;
    }
    AL_FLAGS(atr) = flags;
***************
*** 647,659 ****
  
    free((Malloc_t) text);	/* safe_uncompress malloc()s memory */
    if (copies) {
!     notify(player, tprintf(T("Attribute %s (%d copies)"),
! 			   (move ? "moved" : "copied"), copies));
      if (move)
        do_set_atr(oldobj, AL_NAME(a), NULL, player, 1);
    } else {
!     notify(player, tprintf(T("Unable to %s attribute."),
! 			   (move ? "move" : "copy")));
    }
    return;
  }
--- 654,666 ----
  
    free((Malloc_t) text);	/* safe_uncompress malloc()s memory */
    if (copies) {
!     notify_format(player, T("Attribute %s (%d copies)"),
! 		  (move ? "moved" : "copied"), copies);
      if (move)
        do_set_atr(oldobj, AL_NAME(a), NULL, player, 1);
    } else {
!     notify_format(player, T("Unable to %s attribute."),
! 		  (move ? "move" : "copy"));
    }
    return;
  }
***************
*** 667,679 ****
      void *args;
  {
    int ansi_long_flag = 0;
!   char *r, *s, *val;
    char tbuf1[BUFFER_LEN], tbuf_ansi[BUFFER_LEN];
    char *tbufp, *tbufap;
    char **argv = (char **) args;
  
    val = argv[1];
!   r = (argv[2]) ? argv[2] : (char *) "";
  
    tbufp = tbuf1;
    tbufap = tbuf_ansi;
--- 674,687 ----
      void *args;
  {
    int ansi_long_flag = 0;
!   const char *r;
!   char *s, *val;
    char tbuf1[BUFFER_LEN], tbuf_ansi[BUFFER_LEN];
    char *tbufp, *tbufap;
    char **argv = (char **) args;
  
    val = argv[1];
!   r = (argv[2]) ? argv[2] : "";
  
    tbufp = tbuf1;
    tbufap = tbuf_ansi;
***************
*** 756,764 ****
    if (do_set_atr(thing, AL_NAME(a), tbuf1, player, 0) &&
        !Quiet(player) && !Quiet(thing)) {
      if (!ansi_long_flag && ShowAnsi(player))
!       notify(player, tprintf("%s - Set: %s", AL_NAME(a), tbuf_ansi));
      else
!       notify(player, tprintf("%s - Set: %s", AL_NAME(a), tbuf1));
    }
  
    return 1;
--- 764,772 ----
    if (do_set_atr(thing, AL_NAME(a), tbuf1, player, 0) &&
        !Quiet(player) && !Quiet(thing)) {
      if (!ansi_long_flag && ShowAnsi(player))
!       notify_format(player, "%s - Set: %s", AL_NAME(a), tbuf_ansi);
      else
!       notify_format(player, "%s - Set: %s", AL_NAME(a), tbuf1);
    }
  
    return 1;
***************
*** 838,844 ****
  
    if (charge_action(player, thing, upcasestr(s))) {
      if (!Quiet(player) && !Quiet(thing))
!       notify(player, tprintf("%s - Triggered.", Name(thing)));
    } else {
      notify(player, T("No such attribute."));
    }
--- 846,852 ----
  
    if (charge_action(player, thing, upcasestr(s))) {
      if (!Quiet(player) && !Quiet(thing))
!       notify_format(player, "%s - Triggered.", Name(thing));
    } else {
      notify(player, T("No such attribute."));
    }
*** 1_7_5.188/src/services.c Tue, 15 May 2001 15:59:50 -0500 dunemush (pennmush/b/39_services.c 1.11 660)
--- 1_7_5.213(w)/src/services.c Thu, 04 Jul 2002 16:11:38 -0500 dunemush (pennmush/b/39_services.c 1.12 660)
***************
*** 8,14 ****
  #include "config.h"
  
  #include <windows.h>		/* for service and thread routines */
- #undef OPAQUE			/* clashes with MUSH definition */
  
  #ifdef I_STDLIB
  #include <stdlib.h>
--- 8,13 ----
*** 1_7_5.188/src/rob.c Mon, 11 Mar 2002 18:22:55 -0600 dunemush (pennmush/b/42_rob.c 1.18.1.2.1.3.1.4 660)
--- 1_7_5.213(w)/src/rob.c Thu, 04 Jul 2002 16:11:38 -0500 dunemush (pennmush/b/42_rob.c 1.18.1.2.1.3.1.3.1.3 660)
***************
*** 3,11 ****
  #include "config.h"
  #include "copyrite.h"
  #include <ctype.h>
- #ifdef I_STDLIB
  #include <stdlib.h>
- #endif
  
  /* give and kill */
  
--- 3,9 ----
***************
*** 18,35 ****
  #include "log.h"
  #include "lock.h"
  #include "dbdefs.h"
  #include "confmagic.h"
  
- 
- void do_kill _((dbref player, const char *what, int cost, int slay));
- void do_give _((dbref player, char *recipient, char *amnt, int silent));
- 
  void
! do_kill(player, what, cost, slay)
!     dbref player;
!     const char *what;
!     int cost;
!     int slay;
  {
    dbref victim;
    char tbuf1[BUFFER_LEN], tbuf2[BUFFER_LEN];
--- 16,26 ----
  #include "log.h"
  #include "lock.h"
  #include "dbdefs.h"
+ #include "game.h"
  #include "confmagic.h"
  
  void
! do_kill(dbref player, const char *what, int cost, int slay)
  {
    dbref victim;
    char tbuf1[BUFFER_LEN], tbuf2[BUFFER_LEN];
***************
*** 78,84 ****
  
  	/* see if it works */
  	if (!payfor(player, cost)) {
! 	  notify(player, tprintf(T("You don't have enough %s."), MONIES));
  	  break;
  	}
        }
--- 69,75 ----
  
  	/* see if it works */
  	if (!payfor(player, cost)) {
! 	  notify_format(player, T("You don't have enough %s."), MONIES);
  	  break;
  	}
        }
***************
*** 101,108 ****
  	  if (payoff + Pennies(Owner(victim)) > Max_Pennies(Owner(victim)))
  	    payoff = Max_Pennies(Owner(victim)) - Pennies(Owner(victim));
  	  if (payoff > 0) {
! 	    notify(victim, tprintf(T("Your insurance policy pays %d %s."),
! 				   payoff, ((payoff == 1) ? MONEY : MONIES)));
  	    giveto(Owner(victim), payoff);
  	  } else {
  	    notify(victim, T("Your insurance policy has been revoked."));
--- 92,99 ----
  	  if (payoff + Pennies(Owner(victim)) > Max_Pennies(Owner(victim)))
  	    payoff = Max_Pennies(Owner(victim)) - Pennies(Owner(victim));
  	  if (payoff > 0) {
! 	    notify_format(victim, T("Your insurance policy pays %d %s."),
! 			  payoff, ((payoff == 1) ? MONEY : MONIES));
  	    giveto(Owner(victim), payoff);
  	  } else {
  	    notify(victim, T("Your insurance policy has been revoked."));
***************
*** 114,120 ****
        } else {
  	/* notify player and victim only */
  	notify(player, T("Your murder attempt failed."));
! 	notify(victim, tprintf(T("%s tried to kill you!"), Name(player)));
        }
        break;
      }
--- 105,111 ----
        } else {
  	/* notify player and victim only */
  	notify(player, T("Your murder attempt failed."));
! 	notify_format(victim, T("%s tried to kill you!"), Name(player));
        }
        break;
      }
***************
*** 122,132 ****
  }
  
  void
! do_give(player, recipient, amnt, silent)
!     dbref player;
!     char *recipient;
!     char *amnt;
!     int silent;
  {
    dbref who;
    int amount;
--- 113,119 ----
  }
  
  void
! do_give(dbref player, char *recipient, char *amnt, int silent)
  {
    dbref who;
    int amount;
***************
*** 199,206 ****
  		    "AGIVE", NOTHING, myenv);
  
  	/* Notify the object that it's been given */
! 	notify(thing,
! 	       tprintf(T("%s gave you to %s."), Name(player), Name(who)));
  
  	/* Recipient gets success message on thing and receive on self */
  	did_it(who, thing, "SUCCESS", NULL, "OSUCCESS", NULL, "ASUCCESS",
--- 186,192 ----
  		    "AGIVE", NOTHING, myenv);
  
  	/* Notify the object that it's been given */
! 	notify_format(thing, T("%s gave you to %s."), Name(player), Name(who));
  
  	/* Recipient gets success message on thing and receive on self */
  	did_it(who, thing, "SUCCESS", NULL, "OSUCCESS", NULL, "ASUCCESS",
***************
*** 209,214 ****
--- 195,201 ----
  	safe_format(tbuf1, &bp, T("%s gave you %s."), Name(player),
  		    Name(thing));
  	*bp = '\0';
+ 	sprintf(myenv[1], "#%d", player);
  	real_did_it(who, who, "RECEIVE", tbuf1, "ORECEIVE", NULL,
  		    "ARECEIVE", NOTHING, myenv);
  
***************
*** 225,232 ****
      notify(player, T("What is this, a holdup?"));
      return;
    } else if (amount == 0) {
!     notify(player,
! 	   tprintf(T("You must specify a positive number of %s."), MONIES));
      return;
    }
    if (Pennies(who) + amount > Max_Pennies(who)) {
--- 212,219 ----
      notify(player, T("What is this, a holdup?"));
      return;
    } else if (amount == 0) {
!     notify_format(player,
! 		  T("You must specify a positive number of %s."), MONIES);
      return;
    }
    if (Pennies(who) + amount > Max_Pennies(who)) {
***************
*** 240,246 ****
      }
    /* try to do the give */
    if (!payfor(player, amount)) {
!     notify(player, tprintf(T("You don't have that many %s to give!"), MONIES));
    } else {
      /* objects work differently */
      if (IsThing(who)) {
--- 227,233 ----
      }
    /* try to do the give */
    if (!payfor(player, amount)) {
!     notify_format(player, T("You don't have that many %s to give!"), MONIES);
    } else {
      /* objects work differently */
      if (IsThing(who)) {
***************
*** 269,290 ****
      } else {
        /* he can do it */
        if (amount > 0) {
! 	notify(player,
! 	       tprintf(T("You give %d %s to %s."), amount,
! 		       ((amount == 1) ? MONEY : MONIES), Name(who)));
        } else {
! 	notify(player, tprintf(T("You took %d %s from %s!"), abs(amount),
! 			       ((abs(amount) == 1) ? MONEY : MONIES),
! 			       Name(who)));
        }
        if (IsPlayer(who) && !silent) {
  	if (amount > 0) {
! 	  notify(who, tprintf(T("%s gives you %d %s."), Name(player),
! 			      amount, ((amount == 1) ? MONEY : MONIES)));
  	} else {
! 	  notify(who, tprintf(T("%s took %d %s from you!"), Name(player),
! 			      abs(amount),
! 			      ((abs(amount) == 1) ? MONEY : MONIES)));
  	}
        }
        giveto(who, amount);
--- 256,275 ----
      } else {
        /* he can do it */
        if (amount > 0) {
! 	notify_format(player,
! 		      T("You give %d %s to %s."), amount,
! 		      ((amount == 1) ? MONEY : MONIES), Name(who));
        } else {
! 	notify_format(player, T("You took %d %s from %s!"), abs(amount),
! 		      ((abs(amount) == 1) ? MONEY : MONIES), Name(who));
        }
        if (IsPlayer(who) && !silent) {
  	if (amount > 0) {
! 	  notify_format(who, T("%s gives you %d %s."), Name(player),
! 			amount, ((amount == 1) ? MONEY : MONIES));
  	} else {
! 	  notify_format(who, T("%s took %d %s from you!"), Name(player),
! 			abs(amount), ((abs(amount) == 1) ? MONEY : MONIES));
  	}
        }
        giveto(who, amount);
*** 1_7_5.188/src/predicat.c Wed, 06 Feb 2002 23:25:21 -0600 dunemush (pennmush/b/44_predicat.c 1.1.1.34.1.1.1.3.1.4.2.2 660)
--- 1_7_5.213(w)/src/predicat.c Thu, 04 Jul 2002 16:11:38 -0500 dunemush (pennmush/b/44_predicat.c 1.1.1.34.1.1.1.3.1.4.2.3 660)
***************
*** 183,190 ****
     */
  
    ATTR *d;
!   char buff[BUFFER_LEN], *bp, *sp;
!   char const *asave, *ap;
    int j;
    char *preserves[10];
    char *preserveq[NUMQ];
--- 183,190 ----
     */
  
    ATTR *d;
!   char buff[BUFFER_LEN], *bp, *sp, *asave;
!   char const *ap;
    int j;
    char *preserves[10];
    char *preserveq[NUMQ];
***************
*** 797,804 ****
    /* code for auto-return page - HAVEN, IDLE, and AWAY messages */
  
    ATTR *d;
!   char buff[BUFFER_LEN], *bp;
!   char const *asave, *ap;
    struct tm *ptr;
  
    if (message && *message) {
--- 797,804 ----
    /* code for auto-return page - HAVEN, IDLE, and AWAY messages */
  
    ATTR *d;
!   char buff[BUFFER_LEN], *bp, *asave;
!   char const *ap;
    struct tm *ptr;
  
    if (message && *message) {
*** 1_7_5.188/src/plyrlist.c Wed, 15 May 2002 20:41:03 -0500 dunemush (pennmush/b/46_plyrlist.c 1.5.1.2 660)
--- 1_7_5.213(w)/src/plyrlist.c Thu, 04 Jul 2002 16:11:38 -0500 dunemush (pennmush/b/46_plyrlist.c 1.5.1.2.1.1 660)
***************
*** 3,16 ****
  #include "config.h"
  
  #include <ctype.h>
- #ifdef I_STRING
  #include <string.h>
- #else
- #include <strings.h>
- #endif
- #ifdef I_STDLIB
  #include <stdlib.h>
! #endif
  #include "copyrite.h"
  
  #include "conf.h"
--- 3,11 ----
  #include "config.h"
  
  #include <ctype.h>
  #include <string.h>
  #include <stdlib.h>
! 
  #include "copyrite.h"
  
  #include "conf.h"
***************
*** 25,31 ****
  HASHTAB htab_player_list;
  
  static int hft_initialized = 0;
! static void init_hft _((void));
  
  static void
  init_hft()
--- 20,26 ----
  HASHTAB htab_player_list;
  
  static int hft_initialized = 0;
! static void init_hft(void);
  
  static void
  init_hft()
***************
*** 42,50 ****
  
  
  void
! add_player(player, alias)
!     dbref player;
!     char *alias;
  {
    if (!hft_initialized)
      init_hft();
--- 37,43 ----
  
  
  void
! add_player(dbref player, const char *alias)
  {
    if (!hft_initialized)
      init_hft();
***************
*** 55,62 ****
  }
  
  dbref
! lookup_player(name)
!     const char *name;
  {
    int p;
    void *hval;
--- 48,54 ----
  }
  
  dbref
! lookup_player(const char *name)
  {
    int p;
    void *hval;
***************
*** 86,94 ****
  }
  
  void
! delete_player(player, alias)
!     dbref player;
!     char *alias;
  {
    if (alias)
      hashdelete(strupper(alias), &htab_player_list);
--- 78,84 ----
  }
  
  void
! delete_player(dbref player, const char *alias)
  {
    if (alias)
      hashdelete(strupper(alias), &htab_player_list);
*** 1_7_5.188/src/mycrypt.c Wed, 06 Sep 2000 20:09:35 -0500 dunemush (pennmush/b/50_mycrypt.c 1.4 660)
--- 1_7_5.213(w)/src/mycrypt.c Thu, 04 Jul 2002 16:11:37 -0500 dunemush (pennmush/b/50_mycrypt.c 1.5 660)
***************
*** 28,37 ****
  #include "shs.c"
  #endif
  
! char *mush_crypt _((const char *key));
  char *
! mush_crypt(key)
!     const char *key;
  {
  #if (CRYPT_SYSTEM >= 2)
    SHS_INFO shsInfo;
--- 28,36 ----
  #include "shs.c"
  #endif
  
! char *mush_crypt(const char *key);
  char *
! mush_crypt(const char *key)
  {
  #if (CRYPT_SYSTEM >= 2)
    SHS_INFO shsInfo;
***************
*** 51,57 ****
  #if (CRYPT_SYSTEM >= 2)
    shsInfo.reverse_wanted = (BYTE) options.reverse_shs;
    shsInit(&shsInfo);
!   shsUpdate(&shsInfo, (BYTE *) key, strlen(key));
    shsFinal(&shsInfo);
    sprintf(crypt_buff, "XX%lu%lu", shsInfo.digest[0], shsInfo.digest[1]);
    return crypt_buff;
--- 50,56 ----
  #if (CRYPT_SYSTEM >= 2)
    shsInfo.reverse_wanted = (BYTE) options.reverse_shs;
    shsInit(&shsInfo);
!   shsUpdate(&shsInfo, (const BYTE *) key, strlen(key));
    shsFinal(&shsInfo);
    sprintf(crypt_buff, "XX%lu%lu", shsInfo.digest[0], shsInfo.digest[1]);
    return crypt_buff;
*** 1_7_5.188/src/move.c Fri, 10 May 2002 22:07:51 -0500 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.2 660)
--- 1_7_5.213(w)/src/move.c Thu, 04 Jul 2002 16:11:37 -0500 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.4 660)
***************
*** 4,14 ****
  #include "config.h"
  
  #include <ctype.h>
- #ifdef I_STRING
  #include <string.h>
- #else
- #include <strings.h>
- #endif
  
  #include "conf.h"
  #include "mushdb.h"
--- 4,10 ----
***************
*** 28,47 ****
  
  extern char ccom[BUFFER_LEN];
  
! void moveit _((dbref what, dbref where, int nomovemsgs));
! static void send_contents _((dbref loc, dbref dest));
! static void maybe_dropto _((dbref loc, dbref dropto));
! static dbref find_var_dest _((dbref player, dbref exit_obj));
! static void add_follower _((dbref leader, dbref follower));
! static void add_following _((dbref follower, dbref leader));
! static void add_follow _((dbref leader, dbref follower, int noisy));
! static void del_follower _((dbref leader, dbref follower));
! static void del_following _((dbref follower, dbref leader));
! static void del_follow _((dbref follower, dbref leader, int noisy));
! static char *list_followers _((dbref player));
! static char *list_following _((dbref player));
! static int is_following _((dbref follower, dbref leader));
! static void follower_command _((dbref leader, dbref loc, char *com));
  
  void
  moveto(what, where)
--- 24,43 ----
  
  extern char ccom[BUFFER_LEN];
  
! void moveit(dbref what, dbref where, int nomovemsgs);
! static void send_contents(dbref loc, dbref dest);
! static void maybe_dropto(dbref loc, dbref dropto);
! static dbref find_var_dest(dbref player, dbref exit_obj);
! static void add_follower(dbref leader, dbref follower);
! static void add_following(dbref follower, dbref leader);
! static void add_follow(dbref leader, dbref follower, int noisy);
! static void del_follower(dbref leader, dbref follower);
! static void del_following(dbref follower, dbref leader);
! static void del_follow(dbref follower, dbref leader, int noisy);
! static char *list_followers(dbref player);
! static char *list_following(dbref player);
! static int is_following(dbref follower, dbref leader);
! static void follower_command(dbref leader, dbref loc, const char *com);
  
  void
  moveto(what, where)
***************
*** 484,490 ****
    Exits(loc) = remove_first(Exits(loc), thing);
    Source(thing) = loc;
    PUSH(thing, Exits(loc));
!   notify(player, tprintf(T("%s is now the first exit."), Name(thing)));
  }
  
  
--- 480,486 ----
    Exits(loc) = remove_first(Exits(loc), thing);
    Source(thing) = loc;
    PUSH(thing, Exits(loc));
!   notify_format(player, T("%s is now the first exit."), Name(thing));
  }
  
  
***************
*** 526,539 ****
  	  (controls(player, thing) ||
  	   (EnterOk(Location(thing)) &&
  	    eval_lock(player, Location(thing), Enter_Lock)))) {
! 	moveto(thing, player);
! 	notify(Location(thing),
! 	       tprintf(T("%s was taken from you."), Name(thing)));
  	notify_format(thing, T("%s took you."), Name(player));
  	sprintf(tbuf1, T("You take %s from %s."), Name(thing),
  		Name(Location(thing)));
  	sprintf(tbuf2, T("takes %s from %s."), Name(thing),
  		Name(Location(thing)));
  	did_it(player, thing, "SUCCESS", tbuf1, "OSUCCESS", tbuf2, "ASUCCESS",
  	       NOTHING);
  	myenv[0] = (char *) mush_malloc(BUFFER_LEN, "dbref");
--- 522,535 ----
  	  (controls(player, thing) ||
  	   (EnterOk(Location(thing)) &&
  	    eval_lock(player, Location(thing), Enter_Lock)))) {
! 	notify_format(Location(thing),
! 		      T("%s was taken from you."), Name(thing));
  	notify_format(thing, T("%s took you."), Name(player));
  	sprintf(tbuf1, T("You take %s from %s."), Name(thing),
  		Name(Location(thing)));
  	sprintf(tbuf2, T("takes %s from %s."), Name(thing),
  		Name(Location(thing)));
+ 	moveto(thing, player);
  	did_it(player, thing, "SUCCESS", tbuf1, "OSUCCESS", tbuf2, "ASUCCESS",
  	       NOTHING);
  	myenv[0] = (char *) mush_malloc(BUFFER_LEN, "dbref");
***************
*** 721,727 ****
    }
    enter_room(player, Location(loc), 0);
    if (Location(player) != loc)
!     follower_command(player, loc, (char *) "leave");
  }
  
  dbref
--- 717,723 ----
    }
    enter_room(player, Location(loc), 0);
    if (Location(player) != loc)
!     follower_command(player, loc, "leave");
  }
  
  dbref
***************
*** 821,829 ****
      add_follow(leader, player, 1);
    } else {
      /* List followers */
!     notify(player, tprintf(T("You are following: %s"), list_following(player)));
!     notify(player,
! 	   tprintf(T("You are followed by: %s"), list_followers(player)));
    }
  }
  
--- 817,824 ----
      add_follow(leader, player, 1);
    } else {
      /* List followers */
!     notify_format(player, T("You are following: %s"), list_following(player));
!     notify_format(player, T("You are followed by: %s"), list_followers(player));
    }
  }
  
***************
*** 982,988 ****
    add_following(follower, leader);
    if (noisy) {
      strcpy(msg, tprintf(T("You begin following %s."), Name(leader)));
!     notify(leader, tprintf(T("%s begins following you."), Name(follower)));
      did_it(follower, leader, "FOLLOW", msg, "OFOLLOW", NULL,
  	   "AFOLLOW", NOTHING);
    }
--- 977,983 ----
    add_following(follower, leader);
    if (noisy) {
      strcpy(msg, tprintf(T("You begin following %s."), Name(leader)));
!     notify_format(leader, T("%s begins following you."), Name(follower));
      did_it(follower, leader, "FOLLOW", msg, "OFOLLOW", NULL,
  	   "AFOLLOW", NOTHING);
    }
***************
*** 1040,1046 ****
    del_following(follower, leader);
    if (noisy) {
      strcpy(msg, tprintf(T("You stop following %s."), Name(leader)));
!     notify(leader, tprintf(T("%s stops following you."), Name(follower)));
      did_it(follower, leader, "UNFOLLOW", msg, "OUNFOLLOW", NULL,
  	   "AUNFOLLOW", NOTHING);
    }
--- 1035,1041 ----
    del_following(follower, leader);
    if (noisy) {
      strcpy(msg, tprintf(T("You stop following %s."), Name(leader)));
!     notify_format(leader, T("%s stops following you."), Name(follower));
      did_it(follower, leader, "UNFOLLOW", msg, "OUNFOLLOW", NULL,
  	   "AUNFOLLOW", NOTHING);
    }
***************
*** 1158,1164 ****
      if (GoodObject(flwr)) {
        del_following(flwr, leader);
        if (noisy)
! 	notify(flwr, tprintf(T("You stop following %s."), Name(leader)));
      }
    }
    (void) atr_clr(leader, "FOLLOWERS", GOD);
--- 1153,1159 ----
      if (GoodObject(flwr)) {
        del_following(flwr, leader);
        if (noisy)
! 	notify_format(flwr, T("You stop following %s."), Name(leader));
      }
    }
    (void) atr_clr(leader, "FOLLOWERS", GOD);
***************
*** 1185,1191 ****
      if (GoodObject(ldr)) {
        del_follower(ldr, follower);
        if (noisy)
! 	notify(ldr, tprintf(T("%s stops following you."), Name(follower)));
      }
    }
    (void) atr_clr(follower, "FOLLOWING", GOD);
--- 1180,1186 ----
      if (GoodObject(ldr)) {
        del_follower(ldr, follower);
        if (noisy)
! 	notify_format(ldr, T("%s stops following you."), Name(follower));
      }
    }
    (void) atr_clr(follower, "FOLLOWING", GOD);
***************
*** 1195,1204 ****
   * leader, run the same command the leader just ran.
   */
  static void
! follower_command(leader, loc, com)
!     dbref leader;
!     dbref loc;
!     char *com;
  {
    dbref follower;
    ATTR *a;
--- 1190,1196 ----
   * leader, run the same command the leader just ran.
   */
  static void
! follower_command(dbref leader, dbref loc, const char *com)
  {
    dbref follower;
    ATTR *a;
*** 1_7_5.188/src/match.c Tue, 09 Apr 2002 11:29:01 -0500 dunemush (pennmush/c/2_match.c 1.25 660)
--- 1_7_5.213(w)/src/match.c Thu, 04 Jul 2002 16:11:37 -0500 dunemush (pennmush/c/2_match.c 1.24.1.1.1.2 660)
***************
*** 94,106 ****
  			     const int type, const long int flags,
  			     dbref *last_match, int *match_count);
  static dbref match_english(const dbref who, const char *name,
! 			   const int type, 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);
  
  
- 
  /* A wrapper for returning a match, AMBIGUOUS, or NOTHING
   */
  dbref
--- 94,105 ----
  			     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);
  
  
  /* A wrapper for returning a match, AMBIGUOUS, or NOTHING
   */
  dbref
***************
*** 252,258 ****
    }
    if ((flags & MAT_ENGLISH) && !GoodObject(last_match)
        && !GoodObject(exact_match)) {
!     match = match_english(who, name, type, flags);
      if (GoodObject(match)) {
        exact_match_count++;
        exact_match = match;
--- 251,257 ----
    }
    if ((flags & MAT_ENGLISH) && !GoodObject(last_match)
        && !GoodObject(exact_match)) {
!     match = match_english(who, name, flags);
      if (GoodObject(match)) {
        exact_match_count++;
        exact_match = match;
***************
*** 525,534 ****
  }
  
  static dbref
! match_english(who, name, type, flags)
      const dbref who;
      const char *name;
-     const int type;
      const long int flags;
  {
    int do_loc;
--- 524,532 ----
  }
  
  static dbref
! match_english(who, name, flags)
      const dbref who;
      const char *name;
      const long int flags;
  {
    int do_loc;
***************
*** 619,627 ****
      }
      matchnum = 0;
      DOLIST(item, item) {
!       if ((Typeof(item) & type)
! 	  && (!strcasecmp(Name(item), dupname)
! 	      || string_match(Name(item), dupname))) {
  	matchnum++;
  	if (matchnum == num) {
  	  mush_free(p, "string");
--- 617,624 ----
      }
      matchnum = 0;
      DOLIST(item, item) {
!       if (!strcasecmp(Name(item), dupname)
! 	  || string_match(Name(item), dupname)) {
  	matchnum++;
  	if (matchnum == num) {
  	  mush_free(p, "string");
*** 1_7_5.188/src/look.c Mon, 29 Apr 2002 13:41:26 -0500 dunemush (pennmush/c/4_look.c 1.21.1.2.1.3 660)
--- 1_7_5.213(w)/src/look.c Thu, 04 Jul 2002 16:11:37 -0500 dunemush (pennmush/c/4_look.c 1.21.1.2.1.4 660)
***************
*** 80,87 ****
    a = atr_get(loc, "EXITFORMAT");
    if (a) {
      char *wsave[10], *rsave[NUMQ];
!     char *arg, *buff, *bp;
!     char const *sp, *save;
      int j;
  
      arg = (char *) mush_malloc(BUFFER_LEN, "string");
--- 80,87 ----
    a = atr_get(loc, "EXITFORMAT");
    if (a) {
      char *wsave[10], *rsave[NUMQ];
!     char *arg, *buff, *bp, *save;
!     char const *sp;
      int j;
  
      arg = (char *) mush_malloc(BUFFER_LEN, "string");
***************
*** 256,263 ****
    a = atr_get(loc, "CONFORMAT");
    if (a) {
      char *wsave[10], *rsave[NUMQ];
!     char *arg, *buff, *bp;
!     char const *sp, *save;
      int j;
  
      arg = (char *) mush_malloc(BUFFER_LEN, "string");
--- 256,263 ----
    a = atr_get(loc, "CONFORMAT");
    if (a) {
      char *wsave[10], *rsave[NUMQ];
!     char *arg, *buff, *bp, *save;
!     char const *sp;
      int j;
  
      arg = (char *) mush_malloc(BUFFER_LEN, "string");
***************
*** 628,634 ****
    char *r;
    dbref content;
    dbref exit_dbref;
!   char *real_name = NULL, *attrib_name = NULL;
    char *tp;
    char *tbuf;
    int ok = 0;
--- 628,635 ----
    char *r;
    dbref content;
    dbref exit_dbref;
!   const char *real_name = NULL;
!   char *attrib_name = NULL;
    char *tp;
    char *tbuf;
    int ok = 0;
***************
*** 645,651 ****
        *attrib_name = '\0';
        attrib_name++;
      }
!     real_name = (char *) name;
      /* look it up */
      if ((thing =
  	 noisy_match_result(player, real_name, NOTYPE,
--- 646,652 ----
        *attrib_name = '\0';
        attrib_name++;
      }
!     real_name = name;
      /* look it up */
      if ((thing =
  	 noisy_match_result(player, real_name, NOTYPE,
***************
*** 675,681 ****
       */
      tp = tbuf;
      safe_str(object_header(player, thing), tbuf, &tp);
!     safe_str((char *) T(" is owned by "), tbuf, &tp);
      safe_str(object_header(player, Owner(thing)), tbuf, &tp);
      *tp = '\0';
      notify(player, tbuf);
--- 676,682 ----
       */
      tp = tbuf;
      safe_str(object_header(player, thing), tbuf, &tp);
!     safe_str(T(" is owned by "), tbuf, &tp);
      safe_str(object_header(player, Owner(thing)), tbuf, &tp);
      *tp = '\0';
      notify(player, tbuf);
***************
*** 758,764 ****
        look_exits(player, thing, T("Obvious exits:"));
      tp = tbuf;
      safe_str(object_header(player, thing), tbuf, &tp);
!     safe_str((char *) T(" is owned by "), tbuf, &tp);
      safe_str(object_header(player, Owner(thing)), tbuf, &tp);
      *tp = '\0';
      notify(player, tbuf);
--- 759,765 ----
        look_exits(player, thing, T("Obvious exits:"));
      tp = tbuf;
      safe_str(object_header(player, thing), tbuf, &tp);
!     safe_str(T("