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˜—…—”«