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.
