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

📄 dn.c

📁 著名的AT&T UNIX v6 源码
💻 C
字号:
/* * DN-11 ACU interface */#include "../h/param.h"#include "../h/dir.h"#include "../h/user.h"#include "../h/uba.h"struct device {	short	dn_reg[4];};struct device *dn_addr[] = { (struct device *)(UBA0_DEV+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 short *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(dp, DNPRI);		else if (c == '-') {			sleep(&lbolt, DNPRI);			sleep(&lbolt, DNPRI);		} else {			*dp = (c<<8)|IENABLE|MENABLE|DPR|CRQ;			sleep(dp, DNPRI);		}		spl0();	}	if (*dp&(PWI|ACR))		u.u_error = EIO;}/* * interrupt-- "dev" applies to * system unit number, not minor device */dnint(dev){	register short *dp,*ep;	dp = &(dn_addr[dev]->dn_reg[0]);	*dp &= ~MENABLE;	for (ep=dp; ep<dp+4; ep++)		if (*ep&DONE) {			*ep &= ~DONE;			wakeup(ep);		}	*dp |= MENABLE;}

⌨️ 快捷键说明

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