<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Creating a Allegro 5 equivalent to _kbhit()</title>
		<link>http://www.allegro.cc/forums/view/617216</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 16 Jan 2018 17:56:12 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m in the process of replacing Microsoft CRT functions with allegro equivalents to remove my dependencies on console functions. One of them is _kbhit which is an ancient legacy command from conio.h</p><p>Here is the function definition from Microsoft:<br />The _kbhit function checks the console for a recent keystroke. If the function returns a nonzero value, a keystroke is waiting in the buffer. The program can then <br />call _getch or _getche to get the keystroke.</p><p>Here&#39;s my stab to do the same thing:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> keyboardhit<span class="k2">(</span><span class="k2">)</span>
<span class="k2">{</span>
  
  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_peek_next_event"><span class="a">al_peek_next_event</span></a><span class="k2">(</span>kbdQueue, <span class="k3">&amp;</span>kbdState<span class="k2">)</span><span class="k2">)</span>
  <span class="k2">{</span>
    <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>  <span class="c">//doesn't really matter what was hit</span>
  <span class="k2">}</span>
  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

I then will write my own _getch() to get the next key, but it&#39;s not quite working the way it&#39;s supposed to. </p><p>I tried an attempt using microsoft&#39;s exmaple.
</p><div class="source-code snippet"><div class="inner"><pre><span class="c">//keyboardhit() replaced _kbhit()</span>
  <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>keyboardhit<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
    _cputs<span class="k2">(</span><span class="s">"Hit me!! "</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

and it&#39;s not detecting the keypress. Am I missing something here?</p><p>Here&#39;s my whole example code</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include &lt;stdio.h&gt;</span>
<span class="number">  2</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">  3</span>
<span class="number">  4</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>kbdQueue <span class="k3">=</span> NULL<span class="k2">;</span> <span class="c">//!&lt; Keyboard Queue</span>
<span class="number">  5</span><a href="http://www.allegro.cc/manual/ALLEGRO_KEYBOARD_STATE"><span class="a">ALLEGRO_KEYBOARD_STATE</span></a> kbdState<span class="k2">;</span> <span class="c">//!&lt; Keybord State</span>
<span class="number">  6</span>
<span class="number">  7</span>
<span class="number">  8</span><span class="k1">int</span> keyboardhit<span class="k2">(</span><span class="k2">)</span>
<span class="number">  9</span><span class="k2">{</span>
<span class="number"> 10</span>
<span class="number"> 11</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_peek_next_event"><span class="a">al_peek_next_event</span></a><span class="k2">(</span>kbdQueue, <span class="k3">&amp;</span>kbdState<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span> <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span> <span class="k2">}</span>
<span class="number"> 12</span>  <span class="k1">else</span> <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 13</span><span class="k2">}</span>
<span class="number"> 14</span>
<span class="number"> 15</span>
<span class="number"> 16</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span><span class="k3">*</span>argv<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 17</span>
<span class="number"> 18</span>
<span class="number"> 19</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 20</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"failed to initialize allegro!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 22</span>  <span class="k2">}</span>
<span class="number"> 23</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 24</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Error installing keyboard.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>    <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 26</span>  <span class="k2">}</span>
<span class="number"> 27</span>
<span class="number"> 28</span>  <span class="c">//Create Keybord queue</span>
<span class="number"> 29</span>  kbdQueue <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>kbdQueue<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 31</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"failed to create keyboard queue!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>    <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 33</span>  <span class="k2">}</span>
<span class="number"> 34</span>  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>kbdQueue, <a href="http://www.allegro.cc/manual/al_get_keyboard_event_source"><span class="a">al_get_keyboard_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>
<span class="number"> 36</span>  <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>keyboardhit<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 37</span>    _cputs<span class="k2">(</span><span class="s">"Hit me!! "</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 38</span>
<span class="number"> 39</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 40</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (nshade)</author>
		<pubDate>Sat, 13 Jan 2018 09:30:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I use the following code when I need to wait for a keypress... this is an Allegro 5 function I created for Deluxe Pacman 2 (see link below), it will also respond to a mouse click or joystick input (see comments in code).</p><p>I added on additional functionality to this where you can send a wait_time in milliseconds so it will wait for a keypress OR however many seconds you want.  So if you call it with <span class="source-code">wait_for_keypress<span class="k2">(</span><span class="n">5000</span>.<span class="n">0</span><span class="k2">)</span></span> It will wait 5000ms or 5 seconds and then continue on.  If you want it to wait indefinitely, pass a zero to it and it will wait for input and not move.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="c">// Waits a specified time for a key to be pressed.</span>
<span class="number">  2</span><span class="c">// Will also respond if a mouse or joystick button is clicked.</span>
<span class="number">  3</span><span class="c">// If the time passes before a key/mouse/joystick is pressed, the function returns</span>
<span class="number">  4</span><span class="c">// If the time specified is zero, the function will wait indefinitely.</span>
<span class="number">  5</span><span class="k1">bool</span> wait_for_keypress<span class="k2">(</span><span class="k1">double</span> wait_time<span class="k2">)</span>
<span class="number">  6</span><span class="k2">{</span>
<span class="number">  7</span>   <span class="k1">double</span> ts <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_time"><span class="a">al_get_time</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// time stamp</span>
<span class="number">  8</span>   <span class="k1">double</span> elapsed_time<span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span>   <a href="http://www.allegro.cc/manual/al_flush_event_queue"><span class="a">al_flush_event_queue</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>   frames <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span>   <span class="k1">bool</span> done <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span>   <span class="c">// Wait until the specified time passes or a key is pressed.</span>
<span class="number"> 16</span>   <span class="k1">do</span> <span class="k2">{</span>
<span class="number"> 17</span>      <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>event_queue, <span class="k3">&amp;</span>event<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>
<span class="number"> 19</span>      <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 20</span>         shut_down<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>         <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>      <span class="k2">}</span>
<span class="number"> 23</span>
<span class="number"> 24</span>      <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>wait_time <span class="k3">&amp;</span><span class="k3">&amp;</span> event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 25</span>         elapsed_time <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_time"><span class="a">al_get_time</span></a><span class="k2">(</span><span class="k2">)</span> <span class="k3">-</span> ts<span class="k2">;</span>
<span class="number"> 26</span>         <span class="k1">if</span><span class="k2">(</span>elapsed_time <span class="k3">&gt;</span><span class="k3">=</span> wait_time<span class="k2">)</span> <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 27</span>      <span class="k2">}</span>
<span class="number"> 28</span>
<span class="number"> 29</span>      <span class="c">// Wait for key to be pressed and released to continue</span>
<span class="number"> 30</span>      <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_UP<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 31</span>         <span class="k1">if</span><span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_F12<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 32</span>            <span class="k1">if</span><span class="k2">(</span>setting.sound_on<span class="k2">)</span>
<span class="number"> 33</span>               <a href="http://www.allegro.cc/manual/al_play_sample"><span class="a">al_play_sample</span></a><span class="k2">(</span>sfx_camera, setting.sound_volume, <span class="n">0</span>, <span class="n">1</span>, ALLEGRO_PLAYMODE_ONCE, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span>            a5_screenshot<span class="k2">(</span><span class="s">"Screenshots/DeluxePacman2"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>         <span class="k2">}</span>
<span class="number"> 36</span>         <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_ESCAPE<span class="k2">)</span> <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 37</span>         <span class="k1">else</span> done <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 38</span>      <span class="k2">}</span>
<span class="number"> 39</span>
<span class="number"> 40</span>      <span class="c">// And if a key wasn't pressed, maybe a mouse button was...</span>
<span class="number"> 41</span>      <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_BUTTON_UP<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 42</span>         done <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 43</span>      <span class="k2">}</span>
<span class="number"> 44</span>
<span class="number"> 45</span>      <span class="c">/// JOYSTICK</span>
<span class="number"> 46</span>      <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_JOYSTICK_BUTTON_UP<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 47</span>         <span class="k1">if</span><span class="k2">(</span>event.joystick.button <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> done <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>  <span class="c">// Button 0 = A (green, like pressing ENTER)</span>
<span class="number"> 48</span>         <span class="k1">if</span><span class="k2">(</span>event.joystick.button <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span> <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>  <span class="c">// Button 1 = B (red, used like pressing ESC)</span>
<span class="number"> 49</span>         <span class="c">// Button 7 = Start (unused here)</span>
<span class="number"> 50</span>      <span class="k2">}</span>
<span class="number"> 51</span>
<span class="number"> 52</span>      <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_JOYSTICK_AXIS<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 53</span>         done <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 54</span>      <span class="k2">}</span>
<span class="number"> 55</span>
<span class="number"> 56</span>      <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_JOYSTICK_CONFIGURATION<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 57</span>         <a href="http://www.allegro.cc/manual/al_reconfigure_joysticks"><span class="a">al_reconfigure_joysticks</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 58</span>      <span class="k2">}</span>
<span class="number"> 59</span>   <span class="k2">}</span>
<span class="number"> 60</span>   <span class="k1">while</span><span class="k2">(</span><span class="k3">!</span>done<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 61</span>
<span class="number"> 62</span>   <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 63</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Sat, 13 Jan 2018 12:24:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617216/1034513#target">nshade</a> said:</div><div class="quote"><p>
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>kbdQueue <span class="k3">=</span> NULL<span class="k2">;</span> <span class="c">//!&lt; Keyboard Queue </span>
<a href="http://www.allegro.cc/manual/ALLEGRO_KEYBOARD_STATE"><span class="a">ALLEGRO_KEYBOARD_STATE</span></a> kbdState<span class="k2">;</span> <span class="c">//!&lt; Keybord State </span>

<span class="k1">int</span> keyboardhit<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
 <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_peek_next_event"><span class="a">al_peek_next_event</span></a><span class="k2">(</span>kbdQueue, <span class="k3">&amp;</span>kbdState<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span> <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span> <span class="k2">}</span>
 <span class="k1">else</span> <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div></div><p>
That code shouldn&#39;t even compile. You&#39;re passing an <span class="source-code"><a href="http://www.allegro.cc/manual/ALLEGRO_KEYBOARD_STATE"><span class="a">ALLEGRO_KEYBOARD_STATE</span></a><span class="k3">*</span></span> to a function parameter that is expecting an <span class="source-code"><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a><span class="k3">*</span></span>.</p><p>To keep in the fashion of _kbhit, you can use functions like these, in the same way you were attempting to. You just need to keep a separate queue of events, or at least store and remove them when they are received.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>
<span class="number">  2</span><span class="p">#include "allegro5/allegro.h"</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="p">#include &lt;deque&gt;</span>
<span class="number">  5</span><span class="p">#include &lt;string&gt;</span>
<span class="number">  6</span>
<span class="number">  7</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a><span class="k3">*</span> q<span class="k2">;</span>
<span class="number">  8</span>
<span class="number">  9</span>std::deque<span class="k3">&lt;</span>ALLEGRO_EVENT&gt; kb_events<span class="k2">;</span>
<span class="number"> 10</span>std::deque<span class="k3">&lt;</span>ALLEGRO_EVENT&gt; events<span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span><span class="k1">void</span> poll_for_events<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 13</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> ev<span class="k2">;</span>
<span class="number"> 14</span>    <span class="k1">while</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_next_event"><span class="a">al_get_next_event</span></a><span class="k2">(</span>q , <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 15</span>        <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN <span class="k3">|</span><span class="k3">|</span> ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_UP <span class="k3">|</span><span class="k3">|</span> ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_CHAR<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 16</span>            kb_events.push_back<span class="k2">(</span>ev<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>        <span class="k2">}</span>
<span class="number"> 18</span>        <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 19</span>            events.push_back<span class="k2">(</span>ev<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>        <span class="k2">}</span>
<span class="number"> 21</span>    <span class="k2">}</span>
<span class="number"> 22</span><span class="k2">}</span>
<span class="number"> 23</span>
<span class="number"> 24</span><span class="k1">int</span> poll_kb_for_events<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 25</span>    poll_for_events<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>    <span class="k1">return</span> kb_events.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span><span class="k2">}</span>
<span class="number"> 28</span>
<span class="number"> 29</span><span class="k1">int</span> poll_for_non_kb_events<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 30</span>    poll_for_events<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</span>    <span class="k1">return</span> events.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span><span class="k2">}</span>
<span class="number"> 33</span>
<span class="number"> 34</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc , <span class="k1">char</span><span class="k3">*</span><span class="k3">*</span> argv<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 35</span>    
<span class="number"> 36</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="n">1</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 37</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="n">2</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 38</span>    
<span class="number"> 39</span><span class="c">///    al_set_new_window_position(-500,-400);</span>
<span class="number"> 40</span>    <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_OPENGL <span class="k3">|</span> ALLEGRO_WINDOWED<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 41</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a><span class="k3">*</span> d <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span><span class="n">400</span>,<span class="n">300</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 42</span>    
<span class="number"> 43</span>    q <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 44</span>    
<span class="number"> 45</span>    <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>q , <a href="http://www.allegro.cc/manual/al_get_keyboard_event_source"><span class="a">al_get_keyboard_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 46</span>    <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>q , <a href="http://www.allegro.cc/manual/al_get_display_event_source"><span class="a">al_get_display_event_source</span></a><span class="k2">(</span>d<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 47</span>    
<span class="number"> 48</span>    <span class="k1">while</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 49</span>        <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">015</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 50</span>        <span class="k1">if</span> <span class="k2">(</span>poll_kb_for_events<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 51</span>            <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> ev <span class="k3">=</span> kb_events.back<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 52</span>            <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_UP <span class="k3">&amp;</span><span class="k3">&amp;</span> ev.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_ENTER<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 53</span>                <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 54</span>            <span class="k2">}</span>
<span class="number"> 55</span>        <span class="k2">}</span>
<span class="number"> 56</span>    <span class="k2">}</span>
<span class="number"> 57</span>    
<span class="number"> 58</span>    std::string s <span class="k3">=</span> <span class="s">""</span><span class="k2">;</span>
<span class="number"> 59</span>    <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>kb_events.empty<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 60</span>        <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> ev <span class="k3">=</span> kb_events.front<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 61</span>        kb_events.pop_front<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 62</span>        <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_CHAR <span class="k3">&amp;</span><span class="k3">&amp;</span> ev.keyboard.keycode <span class="k3">!</span><span class="k3">=</span> ALLEGRO_KEY_ENTER<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 63</span>            s <span class="k3">+</span><span class="k3">=</span> ev.keyboard.unichar<span class="k2">;</span>
<span class="number"> 64</span>        <span class="k2">}</span>
<span class="number"> 65</span>    <span class="k2">}</span>
<span class="number"> 66</span>    
<span class="number"> 67</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"You typed : '%s'\n"</span> , s.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 68</span>    
<span class="number"> 69</span>    <a href="http://www.allegro.cc/manual/al_uninstall_system"><span class="a">al_uninstall_system</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 70</span>    
<span class="number"> 71</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 72</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 13 Jan 2018 22:19:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for the push in the right direction - I was sick yesterday... Also I&#39;m not using C++, so I can&#39;t use namespaces.</p><p>I was writing kind of off the cuff. I&#39;m making a little lab project where I can rewrite replace getch and kbhit with a little test unit.</p><p>==EDIT==</p><p>Something is up, I don&#39;t know if it&#39;s my foggy head and leftover flu, but I can&#39;t seem to get any keyboard input wot work anymore. Even your examples. I have a very basic system her just to get <b>something</b> out of the event queue and it&#39;s not working at all. Is there something I&#39;m missing?</p><p>I&#39;m trying to do a &quot;drop in&quot; replacement for these two commands. Keep in mind, the program I&#39;m porting does not exactly have a &quot;main loop&quot;, but a bunch of machine states that are executed depending on globals. There is a lot of pausing and waiting for input without rendering anything. My code is below.</p><p>Why was the original keypress() functions removed from allegro 5? They seem really useful!</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>
<span class="number">  2</span><span class="p">#include &lt;stdio.h&gt;</span>
<span class="number">  3</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">  4</span>
<span class="number">  5</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> master_event<span class="k2">;</span>  <span class="c">//!&lt; Master Allegro event handler</span>
<span class="number">  6</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>kbdQueue<span class="k2">;</span> <span class="c">//!&lt; Keyboard Queue</span>
<span class="number">  7</span><a href="http://www.allegro.cc/manual/ALLEGRO_KEYBOARD_STATE"><span class="a">ALLEGRO_KEYBOARD_STATE</span></a> kbdState<span class="k2">;</span> <span class="c">//!&lt; Keybord State</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="k1">int</span> al_kbhit<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number"> 10</span><span class="k2">{</span>
<span class="number"> 11</span>
<span class="number"> 12</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_peek_next_event"><span class="a">al_peek_next_event</span></a><span class="k2">(</span>kbdQueue, <span class="k3">&amp;</span>master_event<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 13</span>    <span class="k2">{</span>
<span class="number"> 14</span>      <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>  <span class="c">//doesn't really matter what was hit</span>
<span class="number"> 15</span>    <span class="k2">}</span>
<span class="number"> 16</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 17</span>  <span class="c">// return _kbhit();</span>
<span class="number"> 18</span><span class="k2">}</span>
<span class="number"> 19</span>
<span class="number"> 20</span><span class="k1">int</span> al_getch<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number"> 21</span><span class="k2">{</span>
<span class="number"> 22</span>  <span class="k1">return</span> _getch<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span><span class="k2">}</span>
<span class="number"> 24</span>
<span class="number"> 25</span>
<span class="number"> 26</span><span class="k1">void</span> init_keyboard<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 27</span><span class="k2">{</span>
<span class="number"> 28</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 29</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"failed to initialize allegro!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</span>  <span class="k2">}</span>
<span class="number"> 32</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 33</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Error installing keyboard.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>  <span class="k2">}</span>
<span class="number"> 36</span>
<span class="number"> 37</span>  <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_OPENGL <span class="k3">|</span> ALLEGRO_WINDOWED<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 38</span>  d <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span><span class="n">400</span>, <span class="n">300</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 39</span>
<span class="number"> 40</span>  <span class="c">//Create Keybord queue</span>
<span class="number"> 41</span>  kbdQueue <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 42</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>kbdQueue<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 43</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"failed to create keyboard queue!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 44</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 45</span>  <span class="k2">}</span>
<span class="number"> 46</span>  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>kbdQueue, <a href="http://www.allegro.cc/manual/al_get_keyboard_event_source"><span class="a">al_get_keyboard_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 47</span>
<span class="number"> 48</span><span class="k2">}</span>
<span class="number"> 49</span>
<span class="number"> 50</span>
<span class="number"> 51</span>
<span class="number"> 52</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span><span class="k3">*</span>argv<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 53</span>
<span class="number"> 54</span>  <span class="k1">char</span> ch<span class="k2">;</span>
<span class="number"> 55</span>
<span class="number"> 56</span>  init_keyboard<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 57</span>  <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>al_kbhit<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 58</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Hit me!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 59</span>
<span class="number"> 60</span>  ch <span class="k3">=</span> al_getch<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 61</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Key struck was %d\n"</span>, ch<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 62</span>
<span class="number"> 63</span>  <span class="k1">while</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</span> <span class="k2">{</span><span class="k2">}</span><span class="k2">;</span> <span class="c">//Loop forever </span>
<span class="number"> 64</span>
<span class="number"> 65</span><span class="k2">}</span>
</div></div><p>

++ ANOTHER EDIT ++<br />My original code was not making an allegro display. It doesn&#39;t work in the terminal. Makes sense as I&#39;m trying to get rid of the terminal <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /> Now the keyboard is working (eyeroll)</p><h2>LAST EDIT</h2><p>
here is the code for others to use. Mind you, It&#39;s not 100% compatible, but works well enough for all. I woudn&#39;t mind this in the actual Allegro library if it was cleaned up enough <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="p">#include &lt;stdio.h&gt;</span>
<span class="number">   2</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">   3</span>
<span class="number">   4</span>
<span class="number">   5</span><span class="k1">int</span> keymap<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span>
<span class="number">   6</span><span class="c">// NULL, A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z</span>
<span class="number">   7</span>    <span class="n">0</span>,   <span class="n">65</span>,<span class="n">66</span>,<span class="n">67</span>,<span class="n">68</span>,<span class="n">69</span>,<span class="n">70</span>,<span class="n">71</span>,<span class="n">72</span>,<span class="n">73</span>,<span class="n">74</span>,<span class="n">75</span>,<span class="n">76</span>,<span class="n">77</span>,<span class="n">78</span>,<span class="n">79</span>,<span class="n">80</span>,<span class="n">81</span>,<span class="n">82</span>,<span class="n">83</span>,<span class="n">84</span>,<span class="n">85</span>,<span class="n">86</span>,<span class="n">87</span>,<span class="n">88</span>,<span class="n">89</span>,<span class="n">90</span>,
<span class="number">   8</span>
<span class="number">   9</span><span class="c">//  0   1  2  3  4  5  6  7  8  9  K0 K1 K2 K3 K4 K5 K6 K7 K8 K9   F1  F2   F3   F4   F5</span>
<span class="number">  10</span>    <span class="n">48</span>, <span class="n">49</span>,<span class="n">50</span>,<span class="n">51</span>,<span class="n">52</span>,<span class="n">53</span>,<span class="n">54</span>,<span class="n">55</span>,<span class="n">56</span>,<span class="n">57</span>,<span class="n">48</span>,<span class="n">49</span>,<span class="n">50</span>,<span class="n">51</span>,<span class="n">52</span>,<span class="n">53</span>,<span class="n">54</span>,<span class="n">55</span>,<span class="n">56</span>,<span class="n">57</span>,<span class="n">1000</span>,<span class="n">1001</span>,<span class="n">1002</span>,<span class="n">1003</span>,<span class="n">1004</span>,
<span class="number">  11</span>
<span class="number">  12</span><span class="c">//   F6   F7   F8   F9   F10 F11 F12 ESC ~ -  =  BS TAB [  ]  ENT ;  "  \  \2  ,  .  /  SP</span>
<span class="number">  13</span>    <span class="n">1005</span>,<span class="n">1006</span>,<span class="n">1007</span>,<span class="n">1008</span>,<span class="n">1009</span>, <span class="n">0</span>,  <span class="n">0</span>,  <span class="n">0</span>, <span class="n">0</span>,<span class="n">45</span>,<span class="n">43</span>,<span class="n">8</span>, <span class="n">9</span>,  <span class="n">91</span>,<span class="n">93</span>,<span class="n">13</span>, <span class="n">59</span>,<span class="n">39</span>,<span class="n">92</span>, <span class="n">0</span>, <span class="n">44</span>,<span class="n">46</span>,<span class="n">47</span>,<span class="n">32</span>,
<span class="number">  14</span>
<span class="number">  15</span><span class="c">//  INS   DEL   HOME  END   PGUP  PGDN  LFT   RGT   UP    DWN   K/  K*  K-  K+  K.  KE  PRSCN PAUSE</span>
<span class="number">  16</span>    <span class="n">4000</span>, <span class="n">4001</span>, <span class="n">2007</span>, <span class="n">2006</span>, <span class="n">2004</span>, <span class="n">2005</span>, <span class="n">2003</span>, <span class="n">2001</span>, <span class="n">2000</span>, <span class="n">2002</span>, <span class="n">47</span>, <span class="n">42</span>, <span class="n">45</span>, <span class="n">43</span>, <span class="n">46</span>, <span class="n">13</span>,   <span class="n">0</span>,    <span class="n">0</span>,
<span class="number">  17</span>
<span class="number">  18</span><span class="c">//  Scancodes 94-127 : Non-PC keys. Listing in  Allegro documentation,  ALLEGRO_KEY_UNKNOWN (128)</span>
<span class="number">  19</span>  <span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,            <span class="n">0</span>
<span class="number">  20</span><span class="k2">}</span><span class="k2">;</span>  <span class="c">//!&lt; Keymapping from scancodes to ASCII or function codes</span>
<span class="number">  21</span>
<span class="number">  22</span>
<span class="number">  23</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> master_event<span class="k2">;</span>  <span class="c">//!&lt; Master Allegro event handler</span>
<span class="number">  24</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>kbdQueue<span class="k2">;</span> <span class="c">//!&lt; Keyboard Queue</span>
<span class="number">  25</span><a href="http://www.allegro.cc/manual/ALLEGRO_KEYBOARD_STATE"><span class="a">ALLEGRO_KEYBOARD_STATE</span></a> kbdState<span class="k2">;</span> <span class="c">//!&lt; Keybord State</span>
<span class="number">  26</span>
<span class="number">  27</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>d<span class="k2">;</span>
<span class="number">  28</span><span class="k1">int</span> key_capture<span class="k2">;</span>
<span class="number">  29</span>
<span class="number">  30</span><span class="k1">int</span> al_kbhit<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number">  31</span><span class="k2">{</span>
<span class="number">  32</span>  <span class="c">// return _kbhit();</span>
<span class="number">  33</span>
<span class="number">  34</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_peek_next_event"><span class="a">al_peek_next_event</span></a><span class="k2">(</span>kbdQueue, <span class="k3">&amp;</span>master_event<span class="k2">)</span><span class="k2">)</span>
<span class="number">  35</span>  <span class="k2">{</span>
<span class="number">  36</span>    <span class="k1">if</span> <span class="k2">(</span>master_event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN <span class="k3">|</span><span class="k3">|</span> master_event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_UP<span class="k2">)</span>
<span class="number">  37</span>    <span class="k2">{</span>
<span class="number">  38</span>      <a href="http://www.allegro.cc/manual/al_drop_next_event"><span class="a">al_drop_next_event</span></a><span class="k2">(</span>kbdQueue<span class="k2">)</span><span class="k2">;</span> <span class="c">//remove all events but the keys</span>
<span class="number">  39</span>      <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  40</span>    <span class="k2">}</span>
<span class="number">  41</span>    <span class="k1">if</span> <span class="k2">(</span>master_event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_CHAR<span class="k2">)</span>
<span class="number">  42</span>    <span class="k2">{</span>
<span class="number">  43</span>      key_capture <span class="k3">=</span> keymap<span class="k2">[</span>master_event.keyboard.keycode<span class="k2">]</span><span class="k2">;</span>
<span class="number">  44</span>      <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  45</span>    <span class="k2">}</span>
<span class="number">  46</span>  <span class="k2">}</span>
<span class="number">  47</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  48</span><span class="k2">}</span>
<span class="number">  49</span>
<span class="number">  50</span><span class="k1">int</span> al_getch<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number">  51</span><span class="k2">{</span>  
<span class="number">  52</span>  <span class="c">//return _getch();</span>
<span class="number">  53</span>
<span class="number">  54</span>  <span class="k1">int</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a> <span class="k3">=</span> key_capture<span class="k2">;</span>
<span class="number">  55</span>  key_capture <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  56</span>  <span class="k1">return</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">;</span>
<span class="number">  57</span><span class="k2">}</span>
<span class="number">  58</span>
<span class="number">  59</span>
<span class="number">  60</span><span class="k1">void</span> startup<span class="k2">(</span><span class="k2">)</span>
<span class="number">  61</span><span class="k2">{</span>
<span class="number">  62</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  63</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"failed to initialize allegro!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  64</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  65</span>  <span class="k2">}</span>
<span class="number">  66</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  67</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Error installing keyboard.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  68</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  69</span>  <span class="k2">}</span>
<span class="number">  70</span>
<span class="number">  71</span>  d <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span><span class="n">400</span>, <span class="n">300</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  72</span>
<span class="number">  73</span>  <span class="c">//Create Keybord queue</span>
<span class="number">  74</span>  kbdQueue <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  75</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>kbdQueue<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  76</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"failed to create keyboard queue!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  77</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  78</span>  <span class="k2">}</span>
<span class="number">  79</span>  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>kbdQueue, <a href="http://www.allegro.cc/manual/al_get_keyboard_event_source"><span class="a">al_get_keyboard_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  80</span>
<span class="number">  81</span><span class="k2">}</span>
<span class="number">  82</span>
<span class="number">  83</span>
<span class="number">  84</span>
<span class="number">  85</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span><span class="k3">*</span>argv<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  86</span>
<span class="number">  87</span>  <span class="k1">int</span> ch<span class="k2">;</span>
<span class="number">  88</span>
<span class="number">  89</span>  startup<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  90</span>  <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>al_kbhit<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  91</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Hit me!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  92</span>
<span class="number">  93</span>  ch <span class="k3">=</span> al_getch<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  94</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Key struck was %d\n"</span>, ch<span class="k2">)</span><span class="k2">;</span>
<span class="number">  95</span>
<span class="number">  96</span>  <span class="k1">while</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</span> <span class="k2">{</span><span class="k2">}</span><span class="k2">;</span> <span class="c">//Loop forever </span>
<span class="number">  97</span>
<span class="number">  98</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (nshade)</author>
		<pubDate>Sun, 14 Jan 2018 06:34:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Okay, you need to read through your code, and follow it along logically...</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">int</span> al_kbhit<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>   
<span class="number">  2</span><span class="k2">{</span>   
<span class="number">  3</span>   <span class="c">// return _kbhit();   </span>
<span class="number">  4</span>   
<span class="number">  5</span>   <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_peek_next_event"><span class="a">al_peek_next_event</span></a><span class="k2">(</span>kbdQueue, <span class="k3">&amp;</span>master_event<span class="k2">)</span><span class="k2">)</span>   
<span class="number">  6</span>   <span class="k2">{</span>   
<span class="number">  7</span>      <span class="k1">if</span> <span class="k2">(</span>master_event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN <span class="k3">|</span><span class="k3">|</span> master_event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_UP<span class="k2">)</span>   
<span class="number">  8</span>      <span class="k2">{</span>   
<span class="number">  9</span>         <a href="http://www.allegro.cc/manual/al_drop_next_event"><span class="a">al_drop_next_event</span></a><span class="k2">(</span>kbdQueue<span class="k2">)</span><span class="k2">;</span> <span class="c">//remove all events but the keys   </span>
<span class="number"> 10</span>         <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>   
<span class="number"> 11</span>      <span class="k2">}</span>   
<span class="number"> 12</span>      <span class="k1">if</span> <span class="k2">(</span>master_event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_CHAR<span class="k2">)</span>   
<span class="number"> 13</span>      <span class="k2">{</span>   
<span class="number"> 14</span>         key_capture <span class="k3">=</span> keymap<span class="k2">[</span>master_event.keyboard.keycode<span class="k2">]</span><span class="k2">;</span>   
<span class="number"> 15</span>         <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>   
<span class="number"> 16</span>      <span class="k2">}</span>   
<span class="number"> 17</span>   <span class="k2">}</span>   
<span class="number"> 18</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 19</span><span class="k2">}</span>
</div></div><p>

If a person presses a key, what line will this code return at?<br />If a person releases a key, what line will this code return at?</p><p>You are checking for a key down event, then clearing the queue and exiting with a return 0.  You are also checking for a key up event in the same code.  So no matter what happens, no matter what key is pressed, it will ALWAYS return 0 with nothing.</p><p>WHat you want to do, is to check if a key is pressed, or released, up to you (you can respond as soon as it is pressed, or wait for the person to release it).  Anyhow, once it is pressed, you do not return right away, you then need to check which key was pressed INSIDE that same code, and respond to it accordingly... like this... in pseudo code.</p><p>Was a key pressed?<br />{<br />  Get key that was pressed and respond to it.<br />  return<br />}<br />else no key pressed, check for other events<br />{<br />...code here...<br />}</p><p>You&#39;re checking if a key was pressed and then returning without doing anything at all. Check the example I showed you.  It is in C, I clipped it straight out of my Deluxe Pacman 2 code, unedited, so it works.  You will notice when I check to see if a key is released, if one was, than I immediately extract the key that was pressed and respond inside that loop.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Sun, 14 Jan 2018 14:37:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If you simply must do it in C, then just take advantage of allegro. If you get a key up or down event, discard it. If you get a char event leave it on the queue until _getch is called.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a><span class="k3">*</span> q<span class="k2">;</span><span class="c">// only register the kb to this queue</span>
<span class="number">  2</span>
<span class="number">  3</span><span class="k1">int</span> _kbhit<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  4</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> ev<span class="k2">;</span>
<span class="number">  5</span>   <span class="k1">while</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_peek_next_event"><span class="a">al_peek_next_event</span></a><span class="k2">(</span>q , <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  6</span>      <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">!</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_CHAR<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  7</span>         <a href="http://www.allegro.cc/manual/al_drop_next_event"><span class="a">al_drop_next_event</span></a><span class="k2">(</span>q<span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>      <span class="k2">}</span>
<span class="number">  9</span>      <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 10</span>         <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 11</span>      <span class="k2">}</span>
<span class="number"> 12</span>   <span class="k2">}</span>
<span class="number"> 13</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 14</span><span class="k2">}</span>
<span class="number"> 15</span>
<span class="number"> 16</span><span class="k1">int</span> _getch<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 17</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> ev<span class="k2">;</span>
<span class="number"> 18</span>   <a href="http://www.allegro.cc/manual/al_get_next_event"><span class="a">al_get_next_event</span></a><span class="k2">(</span>q , <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>   <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">!</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_CHAR<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="n">0</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 20</span>   <span class="k1">return</span> ev.keyboard.unichar<span class="k2">;</span>
<span class="number"> 21</span><span class="k2">}</span>
<span class="number"> 22</span>
<span class="number"> 23</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc , <span class="k1">char</span><span class="k3">*</span><span class="k3">*</span> argv<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 24</span>   
<span class="number"> 25</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="n">1</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 26</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="n">2</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 27</span>
<span class="number"> 28</span>   q <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>   <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>q , <a href="http://www.allegro.cc/manual/al_get_keyboard_event_source"><span class="a">al_get_keyboard_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>
<span class="number"> 31</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a><span class="k3">*</span> d <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span><span class="n">400</span>,<span class="n">300</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>   <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 33</span>   <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span>
<span class="number"> 35</span>   <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>_kbhit<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 36</span>      <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">001</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>   <span class="k2">}</span>
<span class="number"> 38</span>
<span class="number"> 39</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"You typed %p\n"</span> , <span class="k2">(</span><span class="k1">void</span><span class="k3">*</span><span class="k2">)</span>_getch<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span>
<span class="number"> 41</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 42</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 15 Jan 2018 05:30:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for all your input guys! You were right Neil, I wasn&#39;t thinking the logic though. But thanks especially to you Edgar! You have been overly helpful with all my silly questions to the point I feel like I&#39;m being a bother. I guess it doesn&#39;t hurt I&#39;m showing off my work and demonstrating I&#39;m at least <b>trying</b> to get things right. I have gained such a larger grasp on Allegro with this project than I imagined I would.. Maybe I should be giving back to the community and helping out the newbies too.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (nshade)</author>
		<pubDate>Tue, 16 Jan 2018 06:31:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I gave you bad code. Let me fix it.
</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617216/1034541#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> _getch<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
   <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> ev<span class="k2">;</span>
<div class="highlight">   <a href="http://www.allegro.cc/manual/al_get_next_event"><span class="a">al_get_next_event</span></a><span class="k2">(</span>q , <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">;</span></div>
   <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">!</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_CHAR<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="n">0</span><span class="k2">;</span><span class="k2">}</span>
   <span class="k1">return</span> ev.keyboard.unichar<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div></div><p>

The above code could have passed back an uninitialized value for ev.keyboard.unichar in the case of ev.type being KEY_CHAR left over in memory.
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> _getch<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
   <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> ev<span class="k2">;</span>
   <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_next_event"><span class="a">al_get_next_event</span></a><span class="k2">(</span>q , <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
      <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">!</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_CHAR<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="n">0</span><span class="k2">;</span><span class="k2">}</span>
      <span class="k1">return</span> ev.keyboard.unichar<span class="k2">;</span>
   <span class="k2">}</span>
   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
This makes sure you actually received an event before checking its fields.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 16 Jan 2018 17:56:12 +0000</pubDate>
	</item>
</rss>
