1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
|
implement Styxaux;
include "sys.m";
sys: Sys;
include "styx.m";
include "styxaux.m";
Tmsg : import Styx;
init()
{
}
msize(m: ref Tmsg): int
{
pick fc := m {
Version => return fc.msize;
}
error("bad styx msize", m);
return 0;
}
version(m: ref Tmsg): string
{
pick fc := m {
Version => return fc.version;
}
error("bad styx version", m);
return nil;
}
fid(m: ref Tmsg): int
{
pick fc := m {
Readerror => return 0;
Version => return 0;
Flush => return 0;
Walk => return fc.fid;
Open => return fc.fid;
Create => return fc.fid;
Read => return fc.fid;
Write => return fc.fid;
Clunk => return fc.fid;
Remove => return fc.fid;
Stat => return fc.fid;
Wstat => return fc.fid;
Attach => return fc.fid;
}
error("bad styx fid", m);
return 0;
}
uname(m: ref Tmsg): string
{
pick fc := m {
Attach => return fc.uname;
}
error("bad styx uname", m);
return nil;
}
aname(m: ref Tmsg): string
{
pick fc := m {
Attach => return fc.aname;
}
error("bad styx aname", m);
return nil;
}
newfid(m: ref Tmsg): int
{
pick fc := m {
Walk => return fc.newfid;
}
error("bad styx newfd", m);
return 0;
}
name(m: ref Tmsg): string
{
pick fc := m {
Create => return fc.name;
}
error("bad styx name", m);
return nil;
}
names(m: ref Tmsg): array of string
{
pick fc := m {
Walk => return fc.names;
}
error("bad styx names", m);
return nil;
}
mode(m: ref Tmsg): int
{
pick fc := m {
Open => return fc.mode;
}
error("bad styx mode", m);
return 0;
}
setmode(m: ref Tmsg, mode: int)
{
pick fc := m {
Open => fc.mode = mode;
* => error("bad styx setmode", m);
}
}
offset(m: ref Tmsg): big
{
pick fc := m {
Read => return fc.offset;
Write => return fc.offset;
}
error("bad styx offset", m);
return big 0;
}
count(m: ref Tmsg): int
{
pick fc := m {
Read => return fc.count;
Write => return len fc.data;
}
error("bad styx count", m);
return 0;
}
setcount(m: ref Tmsg, count: int)
{
pick fc := m {
Read => fc.count = count;
* => error("bad styx setcount", m);
}
}
oldtag(m: ref Tmsg): int
{
pick fc := m {
Flush => return fc.oldtag;
}
error("bad styx oldtag", m);
return 0;
}
data(m: ref Tmsg): array of byte
{
pick fc := m {
Write => return fc.data;
}
error("bad styx data", m);
return nil;
}
setdata(m: ref Tmsg, data: array of byte)
{
pick fc := m {
Write => fc.data = data;
* => error("bad styx setdata", m);
}
}
error(s: string, m: ref Tmsg)
{
if(sys == nil)
sys = load Sys Sys->PATH;
sys->fprint(sys->fildes(2), "%s %d\n", s, tagof m);
}
|