September 15, 1998: Version 1.0b10
April 24, 1998: Version 1.0b9
April 20, 1998: Version 1.0b8
October 24, 1997: Version 1.0b7
August 14, 1997: Version 1.0b6
August 3, 1997: Version 1.0b5
August 2, 1997: Version 1.0b4
June 29, 1997: Version 1.0b3
June 28, 1997
June 10, 1997: Version 1.0b2
June 5, 1997
May 21, 1997: Version 1.0b1
April 30, 1997: Version 0.9.3
Updates to poo.py effect the following:
April 28, 1997: Version 0.9.2.3
Fixed yet another bug in parsing of <val> (sigh).
Fix involves update to
pooparse.py and
qsplit.py. Hopefully, all is well with
the parser now!
April 16, 1997: Version 0.9.2.2
A minor bug fix (typo correction) in
pooparse.py.
April 14, 1997: Version 0.9.2.1
Oops -- there remained a bug in the handling of <val> when
quotes were involved. This is now fixed (in
pooparse.py).
April 13, 1997: Version 0.9.2
More bug fixes, this time in
poohelp2html.py, as well as
pooparse.py and
poosock.py:
March 29, 1997: Version 0.9.1
A number of bug fixes in poo.py and
pooparse.py:
March 29, 1997: Version 0.9.0
I'm very close to declaring a feature freeze for version 1.0.
A new module (msg.py) has been contributed by
Amit Patel, and a new function (show()) has been added
which uses it to simplify output messages. Another new module
(marksub.py) has also been added; it
adds markup codes for things like bold, italics, etc. for
clients that support it. (See help on @markup for details.)
The Althor server
will be rebuild from scratch using the new code and core database.
March 24, 1997
The POO parser system has been completely redone, and is significantly
more sophisticated. Functions are no longer directly invoked as
commands; instead, a special command structure (created with @cmd and
deleted with @delcmd) is used to define command syntax, and indirectly
invoke the appropriate function. This is a very powerful and flexible
mechanism, and it also makes error-trapping easier. In addition,
functions now have an "x" flag; if it is set to 0, then the function
cannot be invoked from Python code, but only directly by a command.
I've also significantly enhanced and fixed up the core database (and the bootstrap file from which it is generated). As soon as I get Amit's messaging system rolled in, POO will begin to stabilize at last.
March 2, 1997
The Althor POO test
site has resulted in rapid changes to numerous to enumerate.
Today, the POO source files have been updated, a clean new core
database has been posted (along with its
bootstrap file), and an
Implementor's Guide has been added.
POO is starting to stabilize, but further changes are expected as
testing continues.
February 9, 1997
A beta-test server has been found which will be available through May.
The site is
althor.netspace.org 4000.
Thanks to Zack Roadhouse, the kind system administrator, POO is making
progress once again. Several minor bugs have been fixed, the core
database has been expanded, and a Builder's
Guide has been written.
December 13, 1996
A bug which was harmless under Python 1.4b3 made itself known under 1.4
(final). For its efforts, it has been eradicated. The change involved a
couple lines in the Prop class of poo.py.
October 1
All output to players is now routed through an Outfix class,
which fixes line endings and performs word wrap on long lines. The
line-ending fix was sorely needed for some telnet clients. The changes
are in poo.py and poosock.py.
September 26
A security hole was discovered and reported by Ka-Ping Yee. The hole
allowed users (with programming privileges) to gain access to the
standard __builtins__ via the string module, from which
one can wreak all sorts of mischief. This hole and others of the same
genre have now been eliminated by an update to poo.py.
September 20
A bug was discovered in poo.py. For some reason,
it didn't show up under Python 1.3, but in 1.4b3 it became apparent.
There is also a cosmetic problem with the prompt when using poodirect
under MacPython 1.4b3; this will hopefully be fixed soon.
August 20
Main programs now display a connect.txt file
when you connect. The core $login routine also attempts to display a
poofiles:welcome.txt message when you successfully log in. A
$wiz.@opassword command has been added to set other character's
passwords, and the output of poosock is now a neatly formatted log file.
August 19
A new page detailing the differences between POO
and MOO has been added. The verb search path has been inverted.
Support for "@" has been added (gets converted to "at_"), and
out-of-character commands have been renamed appropriately. (In
particular, be sure to now use @ex instead of ex.) The
programmer flag is now enforced. Functions $login and $logout are now
called (if they exist) when a player connects or disconnects. A
restricted open() function has been added; it can only access files
within a "poofiles" subdirectory.
User functions have been divided into several base objects: $user, $builder, $coder, and $wiz, each subclassed from the previous one (in that order). The get functions (on $user and $container) have been updated, and @ex has been substantially improved.
August 16
The implementation of properties has been changed to plug a serious
security hole. This changes the structure of the database; if you have
an old database you want to keep, ask
me for a conversion program. It does not change the appearance or
use of POO commands, however.
August 14
The parsing of '$' has been changed: $thing is now translated to
"gObjlist[0].thing". gObjlist no longer contains any string keys or
duplicate values, and new $ references can be added simply by adding
properties to #0. A poo.gUpdate() routine has been added, which updates
objects in a gUpdateList. Objects have a CheckUpdate() method which
should be called when a User connects or disconnects; this method adds or
removes them from gUpdateList, as appropriate. To demonstrate updating
objects, the widget now worbles every thirty seconds or so.
August 13
Various bug fixes to the security routines have been implemented. Most
importantly, the parser was bypassing the security, allowing users to
read or execute properties specified in their command. New functions
getperm and setperm (see the online help) have been added. $user has
been moved into the "Void" (a storehouse for generic ancestors), and the
game is now tested with Tim (a wizard) and Lancelot (a normal user).
Other enhancements to the database: see $user.delprop, $user.look,
$place.predesc, and $place.postdesc. Passwords are now encrypted.
Functions whose owner is set to None are executed with the
permissions of the caller.
August 12
As a quick improvement, I've changed POO's output method. Users (or
their functions) can now use the normal Python "print" command, and its
output will be properly routed to the user, whether they are connected
via poodirect.py or Telnet to poosock.py. An annoying side-effect is
that the prompt no longer appears in the right place for network users,
but I think we can cope with this later. Within a function,
"caller.tell('spam')" is now equivalent to "print 'spam'".
Also, Trevor Clarke has provided support for allowing and banning certain host/domains in poosock.py.
Moreover, I've tentatively finished protection for both reading and writing properties (including functions). And functions execute with the permissions of their owner, as in MOO. Much testing is needed, however.
August 11
I've begun implementing permissions on objects and properties. Properties
are now stored via a small class structure, which keeps an owner and
permission bits in addition to a value. Permission checks for adding and
modifying properties should be fully implemented; checks for reading
properties are not yet complete. The core database has been converted to
the new property format. A "delete" function has been added to completely
destroy an object.
August 10
The MOO parser has been mostly duplicated, causing rather drastic changes
in the way functions are used as verbs. Verbs now accept a single argument,
a CmdRec; if this argument is named "cmd" in the function definition, then
its fields (caller, dobj, etc.) are automatically copied into local variables
of the same name for easy reference within the function. For examples,
list self.edit, self.look, $exit.call, etc. Also, since objects are now
searched for appropriate verbs, the player's "call" method has been removed,
and objects' callroutines have been renamed to simply "call."
I've also added a help system, written mostly by Trevor Clarke. The help database is still rather small (of course!), but it does explain the basic object-creation commands. I'll try to keep that up to date if syntax changes any further (though I don't expect to change much now).
August 9
I've started changing certain POO names and functions to follow MOO
conventions. In particular, "container" is now called "location".
I'm also moving certain functionality (e.g., keeping track
of object locations) from the game methods to the engine itself. Also in
this update are various minor improvements, such as a ".da" editor
command to delete all lines.
August 8
I've implemented security measures. User commands and functions now
execute in a restricted environment, and have access only to modules and
functions explicitly provided by the engine. This should make it much
harder to hack into a host system via a POO server.
I've also added somewhat better argument parsing; in particular, quoted strings now get parsed as a single argument. (Try say "This is cool" for an example.) As a side-effect, you now have to quote the function definition when using the newfunc command.
While I was at it, I added a set command as a more convenient way to set properties. For example, you could use: set breakfast.desc "Spam, spam, spam, spam, eggs, and spam." to set the description of an object called "breakfast".