PartXForm.mesa
Copyright Ó 1989 by Xerox Corporation. All rights reserved.
Last Edited by: Gasbarro April 3, 1989 3:26:16 pm PDT
DIRECTORY
FS, IO, Real, Rope;
PartXForm: CEDAR PROGRAM
IMPORTS FS, IO, Real, Rope
Degrees: TYPE = [0..360);
ROPE: TYPE = Rope.ROPE;
Transformation: TYPE = RECORD[m11, m12, m21, m22: REAL];
rot45: Transformation ← [.7071, .7071, -.7071, .7071];
Part file header:
entry number new part
entry number shape assossiated
xmin part outline
ymin part outline
xmax part outline
ymax part outline
xprefix location of the prefix
yprefix
part name
part number (inventory number)
prefix
Each pin:
x
y
name
swap
dia
site
type
pad
Apply:
PROC [t: Transformation, x1, y1:
INT]
RETURNS [x2, y2:
INT] ~ {
x2 ← Real.Round[(x1*t.m11) + (y1*t.m21)];
y2 ← Real.Round[(x1*t.m12) + (y1*t.m22)];
};
Transform:
PROC [fName:
ROPE, t: Transformation] ~ {
in: IO.STREAM ← FS.StreamOpen[Rope.Concat[fName, ".part"]];
out: IO.STREAM ← FS.StreamOpen[Rope.Concat[fName, "R.part"], $create];
x, y: INT;
name: ROPE;
swap, dia, site, type, pad: INT;
out.PutF["%g ", IO.int[in.GetInt[]]]; -- part number
out.PutF["%g ", IO.int[in.GetInt[]]]; -- shape number
FOR i: NAT
IN [0..3)
DO
x ← in.GetInt[];
y ← in.GetInt[];
[x, y] ← Apply[t, x, y];
out.PutF["%g %g ", IO.int[x], IO.int[y]];
ENDLOOP;
FOR i:
NAT
IN [0..3)
DO
out.PutF["%g ", IO.rope[in.GetTokenRope[IO.IDProc].token]];
ENDLOOP;
out.PutF["\n"];
DO
x ← in.GetInt[! IO.EndOfStream => GOTO finished];
y ← in.GetInt[];
name ← in.GetTokenRope[IO.IDProc].token;
swap ← in.GetInt[];
dia ← in.GetInt[];
site ← in.GetInt[];
type ← in.GetInt[];
pad ← in.GetInt[];
[x, y] ← Apply[t, x, y];
out.PutFL["%4g %4g %8g %3g %3g %3g %3g %3g\n", LIST[IO.int[x], IO.int[y], IO.rope[name], IO.int[swap], IO.int[dia], IO.int[site], IO.int[type], IO.int[pad]]];
ENDLOOP;
IO.Close[in];
IO.Close[out];
};
END.