xref: /plan9-contrib/sys/src/nboot/bitsy/lib.h (revision 529c1f209803c78c4f2cda11b13818a57f01c872)
1*529c1f20SDavid du Colombier /*
2*529c1f20SDavid du Colombier  * functions (possibly) linked in, complete, from libc.
3*529c1f20SDavid du Colombier  */
4*529c1f20SDavid du Colombier 
5*529c1f20SDavid du Colombier /*
6*529c1f20SDavid du Colombier  * mem routines
7*529c1f20SDavid du Colombier  */
8*529c1f20SDavid du Colombier extern	void	*memccpy(void*, void*, int, long);
9*529c1f20SDavid du Colombier extern	void	*memset(void*, int, long);
10*529c1f20SDavid du Colombier extern	int	memcmp(void*, void*, long);
11*529c1f20SDavid du Colombier extern	void	*memmove(void*, void*, long);
12*529c1f20SDavid du Colombier extern	void	*memchr(void*, int, long);
13*529c1f20SDavid du Colombier 
14*529c1f20SDavid du Colombier /*
15*529c1f20SDavid du Colombier  * string routines
16*529c1f20SDavid du Colombier  */
17*529c1f20SDavid du Colombier extern	char	*strcat(char*, char*);
18*529c1f20SDavid du Colombier extern	char	*strchr(char*, char);
19*529c1f20SDavid du Colombier extern	char	*strrchr(char*, char);
20*529c1f20SDavid du Colombier extern	int	strcmp(char*, char*);
21*529c1f20SDavid du Colombier extern	char	*strcpy(char*, char*);
22*529c1f20SDavid du Colombier extern	char	*strncat(char*, char*, long);
23*529c1f20SDavid du Colombier extern	char	*strncpy(char*, char*, long);
24*529c1f20SDavid du Colombier extern	int	strncmp(char*, char*, long);
25*529c1f20SDavid du Colombier extern	long	strlen(char*);
26*529c1f20SDavid du Colombier extern	char*	strstr(char*, char*);
27*529c1f20SDavid du Colombier extern	int	atoi(char*);
28*529c1f20SDavid du Colombier 
29*529c1f20SDavid du Colombier enum
30*529c1f20SDavid du Colombier {
31*529c1f20SDavid du Colombier 	UTFmax		= 3,	/* maximum bytes per rune */
32*529c1f20SDavid du Colombier 	Runesync	= 0x80,	/* cannot represent part of a UTF sequence */
33*529c1f20SDavid du Colombier 	Runeself	= 0x80,	/* rune and UTF sequences are the same (<) */
34*529c1f20SDavid du Colombier 	Runeerror	= 0x80,	/* decoding error in UTF */
35*529c1f20SDavid du Colombier };
36*529c1f20SDavid du Colombier 
37*529c1f20SDavid du Colombier /*
38*529c1f20SDavid du Colombier  * rune routines
39*529c1f20SDavid du Colombier  */
40*529c1f20SDavid du Colombier extern	int	runetochar(char*, Rune*);
41*529c1f20SDavid du Colombier extern	int	chartorune(Rune*, char*);
42*529c1f20SDavid du Colombier extern	char*	utfrune(char*, long);
43*529c1f20SDavid du Colombier extern	int	utflen(char*);
44*529c1f20SDavid du Colombier extern	int	runelen(long);
45*529c1f20SDavid du Colombier 
46*529c1f20SDavid du Colombier extern	int	abs(int);
47*529c1f20SDavid du Colombier 
48*529c1f20SDavid du Colombier /*
49*529c1f20SDavid du Colombier  * print routines
50*529c1f20SDavid du Colombier  */
51*529c1f20SDavid du Colombier typedef struct Cconv Fconv;
52*529c1f20SDavid du Colombier extern	char*	donprint(char*, char*, char*, void*);
53*529c1f20SDavid du Colombier extern	int	sprint(char*, char*, ...);
54*529c1f20SDavid du Colombier extern	char*	seprint(char*, char*, char*, ...);
55*529c1f20SDavid du Colombier extern	int	snprint(char*, int, char*, ...);
56*529c1f20SDavid du Colombier extern	int	print(char*, ...);
57*529c1f20SDavid du Colombier 
58*529c1f20SDavid du Colombier /*
59*529c1f20SDavid du Colombier  * one-of-a-kind
60*529c1f20SDavid du Colombier  */
61*529c1f20SDavid du Colombier extern	char*	cleanname(char*);
62*529c1f20SDavid du Colombier extern	uintptr	getcallerpc(void*);
63*529c1f20SDavid du Colombier extern	long	strtol(char*, char**, int);
64*529c1f20SDavid du Colombier extern	ulong	strtoul(char*, char**, int);
65*529c1f20SDavid du Colombier extern	vlong	strtoll(char*, char**, int);
66*529c1f20SDavid du Colombier extern	uvlong	strtoull(char*, char**, int);
67*529c1f20SDavid du Colombier extern	char	etext[];
68*529c1f20SDavid du Colombier extern	char	edata[];
69*529c1f20SDavid du Colombier extern	char	end[];
70*529c1f20SDavid du Colombier extern	int	getfields(char*, char**, int, int, char*);
71*529c1f20SDavid du Colombier 
72*529c1f20SDavid du Colombier /*
73*529c1f20SDavid du Colombier  * Syscall data structures
74*529c1f20SDavid du Colombier  */
75*529c1f20SDavid du Colombier #define	MORDER	0x0003	/* mask for bits defining order of mounting */
76*529c1f20SDavid du Colombier #define	MREPL	0x0000	/* mount replaces object */
77*529c1f20SDavid du Colombier #define	MBEFORE	0x0001	/* mount goes before others in union directory */
78*529c1f20SDavid du Colombier #define	MAFTER	0x0002	/* mount goes after others in union directory */
79*529c1f20SDavid du Colombier #define	MCREATE	0x0004	/* permit creation in mounted directory */
80*529c1f20SDavid du Colombier #define	MCACHE	0x0010	/* cache some data */
81*529c1f20SDavid du Colombier #define	MMASK	0x001F	/* all bits on */
82*529c1f20SDavid du Colombier 
83*529c1f20SDavid du Colombier #define	OREAD	0	/* open for read */
84*529c1f20SDavid du Colombier #define	OWRITE	1	/* write */
85*529c1f20SDavid du Colombier #define	ORDWR	2	/* read and write */
86*529c1f20SDavid du Colombier #define	OEXEC	3	/* execute, == read but check execute permission */
87*529c1f20SDavid du Colombier #define	OTRUNC	16	/* or'ed in (except for exec), truncate file first */
88*529c1f20SDavid du Colombier #define	OCEXEC	32	/* or'ed in, close on exec */
89*529c1f20SDavid du Colombier #define	ORCLOSE	64	/* or'ed in, remove on close */
90*529c1f20SDavid du Colombier 
91*529c1f20SDavid du Colombier #define	NCONT	0	/* continue after note */
92*529c1f20SDavid du Colombier #define	NDFLT	1	/* terminate after note */
93*529c1f20SDavid du Colombier #define	NSAVE	2	/* clear note but hold state */
94*529c1f20SDavid du Colombier #define	NRSTR	3	/* restore saved state */
95*529c1f20SDavid du Colombier 
96*529c1f20SDavid du Colombier typedef struct Qid	Qid;
97*529c1f20SDavid du Colombier typedef struct Dir	Dir;
98*529c1f20SDavid du Colombier typedef struct Waitmsg	Waitmsg;
99*529c1f20SDavid du Colombier 
100*529c1f20SDavid du Colombier #define	ERRLEN		64
101*529c1f20SDavid du Colombier #define	DIRLEN		116
102*529c1f20SDavid du Colombier #define	NAMELEN		28
103*529c1f20SDavid du Colombier 
104*529c1f20SDavid du Colombier struct Qid
105*529c1f20SDavid du Colombier {
106*529c1f20SDavid du Colombier 	ulong	path;
107*529c1f20SDavid du Colombier 	ulong	vers;
108*529c1f20SDavid du Colombier };
109*529c1f20SDavid du Colombier 
110*529c1f20SDavid du Colombier struct Dir
111*529c1f20SDavid du Colombier {
112*529c1f20SDavid du Colombier 	char	name[NAMELEN];
113*529c1f20SDavid du Colombier 	char	uid[NAMELEN];
114*529c1f20SDavid du Colombier 	char	gid[NAMELEN];
115*529c1f20SDavid du Colombier 	Qid	qid;
116*529c1f20SDavid du Colombier 	ulong	mode;
117*529c1f20SDavid du Colombier 	long	atime;
118*529c1f20SDavid du Colombier 	long	mtime;
119*529c1f20SDavid du Colombier 	vlong	length;
120*529c1f20SDavid du Colombier 	short	type;
121*529c1f20SDavid du Colombier 	short	dev;
122*529c1f20SDavid du Colombier };
123*529c1f20SDavid du Colombier 
124*529c1f20SDavid du Colombier struct Waitmsg
125*529c1f20SDavid du Colombier {
126*529c1f20SDavid du Colombier 	char	pid[12];	/* of loved one */
127*529c1f20SDavid du Colombier 	char	time[3*12];	/* of loved one and descendants */
128*529c1f20SDavid du Colombier 	char	msg[ERRLEN];
129*529c1f20SDavid du Colombier };
130*529c1f20SDavid du Colombier 
131*529c1f20SDavid du Colombier /*
132*529c1f20SDavid du Colombier  *  locks
133*529c1f20SDavid du Colombier  */
134*529c1f20SDavid du Colombier typedef
135*529c1f20SDavid du Colombier struct Lock {
136*529c1f20SDavid du Colombier 	int	val;
137*529c1f20SDavid du Colombier } Lock;
138*529c1f20SDavid du Colombier 
139*529c1f20SDavid du Colombier extern int	_tas(int*);
140*529c1f20SDavid du Colombier 
141*529c1f20SDavid du Colombier extern	void	lock(Lock*);
142*529c1f20SDavid du Colombier extern	void	unlock(Lock*);
143*529c1f20SDavid du Colombier extern	int	canlock(Lock*);
144