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

📄 main.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include	<u.h>#include	<libc.h>#include	<draw.h>#include	<event.h>#include	<bio.h>#include	"proof.h"Rectangle rpage = { 0, 0, 850, 1150 };char devname[64];double mag = DEFMAG;int dbg = 0;char *track = 0;Biobuf bin;char libfont[100] = "/lib/font/bit";char mapfile[100] = "MAP";char *mapname = "MAP";voidusage(void){	fprint(2, "usage: proof [-m mag] [-/ nview] [-x xoff] [-y yoff] [-M mapfile] [-F fontdir] [-dt] file...\n");	exits("usage");}doublegetnum(char *s){	if(s == nil)		usage();	return atof(s);}char*getstr(char *s){	if(s == nil)		usage();	return s;}voidmain(int argc, char *argv[]){	char c;	int dotrack = 0;		ARGBEGIN{	case 'm':	/* magnification */		mag = getnum(ARGF());		if (mag < 0.1 || mag > 10){			fprint(2, "ridiculous mag argument ignored\n");			mag = DEFMAG;		}		break;	case '/':		nview = getnum(ARGF());		if (nview < 1 || nview > MAXVIEW)			nview = 1;		break;	case 'x':		xyoffset.x += getnum(ARGF()) * 100;		break;	case 'y':		xyoffset.y += getnum(ARGF()) * 100;		break;	case 'M':	/* change MAP file */		strcpy(mapname, getstr(ARGF()));		break;	case 'F':	/* change /lib/font/bit directory */		strcpy(libfont, getstr(ARGF()));		break;	case 'd':		dbg = 1;		break;	case 't':		dotrack = 1;		break;	default:		usage();	}ARGEND	if (argc > 0) {		close(0);		if (open(argv[0], 0) != 0) {			sysfatal("can't open %s: %r\n", argv[0]);			exits("open failure");		}		if(dotrack)			track = argv[0];	}	Binit(&bin, 0, OREAD);	sprint(mapfile, "%s/%s", libfont, mapname);	readmapfile(mapfile);	for (c = 0; c < NFONT; c++)		loadfontname(c, "??");	mapscreen();	clearscreen();	readpage(); }/* * Input buffer to allow us to back up */#define	SIZE	100000	/* 8-10 pages, typically */char	bufc[SIZE];char	*inc = bufc;		/* where next input character goes */char	*outc = bufc;	/* next character to be read from buffer */int	off;		/* position of outc in total input stream */voidaddc(int c){	*inc++ = c;	if(inc == &bufc[SIZE])		inc = &bufc[0];}intgetc(void){	int c;	if(outc == inc){		c = Bgetc(&bin);		if(c == Beof)			return Beof;		addc(c);	}	off++;	c = *outc++;	if(outc == &bufc[SIZE])		outc = &bufc[0];	return c;}intgetrune(void){	int c, n;	Rune r;	char buf[UTFmax];	for(n=0; !fullrune(buf, n); n++){		c = getc();		if(c == Beof)			return Beof;		buf[n] = c;	}	chartorune(&r, buf);	return r;}intnbuf(void)	/* return number of buffered characters */{	int ini, outi;	ini = inc-bufc;	outi = outc-bufc;	if(ini < outi)		ini += SIZE;	return ini-outi;}ulongseekc(ulong o){	ulong avail;	long delta;	delta = off-o;	if(delta < 0)		return Beof;	avail = SIZE-nbuf();	if(delta < avail){		off = o;		outc -= delta;		if(outc < &bufc[0])			outc += SIZE;		return off;	}	return Beof;}voidungetc(void){	if(off == 0)		return;	if(nbuf() == SIZE){		fprint(2, "backup buffer overflow\n");		return;	}	if(outc == &bufc[0])		outc = &bufc[SIZE];	--outc;	--off;}ulongoffsetc(void){	return off;}char*rdlinec(void){	static char buf[2048];	int c, i;	for(i=0; i<sizeof buf; ){		c = getc();		if(c == Beof)			break;		buf[i++] = c;		if(c == '\n')			break;	}	if(i == 0)		return nil;	return buf;}

⌨️ 快捷键说明

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