a.h 2.8 KB

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