just what we need - more rpcs

This commit is contained in:
rsc 2006-06-25 21:23:39 +00:00
parent fdcd298270
commit 57a2289bc9
6 changed files with 111 additions and 16 deletions

21
man/man1/devdraw.1 Normal file
View file

@ -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.

53
man/man3/drawfcall.3 Normal file
View file

@ -0,0 +1,53 @@
.TH DRAWFCALL
.SH NAME
convM2W, convW2M, drawfcallfmt, readwsysmsg, sizeW2M \- window system protocol
.SH SYNOPSIS
.nf
.PP
.ft L
#include <u.h>
#include <libc.h>
#include <draw.h>
#include <mouse.h>
#include <cursor.h>
#include <drawfcall.h>
.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)

View file

@ -382,8 +382,3 @@ is nil, it restores the image to the default arrow.
.IR plumb (3), .IR plumb (3),
.\" .IR cons (3), .\" .IR cons (3),
.IR draw (3) .IR draw (3)
.SH BUGS
.I Etimer
and
.I estart
are unimplemented.

View file

@ -433,7 +433,7 @@ In the kernel,
.I iprint .I iprint
prints to a serial line rather than the screen, for obvious reasons. prints to a serial line rather than the screen, for obvious reasons.
.SH SOURCE .SH SOURCE
.B \*9/src/libdraw .B \*9/src/libmemdraw
.SH SEE ALSO .SH SEE ALSO
.IR addpt (3), .IR addpt (3),
.IR color (3), .IR color (3),
@ -448,7 +448,3 @@ prints to a serial line rather than the screen, for obvious reasons.
.I Memimagestring .I Memimagestring
is unusual in using a subfont rather than a font, is unusual in using a subfont rather than a font,
and in having no parameter to align the source. and in having no parameter to align the source.
.PP
These functions are
archived into
.IR libdraw .

View file

@ -296,14 +296,10 @@ are in compressed image format
(see (see
.IR image (7)). .IR image (7)).
.SH SOURCE .SH SOURCE
.B \*9/src/libdraw .B \*9/src/libmemlayer
.SH SEE ALSO .SH SEE ALSO
.IR graphics (3), .IR graphics (3),
.IR memdraw (3), .IR memdraw (3),
.IR stringsize (3), .IR stringsize (3),
.IR window (3), .IR window (3),
.IR draw (3) .IR draw (3)
.SH BUGS
These functions
are archived into
.IR libdraw .

View file

@ -16,6 +16,7 @@ struct Mux
int (*gettag)(Mux *mux, void *msg); int (*gettag)(Mux *mux, void *msg);
int (*send)(Mux *mux, void *msg); int (*send)(Mux *mux, void *msg);
void *(*recv)(Mux *mux); void *(*recv)(Mux *mux);
void *(*nbrecv)(Mux *mux);
void *aux; void *aux;
\&... /* private fields follow */ \&... /* private fields follow */
@ -30,6 +31,12 @@ void* muxrpc(Mux *mux, void *request);
.PP .PP
.B .B
void muxprocs(Mux *mux); void muxprocs(Mux *mux);
.PP
.B
Muxrpc* muxrpcstart(Mux *mux, void *request);
.PP
.B
void* muxrpccanfinish(Muxrpc *rpc);
.SH DESCRIPTION .SH DESCRIPTION
.I Libmux .I Libmux
is a generic protocol multiplexor. is a generic protocol multiplexor.
@ -79,14 +86,19 @@ will block until an executing call finishes.
.I settag\fR, \fPgettag .I settag\fR, \fPgettag
Set or get the tag value in a message. Set or get the tag value in a message.
.TP .TP
.I send\fR, \fPrecv .I send\fR, \fPrecv\fR, \fPnbrecv
Send or receive protocol messages on the connection. Send or receive protocol messages on the connection.
.I Recv .I Recv
should block until a message is available and should block until a message is available and
should return nil if the connection is closed. 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 .I Libmux
will arrange that only one call to will arrange that only one call to
.I recv .I recv
or
.I nbrecv
is active at a time. is active at a time.
.TP .TP
.I aux .I aux
@ -130,6 +142,28 @@ either (particularly
blocks an entire proc blocks an entire proc
and there are other threads in the calling proc and there are other threads in the calling proc
that need to remain active. 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 .SH EXAMPLE
See See
.B \*9/src/lib9pclient/fs.c .B \*9/src/lib9pclient/fs.c