Annotation of 43BSDTahoe/new/X/libibm/doc/man/keyboard.4, revision 1.1.1.1

1.1       root        1: .\"$Header: keyboard.4,v 10.1 86/11/19 10:56:03 jg Exp $
                      2: .\"$Source: /u1/X/libibm/doc/man/RCS/keyboard.4,v $
                      3: .\" This file uses -man macros.
                      4: .TH KEYBOARD 4 "31 Mar 1986" "Space overwritten by .AC macro" " "
                      5: .UC 4
                      6: .AC 1 0 
                      7: .SH NAME
                      8: keyboard \- keyboard interface
                      9: .SH DESCRIPTION
                     10: .PP
                     11: The keyboard adapter returns scan codes that the keyboard driver translates
                     12: into ASCII characters. This translation is done through table lookup; 
                     13: \fIpf\fR(i) allows users to change the translation tables
                     14: so as to redefine the ASCII characters generated by
                     15: particular keystrokes.
                     16: .PP
                     17: There are two sets of translation tables: a standard set
                     18: not normally changed (see \fIkeyboard_codes\fR(5)),, 
                     19: and a working set the user may freely change
                     20: as desired (see \fIpf\fR(i)). 
                     21: .PP
                     22: In addition to generating ASCII characters, the keyboard interface
                     23: can invoke special functions (swapping of key definitions, etc.; 
                     24: see below).
                     25: Most of these special functions are bound to
                     26: the three keys labeled
                     27: \fB<Print-Screen/SysRq>\fR, \fB<Scroll-Lock>\fR, 
                     28: and \fB<Pause/Break>\fR.
                     29: The normal use of these keys, together with the four shift or meta-keys, 
                     30: give a total of 15 possible meta functions that can be invoked:
                     31: .nf
                     32: 
                     33: .ft B
                     34: Key            Normal        Shift             Ctrl              Alt            Action
                     35: .ft R
                     36: Print-Screen/  FN_PRINT    FN_IGNORE   FN_LOG          FN_IGNORE         FN_SET
                     37:    SysRq       
                     38: Scroll-Lock    FN_SCROLL  FN_SWAP      FN_SWRESET    FN_SWITCH   FN_CLICK
                     39: 
                     40: Pause/Break    FN_DEBUG   FN_DEBUG     FN_IGNORE      FN_KILL    FN_RESET
                     41: 
                     42: .fi
                     43: .SH "Keyboard META Functions"
                     44: .TP 
                     45: FN_ACTION
                     46: (Usually bound to the 
                     47: .B <Action>
                     48: key.)
                     49: Puts the keyboard into action mode.
                     50: Action mode selects the ``action'' set of key values.
                     51: .TP 
                     52: FN_ALT
                     53: (Usually bound to 
                     54: \fB<Alt>\fR.)
                     55: Puts the keyboard into alt mode.
                     56: Alt mode selects the ``alt'' set of key values.
                     57: .TP 
                     58: FN_BREAK
                     59: Not usually specified by the user; it is invoked when a
                     60: ``make-break'' key is released by the user and should only be bound to 
                     61: that single hardware code.
                     62: .TP 
                     63: FN_CLICK
                     64: (Usually bound to
                     65: .BR <Action><Scroll/Lock> .)
                     66: Causes a different ``key click'' mode to be selected.  There are four such
                     67: modes:  no click, hardware click, software click, and both hardware
                     68: and software click.
                     69: .TP
                     70: FN_DEBUG
                     71: (Usually bound to the
                     72: .B <Pause/Break>
                     73: key.) 
                     74: Invokes the debugger (see \fIdebug\fR(8)).
                     75: Once in console-debugger mode, a ``go'' command can be used to restart 
                     76: the system. On systems without the debugger, the screen still displays
                     77: DEBUG in the status line; but the debugger will not be entered.
                     78: .br
                     79: A system-attention sequence
                     80: .RB ( "<Ctrl>-<Alt>-<SysRq>" )
                     81: can also be used to enter the
                     82: debugger; use this only if the 
                     83: FN-DEBUG function
                     84: does not work.
                     85: .TP 
                     86: FN_IGNORE
                     87: (Usually bound to keys that neither generate characters nor
                     88: activate meta-functions.) Causes that key to be ignored.
                     89: .TP 
                     90: FN_KILL
                     91: (Usually bound to 
                     92: \fB<Alt><Pause/Break>\fR.)
                     93: Causes a HANGUP signal (see 
                     94: .IR signal (2))
                     95: to be sent to the processes currently in the console terminal process group. 
                     96: It also marks the console terminal as closed. This is sufficient to stop most 
                     97: programs that do not catch or ignore the HANGUP signal. This is analogous
                     98: to hanging up a dialup line to drop the connection.
                     99: If the 
                    100: function is invoked again while the console terminal is marked as closed, it 
                    101: generates a KILL signal to all processes
                    102: in the current process group. 
                    103: .TP 
                    104: FN_NUM_LOCK
                    105: (Usually bound to
                    106: \fB<Num-Lock>\fR.)
                    107: Puts the keyboard into num-lock mode.
                    108: .TP 
                    109: FN_PRINT
                    110: (Usually bound to
                    111: \fB<Print-Screen>\fR.)
                    112: Causes the current console screen image to be sent to the line printer.
                    113: .TP 
                    114: FN_LOG
                    115: (Usually bound to
                    116: \fB<Ctrl>-<Print-Screen>\fR.)
                    117: Turns hardcopy logging of the screen on and off.
                    118: Kernel/user hardcopy is independent of debugger hardcopy.
                    119: .TP 
                    120: FN_RESET
                    121: (Usually bound to
                    122: \fB<Action><Pause-Break>\fR.)
                    123: Causes the keyboard definitions to be reset to their standard values.
                    124: This is also automatically done when the console terminal is closed, in order
                    125: to ensure that the next user to log in receives a normal keyboard.
                    126: .TP 
                    127: FN_SWAP
                    128: (Usually bound to
                    129: \fB<Shift><Scroll-Lock>\fR.)
                    130: Exchanges the bindings of the next two keys typed.
                    131: This is particularly useful for swapping the definitions
                    132: of the 
                    133: .B "<Caps-Lock>" 
                    134: key and the 
                    135: .B "<Ctrl>" 
                    136: key.
                    137: .TP 
                    138: FN_SHIFT
                    139: (Usually bound to the keys labeled
                    140: .B <Shift>
                    141: on either side of the keyboard.)
                    142: Puts the keyboard into shifted mode.
                    143: .TP 
                    144: FN_SWITCH
                    145: (Usually bound to
                    146: \fB<Alt><Scroll-Lock>\fR.)
                    147: Causes the console output to be switched to the next available display
                    148: device (see \fIconsole\fR(4)).
                    149: .TP 
                    150: FN_SWRESET
                    151: (Usually bound to
                    152: \fB<Ctrl><Scroll-Lock>\fR.)
                    153: Causes the console output to be switched to the next available display device,
                    154: and the display to be re-initialized. 
                    155: If necessary, this involves loading
                    156: microcode; in all cases, the display is cleared and the cursor moved to the 
                    157: top left corner.
                    158: .TP 
                    159: FN_SCROLL
                    160: (Usually bound to
                    161: \fB<Scroll-Lock>\fR.)
                    162: Causes normal output to the console display to be locked out by generating
                    163: the current XOFF character (see \fItty\fR(4)).  
                    164: Output stops, and the Scroll-Lock
                    165: light on the keyboard comes on. 
                    166: When the Scroll-Lock light is on, pressing the
                    167: .B <Scroll Lock> 
                    168: key again generates the current XON character, which
                    169: causes output to resume and the Scroll Lock to go off. 
                    170: Note that if the console is in RAW mode, 
                    171: the 
                    172: .B <Scroll Lock> 
                    173: key only generates XOFF characters.
                    174: .TP 
                    175: FN_SET
                    176: (Usually bound to
                    177: \fB<Action><Print-Screen>\fR.)
                    178: Sets a new value into the keyboard translation table that determines
                    179: the ASCII characters generated for particular scan codes (see below).
                    180: .TP 
                    181: FN_BEEP
                    182: (Not usually bound to a key.)
                    183: Sounds the bell (a beep) when invoked.
                    184: .TP
                    185: FN_CAPS_LOCK
                    186: (Usually bound to
                    187: \fB<Caps-Lock>\fR
                    188: or to
                    189: \fB<Ctrl>\fR.)
                    190: Causes the keyboard to go into Caps-Lock mode.  The keyboard
                    191: leaves Caps-Lock mode when the FN_CAPS_LOCK function is
                    192: next generated or when the next FN_SHIFT is generated.  This
                    193: behavior is similar to that of many typewriters.  Caps-Lock mode
                    194: selects the ``Shift'' set of key values.
                    195: .TP
                    196: FN_CONTROL
                    197: (Usually bound to 
                    198: \fB<Ctrl>\fR or to
                    199: \fB<Caps-Lock>fR.)
                    200: Causes the keyboard to go into Control mode.  Control mode
                    201: selects the ``control'' set of key values.
                    202: .SH NOTES
                    203: .PP
                    204: When the keyboard has more than one mode in effect, the key value 
                    205: selected is that of the highest priority mode.  
                    206: The mode priority ordering is: normal,
                    207: shift, control, alt, and action (normal being low and action being high).
                    208: .PP
                    209: The keyboard adapter also supports the speaker, which is activated 
                    210: when the ASCII character \fBbel\fP 
                    211: .RB ( ^G )
                    212: is sent to the display.
                    213: .PP
                    214: It is possible to change the association of keyboard functions and the 
                    215: ASCII strings generated by the keyboard driver in two ways: from the 
                    216: keyboard and from within a program. 
                    217: It is convenient to have a set of definitions (or bindings)
                    218: done every time a user logs on the system; this is best
                    219: done via the 
                    220: .IR pf (i)
                    221: utility invoked from one's
                    222: .I .login
                    223: file during login. If this utility is unavailable, or the user wishes
                    224: to redefine a key temporarily, it may be done from the keyboard.
                    225: The keyboard procedure is:
                    226: .IP 1. 5
                    227: Invoke the FN_SET function (normally bound to 
                    228: \fB<Action><Print-Screen>\fR).
                    229: This causes 
                    230: .B "KEY?"
                    231: to be displayed in the status line.
                    232: .IP 2. 5
                    233: Enter the keystroke for the key to be set (this includes using the
                    234: appropriate shift (or meta) key such as 
                    235: \fB<Shift>\fR, \fB<Alt>\fR, \fB<Ctrl>\fR, or
                    236: \fB<Action>\fR).
                    237: The status line will show 
                    238: .B DEF
                    239: when the keystroke has been accepted.
                    240: .IP 3. 5
                    241: Enter the definition. It echoes on the status line as it is 
                    242: accepted. Note that control keys are displayed as ^, followed by the
                    243: appropriate letter.
                    244: .IP 4. 5
                    245: Enter the keystroke for the key being set (as for step 2). This completes
                    246: the definition. 
                    247: .PP
                    248: If during definition you decide to cancel the definition being 
                    249: entered, re-invoke the FN_SET function.
                    250: .PP
                    251: A few \fIioctl\fP(2) calls apply to the 
                    252: \fIkeyboard\fR device, and have the form:
                    253: 
                    254: .RS
                    255: .nf
                    256: .ft B
                    257: #include <machinecons/keyboard.h>
                    258: struct kbdarg {
                    259:        char kbd_scan;                  /* scan code */
                    260:        char kbd_index;                 /* the position to change */
                    261:        char kbd_length;                /* the length following */
                    262:        char kbd_text[KBD_STRING_LENGTH];       /* the text */
                    263:        char kbd_end;                   /* a nullend flag just in case */
                    264: };
                    265: ioctl(files, code, arg)
                    266: int *arg;
                    267: 
                    268: \fRor:\fB
                    269: 
                    270: struct kbdarg *arg;
                    271: 
                    272: #define KBD_INDEX_NORMAL       0       /* normal position */
                    273: #define KBD_INDEX_SHIFT        1       /* shifted */
                    274: #define KBD_INDEX_CONTROL      2       /* control'ed */
                    275: #define KBD_INDEX_ALT          3       /* alt'ed */
                    276: #define KBD_INDEX_ACTION       4       /* action'ed */
                    277: 
                    278: #define CLICK_OFF      0x00
                    279: #define CLICK_HARD     0x01            /* hardware click */
                    280: #define CLICK_SOFT     0x02            /* software click */
                    281: #define CLICK_BOTH     0x03            /* both */
                    282:  
                    283: #define KBDCGET                _IOWR(k,0,struct kbdarg)  /* get current def'n */
                    284: #define KBDCSET                _IOW(k,1,struct kbdarg) /* set new definition */
                    285: #define KBDCRESET      _IO(k,2)        /* reset keyboard to standard */
                    286: #define KBDCRST                _IO(k,3)                /* reset (clear) string table */
                    287: #define KBDCSSTD               _IO(k,4)        /* set standard table */
                    288: #define KBDSGET                _IOR(k,5,int)   /* get available string space */
                    289: #define KBDGCLICK      _IOR(k,6,int)   /*  get click */
                    290: #define KBDSCLICK      _IOW(k,7,int)   /*  set click */
                    291: 
                    292: .ft R
                    293: .fi
                    294: .RE
                    295: The applicable codes are:
                    296: .IP KBDCRESET 18
                    297: Reset the keyboard definitions to the standard definitions.
                    298: The
                    299: .I arg
                    300: argument is unused.
                    301: .IP KBDRST
                    302: Clear the string definitions. This makes space available for
                    303: a new set of strings to be defined. It causes any key with a definition
                    304: of more than two bytes to be set to the 
                    305: FN_IGNORE function.
                    306: .IP KBDSSTD
                    307: Replace the standard definition with the current definition.
                    308: .IP KBDSGET
                    309: Store the number of bytes available for string definitions
                    310: in the \fIint\fP pointed to by \fIarg\fP.
                    311: .IP KBDCGET
                    312: Store the current definition for 
                    313: scancode \fIkbd_scan\fP at index \fIkbd_index\fP 
                    314: in the \fIstruct kbdarg\fP pointed to by \fIarg\fP.
                    315: The keyboard
                    316: index is one of KBD_INDEX_NORMAL, KBD_INDEX_SHIFT, 
                    317: KBD_INDEX_CONTROL, KBD_INDEX_ALT or KBD_INDEX_ACTION. 
                    318: On the \fIioctl\fP, the \fIkbd_length\fP contains the maximum length to 
                    319: return; upon return it contains the actual length stored in the keyboard.
                    320: The definition is returned into \fIkbd_text\fP.
                    321: .IP KBDCSET
                    322: Store a new definition for scancode \fIkbd_scan\fP at index \fIkbd_index\fP
                    323: in the keyboard from \fIstruct kbdarg\fP pointed to by \fIarg\fP.
                    324: The keyboard index is one of KBD_INDEX_NORMAL, KBD_INDEX_SHIFT, 
                    325: KBD_INDEX_CONTROL, KBD_INDEX_ALT or KBD_INDEX_ACTION. 
                    326: \fIkbd_length\fP contains the length of the definition text
                    327: in \fIkbd_text\fP.
                    328: .IP KBDGCLICK
                    329: Store the current keyboard click status into the \fIint\fP pointed to by
                    330: \fIarg\fP. The value is one of CLICK_OFF, CLICK_HARD,
                    331: CLICK_SOFT or CLICK_BOTH.
                    332: .IP KBDSCLICK
                    333: Set the current keyboard click status from the \fIint\fP pointed to by
                    334: \fIarg\fP. The value must be one of CLICK_OFF, CLICK_HARD,
                    335: CLICK_SOFT or CLICK_BOTH.
                    336: .IP 
                    337: .SH ERRORS
                    338: The following errors can be returned by the driver:
                    339: .TP 12
                    340: [EINVAL]
                    341: The \fIkbd_scan\fP or \fIkbd_index\fP is invalid.
                    342: .TP 12
                    343: [E2BIG]
                    344: The string being defined exceeds the available space.
                    345: .TP 12
                    346: [EPERM]
                    347: The caller is not the super-user (for the KBDSSTD ioctl).
                    348: .SH FILES
                    349: /dev/console
                    350: .SH "SEE ALSO"
                    351: cons(4), ibm5151(4), ibmaed(4), tty(4), reboot(8), debug(i), pf(i)
                    352: .SH DIAGNOSTICS
                    353: None.
                    354: .SH BUGS
                    355: .PP
                    356: The console screen print function works only for the monochrome display
                    357: and the IBM Academic Information Systems experimental display.
                    358: .PP 
                    359: The only user output to the speaker is a beep (\fBbel\fR).
                    360: It should be possible to
                    361: control the speaker's frequency and duration parameters.
                    362: .PP
                    363: Caps-Lock mode should be enhanced.
                    364: Using the shift key when in Caps-Lock mode should generate lower case
                    365: letters; also, Caps-Lock should not shift non-alphabetic characters.
                    366: .PP
                    367: Num-Lock mode does not do anything; the numeric pad generates numbers 
                    368: regardless of mode.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.