boot.c

来自「unix v7是最后一个广泛发布的研究型UNIX版本」· C语言 代码 · 共 87 行

C
87
字号
#include <sys/param.h>#include <sys/ino.h>#include <sys/inode.h>#include <sys/filsys.h>#include <sys/dir.h>#include <saio.h>char line[100];extern struct devsw devsw[];main(){int i;	segflag = 2;	printf("New Boot, known devices are ");	for (i=0; devsw[i].dv_name; i++) printf("%s ", devsw[i].dv_name);	printf("\n");	do {		printf(": "); gets(line);		i = open(line,0);	} while (i < 0);	copyunix(i);}copyunix(io)register io;{register addr,s;long phys;unsigned	txtsiz,datsiz,bsssiz;int	magic;	lseek(io, (off_t)0, 0);	magic = getw(io);	txtsiz = getw(io);	datsiz = getw(io);	bsssiz = getw(io);	switch (magic) {	case 0411:		setseg(0);		lseek(io, (long)(020+txtsiz), 0);		for(addr=0; addr!=datsiz; addr+=2)  {			mtpi(getw(io),addr);		}		clrseg(addr,bsssiz);		phys = (long)datsiz + (long)bsssiz + 63L;		phys =/ 64;		setseg((int)phys);		lseek(io, 020L, 0);		for(addr=0; addr!=txtsiz; addr+=2) {			mtpi(getw(io),addr);		}		return;	case 0407:		setseg(0);		/*		 * space over the header. We do this instead of seeking		 * because the input might be a tape which doesn't know 		 * how to seek.		 */		getw(io); getw(io); getw(io); getw(io);		phys = txtsiz+datsiz;		for (addr = 0; addr != phys; addr += 2)			mtpi(getw(io),addr);		clrseg(addr, bsssiz);		return;	default:		printf("Can't load %o files\n", magic);		exit(1);	}}

⌨️ 快捷键说明

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