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

📄 l.h

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 H
字号:
#include	<u.h>#include	<libc.h>#include	<bio.h>#include	"../2c/2.out.h"#ifndef	EXTERN#define	EXTERN	extern#endif#define	P		((Prog*)0)#define	S		((Sym*)0)#define	TNAME		(curtext?curtext->from.sym->name:noname)#define	CPUT(c)\	{ *cbp++ = c;\	if(--cbc <= 0)\		cflush(); }typedef	struct	Adr	Adr;typedef	struct	Prog	Prog;typedef	struct	Sym	Sym;typedef	struct	Auto	Auto;typedef	struct	Optab	Optab;struct	Adr{	short	type;	short	index;	union	{		struct		{			long	u0displace;			long	u0offset;		} s0;		char	u0scon[8];		Prog	*u0cond;	/* not used, but should be D_BRANCH */		Ieee	u0ieee;	} u0;	union	{		Auto*	u1autom;		Sym*	u1sym;	} u1;	uchar	field;	uchar	scale;};#define	displace u0.s0.u0displace#define	offset	u0.s0.u0offset#define	scon	u0.u0scon#define	cond	u0.u0cond#define	ieee	u0.u0ieee#define	autom	u1.u1autom#define	sym	u1.u1symstruct	Prog{	Adr	from;	Adr	to;	union	{		long	u0stkoff;		Prog	*u0forwd;	} u0;	Prog*	link;	Prog*	pcond;	/* work on this */	long	pc;	long	line;	short	as;	uchar	mark;	/* work on these */	uchar	back;};#define	stkoff	u0.u0stkoff#define	forwd	u0.u0forwdstruct	Auto{	Sym*	asym;	Auto*	link;	long	aoffset;	short	type;};struct	Sym{	char	*name;	short	type;	short	version;	short	become;	short	frame;	long	value;	Sym*	link;};struct	Optab{	short	as;	short	fas;	short	srcsp;	short	dstsp;	ushort	optype;	ushort	opcode0;	ushort	opcode1;	ushort	opcode2;	ushort	opcode3;};enum{	STEXT		= 1,	SDATA,	SBSS,	SDATA1,	SXREF,	SAUTO,	SPARAM,	SFILE,	NHASH		= 10007,	NHUNK		= 100000,	MINSIZ		= 4,	STRINGSZ	= 200,	MAXIO		= 8192,	MAXHIST		= 20,				/* limit of path elements for history symbols */	A6OFFSET 	= 32766};EXTERN union{	struct	{		char	obuf[MAXIO];			/* output buffer */		uchar	ibuf[MAXIO];			/* input buffer */	} u;	char	dbuf[1];} buf;#define	cbuf	u.obuf#define	xbuf	u.ibufEXTERN	long	HEADR;EXTERN	long	HEADTYPE;EXTERN	long	INITDAT;EXTERN	long	INITRND;EXTERN	long	INITTEXT;EXTERN	char*	INITENTRY;		/* entry point */EXTERN	Biobuf	bso;EXTERN	long	bsssize;EXTERN	long	casepc;EXTERN	int	cbc;EXTERN	char*	cbp;EXTERN	int	cout;EXTERN	Auto*	curauto;EXTERN	Auto*	curhist;EXTERN	Prog*	curp;EXTERN	Prog*	curtext;EXTERN	Prog*	datap;EXTERN	long	datsize;EXTERN	char	debug[128];EXTERN	Prog*	etextp;EXTERN	Prog*	firstp;EXTERN	char	fnuxi8[8];EXTERN	char	gnuxi8[8];EXTERN	Sym*	hash[NHASH];EXTERN	Sym*	histfrog[MAXHIST];EXTERN	int	histfrogp;EXTERN	int	histgen;EXTERN	char*	library[50];EXTERN	char*	libraryobj[50];EXTERN	int	libraryp;EXTERN	int	xrefresolv;EXTERN	char*	hunk;EXTERN	char	inuxi1[1];EXTERN	char	inuxi2[2];EXTERN	char	inuxi4[4];EXTERN	Prog*	lastp;EXTERN	long	lcsize;EXTERN	long	ncase;EXTERN	long	ndata;EXTERN	int	nerrors;EXTERN	long	nhunk;EXTERN	long	nsymbol;EXTERN	char*	noname;EXTERN	short*	op;EXTERN	char*	outfile;EXTERN	long	pc;EXTERN	char	simple[I_MASK];EXTERN	char	special[I_MASK];EXTERN	long	spsize;EXTERN	Sym*	symlist;EXTERN	long	symsize;EXTERN	Prog*	textp;EXTERN	long	textsize;EXTERN	long	thunk;EXTERN	int	version;EXTERN	Prog	zprg;extern	Optab	optab[];extern	char	mmsize[];extern	char*	anames[];#pragma	varargck	type	"A"	int#pragma	varargck	type	"D"	Adr*#pragma	varargck	type	"P"	Prog*#pragma	varargck	type	"R"	int#pragma	varargck	type	"S"	char*int	Aconv(Fmt*);int	Dconv(Fmt*);int	Pconv(Fmt*);int	Rconv(Fmt*);int	Sconv(Fmt*);int	Xconv(Fmt*);void	addhist(long, int);int	andsize(Prog*, Adr*);Prog*	appendp(Prog*);void	asmb(void);int	asmea(Prog*, Adr*);void	asmins(Prog*);void	asmlc(void);void	asmsp(void);void	asmsym(void);long	atolwhex(char*);Prog*	brchain(Prog*);Prog*	brloop(Prog*);void	cflush(void);Prog*	copyp(Prog*);double	cputime(void);void	datblk(long, long);void	diag(char*, ...);void	dodata(void);void	doprof1(void);void	doprof2(void);void	dostkoff(void);long	entryvalue(void);void	errorexit(void);int	find1(long, int);int	find2(long, int);void	follow(void);void	gethunk(void);int	gnuxi(Ieee*, int, int);void	histtoauto(void);double	ieeedtod(Ieee*);long	ieeedtof(Ieee*);void	ldobj(int, long, char*);void	loadlib(void);void	listinit(void);Sym*	lookup(char*, int);void	lput(long);void	main(int, char*[]);void	mkfwd(void);void*	mysbrk(ulong);void	nuxiinit(void);void	objfile(char*);void	patch(void);Prog*	prg(void);int	relinv(int);long	reuse(Prog*, Sym*);long	rnd(long, long);void	s16put(char*);void	span(void);void	undef(void);void	xdefine(char*, int, long);void	xfol(Prog*);int	zaddr(uchar*, Adr*, Sym*[]);

⌨️ 快捷键说明

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