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

📄 vs.c

📁 UNIX v6源代码 这几乎是最经典的unix版本 unix操作系统设计和莱昂氏unix源代码分析都是用的该版
💻 C
字号:
#/* *//* * Screw Works interface via DC-11 */#include "../tty.h"#define	VSADDR	0174150#define	CDLEAD	01#define	B1200	030#define	STOP1	0400#define	CLSEND	02#define	RQSEND	01#define	MAGIC_MAP 0377struct {	int	vsrcsr;	int	vsrbuf;	int	vsxcsr;	int	vsxbuf;};struct {	struct	clist	iq;	struct	clist	oq;} vs;vsopen(dev){	VSADDR->vsrcsr = IENABLE|B1200|CDLEAD;	VSADDR->vsxcsr = STOP1|IENABLE|B1200;	vschar(0);}vsclose(dev){	vschar(0);	VSADDR->vsrcsr =& ~IENABLE;	while (getc(&vs.iq) >= 0);}vswrite(dev){	register int count, c;	count = 0;	while ((c=cpass()) >= 0) {		if (--count <= 0) {			count = 60;			vschar(0);		}		vschar(c);	}	vschar(0);}vschar(c){	c =^ MAGIC_MAP;	spl5();	while (vs.oq.c_cc > 60) {		vsxintr();		sleep(&vs.oq, TTIPRI);	}	putc(c, &vs.oq);	vsxintr();	spl0();}vsxintr(){	static lchar;	register c;	register int *xcsr;	xcsr = &VSADDR->vsxcsr;	if (*xcsr&DONE) {		if (lchar==MAGIC_MAP) {			*xcsr =& ~RQSEND;			lchar = 0;			if (vs.oq.c_cc==0)				goto wake;		}		if ((*xcsr&CLSEND) == 0) {			*xcsr =& ~RQSEND;			*xcsr =| RQSEND;			if ((*xcsr&CLSEND) == 0)				goto wake;		}		if ((c = getc(&vs.oq)) >= 0)			VSADDR->vsxbuf = lchar = c;		if (vs.oq.c_cc <= 15)	    wake:			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;	if (vs.iq.c_cc<=10)		putc(c, &vs.iq);	wakeup(&vs.iq);}

⌨️ 快捷键说明

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