Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5131 clevermous 1
/*
2
Copyright (C) 1996-1997 Id Software, Inc.
3
 
4
This program is free software; you can redistribute it and/or
5
modify it under the terms of the GNU General Public License
6
as published by the Free Software Foundation; either version 2
7
of the License, or (at your option) any later version.
8
 
9
This program is distributed in the hope that it will be useful,
10
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
 
13
See the GNU General Public License for more details.
14
 
15
You should have received a copy of the GNU General Public License
16
along with this program; if not, write to the Free Software
17
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
18
 
19
*/
20
 
21
// this file is shared by quake and qcc
22
 
23
typedef int	func_t;
24
typedef int	string_t;
25
 
26
typedef enum {ev_void, ev_string, ev_float, ev_vector, ev_entity, ev_field, ev_function, ev_pointer} etype_t;
27
 
28
 
29
#define	OFS_NULL		0
30
#define	OFS_RETURN		1
31
#define	OFS_PARM0		4		// leave 3 ofs for each parm to hold vectors
32
#define	OFS_PARM1		7
33
#define	OFS_PARM2		10
34
#define	OFS_PARM3		13
35
#define	OFS_PARM4		16
36
#define	OFS_PARM5		19
37
#define	OFS_PARM6		22
38
#define	OFS_PARM7		25
39
#define	RESERVED_OFS	28
40
 
41
 
42
enum {
43
	OP_DONE,
44
	OP_MUL_F,
45
	OP_MUL_V,
46
	OP_MUL_FV,
47
	OP_MUL_VF,
48
	OP_DIV_F,
49
	OP_ADD_F,
50
	OP_ADD_V,
51
	OP_SUB_F,
52
	OP_SUB_V,
53
 
54
	OP_EQ_F,
55
	OP_EQ_V,
56
	OP_EQ_S,
57
	OP_EQ_E,
58
	OP_EQ_FNC,
59
 
60
	OP_NE_F,
61
	OP_NE_V,
62
	OP_NE_S,
63
	OP_NE_E,
64
	OP_NE_FNC,
65
 
66
	OP_LE,
67
	OP_GE,
68
	OP_LT,
69
	OP_GT,
70
 
71
	OP_LOAD_F,
72
	OP_LOAD_V,
73
	OP_LOAD_S,
74
	OP_LOAD_ENT,
75
	OP_LOAD_FLD,
76
	OP_LOAD_FNC,
77
 
78
	OP_ADDRESS,
79
 
80
	OP_STORE_F,
81
	OP_STORE_V,
82
	OP_STORE_S,
83
	OP_STORE_ENT,
84
	OP_STORE_FLD,
85
	OP_STORE_FNC,
86
 
87
	OP_STOREP_F,
88
	OP_STOREP_V,
89
	OP_STOREP_S,
90
	OP_STOREP_ENT,
91
	OP_STOREP_FLD,
92
	OP_STOREP_FNC,
93
 
94
	OP_RETURN,
95
	OP_NOT_F,
96
	OP_NOT_V,
97
	OP_NOT_S,
98
	OP_NOT_ENT,
99
	OP_NOT_FNC,
100
	OP_IF,
101
	OP_IFNOT,
102
	OP_CALL0,
103
	OP_CALL1,
104
	OP_CALL2,
105
	OP_CALL3,
106
	OP_CALL4,
107
	OP_CALL5,
108
	OP_CALL6,
109
	OP_CALL7,
110
	OP_CALL8,
111
	OP_STATE,
112
	OP_GOTO,
113
	OP_AND,
114
	OP_OR,
115
 
116
	OP_BITAND,
117
	OP_BITOR
118
};
119
 
120
 
121
typedef struct statement_s
122
{
123
	unsigned short	op;
124
	short	a,b,c;
125
} dstatement_t;
126
 
127
typedef struct
128
{
129
	unsigned short	type;		// if DEF_SAVEGLOBGAL bit is set
130
								// the variable needs to be saved in savegames
131
	unsigned short	ofs;
132
	int			s_name;
133
} ddef_t;
134
#define	DEF_SAVEGLOBAL	(1<<15)
135
 
136
#define	MAX_PARMS	8
137
 
138
typedef struct
139
{
140
	int		first_statement;	// negative numbers are builtins
141
	int		parm_start;
142
	int		locals;				// total ints of parms + locals
143
 
144
	int		profile;		// runtime
145
 
146
	int		s_name;
147
	int		s_file;			// source file defined in
148
 
149
	int		numparms;
150
	byte	parm_size[MAX_PARMS];
151
} dfunction_t;
152
 
153
 
154
#define	PROG_VERSION	6
155
typedef struct
156
{
157
	int		version;
158
	int		crc;			// check of header file
159
 
160
	int		ofs_statements;
161
	int		numstatements;	// statement 0 is an error
162
 
163
	int		ofs_globaldefs;
164
	int		numglobaldefs;
165
 
166
	int		ofs_fielddefs;
167
	int		numfielddefs;
168
 
169
	int		ofs_functions;
170
	int		numfunctions;	// function 0 is an empty
171
 
172
	int		ofs_strings;
173
	int		numstrings;		// first string is a null string
174
 
175
	int		ofs_globals;
176
	int		numglobals;
177
 
178
	int		entityfields;
179
} dprograms_t;
180