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.
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.
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.
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.
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.
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.
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.
The parsing of '$' has been changed: $thing is now translated to "gObjlist.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.
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.
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.
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.
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).
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.
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".