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 181