xref: /plan9-contrib/sys/src/cmd/rc/unix.h (revision c6df144405f586b73992827d584728dc975dff14)
1*c6df1444SDavid du Colombier /* mostly plan 9 compatibility */
2*c6df1444SDavid du Colombier 
3bad30d5dSDavid du Colombier #undef _BSD_EXTENSION		/* avoid multiple def'n if predefined */
4bad30d5dSDavid du Colombier #undef _PLAN9_SOURCE
5bad30d5dSDavid du Colombier #undef _POSIX_SOURCE
6bad30d5dSDavid du Colombier #undef _RESEARCH_SOURCE
7bad30d5dSDavid du Colombier #undef _SUSV2_SOURCE
8bad30d5dSDavid du Colombier 
9bad30d5dSDavid du Colombier #define _BSD_EXTENSION
10bad30d5dSDavid du Colombier #define _PLAN9_SOURCE
11bad30d5dSDavid du Colombier #define _POSIX_SOURCE
12bad30d5dSDavid du Colombier #define _RESEARCH_SOURCE
13bad30d5dSDavid du Colombier #define _SUSV2_SOURCE
14bad30d5dSDavid du Colombier 
15bad30d5dSDavid du Colombier #include <stdlib.h>
16bad30d5dSDavid du Colombier #include <stdarg.h>
17bad30d5dSDavid du Colombier #include <string.h>
18bad30d5dSDavid du Colombier #include <unistd.h>
19bad30d5dSDavid du Colombier #include <fcntl.h>
20bad30d5dSDavid du Colombier #include <signal.h>
21bad30d5dSDavid du Colombier #include <inttypes.h>
22bad30d5dSDavid du Colombier 
23bad30d5dSDavid du Colombier #ifndef NSIG
24bad30d5dSDavid du Colombier #define NSIG 32
25bad30d5dSDavid du Colombier #endif
26bad30d5dSDavid du Colombier 
27bad30d5dSDavid du Colombier #define RFPROC 1
28bad30d5dSDavid du Colombier #define RFFDG 1
29bad30d5dSDavid du Colombier #define RFNOTEG 1
30bad30d5dSDavid du Colombier 
31*c6df1444SDavid du Colombier #define OREAD	O_RDONLY
32*c6df1444SDavid du Colombier #define OWRITE	O_WRONLY
33*c6df1444SDavid du Colombier #define ORDWR	O_RDWR
34*c6df1444SDavid du Colombier #define OCEXEC	0
35*c6df1444SDavid du Colombier 
36*c6df1444SDavid du Colombier #define ERRMAX 128
37*c6df1444SDavid du Colombier 
38bad30d5dSDavid du Colombier #define uintptr uintptr_t
39*c6df1444SDavid du Colombier #define nil ((void*)0)
40*c6df1444SDavid du Colombier 
41*c6df1444SDavid du Colombier #define assert(cond)
42*c6df1444SDavid du Colombier #define seek lseek
43*c6df1444SDavid du Colombier #define print printf
44*c6df1444SDavid du Colombier #define fprint fprintf
45*c6df1444SDavid du Colombier #define snprint snprintf
46bad30d5dSDavid du Colombier 
47bad30d5dSDavid du Colombier char *strdup(const char *);
48*c6df1444SDavid du Colombier void unixclsexec(int);
49bad30d5dSDavid du Colombier 
50bad30d5dSDavid du Colombier /* in case uchar, etc. are built-in types */
51bad30d5dSDavid du Colombier #define uchar	_fmtuchar
52bad30d5dSDavid du Colombier #define ushort	_fmtushort
53bad30d5dSDavid du Colombier #define uint	_fmtuint
54bad30d5dSDavid du Colombier #define ulong	_fmtulong
55bad30d5dSDavid du Colombier #define vlong	_fmtvlong
56bad30d5dSDavid du Colombier #define uvlong	_fmtuvlong
57bad30d5dSDavid du Colombier 
58bad30d5dSDavid du Colombier typedef unsigned char		uchar;
59bad30d5dSDavid du Colombier typedef unsigned short		ushort;
60bad30d5dSDavid du Colombier typedef unsigned int		uint;
61bad30d5dSDavid du Colombier typedef unsigned long		ulong;
62bad30d5dSDavid du Colombier typedef unsigned long long	uvlong;
63bad30d5dSDavid du Colombier 
64*c6df1444SDavid du Colombier typedef ulong Rune;
65*c6df1444SDavid du Colombier 
66*c6df1444SDavid du Colombier enum
67*c6df1444SDavid du Colombier {
68*c6df1444SDavid du Colombier 	UTFmax		= 4,		/* maximum bytes per rune */
69*c6df1444SDavid du Colombier 	Runesync	= 0x80,		/* cannot represent part of a UTF sequence (<) */
70*c6df1444SDavid du Colombier 	Runeself	= 0x80,		/* rune and UTF sequences are the same (<) */
71*c6df1444SDavid du Colombier 	Runeerror	= 0xFFFD,	/* decoding error in UTF */
72*c6df1444SDavid du Colombier 	Runemax		= 0x10FFFF,	/* 21-bit rune */
73*c6df1444SDavid du Colombier 	Runemask	= 0x1FFFFF,	/* bits used by runes (see grep) */
74*c6df1444SDavid du Colombier };
75*c6df1444SDavid du Colombier 
76*c6df1444SDavid du Colombier /*
77*c6df1444SDavid du Colombier  * rune routines
78*c6df1444SDavid du Colombier  */
79*c6df1444SDavid du Colombier extern	int	runetochar(char*, Rune*);
80*c6df1444SDavid du Colombier extern	int	chartorune(Rune*, char*);
81*c6df1444SDavid du Colombier extern	int	runelen(long);
82*c6df1444SDavid du Colombier extern	int	runenlen(Rune*, int);
83*c6df1444SDavid du Colombier extern	int	fullrune(char*, int);
84*c6df1444SDavid du Colombier extern	int	utflen(char*);
85*c6df1444SDavid du Colombier extern	int	utfnlen(char*, long);
86*c6df1444SDavid du Colombier extern	char*	utfrune(char*, long);
87*c6df1444SDavid du Colombier extern	char*	utfrrune(char*, long);
88*c6df1444SDavid du Colombier extern	char*	utfutf(char*, char*);
89*c6df1444SDavid du Colombier extern	char*	utfecpy(char*, char*, char*);
90*c6df1444SDavid du Colombier 
91*c6df1444SDavid du Colombier extern char *argv0;
92*c6df1444SDavid du Colombier #define	ARGBEGIN	for((argv0||(argv0=*argv)),argv++,argc--;\
93*c6df1444SDavid du Colombier 			    argv[0] && argv[0][0]=='-' && argv[0][1];\
94*c6df1444SDavid du Colombier 			    argc--, argv++) {\
95*c6df1444SDavid du Colombier 				char *_args, *_argt;\
96*c6df1444SDavid du Colombier 				Rune _argc;\
97*c6df1444SDavid du Colombier 				_args = &argv[0][1];\
98*c6df1444SDavid du Colombier 				if(_args[0]=='-' && _args[1]==0){\
99*c6df1444SDavid du Colombier 					argc--; argv++; break;\
100*c6df1444SDavid du Colombier 				}\
101*c6df1444SDavid du Colombier 				_argc = 0;\
102*c6df1444SDavid du Colombier 				while(*_args && (_args += chartorune(&_argc, _args)))\
103*c6df1444SDavid du Colombier 				switch(_argc)
104*c6df1444SDavid du Colombier #define	ARGEND		SET(_argt);USED(_argt,_argc,_args);}USED(argv, argc);
105*c6df1444SDavid du Colombier #define	ARGF()		(_argt=_args, _args="",\
106*c6df1444SDavid du Colombier 				(*_argt? _argt: argv[1]? (argc--, *++argv): 0))
107*c6df1444SDavid du Colombier #define	EARGF(x)	(_argt=_args, _args="",\
108*c6df1444SDavid du Colombier 				(*_argt? _argt: argv[1]? (argc--, *++argv): ((x), abort(), (char*)0)))
109*c6df1444SDavid du Colombier 
110*c6df1444SDavid du Colombier #define	ARGC()		_argc
111*c6df1444SDavid du Colombier 
112*c6df1444SDavid du Colombier #define	nelem(x)	(sizeof(x)/sizeof((x)[0]))
113