1 #define nil ((void*)0) 2 #define nelem(ary) (sizeof(ary) / sizeof(*ary)) 3 4 /* Types */ 5 #undef uchar 6 #undef ushort 7 #undef uint 8 #undef ulong 9 #undef uvlong 10 #undef vlong 11 #ifndef KENC 12 # define uchar _wmiiuchar 13 # define ushort _wmiiushort 14 # define uint _wmiiuint 15 # define ulong _wmiiulong 16 # define vlong _wmiivlong 17 # define uvlong _wmiiuvlong 18 #endif 19 typedef unsigned char uchar; 20 typedef unsigned short ushort; 21 typedef unsigned int uint; 22 typedef unsigned long ulong; 23 typedef unsigned long long uvlong; 24 typedef long long vlong; 25 26 /* util.c */ 27 uint tokenize(char *res[], uint reslen, char *str, char delim); 28 char *estrdup(const char *str); 29 void *erealloc(void *ptr, uint size); 30 void *emallocz(uint size); 31 void *emalloc(uint size); 32 void fatal(const char *fmt, ...); 33 int max(int a, int b); 34 int min(int a, int b); 35 char *str_nil(char *s); 36 int utflcpy(char *to, const char *from, int l); 37 uint wmii_strlcat(char *dst, const char *src, unsigned int siz); 38 39 extern char *argv0; 40 extern void *__p; 41 extern int __i; 42 #undef ARGBEGIN 43 #undef ARGEND 44 #undef ARGF 45 #undef EARGF 46 #define ARGBEGIN \ 47 int _argi=0, _argtmp=0, _inargv=0; char *_argv=nil; \ 48 if(!argv0) argv0=ARGF(); \ 49 _inargv=1; USED(_inargv); \ 50 while(argc && argv[0][0] == '-') { \ 51 _argi=1; _argv=*argv++; argc--; \ 52 while(_argv[_argi]) switch(_argv[_argi++]) 53 #define ARGEND }_inargv=0;USED(_argtmp);USED(_argv);USED(_argi);USED(_inargv) 54 55 #define ARGF() ((_inargv && _argv[_argi]) ? \ 56 (_argtmp=_argi, _argi=strlen(_argv), __i=_argi,_argv+_argtmp) \ 57 : ((argc > 0) ? (--argc, ++argv, __i=argc, __p=argv, *(argv-1)) : ((char*)0))) 58 59 #define EARGF(f) ((_inargv && _argv[_argi]) ? \ 60 (_argtmp=_argi, _argi=strlen(_argv), __i=_argi, _argv+_argtmp) \ 61 : ((argc > 0) ? (--argc, ++argv, __i=argc, __p=argv, *(argv-1)) : ((f), (char*)0))) 62 63 #ifndef KENC 64 # undef USED 65 # undef SET 66 # define USED(x) if(x){}else 67 # define SET(x) ((x)=0) 68 #endif 69 70