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, ""));
+}