<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://lundman.net/wiki/index.php?action=history&amp;feed=atom&amp;title=Dune%3ADSF-Service_files</id>
	<title>Dune:DSF-Service files - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://lundman.net/wiki/index.php?action=history&amp;feed=atom&amp;title=Dune%3ADSF-Service_files"/>
	<link rel="alternate" type="text/html" href="https://lundman.net/wiki/index.php?title=Dune:DSF-Service_files&amp;action=history"/>
	<updated>2026-04-22T09:08:20Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://lundman.net/wiki/index.php?title=Dune:DSF-Service_files&amp;diff=3716&amp;oldid=prev</id>
		<title>Lundman at 08:28, 20 January 2011</title>
		<link rel="alternate" type="text/html" href="https://lundman.net/wiki/index.php?title=Dune:DSF-Service_files&amp;diff=3716&amp;oldid=prev"/>
		<updated>2011-01-20T08:28:28Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;//lundman.net/wiki/index.php?title=Dune:DSF-Service_files&amp;amp;diff=3716&amp;amp;oldid=3715&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Lundman</name></author>
	</entry>
	<entry>
		<id>https://lundman.net/wiki/index.php?title=Dune:DSF-Service_files&amp;diff=3715&amp;oldid=prev</id>
		<title>Lundman at 01:25, 20 January 2011</title>
		<link rel="alternate" type="text/html" href="https://lundman.net/wiki/index.php?title=Dune:DSF-Service_files&amp;diff=3715&amp;oldid=prev"/>
		<updated>2011-01-20T01:25:15Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;//lundman.net/wiki/index.php?title=Dune:DSF-Service_files&amp;amp;diff=3715&amp;amp;oldid=3714&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Lundman</name></author>
	</entry>
	<entry>
		<id>https://lundman.net/wiki/index.php?title=Dune:DSF-Service_files&amp;diff=3714&amp;oldid=prev</id>
		<title>Lundman at 01:20, 20 January 2011</title>
		<link rel="alternate" type="text/html" href="https://lundman.net/wiki/index.php?title=Dune:DSF-Service_files&amp;diff=3714&amp;oldid=prev"/>
		<updated>2011-01-20T01:20:49Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 01:20, 20 January 2011&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l51&quot;&gt;Line 51:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 51:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// XOR block pulled from &amp;quot;shell&amp;quot;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// XOR block pulled from &amp;quot;shell&amp;quot;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;static uint8_t key[] = {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;static uint8_t key[] = {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         0xDA&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, 0xDF, 0xDD, 0x05, 0x53, 0x40, 0x45, 0xb3, 0xee, 0xcc, 0x26, 0x5e&lt;/del&gt;,  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         0xDA,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        0xb8, 0x0b, 0x25, 0xdb, 0xa2, 0xe6, 0xec, 0x63, 0xf2, 0xe1, 0x19, 0x76&lt;/del&gt;,  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;// Ah the KEY goes here&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;let&#039;s see if HDi gets angry about this....&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        0x08, 0x43, 0x38, 0x6f, 0xc5, 0xc1, 0x85, &lt;/del&gt;0x46&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &lt;/ins&gt;0x46&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;};&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;};&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Lundman</name></author>
	</entry>
	<entry>
		<id>https://lundman.net/wiki/index.php?title=Dune:DSF-Service_files&amp;diff=3713&amp;oldid=prev</id>
		<title>Lundman at 08:08, 19 January 2011</title>
		<link rel="alternate" type="text/html" href="https://lundman.net/wiki/index.php?title=Dune:DSF-Service_files&amp;diff=3713&amp;oldid=prev"/>
		<updated>2011-01-19T08:08:51Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 08:08, 19 January 2011&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;The general idea &lt;/del&gt;is to &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;put some stuff about the Audio-hardware &lt;/del&gt;of the &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Dune BD Prime here&lt;/del&gt;:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;This section &lt;/ins&gt;is &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;devoted &lt;/ins&gt;to &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;different ways &lt;/ins&gt;of &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;encoding or decoding service files for &lt;/ins&gt;the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;HDi players&lt;/ins&gt;:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Overview==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Overview==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Lundman</name></author>
	</entry>
	<entry>
		<id>https://lundman.net/wiki/index.php?title=Dune:DSF-Service_files&amp;diff=3712&amp;oldid=prev</id>
		<title>Lundman at 08:07, 19 January 2011</title>
		<link rel="alternate" type="text/html" href="https://lundman.net/wiki/index.php?title=Dune:DSF-Service_files&amp;diff=3712&amp;oldid=prev"/>
		<updated>2011-01-19T08:07:24Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;The general idea is to put some stuff about the Audio-hardware of the Dune BD Prime here:&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
Sometimes it may be of interest to decode a service file distributed or make your own little script to clean up things.&lt;br /&gt;
I found this snippet of code at MPC Club and it was written by ScottJ97 (I think) &lt;br /&gt;
[http://www.mpcclub.com/forum/showthread.php?t=26187 ScottJ97&amp;#039;s thread on MPC Club]&lt;br /&gt;
&lt;br /&gt;
==The Code==&lt;br /&gt;
This is just a copy and paste from the [http://pastebin.com/raw.php?i=bG8ZARUR pastebin] that most likely will die in the future&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;pre&amp;gt;/*&lt;br /&gt;
 *&lt;br /&gt;
 * dsf_pack: HDi Dune Media Player service file packer.&lt;br /&gt;
 * &lt;br /&gt;
 * Accident 2009: Epoch, encode small files, needs extra work for&lt;br /&gt;
 *                encodes over one page (I think) Never tried it.&lt;br /&gt;
 *&lt;br /&gt;
 * This is woefully incomplete. But it was enough for my requirements.&lt;br /&gt;
 *&lt;br /&gt;
 * For example: create a file with:&lt;br /&gt;
 * #!/bin/sh&lt;br /&gt;
 * /usr/sbin/telnetd &amp;amp;&lt;br /&gt;
 * exit 0&lt;br /&gt;
 *&lt;br /&gt;
 * Then pack it up. Note that the file must be named&lt;br /&gt;
 * &amp;quot;dune_service_XXXX.dsf&amp;quot; for it to be recognised.&lt;br /&gt;
 *&lt;br /&gt;
 * When the Dune runs it, it copies it to /tmp, gunzips it as&lt;br /&gt;
 * /tmp/service and runs it.&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.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;
&lt;br /&gt;
&lt;br /&gt;
extern int getopt();&lt;br /&gt;
extern char *optarg;&lt;br /&gt;
extern int optind;&lt;br /&gt;
&lt;br /&gt;
static char *arg_decode      = NULL;&lt;br /&gt;
static char *arg_encode      = NULL;&lt;br /&gt;
static char *arg_outfilename = NULL;&lt;br /&gt;
static char *arg_comparename = NULL;&lt;br /&gt;
static int   arg_verbose     = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// XOR block pulled from &amp;quot;shell&amp;quot;.&lt;br /&gt;
static uint8_t key[] = {&lt;br /&gt;
        0xDA, 0xDF, 0xDD, 0x05, 0x53, 0x40, 0x45, 0xb3, 0xee, 0xcc, 0x26, 0x5e, &lt;br /&gt;
        0xb8, 0x0b, 0x25, 0xdb, 0xa2, 0xe6, 0xec, 0x63, 0xf2, 0xe1, 0x19, 0x76, &lt;br /&gt;
        0x08, 0x43, 0x38, 0x6f, 0xc5, 0xc1, 0x85, 0x46&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
static void options(char *prog)&lt;br /&gt;
{&lt;br /&gt;
        printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        printf(&amp;quot;%s - Dune .dsf encode/decode program\n\n&amp;quot;, prog);&lt;br /&gt;
        printf(&amp;quot;  options:\n&amp;quot;);&lt;br /&gt;
        printf(&amp;quot;  -h          : display usage help (this output)\n&amp;quot;);&lt;br /&gt;
        printf(&amp;quot;  -d filename : decode .dsf to outfile.gz\n&amp;quot;);&lt;br /&gt;
        printf(&amp;quot;  -e filename : encode infile.gz to .dsf\n&amp;quot;);&lt;br /&gt;
        printf(&amp;quot;  -o filename : specify different output filename\n&amp;quot;);&lt;br /&gt;
        printf(&amp;quot;  -c filename : compare encode with file\n&amp;quot;);&lt;br /&gt;
        printf(&amp;quot;  -v          : verbose it up!\n&amp;quot;);&lt;br /&gt;
        printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        printf(&amp;quot;Be aware that dune service files have to be named dune_service_*.dsf\n\n&amp;quot;);&lt;br /&gt;
        printf(&amp;quot;Dune encoding tool by Accident.\nResist the temptation to do bad!\n\n&amp;quot;);&lt;br /&gt;
        exit(0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void arguments(int argc, char **argv)&lt;br /&gt;
{&lt;br /&gt;
        int opt;&lt;br /&gt;
    &lt;br /&gt;
        while ((opt=getopt(argc, argv, &lt;br /&gt;
                                           &amp;quot;hd:e:o:vc:&amp;quot;&lt;br /&gt;
                                           )) != -1) {&lt;br /&gt;
&lt;br /&gt;
                switch(opt) {&lt;br /&gt;
&lt;br /&gt;
                case &amp;#039;h&amp;#039;:&lt;br /&gt;
                        options(argv[0]);&lt;br /&gt;
                        break;&lt;br /&gt;
                case &amp;#039;d&amp;#039;:&lt;br /&gt;
                        arg_decode = strdup(optarg);&lt;br /&gt;
                        break;&lt;br /&gt;
                case &amp;#039;e&amp;#039;:&lt;br /&gt;
                        arg_encode = strdup(optarg);&lt;br /&gt;
                        break;&lt;br /&gt;
                case &amp;#039;o&amp;#039;:&lt;br /&gt;
                        arg_outfilename = strdup(optarg);&lt;br /&gt;
                        break;&lt;br /&gt;
                case &amp;#039;c&amp;#039;:&lt;br /&gt;
                        arg_comparename = strdup(optarg);&lt;br /&gt;
                        break;&lt;br /&gt;
                case &amp;#039;v&amp;#039;:&lt;br /&gt;
                        arg_verbose++;&lt;br /&gt;
                        break;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (!arg_decode &amp;amp;&amp;amp; !arg_encode)&lt;br /&gt;
                options(argv[0]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char **argv)&lt;br /&gt;
{&lt;br /&gt;
        FILE *fd = NULL, *out = NULL;&lt;br /&gt;
        uint8_t buffer[0x1000], v0,v1,a1,nv0;&lt;br /&gt;
        uint32_t red, i, half_red;&lt;br /&gt;
        uint32_t decode = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        arguments(argc, argv);&lt;br /&gt;
&lt;br /&gt;
        if (arg_decode) &lt;br /&gt;
                dune_decode(arg_decode);&lt;br /&gt;
&lt;br /&gt;
        if (arg_encode) &lt;br /&gt;
                dune_encode(arg_encode);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int dune_decode(char *infilename)&lt;br /&gt;
{&lt;br /&gt;
        FILE *fd = NULL, *out = NULL;&lt;br /&gt;
        uint8_t buffer[0x1000], v0,v1,a1,nv0;&lt;br /&gt;
        uint32_t red, i, half_red;&lt;br /&gt;
        uint32_t decode = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        fd = fopen(infilename, &amp;quot;rb&amp;quot;);&lt;br /&gt;
        if (!fd) goto failed;&lt;br /&gt;
&lt;br /&gt;
        out = fopen(arg_outfilename ? arg_outfilename : &amp;quot;outfile.gz&amp;quot;, &amp;quot;wb&amp;quot;);&lt;br /&gt;
        if (!out) goto failed;&lt;br /&gt;
&lt;br /&gt;
        // read header&lt;br /&gt;
        if (fread(buffer, 0x141, 1, fd) != 1) goto failed;&lt;br /&gt;
&lt;br /&gt;
        // Read blocks:&lt;br /&gt;
        while ((red = fread(buffer, 1, sizeof(buffer), fd)) &amp;gt; 0) {&lt;br /&gt;
                // Decode block&lt;br /&gt;
&lt;br /&gt;
                if (arg_verbose)&lt;br /&gt;
                        printf(&amp;quot;read %x \n&amp;quot;, red);&lt;br /&gt;
&lt;br /&gt;
                half_red = red&amp;gt;&amp;gt;1;&lt;br /&gt;
&lt;br /&gt;
                for (i = 0; i &amp;lt; half_red; i++) {&lt;br /&gt;
&lt;br /&gt;
                        v0 = buffer[i + half_red] ;&lt;br /&gt;
                        v1 = key[decode];&lt;br /&gt;
                        a1 = buffer[ i ];&lt;br /&gt;
&lt;br /&gt;
                        nv0 = v0;&lt;br /&gt;
                        nv0 ^= v1;&lt;br /&gt;
                        nv0 ^= a1;&lt;br /&gt;
&lt;br /&gt;
                        if (arg_verbose)&lt;br /&gt;
                                printf(&amp;quot;  [%x]=%02X, xor %02X, [%x]=%02X, storing %02X\n&amp;quot;,&lt;br /&gt;
                                           i+half_red, v0, v1, i, a1, nv0);&lt;br /&gt;
&lt;br /&gt;
                        buffer[i] = nv0;&lt;br /&gt;
&lt;br /&gt;
                        decode++;&lt;br /&gt;
                        if (decode &amp;gt;= sizeof(key))&lt;br /&gt;
                                decode = 0;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                for (i = half_red; i &amp;lt; red; i++) {&lt;br /&gt;
&lt;br /&gt;
                        v1 = key[decode];&lt;br /&gt;
                        a1 = buffer[ i ];&lt;br /&gt;
&lt;br /&gt;
                        nv0 = v1;&lt;br /&gt;
                        nv0 ^= a1;&lt;br /&gt;
&lt;br /&gt;
                        if (arg_verbose)&lt;br /&gt;
                                printf(&amp;quot;  xor %02X, [%x]=%02X, storing %02X\n&amp;quot;,&lt;br /&gt;
                                           v1, i, a1, nv0);&lt;br /&gt;
&lt;br /&gt;
                        buffer[i] = nv0;&lt;br /&gt;
&lt;br /&gt;
                        decode++;&lt;br /&gt;
                        if (decode &amp;gt;= sizeof(key))&lt;br /&gt;
                                decode = 0;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                // Write block&lt;br /&gt;
                fwrite(buffer, red, 1, out);&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        fclose(fd);&lt;br /&gt;
        fclose(out);&lt;br /&gt;
&lt;br /&gt;
        printf(&amp;quot;Decode complete\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        return 0;&lt;br /&gt;
&lt;br /&gt;
 failed:&lt;br /&gt;
        perror(&amp;quot;:&amp;quot;);&lt;br /&gt;
        printf(&amp;quot;failed\n&amp;quot;);&lt;br /&gt;
        if (fd) &lt;br /&gt;
                fclose(fd);&lt;br /&gt;
        else&lt;br /&gt;
                fprintf(stderr, &amp;quot;Failed to open infile &amp;#039;%s&amp;#039;\r\n&amp;quot;, infilename);&lt;br /&gt;
&lt;br /&gt;
        if (out) &lt;br /&gt;
                fclose(out);&lt;br /&gt;
        else if (fd)&lt;br /&gt;
                fprintf(stderr, &amp;quot;Failed to open outfile &amp;#039;%s&amp;#039;\r\n&amp;quot;, &lt;br /&gt;
                                arg_outfilename ? arg_outfilename : &amp;quot;outfile.gz&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int dune_encode(char *infilename)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
        FILE *fd = NULL, *out = NULL, *compare=NULL;&lt;br /&gt;
        uint8_t buffer[0x1000], v0,v1,a1,nv0;&lt;br /&gt;
        uint8_t compbuf[0x1000];&lt;br /&gt;
        uint32_t red, i, half_red;&lt;br /&gt;
        uint32_t decode = 0;&lt;br /&gt;
        unsigned char stuff[] = {&lt;br /&gt;
                0x1d,0x25,0x7a,0xe4,0x27,0xff,0xe9,0x8c,0x58,0x0a,0x8b,0x18,0x70,0xbb,0xf2,0x87,&lt;br /&gt;
                0x3a,0xf2,0x41,0x68,0x9e,0x81,0x85,0xc6,0x82,0xe1,0x92,0x7d,0xa0,0x4e,0x5b,0xbd,&lt;br /&gt;
                0x73,0xd5,0xa1,0x9a,0xd4,0x8a,0x27,0x2c,0x95,0xb2,0x44,0x05,0x6d,0x37,0x8c,0xa7,&lt;br /&gt;
                0x29,0xce,0x0f,0xc7,0x4f,0x94,0x8e,0xd2,0x75,0x20,0x4f,0x15,0x6e,0xaa,0xd3,0xe1,0x7f&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        fd = fopen(infilename, &amp;quot;rb&amp;quot;);&lt;br /&gt;
        if (!fd) goto failed;&lt;br /&gt;
&lt;br /&gt;
        out = fopen(arg_outfilename ? arg_outfilename : &amp;quot;outfile.dsf&amp;quot;, &amp;quot;wb&amp;quot;);&lt;br /&gt;
        if (!out) goto failed;&lt;br /&gt;
&lt;br /&gt;
        if (arg_comparename)&lt;br /&gt;
                compare=fopen(arg_comparename, &amp;quot;rb&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        // read header&lt;br /&gt;
        fwrite(&amp;quot;DUNE SERVICE FILE&amp;quot;, 18, 1, out);&lt;br /&gt;
        // One day work out what these are.&lt;br /&gt;
        fwrite(&amp;quot;86673687&amp;quot;, 9, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;54139262&amp;quot;, 9, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;53151487&amp;quot;, 9, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;50852538&amp;quot;, 9, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;38155310&amp;quot;, 9, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;9047468&amp;quot;, 8, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;46935104&amp;quot;, 9, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;64658461&amp;quot;, 9, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;64007208&amp;quot;, 9, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;93556737&amp;quot;, 9, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;88478556&amp;quot;, 9, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;6195915&amp;quot;, 8, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;677883&amp;quot;, 7, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;9851071&amp;quot;, 8, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;82589884&amp;quot;, 9, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;81953245&amp;quot;, 9, 1, out);&lt;br /&gt;
&lt;br /&gt;
        // First header thing is 0x100.&lt;br /&gt;
        fseek(out, 0x100, SEEK_SET);&lt;br /&gt;
&lt;br /&gt;
        // Then there is 0x41 bytes of something.&lt;br /&gt;
        fwrite(stuff, sizeof(stuff), 1, out);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        if (compare)&lt;br /&gt;
                fseek(compare, 0x141, SEEK_SET);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        // Read blocks:&lt;br /&gt;
        while ((red = fread(buffer, 1, sizeof(buffer), fd)) &amp;gt; 0) {&lt;br /&gt;
                // Encode block&lt;br /&gt;
                if (arg_verbose)&lt;br /&gt;
                        printf(&amp;quot;read %x \n&amp;quot;, red);&lt;br /&gt;
&lt;br /&gt;
                if (compare)&lt;br /&gt;
                        fread(compbuf, 1, red, compare);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                half_red = red&amp;gt;&amp;gt;1;&lt;br /&gt;
                decode = half_red % sizeof(key);&lt;br /&gt;
                if (arg_verbose) printf(&amp;quot;Decode start %d\n&amp;quot;, decode);&lt;br /&gt;
&lt;br /&gt;
                for (i = half_red; i &amp;lt; red; i++) {&lt;br /&gt;
&lt;br /&gt;
                        v1 = key[decode];&lt;br /&gt;
                        a1 = buffer[ i ];&lt;br /&gt;
&lt;br /&gt;
                        nv0 = v1;&lt;br /&gt;
                        nv0 ^= a1;&lt;br /&gt;
&lt;br /&gt;
                        if (arg_verbose)&lt;br /&gt;
                                printf(&amp;quot;  xor %02X, [%x]=%02X, storing %02X\n&amp;quot;,&lt;br /&gt;
                                           v1, i, a1, nv0);&lt;br /&gt;
&lt;br /&gt;
                        buffer[i] = nv0;&lt;br /&gt;
&lt;br /&gt;
                        if (compare &amp;amp;&amp;amp;&lt;br /&gt;
                                buffer[i] != compbuf[i])&lt;br /&gt;
                                printf(&amp;quot;Compare buf has %02X\n&amp;quot;, compbuf[i]);&lt;br /&gt;
&lt;br /&gt;
                        decode++;&lt;br /&gt;
                        if (decode &amp;gt;= sizeof(key))&lt;br /&gt;
                                decode = 0;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                decode = 0;&lt;br /&gt;
                if (arg_verbose) printf(&amp;quot;Halfway point as decode %d\n&amp;quot;, decode);&lt;br /&gt;
&lt;br /&gt;
                for (i = 0; i &amp;lt; half_red; i++) {&lt;br /&gt;
&lt;br /&gt;
                        v0 = buffer[i + half_red] ;&lt;br /&gt;
                        v1 = key[decode];&lt;br /&gt;
                        a1 = buffer[ i ];&lt;br /&gt;
&lt;br /&gt;
                        nv0 = v0;&lt;br /&gt;
                        nv0 ^= v1;&lt;br /&gt;
                        nv0 ^= a1;&lt;br /&gt;
&lt;br /&gt;
                        if (arg_verbose)&lt;br /&gt;
                                printf(&amp;quot;  [%x]=%02X, xor %02X, [%x]=%02X, storing %02X\n&amp;quot;,&lt;br /&gt;
                                           i+half_red, v0, v1, i, a1, nv0);&lt;br /&gt;
&lt;br /&gt;
                        buffer[i] = nv0;&lt;br /&gt;
&lt;br /&gt;
                        if (compare &amp;amp;&amp;amp;&lt;br /&gt;
                                buffer[i] != compbuf[i])&lt;br /&gt;
                                printf(&amp;quot;Compare buf has %02X\n&amp;quot;, compbuf[i]);&lt;br /&gt;
&lt;br /&gt;
                        decode++;&lt;br /&gt;
                        if (decode &amp;gt;= sizeof(key))&lt;br /&gt;
                                decode = 0;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                // Write block&lt;br /&gt;
                fwrite(buffer, red, 1, out);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        fclose(fd);&lt;br /&gt;
        fclose(out);&lt;br /&gt;
        if (compare)&lt;br /&gt;
                fclose(compare);&lt;br /&gt;
&lt;br /&gt;
        printf(&amp;quot;Encode complete\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        return 0;&lt;br /&gt;
&lt;br /&gt;
 failed:&lt;br /&gt;
        perror(&amp;quot;:&amp;quot;);&lt;br /&gt;
        printf(&amp;quot;failed\n&amp;quot;);&lt;br /&gt;
        if (fd) &lt;br /&gt;
                fclose(fd);&lt;br /&gt;
        else&lt;br /&gt;
                fprintf(stderr, &amp;quot;Failed to open infile &amp;#039;%s&amp;#039;\r\n&amp;quot;, infilename);&lt;br /&gt;
&lt;br /&gt;
        if (out) &lt;br /&gt;
                fclose(out);&lt;br /&gt;
        else if (fd)&lt;br /&gt;
                fprintf(stderr, &amp;quot;Failed to open outfile &amp;#039;%s&amp;#039;\r\n&amp;quot;, &lt;br /&gt;
                                arg_outfilename ? arg_outfilename : &amp;quot;outfile.gz&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        if (compare)&lt;br /&gt;
                fclose(compare);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 *&lt;br /&gt;
 * dsf_pack: HDi Dune Media Player service file packer.&lt;br /&gt;
 * &lt;br /&gt;
 * Accident 2009: Epoch, encode small files, needs extra work for&lt;br /&gt;
 *                encodes over one page (I think) Never tried it.&lt;br /&gt;
 *&lt;br /&gt;
 * This is woefully incomplete. But it was enough for my requirements.&lt;br /&gt;
 *&lt;br /&gt;
 * For example: create a file with:&lt;br /&gt;
 * #!/bin/sh&lt;br /&gt;
 * /usr/sbin/telnetd &amp;amp;&lt;br /&gt;
 * exit 0&lt;br /&gt;
 *&lt;br /&gt;
 * Then pack it up. Note that the file must be named&lt;br /&gt;
 * &amp;quot;dune_service_XXXX.dsf&amp;quot; for it to be recognised.&lt;br /&gt;
 *&lt;br /&gt;
 * When the Dune runs it, it copies it to /tmp, gunzips it as&lt;br /&gt;
 * /tmp/service and runs it.&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.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;
&lt;br /&gt;
&lt;br /&gt;
extern int getopt();&lt;br /&gt;
extern char *optarg;&lt;br /&gt;
extern int optind;&lt;br /&gt;
&lt;br /&gt;
static char *arg_decode      = NULL;&lt;br /&gt;
static char *arg_encode      = NULL;&lt;br /&gt;
static char *arg_outfilename = NULL;&lt;br /&gt;
static char *arg_comparename = NULL;&lt;br /&gt;
static int   arg_verbose     = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// XOR block pulled from &amp;quot;shell&amp;quot;.&lt;br /&gt;
static uint8_t key[] = {&lt;br /&gt;
        0xDA, 0xDF, 0xDD, 0x05, 0x53, 0x40, 0x45, 0xb3, 0xee, 0xcc, 0x26, 0x5e, &lt;br /&gt;
        0xb8, 0x0b, 0x25, 0xdb, 0xa2, 0xe6, 0xec, 0x63, 0xf2, 0xe1, 0x19, 0x76, &lt;br /&gt;
        0x08, 0x43, 0x38, 0x6f, 0xc5, 0xc1, 0x85, 0x46&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
static void options(char *prog)&lt;br /&gt;
{&lt;br /&gt;
        printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        printf(&amp;quot;%s - Dune .dsf encode/decode program\n\n&amp;quot;, prog);&lt;br /&gt;
        printf(&amp;quot;  options:\n&amp;quot;);&lt;br /&gt;
        printf(&amp;quot;  -h          : display usage help (this output)\n&amp;quot;);&lt;br /&gt;
        printf(&amp;quot;  -d filename : decode .dsf to outfile.gz\n&amp;quot;);&lt;br /&gt;
        printf(&amp;quot;  -e filename : encode infile.gz to .dsf\n&amp;quot;);&lt;br /&gt;
        printf(&amp;quot;  -o filename : specify different output filename\n&amp;quot;);&lt;br /&gt;
        printf(&amp;quot;  -c filename : compare encode with file\n&amp;quot;);&lt;br /&gt;
        printf(&amp;quot;  -v          : verbose it up!\n&amp;quot;);&lt;br /&gt;
        printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        printf(&amp;quot;Be aware that dune service files have to be named dune_service_*.dsf\n\n&amp;quot;);&lt;br /&gt;
        printf(&amp;quot;Dune encoding tool by Accident.\nResist the temptation to do bad!\n\n&amp;quot;);&lt;br /&gt;
        exit(0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void arguments(int argc, char **argv)&lt;br /&gt;
{&lt;br /&gt;
        int opt;&lt;br /&gt;
    &lt;br /&gt;
        while ((opt=getopt(argc, argv, &lt;br /&gt;
                                           &amp;quot;hd:e:o:vc:&amp;quot;&lt;br /&gt;
                                           )) != -1) {&lt;br /&gt;
&lt;br /&gt;
                switch(opt) {&lt;br /&gt;
&lt;br /&gt;
                case &amp;#039;h&amp;#039;:&lt;br /&gt;
                        options(argv[0]);&lt;br /&gt;
                        break;&lt;br /&gt;
                case &amp;#039;d&amp;#039;:&lt;br /&gt;
                        arg_decode = strdup(optarg);&lt;br /&gt;
                        break;&lt;br /&gt;
                case &amp;#039;e&amp;#039;:&lt;br /&gt;
                        arg_encode = strdup(optarg);&lt;br /&gt;
                        break;&lt;br /&gt;
                case &amp;#039;o&amp;#039;:&lt;br /&gt;
                        arg_outfilename = strdup(optarg);&lt;br /&gt;
                        break;&lt;br /&gt;
                case &amp;#039;c&amp;#039;:&lt;br /&gt;
                        arg_comparename = strdup(optarg);&lt;br /&gt;
                        break;&lt;br /&gt;
                case &amp;#039;v&amp;#039;:&lt;br /&gt;
                        arg_verbose++;&lt;br /&gt;
                        break;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (!arg_decode &amp;amp;&amp;amp; !arg_encode)&lt;br /&gt;
                options(argv[0]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char **argv)&lt;br /&gt;
{&lt;br /&gt;
        FILE *fd = NULL, *out = NULL;&lt;br /&gt;
        uint8_t buffer[0x1000], v0,v1,a1,nv0;&lt;br /&gt;
        uint32_t red, i, half_red;&lt;br /&gt;
        uint32_t decode = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        arguments(argc, argv);&lt;br /&gt;
&lt;br /&gt;
        if (arg_decode) &lt;br /&gt;
                dune_decode(arg_decode);&lt;br /&gt;
&lt;br /&gt;
        if (arg_encode) &lt;br /&gt;
                dune_encode(arg_encode);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int dune_decode(char *infilename)&lt;br /&gt;
{&lt;br /&gt;
        FILE *fd = NULL, *out = NULL;&lt;br /&gt;
        uint8_t buffer[0x1000], v0,v1,a1,nv0;&lt;br /&gt;
        uint32_t red, i, half_red;&lt;br /&gt;
        uint32_t decode = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        fd = fopen(infilename, &amp;quot;rb&amp;quot;);&lt;br /&gt;
        if (!fd) goto failed;&lt;br /&gt;
&lt;br /&gt;
        out = fopen(arg_outfilename ? arg_outfilename : &amp;quot;outfile.gz&amp;quot;, &amp;quot;wb&amp;quot;);&lt;br /&gt;
        if (!out) goto failed;&lt;br /&gt;
&lt;br /&gt;
        // read header&lt;br /&gt;
        if (fread(buffer, 0x141, 1, fd) != 1) goto failed;&lt;br /&gt;
&lt;br /&gt;
        // Read blocks:&lt;br /&gt;
        while ((red = fread(buffer, 1, sizeof(buffer), fd)) &amp;gt; 0) {&lt;br /&gt;
                // Decode block&lt;br /&gt;
&lt;br /&gt;
                if (arg_verbose)&lt;br /&gt;
                        printf(&amp;quot;read %x \n&amp;quot;, red);&lt;br /&gt;
&lt;br /&gt;
                half_red = red&amp;gt;&amp;gt;1;&lt;br /&gt;
&lt;br /&gt;
                for (i = 0; i &amp;lt; half_red; i++) {&lt;br /&gt;
&lt;br /&gt;
                        v0 = buffer[i + half_red] ;&lt;br /&gt;
                        v1 = key[decode];&lt;br /&gt;
                        a1 = buffer[ i ];&lt;br /&gt;
&lt;br /&gt;
                        nv0 = v0;&lt;br /&gt;
                        nv0 ^= v1;&lt;br /&gt;
                        nv0 ^= a1;&lt;br /&gt;
&lt;br /&gt;
                        if (arg_verbose)&lt;br /&gt;
                                printf(&amp;quot;  [%x]=%02X, xor %02X, [%x]=%02X, storing %02X\n&amp;quot;,&lt;br /&gt;
                                           i+half_red, v0, v1, i, a1, nv0);&lt;br /&gt;
&lt;br /&gt;
                        buffer[i] = nv0;&lt;br /&gt;
&lt;br /&gt;
                        decode++;&lt;br /&gt;
                        if (decode &amp;gt;= sizeof(key))&lt;br /&gt;
                                decode = 0;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                for (i = half_red; i &amp;lt; red; i++) {&lt;br /&gt;
&lt;br /&gt;
                        v1 = key[decode];&lt;br /&gt;
                        a1 = buffer[ i ];&lt;br /&gt;
&lt;br /&gt;
                        nv0 = v1;&lt;br /&gt;
                        nv0 ^= a1;&lt;br /&gt;
&lt;br /&gt;
                        if (arg_verbose)&lt;br /&gt;
                                printf(&amp;quot;  xor %02X, [%x]=%02X, storing %02X\n&amp;quot;,&lt;br /&gt;
                                           v1, i, a1, nv0);&lt;br /&gt;
&lt;br /&gt;
                        buffer[i] = nv0;&lt;br /&gt;
&lt;br /&gt;
                        decode++;&lt;br /&gt;
                        if (decode &amp;gt;= sizeof(key))&lt;br /&gt;
                                decode = 0;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                // Write block&lt;br /&gt;
                fwrite(buffer, red, 1, out);&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        fclose(fd);&lt;br /&gt;
        fclose(out);&lt;br /&gt;
&lt;br /&gt;
        printf(&amp;quot;Decode complete\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        return 0;&lt;br /&gt;
&lt;br /&gt;
 failed:&lt;br /&gt;
        perror(&amp;quot;:&amp;quot;);&lt;br /&gt;
        printf(&amp;quot;failed\n&amp;quot;);&lt;br /&gt;
        if (fd) &lt;br /&gt;
                fclose(fd);&lt;br /&gt;
        else&lt;br /&gt;
                fprintf(stderr, &amp;quot;Failed to open infile &amp;#039;%s&amp;#039;\r\n&amp;quot;, infilename);&lt;br /&gt;
&lt;br /&gt;
        if (out) &lt;br /&gt;
                fclose(out);&lt;br /&gt;
        else if (fd)&lt;br /&gt;
                fprintf(stderr, &amp;quot;Failed to open outfile &amp;#039;%s&amp;#039;\r\n&amp;quot;, &lt;br /&gt;
                                arg_outfilename ? arg_outfilename : &amp;quot;outfile.gz&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int dune_encode(char *infilename)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
        FILE *fd = NULL, *out = NULL, *compare=NULL;&lt;br /&gt;
        uint8_t buffer[0x1000], v0,v1,a1,nv0;&lt;br /&gt;
        uint8_t compbuf[0x1000];&lt;br /&gt;
        uint32_t red, i, half_red;&lt;br /&gt;
        uint32_t decode = 0;&lt;br /&gt;
        unsigned char stuff[] = {&lt;br /&gt;
                0x1d,0x25,0x7a,0xe4,0x27,0xff,0xe9,0x8c,0x58,0x0a,0x8b,0x18,0x70,0xbb,0xf2,0x87,&lt;br /&gt;
                0x3a,0xf2,0x41,0x68,0x9e,0x81,0x85,0xc6,0x82,0xe1,0x92,0x7d,0xa0,0x4e,0x5b,0xbd,&lt;br /&gt;
                0x73,0xd5,0xa1,0x9a,0xd4,0x8a,0x27,0x2c,0x95,0xb2,0x44,0x05,0x6d,0x37,0x8c,0xa7,&lt;br /&gt;
                0x29,0xce,0x0f,0xc7,0x4f,0x94,0x8e,0xd2,0x75,0x20,0x4f,0x15,0x6e,0xaa,0xd3,0xe1,0x7f&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        fd = fopen(infilename, &amp;quot;rb&amp;quot;);&lt;br /&gt;
        if (!fd) goto failed;&lt;br /&gt;
&lt;br /&gt;
        out = fopen(arg_outfilename ? arg_outfilename : &amp;quot;outfile.dsf&amp;quot;, &amp;quot;wb&amp;quot;);&lt;br /&gt;
        if (!out) goto failed;&lt;br /&gt;
&lt;br /&gt;
        if (arg_comparename)&lt;br /&gt;
                compare=fopen(arg_comparename, &amp;quot;rb&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        // read header&lt;br /&gt;
        fwrite(&amp;quot;DUNE SERVICE FILE&amp;quot;, 18, 1, out);&lt;br /&gt;
        // One day work out what these are.&lt;br /&gt;
        fwrite(&amp;quot;86673687&amp;quot;, 9, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;54139262&amp;quot;, 9, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;53151487&amp;quot;, 9, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;50852538&amp;quot;, 9, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;38155310&amp;quot;, 9, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;9047468&amp;quot;, 8, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;46935104&amp;quot;, 9, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;64658461&amp;quot;, 9, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;64007208&amp;quot;, 9, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;93556737&amp;quot;, 9, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;88478556&amp;quot;, 9, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;6195915&amp;quot;, 8, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;677883&amp;quot;, 7, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;9851071&amp;quot;, 8, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;82589884&amp;quot;, 9, 1, out);&lt;br /&gt;
        fwrite(&amp;quot;81953245&amp;quot;, 9, 1, out);&lt;br /&gt;
&lt;br /&gt;
        // First header thing is 0x100.&lt;br /&gt;
        fseek(out, 0x100, SEEK_SET);&lt;br /&gt;
&lt;br /&gt;
        // Then there is 0x41 bytes of something.&lt;br /&gt;
        fwrite(stuff, sizeof(stuff), 1, out);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        if (compare)&lt;br /&gt;
                fseek(compare, 0x141, SEEK_SET);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        // Read blocks:&lt;br /&gt;
        while ((red = fread(buffer, 1, sizeof(buffer), fd)) &amp;gt; 0) {&lt;br /&gt;
                // Encode block&lt;br /&gt;
                if (arg_verbose)&lt;br /&gt;
                        printf(&amp;quot;read %x \n&amp;quot;, red);&lt;br /&gt;
&lt;br /&gt;
                if (compare)&lt;br /&gt;
                        fread(compbuf, 1, red, compare);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                half_red = red&amp;gt;&amp;gt;1;&lt;br /&gt;
                decode = half_red % sizeof(key);&lt;br /&gt;
                if (arg_verbose) printf(&amp;quot;Decode start %d\n&amp;quot;, decode);&lt;br /&gt;
&lt;br /&gt;
                for (i = half_red; i &amp;lt; red; i++) {&lt;br /&gt;
&lt;br /&gt;
                        v1 = key[decode];&lt;br /&gt;
                        a1 = buffer[ i ];&lt;br /&gt;
&lt;br /&gt;
                        nv0 = v1;&lt;br /&gt;
                        nv0 ^= a1;&lt;br /&gt;
&lt;br /&gt;
                        if (arg_verbose)&lt;br /&gt;
                                printf(&amp;quot;  xor %02X, [%x]=%02X, storing %02X\n&amp;quot;,&lt;br /&gt;
                                           v1, i, a1, nv0);&lt;br /&gt;
&lt;br /&gt;
                        buffer[i] = nv0;&lt;br /&gt;
&lt;br /&gt;
                        if (compare &amp;amp;&amp;amp;&lt;br /&gt;
                                buffer[i] != compbuf[i])&lt;br /&gt;
                                printf(&amp;quot;Compare buf has %02X\n&amp;quot;, compbuf[i]);&lt;br /&gt;
&lt;br /&gt;
                        decode++;&lt;br /&gt;
                        if (decode &amp;gt;= sizeof(key))&lt;br /&gt;
                                decode = 0;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                decode = 0;&lt;br /&gt;
                if (arg_verbose) printf(&amp;quot;Halfway point as decode %d\n&amp;quot;, decode);&lt;br /&gt;
&lt;br /&gt;
                for (i = 0; i &amp;lt; half_red; i++) {&lt;br /&gt;
&lt;br /&gt;
                        v0 = buffer[i + half_red] ;&lt;br /&gt;
                        v1 = key[decode];&lt;br /&gt;
                        a1 = buffer[ i ];&lt;br /&gt;
&lt;br /&gt;
                        nv0 = v0;&lt;br /&gt;
                        nv0 ^= v1;&lt;br /&gt;
                        nv0 ^= a1;&lt;br /&gt;
&lt;br /&gt;
                        if (arg_verbose)&lt;br /&gt;
                                printf(&amp;quot;  [%x]=%02X, xor %02X, [%x]=%02X, storing %02X\n&amp;quot;,&lt;br /&gt;
                                           i+half_red, v0, v1, i, a1, nv0);&lt;br /&gt;
&lt;br /&gt;
                        buffer[i] = nv0;&lt;br /&gt;
&lt;br /&gt;
                        if (compare &amp;amp;&amp;amp;&lt;br /&gt;
                                buffer[i] != compbuf[i])&lt;br /&gt;
                                printf(&amp;quot;Compare buf has %02X\n&amp;quot;, compbuf[i]);&lt;br /&gt;
&lt;br /&gt;
                        decode++;&lt;br /&gt;
                        if (decode &amp;gt;= sizeof(key))&lt;br /&gt;
                                decode = 0;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                // Write block&lt;br /&gt;
                fwrite(buffer, red, 1, out);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        fclose(fd);&lt;br /&gt;
        fclose(out);&lt;br /&gt;
        if (compare)&lt;br /&gt;
                fclose(compare);&lt;br /&gt;
&lt;br /&gt;
        printf(&amp;quot;Encode complete\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        return 0;&lt;br /&gt;
&lt;br /&gt;
 failed:&lt;br /&gt;
        perror(&amp;quot;:&amp;quot;);&lt;br /&gt;
        printf(&amp;quot;failed\n&amp;quot;);&lt;br /&gt;
        if (fd) &lt;br /&gt;
                fclose(fd);&lt;br /&gt;
        else&lt;br /&gt;
                fprintf(stderr, &amp;quot;Failed to open infile &amp;#039;%s&amp;#039;\r\n&amp;quot;, infilename);&lt;br /&gt;
&lt;br /&gt;
        if (out) &lt;br /&gt;
                fclose(out);&lt;br /&gt;
        else if (fd)&lt;br /&gt;
                fprintf(stderr, &amp;quot;Failed to open outfile &amp;#039;%s&amp;#039;\r\n&amp;quot;, &lt;br /&gt;
                                arg_outfilename ? arg_outfilename : &amp;quot;outfile.gz&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        if (compare)&lt;br /&gt;
                fclose(compare);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
--[[User:Gaston|Gaston]] 17:07, 19 January 2011 (JST)&lt;/div&gt;</summary>
		<author><name>Lundman</name></author>
	</entry>
</feed>