DIRECTORY CD, Rope, SoftHdwBasics, ViewerClasses; SoftHdwAssembly: CEDAR DEFINITIONS = BEGIN ArrayPositions: TYPE = SoftHdwBasics.ArrayPositions; ArrayPosition: TYPE = SoftHdwBasics.ArrayPosition; ArrayPositionRec: TYPE = SoftHdwBasics.ArrayPositionRec; Orientation: TYPE = SoftHdwBasics.Orientation; Position: TYPE = SoftHdwBasics.Position; NodeType: TYPE = SoftHdwBasics.NodeType; TileType: TYPE = NodeType[OToP..RAMOdd]; Coordinates: TYPE = {Grain, MinorArray, Chip}; Rotation: TYPE = {None, Rotate90FlipX}; Programs: TYPE = LIST OF Program; Program: TYPE = REF ProgramRec; ProgramRec: TYPE = RECORD [ instances: ProgramInstances _ NIL, tiles: ArrayPositions _ NIL, coordinates: Coordinates _ MinorArray, object: CD.Object _ NIL]; ProgramInstances: TYPE = LIST OF ProgramInstance; ProgramInstance: TYPE = REF ProgramInstanceRec; ProgramInstanceRec: TYPE = RECORD [ program: Program, rotation: Rotation, chip: Position, minorArray: Position]; Create: PROC [instances: ProgramInstances _ NIL, tiles: ArrayPositions _ NIL, coordinates: Coordinates _ MinorArray, object: CD.Object _ NIL] RETURNS [program: Program]; Instance: PROC [program: Program, minorArray: Position _ [0, 0], chip: Position _ [0, 0], rotation: Rotation _ None] RETURNS [instance: ProgramInstance]; CPI: PROC [old: ProgramInstances, program: Program, minorArray: Position _ [0, 0], chip: Position _ [0, 0], rotation: Rotation _ None] RETURNS [new: ProgramInstances]; CTI: PROC [old: ArrayPositions, type: TileType, orientation: Orientation, grain: Position, minorArray: Position _ [0, 0], chip: Position _ [0, 0]] RETURNS [new: ArrayPositions]; AbutX: PROC [t1, t2, t3, t4, t5, t6: Program _ NIL] RETURNS [program: Program]; AbutXList: PROC [subPrograms: Programs] RETURNS [program: Program]; AbutY: PROC [t1, t2, t3, t4, t5, t6: Program _ NIL] RETURNS [program: Program]; AbutYList: PROC [subPrograms: Programs] RETURNS [program: Program]; ArrayX: PROC [program: Program, nx: INT] RETURNS [array: Program]; ArrayY: PROC [program: Program, ny: INT] RETURNS [array: Program]; Parse: PROC [object: CD.Object] RETURNS [program: Program]; CDToArrayPosition: PROC [sizes: ArrayPosition, coordinates: Coordinates, mouse: Position] RETURNS [ambiguous: BOOL, position: ArrayPosition]; Print: PROC [sizes: ArrayPosition, program: Program] RETURNS [object: CD.Object]; PrintAndDraw: PROC [sizes: ArrayPosition, program: Program] RETURNS [design: CD.Design]; Size: PROC [program: Program] RETURNS [size: Position]; EnumerateTiles: PROC [program: Program, eachTile: EachTileProc]; EachTileProc: TYPE = PROC [position: ArrayPosition]; OpenDesign: PROC [designName: Rope.ROPE] RETURNS [design: CD.Design]; HighlightDesign: PROC [design: CD.Design, sizes: ArrayPosition, positions: ColoredArrayPositions _ NIL, viewer: ViewerClasses.Viewer _ NIL, label: Rope.ROPE _ NIL]; ColoredArrayPositions: TYPE = LIST OF ColoredArrayPositionRec; ColoredArrayPositionRec: TYPE = RECORD [ color: HighlightColor, position: ArrayPosition]; HighlightColor: TYPE = {red, green, blue, yellow, black}; LoadTile: PROC [design: CD.Design, tileName: Rope.ROPE] RETURNS [program: Program]; END.  SoftHdwAssembly.mesa Copyright Σ 1988 by Xerox Corporation. All rights reserved. Barth, July 27, 1989 6:17:08 pm PDT Program Creation All of the abut routines check that the coordinate systems of the arguments are identical. They call Size to determine the distance to add between instances. all tile.types must be in TileType. builds from left to right. builds from left to right. builds from bottom to top. builds from bottom to top. Aligns nx tiles in the X direction. Aligns ny tiles in the Y direction. Parse And Print Utilities computes the size in terms of the coordinate system of the program If viewer is NIL then applies to all viewers of design. positions=NIL removes all previous highlight. Viewers scale to the best zoom on the highlighted area. Κ˜codešœ™K™šœœœ˜(K˜K˜Kšœœ%˜9K˜—š žœœ œœœ˜SK˜——Kšœ˜—…— Po