<> <> <> <> DIRECTORY PW, TerminalIO; DemoDecoder: CEDAR PROGRAM IMPORTS PW, TerminalIO = BEGIN OPEN PW; Generate: UserProc = { 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, TwoToThe[n-1]], subDecoder], AbutX [ArrayY [one, TwoToThe[n-1]], subDecoder] ]; }; }; n: INT _ TerminalIO.RequestInt["How many bits in the decoder? "]; RETURN [AbutX [ ArrayY [left, TwoToThe[n]], DecGen [n], ArrayY [right, TwoToThe[n]] ]]; }; Register[Generate, "Decoder"]; END. <<>>