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

📄 dn.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
/* * DN-11 ACU interface */#include "../h/param.h"#include "../h/dir.h"#include "../h/user.h"struct device {	int	dn_reg[4];};struct device *dn_addr[] = { (struct device *)0175200 };#define	NDN	4#define	PWI	0100000#define	ACR	040000#define	DLO	010000#define	DONE	0200#define	IENABLE	0100#define	DSS	040#define	PND	020#define	MENABLE	04#define	DPR	02#define	CRQ	01#define	DNPRI	(PZERO+5)dnopen(dev)register dev;{	register struct device *dp;	dev = minor(dev);	if (dev >= NDN ||	   (dp = dn_addr[dev>>2])->dn_reg[dev&03]&(PWI|DLO|CRQ))		u.u_error = ENXIO;	else {		dp->dn_reg[0] |= MENABLE;		dp->dn_reg[dev&03] = IENABLE|MENABLE|CRQ;	}}dnclose(dev){	dev = minor(dev);	dn_addr[dev>>2]->dn_reg[dev&03] = MENABLE;}dnwrite(dev){	register c;	register *dp;	extern lbolt;	dev = minor(dev);	dp = &(dn_addr[dev>>2]->dn_reg[dev&03]);	while ((*dp & (PWI|ACR|DSS)) == 0) {		spl4();		if ((*dp&PND) == 0 || u.u_count == 0 || (c=cpass()) < 0)			sleep((caddr_t)dp, DNPRI);		else if (c == '-') {			sleep((caddr_t)&lbolt, DNPRI);			sleep((caddr_t)&lbolt, DNPRI);		} else {			*dp = (c<<8)|IENABLE|MENABLE|DPR|CRQ;			sleep((caddr_t)dp, DNPRI);		}		spl0();	}	if (*dp&(PWI|ACR))		u.u_error = EIO;}/* * interrupt-- "dev" applies to * system unit number, not minor device */dnint(dev){	register *dp,*ep;	dp = &(dn_addr[dev]->dn_reg[0]);	*dp &= ~MENABLE;	for (ep=dp; ep<dp+4; ep++)		if (*ep&DONE) {			*ep &= ~DONE;			wakeup((caddr_t)ep);		}	*dp |= MENABLE;}

⌨️ 快捷键说明

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