home *** CD-ROM | disk | FTP | other *** search
/ Dream 48 / Amiga_Dream_48.iso / Atari / c / cpp.zoo / src / global.h < prev    next >
C/C++ Source or Header  |  1993-05-30  |  5KB  |  202 lines

  1. #include <string.h>
  2. #include <stdio.h>
  3.  
  4. #ifndef __MINT__
  5. # ifdef __STDC__
  6. # define __PROTO(x) x
  7. # else
  8. # define __PROTO(x) ()
  9. # endif
  10. #endif
  11.  
  12. typedef struct macro {
  13.  int nargs;
  14.  unsigned char flags;
  15. #define MAGIC    0x01        /* system special #define */
  16. #define MAGIC2    0x02        /* as above, but not always visible */
  17. #define HASARGS    0x04        /* check for arguments */
  18. #define MARKED    0x08        /* used for recursive #definitions */
  19. #define UNDEF    0x10        /* -U argument */
  20.  struct token *argnames;
  21.  struct token *m_text;
  22. } Macro;
  23.  
  24. typedef struct token {
  25.  char *txt;
  26.  char *pre_ws;
  27.  long val;
  28.  unsigned int hashval;
  29.  int type;
  30.  char subtype;
  31.  unsigned char flags;
  32. #define BLUEPAINT    0x01    /* not available for expansion */
  33. #define UNS_VAL        0x02    /* value is unsigned */
  34. #define STRINGIZE_ME    0x04    /* stringized macro arg */
  35. #define CONCAT_NEXT    0x08    /* concatenate this token with next token */
  36. #define TRAIL_SPC    0x10    /* add spc to prevent accidental token merge */
  37.  struct token *next;
  38. } Token, *TokenP;
  39.  
  40. /* token types */
  41. #define UNKNOWN        1
  42. #define DONT_CARE    2
  43. #define EOL        3
  44. #define NUMBER        4
  45. #define FP_NUM        5
  46. #define ID        6
  47. #define STR_CON        7
  48. #define CHAR_CON    8
  49. #define UNARY_OP    9
  50. #define MUL_OP        10
  51. #define ADD_OP        11
  52. #define SHIFT_OP    12
  53. #define REL_OP        13
  54. #define EQ_OP        14
  55. #define B_AND_OP    15
  56. #define B_XOR_OP    16
  57. #define B_OR_OP        17
  58. #define L_AND_OP    18
  59. #define L_OR_OP        19
  60. #define LPAREN        20
  61. #define RPAREN        21
  62. #define COMMA        22
  63. #define INC_NAM        23
  64. #define POUND        24
  65. #define TOK_CAT        25
  66. #define MACRO_ARG    26
  67. #define EOF_        27
  68. #define STOP        28
  69. #define UNMARK        29
  70.  
  71. /* tokenizer modes */
  72. #define NORMAL        0
  73. #define INCLUDE_LINE    1
  74. #define IF_EXPR        2
  75. #define SLURP        4
  76.  
  77. /* types of synchronization lines */
  78. #define SL_NONE   0
  79. #define SL_NORMAL 1
  80. #define SL_LINE   2
  81.  
  82. #if defined(__MINT__) || defined(__GNUC__)
  83. #define PATH_SEP '/'
  84. #else
  85. #define PATH_SEP '\\'
  86. #endif
  87.  
  88. #define STDIN_NAME "standard input"
  89.  
  90. #define streq(s,t) (strcmp((s),(t))==0)
  91. #define nelems(arr) (sizeof(arr)/sizeof((arr)[0]))
  92.  
  93. /* Global variables and functions from each file */
  94.  
  95. /* comment.c */
  96. char *suck_ws __PROTO((char *, char **));
  97.  
  98. /* define.c */
  99. void do_define __PROTO((void));
  100. void do_undefine __PROTO((void));
  101. int macro_eq __PROTO((Macro *, Macro *));
  102.  
  103. /* hash.c */
  104. Macro *lookup __PROTO((char *, unsigned int));
  105. unsigned int hash_id __PROTO((char *, char **));
  106. void hash_add __PROTO((char *, unsigned int, Macro *));
  107. void hash_clean_undef __PROTO((void));
  108. void hash_free __PROTO((void));
  109. void hash_remove __PROTO((char *, unsigned int));
  110. void hash_setup __PROTO((void));
  111.  
  112. /* if_expr.c */
  113. int if_expr __PROTO((void));
  114.  
  115. /* include.c */
  116. void do_include __PROTO((void));
  117. extern unsigned long include_level;
  118.  
  119. /* input.c */
  120. /* HSC #defines the following if and only if it is in a mode that gives
  121.    external identifiers more than 7 characters of significance.  If your
  122.    compiler can handle long identifiers, feel free to delete this
  123.    #defin'ition. */
  124. #ifndef __HSC_LONGNAMES__
  125. #define expand_rest_of_line    E_rol
  126. #endif
  127. TokenP tokenize_string __PROTO((char *));
  128. char *getline __PROTO((FILE *));
  129. char *rest_of_line __PROTO((void));
  130. void expand_rest_of_line __PROTO((void));
  131. void flush_line __PROTO((void));
  132. extern char *cur_file;
  133. extern unsigned long last_line, this_line, next_line;
  134.  
  135. /* macro.c */
  136. TokenP expand_tlist __PROTO((TokenP));
  137. void expand __PROTO((TokenP, Macro *));
  138. extern char *magic_words[];
  139. extern int N_MWORDS;
  140.  
  141. /* main.c */
  142. extern FILE *inf;
  143. extern FILE *outf;
  144. extern char *argv0;
  145. extern char **I_list;
  146. extern char date_string[], time_string[];
  147. extern int nerrs;
  148. extern int sl_style, keep_comments, do_trigraphs, ansi, w_bad_chars,
  149.        w_nest_cmts, f_cpp_cmts;
  150.  
  151. /* pound.c */
  152. void cond_setup __PROTO((void));
  153. void cond_shutdown __PROTO((void));
  154. void directive __PROTO((void));
  155. void endif_check __PROTO((void));
  156. extern int *if_sp;
  157. #define COND_TRUE    1
  158. #define COND_NESTED    2
  159. #define cond_true() ((if_sp[-1]&(COND_TRUE|COND_NESTED))==COND_TRUE)
  160.  
  161. /* process.c */
  162. void process_file __PROTO((char *));
  163. void sync_line __PROTO((int));
  164. void synchronize __PROTO((void));
  165.  
  166. /* token.c */
  167. char *xlate_token __PROTO((char *, TokenP));
  168. TokenP alloc_token __PROTO((void));
  169. TokenP copy_tlist __PROTO((TokenP));
  170. TokenP copy_token __PROTO((TokenP));
  171. TokenP merge_tokens __PROTO((TokenP, TokenP));
  172. TokenP mk_eol __PROTO((void));
  173. TokenP mk_stopper __PROTO((void));
  174. TokenP mk_unmarker __PROTO((TokenP));
  175. TokenP token __PROTO((void));
  176. int get_mode __PROTO((void));
  177. void change_mode __PROTO((int, int));
  178. void flush_tokenizer __PROTO((void));
  179. void free_tlist __PROTO((TokenP));
  180. void free_token __PROTO((TokenP));
  181. void print_token __PROTO((TokenP));
  182. void push_tlist __PROTO((TokenP));
  183. void set_mode __PROTO((int));
  184. void tok_shutdown __PROTO((void));
  185. TokenP exp_token __PROTO((void));
  186. TokenP _one_token __PROTO((void));
  187. void _tokenize_line __PROTO((void));
  188.  
  189. /* utils.c */
  190. char *copy_filename __PROTO((char *, int));
  191. #ifndef __GNUC__
  192. char *strdup __PROTO((char *));
  193. #endif
  194. FILE *xfopen __PROTO((char *, char *));
  195. #define NEWBUFSIZ ((size_t)4096)
  196. void *mallok __PROTO((size_t));
  197. void *reallok __PROTO((void *, size_t));
  198. char *grow __PROTO((char **, size_t *, char *, int));
  199.  
  200. /* ztype.c */
  201. void Z_type_init __PROTO((void));
  202.