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