Annotation of coherent/a/usr/man/COHERENT/keyboardtables, revision 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.