KEYBOARD(2)KEYBOARD(2)
NAME
initkeyboard, ctlkeyboard, closekeyboard – keyboard control
SYNOPSIS
#include <u.h>
#include <libc.h>
#include <thread.h>
#include <keyboard.h>
Keyboardctl *initkeyboard(char *file)
int ctlkeyboard(Keyboardctl *kc, char *msg)
void closekeyboard(Keyboard *kc)
DESCRIPTION
These functions access and control a keyboard interface
for character-at-a-time I/O in a multi-threaded environment, usually in combination with
mouse(2).
They use the message-passing
Channel
interface in the threads library
(see
thread(2));
programs that wish a more event-driven, single-threaded approach should use
event(2).
Initkeyboard
opens a connection to the keyboard and returns a
Keyboardctl
structure:
typedef struct Keyboardctl Keyboardctl;
struct Keyboardctl
{
Channel *c; /* chan(Rune[20]) */
char *file;
int consfd; /* to cons file */
int ctlfd; /* to ctl file */
int pid; /* of slave proc */
};
The argument to
initkeyboard
is a
file
naming the device file from which characters may be read,
typically
/dev/cons.
If
file
is nil,
/dev/cons
is assumed.
Once the
Keyboardctl
is set up, a
message containing a
Rune
will be sent on the
Channel
Keyboardctl.c
to report each character read from the device.
Ctlkeyboard
is used to set the state of the interface, typically to turn raw mode on and off
(see
cons(3)).
It writes the string
msg
to the control file associated with the device, which is assumed to be the regular device file name
with the string
ctl
appended.
Closekeyboard
closes the file descriptors associated with the keyboard, kills the slave processes,
and frees the
Keyboardctl
structure.
SOURCE
/sys/src/libdraw
SEE
graphics(2),
draw(2),
event(2),
thread(2).
BUGS
Because the interface delivers complete runes,
there is no way to report lesser actions such as
shift keys or even individual bytes.