13e12c5d1SDavid du Colombier typedef 23e12c5d1SDavid du Colombier struct Waitmsg 33e12c5d1SDavid du Colombier { 49a747e4fSDavid du Colombier int pid; /* of loved one */ 59a747e4fSDavid du Colombier unsigned long time[3]; /* of loved one & descendants */ 69a747e4fSDavid du Colombier char *msg; 73e12c5d1SDavid du Colombier } Waitmsg; 83e12c5d1SDavid du Colombier 99a747e4fSDavid du Colombier #define STATMAX 65535U /* max length of machine-independent stat structure */ 109a747e4fSDavid du Colombier #define DIRMAX (sizeof(Dir)+STATMAX) /* max length of Dir structure */ 119a747e4fSDavid du Colombier #define ERRMAX 128 /* max length of error string */ 129a747e4fSDavid du Colombier 133e12c5d1SDavid du Colombier #define MORDER 0x0003 /* mask for bits defining order of mounting */ 143e12c5d1SDavid du Colombier #define MREPL 0x0000 /* mount replaces object */ 153e12c5d1SDavid du Colombier #define MBEFORE 0x0001 /* mount goes before others in union directory */ 163e12c5d1SDavid du Colombier #define MAFTER 0x0002 /* mount goes after others in union directory */ 173e12c5d1SDavid du Colombier #define MCREATE 0x0004 /* permit creation in mounted directory */ 189a747e4fSDavid du Colombier #define MCACHE 0x0010 /* cache some data */ 193e12c5d1SDavid du Colombier #define MMASK 0x0007 /* all bits on */ 203e12c5d1SDavid du Colombier 213e12c5d1SDavid du Colombier #define OREAD 0 /* open for read */ 223e12c5d1SDavid du Colombier #define OWRITE 1 /* write */ 233e12c5d1SDavid du Colombier #define ORDWR 2 /* read and write */ 243e12c5d1SDavid du Colombier #define OEXEC 3 /* execute, == read but check execute permission */ 253e12c5d1SDavid du Colombier #define OTRUNC 16 /* or'ed in (except for exec), truncate file first */ 263e12c5d1SDavid du Colombier #define OCEXEC 32 /* or'ed in, close on exec */ 273e12c5d1SDavid du Colombier #define ORCLOSE 64 /* or'ed in, remove on close */ 289a747e4fSDavid du Colombier #define OEXCL 0x1000 /* or'ed in, exclusive use (create only) */ 299a747e4fSDavid du Colombier 309a747e4fSDavid du Colombier #define AEXIST 0 /* accessible: exists */ 319a747e4fSDavid du Colombier #define AEXEC 1 /* execute access */ 329a747e4fSDavid du Colombier #define AWRITE 2 /* write access */ 339a747e4fSDavid du Colombier #define AREAD 4 /* read access */ 349a747e4fSDavid du Colombier 359a747e4fSDavid du Colombier /* Segattch */ 369a747e4fSDavid du Colombier #define SG_RONLY 0040 /* read only */ 379a747e4fSDavid du Colombier #define SG_CEXEC 0100 /* detach on exec */ 383e12c5d1SDavid du Colombier 393e12c5d1SDavid du Colombier #define NCONT 0 /* continue after note */ 403e12c5d1SDavid du Colombier #define NDFLT 1 /* terminate after note */ 419a747e4fSDavid du Colombier #define NSAVE 2 /* clear note but hold state */ 429a747e4fSDavid du Colombier #define NRSTR 3 /* restore saved state */ 433e12c5d1SDavid du Colombier 449a747e4fSDavid du Colombier /* bits in Qid.type */ 459a747e4fSDavid du Colombier #define QTDIR 0x80 /* type bit for directories */ 469a747e4fSDavid du Colombier #define QTAPPEND 0x40 /* type bit for append only files */ 479a747e4fSDavid du Colombier #define QTEXCL 0x20 /* type bit for exclusive use files */ 489a747e4fSDavid du Colombier #define QTMOUNT 0x10 /* type bit for mounted channel */ 499a747e4fSDavid du Colombier #define QTFILE 0x00 /* plain file */ 503e12c5d1SDavid du Colombier 519a747e4fSDavid du Colombier /* bits in Dir.mode */ 529a747e4fSDavid du Colombier #define DMDIR 0x80000000 /* mode bit for directories */ 539a747e4fSDavid du Colombier #define DMAPPEND 0x40000000 /* mode bit for append only files */ 549a747e4fSDavid du Colombier #define DMEXCL 0x20000000 /* mode bit for exclusive use files */ 559a747e4fSDavid du Colombier #define DMMOUNT 0x10000000 /* mode bit for mounted channel */ 569a747e4fSDavid du Colombier #define DMREAD 0x4 /* mode bit for read permission */ 579a747e4fSDavid du Colombier #define DMWRITE 0x2 /* mode bit for write permission */ 589a747e4fSDavid du Colombier #define DMEXEC 0x1 /* mode bit for execute permission */ 593e12c5d1SDavid du Colombier 609a747e4fSDavid du Colombier /* rfork */ 619a747e4fSDavid du Colombier enum 629a747e4fSDavid du Colombier { 639a747e4fSDavid du Colombier RFNAMEG = (1<<0), 649a747e4fSDavid du Colombier RFENVG = (1<<1), 659a747e4fSDavid du Colombier RFFDG = (1<<2), 669a747e4fSDavid du Colombier RFNOTEG = (1<<3), 679a747e4fSDavid du Colombier RFPROC = (1<<4), 689a747e4fSDavid du Colombier RFMEM = (1<<5), 699a747e4fSDavid du Colombier RFNOWAIT = (1<<6), 709a747e4fSDavid du Colombier RFCNAMEG = (1<<10), 719a747e4fSDavid du Colombier RFCENVG = (1<<11), 729a747e4fSDavid du Colombier RFCFDG = (1<<12), 739a747e4fSDavid du Colombier RFREND = (1<<13), 749a747e4fSDavid du Colombier RFNOMNT = (1<<14) 759a747e4fSDavid du Colombier }; 769a747e4fSDavid du Colombier 779a747e4fSDavid du Colombier extern int _AWAIT(char*, int); 783e12c5d1SDavid du Colombier extern int _ALARM(unsigned long); 797dd7cddfSDavid du Colombier extern int _BIND(const char*, const char*, int); 807dd7cddfSDavid du Colombier extern int _CHDIR(const char*); 813e12c5d1SDavid du Colombier extern int _CLOSE(int); 823e12c5d1SDavid du Colombier extern int _CREATE(char*, int, unsigned long); 833e12c5d1SDavid du Colombier extern int _DUP(int, int); 849a747e4fSDavid du Colombier extern int _ERRSTR(char*, unsigned int); 853e12c5d1SDavid du Colombier extern int _EXEC(char*, char*[]); 863e12c5d1SDavid du Colombier extern void _EXITS(char *); 877dd7cddfSDavid du Colombier extern int _FD2PATH(int, char*, int); 889a747e4fSDavid du Colombier extern int _FAUTH(int, char*); 899a747e4fSDavid du Colombier extern int _FSESSION(int, char*, int); 909a747e4fSDavid du Colombier extern int _FSTAT(int, unsigned char*, int); 919a747e4fSDavid du Colombier extern int _FWSTAT(int, unsigned char*, int); 929a747e4fSDavid du Colombier extern int _MOUNT(int, int, const char*, int, const char*); 933e12c5d1SDavid du Colombier extern int _NOTED(int); 943e12c5d1SDavid du Colombier extern int _NOTIFY(int(*)(void*, char*)); 957dd7cddfSDavid du Colombier extern int _OPEN(const char*, int); 963e12c5d1SDavid du Colombier extern int _PIPE(int*); 979a747e4fSDavid du Colombier extern long _PREAD(int, void*, long, long long); 989a747e4fSDavid du Colombier extern long _PWRITE(int, void*, long, long long); 993e12c5d1SDavid du Colombier extern long _READ(int, void*, long); 1007dd7cddfSDavid du Colombier extern int _REMOVE(const char*); 1013e12c5d1SDavid du Colombier extern int _RENDEZVOUS(unsigned long, unsigned long); 1023e12c5d1SDavid du Colombier extern int _RFORK(int); 1033e12c5d1SDavid du Colombier extern int _SEGATTACH(int, char*, void*, unsigned long); 1043e12c5d1SDavid du Colombier extern int _SEGBRK(void*, void*); 1053e12c5d1SDavid du Colombier extern int _SEGDETACH(void*); 1063e12c5d1SDavid du Colombier extern int _SEGFLUSH(void*, unsigned long); 1073e12c5d1SDavid du Colombier extern int _SEGFREE(void*, unsigned long); 1087dd7cddfSDavid du Colombier extern long long _SEEK(int, long long, int); 109*51f48f69SDavid du Colombier extern int _SEMACQUIRE(long*, int); 110*51f48f69SDavid du Colombier extern long _SEMRELEASE(long*, long); 1113e12c5d1SDavid du Colombier extern int _SLEEP(long); 1129a747e4fSDavid du Colombier extern int _STAT(const char*, unsigned char*, int); 1139a747e4fSDavid du Colombier extern Waitmsg* _WAIT(void); 114*51f48f69SDavid du Colombier extern int _TSEMACQUIRE(long*, unsigned long); 1157dd7cddfSDavid du Colombier extern long _WRITE(int, const void*, long); 1169a747e4fSDavid du Colombier extern int _WSTAT(const char*, unsigned char*, int); 117bd389b36SDavid du Colombier 118bd389b36SDavid du Colombier extern int __open(char *, int, ...); 119bd389b36SDavid du Colombier extern int __access(char *, int); 120bd389b36SDavid du Colombier extern int __chdir(char *); 121bd389b36SDavid du Colombier extern int __creat(char *, int); 122bd389b36SDavid du Colombier extern int __link(char *, int); 123bd389b36SDavid du Colombier extern int __stat(char *, struct stat *); 124bd389b36SDavid du Colombier extern int __unlink(char *); 125*51f48f69SDavid du Colombier 126*51f48f69SDavid du Colombier /* 127*51f48f69SDavid du Colombier * atomic 128*51f48f69SDavid du Colombier */ 129*51f48f69SDavid du Colombier long ainc(long*); 130*51f48f69SDavid du Colombier long adec(long*); 131*51f48f69SDavid du Colombier int cas32(unsigned long*, unsigned long, unsigned long); 132*51f48f69SDavid du Colombier int casp(void**, void*, void*); 133*51f48f69SDavid du Colombier int casl(unsigned long*, unsigned long, unsigned long); 134