DIRECTORY CD, CMosB, Core, CoreBlock, CoreClasses, CoreGeometry, PWRoute, IO, Rope; CoreFrame: CEDAR DEFINITIONS = BEGIN frameCellClass: Core.CellClass; Frame: TYPE = REF FrameRec; FrameSeq: TYPE = RECORD[SEQUENCE size: CARDINAL OF CT]; FrameRec: TYPE = RECORD[ pos: CD.Position _ [0,0], size: Size _ TameSize[], orient: CD.Orientation _ CD.original, first: Side _ left, father: CT _ NIL, data: REF _ NIL, cell: CT _ NIL, public: LIST OF ROPE _ NIL, intOnly: LIST OF ROPE _ NIL, seq: REF FrameSeq _ NIL ]; ROPE: TYPE = Core.ROPE; CT: TYPE = Core.CellType; NewFrameCell: PROC[size: INT, name: ROPE, rec: FrameRec] RETURNS [new: CT]; NewFrameCells: PROC[cells: LIST OF CT, name: ROPE, rec: FrameRec] RETURNS [new: CT]; Fetch: PROC[cell: CT, subCellName: ROPE] RETURNS[subCell: CT]; FCT: PROC[ct: CT] RETURNS[Frame] = INLINE {RETURN[NARROW[ct.data]]}; ExpandType: TYPE = {soft, hard}; SetFrameExpandProc: PROC[type: ExpandType, on: REF, proc: REF ExpandProc]; GetFrameExpandProc: PROC[type: ExpandType, on: REF]RETURNS[ proc: REF ExpandProc]; ExpandProc: TYPE = PROC[type: ExpandType, frameCT: CT]; Expand: PROC[type: ExpandType, frameCT: CT]; NameFrame: PROC[cell: CT, root: ROPE _ NIL]; CellTypeProc: TYPE = PROC RETURNS[cellType: Core.CellType]; RecastFrameSoft: Core.RecastProc; RecastFrameHard: Core.RecastProc; RecastWithLayout: PROC[me: CT] RETURNS [new: CT]; FrameInst: PROC[frameCT: CT] RETURNS [instance: CoreClasses.CellInstance_NIL]; CountTransistors: PROC[cell: CT] RETURNS[count: INT _ 0]; CellCached: PROC[name: ROPE] RETURNS[cached: BOOL _ TRUE]; RetrieveAndDecorate: PROC[name: ROPE] RETURNS[cell: CT]; ReadFrameCache: PROC[name: ROPE] RETURNS[frameCT: CT]; WriteFrameCache: PROC[frameCT: CT]; EnumProc: TYPE = PROC[fCT: CT] RETURNS[kids, continue: BOOL _ TRUE]; EnumFrame: PROC[fCT: CT, proc: EnumProc] RETURNS[kids, continue: BOOL _ TRUE]; Side: TYPE = CoreGeometry.Side; SideRope: ARRAY Side OF ROPE; NextSide: PROC[side: Side] RETURNS [next: Side]; PrevSide: PROC[side: Side] RETURNS [prev: Side]; OppSide: PROC[side: Side] RETURNS [opp: Side]; SideSides: ARRAY Side OF CoreBlock.Sides = [bottom: bottom, right: right, top: top, left: left]; Size: TYPE = RECORD[x, y: INT, xfree, yfree: Freedom]; Freedom: TYPE = {fixed, tame, wild}; lambda: INT = CMosB.lambda; minSize: CD.Position = [14*lambda, 16*lambda]; TameSize: PROC[pair: CD.Position _ minSize] RETURNS[size:Size] = INLINE {RETURN[[pair.x, pair.y, tame, tame]]}; WildSize: PROC[pair: CD.Position _ minSize] RETURNS[size:Size] = INLINE {RETURN[[pair.x, pair.y, wild, wild]]}; FixedSize: PROC[pair: CD.Position _ minSize] RETURNS[size:Size] = INLINE {RETURN[[pair.x, pair.y, fixed, fixed]]}; FlipSize: PROC[size: Size] RETURNS[Size] = INLINE {RETURN[[size.y, size.x, size.yfree, size.xfree]]}; GetSize: PROC[frameCT: CT]; ReSize: PROC[frameCT: CT]; RePos: PROC[frameCT: CT, new: CD.Position _ [0, 0]]; RotateFrame: PROC[frameCT: CT, orient: CD.Orientation _ CD.original]; RotateCellType: PROC[cell: CT, orient: CD.Orientation] RETURNS[new: CT]; OrientSideSide: PUBLIC ARRAY CD.Orientation OF ARRAY Side OF Side; FixOneSize: PROC[frameCT: CT] RETURNS[fixed1: BOOL _ FALSE]; GetLog: PROC RETURNS[IO.STREAM]; LogFCT: PROC[frameCT: CT, indent: INT, lim: INT, out: IO.STREAM _ NIL]; LogFrameData: PROC[frame: Frame, indent: INT, cr: BOOL, out: IO.STREAM _ NIL]; FullFrameName: PROC[frameCT: CT] RETURNS[name: ROPE]; DrawFrame: PROC[frameCT: CT, detailed: BOOL _ TRUE] RETURNS[cell: CD.Object]; FlattenOnce: PROC[frameCT: CT] RETURNS[new: CT]; TestMergeProc: TYPE = PROC[frameCT: CT] RETURNS[merge: BOOL]; TestMergeNodes: PROC[frameCT: CT, testProc: TestMergeProc _ NIL -- TRUE -- ] RETURNS[new: CT]; AddExtention: PROC[frameCT: CT]; TellKidsAboutDad: PROC[frameCT: CT]; Neighbor: PROC[frameCT: CT, side: Side] RETURNS[neighborCT: CT, ok: BOOL]; END. ŠCoreFrame.mesa Copyright c 1985 by Xerox Corporation. All rights resersed. Last Edited by: Curry, October 7, 1986 5:02:21 pm PDT �Ê�˜šœ™Jšœ<™�œ˜SJ™šœ �œ� œ˜Jš�œ˜J˜Jšœ˜Jšœ �œ�œ ˜Jš œ �œ�œ�œ�œ�œ�œ˜8šœ �œ�œ˜Jšœ�œ˜Jšœ˜Jšœ �œ�œ ˜'Jšœ˜Jšœ �œ�œ˜Jšœ�œ�œ˜Jšœ�œ�œ˜Jš œ �œ�œ�œ�œ˜Jš œ �œ�œ�œ�œ˜Jšœ�œ �œ˜—J˜Jš�œ�œ�œ˜Jš�œ�œ˜J˜Jš Ïn œ�œ�œ �œ�œ�œ˜NJšž œ�œ�œ�œ�œ�œ�œ�œ˜UJš žœ�œ�œ�œ�œ �œ˜AJšÐbkœ�œ�œ�œ �œ�œ�œ ˜HJ˜JšÏb œ�œ˜ Jšžœ�œ�œ �œ ˜MJš žœ�œ�œ�œ�œ ˜RJšÐbn œ�œ�œ�œ˜7Jš¡œ�œ�œ˜1Jšž œ�œ�œ� œ˜/Jšž œ�œ�œ�œ˜;Jšžœ˜#Jšžœ˜#Jš žœ�œ�œ�œ�œ˜2Jšž œ�œ �œ�œ*˜QJš žœ�œ�œ�œ�œ˜;J˜Jš ž œ�œ�œ�œ �œ�œ˜=Jš žœ�œ�œ�œ�œ˜9Jš žœ�œ�œ�œ �œ˜9Jšžœ�œ �œ˜$J˜Jšžœ�œ�œ�œ�œ�œ�œ˜HJš ž œ�œ�œ�œ�œ�œ˜NJ˜Jšœ �œ˜"Jšœ �œ�œ�œ˜Jšžœ�œ �œ˜2Jšžœ�œ �œ˜2Jšžœ�œ �œ˜0Jš  œ�œ�œH˜`J˜Jšœ �œ�œ�œ˜9Jšœ �œ˜&Jšœ �œ˜Jšœ �œ#˜0š žœ�œ�œ�œ�˜HJšœ�œ ˜'—š žœ�œ�œ�œ�˜HJšœ�œ ˜'—š ž œ�œ�œ�œ�˜IJšœ�œ"˜)—šžœ�œ �œ �˜2Jšœ�œ,˜3—Jšžœ�œ �œ˜Jšžœ�œ �œ˜Jšžœ�œ �œ�œ˜9Jš ž œ�œ �œ �œ�œ ˜FJš žœ�œ�œ �œ�œ�œ˜JJš žœ� œ�œ �œ�œ�œ˜BJš ž œ�œ �œ�œ �œ�œ˜=J˜Jš žœ�œ�œ�œ�œ˜#Jšžœ�œ �œ �œ�œ�œ�œ�œ˜JJšž œ�œ�œ�œ�œ�œ�œ˜NJš ž œ�œ �œ�œ�œ˜5J˜Jšž œ�œ �œ �œ�œ�œ�œ ˜NJš ž œ�œ �œ�œ�œ˜2Jš ž œ�œ�œ �œ�œ�œ˜=š žœ�œ �œ�œÏc œ˜LJš�œ�œ˜—J˜J˜Jšž œ�œ �œ˜"Jšžœ�œ �œ˜%Jš žœ�œ �œ�œ �œ�œ˜NJ˜Jš�œ˜J˜—J˜J˜—…—”«