From 57a2289bc9a9427e12a5e8101591ae8f49fc87bc Mon Sep 17 00:00:00 2001 From: rsc Date: Sun, 25 Jun 2006 21:23:39 +0000 Subject: just what we need - more rpcs --- man/man1/devdraw.1 | 21 +++++++++++++++++++++ man/man3/drawfcall.3 | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++ man/man3/event.3 | 5 ----- man/man3/memdraw.3 | 6 +----- man/man3/memlayer.3 | 6 +----- man/man3/mux.3 | 36 ++++++++++++++++++++++++++++++++++- 6 files changed, 111 insertions(+), 16 deletions(-) create mode 100644 man/man1/devdraw.1 create mode 100644 man/man3/drawfcall.3 diff --git a/man/man1/devdraw.1 b/man/man1/devdraw.1 new file mode 100644 index 00000000..2bdf0d92 --- /dev/null +++ b/man/man1/devdraw.1 @@ -0,0 +1,21 @@ +.TH DEVDRAW 1 +.SH NAME +devdraw \- draw device simulator +.SH SYNOPSIS +invoked via +.I initdraw +(see +.IR graphics (3)) +.SH DESCRIPTION +.I Devdraw +XXX +.SH SOURCE +.B \*9/src/cmd/devdraw +.SH "SEE ALSO +.IR draw (3), +.IR drawfcall (3), +.IR graphics (3) +.SH BUGS +.I Devdraw +should probably present a standard 9P server +instead of using its own protocol. diff --git a/man/man3/drawfcall.3 b/man/man3/drawfcall.3 new file mode 100644 index 00000000..c22fe747 --- /dev/null +++ b/man/man3/drawfcall.3 @@ -0,0 +1,53 @@ +.TH DRAWFCALL +.SH NAME +convM2W, convW2M, drawfcallfmt, readwsysmsg, sizeW2M \- window system protocol +.SH SYNOPSIS +.nf +.PP +.ft L +#include +#include +#include +#include +#include +#include +.ft P +.ta \w'\fLuint 'u +.PP +.B +uint convM2W(uchar *ap, uint nap, Wsysmsg *w) +.PP +.B +uint convW2M(Wsysmsg *w, uchar *ap, uint nap) +.PP +.B +int drawfcallfmt(Fmt*) +.PP +.B +int readwsysmsg(int fd, uchar *buf, uint nbuf) +.PP +.B +uint sizeW2M(Wsysmsg *w) +.SH DESCRIPTION +These routines are analogues of the routines described in +.IR fcall (3). +They manipulate graphics device protocol messages +rather than 9P protocol messages. +The graphics device protocol is used for internal +communication between the +.IR devdraw (1) +graphics server +and the +.IR draw (3) +library. +A +.B Wsysmsg +is the C structure corresponding to a protocol message. +.PP +The protocol is intentionally undocumented and may change. +.SH SOURCE +.B \*9/src/libdraw/drawfcall.c +.SH SEE ALSO +.IR devdraw (1), +.IR draw (3), +.IR graphics (3) diff --git a/man/man3/event.3 b/man/man3/event.3 index 1a365389..5991a17d 100644 --- a/man/man3/event.3 +++ b/man/man3/event.3 @@ -382,8 +382,3 @@ is nil, it restores the image to the default arrow. .IR plumb (3), .\" .IR cons (3), .IR draw (3) -.SH BUGS -.I Etimer -and -.I estart -are unimplemented. diff --git a/man/man3/memdraw.3 b/man/man3/memdraw.3 index ec299a25..3f6c483e 100644 --- a/man/man3/memdraw.3 +++ b/man/man3/memdraw.3 @@ -433,7 +433,7 @@ In the kernel, .I iprint prints to a serial line rather than the screen, for obvious reasons. .SH SOURCE -.B \*9/src/libdraw +.B \*9/src/libmemdraw .SH SEE ALSO .IR addpt (3), .IR color (3), @@ -448,7 +448,3 @@ prints to a serial line rather than the screen, for obvious reasons. .I Memimagestring is unusual in using a subfont rather than a font, and in having no parameter to align the source. -.PP -These functions are -archived into -.IR libdraw . diff --git a/man/man3/memlayer.3 b/man/man3/memlayer.3 index da1d025b..a40efdc7 100644 --- a/man/man3/memlayer.3 +++ b/man/man3/memlayer.3 @@ -296,14 +296,10 @@ are in compressed image format (see .IR image (7)). .SH SOURCE -.B \*9/src/libdraw +.B \*9/src/libmemlayer .SH SEE ALSO .IR graphics (3), .IR memdraw (3), .IR stringsize (3), .IR window (3), .IR draw (3) -.SH BUGS -These functions -are archived into -.IR libdraw . diff --git a/man/man3/mux.3 b/man/man3/mux.3 index f83da563..caaf55ff 100644 --- a/man/man3/mux.3 +++ b/man/man3/mux.3 @@ -16,6 +16,7 @@ struct Mux int (*gettag)(Mux *mux, void *msg); int (*send)(Mux *mux, void *msg); void *(*recv)(Mux *mux); + void *(*nbrecv)(Mux *mux); void *aux; \&... /* private fields follow */ @@ -30,6 +31,12 @@ void* muxrpc(Mux *mux, void *request); .PP .B void muxprocs(Mux *mux); +.PP +.B +Muxrpc* muxrpcstart(Mux *mux, void *request); +.PP +.B +void* muxrpccanfinish(Muxrpc *rpc); .SH DESCRIPTION .I Libmux is a generic protocol multiplexor. @@ -79,14 +86,19 @@ will block until an executing call finishes. .I settag\fR, \fPgettag Set or get the tag value in a message. .TP -.I send\fR, \fPrecv +.I send\fR, \fPrecv\fR, \fPnbrecv Send or receive protocol messages on the connection. .I Recv should block until a message is available and should return nil if the connection is closed. +.I Nbrecv +should not block; it returns nil if there is no +message available to be read. .I Libmux will arrange that only one call to .I recv +or +.I nbrecv is active at a time. .TP .I aux @@ -130,6 +142,28 @@ either (particularly blocks an entire proc and there are other threads in the calling proc that need to remain active. +.PP +.I Libmux +also provides a non-blocking interface, useful for programs forced +to use a +.IR select (2)-based +main loop. +.I Muxrpcstart +runs the first half of +.IR muxrpc : +it assigns a tag and sends the request, +but does not wait for the reply. +Instead it returns a pointer to a +.B Muxrpc +structure that represents the in-progress call. +.I Muxrpccanfinish +checks whether the given call +can finish. +If no mux procs have been started, +.I muxrpccanfinish +may call +.I nbrecv +to poll for newly arrived responses. .SH EXAMPLE See .B \*9/src/lib9pclient/fs.c -- cgit v1.2.3