File: Nut.mesa
Implemented by: NutImpl as part of the Nuts package
Contents: An interface to allow Cypress application programs for different database
entity types to call each other without knowing about each other beforehand. Each
application implements one or more "nut" types; nuts are viewers on Cypress entities.
Created by: Rick Cattell on 11-Dec-81 12:29:29
Last edited by:
Rick Cattell on July 22, 1983 2:31 pm
Willie-Sue on January 21, 1983 8:48 am
Jim Donahue on June 16, 1983 2:42 pm
Margaret Butler on July 11, 1984 4:25:11 pm PDT
Jennifer Widom on June 14, 1984 3:38:45 pm PDT
DIRECTORY
DB, Rope, ViewerClasses;
Nut: CEDAR DEFINITIONS =
BEGIN OPEN DB;
ROPE: TYPE = Rope.ROPE;
Viewer: TYPE = ViewerClasses.Viewer;
Interaction between nuts: these are implemented in NutImpl.mesa
Each nut implementation registers itself as knowing how to display, edit, and query some
set of domains (a domain is a type of entity, see DB), with the Register proc. Any
application (or the user through Squirrel) can then call one of the following procs to
invoke whoever has registered himself for an entity type (or the default implementations
if no one is registered). NoProcRegistered is raised if no Implementations (including
defaults) have been registered. To register the Defaults, run NutDefaults.
NoProcRegistered: ERROR;
Register: PROC[
domain: ROPE,
segment: DB.Segment,
display: ProcType ← NIL, -- proc to make displayer for entity in domain
edit: ProcType ← NIL, -- proc to make editor for new or old entity in domain
query: ProcType ← NIL -- proc to make queryer on domain
];
Registers a display, create, and query for given domain.
These will supersede the top registrations for this domain except where new procs NIL.
DeRegister: PROC[domain: ROPE, segment: DB.Segment];
Deregisters all procs for this domain
Push: PROC[
domain: ROPE,
segment: DB.Segment,
display: ProcType← NIL, -- proc to make displayer for entity in domain
edit: ProcType← NIL, -- proc to make editor for new or old entity in domain
query: ProcType← NIL, -- proc to make queryer on domain
register: BOOLFALSE -- determines whether to add new entry or change top
];
Registers a display, create, and query for given domain.
Pop: PROC[domain: ROPE, segment: DB.Segment];
Deregisters top procs for this domain
PushDefaults: PROC[domain: ROPE, segment: DB.Segment];
Makes the defaults for the segment be registered as the ones to use.
Mainly for debugging new display et al procs. An implementor
can use this to actually see the things that a specialized displayer
is attempting to display.
Display: PROC[ eName: ROPENIL, e: DB.Entity, d: DB.Domain ← NIL, seg: DB.Segment ← NIL, newV: Viewer← NIL ];
Displays e in newV. A new viewer is created if newV is NIL. If a nut implementation has
registered itself for e's type, that implementation will be called, else the
registered default implementation will be used. The seg argument is only necessary for
system entities, which have no implicit segment.
Edit: PROC[ eName: ROPE, e: DB.Entity ← NIL, d: Domain, seg: DB.Segment ← NIL, newV: Viewer← NIL ];
Edit e in newV. A new viewer is created if newV is NIL. If a nut implementation has
registered itself for e's type, that implementation will be called, else the
registered default implementation will be used. The seg argument is only necessary for
system entities, which have no implicit segment
Query: PROC[ eName: ROPE, e: DB.Entity ← NIL, d: Domain, seg: DB.Segment ← NIL, newV: Viewer← NIL ];
Queries e in newV. A new viewer is created if newV is NIL. If a nut implementation has
registered itself for e's type, that implementation will be called, else the
registered default implementation will be used. The seg argument is only necessary for
system entities, which have no implicit segment
ProcType: TYPE = PROC[eName: ROPE, d: Domain, seg: DB.Segment ← NIL,
newV: Viewer← NIL];
Should set up an application's newV to display, edit, or query entity e and its fields.
END. . .
Change Log:
Edited by Rick on March 18, 1982 11:50 am: Major reorganization. Register now allows registration of all or some of the three procedures, and replaces any previous registration for that domain with the new one. Edit take init REF ANY. DisplayProc, EditProc, QueryProc take new viewer on calls out from Nut, old viewer on calls into Nut. Added close and open notify procs.
Edited by Rick on March 25, 1982 4:29 pm: Added user interaction procs section, dump and load stuff.
WSH on April 1, 1982: added MessageConfirm
Rick on April 3, 1982 4:29 pm: added width option to button. Added CreateProc feature.
Willie-Sue on July 8, 1982: changed EnumerateNutList, created NutPrivate.mesa, NutListImpl.mesa
Willie-Sue on July 27, 1982: changed EnumerateNutList to return LIST OF NutRec.
Cattell on August 5, 1982 7:11 pm: added init parm to Display, Create procs. Added GetDBTransaction proc.
Maxwell on September 8, 1982 9:29 am: moved procedures to Palm and SquirrelOps
Cattell on April 12, 1983 1:16 pm: fixed up some outdated comments.
Butler on June 26, 1984 3:58:24 pm PDT:
Major rewrite has been completed. Push, PushDefaults, and Pop have
been added. Display, Edit, and Query now take the same arguments
in the same order. See NutImpl for details of implementation changes.