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

📄 uniq.c

📁 Version 6 Unix 核心源代码 Version 6 Unix 核心源代码
💻 C
字号:
fields 0;letters 0;linec;mode;uniq;main(argc, argv)int argc;char *argv[];{	extern fin, fout;	int f;	static char b1[1000], b2[1000];loop:	if(argc > 1) {		if(*argv[1] == '-') {			if(argv[1][1] <= '9')				fields = conv(&argv[1][1]);			else mode = argv[1][1];			argc--;			argv++;			goto loop;		}		if(*argv[1] == '+') {			letters = conv(&argv[1][1]);			argc--;			argv++;			goto loop;		}		f = open(argv[1], 0);		if(f < 0) {			printf("cannot open %s\n", argv[1]);			exit();		}		fin = f;	} else		fin = dup(0);	if(argc > 2) {		f = creat(argv[2], 0666);		if(f < 0) {			printf("cannot create %s\n", argv[2]);			exit();		}		fout = f;	} else		fout = dup(1);	close(0);	close(1);	gline(b1);l1:	linec++;	if(gline(b2)) {		pline(b1);		flush();		exit();	}	if(equal(b1, b2)) goto l1;	pline(b1);	linec = 0;l2:	linec++;	if(gline(b1)) {		pline(b2);		flush();		exit();	}	if(equal(b1, b2)) goto l2;	pline(b2);	linec = 0;	goto l1;}gline(buf)char buf[];{	int c;	while((c = getchar()) != '\n') {		if(c == '\0')			return(1);		*buf++ = c;	}	*buf = 0;	return(0);}pline(buf)char buf[];{	int c;	switch(mode) {	case 'u':		if(uniq) {;			uniq = 0;			return;		}		break;	case 'd':		if(uniq) break;		return;	case 'c':		printf("%4d ", linec);	}	uniq = 0;	while((c = *buf++) != 0)		putchar(c);	putchar('\n');}equal(b1, b2)char b1[], b2[];{	int c;	b1 = skip(b1);	b2 = skip(b2);	while((c = *b1++) != 0)		if(c != *b2++) return(0);	if(*b2 != 0)		return(0);	uniq++;	return(1);}char *skip(s)char *s;{	int nf, nl;	nf = nl = 0;	while(nf++ < fields) {		while(*s==' ' || *s=='\t')			s++;		while( !(*s==' ' || *s=='\t') ) 			if(*s == 0) return(s);			else s++;	}	while(nl++ < letters) 			if(*s == 0) return(s);			else s++;	return(s);}conv(s)char *s;{	int d, n;	n = 0;	for(;;) {		d = *s++ - '0';		if(0>d || d>9) break;		n = n*10 + d;	}	return(n);}

⌨️ 快捷键说明

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