+//===================================================================
+//============================ lex.c ================================
+//===================================================================
+struct lex_file {
+ FILE *file;
+ char peek [5];
+ char lastok[8192];
+
+ int last;
+ int current;
+ int length;
+ int size;
+};
+
+/*
+ * It's important that this table never exceed 32 keywords, the ascii
+ * table starts at 33 (and we don't want conflicts)
+ */
+#define TOKEN_DO 0
+#define TOKEN_ELSE 1
+#define TOKEN_IF 2
+#define TOKEN_WHILE 3
+#define TOKEN_BREAK 4
+#define TOKEN_CONTINUE 5
+#define TOKEN_RETURN 6
+#define TOKEN_GOTO 7
+#define TOKEN_FOR 8 // extension
+#define TOKEN_TYPEDEF 9 // extension
+
+// ensure the token types are out of the
+// bounds of anyothers that may conflict.
+#define TOKEN_FLOAT 110
+#define TOKEN_VECTOR 111
+#define TOKEN_STRING 112
+#define TOKEN_ENTITY 113
+#define TOKEN_VOID 114
+
+/*
+ * Lexer state constants, these are numbers for where exactly in
+ * the lexing the lexer is at. Or where it decided to stop if a lexer
+ * error occurs. These numbers must be > where the ascii-table ends
+ * and > the last type token which is TOKEN_VOID
+ */
+#define LEX_COMMENT 1128
+#define LEX_CHRLIT 1129
+#define LEX_STRLIT 1130
+#define LEX_IDENT 1131
+
+int lex_token(struct lex_file *);
+void lex_reset(struct lex_file *);
+void lex_close(struct lex_file *);
+struct lex_file *lex_open (FILE *);
+
+//===================================================================
+//========================== error.c ================================
+//===================================================================
+#define ERROR_LEX (SHRT_MAX+0)
+#define ERROR_PARSE (SHRT_MAX+1)
+#define ERROR_INTERNAL (SHRT_MAX+2)
+#define ERROR_COMPILER (SHRT_MAX+3)
+#define ERROR_PREPRO (SHRT_MAX+4)
+int error(int, const char *, ...);
+
+//===================================================================
+//========================== parse.c ================================
+//===================================================================
+int parse_tree(struct lex_file *);
+struct parsenode {
+ struct parsenode *next;
+ int type; /* some token */
+};
+
+//===================================================================
+//========================== typedef.c ==============================
+//===================================================================
+typedef struct typedef_node_t {
+ char *name;
+} typedef_node;
+
+void typedef_init();
+void typedef_clear();
+typedef_node *typedef_find(const char *);
+int typedef_add (const char *, const char *);
+
+
+//===================================================================
+//=========================== util.c ================================
+//===================================================================
+void *util_memory_a(unsigned int, unsigned int, const char *);
+void util_memory_d(void *, unsigned int, const char *);
+char *util_strdup (const char *);
+
+#ifdef NOTRACK
+# define mem_a(x) malloc(x)
+# define mem_d(x) free (x)
+#else
+# define mem_a(x) util_memory_a((x), __LINE__, __FILE__)
+# define mem_d(x) util_memory_d((x), __LINE__, __FILE__)
+#endif
+
+//===================================================================
+//=========================== code.c ================================
+//===================================================================