pennmush/game/
pennmush/game/data/
pennmush/game/log/
pennmush/game/save/
pennmush/game/txt/evt/
pennmush/game/txt/nws/
pennmush/os2/
Changes from 1.6.9p1 to 1.7.0p11

[RLM] is Ralph Melton, a PennMUSH developer
[TAP] is T. Alexander Popiel, a PennMUSH developer
[AKM] is Alan Kree McElrath, sourcehack for GohsMUSH.
[NJG] is Nick Gammon, the Win32 porter
[PeaK] is Pavel Kankovsky, another sourcehack.
[MPC] is Matt Chatterley, YAsourcehack
[2.2] refers to code which originated with the TinyMUSH 2.2 developers

==========================================================================

Version 1.7.1 patchlevel 3                    January 12, 1998

Minor Changes:
       * A file called MANIFEST is now distributed. Configure uses this.
         Don't mess with it unless you know what you're doing.
       * An additional note for those upgrading from versions before
         1.7.0p9, describing an anomaly with player parents and how
         to handle it has been added to README. Report by Roger Christie.

Fixes:
       * controls() now requires that the function caller control
         the object named in the first argument. Suggested by TN.
       * Player parents were being cleared at every login.
         Fixed by Jonathan Booth.
       * effect should be affect in game/txt/newuser.txt. 
         Reported by Jason Young.
       * hints file for OS/2 now included. Suggestions by Sylvia.
       * FNDELAY changed to O_NDELAY in ident.c. Suggested by Sylvia.
       * Minor change to time_format_1 to make 64bit SGI happier.
         By Thaddeus Parkinson.
       * Help for inc()/dec() improved. Suggested by Jonathan Booth.


Version 1.7.1 patchlevel 2                    January 5, 1998

Fixes:
       * References to TinyMUSH in the .txt files are now PennMUSH.
         Reported by Corum.
       * It was possible to use @name to create players with the same
         name. Ick. Reported by Sylvia.
       * utils/mkcmds.sh now produces a preindented switchinc.c,
         to match the one that gets diffed in patches. [TAP]


Version 1.7.1 patchlevel 1                    December 29, 1997

Fixes:
        * table() now behaves with ANSI_JUSTIFY. Reported by Jonathan Booth.
        * ident.c was defining strdup; so was strutil.c. Now only
          strutil.c does. Reported by Matt Philips. [TAP]
        * Bug in restart script fixed. [TAP]
        * shs.h patched to autoconfigure endianness. Reported by TN.
        * shs.h fixed to be idempotent. [TAP]
        * shs.h is now distributed with PennMUSH. You still have to get
          shs.c from export.pennmush.org if you want it.
        * README now refers to lists.pennmush.org. [TN]
        * We no longer recommend setting use_dns to no on win32 systems.
          It seems to work fine as yes.


Version 1.7.1 patchlevel 0                    December 21, 1997

Major Changes:
        * It is no longer necessary to edit src/Makefile when building.
          RWHO is now integrated, and totally runtime configured in mush.cnf.
          IDENT is now configured from dune.h. The IDENT/ and RWHO/
          directories are no more.
        * The win32 build now requires the gnu-win32 package
          (available at XXX). It can be built either with MSVC++
          or the free win32 version of gcc included with gnu-win32.
          The build is better integrated into the distribution --
          the win32/ directory is no more. [TAP]
        * You can now build with one of 3 password-encryption schemes:
          None, Unix (des) crypt(3), and shs (requires getting shs from
          export.pennmush.org). This will be useful to folks who're using
          shs encryption on Win32 platforms and then move their db to
          a Unix platform -- they can just use shs under Unix and all's well.
          This is set as CRYPT_SYSTEM in options.h
        * @log/wipe used to require entering the game account password,
          but that's non-portable. Instead, a "log_wipe_passwd" is now
          specified in mush.cnf.
        * README rewritten [TAP]

Minor Changes:
        * @lock/drop on a room now controls who can drop things in the room.
        * "configure" (lower-case 'c'), a wrapper for Configure that used
          to be included is no longer. Few used it, and it can screw up
          win32 systems that aren't case-sensitive.

Fixes:
	* blind_page was written as blindpage in game/mushcnf.dst.
          Reported by Raevnos@ShadowMist.
	* udefault() was broken. Reported by John Hutchinson
        * Some lintwork in csrimalloc.c, to get rid of signed/unsigned
          warnings and others.
        * help @list fixed to show the correct @config switches.
          Reported by Leo@ATS TrekMUSH
        * @chan/gag now works correctly. Report by Vedui.


Version 1.7.0 patchlevel 11                    November 18, 1997

Fixes:
        * Help for remove() updated. Reported by Vedui@Robotech.
        * hasattr() didn't check if the invoker had permission to read
          the attribute. Reported by Vedui@Robotech.


Version 1.7.0 patchlevel 11                    November 18, 1997

Commands:
        * page/blind produces a separate page to each person paged,
          so they can't tell if the page was a multipage. This is the
          same as the default PennMUSH page behavior (but see Options)

Options:
        * New mush.cnf option 'blind_page'. If 'yes', page defaults to 
          page/blind.  If 'no', page defaults to page/list. By popular 
          request. :)
        * New dune.h option MUSH_IP_ADDR. Define if your host system has
          multiple IP addresses to specify which address to listen on
          for connections. By Bobby Bailey (Chil).

Minor Changes:
        * All calls to isalnum replaced with isalpha || isdigit, because
          some linux systems appear to have a broken isalnum!
        * For some reason, the variable name 'restrict' in fun_lsearch
          broke compilation on James Cook's system. Gwennie@SNW fixed
          this by changing the name. Ok, I've changed the name, too,
          as a preventative measure. *shrug*
        * When a player can't connect because logins are disabled or
          the MUSH is full, we no longer (a) show a disconnect message
          to MONITOR players, (b) purge the player's mail anyway, or
          (c) show the player quit.txt in addition to full.txt/down.txt.
          Suggested by John Hutchinson.

Fixes:
        * When a halted player triggers a $command *:, %0 was including
          an initial space that wasn't being trimmed. Reported by
          Jonathan Booth. [TAP]
        * functions() works right again. Patch by Atuarre@ATS TrekMUSH
        * look/out allowed looking at any db#. Reported by Lews Therin@DDM

Version 1.7.0 patchlevel 10                    October 30, 1997

Minor Changes:
        * Players can now have @parents. Inspired by AJ Prowant.

Fixes:
        * @drain was doing @notify instead. Ick. Reported by Amberyl.
        * Royalty can @boot, as the help suggests. Reported by Vedui@Robotech
        * (Hopefully current) copies of hdrs/funs.h and hdrs/cmds.h are
          kept in the win32/ directory for win32 folks who don't have
          a Bourne shell and can't run utils/mkcmds.sh.


Version 1.7.0 patchlevel 9                    October 16, 1997

Fixes:
        * @clone could corrupt the db on some machines in some cases. 
          Report by Jonathan booth. [TAP]
        * @list attribs now works. Report by Corum@StormWorld.

          
Version 1.7.0 patchlevel 8                    October 15, 1997

Fixes:
        * Hopefully the final command_parse fix. 


Version 1.7.0 patchlevel 7                    October 15, 1997

Fixes:
        * The ANSI_JUSTIFY patch got left out somewhere. It's back.
          Report by John Hutchinson.
        * +channel and exits are broken in 1.7.0p6 due to our stupidity.
          Fixed again. Report by John Hutchinson.
        * @cemit was restricted to Wizards, and should have been restricted
          to Wiz or Royal. Fixed. Reported by Vedui@Robotech.


Version 1.7.0 patchlevel 6                    October 9, 1997

New Functions:
        * cand(), cor() are short-circuit boolean functions. Suggested by
          Flame who saw reference to them in a patch to TinyMUX. [TAP]
        * if() and ifelse() do about what you'd expect. Suggested by
          a number of people. [TAP]

Minor Changes:
        * Prototypes for the functions in src/local.c are now in
          hdrs/externs.h
        * round(.15,1) = .1 on many systems due to the floating point
          representation. A tiny kludge around this is now in place.
          Reported by Flame.
        * @command/disable say now disables " as well. The same applies
          to other single-character command forms. If you disable SAY,
          commands of the form "hi! are rewritten as: say hi! before
          being passed to the checker for user-defined commands
          so you need only set up $say *: to catch both. %c will, as always,
          contain the raw command as entered (i.e. "hi!). Aliases
          (like 'p' for page) are treated similarly when the aliased
          command is disabled -- you need only match $page *. [TN]
        * The Huffman compression algorithm is now 8-bit clean, in 
          preparation for a future internationalization of PennMUSH
          (Eh? Dite "help" pour aide. :) In addition, none of the compression
          algorithms treat the first character of a compressed string
          specially anymore -- they don't have to. [TAP]
        * The customize.pl script no longer copies over all the distribution
          help files from game/txt/hlp. Instead it makes customdir/txt/hlp
          into a link to game/txt/hlp, which is a good thing when future
          patches update the help files. Dedicated to Oleo.

Fixes:
        * @list/attribs showed many duplicate attribute names.
          Reported by John Hutchinson.
        * Fixed a mislabeling of allocated memory by htab.c, so mem_check
          stats will be correct.
        * @channel/gag now works.


Version 1.7.0 patchlevel 5                    October 1, 1997

Minor Changes:
        * New os2/ subdirectory with information for those looking to
          build under OS2. Maintained by Sylvia (penn-os2@pennmush.tinymush.org)

Fixes:
        * Examine/brief could sometimes cause crashes. Reported by
          Sean Fike. [TN]
        * cmds.c and command.c didn't do the right #includes for the
          original chat system. Reported by Magus.
        * Added help for @shutdown/paranoid. Reported by Sean Fike
        * @chan/decompile on a nonexistant channel didn't return an
          error. Reported by Mike Wesson


Version 1.7.0 patchlevel 4                    September 19, 1997

New command:
        * The @shutdown command now takes a /paranoid switch
          to perform a paranoid dump when shutting down
          (or rebooting, if given with /reboot as well). Idea by Flame.

New options:
        * You can define the MAILER option in dune.h to be
          something other than sendmail if you want to put a
          wrapper around the mailing program used to send out
          passwords to players using the 'register' command.
        * If you define LOCAL_DATA in options.h, you can 
          use functions in local.c to maintain your own data structures
          associated with each db object. [TN]
        * If you define the TINY_TRIM_ORDER option in dune.h,
          the trim() function takes arguments like TinyMUSH's.
        * If you define ANSI_JUSTIFY in options.h, the rjust, ljust,
          and center functions will ignore ansi codes when computing
          where the string should be placed, so they'll work right for
          strings with ansi. Wadhah Al-Tailji contributed a patch
          for this concept. TN wrote this particular implementation.

Fixes:
        * rnum() didn't find exits properly. Reported by Vedui.
        * Null channels would get added if the chatdb's channel count
          got unsync'd with the actual number of channels in the chatdb.
          Reported by Matt@New England: The Reckoning.
        * @wcheck/all didn't work. Report by Wolverine@Holodeck1
        * HPUX needs _XOPEN_SOURCE_EXTENDED in the hints. Report by Angel.
        * db reading error messages are slightly more verbose.
          Suggested by Flame.
        * Mortals examining DARK rooms don't see contents anymore.
          Report by Jonas Oberg. [TN]
        * Attribute names may no longer contain the caret (^) character.
          It's a security risk. Noted by Rob Wilson.
        * hdrs/funs.h was being appended to, not rebuilt. Noted
          by John Hutchinson.
        * setunion fixed again, so that setunion(a a,) correctly
          returns 'a', not 'a a'. [TN]
        * Various references to mellers1 updated to pennmush.tinymush.org.
        * COPYRITE file added to explain a couple of the unclear
          points in hdrs/copyrite.h and to serve as a pointer.
        * @chan/rename didnt work. Reported by Jonathan Booth.
        * Help for entrances() updated by Naomi Novik
        * Players no longer hear about all the channels they're
          no longer gagged on when they disconnect. Report by
          Naomi Novik.
        * The time noted in the LAST attribute now will always
          have day numbers 01-31 instead of 1-31, just like time()
          does. This makes convtime() work better on LAST for some
          systems. Reported by Valin@PernMUSH.
        * MUSHcoding a command called $attr * would crash the MUSH.
          Fixed. Reported by Sam Knowlton. [TN]
        * Disabling say now disables ", (same for pose, semipose,
          emit, and chat and their corresponding tokens).
          Reported by Flame.
        * The hint for Dec Alpha OSF now indicates that you need to
          use native malloc. Reported by Sean Fike.
        * We now check for the assert() macro in Configure. NetBSD may
          not have it, according to Logan Five.
        * Doing a LOGOUT after a @shutdown/reboot caused crashes
          because mail pointers weren't being reset.


Version 1.7.0 patchlevel 3                    August 13, 1997

Fixes:
        * setunion(,list) should work now.
        * @wall/wizard and @wall/royalty work right. Report by Alan T. [TN]


Version 1.7.0 patchlevel 2                    August 12, 1997

Fixes:
        * Linux 2 is now instructed not to use nm to find objects
          in libraries since its nm output doesn't seem to be
          BSD compatible or something.
        * Compile with CSRI malloc in debugging mode didn't work.
          Reported by TwinSuns MUSH.
        * Exits in transparent rooms with COMMA_EXIT_LIST had
          vanished. They're back! [TN]
        * More command parser bugs ironed out. [TN]
        * 'e' is examine, 'b' is brief, 'w' is whisper
           (unless you reserve them). [TN]
        * @config said conflicting things about possessive get.
          Report by Jonas Oberg.
        * When not using @prefix, audible messages were prefixed
          with "From <source>" instead of "From <source>,".
          Fixed. Report by Jonas Oberg.


Version 1.7.0 patchlevel 1                    August 7, 1997

Minor Changes:
        * New file local.c (from local.dst) makes more local hooks
          available. Some of the hooks in command.c have been moved
          here, so you may have to mess around a bit if you've already
          added things in command.c's local_startup or local_shutdown. [TN]
        * Functions can now be defined and added all within funlocal.c
          so you don't have to muck with the function.c table. [TN]

Fixes:
        * restrict_command didn't restrict commands to God correctly.
          Reported by Jason Newquist.
        * @command indicates if commands are restricted to God.
        * When COMMA_EXIT_LIST was defined, rooms with no exits
          still showed the "Obvious Exits:" message. Report by Michael Rudel.
        * Partial switch-matching for commands is back.
          And CMD_T_NEWSTYLE is gone. [TN]
        * Makefile doesn't clobber existing funlocal.c/cmdlocal.c
          any more. Report by Jason Young.
        * inv wasn't working for inventory, and other command aliasing
          flaws are fixed. Report by Corum. [TN]
        * MUSH wouldn't compile if PLAYER_LOCATE wasn't defined. Fixed.
          Report by Alan T.
        * Some leftover defines removed from game.c and mushcnf.dst
        * @lock didn't parse right. Fixed. Report by Corum.


Version 1.7.0 patchlevel 0                    July 31, 1997

The major goals of this release are to make what used to be
compile-time options into run-time options, and improve a number
of internals.

Major Changes:  

        * The hashtable functions from TinyMUSH (htab.c/htab.h) are
          now used by PennMUSH (with permission), so instead of 
          every subsystem writing its own hashtable code, they now
          all use the standard code.

        * The giant switch in game.c has been replaced by hashtabled
          commands. [TN] 
          Groovy new features:
          * @command/enable and @command/disable for any command
          * Multiple switches (@pemit/noeval/silent) work
          * The left side of the = is always evaluated before
            the right (previously, this was compiler-dependent).
          * Command table is built during compilation, and there's 
            a standardized command interface, so adding commands
            is easier.
          * local.c contains hooks for local routines to run
            on startup and shutdown, and to use to add new commands.

        * Configuration options which restricted or disabled commands
          (READ, NO_KILL, ROBBERS, HATE_TOAD, ROY_FIND, HARSH_GUEST,
          SITELOCK_COMMAND) have been replaced the 'restrict_command'
          directive in mush.cnf. Check there and be sure things are
          set the way you want them!

        * Commands may be overridden by completely disabling them,
          and providing a MUSHcoded version instead.
            
        * Ident and DNS lookups are handled by a slave process
          if possible. [TAP]

        * The help files have been rewritten by Naomi Novik!

        * The MUSH now closes and reopens the log files when it
          receives a SIGHUP signal. [TAP]

        * @shutdown/reboot will dump the database and restart the
          MUSH without disconnecting the players. So will a USR1 signal.
          Good for patching in new source code on the fly. Based on the 
          patch by Cro@Spaceballs which is itself based on ideas from
          TinyMUX. This may be nonportable - if it fails on your OS, 
          pennmush-bugs@pennmush.tinymush.org would like to hear about it. 
          [TAP]

New commands:
        * @command (see above)
        * @list/commands
        * @attribute, similar to Tinymush (but doesn't save data
          across shutdowns at this point, so you've got to use it
          on an @startup!). Also @list/attribs.
        * @function/delete 
        * @channel/gag <channel>=<yes|no>, keeps you on the channel
          (preserving your title, etc.) but silences it so you don't 
          hear messages. The channel is automatically ungagged if
          you log out from the MUSH.
        * @conformat and @exitformat allow custom-formatted Contents:
          and exit lists. [2.2,TAP]

Minor Changes:
        * Configure now looks for libbind.a, the BIND 8.1 library
        * @config shows more of the configuration options
        * @mail/unfolder <folder> can be used to remove a mailfolder's name.
          Suggested by Julianna Barrenson.
        * The default malloc is now CSRImalloc, which is now distributed
          in a single-file form with the MUSH. 
        * The MALLOC define in src/Makefile has been removed.
          Unlike MALLOC_D and MALLOC_O, it didn't do anything.
        * The "CHANGES" file now contains only the current
          version's changes. Older changes are in the 
          "CHANGES.OLD" file.
        * The attribute flag AF_ODARK is now assumed to be default, 
          and is thus no longer used or stored. Instead, AF_VISUAL
          is used to indicate a visual attribute (previously, this
          was indicated by the absence of AF_ODARK). To note this
          change in the db, a new DBF constant, DBF_AF_VISUAL,
          has been defined.
        * Code for "privilege tables" (like chat channel privs, 
          attribute flags, etc.) has been centralized into privtab.c

Fixes: 
        * Locks on zone exits now evaluate with the right enactor.
          Problem noted by Leonid Korogodsky. [TAP]
        * Win32 compatibility improvements. [TAP]
        * Prefer limits.h to values.h. Suggested by Atuarre.
        * SIGCHLD and SIGCLD now both work. Noted by Naomi Novik
        * If you idle out and get hidden, only the idle descriptor
          should get hidden. Noted by Gepht@Hemlock
        * With DBF_LESS_GARBAGE, garbage objects were loaded with
          owner NOTHING instead of owner GOD, which could cause
          crashes in the @mail code. Reported by Harvester@StarWars.
        * Problems with getrandom() on some systems fixed.
        * Help for dist3d() clarified. Reported by 
          Kova'khan@Among the Stars TrekMUSH via Leo at the same MUSH.
        * You may now use power() for integral powers of negative
          numbers. Suggested by John Hutchinson.
        * setunion(,test,|) used to return |test, now returns test.
          Reported by Ashford @ V MUSH
        * SAFER_UFUN now blocks non-God eval'ing a u() on God.
          Reported by MRR@ATS
        * Building with SunOS cc and COMPRESSION_TYPE 0 works now. 
          Reported by Jonas Oberg.

Personnel Changes:
        * Ralph Melton has retired as a member of the PennMUSH 
          devteam. Alex and Javelin send him best wishes and big
          thanks for all his work. Replacing Ralph will be
          Thorvald Natvig. Welcome aboard, TN!
Version 1.6.10 patchlevel 6		      May 11, 1997

Fixes:
	* inc() and dec() didn't work right with NULL_EQ_ZERO.
	  Fixed. Report by Dennis DeMarco


Version 1.6.10 patchlevel 5		    April 29, 1997

New Commands:
	* @channel/title sets a player's title for a channel.
	  The title appears prepended to their name.
	  I forgot this, and Thorvald Natvig noticed.

Minor Changes:
	* The inc() and dec() functions can now increment and
          decrement strings that end in integers. For example:
	  inc(LINE_10) => LINE_11
          inc(LINE-10) => LINE-9   (incrementing -10)
	  inc(LINE1.9) => LINE1.10 (incrementing the 9)
	* The LOWER_MATH option has been removed. Everybody
	  gets shr(), shl(), inc(), and dec().
	* New attributes OIDESCRIBE and AIDESCRIBE do what you'd 
	  expect for the internal descs of objects. Suggested
	  by Stacy Robinson.
	* @chan/on by a Wizard always succeeds, even if there's a 
	  join lock. Suggested by Mike Wesson.
	* Enhanced protection against malicious ANSI codes.
	* @channel/decomp displays locks in a better format.
	  Suggested by Naomi Novik.
	* Numbers are now checked to be sure they're not so
	  large as to bring down the system, at least in theory.
	  Suggested by Atuarre.
	* Configure rebuilt under dist-3.0 pl70.
	* queue_write has been modified to reduce the number of
	  packets sent out on the net; it only sends when needful
	  and lets the usual output loop handle most output.
	  The many packets issue was noted by Doogie.
	* All references to "parent rooms" have been changed to
	  "zone master rooms" for clarification. Noted by Jonas Oberg.

Fixes: 
	* Long output should no longer cause NeXT
	  systems to disconnect the user. Fix by Mike Kienenberger
	* Long output should no longer cause Win32 systems to
	  disconnect, but it will throw out the beginning of 
	  the output. Fix by Hans Engelen.
	* Bad objects on chat channels are now removed when the
	  chatdb is loaded. Suggested by Dennis De Marco.
	* help for last() added. Report by Flame.
	* Objects couldn't be added to object channels. Fixed.
	* If a site matched in access.cnf, but didn't specify 
	  a certain access rule, a later matching site could. This
	  is bad for 'register', and not what was intended (that
	  a matching site completely controls that site's access).
	  Now fixed. Report by William Browning.
	* If you're on a channel but don't pass the see-lock,
	  @chan/who returns a better error. Report by Cro.
	* help for remove() now mentions delimiters. Noted by J. Wilcox.
	* All tabs in helpfiles replaced with spaces. [TAP]
	* Loading a db that didn't have garbage objects stored
	  caused a slew of warnings about null names. Should be fixed
	  now. Reported by Atuarre.
	* FreeBSD hints improved, thanks to Atuarre and Doogie.


Version 1.6.10 patchlevel 4		    March 3, 1997

Major Changes:
	* The disk db can now be dumped without including GARBAGE
	  objects, which may make it somewhat smaller. [TAP]

Minor Changes:
	* The %? substitution returns the current function invocation
	  count and recursion depth as two space-separated numbers. [TAP]
	* dig() can take a single argument instead of 3.

Fixes:
	* set(obj/attr,flag) no longer says "Set" when the object or
	  player is QUIET. Reported by Graywolf.
	* Search_All players couldn't use @search. Now they can.
	  Reported by Cro.
	* lnum(2,1) didn't work right, and things were broken with
	  floating point args to lnum. Fixed.


Version 1.6.10 patchlevel 3		 February 9, 1997

New function:
	* graball() as per TinyMUSH 2.2. [TAP]

Fixes:
	* On some systems, make clean would go into an infinite loop
	  if src/CSRI didn't exist. This should now be fixed.
	  Report by Cro@Spaceballs.
	* Restart script now looks for minimal.db.gz if minimal.db.Z
	  can't be found. This helps people running under Mklinux
	  on Power Macs(!). Report by Jason Newquist.
	* Fix to matchall(). [TAP]
	* move.o doesn't compile if FIXED_FLAG isn't defined.
	  Noted by Andy Jalics.



Version 1.6.10 patchlevel 2		 February 2, 1997

Minor Changes:
	* If forking to do dumps, lower the priority of the dumping 
          process to keep the parent process more responsive.
	  Based on a patch by Doogie@ATS TrekMUSH.

Fixes:
	* Code cleanup and fixes to comp_w.c. Problems reported by
	  Mike@TBFF
	* Portability fixes for alpha-linux systems. Thanks to Roger
	  Chen for facilities to work on this.
	* Added help for @dump/debug. Report by Flame.
	* Note added to game/txt/Makefile about braindead Irix 6.2 make
	* Ident source files now do better #ifdef'ing of Unix include
	  files to help out Win32. 
	* Configure changes to enhance portability.


Version 1.6.10 patchlevel 1		 January 25, 1997


Commands: 
	* New command: @dump/debug. Like @dump/paranoid, but
	  it also tries to fix the memory db, so a shutdown/restart
	  may not be necessary. It is never forked. Suggested by Atuarre.

Fixes:
	* externs.h now declares crypt() as char *, not const char *.
	* free_access_list's declaration is now K&R compatible again.
	* repeat() now doesn't work with a null string, which prevents
          a denial of service attack. Report by Atuarre. [TAP]
	* Fencepost error in huffman compression code fixed.
	  Report by Mike Wesson. [TAP]
	* idlesecs() is now referenced in pennfunc.hlp. Report by Flame.
	* parse() is now referenced in pennfunc.hlp. Report by Sandi Fallon.
	* lsearch() now gives the correct types in the help.
	  Report by Sandi Fallon.
	* Halted messages now indicate the object that was halted,
          even if they are halted as the result of a chown.
	  Report by Sandi Fallon.


Version 1.6.10 patchlevel 0		 December 16, 1996

Major Changes:
	* The attribute matching order has been cleaned up. Code by [TAP]
	  If you do ex obj/attribpattern, and...
	  1. If attribpattern has no wildcards:
	     a. Return attribpattern's value if set, else
	     b. Return the value of an aliased attribute, if any.
	  2. If attribpatern has wildcards:
	     a. Return anything which matches the pattern, and
	        don't bother about aliases.

	Here's a little example:
                     only DESC set   only DESCRIBE set    both set
ex foo/desc          DESC            DESCRIBE             DESC
ex foo/desc*         DESC            DESCRIBE             both
ex foo/describe      (error)         DESCRIBE             DESCRIBE


Minor Changes:
	* parse() is now an alias for iter() [TAP]
	* Attribute set/clears report the name of the attribute in the
	  set/cleared message. [TAP]
	* fun_lattr is now in fundb.c. [TAP]
	* Improved setq/setr help. [TAP]

Fixes:
	* Typo in help evaluations corrected. [RLM]
	* The side-effect version of lock() no longer returns a value.
	  Reported by Corum.
	* help quota() added. Report by Dennis De Marco.
	* help INHERIT updated to reflect current control structure.
	  Suggested by Vedui.
	* vmul() with a separator now returns the vector separated with
	  that separator, as promised. Report by Atuarre@TrekMUSH.
	* FIXED now overrides STICKY, so you can't set yourself STICKY,
	  get yourself dropped, and go home. Report by Anthony Ivan.
	* lsearch(all,flags,c) worked, but lsearch(all,flags,Pc) didn't!
          This is fixed. Report by Flame.



Version 1.6.9 patchlevel 9		 November 18, 1996

Fixes:
	* A Wizard doing @find on a MUSH with garbage crashes the MUSH.
	  Fixed. [TAP]
	* Fairly major security problem due to a typo in the player-
	  destruction code fixed. Reported by Dennis DeMarco.


Version 1.6.9 patchlevel 8		 November 10, 1996

Major Changes:
	* The control system has changed slightly: only wizards
    	  control wizobjects and only royalty control royobjects.
	  If a mortal's object gets wizbitted, the mortal will
	  cease to control it. Also, protection is now afforded
	  to players from non-inherit objects.

Fixes:
	* Setting an @listen on a room caused a crash. Fixed.
	  (Note: @listen on rooms still doesn't work - it's not
	   supposed to -- use LISTENER and ^patterns -- but at
	   least it doesn't crash. :)  Report by Flame@B5.
	* dune.h.dist now defaults the index and rules indx files
	  to ending in .idx, as they should. Noted by Jason Newquist.



Version 1.6.9 patchlevel 7		 October 30, 1996

Functions:
	* The help for vmul() suggested it did an elementwise product
	  of 2 vectors, returning a vector. In fact, it was doing a
	  dot product (sum of the elementwise product, which is a scalar).
	  vmul() now does what the help suggests, and vdot() does
	  a dot product.

Fixes:
	* Bug in comp_w.c (word-based compression) which could cause
	  loss of subjects in @mail has been fixed. [NJG]
	* Help for "control" made more explicit, and help for "controls()"
	  references "control", not "controls".
	* @wait 0 now queues its subject immediately, rather than waiting
	  1 second. [TAP]
	* The "Patchlevel" file is now more grammatical. For Sam Knowlton. :)
	* Variables named "listen" have been renamed "listener" to
	  remove compiler warnings about shadowing the listen() system call.
	  Reported by Flame@B5


Version 1.6.9 patchlevel 6		 October 24, 1996

Fixes:
	* Removed needless calls to tprintf() within do_log() in 
	  access.c
	* Fixed the variable j in fun_lnum to be the right type


Version 1.6.9 patchlevel 5		 October 15, 1996

Options:
	* COMMA_EXIT_LIST causes exit lists to be comma-separated,
	  and include the word "and" before the last exit. [NJG]

Functions:
	* lnum() with multiple arguments now behaves exactly like
	  Tiny 2.2's lnum().

Minor Changes:

	* @pcreate failure messages distinguish between bad passwords
	  and bad names. Related to a suggestion by Philip Mak.

Fixes:
	* elements() used to put a leading space in output. Fixed. [RLM]
	* index(foo|||,|,2,1) now returns nothing, instead of ||,
	  as it should. Fix by Harvester@StarWarsMUSH.
	* @cpattr a/DESC=b (where a has a DESCRIBE attribute and no DESC
	  attribute) correctly grabbed DESCRIBE from a, but copied it to
	  DESC on b. This is now fixed. [TAP]
	* Various unused variables and missing prototypes fixed. [NJG]
	* More win32 fixes. [NJG]
	* Revised comp_w.c to handle table overflow better. [NJG]
	* splice() wasn't putting spaces back in between words.
          Reported by Philip Mak.
	* Help for aposs() was never added. [MPC]
	* mkindx doesn't compile on systems without strcasecmp. Fixed.
 	  Reported by Stephen Sanderlin.
	* Configure: -lsocket is used if it's found (also -lcrypt, -lnsl)
	* Various missing includes fixed
	* Linux systems weren't doing daylight savings time right.
	  We now always try to use tm_isdst = -1 to get this right.



Version 1.6.9 patchlevel 4		 October 9, 1996

Fixes:
	* Restart script fix in 1.6.9p3 is buggy. Fixed the fix.


Version 1.6.9 patchlevel 3		 October 7, 1996

Changes:
	* @wipe/wipe() of a single attribute (no wildcards) no longer
	  checks the SAFE flag on the object.
	* Wildcards are now accepted for the attribute name when setting
          attribute flags.

Fixes:
	* @succ and &succ could create duplicate success attributes.
          Fixed so that @succ -> SUCCESS and &succ -> SUCC,
	  and no more duplicates. [TAP]
	* Help for @purge had disappeared. Back.
	* Forgot to include restart patch mentioned in 1.6.9p2 [PeaK]


Version 1.6.9 patchlevel 2		 October 5, 1996

New Compile Options:

	* The behavior of attributes is now configurable; you can
	  emulate attribute setting behavior from 1.6.8 and earlier,
	  use the currently recommended settings, or anywhere 
	  in between. [TAP]

Functions:

	* lnum() now takes an optional second argument, which is the
	  number to start with, e.g. lnum(3,4) => 4 5 6
	  Suggested by [MPC]

Fixes:
	* @mail/debug clear=<player> now clears all the player's
	  mail, not just their current folder. Fix by
	  Leonid Korogodsky.
	* look/outside at an ambiguous name crashed. Report by Vedui.
	* New hints file: linux_2.sh
	* Help for setq() now included. Report by Flame@Babylon5
	* Added -w to the ps in restart so the output isn't
	  truncated. [PeaK]
	* Restart changes to prevent some race conditions under Linux 2.0
	  [Peak]


Version 1.6.9 patchlevel 1		 September 26, 1996

New Function:

	* setr() is like setq() but returns the string as well.
          It's identical to [setq(#,string)]%q#. Suggested by Adam Dray.

Fixes:

	* Bug with @clone fixed. Report by Vedui.
	* Bug with @mail folder 15 fixed. Report by Vedui.
	* @sitelock/register worked backward. Fixed. Report by [MPC]
	* rnum() now requires that you can examine the room.
	  By Jason Rhodes, with minor mods.
	* Better messages when a player or thing is set audible.
	  Suggested by Babylon5@kuwait.net
	* Configure now uses your email address instead of your name
	  when trying to subscribe to the mailing list; on some systems,
	  it's hard to get a valid name -- getting an email address
	  is usually possible. Suggested by Cro@Spaceballs
	* Configure no longer adds multiple copies of the same gcc
	  warning flags when you run it again. Reported by Cro@Spaceballs

Changes from 1.6.4p0 - 1.6.9p0

[RLM] is Ralph Melton, a PennMUSH developer
[TAP] is T. Alexander Popiel, a PennMUSH developer
[AKM] is Alan Kree McElrath, sourcehack for GohsMUSH.
[NJG] is Nick Gammon, the Win32 porter
[PeaK] is Pavel Kankovsky, another sourcehack.
[MPC] is Matt Chatterley, YAsourcehack
[2.2] refers to code which originated with the TinyMUSH 2.2 developers

==========================================================================

Version 1.6.9 patchlevel 0		 September 16, 1996

Attribute Rewrite [TAP]:

	* There is now a distinction between an empty attribute and
          a non-existant attribute:
		@va me		<--- wipes out my VA attribute
		@va me=		<--- sets my VA attribute to be empty
	  Empty attributes retain their locks and flags; wiped attributes
          are gone forever.
	* @set and set() can not wipe out attributes. @wipe and wipe()
          will.
        * You can now include ':'s in $-command and ^-command patterns
          by escaping them with '\'.
        * Standard attribute names are kept in a string table and
	  memory is not allocated for them. We guesstimate a 3-5%
	  savings in memory use from this change.
        * objmem() and playermem() are now more accurate.
	* Internal changes: new attribute flags AF_STATIC, AF_COMMAND,
          AF_LISTEN; atr_comm_match doesn't look directly at compressed
          strings any more; restructured some routines (atr_clr to clear
	  attributes, atr_add to set them).

Fixes:
	
	* Add help topic SETTING-ATTRIBUTES to explain the above.
	* Fixed small error with closing a NULL file in access.c [TAP]
	* Improved help for @destroy
	* Dashed lines in @mail are now 2 hyphens longer. [MPC]
	* The Configure hints files weren't properly used when
	  compiling with gcc.
	* The color flag is now aliased to colour as well. [MPC]
	* With MAIL_SUBJECTS, the @mail/list could get scrambled
          for messages from players with long names. Reported by
	  Leto@DuneII.
	* Small memory leak when access.cnf is reloaded via kill -HUP
          has been fixed.
	* Vestige of old TEMPLE code removed from do_drop. Reported
	  by Mike Selewski.


Version 1.6.8 patchlevel 1		 September 7, 1996

Fixes:
	* The mail*() functions were broken due to a typo. [MPC]
	* The addr field in the descriptor structure has been expanded
          from 50 characters to 100 characters, because you'd really
	  like to store the entire ident response from encrypting
	  ident daemons.
	* The MAIL: announcement at login now counts your cleared
          mail in your mail totals, in case something clears mail for
          you while you're offline. Suggested by Mike Wesson.
	* Better string protection for parse_chat which may fix
          a potential crash when speaking on +channels.


Version 1.6.8 patchlevel 0		 September 3, 1996

This is intended as a maintenance release because 1.6.7 has had
many rapid patches to achieve stability.

Fixes:
	* "make install" now implies "make all". Corrects a problem
	  with not remaking hdrs/buildinf.h.
	* README file now shows the utils directory in its directory tree.
          Reported by Mike@StarWars.
	* On startup, PennMUSH now logs its version information.
	* @log/wiz was logging to trace log, not wiz log. Reported by
	  Dean Moore.
	* @mail system behaved badly if you @shutdown on an empty
          maildb on some systems. Reported by Mike Selewski.
	* Detection of getpagesize() system call is now handled by 
	  Configure. Fixes problems on Irix, reported by Mike Selewski. 
	* Minor typo in Irix hints file fixed.
	* Stupid misspelling of August in CHANGES-10 fixed.


Version 1.6.7 patchlevel 6		 August 31, 1996

Fixes:
	* The attribute clear fix in 1.6.7p5 is buggy. Now it's really
	  fixed. Report by [MPC].


Version 1.6.7 patchlevel 5		 August 30, 1996

Fixes:
	* Sites not listed in the access.cnf file should have been
	  allowed, not denied access. Fixed. Best report by Cwilla@Victory
	* A little more info in mush.cnf about how player_creation and
          access.cnf interact
	* Trying to clear a never-existant attribute got the right
          error message, but clearing an attribute that had existed,
          but been already cleared got the "Foo - Set." message.
          Fixed - atr_add now skips disposed attributes.  Report by [MPC]


Version 1.6.7 patchlevel 4		 August 28, 1996

Fixes:
	* Bug in mail functions that caused mail(1:0) to crash
	  has been fixed. Reported by Corum@StormWorld.
	* Another Win32 fix by Pat Pinatiello.


Version 1.6.7 patchlevel 3		 August 28, 1996

Fixes:
	* Configure wasn't setting HAS_SENDMAIL correctly because the
	  updated config_h.SH wasn't included in the diff!
	* @mail/clear's message about unread mail was screwy.


Version 1.6.7 patchlevel 2		 August 27, 1996

Fixes:
	* Forbidden_Site wasn't working quite right
	* Win32 compatibility improvements suggested by Pat Pinatiello.
	  Hopefully, no further real hacking should be required to 
	  build under Win32 with Visual C++. Pat's instructions included
	  as win32/README.visualc++


Version 1.6.7 patchlevel 1		 August 27, 1996

Fixes:
	* #ifdef's and the like were missing which prevent compilation
          unless HAS_SENDMAIL and CHAT_SYSTEM (>2) were defined.
	  Fixed by [TAP].


Version 1.6.7 patchlevel 0		 August 22, 1996

Major Changes:

	* The lockout.cnf and sites.cnf files are no longer used.
          Instead, the file game/access.cnf controls all aspects of
	  site-based (or, with ident, possibly user-based) access.
	  Sites can be explicitly allowed or denied the ability to:
	    * Connect to guest players
	    * Connect to non-guest players
	    * Create players
	  Sites can be configured to:
	    * Use email registration (see below)
	    * Set all players from the site SUSPECT
	  See the file game/access.README for file format information.
	  The LOCKOUT and WCREATE defines have been removed from options.h.

	* A new access option, email registration, is available.
          From the connection screen, the command
	    register <player> <email address>
	  will create the player with a random password, which will be
	  emailed to the address. The email address is stored on the player
          in the wiz-only attribute REGISTERED_EMAIL. 
          Obviously, this requires that the system have a way to send email.
	  Ideas in this code came from Jim Cook.

	* @powers are now tabled in flags.c.

	* Nick Gammon's word-based compression algorithm is now
	  COMPRESSION_TYPE 3. This algorithm may be faster than
	  Huffman on the whole, and may provide better compression
	  for large (>1.5Mb of text) databases.

	* @mail message-lists now understand the format [folder#:]msg[-msg]
          For example, the first 3 messages in folder 1 are 1:1-3.
          @mail commands that are not given any message list are assumed
          to apply to all messages in the current folder. You can also
          do this explicitly by using the word "folder". When you use
          the word "all", you match all messages in all folders.
          For example, try: @mail all
          @mail internals rewritten to increase code reuse.

New Commands:

	* @sitelock has got an additional syntax to support the new
	  access.cnf system.

New Functions:

	* powers() returns the list of powers set on a thing.
	  If HASPOWER_RESTRICTED is defined, you must be able to
          examine the thing to do this.
 	* mail(), mailtime(), mailstatus(), and mailfrom() now accept
          this syntax:
		mail([<player>,] [<folder #>:]<message #>)
	* cemit() does what you'd expect. Suggested by [MPC].

New Powers:

	* Open_Anywhere power allows the player to open an exit between
          to any room, even if the player does not control the source
          or target room.


Minor Changes:

	* Previously, a player with the Halt power could use
          @halt obj=command to effectively @force any object.
          This form of @halt is now only allowed if you control the
          object. Bug reported by Flame.

	* When EXTENDED_ANSI is defined, ansi codes are stripped out
          of strings before checking them against LISTEN and ^patterns.
          Suggested by Mike Wesson.

	* HAVEN players are no longer notified when they send back
	  an @haven message in response to a page. Page-locked players
	  still are. Suggested by Naomi Novik.

	* @decompile me results in a decompile with "me" as the object name
          @decompile <player> results in the player's name as the object name
	  @decompile of an exit will use the exit's short name instead of
	  its full name for setting attributes and flags. 

	* Utilty scripts (customize.pl, update.pl, update-cnf.pl, 
          fixdepend.pl, and make_access_cnf.sh) are now in the utils/
          subdirectory.

	* Default rwho server is now littlewood.math.okstate.edu,
          which replaces riemann, which has been turned off.

	* time() and convsecs() now indicate the first 9 days of the
          month as 01..09, rather than 1-9, which makes convtime()
          happier when you convert back.

	* You may @tel an exit back into its own room. Added for
          compatibility with other MUSH flavors. Suggestion by Philip Mak.

	* Dark connections are now broadcast only to MONITOR wizards and
          royalty. This involved replacing the raw_broadcast and
          toggle_broadcast functions with a new flag_broadcast function
          which subsumes them. Suggestion by Philip Mak.

Fixes:
	* Noted the 256-character limit on channel descriptions in the help.
	* abs() now deals correctly with floating points.
	* Win32 compatibility improvements suggested by Pat Pinatiello.
	* Updates to BUGS, README.Deprecated, and FAQ [TAP]
	* An ANSI_NORMAL is sent at the end of the Doing message in WHO.
	* mail() and related functions now accept "me". Bug noted by
	  Mike@TBFF
	* Help for @squota no longer says that it works like @quota
          when no limit is given, because it doesn't. 
	* Bigram compression was not freeing memory that it used
          for initialization. Fixed, and made faster.
	* Help for @unlink fixed; you can't pick up unlinked exits. [TAP]
	* Potential string overflow in new_connection fixed. Idea by [TAP]
	* Code cleanup: many old sections that were commented out
          with #ifdef NEVER ... #endif have been removed.
	* @set obj=!going gave an error message but still reset the flag.
          Now it should just give the error. Reported by Philip Mak.
	* Little fixes to help for get and @ulock.
	* Players weren't getting reimbursed for destroying rooms.
          Reported by Stewart Evans.


Version 1.6.6 patchlevel 0		 July 28, 1996

This version involves primarily cleaning up and streamlining code
in preparation for major internal changes in later releases.

Major Changes:
	* The following options are now standard and no longer turned
	  on via dune.h/options.h: RALPH_LOCKS, EXTENDED_MAIL, 
	  INHERIT_FLAG. [TAP]

New Commands:
	* @firstexit command moves an exit to be first in the list of 
          a room's exits. Based on contrib/topexit.165p3 by Marlek@Earth1996
	  (but note that it requires control over the *room*, not the
	  exit).

New Functions:
	* poll() returns the current poll. By William Knopes.

Flags:
	* TEMPLE flag has been removed. This requires adding a new
	  DBF bit. [TAP]

Minor Changes:
	* Admin no longer automatically pass leave-locks and NO_LEAVE.
	  Suggested by Naomi Novik. [TAP]

Fixes:
	* Users could cause an infinite loop with @mail/fwd. Fixed.
	* The fix to pmatch() in 165p4 didn't quite do the job.
          Alex's does. [TAP]
	* @mail/stat commands now show correct number of cleared messages.
	  Bug reported by [MPC]
	* Typo fixed in help for items() [MPC]
	* help for BUILDER now calls it a power, not a flag.


Version 1.6.5 patchlevel 4		 July 9, 1996

New Functions:
	* entrances() works like @entrances, including the cost.
          Suggested by Julienna@TrekMUSH.

Commands:
	* whisper/list takes multiple recipients. Suggested by [MPC].

Minor Changes:
	* A DARK-reconnected message has been added. Idea by [MPC]
	* LFAIL/OLFAIL/ALFAIL attributes now control the message
          seen when a player fails to leave an object due to the
	  NO_LEAVE flag or a leave-lock.  By Naomi Novik.

Fixes:
	* pmatch() on a DARK or hidden player by an unpriv'd player
	  now returns #-1 (can't find the player).
	* inc(very_big_n) now works exactly like add(1,very_big_n) instead
          of returning a huge negative number. Same for dec(). 
	  Reported by [MPC].
	* Fixed spelling of Tinyfugue in help @decompile. [MPC]
	* Documented the way hasflag() works a bit better to forestall
	  a common confusion: why hasflag(me,r) doesn't check for the
	  royalty flag.
	* If a player tries to join a channel she's already on but
          which has since been locked against her, she receives the
          already-on-channel message now instead of the can't-join
          message. Suggested by Cwilla@VictoryMUSH.
	* Compile-time information in @version has been expanded and
          made much more robust for systems whose make program is
	  broken. We now create the file hdrs/buildinf.h at the
	  beginning of each build, which contains the info.
	* WHO at the connect screen works correctly now even if 
	  #0 is privileged. Bug reported by Doyce Testerman.


Version 1.6.5 patchlevel 3		June 29, 1996

New Command:

	* @shutdown/panic causes a panic dump and shutdown. God-only. [RLM]

Minor Changes:

	* When you destroy a room you don't own, the "wrecking ball"
	  message now includes the name of the owner, like the messages
	  when you destroy objects you don't own. Suggested by
	  Matt Chatterley.
	* The channels() function, with no arguments, returns the
	  list of all channels (which the player can see).

Fixes:
	* When you try to get an object that's not in your location,
	  and POSSESSIVE_GET is not defined, you don't receive
	  any message at all. Fixed by Thaddeus Parkinson.
	* DARK-disconnect messages now appear.
	* All calls to random changed to getrandom (except the one
          in getrandom!), and the prototype for random removed from
	  utils.c, where it causes conflicts for at least OSF/1.
	* portmsg.c extensively hacked to use the autoconfiguration
          info so you can "make portmsg" on supported systems.
	* Help for mortal() and @mortal removed. [RLM]


Version 1.6.5 patchlevel 2		June 19, 1996

Fixes:
	* @grep didn't check to be sure you were allowed to see
	  the attributes it searched. Reported by Mike Wesson.


Version 1.6.5 patchlevel 1		June 12, 1996

New Functions:
	* channels(dbref) returns the list of channel names that 
	  dbref is on.

Fixes:
	* When paging player(s) with spaces in their names, the
          LASTPAGED attribute stores them with quotes around them,
          so that repaging will work.
	* @mail/fwd shows you how many players it successfully
          forwarded to. 
	* @chzone here=none produced a spurious message if here was
	  Wiz/roy. Fixed. Reported by Matt Chatterley.
	* udefault failed to evaluate the arguments it passed to the
          attribute to be u'd. Reported by PeaK.
	* Added include of sys/types.h in ident code. Necessary for
          FreeBSD.
	* @chf would not return a Huh? Fix by Hemlock MUSH admin.
	

Version 1.6.5 patchlevel 0		June 2, 1996

Database:
	
	* The "One" character in minimal.db.Z (#1, aka God) is now
	  distributed without a password. This takes care of people
	  who don't have crypt(3) or have a modified one (FreeBSD),
	  since you now log in without a password, and set one,
          and all is well.

Removed functionality:

	* The @mortal command and mortal() functions have been removed.
	  They introduce more problems than they solve and until we
	  have a better way of doing something like that, they're out. [TAP]

Documentation:

	* README has been extensively updated.

Minor Changes:

	* When paging, LASTPAGED is set to the list of succesfully
	  paged players' names, if any page was successful. This
	  is how page/list always worked; now applies to normal page.
	* &foo obj = bar used to set FOO to " bar". Similarly, you
          could use page/noeval (or any speech command with /noeval)
          to page messages with initial spaces. For TinyMUSH compatibility,
          this is no longer possible; leading spaces are trimmed now. [TAP]
	* F_INTERNAL flags (like GOING) are now visible unless they're
	  also F_DARK. [RLM]
	* When you @decomp obj/atr and atr doesn't exist, you now get
	  a message about it. Suggested by Matt Chatterley.
        * PREFIX now matches INPREFIX (see notes on 1.6.4p2) [TAP]

Fixes:

	* Bug in parse.c which could causes crashes fixed. Reported
	  by Atuarre. [TAP]
	* On at least 2 systems, the system date was screwed up,
	  which made updating dune.h and options.h still produce
	  files younger than dune.h.dist and options.h.dist.
	  This is not our fault, but we'll fix it anyway - now we
	  touch dune.h.dist and options.h.dist before we update
	  dune.h and options.h. 
	* @wiping a STARTUP attribute didn't reset the STARTUP flag. [TAP]
	* Fixed bugs in the freebsd hints.
	* All of a sudden, linux systems have started barfing on
	  our declaration of signal() in externs.h. All right, if they
	  want to play that way, we now test for this in Configure
	  and don't declare it ourselves if it would break things.
	* Changed Amberyl's address in the source to lwl@digex.net
	* Somehow the fix for add(+1,0) got left out of 1.6.4. Back in. 
	* The ansi() function now produces underscore with "u", as
	  advertised. [TAP]
	* Warning about discarding const in assignment fixed in game.c.


Version 1.6.4 patchlevel 2		May 14, 1996

Minor Changes:
	* At game startup, semaphores on all objects are cleared.
	  Prevents objects from having leftover semaphore states after
	  a shutdown. [TAP]
          INCOMPATIBILITY WARNING! If you have objects which expect
          to always have sempahore -1 (or something else), be sure
	  that they do "@drain me; @notify me" in their STARTUP
	  (as recommended in Amberyl's MUSH Manual).

Fixes:
	* @dump/paranoid produced db's with incorrect db flags
	  when CHAT_SYSTEM was 3 or 4. Reported by Matt Chatterley.
	* Under certain conditions, one could get inside a ZMO using
	  the "go" command. Fixed. [RLM]
	* A strcpy in fun_match is now a safe_str. [PeaK]
	* INPREFIX fixes: (1) no space if INPREFIX evals to a null 
          string, (2) message to be prefixed is passed as %0, (3) %1-%9
          are temporarily cleared. [TAP]


Version 1.6.4 patchlevel 1		May 11, 1996

Fixes:
	* Forgot to #ifdef MAIL_SUBJECTS around fun_mailsubject.
	  Reported by Mercurial Mink@Protean.
	* Quirk in @dbck fixed. [RLM]
	* Possible denial of service attack using repeat() fixed. [RLM/TAP]
	* Problem with Configure script under certain conditions (esp FreeBSD)
	  producing bad compiler flags fixed. Report by Mike Wilson.


Version 1.6.4 patchlevel 0		May 3, 1996

Major Changes:
	* eval_boolexp rewritten again. Important features:
	  - If A is locked to @B, evaluating A's lock is identical
            to evaluating B's lock
	  - To do an indirect lock or an elock(), you must be able to
            read the lock on the target object (i.e., you must be
            See_All, control the object, or it must be Visual)
            (New macros Can_Run_Lock and Can_Read_Lock for this)
          - As a result, channel locks will work as advertised if
	    you indirect-lock them to VISUAL objects
	* Changes to handling of plain strings (with no evaluation)
	  resulting in doubling of speed. [TAP]
	* If you fail the page-lock on a DARK player, you receive their
	  AWAY message rather than their HAVEN message. That is,
	  failing a page-lock on a DARK player is just like paging
	  a DARK HAVEN player.
	* INHERIT check moved to controls() function

New functions:
	* mailsubject() returns subject of a given mail message,
	  analogous to mail() and mailfrom(). By Atuarre.

Minor Changes:
	* Don't go through some major sections of the parser if we've
	  be given PE_NOTHING. Performance boost. [TAP]
	* Players who are allowed to idle past inactivity limit, and
          are unfindable, and can hide, are hidden (as before), but
	  only receive the notification once, instead of every
	  hour (or whatever your limit is). Players who are all of the
	  above but can't hide don't get any notification now.
	  Suggested by Gepht@Hemlock
	* When allocating a new boolexp, set its struct members to
	  null values for better debugging. [RLM]
	* We no longer save/restore the r-values when evaluating
          the left side of the equal sign in attribute setting.
	  So @desc %q0 = %q0 now works as expected. Reported by PeaK.
	* Locks set when players are initially created (lock, elock)
	  are now set to "=me" instead of "me". [PeaK]

Fixes:
	* When EX_PUBLIC_ATTRIBS wasn't defined, you never saw the
	  DESCRIBE attribute listed when you examined objects. [AKM]
	* Vacation and Connected were being handled incorrectly
          internally; the type of object wasn't being checked. [TAP]
	* Now that Connected is fixed, the call to @doing doesn't have
	  to prefilter for players, so don't. [TAP]
	* +nn is now considered a number, so add(+20,1) works.
          Reported by Dennis De Marco.
	* String boundary problems sometimes when you hit the 
	  function recursion limit could cause crashes. Fixed.
	  Reported by Oliver Stoll. [TAP]
	* Making on Linux should hopefully now work with -g. [PeaK]
	* Warning message when @chzoning an inherit player used
	  to be announced when @chzoning *any* player. Fixed. [PeaK]

CHANGES from 1.6.0p0 - 1.6.3p7

[RLM] is Ralph Melton, a PennMUSH developer
[TAP] is T. Alexander Popiel, a PennMUSH developer
[AKM] is Alan Kree McElrath, sourcehack for GohsMUSH.
[NJG] is Nick Gammon, the Win32 porter
[PeaK] is Pavel Kankovsky, another sourcehack.
[2.2] refers to code which originated with the TinyMUSH 2.2 developers

==========================================================================

Version 1.6.3 patchlevel 7		April 25, 1996

Fixes:
	* beep() works without arguments now, as promised. [TAP]
	* repeat(string,-number) caused an infinite loop. Reported by
	  Atuarre.
	* The create() function didn't accept a single argument. [RLM]
	* last(a b c) was returning " c" instead of "c". [TAP]
	* The Configure script did indeed send email to listproc if
	  you asked to be subscribed to the pennmush mailing list.
	  But it sent it with Precedence: junk, which listproc ignores.
	  Fixed.
	* %q9 wasn't preserved due to a typo in function.c. Fixed. [PeaK]
	* SIGHUP now handled synchronously to prevent race conditions.
 	  Noted by PeaK.



Version 1.6.3 patchlevel 6		March 30, 1996

Minor Changes:
	* A channel's owner now always passes the channel's modlock.
	* Wizards may now do folderstats(player,folder). Previously
	  on God could, but wizards could see the stats for the player's
	  current folder, and could reset the current folder, so it
	  doesn't make sense to restrict. Report by Cwilla@Victory-MUSH
	* @function is restricted to see_all players. Suggested by
	  Oderus (Mike Wesson).

Fixes:
	* @sitelock/ban and @sitelock/register had their effects
	  mixed up. Reported by Matt Chatterley.
	* Objects that were undestroyed were having the GOING flag
	  removed but not the GOING_TWICE flag. Fixed. [RLM]
	* element() now works as advertised. [RLM]
	* Systems without IEEE math now can't do power(x,y) if
	  *either* x or y is greater than 100. Report by InsaneJoseph@WoP



Version 1.6.3 patchlevel 5		March 12, 1996

New Powers:
	* The immortal power has been split into 3 powers:
	  no_pay (has unlimited money), no_quota (has unlimited quota),
	  and unkillable (can't be kill'd). For backwards compatibility,
	  @set player=[!]immortal sets/unsets all three. Objects which
          were immortal before this patch will have all 3 flags set.

Minor Changes:
	* The DEBUG flag can now be set by any user. The Can_Debug power
	  will automatically be removed from all objects.
	* The "directive not found" message in loading mush.cnf has been
          changed to a more comprehensible/less scary "directive in 
	  cnf file ignored" message.

Fixes:
	* FIXED players can no longer "go home" or "move home"
	* index-files.pl was producing incorrectly titled index entries. [RLM]
	* More fixes to elock() and zone locks. Elock() should now work
          even when RALPH_LOCKS isn't defined. Zone locks are checked
          on the correct object. [TAP]
	* @open exit=variable should work correctly now. [TAP]


Version 1.6.3 patchlevel 4		February 27, 1996

Fixes:
	* Complex evaluation locks may be better behaved. [RLM]
	* ex/debug now shows flag bits in hex, not decimal [RLM]
	* % failed to quote the following character in some cases.
	  Fixed to work like 1.50. [PeaK]
	* iter() only allowed a single-character output separator instead of
          an arbitrary string. Fixed. [PeaK]
	* Bug in extmail.c which caused crashes on find_exact_starting_point
	  with newly created players may be fixed.
	* Repaging with page/list uses the correct format.
	  Also, failing to page anyone successfully doesn't clobber
	  LASTPAGED when using page/list.
	* Dark-connecting admin now trigger connection messages on
	  admin chat channels (unless the channels are quiet)
	* Help for pos() corrected. 
	* Things starting with #- (error messages) are now treated as
	  false (0) in boolean functions, as under 1.50. [TAP]
	* The recursive_member function was inefficient, and potentially
          buggy, which could allow things to be teleported into things
          they contained. Fixed.
	* @drain wasn't lowering QUEUE attrib. Fixed. [RLM]
	* Zone master help updated to refer to zone locks [RLM]
	* Memory malloc'd by replace string, though freed, didn't
	  have its mem_check cleared in a few places, which could make
	  it appear that replace_string was leaking. [PeaK]


Version 1.6.3 patchlevel 3		February 12, 1996

New option:
	* If NULL_EQ_ZERO is defined in dune.h, a null string will
	  be considered a zero in a math function. For example,
	  add(,3) will return 3, instead of #-1. 

Minor Changes:
	* Guests may not join or leave channels. [Mike Wesson, Oderus]

Fixes:
	* edefault() core dumps fixed.
	* eval() now behaves correctly. [TAP]
	* ALL players (inc. Wizards) now subject to BUILDING_LIMIT.
	* Quota now properly updated on object destruction. [RLM]
	* Misc. fixes to object destruction, especially in the case
	  of what happens to SAFE objects of destroyed players. [RLM]
	* Queue was handled strangely for priv'd players. Fixed.
	* New internal macros NoQuota and NoKill, both the same as
	  NoPay, established in preparation for future splitting of
	  Immortal power into 3 powers.
	* help @clock2 typo fixed.


Version 1.6.3 patchlevel 2		February 7, 1996

[L@E] refers to Lukthil@ElendorMUSH, who did many patches to 1.50
that I'm just now getting to integrate.

Minor Changes:

	* Wizards are now effectively pemit_all
	* @dol/notify notifies even if given a null list. [L@E]
	* See_All players can see quotas with @quota. [L@E]
	* If we're logging forces, don't just log forces *by* wizards,
	  log forces *of* wizards (and things they own) by anybody. 
	  Idea by L@E.
	* Removed obsolete code: clear_atr_name
	* mkindx now sorts index entries alphabetically, so it
	  doesn't matter what order you have get() and get_eval()
          in your help file - help get will give get().
	  Code by Pavel Kankovsky (PeaK).

Fixes:
	* #-1 was being considered "true" instead of "false" when
	  TINY22_BOOLEANS was not defined. [RLM]
	* munge() is better behaved when there are duplicates in the
	  first list, accurately matching them with the second. [L@E]
	* Emits weren't propagating through audible exits when
	  there was nobody in the room. Fix idea by L@E.
	* Charges were broken. Fix idea by L@E.
	* Immortal players could lose coins when their non-immortal
	  objects ran code. Fixed. [L@E]
	* @edit is less likely to overflow buffers when using ^ and $. [L@E]
	* @halting objects used to queue them for #0. Fixed. [L@E]
	* Semaphores weren't removed when an object was halted. Fixed. [L@E]
	* Possible permissions problem in running STARTUP when objects
	  are chowned fixed. [TAP]
	* make etags now picks up dune.h and options.h [RLM]
	* Code consolidation: chowning when an exit is linked is done
	  via a call to chown_object now. [RLM]


Version 1.6.3 patchlevel 1		February 4, 1996


Minor Changes:

	* NO_LEAVE is now settable by anyone
	* The index-files.pl script indexes admin news and help separately.
	* *emit() functions can now have unescaped commas in their last
	  argument (the message). [TAP]

Fixes:
	* lit() doesn't screw up on braces. [TAP]
	* @search and lsearch() using eval were broken. [TAP]
	* @unlock foo worked, and also gave a Huh?. Fixed. [RLM]
	* When a player was destroyed, their SAFE exits would be
	  destroyed instead of chowned. Fixed. [RLM]


Version 1.6.3 patchlevel 0		January 31, 1996

Major Changes:

	* Assume that object A is locked to @B, and object B is
	  locked to canuse/1. It used to be that when player P tried
          to pass the lock on A, the canuse attribute on *A* was
	  checked, instead of B. Fixing that required that we check
	  to be sure that B is allowed to evaluate the CANUSE attribute
	  on A, which required internal changes to boolexp.c.

Minor Changes:

	* Objects can now send mail as themselves, not their players.
	  Mail from objects is reported as being from an object
	  when read. The format for @mail(/read) has changed somewhat.
	* page[/list] now stores the last player(s) you paged in a LASTPAGED
	  attribute, so you can re-multipage. The behavior is a little
	  different for page and page/list. Page stores exactly what
	  you typed as the last player/list of players to page; page/list
	  stores only those names for whom the page succeeded.

Fixes:

	* The site of last failed login used to be a visual attribute.
	* Parser misbehaved on: think ( foo ), removing spaces. [TAP]
	* @edit and related wasn't stripping leading spaces from the
	  right side of the = sign. Fixed.
	* Problem with count of unread mail on login with EXTENDED_MAIL
	  fixed.
	* @channel/rename can now rename a channel to the same name
	  with case changes, without an error.
	* +channel now matches partial ambiguous channels in a smarter
	  fashion - it looks for a channel you're on.
	* Better help for @clock
	* die(0,x) now returns 0. die(negative #,x) returns an error. [TAP]
	* @chan/decompile can be used by the channel's owner or
	  anyone who passes the modlock, as well as Wizards.
	* Channel hide locks work right. [RLM]
	* @chan/decompile now shows the correct commands for locking
	  channels. [RLM]


Version 1.6.2 patchlevel 1		January 28, 1996

Fixes:
	* get_eval error about # of args fixed.


Version 1.6.2 patchlevel 0		January 26, 1996

New Commands:

	* @mortal <command> lets a privileged player run a command
	  as if they were unprivileged. [TAP]
	* ahelp/anews shows admin help/news topics to admin players. 
          Admin-only topics are in the same files (help.txt/news.txt),
	  but topic names begin with '&'. For example:
	  & for-all-players
	  ...text...
	  & &admin-only
	  ...text...
	* page/list <players>=<message> will do a multipage with a less
	  spammy format for the pager.

New Functions:

	* mortal() lets a privileged player evaluate as if there were
	  unprivileged. [TAP]

New Flags:

	* MORTAL, to support @mortal and mortal(). Used internally, and
	  not settable. Can be reset by Wizards, just in case, though. [TAP]

Minor Changes:

	* If you have a channel "admin" and a global +admin (no args),
	  calling +admin will run the global, not give the
	  "What do you want to say to that channel" message, under
	  extended chat.
	* If a panic db is corrupt, the restart script will move it to
	  save/PANICDB.corrupt instead of removing it.

Fixes:
	* Problems with compile when HAS_SIGACTION is undefined.
	  Noted by Brian Favela, affects Linux.
	* Duplicate uselock check in atr_comm_match removed.
	  Noted by Brian Favela.
	* Looking at an exit showed the full name and aliases, not just
	  the full name. [TAP]
	* Compiling without EXTENDED_MAIL works right.
	* Potential buffer overflow problems in look_exits() fixed.
	* get_eval() really uses a /, not a comma, like the help says.
	* (Hopefully) last remnants of old parser removed from externs.h
	* @dol on an empty list now doesn't give the weird "what do you want
	  to do with the list" message. @dol with an empty command does. [RLM]


Version 1.6.1 patchlevel 1		January 23, 1996

Fixes:
	* v(#), v(!),and v(N) now return the same thing as %#, %!, and %N.
	  [RLM]

Version 1.6.1 patchlevel 0		January 19, 1996

New compile-time options:

	* SAFER_UFUN: when defined, prevents less priv'd objects from
	  evaluating ufuns on more priv'd objects, which helps a
	  potential security problem with side-effect functions.
	  This is more of a stopgap -- control and security will be
	  revamped in a future release -- but is recommended.

New .cnf directives:

	* player_creation enables/disables "create" at login screen.
          Also @enable/disable creation
	* use_dns enables/disables IP-to-hostname resolution

New Functions:

	* tel(thing,destination)
	* oemit([room/]object,messsage)
	* emit(message)
	* lemit(message)
	* remit(object, message)
	* zemit(zone, message)
	* timestring(secs,flag) converts seconds to #d #h #m #s
	  format. If flag is 1, the string always includes all time
	  periods (e.g. timestring(301,1) = 0d 0h 5m 1s). If flag is
	  0 or omitted, only the necessary periods are included
	  (e.g. timestring(301,0) = 5m 1s). 
	* left(string, n) returns the first n characters of the string
	* right(string, n) returns the last n characters of the string
	* hasflag() syntax extended to hasflag(obj[/attr],flag) for
	  checking attribute flags as well.
	* functions() lists all enabled functions
	* atrlock(obj/attr[,<on|off>])
	* doing(player) returns a player's @doing if they can be see
	  on the WHO list

Minor Changes:

	* @allquota now has /quiet switch, and works correctly when
	  no limit is given. [NJG]
	* The restart script is now a lot smarter, and figures things
	  out from mush.cnf. All that needs to be set is the location
	  of the game directory, and if you use make customize, not
	  even that.
	* @wall/@rwall/@wizwall with a null message fails. (src/speech.c)
	* SIGHUPs sent to the MUSH are now logged in netmush.log
	* Common code called when object ownership is changed has
	  been encapsulated into a single function for modularity.
	* crypt() is now a macro on systems which can't define HAS_CRYPT

Fixes:	
	* @chan/mute now behaves as it should instead of muting all
	  messages on the channel.
	* The table() function was incorrectly truncating some
	  list elements. Fixed. Report by Alaric@WoP
	* The match() function was returning an empty string instead
	  of 0 when it failed to match. Fixed. Report by Alaric@WoP.
	* help math functions now list the transcendental and other
	  floating point functions
	* map() and mix() were broken. Fixed. [TAP] (src/funlist.c)
	* @grep/print is now case-sensitive, like help says. (src/predicat.c)
	* Refunding money when objects are chowned 
	  was refunding 10 coins, instead of the object deposit. [RLM]
	* convtime() hadn't been converted to the new parser,
	  and therefore was broken. Fixed. (src/funtime.c)
	* Compilation warning in src/game.c fixed
	* Giving players large negative amounts of money was slightly
	  broken and is now fixed. Obscure, eh? [RLM] (src/rob.c)
	* Misleading comment in options.h.dist about QUEUE_LOSS
	  fixed. [RLM]
	* Help fixed to indicate that there's no longer a 10 dimension
	  limit on vector functions.
	* Various missing prototypes corrected.
	* make customize now correctly sets the restart script
	  executable, and installs links to netmud and mkindx.
	* Improved Win32 portability [NJG]
	* Fixes to default() and edefault() [TAP]


Version 1.6.0 patchlevel 5		January 17, 1996

Fixes: 
	* Extended chat: @chan/decomp shows privs correctly now
	* Extended chat: When a player is destroyed, channels they own
	  are chowned to God.

Version 1.6.0 patchlevel 4		January 17, 1996

Fixes:
	* Extended chat: Formerly, non-players could create channels.
	  No longer.
	* Extended chat: Channel creation cost is now refunded when
	  channel is removed.
	* Help text for HALT (game/txt/pennflag.hlp) and SUBSTITUTIONS
	  (game/txt/penn.hlp) now notes that HALTed objects do not
	  evaluate functions or substitutions.
	* Nick Gammon's new email address is in README and win32/README


Version 1.6.0 patchlevel 3		January 16, 1996

Fixes:
	* default, edefault, udefault now work like Tiny 2.2, not eval'ing
	  their arguments.
	* Many fixes to the extended chat system.
	* Fixed misspelling of Guest in @config.
	* @function on a non-existant object no longer crashes. [TAP]
	* Problems with paranoid dumps not setting the correct dbflags
	  corrected. [TAP]
	* Problems with EXTENDED_MAIL crashing when using LOGOUT fixed. [RLM]
	* @warnings for exit-msgs and thing-msgs warned when there was
	  no OFAIL on a locked exit/thing, which is silly. [1.6.0p1]
	* Started patching the CHANGES file, like I should.
	* Fixes customize.pl
	* Fixes update-cnf.pl so that 'make update' won't trash player_flags
	  (and other repeatable directives) in mush.cnf
	* Fixes game/txt/README

Version 1.6.0 patchlevel 0		January 10, 1996

Major Changes:

        * New version numbering: 1.6.0 patchlevel 0
                                 | | |            |
          Code base version -----/ | |            |
          Major version -----------/ |            |
          Minor version -------------/            |
          Patchlevel -----------------------------/

          Patchlevel is updated when bugs are fixed by patches
          Minor version is updated when a new version of the tar file
            is posted, and may include bugfixes and new features
          Major version is updated when major internals are changed.
          Code base version is never updated. :)

	* New function parser with improved speed, sanity. [TAP]
        * Complete rewrite of destruction code. Undestroying supported
          for all objects, @adestroy works sanely, SAFE is safer,
	  better consistency checking. [RLM]
	* Support for 'plural' gender for TinyMUSH compatibility. [2.2]
        * The code has been ported to Win32 (Windows 95, NT), and files
	  in the win32/ subdirectory should be used to compile it.
	  It runs as a system service. [NJG]
	* Most filenames are now 8.3, to support the win32 port
	* Some options have been moved to the runtime config file
	  (dbcomp). Others have been removed entirely.
	* 'make update' will update runtime config directives
	* The chat system has been completely rewritten. Number of 
          channels is limited only by memory, channels are saved
          across shutdowns (modifying source to add channels never
          required), channels can be locked in various ways, 
          non-wizards can create channels, etc.
        * New .cnf directives: chat_database (where to store channels),
          max_player_chans (how many channels can a non-admin create),
	  chan_cost (how much does creating a channel cost)
	* The CSRI malloc is now supported and suggested. In addition
	  to being extremely memory-efficient, it offers leak detection
	  and profiling features.
	* The database format now defaults to quoting text, which is
	  less vulnerable to corruption, in particular the loading of
          attribute locks starting with a number. [1.50-15-04,05 TAP]

New Functions:

	* matchall() [2.2]
	* default(), edefault(), udefault() [2.2]
	* aposs() and %a return absolute possessive pronouns [2.2]
	* elements() [2.2]
	* mudname(), version(), starttime() [2.2]
	* stats() is now an alias for lstats() [2.2]
	* ulocal() [2.2]
	* search() is now an alias for lsearch() [2.2]
	* folderstats() returns information about numbers of messages
	  in a given @mail folder
	* last() is the counterpart to first(), and returns the last
	  item in a list
	* mailtime(), mailstatus(). Suggested by Alaric@WorldOfPain.

New Commands:

	* @emit can be abbreviated '\\', for TinyMUSH compatibility
	* The speech commands (say, pose, @[po]emit, whisper, page)
	  can now take a /noeval switch, which prevents them from
	  evaluating the message.
	* 'semipose' is an alias for pose/nospace
	* 'INFO' from the connection screen gives version info for
	  the MUSH, for use by automated mudlists and the like.
	* @sitelock/name adds names to the banned names file.
	* @enable/@disable guests (and new cnf file directive guest_allow)
	* @decomp now takes /flags and /attribs switches to only decompile
          the creation/flags information or the attribute information.
	* @list/<switch> or @list <switch> lists useful stuff. Currently
	  switches include "motd" (same as @listmotd) and "functions"
	  (same as @config/functions), for TinyMUSH compatibility.

New Flags:

	* CLOUDY flag on exits provides partial transparency. A CLOUDY
          TRANSPARENT exit shows only the description of the room beyond, 
          no contents.  A CLOUDY but not TRANSPARENT exit shows only 
          the contents, no desc.
	* FORCE_WHITE flag on an ANSI player forces their output to be
	  reset to white, necessary for some poor ansi terminals which
	  "bleed". [Kalkin]

Minor Changes:

	* @chzone'ing an object to 'none' no longer clears its privbits.
	* OXMOVE attribute is shown to the room you're leaving.
	* Setting and resetting the SUSPECT flag is now logged in wizard.log
	* Various outdated defines have been removed from options.h/dune.h
	* Objects can now use @mail commands, as if they were their owners.
	* As described in the help, HALT'd objects can't evaluate ufuns.
	* Players are now informed of the time and host of their last
	  failed connection.
	* Unlinked exits seized with @link are now cleared of privileged bits
	* Various autoconfiguration changes to clean things up.

Fixes:

	* idlesecs() now accepts "me".
	* "pose" (not ":") used to discard everything after an "=".
	* The "entries" entries in help.txt, etc, have been fixed a bit.
	* index(a| |b,|,2,1) now returns a null string instead of "|b"
	* Various memory leaks [1.50-15-01]
	* When fork fails, a non-forking dump is done, and the MUSH
	  no longer exits. [1.50-15-02]
	* Soundex() no longer hangs on non-alphabetical. [1.50-15-06]
	* dist2d and dist3d are safer on non-IEEE math systems. [1.50-15-03]
	* mail() now counts messages across all folders
	* Better matching of del_check to add_check [1.50-15-11]
	* PennMUSH now compiles correctly without EXTENDED_MAIL
	  [1.50-15-10]
	* Some fixes to unparse.c to stabilize huffman compression
	  [1.50-15-09,RLM]
	* Fixes to @boot [1.50-15-08,TAP] [RLM]
	* Fixes to variable exit handling by quick-unparse [1.50-15-07,AKM]
	* Configure now tries to find a full path for uptime(1) so that
          @uptime will work
	* Fixes to forbidden_site and forbidden_name when there's no
	  sites/lockout/names file. [NJG]
        * Backspace handling for really dumb terminals improved [NJG]
	* When changing the text of an attribute, its flags are no longer
          reset. [RLM]
        * When seizing a link, coins weren't refunded if the seize failed.
	* Output flushed is now a bit better handled. [TAP]
	* dump.c and extract.c, woefully out of date, have been removed.
	* Dark disconnects aren't shown to MONITOR folks, just admin. [RLM]
	* Being multiply connected doesn't cause pages to you to be
	  considered ambiguous [RLM]

This is the most current changes file for PennMUSH. Please look it
over; each version contains new things which might significantly affect
the function of your server.

Unlike the older CHANGES files, these changes are reported in
reverse chronological order (most recent first)

[RLM] is Ralph Melton, a prolific Pennhack.
[TAP] is T. Alexander Popiel, a prolific MUSHhack
[AKM] is Alan Kree McElrath, sourcehack for GohsMUSH.

==========================================================================

Version 1.50 patchlevel 14		July 3, 1995

This patchlevel is primarily concerned with bugfixes and patch management.

Maintainer changes:
  * New file 'Patchlevel' tracks mandatory patches to insure that they 
    are applied in the proper order
  * Clearer 'restart' script. [TAP]
  * The indexing script for help/news/etc now creates the topic 'Entries'
    instead of 'Index', to prevent a conflict with 'help index()'.
  * The file hdrs/db.h is now hdrs/mushdb.h, to match Tiny 2.2 and
    because FreeBSD complains about db.h.
  * The links hdrs/dune.h and hdrs/options.h were unnecessary and
    are now removed.
  * The noforking dump messages have been moved to mush.conf

Commands:
  * The @set obj1=attrib1:_obj2/attrib2 form no longer works, as
    it conflicts with general attempts to set attributes that start
    with underscores. Use @cpattr for copying attributes.

Options:
  * EXITS_CONNECT_ROOMS, if defined, prevents rooms with at least one
    exit from being announced to players as "disconnected rooms".
  * RALPH_DEBUG option allows for improved DEBUG flag output. [RLM]
  * When MEM_CHECK is defined, it dumps mem_check info to the
    checkpt.log before each dump.
  * SAFER_PLAYER_NAMES options has been removed. Player names can't
    contain those funny characters, period.

Fixes:
  * Added -D_INCLUDE_AES_SOURCE to hpux hints
  * stdlib.h is now included in eval.c to get atof. This was breaking
    linux MUSHes badly.
  * Linux hints now use BSD signal semantics.
  * Various attempts to fix possibly unusual bugs in compression.
  * The internal TRANSPARENT flag bit macro is now TRANSPARENTED,
    because Solaris defines TRANSPARENT
  * A bug causing setq'd registers to be incorrectly munged has been fixed.
  * @chzone warning messages refer to zone-lock, not elock, if RALPH_LOCKS
    are compiled in.
  * Examining a player who was on a null channel was reported to crash
    one MUSH. Some attempts have been made to fix that problem.
  * The compose.csh script in game/txt has been replaced by 
    compose.sh, which now deals properly with systems which are missing
    perl (gasp!)
  * Configure script hopefully won't die when checking signals on Linux.
  * Fixes to some strange @mail behavior. [RLM]
  * CType in compress_h.c is now unsigned long, not long. [RLM]
  * Fix to converting old maildbs to mail subjects [RLM]
  * Bigram compression could (rarely) cause $commands or ^patterns
    to stop functioning.
  * GoodObject() used to consider db_top to be a valid dbref. It's not.
  * Recycling of objects was broken in pl13 and is now fixed. [RLM]
  * mush.conf can now deal with the FIXED flag as a default flag [RLM]
  * A lot of mem_checks weren't being deleted, especially exec.buff ones.
  * Defining COMPRESSION_TYPE to be 0 (no compression) now works. [TAP]
  * Paranoid dumps no longer stomp out tabs and newlines unnecessarily.
  * Configure now checks for IEEE math compliance, and defines HAS_IEEE_MATH
    which is used by the code to determine if some math functions need
    to be limited.
  * SOLARIS defines have been removed as extraneous.

--------------------------------------------------------------------------

Version 1.50 patchlevel 13		May 29, 1995

Patchlevel 13 was very much a collaborative effort with Ralph Melton
and T. Alexander Popiel, terrific MUSHhacks.

Major user changes:

  * Complete rewrite of locks, which allows for many, many new
    locks, including user-defined locks, with reduced memory usage. [RLM]
  * @mail can now have a subject.

Major maintainer changes:
  * The code now contains ANSI prototypes (if Configure ascertains that
    your compiler likes 'em) for easier debugging.
  * The help, news, and events entries are now managed in subdirectories
    of game/txt/, and automatically indexed.
  * The names.conf file now accepts wildcards
  * New Makefile target 'update' will propagate your options.h/dune.h
    settings into an options.h.dist/dune.h.dist template, ask you
    whether you want to define any newly-introduced options, ask
    you if you want to remove any obsoleted options, and write out
    new options.h/dune.h files.
  * Improvements to the autoconfiguration scripts, which now generate
    a config.h and confmagic.h file in the top-level directory. These
    headers tell the code what kinds of features are available.
    Accordingly, the old hdrs/config.h header file has been renamed 
    hdrs/conf.h
  * The 'whisper_loudness' config directive in mush.conf sets the
    probability that a noisy whisper will be noticed in the room. 
  * If the standard Huffman attribute compression gives you trouble, you
    can use the COMPRESSION_TYPE define to use the older bigram
    compression system, now auto-tuning, or no compression at all.
  * The TINY22_BOOLEANS option causes the MUSH's boolean functions
    (and(), or(), not()) to be compatible with TinyMUSH 2.2. In Tiny 2.2,
    only non-zero integers are "true". In PennMUSH's default, non-zero
    integers, non-negative db#'s, and strings are "true". You pick.
  * NO_NUKE_SAFE_PLAYER prevents @nuke from working (for Wizards) on
    players set SAFE. You have to unSAFE them first.

New functions:

  * MWHO() function is like LWHO() but always evaluates as if the
    enactor were an unprivileged player. Useful for globals.
  * ISDAYLIGHT() returns 1 if it's daylight savings time, 0 if not.
    By Dave Sisson
  * CWHO() now returns a list of dbrefs, NOT NAMES. Much more flexible.
  * ITER() now can take a fourth argument, which is the output delimiter.
    You can have any string shoved between the output elements instead 
    of a space (for example, a %r).
  * TABLE() for presenting lists in rows.

New commands:

  * Players can connect with 'ch name password', which is just like
    'cd', but connects hidden. Activated by defining DARK_CONNECT
  * @warnings now allows players to exclude warnings by using
    @warnings me=!warning. [RLM]
  * @ps/quick now displays only the summary line of @ps for players.
  * @decomp can take a /tf switch, which makes its output emulate
    the 'FugueEdit' object (originally by van@TinyTIM) which
    lets you use tf to edit attributes. Idea by Lord Argon.

Minor changes:

  * The 'news code' and 'news changes' entries are now in help.txt,
    so you don't need to update your MUSH's news.txt files when you upgrade.
  * In an ambiguous situation (i.e., @dest foo when you carry
    foobar and foofoo), @dest will no longer pick one at random. It'll fail.
  * #0 is now evaluated as TRUE in the context of boolean functions,
    because it's a valid dbref (applies only #ifndef TINY22_BOOLEANS)
  * haspower() allows players to see powers on things they control,
    even with HASPOWER_RESTRICTED defined. [RLM]
  * O-attributes which evaluate to nothing are no longer displayed. [AKM]
  * Paranoid dumps no longer smash \r and \n.
  * @mvattr no longer deletes the original attribute if the copies fail.
  * Secure now stomps out ^'s
  * The getrandom() function has been rewritten. [RLM]
  * It's now a lot harder to have Guest and Wiz/Roy set on the same
    player. Players shouldn't be able to connect to Wiz/Roy Guests anymore.
  * HARSH_GUEST is now a lot harsher. Guests pretty much can't modify
    the database except to lock/unlock things they control.
  * players who are on a priv'd channel may speak/leave
    even after they lose their privs. [RLM]
  * Xenix options removed from options.h.dist, since the Xenix code
    isn't supported anymore anyway.
  * The size of MAX_COMMAND_LEN (and therefore all derived buffers)
    has been doubled.
  * Doing a 'make' from the src/ directory will now call the top-level
    makefile. This helps those who use emacs (like Ralph, who came up
    with this) and M-x compile from the srcdir.
  * @version shows compilation flags.
  * Admin WHO no longer wraps lines. Sitenames are truncated as needed. [TAP]

Fixes

  * Repaging a player with a multi-word name works correctly now.
  * Players with the tport_anything power can teleport FIXED things. 
  * @map works as documented again.
  * Paranoid @dumps don't give so many spurious bad attribute warnings.
  * ZMO elock checking now uses PLAYER_START and MASTER_ROOM instead
    of #0 and #2. [RLM]
  * @pemit/list now replaces ## with the target's db#, as the help says.
  * Subtle bug in exit matching fixed. [RLM]
  * escape() and secure() no longer parse their arguments.
  * The asterisk-line separators on the nologin messages have been
    prettified slightly, at Tigger's suggestion
  * Some systems didn't deal well with overflowing @doing and @poll's.
    Dave Sisson patched it.
  * Error in bsd.c when compiling with DARK_CONNECT but without ROYALTY
    fixed. (Reported by Suud@Gohs)
  * hasflag, andflags, and orflags patched to prevent mortals from
    using them to see mdark flags [RLM]
  * Type mismatch in warnings.c fixed [RLM]
  * fun_lcstr() and fun_ucstr() have been changed slightly in order to
    support unices like MachTen which appear to define tolower() as 
    a macro meaning (isupper(x) ? _tolower(x) : (x)), and were getting
    hosed by the tolower(*ap++) call. Bug reported by Adrick.
  * It was possible to overflow the buffers in do_log by having a 
    Wizard do @fo me=think lnum(5000), for example. No longer, I hope.
    Bug report and suggested fix by Adrick.
  * Removed an old bit of code that broke compiles using original mailer
  * The restart script is a little smarter about preserving databases.
  * Fixed a bug that caused ALWAYS_PARANOID to dump core.

--------------------------------------------------------------------------

Version 1.50 patchlevel 12		March 23, 1995

Major changes:

  * The matching routines in match.c have been rewritten to be
    reentrant, which fixes some subtle but important bugs.
    If you have hacks which use the old matching routines, you'll
    have to rewrite them - see the comments at the beginning of
    match.c
  * New Makefile target 'customize' for setting up customized
    per-mush subdirectories for those who run multiple mushes.
  * An untested DELETE_POWERS define in options.h, which will remove
    powers from a database, to make it easier to switch to TinyMUSH

New flags/powers:

  * Things with the Pemit_All power can @pemit to HAVEN/ulocked players.
    Useful for globals.

--- Fixes ---
  
  * Previously, passing the elock of a ZoneMaster player allowed 
    control over *all* the ZM's objects, including the ZM player itself.
    Players are no longer controllable this way.
  * Incorporated patch for compiling without CREATION_TIMES defined
  * Incorporated Ralph Melton's patch to warnings.c to fix core dump
    with multiple exits warning.
  * Nobody can @tel rooms any more. New code for @tel'ing exits has
    been written, however, and players may now @tel exits they control
    from rooms they control to rooms they control.
  * Z_TEL bug: players could defeat Z_TEL by entering an object and
    @tel'ing from there. Reported by Ralph Melton.
  * Bug in puppet checks in @teleport fixed.
  * Players in exactly 15 levels of container could defeat NO_TEL. Fixed.
  * The warnings from compiling src/IDENT/id_parse.c are fixed.
  * Andrew Molitor's patch to prevent stupid comparison functions with
    sortby() causing infinite loops or crashes.
  * Some improved help topics by Ralph Melton

This is the most current changes file for the DuneSource version of
PennMUSH. Please look it over; each version contains new things which
might significantly affect the function of your server.

Unlike the older CHANGES files, these changes are reported in
reverse chronological order (most recent first)

==========================================================================

Version 1.50 patchlevel 10 Dune #2	February 5, 1995


Major changes:

  * The server can now dynamically determine what options have been
    added to a database, and will read in all future DuneSource dbs
    correctly, even if the same options aren't set, and write out dbs
    which identify the current compiled options (those which affect
    the db). For example, CHAT_SYSTEM need only be set to 0 or 3 now,
    as the server will autodetect whether the db has chat or not, and
    convert it, if necessary to add (or remove!) the chat field.
    (Ergo, minimal.chat.db.Z is no longer needed or distributed).
    This terrific idea is from Kalkin; however, the DuneSource system
    of db versions is *NOT* compatible with the Kalkin system. 

  * Flags now have separate permissions for setting and unsetting.
    For example, the DEBUG flag is wiz-settable, but unsettable by
    any player who controls the object. In addition, flags can now
    be made all-visible, owner-visible, admin-visible, or god-visible;
    SUSPECT is no longer a special case, just an admin-visible flag.
    This behavior used to be controlled by the FLAGS_DARK option, but
    is now a permanent change - the option has been removed.

  * Extensive warning system for things missing on objects, rooms, etc.
    @warnings command for players to set the level of warnings they want,
    @wcheck[/all] command for players to check an object (checks can also run
    at a God-configurable interval on the whole db), NOWARN flag for objects
    and players. Idea from Kalkin's adaptation of MUSE code, totally
    rewritten.
    

New options (dune.h):

  * GUEST_TEXTFILE option enables a textfile (guest.txt by default)
    to be shown to Guests who log in. Idea and source code from Kalkin.
  * PAGELOCK_NOT_USELOCK option causes @lock/use to fail for players,
    requiring them to type @lock/page. The lock itself has not changed,
    just the interface, to remind players of its function. By Ralph Melton.
  * More control over possessive gets with the POSSESSIVE_GET define
    and the POSSGET_ON_DISCONNECTED define. Possessive get can be
    disabled, enabled for all but disconnected players, or enabled
    at all times (the default PennMUSH behavior)

New functions:

  * lit() returns its input totally unparsed, and without spaces compressed.
  * t() returns the truthvalue of its input, guarranteed to be either
    1 or 0.
  * objmem() and playermem() functions, return the memory usage of
    an object or all of a player's objects. Requires search_all power.
  * grab(list,pattern[,delimiter]), returns the first element of list
    which patches the pattern. Patterns are of the match() type.
    From the TinyMUSH 2.2 code.

Minor Changes:

  * You must actually own an object (not just control it) or be a
    Wizard in order to set it chown_ok or dest_ok. By Ralph Melton.
  * You can use #$ in the actions in a switch() function
    or @switch/@select statement, and it will be replaced by the switch
    expression before executing or evaluating. This can improve
    efficiency and save space. For example:
	switch(complexfunc(%0),Bob,BobResult,#$)
    is equivalent to:
	switch(complexfunc(%0),Bob,BobResult,complexfunc(%0))
    but only requires a single evaluation of complexfunc(%0).
    Suggested by Kenric@DuneII.
  * "things" is a synonym for "objects" in @search now. By Ralph Melton
  * Blank lines are no longer squished out of help/news/events when they
    are displayed.

--- Fixes ---

  * #-2 is treated as a "0" (false, like #-1) in functions which need a
    logical value for it. Previously, it was treated as -2 (true).
  * @select is now considerably more efficient - it no longer will 
    evaluate anything after the matched action. The old behavior
    could well be a bug in the right conditions as well. 
  * atr_add now rejects null attribute names, so you probably can't set them
    any more. Suggested by Kalkin, the code's by Mike@StarWars.
  * Players can reset a DARK flag on themselves, but still can not
    set themselves DARK.
  * andflags(me,!Dc) used to return 1 if I am !dark and !connected,
    instead of !D and connected, as the help states. Fix by Ralph
    Melton.
  * Halting an object which is @wait'ing used to fail to decrement
    the owner's queue attrib. Fixed now. Patch by Ralph Melton.
  * set_flag uses strupper instead of upcasestr now, which should fix
    a bug on some systems wherein "cd" command would crash the MUSH and
    a similar bug wherein players connecting would crash the MUSH if
    the ON-VACATION flag was in use.
  * The old channel syntax (@channel foo=command) works again.
  * The RULES option now works.
  * The convtime() has been rewritten to work on NeXT's correctly.
    Previously, its malloc failed and it returned -1.
  * Systems which have getrlimit, but *don't* have RLIMIT_NOFILE,
    are now supported. Notably, Aix 2.x and 3.x.
  * The installation hints for Solaris 2 have been improved.
    WAIT_TYPE is defined as int, and if NBPC can't be found for
    getpagesize(), it'll try PAGESIZE instead. Thanks to Kalkin for these.
  * Installation for AIX has been improved. AIX required inclusion of
    sys/select.h in the IDENT stuff.
  * Various rewrites of tests against NOTHING to use the GoodObject()
    macro instead. Thanks to Ralph Melton for some of these.
  * Got rid of some warnings when compiling mkindx

 
Version 1.50 patchlevel 10 Dune #1 	January 5, 1995

--- Features ---

Major changes:

  * When players attempt to log in to a Guest character that is already
    in use, the server tries to find one that isn't, and connects the
    player to that. If it can't, you get the old behavior (two connections
    to the single Guest).
  * Extended @mail system is available with many new mail commands.
  * Sending SIGHUP (kill -1) to the MUSH process can cause it
    to recache text files and reread mush.conf on the fly.
  * Dump warnings 5 minutes and 1 minute before non-forking
    dump, and optional announcement at completion of dump.
  * Guest players may not set attributes.
  * Options to add two new news.txt type files: rules.txt and index.txt.
  * Kill command can be disabled.
  * @aconnect/@adisconnect messages on individual rooms.

New options:

  * Many many new options. Read 'dune.h' for information and to choose
    which options you want. Pretty much all of the changes listed here
    can be turned on and off from dune.h, except some fixes. More are
    detailed in dune.h

Changes to commands:

  * CD command at connection screen allows Wizards to connect to the game
    DARKly.
  * @sitelock command for on-the-fly sitelocking by Wizards.
  * @dump/paranoid can try to fix the db in memory, too.
  * @decomp/db, produces decomp output using dbref of object instead
    of its name.
  * ex/mortal, shows examine output as if player were mortal.
  * Option to rename @destroy to @recycle, since @dest and @desc are
    easy to confuse.
  * @restart command. Combines an @halt with triggering @startup.
  * @hide now provides feedback when used.
  * @find may be restricted to royalty, the only ones for whom it might
    possibly be useful.
  * @function now lets you know when it updates an @function.
  * The old (pl8?) @channel <channel>=<function> syntax is back, along
    with @channel/<function> <channel>, for those who liked it.
  * @grep can be either case-sensitive or not (the default).
  * If you don't specify the destination attribute in @cpattr, it
    assumes you want the same attrib name as the source attrib.
  * @mvattr, like @cpattr, but removes old attribute.
  * ANSI players now see their @edit additions in bold.
  * Rooms and exits can @emit. Rooms @emit into themselves (like @remit),
    and exits @emit to their source room.
  * @squota can now be given quota levels as +<quota> or -<quota>, to
    increase or decrease a player's quota from its current level.

Changes to functions:

  * encrypt() and decrypt() functions.
  * hidden() function for checking if a player is hidden.
  * hastype() function for checking if a thing is a given type.
  * pemit() function sends pemits to a list of objects.
  * lparent() function, returns object's parent, grandparent, etc.
  * quota() function, returns a player's quota.
  * N-dimensional vector arithmetic functions: vadd(), vmul(), vsub(),
    vmag(), vdim(), vunit()
  * haspower() can be restricted to admin.
  * "Lower math" functions: shr(), shl(), inc(), dec()
  * beep() with no arguments produces a single beep.
  * pmatch() will now accept *player or #dbref arguments.
  * lsearchr() function does an lsearch *backwards* through the db.

Changes to flags/powers:

  * Flags can be defined as dark (invisible to all but God), 
    mdark (invisible to mortals), and odark (invisible to mortals who don't
    own the object) in flags.c.
  * @cemit can be granted as a power
  * The ability to set the DEBUG flags on objects the player controls
    can be granted as a power (idea by Kenric@DuneII)
  * Optional COLOR flag to control reception of ANSI color apart from
    ANSI hiliting.
  * OPAQUE flag on exits. OPAQUE exits in translucent rooms look
    like normal exits in non-translucent rooms.
  * FIXED flag prevents @tel and home.
  * DARK Wizards need not trigger @aenter.
  * The SUSPECT flag is now abbreviated 's'.
  * NO_LEAVE flag on objects prevents 'leave' command from working in them.
    Useful for flying vehicles and the like.
  * UNREGISTERED flag for use with on-line registration. UNREGISTERED 
    players can't have @powers set on them.

Minor changes:

  * &adestroy attribute triggered when object is dest'd.
  * &amail attribute triggered when admin player receives @mail.
  * Player/room/object names can appear automatically in bold.
  * Dark and Hidden players are distinguished on the admin WHO list
  * Dark and Hidden players are indicated on the admin DOING list
  * ESC characters can not be put in @doing's
  * Wizards who idle are set hidden, not DARK. Same for royalty.
  * DARK wizards enter and leave @chat channels silently.
  * Royalty can now see the Wizard @channel/list
  * The mortal @channel/list lists only public channels.
  * @idle/@haven/@away attribs which evaluate to nothing are not
    sent to the paging player.


--- Fixes ---

  * TRANSPARENT variable exits don't crash the MUSH when looked at.
  * @channel/delete and @channel/privs take the right number of arguments
  * @decomp now decompiles flags properly.
  * When logins are disabled, players may not create characters.
  * The controls() function is made safer. Defining SAFER_CONTROL prevents
    anyone but God from controlling God, any non-wizard from controlling
    anything with a wizbit, and any non-admin from controlling anything with
    a roybit.
  * Player names are made safer. Defining SAFER_PLAYER_NAMES prevents the
    use of [, ], %, and \ in player names.
  * The strupper() function is made safer.
  * Mortals can remove the DEBUG flag on objects they own.
  * The set functions now take delimiters like they should.
  * Revwords() takes a delimeter, like it should.
  * @config displays whether function side effects are available correctly.
    It used to get it backwards.
  * Some checks against NOTHING have been changed to use the GoodObject()
    macro in look.c and possibly other places.
  * It's more difficult for players to enter themselves.
  * PLAYER_NAME_SPACES works right now, use double-quotes around 
    multi-word names.
  * haspower() on unknown powers now returns #-1 NO SUCH POWER instead
    of a null string.
  * replace(|2|3|4,3,foo) now returns |2|foo|4, instead of |2|3|foo
    Patch by Ralph Melton
  * Players must be @elocked before being set ZONE, for security.
    Idea by Kenric@DuneII
  * The mail_init/load_mail stuff in game.c has been revised because
    Irix 5.2 at least does not return NULL when popen'ing uncompress on
    a non-existent file in some cases.

This is the most current changes file for PennMUSH. Please look it over;
each version contains new things which might significantly affect the
function of your server.

==========================================================================
 
Version 1.50 patchlevel 8  #1,  April 21, 1993

--- Features ---

- New additions -
    * TINY_ATTRS option imitates 2.0 examine attribute format.
    * Player ZONE flag and ZoneMaster control for "safe" zones.
    * @hide command hides player from WHO list.
    * Compression program can be set in conf file (recommended: gzip)
    * @oemit can now take the format "room/player".
    * AF_MDARK and AF_WIZARD are now settable attribute flags by priv'd
        players. They're 'm' and 'w' in the attribute flags list.
    * @pcreate power added.
    * @motd/full and full.txt displayed when game is full.
    * Added channel-wipe.
    * Added @alias.
 
- New functions -
    * VISIBLE() - can one object examine another object or attribute?
    * ITEMS(), ELEMENT(), DELETE(), REPLACE, INSERT() - arbitrary-separator
        functions which operate on lists.
    * ORFLAGS(), ANDFLAGS() - check existence of muliple flags.
    * FULLNAME() - returns the full name of something.
    * Big pile of floating-point functions added.

- Improvements -
    * LATTR() takes an <obj>/<wildcard attr> pattern.
    * @prefix and @inprefix do pronoun substitution.
    * @search takes an 'eval' parameter.
    * Failing to give a second arg to @lock or @link unlocks/unlinks.
    * MAIL() can now retrieve messages owned by other players, and count
        the number of messages a player has.
    * Log formats should be a bit more consistent. For the connect log,
        all messages should show hostname and descriptor. 
    * The new config option SINGLE_LOGFILE dumps all error messages to
        stderr, freeing up some file descriptors.
    * New conf option enables/disables logging of @wizwalls.
    * AIX port done, some other config defs fixed.
    * SORT() now 'autodetects' the sort type. NSORT() is no longer
        necessary and has been removed.

--- Other changes / bug fixes ---

- Minor changes -
    * decompile_atrs() and attribute text lock checking use local instead
        of regular wild_match.
    * strdup() uses bcopy() for speed.
    * Examining an Opaque object doesn't show you the contents unless
        you control the object.
    * Rewrote atr_complete_match(). Also fixed the case-sensitivity
        problem with attribute locks.
    * Main command loop no longer checks to make sure that everything God
        does is caused by God (so @adesc, etc. works).
    * GET_EVAL() is now an alias for U() rather than EVAL().
    * Parameter order of exec() changed to match 2.0's.
    * All conf parameters now have default values.
    * (Dis)connects of hidden players do show up on priv'd channels. 
    * Non-listening objects trigger @aenter and @aleave (but not the 
        messages, since that's annoying.)
    * @search, @find, and examine always ignore the MYOPIC flag.
    * Queue stuff is now refunded at startup.
    * PID printed to log at startup.

- Bug fixes -
    * Lots of screw-ups with flag sets fixed.
    * Conf file sets of flags now work properly.
    * #def's of FUNCTION and XFUNCTION changed so Ultrix compiler
        doesn't complain.
    * LSEARCH() uses safe_str and safe_chr. Also fixed a problem with
        a variable being used before being initialized, and a problem
        with searching on powers.
    * parse_dbref no longer ignores trailing garbage. "#123's foo" no
        longer equates "#123".
    * extra_arglist() obeys nesting (and fixes SWITCH() problem).
    * convert_flags() handles 'E' flag properly.
    * Fixed a parser bug in attribute sets which truncated at a '/'.
    * Fixed some coredump bugs caused by not checking for HOME.
    * dup_bool() error fixed (added BOOLEXP_OWNER case).
    * db_free() frees enter and use keys (fixes potential memory leak).
    * Prevented overwrites of built-in functions via @function.
    * Fixed null-message-repeat chat bug.
    * Fixed negative semaphore timeout problem.
    * WORDS() uses ' ' instead of isspace().
    * REMOVE() no longer screws up on things like 'remove(#434 #43 #22,#43)'
    * Rewrote the setfuns 2.0-style. No more buffer overflows.
    * Fixed problem with INDEX() and friends choking on null separators.
    * Fixed function recursion bug caused by erroneous decrementation of
        the function invocation counter. Took out redundant recursion 
        checks in the ufuns.
    * Fixed coredump bug with closing null pointer to mail db.
    * Login limit works properly.
    * @scan takes the correct args and should no longer choke on '='.
    * Bits of code cleanup in do_set(). @listen and @startup get handled
        properly when lowercased.
    * SQUISH() trims leading spaces properly.
    * NO_TEL works correctly again.
    * upcasestr() doesn't gag on NULL.
    * 'visual' attribute flag saves/loads properly.
    * Null names no longer kill @find.
    * Null names get checked at startup and fixed if necessary.
    * 'no_inherit' attribute flag works properly.

==========================================================================
 
Version 1.50 patchlevel 9  #1,  December 11, 1993

--- Features ---

- New additions -

  * "Quiet" channels added. They don't show connect/disconnect, joined/left,
     and, in general, are good for mass-emit stuff.
  * @cemit command emits to a channel.
  * '%c' returns the current command.
  * @dolist/notify  executes a '@notify me' at the end of the list. Excellent
    for figuring out when you're done with your @dolist'ed commands.
  * @pemit/list  pemits to a list of dbrefs. No more @dolist/@pemits needed!

- New functions -

  * CWHO() returns the names of players on a channel.
  * OBJEVAL() evaluates an expression from another object's viewpoint.
  * CENTER() centers text on a field.
  * SQRT() takes the square root of a number.
  * MAP() is like ITER() over a user-defined function.
  * MUNGE() is a list-combining function to do things like conversion sorts.
  * MIX() is like MAP(), but combines two lists.
  * TRIM() trims characters at the beginning and/or end of strings.
  * ISDBREF() checks if something's a valid dbref.

- Improvements -

  * @wipe can take an object-attribute pattern.
  * 'l' parameter to locate() checks object location (container).
  * Added starting_quota as a conf option.
  * Shortened @grep output format.
  * Made EOL for socket output \r\n instead of \n.
  * ADD(), MUL(), AND(), and OR() can take up to 100 args.

--- Other changes / bug fixes ---

- Minor changes -

  * @link can link already-linked exits.
  * All channel commands now are switch-form.
  * channel_name is now a macro, not a function.
  * Setfuns and SORT() now have a maximum sort size definable (hardcoded).
  * DEBUG output no longer prints things which evaluate to the same thing,
    saving on spam. Single safe_str call, tprintf buffer increased to
    BUFFER_LEN*3.
  * Auto-unlimit of file descriptors at startup.
  * Minor cosmetic cleanup in do_convtime.
  * Added NVAL typedef (double or int, depending on config).
  * For 2.0 compatibility, listening objects DO trigger all enter/leave
    messages in DARK rooms now.
  * Default interface.h input-length def changed to 2K (from 1K).
  * Added match_objects(), like match_everything() without the exits.
    Added match_limited(), used by wiz.c.  Fixed lots of files to use
    consistent matching.
  * Added varargs_preamble macro.
  * @remit now obeys SILENT_PEMIT, and gives normal emit-style message to
    player if player is in the room.
  * Player is informed when he's @toaded.

- Efficiency improvements -

  * SORT() no longer performs conversions for every comparison.
  * Removed redundant check in do_itemfuns.
  * Matching is only done on exits if there is no exact match after
    trying all other possibilities.

- Compatibility changes -

  * For AIX, include sys/select.h instead of manually defining the
    bit-twiddling stuff. The system apparently defines _AIX.
  * Changed HPUX defines to SYSV, made some fixes for Linux.
  * Incorporated Anskiere's Solaris compat mods.
  * Fixed floating points on NeXT by adding "double atof();"
  * Made fix to dbdefs.h to compile on Sun cc; don't declare malloc fns.
  * Made various fixes to get smooth compilation on Iris.
  * Added ESC_CHAR and BEEP_CHAR defines to handle weird non-ANSI systems.
  * Got getrusage() on HP-UX working (brain-damaged syscall. Thanks, Talek.)

- Bug fixes -

  * Setfuns no longer choke on huge sets (wrong defined sizes for arrays).
  * DELETE(foo%b,1) and DELETE(foo,1) now return the same result.
  * @mail doesn't clobber @listen's uncompress buffer.
  * REPLACE(foo%b,1,Test) and REPLACE(foo,1,Test) now return the same result.
  * Huh? log with bad location no longer causes a coredump (augh).
    Fixed MAX()/MIN() bug with printing double as int.
  * Fixed coredump bug on VISIBLE() on non-existent attributes.
  * Fixed problem with VISIBLE() on non-existent objects returning 1, not 0.
  * Enactor (%#) in idesc evals to player, not object.
  * CONTROLS() now obeys the inherit flag.
  * Taking from an object now accepts controls() as well as enter_ok.
  * ANSI '\x' control sequence is stripped by the parser.
  * You can enter raw encrypted passwords if NOCRYPT is defined.
  * Fixed empty-list coredump bug in SORT().
  * Fixed coredump bug in @verb caused by non-existent victim.
  * Corrected order of statements in do_lock so @lock foo/va works again.
  * Fixed coredump bug in player.c (make sure LAST attribute exists before
    decompressing it. Bleah.)
  * SUSPECT can't be found by mortals using ANDFLAGS() or ORFLAGS().
  * Non-Inherit things can no longer @parent things which are Inherit.

==========================================================================
 
Version 1.50 patchlevel 10 Gamma,  June 22nd, 1994

--- Features ---

Major changes:

  * Guest is now a power. Set it on a player to restrict its command set.
  * New power Announce, which controls the ability to @wall.
  * Incorporated Talek's wild.c, a much-faster replacement for the old.
  * Incorporated Talek's patches for clearing %0-%9 properly (removing an
      ancient security hole), and preserving r()-values across the queue.
  * Incorporated Talek's new compress.c. Better but slower compression.
  * Incorporated Talek's '#@' list-place code for iter() and @dolist.
  * Incorporated Paul@Dune's mkindx.c for multiple topic headers.
  * There is now a global variable 'mudtime' on which timers, functions
      such as time() and secs(), and connect timestamps operate on.
  * The wait queue and some of the timers now operate on absolute time.
      This prevents lag from grossly changing the interval values.
  * Checks of $commands now obey parent uselocks. This is a 2.0 convention,
      and one that generally proves useful.
  * Variable exit destinations. When you attempt to go through one of these
      exits, it evaluates the exit's DESTINATION attribute as a U-function,
      and uses the result accordingly. The exit destination dbref is marked
      as #-2 (the ambiguous marker).
  * Rooms can now be set LISTENER. The flag name has been changed to MONITOR
      (which is what it's called in 2.0), with LISTENER as an alias. (Thus
      the MONITOR flag on things/rooms and on players mean different things.)

New options:

  * New compile-time option, EXTENDED_ANSI. Enables the ansi() function,
      allowing ANSI control codes to be used. This, unfortunately, also
      requires stripping the codes for non-ANSI players, in raw_notify.
      Uses the ANSI codes provided by Czakari, and functions provided by
      Paul@Dune, with modifications.
  * New parameters queue_chunk and active_queue_chunk control the number of
      commands run from the queue when there isn't and is net activity,
      respectively. This is supported by do_top() now taking an argument
      (number of commands to try to execute), and returning the number
      of commands executed. @kick has also been modified to use this.
  * Added config directives for function recursion and invocation.
  * New compile-time option, PLAYER_NAME_SPACES. Allows player names to
      be more than one word long. This option has not be more than _very_
      casually tested. Caveat emptor.

Changes to commands:

  * Incorporated Talek's @log command, with minor modifications.
  * @config shows many more options to priv'd players.
  * @oemit now takes its target location from the person to exclude, not
      the person who is doing the @oemit (consistent with 2.0 behavior,
      and more flexible).
  * @ps now follows the 2.0 syntax. Items deleted from the queue are now
    counted, and the entire thing calls a single generic routine.

Changes to functions:

  * New substitution: %qN is equivalent to r(N)  (also twiddled v() slightly)
  * More functions take delimiters. The newly-modified ones are:
      extract(), filter(), first() fold(), iter(), match(), member(), munge(),
      rest(), revwords(), setdiff(), setinter(), setunion(), shuffle(), 
      sort(), splice(), wordpos(), words()
  * Incorporated Talek's function side effects. link(), set(), parent(),
      lock(), and clone().
  * name() can now rename, if function side effects are allowed.
  * controls() has been tweaked so it returns '#-1 <error message>' on invalid
      objects, for consistency with other functions and with 2.0.
  * delete() is now ldelete(). The new delete() function deletes characters
      from a string. This is change to be consistent with 2.0.
  * findable(). Can <a> locate <b>? Useful for those WHO-list-type globals.
  * foreach(). Works basically like MAP(), but on strings.
  * haspower(). Like hasflag(), but for powers.
  * lcon() is now consistent with the 2.0 convention -- no more partial lists;
      either you can get the entire list, or you can't get it at all.
  * locate() has some new parameters: 'c' matches 'carried exits', supported
      by match_carried_exit(). Exit matching now calls match_exit_internal().
      'X' allows random choice if the result is ambiguous (#-2).
  * lsearch() now takes an EVAL class.
  * objeval() evaluates its first argument.
  * owner() now can take an object/attribute pair.
  * ports(). Returns the network descriptors a player is connected to.
  * rloc(). Returns an object's location at a variable level.
  * sort() autodetects for floating point, and uses qsort.
  * sortby(). Sorts a list by an arbitrary u-function.
  * stripansi(). Strips the ANSI codes from a string.
  * User-defined functions, such as U(), now return an empty string, rather
     than #-1 SOME ERROR MESSAGE, because 2.0 behavior is to return an empty
     string, and, generally, the empty string is easier to handle.

--- Fixes ---

  * and() and or() are now logical, not bitwise. They stop when a conclusion
      is made (i.e. when the result is inevitably true or false).
  * Only God can @edit himself.
  * @channel/delete args are passed correctly from game.c
  * new_connection() error no longer causes the game to shut down.
  * con() and next() cope with permission checks.
  * Trying to set a non-wizard player Dark now returns an error, and doesn't
      set the flag (even though it doesn't do anything).
  * Removed a superfluous uncompress() in cque.c.
  * Prevent players from setting flags on attributes that they can't set.
  * Error logging in process_command calls do_log(), not fprintf().
  * HugeQueue is now QUEUE_QUOTA + db_top.
  * TEMPLE is once again only wiz-settable.
  * Fixed an unused variable warning in player.c.
  * Fixed a few warning messages about long ints being printed as ints.
  * Fixed a few warning messages about discarding 'const' declarations.
  * Removed bigrams stuff from the distribution.
  * Removed obsolete ALLOW_RPAGE config directive.
  * Fixed a small bug which resulted in a slight amount of extra
      computation when the function invocation limit was exceeded.
  * Fixed a bug in the checking of ZMO locks in the game's internal controls().
      The privs parameter to eval_eboolexp() needs to be the ZMO in question,
      rather than the object itself, in order for attribute locks to work as
      would seem logical (the object being checked shouldn't even factor into
      the equation, since by definition zone control is based solely upon
      the ZMO's enter lock).
  * Because people seem to want it back, the "pose" command is back, together
      with a /nospace switch.
  * Fixed "look" so "l/outside" works as an abbreviation.
  * Added support for multi-word player names.
  * The definition of an ok_name() has been tightened up, and the acceptable
      characters in player names have been changed to be sonsistent with
      the 2.0 definition of this. Furthermore, player name length now needs
      to be _less than_, not _less than or equal to_, PLAYER_NAME_LIMIT.
      Previous behavior was buggy.
   * TRACE is now an alias for the DEBUG flag.
   * lookup_player() now succeeds on the dbrefs of players. This allowed some
       calls to match_absolute() to be removed, and is consistent with 2.0's
       behavior.


==========================================================================

patchlevel 10 release Gamma #2

6/23  Problem in cque.c, with @ps/all working for everyone, not just wizards.
      Repeated attempts to fix. Finally got it right (no typos, etc.)
6/23  Fixed problem with owner() returning wrong values.
6/23  Quiet channel con/disconn messages fixed (used 'chan' instead of 'mask').

==========================================================================

patchlevel 10 release Gamma #3

6/23  De-ANSIfied compress.c and wild.c.
6/23  Correctly defined OLD_ANSI in the Sun cc compile line in the Makefile.
      Got rid of Makefile redundancies for K&R compilers as well.

==========================================================================

patchlevel 10 release Gamma #4

6/29  Fixed a parser bug incorrectly interpreting spaces in &-sets:
      '&TEST-[xget(me, va)]' no longer boofs.
7/1   find_flag's name parameter changed to 'char *' from 'const char *'
      (upcasestr was trying to work on the thing, and causing core dumps
      as a result on machines with compilers that enforce that sort of
      thing. Nifty, eh?)
7/1   extract() no longer coredumps if given less than 3 args (blah).

==========================================================================

patchlevel 10 release Gamma #5

7/1   lookup_player() correctly returns dbrefs now. Dammit.
8/24  NOCRYPT status is displayed in @config.
8/26  Added identd support.
10/22 revwords() should take varargs.


The changes in this file begin with PennMUSH 1.50 patchlevel 4 and go
through patchlevel 7.

   -- Amberyl (lwl@eniac.seas.upenn.edu)

==========================================================================
 
Version 1.50 patchlevel 4  #1,  October 23, 1992

--- Features ---

- New additions -
    * @inprefix and @infilter attributes.
    * Evaluative locks. @lock foo=atr/val does an evaluation on
        the ATR attribute on foo (get_eval style). The lock is passed if
        that equals val.

- Improvements -
    * Added command count; priv'd WHO changed to reflect this.

- Changes to commands -
    * @pemit and @remit to players obey pagelocks.
    * @notify and @drain give player a message.

--- Other changes / bug fixes ---

- Minor changes -
    * lock() always works for royalty.
    * Matching for possessive look and get changed somewhat, so possession
        checks are done _after_ trying to match everything else.
    * lwho() works for everyone (but does not show dark wizards to mortals).
    * Ignore "null" commands from non-players.

- Bug fixes -
    * Changes which made it into 1.50 p3 #2:
        Checking for valid location done near beginning of command checks.
        Properly ifdef'ed a clear_mail() in wiz.c
        Fixed a coredump bug in @search for no arg3 specified.
    * Wizards and royalty can't unset their own flags. Also, royalty
        can only roy-bit objects they own. Previously this latter was
        enforced only via a controls check. This, however, allows royals
        to roy-bit objects by placing them in a controlled zone; this is
        not desirable behavior.
    * @tport and friends work as advertised.
    * @decompile on players no longer incorrectly sets a @parent field.
    * 'look here' inside an object now properly displays idesc.
    * Explicitly prevented non-connected players from being @booted.
    * Fixed an echo 'bug' with puppets: (more of a 2.0 compat thing)
         > @fo Puppet=:foofs.
         Puppet> Puppet foofs.
         Puppet foofs.
    * Fixed direct entering of password in @password.
    * Fixed bug with semaphores caused by not uncompressing semaphore
        attribute before using it. Premature @notifies to prevent future
        blocking should now work.
    * Mail allows "hard" newlines, and now uses standard db-read routines.
    * Mail sanity checks for bad objects with mail.
    * atr_comm_match now correctly blocks checking of $commands from the
        parent. Attributes are entered into the hash table as "checked" even
        if they're just straight text and don't contain a $command.


==========================================================================
 
Version 1.50 patchlevel 5  #1,  November 8, 1992

--- Features ---

- New additions -
    * LOGOUT command. Disconnects you from a character but not the MUSH.
    * @daytime and @login replaced by generic @enable/@disable command.
        These can also be used to control logging. Their values are now
        settable in the config file.
    * ISWORD(). Returns 1 if every character in a string is a letter.
    * NO_COMMAND flag, on an experimental basis. An object set NO_COMMAND
        is not checked for $commands. Pending more profiling data, this
        flag might stay or go.

- Improvements -
    * panic() routine now tells connected players the cause of the panic.

- Changes to commands -
    * @decompile can take a wildcarded attribute pattern.
    * @search and lsearch() have been fixed to be consistent with 2.0.
        Also, parameters to them are no longer case-sensitive. In addition,
        the PARENT class allows you to find all children of an object.
        Royalty now performs these without restriction (i.e. like wizards).
        Mortals can no longer get data on objects they don't own (for
        example, @search flags=Wc no longer works for them.)
        Fixed problems with "type conflicts" that weren't, and generally
        robustified this code.

--- Other changes / bug fixes ---

- Minor changes -
    * The make dependencies in the Makefile have been updated.
    * @config now takes the switches "costs" and "globals". The latter
        lists parameters like "logins", "daytime", and the logging stuff.
        Also, redundant/stupid stuff in the @config listing has been zapped.
    * All "strcpy(buff, "");" statements in eval.c replaced by an infinitely
        more sensible "*buff = '\0';"
    * Default flags set by the conf file are now checked for validity -- i.e.
        you can't make GOING, STARTUP, and CONNECTED, or type flags, defaults.
    * Royalty can see the quotas of other players via @quota.
    * Royalty can always get the zone() of an object.
    * Royalty can @stats other players.
    * Removed the @use-does/@does and gripe commands. Nobody uses the first,
        and there are better ways of communicating (like @mail) than gripe.
    * Got rid of help.c, having the help functions call do_new_spitfile
        directly (that function was moved into bsd.c)
    * Moved all the dead code out of the dist package.
    * Got rid of the nalloc memory allocation package, and all associated code
        It's not been supported for close to a year, and nobody uses it.
    * In hash stuff, malloc calls of the format malloc(sizeof(*ptr))
        (K&R 2nd-edition how-to-write-hash-stuff standard) to the more
        common (and sensible) malloc(sizeof(POINTER_TYPE)) format.

- Bug fixes -
    * Players shouldn't be able to execute commands from Garbage if they
        need a valid location.
    * Documented the ISNUM() function (which existed but wasn't in the docs)
    * Fixed exec() call problem with wrong 'cause' in did_it.
    * Fixed sort() so it doesn't segfault on an empty list. Also, it no
        longer uses calloc()  (and thus no longer leaks memory).
    * Fixed a bug with semaphore execution not copying the stack correctly.
    * Fixed the attribute lock corruption bug. AUGH.
    * Logging function is only called for general commands if log_commands
        is on or the player is SUSPECT.
    * v() permission check is now correctly AF_MDARK not AF_WIZARD.
    * find_flag_on_type (the wrapper for find_flag) now returns -1 on error
        instead of 0, since 0 is the ROOM flag. All calls to these functions
        have been modified.
    * Functions are no longer evaluated unless the parser really needs them.
        This cuts down on some overhead, as well as odd messages for things
        like "help loc()" or even the nonsense "foo loc()"
    * Fixed memory leak in page-return, and got rid of pronoun_substitute()
        function completely (relic of the old parser).

==========================================================================
 
Version 1.50 patchlevel 6  #1,  December 14, 1992

--- Features ---

- New additions -
    * VAL() function. Takes leading numeric prefix from a string.
    * INDEX() function. Like extract(), but works on arbitrary-length
        strings, on an arbitrary separator.
    * WHERE() function. Returns "true" location of an object.
    * Settable attribute flags have been added (@set obj/atr=flag).
        There are three such flags, "no_command", "visual", and
        "no_inherit". The first two are just the old AF_NOPROG and
        !AF_ODARK flags. The last prevents the inheritance of an
        attribute by the children of a parent object.
    * DEBUG flag, on an experimental basis. It is not settable by mortals,
        and it is computationally expensive. It provides precise output
        from the parser.
    * New config directive EX_PUBLIC_ATTRIBUTES added. Examine format for
        objects you don't control is now 2.0-ish. do_examine rewritten.

- Improvements -
    * ITER() now works in a much more usable way. It gets its arguments
        un-eval'ed, and escapes/braces are no longer needed to get it
        to evaluate in a "normal" way. UFUN() also now works with ITER().
    * SWITCH() can now take up to 100 arguments, and its arguments are not
        evaluated until needed.

- Changes to commands -
    * Royalty can set themselves DARK. This vanishes them from the WHO list
        but not from the visible room contents.
    * Royalty can set themselves MONITOR.

--- Other changes / bug fixes ---

- Efficiency -
    * Major improvements in the efficiency of the game have been made. Most
        of them are supported by profiling data (some have not been tested
        under a profiler).
    * string_compare has been replaced by strcasecmp. The built-in library
        function is probably optimal.
    * Got rid of reconstruct_messasge. No more spaces around '=' sign 
        in 'say', '@wizwall', etc, and no more wasted time splicing messages
        together.
    * If we match "me", "here", "#dbref", or "*player", we do no further
        matching.
    * The construction "<name of nearby object> <command>" as an alias for
        @force no longer works. "<#dbref> <command>" still works, but the
        amount of matching caused by the former is insane.
    * Rewrote spname(). If FULL_INVIS isn't defined, it's the same as the
        Name() macro. Otherwise, it returns a const char * and doesn't do
        a strcpy (blech).
    * hash_fn now uses a bitmask instead of modulus. Hash table sizes have
        also been increased.
    * atr_match, atr_get, and atr_add now use all upper-case, eliminating
        the need for string_compare rather than strcmp (and getting rid of
        zillions of tolower() calls). Added upcasestr() function, which
        converts a string to uppercase, in-place. (We convert from lower to
        uppercase MUCH less frequently than vice versa).
    * Small text files are now cached. As long as your small text files
        are small (and they SHOULD be!) the extra memory overhead is not
        at all significant. This eliminates the several grillion calls to
        open() and close() caused by players connecting and disconnecting.
        @readcache command added. (Note that you may have to add a blank
        line to the end of your small text files, since the new code does
        not automatically do so.)

- Misc. changes -
    * Destroying an exit tells you what exit number you destroyed.
    * Mortals can type "ex *player" (since they can type "ex [num(*player)]")
    * Added flags.h (split from db.h).
    * Normal MUSH @shutdown now writes out process statistics.
    * The TERSE flag now suppresses ONLY auto-look messages.
    * Things without real locations (like rooms) can once again @trigger.
    * options.h file has been split from config.h. options.h contains all
        the compilation directives; config.h contains the miscellaneous
        configuration-type things which should not be modified.
    * Commands done in GOING rooms are no longer considered invalid.
    * @parent <object> with no other args unparents an object.
    * REPEAT() with 0 repetitions returns a blank string, not an error.

- Code cleanup -
    * DESC is typedef'ed rather than #define'd in bsd.c.
    * Added new match predicate, match_nearby(). Like an "everything" match,
        but does not check "absolute" refs and *player refs for mortals.
        Cleaned up code to use this where appropriate.
    * Almost all of the set.c functions now do matching in the standard way.
    * In various places, checks for strlen(foo) == 0 have been replaced by
        *foo == '\0'.
    * addrout() is now hostname_convert() (a more sensible name). Also
        rewrote it to use the standard conversion routines.
    * All attribute fetches in eval.c use a consistent form of permission
        checks. (This has the side-effect of no longer allowing objects
        to get a ZFUN from a link_ok zmo). Also, Can_Read_Attr macro is
        now used all over the code.
    * Some minor cleanup in atr_add.
    * fun_lcon, fun_lexits, next_con, and next_exit have been rewritten.
        In addition to being much neater, they now provide more security;
        you cannot use them remotely on a room you don't control, regardless
        of whether or not you own any of the objects in it.
    * The prefix for do_wall is directly assigned instead of being strcpy'ed.
    * In eval.c, and some other files (partially), db[x].foo references 
        have been replaced by the appropriate macros.
    * Added where_is function, returning the true location of an object.
    * can_link and can_link_to are macros.
    * Added Can_Locate macro.
    * In eval.c, fun_foo declarations are static void intstead of void.
    * controls() code now uses a bunch of macros.

- Bug fixes -
    * Eval locks now work properly, since we no longer clobber the 
        uncompress buffer.
    * setunion() duplication bug fixed.
    * edit() recursion bug fixed.
    * Definition of "nearby" corrected to include exits in the same room.
    * You can't "kill" yourself.
    * The lock buffer overflow problem has been fixed the "right" way.
    * esnotify now uses notify_noecho, so puppets don't get emit repeats.
    * Fixed coredump bug caused by exits doing certain funtion calls
        (check was originally for NOTHING rather than GoodObject).
    * Fixed possible buffer overflow problem in set_interp.

- Compatibility -
    * The #ifdefs around the rusage stuff have been changed to HAS_RUSAGE.
        The systems which do and don't have this don't follow any kind of
        consistent pattern.
    * Some minor changes to get the code Linux-compatible. The original
        patches for this were provided by Bob Green (bob@inmos.co.uk).
        The restart script is now written in sh instead of csh.
        FNDELAY changed to O_NDELAY (on Suns, they're the same. Hopefully
        this is true for other systems as well, so things don't break).

==========================================================================
 
Version 1.50 patchlevel 7  #1,  January 17, 1993

--- Features ---

- New additions -
    * Individual powers system. Individual objects and players can be given
        the ability to do specific things, such as "examine anything",
        "teleport anywhere", "boot players", etc.  The BUILDER and IMMORTAL
        flags are now powers, as well.
    * Expanded flag system. Flag lookups are now hashed. A database conversion
        is necessary (see ADD_POWERS directive in options.h, which converts
        a database for both the new flags and the powers system).
    * There is a "no_clone" attribute flag (do not copy attribute when
        the object is @cloned).
    * "@config/functions" lists all functions.
    * New command "@function" allows the addition of user-defined global
        functions which behave just like built-in MUSH functions, but
        can be programmed in MUSH in a UFUN() format.

- New functions -
    * setq() and r() allow local variables (registers, numbered 0-9),
        saved through the execution of a command.
    * squish() removes leading and trailing spaces from a string, and 
        crunches inter-word spaces down to a single space.
    * filter() returns members of a list for which a user-def'ed function
        evaluates to true ("1").
    * fold() recursively evaluates a user-def'ed function and list.
    * rjust() and ljust() pad strings with spaces (or another fill character)
    * nsort() sorts a list of numbers.
    * shuffle() randomizes order of elements in a list.
    * scramble() randomizes order of characters in a string.
  
- Improvements -
    * cat() can take an arbitrary number of arguments.
    * conn() and idlesecs() now recognize #dbref and *player. Added alias
        idle() for idlesecs().
    * The mail database name is now a config option (if you use @mail, you
        MUST change your conf file).

--- Other changes / bug fixes ---

- Misc. changes -
    * "Exits:" line in examine is back.
    * examine on non-existent attribute(s) returns "No matching attributes."
    * NO_COMMAND doesn't block ^, since you have to set the LISTENER flag
        on the object anyway in order to activate ^.
    * @config shows a couple more options.
    * The QUIET flag suppresses "Drained.", "Notified.", "Halted."
    * Logging of database reads at startup is slightly neater.

- Code cleanup -
    * Database loading routines have been changed. Support for "old-style"
        MUSH databases has been removed (who USES old-style MUSH databases??)
        The config directives ADD_PARENTS, ADD_LOCKS, and ADD_ZONES are gone;
        if you need to convert using them, convert using an older PennMUSH
        version, then upgrade that database to the present code.
    * atr_comm_match and list_check stuff in game.c is macro'd and a bit
        easier to read.
    * Got rid of some unnecessary tprintfs with notify_noecho.
    * Prevented buffer overflows with puppet messages.
    * @switch and related stack-pointer-changing functions no longer keep
        copying the stack; added local_wild set of functions.
    * FUNCTION(x) general function declaration macro for eval.c functions.
    * XFUNCTION(x) macro for functions not declared in eval.c
    * cat() and strcat() functions use safe_str and friends.
    * Fixed warnings about assignments being used as truth values.
    * Recoded sort().
    * List-handling functions use list2arr where possible (sort, setfuns).
    * UFUN() code made more generic - addition of parse_attrib() function,
        splits up something of format "<obj>/<attr>" (returning dbref and
        pointer to attrib), do_userfn() executes something of UFUN() format.
    * "channels" field is only in memory if you use chat system.

- Bug fixes -
    * Debug and Verbose output now call raw_notify instead of notify,
        so stack pointer doesn't get clobbered.
    * switch() and iter() arguments are evaluated properly (small change
        made so nesting of these within other functions works sensibly).
    * Players cannot enter arbitrary objects (by dbref) remotely.
The changes in this file begin with PennMUSH 1.50 patchlevel 1.
The change in the way of numbering versions was made to make it
easier to keep track of what MUSHes were running which code
releases, since subversions often had additional small patches.
 
   -- Amberyl (lwl@eniac.seas.upenn.edu)
 
==========================================================================
 
Version 1.50 patchlevel 1  #1,  June 16, 1992
 
--- Features ---
 
    * Parent objects! Checks for inherited attributes and $commands.
    * @wipe command: clears all attributes from an object.
    * Completely new @mail code.
    * More than one connections reports "has reconnected" and 
	"has partially disconnected".
    * Support for /switches in commands.
 
--- Functions ---
 
    * CREATE() -- creates object, returns dbref. do_create now returns a dbref.
    * DIG() -- digs a room and links two exits, returning room dbref.
        do_dig now returns a dbref.
    * OPEN() -- opens an exit and links it, returning dbref.
 
    * IDLESECS() -- returns the number of seconds a player has been idle
 
    * %L and v(L) substitution added. Gives the location of the
	enactor. This doesn't violate security, since the enactor
	has in effect "volunteered" his location by triggering
	some sort of $command.
 
--- Fixes ---
 
Minor changes:
    * Added a comment for the i386 config directive in config.h
    * Note printed to log when restart is finished.
    * Put comma where it should be in AUDIBLE for things. (Typo)
    * @version prints last compile time.
    * Disabled logins don't affect royalty.
    * @clone now copies the template's zone and parent fields.
    * @decompile prints zone and parent.
    * match_controlled_absolute now also allows absolute matching on
	"nearby" objects. This makes conflicts between object nmaing
	easier to resolve.
    * fixed all those references to "Marks" in the helptext.
 
Bug fixes and other such stuff:
    * db_read() can cope with hard newlines in objects
    * Allow God to force himself
    * Formatted the calls to sprintf for %N and %L substitution
	correctly. Bleah.
    * Fixed bug which only executed @move stuff when object was a Hearer.
    * Fixed a really horrible memory leak in filter_found
    * HPUX stuff - fixed typo in a declaration, rewrote my_random
	so it copes with normal-sized integers (on many HP-UX machines,
	numbers in excess of 10^6 were required to get it to work).
    * @daytime on/off accurately reflects what the help says.
    * There is no preferred type in calling matches for zone object names.
    * Function table lookup is hashed.
    * Fixed memory leak problem with use and enter locks not being properly
	free()'d when objects are destroyed.
    * Fixed minor problem with some db fields not being cleared when objects 
	are destroyed.
    * do_empty now walks the database clearing out objects zoned/parented to
	a destroyed object.
    * The LASTSITE of a newly-created player is now correctly set.
    * you can no longer "give" yourself. Not only is being able to
	give yourself stupid, but it also defeats the enterlock check.
    * Immortal objects also can't gain money. Whoops.
    * popen check on @uptime
    * fixed potential coredump bug in @doing

==========================================================================
 
Version 1.50 patchlevel 2  #1,  August 10, 1992

--- Features ---

- New additions -
    * Much-improved chat system. Adding, deleting, renaming, and
        re-priv'ing channels on the fly.
    * @verb command (create user-defined verb/overb/averb triplets).
    * rpage capability added.
    * dbstats capability added. Code for this and rpage available upon
        request.
    * Semaphores! Modified @wait, added @notify and @drain.
    * AF_MDARK attribute flag (attribute only visible to wizards and royalty)
        and @comment attribute.
    * Ownership lock primitive '$' added. Page-locking no longer blocks
        using ownership, since you can just lock explicitly.

- Changes to commands - 
    * @dump/paranoid - database consistency checker.
    * @uptime command now displays process usage and time until next dump.
    * Wizard WHO shows descriptor numbers.
    * You can @boot by descriptor number. 
    * @edit/@gedit does prepend and append.
    * /silent switch added to @pemit (for 2.0 compatibility).
    * Mail @stats can give a lot of details.
    * look/outside allows you to look outside your location.
    * @mail sanity checking via /debug switch.
    * Attribute sets of the form @set <obj>=<new>:_<thing>/old now
        set the contents of attrib <old> on <thing> into <new> on <obj>
        and thus can be used to copy attributes. (This feature existed in
        the code last year, evidently, but was never documented and
        didn't work anyway.)
    * @teleport failure triggers @efail/@oefail/@aefail.
    * @entrances takes switches and output is more informative.
    * @lock/@unlock/@chown modified to allow atrchown and atrlock to be
        done using 2.0 syntax.

- Maintenance changes -
    * Completely revised logging facility. This is still in the process
        of changing, but there are now several logfiles, and many log
        messages are printed in a standardized format.
    * Text files now have a directory of their own.
    * Most configuration options are now read from a conf file instead
        of hardcoded into config.h.  Restart script modified.

- Improvements -
    * Players on channels hear disconnect/connect messages.
    * Locked attributes have a + symbol next to the owner number.
    * @oemit changed to work 2.0 style - if you @oemit with an exception
        of yourself, you get no notification.

--- Functions ---

    * CONVSECS() -- converts seconds to time.
    * CONVTIME() -- converts time to seconds.
    * SETUNION() -- find the elements that are in both lists.
    * SETDIFF()  -- find the elements that aren't in both lists.
    * SETINTER() -- like CAT() without duplicates.
    * CONN() -- returns number of seconds a player has been connected.
    * REVWORDS() -- retverses a list of words.
    * SWITCH() -- returns the text associated with a @switch-format list.
    * EDIT()  -- similar to @edit.
    * STRMATCH() -- match entire wildcarded string.

--- Other changes / bug fixes ---

- Minor changes -
    * idlesecs() is more efficient.
    * mail.c #includes string.h
    * strdup() function included in stringutil.c (some machines don't
        have this in the standard libraries)
    * OPTIM flags added for gcc 2.0 in Makefile
    * Fixed some inappropriate uses of 0 where NOTHING should have been
        used, in set.c
    * Began general code cleanup.
    * The Joarm mailer is no longer an option.
    * do_flip recoded (slightly more efficient).
    * Fixed some warnings.
    * Fixed helptext for loc()  (the function gives drop-tos for rooms)
    * Some eval.c functions rewritten to be a bit cleaner.
    * Size of tprintf() buffer increased.
    * Queue quota displayed in @config.
    * Fixed an error message in destroy.c
    * Un-protoized some functions.
    * version.h is now a standard file (no more version.h.dist, etc.)

- Bug fixes -
    * Fixed a serious security hole in the password checker.
    * Fixed echo bug with @listen/audible
    * Fixed memory leaks in attrib hashing scheme and mail.
    * The CONNECTED flag is not player-settable, period.
    * Fixed bug in boolexp code which allowed locking to a null attribute.
    * LISTEN is no longer inheritable for the purposes of @ahear et.al.
        (it was documented this way in the help text but not actually so).
    * Going through an exit linked to home ALWAYS sends you to the correct
        place.
    * Cleanup of @tel code. Also, fixed bug that allowed non-priv'ed things
        to @tel priv'ed ones.
    * SPACE() does buffer length checking properly.
    * locate() no longer reports errors when you specify a type.
    * You must be INHERIT to set the INHERIT flag.
    * Criterion for halting an object is now (as it should have been)
        having the same owner, NOT being the actual owner.
    * If a new command is provided as an argument to @halt, the object
        is not set HALT.
    * @toading a player wipes out his mail.
    * Fixed case-sensitivity problem in matching @nuke command.
    * match stuff for "use" now done properly.
    * Examination of objects without descs whose parent objects have descs
        no longer shows the parent's desc.

- Improvements -
    * @mail now compresses messages in memory.
    * @wall/@wizwall/@rwall all covered by do_wall now. raw_broadcast
        also changed.
    * Hard newlines can now be used in mail and objects (although a
        @dump/paranoid still regards them as bad and will strip them).
    * You can start user-def'ed commands with + again (channels don't
        clobber them).
    * mkindx is more careful about clobbering files.
    * atr_comm_match is vastly more efficient.
    * do_doing strips out tabs as well as newlines.
    * MATCH() now works like the 2.0 function (returns 0 instead of #-1
        on error).
    * "goto" and "move" now check zone and global exits.
    * SORT() takes an arbitrary number of arguments.
    * Can shorten report trace stuff via config directive.
    * Object destruction now uses clear_mail directly.
    * Freeing of memory in queued commands now done by a single function.
    * Added game.h header file for stuff just called from game.c
    * Moved some stuff over from config.h to db.h
    * @whereis done by Royalty or Wizards doesn't notify victim.
    * Dump freeze message is now in config.h
    * '#' ref in mail.c replaced with NUMBER_TOKEN

- Compatibility -
    * ULTRIX config directive added.
    * Fixed SysV signal problems.
    * Support (more or less) for compilers that only understand traditional 
        C has been added.

==========================================================================
 
Version 1.50 patchlevel 3  #1, October 2, 1992

--- Features ---

- New additions -
    * REWRITTEN PARSER. It should now be 99.9% TinyMUSH 2.0 compatible.
        A great deal of the code for this comes from the TinyMUSH 2.0
        parser originally written by JT Traub and Glenn Crocker.
    * @tport/@otport/@atport/@oxtport attributes added.
    * @kick command forces execution of commands from the queue.
    * @cpattr command copies attributes.
    * @fixdb command does within-the-game db repair.
    * @grep command searches attributes for a specified pattern.
    * Objects in an UNFINDABLE room cannot be located.
    * @scan command checks for possible $-matches to a command.

- Changes to commands -
    * @uptime shows wizards the head of the object free list.
    * examine can take a "debug" switch.
    * @dig can take a "teleport" switch.
    * @decompile works on any object type.
    * @edit now takes wildcards, like @gedit does. @gedit is now simply
        an alias for @edit. 
    * @find, @search, and @entrances can take a dbref range limit.

- Maintenance changes -
    * Crash database is now configurable.
    * BUILDING_LIMIT config directive limits total database size.

- Improvements -
    * Hashed attribute table. Also, added attribute aliasing instead of
        to replace the previous string_prefix grot.
    * The UFUN() function can now take an object-attribute pair. Also,
        it is aliased to U(), the 2.0 name of the function.
    * Lookups on *player will now partial name-match to a connected player.
    * PLAYER_LISTEN config directive allows @listen on players.
    * LOCK() and ELOCK() functions can take a locktype switch.
    * The LNUM() function will generate a list up to the buffer limit.
    * You can @parent stuff to LINK_OK objects.

--- Functions ---
    * ITER() -- a function version of @map.
    * ESCAPE() -- escapes out potentially dangerous characters.
    * MERGE() -- merges two strings by character.
    * SPLICE() -- merges two lists by word.
    * REPEAT() -- repeats a string.

--- Other changes / bug fixes ---

- Minor changes -
    * The recursion prevention check for @parent is more paranoid.
    * Non-connected things are explicitly prevented from setting @doings.
    * Fixed some "shadowed declaration" warnings with 'exit'.
    * Logging of slays standardized.
    * Math functions now return errors if their arguments are non-numeric.
    * Checking for bad config options (PLAYER_START etc.) and fix_free_list
        coded properly.
    * parent() always works for royalty.
    * You can drop by dbref number.
    * @pcreate correctly sets Lastsite attribute to None.
    * get() and eval() on non-existent attributes now returns a null string
        instead of #-1 NO SUCH ATTRIBUTE. This is 2.0 compatible and easier
        to deal with.
    * atr_comm_match now correctly returns the number of commands matched.
    * Typo in log.c which some compilers didn't like fixed.

- Bug fixes -
    * Name matching with @parent is fixed.
    * A small typo bug in skip_space has been fixed. REST() and related
        functions should no longer be returning an extra space.
    * Wait and semaphore queue traversal is now consistent. Also fixed
        a coredump bug in semaphores.
    * Overflowing the page buffer causes a truncation of the message (and
        thus prevents people from crashing the MUSH by spam-pages).
    * @halt correctly handles semaphores.
    * Coredump bug in SETUNION() fixed.
    * @a-attributes on exits linked to home no longer cause a crash.
    * Most of the quota-handling functions have been rewritten. Still ugly,
        but usable. Hopefully these are much less buggy.

- Compatibility -
    * There is no indentation before preprocessor directives (traditional
        C has problems with this).
    * The ULTRIX config directive has been replaced by a SUN_OS one, since
        it appears that Ultrix is a bit more standard.
    * Wrote a version of the nchan() function in chat.c for systems that
        don't have the log2() function.
This is a continuation of the change log for PennMUSH, covering Release 
Levels 1.18 and 1.19.

----------------------------------------------------------------------------
February 25, 1992 -- Lydia Leong (lwl@eniac.seas.upenn.edu) Release Level 1.18

mail.c is problematical. It's an older version of Spellbound mail, and has a
nasty tendency to crash the MUSH from time to time. It's generally safe to
use, but if you have a problem with repeated crashes, wipe out the mail
database.

  -- New functions
    * ALPHAMIN() and ALPHAMAX() -- return the smallest/biggest word,
        lexicographically, in a comma-separated list of up to 10 arguments
    * DIE() -- "rolls" an n-sided die m times, simulating things like "2d6"
    * LATTR() -- returns a list of attributes on an object
    * LSEARCH() -- similar to @search, returns a list of dbrefs
    * SECURE() -- smashes dangerous characters in a string
    * SECS() -- returns number of seconds since midnight Jan. 1, 1970
    * SORT() -- lexicographically sorts a comma-separated list of up
        to ten arguments, returning a space-separated list of words
    * ZONE() -- returns the zone of an object
  -- New commands
    * brief -- like "examine", but does not display attributes
    * @chzone -- change zone of an object
    * @chzoneall -- change zone of all objects belonging to a player
    * @select -- like @switch, but only executes the actions matching the
	first target it finds (like 2.0 @switch/first)
    * think -- send a private message to yourself
    * use -- use an object, triggering @use/@ouse/@ause
    * @zemit: emit to all rooms in a zone
  -- New flags
    * MYOPIC -- player sees everything like he doesn't own it (no dbref
	numbers and flags appear when you look at something)
    * TRANSPARENT on rooms -- does "long format" exit names in the room, like:
	Obvious exits:
	 North leads to Joe's room.
	 East leads to Kitchens.
  -- New features
    * Uselocks on objects allow only those that pass the @ulock to use
	them. This provides for a secure way to get around the problems
	with INHERIT, and regular security problems, since @ulocks also
	block $commands from unauthorized users.
    * @use/@ouse/@ause attributes added, triggered by "use" command.
	The old "@use/@does" pair is preserved as "@use-does/@does",
	for backward compatibility.
    * Zones implemented. Please see the help for details.
	Anyone who passes the enter lock of a zone object controls all
  	  objects in that zone - i.e. has the equivalent of wizard privs
	  in that zone.
	In addition to regular command matching, you also match commands
	  in the zone of your current room, and your person zone. These
	  are $commands on the master object for the zone. This matching
	  occurs between regular $command matching and global matching.
    * MUCK-style parent rooms implemented as a subset of zones. Parent rooms
	are ZMOs which are rooms. Parent room exits and $commands on objects
	in the parent room are checked before local zone commands.
    * "Events" file, compile-time option, a file like news and help
    * Config options DARK_EXITS, TRANSPARENT_EXITS, and TRANSPARENT_ROOMS,
	which are building defaults.
    * Site lockout has been improved. It now does wildcards, thanks to
	T'nor of SouCon MUSH. It is also possible to do registration on sites
	as well as lockout.
  -- Fixes and other changes
    * the usual minor bugfixes
    * ELOCK() no longer requires player to control either object being
	evaluated by the function.
    * @chown and related commands now remove the INHERIT and ROYALTY flags.
    * @search (and LSEARCH) now allow class restriction "zone".
    * fixed bug which allowed wizards to set objects they didn't own
        WIZARD (this should be a god-only priv)
    * if an object pages a NOSPOOF player, the object's number appears
        before the message, in a fashion similar to NOSPOOF-flagged emits.
    * fixed a coredump bug in "give" which was triggered by a wizard "giving"
	a player extremely large numbers of negative pennies.
    * fixed a typo in game.c in LOG_FAILED_COMMANDS
    * startup sequence now prints warning in log if PLAYER_START,
	MASTER_ROOM, or GUEST_PLAYER are set to invalid values.
    * @config expanded to give more detailed, informative output.
    * cleaned up STICKY code and corrected the help text
    * core dump bug involving rooms and exits trying to execute $commands
	has been fixed (thanks to GlobalMUSH for pointing this problem out).
    * "throw" as an alias for "drop" has been removed
    * others in the room are now notified when someone takes something
	with "<person> takes <object>" (instead of nothing, if no osucc
	message was set). The drop message has been changed to 
	"<person> drops <object>", so the verb tenses are the same.
    * say now has a comma (grammar! What a concept!)
    * a small bug involving @clone'ing exits in rooms you couldn't link
	to has been removed
    * you can now link drop-tos in rooms to "home"
    * @search now outputs rooms in a format like things (it shows you
	the owner of the room)
    * NOSPOOF and TERSE are now player flags; the Nospoof/Terseness of an
	object is dependent upon its owner's status.
    * upped MAX_COMMAND_LEN to 1 K (doubled the maximum, in other words).
	BUFFER_LEN is still only 4 K, though. I don't think this should
	break anything.
    * did little tweaks which should remove almost all the compiler warnings
    * some minor bugfixes in bsd.c
    * inactivity_check moved to timer.c, where it's done with db fixups
    * @destroy's output is more informative now
    * you must know a player's password in order to rename him (in the past,
	a wizard could use his password instead, and an object owned by
	the player didn't need a password at all)
    * fixed coredump bug in @clone caused by the function not duplicating
	enter or use locks.
    * alphabetized flag listings somewhat
    * IDESC now does pronoun substitution
    * fixed stupid problem in some call to do_move in game.c - initially
	forgot to pass a type flag, causing problems on some machines
    * quick #ifndef fix to externs.h that should help convince SysV machines
	that they like MUSH. Thanks to Delany for this one.
    * rewrote NOSPOOF code in do_page so it OUGHT to work on all machines
	(certain systems couldn't take the null string at the beginning of
	a call to print, in the original version of this)
----------------------------------------------------------------------------
May 5, 1992 -- Lydia Leong (lwl@eniac.seas.upenn.edu)  Release level 1.19

  -- New flags
    * ANSI_DISPLAY - bold-hilites names of attributes, making it easier
	to read long object listings.
    * AUDIBLE - exits propagate sound to next room. The room must be set
	AUDIBLE in order for checking to occur. @prefix is prepended to
	message. @filter filters out stuff that matches anything in a
	list of comma-separated patterns.
	A similar thing is true of objects set AUDIBLE; messages from
	within them are propagated to the outside world.
	(Re)Setting stuff AUDIBLE causes a "now broadcasting" or
	"no longer broadcasting" message to be emitted.
    * LISTENER - objects which use ^ patterns must now have this set.
	The benefit is some increased speed, and all objects which are
	LISTENER are checked for ^ patterns even if they have a @listen.
        Setting something LISTENER triggers the "grows ears and can now hear"
	message. When an object loses its listen status (not puppet, not
	listener, and has no @listen), it "loses its ears and becomes deaf"
    * MONITOR - wiz-settable flag, notifies player of connects/disconnects
    * STARTUP flag added. Should massively increase efficiency on startup.
         Need to define ADD_STARTUP_FLAG when using this for the first time.
  -- New functions
    * ABS() returns the absolute value of a number.
    * BEEP() -- send up to five "alert" bell characters
    * EVAL() - gets an attribute from an object and does pronoun subst.
    * LOCATE() -- controlled match with respect to a certain object.
    * LSTATS() -- returns a breakdown of player's stuff in list form
    * PMATCH() - partial name-match, returns dbref number of player
    * ROOM() -- returns absolute location of an object.
    * SIGN() returns 0, 1, or -1 depending on the sign of a number.
    * SPACE() -- prints a certain number of spaces
    * STRCAT() concatenates two strings with no space between them.
    * UFUN() -- takes a "function name", which is an arbitrary attribute
	on an object, and arguments, and plugs it through the functions.
        Allows you to define your own functions.
    * ZFUN() -- like UFUN, but reads the attribute from the ZMO.
  -- New features
    * Name lockout -- a file definable in config.h contains a list of
        player names which may not be used. Both player creation and
	player name changes check this (the ok_player_name function
	now calls a new predicate forbidden_name)
    * @map command - takes a list and a function, and maps the function
	onto the list, returning a list. This is basically a variation
	on @dolist.
    * @daytime command - turns off @find, @entrances, @search, and LSEARCH()
	Useful when running on a machine that you don't want to munch a lot
	of CPU time on.
    * Enter and exit aliases can now have semi-colon separated lists
    * Teleport locks added as a subset of enter locks.
    * Wizards that reach IDLE_TIMEOUT and are set UNFINDABLE are automatically
	set DARK.
    * "@uptime" command, gives system uptime. Wizards only.
    * T'nor's improved @halt code added -- allows clearing of a single
	object's wait queue. IMMORTAL flag prevents halting of objects.
    * Chat system! To add new channels or change existing ones, check 
	chat.h, look.c, predicates.c, and speech.c  (grep for
	CHAT_SYSTEM to find the relevant code)
    * Maximum login limit, automatically turns logins on and off.
    * Global and zone aconnect/disconnects added.
    * Immortal objects no longer use up money.
    * Royalty no longer uses money, nor is it subject to quota or
	BUILDER bit restrictions (i.e.treated like wizards are wrt building)
    * Added '@@' comment signal.
    * Added new match type, match_controlled_absolute(). This allows players
	to match things by number, if they control them. Players can now do
	remote look and get on objects that they own (the new match predicate
	is in other functions as well, but those two are the major ones).
    * Game now tells you the time and place of your last login at connect.
    * Hilites using ANSI control characters have been added, for attribute
	examines. The AUDIBLE flag is overloaded; it's an unpleasant but
	workable kludge.
  -- Fixes
    * added an extern declaration of match_thing to attrib.c so all
	compilers deal with the LATTR code
    * fixed move.c's do_drop to handle dropping of objects in a TEMPLE
	correctly. Based on Jim Miller's patch (retief@iastate.edu)
	I also patched it so everything takes place in a logical order
	and that the stuff which ought to be #ifdef'ed, is.
    * put in the "rob" code again, as a config option (thanks to Jim
	Miller for pointing out that it never got used)
    * STICKY flag split into a thing flag and a room flag (running into huge
	numbers of flags, and therefore making an attempt to compress the 
	ones that are only applicable to two or fewer types)
    * fixed ^patterns so %N substitution works properly
    * fixed bug in did_it involving charges. (Sheesh. This bug's been
	around for a _long_ time. Dunno why no one pointed it out before.)
    * recoded FLIP function - now calls a generic utility function which
	reverses a string, using pointers (much cleaner now).
    * parent room checks fixed, thanks to Jim Miller. Another stupid bug.
    * only rooms may have a parent room as their zone
    * added MUSH restart time to the top of the MUSH log, static variable
	start_time added.
    * @version now gives the MUSH name and time of last restart in addition
	to the code version.
    * Behavior of @chzone changed by popular request - any wizard can
	@chzone a player now
    * Kludges to try to prevent crashes caused by huge lock unparses:
	do_lock and unparse_boolexp check for overflowing the buffer length,
	kinda sorta. It's still possible to crash the game, but it's highly
	improbable. A real fix would require dynamically allocating space.
    * Added HP-UX compatibility, thanks to Schlake (craig@minos.nmt.edu)
	Also added his other minor fixes, like properly commenting out
	trailing text after #endifs, etc.
    * Did some minor cleanup using the IS macro instead of a written-out
	type and flag check
    * You cannot see what an OPAQUE object is carrying even if you own
	or control it (this is the way it should have been to begin with)
    * Fixed some more inappropriate calls to toupper() - confuses
	DECs. Used UPCASE macro instead.
    * LINK_OK is now valid for all types (dunno why this was changed
	in the 1.15 code, didn't realize it 'til now)
    * things that are LINK_OK can now be @triggered even if the
	INHERIT check fails. This provides some of the security of
	INHERIT but allows you to avoid clumsy workarounds for
	objects that only need to @trigger something. The control
	checks still apply.
    * Rooms-going-away with the floor falling out from under player
	messages should hopefully be fixed. The exact origin of this
	problem isn't known, but a check in dest_info for NOTHING
	should take care of it. It's a bug dating back to at least
	PernMUSH 1.06, but it seems to have increased in frequency 
	with this latest code, for an unknown reason.
    * Fix to display page-returns as 12 hours instead of 24 hours.
	Can #define MILITARY_TIME
    * added macro Mobile(x). This is true if x is type THING or PLAYER.
	((Typeof(player) == TYPE_PLAYER) || (Typeof(player) == TYPE_THING))
	is now Mobile(player).
	((Typeof(player) == TYPE_ROOM) || (Typeof(player) == TYPE_EXIT))
	is now !Mobile(x).
    * config option PARANOID_NOSPOOF added. If this is defined, nospoof
	also shows the object number of the spoofer.
    * you can no longer link something to itself.
    * added GoodObject(x) macro which checks if x is >= 0 and <= db_top
    * fixed bug in do_trigger which caused crashes if exits linked to home
	attempted to trigger stuff.
    * rewrote raw_broadcast using varargs.
    * prevent people from linking homes to GOING objects
    * atr_comm_match now automagically returns 0 if the checked object is
	HALT, since even if a command were matched, it couldn't execute
	it anyway.
    * Fixed an #ifdef-#endif problem in bsd.c, thanks to Czakari.
    * Changed PMATCH to work exactly like page-matching does. It first checks
	the normal player lookup table; if nothing is found, then it calls
	the connected player partial lookup. The error messages are now
	#-1 NOTHING or #-2 AMBIGUOUS. This is a more useful behavior.
        It notifies of the error, and returns the number.
    * SUSPECT flag is no longer detectable by non-priv'ed players
    * flags are shown if objects are VISUAL or DESTROY_OK, always
    * @poor now gives the player a message
    * fixed check for TEMPLE room so Verbose objects don't count as
	Temples! Bleah! (*sigh* still tracking down all the places
	where the IS macro should be used...)
    * LOC(), HOME() now always works for royalty. (Oversight)
    * @poll changes are logged
    * @chzone on players no longer nukes the W, r, and I flags.
    * checks on GET() and attribute flags changed -- an attribute
	which is flagged AF_DARK is no longer gettable at all
	(like the password! Bleah!)
    * @chownall and @chzoneall now provide object count.
    * the value of a cloned object is now the same as the value of its
	template object
    * fixed immortal/unfindable problem in do_kill with an IS macro
    * @listmotd lists all the motds for royalty. Should have been this way
	before, since royalty get the wizmotd at login.
    * fixed weird bug that caused players to become owned by God. If someone
	tried to call atr_add with thing = 0, the privs were done as GOD
	and the owner of the caller became owned by GOD. Why #0 was treated
	as a special case baffles me.
    * Only objects with the same owner can set each other INHERIT. Helps
	plug a zone-related security hole.
    * Zone control does not extend to objects set INHERIT.
    * Fixed bug in create.c that allowed non-builders to link exits and
	seize unlinked ones, even though they were told they couldn't.
    * Find now returns the number of objects found
    * Newlines and 'alert' bell characters can no longer be in @doings.
  -- Some stuff on versions:
    * DB header line is +V2 for old format (no changes),
      +V258 (256+2) for new locks and zones,
      +V514 for that plus chat system,
      anything else is +V770 (256*3 + 2)
This version of code is based on the PernMUSH 1.15 code, formerly maintained
by Moonchilde (JT Traub, jt1o@andrew.cmu.edu). It has been heavily modified
by me in an attempt to increase compatibility with TinyMUSH 2.0 and to add
many features. The file which follows is a detailed log of the changes.

This file is current through Release level 1.17 Gamma. Update changes are
numbered 1.17.01, 1.17.02, etc.  The list of update changes in this file
are compressed into one long list, per major version. This file goes from
version 1.16 on; prior changes done by Moonchilde can be found in the file
CHANGES-1.   --  Amberyl.

------------------------------------------------------------------------------
January 14, 1992 -- Lydia Leong (lwl@eniac.seas.upenn.edu)  Release level 1.16
  -- Probable last release of the PernMUSH code. The 1.x code family will
     be maintained by T'nor, and will be known as SC-MUSH 1.0. That code
     is based on PernMUSH 1.15, although it incorporates most of the features
     in this release. A similar but different code, which diverged from the
     main PernMUSH line at version 1.13, is Spellbound MUSH 1.0
  -- New functions
    * CAPSTR() -- returns a string with the first character capitalized
    * FLIP() -- reverses a string
    * HASFLAG() -- checks if an object has a certain flag
    * LCSTR() -- returns a string all in lowercase
    * LNUM() -- creates a number list (i.e. LNUM(4) outputs 0 1 2 3)
    * NEARBY() -- checks to see if two objects are "nearby" each other
    * UCSTR() -- returns a string all in uppercase
    * From the 2.0 code:
        DIST2D() and DIST3D() -- returns the distance between points
        WORDPOS() -- returns the word number a character position occurs
    * LWHO() -- returns a list of connected players' dbrefs. This function
        courtesy of Tim Poe (raven@ccwf.cc.utexas.edu)
  -- New flags
    * IMMORTAL -- wiz-settable flag which prevents objects from being killed
    * NO_TEL -- prevents teleports from a room. Useful for puzzles.
    * SAFE -- prevents destruction of an object.
    * SUSPECT -- wiz-settable flag which reports the connects, disconnects,
	name changes, kills, and attempted kills from a suspect player.
    * TERSE -- suppresses room descriptions and succ/fail messages for
	objects with this flag. Useful for moving through areas quickly.
  -- New commands
    * @nuke -- overrides the SAFE flag.
    * @lemit -- "location emit" which sends a message to the outermost
	container (always a room) of an object.
    * @wallpose and @wallemit -- allow poses and emits in walls. The format
	of @walls has been changed to prepend "Announcement:" to the message.
	@wallpose may be abbreviated to "@wall :<pose>"
    * @decompile -- dumps the sequence of commands needed to create an object.
    * @dolist -- courtesy of Tim Poe (raven@ccwf.cc.utexas.edu - thanks!)
        Repeats commands for a list (see the help for details).
  -- New features
    * @move/@omove/@amove -- attributes executed whenever an object moves.
    * Enter locks -- objects now have a separate lock which governs whether
	or not the object maybe entered. The ENTER_OK flag overrides the
	lock. The @efail/@oefail/@aefail attributes are executed if the
	lock is not passed. These locks are controlled by @elock/@eunlock.
    * Page locks -- players have a page lock. If a target player is pagelocked
	against his pager, he is treated as if he were HAVEN to that player.
    * Page return -- an @idle message is automatically page-returned to a
	successful page. If a player is HAVEN or his pagelock failed, his
	@haven message is sent. If a player is not connected, his @away
	message is sent.
    * Enter/leave aliases -- objects now have @ealias and @lalias attributes
	which do the obvious. So you can have "sit down" instead of
	"enter chair" and "stand up" instead of "leave", etc.
    * Global commands -- objects and exits in a Master Room are treated as
	global. This is compile-time configurable.
    * Lastsite attribute -- keeps track of site player last connected from.
  -- Fixes and changes to old commands
    * Whisper-pose -- "whisper <person>=:<pose>" now works.
    * @ps -- the number of items in the queue is now counted. @ps count"
	displays just the totals.
    * @halt -- fixed to allow wizards to do "@halt <player>", and to allow
	"@halt <object>" to be used as an alias for "@set <object>=HALT".
    * A bunch of fixes to quota
        Fixed @quota so it no longer crashes the MUSH. (Bleah!)
        Fixed @clone so it now checks quotas.
        Rewrote the help (it was inaccurate)
    * Fixed some minor screwups in ROYALTY, and changed it to allow wizards to
	set players royal, and royal players to set their objects royal.
        Did some cleanup work on "do_examine" and related functions so
        examine for ROYALTY actually works. (Grrrr.)
    * Did some cleanup on "kill", fixing some bugs. @death/@odeath/@adeath
	now works properly.
    * Added a "nearby" function to predicates.c which checks if two objects
        are near each other. Fixed LOC() so it works the way the help says.
    * Added a "find_flag" function to predicates.c which compares player
        input to the flag list and comes up with a match. Rewrote "do_set"
        to use this (the new HASFLAG() function also uses it).
    * can't @destroy master room, need to use @nuke to destroy players  
    * NO_TEL now checks "absolute" location for NO_TEL flag
    * %p, %s, and %o now return "its/it/it" for no-gender objects
    * @boot now shows that someone kicked you off
    * @shutdown notifies all players that a wizard did a @shutdown
    * @toad command must be typed in full
    * @emit and @oemit no longer show "You emit/You oemit" to the player
        giving the command, but just echo the message
    * Bug fix to do_set so flags which are different for different types
        don't clobber each other
    * Various minor bugfixes
    * "help @-commands" split into several sections. Some cleanup of help.
  -- See "help" for details. If you have problems, contact me (Amberyl)
	or T'nor (raven@ccwf.cc.utexas.edu) on the MUDs or via email.
----------------------------------------------------------------------------
January 31, 1992  -- Lydia Leong (lwl@eniac.seas.upenn.edu) Release level 1.17
  -- New functions
    * ART() -- returns the appropriate article "a" or "an"
    * MAIL() -- function to return a mail message
    * MAX() -- returns largest number in list of up to 10 arguments
    * MIN() -- returns smallest number in list of up to 10 arguments
    * OBJ() -- perfoms objective pronoun substitution
    * POSS() -- performs possessive pronoun substitution
    * RNUM() -- like NUM(), but on a remote room. Only defined if the
	master room is configured (for use with globals)
    * SUBJ() -- performs subjective pronoun substitution
    * TYPE() -- returns the type of an object
    * XGET() -- works like get(), but can have nested arguments, and uses
	a comma instead of a slash to separate its arguments. Basically
	this is just a nasty hack to overcome a lousy parser
  -- New flags
    * INHERIT -- restricts @force/@set/@trigger (read the help)
    * VERBOSE -- prints an object's command before executing it
  -- New commands
    * @config: shows configuration parameters for the MUSH
    * DOING: for wizards, gives the player WHO list. @doing messages do not
	show up in wizard WHO, so wizzes don't get spammed by the list.
    * @mail: hardcoded mail, courtesy of Joarm/Spellbound MUSH
    * @poll: sets the @doing poll
    * @rwall/@rwallpose/@rwallemit: allows Royalty to broadcast to wizards
         and royalty, in a fashion similar to @wizwall
  -- New features
    * Uselocks implemented as a superset of pagelocks. The commands have been
	changed to @ulock/@uunlock. A uselock applies to "use" of the object,
	as well as triggering $commands on it
    * @use/@ouse/@ause, triggered by "use", added
    * Old "@use" command changed to "@use-does", for backward compatibility
    * Inactivity timeout, compile-time settable
    * Guest character, who cannot change name or password, or build
	This is compile-time configurable
    * Added %b and %t substitutions (blank space and tab)
    * Attributes may have a ^ pattern similar to $command patterns. These
	act like multiple @listen patterns and are triggered under the same
	criteria as an ahear. For example, @va object=^* has arrived.:"Hi.
	would match "Amberyl has arrived." and the object would say Hi.
	These are only matched if no @listen exists.
    * added announce.c to the distribution package
  -- Changes to existing commands
    * test_set changed to allow '&' to be used for user-defined attributes,
	for compatibility wth 2.0 code
    * @decompile now distinguishes between normal and user-defined attributes,
	and uses '&' for user-defined
    * @search now does a count of objects.
    * changed enterlocks so that to enter an object, you must both pass
	the lock and the object must be enter_ok
    * @pemit and whisper now match objects in the player's possession as 
        well as the player's container.
    * need to use @nuke to destroy a wizard object.
    * @doing and @poll now tell you how many characters got truncated from
	your message, if it was too long.
    * @clone will now do exits
    * if a @listen is not found, the game will now check for ^ patterns
	in attributes, which act like an ahear.
  -- Fixes and other sundries
    * fixed a bug which caused a coredump if you attempted to look at a
	TRANSPARENT exit linked to *HOME*.
    * home(exit) now returns that exit's source room
    * examine now reports an exit's source
    * exits linked to home now send an object home
    * new matching functions for remote rooms
    * successfully teleporting something to an exit no longer shows that
	stupid "imposes his will on yours" message
    * fix to ucstr and lcstr to add terminating '\0' (stupid mistake)
    * safe_tel fixed to avoid conflict between BUILDER and KEY, and to avoid
	sending STICKY objects home if their home is the teleporting object
    * @boot fixed so wizards can't boot themselves.
    * THING_SAFE, PLAYER_SUSPECT, and ROOM_NO_TEL moved from 1000000 to
        4000000, for compatibility with SC-1.0 code.
    * changed do_examine to match exits first, for 2.0 consistency,
	changing it back from an earlier fix. Note that 2.0 plans to
	change the order in the future. This makes examine consistent
	with the other commands which do name-matching.
    * changed do_destroy to always notify player when room is destroyed
    * added a "flag" to unparse_boolexp, so that you can get a "basic" unparse:
	only dbrefs and tokens (i.e. exactly what you'd need to type to lock
	that object to that key). Added the ability to decompile locks,
	and changed LOCK() to use unparse_lock instead of unparse_boolexp
    * @chown now removes the Royalty flag.
    * abilities of royalty expanded to be consistent. They have full wizprivs
	wrt. examining and teleporting but cannot change things - they see
	the wizard WHO (since they can examine a player for Lastsite and
	location anyway), use LWHO(), GET(), V(), LCON(), etc. as if they
	were wizards. New macro added "Hasprivs", which is true for royalty
	or wizard or God, getting rid of most of the #ifdef ROYALTY_FLAGs
	in the code.
    * @newpassword, @boot, @nukes of players, @toad, @pcreate, and all
	all commands from SUSPECT players are logged
    * Log highlights wizard forces of objects they don't own
    * PUPPET is now THING_PUPPET
    * global exits, ealiases, and laliases can be more than one word long
    * NO_TEL is now determined by the location of the victim not the
	location of the player trying to do the teleport
This code evolved basically from a version of MicroMUSH that I recieved around
the 20th to the 25th of January.

At that point I removed some of what I saw as unneed functionality, and added
some of my own.
What follows below is a list of what I can recall of these modifications.
As of Feb 24 1990 I was satisfied that the code would no longer bollux things
up and created this file to log future changes.

   -- Moonchilde (JT Traub, jt1o@andrew.cmu.edu)
----------------------------------------------------------------------------
January 30, 1991 -- JT Traub (jt1o@andrew.cmu.edu)  Release level 1.02
 -- Fixed certain innapropriate uses of toupper/tolower.
 -- Moved the -D defines from the Makefile to config.h
 -- added some of the TinyTIM style flags.
 -- Removed @hide/@unhide
 -- Removed a few other Flags like member
 -- changed the limitations of some fuctions.  Any player can get an objects
    number and flag list now, etc.
 -- Update QUIET flag, split haven and halt into two flags.
 -- Fixed @tel so you can only teleport between rooms you own or that are
    jump ok.
 -- Added new command @wizwall (wall to only wizards).
 -- %-substitions can now occur in normal messages (desc, succ, fail) as
    well as Omessages.
 -- new %-substitution (%r) added, adds a newline into outputted text.
 -- Added new locking styles.  Indirect locks, IS locks and CARRY locks.
 -- @emit and the ';' pose are installed.
 -- Being given an item will now trigger it's OSUCC, ASUCC, and SUCC just like
    if you had picked it up.
 -- Added Adisconnect and Aconnect actions.  They are triggered by
    (dis)connecting.
 -- Possessive look and get are now working. (look <object>'s thing and
    get <object's> thing.  look fails if object is OPAQUE, get if object is
    not enter_ok OR thing is locked against you.)
 -- New mush functions and(), or(), not(), xor().
 -- Functions gt(), gte(), lt(), lte(), eq(), neq(), cat(), and member()
    installed.
 -- new function remove() -- removes a word from a list returning the new list.
 -- Get() can now get any objects description, and can also get ANY attribute
    from an object that is set VISUAL.
 -- New functions:
    home(<obj>) -- returns objects home
    money(<obj>) -- returns objects pennies
    words(<str>) -- returns the number of words in the string.
    lcon(<obj>) -- returns a 'list' of dbrefs containg the contents
                   of obj.
    lexits(<obj>) -- returns a list of exits from <obj>.
 -- Added a news system similar to help.
 -- fixed help and news so that they wouldn't try to evaluate arguments as
    functions.  This allows help on say add() to work.
 -- Exits are destroyable by the owner of a) the exit b) the owner of the
    exits entrance, or c) the owner of the exits exit. Exits also now keep
    track of what room they exist in.
 -- Fixed a bug in destroying rooms that never gave you quota back for exits
    in there. (Only useful if you #define QUOTA in config.h)
--------------------------------------------------------------------------
Feb 24 1991 -- JT Traub (jt1o@andrew.cmu.edu)  Release level 1.03
 -- Fixed a small bug with toading/destroying.  They will now chown all objects
    owned by the toaded/destroyed player to the wizard that chowns them.  This
    prevents a 'new' object from inheriting any items from destroyed players.
 -- added an @chownall command for wizards.
 -- Code will now reset ay object not owned by a player to be owned by #1
 -- Added a version command.
---------------------------------------------------------------------------
Feb 25, 1991 -- JT Traub (jt1o@andrew.cmu.edu)  Release level 1.04
 -- Started cleanup of files.
 -- Added partial name matching to WHO command.
--------------------------------------------------------------------------
Feb 27, 1991 -- JT Traub (jt1o@andrew.cmu.edu)  Release level 1.05
 -- More files cleaned up.
 -- Removed the fact that you could @link an exit to any ABODE room.
 -- Enabled code so that you can do back-linking of exits with @open as well
    as with @dig (whichwas enabled before but undocumented)
 -- Rearranged some of the messages so that the osucc on the exit gets
    gets triggered before the has left, and the odrop before the has arrived.
    Did this 'rearrangement' with many of the messages.
 -- Changed the way ENTER, OENTER, and AENTER work on objects.  On an object
    they now send the Omessage to the room you left.  On rooms, it will change
    the has arrived message as before.  There will be no has arrived message to
    contents of an object presently.
---------------------------------------------------------------------------
March 1, 1991 -- JT Traub (jt1o@andrew.cmu.edu)  Release level 1.06
 -- Still more file cleanup.
 -- Removed that silly Zone concept. (bleagh!)
 -- dump will now work again (the dump program that is)
 -- member() now returns which element it found with 1 being the first element
    in the list.  This allows member() to be used more effectively in con-
    junction with extract() and other functions.
--------------------------------------------------------------------------
June 30, 1991 -- JT Traub (jt1o@andrew.cmu.edu)  Release level 1.07
  -- Dump is broken again (will fix soon)
  -- Various and sundry bug fixes done over 3 months.
  -- added @pemit and NOSPOOF flag coutesy of raven@ccwf.cc.utexas.edu
  -- Added compile time support for RWHO servers (mjr@decuac.dec.com)
--------------------------------------------------------------------------
July 11, 1991 -- JT Traub (jt1o@andrew.cmu.edu)  Release level 1.08
  -- Added @oemit and @remit also coded by raven@ccwf.cc.utexas.edu
  -- Dark wizards do not show a went home message any more.
  -- Fixed dump and extract utils.
  -- various other bug fixes.
  -- if FULL_INVIS is defined, things that dark gods say or pose will be
     prefixed by Someone instead of their name.  If a dark object say or
     poses something it will be prefixed with Something.
  -- Fixed a file descriptor leak that I was stupid enough to introduce.
     RWHO is now safe for consumption.
  -- Removed the sanity-check.c program.  Sanity checking is now performed 
     inside the game (and has been for a while).
  -- Fixed the time sending info in the RWHO code.
--------------------------------------------------------------------------
July 14, 1991 -- JT Traub (jt1o@andrew.cmu.edu)  Release level 1.09
  -- Fixed %N substitution during announce_connect().
  -- Fixed @pemit so it could send to objects and things, and will find
     a player more often.
  -- A few small typos.
  -- Modified the change I made to attrib names last time so an attrib can
     be matched by the shorter string.
  -- Fixed ANOTHER bug in the RWHO interface code.. Bleagh!
  -- Fixed the bug that allowed some objects to screw up commands.. YICK!
  -- Removed teleporting into self or picking self up.
  -- Changed @chownall to accept 2 arguments.  if second arg is a null string,
     it works the same as previous.
--------------------------------------------------------------------------
July 17, 1991 -- JT Traub (jt1o@andrew.cmu.edu)  Release level 1.10
  -- Wizards can now set objects they own wizard.  Chowning will remove
     the wizbit.
  -- Monetary unit is now compile time settable.
  -- Teleporting into yourself and getting yourself are REALLY fixed now.
  -- @ps has changed.. check the help file.
  -- You can now use @chown <object> = me to chown something to yourself.
  -- Tim style @doing is a compile time option.
  -- new functions sub() and lock() do the obvious.  One subtracts two numbers,
     the other returns the lock on an object.
  -- @whereis and loc() on players is compiletime configurable.
  -- can now @tel <object> = home
  -- @edit will show you the results of your @editting.
  -- lexits(), lcon(), con(), exit(), and next() redone slighlty.. they should
     be more intuitive now (I hope).
  -- @create and @clone now report the new object number to you.
  -- @motd, @wizmotd, and @listmotd commands added.
  -- Quite a few of these came from Dungeon code mods.. thanks dungeon!
  -- elock() function evaluates the lock of it's first args with respect to
     it's second parameter.
--------------------------------------------------------------------------
July 19, 1991 -- JT Traub (jt1o@andrew.cmu.edu)  Release level 1.11
  -- Added the KEY flag on exits (from the dungeon code).  Stops puppets
     from using exits set KEY.
  -- Added leave, aleave and oleave attributes.  They are set the same as
     other attributes.. also fixed the double 'has left' echo in listen *
     objects.  Also added oxleave and oxenter.  The function of oenter will
     now show to objects INSIDE the object 'entered'.  OXENTER will be show
     to objects in the room where the object was entered.  Similarly for
     for OXLEAVE.
  -- fixed core dump bug in lcon() and lexits()
  -- You can now have attributes, etc up to 4K in length, and hopefully
     no more core dumps due to bounds exceeding.
  -- @entrances command added
  -- enhanced examine command, you can now examine <object>/<attrib>
  -- @login command added.  Allows wizards to enable/disable non-wiz logins
     to the MUSH.
  -- @rejectmotd command added.  Like @motd and @wizmotd, however only
     shown to players disconnected because of logins being disbaled.
--------------------------------------------------------------------------
July 21, 1991 -- JT Traub (jt1o@andrew.cmu.edu)  Release level 1.12
  -- @entrances code spiffied up a bit, more informative output.
  -- @sweep modified slighlty.  You can now ask for @sweep connected
     which will show you only players that are connected and puppets
     whose owners are connected.
  -- All character string arrays are now of a standard size, hopefully
     this means no more buffer overflow!
  -- You can now use @wa-@wz and @xa-@xz the same as the similar @va-@vz
--------------------------------------------------------------------------
August 16, 1991 -- JT Traub (jt1o@andrew.cmu.edu)  Release level 1.13
  -- Cleaned up a potential core dump in @doing.
  -- Fixed a few miserly little bugs.
  -- @listmotd will now work for none wizards (yay)
  -- @ps (no arguments) will now find queu for self. (should have been this
     way before)
  -- New style attributes.. read help ATTRIBUTES for info.
  -- Commands will be matched on objects that call them now as well as other
     objects in the room, inventory, and the room itself.  Also, ALL objects
     in the above groups that match the commands will be set off, not just
     the first one matched.
  -- Rewrote pronoun substitution code.. (cleaner now)
  -- added @atrlock <obj> = <atr> (lock an attribute you own on an object)
  -- added @atrchown <obj>/<attr> = <new_owner> (give control of an attibute
     that you control to another person.
  -- added a @wizpose command courtesy of tim poe.
  -- Changed the name parameter in @search to work as in @find.
  -- Changed @remit so that you can emit to any container object, not just
     ones that you control.
  -- Page no longer cost money, since you could subvert it with @pemit anyway.
  -- @pemit will no longer emit to Haven'd folks.
  -- @use commmand finally works.
  -- Implement a memory check routine (compile time option)
  -- Added Tim Poes' partial name matching on page.
  -- Now using smalloc.c instead of nalloc (very smooth)
  -- AKILL, KILL, OKILL name changed to DEATH, ADEATH, and ODEATH.
--------------------------------------------------------------------------
September 7, 1991 -- JT Traub (jt1o@andrew.cmu.edu)  Release level 1.14
  -- Fixed a few more incorrect references to -1.
  -- Repeat page ability (you can continue to page the same person without
     retypeing their name each time).
  -- You can no longer @remit to havened players.
  -- NEW flags TRANSPARENT.  When set on an exit, if you look through the
     exit you will see the description of the room as well as the exit's
     description.. You will also see the contents of the target room, but
     NOT it's exit list or succ/fail messages.
  -- can no longer 'enter' yourself via the 'enter' command.. (how'd I miss
     this before!)
  -- @gedit <object>/<pattern> = <string1>, <string2> -- will perform an
     @edit <object>/[attrib] = <string1>, <string2> on all attributes on
     object that match pattern.
  -- page-pose.  If you follow construct a page like page <foo> = :goes boo.
     <foo> will see something like From afar, <name> goes boo. (semicolon poses
     work as well.  See 'help page'.)
  -- ROYALTY flag.  If an object is set ROYALTY, it can examine objects like
     a wizard.. it can also @tel to any location.. however it cannot change
     things like a wizard could.. It is only settable by wizards.
  -- A small security bug that allowed naming objects to whitespace has been
     removed.
  -- Attributes like DESCRIBE, etc will no longer be checked for $-commands.
  -- bsd.c cleaned up some.
  -- fixed double free bug in cque.c
  -- players can now link themselves to objects
  -- reworked do_search to only use on db_walk instead of 4!!
  -- fixed some assumptions that GOD was always #1
  -- PLAYER_START cannot be @dested.
  -- checked all calls to sprintf to make sure they couldn't over flow
     buffers in function evaluation.
  -- dumps done when the code doesn't fork will give message so players
     know why the game is so slow.
  -- puppets @listens now get triggered even if their owner IS in the room.
  -- do_garbage() no longer needed due to new attribute code.
  -- support for alternative linked lists not using the next pointer
     (look in utils.c for details)
  -- tprintf now uses varargs.. I'm sure a couple of other places could use
     it.
--------------------------------------------------------------------------
November 27, 1991 -- JT Traub (jt1o@andrew.cmu.edu)  Release level 1.15
  -- Last release ever by JT Traub.
  -- Fixed a LOT of minor bug problems.
  -- Tried to get concentrator code revamped.  It still has lots of problems,
     BUT, if you are lucky it might just work well enuf for someone else to
     finish the changeover.
--------------------------------------------------------------------------