Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  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.