FOR count:
INT
IN [0..11]
DO
a, b, ci, s, co: BOOL;
a ←
SELECT count
FROM
0,1,2 => x[count],
3 => FALSE,
4,5,6,7,8,9,10,11 => y[0],
ENDCASE => ERROR;
b ←
SELECT count
FROM
0,1,2,3 => NOT y[8],
4,5,6,7 => y[8],
8,9,10,11 => extend,
ENDCASE => ERROR;
ci ←
SELECT count
FROM
0 => TRUE,
4 => FALSE,
ENDCASE => carry;
s ← ((a#b)#ci);
co ← (a AND b) OR (a AND ci) OR (b AND ci);
FOR bit: INT IN [0..10] DO y[bit] ← y[bit+1]; ENDLOOP;
IF count=3 THEN extend ← s;
carry ← co;
y[11] ← s;
TerminalIO.PutF["\n %g %g %g : %g %g", IO.int[BoolInt[a]], IO.int[BoolInt[b]], IO.int[BoolInt[ci]], IO.int[BoolInt[s]], IO.int[BoolInt[co]]];
TerminalIO.PutF[" : %g %g ", IO.int[BoolInt[carry]], IO.int[BoolInt[extend]]];
FOR bit: INT DECREASING IN [0..11] DO TerminalIO.PutF["%g", IO.int[BoolInt[y[bit]]]]; ENDLOOP;
ENDLOOP;