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

📄 ptx.c

📁 Version 6 Unix 核心源代码 Version 6 Unix 核心源代码
💻 C
字号:
/* permuted title index */char	*tfil "/tmp/p.tmp";char	*sw[] {	"a",	"an",	"and",	"as",	"for",	"is",	"of",	"on",	"or",	"the",	"to",	"up",	0};char	line[200];int	ch;int	ptflg;int	llen	72;main(argc, argv)int argc;char *argv[];{	extern fin, fout;	extern onintr();	int f;	if(argc>1 && *argv[1]=='-') {		llen = 100;		ptflg++;		argc--;		argv++;	}	if(argc<2) {		printf("arg count\n");		exit();	}	fin = open(argv[1]);	if(fin < 0) {		printf("%s: cannot open\n", argv[1]);		exit();	}	f = creat(tfil, 0600);	if(f < 0) {		printf("cannot create %s\n", tfil);		exit();	}	fout = f;	if ((signal(2, 1) & 01) ==0)		signal(2, onintr);	pass1();	flush();	close(fin);	fin = 0;	close(fout);	fout = 1;	f = fork();	if(f < 0) {		printf("try again\n");		exit();	}	if(f == 0) {		execl("/bin/sort", "sort", "-d", "-o", tfil, tfil, 0);		execl("/usr/bin/sort", "sort", "-d", "-o", tfil, tfil, 0);		printf("someone moved sort\n");		exit();	}	while(wait() != f);	fin = open(tfil, 0);	if(fin < 0) {		printf("cannot reopen %s\n", tfil);		exit();	}	if (argc>=3)		f = creat(argv[2], 0666);	else		f = dup(1);	if(f < 0) {		printf("%s: cannot open\n", argv[2]);		exit();	}	fout = f;	pass2();	flush();	onintr();}onintr(){	unlink(tfil);	exit();}pass1(){	int n, c, i, ll, j, k, cc, ccc;loop:	if ((c=getchar())=='\0')		return;	n = 0;	i = 0;	while(c!='\n' && c!='\0') {		if(c == '(')			c = 0177;		if(c==' ' || c=='\t') {			i++;			c = getchar();			continue;		}		if(i) {			i = 0;			if(n<=llen) line[n++] = ' ';		}		if (n<=llen) line[n++] = c;		c = getchar();	}	ll = n;	line[n++] = 0;	i = -1;l1:	while((cc=line[++i])==' ');	n = i;	j = 0;	while(sw[j]) {		i = n;		k = 0;		while ((cc=sw[j][k++])==line[i++]);		if(cc==0 && ((ccc=line[--i])==' '||ccc==0))			goto l1;		j++;	}	i = n;	while (c=line[n++]) putchar(c);	putchar('~');	n = 0;	while (n<i) {		c = line[n++];		if (c!=' ' || n!=i)			putchar(c);	}	putchar('\n');	while((c=line[i++])!=0 && c!=' ');	--i;	if (c) goto l1;	goto loop;}pass2(){	int i, n, c, tilde, llen2, nbfore, nafter;	llen2 = llen/2+6;loop:	if ((c=getchar())=='\0')		return;	n = nbfore = nafter = 0;	tilde = -1;	while(c!='\n' && c!='\0') {		if(c == 0177)			c = '(';		if (n<=llen) line[n] = c;		if (c=='~') tilde = n;		if (tilde>=0) nafter++; else nbfore++;		n++;		c = getchar();	}	if (tilde<0)		tilde = n++;	nafter--;	if (nbfore>llen2) {		i = tilde;		while (nbfore > llen2)			while(line[--i]!=' ' && i>=0) nbfore--;		if (i<0) goto l1;		line[tilde] = 0200;		nafter =+ (tilde-i+2);		tilde = i;	}	if (nafter >= llen-llen2) {		i = tilde;		while(nafter-- >= llen-llen2)			while(line[++i]!=' ' && i<n) nafter--;		if (i>=n) goto l1;		line[tilde] = 0200;		nafter++;		tilde = i;	}l1:	if(!ptflg) {		for(i=llen-llen2-nafter; i>=8; i =- 8)			putchar('\t');		while(--i>=0)			putchar(' ');	} else		printf(".xx \"");	i = tilde;	while (++i<n) p1char(line[i]);	if(!ptflg)		printf("  "); else		printf("\" \"");	i = -1;	while(++i<tilde) p1char(line[i]);	if(ptflg)		putchar('"');	putchar('\n');	goto loop;}p1char(c){	if ((c&0377) == 0200) {		putchar('.');		putchar('.');		c = '.';	}	putchar(c);}

⌨️ 快捷键说明

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