These are the changes to TinyMUSH version 2.0 since Patchlevel 0 (which is
documented in the file NOTES).  Refer to the online help for more infomation
about new features or commands.

TinyMUSH 2.0 patchlevel 1:

- Replaced the dynahash database layer with Marcus Ranum's untermud
  database layer.  This fixes the 'attribute-eating' bug (aka the 'nothing'
  bug.)
- New switches to commands:
    @clone: /inherit /preserve.
- New commands: SESSION @last.
- New functuins: AFTER BEFORE ROOM REVERSE REVWORDS.
- Last successful connect displayed when you log in.
- Notice of any failed connects when you log in.
- Players with the BUILDER flag set are no longer sent home when their
  container teleports.
- Corrected a problem with wizards @destroying exits in another room.
- @dolist now runs the commands in the intuitive order.
- examine and @edit now support wildcard attribute names.
- @lock/unlock <obj>/<attr> only affects the locked flag of the attribute.
- @set <obj>/<attr> = [!]no_command now sets/clears the no_command flag on an
  attribute.
- You may overwrite/clear unlocked attributes owned by others on your objects.
- Locked attributes may not be changed at all.
- TinyMUD database files up to version 1.5.5 may be read in.

TinyMUSH 2.0 patchlevel 2a:

- Players and things may now have exits from them.
- @clone can now clone rooms and things.
- @decompile can decompile any object type.
- New locks (set by switches to @lock and @unlock commands):
    drop enter give leave page receive tport use
- Owned-by lock qualifier (matches anything owned by the owner of the object)
- Enter/leave aliases.
- You can get and drop exits.
- If the home or dropto of an object/room is destroyed, the home or dropto 
  is reset before the object is re-allocated.
- New functions: MAX MIN
- New switches to commands:
    @open: /inventory /location
    @clone: /inventory /location
- New attributes:
    @away @idle @reject: Page-return messages.
    @ealias @lalias: Enter aliases and leave aliases.
    @alias: An alternate name for a player (for paging, *-lookup, etc)
    @efail/@oefail/@aefail: for when you fail to ENTER somewhere.
    @lfail/@olfail/@alfail: for when you fail to LEAVE somewhere.
    @tport/@otport/@oxtport/@atport: for when you @teleport.
    Lastsite: the host from which you last logged in.
- You no longer get 'has left' and 'has arrived' when you drop or pick up
  hearing objects.  Others in the room (or in your inventory) still see them.
- You now always get the 'You get your xx penny deposit...' message when one
  of your objects is destroyed - even if it was automatically destroyed
  (say because it was an exit that was in a destroyed room).
- All objects that enter or look around in a location trigger the adesc and
  (if a room) asucc attributes.
- Whispering to faraway players (ala @pemitting to faraway players) is no
  longer allowed for nonnwizards.
- The HAVEN flag no longer blocks pages.  Use the new page lock for that.
- Fixed a couple of memory leaks.
- @decompile now takes a 'target name' and produces code to set attributes on
  the named target (if specified).

TinyMUSH 2.0 patchlevel 2b:

- New functions: SEARCH STATS.
- New flags: SAFE MONITOR.
- New switches to commands:
    @destroy: /override
- If you put a space after the colon in a colon-pose command (ie ': test'),
  then the space between your name and the message will be omitted.
  This makes ': test' equivalent to ';test'.
- Fixed a money leak in the @halt command.

TinyMUSH 2.0 patchlevel 2c:

- New functions: GET_EVAL ITER.
- Multiple @listens: Attributes of the form ^<pattern>:<commands> are checked
  when the object hears something if the MONITOR flag is set.  If the pattern
  matches, the commands are executed.

TinyMUSH 2.0 patchlevel 3:

- New functions: EDIT LOCATE SPACE SWITCH U.
- New command: @verb.
- New flag: AUDIBLE.
- New switches for commands:
  @boot: /port /quiet
  @sweep: /exits
  @toad: /no_chown
- New option for @list: db_stats.
- New attributes: @filter @infilter @inprefix @prefix.
- New locks: linklock teloutlock.
- Non-hearing objects no longer trigger adesc/asucc when they enter or look
  around in a location.  (Non-hearing objects looking is pointless).
- SESSION now displays user port number (really the internal file_id number)
- When invoked by wizards, WHO displays the player flags DARK, UNFINDABLE,
  and SUSPECT, and the site flags REGISTRATION, FORBIDDEN, and SUSPECT.
- When invoked by wizards, DOING displays the player flags DARK, UNFINDABLE,
  and SUSPECT.
- PernMUSH databases up to version 1.18.03 and TinyMUSE databases up to
  database version 7 may now be read.
- If a robot is @chowned as part of chowning all of a user's objects
  (via @destroy, @toad, or @chownall), the robot then owns itself and is
  not owned by the target player.

TinyMUSH 2.0 patchlevel 4:

- Dark wizards no longer generate '...has connected.' and
  '...has disconnected.' to those in the same room as them when they connect
  and disconnect.  Messages to their inventory are unaffected.
- Dark wizards no longer trigger OSUCC/ODROP/ASUCC/ADROP when traversing exits.
- If you connect to an already-connected character, others in the same room
  (and in your inventory) see the message '...has reconnected.'.
- If you QUIT from one session of a multiply-connected character, others in the
  room see '...has partially disconnected.'.
- @clone now lets you specify a different name for the new object
  (@clone <what>=<newname>)
- New switches for commands:
  @clone: /cost
- New option for @list: process
- Bug fixes:
  o Players may no longer name themselves to illegal names.
  o Infinite recursion with u() is no longer possible.
  o The inherit bit on players now works correctly.
  o Getting an unknown attribute (via get(obj/attr)) returns an empty string
    instead of "#-1 UNKNOWN ATTRIBUTE"
  o @search now correctly handles object-type-specific flags.
- The value of %# (and %n, etc) is now the object producing the message, rather
  than the object that ran the command that produced the message.  (Best
  example: A does '@tel B=#C', %# was A but is now B)

TinyMUSH 2.0 patchlevel 5:

- New commands: @parent @@.
- New functions: PARENT SIGN.
- New config directives: full_file full_motd_message function_invocation_limit
    function_recursion_limit idle_wiz_dark lock_recursion_limit max_players
    notify_recursion_limit status_file 
- New switches for commands:
  @clone: /parent
  @motd: /full
  drop enter get leave move: /quiet
  examine: /parent
- New attributes: @forwardlist
- New option for the @list command: bad_names
- New option for the @list_file command: full
- @pcreate now only requires wizard privs to run.
- @shutdown now takes an argument, which is written to the file named by the
  status_file config directive.
- IMMORTAL players and objects no longer consume money.
- There is now a runtime-configurable maximum number of users.
- DESTROY_OK things now show off their db-number and flags.
- examine/brief now always reports just the owner (or owner+name if so 
  configured)
- Teleporting through exits no longer generates the '...attempts to push you
  from the room.' messages.
- There are now function recursion and invoction limits enforced on each
  command (to stop runaway recursion)
- Setting something audible now generates the '...grows ears...' message.
- The HALTED flag no longer gets cleared on each startup.
- Dark wizards no longer trigger OFAIL/AFAIL on exits.
- @drain now refunds money for canceled commands.
- Message forwarding filters are now evaluated before performing the compare.
- The argument to @doing is no longer evaluated.
- Parent objects: provide defaults for attributes, exits, and $-commands.
- Wizards idle for longer than the default timeout are automatically set DARK.
  This is undone when they type a command.
- Formatting for '@list costs' and '@list options' improved.
- Disallowed playernames may now include wildcard characters.

TinyMUSH 2.0 patchlevel 6:

- The u() function can now look up attributes on other objects.
- The CONNECTED flag of dark wizards is no longer visible to nonwizards.
- Bug fixes:
    You must now pass the default lock of an object in order to take it from
       someone else, not the give lock.
    Wizards no longer accumulate money.
    examine/parent now works.
    Players may now clear their alias.
    Aleave/Oleave are now handled properly again.
    The parent field of each object is now properly initialized if the source
       database does not have parent information.
    You can no longer inadvertantly create a character with a null name.
    @search keywords 'eplayer', 'eroom', 'eobject', and 'eexit' now match
       the help file.
- Robots may only be created by players and INHERIT objects.
- %p/%o/%s now return 'its' or 'it' as appropriate for neuter objects.
- @clone now copies the parent of the original object unless you
  specify /parent

TinyMUSH 2.0 patchlevel 7:

- New functions: CONN IDLE STRMATCH SETDIFF SETINTER SETUNION SORT.
- New attribute flag: VISUAL.
- New flags: MYOPIC TERSE ZONE.
- New locks: ControlLock UserLock.
- New attributes: Adfail Agfail Arfail Atfail Dfail Gfail Odfail Ogfail Orfail
    Otfail Rfail Tfail.
- New config parameters: cache_steal_dirty cache_trim fascist_teleport
    function_access good_name look_obeys_terse parentable_control_lock
    terse_shows_contents terse_shows_exits terse_shows_move_messages
    unowned_safe
- New switches for commands:
  look: /outside
- Function aliases added: CONNSECS -> CONN, FLIP -> REVERSE, IDLESECS -> IDLE,
    SEARCH -> LSEARCH, WHO -> LWHO.
- The match() function no longer matches the entire string (undocumented
  feature).  Use strmatch() for this functionality instead.
- The name() function can now return the name of nearby dark exits.
- @entrances now reports @Forwardlist references.
- Destroyed locations are now automatically removed from @Forwardlist lists.
- The victim of a teleport is no longer sent the message 'Teleported.'
- You can no longer give yourself away.
- New percent-substitution/v() argument: L (dbref location of invoker)
- Functions add(), mul(), and(), or(), and xor() now take up to 30 args.
- Commands on the wait queue or timed-semaphore queues should no longer
  lose time.
- Config file 'compat.conf' defines aliases and parameters like MUSH 1.x
  Useful for including in your site-specific .conf file.
- Objects inside a location with a @listen attribute no longer receive doubled
  output when there is noise generated inside the location.
- Names may be removed from the disallowed player name list while the mush
  is running.
- Access to functions may be restricted in a manner similar to that used
  to restrict access to commands.
- 'Special' objects in the database (such as the master room, default arrival
  and home locations) may not be @destroyed.
- @switch and switch() no longer evaluate arguments that need not be evaluated.
- The second argument to iter() need no longer be escaped to prevent it from
  being evaluated too soon.
- @shutdown notifies connected players who shut the game down.
- Added server support for Howard's Info-Serv remote page/who service.

NOTE: The ZONE flag and the USER and CONTROL locks don't do anything
at the moment.

TinyMUSH 2.0 patchlevel 8:

- Signal handling: SIGHUP performs a database dump, SIGQUIT, SIGTERM, and
  SIGXCPU perform a graceful shutdown, SIGINT is logged but ignored.
  SIGILL, SIGTRAP, SIGEMT, SIGFPE, SIGBUS, SIGSEGV, SIGSYS, and SIGXFSZ
  may be optionally caught, resulting in a log entry and a panic dump.
  If you catch these signals you may not get usable coredumps.
- New config directive: signal_action
- New function: MERGE REPEAT SPLICE
- exam/parent now works with wildcarded attributes or no attribute
  specification.
- Many bug fixes.

TinyMUSH 2.0.8 (10/08/92)

- Changed version numbering scheme to better reflect releases.
- Increased number of open descriptors on systems that support setrlimit().
  This must be configured via the Makefile.
- AUDIBLE/LISTEN forwarding should _finally_ be working correctly.
- New flag: UNFINDABLE(room)
- New attribute flag: NO_INHERIT
- New functions:
  ACOS ASIN ATAN COS SIN TAN: Trigonometric
  EXP LN LOG POWER SQRT: Logarithms and Exponentation
  FDIV: Floating point division
  E PI: Arithmetic constants
  SEARCH: Supports range limits ala @search.
- Changed functions:
  ABS ADD EQ GT GTE LT LTE MAX MIN MUL NEQ SIGN SUB: Floating point support
  LOC RLOC ROOM: Obey UNFINDABLE flag on rooms
  CONN IDLE: No longer crash the server when given a bad playername
- Changed commands:
  @quota: Now takes a playername, not an objectname.
  @entrances @find @search: Support range limits.
  @verb now works if you don't control the victim, but the victim doesn't
  run the AWHAT attribute and you only retrieve the WHAT and OWHAT attributes
  if you have permission to read them.
- New help screen 'help function classes' lists functions by class.
- When checking for $-commands or ^-listens, HALTed objects are skipped
  entirely.  _IN THIS CASE ONLY_ attributes present on HALTed objects do not
  block out attributes on the parent of the HALTed object.
  POSS OBJ SUBJ - now can return information about faraway players.

TinyMUSH 2.0.8 patchlevel 1 (10/12/92)

- @sweep no longer shows nothing when given no arguments.
- @dolist now works as it used to in 2.0.p8 (attempted bugfix removed).

TinyMUSH 2.0.8 patchlevel 2 (10/21/92)

- Fixed @dolist to do the 'right' thing with curly braces: curly braces are
  only removed if they completely surround an argument (ie:
  '@dolist foo={bar}', but not '@dolist foo={b;a}r'.  Fixed @apply_marked and
  @wait in the same manner.  Note that the command to be run may remove braces
  also.
- Changed curly brace handling for @edit, @switch, and @verb so that only
  curly braces that completely surround arguments are removed (ie:
  'xxx, {arg}, yyy' but not 'xxx, {a,r}g, yyy'.
- div() is now strictly integer division again.
- Cleaned up signal handling somewhat, particularly the 'panicking' code.
- Corrected code for determining whether or not a PennMUSH database uses
  the builtin chat system.
- ^-listens no longer check output from the object itself.
- Removed all references to XENIX code.
- The internal RWHO now uses a much bigger buffer for reading.
- Changed RWHO defaults so they point to an operating mudwho server.
- @listmotd for wizards now shows the motd and wizmotd files.
- Never auto@destroy sacrificed players.

  [ Note: This new functionality is considered experimental and is not
    documented in the help file.  Please test it out and report bugs,
    omissions, and inconsistencies to mushbugs@caisr2.caisr.cwru.edu ]

- Absolute possesive substitution (%a, [v(a)]), returns its/hers/his/theirs.
- Partial support for plural gender: %s/%p/%o/%a return they/their/them/theirs
  when the Sex attribute starts with a p.  _NO_ other changes have been made
  (as in ... has/have arrived/connected/etc) so as to not break @listen/@ahear
  matching.
- New functions:
  APOSS(<obj>) - Absolute possesive, just like SUBJ/OBJ/POSS.
- Changes to functions:
  OWNER() - <obj>/<attr> syntax retrieves the owner of an attribute.
  LOCK() - <obj>/<lock> syntax retrieves the named lock from <obj>.
  ELOCK() - <obj>/<lock> syntax tests the named lock on <obj>.  If <lock> is
    not the default lock you must control <obj> or it must be set VISIBLE.
  LATTR() - <obj>/<wild-attr> returns attrs whose name matches <wild-attr>
- Evaluation locks:  @lock <what> = <attr>/<value>
  The contents of the <attr> attribute on <what> are evaluated substituting
  %#/%N/etc for the player or thing that is attempting to pass the lock.
  If the result of evaluating is equal to <value> (no wildcarding done, case
  does not matter), then the player passes the lock.

TinyMUSH 2.0.8 patchlevel 3 (10/23/92)

- Connect and disconnect messages are no longer broadcast to nearby audible
  rooms that are not linked via audible exits.
- Poses inside an audible object now deliver the PREFIX message to those
  outside the object.
- Non-$command attributes now block out $command attributes on parent objects.
- The output of the " command is now '... says "<whatever>"' again.  Oop.

TinyMUSH 2.0.8 patchlevel 4 (10/27/92)

- The USE lock now prevents $-command and ^-pattern matching from proceeding
  further up the parent tree.
- The server no longer dies if the very first match attempt is an
  indirect lock check.
- Players may delete their aliases.
- Players are notified when they log in if their page lock is set.
- Wizards are notified when they log in if logins are disabled.
- Removed the getrusage() call from vattr_find() and vattr_nfind().
- Converted Flags/Owner/etc to macros.
- Hash tables now use bitmask-and to get the hash value instead of modulus.
- vattr_hash and vattr_nhash are now macros, not one-line procedures.

TinyMUSH 2.0.8 patchlevel 5 (10/29/92)

- Object names are now cached by the server instead of in the attribute cache.
- Lock evaluation for previously stored locks no longer does a full object
  match when looking up objects.
- No further match attempts are made when an exact match is made for a #number,
  'me', or 'here'.
- Text read over the network interface is processed faster.
- New configuration options:
  cache_depth cache_width
- New lock primitives:
  = (is) and + (carries) modifiers to attribute locks.
- Fixed a problem with indirected evaluation locks.
- 'Notified.' and 'Drained.' feelgood messages for @notify and @drain.

TinyMUSH 2.0.8 patchlevel 6 (11/24/92)

- Cleaned up declarations in many places.
- Added switches for commands:
    @motd/brief
    @listmotd/brief
- Removed commands:
    @cat @note gripe
- Added config option:
    cache_names
- Added functions:
    ceil()
- Added search class to @search/search()/@mark:
    parent=<object>
    things=<what> (alias of 'objects=<what>')
    ething=<what> (alias of 'eobject=<what>')
    type=things (alias of 'type=objects')
- Removed config options:
    gdbm_cache_size
- Functions lt() lte() eq() gte() gt() ne() now accept floating point args.
- Config options cache_width and cache_depth now affect the cache size
  but only when used in the config file.
- QUIET no longer checks the object's owner, only the object and the enactor.
- Players who do not own themselves may no longer set the INHERIT flag.
- convtime() is now more robust.
- trunc() now returns the correct value.
- Wizards may now locate() from #1's perspective.
- The HALT flag no longer prevents objects from picking up $-commands and
  ^-listens from a (HALTed) parent.
- Audible/forwardlist prefix generation has been tweaked (again!)
- Targeted message commands (whisper, @pemit, et al) no longer look for
  exits before nearby objects.
- Players may now build things that cost no quota when they are over quota.
- @doing now evaluates its argument when run from an actionlist.
- @sweep now tells you if your location is a PUPPET room.
- Several @quota fixes:
  @quota/fix now works
  @chownall now correctly adjusts quotas
  @link now correctly adjusts quotas when you steal an unlinked exit.
- You may now @link a linked exit that you control.

TinyMUSH 2.0.8 patchlevel 7 (12/02/92)

- You may now make a dropto to HOME.
- setunion now correctly handles setunion(3,4 4 4 4).
- @startup works once more.
- Help entry for @password corrected.
- Object cacheing routines now compile again.
- @search t=<type> now works again.
- The ^ and $ (prefix and suffix) special characters for @edit and edit()
  may be escaped to replace a literal ^ or $.

TinyMUSH 2.0.8 patchlevel 8 (12/09/92)

- Fixed several memory leaks. (Thanks Amberyl)
- Fixed the 'disappearing name on #0' bug.
- Removed the @whereis command.
- Added support for Linux (thanks to bob@inmos.co.uk).

TinyMUSH 2.0.8 patchlevel 9 (12/12/92)

- dbconvert no longer aborts referencing the (nonexistent) name cache.
- New function: index().
- repeat() now returns a null string if the repeat count is zero or
  non-numeric.
- The default database has been renamed to tinymush.db in netmush.conf

TinyMUSH 2.0.8 patchlevel 10 (12/18/92)

- Fixed a bug that causes the db to eat itself if you use object name cacheing
  and add more than 1000 objects between reboots.

  ** DO NOT RUN versions 2.0.8.p6 through 2.0.8.p9 with object name cacheing
  ** turned on.  If you do, your database will be eaten if you add more than
  ** 1000 objects between reboots.

TinyMUSH 2.0.9 (12/21/92)

- Fixed a problem with indirect eval locks.
- Removed command: rob
- Changed the default uncompress program to "/usr/ucb/zcat -c"
- Fixed a problem with reading compressed structure databases.
- New flag: JUMP_OK for things.
- The 'loses its ears and becomes deaf' is now gender-specific.
- New functions:
  fullname(): like name() but returns the complete name of exits.
  index(): like extract() but lets you specify a separator character.
  where(): like loc() but returns the source for exits and #-1 for rooms.
- Changed functions:
  repeat(): returns a zero length string instead of an error message if its
    argument is zero, negative, or non-numeric.
  space(): returns a null string if its argument is '0'.
- Non-dark wizards are no longer treated like dark wizards when in a dark
  location.
- Connect and disconnect messages no longer report an (invalid) enactor to
  those nearby with their NOSPOOF flag set.
- A carriage return (\r) is sent following every cached file (login banner,
  motd file, etc)
- Player names may now have spaces.  Enclose the name in double quotes where
  the name is expected to be folloed by the player's password. (connect/create
  commands from the login screen, @name command when renaming a player).
