a.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. #include <u.h>
  2. #include <libc.h>
  3. #include <bio.h>
  4. #include "../2c/2.out.h"
  5. #ifndef EXTERN
  6. #define EXTERN extern
  7. #endif
  8. typedef struct Sym Sym;
  9. typedef struct Ref Ref;
  10. typedef struct Gen Gen;
  11. typedef struct Io Io;
  12. typedef struct Hist Hist;
  13. typedef struct Addr Addr;
  14. typedef struct Gen2 Gen2;
  15. #define MAXALIGN 7
  16. #define FPCHIP 1
  17. #define NSYMB 500
  18. #define BUFSIZ 8192
  19. #define HISTSZ 20
  20. #define NINCLUDE 10
  21. #define NHUNK 10000
  22. #define EOF (-1)
  23. #define IGN (-2)
  24. #define GETC() ((--fi.c < 0)? filbuf(): *fi.p++ & 0xff)
  25. #define NHASH 503
  26. #define STRINGSZ 200
  27. #define NMACRO 10
  28. struct Sym
  29. {
  30. Sym* link;
  31. Ref* ref;
  32. char* macro;
  33. long value;
  34. ushort type;
  35. char *name;
  36. char sym;
  37. };
  38. #define S ((Sym*)0)
  39. struct Ref
  40. {
  41. int class;
  42. };
  43. EXTERN struct
  44. {
  45. char* p;
  46. int c;
  47. } fi;
  48. struct Io
  49. {
  50. Io* link;
  51. char b[BUFSIZ];
  52. char* p;
  53. short c;
  54. short f;
  55. };
  56. #define I ((Io*)0)
  57. EXTERN struct
  58. {
  59. Sym* sym;
  60. short type;
  61. } h[NSYM];
  62. struct Addr
  63. {
  64. Sym* sym;
  65. long offset;
  66. short type;
  67. };
  68. struct Gen
  69. {
  70. Addr;
  71. double dval;
  72. char sval[8];
  73. long displace;
  74. short type;
  75. short index;
  76. short scale;
  77. short field;
  78. };
  79. struct Gen2
  80. {
  81. Gen from;
  82. Gen to;
  83. };
  84. struct Hist
  85. {
  86. Hist* link;
  87. char* name;
  88. long line;
  89. long offset;
  90. };
  91. #define H ((Hist*)0)
  92. enum
  93. {
  94. CLAST,
  95. CMACARG,
  96. CMACRO,
  97. CPREPROC,
  98. };
  99. EXTERN char debug[256];
  100. EXTERN Sym* hash[NHASH];
  101. EXTERN char* Dlist[30];
  102. EXTERN int nDlist;
  103. EXTERN Hist* ehist;
  104. EXTERN int newflag;
  105. EXTERN Hist* hist;
  106. EXTERN char* hunk;
  107. EXTERN char* include[NINCLUDE];
  108. EXTERN Io* iofree;
  109. EXTERN Io* ionext;
  110. EXTERN Io* iostack;
  111. EXTERN long lineno;
  112. EXTERN int nerrors;
  113. EXTERN long nhunk;
  114. EXTERN int ninclude;
  115. EXTERN Gen nullgen;
  116. EXTERN char* outfile;
  117. EXTERN int pass;
  118. EXTERN char* pathname;
  119. EXTERN long pc;
  120. EXTERN int peekc;
  121. EXTERN int sym;
  122. EXTERN char symb[NSYMB];
  123. EXTERN int thechar;
  124. EXTERN char* thestring;
  125. EXTERN long thunk;
  126. EXTERN Biobuf obuf;
  127. void* allocn(void*, long, long);
  128. void errorexit(void);
  129. void pushio(void);
  130. void newio(void);
  131. void newfile(char*, int);
  132. Sym* slookup(char*);
  133. Sym* lookup(void);
  134. void syminit(Sym*);
  135. long yylex(void);
  136. int getc(void);
  137. int getnsc(void);
  138. void unget(int);
  139. int escchar(int);
  140. void cinit(void);
  141. void pinit(char*);
  142. void cclean(void);
  143. int isreg(Gen*);
  144. void outcode(int, Gen2*);
  145. void outhist(void);
  146. void zaddr(Gen*, int);
  147. void zname(char*, int, int);
  148. void ieeedtod(Ieee*, double);
  149. int filbuf(void);
  150. Sym* getsym(void);
  151. void domacro(void);
  152. void macund(void);
  153. void macdef(void);
  154. void macexpand(Sym*, char*);
  155. void macinc(void);
  156. void macprag(void);
  157. void maclin(void);
  158. void macif(int);
  159. void macend(void);
  160. void dodefine(char*);
  161. void prfile(long);
  162. void linehist(char*, int);
  163. void gethunk(void);
  164. void yyerror(char*, ...);
  165. int yyparse(void);
  166. void setinclude(char*);
  167. int assemble(char*);
  168. enum /* keep in synch with ../cc/cc.h */
  169. {
  170. Plan9 = 1<<0,
  171. Unix = 1<<1,
  172. Windows = 1<<2,
  173. };
  174. /*
  175. * system-dependent stuff from ../cc/compat.c
  176. */
  177. int mywait(int*);
  178. int mycreat(char*, int);
  179. int systemtype(int);
  180. int pathchar(void);
  181. char* mygetwd(char*, int);
  182. int myexec(char*, char*[]);
  183. int mydup(int, int);
  184. int myfork(void);
  185. int mypipe(int*);
  186. void* mysbrk(ulong);