1# 2# deprecated: use styxservers(2) instead 3# 4 5Styxlib: module 6{ 7 PATH: con "/dis/lib/styxlib.dis"; 8 Chan: adt { 9 fid: int; 10 qid: Sys->Qid; 11 open: int; 12 mode: int; 13 uname: string; 14 path: string; 15 data: array of byte; 16 17 isdir: fn(c: self ref Chan): int; 18 }; 19 20 Dirtab: adt { 21 name: string; 22 qid: Sys->Qid; 23 length: big; 24 perm: int; 25 }; 26 27 Styxserver: adt { 28 fd: ref Sys->FD; 29 chans: array of list of ref Chan; 30 uname: string; 31 msize: int; 32 33 new: fn(fd: ref Sys->FD): (chan of ref Styx->Tmsg, ref Styxserver); 34 reply: fn(srv: self ref Styxserver, m: ref Styx->Rmsg): int; 35 36 fidtochan: fn(srv: self ref Styxserver, fid: int): ref Chan; 37 newchan: fn(srv: self ref Styxserver, fid: int): ref Chan; 38 chanfree: fn(srv: self ref Styxserver, c: ref Chan); 39 chanlist: fn(srv: self ref Styxserver): list of ref Chan; 40 clone: fn(srv: self ref Styxserver, c: ref Chan, fid: int): ref Chan; 41 42 devversion: fn(srv: self ref Styxserver, m: ref Styx->Tmsg.Version): int; 43 devauth: fn(srv: self ref Styxserver, m: ref Styx->Tmsg.Auth); 44 devattach: fn(srv: self ref Styxserver, m: ref Styx->Tmsg.Attach): ref Chan; 45 devflush: fn(srv: self ref Styxserver, m: ref Styx->Tmsg.Flush); 46 devwalk: fn(srv: self ref Styxserver, m: ref Styx->Tmsg.Walk, 47 gen: Dirgenmod, tab: array of Dirtab): ref Chan; 48 devclunk: fn(srv: self ref Styxserver, m: ref Styx->Tmsg.Clunk): ref Chan; 49 devstat: fn(srv: self ref Styxserver, m: ref Styx->Tmsg.Stat, 50 gen: Dirgenmod, tab: array of Dirtab); 51 devdirread: fn(srv: self ref Styxserver, m: ref Styx->Tmsg.Read, 52 gen: Dirgenmod, tab: array of Dirtab); 53 devopen: fn(srv: self ref Styxserver, m: ref Styx->Tmsg.Open, 54 gen: Dirgenmod, tab: array of Dirtab): ref Chan; 55 devremove: fn(srv: self ref Styxserver, m: ref Styx->Tmsg.Remove): ref Chan; 56 }; 57 58 init: fn(s: Styx): string; 59 60 readbytes: fn(m: ref Styx->Tmsg.Read, d: array of byte): ref Styx->Rmsg.Read; 61 readnum: fn(m: ref Styx->Tmsg.Read, val, size: int): ref Styx->Rmsg.Read; 62 readstr: fn(m: ref Styx->Tmsg.Read, d: string): ref Styx->Rmsg.Read; 63 64 openok: fn(omode, perm: int, uname, funame, fgname: string): int; 65 openmode: fn(o: int): int; 66 67 devdir: fn(c: ref Chan, qid: Sys->Qid, n: string, length: big, 68 user: string, perm: int): Sys->Dir; 69 70 dirgenmodule: fn(): Dirgenmod; 71 dirgen: fn(srv: ref Styxserver, c: ref Chan, tab: array of Dirtab, i: int): (int, Sys->Dir); 72 73 Einuse : con "fid already in use"; 74 Ebadfid : con "bad fid"; 75 Eopen : con "fid already opened"; 76 Enotfound : con "file does not exist"; 77 Enotdir : con "not a directory"; 78 Eperm : con "permission denied"; 79 Ebadarg : con "bad argument"; 80 Eexists : con "file already exists"; 81}; 82 83 84Dirgenmod: module { 85 dirgen: fn(srv: ref Styxlib->Styxserver, c: ref Styxlib->Chan, 86 tab: array of Styxlib->Dirtab, i: int): (int, Sys->Dir); 87}; 88