#ifdef Plan9
extern char* strdup(char*);
extern int rint(double);
#define vsnprintf(buf, len, fmt, ap)	vsprintf(buf, fmt, ap)
#else
static void used(int, ...);
#define USED(a, etc...)		used(1, a, ## etc)
#define SET(v)			v = *&v
static void used(int x, ...)	{ SET(x); }
#endif

/* from plan9 libc.h */

#define	ARGBEGIN	for(argv++,argc--;argv[0] && argv[0][0]=='-' && argv[0][1]; argc--, argv++) {\
				char *_args, *_argt;\
				char _argc;\
				_args = &argv[0][1];\
				if(_args[0]=='-' && _args[1]==0){\
					argc--; argv++; break;\
				}\
				_argc = 0;\
				while(*_args && (_argc = *_args++))\
				switch(_argc)
#define	ARGEND		SET(_argt);USED(_argt,_argc,_args);}USED(argv,argc);
#define	ARGF()		(_argt=_args, _args="", (*_argt ? _argt : argv[1] ? (argc--, *++argv) : 0))
#define	EARGF(x)	(_argt=_args, _args="", (*_argt ? _argt : argv[1] ? (argc--, *++argv) : ((x), abort(), 0)))
#define	ARGC()		_argc

#define nelem(x)	(sizeof(x)/sizeof((x)[0]))

