cb.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. #define IF 1
  2. #define ELSE 2
  3. #define CASE 3
  4. #define TYPE 4
  5. #define DO 5
  6. #define STRUCT 6
  7. #define OTHER 7
  8. #define ALWAYS 01
  9. #define NEVER 02
  10. #define SOMETIMES 04
  11. #define YES 1
  12. #define NO 0
  13. #define KEYWORD 1
  14. #define DATADEF 2
  15. #define SINIT 3
  16. #define CLEVEL 200
  17. #define IFLEVEL 100
  18. #define DOLEVEL 100
  19. #define OPLENGTH 100
  20. #define LINE 2048
  21. #define LINELENG 2048
  22. #define MAXTABS 8
  23. #define TABLENG 8
  24. #define TEMP 20480
  25. #define OUT outs(clev->tabs); Bputc(output, '\n');opflag = lbegin = 1; count = 0
  26. #define OUTK OUT; keyflag = 0;
  27. #define BUMP clev->tabs++; clev->pdepth++
  28. #define UNBUMP clev->tabs -= clev->pdepth; clev->pdepth = 0
  29. #define eatspace() while((cc=getch()) == ' ' || cc == '\t'); unget(cc)
  30. #define eatallsp() while((cc=getch()) == ' ' || cc == '\t' || cc == '\n'); unget(cc)
  31. struct indent { /* one for each level of { } */
  32. int tabs;
  33. int pdepth;
  34. int iflev;
  35. int ifc[IFLEVEL];
  36. int spdepth[IFLEVEL];
  37. } ind[CLEVEL];
  38. struct indent *clev = ind;
  39. struct keyw {
  40. char *name;
  41. char punc;
  42. char type;
  43. } key[] = {
  44. "switch", ' ', OTHER,
  45. "do", ' ', DO,
  46. "while", ' ', OTHER,
  47. "if", ' ', IF,
  48. "for", ' ', OTHER,
  49. "else", ' ', ELSE,
  50. "case", ' ', CASE,
  51. "default", ' ', CASE,
  52. "char", '\t', TYPE,
  53. "int", '\t', TYPE,
  54. "short", '\t', TYPE,
  55. "long", '\t', TYPE,
  56. "unsigned", '\t', TYPE,
  57. "float", '\t', TYPE,
  58. "double", '\t', TYPE,
  59. "struct", ' ', STRUCT,
  60. "union", ' ', STRUCT,
  61. "enum", ' ', STRUCT,
  62. "extern", ' ', TYPE,
  63. "register", ' ', TYPE,
  64. "static", ' ', TYPE,
  65. "typedef", ' ', TYPE,
  66. 0, 0, 0
  67. };
  68. struct op {
  69. char *name;
  70. char blanks;
  71. char setop;
  72. } op[] = {
  73. "+=", ALWAYS, YES,
  74. "-=", ALWAYS, YES,
  75. "*=", ALWAYS, YES,
  76. "/=", ALWAYS, YES,
  77. "%=", ALWAYS, YES,
  78. ">>=", ALWAYS, YES,
  79. "<<=", ALWAYS, YES,
  80. "&=", ALWAYS, YES,
  81. "^=", ALWAYS, YES,
  82. "|=", ALWAYS, YES,
  83. ">>", ALWAYS, YES,
  84. "<<", ALWAYS, YES,
  85. "<=", ALWAYS, YES,
  86. ">=", ALWAYS, YES,
  87. "==", ALWAYS, YES,
  88. "!=", ALWAYS, YES,
  89. "=", ALWAYS, YES,
  90. "&&", ALWAYS, YES,
  91. "||", ALWAYS, YES,
  92. "++", NEVER, NO,
  93. "--", NEVER, NO,
  94. "->", NEVER, NO,
  95. "<", ALWAYS, YES,
  96. ">", ALWAYS, YES,
  97. "+", ALWAYS, YES,
  98. "/", ALWAYS, YES,
  99. "%", ALWAYS, YES,
  100. "^", ALWAYS, YES,
  101. "|", ALWAYS, YES,
  102. "!", NEVER, YES,
  103. "~", NEVER, YES,
  104. "*", SOMETIMES, YES,
  105. "&", SOMETIMES, YES,
  106. "-", SOMETIMES, YES,
  107. "?", ALWAYS,YES,
  108. ":", ALWAYS,YES,
  109. 0, 0,0
  110. };
  111. Biobuf *input;
  112. Biobuf *output;
  113. int strict = 0;
  114. int join = 0;
  115. int opflag = 1;
  116. int keyflag = 0;
  117. int paren = 0;
  118. int split = 0;
  119. int folded = 0;
  120. int dolevel =0;
  121. int dotabs[DOLEVEL];
  122. int docurly[DOLEVEL];
  123. int dopdepth[DOLEVEL];
  124. int structlev = 0;
  125. int question = 0;
  126. char string[LINE];
  127. char *lastlook;
  128. char *p = string;
  129. char temp[TEMP];
  130. char *tp;
  131. int err = 0;
  132. char *lastplace = temp;
  133. char *tptr = temp;
  134. int maxleng = LINELENG;
  135. int maxtabs = MAXTABS;
  136. int count = 0;
  137. char next = '\0';
  138. int inswitch =0;
  139. int lbegin = 1;
  140. int lineno = 0;
  141. void work(void);
  142. void gotif(void);
  143. void gotelse(void);
  144. int checkif(char *);
  145. void gotdo(void);
  146. void resetdo(void);
  147. void gottype(struct keyw *lptr);
  148. void gotstruct(void);
  149. void gotop(int);
  150. void keep(struct op *);
  151. int getnl(void);
  152. void ptabs(int);
  153. void outs(int);
  154. void putch(char, int);
  155. struct keyw *lookup(char *, char *);
  156. int comment(int);
  157. void putspace(char, int);
  158. int getch(void);
  159. void unget(char);
  160. char *getnext(int);
  161. void copy(char *);
  162. void clearif(struct indent *);
  163. char puttmp(char, int);
  164. void error(char *);
  165. int cpp_comment(int);