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)
