tinymush-3.0b21/game/bin/
tinymush-3.0b21/game/data/
tinymush-3.0b21/src/tools/
Changelog for the Beta Releases
===============================

Where possible, notes in [brackets] indicate when the error was
introduced. Non-specific version numbers indicate the following:
	- 2.0 (Introduced in TinyMUSH 2.0.10p6 or earlier.)
	- 2.2 (Introduced in TinyMUSH 2.2.5 or earlier.)
	- MUX (Introduced in TinyMUX 1.6 or earlier.)
	- 3.0 (Introduced in TinyMUSH 3.0 at some point in time.)

Names after the bug origin version are the first sources for the bug
reports. Where no name is given, the bug was discovered by the
developers. ("RMG" refers to Robby Griffin, aka Alierak.)

The initial beta release was on 9/27/99.

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

9/28/99: Beta 2

- Fix: Compilation problem with MEMORY_BASED defined. [3.0; Roloran]

- Fix: XFREE macro missing argument compiler error. [3.0; Roloran]

- Fix: Fatal error in let(). [3.0a8; RMG]

- Fix: Off-by-one, integer overflow, and bounds-checking issues. Verified
  with Purify. [RMG]

- Fix: Cannot set/reset ROBOT flag on players. [MUX]

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

9/29/99: Beta 3

- Fix: Pueblo support works again. [3.0; GrimJim]

- Fix: Structure names cannot contain periods. [3.0a8; stile]

- Fix: translate() works as documented, and handles backslashes correctly.
  [MUX; RMG]

- Fix: pmatch() correctly handles dbrefs. [3.0a11; RMG]

- Fix: Command switch issues fixed for @mail, @malias, @wipe. [2.0; RMG]

- Fix: Side-effect function permissions are checked more thoroughly. [MUX; RMG]

- Fix: Double-free issue in switchall(). [3.0a8; RMG]

- Change: mix() can take up to twelve arguments (rather than ten).

- Cosmetic: Dealt with a compiler warning in flags.c.

- Docs: Updated mailing list subscription info in help.

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

9/30/99: Beta 4

- Fix: @clone correctly copies all flags. [3.0; RMG]

- Fix: @open requires the invoker to have contents. [2.0; RMG]

- Fix: Parent recursion issues have been prevented in various places.
  [2.0; RMG]

- Fix: parse() checks function invocations in a manner identical to iter().
  [2.0; Myrrdin]

- Fix: Slaves are reaped with waitpid() so zombies are not created by
  @restart (may be Linux-specific problem). [MUX; Myrddin]

- Fix: Signals are unblocked at startup, allowing SIGUSR1 to be invoked
  for later instances in restarts. [MUX; RMG]

- Misc: The unused parentable_control_lock parameter has been removed.

- Misc: A variety of compiler warnings related to uninitialized variables, 
  unused variables, implicit function declarations, etc. have been taken
  care of.

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

10/2/99: Beta 5

- Feature: lstructures() and linstances() functions added.

- Fix: @dbclean has been rewritten, and now works (and is more efficient).
  [3.0; Thomas Wouters]

- Fix: Where pow() is used in conjunction with htonl(), it is cast to
  unsigned int. This fixes a compilation issue with Linux and gcc -O.
  [3.0a5; stile]

- Fix: Some structures are no longer allocated as lbufs, but are explicitly
  malloc'd in a type-specific manner. [2.0]

- Fix: Forwardlists are loaded before startups are run. [2.0]

- Fix: @mail/fwd now explicitly checks to see if a mail message is in
  progress. [MUX; Morris]

- Fix: INFO now works when used by logged-in players. [3.0a2; RMG]

- Fix: trunc() truncates rather than rounds. [MUX; Keran]

- Fix: Dumping and shutdown check to make sure the game is not already
  dumping. [2.0; Geoff Gerrietts]

- Fix: The display of exit destinations for Transparent rooms now handles
  "special" exit destinations. [2.2/MUX; RMG]

- Fix: Some oddities with attribute renaming have been taken care of.
  [2.0; RMG]

- Fix: The static buffers for Name and PureName are of the appropriate type.
  [MUX; RMG]

- Fix: Instance name lengths are restricted to half an sbuf. [3.0a8; RMG]

- Fix: Startmush handles checking if the game is running in a better manner.
  [RMG]

- Misc: The GDBM bucket cache size has been reduced to 1 bucket.

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

10/4/99: Beta 6

- Fix: Money is no longer deducted twice when creating an object. [3.0]

- Fix: Another pow()/htonl() fix. [3.0a5; Markus Stenberg]

- Fix: Various compile-time option #ifdef's cleaned up. [3.0]

- Fix: Removed spurious spaces in columns() when a string is truncated.
  [3.0b2; Keran]

- Fix: Cosmetic change to @list textfiles. [3.0a5]

- Misc: chown_anything also lets you @chown to anyone.

- Misc: Doubled the size of the function and user function hash tables.

- Misc: Got rid of the SIDE_EFFECT_FUNCTIONS compile-time option, since
  you can simply function_access the side-effect functions to 'disabled'.

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

10/5/99: Beta 7

- Feature: New conf parameter stripped_flags determines what flags are
  stripped when an object is subject to a @chown, @chownall, or @clone.
  These commands now take a /nostrip switch, which negates stripping.
  For consistency, @clone/inherit no longer preserves IMMORTAL (only
  INHERIT).

- Fix: Side-effect function prototypes exist again. [3.0b6; Tina Verras]

- Fix: You can no longer set the cost of non-things in @clone (consistent
  with other object-creation commands). [MUX]

- Fix: The value of @clone'd objects is now correctly set. (Previously,
  all cloned objects had a value, i.e. Pennies, of zero.) [MUX]

- Misc: All @clone switches except /inventory and /location can be combined.

- Misc: @clone/preserve can be used by anyone, but you must control the
  original object's owner.

- Misc: ansi() compacts the ANSI codes, and makes a better attempt against
  avoiding bleeding.

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

10/7/99: Beta 8

- Feature: @cron implemented, providing Unix-style cron scheduling.
  @daily has been re-implemented using the @cron facility.

- Feature: Functions that take output delimiters can now take a null
  output delimiter, signified by the token '@@'.

- Feature: The examine command has a new switch, /pairs. This shows
  paren/bracket/braces-matching in ANSI color. (Based on the engine
  from ChaoticMUX's parenmatch() function.)

- Feature: New conf directive raw_helpfile allows the addition of
  non-evaluated helpfiles.

- Feature: Added the MUSH Manual to the distribution in helpfile format.
  (Thanks to Alierak and sTiLe.)

- Feature: delete(), mid(), left() and right() no longer strip ANSI
  characters.

- Fix: SQL queries error out properly when support is not compiled in.
  [3.0a13; Blane Dabney]

- Fix: @clone/nostrip can be combined with all other @clone switches.
  [3.0b7]

- Fix: The 2.2 database conversion converts the Builder flag to the
  Builder power, rather than just discarding the flag. [3.0a4]

- Fix: Comtitles are terminated with ANSI_NORMAL where appropriate.
  [MUX; Brazil]

- Fix: sortby() no longer ignores its output delimiter. [2.2]

- Fix: translate() can handle compacted ANSI strings generated by
  ansi(). [3.0b7]

- Fix: hastype() can be used on an object, even if you can't examine it,
  since you can type() anything. [MUX; stile]

- Misc: Typecast time_t to int when using it in conjunction with printf().

- Did a diff between ChaoticMUX-S3, and TinyMUX 1.6p0. Derived a suite
  of bugfixes and some enhancements, as follows:

  - Feature: @function/noeval defines a user-defined function whose
    arguments are not pre-evaluated.

  - Feature: An ANSI underline code, %xu, has been added.

  - Feature: log() can take an optional second argument, the base.

  - Fix: elock() obeys the pass_locks power. [MUX]

  - Fix: Pool headers are 64-bit aligned. [2.0]

  - Fix: Calls to site_check() check the return value ANDed against the flag.
    [2.0]

  - Fix: The overflow buffer for functions is terminated properly. [MUX]

  - Fix: Missed some places where see_hidden should apply. [3.0a14]

  - Fix: OUTPUTSUFFIX without OUTPUTPREFIX works. [2.0]

  - Misc: All calls to abort() log a message. [2.0]

  - Misc: mail() and mailfrom() check arg ranges in the standard way. [MUX]

  - Misc: ANSI defines are used rather than embedding raw codes. [MUX]

  - Misc: No spurious extra args to raw_broadcast() calls. [MUX]

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

10/8/99: Beta 9

- Feature: @destroy/instant instantly destroys an object, rather than
  queueing it for recycling. The new conf option instant_recycle
  controls whether or not objects set Destroy_OK (or which have
  Destroy_OK owners) get instantly destroyed; it defaults to 'yes'.

- Feature: @list options now shows just boolean parameters, and the
  display format is now much neater (and in alphabetical order of
  the actual parameter names). A new command, @list params, shows
  a variety of other conf options.

- Fix: left() works properly again. [3.0b8; Jeff Hulsey]

- Fix: format_exits conf parameter is recognized again. [3.0]

- Misc: Unused conf parameters eliminated.

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

10/8/99: Beta 10

- Feature: edit() can now edit ANSI strings. @edit also handles ANSI
  in a better manner.

- Fix: Conf parameter unowned_safe is back. (Oops.) [3.0b9; utoxin]

- Fix: Failed movement through a global or zone exit results in
  "You can't go that way." rather than no output.
  [2.0/2.2; Markleford Friedman]

- Fix: Fixed an obscure bug where, in the match confidence calculation,
  the "you can pass this lock" check always succeeded. [MUX]

- Fix: A variety of inappropriate malloc()s have been dealt with,
  and XMALLOC/XFREE are now used by the mail code. [2.0/MUX]

- Misc: sql_init()'s shutdown of a SQL socket calls sql_shutdown()
  instead of doing just doing it.

- Misc: A variety of compiler warnings have been dealt with.

- Went through the TinyMUSH 2.2 changes log again, looking for code
  that was not incorporated. Resulted in the following changes:

  - Fix: Never show HTML to non-HTML players. [MUX]

  - Fix: A variety of buffer overflow issues have been dealt with. [2.0]

  - Fix: Null pointer dereference in con/exit formatting. [2.2]

  - Misc: Some minor improvements to the queueing of output.

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

10/11/99: Beta 11

- Feature: iter(), list(), switch(), and switchall() can now be nested
  (i.e., the special tokens ##, #@, and #$ are substituted in-scope).
  The new token '#!' gives nest level within iter() and list(), and
  switch() and switchall().

  This changes the parsing of these tokens, which are no longer blindly
  substituted for, particularly with regard to escapes (for instance,
  '\##' now results in a literal '##'). For backwards compatibility,
  use parse() instead of iter() -- parse() behaves like it always has --
  and use loop() instead of list(). There is no backwards-compatible
  function for switch(), as it's unlikely there's softcode out there
  that relies on a particular escaping behavior for '#$'.

- Feature: Two new flag_access permission types have been implemented,
  'restrict_player' makes a flag only settable on players by Wizards,
  but on objects of other types by mortals (FIXED, for instance).
  'privileged' makes a flag only settable on players by God, but
  it can be set on objects of other types by non-robot players
  who themselves have the flag.

- Fix: Backspaces and deletes on an empty line should no longer result
  in negative input totals. [2.0; RMG]

- Fix: You can no longer give anything to an exit. [2.0; RMG]

- Fix: Obvious Exits lists are no longer eaten for non-HTML players.
  [3.0b10; Keran]

- Misc: 'th' now aliases to 'think' rather than 'throw', by default.

- Misc: udefault() can take up to 12 arguments.

- Misc: Perl versions of the sed scripts for database conversion
  now exist, and are recommended. (The vast majority of users will
  have perl, and the perl regular expressions are less likely to
  result in "false positive" conversions.)

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

10/13/99: Beta 12

- Feature: '%r' is now a legal output delimiter. lnum() now treats its
  delimiter like an output delimiter (so '@@' and '%r' are both legal).
  sql() now treats both of its delimiters like output delimiters.

- Fix: dark_sleepers conf option is displayed in reverse. [3.0b9; Tina Verras]

- Fix: Structure-related data is cleared out when an object is
  destroyed. [3.0a8; RMG]

- Fix: Absurd channel charges are no longer allowed. [MUX; RMG]

- Fix: There are no spurious spaces embedded between the psuedo-HTML tags
  and exit names, for Pueblo display of exits. [MUX]

- Fix: @emit/room/html no longer produces double output. [2.2/MUX; GrimJim]

- Misc: You can no longer use addcom to join a channel multiple times.
  (Previously, it was permitted, but you got a warning; there didn't seem
  to be a good reason to ever allow it, though.)

- Misc: Dealt with a few more compiler warnings, and got rid of some
  unnecessarily clumsy constructs.

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

10/17/99: Beta 13

- Feature: New comsystem.

  - You MUST convert your old comsystem using the provided script; if
    you don't, you will not be able to load the comsys database.
 
    Go into your game directory, and type:
       cp comsys.db comsys.db.save
       ./convert_comsys.pl < comsys.db.save > comsys.db
 
    Make sure to keep comsys.db.save in a safe place, in case anything
    goes wrong.

  - This is a from-scratch re-implementation. There are some syntax
    changes, and some changes in functionality.

  - @cchown, @ccharge, @cset, @coflags, @cpflags, and channel objects have
    been replaced by the @channel command, which allows you to do
    administrative things to channels. All channel information is now
    directly associated with the channel, rather than being kept on a
    channel object. The information from old channel objects will be
    assimilated upon initial load of the database produced through
    the comsys conversion above.

  - Multiple aliases for a single channel work for real now. Each alias
    can be associated with a different comtitle.

  - If you do not have a comsys database (i.e., you are starting a game
    from scratch), a basic comsys database is now created, with the
    Public and Guests channels.

- Feature: Attributes can now be retrieved with %=<variable>, where
  the angle-brackets are literal. In other words, '%=<test>' is 
  equivalent to 'v(test)' is equivalent to 'get(me/test)'.

- Feature: Multi-letter variables set with setx() can now be retrieved
  with %_<variable>, where the angle-brackets are literal.

- Misc: Use of *VARIABLE* as the object name associated with #-2 is
  now consistent. [3.0a3; Keran]

- Misc: Corrected a typo in @quota. [2.0; RMG]

- Misc: Startmush script saves a copy of the old comsys.db and mail.db files.

- Misc: Minor cleanup in various places.

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

10/20/99: Beta 14

- Feature: If conf parameter dark_actions (disabled by default) is on,
  objects set Dark still trigger @a-actions when they move, unless the
  /quiet switch is specified.

- Feature: If conf parameter no_ambiguous_match (disabled by default)
  is on, ambiguous matches resolve to a random selection from the
  available matches (i.e., you will never see "I don't know which
  one you mean!" messages).

- Feature: New flag, CONSTANT. Prevents attributes from being set/altered
  on an object. Can only be set by Wizards.

- Feature: New conf directive, power_access. Like flag_access, but for
  powers.

- Feature: New function, command(). Allows the execution of a variety of
  built-in MUSH commands through a functional means, such as @name and
  @parent.

- Feature: New function, step(). Iterates through a list N elements at a
  time, passing the elements as %0, %1, etc. in a manner similar to map().
  map([<obj>/]<attr>,<list>) is equivalent to step([<obj>/]<attr>,<list>,1)
  where 1 is the step size.

- Feature: @chboot takes a /quiet switch, which doesn't suppress the
  "has left" channel message, but suppresses the "booted off" announcement
  to the channel.

- Fix: The attribute list of a minimal database is handled properly,
  when the game is being run memory-based. [MUX; Brazil]

- Fix: Creation of minimal db does not choke on vanilla comsys issues,
  and vice versa. [3.0a13; RMG]

- Fix: columns() sanity-checks its arguments one by one. [3.0b2; RMG]

- Fix: Buffer size issues with weird-size quotas fixed. [2.2; RMG]

- Fix: Buffer size issues with logging some errors fixed. [2.0; RMG]

- Fix: perl version of MUX db conversion works correctly. [3.0b11; overlord]

- Misc: You cannot set quotas to less than zero.

- Misc: Channel names can contain spaces.

- Misc: Don't announce channel has joined / has left messages, unless
  it's an object or connected player.

- Misc: The owner of a channel must be a non-robot player. Channels
  owned by destroyed players are chowned to the destroyer. The comsys
  database is checked for sanity at load time, and strangeness dealt
  with.

- Misc: @addcommand now returns 'Command <foo> added.'

- Misc: The Startmush script also looks in the $DATA directory for
  the comsys and mail databases.

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

10/25/99: Beta 15

- Feature: @cron supports the /<step> syntax, ala Vixie cron.

- Feature: New conf parameter exit_calls_move (defaults to No) makes an
  attempt to go through an exit by typing its name, literally identical
  to typing 'move <exit name>', allowing an @addcommand interception.

- Feature: New conf parameter move_match_more (defaults to No) makes the
  move command match exits like the main command parser does, i.e., it
  also checks global and zone exits, and in the case of multiple matches,
  picks a random match.

- Feature: @mail/reply and @mail/replyall, based on a code contribution
  by Morris. A /quote switch allows optional quoting of the message
  being replied to.

- Feature: MySQL is supported as an external database. Code contributed
  by Dan Evans. (Untested by the 3.0 development team, as we don't have
  a MySQL installation.)

- Fix: Creating a minimal db, when the comsys is enabled, works again.
  (This time for real.) [3.0b14; RMG]

- Fix: The comsys conversion script now escapes out quotes, and ensures
  that all aliases are for existing channels. [3.0b13; RMG]

- Fix: Typo resulted in channels being chowned to God at load time.
  [3.0b14; utoxin]

- Fix: Evaluation and other unusual locks are handled properly by the
  comsys load. Note that if you have eval locks in a 3.0b13 or 3.0b14
  comsys, you will need to manually delete those locks (there's no
  way to write an automated heuristic to cope with this). [3.0b13; RMG]

- Fix: Connections/disconnections on loud channels are only reported when
  the player is active on the channel. [3.0b13; Roloran]

- Fix: Object list confounding has been fixed; among other things,
  this makes an eval @search with lattr() work properly. Code
  contributed by Robby Griffin. [2.0; RMG]

- Fix: Tokens are once again correctly replaced when iter() and switch()
  are nested. [3.0b11]

- Fix: command() handles command switches properly. [3.0b14; RMG]

- Fix: pos() and lpos() no longer count ANSI sequences as part of the
  string characters. This enables them to interoperate properly with
  delete() and other functions depending on string positioning, that
  no longer strip ANSI characters. [3.0b8]

- Fix: Flag unparsing looks at See_Hidden rather than Wizard for permission
  to see Dark flag on connected players. [3.0a14; Keran]

- Fix: You can no longer insert arbitrary characters via url_unescape().
  [2.2/MUX; RMG]

- Fix: Corrected a typo that could result in an infinite loop when
  Radix compression is enabled. [MUX; RMG]

- Fix: Prevented a memory leak when an @addcommand's attribute lacks
  a command string. [MUX; RMG]

- Fix: Typo in Startmush script was attempting to copy the mail db to
  itself. [3.0b14; RMG]

- Fix: The Quota, RQuota, and Semaphore attributes are visible on
  objects again. [3.0a4; Adam]

- Misc: Valid numbers and integers can have a leading + sign.

- Misc: Use character table lookup in certain parts of the parser;
  concept and some code derived from MUX 2.0.

- Misc: Memory is not allocated for comsys connected lists unless there
  are players connected on the channel.

- Misc: Some safe_str() calls replaced with safe_chr() calls. Calls to
  safe_long_str() are now simply calls to safe_str(), pending a better
  future heuristic.

- Misc: Strict ANSI compilers objected to use of typecasts within XFREE().

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

10/30/99: Beta 15 patchlevel 1

- Fix: Typing a bare channel alias results in a 'No message.' error, 
  rather than garbage. [3.0b14]

- Fix: Fixed fatal error in regparse(). [3.0a4; Sorien]

- Fix: @shutdown takes switches again. [3.0; jonespl]

- Fix: @tel/quiet works. [MUX; Xidus]

- Fix: Prevented a buffer overflow. [3.0b15]

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

11/2/99: Beta 16

- Feature: Dynamic hashtable resizing via @hashresize.

- Fix: Objects with a @daily, that also have a @startup, now cron-schedule
  the @daily properly.

- Misc: @timecheck can take a compile-time TRACK_USER_TIME definition,
  to get user time used via getrusage() rather than the clock time.

- Misc: Various bits of code cleanup and efficiency improvements.

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

11/13/99: Beta 17

- Fix: Typing a bare channel alias consistently results in a 'No message.'
  error. [3.0b14]

- Fix: Don't requeue '-' if we don't have the mailer turned on. [3.0; RMG]

- Fix: ANSI terminates properly in a sequence of characters. [3.0b15; Keran]

- Fix: Channels properly announce disconnects again. [3.0b15; utoxin]

- Fix: Conversion of the 2.2 Control_OK flag is handled properly. [3.0; RMG]

- Fix: The /delimit switch to @dolist can be used in conjunction with the
  /notify switch. [MUX; jonespl]

- Fix: The "You see nothing special." default desc works again. [MUX; RMG]

- Fix: Non-existent attributes no longer prematurely truncate the output
  of strings. (Bug which made 3.0b17 into 3.0b17p1.) [3.0b16; utoxin]

- Misc: The resize factor used by @hashresize is now dependent upon the
  hash factor itself. The command table is now also resized. God is not
  notified of resizes, when the game is restarting.

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

11/20/99: Beta 18

- Fix: Null store results (from CREATE and DROP) no longer cause
  segvs for MySQL users. [3.0b15; Dan Evans]

- Fix: arr2list() no longer zaps the last character of the list being
  output, if a null delimiter is specified. [3.0b8]

- Fix: encrypt() and decrypt() exist again. [3.0; Chimera]

- Misc: Robby Griffin has joined the 3.0 development team.

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

11/28/99: Beta 19

- Feature: examine/brief now works MUX-style again (it shows everything but
  the attributes). To get the 2.2-style show-owner-only, use the new /owner
  switch. Also, /parent can be combined with other switches.

- Feature: Conf parameter opt_frequency controls how often the database
  is optimized. (Defaults to every dump.)

- Feature: Conf parameter guest_starting_room allows guests to start in
  a room different than the usual player starting room.

- Feature: For semaphore waits on non-Semaphore attributes, @ps shows
  the name of the attribute being waited upon.

- Feature: New wizard-only function config() shows the value of most
  config parameters.

- Fix: Channel transmit locks are set properly. [3.0b13; utoxin]

- Fix: Global registers work reliably again; regmatch(), preservation, and
  some queue uses were broken on some operating systems. [3.0b16]

- Fix: Memory leak in edit_string_ansi(). [3.0b10]

- Fix: Lastpaged instability issues have been dealt with. [3.0b16]

- Misc: A significant chunk of the page routine has been rewritten; it
  should be more efficient and more robust.

- Misc: The HAS_FORWARDLIST flag is usually checked before trying to fetch
  a forwardlist.

- Misc: Some minor general cleanup.

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

5/24/2000: Beta 20

- Feature: A new script, ReportCrash, analyzes a core file and automatically
  emails the results to the bug-report address.

- Feature: Log diversion. You may divert the logfile for a given type of
  logging to a separate file from the main logfile.

- Feature: Readability of configuration parameters is now controlled
  via the config_read_access conf param, and can be listed with
  @list config_read_perms. config() now checks read permissions, and
  thus can be used by non-wizards.

- Feature: Vector functions have been cleaned up and made more efficient.
  Vector dimensions are no longer limited. vunit() can take an output
  delimiter.

- Feature: Boolean determination is made in a more intelligent manner.
  The dbref #0 is now true, and all negative dbrefs are false; lists of
  dbrefs are true; the string '#-1 <error string of some sort>' is false;
  other non-zero non-empty strings are true. Old-style booleans can be
  gotten by enabling the new conf parameter booleans_oldstyle.

- Feature: New function lrand() generates a delimiter-separated list of
  N random numbers between X and Y.

- Feature: New config parameter 'autozone'. If this is off (it's on by
  default), newly-created objects do not get zoned to their creator's
  zone.

- Fix: 'admin' is now recognized as a valid permission parameter. [MUX]

- Fix: elock() checks if the victim, not the calling object, can
  Pass_Locks. [3.0b8; Xidus]

- Fix: Buffer overflow fixed in center(). [3.0b16]

- Fix: Buffer overflows fixed in reverse() and revwords(). [3.0]

- Fix: Buffer overflow fixed in raw_broadcast(). [3.0]

- Fix: setq() register checking is enforced again. [3.0b16; Meran Kal]

- Fix: A problem with %q-substitutions has been fixed. [3.0; Kevlin]

- Fix: "<foo> has reconnected." message is back. [3.0b8]

- Fix: strtok_r() is used instead of strtok(), for re-entrancy. This
  fixes a problem with pagelocks and @pemit/list, among other things. [MUX]

- Fix: A problem with mail flags has been corrected. [MUX; Dan Ryan]

- Fix: Handle behavior correctly when the creator of an object is #-1. [3.0]

- Fix: Only God can set attributes on himself. [3.0b14]

- Fix: Dates of the year 2000 and later are now logged as 00, 01, etc.
  rather than 100, 101, etc. [2.0]

- Fix: rawdump now works again (modified to work with new gdbm version). [3.0]

- Misc: Newly-created Guest characters now have the same flags as the
  Guest-prototype object; the same flags stripped by @clone are also
  stripped here.

- Misc: Only God can @program himself. (This is a better fusion of the
  2.2 and MUX permission models.)

- Misc: Floating point cleanup. ncomp() now handles floating points as well.

- Misc: The page routine has been completely rewritten, fixing a variety of
  issues and non-ideal behaviors. Among other things, 'p =<message>' now
  works as expected (equivalent to 'p <message>').

- Misc: ansi() and translate() now do table lookups for the ANSI codes.
  ansi() handles invalid input more elegantly.

- Misc: INLINE is used correctly now.

- Misc: Miscellaneous cleanup, including clean compilation under Solaris.

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

6/12/2000: Beta 21

- Fix: Whitespace in @cron entries is now handled properly. [3.0b8]

- Fix: Logic bug in setting drop-tos. [3.0a3]

- Fix: Idle time is now updated when a user enters input into a @program.
  [MUX]

- Fix: Small problem in @list site_information. [2.2]

- Fix: An off-by-one error in attribute compression has been fixed. [3.0b16]

- Misc: The behavior of the main and diverted logfiles across @restart
  and @logrotate commands is now consistent. Old logfiles are given a
  timestamp; the current logfile being written to is always the
  "basic" name of the logfile. This allows old logfiles to be
  readily removed to reclaim disk space, and allows any external
  log-processing tools to always operate on the same filename.
  The 'game_log' parameter needs to be defined appropriately
  in netmush.conf (or equivalent).

- Misc: The definition of '#!' has been changed, with the first nesting
  level as 0 rather than 1. This has been done for PennMUSH compatibility
  reasons. (In all likelihood, nobody was using it anyway, since it's
  not useful until the next release introduces itext(), etc.)

- Misc: When an object of typing Thing has only marker flags, an
  underscore is used to separate the dbref from the flags, i.e.,
  dbref #3 with marker flag 2 is now '#3_2'.
 
- Misc: There can only be a space between the function name and the
  open-parens if the parser is being required to interpret parens
  as a function call; i.e.m 'say space (3)' is treated differently
  from 'say [space (3)]'. 

- Misc: A_USER_START is no longer used in defining the size of the
  command table.

- Misc: More floating-point cleanup.

- Misc: Startmush script now looks for 'Cleanup completed' rather than
  'Startup processing complete', since cleanup is now the last stage
  in initialization (since 3.0b16).

- Misc: Some configuration parameters have been moved from config.h
  to the Makefile. It should no longer be necessary to edit config.h
  before compiling, unless you are changing something pretty esoteric.