DIRECTORY CD, CDBasics, CDOrient, Real, Rope; MEBESPlaceImpl: CEDAR PROGRAM IMPORTS CDBasics, CDOrient, Real = BEGIN ROPE: TYPE = Rope.ROPE; Mm: TYPE = REAL; MmPair: TYPE = RECORD [x, y: Mm]; Nm: TYPE = INT; NmPair: TYPE = CD.Position; NmRect: TYPE = CD.Rect; Placement: TYPE = RECORD [x, y: Nm _ 0, orient: CDOrient.Orientation _ 0 -- CDOrient.original -- ]; MaskSpec: TYPE = REF MaskSpecRec; MaskSpecRec: TYPE = RECORD [ maskNo: ROPE, field: FieldType, addrUnit, skewPerSide, scribeWidth, scribeOffset: Nm ]; FieldType: TYPE = {CL, DK}; dieName: Rope.ROPE _ ""; area: Mm _ 0; -- mm^2 -- dieBounds: NmRect _ [0, 0, 0, 0]; MaskSpecGen: PROC [ ms: MaskSpecRec ] RETURNS [ maskSpec: MaskSpec ] = {RETURN[NEW[MaskSpecRec _ ms]]}; SetDie: PROC [name: ROPE, boundRect: NmRect] = {dieName _ name; dieBounds _ [0,0,0,0]}; Include: PROC [ user, project: ROPE, size: MmPair, fileName: ROPE _ NIL, place: Placement _ [] ] RETURNS [ bounds: NmRect ] = { nmSize: NmPair _ [x: Real.FixLI[1.E6*size.x], y: Real.FixLI[1.E6*size.y]]; bounds _ CDOrient.RectAt[pos: [place.x, place.y], size: nmSize, orient: place.orient]; dieBounds _ (IF CDBasics.NonEmpty[dieBounds] THEN CDBasics.Surround[dieBounds, bounds] ELSE bounds); area _ area+1.0E-12*CDBasics.SizeOfRect[bounds].x*CDBasics.SizeOfRect[bounds].y; }; Surround: PROC [r1, r2: CD.Rect] RETURNS [CD.Rect] = {RETURN[CDBasics.Surround[r1,r2]]}; END. BMEBESPlaceImpl.mesa McCreight, June 16, 1986 6:19:49 pm PDT Êå˜Jšœ™Jšœ'™'J˜šÏk ˜ Jšœ!˜#—J˜šÏnœœœœ˜@Jš˜J˜Jšœœœ˜Jšœœœ˜Jšœœœ ˜!Jšœœœ˜Jšœœœ ˜Jšœœœ˜Jšœ œœ1Ïcœ˜cJšœ œœ ˜!Jšœ œœ œK˜tJšœ œœœ˜J˜Jšœœ˜J˜JšœŸ ˜J˜Jšœ!˜!J˜šž œœœ˜FJšœœœ˜ J˜—Jšžœœœ?˜WJ˜š žœœœœœœ˜JšœJ˜JJšœV˜VJšœ œœ&œ ˜dJšœP˜PJšœ˜J˜—š žœœ œœœ˜4Jšœœ˜#J˜—Jšœ˜——…—v