This commit is contained in:
rsc 2005-08-12 20:14:32 +00:00
parent 8307dc614a
commit ad9e684811
5 changed files with 1281 additions and 0 deletions

1035
src/cmd/cb/cb.c Normal file

File diff suppressed because it is too large Load diff

172
src/cmd/cb/cb.h Normal file
View file

@ -0,0 +1,172 @@
#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);

21
src/cmd/cb/cbtype.c Normal file
View file

@ -0,0 +1,21 @@
#include "cbtype.h"
unsigned char _cbtype_[] = {
0,
_C, _C, _C, _C, _C, _C, _C, _C,
_C, _C|_S, _C|_S, _C|_S, _C|_S, _C|_S, _C, _C,
_C, _C, _C, _C, _C, _C, _C, _C,
_C, _C, _C, _C, _C, _C, _C, _C,
_S, _P|_O, _P, _P, _P, _P|_O, _P|_O, _P,
_P, _P, _P|_O, _P|_O, _P, _P|_O, _P, _P|_O,
_N, _N, _N, _N, _N, _N, _N, _N,
_N, _N, _P, _P, _P|_O, _P|_O, _P|_O, _P,
_P, _U|_X, _U|_X, _U|_X, _U|_X, _U|_X, _U|_X, _U,
_U, _U, _U, _U, _U, _U, _U, _U,
_U, _U, _U, _U, _U, _U, _U, _U,
_U, _U, _U, _P, _P, _P, _P|_O, _P|_L,
_P, _L|_X, _L|_X, _L|_X, _L|_X, _L|_X, _L|_X, _L,
_L, _L, _L, _L, _L, _L, _L, _L,
_L, _L, _L, _L, _L, _L, _L, _L,
_L, _L, _L, _P, _P|_O, _P, _P, _C
};

42
src/cmd/cb/cbtype.h Normal file
View file

@ -0,0 +1,42 @@
#define _U 01
#define _L 02
#define _N 04
#define _S 010
#define _P 020
#define _C 040
#define _X 0100
#define _O 0200
extern unsigned char _cbtype_[]; /* in /usr/src/libc/gen/ctype_.c */
#undef isop
#undef isalpha
#undef isupper
#undef islower
#undef isdigit
#undef isxdigit
#undef isspace
#undef ispunct
#undef isalnum
#undef isprint
#undef iscntrl
#undef isascii
#undef toupper
#undef tolower
#undef toascii
#define isop(c) ((_cbtype_+1)[(uchar)(c)]&_O)
#define isalpha(c) ((_cbtype_+1)[(uchar)(c)]&(_U|_L))
#define isupper(c) ((_cbtype_+1)[(uchar)(c)]&_U)
#define islower(c) ((_cbtype_+1)[(uchar)(c)]&_L)
#define isdigit(c) ((_cbtype_+1)[(uchar)(c)]&_N)
#define isxdigit(c) ((_cbtype_+1)[(uchar)(c)]&(_N|_X))
#define isspace(c) ((_cbtype_+1)[(uchar)(c)]&_S)
#define ispunct(c) ((_cbtype_+1)[(uchar)(c)]&_P)
#define isalnum(c) ((_cbtype_+1)[(uchar)(c)]&(_U|_L|_N))
#define isprint(c) ((_cbtype_+1)[(uchar)(c)]&(_P|_U|_L|_N))
#define iscntrl(c) ((_cbtype_+1)[(uchar)(c)]&_C)
#define isascii(c) ((unsigned)(c)<=0177)
#define toupper(c) ((c)-'a'+'A')
#define tolower(c) ((c)-'A'+'a')
#define toascii(c) ((c)&0177)

11
src/cmd/cb/mkfile Normal file
View file

@ -0,0 +1,11 @@
<$PLAN9/src/mkhdr
TARG=cb
OFILES=\
cb.$O\
cbtype.$O\
HFILES=cb.h\
cbtype.h\
<$PLAN9/src/mkone