shared the concept of classes, objects, and inheritance, but also featured multiple inheritance in both classes and objects, and dynamic binding of objects at runtime. ScriptX had no primitive data types; even integers were defined as objects. All objects were instances of a class, and classes themselves were instances of a MetaClass object. As in LISP, there were no statements, and every line in a ScriptX program was an expression that returned a value. ScriptX used garbage collection running in a separate thread to handle memory, and featured an object store for permanent collections. ScriptX supported multi-threading but not multiprocessing, and offered scripting control of lower level operating system features such as events and concurrently running threads. Early multimedia development tools lacked techniques for synchronizing presentations, except by polling the operating system's own clock. Ray Valdés, writing in Dr. Dobb's Journal, noted that, "a key ScriptX feature is a Clock class, which provides facilities for synchronizing timed sequences of actions required by multimedia apps." Following the closure of Kaleida Labs, Wainwright went on to serve as the principal architect of MaxScript, a scripting language for 3D Studio Max that has been used to process content for gaming and 3D applications such as the Maxis Sims programs. Thus, ScriptX can be considered a progenitor of MaxScript, which closely resembles ScriptX. Example The following code illustrates the unique syntax of the ScriptX language. It is part of a class that handles mouse tracking in a larger program written by Don Hopkins. The sendTrackDrop method sends a trackDrop message to another object. method sendTrackDrop self {class Tracker} service target x y data doit -> ( local coords := new Point repeat while (true) do ( if (canObjectDo target trackDrop) then ( return (trackDrop target service x y data doit) ) else ( coords.x := x coords.y := y local t := findFirstAtPoint target coords if (t == empty) do return false x := x - t.x y := y - t.y target := t ) ) ) This code is responsible for forwarding trackDrop messages between objects, and illustrates a number of uncommon features of the ScriptX language. Of minor note of interest is the := assignment operator, like that of Pascal. Variables are marked local to determine their scope. This is the opposite of most modern languages, where "local" is the default scope, and such a declaration would be redundant. In conventional