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

📄 cvopt.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
#include <stdio.h>int	tabflg;int	labno	= 1;FILE	*curbuf;FILE	*obuf;main(argc, argv)char **argv;{/*	A1 -> A	A2    B	A     O	B1    C	B2    D	BE    L	BF    P	C1    E	C2    F	F     G	H     H	R     I	R1    J	S     K	I     M	M     N		*	+1		S	+2		C	+4		1	+8	z  -> 4	c     10	a     14	e     20	n     63	*	+0100*/	int c, snlflg, nlflg, t, smode, m, ssmode, peekc;	smode = nlflg = snlflg = ssmode = 0;	if (argc>1)		if (freopen(argv[1], "r", stdin) == NULL) {			fprintf(stderr, "%s?\n", argv[1]);			return(1);		}	if (argc>2) 		if (freopen(argv[2], "w", stdout) == NULL) {			fprintf(stderr, "%s?\n", argv[2]);			return(1);		}	if ((obuf = fopen("cvopt.tmp", "w")) == NULL) {		fprintf(stderr, "cvopt.tmp?\n");		exit(1);	}	curbuf = obuf;loop:	c = getchar();	if (c!='\n' && c!='\t')		nlflg = 0;	if (ssmode!=0 && c!='%') {		ssmode = 0;		curbuf = stdout;		fprintf(curbuf, "L%d:<", labno++);	}	switch(c) {	case EOF:		fprintf(obuf, "0\n");		fclose(obuf);		fprintf(stdout, ".even\n");		if (freopen("cvopt.tmp", "r", stdin) == NULL) {			fprintf(stderr, "tmp?\n");			exit(1);		}		while ((c = getchar()) != EOF)			putchar(c);		unlink("cvopt.tmp");		return(0);	case ':':		if (!smode)			fprintf(curbuf, "=.+2; 0"); else			put(':');		goto loop;	case 'A':		if ((c=getchar())=='1' || c=='2') {			put(c+'A'-'1');			goto loop;		}		put('O');		ungetc(c, stdin);		goto loop;	case 'B':		switch (getchar()) {		case '1':			put('C');			goto loop;		case '2':			put('D');			goto loop;		case 'E':			put('L');			goto loop;		case 'F':			put('P');			goto loop;		}		put('?');		goto loop;	case 'C':		put(getchar()+'E'-'1');		goto loop;	case 'F':		put('G');		goto subtre;	case 'R':		if ((c=getchar()) == '1')		put('J'); else {			put('I');			ungetc(c, stdin);		}		goto loop;	case 'H':		put('H');		goto subtre;	case 'I':		put('M');		goto loop;	case 'S':		put('K');subtre:		snlflg = 1;		t = 'A';l1:		switch (c=getchar()) {		case '*':			t++;			goto l1;		case 'S':			t =+ 2;			goto l1;		case 'C':			t =+ 4;			goto l1;		case '1':			t =+ 8;			goto l1;		case '2':			t =+ 16;			goto l1;		}		ungetc(c, stdin);		put(t);		goto loop;	case '#':		if(getchar()=='1')			put('#'); else			put('"');		goto loop;	case '%':		if (smode)			curbuf = obuf;		if (ssmode==0) {			if ((peekc=getchar())=='[') {				curbuf = stdout;				while((c=getchar())!=']')					put(c);				getchar();				fprintf(curbuf, ";");				curbuf = obuf;				goto loop;			}			ungetc(peekc, stdin);		}loop1:		switch (c=getchar()) {		case ' ':		case '\t':			goto loop1;		case 'a':			m = 16;			t = flag();			goto pf;		case ',':			put(';');			goto loop1;		case 'i':			m = 12;			t = flag();			goto pf;		case 'z':			m = 4;			t = flag();			goto pf;		case 'r':			m = 9;			t = flag();			goto pf;		case '1':			m = 5;			t = flag();			goto pf;		case 'c':			t = 0;			m = 8;			goto pf;		case 'e':			t = flag();			m = 20;			goto pf;		case 'n':			t = flag();			m = 63;pf:			if ((c=getchar())=='*')				m =+ 0100; else				ungetc(c, stdin);			fprintf(curbuf, ".byte %o,%o", m, t);			goto loop1;		case '[':			fprintf(curbuf, "L%d=", labno++);			while ((c=getchar())!=']')				put(c);			ssmode = 0;			smode = 0;			goto loop;		case '\n':			fprintf(curbuf, "\nL%d\n", labno);			ssmode = 1;			nlflg = 1;			smode = 1;			goto loop;		}		put(c);		goto loop1;	case '\t':		if (nlflg) {			nlflg = 0;			goto loop;		}		if (smode) {			tabflg++;			goto loop;		}		put('\t');		goto loop;	case '\n':		if (!smode)  {			put('\n');			goto loop;		}		if (nlflg) {			nlflg = 0;			fprintf(curbuf, "\\0>\n");			curbuf = obuf;			smode = 0;			goto loop;		}		if (!snlflg)			fprintf(curbuf, "\\n");		snlflg = 0;		fprintf(curbuf, ">\n<");		nlflg = 1;		goto loop;	case 'X':	case 'Y':	case 'T':		snlflg++;	}	put(c);	goto loop;}flag() {	register c, f;	f = 0;l1:	switch(c=getchar()) {	case 'w':		f = 1;		goto l1;	case 'i':		f = 2;		goto l1;	case 'b':		f = 3;		goto l1;	case 'f':		f = 4;		goto l1;	case 'd':		f = 5;		goto l1;	case 'u':		f = 9;		goto l1;	case 's':		f = 6;		goto l1;	case 'l':		f = 8;		goto l1;	case 'p':		f =+ 16;		goto l1;	}	ungetc(c, stdin);	return(f);}put(c){	if (tabflg) {		tabflg = 0;		fprintf(curbuf, ">;.byte %o;<", c+0200);	} else		putc(c, curbuf);}

⌨️ 快捷键说明

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