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

📄 tm.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
#/* * TM tape driver */#include <sys/param.h>#include <sys/inode.h>#include "saio.h"struct device {	int	tmer;	int	tmcs;	int	tmbc;	char	*tmba;	int	tmdb;	int	tmrd;};#define	TMADDR ((struct device *)0172520)#define	GO	01#define	RCOM	02#define	WCOM	04#define	WEOF	06#define	SFORW	010#define	SREV	012#define	WIRG	014#define	REW	016#define	DENS	060000		/* 9-channel */#define	IENABLE	0100#define	CRDY	0200#define GAPSD	010000#define	TUR	1#define	SDWN	010#define	HARD	0102200	/* ILC, EOT, NXM */#define	EOF	0040000#define	SSEEK	1#define	SIO	2tmrew(io)register struct iob *io;{	tmstrategy(io, REW);}tmopen(io)register struct iob *io;{	register skip;	tmstrategy(io, REW);	skip = io->i_boff;	while (skip--) {		io->i_cc = 0;		while (tmstrategy(io, SFORW))			;	}}tmstrategy(io, func)register struct iob *io;{	register int com, unit, errcnt;	unit = io->i_unit;	errcnt = 0;retry:	tmquiet();	com = (unit<<8)|(segflag<<4)|DENS;	TMADDR->tmbc = -io->i_cc;	TMADDR->tmba = io->i_ma;	if (func == READ)		TMADDR->tmcs = com | RCOM | GO;	else if (func == WRITE)		TMADDR->tmcs = com | WCOM | GO;	else if (func == SREV) {		TMADDR->tmbc = -1;		TMADDR->tmcs = com | SREV | GO;		return(0);	} else		TMADDR->tmcs = com | func | GO;	while ((TMADDR->tmcs&CRDY) == 0)		;	if (TMADDR->tmer&EOF)		return(0);	if (TMADDR->tmer < 0) {		if (errcnt == 0)			printf("tape error: er=%o", TMADDR->tmer);		if (errcnt==10) {			printf("\n");			return(-1);		}		errcnt++;		tmstrategy(io, SREV);		goto retry;	}	if (errcnt)		printf(" recovered by retry\n");	return( io->i_cc+TMADDR->tmbc );}tmquiet(){	while ((TMADDR->tmcs&CRDY) == 0)		;	while ((TMADDR->tmer&TUR) == 0)		;	while ((TMADDR->tmer&SDWN) != 0)		;}

⌨️ 快捷键说明

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