DIRECTORY ImagerBox USING [Box], Vector2 USING [VEC]; TreeGrapher: CEDAR DEFINITIONS ~ BEGIN OPEN ImagerBox, Vector2; Node: TYPE = REF NodeRep; NodeRep: TYPE = RECORD [ data: REF, class: REF ClassRep, children: LIST OF Node, layout: REF LayoutRep ¬ NIL ]; Direction: TYPE = { N, E, S, W }; -- compass directions ClassRep: TYPE = RECORD [ classData: REF, bounds: PROC [self: Node] RETURNS [Box], attachmentPoint: PROC [self: Node, direction: Direction] RETURNS [VEC] ]; LayoutRep: TYPE = RECORD [ origin: VEC, bounds: Box, -- cached value returned by self.class.bounds[self] treeBox: Box -- Absolute, once processing is complete ]; LayoutParameters: TYPE = REF LayoutParametersRep; LayoutParametersRep: TYPE = RECORD [ descendantPad: REAL ¬ 10.0, descendantDirection: Direction ¬ $E, siblingPad: REAL ¬ 6.0, siblingDirection: Direction ¬ $N, ext: REF ]; DoLayout: PROC [root: Node, lp: LayoutParameters]; Resolve: PROC [root: Node, p: VEC] RETURNS [Node]; DefaultAttachmentPoint: PROC [self: Node, direction: Direction] RETURNS [VEC]; END. † TreeGrapher.mesa Copyright Σ 1990, 1991 by Xerox Corporation. All rights reserved. Michael Plass, July 13, 1990 4:37 pm PDT Κ>•NewlineDelimiter –(cedarcode) style™codešœ™Kšœ Οeœ7™BK™(K™—šΟk ˜ Kšœ žœ˜Kšœžœžœ˜K˜—KšΠln œžœž ˜šœžœžœ˜ K˜Kšœžœžœ ˜šœ žœžœ˜Kšœžœ˜ Kšœžœ ˜Kšœ žœžœ˜Kšœžœ ž˜Kšœ˜K˜—šœ žœΟc˜7K˜—šœ žœžœ˜Kšœ žœ˜Kšœžœžœ˜(Kšœžœ$žœžœ˜FKšœ˜K˜—šœ žœžœ˜Kšœžœ˜ Kšœ  3˜@Kšœ  (˜5Kšœ˜K˜—Kšœžœžœ˜1šœžœžœ˜$Kšœžœ˜Kšœ$˜$Kšœ žœ˜Kšœ!˜!Kšœž˜Kšœ˜K˜—šΟnœžœ$˜2K˜—š‘œžœžœžœ˜2K˜—š‘œžœ$žœžœ˜NK˜——K˜Kšžœ˜K˜—…—ΰ