xref: /inferno-os/os/boot/pc/lib.h (revision 8a8c2d742b51525f66c2210e3c8a251de10022ff)
1*8a8c2d74SCharles.Forsyth #define	offsetof(s, m)	(ulong)(&(((s*)0)->m))
2*8a8c2d74SCharles.Forsyth 
374a4d8c2SCharles.Forsyth /*
474a4d8c2SCharles.Forsyth  * functions (possibly) linked in, complete, from libc.
574a4d8c2SCharles.Forsyth  */
674a4d8c2SCharles.Forsyth 
774a4d8c2SCharles.Forsyth /*
874a4d8c2SCharles.Forsyth  * mem routines
974a4d8c2SCharles.Forsyth  */
10*8a8c2d74SCharles.Forsyth extern	void*	memccpy(void*, void*, int, ulong);
11*8a8c2d74SCharles.Forsyth extern	void*	memset(void*, int, ulong);
12*8a8c2d74SCharles.Forsyth extern	int	memcmp(void*, void*, ulong);
13*8a8c2d74SCharles.Forsyth extern	void*	memmove(void*, void*, ulong);
14*8a8c2d74SCharles.Forsyth extern	void*	memchr(void*, int, ulong);
1574a4d8c2SCharles.Forsyth 
1674a4d8c2SCharles.Forsyth /*
1774a4d8c2SCharles.Forsyth  * string routines
1874a4d8c2SCharles.Forsyth  */
1974a4d8c2SCharles.Forsyth extern	char*	strcat(char*, char*);
20*8a8c2d74SCharles.Forsyth extern	char*	strchr(char*, int);
2174a4d8c2SCharles.Forsyth extern	int	strcmp(char*, char*);
2274a4d8c2SCharles.Forsyth extern	char*	strcpy(char*, char*);
2374a4d8c2SCharles.Forsyth extern	char*	strncat(char*, char*, long);
2474a4d8c2SCharles.Forsyth extern	char*	strncpy(char*, char*, long);
2574a4d8c2SCharles.Forsyth extern	int	strncmp(char*, char*, long);
2674a4d8c2SCharles.Forsyth extern	long	strlen(char*);
2774a4d8c2SCharles.Forsyth extern	char*	strrchr(char*, char);
2874a4d8c2SCharles.Forsyth extern	char*	strstr(char*, char*);
2974a4d8c2SCharles.Forsyth 
3074a4d8c2SCharles.Forsyth 
3174a4d8c2SCharles.Forsyth /*
3274a4d8c2SCharles.Forsyth  * print routines
3374a4d8c2SCharles.Forsyth  */
3474a4d8c2SCharles.Forsyth typedef struct Fmt	Fmt;
3574a4d8c2SCharles.Forsyth typedef int (*Fmts)(Fmt*);
3674a4d8c2SCharles.Forsyth struct Fmt{
3774a4d8c2SCharles.Forsyth 	uchar	runes;			/* output buffer is runes or chars? */
3874a4d8c2SCharles.Forsyth 	void	*start;			/* of buffer */
3974a4d8c2SCharles.Forsyth 	void	*to;			/* current place in the buffer */
4074a4d8c2SCharles.Forsyth 	void	*stop;			/* end of the buffer; overwritten if flush fails */
4174a4d8c2SCharles.Forsyth 	int	(*flush)(Fmt *);	/* called when to == stop */
4274a4d8c2SCharles.Forsyth 	void	*farg;			/* to make flush a closure */
4374a4d8c2SCharles.Forsyth 	int	nfmt;			/* num chars formatted so far */
4474a4d8c2SCharles.Forsyth 	va_list	args;			/* args passed to dofmt */
4574a4d8c2SCharles.Forsyth 	int	r;			/* % format Rune */
4674a4d8c2SCharles.Forsyth 	int	width;
4774a4d8c2SCharles.Forsyth 	int	prec;
4874a4d8c2SCharles.Forsyth 	ulong	flags;
4974a4d8c2SCharles.Forsyth };
5074a4d8c2SCharles.Forsyth extern	int	print(char*, ...);
5174a4d8c2SCharles.Forsyth extern	char*	vseprint(char*, char*, char*, va_list);
5274a4d8c2SCharles.Forsyth extern	int	sprint(char*, char*, ...);
5374a4d8c2SCharles.Forsyth extern 	int	snprint(char*, int, char*, ...);
5474a4d8c2SCharles.Forsyth extern	int	fmtinstall(int, int (*)(Fmt*));
5574a4d8c2SCharles.Forsyth 
56*8a8c2d74SCharles.Forsyth #pragma varargck	argpos	addconf 1
5774a4d8c2SCharles.Forsyth #pragma	varargck	argpos	fmtprint	2
5874a4d8c2SCharles.Forsyth #pragma	varargck	argpos	print		1
5974a4d8c2SCharles.Forsyth #pragma	varargck	argpos	seprint		3
6074a4d8c2SCharles.Forsyth #pragma	varargck	argpos	snprint		3
6174a4d8c2SCharles.Forsyth #pragma	varargck	argpos	sprint		2
6274a4d8c2SCharles.Forsyth #pragma varargck	type	"H" void*
6374a4d8c2SCharles.Forsyth 
6474a4d8c2SCharles.Forsyth #pragma	varargck	type	"lld"	vlong
6574a4d8c2SCharles.Forsyth #pragma	varargck	type	"llx"	vlong
6674a4d8c2SCharles.Forsyth #pragma	varargck	type	"lld"	uvlong
6774a4d8c2SCharles.Forsyth #pragma	varargck	type	"llx"	uvlong
6874a4d8c2SCharles.Forsyth #pragma	varargck	type	"ld"	long
6974a4d8c2SCharles.Forsyth #pragma	varargck	type	"lx"	long
7074a4d8c2SCharles.Forsyth #pragma	varargck	type	"ld"	ulong
7174a4d8c2SCharles.Forsyth #pragma	varargck	type	"lx"	ulong
7274a4d8c2SCharles.Forsyth #pragma	varargck	type	"d"	int
7374a4d8c2SCharles.Forsyth #pragma	varargck	type	"x"	int
7474a4d8c2SCharles.Forsyth #pragma	varargck	type	"c"	int
7574a4d8c2SCharles.Forsyth #pragma	varargck	type	"C"	int
7674a4d8c2SCharles.Forsyth #pragma	varargck	type	"d"	uint
7774a4d8c2SCharles.Forsyth #pragma	varargck	type	"x"	uint
7874a4d8c2SCharles.Forsyth #pragma	varargck	type	"c"	uint
7974a4d8c2SCharles.Forsyth #pragma	varargck	type	"C"	uint
8074a4d8c2SCharles.Forsyth #pragma	varargck	type	"f"	double
8174a4d8c2SCharles.Forsyth #pragma	varargck	type	"e"	double
8274a4d8c2SCharles.Forsyth #pragma	varargck	type	"g"	double
8374a4d8c2SCharles.Forsyth #pragma	varargck	type	"s"	char*
8474a4d8c2SCharles.Forsyth #pragma	varargck	type	"q"	char*
8574a4d8c2SCharles.Forsyth #pragma	varargck	type	"S"	Rune*
8674a4d8c2SCharles.Forsyth #pragma	varargck	type	"Q"	Rune*
8774a4d8c2SCharles.Forsyth #pragma	varargck	type	"r"	void
8874a4d8c2SCharles.Forsyth #pragma	varargck	type	"%"	void
8974a4d8c2SCharles.Forsyth #pragma	varargck	type	"|"	int
9074a4d8c2SCharles.Forsyth #pragma	varargck	type	"p"	void*
9174a4d8c2SCharles.Forsyth #pragma varargck	type	"lux"	void*
9274a4d8c2SCharles.Forsyth #pragma	varargck	type	"E"	uchar*
9374a4d8c2SCharles.Forsyth 
9474a4d8c2SCharles.Forsyth #define PRINTSIZE	256
9574a4d8c2SCharles.Forsyth 
9674a4d8c2SCharles.Forsyth /*
9774a4d8c2SCharles.Forsyth  * one-of-a-kind
9874a4d8c2SCharles.Forsyth  */
9974a4d8c2SCharles.Forsyth extern	int	atoi(char*);
100*8a8c2d74SCharles.Forsyth extern	uintptr	getcallerpc(void*);
10174a4d8c2SCharles.Forsyth extern	long	strtol(char*, char**, int);
10274a4d8c2SCharles.Forsyth extern	ulong	strtoul(char*, char**, int);
103*8a8c2d74SCharles.Forsyth extern	uvlong	strtoull(char*, char**, int);
10474a4d8c2SCharles.Forsyth extern	long	end;
10574a4d8c2SCharles.Forsyth 
10674a4d8c2SCharles.Forsyth #define	NAMELEN	28
107