DIRECTORY CDMarkObjects, CD, CDOrient, CDProperties, Rope USING [ROPE, Equal], Graphics USING [Context, MoveTo, LineTo, DrawArea, NewPath, Path, Translate]; CDMarkObjectsImpl: CEDAR PROGRAM IMPORTS CD, CDProperties, Rope, CDOrient, Graphics EXPORTS CDMarkObjects = BEGIN MarkEnumerator: TYPE = CDMarkObjects.MarkEnumerator; markAtom: PUBLIC ATOM _ $AlignmentMarkOb; markOb: PUBLIC CD.ObPtr; markNameProperty: PUBLIC ATOM _ $SignalName; myLevel: CD.Level _ CD.combined; objsProcs: REF CD.ObjectProcs; path: Graphics.Path = CreateAlignmentMarkPath[]; DrawAlignMark: CD.DrawProc = BEGIN DrawArrowInContext: PROC [context: Graphics.Context] = BEGIN context.Translate[pos.x, pos.y]; CDOrient.OrientateContext[context, markOb.size, orient]; context.DrawArea[path: path]; END; CD.DrawToContext[pr, DrawArrowInContext, myLevel]; END; WriteMark: CD.InternalWriteProc --PROC [me: ObPtr]-- = {}; ReadMark: CD.InternalReadProc --PROC [] RETURNS [ObPtr]-- = {RETURN [markOb]}; DescribeMark: CD.DescribeProc --PROC [me: ObPtr] RETURNS [Rope.ROPE]-- = BEGIN RETURN["alignment mark "]; END; SetMarkName: PUBLIC PROC [markApp: CD.ApplicationPtr, name: Rope.ROPE] = BEGIN CDProperties.PutPropOnApplication[onto: markApp, prop: markNameProperty, val: name] END; GetMarkName: PUBLIC PROC [markApp: CD.ApplicationPtr] RETURNS [name: Rope.ROPE] = BEGIN WITH CDProperties.GetPropFromApplication[from: markApp, prop: markNameProperty] SELECT FROM r: Rope.ROPE => name _ r; ENDCASE => name _ "* bad name *"; END; FindMark: PUBLIC PROC [cellOb: CD.ObPtr_NIL, design: CD.Design_NIL, name: Rope.ROPE] RETURNS [app: CD.ApplicationPtr_NIL] = BEGIN Enumerate: MarkEnumerator = { IF Rope.Equal[GetMarkName[markApp], name] THEN {app _ markApp; quit_TRUE} }; [] _ EnumerateMarks[cellOb: cellOb, design: design, proc: Enumerate]; END; GetMarkPosition: PUBLIC PROC [markApp: CD.ApplicationPtr] RETURNS [CD.DesignPosition] = BEGIN RETURN [CDOrient.MapPosition[ itemInCell: [x1: 0, y1: 0, x2: 0, y2: 0], cellInstPos: markApp.location, cellSize: markApp.ob.size, cellInstOrient: markApp.orientation ]] END; EnumerateMarks: PUBLIC PROC [cellOb: CD.ObPtr_NIL, design: CD.Design_NIL, proc: MarkEnumerator] RETURNS [quit: BOOL_FALSE] = BEGIN cp: CD.CellPtr; IF cellOb#NIL THEN cp _ NARROW[cellOb.specificRef] ELSE IF design#NIL THEN cp _ design^.actual.first.specific ELSE ERROR; FOR list: CD.ApplicationList _ cp.contents, list.rest WHILE (list#NIL AND ~quit) DO IF list.first.ob=markOb THEN { quit _ proc[list.first]; -- do NOT catch errors }; ENDLOOP; END; CreateAlignmentMarkPath: PROC [] RETURNS [path: Graphics.Path] = BEGIN path _ Graphics.NewPath[size: 8]; Graphics.MoveTo[path, 0, 0, TRUE]; Graphics.LineTo[path, 0, 3]; Graphics.LineTo[path, 1, 2]; Graphics.LineTo[path, 3, 4]; Graphics.LineTo[path, 4, 3]; Graphics.LineTo[path, 2, 1]; Graphics.LineTo[path, 3, 0]; Graphics.LineTo[path, 0, 0]; END; Init: PROC[] = BEGIN objsProcs _ CD.RegisterObjectType[markAtom]; objsProcs.drawMe _ DrawAlignMark; objsProcs.internalWrite _ WriteMark; objsProcs.internalRead _ ReadMark; objsProcs.describe _ DescribeMark; markOb _ NEW[CD.ObjectDefinition _ [ p: objsProcs, size: [4, 4], level: myLevel, specificRef: markAtom ]]; END; Init[]; END. าCDMarkObjectsImpl.mesa Copyright c 1984 by Xerox Corporation. All rights reserved. Created by: Bob Mayo, June 8, 1984 12:28:34 pm PDT Redesigned by: Jacobi, September 10, 1984 5:04:14 pm PDT Last Edited: Jacobi, September 13, 1984 5:01:54 pm PDT --PROC [markApp: CD.ApplicationPtr] RETURNS [quit: BOOL_FALSE] -- PROC [aptr: ApplicationPtr, pos: DesignPosition, orient: Orientation, pr: REF DrawInformation]; --actually finds any position of a real origin ส้˜– "Cedar" stylešœ™Jšœ ฯmœ1™™>—J˜Jšœ ž œ˜)Jšœž œ˜Jšœž œ˜,J˜Jšœ žœ žœ ˜ Jšœ žœžœ ˜J˜0J˜J˜šŸ œžœ ˜Jšž˜JšžœFžœ™bšฯnœžœ˜6Jšž˜Jšœ ˜ Jšœ8˜8Jšœ˜Jšžœ˜—Jšžœ0˜2Jšžœ˜J˜—šŸ œžœฯcœ˜:J˜—šŸœžœกœžœ ˜NJ˜—š Ÿ œžœกะckก ขกขกœ˜IJšž˜Jšžœ˜Jšžœ˜J˜—š  œž œ žœžœ˜HJšž˜JšœS˜SJšžœ˜—J˜š   œž œ žœžœ žœ˜QJšž˜šžœLžœž˜[Jšœžœ ˜Jšžœ˜!—Jšžœ˜—J˜š œž œ žœžœ žœžœ žœžœžœžœ˜{Jšž˜šŸ œ˜Jšžœ(žœžœ˜JJšœ˜—JšœE˜EJšžœ˜—J˜š  œž œ žœžœžœ˜WJšœ.™.Jšž˜šžœ˜Jšœ)˜)Jšœ˜Jšœ˜Jšœ#˜#Jšœ˜—Jšžœ˜—J˜š œž œ žœžœ žœžœžœžœžœ˜|Jšž˜Jšœžœ ˜Jšžœžœžœžœ˜2Jšžœžœžœžœ#˜:Jšžœžœ˜ š žœžœ*žœžœžœž˜Sšžœžœ˜Jšœก˜/J˜—Jšžœ˜—Jšžœ˜—J˜š œžœžœ˜@Jšž˜J˜!Jšœžœ˜"Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšžœ˜—J˜š œžœ˜Jšž˜Jšœ žœ˜,J˜!J˜$J˜"Jšœ"˜"šœ žœžœ˜$Jšœ ˜ J˜ Jšœ˜Jšœ˜Jšœ˜—Jšžœ˜J™—Jšœ˜Jšžœ˜—…— žY