PROC ToBinaryStr(BYTE n CHAR ARRAY s) BYTE i s(0)=8 i=8 SetBlock(s+1,8,'0) WHILE n DO s(i)=(n&1)+'0 n==RSH 1 i==-1 OD RETURN PROC PrintB2(BYTE n) IF n<10 THEN Put(32) FI PrintB(n) RETURN PROC PrintBin5(BYTE n) CHAR ARRAY s(9),sub(6) ToBinaryStr(n,s) SCopyS(sub,s,4,s(0)) Print(sub) RETURN BYTE FUNC Encode(BYTE n) RETURN (n XOR (n RSH 1)) BYTE FUNC Decode(BYTE n) BYTE res res=n DO n==RSH 1 IF n THEN res==XOR n ELSE EXIT FI OD RETURN (res) PROC Main() BYTE i,g,b CHAR ARRAY sep=" -> " FOR i=0 TO 31 DO PrintB2(i) Print(sep) PrintBin5(i) Print(sep) g=Encode(i) PrintBin5(g) Print(sep) b=Decode(g) PrintBin5(b) Print(sep) PrintB2(b) PutE() OD RETURN