Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ keyboard(7) — Interactive 2.2

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

stty(1)

console(7)

display(7)

termio(7)

ioctl(2)

ascii(5)



          keyboard(7)          INTERACTIVE UNIX System          keyboard(7)



          NAME
               keyboard - system console keyboard

          DESCRIPTION
               The system console is composed of two separate pieces:  the
               keyboard and the display (see display(7)).

               The keyboard is used to type data and to send certain con-
               trol signals to the computer.  UNIX System software performs
               terminal emulation on the console screen and keyboard, and,
               in doing so, makes use of several particular keys and key
               combinations.  These keys and key combinations have special
               names that are unique to the UNIX System and may or may not
               correspond to the keytop labels on your keyboard.

               When you press a key, one of the following happens:

                    - An ASCII value is entered.
                    - The meaning of another key, or keys, is changed.
                    - A string is sent to the computer.
                    - A function is initiated.

               When a key is pressed (a keystroke), the keyboard sends a
               scancode to the computer.  This scancode is interpreted by
               the keyboard driver.  The actual code sequence delivered to
               the terminal input routine (see termio(7)) is defined by a
               set of internal tables in the driver.  These tables can be
               modified by software (see the discussion of ioctl calls
               below).  In addition, the driver can be instructed not to do
               translations, delivering the keyboard up/down scan codes
               directly.

             Changing Meanings
               The action performed by a key can be changed by using cer-
               tain keys in combination.  For example, SHIFT changes the
               ASCII values of the alphanumeric keys.  Holding down CTRL
               while pressing another key sends a control code (such as
               CTRL d, CTRL s, and CTRL q).  Holding down ALT also modifies
               a key's value.  SHIFT, CTRL, and ALT can be used in combina-
               tion.

             Switching Screens
               To switch the current screen, hold down ALT SYSREQ (also
               labelled ALT PRINTSCRN on some systems) and a key that iden-
               tifies the desired screen.  Any active screen may be
               selected by following ALT SYSREQ with Fn, where Fn is one of
               the function keys.  F1 refers to the first virtual terminal
               screen, F2 refers to the second virtual terminal screen,
               etc.  ALT SYSREQ h and ALT SYSREQ F8 refer to the main con-
               sole display (/dev/console).  The next active screen can be
               selected with ALT SYSREQ n, and the previous screen can be
               selected with ALT SYSREQ p.



          Rev. 1.3                                                   Page 1





          keyboard(7)          INTERACTIVE UNIX System          keyboard(7)



               The default screen switch enable sequence (ALT SYSREQ ) is
               configurable.  The SYSREQ table entry can be modified by
               software (see discussion of ioctl calls below).

             Special Keys
               The following table shows which keys on a typical console
               correspond to UNIX System keys.  In this table, a hyphen (-)
               between keys means you must hold down the first key while
               pressing the second.  The mapping between characters that
               generate signals and the signal actually generated is set
               with stty(1) and may be changed (see stty(1)).












































          Rev. 1.3                                                   Page 2





          keyboard(7)          INTERACTIVE UNIX System          keyboard(7)



               __________________________________________________________
              |   Name           Keytop                 Action          |
              |_________________________________________________________|
              | INTR        DEL                Stops current action     |
              |                                and returns to the       |
              |                                shell.  This key is      |
              |                                also called the RUB      |
              |                                OUT or INTERRUPT         |
              |                                key.                     |
              | BACKSPACE   <-                 Deletes the first        |
              |                                character to the         |
              |                                left of the cursor.      |
              |                                Note that the ``cur-     |
              |                                sor left'' key also      |
              |                                has a left arrow         |
              |                                (<-) on its keytop,      |
              |                                but you cannot back-     |
              |                                space using that         |
              |                                key.                     |
              | CTRL-d      CTRL-d             Signals the end of       |
              |                                input from the key-      |
              |                                board; also exits        |
              |                                current shell.           |
              | CTRL-h      CTRL-h             Deletes the first        |
              |                                character to the         |
              |                                left of the cursor.      |
              |                                Also called the          |
              |                                ERASE key.               |
              | CTRL-q      CTRL-q             Restarts printing        |
              |                                after it has been        |
              |                                stopped with CTRL-s.     |
              | CTRL-s      CTRL-s             Suspends printing on     |
              |                                the screen (does not     |
              |                                stop the program).       |
              | CTRL-u      CTRL-u             Deletes all charac-      |
              |                                ters on the current      |
              |                                line.  Also called       |
              |                                the KILL key.            |
              | CTRL-\      CTRL-\             Quits current com-       |
              |                                mand and creates a       |
              |                                core file, if            |
              |                                allowed.  (Recom-        |
              |                                mended for debugging     |
              |                                only.)                   |
              | ESCAPE      ESC                Special code for         |
              |                                some programs.  For      |
              |                                example, changes         |
              |                                from insert mode to      |
              |                                command mode in the      |
              |                                vi(1) text editor.       |
              | RETURN      (down-left arrow   Terminates a command     |
              |_________________________________________________________|



          Rev. 1.3                                                   Page 3





          keyboard(7)          INTERACTIVE UNIX System          keyboard(7)



         |                  or ENTER)          line and initiates  |
         |                                     an action from the  |
         |                                     shell.              |
         | Fn          Fn                 Function key n.          |
         |                                F1-F12 are               |
         |                                unshifted, F13-F24       |
         |                                are shifted F1-F12,      |
         |                                F25-F36 are CTRL-F1      |
         |                                through F12, and         |
         |                                F37-F48 are CTRL-        |
         |                                SHIFT-F1 through         |
         |                                F12.                     |
         |                                The next Fn keys         |
         |                                (F49-F60) are on the     |
         |                                number pad               |
         |                                (unshifted):             |
         |                                  F49 - `7'     F55 - `6'|
         |                                  F50 - `8'     F56 - `+'|
         |                                  F51 - `9'     F57 - `1'|
         |                                  F52 - `-'    F58 - `2' |
         |                                  F53 - `4'     F59 - `3'|
         |                                  F54 - `5'     F60 - `0'|
         |_________________________________________________________|

             Keyboard Map
               The keyboard mapping structure is defined in
               /usr/include/sys/kd.h.  Each key can have ten states.  The
               first eight states are:

                   BASE
                   SHIFT
                   CTRL
                   ALT
                   CTRL-SHIFT
                   ALT-SHIFT
                   ALT-CTRL
                   ALT-CTRL-SHIFT

               The two remaining states are indicated by two special bytes.
               The first byte is a ``special state'' byte whose bits indi-
               cate whether the key is ``special'' in one or more of the
               first eight states.  The second byte is one of four codes
               represented by the characters C, N, B, or O which indicate
               how the lock keys affect the particular key.

               The following table describes the default keyboard mapping.
               All values, except for special keywords (which are described
               later), are ASCII character values.

               Heading      Description

               SCAN CODE    This column contains the index to the table.
                            Numbers 1 through 83 and 86 through 88 are


          Rev. 1.3                                                   Page 4





          keyboard(7)          INTERACTIVE UNIX System          keyboard(7)



                            actual scan codes generated by the keyboard
                            hardware when a key is pressed.  The numbers
                            that do not have an entry in the KEY LOCATION
                            column are not used.  The remaining numbers are
                            used for keys that generate a sequence of more
                            than one code.  There are no table entries for
                            the scan code generated by releasing a key.

               KEY LOCATION This column contains the location number for
                            the key on the 101-key keyboard map that pre-
                            cedes the table.  Key location 45 (scan code
                            86) is for the international 102-key keyboard
                            and is not shown (it is located between keys 44
                            and 46).

               BASE         This column contains the normal value of a key
                            press.

               SHIFT        This column contains the value of a key press
                            when the SHIFT key is also being held down.

               LOCK         This column indicates which lock keys affect
                            that particular key:
                            - C indicates CAPS-LOCK
                            - N indicates NUM-LOCK
                            - B indicates both
                            - O indicates locking is off

               The remaining columns are the values of key presses when
               combinations of CTRL, ALT, and SHIFT are also held down.

               The SRQTAB column entry is included in this table to provide
               a simple index of the default virtual terminal key selectors
               to the scan code to which it is assigned.  The actual SRQTAB
               table is a stand-alone table which can be read or written
               via the KDGKBENT and KDSKBENT ioctl calls.



















          Rev. 1.3                                                   Page 5





          keyboard(7)          INTERACTIVE UNIX System          keyboard(7)



               Assigned Location Numbers for Keys on a U.S. English (101-key) Keyboard






















































          Rev. 1.3                                                   Page 6





          keyboard(7)          INTERACTIVE UNIX System          keyboard(7)



          ______________________________________________________________________
         |                                                      ALT            |
         |SCANKEY                       CTRL        ALT   ALT   CTRL           |
         |CODELOCATIONBASE  SHIFT CTRL  SHIFT ALT   SHIFT CTRL  SHIFT LOCKSRQTAB
|
|_____________________________________________________________________| | 0 nop nop nop nop nop nop nop nop O nop | | 1 110 esc esc esc esc esc esc esc esc O nop | | 2 2 '1' '!' '1' '1' escn escn nop nop O nop | | 3 3 '2' ' ' '2' nul escn escn nop nop O | | 4 4 '3' '#' '3' '3' escn escn nop nop O nop | | 5 5 '4' '$' '4' '4' escn escn nop nop O nop | | 6 6 '5' '%' '5' '5' escn escn nop nop O nop | | 7 7 '6' '^' '6' rs escn escn nop nop O nop | | 8 8 '7' '&' '7' '7' escn escn nop nop O nop | | 9 9 '8' '*' '8' '8' escn escn nop nop O nop | | 10 10 '9' '(' '9' '9' escn escn nop nop O nop | | 11 11 '0' ')' '0' '0' escn escn nop nop O nop | | 12 12 '-' '_' '-' ns escn escn nop nop O nop | | 13 13 '=' '+' '=' '=' escn escn nop nop O nop | | 14 15 bs bs bs bs bs bs bs bs O nop | | 15 16 ht btab ht btab ht btab ht btab O nop | | 16 17 'q' 'Q' dc1 dc1 escn escn nop nop C nop | | 17 18 'w' 'W' etb etb escn escn nop nop C nop | | 18 19 'e' 'E' enq enq escn escn nop nop C nop | | 19 20 'r' 'R' dc2 dc2 escn escn nop nop C nop | | 20 21 't' 'T' dc4 dc4 escn escn nop nop C nop | | 21 22 'y' 'Y' em em escn escn nop nop C nop | | 22 23 'u' 'U' nak nak escn escn nop nop C nop | | 23 24 'i' 'I' ht ht escn escn nop nop C nop | | 24 25 'o' 'O' si si escn escn nop nop C nop | | 25 26 'p' 'P' dle dle escn escn nop nop C PREV | | 26 27 '[' '{' esc nop escn escn nop nop O nop | | 27 28 ']' '}' gs nop escn escn nop nop O nop | | 28 43 cr cr cr cr cr cr cr cr O nop | | 29 58 lctrl lctrl lctrl lctrl lctrl lctrl lctrl lctrl O nop | | 30 31 'a' 'A' soh soh escn escn nop nop C nop | | 31 32 's' 'S' dc3 dc3 escn escn nop nop C nop | | 32 33 'd' 'D' eot eot escn escn nop nop C nop | | 33 34 'f' 'F' ack ack escn escn nop nop C FNEXT| | 34 35 'g' 'G' bel bel escn escn nop nop C nop | | 35 36 'h' 'H' bs bs escn escn nop nop C VT1 | | 36 37 'j' 'J' nl nl escn escn nop nop C nop | | 37 38 'k' 'K' vt vt escn escn nop nop C nop | | 38 39 'l' 'L' np np escn escn nop nop C nop | | 39 40 ';' ':' ';' ':' escn escn nop nop O nop | | 40 41 ''' '"' ''' '"' escn escn nop nop O nop | | 41 1 '`' '~' '`' '~' escn escn nop nop O nop | | 42 44 lshiftlshiftlshiftlshiftlshiftlshiftlshiftlshiftO nop | | 43 29 '\\' '|' fs '|' escn escn nop nop O nop | |_____________________________________________________________________| Rev. 1.3 Page 7


          keyboard(7)          INTERACTIVE UNIX System          keyboard(7)



          _________________________________________________________________________________________________________
         |                                                                                  ALT                   |
         | SCAN   KEY                                   CTRL              ALT      ALT      CTRL                  |
         | CODE   LOCATION   BASE     SHIFT    CTRL     SHIFT    ALT       SHIFT   CTRL     SHIFT    LOCK   SRQTAB|
         |________________________________________________________________________________________________________|
         |  44       46      'z'      'Z'      sub      sub      escn     escn     nop      nop      C      nop   |
         |  45       47      'x'      'X'      can      can      escn     escn     nop      nop      C      nop   |
         |  46       48      'c'      'C'      etx      etx      escn     escn     nop      nop      C      nop   |
         |  47       49      'v'      'V'      syn      syn      escn     escn     nop      nop      C      nop   |
         |  48       50      'b'      'B'      stx      stx      escn     escn     nop      nop      C      nop   |
         |  49       51      'n'      'N'      so       so       escn     escn     nop      nop      C      NEXT  |
         |  50       52      'm'      'M'      cr       cr       escn     escn     nop      nop      C      nop   |
         |  51       53      ','      '<'      ','      '<'      escn     escn     nop      nop      O      nop   |
         |  52       54      '.'      '>'      '.'      '>'      escn     escn     nop      nop      O      nop   |
         |  53       55      '/'      '?'      '/'      ns       escn     escn     nop      nop      O      nop   |
         |  54       57      rshift   rshift   rshift   rshift   rshift   rshift   rshift   rshift   O      nop   |
         |  55      100      '*'      '*'      '*'      '*'      escn     escn     nop      nop      O      nop   |
         |  56       60      lalt     lalt     lalt     lalt     lalt     lalt     lalt     lalt     O      nop   |
         |  57       61      ' '      ' '      nul      nul      escn     escn     nop      nop      O      nop   |
         |  58       30      clock    clock    clock    clock    clock    clock    clock    clock    O      nop   |
         |  59      112      fkey1    fkey13   fkey25   fkey37   fkey1    fkey13   fkey25   fkey37   O      VT2   |
         |  60      113      fkey2    fkey14   fkey26   fkey38   fkey2    fkey14   fkey26   fkey38   O      VT3   |
         |  61      114      fkey3    fkey15   fkey27   fkey39   fkey3    fkey15   fkey27   fkey39   O      VT4   |
         |  62      115      fkey4    fkey16   fkey28   fkey40   fkey4    fkey16   fkey28   fkey40   O      VT5   |
         |  63      116      fkey5    fkey17   fkey29   fkey41   fkey5    fkey17   fkey29   fkey41   O      VT6   |
         |  64      117      fkey6    fkey18   fkey30   fkey42   fkey6    fkey18   fkey30   fkey42   O      VT7   |
         |  65      118      fkey7    fkey19   fkey31   fkey43   fkey7    fkey19   fkey31   fkey43   O      VT8   |
         |  66      119      fkey8    fkey20   fkey32   fkey44   fkey8    fkey20   fkey32   fkey44   O      VT1   |
         |  67      120      fkey9    fkey21   fkey33   fkey45   fkey9    fkey21   fkey33   fkey45   O      nop   |
         |  68      121      fkey10   fkey22   fkey34   fkey46   fkey10   fkey22   fkey34   fkey46   O      nop   |
         |  69       90      nlock    nlock    nlock    nlock    nlock    nlock    nlock    nlock    O      nop   |
         |  70      125      slock    slock    brk      brk      slock    slock    brk      brk      O      nop   |
         |  71       91      fkey49   '7'      fkey49   '7'      fkey49   escn     nop      nop      N      nop   |
         |  72       96      fkey50   '8'      fkey50   '8'      fkey50   escn     nop      nop      N      nop   |
         |  73      101      fkey51   '9'      fkey51   '9'      fkey51   escn     nop      nop      N      nop   |
         |  74      105      fkey52   '-'      fkey52   '-'      fkey52   escn     nop      nop      N      nop   |
         |  75       92      fkey53   '4'      fkey53   '4'      fkey53   escn     nop      nop      N      nop   |
         |  76       97      fkey54   '5'      fkey54   '5'      fkey54   escn     nop      nop      N      nop   |
         |  77      102      fkey55   '6'      fkey55   '6'      fkey55   escn     nop      nop      N      nop   |
         |  78      106      fkey56   '+'      fkey56   '+'      fkey56   escn     nop      nop      N      nop   |
         |  79       93      fkey57   '1'      fkey57   '1'      fkey57   escn     nop      nop      N      nop   |
         |  80       98      fkey58   '2'      fkey58   '2'      fkey58   escn     nop      nop      N      nop   |
         |  81      103      fkey59   '3'      fkey59   '3'      fkey59   escn     nop      nop      N      nop   |
         |  82       99      fkey60   '0'      fkey60   '0'      fkey60   escn     nop      nop      N      nop   |
         |  83      104      del      '.'      del      '.'      del      escn     rboot    nop      N      nop   |
         |  84      124      fkey60   fkey26   fkey60   nop      sysreq   sysreq   sysreq   sysreq   O      nop   |
         |  85       84      fkey58   fkey58   fkey58   fkey58   fkey58   fkey58   fkey58   fkey58   O      nop   |
         | *86       45      '<'      '>'      '<'      '>'      escn     escn     nop      nop      O      nop   |
         |  87      122      fkey11   fkey23   fkey35   fkey47   fkey11   fkey23   fkey35   fkey47   O      nop   |
         |  88      123      fkey12   fkey24   fkey36   fkey48   fkey12   fkey24   fkey36   fkey48   O      nop   |
         |________________________________________________________________________________________________________|
         |________________________________________________________________________________________________________|



          Rev. 1.3                                                   Page 8





          keyboard(7)          INTERACTIVE UNIX System          keyboard(7)





               *Applicable only for 102-key keyboard.

          ___________________________________________________________________________________________________
         |                                                                             ALT                  |
         | SCAN   KEY                                  CTRL            ALT     ALT     CTRL                 |
         | CODE   LOCATION   BASE     SHIFT    CTRL    SHIFT   ALT     SHIFT   CTRL    SHIFT   LOCK   SRQTAB|
         |__________________________________________________________________________________________________|
         |  89               nop      nop      nop     nop     nop     nop     nop     nop     O      nop   |
         |  90               nop      nop      nop     nop     nop     nop     nop     nop     O      nop   |
         |  91               nop      nop      nop     nop     nop     nop     nop     nop     O      nop   |
         |  92               nop      nop      nop     nop     nop     nop     nop     nop     O      nop   |
         |  93               nop      nop      nop     nop     nop     nop     nop     nop     O      nop   |
         |  94               nop      nop      nop     nop     nop     nop     nop     nop     O      nop   |
         |  95               nop      nop      nop     nop     nop     nop     nop     nop     O      nop   |
         |  96               nop      nop      nop     nop     nop     nop     nop     nop     O      nop   |
         |  97               nop      nop      nop     nop     nop     nop     nop     nop     O      nop   |
         |  98               nop      nop      nop     nop     nop     nop     nop     nop     O      nop   |
         |  99               nop      nop      nop     nop     nop     nop     nop     nop     O      nop   |
         | 100               nop      nop      nop     nop     nop     nop     nop     nop     O      nop   |
         | 101               nop      nop      nop     nop     nop     nop     nop     nop     O      nop   |
         | 102               nop      nop      nop     nop     nop     nop     nop     nop     O      nop   |
         | 103               nop      nop      nop     nop     nop     nop     nop     nop     O      nop   |
         | 104               nop      nop      nop     nop     nop     nop     nop     nop     O      nop   |
         | 105               nop      nop      nop     nop     nop     nop     nop     nop     O      nop   |
         | 106               nop      nop      nop     nop     nop     nop     nop     nop     O      nop   |
         | 107               nop      nop      nop     nop     nop     nop     nop     nop     O      nop   |
         | 108               nop      nop      nop     nop     nop     nop     nop     nop     O      nop   |
         | 109               nop      nop      nop     nop     nop     nop     nop     nop     O      nop   |
         | 110               nop      nop      nop     nop     nop     nop     nop     nop     O      nop   |
         | 111       85      fkey51   fkey51   nop     nop     nop     nop     nop     nop     O      nop   |
         | 112               nop      nop      nop     nop     nop     nop     nop     nop     O      nop   |
         | 113               nop      nop      nop     nop     nop     nop     nop     nop     O      nop   |
         | 114       62      ralt     ralt     ralt    ralt    ralt    ralt    ralt    ralt    O      nop   |
         | 115       64      rctrl    rctrl    rctrl   rctrl   rctrl   rctrl   rctrl   rctrl   O      nop   |
         | 116      108      cr       cr       cr      cr      cr      cr      cr      cr      O      nop   |
         | 117       95      '/'      '/'      nop     nop     escn    escn    nop     nop     O      nop   |
         | 118               nop      nop      nop     nop     nop     nop     nop     nop     O      nop   |
         | 119      126      brk      brk      brk     brk     brk     brk     brk     brk     O      nop   |
         | 120       83      fkey50   fkey50   nop     nop     nop     nop     nop     nop     O      nop   |
         | 121       76      del      del      del     del     del     del     del     del     O      nop   |
         | 122       81      fkey57   fkey57   nop     nop     nop     nop     nop     nop     O      nop   |
         | 123       75      fkey60   fkey60   nop     nop     nop     nop     nop     nop     O      nop   |
         | 124       79      fkey53   fkey53   nop     nop     nop     nop     nop     nop     O      nop   |
         | 125       89      fkey55   fkey55   nop     nop     nop     nop     nop     nop     O      nop   |
         | 126       86      fkey59   fkey59   nop     nop     nop     nop     nop     nop     O      nop   |
         | 127       80      fkey49   fkey49   nop     nop     nop     nop     nop     nop     O      nop   |
         |__________________________________________________________________________________________________|






          Rev. 1.3                                                   Page 9





          keyboard(7)          INTERACTIVE UNIX System          keyboard(7)



               The following table lists the value of each of the special
               keywords used in the preceding tables.  The keywords are
               only used in the preceding tables for readability.  In the
               actual keyboard map, a special keyword is represented by its
               value with the corresponding ``special state'' bit being
               set.

           ___________________________________________________________________
          | Name     Value   Meaning                                         |
          |__________________________________________________________________|
          | nop         0    No operation - no action from keypress          |
          | lshift      2    Left-hand shift                                 |
          | rshift      3    Right-hand shift                                |
          | clock       4    Caps lock                                       |
          | nlock       5    Numeric lock                                    |
          | slock       6    Scroll lock                                     |
          | alt         7    Alt key                                         |
          | btab        8    Back tab key - generates fixed sequence (ESC[ z)|
          | ctrl        9    Control key                                     |
          | lalt       10    Left-hand alt key                               |
          | ralt       11    Right-hand alt key                              |
          | lctrl      12    Left-hand control key                           |
          | rctrl      13    Right-hand control key                          |
          | fkey1      27    Function key #1                                 |
          | .                .                                               |
          | .                .                                               |
          | .                .                                               |
          | fkey96    122    Function key #96                                |
          | sysreq    123    System request                                  |
          | brk       124    Break key                                       |
          | escn      125    Generate an ESC N x sequence, where x is the    |
          |                  un-alt'ed value of the scan code                |
          | rboot     128    Reboot system                                   |
          | debug     129    Invoke kernel debugger                          |
          | NEXT      130    Switch to next virtual terminal on queue        |
          | PREV      131    Switch to previous virtual terminal on queue    |
          | FNEXT     132    Forced switch to next virtual terminal on queue |
          | VT1       134    Switch to virtual terminal #1                   |
          | .                .                                               |
          | .                .                                               |
          | .                .                                               |
          | VT8       141    Switch to virtual terminal #8                   |
          |__________________________________________________________________|

               The following table lists names and decimal values for ASCII
               characters in the preceding table.  Names are used in place
               of numeric constants to make it easier to read the scan code
               table.  Only the decimal values are placed in the ioctl
               buffer.  These values are taken from ascii(5).






          Rev. 1.3                                                  Page 10





          keyboard(7)          INTERACTIVE UNIX System          keyboard(7)



                            __________________________________
                           | Name   Value|  Name   Value     |
                           |_____________|___________________|
                           | nul      0  |  dc1     17       |
                           | soh      1  |  dc2     18       |
                           | stx      2  |  dc3     19       |
                           | etx      3  |  dc4     20       |
                           | eot      4  |  nak     21       |
                           | enq      5  |  syn     22       |
                           | ack      6  |  etb     23       |
                           | bel      7  |  can     24       |
                           | bs       8  |  em      25       |
                           | ht       9  |  sub     26       |
                           | nl      10  |  esc     27       |
                           | vt      11  |  fs      28       |
                           | np      12  |  gs      29       |
                           | cr      13  |  rs      30       |
                           | so      14  |  ns      31       |
                           | si      15  |  del    127       |
                           | dle     16  |                   |
                           |_____________|___________________|

             String Key Mapping
               The string mapping table is an array of 512 bytes (typedef
               strmap_t) containing null-terminated strings that redefine
               the function keys.  The first null-terminated string is
               assigned to the first function key, the second string is
               assigned to the second function key, etc.

               There is no limit to the length of any particular string as
               long as the whole table does not exceed 512 bytes, including
               nulls.  To make a string a null, add extra null characters.
               The following table contains default function key values.






















          Rev. 1.3                                                  Page 11





          keyboard(7)          INTERACTIVE UNIX System          keyboard(7)



                      ______________________________________________
                     |         Default Function Key Values         |
                     |_____________________________________________|
                     | Function              Function              |
                     |  Key #     Function    Key #     Function   |
                     |_____________________________________________|
                     |     1      ESC OP        32      ESC OW     |
                     |     2      ESC OQ        33      ESC OX     |
                     |     3      ESC OR        34      ESC OY     |
                     |     4      ESC OS        35      ESC OZ     |
                     |     5      ESC OT        36      ESC OA     |
                     |     6      ESC OU        37      ESC Op     |
                     |     7      ESC OV        38      ESC Oq     |
                     |     8      ESC OW        39      ESC Or     |
                     |     9      ESC OX        40      ESC Os     |
                     |    10      ESC OY        41      ESC Ot     |
                     |    11      ESC OZ        42      ESC Ou     |
                     |    12      ESC OA        43      ESC Ov     |
                     |    13      ESC Op        44      ESC Ow     |
                     |    14      ESC Oq        45      ESC Ox     |
                     |    15      ESC Or        46      ESC Oy     |
                     |    16      ESC Os        47      ESC Oz     |
                     |    17      ESC Ot        48      ESC Oa     |
                     |    18      ESC Ou        49      ESC [H     |
                     |    19      ESC Ov        50      ESC [A     |
                     |    20      ESC Ow        51      ESC [V     |
                     |    21      ESC Ox        52      ESC [S     |
                     |    22      ESC Oy        53      ESC [D     |
                     |    23      ESC Oz        54      ESC [G     |
                     |    24      ESC Oa        55      ESC [C     |
                     |    25      ESC OP        56      ESC [T     |
                     |    26      ESC OQ        57      ESC [Y     |
                     |    27      ESC OR        58      ESC [B     |
                     |    28      ESC OS        59      ESC [U     |
                     |    29      ESC OT        60      ESC [@     |
                     |    30      ESC OU        61      ESC [2     |
                     |    31      ESC OV                           |
                     |_____________________________________________|

             Ioctl Calls
               KDGKBMODE
                    This call gets the current keyboard mode.  It returns
                    one of the following values, as defined in
                    /usr/include/sys/kd.h:

                 #define        K_RAW0x00/* Send raw scan codes */
                 #define        K_XLATE0x01/* Translate to ASCII */

               KDSKBMODE
                    This call sets the keyboard mode.  The argument to the
                    call is either K_RAW or K_XLATE.  By using raw mode,
                    the program can see the raw up/down scan codes from the
                    keyboard.  In translate mode, the translation tables


          Rev. 1.3                                                  Page 12





          keyboard(7)          INTERACTIVE UNIX System          keyboard(7)



                    are used to generate the appropriate character code.

               KDGKBTYPE
                    This call gets the keyboard type.  It returns one of
                    the following values, as defined in
                    /usr/include/sys/kd.h:

                 #define        KB_840x00/*84 key keyboard*/
                 #define        KB_1010x01/*101 key keyboard*/
                 #define        KB_OTHER0x03/*Other type keyboard*/

               KDGKBENT
                    This call reads one of the entries in the translation
                    tables.  The argument to the call is the address of one
                    of the following structures, defined in
                    /usr/include/sys/kd.h, with the first two fields filled
                    in:

                struct kbentry {
                 unchar kb_table;    /* Table to use */
                 unchar kb_index;    /* Entry in table */
                 ushort kb_value;    /* Value to get/set */
                };

                    Valid values for the kb_table field are:

                 #define           K_NORMTAB0x00/* Base */
                 #define           K_SHIFTTAB0x01/* Shifted */
                 #define           K_ALTTAB0x02/* Alt */
                 #define           K_ALTSHIFTTAB0x03/* Shifted alt */
                 #define           K_SRQTAB0x04/* Sysreq table */

                    The ioctl will get the indicated entry from the indi-
                    cated table and return it in the kb_value field.

                    The kb_value field is 16 bits, with flags in the high-
                    order 8 bits and the character code in the low-order 8
                    bits.  The values that can be set in the flag byte, as
                    defined in /usr/include/sys/kd.h, are as follows:

               /* Flag bits */
               #define        NUMLCK 0x8000/* key is affected by num lock */
               #define        CAPLCK 0x4000/* key is affected by caps lock */
               #define        CTLKEY 0x2000/* key is affected by control key */
               /* Key types */
               #define        NORMKEY0x0000/* key is a normal key */
               #define        SHIFTKEY0x0100/* key is a shift key */
               #define        BREAKKEY0x0200/* key is a break key */
               #define        SS2PFX 0x0300/* prefix key with <ESC> N */
               #define        SS3PFX 0x0400/* prefix key with <ESC> O */
               #define        CSIPFX 0x0500/* prefix key with <ESC> [ */
               #define        NOKEY  0x0f00/* key sends nothing */



          Rev. 1.3                                                  Page 13





          keyboard(7)          INTERACTIVE UNIX System          keyboard(7)



               KDSKBENT
                    This call sets an entry in one of the translation
                    tables.  It uses the same structure as the KDGKBENT
                    ioctl, but with the third field filled in with the
                    value that should be placed in the translation table.
                    This can be used to partially or completely remap the
                    keyboard.

               The kd driver provides support for virtual terminals.  Two
               ioctls are provided for virtual terminal support:

               VT_GETSTATE
                    The VT_GETSTATE ioctl returns global virtual terminal
                    state information.  It returns the active virtual ter-
                    minal in the v_active field, and the number of active
                    virtual terminals and a bit mask of the global state in
                    the vt_state field, where ``bit x'' is the state of
                    ``vt x'' (1 indicates that the virtual terminal is
                    open).

               VT_SENDSIG
                    The VT_SENDSIG ioctl specifies a signal (in vt_signal)
                    to be sent to a bit mask of virtual terminals (in
                    vt_state).

               The data structure used by the VT_GETSTATE and VT_SENDSIG
               ioctls is:
               struct vt_stat {
                 ushort v_active;/* active vt */
                 ushort v_signal;/* signal to send (VT_SENDSIG) */
                 ushort v_state;/* vt bit mask (VT_SENDSIG and VT_GETSTATE) */
               };
               and is defined in /usr/include/sys/vt.h.

               VT_OPENQRY
                    The VT_OPENQRY ioctl is used to get the next available
                    virtual terminal.  This value is set in the last argu-
                    ment of the ioctl(2) call.

               GIO_KEYMAP
                    This call gets the entire keyboard mapping table from
                    the kernel.  The structure of the argument is given in
                    /usr/include/sys/kd.h.

               PIO_KEYMAP
                    This call sets the entire keyboard mapping table.  The
                    structure of the argument is given in
                    /usr/include/sys/kd.h.

               GIO_STRMAP
                    This call gets the string key mapping table from the
                    kernel.  The structure of the argument is given in
                    /usr/include/sys/kd.h.


          Rev. 1.3                                                  Page 14





          keyboard(7)          INTERACTIVE UNIX System          keyboard(7)



               PIO_STRMAP
                    This call sets the string key mapping table.  The
                    structure of the argument is given in
                    /usr/include/sys/kd.h.

               TIOCKBOF
                    Extended character codes are disabled.  This is the
                    default mode.

               TIOCKBON
                    Allows extended characters to be transmitted to the
                    user program.  The extended characters are transmitted
                    as a null byte followed by a second byte containing the
                    character's extended code.  When a true null byte is
                    sent, it is transmitted as two consecutive null bytes.

               KDSETRAD
                    This call allows the application to set the keyboard
                    typematic rate and delay.  The default value is 0x20,
                    which sets the keyboard at 30 characters per second
                    with a 1/2-second start-up delay.  For other allowable
                    values, refer to the IBM Technical Reference Manual.

               When the keyboard is fully enabled, an 8-bit character code
               can be obtained by holding down the ALT key and entering the
               3-digit decimal value of the character from the numeric
               keypad.  The character is transmitted when the ALT key is
               released.

               Some keyboard characters have special meaning.  Under
               default operations, pressing the DELETE key generates an
               interrupt signal which is sent to all processes designated
               with the associated control terminal.  When the keyboard is
               fully enabled, holding down the ALT key and pressing the 8
               key on the home keyboard (not on the numeric keypad) returns
               a null byte followed by 0x7F.  This will produce the same
               effect as the DELETE key (0x7F) unless you have executed the
               stty(1) command with the -isig option.

               KBENABLED
                    If the keyboard is fully enabled (TIOCKBON), a nonzero
                    value will be returned.  If the keyboard is not fully
                    enabled (TIOCKBOF), a value of zero will be returned.

               GETFKEY
                    Obtains the current definition of a function key.  The
                    argument to the call is the address of one of the fol-
                    lowing structures defined in /usr/include/sys/kd.h:

               struct fkeyarg {
                unsigned int        keynum;
                char    keydef [MAXFK];/*Comes from ioctl.h via comcrt.h*/
                char    flen;


          Rev. 1.3                                                  Page 15





          keyboard(7)          INTERACTIVE UNIX System          keyboard(7)



               };

                    The function key number must be passed in keynum (see
                    arg structure above).  The string currently assigned to
                    the key will be returned in keydef, and the length of
                    the string will be returned in flen when the ioctl is
                    performed.

               SETFKEY
                    Assigns a given string to a function key.  It uses the
                    same structure as the GETFKEY ioctl.  The function key
                    number must be passed in keynum, the string must be
                    passed in keydef, and the length of the string (number
                    of characters) must be passed in flen.

          FILES
               /dev/console
               /dev/vt00-n
               /usr/include/sys/kd.h

          SEE ALSO
               stty(1), console(7), display(7), termio(7),
               ioctl(2), ascii(5) in the INTERACTIVE SDS Guide and
               Programmer's Reference Manual.

          ADDED VALUE
               This entry, supplied by INTERACTIVE Systems Corporation,
               contains enhancements to UNIX System V.



























          Rev. 1.3                                                  Page 16



Typewritten Software • bear@typewritten.org • Edmonds, WA 98026