<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>RLE sprites are rats!</title>
		<link>http://www.allegro.cc/forums/view/587413</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 13 Sep 2006 17:40:33 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I don&#39;t think RLE sprites like me very much, or at least the ones that have been created from a sub-bitmap of a frame-strip.<br />I&#39;ve tried several different ways to create a sprite class using data contained entirely within a datafile, and i can refine it so that it all works, but i am always stopped by a runtime error when I try to draw the rle sprite to a bitmap. It is a Null Reference exception, which occurs when you&#39;re trying to access a memory address that doesn&#39;t exist. But I have gone through my code hundreds and hundreds of times, and cannot find any problem with it. i have come here seeking advice. I have included my source code, which has the location of the error indicated with a big comment. And, i must note, that this error shows up not in my code but in rle.inl. So i wonder if it&#39;s a problem with allegro. But in other programs where I have not used the process of extracting several rle sprites from the same bitmap, rather having the sprites as separate entries in the datafile and simply saying sprite = (RLE_SPRITE*)datafile[FRAME001].dat;<br />While this would solve my problem, it lengthens the time considerably that i would need to create these datafiles. I prefer to have one single sprite strip with frame numbers and speeds attached as properties. View the datafile if you want, it isn&#39;t password-protected. Anyway, just have a look, and any advice would be greatly appreciated.</p><p>Source code:<br /><a href="http://www.freewebs.com/ikari734/Sprite_class.zip">http://www.freewebs.com/ikari734/Sprite_class.zip</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (The Master)</author>
		<pubDate>Mon, 04 Sep 2006 17:02:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>FYI you don&#39;t need to put END_OF_FUNCTION() after every single function, only the ones that you intend to call LOCK_FUNCTION() with.</p><p>Secondly, xor is a C++ keyword so you can&#39;t use it as the name of a member variable.</p><p>Finally, the bug is possibly due to this:</p><div class="source-code snippet"><div class="inner"><pre>std::vector<span class="k3">&lt;</span>RLE_SPRITE&gt; anim_data<span class="k2">;</span>
</pre></div></div><p>

You&#39;d want a vector of <i>pointers</i> to RLE_SPRITEs instead.  After I made that change, it worked, except for one thing: using C++ destructors to unload datafiles, remove timers, etc. is asking for trouble.  Don&#39;t do it.  If you do do it, make sure that instances of the class are destroyed before Allegro is shut down.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Wang)</author>
		<pubDate>Mon, 04 Sep 2006 19:42:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>ok, cool. so you put this on your own compiler and it animated that little sprite? With the megaman animation?<br />i&#39;ll check these changes, cheers.;D
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (The Master)</author>
		<pubDate>Tue, 05 Sep 2006 03:22:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I don&#39;t remember it animating, but at least there was a sprite there :-)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Wang)</author>
		<pubDate>Tue, 05 Sep 2006 09:15:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>just out of curiosity, how would you recommend i use (vector).push_back()? Pointer to the data, or the actual data?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (The Master)</author>
		<pubDate>Sun, 10 Sep 2006 15:47:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Pointer.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (BAF)</author>
		<pubDate>Mon, 11 Sep 2006 04:49:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ve made the adjustments, however, there must be a problem with how the information is stored in the vector for anim_t. I am certain RLE_SPRITE works fine, however the vector that holds all information (including the RLE_SPRITE information) must not be stored properly. I have added a little debugging dump function which prints out the names of the animations in the anim_t vector, and it shows stuff like:</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">// animation-loading function output</span></td></tr><tr><td class="number">2</td><td>Loading CLIMB...</td></tr><tr><td class="number">3</td><td>Loading DASH...</td></tr><tr><td class="number">4</td><td>Loading DOUBLE_BLAST...</td></tr><tr><td class="number">5</td><td>Loading FIRE...</td></tr><tr><td class="number">6</td><td>Loading GRAPPLE...</td></tr><tr><td class="number">7</td><td>Loading HURT...</td></tr><tr><td class="number">8</td><td>Loading JUMP...</td></tr><tr><td class="number">9</td><td>Loading LOW_POWER...</td></tr><tr><td class="number">10</td><td>Loading RUN...</td></tr><tr><td class="number">11</td><td>Loading STAND...</td></tr><tr><td class="number">12</td><td>Loading SWORD...</td></tr><tr><td class="number">13</td><td>&#160;</td></tr><tr><td class="number">14</td><td><span class="c">// dump function output</span></td></tr><tr><td class="number">15</td><td>Sprite names:</td></tr><tr><td class="number">16</td><td>`</td></tr><tr><td class="number">17</td><td>`</td></tr><tr><td class="number">18</td><td>`</td></tr><tr><td class="number">19</td><td>`</td></tr><tr><td class="number">20</td><td>`</td></tr><tr><td class="number">21</td><td>`</td></tr><tr><td class="number">22</td><td>`</td></tr><tr><td class="number">23</td><td>`</td></tr><tr><td class="number">24</td><td>`</td></tr><tr><td class="number">25</td><td>`</td></tr><tr><td class="number">26</td><td>`</td></tr></tbody></table></div></div><p>

You see what I mean?<br />I think it has something to do with the way the function loads the information and stores it in the vector. Shown below:</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">/* get one animation from one datafile. This function is called for every datafile entry loaded */</span></td></tr><tr><td class="number">2</td><td><span class="k1">void</span> Sprite::GetAnim<span class="k2">(</span><a href="http://www.allegro.cc/manual/DATAFILE" target="_blank"><span class="a">DATAFILE</span></a> <span class="k3">*</span>d<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">3</td><td>  <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>data_prop<span class="k2">;</span></td></tr><tr><td class="number">4</td><td>  <span class="k1">int</span> x<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="k1">struct</span> anim_t animation<span class="k2">;</span>  </td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td>  data_prop <span class="k3">=</span> <a href="http://www.allegro.cc/manual/get_datafile_property" target="_blank"><span class="a">get_datafile_property</span></a><span class="k2">(</span>d, DAT_NAME<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>  <span class="k1">if</span><span class="k2">(</span>data_prop <span class="k3">!</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/empty_string" target="_blank"><span class="a">empty_string</span></a><span class="k2">)</span></td></tr><tr><td class="number">10</td><td>    <a href="http://www.allegro.cc/manual/ustrcpy" target="_blank"><span class="a">ustrcpy</span></a><span class="k2">(</span>animation.name, data_prop<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>&#160;</td></tr><tr><td class="number">12</td><td>  <span class="c">// if we've hit an end of file</span></td></tr><tr><td class="number">13</td><td>  <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/ustrcmp" target="_blank"><span class="a">ustrcmp</span></a><span class="k2">(</span><span class="s">"GrabberInfo"</span>, animation.name<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> </td></tr><tr><td class="number">14</td><td>    <span class="k1">return</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>&#160;</td></tr><tr><td class="number">16</td><td>  logstr<span class="k2">(</span><span class="s">"Loading %s..."</span>, animation.name<span class="k2">)</span><span class="k2">;</span> <span class="c">// dump</span></td></tr><tr><td class="number">17</td><td>&#160;</td></tr><tr><td class="number">18</td><td>  data_prop <span class="k3">=</span> <a href="http://www.allegro.cc/manual/get_datafile_property" target="_blank"><span class="a">get_datafile_property</span></a><span class="k2">(</span>d, <a href="http://www.allegro.cc/manual/DAT_ID" target="_blank"><span class="a">DAT_ID</span></a><span class="k2">(</span><span class="s">'X'</span>,<span class="s">'S'</span>,<span class="s">'I'</span>,<span class="s">'Z'</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// frame width</span></td></tr><tr><td class="number">19</td><td>  <span class="k1">if</span><span class="k2">(</span>data_prop <span class="k3">!</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/empty_string" target="_blank"><span class="a">empty_string</span></a><span class="k2">)</span></td></tr><tr><td class="number">20</td><td>    animation.w <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_54.html" target="_blank">atoi</a><span class="k2">(</span>data_prop<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td>&#160;</td></tr><tr><td class="number">22</td><td>  data_prop <span class="k3">=</span> <a href="http://www.allegro.cc/manual/get_datafile_property" target="_blank"><span class="a">get_datafile_property</span></a><span class="k2">(</span>d, <a href="http://www.allegro.cc/manual/DAT_ID" target="_blank"><span class="a">DAT_ID</span></a><span class="k2">(</span><span class="s">'Y'</span>,<span class="s">'S'</span>,<span class="s">'I'</span>,<span class="s">'Z'</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// frame height</span></td></tr><tr><td class="number">23</td><td>  <span class="k1">if</span><span class="k2">(</span>data_prop <span class="k3">!</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/empty_string" target="_blank"><span class="a">empty_string</span></a><span class="k2">)</span></td></tr><tr><td class="number">24</td><td>    animation.h <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_54.html" target="_blank">atoi</a><span class="k2">(</span>data_prop<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">25</td><td>&#160;</td></tr><tr><td class="number">26</td><td>  data_prop <span class="k3">=</span> <a href="http://www.allegro.cc/manual/get_datafile_property" target="_blank"><span class="a">get_datafile_property</span></a><span class="k2">(</span>d, <a href="http://www.allegro.cc/manual/DAT_ID" target="_blank"><span class="a">DAT_ID</span></a><span class="k2">(</span><span class="s">'F'</span>,<span class="s">'C'</span>,<span class="s">' '</span>,<span class="s">' '</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// frame count</span></td></tr><tr><td class="number">27</td><td>  <span class="k1">if</span><span class="k2">(</span>data_prop <span class="k3">!</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/empty_string" target="_blank"><span class="a">empty_string</span></a><span class="k2">)</span></td></tr><tr><td class="number">28</td><td>    animation.frame_count <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_54.html" target="_blank">atoi</a><span class="k2">(</span>data_prop<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>  data_prop <span class="k3">=</span> <a href="http://www.allegro.cc/manual/get_datafile_property" target="_blank"><span class="a">get_datafile_property</span></a><span class="k2">(</span>d, <a href="http://www.allegro.cc/manual/DAT_ID" target="_blank"><span class="a">DAT_ID</span></a><span class="k2">(</span><span class="s">'T'</span>,<span class="s">'B'</span>,<span class="s">'F'</span>,<span class="s">'A'</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// speed or Time Before Frame Advance (in one-sevenths of a second)</span></td></tr><tr><td class="number">31</td><td>  <span class="k1">if</span><span class="k2">(</span>data_prop <span class="k3">!</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/empty_string" target="_blank"><span class="a">empty_string</span></a><span class="k2">)</span></td></tr><tr><td class="number">32</td><td>    animation.frame_speed <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_54.html" target="_blank">atoi</a><span class="k2">(</span>data_prop<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>  data_prop <span class="k3">=</span> <a href="http://www.allegro.cc/manual/get_datafile_property" target="_blank"><span class="a">get_datafile_property</span></a><span class="k2">(</span>d, <a href="http://www.allegro.cc/manual/DAT_ID" target="_blank"><span class="a">DAT_ID</span></a><span class="k2">(</span><span class="s">'X'</span>,<span class="s">'P'</span>,<span class="s">'O'</span>,<span class="s">'S'</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// x-origin</span></td></tr><tr><td class="number">35</td><td>  <span class="k1">if</span><span class="k2">(</span>data_prop <span class="k3">!</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/empty_string" target="_blank"><span class="a">empty_string</span></a><span class="k2">)</span></td></tr><tr><td class="number">36</td><td>    animation.xorigin <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_54.html" target="_blank">atoi</a><span class="k2">(</span>data_prop<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td>&#160;</td></tr><tr><td class="number">38</td><td>  data_prop <span class="k3">=</span> <a href="http://www.allegro.cc/manual/get_datafile_property" target="_blank"><span class="a">get_datafile_property</span></a><span class="k2">(</span>d, <a href="http://www.allegro.cc/manual/DAT_ID" target="_blank"><span class="a">DAT_ID</span></a><span class="k2">(</span><span class="s">'Y'</span>,<span class="s">'P'</span>,<span class="s">'O'</span>,<span class="s">'S'</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// y-origin</span></td></tr><tr><td class="number">39</td><td>  <span class="k1">if</span><span class="k2">(</span>data_prop <span class="k3">!</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/empty_string" target="_blank"><span class="a">empty_string</span></a><span class="k2">)</span></td></tr><tr><td class="number">40</td><td>    animation.yorigin <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_54.html" target="_blank">atoi</a><span class="k2">(</span>data_prop<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td>&#160;</td></tr><tr><td class="number">42</td><td>  <span class="k1">for</span><span class="k2">(</span>x<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>x<span class="k3">&lt;</span>animation.frame_count<span class="k2">;</span>x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">43</td><td>    <span class="c">/* create the rle sprite from a sub-bitmap of a image containing</span></td></tr><tr><td class="number">44</td><td><span class="c">    all the animations in a film strip */</span></td></tr><tr><td class="number">45</td><td>    animation.anim_data.push_back<span class="k2">(</span> <a href="http://www.allegro.cc/manual/get_rle_sprite" target="_blank"><span class="a">get_rle_sprite</span></a><span class="k2">(</span> <a href="http://www.allegro.cc/manual/create_sub_bitmap" target="_blank"><span class="a">create_sub_bitmap</span></a><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="k2">)</span>d-&gt;dat, x<span class="k3">*</span>animation.w, <span class="n">0</span>, animation.w, animation.h <span class="k2">)</span> <span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span> </td></tr><tr><td class="number">46</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">47</td><td>&#160;</td></tr><tr><td class="number">48</td><td>  <span class="c">// store the pointer to the animation data in the vector</span></td></tr><tr><td class="number">49</td><td>  animations.push_back<span class="k2">(</span><span class="k3">&amp;</span>animation<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">50</td><td>&#160;</td></tr><tr><td class="number">51</td><td>  <span class="k1">return</span><span class="k2">;</span></td></tr><tr><td class="number">52</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>


If you need to see the rest of the code it is has been updated, and is here:<br /><a href="http://www.freewebs.com/ikari734/Sprite_class.zip">http://www.freewebs.com/ikari734/Sprite_class.zip</a></p><p>If there is anything more i should change, please let me know.</p><p>cheers, and I&#39;ll put your name in the credits.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (The Master)</author>
		<pubDate>Tue, 12 Sep 2006 17:58:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
animation.anim_data.push_back( get_rle_sprite( create_sub_bitmap( (BITMAP*)d-&gt;dat, x*animation.w, 0, animation.w, animation.h ) ) );
</p></div></div><p>Holy memory leak batman <img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" /></p><p>as for the name problem.. what does your animation class/struct look like? is &quot;name&quot; allocated some space, statically, dynamically?</p><p>edit: I looked at your source, oddly I didn&#39;t see anything interesting, but you may want to check to see if you&#39;re overwriting some memory somewhere..
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Wed, 13 Sep 2006 11:12:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>As an aside, since this doesn&#39;t seem to be a problem with Allegro, could a friendly moderator move the topic to programming questions?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Evert)</author>
		<pubDate>Wed, 13 Sep 2006 11:16:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>OK, let me take some time to explain the logic behind some of my programming decisions:</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
animation.anim_data.push_back( get_rle_sprite( create_sub_bitmap( (BITMAP*)d-&gt;dat, x*animation.w, 0, animation.w, animation.h ) ) );</p><p>Holy memory leak batman
</p></div></div><p>

I know this is a dodgy memory leak. However, if I created a variable for the bitmap and the rle sprite, get the sub-bitmap, get the rle sprite from the sub-bitmap, and then add it to the RLE_SPRITE vector, it would store a pointer to the data right? If i were to reuse the rle_sprite or bitmap variables again, changing the data they contain, i would also be changing the data that would be percieved from reading the vector later on, would I not? If the vector contains pointers to the data and not actually the data itself, that is. Even still, destroying RLE_SPRITE or BITMAP structures inside a loop would be a bad idea as I&#39;d have runtime exceptions all over the place. So as to avoid screwing up the information later on, I chose to do this as there would be no variables i would need to clear or destroy in a for loop or while loop (see the code). I have also considered using malloc instead of a vector for the RLE_SPRITE array, and even experimented with ZERO_SIZE_ARRAY, but when the program tries to read the information from the array, it returns a null reference exeption, always at the same place in the rle.inl file. I know it has no problem with Allegro, the pointers are just screwey in MY code. I don&#39;t think the malloc function works properly on my computer.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
I looked at your source, oddly I didn&#39;t see anything interesting, but you may want to check to see if you&#39;re overwriting some memory somewhere..
</p></div></div><p>

I just wanted to check if it is a bad idea to use a vector within a vector, like i&#39;ve done. if so, would it be better to make the memory read-only after loading, to prevent any screw-ups? Is that even possible?</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
As an aside, since this doesn&#39;t seem to be a problem with Allegro, could a friendly moderator move the topic to programming questions?
</p></div></div><p>

I agree this isn&#39;t a problem with Allegro, however, RLE_SPRITE structures have never been very cooperative with me, and i was wondering if anyone else had ever had this problem. But, Mr.Moderator, by all means move this wherever you like. I&#39;m just after the answers.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
as for the name problem.. what does your animation class/struct look like? is &quot;name&quot; allocated some space, statically, dynamically?
</p></div></div><p>

This is the anim_t struct for holding the sprite information:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">struct</span> anim_t <span class="k2">{</span>
  <span class="k1">char</span> name<span class="k2">[</span><span class="n">20</span><span class="k2">]</span><span class="k2">;</span>
  <span class="k1">int</span> frame_speed<span class="k2">;</span>
  <span class="k1">int</span> frame_count<span class="k2">;</span>
  <span class="k1">int</span> xorigin, yorigin<span class="k2">;</span>
  <span class="k1">int</span> w, h<span class="k2">;</span>
  std::vector<span class="k3">&lt;</span><a href="http://www.allegro.cc/manual/RLE_SPRITE" target="_blank"><span class="a">RLE_SPRITE</span></a><span class="k3">*</span><span class="k3">&gt;</span> anim_data<span class="k2">;</span>
<span class="k2">}</span><span class="k2">;</span>
</pre></div></div><p>

As you can see, name is a set 20 character long string. All the rest are integers except for the anim_data. I would say that the vector storage of the RLE_SPRITE works. However, when the entire anim_t structure is written into the animation vector, a problem occurs. Either that or the whole thing screws up from the start at which point i would need to start writing the loading code from scratch, which makes up the bulk of the class. But hey, if I must, I must.</p><p>Just for the sake of explanation, i am incredibly bad at producing optimised code, and pretty much a hobbyist programmer. I&#39;ve very little idea of how any of these things work except what I read in tutorials, and those ones only deal with integer and char vectors. I know how to use vectors, however this has never come up before.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (The Master)</author>
		<pubDate>Wed, 13 Sep 2006 17:40:33 +0000</pubDate>
	</item>
</rss>
