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

📄 stty.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
/* * set teletype modes */#include <stdio.h>#include <sgtty.h>struct{	char	*string;	int	speed;} speeds[] = {	"0",	B0,	"50",	B50,	"75",	B75,	"110",	B110,	"134",	B134,	"134.5",B134,	"150",	B150,	"200",	B200,	"300",	B300,	"600",	B600,	"1200",	B1200,	"1800",	B1800,	"2400",	B2400,	"4800",	B4800,	"9600",	B9600,	"exta",	EXTA,	"extb",	EXTB,	0,};struct{	char	*string;	int	set;	int	reset;} modes[] = {	"even",	EVENP, 0,	"-even",	0, EVENP,	"odd",	ODDP, 0,	"-odd",	0, ODDP,	"raw",	RAW, 0,	"-raw",	0, RAW,	"cooked",	0, RAW,	"-nl",	CRMOD, 0,	"nl",	0, CRMOD,	"echo",	ECHO, 0,	"-echo",	0, ECHO,	"LCASE",	LCASE, 0,	"lcase",	LCASE, 0,	"-LCASE",	0, LCASE,	"-lcase",	0, LCASE,	"-tabs",	XTABS, 0,	"tabs",	0, XTABS,	"cbreak",	CBREAK, 0,	"-cbreak",	0, CBREAK,	"cr0",	CR0, CR3,	"cr1",	CR1, CR3,	"cr2",	CR2, CR3,	"cr3",	CR3, CR3,	"tab0",	TAB0, XTABS,	"tab1",	TAB1, XTABS,	"tab2",	TAB2, XTABS,	"nl0",	NL0, NL3,	"nl1",	NL1, NL3,	"nl2",	NL2, NL3,	"nl3",	NL3, NL3,	"ff0",	FF0, FF1,	"ff1",	FF1, FF1,	"bs0",	BS0, BS1,	"bs1",	BS1, BS1,	"33",	CR1, ALLDELAY,	"tty33",	CR1, ALLDELAY,	"37",	FF1+CR2+TAB1+NL1, ALLDELAY,	"tty37",	FF1+CR2+TAB1+NL1, ALLDELAY,	"05",	NL2, ALLDELAY,	"vt05",	NL2, ALLDELAY,	"tn",	CR1, ALLDELAY,	"tn300",	CR1, ALLDELAY,	"ti",	CR2, ALLDELAY,	"ti700",	CR2, ALLDELAY,	"tek",	FF1, ALLDELAY,	0,	};char	*arg;struct sgttyb mode;main(argc, argv)char	*argv[];{	int i;	gtty(1, &mode);	if(argc == 1) {		prmodes();		exit(0);	}	while(--argc > 0) {		arg = *++argv;		if (eq("ek")){			mode.sg_erase = '#';			mode.sg_kill = '@';		}		if (eq("erase")) {			if (**++argv == '^')				mode.sg_erase = (*argv)[1] & 037;			else				mode.sg_erase = **argv;			argc--;		}		if (eq("kill")) {			if (**++argv == '^')				mode.sg_kill = (*argv)[1] & 037;			else				mode.sg_kill = **argv;			argc--;		}		if (eq("gspeed")) {			mode.sg_ispeed = B300;			mode.sg_ospeed = B9600;		}		if (eq("hup")) {			ioctl(1, TIOCHPCL, NULL);		} else		for(i=0; speeds[i].string; i++)			if(eq(speeds[i].string))				mode.sg_ispeed = mode.sg_ospeed = speeds[i].speed;		for(i=0; modes[i].string; i++)			if(eq(modes[i].string)) {				mode.sg_flags &= ~modes[i].reset;				mode.sg_flags |= modes[i].set;			}		if(arg)			fprintf(stderr,"unknown mode: %s\n", arg);	}	stty(1,&mode);}eq(string)char *string;{	int i;	if(!arg)		return(0);	i = 0;loop:	if(arg[i] != string[i])		return(0);	if(arg[i++] != '\0')		goto loop;	arg = 0;	return(1);}prmodes(){	register m;	if(mode.sg_ispeed != mode.sg_ospeed) {		prspeed("input speed  ", mode.sg_ispeed);		prspeed("output speed ", mode.sg_ospeed);	} else		prspeed("speed ", mode.sg_ispeed);	if (mode.sg_erase < ' ')		fprintf(stderr, "erase = '^%c'; ", '@' + mode.sg_erase);	else		fprintf(stderr, "erase = '%c'; ", mode.sg_erase);	if (mode.sg_kill < ' ')		fprintf(stderr, "kill = '^%c'\n", '@' + mode.sg_kill);	else		fprintf(stderr, "kill = '%c'\n", mode.sg_kill);	m = mode.sg_flags;	if(m & EVENP)	fprintf(stderr,"even ");	if(m & ODDP)	fprintf(stderr,"odd ");	if(m & RAW)	fprintf(stderr,"raw ");	if(m & CRMOD)	fprintf(stderr,"-nl ");	if(m & ECHO)	fprintf(stderr,"echo ");	if(m & LCASE)	fprintf(stderr,"lcase ");	if((m & XTABS)==XTABS)	fprintf(stderr,"-tabs ");	if (m & CBREAK)	fprintf(stderr,"cbreak ");	delay((m&NLDELAY)/NL1,	"nl");	if ((m&TBDELAY)!=XTABS)		delay((m&TBDELAY)/TAB1,	"tab");	delay((m&CRDELAY)/CR1,	"cr");	delay((m&VTDELAY)/FF1,	"ff");	delay((m&BSDELAY)/BS1,	"bs");	fprintf(stderr,"\n");}delay(m, s)char *s;{	if(m)		fprintf(stderr,"%s%d ", s, m);}int	speed[] = {	0,50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,0,0};prspeed(c, s)char *c;{	fprintf(stderr,"%s%d baud\n", c, speed[s]);}

⌨️ 快捷键说明

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