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
~ BEGIN
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.STREAMFS.StreamOpen[Rope.Concat[fName, ".part"]];
out: IO.STREAMFS.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]]];
REPEAT
finished => NULL;
ENDLOOP;
IO.Close[in];
IO.Close[out];
};
END.