<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:www.nabble.com,2006:forum-3844</id>
	<title>Nabble - xine-codec-devel</title>
	<updated>2007-12-14T09:19:51Z</updated>
	<link rel="self" type="application/atom+xml" href="http://www.nabble.com/xine-codec-devel-f3844.xml" />
	<link rel="alternate" type="text/html" href="http://www.nabble.com/xine-codec-devel-f3844.html" />
	<subtitle type="html">Mailing list archive for xine-codec-devel</subtitle>
	
<entry>
	<id>tag:www.nabble.com,2006:post-14340325</id>
	<title>Re: Looking for codec for mutiple description video coding</title>
	<published>2007-12-14T09:19:51Z</published>
	<updated>2007-12-14T09:19:51Z</updated>
	<author>
		<name>Mike Melanson</name>
	</author>
	<content type="html">Chen Tan wrote:
&lt;br&gt;&amp;gt; xine-codec-devel，您好！
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;I am looking out for &amp;nbsp;a MDC codec.
&lt;br&gt;&amp;gt; Any information will be of great help.
&lt;br&gt;&lt;br&gt;I have never heard of this codec. A Google search produces pages of more
&lt;br&gt;people asking for the codec. Do you have samples encoded in this format?
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -Mike Melanson
&lt;br&gt;&lt;br&gt;&lt;br /&gt;-------------------------------------------------------------------------
&lt;br&gt;SF.Net email is sponsored by:
&lt;br&gt;Check out the new SourceForge.net Marketplace.
&lt;br&gt;It's the best place to buy or sell services
&lt;br&gt;for just about anything Open Source.
&lt;br&gt;&lt;a href=&quot;http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace&lt;/a&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;xine-codec-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=14340325&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xine-codec-devel@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/xine-codec-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/xine-codec-devel&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Looking-for-codec-for-mutiple-description-video-coding-tp14340244p14340325.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-14340244</id>
	<title>Looking for codec for mutiple description video coding</title>
	<published>2007-12-14T04:37:57Z</published>
	<updated>2007-12-14T04:37:57Z</updated>
	<author>
		<name>Chen Tan</name>
	</author>
	<content type="html">xine-codec-devel，您好！
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;I am looking out for &amp;nbsp;a MDC codec.
&lt;br&gt;Any information will be of great help.
&lt;br&gt;thanks 　　
&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;				
&lt;br&gt;　　　　　　　　　　　　　　Chen Tan
&lt;br&gt;　　　　　　　　　　　　　　&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=14340244&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;chentan@...&lt;/a&gt;
&lt;br&gt;　　　　　　　　　　　　　　　　　2007-12-14
&lt;br&gt;&lt;br /&gt;-------------------------------------------------------------------------
&lt;br&gt;SF.Net email is sponsored by:
&lt;br&gt;Check out the new SourceForge.net Marketplace.
&lt;br&gt;It's the best place to buy or sell services
&lt;br&gt;for just about anything Open Source.
&lt;br&gt;&lt;a href=&quot;http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace&lt;/a&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;xine-codec-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=14340244&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xine-codec-devel@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/xine-codec-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/xine-codec-devel&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Looking-for-codec-for-mutiple-description-video-coding-tp14340244p14340244.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-13820810</id>
	<title>Re: Mine type:  audio/vnd.octel.sbc</title>
	<published>2007-11-18T08:33:43Z</published>
	<updated>2007-11-18T08:33:43Z</updated>
	<author>
		<name>Alex Beregszaszi</name>
	</author>
	<content type="html">On Mon, 2007-11-12 at 17:18 +0000, James Courtier-Dutton wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Benjamin Larsson wrote:
&lt;br&gt;&amp;gt; &amp;gt; James Courtier-Dutton wrote:
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Are there any linux programs that can play this audio format?
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; It is used on mobile phone messaging systems. E.g. vodafone.net in the UK.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; audio/vnd.octel.sbc
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; It could be the same as Lernout &amp; Hauspie SBC. Please supply a sample.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; MvH
&lt;br&gt;&amp;gt; &amp;gt; Benjamin Larsson
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; See attachments.
&lt;br&gt;&amp;gt; the .sbc file, and a .wav of the same sound.
&lt;/div&gt;&lt;br&gt;This is similar to what Vodafone Hungary uses. It is definitely not the
&lt;br&gt;Blutooth SBC as that has a syncword 0x9C as the first byte, neither your
&lt;br&gt;or my sample contain that.
&lt;br&gt;&lt;br&gt;Here is what I have found out:
&lt;br&gt;&lt;a href=&quot;http://wiki.multimedia.cx/index.php?title=Octel_SBC&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://wiki.multimedia.cx/index.php?title=Octel_SBC&lt;/a&gt;&lt;br&gt;&lt;br&gt;--
&lt;br&gt;Alex
&lt;br&gt;&lt;br&gt;&lt;br&gt;-------------------------------------------------------------------------
&lt;br&gt;This SF.net email is sponsored by: Microsoft
&lt;br&gt;Defy all challenges. Microsoft(R) Visual Studio 2005.
&lt;br&gt;&lt;a href=&quot;http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xine-codec-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=13820810&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xine-codec-devel@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/xine-codec-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/xine-codec-devel&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Mine-type%3A--audio-vnd.octel.sbc-tp13696110p13820810.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-13709817</id>
	<title>Re: Mine type:  audio/vnd.octel.sbc</title>
	<published>2007-11-12T09:18:44Z</published>
	<updated>2007-11-12T09:18:44Z</updated>
	<author>
		<name>James Courtier-Dutton</name>
	</author>
	<content type="html">Benjamin Larsson wrote:
&lt;div class='shrinkable-quote'&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; James Courtier-Dutton wrote:
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Are there any linux programs that can play this audio format?
&lt;br&gt;&amp;gt;&amp;gt; It is used on mobile phone messaging systems. E.g. vodafone.net in the UK.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; audio/vnd.octel.sbc
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; It could be the same as Lernout &amp; Hauspie SBC. Please supply a sample.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; MvH
&lt;br&gt;&amp;gt; Benjamin Larsson
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;/div&gt;&lt;/div&gt;See attachments.
&lt;br&gt;the .sbc file, and a .wav of the same sound.
&lt;br&gt;&lt;br&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;-------------------------------------------------------------------------
&lt;br&gt;This SF.net email is sponsored by: Splunk Inc.
&lt;br&gt;Still grepping through log files to find problems? &amp;nbsp;Stop.
&lt;br&gt;Now Search log events and configuration files using AJAX and a browser.
&lt;br&gt;Download your FREE copy of Splunk now &amp;gt;&amp;gt; &lt;a href=&quot;http://get.splunk.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://get.splunk.com/&lt;/a&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;xine-codec-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=13709817&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xine-codec-devel@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/xine-codec-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/xine-codec-devel&lt;/a&gt;&lt;br&gt;&lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://www.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;music.sbc&lt;/strong&gt; (54K) &lt;a href=&quot;http://www.nabble.com/attachment/13709817/0/music.sbc&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;br/&gt;&lt;img src=&quot;http://www.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;music.wav&lt;/strong&gt; (218K) &lt;a href=&quot;http://www.nabble.com/attachment/13709817/1/music.wav&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Mine-type%3A--audio-vnd.octel.sbc-tp13696110p13709817.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-13709152</id>
	<title>Re: Mine type:  audio/vnd.octel.sbc</title>
	<published>2007-11-12T03:04:31Z</published>
	<updated>2007-11-12T03:04:31Z</updated>
	<author>
		<name>Benjamin Larsson-2</name>
	</author>
	<content type="html">James Courtier-Dutton wrote:
&lt;br&gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Are there any linux programs that can play this audio format?
&lt;br&gt;&amp;gt; It is used on mobile phone messaging systems. E.g. vodafone.net in the UK.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; audio/vnd.octel.sbc
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;It could be the same as Lernout &amp; Hauspie SBC. Please supply a sample.
&lt;br&gt;&lt;br&gt;MvH
&lt;br&gt;Benjamin Larsson
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-------------------------------------------------------------------------
&lt;br&gt;This SF.net email is sponsored by: Splunk Inc.
&lt;br&gt;Still grepping through log files to find problems? &amp;nbsp;Stop.
&lt;br&gt;Now Search log events and configuration files using AJAX and a browser.
&lt;br&gt;Download your FREE copy of Splunk now &amp;gt;&amp;gt; &lt;a href=&quot;http://get.splunk.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://get.splunk.com/&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xine-codec-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=13709152&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xine-codec-devel@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/xine-codec-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/xine-codec-devel&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Mine-type%3A--audio-vnd.octel.sbc-tp13696110p13709152.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-13696110</id>
	<title>Mine type:  audio/vnd.octel.sbc</title>
	<published>2007-11-11T13:28:49Z</published>
	<updated>2007-11-11T13:28:49Z</updated>
	<author>
		<name>James Courtier-Dutton-2</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;Are there any linux programs that can play this audio format?
&lt;br&gt;It is used on mobile phone messaging systems. E.g. vodafone.net in the UK.
&lt;br&gt;&lt;br&gt;audio/vnd.octel.sbc
&lt;br&gt;&lt;br&gt;-------------------------------------------------------------------------
&lt;br&gt;This SF.net email is sponsored by: Splunk Inc.
&lt;br&gt;Still grepping through log files to find problems? &amp;nbsp;Stop.
&lt;br&gt;Now Search log events and configuration files using AJAX and a browser.
&lt;br&gt;Download your FREE copy of Splunk now &amp;gt;&amp;gt; &lt;a href=&quot;http://get.splunk.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://get.splunk.com/&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xine-codec-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=13696110&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xine-codec-devel@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/xine-codec-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/xine-codec-devel&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Mine-type%3A--audio-vnd.octel.sbc-tp13696110p13696110.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-9325238</id>
	<title>Looking for tips on reverse engineering unknown audio formats</title>
	<published>2007-03-05T19:36:58Z</published>
	<updated>2007-03-05T19:36:58Z</updated>
	<author>
		<name>Jonathan Wilson-7</name>
	</author>
	<content type="html">I have a game (Electronic Arts Command &amp; Conquer 3) which is using a custom 
&lt;br&gt;audio format. There is a 16 byte header attached with (among other things) 
&lt;br&gt;a sample rate of 48000 (on the sample files we are looking at) in it as 
&lt;br&gt;well as a field that corresponds to the size in bytes of the &amp;nbsp;followed by 
&lt;br&gt;the actual audio data. I have tried to import it into a wave editor with 
&lt;br&gt;&amp;quot;import raw&amp;quot; using all kinds of options (raw audio, ADPCM etc), none of 
&lt;br&gt;which seem to produce anything other than noise.
&lt;br&gt;&lt;br&gt;It looks like the actual audio data is broken up in to 76 byte blocks, with 
&lt;br&gt;a 16 byte header of some kind being used as input into the codec with a 60 
&lt;br&gt;byte block of actual sample data. The decoded audio data is 2 bytes per 
&lt;br&gt;sample, with 80 samples for each of 2 channels in every 60 byte block (i.e. 
&lt;br&gt;512 bytes of decoded data). Further analysis has not been possible because 
&lt;br&gt;the decode function is highly convoluted and is using MMX/SSE (something I 
&lt;br&gt;have no knowledge about)
&lt;br&gt;&lt;br&gt;There is mention of &amp;quot;this game uses MP3 technology&amp;quot; in the readme file but 
&lt;br&gt;I don't believe these particular audio files are MP3 compressed
&lt;br&gt;&lt;br&gt;Does anyone have any tips how to figure out what sort of audio it is?
&lt;br&gt;Would it be worth my time making samples files encoded with this codec 
&lt;br&gt;available? (for one of the sample archives that seem to be floating around 
&lt;br&gt;for example)
&lt;br&gt;&lt;br&gt;-------------------------------------------------------------------------
&lt;br&gt;Take Surveys. Earn Cash. Influence the Future of IT
&lt;br&gt;Join SourceForge.net's Techsay panel and you'll get the chance to share your
&lt;br&gt;opinions on IT &amp; business topics through brief surveys-and earn cash
&lt;br&gt;&lt;a href=&quot;http://www.techsay.com/default.php?page=join.php&amp;p=sourceforge&amp;CID=DEVDEV&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.techsay.com/default.php?page=join.php&amp;p=sourceforge&amp;CID=DEVDEV&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xine-codec-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=9325238&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xine-codec-devel@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/xine-codec-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/xine-codec-devel&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Looking-for-tips-on-reverse-engineering-unknown-audio-formats-tp9325238p9325238.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-6128796</id>
	<title>Who was making that midi decoder?</title>
	<published>2006-09-03T19:42:31Z</published>
	<updated>2006-09-03T19:42:31Z</updated>
	<author>
		<name>twoeyedhuman</name>
	</author>
	<content type="html">I'm trying to figure out where things are in terms of making a midi 
&lt;br&gt;decoder for xine lib.
&lt;br&gt;&lt;br&gt;I remember somebody once said on this list (or another xine list) that 
&lt;br&gt;they were making a midi decoder for xine lib.
&lt;br&gt;&lt;br&gt;Does anybody know who is making that midi decoder?
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-- 
&lt;br&gt;-TwoEyedHuman
&lt;br&gt;tech support d00d at Glenkirk
&lt;br&gt;www.glenkirk.org &amp;lt;&lt;a href=&quot;http://www.glenkirk.org&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.glenkirk.org&lt;/a&gt;&amp;gt;
&lt;br&gt;my home: greenguy41.csoft.net &amp;lt;&lt;a href=&quot;http://greenguy41.csoft.net&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://greenguy41.csoft.net&lt;/a&gt;&amp;gt;
&lt;br&gt;linux user 396666
&lt;br&gt;&lt;br&gt;&lt;br&gt;-------------------------------------------------------------------------
&lt;br&gt;Using Tomcat but need to do more? Need to support web services, security?
&lt;br&gt;Get stuff done quickly with pre-integrated technology to make your job easier
&lt;br&gt;Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
&lt;br&gt;&lt;a href=&quot;http://sel.as-us.falkag.net/sel?cmd=lnk&amp;kid=120709&amp;bid=263057&amp;dat=121642&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://sel.as-us.falkag.net/sel?cmd=lnk&amp;kid=120709&amp;bid=263057&amp;dat=121642&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xine-codec-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=6128796&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xine-codec-devel@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/xine-codec-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/xine-codec-devel&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Who-was-making-that-midi-decoder--tp6128796p6128796.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-6033419</id>
	<title>Re: WMV3 VfW Decoder?</title>
	<published>2006-08-29T00:10:45Z</published>
	<updated>2006-08-29T00:10:45Z</updated>
	<author>
		<name>Benjamin Larsson</name>
	</author>
	<content type="html">Hi.
&lt;br&gt;&lt;br&gt;Kostya skrev:
&lt;br&gt;&amp;gt; Hello, does anybody know if $subj exists at all?
&lt;br&gt;&amp;gt; If so, please point to it, I need it to make my decoder work
&lt;br&gt;&amp;gt; with old WMV9 samples (and possibly also reverse-engineer those
&lt;br&gt;&amp;gt; J-frames from WMV2/8, they are related).
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I tried Linspire libwmv3.so but it looks not supporting them and
&lt;br&gt;&amp;gt; DMO decoder is too hard to me - I got lost in those COM interfaces.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&lt;a href=&quot;http://www.microsoft.com/japan/windows/windowsmedia/9series/codecs/vcm.aspx&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.microsoft.com/japan/windows/windowsmedia/9series/codecs/vcm.aspx&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Is that what you are searching for ?
&lt;br&gt;&lt;br&gt;MvH
&lt;br&gt;Benjamin Larsson
&lt;br&gt;&lt;br&gt;-------------------------------------------------------------------------
&lt;br&gt;Using Tomcat but need to do more? Need to support web services, security?
&lt;br&gt;Get stuff done quickly with pre-integrated technology to make your job easier
&lt;br&gt;Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
&lt;br&gt;&lt;a href=&quot;http://sel.as-us.falkag.net/sel?cmd=lnk&amp;kid=120709&amp;bid=263057&amp;dat=121642&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://sel.as-us.falkag.net/sel?cmd=lnk&amp;kid=120709&amp;bid=263057&amp;dat=121642&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xine-codec-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=6033419&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xine-codec-devel@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/xine-codec-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/xine-codec-devel&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/WMV3-VfW-Decoder--tp6032708p6033419.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-6032708</id>
	<title>WMV3 VfW Decoder?</title>
	<published>2006-08-28T22:24:28Z</published>
	<updated>2006-08-28T22:24:28Z</updated>
	<author>
		<name>Kostya-6</name>
	</author>
	<content type="html">Hello, does anybody know if $subj exists at all?
&lt;br&gt;If so, please point to it, I need it to make my decoder work
&lt;br&gt;with old WMV9 samples (and possibly also reverse-engineer those
&lt;br&gt;J-frames from WMV2/8, they are related).
&lt;br&gt;&lt;br&gt;I tried Linspire libwmv3.so but it looks not supporting them and
&lt;br&gt;DMO decoder is too hard to me - I got lost in those COM interfaces.
&lt;br&gt;&lt;br&gt;-------------------------------------------------------------------------
&lt;br&gt;Using Tomcat but need to do more? Need to support web services, security?
&lt;br&gt;Get stuff done quickly with pre-integrated technology to make your job easier
&lt;br&gt;Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
&lt;br&gt;&lt;a href=&quot;http://sel.as-us.falkag.net/sel?cmd=lnk&amp;kid=120709&amp;bid=263057&amp;dat=121642&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://sel.as-us.falkag.net/sel?cmd=lnk&amp;kid=120709&amp;bid=263057&amp;dat=121642&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xine-codec-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=6032708&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xine-codec-devel@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/xine-codec-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/xine-codec-devel&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/WMV3-VfW-Decoder--tp6032708p6032708.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-5667520</id>
	<title>Re: codecs for amd64?</title>
	<published>2006-08-05T14:52:25Z</published>
	<updated>2006-08-05T14:52:25Z</updated>
	<author>
		<name>Diego Biurrun</name>
	</author>
	<content type="html">On Sat, Aug 05, 2006 at 10:28:58PM +0200, Pool, LC, Mr &amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=5667520&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;14117614@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; [..] I'm not a windows user [..]
&lt;br&gt;&lt;br&gt;.. but you send mails with Exchange ..
&lt;br&gt;&lt;br&gt;&amp;gt; Now the question is:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 1.) Why is there no development of win64 codecs &amp;nbsp;for linux?
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 2.) How can I get the source for myself and compile the 64-bit dll's myself?
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I love xine, and I do from time to time use mplayer...
&lt;br&gt;&lt;br&gt;Time to compile a CVS snapshot of xine or a Subversion snapshot of
&lt;br&gt;MPlayer. &amp;nbsp;You should have a pleasant surprise.
&lt;br&gt;&lt;br&gt;Diego
&lt;br&gt;&lt;br&gt;&lt;br&gt;-------------------------------------------------------------------------
&lt;br&gt;Take Surveys. Earn Cash. Influence the Future of IT
&lt;br&gt;Join SourceForge.net's Techsay panel and you'll get the chance to share your
&lt;br&gt;opinions on IT &amp; business topics through brief surveys -- and earn cash
&lt;br&gt;&lt;a href=&quot;http://www.techsay.com/default.php?page=join.php&amp;p=sourceforge&amp;CID=DEVDEV&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.techsay.com/default.php?page=join.php&amp;p=sourceforge&amp;CID=DEVDEV&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xine-codec-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=5667520&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xine-codec-devel@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/xine-codec-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/xine-codec-devel&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/codecs-for-amd64--tp5667429p5667520.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-5667429</id>
	<title>codecs for amd64?</title>
	<published>2006-08-05T14:28:58Z</published>
	<updated>2006-08-05T14:28:58Z</updated>
	<author>
		<name>Pool, LC, Mr &lt;14117614@sun.ac.za&gt;</name>
	</author>
	<content type="html">Hi...
&lt;br&gt;&lt;br&gt;I'm a debian user and my distro is a &amp;quot;pure&amp;quot; 64-bit. As I've found out, my 64-bit machine cannot play win32 codecs, or specifically wmv codecs.
&lt;br&gt;&lt;br&gt;Now normally this is not a problem, but the fact that I've got some assignments that require the use of a win32 wmv player. I'm not a windows user, and the debian work around of using chroot and basically having two OS's running on one machine is not really what I had in mind in buying a 64-bit machine.
&lt;br&gt;&lt;br&gt;Now the question is:
&lt;br&gt;&lt;br&gt;1.) Why is there no development of win64 codecs &amp;nbsp;for linux?
&lt;br&gt;&lt;br&gt;2.) How can I get the source for myself and compile the 64-bit dll's myself?
&lt;br&gt;&lt;br&gt;I love xine, and I do from time to time use mplayer...
&lt;br&gt;&lt;br&gt;Any help on this matter would be greatly appreciated. 
&lt;br&gt;&lt;br&gt;What I've done so far is to recompile xine to 32-bit and run this in a chroot 32-it environment.
&lt;br&gt;This means my system is not really configured properly and I have trouble now with getting regular updates from my mirror, here at uni...
&lt;br&gt;&lt;br&gt;Thanks for the time...
&lt;br&gt;&lt;br&gt;&lt;br&gt;He who has a why to live can bear with almost any how.
&lt;br&gt;Friedrich Nietzsche
&lt;br&gt;&lt;br&gt;&lt;br&gt;-------------------------------------------------------------------------
&lt;br&gt;Take Surveys. Earn Cash. Influence the Future of IT
&lt;br&gt;Join SourceForge.net's Techsay panel and you'll get the chance to share your
&lt;br&gt;opinions on IT &amp; business topics through brief surveys -- and earn cash
&lt;br&gt;&lt;a href=&quot;http://www.techsay.com/default.php?page=join.php&amp;p=sourceforge&amp;CID=DEVDEV&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.techsay.com/default.php?page=join.php&amp;p=sourceforge&amp;CID=DEVDEV&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xine-codec-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=5667429&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xine-codec-devel@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/xine-codec-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/xine-codec-devel&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/codecs-for-amd64--tp5667429p5667429.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-2108325</id>
	<title>Re: TrueSpeech</title>
	<published>2005-12-27T10:29:03Z</published>
	<updated>2005-12-27T10:29:03Z</updated>
	<author>
		<name>Benjamin Larsson</name>
	</author>
	<content type="html">Kostya wrote:
&lt;br&gt;&lt;br&gt;&amp;gt; Here is my implementation of DSP Group TrueSpeech decoder. It is not
&lt;br&gt;&amp;gt; ideal, still something can be heard. Decoder decodes stream.dump (can
&lt;br&gt;&amp;gt; be created with mplayer -dumpaudio) into decoded.raw (raw format, 8000
&lt;br&gt;&amp;gt; Hz, 16-bit, mono). Compile with &amp;quot;gcc ts_decoder.c&amp;quot;
&lt;br&gt;&amp;gt; Please look into code and point to similar functions in other codecs
&lt;br&gt;&amp;gt; (I suspect something is wrong in my Correlate() function and somewhere
&lt;br&gt;&amp;gt; else too). Thanks.
&lt;br&gt;&lt;br&gt;Hi, do you have any samples and the dll used ? A debug run with Ollydbg
&lt;br&gt;should weed out some of the bugs.
&lt;br&gt;&lt;br&gt;MvH
&lt;br&gt;Benjamin Larsson
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;&amp;quot;incorrect information&amp;quot; is an oxymoron. Information is, by definition, factual, correct.
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-------------------------------------------------------
&lt;br&gt;This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
&lt;br&gt;for problems? &amp;nbsp;Stop! &amp;nbsp;Download the new AJAX search engine that makes
&lt;br&gt;searching your log files as easy as surfing the &amp;nbsp;web. &amp;nbsp;DOWNLOAD SPLUNK!
&lt;br&gt;&lt;a href=&quot;http://ads.osdn.com/?ad_id=7637&amp;alloc_id=16865&amp;op=click&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://ads.osdn.com/?ad_id=7637&amp;alloc_id=16865&amp;op=click&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xine-codec-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=2108325&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xine-codec-devel@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/xine-codec-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/xine-codec-devel&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/TrueSpeech-tp2102006p2108325.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-2102006</id>
	<title>TrueSpeech</title>
	<published>2005-12-26T20:24:55Z</published>
	<updated>2005-12-26T20:24:55Z</updated>
	<author>
		<name>Kostya-6</name>
	</author>
	<content type="html">Here is my implementation of DSP Group TrueSpeech decoder. It is not 
&lt;br&gt;ideal, still something can be heard. Decoder decodes stream.dump (can be 
&lt;br&gt;created with mplayer -dumpaudio) into decoded.raw (raw format, 8000 Hz, 
&lt;br&gt;16-bit, mono). Compile with &amp;quot;gcc ts_decoder.c&amp;quot;
&lt;br&gt;Please look into code and point to similar functions in other codecs (I 
&lt;br&gt;suspect something is wrong in my Correlate() function and somewhere else 
&lt;br&gt;too). Thanks.
&lt;br&gt;&lt;br /&gt; &lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://www.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;true_speech.tgz&lt;/strong&gt; (6K) &lt;a href=&quot;http://www.nabble.com/attachment/2102006/0/true_speech.tgz&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/TrueSpeech-tp2102006p2102006.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-2051332</id>
	<title>Re: Table extractor tool</title>
	<published>2005-12-21T13:55:27Z</published>
	<updated>2005-12-21T13:55:27Z</updated>
	<author>
		<name>Mike Melanson</name>
	</author>
	<content type="html">Michael Niedermayer wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; On Tue, Dec 20, 2005 at 07:55:44PM +0000, Benjamin Larsson wrote:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;Hi, I have meant to release this tool for some time now but I've been
&lt;br&gt;&amp;gt;&amp;gt;lazy. Anyway it's called elftractor and can extract tables from elf
&lt;br&gt;&amp;gt;&amp;gt;executables with the info from the symbol tables. To use it just run it
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; hmm, that remainds me of my vlc-leech tool which will search for vlc and
&lt;br&gt;&amp;gt; scantables bruteforce style, it will find plenty of false positives and is 
&lt;br&gt;&amp;gt; slow but maybe its usefull for someone
&lt;/div&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sounds like a good topic for a blog post...
&lt;br&gt;-- 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -Mike Melanson
&lt;br&gt;&lt;br&gt;&lt;br&gt;-------------------------------------------------------
&lt;br&gt;This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
&lt;br&gt;for problems? &amp;nbsp;Stop! &amp;nbsp;Download the new AJAX search engine that makes
&lt;br&gt;searching your log files as easy as surfing the &amp;nbsp;web. &amp;nbsp;DOWNLOAD SPLUNK!
&lt;br&gt;&lt;a href=&quot;http://ads.osdn.com/?ad_id=7637&amp;alloc_id=16865&amp;op=click&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://ads.osdn.com/?ad_id=7637&amp;alloc_id=16865&amp;op=click&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xine-codec-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=2051332&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xine-codec-devel@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/xine-codec-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/xine-codec-devel&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Table-extractor-tool-tp2031566p2051332.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-2051306</id>
	<title>Re: Table extractor tool</title>
	<published>2005-12-21T13:54:21Z</published>
	<updated>2005-12-21T13:54:21Z</updated>
	<author>
		<name>Michael Niedermayer</name>
	</author>
	<content type="html">Hi
&lt;br&gt;&lt;br&gt;On Tue, Dec 20, 2005 at 07:55:44PM +0000, Benjamin Larsson wrote:
&lt;br&gt;&amp;gt; Hi, I have meant to release this tool for some time now but I've been
&lt;br&gt;&amp;gt; lazy. Anyway it's called elftractor and can extract tables from elf
&lt;br&gt;&amp;gt; executables with the info from the symbol tables. To use it just run it
&lt;br&gt;&lt;br&gt;hmm, that remainds me of my vlc-leech tool which will search for vlc and
&lt;br&gt;scantables bruteforce style, it will find plenty of false positives and is 
&lt;br&gt;slow but maybe its usefull for someone
&lt;br&gt;&lt;br&gt;[...]
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Michael
&lt;br&gt;&lt;br /&gt;/*
&lt;br&gt;&amp;nbsp; &amp;nbsp; Copyright (C) 2004 Michael Niedermayer &amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=2051306&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;michaelni@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; This program is free software; you can redistribute it and/or modify
&lt;br&gt;&amp;nbsp; &amp;nbsp; it under the terms of the GNU General Public License as published by
&lt;br&gt;&amp;nbsp; &amp;nbsp; the Free Software Foundation; either version 2 of the License, or
&lt;br&gt;&amp;nbsp; &amp;nbsp; (at your option) any later version.
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; This program is distributed in the hope that it will be useful,
&lt;br&gt;&amp;nbsp; &amp;nbsp; but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;&amp;nbsp; &amp;nbsp; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;&amp;nbsp; &amp;nbsp; GNU General Public License for more details.
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; You should have received a copy of the GNU General Public License
&lt;br&gt;&amp;nbsp; &amp;nbsp; along with this program; if not, write to the Free Software
&lt;br&gt;&amp;nbsp; &amp;nbsp; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA &amp;nbsp;02111-1307 &amp;nbsp;USA
&lt;br&gt;*/
&lt;br&gt;&lt;br&gt;#include &amp;lt;stdio.h&amp;gt;
&lt;br&gt;#include &amp;lt;stdlib.h&amp;gt;
&lt;br&gt;#include &amp;lt;string.h&amp;gt;
&lt;br&gt;#include &amp;lt;inttypes.h&amp;gt;
&lt;br&gt;&lt;br&gt;#define CODE_SPACE (1&amp;lt;&amp;lt;31)
&lt;br&gt;#define MIN(a,b) ((a) &amp;lt; (b) ? (a) : (b))
&lt;br&gt;&lt;br&gt;const uint8_t ff_log2_tab[256]={
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
&lt;br&gt;};
&lt;br&gt;&lt;br&gt;static inline int log2(unsigned int v)
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; int n;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; n = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; if (v &amp; 0xffff0000) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; v &amp;gt;&amp;gt;= 16;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; n += 16;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; if (v &amp; 0xff00) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; v &amp;gt;&amp;gt;= 8;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; n += 8;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; n += ff_log2_tab[v];
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; return n;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;static int read_symbol(uint8_t *b, int size){
&lt;br&gt;&amp;nbsp; &amp;nbsp; if(size==1)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return *b;
&lt;br&gt;&amp;nbsp; &amp;nbsp; else if(size==2)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return *(uint16_t*)b;
&lt;br&gt;&amp;nbsp; &amp;nbsp; else 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return *(uint32_t*)b;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;int main(int argc, char **argv){
&lt;br&gt;&amp;nbsp; &amp;nbsp; FILE *f;
&lt;br&gt;&amp;nbsp; &amp;nbsp; int filesize, size, start, step, index, temp, i;
&lt;br&gt;&amp;nbsp; &amp;nbsp; int size2, start2, step2, index2, table_index;
&lt;br&gt;&amp;nbsp; &amp;nbsp; int last_start, last_table_size, last_size;
&lt;br&gt;&amp;nbsp; &amp;nbsp; uint8_t *buffer;
&lt;br&gt;&amp;nbsp; &amp;nbsp; uint8_t len_table[100000];
&lt;br&gt;&amp;nbsp; &amp;nbsp; int bits_table[100000];
&lt;br&gt;&amp;nbsp; &amp;nbsp; int tables_found=0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; int min_code_count=8;
&lt;br&gt;&amp;nbsp; &amp;nbsp; int max_code_len=31;
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; f= fopen(argv[1], &amp;quot;r&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; if(f==NULL){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fprintf(stderr, &amp;quot;cant open\n&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return -1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; fseek(f, 0, SEEK_END);
&lt;br&gt;&amp;nbsp; &amp;nbsp; filesize= ftell(f);
&lt;br&gt;&amp;nbsp; &amp;nbsp; fseek(f, 0, SEEK_SET);
&lt;br&gt;&amp;nbsp; &amp;nbsp; buffer= malloc(filesize);
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; if(1 != fread(buffer, filesize, 1, f)){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fprintf(stderr, &amp;quot;cant read\n&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return -1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; // scantables
&lt;br&gt;&amp;nbsp; &amp;nbsp; for(start=0; start&amp;lt;filesize; start++){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(size= 1; size &amp;lt;=4; size+=size){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(size2=16; size2&amp;lt;=64; size2+=size2){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int row_size= size2 &amp;lt;= 16 ? 4 : 8;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; uint8_t tab[64];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int trivial=1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; step= size;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; memset(tab, 0, sizeof(tab));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(filesize - start &amp;lt; size2*step)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(table_index= 0; table_index&amp;lt;size2; table_index++){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned int x= read_symbol(buffer+start+table_index*step, size);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(x&amp;gt;=size2)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(x==0 &amp;&amp; table_index!=0 &amp;&amp; table_index!=8 &amp;&amp; size2 == 16)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(x != table_index)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; trivial=0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tab[x]++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(tab[x] &amp;gt; 1)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(table_index&amp;lt;size2 || trivial)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printf(&amp;quot;found possible %dx%d scantable at %X with %2dbit entries\n&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; row_size, size2 / row_size,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; start, 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 8*size
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; );
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(table_index= 0; table_index&amp;lt;size2; table_index++){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int x= read_symbol(buffer+start+table_index*step, size);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printf(&amp;quot;%2d &amp;quot;, x);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(table_index % row_size == row_size-1 || table_index+1 == size2)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printf(&amp;quot;\n&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; last_start= last_table_size= last_size=0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; for(start=0; start&amp;lt;filesize; start++){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(size= 1; size &amp;lt;=4; size+=size){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; step= size;
&lt;br&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for(step=size; step&amp;lt;=2*size; step+=size){ remove and add bit reversed indexing
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int table_size;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(table_size=16384; table_size&amp;gt;=16; table_size&amp;gt;&amp;gt;=1){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int last_x, run, count;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int min_len= 31;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int max_len= 1;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(filesize - start &amp;lt; table_size*step)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; count= 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; run=1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; last_x= read_symbol(buffer+start, size);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(table_index= 1; table_index&amp;lt;=table_size; table_index++){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int x= table_index&amp;lt;table_size ? read_symbol(buffer+start+table_index*step, size)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : last_x+1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(x == last_x){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; run++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }else{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int len;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(run&amp;(run-1))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(table_index % run)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; len= (int)log2(table_size/run);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; len_table[count++]= len;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(len &amp;lt; min_len) min_len= len;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(len &amp;gt; max_len) max_len= len;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; run=1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; last_x= x;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(table_index&amp;lt;=table_size)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(count&amp;lt;min_code_count)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(count &amp;gt; table_size/2)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(min_len == max_len) //flc
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(1&amp;lt;&amp;lt;max_len &amp;lt; table_size) //table could be 50% smaller
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; last_x= read_symbol(buffer+start, size);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(table_index= 1; table_index&amp;lt;table_size; table_index++){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int x= read_symbol(buffer+start+table_index*step, size);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(x != last_x){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(i=0; i&amp;lt;table_index; i++){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int y= read_symbol(buffer+start+i*step, size);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(y == x)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(i&amp;lt;table_index)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; last_x= x;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(table_index&amp;lt;table_size)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(last_start == start &amp;&amp; last_table_size*last_size &amp;gt;= table_size*size) // same or smaller block with larger element size
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printf(&amp;quot;found possible vlc table at %X with %4d %2dbit entries (%3d unique), len=%d/%d id=%d\n&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; start,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; table_size,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 8*size,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; count,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; min_len, max_len,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tables_found
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; );
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(table_index=0; table_index&amp;lt; count; table_index++){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int len= len_table[table_index];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printf(&amp;quot;%3d &amp;quot;, len);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(table_index % 8 == 7 || table_index+1 == count)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printf(&amp;quot;\n&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(table_index=0; table_index&amp;lt; table_size; table_index++){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int x= read_symbol(buffer+start+table_index*step, size);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printf(&amp;quot;%8X &amp;quot;, x);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(table_index % 8 == 7 || table_index+1 == table_size)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printf(&amp;quot;\n&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; last_start=start;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; last_table_size= table_size;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; last_size= size;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; //vlc
&lt;br&gt;&amp;nbsp; &amp;nbsp; for(start=0; start&amp;lt;filesize; start++){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(size= 1; size &amp;lt;=4; size+=size){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(step=size; step&amp;lt;=2*size; step+=size){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int optimal_count=0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int optimal_space, optimal_min_len, optimal_max_len, optimal_table_size, optimal_high_zero[2], optimal_skip_zero, table_index;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned int code_space=0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int count=0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int max_len= 1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int min_len= max_code_len;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int high_zero[2]= {1,1};
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int skip_zero=1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int stats[32];
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(index= start; index+size &amp;lt;= filesize; index+= step){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned int len= read_symbol(buffer+index, size);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; table_index= (index-start)/step;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; len_table[table_index]= len;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(step &amp;gt; size || read_symbol(buffer+index+size, size))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; skip_zero=0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(len){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(len &amp;gt; (unsigned)max_code_len)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; code_space += 1&amp;lt;&amp;lt;(31-len);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(code_space &amp;gt; (unsigned)CODE_SPACE)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(len &amp;gt; max_len) max_len= len;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(len &amp;lt; min_len) min_len= len;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; high_zero[ table_index &amp; 1 ]= 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; temp= CODE_SPACE - code_space;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; count++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(!(temp &amp; (temp-1))){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; optimal_count= count;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; optimal_table_size= table_index+1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; optimal_space= temp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; optimal_min_len= min_len;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; optimal_max_len= max_len;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; optimal_high_zero[0]= high_zero[0];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; optimal_high_zero[1]= high_zero[1];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; optimal_skip_zero= skip_zero;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }else if(index == start)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(optimal_count &amp;lt; min_code_count)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if((unsigned)optimal_space &amp;gt; ((unsigned)CODE_SPACE)/(unsigned)optimal_count)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue;
&lt;br&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if((unsigned)optimal_space &amp;gt; 1U&amp;lt;&amp;lt;(31-optimal_max_len)) //only single zero word
&lt;br&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;continue;
&lt;br&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(optimal_space) 
&lt;br&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;continue;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(optimal_min_len == optimal_max_len) //constant style 2222
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(optimal_min_len+1 == optimal_max_len) //split constant style 333322
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(optimal_high_zero[0] || optimal_high_zero[1] || optimal_skip_zero)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; memset(stats, 0, sizeof(stats));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(i=0; i&amp;lt;optimal_table_size; i++){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int len= len_table[i];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; stats[len]++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(stats[len] &amp;gt; 1 &amp;&amp; len &amp;gt; 0 &amp;&amp; len &amp;lt; optimal_max_len)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(stats[len] &amp;gt; 2 &amp;&amp; len==optimal_max_len)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(i == optimal_table_size &amp;&amp; optimal_min_len==1 &amp;&amp; optimal_max_len==optimal_count) //monotone style 1234
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue;
&lt;br&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(i == optimal_table_size &amp;&amp; optimal_min_len==1 &amp;&amp; optimal_max_len+1==optimal_count) //monotone style 12344
&lt;br&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;continue;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tables_found++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(start2=0; start2&amp;lt;filesize; start2++){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(size2= 1; size2 &amp;lt;=4; size2+=size2){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(step2=size2; step2&amp;lt;=2*size2; step2+=size2){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(size2*step != size*step2) // same interleave
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(step != size &amp;&amp; step != step2) //if interleaved then step must be the same
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(filesize - start2 &amp;lt; optimal_table_size*step2)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(table_index=0; table_index&amp;lt; optimal_table_size; table_index++){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned int bits= read_symbol(buffer+start2+step2*table_index, size2);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int len= len_table[table_index];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; bits_table[table_index]= bits;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(bits &amp;gt;&amp;gt; len)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(optimal_space &amp;&amp; bits == 0) //zero code in zeroless table
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(table_index &amp;lt; optimal_table_size)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(table_index=0; table_index&amp;lt; optimal_table_size; table_index++){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned int bits= read_symbol(buffer+start2+step2*table_index, size2);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int len= len_table[table_index];
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(i=0; i&amp;lt; table_index; i++){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned int bits2= read_symbol(buffer+start2+step2*i, size2);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int min_len= MIN(len_table[table_index], len_table[i]);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(min_len &amp;&amp; bits&amp;gt;&amp;gt;(len - min_len) == bits2&amp;gt;&amp;gt;(len_table[i] - min_len))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(i&amp;lt;table_index)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(table_index &amp;lt; optimal_table_size)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printf(&amp;quot;found possible %s vlc table at %X/%X with %3d %2d/%2dbit entries %f%% waste %d-%d len, id=%d\n&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; optimal_space ? &amp;quot;zeroless&amp;quot; : &amp;quot;optimal&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; start, start2,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; optimal_count,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 8*size, 8*size2,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; optimal_space*100.0 / (float)((unsigned)CODE_SPACE),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; optimal_min_len, optimal_max_len,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tables_found
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; );
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(table_index=0; table_index&amp;lt; optimal_table_size; table_index++){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int bits= bits_table[table_index];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int len= len_table[table_index];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printf(&amp;quot;%3d &amp;quot;, len);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(table_index % 8 == 7 || table_index+1 == optimal_table_size)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printf(&amp;quot;\n&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(table_index=0; table_index&amp;lt; optimal_table_size; table_index++){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int bits= bits_table[table_index];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int len= len_table[table_index];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printf(&amp;quot;%8X &amp;quot;, bits);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(table_index % 8 == 7 || table_index+1 == optimal_table_size)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printf(&amp;quot;\n&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printf(&amp;quot;\n&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;}</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Table-extractor-tool-tp2031566p2051306.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-2031566</id>
	<title>Table extractor tool</title>
	<published>2005-12-20T10:54:45Z</published>
	<updated>2005-12-20T10:54:45Z</updated>
	<author>
		<name>Benjamin Larsson</name>
	</author>
	<content type="html">Hi, I have meant to release this tool for some time now but I've been
&lt;br&gt;lazy. Anyway it's called elftractor and can extract tables from elf
&lt;br&gt;executables with the info from the symbol tables. To use it just run it
&lt;br&gt;with ./elftractor.pl --analyse &amp;quot;file&amp;quot;. A default database file is then
&lt;br&gt;created. This file is a regular textfile that can be edited. After the
&lt;br&gt;database has been edited, just run ./elftractor.pl --generate-tables
&lt;br&gt;&amp;quot;file&amp;quot; to extract the tables from the file. Currently only 1 and 2
&lt;br&gt;dimensional tables can be generated correctly. I've attached one example
&lt;br&gt;db for the indeo4 decoder elf. This file can be found in the all codec
&lt;br&gt;package from mplayerhq.
&lt;br&gt;&lt;br&gt;MvH
&lt;br&gt;Benjamin Larsson
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;&amp;quot;incorrect information&amp;quot; is an oxymoron. Information is, by definition, factual, correct.
&lt;br&gt;&lt;br&gt;&lt;br /&gt;#!/usr/bin/perl
&lt;br&gt;&lt;br&gt;#Argument parser
&lt;br&gt;&lt;br&gt;if (@ARGV){
&lt;br&gt;&amp;nbsp; &amp;nbsp; if ($ARGV[0] eq &amp;quot;--analyse&amp;quot;){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $demange=0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; analyse();
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; if ($ARGV[0] eq &amp;quot;--analyse-demangle&amp;quot;){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $demangle=1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; analyse();
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; if ($ARGV[0] eq &amp;quot;--generate-skeleton&amp;quot;){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; generate_skeleton();
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; if ($ARGV[0] eq &amp;quot;--generate-tables&amp;quot;){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; generate_tables();
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; if ($ARGV[0] eq &amp;quot;--generate-all&amp;quot;){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; generate_tables();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; generate_skeleton();
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;} else{
&lt;br&gt;&amp;nbsp; &amp;nbsp; print &amp;quot;Usage:\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; print &amp;quot;./elftractor.pl [command] binary\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; print &amp;quot;--analyse - analyses and creates a database\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; print &amp;quot;--analyse-demangle - analyse and demangle of function names\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; print &amp;quot;--generate-skeleton - generates code skeleton from database\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; print &amp;quot;--generate-tables - generates datatables from database\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; print &amp;quot;--generate-all - generates tables and function skeleton\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; exit;
&lt;br&gt;}
&lt;br&gt;exit;
&lt;br&gt;&lt;br&gt;sub generate_skeleton
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; #parse the input file
&lt;br&gt;&amp;nbsp; &amp;nbsp; $FILE1 = $ARGV[1];
&lt;br&gt;&amp;nbsp; &amp;nbsp; $ts = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; $tn = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; open(DATAFILE, &amp;quot;&amp;lt;$FILE1.db&amp;quot;) or die &amp;quot;File doesn't exist\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; while ($rad = &amp;lt;DATAFILE&amp;gt;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($rad eq &amp;quot;[functions end]\n&amp;quot;) {$ts = 0;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($ts == 1) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; chomp($rad);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @tmpsplit=split /;/,$rad;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $functions_name[$tn] = $tmpsplit[0];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $functions_address[$tn] = $tmpsplit[1];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $functions_size[$tn] = $tmpsplit[2];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $functions_argument[$tn] = $tmpsplit[3];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $tn++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($rad eq &amp;quot;[functions begin]\n&amp;quot;) {$ts = 1;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; #open outputfile
&lt;br&gt;&amp;nbsp; &amp;nbsp; open(OUTFILE, &amp;quot;&amp;gt;$FILE1.c&amp;quot;) or die &amp;quot;can't open $FILE1.c: $!&amp;quot;;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; print OUTFILE &amp;quot;#include \&amp;quot;$FILE1.h\&amp;quot;\n\n\n\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; for ($i=0 ; $i&amp;lt;$tn; $i++){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print OUTFILE &amp;quot;static void $functions_name[$i]$functions_argument[$i]\n{\n}\n\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; close(OUTFILE);
&lt;br&gt;&amp;nbsp; &amp;nbsp; print &amp;quot;$tn functions written to $FILE1.c\n&amp;quot;;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;sub generate_tables
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; #parse the input file
&lt;br&gt;&amp;nbsp; &amp;nbsp; $FILE1 = $ARGV[1];
&lt;br&gt;&amp;nbsp; &amp;nbsp; $ts = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; $tn = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; open(DATAFILE, &amp;quot;&amp;lt;$FILE1.db&amp;quot;) or die &amp;quot;File doesn't exist\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; while ($rad = &amp;lt;DATAFILE&amp;gt;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($rad eq &amp;quot;[tables end]\n&amp;quot;) {$ts = 0;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($ts == 1) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; chomp($rad);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @tmpsplit=split /;/,$rad;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $tabler_name[$tn] = $tmpsplit[0];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $tabler_address[$tn] = $tmpsplit[1];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $tabler_size[$tn] = $tmpsplit[2];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $tabler_type[$tn] = $tmpsplit[3];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $tabler_cols[$tn] = $tmpsplit[4];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $tabler_readonly[$tn] = $tmpsplit[5];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $tabler_dimensions[$tn] = $tmpsplit[6];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for ($i=0 ; $i&amp;lt;$tabler_dimensions[$tn] ; $i++){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $tabler_dsize[$tn][$i] = $tmpsplit[7+$i];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $tn++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #print &amp;quot;$tmpsplit[0] - $tmpsplit[5]\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($rad eq &amp;quot;[tables begin]\n&amp;quot;) {$ts = 1;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; close(DATAFILE);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; #get .data and .rodata offsets
&lt;br&gt;&amp;nbsp; &amp;nbsp; open(DATAFILE, &amp;quot;&amp;lt;$FILE1.db&amp;quot;) or die &amp;quot;File doesn't exist\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; $ts = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; while ($rad = &amp;lt;DATAFILE&amp;gt;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($rad eq &amp;quot;[offset end]\n&amp;quot;) {$ts = 0;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($ts == 2) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @tmpsplit=split /;/,$rad;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $doffset = $tmpsplit[1];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $ts = 3;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($ts == 1) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @tmpsplit=split /;/,$rad;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $drooffset = $tmpsplit[1];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $ts = 2;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($rad eq &amp;quot;[offset begin]\n&amp;quot;) {$ts = 1;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; close(DATAFILE);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; #open outputfile
&lt;br&gt;&amp;nbsp; &amp;nbsp; open(OUTFILE, &amp;quot;&amp;gt;$FILE1.h&amp;quot;) or die &amp;quot;can't open $FILE1.h: $!&amp;quot;;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; #print &amp;quot;$drooffset $doffset\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; for ($i=0 ; $i&amp;lt;$tn; $i++){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #type to unpacktype
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $unpacktype=&amp;quot;&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $delim=0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $floatfix=0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($tabler_type[$i] eq &amp;quot;int8_t&amp;quot;) {$unpacktype=&amp;quot;c&amp;quot;;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($tabler_type[$i] eq &amp;quot;uint8_t&amp;quot;) {$unpacktype=&amp;quot;C&amp;quot;;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($tabler_type[$i] eq &amp;quot;int16_t&amp;quot;) {$unpacktype=&amp;quot;s&amp;quot;;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($tabler_type[$i] eq &amp;quot;uint16_t&amp;quot;) {$unpacktype=&amp;quot;S&amp;quot;;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($tabler_type[$i] eq &amp;quot;int32_t&amp;quot;) {$unpacktype=&amp;quot;i&amp;quot;;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($tabler_type[$i] eq &amp;quot;uint32_t&amp;quot;) {$unpacktype=&amp;quot;I&amp;quot;;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($tabler_type[$i] eq &amp;quot;int64_t&amp;quot;) {$unpacktype=&amp;quot;l&amp;quot;;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($tabler_type[$i] eq &amp;quot;uint64_t&amp;quot;) {$unpacktype=&amp;quot;L&amp;quot;;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($tabler_type[$i] eq &amp;quot;float&amp;quot;) {$unpacktype=&amp;quot;f&amp;quot;;$floatfix = 1;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($tabler_type[$i] eq &amp;quot;double&amp;quot;) {$unpacktype=&amp;quot;d&amp;quot;;$floatfix = 1;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($tabler_type[$i] eq &amp;quot;hex8_t&amp;quot;) {$unpacktype=&amp;quot;h&amp;quot;;$delim=2;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($tabler_type[$i] eq &amp;quot;hex16_t&amp;quot;) {$unpacktype=&amp;quot;h&amp;quot;;$delim=4;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($tabler_type[$i] eq &amp;quot;hex32_t&amp;quot;) {$unpacktype=&amp;quot;h&amp;quot;;$delim=8;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($tabler_type[$i] eq &amp;quot;hex64_t&amp;quot;) {$unpacktype=&amp;quot;h&amp;quot;;$delim=16;}
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #get right offset
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($tabler_readonly[$i]==1){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $ofs = $drooffset;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $ofs = $doffset;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #calculate the seek address
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $seekaddress = hex($tabler_address[$i]) - $ofs;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #access the file for data
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; open(BINFILE, $FILE1) or die &amp;quot;can't open $FILE1: $!&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; seek(BINFILE, $seekaddress, 0) or die &amp;quot;seek:$!&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; read(BINFILE, $BUFFER, $tabler_size[$i]);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; close(BINFILE);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @fields = unpack(&amp;quot;$unpacktype*&amp;quot;,$BUFFER);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #divide the hex numbers
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($delim &amp;gt; 0) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $hexdata = $fields[0];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $fptr = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for ($nptr=0;$nptr &amp;lt; (length($hexdata));$nptr = $nptr + $delim) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $fields[$fptr] = &amp;quot;\&amp;quot;0x&amp;quot;.substr(&amp;quot;$hexdata&amp;quot;, $nptr, $delim).&amp;quot;\&amp;quot;&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $fptr++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #rename the type hex to uint
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $tabler_type[$i] =~ s/hex/uint/;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #numbers of elements
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $numelements = $#fields+1;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #const or not
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $const = &amp;quot;&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($tabler_readonly[$i]==1){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $const = &amp;quot;const &amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $tsize = 1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $dimstring = &amp;quot;&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #evaluate the dimensions
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for ($j=0; $j&amp;lt;$tabler_dimensions[$i]-1; $j++){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $tsize = $tsize*$tabler_dsize[$i][$j];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $dimstring = $dimstring.&amp;quot;\[$tabler_dsize[$i][$j]\]&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $numelements_last = $numelements/$tsize;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $dimstring = $dimstring.&amp;quot;\[$numelements_last\]&amp;quot;;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print OUTFILE &amp;quot;static $const$tabler_type[$i] $tabler_name[$i]$dimstring = {\n &amp;nbsp; &amp;nbsp;&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($tabler_dimensions[$tn]&amp;gt;1) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print OUTFILE &amp;quot;{ &amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $colcounter = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $elcounter = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; foreach $rad (@fields) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for ($j=0; $j&amp;lt;$tabler_dimensions[$i]-1; $j++){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (($elcounter%$numelements_last == 0)) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $colcounter = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($elcounter == 0){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print OUTFILE &amp;quot;{&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print OUTFILE &amp;quot; &amp;nbsp; &amp;nbsp;{&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $elcounter++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($colcounter == $tabler_cols[$i]) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print OUTFILE &amp;quot;\n &amp;nbsp; &amp;nbsp;&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $colcounter = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #fix missing .0 for floats
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($floatfix==1) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($rad=~ m/\./) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $rad = &amp;quot;$rad.0&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print OUTFILE &amp;quot;$rad,&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $colcounter ++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for ($j=0; $j&amp;lt;$tabler_dimensions[$i]-1; $j++){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($elcounter%$numelements_last == 0){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $colcounter = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print OUTFILE &amp;quot;},\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($tabler_dimensions[$i]&amp;gt;1) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print OUTFILE &amp;quot;};\n\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print OUTFILE &amp;quot;\n};\n\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #print &amp;quot;$tabler_name[$i] $tabler_address[$i] $tabler_size[$i] $seekaddress\n @fields\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; print &amp;quot;$tn tables written to $FILE1.h.\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; close(OUTFILE);
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;&lt;br&gt;sub analyse
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; my $k;
&lt;br&gt;&amp;nbsp; &amp;nbsp; $tn = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; $tron = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; $fnum = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; $FILE1 = $ARGV[1];
&lt;br&gt;&amp;nbsp; &amp;nbsp; print &amp;quot;$FILE1\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; # get SYMBOL TABLE
&lt;br&gt;&amp;nbsp; &amp;nbsp; if ($demangle == 1) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @symtable = `objdump -C -tT $FILE1`;
&lt;br&gt;&amp;nbsp; &amp;nbsp; } else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @symtable = `objdump -tT $FILE1`;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; foreach $rad (@symtable) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #parse readwrite tables
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($rad =~ m/\.data/) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #print $rad;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $address = (substr $`,0,8);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $rad = $';
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while (($rad =~ s/ &amp;nbsp;/ /g) || ($rad =~ s/\t//g)){}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #print $rad;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $size = (substr $rad,0,8);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $name = (substr $rad,9);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; chomp($name);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $size = hex($size);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($size &amp;gt; 0) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #print &amp;quot;$name $size $address\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $tabler_name[$tn] = $name;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $tabler_size[$tn] = $size;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $tabler_address[$tn] = $address;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $tn++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #parse readonly tables
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($rad =~ m/\.rodata/) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #print $rad;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $address = (substr $`,0,8);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $rad = $';
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while (($rad =~ s/ &amp;nbsp;/ /g) || ($rad =~ s/\t//g)){}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #print $rad;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $size = (substr $rad,0,8);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $name = (substr $rad,9);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; chomp($name);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $size = hex($size);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #print &amp;quot;$name $size $address\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($size &amp;gt; 0) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #print &amp;quot;$name $size $address\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $tablero_name[$tron] = $name;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $tablero_size[$tron] = $size;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $tablero_address[$tron] = $address;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $tron++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #parse functions
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($rad =~ m/\.text/) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $address = (substr $`,0,8);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #print $rad;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $rad = $';
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while (($rad =~ s/ &amp;nbsp;/ /g) || ($rad =~ s/\t//g)){}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $argument=&amp;quot;(n/a)&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $size = (substr $rad,0,8);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $name = (substr $rad,9);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; chomp($name);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($demangle == 1) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if($name =~ m/\(/) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $argument = &amp;quot;(&amp;quot;.$';
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $name = $`;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $size = hex($size);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #print &amp;quot;$name $argument $size\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($size &amp;gt; 0) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #print &amp;quot;$name $argument $size\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $functions_name[$fnum] = $name;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $functions_address[$fnum] = $address;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $functions_size[$fnum] = $size;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $functions_argument[$fnum] = $argument;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $fnum++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; #get .data and .rodata offsets
&lt;br&gt;&amp;nbsp; &amp;nbsp; @offsets = `readelf -S $FILE1`;
&lt;br&gt;&amp;nbsp; &amp;nbsp; foreach $rad (@offsets) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($rad=~ m/ \.data/) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $dataaddress = (substr $rad,41,8);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $dataoffset = (substr $rad,50,6);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $doffset = hex($dataaddress) - hex($dataoffset);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ($rad=~ m/ \.rodata/) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $rodataaddress = (substr $rad,41,8);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $rodataoffset = (substr $rad,50,6);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $drooffset = hex($rodataaddress) - hex($rodataoffset);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; #write the database
&lt;br&gt;&amp;nbsp; &amp;nbsp; open(DB, &amp;quot;&amp;gt;&amp;quot;.$FILE1.&amp;quot;.db&amp;quot;) or die &amp;quot;File doesn't exist\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; print DB &amp;quot;# offsets for data tables in non hex format(decimal), the order is fixed\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; print DB &amp;quot;[offset begin]\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; print DB &amp;quot;ro_offset;$drooffset;\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; print DB &amp;quot;rw_offset;$doffset;\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; print DB &amp;quot;[offset end]\n&amp;quot;;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; print DB &amp;quot;# name(string), address(hex), size(int), type(string), cols(int), readonly(bolean), dimensions(int), dim 1 to n-1 size...(int)\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; print DB &amp;quot;[tables begin]\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; #write read/write tables
&lt;br&gt;&amp;nbsp; &amp;nbsp; for ($i=0 ; $i&amp;lt;$tn; $i++){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print DB &amp;quot;$tabler_name[$i];$tabler_address[$i];$tabler_size[$i];hex8_t;8;0;1;\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; #write readonly tables
&lt;br&gt;&amp;nbsp; &amp;nbsp; for ($i=0 ; $i&amp;lt;$tron; $i++){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print DB &amp;quot;$tablero_name[$i];$tablero_address[$i];$tablero_size[$i];hex8_t;8;1;1;\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; print DB &amp;quot;[tables end]\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; #write functions
&lt;br&gt;&amp;nbsp; &amp;nbsp; print DB &amp;quot;# name(string); address(hex); size(int); arguments(string)\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; print DB &amp;quot;[functions begin]\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; for ($i=0 ; $i&amp;lt;$fnum; $i++){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print DB &amp;quot;$functions_name[$i];$functions_address[$i];$functions_size[$i];$functions_argument[$i];\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; print DB &amp;quot;[functions end]\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; close DB;
&lt;br&gt;&amp;nbsp; &amp;nbsp; print &amp;quot;Found $tn rw tables, $tron readonly tables and $fnum functions.\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; print &amp;quot;Database $FILE1.db written.\n&amp;quot;;
&lt;br&gt;}
&lt;br&gt;&lt;br /&gt;# offsets for data tables in non hex format(decimal), the order is fixed
&lt;br&gt;[offset begin]
&lt;br&gt;ro_offset;0;
&lt;br&gt;rw_offset;4096;
&lt;br&gt;[offset end]
&lt;br&gt;# name(string), address(hex), size(int), type(string), cols(int), readonly(bolean), dimensions(int), dim 1 to n-1 size...(int)
&lt;br&gt;[tables begin]
&lt;br&gt;ubScan;0002e4c0;1024;uint8_t;8;0;2;16;
&lt;br&gt;MapTbl3;000283e0;1424;uint8_t;8;1;1;
&lt;br&gt;xform_to_scan;0002a860;18;hex8_t;8;1;1;
&lt;br&gt;ClampDitherY_0e;0001d800;256;uint8_t;8;1;1;
&lt;br&gt;MapTbl4;00028980;1424;hex8_t;8;1;1;
&lt;br&gt;CP_ClampDitherY_06;00022740;256;hex8_t;8;1;1;
&lt;br&gt;au16ScaleTables;0002be80;5632;uint16_t;8;1;1;
&lt;br&gt;MapTbl7;00029a60;1424;hex8_t;8;1;1;
&lt;br&gt;ComPicSizes;0002a7e8;56;uint32_t;8;1;1;
&lt;br&gt;au16BaseTables;0002a880;5632;hex16_t;8;1;1;
&lt;br&gt;MapTbl0;00027300;1424;hex8_t;8;1;1;
&lt;br&gt;NullFrmHeader;0002a724;12;uint8_t;8;1;1;
&lt;br&gt;ClampDitherY_02;0001d500;256;hex8_t;8;1;1;
&lt;br&gt;MapTbl2;00027e40;1424;hex8_t;8;1;1;
&lt;br&gt;DitherTable;0001e100;16384;hex32_t;8;1;1;
&lt;br&gt;MapTbl6;000294c0;1424;hex8_t;8;1;1;
&lt;br&gt;MapTbl1;000278a0;1424;hex8_t;8;1;1;
&lt;br&gt;MapTbl5;00028f20;1424;hex8_t;8;1;1;
&lt;br&gt;TruncateV;0001d900;1024;uint32_t;8;1;1;
&lt;br&gt;CP_PalTable;00022280;944;uint8_t;8;1;2;16;
&lt;br&gt;CP_ClampDitherY_0e;00022940;256;hex8_t;8;1;1;
&lt;br&gt;FP_PalTable;0001d140;944;uint8_t;8;1;1;
&lt;br&gt;ClampDitherY_0a;0001d700;256;hex8_t;8;1;1;
&lt;br&gt;CP_ClampDitherY_0a;00022840;256;hex8_t;8;1;1;
&lt;br&gt;CP_ClampDitherY_02;00022640;256;hex8_t;8;1;1;
&lt;br&gt;TileSizeTable;0002a7bc;32;uint16_t;8;1;1;
&lt;br&gt;MapTbl8;0002a000;1424;hex8_t;8;1;1;
&lt;br&gt;TruncateU;0001dd00;1024;uint32_t;8;1;1;
&lt;br&gt;ClampDitherY_06;0001d600;256;hex8_t;8;1;1;
&lt;br&gt;CP_DitherTable;00022a40;16384;hex32_t;8;1;1;
&lt;br&gt;[tables end]
&lt;br&gt;# name(string); address(hex); size(int); arguments(string)
&lt;br&gt;[functions begin]
&lt;br&gt;inv_bits;0001ca60;67;(n/a);
&lt;br&gt;PB2Huff;0001c310;319;(n/a);
&lt;br&gt;transform;00011d50;2560;(n/a);
&lt;br&gt;HiveCreateMutex;00005fd0;12;(n/a);
&lt;br&gt;DecMcRectInterp;0001a9c0;890;(n/a);
&lt;br&gt;BitBuff2Mem;0001c180;174;(n/a);
&lt;br&gt;BitBuffOverWrite;0001bec0;225;(n/a);
&lt;br&gt;DecodeDebugGet;00006d50;12;(n/a);
&lt;br&gt;DecodeResetBrightness;00008670;97;(n/a);
&lt;br&gt;DecodeChangeSaturation;00008580;229;(n/a);
&lt;br&gt;DecodeStartup;00006a40;267;(n/a);
&lt;br&gt;DecodeGetCompressedSize;000067b0;90;(n/a);
&lt;br&gt;DecodeResetContrast;000086e0;97;(n/a);
&lt;br&gt;DecodeUseFixedPalette;00006fb0;232;(n/a);
&lt;br&gt;HiveLocalPtrCheck;00005f00;25;(n/a);
&lt;br&gt;CDecompressBegin;00008100;109;(n/a);
&lt;br&gt;DecodeConstantInit;00006070;327;(n/a);
&lt;br&gt;HiveDecTimer;00006020;39;(n/a);
&lt;br&gt;CDecompress;000070a0;1648;(n/a);
&lt;br&gt;HiveGlobalFreePtr;00005f20;41;(n/a);
&lt;br&gt;DecodeGetDefaultPersData;00006d70;12;(n/a);
&lt;br&gt;make_quant;0000f440;193;(n/a);
&lt;br&gt;GetRVMapTbl;0001c830;131;(n/a);
&lt;br&gt;HiveGlobalPtrCheck;00005f50;25;(n/a);
&lt;br&gt;HiveClosestPaletteIndex;00006060;12;(n/a);
&lt;br&gt;DecodeGetSupportedAlgorithms;00006e40;40;(n/a);
&lt;br&gt;BlockPut;00012870;162;(n/a);
&lt;br&gt;C_YVU9toConfigurablePalette;00016e40;13150;(n/a);
&lt;br&gt;What_The;00005bf0;132;(n/a);
&lt;br&gt;MatCopyFast;0000a540;41;(n/a);
&lt;br&gt;bDecodeThisTile;0001a780;87;(n/a);
&lt;br&gt;BitBuffFlush;0001bfb0;52;(n/a);
&lt;br&gt;BitBuffAlloc;0001bd50;72;(n/a);
&lt;br&gt;HiveGlobalUnlockHandle;00005f80;25;(n/a);
&lt;br&gt;DecodeGetPersData;00006e30;12;(n/a);
&lt;br&gt;tounsigned;0001c2c0;27;(n/a);
&lt;br&gt;readTransTileData;0000ad60;704;(n/a);
&lt;br&gt;dec_transform;00010d30;2459;(n/a);
&lt;br&gt;MatSet;00009fd0;88;(n/a);
&lt;br&gt;HiveEndCriticalSection;00006010;12;(n/a);
&lt;br&gt;HiveGlobalAllocHandle;00005e80;66;(n/a);
&lt;br&gt;DecodeFreePrivateData;000066c0;229;(n/a);
&lt;br&gt;GetHuffmanTbls;0001c5a0;76;(n/a);
&lt;br&gt;MatConvU8;0000a0e0;422;(n/a);
&lt;br&gt;DecodeQuery;00006810;310;(n/a);
&lt;br&gt;HiveLocalFreePtr;00005ed0;41;(n/a);
&lt;br&gt;C_YVU9toActivePalette;00015d60;4308;(n/a);
&lt;br&gt;HiveBeginCriticalSection;00005ff0;25;(n/a);
&lt;br&gt;DecPlaneOpen;00008bb0;182;(n/a);
&lt;br&gt;DecodeImageDimInit;00006e70;66;(n/a);
&lt;br&gt;YVU9_to_RGB24;0000f6c0;4996;(n/a);
&lt;br&gt;BitBuffRead;0001bff0;223;(n/a);
&lt;br&gt;SysFreeFunc;0001cb00;45;(n/a);
&lt;br&gt;HiveFreeMutex;00005fe0;12;(n/a);
&lt;br&gt;readTransBandHdr;0000a810;1350;(n/a);
&lt;br&gt;MatAllocFunc;0000a290;94;(n/a);
&lt;br&gt;DecodeSequenceEnd;00006ee0;12;(n/a);
&lt;br&gt;InitYVU2RGBContribs;0000f550;361;(n/a);
&lt;br&gt;BitBuffByteRead;0001c0d0;171;(n/a);
&lt;br&gt;BitBuffWrite;0001b010;295;(n/a);
&lt;br&gt;MatAdd;0000a3c0;100;(n/a);
&lt;br&gt;BitBuffSize;0001c260;64;(n/a);
&lt;br&gt;ModifyContrastOrSaturation;00008830;114;(n/a);
&lt;br&gt;DecBandOpen;0001a630;228;(n/a);
&lt;br&gt;C_YVU9toCLUT8;00012a00;13150;(n/a);
&lt;br&gt;readPicHdrSt;0000d380;3141;(n/a);
&lt;br&gt;DecodeResetSaturation;00008750;59;(n/a);
&lt;br&gt;DecodeChangeContrast;000083e0;259;(n/a);
&lt;br&gt;DecodeUpdateChroma;000087e0;73;(n/a);
&lt;br&gt;HiveGlobalAllocPtr;00005e30;66;(n/a);
&lt;br&gt;HiveGlobalLockHandle;00005f70;16;(n/a);
&lt;br&gt;DecodeSetPersData;00006f00;12;(n/a);
&lt;br&gt;BlockGetDiff;00012750;286;(n/a);
&lt;br&gt;MatCopyFull;0000a490;172;(n/a);
&lt;br&gt;DecodeIsKeyFrame;00006ec0;32;(n/a);
&lt;br&gt;InitRVMapTbl;0001c950;264;(n/a);
&lt;br&gt;MatAddFull;0000a030;167;(n/a);
&lt;br&gt;MatFreeFunc;0000a2f0;26;(n/a);
&lt;br&gt;make_scan;0000f510;57;(n/a);
&lt;br&gt;DecodeShutdown;00006f10;148;(n/a);
&lt;br&gt;NpMBitBuffWrite;0001be70;72;(n/a);
&lt;br&gt;HuffEncBitBuff;0001b600;1126;(n/a);
&lt;br&gt;BitBuffHist;0001b250;937;(n/a);
&lt;br&gt;MatCksum;0000a360;94;(n/a);
&lt;br&gt;BitBuffFree;0001be20;68;(n/a);
&lt;br&gt;DecodeUpdateLuma;00008790;73;(n/a);
&lt;br&gt;DecodeDebugSet;00006d60;12;(n/a);
&lt;br&gt;InitStaticEncodeTables;0001c450;99;(n/a);
&lt;br&gt;GetRVMapTbls;0001c5f0;208;(n/a);
&lt;br&gt;MatCopy;0000a430;86;(n/a);
&lt;br&gt;DecodeSequenceSetup;00006950;234;(n/a);
&lt;br&gt;DecodeFrame;000061c0;1273;(n/a);
&lt;br&gt;SkipPad2DWord;0001ba70;357;(n/a);
&lt;br&gt;DecBand;0001a1a0;1156;(n/a);
&lt;br&gt;CDecompressEnd;00007710;299;(n/a);
&lt;br&gt;ColorConvert;000088b0;756;(n/a);
&lt;br&gt;tosigned;0001c2a0;23;(n/a);
&lt;br&gt;HuffRead;0001bbe0;360;(n/a);
&lt;br&gt;ComputeDynamicClut;00008ec0;3471;(n/a);
&lt;br&gt;InitQuantTables;0001cb30;410;(n/a);
&lt;br&gt;DecodeSetPaletteConfiguration;00006ef0;12;(n/a);
&lt;br&gt;MatSetFast;00009fa0;44;(n/a);
&lt;br&gt;DecPlaneClose;00008c70;95;(n/a);
&lt;br&gt;DecodeChangeBrightness;000084f0;129;(n/a);
&lt;br&gt;DecodeGetPalette;00006d80;162;(n/a);
&lt;br&gt;DecBandClose;0001a720;88;(n/a);
&lt;br&gt;HiveEncodeProgressFunc;00006050;12;(n/a);
&lt;br&gt;MatSetFull;0000a310;72;(n/a);
&lt;br&gt;PicInfoStAllocPlanes;0000f320;277;(n/a);
&lt;br&gt;HiveLocalAllocPtr;00005de0;66;(n/a);
&lt;br&gt;SysMallocFunc;0001cab0;71;(n/a);
&lt;br&gt;HiveGlobalFreeHandle;00005fa0;41;(n/a);
&lt;br&gt;InitStaticDecodeTables;0001c4c0;223;(n/a);
&lt;br&gt;DecMcRectInterpAvg;0001ad40;706;(n/a);
&lt;br&gt;PicInfoStClose;0000a5a0;624;(n/a);
&lt;br&gt;HaarBands;00009e40;344;(n/a);
&lt;br&gt;GetDecHuffmanTable;0001c6c0;360;(n/a);
&lt;br&gt;HaarInv;00009c50;489;(n/a);
&lt;br&gt;PicInfoStOpen;0000dfd0;4942;(n/a);
&lt;br&gt;DecodeUseThisPalette;00006b50;502;(n/a);
&lt;br&gt;BitBuffSkip2ByteAlign;0001b140;266;(n/a);
&lt;br&gt;BitBuffInit;0001bda0;116;(n/a);
&lt;br&gt;DecPlane;00008cd0;258;(n/a);
&lt;br&gt;SetMatrixRect;0000a570;47;(n/a);
&lt;br&gt;BitBuffByteAlign;0001c230;42;(n/a);
&lt;br&gt;CreateHuffDecTable;0001c8c0;139;(n/a);
&lt;br&gt;BlockGet;00012920;216;(n/a);
&lt;br&gt;[functions end]
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Table-extractor-tool-tp2031566p20