| #define IF 1 |
| #define ELSE 2 |
| #define CASE 3 |
| #define TYPE 4 |
| #define DO 5 |
| #define STRUCT 6 |
| #define OTHER 7 |
| |
| #define ALWAYS 01 |
| #define NEVER 02 |
| #define SOMETIMES 04 |
| |
| #define YES 1 |
| #define NO 0 |
| |
| #define KEYWORD 1 |
| #define DATADEF 2 |
| #define SINIT 3 |
| |
| #define CLEVEL 200 |
| #define IFLEVEL 100 |
| #define DOLEVEL 100 |
| #define OPLENGTH 100 |
| #define LINE 2048 |
| #define LINELENG 2048 |
| #define MAXTABS 8 |
| #define TABLENG 8 |
| #define TEMP 20480 |
| |
| #define OUT outs(clev->tabs); Bputc(output, '\n');opflag = lbegin = 1; count = 0 |
| #define OUTK OUT; keyflag = 0; |
| #define BUMP clev->tabs++; clev->pdepth++ |
| #define UNBUMP clev->tabs -= clev->pdepth; clev->pdepth = 0 |
| #define eatspace() while((cc=getch()) == ' ' || cc == '\t'); unget(cc) |
| #define eatallsp() while((cc=getch()) == ' ' || cc == '\t' || cc == '\n'); unget(cc) |
| |
| struct indent { /* one for each level of { } */ |
| int tabs; |
| int pdepth; |
| int iflev; |
| int ifc[IFLEVEL]; |
| int spdepth[IFLEVEL]; |
| } ind[CLEVEL]; |
| struct indent *clev = ind; |
| struct keyw { |
| char *name; |
| char punc; |
| char type; |
| } key[] = { |
| "switch", ' ', OTHER, |
| "do", ' ', DO, |
| "while", ' ', OTHER, |
| "if", ' ', IF, |
| "for", ' ', OTHER, |
| "else", ' ', ELSE, |
| "case", ' ', CASE, |
| "default", ' ', CASE, |
| "char", '\t', TYPE, |
| "int", '\t', TYPE, |
| "short", '\t', TYPE, |
| "long", '\t', TYPE, |
| "unsigned", '\t', TYPE, |
| "float", '\t', TYPE, |
| "double", '\t', TYPE, |
| "struct", ' ', STRUCT, |
| "union", ' ', STRUCT, |
| "enum", ' ', STRUCT, |
| "extern", ' ', TYPE, |
| "register", ' ', TYPE, |
| "static", ' ', TYPE, |
| "typedef", ' ', TYPE, |
| 0, 0, 0 |
| }; |
| struct op { |
| char *name; |
| char blanks; |
| char setop; |
| } op[] = { |
| "+=", ALWAYS, YES, |
| "-=", ALWAYS, YES, |
| "*=", ALWAYS, YES, |
| "/=", ALWAYS, YES, |
| "%=", ALWAYS, YES, |
| ">>=", ALWAYS, YES, |
| "<<=", ALWAYS, YES, |
| "&=", ALWAYS, YES, |
| "^=", ALWAYS, YES, |
| "|=", ALWAYS, YES, |
| ">>", ALWAYS, YES, |
| "<<", ALWAYS, YES, |
| "<=", ALWAYS, YES, |
| ">=", ALWAYS, YES, |
| "==", ALWAYS, YES, |
| "!=", ALWAYS, YES, |
| "=", ALWAYS, YES, |
| "&&", ALWAYS, YES, |
| "||", ALWAYS, YES, |
| "++", NEVER, NO, |
| "--", NEVER, NO, |
| "->", NEVER, NO, |
| "<", ALWAYS, YES, |
| ">", ALWAYS, YES, |
| "+", ALWAYS, YES, |
| "/", ALWAYS, YES, |
| "%", ALWAYS, YES, |
| "^", ALWAYS, YES, |
| "|", ALWAYS, YES, |
| "!", NEVER, YES, |
| "~", NEVER, YES, |
| "*", SOMETIMES, YES, |
| "&", SOMETIMES, YES, |
| "-", SOMETIMES, YES, |
| "?", ALWAYS,YES, |
| ":", ALWAYS,YES, |
| 0, 0,0 |
| }; |
| Biobuf *input; |
| Biobuf *output; |
| int strict = 0; |
| int join = 0; |
| int opflag = 1; |
| int keyflag = 0; |
| int paren = 0; |
| int split = 0; |
| int folded = 0; |
| int dolevel =0; |
| int dotabs[DOLEVEL]; |
| int docurly[DOLEVEL]; |
| int dopdepth[DOLEVEL]; |
| int structlev = 0; |
| int question = 0; |
| char string[LINE]; |
| char *lastlook; |
| char *p = string; |
| char temp[TEMP]; |
| char *tp; |
| int err = 0; |
| char *lastplace = temp; |
| char *tptr = temp; |
| int maxleng = LINELENG; |
| int maxtabs = MAXTABS; |
| int count = 0; |
| char next = '\0'; |
| int inswitch =0; |
| int lbegin = 1; |
| int lineno = 0; |
| |
| void work(void); |
| void gotif(void); |
| void gotelse(void); |
| int checkif(char *); |
| void gotdo(void); |
| void resetdo(void); |
| void gottype(struct keyw *lptr); |
| void gotstruct(void); |
| void gotop(int); |
| void keep(struct op *); |
| int getnl(void); |
| void ptabs(int); |
| void outs(int); |
| void putch(char, int); |
| struct keyw *lookup(char *, char *); |
| int comment(int); |
| void putspace(char, int); |
| int getch(void); |
| void unget(char); |
| char *getnext(int); |
| void copy(char *); |
| void clearif(struct indent *); |
| char puttmp(char, int); |
| void error(char *); |
| int cpp_comment(int); |