CHANGES LOG
$Id: CHANGES,v 1.8 2004/03/14 08:50:40 daveron Exp $

Unless otherwise noted, text copyright Joshua Macy, 2001. Distributed
under the Python license.  Add to or annotate this file if you like, but
please don't confuse people by altering any of the existing text in such
a way that it might be misattributed.

March - dusty
lib/moopsock.py lib/moop.py lib/moopdirect.py
 - fix to help db loading

February 26, 2004 - dusty
CREDITS:
 - gave crdit where credit is due
moop.py
 - bugfix in raise within move()
moopsock.py
 - useSelect removed. select fixed under win32

February 12, 2004 - dusty
CHANGES:
- updated formating to make easier to read, 78 columns max

ALL:
- Reorganized file layout. Added bin, lib, and var directories.

configparse.py
- Checked in initial version.

February 11, 2004 - dusty
ALL:
- all text files in CVS should contain UNIX style line endings.
  http://cocoon.apache.org/community/committer.html#dos2unix
  updated: README bootstrap.txt config.py license.txt marksub.py
  moop.dat.dist moop.py moopdirect.py moophelp2html.py moopparse.py
  moopsock.py msg.py qsplit.py start staticobj.py tostr.py unittest.py
  xml_pickle.py

November 2003 - dusty
INSTALL:
- updatedinstructions to reflect recent changes in moop.
- fixed an occurance of poo to moop.

moop.py:
- fixed a bug that prevented moophelp.hLoad() from working properly.

moophelp.py
- fixed up some code involving hLoad() put back trying to make a new db
  if file doesn't exist, but not on depickle error. 

October 2003 - dusty
bootstrap.txt:
- Fixed bug 678215.

moop.cfg:
- now exists.

moop.py:
- outfix now replaces all ocurences of /n with clients default EOL not
  just the last one.
- default line ending is /r/n instead of /n for those with 'dumb' telnet
  clients, smart ones should still work.
  NOTE: while writing code (hard or soft) always use /n to denote
  newlines, moop will change these for the client automaticly.

moopd.py:
- this runs moop as a background process automaticly reloading database
  from last save and reloading itself in the case of an unhandled
  exception. Running moopsock directly will only bail out in that case.

moopsock.py:
- password prompt does not echo.
- reads config from moop.cfg.
- prints version as first line of output when client connects.
- allows users to make a new account at login (requires setup, does not
  work with default config).
- added support for moopd.py

February 26, 2001
bootstrap.txt:
- replaced str + str form of concatentation with % interpolation.  Not 
  only does this tend to result in more readable strings, as well as 
  being more efficient for long strings, but it eliminates some
  exceptions caused by None + string in Python 2.0.
- replaced references in strings to POO with MOOP

moop.dat, moop.dat.dist: 
- recreated with Python2.1a (Python 1.5.2 pickle no longer compatible)

moop.py: 
- fixed permission bug that I introduced when simplifying __setstate__ and 
  __getstate__ (it turns out that the indirect updating of properties 
  x.__dict__['key'] = value is needed in these to skate around some of the
  __setattr__ permission checking code.

February 7, 2001
moop.py:
- Believe it or not, from x import * is illegal (and documented as such, 
  although not enforced) except at module scope, so doing it within a function  as makeSafeGlobals does here is probably going to fail as of Python 2.1, for
  reasons that have to do with the nested scoping rules.  Eliminated from x
  import * where possible.
- Narrowed the scope of some except: pass clauses so as not to mask unexpected
  exceptions

moopdirect.py:
- in AskYesNo, added string.upper call to simplify tests.
- Changed tabs to 4 spaces, globally, to match most common Python editing 
  environments.  Sorry, but mixing tabs with spaces is just evil.
- reformated inline blocks for better Python style.  "There's only one way to
  do it."
- Fixed menu choice so that it doesn't crash if the user enters a non-numeric
  response
- Changed menu to be a triple-quoted string.  I'll probably change this to be
  dictionary driven soon.
- Fixed up setting of treasury amount so that non-numerics don't crash, and 
  that hitting enter announces that the amount will be unchanged.

msg.py: 
- replaced add_s and noun_exceptions with more robust pluralize from plural.py
- moved comments and tests into docstring
- added doctest module and implemented self-test

qsplit.py:
- replaced deprecated references to regex with re. Changed syntax as needed.
- added doctest to document use and regression test change.

unittest.py, unittestgui.py:
- added for unit testing

******************************************************************
Following this point, all changes and text are copyright AccesSoft:
******************************************************************

October 8, 1999
Changed the name to MOOP (MUD, Object-Oriented, Python) and changed file names
and all references to the old name.

October 1, 1999
moopparse.py - self.contents() searched for cmd (so, say, if you were carrying
  a hammer with a cmd 'bonk <obj>', and you 'bonk here' it would work.)
bootstrap.txt - $agent.description now shows what the agent is carrying (a-la
  room contents, but with names only)

September 28, 1999
moop.py - time module now accessable (NOTE: this means any calls to time() or
  ctime() need to be qualified [i.e. time() -> time.time())

September 26, 1999
moop.py - added a recursion flag to the getprop function (defaulting to
  'recurse')

August 4, 1999

moop.py - show (msg, dict, 2) does a broadcast but doesn't show the user
  (the opposite of show (msg, dict, 0))
bootstrap.txt - added "drop" support for exits (broadcasts in the destination)
moophelp.dat - added 'help exits' info

August 3, 1999

moophelp.dat - added "drop" variants, updated "@force", "say", "emote",
  programming, added "@commands", added "@contents", added "@exits"
bootstrap.txt - added drop <obj> in/into <obj>, a-la "put"
bootstrap.txt - added @whichcmd [<obj>.]<cmd> per docs, @commands, @contents, @exits
bootstrap.txt - added object id's to @who
bootstrap.txt - added 'success' messaging, exit locking, and 'fail' messaging

August 2, 1999

moopparse.py - Removed substring matching, changed __findname to return first
  match.
moopparse.py - Fixed a minor problem with the object regular expression.
moopparse.py - Altered regular expressions to eat whitespace.
moop.py - Added security to do_cmd (caller must be either the same as the user
  or a wizard, preventing @force for regular users)

August 1, 1999

moopparse.py - Changed ';' to be emote.
bootstrap.txt - Changed 'emote' and 'say' to not modify punctuation (quotes,
  periods, etc.)
moopsock.py - Required '@shutdown' to be executed by a wizard.
bootstrap.txt - Added '@help' which acts the same as help.
moopparse.py - Now uses the 're' Python library.
moopparse.py - Now uses minimal-matching wildcard matching (.*?) so that '@page
  user with message with text' would function properly.
bootstrap.txt - Added @force as documented (and which also supports '=' as a
  seperator.)
bootstrap.txt - Added #0.login and #0.logout functions (simple.)
bootstrap.txt - Added @setprompt command (need to add help changes.)
moop.py - Prevented obj.name being anything but a string (should probably
  convert to a string for consistency's sake...as well as put in some logic to
  prevent special characters as well.)
moopparse.py - Allowed case-insensitive/substring matching of object names
  (narrowing down the criteria if multiple matches are found.)
