13e12c5d1SDavid du Colombier #ifndef __LIB9_H 23e12c5d1SDavid du Colombier #define __LIB9_H 3219b2ee8SDavid du Colombier #if !defined(_RESEARCH_SOURCE) && !defined(_PLAN9_SOURCE) 43e12c5d1SDavid du Colombier This header file is an extension to ANSI/POSIX 53e12c5d1SDavid du Colombier #endif 63e12c5d1SDavid du Colombier #pragma lib "/$M/lib/ape/lib9.a" 73e12c5d1SDavid du Colombier 8*31c82b6eSDavid du Colombier #include <u.h> /* ick; need Rune defined below */ 93e12c5d1SDavid du Colombier 103e12c5d1SDavid du Colombier #define MORDER 0x0003 /* mask for bits defining order of mounting */ 113e12c5d1SDavid du Colombier #define MREPL 0x0000 /* mount replaces object */ 123e12c5d1SDavid du Colombier #define MBEFORE 0x0001 /* mount goes before others in union directory */ 133e12c5d1SDavid du Colombier #define MAFTER 0x0002 /* mount goes after others in union directory */ 143e12c5d1SDavid du Colombier #define MCREATE 0x0004 /* permit creation in mounted directory */ 15219b2ee8SDavid du Colombier #define MRECOV 0x0008 /* perform recovery if mount channel is lost */ 16219b2ee8SDavid du Colombier #define MCACHE 0x0010 /* cache some data */ 173e12c5d1SDavid du Colombier #define MMASK 0x0007 /* all bits on */ 183e12c5d1SDavid du Colombier 193e12c5d1SDavid du Colombier #define FORKPG 1 203e12c5d1SDavid du Colombier #define FORKEG 2 213e12c5d1SDavid du Colombier #define FORKFD 4 223e12c5d1SDavid du Colombier 23219b2ee8SDavid du Colombier #define SG_RONLY 0040 /* read only */ 24219b2ee8SDavid du Colombier #define SG_CEXEC 0100 /* detach on exec */ 25219b2ee8SDavid du Colombier 26219b2ee8SDavid du Colombier enum 27219b2ee8SDavid du Colombier { 28219b2ee8SDavid du Colombier RFNAMEG = (1<<0), 29219b2ee8SDavid du Colombier RFENVG = (1<<1), 30219b2ee8SDavid du Colombier RFFDG = (1<<2), 31219b2ee8SDavid du Colombier RFNOTEG = (1<<3), 32219b2ee8SDavid du Colombier RFPROC = (1<<4), 33219b2ee8SDavid du Colombier RFMEM = (1<<5), 34219b2ee8SDavid du Colombier RFNOWAIT = (1<<6), 35219b2ee8SDavid du Colombier RFCNAMEG = (1<<10), 36219b2ee8SDavid du Colombier RFCENVG = (1<<11), 37219b2ee8SDavid du Colombier RFCFDG = (1<<12), 38219b2ee8SDavid du Colombier RFREND = (1<<13) 39219b2ee8SDavid du Colombier }; 40219b2ee8SDavid du Colombier 41*31c82b6eSDavid du Colombier extern char *argv0; 42*31c82b6eSDavid du Colombier #define ARGBEGIN for((argv0||(argv0=*argv)),argv++,argc--;\ 43*31c82b6eSDavid du Colombier argv[0] && argv[0][0]=='-' && argv[0][1];\ 44*31c82b6eSDavid du Colombier argc--, argv++) {\ 45*31c82b6eSDavid du Colombier char *_args, *_argt;\ 46*31c82b6eSDavid du Colombier Rune _argc;\ 47*31c82b6eSDavid du Colombier _args = &argv[0][1];\ 48*31c82b6eSDavid du Colombier if(_args[0]=='-' && _args[1]==0){\ 49*31c82b6eSDavid du Colombier argc--; argv++; break;\ 50*31c82b6eSDavid du Colombier }\ 51*31c82b6eSDavid du Colombier _argc = 0;\ 52*31c82b6eSDavid du Colombier while(*_args && (_args += chartorune(&_argc, _args)))\ 53*31c82b6eSDavid du Colombier switch(_argc) 54*31c82b6eSDavid du Colombier #define ARGEND SET(_argt);USED(_argt,_argc,_args);}USED(argv, argc); 55*31c82b6eSDavid du Colombier #define ARGF() (_argt=_args, _args="",\ 56*31c82b6eSDavid du Colombier (*_argt? _argt: argv[1]? (argc--, *++argv): 0)) 57*31c82b6eSDavid du Colombier #define EARGF(x) (_argt=_args, _args="",\ 58*31c82b6eSDavid du Colombier (*_argt? _argt: argv[1]? (argc--, *++argv): ((x), abort(), (char*)0))) 59*31c82b6eSDavid du Colombier 60*31c82b6eSDavid du Colombier #define ARGC() _argc 61*31c82b6eSDavid du Colombier 629a747e4fSDavid du Colombier extern int errstr(char*, unsigned int); 633e12c5d1SDavid du Colombier extern int bind(char*, char*, int); 649a747e4fSDavid du Colombier extern int mount(int, int, char*, int, char*); 653e12c5d1SDavid du Colombier extern int unmount(char*, char*); 663e12c5d1SDavid du Colombier extern int rfork(int); 673e12c5d1SDavid du Colombier extern int segattach(int, char*, void*, unsigned long); 683e12c5d1SDavid du Colombier extern int segbrk(void*, void*); 693e12c5d1SDavid du Colombier extern int segdetach(void*); 703e12c5d1SDavid du Colombier extern int segflush(void*, unsigned long); 713e12c5d1SDavid du Colombier extern int segfree(void*, unsigned long); 723e12c5d1SDavid du Colombier extern unsigned long rendezvous(unsigned long, unsigned long); 733e12c5d1SDavid du Colombier extern unsigned long getfcr(void); 743e12c5d1SDavid du Colombier extern unsigned long getfsr(void); 753e12c5d1SDavid du Colombier extern void setfcr(unsigned long); 763e12c5d1SDavid du Colombier extern void setfsr(unsigned long); 773e12c5d1SDavid du Colombier 783e12c5d1SDavid du Colombier #endif 79