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

📄 cons.c

📁 著名的AT&T UNIX v6 源码
💻 C
字号:
/* *   KL/DL-11 driver */#include "../h/param.h"#include "../h/conf.h"#include "../h/dir.h"#include "../h/user.h"#include "../h/tty.h"#include "../h/systm.h"#include "../h/cons.h"#include "../h/mtpr.h"#define	NL1	000400#define	NL2	001000#define	CR2	020000#define	FF1	040000#define	TAB1	002000struct	tty cons;int	consstart();int	ttrstrt();char	partab[];consopen(dev, flag)dev_t dev;{	register struct device *addr;	register struct tty *tp;	register d;	tp = &cons;	tp->t_oproc = consstart;	tp->t_iproc = NULL;	if ((tp->t_state&ISOPEN) == 0) {		tp->t_state = ISOPEN|CARR_ON;		tp->t_flags = EVENP|ECHO|XTABS|CRMOD;		tp->t_erase = CERASE;		tp->t_kill = CKILL;	}	mtpr(RXCS, mfpr(RXCS)|RXCS_IE);	mtpr(TXCS, mfpr(TXCS)|TXCS_IE);	ttyopen(dev, tp);}consclose(dev)dev_t dev;{	register struct tty *tp;	tp = &cons;	wflushtty(tp);	tp->t_state = 0;}consread(dev)dev_t dev;{	ttread(&cons);}conswrite(dev)dev_t dev;{	ttwrite(&cons);}consxint(dev)dev_t dev;{	register struct tty *tp;	tp = &cons;	ttstart(tp);	if (tp->t_outq.c_cc == 0 || tp->t_outq.c_cc == TTLOWAT)		wakeup((caddr_t)&tp->t_outq);}consrint(dev)dev_t dev;{	register int c;	register struct device *addr;	register struct tty *tp;	c = mfpr(RXDB);	ttyinput(c, &cons);}consioctl(dev,cmd,addr,flag)dev_t dev;caddr_t addr;{	register struct tty *tp; 	tp = &cons;	if (ttioccom(cmd,tp,addr,dev) ==0)		u.u_error = ENOTTY;}consstart(tp)register struct tty *tp;{	register c;	register struct device *addr;	if( (mfpr(TXCS)&TXCS_RDY) == 0)		return;	if ((c=getc(&tp->t_outq)) >= 0) {		if (tp->t_flags&RAW)			mtpr(TXDB, c&0xff);		else if (c<=0177)			mtpr(TXDB, (c | (partab[c]&0200))&0xff);		else {			timeout(ttrstrt, (caddr_t)tp, (c&0177));			tp->t_state |= TIMEOUT;		}	}}char	*msgbufp = msgbuf;	/* Next saved printf character *//* * Print a character on console. * Attempts to save and restore device * status. * If the switches are 0, all * printing is inhibited. * * Whether or not printing is inhibited, * the last MSGBUFS characters * are saved in msgbuf for inspection later. */putchar(c)register c;{	register s, timo;	if (c != '\0' && c != '\r' && c != 0177) {		*msgbufp++ = c;		if(msgbufp >= &msgbuf[MSGBUFS])			msgbufp = msgbuf;	}	timo = 30000;	/*	 * Try waiting for the console tty to come ready,	 * otherwise give up after a reasonable time.	 */	while((mfpr(TXCS)&TXCS_RDY) == 0)		if(--timo == 0)			break;	if(c == 0)		return;	s = mfpr(TXCS);	mtpr(TXCS,0);	mtpr(TXDB, c&0xff);	if(c == '\n') {		putchar('\r');	}	putchar(0);	mtpr(TXCS, s);}

⌨️ 快捷键说明

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