<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Text input using allegro 5</title>
		<link>http://www.allegro.cc/forums/view/617234</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 16 Feb 2018 01:08:55 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I am having a problem getting user input using allegro 5. I have seen all the<br />comments on this site concerning user input! All the comments seem to be somewhat over my head! I have just started using allegro 5. What I am concerned with is<br />getting user input from the keyboard such as a user&#39;s name. I would prefer that<br />it would be in ascii text using graphics mode. If someone could post a small portion<br />of code in C language showing a switch statement I would be most grateful. If you<br />would like more info I would be glad to post it. Thanks to all that would like to<br />help me with this problem.<br />There was one post by AmnesiA that was posted on 9-27-2013 @ 9:58 AM that was very<br />helpful but I never got anything it to work.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Scooter)</author>
		<pubDate>Wed, 24 Jan 2018 03:11:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It&#39;s really not that hard. Hook an event queue up to the keyboard and listen for ALLEGRO_EVENT_KEY_CHAR events. Listen for ev.keyboard.unichar and ev.keyboard.keycode to determine what to do with the input.</p><p>Here&#39;s a quick example of how to check these events :</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">do</span> <span class="k2">{</span>
<span class="number">  2</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">  3</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>q , <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</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">  5</span>                <span class="k1">switch</span><span class="k2">(</span>ev.keyboard.keycode<span class="k2">)</span> <span class="k2">:</span>
<span class="number">  6</span>                <span class="k1">case</span> ALLEGRO_KEY_ENTER <span class="k2">:</span>
<span class="number">  7</span>                    <span class="c">/// Enter string, process</span>
<span class="number">  8</span>                    <span class="k1">break</span><span class="k2">;</span>
<span class="number">  9</span>                <span class="k1">case</span> ALLEGRO_KEY_BACKSPACE <span class="k2">:</span>
<span class="number"> 10</span>                    <span class="c">/// Remove character before caret</span>
<span class="number"> 11</span>                    <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 12</span>                <span class="k1">case</span> ALLEGRO_KEY_DELETE <span class="k2">:</span>
<span class="number"> 13</span>                    <span class="c">/// Remove character at caret</span>
<span class="number"> 14</span>                    <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 15</span>                <span class="k1">default</span> <span class="k2">:</span>
<span class="number"> 16</span>                    <span class="c">/// Add character to our string</span>
<span class="number"> 17</span>                    <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 18</span>            <span class="k2">}</span>
<span class="number"> 19</span>            
<span class="number"> 20</span>        <span class="k2">}</span> <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>q<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 24 Jan 2018 03:23:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks Edgar for your prompt reply.<br />I will slip it in my program and see what happens.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Scooter)</author>
		<pubDate>Wed, 24 Jan 2018 03:31:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Your text will be built from the ev.keyboard.unichar field, and your commands come from ev.keyboard.keycode. If you don&#39;t get a command, you&#39;ve got a char. Let me know how it goes.</p><p>EDIT<br />You can check out my TINS 2017 entry to see how to monitor text. Take a look here :</p><p><a href="https://github.com/EdgarReynaldo/EagleGUI/blob/master/TINS2017/src/Game.cpp#L380-L479">https://github.com/EdgarReynaldo/EagleGUI/blob/master/TINS2017/src/Game.cpp#L380-L479</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 24 Jan 2018 03:38:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Good morning Edgar:<br />  I plugged your code into my program and code:blocks generated a few errors.<br />Some I have no idea what to do about! So, after 3 weeks dealing with this one<br />problem, I have had enough! I am going to try to forget about it! Maybe later<br />I will try again. I appreciate your time but Allegro is too much of a problem<br />for me! I had to give up on Python for the exact same reason. Thanks for your<br />time but it appears I can&#39;t master that keyboard! Have a great day my friend!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Scooter)</author>
		<pubDate>Wed, 24 Jan 2018 20:22:09 +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/617234/1034782#target">Scooter</a> said:</div><div class="quote"><p>  I appreciate your time but Allegro is too much of a problemfor me! I had to give up on Python for the exact same reason.</p></div></div><p>If you keep giving up every time you run into trouble, you&#39;ll never get anywhere with anything.</p><p>What were the errors you had?  If we can help you fix them you might learn how to fix the next problem yourself.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (LennyLen)</author>
		<pubDate>Wed, 24 Jan 2018 22:03:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>My apologies, that code was missing brackets and other things. Try this structure instead :
</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">do</span> <span class="k2">{</span>
<span class="number">  2</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">  3</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>q , <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</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">  5</span>                <span class="k1">switch</span> <span class="k2">(</span>ev.keyboard.keycode<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  6</span>                <span class="k1">case</span> ALLEGRO_KEY_ENTER <span class="k2">:</span>
<span class="number">  7</span>                    <span class="c">/// Enter string, process</span>
<span class="number">  8</span>                    <span class="k1">break</span><span class="k2">;</span>
<span class="number">  9</span>                <span class="k1">case</span> ALLEGRO_KEY_BACKSPACE <span class="k2">:</span>
<span class="number"> 10</span>                    <span class="c">/// Remove character before caret</span>
<span class="number"> 11</span>                    <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 12</span>                <span class="k1">case</span> ALLEGRO_KEY_DELETE <span class="k2">:</span>
<span class="number"> 13</span>                    <span class="c">/// Remove character at caret</span>
<span class="number"> 14</span>                    <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 15</span>                <span class="k1">default</span> <span class="k2">:</span>
<span class="number"> 16</span>                    <span class="c">/// Add character to our string</span>
<span class="number"> 17</span>                    <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 18</span>                <span class="k2">}</span>
<span class="number"> 19</span>            <span class="k2">}</span>
<span class="number"> 20</span>            
<span class="number"> 21</span>        <span class="k2">}</span> <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>q<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</div></div><p>

</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617234/1034782#target">Scooter</a> said:</div><div class="quote"><p>
Good morning Edgar:<br /><b>I plugged your code into my program</b> and code:blocks generated a few errors.<br />Some I have no idea what to do about! So, after 3 weeks dealing with this one<br />problem, I have had enough! I am going to try to forget about it! Maybe later<br />I will try again. I appreciate your time but Allegro is too much of a problem<br />for me! I had to give up on Python for the exact same reason. Thanks for your<br />time but it appears I can&#39;t master that keyboard! Have a great day my friend! 
</p></div></div><p>
Scooter,<br />If you keep giving up you&#39;ll never learn anything. Failure is normal. You need to keep going. When you get an error, read what it says, usually they help you figure out what is wrong. Also, you need some basic C programming skills. Python is actually not that difficult to understand.</p><p>Don&#39;t just plug code into your program. You need to understand what it does. Copy Paste Coding is the Source of all Evil<sup>TM</sup>.</p><p>Also, I didn&#39;t show where I initialized the &#39;q&#39; variable :</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> 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>
</pre></div></div><p>

and hook it up to the keyboard :</p><div class="source-code snippet"><div class="inner"><pre><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>
</pre></div></div><p>

THEN, you can use it later on. But you have to set it up properly before doing so.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 25 Jan 2018 03:04:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Note to LennyLen:</p><p>I appreciate your concern!<br />I have accomplished many GREAT things in my lifetime.<br />I consider what little programming I do to be a lot of FUN!<br />If it ever becomes NOT FUN, then I consider it NOT WORTHWHILE!<br />Not everyone can become an expert in programming!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Scooter)</author>
		<pubDate>Thu, 25 Jan 2018 19:27:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>We can help answer any questions you may have, but you need a good book on Programming in C. There are a lot of good websites out there too, such as <a href="http://cppreference.com">http://cppreference.com</a> (which has a good C reference as well). Once you&#39;re comfortable with C, you need to become comfortable with reading documentation for the libraries you&#39;re using, such as <a href="http://liballeg.org/a5docs/trunk/">http://liballeg.org/a5docs/trunk/</a> .</p><p>Getting started : <a href="http://liballeg.org/a5docs/trunk/getting_started.html">http://liballeg.org/a5docs/trunk/getting_started.html</a></p><p>There are tutorials for Allegro on the wiki, here :</p><p><a href="https://wiki.allegro.cc/index.php?title=Allegro_5_API_Tutorials">https://wiki.allegro.cc/index.php?title=Allegro_5_API_Tutorials</a></p><p>If you don&#39;t understand something on one of those pages, ask here.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 25 Jan 2018 23:27:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Good afternoon Edgar:<br />  I may have left the wrong impression. I have been using the C language off and<br />on for the last 25 to 30 years. I don&#39;t consider myself an expert but I do have many<br />programs I have written. I started back in the day when Borland Turbo C was popular.<br />I guess I just told my age. Nonetheless, I am somewhat familiar with Allegro 5. I<br />have a Poker game I have written and a program displaying my favorite cars in a slide<br />show with music playing in the background. These programs all use the mouse to<br />navigate through the program. I would not consider either one professional, but they<br />both work perfectly. My main problem is the keyboard. None of the programs I have<br />found are using the keyboard like I am trying to. I do not have a problem with using<br />the arrow keys like many of the programs show. What I want to do is press a key and<br />it show on the screen the key I pressed. This would be like a person&#39;s name which<br />would be copied to a structure like an address book. None of the programs show how<br />this is done in Allegro 5. I guess my problem is the syntax in Allegro 5. At my age<br />this is something I do for fun and fun only. I have no intention of being a pro-<br />fessional programmer. I appreciate your help but I wanted to let you know what my<br />goals were. Have a great day!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Scooter)</author>
		<pubDate>Fri, 26 Jan 2018 01:07:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You should take a look at <a href="https://github.com/liballeg/allegro5/blob/master/examples/ex_keyboard_events.c">ex_keyboard_events.c</a>. It shows you exactly how to use the keyboard.</p><p>What you need to understand about Allegro 5 is that it uses events. Keyboard information comes in the form of events. There are ALLEGRO_EVENT_KEY_DOWN, ALLEGRO_EVENT_KEY_UP, and ALLEGRO_EVENT_KEY_CHAR events. When you need to know what key was pressed you use ALLEGRO_EVENT_KEY_DOWN, and when you need to know what character was typed, you use ALLEGRO_EVENT_KEY_CHAR.</p><p><a href="http://liballeg.org/a5docs/trunk/events.html#allegro_event_key_char">ALLEGRO_EVENT_KEY_CHAR</a></p><p>You may not be aspiring to be a professional programmer, but at the same time, this is pretty simple stuff. I believe that if a person is going to do something, they should do it to the best of their ability or not at all. Giving up because something is hard is self destructive. You will start to believe that you can&#39;t do it, and if you believe you can&#39;t then you actually can&#39;t do it. It&#39;s a self fulfilling prophecy. However, if you believe you can, you can. Mind set is everything.</p><div class="quote_container"><div class="title"><a href="https://github.com/liballeg/allegro5/blob/master/examples/ex_keyboard_events.c#L25-L34">ex_keyboard_events.c : 25-34</a> said:</div><div class="quote"><p>
</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"> 25</span><span class="k1">static</span> <span class="k1">void</span> log_key<span class="k2">(</span><span class="k1">char</span> <span class="k1">const</span> <span class="k3">*</span>how, <span class="k1">int</span> keycode, <span class="k1">int</span> unichar, <span class="k1">int</span> modifiers<span class="k2">)</span>
<span class="number"> 26</span><span class="k2">{</span>
<span class="number"> 27</span>   <span class="k1">char</span> multibyte<span class="k2">[</span><span class="n">5</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</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="k2">}</span><span class="k2">;</span>
<span class="number"> 28</span>   <span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span> key_name<span class="k2">;</span>
<span class="number"> 29</span>
<div class="highlight"><span class="number"> 30</span>   <a href="http://www.allegro.cc/manual/al_utf8_encode"><span class="a">al_utf8_encode</span></a><span class="k2">(</span>multibyte, unichar <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">32</span> ? <span class="s">' '</span> <span class="k2">:</span> unichar<span class="k2">)</span><span class="k2">;</span></div><div class="highlight"><span class="number"> 31</span>   key_name <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_keycode_to_name"><span class="a">al_keycode_to_name</span></a><span class="k2">(</span>keycode<span class="k2">)</span><span class="k2">;</span></div><span class="number"> 32</span>   log_printf<span class="k2">(</span><span class="s">"%-8s  code=%03d, char='%s' (%4d), modifiers=%08x, [%s]\n"</span>,
<span class="number"> 33</span>      how, keycode, multibyte, unichar, modifiers, key_name<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span><span class="k2">}</span>
</div></div><p>
</p></div></div><p>

They use two functions to display the character. <a href="http://liballeg.org/a5docs/trunk/utf8.html#al_utf8_encode">al_utf8_encode</a>, and <a href="http://liballeg.org/a5docs/trunk/keyboard.html#al_keycode_to_name">al_keycode_to_name</a>. The first gives you the character&#39;s unicode code point, and the second gives you the name of the key that was pressed. Notice how al_utf8_encode takes ev.keyboard.unichar? And al_keycode_to_name takes ev.keyboard.keycode?</p><p>I hope this helps clear things up.</p><p>Please ask if you need help.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 26 Jan 2018 03:37:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Good afternoon Edgar:</p><p>   Had no luck with your code segment! Finally wrote what I needed in C, away<br />from Allegro. Entered my info, saved to disk and loaded into my Allegro program.<br />A little extra work but worked out fine! That was my only hope! There is something<br />about that keyboard in Allegro that I can&#39;t understand. But I got the job done<br />and I am happy. Too many sleepless nights worrying about it! Thanks for your time.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Scooter)</author>
		<pubDate>Wed, 31 Jan 2018 00:45:47 +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/617234/1034788#target">LennyLen</a> said:</div><div class="quote"><p>If you keep giving up every time you run into trouble, you&#39;ll never get anywhere with anything.</p></div></div><p>

Agreed.  I wrote a complete game with all the various inputs for Allegro 4 (Deluxe Pacman 1 below) and for Allegro 5 (Deluxe Pacman 2 below).  All work just fine.  </p><p>You won&#39;t find it much different with anything else. Maybe programming is too much, perhaps game making software is more your style, Game Maker or such.</p><p>This is the high score entry code I have for my Deluxe Pacman 2... written in C (as my whole game is)</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">while</span><span class="k2">(</span><span class="k3">!</span>done<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  2</span>         <span class="k1">if</span><span class="k2">(</span>pos <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span> <a href="http://www.allegro.cc/manual/al_ustr_assign"><span class="a">al_ustr_assign</span></a><span class="k2">(</span>hiscore<span class="k2">[</span>difficulty<span class="k2">]</span><span class="k2">[</span>myscore<span class="k2">]</span>.name, yourname<span class="k2">)</span><span class="k2">;</span>
<span class="number">  3</span>
<span class="number">  4</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">  5</span>         <span class="k1">switch</span><span class="k2">(</span>event.type<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  6</span>            <span class="k1">case</span> ALLEGRO_EVENT_DISPLAY_CLOSE:
<span class="number">  7</span>               close_button <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  8</span>               done <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  9</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 10</span>            <span class="k1">case</span> ALLEGRO_EVENT_TIMER:
<span class="number"> 11</span>               redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 12</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 13</span>            <span class="k1">case</span> ALLEGRO_EVENT_KEY_CHAR:
<span class="number"> 14</span>               <span class="k1">if</span><span class="k2">(</span>event.keyboard.unichar <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">32</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 15</span>                  <span class="c">// keyboard typing sound effect</span>
<span class="number"> 16</span>                  <span class="k1">if</span><span class="k2">(</span>setting.sound_on<span class="k2">)</span> <a href="http://www.allegro.cc/manual/al_play_sample"><span class="a">al_play_sample</span></a><span class="k2">(</span>sfx_type, setting.sound_volume, <span class="n">0</span>, <span class="n">1</span>,
<span class="number"> 17</span>                                                         ALLEGRO_PLAYMODE_ONCE, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>                  pos <span class="k3">+</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_append_chr"><span class="a">al_ustr_append_chr</span></a><span class="k2">(</span>yourname, event.keyboard.unichar<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>                  <span class="c">// Get the width of the name in pixels (because TTF varies in width)</span>
<span class="number"> 20</span>                  x <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_text_width"><span class="a">al_get_text_width</span></a><span class="k2">(</span>font_verdana, <a href="http://www.allegro.cc/manual/al_cstr"><span class="a">al_cstr</span></a><span class="k2">(</span>yourname<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>                  <span class="k1">if</span><span class="k2">(</span>x <span class="k3">&gt;</span> MAX_NAME_LEN<span class="k2">)</span> <span class="k2">{</span>  <span class="c">// Check if the width in pixels is greater than the allowed size</span>
<span class="number"> 22</span>                     <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_ustr_prev"><span class="a">al_ustr_prev</span></a><span class="k2">(</span>yourname, <span class="k3">&amp;</span>pos<span class="k2">)</span><span class="k2">)</span> <a href="http://www.allegro.cc/manual/al_ustr_truncate"><span class="a">al_ustr_truncate</span></a><span class="k2">(</span>yourname, pos<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>                  <span class="k2">}</span>
<span class="number"> 24</span>               <span class="k2">}</span>
<span class="number"> 25</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_BACKSPACE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 26</span>                  <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_ustr_prev"><span class="a">al_ustr_prev</span></a><span class="k2">(</span>yourname, <span class="k3">&amp;</span>pos<span class="k2">)</span><span class="k2">)</span> <a href="http://www.allegro.cc/manual/al_ustr_truncate"><span class="a">al_ustr_truncate</span></a><span class="k2">(</span>yourname, pos<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">else</span> <span class="k1">if</span><span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_ENTER <span class="k3">|</span><span class="k3">|</span>
<span class="number"> 29</span>                       event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_PAD_ENTER<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 30</span>                  <a href="http://www.allegro.cc/manual/al_ustr_assign"><span class="a">al_ustr_assign</span></a><span class="k2">(</span>hiscore<span class="k2">[</span>difficulty<span class="k2">]</span><span class="k2">[</span>myscore<span class="k2">]</span>.name, yourname<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</span>                  done <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 32</span>               <span class="k2">}</span>
<span class="number"> 33</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_F12<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 34</span>                  <span class="k1">if</span><span class="k2">(</span>setting.sound_on<span class="k2">)</span>
<span class="number"> 35</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"> 36</span>                  a5_screenshot<span class="k2">(</span><span class="s">"Screenshots/DeluxePacman2"</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="k1">break</span><span class="k2">;</span>
<span class="number"> 39</span>         <span class="k2">}</span>
<span class="number"> 40</span>
<span class="number"> 41</span>         <span class="k1">if</span><span class="k2">(</span>redraw <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 42</span>            redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 43</span>            <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>buffer, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 44</span>            draw_entry_box<span class="k2">(</span>myscore<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 45</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"> 46</span>         <span class="k2">}</span>
<span class="number"> 47</span>      <span class="k2">}</span>
<span class="number"> 48</span>      <span class="c">// Wait if a key is being held down</span>
<span class="number"> 49</span>      <span class="k1">do</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"> 50</span>      <span class="k1">while</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"> 51</span>
<span class="number"> 52</span>      <span class="c">// display score once it is entered, add 10 to player # to flag the function not to check</span>
<span class="number"> 53</span>      <span class="c">// to see if the player topped the high score list, this is just to redisplay the scores.</span>
<span class="number"> 54</span>      score_table<span class="k2">(</span>score, player <span class="k3">+</span> <span class="n">10</span>, level<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 55</span>   <span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Mon, 05 Feb 2018 03:15:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Neil:<br /> Thanks for replying. I am going to try this again. I believe my problem<br />is the unichar. How would it look to use ascii text. Using the unichar my<br />program compiles fine, but when I sprintf the string in my buffer and use<br />textf to print buffer to screen, nothing shows on the screen. I really don&#39;t<br />know where my problem is. I have tried different ways and they all compile with<br />no warnings or errors, but I can&#39;t get a thing printed to the screen. That is<br />the reason I broke away from allegro and wrote it in straight C to get the job<br />done. I then saved my info to disk, brought up allegro and imported my info<br />to my structure and then printed to the screen. Everything worked as I wanted.<br />I believe I need to use straight ascii text and I would be fine. Any ideas on<br />that. Thanks for your time. This seems to be my main problem using allegro 5.<br />I have no problem with the arrow keys or the mouse.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Scooter)</author>
		<pubDate>Mon, 05 Feb 2018 04:10:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>My function above uses unicode to support all sorts of text as I have had people play my game from all over the world and there needed to be support for international characters etc.  It wasn&#39;t difficult to be honest.</p><p>The one problem I had when I first converted over to unichar or whatever in heck they are called (been a while).  Was my main project files needed to be encoded as UTF-8 files.</p><p>If you look at the source I shared, it works (download and run my Deluxe Pacman 2 game, that is the code straight from that game for the high score input).</p><p>If you look at my code, you will see I use special Allegro functions which will assign unicode text to things like my highscore array.</p><p><span class="source-code"><a href="http://www.allegro.cc/manual/al_ustr_assign"><span class="a">al_ustr_assign</span></a><span class="k2">(</span>hiscore<span class="k2">[</span>difficulty<span class="k2">]</span><span class="k2">[</span>myscore<span class="k2">]</span>.name, yourname<span class="k2">)</span><span class="k2">;</span></span></p><p>Here I assign &quot;yourname&quot; (the name you entered) to the hiscore array, which is just the list of highscores.  Here&#39;s the variables I use to store the name in...</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">typedef</span> <span class="k1">struct</span> HISCORES <span class="k2">{</span>
   <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a> <span class="k3">*</span>name<span class="k2">;</span>
   <span class="k1">unsigned</span> <span class="k1">long</span>  score<span class="k2">;</span>
   <span class="k1">int</span>            level<span class="k2">;</span>
   <span class="k1">char</span>           <a href="http://www.delorie.com/djgpp/doc/libc/libc_821.html" target="_blank">time</a><span class="k2">[</span>TIME_LEN<span class="k2">]</span><span class="k2">;</span>   <span class="c">// Adjust the size to match characters needed for storage</span>
<span class="k2">}</span> HISCORES<span class="k2">;</span>

<span class="k1">static</span> HISCORES hiscore<span class="k2">[</span>DIFFICULTY<span class="k2">]</span><span class="k2">[</span>NUM_SCORES<span class="k2">]</span><span class="k2">;</span>

<span class="k1">static</span> <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a> <span class="k3">*</span>yourname<span class="k2">;</span>
</pre></div></div><p>

As you can see, the &quot;name&quot; part of the struct where I store the text NEEDS to be an <span class="source-code"><a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a></span> in order to be able to store it properly.</p><p>It may seem like a bit of a pain now, but it really is worth it to understand how to handle unicode if you wish to make anything that can be used internationally.  For my Deluxe Pacman games, I have had literally millions of downloads (free game), most from South America and other foreign nations, so the unicode support was a good thing to have.  If your text is not appearing it could be due to not storing it properly or using the right functions to display it.</p><p>Go over your code a step at a time.  </p><p>1) Am I using unicode storage?  <span class="source-code"><a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a></span><br />2) am I copying text using unicode functions?  <span class="source-code"><a href="http://www.allegro.cc/manual/al_ustr_assign"><span class="a">al_ustr_assign</span></a><span class="k2">(</span><span class="k2">)</span></span><br />3) am I using unicode functions to display it?</p><p>etc... you can do this. I know, I was frustrated with this as well until one day when you get it right. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Mon, 05 Feb 2018 05:22:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You don&#39;t need any ALLEGRO_USTR&#39;s to use ev.keyboard.unichar . Encode it to utf-8 and then you have the ascii value in the lower byte.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 05 Feb 2018 08:02:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I already posted code... `if(event.keyboard.unichar &gt;= 32) {`  And what I posted, works.  But feel free to piss around with other methods.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Mon, 05 Feb 2018 08:41:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Feel free to needlessly complicate things by using an ALLEGRO_USTR if you want Neil. The lower byte of ev.keyboard.unichar IS ascii, due to the way it is encoded. And you have to check for the upper bound as well, not just the lower bound.</p><p><span class="source-code">If <span class="k2">(</span><span class="k2">(</span>unichar <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">32</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> unichar <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">127</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>...<span class="k2">}</span></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 05 Feb 2018 09:34:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If you want to use pure ASCII, than ditch Unicode entirely and just do ASCII.  It is absolutely pointless to have Unicode when you want ASCII.  But if you want to support Unicode, than you don&#39;t want an upper boundary!</p><p>In my code you absolutely do not want an upper boundary as it is a highscore input and people will be typing in their names which may be using characters that go well above 127!  You do realize that there are other characters in the world right and that is the whole point of Unicode?</p><p>To set boundaries to ASCII in a Unicode routine doesn&#39;t make any sort of sense.  At least not for the use I have in my own code example.  As soon as someone from another nation, say a French person, types in &quot;é&quot;, limiting your characters to ASCII will miss this!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Mon, 05 Feb 2018 10:09:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>He specifically asked for ascii. <img src="http://www.allegro.cc/forums/smileys/rolleyes.gif" alt="::)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 05 Feb 2018 15:29:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>He wants user input like a user NAME, so he will want Unicode, not ASCII.  As I stated, I already gave an example of using it that works and I explained why I do not have an upper limit.  </p><p>If you want ASCII, than don&#39;t use Unicode!  But don&#39;t <span class="cuss"><span>fuck</span></span>ing criticize MY Unicode because it doesn&#39;t have an upper limit, it only shows off your ignorance. <img src="http://www.allegro.cc/forums/smileys/angry.gif" alt="&gt;:(" /> <img src="http://www.allegro.cc/forums/smileys/rolleyes.gif" alt="::)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Mon, 05 Feb 2018 22:31:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Listen closely you old fart. You were the one who criticized me first. I don&#39;t appreciate it. Watch your mouth.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617234/1035091#target">Neil Roy</a> said:</div><div class="quote"><p>
I already posted code... `if(event.keyboard.unichar &gt;= 32) {` And what I posted, works. <b>But feel free to piss around with other methods.</b>
</p></div></div><p>
If all you want is ascii, then characters above 127 are extranneous. If you want to piss around with ALLEGRO_USTRs, by all means go ahead, but for someone who only wants <b>ASCII</b>, it is a ton of wasted work. See how that sounds? So piss off. Seems to be your favorite saying, hope you enjoy people saying it to you.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617234/1034758#target">Scooter</a> said:</div><div class="quote"><p>
I would prefer that it would be in <b>ascii</b> text
</p></div></div><p>
Having trouble reading?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 06 Feb 2018 03:25:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>&quot;piss around with&quot; is the same as saying &quot;mess around with&quot; or &quot;screw around with&quot; or whatever.  You take offense too easily.  He wanted input for names which is why I recommended using Unicode.  </p><p>As for my age (53, hardly old)...</p><p>1 Timothy 5:1 (NIV)<br />Do not rebuke an older man harshly, but exhort him as if he were your father.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Tue, 06 Feb 2018 08:07:26 +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/617234/1035120#target">Neil Roy</a> said:</div><div class="quote"><p> He wanted input for names which is why I recommended using Unicode.</p></div></div><p>Not to mention that it&#39;s usually been the policy around here to point people towards the proper way of doing things, not the quick&#39;n&#39;easy way.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (LennyLen)</author>
		<pubDate>Tue, 06 Feb 2018 12:40:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>My apologies Neil. But you really know how to get on my nerves.</p><p>As for the OP, he&#39;s clearly struggling with this, and complicating things with ALLEGRO_USTRs is bound to make things harder for him.</p><p>And to be honest, the USTR api in allegro is probably my least favorite. Handling strings in C is a pain in the rear.</p><p>That there isn&#39;t a better C++ standard string is quite frankly appalling, given the number of decades they&#39;ve had to make one. std::string is still better than messing around with c-strings though.</p><p>It stems directly from C++ and C&#39;s poor way of handling dynamic arrays.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 06 Feb 2018 22:43:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well, if you look over my code you can see that I handled it with no problem, and that was one of the first times I had really dealt with Unicode.  If you want to make a game these days and want to make certain anyone, from any language can enter their name, you want unicode.  Personally, I didn&#39;t have a problem with it and have never had a problem handling C strings, or pointers etc.</p><p>This is the main reason I posted the code I use in my game.  It&#39;s simple and works well.  I think this is one area where Allegro done a great job.  I don&#39;t find it difficult at all, look at my code, that&#39;s pretty simple, part of that code has stuff in it for my sound effects and what not, trim them out and there isn&#39;t much to it.</p><p>In any event, whether you find it more difficult or not, if you wish to create a game that anyone can use, you will have to support this or limit your audience.  And the vast majority or people that play my game are people from other countries, usually non-English speaking nations.  For fun or for profit, there&#39;s a huge market out there of people in non-English speaking countries.  It&#39;s best to learn to do it right early on.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Tue, 06 Feb 2018 23:44:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Good afternoon to Neil and Edgar:<br />  I am so sorry that I caused you two to have bad feelings between you. That<br />certainly was NOT my intention. Hope you can mend your differences. I only ask<br />a question because I need help and I still do. I have been working on this problem<br />for the past two days and have gotten nowhere. To me, there is no reason why this should be so hard to figure out. I have been able to do everything I needed to do<br />with allegro 5, but this keyboard is a problem I can&#39;t solve. The code supplied<br />allows me to press a key and it will show on the screen, but it is beyond me how<br />to get it in my buffer and be able to display it. I have tried al_draw_ustr() and<br />everything else I could fine but nothing is displayed. I am still shooting in the<br />dark on this one. Oh, I forgot to mention I have used al_ustr_to_buffer() but still<br />nothing. I will get back in touch with you later. Hang on, its been a bumpy ride so far. Have a great day my friends!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Scooter)</author>
		<pubDate>Wed, 07 Feb 2018 03:32:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617234/1035146#target">Scooter</a> said:</div><div class="quote"><p>
Good afternoon to Neil and Edgar:<br />I am so sorry that I caused you two to have bad feelings between you. That<br />certainly was NOT my intention. Hope you can mend your differences.
</p></div></div><p>
Don&#39;t worry about it Scooter. Neil and I argue all the time. It&#39;s normal. Yes, we&#39;re a little dysfunctional around here...</p><div class="quote_container"><div class="title">Scooter said:</div><div class="quote"><p>
 it is beyond me how to get it in my buffer and be able to display it.
</p></div></div><p>
You need to use a string concatenation function, whether it be for a c-string (whether it&#39;s encoded in ascii, utf-8 or something else) or an ALLEGRO_USTR, or whatever you want to store it in. Then you need to draw it on the screen using allegro and an ALLEGRO_FONT* that you create. </p><p>Show us the code that you&#39;re using, and we can tell you what needs to be fixed. </p><p>Use &lt;code&gt;<span class="source-code">code_goes_here<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></span>&lt;/code&gt; tags to post code.</p><p>I&#39;ll try to come up with a quick example in the mean time.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617234/1035120#target">Neil Roy</a> said:</div><div class="quote"><p>
1 Timothy 5:1 (NIV)<br />Do not rebuke an older man harshly, but exhort him as if he were your father. 
</p></div></div><p>
</p><div class="quote_container"><div class="title">Ephesians 6:4 said:</div><div class="quote"><p>
4 Fathers, do not provoke your children to anger; instead, bring them up in the discipline and instruction of the Lord.
</p></div></div><p>
<img src="http://www.allegro.cc/forums/smileys/cool.gif" alt="8-)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 07 Feb 2018 13:17:30 +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/617234/1035146#target">Scooter</a> said:</div><div class="quote"><p>
I am so sorry that I caused you two to have bad feelings between you. 
</p></div></div><p>
They&#39;re both adults. If they&#39;re in an argument, it&#39;s nobody&#39;s fault but their own. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Thu, 08 Feb 2018 23:00:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If you scroll down through the messages, you will see that I didn&#39;t start any argument.  But I won&#39;t be helping anyone in these forums again, this way &quot;Edgar&quot; won&#39;t get upset.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Fri, 09 Feb 2018 00:23:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Neil, I never had any problem with you helping someone. But complicating things needlessly for beginners is a bad idea, and it is not what he asked for! You&#39;re the one who started insulting me.</p><div class="quote_container"><div class="title">Neil Roy said:</div><div class="quote"><p>
But don&#39;t ing criticize MY Unicode because it doesn&#39;t have an upper limit, it only shows off your ignorance. <img src="http://www.allegro.cc/forums/smileys/angry.gif" alt="&gt;:(" /> <img src="http://www.allegro.cc/forums/smileys/rolleyes.gif" alt="::)" />
</p></div></div><p>
So I&#39;m ignorant. Thanks.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617234/1035091#target">Neil Roy</a> said:</div><div class="quote"><p>
But feel free to piss around with other methods. 
</p></div></div><p>
So my methods aren&#39;t worth using? That&#39;s funny. The first thing I posted was working example code, and then I posted the allegro example program.</p><p>I find it odd that it&#39;s always my fault when you&#39;re the one who is continually getting upset at me because I don&#39;t agree with you. Don&#39;t have a hissy fit just because you&#39;re wrong. Grow the <span class="cuss"><span>fuck</span></span> up and deal with it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 09 Feb 2018 03:55:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You want my advise Scooter?  Honestly I advise you stay far away from Allegro, any version.  A MUCH better API is SDL2.</p><p>It&#39;s better supported, has a few AAA titles under it&#39;s belt, pre-compiled versions of it are super easy to get, and they work as intended.</p><p>And you can get plenty of help with it online without someone constantly engaging in arguments.  There are tons of Youtube videos with help, the SDL2 wiki is amazing, probably the best designed for help I have seen.</p><p>It&#39;s what I have switched to.  I won&#39;t make anything with Allegro ever again. It&#39;s a dead API.  It was good in it&#39;s day, but it&#39;s day has passed.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Fri, 09 Feb 2018 06:01:23 +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/617234/1035200#target">Neil Roy</a> said:</div><div class="quote"><p>
You want my advise Scooter? Honestly I advise you stay far away from Allegro, any version. A MUCH better API is SDL2.</p><p>It&#39;s better supported, has a few AAA titles under it&#39;s belt, pre-compiled versions of it are super easy to get, and they work as intended.</p><p>And you can get plenty of help with it online without someone constantly engaging in arguments. There are tons of Youtube videos with help, the SDL2 wiki is amazing, probably the best designed for help I have seen.</p><p>It&#39;s what I have switched to. I won&#39;t make anything with Allegro ever again. It&#39;s a dead API. It was good in it&#39;s day, but it&#39;s day has passed. 
</p></div></div><p>

You&#39;re a traitor and a coward. Good riddance to bad rubbish.</p><p>@Scooter<br />Don&#39;t listen to him, he&#39;s just a bitter old man.</p><p>Allegro 5 has a very good API, and you can do it all easier with Allegro than you can with SDL2. We may not be as popular and we may not have as many users, but there are AAA titles made with Allegro 5 as well, such as Factorio and others. Our small user base makes it harder for us to distribute binaries, but I have been releasing binaries for MinGW for the last several years, as well as the binaries that SiegeLord provides on liballeg.org. Neil himself has been using my binaries for a while now. Or didn&#39;t he tell you that? I&#39;m sure he&#39;s going to boycott me now, as well as allegro, because he can&#39;t stand people disagreeing with him. He&#39;s just a sore loser.</p><p>And if our forum has problems with people arguing, it&#39;s usually limited to the off topic ordeals board. But Neil likes to start <span class="cuss"><span><span class="cuss"><span>shit</span></span></span></span> with me, and I don&#39;t care for it. I don&#39;t start fights, I finish them.</p><p>Our forums are usually very good natured, and people almost always get help within a day or two. If that&#39;s too long, you can go on IRC on #allegro on freenode.net and get help almost right away.</p><p>Now I&#39;ll try to get back to making an example for you like I said.</p><p>If your code isn&#39;t working, post it. Then we can show you what&#39;s wrong.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 09 Feb 2018 09:26:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Just being honest and giving him alternative choices.  It&#39;s always good to try different things and see which one works best for you.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Fri, 09 Feb 2018 10:13:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Good afternoon Edgar:<br />  I finally have something that works pretty good. If you have time can you look<br />this over. You would not believe the hours I have in this code! If you have the<br />time, I would love to see this in strictly ascii code. I do not want to see the<br />words unichar or ustr ever again! This represents the worse problem I have ever<br />had with Allegro. Here&#39;s the code:
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Scooter)</author>
		<pubDate>Sat, 10 Feb 2018 03:16:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It&#39;s a little late tonight, but I&#39;ll give you feedback on your code tomorrow if no one else does. I&#39;ve also put together a full example program but I have to work out a couple kinks first. Too tired to work on it anymore tonight though.</p><p>EDIT</p><p>Here&#39;s an example program and the accompanying source code. It&#39;s written entirely in C (for your sake) and uses an ALLEGRO_USTR and an unsigned int code point array (because I hate variable width characters).</p><p><a href="https://www.allegro.cc/files/attachment/611283">InputDemo.zip</a></p><p><span class="remote-thumbnail"><span class="json">{"name":"611284","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/1\/6\/16c0fb481952a8a3024a7a2550c4725f.png","w":802,"h":633,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/1\/6\/16c0fb481952a8a3024a7a2550c4725f"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/1/6/16c0fb481952a8a3024a7a2550c4725f-240.jpg" alt="611284" width="240" height="189" /></span></p><p>Regarding your source code, there are a few things you could improve. It&#39;s pretty disorganized. The formatting is rough and inconsistent. Combined, those two things make it hard to read and understand. It&#39;s a decent start, but could use some organization and proper formatting.</p><p>In my source code I tried to comment as well as I could so you can understand what I&#39;m doing. If you have any questions ask away.</p><p>My example program is pretty functional, but I didn&#39;t include everything that a real text box input widget would have.</p><p>Personally, I would much rather avoid C altogether in favor of C++. Manually inserting and deleting characters into an array is kind of obnoxious in C. The string is stored in an unsigned integer array, and then encoded into an ALLEGRO_USTR for display on demand.</p><p>Here&#39;s the 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 "allegro5/allegro.h"</span>
<span class="number">   2</span><span class="p">#include "allegro5/allegro_font.h"</span>
<span class="number">   3</span><span class="p">#include "allegro5/allegro_ttf.h"</span>
<span class="number">   4</span><span class="p">#include "allegro5/allegro_primitives.h"</span>
<span class="number">   5</span>
<span class="number">   6</span><span class="p">#include &lt;stdio.h&gt;</span>
<span class="number">   7</span>
<span class="number">   8</span>
<span class="number">   9</span><span class="k1">void</span> AssertHandler<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span> expr , <span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span> file , <span class="k1">int</span> <a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a> , <span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span> func<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  10</span>    <span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  11</span>    
<span class="number">  12</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%s failed in file %s on line %d in function %s\n"</span> , expr , file , <a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a> , func<span class="k2">)</span><span class="k2">;</span>
<span class="number">  13</span>    
<span class="number">  14</span>    i <span class="k3">/</span><span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  15</span>    <span class="k1">return</span><span class="k2">;</span>
<span class="number">  16</span><span class="k2">}</span>
<span class="number">  17</span>
<span class="number">  18</span>
<span class="number">  19</span>
<span class="number">  20</span><span class="k1">void</span> CreateUstrFromCodePoints<span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span><span class="k3">*</span> cbuf , <span class="k1">int</span> size , <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a><span class="k3">*</span><span class="k3">*</span> pstr<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  21</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>cbuf<span class="k2">)</span>    <span class="k2">{</span><span class="k1">return</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  22</span>    <span class="k1">if</span> <span class="k2">(</span>size <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  23</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>pstr<span class="k2">)</span>    <span class="k2">{</span><span class="k1">return</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  24</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a><span class="k3">*</span> ustr <span class="k3">=</span> <span class="k3">*</span>pstr<span class="k2">;</span>
<span class="number">  25</span>    <span class="k1">if</span> <span class="k2">(</span>ustr<span class="k2">)</span> <span class="k2">{</span><a href="http://www.allegro.cc/manual/al_ustr_free"><span class="a">al_ustr_free</span></a><span class="k2">(</span>ustr<span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  26</span>    <span class="k3">*</span>pstr <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_new"><span class="a">al_ustr_new</span></a><span class="k2">(</span><span class="s">""</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  27</span>    ustr <span class="k3">=</span> <span class="k3">*</span>pstr<span class="k2">;</span>
<span class="number">  28</span>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span> <span class="k2">;</span> i <span class="k3">&lt;</span> size <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  29</span>        <a href="http://www.allegro.cc/manual/al_ustr_append_chr"><span class="a">al_ustr_append_chr</span></a><span class="k2">(</span>ustr , cbuf<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  30</span>    <span class="k2">}</span>
<span class="number">  31</span>    <span class="k1">return</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="number">  35</span>
<span class="number">  36</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">  37</span>
<span class="number">  38</span>    <span class="c">/// Declarations</span>
<span class="number">  39</span>    
<span class="number">  40</span>    <span class="k1">int</span> ww <span class="k3">=</span> <span class="n">800</span><span class="k2">;</span>
<span class="number">  41</span>    <span class="k1">int</span> wh <span class="k3">=</span> <span class="n">600</span><span class="k2">;</span>
<span class="number">  42</span>    
<span class="number">  43</span>    <span class="k1">bool</span> redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  44</span>    <span class="k1">bool</span> quit <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  45</span>    
<span class="number">  46</span>    <span class="k1">bool</span> caret_blink <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  47</span>    <span class="k1">float</span> caret_duration <span class="k3">=</span> <span class="n">0</span>.<span class="n">5f</span><span class="k2">;</span>
<span class="number">  48</span>    <span class="k1">float</span> elapsed_time <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number">  49</span>    
<span class="number">  50</span>    <span class="c">/// For holding the current string. Just allocate more than we'll need instead of messing around with dynamic arrays</span>
<span class="number">  51</span>    <span class="k1">const</span> <span class="k1">int</span> MAXNCHARS <span class="k3">=</span> <span class="n">24</span><span class="k2">;</span>
<span class="number">  52</span>    <span class="k1">unsigned</span> <span class="k1">int</span> intcharbuf<span class="k2">[</span>MAXNCHARS <span class="k3">+</span> <span class="n">1</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  53</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a><span class="k3">*</span> ustr <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_new"><span class="a">al_ustr_new</span></a><span class="k2">(</span><span class="s">""</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  54</span>
<span class="number">  55</span>    <span class="k1">int</span> caret <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  56</span>    <span class="k1">int</span> nchars <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  57</span>    
<span class="number">  58</span>    <span class="c">/// For holding stored strings</span>
<span class="number">  59</span>    <span class="k1">const</span> <span class="k1">int</span> MAXNLINES <span class="k3">=</span> <span class="n">30</span><span class="k2">;</span>
<span class="number">  60</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a><span class="k3">*</span> ustrs<span class="k2">[</span>MAXNLINES<span class="k2">]</span><span class="k2">;</span>
<span class="number">  61</span>    <span class="k1">int</span> nlines <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  62</span>
<span class="number">  63</span>    <span class="k1">bool</span> insert_mode <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  64</span>    
<span class="number">  65</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> <span class="n">0</span><span class="k2">;</span>
<span class="number">  66</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="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  67</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a><span class="k3">*</span> t <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  68</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a><span class="k3">*</span> f <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  69</span>    
<span class="number">  70</span>    <span class="k1">const</span> <span class="k1">int</span> tx <span class="k3">=</span> ww<span class="k3">/</span><span class="n">2</span><span class="k2">;</span>
<span class="number">  71</span>    <span class="k1">const</span> <span class="k1">int</span> ty <span class="k3">=</span> <span class="n">64</span><span class="k2">;</span>
<span class="number">  72</span>    
<span class="number">  73</span>    <span class="c">/// Code</span>
<span class="number">  74</span>
<span class="number">  75</span>    <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>argc<span class="k2">;</span>
<span class="number">  76</span>    <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>argv<span class="k2">;</span>
<span class="number">  77</span>    
<span class="number">  78</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_569.html" target="_blank">memset</a><span class="k2">(</span>intcharbuf , <span class="n">0</span> , <span class="k2">(</span>MAXNCHARS <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span><span class="k3">*</span><span class="k1">sizeof</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  79</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_569.html" target="_blank">memset</a><span class="k2">(</span>ustrs , <span class="n">0</span> , MAXNLINES<span class="k3">*</span><span class="k1">sizeof</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a><span class="k3">*</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="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">  82</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init_font_addon"><span class="a">al_init_font_addon</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">  83</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init_ttf_addon"><span class="a">al_init_ttf_addon</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">3</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  84</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</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">4</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  85</span>    
<span class="number">  86</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">10</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  87</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_mouse"><span class="a">al_install_mouse</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">11</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  88</span>    
<span class="number">  89</span>    al_register_assert_handler<span class="k2">(</span>AssertHandler<span class="k2">)</span><span class="k2">;</span>
<span class="number">  90</span>    
<span class="number">  91</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">  92</span>    
<span class="number">  93</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>ww,wh<span class="k2">)</span><span class="k2">;</span>
<span class="number">  94</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">  95</span>    t <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_timer"><span class="a">al_create_timer</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span> <span class="k3">/</span> <span class="n">60</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  96</span>    f <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_ttf_font"><span class="a">al_load_ttf_font</span></a><span class="k2">(</span><span class="s">"Consola.ttf"</span> , <span class="k3">-</span><span class="n">24</span> , <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  97</span>    
<span class="number">  98</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>d <span class="k3">|</span><span class="k3">|</span> <span class="k3">!</span>q <span class="k3">|</span><span class="k3">|</span> <span class="k3">!</span>t <span class="k3">|</span><span class="k3">|</span> <span class="k3">!</span>f<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  99</span>    
<span class="number"> 100</span>    
<span class="number"> 101</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"> 102</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_mouse_event_source"><span class="a">al_get_mouse_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 103</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"> 104</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_timer_event_source"><span class="a">al_get_timer_event_source</span></a><span class="k2">(</span>t<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 105</span>
<span class="number"> 106</span>    <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>t<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 107</span>    
<span class="number"> 108</span>    <span class="k1">while</span><span class="k2">(</span><span class="k3">!</span>quit<span class="k2">)</span>
<span class="number"> 109</span>    <span class="k2">{</span>
<span class="number"> 110</span>        <span class="k1">if</span><span class="k2">(</span>redraw<span class="k2">)</span>
<span class="number"> 111</span>        <span class="k2">{</span>
<span class="number"> 112</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">55</span>,<span class="n">111</span>,<span class="n">222</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 113</span>            
<span class="number"> 114</span>            <span class="c">/// Draw text label</span>
<span class="number"> 115</span>            <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span>f , <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">0</span>,<span class="n">0</span>,<span class="n">64</span><span class="k2">)</span> , tx , ty <span class="k3">-</span> <a href="http://www.allegro.cc/manual/al_get_font_line_height"><span class="a">al_get_font_line_height</span></a><span class="k2">(</span>f<span class="k2">)</span> <span class="k3">-</span> <span class="n">5</span> , ALLEGRO_ALIGN_LEFT , <span class="s">"Enter text here :"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 116</span>            
<span class="number"> 117</span>            <span class="c">/// Draw our text box and text</span>
<span class="number"> 118</span>            <span class="k2">{</span>
<span class="number"> 119</span>                <span class="k1">int</span> tbx,tby,tbw,tbh<span class="k2">;</span>
<span class="number"> 120</span>                <a href="http://www.allegro.cc/manual/al_get_ustr_dimensions"><span class="a">al_get_ustr_dimensions</span></a><span class="k2">(</span>f , ustr , <span class="k3">&amp;</span>tbx , <span class="k3">&amp;</span>tby , <span class="k3">&amp;</span>tbw , <span class="k3">&amp;</span>tbh<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 121</span>                <span class="k1">int</span> x <span class="k3">=</span> tx <span class="k3">+</span> tbx<span class="k2">;</span>
<span class="number"> 122</span>                <span class="k1">int</span> y <span class="k3">=</span> ty <span class="k3">+</span> tby<span class="k2">;</span>
<span class="number"> 123</span>                <a href="http://www.allegro.cc/manual/al_draw_filled_rectangle"><span class="a">al_draw_filled_rectangle</span></a><span class="k2">(</span>x , y , x <span class="k3">+</span> tbw , y <span class="k3">+</span> tbh , <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">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 124</span>                <a href="http://www.allegro.cc/manual/al_draw_rectangle"><span class="a">al_draw_rectangle</span></a><span class="k2">(</span>x <span class="k3">-</span> <span class="n">5</span> , y <span class="k3">-</span> <span class="n">5</span> , x <span class="k3">+</span> tbw <span class="k3">+</span> <span class="n">5</span> , y <span class="k3">+</span> tbh <span class="k3">+</span> <span class="n">5</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="n">5</span>.<span class="n">0f</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 125</span>            <span class="k2">}</span>
<span class="number"> 126</span>            <a href="http://www.allegro.cc/manual/al_draw_ustr"><span class="a">al_draw_ustr</span></a><span class="k2">(</span>f , <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> , tx , ty , ALLEGRO_ALIGN_LEFT , ustr<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 127</span>            
<span class="number"> 128</span>            <span class="c">/// Draw our caret</span>
<span class="number"> 129</span>            <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>caret_blink<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 130</span>                <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a><span class="k3">*</span> sub <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_dup_substr"><span class="a">al_ustr_dup_substr</span></a><span class="k2">(</span>ustr , <span class="n">0</span> , <a href="http://www.allegro.cc/manual/al_ustr_offset"><span class="a">al_ustr_offset</span></a><span class="k2">(</span>ustr , caret<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 131</span>                
<span class="number"> 132</span>                <span class="k1">int</span> cx <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_ustr_width"><span class="a">al_get_ustr_width</span></a><span class="k2">(</span>f , sub<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 133</span>                
<span class="number"> 134</span>                <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span>f , <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">0</span>,<span class="n">255</span>,<span class="n">0</span><span class="k2">)</span> , tx <span class="k3">+</span> cx <span class="k3">-</span> <a href="http://www.allegro.cc/manual/al_get_text_width"><span class="a">al_get_text_width</span></a><span class="k2">(</span>f , <span class="s">"|"</span><span class="k2">)</span><span class="k3">/</span><span class="n">2</span> , ty , <span class="n">0</span> , <span class="s">"|"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 135</span>                
<span class="number"> 136</span>                <a href="http://www.allegro.cc/manual/al_ustr_free"><span class="a">al_ustr_free</span></a><span class="k2">(</span>sub<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 137</span>            <span class="k2">}</span>
<span class="number"> 138</span>
<span class="number"> 139</span>            <span class="c">/// Draw our stored strings</span>
<span class="number"> 140</span>            <span class="k2">{</span>
<span class="number"> 141</span>                <span class="k1">int</span> lh <span class="k3">=</span> <span class="n">1</span>.<span class="n">5</span><span class="k3">*</span><a href="http://www.allegro.cc/manual/al_get_font_ascent"><span class="a">al_get_font_ascent</span></a><span class="k2">(</span>f<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 142</span>
<span class="number"> 143</span>                <span class="c">/// Column 1 lower left</span>
<span class="number"> 144</span>                <span class="k1">int</span> y <span class="k3">=</span> wh <span class="k3">-</span> <span class="k2">(</span>MAXNLINES<span class="k3">/</span><span class="n">2</span> <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span><span class="k3">*</span>lh<span class="k2">;</span>
<span class="number"> 145</span>                <span class="k1">int</span> x <span class="k3">=</span> ww<span class="k3">/</span><span class="n">3</span><span class="k2">;</span>
<span class="number"> 146</span>                <span class="k1">int</span> align <span class="k3">=</span> ALLEGRO_ALIGN_CENTER<span class="k2">;</span>
<span class="number"> 147</span>                <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span> <span class="k2">;</span> i <span class="k3">&lt;</span> MAXNLINES<span class="k3">/</span><span class="n">2</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> i <span class="k3">&lt;</span> nlines <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 148</span>                    <a href="http://www.allegro.cc/manual/al_draw_ustr"><span class="a">al_draw_ustr</span></a><span class="k2">(</span>f , <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">0</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span> , x , y , align , ustrs<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 149</span>                    y <span class="k3">+</span><span class="k3">=</span> lh<span class="k2">;</span>
<span class="number"> 150</span>                <span class="k2">}</span>
<span class="number"> 151</span>                
<span class="number"> 152</span>                <span class="c">/// Column 2 lower right</span>
<span class="number"> 153</span>                x <span class="k3">=</span> <span class="n">2</span><span class="k3">*</span>ww<span class="k3">/</span><span class="n">3</span><span class="k2">;</span>
<span class="number"> 154</span>                y <span class="k3">=</span> wh <span class="k3">-</span> <span class="k2">(</span>MAXNLINES<span class="k3">/</span><span class="n">2</span> <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span><span class="k3">*</span>lh<span class="k2">;</span>
<span class="number"> 155</span>                <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> MAXNLINES<span class="k3">/</span><span class="n">2</span> <span class="k2">;</span> i <span class="k3">&lt;</span> nlines <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 156</span>                    <a href="http://www.allegro.cc/manual/al_draw_ustr"><span class="a">al_draw_ustr</span></a><span class="k2">(</span>f , <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">0</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span> , x , y , align , ustrs<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 157</span>                    y <span class="k3">+</span><span class="k3">=</span> lh<span class="k2">;</span>
<span class="number"> 158</span>                <span class="k2">}</span>
<span class="number"> 159</span>            <span class="k2">}</span>
<span class="number"> 160</span>            <span class="c">/// Draw some debug info</span>
<span class="number"> 161</span>            <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span>f , <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">127</span>,<span class="n">0</span><span class="k2">)</span> , <span class="n">10</span> , <span class="n">10</span> , ALLEGRO_ALIGN_LEFT , <span class="s">"MAXNCHARS = %d"</span> , MAXNCHARS<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 162</span>            <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span>f , <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">127</span>,<span class="n">0</span><span class="k2">)</span> , <span class="n">10</span> , <span class="n">30</span> , ALLEGRO_ALIGN_LEFT , <span class="s">"nchars    = %d"</span> , nchars<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 163</span>            <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span>f , <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">127</span>,<span class="n">0</span><span class="k2">)</span> , <span class="n">10</span> , <span class="n">50</span> , ALLEGRO_ALIGN_LEFT , <span class="s">"nlines    = %d"</span> , nlines<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 164</span>            <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span>f , <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">127</span>,<span class="n">0</span><span class="k2">)</span> , <span class="n">10</span> , <span class="n">70</span> , ALLEGRO_ALIGN_LEFT , <span class="s">"caret     = %d"</span> , caret<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 165</span>            <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span>f , <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">127</span>,<span class="n">0</span><span class="k2">)</span> , <span class="n">10</span> , <span class="n">90</span> , ALLEGRO_ALIGN_LEFT , <span class="s">"Insert    = %s"</span> , <span class="k2">(</span>insert_mode?<span class="s">"On"</span><span class="k2">:</span><span class="s">"Off"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 166</span>            
<span class="number"> 167</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"> 168</span>            redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 169</span>        <span class="k2">}</span>
<span class="number"> 170</span>        <span class="k1">do</span>
<span class="number"> 171</span>        <span class="k2">{</span>
<span class="number"> 172</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"> 173</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>q, <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 174</span>
<span class="number"> 175</span>            <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 176</span>                quit <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 177</span>            <span class="k2">}</span>
<span class="number"> 178</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">&amp;</span><span class="k3">&amp;</span> ev.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_ESCAPE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 179</span>                quit <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 180</span>            <span class="k2">}</span>
<span class="number"> 181</span>            <span class="k1">if</span><span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span>
<span class="number"> 182</span>            <span class="k2">{</span>
<span class="number"> 183</span>                elapsed_time <span class="k3">+</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_timer_speed"><span class="a">al_get_timer_speed</span></a><span class="k2">(</span>t<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 184</span>                <span class="k1">if</span> <span class="k2">(</span>elapsed_time <span class="k3">&gt;</span><span class="k3">=</span> caret_duration<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 185</span>                    caret_blink <span class="k3">=</span> <span class="k3">!</span>caret_blink<span class="k2">;</span>
<span class="number"> 186</span>                    elapsed_time <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 187</span>                <span class="k2">}</span>
<span class="number"> 188</span>                redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 189</span>            <span class="k2">}</span>
<span class="number"> 190</span>            <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_BUTTON_DOWN <span class="k3">&amp;</span><span class="k3">&amp;</span> ev.mouse.button <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 191</span>                <span class="c">/// Find new caret position if mouse is over string</span>
<span class="number"> 192</span>                <span class="k1">int</span> uw <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_ustr_width"><span class="a">al_get_ustr_width</span></a><span class="k2">(</span>f , ustr<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 193</span>                <span class="k1">int</span> mx <span class="k3">=</span> ev.mouse.x<span class="k2">;</span>
<span class="number"> 194</span>                <span class="k1">int</span> y <span class="k3">=</span> ev.mouse.y <span class="k3">-</span> ty<span class="k2">;</span>
<span class="number"> 195</span>                <span class="k1">if</span> <span class="k2">(</span>y <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> y <span class="k3">&lt;</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_font_line_height"><span class="a">al_get_font_line_height</span></a><span class="k2">(</span>f<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 196</span>                    <span class="k1">int</span> x <span class="k3">=</span> mx <span class="k3">-</span> tx<span class="k2">;</span>
<span class="number"> 197</span>                    <span class="k1">if</span> <span class="k2">(</span>x <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> x <span class="k3">&lt;</span><span class="k3">=</span> uw<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 198</span>                        <span class="k1">float</span> cw <span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>uw<span class="k3">/</span>nchars<span class="k2">;</span>
<span class="number"> 199</span>                        caret <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>x <span class="k3">/</span> cw<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 200</span>                        caret_blink <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 201</span>                        elapsed_time <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number"> 202</span>                    <span class="k2">}</span>
<span class="number"> 203</span>                <span class="k2">}</span>
<span class="number"> 204</span>            <span class="k2">}</span>
<span class="number"> 205</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="k2">)</span> <span class="k2">{</span>
<span class="number"> 206</span>                <span class="k1">if</span> <span class="k2">(</span>ev.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_INSERT<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 207</span>                    insert_mode <span class="k3">=</span> <span class="k3">!</span>insert_mode<span class="k2">;</span>
<span class="number"> 208</span>                <span class="k2">}</span>
<span class="number"> 209</span>            <span class="k2">}</span>
<span class="number"> 210</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"> 211</span>                
<span class="number"> 212</span>                <span class="k1">if</span> <span class="k2">(</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"> 213</span>                    <span class="c">/// Add the current string to our set of strings and clear</span>
<span class="number"> 214</span>                    CreateUstrFromCodePoints<span class="k2">(</span>intcharbuf , nchars , <span class="k3">&amp;</span>ustr<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 215</span>                    
<span class="number"> 216</span>                    <span class="c">/// Insert the string in the front of the array</span>
<span class="number"> 217</span>                    <span class="k1">if</span> <span class="k2">(</span>nlines <span class="k3">=</span><span class="k3">=</span> MAXNLINES<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 218</span>                        <a href="http://www.allegro.cc/manual/al_ustr_free"><span class="a">al_ustr_free</span></a><span class="k2">(</span>ustrs<span class="k2">[</span>MAXNLINES <span class="k3">-</span> <span class="n">1</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span><span class="c">/// So we don't leak memory</span>
<span class="number"> 219</span>                    <span class="k2">}</span>
<span class="number"> 220</span>                    <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> nlines <span class="k2">;</span> i <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">1</span> <span class="k2">;</span> <span class="k3">-</span><span class="k3">-</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 221</span>                        ustrs<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> ustrs<span class="k2">[</span>i <span class="k3">-</span> <span class="n">1</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 222</span>                    <span class="k2">}</span>
<span class="number"> 223</span>                    ustrs<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> ustr<span class="k2">;</span>
<span class="number"> 224</span>                    nlines<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 225</span>                    <span class="k1">if</span> <span class="k2">(</span>nlines <span class="k3">&gt;</span> MAXNLINES<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 226</span>                        nlines <span class="k3">=</span> MAXNLINES<span class="k2">;</span>
<span class="number"> 227</span>                    <span class="k2">}</span>
<span class="number"> 228</span>                    ustr <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_new"><span class="a">al_ustr_new</span></a><span class="k2">(</span><span class="s">""</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 229</span>                    <a href="http://www.delorie.com/djgpp/doc/libc/libc_569.html" target="_blank">memset</a><span class="k2">(</span>intcharbuf , <span class="n">0</span> , <span class="k1">sizeof</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span><span class="k2">)</span><span class="k3">*</span><span class="k2">(</span>MAXNCHARS <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 230</span>                    nchars <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 231</span>                    caret <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 232</span>                <span class="k2">}</span>
<span class="number"> 233</span>                <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_BACKSPACE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 234</span>                    <span class="c">/// Delete character before caret position</span>
<span class="number"> 235</span>                    <span class="k1">if</span> <span class="k2">(</span>caret <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 236</span>                        <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> crt <span class="k3">=</span> caret <span class="k3">-</span> <span class="n">1</span> <span class="k2">;</span> crt <span class="k3">&lt;</span> MAXNCHARS <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>crt<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 237</span>                            intcharbuf<span class="k2">[</span>crt<span class="k2">]</span> <span class="k3">=</span> intcharbuf<span class="k2">[</span>crt <span class="k3">+</span> <span class="n">1</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 238</span>                        <span class="k2">}</span>
<span class="number"> 239</span>                        <span class="k3">-</span><span class="k3">-</span>nchars<span class="k2">;</span>
<span class="number"> 240</span>                        <span class="k1">if</span> <span class="k2">(</span>nchars <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 241</span>                            <a href="http://www.delorie.com/djgpp/doc/libc/libc_569.html" target="_blank">memset</a><span class="k2">(</span>intcharbuf , <span class="n">0</span> , MAXNCHARS<span class="k3">*</span><span class="k1">sizeof</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 242</span>                        <span class="k2">}</span>
<span class="number"> 243</span>                        <span class="k3">-</span><span class="k3">-</span>caret<span class="k2">;</span>
<span class="number"> 244</span>                    <span class="k2">}</span>
<span class="number"> 245</span>                <span class="k2">}</span>
<span class="number"> 246</span>                <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_DELETE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 247</span>                    <span class="k1">if</span> <span class="k2">(</span>caret <span class="k3">&lt;</span> nchars<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 248</span>                        <span class="c">/// Delete character at the caret position</span>
<span class="number"> 249</span>                        <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> crt <span class="k3">=</span> caret <span class="k2">;</span> crt <span class="k3">&lt;</span> nchars <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>crt<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 250</span>                            intcharbuf<span class="k2">[</span>crt<span class="k2">]</span> <span class="k3">=</span> intcharbuf<span class="k2">[</span>crt <span class="k3">+</span> <span class="n">1</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 251</span>                        <span class="k2">}</span>
<span class="number"> 252</span>                        <span class="k3">-</span><span class="k3">-</span>nchars<span class="k2">;</span>
<span class="number"> 253</span>                        <span class="k1">if</span> <span class="k2">(</span>nchars <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 254</span>                            <a href="http://www.delorie.com/djgpp/doc/libc/libc_569.html" target="_blank">memset</a><span class="k2">(</span>intcharbuf , <span class="n">0</span> , MAXNCHARS<span class="k3">*</span><span class="k1">sizeof</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 255</span>                        <span class="k2">}</span>
<span class="number"> 256</span>                        <span class="k1">if</span> <span class="k2">(</span>nchars <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 257</span>                            nchars <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 258</span>                        <span class="k2">}</span>
<span class="number"> 259</span>                    <span class="k2">}</span>
<span class="number"> 260</span>                <span class="k2">}</span>
<span class="number"> 261</span>                <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_LEFT<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 262</span>                    <span class="c">/// Move caret left</span>
<span class="number"> 263</span>                    caret--<span class="k2">;</span>
<span class="number"> 264</span>                    <span class="k1">if</span> <span class="k2">(</span>caret <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>caret <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 265</span>                    caret_blink <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 266</span>                    elapsed_time <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number"> 267</span>                <span class="k2">}</span>
<span class="number"> 268</span>                <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_RIGHT<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 269</span>                    <span class="c">/// Move caret right</span>
<span class="number"> 270</span>                    caret<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 271</span>                    <span class="k1">if</span> <span class="k2">(</span>caret <span class="k3">&gt;</span><span class="k3">=</span> nchars<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 272</span>                        caret <span class="k3">=</span> nchars<span class="k2">;</span>
<span class="number"> 273</span>                    <span class="k2">}</span>
<span class="number"> 274</span>                    caret_blink <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 275</span>                    elapsed_time <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number"> 276</span>                <span class="k2">}</span>
<span class="number"> 277</span>                <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 278</span>                    <span class="c">/// We have a character, add it to our buffer</span>
<span class="number"> 279</span>                    <span class="k1">unsigned</span> <span class="k1">int</span> uc <span class="k3">=</span> ev.keyboard.unichar<span class="k2">;</span>
<span class="number"> 280</span>                    
<span class="number"> 281</span>                    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%X typed\n"</span> , uc<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 282</span>                    
<span class="number"> 283</span>                    <span class="k1">if</span> <span class="k2">(</span>uc <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">32</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 284</span>                        <span class="k1">if</span> <span class="k2">(</span>insert_mode<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 285</span>                            <span class="c">/// Move all chars right from the caret on</span>
<span class="number"> 286</span>                            <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> crt <span class="k3">=</span> MAXNCHARS <span class="k3">-</span> <span class="n">1</span> <span class="k2">;</span> crt <span class="k3">&gt;</span><span class="k3">=</span> caret <span class="k2">;</span> <span class="k3">-</span><span class="k3">-</span>crt<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 287</span>                                intcharbuf<span class="k2">[</span>crt<span class="k2">]</span> <span class="k3">=</span> intcharbuf<span class="k2">[</span>crt <span class="k3">-</span> <span class="n">1</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 288</span>                            <span class="k2">}</span>
<span class="number"> 289</span>                            <span class="c">/// We're inserting a new character, so bump the char count</span>
<span class="number"> 290</span>                            nchars <span class="k3">+</span><span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 291</span>                            <span class="k1">if</span> <span class="k2">(</span>nchars <span class="k3">&gt;</span> MAXNCHARS<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 292</span>                                nchars <span class="k3">=</span> MAXNCHARS<span class="k2">;</span>
<span class="number"> 293</span>                            <span class="k2">}</span>
<span class="number"> 294</span>                        <span class="k2">}</span>
<span class="number"> 295</span>                        <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 296</span>                            <span class="c">/// Overwrite mode</span>
<span class="number"> 297</span>                            <span class="k1">if</span> <span class="k2">(</span>caret <span class="k3">=</span><span class="k3">=</span> nchars <span class="k3">&amp;</span><span class="k3">&amp;</span> nchars <span class="k3">&lt;</span> MAXNCHARS<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 298</span>                                nchars<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span><span class="c">/// We're on the right end of the string, increase the char count</span>
<span class="number"> 299</span>                            <span class="k2">}</span>
<span class="number"> 300</span>                        <span class="k2">}</span>
<span class="number"> 301</span>                        <span class="c">/// Add our new character</span>
<span class="number"> 302</span>                        intcharbuf<span class="k2">[</span>caret<span class="k3">+</span><span class="k3">+</span><span class="k2">]</span> <span class="k3">=</span> uc<span class="k2">;</span>
<span class="number"> 303</span>                        <span class="k1">if</span> <span class="k2">(</span>caret <span class="k3">&gt;</span><span class="k3">=</span> MAXNCHARS<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 304</span>                            caret <span class="k3">=</span> MAXNCHARS<span class="k2">;</span>
<span class="number"> 305</span>                        <span class="k2">}</span>
<span class="number"> 306</span>                    <span class="k2">}</span>
<span class="number"> 307</span>                <span class="k2">}</span>
<span class="number"> 308</span>                
<span class="number"> 309</span>                <span class="c">/// Refresh our USTR</span>
<span class="number"> 310</span>                CreateUstrFromCodePoints<span class="k2">(</span>intcharbuf , nchars , <span class="k3">&amp;</span>ustr<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 311</span>                
<span class="number"> 312</span>            <span class="k2">}</span>
<span class="number"> 313</span>        <span class="k2">}</span>
<span class="number"> 314</span>        <span class="k1">while</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>q<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 315</span>
<span class="number"> 316</span>    <span class="k2">}</span>
<span class="number"> 317</span>    
<span class="number"> 318</span>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span> <span class="k2">;</span> i <span class="k3">&lt;</span> nlines <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 319</span>        <a href="http://www.allegro.cc/manual/al_ustr_free"><span class="a">al_ustr_free</span></a><span class="k2">(</span>ustrs<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 320</span>        ustrs<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 321</span>    <span class="k2">}</span>
<span class="number"> 322</span>    nlines <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 323</span>    <a href="http://www.allegro.cc/manual/al_ustr_free"><span class="a">al_ustr_free</span></a><span class="k2">(</span>ustr<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 324</span>    ustr <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 325</span>    nchars <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 326</span>
<span class="number"> 327</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"> 328</span>    
<span class="number"> 329</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 330</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 11 Feb 2018 10:30:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Good morning Edgar:<br />  I have downloaded you program and I say WOW! That is a lot of code to<br />digest! That will keep me busy for quite a while. I switch to Linux a few<br />years back, but I do have some Windows machines around here. I will fire<br />one up and give your program a test. I think its great that you have this<br />stuff figured out. I will get back to you later. Have a great day my friend!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Scooter)</author>
		<pubDate>Sun, 11 Feb 2018 20:45:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Scooter, that code should compile fine on Linux as well.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 11 Feb 2018 21:22:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Good afternoon Edgar:<br />  I am trying to compile your program on Linux with Code:Blocks. It is<br />generating some errors. This is one thing its complaining about on line 33.</p><p>    for (int i = 0 ; i &lt; size ; ++i) {<br />        al_ustr_append_chr(ustr , cbuf[i]);</p><p>Code:Blocks returns this error:</p><p>error:&#39;for&#39; loop initial declarations are only allowed in C99 mode. I find nothing on Code:Blocks that gives me a clue what this means and what to do about it.</p><p>There are other errors being reported but most are concerned with the &#39;for loops&#39;.</p><p>I use &#39;for loops&#39; all the time, but never seen this error. New one on me!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Scooter)</author>
		<pubDate>Tue, 13 Feb 2018 02:02:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Scooter, here&#39;s the fix for that :</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">void</span> CreateUstrFromCodePoints<span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span><span class="k3">*</span> cbuf , <span class="k1">int</span> size , <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a><span class="k3">*</span><span class="k3">*</span> pstr<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  2</span>
<span class="number">  3</span>    <span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span><span class="c">/// Move declaration of i here</span>
<span class="number">  4</span>
<span class="number">  5</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>cbuf<span class="k2">)</span>    <span class="k2">{</span><span class="k1">return</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  6</span>    <span class="k1">if</span> <span class="k2">(</span>size <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  7</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>pstr<span class="k2">)</span>    <span class="k2">{</span><span class="k1">return</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  8</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a><span class="k3">*</span> ustr <span class="k3">=</span> <span class="k3">*</span>pstr<span class="k2">;</span>
<span class="number">  9</span>    <span class="k1">if</span> <span class="k2">(</span>ustr<span class="k2">)</span> <span class="k2">{</span><a href="http://www.allegro.cc/manual/al_ustr_free"><span class="a">al_ustr_free</span></a><span class="k2">(</span>ustr<span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 10</span>    <span class="k3">*</span>pstr <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_new"><span class="a">al_ustr_new</span></a><span class="k2">(</span><span class="s">""</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>    ustr <span class="k3">=</span> <span class="k3">*</span>pstr<span class="k2">;</span>
<span class="number"> 12</span>    <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> size <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span><span class="c">/// Remove int declaration here</span>
<span class="number"> 13</span>        <a href="http://www.allegro.cc/manual/al_ustr_append_chr"><span class="a">al_ustr_append_chr</span></a><span class="k2">(</span>ustr , cbuf<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>    <span class="k2">}</span>
<span class="number"> 15</span>    <span class="k1">return</span><span class="k2">;</span>
<span class="number"> 16</span><span class="k2">}</span>
</div></div><p>

C is whiny about stuff sometimes. You can&#39;t declare new variables after you write code. The declarations always have to go at the top of the function, or into a new code block like so :</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="number">  3</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">  4</span>
<span class="number">  5</span>   <span class="k1">int</span> a <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%d"</span> , a<span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>
<span class="number">  9</span>   <span class="k1">int</span> b <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span><span class="c">/// Illegal, because it comes after the printf statement</span>
<span class="number"> 10</span>
<span class="number"> 11</span>   <span class="k2">{</span>
<span class="number"> 12</span>      <span class="k1">int</span> c <span class="k3">=</span> <span class="n">2</span><span class="k2">;</span><span class="c">/// perfectly legal, because it is at the top of the new scope</span>
<span class="number"> 13</span>                <span class="c">/// defined by the braces {}</span>
<span class="number"> 14</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%d"</span> , c<span class="k2">)</span><span class="k2">;</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="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 13 Feb 2018 02:55:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Even single-line comments are not C <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /> They are introduced by either :<br />- C++ (every version and implementation, it&#39;s part of the base standard)<br />- ISO C99<br />- GNU extension (any gcc compiler where you don&#39;t disable them by specifying a compilation standard that excludes them)<br />- Other compiler-specific extensions ? (MSVC6 maybe?)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Audric)</author>
		<pubDate>Tue, 13 Feb 2018 17:48:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>In 2018, unless you&#39;re creating a really specialized system  or you care about ridiculous portability , or writing a library, I do not really get the appeal of using a C compiler to write C.</p><p>C++ adds those few things that just makes life easier. You can still program C-style in C++ but without having to worry about silly things like line comments.</p><p>I would also make a few thin wrappers around basic stl things like vector, map, etc, rather than reinventing the wheel for such basic things.</p><p>Not really relevant to a C question, but I have a class in Agui for utf8 manipulations on std strings <a href="https://github.com/jmasterx/Agui/blob/master/include/Agui/UTF8.hpp">https://github.com/jmasterx/Agui/blob/master/include/Agui/UTF8.hpp</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Tue, 13 Feb 2018 22:47:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Taking advice from people who say things like this...</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617234/1035332#target">jmasterx</a> said:</div><div class="quote"><p>You can still program C-style in C++ but without having to worry about silly things like line comments.</p></div></div><p>

Is about as foolish as one can get.  Comments?!  I have coded in C since the &#39;90s and haven&#39;t &quot;worried about comments&quot; ever.  Single line has been a part of C for two decades.  Just about everything in C++ comes from C, that&#39;s why it has a &quot;C&quot; in it&#39;s name.</p><p>Here&#39;s a fun thought, if you pulled everything that is C out of C++ you would be left with an unusable language... basic things like if/else, switch/case, {}, return, headers, includes... you name it, it is all C.  The ++ is things like classes and such that is C++ specific... but comments... yeah... comments, lets focus on that.  Stupidity.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617234/1035318#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>You can&#39;t declare new variables after you write code. </p></div></div><p> </p><p>This is simply laughable and blatantly untrue!  I have been declaring variables mid code for two decades now!  It hasn&#39;t been a problem since the &#39;90s, and even then, it wasn&#39;t a problem.</p><p>Lets just test out the code mentioned with GCC and see what happens shall we?  I&#39;ll compile it with just &quot;gcc main.c&quot; and I will post a screenshot of all warnings and errors to be fair and lets just see if what was stated is true or not...</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="number">  3</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">  4</span>
<span class="number">  5</span>   <span class="k1">int</span> a <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  6</span>   
<span class="number">  7</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%d"</span> , a<span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>    
<span class="number">  9</span>   <span class="k1">int</span> b <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span><span class="c">/// Illegal, because it comes after the printf statement </span>
<span class="number"> 10</span>   
<span class="number"> 11</span>   <span class="k2">{</span>
<span class="number"> 12</span>      <span class="k1">int</span> c <span class="k3">=</span> <span class="n">2</span><span class="k2">;</span><span class="c">/// perfectly legal, because it is at the top of the new scope</span>
<span class="number"> 13</span>                <span class="c">/// defined by the braces {}</span>
<span class="number"> 14</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%d"</span> , c<span class="k2">)</span><span class="k2">;</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="k2">}</span>
</div></div><p>

I typed &quot;gcc -v&quot; to show the version, ironically, this is the mingw version I got from Edgar. I then just typed &quot;gcc main.c&quot; with the above code, unaltered, even the /// in there... this was the result...</p><p><span class="remote-thumbnail"><span class="json">{"name":"611287","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/c\/e\/ce74302a99d6078ae445f24cef04d309.jpg","w":775,"h":173,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/c\/e\/ce74302a99d6078ae445f24cef04d309"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/c/e/ce74302a99d6078ae445f24cef04d309-240.jpg" alt="611287" width="240" height="53" /></span></p><p>Notice, I didn&#39;t tell it which standard of C I was using, I used the code above EXACTLY as Edgar posted it with zero errors and not even a warning.</p><p>Now these arguments would have been true in the mid 1990s!  But haven&#39;t been true for a very long time.  And of course now there is the 2011 C standard which adds in more functionality.  Heck, C++ itself has changed dramatically since the same time, and for the better.  Comparing modern C++ to old C?  How is that even remotely fair?</p><p>Now if you want to use C++, go for it.  I can certainly see the appeal, but at least be honest and compare it to MODERN C and use the one you want because YOU like it.  C isn&#39;t going anywhere, anytime soon.</p><p>There&#39;s good reason why the majority of libraries and drivers are written in C.</p><p>Use what you feel more comfortable with, but do your own research on this and pull out a modern C compiler like GCC and test what they said and see if it is true or a lie.</p><p>Edit: the following alterations to the above code also compiles just fine with &quot;gcc main.c&quot;</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;stdbool.h&gt;</span>
<span class="number">  3</span>
<span class="number">  4</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">  5</span>
<span class="number">  6</span>   <span class="k1">int</span> a <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  7</span>   
<span class="number">  8</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%d"</span> , a<span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>    
<span class="number"> 10</span>   <span class="k1">int</span> b <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span><span class="c">/// Illegal, because it comes after the printf statement </span>
<span class="number"> 11</span>   <span class="k1">bool</span> x <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 12</span>   
<span class="number"> 13</span>   <span class="k2">{</span>
<span class="number"> 14</span>      <span class="k1">int</span> c <span class="k3">=</span> <span class="n">2</span><span class="k2">;</span><span class="c">/// perfectly legal, because it is at the top of the new scope</span>
<span class="number"> 15</span>                <span class="c">/// defined by the braces {}</span>
<span class="number"> 16</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%d"</span> , c<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">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 19</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Tue, 13 Feb 2018 23:44:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You took what I said a bit out of context. My point was just, yeah, C++ is C with the ++.<br />Which means you can still do everything C can do with the ++. You conveniently ignored my portion about stl.</p><p>The main advantage I see of using pure modern C, is not depending on the C++ runtime.</p><p>and for things like hardware drivers that makes sense.</p><p>But trying to program a decent video game without some equivalent of stl (or boost &amp; co) is silly. You either roll it out by hand or find some library that you have to learn and work around its license and quirks. STL is tried, tested and heavily supported on sites like SO, so it&#39;s great for people learning to code who do not yet understand how to make dynamic arrays and the such.</p><p>Neil, you do honestly come across like you&#39;re bashing with that kind of talk. It&#39;s hard to defend that. You&#39;re treating us like we&#39;re children or something and that&#39;s very unwelcome.</p><p>You could have stated your point without making me seem like an uncredible piece of s​hit. <img src="http://www.allegro.cc/forums/smileys/angry.gif" alt="&gt;:(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Wed, 14 Feb 2018 00:02:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Guess what, people still use compilers that only support C90, and that code in C90 is illegal. My compiler happens to be more recent, and uses a different default standard. Instead of being a C Nazi, why don&#39;t you chill out and take a step back and realize that not everyone is using a modern compiler. Granted, they should upgrade or compile with a different standard. But all this hate towards C++ is just immature and ridiculous. Grow up.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 14 Feb 2018 00:28:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Our most Christian Christians acting out their agape again... So sad. <img src="http://www.allegro.cc/forums/smileys/cry.gif" alt=":&#39;(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Polybios)</author>
		<pubDate>Wed, 14 Feb 2018 02:13:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Guess what, those same people will also still be using compilers that do not support modern C++ as well, so the same comment can be made about that!  The fact is, modern compilers which are freely available, which you yourself uses has NO problems with the <span class="cuss"><span>bull<span class="cuss"><span>shit</span></span></span></span> code you posted!  Making you our to be a liar!</p><p>And I NEVER stated I hate C++, I am defending the blatent hatred and falsehoods being posted about C!</p><p>THIS is what I said about C++
</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617234/1035333#target">NiteHackr</a> said:</div><div class="quote"><p>Now if you want to use C++, go for it. I can certainly see the appeal</p></div></div><p>

Just don&#39;t post code and state that C will reject it when it will not.  When you discuss these things, you need to compare equal versions.  So if you want to compare 1990 C++ with 1990 C, go for it.  But it is unfair to compare 2018 C++ with 1990 C!</p><p>If you prefer C++, great, wonderful, it&#39;s certainly a very powerful language.  There are aspects I like about it for sure.  It does strings really well, it has vectors which are awesome.  But be honest about it all.  Compare modern C with modern C++.  And modern C can do threads, one line comments, variable declarations mid code etc... etc... etc... it just doesn&#39;t have classes, which is something I can&#39;t stand and I have even seen a move by some away from them as the problems with classes are starting to become apparent, but that&#39;s another topic.  I&#39;m not posting to attack C++, I am only defending the lies being posted against C.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617234/1035337#target">Polybios</a> said:</div><div class="quote"><p>Our most Christian Christians acting out their agape again... So sad. <img src="http://www.allegro.cc/forums/smileys/cry.gif" alt=":&#39;(" /></p></div></div><p>

What the <span class="cuss"><span>fuck</span></span> does this have to do with religion moron?!  This is about programming, grow a brain!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Wed, 14 Feb 2018 02:15:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Who&#39;s angry now?</p><p>Also it&#39;s clear that he didn&#39;t have a &quot;modern compiler&quot;, which makes it perfectly reasonable that it doesn&#39;t use the C99 standard by default.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 14 Feb 2018 02:36:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Than it&#39;s clear he needs to download one!  Who the hell doesn&#39;t have a modern compiler these days?!  It&#39;s not like they&#39;re hard to find.  In either way, your information about C was completely false.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Wed, 14 Feb 2018 03:08:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>No, no it wasn&#39;t.</p><p>We were speaking of an entirely different standard. But you interpreted that as saying that none of the C standards worked that way.</p><p>Lighten up. <img src="http://www.allegro.cc/forums/smileys/kiss.gif" alt=":-*" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 14 Feb 2018 03:09:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>My apologies.  But it does need to be stated that modern C is not that way anymore or you could send a false impression to someone.</p><p>Both C and C++ have changed quite a bit since the &#39;90s, and for the better.  </p><p>I always say, use what you are the most comfortable with.  Give both a try and see which you prefer.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Wed, 14 Feb 2018 03:43:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Good morning Edgar:<br />  I got your &#39;input.c&#39; program to compile. A super program indeed.<br />It works perfectly! This will help a lot of folks having problems<br />working with the keyboard. I know it took a great deal of time to put<br />it together, and for that, I say THANKS!<br />  Something you might want to take a look at: Code:Blocks issues a<br />Warning on line 19. Evidently it means nothing because the program<br />runs fine. Here&#39;s the code in question:</p><p>  void AssertHandler(const char* expr , const char* file , int line , const char* func) {<br />    int i = 0;</p><p>    printf(&quot;%s failed in file %s on line %d in function %s\n&quot; , expr , file , line , func);</p><p>    i /= 0;<br />    return;<br />}
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Scooter)</author>
		<pubDate>Thu, 15 Feb 2018 21:05:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
<span class="source-code">i <span class="k3">/</span><span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></span> <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />  You should get a warning about this one, you&#39;re trying to divide by zero?</p><p>I don&#39;t even see why <span class="source-code"><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></span> is in there.  It sets <span class="source-code">i</span> to zero, then later tries to divide it by zero then return.  <span class="source-code">i</span> is not used.</p><p>Just remove it entirely.</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> AssertHandler<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span> expr , <span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span> file , <span class="k1">int</span> <a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a> , <span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span> func<span class="k2">)</span>
<span class="k2">{</span>
   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%s failed in file %s on line %d in function %s\n"</span> , expr , file , <a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a> , func<span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

...that should work just fine.  No need for the <span class="source-code">i</span> variable, the divide by zero or even the <span class="source-code"><span class="k1">return</span></span> statement as it is a <span class="source-code"><span class="k1">void</span></span> function.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Fri, 16 Feb 2018 00:39:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Neil, it&#39;s intentional. The divide by zero is on purpose, because it allows the debugger to catch the exception. This allows you to get a backtrace when the program fails an ALLEGRO_ASSERT. Otherwise the program exits and you can only see where the assert failed, not the stack when it does.</p><p>So keep the divide by zero, it&#39;s on purpose.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 16 Feb 2018 00:51:34 +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/617234/1035385#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>Neil, it&#39;s intentional. The divide by zero is on purpose, because it allows the debugger to catch the exception.</p></div></div><p>

Ah, okay, I had a feeling that might have been it.  That&#39;s an interesting trick.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Fri, 16 Feb 2018 01:08:55 +0000</pubDate>
	</item>
</rss>
