a.h 2.9 KB

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