TiogaBranchClassImpl.mesa; Written by Paxton, August 1983
Edited by Paxton, August 16, 1983 8:16 pm
DIRECTORY
TiogaBranchClass,
NodeProps,
Atom,
MessageWindow,
RefTab,
Rope;
TiogaBranchClassImpl: CEDAR PROGRAM
IMPORTS Atom, MessageWindow, NodeProps, RefTab
EXPORTS TiogaBranchClass =
BEGIN OPEN TiogaBranchClass;
defaultBranchClass: PUBLIC BranchClass;
undefBranchClass: BranchClass;
branchClassTable: RefTab.Ref ← RefTab.Create[8];
AlreadyRegistered: PUBLIC SIGNAL = CODE;
Lookup: PUBLIC PROC [flavor: BranchFlavor] RETURNS [class: BranchClass] = {
classRec: BranchClassRec;
IF (class ← NARROW[RefTab.Fetch[branchClassTable, flavor].val])#NIL THEN RETURN;
classRec ← undefBranchClass^;
classRec.flavor ← flavor;
class ← Register[classRec ! AlreadyRegistered => CONTINUE];
MessageWindow.Append[message: "Undefined branch class: ", clearFirst: TRUE];
MessageWindow.Append[Atom.GetPName[flavor]];
MessageWindow.Blink[] };
Register: PUBLIC PROC [classRec: BranchClassRec] RETURNS [class: BranchClass] = {
class ← NARROW[RefTab.Fetch[branchClassTable, classRec.flavor].val];
IF class=NIL THEN class ← NEW[BranchClassRec]
ELSE SIGNAL AlreadyRegistered; -- ok to continue
class^ ← classRec;
[] ← RefTab.Store[branchClassTable, classRec.flavor, class] };
branchContentsAtom: PUBLIC ATOM ← $BranchContentsSpecs;
UndefGetContents: PROC [br: RefBranchNode] RETURNS [specs: ROPE] = {
CreateNode saved the specs on the branch property list
RETURN [NARROW[NodeProps.GetProp[br, branchContentsAtom]]] };
branchChildrenAtom: PUBLIC ATOM ← $BranchChildrenSpecs;
UndefGetChildren: PROC [br: RefBranchNode] RETURNS [specs: ROPE] = {
CreateNode saved the specs on the branch property list
RETURN [NARROW[NodeProps.GetProp[br, branchChildrenAtom]]] };
defaultBranchClass ← Register[[flavor: $Branch]];
undefBranchClass ← Register[[flavor: $UndefBranchClass]];
undefBranchClass.getContents ← UndefGetContents;
undefBranchClass.getChildren ← UndefGetChildren;
END.