Annotation of coherent/a/usr/man/COHERENT/keyboardtables, revision 1.1.1.1

1.1       root        1: 
                      2: 
                      3: keyboard tables       Technical Information       keyboard tables
                      4: 
                      5: 
                      6: 
                      7: 
                      8: How to write a keyboard table
                      9: 
                     10: 
                     11: The  COHERENT device-driver  nnkkbb supports  industry-standard 83-,
                     12: 101-, and 102-key  AT-protocol keyboards attached as the computer
                     13: console.
                     14: 
                     15: nnkkbb  lets you  define both  the  layout of  the keyboard  and the
                     16: values  returned by  function keys.   You  can change  layout and
                     17: function-key  bindings  by  using  the special  keyboard  mapping
                     18: programs kept in directory /ccoonnff/kkbbdd. This directory contains the
                     19: C source code for the mapping  tables, as well as a MMaakkeeffiillee that
                     20: helps you rebuild the mapping programs.
                     21: 
                     22: Before you  begin to write or modify  an existing keyboard table,
                     23: be sure to read  throroughly this article and the Lexicon article
                     24: on nnkkbb. If you do not, you may foul up the keyboard so thoroughly
                     25: that it will not work well enough for you to undo your mistake!
                     26: 
                     27: ***** Operational  Overview ***** The device  driver nnkkbb provides
                     28: the system's  portion of the  interface to the  console keyboard.
                     29: It  handles hardware-specific details,  such as  initializing the
                     30: keyboard  and  internal   state,  handling  keyboard  interrupts,
                     31: processing key scan codes, and queueing characters.
                     32: 
                     33: The user half  of the keyboard interface is provided  by a set of
                     34: stand-alone  utilities.   With these,  you  can  program the  nnkkbb
                     35: driver  via specialized  iiooccttll() calls.   These  utilities differ
                     36: from each  other only in  the keyboard binding  or mapping tables
                     37: each uses.  You can  re-construct the interface to the nnkkbb driver
                     38: by  modifying a  keyboard-mapping file and  then using  a support
                     39: module to link that file to the driver.
                     40: 
                     41: The  keyboard-mapping  file  is  a  C  program that  consists  of
                     42: initialized  tables  and strings.   In  addition, several  header
                     43: files provide the scan codes and other constants required for the
                     44: key tables.   This format makes  the file easy to  edit, and also
                     45: lets you enter characters in several different formats.
                     46: 
                     47: The  support  module, in  turn,  performs  several tasks.   These
                     48: include   scanning   the   keyboard-mapping  file   for   errors,
                     49: reformatting the table for  use by the device driver, and passing
                     50: the reformatted table to the driver.
                     51: 
                     52: ***** Key Mapping Files *****
                     53: 
                     54: By convention, directory  /ccoonnff/kkbbdd contains the keyboard-mapping
                     55: files, executables, and a  MMaakkeeffiillee that you use to construct the
                     56: executables from the corresponding source files.
                     57: 
                     58: A keyboard-mapping  source file consists primarily  of three data
                     59: structures  that you  must  modify to  support  a given  keyboard
                     60: mapping.  The first, and simplest, of the structures is ttbbll_nnaammee.
                     61: This  is a  character string  that  describes the  keyboard.  For
                     62: 
                     63: 
                     64: COHERENT Lexicon                                           Page 1
                     65: 
                     66: 
                     67: 
                     68: 
                     69: keyboard tables       Technical Information       keyboard tables
                     70: 
                     71: 
                     72: 
                     73: example,  the   stock  101-key   US  AT  keyboard   mapping  file
                     74: /ccoonnff/kkbbdd/uuss.cc initializes this string to:
                     75: 
                     76: 
                     77:         "U.S. AT keyboard table"
                     78: 
                     79: 
                     80: The  second data  structure, kkbbttbbll,  is  an array  of key-mapping
                     81: entries.   It  has  one entry  (or  row)  for  each possible  key
                     82: location.  Each  entry in this  structure consists of  11 fields,
                     83: which hold,  respectively, the key number,  nine possible mapping
                     84: values, and a mode  field.  The following example is for physical
                     85: key location 3 from key-mapping source file /ccoonnff/kkbbdd/bbeellggiiaann.cc:
                     86: 
                     87: 
                     88:         { K_3, 0x82, '2', none, none, 0x82, '2', '~', none, '~', O|T },
                     89: 
                     90: 
                     91: Field 1 contains  the _s_c_a_n _c_o_d_e _s_e_t _3 code  value for the desired
                     92: key.  Header  file <ssyyss/kkbbssccaann.hh> contains  symbolic constants of
                     93: the form KK__n_n_n that map the AT keyboard's _p_h_y_s_i_c_a_l key number _n_n_n
                     94: to  the corresponding  scan  code set  3 value  generated by  the
                     95: keyboard.  In the  above example, KK_33 corresponds to key location
                     96: three.
                     97: 
                     98: Fields 2 through 10 contain the key mappings corresponding to the
                     99: following shift states, as follows:
                    100: 
                    101: 
                    102:          2   base or unshifted
                    103:          3   SSHHIIFFTT
                    104:          4   CCOONNTTRROOLL
                    105:          5   CCOONNTTRROOLL+SSHHIIFFTT
                    106:          6   AALLTT
                    107:          7   AALLTT+SSHHIIFFTT
                    108:          8   AALLTT+CCOONNTTRROOLL
                    109:          9   AALLTT+CCOONNTTRROOLL+SSHHIIFFTT
                    110:         10   AALLTT_GGRRAAPPHHIICC
                    111: 
                    112: 
                    113: For ``regular'' keys, the values for these nine fields are eight-
                    114: bit  characters; for  ``function''  or ``shift''  keys, they  are
                    115: special values.   The symbolic  constant nnoonnee indicates  that you
                    116: want no  output when  the key is  pressed in the  specified shift
                    117: state.
                    118: 
                    119: In the case of a function  key, the value specified is the number
                    120: of the  desired function key.   Header file <ssyyss/kkbb.hh>  defines a
                    121: set of symbolic constants of the form ff_n, where  _n is the desired
                    122: function key  number.  You should use  these constants; they will
                    123: improve the readability of  your code, and they will protect your
                    124: keyboard  mapping source  files from  any  future changes  in the
                    125: structure of the keyboard driver.
                    126: 
                    127: 
                    128: 
                    129: 
                    130: COHERENT Lexicon                                           Page 2
                    131: 
                    132: 
                    133: 
                    134: 
                    135: keyboard tables       Technical Information       keyboard tables
                    136: 
                    137: 
                    138: 
                    139: In  the  case  of a  ``shift''  key,  all  nine  entries must  be
                    140: identical  and must  consist  of one  of  the following  symbolic
                    141: constants: ssccrroollll, nnuumm,  ccaappss, llaalltt, rraalltt, llsshhiifftt, rrsshhiifftt, llccttrrll,
                    142: rrccttrrll, or aallttggrr. These are defined in the <ssyyss/kkbb.hh> header file.
                    143: Note that  83-key XT-layout  keyboards only have  one ``control''
                    144: and  ``alt''  key,  so  not  all  shift-key combinations  may  be
                    145: possible on your target keyboard.
                    146: 
                    147: The last  (11th) field  in the key  entry is the  ``mode'' field.
                    148: The following symbolic  constants specify the mode of the current
                    149: key:
                    150: 
                    151: CC    The ccaappss lock key affects this key.
                    152: 
                    153: FF    The  specified key  is a ``function''  or special  key.  The
                    154:      value of  all mapping entries must  name function keys.  See
                    155:      header file <kkbb.hh> for a list of predefined function keys.
                    156: 
                    157: MM    Make: use this mode with keys that do not repeat.  Note that
                    158:      accidentally using  this mode with ``shift''  keys will stop
                    159:      you from being able to ``unshift'' upon releasing the key!
                    160: 
                    161: MMBB   Make/Break: use this mode with ``shift'' keys.
                    162: 
                    163: NN    The nnuumm lock key affects this key.
                    164: 
                    165: OO    The  specified key  is ``regular''  and requires  no special
                    166:      processing.
                    167: 
                    168: SS    The specified key is a ``shift'' or ``lock'' key.  Note that
                    169:      all mapping entries for a  given key must be identical for a
                    170:      ``shift'' or ``lock'' key to work correctly.
                    171: 
                    172: TT    Typematic:   this  type   is  usually   associated   with  a
                    173:      ``regular'' key.
                    174: 
                    175: TTMMBB  Typematic/Make/Break.
                    176: 
                    177: The  above   example  specifies  a  mode   field  of  OO|TT,  which
                    178: corresponds to  a ``regular'' key  with Typematic repeat,  and no
                    179: special handling of the ``lock'' keys.
                    180: 
                    181: The  last  data  structure,  ffuunnkkeeyy,  consists  of  an  array  of
                    182: function-key   initializers,   one   per   function   key.    The
                    183: initializers  are simple  quoted character  strings  delimited by
                    184: either  hexadecimal value  00xxFFFF,  octal value  \337777, or  symbolic
                    185: constant DDEELLIIMM. Note that any other  value can be used as part of
                    186: a function-key  binding.  Function keys are  numbered starting at
                    187: zero.  By convention,  function key 0, when enabled, reboots your
                    188: computer.  For traditional  reasons, this function key is usually
                    189: bound to the key sequence <ccttrrll><aalltt><ddeell>.
                    190: 
                    191: Function keys  are useful not only in the  classical sense of the
                    192: programmable function keys on the keyboard, but also as a general
                    193: purpose   mechanism  for   binding  arbitrary   length  character
                    194: 
                    195: 
                    196: COHERENT Lexicon                                           Page 3
                    197: 
                    198: 
                    199: 
                    200: 
                    201: keyboard tables       Technical Information       keyboard tables
                    202: 
                    203: 
                    204: 
                    205: sequences  to a  given key.  For  example, physical  key location
                    206: sixteen is  usually associated with  the <ttaabb> and  <bbaacckk ttaabb> on
                    207: the  AT  keyboard.   For  example,  /ccoonnff/kkbbdd/uuss.cc sets  the  key
                    208: mapping table entry for key 16 as follows:
                    209: 
                    210: 
                    211: { K_16, f42, f43, none, none, f42, f43, none, none, none, F|T },
                    212: 
                    213: 
                    214: For traditional reasons,  the <bbaacckk ttaabb> key outputs the sequence
                    215: <eesscc>[ZZ whereas  the <ttaabb> key simply  outputs the horizontal-tab
                    216: character <ccttrrll-II>.   Because at least one  of the mapping values
                    217: for this  key is more  than one character  long, the key  must be
                    218: defined as  a ``function''  key and all  entries for the  the key
                    219: must  correspond  to  function-key  numbers.   In  this  example,
                    220: function key  number 42  was chosen  for <ttaabb>, and  function key
                    221: number 43 was chosen for <bbaacckk ttaabb>.  The constant nnoonnee indicates
                    222: that you want no output when  the key is pressed in the specified
                    223: shift state.  The corresponding ffuunnkkeeyy initialization entries for
                    224: function keys ff4422 and ff4433 are as follows:
                    225: 
                    226: 
                    227: /* 42 */      "\t\377",          /* Tab */
                    228: /* 43 */      "\033[Z\377",      /* Back Tab */
                    229: 
                    230: 
                    231: We  strongly   recommend  that  you   comment  your  function-key
                    232: bindings.
                    233: 
                    234: You can also  change function-key bindings via the command ffnnkkeeyy.
                    235: This command lets  you temporarily alter one or more function-key
                    236: mappings without changing your key-mapping sources.
                    237: 
                    238: ***** Building New Binaries *****
                    239: 
                    240: After you  have modified an existing  keyboard-mapping table, use
                    241: the following commands to rebuild the corresponding executables:
                    242: 
                    243: 
                    244: cd /conf/kbd
                    245: su root
                    246: make
                    247: 
                    248: 
                    249: If you  have created a new keyboard mapping  table, you must edit
                    250: /ccoonnff/kkbbdd/MMaakkeeffiillee.   Duplicate  an   existing  entry   from  the
                    251: MMaakkeeffiillee, and  change the  duplicated name  to match the  name of
                    252: your new  keyboard-mapping table.   After you have  finished your
                    253: editing,  build an  executable from  your  source file  by simply
                    254: executing the above series of commands.
                    255: 
                    256: To  load your  new keyboard  table, simply type  the name  of the
                    257: executable that  corresponds to your  keyboard-mapping file.  For
                    258: example,  if you  just built executable  ffrreenncchh from  source file
                    259: ffrreenncchh.cc, type the following command:
                    260: 
                    261: 
                    262: COHERENT Lexicon                                           Page 4
                    263: 
                    264: 
                    265: 
                    266: 
                    267: keyboard tables       Technical Information       keyboard tables
                    268: 
                    269: 
                    270: 
                    271: 
                    272: 
                    273: /conf/kbd/french
                    274: 
                    275: 
                    276: If the  keyboard-support module finds an error,  it will print an
                    277: appropriate message.   If it finds no errors,  it will update the
                    278: internal  tables  of  the  nnkkbb  keyboard  driver,  reprogram  the
                    279: keyboard, and print a message of the form:
                    280: 
                    281: 
                    282: Loaded French AT keyboard table
                    283: 
                    284: 
                    285: ***** Examples *****
                    286: 
                    287: Prior to the release  of the 101- and 102-key, enhanced-layout AT
                    288: keyboards, the <ccttrrll> key was  positioned to the left of `A' key.
                    289: Most  terminals also  locate  the <ccttrrll>  key  there.  The  first
                    290: example shows how to swap the left <ccttrrll> key and the <ccaappss-lloocckk>
                    291: key  on a  101-  and 102-key  keyboard.  The  <ccaappss-lloocckk> key  is
                    292: physical key 30, whereas the  left <ccttrrll> key is physical key 58.
                    293: Their respective  entries in file /ccoonnff/kkbbdd/uuss.cc  source file are
                    294: as follows:
                    295: 
                    296: 
                    297: { K_30, caps, caps, caps, caps, caps, caps, caps, caps, caps,  S|M },
                    298: { K_58, lctrl,lctrl,lctrl,lctrl,lctrl,lctrl,lctrl,lctrl,lctrl, S|MB },
                    299: 
                    300: 
                    301: Note that the  <ccaappss-lloocckk> key is defined with mode  MM as it is a
                    302: ``lock''  key.    The  keyboard   will  interrupt  only   on  key
                    303: depressions, because releasing a ``lock'' key has no effect.  The
                    304: left <ccttrrll> key is defined with mode MMBB as it is a ``shift'' key.
                    305: The keyboard  generates an interrupt  on both key  depression and
                    306: key release, because the driver must track the state of this key.
                    307: 
                    308: To swap the aforementioned keys, simply change all occurrences of
                    309: ccaappss  to  llccttrrll and  vice-versa,  as well  as  swapping the  mode
                    310: fields.  After making the changes, the entries now appear as:
                    311: 
                    312: 
                    313: { K_30, lctrl,lctrl,lctrl,lctrl,lctrl,lctrl,lctrl,lctrl,lctrl, S|MB },
                    314: { K_58, caps, caps, caps, caps, caps, caps, caps, caps, caps,  S|M  },
                    315: 
                    316: 
                    317: The second  example converts a 101- or  102-key keyboard table to
                    318: support  an  XT-style  83-key  keyboard  layout.   The  following
                    319: section  summarizes   the  ``typical''  differences   found  when
                    320: comparing the  two keyboard layouts.  Needless  to say, given the
                    321: extreme variety in keyboard designs, your mileage may vary.
                    322: 
                    323: 
                    324: 
                    325: 
                    326: 
                    327: 
                    328: COHERENT Lexicon                                           Page 5
                    329: 
                    330: 
                    331: 
                    332: 
                    333: keyboard tables       Technical Information       keyboard tables
                    334: 
                    335: 
                    336: 
                    337:       _P_h_y_s_i_c_a_l     _1_0_1/_1_0_2        _8_3-_k_e_y
                    338:       _L_o_c_a_t_i_o_n      _V_a_l_u_e          _V_a_l_u_e        _C_o_m_m_e_n_t_s
                    339:          14          nnoonnee         _v_a_r_i_o_u_s       Keyboard specific
                    340:          30          ccaappss          llccttrrll
                    341:          58         llccttrrll          llaalltt
                    342:          64         rrccttrrll          ccaappss
                    343:          65          nnoonnee            ff22         Function Key
                    344:          66          nnoonnee            ff44         Function Key
                    345:          67          nnoonnee            ff66         Function Key
                    346:          68          nnoonnee            ff88         Function Key
                    347:          69          nnoonnee           ff1100         Function Key
                    348:          70          nnoonnee            ff11         Function Key
                    349:          71          nnoonnee            ff33         Function Key
                    350:          72          nnoonnee            ff55         Function Key
                    351:          73          nnoonnee            ff77         Function Key
                    352:          74          nnoonnee            ff99         Function Key
                    353:          90          nnuumm            eesscc
                    354:          95          `/'            nnuumm
                    355:          100         `*'          ssccrroollll
                    356:          105         `-'            nnoonnee        <SSyyssRReeqq> not used
                    357:          106         `+'            '*'
                    358:          107         nnoonnee           '-'
                    359:          108       <eenntteerr>          '+'
                    360:          110         eesscc            nnoonnee        Not on XT layout
                    361:        112-123      FF11-FF1122          nnoonnee        Not on XT layout
                    362:          124         nnoonnee           nnoonnee        <PPrrttSSccrr> not used
                    363:          125        ssccrroollll          nnoonnee        Not on XT layout
                    364:          126         nnoonnee           nnoonnee        <PPaauussee> not used
                    365: 
                    366: 
                    367: ***** See Also *****
                    368: 
                    369: ddeevviiccee ddrriivveerrss, ffnnkkeeyy, nnkkbb
                    370: 
                    371: ***** Notes *****
                    372: 
                    373: Key 14, if used, varies considerably among keyboard models.
                    374: 
                    375: The  location of  the key  that contains  characters `\'  and `|'
                    376: varies among 101-key US-layout keyboards.
                    377: 
                    378: When  designing  keyboard  tables  for  keyboards  that  use  the
                    379: AALLTT_GGRRAAPPHHIICC shift key, for reasons of backwards compatibility you
                    380: should allow  the use of combination shift  AALLTT+CCTTRRLL as a synonym
                    381: for AALLTT_GGRRAAPPHHIICC.
                    382: 
                    383: 
                    384: 
                    385: 
                    386: 
                    387: 
                    388: 
                    389: 
                    390: 
                    391: 
                    392: 
                    393: 
                    394: COHERENT Lexicon                                           Page 6
                    395: 
                    396: 

unix.superglobalmegacorp.com

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