| /* |
| Copyright (C) 1996-1997 Id Software, Inc. |
| |
| This program is free software; you can redistribute it and/or |
| modify it under the terms of the GNU General Public License |
| as published by the Free Software Foundation; either version 2 |
| of the License, or (at your option) any later version. |
| |
| This program is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| |
| See the GNU General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with this program; if not, write to the Free Software |
| Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
| |
| */ |
| |
| // this file is shared by quake and qcc |
| |
| typedef int func_t; |
| typedef int string_t; |
| |
| typedef enum {ev_void, ev_string, ev_float, ev_vector, ev_entity, ev_field, ev_function, ev_pointer, |
| etype_t_max = 1 << 30} etype_t; |
| |
| |
| #define OFS_NULL 0 |
| #define OFS_RETURN 1 |
| #define OFS_PARM0 4 // leave 3 ofs for each parm to hold vectors |
| #define OFS_PARM1 7 |
| #define OFS_PARM2 10 |
| #define OFS_PARM3 13 |
| #define OFS_PARM4 16 |
| #define OFS_PARM5 19 |
| #define OFS_PARM6 22 |
| #define OFS_PARM7 25 |
| #define RESERVED_OFS 28 |
| |
| |
| enum { |
| OP_DONE, |
| OP_MUL_F, |
| OP_MUL_V, |
| OP_MUL_FV, |
| OP_MUL_VF, |
| OP_DIV_F, |
| OP_ADD_F, |
| OP_ADD_V, |
| OP_SUB_F, |
| OP_SUB_V, |
| |
| OP_EQ_F, |
| OP_EQ_V, |
| OP_EQ_S, |
| OP_EQ_E, |
| OP_EQ_FNC, |
| |
| OP_NE_F, |
| OP_NE_V, |
| OP_NE_S, |
| OP_NE_E, |
| OP_NE_FNC, |
| |
| OP_LE, |
| OP_GE, |
| OP_LT, |
| OP_GT, |
| |
| OP_LOAD_F, |
| OP_LOAD_V, |
| OP_LOAD_S, |
| OP_LOAD_ENT, |
| OP_LOAD_FLD, |
| OP_LOAD_FNC, |
| |
| OP_ADDRESS, |
| |
| OP_STORE_F, |
| OP_STORE_V, |
| OP_STORE_S, |
| OP_STORE_ENT, |
| OP_STORE_FLD, |
| OP_STORE_FNC, |
| |
| OP_STOREP_F, |
| OP_STOREP_V, |
| OP_STOREP_S, |
| OP_STOREP_ENT, |
| OP_STOREP_FLD, |
| OP_STOREP_FNC, |
| |
| OP_RETURN, |
| OP_NOT_F, |
| OP_NOT_V, |
| OP_NOT_S, |
| OP_NOT_ENT, |
| OP_NOT_FNC, |
| OP_IF, |
| OP_IFNOT, |
| OP_CALL0, |
| OP_CALL1, |
| OP_CALL2, |
| OP_CALL3, |
| OP_CALL4, |
| OP_CALL5, |
| OP_CALL6, |
| OP_CALL7, |
| OP_CALL8, |
| OP_STATE, |
| OP_GOTO, |
| OP_AND, |
| OP_OR, |
| |
| OP_BITAND, |
| OP_BITOR |
| }; |
| |
| |
| typedef struct statement_s |
| { |
| unsigned short op; |
| short a,b,c; |
| } dstatement_t; |
| |
| typedef struct |
| { |
| unsigned short type; // if DEF_SAVEGLOBGAL bit is set |
| // the variable needs to be saved in savegames |
| unsigned short ofs; |
| int s_name; |
| } ddef_t; |
| #define DEF_SAVEGLOBAL (1<<15) |
| |
| #define MAX_PARMS 8 |
| |
| typedef struct |
| { |
| int first_statement; // negative numbers are builtins |
| int parm_start; |
| int locals; // total ints of parms + locals |
| |
| int profile; // runtime |
| |
| int s_name; |
| int s_file; // source file defined in |
| |
| int numparms; |
| byte parm_size[MAX_PARMS]; |
| } dfunction_t; |
| |
| |
| #define PROG_VERSION 6 |
| typedef struct |
| { |
| int version; |
| int crc; // check of header file |
| |
| int ofs_statements; |
| int numstatements; // statement 0 is an error |
| |
| int ofs_globaldefs; |
| int numglobaldefs; |
| |
| int ofs_fielddefs; |
| int numfielddefs; |
| |
| int ofs_functions; |
| int numfunctions; // function 0 is an empty |
| |
| int ofs_strings; |
| int numstrings; // first string is a null string |
| |
| int ofs_globals; |
| int numglobals; |
| |
| int entityfields; |
| } dprograms_t; |
| |