xref: /plan9/sys/src/cmd/cb/cb.h (revision aade22e6d8082d74d0ce0bf373226f8af58fcd69)
12da9d879SDavid du Colombier #define	IF	1
22da9d879SDavid du Colombier #define	ELSE	2
32da9d879SDavid du Colombier #define	CASE	3
42da9d879SDavid du Colombier #define TYPE	4
52da9d879SDavid du Colombier #define DO	5
62da9d879SDavid du Colombier #define STRUCT	6
72da9d879SDavid du Colombier #define OTHER	7
82da9d879SDavid du Colombier 
92da9d879SDavid du Colombier #define ALWAYS	01
102da9d879SDavid du Colombier #define	NEVER	02
112da9d879SDavid du Colombier #define	SOMETIMES	04
122da9d879SDavid du Colombier 
132da9d879SDavid du Colombier #define YES	1
142da9d879SDavid du Colombier #define NO	0
152da9d879SDavid du Colombier 
162da9d879SDavid du Colombier #define	KEYWORD	1
172da9d879SDavid du Colombier #define	DATADEF	2
182da9d879SDavid du Colombier #define	SINIT	3
192da9d879SDavid du Colombier 
202da9d879SDavid du Colombier #define CLEVEL	200
212da9d879SDavid du Colombier #define IFLEVEL	100
222da9d879SDavid du Colombier #define DOLEVEL	100
232da9d879SDavid du Colombier #define OPLENGTH	100
242da9d879SDavid du Colombier #define LINE	2048
252da9d879SDavid du Colombier #define LINELENG	2048
262da9d879SDavid du Colombier #define MAXTABS	8
272da9d879SDavid du Colombier #define TABLENG	8
282da9d879SDavid du Colombier #define TEMP	20480
292da9d879SDavid du Colombier 
302da9d879SDavid du Colombier #define OUT	outs(clev->tabs); Bputc(output, '\n');opflag = lbegin = 1; count = 0
312da9d879SDavid du Colombier #define OUTK	OUT; keyflag = 0;
322da9d879SDavid du Colombier #define BUMP	clev->tabs++; clev->pdepth++
332da9d879SDavid du Colombier #define UNBUMP	clev->tabs -= clev->pdepth; clev->pdepth = 0
342da9d879SDavid du Colombier #define eatspace()	while((cc=getch()) == ' ' || cc == '\t'); unget(cc)
352da9d879SDavid du Colombier #define eatallsp()	while((cc=getch()) == ' ' || cc == '\t' || cc == '\n'); unget(cc)
362da9d879SDavid du Colombier 
372da9d879SDavid du Colombier struct indent {		/* one for each level of { } */
382da9d879SDavid du Colombier 	int tabs;
392da9d879SDavid du Colombier 	int pdepth;
402da9d879SDavid du Colombier 	int iflev;
412da9d879SDavid du Colombier 	int ifc[IFLEVEL];
422da9d879SDavid du Colombier 	int spdepth[IFLEVEL];
432da9d879SDavid du Colombier } ind[CLEVEL];
442da9d879SDavid du Colombier struct indent *clev = ind;
452da9d879SDavid du Colombier struct keyw {
462da9d879SDavid du Colombier 	char	*name;
472da9d879SDavid du Colombier 	char	punc;
482da9d879SDavid du Colombier 	char	type;
492da9d879SDavid du Colombier } key[] = {
502da9d879SDavid du Colombier 	"switch", ' ', OTHER,
512da9d879SDavid du Colombier 	"do", ' ', DO,
522da9d879SDavid du Colombier 	"while", ' ', OTHER,
532da9d879SDavid du Colombier 	"if", ' ', IF,
542da9d879SDavid du Colombier 	"for", ' ', OTHER,
552da9d879SDavid du Colombier 	"else", ' ', ELSE,
562da9d879SDavid du Colombier 	"case", ' ', CASE,
572da9d879SDavid du Colombier 	"default", ' ', CASE,
582da9d879SDavid du Colombier 	"char", '\t', TYPE,
592da9d879SDavid du Colombier 	"int", '\t', TYPE,
602da9d879SDavid du Colombier 	"short", '\t', TYPE,
612da9d879SDavid du Colombier 	"long", '\t', TYPE,
622da9d879SDavid du Colombier 	"unsigned", '\t', TYPE,
632da9d879SDavid du Colombier 	"float", '\t', TYPE,
642da9d879SDavid du Colombier 	"double", '\t', TYPE,
652da9d879SDavid du Colombier 	"struct", ' ', STRUCT,
662da9d879SDavid du Colombier 	"union", ' ', STRUCT,
672da9d879SDavid du Colombier 	"enum", ' ', STRUCT,
682da9d879SDavid du Colombier 	"extern", ' ', TYPE,
692da9d879SDavid du Colombier 	"register", ' ', TYPE,
702da9d879SDavid du Colombier 	"static", ' ', TYPE,
712da9d879SDavid du Colombier 	"typedef", ' ', TYPE,
722da9d879SDavid du Colombier 	0, 0, 0
732da9d879SDavid du Colombier };
742da9d879SDavid du Colombier struct op {
752da9d879SDavid du Colombier 	char	*name;
762da9d879SDavid du Colombier 	char	blanks;
772da9d879SDavid du Colombier 	char	setop;
782da9d879SDavid du Colombier } op[] = {
792da9d879SDavid du Colombier 	"+=", 	ALWAYS,  YES,
802da9d879SDavid du Colombier 	"-=", 	ALWAYS,  YES,
812da9d879SDavid du Colombier 	"*=", 	ALWAYS,  YES,
822da9d879SDavid du Colombier 	"/=", 	ALWAYS,  YES,
832da9d879SDavid du Colombier 	"%=", 	ALWAYS,  YES,
842da9d879SDavid du Colombier 	">>=", 	ALWAYS,  YES,
852da9d879SDavid du Colombier 	"<<=", 	ALWAYS,  YES,
862da9d879SDavid du Colombier 	"&=", 	ALWAYS,  YES,
872da9d879SDavid du Colombier 	"^=", 	ALWAYS,  YES,
882da9d879SDavid du Colombier 	"|=", 	ALWAYS,  YES,
892da9d879SDavid du Colombier 	">>", 	ALWAYS,  YES,
902da9d879SDavid du Colombier 	"<<", 	ALWAYS,  YES,
912da9d879SDavid du Colombier 	"<=", 	ALWAYS,  YES,
922da9d879SDavid du Colombier 	">=", 	ALWAYS,  YES,
932da9d879SDavid du Colombier 	"==", 	ALWAYS,  YES,
942da9d879SDavid du Colombier 	"!=", 	ALWAYS,  YES,
952da9d879SDavid du Colombier 	"=", 	ALWAYS,  YES,
962da9d879SDavid du Colombier 	"&&", 	ALWAYS, YES,
972da9d879SDavid du Colombier 	"||", 	ALWAYS, YES,
982da9d879SDavid du Colombier 	"++", 	NEVER, NO,
992da9d879SDavid du Colombier 	"--", 	NEVER, NO,
1002da9d879SDavid du Colombier 	"->", 	NEVER, NO,
1012da9d879SDavid du Colombier 	"<", 	ALWAYS, YES,
1022da9d879SDavid du Colombier 	">", 	ALWAYS, YES,
1032da9d879SDavid du Colombier 	"+", 	ALWAYS, YES,
1042da9d879SDavid du Colombier 	"/", 	ALWAYS, YES,
1052da9d879SDavid du Colombier 	"%", 	ALWAYS, YES,
1062da9d879SDavid du Colombier 	"^", 	ALWAYS, YES,
1072da9d879SDavid du Colombier 	"|", 	ALWAYS, YES,
1082da9d879SDavid du Colombier 	"!", 	NEVER, YES,
1092da9d879SDavid du Colombier 	"~", 	NEVER, YES,
1102da9d879SDavid du Colombier 	"*", 	SOMETIMES, YES,
1112da9d879SDavid du Colombier 	"&", 	SOMETIMES, YES,
1122da9d879SDavid du Colombier 	"-", 	SOMETIMES, YES,
1132da9d879SDavid du Colombier 	"?",	ALWAYS,YES,
1142da9d879SDavid du Colombier 	":",	ALWAYS,YES,
1152da9d879SDavid du Colombier 	0, 	0,0
1162da9d879SDavid du Colombier };
1172da9d879SDavid du Colombier Biobuf *input;
1182da9d879SDavid du Colombier Biobuf *output;
1192da9d879SDavid du Colombier int	strict = 0;
1202da9d879SDavid du Colombier int	join	= 0;
1212da9d879SDavid du Colombier int	opflag = 1;
1222da9d879SDavid du Colombier int	keyflag = 0;
1232da9d879SDavid du Colombier int	paren	 = 0;
1242da9d879SDavid du Colombier int	split	 = 0;
1252da9d879SDavid du Colombier int	folded	= 0;
1262da9d879SDavid du Colombier int	dolevel	=0;
1272da9d879SDavid du Colombier int	dotabs[DOLEVEL];
1282da9d879SDavid du Colombier int	docurly[DOLEVEL];
1292da9d879SDavid du Colombier int	dopdepth[DOLEVEL];
1302da9d879SDavid du Colombier int	structlev = 0;
1312da9d879SDavid du Colombier int	question	 = 0;
1322da9d879SDavid du Colombier char	string[LINE];
1332da9d879SDavid du Colombier char	*lastlook;
1342da9d879SDavid du Colombier char	*p = string;
1352da9d879SDavid du Colombier char temp[TEMP];
1362da9d879SDavid du Colombier char *tp;
1372da9d879SDavid du Colombier int err = 0;
1382da9d879SDavid du Colombier char *lastplace = temp;
1392da9d879SDavid du Colombier char *tptr = temp;
1402da9d879SDavid du Colombier int maxleng	= LINELENG;
1412da9d879SDavid du Colombier int maxtabs	= MAXTABS;
1422da9d879SDavid du Colombier int count	= 0;
1432da9d879SDavid du Colombier char next = '\0';
1442da9d879SDavid du Colombier int	inswitch	=0;
1452da9d879SDavid du Colombier int	lbegin	 = 1;
1462da9d879SDavid du Colombier int lineno	= 0;
1472da9d879SDavid du Colombier 
1482da9d879SDavid du Colombier void work(void);
1492da9d879SDavid du Colombier void gotif(void);
1502da9d879SDavid du Colombier void gotelse(void);
1512da9d879SDavid du Colombier int checkif(char *);
1522da9d879SDavid du Colombier void gotdo(void);
1532da9d879SDavid du Colombier void resetdo(void);
1542da9d879SDavid du Colombier void gottype(struct keyw *lptr);
1552da9d879SDavid du Colombier void gotstruct(void);
1562da9d879SDavid du Colombier void gotop(int);
1572da9d879SDavid du Colombier void keep(struct op *);
1582da9d879SDavid du Colombier int getnl(void);
1592da9d879SDavid du Colombier void ptabs(int);
1602da9d879SDavid du Colombier void outs(int);
1612da9d879SDavid du Colombier void putch(char, int);
1622da9d879SDavid du Colombier struct keyw *lookup(char *, char *);
1632da9d879SDavid du Colombier int comment(int);
1642da9d879SDavid du Colombier void putspace(char, int);
1652da9d879SDavid du Colombier int getch(void);
1662da9d879SDavid du Colombier void unget(char);
1672da9d879SDavid du Colombier char *getnext(int);
1682da9d879SDavid du Colombier void copy(char *);
1692da9d879SDavid du Colombier void clearif(struct indent *);
1702da9d879SDavid du Colombier char puttmp(char, int);
1712da9d879SDavid du Colombier void error(char *);
172*aade22e6SDavid du Colombier int cpp_comment(int);
173