⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cb.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
#include <stdio.h>int	slevel[10];int	clevel	= 0;int	spflg[20][10];int	sind[20][10];int	siflev[10];int	sifflg[10];int	iflev	= 0;int	ifflg	= -1;int	level	= 0;int	ind[10]	= {	0,0,0,0,0,0,0,0,0,0 };int	eflg	= 0;int	paren	= 0;int	pflg[10] = {	0,0,0,0,0,0,0,0,0,0 };char	lchar;char	pchar;int	aflg	= 0;int	ct;int	stabs[20][10];int	qflg	= 0;char	*wif[] = {	"if",0};char	*welse[] = {	"else",0};char	*wfor[] = {	"for",0};char	*wds[] = {	"case","default",0};int	j	= 0;char	string[200];char	cc;int	sflg	= 1;int	peek	= -1;int	tabs	= 0;int	lastchar;int	c;main(argc,argv) int argc;char argv[];{	while((c = getch()) != EOF){		switch(c){		case ' ':		case '\t':			if(lookup(welse) == 1){				gotelse();				if(sflg == 0 || j > 0)string[j++] = c;				puts();				sflg = 0;				if(getnl() == 1){					puts();					printf("\n");					sflg = 1;					pflg[level]++;					tabs++;				}				continue;			}			if(sflg == 0 || j > 0)string[j++] = c;			continue;		case '\n':			if((eflg = lookup(welse)) == 1)gotelse();			puts();			printf("\n");			sflg = 1;			if(eflg == 1){				pflg[level]++;				tabs++;			}			else				if(pchar == lchar)					aflg = 1;			continue;		case '{':			if(lookup(welse) == 1)gotelse();			siflev[clevel] = iflev;			sifflg[clevel] = ifflg;			iflev = ifflg = 0;			clevel++;			if(sflg == 1 && pflg[level] != 0){				pflg[level]--;				tabs--;			}			string[j++] = c;			puts();			getnl();			puts();			printf("\n");			tabs++;			sflg = 1;			if(pflg[level] > 0){				ind[level] = 1;				level++;				slevel[level] = clevel;			}			continue;		case '}':			clevel--;			if((iflev = siflev[clevel]-1) < 0)iflev = 0;			ifflg = sifflg[clevel];			if(pflg[level] >0 && ind[level] == 0){				tabs -= pflg[level];				pflg[level] = 0;			}			puts();			tabs--;			ptabs();			if((peek = getch()) == ';'){				printf("%c;",c);				peek = -1;			}			else printf("%c",c);			getnl();			puts();			printf("\n");			sflg = 1;			if(clevel < slevel[level])if(level > 0)level--;			if(ind[level] != 0){				tabs -= pflg[level];				pflg[level] = 0;				ind[level] = 0;			}			continue;		case '"':		case '\'':			string[j++] = c;			while((cc = getch()) != c){				string[j++] = cc;				if(cc == '\\'){					string[j++] = getch();				}				if(cc == '\n'){					puts();					sflg = 1;				}			}			string[j++] = cc;			if(getnl() == 1){				lchar = cc;				peek = '\n';			}			continue;		case ';':			string[j++] = c;			puts();			if(pflg[level] > 0 && ind[level] == 0){				tabs -= pflg[level];				pflg[level] = 0;			}			getnl();			puts();			printf("\n");			sflg = 1;			if(iflev > 0)				if(ifflg == 1){iflev--;					ifflg = 0;				}				else iflev = 0;			continue;		case '\\':			string[j++] = c;			string[j++] = getch();			continue;		case '?':			qflg = 1;			string[j++] = c;			continue;		case ':':			string[j++] = c;			if(qflg == 1){				qflg = 0;				continue;			}			if(lookup(wds) == 0){				sflg = 0;				puts();			}			else{				tabs--;				puts();				tabs++;			}			if((peek = getch()) == ';'){				printf(";");				peek = -1;			}			getnl();			puts();			printf("\n");			sflg = 1;			continue;		case '/':			string[j++] = c;			if((peek = getch()) != '*')continue;			string[j++] = peek;			peek = -1;			comment();			continue;		case ')':			paren--;			string[j++] = c;			puts();			if(getnl() == 1){				peek = '\n';				if(paren != 0)aflg = 1;				else if(tabs > 0){					pflg[level]++;					tabs++;					ind[level] = 0;				}			}			continue;		case '#':			string[j++] = c;			while((cc = getch()) != '\n')string[j++] = cc;			string[j++] = cc;			sflg = 0;			puts();			sflg = 1;			continue;		case '(':			string[j++] = c;			paren++;			if(lookup(wfor) == 1){				while((c = gets()) != ';');				ct=0;cont:				while((c = gets()) != ')'){					if(c == '(') ct++;				}				if(ct != 0){					ct--;					goto cont;				}				paren--;				puts();				if(getnl() == 1){					peek = '\n';					pflg[level]++;					tabs++;					ind[level] = 0;				}				continue;			}			if(lookup(wif) == 1){				puts();				stabs[clevel][iflev] = tabs;				spflg[clevel][iflev] = pflg[level];				sind[clevel][iflev] = ind[level];				iflev++;				ifflg = 1;			}			continue;		default:			string[j++] = c;			if(c != ',')lchar = c;		}	}}ptabs(){	int i;	for(i=0; i < tabs; i++)printf("\t");}getch(){	if(peek < 0 && lastchar != ' ' && lastchar != '\t')pchar = lastchar;	lastchar = (peek<0) ? getc(stdin):peek;	peek = -1;	return(lastchar);}puts(){	if(j > 0){		if(sflg != 0){			ptabs();			sflg = 0;			if(aflg == 1){				aflg = 0;				if(tabs > 0)printf("    ");			}		}		string[j] = '\0';		printf("%s",string);		j = 0;	}	else{		if(sflg != 0){			sflg = 0;			aflg = 0;		}	}}lookup(tab)char *tab[];{	char r;	int l,kk,k,i;	if(j < 1)return(0);	kk=0;	while(string[kk] == ' ')kk++;	for(i=0; tab[i] != 0; i++){		l=0;		for(k=kk;(r = tab[i][l++]) == string[k] && r != '\0';k++);		if(r == '\0' && (string[k] < 'a' || string[k] > 'z' || k >= j))return(1);	}	return(0);}gets(){	char ch;beg:	if((ch = string[j++] = getch()) == '\\'){		string[j++] = getch();		goto beg;	}	if(ch == '\'' || ch == '"'){		while((cc = string[j++] = getch()) != ch)if(cc == '\\')string[j++] = getch();		goto beg;	}	if(ch == '\n'){		puts();		aflg = 1;		goto beg;	}	else return(ch);}gotelse(){	tabs = stabs[clevel][iflev];	pflg[level] = spflg[clevel][iflev];	ind[level] = sind[clevel][iflev];	ifflg = 1;}getnl(){	while((peek = getch()) == '\t' || peek == ' '){		string[j++] = peek;		peek = -1;	}	if((peek = getch()) == '/'){		peek = -1;		if((peek = getch()) == '*'){			string[j++] = '/';			string[j++] = '*';			peek = -1;			comment();		}		else string[j++] = '/';	}	if((peek = getch()) == '\n'){		peek = -1;		return(1);	}	return(0);}comment(){rep:	while((c = string[j++] = getch()) != '*')		if(c == '\n'){			puts();			sflg = 1;		}gotstar:	if((c = string[j++] = getch()) != '/'){		if(c == '*')goto gotstar;		goto rep;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -