a.h 3.2 KB

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