xref: /plan9-contrib/sys/src/9/port/lib.h (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
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	int	strcmp(char*, char*);
20 extern	char	*strcpy(char*, char*);
21 extern	char	*strncat(char*, char*, long);
22 extern	char	*strncpy(char*, char*, long);
23 extern	int	strncmp(char*, char*, long);
24 extern	long	strlen(char*);
25 extern	int	atoi(char*);
26 
27 enum
28 {
29 	UTFmax		= 3,		/* maximum bytes per rune */
30 	Runesync	= 0x80,		/* cannot represent part of a UTF sequence (<) */
31 	Runeself	= 0x80,		/* rune and UTF sequences are the same (<) */
32 	Runeerror	= 0x80,		/* decoding error in UTF */
33 };
34 
35 /*
36  * rune routines
37  */
38 extern	int	runetochar(char*, Rune*);
39 extern	int	chartorune(Rune*, char*);
40 extern	char*	utfrune(char*, long);
41 extern	int	utflen(char*);
42 
43 extern	int	abs(int);
44 
45 /*
46  * print routines
47  */
48 typedef
49 struct
50 {
51 	char*	out;		/* pointer to next output */
52 	char*	eout;		/* pointer to end */
53 	int	f1;
54 	int	f2;
55 	int	f3;
56 	int	chr;
57 } Fconv;
58 extern	void	strconv(char*, Fconv*);
59 extern	int	numbconv(void*, Fconv*);
60 extern	char	*doprint(char*, char*, char*, void*);
61 extern	int	fmtinstall(int, int (*)(void*, Fconv*));
62 extern	int	sprint(char*, char*, ...);
63 extern	int	snprint(char*, int, char*, ...);
64 extern	int	print(char*, ...);
65 
66 /*
67  * one-of-a-kind
68  */
69 extern	long	strtol(char*, char**, int);
70 extern	ulong	strtoul(char*, char**, int);
71 extern	char	etext[];
72 extern	char	edata[];
73 extern	char	end[];
74 /*
75  * Syscall data structures
76  */
77 
78 #define	MORDER	0x0003	/* mask for bits defining order of mounting */
79 #define	MREPL	0x0000	/* mount replaces object */
80 #define	MBEFORE	0x0001	/* mount goes before others in union directory */
81 #define	MAFTER	0x0002	/* mount goes after others in union directory */
82 #define	MCREATE	0x0004	/* permit creation in mounted directory */
83 #define	MMASK	0x0007	/* all bits on */
84 
85 #define	OREAD	0	/* open for read */
86 #define	OWRITE	1	/* write */
87 #define	ORDWR	2	/* read and write */
88 #define	OEXEC	3	/* execute, == read but check execute permission */
89 #define	OTRUNC	16	/* or'ed in (except for exec), truncate file first */
90 #define	OCEXEC	32	/* or'ed in, close on exec */
91 #define	ORCLOSE	64	/* or'ed in, remove on close */
92 
93 #define	NCONT	0	/* continue after note */
94 #define	NDFLT	1	/* terminate after note */
95 #define	NSAVE	2	/* clear note but hold state */
96 #define	NRSTR	3	/* restore saved state */
97 
98 typedef struct Qid	Qid;
99 typedef struct Dir	Dir;
100 typedef struct Waitmsg	Waitmsg;
101 
102 #define	ERRLEN		64
103 #define	DIRLEN		116
104 #define	NAMELEN		28
105 
106 struct Qid
107 {
108 	ulong	path;
109 	ulong	vers;
110 };
111 
112 struct Dir
113 {
114 	char	name[NAMELEN];
115 	char	uid[NAMELEN];
116 	char	gid[NAMELEN];
117 	Qid	qid;
118 	ulong	mode;
119 	long	atime;
120 	long	mtime;
121 	Length;
122 	short	type;
123 	short	dev;
124 };
125 
126 struct Waitmsg
127 {
128 	char	pid[12];	/* of loved one */
129 	char	time[3*12];	/* of loved one and descendants */
130 	char	msg[ERRLEN];
131 };
132