<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Binding Keys Code</title>
		<link>http://www.allegro.cc/forums/view/586385</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 11 Jul 2006 04:51:26 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m trying to figure out how to bind keys and have it displayed to the user what key that have binded so they understand, but have it as a value so that the code can use it.  Like have the variable be &quot;KEY_W&quot; but actually display &quot;W&quot;.  I wanted to know if there was a way to do this.  I&#39;ve tried a couple of methods but they end up sucking.  I was wondering if there was a way to do this without halting the main loop. </p><p>My current code:
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/textprintf_centre_ex" target="_blank"><span class="a">textprintf_centre_ex</span></a><span class="k2">(</span>activepage, media<span class="k2">[</span>MAINFONT<span class="k2">]</span>.dat, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k3">/</span><span class="n">2</span>, <span class="n">120</span>, WHITE, BLACK, <span class="s">"Press a key..."</span><span class="k2">)</span><span class="k2">;</span>
p1up <span class="k3">=</span> <a href="http://www.allegro.cc/manual/ureadkey" target="_blank"><span class="a">ureadkey</span></a><span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/textprintf_centre_ex" target="_blank"><span class="a">textprintf_centre_ex</span></a><span class="k2">(</span>activepage, media<span class="k2">[</span>MAINFONT<span class="k2">]</span>.dat, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k3">/</span><span class="n">2</span>, <span class="n">240</span>, WHITE, BLACK, <span class="s">"Up - %i"</span>, p1up<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
The 3rd line is called later in a different function, but these are all the codes used.  &#39;p1up&#39; is an integer, and I set it to KEY_W.  I do not think I&#39;m doing this correctly at all, so any help would be appreciated.</p><p>Sorry for asking so many questions lately, I&#39;ve just been trying a lot of new things.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paladin)</author>
		<pubDate>Mon, 10 Jul 2006 09:49:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><span class="source-code"><a href="http://www.allegro.cc/manual/scancode_to_name" target="_blank"><span class="a">scancode_to_name</span></a> <span class="k3">/</span> <a href="http://www.allegro.cc/manual/scancode_to_ascii" target="_blank"><span class="a">scancode_to_ascii</span></a></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CGamesPlay)</author>
		<pubDate>Mon, 10 Jul 2006 22:23:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That doesn&#39;t fully answer my question though, it still doesn&#39;t solve the problem that I have with the main loop.  How do I get the scancode though?  With readkey() or ureadkey()?  Or is it detect_key();?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paladin)</author>
		<pubDate>Tue, 11 Jul 2006 01:11:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>readkey() &gt;&gt; 8 gives you a scancode in the form like KEY_SPACE. To not halt the main loop, only call readkey() when keypressed() returns true.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CGamesPlay)</author>
		<pubDate>Tue, 11 Jul 2006 01:18:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ok, well I&#39;m having it so that I click on an option to change it, so would something like this work?</p><p>pseudo-code:</p><p>if(optionclicked)<br /> readingkey == true;</p><p>in main loop:</p><p>if(readingkey == true and keypressed())<br /> key = readkey() &gt;&gt; 8;
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paladin)</author>
		<pubDate>Tue, 11 Jul 2006 01:53:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Could have all together, no need to separate them.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Felipe Maia)</author>
		<pubDate>Tue, 11 Jul 2006 02:34:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The reason I don&#39;t have it together is so that the main loop will continue.  And I want to make sure that they have an option selected, otherwise they could just press random keys and they would assign those keys to the actual variables.  And speaking of which, should I be using integer as the data type(scancode) or should it be something else?  And which one should I be using to convert it to a readable character?  Scancode_to_ascii or scancode_to_name?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paladin)</author>
		<pubDate>Tue, 11 Jul 2006 02:58:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><span class="source-code"><a href="http://www.allegro.cc/manual/scancode_to_name" target="_blank"><span class="a">scancode_to_name</span></a></span> Works well. I don&#39;t see a reason why do you want to be running the game while the guy selects the key, but that&#39;s you who decides. A int is enough for the key scancode.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Felipe Maia)</author>
		<pubDate>Tue, 11 Jul 2006 03:06:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well I have a marquee running in the background and it freezes the deal.  I know it&#39;s ridiculous, but of course it&#39;s all part of the learning experience.  I&#39;ll edit this post if I get it working.  <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /></p><p>EDIT:<br />Ok I got it working, but I have a bug.  If I type in like 7 letters without clicking on the option, then it &quot;saves&quot; them I guess, so like if I press the option 7 times, then it shows each character, then finally it displays &quot;Press a key&quot;.  Here&#39;s the code:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="c">//Everytime the menu is displayed</span></td></tr><tr><td class="number">2</td><td><span class="k1">if</span><span class="k2">(</span><span class="k2">(</span>readingkey<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> <span class="k2">(</span>readingkey<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> <span class="k2">(</span>readingkey<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> <span class="k2">(</span>readingkey<span class="k2">[</span><span class="n">3</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">3</td><td>  <a href="http://www.allegro.cc/manual/textprintf_centre_ex" target="_blank"><span class="a">textprintf_centre_ex</span></a><span class="k2">(</span>activepage, media<span class="k2">[</span>MAINFONT<span class="k2">]</span>.dat, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k3">/</span><span class="n">2</span>, <span class="n">120</span>, WHITE, BLACK, <span class="s">"Press a key..."</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td>&#160;</td></tr><tr><td class="number">5</td><td><a href="http://www.allegro.cc/manual/textprintf_centre_ex" target="_blank"><span class="a">textprintf_centre_ex</span></a><span class="k2">(</span>activepage, media<span class="k2">[</span>MAINFONT<span class="k2">]</span>.dat, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k3">/</span><span class="n">2</span>, <span class="n">240</span>, WHITE, BLACK, <span class="s">"Up - %s"</span>, <a href="http://www.allegro.cc/manual/scancode_to_name" target="_blank"><span class="a">scancode_to_name</span></a><span class="k2">(</span>p1up<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">6</td><td>&#160;</td></tr><tr><td class="number">7</td><td><span class="c">//In a switch statement, everytime you click on the option:</span></td></tr><tr><td class="number">8</td><td><span class="k1">int</span> i<span class="k2">;</span></td></tr><tr><td class="number">9</td><td><span class="k1">for</span><span class="k2">(</span>i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> <span class="n">4</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">10</td><td> readingkey<span class="k3">&lt;</span>i&gt; <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>readingkey<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td><a href="http://www.allegro.cc/manual/play_sample" target="_blank"><span class="a">play_sample</span></a><span class="k2">(</span>media<span class="k2">[</span>SELECT<span class="k2">]</span>.dat, <a href="http://www.delorie.com/djgpp/doc/libc/libc_735.html" target="_blank">sound</a>, <span class="n">128</span>, <span class="n">1000</span>, FALSE<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td><span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>&#160;</td></tr><tr><td class="number">15</td><td><span class="c">//The main loop</span></td></tr><tr><td class="number">16</td><td><span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/keypressed" target="_blank"><span class="a">keypressed</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">17</td><td>     getInput<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>&#160;</td></tr><tr><td class="number">19</td><td><span class="c">//Now get input:</span></td></tr><tr><td class="number">20</td><td><span class="k1">void</span> getInput<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">21</td><td><span class="k2">{</span></td></tr><tr><td class="number">22</td><td> <span class="k1">if</span><span class="k2">(</span>game <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">23</td><td> <span class="k2">{</span></td></tr><tr><td class="number">24</td><td>  <span class="k1">if</span><span class="k2">(</span>readingkey<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span></td></tr><tr><td class="number">25</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">26</td><td>   <a href="http://www.allegro.cc/manual/play_sample" target="_blank"><span class="a">play_sample</span></a><span class="k2">(</span>media<span class="k2">[</span>SELECT<span class="k2">]</span>.dat, <a href="http://www.delorie.com/djgpp/doc/libc/libc_735.html" target="_blank">sound</a>, <span class="n">128</span>, <span class="n">1000</span>, FALSE<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td>   p1up <span class="k3">=</span> <a href="http://www.allegro.cc/manual/readkey" target="_blank"><span class="a">readkey</span></a><span class="k2">(</span><span class="k2">)</span> <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">8</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>   readingkey<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">30</td><td>  <span class="k1">if</span><span class="k2">(</span>readingkey<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span></td></tr><tr><td class="number">31</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">32</td><td>   <a href="http://www.allegro.cc/manual/play_sample" target="_blank"><span class="a">play_sample</span></a><span class="k2">(</span>media<span class="k2">[</span>SELECT<span class="k2">]</span>.dat, <a href="http://www.delorie.com/djgpp/doc/libc/libc_735.html" target="_blank">sound</a>, <span class="n">128</span>, <span class="n">1000</span>, FALSE<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td>   p1down <span class="k3">=</span> <a href="http://www.allegro.cc/manual/readkey" target="_blank"><span class="a">readkey</span></a><span class="k2">(</span><span class="k2">)</span> <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">8</span><span class="k2">;</span></td></tr><tr><td class="number">34</td><td>   readingkey<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">36</td><td> <span class="k2">}</span></td></tr><tr><td class="number">37</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
I&#39;m sure a little explanation is necessary, so here I go.  Readingkey[4] is an integer that when it&#39;s equal to 1, that means that I have clicked on an option and it&#39;s ready to read a key.  I do this so that the main loop will still continue to run in the background.  The p1up and p1down are integers that hold the scancode of the players up and down keys.  Sorry for so many questions, I&#39;ve just always wanted to know how binding keys would work.  Can someone fix this for me, and can someone tell me what precautions I should make (Like to not allow users to type in the F1-F12 keys or something) ?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paladin)</author>
		<pubDate>Tue, 11 Jul 2006 03:28:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Because there is a readkey buffer (keyboard buffer), which can be cleared by calling clear_keybuf(). So when the user selects the option to change the binding, call clear_keybuf(), then wait for keypressed(), then call readkey().
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CGamesPlay)</author>
		<pubDate>Tue, 11 Jul 2006 04:21:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ahh ok, that makes a lot of sense now.  Thanks a lot, I got it all taken care of.  <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paladin)</author>
		<pubDate>Tue, 11 Jul 2006 04:51:26 +0000</pubDate>
	</item>
</rss>
