<> <> <> <> DIRECTORY CD, Rope; CDSymbolicObjects: CEDAR DEFINITIONS = BEGIN <<--Symbolic objects denote points, vertical and horizontal line segments and rectangles.>> <<--These objects can make out the interface.>> <<>> <<-- It is perfectly ok to create symbolic applications with any means...>> <<-- The denoted dimension is:>> <<-- Points: lower left point of object, [0, 0]>> <<-- Lines: west (left) border of object >> <<-- Rects: complete size of object>> <<-- The origin lies in [0, 0]; The interrest rect is equal to [0, 0, size.x, size.y].>> <<-- The interrest rect's size is of no consequence for Points or Lines>> <<>> <<---Create procedures may create objects of different genre if the parameters suggests>> CreatePointOb: PROC [dummySize: CD.Number_0] RETURNS [CD.Object]; CreateLineOb: PROC [length: CD.Number, dummyWidth: CD.Number_0] RETURNS [CD.Object]; CreateRectOb: PROC [size: CD.Position] RETURNS [CD.Object]; IsSymbolicOb: PROC [ob: CD.Object] RETURNS [BOOL]; IsPointOb: PROC [ob: CD.Object] RETURNS [BOOL]; IsLineOb: PROC [ob: CD.Object] RETURNS [BOOL]; IsRectOb: PROC [ob: CD.Object] RETURNS [BOOL]; Kind: TYPE = {notSymbolic, point, line, rect}; SymbolicKind: PROC [ob: CD.Object] RETURNS [Kind]; SetOwner: PROC [symInst: CD.Instance, owner: ATOM_NIL]; GetOwner: PROC [symInst: CD.Instance] RETURNS [ATOM]; <<--If owner is not NIL it must be registered with CDProperties>> SetName: PROC [symInst: CD.Instance, name: Rope.ROPE]; GetName: PROC [symInst: CD.Instance] RETURNS [Rope.ROPE]; SetLayer: PROC [symInst: CD.Instance, layer: CD.Layer]; GetLayer: PROC [symInst: CD.Instance] RETURNS [CD.Layer]; <<--I layer=CD.combined means: not yet determined, >> <<-- or either: object has more complex functionality>> <<--It depends from the application if the layer has meaning>> Direction: TYPE = {west, south, east, north}; <<--It depends from the application if Direction has meaning...>> DirectionFromOrient: PROC [o: CD.Orientation] RETURNS [dir: Direction]; OrientFromDirection: PROC [dir: Direction] RETURNS [o: CD.Orientation]; CreateSymInst: PROC [name: Rope.ROPE_NIL, denotes: CD.Rect, dummySize: CD.Number _ 0, layer: CD.Layer _ CD.combined, owner: ATOM _ NIL, approachFrom: Direction _ west] RETURNS [CD.Instance]; <<--Lines will be approached from a direction perpendicular to their length.>> Denotes: PROC [symInst: CD.Instance] RETURNS [CD.Rect]; <<>> <<>> <<--special procedures for cells>> InstEnumerator: TYPE = PROC [inst: CD.Instance] RETURNS [quit: BOOL_FALSE]; EnumerateSymbolicObs: PROC [cellOb: CD.Object_NIL, eachInst: InstEnumerator] RETURNS [quit: BOOL]; <<--Random order; changes on cellOb while the enumeration may or may not be seen>> <<--or may even cause other symbolic to be visited a different number than once. >> <<--The instances are the real instances inside cellOb; modifycations would change cellOb>> FindSymbolicObs: PROC [cellOb: CD.Object_NIL, name: Rope.ROPE] RETURNS [CD.InstanceList]; <<--Returns all symbolic objects with name "name">> <<--The instances are the real instances inside cellOb; modifycations would change cellOb>> <<>> <<--implementors stuff>> symbolicRectsClass: PRIVATE READONLY REF CD.ObjectClass; symbolicLineClass: PRIVATE READONLY REF CD.ObjectClass; symbolicPointClass: PRIVATE READONLY REF CD.ObjectClass; END.