<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Quick question on newlines..</title>
		<link>http://www.allegro.cc/forums/view/594780</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sun, 20 Jan 2008 16:22:09 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Is there a newline sequence that is supported for allegro&#39;s text output methods? It seems that \n dudn&#39;t work. <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (blargmob)</author>
		<pubDate>Thu, 17 Jan 2008 09:40:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>no
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kazzmir)</author>
		<pubDate>Thu, 17 Jan 2008 09:41:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Dang, thanks anyways..
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (blargmob)</author>
		<pubDate>Thu, 17 Jan 2008 09:42:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>There isn&#39;t? That seems kinda not cool. Brings to mind the fact that Allegro makes cin unusable but offers no replacement...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Black)</author>
		<pubDate>Fri, 18 Jan 2008 13:53:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Write a wrapper function for multiline text output. Give it the starting string including newlines , parse it into lines , use function parameters for the starting position , justification , vertical line spacing and text color for foreground/background and use the allegro text functions to display each line in the proper placement. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 18 Jan 2008 14:09:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well I don&#39;t see what std::cin has to do with text output. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /></p><p>And std::cout still works, it outputs data to the console if one is available, otherwise the output is hidden. as with std::cin, it should read from the console, but if is a blocking function, so your game will pause while it gets input.</p><p>I am off to check that... -Tim</p><p>Edit: It definitely applies to linux, buggering off to windows to test mingw <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /><br />Edit2: It works fine under windows too.</p><p>Under both it spawns a console when you call std::cin.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Timorg)</author>
		<pubDate>Fri, 18 Jan 2008 14:10:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It has nothing to do with text output, it&#39;s just something that&#39;s on my very short list of complaints about allegro. This thread lengthened that list to two things.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Black)</author>
		<pubDate>Fri, 18 Jan 2008 14:40:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>A way to implement Edgar Reynaldo&#39;s idea could be.</p><p>You could scan the string, when you find a newline, replace it with &#39;\0&#39;, output the string, move your pointer to the character after the newline, move down 10 pixels (with the default font) and repeat til you reach the &#39;\0&#39;. Then run back along the string putting back all the newlines.</p><p>If you complain enough, someone will implement it for you, as its quite trivial. If I get bored later, I might even bother.</p><p>-Tim
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Timorg)</author>
		<pubDate>Fri, 18 Jan 2008 15:19:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I think Timorg&#39;s improvement would be faster and pretty easy too.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 18 Jan 2008 15:57:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
I think Timorg&#39;s improvement would be faster and pretty easy too.
</p></div></div><p>
There&#39;s absolutely no way you can justify not using the <a href="http://www.allegro.cc/manual/api/text-output/text_height">text_height</a> function though.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Harte)</author>
		<pubDate>Fri, 18 Jan 2008 16:05:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>So the multiline output is solved. Now as far as input goes you can use <a href="http://www.allegro.cc/forums/thread/317017/317020#target">this</a>.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (OICW)</author>
		<pubDate>Fri, 18 Jan 2008 16:58:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Just a little warning on Timorg&#39;s version: It&#39;s extremely efficient but you had better document on your function that it <u>modifies</u> the string it received as input.<br />(If you pass static data that is normally in &#39;const&#39; area, a touchy OS or a memory protector is allowed to complain. loudly.)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Audric)</author>
		<pubDate>Fri, 18 Jan 2008 16:59:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That depends whether you are doing those operations on the input string or you&#39;re copying it to some teporary string.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (OICW)</author>
		<pubDate>Fri, 18 Jan 2008 17:02:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#include &lt;allegro.h&gt;</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td><span class="k1">void</span> textout_ml_ex<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bmp, <span class="k1">const</span> <a href="http://www.allegro.cc/manual/FONT" target="_blank"><span class="a">FONT</span></a> <span class="k3">*</span>f, <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>s, <span class="k1">int</span> x, <span class="k1">int</span> y, <span class="k1">int</span> color, <span class="k1">int</span> bg<span class="k2">)</span></td></tr><tr><td class="number">4</td><td><span class="k2">{</span></td></tr><tr><td class="number">5</td><td>    <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>start<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>    <span class="k1">char</span> <span class="k3">*</span>p, <span class="k3">*</span>line_start<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>    <span class="k1">int</span> cy<span class="k2">;</span></td></tr><tr><td class="number">8</td><td>&#160;</td></tr><tr><td class="number">9</td><td>    start <span class="k3">=</span> s<span class="k2">;</span></td></tr><tr><td class="number">10</td><td>    p <span class="k3">=</span> <span class="k2">(</span><span class="k1">char</span> <span class="k3">*</span><span class="k2">)</span>s<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>    line_start <span class="k3">=</span> <span class="k2">(</span><span class="k1">char</span> <span class="k3">*</span><span class="k2">)</span>s<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>    cy <span class="k3">=</span> y<span class="k2">;</span></td></tr><tr><td class="number">13</td><td>&#160;</td></tr><tr><td class="number">14</td><td>    <span class="k1">while</span> <span class="k2">(</span><span class="n">1</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>        <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span><span class="k3">*</span>p<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">'\0'</span><span class="k2">)</span></td></tr><tr><td class="number">17</td><td>            <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>        <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span><span class="k3">*</span>p<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">'\n'</span><span class="k2">)</span></td></tr><tr><td class="number">19</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">20</td><td>            <span class="k2">(</span><span class="k3">*</span>p<span class="k2">)</span> <span class="k3">=</span> <span class="s">'\0'</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td>            <a href="http://www.allegro.cc/manual/textout_ex" target="_blank"><span class="a">textout_ex</span></a><span class="k2">(</span>bmp, f, line_start, x, cy, color, bg<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td>            line_start <span class="k3">=</span> p <span class="k3">+</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>            cy <span class="k3">+</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/text_height" target="_blank"><span class="a">text_height</span></a><span class="k2">(</span>f<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">25</td><td>        p<span class="k3">+</span><span class="k3">+</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>&#160;</td></tr><tr><td class="number">28</td><td>    <a href="http://www.allegro.cc/manual/textout_ex" target="_blank"><span class="a">textout_ex</span></a><span class="k2">(</span>bmp, f, line_start, x, cy, color, bg<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>&#160;</td></tr><tr><td class="number">30</td><td>    <span class="k1">while</span><span class="k2">(</span>p <span class="k3">!</span><span class="k3">=</span> start<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>        p--<span class="k2">;</span></td></tr><tr><td class="number">33</td><td>        <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span><span class="k3">*</span>p<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">'\0'</span><span class="k2">)</span></td></tr><tr><td class="number">34</td><td>            <span class="k2">(</span><span class="k3">*</span>p<span class="k2">)</span> <span class="k3">=</span> <span class="s">'\n'</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">36</td><td><span class="k2">}</span></td></tr><tr><td class="number">37</td><td>&#160;</td></tr><tr><td class="number">38</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">39</td><td><span class="k2">{</span></td></tr><tr><td class="number">40</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">41</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">42</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_WINDOWED, <span class="n">640</span>, <span class="n">480</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">43</td><td>&#160;</td></tr><tr><td class="number">44</td><td>&#160;</td></tr><tr><td class="number">45</td><td>    <span class="k1">char</span> str<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span> <span class="s">"This is a big long string\nit has quite a few lines of text\nhere is one\nhere is another"</span><span class="k2">;</span></td></tr><tr><td class="number">46</td><td>&#160;</td></tr><tr><td class="number">47</td><td>    <a href="http://www.allegro.cc/manual/textout_ex" target="_blank"><span class="a">textout_ex</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, str, <span class="n">0</span>, <span class="n">0</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</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="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">48</td><td>    textout_ml_ex<span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, str, <span class="n">0</span>, <span class="n">20</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</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="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">49</td><td>&#160;</td></tr><tr><td class="number">50</td><td>    <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">51</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">52</td><td>&#160;</td></tr><tr><td class="number">53</td><td>    <span class="k1">return</span> <span class="n">0</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><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>

I got bored, and as with what Audric was saying, this code isn&#39;t thread safe, if you try to use the string elsewhere at the same time, you will get strange things happening.</p><p>As for the other part of what Audric suggested, if your using STL strings, and call std::string.c_str() and pass it to the function, it depends on the implementation of STL to what will happen. Could be fine or yet again strange things might happen.</p><p>Thomas Harte: I didn&#39;t mention text_height function, cause I was trying to keep the example simple.</p><pre>-------------</pre><p>

Edit:</p><p>I got bored again, here is a c++ implementation that uses std::string</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="p">#include &lt;allegro.h&gt;</span></td></tr><tr><td class="number">2</td><td><span class="p">#include &lt;string&gt;</span></td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td><span class="k1">void</span> textout_ml_ex<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bmp, <span class="k1">const</span> <a href="http://www.allegro.cc/manual/FONT" target="_blank"><span class="a">FONT</span></a> <span class="k3">*</span>f, <span class="k1">const</span> std::string s, <span class="k1">int</span> x, <span class="k1">int</span> y, <span class="k1">int</span> color, <span class="k1">int</span> bg<span class="k2">)</span></td></tr><tr><td class="number">5</td><td><span class="k2">{</span></td></tr><tr><td class="number">6</td><td>    std::string leftovers <span class="k3">=</span> s<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>    <span class="k1">int</span> cy <span class="k3">=</span> y<span class="k2">;</span></td></tr><tr><td class="number">8</td><td>&#160;</td></tr><tr><td class="number">9</td><td>    <span class="k1">while</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</span></td></tr><tr><td class="number">10</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">11</td><td>        <span class="k1">int</span> count <span class="k3">=</span> leftovers.find<span class="k2">(</span><span class="s">"\n"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>        <span class="k1">if</span> <span class="k2">(</span>count <span class="k3">=</span><span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">)</span></td></tr><tr><td class="number">13</td><td>            <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>        std::string current <span class="k3">=</span> leftovers.substr<span class="k2">(</span><span class="n">0</span>, count<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>        leftovers <span class="k3">=</span> leftovers.substr<span class="k2">(</span>count <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>        <a href="http://www.allegro.cc/manual/textout_ex" target="_blank"><span class="a">textout_ex</span></a><span class="k2">(</span>bmp, f, current.c_str<span class="k2">(</span><span class="k2">)</span>, x, cy, color, bg<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>        cy <span class="k3">+</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/text_height" target="_blank"><span class="a">text_height</span></a><span class="k2">(</span>f<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">19</td><td>    <a href="http://www.allegro.cc/manual/textout_ex" target="_blank"><span class="a">textout_ex</span></a><span class="k2">(</span>bmp, f, leftovers.c_str<span class="k2">(</span><span class="k2">)</span>, x, cy, color, bg<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td><span class="k2">}</span></td></tr><tr><td class="number">21</td><td>&#160;</td></tr><tr><td class="number">22</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">23</td><td><span class="k2">{</span></td></tr><tr><td class="number">24</td><td>    <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">25</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">26</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_WINDOWED, <span class="n">640</span>, <span class="n">480</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">27</td><td>&#160;</td></tr><tr><td class="number">28</td><td>&#160;</td></tr><tr><td class="number">29</td><td>    std::string str<span class="k2">(</span><span class="s">"This is a big long string\nit has quite a few lines of text\nhere is one\nhere is another"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>&#160;</td></tr><tr><td class="number">31</td><td>    <a href="http://www.allegro.cc/manual/textout_ex" target="_blank"><span class="a">textout_ex</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, str.c_str<span class="k2">(</span><span class="k2">)</span>, <span class="n">0</span>, <span class="n">0</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</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="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td>    textout_ml_ex<span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, str, <span class="n">0</span>, <span class="n">20</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</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="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td>&#160;</td></tr><tr><td class="number">34</td><td>    <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">35</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">36</td><td>&#160;</td></tr><tr><td class="number">37</td><td>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">38</td><td><span class="k2">}</span></td></tr><tr><td class="number">39</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>

This is thread safe, and you can pass a null terminated string into it and it will work fine. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Timorg)</author>
		<pubDate>Fri, 18 Jan 2008 17:28:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I like the cleverness of the first solution anyway. My own hack would NOT have changed back the &#39;\0&#39; to &#39;\n&#39; <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /> Thread-proofness is certainly never an issue here (drawing to bitmap = job for one thread), and as long as the string is writable, the memory managers/watchers have nothing to complain about.</p><p>I&#39;ve been maintaining a codebase which had several..hmm..peculiarities like this, and as long as the prerequisites are listed at the function declaration, it&#39;s extremely reliable.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Audric)</author>
		<pubDate>Fri, 18 Jan 2008 19:04:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If you guys keep going, you&#39;ll come up with textprintf_ex() !
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Sat, 19 Jan 2008 02:29:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Except textprintf_ex doesn&#39;t handle newlines which is what prompted the whole debate.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kazzmir)</author>
		<pubDate>Sat, 19 Jan 2008 05:09:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You don&#39;t need to scan the string manually for newlines. <span class="source-code"><a href="http://www.delorie.com/djgpp/doc/libc/libc_753.html" target="_blank">strchr</a></span> is your friend:
</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">int</span> my_textout<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bmp, <a href="http://www.allegro.cc/manual/FONT" target="_blank"><span class="a">FONT</span></a> <span class="k3">*</span><a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>str, <span class="k1">int</span> x, <span class="k1">int</span> y, <span class="k1">int</span> fg, <span class="k1">int</span> bg<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>    <span class="k1">char</span> <span class="k3">*</span>str_copy <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_758.html" target="_blank">strdup</a><span class="k2">(</span>str<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td>    <span class="k1">char</span> <span class="k3">*</span>cur, <span class="k3">*</span>next<span class="k2">;</span></td></tr><tr><td class="number">5</td><td>    <span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">6</td><td>&#160;</td></tr><tr><td class="number">7</td><td>    cur <span class="k3">=</span> str_copy<span class="k2">;</span></td></tr><tr><td class="number">8</td><td>    <span class="k1">while</span><span class="k2">(</span>cur<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>        next <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_753.html" target="_blank">strchr</a><span class="k2">(</span>cur, <span class="s">'\n'</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>        <span class="k1">if</span><span class="k2">(</span>next<span class="k2">)</span> <span class="k3">*</span>next <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>        i <span class="k3">+</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/textout_ex" target="_blank"><span class="a">textout_ex</span></a><span class="k2">(</span>bmp, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, cur, x, y, fg, bg<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>        <span class="k1">if</span><span class="k2">(</span>next<span class="k2">)</span> <span class="k3">*</span><span class="k2">(</span>next<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k3">=</span> <span class="s">'\n'</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>        y <span class="k3">+</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/text_height" target="_blank"><span class="a">text_height</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>        cur <span class="k3">=</span> next<span class="k2">;</span></td></tr><tr><td class="number">16</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">17</td><td>&#160;</td></tr><tr><td class="number">18</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>str_copy<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></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Sat, 19 Jan 2008 05:41:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Now as far as input goes you can use this.
</p></div></div><p>

Yeah, but that seems a bit much just to let the player name his character...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Black)</author>
		<pubDate>Sat, 19 Jan 2008 06:09:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>After fixing the errors in Kitty Cat&#39;s code. ie. removing the redundant &#39;i&#39; variable, and changing the return value to void. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /> I then made an optimization, where I removed one of the if statements.</p><p>I then made a version of my code where it duplicates the string, before messing with it, so that I wouldn&#39;t have to put all the &#39;\n&#39;s in the right place.</p><p>I then stripped out the allegro stuff, and made a program that calls each function 10000000 times.</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="p">#include &lt;string.h&gt;</span></td></tr><tr><td class="number">2</td><td><span class="p">#include &lt;stdlib.h&gt;</span></td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td><span class="k1">void</span> textout_ml_ex0<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>s, <span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span></td></tr><tr><td class="number">5</td><td><span class="k2">{</span></td></tr><tr><td class="number">6</td><td>    <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>start<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>    <span class="k1">char</span> <span class="k3">*</span>p, <span class="k3">*</span>line_start<span class="k2">;</span></td></tr><tr><td class="number">8</td><td>    <span class="k1">int</span> cy<span class="k2">;</span></td></tr><tr><td class="number">9</td><td>&#160;</td></tr><tr><td class="number">10</td><td>    start <span class="k3">=</span> s<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>    p <span class="k3">=</span> <span class="k2">(</span><span class="k1">char</span> <span class="k3">*</span><span class="k2">)</span>s<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>    line_start <span class="k3">=</span> <span class="k2">(</span><span class="k1">char</span> <span class="k3">*</span><span class="k2">)</span>s<span class="k2">;</span></td></tr><tr><td class="number">13</td><td>    cy <span class="k3">=</span> y<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="k1">while</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</span></td></tr><tr><td class="number">16</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">17</td><td>        <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span><span class="k3">*</span>p<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">'\0'</span><span class="k2">)</span></td></tr><tr><td class="number">18</td><td>            <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>        <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span><span class="k3">*</span>p<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">'\n'</span><span class="k2">)</span></td></tr><tr><td class="number">20</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">21</td><td>            <span class="k2">(</span><span class="k3">*</span>p<span class="k2">)</span> <span class="k3">=</span> <span class="s">'\0'</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td>            line_start <span class="k3">=</span> p <span class="k3">+</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">24</td><td>        p<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">25</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">26</td><td>&#160;</td></tr><tr><td class="number">27</td><td>&#160;</td></tr><tr><td class="number">28</td><td>    <span class="k1">while</span><span class="k2">(</span>p <span class="k3">!</span><span class="k3">=</span> start<span class="k2">)</span></td></tr><tr><td class="number">29</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">30</td><td>        p--<span class="k2">;</span></td></tr><tr><td class="number">31</td><td>        <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span><span class="k3">*</span>p<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">'\0'</span><span class="k2">)</span></td></tr><tr><td class="number">32</td><td>            <span class="k2">(</span><span class="k3">*</span>p<span class="k2">)</span> <span class="k3">=</span> <span class="s">'\n'</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="k2">}</span></td></tr><tr><td class="number">35</td><td>&#160;</td></tr><tr><td class="number">36</td><td><span class="k1">void</span> textout_ml_ex1<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>s, <span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span></td></tr><tr><td class="number">37</td><td><span class="k2">{</span></td></tr><tr><td class="number">38</td><td>    <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>start<span class="k2">;</span></td></tr><tr><td class="number">39</td><td>    <span class="k1">char</span> <span class="k3">*</span>p, <span class="k3">*</span>line_start<span class="k2">;</span></td></tr><tr><td class="number">40</td><td>    <span class="k1">int</span> cy<span class="k2">;</span></td></tr><tr><td class="number">41</td><td>&#160;</td></tr><tr><td class="number">42</td><td>&#160;</td></tr><tr><td class="number">43</td><td>    <span class="k1">char</span> <span class="k3">*</span>copy <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_758.html" target="_blank">strdup</a><span class="k2">(</span>s<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">44</td><td>&#160;</td></tr><tr><td class="number">45</td><td>    start <span class="k3">=</span> copy<span class="k2">;</span></td></tr><tr><td class="number">46</td><td>    p <span class="k3">=</span> <span class="k2">(</span><span class="k1">char</span> <span class="k3">*</span><span class="k2">)</span>copy<span class="k2">;</span></td></tr><tr><td class="number">47</td><td>    line_start <span class="k3">=</span> <span class="k2">(</span><span class="k1">char</span> <span class="k3">*</span><span class="k2">)</span>copy<span class="k2">;</span></td></tr><tr><td class="number">48</td><td>    cy <span class="k3">=</span> y<span class="k2">;</span></td></tr><tr><td class="number">49</td><td>&#160;</td></tr><tr><td class="number">50</td><td>    <span class="k1">while</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</span></td></tr><tr><td class="number">51</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">52</td><td>        <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span><span class="k3">*</span>p<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">'\0'</span><span class="k2">)</span></td></tr><tr><td class="number">53</td><td>            <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">54</td><td>        <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span><span class="k3">*</span>p<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">'\n'</span><span class="k2">)</span></td></tr><tr><td class="number">55</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">56</td><td>            <span class="k2">(</span><span class="k3">*</span>p<span class="k2">)</span> <span class="k3">=</span> <span class="s">'\0'</span><span class="k2">;</span></td></tr><tr><td class="number">57</td><td>            line_start <span class="k3">=</span> p <span class="k3">+</span> <span class="n">1</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>        p<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">60</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">61</td><td>&#160;</td></tr><tr><td class="number">62</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>copy<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">63</td><td><span class="k2">}</span></td></tr><tr><td class="number">64</td><td>&#160;</td></tr><tr><td class="number">65</td><td><span class="k1">void</span> my_textout0<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>str, <span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span></td></tr><tr><td class="number">66</td><td><span class="k2">{</span></td></tr><tr><td class="number">67</td><td>    <span class="k1">char</span> <span class="k3">*</span>str_copy <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_758.html" target="_blank">strdup</a><span class="k2">(</span>str<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">68</td><td>    <span class="k1">char</span> <span class="k3">*</span>cur, <span class="k3">*</span>next<span class="k2">;</span></td></tr><tr><td class="number">69</td><td>&#160;</td></tr><tr><td class="number">70</td><td>    cur <span class="k3">=</span> str_copy<span class="k2">;</span></td></tr><tr><td class="number">71</td><td>    <span class="k1">while</span><span class="k2">(</span>cur<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>        next <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_753.html" target="_blank">strchr</a><span class="k2">(</span>cur, <span class="s">'\n'</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">74</td><td>        <span class="k1">if</span><span class="k2">(</span>next<span class="k2">)</span> <span class="k3">*</span>next <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">75</td><td>        <span class="k1">if</span><span class="k2">(</span>next<span class="k2">)</span> <span class="k3">*</span><span class="k2">(</span>next<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k3">=</span> <span class="s">'\n'</span><span class="k2">;</span></td></tr><tr><td class="number">76</td><td>        cur <span class="k3">=</span> next<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>&#160;</td></tr><tr><td class="number">79</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>str_copy<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">80</td><td><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="k1">void</span> my_textout1<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>str, <span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span></td></tr><tr><td class="number">83</td><td><span class="k2">{</span></td></tr><tr><td class="number">84</td><td>    <span class="k1">char</span> <span class="k3">*</span>str_copy <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_758.html" target="_blank">strdup</a><span class="k2">(</span>str<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">85</td><td>    <span class="k1">char</span> <span class="k3">*</span>cur, <span class="k3">*</span>next<span class="k2">;</span></td></tr><tr><td class="number">86</td><td>&#160;</td></tr><tr><td class="number">87</td><td>    cur <span class="k3">=</span> str_copy<span class="k2">;</span></td></tr><tr><td class="number">88</td><td>    <span class="k1">while</span><span class="k2">(</span>cur<span class="k2">)</span></td></tr><tr><td class="number">89</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">90</td><td>        next <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_753.html" target="_blank">strchr</a><span class="k2">(</span>cur, <span class="s">'\n'</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">91</td><td>        <span class="k1">if</span> <span class="k2">(</span>next<span class="k2">)</span></td></tr><tr><td class="number">92</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">93</td><td>            <span class="k3">*</span>next <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">94</td><td>            <span class="k3">*</span><span class="k2">(</span>next<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k3">=</span> <span class="s">'\n'</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>        cur <span class="k3">=</span> next<span class="k2">;</span></td></tr><tr><td class="number">97</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">98</td><td>&#160;</td></tr><tr><td class="number">99</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>str_copy<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">100</td><td><span class="k2">}</span></td></tr><tr><td class="number">101</td><td>&#160;</td></tr><tr><td class="number">102</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">103</td><td><span class="k2">{</span></td></tr><tr><td class="number">104</td><td>    <span class="k1">char</span> str<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span> <span class="s">"This is a big long string\nit has quite a few lines of text\nhere is one\nhere is another"</span><span class="k2">;</span></td></tr><tr><td class="number">105</td><td>    <span class="k1">int</span> c<span class="k2">;</span></td></tr><tr><td class="number">106</td><td>&#160;</td></tr><tr><td class="number">107</td><td>    <span class="k1">for</span> <span class="k2">(</span>c <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> c <span class="k3">&lt;</span> <span class="n">10000000</span><span class="k2">;</span> c<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">108</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">109</td><td>        my_textout0<span class="k2">(</span>str, <span class="n">0</span>, <span class="n">20</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">110</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">111</td><td>&#160;</td></tr><tr><td class="number">112</td><td>    <span class="k1">for</span> <span class="k2">(</span>c <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> c <span class="k3">&lt;</span> <span class="n">10000000</span><span class="k2">;</span> c<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">113</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">114</td><td>        my_textout1<span class="k2">(</span>str, <span class="n">0</span>, <span class="n">20</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">115</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">116</td><td>&#160;</td></tr><tr><td class="number">117</td><td>    <span class="k1">for</span> <span class="k2">(</span>c <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> c <span class="k3">&lt;</span> <span class="n">10000000</span><span class="k2">;</span> c<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">118</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">119</td><td>        textout_ml_ex0<span class="k2">(</span>str, <span class="n">0</span>, <span class="n">20</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">120</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">121</td><td>&#160;</td></tr><tr><td class="number">122</td><td>    <span class="k1">for</span> <span class="k2">(</span>c <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> c <span class="k3">&lt;</span> <span class="n">10000000</span><span class="k2">;</span> c<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">123</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">124</td><td>        textout_ml_ex1<span class="k2">(</span>str, <span class="n">0</span>, <span class="n">20</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">125</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">126</td><td>&#160;</td></tr><tr><td class="number">127</td><td>&#160;</td></tr><tr><td class="number">128</td><td>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">129</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

I then profiled the program and got the following results.</p><pre>
  %   cumulative   self              self     total           
 time   seconds   seconds    calls  ns/call  ns/call  name    
 58.79      9.67     9.67 10000000   967.05   967.05  textout_ml_ex0
 32.83     15.07     5.40 10000000   540.03   540.03  textout_ml_ex1
  3.83     15.70     0.63 10000000    63.00    63.00  my_textout0
  2.61     16.13     0.43 10000000    43.00    43.00  my_textout1
  1.95     16.45     0.32                             main
</pre><p>

As you can see Kitty Cat&#39;s function is much more efficent than mine, its actual 15 times faster than my original code.</p><p>Then if you optimize it (-O1) the difference is even more pronounced</p><pre>
Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total           
 time   seconds   seconds    calls  ns/call  ns/call  name    
 62.63      4.44     4.44 10000000   444.02   444.02  textout_ml_ex0
 31.31      6.66     2.22 10000000   222.01   222.01  textout_ml_ex1
  2.19      6.82     0.16 10000000    15.50    15.50  my_textout0
  2.05      6.96     0.15 10000000    14.50    14.50  my_textout1
  1.83      7.09     0.13                             main
</pre><p>

Which brings me to the final conclusion...</p><p>If you want multi-line text output use Kitty Cat&#39;s code (after you modify it so that it will actually compile without errors. <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /></p><p>-Tim
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Timorg)</author>
		<pubDate>Sat, 19 Jan 2008 11:40:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Yeah, but that seems a bit much just to let the player name his character...
</p></div></div><p>
With that code you can do pretty much everything you want. I have a working console using that code for input.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (OICW)</author>
		<pubDate>Sat, 19 Jan 2008 15:42:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I was saying that if the only reason you wanted text input was to get the player&#39;s name, that would be a lot of code to do it with. It&#39;s worth it if you&#39;re actually using a lot of text input, but it&#39;s just too much if you only use it once, which is about how much I would use it in a game.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Black)</author>
		<pubDate>Sun, 20 Jan 2008 00:04:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>As far as I know there&#39;s no other simple way of doing this in Allegro.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (OICW)</author>
		<pubDate>Sun, 20 Jan 2008 00:21:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I know, that&#39;s the problem. Allegro include functions to replace (and vastly improve upon) cout, but completely ignores the need for input. I&#39;m going to use the mind control routines in Allegro 5 to make someone put input routines in Allegro 6. <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Black)</author>
		<pubDate>Sun, 20 Jan 2008 00:32:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The problem is with how the keyboard is managed. You can write your scanf/cin function that will hide that code above from you.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (OICW)</author>
		<pubDate>Sun, 20 Jan 2008 01:00:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah, I know it isn&#39;t that hard to do. But when I was first starting out I had no idea how to do it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Black)</author>
		<pubDate>Sun, 20 Jan 2008 01:07:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Reminds me of myself five years ago (that&#39;s approximately how that thread is old).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (OICW)</author>
		<pubDate>Sun, 20 Jan 2008 01:41:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
I have a question about the modified version of Kitty Cat&#39;s multi line text output. Specifically the line :
</p><div class="source-code snippet"><div class="inner"><pre>           <span class="k3">*</span><span class="k2">(</span>next<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k3">=</span> <span class="s">'\n'</span><span class="k2">;</span>
</pre></div></div><p>

From :
</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> my_textout1<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>str, <span class="k1">int</span> x, <span class="k1">int</span> y<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>    <span class="k1">char</span> <span class="k3">*</span>str_copy <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_758.html" target="_blank">strdup</a><span class="k2">(</span>str<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td>    <span class="k1">char</span> <span class="k3">*</span>cur, <span class="k3">*</span>next<span class="k2">;</span></td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td>    cur <span class="k3">=</span> str_copy<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>    <span class="k1">while</span><span class="k2">(</span>cur<span class="k2">)</span></td></tr><tr><td class="number">8</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">9</td><td>        next <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_753.html" target="_blank">strchr</a><span class="k2">(</span>cur, <span class="s">'\n'</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>        <span class="k1">if</span> <span class="k2">(</span>next<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="k3">*</span>next <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>            <span class="k3">*</span><span class="k2">(</span>next<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k3">=</span> <span class="s">'\n'</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">15</td><td>        cur <span class="k3">=</span> next<span class="k2">;</span></td></tr><tr><td class="number">16</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">17</td><td>&#160;</td></tr><tr><td class="number">18</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>str_copy<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>

Since a copy is being worked on , the newline doesn&#39;t need to be replaced , just setting the address to the next character should suffice. What I don&#39;t understand is why the character after the detected newline should be set to a newline? Isn&#39;t &quot;*(next++)&quot; the same as &quot;*(next + 1)&quot;? Since &#39;cur&#39; gets set to the character position right after where the newline is detected and that character position&#39;s value has been set to a newline , why doesn&#39;t strchr(cur , &#39;\n&#39;) keep returning the same value as &#39;cur&#39;?</p><p>In any case , I came up with another version , based on Kitty Cat&#39;s as well :
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td>&#160;</td></tr><tr><td class="number">2</td><td><span class="k1">void</span> multiline_textout_v1<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> bmp , <a href="http://www.allegro.cc/manual/FONT" target="_blank"><span class="a">FONT</span></a> <span class="k3">*</span><a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a> , <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>ml_str , <span class="k1">int</span> x , <span class="k1">int</span> y , <span class="k1">int</span> v_spacing , <span class="k1">int</span> fg , <span class="k1">int</span> bg<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">3</td><td>  <span class="c">// note that this will only output the text lines of ml_str if each one ends with a newline '\n' character</span></td></tr><tr><td class="number">4</td><td>  <span class="c">//   so "Line 1\nLine 2\n" would work , but not "Line 1\nLine 2"</span></td></tr><tr><td class="number">5</td><td>  <span class="c">//   And so a normal string would not work either - ("Line 1") would fail </span></td></tr><tr><td class="number">6</td><td>  <span class="c">//     due to the lack of a newline character</span></td></tr><tr><td class="number">7</td><td>  <span class="k1">char</span><span class="k3">*</span> copy <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_758.html" target="_blank">strdup</a><span class="k2">(</span>ml_str<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">char</span><span class="k3">*</span> <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> <span class="k3">=</span> copy<span class="k2">;</span></td></tr><tr><td class="number">10</td><td>  <span class="k1">char</span><span class="k3">*</span> endline <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_753.html" target="_blank">strchr</a><span class="k2">(</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> , <span class="s">'\n'</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>  </td></tr><tr><td class="number">12</td><td>  <span class="k1">while</span><span class="k2">(</span>endline<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">13</td><td>    <span class="k3">*</span>endline <span class="k3">=</span> <span class="s">'\0'</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>    <a href="http://www.allegro.cc/manual/textout_ex" target="_blank"><span class="a">textout_ex</span></a><span class="k2">(</span>bmp , <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a> , <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> , x , y , fg , bg<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>    endline <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_753.html" target="_blank">strchr</a><span class="k2">(</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> , <span class="s">'\n'</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>    <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> <span class="k3">=</span> endline <span class="k3">+</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>    y <span class="k3">+</span><span class="k3">=</span> v_spacing<span class="k2">;</span></td></tr><tr><td class="number">18</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">19</td><td>  </td></tr><tr><td class="number">20</td><td>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>copy<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 20 Jan 2008 09:12:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Openlayer&#39;s TextRenderer does newlines automatically. <img src="http://www.allegro.cc/forums/smileys/cool.gif" alt="8-)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Sun, 20 Jan 2008 09:18:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Since a copy is being worked on , the newline doesn&#39;t need to be replaced , just setting the address to the next character should suffice.
</p></div></div><p>
Correct. A mistake on my part.. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /></p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
What I don&#39;t understand is why the character after the detected newline should be set to a newline? Isn&#39;t &quot;*(next++)&quot; the same as &quot;*(next + 1)&quot;?
</p></div></div><p>
No. next++ post-increments the &#39;next&#39; variable. It increments the variable, but &quot;returns&quot; the original value. ++next would increment the variable and give the new value.</p><p>A fixed version of my code would be:
</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> my_textout<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bmp, <a href="http://www.allegro.cc/manual/FONT" target="_blank"><span class="a">FONT</span></a> <span class="k3">*</span>f, <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>str, <span class="k1">int</span> x, <span class="k1">int</span> y, <span class="k1">int</span> fg, <span class="k1">int</span> bg<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>    <span class="k1">char</span> <span class="k3">*</span>str_copy <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_758.html" target="_blank">strdup</a><span class="k2">(</span>str<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td>    <span class="k1">char</span> <span class="k3">*</span>cur, <span class="k3">*</span>next<span class="k2">;</span></td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td>    cur <span class="k3">=</span> str_copy<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>    <span class="k1">while</span><span class="k2">(</span>cur<span class="k2">)</span></td></tr><tr><td class="number">8</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">9</td><td>        next <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_753.html" target="_blank">strchr</a><span class="k2">(</span>cur, <span class="s">'\n'</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>        <span class="k1">if</span><span class="k2">(</span>next<span class="k2">)</span> <span class="k3">*</span><span class="k2">(</span>next<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>        <a href="http://www.allegro.cc/manual/textout_ex" target="_blank"><span class="a">textout_ex</span></a><span class="k2">(</span>bmp, f, cur, x, y, fg, bg<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>        y <span class="k3">+</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/text_height" target="_blank"><span class="a">text_height</span></a><span class="k2">(</span>f<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>        cur <span class="k3">=</span> next<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">15</td><td>&#160;</td></tr><tr><td class="number">16</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>str_copy<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Sun, 20 Jan 2008 11:09:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
No. next++ post-increments the &#39;next&#39; variable. It increments the variable, but &quot;returns&quot; the original value. ++next would increment the variable and give the new value.
</p></div></div><p>
Weird. Not what I would expect to happen given that it&#39;s in parentheses. I never thought of post-incrementation as returning the original value.</p><p>Had to fix a bug in the version I put up and I also added in a function pointer parameter for which text function gets called. So now you can call textout_ex , textout_centre_ex , or textout_right_ex as an input parameter. My version now also displays the trailing end of the string containing newlines so you don&#39;t have to end it with a newline character. Use the v_spacing parameter to control the vertical spacing , and enter one of the three aforementioned allegro text functions for the text_func parameter.</p><p>Revised code :
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td>&#160;</td></tr><tr><td class="number">2</td><td><span class="k1">void</span> multiline_textout_v1a<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> bmp , <a href="http://www.allegro.cc/manual/FONT" target="_blank"><span class="a">FONT</span></a> <span class="k3">*</span><a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a> , <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>ml_str , <span class="k1">int</span> x , <span class="k1">int</span> y , <span class="k1">int</span> v_spacing , <span class="k1">int</span> fg , <span class="k1">int</span> bg ,</td></tr><tr><td class="number">3</td><td>                              <span class="k1">void</span> <span class="k2">(</span><span class="k3">*</span>text_func<span class="k2">)</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> , <span class="k1">const</span> <a href="http://www.allegro.cc/manual/FONT" target="_blank"><span class="a">FONT</span></a><span class="k3">*</span> , <span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span> , <span class="k1">int</span> , <span class="k1">int</span> , <span class="k1">int</span> , <span class="k1">int</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">4</td><td>&#160;</td></tr><tr><td class="number">5</td><td>  <span class="k1">char</span><span class="k3">*</span> copy <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_758.html" target="_blank">strdup</a><span class="k2">(</span>ml_str<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">char</span><span class="k3">*</span> <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> <span class="k3">=</span> copy<span class="k2">;</span></td></tr><tr><td class="number">8</td><td>  <span class="k1">char</span><span class="k3">*</span> endline <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_753.html" target="_blank">strchr</a><span class="k2">(</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> , <span class="s">'\n'</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>  </td></tr><tr><td class="number">10</td><td>  <span class="k1">while</span><span class="k2">(</span>endline<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">11</td><td>    <span class="k3">*</span>endline <span class="k3">=</span> <span class="s">'\0'</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>    text_func<span class="k2">(</span>bmp , <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a> , <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> , x , y , fg , bg<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>    <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> <span class="k3">=</span> endline <span class="k3">+</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>    endline <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_753.html" target="_blank">strchr</a><span class="k2">(</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> , <span class="s">'\n'</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>    y <span class="k3">+</span><span class="k3">=</span> v_spacing<span class="k2">;</span></td></tr><tr><td class="number">16</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">17</td><td>  endline <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_753.html" target="_blank">strchr</a><span class="k2">(</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> , <span class="s">'\0'</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> <span class="k3">!</span><span class="k3">=</span> endline<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">19</td><td>    text_func<span class="k2">(</span>bmp , <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a> , <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> , x , y , fg , bg<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">21</td><td>  </td></tr><tr><td class="number">22</td><td>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>copy<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 20 Jan 2008 16:22:09 +0000</pubDate>
	</item>
</rss>
