RoseBind.mesa
Copyright © 1985 by Xerox Corporation. All rights reserved.
Barth, September 26, 1985 11:55:39 am PDT
Spreitzer, September 29, 1985 1:51:15 pm PDT
DIRECTORY Core, Rope;
RoseBind: CEDAR DEFINITIONS = BEGIN
Theory
This interface talks about linking behavior to structure. The interface RoseBehavior has details about behavior.
Every cell type usable by Rosemary as a leaf is in some behavior class, given by the cell type's RoseBind.classKey property, if it exists; otherwise it is derived from the cell type. There are two Cedar modules that implement the details of a behavior class (they may implement the details of others too). The name of the Cedar module which the implementor of the cell class behavior writes is derived from the class module name root by appending "RoseDetails". The name of the Cedar module which the Rosemary translator writes, the private implementation module, is derived from the class module name root by appending "RosePrivate". The module that implements a behavior class is assumed to depend on a Cedar definitions module, whose name is derived from the class module name root by appending "RoseDefs". The definitions module and the private implementation module are generated by the Rosemary translator, and depend only on the interface information in the public wire prototype of the behavior class. The details of the generation are documented in RoseBehavior.mesa.
[Artwork node; type 'ArtworkInterpress on' to command tool]
The cell types in a behavior class are distinguished from one another by their behavior characteristics, which are found on the RoseBind.argsKey property.
Implementation
ROPE: TYPE = Rope.ROPE;
classKey: ATOM-- = $RoseClassName--;
argsKey: ATOM-- = $RoseArgs--;
variableWire: ATOM-- = $RoseVariableWire--;
switchWire: ATOM-- = $RoseSwitchWire--;
complexDrive: ATOM-- = $RoseComplexDrive--;
simpleDrive: ATOM-- = $RoseSimpleDrive--;
testerSwitchWire: ATOM-- = $RoseTesterSwitchWire--;
testerComplexDrive: ATOM-- = $RoseTesterComplexDrive--;
testerSimpleDrive: ATOM-- = $RoseTesterSimpleDrive--;
BehaviorClass: TYPE = REF BehaviorClassRec;
BehaviorClassRec: TYPE;
EnsureBehaviorClass: PROC [name: ROPE, publicWirePrototype: Core.Wire, moduleNameRoot: ROPENIL] RETURNS [bc: BehaviorClass];
A NIL moduleNameRoot means to use the behavior class name.
END.