Blob


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