SoftHdwAssembly.mesa
Copyright Ó 1988 by Xerox Corporation. All rights reserved.
Barth, July 14, 1989 5:29:35 pm PDT
DIRECTORY
CD, Rope, SoftHdwBasics, ViewerClasses;
ProgramRec:
TYPE =
RECORD [
instances: ProgramInstances ← NIL,
tiles: ArrayPositions ← NIL,
object: CD.Object ← NIL];
Program Creation
Create:
PROC [instances: ProgramInstances ←
NIL, tiles: ArrayPositions ←
NIL, object:
CD.Object ←
NIL]
RETURNS [program: Program];
all tile.types must be in TileType.
Instance:
PROC [program: Program, minorArray: Position ← [0, 0], chip: Position ← [0, 0]]
RETURNS [instance: ProgramInstance];
CPI:
PROC [old: ProgramInstances, program: Program, minorArray: Position ← [0, 0], chip: Position ← [0, 0]]
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];
builds from left to right.
AbutY:
PROC [t1, t2, t3, t4, t5, t6: Program ←
NIL]
RETURNS [program: Program];
builds from top to bottom.
ArrayX:
PROC [program: Program, nx:
INT]
RETURNS [array: Program];
Aligns nx tiles in the X direction.
ArrayY:
PROC [program: Program, ny:
INT]
RETURNS [array: Program];
Aligns ny tiles in the Y direction.
Parse And Print
Size:
PROC [program: Program]
RETURNS [size: Position];
The unit of size is minor array.
Parse:
PROC [object:
CD.Object]
RETURNS [program: Program];
EnumerateTiles:
PROC [program: Program, eachTile: EachTileProc];
EachTileProc: TYPE = PROC [position: ArrayPosition];
Print:
PROC [program: Program]
RETURNS [object:
CD.Object];
PrintAndDraw:
PROC [program: Program]
RETURNS [design:
CD.Design];
CDToArrayPosition:
PROC [minorArrayHeight:
INT, mouse: Position]
RETURNS [ambiguous:
BOOL, position: ArrayPosition];
Utilities
OpenDesign:
PROC [designName: Rope.
ROPE]
RETURNS [design:
CD.Design];
HighlightDesign:
PROC [design:
CD.Design, minorArrayHeight, minorArrayWidth:
INT, positions: ArrayPositions ←
NIL, viewer: ViewerClasses.Viewer ←
NIL, label: Rope.
ROPE ←
NIL];
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.
LoadTile:
PROC [design:
CD.Design, tileName: Rope.
ROPE]
RETURNS [program: Program];
Does PutSizes[object, NEW[ArrayPositionRec ← [
chip: [0, 0],
minorArray: Size[program],
grain: [4, 4]]]]