 
 // Helper functions
 
-boolean consp (object *x) {
+bool consp (object *x) {
   if (x == NULL) return false;
   unsigned int type = x->type;
-  return type >= PAIR || type == ZERO;
-}
-
-boolean atom (object *x) {
+  return type >= PAIR || type == ZZERO;
+}
+
+bool atom (object *x) {
   if (x == NULL) return true;
   unsigned int type = x->type;
-  return type < PAIR && type != ZERO;
-}
-
-boolean listp (object *x) {
+  return type < PAIR && type != ZZERO;
+}
+
+bool listp (object *x) {
   if (x == NULL) return true;
   unsigned int type = x->type;
-  return type >= PAIR || type == ZERO;
-}
-
-boolean improperp (object *x) {
+  return type >= PAIR || type == ZZERO;
+}
+
+bool improperp (object *x) {
   if (x == NULL) return false;
   unsigned int type = x->type;
-  return type < PAIR && type != ZERO;
-}
+  return type < PAIR && type != ZZERO;
+}
+
+object *quote (object *arg) {
+  return cons(symbol(QUOTE), cons(arg,NULL));
+}
+
+// Radix 40 encoding
+
+#define MAXSYMBOL 64000
 
 int toradix40 (char ch) {
   if (ch == 0) return 0;
   if (ch >= '0' && ch <= '9') return ch-'0'+30;
+  if (ch == '$') return 27; if (ch == '*') return 28; if (ch == '-') return 29;
   ch = ch | 0x20;
   if (ch >= 'a' && ch <= 'z') return ch-'a'+1;
   return -1; // Invalid

#endif
}

// Special forms

object *sp_quote (object *args, object *env) {

  int length = 0;
  form = cdr(form);
  while (form != NULL) {
    int chars = form->chars;
    for (int i=(sizeof(int)-1)*8; i>=0; i=i-8) {
      if (chars>>i & 0xFF) length++;
    }
