DIRECTORY
Commander USING [CommandProc, Register],
Rope USING [ROPE],
FS USING [StreamOpen],
IO USING [card, Close, GetTokenRope, int, PutF, RIS, rope, STREAM];
Trans106Proc: Commander.CommandProc =
BEGIN
i: CARD;
x, y: INT;
stream: IO.STREAM ← IO.RIS[cmd.commandLine];
outputName: ROPE ← IO.GetTokenRope[stream].token;
out: IO.STREAM ← FS.StreamOpen[outputName,$create];
IO.PutF[out, "4096 2048 -300 -375 200 5775 -100 -400 TRANS106 PARC-TRANS106 J\n"];
FOR i
IN [1..53]
DO
x← ((i-1)/4)*100;
y ← -(((i-1) MOD 4)* 100);
IF y = 0
AND x =0
THEN {
IO.PutF[out, "%g %g P%g 255 0 %g 0 24\n", IO.int[x], IO.int[y], IO.card[i], IO.card[i]];
}
ELSE
IF y = -100
AND 100 < x
AND x < 1200
THEN {
IO.PutF[out, "%g %g GND 1 0 %g 5 26\n", IO.int[x], IO.int[y], IO.card[i]];
}
ELSE
IF y = 0
AND 300 < x
AND x < 1000
THEN {
IO.PutF[out, "%g %g VCC 1 0 %g 4 27\n", IO.int[x], IO.int[y], IO.card[i]];
}
ELSE {
IO.PutF[out, "%g %g P%g 255 0 %g 0 25\n", IO.int[x], IO.int[y], IO.card[i], IO.card[i]];
};
ENDLOOP;
FOR i
IN [1..53]
DO
x← ((i-1)/4)*100;
y ← -(((i-1) MOD 4)* 100)-400;
IO.PutF[out, "%g %g P%g 255 0 %g 0 25\n", IO.int[x], IO.int[y], IO.card[i+53], IO.card[i+53]];
ENDLOOP;
IO.Close[out];
IO.PutF[cmd.out, "File %g Written\n", IO.rope[outputName]];
END;