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

📄 getty.c

📁 Version 6 Unix 核心源代码 Version 6 Unix 核心源代码
💻 C
字号:
#/* * getty -- adapt to terminal speed on dialup, and call login *//* * tty flags */#define	HUPCL 01#define	XTABS	02#define	LCASE	04#define	ECHO	010#define	CRMOD	020#define	RAW	040#define	ODDP	0100#define	EVENP	0200#define	ANYP	0300/* * Delay algorithms */#define	CR1	010000#define	CR2	020000#define	CR3	030000#define	NL1	000400#define	NL2	001000#define	NL3	001400#define	TAB1	002000#define	TAB2	004000#define	TAB3	006000#define	FF1	040000#define	ERASE	'#'#define	KILL	'@'/* * speeds */#define	B110	3#define	B150	5#define	B300	7#define	B9600	13#define	SIGINT	2#define	SIGQIT	3struct	sgtty {	char	sgispd, sgospd;	char	sgerase, sgkill;	int	sgflag;} tmode;struct	tab {	int	tname;		/* this table name */	int	nname;		/* successor table name */	int	iflags;		/* initial flags */	int	fflags;		/* final flags */	int	ispeed;		/* input speed */	int	ospeed;		/* output speed */	char	*message;	/* login message */} itab[] {/* table '0'-1-2 300,150,110 */	'0', 1,	ANYP+RAW+NL1+CR1, ANYP+ECHO+CR1,	B300, B300,	"\n\r\033;\007login: ",	1, 2,	ANYP+RAW+NL1+CR1, EVENP+ECHO+FF1+CR2+TAB1+NL1,	B150, B150,	"\n\r\033:\006\006\017login: ",	2, '0',	ANYP+RAW+NL1+CR1, ANYP+ECHO+CRMOD+XTABS+LCASE+CR1,	B110, B110,	"\n\rlogin: ",/* table '-' -- Console TTY 110 */	'-', '-',	ANYP+RAW+NL1+CR1, ANYP+ECHO+CRMOD+XTABS+LCASE+CR1,	B110, B110,	"\n\rlogin: ",/* table '1' -- 150 */	'1', '1',	ANYP+RAW+NL1+CR1, EVENP+ECHO+FF1+CR2+TAB1+NL1,	B150, B150,	"\n\r\033:\006\006\017login: ",/* table '2' -- 9600 */	'2', '2',	ANYP+RAW+NL1+CR1, ANYP+XTABS+ECHO+CRMOD+FF1,	B9600, B9600,	"\n\r\033;login: ",};#define	NITAB	sizeof itab/sizeof itab[0]char	name[16];int	crmod;int	upper;int	lower;main(argc, argv)char **argv;{	register struct tab *tabp;	register tname;/*	signal(SIGINT, 1);	signal(SIGQIT, 0);*/	tname = '0';	if (argc > 1)		tname = *argv[1];	for (;;) {		for(tabp = itab; tabp < &itab[NITAB]; tabp++)			if(tabp->tname == tname)				break;		if(tabp >= &itab[NITAB])			tabp = itab;		tmode.sgispd = tabp->ispeed;		tmode.sgospd = tabp->ospeed;		tmode.sgflag = tabp->iflags;		tmode.sgispd = tabp->ispeed;		tmode.sgospd = tabp->ospeed;		stty(0, &tmode);		puts(tabp->message);		stty(0, &tmode);		if(getname()) {			tmode.sgerase = ERASE;			tmode.sgkill = KILL;			tmode.sgflag = tabp->fflags;			if(crmod)				tmode.sgflag =| CRMOD;			if(upper)				tmode.sgflag =| LCASE;			if(lower)				tmode.sgflag =& ~LCASE;			stty(0, &tmode);			execl("/bin/login", "login", name, 0);			exit(1);		}		tname = tabp->nname;	}}getname(){	register char *np;	register c;	static cs;	crmod = 0;	upper = 0;	lower = 0;	np = name;	do {		if (read(0, &cs, 1) <= 0)			exit(0);		if ((c = cs&0177) == 0)			return(0);		write(1, &cs, 1);		if (c>='a' && c <='z')			lower++;		else if (c>='A' && c<='Z') {			upper++;			c =+ 'a'-'A';		} else if (c==ERASE) {			if (np > name)				np--;			continue;		} else if (c==KILL) {			np = name;			continue;		}		*np++ = c;	} while (c!='\n' && c!='\r' && np <= &name[16]);	*--np = 0;	if (c == '\r') {		write(1, "\n", 1);		crmod++;	} else		write(1, "\r", 1);	return(1);}puts(as)char *as;{	register char *s;	s = as;	while (*s)		write(1, s++, 1);}

⌨️ 快捷键说明

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