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

📄 vs.c

📁 著名的AT&T UNIX v6 源码
💻 C
字号:
/* * Screw Works interface via DC-11 */#include "../h/types.h"#include "../h/tty.h"#include "../h/uba.h"#define	VSADDR	((struct device *)(UBA0_DEV+0174140))#define	CDLEAD	01#define	B1200	030#define	STOP1	0400#define	CLSEND	02#define	RQSEND	01#define	GO	026#define	COUNT	120struct device {	short	vsrcsr;	short	vsrbuf;	short	vsxcsr;	short	vsxbuf;};struct {	struct	clist	iq;	int	vtime;	struct	clist	oq;} vs;vsopen(dev){	register c;	c = VSADDR->vsrcsr;		/* touch register */	VSADDR->vsrcsr = IENABLE|B1200|CDLEAD;	VSADDR->vsxcsr = STOP1|IENABLE|B1200;	vschar(GO);}vsclose(dev){	vschar(GO);	VSADDR->vsrcsr &= ~IENABLE;	while (getc(&vs.iq) >= 0);}vswrite(dev){	register int count, c;	count = 0;	while ((c=cpass()) >= 0) {		if (--count <= 0) {			count = COUNT;			vschar(GO);		}		vschar(c);	}	vschar(GO);}vschar(c){	spl5();	while (vs.oq.c_cc > 120) {		vsxintr();		sleep(&vs.oq, TTIPRI);	}	putc(c, &vs.oq);	vsxintr();	spl0();}vstimo(){	vs.vtime = 0;	vsxintr();}vsxintr(){	static lchar;	register c;	register short *xcsr;	xcsr = &VSADDR->vsxcsr;	if (*xcsr&DONE) {		if (lchar==GO) {			*xcsr &= ~RQSEND;			lchar = -1;			if (vs.oq.c_cc==0) {				wakeup(&vs.oq);				return;			}		}		if ((*xcsr&CLSEND) == 0) {			*xcsr |= RQSEND;			if ((*xcsr&CLSEND) == 0) {				if (vs.vtime==0) {					vs.vtime++;					timeout(vstimo, 0, 60);				}				return;			}		}		if ((c = getc(&vs.oq)) >= 0)			VSADDR->vsxbuf = lchar = c;		else			*xcsr &= ~RQSEND;		if (vs.oq.c_cc <= 15)			wakeup(&vs.oq);	}}vsread(dev){	register int c;	spl5();	while ((c = getc(&vs.iq)) < 0)		sleep(&vs.iq, TTIPRI);	spl0();	passc("?0*#?546?213?879?"[c&017]);}vsrintr(){	register int c;	c = VSADDR->vsrbuf;	/* Register must be read (?) */	c = VSADDR->vsrbuf;	if (vs.iq.c_cc<=10)		putc(c, &vs.iq);	wakeup(&vs.iq);}

⌨️ 快捷键说明

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