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 connected; may be nil. See draw-screen(2).
display
The Display adt to which the application is 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 information.
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 messages 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 keyboard 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.