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
+70
-102
@@ -129,9 +129,9 @@
|
||||
|
||||
<h2 id="author"><a name="author"></a>Author:</h2>
|
||||
<ul>
|
||||
<li>Name: <a href="../../authors.html#Jens_Schweikhardt">Jens
|
||||
Schweikhardt</a><br> Location: <a href="../../location.html#DE">DE</a> -
|
||||
<em>Federal Republic of Germany</em> (<em>Germany</em>) <br><br></li>
|
||||
<li>Name: <a href="../../authors.html#Jens_Schweikhardt">Jens Schweikhardt</a><br>
|
||||
Location: <a href="../../location.html#DE">DE</a> - <em>Federal Republic of Germany</em> (<em>Germany</em>)
|
||||
<br><br></li>
|
||||
</ul>
|
||||
|
||||
<!-- END: next line ends content generated by: bin/output-index-author.sh -->
|
||||
@@ -147,8 +147,7 @@ Schweikhardt</a><br> Location: <a href="../../location.html#DE">DE</a> -
|
||||
<ol start="0" type="1">
|
||||
<li><p>The number of operators in the expression [default: 9]</p></li>
|
||||
<li><p>The value of the first operand [default: 1]</p></li>
|
||||
<li><p>The (possibly negative) increment to the next operand [default:
|
||||
1]</p></li>
|
||||
<li><p>The (possibly negative) increment to the next operand [default: 1]</p></li>
|
||||
<li><p>The goal value or 0/0 [default: 42]</p></li>
|
||||
</ol>
|
||||
<h2 id="try">Try:</h2>
|
||||
@@ -157,14 +156,13 @@ Schweikhardt</a><br> Location: <a href="../../location.html#DE">DE</a> -
|
||||
<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">./schweikh2</span> 15 1 0</span></code></pre></div>
|
||||
<p>The author also suggests:</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="cf">while</span> <span class="bu">:</span><span class="kw">;</span> <span class="cf">do</span> <span class="fu">grep</span> <span class="at">-v</span> <span class="st">'#'</span> schweikh2.c<span class="kw">;</span> <span class="cf">done</span></span></code></pre></div>
|
||||
<p>(and we do too) which works with <code>sh</code>, <code>bash</code>,
|
||||
<code>ksh</code> and <code>zsh</code> as well. Press ctrl-c to stop it.
|
||||
Observe how the <a href="try.sh">try.sh</a> script does this once to
|
||||
<p>(and we do too) which works with <code>sh</code>, <code>bash</code>, <code>ksh</code> and <code>zsh</code> as well. Press
|
||||
ctrl-c to stop it. Observe how the <a href="try.sh">try.sh</a> script does this once to
|
||||
make it easier to see what is happening.</p>
|
||||
<h2 id="judges-remarks">Judges’ remarks:</h2>
|
||||
<p>The original program, with only slight obfuscations, may be found in
|
||||
<a href="hunni.c">hunni.c</a>. The perl script, <a
|
||||
href="hunni.pl">hunni.pl</a>, obfuscates it appropriately. Try:</p>
|
||||
<p>The original program, with only slight obfuscations, may be found
|
||||
in <a href="hunni.c">hunni.c</a>. The perl script, <a href="hunni.pl">hunni.pl</a>, obfuscates it
|
||||
appropriately. Try:</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">less</span> hunni.c</span>
|
||||
<span id="cb6-2"><a href="#cb6-2" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb6-3"><a href="#cb6-3" aria-hidden="true" tabindex="-1"></a><span class="fu">perl</span> ./hunni.pl <span class="op"><</span> hunni.c</span></code></pre></div>
|
||||
@@ -172,54 +170,47 @@ href="hunni.pl">hunni.pl</a>, obfuscates it appropriately. Try:</p>
|
||||
<h2 id="authors-remarks">Author’s remarks:</h2>
|
||||
<p>Note: the source must be viewed with tabstop 8. To appreciate the
|
||||
beauty have your eyes half closed.</p>
|
||||
<h3 id="why-i-think-this-program-is-obfuscated">Why I think this program
|
||||
is obfuscated:</h3>
|
||||
<h3 id="why-i-think-this-program-is-obfuscated">Why I think this program is obfuscated:</h3>
|
||||
<p>C is a free format language. It is therefore a question of style how
|
||||
variables, operators, declarations, functions and syntactic elements
|
||||
like braces and parentheses are grouped together. As a rule of thumb, I
|
||||
put spaces around operators, after opening braces and before closing
|
||||
braces. I have generalized this rule by putting whitespace after
|
||||
<em>any</em> non-white space character (with the exception of
|
||||
preprocessor directives). There are no recognizable keywords anymore.
|
||||
There are no recognizable string literals any more. The
|
||||
<code>main()</code> function is invisible. All operators longer than one
|
||||
character are gone. They have been replaced by macro calls with quite a
|
||||
number of arguments. The keys are the token pasting and stringizing
|
||||
macros <code>e</code> and <code>O</code>. The “arcane rules of token
|
||||
pasting” [K&R2] are used up to three levels:
|
||||
<code>H(O,r)R(O,r)</code> (!) which is needed to make one 8-character
|
||||
token from 8 characters (<code>unsigned</code>). BTW, C has no 9 or more
|
||||
character reserved words, so a fourth level is only required if you
|
||||
intend to generate object names from 9 or more components. The final
|
||||
like braces and parentheses are grouped together. As a rule of thumb,
|
||||
I put spaces around operators, after opening braces and before closing
|
||||
braces. I have generalized this rule by putting whitespace after <em>any</em>
|
||||
non-white space character (with the exception of preprocessor directives).
|
||||
There are no recognizable keywords anymore. There are no recognizable
|
||||
string literals any more. The <code>main()</code> function is invisible. All operators
|
||||
longer than one character are gone. They have been replaced by macro
|
||||
calls with quite a number of arguments. The keys are the token pasting
|
||||
and stringizing macros <code>e</code> and <code>O</code>. The “arcane rules of token pasting”
|
||||
[K&R2] are used up to three levels: <code>H(O,r)R(O,r)</code> (!) which is needed to make
|
||||
one 8-character token from 8 characters (<code>unsigned</code>). BTW, C has no 9 or
|
||||
more character reserved words, so a fourth level is only required if
|
||||
you intend to generate object names from 9 or more components. The final
|
||||
round even swaps the tokens, so all keywords must be spelled backwards
|
||||
(sort of, can you spot <code>printf</code> in the <code>P</code>
|
||||
macro?).</p>
|
||||
(sort of, can you spot <code>printf</code> in the <code>P</code> macro?).</p>
|
||||
<p>Try to indent the source. The unbalanced parentheses confuse Solaris’
|
||||
indent to the max (although the result does compile):</p>
|
||||
<p>Looking at the indented source is even <em>less</em> fun, because the
|
||||
nice diamond pattern has been replaced by something that looks like,
|
||||
uhm, modem noise.</p>
|
||||
<p>Looking at the indented source is even <em>less</em> fun, because the nice
|
||||
diamond pattern has been replaced by something that looks like, uhm,
|
||||
modem noise.</p>
|
||||
<p>Lint the source. It’s clean. How obfuscated…</p>
|
||||
<p>What’s the exit status? The program exits with <code>J - 1</code>
|
||||
where <code>J</code> is the return value from several non-void functions
|
||||
(needed to shut up lint). The last assignment is
|
||||
<code>J = printf ("%c", 10);</code> so the exit status is 0 unless the
|
||||
last <code>printf</code> failed, which is even a <em>useful</em> status.
|
||||
A further obfuscation is the use of <code>10</code> instead of
|
||||
<code>'\n'</code>. <code>'\n'</code> can not be constructed by token
|
||||
pasting, AFAIK. That’s why <code>schweikh2</code> is likely to produce
|
||||
occasional garbage on non-ASCII execution character set systems.</p>
|
||||
<p>What’s the exit status? The program exits with <code>J - 1</code> where <code>J</code> is the
|
||||
return value from several non-void functions (needed to shut up
|
||||
lint). The last assignment is <code>J = printf ("%c", 10);</code> so the exit
|
||||
status is 0 unless the last <code>printf</code> failed, which is even a <em>useful</em>
|
||||
status. A further obfuscation is the use of <code>10</code> instead of <code>'\n'</code>.
|
||||
<code>'\n'</code> can not be constructed by token pasting, AFAIK. That’s why <code>schweikh2</code>
|
||||
is likely to produce occasional garbage on non-ASCII execution character
|
||||
set systems.</p>
|
||||
<h3 id="what-this-program-does">What this program does</h3>
|
||||
<p>The program is an expression evaluator for a limited class of
|
||||
expressions. Known operators are <code>+</code> <code>-</code>
|
||||
<code>*</code> <code>/</code>; operands are real numbers (integers or
|
||||
fractions). The operands are restricted in that they must differ by a
|
||||
constant value, for example <code>1 + 2 * 3 / 4 - 5</code>. For any
|
||||
combination of operators the expression is evaluated and compared to a
|
||||
goal value. If they compare equal the expression is printed. If the goal
|
||||
value is specified as <code>0/0</code> all expressions and results are
|
||||
printed. For any fraction, the numerator and denominator are divided by
|
||||
their greatest common divisor.</p>
|
||||
<p>The program is an expression evaluator for a limited class of expressions. Known
|
||||
operators are <code>+</code> <code>-</code> <code>*</code> <code>/</code>; operands are real numbers (integers or
|
||||
fractions). The operands are restricted in that they must differ by a constant
|
||||
value, for example <code>1 + 2 * 3 / 4 - 5</code>. For any combination of operators the
|
||||
expression is evaluated and compared to a goal value. If they compare equal the
|
||||
expression is printed. If the goal value is specified as <code>0/0</code> all expressions
|
||||
and results are printed. For any fraction, the numerator and denominator are
|
||||
divided by their greatest common divisor.</p>
|
||||
<p>The program accepts up to 4 parameters:</p>
|
||||
<ol type="1">
|
||||
<li>The number of operators in the expression [default: 9].</li>
|
||||
@@ -227,16 +218,16 @@ their greatest common divisor.</p>
|
||||
<li>The (possibly negative) increment to the next operand [1].</li>
|
||||
<li>The goal value or 0/0 [42].</li>
|
||||
</ol>
|
||||
<p>On ANSI/ISO C conformant systems (where <code>long</code> is at least
|
||||
32 bits) overflow will occur in the default case (first operand 1,
|
||||
increment 1) only for more than 11 operators. Because a bit mask is used
|
||||
that needs twice the number of operands in bits (plus a sentinel value)
|
||||
on those systems the first parameter must not exceed 15.</p>
|
||||
<p>If <code>long</code> is at least 64 bits overflow will occur for more
|
||||
than 19 operators but you will probably wait quite some time for every
|
||||
of the <code>4^19 = 274,877,906,944</code> combinations to be evaluated…
|
||||
While I’m at it, on a 50 MHz SPARC, <code>4^11</code> expressions are
|
||||
evaluated in about 3 cpu minutes (<code>gcc -O3</code>).</p>
|
||||
<p>On ANSI/ISO C conformant systems (where <code>long</code> is at least 32 bits)
|
||||
overflow will occur in the default case (first operand 1, increment 1)
|
||||
only for more than 11 operators. Because a bit mask is used that needs
|
||||
twice the number of operands in bits (plus a sentinel value) on those
|
||||
systems the first parameter must not exceed 15.</p>
|
||||
<p>If <code>long</code> is at least 64 bits overflow will occur for more than 19
|
||||
operators but you will probably wait quite some time for every of the
|
||||
<code>4^19 = 274,877,906,944</code> combinations to be evaluated… While I’m at it,
|
||||
on a 50 MHz SPARC, <code>4^11</code> expressions are evaluated in about 3 cpu
|
||||
minutes (<code>gcc -O3</code>).</p>
|
||||
<h3 id="sample-arguments">Sample arguments:</h3>
|
||||
<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="ex">./schweikh2</span> 6</span>
|
||||
<span id="cb7-2"><a href="#cb7-2" aria-hidden="true" tabindex="-1"></a><span class="ex">./schweikh2</span> 7 0</span>
|
||||
@@ -245,62 +236,39 @@ evaluated in about 3 cpu minutes (<code>gcc -O3</code>).</p>
|
||||
<span id="cb7-5"><a href="#cb7-5" aria-hidden="true" tabindex="-1"></a><span class="ex">./schweikh2</span> 8 2 2/5 <span class="at">-98</span>/25</span>
|
||||
<span id="cb7-6"><a href="#cb7-6" aria-hidden="true" tabindex="-1"></a><span class="ex">./schweikh2</span> 2 1/0 1 1/0</span></code></pre></div>
|
||||
<h3 id="miscellaneous">Miscellaneous</h3>
|
||||
<p>The diamond pattern can be continued without a break. For a nice
|
||||
printout try this on your Bourne compatible shell:</p>
|
||||
<p>The diamond pattern can be continued without a break.
|
||||
For a nice printout try this on your Bourne compatible shell:</p>
|
||||
<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="cf">while</span> <span class="bu">:</span><span class="kw">;</span> <span class="cf">do</span> <span class="fu">grep</span> <span class="at">-v</span> <span class="st">'#'</span> schweikh2.c<span class="kw">;</span> <span class="cf">done</span></span></code></pre></div>
|
||||
<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>
|
||||
<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-1996schweikh2"><a name="inventory"></a>Inventory
|
||||
for 1996/schweikh2</h1>
|
||||
<h1 id="inventory-for-1996schweikh2"><a name="inventory"></a>Inventory for 1996/schweikh2</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/1996/schweikh2/schweikh2.c">schweikh2.c</a>
|
||||
- entry source</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1996/schweikh2/Makefile">Makefile</a>
|
||||
- entry Makefile</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1996/schweikh2/schweikh2.orig.c">schweikh2.orig.c</a>
|
||||
- original source</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1996/schweikh2/hunni.c">hunni.c</a>
|
||||
- original slightly obfuscated source</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1996/schweikh2/hunni.pl">hunni.pl</a>
|
||||
- perl script to obfuscate c</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1996/schweikh2/try.sh">try.sh</a>
|
||||
- how to run</li>
|
||||
<li><a href="1996_schweikh2.tar.bz2">1996_schweikh2.tar.bz2</a> -
|
||||
download entry source</li>
|
||||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1996/schweikh2/schweikh2.c">schweikh2.c</a> - entry source</li>
|
||||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1996/schweikh2/Makefile">Makefile</a> - entry Makefile</li>
|
||||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1996/schweikh2/schweikh2.orig.c">schweikh2.orig.c</a> - original source</li>
|
||||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1996/schweikh2/hunni.c">hunni.c</a> - original slightly obfuscated source</li>
|
||||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1996/schweikh2/hunni.pl">hunni.pl</a> - perl script to obfuscate c</li>
|
||||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1996/schweikh2/try.sh">try.sh</a> - how to run</li>
|
||||
<li><a href="1996_schweikh2.tar.bz2">1996_schweikh2.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/1996/schweikh2/.entry.json">.entry.json</a>
|
||||
- description of entry in JSON</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1996/schweikh2/.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/1996/schweikh2/.entry.json">.entry.json</a> - description of entry in JSON</li>
|
||||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1996/schweikh2/.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/1996/schweikh2/README.md">README.md</a>
|
||||
- markdown source for index.html</li>
|
||||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1996/schweikh2/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