DRAW-CONTEXT(2) DRAW-CONTEXT(2)
NAME
Context - graphics environment
SYNOPSIS
include "draw.m";
draw := load Draw Draw->PATH;
Context: adt
{
screen: ref Screen;
display: ref Display;
cir: chan of int;
ckbd: chan of int;
cptr: chan of ref Pointer;
ctoappl: chan of int;
ctomux: chan of int;
};
DESCRIPTION
The Context type encapsulates the data types and channels
used by an interactive application. A reference to the
Context is passed as the first argument to an application
when it begins execution:
include "draw.m"
Command: module
{
init: fn(nil: ref Draw->Context; nil: list of string);
};
Most programs do not create Contexts but instead inherit one
from their parent, typically a shell or window system.
The wm(1) and mux(1) environments use Context differently as
regards keyboard and pointer (mouse) I/O. Mux applications
are given a set of channels in their Context structure. Wm
applications provide keyboard and mouse input encoded as Tk
events on a channel named via Tk->namechan in tk(2), and the
channels in the Context are unused, and nil.
Common interface
The following elements of Context are used by both wm and
mux:
screen The Screen adt to which the application is con-
nected; may be nil. See draw-screen(2).
display The Display adt to which the application is
Page 1 Plan 9 (printed 10/29/25)
DRAW-CONTEXT(2) DRAW-CONTEXT(2)
connected; may be nil. See draw-display(2).
Mux-specific interface
As mentioned above, mux(1) primes an application's argument
Context with channels through which mux and the application
interact. The channels are used as follows:
cir A channel of type int that delivers events from an
infrared remote control device, if one is present.
See the discussion below and ir(2) for more infor-
mation.
ckbd A channel of type int that delivers keystrokes from
a keyboard.
cptr A channel of type ref Pointer that delivers events
from a pointing device such as a mouse. See
devpointer(2).
ctoappl A channel of type int that delivers control mes-
sages from the mux(1) application multiplexer. One
message is defined:
MAtop Requests an application to make its set of
windows fully visible.
ctomux A channel of type int used by the application to
send messages to mux(1) regarding the application's
use of system devices. The defined messages are:
AMstartir The application is ready to accept
ir(2) data on the cir channel.
AMstartkbd The application is ready to accept key-
board data on the ckbd channel.
AMnewpin The application needs a PIN.
AMstartptr The application is ready to accept
Pointer data on the cptr channel.
AMexit An application should send this message
before it exits, to allow mux to
recover resources.
SEE ALSO
wm(1), mux(1), draw-intro(2), ir(2), prefab-intro(2), tk(2)
Page 2 Plan 9 (printed 10/29/25)