Add Glulxe and Git. They compile but don't work yet.
[rodin/chimara.git] / interpreters / git / git.h
1 // Main header for git
2 // $Id: git.h,v 1.32 2004/12/22 12:40:07 iain Exp $
3
4 #ifndef GIT_H
5 #define GIT_H
6
7 #include <stddef.h>
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <glk.h>
11
12 #include "version.h"
13 #include "config.h"
14
15 // Version number formatting
16
17 #define GIT_VERSION_NUM (GIT_MAJOR << 16) \
18                       | (GIT_MINOR << 8)  \
19                       | (GIT_PATCH)
20
21 #define _str2(s) #s
22 #define _str(s) _str2(s)
23
24 #if GIT_PATCH == 0
25 #define GIT_VERSION_STR \
26 _str(GIT_MAJOR) "." _str(GIT_MINOR)
27 #else
28 #define GIT_VERSION_STR \
29 _str(GIT_MAJOR) "." _str(GIT_MINOR) "." _str(GIT_PATCH)
30 #endif
31
32 // git.c
33
34 extern void gitWithStream (strid_t stream,
35                            git_uint32 cacheSize,
36                            git_uint32 undoSize);
37
38 extern void git (const git_uint8 * game,
39                  git_uint32 gameSize,
40                  git_uint32 cacheSize,
41                  git_uint32 undoSize);
42
43 extern void fatalError (const char *);
44
45 // memory.c
46
47 #include "memory.h"
48
49 // gestalt.c
50
51 enum IOMode
52 {
53     IO_NULL   = 0,
54     IO_FILTER = 1,
55     IO_GLK    = 2,
56     IO_MAX
57 };
58
59 enum GestaltSelector
60 {
61     GESTALT_SPEC_VERSION = 0,
62     GESTALT_TERP_VERSION = 1,
63     GESTALT_RESIZEMEM    = 2,
64     GESTALT_UNDO         = 3,
65     GESTALT_IO_SYSTEM    = 4,
66     GESTALT_UNICODE      = 5,
67     GESTALT_MEM_COPY     = 6,
68     GESTALT_MALLOC       = 7,
69     GESTALT_MALLOC_HEAP  = 8,
70     GESTALT_ACCELERATION = 9,
71     GESTALT_ACCELFUNC    = 10,
72     
73     // This special selector returns 1 if the cache control
74     // opcodes 'git_setcacheram' and 'git_prunecache' are available.
75     
76     GESTALT_GIT_CACHE_CONTROL = 0x7940
77 };
78
79 extern git_uint32 gestalt (enum GestaltSelector sel, git_uint32 param);
80
81 // opcodes.c
82
83 extern void parseInstruction (git_uint32 * pc, int * done);
84
85 // operand.c
86
87 typedef enum { reg_L1, reg_L2, reg_L3, reg_L4, reg_L5, reg_L6, reg_L7 } LoadReg;
88 typedef enum { reg_S1, reg_S2 } StoreReg;
89 typedef enum { size32, size16, size8 } TransferSize;
90
91 extern git_uint32 parseLoad  (git_uint32 * pc, LoadReg reg, int mode, TransferSize, git_sint32 * constVal);
92 extern void       parseStore (git_uint32 * pc, StoreReg reg, int mode, TransferSize);
93
94 extern void parseCallStub  (git_uint32 * pc, int mode);
95 extern void parseCatchStub (git_uint32 * pc, int mode);
96 extern void parseSaveStub  (git_uint32 * pc, int mode);
97 extern void parseUndoStub  (git_uint32 * pc, int mode);
98
99 // compiler.c
100
101 #include "compiler.h"
102
103 // peephole.c
104
105 extern void resetPeepholeOptimiser();
106 extern void emitCode (Label);
107
108 // terp.c
109
110 #ifdef USE_DIRECT_THREADING
111     extern Opcode* gOpcodeTable;
112 #   define labelToOpcode(label) (gOpcodeTable[label])
113 #else
114 #   define labelToOpcode(label) label
115 #endif
116
117 extern git_sint32* gStackPointer;
118
119 extern void startProgram (size_t cacheSize, enum IOMode ioMode);
120
121 // glkop.c
122
123 extern int git_init_dispatch();
124 extern glui32 git_perform_glk(glui32 funcnum, glui32 numargs, glui32 *arglist);
125 extern strid_t git_find_stream_by_id(glui32 id);
126
127 // git_search.c
128
129 extern glui32 git_binary_search(glui32 key, glui32 keysize, 
130   glui32 start, glui32 structsize, glui32 numstructs, 
131   glui32 keyoffset, glui32 options);
132
133 extern glui32 git_linked_search(glui32 key, glui32 keysize, 
134   glui32 start, glui32 keyoffset, glui32 nextoffset, glui32 options);
135
136 extern glui32 git_linear_search(glui32 key, glui32 keysize, 
137   glui32 start, glui32 structsize, glui32 numstructs, 
138   glui32 keyoffset, glui32 options);
139
140 // savefile.c
141
142 extern git_sint32 saveToFile (git_sint32* base, git_sint32 * sp, git_sint32 file);
143 extern git_sint32 restoreFromFile (git_sint32* base, git_sint32 file,
144                       git_uint32 protectPos, git_uint32 protectSize);
145
146 // saveundo.c
147
148 extern void initUndo (git_uint32 size);
149 extern void resetUndo ();
150 extern void shutdownUndo ();
151
152 extern int  saveUndo (git_sint32* base, git_sint32* sp);
153 extern int  restoreUndo (git_sint32* base,
154                 git_uint32 protectPos, git_uint32 protectSize);
155
156 // heap.c
157
158 extern glui32 heap_get_start ();
159 extern glui32 heap_alloc (glui32 len);
160 extern void heap_free (glui32 addr);
161 extern int heap_is_active ();
162 extern void heap_clear ();
163 extern int heap_get_summary (glui32 *valcount, glui32 **summary);
164 extern int heap_apply_summary (glui32 valcount, glui32 *summary);
165
166 // accel.c
167
168 typedef glui32 (*acceleration_func)(glui32 argc, glui32 *argv);
169 extern void init_accel ();
170 extern acceleration_func accel_find_func (glui32 index);
171 extern acceleration_func accel_get_func (glui32 addr);
172 extern void accel_set_func (glui32 index, glui32 addr);
173 extern void accel_set_param (glui32 index, glui32 val);
174
175 #endif // GIT_H