PWDemo.mesa
Copyright Ó 1985, 1986, 1987 by Xerox Corporation. All rights reversed.
Created by: Monier, May 9, 1985 11:18:58 pm PDT
Bertrand Serlet April 2, 1987 11:15:12 pm PST
DIRECTORY CD, PW, TerminalIO;
PWDemo: CEDAR PROGRAM IMPORTS PW, TerminalIO =
BEGIN OPEN CD, PW;
powersOfTwo: ARRAY [0 .. 33] OF INT = [
1B, 2B, 4B, 1B1, 2B1, 4B1,
1B2, 2B2, 4B2, 1B3, 2B3, 4B3,
1B4, 2B4, 4B4, 1B5, 2B5, 4B5,
1B6, 2B6, 4B6, 1B7, 2B7, 4B7,
1B8, 2B8, 4B8, 1B8, 2B8, 4B8,
1B9, 2B9, 4B9, 1B10];
Generate: GeneratorProc = {
zero: Object ← Get[design, "zero"];
one: Object ← Get[design, "one"];
left: Object ← Get[design, "left"];
right: Object ← Get[design, "right"];
DecGen: PROC [n: INT] RETURNS [decoder: Object] = {
IF n=0
THEN RETURN [NIL]
ELSE {
subDecoder: Object ← DecGen [n-1];
decoder ← AbutY[
AbutX [ArrayY [zero, powersOfTwo[n-1]], subDecoder],
AbutX [ArrayY [one, powersOfTwo[n-1]], subDecoder]
];
};
};
n: INT ← TerminalIO.RequestInt["How many bits in the decoder? "];
RETURN [AbutX [
ArrayY [left, powersOfTwo[n]],
DecGen [n],
ArrayY [right, powersOfTwo[n]]
]];
};
RegisterGenerator[Generate, "Decoder"];
END.