59 lines
768 B
Plaintext
59 lines
768 B
Plaintext
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
|