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