xref: /inferno-os/os/boot/pc/lib.h (revision 8a8c2d742b51525f66c2210e3c8a251de10022ff)
1 #define	offsetof(s, m)	(ulong)(&(((s*)0)->m))
2 
3 /*
4  * functions (possibly) linked in, complete, from libc.
5  */
6 
7 /*
8  * mem routines
9  */
10 extern	void*	memccpy(void*, void*, int, ulong);
11 extern	void*	memset(void*, int, ulong);
12 extern	int	memcmp(void*, void*, ulong);
13 extern	void*	memmove(void*, void*, ulong);
14 extern	void*	memchr(void*, int, ulong);
15 
16 /*
17  * string routines
18  */
19 extern	char*	strcat(char*, char*);
20 extern	char*	strchr(char*, int);
21 extern	int	strcmp(char*, char*);
22 extern	char*	strcpy(char*, char*);
23 extern	char*	strncat(char*, char*, long);
24 extern	char*	strncpy(char*, char*, long);
25 extern	int	strncmp(char*, char*, long);
26 extern	long	strlen(char*);
27 extern	char*	strrchr(char*, char);
28 extern	char*	strstr(char*, char*);
29 
30 
31 /*
32  * print routines
33  */
34 typedef struct Fmt	Fmt;
35 typedef int (*Fmts)(Fmt*);
36 struct Fmt{
37 	uchar	runes;			/* output buffer is runes or chars? */
38 	void	*start;			/* of buffer */
39 	void	*to;			/* current place in the buffer */
40 	void	*stop;			/* end of the buffer; overwritten if flush fails */
41 	int	(*flush)(Fmt *);	/* called when to == stop */
42 	void	*farg;			/* to make flush a closure */
43 	int	nfmt;			/* num chars formatted so far */
44 	va_list	args;			/* args passed to dofmt */
45 	int	r;			/* % format Rune */
46 	int	width;
47 	int	prec;
48 	ulong	flags;
49 };
50 extern	int	print(char*, ...);
51 extern	char*	vseprint(char*, char*, char*, va_list);
52 extern	int	sprint(char*, char*, ...);
53 extern 	int	snprint(char*, int, char*, ...);
54 extern	int	fmtinstall(int, int (*)(Fmt*));
55 
56 #pragma varargck	argpos	addconf 1
57 #pragma	varargck	argpos	fmtprint	2
58 #pragma	varargck	argpos	print		1
59 #pragma	varargck	argpos	seprint		3
60 #pragma	varargck	argpos	snprint		3
61 #pragma	varargck	argpos	sprint		2
62 #pragma varargck	type	"H" void*
63 
64 #pragma	varargck	type	"lld"	vlong
65 #pragma	varargck	type	"llx"	vlong
66 #pragma	varargck	type	"lld"	uvlong
67 #pragma	varargck	type	"llx"	uvlong
68 #pragma	varargck	type	"ld"	long
69 #pragma	varargck	type	"lx"	long
70 #pragma	varargck	type	"ld"	ulong
71 #pragma	varargck	type	"lx"	ulong
72 #pragma	varargck	type	"d"	int
73 #pragma	varargck	type	"x"	int
74 #pragma	varargck	type	"c"	int
75 #pragma	varargck	type	"C"	int
76 #pragma	varargck	type	"d"	uint
77 #pragma	varargck	type	"x"	uint
78 #pragma	varargck	type	"c"	uint
79 #pragma	varargck	type	"C"	uint
80 #pragma	varargck	type	"f"	double
81 #pragma	varargck	type	"e"	double
82 #pragma	varargck	type	"g"	double
83 #pragma	varargck	type	"s"	char*
84 #pragma	varargck	type	"q"	char*
85 #pragma	varargck	type	"S"	Rune*
86 #pragma	varargck	type	"Q"	Rune*
87 #pragma	varargck	type	"r"	void
88 #pragma	varargck	type	"%"	void
89 #pragma	varargck	type	"|"	int
90 #pragma	varargck	type	"p"	void*
91 #pragma varargck	type	"lux"	void*
92 #pragma	varargck	type	"E"	uchar*
93 
94 #define PRINTSIZE	256
95 
96 /*
97  * one-of-a-kind
98  */
99 extern	int	atoi(char*);
100 extern	uintptr	getcallerpc(void*);
101 extern	long	strtol(char*, char**, int);
102 extern	ulong	strtoul(char*, char**, int);
103 extern	uvlong	strtoull(char*, char**, int);
104 extern	long	end;
105 
106 #define	NAMELEN	28
107