<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>How to give a packfile a name?</title>
		<link>http://www.allegro.cc/forums/view/567779</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 23 Feb 2006 09:19:14 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>While doing a map editor for the RPG we&#39;re making, we&#39;ve found that it would be very convenient to be able to give the packfiles we use a name during the editing, and not having to go back to the code to do it, could anyone point out how? Here&#39;s an example of the function we&#39;re using:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">void</span> save_map<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>    <a href="http://www.allegro.cc/manual/PACKFILE" target="_blank"><span class="a">PACKFILE</span></a> <span class="k3">*</span>pfile<span class="k2">;</span></td></tr><tr><td class="number">4</td><td>       </td></tr><tr><td class="number">5</td><td>    pfile<span class="k3">=</span><a href="http://www.allegro.cc/manual/pack_fopen" target="_blank"><span class="a">pack_fopen</span></a><span class="k2">(</span><span class="s">"mapaprueba.map"</span>, <span class="s">"wp"</span><span class="k2">)</span><span class="k2">;</span>   </td></tr><tr><td class="number">6</td><td>        <span class="k1">for</span> <span class="k2">(</span>m<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> m<span class="k3">&lt;</span><span class="n">1</span><span class="k2">;</span> m<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">7</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">8</td><td>        <span class="k1">for</span> <span class="k2">(</span>k<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> k<span class="k3">&lt;</span><span class="n">2</span><span class="k2">;</span> k<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">9</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">10</td><td>        <span class="k1">for</span> <span class="k2">(</span>l<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> l<span class="k3">&lt;</span><span class="n">2</span><span class="k2">;</span> l<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">11</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">12</td><td>        <span class="k1">for</span> <span class="k2">(</span>i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span><span class="n">32</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">13</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">14</td><td>        <span class="k1">for</span> <span class="k2">(</span>j<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> j<span class="k3">&lt;</span><span class="n">24</span><span class="k2">;</span> j<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">15</td><td>        <span class="k2">{</span>        </td></tr><tr><td class="number">16</td><td>               <a href="http://www.allegro.cc/manual/pack_iputl" target="_blank"><span class="a">pack_iputl</span></a><span class="k2">(</span>mapa.grid<span class="k3">&lt;</span>i&gt;<span class="k2">[</span>j<span class="k2">]</span>.tile<span class="k2">[</span>k<span class="k2">]</span><span class="k2">[</span>l<span class="k2">]</span>.capas<span class="k2">[</span>m<span class="k2">]</span>, pfile<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>        <span class="k2">}</span>        <span class="k2">}</span>        <span class="k2">}</span>        <span class="k2">}</span>        <span class="k2">}</span></td></tr><tr><td class="number">18</td><td>    <a href="http://www.allegro.cc/manual/pack_fclose" target="_blank"><span class="a">pack_fclose</span></a><span class="k2">(</span>pfile<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p> </p><p>What we would like to do is to somehow put the name of the map form the editor not the compiler. We&#39;d really appreciate it if anyone points us in the right direction <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />. TXS!!<br />Cheers.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jaime barrachina)</author>
		<pubDate>Sat, 18 Feb 2006 20:52:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> save_map<span class="k2">(</span><span class="k1">char</span> <span class="k3">*</span>filename<span class="k2">)</span>
<span class="k2">{</span>
 <a href="http://www.allegro.cc/manual/PACKFILE" target="_blank"><span class="a">PACKFILE</span></a> <span class="k3">*</span>pfile<span class="k2">;</span>
       
 pfile<span class="k3">=</span><a href="http://www.allegro.cc/manual/pack_fopen" target="_blank"><span class="a">pack_fopen</span></a><span class="k2">(</span>filename, <span class="s">"wp"</span><span class="k2">)</span><span class="k2">;</span>
 <span class="k2">[</span>...<span class="k2">]</span>
<span class="k2">}</span>

save_map<span class="k2">(</span><span class="s">"mapaprueba.map"</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>? <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (gnolam)</author>
		<pubDate>Sat, 18 Feb 2006 20:59:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">gnolam said:</div><div class="quote"><p>

</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> save_map<span class="k2">(</span><span class="k1">char</span> <span class="k3">*</span>filename<span class="k2">)</span>
<span class="k2">{</span>
 <a href="http://www.allegro.cc/manual/PACKFILE" target="_blank"><span class="a">PACKFILE</span></a> <span class="k3">*</span>pfile<span class="k2">;</span>
       
 pfile<span class="k3">=</span><a href="http://www.allegro.cc/manual/pack_fopen" target="_blank"><span class="a">pack_fopen</span></a><span class="k2">(</span>filename, <span class="s">"wp"</span><span class="k2">)</span><span class="k2">;</span>
 <span class="k2">[</span>...<span class="k2">]</span>
<span class="k2">}</span>

save_map<span class="k2">(</span><span class="s">"mapaprueba.map"</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div></div><p>
But that doesn&#39;t even compile... <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (miran)</author>
		<pubDate>Sat, 18 Feb 2006 21:13:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Txs people, you are right dint think of that... not to used to think in C... anyone could point me out to some functions the allegro has for managing user input (its for the same thing, now that i can change the name the file has, i want th user to be able to do it by himself)</p><p>Txs a lot... I&#39;m relay sorry to have to come back to ask over and over again <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" /></p><p>Cheers!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jaime barrachina)</author>
		<pubDate>Sun, 19 Feb 2006 22:46:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>there are none beside the allegro GUI stuff but here some code from Chris  he thought up a way to do it.<br />it was in the code gallery.</p><p>Author: Chris Barry<br />Version:<br />edit: the file seems to have lostest it host i think i down loaded it befor ill find it and post it.;D<br /><a href="http://www.allegro.cc/resource/code/text-input.php">http://www.allegro.cc/resource/code/text-input.php</a></p><p>edit:</p><p>if your looking for more examples of stuff check out my game in the Projects RPG area.<br />it is very up-to date.  don&#39;t be to shy to wright a review <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />. good luck;;D
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (piccolo)</author>
		<pubDate>Sun, 19 Feb 2006 23:04:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>TXS everyone! Problem solved <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jaime barrachina)</author>
		<pubDate>Mon, 20 Feb 2006 02:44:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Allegro.cc said:</div><div class="quote"><p>

404<br />File not found.
</p></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Mon, 20 Feb 2006 07:24:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>witch file is that  <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (piccolo)</author>
		<pubDate>Mon, 20 Feb 2006 11:15:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Then let&#39;s burn it for crimes against the church, Yoda!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (gnolam)</author>
		<pubDate>Mon, 20 Feb 2006 22:29:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Or you can use a save file dialog...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (BAF)</author>
		<pubDate>Tue, 21 Feb 2006 00:27:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>piccolo: Try clicking that link you posted.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Tue, 21 Feb 2006 01:14:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>ok i think this is all the code from the link</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="c">// edittext.cpp</span></td></tr><tr><td class="number">2</td><td><span class="p">#include &lt;allegro.h&gt;</span></td></tr><tr><td class="number">3</td><td><span class="p">#include &lt;string&gt;</span></td></tr><tr><td class="number">4</td><td><span class="k1">using</span> <span class="k1">namespace</span> std<span class="k2">;</span></td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td><span class="p">#define WHITE makecol(255, 255, 255)</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">9</td><td><span class="k2">{</span></td></tr><tr><td class="number">10</td><td>   <span class="c">// typical Allegro initialization</span></td></tr><tr><td class="number">11</td><td>   <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>   <a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>   <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_AUTODETECT, <span class="n">320</span>, <span class="n">240</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>&#160;</td></tr><tr><td class="number">15</td><td>   <span class="c">// all variables are here</span></td></tr><tr><td class="number">16</td><td>   <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> buffer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span><span class="n">320</span>, <span class="n">240</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// initialize the double buffer</span></td></tr><tr><td class="number">17</td><td>   string  edittext<span class="k2">;</span>                         <span class="c">// an empty string for editting</span></td></tr><tr><td class="number">18</td><td>   string::iterator iter <span class="k3">=</span> edittext.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// string iterator</span></td></tr><tr><td class="number">19</td><td>   <span class="k1">int</span>     caret  <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>                       <span class="c">// tracks the text caret</span></td></tr><tr><td class="number">20</td><td>   <span class="k1">bool</span>    insert <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>                    <span class="c">// true of should text be inserted</span></td></tr><tr><td class="number">21</td><td>   </td></tr><tr><td class="number">22</td><td>   <span class="c">// the game loop</span></td></tr><tr><td class="number">23</td><td>   <span class="k1">do</span></td></tr><tr><td class="number">24</td><td>   <span class="k2">{</span></td></tr><tr><td class="number">25</td><td>      <span class="k1">while</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/keypressed" target="_blank"><span class="a">keypressed</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">26</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">27</td><td>         <span class="k1">int</span>  newkey   <span class="k3">=</span> <a href="http://www.allegro.cc/manual/readkey" target="_blank"><span class="a">readkey</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>         <span class="k1">char</span> ASCII    <span class="k3">=</span> newkey <span class="k3">&amp;</span> <span class="n">0xff</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>         <span class="k1">char</span> scancode <span class="k3">=</span> newkey <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">8</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>&#160;</td></tr><tr><td class="number">31</td><td>         <span class="c">// a character key was pressed; add it to the string</span></td></tr><tr><td class="number">32</td><td>         <span class="k1">if</span><span class="k2">(</span>ASCII <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">32</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> ASCII <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">126</span><span class="k2">)</span></td></tr><tr><td class="number">33</td><td>         <span class="k2">{</span></td></tr><tr><td class="number">34</td><td>            <span class="c">// add the new char, inserting or replacing as need be</span></td></tr><tr><td class="number">35</td><td>            <span class="k1">if</span><span class="k2">(</span>insert <span class="k3">|</span><span class="k3">|</span> iter <span class="k3">=</span><span class="k3">=</span> edittext.end<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">36</td><td>               iter <span class="k3">=</span> edittext.insert<span class="k2">(</span>iter, ASCII<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td>            <span class="k1">else</span></td></tr><tr><td class="number">38</td><td>               edittext.replace<span class="k2">(</span>caret, <span class="n">1</span>, <span class="n">1</span>, ASCII<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">39</td><td>&#160;</td></tr><tr><td class="number">40</td><td>            <span class="c">// increment both the caret and the iterator</span></td></tr><tr><td class="number">41</td><td>            caret<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">42</td><td>            iter<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">43</td><td>         <span class="k2">}</span></td></tr><tr><td class="number">44</td><td>         <span class="c">// some other, "special" key was pressed; handle it here</span></td></tr><tr><td class="number">45</td><td>         <span class="k1">else</span></td></tr><tr><td class="number">46</td><td>            <span class="k1">switch</span><span class="k2">(</span>scancode<span class="k2">)</span></td></tr><tr><td class="number">47</td><td>            <span class="k2">{</span></td></tr><tr><td class="number">48</td><td>               <span class="k1">case</span> KEY_DEL:</td></tr><tr><td class="number">49</td><td>                  <span class="k1">if</span><span class="k2">(</span>iter <span class="k3">!</span><span class="k3">=</span> edittext.end<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> iter <span class="k3">=</span> edittext.erase<span class="k2">(</span>iter<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">50</td><td>               <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">51</td><td>&#160;</td></tr><tr><td class="number">52</td><td>               <span class="k1">case</span> KEY_BACKSPACE:</td></tr><tr><td class="number">53</td><td>                  <span class="k1">if</span><span class="k2">(</span>iter <span class="k3">!</span><span class="k3">=</span> edittext.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">54</td><td>                  <span class="k2">{</span></td></tr><tr><td class="number">55</td><td>                     caret--<span class="k2">;</span></td></tr><tr><td class="number">56</td><td>                     iter--<span class="k2">;</span></td></tr><tr><td class="number">57</td><td>                     iter <span class="k3">=</span> edittext.erase<span class="k2">(</span>iter<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">58</td><td>                  <span class="k2">}</span></td></tr><tr><td class="number">59</td><td>               <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">60</td><td>            </td></tr><tr><td class="number">61</td><td>               <span class="k1">case</span> KEY_RIGHT:</td></tr><tr><td class="number">62</td><td>                  <span class="k1">if</span><span class="k2">(</span>iter <span class="k3">!</span><span class="k3">=</span> edittext.end<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>   caret<span class="k3">+</span><span class="k3">+</span>, iter<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">63</td><td>               <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">64</td><td>            </td></tr><tr><td class="number">65</td><td>               <span class="k1">case</span> KEY_LEFT:</td></tr><tr><td class="number">66</td><td>                  <span class="k1">if</span><span class="k2">(</span>iter <span class="k3">!</span><span class="k3">=</span> edittext.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> caret--, iter--<span class="k2">;</span></td></tr><tr><td class="number">67</td><td>               <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">68</td><td>            </td></tr><tr><td class="number">69</td><td>               <span class="k1">case</span> KEY_INSERT:</td></tr><tr><td class="number">70</td><td>                  <span class="k1">if</span><span class="k2">(</span>insert<span class="k2">)</span> insert <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <span class="k1">else</span> insert <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">71</td><td>               <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">72</td><td>&#160;</td></tr><tr><td class="number">73</td><td>               default:</td></tr><tr><td class="number">74</td><td>&#160;</td></tr><tr><td class="number">75</td><td>               <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">76</td><td>            <span class="k2">}</span></td></tr><tr><td class="number">77</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">78</td><td>      </td></tr><tr><td class="number">79</td><td>      <span class="c">// clear screen</span></td></tr><tr><td class="number">80</td><td>      clear<span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">81</td><td>&#160;</td></tr><tr><td class="number">82</td><td>      <span class="c">// output the string to the screen</span></td></tr><tr><td class="number">83</td><td>      textout<span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, edittext.c_str<span class="k2">(</span><span class="k2">)</span>, <span class="n">0</span>, <span class="n">10</span>, WHITE<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">84</td><td>&#160;</td></tr><tr><td class="number">85</td><td>      <span class="c">// output some stats using Allegro's printf functions</span></td></tr><tr><td class="number">86</td><td>      textprintf<span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>,  <span class="n">0</span>, <span class="n">20</span>, WHITE, <span class="s">"length:   %d"</span>, edittext.length<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">87</td><td>      textprintf<span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>,  <span class="n">0</span>, <span class="n">30</span>, WHITE, <span class="s">"capacity: %d"</span>, edittext.capacity<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">88</td><td>      textprintf<span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>,  <span class="n">0</span>, <span class="n">40</span>, WHITE, <span class="s">"empty?:   %d"</span>, edittext.empty<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">89</td><td>      <span class="k1">if</span><span class="k2">(</span>insert<span class="k2">)</span></td></tr><tr><td class="number">90</td><td>         textout<span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="s">"Inserting"</span>, <span class="n">0</span>, <span class="n">50</span>, WHITE<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">91</td><td>      <span class="k1">else</span></td></tr><tr><td class="number">92</td><td>         textout<span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="s">"Replacing"</span>, <span class="n">0</span>, <span class="n">50</span>, WHITE<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">93</td><td>&#160;</td></tr><tr><td class="number">94</td><td>      <span class="c">// draw the caret</span></td></tr><tr><td class="number">95</td><td>      <a href="http://www.allegro.cc/manual/vline" target="_blank"><span class="a">vline</span></a><span class="k2">(</span>buffer, caret <span class="k3">*</span> <span class="n">8</span>, <span class="n">8</span>, <span class="n">18</span>, WHITE<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">96</td><td>&#160;</td></tr><tr><td class="number">97</td><td>      <span class="c">// blit to screen</span></td></tr><tr><td class="number">98</td><td>      <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">320</span>, <span class="n">240</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">99</td><td>&#160;</td></tr><tr><td class="number">100</td><td>   <span class="k2">}</span><span class="k1">while</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// end of game loop</span></td></tr><tr><td class="number">101</td><td>   </td></tr><tr><td class="number">102</td><td>   <span class="c">// clean up</span></td></tr><tr><td class="number">103</td><td>   <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">104</td><td>   <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_TEXT, <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></td></tr><tr><td class="number">105</td><td>   </td></tr><tr><td class="number">106</td><td>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">107</td><td><span class="k2">}</span></td></tr><tr><td class="number">108</td><td><a href="http://www.allegro.cc/manual/END_OF_MAIN" target="_blank"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (piccolo)</author>
		<pubDate>Tue, 21 Feb 2006 03:04:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
if(insert) insert = 0; else insert = 1;
</p></div></div><p>
Imo this is much cleaner
</p><div class="source-code snippet"><div class="inner"><pre>insert <span class="k3">=</span> <span class="k3">!</span>insert<span class="k2">;</span>
</pre></div></div><p>

What about home and end?  Personally I think insert is more of an annoance then a feature, and you support it but not home and end? <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /> shame on you.</p><p>Anyway, you also forgot about two important things.  1) The box scroll!  The text inside an input widget needs to scroll to the left and right so that the user sees the correct data inside the box.  And 2) clicking to move the caret.  There doesnt seem to be a way to click somewhere to get the caret to move there.</p><p>Anyway, heres some code ripped out of my Input widget.  Its a bit dependent on internal frameworks and such, but it hopefully conveys the idea.</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td>Input::Action Input::onIdle<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>    string <span class="k3">&amp;</span>value <span class="k3">=</span> attributes<span class="k2">[</span><span class="s">"value"</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td>    </td></tr><tr><td class="number">5</td><td>    <span class="k1">if</span><span class="k2">(</span>hasFocus <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/keypressed" target="_blank"><span class="a">keypressed</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">6</td><td>        </td></tr><tr><td class="number">7</td><td>        <span class="k1">int</span> val <span class="k3">=</span> <a href="http://www.allegro.cc/manual/readkey" target="_blank"><span class="a">readkey</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>        </td></tr><tr><td class="number">9</td><td>        <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span>val <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">8</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> KEY_ENTER <span class="k3">&amp;</span><span class="k3">&amp;</span> attributes.count<span class="k2">(</span><span class="s">"enterAction"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">10</td><td>            </td></tr><tr><td class="number">11</td><td>            GuiScreen::active-&gt;generateAction<span class="k2">(</span>attributes<span class="k2">[</span><span class="s">"enterAction"</span><span class="k2">]</span>, <span class="k1">this</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">13</td><td>        <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span>val <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">8</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> KEY_BACKSPACE<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">14</td><td>            </td></tr><tr><td class="number">15</td><td>            <span class="k1">if</span><span class="k2">(</span>cursorPos <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>value.empty<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">16</td><td>                </td></tr><tr><td class="number">17</td><td>                value.erase<span class="k2">(</span>cursorPos <span class="k3">-</span> <span class="n">1</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>                </td></tr><tr><td class="number">19</td><td>                setCursorPos<span class="k2">(</span>cursorPos <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>                boundsCheckScroll<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td>            <span class="k2">}</span></td></tr><tr><td class="number">22</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">23</td><td>        <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span>val <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">8</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> KEY_DEL<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">24</td><td>            </td></tr><tr><td class="number">25</td><td>            <span class="k1">if</span><span class="k2">(</span>cursorPos <span class="k3">&lt;</span> <span class="k2">(</span><span class="k1">signed</span><span class="k2">)</span>value.size<span class="k2">(</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>value.empty<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">26</td><td>                </td></tr><tr><td class="number">27</td><td>                value.erase<span class="k2">(</span>cursorPos, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>                </td></tr><tr><td class="number">29</td><td>                setCursorPos<span class="k2">(</span>cursorPos<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>                boundsCheckScroll<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">31</td><td>            <span class="k2">}</span></td></tr><tr><td class="number">32</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">33</td><td>        <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span>val <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">8</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> KEY_LEFT<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">34</td><td>            </td></tr><tr><td class="number">35</td><td>            setCursorPos<span class="k2">(</span>cursorPos <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">36</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">37</td><td>        <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span>val <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">8</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> KEY_RIGHT<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">38</td><td>            </td></tr><tr><td class="number">39</td><td>            setCursorPos<span class="k2">(</span>cursorPos <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">41</td><td>        <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span>val <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">8</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> KEY_HOME<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">42</td><td>            </td></tr><tr><td class="number">43</td><td>            setCursorPos<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">44</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">45</td><td>        <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span>val <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">8</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> KEY_END<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">46</td><td>            </td></tr><tr><td class="number">47</td><td>            setCursorPos<span class="k2">(</span>value.size<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">48</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">49</td><td>        <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>val <span class="k3">&amp;</span> <span class="n">0xff</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">50</td><td>            </td></tr><tr><td class="number">51</td><td>            <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>attributes.count<span class="k2">(</span><span class="s">"restrictTo"</span><span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> attributes<span class="k2">[</span><span class="s">"restrictTo"</span><span class="k2">]</span>.find<span class="k2">(</span><span class="k2">(</span><span class="k1">char</span><span class="k2">)</span><span class="k2">(</span>val <span class="k3">&amp;</span> <span class="n">0xff</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> string::npos<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">52</td><td>                </td></tr><tr><td class="number">53</td><td>                value.insert<span class="k2">(</span>cursorPos, <span class="n">1</span>, val <span class="k3">&amp;</span> <span class="n">0xff</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">54</td><td>                setCursorPos<span class="k2">(</span>cursorPos <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">55</td><td>                </td></tr><tr><td class="number">56</td><td>                <span class="k1">if</span><span class="k2">(</span>attributes.count<span class="k2">(</span><span class="s">"checkOnType"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">57</td><td>                    </td></tr><tr><td class="number">58</td><td>                    Widget <span class="k3">*</span>widget <span class="k3">=</span> GuiScreen::active-&gt;findByKey<span class="k2">(</span><span class="s">"name"</span>, attributes<span class="k2">[</span><span class="s">"checkOnType"</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">59</td><td>                    </td></tr><tr><td class="number">60</td><td>                    <span class="k1">if</span><span class="k2">(</span>widget<span class="k2">)</span></td></tr><tr><td class="number">61</td><td>                        widget-&gt;attributes<span class="k2">[</span><span class="s">"checked"</span><span class="k2">]</span> <span class="k3">=</span> <span class="s">"1"</span><span class="k2">;</span></td></tr><tr><td class="number">62</td><td>                <span class="k2">}</span></td></tr><tr><td class="number">63</td><td>                </td></tr><tr><td class="number">64</td><td>                <span class="k1">if</span><span class="k2">(</span>attributes.count<span class="k2">(</span><span class="s">"uncheckOnType"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">65</td><td>                    </td></tr><tr><td class="number">66</td><td>                    Widget <span class="k3">*</span>widget <span class="k3">=</span> GuiScreen::active-&gt;findByKey<span class="k2">(</span><span class="s">"name"</span>, attributes<span class="k2">[</span><span class="s">"uncheckOnType"</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">67</td><td>                    </td></tr><tr><td class="number">68</td><td>                    <span class="k1">if</span><span class="k2">(</span>widget<span class="k2">)</span></td></tr><tr><td class="number">69</td><td>                        widget-&gt;attributes<span class="k2">[</span><span class="s">"checked"</span><span class="k2">]</span> <span class="k3">=</span> <span class="s">"0"</span><span class="k2">;</span></td></tr><tr><td class="number">70</td><td>                <span class="k2">}</span></td></tr><tr><td class="number">71</td><td>            <span class="k2">}</span></td></tr><tr><td class="number">72</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">73</td><td>        </td></tr><tr><td class="number">74</td><td>        <span class="k1">if</span><span class="k2">(</span>value.empty<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">75</td><td>            </td></tr><tr><td class="number">76</td><td>            <span class="k1">if</span><span class="k2">(</span>attributes.count<span class="k2">(</span><span class="s">"checkOnEmpty"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">77</td><td>                </td></tr><tr><td class="number">78</td><td>                Widget <span class="k3">*</span>widget <span class="k3">=</span> GuiScreen::active-&gt;findByKey<span class="k2">(</span><span class="s">"name"</span>, attributes<span class="k2">[</span><span class="s">"checkOnEmpty"</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">79</td><td>                </td></tr><tr><td class="number">80</td><td>                <span class="k1">if</span><span class="k2">(</span>widget<span class="k2">)</span></td></tr><tr><td class="number">81</td><td>                    widget-&gt;attributes<span class="k2">[</span><span class="s">"checked"</span><span class="k2">]</span> <span class="k3">=</span> <span class="s">"1"</span><span class="k2">;</span></td></tr><tr><td class="number">82</td><td>            <span class="k2">}</span></td></tr><tr><td class="number">83</td><td>            </td></tr><tr><td class="number">84</td><td>            <span class="k1">if</span><span class="k2">(</span>attributes.count<span class="k2">(</span><span class="s">"uncheckOnEmpty"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">85</td><td>                </td></tr><tr><td class="number">86</td><td>                Widget <span class="k3">*</span>widget <span class="k3">=</span> GuiScreen::active-&gt;findByKey<span class="k2">(</span><span class="s">"name"</span>, attributes<span class="k2">[</span><span class="s">"uncheckOnEmpty"</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">87</td><td>                </td></tr><tr><td class="number">88</td><td>                <span class="k1">if</span><span class="k2">(</span>widget<span class="k2">)</span></td></tr><tr><td class="number">89</td><td>                    widget-&gt;attributes<span class="k2">[</span><span class="s">"checked"</span><span class="k2">]</span> <span class="k3">=</span> <span class="s">"0"</span><span class="k2">;</span></td></tr><tr><td class="number">90</td><td>            <span class="k2">}</span></td></tr><tr><td class="number">91</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">92</td><td>        </td></tr><tr><td class="number">93</td><td>        <span class="k1">if</span><span class="k2">(</span>attributes.count<span class="k2">(</span><span class="s">"syncValueWith"</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">94</td><td>            syncValue<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">95</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">96</td><td>    </td></tr><tr><td class="number">97</td><td>    <span class="k1">return</span> OK<span class="k2">;</span></td></tr><tr><td class="number">98</td><td><span class="k2">}</span></td></tr><tr><td class="number">99</td><td>&#160;</td></tr><tr><td class="number">100</td><td><span class="k1">void</span> Input::load<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">101</td><td><span class="k2">{</span></td></tr><tr><td class="number">102</td><td>    <span class="k1">if</span><span class="k2">(</span>attributes.count<span class="k2">(</span><span class="s">"syncValueWith"</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">103</td><td>        syncValue<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">104</td><td>    </td></tr><tr><td class="number">105</td><td>    setCursorPos<span class="k2">(</span>attributes<span class="k2">[</span><span class="s">"value"</span><span class="k2">]</span>.size<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">106</td><td><span class="k2">}</span></td></tr><tr><td class="number">107</td><td>&#160;</td></tr><tr><td class="number">108</td><td><span class="k1">void</span> Input::syncValue<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">109</td><td><span class="k2">{</span></td></tr><tr><td class="number">110</td><td>    string <span class="k3">&amp;</span>value <span class="k3">=</span> attributes<span class="k2">[</span><span class="s">"value"</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">111</td><td>    </td></tr><tr><td class="number">112</td><td>    Widget <span class="k3">*</span>widget <span class="k3">=</span> GuiScreen::active-&gt;findByKey<span class="k2">(</span><span class="s">"name"</span>, attributes<span class="k2">[</span><span class="s">"syncValueWith"</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">113</td><td>    </td></tr><tr><td class="number">114</td><td>    <span class="k1">if</span><span class="k2">(</span>widget<span class="k2">)</span></td></tr><tr><td class="number">115</td><td>        <span class="k1">if</span><span class="k2">(</span>attributes.count<span class="k2">(</span><span class="s">"isConfirm"</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">116</td><td>            widget-&gt;attributes<span class="k2">[</span><span class="s">"confirm"</span><span class="k2">]</span> <span class="k3">=</span> value<span class="k2">;</span></td></tr><tr><td class="number">117</td><td>        <span class="k1">else</span></td></tr><tr><td class="number">118</td><td>            widget-&gt;attributes<span class="k2">[</span><span class="s">"value"</span><span class="k2">]</span> <span class="k3">=</span> value<span class="k2">;</span></td></tr><tr><td class="number">119</td><td><span class="k2">}</span></td></tr><tr><td class="number">120</td><td>&#160;</td></tr><tr><td class="number">121</td><td><span class="k1">int</span> Input::visibleChars<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">122</td><td><span class="k2">{</span></td></tr><tr><td class="number">123</td><td>    string <span class="k3">&amp;</span>value <span class="k3">=</span> attributes<span class="k2">[</span><span class="s">"value"</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">124</td><td>    </td></tr><tr><td class="number">125</td><td>    <span class="k1">int</span> w <span class="k3">=</span> this-&gt;w <span class="k3">-</span> <span class="n">32</span><span class="k2">;</span></td></tr><tr><td class="number">126</td><td>    </td></tr><tr><td class="number">127</td><td>    <span class="k1">for</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> i <span class="k3">=</span> scrollPos<span class="k2">;</span> i <span class="k3">&lt;</span> value.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">128</td><td>        </td></tr><tr><td class="number">129</td><td>        w <span class="k3">-</span><span class="k3">=</span> getWidth<span class="k2">(</span>value.at<span class="k2">(</span>i<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">130</td><td>        </td></tr><tr><td class="number">131</td><td>        <span class="k1">if</span><span class="k2">(</span>w <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">132</td><td>            <span class="k1">return</span> i <span class="k3">-</span> scrollPos<span class="k2">;</span></td></tr><tr><td class="number">133</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">134</td><td>    </td></tr><tr><td class="number">135</td><td>    <span class="k1">return</span> value.size<span class="k2">(</span><span class="k2">)</span> <span class="k3">-</span> scrollPos<span class="k2">;</span></td></tr><tr><td class="number">136</td><td><span class="k2">}</span></td></tr><tr><td class="number">137</td><td>&#160;</td></tr><tr><td class="number">138</td><td><span class="k1">int</span> Input::getWidth<span class="k2">(</span>string str<span class="k2">)</span></td></tr><tr><td class="number">139</td><td><span class="k2">{</span></td></tr><tr><td class="number">140</td><td>    FontRenderer <span class="k3">&amp;</span><a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a> <span class="k3">=</span> Print::getFontRenderer<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">141</td><td>    </td></tr><tr><td class="number">142</td><td>    <span class="k1">if</span><span class="k2">(</span>attributes<span class="k2">[</span><span class="s">"special"</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">"password"</span><span class="k2">)</span></td></tr><tr><td class="number">143</td><td>        str <span class="k3">=</span> string<span class="k2">(</span>str.size<span class="k2">(</span><span class="k2">)</span>, <span class="s">'*'</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">144</td><td>    </td></tr><tr><td class="number">145</td><td>    <span class="k1">return</span> font.stringWidth<span class="k2">(</span>str<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">146</td><td><span class="k2">}</span></td></tr><tr><td class="number">147</td><td>&#160;</td></tr><tr><td class="number">148</td><td><span class="k1">int</span> Input::getWidth<span class="k2">(</span><span class="k1">char</span> c<span class="k2">)</span></td></tr><tr><td class="number">149</td><td><span class="k2">{</span></td></tr><tr><td class="number">150</td><td>    FontRenderer <span class="k3">&amp;</span><a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a> <span class="k3">=</span> Print::getFontRenderer<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">151</td><td>    </td></tr><tr><td class="number">152</td><td>    <span class="k1">if</span><span class="k2">(</span>attributes<span class="k2">[</span><span class="s">"special"</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">"password"</span><span class="k2">)</span></td></tr><tr><td class="number">153</td><td>        <span class="k1">return</span> font.width<span class="k2">(</span><span class="s">'*'</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">154</td><td>    <span class="k1">else</span></td></tr><tr><td class="number">155</td><td>        <span class="k1">return</span> font.width<span class="k2">(</span>c<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">156</td><td><span class="k2">}</span></td></tr><tr><td class="number">157</td><td>&#160;</td></tr><tr><td class="number">158</td><td><span class="k1">int</span> Input::getCursorPixel<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">159</td><td><span class="k2">{</span></td></tr><tr><td class="number">160</td><td>    string <span class="k3">&amp;</span>value <span class="k3">=</span> attributes<span class="k2">[</span><span class="s">"value"</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">161</td><td>    </td></tr><tr><td class="number">162</td><td>    <span class="k1">int</span> ret <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">163</td><td>    </td></tr><tr><td class="number">164</td><td>    <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> scrollPos<span class="k2">;</span> i <span class="k3">&lt;</span> cursorPos<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">165</td><td>        ret <span class="k3">+</span><span class="k3">=</span> getWidth<span class="k2">(</span>value.at<span class="k2">(</span>i<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">166</td><td>    </td></tr><tr><td class="number">167</td><td>    <span class="k1">return</span> ret<span class="k2">;</span></td></tr><tr><td class="number">168</td><td><span class="k2">}</span></td></tr><tr><td class="number">169</td><td>&#160;</td></tr><tr><td class="number">170</td><td><span class="k1">void</span> Input::setCursorPixel<span class="k2">(</span><span class="k1">int</span> x<span class="k2">)</span></td></tr><tr><td class="number">171</td><td><span class="k2">{</span></td></tr><tr><td class="number">172</td><td>    string <span class="k3">&amp;</span>value <span class="k3">=</span> attributes<span class="k2">[</span><span class="s">"value"</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">173</td><td>    </td></tr><tr><td class="number">174</td><td>    <span class="k1">int</span> newPos, tmp<span class="k2">;</span></td></tr><tr><td class="number">175</td><td>    string::iterator itr <span class="k3">=</span> value.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">176</td><td>    </td></tr><tr><td class="number">177</td><td>    <span class="c">//x -= 16;</span></td></tr><tr><td class="number">178</td><td>    </td></tr><tr><td class="number">179</td><td>    <span class="k1">for</span><span class="k2">(</span>newPos <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> newPos <span class="k3">&lt;</span> scrollPos <span class="k3">&amp;</span><span class="k3">&amp;</span> itr <span class="k3">!</span><span class="k3">=</span> value.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> newPos<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">180</td><td>        <span class="k3">+</span><span class="k3">+</span>itr<span class="k2">;</span></td></tr><tr><td class="number">181</td><td>    </td></tr><tr><td class="number">182</td><td>    <span class="k1">for</span><span class="k2">(</span><span class="k2">;</span> itr <span class="k3">!</span><span class="k3">=</span> value.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>itr, <span class="k3">+</span><span class="k3">+</span>newPos<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">183</td><td>        </td></tr><tr><td class="number">184</td><td>        tmp <span class="k3">=</span> getWidth<span class="k2">(</span><span class="k3">*</span>itr<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">185</td><td>        </td></tr><tr><td class="number">186</td><td>        <span class="k1">if</span><span class="k2">(</span>x <span class="k3">&lt;</span><span class="k3">=</span> tmp <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span></td></tr><tr><td class="number">187</td><td>            <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">188</td><td>        </td></tr><tr><td class="number">189</td><td>        x <span class="k3">-</span><span class="k3">=</span> tmp<span class="k2">;</span></td></tr><tr><td class="number">190</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">191</td><td>    </td></tr><tr><td class="number">192</td><td>    setCursorPos<span class="k2">(</span>newPos<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">193</td><td><span class="k2">}</span></td></tr><tr><td class="number">194</td><td>&#160;</td></tr><tr><td class="number">195</td><td><span class="k1">void</span> Input::setCursorPos<span class="k2">(</span><span class="k1">int</span> newPos<span class="k2">)</span></td></tr><tr><td class="number">196</td><td><span class="k2">{</span></td></tr><tr><td class="number">197</td><td>    string <span class="k3">&amp;</span>value <span class="k3">=</span> attributes<span class="k2">[</span><span class="s">"value"</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">198</td><td>    </td></tr><tr><td class="number">199</td><td>    <span class="k1">if</span><span class="k2">(</span>newPos <span class="k3">&gt;</span> <span class="k2">(</span><span class="k1">signed</span><span class="k2">)</span>value.size<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">200</td><td>        newPos <span class="k3">=</span> value.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">201</td><td>    </td></tr><tr><td class="number">202</td><td>    <span class="k1">if</span><span class="k2">(</span>newPos <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">203</td><td>        newPos <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">204</td><td>    </td></tr><tr><td class="number">205</td><td>    cursorPos <span class="k3">=</span> newPos<span class="k2">;</span></td></tr><tr><td class="number">206</td><td>    </td></tr><tr><td class="number">207</td><td>    boundsCheckScroll<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">208</td><td><span class="k2">}</span></td></tr><tr><td class="number">209</td><td>&#160;</td></tr><tr><td class="number">210</td><td><span class="k1">void</span> Input::boundsCheckScroll<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">211</td><td><span class="k2">{</span></td></tr><tr><td class="number">212</td><td>    string <span class="k3">&amp;</span>value <span class="k3">=</span> attributes<span class="k2">[</span><span class="s">"value"</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">213</td><td>    </td></tr><tr><td class="number">214</td><td>    <span class="k1">if</span><span class="k2">(</span>scrollPos <span class="k3">&gt;</span><span class="k3">=</span> <span class="k2">(</span><span class="k1">signed</span><span class="k2">)</span>value.size<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">215</td><td>        scrollPos <span class="k3">=</span> value.size<span class="k2">(</span><span class="k2">)</span> <span class="k3">-</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">216</td><td>    <span class="k1">if</span><span class="k2">(</span>scrollPos <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">217</td><td>        scrollPos <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">218</td><td>    </td></tr><tr><td class="number">219</td><td>    <span class="k1">if</span><span class="k2">(</span>cursorPos <span class="k3">&lt;</span> scrollPos<span class="k2">)</span></td></tr><tr><td class="number">220</td><td>        scrollPos <span class="k3">=</span> cursorPos<span class="k2">;</span></td></tr><tr><td class="number">221</td><td>    <span class="k1">else</span> <span class="k1">while</span><span class="k2">(</span>cursorPos <span class="k3">&gt;</span> scrollPos <span class="k3">&amp;</span><span class="k3">&amp;</span> getWidth<span class="k2">(</span>value.substr<span class="k2">(</span>scrollPos, cursorPos <span class="k3">-</span> scrollPos<span class="k2">)</span><span class="k2">)</span> <span class="k3">&gt;</span> w <span class="k3">-</span> <span class="n">32</span><span class="k2">)</span></td></tr><tr><td class="number">222</td><td>        scrollPos<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">223</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

It also supports variable width fonts, which is why there are setCursorPos and getCursorPos functions.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Thu, 23 Feb 2006 09:19:14 +0000</pubDate>
	</item>
</rss>
