   if (ch == '\'') return (object *)QUO;
   if (ch == '.') return (object *)DOT;
 
+  // Parse string
+  if (ch == '"') {
+    object *obj = myalloc();
+    obj->type = STRING;
+    ch = gchar();
+    object *head = NULL;
+    object *tail = NULL;
+    int chars = 0;
+    while (ch != '"') {
+      if (ch == '\\') ch = gchar();
+      if (chars == 0) {
+        chars = ch<<8;
+        object *cell = myalloc();
+        if (head == NULL) head = cell; else tail->car = cell;
+        cell->car = NULL;
+        cell->integer = chars;
+        tail = cell;
+      } else {
+        chars = chars | ch;
+        tail->integer = chars;
+        chars = 0;
+      }
+      ch = gchar();
+    }
+    obj->cdr = head;
+    return obj;
+  }
+  
   // Parse variable or number
   int index = 0, base = 10, sign = 1;
   unsigned int result = 0;

  }
}

object *myalloc() {
  if (freespace == 0) error(F("No room"));
  object *temp = freelist;
  freelist = cdr(freelist);


void pint (int i) {
  int lead = 0;
  if (i<0) pchar('-');
  for (int d=10000; d>0; d=d/10) {
    int j = i/d;
    if (j!=0 || lead || d==1) { pchar(abs(j)+'0'); lead=1;}
    i = i - j*d;
  }
}
