xref: /plan9-contrib/sys/src/boot/vt5/libc.h (revision 98a68993d685eb89080b5d73dba0a8f0a226848c)
1*98a68993SDavid du Colombier /*
2*98a68993SDavid du Colombier  * functions (possibly) linked in, complete, from libc.
3*98a68993SDavid du Colombier  */
4*98a68993SDavid du Colombier #define nelem(x)	(sizeof(x)/sizeof((x)[0]))
5*98a68993SDavid du Colombier #define offsetof(s, m)	(ulong)(&(((s*)0)->m))
6*98a68993SDavid du Colombier #define assert(x)	if(x){}else _assert("x")
7*98a68993SDavid du Colombier 
8*98a68993SDavid du Colombier /*
9*98a68993SDavid du Colombier  * mem routines
10*98a68993SDavid du Colombier  */
11*98a68993SDavid du Colombier extern void* memset(void*, int, ulong);
12*98a68993SDavid du Colombier extern int memcmp(void*, void*, ulong);
13*98a68993SDavid du Colombier extern void* memmove(void*, void*, ulong);
14*98a68993SDavid du Colombier 
15*98a68993SDavid du Colombier /*
16*98a68993SDavid du Colombier  * string routines
17*98a68993SDavid du Colombier  */
18*98a68993SDavid du Colombier extern int cistrcmp(char *, char *);
19*98a68993SDavid du Colombier extern int cistrncmp(char *, char *, int);
20*98a68993SDavid du Colombier extern char *strchr(char *, int);
21*98a68993SDavid du Colombier extern int strcmp(char *, char *);
22*98a68993SDavid du Colombier extern char* strecpy(char*, char*, char*);
23*98a68993SDavid du Colombier extern long strlen(char*);
24*98a68993SDavid du Colombier extern int strncmp(char *, char *, int);
25*98a68993SDavid du Colombier extern char* strncpy(char*, char*, long);
26*98a68993SDavid du Colombier extern char* strstr(char *, char *);
27*98a68993SDavid du Colombier extern int tokenize(char*, char**, int);
28*98a68993SDavid du Colombier 
29*98a68993SDavid du Colombier /*
30*98a68993SDavid du Colombier  * malloc
31*98a68993SDavid du Colombier  */
32*98a68993SDavid du Colombier extern void free(void*);
33*98a68993SDavid du Colombier extern void* malloc(ulong);
34*98a68993SDavid du Colombier extern void* mallocalign(ulong, ulong, long, ulong);
35*98a68993SDavid du Colombier extern int mallocinit(void*, ulong);
36*98a68993SDavid du Colombier 
37*98a68993SDavid du Colombier /*
38*98a68993SDavid du Colombier  * print routines
39*98a68993SDavid du Colombier  */
40*98a68993SDavid du Colombier typedef struct Fmt Fmt;
41*98a68993SDavid du Colombier struct Fmt {
42*98a68993SDavid du Colombier 	uchar	runes;			/* output buffer is runes or chars? */
43*98a68993SDavid du Colombier 	void*	start;			/* of buffer */
44*98a68993SDavid du Colombier 	void*	to;			/* current place in the buffer */
45*98a68993SDavid du Colombier 	void*	stop;			/* end of the buffer; overwritten if flush fails */
46*98a68993SDavid du Colombier 	int	(*flush)(Fmt*);		/* called when to == stop */
47*98a68993SDavid du Colombier 	void*	farg;			/* to make flush a closure */
48*98a68993SDavid du Colombier 	int	nfmt;			/* num chars formatted so far */
49*98a68993SDavid du Colombier 	va_list	args;			/* args passed to dofmt */
50*98a68993SDavid du Colombier 	int	r;			/* % format Rune */
51*98a68993SDavid du Colombier 	int	width;
52*98a68993SDavid du Colombier 	int	prec;
53*98a68993SDavid du Colombier 	ulong	flags;
54*98a68993SDavid du Colombier };
55*98a68993SDavid du Colombier 
56*98a68993SDavid du Colombier extern int print(char*, ...);
57*98a68993SDavid du Colombier extern char* seprint(char*, char*, char*, ...);
58*98a68993SDavid du Colombier extern char* vseprint(char*, char*, char*, va_list);
59*98a68993SDavid du Colombier 
60*98a68993SDavid du Colombier #pragma	varargck	argpos	print		1
61*98a68993SDavid du Colombier #pragma	varargck	argpos	seprint		3
62*98a68993SDavid du Colombier 
63*98a68993SDavid du Colombier #pragma	varargck	type	"lld"	vlong
64*98a68993SDavid du Colombier #pragma	varargck	type	"llx"	vlong
65*98a68993SDavid du Colombier #pragma	varargck	type	"lld"	uvlong
66*98a68993SDavid du Colombier #pragma	varargck	type	"llx"	uvlong
67*98a68993SDavid du Colombier #pragma	varargck	type	"ld"	long
68*98a68993SDavid du Colombier #pragma	varargck	type	"lx"	long
69*98a68993SDavid du Colombier #pragma	varargck	type	"ld"	ulong
70*98a68993SDavid du Colombier #pragma	varargck	type	"lx"	ulong
71*98a68993SDavid du Colombier #pragma	varargck	type	"d"	int
72*98a68993SDavid du Colombier #pragma	varargck	type	"x"	int
73*98a68993SDavid du Colombier #pragma	varargck	type	"c"	int
74*98a68993SDavid du Colombier #pragma	varargck	type	"C"	int
75*98a68993SDavid du Colombier #pragma	varargck	type	"d"	uint
76*98a68993SDavid du Colombier #pragma	varargck	type	"x"	uint
77*98a68993SDavid du Colombier #pragma	varargck	type	"c"	uint
78*98a68993SDavid du Colombier #pragma	varargck	type	"C"	uint
79*98a68993SDavid du Colombier #pragma	varargck	type	"s"	char*
80*98a68993SDavid du Colombier #pragma	varargck	type	"q"	char*
81*98a68993SDavid du Colombier #pragma	varargck	type	"S"	Rune*
82*98a68993SDavid du Colombier #pragma	varargck	type	"%"	void
83*98a68993SDavid du Colombier #pragma	varargck	type	"p"	uintptr
84*98a68993SDavid du Colombier #pragma	varargck	type	"p"	void*
85*98a68993SDavid du Colombier #pragma	varargck	flag	','
86*98a68993SDavid du Colombier #pragma	varargck	type	"E"	uchar*	/* eipfmt */
87*98a68993SDavid du Colombier #pragma	varargck	type	"V"	uchar*	/* eipfmt */
88*98a68993SDavid du Colombier 
89*98a68993SDavid du Colombier extern int fmtinstall(int, int (*)(Fmt*));
90*98a68993SDavid du Colombier extern int dofmt(Fmt*, char*);
91*98a68993SDavid du Colombier 
92*98a68993SDavid du Colombier /*
93*98a68993SDavid du Colombier  * one-of-a-kind
94*98a68993SDavid du Colombier  */
95*98a68993SDavid du Colombier extern void _assert(char*);
96*98a68993SDavid du Colombier extern uintptr getcallerpc(void*);
97*98a68993SDavid du Colombier extern long strtol(char*, char**, int);
98*98a68993SDavid du Colombier extern ulong strtoul(char*, char**, int);
99*98a68993SDavid du Colombier extern	void	longjmp(jmp_buf, int);
100*98a68993SDavid du Colombier extern	int	setjmp(jmp_buf);
101*98a68993SDavid du Colombier 
102*98a68993SDavid du Colombier extern char etext[], edata[], end[];
103