improved indentation and whitespace for markdown code blocks
All code blocks in markdown have been intended by at least 4 spaces. We add `--tab-stop=8` to all `pandoc(1)` executions in order to set a better tab stop indentation, especially for tab intended code blocks. Changed `bin/pandoc-wrapper.sh` VERSION from "1.5.3 2024-03-26" to "1.6 2024-03-31". Fixed `1991/brnstnd/sorta.README.md` so that the sorta code is code blocks. Removed unneeded paragraph group in copyright in `inc/footer.default.html`. Fixed excess whitespace after list Author on entry `index.html` page. Changed `bin/output-index-author.sh` VERSION from "1.5.2 2024-03-26" to "1.6 2024-03-31". Performed `make www` to perform the above and test under macOS. TODO: Fix the problem of the initial line of code being extra intended. TODO: Fix excess whitespace around code that is inline.
This commit is contained in:
1 parent
b84c27ce02
commit
a996f8d2b8
734 files changed
+16723
-16963
No files matched your search
+294
-285
@@ -186,9 +186,9 @@ bringing back an extern declaration (slightly changing it to match the symbol
|
||||
that it is i.e. <code>extern double floor(double);</code> instead of <code>extern int floor;</code>)
|
||||
and also bringing back <code>double (x1, y1) b;</code> and even this funny code that could
|
||||
be kept in:</p>
|
||||
<div class="sourceCode" id="cb1"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#define char k</span><span class="op">[</span><span class="ch">'a'</span><span class="op">]</span></span>
|
||||
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="dt">char</span> x <span class="op">{</span><span class="kw">sizeof</span><span class="op">(</span></span>
|
||||
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a> <span class="dt">double</span><span class="op">(%</span>s<span class="op">,%</span>D<span class="op">)(*)())</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb1"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a> <span class="pp">#define char k</span><span class="op">[</span><span class="ch">'a'</span><span class="op">]</span></span>
|
||||
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a> <span class="dt">char</span> x <span class="op">{</span><span class="kw">sizeof</span><span class="op">(</span></span>
|
||||
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a> <span class="dt">double</span><span class="op">(%</span>s<span class="op">,%</span>D<span class="op">)(*)())</span></span></code></pre></div>
|
||||
<p>This does mean that there cannot be a second arg to <code>main()</code>
|
||||
as clang requires that to be a <code>char ** and the</code>char<code>redefined would not allow this. Some versions of clang say that</code>main()<code>must have either 0, 2 or 3 args but these versions do not object to 1 arg. However as the</code>char<code>macro seems more obscure and it is possible that a new version of clang will be even more strict the</code>int i<code>parameter in</code>main()<code>was moved to be inside</code>main()<code>, set to non-zero (setting</code>i<code>to 0 will not work). This way</code>main()` has zero
|
||||
args.</p>
|
||||
@@ -203,7 +203,7 @@ seems possible) it is easy to fix but it is hoped that this won’t happen.</p>
|
||||
<p>Originally <a href="#yusuke">Yusuke</a> supplied a patch so that this entry would compile with gcc -
|
||||
but not clang - or at least some versions.</p>
|
||||
<p>To see the difference from start to fixed:</p>
|
||||
<div class="sourceCode" id="cb2"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="bu">cd</span> 1984/decot <span class="kw">;</span> <span class="fu">make</span> diff_orig_prog</span></code></pre></div>
|
||||
<div class="sourceCode" id="cb2"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a> <span class="bu">cd</span> 1984/decot <span class="kw">;</span> <span class="fu">make</span> diff_orig_prog</span></code></pre></div>
|
||||
<h2 id="laman-index.html"><a name="1984_laman"></a><a href="1984/laman/laman.c">1984/laman</a> (<a href="1984/laman/index.html%5D">index.html</a>)</h2>
|
||||
<p><a href="#cody">Cody</a> added the <a href="1984/laman/try.sh">try.sh</a> script.</p>
|
||||
<p>Cody also fixed this to not crash when no arg is specified. Note that if the arg
|
||||
@@ -288,18 +288,20 @@ as close to the original as one can get without causing compiler errors.</p>
|
||||
<p>To get this to all work the following changes were made. If you really want to
|
||||
understand this Cody provides the following. First run the following command
|
||||
from the directory:</p>
|
||||
<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="fu">make</span> diff_orig_prog</span></code></pre></div>
|
||||
<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="fu">make</span> diff_orig_prog</span></code></pre></div>
|
||||
<p>and then read the following (you might also wish to look at the code in an
|
||||
editor with syntax highlighting):</p>
|
||||
<ul>
|
||||
<li><p>Because of the macros <code>C</code> and <code>V</code> in the original code, the args to <code>main()</code>
|
||||
<li>Because of the macros <code>C</code> and <code>V</code> in the original code, the args to <code>main()</code>
|
||||
were actually not what they appear: the only arg that existed in <code>main()</code> was
|
||||
<code>Manual</code>. Thus it now looks like:</p>
|
||||
<div class="sourceCode" id="cb4"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a>main<span class="op">(</span></span>
|
||||
<span id="cb4-2"><a href="#cb4-2" aria-hidden="true" tabindex="-1"></a><span class="co">/* C program. (If you don't</span></span>
|
||||
<span id="cb4-3"><a href="#cb4-3" aria-hidden="true" tabindex="-1"></a><span class="co"> * understand it look it</span></span>
|
||||
<span id="cb4-4"><a href="#cb4-4" aria-hidden="true" tabindex="-1"></a><span class="co"> * up.) (In the C*/</span> Manual<span class="op">)</span></span>
|
||||
<span id="cb4-5"><a href="#cb4-5" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span></code></pre></div></li>
|
||||
<code>Manual</code>. Thus it now looks like:</li>
|
||||
</ul>
|
||||
<div class="sourceCode" id="cb4"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a> main<span class="op">(</span></span>
|
||||
<span id="cb4-2"><a href="#cb4-2" aria-hidden="true" tabindex="-1"></a> <span class="co">/* C program. (If you don't</span></span>
|
||||
<span id="cb4-3"><a href="#cb4-3" aria-hidden="true" tabindex="-1"></a><span class="co"> * understand it look it</span></span>
|
||||
<span id="cb4-4"><a href="#cb4-4" aria-hidden="true" tabindex="-1"></a><span class="co"> * up.) (In the C*/</span> Manual<span class="op">)</span></span>
|
||||
<span id="cb4-5"><a href="#cb4-5" aria-hidden="true" tabindex="-1"></a> <span class="op">{</span></span></code></pre></div>
|
||||
<ul>
|
||||
<li><p>The macros <code>C</code> and <code>V</code> were changed to lower case. This is because it felt
|
||||
like the <code>C=" ..</code>’ part in <code>subr()</code> would be better to be upper case as it talks
|
||||
about the language. Also in the second <a href="1985/sicherman/sicherman.alt2.c">alternate
|
||||
@@ -314,14 +316,15 @@ in case the first does not. Originally the macros were kept the same and the
|
||||
<code>C</code> for the language is upper case though, and since it actually translated to
|
||||
<code>/**/</code> it can just be <code>c</code>, not <code>C</code>. The <code>V</code> was changed to <code>v</code> to be the same
|
||||
case as <code>c</code>.</p></li>
|
||||
<li><p>The code:</p>
|
||||
<div class="sourceCode" id="cb5"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a>C<span class="op">=</span><span class="st">"Lint says "</span>argument Manual isn<span class="ch">'t</span><span class="er"> used." What</span><span class="ch">'</span>s that</span>
|
||||
<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a>mean<span class="op">?</span><span class="st">"; while (write((read(C_C('"</span><span class="ch">'-'</span><span class="co">/*"'/*"*/</span><span class="op">))?</span>__<span class="op">:</span>__<span class="op">-</span>_<span class="op">+</span></span>
|
||||
<span id="cb5-3"><a href="#cb5-3" aria-hidden="true" tabindex="-1"></a><span class="ch">'</span><span class="sc">\b</span><span class="ch">'</span>b<span class="ch">'</span><span class="sc">\b</span><span class="ch">'</span><span class="op">|((</span>_<span class="op">-</span><span class="dv">52</span><span class="op">)%(</span><span class="ch">'</span><span class="sc">\b</span><span class="ch">'</span>b<span class="ch">'</span><span class="sc">\b</span><span class="ch">'</span><span class="op">+</span>C_C_<span class="op">(</span><span class="ch">'</span><span class="sc">\t</span><span class="ch">'</span>b<span class="ch">'</span><span class="sc">\n</span><span class="ch">'</span><span class="op">))+</span><span class="dv">1</span><span class="op">),</span><span class="dv">1</span><span class="op">),&</span>_<span class="op">,</span><span class="dv">1</span><span class="op">));</span></span></code></pre></div>
|
||||
<li><p>The code:</p></li>
|
||||
</ul>
|
||||
<div class="sourceCode" id="cb5"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a> C<span class="op">=</span><span class="st">"Lint says "</span>argument Manual isn<span class="ch">'t</span><span class="er"> used." What</span><span class="ch">'</span>s that</span>
|
||||
<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a> mean<span class="op">?</span><span class="st">"; while (write((read(C_C('"</span><span class="ch">'-'</span><span class="co">/*"'/*"*/</span><span class="op">))?</span>__<span class="op">:</span>__<span class="op">-</span>_<span class="op">+</span></span>
|
||||
<span id="cb5-3"><a href="#cb5-3" aria-hidden="true" tabindex="-1"></a> <span class="ch">'</span><span class="sc">\b</span><span class="ch">'</span>b<span class="ch">'</span><span class="sc">\b</span><span class="ch">'</span><span class="op">|((</span>_<span class="op">-</span><span class="dv">52</span><span class="op">)%(</span><span class="ch">'</span><span class="sc">\b</span><span class="ch">'</span>b<span class="ch">'</span><span class="sc">\b</span><span class="ch">'</span><span class="op">+</span>C_C_<span class="op">(</span><span class="ch">'</span><span class="sc">\t</span><span class="ch">'</span>b<span class="ch">'</span><span class="sc">\n</span><span class="ch">'</span><span class="op">))+</span><span class="dv">1</span><span class="op">),</span><span class="dv">1</span><span class="op">),&</span>_<span class="op">,</span><span class="dv">1</span><span class="op">));</span></span></code></pre></div>
|
||||
<p>had to be changed to:</p>
|
||||
<div class="sourceCode" id="cb6"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a>C<span class="op">=</span><span class="st">"Lint says </span><span class="sc">\"</span><span class="st">argument Manual isn't used.</span><span class="sc">\"</span><span class="st"> What's that</span><span class="op">\</span></span>
|
||||
<span id="cb6-2"><a href="#cb6-2" aria-hidden="true" tabindex="-1"></a><span class="st">mean?"</span><span class="op">;</span> <span class="cf">while</span> <span class="op">(</span>write<span class="op">((</span>read<span class="op">((</span><span class="ch">'"'</span><span class="op">-</span><span class="ch">'/</span><span class="er">*"</span><span class="ch">'</span><span class="op">))?</span>__<span class="op">:</span>__<span class="op">-</span>_<span class="op">+</span></span>
|
||||
<span id="cb6-3"><a href="#cb6-3" aria-hidden="true" tabindex="-1"></a><span class="ch">'</span><span class="sc">\b</span><span class="ch">'</span>b<span class="ch">'</span><span class="sc">\b</span><span class="ch">'</span><span class="op">|((</span>_<span class="op">-</span><span class="dv">52</span><span class="op">)%(</span><span class="ch">'</span><span class="sc">\b</span><span class="ch">'</span>b<span class="ch">'</span><span class="sc">\b</span><span class="ch">'</span><span class="op">+</span>C_C_<span class="op">(</span><span class="ch">'</span><span class="sc">\t</span><span class="ch">'</span>b<span class="ch">'</span><span class="sc">\n</span><span class="ch">'</span><span class="op">))+</span><span class="dv">1</span><span class="op">),</span><span class="dv">1</span><span class="op">),&</span>_<span class="op">,</span><span class="dv">1</span><span class="op">));</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb6"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a> C<span class="op">=</span><span class="st">"Lint says </span><span class="sc">\"</span><span class="st">argument Manual isn't used.</span><span class="sc">\"</span><span class="st"> What's that</span><span class="op">\</span></span>
|
||||
<span id="cb6-2"><a href="#cb6-2" aria-hidden="true" tabindex="-1"></a><span class="st"> mean?"</span><span class="op">;</span> <span class="cf">while</span> <span class="op">(</span>write<span class="op">((</span>read<span class="op">((</span><span class="ch">'"'</span><span class="op">-</span><span class="ch">'/</span><span class="er">*"</span><span class="ch">'</span><span class="op">))?</span>__<span class="op">:</span>__<span class="op">-</span>_<span class="op">+</span></span>
|
||||
<span id="cb6-3"><a href="#cb6-3" aria-hidden="true" tabindex="-1"></a> <span class="ch">'</span><span class="sc">\b</span><span class="ch">'</span>b<span class="ch">'</span><span class="sc">\b</span><span class="ch">'</span><span class="op">|((</span>_<span class="op">-</span><span class="dv">52</span><span class="op">)%(</span><span class="ch">'</span><span class="sc">\b</span><span class="ch">'</span>b<span class="ch">'</span><span class="sc">\b</span><span class="ch">'</span><span class="op">+</span>C_C_<span class="op">(</span><span class="ch">'</span><span class="sc">\t</span><span class="ch">'</span>b<span class="ch">'</span><span class="sc">\n</span><span class="ch">'</span><span class="op">))+</span><span class="dv">1</span><span class="op">),</span><span class="dv">1</span><span class="op">),&</span>_<span class="op">,</span><span class="dv">1</span><span class="op">));</span></span></code></pre></div>
|
||||
<p>because of the missing <code>"</code> at the end of the line and because <code>_|_</code> is not a
|
||||
function call.</p>
|
||||
<p>The <code>\"</code> had to be done to keep the <code>"</code>s there though the string could be
|
||||
@@ -333,21 +336,22 @@ all!</p>
|
||||
rename to <code>c</code>.</p>
|
||||
<p>The <code>char</code>s <code>_</code> and <code>__</code> in <code>main()</code> were copied to file scope so that
|
||||
<code>subr()</code> could actually compile but this does not affect the ones in
|
||||
<code>main()</code>. Why is this? You tell us!</p></li>
|
||||
<li><p>The code in <code>main()</code> is where there are significant changes, changing from:</p>
|
||||
<div class="sourceCode" id="cb7"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a><span class="cf">while</span> <span class="op">(</span>read<span class="op">(</span><span class="dv">0</span><span class="op">,&</span>__<span class="op">,</span><span class="dv">1</span><span class="op">)</span> <span class="op">&</span> write<span class="op">((</span>_<span class="op">=(</span>_<span class="op">=</span>C_C_<span class="op">(</span>__<span class="op">),</span>C<span class="op">)),</span></span>
|
||||
<span id="cb7-2"><a href="#cb7-2" aria-hidden="true" tabindex="-1"></a>_C_<span class="op">,</span><span class="dv">1</span><span class="op">))</span> _<span class="op">=</span>C<span class="op">-</span>V<span class="op">+</span>subr<span class="op">(&</span>V<span class="op">);</span></span></code></pre></div>
|
||||
<code>main()</code>. Why is this? You tell us!</p>
|
||||
<ul>
|
||||
<li>The code in <code>main()</code> is where there are significant changes, changing from:</li>
|
||||
</ul>
|
||||
<div class="sourceCode" id="cb7"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a> <span class="cf">while</span> <span class="op">(</span>read<span class="op">(</span><span class="dv">0</span><span class="op">,&</span>__<span class="op">,</span><span class="dv">1</span><span class="op">)</span> <span class="op">&</span> write<span class="op">((</span>_<span class="op">=(</span>_<span class="op">=</span>C_C_<span class="op">(</span>__<span class="op">),</span>C<span class="op">)),</span></span>
|
||||
<span id="cb7-2"><a href="#cb7-2" aria-hidden="true" tabindex="-1"></a> _C_<span class="op">,</span><span class="dv">1</span><span class="op">))</span> _<span class="op">=</span>C<span class="op">-</span>V<span class="op">+</span>subr<span class="op">(&</span>V<span class="op">);</span></span></code></pre></div>
|
||||
<p>to:</p>
|
||||
<div class="sourceCode" id="cb8"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a><span class="cf">while</span> <span class="op">(</span>read<span class="op">(</span><span class="dv">0</span><span class="op">,&</span>__<span class="op">,</span><span class="dv">1</span><span class="op">)</span> <span class="op">&</span> write<span class="op">((</span>_<span class="op">=(</span>_<span class="op">=</span>C_C_<span class="op">(</span>__<span class="op">),</span></span>
|
||||
<span id="cb8-2"><a href="#cb8-2" aria-hidden="true" tabindex="-1"></a>V<span class="op">))?</span>__<span class="op">:</span>__<span class="op">-</span>_<span class="op">+</span><span class="ch">'</span><span class="sc">\b</span><span class="ch">'</span>b<span class="ch">'</span><span class="sc">\b</span><span class="ch">'</span><span class="op">|((</span>_<span class="op">-</span><span class="dv">52</span><span class="op">)%(</span><span class="ch">'</span><span class="sc">\b</span><span class="ch">'</span>b<span class="ch">'</span><span class="sc">\b</span><span class="ch">'</span><span class="op">+~</span></span>
|
||||
<span id="cb8-3"><a href="#cb8-3" aria-hidden="true" tabindex="-1"></a><span class="ch">' '</span><span class="op">&</span><span class="ch">'</span><span class="sc">\t</span><span class="ch">'</span>b<span class="ch">'</span><span class="sc">\n</span><span class="ch">'</span><span class="op">)+</span><span class="dv">1</span><span class="op">),</span><span class="dv">1</span><span class="op">),&</span>_<span class="op">,</span><span class="dv">1</span><span class="op">))</span>_<span class="op">=</span>c<span class="op">-</span>v<span class="op">+</span>subr<span class="op">(&</span>v<span class="op">));</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb8"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a> <span class="cf">while</span> <span class="op">(</span>read<span class="op">(</span><span class="dv">0</span><span class="op">,&</span>__<span class="op">,</span><span class="dv">1</span><span class="op">)</span> <span class="op">&</span> write<span class="op">((</span>_<span class="op">=(</span>_<span class="op">=</span>C_C_<span class="op">(</span>__<span class="op">),</span></span>
|
||||
<span id="cb8-2"><a href="#cb8-2" aria-hidden="true" tabindex="-1"></a> V<span class="op">))?</span>__<span class="op">:</span>__<span class="op">-</span>_<span class="op">+</span><span class="ch">'</span><span class="sc">\b</span><span class="ch">'</span>b<span class="ch">'</span><span class="sc">\b</span><span class="ch">'</span><span class="op">|((</span>_<span class="op">-</span><span class="dv">52</span><span class="op">)%(</span><span class="ch">'</span><span class="sc">\b</span><span class="ch">'</span>b<span class="ch">'</span><span class="sc">\b</span><span class="ch">'</span><span class="op">+~</span></span>
|
||||
<span id="cb8-3"><a href="#cb8-3" aria-hidden="true" tabindex="-1"></a> <span class="ch">' '</span><span class="op">&</span><span class="ch">'</span><span class="sc">\t</span><span class="ch">'</span>b<span class="ch">'</span><span class="sc">\n</span><span class="ch">'</span><span class="op">)+</span><span class="dv">1</span><span class="op">),</span><span class="dv">1</span><span class="op">),&</span>_<span class="op">,</span><span class="dv">1</span><span class="op">))</span>_<span class="op">=</span>c<span class="op">-</span>v<span class="op">+</span>subr<span class="op">(&</span>v<span class="op">));</span></span></code></pre></div>
|
||||
<p>Note how numerous of the macros (though two changed in case) can still be
|
||||
used but some cannot be. Can you figure out why? Why too is it that the
|
||||
<code>subr()</code> function is called but it appears that some of the code in that
|
||||
function is also in <code>main()</code> in the <code>while</code> condition? What happens if you
|
||||
remove it from <code>main()</code>? What happens if you remove it from <code>subr()</code> or
|
||||
don’t even bother calling <code>subr()</code>?</p></li>
|
||||
</ul>
|
||||
don’t even bother calling <code>subr()</code>?</p>
|
||||
<p>Additional code was added in case the fix cannot be compiled by some compilers
|
||||
should they object to <code>main()</code> having only one arg. This version will
|
||||
automatically be compiled if the entry fails to compile for some reason but one
|
||||
@@ -395,20 +399,19 @@ for entertainment!</p>
|
||||
Cody changed the alt code (which was not the same as the original - see above
|
||||
for details or try <code>make diff_orig_alt</code> in the directory) slightly so that it
|
||||
was possible to silence it. In particular:</p>
|
||||
<div class="sourceCode" id="cb9"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a> P <span class="op">(</span> a <span class="op">)</span> <span class="dt">char</span> a <span class="op">;</span> <span class="op">{</span> a <span class="op">;</span> <span class="cf">while</span><span class="op">(</span> a <span class="op">></span> <span class="st">" B "</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb9"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a> P <span class="op">(</span> a <span class="op">)</span> <span class="dt">char</span> a <span class="op">;</span> <span class="op">{</span> a <span class="op">;</span> <span class="cf">while</span><span class="op">(</span> a <span class="op">></span> <span class="st">" B "</span></span></code></pre></div>
|
||||
<p>which gave:</p>
|
||||
<pre><code>marshall.alt.c:13:55: warning: ordered comparison between pointer and integer ('char' and 'char *')
|
||||
P ( a ) char a ; { a ; while( a > " B "
|
||||
~ ^ ~~~~~~~~
|
||||
1 warning generated.</code></pre>
|
||||
<pre><code> marshall.alt.c:13:55: warning: ordered comparison between pointer and integer ('char' and 'char *')
|
||||
P ( a ) char a ; { a ; while( a > " B "
|
||||
~ ^ ~~~~~~~~
|
||||
1 warning generated.</code></pre>
|
||||
<p>was changed to:</p>
|
||||
<div class="sourceCode" id="cb11"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb11-1"><a href="#cb11-1" aria-hidden="true" tabindex="-1"></a> P <span class="op">(</span> a <span class="op">)</span> <span class="dt">char</span> a <span class="op">;</span> <span class="op">{</span> a <span class="op">;</span> <span class="cf">while</span><span class="op">((</span><span class="dt">char</span> <span class="op">*)</span>a <span class="op">></span> <span class="st">" B "</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb11"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb11-1"><a href="#cb11-1" aria-hidden="true" tabindex="-1"></a> P <span class="op">(</span> a <span class="op">)</span> <span class="dt">char</span> a <span class="op">;</span> <span class="op">{</span> a <span class="op">;</span> <span class="cf">while</span><span class="op">((</span><span class="dt">char</span> <span class="op">*)</span>a <span class="op">></span> <span class="st">" B "</span></span></code></pre></div>
|
||||
<p>which gave:</p>
|
||||
<pre><code>marshall.alt.c:13:48: warning: cast to 'char *' from smaller integer type 'char' [-Wint-to-pointer-cast]
|
||||
P ( a ) char a ; { a ; while((char *)a > " B "
|
||||
^~~~~~~~~
|
||||
1 warning generated.
|
||||
</code></pre>
|
||||
<pre><code> marshall.alt.c:13:48: warning: cast to 'char *' from smaller integer type 'char' [-Wint-to-pointer-cast]
|
||||
P ( a ) char a ; { a ; while((char *)a > " B "
|
||||
^~~~~~~~~
|
||||
1 warning generated.</code></pre>
|
||||
<p>which can be disabled. It results in the same behaviour but this way no warnings
|
||||
are produced.</p>
|
||||
<h2 id="pawka-index.html"><a name="1986_pawka"></a><a href="1986/pawka/pawka.c">1986/pawka</a> (<a href="1986/pawka/index.html">index.html</a>)</h2>
|
||||
@@ -432,50 +435,56 @@ below.</p>
|
||||
work with gcc but it still required <code>-traditional-cpp</code>.</p>
|
||||
<p>If you’d like to see the difference between the version that requires
|
||||
<code>-traditional-cpp</code> and the fixed version, try:</p>
|
||||
<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="bu">cd</span> 1986/wall <span class="kw">;</span> <span class="fu">make</span> diff_orig_prog</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="bu">cd</span> 1986/wall <span class="kw">;</span> <span class="fu">make</span> diff_orig_prog</span></code></pre></div>
|
||||
<p>Some of the changes required:</p>
|
||||
<ul>
|
||||
<li><p>Instead of using the <code>c_</code>, defined as <code>c_(cc)c cc=</code>, like:</p>
|
||||
<pre><code> c_(+)o
|
||||
|
||||
/* ... */
|
||||
|
||||
:c_(+)' '-1;
|
||||
}}c_(&)'z'+5;</code></pre>
|
||||
<li>Instead of using the <code>c_</code>, defined as <code>c_(cc)c cc=</code>, like:</li>
|
||||
</ul>
|
||||
<div class="sourceCode" id="cb14"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb14-1"><a href="#cb14-1" aria-hidden="true" tabindex="-1"></a> c_<span class="op">(+)</span>o</span>
|
||||
<span id="cb14-2"><a href="#cb14-2" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb14-3"><a href="#cb14-3" aria-hidden="true" tabindex="-1"></a> <span class="co">/* ... */</span></span>
|
||||
<span id="cb14-4"><a href="#cb14-4" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb14-5"><a href="#cb14-5" aria-hidden="true" tabindex="-1"></a> <span class="op">:</span>c_<span class="op">(+)</span><span class="ch">' '</span><span class="op">-</span><span class="dv">1</span><span class="op">;</span></span>
|
||||
<span id="cb14-6"><a href="#cb14-6" aria-hidden="true" tabindex="-1"></a> <span class="op">}}</span>c_<span class="op">(&)</span><span class="ch">'z'</span><span class="op">+</span><span class="dv">5</span><span class="op">;</span></span></code></pre></div>
|
||||
<p>use:</p>
|
||||
<pre><code> :c +=o[c&__LINE__-007];
|
||||
|
||||
/* ... */
|
||||
|
||||
:c+=' '-1;
|
||||
}}c&='z'+5;</code></pre>
|
||||
<div class="sourceCode" id="cb15"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb15-1"><a href="#cb15-1" aria-hidden="true" tabindex="-1"></a> <span class="op">:</span>c <span class="op">+=</span>o<span class="op">[</span>c<span class="op">&</span>__LINE__<span class="op">-</span><span class="bn">007</span><span class="op">];</span></span>
|
||||
<span id="cb15-2"><a href="#cb15-2" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb15-3"><a href="#cb15-3" aria-hidden="true" tabindex="-1"></a> <span class="co">/* ... */</span></span>
|
||||
<span id="cb15-4"><a href="#cb15-4" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb15-5"><a href="#cb15-5" aria-hidden="true" tabindex="-1"></a> <span class="op">:</span>c<span class="op">+=</span><span class="ch">' '</span><span class="op">-</span><span class="dv">1</span><span class="op">;</span></span>
|
||||
<span id="cb15-6"><a href="#cb15-6" aria-hidden="true" tabindex="-1"></a> <span class="op">}}</span>c<span class="op">&=</span><span class="ch">'z'</span><span class="op">+</span><span class="dv">5</span><span class="op">;</span></span></code></pre></div>
|
||||
<p>Observe however that this macro is still used in the code like:</p>
|
||||
<pre><code> main(;c_(=(*cc);*cc++)c,for);</code></pre></li>
|
||||
<li><p>Instead of code like:</p>
|
||||
<pre><code> main(0xb+(c>>5),C_(s))
|
||||
_'\v'
|
||||
:__ _'\f':
|
||||
main(c,C_(s));</code></pre>
|
||||
<div class="sourceCode" id="cb16"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb16-1"><a href="#cb16-1" aria-hidden="true" tabindex="-1"></a> main<span class="op">(;</span>c_<span class="op">(=(*</span>cc<span class="op">);*</span>cc<span class="op">++)</span>c<span class="op">,</span><span class="cf">for</span><span class="op">);</span></span></code></pre></div>
|
||||
<ul>
|
||||
<li>Instead of code like:</li>
|
||||
</ul>
|
||||
<div class="sourceCode" id="cb17"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb17-1"><a href="#cb17-1" aria-hidden="true" tabindex="-1"></a> main<span class="op">(</span><span class="bn">0xb</span><span class="op">+(</span>c<span class="op">>></span><span class="dv">5</span><span class="op">),</span>C_<span class="op">(</span>s<span class="op">))</span></span>
|
||||
<span id="cb17-2"><a href="#cb17-2" aria-hidden="true" tabindex="-1"></a> _<span class="ch">'</span><span class="sc">\v</span><span class="ch">'</span></span>
|
||||
<span id="cb17-3"><a href="#cb17-3" aria-hidden="true" tabindex="-1"></a> <span class="op">:</span>__ _<span class="ch">'</span><span class="sc">\f</span><span class="ch">'</span><span class="op">:</span></span>
|
||||
<span id="cb17-4"><a href="#cb17-4" aria-hidden="true" tabindex="-1"></a> main<span class="op">(</span>c<span class="op">,</span>C_<span class="op">(</span>s<span class="op">));</span></span></code></pre></div>
|
||||
<p>use instead:</p>
|
||||
<pre><code> main(;c_(=(*cc);*cc++)c,for);
|
||||
#define _O(s)s
|
||||
switch(0xb+(c>>5)){
|
||||
_'\v'
|
||||
:__ _'\f':
|
||||
switch(c){;</code></pre></li>
|
||||
<li><p>The macro:</p>
|
||||
<pre><code> #define C_(sand)_O(sand)witch</code></pre>
|
||||
<div class="sourceCode" id="cb18"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb18-1"><a href="#cb18-1" aria-hidden="true" tabindex="-1"></a> main<span class="op">(;</span>c_<span class="op">(=(*</span>cc<span class="op">);*</span>cc<span class="op">++)</span>c<span class="op">,</span><span class="cf">for</span><span class="op">);</span></span>
|
||||
<span id="cb18-2"><a href="#cb18-2" aria-hidden="true" tabindex="-1"></a> <span class="pp">#define _O</span><span class="op">(</span><span class="pp">s</span><span class="op">)</span><span class="pp">s</span></span>
|
||||
<span id="cb18-3"><a href="#cb18-3" aria-hidden="true" tabindex="-1"></a> <span class="cf">switch</span><span class="op">(</span><span class="bn">0xb</span><span class="op">+(</span>c<span class="op">>></span><span class="dv">5</span><span class="op">)){</span></span>
|
||||
<span id="cb18-4"><a href="#cb18-4" aria-hidden="true" tabindex="-1"></a> _<span class="ch">'</span><span class="sc">\v</span><span class="ch">'</span></span>
|
||||
<span id="cb18-5"><a href="#cb18-5" aria-hidden="true" tabindex="-1"></a> <span class="op">:</span>__ _<span class="ch">'</span><span class="sc">\f</span><span class="ch">'</span><span class="op">:</span></span>
|
||||
<span id="cb18-6"><a href="#cb18-6" aria-hidden="true" tabindex="-1"></a> <span class="cf">switch</span><span class="op">(</span>c<span class="op">){;</span></span></code></pre></div>
|
||||
<ul>
|
||||
<li>The macro:</li>
|
||||
</ul>
|
||||
<div class="sourceCode" id="cb19"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb19-1"><a href="#cb19-1" aria-hidden="true" tabindex="-1"></a> <span class="pp">#define C_</span><span class="op">(</span><span class="pp">sand</span><span class="op">)</span><span class="pp">_O</span><span class="op">(</span><span class="pp">sand</span><span class="op">)</span><span class="pp">witch</span></span></code></pre></div>
|
||||
<p>could not be used like:</p>
|
||||
<pre><code> C_(s));_</code></pre>
|
||||
<div class="sourceCode" id="cb20"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb20-1"><a href="#cb20-1" aria-hidden="true" tabindex="-1"></a> C_<span class="op">(</span>s<span class="op">));</span>_</span></code></pre></div>
|
||||
<p>to create:</p>
|
||||
<pre><code> switch);_</code></pre>
|
||||
<div class="sourceCode" id="cb21"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb21-1"><a href="#cb21-1" aria-hidden="true" tabindex="-1"></a> <span class="cf">switch</span><span class="op">);</span>_</span></code></pre></div>
|
||||
<p>and neither could the macro:</p>
|
||||
<pre><code> #define O_(O)_O(O)stem(ccc(</code></pre>
|
||||
<div class="sourceCode" id="cb22"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb22-1"><a href="#cb22-1" aria-hidden="true" tabindex="-1"></a> <span class="pp">#define O_</span><span class="op">(</span><span class="pp">O</span><span class="op">)</span><span class="pp">_O</span><span class="op">(</span><span class="pp">O</span><span class="op">)</span><span class="pp">stem</span><span class="op">(</span><span class="pp">ccc</span><span class="op">(</span></span></code></pre></div>
|
||||
<p>be used like:</p>
|
||||
<pre><code> :O_(sy)";kkt -oa, dijszdijs QQ"))_C</code></pre>
|
||||
<div class="sourceCode" id="cb23"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb23-1"><a href="#cb23-1" aria-hidden="true" tabindex="-1"></a> <span class="op">:</span>O_<span class="op">(</span>sy<span class="op">)</span><span class="st">";kkt -oa, dijszdijs QQ"</span><span class="op">))</span>_C</span></code></pre></div>
|
||||
<p>to create:</p>
|
||||
<pre><code> :system(ccc(";kkt -oa, dijszdijs QQ"));return</code></pre></li>
|
||||
<li><p>And of course as noted two strings had to be <code>strdup()</code>d.</p></li>
|
||||
<div class="sourceCode" id="cb24"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb24-1"><a href="#cb24-1" aria-hidden="true" tabindex="-1"></a> <span class="op">:</span>system<span class="op">(</span>ccc<span class="op">(</span><span class="st">";kkt -oa, dijszdijs QQ"</span><span class="op">));</span><span class="cf">return</span></span></code></pre></div>
|
||||
<ul>
|
||||
<li>And of course as noted two strings had to be <code>strdup()</code>d.</li>
|
||||
</ul>
|
||||
<p>There might have been other changes as well.</p>
|
||||
<h1 id="section-3"><a name="1987"></a>1987</h1>
|
||||
@@ -553,45 +562,45 @@ as well, however.</p>
|
||||
<p>First of all, as noted above, the entry required <code>-traditional-cpp</code> (which
|
||||
<strike>not all compilers support</strike> <code>clang</code> does not support). It needed
|
||||
that option in modern systems because of two things it did:</p>
|
||||
<div class="sourceCode" id="cb25"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb25-1"><a href="#cb25-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#define a</span><span class="op">(</span><span class="pp">x</span><span class="op">)</span><span class="pp">get</span><span class="co">/***/</span><span class="pp">x</span><span class="co">/***/</span><span class="pp">id</span><span class="op">())</span></span>
|
||||
<div class="sourceCode" id="cb25"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb25-1"><a href="#cb25-1" aria-hidden="true" tabindex="-1"></a> <span class="pp">#define a</span><span class="op">(</span><span class="pp">x</span><span class="op">)</span><span class="pp">get</span><span class="co">/***/</span><span class="pp">x</span><span class="co">/***/</span><span class="pp">id</span><span class="op">())</span></span>
|
||||
<span id="cb25-2"><a href="#cb25-2" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb25-3"><a href="#cb25-3" aria-hidden="true" tabindex="-1"></a><span class="co">/* ... */</span></span>
|
||||
<span id="cb25-3"><a href="#cb25-3" aria-hidden="true" tabindex="-1"></a> <span class="co">/* ... */</span></span>
|
||||
<span id="cb25-4"><a href="#cb25-4" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb25-5"><a href="#cb25-5" aria-hidden="true" tabindex="-1"></a>p Z<span class="op">=</span>chroot<span class="op">(</span><span class="st">"/"</span><span class="op">);</span>L<span class="op">(!</span>a<span class="op">(</span>u<span class="op">)</span>execv<span class="op">((</span>q<span class="op">(</span>v<span class="op">=</span><span class="st">"/ipu6ljov"</span><span class="op">),</span>v<span class="op">),</span>C<span class="op">);</span>Z<span class="op">-=</span>kill<span class="op">(</span>l<span class="op">);</span></span>
|
||||
<span id="cb25-5"><a href="#cb25-5" aria-hidden="true" tabindex="-1"></a> p Z<span class="op">=</span>chroot<span class="op">(</span><span class="st">"/"</span><span class="op">);</span>L<span class="op">(!</span>a<span class="op">(</span>u<span class="op">)</span>execv<span class="op">((</span>q<span class="op">(</span>v<span class="op">=</span><span class="st">"/ipu6ljov"</span><span class="op">),</span>v<span class="op">),</span>C<span class="op">);</span>Z<span class="op">-=</span>kill<span class="op">(</span>l<span class="op">);</span></span>
|
||||
<span id="cb25-6"><a href="#cb25-6" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb25-7"><a href="#cb25-7" aria-hidden="true" tabindex="-1"></a><span class="co">/* ... */</span></span>
|
||||
<span id="cb25-7"><a href="#cb25-7" aria-hidden="true" tabindex="-1"></a> <span class="co">/* ... */</span></span>
|
||||
<span id="cb25-8"><a href="#cb25-8" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb25-9"><a href="#cb25-9" aria-hidden="true" tabindex="-1"></a>case_2<span class="op">:</span>L<span class="op">(!--</span>V<span class="op">){</span>O<span class="co">/*/*/</span>c<span class="op">*</span>c<span class="op">+</span>c<span class="op">);</span>wait<span class="op">(</span>A<span class="op">+</span>c<span class="op">*</span>c<span class="op">-</span>c<span class="op">);</span>L<span class="op">(!</span>Z<span class="op">)</span>f<span class="op">(</span>A<span class="op">,</span><span class="st">"</span><span class="sc">\n</span><span class="st">"</span><span class="op">,</span>c<span class="op">);</span><span class="cf">return</span><span class="op">(</span>A<span class="op">*</span>getgid<span class="op">());};</span>C<span class="op">++;</span></span></code></pre></div>
|
||||
<span id="cb25-9"><a href="#cb25-9" aria-hidden="true" tabindex="-1"></a> case_2<span class="op">:</span>L<span class="op">(!--</span>V<span class="op">){</span>O<span class="co">/*/*/</span>c<span class="op">*</span>c<span class="op">+</span>c<span class="op">);</span>wait<span class="op">(</span>A<span class="op">+</span>c<span class="op">*</span>c<span class="op">-</span>c<span class="op">);</span>L<span class="op">(!</span>Z<span class="op">)</span>f<span class="op">(</span>A<span class="op">,</span><span class="st">"</span><span class="sc">\n</span><span class="st">"</span><span class="op">,</span>c<span class="op">);</span><span class="cf">return</span><span class="op">(</span>A<span class="op">*</span>getgid<span class="op">());};</span>C<span class="op">++;</span></span></code></pre></div>
|
||||
<p>This macro, <code>a</code>, formed the functions (the names) <code>getuid()</code> and <code>getgid()</code>, but
|
||||
this no longer works. The code still uses the macro <code>a</code> to form the names but
|
||||
it’s done differently, using the C token paste operator <code>##</code>. It’s done like
|
||||
thus:</p>
|
||||
<div class="sourceCode" id="cb26"><pre class="sourceCode diff"><code class="sourceCode diff"><span id="cb26-1"><a href="#cb26-1" aria-hidden="true" tabindex="-1"></a><span class="kw">--- i/1988/dale/dale.c</span></span>
|
||||
<span id="cb26-2"><a href="#cb26-2" aria-hidden="true" tabindex="-1"></a><span class="dt">+++ w/1988/dale/dale.c</span></span>
|
||||
<span id="cb26-3"><a href="#cb26-3" aria-hidden="true" tabindex="-1"></a><span class="dt">@@ -9,18 +9,18 @@</span></span>
|
||||
<span id="cb26-4"><a href="#cb26-4" aria-hidden="true" tabindex="-1"></a> #define L if</span>
|
||||
<span id="cb26-5"><a href="#cb26-5" aria-hidden="true" tabindex="-1"></a> #define I goto</span>
|
||||
<span id="cb26-6"><a href="#cb26-6" aria-hidden="true" tabindex="-1"></a> #define l 1</span>
|
||||
<span id="cb26-7"><a href="#cb26-7" aria-hidden="true" tabindex="-1"></a> #define f write</span>
|
||||
<span id="cb26-8"><a href="#cb26-8" aria-hidden="true" tabindex="-1"></a> #define J else</span>
|
||||
<span id="cb26-9"><a href="#cb26-9" aria-hidden="true" tabindex="-1"></a><span class="st">-#define a(x)get/***/x/***/id())</span></span>
|
||||
<span id="cb26-10"><a href="#cb26-10" aria-hidden="true" tabindex="-1"></a><span class="va">+#define a(x)get##x##id())</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb26"><pre class="sourceCode diff"><code class="sourceCode diff"><span id="cb26-1"><a href="#cb26-1" aria-hidden="true" tabindex="-1"></a> --- i/1988/dale/dale.c</span>
|
||||
<span id="cb26-2"><a href="#cb26-2" aria-hidden="true" tabindex="-1"></a> +++ w/1988/dale/dale.c</span>
|
||||
<span id="cb26-3"><a href="#cb26-3" aria-hidden="true" tabindex="-1"></a> @@ -9,18 +9,18 @@</span>
|
||||
<span id="cb26-4"><a href="#cb26-4" aria-hidden="true" tabindex="-1"></a> #define L if</span>
|
||||
<span id="cb26-5"><a href="#cb26-5" aria-hidden="true" tabindex="-1"></a> #define I goto</span>
|
||||
<span id="cb26-6"><a href="#cb26-6" aria-hidden="true" tabindex="-1"></a> #define l 1</span>
|
||||
<span id="cb26-7"><a href="#cb26-7" aria-hidden="true" tabindex="-1"></a> #define f write</span>
|
||||
<span id="cb26-8"><a href="#cb26-8" aria-hidden="true" tabindex="-1"></a> #define J else</span>
|
||||
<span id="cb26-9"><a href="#cb26-9" aria-hidden="true" tabindex="-1"></a> -#define a(x)get/***/x/***/id())</span>
|
||||
<span id="cb26-10"><a href="#cb26-10" aria-hidden="true" tabindex="-1"></a> +#define a(x)get##x##id())</span></code></pre></div>
|
||||
<p>The second is that</p>
|
||||
<div class="sourceCode" id="cb27"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb27-1"><a href="#cb27-1" aria-hidden="true" tabindex="-1"></a><span class="cf">for</span><span class="co">/*/(;;);/*/</span>k<span class="op">()){</span>O<span class="co">/*/*/</span>c<span class="op">);</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb27"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb27-1"><a href="#cb27-1" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span><span class="co">/*/(;;);/*/</span>k<span class="op">()){</span>O<span class="co">/*/*/</span>c<span class="op">);</span></span></code></pre></div>
|
||||
<p>cannot form <code>fork())</code> in modern C compilers. Since it was not done through a
|
||||
macro it was simply changed to be <code>fork()</code>, rather than adding a new macro.</p>
|
||||
<p>The other problem that could not be resolved by the <code>-traditional-cpp</code> was that
|
||||
modern compilers do not allow directives like:</p>
|
||||
<div class="sourceCode" id="cb28"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb28-1"><a href="#cb28-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#define _ define</span></span>
|
||||
<span id="cb28-2"><a href="#cb28-2" aria-hidden="true" tabindex="-1"></a><span class="pp">#</span><span class="er">_ P char</span></span>
|
||||
<span id="cb28-3"><a href="#cb28-3" aria-hidden="true" tabindex="-1"></a><span class="pp">#</span><span class="er">_ p int</span></span>
|
||||
<span id="cb28-4"><a href="#cb28-4" aria-hidden="true" tabindex="-1"></a><span class="pp">#</span><span class="er">_ O close(</span></span>
|
||||
<span id="cb28-5"><a href="#cb28-5" aria-hidden="true" tabindex="-1"></a><span class="co">/* ... */</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb28"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb28-1"><a href="#cb28-1" aria-hidden="true" tabindex="-1"></a> <span class="pp">#define _ define</span></span>
|
||||
<span id="cb28-2"><a href="#cb28-2" aria-hidden="true" tabindex="-1"></a> <span class="pp">#</span><span class="er">_ P char</span></span>
|
||||
<span id="cb28-3"><a href="#cb28-3" aria-hidden="true" tabindex="-1"></a> <span class="pp">#</span><span class="er">_ p int</span></span>
|
||||
<span id="cb28-4"><a href="#cb28-4" aria-hidden="true" tabindex="-1"></a> <span class="pp">#</span><span class="er">_ O close(</span></span>
|
||||
<span id="cb28-5"><a href="#cb28-5" aria-hidden="true" tabindex="-1"></a> <span class="co">/* ... */</span></span></code></pre></div>
|
||||
<p>so Cody changed the lines to be in the form of:</p>
|
||||
<div class="sourceCode" id="cb29"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb29-1"><a href="#cb29-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#define P </span><span class="dt">char</span></span>
|
||||
<span id="cb29-2"><a href="#cb29-2" aria-hidden="true" tabindex="-1"></a><span class="pp">#define p </span><span class="dt">int</span></span>
|
||||
<span id="cb29-3"><a href="#cb29-3" aria-hidden="true" tabindex="-1"></a><span class="pp">#define O close</span><span class="op">(</span></span>
|
||||
<span id="cb29-4"><a href="#cb29-4" aria-hidden="true" tabindex="-1"></a><span class="co">/* ... */</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb29"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb29-1"><a href="#cb29-1" aria-hidden="true" tabindex="-1"></a> <span class="pp">#define P </span><span class="dt">char</span></span>
|
||||
<span id="cb29-2"><a href="#cb29-2" aria-hidden="true" tabindex="-1"></a> <span class="pp">#define p </span><span class="dt">int</span></span>
|
||||
<span id="cb29-3"><a href="#cb29-3" aria-hidden="true" tabindex="-1"></a> <span class="pp">#define O close</span><span class="op">(</span></span>
|
||||
<span id="cb29-4"><a href="#cb29-4" aria-hidden="true" tabindex="-1"></a> <span class="co">/* ... */</span></span></code></pre></div>
|
||||
<p>However, to keep the entry as close to as possible in look, Cody kept the <code>_</code>
|
||||
macro in place it’s just no longer used.</p>
|
||||
<p>See the index.html file for details on the original code, provided as an alt
|
||||
@@ -649,21 +658,21 @@ not strictly necessary but nonetheless more correct, even if not warned against.
|
||||
<a href="1989/fubar/fubar.sh">fubar.sh</a>.</p>
|
||||
<p>A strange problem occurred where if one made modifications to the C file it
|
||||
might end up failing to work even after changing it back. This was resolved by:</p>
|
||||
<div class="sourceCode" id="cb30"><pre class="sourceCode diff"><code class="sourceCode diff"><span id="cb30-1"><a href="#cb30-1" aria-hidden="true" tabindex="-1"></a><span class="kw">--- i/1989/fubar/fubar.sh</span></span>
|
||||
<span id="cb30-2"><a href="#cb30-2" aria-hidden="true" tabindex="-1"></a><span class="dt">+++ w/1989/fubar/fubar.sh</span></span>
|
||||
<span id="cb30-3"><a href="#cb30-3" aria-hidden="true" tabindex="-1"></a><span class="dt">@@ -7,13 +7,12 @@ if [[ $# -ne 1 ]]; then</span></span>
|
||||
<span id="cb30-4"><a href="#cb30-4" aria-hidden="true" tabindex="-1"></a> exit 1</span>
|
||||
<span id="cb30-5"><a href="#cb30-5" aria-hidden="true" tabindex="-1"></a> fi</span>
|
||||
<div class="sourceCode" id="cb30"><pre class="sourceCode diff"><code class="sourceCode diff"><span id="cb30-1"><a href="#cb30-1" aria-hidden="true" tabindex="-1"></a> --- i/1989/fubar/fubar.sh</span>
|
||||
<span id="cb30-2"><a href="#cb30-2" aria-hidden="true" tabindex="-1"></a> +++ w/1989/fubar/fubar.sh</span>
|
||||
<span id="cb30-3"><a href="#cb30-3" aria-hidden="true" tabindex="-1"></a> @@ -7,13 +7,12 @@ if [[ $# -ne 1 ]]; then</span>
|
||||
<span id="cb30-4"><a href="#cb30-4" aria-hidden="true" tabindex="-1"></a> exit 1</span>
|
||||
<span id="cb30-5"><a href="#cb30-5" aria-hidden="true" tabindex="-1"></a> fi</span>
|
||||
<span id="cb30-6"><a href="#cb30-6" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb30-7"><a href="#cb30-7" aria-hidden="true" tabindex="-1"></a> # run/compile it</span>
|
||||
<span id="cb30-8"><a href="#cb30-8" aria-hidden="true" tabindex="-1"></a> rm -f ouroboros.c x1 x</span>
|
||||
<span id="cb30-9"><a href="#cb30-9" aria-hidden="true" tabindex="-1"></a><span class="st">-ex - <<EOF</span></span>
|
||||
<span id="cb30-10"><a href="#cb30-10" aria-hidden="true" tabindex="-1"></a><span class="st">-r fubar.c</span></span>
|
||||
<span id="cb30-11"><a href="#cb30-11" aria-hidden="true" tabindex="-1"></a><span class="va">+ex fubar.c <<EOF</span></span>
|
||||
<span id="cb30-12"><a href="#cb30-12" aria-hidden="true" tabindex="-1"></a> 8,9j</span>
|
||||
<span id="cb30-13"><a href="#cb30-13" aria-hidden="true" tabindex="-1"></a> w ouroboros.c</span>
|
||||
<span id="cb30-14"><a href="#cb30-14" aria-hidden="true" tabindex="-1"></a> EOF</span>
|
||||
<span id="cb30-15"><a href="#cb30-15" aria-hidden="true" tabindex="-1"></a> chmod +x ouroboros.c</span></code></pre></div>
|
||||
<span id="cb30-7"><a href="#cb30-7" aria-hidden="true" tabindex="-1"></a> # run/compile it</span>
|
||||
<span id="cb30-8"><a href="#cb30-8" aria-hidden="true" tabindex="-1"></a> rm -f ouroboros.c x1 x</span>
|
||||
<span id="cb30-9"><a href="#cb30-9" aria-hidden="true" tabindex="-1"></a> -ex - <<EOF</span>
|
||||
<span id="cb30-10"><a href="#cb30-10" aria-hidden="true" tabindex="-1"></a> -r fubar.c</span>
|
||||
<span id="cb30-11"><a href="#cb30-11" aria-hidden="true" tabindex="-1"></a> +ex fubar.c <<EOF</span>
|
||||
<span id="cb30-12"><a href="#cb30-12" aria-hidden="true" tabindex="-1"></a> 8,9j</span>
|
||||
<span id="cb30-13"><a href="#cb30-13" aria-hidden="true" tabindex="-1"></a> w ouroboros.c</span>
|
||||
<span id="cb30-14"><a href="#cb30-14" aria-hidden="true" tabindex="-1"></a> EOF</span>
|
||||
<span id="cb30-15"><a href="#cb30-15" aria-hidden="true" tabindex="-1"></a> chmod +x ouroboros.c</span></code></pre></div>
|
||||
<p>Cody also ‘modernised’ the script to use <code>bash</code> and fixed for ShellCheck. The
|
||||
<code>if [ .. ]</code> was changed in the C code as well as the script.</p>
|
||||
<p>Cody also added the <a href="1989/fubar/try.sh">try.sh</a> script.</p>
|
||||
@@ -683,11 +692,11 @@ entry and the alt code) anyway, it works out well.</p>
|
||||
<h2 id="jar.2-index.html"><a name="1989_jar.2"></a><a href="1989/jar.2/jar.2.c">1989/jar.2</a> (<a href="1989/jar.2/index.html%5D">index.html</a>)</h2>
|
||||
<p><a href="#cody">Cody</a> fixed this to work with modern compilers. Modern compilers do not allow
|
||||
code like:</p>
|
||||
<div class="sourceCode" id="cb31"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb31-1"><a href="#cb31-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#define D define</span></span>
|
||||
<span id="cb31-2"><a href="#cb31-2" aria-hidden="true" tabindex="-1"></a><span class="pp">#define a include</span></span>
|
||||
<div class="sourceCode" id="cb31"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb31-1"><a href="#cb31-1" aria-hidden="true" tabindex="-1"></a> <span class="pp">#define D define</span></span>
|
||||
<span id="cb31-2"><a href="#cb31-2" aria-hidden="true" tabindex="-1"></a> <span class="pp">#define a include</span></span>
|
||||
<span id="cb31-3"><a href="#cb31-3" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb31-4"><a href="#cb31-4" aria-hidden="true" tabindex="-1"></a><span class="pp">#</span><span class="er">D foo bar</span></span>
|
||||
<span id="cb31-5"><a href="#cb31-5" aria-hidden="true" tabindex="-1"></a><span class="pp">#</span><span class="er">a <stdio.h></span></span></code></pre></div>
|
||||
<span id="cb31-4"><a href="#cb31-4" aria-hidden="true" tabindex="-1"></a> <span class="pp">#</span><span class="er">D foo bar</span></span>
|
||||
<span id="cb31-5"><a href="#cb31-5" aria-hidden="true" tabindex="-1"></a> <span class="pp">#</span><span class="er">a <stdio.h></span></span></code></pre></div>
|
||||
<p>He notes that there <em>is</em> a way to get it (or something close to it) to work. Do
|
||||
you know how?</p>
|
||||
<p>Cody also provided the <a href="1989/jar.2/try.sh">try.sh</a> script and the
|
||||
@@ -699,11 +708,11 @@ offered us some chocolate cake :-) See index.html for details on how to use the
|
||||
script.</p>
|
||||
<p>Cody also fixed the Makefile where typing <code>make everything</code> or <code>make alt</code> would
|
||||
result in:</p>
|
||||
<pre><code>clang: error: no such file or directory: 'data'
|
||||
clang: error: no input files
|
||||
make: *** [Makefile:143: alt] Error 1
|
||||
<pre><code> clang: error: no such file or directory: 'data'
|
||||
clang: error: no input files
|
||||
make: *** [Makefile:143: alt] Error 1
|
||||
|
||||
shell returned 2</code></pre>
|
||||
shell returned 2</code></pre>
|
||||
<p>because the <code>alt</code> rule had what normally is in the <code>${PROG}.alt</code> rule.</p>
|
||||
<h2 id="ovdluhe-index.html"><a name="1989_ovdluhe"></a><a href="1989/ovdluhe/ovdluhe.c">1989/ovdluhe</a> (<a href="1989/ovdluhe/index.html%5D">index.html</a>)</h2>
|
||||
<p><a href="#cody">Cody</a> fixed an infinite loop where the program would print the same thing over
|
||||
@@ -730,7 +739,7 @@ index.html for details.</p>
|
||||
<h2 id="robison-index.html"><a name="1989_robison"></a><a href="1989/robison/robison.c">1989/robison</a> (<a href="1989/robison/index.html%5D">index.html</a>)</h2>
|
||||
<p><a href="#yusuke">Yusuke Endoh</a> fixed this to compile under modern systems. To see the changes
|
||||
made, try:</p>
|
||||
<div class="sourceCode" id="cb33"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb33-1"><a href="#cb33-1" aria-hidden="true" tabindex="-1"></a><span class="bu">cd</span> 1989/robison <span class="kw">;</span> <span class="fu">make</span> diff_orig_prog</span></code></pre></div>
|
||||
<div class="sourceCode" id="cb33"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb33-1"><a href="#cb33-1" aria-hidden="true" tabindex="-1"></a> <span class="bu">cd</span> 1989/robison <span class="kw">;</span> <span class="fu">make</span> diff_orig_prog</span></code></pre></div>
|
||||
<p>(It adds the C token pasting operator <code>##</code> instead of <code>/**/</code>.)</p>
|
||||
<p>Cody also added the <a href="1989/robison/try.sh">try.sh</a> script.</p>
|
||||
<h2 id="tromp-index.html"><a name="1989_tromp"></a><a href="1989/tromp/tromp.c">1989/tromp</a> (<a href="1989/tromp/index.html%5D">index.html</a>)</h2>
|
||||
@@ -839,11 +848,11 @@ operator itself.</p>
|
||||
<h2 id="dg-index.html"><a name="1990_dg"></a><a href="1990/dg/dg.c">1990/dg</a> (<a href="1990/dg/index.html%5D">index.html</a>)</h2>
|
||||
<p><a href="#cody">Cody</a> fixed this for modern systems. There were two problems to be resolved.</p>
|
||||
<p>One can no longer do:</p>
|
||||
<div class="sourceCode" id="cb34"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb34-1"><a href="#cb34-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#define d define</span></span>
|
||||
<div class="sourceCode" id="cb34"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb34-1"><a href="#cb34-1" aria-hidden="true" tabindex="-1"></a> <span class="pp">#define d define</span></span>
|
||||
<span id="cb34-2"><a href="#cb34-2" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb34-3"><a href="#cb34-3" aria-hidden="true" tabindex="-1"></a><span class="pp">#</span><span class="er">d b12(x) 12 x</span></span>
|
||||
<span id="cb34-3"><a href="#cb34-3" aria-hidden="true" tabindex="-1"></a> <span class="pp">#</span><span class="er">d b12(x) 12 x</span></span>
|
||||
<span id="cb34-4"><a href="#cb34-4" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb34-5"><a href="#cb34-5" aria-hidden="true" tabindex="-1"></a><span class="co">/* etc. */</span></span></code></pre></div>
|
||||
<span id="cb34-5"><a href="#cb34-5" aria-hidden="true" tabindex="-1"></a> <span class="co">/* etc. */</span></span></code></pre></div>
|
||||
<p>so the use of <code>#d</code> is now instead <code>#define</code> (the macro was originally deleted
|
||||
but later Cody added it back to make it more like the original).</p>
|
||||
<p>The second problem was suggested by the judges at the time of judging, to do
|
||||
@@ -895,7 +904,7 @@ again (since it did not work anyway a segfault prevention was added here). He
|
||||
also fixed some array addressing (some of which might not be strictly necessary
|
||||
but as he was testing the <code>fibonacci.c</code> bug he ended up changing it anyway).</p>
|
||||
<p>BTW: why can’t the fix:</p>
|
||||
<div class="sourceCode" id="cb35"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb35-1"><a href="#cb35-1" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> <span class="op">(</span>a<span class="op">[</span><span class="dv">1</span><span class="op">]==</span>NULL<span class="op">||</span>a<span class="op">[</span><span class="dv">2</span><span class="op">]==</span>NULL<span class="op">||</span>a<span class="op">[</span><span class="dv">3</span><span class="op">]==</span>NULL<span class="op">||</span>a<span class="op">[</span><span class="dv">4</span><span class="op">]==</span>NULL<span class="op">||</span>a<span class="op">[</span><span class="dv">5</span><span class="op">]==</span>NULL<span class="op">)</span> <span class="cf">return</span> <span class="dv">1</span><span class="op">;</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb35"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb35-1"><a href="#cb35-1" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> <span class="op">(</span>a<span class="op">[</span><span class="dv">1</span><span class="op">]==</span>NULL<span class="op">||</span>a<span class="op">[</span><span class="dv">2</span><span class="op">]==</span>NULL<span class="op">||</span>a<span class="op">[</span><span class="dv">3</span><span class="op">]==</span>NULL<span class="op">||</span>a<span class="op">[</span><span class="dv">4</span><span class="op">]==</span>NULL<span class="op">||</span>a<span class="op">[</span><span class="dv">5</span><span class="op">]==</span>NULL<span class="op">)</span> <span class="cf">return</span> <span class="dv">1</span><span class="op">;</span></span></code></pre></div>
|
||||
<p>be changed to just test the value of <code>A</code> when <code>a</code> is argv and <code>A</code> is argc?</p>
|
||||
<p>Cody also changed the code to use <code>fgets(3)</code>.</p>
|
||||
<p>Since this program is so incredible the extra fixes were deemed worth having and
|
||||
@@ -982,31 +991,31 @@ making the generated code return a value from <code>main()</code> rather than ju
|
||||
<code>return;</code>).</p>
|
||||
<p>The following had to be added to the string <code>s</code> (which to fix the segfault was
|
||||
changed from <code>char*s</code> to <code>char s[]</code>):</p>
|
||||
<pre><code>!.Xop.fssps!.Xop.sfuvso.uzqf!.Xop.jnqmjdju.gvodujpo.efdmbsbujpo</code></pre>
|
||||
<pre><code> !.Xop.fssps!.Xop.sfuvso.uzqf!.Xop.jnqmjdju.gvodujpo.efdmbsbujpo</code></pre>
|
||||
<p>and then the call to <code>system()</code> had to be changed to:</p>
|
||||
<div class="sourceCode" id="cb37"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb37-1"><a href="#cb37-1" aria-hidden="true" tabindex="-1"></a>system<span class="op">(</span>q<span class="op">-</span><span class="dv">69</span><span class="op">);</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb37"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb37-1"><a href="#cb37-1" aria-hidden="true" tabindex="-1"></a> system<span class="op">(</span>q<span class="op">-</span><span class="dv">69</span><span class="op">);</span></span></code></pre></div>
|
||||
<p>An important point is that the placement of this string in the <code>s</code> array does
|
||||
matter. This is because of the code:</p>
|
||||
<div class="sourceCode" id="cb38"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb38-1"><a href="#cb38-1" aria-hidden="true" tabindex="-1"></a><span class="op">*</span>o<span class="op">=</span>fopen<span class="op">(</span>q<span class="op">-</span><span class="dv">3</span><span class="op">,</span><span class="st">"w"</span><span class="op">);</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb38"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb38-1"><a href="#cb38-1" aria-hidden="true" tabindex="-1"></a> <span class="op">*</span>o<span class="op">=</span>fopen<span class="op">(</span>q<span class="op">-</span><span class="dv">3</span><span class="op">,</span><span class="st">"w"</span><span class="op">);</span></span></code></pre></div>
|
||||
<p>which means the file name that translates to <code>a.c</code> has to be at the end of the
|
||||
string. Thus the end of the string actually looks like:</p>
|
||||
<pre><code>!.Xop.fssps!.Xop.sfuvso.uzqf!.Xop.jnqmjdju.gvodujpo.efdmbsbujpo!b/d</code></pre>
|
||||
<pre><code> !.Xop.fssps!.Xop.sfuvso.uzqf!.Xop.jnqmjdju.gvodujpo.efdmbsbujpo!b/d</code></pre>
|
||||
<p>But then there is the matter of getting the C to use <code>fgets(3)</code>. As can be seen
|
||||
above it’s not as simple as changing <code>gets(3)</code> to <code>fgets(3)</code>. This was more magic
|
||||
characters that had to be updated and some added. The C code:</p>
|
||||
<div class="sourceCode" id="cb40"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb40-1"><a href="#cb40-1" aria-hidden="true" tabindex="-1"></a>atoi<span class="op">(</span>gets<span class="op">(</span>b<span class="op">))</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb40"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb40-1"><a href="#cb40-1" aria-hidden="true" tabindex="-1"></a> atoi<span class="op">(</span>gets<span class="op">(</span>b<span class="op">))</span></span></code></pre></div>
|
||||
<p>is in the string:</p>
|
||||
<pre><code>bupj)hfut)c**</code></pre>
|
||||
<pre><code> bupj)hfut)c**</code></pre>
|
||||
<p>which was changed to be (in C):</p>
|
||||
<div class="sourceCode" id="cb42"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb42-1"><a href="#cb42-1" aria-hidden="true" tabindex="-1"></a>atoi<span class="op">(</span>fgets<span class="op">(</span>b<span class="op">,</span><span class="dv">99</span><span class="op">,</span>stdin<span class="op">))</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb42"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb42-1"><a href="#cb42-1" aria-hidden="true" tabindex="-1"></a> atoi<span class="op">(</span>fgets<span class="op">(</span>b<span class="op">,</span><span class="dv">99</span><span class="op">,</span>stdin<span class="op">))</span></span></code></pre></div>
|
||||
<p>which in the program is:</p>
|
||||
<pre><code>bupj)ghfut)c-::-tuejo**</code></pre>
|
||||
<pre><code> bupj)ghfut)c-::-tuejo**</code></pre>
|
||||
<p>That’s fine and well but since the code does not include <code>stdio.h</code> there
|
||||
obviously would be a compilation error. Thus the compiler line had to updated to
|
||||
have <code>-include stdio.h</code> which in this rotated string is:</p>
|
||||
<pre><code>.jodmvef!tuejp/i</code></pre>
|
||||
<pre><code> .jodmvef!tuejp/i</code></pre>
|
||||
<p>which had to be added after:</p>
|
||||
<pre><code>efdmbsbujpo!</code></pre>
|
||||
<pre><code> efdmbsbujpo!</code></pre>
|
||||
<p>which is the end of the warning disabled for clang as described above.</p>
|
||||
<p>But now the <code>system(q-69);</code> had to be changed to <code>system(q-86);</code>.</p>
|
||||
<p>Then, later on, Cody discovered that in some systems, clang triggers even more
|
||||
@@ -1015,16 +1024,16 @@ the <code>system(q-86)</code> had to be changed to <code>system(q-104)</code>.</
|
||||
<p>But then to prevent the need for disabling a warning and to be more correct
|
||||
code, the generated code was changed to <code>return 1;</code> rather than just <code>return;</code>.
|
||||
Thus in full the string became:</p>
|
||||
<div class="sourceCode" id="cb46"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb46-1"><a href="#cb46-1" aria-hidden="true" tabindex="-1"></a><span class="dt">char</span> s<span class="op">[]=</span><span class="st">"Qjou!s</span><span class="sc">\\</span><span class="st">311^-g</span><span class="sc">\\</span><span class="st">311^-n</span><span class="sc">\\</span><span class="st">311^-c</span><span class="sc">\\</span><span class="st">::^-q-ma%mO1JBHm%BQ-aP1J[O1HB%[Q<n</span><span class="op">\</span></span>
|
||||
<span id="cb46-2"><a href="#cb46-2" aria-hidden="true" tabindex="-1"></a><span class="st">bjo)*|gps)<<*txjudi)m*|aQdbtf!::::;sfuvso!2<aQefgbvmu;aQ<m,,a%CQ<csfbla</span><span class="sc">%b</span><span class="st">Q<a</span><span class="op">\</span></span>
|
||||
<span id="cb46-3"><a href="#cb46-3" aria-hidden="true" tabindex="-1"></a><span class="st">N2!Q</span><span class="sc">\n</span><span class="st">dbtf!aP2Q;m>aP2Q<a%!D12J!JGJHJOJQJFJSJJJMHS%HD12D12N3!N4</span><span class="sc">\n</span><span class="st">JUJT%UQm>aP4</span><span class="op">\</span></span>
|
||||
<span id="cb46-4"><a href="#cb46-4" aria-hidden="true" tabindex="-1"></a><span class="st">HC%TQs</span><span class="sc">\\</span><span class="st">q,,^>m,2<m>aP4HC%SD12N1</span><span class="sc">\n</span><span class="st">JNQm>s</span><span class="sc">\\</span><span class="st">..q^aHC%NHb</span><span class="sc">%G</span><span class="st">N1!D32P3%RN1UP1D12JPQU</span><span class="op">\</span></span>
|
||||
<span id="cb46-5"><a href="#cb46-5" aria-hidden="true" tabindex="-1"></a><span class="st">aP1HR%PN4</span><span class="sc">\n</span><span class="st">Q<g</span><span class="sc">\\</span><span class="st">(aP3Q(^>aP2Q,2<n</span><span class="sc">\\</span><span class="st">(aP3Q(^>aP4Hb%OD12D12N2!N3</span><span class="sc">\n</span><span class="st">JVP3Q,,<jg)aP3</span><span class="op">\</span></span>
|
||||
<span id="cb46-6"><a href="#cb46-6" aria-hidden="true" tabindex="-1"></a><span class="st">Q=>n</span><span class="sc">\\</span><span class="st">(aP3Q(^*m>g</span><span class="sc">\\</span><span class="st">(aP3Q(^<fmtf!m,,aHC%QN1!N1</span><span class="sc">\n</span><span class="st">J#Qqsjoug)#&e]o#-aP1Q*aHb%#Qq</span><span class="op">\</span></span>
|
||||
<span id="cb46-7"><a href="#cb46-7" aria-hidden="true" tabindex="-1"></a><span class="st">vut)aP1Q*aHb</span><span class="sc">%F</span><span class="st">N1</span><span class="sc">\n</span><span class="st">Qm>::::aHC%VP3Q>bupj)ghfut)c-::-tuejo**aHb%JD12JON1!Qjg)a%</span><span class="op">\</span></span>
|
||||
<span id="cb46-8"><a href="#cb46-8" aria-hidden="true" tabindex="-1"></a><span class="st">LN1UP1D12JIQUaP1HL%IQ*m>aN2!N2</span><span class="sc">\n</span><span class="st">P2Q<fmtf!m,,aHC%MN1!N2>P2Q>aN2</span><span class="sc">\n</span><span class="st">P2Hbdd!.Xop.</span><span class="op">\</span></span>
|
||||
<span id="cb46-9"><a href="#cb46-9" aria-hidden="true" tabindex="-1"></a><span class="st">fssps!.Xop.jnqmjdju.gvodujpo.efdmbsbujpo!.Xop.jnqmjdju.jou!.jodmvef!tuejp/i!</span><span class="op">\</span></span>
|
||||
<span id="cb46-10"><a href="#cb46-10" aria-hidden="true" tabindex="-1"></a><span class="st">b/d"</span><span class="op">;</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb46"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb46-1"><a href="#cb46-1" aria-hidden="true" tabindex="-1"></a> <span class="dt">char</span> s<span class="op">[]=</span><span class="st">"Qjou!s</span><span class="sc">\\</span><span class="st">311^-g</span><span class="sc">\\</span><span class="st">311^-n</span><span class="sc">\\</span><span class="st">311^-c</span><span class="sc">\\</span><span class="st">::^-q-ma%mO1JBHm%BQ-aP1J[O1HB%[Q<n</span><span class="op">\</span></span>
|
||||
<span id="cb46-2"><a href="#cb46-2" aria-hidden="true" tabindex="-1"></a><span class="st"> bjo)*|gps)<<*txjudi)m*|aQdbtf!::::;sfuvso!2<aQefgbvmu;aQ<m,,a%CQ<csfbla</span><span class="sc">%b</span><span class="st">Q<a</span><span class="op">\</span></span>
|
||||
<span id="cb46-3"><a href="#cb46-3" aria-hidden="true" tabindex="-1"></a><span class="st"> N2!Q</span><span class="sc">\n</span><span class="st">dbtf!aP2Q;m>aP2Q<a%!D12J!JGJHJOJQJFJSJJJMHS%HD12D12N3!N4</span><span class="sc">\n</span><span class="st">JUJT%UQm>aP4</span><span class="op">\</span></span>
|
||||
<span id="cb46-4"><a href="#cb46-4" aria-hidden="true" tabindex="-1"></a><span class="st"> HC%TQs</span><span class="sc">\\</span><span class="st">q,,^>m,2<m>aP4HC%SD12N1</span><span class="sc">\n</span><span class="st">JNQm>s</span><span class="sc">\\</span><span class="st">..q^aHC%NHb</span><span class="sc">%G</span><span class="st">N1!D32P3%RN1UP1D12JPQU</span><span class="op">\</span></span>
|
||||
<span id="cb46-5"><a href="#cb46-5" aria-hidden="true" tabindex="-1"></a><span class="st"> aP1HR%PN4</span><span class="sc">\n</span><span class="st">Q<g</span><span class="sc">\\</span><span class="st">(aP3Q(^>aP2Q,2<n</span><span class="sc">\\</span><span class="st">(aP3Q(^>aP4Hb%OD12D12N2!N3</span><span class="sc">\n</span><span class="st">JVP3Q,,<jg)aP3</span><span class="op">\</span></span>
|
||||
<span id="cb46-6"><a href="#cb46-6" aria-hidden="true" tabindex="-1"></a><span class="st"> Q=>n</span><span class="sc">\\</span><span class="st">(aP3Q(^*m>g</span><span class="sc">\\</span><span class="st">(aP3Q(^<fmtf!m,,aHC%QN1!N1</span><span class="sc">\n</span><span class="st">J#Qqsjoug)#&e]o#-aP1Q*aHb%#Qq</span><span class="op">\</span></span>
|
||||
<span id="cb46-7"><a href="#cb46-7" aria-hidden="true" tabindex="-1"></a><span class="st"> vut)aP1Q*aHb</span><span class="sc">%F</span><span class="st">N1</span><span class="sc">\n</span><span class="st">Qm>::::aHC%VP3Q>bupj)ghfut)c-::-tuejo**aHb%JD12JON1!Qjg)a%</span><span class="op">\</span></span>
|
||||
<span id="cb46-8"><a href="#cb46-8" aria-hidden="true" tabindex="-1"></a><span class="st"> LN1UP1D12JIQUaP1HL%IQ*m>aN2!N2</span><span class="sc">\n</span><span class="st">P2Q<fmtf!m,,aHC%MN1!N2>P2Q>aN2</span><span class="sc">\n</span><span class="st">P2Hbdd!.Xop.</span><span class="op">\</span></span>
|
||||
<span id="cb46-9"><a href="#cb46-9" aria-hidden="true" tabindex="-1"></a><span class="st"> fssps!.Xop.jnqmjdju.gvodujpo.efdmbsbujpo!.Xop.jnqmjdju.jou!.jodmvef!tuejp/i!</span><span class="op">\</span></span>
|
||||
<span id="cb46-10"><a href="#cb46-10" aria-hidden="true" tabindex="-1"></a><span class="st"> b/d"</span><span class="op">;</span></span></code></pre></div>
|
||||
<p>and it now is <code>system(q-87);</code>.</p>
|
||||
<p>It is hoped that this is the last time the string has to be updated to work with
|
||||
all versions of clang but if not the above is how it works.</p>
|
||||
@@ -1095,16 +1104,16 @@ the change to check for a <code>NULL</code> file was added. Then it was noticed
|
||||
problem is that <code>adgrep.c</code> was an incorrect reference that never existed and it
|
||||
was never fixed in any of the files, not the code or the documentation, and thus
|
||||
was entirely incorrect code. A fun fact is that one can do:</p>
|
||||
<div class="sourceCode" id="cb47"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb47-1"><a href="#cb47-1" aria-hidden="true" tabindex="-1"></a>W<span class="op">=</span> fopen<span class="op">(</span>wc<span class="op">>=</span> <span class="dv">2</span> <span class="op">?</span> V<span class="op">[</span><span class="dv">1</span><span class="op">]</span> <span class="op">:</span> __FILE__<span class="op">,</span><span class="st">"rt"</span><span class="op">);</span><span class="cf">if</span><span class="op">(!</span>W<span class="op">)</span>exit<span class="op">(</span><span class="dv">1</span><span class="op">);</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb47"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb47-1"><a href="#cb47-1" aria-hidden="true" tabindex="-1"></a> W<span class="op">=</span> fopen<span class="op">(</span>wc<span class="op">>=</span> <span class="dv">2</span> <span class="op">?</span> V<span class="op">[</span><span class="dv">1</span><span class="op">]</span> <span class="op">:</span> __FILE__<span class="op">,</span><span class="st">"rt"</span><span class="op">);</span><span class="cf">if</span><span class="op">(!</span>W<span class="op">)</span>exit<span class="op">(</span><span class="dv">1</span><span class="op">);</span></span></code></pre></div>
|
||||
<p>but one <em>CANNOT</em> do:</p>
|
||||
<div class="sourceCode" id="cb48"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb48-1"><a href="#cb48-1" aria-hidden="true" tabindex="-1"></a>W<span class="op">=</span> fopen<span class="op">(</span>wc<span class="op">>=</span> <span class="dv">2</span> <span class="op">?</span> V<span class="op">[</span><span class="dv">1</span><span class="op">]</span> <span class="op">:</span> __FILE__<span class="op">,</span><span class="st">"rt"</span><span class="op">);</span><span class="cf">if</span><span class="op">(!</span>W<span class="op">)</span>exit<span class="op">(</span><span class="dv">1</span><span class="op">);</span></span>
|
||||
<span id="cb48-2"><a href="#cb48-2" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> <span class="op">(</span>W<span class="op">==</span>NULL<span class="op">)</span>exit<span class="op">(</span><span class="dv">1</span><span class="op">);</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb48"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb48-1"><a href="#cb48-1" aria-hidden="true" tabindex="-1"></a> W<span class="op">=</span> fopen<span class="op">(</span>wc<span class="op">>=</span> <span class="dv">2</span> <span class="op">?</span> V<span class="op">[</span><span class="dv">1</span><span class="op">]</span> <span class="op">:</span> __FILE__<span class="op">,</span><span class="st">"rt"</span><span class="op">);</span><span class="cf">if</span><span class="op">(!</span>W<span class="op">)</span>exit<span class="op">(</span><span class="dv">1</span><span class="op">);</span></span>
|
||||
<span id="cb48-2"><a href="#cb48-2" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> <span class="op">(</span>W<span class="op">==</span>NULL<span class="op">)</span>exit<span class="op">(</span><span class="dv">1</span><span class="op">);</span></span></code></pre></div>
|
||||
<p>because <code>adwc.c</code> will be empty! The difference is it is on a newline, the check.
|
||||
This is an example of how a simple change in code can break it and this is also
|
||||
true of another change as further below.</p>
|
||||
<p>Cody also restored a slightly more obscure line of code that had been changed:</p>
|
||||
<div class="sourceCode" id="cb49"><pre class="sourceCode diff"><code class="sourceCode diff"><span id="cb49-1"><a href="#cb49-1" aria-hidden="true" tabindex="-1"></a><span class="st">- putc("}|uutsrq`_^bji`[Zkediml[PO]a_M__]ISOYIRGTNR"[i]+i-9,stderr);</span></span>
|
||||
<span id="cb49-2"><a href="#cb49-2" aria-hidden="true" tabindex="-1"></a><span class="va">+ putc(i["}|uutsrq`_^bji`[Zkediml[PO]a_M__]ISOYIRGTNR"]+i-9,stderr);</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb49"><pre class="sourceCode diff"><code class="sourceCode diff"><span id="cb49-1"><a href="#cb49-1" aria-hidden="true" tabindex="-1"></a> - putc("}|uutsrq`_^bji`[Zkediml[PO]a_M__]ISOYIRGTNR"[i]+i-9,stderr);</span>
|
||||
<span id="cb49-2"><a href="#cb49-2" aria-hidden="true" tabindex="-1"></a> + putc(i["}|uutsrq`_^bji`[Zkediml[PO]a_M__]ISOYIRGTNR"]+i-9,stderr);</span></code></pre></div>
|
||||
<p>though it’s questionable how much more (if at all) obscure that is :-)</p>
|
||||
<p>Cody also changed the location that it used <code>gets()</code> to be <code>fgets(3)</code>.
|
||||
This was complicated because of how the other source files are generated (as
|
||||
@@ -1124,7 +1133,7 @@ removal of the extra line (as in with a comma operator or a <code>&&</co
|
||||
might be expected from the above, caused compilation errors with another
|
||||
generated file (<code>adwc.c</code>)! Thus after the <code>gets(3)</code> call in the line that looks
|
||||
like:</p>
|
||||
<div class="sourceCode" id="cb50"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb50-1"><a href="#cb50-1" aria-hidden="true" tabindex="-1"></a><span class="cf">while</span><span class="op">(</span> gets<span class="op">(</span>Y<span class="op">)</span> <span class="op">){</span> Y<span class="op">[</span>strlen<span class="op">(</span>Y<span class="op">)-</span><span class="dv">1</span><span class="op">]=</span><span class="ch">'</span><span class="sc">\0</span><span class="ch">'</span><span class="op">;</span> <span class="cf">if</span><span class="op">(</span>A<span class="op">(</span>Y<span class="op">))</span> puts<span class="op">(</span>Y<span class="op">);</span> <span class="op">}</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb50"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb50-1"><a href="#cb50-1" aria-hidden="true" tabindex="-1"></a> <span class="cf">while</span><span class="op">(</span> gets<span class="op">(</span>Y<span class="op">)</span> <span class="op">){</span> Y<span class="op">[</span>strlen<span class="op">(</span>Y<span class="op">)-</span><span class="dv">1</span><span class="op">]=</span><span class="ch">'</span><span class="sc">\0</span><span class="ch">'</span><span class="op">;</span> <span class="cf">if</span><span class="op">(</span>A<span class="op">(</span>Y<span class="op">))</span> puts<span class="op">(</span>Y<span class="op">);</span> <span class="op">}</span></span></code></pre></div>
|
||||
<p>one must keep the <code>Y[strlen(Y)-1]='\0';</code> part and keep it there.</p>
|
||||
<p>These fixes are complex changes due to the way the program and Makefile generate
|
||||
the additional tools.</p>
|
||||
@@ -1296,8 +1305,8 @@ mentioned script on all the data files.</p>
|
||||
<p>Both <a href="#cody">Cody</a> and <a href="#yusuke">Yusuke</a> fixed this so that it will work with modern systems. Yusuke
|
||||
provided some fixes of the X code and Cody fixed the C pre-processor directives
|
||||
so that it would compile. It used to be that you could get away with code like:</p>
|
||||
<div class="sourceCode" id="cb51"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb51-1"><a href="#cb51-1" aria-hidden="true" tabindex="-1"></a>G <span class="dt">int</span> i<span class="op">,</span>j</span>
|
||||
<span id="cb51-2"><a href="#cb51-2" aria-hidden="true" tabindex="-1"></a>K <span class="cf">case</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb51"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb51-1"><a href="#cb51-1" aria-hidden="true" tabindex="-1"></a> G <span class="dt">int</span> i<span class="op">,</span>j</span>
|
||||
<span id="cb51-2"><a href="#cb51-2" aria-hidden="true" tabindex="-1"></a> K <span class="cf">case</span></span></code></pre></div>
|
||||
<p>and expect <code>G;</code> to equate to <code>int i, j;</code> (though it’s now a long) and <code>K</code> to mean
|
||||
<code>case</code> but that’s no longer the case so the offending lines had <code>#define</code>
|
||||
prepended to them.</p>
|
||||
@@ -1346,9 +1355,9 @@ arg (as it was 0 at file scope already this is perfectly fine and it means
|
||||
there’s no need to cast it to an int in the function call though that would also
|
||||
work).</p>
|
||||
<p>Cody also added the alt code, provided by the author, which is:</p>
|
||||
<pre><code>... a version of the program before it got formatted into the VIII,
|
||||
augmented with comments showing where each state begins. N1 and N2 are
|
||||
notes.</code></pre>
|
||||
<pre><code> ... a version of the program before it got formatted into the VIII,
|
||||
augmented with comments showing where each state begins. N1 and N2 are
|
||||
notes.</code></pre>
|
||||
<p>but fixed to work with clang as well.</p>
|
||||
<p>NOTE: the <code>N1</code> and <code>N2</code> are provided as notes in the index.html file describing
|
||||
this code. Other code is also described there.</p>
|
||||
@@ -1699,7 +1708,7 @@ larger the resulting program becomes. It can be gigabytes in length if it
|
||||
doesn’t crash. At this point since the author stated it has no <code>while</code>,
|
||||
<code>do...while</code>, <code>for</code>, <code>if/else</code>, <code>switch</code>, <code>?:</code> Cody removed the if statement by
|
||||
doing:</p>
|
||||
<div class="sourceCode" id="cb53"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb53-1"><a href="#cb53-1" aria-hidden="true" tabindex="-1"></a><span class="op">((</span>V<span class="op">[</span><span class="dv">1</span><span class="op">]&&((</span>atoi<span class="op">(</span>V<span class="op">[</span><span class="dv">1</span><span class="op">])></span><span class="dv">0</span><span class="op">&&</span>atoi<span class="op">(</span>V<span class="op">[</span><span class="dv">1</span><span class="op">])<</span><span class="dv">27</span><span class="op">))||(</span>exit<span class="op">(</span><span class="dv">1</span><span class="op">),</span><span class="dv">1</span><span class="op">)));</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb53"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb53-1"><a href="#cb53-1" aria-hidden="true" tabindex="-1"></a> <span class="op">((</span>V<span class="op">[</span><span class="dv">1</span><span class="op">]&&((</span>atoi<span class="op">(</span>V<span class="op">[</span><span class="dv">1</span><span class="op">])></span><span class="dv">0</span><span class="op">&&</span>atoi<span class="op">(</span>V<span class="op">[</span><span class="dv">1</span><span class="op">])<</span><span class="dv">27</span><span class="op">))||(</span>exit<span class="op">(</span><span class="dv">1</span><span class="op">),</span><span class="dv">1</span><span class="op">)));</span></span></code></pre></div>
|
||||
<p>Cody also added the <a href="1998/schnitzi/try.sh">try.sh</a> script to help users try the
|
||||
commands that we recommended as well as some added by him.</p>
|
||||
<h2 id="schweikh1-index.html-1"><a name="1998_schweikh1"></a><a href="1998/schweikh1/schweikh1.c">1998/schweikh1</a> (<a href="1998/schweikh1/index.html%5D">index.html</a>)</h2>
|
||||
@@ -1723,7 +1732,7 @@ was changed back to the original.)</p>
|
||||
not exist, it would dereference a NULL pointer and very likely crash or halt and
|
||||
catch fire :-), preventing the entry from working. Notice how <code>H</code> is a funny
|
||||
macro defined as:</p>
|
||||
<div class="sourceCode" id="cb54"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb54-1"><a href="#cb54-1" aria-hidden="true" tabindex="-1"></a><span class="pp">%:define H</span><span class="op">(</span><span class="pp">x</span><span class="op">)</span><span class="pp"> </span><span class="op"><</span><span class="pp">st</span><span class="op">%:%:</span><span class="pp">x</span><span class="op">##.</span><span class="pp">h</span><span class="op">></span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb54"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb54-1"><a href="#cb54-1" aria-hidden="true" tabindex="-1"></a> <span class="pp">%:define H</span><span class="op">(</span><span class="pp">x</span><span class="op">)</span><span class="pp"> </span><span class="op"><</span><span class="pp">st</span><span class="op">%:%:</span><span class="pp">x</span><span class="op">##.</span><span class="pp">h</span><span class="op">></span></span></code></pre></div>
|
||||
<p>and yet the <code>FILE *</code> can be called <code>H</code>! This might or might not make sense to
|
||||
you but if it doesn’t can you figure out why?</p>
|
||||
<p>Another fix is that previously the program would <code>return 1</code> if a file failed to
|
||||
@@ -1746,10 +1755,10 @@ compute the character count in the code according to the contest rules of 1998
|
||||
in the file <a href="1998/schweikh1/charcount.pl">charcount.pl</a>.</p>
|
||||
<h2 id="schweikh2-index.html-1"><a name="1998_schweikh2"></a><a href="1998/schweikh2/schweikh2.c">1998/schweikh2</a> (<a href="1998/schweikh2/index.html%5D">index.html</a>)</h2>
|
||||
<p><a href="#cody">Cody</a> fixed the code to not trigger an internal compiler error in gcc:</p>
|
||||
<pre><code>:10:16: warning: type defaults to 'int' in declaration of 'zero' [-Wimplicit-int]
|
||||
: In function 'main':
|
||||
:12:1: warning: missing terminating " character
|
||||
:12:19: internal compiler error: invalid built-in macro "__FILE__"</code></pre>
|
||||
<pre><code> :10:16: warning: type defaults to 'int' in declaration of 'zero' [-Wimplicit-int]
|
||||
: In function 'main':
|
||||
:12:1: warning: missing terminating " character
|
||||
:12:19: internal compiler error: invalid built-in macro "__FILE__"</code></pre>
|
||||
<p>The string <code>"01\015"</code> had to be changed to <code>ONE(O(1,1,2,6,0,6))</code>. For an
|
||||
interesting historical explanation and further details and fun, see the
|
||||
<a href="1998/schweikh2/index.html#historical-remarks">historical remarks</a> in the
|
||||
@@ -1772,10 +1781,10 @@ command.</p>
|
||||
<p>Cody also made the Makefile rule <code>all</code> symlink the entry to <code>samefile</code> as that
|
||||
is the name of the program.</p>
|
||||
<p>The author stated that:</p>
|
||||
<pre><code>In the remote event that the input has more than `8192` files with
|
||||
the same size (on systems where `sizeof (char *) == 4`, or `4096` when
|
||||
`sizeof (char *) == 8`), increase the manifest constant 32767 on line
|
||||
31.</code></pre>
|
||||
<pre><code> In the remote event that the input has more than `8192` files with
|
||||
the same size (on systems where `sizeof (char *) == 4`, or `4096` when
|
||||
`sizeof (char *) == 8`), increase the manifest constant 32767 on line
|
||||
31.</code></pre>
|
||||
<p>so Cody changed the constant to a macro in the Makefile called <code>SZ</code> so one can
|
||||
more easily do this (though it indeed seems highly unlikely). See the index.html
|
||||
for more details.</p>
|
||||
@@ -1842,7 +1851,7 @@ more confusing (even if not confusing).</p>
|
||||
<h2 id="robison-index.html-1"><a name="2000_robison"></a><a href="2000/robison/robison.c">2000/robison</a> (<a href="2000/robison/index.html%5D">index.html</a>)</h2>
|
||||
<p><a href="#cody">Cody</a> fixed an infinite loop that occurred if invalid input was entered, flooding
|
||||
the screen with:</p>
|
||||
<pre><code>Black position and direction: illegal</code></pre>
|
||||
<pre><code> Black position and direction: illegal</code></pre>
|
||||
<p>This was fixed by having the <code>scanf(3)</code> read in a string and then use <code>atoi(3)</code>
|
||||
on it to assign to the <code>int</code>s, much like with <code>1987/lievaart</code>. The strings are
|
||||
<code>char[5]</code> and the <code>%</code> specifier is <code>%4s</code> which is enough for the game.</p>
|
||||
@@ -1857,26 +1866,26 @@ least for the curses mode, allows one to quit at any time by pressing ‘q’. S
|
||||
below for more details.</p>
|
||||
<p>Due to a terrible design choice of the SDL1 developers something had to be
|
||||
changed. As was noted in the log:</p>
|
||||
<pre><code>The SDL version did not work for a number of reasons. First of all the
|
||||
code requires that SDL is defined. Second the path[sic] wrong header file was
|
||||
included. Third the SDL1 developers thought it would be a great idea
|
||||
(but obviously it's a terrible idea) to redefine main() (!!) so that any
|
||||
program that uses SDL1 has to have the same args as their definition.
|
||||
This program had 'main()' so the error message was:
|
||||
<pre><code> The SDL version did not work for a number of reasons. First of all the
|
||||
code requires that SDL is defined. Second the path[sic] wrong header file was
|
||||
included. Third the SDL1 developers thought it would be a great idea
|
||||
(but obviously it's a terrible idea) to redefine main() (!!) so that any
|
||||
program that uses SDL1 has to have the same args as their definition.
|
||||
This program had 'main()' so the error message was:
|
||||
|
||||
thadgavin.c:60:1: error: conflicting types for 'SDL_main'
|
||||
main()
|
||||
^
|
||||
/opt/local/include/SDL/SDL_main.h:34:14: note: expanded from macro 'main'
|
||||
#define main SDL_main
|
||||
^
|
||||
/opt/local/include/SDL/SDL_main.h:35:12: note: previous declaration is here
|
||||
extern int SDL_main(int argc, char *argv[]);
|
||||
^
|
||||
1 warning and 1 error generated.
|
||||
make: *** [thadgavin_sdl] Error 1
|
||||
thadgavin.c:60:1: error: conflicting types for 'SDL_main'
|
||||
main()
|
||||
^
|
||||
/opt/local/include/SDL/SDL_main.h:34:14: note: expanded from macro 'main'
|
||||
#define main SDL_main
|
||||
^
|
||||
/opt/local/include/SDL/SDL_main.h:35:12: note: previous declaration is here
|
||||
extern int SDL_main(int argc, char *argv[]);
|
||||
^
|
||||
1 warning and 1 error generated.
|
||||
make: *** [thadgavin_sdl] Error 1
|
||||
|
||||
Thus main() was changed to 'int main(int argc, char **argv)'.</code></pre>
|
||||
Thus main() was changed to 'int main(int argc, char **argv)'.</code></pre>
|
||||
<p>Cody also added an alternate version to help see what is going on in more modern
|
||||
systems and in case you’re sensitive to rapidly moving swirling. See the
|
||||
index.html for details on that. Note that this alternate version only will impact
|
||||
@@ -1919,9 +1928,9 @@ was supposed to do; instead it reported text file busy error.</p>
|
||||
<p>Notice that the location of <code>munmap()</code> and <code>close()</code> followed by <code>execv()</code> <em>does
|
||||
matter</em>!</p>
|
||||
<p>To get this to compile with clang, <code>main()</code> had to change from:</p>
|
||||
<div class="sourceCode" id="cb59"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb59-1"><a href="#cb59-1" aria-hidden="true" tabindex="-1"></a>main <span class="op">(</span><span class="dt">char</span> <span class="op">*</span>ck<span class="op">,</span> <span class="dt">char</span> <span class="op">**</span>k<span class="op">)</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb59"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb59-1"><a href="#cb59-1" aria-hidden="true" tabindex="-1"></a> main <span class="op">(</span><span class="dt">char</span> <span class="op">*</span>ck<span class="op">,</span> <span class="dt">char</span> <span class="op">**</span>k<span class="op">)</span></span></code></pre></div>
|
||||
<p>to:</p>
|
||||
<div class="sourceCode" id="cb60"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb60-1"><a href="#cb60-1" aria-hidden="true" tabindex="-1"></a>main <span class="op">(</span><span class="dt">int</span> cka<span class="op">,</span> <span class="dt">char</span> <span class="op">**</span>k<span class="op">)</span> <span class="op">{</span> <span class="dt">char</span> <span class="op">*</span>ck <span class="op">=</span> <span class="op">(</span><span class="dt">char</span> <span class="op">*)</span>cka<span class="op">;</span> <span class="co">/* ... */</span> <span class="op">}</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb60"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb60-1"><a href="#cb60-1" aria-hidden="true" tabindex="-1"></a> main <span class="op">(</span><span class="dt">int</span> cka<span class="op">,</span> <span class="dt">char</span> <span class="op">**</span>k<span class="op">)</span> <span class="op">{</span> <span class="dt">char</span> <span class="op">*</span>ck <span class="op">=</span> <span class="op">(</span><span class="dt">char</span> <span class="op">*)</span>cka<span class="op">;</span> <span class="co">/* ... */</span> <span class="op">}</span></span></code></pre></div>
|
||||
<p>The following change was also made to be more portable, in case the constants
|
||||
<code>PROT_READ</code> and/or <code>PROT_WRITE</code> are not standardised or some platform does not
|
||||
follow it:</p>
|
||||
@@ -1930,16 +1939,16 @@ follow it:</p>
|
||||
macOS and Linux).</p>
|
||||
<p>NOTE: there might be educational value to see the progress of this fix; if you
|
||||
wish to see, try the following commands from the <code>2001/anonymous</code> directory:</p>
|
||||
<div class="sourceCode" id="cb61"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb61-1"><a href="#cb61-1" aria-hidden="true" tabindex="-1"></a><span class="fu">git</span> diff d2a42f42e8f477f29e9d5ed09ce2bb349eaf7397..93aa8d79f208dcccc3c5a2370a727b5cf64e9c53 anonymous.c</span>
|
||||
<span id="cb61-2"><a href="#cb61-2" aria-hidden="true" tabindex="-1"></a><span class="fu">git</span> diff 93aa8d79f208dcccc3c5a2370a727b5cf64e9c53..c48629017117379a52b1a512ef8f2593ca9569c8 anonymous.c</span>
|
||||
<span id="cb61-3"><a href="#cb61-3" aria-hidden="true" tabindex="-1"></a><span class="fu">git</span> diff c48629017117379a52b1a512ef8f2593ca9569c8..efdee208a2bc650256637b9357ddfd0de82d2f41 anonymous.c</span>
|
||||
<span id="cb61-4"><a href="#cb61-4" aria-hidden="true" tabindex="-1"></a><span class="fu">git</span> diff efdee208a2bc650256637b9357ddfd0de82d2f41..e9a3f77ea3b209e63ac3f9c06bb84ad86e5ea706 anonymous.c</span>
|
||||
<span id="cb61-5"><a href="#cb61-5" aria-hidden="true" tabindex="-1"></a><span class="fu">git</span> diff d2a42f42e8f477f29e9d5ed09ce2bb349eaf7397..2159caec4677e0f25ad704a74e04c8196fd6c343 anonymous.c</span>
|
||||
<span id="cb61-6"><a href="#cb61-6" aria-hidden="true" tabindex="-1"></a><span class="fu">git</span> diff 2159caec4677e0f25ad704a74e04c8196fd6c343..4bc03de321612869aebf855850c6500df95cb6ef anonymous.c</span></code></pre></div>
|
||||
<div class="sourceCode" id="cb61"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb61-1"><a href="#cb61-1" aria-hidden="true" tabindex="-1"></a> <span class="fu">git</span> diff d2a42f42e8f477f29e9d5ed09ce2bb349eaf7397..93aa8d79f208dcccc3c5a2370a727b5cf64e9c53 anonymous.c</span>
|
||||
<span id="cb61-2"><a href="#cb61-2" aria-hidden="true" tabindex="-1"></a> <span class="fu">git</span> diff 93aa8d79f208dcccc3c5a2370a727b5cf64e9c53..c48629017117379a52b1a512ef8f2593ca9569c8 anonymous.c</span>
|
||||
<span id="cb61-3"><a href="#cb61-3" aria-hidden="true" tabindex="-1"></a> <span class="fu">git</span> diff c48629017117379a52b1a512ef8f2593ca9569c8..efdee208a2bc650256637b9357ddfd0de82d2f41 anonymous.c</span>
|
||||
<span id="cb61-4"><a href="#cb61-4" aria-hidden="true" tabindex="-1"></a> <span class="fu">git</span> diff efdee208a2bc650256637b9357ddfd0de82d2f41..e9a3f77ea3b209e63ac3f9c06bb84ad86e5ea706 anonymous.c</span>
|
||||
<span id="cb61-5"><a href="#cb61-5" aria-hidden="true" tabindex="-1"></a> <span class="fu">git</span> diff d2a42f42e8f477f29e9d5ed09ce2bb349eaf7397..2159caec4677e0f25ad704a74e04c8196fd6c343 anonymous.c</span>
|
||||
<span id="cb61-6"><a href="#cb61-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">git</span> diff 2159caec4677e0f25ad704a74e04c8196fd6c343..4bc03de321612869aebf855850c6500df95cb6ef anonymous.c</span></code></pre></div>
|
||||
<p>Finally to see from start to finish:</p>
|
||||
<div class="sourceCode" id="cb62"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb62-1"><a href="#cb62-1" aria-hidden="true" tabindex="-1"></a><span class="fu">git</span> diff d2a42f42e8f477f29e9d5ed09ce2bb349eaf7397..4bc03de321612869aebf855850c6500df95cb6ef anonymous.c</span></code></pre></div>
|
||||
<div class="sourceCode" id="cb62"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb62-1"><a href="#cb62-1" aria-hidden="true" tabindex="-1"></a> <span class="fu">git</span> diff d2a42f42e8f477f29e9d5ed09ce2bb349eaf7397..4bc03de321612869aebf855850c6500df95cb6ef anonymous.c</span></code></pre></div>
|
||||
<p>or to not use <code>git</code>:</p>
|
||||
<div class="sourceCode" id="cb63"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb63-1"><a href="#cb63-1" aria-hidden="true" tabindex="-1"></a><span class="fu">make</span> diff_orig_prog</span></code></pre></div>
|
||||
<div class="sourceCode" id="cb63"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb63-1"><a href="#cb63-1" aria-hidden="true" tabindex="-1"></a> <span class="fu">make</span> diff_orig_prog</span></code></pre></div>
|
||||
<p>Cody also added a <a href="anonymous.bed.c">program</a> like <a href="anonymous.ten.c">anonymous.ten.c</a>
|
||||
<a href="https://en.wikipedia.org/wiki/Ten_Green_Bottles">Ten Green Bottles</a> but which
|
||||
sings <a href="https://allnurseryrhymes.com/ten-in-the-bed/">Ten in the Bed</a> instead.</p>
|
||||
@@ -1992,12 +2001,12 @@ valid, BTW.</p>
|
||||
<p><a href="#cody">Cody</a> added a value to <code>return</code> in <code>main()</code> to make it more portable.</p>
|
||||
<p>Cody fixed this to compile with clang in Linux. The problem was C99 does not
|
||||
support implicit int:</p>
|
||||
<div class="sourceCode" id="cb64"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb64-1"><a href="#cb64-1" aria-hidden="true" tabindex="-1"></a>coupard<span class="op">.</span>c<span class="op">:</span><span class="dv">31</span><span class="op">:</span><span class="dv">10</span><span class="op">:</span> error<span class="op">:</span> parameter <span class="ch">'h'</span> was not declared<span class="op">,</span> defaults to <span class="ch">'i</span><span class="er">nt</span><span class="ch">'</span><span class="op">;</span> ISO C99 and later <span class="cf">do</span> not support implicit <span class="dt">int</span> <span class="op">[-</span>Wimplicit<span class="op">-</span><span class="dt">int</span><span class="op">]</span></span>
|
||||
<span id="cb64-2"><a href="#cb64-2" aria-hidden="true" tabindex="-1"></a><span class="dt">void</span> e<span class="op">(</span>n<span class="op">,</span>h<span class="op">){</span></span>
|
||||
<span id="cb64-3"><a href="#cb64-3" aria-hidden="true" tabindex="-1"></a> <span class="op">^</span></span>
|
||||
<span id="cb64-4"><a href="#cb64-4" aria-hidden="true" tabindex="-1"></a>coupard<span class="op">.</span>c<span class="op">:</span><span class="dv">31</span><span class="op">:</span><span class="dv">8</span><span class="op">:</span> error<span class="op">:</span> parameter <span class="ch">'n'</span> was not declared<span class="op">,</span> defaults to <span class="ch">'i</span><span class="er">nt</span><span class="ch">'</span><span class="op">;</span> ISO C99 and later <span class="cf">do</span> not support implicit <span class="dt">int</span> <span class="op">[-</span>Wimplicit<span class="op">-</span><span class="dt">int</span><span class="op">]</span></span>
|
||||
<span id="cb64-5"><a href="#cb64-5" aria-hidden="true" tabindex="-1"></a><span class="dt">void</span> e<span class="op">(</span>n<span class="op">,</span>h<span class="op">){</span></span>
|
||||
<span id="cb64-6"><a href="#cb64-6" aria-hidden="true" tabindex="-1"></a> <span class="op">^</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb64"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb64-1"><a href="#cb64-1" aria-hidden="true" tabindex="-1"></a> coupard<span class="op">.</span>c<span class="op">:</span><span class="dv">31</span><span class="op">:</span><span class="dv">10</span><span class="op">:</span> error<span class="op">:</span> parameter <span class="ch">'h'</span> was not declared<span class="op">,</span> defaults to <span class="ch">'i</span><span class="er">nt</span><span class="ch">'</span><span class="op">;</span> ISO C99 and later <span class="cf">do</span> not support implicit <span class="dt">int</span> <span class="op">[-</span>Wimplicit<span class="op">-</span><span class="dt">int</span><span class="op">]</span></span>
|
||||
<span id="cb64-2"><a href="#cb64-2" aria-hidden="true" tabindex="-1"></a> <span class="dt">void</span> e<span class="op">(</span>n<span class="op">,</span>h<span class="op">){</span></span>
|
||||
<span id="cb64-3"><a href="#cb64-3" aria-hidden="true" tabindex="-1"></a> <span class="op">^</span></span>
|
||||
<span id="cb64-4"><a href="#cb64-4" aria-hidden="true" tabindex="-1"></a> coupard<span class="op">.</span>c<span class="op">:</span><span class="dv">31</span><span class="op">:</span><span class="dv">8</span><span class="op">:</span> error<span class="op">:</span> parameter <span class="ch">'n'</span> was not declared<span class="op">,</span> defaults to <span class="ch">'i</span><span class="er">nt</span><span class="ch">'</span><span class="op">;</span> ISO C99 and later <span class="cf">do</span> not support implicit <span class="dt">int</span> <span class="op">[-</span>Wimplicit<span class="op">-</span><span class="dt">int</span><span class="op">]</span></span>
|
||||
<span id="cb64-5"><a href="#cb64-5" aria-hidden="true" tabindex="-1"></a> <span class="dt">void</span> e<span class="op">(</span>n<span class="op">,</span>h<span class="op">){</span></span>
|
||||
<span id="cb64-6"><a href="#cb64-6" aria-hidden="true" tabindex="-1"></a> <span class="op">^</span></span></code></pre></div>
|
||||
<p>and for some reason it was being reported as an error. This was not really worth
|
||||
a thanks per se but it was originally done by adding <code>int</code>. The better solution
|
||||
is to disable the warning which is what was done later on to make it more like
|
||||
@@ -2033,8 +2042,8 @@ it’s also how you invoke the program.</p>
|
||||
author’s remarks.</p>
|
||||
<p>He also fixed the <a href="2001/herrmann1/herrmann1.sh">script herrmann1.sh</a> for
|
||||
shellcheck. In particular there were quite a few:</p>
|
||||
<pre><code>SC2086 (info): Double quote to prevent globbing and word splitting.
|
||||
SC2248 (style): Prefer double quoting even when variables don't contain special characters.</code></pre>
|
||||
<pre><code> SC2086 (info): Double quote to prevent globbing and word splitting.
|
||||
SC2248 (style): Prefer double quoting even when variables don't contain special characters.</code></pre>
|
||||
<p>errors/warnings.</p>
|
||||
<p>Cody also added the <a href="2001/herrmann1/try.sh">try.sh</a> script.</p>
|
||||
<h2 id="herrmann2-index.html"><a name="2001_herrmann2"></a><a href="2001/herrmann2/herrmann2.c">2001/herrmann2</a> (<a href="2001/herrmann2/index.html%5D">index.html</a>)</h2>
|
||||
@@ -2147,20 +2156,20 @@ Wayback Machine.</p>
|
||||
<p><a href="#cody">Cody</a> fixed this to compile with gcc (it worked with clang). The problem was the
|
||||
cpp being unable to parse the generated code (see the index.html for details) and
|
||||
this ended up with a number of errors like:</p>
|
||||
<div class="sourceCode" id="cb66"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb66-1"><a href="#cb66-1" aria-hidden="true" tabindex="-1"></a>jdalbec<span class="op">.</span>c<span class="op">:</span><span class="dv">64</span><span class="op">:</span><span class="dv">5</span><span class="op">:</span> error<span class="op">:</span> stray <span class="ch">'#</span><span class="er">#</span><span class="ch">'</span> in program</span>
|
||||
<span id="cb66-2"><a href="#cb66-2" aria-hidden="true" tabindex="-1"></a> <span class="dv">64</span> <span class="op">|</span> B N##B <span class="op">(</span>I<span class="op">)</span> <span class="op">;</span> \</span>
|
||||
<span id="cb66-3"><a href="#cb66-3" aria-hidden="true" tabindex="-1"></a> <span class="op">|</span> <span class="op">^~</span></span>
|
||||
<div class="sourceCode" id="cb66"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb66-1"><a href="#cb66-1" aria-hidden="true" tabindex="-1"></a> jdalbec<span class="op">.</span>c<span class="op">:</span><span class="dv">64</span><span class="op">:</span><span class="dv">5</span><span class="op">:</span> error<span class="op">:</span> stray <span class="ch">'#</span><span class="er">#</span><span class="ch">'</span> in program</span>
|
||||
<span id="cb66-2"><a href="#cb66-2" aria-hidden="true" tabindex="-1"></a> <span class="dv">64</span> <span class="op">|</span> B N##B <span class="op">(</span>I<span class="op">)</span> <span class="op">;</span> \</span>
|
||||
<span id="cb66-3"><a href="#cb66-3" aria-hidden="true" tabindex="-1"></a> <span class="op">|</span> <span class="op">^~</span></span>
|
||||
<span id="cb66-4"><a href="#cb66-4" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb66-5"><a href="#cb66-5" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb66-6"><a href="#cb66-6" aria-hidden="true" tabindex="-1"></a><span class="op">..</span></span>
|
||||
<span id="cb66-6"><a href="#cb66-6" aria-hidden="true" tabindex="-1"></a> <span class="op">..</span></span>
|
||||
<span id="cb66-7"><a href="#cb66-7" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb66-8"><a href="#cb66-8" aria-hidden="true" tabindex="-1"></a>jdalbec<span class="op">.</span>c<span class="op">:</span><span class="dv">65</span><span class="op">:</span><span class="dv">5</span><span class="op">:</span> error<span class="op">:</span> stray <span class="ch">'#</span><span class="er">#</span><span class="ch">'</span> in program</span>
|
||||
<span id="cb66-9"><a href="#cb66-9" aria-hidden="true" tabindex="-1"></a> <span class="dv">65</span> <span class="op">|</span> V F##B <span class="op">(</span>B<span class="op">)</span> <span class="op">;</span> \</span>
|
||||
<span id="cb66-10"><a href="#cb66-10" aria-hidden="true" tabindex="-1"></a> <span class="op">|</span> <span class="op">^~</span></span>
|
||||
<span id="cb66-11"><a href="#cb66-11" aria-hidden="true" tabindex="-1"></a>jdalbec<span class="op">.</span>c<span class="op">:</span><span class="dv">65</span><span class="op">:</span><span class="dv">5</span><span class="op">:</span> error<span class="op">:</span> expected <span class="ch">';'</span> before <span class="ch">'B'</span></span>
|
||||
<span id="cb66-12"><a href="#cb66-12" aria-hidden="true" tabindex="-1"></a> <span class="dv">65</span> <span class="op">|</span> V F##B <span class="op">(</span>B<span class="op">)</span> <span class="op">;</span> \</span>
|
||||
<span id="cb66-13"><a href="#cb66-13" aria-hidden="true" tabindex="-1"></a> <span class="op">|</span> <span class="op">^</span> <span class="op">~</span></span>
|
||||
<span id="cb66-14"><a href="#cb66-14" aria-hidden="true" tabindex="-1"></a> <span class="op">|</span> <span class="op">;</span></span></code></pre></div>
|
||||
<span id="cb66-8"><a href="#cb66-8" aria-hidden="true" tabindex="-1"></a> jdalbec<span class="op">.</span>c<span class="op">:</span><span class="dv">65</span><span class="op">:</span><span class="dv">5</span><span class="op">:</span> error<span class="op">:</span> stray <span class="ch">'#</span><span class="er">#</span><span class="ch">'</span> in program</span>
|
||||
<span id="cb66-9"><a href="#cb66-9" aria-hidden="true" tabindex="-1"></a> <span class="dv">65</span> <span class="op">|</span> V F##B <span class="op">(</span>B<span class="op">)</span> <span class="op">;</span> \</span>
|
||||
<span id="cb66-10"><a href="#cb66-10" aria-hidden="true" tabindex="-1"></a> <span class="op">|</span> <span class="op">^~</span></span>
|
||||
<span id="cb66-11"><a href="#cb66-11" aria-hidden="true" tabindex="-1"></a> jdalbec<span class="op">.</span>c<span class="op">:</span><span class="dv">65</span><span class="op">:</span><span class="dv">5</span><span class="op">:</span> error<span class="op">:</span> expected <span class="ch">';'</span> before <span class="ch">'B'</span></span>
|
||||
<span id="cb66-12"><a href="#cb66-12" aria-hidden="true" tabindex="-1"></a> <span class="dv">65</span> <span class="op">|</span> V F##B <span class="op">(</span>B<span class="op">)</span> <span class="op">;</span> \</span>
|
||||
<span id="cb66-13"><a href="#cb66-13" aria-hidden="true" tabindex="-1"></a> <span class="op">|</span> <span class="op">^</span> <span class="op">~</span></span>
|
||||
<span id="cb66-14"><a href="#cb66-14" aria-hidden="true" tabindex="-1"></a> <span class="op">|</span> <span class="op">;</span></span></code></pre></div>
|
||||
<p>and various other problems.</p>
|
||||
<p>Cody also added <a href="2004/jdalbec/index.html#alternate-code">alt code</a> which allows
|
||||
one to control how many numbers after the <code>:</code> to print before printing a
|
||||
@@ -2200,41 +2209,41 @@ to the repo for the script instead.</p>
|
||||
<h2 id="vik2-index.html"><a name="2004_vik2"></a><a href="2004/vik2/vik2.c">2004/vik2</a> (<a href="2004/vik2/index.html">index.html</a>)</h2>
|
||||
<p><a href="#cody">Cody</a> fixed this to compile in Linux. Although it compiled cleanly in macOS (and
|
||||
BSD?) the code failed to compile at all in Linux due to:</p>
|
||||
<div class="sourceCode" id="cb67"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb67-1"><a href="#cb67-1" aria-hidden="true" tabindex="-1"></a>cc <span class="op">-</span>E vik2_1<span class="op">.</span>c <span class="op">></span> vik2_2<span class="op">.</span>c</span>
|
||||
<span id="cb67-2"><a href="#cb67-2" aria-hidden="true" tabindex="-1"></a>In file included from vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">945</span><span class="op">,</span></span>
|
||||
<span id="cb67-3"><a href="#cb67-3" aria-hidden="true" tabindex="-1"></a> from vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">959</span><span class="op">,</span></span>
|
||||
<span id="cb67-4"><a href="#cb67-4" aria-hidden="true" tabindex="-1"></a> from vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">972</span><span class="op">,</span></span>
|
||||
<span id="cb67-5"><a href="#cb67-5" aria-hidden="true" tabindex="-1"></a> from vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">1025</span><span class="op">:</span></span>
|
||||
<span id="cb67-6"><a href="#cb67-6" aria-hidden="true" tabindex="-1"></a>vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">383</span><span class="op">:</span><span class="dv">8</span><span class="op">:</span> error<span class="op">:</span> no macro name given in #ifdef directive</span>
|
||||
<span id="cb67-7"><a href="#cb67-7" aria-hidden="true" tabindex="-1"></a> <span class="dv">383</span> <span class="op">|</span> O \</span>
|
||||
<span id="cb67-8"><a href="#cb67-8" aria-hidden="true" tabindex="-1"></a> <span class="op">|</span> <span class="op">^</span></span>
|
||||
<span id="cb67-9"><a href="#cb67-9" aria-hidden="true" tabindex="-1"></a>In file included from vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">946</span><span class="op">:</span></span>
|
||||
<span id="cb67-10"><a href="#cb67-10" aria-hidden="true" tabindex="-1"></a>vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">383</span><span class="op">:</span><span class="dv">8</span><span class="op">:</span> error<span class="op">:</span> no macro name given in #ifdef directive</span>
|
||||
<span id="cb67-11"><a href="#cb67-11" aria-hidden="true" tabindex="-1"></a> <span class="dv">383</span> <span class="op">|</span> O \</span>
|
||||
<span id="cb67-12"><a href="#cb67-12" aria-hidden="true" tabindex="-1"></a> <span class="op">|</span> <span class="op">^</span></span>
|
||||
<span id="cb67-13"><a href="#cb67-13" aria-hidden="true" tabindex="-1"></a>In file included from vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">947</span><span class="op">:</span></span>
|
||||
<span id="cb67-14"><a href="#cb67-14" aria-hidden="true" tabindex="-1"></a>vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">383</span><span class="op">:</span><span class="dv">8</span><span class="op">:</span> error<span class="op">:</span> no macro name given in #ifdef directive</span>
|
||||
<span id="cb67-15"><a href="#cb67-15" aria-hidden="true" tabindex="-1"></a> <span class="dv">383</span> <span class="op">|</span> O \</span>
|
||||
<span id="cb67-16"><a href="#cb67-16" aria-hidden="true" tabindex="-1"></a> <span class="op">|</span> <span class="op">^</span></span>
|
||||
<span id="cb67-17"><a href="#cb67-17" aria-hidden="true" tabindex="-1"></a>In file included from vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">948</span><span class="op">:</span></span>
|
||||
<span id="cb67-18"><a href="#cb67-18" aria-hidden="true" tabindex="-1"></a>vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">383</span><span class="op">:</span><span class="dv">8</span><span class="op">:</span> error<span class="op">:</span> no macro name given in #ifdef directive</span>
|
||||
<span id="cb67-19"><a href="#cb67-19" aria-hidden="true" tabindex="-1"></a> <span class="dv">383</span> <span class="op">|</span> O \</span>
|
||||
<span id="cb67-20"><a href="#cb67-20" aria-hidden="true" tabindex="-1"></a> <span class="op">|</span> <span class="op">^</span></span>
|
||||
<div class="sourceCode" id="cb67"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb67-1"><a href="#cb67-1" aria-hidden="true" tabindex="-1"></a> cc <span class="op">-</span>E vik2_1<span class="op">.</span>c <span class="op">></span> vik2_2<span class="op">.</span>c</span>
|
||||
<span id="cb67-2"><a href="#cb67-2" aria-hidden="true" tabindex="-1"></a> In file included from vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">945</span><span class="op">,</span></span>
|
||||
<span id="cb67-3"><a href="#cb67-3" aria-hidden="true" tabindex="-1"></a> from vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">959</span><span class="op">,</span></span>
|
||||
<span id="cb67-4"><a href="#cb67-4" aria-hidden="true" tabindex="-1"></a> from vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">972</span><span class="op">,</span></span>
|
||||
<span id="cb67-5"><a href="#cb67-5" aria-hidden="true" tabindex="-1"></a> from vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">1025</span><span class="op">:</span></span>
|
||||
<span id="cb67-6"><a href="#cb67-6" aria-hidden="true" tabindex="-1"></a> vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">383</span><span class="op">:</span><span class="dv">8</span><span class="op">:</span> error<span class="op">:</span> no macro name given in #ifdef directive</span>
|
||||
<span id="cb67-7"><a href="#cb67-7" aria-hidden="true" tabindex="-1"></a> <span class="dv">383</span> <span class="op">|</span> O \</span>
|
||||
<span id="cb67-8"><a href="#cb67-8" aria-hidden="true" tabindex="-1"></a> <span class="op">|</span> <span class="op">^</span></span>
|
||||
<span id="cb67-9"><a href="#cb67-9" aria-hidden="true" tabindex="-1"></a> In file included from vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">946</span><span class="op">:</span></span>
|
||||
<span id="cb67-10"><a href="#cb67-10" aria-hidden="true" tabindex="-1"></a> vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">383</span><span class="op">:</span><span class="dv">8</span><span class="op">:</span> error<span class="op">:</span> no macro name given in #ifdef directive</span>
|
||||
<span id="cb67-11"><a href="#cb67-11" aria-hidden="true" tabindex="-1"></a> <span class="dv">383</span> <span class="op">|</span> O \</span>
|
||||
<span id="cb67-12"><a href="#cb67-12" aria-hidden="true" tabindex="-1"></a> <span class="op">|</span> <span class="op">^</span></span>
|
||||
<span id="cb67-13"><a href="#cb67-13" aria-hidden="true" tabindex="-1"></a> In file included from vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">947</span><span class="op">:</span></span>
|
||||
<span id="cb67-14"><a href="#cb67-14" aria-hidden="true" tabindex="-1"></a> vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">383</span><span class="op">:</span><span class="dv">8</span><span class="op">:</span> error<span class="op">:</span> no macro name given in #ifdef directive</span>
|
||||
<span id="cb67-15"><a href="#cb67-15" aria-hidden="true" tabindex="-1"></a> <span class="dv">383</span> <span class="op">|</span> O \</span>
|
||||
<span id="cb67-16"><a href="#cb67-16" aria-hidden="true" tabindex="-1"></a> <span class="op">|</span> <span class="op">^</span></span>
|
||||
<span id="cb67-17"><a href="#cb67-17" aria-hidden="true" tabindex="-1"></a> In file included from vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">948</span><span class="op">:</span></span>
|
||||
<span id="cb67-18"><a href="#cb67-18" aria-hidden="true" tabindex="-1"></a> vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">383</span><span class="op">:</span><span class="dv">8</span><span class="op">:</span> error<span class="op">:</span> no macro name given in #ifdef directive</span>
|
||||
<span id="cb67-19"><a href="#cb67-19" aria-hidden="true" tabindex="-1"></a> <span class="dv">383</span> <span class="op">|</span> O \</span>
|
||||
<span id="cb67-20"><a href="#cb67-20" aria-hidden="true" tabindex="-1"></a> <span class="op">|</span> <span class="op">^</span></span>
|
||||
<span id="cb67-21"><a href="#cb67-21" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb67-22"><a href="#cb67-22" aria-hidden="true" tabindex="-1"></a><span class="op">...</span></span>
|
||||
<span id="cb67-22"><a href="#cb67-22" aria-hidden="true" tabindex="-1"></a> <span class="op">...</span></span>
|
||||
<span id="cb67-23"><a href="#cb67-23" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb67-24"><a href="#cb67-24" aria-hidden="true" tabindex="-1"></a>In file included from vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">182</span><span class="op">:</span></span>
|
||||
<span id="cb67-24"><a href="#cb67-24" aria-hidden="true" tabindex="-1"></a> In file included from vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">182</span><span class="op">:</span></span>
|
||||
<span id="cb67-25"><a href="#cb67-25" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb67-26"><a href="#cb67-26" aria-hidden="true" tabindex="-1"></a>vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">992</span><span class="op">:</span><span class="dv">85</span><span class="op">:</span> error<span class="op">:</span> #include nested depth <span class="dv">201</span> exceeds maximum of <span class="dv">200</span> <span class="op">(</span>use <span class="op">-</span>fmax<span class="op">-</span>include<span class="op">-</span>depth<span class="op">=</span>DEPTH to increase the maximum<span class="op">)</span></span>
|
||||
<span id="cb67-27"><a href="#cb67-27" aria-hidden="true" tabindex="-1"></a> <span class="dv">992</span> <span class="op">|</span> I</span>
|
||||
<span id="cb67-28"><a href="#cb67-28" aria-hidden="true" tabindex="-1"></a> <span class="op">|</span> <span class="op">^</span></span>
|
||||
<span id="cb67-29"><a href="#cb67-29" aria-hidden="true" tabindex="-1"></a>vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">1497</span><span class="op">:</span><span class="dv">21</span><span class="op">:</span> error<span class="op">:</span> #include nested depth <span class="dv">200</span> exceeds maximum of <span class="dv">200</span> <span class="op">(</span>use <span class="op">-</span>fmax<span class="op">-</span>include<span class="op">-</span>depth<span class="op">=</span>DEPTH to increase the maximum<span class="op">)</span></span>
|
||||
<span id="cb67-30"><a href="#cb67-30" aria-hidden="true" tabindex="-1"></a>vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">1498</span><span class="op">:</span><span class="dv">21</span><span class="op">:</span> error<span class="op">:</span> #include nested depth <span class="dv">200</span> exceeds maximum of <span class="dv">200</span> <span class="op">(</span>use <span class="op">-</span>fmax<span class="op">-</span>include<span class="op">-</span>depth<span class="op">=</span>DEPTH to increase the maximum<span class="op">)</span></span>
|
||||
<span id="cb67-31"><a href="#cb67-31" aria-hidden="true" tabindex="-1"></a>vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">1499</span><span class="op">:</span><span class="dv">21</span><span class="op">:</span> error<span class="op">:</span> #include nested depth <span class="dv">200</span> exceeds maximum of <span class="dv">200</span> <span class="op">(</span>use <span class="op">-</span>fmax<span class="op">-</span>include<span class="op">-</span>depth<span class="op">=</span>DEPTH to increase the maximum<span class="op">)</span></span>
|
||||
<span id="cb67-32"><a href="#cb67-32" aria-hidden="true" tabindex="-1"></a>vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">1500</span><span class="op">:</span><span class="dv">21</span><span class="op">:</span> error<span class="op">:</span> #include nested depth <span class="dv">200</span> exceeds maximum of <span class="dv">200</span> <span class="op">(</span>use <span class="op">-</span>fmax<span class="op">-</span>include<span class="op">-</span>depth<span class="op">=</span>DEPTH to increase the maximum<span class="op">)</span></span>
|
||||
<span id="cb67-33"><a href="#cb67-33" aria-hidden="true" tabindex="-1"></a>vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">1501</span><span class="op">:</span><span class="dv">21</span><span class="op">:</span> error<span class="op">:</span> #include nested depth <span class="dv">200</span> exceeds maximum of <span class="dv">200</span> <span class="op">(</span>use <span class="op">-</span>fmax<span class="op">-</span>include<span class="op">-</span>depth<span class="op">=</span>DEPTH to increase the maximum<span class="op">)</span></span>
|
||||
<span id="cb67-34"><a href="#cb67-34" aria-hidden="true" tabindex="-1"></a>vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">1504</span><span class="op">:</span><span class="dv">21</span><span class="op">:</span> error<span class="op">:</span> #include nested depth <span class="dv">200</span> exceeds maximum of <span class="dv">200</span> <span class="op">(</span>use <span class="op">-</span>fmax<span class="op">-</span>include<span class="op">-</span>depth<span class="op">=</span>DEPTH to increase the maximum<span class="op">)</span></span>
|
||||
<span id="cb67-35"><a href="#cb67-35" aria-hidden="true" tabindex="-1"></a>make<span class="op">:</span> <span class="op">***</span> <span class="op">[</span>Makefile<span class="op">:</span><span class="dv">133</span><span class="op">:</span> vik2<span class="op">]</span> Error <span class="dv">1</span></span></code></pre></div>
|
||||
<span id="cb67-26"><a href="#cb67-26" aria-hidden="true" tabindex="-1"></a> vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">992</span><span class="op">:</span><span class="dv">85</span><span class="op">:</span> error<span class="op">:</span> #include nested depth <span class="dv">201</span> exceeds maximum of <span class="dv">200</span> <span class="op">(</span>use <span class="op">-</span>fmax<span class="op">-</span>include<span class="op">-</span>depth<span class="op">=</span>DEPTH to increase the maximum<span class="op">)</span></span>
|
||||
<span id="cb67-27"><a href="#cb67-27" aria-hidden="true" tabindex="-1"></a> <span class="dv">992</span> <span class="op">|</span> I</span>
|
||||
<span id="cb67-28"><a href="#cb67-28" aria-hidden="true" tabindex="-1"></a> <span class="op">|</span> <span class="op">^</span></span>
|
||||
<span id="cb67-29"><a href="#cb67-29" aria-hidden="true" tabindex="-1"></a> vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">1497</span><span class="op">:</span><span class="dv">21</span><span class="op">:</span> error<span class="op">:</span> #include nested depth <span class="dv">200</span> exceeds maximum of <span class="dv">200</span> <span class="op">(</span>use <span class="op">-</span>fmax<span class="op">-</span>include<span class="op">-</span>depth<span class="op">=</span>DEPTH to increase the maximum<span class="op">)</span></span>
|
||||
<span id="cb67-30"><a href="#cb67-30" aria-hidden="true" tabindex="-1"></a> vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">1498</span><span class="op">:</span><span class="dv">21</span><span class="op">:</span> error<span class="op">:</span> #include nested depth <span class="dv">200</span> exceeds maximum of <span class="dv">200</span> <span class="op">(</span>use <span class="op">-</span>fmax<span class="op">-</span>include<span class="op">-</span>depth<span class="op">=</span>DEPTH to increase the maximum<span class="op">)</span></span>
|
||||
<span id="cb67-31"><a href="#cb67-31" aria-hidden="true" tabindex="-1"></a> vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">1499</span><span class="op">:</span><span class="dv">21</span><span class="op">:</span> error<span class="op">:</span> #include nested depth <span class="dv">200</span> exceeds maximum of <span class="dv">200</span> <span class="op">(</span>use <span class="op">-</span>fmax<span class="op">-</span>include<span class="op">-</span>depth<span class="op">=</span>DEPTH to increase the maximum<span class="op">)</span></span>
|
||||
<span id="cb67-32"><a href="#cb67-32" aria-hidden="true" tabindex="-1"></a> vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">1500</span><span class="op">:</span><span class="dv">21</span><span class="op">:</span> error<span class="op">:</span> #include nested depth <span class="dv">200</span> exceeds maximum of <span class="dv">200</span> <span class="op">(</span>use <span class="op">-</span>fmax<span class="op">-</span>include<span class="op">-</span>depth<span class="op">=</span>DEPTH to increase the maximum<span class="op">)</span></span>
|
||||
<span id="cb67-33"><a href="#cb67-33" aria-hidden="true" tabindex="-1"></a> vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">1501</span><span class="op">:</span><span class="dv">21</span><span class="op">:</span> error<span class="op">:</span> #include nested depth <span class="dv">200</span> exceeds maximum of <span class="dv">200</span> <span class="op">(</span>use <span class="op">-</span>fmax<span class="op">-</span>include<span class="op">-</span>depth<span class="op">=</span>DEPTH to increase the maximum<span class="op">)</span></span>
|
||||
<span id="cb67-34"><a href="#cb67-34" aria-hidden="true" tabindex="-1"></a> vik2<span class="op">.</span>c<span class="op">:</span><span class="dv">1504</span><span class="op">:</span><span class="dv">21</span><span class="op">:</span> error<span class="op">:</span> #include nested depth <span class="dv">200</span> exceeds maximum of <span class="dv">200</span> <span class="op">(</span>use <span class="op">-</span>fmax<span class="op">-</span>include<span class="op">-</span>depth<span class="op">=</span>DEPTH to increase the maximum<span class="op">)</span></span>
|
||||
<span id="cb67-35"><a href="#cb67-35" aria-hidden="true" tabindex="-1"></a> make<span class="op">:</span> <span class="op">***</span> <span class="op">[</span>Makefile<span class="op">:</span><span class="dv">133</span><span class="op">:</span> vik2<span class="op">]</span> Error <span class="dv">1</span></span></code></pre></div>
|
||||
<p>Unfortunately the fix required heavy modification to the original file (see
|
||||
below) and also inclusion of what used to be generated by the
|
||||
<a href="2004/vik2/Makefile">Makefile</a> but now it at least works for both Linux and
|
||||
@@ -2285,7 +2294,7 @@ and 64-bit. The solution has to do with the size difference between <code>int</c
|
||||
<code>long</code> so that the <code>long*E</code> is now <code>int*E</code>. This solves a specific problem for
|
||||
Linux (32-bit, 64-bit) and macOS (arm64).</p>
|
||||
<p>To get the self-test feature to work it was required to remove from the code:</p>
|
||||
<div class="sourceCode" id="cb68"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb68-1"><a href="#cb68-1" aria-hidden="true" tabindex="-1"></a>O<span class="op">-</span>b<span class="op">-</span>f<span class="op">-</span>u <span class="op">-</span>s<span class="op">-</span>c<span class="op">-</span>a<span class="op">-</span>t<span class="op">-</span>e<span class="op">;</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb68"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb68-1"><a href="#cb68-1" aria-hidden="true" tabindex="-1"></a> O<span class="op">-</span>b<span class="op">-</span>f<span class="op">-</span>u <span class="op">-</span>s<span class="op">-</span>c<span class="op">-</span>a<span class="op">-</span>t<span class="op">-</span>e<span class="op">;</span></span></code></pre></div>
|
||||
<p>as it caused a compilation error in some of the generated code but served no
|
||||
purpose, didn’t affect the output of the puzzle and since the ‘string’ is
|
||||
already in the code there is no problem omitting it.</p>
|
||||
@@ -2296,19 +2305,19 @@ also not have been necessary if using different flags to <code>cc</code> but thi
|
||||
portable and caused other problems. This was a complicated fix as it’s in the
|
||||
comments but in a funny way; the final result to get the test feature to work
|
||||
is:</p>
|
||||
<div class="sourceCode" id="cb69"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb69-1"><a href="#cb69-1" aria-hidden="true" tabindex="-1"></a><span class="op">;;</span> <span class="co">/*echo/Line/%d;sed/-n/-e/ %d,%dp/%s/|sed*/</span></span>
|
||||
<span id="cb69-2"><a href="#cb69-2" aria-hidden="true" tabindex="-1"></a><span class="co">/*-e/'s,intZ,int/ Z,g'>c.c;make/c;/ rm/-f/c*/</span></span>
|
||||
<span id="cb69-3"><a href="#cb69-3" aria-hidden="true" tabindex="-1"></a><span class="op">;;</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb69"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb69-1"><a href="#cb69-1" aria-hidden="true" tabindex="-1"></a> <span class="op">;;</span> <span class="co">/*echo/Line/%d;sed/-n/-e/ %d,%dp/%s/|sed*/</span></span>
|
||||
<span id="cb69-2"><a href="#cb69-2" aria-hidden="true" tabindex="-1"></a> <span class="co">/*-e/'s,intZ,int/ Z,g'>c.c;make/c;/ rm/-f/c*/</span></span>
|
||||
<span id="cb69-3"><a href="#cb69-3" aria-hidden="true" tabindex="-1"></a> <span class="op">;;</span></span></code></pre></div>
|
||||
<p>changed from:</p>
|
||||
<div class="sourceCode" id="cb70"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb70-1"><a href="#cb70-1" aria-hidden="true" tabindex="-1"></a><span class="op">;;</span> <span class="co">/*echo/Line/%d;sed/-n/-e/ %d,%dp/%s>*/</span></span>
|
||||
<span id="cb70-2"><a href="#cb70-2" aria-hidden="true" tabindex="-1"></a><span class="co">/*c.c;cc/c.c /-c*/</span><span class="op">;;</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb70"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb70-1"><a href="#cb70-1" aria-hidden="true" tabindex="-1"></a> <span class="op">;;</span> <span class="co">/*echo/Line/%d;sed/-n/-e/ %d,%dp/%s>*/</span></span>
|
||||
<span id="cb70-2"><a href="#cb70-2" aria-hidden="true" tabindex="-1"></a> <span class="co">/*c.c;cc/c.c /-c*/</span><span class="op">;;</span></span></code></pre></div>
|
||||
<p>or as a diff:</p>
|
||||
<div class="sourceCode" id="cb71"><pre class="sourceCode diff"><code class="sourceCode diff"><span id="cb71-1"><a href="#cb71-1" aria-hidden="true" tabindex="-1"></a><span class="st">-(t(m),(0));; /*echo/Line/%d;sed/-n/-e/ %d,%dp/%s>*/</span></span>
|
||||
<span id="cb71-2"><a href="#cb71-2" aria-hidden="true" tabindex="-1"></a><span class="st">-/*c.c;cc/c.c /-c*/;;char*A=0,*_,*R,*Q, D[9999],*r,l</span></span>
|
||||
<span id="cb71-3"><a href="#cb71-3" aria-hidden="true" tabindex="-1"></a><span class="st">-[9999],T=42, M,V=32;long*E,k[9999],B[1 <<+21],*N=B+</span></span>
|
||||
<span id="cb71-4"><a href="#cb71-4" aria-hidden="true" tabindex="-1"></a><span class="va">+(t(m),(0));; /*echo/Line/%d;sed/-n/-e/ %d,%dp/%s/|sed*/</span></span>
|
||||
<span id="cb71-5"><a href="#cb71-5" aria-hidden="true" tabindex="-1"></a><span class="va">+/*-e/'s,intZ,int/ Z,g'>c.c;make/c;/ rm/-f/c*/</span></span>
|
||||
<span id="cb71-6"><a href="#cb71-6" aria-hidden="true" tabindex="-1"></a><span class="va">+;;char*A=0,*_,*R,*Q, D[9999],*r,l[9999],T=42, M,V=32;int *E,k[9999],B[1 <<+21],*N=B+</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb71"><pre class="sourceCode diff"><code class="sourceCode diff"><span id="cb71-1"><a href="#cb71-1" aria-hidden="true" tabindex="-1"></a> -(t(m),(0));; /*echo/Line/%d;sed/-n/-e/ %d,%dp/%s>*/</span>
|
||||
<span id="cb71-2"><a href="#cb71-2" aria-hidden="true" tabindex="-1"></a> -/*c.c;cc/c.c /-c*/;;char*A=0,*_,*R,*Q, D[9999],*r,l</span>
|
||||
<span id="cb71-3"><a href="#cb71-3" aria-hidden="true" tabindex="-1"></a> -[9999],T=42, M,V=32;long*E,k[9999],B[1 <<+21],*N=B+</span>
|
||||
<span id="cb71-4"><a href="#cb71-4" aria-hidden="true" tabindex="-1"></a> +(t(m),(0));; /*echo/Line/%d;sed/-n/-e/ %d,%dp/%s/|sed*/</span>
|
||||
<span id="cb71-5"><a href="#cb71-5" aria-hidden="true" tabindex="-1"></a> +/*-e/'s,intZ,int/ Z,g'>c.c;make/c;/ rm/-f/c*/</span>
|
||||
<span id="cb71-6"><a href="#cb71-6" aria-hidden="true" tabindex="-1"></a> +;;char*A=0,*_,*R,*Q, D[9999],*r,l[9999],T=42, M,V=32;int *E,k[9999],B[1 <<+21],*N=B+</span></code></pre></div>
|
||||
<p>Cody also added the <a href="2005/giljade/try.sh">try.sh</a> script which also lets one see
|
||||
the beauty of the entry without having to use vi(m), should they be afraid of
|
||||
getting stuck in it (and for ease of use). :-)</p>
|
||||
@@ -2326,12 +2335,12 @@ not do it implicitly (like macOS does).</p>
|
||||
<h2 id="mikeash-index.html"><a name="2005_mikeash"></a><a href="2005/mikeash/mikeash.c">2005/mikeash</a> (<a href="2005/mikeash/index.html">index.html</a>)</h2>
|
||||
<p><a href="#cody">Cody</a> fixed this to work in Linux. The problem was an unknown escape sequence,
|
||||
<code>\N</code>, which caused a funny compiler error:</p>
|
||||
<div class="sourceCode" id="cb72"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb72-1"><a href="#cb72-1" aria-hidden="true" tabindex="-1"></a><span class="op">};</span>n b<span class="op">[</span><span class="dv">2048</span><span class="op">];</span><span class="dt">int</span> i</span>
|
||||
<span id="cb72-2"><a href="#cb72-2" aria-hidden="true" tabindex="-1"></a>mikeash<span class="op">.</span>c<span class="op">:</span> In function <span class="ch">'R'</span><span class="op">:</span></span>
|
||||
<span id="cb72-3"><a href="#cb72-3" aria-hidden="true" tabindex="-1"></a>mikeash<span class="op">.</span>c<span class="op">:</span><span class="dv">7</span><span class="op">:</span><span class="dv">1</span><span class="op">:</span> error<span class="op">:</span> <span class="ch">'\</span><span class="er">N</span><span class="ch">'</span> not followed by <span class="ch">'{'</span></span>
|
||||
<span id="cb72-4"><a href="#cb72-4" aria-hidden="true" tabindex="-1"></a> <span class="dv">7</span> <span class="op">|</span> <span class="op">;</span>C<span class="op">!=</span><span class="ch">'</span><span class="sc">\n</span><span class="ch">'</span><span class="op">;</span>A<span class="op">()</span></span>
|
||||
<span id="cb72-5"><a href="#cb72-5" aria-hidden="true" tabindex="-1"></a> <span class="op">|</span> <span class="op">^</span></span>
|
||||
<span id="cb72-6"><a href="#cb72-6" aria-hidden="true" tabindex="-1"></a>mikeash<span class="op">.</span>c<span class="op">:</span><span class="dv">7</span><span class="op">:</span><span class="dv">1</span><span class="op">:</span> error<span class="op">:</span> incomplete universal character name \Ne</span></code></pre></div>
|
||||
<div class="sourceCode" id="cb72"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb72-1"><a href="#cb72-1" aria-hidden="true" tabindex="-1"></a> <span class="op">};</span>n b<span class="op">[</span><span class="dv">2048</span><span class="op">];</span><span class="dt">int</span> i</span>
|
||||
<span id="cb72-2"><a href="#cb72-2" aria-hidden="true" tabindex="-1"></a> mikeash<span class="op">.</span>c<span class="op">:</span> In function <span class="ch">'R'</span><span class="op">:</span></span>
|
||||
<span id="cb72-3"><a href="#cb72-3" aria-hidden="true" tabindex="-1"></a> mikeash<span class="op">.</span>c<span class="op">:</span><span class="dv">7</span><span class="op">:</span><span class="dv">1</span><span class="op">:</span> error<span class="op">:</span> <span class="ch">'\</span><span class="er">N</span><span class="ch">'</span> not followed by <span class="ch">'{'</span></span>
|
||||
<span id="cb72-4"><a href="#cb72-4" aria-hidden="true" tabindex="-1"></a> <span class="dv">7</span> <span class="op">|</span> <span class="op">;</span>C<span class="op">!=</span><span class="ch">'</span><span class="sc">\n</span><span class="ch">'</span><span class="op">;</span>A<span class="op">()</span></span>
|
||||
<span id="cb72-5"><a href="#cb72-5" aria-hidden="true" tabindex="-1"></a> <span class="op">|</span> <span class="op">^</span></span>
|
||||
<span id="cb72-6"><a href="#cb72-6" aria-hidden="true" tabindex="-1"></a> mikeash<span class="op">.</span>c<span class="op">:</span><span class="dv">7</span><span class="op">:</span><span class="dv">1</span><span class="op">:</span> error<span class="op">:</span> incomplete universal character name \Ne</span></code></pre></div>
|
||||
<p>The problem was that in the string above there was a <code>\Newline</code> but this is
|
||||
invalid C. This was changed to be <code>\nNewline</code> and then, because the code is
|
||||
supposed to output itself when fed itself, the reference to <code>'N'</code> had to be
|
||||
@@ -2361,21 +2370,21 @@ test it on.</p>
|
||||
<p>Cody also added the <a href="2005/persano/try.sh">try.sh</a> script.</p>
|
||||
<h2 id="sykes-index.html"><a name="2005_sykes"></a><a href="2005/sykes/sykes.c">2005/sykes</a> (<a href="2005/sykes/index.html%5D">index.html</a>)</h2>
|
||||
<p><a href="#cody">Cody</a> added the saved (with the <code>SAVE</code> command) BASIC program <code>PET</code> which was:</p>
|
||||
<pre class="basic"><code>10 PRINT "2005'S IOCCC BEST EMULATOR"
|
||||
20 PRINT "BY STEPHEN SYKES!"</code></pre>
|
||||
<pre class="basic"><code> 10 PRINT "2005'S IOCCC BEST EMULATOR"
|
||||
20 PRINT "BY STEPHEN SYKES!"</code></pre>
|
||||
<p>followed by the commands:</p>
|
||||
<pre><code>SAVE "PET"
|
||||
<pre><code> SAVE "PET"
|
||||
|
||||
READY.
|
||||
NEW
|
||||
READY.
|
||||
NEW
|
||||
|
||||
READY.
|
||||
LOAD "PET"
|
||||
READY.
|
||||
LOAD "PET"
|
||||
|
||||
READY.
|
||||
RUN
|
||||
2005'S IOCCC BEST EMULATOR
|
||||
BY STEPHEN SYKES!</code></pre>
|
||||
READY.
|
||||
RUN
|
||||
2005'S IOCCC BEST EMULATOR
|
||||
BY STEPHEN SYKES!</code></pre>
|
||||
<p>to both save and test run it.</p>
|
||||
<p>Cody added the <a href="2005/sykes/try.sh">try.sh</a> script which runs in a loop with a
|
||||
menu of things one might wish to try, asking if they wish to continue when done.</p>
|
||||
@@ -2790,12 +2799,12 @@ might violate rule 2: the program is really just a decompressor to generate the
|
||||
real source of the program. So the source of the entry has to be compiled and
|
||||
then run, and the output has to be compiled to be <code>hou</code>. This allows the real
|
||||
program to be used. Thus the Makefile rule looks like:</p>
|
||||
<div class="sourceCode" id="cb75"><pre class="sourceCode makefile"><code class="sourceCode makefile"><span id="cb75-1"><a href="#cb75-1" aria-hidden="true" tabindex="-1"></a><span class="dv">${PROG}:</span><span class="dt"> </span><span class="ch">${</span><span class="dt">PROG</span><span class="ch">}</span><span class="dt">.c</span></span>
|
||||
<span id="cb75-2"><a href="#cb75-2" aria-hidden="true" tabindex="-1"></a><span class="er"> </span><span class="ch">${</span><span class="dt">CC</span><span class="ch">}</span> <span class="ch">${</span><span class="dt">CFLAGS</span><span class="ch">}</span> <span class="ch">$<</span> -o <span class="ch">$@</span> <span class="ch">${</span><span class="dt">LDFLAGS</span><span class="ch">}</span></span>
|
||||
<div class="sourceCode" id="cb75"><pre class="sourceCode makefile"><code class="sourceCode makefile"><span id="cb75-1"><a href="#cb75-1" aria-hidden="true" tabindex="-1"></a> <span class="ch">${</span><span class="dt">PROG</span><span class="ch">}</span>: <span class="ch">${</span><span class="dt">PROG</span><span class="ch">}</span>.c</span>
|
||||
<span id="cb75-2"><a href="#cb75-2" aria-hidden="true" tabindex="-1"></a> <span class="ch">${</span><span class="dt">CC</span><span class="ch">}</span> <span class="ch">${</span><span class="dt">CFLAGS</span><span class="ch">}</span> <span class="ch">$<</span> -o <span class="ch">$@</span> <span class="ch">${</span><span class="dt">LDFLAGS</span><span class="ch">}</span></span>
|
||||
<span id="cb75-3"><a href="#cb75-3" aria-hidden="true" tabindex="-1"></a> ./<span class="ch">${</span><span class="dt">PROG</span><span class="ch">}</span> | <span class="ch">${</span><span class="dt">CC</span><span class="ch">}</span> <span class="ch">${</span><span class="dt">CFLAGS</span><span class="ch">}</span> -xc - -o <span class="ch">$@</span> <span class="ch">${</span><span class="dt">LDFLAGS</span><span class="ch">}</span></span></code></pre></div>
|
||||
<p>which then compiles like:</p>
|
||||
<div class="sourceCode" id="cb76"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb76-1"><a href="#cb76-1" aria-hidden="true" tabindex="-1"></a><span class="fu">cc</span> <span class="at">-std</span><span class="op">=</span>gnu11 <span class="at">-Wall</span> <span class="at">-Wextra</span> <span class="at">-pedantic</span> <span class="at">-Wno-sign-compare</span> <span class="at">-Wno-strict-prototypes</span> <span class="at">-O3</span> hou.c <span class="at">-o</span> hou <span class="at">-lm</span></span>
|
||||
<span id="cb76-2"><a href="#cb76-2" aria-hidden="true" tabindex="-1"></a><span class="ex">./hou</span> <span class="kw">|</span> <span class="fu">cc</span> <span class="at">-std</span><span class="op">=</span>gnu11 <span class="at">-Wall</span> <span class="at">-Wextra</span> <span class="at">-pedantic</span> <span class="at">-Wno-sign-compare</span> <span class="at">-Wno-strict-prototypes</span> <span class="at">-O3</span> <span class="at">-xc</span> <span class="at">-</span> <span class="at">-o</span> hou <span class="at">-lm</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb76"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb76-1"><a href="#cb76-1" aria-hidden="true" tabindex="-1"></a> <span class="fu">cc</span> <span class="at">-std</span><span class="op">=</span>gnu11 <span class="at">-Wall</span> <span class="at">-Wextra</span> <span class="at">-pedantic</span> <span class="at">-Wno-sign-compare</span> <span class="at">-Wno-strict-prototypes</span> <span class="at">-O3</span> hou.c <span class="at">-o</span> hou <span class="at">-lm</span></span>
|
||||
<span id="cb76-2"><a href="#cb76-2" aria-hidden="true" tabindex="-1"></a> <span class="ex">./hou</span> <span class="kw">|</span> <span class="fu">cc</span> <span class="at">-std</span><span class="op">=</span>gnu11 <span class="at">-Wall</span> <span class="at">-Wextra</span> <span class="at">-pedantic</span> <span class="at">-Wno-sign-compare</span> <span class="at">-Wno-strict-prototypes</span> <span class="at">-O3</span> <span class="at">-xc</span> <span class="at">-</span> <span class="at">-o</span> hou <span class="at">-lm</span></span></code></pre></div>
|
||||
<p>The <code>LDFLAGS</code> were updated to have <code>-lm</code> as the author suggested it uses the
|
||||
<code>math.h</code> library which not all systems link in by default (Linux for instance
|
||||
does not).</p>
|
||||
@@ -2916,12 +2925,12 @@ output.</p>
|
||||
<p><a href="#cody">Cody</a> fixed the code so one can make use of the echo feature, where the
|
||||
first character of the filename starts with <code>e</code>. The only way it would work
|
||||
before that is if one did something like:</p>
|
||||
<div class="sourceCode" id="cb77"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb77-1"><a href="#cb77-1" aria-hidden="true" tabindex="-1"></a><span class="fu">ln</span> <span class="at">-sf</span> prog eprog</span>
|
||||
<span id="cb77-2"><a href="#cb77-2" aria-hidden="true" tabindex="-1"></a><span class="va">PATH</span><span class="op">=</span><span class="va">$PATH</span>:. <span class="kw">;</span> <span class="ex">eprog</span> <span class="st">'...'</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb77"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb77-1"><a href="#cb77-1" aria-hidden="true" tabindex="-1"></a> <span class="fu">ln</span> <span class="at">-sf</span> prog eprog</span>
|
||||
<span id="cb77-2"><a href="#cb77-2" aria-hidden="true" tabindex="-1"></a> <span class="va">PATH</span><span class="op">=</span><span class="va">$PATH</span>:. <span class="kw">;</span> <span class="ex">eprog</span> <span class="st">'...'</span></span></code></pre></div>
|
||||
<p>since otherwise the first character would not be <code>e</code> but rather a dot
|
||||
(<code>./eprog</code>). This was done by adding to the Makefile <code>-include libgen.h</code> and
|
||||
adding to <code>main()</code> after the variable declaration (<code>V*A;</code>) the code:</p>
|
||||
<div class="sourceCode" id="cb78"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb78-1"><a href="#cb78-1" aria-hidden="true" tabindex="-1"></a><span class="op">*</span>K<span class="op">=</span>basename<span class="op">(*</span>K<span class="op">);</span></span></code></pre></div>
|
||||
<div class="sourceCode" id="cb78"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb78-1"><a href="#cb78-1" aria-hidden="true" tabindex="-1"></a> <span class="op">*</span>K<span class="op">=</span>basename<span class="op">(*</span>K<span class="op">);</span></span></code></pre></div>
|
||||
<p>This was done for both the <a href="2015/burton/prog.c">prog.c</a> and
|
||||
<a href="2015/burton/prog.alt.c">prog.alt.c</a>. The Makefile was also updated to build
|
||||
<code>eprog</code> and <code>eprog.alt</code> to make use of the feature more easily. Each is a new
|
||||
@@ -3232,10 +3241,10 @@ longer known.</p>
|
||||
<h2 id="endoh3-index.html-6"><a name="2020_endoh3"></a><a href="2020/endoh3/prog.c">2020/endoh3</a> (<a href="2020/endoh3/index.html">index.html</a>)</h2>
|
||||
<p><a href="#cody">Cody</a> fixed the script <a href="2020/endoh3/run_clock.sh">run_clock.sh</a> which gave a
|
||||
funny error when running it:</p>
|
||||
<div class="sourceCode" id="cb79"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb79-1"><a href="#cb79-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> ./run_clock.sh</span>
|
||||
<span id="cb79-2"><a href="#cb79-2" aria-hidden="true" tabindex="-1"></a><span class="ex">-bash:</span> ./run_clock.sh: cannot execute: required file not found</span></code></pre></div>
|
||||
<div class="sourceCode" id="cb79"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb79-1"><a href="#cb79-1" aria-hidden="true" tabindex="-1"></a> <span class="ex">$</span> ./run_clock.sh</span>
|
||||
<span id="cb79-2"><a href="#cb79-2" aria-hidden="true" tabindex="-1"></a> <span class="ex">-bash:</span> ./run_clock.sh: cannot execute: required file not found</span></code></pre></div>
|
||||
<p>If run from within vim a different error message occurred:</p>
|
||||
<pre><code>/bin/bash: ./run_clock.sh: /usr/bin/end: bad interpreter: No such file or directory</code></pre>
|
||||
<pre><code> /bin/bash: ./run_clock.sh: /usr/bin/end: bad interpreter: No such file or directory</code></pre>
|
||||
<p>though this was only noticed later on after it was fixed.</p>
|
||||
<p>What was wrong? A typo in the shebang which had <code>/usr/bin/end</code> instead of
|
||||
<code>/usr/bin/env</code>. Anyone who knows Cody would know that he’d zoom in on that quite
|
||||
|
||||
Reference in new issue
Block a user