-/* I/O routines (SPEAK, PSPEAK, RSPEAK, SETPRM, GETIN, YES) */
+void token_to_packed(char token[6], long* packed)
+{
+ *packed = 0;
+ for (size_t i = 0; i < 5; ++i)
+ {
+ if (token[4 - i] == '\0')
+ continue;
+ char mapped = ascii_to_advent[(int) token[4 - i]];
+ *packed |= (mapped << (6 * i));
+ }
+}
+
+/* Hide the fact that wods are corrently packed longs */
+
+bool wordeq(token_t a, token_t b)
+{
+ return a == b;
+}
+
+bool wordempty(token_t a)
+{
+ return a == 0;
+}
+
+void wordclear(token_t *v)
+{
+ *v = 0;
+}
+
+/* I/O routines (speak, pspeak, rspeak, GETIN, YES) */