Add.
This commit is contained in:
parent
8307dc614a
commit
ad9e684811
5 changed files with 1281 additions and 0 deletions
1035
src/cmd/cb/cb.c
Normal file
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
172
src/cmd/cb/cb.h
Normal 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
21
src/cmd/cb/cbtype.c
Normal 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
42
src/cmd/cb/cbtype.h
Normal 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
11
src/cmd/cb/mkfile
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
<$PLAN9/src/mkhdr
|
||||||
|
|
||||||
|
TARG=cb
|
||||||
|
OFILES=\
|
||||||
|
cb.$O\
|
||||||
|
cbtype.$O\
|
||||||
|
|
||||||
|
HFILES=cb.h\
|
||||||
|
cbtype.h\
|
||||||
|
|
||||||
|
<$PLAN9/src/mkone
|
||||||
Loading…
Add table
Add a link
Reference in a new issue