PR_COMP.H 2.3 KB

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