 
 // Read functions
 
+#if defined(lisplibrary)
+int glibrary () {
+  if (LastChar) { 
+    char temp = LastChar;
+    LastChar = 0;
+    return temp;
+  }
+  char c = pgm_read_byte(&LispLibrary[GlobalStringIndex++]);
+  return (c != 0) ? c : -1; // -1?
+}
+
+void loadfromlibrary (object *env) {   
+  GlobalStringIndex = 0;
+  object *line = read(glibrary);
+  while (line != NULL) {
+    eval(line, env);
+    line = read(glibrary);
+  }
+}
+#endif
+
 int gserial () {
   if (LastChar) { 
     char temp = LastChar;

  // Parse symbol, character, or number
  int index = 0, base = 10, sign = 1;
  char *buffer = SymbolTop;
  int bufmax = SYMBOLTABLESIZE-(buffer-SymbolTable)-1; // Max index
  unsigned int result = 0;
  if (ch == '+') {
    buffer[index++] = ch;

    ch = '(';
  }
  if (ch == '\n') ch = gfun();
  if (ch == -1) return nil;
  if (ch == ')') return (object *)KET;
  if (ch == '(') return (object *)BRA;
