Blame


1 7e8275c8 2006-06-25 devnull .TH ACME 3
2 7e8275c8 2006-06-25 devnull .SH NAME
3 7e8275c8 2006-06-25 devnull Event, Win,
4 7e8275c8 2006-06-25 devnull eventfmt,
5 7e8275c8 2006-06-25 devnull newwin,
6 7e8275c8 2006-06-25 devnull pipetowin,
7 7e8275c8 2006-06-25 devnull pipewinto,
8 7e8275c8 2006-06-25 devnull sysrun,
9 7e8275c8 2006-06-25 devnull winaddr,
10 7e8275c8 2006-06-25 devnull winclosefiles,
11 7e8275c8 2006-06-25 devnull winctl,
12 7e8275c8 2006-06-25 devnull windel,
13 7e8275c8 2006-06-25 devnull windeleteall,
14 7e8275c8 2006-06-25 devnull windows,
15 7e8275c8 2006-06-25 devnull wineventchan,
16 7e8275c8 2006-06-25 devnull winfd,
17 7e8275c8 2006-06-25 devnull winfree,
18 7e8275c8 2006-06-25 devnull winmread,
19 7e8275c8 2006-06-25 devnull winname,
20 7e8275c8 2006-06-25 devnull winopenfd,
21 7e8275c8 2006-06-25 devnull winprint,
22 7e8275c8 2006-06-25 devnull winread,
23 7e8275c8 2006-06-25 devnull winreadaddr,
24 7e8275c8 2006-06-25 devnull winreadevent,
25 7e8275c8 2006-06-25 devnull winseek,
26 7e8275c8 2006-06-25 devnull winwrite,
27 7e8275c8 2006-06-25 devnull winwriteevent \- acme client library
28 7e8275c8 2006-06-25 devnull .SH SYNOPSIS
29 7e8275c8 2006-06-25 devnull .ft L
30 7e8275c8 2006-06-25 devnull .nf
31 7e8275c8 2006-06-25 devnull #include <u.h>
32 7e8275c8 2006-06-25 devnull #include <libc.h>
33 7e8275c8 2006-06-25 devnull #include <thread.h>
34 7e8275c8 2006-06-25 devnull #include <9pclient.h>
35 7e8275c8 2006-06-25 devnull #include <acme.h>
36 7e8275c8 2006-06-25 devnull .fi
37 7e8275c8 2006-06-25 devnull .PP
38 7e8275c8 2006-06-25 devnull .ft L
39 7e8275c8 2006-06-25 devnull .ta +\w'\fLxxxx'u +\w'\fLxxxxx'u
40 7e8275c8 2006-06-25 devnull .nf
41 7e8275c8 2006-06-25 devnull struct Event
42 7e8275c8 2006-06-25 devnull {
43 7e8275c8 2006-06-25 devnull int c1;
44 7e8275c8 2006-06-25 devnull int c2;
45 7e8275c8 2006-06-25 devnull int q0;
46 7e8275c8 2006-06-25 devnull int q1;
47 7e8275c8 2006-06-25 devnull int oq0;
48 7e8275c8 2006-06-25 devnull int oq1;
49 7e8275c8 2006-06-25 devnull int flag;
50 7e8275c8 2006-06-25 devnull int nb;
51 7e8275c8 2006-06-25 devnull int nr;
52 7e8275c8 2006-06-25 devnull char text[];
53 7e8275c8 2006-06-25 devnull char arg[];
54 7e8275c8 2006-06-25 devnull char loc[];
55 7e8275c8 2006-06-25 devnull };
56 7e8275c8 2006-06-25 devnull .PP
57 7e8275c8 2006-06-25 devnull .ta +\w'\fLxxxxxxxxxx'u
58 7e8275c8 2006-06-25 devnull .B
59 7e8275c8 2006-06-25 devnull int eventfmt(Fmt *fmt)
60 7e8275c8 2006-06-25 devnull .PP
61 7e8275c8 2006-06-25 devnull .B
62 7e8275c8 2006-06-25 devnull Win* newwin(void)
63 7e8275c8 2006-06-25 devnull .PP
64 7e8275c8 2006-06-25 devnull .B
65 7e8275c8 2006-06-25 devnull Win* openwin(int id, CFid *ctlfid)
66 7e8275c8 2006-06-25 devnull .PP
67 7e8275c8 2006-06-25 devnull .B
68 7e8275c8 2006-06-25 devnull int pipetowin(Win *w, char *file, int fderr, char *fmt, ...)
69 7e8275c8 2006-06-25 devnull .PP
70 7e8275c8 2006-06-25 devnull .B
71 7e8275c8 2006-06-25 devnull int pipewinto(Win *w, char *file, int fdout, char *fmt, ...)
72 7e8275c8 2006-06-25 devnull .PP
73 7e8275c8 2006-06-25 devnull .B
74 7e8275c8 2006-06-25 devnull char* sysrun(char *fmt, ...)
75 7e8275c8 2006-06-25 devnull .PP
76 7e8275c8 2006-06-25 devnull .B
77 7e8275c8 2006-06-25 devnull int winaddr(Win *w, char *fmt, ...)
78 7e8275c8 2006-06-25 devnull .PP
79 7e8275c8 2006-06-25 devnull .B
80 7e8275c8 2006-06-25 devnull void winclosefiles(Win *w)
81 7e8275c8 2006-06-25 devnull .PP
82 7e8275c8 2006-06-25 devnull .B
83 7e8275c8 2006-06-25 devnull int winctl(Win *w, char *fmt, ...)
84 7e8275c8 2006-06-25 devnull .PP
85 7e8275c8 2006-06-25 devnull .B
86 7e8275c8 2006-06-25 devnull int windel(Win *w, int sure)
87 7e8275c8 2006-06-25 devnull .PP
88 7e8275c8 2006-06-25 devnull .B
89 7e8275c8 2006-06-25 devnull void windeleteall(void)
90 7e8275c8 2006-06-25 devnull .PP
91 7e8275c8 2006-06-25 devnull .B
92 7e8275c8 2006-06-25 devnull Channel* wineventchan(Win *w)
93 7e8275c8 2006-06-25 devnull .PP
94 7e8275c8 2006-06-25 devnull .B
95 7e8275c8 2006-06-25 devnull int winfd(Win *w, char *name, int mode)
96 7e8275c8 2006-06-25 devnull .PP
97 7e8275c8 2006-06-25 devnull .B
98 7e8275c8 2006-06-25 devnull void winfree(Win *w)
99 7e8275c8 2006-06-25 devnull .PP
100 7e8275c8 2006-06-25 devnull .B
101 7e8275c8 2006-06-25 devnull char* winmread(Win *w, char *file)
102 7e8275c8 2006-06-25 devnull .PP
103 7e8275c8 2006-06-25 devnull .B
104 7e8275c8 2006-06-25 devnull int winname(Win *w, char *fmt, ...)
105 7e8275c8 2006-06-25 devnull .PP
106 7e8275c8 2006-06-25 devnull .B
107 7e8275c8 2006-06-25 devnull int winopenfd(Win *w, char *name, int mode)
108 7e8275c8 2006-06-25 devnull .PP
109 7e8275c8 2006-06-25 devnull .B
110 7e8275c8 2006-06-25 devnull int winprint(Win *w, char *file, char *fmt, ...)
111 7e8275c8 2006-06-25 devnull .PP
112 7e8275c8 2006-06-25 devnull .B
113 7e8275c8 2006-06-25 devnull int winread(Win *w, char *file, void *a, int n)
114 7e8275c8 2006-06-25 devnull .PP
115 7e8275c8 2006-06-25 devnull .B
116 7e8275c8 2006-06-25 devnull int winreadaddr(Win *w, uint *q1)
117 7e8275c8 2006-06-25 devnull .PP
118 7e8275c8 2006-06-25 devnull .B
119 7e8275c8 2006-06-25 devnull int winreadevent(Win *w, Event *e)
120 7e8275c8 2006-06-25 devnull .PP
121 7e8275c8 2006-06-25 devnull .B
122 7e8275c8 2006-06-25 devnull int winseek(Win *w, char *file, int off, int type)
123 7e8275c8 2006-06-25 devnull .PP
124 7e8275c8 2006-06-25 devnull .B
125 7e8275c8 2006-06-25 devnull int winwrite(Win *w, char *file, void *a, int n)
126 7e8275c8 2006-06-25 devnull .PP
127 7e8275c8 2006-06-25 devnull .B
128 7e8275c8 2006-06-25 devnull int winwriteevent(Win *w, Event *e)
129 7e8275c8 2006-06-25 devnull .PP
130 7e8275c8 2006-06-25 devnull .B
131 7e8275c8 2006-06-25 devnull void* emalloc(uint n)
132 7e8275c8 2006-06-25 devnull .PP
133 7e8275c8 2006-06-25 devnull .B
134 7e8275c8 2006-06-25 devnull void* erealloc(void *v, uint n)
135 7e8275c8 2006-06-25 devnull .PP
136 7e8275c8 2006-06-25 devnull .B
137 7e8275c8 2006-06-25 devnull char* estrdup(char *s)
138 7e8275c8 2006-06-25 devnull .PP
139 7e8275c8 2006-06-25 devnull .B
140 7e8275c8 2006-06-25 devnull char* evsmprint(char *fmt, va_list arg)
141 7e8275c8 2006-06-25 devnull .SH DESCRIPTION
142 7e8275c8 2006-06-25 devnull .I Libacme
143 7e8275c8 2006-06-25 devnull provides a simple C interface for interacting with
144 d32deab1 2020-08-16 rsc .MR acme (1)
145 7e8275c8 2006-06-25 devnull windows.
146 7e8275c8 2006-06-25 devnull .PP
147 7e8275c8 2006-06-25 devnull A
148 7e8275c8 2006-06-25 devnull .B Win
149 7e8275c8 2006-06-25 devnull structure represents a single window and its control files.
150 7e8275c8 2006-06-25 devnull The contents of the structure should not be accessed directly.
151 7e8275c8 2006-06-25 devnull .I Newwin
152 7e8275c8 2006-06-25 devnull creates a new window and returns a structure corresponding to that window.
153 7e8275c8 2006-06-25 devnull .I Openwin
154 7e8275c8 2006-06-25 devnull allocates a structure corresponding to the existing window with the given
155 7e8275c8 2006-06-25 devnull .IR id .
156 7e8275c8 2006-06-25 devnull If
157 7e8275c8 2006-06-25 devnull .I ctlfid
158 7e8275c8 2006-06-25 devnull is non-nil,
159 7e8275c8 2006-06-25 devnull .I openwin
160 7e8275c8 2006-06-25 devnull assumes it is a file descriptor open for writing to the window's
161 7e8275c8 2006-06-25 devnull .B ctl
162 7e8275c8 2006-06-25 devnull file.
163 7e8275c8 2006-06-25 devnull Ownership of
164 7e8275c8 2006-06-25 devnull .I ctlfid
165 7e8275c8 2006-06-25 devnull passes to the library.
166 7e8275c8 2006-06-25 devnull .PP
167 7e8275c8 2006-06-25 devnull Most of the library routines access files in the window's
168 7e8275c8 2006-06-25 devnull .I acme
169 7e8275c8 2006-06-25 devnull directory.
170 7e8275c8 2006-06-25 devnull See
171 d32deab1 2020-08-16 rsc .MR acme (4)
172 7e8275c8 2006-06-25 devnull for details.
173 7e8275c8 2006-06-25 devnull Many library routines take a format string
174 7e8275c8 2006-06-25 devnull .I fmt
175 7e8275c8 2006-06-25 devnull followed by a variable list of arguments.
176 7e8275c8 2006-06-25 devnull In the discussion below, the notation
177 7e8275c8 2006-06-25 devnull .I fmt\fR, \fP...
178 7e8275c8 2006-06-25 devnull denotes the result of formatting the string and arguments
179 7e8275c8 2006-06-25 devnull using
180 7e8275c8 2006-06-25 devnull .I smprint
181 7e8275c8 2006-06-25 devnull (see
182 d32deab1 2020-08-16 rsc .MR print (3) ).
183 7e8275c8 2006-06-25 devnull .PP
184 7e8275c8 2006-06-25 devnull .I Pipetowin
185 7e8275c8 2006-06-25 devnull runs the
186 d32deab1 2020-08-16 rsc .MR rc (1)
187 7e8275c8 2006-06-25 devnull command line
188 7e8275c8 2006-06-25 devnull .I fmt\fR, \fP...
189 7e8275c8 2006-06-25 devnull with
190 7e8275c8 2006-06-25 devnull .B /dev/null
191 7e8275c8 2006-06-25 devnull on standard input and the window's
192 7e8275c8 2006-06-25 devnull .I file
193 7e8275c8 2006-06-25 devnull on standard output.
194 7e8275c8 2006-06-25 devnull If
195 7e8275c8 2006-06-25 devnull .I fderr
196 7e8275c8 2006-06-25 devnull is non-zero (sic),
197 7e8275c8 2006-06-25 devnull it is used as standard error.
198 7e8275c8 2006-06-25 devnull Otherwise the command inherits the caller's standard error.
199 7e8275c8 2006-06-25 devnull .PP
200 7e8275c8 2006-06-25 devnull .I Pipewinto
201 7e8275c8 2006-06-25 devnull runs the
202 d32deab1 2020-08-16 rsc .MR rc (1)
203 7e8275c8 2006-06-25 devnull command line
204 7e8275c8 2006-06-25 devnull .I fmt\fR, \fP...
205 7e8275c8 2006-06-25 devnull with the window's
206 7e8275c8 2006-06-25 devnull .I file
207 7e8275c8 2006-06-25 devnull on standard input.
208 7e8275c8 2006-06-25 devnull The command runs with
209 7e8275c8 2006-06-25 devnull .I fdout
210 7e8275c8 2006-06-25 devnull as its standard output and standard error.
211 7e8275c8 2006-06-25 devnull .PP
212 7e8275c8 2006-06-25 devnull .I Sysrun
213 7e8275c8 2006-06-25 devnull runs the
214 7e8275c8 2006-06-25 devnull .I rc
215 7e8275c8 2006-06-25 devnull command line
216 7e8275c8 2006-06-25 devnull .I fmt\fR, \fP...
217 7e8275c8 2006-06-25 devnull and returns a pointer to the first kilobyte of output, NUL-terminated.
218 7e8275c8 2006-06-25 devnull The buffer holding the output is reused on each call.
219 7e8275c8 2006-06-25 devnull .PP
220 7e8275c8 2006-06-25 devnull .I Winaddr
221 7e8275c8 2006-06-25 devnull writes
222 7e8275c8 2006-06-25 devnull .I fmt\fR, \fP...
223 7e8275c8 2006-06-25 devnull to the window's
224 7e8275c8 2006-06-25 devnull .B addr
225 7e8275c8 2006-06-25 devnull file.
226 7e8275c8 2006-06-25 devnull .PP
227 7e8275c8 2006-06-25 devnull .I Winclosefiles
228 7e8275c8 2006-06-25 devnull closes all the open file descriptors associated with the window.
229 7e8275c8 2006-06-25 devnull (These file descriptors are maintained from the library and
230 7e8275c8 2006-06-25 devnull cached across calls to
231 7e8275c8 2006-06-25 devnull .IR winctl ,
232 7e8275c8 2006-06-25 devnull .IR etc .)
233 7e8275c8 2006-06-25 devnull .PP
234 7e8275c8 2006-06-25 devnull .I Winctl
235 7e8275c8 2006-06-25 devnull writes
236 7e8275c8 2006-06-25 devnull .I fmt\fR, \fP...
237 7e8275c8 2006-06-25 devnull to the window's
238 7e8275c8 2006-06-25 devnull .B ctl
239 7e8275c8 2006-06-25 devnull file.
240 7e8275c8 2006-06-25 devnull .PP
241 7e8275c8 2006-06-25 devnull .I Windel
242 7e8275c8 2006-06-25 devnull deletes the window,
243 7e8275c8 2006-06-25 devnull writing
244 7e8275c8 2006-06-25 devnull .B del
245 7e8275c8 2006-06-25 devnull (or, if
246 7e8275c8 2006-06-25 devnull .I sure
247 7e8275c8 2006-06-25 devnull is set,
248 7e8275c8 2006-06-25 devnull .B delete)
249 7e8275c8 2006-06-25 devnull to the window's
250 7e8275c8 2006-06-25 devnull .B ctl
251 7e8275c8 2006-06-25 devnull file.
252 7e8275c8 2006-06-25 devnull .PP
253 7e8275c8 2006-06-25 devnull .I Winfd
254 7e8275c8 2006-06-25 devnull returns a file descriptor for the window's
255 7e8275c8 2006-06-25 devnull .I file
256 7e8275c8 2006-06-25 devnull opened for
257 7e8275c8 2006-06-25 devnull .IR mode .
258 7e8275c8 2006-06-25 devnull The caller is responsible for closing the file descriptor.
259 7e8275c8 2006-06-25 devnull .PP
260 7e8275c8 2006-06-25 devnull .I Winmread
261 7e8275c8 2006-06-25 devnull reads the contents of the window's
262 7e8275c8 2006-06-25 devnull .I file
263 7e8275c8 2006-06-25 devnull into a dynamically allocated buffer
264 7e8275c8 2006-06-25 devnull and returns it.
265 7e8275c8 2006-06-25 devnull The caller is responsible for freeing the buffer.
266 7e8275c8 2006-06-25 devnull .PP
267 7e8275c8 2006-06-25 devnull .I Winname
268 7e8275c8 2006-06-25 devnull sets the name of the window to
269 7e8275c8 2006-06-25 devnull .I fmt\fR, \fP...
270 7e8275c8 2006-06-25 devnull by writing to the
271 7e8275c8 2006-06-25 devnull .B ctl
272 7e8275c8 2006-06-25 devnull file.
273 7e8275c8 2006-06-25 devnull .PP
274 7e8275c8 2006-06-25 devnull .I Winprint
275 7e8275c8 2006-06-25 devnull prints
276 7e8275c8 2006-06-25 devnull .I fmt\fR, \fP...
277 7e8275c8 2006-06-25 devnull to the window's
278 7e8275c8 2006-06-25 devnull .IR file .
279 7e8275c8 2006-06-25 devnull .PP
280 7e8275c8 2006-06-25 devnull .I Winread
281 7e8275c8 2006-06-25 devnull reads at most
282 7e8275c8 2006-06-25 devnull .I n
283 7e8275c8 2006-06-25 devnull bytes from the window's
284 7e8275c8 2006-06-25 devnull .IR file
285 7e8275c8 2006-06-25 devnull into the buffer pointed at by
286 7e8275c8 2006-06-25 devnull .IR a .
287 7e8275c8 2006-06-25 devnull .PP
288 7e8275c8 2006-06-25 devnull .I Winreadaddr
289 7e8275c8 2006-06-25 devnull reads the window's
290 7e8275c8 2006-06-25 devnull .B addr
291 7e8275c8 2006-06-25 devnull file, which contains two integers.
292 7e8275c8 2006-06-25 devnull It returns the first and stores the second in
293 7e8275c8 2006-06-25 devnull .BI * q1 \fR.
294 7e8275c8 2006-06-25 devnull .PP
295 7e8275c8 2006-06-25 devnull .I Winseek
296 7e8275c8 2006-06-25 devnull seeks the file descriptor for the window's
297 7e8275c8 2006-06-25 devnull .I file
298 7e8275c8 2006-06-25 devnull to position
299 7e8275c8 2006-06-25 devnull .I off
300 7e8275c8 2006-06-25 devnull relative to
301 7e8275c8 2006-06-25 devnull .I type
302 7e8275c8 2006-06-25 devnull (see
303 d32deab1 2020-08-16 rsc .MR seek (3) ).
304 7e8275c8 2006-06-25 devnull .PP
305 7e8275c8 2006-06-25 devnull .I Winwrite
306 7e8275c8 2006-06-25 devnull writes the
307 7e8275c8 2006-06-25 devnull .I n
308 7e8275c8 2006-06-25 devnull bytes pointed at by
309 7e8275c8 2006-06-25 devnull .I a
310 7e8275c8 2006-06-25 devnull to the window's
311 7e8275c8 2006-06-25 devnull .IR file .
312 7e8275c8 2006-06-25 devnull .PP
313 7e8275c8 2006-06-25 devnull An
314 7e8275c8 2006-06-25 devnull .B Event
315 7e8275c8 2006-06-25 devnull structure represents an event originating in a particular window.
316 7e8275c8 2006-06-25 devnull The fields correspond to the fields in
317 7e8275c8 2006-06-25 devnull .IR acme 's
318 7e8275c8 2006-06-25 devnull event messages.
319 7e8275c8 2006-06-25 devnull See
320 d32deab1 2020-08-16 rsc .MR acme (4)
321 7e8275c8 2006-06-25 devnull for detailed explanations.
322 7e8275c8 2006-06-25 devnull The fields are:
323 7e8275c8 2006-06-25 devnull .TP
324 7e8275c8 2006-06-25 devnull .BR c1 ", " c2
325 7e8275c8 2006-06-25 devnull The two event characters, indicating origin and type of action.
326 7e8275c8 2006-06-25 devnull .TP
327 7e8275c8 2006-06-25 devnull .BR q0 ", " q1
328 7e8275c8 2006-06-25 devnull The character addresses of the action.
329 7e8275c8 2006-06-25 devnull If the original event had an empty selection
330 7e8275c8 2006-06-25 devnull .RB ( q0 = q1 )
331 7e8275c8 2006-06-25 devnull and was accompanied by an expansion
332 7e8275c8 2006-06-25 devnull (the 2 bit is set in the flag), then
333 7e8275c8 2006-06-25 devnull .B q0
334 7e8275c8 2006-06-25 devnull and
335 7e8275c8 2006-06-25 devnull .B q1
336 7e8275c8 2006-06-25 devnull will indicate the expansion rather than original event.
337 7e8275c8 2006-06-25 devnull .TP
338 7e8275c8 2006-06-25 devnull .BR oq0 ", " oq1
339 7e8275c8 2006-06-25 devnull The
340 7e8275c8 2006-06-25 devnull .B q0
341 7e8275c8 2006-06-25 devnull and
342 7e8275c8 2006-06-25 devnull .B q1
343 7e8275c8 2006-06-25 devnull of the original event, even if it was expanded.
344 7e8275c8 2006-06-25 devnull If there was no expansion,
345 7e8275c8 2006-06-25 devnull .BR oq0 = q0
346 7e8275c8 2006-06-25 devnull and
347 7e8275c8 2006-06-25 devnull .BR oq1 = q1 .
348 7e8275c8 2006-06-25 devnull .TP
349 7e8275c8 2006-06-25 devnull .B flag
350 7e8275c8 2006-06-25 devnull The flag.
351 7e8275c8 2006-06-25 devnull .TP
352 7e8275c8 2006-06-25 devnull .B nr
353 7e8275c8 2006-06-25 devnull The number of characters (UTF sequences) included in the optional text.
354 7e8275c8 2006-06-25 devnull .TP
355 7e8275c8 2006-06-25 devnull .B text
356 7e8275c8 2006-06-25 devnull The optional text itself, encoded in UTF.
357 7e8275c8 2006-06-25 devnull .TP
358 7e8275c8 2006-06-25 devnull .B nb
359 7e8275c8 2006-06-25 devnull The number of bytes included in the optional text.
360 7e8275c8 2006-06-25 devnull .TP
361 7e8275c8 2006-06-25 devnull .B arg
362 7e8275c8 2006-06-25 devnull The chorded argument, if present
363 7e8275c8 2006-06-25 devnull (the 8 bit is set in the flag).
364 7e8275c8 2006-06-25 devnull .TP
365 7e8275c8 2006-06-25 devnull .B loc
366 7e8275c8 2006-06-25 devnull The chorded location, if present
367 7e8275c8 2006-06-25 devnull (the 8 bit is set in the flag).
368 7e8275c8 2006-06-25 devnull .PD
369 7e8275c8 2006-06-25 devnull .PP
370 7e8275c8 2006-06-25 devnull .I Winreadevent
371 7e8275c8 2006-06-25 devnull reads the next event (q.v.)
372 7e8275c8 2006-06-25 devnull from the window's
373 7e8275c8 2006-06-25 devnull .B event
374 7e8275c8 2006-06-25 devnull file.
375 7e8275c8 2006-06-25 devnull .PP
376 7e8275c8 2006-06-25 devnull .I Winwriteevent
377 7e8275c8 2006-06-25 devnull writes an event back to the window's
378 7e8275c8 2006-06-25 devnull .B event
379 7e8275c8 2006-06-25 devnull file, indicating to
380 7e8275c8 2006-06-25 devnull .I acme
381 7e8275c8 2006-06-25 devnull that it should be handled internally.
382 7e8275c8 2006-06-25 devnull .PP
383 7e8275c8 2006-06-25 devnull .I Wineventchan
384 7e8275c8 2006-06-25 devnull returns a pointer to a
385 7e8275c8 2006-06-25 devnull .B Channel
386 7e8275c8 2006-06-25 devnull (see
387 d32deab1 2020-08-16 rsc .MR thread (3) )
388 7e8275c8 2006-06-25 devnull on which event structures (not pointers) can be read.
389 7e8275c8 2006-06-25 devnull The first call to
390 7e8275c8 2006-06-25 devnull .I wineventchan
391 7e8275c8 2006-06-25 devnull allocates a channel and
392 7e8275c8 2006-06-25 devnull starts a new thread that loops calling
393 7e8275c8 2006-06-25 devnull .I winreadevent
394 7e8275c8 2006-06-25 devnull and copying the events into the channel.
395 7e8275c8 2006-06-25 devnull Subsequent calls return the same channel.
396 7e8275c8 2006-06-25 devnull Clients should not call
397 7e8275c8 2006-06-25 devnull .I winreadevent
398 7e8275c8 2006-06-25 devnull after calling
399 7e8275c8 2006-06-25 devnull .IR wineventchan .
400 7e8275c8 2006-06-25 devnull .PP
401 7e8275c8 2006-06-25 devnull .IR Emalloc ,
402 7e8275c8 2006-06-25 devnull .IR erealloc ,
403 7e8275c8 2006-06-25 devnull .IR estrdup ,
404 7e8275c8 2006-06-25 devnull and
405 7e8275c8 2006-06-25 devnull .I evsmprint
406 7e8275c8 2006-06-25 devnull are like
407 d32deab1 2020-08-16 rsc .MR malloc (3) ,
408 7e8275c8 2006-06-25 devnull .IR realloc ,
409 7e8275c8 2006-06-25 devnull .IR strdup
410 7e8275c8 2006-06-25 devnull (see
411 d32deab1 2020-08-16 rsc .MR strcat (3) ),
412 7e8275c8 2006-06-25 devnull and
413 7e8275c8 2006-06-25 devnull .IR vsmprint
414 7e8275c8 2006-06-25 devnull (see
415 d32deab1 2020-08-16 rsc .MR print (3) ),
416 7e8275c8 2006-06-25 devnull but they call
417 d32deab1 2020-08-16 rsc .MR sysfatal (3)
418 7e8275c8 2006-06-25 devnull on error rather than returning nil.
419 7e8275c8 2006-06-25 devnull .SH SOURCE
420 7e8275c8 2006-06-25 devnull .B \*9/src/libacme
421 7e8275c8 2006-06-25 devnull .SH SEE ALSO
422 d32deab1 2020-08-16 rsc .MR acme (1) ,
423 d32deab1 2020-08-16 rsc .MR acme (4)