Home | History | Annotate | Line # | Download | only in html
      1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
      2 <html>
      3   <head>
      4     <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
      5     <title>File Index</title>
      6     <link href="doxygen.css" rel="stylesheet" type="text/css">
      7   </head>
      8   <body>
      9 <!-- Generated by Doxygen 1.7.4 -->
     10   <div id="navrow1" class="tabs">
     11     <ul class="tablist">
     12       <li><a href="index.html"><span>Main&#160;Page</span></a></li>
     13       <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
     14       <li class="current"><a href="files.html"><span>Files</span></a></li>
     15     </ul>
     16   </div>
     17   <div id="navrow2" class="tabs2">
     18     <ul class="tablist">
     19       <li><a href="files.html"><span>File&#160;List</span></a></li>
     20       <li><a href="globals.html"><span>Globals</span></a></li>
     21     </ul>
     22   </div>
     23 </div>
     24 <div id="side-nav" class="ui-resizable side-nav-resizable">
     25   <div id="nav-tree">
     26     <div id="nav-tree-contents">
     27     </div>
     28   </div>
     29   <div id="splitbar" style="-moz-user-select:none;" 
     30        class="ui-resizable-handle">
     31   </div>
     32 </div>
     33 <script type="text/javascript">
     34   initNavTree('usb-keyboard_8c.html','');
     35 </script>
     36 <div id="doc-content">
     37 <div class="header">
     38   <div class="summary">
     39 <a href="#define-members">Defines</a> &#124;
     40 <a href="#func-members">Functions</a> &#124;
     41 <a href="#var-members">Variables</a>  </div>
     42   <div class="headertitle">
     43 <div class="title">usb-keyboard.c File Reference</div>  </div>
     44 </div>
     45 <div class="contents">
     46 <div class="textblock"><code>#include &quot;atKeynames.h&quot;</code><br/>
     47 <code>#include &quot;<a class="el" href="usb-private_8h_source.html">usb-private.h</a>&quot;</code><br/>
     48 <code>#include &quot;<a class="el" href="usb-keyboard_8h_source.html">usb-keyboard.h</a>&quot;</code><br/>
     49 <code>#include &lt;xkbsrv.h&gt;</code><br/>
     50 </div><table class="memberdecls">
     51 <tr><td colspan="2"><h2><a name="define-members"></a>
     52 Defines</h2></td></tr>
     53 <tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a6a3bdd45bcb120470819f4ef1ffabc57">USB_KEYBOARD_DEBUG</a>&#160;&#160;&#160;0</td></tr>
     54 <tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a></td></tr>
     55 <tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a837722a322e811d5e42242655f277b87">LOG0</a>(f)&#160;&#160;&#160;dmxLog(dmxDebug,f)</td></tr>
     56 <tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#aab4b3434c36117a2ecdddec40716d97a">LOG1</a>(f, a)&#160;&#160;&#160;dmxLog(dmxDebug,f,a)</td></tr>
     57 <tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a16da5d597d9bfb9e569a9bfb6996382c">LOG2</a>(f, a, b)&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b)</td></tr>
     58 <tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a8247f0bca25789d2ac27674eb26e223f">LOG3</a>(f, a, b, c)&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b,c)</td></tr>
     59 <tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a6bce6020b913db8afe5d94bc63d1b355">FATAL0</a>(f)&#160;&#160;&#160;dmxLog(dmxFatal,f)</td></tr>
     60 <tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">FATAL1</a>(f, a)&#160;&#160;&#160;dmxLog(dmxFatal,f,a)</td></tr>
     61 <tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a7952c9e9fe9c75be4964fc53a4299183">FATAL2</a>(f, a, b)&#160;&#160;&#160;dmxLog(dmxFatal,f,a,b)</td></tr>
     62 <tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a11a17082bee3b1b8217ce8a12adcf814">MOTIONPROC</a>&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a></td></tr>
     63 <tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a017080ce5e42667a6582cf858e7185cd">ENQUEUEPROC</a>&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a></td></tr>
     64 <tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#aa35a985e998ad5e2187e13434dca118a">CHECKPROC</a>&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a></td></tr>
     65 <tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a52220397ecea855b3a99746e451426e1">BLOCK</a>&#160;&#160;&#160;<a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a></td></tr>
     66 <tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a6238ada986dd7e452a89773c2252a96d">GLYPHS_PER_KEY</a>&#160;&#160;&#160;4</td></tr>
     67 <tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a6dbb3fc1c4a78ddba8904d186c8b2784">NUM_KEYCODES</a>&#160;&#160;&#160;248</td></tr>
     68 <tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a4204c7bd1b89b76ee0bd11d53741d4e6">MIN_KEYCODE</a>&#160;&#160;&#160;8</td></tr>
     69 <tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#ac769af5d0ea9b1ab3a1cd61572f8f302">MAX_KEYCODE</a>&#160;&#160;&#160;(NUM_KEYCODES + MIN_KEYCODE - 1)</td></tr>
     70 <tr><td colspan="2"><h2><a name="func-members"></a>
     71 Functions</h2></td></tr>
     72 <tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#ac5b3c28b56eee8c08253f2c93247c2fb">kbdUSBKeyDown</a> (<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv, int keyCode)</td></tr>
     73 <tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a31da2502826ab88638635abb2b719cae">kbdUSBKeyState</a> (<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv, int type, int keyCode)</td></tr>
     74 <tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a0e9cdd2a76b14cad8a054f2e6e1dbc08">kbdUSBCtrl</a> (DevicePtr pDev, KeybdCtrl *ctrl)</td></tr>
     75 <tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a294cdaa0f31f5f463562c72107b569f2">kbdUSBInit</a> (DevicePtr pDev)</td></tr>
     76 <tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a1bdbc94af66450a58735130ce8b994d0">kbdUSBConvert</a> (DevicePtr pDev, unsigned int scanCode, int value, ENQUEUEPROC enqueue, CHECKPROC checkspecial, BLOCK block)</td></tr>
     77 <tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a75d61db123cbd10084ecdee9f18a30bf">kbdUSBRead</a> (DevicePtr pDev, MOTIONPROC motion, ENQUEUEPROC enqueue, CHECKPROC checkspecial, BLOCK block)</td></tr>
     78 <tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#ab1326e68df2758918fd0e9aa06387424">kbdUSBOn</a> (DevicePtr pDev)</td></tr>
     79 <tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#accd75bb2b1ea015ca086fb41c472546b">kbdUSBGetMap</a> (DevicePtr pDev, KeySymsPtr pKeySyms, CARD8 *pModMap)</td></tr>
     80 <tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a2513592fe5b9c9f0cafcb299c6531d50">kbdUSBGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
     81 <tr><td colspan="2"><h2><a name="var-members"></a>
     82 Variables</h2></td></tr>
     83 <tr><td class="memItemLeft" align="right" valign="top">static KeySym&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a2187a19657fb0b38c67dbafc7dd74c4d">map</a> [NUM_KEYCODES *GLYPHS_PER_KEY]</td></tr>
     84 </table>
     85 <hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
     86 <div class="textblock"><p>This code implements a low-level device driver for a USB keyboard under Linux. The keymap description is derived from code by Thomas Roell, Orest Zborowski. </p>
     87 </div><hr/><h2>Define Documentation</h2>
     88 <a class="anchor" id="a52220397ecea855b3a99746e451426e1"></a><!-- doxytag: member="usb&#45;keyboard.c::BLOCK" ref="a52220397ecea855b3a99746e451426e1" args="" -->
     89 <div class="memitem">
     90 <div class="memproto">
     91       <table class="memname">
     92         <tr>
     93           <td class="memname">#define BLOCK&#160;&#160;&#160;<a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a></td>
     94         </tr>
     95       </table>
     96 </div>
     97 <div class="memdoc">
     98 
     99 </div>
    100 </div>
    101 <a class="anchor" id="aa35a985e998ad5e2187e13434dca118a"></a><!-- doxytag: member="usb&#45;keyboard.c::CHECKPROC" ref="aa35a985e998ad5e2187e13434dca118a" args="" -->
    102 <div class="memitem">
    103 <div class="memproto">
    104       <table class="memname">
    105         <tr>
    106           <td class="memname">#define CHECKPROC&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a></td>
    107         </tr>
    108       </table>
    109 </div>
    110 <div class="memdoc">
    111 
    112 </div>
    113 </div>
    114 <a class="anchor" id="a017080ce5e42667a6582cf858e7185cd"></a><!-- doxytag: member="usb&#45;keyboard.c::ENQUEUEPROC" ref="a017080ce5e42667a6582cf858e7185cd" args="" -->
    115 <div class="memitem">
    116 <div class="memproto">
    117       <table class="memname">
    118         <tr>
    119           <td class="memname">#define ENQUEUEPROC&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a></td>
    120         </tr>
    121       </table>
    122 </div>
    123 <div class="memdoc">
    124 
    125 </div>
    126 </div>
    127 <a class="anchor" id="a6bce6020b913db8afe5d94bc63d1b355"></a><!-- doxytag: member="usb&#45;keyboard.c::FATAL0" ref="a6bce6020b913db8afe5d94bc63d1b355" args="(f)" -->
    128 <div class="memitem">
    129 <div class="memproto">
    130       <table class="memname">
    131         <tr>
    132           <td class="memname">#define FATAL0</td>
    133           <td>(</td>
    134           <td class="paramtype">&#160;</td>
    135           <td class="paramname">f</td><td>)</td>
    136           <td>&#160;&#160;&#160;dmxLog(dmxFatal,f)</td>
    137         </tr>
    138       </table>
    139 </div>
    140 <div class="memdoc">
    141 
    142 </div>
    143 </div>
    144 <a class="anchor" id="a11bcea7c6bc7dbe400a3855f5b8676ce"></a><!-- doxytag: member="usb&#45;keyboard.c::FATAL1" ref="a11bcea7c6bc7dbe400a3855f5b8676ce" args="(f, a)" -->
    145 <div class="memitem">
    146 <div class="memproto">
    147       <table class="memname">
    148         <tr>
    149           <td class="memname">#define FATAL1</td>
    150           <td>(</td>
    151           <td class="paramtype">&#160;</td>
    152           <td class="paramname">f, </td>
    153         </tr>
    154         <tr>
    155           <td class="paramkey"></td>
    156           <td></td>
    157           <td class="paramtype">&#160;</td>
    158           <td class="paramname">a&#160;</td>
    159         </tr>
    160         <tr>
    161           <td></td>
    162           <td>)</td>
    163           <td></td><td>&#160;&#160;&#160;dmxLog(dmxFatal,f,a)</td>
    164         </tr>
    165       </table>
    166 </div>
    167 <div class="memdoc">
    168 
    169 </div>
    170 </div>
    171 <a class="anchor" id="a7952c9e9fe9c75be4964fc53a4299183"></a><!-- doxytag: member="usb&#45;keyboard.c::FATAL2" ref="a7952c9e9fe9c75be4964fc53a4299183" args="(f, a, b)" -->
    172 <div class="memitem">
    173 <div class="memproto">
    174       <table class="memname">
    175         <tr>
    176           <td class="memname">#define FATAL2</td>
    177           <td>(</td>
    178           <td class="paramtype">&#160;</td>
    179           <td class="paramname">f, </td>
    180         </tr>
    181         <tr>
    182           <td class="paramkey"></td>
    183           <td></td>
    184           <td class="paramtype">&#160;</td>
    185           <td class="paramname">a, </td>
    186         </tr>
    187         <tr>
    188           <td class="paramkey"></td>
    189           <td></td>
    190           <td class="paramtype">&#160;</td>
    191           <td class="paramname">b&#160;</td>
    192         </tr>
    193         <tr>
    194           <td></td>
    195           <td>)</td>
    196           <td></td><td>&#160;&#160;&#160;dmxLog(dmxFatal,f,a,b)</td>
    197         </tr>
    198       </table>
    199 </div>
    200 <div class="memdoc">
    201 
    202 </div>
    203 </div>
    204 <a class="anchor" id="aacf069d346230dd96812d5395728eef2"></a><!-- doxytag: member="usb&#45;keyboard.c::GETPRIV" ref="aacf069d346230dd96812d5395728eef2" args="" -->
    205 <div class="memitem">
    206 <div class="memproto">
    207       <table class="memname">
    208         <tr>
    209           <td class="memname">#define GETPRIV</td>
    210         </tr>
    211       </table>
    212 </div>
    213 <div class="memdoc">
    214 <b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="struct__myPrivate.html">myPrivate</a> *priv                            \
    215                       = ((<a class="code" href="dmxinput_8h.html#adb148db00fe0adf1938b815b9b934d26">DMXLocalInputInfoPtr</a>)(pDev-&gt;devicePrivate))-&gt;private
    216 </pre></div>
    217 <p>Referenced by <a class="el" href="usb-keyboard_8c.html#a1bdbc94af66450a58735130ce8b994d0">kbdUSBConvert()</a>, <a class="el" href="usb-keyboard_8h.html#a0e9cdd2a76b14cad8a054f2e6e1dbc08">kbdUSBCtrl()</a>, <a class="el" href="usb-keyboard_8h.html#ab1326e68df2758918fd0e9aa06387424">kbdUSBOn()</a>, and <a class="el" href="usb-keyboard_8c.html#a75d61db123cbd10084ecdee9f18a30bf">kbdUSBRead()</a>.</p>
    218 
    219 </div>
    220 </div>
    221 <a class="anchor" id="a6238ada986dd7e452a89773c2252a96d"></a><!-- doxytag: member="usb&#45;keyboard.c::GLYPHS_PER_KEY" ref="a6238ada986dd7e452a89773c2252a96d" args="" -->
    222 <div class="memitem">
    223 <div class="memproto">
    224       <table class="memname">
    225         <tr>
    226           <td class="memname">#define GLYPHS_PER_KEY&#160;&#160;&#160;4</td>
    227         </tr>
    228       </table>
    229 </div>
    230 <div class="memdoc">
    231 
    232 <p>Referenced by <a class="el" href="lnx-keyboard_8c.html#ad3e8695c18469949e1ed00f7cd8055a5">kbdLinuxGetMap()</a>, <a class="el" href="lnx-keyboard_8c.html#acc3cbed3f7e836f032b2e131baeb4800">kbdLinuxReadKernelMapping()</a>, and <a class="el" href="usb-keyboard_8c.html#accd75bb2b1ea015ca086fb41c472546b">kbdUSBGetMap()</a>.</p>
    233 
    234 </div>
    235 </div>
    236 <a class="anchor" id="a837722a322e811d5e42242655f277b87"></a><!-- doxytag: member="usb&#45;keyboard.c::LOG0" ref="a837722a322e811d5e42242655f277b87" args="(f)" -->
    237 <div class="memitem">
    238 <div class="memproto">
    239       <table class="memname">
    240         <tr>
    241           <td class="memname">#define LOG0</td>
    242           <td>(</td>
    243           <td class="paramtype">&#160;</td>
    244           <td class="paramname">f</td><td>)</td>
    245           <td>&#160;&#160;&#160;dmxLog(dmxDebug,f)</td>
    246         </tr>
    247       </table>
    248 </div>
    249 <div class="memdoc">
    250 
    251 </div>
    252 </div>
    253 <a class="anchor" id="aab4b3434c36117a2ecdddec40716d97a"></a><!-- doxytag: member="usb&#45;keyboard.c::LOG1" ref="aab4b3434c36117a2ecdddec40716d97a" args="(f, a)" -->
    254 <div class="memitem">
    255 <div class="memproto">
    256       <table class="memname">
    257         <tr>
    258           <td class="memname">#define LOG1</td>
    259           <td>(</td>
    260           <td class="paramtype">&#160;</td>
    261           <td class="paramname">f, </td>
    262         </tr>
    263         <tr>
    264           <td class="paramkey"></td>
    265           <td></td>
    266           <td class="paramtype">&#160;</td>
    267           <td class="paramname">a&#160;</td>
    268         </tr>
    269         <tr>
    270           <td></td>
    271           <td>)</td>
    272           <td></td><td>&#160;&#160;&#160;dmxLog(dmxDebug,f,a)</td>
    273         </tr>
    274       </table>
    275 </div>
    276 <div class="memdoc">
    277 
    278 </div>
    279 </div>
    280 <a class="anchor" id="a16da5d597d9bfb9e569a9bfb6996382c"></a><!-- doxytag: member="usb&#45;keyboard.c::LOG2" ref="a16da5d597d9bfb9e569a9bfb6996382c" args="(f, a, b)" -->
    281 <div class="memitem">
    282 <div class="memproto">
    283       <table class="memname">
    284         <tr>
    285           <td class="memname">#define LOG2</td>
    286           <td>(</td>
    287           <td class="paramtype">&#160;</td>
    288           <td class="paramname">f, </td>
    289         </tr>
    290         <tr>
    291           <td class="paramkey"></td>
    292           <td></td>
    293           <td class="paramtype">&#160;</td>
    294           <td class="paramname">a, </td>
    295         </tr>
    296         <tr>
    297           <td class="paramkey"></td>
    298           <td></td>
    299           <td class="paramtype">&#160;</td>
    300           <td class="paramname">b&#160;</td>
    301         </tr>
    302         <tr>
    303           <td></td>
    304           <td>)</td>
    305           <td></td><td>&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b)</td>
    306         </tr>
    307       </table>
    308 </div>
    309 <div class="memdoc">
    310 
    311 </div>
    312 </div>
    313 <a class="anchor" id="a8247f0bca25789d2ac27674eb26e223f"></a><!-- doxytag: member="usb&#45;keyboard.c::LOG3" ref="a8247f0bca25789d2ac27674eb26e223f" args="(f, a, b, c)" -->
    314 <div class="memitem">
    315 <div class="memproto">
    316       <table class="memname">
    317         <tr>
    318           <td class="memname">#define LOG3</td>
    319           <td>(</td>
    320           <td class="paramtype">&#160;</td>
    321           <td class="paramname">f, </td>
    322         </tr>
    323         <tr>
    324           <td class="paramkey"></td>
    325           <td></td>
    326           <td class="paramtype">&#160;</td>
    327           <td class="paramname">a, </td>
    328         </tr>
    329         <tr>
    330           <td class="paramkey"></td>
    331           <td></td>
    332           <td class="paramtype">&#160;</td>
    333           <td class="paramname">b, </td>
    334         </tr>
    335         <tr>
    336           <td class="paramkey"></td>
    337           <td></td>
    338           <td class="paramtype">&#160;</td>
    339           <td class="paramname">c&#160;</td>
    340         </tr>
    341         <tr>
    342           <td></td>
    343           <td>)</td>
    344           <td></td><td>&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b,c)</td>
    345         </tr>
    346       </table>
    347 </div>
    348 <div class="memdoc">
    349 
    350 <p>Referenced by <a class="el" href="usb-keyboard_8c.html#a75d61db123cbd10084ecdee9f18a30bf">kbdUSBRead()</a>.</p>
    351 
    352 </div>
    353 </div>
    354 <a class="anchor" id="ac769af5d0ea9b1ab3a1cd61572f8f302"></a><!-- doxytag: member="usb&#45;keyboard.c::MAX_KEYCODE" ref="ac769af5d0ea9b1ab3a1cd61572f8f302" args="" -->
    355 <div class="memitem">
    356 <div class="memproto">
    357       <table class="memname">
    358         <tr>
    359           <td class="memname">#define MAX_KEYCODE&#160;&#160;&#160;(NUM_KEYCODES + MIN_KEYCODE - 1)</td>
    360         </tr>
    361       </table>
    362 </div>
    363 <div class="memdoc">
    364 
    365 <p>Referenced by <a class="el" href="lnx-keyboard_8c.html#ad3e8695c18469949e1ed00f7cd8055a5">kbdLinuxGetMap()</a>, and <a class="el" href="usb-keyboard_8c.html#accd75bb2b1ea015ca086fb41c472546b">kbdUSBGetMap()</a>.</p>
    366 
    367 </div>
    368 </div>
    369 <a class="anchor" id="a4204c7bd1b89b76ee0bd11d53741d4e6"></a><!-- doxytag: member="usb&#45;keyboard.c::MIN_KEYCODE" ref="a4204c7bd1b89b76ee0bd11d53741d4e6" args="" -->
    370 <div class="memitem">
    371 <div class="memproto">
    372       <table class="memname">
    373         <tr>
    374           <td class="memname">#define MIN_KEYCODE&#160;&#160;&#160;8</td>
    375         </tr>
    376       </table>
    377 </div>
    378 <div class="memdoc">
    379 
    380 <p>Referenced by <a class="el" href="lnx-keyboard_8c.html#a6338eb254610cdbf7942ad91f23c36fe">kbdLinuxConvert()</a>, <a class="el" href="lnx-keyboard_8c.html#ad3e8695c18469949e1ed00f7cd8055a5">kbdLinuxGetMap()</a>, <a class="el" href="usb-keyboard_8c.html#a1bdbc94af66450a58735130ce8b994d0">kbdUSBConvert()</a>, and <a class="el" href="usb-keyboard_8c.html#accd75bb2b1ea015ca086fb41c472546b">kbdUSBGetMap()</a>.</p>
    381 
    382 </div>
    383 </div>
    384 <a class="anchor" id="a11a17082bee3b1b8217ce8a12adcf814"></a><!-- doxytag: member="usb&#45;keyboard.c::MOTIONPROC" ref="a11a17082bee3b1b8217ce8a12adcf814" args="" -->
    385 <div class="memitem">
    386 <div class="memproto">
    387       <table class="memname">
    388         <tr>
    389           <td class="memname">#define MOTIONPROC&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a></td>
    390         </tr>
    391       </table>
    392 </div>
    393 <div class="memdoc">
    394 
    395 </div>
    396 </div>
    397 <a class="anchor" id="a6dbb3fc1c4a78ddba8904d186c8b2784"></a><!-- doxytag: member="usb&#45;keyboard.c::NUM_KEYCODES" ref="a6dbb3fc1c4a78ddba8904d186c8b2784" args="" -->
    398 <div class="memitem">
    399 <div class="memproto">
    400       <table class="memname">
    401         <tr>
    402           <td class="memname">#define NUM_KEYCODES&#160;&#160;&#160;248</td>
    403         </tr>
    404       </table>
    405 </div>
    406 <div class="memdoc">
    407 
    408 <p>Referenced by <a class="el" href="lnx-keyboard_8c.html#ad3e8695c18469949e1ed00f7cd8055a5">kbdLinuxGetMap()</a>, and <a class="el" href="usb-keyboard_8c.html#accd75bb2b1ea015ca086fb41c472546b">kbdUSBGetMap()</a>.</p>
    409 
    410 </div>
    411 </div>
    412 <a class="anchor" id="a6a3bdd45bcb120470819f4ef1ffabc57"></a><!-- doxytag: member="usb&#45;keyboard.c::USB_KEYBOARD_DEBUG" ref="a6a3bdd45bcb120470819f4ef1ffabc57" args="" -->
    413 <div class="memitem">
    414 <div class="memproto">
    415       <table class="memname">
    416         <tr>
    417           <td class="memname">#define USB_KEYBOARD_DEBUG&#160;&#160;&#160;0</td>
    418         </tr>
    419       </table>
    420 </div>
    421 <div class="memdoc">
    422 
    423 </div>
    424 </div>
    425 <hr/><h2>Function Documentation</h2>
    426 <a class="anchor" id="a1bdbc94af66450a58735130ce8b994d0"></a><!-- doxytag: member="usb&#45;keyboard.c::kbdUSBConvert" ref="a1bdbc94af66450a58735130ce8b994d0" args="(DevicePtr pDev, unsigned int scanCode, int value, ENQUEUEPROC enqueue, CHECKPROC checkspecial, BLOCK block)" -->
    427 <div class="memitem">
    428 <div class="memproto">
    429       <table class="memname">
    430         <tr>
    431           <td class="memname">static void kbdUSBConvert </td>
    432           <td>(</td>
    433           <td class="paramtype">DevicePtr&#160;</td>
    434           <td class="paramname"><em>pDev</em>, </td>
    435         </tr>
    436         <tr>
    437           <td class="paramkey"></td>
    438           <td></td>
    439           <td class="paramtype">unsigned int&#160;</td>
    440           <td class="paramname"><em>scanCode</em>, </td>
    441         </tr>
    442         <tr>
    443           <td class="paramkey"></td>
    444           <td></td>
    445           <td class="paramtype">int&#160;</td>
    446           <td class="paramname"><em>value</em>, </td>
    447         </tr>
    448         <tr>
    449           <td class="paramkey"></td>
    450           <td></td>
    451           <td class="paramtype">ENQUEUEPROC&#160;</td>
    452           <td class="paramname"><em>enqueue</em>, </td>
    453         </tr>
    454         <tr>
    455           <td class="paramkey"></td>
    456           <td></td>
    457           <td class="paramtype">CHECKPROC&#160;</td>
    458           <td class="paramname"><em>checkspecial</em>, </td>
    459         </tr>
    460         <tr>
    461           <td class="paramkey"></td>
    462           <td></td>
    463           <td class="paramtype">BLOCK&#160;</td>
    464           <td class="paramname"><em>block</em>&#160;</td>
    465         </tr>
    466         <tr>
    467           <td></td>
    468           <td>)</td>
    469           <td></td><td><code> [static]</code></td>
    470         </tr>
    471       </table>
    472 </div>
    473 <div class="memdoc">
    474 
    475 <p>References <a class="el" href="usb-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, <a class="el" href="lnx-keyboard_8c.html#a508da29b3082d7901ebf5c7397bd1a88">kbdLinuxKeyDown()</a>, <a class="el" href="usb-keyboard_8c.html#ac5b3c28b56eee8c08253f2c93247c2fb">kbdUSBKeyDown()</a>, <a class="el" href="usb-keyboard_8c.html#a31da2502826ab88638635abb2b719cae">kbdUSBKeyState()</a>, and <a class="el" href="usb-keyboard_8c.html#a4204c7bd1b89b76ee0bd11d53741d4e6">MIN_KEYCODE</a>.</p>
    476 
    477 <p>Referenced by <a class="el" href="usb-keyboard_8c.html#a75d61db123cbd10084ecdee9f18a30bf">kbdUSBRead()</a>.</p>
    478 
    479 </div>
    480 </div>
    481 <a class="anchor" id="a0e9cdd2a76b14cad8a054f2e6e1dbc08"></a><!-- doxytag: member="usb&#45;keyboard.c::kbdUSBCtrl" ref="a0e9cdd2a76b14cad8a054f2e6e1dbc08" args="(DevicePtr pDev, KeybdCtrl *ctrl)" -->
    482 <div class="memitem">
    483 <div class="memproto">
    484       <table class="memname">
    485         <tr>
    486           <td class="memname">void kbdUSBCtrl </td>
    487           <td>(</td>
    488           <td class="paramtype">DevicePtr&#160;</td>
    489           <td class="paramname"><em>pDev</em>, </td>
    490         </tr>
    491         <tr>
    492           <td class="paramkey"></td>
    493           <td></td>
    494           <td class="paramtype">KeybdCtrl *&#160;</td>
    495           <td class="paramname"><em>ctrl</em>&#160;</td>
    496         </tr>
    497         <tr>
    498           <td></td>
    499           <td>)</td>
    500           <td></td><td></td>
    501         </tr>
    502       </table>
    503 </div>
    504 <div class="memdoc">
    505 <p>Set the LEDs. </p>
    506 
    507 <p>References <a class="el" href="usb-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>.</p>
    508 
    509 </div>
    510 </div>
    511 <a class="anchor" id="a2513592fe5b9c9f0cafcb299c6531d50"></a><!-- doxytag: member="usb&#45;keyboard.c::kbdUSBGetInfo" ref="a2513592fe5b9c9f0cafcb299c6531d50" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
    512 <div class="memitem">
    513 <div class="memproto">
    514       <table class="memname">
    515         <tr>
    516           <td class="memname">void kbdUSBGetInfo </td>
    517           <td>(</td>
    518           <td class="paramtype">DevicePtr&#160;</td>
    519           <td class="paramname"><em>pDev</em>, </td>
    520         </tr>
    521         <tr>
    522           <td class="paramkey"></td>
    523           <td></td>
    524           <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
    525           <td class="paramname"><em>info</em>&#160;</td>
    526         </tr>
    527         <tr>
    528           <td></td>
    529           <td>)</td>
    530           <td></td><td></td>
    531         </tr>
    532       </table>
    533 </div>
    534 <div class="memdoc">
    535 <p>Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>. </p>
    536 
    537 <p>References <a class="el" href="struct__DMXLocalInitInfo.html#a24b09c34e0cf80ec33f093e908206be4">_DMXLocalInitInfo::focusClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#abb7446114b5bdb0baf52806c9a1d249c">_DMXLocalInitInfo::force</a>, <a class="el" href="struct__DMXLocalInitInfo.html#af19caac0e20a9106b73714c9c7991ce5">_DMXLocalInitInfo::kbdFeedbackClass</a>, <a class="el" href="usb-keyboard_8c.html#accd75bb2b1ea015ca086fb41c472546b">kbdUSBGetMap()</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a214969f0843dcb70d8f7577f58bafa48">_DMXLocalInitInfo::keyboard</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a06626a99542714bbd032e9e12a8c6b55">_DMXLocalInitInfo::keyClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a02861e7e9c24381a229567d36e7a68b7">_DMXLocalInitInfo::keySyms</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a2e345080abf875ce6f85e63ed631cbcd">_DMXLocalInitInfo::modMap</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a92de3dbbb88844f90aa431f93e16ee05">_DMXLocalInitInfo::names</a>.</p>
    538 
    539 </div>
    540 </div>
    541 <a class="anchor" id="accd75bb2b1ea015ca086fb41c472546b"></a><!-- doxytag: member="usb&#45;keyboard.c::kbdUSBGetMap" ref="accd75bb2b1ea015ca086fb41c472546b" args="(DevicePtr pDev, KeySymsPtr pKeySyms, CARD8 *pModMap)" -->
    542 <div class="memitem">
    543 <div class="memproto">
    544       <table class="memname">
    545         <tr>
    546           <td class="memname">static void kbdUSBGetMap </td>
    547           <td>(</td>
    548           <td class="paramtype">DevicePtr&#160;</td>
    549           <td class="paramname"><em>pDev</em>, </td>
    550         </tr>
    551         <tr>
    552           <td class="paramkey"></td>
    553           <td></td>
    554           <td class="paramtype">KeySymsPtr&#160;</td>
    555           <td class="paramname"><em>pKeySyms</em>, </td>
    556         </tr>
    557         <tr>
    558           <td class="paramkey"></td>
    559           <td></td>
    560           <td class="paramtype">CARD8 *&#160;</td>
    561           <td class="paramname"><em>pModMap</em>&#160;</td>
    562         </tr>
    563         <tr>
    564           <td></td>
    565           <td>)</td>
    566           <td></td><td><code> [static]</code></td>
    567         </tr>
    568       </table>
    569 </div>
    570 <div class="memdoc">
    571 
    572 <p>References <a class="el" href="usb-keyboard_8c.html#a6238ada986dd7e452a89773c2252a96d">GLYPHS_PER_KEY</a>, <a class="el" href="usb-keyboard_8c.html#a2187a19657fb0b38c67dbafc7dd74c4d">map</a>, <a class="el" href="usb-keyboard_8c.html#ac769af5d0ea9b1ab3a1cd61572f8f302">MAX_KEYCODE</a>, <a class="el" href="usb-keyboard_8c.html#a4204c7bd1b89b76ee0bd11d53741d4e6">MIN_KEYCODE</a>, and <a class="el" href="usb-keyboard_8c.html#a6dbb3fc1c4a78ddba8904d186c8b2784">NUM_KEYCODES</a>.</p>
    573 
    574 <p>Referenced by <a class="el" href="usb-keyboard_8h.html#a2513592fe5b9c9f0cafcb299c6531d50">kbdUSBGetInfo()</a>.</p>
    575 
    576 </div>
    577 </div>
    578 <a class="anchor" id="a294cdaa0f31f5f463562c72107b569f2"></a><!-- doxytag: member="usb&#45;keyboard.c::kbdUSBInit" ref="a294cdaa0f31f5f463562c72107b569f2" args="(DevicePtr pDev)" -->
    579 <div class="memitem">
    580 <div class="memproto">
    581       <table class="memname">
    582         <tr>
    583           <td class="memname">void kbdUSBInit </td>
    584           <td>(</td>
    585           <td class="paramtype">DevicePtr&#160;</td>
    586           <td class="paramname"><em>pDev</em></td><td>)</td>
    587           <td></td>
    588         </tr>
    589       </table>
    590 </div>
    591 <div class="memdoc">
    592 <p>Initialize <em>pDev</em> using <a class="el" href="usb-common_8h.html#a7f9b3a6d320a9ddbed689f4e12acb443">usbInit</a>. </p>
    593 
    594 <p>References <a class="el" href="usb-common_8c.html#a7f9b3a6d320a9ddbed689f4e12acb443">usbInit()</a>, and <a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0ac0ee79f0c48b61dfd08fff502a2752a3">usbKeyboard</a>.</p>
    595 
    596 <p>Referenced by <a class="el" href="usb-keyboard_8h.html#ab1326e68df2758918fd0e9aa06387424">kbdUSBOn()</a>.</p>
    597 
    598 </div>
    599 </div>
    600 <a class="anchor" id="ac5b3c28b56eee8c08253f2c93247c2fb"></a><!-- doxytag: member="usb&#45;keyboard.c::kbdUSBKeyDown" ref="ac5b3c28b56eee8c08253f2c93247c2fb" args="(myPrivate *priv, int keyCode)" -->
    601 <div class="memitem">
    602 <div class="memproto">
    603       <table class="memname">
    604         <tr>
    605           <td class="memname">static int kbdUSBKeyDown </td>
    606           <td>(</td>
    607           <td class="paramtype"><a class="el" href="struct__myPrivate.html">myPrivate</a> *&#160;</td>
    608           <td class="paramname"><em>priv</em>, </td>
    609         </tr>
    610         <tr>
    611           <td class="paramkey"></td>
    612           <td></td>
    613           <td class="paramtype">int&#160;</td>
    614           <td class="paramname"><em>keyCode</em>&#160;</td>
    615         </tr>
    616         <tr>
    617           <td></td>
    618           <td>)</td>
    619           <td></td><td><code> [static]</code></td>
    620         </tr>
    621       </table>
    622 </div>
    623 <div class="memdoc">
    624 
    625 <p>References <a class="el" href="struct__myPrivate.html#a35c7b19223e75cef1eebc0467fb2514d">_myPrivate::kbdState</a>, and <a class="el" href="lnx-keyboard_8c.html#a4551482d17e969e4de70a669be3afc74">NUM_STATE_ENTRIES</a>.</p>
    626 
    627 <p>Referenced by <a class="el" href="usb-keyboard_8c.html#a1bdbc94af66450a58735130ce8b994d0">kbdUSBConvert()</a>.</p>
    628 
    629 </div>
    630 </div>
    631 <a class="anchor" id="a31da2502826ab88638635abb2b719cae"></a><!-- doxytag: member="usb&#45;keyboard.c::kbdUSBKeyState" ref="a31da2502826ab88638635abb2b719cae" args="(myPrivate *priv, int type, int keyCode)" -->
    632 <div class="memitem">
    633 <div class="memproto">
    634       <table class="memname">
    635         <tr>
    636           <td class="memname">static void kbdUSBKeyState </td>
    637           <td>(</td>
    638           <td class="paramtype"><a class="el" href="struct__myPrivate.html">myPrivate</a> *&#160;</td>
    639           <td class="paramname"><em>priv</em>, </td>
    640         </tr>
    641         <tr>
    642           <td class="paramkey"></td>
    643           <td></td>
    644           <td class="paramtype">int&#160;</td>
    645           <td class="paramname"><em>type</em>, </td>
    646         </tr>
    647         <tr>
    648           <td class="paramkey"></td>
    649           <td></td>
    650           <td class="paramtype">int&#160;</td>
    651           <td class="paramname"><em>keyCode</em>&#160;</td>
    652         </tr>
    653         <tr>
    654           <td></td>
    655           <td>)</td>
    656           <td></td><td><code> [static]</code></td>
    657         </tr>
    658       </table>
    659 </div>
    660 <div class="memdoc">
    661 
    662 <p>References <a class="el" href="struct__myPrivate.html#a35c7b19223e75cef1eebc0467fb2514d">_myPrivate::kbdState</a>, and <a class="el" href="lnx-keyboard_8c.html#a4551482d17e969e4de70a669be3afc74">NUM_STATE_ENTRIES</a>.</p>
    663 
    664 <p>Referenced by <a class="el" href="usb-keyboard_8c.html#a1bdbc94af66450a58735130ce8b994d0">kbdUSBConvert()</a>.</p>
    665 
    666 </div>
    667 </div>
    668 <a class="anchor" id="ab1326e68df2758918fd0e9aa06387424"></a><!-- doxytag: member="usb&#45;keyboard.c::kbdUSBOn" ref="ab1326e68df2758918fd0e9aa06387424" args="(DevicePtr pDev)" -->
    669 <div class="memitem">
    670 <div class="memproto">
    671       <table class="memname">
    672         <tr>
    673           <td class="memname">int kbdUSBOn </td>
    674           <td>(</td>
    675           <td class="paramtype">DevicePtr&#160;</td>
    676           <td class="paramname"><em>pDev</em></td><td>)</td>
    677           <td></td>
    678         </tr>
    679       </table>
    680 </div>
    681 <div class="memdoc">
    682 <p>Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>). </p>
    683 
    684 <p>References <a class="el" href="usb-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, and <a class="el" href="usb-keyboard_8c.html#a294cdaa0f31f5f463562c72107b569f2">kbdUSBInit()</a>.</p>
    685 
    686 </div>
    687 </div>
    688 <a class="anchor" id="a75d61db123cbd10084ecdee9f18a30bf"></a><!-- doxytag: member="usb&#45;keyboard.c::kbdUSBRead" ref="a75d61db123cbd10084ecdee9f18a30bf" args="(DevicePtr pDev, MOTIONPROC motion, ENQUEUEPROC enqueue, CHECKPROC checkspecial, BLOCK block)" -->
    689 <div class="memitem">
    690 <div class="memproto">
    691       <table class="memname">
    692         <tr>
    693           <td class="memname">void kbdUSBRead </td>
    694           <td>(</td>
    695           <td class="paramtype">DevicePtr&#160;</td>
    696           <td class="paramname"><em>pDev</em>, </td>
    697         </tr>
    698         <tr>
    699           <td class="paramkey"></td>
    700           <td></td>
    701           <td class="paramtype">MOTIONPROC&#160;</td>
    702           <td class="paramname"><em>motion</em>, </td>
    703         </tr>
    704         <tr>
    705           <td class="paramkey"></td>
    706           <td></td>
    707           <td class="paramtype">ENQUEUEPROC&#160;</td>
    708           <td class="paramname"><em>enqueue</em>, </td>
    709         </tr>
    710         <tr>
    711           <td class="paramkey"></td>
    712           <td></td>
    713           <td class="paramtype">CHECKPROC&#160;</td>
    714           <td class="paramname"><em>checkspecial</em>, </td>
    715         </tr>
    716         <tr>
    717           <td class="paramkey"></td>
    718           <td></td>
    719           <td class="paramtype">BLOCK&#160;</td>
    720           <td class="paramname"><em>block</em>&#160;</td>
    721         </tr>
    722         <tr>
    723           <td></td>
    724           <td>)</td>
    725           <td></td><td></td>
    726         </tr>
    727       </table>
    728 </div>
    729 <div class="memdoc">
    730 <p>Read an event from the <em>pDev</em> device. If the event is a motion event, enqueue it with the <em>motion</em> function. Otherwise, check for special keys with the <em>checkspecial</em> function and enqueue the event with the <em>enqueue</em> function. The <em>block</em> type is passed to the functions so that they may block SIGIO handling as appropriate to the caller of this function. </p>
    731 
    732 <p>References <a class="el" href="usb-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, <a class="el" href="usb-keyboard_8c.html#a1bdbc94af66450a58735130ce8b994d0">kbdUSBConvert()</a>, and <a class="el" href="usb-keyboard_8c.html#a8247f0bca25789d2ac27674eb26e223f">LOG3</a>.</p>
    733 
    734 </div>
    735 </div>
    736 <hr/><h2>Variable Documentation</h2>
    737 <a class="anchor" id="a2187a19657fb0b38c67dbafc7dd74c4d"></a><!-- doxytag: member="usb&#45;keyboard.c::map" ref="a2187a19657fb0b38c67dbafc7dd74c4d" args="[NUM_KEYCODES *GLYPHS_PER_KEY]" -->
    738 <div class="memitem">
    739 <div class="memproto">
    740       <table class="memname">
    741         <tr>
    742           <td class="memname">KeySym <a class="el" href="usb-keyboard_8c.html#a2187a19657fb0b38c67dbafc7dd74c4d">map</a>[NUM_KEYCODES *GLYPHS_PER_KEY]<code> [static]</code></td>
    743         </tr>
    744       </table>
    745 </div>
    746 <div class="memdoc">
    747 
    748 <p>Referenced by <a class="el" href="lnx-keyboard_8c.html#ad3e8695c18469949e1ed00f7cd8055a5">kbdLinuxGetMap()</a>, <a class="el" href="lnx-keyboard_8c.html#acc3cbed3f7e836f032b2e131baeb4800">kbdLinuxReadKernelMapping()</a>, and <a class="el" href="usb-keyboard_8c.html#accd75bb2b1ea015ca086fb41c472546b">kbdUSBGetMap()</a>.</p>
    749 
    750 </div>
    751 </div>
    752 </div>
    753 </div>
    754   <div id="nav-path" class="navpath">
    755     <ul>
    756       <li class="navelem"><a class="el" href="usb-keyboard_8c.html">usb-keyboard.c</a>      </li>
    757     <hr>
    758     <address>
    759       <small>
    760         Generated June 29, 2004 for <a
    761         href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
    762         <a href="http://www.doxygen.org/index.html">doxygen</a>
    763         1.3.4.
    764       </small>
    765     </addres>
    766     </hr>
    767   </body>
    768 </html>
    769