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

📄 lib.h

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 H
字号:
/* avoid name conflicts */#define accept	pm_accept#define listen  pm_listen#define sleep	ksleep#define wakeup	kwakeup#define strtod		fmtstrtod/* conflicts on some os's */#define encrypt	libencrypt#define decrypt libdecrypt#define oserror	liboserror#define clone	libclone#define atexit	libatexit#define log2	liblog2#define log	liblog#define reboot	libreboot#undef timeradd#define timeradd	xtimeradd#define	nil	((void*)0)typedef unsigned char	p9_uchar;typedef unsigned int	p9_uint;typedef unsigned int	p9_ulong;typedef int		p9_long;typedef signed char	p9_schar;typedef unsigned short	p9_ushort;typedef unsigned short	Rune;typedef unsigned int	p9_u32int;typedef p9_u32int mpdigit;/* make sure we don't conflict with predefined types */#define schar	p9_schar#define uchar	p9_uchar#define ushort	p9_ushort#define uint	p9_uint#define u32int	p9_u32int/* #define long int rather than p9_long so that "unsigned long" is valid */#define long	int#define ulong	p9_ulong#define vlong	p9_vlong#define uvlong	p9_uvlong#define	nelem(x)	(sizeof(x)/sizeof((x)[0]))#define SET(x)		((x)=0)#define	USED(x)		if(x);elseenum{	UTFmax		= 3,		/* maximum bytes per rune */	Runesync	= 0x80,		/* cannot represent part of a UTF sequence (<) */	Runeself	= 0x80,		/* rune and UTF sequences are the same (<) */	Runeerror	= 0x80		/* decoding error in UTF */};/* * new rune routines */extern	int	runetochar(char*, Rune*);extern	int	chartorune(Rune*, char*);extern	int	runelen(long);extern	int	fullrune(char*, int);extern  int	wstrtoutf(char*, Rune*, int);extern  int	wstrutflen(Rune*);/* * rune routines from converted str routines */extern	long	utflen(char*);extern	char*	utfrune(char*, long);extern	char*	utfrrune(char*, long);/* * Syscall data structures */#define	MORDER	0x0003	/* mask for bits defining order of mounting */#define	MREPL	0x0000	/* mount replaces object */#define	MBEFORE	0x0001	/* mount goes before others in union directory */#define	MAFTER	0x0002	/* mount goes after others in union directory */#define	MCREATE	0x0004	/* permit creation in mounted directory */#define	MCACHE	0x0010	/* cache some data */#define	MMASK	0x0017	/* all bits on */#define	OREAD	0	/* open for read */#define	OWRITE	1	/* write */#define	ORDWR	2	/* read and write */#define	OEXEC	3	/* execute, == read but check execute permission */#define	OTRUNC	16	/* or'ed in (except for exec), truncate file first */#define	OCEXEC	32	/* or'ed in, close on exec */#define	ORCLOSE	64	/* or'ed in, remove on close */#define	OEXCL   0x1000	/* or'ed in, exclusive create */#define	NCONT	0	/* continue after note */#define	NDFLT	1	/* terminate after note */#define	NSAVE	2	/* clear note but hold state */#define	NRSTR	3	/* restore saved state */#define	ERRMAX			128	/* max length of error string */#define	KNAMELEN		28	/* max length of name held in kernel *//* bits in Qid.type */#define QTDIR		0x80		/* type bit for directories */#define QTAPPEND	0x40		/* type bit for append only files */#define QTEXCL		0x20		/* type bit for exclusive use files */#define QTMOUNT		0x10		/* type bit for mounted channel */#define QTAUTH		0x08		/* type bit for authentication file */#define QTFILE		0x00		/* plain file *//* bits in Dir.mode */#define DMDIR		0x80000000	/* mode bit for directories */#define DMAPPEND		0x40000000	/* mode bit for append only files */#define DMEXCL		0x20000000	/* mode bit for exclusive use files */#define DMMOUNT		0x10000000	/* mode bit for mounted channel */#define DMAUTH		0x08000000	/* mode bit for authentication files */#define DMREAD		0x4		/* mode bit for read permission */#define DMWRITE		0x2		/* mode bit for write permission */#define DMEXEC		0x1		/* mode bit for execute permission */typedef struct Lock{	long	key;} Lock;typedef struct QLock{	Lock	lk;	struct Proc	*hold;	struct Proc	*first;	struct Proc	*last;} QLock;typedefstruct Qid{	uvlong	path;	ulong	vers;	uchar	type;} Qid;typedefstruct Dir {	/* system-modified data */	ushort	type;	/* server type */	uint	dev;	/* server subtype */	/* file data */	Qid	qid;	/* unique id from server */	ulong	mode;	/* permissions */	ulong	atime;	/* last read time */	ulong	mtime;	/* last write time */	vlong	length;	/* file length */	char	*name;	/* last element of path */	char	*uid;	/* owner name */	char	*gid;	/* group name */	char	*muid;	/* last modifier name */} Dir;typedefstruct Waitmsg{	int pid;	/* of loved one */	ulong time[3];	/* of loved one & descendants */	char	*msg;} Waitmsg;/* * print routines */typedef struct Fmt	Fmt;struct Fmt{	uchar	runes;			/* output buffer is runes or chars? */	void	*start;			/* of buffer */	void	*to;			/* current place in the buffer */	void	*stop;			/* end of the buffer; overwritten if flush fails */	int	(*flush)(Fmt *);	/* called when to == stop */	void	*farg;			/* to make flush a closure */	int	nfmt;			/* num chars formatted so far */	va_list	args;			/* args passed to dofmt */	int	r;			/* % format Rune */	int	width;	int	prec;	ulong	flags;};enum{	FmtWidth	= 1,	FmtLeft		= FmtWidth << 1,	FmtPrec		= FmtLeft << 1,	FmtSharp	= FmtPrec << 1,	FmtSpace	= FmtSharp << 1,	FmtSign		= FmtSpace << 1,	FmtZero		= FmtSign << 1,	FmtUnsigned	= FmtZero << 1,	FmtShort	= FmtUnsigned << 1,	FmtLong		= FmtShort << 1,	FmtVLong	= FmtLong << 1,	FmtComma	= FmtVLong << 1,	FmtByte	= FmtComma << 1,	FmtFlag		= FmtByte << 1,	FmtLDouble	= FmtFlag << 1};extern	int	print(char*, ...);extern	char*	seprint(char*, char*, char*, ...);extern	char*	vseprint(char*, char*, char*, va_list);extern	int	snprint(char*, int, char*, ...);extern	int	vsnprint(char*, int, char*, va_list);extern	char*	smprint(char*, ...);extern	char*	vsmprint(char*, va_list);extern	int	sprint(char*, char*, ...);extern	int	fprint(int, char*, ...);extern	int	vfprint(int, char*, va_list);extern	int	(*doquote)(int);extern	int	runesprint(Rune*, char*, ...);extern	int	runesnprint(Rune*, int, char*, ...);extern	int	runevsnprint(Rune*, int, char*, va_list);extern	Rune*	runeseprint(Rune*, Rune*, char*, ...);extern	Rune*	runevseprint(Rune*, Rune*, char*, va_list);extern	Rune*	runesmprint(char*, ...);extern	Rune*	runevsmprint(char*, va_list);extern	int	fmtfdinit(Fmt*, int, char*, int);extern	int	fmtfdflush(Fmt*);extern	int	fmtstrinit(Fmt*);extern	int	fmtinstall(int, int (*)(Fmt*));extern	char*	fmtstrflush(Fmt*);extern	int	runefmtstrinit(Fmt*);extern	Rune*	runefmtstrflush(Fmt*);extern	int	encodefmt(Fmt*);extern	int	fmtstrcpy(Fmt*, char*);extern	int	fmtprint(Fmt*, char*, ...);extern	int	fmtvprint(Fmt*, char*, va_list);extern	void*	mallocz(ulong, int);extern	uintptr	getcallerpc(void*);extern	char*	cleanname(char*);extern	void	sysfatal(char*, ...);extern	char*	strecpy(char*, char*, char*);extern	int	tokenize(char*, char**, int);extern	int	getfields(char*, char**, int, int, char*);extern	char*	utfecpy(char*, char*, char*);extern	long	tas(long*);extern	void	quotefmtinstall(void);extern	int	dec64(uchar*, int, char*, int);extern	int	enc64(char*, int, uchar*, int);extern	int	dec32(uchar*, int, char*, int);extern	int	enc32(char*, int, uchar*, int);extern	int	enc16(char*, int, uchar*, int);void		hnputs(void *p, unsigned short v);extern	int	dofmt(Fmt*, char*);extern	double	__NaN(void);extern	int	__isNaN(double);extern	double	strtod(const char*, char**);extern	int	utfnlen(char*, long);extern	double	__Inf(int);extern	int	__isInf(double, int);extern int (*fmtdoquote)(int);

⌨️ 快捷键说明

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