Blob
1 #define IF 12 #define ELSE 23 #define CASE 34 #define TYPE 45 #define DO 56 #define STRUCT 67 #define OTHER 79 #define ALWAYS 0110 #define NEVER 0211 #define SOMETIMES 0413 #define YES 114 #define NO 016 #define KEYWORD 117 #define DATADEF 218 #define SINIT 320 #define CLEVEL 20021 #define IFLEVEL 10022 #define DOLEVEL 10023 #define OPLENGTH 10024 #define LINE 204825 #define LINELENG 204826 #define MAXTABS 827 #define TABLENG 828 #define TEMP 2048030 #define OUT outs(clev->tabs); Bputc(output, '\n');opflag = lbegin = 1; count = 031 #define OUTK OUT; keyflag = 0;32 #define BUMP clev->tabs++; clev->pdepth++33 #define UNBUMP clev->tabs -= clev->pdepth; clev->pdepth = 034 #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, 073 };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,0116 };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);