0,0 → 1,180 |
/* |
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; |
|
|
#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; |
|