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

📄 spinning.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
/* * @(#)spinning.c 1.1 92/07/30 Copyright (c) 1985 by Sun Microsystems, Inc. */#include <sys/types.h>#include <stand/saio.h>#include <mon/sunromvec.h>char msg_spinup[] = "\n\007Waiting for disk to spin up...\n\n\Please start it, if necessary, -OR- press any key to quit.\n\n";char msg_noctlr[] = "No controller at mbio %x\n";#ifdef OPENPROMS#define	millitime() prom_gettime()extern	int	prom_mayget();#else#define	millitime() (*romp->v_nmiclock)#define	prom_mayget	(*romp->v_mayget)#endif !OPENPROMS/* * Returns 0 if disk is apparently not spinning, after waiting awhile. * Returns 1 if disk is already spinning on entry to this routine. * Returns 2 if disk starts spinning sometime after entry to this routine. * Returns <0 if (*isready)() returns a negative result at any time. * * If on initial entry, after a suitable delay, the disk is not spinning, * we produce a message to remind the user to turn on the disk. */intisspinning(isready, addr, data)	int (*isready)();	char *addr;	int data;{	register int r;	long t;	/*	 * Wait for disk to spin up, if necessary.	 */	r = (*isready)(addr, data);	if (r < 0)		return (r);		/* Error */	if (r)		return (1);		/* Already spinning */	DELAY(1000000);			/* RTZ can take a long time */	r = (*isready)(addr, data);	if (r < 0)		return (r);	if (r)		return (2);		/* Spun up while we waited */	while (prom_mayget() != -1)		/* clear typeahead */		;	printf(msg_spinup);	t = (3*60*1000) + millitime(); /* quitting time in 3 minutes */	for (;;) {		r = (*isready)(addr, data);	/* Test disk */		if (r < 0)			return (r);		if (r)			return (2);		if (prom_mayget() != -1)	/* Test keyboard */			return (0);		if (millitime() > t) {	/* Test timer */			printf("Giving up...\n");			return (0);		}	}					/* Loop */}

⌨️ 快捷键说明

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