Release history:

Version 3.1  (yes, no beta pl): November 18, 2002
Version 3.00 beta pl22 release: October 4, 2002
Version 3.00 beta pl21 release: April 15, 2002
Version 3.00 beta pl20 release: January 15, 2002
Version 3.00 beta pl19 release: August 14, 2001
Version 3.00 beta pl18 release: March 18, 2001
Version 3.00 beta pl17 release: January 23, 2000
Version 3.00 beta pl16 release: August 30, 1999
Version 3.00 beta pl15 release: March 16, 1999
Version 3.00 beta pl14 release: July 3, 1998
Version 3.00 beta pl13a release: June 4, 1998
Version 3.00 beta pl13 release: June 1, 1998
Version 3.00 beta pl12 release: October 29, 1997
Version 3.00 beta pl11 release: April 14, 1996
Version 3.00 beta pl10 release: March 11, 1996
Version 3.00 beta pl9 release: February 6, 1996
Version 3.00 beta pl8 release: May 23, 1995
Version 3.00 beta pl7 release: March 9, 1995
Version 3.00 beta pl6 release: March 6, 1995
Version 3.00 beta pl5 release: February 23, 1995
Version 3.00 beta pl4 release: September 28, 1994
Version 3.00 beta pl1-3, internal releases for beta-testers.
Version 3.00 alpha: Ran on net for testing.  Code not released.
Version 2.20 release: November 17, 1993
Version 2.11 release: September 19, 1993
Version 2.10 release: September 1, 1993
Version 2.02 release: Late August 1993
Version 2.01 release: Early August 1993
Version 2.00 release: July 16, 1993 (Initial public release)



Legend
------
JE = Jeremy Elson (jelson@circlemud.org)	Since Jul 16, 1993
AE = Alex Fletcher (furry@circlemud.org)	Since Feb 23, 1995
GG = George Greer (greerga@circlemud.org)	Since Oct 14, 1997
DK = Daniel A. Koepke (dkoepke@circlemud.org)	Since Jul 11, 1999

<joke> New applicants must have a last name alphabetically after
'Koepke' and will only be accepted on December 2, 2001. </joke>

--- CircleMUD 3.0 patchlevel 3

8/31/94 JE      Added a GET_REAL_LEVEL macro which returns the actual
                level taking switched characters into account.  Used
                in CAN_SEE so that switched immorts can't see invis
                gods.

8/31/94 JE      Added restriction to interpreter.c so that immort commands
                cannot be used by NPCs.  Removed all the IS_NPC checks from
                the individual god commands since they are now redundant.

8/31/94 JE      Made newsign.c into sign.c and deleted the old DIKU sign.c.
                newsign.c forks to handle its kids and is generally more
                concise and robust.

8/31/94 JE      Changed the type argument of affect_from_char and
                affected_by_spell to sh_int (from char) to match the fact
                that the 'type' member of the affected_type structure is
                now a sh_int instead of a char.  Spotted by Jean-Jack
                Riethoven.

8/31/94 JE      Fixed MIN statement using uninitialized 'water' var in
                spell_create_water.  Spotted by JJR.

8/31/94 JE      Ken Cavness noted that MOBs were getting past guildguards.
                Not surprising, since I changed the relationship between
                do_move/do_simple_move/perform_move so many times.  The
                discipline has now changed again; MOBs calling perform_move
                must call with 3rd arg of 1 instead of 0.  Changed the
                arg from 'following' to 'need_specials_check' so its purpose
                would be clearer.

8/31/94 JE      Added 'worn_on' short integer to obj_data structure to go
                with worn_by char_data pointer.  Indicates which eq pos
                eq is being worn on.  (Will be used to facilitate a cleaner
                version of objectmagic.)

8/31/94 JE      extract_obj now automatically unequips the obj first if it
                is being used as equipment (uses worn_by and the new worn_on).
                do_use no longer unequips.  objectmagic didn't have to be
                changed since extract_obj automatically does the work now. :)

8/31/94 JE      Fixed cityguard routine with a CAN_SEE check so that blinded
                guards no longer banzai people, and so that guards don't
                banzai invis people etc.  Spotted by Ken Cavness.

8/31/94 JE      Fixed do_reply to make sure the person you're replying to
                is still in the game before calling perform_tell.  Note, I
                think it still may be possible for your reply to go to
                someone else if the recipient logs out and someone else logs
                in.  In particular, this will break in a big way if I ever
                implement some scheme where it keeps a pool of char_data
                structures for reuse.

8/31/94 JE      CHA added to display when rerolling a character.

8/31/94 JE      Changed TOUNGE to TONGUE throughout.

8/31/94 JE      Made the '*' (ignore) case in zone reset tables (used for
                invalid vnums) set last_cmd = 0 for proper resetting.

8/31/94 JE      Enhanced (added?) NeXT compatibility with FOPEN_MAX, my_signal,
                and O_NDELAY.

8/31/94 JE      Changed boards back to listing lowest to highest since people
                seemed to hate it the other way.

8/31/94 JE      Added sanity checks to perform_move since king_welmar seems
                to cause crashes when he's moving on occasion, and I'd rather
                remove that area than try to debug it.

8/31/94 JE      Changed 'SEC' to 'RL_SEC' in structs.h to avoid conflicts
                with many OS's #defines of SEC

9/1/94  JE      Good God, is it September already?

9/1/94  JE      Changed list_skills to accumulate in a buffer instead of
                using send_to_char, and use page_string.  This system really
                sucks.  There should be a "page_to_char" command, or something.
                It shouldn't even require too much conceptual difference now
                that output buffers are limited!

9/1/94  JE      Added a 'sort_spells()' function and changed list_skills
                to use sorted spell list instead of arbitrarily ordered list.
                sort_spells() called once on boot from db.c.

9/1/94  JE      Finally finished making the background story paged.  Now that
                process_input and command_interpreter, etc., have been
                rewritten, all it took was changing it from SEND_TO_Q to
                page_string.  Whoo hoo!

9/1/94  JE      Jeff Fink suggested having perform_act do some run-time
                sanity checking in order to make it more robust.  Thus,
                I created the CHECK_NULL macro for it in comm.c.

9/1/94  JE      Made mobs hit you if you try to cast an offensive spell
                at them and fail.

9/1/94  JE      Completed line-by-line zone-parsing routines.  Instead of
                using scanf() to read from disk, Circle now uses fgets().
                This allows MUCH more robustness, more accurate and sensitive
                error-checking of zone files, both at boot-time and run-time.
                In addition, the error reporting now gives you a specific
                _line number_ in the zone file of the error. :)

9/2/94  JE      Made a 'qecho' command, combined with qsay in do_qcomm
                of act.comm.c.

9/2/94  JE      Updated the README file.

9/2/94  JE      Circle 3.00 beta patchlevel 3 released


-- Patchlevel 4


9/9/94  JE      Added IS_NPC check to do_score to prevent crashes.

9/9/94  JE      Added #undef MAX and MIN for NeXT compatibility.

9/19/94 JE      Started work again after 10 days of real life (school's
                starting up again, ya know.)

9/19/94 JE      Changed lantern-handling in update_char_objects in handler.c;
                now gives warning one tick before the light expires (idea
                from Chris <ttl6u@fulton.seas.virginia.edu>) and correctly
                decrements world[ch->in_room].light as it should have from
                the very beginning.

9/19/94 JE      Changed the build_house parser in house.c to allow for
                a house which has more than one exit (i.e., only one of
                which is access-controlled) because people seem to want
                multi-room access-controlled areas.

9/19/94 JE      Fixed multi-room-shared-atrium bug in house_control_house,
                house.c (I haven't heard of this bug ever manifesting itself
                but looking at the code I realized the error.)


9/19/94 JE      Changed 'long' to 'time_t' where appropriate.

9/19/94 JE      Added graceful handling of missing playerfile in db.c


-- Patchlevel 5

10/4/94 JE      ban.c:98: long int format, time_t arg, fixed with cast

10/4/94 JE      Made default action of hcontrol to be a help screen;
                added 'show' subcommand.

10/4/94 JE      Added reni's NeXT function prototypes to utils.h

10/5/94 JE      Fixed !IS_NPC in do_score (act.informative.c)

10/9/94 JE      Added charisma-to-25 code to do_restore (act.wizard.c)

-- Sanity break

2/20/95 JE      Added max length check to set_title in limits.c -- all
                title setting should go through this function

2/22/95 JE      Added check for null name in 'show player'

2/22/95 JE      included unistd.h in house.c, boards.c and objsave.c
                for unlink prototype

2/22/95 JE      Low-lev imms can no longer see invstart people above their
                level entering game

2/22/95 JE      Changed 'color' and 'syslog' to show current levels if typed
                without arguments, instead of help text.

2/22/95 JE      fixed castle by adding terminator to end of move string
                reported by Ed Mackey (emackey@BIX.com)

2/22/95 JE      If you try to return to your original body, and someone else
                has connected into it, disconnect them.  act.wizard.c,
                do_return().
                reported by Aaron Mills

2/22/95 JE      interpreter.c - changed the code to sense if a switched
                persona of yourself is connected when you log in.  Should
                make switch more stable.
                reported by Aaron Mills

2/22/95 JE      new timediff in comm.c to work on systems for which
                tv_sec and tv_usec are unsigned
                reported by Steven Serocki <ss@sirocco.cup.hp.com>

2/22/95 JE      change RLIMIT code for systems that don't have RLIMIT_INFINITY
                reported by Steven Serocki <ss@sirocco.cup.hp.com>

2/22/95 JE      changed title_type[4][35] to [NUM_CLASSES][LVL_IMPL + 1]
                throughout
                reported by Darel Cullen

2/22/95 JE      changed "his arm" to "$s arm" in act.obj.c
                reported by Chris Epler <cepler@ucsee.eecs.berkeley.edu>

2/22/95 JE      act.other.c, do_quit() -- kill off all sockets connected to
                the same player as the one who is trying to quit.  Helps to
                maintain sanity as well as prevent duping.
                duping reported by Chris Epler <cepler@ucsee.eecs.berkeley.edu>

2/22/95 JE      installed new version of Jeff Fink's shop.c code

2/22/95 JE      Patched bug in Jeff Fink's shop code reported by him.
                Patch sent by Jeff Fink

2/22/95 JE      created player_specials structure for new players coming in
                after having been deleted.  Yet another example of a bug that
                could have been avoided completely if we'd been using C++.
                Reported by Jeff Fink

2/22/95 JE      Added code to support 'R' command in zone resets (remove
                obj from room).  Code sent by Jeff Fink.

2/22/95 JE      Changed plain 'stat' to make better assumptions about what
                you're trying to stat.
                Code sent by Jeff Fink

2/22/95 JE      Added go_gen_door code written by Jeff Fink to eliminate
                duplication of checks, etc. for open/close/lock/unlock/pick

2/22/95 JE      Fixed shop code -- changed keeper = 0 to keeper = me

2/22/95 JE      Added magic_alter_objs code submitted by Jeff Fink

2/22/95 JE      Added break statement to mag_damage, energy drain       
                Spotted by Jeff Fink

2/22/95 JE      Added ASCII flag system to db.c for world, obj, mob files

2/22/95 JE      Brought in the new 3.0 world files from Furry

2/23/95 JE      Created 'random.c' as Circle's new, portable random number
                generator.

2/23/95 JE      Added 'POSIX_NONBLOCK_BROKEN' option to work around OSs
                such as AIX which don't implement POSIX nonblocking I/O
                correctly, causing the MUD to hang in places such as the
                Password: prompt.

2/23/95 JE      Added a case for SGI (IRIX) in utils.h OS-specific header
                section for cleaner compiles


-- Patchlevel 6

2/24/95 JE      Fixed asciiflag_conv in db.c for uppercase flags (typo,
                'a' instead of 'A').

2/24/95 JE      Added max_bad_pws to config.c.

2/24/95 JE      (logged retroactively) Added max_filesize to config.c to
                set max limit on size of bug, typo and idea files to prevent
                bombing

2/24/95 JE      Moved 'pfilepos' from descriptor_data to char_data where is
                belongs.  More logical, plus fixes the switch-into-a-PC-and
                save bug reported on rec.games.mud.diku by
                shruew@amiserv.xnet.com (Johnny Mnemonic).

2/24/95 JE      Similarly moved password from descriptor to character.

2/24/95 JE      Changed nonblock to OR-in O_NONBLOCK to the current flag
                bitvector of descriptors instead of setting directly.

2/24/95 JE      Changed 'last_tell' (used by reply) to use player ID number
                instead of a pointer to the character.  Much safer because
                I don't have to worry about pointer reuse, plus it'll still
                work if the person you're replying to logs out and back in
                again.

2/24/95 JE      Changed distribution-default of nameserver_is_slow to NO.

2/24/95 JE      Fixed src/util/showplay.c

2/24/95 JE      Added MAG_ALTER_OBJS to SPELL_INVISIBILITY in spell_parser.c

2/25/95 JE      Fixed PC/NPC checks in act.wizard.c, do_set.
                Reported by Eric Green and Stefan Wasilewski

2/25/95 JE      Fixed carried-by/worn-by reporting of objects
                act.wizard.c, do_stat_object.
                Reported by Eric Green and Stefan Wasilewski

2/25/95 JE      Deleted 'equipment status' from do_stat_obj in act.wizard.c
                --didn't seem particularly useful and took up valuable screen
                space

2/25/95 JE      do_wiznet, act.wizard.c, wiznet chops off first letter of
                message when levels are used.  Reported by Eric Green and
                Stefan Wasilewski

2/25/95 JE      do_ungroup, act.other.c, fixed so that disbanding a group
                doesn't un-charm charmed mobs following you.
                Reported by Eric Green and Stefan Wasilewski

2/25/95 JE      magic.c, changed so you can't sanct sancted mobs
                Reported by Eric Green and Stefan Wasilewski

2/25/95 JE      Brought in fixed world files from furry and corresponding
                castle.c and spec_assign.c for new specproc assignments

2/26/95 JE      Removed minor output display but on object statting, do_stat,
                act.wizard.c  Spotted by Eric Green.

2/26/95 JE      Added max string length checks in perform_subst(), comm.c
                Reported by Eric Green and Stefan Wasilewski.  Also added
                comments to the function.

2/26/95 JE      Similar length checks in perform_complex_alias, interpreter.c

2/26/95 JE      Made buffers MAX_INPUT_LENGTH size to handle very large output;
                tmp_name in interpreter.c, *_search in do_who and do_users
                in act.informative.c

2/26/95 JE      Rewrote most of do_group, act.other.c

2/26/95 JE      do_ungroup, act.other.c - disbanding a group also ungroups
                yourself.

2/27/95 JE      Added olc.c and olc.h.

2/28/95 JE      Added bank card specproc to spec_assign.c

2/28/95 JE      Updated FAQ and README-BETA

3/3/95  JE      Patchlevel 6 released


--- Patchlevel 7

3/4/95  JE      Added PFILEPOS assignment in interpreter.c so deleted 
		characters are not replicated in plrfile.  (near "Did I get
		that right, X?")

3/4/95- JE      Extensive rewrite of documentation
3/7/95

3/8/95  JE      Changed qecho to LVL_IMMORT (interpreter.c)

3/8/95  JE      Created GET_PFILEPOS macro and used it throughout.

3/8/95  JE      Changed extern declaration of thaco in fight.c from [4][35]
                to [NUM_CLASSES][LVL_IMPL+1].  Spotted by Marcin Zaranski.

3/8/95  JE      Problems reported with stop_fighting called when char not
                fighting.  Most probably the call of stop_fighting() in
                hit() when ch->in_room != vict->in_room.  Added check for
                FIGHTING(ch) before calling stop_fighting.  Also made
                stop_fighting tolerant of being called at the wrong time.
                Problem spotted by Marcin Zaranski.

3/8/95 JE       Also changed stop_fighting to use REMOVE_FROM_LIST macro.

3/9/95 JE       Implemented ROOM_TUNNEL.

3/9/95 JE       Fixed a bug causing the MUD to crash under pathological
                input-overflow conditions (such as someone holding down a
                key for 60 seconds.)
                Reported by Carl Tashian <TASHIACM@ctrvax.Vanderbilt.Edu>

3/9/95 JE       "set class" output corrected.
                Spotted by Ryan Baker <ed209@free.org>.

3/9/95 JE       Added Jeff Fink's do_gen_door patch for picking.  Also
                initialized obj and vict to NULL, might have been causing
                double messages.

3/9/95 JE       Fixed find_door to give a better message with a null arg.

3/9/95 JE       Brought in new version of world files from Furry
                Deleted that stupid '#99999' from the end of all the world
                files since the new parser doesn't need them.

3/9/95 JE       Changed perform_group so "group all" doesn't group people
                you can't see.


--- Patchlevel 8

5/5/95	JE	Changed my email address to jelson@jhu.edu throughout.

5/5/95	JE	Implemented AFF_WATERWALK flag.

5/5/95	JE	Implemented MOB_AWARE flag (mobs that cannot be backstabbed).

5/5/95	JE	Implemented MOB_NOBASH flag.

5/5/95	JE	db.c, added support for type E (Enhanced) mobs

5/5/95	JE	Implemented ROOM_PEACEFUL flag (rooms in which fighting
		is not permitted.)

5/5/95	JE	Implemented ROOM_NOTRACK flag.

5/5/95	JE	Implemented AFF_NOTRACK.

5/5/95	JE	Added some sanity checking to obj_to_obj.

5/5/95	JE	Neatened up the saving throw table in magic.c.

5/10/95	JE	Implemented bless and curse spells for objects.
		Code submitted by Jeff Fink.

5/10/95	JE	Implemented poisoned objects and remove-poison for objs.
		Code submitted by Jeff Fink.

5/10/95	JE	Implemented MOB_NOCHARM flag.

5/17/95	JE	Completely new building.doc world builders' documentation.

5/20/95	JE	Imported latest version of Furry's world files

5/21/95	JE	handler.c, extract_char()... if a char is extracted and
		has no descriptor associated with it, free the char.
		Prevents a memory leak if players get purged.
		Suggested by Eric Green.

5/21/95	JE	Set mob's default charisma to 11.
		Spotted by Jeff Fink.

5/21/95	JE	Changed obj num loaded for 'create food' to 10, waybread.

5/21/95	JE	Removed strange code from db.c, reset_zone, 'O' command,
		that seemed to prevent two objs of the same vnum from being
		loaded in the same room.
		Suggested by Jeff Fink.

5/21/95	JE	handler.c, affect_join() - fixed bug preventing spells
		with multiple effects from coexisting.
		First reported by Thomas Katzlberger. 

5/21/95	JE	boards.c - changed board so it will respond to 'examine'
		as well as 'look'
		Suggested by Chris Epler.

5/21/95	JE	Initialized GET_LAST_TELL to NOBODY.
		Spotted by Eric Green and Stefan Wasilewski

5/21/95	JE	Changed around wiz-invisibility for better compatibility with
                the 'visible' command, and to give better messages.
		Suggested by Chris Epler.

5/21/95	JE	Fixed mag_groups so caster is only hit once per cast.
		Spotted by dodger@WPI.EDU (DoDGeR)

5/21/95	JE	Fixed the bug causing crashes on some systems if an
		incorrect class is entered when a new character is created.
		For the record I think this was happening on architectures
		on which the 'char' type is defined as being unsigned.

5/21/95	JE	Made is_abbrev asymmetrical as it should be; fixes
		"look ingerwal" as being interpreted as "look in"
		Reported by Mike Higuchi and others.

5/21/95	JE	Changed spells_to_learn from byte to int; used one of the
		spares in the playerfile so that people already running
		MUDs with 3.0 won't get screwed (grrrrr....).
		Spotted by Marcin

5/21/95	JE	spell_parser.c, say_spell() - target of spell now only
		sees caster casting if they're in the room together.
		Spotted by Marcin

5/21/95	JE	Also changed say_spell so that object messages will be
		correctly reported if target obj is in caster's inventory
		as well as in same room.

5/21/95	JE	Changed mag_alter_objs to give the room a message as well
		as the caster.

5/21/95	JE	handler.c, char_from_room(), changed so that if char is
		fighting when removed from room, stop_fighting is called
		immediately to stop the fight.
		Problem found by Marcin

5/21/95	JE	Corrected errors with RUSAGE section in comm.c.
		Spotted by Thomas Knight

5/21/95	JE	Fixed the ancient "pour canteen out" bug -- the problem
		was that any drink container whose weight was less than
		its quantity could go negative since the MUD assumes that
		all drinks weigh one pound per unit of drink.  parse_room,
		db.c, now checks drink containers and fountains to make
		sure that weight is greater than quantity.

5/21/95	JE	Fixed the cleaning woman in Welmar's castle so that she
		only picks up trash.
		Fix submitted by Christopher Dickey

5/21/95	JE	Fixed up show_string so that the display works properly;
		fix submitted by Michael Buselli

5/21/95	JE	Player killers' damage no longer set to 0 if they're inflicting
		damage on themselves.
		Reported by Julian Fong.

5/21/95	JE	Fixed do_gen_door to correctly sense when no arg is given.
		Problem spotted by Eric Green

5/21/95	JE	*** WAIT_STATE set for all uses of magic items ***
		Suggested by Eric Green

5/21/95	JE	Found irrefutable clues & figured out who shot Mr. Burns.

5/21/95	JE	Bug in mobact.c prevented alignment-aggressive monsters from
		working if they were set not in conjunction with the normal
		AGGRESSIVE bit.
		Problem spotted by Chris Epler

5/21/95	JE	Problem with HELPER mobs getting extra hits fixed.
		Problem spotted by Chris Epler

5/22/95	JE	Created the CircleMUD License.  Changed Makefile so that
		the license is displayed the first time the MUD is compiled.
		Sorry if this is a dickish thing to do, but it's a Derek
		Snyder countermeasure.

5/22/95	JE	Added logging for whole-world-resets using zreset command.

5/22/95	JE	fight.c, hit() -- Changed declaration of all intermediate
		vars used to calculate hitroll and damroll to be int to
		avoid problems with unsigned bytes on certain architectures.
		Same change to 'percent' vars in act.offensive.c.
		Suggested by Al Thompson

5/22/95	JE	Rewrote mag_affects in magic.c to be more readable and easier
		to use, as well as correcting some old bugs (i.e., being able
		to un-affect mobs by re-affecting them and then waiting for
		the affect to fade.)

5/22/95	JE	fight.c, damage() - WIMPY mobs do not flee if they are
		damaging themselves.

5/22/95	JE	comm.c, close_socket().  When a player loses link, all
		players with same idnum are also disconnected.  Fixes a
		duping bug.
		Found by Clay Hardin

5/22/95	JE	Added "NOEFFECT" char constant to config.c.

5/22/95	JE	Fixed bug in zone-reset 'R' command where second arg was
		being resolved as a room vnum instead of an obj vnum.
		Fix sent in by BUG.

5/22/95	JE	Added two prototypes to comm.h so that comm.c will compile
		cleanly under Ultrix.

5/22/95	JE	spell_parser.c, cast_spell() - prevents ungrouped chars from
		casting MAG_GROUPS classes of spells (returns error msg and
		does not take mana).

5/22/95	JE	Added the GET_EQ macro for character equipment and SECT
		macro for sector types; changed code throughout to use
		the new macros.

5/22/95	JE	act.movement.c, has_boat - added has_boat function so that
		unwearable boats in inventory and boats worn will work as
		boats.

5/22/95	JE	Added sun386 (SunOS 4.0.x) compatibility by defining
		sigaction as signal for it.
		Patch sent by Tim Aldric.

5/22/95	JE	Implemented detect poison as a manual spell.

5/22/95	JE	Fixed up mag_areas (generally) and earthquake (specifically).

5/22/95	JE	Changed 'invis' command so it will not work on mobs.
		Bug spotted by v932459@si.hhs.nl.

5/23/95	JE	Fixed get_char_room_vis so that you can no longer access
		PC's throughout the world with the '.' syntax.  (Oops..)

5/23/95	JE	Changed GET_POS==FIGHTING check to if(FIGHTING) in
		cityguard specproc, spec_procs.c
		Bug spotted & fix submitted by Jason Fischer

5/23/95	JE	fight.c, perform_violence() - Implemented wait states for
		mobs, so that mobs who are bashed etc. are actually taken out
		of the violence for some number of rounds (depending on the
		skill), like it is supposed to be.

5/23/95	JE	limits.c, gain_exp*(), changed level message so you aren't
		spammed if you gain more than one level at once.

5/23/95	JE	Added bash as a level 12 warrior skill.
		If successful, your opponent loses 1 round.
		If unsuccessful, you lose 2 rounds of combat.
		You cannot try to bash again for 2 rounds.

5/23/95	JE	Fully implemented the bash-class of skills; i.e., for skills
		where it tells you you fall on your ass and have to stand up
		again, you actually lose the rounds of combat while you're
		still sitting.

5/23/95	JE	Brought in new lib/misc/messages file from Furry with some
		additional attack types.

5/23/95	JE	Wrote the E-Spec parser and brought in Furry's world files
		that use E-Specs.

5/23/95	JE	Fixed all the utilities, including autowiz which now works
		again.

5/23/95	JE	Took out the scheck utility and replaced it with the -c
		option on the server (Check syntax only - do not run game).
		Another fantastic idea from Gekke Eekhoorn, the source of many
		fantastic ideas.

5/23/95	JE	Deleted some extraneous lines from the Makefile (rules for
		compiling utilities that no longer exist).
		Found by Jared McDonald

5/23/95	JE	Released patchlevel 8.


--- Patchlevel 9

(No dates on this patchlevel... sorry!)
-- Made Circle self-configuring using the GNU 'autoconf' package; created
   new header files conf.h and sysdep.h.  Most standard library files are
   now conditionally included from sysdep.h and have been removed from the
   .c files.  -lsocket/-lnsl libraries are automatically used if needed.
   Circle's built-in 'random' function is used only if there is no random()
   on the system.. many other autoconfigured aspects as well.

-- Rewrote much of the code for the login/load sequence to prevent duping.
   Duping should hopefully be impossible now.  Fixed the dumb bug that allowed
   people to cut off players by logging in and out without a password.

-- Added 20 second limit to entering a password before you're cut off.

-- Fixed the braindead way LOADROOM works.  Syntax is now simply "set ras
   loadroom <vnum>" or "set ras loadroom off".  Loadroom now properly set
   when someone quits out of their house, so they go back there by default.

-- Truncate message board titles to 80 characters or less - fixes a crash
   bug.

-- Changed tunnels so that they are "full" only if filled with a PC, not
   just any char.

-- Redid the code for setting the minimum levels classes need to be before
   they can use spells and skills, and moved it to class.c.  It's now *much*
   easier to add new classes--- stupidly, under the old system, every time
   you added a new class all of the existing spello() calls had to be
   changed!  See class.c to see how spell-level setting is done now.

-- Fixed the bug which popped up in systems such as FreeBSD which incorrectly
   reported the number of available file descriptors if the number was
   unlimited (RLIM_INFINITY).

-- Fixed a bug causing crashes if text files (motd/imotd/news/etc) are empty.

-- FINALLY fixed the dumb bug causing the first char (implementor) to log
   in to come in with all stats of 0.

-- Changed magic.c so the number of affects a spell can have is not
   arbitrarily limited to 2.

-- Immortals can walk past guildguards.

-- Fixed up some spells (create water works now).

-- Added 'show houses' for Mr. Christopher Epler.  :)

-- Fixed a small error in one of the comments in boards.c describing how
   to add a new board.
   Found by Stefan Rensing

******** Patchlevel 10 ***************************************************

-- Fixed all the (dumb) definitions of str_app, int_app, etc. -- these
   used to be arrays of 36 because a long time ago I stupidly thought those
   arrays had to be extended to the number of levels on the MUD.  They have
   been correctly changed to reflect the possible attribute values of
   characters (3-18 for PCs, 3-25 for NPCs and Gods).

-- Added Michael Buselli's patches for an enhanced "more" pager that lets
   you go back, forward, refresh, etc.  Nice work, Michael.

-- Made Circle compile under HP/UX with the help of Ben Denckla (required
   an #ifdef for RLIM_INFINITY).  Made some other fixes to get_max_descs()
   in comm.c as well.  I hate this function.

-- Removed the REUSEPORT setsockopt() call from comm.c when opening the
   mother connection.  This never made any sense in the first place since
   REUSEPORT is a UDP and not a TCP thing, plus it broke Circle under IRIX
   5.3+.

-- Incorporated David Carver's OS/2 patches.  Circle should now compile
   under OS/2 more or less out of the box (instructions included).

-- Added error checking to number() in case its called with the arguments
   backwards.

-- Added the skill_name() function to safely resolve spell numbers to
   spell or skill names.  Now used to stat potions, staves, etc.

-- Fixed the but in the usage of is_abbrev in find_skill_num that prevented
   spell names from being abbreviated.  Reported by numerous people.

-- Fixed a bug which prevented mag_materials() from working at all (although
   it isn't used in standard Circle code, anyway.)

-- Changed a str_cmp to isname in the FIND_OBJ_EQUIP case of generic_find()
   in handler.c for better location of objects.
   Sent by one of our best bugfinding teams, Eric Green and Stefan Wasilewski,
   KEEP IT UP, GUYS!  :-)

-- Fixed the operation of peaceful rooms so that bash, etc, also don't work.

-- Fixed a dumb bug where aliases (which use player_specials) were freed
   *after* player_specials were freed.  Reported by numerous people.

-- Added values for movement loss for flying and underwater sector types.

-- Bug fixed in do_set which made the PC/NPC checks not work.

-- Changed backstab multipliers from a table to a formula to make adding
   new levels easier.  (Adding new levels is now trivial; you just have to
   change the #defines in structs.h for the LVL_xx constants, and then 
   define the titles and exp required for each level in constants.c).

-- do_stat_obj (act.wizard.c) updated to reflect building.doc (very old
   bugs lurking in here) -- stat display changed to reflect real meanings
   of values[0] - values[3] of objects.

-- do_steal changed to simplify the no-psteal code (psteal simply always
   fails on muds where it is not allowed).

-- You can't wake up someone who's dying. (do_wake)
   Patch sent by Lincoln Chan <linc@CSUA.Berkeley.EDU>

-- Message seen when a door opens from the other side fixed. (do_open)
   Patch sent by Lincoln Chan <linc@CSUA.Berkeley.EDU>

-- All utilities ported and fixed.

-- Some changes to Makefile template Makefile.in

-- Help system completely rewritten to use split help files and an
   'index' file just like the world files; help files are loaded into
   memory entirely instead of keeping file positions and an open file.
   New copy of help files imported from Chris Epler (cepler@cambot.res.jhu.edu)

-- Rewrote one_word() in interpreter.c (used to be modify.c) as part of the
   help system rewrite.

-- New world/ hierarchy from Furry (furry@cambot.res.jhu.edu)

-- New 'messages' file from Furry (furry@cambot.res.jhu.edu)

-- New 'configure' script which should detect nsl and socket libraries
   more reliably.

-- All scripts rewritten (autorun, automaint, purgeobjs, etc.) to use sh
   instead of csh.  They've been fixed, too (most of them were broken because
   they had not been modified since the location of certain files changed).
   Autorun rewrite by Stuart Lamble

-- New FAQ by Furry (furry@cambot.res.jhu.edu)


******** Patchlevel 11 ***************************************************


-- Patches to make Circle compile under MSVC++ 4.0 under Windows 95:
	Created a 'conf.h.win' to act as Windows' conf.h.  Created a new
        constant, CIRCLE_WINDOWS, to use for #ifdef's.  Changed OS2's constant
        from OS2 to CIRCLE_OS2 for consistency.

        Changes to some of the types throughout the code (e.g. changing some
        int's to size_t's.

	Changed the type of all sockets from int to socket_t; sysdep.h
	typedef's int as being socket_t under UNIX and SOCKET to socket_t
	under Windows.

	Changes to some of the code in comm.c (with ifdef's) to account for
	some of the differences between WinSock and Berkeley Sockets.

        Wrote a "fake" gettimeofday() function which is an interface to the
        Win32 GetTickCount() and a WinSock-compatible nonblock().

	Renamed 'act.obj.c' to 'act.item.c' to defeat an apparent bug in
	MSVC++ that refuses to properly object files that have the word
	"obj" in their name (i.e. act.obj.obj).

        Changed the boot-up procedure so that the max player calculation is
        done before socket initialization (this is done so that the max can
        be reduced from the MAX_PLAYERS value in comm.c if WSAStartup() tells
        us we have less than that number of max sockets available.

	Created a CLOSE_SOCKET macro: under UNIX, this is #defined as
	close(); under Windows, it's defined as closesocket.

        #defined log(x) as basic_mud_log(x) to prevent namespace collision
        with the mathematical log() function.

-- Various fixes to the 'configure' script:
       The '-lsocket' library should hopefully be detected more reliably
       (by detecting -lnsl first; some systems need -lnsl before -lsocket
       will link successfully).

       The -cckr option is given to the compiler if we are not using gcc and
       it is determined that your system's cc can take the -cckr argument.

       -fno-strict-prototypes given if we're using gcc (this should hopefully
       alleviate the continuing headache of getting function prototypes to
       work).

       Include a prototype for random and srandom if it's determined that
       we're using Circle's random/srandom functions and not libc's.

       Check for the presence of arpa/telnet.h, and use our own local copy
       (telnet.h is now included with the Circle distribution) if it does
       not exist.

       Check for sys/types.h before including it.

       Configure recreated with GNU autoconf v2.9 (previously was 2.7).

-- Made some fixes to the autorun script: most notably, it was not passing
   command-line parameters to the MUD, meaning that you had to change the
   port in config.c in order for it to be changed if you were using autorun.
   This means that port-number changing now works the way it was documented
   (autorun setting takes precedence over config.c).

-- Made some changes to conf.h.os2 to reflect the new configure script and
   the changing of the constant from OS2 to CIRCLE_OS2.

-- Moved heartbeat functions out of game_loop and into their own function
   which is called by game_loop (seems more logical this way to me).

-- game_loop, comm.c: The code which controls the tick-timing was rewritten;
   the timer is now much more accurate (does not drift with time), and
   gracefully handles making up for lost ticks if the MUD is suspended for
   more than a single tick-length (e.g. if the scheduler keeps it waiting
   for a long time under heavy load).  Added a 'timeadd' function to add
   two timevals for use with the calculations.

-- Added a timeout to the "What is your name?" prompt; should prevent denial
   of service attacks whereby people use up all available descriptors by
   repeatedly telnetting into the game and staying idle.  (Though I have not
   received reports of this happening, I'm sure someone has thought of it.)

-- Fixed various typos in the code, help files, and libraries.

-- do_advance, act.wizard.c: Does not allow someone to be advanced to the
   level they already are.

-- invalid_name, ban.c: Changed the buffer size from MAX_NAME_LENGTH to
   MAX_INPUT_LENGTH; was causing crashes when very long names were given.

-- Fixed look_in_obj, act.informative.c, to prevent crashes when looking into
   fountains or cups with invalid values.

-- Changed the semantics of top_of_helpt so that it points to the top element,
   not the number of elements, in the help table (done to be consistent with
   the other top_of_xxx variables).  Fixed do_help in act.informative.c to
   prevent crashes if "help zzzzzz" is typed.

-- Reshuffled the position of alias freeing in free_char yet again (I think
   I've finally gotten this one right).

-- handler.c, affect_from_char(): Changed the list traversal over to the
   classic method used when traversing a list and deleting items as we go
   (i.e. keeping around a temp variable with hjp->next).  (This bug was found
   courtesy of Win95's completely unforgiving memory manager.. unlike most
   UNIX memory managers, it causes crashes if you try to use memory that
   was just freed.... Win95 is almost as good as Electric Fence! :-))
   
-- handler.c, extract_char(): Changed "if (ch->desc != NULL)" to
   "if (!freed && ch->desc != NULL)" because ch was potentially freed in the
   previous statement.  (This bug was also found by Win 95...)

-- limits.c, point_update(): gain_condition called first rather than last;
   causes crashes when gain_condition() is called on a character that has just
   bled to death (i.e. killed by point_update()).  (This bug was also found
   by Win 95...)

-- Some similar cases of structures being used after they were freed in
   shop.c fixed (found by Win95...)

-- Fixed the pet shops so pets are no longer priced at 0 coins; pet prices
   are now 300 coins times the level of the pet.

-- spell_parser.c, get_skillname(): If the skill is -1, return UNUSED instead
   of UNDEFINED (makes stat and scroll of identify output look better).

-- Added more sanity checks to spell_parser.c (spell_level() and cast_spell())
   to prevent crashes if scrolls are created with wild spell numbers.

-- spell_parser.c, spello() and unused_spell(): Changed to use a loop
   instead of enumerating all classes; should make adding new classes easier.

-- spells.h: Changed types of mana_{min,max,change} to int to correctly handle
   spells which take large mana requirements.

-- handler.c, generic_find(): Silly bug introduced in pl10 fixed whereby
   you can't look in objects if you are equipped.

-- mail.h: Changed a '1' to a 'sizeof(char)' in the MudMail system (caused
   assertion failures on architectures where sizeof(char) != 1)

-- utils.c, sprinttype(): Cleaned up the code.  Looked silly before.

-- Fixes to autowiz.c: Added an fflush() at the end so that wizlists are
   correctly updated.  Also removed some old bzero() calls that were still
   lurking from the old days (modern SYSV systems don't like bzero() at all.)
   Took out the SO_REUSEPORT socket option.

-- Fixed wld2html.c: The parser code was quite old and could not handle
   the 3.0 world files with ASCII bitvectors.  wld2html now works correctly.

-- Changed "++col" to "col++" in Michael Buselli's pager code (patch sent by
   him).

-- Brought in the new world files and 'messages' file from Furry (scrolls
   of identify and the 'harm' spell now work) and new help files from
   Chris Epler.

-- Took out the very old bug, typo, and idea files from the standard
   distribution.


******** Patchlevel 12 ***************************************************

-- I changed the logic of prompt generation so that prompts are generated
   as plain output, the same as all other output (e.g. using send_to_char()),
   specifically so that both the regular output and the player's new prompt
   can be written to the operating system using a single write() system call.
   In many cases, this cuts in half the number of TCP packets generated
   and received!  This is a big win for slow machines and machines with
   slow Internet links (e.g. a modem)!


To illustrate this point, I'll show typical TCP exchanges between MUD
clients and servers under pl11 vs. pl12.  These exchanges were all
recorded using Van Jacobson's tcpdump tool, which can be downloaded from
ftp.ee.lbl.gov.  The window advertisements have been removed from the
output to make it more readable.
	
Here's a typical packet exchange between a MUD client and server under
pl11 when a player enters a command (in this case, "look"):

16:17:35.287187 client.32877 > mudserver.4000: P 41:47(6) ack 2579
16:17:35.333721 mudserver.4000 > client.32877: . ack 47
16:17:35.334197 mudserver.4000 > client.32877: P 2579:3132(553) ack 47
16:17:35.376089 client.32877 > mudserver.4000: . ack 3132 win 8760 (DF)
16:17:35.376162 mudserver.4000 > client.32877: P 3132:3134(2) ack 47
16:17:35.426039 client.32877 > mudserver.4000: . ack 3134

The first packet is the 6-byte command, "look\r\n", sent from client to
server.  The second packet is the server's TCP acknowledgement (ACK) of
those 6 bytes.  The third packet is the 553-byte output of the command
"look" sent from server to client.  The fourth packet is the client's TCP
ACK of those 553 bytes.  The fifth and sixth packets are the 2-byte prompt
sent from server to client followed by the client's TCP ACK.

Note that the second and third packets are often compressed into a single
packet, if the MUD happens to service that player before the server TCP
stack's delayed ACK timer expires.

This is a much bigger waste of resources than you might expect; keep in
mind that each of these packets usually carry at least 40 bytes worth of
overhead, and IP packet processing is typically takes a lot of CPU time.
	
Here's the same exchange under pl12:
	
16:20:15.445465 client.32878 > mudserver.4000: P 29:35(6) ack 2016
16:20:15.492610 mudserver.4000 > client.32878: . ack 35
16:20:15.504223 mudserver.4000 > client.32878: P 2016:2571(555) ack 35
16:20:15.549806 client.32878 > mudserver.4000: . ack 2571

The same exchange now requires only 4 packets instead of 6.  (Or, if we
service the client before the delayed ACK timer expires, we could do it in
3 packets.)  Note that the third packet is now both the 553-byte output of
"look" *and* the 2-byte prompt.  This causes only a single TCP ACK from
the client, instead of two ACKs as in the previous example.

Here's a typical round of combat under pl11:

16:19:02.673794 mudserver.4000 > client.32875: P 4976:5067(91) ack 120
16:19:02.717357 client.32875 > mudserver.4000: . ack 5067
16:19:02.717409 mudserver.4000 > client.32875: P 5067:5069(2) ack 120
16:19:02.767418 client.32875 > mudserver.4000: . ack 5069

The first packet is the combat message (e.g., "The beastly fido hits you
very hard.")  The second packet is the client's TCP ACK of those bytes.
The third and fourth packets are the 2-byte prompt and its ACK.
	
Under pl12:

16:21:33.572363 mudserver.4000 > client.32876: P 8418:8505(87) ack 131
16:21:33.620336 client.32876 > mudserver.4000: . ack 8505

Each round of combat is reported using only a single TCP packet, which in
turn elicits only a single ACK from the client.  The exchange requires
only 2 packets instead of 4.  If you have a large MUD, where many players
might simultaneously be in combat, the savings can be very significant.
MUDs with slow links or slow CPUs will probably benefit the most from this
change.


-- comm.c, and structs.h, various functions: replaced the "prompt_mode"
   variable with the less obfuscated "has_prompt", which has the opposite
   meaning.

-- mobact.c:mobile_activity() - What a terrible bug!!  Mob spec-procs
   were never called if the mob was fighting or asleep.  The mayor would
   never wake up, but more importantly, mobs with special specprocs for
   fighting (e.g. mobs that use magic during battle) were never getting
   called.  The check for FIGHTING and !AWAKE has been moved to after
   the specproc calls but before the mob default actions.
   Found by realm@styx.ph.msstate.edu.

-- act.offensive.c:do_flee() - Added check to make sure you're at least in
   POS_FIGHTING (not injured) to flee; necessary because wimpy calls
   do_flee() directly and doesn't go through the interpreter.

-- spells.c:spell_summon() - Changed so that a MOB_NOSUMMON flag prevents
   mobs from being summoned instead of MON_NOCHARM.  Found by Daniel
   Burke.

-- magic.c:mag_affects() - Changed the protection against re-affecting
   affected mobs to check all possible spell affects instead of only the
   first two (an oversight from when mag_affects was changed from 2
   affects to an arbitrary number).  Found by Daniel Burke.

-- shop.c, shop.h: Moved 3 arrays from shop.h to shop.c so that shop.h can be
   multiply included if necessary.  Suggested by Anil Mahajan.

-- act.wizard.c:do_advance(): Changed to show the diminishment message to
   the victim instead of the imp.  Found by glennmc@ccsi.com.

-- act.wizard.c:do_stat_character(): Added error checking to aff->type
   array indexing to prevent crashes.  Suggested by Anil Mahajan.

-- act.offensive.c:check_killer(): Using 'murder' automatically sets your
   KILLER flag (if pk is not allowed), even if you miss the first hit.
   Suggested by Alex Fletcher <furry@circlemud.org>.

-- magic.c:mag_points(): Added update_pos to the end to correctly upgrade
   (or downgrade) the position of your victim after healing.  Found by
   Johan Dustler.

-- act.wizard.c:do_set(): Broke this monster into two functions, which
   makes it easier to read and plugs the 'set file' memory leak.

-- spells.c:create_water(): Only remove the name from the drink container
   if it wasn't previously empty.  Prevents permanent keywords from being
   removed.  Found by Eric Green.

-- fight.c:group_gain(): Made the max possible exp gain when killing
   a player equal to 2/3 the max_exp_loss.  This prevents illegal exp
   creation on pk muds.  Found by Apua Cesar de Miranda Paquola
   <apua@dcc.unicamp.br> and Dirani (spharion@dcc.unicamp.br).

-- fight.c:damage(): Cleaned up code, fixed similar bug to prevent
   exp gain by bleeding to death.

   CHANGED:  You no longer gain xp when you're damaging yourself.

-- shop.h; shop.c:trade_with(): Clarified the error message given to
   people attempting to sell a worthless item to a shop.  Submitted by
   Chris Epler <cepler@circlemud.org>.

-- act.wizard.c, do_dc(): If you try to disconnect a God you can't see,
   you are given "No such connection" to hide the presence of the God.
   Suggested by Fred Herbert <herb8590@swampfox.fmarion.edu>.

-- act.wizard.c, do_gecho(): Added delete_doubledollar() to prevent
   $$'s on gechos.  Suggested by Jestyr Saaven <jestyr7@the-hermes.net>.

-- act.wizard.c, do_show(): Changed 'show godrooms' to traverse the world
   print rooms marked GODROOM instead of printing rooms in a particular zone
   number.  Suggested by Jestyr Saaven <jestyr7@the-hermes.net>.

-- act.wizard.c, do_stat_room(): Changed to display the zone's vnum, not
   rnum.  Found by Jay Vanderwood <infoteq@dragon.azstarnet.com>

-- Tried to use the typedefs mob_rnum, mob_vnum, room_rnum, room_vnum,
   obj_rnum and obj_vnum consistently throughout the code.  Don't know
   if I found them all, but here's hoping...

-- fight.c:damage() - Added die() after an "attempt to damage a corpse",
   so if someone does manage to get into the POS_DEAD state, they'll
   die for real.  Suggested by root <root@cthulhu.dorm.umd.edu>.

-- ban.c:Read_Invalid_List() - Changed so that names are read with one
   pass through the file instead of two.

-- act.item.c:perform_drop_gold() - Changed hide_invis from FALSE to TRUE
   on act() so room observers cannot see invis people dropping gold; changed
   to be consistent with item dropping which already works this way.
   Suggested by Chris Epler <cepler@circlemud.org>

-- fight.c:damage() - Changed handling of AFF_SANCTUARY so that damage
   is only cut in half if it is 2 or more (i.e. to prevent 1 from turning
   into 0).  Indirectly suggested by dodger@WPI.EDU (DoDGeR) who reported:
   "If you bash a sanct'ed mob, you always see the failure message because
    the sanct turns the damage from 1 to 0 and that tells skill_message to
    print the miss message."

-- autorun.pl: Made part of the standard distribution (Perl version of
   autorun), by D. Hall of Vi'Rage Studios

-- Updated FAQ and PORTING documents

-- Made many changes to configure.in and regenerated 'configure' script
   with most recent version of autoconf (2.12).  configure now checks
   which libc functions and system calls are correctly prototyped, and
   only prototypes those functions that aren't.  Also, it doesn't include
   the malloc, nsl, socket, and crypt libraries unless those functions
   are missing from libc.  This solves problems that autoconf was having
   with IRIX, where it would use lsocket and lnsl, unnecessarily generating
   linker warnings when those libraries would shadow libc functions.  On
   the other hand, this will cause a problem on OS's where a dummy
   crypt() is shadowed by a real crypt in libcrypt.  Future releases may
   check crypt() to see if it actually works.

-- constants.c: changed experience and title tables to be functions
   returning values instead of arrays, to avoid crashes when newbie imps
   try to add levels by changing the LVL_xx constants without extending
   the arrays appropriately.  SYSERR message is generated to indicate
   incorrectly set up xp tables.

-- comm.c, various functions - Made some changes to make porting to other
   platforms easier; introduced the CIRCLE_UNIX constant.

-- db.c, various functions: tried to make the parser a bit better at
   reporting error messages (and not crashing.. ugh.)

-- Various files: replaced ">> 2" with "/ 4".  I can be a real idiot
   sometimes.

-- Added preliminary Amiga support with the help of Jack Patton and
   Steffen Haeuser.

-- act.wizard.c:do_dc() and structs.h:descriptor_data -- Added a
   "close_me" flag to descriptor_data that dc uses to indicate a descriptor
   should be killed off; just having dc() call close_socket() crashes if
   you're disconnecting the person below you in the descriptor list.
	
-- The script I use to pack up Circle into a tar and zip file was changed
   to add token files to all empty directories to work around buggy unzip
   programs that don't bother creating empty directories.

-- act.other.c:do_display(): Now complains about unknown arguments.

-- act.wizard.c:do_shutdown(); db.h: Added the constants FASTBOOT_FILE,
   KILLSCRIPT_FILE, and PAUSE_FILE to the header file, and used them
   instead of the literals in the code.

-- olc.c:do_olc(): Fixed the warning given by gcc.  Just FYI, (for whoever
   "Y"ou are), I left that warning in on purpose, sort of as a subtle
   reminder that OLC is not done.  However I finally decided to change it
   after the 10,000th "bug report".

-- Gave the utilities their own Makefile (Makefile.in, actually; Makefile
   is generated by configure)

******** Patchlevel 13 ***************************************************

11/4/97

-- gg - magic.c: mag_summons(): Fixed animate dead and clone.
	spell_parser.c:mag_assign_spells(): Added animate dead.
	utils.h:IS_CORPSE(): Defined.

-- gg - spec_assign.c:ASSIGNMOB(): Changed the redundant real_mobile() call.

-- gg - mail.c:write_to_file(): Fixed problem where mail file would be left
	open if the filepos was not a multiple of BLOCK_SIZE.

-- gg - castle.c:assign_kings_castle(): Fixed a memory problem where we
	would be writing to mob_index[-1].func if a mobile did not exist.
	This is most noticeable in mini-mud mode.

-- gg - utils.h:CAN_SEE_OBJ(): Fixed loophole where lower immortals can
	'stat' items of invisible immortals and see their name if they are
	online.  This also follows the line of thinking that if you can't
	see the person, you can't see the objects they have either.  Also
	fixes doing a 'where' on objects to see if a 'someone' shows up
	to detect higher level invisible immortals.  Reported on the
	CircleMUD mailing list.

-- gg - interpreter.c:one_argument(): Can now handle a NULL pointer.

-- gg - handler.c:obj_to_char()/obj_from_char(): Do not set the PLR_CRASH
	flag on mobiles or they are flagged MOB_STAYZONE when given objects.
	Reported on the CircleMUD mailing list.

-- gg - mudpasswd.c/showplay.c/purgeplay.c: Abort if the pfile is a different
	size than we expect, as per the main mud code.

-- gg - act.comm.c:is_tell_ok(): Added.
	act.comm.c:ACMD(do_reply)/ACMD(do_tell): Modified to use is_tell_ok()
	to prevent replies while writing or to PRF_NOTELL people.

-- gg - graph.c:ACMD(do_track): Don't bother to find_first_step() if the
	player failed their track skill anyway.  This avoids removing the
	ROOM_BFS mark from every room and searching for the victim even if
	they will not be successful later.

-- gg - utils.c:get_line(): Set the buffer to NULL if there wasn't anything
	read in.  Fixes a problem reported by Andrew Helm <ashe@iglou.com>.

-- gg - mail.c: Changed 'return 0;' to 'return NULL;' where appropriate.
	mail.c: Changed 'no_mail = 1;' to 'no_mail = TRUE;'.

-- gg - act.movement.c:ACMD(do_move): Allow changing the position of the
	movement commands. Only do this if you do not use the guildguard
	special procedure or anything else with IS_MOVE() because they
	will break, badly.

-- gg - interpreter.h:IS_MOVE: Had hard coded directions, fixed.
	This is still broken with regard to moving the directions around.

-- gg - everything: Replace IS_SET macro with appropriate xxx_FLAGGED ones.
	Also introduced OBJVAL/OBJWEAR/EXIT _FLAGGED macros.

-- gg - utils.c:log()/mudlog(): Removed day of week as it is unnecessary.

-- gg - spec_procs.c/limits.c: Changed to use IS_CORPSE().

-- gg - act.item.c:perform_remove(): Can no longer remove cursed equipment.

-- gg - comm.c:main(): Initialize dummy_mob to all 0's just in case...

11/5/97

-- gg - everything: Now has a customizable logging file for people using
	Windows 95.  The default is still to standard error, see config.c
	to change it to a file.

-- gg - config.c/limits.c: New variables, idle_time_rent, idle_max_level,
	and idle_void for customizable timeout renting. Suggested by
	Rasdan <rasdan@PEAK.ORG>.

-- gg - everything: Seek and destroy mission for << and >> where it should
	logically be * and / (ie: Not doing bitvector work).

-- gg - handler.c:affect_modify(): A suggestion for class and level added.

-- gg - everything: Made language C++ friendly.  Also adjusted 'const'
	keywords in constants.c for correct linking.

-- gg - interpreter.c: Removed old 'extern ... titles[]'.

-- gg - class.c/magic.c:saving_throws[][][]: Moved to class.c.

11/14/97

-- gg - Changed all \n\r to \r\n to abide by the telnet specification.
	(Original patch by John Evans.)

11/16/97

-- gg - comm.c: touch() and remove() KILLSCRIPT_FILE to prevent the
	problem with many CircleMUD instances trying to run over and
	over and over and over...

11/18/96

-- gg - Merged in preliminary Macintosh support by Dean Takemori
	(dean@uhheph.phys.hawaii.edu)

-- gg - comm.c: A large number of the system dependent includes are
	already accessible via HAVE_blah_blah defines in sysdep.h so
	I have commented them out for possible removal later to make
	things look much less complicated.  If things break due to
	this, fix the conf.h file for that OS.

-- gg - comm.c: set_sndbuf(): Fixed undefined reference problem by
	moving the #if...#endif inside the function which will
	reduce to 'return 0;' if we don't need the function.

-- gg - comm.c: process_output()/write_to_descriptor(): These
	functions are really ugly.  Is there a EAGAIN in Macintosh?
	If not, we could #define EAGAIN to EDEADLK for Macintosh and
	use the existing Unix code...

-- gg - Forgot to include the ! history patch but I updated the
	TODO list a few days ago anyway...duh.

-- gg - class.c: Saving throws are now a function just like experience.

-- gg - class.c: Thaco chart is now a function also.

11/19/97

-- gg - interpreter.h: IS_MOVE(): Fixed, moving directions should now
	theoretically be safe although not tested in practice.

11/21/97

-- gg - Changed all those d->connected to STATE(d).  Also removed the value
	dependent hack of !d->connected in favor of STATE(d) == CON_PLAYING.

12/18/97

-- gg - Changed mudlog() to simply use log() when writing to the log file.

-- gg - Makefile: Removed /home/jelson/cxref/ from cxref path.  Might I
	recommend 'make cxref' simply create the listing and then a separate
	'make cxref-install' for updating the Documentation Project page?
	This would be of more use to other people. :)

-- gg - Replaced d->close_me hack with CON_DISCONNECT.

12/27/97

-- gg - Merged in Borland compiler changes.
	spells.c: Removed non-existent cha_app_type extern.

-- gg - sysdep.h: New #define SLASH for directory separator.  Will cause
	awful looking paths ("lib"SLASH"etc"SLASH"players") but needed for
	Macintoshes which use a : instead.

-- gg - Fixed 'return; break;' pairs pointed out by kingmundi@hotmail.com

-- gg - class.c:find_class_bitvector: Fixed a bug where the number constants
	for magic user, warrior, cleric, and thief could be rearranged causing
	the who/users class listing to be wrong.

12/29/97

-- gg - db.c:clear_object: worn_on initialized to -1 by suggestion of
	Daniel W. Burke <dwb@IX.NETCOM.COM>.

12/30/97

-- gg - constants.c and elsewhere: Formerly constant structures changed in
	C++ modifications are now back to constant with a 'cpp_extern'
	keyword which is 'extern' in C++ and '' in C. (It gives warnings.)

-- gg - objsave.c: Fixed two implicit void * conversions to gen_receptionist.

-- gg - comm.c: new_descriptor: 'i' changed to 'unsigned int' because of
	signed warnings.

-- gg - act.item.c: do_wear: Initialized 'where' to -1 to avoid spurious
	warnings from g++.

-- gg - mail.c: postmaster: Casted 'me' variable to avoid implicit
	conversion from a void * which g++ gripes about.

12/31/97

-- gg - utils.c: core_dump_unix: Function to dump a core file on UNIX platforms
	but continue to run the MUD.  Basic idea from Erwin S. Andreasen.

1/4/98

-- gg - utils.h: GET_ROOM_VNUM: New macro to retrieve the vnum of a player
	without worrying about accessing world[-1].number or messy ?: code.
	We should do this for the rest of the room_data variables.

-- gg - Added variable argument log() function and fixed up quite a few
	log statements to take advantage of the new flexibility.

-- gg - db.c mostly: Since we have a variable argument log() function now, all
	those fprintf's can go away.

-- gg - structs.h: Added new #define for CircleMUD version to make it easier
	for add-on packages to be used with a variety of CircleMUD patchlevels.

-- gg - Added lots of 'extern int top_of_world;' around to compensate for
	GET_ROOM_VNUM macro doing bounds checking.

-- gg - utils.c: number: Added message if someone uses it wrong.

-- gg - comm.c: process_input: Fixed a minor annoyance in that using '! x'
	didn't make that your new default '!' command.

-- gg - Fixed some 'exit(0);' statements which should be 'exit(1);'

1/5/98

-- gg - utils.c: Forgot to __attribute__ basic_mud_log() for type-checking.

-- gg - sysdep.h: #ifdef for __GNUC__ to eliminate __attribute__ for those
	not using gcc.

-- gg - sysdep.h: Oops, forgot to put an argument for __attribute__...

1/13/98

-- gg - structs.h: I misspelled CIRCLEMUD_VERSION...duh.

-- gg - db.c/utils.h: Removed dummy_mob, saving 324 bytes (at least on i586).
	NOTE: This will cause all sorts of evil things to happen because the
	existing code assumes ch->player_specials exists.  It is the most
	effective method of getting rid of the mob hack though.

-- gg - utils.h: Could have sworn I already changed IS_AFFECTED->AFF_FLAGGED...

-- gg - limits.c: Inconsistent mob regeneration changed to take poison into
	account for all cases (h/m/v).

-- gg - limits.c/act.item.c: Mobs can no longer use GET_COND() so drink,
        eat, and regeneration now avoid them.  This is actually better.

-- gg - utils.h: CAN_SEE macro fixed to not use GET_INVIS_LEVEL on mobs.

1/14/98

-- gg - Fixed a bunch of warnings GCC 2.8.0 now emits with -Wall.  Those
	include ambiguous 'else' statements (ones that should have { or }
	to distinguish) and when main() doesn't return 'int.'

1/16/98

-- gg - interpreter.c/ban.c: nanny()/Valid_Name(): Fixed the long-standing
	Diku bug where you could create two characters with the same name by
	proceeding one step at a time in two different sessions.

1/20/98

-- gg - Changed 'restrict' to 'circle_restrict' to fix some problem with
	it being a reserved word for people. (No problems here...)

-- gg - testing/: Created for projects of interest to future stock CircleMUDs
	which will eventually be included and may be of interest to others.
	Current project will be semaphore locking...

1/25/98 - Denver beat Green Bay, 13-year football conference reign is over.

-- gg - act.wizard.c: do_stat: Chris Jacobson <fear@ATHENET.NET> decided that
	the / and % in '/ 3600) % 60' were reversed.

-- gg - spells.c: spell_locate_object(): Added a note that the keyword
	handling is broken.  Unfortunately the only way to fix it would
	be to enable the passing of strings around the spell parser.
	Spotted by: BOGWALDL@MALA.BC.CA.

-- gg - Might as well document this so we can call this a feature.  If you
	are using a FreeBSD machine and you are using MD5 passwords then
	any character with a name longer than 5 letters can log in with any
	password.  The solution is to either turn off MD5 passwords or
	increase MAX_PWD_LENGTH to 20 (and wipe your pfile in the process).

-- gg - act.wizard.c: do_stat(): Last logon not correctly displayed.
	Noticed by Angus Mezick <angus@EDGIL.CCMAIL.COMPUSERVE.COM>

-- gg - spec_procs.c: magic_user(): Andrey Fidrya <andrey@ALEX-UA.COM>
	noticed that the special procedure may target people not in the
	same room.

1/26/98

-- gg - structs.h: Changed CIRCLEMUD_VERSION to hex to let us (possibly)
	do bitvector work on it later.

-- gg - handler.c: unequip_char(): Log message should be 'NOWHERE when
	UNequipping char', previously missing the 'UN'.  Reported by
	Akuma/Chris Baggett/DOOMer <doomer@BAYOU.COM>.

1/28/98

-- gg - db.c: clear_char(): ch->nr was not being initialized but many checks
	are based on mobs being 'nr > -1'.  This check included PC
	characters where the 'nr' was left 0.

-- gg - comm.c: main()/sanity_check()/heartbeat(): Added function to check
	every 30 seconds that a magic number planted during main() is still
	at the end of the buffers buf, buf1, buf2, arg.  Also has an
	optional statistics toggle in the function.

-- gg - utils.h: Should make the time related #define's configurable, at
	the current time, changing those constants doesn't change the
	functions that read them. (act.informative.c and utils.c)

1/30/98

-- gg - structs.h: Fixed 'internel' typo.

2/8/98

-- gg - comm.c:1068: warning: passing `unsigned int *' as argument 3 of
	`accept(int, sockaddr *, int *)' changes signedness.  This is
	annoying, Linux has it unsigned, Solaris has it signed.

-- gg - db.h: Decided the 'SLASH' idea was ugly.  Now we have LIB_MISC
	("misc/"), LIB_ETC ("etc/"), and family.  Note that I have only
	tested this on Unix...Macintosh should work but Amiga I need
	some help with.

-- gg - utils.c: get_filename(): Removed redundant 'break;'
	Needs 'db.h' now.

2/19/98

-- gg - db.c: index_boot(): Fixed a bug with not closing a file.

2/20/98

-- gg - mobact.c: remember(): Took John Evans' suggestion to change
	the level check into a PRF_NOHASSLE check.  It would be good
	to identify other places this should be changed.

-- gg - act.wizard.c/act.informative.c/spells.c/house.c/objsave.c/spec_procs.c
	Fixed hopefully all of the 'sprintf(buf, "%s...", buf, ...);'
	constructs that the Borland C++ compiler does not like.

-- gg - act.comm.c: perform_tell(): We cannot get the id number of a mob
	any longer so don't save it for the last tell pointer.

-- gg - comm.c: game_loop(): d->wait no longer keeps going negative forever.

2/24/98

-- gg - Fixed a bug whereby prompts and aliases crashed while switched.

-- gg - comm.c: main(): Print the version in the boot logs.

-- gg - utils.h: PLR_FLAGS() and MOB_FLAGS() changed to check for the correct
	user. (ie: PC using PLR_FLAGS and NPC's using MOB_FLAGS).
	db.c: Changed to use REAL_MOB_FLAGS() because we'll get spurious
	warnings before the IS_NPC bit is actually loaded.

-- gg - act.comm.c: do_reply(): Mobs cannot use GET_IDNUM().

2/25/98

-- gg - act.other.c: do_wimpy(): Mobs cannot use 'wimp_level' variable.

-- gg - db.c: 'dummy_mob' reinstated, now with a compile time toggle.

-- gg - utils.h: Removed IS_NPC checks from xxx_FLAGGED as they are done
	by xxx_FLAGS now.

2/27/98

-- gg - utils.h: We now check for (and gripe about) player specials.
	db.c: dummy_mob now mandatory again, no crashes, and they get fixed.
	db.c: Fixed SET_SKILL ;
	screen.h: Mobs do not use color.
	utils.h: CAN_SEE: Was using PRF_FLAGGED on mobiles.

-- gg - spell_parser.c: Cris Jacobin <jacobin@bellatlantic.net> pointed out
	I forgot to add TAR_OBJ_EQUIP to 'remove curse'.

-- gg - act.comm.c: do_say(): Mobs don't use PRF_FLAGGED.

-- gg - act.wizard.c: do_purge(): Should use CON_CLOSE since there will not
	be a player in the game at the time.

-- gg - Makefile.in: utils.c should depend on db.h (LIB_TEXT, LIB_WORLD, etc
	in get_filename)

-- gg - db.h: LIB_OBJS changed to SUF_OBJS for 'suffix' since that is what it
	is used as.  Also created SUF_TEXT for E-Text system.

2/28/98

-- gg - act.wizard.c: do_purge(): Need to NULL the character also.

3/1/98

-- gg - limits.c: check_idling(): When we do an extract_char(), we have to
	NULL out the descriptor's character pointer to prevent lossage later
	in close_socket().  We could NULL in free_char() though...

-- gg - objsave.c: Crash_listrent(): Rob Baumstark <shirak@CONNECT.AB.CA>
	reported that large rent files can crash the MUD with a buffer
	overflow.

-- gg - objsave.c: Crash_load(): Now counts objects in file for logging.

-- gg - act.other.c: do_save(): Explicit 'save' commands by PC's are
	disabled if 'auto_save' is set to YES.  This prevents item duplication
	via coordinated saves and system crashes.

3/2/98

-- gg - act.informative.c: look_at_room(): Removed (long) cast.

-- gg - utils.h: GET_ROOM_VNUM(): Changed to use real number instead of
	character pointer and used throughout the code.  Facilitated many
	ch->in_room => IN_ROOM(ch) changes.

-- gg - act.movement.c: Needs 'top_of_world' extern now.

3/3/98

-- gg - utils.c/elsewhere: core_dump(): Extended to be used instead of
	assert().  Now we'll get core dumps and continue running on Unix
	or log a message and (optionally) continue running elsewhere also.
	Many 'assert()' statements changed to if...core_dump() tests.

3/4/98

-- gg - comm.c: make_prompt()/process_output(): Mobs were using PRF_FLAGGED.
	act.informative.c: look_at_room()/do_score(): Ditto.

-- gg - graph.c: do_track(): Mobs cannot use 'track' command.  If you want
	them to track things, use 'hunt_victim()'.

-- gg - modify.c: string_add(): Tilde killing made compile time option
	since I just realized nothing in stock CircleMUD cares. :)
	Feel free to substitute your own method. (such as hide/show_tilde())

-- gg - mail.c: General hacking and lots of new comments.

-- gg - shop.c: boot_the_shops(): Remove (byte) cast as it was reported to
	cause problems/crashes.

-- gg - act.comm.c: is_tell_ok(): Was using PRF_FLAGGED on mobs.
	perform_tell(): Ditto.

3/14/98

-- gg - act.offensive.c: do_rescue(): Added a \r\n to the 'only true warriors'
	message as pointed out by Daniel Koepke <dkoepke@california.com>

3/16/98

-- gg - act.comm.c: perform_tell(): Also don't update ID number when a mob tells
	you something.

-- gg - db.c: Thought I already added that fclose(index); ....

3/20/98

-- gg - limits.c: check_idling(): Doh, ch->desc->character = NULL was in
	the wrong spot. :)

-- gg - Used IS_[class] macros throughout.  Nitpicked by Edward Glamkowski.

-- gg - act.movement.c/graph.c: Check for fighting before and in perform_move().
	Suggested by Angus Mezick.

-- gg - Removed 'extern' statements for non-existent variables.  Pointed out
	by Chris Powell.

-- gg - act.informative.c: do_toggle(): Added a \r\n to end of string as
	suggested by Joachim Pileborg.

-- gg - modify.c: show_string(): Use any_one_arg() instead of one_argument
	since we're looking for one letter and don't want to ignore fill
	words if they happen to type it. Suggested by Andrey Fidrya.

-- gg - objsave.c: Two places didn't check for bank gold but everywhere else
	does.  Pointed out by Andrey Fidrya.

-- gg - act.movement.c: do_simple_move(): Mike Schlagenhauf pointed out
	that gods and mortals can walk into godrooms. (>= GRGOD rooms)

3/30/98

-- gg - shop.c: ok_damage_shopkeeper(): Julian Fong reported that we could
	potentially reference [-1] if we have a non-prototyped mobile.

-- gg - Removed redundant declarations from everything.

-- gg - Removed all the nested 'extern' declarations.

4/5/98

-- gg - structs.h/utils.h: CIRCLEMUD_VERSION changed to really be hex
	and now has a helper macro VERSION().

5/13/98

-- gg - utils.h: Chris Powell correctly pointed out over a month ago
	that CAN_SEE_OBJ_CARRIER should use 'sub' and not 'ch'.

5/27/98

-- gg - act.wizard.c: do_set(): Added 'age' to "set."

******** Patchlevel 13a ***************************************************

6/4/98

-- gg - shop.c: Extraneous log() statement was missed during sprintf()+log()
	conversions.

-- gg - comm.c: reap(): Added to take care of fork() with core_dump_unix().

-- gg - utils.h: CHECK_PLAYER_SPECIAL(): Allow it to be toggled off.

******** Patchlevel 14 ***************************************************

6/5/98

-- gg - graph.c: do_track(): Might get into infinite loop if in room with
	no exits and skill check failed.  Fixed to try 10 times.

-- gg - comm.c: Handle the delete key in addition to backspace.  Mailed in
	by David A. Goldstein.

-- gg - comm.c: In function `act':
	comm.c:1892: warning: declaration of `sleep' shadows global declaration

6/6/98

-- gg - spec_procs.c, act.comm.c, just about everything:
	Evaluated 'static' variables and added some 'const.'

6/13/98 (Saturday)

-- gg - Added Acorn RiscOS support from Gareth Duncan
	(garethduncan@argonet.co.uk).

-- gg - utils.c: mudlog(): Matched prototype and function.  The change was
	due to compiler warnings.

-- gg - sysdep.h: Removed SLASH from here as it's in db.h already.

-- gg - Makefile.in: Added a LIBS variable for command-line override.

-- gg - Added prototypes for every function.

-- gg - castle.c: Worked around three warnings when using g++.

-- gg - db.c: store_to_char(): "When you 'reply' after entering the game
	before anyone tells to you, the reply results in telling to a mob."
	Found by Eric Green and Stefan Wasilewski.

-- gg - class.c: init_spell_levels(): 'Poison' spell wasn't assigned.
	Found by Chris Epler <cepler@ucsee.eecs.berkeley.edu>

-- gg - act.item.c: perform_give_gold(): Fixed the pluralization.
	Found by Alex <3raf7@qlink.queensu.ca>

-- gg - Eric Green <ejg3@cornell.edu> suggested some buffers needed to
	be larger to handle the possible inputs.

-- gg - ban.c/house.c: Cleaned up non-existent file messages.

6/15/98

-- gg - act.informative.c: perform_immortal_where(): Patched to prevent
	players from doing a 'where' to see the title of a dark room.

6/16/98

-- gg - act.offensive.c: do_bash(): Eric Green (ejg3@cornell.edu) pointed
	out that we could bash someone not in the room and that a failed
	bash still makes the person sit.

-- gg - structs.h: Added a notice for FreeBSD users with MD5 passwords.
	Jeremy's autoconf test for the bug will be better, of course.

-- gg - constants.c: color_liquid[]: Added a \n for sprinttype.

-- gg - act.other.c: do_save(): Cleaned up comments and now gives message
	if auto_save is enabled.

-- gg - handler.c: char_to_room(): Fixed a long standing bug that people
	are still considered fighting until the next violence pulse when
	they leave the room.  Most visible when trying to goto and walk.

-- gg - fight.c: damage(): Clay Hardin (clay@accessus.net) reported that
	some people can autoflee with negative hit points. Fixed.

-- gg - act.wizard.c: do_set(): Fixed to not attempt char_from_room()
	on player in NOWHERE on advice of Eric Green.

-- gg - comm.c: close_socket(): Fix a memory leak if a person writing a
	note is disconnected, also by Eric Green.

-- gg - mail.c: read_delete(): Fixed to not cause a crash on dumb sprintf()'s
	that crash on a NULL pointer. From: Krautz Thomas
	<krautzt@leyla.rzpool.tu-cottbus.de>

-- gg - magic.c: mag_unaffects(): Don't output 'no effect' message when
	casting heal due to blindness unaffect.
	spell_parser.c: mag_assign_spells(): Heal isn't an affect spell.

-- gg - comm.c: Borland and Microsoft use different headers. (Joy!)

-- gg - class.c: Added support for 'siteok_everyone' flag.
	config.c: Added 'siteok_everyone' flag, see config.c for explanation.

-- gg - act.wizard.c: do_stat_object(): Comment on basis of invisibility.
	interpreter.c: perform_dupe_check(): Comment on things to do.
	utils.h: CAN_SEE_OBJ_CARRIER():	Close up final loophole.

-- gg - spec_procs.c: Remove unused 'struct social_type'

-- gg - interpreter.c: nanny(): Fixed final loophole in player duplication.

-- gg - act.offensive.c: do_flee(): Here's a great bug, no one _ever_ lost
	experience for fleeing because they stopped fighting before the
	check to see if they were fighting...

-- gg - act.offensive.c: Remove restriction of CLASS_WARRIOR from skills.
	Now depends only on if they have the skill or not.

-- gg - act.offensive.c: do_assist(): Hit the enemy the person you're
	helping is, not the first person in the list.

-- gg - act.movement.c: find_door(): Fixed a hard-coded "close" in message.

-- gg - act.offensive.c: do_bash(): Fixed the 'bash-in-peaceful-room' bug.
	act.other.c: do_steal(): Similiar bug here.

-- gg - act.item.c: find_eq_pos(): \n added to prevent explicit wearing
	on reserved spots.

-- gg - Enabled the 'teleport' spell.

-- gg - spell_parser.c: mag_assign_spells(): 'clone' is self-only.
	The flags were previously contradictory.

-- gg - utils.h: GET_MOB_SPEC(): Fixed the () order.

-- gg - Removed unreachable code in various files.

6/18/98

-- gg - Check out the bug archive. http://bugs.circlemud.org

-- gg - Fixed up all of the 'aggregate return' warnings.

-- gg - modify.c: show_string(): Anil Mahajan <amahajan@proxicom.com>
	spotted a potential (but unlikely) buffer overflow.

6/20/98

-- gg - boards.c: Cleaned up malloc() calls into CREATE().  Created a
	sort ordering define, defaulting to the historic order. Fixed
	bug #19 from Julian Fong.
	utils.c: core_dump(): Assorted cleanups, combining core_dump_unix()
	and core_dump_other() into one function.
	sysdep.h: Updated systems for core_dump_() cleanup.
	utils.h: Updated core_dump() prototypes.

6/21/98

-- gg - boards.c: Fixed <UNDEF> printing. Created House_list_guests() since
	code was duplicated in two places.

-- gg - act.offensive.c: do_kick(): Same check to make sure the person is
	still in the room as do_bash now has.

-- gg - Fixed even more sprintf(buf, "%s ...", buf, ...) constructs.

-- gg - damage() changed to return an integer so we know if the target was
	hit, if they died, or how hard they were actually hit.

-- gg - boards.c: Board_display_msg(): Fixed 'read 2.mail' bug when in
	front of a board.

-- gg - boards.c: Revamped code to pass around the board's obj_data pointer.
	Now allows boards to be referred to as other things.  Suggested by
	Andrew Hynek <rift@flex.net>  Also made 'truncate to 80' comment
	fit the code. (0-79 = 80, so 80 should be NUL, not 81.)

-- gg - db.c: boot_db(): House loading moved to before zone reset so the
	object limits work correctly.

-- gg - act.wizard.c: do_show() extended to use page_string().

-- gg - cnf/configure.in: Added 'less' and 'most' to pager search.
	A brief 'autoconf tutorial' pointer would be appreciated.

-- gg - db.c: Fixed the '2 aliases per help record' bug.  See the file
	for credit information.  Also added an 'informative' log about
	the number and size of data structures created sans strings. I
	do note that the numbers don't agree with the 'show stats.'
	Perhaps a deeper investigation is in order...

-- gg - config.c/act.wizard.c: New variable 'load_into_inventory'.
	You should be able to guess what it does.

=======
6/29/98
	
-- JE - README.*, doc/README.*: Documentation updated.  README file
 	was cleaned up; compilation instructions for all platforms were
 	moved into a README.XXX file in the doc directory.  The old
 	README.WIN, which actually had instructions for MSVC, was renamed
 	README.MSVC.  README.GNU-WIN32 was added from David Goldstein.
  	README.WIN now simply directs people to look into one of those
 	files.  README.MAC is still missing.

-- JE - ChangeLog: Fixed a small error in an earlier ChangeLog
	entry that described pl12 improvements in networking code.

-- JE - src/[mM]akefile.bcc - Changed name from makefile.bcc to
	Makefile.bcc to match the other Makefiles.

-- JE - cnf/configure.in - Changed to add -Wno-char-subscripts to the
	gcc command-line if we're using gcc and gcc recognizes the option.
	The newer GCCs complain about the standard library's islower(),
	isupper(), etc., on some machines, such as Solaris.

-- JE - src/comm.c, cnf/configure.in, src/sysdep.h - Changed autoconf to
	detect whether we have inet_aton and/or inet_addr; added prototypes
	for those functions in sysdep.h if we have the functions and they're
	not prototyped; and added support in comm.c to bind to a specific
	IP address (instead of all IP addresses) on a multihomed host.

-- JE - src/db.c: Improved parsing of database files and added more
	meaningful error reporting in some places.

-- JE - cnf/configure.in, src/comm.c, src/sysdep.h: Added arpa/inet.h to the
	list of	header files we check for and include.

-- JE - src/comm.c: Removed "#ifdef SO_SNDBUF" where it wasn't needed.

-- JE - cnf/configure.in: Fixed a longstanding bug in the -cckr detection,
	and a similar bug in the recently added -Wno-char-subscripts
	detection; the flags would not be set correctly if configure
	was ever rerun (i.e., if values were read from the cache).

6/30/98

-- JE - cnf/configure.in, configure: We now only use -Wno-char-subscripts
	if we are using gcc, we get warnings without it, and gcc accepts it.
	Bug #73 in bug database.

-- JE - src/comm.c: Fixed a bug in IP address binding - we need to clear
	the sockaddr_in structure with memset() before using it.

-- JE - src/comm.c, src/sysdep.h, cnf/configure.in, configure: Changed
	the code in comm.c to use inet_ntoa() for changing numeric IP
	addresses into ASCII instead of printing it manually using
	shifts and sprintf().  Changed autoconf scripts to detect
	whether or not inet_ntoa() needs to be prototyped.

-- gg - comm.c: write_to_descriptor(): Cleaned up various platform support.
	comm.c: Removed headers commented out in bpl13.
	comm.c: process_input(): General platform cleanup.

-- gg - comm.c: write_to_descriptor(): Jeremy made something up for this
	also which I like better.  I've tweaked my previous process_input()
	changes to fit the same idea, but they were pretty close already.

-- JE - cnf/configure.in - Removed the -cckr check from configure because
	it seems to break compilation on IRIX's cc (bundled) compiler,
	which is what it was put in to fix many years ago.

-- JE - src/comm.c - Broke up write_to_descriptor() into two functions
	so that platform-dependent pieces would be isolated.

7/1/98

-- JE - src/comm.c - Further bug fixes in socket handling code.

-- JE - src/conf.h.*, src/Makefile.win, src/sysdep.h, src/comm.c,
 	doc/README.MSVC -- I updated Win 95/NT compatibility.  The idea
 	now is that *all* Windows-based compilers (MSVC, Borland, and
 	Watcom) should share the same conf.h.win, but they each have their
 	own Makefile.  The CIRCLE_MSVC and CIRCLE_BORLAND constants were
	removed in favor of a single CIRCLE_WINDOWS constant; we use
	Borland's builtin __BORLANDC__ to detect Borland compilation.
	Makefile.win was renamed Makefile.msvc to differentiate it from
	Makefile.bcc.  README.MSVC updated appropriately.

-- JE - src/comm.c: Changed perform_socket_read and perform_socket_write
	to use ssize_t and size_t again, as George originally suggested.

-- JE - doc/README.*: More changes to documentation for Windows users.

7/2/98

-- ae - FAQ: updated the FAQ version distributed with CircleMUD.

-- ae - lib/world/obj/15.obj: Corrected some flags and some edescs.

-- gg - comm.c: main(): Now use fdopen() instead of explicit assignment
	of 'stderr' to 'logfile'.  This should work fine elsewhere because:
	"The fdopen function conforms to IEEE Std1003.1-1988 (``POSIX.1'')."

-- gg - comm.c: getrusage(): Use RUSAGE_SELF instead of 0.  Suggested by
	Christian Loth <sg618lo@unidui.uni-duisburg.de>

3 July 1998

-- JE - src/comm.c, src/sysdep.h: We only prototype the getrlimit()/
	setrlimit() functions if we appear to have those functions
	available.  Fixes half of Bug #79.

-- JE - src/comm.c, src/sysdep.h: Changed logfile opening to use the
	POSIX-defined STDERR_FILENO instead of a magic number (2).
	Changed sysdep.h to use the magic number if the POSIX def'n
	is missing for some reason.

-- JE - Released patchlevel 14.

******** Patchlevel 15 ***************************************************

7/3/98

-- gg - constants.c: Incremented string version number.
	structs.h: Incremented #define version number.

-- gg - Patch for arbitrary bitvector size changes from Christian Loth
	<sg618lo@unidui.uni-duisburg.de> included. (bitvector_t)

-- gg - structs.h: Sector flying and underwater reversed to match constants.c

7/5/98

-- gg - comm.c: new_descriptor(): Yep, 'i' should be signed.

7/29/98

-- gg - Replaced 'return x;' with 'return (x);' to be consistent.
	Patch by Trevor Man <tman@dial.pipex.com>.  Reverse of what
	I had hoped, but ah well. :)

8/6/98

-- gg - act.item.c: search_block triggers on \n, use \r instead.

8/24/98

-- gg - sysdep.h/Makefile.lcc/conf.h.lcc: LCC compiler support added by
	Eric Jones <fpicard@mindless.com>. I'll see if there is a
	__BORLANDC__-like constant we can use to get rid of conf.h.lcc...

-- gg - comm.c: "d. hall" <dhall@OOI.NET> sent a patch to change timeadd()
	and timediff() to not use static variables like we wanted before.

-- gg - util/shopconv.c: Given a dummy basic_mud_log() to take care of
	undefined reference since some macros use it now.

-- gg - act.other.c: do_steal(): Yaroslav Berezovsky aka Morgion//RMUD found
	a bug where the victim had to be able to see an object for the thief
	to steal it...

8/25/98

-- gg - AutoEQ from Burkhard Knopf <burkhard.knopf@informatik.tu-clausthal.de>
	comm.c: init_game(): Save everyone before exiting.
	handler.c: invalid_align(): New function.
	handler.c: equip_char(): Use invalid_align().
	handler.c: invalid_align(): prototype.
	interpreter.c: nanny(): Place character in room before equipping.
	objsave.c: Obj_to_store()/Obj_from_store()/Crash_save(): Modified
		to include location arguments.
	objsave.c: auto_equip(): New function, sanity checks eq positions.
	objsave.c: Crash_listrent(): Also show rent locations.
	objsave.c: Crash_load(): Huge block of code to handle equipping.
	objsave.c: Crash_extract_norents_from_equipped(): New function.
	structs.h: obj_file_elem: 'location' added. (Sort of, it's pending
		approval.)

-- gg - act.comm.c: do_gen_comm(): Use AWAKE() macro. From
	Richard Glover <majik@pyramid.net>

-- gg - act.item.c: Curse containers if you put a cursed object in them.

-- gg - comm.c: main(): Added help text for '-h' option.

-- gg - act.informative.c: do_time(): Simplified by suggestion from
	Andrew Jones <andjones@mci2000.com>

-- gg - constants.c/comm.c: Uh, 'version' used to crash. :)

-- gg - act.comm.c: do_spec_comm(): Removed extra \r\n from act().

-- gg - act.movement.c: has_boat(): Del <caminturn@EARTHLINK.NET> suggested
	immortals should get to walk on water.  Now gods can walk on water
	but guest immortals (LVL_IMMORT) still need boats.

8/26/98

-- gg - Changed 'struct alias' to 'struct alias_data' since a Windows 95
	compiler gripes that it has a member of the same name.

-- gg - autorun: Don't sleep if we're going to die anyway.

-- gg - db.c: Disable zone commands which will endlessly error.

8/28/98

-- gg - Removed 'extern int top_of_world;' everywhere.
	db.h: Included extern for top_of_world here instead.
	(Should fix some of the Windows 'integral size mismatch' warnings.)

-- gg - act.other.c: do_save(): Allow gods to save even if we're in
	automatic saving. Immortals (31) still cannot by default.

-- gg - comm.c: DFLT_IP/DFLT_DIR/LOGNAME/help: Some extern declarations
	cleaned up to be what they should.

-- gg - comm.c: main(): Reworked to avoid implicit 'stderr' usage and
	allow an argument for log file to redirect to.

-- gg - comm.c/comm.h: send_to_room(): Changed to room_rnum.

-- gg - structs.h: obj_file_elem: Add a few spares since we're going to
	change the structure anyway.

-- gg - comm.c: process_input(): Output command we find from history.
	From Akuma the Raging Coder.

-- gg - interpreter.c/utils.h: IS_NPC changes from idea by Yaroslav
	Berezovsky <escogido@elnet.msk.ru> To be completed later though.

8/29/98

-- gg - act.wizard.c: do_show(): 'show snoop'

-- gg - shop.c: 'buy 3' now possible and doesn't break 'buy 5 3',
	'buy 5 #3', or 'buy #3'.

9/3/98

-- gg - db.c: index_boot(): prefix set to NULL to prevent spurious warning
	from egcs 1.1. (Headache prevention.)

9/7/98

-- gg - act.wizard.c: do_set(): age: ch<->vict.

9/9/98

-- gg - modify.c: string_write()/smash_tilde(): Got fed up with many
	places in the code (and external packages) manually setting up
	the writing code so I created string_write() to hide that.
	smash_tilde() envelopes previous code in string_add() in a way
	to be compatible with other codebases.

-- gg - mail.c: postmaster_send_mail(): Converted the final malloc() in
	the code to use CREATE(), and converted to string_write() also.

-- gg - boards.c: Board_write_message(): Changed to string_write().

-- gg - Makefile.lcc: Update from Eric Jones <fpicard@mindless.com>.

-- gg - macrun.pl: New from Dean Takemori <dean@UHHEPH.PHYS.HAWAII.EDU>
	in case you have a Macintosh with Perl.

-- gg - act.informative.c: do_toggle(): Added holylight/nohassle/roomflags
	for immortals, from Del Minturn <caminturn@EARTHLINK.NET>.

9/12/98

-- gg - act.comm.c: do_write(): Now uses string_write() interface.
	olc.c: olc_string(): Ditto.

-- gg - db.c: check_object()/check_object_spell_number()/
	check_object_spell_level(): Beginnings of object verification.
	This caught about 7 objects with bad spell numbers, names, or levels.

-- gg - modify.c: string_write(): Modified to allow generic data to be
	passed through later.  The improved editor could use this to send
	the 'old' buffer for instance.

-- gg - spell_parser.c: spello(): Report spells with invalid names.

-- gg - spell_parser.c: skill_name(): Minor cosmetic touchup.

-- gg - spell_parser.c: mag_objectmagic(): Wands with an area effect or
	mass spell don't need to be pointed at anything.

9/15/98

-- gg - utils.c: get_line(): Faster, cleaner, and most importantly, easier
	to read.

9/20/98

-- gg - utils.c: str_cmp()/strn_cmp(): Now gracefully handle a NULL pointer
	and I also took the opportunity to make them look cleaner.
	utils.c: basic_mud_log()/mudlog()/get_filename(): Should be able to
	handle a NULL pointer now.

-- gg - utils.h: IS_NPC(): MOB_ISNPC is back, for now.

-- gg - Added the long-awaited alias saving to file support courtesy of
	Jeremy Hess and Chad Thompson.  Directories added in lib/ also.

-- gg - comm.c: main(): Think I heard of a report where fdopen() didn't
	work under Windows so I added a little note there for people.

9/21/98

-- gg - magic.c: mag_unaffects(): Fixed cosmetic bug (of mine) whereby the
	"your vision returns" message was shown when you weren't blind.

-- gg - spell_parser.c: call_magic(): Fixed to return -1 when a target
	dies, so that mag_objectmagic() can correctly exit instead of
	casting another spell from a scroll at a stale target.

-- gg - utils.h: WAIT_STATE(): Needed "do { xxx } while(0)".

-- gg - act.offensive.c: do_bash(): Few fixes for NPC's and wimpy mode.

-- gg - spells.c: spell_enchant_weapon(): It is a bad thing to enchant a
	weapon that you are currently wielding. Since I think it makes
	more sense to just not be able to do that than jump through hoops
	with equipping, I've remove the TAR_OBJ_EQUIP flag from it.

-- gg - comm.c: perform_act(), act.informative.c: list_one_char(),
	interpreter.c: command_interpreter(): All changed with IS_NPC()
	fixes from Andrey Fidrya <andrey@ALEX-UA.COM>

-- gg - magic.c: mag_affects(): Don't allow strength if we already have
	100% strength add.

-- gg - act.other.c: do_steal(): Easy but not automatic stealing from
	sleeping people.

-- gg - comm.c: setup_log(): Handle all the log() nasties.

-- gg - sysdep.h: Check for STDOUT_FILENO too.

9/27/98

-- gg - objsave.c/structs.h: Enable autoeq on USE_AUTOEQ definition.

-- gg - act.item.c: Duplicated 'extern obj_proto;'

10/1/98

-- gg - utils.h: VALID_RNUM(): New macro made from common code in
	GET_ROOM_VNUM() and GET_ROOM_SPEC().
	utils.h: GET_ROOM_VNUM(): Needs (room_vnum) cast for MS VC++ 5.

-- gg - comm.c: 'port' should be an unsigned short integer.
	config.c: DFLT_PORT changed to ush_int too.

-- gg - act.wizard.c: do_at(): location/original_loc should be room_rnum.
	act.wizard.c: perform_set(): New room_rnum variable for case 35.

-- gg - db.c: reset_zone(): Couple casts to hush up Microsoft Visual C++.
	There isn't another way.

-- gg - house.c: hcontrol_destroy_house(): real_atrium/real_house converted
	to room_rnum variables.  The atoi() result casted to room_vnum.
	house.c: hcontrol_pay_house(): atoi() result, ditto.

-- gg - shop.h: 'keeper' variable changed to mob_rnum and comment fixed.
	It is saved on disk as a vnum but changed in boot_the_shops() to
	be a real number.

-- gg - spec_procs.c: pet_shops(): 'pet_room' is a room_rnum now.
	spells.c: spell_teleport(): 'to_room' is a room_rnum now.

-- gg - Even more xxx_rnum/xxx_vnum changes, to the real_xxx() functions.

-- gg - db.c: check_object_spell_level(): Note that it is a bad idea to
	assign an area or mass spell to a staff.  It is not overridden,
	just warned about.

10/3/98

-- gg - act.movement.c: do_stand(): Player may still be fighting at this
	point so we should set them POS_FIGHTING if so.
	Reported by Jon Barrett <mixtli@SINFO.NET>.

-- gg - act.wizard.c: do_switch(): Don't permit people under Greater God
	to switch into mobs in god rooms or houses.

-- gg - Assorted skills now have new IS_NPC and GET_SKILL checks.

10/5/98

-- gg - spec_assign.c: Fixed up mob|room|obj_v|rnum problems in ASSIGNMOB,
	ASSIGNROOM, ASSIGNOBJ.
	castle.c: block_way(): Fixed up room_rnum problem.
	olc.c: do_olc(): Ditto.

-- gg - act.wizard.c: room_rnum things fixed and use skill_name() now in
	do_stat_character().

-- gg - db.c: check_object_spell_number(): Disabled the check for an area/mass
	spell on a staff because the bug has been fixed.

-- gg - spell_parser.c: mag_objectmagic(): Fixed the bug where a victim
	dying in the middle of a staff spell caused a crash.

-- gg - Merged new spell routine changes that get rid of spells[] in favor
	of spell_info[].name.  Also removed dead code from db.c.

10/7/98

-- gg - db.c: check_object_spell(): Another magic niggle, the spells don't
	have names in syntax check mode.

-- gg - Merged a bunch of sh_int/int -> *_[rv]num changes from
	Bryan Britt <beltane@beltane.com>

-- gg - More little logging changes.  Sometimes I really hate portability. :P

-- gg - house.c/db.c: g++ found some mismatched prototypes.

10/8/98

-- gg - graph.c: Assorted room_rnum fixes.

10/10/98

-- gg - cnf/configure.in: Added checks for "remove" and "strerror".
	sysdep.h, conf.h.in: NEED_REMOVE_PROTO and NEED_STRERROR_PROTO added.

-- gg - act.social.c act.other.c ban.c e boards.c comm.c db.c fight.c
	graph.c house.c objsave.c shop.c: Updated to make sure all
	perror() and log() calls have SYSERR where appropriate.

10/12/98

-- gg - comm.c: Updated some 'const' usage in act() and related functions.

10/13/98

-- gg - Massive minor changes to the code to eradicate some (quite accurate)
	warning messages from Borland C++ sent by Mundi King <kingmundi@yahoo.com>

-- gg - utils.h/utils.c: CAP() is now a function instead of macro to eliminate a
	"statement with no effect" warning when not using the return value.

-- gg - utils.c: int_to_short(): Sneak around the Microsoft Visual C++ warnings
	if there is no other way to avoid it.

-- gg - comm.c: Socket errors beyond our control are flagged as a WARNING in the
	same manner as bugs in the code are flagged SYSERR.

-- gg - shop.h/shop.c: Fixed the bug causing 'keeper' in the shop structure to
	be an int.

-- gg - db.c/db.h: More int/sh_int cleanups with int_to_short(). Including changes
	to zone_data and top_of_zone_table.

-- gg - Even more Microsoft Visual C++ warning fixes.  Warnings sent in by
	OmnousMan@aol.com and Sean Daley <sdaley@bbnplanet.com>.

-- gg - castle.c: Major cleanup of appearance.

-- gg - cnf/configure.in, cnf/aclocal.m4, configure: New directives to check for
	'struct in_addr' and an unsafe crypt() function with only 10 characters.

-- gg - structs.h: Code to check for an unsafe password length of 10.
	sysdep.h: Code to accommodate systems with no 'struct in_addr'

10/16/98

-- gg - comm.c: nonblock(): Use 'unsigned long' for Windows ioctlsocket().

-- gg - comm.c: open_log(): Use "easy" method for GNU C and MetroWerks (no fdopen).

-- gg - db.c: More int_to_short() for MSVC.
	magic.c: Some variable fixups for warnings, mob_vnum and obj_vnum;

-- gg - objsave.c: Crash_delete_file(): s/unlink/remove/

-- gg - comm.c: Also check for WSAEINTR as Andrew Helm <ashe@iglou.com> suggests.

-- gg - sysdep.h: Mundi King <kingmundi@yahoo.com> gave me some #pragma's to
	disable warnings in Borland C++, how quaint.  Also had to give an isascii()
	macro for MetroWerks since they couldn't add one line to their headers.
	Also took the opportunity to clean up the "Who are we?" error message into
	something a bit more descript.

10/21/98

-- gg - db.c, config.c: Load GREETINGS from a file instead of config.c.
	See lib/text/greetings.

-- gg - castle.c: Fixed a few short int warnings.

-- gg - utils.c: prune_crlf(): Fixes up GREETINGS to look right.

10/23/98

-- gg - Thanks to Francis Hotchkiss <fhotch@buffnet.net> for testing the
	FreeBSD configure changes.  (The test does work.)

10/27/98

-- gg - act.wizard.c, class.c, limits.c: Changed advance_level() to not
	print the advancement message so the calling functions can do so
	without spamming the system logs and online wizards.

-- gg - act.informative.c: look_at_target(): "look 2.obj_with_extra_desc"
	bug fixed.

-- gg - comm.c: close_socket(): Andrey Fidrya <andrey@ALEX-UA.COM> pointed
	out we could have a player special called on a mobile.

-- gg - act.wizard.c: do_purge(): mudlog() required a GET_INVIS_LEV check.

-- gg - act.comm.c: do_tell(): Only allow immortals to "tell" to a mobile
	to prevent player abuses.

-- gg - act.item.c: Multi-give/drop/donate/junk/put/get.

10/28/98

-- gg - alias.c, db.c: Fix a couple '%d' warnings, hopefully.

-- gg - modify.c: show_string(): Fix a warning on 64-bit platforms with
	casting a pointer to an integer.

-- gg - utils.h: Better IS_NPC check added, though still commented out
	in favor of the old, faithful one.

-- gg - act.item.c: do_drop(): Fixed a bug WRT junking objects.  'amount'
	was re-used inadvertently.

-- gg - doc/README.BORLAND: It's actually helpful now.

-- gg - db.c: create_entry(), init_char(): Need to check for replacing an
	old character in the player table.

11/2/98

-- gg - comm.c: get_max_players(): "random guess" was missing a ;
	From: Josh McBeth <tiberius@ac.net>

-- gg - limits.c: Del <caminturn@EARTHLINK.NET> pointed out that I
	forgot to make sure someone levelled before printing message. :)

11/9/98

-- gg - db.c: Duh, get_id_by_name() doesn't return player table array
	index, so now get_ptable_by_name does.

11/15/98

-- gg - objsave.c: update_obj_file(): Don't update empty names.

11/22/98

-- gg - class.c: do_start(): Don't need to set_title() the person because
	they have already had it done by init_char().  Found by
	"Andrey Fidrya" <andrey@alex-ua.com>

11/23/98 -- Hereby proclaimed Rick Glover <magik@thegrid.net> bug report day.
         -- All of this day's bug fixes are from him.

-- gg - spell_parser.c: mag_objectmagic(): Remove superfluous '!= NULL'
	from action description check on suggestion.

-- gg - act.informative.c: list_obj_to_char(): We don't initialize a variable
	on the declaration line but do it on the next line down.  I'm glad
	I'm not the only picky person around here. :)

-- gg - act.informative.c: do_score(): Redundant IS_NPC() checks removed.

-- gg - act.item.c: get_check_money(): We had bad grammar.

-- gg - act.item.c: do_drop(): Mixed up 'amount' and 'multi' in a sprintf()
	during the multiple object changes.

-- gg - Massive act() -> send_to_char() search and replace.

-- gg - act.offensive.c: do_backstab(): WAIT_STATE() added.

-- gg - act.wizard.c: do_show(): 'player' updated to use "buf + strlen(buf)".

-- gg - boards.c: He also pointed out a 'board.h' typo.

-- gg - He also noticed 'r_*_start_room' used 'sh_int' which prompted me
	to search and replace many other instances of 'sh_int' misuse too.

-- gg - db.c: index_boot(): He found a redundant 'break' after 'exit()'.

-- gg - magic.c: mag_areas(): Didn't pass 'level' variable handed to us
	to mag_damage().

-- gg - magic.c: mag_points(): Variables compressed to same line.

-- gg - db.h: LIB_OBJS removed, it wasn't used.

11/24/98

-- gg - db.c, act.informative.c: Removed 'extern spells[]'. Thanks to RG.

-- gg - modify.c: do_skillset(): Spacing fixed when skills are skipped. From RG.

-- gg - mobact.c: mobile_activity(): Charmed/blinded mobs can't help. From RG.

-- gg - act.offensive.c: do_backstab(): Aware mobs aren't when asleep. From RG.

-- gg - shop.c: evaluate_expression(): Remove isalpha() to allow '(' first.
	shop.c: evaluate_operation(): &&/|| fixed to always pop both values.
	Thanks to Lubos Lunak <l.lunak@email.cz> for finding these.

12/1/98

-- gg - ChangeLog: Ran it through ispell while avoiding gratuitous changes.

12/2/98

-- gg - utils.h: RG noted we had prototypes for {mana,hit,move}_limit but
	removed the functions.

-- gg - class.c: do_start(): We really do need the set_title() or newbies
	start out with the level 0 title.

12/10/98

-- gg - utils.c, utils.h: {mana,hit,move}_limit() don't exist and ush_int
	to int conversion in core_dump_real().

-- gg - act.comm.c: do_page(): Extra \r\n removed from sprintf(), by RG.

-- gg - act.social.c: fread_action(): is really local, by RG.

-- gg - boards.c: Typo fixes and some spacing additions, by RG.

-- gg - castle.c: Some act() -> send_to_char() where appropriate, by RG.
	spec_procs.c: Ditto.

-- gg - config.c: Some variables changed sh_int -> room_Xnum.

-- gg - db.h: save_char() prototype sh_int fixes and LIB_OBJS removed.

-- gg - house.c: More room_Xnum fixes, by RG I believe.

-- gg - interpreter.c: More room_Xnum fixes.

-- gg - mobact.c: mobile_activity(): Blind and charmed mobs shouldn't
	be helping in attacks. By Rick Glover.

12/15/98 - It's not a Y2k problem, I'll just write out 2000 afterwards. :P

-- gg - act.item.c: Merged more act() -> send_to_char() fixes.  Also fixed
	the '\n' in the wear list.  Lastly, revamped get_check_money() to
	be plurally correct.

-- gg - act.movement.c: has_boat(): Fixed return parenthesis.
	do_doorcmd(): Removed extra \r\n.
	do_stand(): More act() -> send_to_char() changes merged in from RG.

-- gg - act.offensive.c: do_backstab(): Sleeping mobs aren't "aware," and
	added delay to prevent abuse.
	do_kick(): Use new function compute_armor_class().

-- gg - act.other.c: do_quit(): RG suggested removal of 'save_room.' More
	act() -> send_to_char() fixes in the code.

-- gg - act.wizard.c: do_stat_character(): RG noted that dexterity isn't
	factored into armor class, fixed.
	do_show(): He also noted we need "buf + strlen(buf)" here.

-- gg - db.c: sh_int/*_?num fixes.

-- gg - fight.c: compute_armor_class(), compute_thaco(): New functions.
	death_cry(): Use send_to_room instead of act() hackery.
	hit(): Don't use weapon damage values if it isn't a weapon, from RG.
	Also more act() -> send_to_char() fixes.

-- gg - handler.c: act() -> send_to_char() fixes.

-- gg - magic.c: mag_savingthrow(): Took idea for modifier value to be
	added, from Edward J Glamkowski <eglamkowski@angelfire.com>.
	Callers changed throughout.

-- gg - modify.c: do_skillset(): Screen spacing of skills fixed on
	suggestion by Rick Glover <magik@thegrid.net>.

-- gg - objsave.c: Crash_save(): Reversed order of item saving to fix
	bug that made auto equipment not work.  Also minor touchups.
	Rent problem reported by Rick Glover.

-- gg - shop.c: evaluate_operation(): Lubos Lunak <l.lunak@email.cz>
	found that the stack was messed up by compiler short-circuiting.
	Also changed isalpha() check to allow a ( first.

-- gg - spell_parser.c: More act() -> send_to_char() fixes.

-- gg - act.informative.c: act() -> send_to_char() fixes and some old
	now-gone externs removed.
	do_score(): Cleaned up unneeded IS_NPC() checks, by RG.

-- gg - comm.c: Cleaned up buffer checking code.
	write_to_output(): Moved strlen() to avoid wasted time.

12/16/98

-- gg - act.informative.c: do_diagnose(): Superfluous 'return' removed
	as suggested by Rick Glover.

1/8/99

-- gg - act.other.c, config.c, graph.c, interpreter.c, interpreter.h:
	TRACK_THROUGH_DOORS the #define has become 'track_through_doors'
	the runtime changeable integer in config.c.  VALID_EDGE() also
	went over the brink of readability and became a function.

1/12/99

-- gg - fight.c: Fixed up compute_armor_class() to not divide since only
	one place cares about the internal value.

1/13/99 - Wednesday

-- gg - sysdep.h: Great, now winsock1/winsock2 conflict in Borland.  What
	a pain. Jodi Goddard <jodig@netcom.ca> was the first to mail me
	the correct definitions to test for it.

1/15/99

-- gg - fight.c: compute_armor_class() should add dex_app * 10 since the
	old code divided first, then added the modifier.

1/24/99

-- gg - util/listrent.c, util/split.c: Rick Glover pointed out a few \n\r's.

-- gg - castle.c: King Welmar's movements needed ASCII adjustments.

1/25/99

-- gg - handler.c: generic_find() needs to NULL the arguments _first_ in case
	our argument only has a fill word.  Fixes crash reported by Rick
	Glover that I couldn't originally reproduce.
	act.item.c: do_get(), do_put(): Use one_argument() instead of half_chop
	to allow for fill words.

1/29/99

-- gg - act.comm.c: Some more act() -> send_to_char() from Rick Glover.

2/2/99

-- gg - Got rid of int_to_short() in favor of a #pragma to disable the warning.

2/16/99

-- gg - First batch of Rick Glover bug reports.
	Makefile.in
		OBJFILES and CXREF_FILES sorted, alias.o moved alphabetically.
	act.informative.c
		do_gen_ps(): Added log() for unhandled case.
	act.item.c
		do_pour(): Removed superfluous 'return;' at end.
	act.movement.c
		Bitvectorized NEED_xxx #define's to be more obvious.
		do_leave(): Use OUTSIDE().
		do_wake(): Use AWAKE().
	act.other.c
		do_steal(): Use two_arguments().
		do_wimpy(): Removed superfluous 'return;'.
	act.wizard.c
		perform_set(): Prevent only freezing self, not thawing self.
	class.c
		level_exp(): Log the bad level in the report.
	comm.c
		'extern' variables extricated from the global variables.
	shop.c, shop.h
		'producing' is now an obj_vnum.
	spells.h
		TAR_xxx defines bitvectorized instead of numbers.

3/4/99

-- gg - comm.c, structs.h, utils.h: PjD noticed that repeatedly reconnecting
	to a MUD would cause the wait state counter to be reset.  Thus it
	has been merged with the mob counter.

-- gg - act.other.c: do_split(): Fixes from Christian Loth to not lose
	money and fix the accounting among a group.  Untested but looks ok.

-- gg - spell_parser.c: say_spell(): King Mundi proposed fix so that the
	MUD doesn't go into infinite spastic loop upon unknown substring.

-- gg - objsave.c: Crash_load(): "Andrey Fidrya" <andrey@alex-ua.com> sent
	in a fix for potentially empty rent files.

-- gg - Usual batch of Rick Glover reports:
	structs.h
		room_data: 'zone' should be zone_rnum.
		index_data 'vnum' should be a 'sh_int' type.
	act.item.c
		'the $o' changed to '$p' for better clarity.
	act.wizard.c
		do_force: Mobs are now immortal subordinate.
		do_set: height/weight; "sex" set type is much less
			complicated with search_block now.
	constants.c
		Lowercased genders[] for do_set to work ok.
	comm.c
		make_prompt: buffer length fixed to track
			MAX_PROMPT_LENGTH changes.
	db.c
		read_mobile: Should have WARNING tag on log() message,
			because while not a SYSERR, it is sort of bad.
	handler.c
		affected_by_spell: Fixed up comment.
	objsave.c
		gen_receptionist: HSHH() for "she"
	interpreter.c
		Remove AFF_GROUP flag in addition to PLR_WRITING, etc.

-- gg - class.c: levels(): Sean Daley <sdaley@bbnplanet.com> noticed
	I forgot _every_ 'break;' in the switch() block. :)

3/5/99

-- gg - Desmond Daignault <Desmond_Daignault@amrcorp.com> sent in a
	fixing up get_char_room_vis and get_char_vis like I wanted,
	to be consistent with get_player_vis. The old function still
	exists, it's just not used except by get_char_vis.

3/10/99

-- gg - Rick Glover found some old CRIMEOK references in magic.c

******** Patchlevel 16 ***************************************************

3/17/99

-- gg - constants.c: Version string updated to bpl16.
	structs.h: Preprocessor version number updated to bpl16.

-- gg - First person to find a stupid bug award goes to Rick Glover
	who noticed do_say and do_gsay are missing \r\n.

-- gg - Wonder how no one noticed that 'sleep' spell sends its message
	to the caster instead.... Found by RG.

-- gg - 'prompt none' gave the help message.  Found by RG.

-- gg - act.other.c: do_quit(): Revert previous change because of
	extract_char() behavior.

3/26/99

-- gg - Added README.MSVC6.  We don't have Microsoft Visual C++ 6 so
	we cannot confirm the accuracy of anything contained therein.

4/11/99

-- gg - Fixed typo '-P0' to '-P-' in Makefile.bcc.

4/16/99

-- gg - modify.c: string_add(): Fix Obiwan error in maxstr handling.
	It no longer accepts 10 characters & NUL for a 10 character limit.

5/1/99

-- gg - act.wizard.c: do_show(): case 3: Check for NUL value.

-- gg - structs.h: mob_rnum nr;

5/3/99

-- gg - comm.c: Last usage of d->connected replaced with STATE(d)

-- gg - fight.c: damage(): Don't divine rescue people who can't flee.
	Previously could result in being rescued after death because
	then !FIGHTING() is true even though do_flee() failed.

-- gg - sysdep.h: Yet another useless (to us in this case) MSVC warning.

-- gg - comm.c: echo_off(): Fixed RFC compliance issue noted by
	Matthew Bell <mbell1@ilstu.edu>

5/4/99

-- gg - act.social.c: boot_social_messages(): More sanity checks to make
	sure we don't stomp memory.

5/9/99

-- gg - util/delobjs.c: Change unlink() to remove().

-- gg - shop.c, mobact.c, fight.c, class.c, spec_procs.c: Use constants.h

-- gg - objsave.c: Removed unused str_app[] extern.

-- gg - db.h: CIRCLE_VMS path declarations.

-- gg - house.c: Fixed Obj_from_store() C++ linkage problem.

-- gg - interpreter.h: Make cmd_info[] extern match declaration.

-- gg - constants.h: Remove 'const' from int arrays to fix C++ linkage.

5/10/99

-- gg - act.item.c, act.other.c: Use constants.h for more things.
	From the VMS guy again. See README.VMS.

-- gg - comm.c: New circle_sleep() function and various VMS fixes.

5/18/99

-- gg - comm.c, config.c: s/MAX_PLAYERS/max_playing/ since the DEC
	C compiler confuses it with 'max_playing' also.

5/26/99

-- gg - circle.com, mud_utils.com, autorun.com: New utilities for
	running CircleMUD on VMS from Robert Alan Byer.  Before
	people ask, these are _not_ DOS executable files.

-- gg - act.other.c: do_practice(): NPC's cannot practice.

-- gg - comm.c: game_loop(): Made output_ready() to appease VMS.

-- gg - utils.c: mudlog() cleaned up and no longer tries to get colors
	from a mobile.

-- gg - vms_decls.h: New file, containing declarations the
	operating system should have provided.

-- gg - shop.c: top_shop is now array-based intead of counting-based.

5/28/99

-- gg - Couple more VMS changes.  Also made accept_arg_t since everyone
	seems to differ on this variable's signedness.

5/29/99

-- gg - objsave.c: Crash_listrent(): Was overwriting beginning of
	information string with later information.

6/3/99

-- gg - act.wizard.c: do_vnum(): Use half_chop() to allow fillwords.
	From Rick Glover.

-- gg - db.c: check_object(): Bitvector and drink container checks.

-- gg - act.informative.c: do_score(): Plurality problem.

6/6/99

-- gg - act.wizard.c: do_stat_character(): Remove gender special case.
	This will have the side-effect of lowercasing the result, but
	the simplicity is preferred here.

6/11/99

-- JE - README.CYGWIN - incorporated new version from David Goldstein
	
7/4/99

-- gg - comm.c: close_socket(): Check for IS_NPC() before PLR_MAILING.

-- gg - db.c: Don't re-file_to_string_alloc() anything currently in
	use by the pager.  It's the least impact change.  From
	Andrey Fidrya <andrey@ALEX-UA.COM>

-- gg - limits.c: Autowiz support for Windows from 
	Julian Buckley <s348266@student.uq.edu.au>

-- gg - modify.c: string_add(): Yet another fix to make the buffer
	limits safe.  From Andrey Fidrya <andrey@ALEX-UA.COM>.

-- gg - objsave.c: Crash_extract_norents_from_equipped():
	Um, duh. Helps to use functions. :)   Spotted by
	Andrey Fidrya <andrey@ALEX-UA.COM>.

7/10/99

-- gg - spell_parser.c: ACMD(do_cast): Equipped objects should
	be 'what' and not 'who' in the message.

-- gg - Merged latest set of changes for VMS.
	doc/README.VMS: Update from author.
	descrip.mms, vms_circlemud_gcc.opt, vms_gnuc.h: Removed.
	build_circlemud.com: Almost a 'Makefile' for VMS.
	comm.c: gettimeofday(): Removed VMS version, it now has it.
		game_loop(): Removed output_ready() special case.
		circle_sleep(): Removed special case for VMS.
	sysdep.h: output_ready() removed. 'vms_gnuc.h' removed.

8/01/99

-- dk - Dropped in support for socklen_t, which is in the latest POSIX
        drafts and glibc2, to replace the accept_arg_t kludge.  Please
        verify the veracity of the changes to the OS dependent conf.h.*
        files.  Any platform using glibc2 or that has socklen_t won't
        compile correctly using those settings.  Platforms using the
        'configure' script should autodetect and work properly, although
        my system is libc5 based, so it's untested.

8/4/99

-- gg - doc/README.AMIGA: New update.

8/28/99

-- gg - act.item.c: Fixed 'junk 83467534657834 coins' bug.

-- gg - Released patchlevel 16.

******** Patchlevel 17 ***************************************************

8/28/99

-- gg - constants.c, structs.h: Welcome to bpl17.

-- gg - interpreter.c: Todd A. Laycock <tlaycoc@orion.it.luc.edu> noted
	that we don't actually use ACMD(do_rent) anywhere, nor do we
	even have one.

12/14/99

-- gg - act.wizard.c, spec_assign,c: Fix '< top_of_world' from
	Andrey Fidrya <andrey@ALEX-UA.COM>

-- gg - modify.c: string_add():  Del <caminturn@EARTHLINK.NET>
	noticed a missing \r\n if people overflowed max_str on
	the first line.

12/17/99

-- gg - comm.c: perform_act(): "Bob Castillo" <castillo7@hotmail.com>
	noticed that illegal act() codes crash the MUD.  Oops.
	Fortunately, it only occurs due to lib/misc/socials or
	aedit (the social editor) as user input is escaped to prevent
	any act() codes at all.

-- gg - act.informative.c: look_at_char(): Mob names aren't
		capitalized due to \r\n prepended.
	db.c: is_empty(): Crashes on NOWHERE and prevented
		success by immortals.
	act.wizard.c: do_return(): When disconnecting someone
		upon return, make sure to not trash our own connection.
	act.wizard.c: do_dc(): Needed to fix a case when
		disconnecting people not in the game.
	All spotted by "Andrey Fidrya" <andrey@alex-ua.com>

12/31/1999

-- dk - ChangeLog dates are now Y2K compliant!  And just in the nick of
        time!  Thanks to all the COBOL hackers that brushed off their
        cobwebs and worked around the clock to fix it.

01/01/2000

-- dk - Happy New Year and Ante-Millennium.


01/14/2000

-- dk - comm.c: Changed some 'int's to 'socket_t's.  That's what it's
        there for, so that's what we'll use it for.  (Why didn't anyone
        else notice this?!  Bizarre.)

1/20/2000 -- See, I told you.

-- gg - house.c: Removed a lot of '< 0' == 'NOWHERE' assumptions.

-- gg - comm.c: Having a $ as the last character on the line
	could do bad things since bpl4.  Found by Bob
	Castillo <castillo7@HOTMAIL.COM>.

1/23/2000

-- gg - house.c: Removed a lot of '>= 0' != 'NOWHERE' assumptions.
	Del <caminturn@EARTHLINK.NET> noticed I missed those.

-- gg - comm.c: process_input(): Fixed the fact we write too much
	to memory in the input buffer.  Found by Bob Castillo
	since it's much more noticeable in an unsigned variable.

-- gg - comm.c: echo_on(): We don't need NAOFFD or NAOCRD, they
	cause us problems, and others don't use them either.

-- gg - db.c: file_to_string_alloc(): 'using' is a keyword in C++.

-- gg - Batch of Rick Glover reports:
	act.comm.c: do_spec_comm(): Use switch instead of if..else.
	db.c: count_alias_records(): Don't count empty aliases.
	      parse_object(): in_room=NOWHERE is superfluous.
	interpreter.c: nanny(): CON_CLOSE is possible.

-- gg - Released patchlevel 17.

******** Patchlevel 18 ***************************************************

1/23/2000

-- gg - constants.c/structs.h: Welcome to bpl18.

-- gg - Makefile.lcc: Remove some constants I have to change every patch.

-- gg - doc/README.CYGWIN: bpl17 -> bpl18

7/3/2000

-- gg - doc/license.doc: Add copyright information that seems lacking
	elsewhere.

-- gg - build_circlemud.com: Update from author.

-- gg - utils.h: -1 => NOBODY/NOWHERE/NOTHING cleanups.

-- gg - spells.c: spell_teleport(): No teleporting into ROOM_GODROOM.

-- gg - spec_procs.c: Restrict pets to NPCs.

-- gg - interpreter.c: is_abbrev(): s/returnss/returns/

-- gg - handler.c: affect_join(): Keep 'next' pointer for extracted
	objects in list.

-- gg - act.wizard.c: perform_immort_invis(): Remove redundant
	IS_NPC check.

-- gg - utils.c: basic_mud_log(): Cancel message if stream hasn't
	been initialized.

7/7/2000

-- gg - utils.c: mudlog(): log(var) => log("%s", var); to avoid
	interpreting %% codes.

-- gg - db.c: parse_object(): Print the offending character.
	check_object(): Drink aliases should last now.  The code
	to remove the aliases shouldn't care where it is, though.

-- gg - act.item.c: name_from_drinkcon()/name_to_drinkcon():
	Much more intelligent support for removing/adding the
	drink name to containers.

-- gg - lib/world/obj/0.obj: An extra ~ escaped the removal of
	object #99.

10/27/2000

-- ae - act.informative.c: Fixed do_time() with the fix submitted by Nate
        Winters <wintersn@HOTMAIL.COM> that corrected the output on the 11th,
        12th, and 13th of a month (it used to output '11st', '12nd', and
        '13rd'.  Not so good really.

11/3/2000

-- gg - shop.c: Del <caminturn@earthlink.net> noted the
	'show shop' header was at the bottom of pages.

-- gg - utils.c: get_line(): "Andrey Fidrya" <andrey@alex-ua.com>
	has files without a \n on the last line.

11/15/2000

-- gg - act.other.c: do_quit: !GET_INVIS_LEV is redundant.

9/18/2000

-- ae - comm.c: Added in $u and $U act() codes to perform_act().  These allow
        the user to uppercase the first letter of the previous ($u) or next
        ($U) word.  For example, from the social for 'snarl':
  $n snarls angrily at $N.  $e$u seems incapable of controlling $mself.
  $n snarls viciously at you.  $U$s self-control seems to have gone bananas.
        In the old style, these would have come out as:
  George snarls angrily at Daniel.  he seems incapable of controlling himself.
  George snarls angrily at you.  his self-control seems to have gone bananas.
        In the new, we get:
  George snarls angrily at Daniel.  He seems incapable of controlling himself.
  George snarls angrily at you.  His self-control seems to have gone bananas.
        This comes a little bit closer to proper sentence output and looks
        much nicer to boot.

12/07/2000

-- ae - Removed some 'offensive' language from act.item.c and magic.c.

1/17/2001

-- gg - db.c: load_zones(): More accurate counting based in part
	on suggestions by Rick Glover.  Also added SYSERR.

-- gg - act.offensive.c: do_order(): No "order followers".  Based
	on reports from Andrey Fidrya.  We'll need similar fixes
	for other areas and can turn it back on then.

-- gg - db.c: file_to_string(): Check for empty files or we corrupt
	memory. From "Bob Castillo" <castillo7@hotmail.com>. Also
	took care of duplicated feof() test.

1/25/2001

-- gg - spells.h, magic.c, spell_parser.c, constants.h, constants.c:
	spell_wear_off_msg[] died.  It moved to spell_info[] and I
	fixed 3 mispelings in the process. (That was on purpose.)

-- gg - Makefile.in: magic.c depends on constants.h

-- gg - comm.h: Move PAGE_(WIDTH|LENGTH) from modify.c for computations
	using page_string().  Needed by the shop code.

-- gg - mobact.c: Fixed MOB_AGGR and MOB_AGGR_TO_ALIGN logic. Any
	aggressive mobs also aggressive_to_alignment weren't properly
	attacking everybody, just the alignment.

-- gg - objsave.c: Crash_load(): Plurality.

-- gg - structs.h: Formatting and comment adjustment on CON_ and MOB_.

-- gg - comm.c: close_socket(): Make "closing link" message accurate.

-- gg - generic_find(): Fix for '2.bread' with one on the ground and
	one in your inventory.

-- ae - spec_procs.c: Added a CAN_SEE() check into npc_steal() to stop mobs
        with the thief special from stealing from people that they can't even
        see.  Reported by Vladimir Prelovac <tomcat@galeb.etf.bg.ac.yu>

1/26/2001

-- ae - act.other.c: Shifted the checking for duping into extract_char().  I
        was toying and discovered that renting out skips all of the dup checks
        that we had in and so does dieing.  Whoops.  Also, we were setting the
        state of the descriptor to CON_DISCONNECT when that state is used
        everywhere else for players that have the state of CON_PLAYING, so I
        changed that to CON_CLOSE.  (also note 'handler.c')

2/18/2001

-- gg - comm.c: perform_socket_read(): Handle ECONNRESET by booting
	the person as we do for a 0 length read.

3/4/2001

-- gg - db.c, db.h: fread_string(): Doesn't modify 'error'.

-- gg - util/shopconv.c: fread_string(): Fix horrible buffer overrun
	as well as making the return codes not pretend to be ok.

-- gg - shop.c: read_shop_message(): Fix think-o on fread_string's
	string parameter.

-- gg - handler.c: get_obj_vis(): Make sure 'number' isn't NULL.
		extract_char(): Extensively rearranged.

-- gg - handler.c: get_obj_vis(): Really support numbering.

-- gg - act.wizard.c: find_target_room(): Cleanup and extend to
	find location of objects worn or carried.

-- gg - db.c: load_zones(): Skip first 3 lines to avoid mistaking
	zone name for a command.

-- gg - boards.c: init_boards(): -1 => NOTHING

-- gg - comm.c: game_loop(): Use RL_SEC more.
		heartbeat(): More PULSE_* constants.

-- gg - structs.h: PULSE_* constants, OPT_USEC explanation.

-- gg - handler.c: extract_char(): Should only be one switch
	target, abort on finding it. Also adjusted comment.

3/10/2001

-- gg - class.c: invalid_class(): Reformatted so people
	can actually read it.

-- gg - utils.h: ANA/SANA: No 'Y'. (Compare to 'AN')
	From: Peter Ajamian <peter@pajamian.dhs.org>

3/18/2001

-- gg - handler.[ch], structs.h, comm.c, act.offensive.c,
	fight.c: New delayed extraction sequence to avoid
	dangling pointer crashes.

-- gg - Released patchlevel 18.

******** Patchlevel 19 ***************************************************

3/18/2001

-- gg - constants.c, structs.h, Makefile.lcc, doc/README.CYGWIN:
	Welcome to bpl19.

5/1/2001

-- ae - Changed some '256' notes to READ_SIZE (db.c) or MAX_INPUT_LENGTH
        (mail.c and handler.c).  These are to keep the consistency across
        functions, etc.

-- ae - act.item.c: Removed a check for too many objects from the beginning
        of do_get().  As pointed out by Vladimir Prelovac
        <tomcat@galeb.etf.bg.ac.yu>,
        1. If there isn't anything to get you still get that message
        2. The check is already made at the appropriate time in all the other
           functions that do_get() calls (in can_take_obj()).

-- ae - constants.c: We forgot the string for the NOTDEADYET flags.  Oops.
        Added in 'DEAD' (with comments) for completeness.

5/8/2001

-- ae - Makefile.in: Modified makefile (and added htmlheaders/footers) to
        allow for cxref data creation more readily.

5/9/2001

-- ae - Del submitted a 'bug' (wording problem) with a chunk in
        act.movement.c that has to do with ROOM_TUNNEL.  There are two
        options for fixing it, so I chose the middle ground:  adding a
        config variable for it to config.c.  This variable (tunnel_size)
        indicates how large the tunnel is and defaults to 2.

5/10/2001

-- ae - act.wizard.c: Added in code to remove holylight, syslog, and
        nohassle when wiz+ are demoted below level 31 with do_advance().

-- ae - fight.c: If we don't have a fight message to send (ie, suffering,
        poison, etc), then don't send the colours, and don't try to send
        the message that we don't have.  Reported by Andrey Fidrya
        <andrey@alex-ua.com>

-- ae - db.c: This fixes a possible overflow problem in pfiles by truncating
        the description if it is too long. Reported by Andrey Fidrya
        <andrey@alex-ua.com>

-- ae - We had a reference to SKILL_PUNCH (#136), but in the base code,
        'punch' is an action, not a skill.  Not only that, but we don't
        even reference it in the lib/ anywhere. (spells.h, spell_parser.c)

5/16/2001

-- ae - coding.doc: Added in a section 4 (special procedures) that was
        submitted to us ages ago by Luis Pedro Passos Carvalho
        <lpcarvalho@SONAE.PT>.  Unfortunately, due to problems with the CDP,
        it languished.  We just have to remember to keep the text when we
        get the CDP up and running again.

5/18/2001

-- gg - Global: IS_OBJ_STAT -> OBJ_FLAGGED for consistency with
	MOB_FLAGGED and OBJ_FLAGGED.

-- gg - Global: Moved a bunch of global variables to db.h.

-- gg - act.informative.c, db.c, handler.c, interpreter.c, mobact.c,
	random.c: Remove 'register' keyword, let the compiler figure
	out what is best.

-- gg - castle.c: Fix "zones are 100 rooms" assumption.

-- gg - class.c: Fix trailing comma in prac_params[].
	From: Del <caminturn@earthlink.net>

-- gg - constants.c: Fix "the Day of the Great Gods" capitalization.
	From: Carlos Myers <dhstranger@hotmail.com>

-- gg - mail.c: scan_file(): Mail file is binary, open as such.
	From: Marc Lank <mesa@enia.net>

-- gg - interpeter.c: ACMD(do_info) and ACMD(do_offer) don't exist.
	From: Del <caminturn@earthlink.net>

-- gg - magic.c: mag_points(): Rename 'hit' to 'healing' to avoid
	the function named hit().

-- gg - shop.c: Added missing read_shop_message() declaration.

-- gg - shop.h: Removed unused GET_OBJ_NUM() macro.

-- gg - utils.h: Remove IF_STR(), make OBJWEAR_FLAGGED use the
	GET_OBJ_WEAR information.

-- gg - act.item.c: Removed superfluous '*next_obj'. (See the
	function variable declaration section.)

-- gg - act.wizard.c, db.c, db.h: Removed the stupid
	"zone number * 100 = starting room" assumptions.

	||| ----- ----- ----- NOTE ----- ----- ----- NOTE ----- ----- ----- |||

	This now means you can have zones spanning anywhere, including over
	each other.  You can have zone #5 going from room 1354 to 2139.
	That doesn't prevent zone #10 from going from 936 to 1734.  We DO
	NOT check for overlap.  Why? Because it can be useful.  No longer
	are you restrained to having a zone repopulate when no one is in
	the whole place, now you can do room by room (up to the limit of
	32,767 zones) for some places within a zone.  In short, you no
	longer have to think of a "zone" in the same way any longer.  Now
	it's simply a collection of loading commands for mobs/objs when a
	timer fires and/or no one is in it.

	||| ----- ----- ----- NOTE ----- ----- ----- NOTE ----- ----- ----- |||

-- gg - castle.c: Fixed zone*100 assumptions.
	db.c: Added real_zone() for castle changes.
		Changed -1's in real_mobile and real_object appropriately.

-- gg - comm.c: close_socket(): Move NULL assignment up to fix mobile switching
	problem upon disconnection. (The switched into mobile still "busy" even
	though you reconnect after a drop.)

-- gg - comm.h: USING_LARGE/USING_SMALL: Not used, removed.

-- ae - zone file update: The zone files were all updated to suit the top
        and bottom indicators put into the code.

-- gg - db.c: load_zones(): See warning:

				///// WARNING \\\\\
	The powers-that-be decided to change the format of the zone files
	to be more reasonable with the 'bottom room' number.

	TopRoom Lifespan ResetMode => BottomRoom TopRoom Lifespan ResetMode

	Stock zones will be updated but you will need to change your own
	zones by hand or your MUD will error out and not restart.
				\\\\\ WARNING /////

-- gg - graph.c: VALID_EDGE prototype.

-- gg - act.informative.c, constants.c, constants.h: where[] -> wear_where[]

5/22/2001

-- ae - class.c: changed 'return 1', and 'return 0' to 'return TRUE' and
        'return FALSE' respectively.  This brings it into the same context
        as some of the other similar functions.

5/23/2001

-- gg - act.item.c, act.wizard.c, handler.c, handler.h: Fix missing number
	(5.Y) support for equipment due to generic_find() fix.

6/14/2001

-- gg - utils.c: dice(): Use number().
		number(): Add rand() comment.

-- gg -	comm.c: init_game(): Save the MUD time on shutdown.
	db.c: reset_time(): Load beginning time from lib/etc/time.
	db.h: TIME_FILE: "lib/etc/time"
	utils.c: mud_time_to_secs(): New.

-- gg - db.c: interpret_espec()/parse_espec(): Finalize behavior
		of Boolean options. (i.e., don't crash)

-- gg - db.c: parse_mobile(): Clear MOB_NOTDEADYET flag on load.

-- gg - act.informative.c: sort_commands(): YUCK!  Removed the
		wacky sorted command structure in favor of a new
		one both smaller and more to the point.  Also
		killed YetAnotherBubbleSort(tm) in the process.
	ACMD(do_commands): Your brain will no longer stare at
		the 'if' statement and go 'Duh?'. Also fixed an
		extra \r\n pair on even multiples of 7.

-- gg - act.offensive.c: ACMD(do_order): Del <caminturn@EARTHLINK.NET>
		spotted an apparent left-over from Diku, 'org_room'.
		Other than 'order followers cast 'teleport' leader',
		I'm not sure what it was supposed to do...but it's
		gone now.

-- gg - boards.c: Board_display_msg()/Board_remove_msg(): Use
		!is_number instead of !isdigit to prevent commands
		like 'remove 2.ring' from affecting the messages on
		a board instead.

-- gg - objsave.c: Crash_idlesave(): Make the GET_EQ() loop match
		the one in Crash_crashsave(), instead of saving the
		first object in your inventory for every object you
		currently had equipped.

-- gg - db.c: parse_simple_mob(), parse_mobile(), parse_object():
		Use more macros wherever already defined for them.

-- gg - objsave.c: Crash_delete_crashfile(), Crash_clean_file(),
		Crash_listrent(): If we can't read the rent_info
		information, punt early before we use garbage.
		Also fixed yet another '> -1' => NOTHING issue.

-- gg - act.wizard.c: do_stat(): 'stat file character' isn't on
		the character list; use extract_char_final().

-- gg - act.informative.c: do_examine(): Fix not being able to
		examine the inside of a 2.foo container.

-- gg - handler.c: extract_pending_chars(): O(n^2) -> O(n)

6/25/2001

-- ae - handler.c: we forgot to add GET_CHA to affect_total(), noted
                by Del <caminturn@earthlink.net>.

-- ae - autorun: Peter Ajamian submitted a new autorun that is much more
                configurable and robust.  Information on it is contained
                autorun.README and the old autorun is still available as
                autorun.sh

6/26/2001

-- ae - db.c: Changed the order of the available zone commands in
                load_zone() to match the order of the switch statement
                in reset_zone().  This makes it easier to double check
                the lists against one another.  Also added a comment to
                each location pointing out that additions need to be made
                to both locations if a new zone command is added.

6/27/2001

-- ae - act.wizard.c, class.c: Todd Laycock <tlaycoc@orion.it.luc.edu>
                pointed out that with some 'careful' use of the advance
                command at the wrong time, people could end up snooping
                those of a higher level, and possibly introduce a nice
                little 'snoop loop'.  The addition of a 'snoop_check()'
                routine that checks for higher/equal levels of snoopers
                or snoop_bys and stops snooping if this is found was
                introduced and is called from advance_level().

-- ae - shop.c: Rick Glover <riglover@phjw.com> pointed out that the code
		in shopping_list() would rarely (if ever) give the correct
		results if someone was listing for an object and none were
		found.  This code chunk got rewritten and a check for any
		objects found was added.

-- ae - *.c: Reformatted  code to match what we do elsewhere (ie rather 
                than 'struct blah * data', we generally use 
                'struct blah *data'. 

-- ae - modify.c: Peter Ajamian <peter@pajamian.dhs.org> submitted a patch
                that would fix the occasional strange behaviour of the 
                prompt sometimes overwrites the last line of paged text in 
                compact mode.

-- ae - mail.c: The postmaster will no longer allow you to send mail to
                deleted characters.  This is done with a check called
                mail_recip_ok() which loads the character (if he exists) and
                checks for the PLR_DELETED flag.  Other checks can be added
                as desired.  Noted by Bob Castillo <castillo7@hotmail.com>

-- ae - handler.c: Andrey Fidrya <andrey@alex-ua.com> pointed out that
                while we check to ensure that a mob's prey is still in
                the world, that memory has the potential to be reassigned
                when the prey leaves the world.  As such, in the
                extract_char_final() routine, we scan the world for those
                hunting the char being extracted and stop the hunt.

-- ae - act.wizard.c: In the continuing series of bugs reported by
                Andrey Fidrya <andrey@alex-ua.com>, 'stat file <char>'
                (when done on a player in-game) will turf his objsave
                file.  Anyhow, the pfile should be the same as the in-game
                character regardless, so we may as well just stat the
                character and avoid the rent eating problem entirely.

7/1/2001 -- gcc 3.0 warning day. Part 1.

-- gg - act.informative.c: Prototype sort_commands_helper.

-- gg - comm.c: main(); db.c: parse_room(), fread_string():
		Fix bad usages of variable argument functions.

-- gg - act.informative.c: do_users(): Fix up 'format' usage so it's more
		concise and gcc can check the arguments to sprintf().

-- gg - ChangeLog: Fix bpl12 being released twice.

-- gg - ban.c: do_ban(): Change to allow gcc to check arguments to
		variable argument functions.

-- gg - comm.c, utils.h: Move mud_time_to_secs() prototype.

7/11/2001

-- gg - comm.c: Must not ever do function calls from an interrupt
	handler without making sure every function they call are
	reentrant. Think of the server as multi-threaded for it.

7/24/2001

-- gg - db.c: Remove useless 'rec_count' increment.

7/26/2001

-- gg - handler.c: extract_pending_chars(): Avoid free()'d memory
	when a chain of people die.

-- gg - comm.c, db.c: Save MUD time every 30 minutes and at
	shutdown using save_mud_time().

8/2/2001

-- gg - comm.c: new_descriptor(): Useless memset() removed.

8/14/2001

-- gg - act.informative.c: show_obj_to_char(): Die! Die! Die!
		All callers updated to new SHOW_OBJ_{LONG,SHORT,ACTION}
		mode parameters.
	show_obj_modifiers(): Split out of show_obj_to_char()
		for stuff like "(invisible)" and "humming sound."
	act.comm.c, structs.h: MAX_NOTE_LENGTH moved.

-- gg - Released patchlevel 19.

******** Patchlevel 20 ***************************************************

8/29/2001

-- gg - src/Makefile.lcc, doc/README.CYGWIN, src/structs.h: bpl19 -> bpl20

-- gg - src/structs.h: shop_rnum, shop_vnum

-- gg - fight.c: compute_thaco(): New function split out of hit().
		General: Gratuitous () removal.
		hit(): Made hit/miss logic easier to follow.

-- gg - act.informative.c, act.item.c, act.other.c, act.wizard.c, class.c,
	db.c, limits.c, objsave.c, olc.c, shop.c, spec_procs.c, utils.c:
		Remove redundant casts.

-- gg - shop.c: Clean up buffer sizes, use NULL and '\0' where
		appropriate, redundant cast removal, remove
		gratuitous parentheses.

-- gg - General: SPECIAL() and ACMD() generally assume their argument is
		writable and MAX_INPUT_LENGTH large so give an empty
		temporary buffer to scribble on.

-- gg - act.wizard.c: Prototype snoop_check().
	mail.c: Prototype mail_recip_ok(), merge two 'local functions'
		sections, 'const char *name' for mail_recip_ok().
	db.c, db.h: load_char(): 'const char *name'
	interpreter.c, interpreter.h: find_name(): 'const char *name'
	
9/13/2001

-- ae - world/mob/186.mob: mob #18610 had a flag problem -- too many flags
                that didn't exist.  Reported by Vladimir Nano
                <nano.vladimir@slsp.sk>

-- gg - shop.c: shopping_buy(): sprintf -> strcpy.

-- gg - db.c: check_bitvector_names(): New, checks for invalid bits set.
		check_objects(): Use check_bitvector_names().
		parse_mobile(): Check bitvectors loaded.
	Various: More GET_OBJ_* macros.
	constants.c: Count number of array entries for later checking.

10/1/2001 -- George's e-mail backlog clearing day.

-- gg - act.wizard.c: do_restore(): Don't set the skills of a do_restore'd
	mobile.  Noted by Albert Brauneis <Dajawu36@aol.com>.

-- gg - db.c: file_to_string_alloc(): Be nicer when trying to load text
	files that people are reading. Idea from Peter Ajamian.

-- gg - handler.c: create_money(): Don't be so repetitive.  At least until
	a variable argument strdup() function exists.  Suggested by
	Axiem j'Terre <axiem@SWBELL.NET>.

-- gg - act.movement.c: do_doorcmd(): Do SET/REMOVE instead of TOGGLE to
	avoid exacerbating any unsynchronized door problem. Suggested by
	Del <caminturn@earthlink.net>.

-- gg - Everywhere: xxx->in_room => IN_ROOM(xxx)

-- gg - class.c: title_female(): Extra implementor level removed as noted
	by Julian Buckley.

-- gg - interpreter.c: nanny(): Remove extra echo_on().  Noted by
	Del <caminturn@earthlink.net>

10/15/2001

-- gg - shop.c: ok_damage_shopkeeper(): Charmed shopkeepers aren't attack
	exempt.  Set the shopkeeper MOB_NOCHARM if you don't want it in
	that situation in the first place.

-- gg - spells.c: spell_charm(): Charisma-based spell duration.

-- gg - mobact.c: mobile_activity(): Check charmed follower limits and
	"leash" any mobiles with memory based on master's charisma.

10/20/2001

-- gg - mobact.c: Fix check to make sure we have a 'snarl' social.

-- gg - spec_procs.c: Reformatting. Change 0/1 to FALSE/TRUE.
		snake(): Fix poison frequency bug.
		cityguard(): Charisma modifications. Chris Epler's idea.

10/21/2001

-- gg - lib/world/{obj,zon}/: Various extraneous spaces, ~, and $ removed.

11/12/2001

-- ae - lib/world/shop/: Changed the shops from using hard-coded values for
		the item types to using the existing support for keywords.
		Also added a small (and dirty) conversion script written by
		gg to convert homegrown shops. (shop-convert.pl)

11/14/2001

-- ae - lib/world/shop: 30.shp, 54.shp: Removed Uncle Juan's shop (3008).
		He still exists in the mob file (3008) and the items he sold
		still exist (3012, 3013, 3014), but his shop and room (3056)
		don't.  Fixed an erroneous room in shop 5433, it had the wrong
		room listed therein.

-- gg -	db.c: file_to_string_alloc(): Check showstr_count, not showstr_vector.
	modify.c: show_string(): NULL showstr_vector after free().

-- gg -	shop.c, shop.h: shop->in_room should be room_vnum, not room_rnum.
		Stupid mixing of terminology!
	shop.c: ok_shop_room(): 'room' is a room_vnum.

11/15/2001

-- ae - shop.c: SHOP_FUNC() in shopkeeper special should call the function
		with argument (which is passed to it), not 'arg' (which is a
		global, and as such, going away).  Reported by Rich Paret
		<rparet@adero.com>.

-- ae - act.wizard.c: snoop_check() assumes a link exists.  It shouldn't.
		Reported by Kras Kresh <kras_kresh@hotmail.com>.

11/24/2001

-- gg - sysdep.h: New configurable CIRCLE_GNU_LIBC_MEMORY_TRACK.
	comm.c: main(): Call 'mtrace()' if C_G_L_M_T (see above) is on.
		Call destroy_db() when finished.
	db.c: free_extra_descriptions(), destroy_db(): New.
		reset_zone(), free_obj(): Some NOTHING/NOWHERE/NOBODY fixes.
		free_obj(): Use free_extra_descriptions().
	db.h: Prototype free_extra_descriptions(), destroy_db().
	shop.h: destroy_shops(): New.

11/26/2001

-- gg - comm.c, mail.h, spells.h, structs.h, utils.h: Minor quibble;
		negative numbers are actually unary expressions.

11/30/2001

-- ae - act.wizard.c: do_advance() had a ch and victim reversed in a flag
		check.  Oops.  Reported by Patrick O'Laughlin
		<pmolaughlin@home.com>

12/4/2001

-- gg - act.item.c: name_from_drinkcon();
	act.movement.c: ok_pick();
	act.wizard.c: do_at(), do_goto(), do_teleport(), do_stat_object(),
		do_load(), do_vstat(), do_zreset(), perform_set();
	db.c: check_start_rooms(), read_mobile(), read_object();
	graph.c: find_first_step();
	handler.c: char_to_room(), obj_to_room(), extract_obj(),
		extract_char_final();
	objsave.c: Obj_from_store();
	olc.c: do_olc();
	shop.c: shop_producing(), list_all_shops(), list_detailed_shop();
	spec_assign.c: ASSIGNMOB(), ASSIGNOBJ(), ASSIGNROOM();
	utils.h: various macros;
		Final (?) batch of NOBODY/NOWHERE/NOTHING changes.

-- gg - db.h: Export "top_of_*" variables.

12/10/2001

-- ae - spec_procs.c: magic_user() special tried to cast SLEEP in combat.
        	SLEEP cannot be cast in combat -- changed this to POISON
		instead.  Reported by Jason Ziegler <imaginaryfish@yahoo.com>
        limits.c, config.c: gain_exp() has a user definable bit of
		behaviour to stop mortals from levelling up to immort level
		if the mud admin desires.  The default behaviour is to allow
		this.  Enough people asked how to do this so it got added.

12/11/2001

-- ae - 25.obj: Fixed some keys that were demarked as food.  Doh.
                Reported by The Arrow <arrow@pileborg.org>

1/2/2002

-- gg - act.wizard.c: do_stat(): Actually use the 'name' variable.
		Reported by <arrow@pileborg.org>.

-- gg - utils.c: number(): Duh, messed up the comment by accidently swapping
		the 'from' and 'to' variables. Must've been late.
		Noted by Juliano Ravasi Ferraz <jferraz@linkway.com.br>.

1/10/2002

-- gg - db.c: renum_zone_table(): Better explanation of what it does, also
		noting some assumptions it makes.  Fixed to use room_rnum
		instead of just 'int'.

-- gg - utils.c: room_is_dark(): New, from the old IS_DARK() macro.
	utils.h: Change IS_DARK; tweak some bounds checking on macros.

-- gg - act.social.c: free_social_messages(): New.
	ban.c: Free_Invalid_List(): New.
	boards.c: Board_clear_all(), Board_clear_board(): New.
	boards.h: Prototyping the above.
	comm.c: main(): Big list of other memory to free on shutdown.
	db.c: free_text_files(), free_player_index(), free_help(): New.
		do_reboot(): Use free_help().
	db.h: Prototype the above three new functions.
	fight.c: free_messages(), free_messages_type(): New.
	mail.c: clear_free_list(): New.

-- gg - castle.c: castle_mob_spec(): New.
		assign_kings_castle(): Use castle_mob_spec().
		castle_virtual(): Use correct NOWHERE/NOTHING/NOBODY.

-- gg - shop.c: read_type_list(): Handle end markers a little better.

-- gg - castle.c: block_way(): room_vnum not room_rnum.
		From Juliano Ravasi Ferraz <jferraz@linkway.com.br>.

1/13/2002

-- gg - utils.c: get_line(): Handle \r in case the C library doesn't.
		Fixes running under Cygwin which doesn't remove it.
		From Patrick Dughi <dughi@imaxx.net>.

-- gg - structs.h: Move toward unsigned index variables.  Leave it as a
		configuration option, defaulting to signed, for now.

-- gg - act.wizard.c: do_purge(): Properly destroy equipment with
		delayed extraction behavior.  From
		Juliano Ravasi Ferraz <jferraz@linkway.com.br>.

-- gg - handler.c: extract_char(): Must remember the link-challenged.

-- gg - act.other.c, act.wizard.c, class.c, comm.c, db.c, db.h, handler.c,
		interpreter.c, limits.c, objsave.c: No longer twiddle the load
		room in save_char(), nor pass it as a parameter.  Any place
		needing to change it use GET_LOADROOM.  It's cleared upon login
		to prevent it from sticking around forever, unless PLR_LOADROOM
		is set. From Juliano Ravasi Ferraz <jferraz@linkway.com.br>.

1/14/2002

-- ae - doc: Added the new pdf versions of the documents that have outdated
                all of the prior text files.  With this patch level, most of
                the documents are (unfortunately) only available in PDF
                format, but with Patch Level 21, they will be available in
                text and html also.

1/15/2002

-- gg - db.c: parse_simple_mob(): Format correct number (3) of arguments.
		From Juliano Ravasi Ferraz <jferraz@linkway.com.br>.

-- gg - act.wizard.c: do_teleport(): Stupid logic inversion fixed.  This
		was introduced in an earlier change this patchlevel.

-- gg - act.wizard.c: do_load(): 'mob_vnum r_num'...? Fixed.  Another
		inter-patchlevel fix.

-- gg - act.wizard.c: do_purge(): When clearing objects from characters,
		also clear the ground afterwards.

-- gg - ban.c: Free_Invalid_List();
	db.c: free_text_files(), free_help(), free_player_index():
		Make usable even when not shutting down.

-- gg - act.informative.c: print_object_location();
	objsave.c: Crash_is_unrentable():
		'[<>]=? NOWHERE' is a nonsensical comparison.

-- gg - shop.c: destroy_shops(): Make usable without shutdown.

-- gg - Released patchlevel 20.

******** Patchlevel 21 ***************************************************

1/6/2002

-- gg - Makefile.lcc, structs.h: bpl20 -> bpl21
	README.CYGWIN: Reword to avoid changes every patchlevel.

-- gg - db.c: Remove write-only variable 'top_of_p_file'.
		From Juliano Ravasi Ferraz <jferraz@linkway.com.br>.

-- gg - licheck: Last-minute file rename broke printing license.

1/27/2002

-- gg - act.other.c, act.wizard.c, ban.c, class.c, comm.c, db.c, fight.c,
		house.c, interpreter.c, limits.c, modify.c, objsave.c,
		spells.c, utils.c, utils.h: Variable argument mudlog().

-- gg - comm.c, comm.h, handler.c, interpreter.c, modify.c: Replace
		SEND_TO_Q with varargs write_to_output().

-- gg - utils.c: strlcpy(): New.
		sprintbit(), sprinttype(): 'length' parameter.

-- gg - castle.c: tim(), tom(), dickndavid(): Use 'argument', not 'arg'.

-- gg - utils.c, utils.h, configure.in: Add proper autoconf support for
		strdup and strlcpy.

-- gg - sysdep.h, utils.c, utils.h: Do autoconf checks for str(n)casecmp
		and str(n)icmp.

-- gg - s/str_dup/strdup/ -- it's now an autoconf check.

-- gg - Variable argument send_to_char().
	comm.c: Remove sanity_check().

1/31/2002

-- gg - sysdep.h, conf.h.in: Added autoconf check for mcheck.h.

-- gg - structs.h: Remove unused 'last_direction' from mob_special_data.
		From: Juliano Ravasi Ferraz <jferraz@linkway.com.br>

-- gg - structs.h: Make mob_special_data.attack_type a byte.
	act.wizard.c: Cast attack_type to integer for array access.
		From: Juliano Ravasi Ferraz <jferraz@linkway.com.br>

-- gg - act.movement.c act.wizard.c comm.c handler.c magic.c,
		spec_procs.c spells.c utils.c: Remove redundant prototypes.

-- gg - class.c, fight.c, objsave.c, shop.c: Added some casts for
		C++ warnings, some of which I think I removed recently..

-- gg - act.movement.c: do_doorcmd(): Since LOCK_DOOR is no longer
		a toggle and does what it says, lockpicking needed a
		new TOGGLE_LOCK macro to work properly. (Unless you
		always wanted to pick the lock locked, that is.)

-- gg - structs.h: 'struct index_data' needs to use the *_vnum types.
		From: Anton Graham <bladehawke@amaesing.com>

-- gg - spec_procs.c: SPECIAL(dump): Use SCMD_DROP for do_drop() call.
		From: Juliano Ravasi Ferraz <jferraz@linkway.com.br>

-- gg - interpreter.c: find_name() and get_ptable_by_name() did the
		same thing.  Delete find_name() as it doesn't relate
		to other functions as much.
		From: Juliano Ravasi Ferraz <jferraz@linkway.com.br>
	db.c: get_{ptable,id}_by_name(): Don't use one_argument since
			names don't have whitespace anyway.

-- gg - db.h: Remove 'arg', 'buf', 'buf1', and 'buf2' global buffers.

-- gg - fight.c: death_cry(), damage();
	spells.c: spell_locate_object():
		->in_room to IN_ROOM()

-- gg - act.wizard.c: do_restore(): Allow people to restore themselves.
		That's what I get for changing my mind at the last minute
		for '>=' instead of '>'.

-- gg - perl -i -pe 's/([^_])number\(/$1rand_number\(/g;' *.[ch]
		Renamed number() to rand_number() to avoid shadowing variables
		and also avoid a BSD function reportedly with that name.

-- gg - Fixed -Wshadow warnings, most having to do with 'index'.

2/15/2002

-- gg - act.movement.c: Removed unused DOOR_LOCK macro.
		From: Juliano Ravasi Ferraz <jferraz@linkway.com.br>

-- gg - interpreter.c: special(): Delayed extraction can result in dead
		mobiles during special procedure check so avoid anyone
		to be removed.
		From: Welcor <welcor@DUNE.NET>
	fight.c: perform_violence(): Likewise.

2/20/2002

-- gg - comm.c: vwrite_to_output(): Fix sign/unsign warning.
		write_to_descriptor(): Not worth using varargs here.
	comm.h: Update write_to_descriptor() prototype.

3/3/2002

-- gg - act.item.c: give_find_vict(): Use skip_spaces().
		From: Juliano Ravasi Ferraz <jferraz@linkway.com.br>

-- gg - fight.c: make_corpse(): Fix odd test.  "A || (!A && B)"
		From: Juliano Ravasi Ferraz <jferraz@linkway.com.br>

-- gg - act.item.c: do_put(): Remove extra-dimensional bags.
		From: Juliano Ravasi Ferraz <jferraz@linkway.com.br>

-- gg - utils.h: Fixed unused OBJAFF_FLAGGED.
		From: "Kras Kresh" <kras_kresh@hotmail.com>

-- gg - shop.c: Give discounts (or price-inflation) based on charisma.

-- gg - act.wizard.c: do_advance(): Run autowiz when demoting gods.
	class.c: do_start(): Reset max hit/mana/move but don't reset playtime.
	db.c: init_char(): Use macros for more structure accesses.  Don't set
		hit/mana/move for characters here, but do set them for the
		first character (implementor). Also comment the height/weight
		values better.
	limits.c: check_autowiz(): Rename to run_autowiz() and change to run
		instead of test.
        gain_exp(), gain_exp_regardless(): check_autowiz -> run_autowiz.

3/20/2002

-- gg - cnf/aclocal.m4: Use 'official' method of a 3rd argument to AC_DEFINE()
		to generate autoheader hints instead of a local hack to
		autoheader itself.
	cnf/configure.in: Add checks for more functions, more prototypes, and
		mcheck.h.

-- gg - conf.h.in: Regenerated due to AC_CHECK_PROTO changes.

-- gg - act.wizard.c: do_stat_character(): Adjusted formatting of output.

-- gg - alias.c: write_aliases(), write_aliases(); objsave.c: Add buffer
		length argument	to get_filename().
	read_aliases(): Error-check fscanf() results. Avoids infinite loop
		while sucking down memory.
	utils.c: get_filename(): Need a buffer length argument to write
		proper amount.
	utils.h: get_filename() prototype adjustment.

-- gg - structs.h: title_type is no longer used.

4/9/2002

-- gg - castle.c: king_welmar(), castle_twin_proc();
	comm.c: process_output();
	db.c: parse_room(), char_to_store(), fread_string(), file_to_string();
	handler.c: create_money();
	shop.c: shopping_buy();
	spec_procs.c: mayor(), puff();
	utils.c: mudlog():
		String buffer size assumption comments.

-- gg - configure: Regenerated from configure.in

-- gg - act.informative.c: show_obj_to_char(): Might as well use snprintf().
	db.c: global: Remove unused spell_info[] extern;
		load_help(): Avoid help entry overflows.
	shop.c: evaluate_expression(): Increase 'name' buffer size.
	act.item.c: name_from_drinkcon();
	act.wizard.c: perform_set();
	ban.c: load_banned(), do_ban();
	comm.c: make_prompt(), new_descriptor(), perform_subst();
	db.c: save_char();
	interpreter.c: nanny();
	mail.c: store_mail();
	mobact.c: aggressive_mob_on_a_leash();
	modify.c: show_string();
	shop.c: evaluate_expression(), shopping_list();
	spec_procs.c: cityguard();
	spell_parser.c: say_spell(), find_skill_num();
	spells.h: struct spell_info_type;
	utils.c: strlcpy():
		String buffer size comments.

-- gg - class.c; spec_procs.c: guild_guard(); structs.h: Fix use of integers
		for room virtual numbers in guild_info[] array.
		From: Edward J Glamkowski <eglamkowski@ANGELFIRE.COM>
	class.c: find_class_bitvector();
	act.informative.c: do_who(), do_users():
		Make find_class_bitvector() use parse_class() and loop itself.
		Partially from: Edward J Glamkowski <eglamkowski@ANGELFIRE.COM>

-- gg - comm.c: make_prompt(): People with 'disp none' need prompt[]
		cleared first.

-- gg - utils.c: mudlog(): Fixed parenthesis lost in reformatting.
		From: kras_kresh@hotmail.com

4/15/2002

-- gg - Makefile.in, conf.h.in, sysdep.h: Check for snprintf().
	bsd-snprintf.c, bsd-snprintf.h: BSD-licensed replacements for
		snprintf() and vsnprintf() for platforms lacking them.
	cnf/configure.in: HAVE_(V)SNPRINTF checks.
	configure: Regenerated.

******** Patchlevel 22 ***************************************************

4/30/2002

-- gg - Makefile.lcc, structs.h, constants.c: bpl21 -> bpl22

-- gg - class.c: level_exp(): Fixed thief experience progression to be
		less jumpy. Old: 10k 20k 30k 70k.

-- gg - boards.c: find_board(): Check immortals' inventories for boards
		so they can carry them around.  Requires the config.c
		setting 'load_into_inventory = YES' to actually be useful.

5/1/2002

-- gg - shop.c: assign_the_shopkeepers(): Avoid assigning 'shop_keeper'
		special procedure to SHOP_FUNC().
		From: "Kras Kresh" <kras_kresh@hotmail.com>

-- gg - act.movement.c: ok_pick(): Actually use dex_app_skill[].p_locks.
		From: Edward J Glamkowski <eglamkowski@ANGELFIRE.COM>

-- gg - objsave.c: gen_receptionist(): Make random actions work again.
		From: "Kras Kresh" <kras_kresh@hotmail.com>

-- gg - house.c: House_list_guests(): Print out when all guests listed
		are actually deleted instead of leaving empty "Guests:".
		From: "Bob Castillo" <castillo7@hotmail.com>

5/2/2002

-- gg - handler.c: affect_total(): Bring affect_total() in line with
		do_set()'s handling of godly statistics.
		From: Edward J Glamkowski <eglamkowski@ANGELFIRE.COM>

5/3/2002

-- ae - act.informative.c: do_weather(): added info on the actual numbers
		for god+.
		From: Edward J Glamkowski <eglamkowski@ANGELFIRE.COM>

5/17/2002

-- gg - utils.c, utils.h: get_filename(): 'name' should be 'const char *'.

-- gg - interpreter.c: nanny(): Remove aliases upon self-delete.
	alias.c: delete_aliases(): New.

-- gg - conf.h.win: Updated to new 'configure' checks.
	sysdep.h: Aliases for (v)snprintf and MAX_PATH for Windows.

5/19/2002

-- ae - building.tex: corrected the order of UNDERWATER and FLYING sector
                types.  From: nano.vladimir@slsp.sk

-- ae - shop.c: list_detailed_shop(): A few \r\n markers were missing in the
                output, specifically before the Shopkeeper:, Buys:, and 
                Buy at: lines.
                From: Edward J Glamkowski <eglamkowski@ANGELFIRE.COM>

6/13/2002

-- gg - doc/coding.doc: Beginnings of Chapter 2.

6/17/2002

-- gg - doc/coding.doc: Sections 2.2.1 (partial) and 2.2.3.  Some additions
		to section 2.4.5. Also ran it through ispell.

6/21/2002

-- gg - doc/coding.doc: Finish (?) section 2.4. Add TODO list.

-- gg - doc/coding.doc: Finish section 2.2.2.

-- gg - handler.h: Remove prototypes for non-existant functions:
		get_obj, get_obj_in_list, Crash_get_filename.

-- gg - comm.h: Remove prototype for non-existant function: perform_to_all.

6/24/2002

-- gg - doc/coding.doc: Finish section 2.2.1.

6/25/2002

-- gg - doc/coding.doc: Finish sections 3.6 and 3.7.

6/28/2002

-- gg - act.informative.c: look_at_room(): Use '%s' format for rooms.

-- gg - act.informative.c: list_one_char(): Missed a '+1' when converting
		UPPER() usage.  Found by Ken Ray <kenr86@HOTMAIL.COM>.

9/06/2002

-- ae - building.tex: Fixed a double "action bitvector" description (the
		second was a typo for "affection bitvector").
		From Ken Ray <kenr86@hotmail.com>

-- ae - 30.obj: Changed the sdesc of #3003 (firebreather) to 'bottle'.
		From Ken Ray <kenr86@hotmail.com>

-- ae - Various READMEs: Changed 'circle30bpl12' to be generic, and fixed some
		small typos. From Julian Buckley <caniffe@caniffe.net>

9/25/2002

-- gg - act.other.c: do_display(); structs.h: Auto-prompt display.

-- gg - act.wizard.c: do_wiznet(): Add missing "%s" formats in send_to_char().

-- gg - boards.c: Board_remove_msg(): Clear orphaned board message when
		shifting the list down.  Caused free() problems on shutdown.

-- gg - comm.c: make_prompt(): Reorganization to make adding bits easier.

-- gg - act.comm.c: do_gen_comm(): Missing \r\n at end of message.
	From: "Thomas Arp" <t_arp@stofanet.dk>

-- gg - act.item.c: perform_put(): Don't allow cursed items to be put into
		a container not in the character's inventory.

-- gg - comm.c: affect_update() is in magic.c, not spells.c
		From: Mathew Earle Reuther <graymere@zipcon.net>

-- gg - act.other.c: do_gen_tog(): Add 'bitvector_t' comment on variable.
		From: Mike Stilson <mike@VELGARIAN.SYTES.NET>

-- gg - act.other.c: do_quit(): Fix load room setting to virtual.
		From: "The Fungi" <fungi@yuggoth.org>

-- gg - shop.c: list_detailed_shop(): Fix '>= 0' check to be '!= NOBODY'.
		From: "The Fungi" <fungi@yuggoth.org>

-- gg - act.informative.c: do_where(); act.wizard.c: do_show();
		spec_procs.c: list_skills(); utils.c: sprintbit():
		'nlen' should be 'int', to check return value of snprintf().
		From: Thomas Arp <t_arp@STOFANET.DK>

-- gg - shop.c: customer_string(): Loop reorganized to be cleaner and
		remove a pointless use of strlcpy().

10/03/2002

-- gg - interpreter.c: perform_dupe_check(): Make immortals that have switched
		into disconnected mortal bodies do a return instead of being
		disconnected.  Noted by: "Kras Kresh" <kras_kresh@hotmail.com>

-- gg - magic.c: mag_unaffects(): Make SPELL_HEAL special-case into a generic
		solution instead.

-- gg - interpreter.c: nanny(): Destroy d->character if player answers 'N' to
		"Did I get that right?" prompt.  There may be lingering
		information from a deleted character.
		From: "Kras Kresh" <kras_kresh@hotmail.com>

-- gg - shop.c: shopping_list(): Only display "none of those found" message
		if actually asked to search for an object.
		From: "Ken Ray" <kenr86@hotmail.com>

-- gg - comm.c: game_loop(): Change handling of process_output() and
		->has_prompt.
		vwrite_to_output(): Truncate text to fit on overflow instead
		of throwing it away.
		write_to_descriptor(): Return number of bytes written.
		process_output(): Keep data on socket write block.

******** CircleMUD 3.1 ***************************************************

11/15/2002

-- gg - comm.c: echo_on(), echo_off(): "%s" format strings, though not
			necessary.
		make_prompt(): Revert changeset #1.115.
		process_output(): Cast 'result' to avoid unsigned warnings.

-- gg - structs.h: Force 'byte' to signed char.  Some platforms use
		an unsigned char by default.

-- gg - limits.c: gain_condition(): Cosmetic return -> break change.

-- gg - lib/text/credits: Added Alex Fletcher, George Greer, and Daniel
		Koepke. Changed jelson@ address to cdev@.

-- gg - shop.h: Make it more obvious the WILL_* #define values are
		bitvectors and not simply counting.
		From: Carlton Colter <carlton@COLTER.COM>

-- gg - comm.c: process_output(): Correctly switch to large buffer
		when text would just barely fit in the small buffer
		then forget to change.
		From: Yoram Harmelin <yoram.harmelin@ema.fr>

-- gg - cnf/configure.in, cnf/aclocal.m4: Added -fno-builtin detection
		to fix prototype testing.  Functions such as bzero(),
		printf(), and fprintf() were receiving false negatives.
	configure: Regenerated.

11/17/2002

-- gg - utils.h: Make TOGGLE_BIT "x^=y" instead of "x=x^y" to avoid
		a VC++ warning.

-- gg - house.c: House_delete_file(): Make 'vnum' a 'room_vnum' type.

-- gg - castle.c: castle_mob_spec(): Use 'mob_vnum' type.

-- ae - Updated docs, and added coding.tex/coding.pdf

-- gg - autorun, autorun.cmd, autorun.pl, autorun.sh: Remove '3.0'
		version number, to avoid needing to update it.

-- gg - Makefile.lcc, constants.c, structs.h: bpl22 -> 3.1

-- gg - Makefile.amiga, Makefile.arc, Makefile.in, Makefile.lcc, Makefile.msvc,
		Makefile.os2, Smakefile, magic.c, structs.h, Makefile.in:
		Remove '3.0' version numbers to avoid updates.

-- gg - util/Makefile.in: Remove '3.0' version numbers to avoid updates.

-- gg -	lib/world/README: Remove '3.0' version numbers to avoid	updates.

-- gg - lib/text/greetings, lib/text/imotd: Change 3.0 to 3.1.

-- gg -	doc/README-NOW: Deleted.

-- gg - doc/README.AMIGA, doc/README.ARC, doc/README.BORLAND, doc/README.CYGWIN,
		doc/README.MSVC4, doc/README.MSVC5, doc/README.MSVC6,
		doc/README.OS2, doc/README.UNIX, doc/README.VMS,
		doc/README.WATCOM, doc/README.WIN: Remove '3.0' version numbers
		to avoid updates.
