65 lines
3.0 KiB
Plaintext
65 lines
3.0 KiB
Plaintext
main:(
|
||
|
||
PRIO SLC = 8, SRC = 8; # SLC and SRC are not built in, define and overload them here #
|
||
OP SLC = (BITS b, INT rotate) BITS: b SHL rotate OR b SHR ( bits width - rotate );
|
||
OP SRC = (BITS b, INT rotate) BITS: b SHR rotate OR b SHL ( bits width - rotate );
|
||
# SRC and SRL are non-standard, but versions are built in to ALGOL 68R's standard prelude #
|
||
|
||
PRIO XOR = 2;
|
||
OP XOR = (BITS p, q) BITS: p AND NOT q OR NOT p AND q;
|
||
# XOR is non-standard, but a version is built in to ALGOL 68G's standard prelude #
|
||
|
||
# ALGOL 68 has 5 different ways of representing a BINary BITS - Bases: 2, 4, 8, 16 and flip/flop #
|
||
FORMAT b5 = $"2r"2r32d," 4r"4r16d," 8r"8r11d," 16r"16r8d," "gl$;
|
||
OP BBBBB = (BITS b)[]BITS: (b,b,b,b,b);
|
||
|
||
PROC bitwise = (BITS a, BITS b, INT shift)VOID:
|
||
(
|
||
printf((
|
||
$" bits shorths: "gxgl$, bits shorths, "1 plus the number of extra SHORT BITS types",
|
||
$" bits lengths: "gxgl$, bits lengths, "1 plus the number of extra LONG BITS types",
|
||
$" max bits: "gl$, max bits,
|
||
$" long max bits: "gl$, long max bits,
|
||
$" long long max bits: "gl$, long long max bits,
|
||
$" bits width: "gxgl$, bits width, "The number of CHAR required to display BITS",
|
||
$" long bits width: "gxgl$, long bits width, "The number of CHAR required to display LONG BITS",
|
||
$" long long bits width: "gxgl$, long long bits width, "The number of CHAR required to display LONG LONG BITS",
|
||
$" bytes shorths: "gxgl$, bytes shorths, "1 plus the number of extra SHORT BYTES types",
|
||
$" bytes lengths: "gxgl$, bits lengths, "1 plus the number of extra LONG BYTES types",
|
||
$" bytes width: "gxgl$, bytes width, "The number of CHAR required to display BYTES",
|
||
$" long bytes width: "gxgl$, long bytes width, "The number of CHAR required to display LONG BYTES"
|
||
));
|
||
|
||
printf(($" a: "f(b5)$, BBBBB a));
|
||
printf(($" b: "f(b5)$, BBBBB b));
|
||
printf(($" a AND b: "f(b5)$, BBBBB(a AND b)));
|
||
printf(($" a OR b: "f(b5)$, BBBBB(a OR b)));
|
||
printf(($" a XOR b: "f(b5)$, BBBBB(a XOR b)));
|
||
printf(($" NOT b: "f(b5)$, BBBBB NOT a));
|
||
printf(($" a SHL "d": "f(b5)$, shift, BBBBB(a SHL shift)));
|
||
printf(($" a SHR "d": "f(b5)$, shift, BBBBB(a SHR shift)));
|
||
|
||
printf(($" a SLC "d": "f(b5)$, shift, BBBBB(a SLC shift)));
|
||
printf(($" a SRC "d": "f(b5)$, shift, BBBBB(a SRC shift)))
|
||
COMMENT with original ALGOL 68 character set;
|
||
printf(($" a AND b: "f(b5)$, BBBBB(a ∧ b)));
|
||
printf(($" a OR b: "f(b5)$, BBBBB(a ∨ b)));
|
||
printf(($" NOT b: "f(b5)$, BBBBB ¬ a));
|
||
printf(($" a SHL "d": "f(b5)$, shift, BBBBB(a ↑ shift)));
|
||
printf(($" a SHR "d": "f(b5)$, shift, BBBBB(a ↓ shift)));
|
||
Also:
|
||
printf(($" a AND b: "f(b5)$, BBBBB(a /\ b)));
|
||
printf(($" a OR b: "f(b5)$, BBBBB(a \/ b)));
|
||
COMMENT
|
||
);
|
||
|
||
bitwise(BIN 255, BIN 170, 5)
|
||
# or using alternate representations for 255 and 170 in BITS #
|
||
CO
|
||
bitwise(2r11111111,2r10101010,5);
|
||
bitwise(4r3333,4r2222,5);
|
||
bitwise(8r377,8r252,5);
|
||
bitwise(16rff,16raa,5)
|
||
END CO
|
||
)
|