home *** CD-ROM | disk | FTP | other *** search
/ Large Pack of OldSkool DOS MOD Trackers / goattracker_2.68.zip / src / asm / parse.h < prev    next >
C/C++ Source or Header  |  2008-04-01  |  4KB  |  122 lines

  1. #ifndef INCLUDED_PARSE
  2. #define INCLUDED_PARSE
  3.  
  4. /*
  5.  * Copyright (c) 2005 Magnus Lind.
  6.  *
  7.  * This software is provided 'as-is', without any express or implied warranty.
  8.  * In no event will the authors be held liable for any damages arising from
  9.  * the use of this software.
  10.  *
  11.  * Permission is granted to anyone to use this software, alter it and re-
  12.  * distribute it freely for any non-commercial, non-profit purpose subject to
  13.  * the following restrictions:
  14.  *
  15.  *   1. The origin of this software must not be misrepresented; you must not
  16.  *   claim that you wrote the original software. If you use this software in a
  17.  *   product, an acknowledgment in the product documentation would be
  18.  *   appreciated but is not required.
  19.  *
  20.  *   2. Altered source versions must be plainly marked as such, and must not
  21.  *   be misrepresented as being the original software.
  22.  *
  23.  *   3. This notice may not be removed or altered from any distribution.
  24.  *
  25.  *   4. The names of this software and/or it's copyright holders may not be
  26.  *   used to endorse or promote products derived from this software without
  27.  *   specific prior written permission.
  28.  *
  29.  */
  30.  
  31. #include "int.h"
  32. #include "vec.h"
  33. #include "membuf.h"
  34. #include "expr.h"
  35.  
  36. #define ATOM_TYPE_OP_ARG_NONE    0    /* uses u.op */
  37. #define ATOM_TYPE_OP_ARG_U8      1    /* uses u.op */
  38. #define ATOM_TYPE_OP_ARG_U16     2    /* uses u.op */
  39. #define ATOM_TYPE_OP_ARG_I8      3    /* uses u.op */
  40. #define ATOM_TYPE_OP_ARG_UI8     4    /* uses u.op */
  41. #define ATOM_TYPE_EXPRS        12    /* uses u.exprs */
  42. #define ATOM_TYPE_WORD_EXPRS    10    /* uses u.exprs */
  43. #define ATOM_TYPE_BYTE_EXPRS    11    /* uses u.exprs */
  44. #define ATOM_TYPE_RES        13    /* uses u.res */
  45. #define ATOM_TYPE_BUFFER    14    /* uses u.buffer */
  46.  
  47. struct op
  48. {
  49.     struct expr *arg;
  50.     u8 code;
  51. };
  52.  
  53. struct res
  54. {
  55.     struct expr *length;
  56.     struct expr *value;
  57. };
  58.  
  59. struct buffer
  60. {
  61.     const char *name;
  62.     i32 length;
  63.     i32 skip;
  64. };
  65.  
  66. struct atom
  67. {
  68.     u8 type;
  69.     union
  70.     {
  71.         struct op op;
  72.         struct vec *exprs;
  73.         struct buffer buffer;
  74.         struct res res;
  75.     } u;
  76. };
  77.  
  78. extern int push_state_skip;
  79. extern int push_state_macro;
  80. extern int push_state_init;
  81. extern int num_lines;
  82.  
  83. void parse_init();
  84. void parse_free();
  85.  
  86. struct atom *new_op(u8 op_code, u8 op_size, struct expr *arg);
  87. struct atom *new_op0(u8 op_code);
  88.  
  89. struct atom *new_exprs(struct expr *arg);
  90. struct atom *exprs_add(struct atom *atom, struct expr *arg);
  91. struct atom *exprs_to_byte_exprs(struct atom *atom);
  92. struct atom *exprs_to_word_exprs(struct atom *atom);
  93.  
  94. struct atom *new_res(struct expr *len, struct expr *value);
  95. struct atom *new_incbin(const char *name, struct expr *skip, struct expr *len);
  96.  
  97. struct expr *new_is_defined(const char *symbol);
  98. struct expr *new_expr_incword(const char *name, struct expr *skip);
  99.  
  100. void new_symbol(const char *symbol, i32 value);
  101. void new_symbol_expr(const char *symbol, struct expr *arg);
  102.  
  103. /* returns NULL if found, not otherwise, expp may be NULL. */
  104. const char *find_symref(const char *symbol, struct expr **expp);
  105.  
  106. void symbol_dump_resolved(int level, const char *symbol);
  107.  
  108. void new_label(const char *label);
  109. void set_org(struct expr *arg);
  110. void push_if_state(struct expr *arg);
  111. void push_macro_state(const char *name);
  112. void macro_append(const char *text);
  113. void asm_error(const char *msg);
  114. void asm_echo(const char *msg);
  115. void asm_include(const char *msg);
  116.  
  117. int assemble(struct membuf *source, struct membuf *dest);
  118. void output_atoms(struct membuf *out, struct vec *mem);
  119. void asm_src_buffer_push(struct membuf *buf);
  120.  
  121. #endif
  122.