26 lines
6.3 KiB
HTML
26 lines
6.3 KiB
HTML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The Be Book - Special Topics - The Keyboard</title><link rel="stylesheet" href="be_book.css" type="text/css" media="all" /><link rel="shortcut icon" type="image/vnd.microsoft.icon" href="./images/favicon.ico" /><!--[if IE]>
|
||
<link rel="stylesheet" type="text/css" href="be_book_ie.css" />
|
||
<![endif]--><meta name="generator" content="DocBook XSL Stylesheets V1.73.2" /><meta name="keywords" content="Access, BeOS, BeBook, API" /><link rel="start" href="index.html" title="The Be Book" /><link rel="up" href="TheKeyboard.html" title="The Keyboard" /><link rel="prev" href="TheKeyboard_KeyCodes.html" title="Key Codes" /><link rel="next" href="TheTracker.html" title="The Tracker" /></head><body><div id="header"><div id="headerT"><div id="headerTL"><a accesskey="p" href="TheKeyboard_KeyCodes.html" title="Key Codes"><img src="./images/navigation/prev.png" alt="Prev" /></a> <a accesskey="u" href="TheKeyboard.html" title="The Keyboard"><img src="./images/navigation/up.png" alt="Up" /></a> <a accesskey="n" href="TheTracker.html" title="The Tracker"><img src="./images/navigation/next.png" alt="Next" /></a></div><div id="headerTR"><div id="navigpeople"><a href="http://www.haiku-os.org"><img src="./images/People_24.png" alt="haiku-os.org" title="Visit The Haiku Website" /></a></div><div class="navighome" title="Home"><a accesskey="h" href="index.html"><img src="./images/navigation/home.png" alt="Home" /></a></div><div class="navigboxed" id="navigindex"><a accesskey="i" href="ClassIndex.html" title="Index">I</a></div><div class="navigboxed" id="naviglang" title="English">en</div></div><div id="headerTC">The Be Book - Special Topics - The Keyboard</div></div><div id="headerB">Prev: <a href="TheKeyboard_KeyCodes.html">Key Codes</a> Up: <a href="TheKeyboard.html">The Keyboard</a> Next: <a href="TheTracker.html">The Tracker</a></div><hr /></div><div class="section"><div xmlns="" xmlns:d="http://docbook.org/ns/docbook" class="titlepage"><div><div xmlns:d="http://docbook.org/ns/docbook"><h2 xmlns="http://www.w3.org/1999/xhtml" class="title"><a id="TheKeyboard_KeyStates"></a>Key States</h2></div></div></div><p>You can look at the state of all the keys on the keyboard at a given
|
||
moment in time. This information is captured and reported in two ways:</p><div class="orderedlist"><ol><li><p>As the <code class="varname">states</code> field in every
|
||
<code class="constant">B_KEY_DOWN</code> message, and</p></li><li><p>As the <code class="varname">key_states</code> bitfield reported by
|
||
<a class="link" href="TheInputServer_Functions.html#get_key_info" title="get_key_info()"><code class="function">get_key_info()</code></a>.</p></li></ol></div><p>In both cases, the bitfield is an array of 16 bytes,</p><pre class="programlisting example c">uint8 states[16];</pre><p>with one bit standing for each key on the keyboard. Bits are numbered
|
||
from left to right, beginning with the first byte in the array, as
|
||
illustrated below:</p><div class="mediaobject"><img src="./images/TheKeyboard/KeyboardKeyStates-2.png" alt="Info Icon" /></div><p>Bit numbers start with 0 and match key codes. For example, bit 0x3c
|
||
corresponds to the <span class="keycap">a</span> key, 0x3d to the <span class="keycap">s</span>
|
||
key, 0x3e to the <span class="keycap">d</span> key, and so
|
||
on. The first bit is 0x00, which doesn't correspond to any key. The first
|
||
meaningful bit is 0x01, which corresponds to the
|
||
<span class="keycap">Escape</span> key.</p><p>When a key is down, the bit corresponding to its key code is set to 1.
|
||
Otherwise, the bit is 0. However, for the three keys that toggle keyboard
|
||
locks—<span class="keycap">Caps Lock</span> (key 0x3b), <span class="keycap">Num Lock</span>
|
||
(key 0x22), and <span class="keycap">Scroll Lock</span>
|
||
(key 0x0f)—the bit is set to 1 if the lock is on and set to 0 if
|
||
the lock is off, regardless of the state of the key itself.</p><p>To test the bitfield against a particular key,</p><ul class="itemizedlist"><li><p>Select the byte in the <code class="varname">states</code> array that contains the bit for that
|
||
key,</p></li><li><p>Form a mask for the key that can be compared to that byte, and</p></li><li><p>Compare the byte to the mask.</p></li></ul><p>For example:</p><pre class="programlisting example c">if (<code class="varname">states</code>[<code class="varname">keyCode</code>>>3] & (1 << (7 - (<code class="varname">keyCode</code>%8)))) {
|
||
<span class="comment">/* the key is down */</span>
|
||
}</pre></div><div id="footer"><hr /><div id="footerT">Prev: <a href="TheKeyboard_KeyCodes.html">Key Codes</a> Up: <a href="TheKeyboard.html">The Keyboard</a> Next: <a href="TheTracker.html">The Tracker</a> </div><div id="footerB"><div id="footerBL"><a href="TheKeyboard_KeyCodes.html" title="Key Codes"><img src="./images/navigation/prev.png" alt="Prev" /></a> <a href="TheKeyboard.html" title="The Keyboard"><img src="./images/navigation/up.png" alt="Up" /></a> <a href="TheTracker.html" title="The Tracker"><img src="./images/navigation/next.png" alt="Next" /></a></div><div id="footerBR"><div><a href="http://www.haiku-os.org"><img src="./images/People_24.png" alt="haiku-os.org" title="Visit The Haiku Website" /></a></div><div class="navighome" title="Home"><a accesskey="h" href="index.html"><img src="./images/navigation/home.png" alt="Home" /></a></div></div><div id="footerBC"><a href="http://www.access-company.com/home.html" title="ACCESS Co."><img alt="Access Company" src="./images/access_logo.png" /></a></div></div></div><div id="licenseFooter"><div id="licenseFooterBL"><a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/3.0/" title="Creative Commons License"><img alt="Creative Commons License" style="border-width:0" src="https://licensebuttons.net/l/by-nc-nd/3.0/88x31.png" /></a></div><div id="licenseFooterBR"><a href="./LegalNotice.html">Legal Notice</a></div><div id="licenseFooterBC"><span id="licenseText">This work is licensed under a
|
||
<a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/3.0/">Creative
|
||
Commons Attribution-Non commercial-No Derivative Works 3.0 License</a>.</span></div></div></body></html>
|