att_kbd(7) DG/UX 5.4R3.00 att_kbd(7)
NAME
attkbd - generalized string translation module
DESCRIPTION
The AT&T STREAMS module attkbd (called kbd by AT&T) is a
programmable string translation module. It can perform two types of
operations on an input stream: the first type is simple byte-swapping
via a lookup table, the second is string translation. It is useful
for codeset conversion and compose-key or dead-key character
production on terminals and production of overstriking sequences on
printers. It may also be used for minor types of key-rebinding,
expansion of abbreviations, and keyboard re-arrangement (an example
of the latter would be swapping the positions of the Y and Z keys,
required for German keyboards, or providing Dvorak keyboard emulation
for QWERTY keyboards). The manual entry kbdcomp(1M) discusses table
construction, the input language, and contains sample uses. This
document is intended mainly to aid administrators in configuring the
module on a particular system; the user interface to the module is
solely through the commands kbdload and kbdset.
The attkbd module works by modifying an input stream according to
instructions embodied in tables. It has no built in ``default''
tables. Some tables may be loaded when the system is first brought
up by pushing the module and loading standard or often-used tables
[see kbdload(1M)] which are retained in main-memory across
invocations and made available to all users. These are called public
tables. Users may also load private tables at any time--these do not
remain resident.
With the kbdset command, users may query the module for a list of
available and attached tables, attach various tables, and set the
optional per-user hot-key, hot-key mode, and verbose string for their
particular invocation.
When a user attaches more than one table, the user's hot-key may be
used to cycle to the next table in the list. If only one table is
specified, the hot-key may be used to toggle translation on and off.
When multiple tables are in use, the hot-key may be used to cycle
through the list of tables [see kbdset(1) for a description of the
available modes].
In its initial state, attkbd scans input for occurrences of bytes
beginning a translation sequence. Upon receiving such a byte, it
attempts to match subsequent bytes of the input to programmed
sequences. Input is buffered beginning with the byte which caused
the state change and is released if a match is not found. When a
match fails, the first byte of the invalid sequence is sent upstream,
the buffered input is ``shifted,'' and the scan begins again with the
resulting input sequence. If the current table contains an error
entry, its value (one or more bytes) is substituted for the offending
input byte. When a sequence is found to be valid, the entire
sequence is replaced with the result string specified for it.
The attkbd may be used in either the read or write directions, or
Licensed material--property of copyright holder(s) 1
att_kbd(7) DG/UX 5.4R3.00 att_kbd(7)
both simultaneously. Maps and hot-keys may be specified
independently for input and output.
The attkbd also supports the use of external kernel-resident
functions as if they were tables; once declared and attached (via
kbdload and kbdset respectively) they may be used as simple tables or
members of composites. To accomplish this, attkbd understands the
registration functions of the alp module and can access any function
registered with that module. Further information on external
functions and their definition is contained in alp(7). External
functions are especially useful in supporting multi-byte codeset
conversions that would be difficult or impossible with normal attkbd
tables.
Limitations
It is not an error to attach multiple tables without defining a hot-
key (but the tables will not all be accessible). It is recommended
that the user's hot-key be set before loading and attaching tables to
avoid unpleasant side effects when an unfamiliar arrangement is first
loaded.
Each user has a limitation on the amount of memory that may be used
for private and attached tables. This ``quota'' is controlled by the
kbdumem variable described below. When a user that is not the
super-user attempts to load a table or create a composite table, the
quota is checked, and the load will fail if it would cause the quota
to be exceeded. When a composite table is attached, the space for
attachment (which requires more space than the composite table
itself) is charged against this quota (attachment of simple tables is
not charged against the quota). The quota is enforced only when
loading new tables. Detaching temporarily from un-needed composite
tables may reduce the current allocation enough to load a table that
would otherwise fail due to quota enforcement. To minimize chances
of failure while loading tables, it is advisable to load all required
tables and make all required composite tables before attaching any of
them.
Configuration Parameters
The master file contains some configurable parameters.
NKBDU is the maximum number of tables that may be attached by a
single user. The number should be enough to cover uncommon cases,
but must be at least 2. Default: 6.
ZUMEM, from which the variable kbdumem is assigned, is the maximum
number of bytes that a user (other than the super user) may have
allocated to private tables (i.e., the quota). Default: 4096.
KBDTIME is the default timer value for timeout mode. It is the
number of clock ticks allowed before timing out. The value of one
``clock tick'' depends on the hardware, but is usually 1/100 or 1/60
of a second. A timeout value of 20 is 1/5 second at 100Hz; with a
60Hz clock, a value of 12 produces a 1/5 second timeout.) Values
from 5 to 400 inclusive are allowed by the module; if the value set
Licensed material--property of copyright holder(s) 2
att_kbd(7) DG/UX 5.4R3.00 att_kbd(7)
for KBDTIME is outside this range, the module forces it to the
nearest limit. (This value is only a default; users may change their
particular Stream to use a different value depending on their own
preferences, terminal baud-rate, and typing speed.)
FILES
/usr/lib/kbd directory containing system standard table files
/usr/lib/kbd/*.map source for some system table files
SEE ALSO
kbdcomp(1M), kbdload(1M), kbdset(1), cpz(4M), alp(7).
NOTES
NULL characters may not be used in result or input strings, because
they are used as string delimiters.
One should be able to obtain information on timeout values of
currently attached tables, and be able to reset values more easily.
Licensed material--property of copyright holder(s) 3