mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-15 11:20:03 +00:00
173 lines
3.3 KiB
C
173 lines
3.3 KiB
C
|
#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);
|