DIRECTORY CD USING [undefLayer, Position, Rect, errorLayer, Layer, ObjectClass, Object, Technology], Rope USING [ROPE]; CDAtomicObjects: CEDAR DEFINITIONS = BEGIN IsAtomicOb: PROC [ob: CD.Object] RETURNS [BOOL] = INLINE { RETURN [ob.class.atomicOb AND ISTYPE[ob.specific, AtomicObsSpecific]] }; CreateAtomicOb: PROC [classKey: ATOM, size: CD.Position, tech: CD.Technology, layer: CD.Layer _ CD.undefLayer] RETURNS [CD.Object]; DrawRec: TYPE = RECORD [r: CD.Rect, layer: CD.Layer _ CD.errorLayer]; DrawList: TYPE = LIST OF DrawRec; AtomicObsSpecific: TYPE = REF AtomicObsRec; AtomicObsRec: TYPE = RECORD [ --do not change directly rList: DrawList_NIL, ir: CD.Rect ]; FillObjectProc: TYPE = PROC [ob: CD.Object] RETURNS [mustFail: BOOL _ FALSE]; RegisterAtomicObClass: PROC [classKey: ATOM, fillProc: FillObjectProc, description: Rope.ROPE _ NIL, tech: CD.Technology _ NIL] RETURNS [type: CD.ObjectClass]; Incorporate: PROC [ob: CD.Object, r: CD.Rect, layer: CD.Layer, inside: BOOL _ TRUE]; END. :CDAtomicObjects.mesa (part of ChipNDale) Copyright c 1985, 1986 by Xerox Corporation. All rights reserved. Created by Christian Jacobi, March 13, 1985 9:49:28 am PST Last edited by: Christian Jacobi, October 22, 1986 12:40:09 pm PDT This module helps the implementation of a wide class of atomic ChipNDale objects, which do not have children and are shared between designs. Despite its name this are not the only atomic object classes. --common proc's and types --NIL if not done --Reuses objects in cache if possible --technology implementor's proc's and type's --read (and even rewrite) size, layer --calls IncorporateRect --do not read or write AtomicObsRec directly --rList will be initialized to NIL --drawMe, quickDrawMe are considered variables and should not --be changed by class implementor. Κ3˜codešœ/™/Kšœ Οmœ7™BKšœ<™™>Kšœ"™"K˜—KšŸ œžœžœ žœžœžœžœ˜TK˜Kšžœ˜K˜—…—ς _