Merge branch 'master' of ssh://git.stderr.nl/projects/chimara/chimara
[projects/chimara/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     GESTALT_FLOAT        = 11,
73     
74     // This special selector returns 1 if the cache control
75     // opcodes 'git_setcacheram' and 'git_prunecache' are available.
76     
77     GESTALT_GIT_CACHE_CONTROL = 0x7940
78 };
79
80 extern git_uint32 gestalt (enum GestaltSelector sel, git_uint32 param);
81
82 // opcodes.c
83
84 extern void parseInstruction (git_uint32 * pc, int * done);
85
86 // operand.c
87
88 typedef enum { reg_L1, reg_L2, reg_L3, reg_L4, reg_L5, reg_L6, reg_L7 } LoadReg;
89 typedef enum { reg_S1, reg_S2 } StoreReg;
90 typedef enum { size32, size16, size8 } TransferSize;
91
92 extern git_uint32 parseLoad  (git_uint32 * pc, LoadReg reg, int mode, TransferSize, git_sint32 * constVal);
93 extern void       parseStore (git_uint32 * pc, StoreReg reg, int mode, TransferSize);
94
95 extern void parseCallStub  (git_uint32 * pc, int mode);
96 extern void parseSaveStub  (git_uint32 * pc, int mode);
97 extern void parseUndoStub  (git_uint32 * pc, int mode);
98 extern void parseCatchStub (git_uint32 * pc, int * modes);
99
100 // compiler.c
101
102 #include "compiler.h"
103
104 // peephole.c
105
106 extern void resetPeepholeOptimiser();
107 extern void emitCode (Label);
108
109 // terp.c
110
111 #ifdef USE_DIRECT_THREADING
112     extern Opcode* gOpcodeTable;
113 #   define labelToOpcode(label) (gOpcodeTable[label])
114 #else
115 #   define labelToOpcode(label) label
116 #endif
117
118 extern git_sint32* gStackPointer;
119
120 extern void startProgram (size_t cacheSize, enum IOMode ioMode);
121
122 // glkop.c
123
124 extern int git_init_dispatch();
125 extern glui32 git_perform_glk(glui32 funcnum, glui32 numargs, glui32 *arglist);
126 extern strid_t git_find_stream_by_id(glui32 id);
127
128 // git_search.c
129
130 extern glui32 git_binary_search(glui32 key, glui32 keysize, 
131   glui32 start, glui32 structsize, glui32 numstructs, 
132   glui32 keyoffset, glui32 options);
133
134 extern glui32 git_linked_search(glui32 key, glui32 keysize, 
135   glui32 start, glui32 keyoffset, glui32 nextoffset, glui32 options);
136
137 extern glui32 git_linear_search(glui32 key, glui32 keysize, 
138   glui32 start, glui32 structsize, glui32 numstructs, 
139   glui32 keyoffset, glui32 options);
140
141 // savefile.c
142
143 extern git_sint32 saveToFile (git_sint32* base, git_sint32 * sp, git_sint32 file);
144 extern git_sint32 restoreFromFile (git_sint32* base, git_sint32 file,
145                       git_uint32 protectPos, git_uint32 protectSize);
146
147 // saveundo.c
148
149 extern void initUndo (git_uint32 size);
150 extern void resetUndo ();
151 extern void shutdownUndo ();
152
153 extern int  saveUndo (git_sint32* base, git_sint32* sp);
154 extern int  restoreUndo (git_sint32* base,
155                 git_uint32 protectPos, git_uint32 protectSize);
156
157 // heap.c
158
159 extern glui32 heap_get_start ();
160 extern glui32 heap_alloc (glui32 len);
161 extern void heap_free (glui32 addr);
162 extern int heap_is_active ();
163 extern void heap_clear ();
164 extern int heap_get_summary (glui32 *valcount, glui32 **summary);
165 extern int heap_apply_summary (glui32 valcount, glui32 *summary);
166
167 // accel.c
168
169 typedef glui32 (*acceleration_func)(glui32 argc, glui32 *argv);
170 extern void init_accel ();
171 extern acceleration_func accel_find_func (glui32 index);
172 extern acceleration_func accel_get_func (glui32 addr);
173 extern void accel_set_func (glui32 index, glui32 addr);
174 extern void accel_set_param (glui32 index, glui32 val);
175
176 #endif // GIT_H