xref: /inferno-os/module/styxlib.m (revision 46439007cf417cbd9ac8049bb4122c890097a0fa)
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