<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Only draw N characters of a string?</title>
		<link>http://www.allegro.cc/forums/view/606814</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 24 Mar 2011 10:07:38 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I was wondering if A5 had a way to draw only N chars of a string rather than keep going until it hits NULL? </p><p>Thanks
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Wed, 23 Mar 2011 07:44:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><span class="source-code"><a href="http://www.allegro.cc/manual/al_ref_buffer"><span class="a">al_ref_buffer</span></a></span> + <span class="source-code"><a href="http://www.allegro.cc/manual/al_draw_ustr"><span class="a">al_draw_ustr</span></a></span> perhaps.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Wed, 23 Mar 2011 07:49:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/606814/909514#target">jmasterx</a> said:</div><div class="quote"><p>
I was wondering if A5 had a way to draw only N chars of a string rather than keep going until it hits NULL?
</p></div></div><p>

You could just warp the allegro write routine in to something like this:</p><div class="source-code snippet"><div class="inner"><pre><span class="c">//The function assumes valid input.</span>
<span class="k1">void</span> myWrite<span class="k2">(</span><span class="k1">char</span><span class="k3">*</span> str,<span class="k1">int</span> n<span class="k2">)</span><span class="k2">{</span>
    <span class="k1">char</span> ch<span class="k3">=</span>str<span class="k2">[</span>n<span class="k3">+</span><span class="n">1</span><span class="k2">]</span><span class="k2">;</span>

    str<span class="k2">[</span>n<span class="k3">+</span><span class="n">1</span><span class="k2">]</span><span class="k3">=</span><span class="s">'\0'</span><span class="k2">;</span>
    <span class="c">/*Allegro write routine here*/</span>
    str<span class="k2">[</span>n<span class="k3">+</span><span class="n">1</span><span class="k2">]</span><span class="k3">=</span>ch<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (type568)</author>
		<pubDate>Wed, 23 Mar 2011 08:16:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/606814/909516#target">type568</a> said:</div><div class="quote"><p>You could just warp the allegro write routine in to something like this:</p></div></div><p>

I thought of that, but I was hoping to avoid doing memory ops, and also for Unicode, I was hoping to avoid doing a BringToNextUTF8() function,</p><p>I&#39;m working on adding multi color to my text box and unfortunately,this means I must draw character by character: like this:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>  <span class="k1">int</span> curLen <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  2</span>  <span class="k1">int</span> curWidth <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  3</span>  <span class="k1">int</span> totalWidth <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  4</span>  <span class="k1">size_t</span> uniPos <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  5</span>  <span class="k1">int</span> bytesSkipped <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  6</span>  <span class="k1">int</span> atChar <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  7</span>  <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> linesSkipped<span class="k2">;</span> i <span class="k3">&lt;</span><span class="k3">=</span> maxitems <span class="k3">+</span> linesSkipped<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span>
<span class="number">  8</span>  <span class="k2">{</span>
<span class="number">  9</span>    <span class="k1">if</span><span class="k2">(</span>i <span class="k3">&gt;</span><span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>textRows.size<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 10</span>    <span class="k2">{</span>
<span class="number"> 11</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 12</span>    <span class="k2">}</span>
<span class="number"> 13</span>    atChar <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 14</span>    uniPos <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 15</span>    bytesSkipped <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 16</span>    totalWidth <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 17</span>
<span class="number"> 18</span>    
<span class="number"> 19</span>      curLen <span class="k3">=</span> _unicodeFunctions.bringToNextUnichar<span class="k2">(</span>uniPos,textRows<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>      <span class="k1">while</span><span class="k2">(</span>curLen <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 21</span>      <span class="k2">{</span>
<span class="number"> 22</span>        curStr <span class="k3">=</span> textRows<span class="k2">[</span>i<span class="k2">]</span>.substr<span class="k2">(</span>bytesSkipped,curLen<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>        curWidth <span class="k3">=</span> getFont<span class="k2">(</span><span class="k2">)</span>.getTextWidth<span class="k2">(</span>curStr<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>        bytesSkipped <span class="k3">+</span><span class="k3">=</span> curLen<span class="k2">;</span>
<span class="number"> 25</span>        atChar<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 26</span>
<span class="number"> 27</span>        paintargs.graphics<span class="k2">(</span><span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>drawText<span class="k2">(</span>AguiPoint<span class="k2">(</span>textX <span class="k3">+</span> totalWidth,
<span class="number"> 28</span>          textY <span class="k3">+</span> <span class="k2">(</span>i <span class="k3">*</span> getLineHeight<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span>,
<span class="number"> 29</span>          curStr.c_str<span class="k2">(</span><span class="k2">)</span>,AguiColor<span class="k2">(</span><span class="k2">(</span>curLen <span class="k3">+</span> curWidth<span class="k2">)</span> <span class="k3">*</span> <span class="n">10</span>,<span class="k2">(</span>atChar <span class="k3">+</span> curLen<span class="k2">)</span> <span class="k3">*</span> <span class="n">5</span>,i <span class="k3">*</span> <span class="n">5</span><span class="k2">)</span>,getFont<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>
<span class="number"> 31</span>        totalWidth <span class="k3">+</span><span class="k3">=</span> curWidth<span class="k2">;</span>
<span class="number"> 32</span>
<span class="number"> 33</span>        curLen <span class="k3">=</span> _unicodeFunctions.bringToNextUnichar<span class="k2">(</span>uniPos,textRows<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span>      <span class="k2">}</span>
<span class="number"> 35</span>
<span class="number"> 36</span>  <span class="k2">}</span>
</div></div><p> </p><p>Which ends up using about 7% more cpu than drawing text line by line <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Wed, 23 Mar 2011 08:27:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/606814/909516#target">type568</a> said:</div><div class="quote"><p>
You could just warp the allegro write routine in to something like this
</p></div></div><p>
There&#39;s no point, since internally allegro does what I said in my post.
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span><span class="k1">const</span> <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a> <span class="k3">*</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>,
   <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> color, <span class="k1">float</span> x, <span class="k1">float</span> y, <span class="k1">int</span> flags,
   <span class="k1">char</span> <span class="k1">const</span> <span class="k3">*</span>text<span class="k2">)</span> 
<span class="k2">{</span>
   <a href="http://www.allegro.cc/manual/ALLEGRO_USTR_INFO"><span class="a">ALLEGRO_USTR_INFO</span></a> info<span class="k2">;</span>
   <a href="http://www.allegro.cc/manual/ASSERT"><span class="a">ASSERT</span></a><span class="k2">(</span>text<span class="k2">)</span><span class="k2">;</span>
   <a href="http://www.allegro.cc/manual/al_draw_ustr"><span class="a">al_draw_ustr</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, color, x, y, flags, <a href="http://www.allegro.cc/manual/al_ref_cstr"><span class="a">al_ref_cstr</span></a><span class="k2">(</span><span class="k3">&amp;</span>info, text<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
You&#39;ll make that str array using <span class="source-code">n</span> and then allegro will use <span class="source-code"><a href="http://www.delorie.com/djgpp/doc/libc/libc_764.html" target="_blank">strlen</a></span> to figure out what <span class="source-code">n</span> must have been. You can just avoid all that by using <span class="source-code"><a href="http://www.allegro.cc/manual/al_ref_buffer"><span class="a">al_ref_buffer</span></a></span> and <span class="source-code"><a href="http://www.allegro.cc/manual/al_draw_ustr"><span class="a">al_draw_ustr</span></a></span> directly.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Wed, 23 Mar 2011 08:34:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/606814/909518#target">SiegeLord</a> said:</div><div class="quote"><p>You&#39;ll make that str array using n and then allegro will use strlen to figure out what n must have been. You can just avoid all that by using al_ref_buffer and al_draw_ustr directly.
</p></div></div><p>

The complication is, I cannot use al functions because Allegro is wrapped into a backend of my GUI API. But under normal circumstances I would do as you said.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Wed, 23 Mar 2011 08:40:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/606814/909517#target">jmasterx</a> said:</div><div class="quote"><p>
I&#39;m working on adding multi color to my text box and unfortunately,this means I must draw character by character: like this:
</p></div></div><p>

In most cases you will have long spans of the same colour, so you don&#39;t need to draw character by character.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/606814/909519#target">jmasterx</a> said:</div><div class="quote"><p>
I cannot use al functions because Allegro is wrapped into a backend of my GUI API
</p></div></div><p>

I don&#39;t get it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Wang)</author>
		<pubDate>Wed, 23 Mar 2011 08:45:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/606814/909520#target">Peter Wang</a> said:</div><div class="quote"><p>I don&#39;t get it.</p></div></div><p>

The point of creating a backend independent system is so the paint events of the widgets do not need rewriting when one switches from ex, al5 to sdl, to gl etc. In the same way using HeapAlloc() in an Allegro program would be silly and break cross platform.</p><p>also, what does one do in the event that every character has a different color (worst case)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Wed, 23 Mar 2011 08:50:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>strncpy?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (cgman24)</author>
		<pubDate>Wed, 23 Mar 2011 09:13:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>So use those al_ functions in your backend. Like you&#39;re doing with all the rest of the al_ functions.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Wed, 23 Mar 2011 09:17:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/606814/909514#target">jmasterx</a> said:</div><div class="quote"><p> I was wondering if A5 had a way to draw only N chars of a string rather than keep going until it hits NULL?</p><p> The complication is, I cannot use al functions</p></div></div><p>So you want to know if A5 has a way of doing something, but you don&#39;t want to use A5 functions?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (LennyLen)</author>
		<pubDate>Wed, 23 Mar 2011 09:17:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/606814/909517#target">jmasterx</a> said:</div><div class="quote"><p>
Which ends up using about 7% more cpu than drawing text line by line 
</p></div></div><p>

You care? <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>However, in my writing routines I used a putpixel <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /></p><p>Append:<br />Unless too much output it isn&#39;t an issue, and it adds great flexibility.<br />Although probably it was just cos&#39; I&#39;m not that familiar with the library itself, and because I love the basics overall..
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (type568)</author>
		<pubDate>Thu, 24 Mar 2011 10:07:38 +0000</pubDate>
	</item>
</rss>
