ChangeLog, TinyMUSH 2.2

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

11/17/96:  TinyMUSH 2.2.3

- A DB RELOAD IS REQUIRED BY THIS CODE RELEASE. Updated the db version 
  stuff to version 10. (config.h, dbconvert.c, db_rw.c, mushdb.h)

- Folded in Andrew Molitor's patch to alphabetize and binary-search
  on attributes at the cache level, fix the chunkfile growth, support
  IN_MEM_COMPRESSION compile-time option for radix compression, and
  write out names instead of numbers in attrib locks. (command.c, db.c,
  db_rw.c, dbconvert.c, game.c, mushdb.h, udb_ocache.c, udb_ochunk.c,
  autoconf.h.in)

- Folded in Cookie's improved, much faster string-handling routines. 
  (alloc.c, alloc.h, command.c, cque.c, create.c, db.c, eval.c,
  externs.h, file_c.c, flags.c, functions.c, game.c, log.c, look.c,
  netcommon.c, player_c.c, speech.c, stringutil.c, unparse.c, walkdb.c)

- "Lag checking", logging a warning if the real time (not CPU time)
  for execution of a command exceeds the config parameter lag_maximum.
  Can be turned off by the compile-time NO_LAG_CHECK option. (command.c,
  conf.c, config.h, cque.c, mudconf.h, netcommon.c)

- You can now lock out Guests from certain sites, via the guest_site
  configuration directive. (conf.c, mudconf.h, netcommon.c)

- The BOUNCE flag acts like the equivalent of a @listen of '*' with no
  @ahear. Useful for letting players be transparent to noise without
  needing to enable player_listen. (flags.c, flags.h, game.c)

- PARANOID_EMIT compile-time option prevents @pemit and @emit from being
  used on non-Affected targets. This has been previously impossible to
  prevent using the conf options. (config.h, speech.c)

- The new function lastcreate() and the NewObjs attribute keep track of
  last-created objects for a given thing. (attrs.h, db.c, functions.c,
  object.c)

- Command matches on objects can now be done unparsed, through the use
  of the AF_NOEVAL attribute flag. This allows editors that don't strip
  percent-signs, etc. (attrs.h, command.c, command.h, cque.c, externs.h,
  functions.c, game.c, look.c, netcommon.c)

- Pueblo patch integration; PUEBLO_SUPPORT compile-time option. This is
  a multimedia MUD client; see http://www.chaco.com/pueblo for details.
  (Makefile.in, attrs.h, command.c, conf.c, config.h, db.c, externs.h, 
  file_c.c, file_c.h, flags.c, flags.h, functions.c, game.c, interface.h,
  look.c, move.c, mudconf.h, netcommon.c, predicates.c, speech.c,
  stringutil.c)

- COMMA_IN_SAY compile-time attribute controls whether or not a comma is
  inserted or not, i.e., 'You say, "Hi."' vs. 'You say "Hi."'  (config.h,
  speech.c)

- Resetting of buffer pools is done at checkpoint time. Extra consistency
  checking and pool_reset code borrowed from MUX. (alloc.c, timer.c)

- NOSPOOF is now only wiz-visible, though anyone can set it; this
  attempts to prevent twits from excluding NOSPOOF people in mass-@pemit
  spams. STOP is now visible to everyone, but only wizards can set it.
  (flags.c)

- Function invocation limits are checked directly by the list-based 
  functions and foreach(), saving unnecssary extra passes through
  exec() in the parser, on overlofws. (functions.c)

- Seconds connected now noted in log of disconnect. (bsd.c)

- Default vattr hashtable size is now 16,384. @list hash also shows the
  size of the table. (vattr.c, vattr.h, Makefile.in)

- Changed default object cache size to 60x10 from 85x15. (udb_defs.h)

- Changed order of defines for configuration. (config.h)

- mix() no longer eats the beginning of its output, if that output is 
  NULL; its behavior is now consistent with map(). (functions.c)

- Fixed TLI socket close problems. (bsd.c)

- Properly null-terminated @ps/long output. (cque.c)

- A machinecost of 0 no longer crashes the MUSH. (cque.c)

- The ROBOT flag cannot be reset on players. (flags.c)

- Fixed memory leak in sortby(). (functions.c)

- list_check returns number of matches correctly. (game.c)

- Fixed buffer-overrun problem in queue_write(). (netcommon.c)

- Players over their paylimit don't get a paycheck. (player.c)

- Fixed '@set foo=bar:_baz/boom' bug (it was stuffing the contents of
  baz's BOOM into foo's BOOM, completely ignoring BAR).  (set.c)

- Fixed problem with attribute names of extactly 32 characters. Patch
  based on MUX. (vattr.c)

- Miscellaneous cleanup to remove compile-time warnings and small bugs
  done by Moonchilde.  (command.c, cque.c, db_rw.c, functions.c, look.c,
  netcommon.c, udb_achunk.c, udb_ochunk.c)

- Fixed some OS-specific problems:
    * Sys V variants: Andrew Molitor's filters now work.
    * HP-UX: char promoting to int in formal prototypes fixed. (externs.h)
    * Linux: myndbm now compiles properly. (myndbm.h)
    * Linux: MAXINT in delete() no longer causes a crash. (functions.c)

- Copyright notice updated to new TinyMUD copyright. (copyright.h)

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

2/14/96:   TinyMUSH 2.2.2

- Implemented the wiz-settable STOP flag. Halts further $command
  searching if one is matched on an object set STOP. Order something
  like a master room's contents by priority to get maximum use out of
  this. (command.c, externs.h, flags.c, flags.h, game.c)

- Implemented the COMMANDS flag and require_cmds_flag conf parameter
  (defaults to yes). If on, only COMMANDS-set objects will be searched 
  for $commands. Some automatic db conversion is provided (to DB 
  version 9), but it doesn't handle parents cleverly. (config.h, 
  db_rw.c, dbconvert.c, flags.c, flags.h, game.c, mushdb.h, command.c,
  conf.c, mudconf.h)

- Implemented @parent/zone, a secondary local master room check. 
  Controlled by conf parameter parent_zones (defaults to yes).
  (command.c, conf.c, create.c, externs.h, look.c, mudconf.h, mushdb.h)

- New functions: andflags(), orflags(), left(), right(), lpos(), objmem(),
  xcon(). (functions.c)

- @enable/@disable now logged as CFG/GLOBAL. (wiz.c)

- god_monitoring global parameter enables dumping commands to the
  screen (basically LOG_ALL_COMMANDS without spamming the disk).

- Memory leak fixed in foreach(). (functions.c)

- lattr() is back to its more logical 2.0.10p5 behavior. Functions which
  return lists should return empty lists on errors, rather than spewing
  goop into the list buffer. (functions.c)

- map() without a list returns an empty string, rather than trying to
  call the mapping function with nothing. (functions.c)

- udefault() didn't evaluate the arguments passed to it before calling
  the U-function. This has been fixed. (functions.c)

- Checks to make sure atol() does not gag on atr_get_raw() passing back
  a null pointer. From Ambar. (player_c.c)

- Updated alias.conf with new flag aliases and some new bad_names.

- Patchlevel information moved from 'news' to 'help', so that it gets
  installed automatically when people update their server help.
- 'help commands' is now 'help command list' (to avoid conflicting
  with help for the COMMANDS flag). 'help help' fixed to reflect this.
- 'help command evaluation2' lists the exact order of matching.
- 'help secure()' notes that the function stomps on commas.
- 'help @tel' now accurately reflects what Tport locks actually do.

- Portability modifications for BSD/386 and Linux. In particular, it
  should now compile cleanly on both; the Linux SIGFPE problem is
  also fixed, as is the BSD/386 db-eating problem.

- Platforms tested (clean compile, start, shutdown, restart):
  Irix 5.3, SunOS 4.1.3_U1, Solaris 5.4, BSD/386 1.1, Linux 1.2.11

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

6/4/95:  TinyMUSH 2.2.1

- Implemented local master rooms, the ZONE flag, and the local_master_rooms
  config parameter. (command.c, conf.c, flags.c, flags.h, mudconf.h, mushdb.h)

- Implemented @dolist/notify. (command.c, walkdb.c, externs.h)

- Implemented building_limit conf parameter, to limit total number of
  objects in the database. (object.c, conf.c, mudconf.h)

- @list options lists output_limit, local_master_rooms and building_limit
  status. (command.c)

- matchall() with no match returns the empty string, rather than a 0. 
  In general, list-based functions should return empty strings rather
  than garbage values, when errors are encountered. This was a programming
  oversight. (functions.c)

- shuffle() and squish() now properly return a null string when called
  with no args (rather than a number-of-args error). (functions.c)

- sortby()'s generic u_comp() function checks to make sure function
  limits have not been exceeded (preventing unnecessary extremely
  expensive calls to exec(), and long freezes). (functions.c)

- min() and max() no longer chop off fractional parts of numbers.
  Talek's patch for this modified to retain permissibility of passing
  the function only one arg. (functions.c)

- add(), mul(), and(), or(), xor(), min(), max() no longer keep the got_one
  temporary variable around. From Talek. (functions.c)

- not() now uses atoi() rather than xlate(), for behavior consistent with
  the other boolean functions. Note that this means it no longer regards
  dbrefs as "true". (functions.c)

- Fixed braino of && to || in dbnum(). From Talek. (functions.c)

- Mortals can now @destroy exits they're carrying. (create.c)

- Put in the mushhacks patch for fixing the site reg crash problem on the
  Alpha. This is an unverified patch. (conf.c, externs.h, mudconf.h)

- Wrote two utility functions, save_global_regs() and restore_global_regs(),
  whose purpose in life is to protect global registers from munging.
  (externs.h, eval.c)
- ulocal() now uses the utility functions. (functions.c)
- did_it() now restores the original value of the global registers after
  the @-attribute and @o-attribute have been evaluated (i.e., before 
  the action @a-attribute is done). (predicates.c)
- The state of the global registers is preserved for @filter, @prefix,
  and related attributes. (game.c)
- eval_boolexp()'s eval-lock evaluation preserves the state of the global
  registers. (boolexp.c)

- Modified the Startmush script to give more information as the pre-game
  file-shuffling is done. Added Talek's patch to automatically start a
  new db with -s if there are no existing old db files, and to do a bit
  of magic to grab the PID and tail -f the log until startup processing
  is complete.

- Fixed and updated the helptext for 'help me'.
- Updated the helptext on @aconnect/@adisconnect for global conns.
- Updated "help credits".

- Verified various fixes that were made in 2.0.10p6:
    * get(), etc. can retrieve all public attributes except for @desc,
      regardless of the status of read_remote_desc.
    * home() returns origin of exits.
    * @list options correctly reports configuration of matching commands.
    * @trigger takes a /quiet switch.
    * Rejected 2.0.10p6 "fix" to lattr() which returns #-1 NO MATCH instead
      of an empty string. (NOTE: This is untrue. It slipped in somehow.
      Error corrected in 2.2.2 release. -Amberyl, 2/14/96)

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

4/1/95:  TinyMUSH 2.2 Initial Public Release

- Began with TinyMUSH 2.0.10p5 as baseline code.

- Fixed all known bugs/problems in the baseline code, including:
    * Memory leaks. Also, it is no longer assumed that malloc() never
      returns NULL.
    * Matching is done consistently and intelligently (more or less).
    * '#' no longer matches '#0'.
    * @destroy matching bug fixed, and permissions checked properly.
    * @destroy cannot blast #0; it is always treated as a special object.
    * Set action of SIGFPE to SIG_IGN for linux, which spuriously generates
      the signal without an option to turn it off.
    * @forwardlists are loaded at startup.
    * cache_reset() is called for every item, during startup.
    * cache_reset() is called periodically, when loading player names.
    * cache_trim config parameter removed. 
    * Wildcards can no longer be used to overflow buffers.
    * @alias makes sure that player name is valid.
    * @clone names cannot be non-NULL and the name must be valid.
    * elock() requires nearby or control of just one object, not two.
    * insert() can append to a list.
    * @function does not crash game when attr is nonexistent.
    * A /switch on an @attr command (@fail, etc.) does not crash game.
    * STICKY droptos properly check connected players.
    * Overflowing connect buffer does not cause game to crash.
    * Fixed typo of 0 to o in See_attr() macro.
    * Fixed lack of terminating null on make_ulist() (used by lwho()).
    * Fixed a @sweep bug which was causing Audible exits and parent objects
      not to show on the @sweep.
    * @doing cannot contain tabs or CRs -- converted to spaces. Also fixed
      an off-by-one counting error on characters dropped.
    * Removed obsolete memory-statistics stuff.
    * Fixed timer alarm()s to generate appropriate behavior on all operating
      systems (previous correct behavior was due to an ancient bug in the code 
      which caused things to always default to an error condition that 
      generated guaranteed-good behavior).
    * Two small syntax things corrected (=- to -=).
    * Fixed helptext error involving checking of $commands on parent objects.
    * Noted in help.txt that KEY affects all locks, not just the default one.
    * MYOPIC now works properly for wizards.

- Many things were fixed in configure; some compatibility changes were made.
    * db.h is now mushdb.h, in order to appease FreeBSD.
    * Support for setdtablesize() and get_process_stats() on Sequent.
    * Support for the rusage syscall() braindamage on HP-UX.

- New features were added, and some other things twiddled.
    * Quotas can be managed by object type.
    * There is support for multiple guest characters.
    * There is support for global aconnects and adisconnects.
    * Added logging of command count, bytes input, and bytes output, when
      player disconnects.
    * Note is written to log after startup processing is completed (since 
      there is often a substantial delay between the db load completing and 
      the game actually being "up").
    * @shutdown/abort causes game to coredump via abort().
    * @dbck can fix damage of the 'Next(<obj>) == <obj>' type.
    * @search reports a count of the objects found, broken down by type.
    * @pemit to disconnected/pagelocked players now does not return an error
      message.
    * @pemit/list and @pemit/list/contents sends a message to a list.
    * @decompile takes wildcards.
    * 'examine' shows more attribute flags. More individual attribute flags
      are now settable.
    * Added "audible" notation to @sweep command.
    * Idle/Reject/Away messages now take the paging player as the enactor,
      rather than the target player. This enables personalized messages for
      each player.
    * Fixed @list options to reorganize some of the parameters and remove
      redundant or obsolete stuff. Also added some previously unlisted stuff,
      like typed quotas and function limits.
    * Reorganized @list process, and removed bits of obsolete code.

- Functions were modified.
    * and() and or() stop evaluating when a conclusion is reached (this
      isn't user-visible, unless there are inline side-effect functions
      like setq(), and is done merely for internal speed).
    * hasflag() can now check attribute flags.
    * iter() and parse() evaluate their delimiter args.
    * lnum() can now take a range argument, and a separator.
    * locate() can now taken an 'X' parameter (to force an ambiguous match).

- Functions were added.
    * %q-substitution for r()
    * %c/v(c) substitution for 'last command'.
    * default(), edefault(), udefault()
    * findable(), hasattr(), isword(), visible()
    * elements(), grab(), matchall()
    * last(), mix(), munge(), scramble(), shuffle(), sortby()
    * objeval(), ports(), ulocal()
    * foreach(), squish()

- Configuration options were added and modified, and other cleanup was done.
    * Made wizard_obeys_linklock a config option (default is "no").
    * Default queue idle and queue active chunks changed to 10/10 (from 3/0).
    * Default object cache size changed to 85x15 (from 129x10).
    * New config parameters starting_room_quota, starting_exit_quota,
      starting_thing_quota, starting_player_quota, typed_quotas (defaults
      to "no") added to support Typed Quotas.
    * New config parameter use_global_aconn (default is "yes").
    * Config parameter 'guest_char_num' replaced by 'guests'.
    * Floating-point arithmetic is now an #ifdef FLOATING_POINTS in config.h
    * Hashtable sizes were upped to 512 for players, 256 for functions, and
      512 for commands.
    * The code was split up into multiple directories.
    * One consistent indentation style is in place (see misc/indent.pro)
    * New news.txt file, which says some general things about 2.2 and MUSH,
      adds a user-visible changes section, and adds a long-needed "how to
      write a news file" entry. Also modified motd.txt for the 
      "### end of messages ###"  client-stop-gagging-welcome-screen mark.

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