Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/obj/tools/lisp/microcode.c b/obj/tools/lisp/microcode.c
new file mode 100644
index 0000000..7fadd46
--- /dev/null
+++ b/obj/tools/lisp/microcode.c
@@ -0,0 +1,129 @@
+// MICROCODE.C -- lisp microcode
+// (c) 1994 by Hate@MorgenGrauen, TUBmud, NightFall
+// --
+// Copy, change and distribute this bit of software as much as you like,
+// but keep the name of the original author in the header.
+
+#pragma strong_types
+ 
+#include "tweak.h"
+#include "types.h"
+
+private nosave mapping memory;	// contains function information
+private nosave string *G_input;	// global input stack
+private nosave string *history;	// input history
+
+nomask static public string output(mixed res);
+
+#define CODE	0
+#define QUOTE	1
+
+static void create()
+{
+  memory = m_allocate(0, 2);
+  G_input = ({});
+}
+
+nomask static closure get_function(string str)
+{
+  closure sym;
+  if((sym = symbol_function(str, this_object())) ||     // FUNCTIONS
+     (sym = symbol_function(str)) ||
+     (sym = symbol_variable(str)))
+    return sym;
+#if defined(symbol_variable)
+  if(str == "memory") return #'memory;
+#endif
+  return 0;
+}
+
+// pre_parse() -- parse code before examination by a code generator
+nomask static public int pre_parse(mixed code)
+{
+  if(pointerp(code) && sizeof(code) &&
+     (closurep(code[0]) || symbolp(code[0])))
+  {
+    mixed idx, tmp;
+    if(sizeof(tmp = old_explode(sprintf("%O", code[0]), "->")) > 1)
+      idx = tmp[1];
+    else idx = code[0];
+    // warning only the setting of bit 0 or 1 is allowed, not 0 and 1
+    // thus 01 leads to normal quote, 10 for special, 11 not quote at all
+    return (memory[idx, QUOTE] & (3<<2*(sizeof(code)-1)))>>2*(sizeof(code)-1);
+  }
+}
+
+// prog_parse() -- examine a token and take actions
+//
+nomask varargs static public mixed prog_parse(mixed token, int func)
+{
+  if(symbolp(token))
+      if(!member(memory, token))
+        token = ({#'?, ({#'member, ({#'memory}), quote(token)}),
+                     ({#'[, ({#'memory}), quote(token)}),
+                     ({#'raise_error,
+		       sprintf("Symbol %O' not bound\n", token) }) });
+      else token = func ? token : memory[token];
+  return token;
+}
+
+// evaluate compiled code
+nomask static public mixed eval(mixed code)
+{
+  mapping sym;
+  sym = filter_indices(memory, #'symbolp);
+  return apply(lambda(m_indices(sym), code), m_values(sym));
+}
+
+// add new lines to input stack
+nomask static public void add_input(string input) 
+{ 
+  if(!stringp(input)) return;
+  G_input += old_explode(input, "\n"); 
+}
+
+// clear the input stack
+nomask static public void clear_input()
+{
+  G_input = ({});
+}
+
+// get a line from input stack
+// and save it into the history
+nomask varargs string get_line()
+{
+  if(sizeof(G_input))
+  {
+    if(!pointerp(history)) history = ({});
+    history += ({ G_input[0] });
+    G_input[0..0] = ({});
+    return history[<1];
+  }
+  return 0;  
+}
+
+// transform() -- transforms some of the output strings
+nomask private string transform(string e)
+{
+  switch(e)
+  {
+  case "({": return "(";
+  case "})": return ")";
+  case "([": return "[";
+  case "])": return "]";
+  }
+  if(strstr(e, " /* sizeof() == ") != -1) return "";
+  if(strstr(e, "\n") != -1) if(e[0] == ',') return " "; else return "";
+  return e;
+}
+
+// output() -- prints given data in a clean way
+nomask static public string output(mixed res)
+{
+  res = regexplode(sprintf("%O", res),
+                   "\n[ ]*|[,]\n[ ]*|[(][{\[]|[\]}][)]|[#][']|"
+                  +" [/][*] sizeof[(][)] == [0-9][0-9]* [*][/]")
+      - ({"\n", ",\n", "#'"});
+  res = map(res, #'transform);
+  return sprintf("%s\n", implode(res, ""));
+}