1 
2 // this file is shared by quake and qcc
3 
4 typedef int	func_t;
5 typedef int	string_t;
6 
7 typedef enum {ev_void, ev_string, ev_float, ev_vector, ev_entity, ev_field, ev_function, ev_pointer} etype_t;
8 
9 
10 #define	OFS_NULL		0
11 #define	OFS_RETURN		1
12 #define	OFS_PARM0		4		// leave 3 ofs for each parm to hold vectors
13 #define	OFS_PARM1		7
14 #define	OFS_PARM2		10
15 #define	OFS_PARM3		13
16 #define	OFS_PARM4		16
17 #define	OFS_PARM5		19
18 #define	OFS_PARM6		22
19 #define	OFS_PARM7		25
20 #define	RESERVED_OFS	28
21 
22 
23 enum {
24 	OP_DONE,
25 	OP_MUL_F,
26 	OP_MUL_V,
27 	OP_MUL_FV,
28 	OP_MUL_VF,
29 	OP_DIV_F,
30 	OP_ADD_F,
31 	OP_ADD_V,
32 	OP_SUB_F,
33 	OP_SUB_V,
34 
35 	OP_EQ_F,
36 	OP_EQ_V,
37 	OP_EQ_S,
38 	OP_EQ_E,
39 	OP_EQ_FNC,
40 
41 	OP_NE_F,
42 	OP_NE_V,
43 	OP_NE_S,
44 	OP_NE_E,
45 	OP_NE_FNC,
46 
47 	OP_LE,
48 	OP_GE,
49 	OP_LT,
50 	OP_GT,
51 
52 	OP_LOAD_F,
53 	OP_LOAD_V,
54 	OP_LOAD_S,
55 	OP_LOAD_ENT,
56 	OP_LOAD_FLD,
57 	OP_LOAD_FNC,
58 
59 	OP_ADDRESS,
60 
61 	OP_STORE_F,
62 	OP_STORE_V,
63 	OP_STORE_S,
64 	OP_STORE_ENT,
65 	OP_STORE_FLD,
66 	OP_STORE_FNC,
67 
68 	OP_STOREP_F,
69 	OP_STOREP_V,
70 	OP_STOREP_S,
71 	OP_STOREP_ENT,
72 	OP_STOREP_FLD,
73 	OP_STOREP_FNC,
74 
75 	OP_RETURN,
76 	OP_NOT_F,
77 	OP_NOT_V,
78 	OP_NOT_S,
79 	OP_NOT_ENT,
80 	OP_NOT_FNC,
81 	OP_IF,
82 	OP_IFNOT,
83 	OP_CALL0,
84 	OP_CALL1,
85 	OP_CALL2,
86 	OP_CALL3,
87 	OP_CALL4,
88 	OP_CALL5,
89 	OP_CALL6,
90 	OP_CALL7,
91 	OP_CALL8,
92 	OP_STATE,
93 	OP_GOTO,
94 	OP_AND,
95 	OP_OR,
96 
97 	OP_BITAND,
98 	OP_BITOR
99 };
100 
101 
102 typedef struct statement_s
103 {
104 	unsigned short	op;
105 	short	a,b,c;
106 } dstatement_t;
107 
108 typedef struct
109 {
110 	unsigned short	type;		// if DEF_SAVEGLOBGAL bit is set
111 								// the variable needs to be saved in savegames
112 	unsigned short	ofs;
113 	int			s_name;
114 } ddef_t;
115 #define	DEF_SAVEGLOBGAL	(1<<15)
116 
117 #define	MAX_PARMS	8
118 
119 typedef struct
120 {
121 	int		first_statement;	// negative numbers are builtins
122 	int		parm_start;
123 	int		locals;				// total ints of parms + locals
124 
125 	int		profile;		// runtime
126 
127 	int		s_name;
128 	int		s_file;			// source file defined in
129 
130 	int		numparms;
131 	byte	parm_size[MAX_PARMS];
132 } dfunction_t;
133 
134 
135 #define	PROG_VERSION	6
136 typedef struct
137 {
138 	int		version;
139 	int		crc;			// check of header file
140 
141 	int		ofs_statements;
142 	int		numstatements;	// statement 0 is an error
143 
144 	int		ofs_globaldefs;
145 	int		numglobaldefs;
146 
147 	int		ofs_fielddefs;
148 	int		numfielddefs;
149 
150 	int		ofs_functions;
151 	int		numfunctions;	// function 0 is an empty
152 
153 	int		ofs_strings;
154 	int		numstrings;		// first string is a null string
155 
156 	int		ofs_globals;
157 	int		numglobals;
158 
159 	int		entityfields;
160 } dprograms_t;
161 
162