force use of pandoc version >= 3.1.12.2
The `bin/pandoc-wrapper.sh` tool will verify that the ssytem has a recent enough version of `pandoc(1)`. We explain why we insist on `pandoc(1)`. version >= 3.1.12.2 in comments where the $PANDOC_MIN_VERSION is set. Added `--wrap=preserve` as a default argument to `pandoc(1)`. While this change will impact every HTML file generated, we believe this will improve the ability of someone to look at the generated HTML and correlate with the original markdown. Changed `bin/pandoc-wrapper.sh` VERSION from "1.4.2 2024-03-17" to "1.4.3 2024-03-18". Performed `make www` to achieve all of the above and to generate HTML using the new `--wrap=preserve` `pandoc(1)` mode.
This commit is contained in:
1 parent
9eb7a54e9f
commit
b0b212acb1
402 files changed
+37061
-55132
No files matched your search
+118
-171
@@ -129,9 +129,9 @@
|
||||
|
||||
<h2 id="author"><a name="author"></a>Author:</h2>
|
||||
<ul>
|
||||
<li>Name: <a href="../../authors.html#Maurizio_Monge">Maurizio
|
||||
Monge</a><br> Location: <a href="../../location.html#IT">IT</a> -
|
||||
<em>Italian Republic</em> (<em>Italy</em>) <br><br></li>
|
||||
<li>Name: <a href="../../authors.html#Maurizio_Monge">Maurizio Monge</a><br>
|
||||
Location: <a href="../../location.html#IT">IT</a> - <em>Italian Republic</em> (<em>Italy</em>)
|
||||
<br><br></li>
|
||||
</ul>
|
||||
|
||||
<!-- END: next line ends content generated by: bin/output-index-author.sh -->
|
||||
@@ -140,63 +140,53 @@ Monge</a><br> Location: <a href="../../location.html#IT">IT</a> -
|
||||
<!-- START: this line starts content for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
|
||||
|
||||
<h2 id="to-build">To build:</h2>
|
||||
<p>Make sure you have the SDL1 (not SDL2!) development environment
|
||||
installed.</p>
|
||||
<p>Make sure you have the SDL1 (not SDL2!) development environment installed.</p>
|
||||
<div class="sourceCode" id="cb1"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="fu">make</span></span></code></pre></div>
|
||||
<p>There is alternate version that lets you redefine the width and
|
||||
height and number of iterations to use. See <a
|
||||
href="#alternate-code">Alternate code</a> below.</p>
|
||||
<p>There is alternate version that lets you redefine the width and height and number
|
||||
of iterations to use. See <a href="#alternate-code">Alternate code</a> below.</p>
|
||||
<h3 id="bugs-and-misfeatures">Bugs and (Mis)features:</h3>
|
||||
<p>The current status of this entry is:</p>
|
||||
<pre><code>STATUS: doesn't work with some platforms - please help us fix
|
||||
STATUS: INABIAF - please **DO NOT** fix</code></pre>
|
||||
<p>For more detailed information see <a
|
||||
href="../../bugs.html#2006_monge">2006 monge bugs</a>.</p>
|
||||
<p>For more detailed information see <a href="../../bugs.html#2006_monge">2006 monge bugs</a>.</p>
|
||||
<h2 id="to-use">To use:</h2>
|
||||
<div class="sourceCode" id="cb3"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./monge</span> expression ...</span></code></pre></div>
|
||||
<p>Incorrect formulas will ungracefully crash the program.</p>
|
||||
<h2 id="try">Try:</h2>
|
||||
<div class="sourceCode" id="cb4"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./try.sh</span></span></code></pre></div>
|
||||
<h2 id="alternate-code">Alternate code:</h2>
|
||||
<p>This alternate code lets you specify the width and height of the
|
||||
image as well as the number of iterations to perform.</p>
|
||||
<p>This alternate code lets you specify the width and height of the image as well
|
||||
as the number of iterations to perform.</p>
|
||||
<h3 id="alternate-build">Alternate build:</h3>
|
||||
<p>To use the default values, the same as <a href="monge.c">monge.c</a>,
|
||||
just do:</p>
|
||||
<p>To use the default values, the same as <a href="monge.c">monge.c</a>, just do:</p>
|
||||
<div class="sourceCode" id="cb5"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a><span class="fu">make</span> alt</span></code></pre></div>
|
||||
<p>But if you wish to actually make use of it you will want to redefine
|
||||
one or more of the variables <code>W</code>, <code>H</code> and
|
||||
<code>I</code>. The defaults are (respectively) 400, 300 and \128. If
|
||||
you wish to change the image size to 500x500 but keep the iterations the
|
||||
same then do:</p>
|
||||
<p>But if you wish to actually make use of it you will want to redefine one or more
|
||||
of the variables <code>W</code>, <code>H</code> and <code>I</code>. The defaults are (respectively) 400, 300 and
|
||||
\128. If you wish to change the image size to 500x500 but keep the iterations
|
||||
the same then do:</p>
|
||||
<div class="sourceCode" id="cb6"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a><span class="fu">make</span> clobber WIDTH=500 HEIGHT=500 alt</span></code></pre></div>
|
||||
<p>If you wish to keep the dimensions the same but change the iterations
|
||||
to 512:</p>
|
||||
<p>If you wish to keep the dimensions the same but change the iterations to 512:</p>
|
||||
<div class="sourceCode" id="cb7"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a><span class="fu">make</span> clobber ITERATIONS=512 alt</span></code></pre></div>
|
||||
<p>If you specify a value less than 1 for any of these it sets it back
|
||||
to the default. The value 1 was selected arbitrarily and such a small
|
||||
number as 1 will not do anything useful but as long as it’s at least 1
|
||||
it’ll not be redefined. It does not try taking care of overflows but
|
||||
such large values would be impractical anyway.</p>
|
||||
<p>If you specify a value less than 1 for any of these it sets it back to the
|
||||
default. The value 1 was selected arbitrarily and such a small number as 1 will
|
||||
not do anything useful but as long as it’s at least 1 it’ll not be redefined.
|
||||
It does not try taking care of overflows but such large values would be impractical
|
||||
anyway.</p>
|
||||
<h3 id="alternate-use">Alternate use:</h3>
|
||||
<p>Use <code>monge.alt</code> exactly as you would <code>monge</code>
|
||||
above.</p>
|
||||
<p>Use <code>monge.alt</code> exactly as you would <code>monge</code> above.</p>
|
||||
<h3 id="alternate-try">Alternate try:</h3>
|
||||
<div class="sourceCode" id="cb8"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./try.alt.sh</span></span></code></pre></div>
|
||||
<h2 id="judges-remarks">Judges’ remarks:</h2>
|
||||
<p>For those who are familiar with the previous <a
|
||||
href="../../authors.html">IOCCC entries</a>, this program is best
|
||||
described as “<a href="../../1994/tvr/index.html">1994/tvr</a> meets <a
|
||||
href="../../2001/bellard/index.html">2001/bellard</a>”. Here you have
|
||||
mouse-manipulated fractals AND generated binary code, all in one
|
||||
package.</p>
|
||||
<p>A more appropriate award could have been “Best abuse of the rules”,
|
||||
because on a non-x86-based architecture this program is, quite
|
||||
predictably, a dud.</p>
|
||||
<p>At the time of judging we were too mesmerized by the graphics to
|
||||
realize it; and, after all, this entry does take a special effort to
|
||||
work on both <code>i386</code> and <code>x86_64</code>. Portable it is!
|
||||
:)</p>
|
||||
<p>For those who are familiar with the previous <a href="../../authors.html">IOCCC entries</a>,
|
||||
this program is best described as “<a href="../../1994/tvr/index.html">1994/tvr</a> meets
|
||||
<a href="../../2001/bellard/index.html">2001/bellard</a>”. Here you have mouse-manipulated
|
||||
fractals AND generated binary code, all in one package.</p>
|
||||
<p>A more appropriate award could have been “Best abuse of the
|
||||
rules”, because on a non-x86-based architecture this program
|
||||
is, quite predictably, a dud.</p>
|
||||
<p>At the time of judging we were too mesmerized by the graphics
|
||||
to realize it; and, after all, this entry does take a special
|
||||
effort to work on both <code>i386</code> and <code>x86_64</code>. Portable it is! :)</p>
|
||||
<h2 id="authors-remarks">Author’s remarks:</h2>
|
||||
<h3 id="for-the-impatient">For the impatient:</h3>
|
||||
<ol start="0" type="1">
|
||||
@@ -206,37 +196,29 @@ work on both <code>i386</code> and <code>x86_64</code>. Portable it is!
|
||||
<ol type="1">
|
||||
<li>Run:</li>
|
||||
</ol>
|
||||
<div class="sourceCode" id="cb10"><pre
|
||||
class="sourceCode sh"><code class="sourceCode bash"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./monge</span> <span class="st">"z = 0"</span> <span class="st">"z = z*z + c; Abs2(z) < 4"</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb10"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./monge</span> <span class="st">"z = 0"</span> <span class="st">"z = z*z + c; Abs2(z) < 4"</span></span></code></pre></div>
|
||||
<ol start="2" type="1">
|
||||
<li><p>Keep clicking with left or right button to zoom in or
|
||||
out.</p></li>
|
||||
<li><p>Use the number pad <code>+</code> and <code>-</code> to
|
||||
increase/decrease the iteration count when needed.</p></li>
|
||||
<li><p>Enjoy, unless you’re more interested in trying to understand how
|
||||
it works. :)</p></li>
|
||||
<li><p>Keep clicking with left or right button to zoom in or out.</p></li>
|
||||
<li><p>Use the number pad <code>+</code> and <code>-</code> to increase/decrease the iteration count when
|
||||
needed.</p></li>
|
||||
<li><p>Enjoy, unless you’re more interested in trying to understand how it works. :)</p></li>
|
||||
</ol>
|
||||
<h3 id="introduction">Introduction</h3>
|
||||
<p>This is a fractal generator that supports custom formulas and real
|
||||
time zoom. The program needs to be run with two arguments, the first
|
||||
being a semicolon separated list of assignments to do once per pixel,
|
||||
and the second a semicolon separated list of assignments and conditions
|
||||
that will be executed (and conditions checked) for each iteration (up to
|
||||
the maximum). Using the left and right mouse buttons you will be able to
|
||||
zoom in and out (a la <a
|
||||
href="https://github.com/xaos-project/XaoS">XaoS</a>), the zooming
|
||||
algorithm is a bit slower than <code>XaoS</code>’s but it should give
|
||||
slightly better results.</p>
|
||||
<p>Formulas can use all <code>a-z</code> (lowercase) variables, and the
|
||||
special variables <code>c</code> and <code>i</code> are respectively set
|
||||
by default to the complex coordinate of the pixel and to the complex
|
||||
imaginary <code>i</code>.</p>
|
||||
<p>All the constant numbers will be interpreted as real double values.
|
||||
Each expression must be an assignment (<code>[variable] = [expr]</code>)
|
||||
or a comparison with <code><</code> or <code>></code>
|
||||
(<code>[expr1] < [expr2]</code> or
|
||||
<code>[expr1] > [expr2]</code>), and you can add spaces as you like
|
||||
(as understood by the C function <code>isspace()</code>).</p>
|
||||
<p>This is a fractal generator that supports custom formulas and real time zoom.
|
||||
The program needs to be run with two arguments, the first being a semicolon
|
||||
separated list of assignments to do once per pixel, and the second a semicolon
|
||||
separated list of assignments and conditions that will be executed (and
|
||||
conditions checked) for each iteration (up to the maximum). Using the left and
|
||||
right mouse buttons you will be able to zoom in and out (a la
|
||||
<a href="https://github.com/xaos-project/XaoS">XaoS</a>), the zooming algorithm is a bit
|
||||
slower than <code>XaoS</code>’s but it should give slightly better results.</p>
|
||||
<p>Formulas can use all <code>a-z</code> (lowercase) variables, and the special
|
||||
variables <code>c</code> and <code>i</code> are respectively set by default to the
|
||||
complex coordinate of the pixel and to the complex imaginary <code>i</code>.</p>
|
||||
<p>All the constant numbers will be interpreted as real double values. Each
|
||||
expression must be an assignment (<code>[variable] = [expr]</code>) or a comparison with
|
||||
<code><</code> or <code>></code> (<code>[expr1] < [expr2]</code> or <code>[expr1] > [expr2]</code>), and you can add spaces
|
||||
as you like (as understood by the C function <code>isspace()</code>).</p>
|
||||
<p>Supported operations and functions are:</p>
|
||||
<pre><code>Operation | Description
|
||||
:-------- | :----------
|
||||
@@ -257,154 +239,119 @@ or a comparison with <code><</code> or <code>></code>
|
||||
<ul>
|
||||
<li>Mandelbrot:</li>
|
||||
</ul>
|
||||
<div class="sourceCode" id="cb12"><pre
|
||||
class="sourceCode sh"><code class="sourceCode bash"><span id="cb12-1"><a href="#cb12-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./monge</span> <span class="st">"z=1"</span> <span class="st">"z=z*z+c; Abs2(z)<4"</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb12"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb12-1"><a href="#cb12-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./monge</span> <span class="st">"z=1"</span> <span class="st">"z=z*z+c; Abs2(z)<4"</span></span></code></pre></div>
|
||||
<ul>
|
||||
<li>Mandelbrot (return time variation):</li>
|
||||
</ul>
|
||||
<div class="sourceCode" id="cb13"><pre
|
||||
class="sourceCode sh"><code class="sourceCode bash"><span id="cb13-1"><a href="#cb13-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./monge</span> <span class="st">"z=c"</span> <span class="st">"z=z*z+c; Abs2(z-c)>0.0001"</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb13"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb13-1"><a href="#cb13-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./monge</span> <span class="st">"z=c"</span> <span class="st">"z=z*z+c; Abs2(z-c)>0.0001"</span></span></code></pre></div>
|
||||
<ul>
|
||||
<li>Julia, for <code>c=0.31+i*0.5</code>:</li>
|
||||
</ul>
|
||||
<div class="sourceCode" id="cb14"><pre
|
||||
class="sourceCode sh"><code class="sourceCode bash"><span id="cb14-1"><a href="#cb14-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./monge</span> <span class="st">"z=c; c=0.31+i*0.5"</span> <span class="st">"z=z*z+c; Abs2(z)<4"</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb14"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb14-1"><a href="#cb14-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./monge</span> <span class="st">"z=c; c=0.31+i*0.5"</span> <span class="st">"z=z*z+c; Abs2(z)<4"</span></span></code></pre></div>
|
||||
<ul>
|
||||
<li>Julia (return time variation), <code>for c=0.31+i*0.5</code>:</li>
|
||||
</ul>
|
||||
<div class="sourceCode" id="cb15"><pre
|
||||
class="sourceCode sh"><code class="sourceCode bash"><span id="cb15-1"><a href="#cb15-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./monge</span> <span class="st">"z=c; c=0.31+i*0.5"</span> <span class="st">"z=z*z+c; Abs2(z-c)>0.0001"</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb15"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb15-1"><a href="#cb15-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./monge</span> <span class="st">"z=c; c=0.31+i*0.5"</span> <span class="st">"z=z*z+c; Abs2(z-c)>0.0001"</span></span></code></pre></div>
|
||||
<ul>
|
||||
<li>Newton, for <code>x^3-1</code>:</li>
|
||||
</ul>
|
||||
<div class="sourceCode" id="cb16"><pre
|
||||
class="sourceCode sh"><code class="sourceCode bash"><span id="cb16-1"><a href="#cb16-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./monge</span> <span class="st">"z=c"</span> <span class="st">"p=z; z=0.6666*z+0.3333/(z*z); Abs2(p-z) > 0.001"</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb16"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb16-1"><a href="#cb16-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./monge</span> <span class="st">"z=c"</span> <span class="st">"p=z; z=0.6666*z+0.3333/(z*z); Abs2(p-z) > 0.001"</span></span></code></pre></div>
|
||||
<ul>
|
||||
<li>Newton-Mandelbrot:</li>
|
||||
</ul>
|
||||
<div class="sourceCode" id="cb17"><pre
|
||||
class="sourceCode sh"><code class="sourceCode bash"><span id="cb17-1"><a href="#cb17-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./monge</span> <span class="st">"z=0"</span> <span class="st">"p=z; z=z-(z*z*z + (c-1)*z - c)/(3*z*z+c-1); Abs2(p-z) > 0.001"</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb17"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb17-1"><a href="#cb17-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./monge</span> <span class="st">"z=0"</span> <span class="st">"p=z; z=z-(z*z*z + (c-1)*z - c)/(3*z*z+c-1); Abs2(p-z) > 0.001"</span></span></code></pre></div>
|
||||
<ul>
|
||||
<li>Phoenix, Mandelbrot version:</li>
|
||||
</ul>
|
||||
<div class="sourceCode" id="cb18"><pre
|
||||
class="sourceCode sh"><code class="sourceCode bash"><span id="cb18-1"><a href="#cb18-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./monge</span> <span class="st">"z=0; q=0"</span> <span class="st">"t=z; z=z*z+Re(c)+Im(c)*q; q=t; Abs2(z)<4"</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb18"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb18-1"><a href="#cb18-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./monge</span> <span class="st">"z=0; q=0"</span> <span class="st">"t=z; z=z*z+Re(c)+Im(c)*q; q=t; Abs2(z)<4"</span></span></code></pre></div>
|
||||
<ul>
|
||||
<li>Phoenix, Julia version for <code>c=0.56667-i*0.5</code>:</li>
|
||||
</ul>
|
||||
<div class="sourceCode" id="cb19"><pre
|
||||
class="sourceCode sh"><code class="sourceCode bash"><span id="cb19-1"><a href="#cb19-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./monge</span> <span class="st">"z=c; c=0.56667-i*0.5; q=0"</span> <span class="st">"t=z; z=z*z+Re(c)+Im(c)*q; q=t; Abs2(z)<4"</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb19"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb19-1"><a href="#cb19-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./monge</span> <span class="st">"z=c; c=0.56667-i*0.5; q=0"</span> <span class="st">"t=z; z=z*z+Re(c)+Im(c)*q; q=t; Abs2(z)<4"</span></span></code></pre></div>
|
||||
<h3 id="compilation-and-portability">Compilation and portability</h3>
|
||||
<p>This program will only work on x86 (with an x87 FPU) or x86_64
|
||||
machines, but it requires the SDL library.</p>
|
||||
<p>Another system requirement is the <code>mmap(2)</code> function (as
|
||||
<code>#define</code>d at the beginning of the program). If it is not
|
||||
available the macro <code>M(a)</code> will have to be replaced with a
|
||||
system dependent function that allocates readable, writable <em>AND</em>
|
||||
executable memory (it will not be possible to make this program run on
|
||||
paranoid systems (like OpenBSD IIRC) that do not allow <code>rwx</code>
|
||||
memory).</p>
|
||||
<p>However I was able to compile and make work the program under Linux
|
||||
(Debian/x86 and openSUSE/x86_64) and under Cygwin/x86. A friend of mine
|
||||
was able to make it work under macOS too.</p>
|
||||
<p>If you want you can change the window width and height, or the
|
||||
default number of iterations (that one can be tweaked at runtime,
|
||||
anyway) by changing the definitions of <code>W</code>, <code>H</code>
|
||||
and <code>I</code> at the beginning of the code.</p>
|
||||
<h3 id="caveats-i-just-a-selected-few-of-them">Caveats (I just a
|
||||
selected few of them!)</h3>
|
||||
<p>This program will only work on x86 (with an x87 FPU) or x86_64 machines,
|
||||
but it requires the SDL library.</p>
|
||||
<p>Another system requirement is the <code>mmap(2)</code> function (as <code>#define</code>d at the
|
||||
beginning of the program). If it is not available the macro <code>M(a)</code> will have to
|
||||
be replaced with a system dependent function that allocates readable, writable
|
||||
<em>AND</em> executable memory (it will not be possible to make this program run on
|
||||
paranoid systems (like OpenBSD IIRC) that do not allow <code>rwx</code> memory).</p>
|
||||
<p>However I was able to compile and make work the program under
|
||||
Linux (Debian/x86 and openSUSE/x86_64) and under Cygwin/x86. A
|
||||
friend of mine was able to make it work under macOS too.</p>
|
||||
<p>If you want you can change the window width and height, or the default
|
||||
number of iterations (that one can be tweaked at runtime, anyway) by
|
||||
changing the definitions of <code>W</code>, <code>H</code> and <code>I</code> at the beginning of the code.</p>
|
||||
<h3 id="caveats-i-just-a-selected-few-of-them">Caveats (I just a selected few of them!)</h3>
|
||||
<ul>
|
||||
<li>The zooming speed depends on the speed of the computer.</li>
|
||||
<li>Incorrect formulas will ungracefully crash the program.</li>
|
||||
<li>Many SDL identifiers are hardcoded as number, this is safe up to ABI
|
||||
incompatibility.</li>
|
||||
<li>Better optimization could be done treating known real numbers as
|
||||
just one <code>double</code>, instead of adding a 0 imaginary part to
|
||||
treat them as complex numbers.</li>
|
||||
<li>There should be some way to switch from Mandelbrot to Julia with
|
||||
chosen parameter.</li>
|
||||
<li>Better optimization could be done treating known real numbers as just one
|
||||
<code>double</code>, instead of adding a 0 imaginary part to treat them as complex
|
||||
numbers.</li>
|
||||
<li>There should be some way to switch from Mandelbrot to Julia with chosen
|
||||
parameter.</li>
|
||||
</ul>
|
||||
<h3 id="spoiler">Spoiler</h3>
|
||||
<p>Sure, I don’t want to deprive you of the pleasure of digging into the
|
||||
infernal mess created by my corrupted mind (writing this remark I
|
||||
noticed that I was ending sentences with ‘;’ instead of with ‘.’, and I
|
||||
worried for my sanity), but just in case…</p>
|
||||
<p>I used many obfuscation techniques, including a few ones that are
|
||||
different from the tricks used in most common IOCCC program (more ‘high
|
||||
level’, in the sense that they require an understanding of how all the
|
||||
program works to be worked out).</p>
|
||||
<p>Sure, I don’t want to deprive you of the pleasure of digging
|
||||
into the infernal mess created by my corrupted mind (writing
|
||||
this remark I noticed that I was ending sentences with ‘;’ instead
|
||||
of with ‘.’, and I worried for my sanity), but just in case…</p>
|
||||
<p>I used many obfuscation techniques, including a few ones that
|
||||
are different from the tricks used in most common IOCCC program
|
||||
(more ‘high level’, in the sense that they require an understanding
|
||||
of how all the program works to be worked out).</p>
|
||||
<p>This program is a formula parser that outputs machine code that
|
||||
calculates the formula and check the given conditions. The machine code
|
||||
targets the x87 stack based <a
|
||||
href="https://en.wikipedia.org/wiki/Floating-point_unit">FPU</a>, and it
|
||||
is almost identical for x86 and x86_64 (except for the comparison
|
||||
instructions, that have to be generated differently). The program keeps
|
||||
track of the FPU stack (the FPU has a cyclic stack of 8 registers) and
|
||||
will automatically swap to and from the main memory when required (i.e.,
|
||||
adds instructions to the generated machine code to take care of this
|
||||
issue).</p>
|
||||
<p>The formulas are parsed recursively and machine code for the inner
|
||||
iteration loop is also generated.</p>
|
||||
<p>After generating the machine code, a big event loop creates (or zooms
|
||||
into) the fractal executing the generated code when needed, and then
|
||||
waits for input events.</p>
|
||||
calculates the formula and check the given conditions. The
|
||||
machine code targets the x87 stack based
|
||||
<a href="https://en.wikipedia.org/wiki/Floating-point_unit">FPU</a>, and it is almost
|
||||
identical for x86 and x86_64 (except for the comparison
|
||||
instructions, that have to be generated differently). The
|
||||
program keeps track of the FPU stack (the FPU has a cyclic stack
|
||||
of 8 registers) and will automatically swap to and from the
|
||||
main memory when required (i.e., adds instructions to the generated
|
||||
machine code to take care of this issue).</p>
|
||||
<p>The formulas are parsed recursively and machine code for the
|
||||
inner iteration loop is also generated.</p>
|
||||
<p>After generating the machine code, a big event loop creates (or
|
||||
zooms into) the fractal executing the generated code when needed,
|
||||
and then waits for input events.</p>
|
||||
<p>The zooming algorithm works by remembering for each pixel the
|
||||
floating point offset to where the value was actually calculated. When
|
||||
zooming, the best match is searched, and if the offset is too big
|
||||
(<code>>1</code>) the pixel is recalculated.</p>
|
||||
<h2 id="copyright-and-cc-by-sa-4.0-license">Copyright and CC BY-SA 4.0
|
||||
License:</h2>
|
||||
<p>This file is Copyright (c) 2023 by Landon Curt Noll. All Rights
|
||||
Reserved. You are free to share and adapt this file under the terms of
|
||||
this license:</p>
|
||||
floating point offset to where the value was actually calculated.
|
||||
When zooming, the best match is searched, and if the offset is
|
||||
too big (<code>>1</code>) the pixel is recalculated.</p>
|
||||
<h2 id="copyright-and-cc-by-sa-4.0-license">Copyright and CC BY-SA 4.0 License:</h2>
|
||||
<p>This file is Copyright (c) 2023 by Landon Curt Noll. All Rights Reserved.
|
||||
You are free to share and adapt this file under the terms of this license:</p>
|
||||
<pre><code>Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)</code></pre>
|
||||
<p>For more information, see:
|
||||
https://creativecommons.org/licenses/by-sa/4.0/</p>
|
||||
<p>For more information, see: https://creativecommons.org/licenses/by-sa/4.0/</p>
|
||||
|
||||
<!-- END: this line ends content for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
|
||||
<!-- START: this line starts content for HTML phase 22 by: bin/output-index-inventory.sh via bin/md2html.sh -->
|
||||
|
||||
<!-- START: this line starts content generated by: bin/output-index-inventory.sh -->
|
||||
|
||||
<h1 id="inventory-for-2006monge"><a name="inventory"></a>Inventory for
|
||||
2006/monge</h1>
|
||||
<h1 id="inventory-for-2006monge"><a name="inventory"></a>Inventory for 2006/monge</h1>
|
||||
<p><a href="#top">Jump to top</a></p>
|
||||
<h2 id="primary-files">Primary files</h2>
|
||||
<ul>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/monge.c">monge.c</a>
|
||||
- entry source</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/Makefile">Makefile</a>
|
||||
- entry Makefile</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/monge.alt.c">monge.alt.c</a>
|
||||
- alternative source</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/monge.orig.c">monge.orig.c</a>
|
||||
- original source</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/try.alt.sh">try.alt.sh</a>
|
||||
- how to run alternative code</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/try.sh">try.sh</a>
|
||||
- how to run</li>
|
||||
<li><a href="2006_monge.tar.bz2">2006_monge.tar.bz2</a> - download entry
|
||||
source</li>
|
||||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/monge.c">monge.c</a> - entry source</li>
|
||||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/Makefile">Makefile</a> - entry Makefile</li>
|
||||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/monge.alt.c">monge.alt.c</a> - alternative source</li>
|
||||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/monge.orig.c">monge.orig.c</a> - original source</li>
|
||||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/try.alt.sh">try.alt.sh</a> - how to run alternative code</li>
|
||||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/try.sh">try.sh</a> - how to run</li>
|
||||
<li><a href="2006_monge.tar.bz2">2006_monge.tar.bz2</a> - download entry source</li>
|
||||
</ul>
|
||||
<h2 id="secondary-files">Secondary files</h2>
|
||||
<ul>
|
||||
<li><a href="index.html">index.html</a> - entry home page</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/.entry.json">.entry.json</a>
|
||||
- description of entry in JSON</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/.gitignore">.gitignore</a>
|
||||
- list of files that should not be committed under git</li>
|
||||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/.entry.json">.entry.json</a> - description of entry in JSON</li>
|
||||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/.gitignore">.gitignore</a> - list of files that should not be committed under git</li>
|
||||
<li><a href=".path">.path</a> - directory path from top directory</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/README.md">README.md</a>
|
||||
- markdown source for index.html</li>
|
||||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/README.md">README.md</a> - markdown source for index.html</li>
|
||||
</ul>
|
||||
|
||||
<!-- END: next line ends content generated by: bin/output-index-inventory.sh -->
|
||||
|
||||
Reference in new issue
Block a user