build index.html for all winners

Updated manifest as per recent file changes.

Updated winner `.winner.json` to reflect the manifest changes.

Added [bin/all_run.sh](bin/all_run.sh) tool to run a command over
all winning entries.

These tools had slight improvements in the help usage message:

* bin/gen-author.sh VERSION="1.3.1 2024-01-16"
* bin/gen-inventory.sh VERSION="1.0.1 2024-01-16"
* bin/pandoc_wrapper.sh VERSION="1.3.1 2024-01-16"
* bin/subst.default.sh VERSION="1.1.1 2024-01-16"
* bin/subst.winner-index.sh VERSION="1.1.1 2024-01-16"

The `bin/readme2index.sh` tool was improved so that
if the `index.html` file exists and the tool forms
the exact same content, then the file `index.html`
file is NOT touched.

* bin/readme2index.sh VERSION="1.1 2024-01-16"

We used the following command to generate `index.html` files
for all winning entries:

```sh
bin/all_run.sh -v 3 bin/readme2index.sh
```

NOTE: We have not (yet) built HTML files above the winner directory
level (e.g., no year level nor top level HTML), nor have be built
non-index HTML files for winners.

NOTE: By default we are running `pandoc(1)` with:

```
--fail-if-warnings=true
```

This means that any problems with markdown to HTML
generates an error.  This is done to be sure that
the HTML conversion is clean.

We had to fix the following `README.md` files:

* `2000/rince/README.md`

The reference [^2] was never used.  We made a guess that [^2] applies
to the same spot as [^1].  Perhaps there is a better spot where
[^2] applies?

NOTE: For every reference, there MUST be some place where that
reference is used.

* 2012/vik/README.md

The string "$...$" is assumed to be a TeX encoded string.

NOTE: Every "$..$" needs to be backslashed as in "\$..\$".

* 2018/burton1/README.md

The reference [2] was duplicated.  We changed the
second [2] to [3].

NOTE: Every reference needs to have a unique number.

* 2020/carlini/README.md

The string "$...$" is assumed to be a TeX encoded string.

NOTE: Every "$..$" needs to be backslashed as in "\$..\$".

We also found 2 errors in the `author/author_handle.json` file set:

* author/Anonymous_2001.json

The `author/Anonymous_2001.json` file was missing.

* author/Jari_Arkko.json

The winner ID for `1989_jar.1` had a typo.
This commit is contained in:
Landon Curt Noll committed 2024-01-17 00:32:39 -08:00
1 parent 893cd915b6
commit c1466f5165
350 files changed
+95242 -4217

No files matched your search

+398 -13
View File
@@ -1,4 +1,6 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<!-- START: two lines up starts content from: inc/top.default.html -->
<!-- -->
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
@@ -6,27 +8,410 @@
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<!-- -->
<!-- file: 1998/schweikh1/index.html created by: fake.gen_index.sh version: 1.0.5 2023-10-31 -->
<html lang="en">
<!-- END: this line ends content from: inc/top.default.html -->
<!-- -->
<!-- This file was formed by the tool: bin/readme2index.sh version: 1.1 2024-01-16 -->
<!-- -->
<!-- START: this line starts content from: inc/head.default.html -->
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>1998 schweikh1</title>
<meta name="description" content="IOCCC year: 1998 IOCCC winner: schweikh1 winner index page">
<meta name="keywords" content="IOCCC,1998,schweikh1,winner index page">
<link rel="stylesheet" href="/temp-test-ioccc/ioccc.css">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<title>1998/schweikh1</title>
<meta name="description" content="1998 IOCCC winner schweikh1">
<meta name="keywords" content="IOCCC, 1998, IOCCC 1998, IOCCC winner, schweikh1">
</head>
<!-- END: this line ends content from: inc/head.default.html -->
<!-- START: this line starts content from: inc/body.default.html -->
<body>
<h1>1998 schweikh1</h1>
<!-- END: this line ends content from: inc/body.default.html -->
<!-- START: this line starts content from: inc/header.default.html -->
<p>XXX - fake content until readme2index is working - XXX</p>
<div class="header">
<img src="/temp-test-ioccc/png/ioccc.png" alt="IOCCC image by Matt Zucker" width=300 height=110>
<h1>The International Obfuscated C Code Contest</h1>
<h2>1998/schweikh1</h2>
</div>
<hr style="width:50%;text-align:left;margin-left:0">
<!-- END: this line ends content from: inc/header.default.html -->
<!-- START: this line starts content from: inc/topnav.mid.html -->
<!-- Start Nu Html Checker -->
<p><a href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fioccc-src.github.io%2Ftemp-test-ioccc%2F1998%2Fschweikh1%2Findex.html">Nu Html check https://ioccc-src.github.io/temp-test-ioccc/1998/schweikh1/index.html</a></p>
<!-- End Nu Html Checker -->
<div class="topnav">
<a class="Left" href="../schnitzi/index.html">&larr; schnitzi</a>
<a class="Left" href="../index.html">&uarr; 1998 &uarr;</a>
<a class="Left" href="../schweikh2/index.html">schweikh2 &rarr;</a>
<a class="Right" href="#inventory">Inventory</a>
</div>
<!-- END: this line ends content from: inc/topnav.mid.html -->
<!-- START: this line starts content from: inc/begin-row.default.html -->
<div class="row">
<!-- END: this line ends content from: inc/begin-row.default.html -->
<!-- START: this line starts content from: inc/begin-leftcolumn.default.html -->
<div class="leftcolumn">
<!-- END: this line ends content from: inc/begin-leftcolumn.default.html -->
<!-- START: this line starts content from: inc/sidenav.default.html -->
<div class="sidenav">
<a href="#content">Jump to contents</a>
</div>
<hr>
<div class="sidenav">
<a href="/temp-test-ioccc/index.html">IOCCC Home</a>
<a href="/temp-test-ioccc/years.html">Winning Entries</a>
<a href="/temp-test-ioccc/winners.html">People who have won</a>
</div>
<hr>
<div class="sidenav">
<a href="/temp-test-ioccc/news.html">IOCCC News</a>
<a href="/temp-test-ioccc/faq.html#submit">How to enter the IOCCC</a>
<a href="/temp-test-ioccc/faq.html">FAQ</a>
</div>
<hr>
<div class="sidenav">
<a href="/temp-test-ioccc/bugs.html">Bugs &amp; (mis)features</a>
<a href="/temp-test-ioccc/faq.html#fix_a_winner">Fixing IOCCC winners</a>
<a href="/temp-test-ioccc/faq.html#fix_web_site">Fixing the web site</a>
<a href="/temp-test-ioccc/faq.html#fix_author">Fixing winner info</a>
<a href="/temp-test-ioccc/thanks-for-help.html">Thanks for the help</a>
</div>
<hr>
<div class="sidenav">
<a href="/temp-test-ioccc/judges.html">The IOCCC Judges</a>
<a href="/temp-test-ioccc/contact.html">Contacting the IOCCC</a>
</div>
<hr>
<div class="sidenav">
<a href="#top">Jump to top</a>
</div>
<!-- END: this line ends content from: inc/sidenav.default.html -->
<!-- START: this line starts content from: inc/end-leftcolumn.default.html -->
</div>
<!-- END: this line ends content from: inc/end-leftcolumn.default.html -->
<!-- START: this line starts content from: inc/begin-rightcolumn.default.html -->
<div class="rightcolumn">
<!-- END: this line ends content from: inc/begin-rightcolumn.default.html -->
<!-- START: this line starts content from: inc/before-content.default.html -->
<a name="content"></a>
<!-- END: this line ends content from: inc/before-content.default.html -->
<!-- START: this line starts content generated by: bin/gen-author.sh -->
<p><a name="author"><strong>Author:</strong></a> <br><br>Name: <a
href="/temp-test-ioccc/winners.html#Jens_Schweikhardt">Jens
Schweikhardt</a><br> Location: <a
href="/temp-test-ioccc/location.html#DE">DE</a></p>
<!-- END: next line ends content generated by: bin/gen-author.sh -->
<h2 id="to-build">To build:</h2>
<div class="sourceCode" id="cb1"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="fu">make</span> all</span></code></pre></div>
<p>There is an alternate version of this entry that will work with
macOS. See the <a href="#alternate-code">Alternate code</a> section
below. We recommend you look at it even if you don’t have a Mac, unless
you want to figure it out yourself, as it includes some interesting
details about the entry.</p>
<h2 id="to-use">To use:</h2>
<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="ex">./schweikh1</span></span></code></pre></div>
<h2 id="alternate-code">Alternate code:</h2>
<p>As noted above this entry will not work as it stands for macOS and
there are some important notes as well as a description of how the fixed
version works (the details of which are relevant to the original entry
that no longer works as well as the fixed version but are described in
the context of the macOS adjustments). For details of what had to
change, see <a href="macos.md">macos.md</a>. Unless you wish to figure
it out yourself, we recommend that you read this even if you don’t have
a Mac as it has some interesting details about the entry.</p>
<h3 id="alternate-build">Alternate build:</h3>
<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> alt</span></code></pre></div>
<h3 id="alternate-build-1">Alternate build:</h3>
<p>Use <code>schweikh1.alt</code> as you would <code>schweikh1</code>
above.</p>
<h3 id="alternate-try">Alternate try:</h3>
<p>Bonus exercise: modify the code to provide a different compiler.</p>
<h2 id="judges-remarks">Judges’ remarks:</h2>
<p>What does it do? It seems to print a list of system headers, perhaps
with words after them. Curiously, if you look at the list of words
defined in a given standard header, they are never printed directly
after that header’s name. Aha! It’s a conformance test for the standard
headers.</p>
<p>This code is a wonder; it’s a wonder that it compiles. I wonder
whether or not it should. The innovative realization that you can use
special characters, such as <code>'\n'</code>, in <code>#file</code>
directives alone merits some recognition.</p>
<p>I’ve included most of the author’s remarks; they’re fairly thorough.
Do not read them if you want to figure this out yourself. “Amendment
One” refers to “NA1”, the add-on to C89 which added some fairly crufty
internationalization support.</p>
<h4 id="historical-note">Historical note:</h4>
<p>Some non-gcc compilers that were not fully ANSI standard did not
compile this entry correctly. Using cc by default was not helpful most
of the time on this entry, because the program had a hardcoded gcc
invocation anyway. Anyone who uses egcs and has no plain gcc will need
to frob the source anyway and can be expected to do the right thing with
<code>${CC}</code>. This limitation was removed in 2023 but in the past
one should have used gcc.</p>
<h2 id="authors-remarks">Author’s remarks:</h2>
<p>Important! This program, if it compiles at all, is mis-compiled by
many compilers due to compiler bugs. It could be the “least likely to
compile and execute” in conjunction with preprocessor abuse. When run,
it is likely to uncover bugs in your system headers.</p>
<p>The program is run without arguments. If your compiler is buggy, the
most likely result is no output and/or an exit status of 1.</p>
<p>If Amendment One headers are missing you will see something like:</p>
<pre><code>&lt;iso646.h&gt;:
gcc: /usr/include/iso646.h: No such file or directory
gcc: No input files specified
&lt;wctype.h&gt;:
gcc: /usr/include/wctype.h: No such file or directory
gcc: No input files specified
&lt;wchar.h&gt;:
gcc: /usr/include/wchar.h: No such file or directory
gcc: No input files specified</code></pre>
<p>Bug your vendor for an upgrade.</p>
<p>The format of the info file is straightforward and described in the
file itself. Just load it in your favorite editor.</p>
<h3 id="requirements">Requirements</h3>
<p><code>gcc</code> (the GNU C compiler) must be available at runtime.
It is assumed that your C implementation keeps headers as files in the
<code>/usr/include</code> directory. The <a href="info">info</a> file
must be readable and reside in the current working directory. The
current working directory must be writable in order to create a
temporary file (which is removed upon program termination). In case you
don’t have gcc at runtime, not all is lost if your compiler or
preprocessor can produce a list of defined macros in the format output
by <code>gcc -dM</code>, i.e. lines of the form
<code>#define MACRO value</code>.</p>
<p>Edit the source at line 55 in this case.</p>
<h3 id="background">Background</h3>
<p>ISO C has a very strict idea of visibility of identifiers. All
possible macros are explicitly enumerated. In a compliant implementation
no other macros can be defined, because you could write strictly
conforming programs that may fail to compile due to syntax errors:
supposing that <code>&lt;stdio.h&gt;</code> defines
<code>PIPE_BUF</code>, then the conforming</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><span class="pp">#include </span><span class="im">&lt;assert.h&gt;</span></span>
<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im">&lt;stdio.h&gt;</span><span class="pp"> </span><span class="co">/* &lt;- or where the bogus macro is defined */</span></span>
<span id="cb5-3"><a href="#cb5-3" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im">&lt;string.h&gt;</span></span>
<span id="cb5-4"><a href="#cb5-4" aria-hidden="true" tabindex="-1"></a><span class="pp">#define STR</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">x</span></span>
<span id="cb5-5"><a href="#cb5-5" aria-hidden="true" tabindex="-1"></a><span class="pp">#define XSTR</span><span class="op">(</span><span class="pp">x</span><span class="op">)</span><span class="pp"> STR</span><span class="op">(</span><span class="pp">x</span><span class="op">)</span></span>
<span id="cb5-6"><a href="#cb5-6" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main <span class="op">(</span><span class="dt">void</span><span class="op">)</span></span>
<span id="cb5-7"><a href="#cb5-7" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span>
<span id="cb5-8"><a href="#cb5-8" aria-hidden="true" tabindex="-1"></a> <span class="dt">int</span> PIPE_BUF <span class="op">=</span> <span class="dv">0</span><span class="op">;</span></span>
<span id="cb5-9"><a href="#cb5-9" aria-hidden="true" tabindex="-1"></a> assert <span class="op">(</span>strcmp <span class="op">(</span><span class="st">&quot;PIPE_BUF&quot;</span><span class="op">,</span> XSTR <span class="op">(</span>PIPE_BUF<span class="op">))</span> <span class="op">==</span> <span class="dv">0</span><span class="op">);</span></span>
<span id="cb5-10"><a href="#cb5-10" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span>
<span id="cb5-11"><a href="#cb5-11" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
<p>is expected to compile and meet the assertion. If it does not, your
compiler compiles some other language than ISO C.</p>
<h3 id="why-i-think-my-program-is-obfuscated">Why I think my program is
obfuscated</h3>
<p>Not only is the program’s purpose a thorough standard conformance
test, the source itself is a beast and has uncovered bugs in many C
compilers.</p>
<ol type="1">
<li>The token sequence after <code>#include</code> can consist of
pp-tokens and “are processed just as in normal text.” [ISO 6.8.2] The
result must resemble one of the canonical forms, <code>"foo.h"</code> or
<code>&lt;bar.h&gt;</code>. This lets us write things like</li>
</ol>
<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><span class="pp">#define HEADER </span><span class="st">&quot;foo.h&quot;</span></span>
<span id="cb6-2"><a href="#cb6-2" aria-hidden="true" tabindex="-1"></a><span class="pp">#include HEADER</span></span></code></pre></div>
<p>I could not find a compiler rejecting this. However, if we’re
torturing the preprocessor a little more, by using token pasting, at
least one compiler falls over.</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="pp">#define H</span><span class="op">(</span><span class="pp">x</span><span class="op">)</span><span class="pp"> </span><span class="op">&lt;</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">&gt;</span></span>
<span id="cb7-2"><a href="#cb7-2" aria-hidden="true" tabindex="-1"></a><span class="pp">#include H(dio) </span><span class="co">/* expands to &lt;stdio.h&gt; */</span></span></code></pre></div>
<p>is rejected by tcc version 4.1.2, the TenDRA compiler:
<code>"t.c", line 3: Error:\ [ISO 6.8.3.3]: Invalid result for '##' operator in macro 'H'.</code></p>
<p>To be honest, I don’t know if the rules for pp-tokens and token
pasting don’t forbid what I do (and thus tcc is correct in rejecting
it). In this case, all other compilers I tried are buggy, or the
Standard itself :-)</p>
<ol start="2" type="1">
<li>The <code>#line</code> directive allows to set a line number, and
optionally a file name, i.e. modify <code>__LINE__</code> and
<code>__FILE__</code>. Strange things happen if the file name contains a
NUL byte – which the Standard allows: in <code>#line num "file"</code>
the <code>"file"</code> is an s-char-sequence per ISO 6.8.4. ISO 6.1.4
defines string literals as s-char-sequences, which may include octal
escape sequences. Let’s look at</li>
</ol>
<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="pp">#include </span><span class="im">&lt;stdio.h&gt;</span></span>
<span id="cb8-2"><a href="#cb8-2" aria-hidden="true" tabindex="-1"></a><span class="pp">#line 42 &quot;foo\0bar&quot;</span></span>
<span id="cb8-3"><a href="#cb8-3" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main <span class="op">(</span><span class="dt">void</span><span class="op">)</span> <span class="op">{</span></span>
<span id="cb8-4"><a href="#cb8-4" aria-hidden="true" tabindex="-1"></a> printf <span class="op">(</span><span class="st">&quot;</span><span class="sc">%s</span><span class="st"> </span><span class="sc">%d\n</span><span class="st">&quot;</span><span class="op">,</span> __FILE__<span class="op">,</span> <span class="op">(</span><span class="dt">int</span><span class="op">)</span><span class="kw">sizeof</span> __FILE__<span class="op">);</span></span>
<span id="cb8-5"><a href="#cb8-5" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span>
<span id="cb8-6"><a href="#cb8-6" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
<p>This is supposed to output <code>'foo 8'</code>. Here’s what happens
in RL:</p>
<pre><code>foo 4 gcc 2.7.2.1, lcc
foo\0bar 9 tcc 4.1.2, Sunsoft cc turn &quot;\0&quot; into &quot;\\0&quot;, ugh!</code></pre>
<p>(I have written a bug report for gcc. Newer versions and egcs are
ok.)</p>
<ol start="3" type="1">
<li><p>The <code>%:</code> and <code>%:%:</code> digraphs test for
conformance to Amendment One.</p>
<p>Ask your local guru if C allows the same case label in the same
switch statement to appear more than once. Ask him/her to think real
hard. The answer will be “no”. The true guru will cite a constraint in
ISO 6.6.4.2. Then make fun of the guru’s answer by waving
<code>case __LINE__:</code> under his/her nose. Easy money from a bet!
Make sure your guru has no chance to use Standardese weasel words as an
escape: can I have</p></li>
</ol>
<div class="sourceCode" id="cb10"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true" tabindex="-1"></a> <span class="cf">case</span> <span class="op">&lt;</span>some_token<span class="op">&gt;:</span></span>
<span id="cb10-2"><a href="#cb10-2" aria-hidden="true" tabindex="-1"></a> <span class="cf">case</span> <span class="op">&lt;</span>some_token<span class="op">&gt;:</span></span></code></pre></div>
<pre><code>in the same switch? (Note that you need the [invisible] newline. You
can generously allow the additional constraint that no `#undef`s or
`#define`s are allowed between the two cases.)</code></pre>
<p>Lots of integer constants and string literals come into the source
via <code>__LINE__</code> and <code>__FILE__</code> which are redefined
at various places. Sometimes the <code>__FILE__</code> contains
<code>\0</code> bytes; different strings or characters are then accessed
with offsets, say <code>10+__FILE__</code> or
<code>__LINE__+__FILE__</code> or <code>2[__FILE__]</code>. One integral
constant in octal. This makes the source and header input depend on
ASCII.</p>
<p>A few old obfuscations, like one character identifiers, not too many
macros, a <code>goto O</code>, “needless” assignments to satisfy lint
with its “function value ignored” warnings. My lint has nothing to
complain about.</p>
<p>There’s more whitespace in the Standard than just space, tab and
newline. In particular, there are vertical tab and form-feed that can be
used in certain places (outside of preprocessing directives, i.e. they
are not allowed from just after the <code>#</code> up to the final
newline. See 6.8 for details.) On many implementations these appear as
<code>^L</code> and <code>^K</code>. My source starts with an extremely
uncommon 32bit word consisting of <code>^L</code>, <code>^K</code>,
<code>%</code> and <code>:</code>. I have grepped old winning entries
for ^K, none of them contains one, so this is something new – after 14
years of IOCCC. Be sure to have enough paper in your printer when you
make a hard copy of the source…</p>
<p>While I’m at it, the rules state that only space, tab and newline are
ignored for the count (plus ‘<code>{</code>’, ‘<code>}</code>’,
‘<code>;</code>’ followed by whitespace). The <a
href="../mkentry.c">mkentry.c</a> program, however, uses
<code>isspace(3)</code> which returns nonzero for <code>\v</code> and
<code>\f</code> and other characters as well. I could have used a lot
more <code>^K</code> and <code>^L</code> probably undetected by your
counter but decided to err on the side of safety. I use a perl script to
compute the character count according to the rules. The advantages of an
independent clean room approach…</p>
<div class="sourceCode" id="cb12"><pre
class="sourceCode perl"><code class="sourceCode perl"><span id="cb12-1"><a href="#cb12-1" aria-hidden="true" tabindex="-1"></a><span class="kw">#!/usr/bin/perl -w</span></span>
<span id="cb12-2"><a href="#cb12-2" aria-hidden="true" tabindex="-1"></a><span class="wa">$/</span> = <span class="ot">&quot;</span><span class="st">\0</span><span class="ot">&quot;</span>;</span>
<span id="cb12-3"><a href="#cb12-3" aria-hidden="true" tabindex="-1"></a><span class="wa">$_</span> = &lt;&gt;;</span>
<span id="cb12-4"><a href="#cb12-4" aria-hidden="true" tabindex="-1"></a><span class="ot">s/</span><span class="ch">[</span><span class="bn">;{}</span><span class="ch">][</span><span class="bn"> \t\n</span><span class="ch">]</span><span class="ot">/</span><span class="ch">\n</span><span class="ot">/g</span>;</span>
<span id="cb12-5"><a href="#cb12-5" aria-hidden="true" tabindex="-1"></a><span class="ot">s/</span><span class="ch">[</span><span class="bn"> \t\n</span><span class="ch">]+</span><span class="ot">//g</span>;</span>
<span id="cb12-6"><a href="#cb12-6" aria-hidden="true" tabindex="-1"></a><span class="fu">print</span> <span class="fu">length</span> (<span class="wa">$_</span>),<span class="ot">&quot;</span><span class="ch">\n</span><span class="ot">&quot;</span>;</span></code></pre></div>
<p>To use, 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="fu">perl</span> ./charcount.pl schweikh1.c</span></code></pre></div>
<p>I have tried, as suggested in the guidelines, to let the code look
like ordinary C code. Apart from a few long lines I think I left the
indentation like I would in RL. You should however not try to use
<code>indent</code> on the source. The code is extremely fragile because
of the myriads of <code>__LINE__</code> macros – indenting is a sure way
to break the program. Don’t even think of maintaining that beast; I’ve
had my share of core dumps during development :-) A test suite was used
after every minor change to find out if the program still does what it
should.</p>
<p>From the goals: “To stress C compilers with unusual code.” That
describes exactly my modest attempts…</p>
<h2 id="copyright-and-cc-by-sa-4.0-license">Copyright and CC BY-SA 4.0
License:</h2>
<p>This file is Copyright (c) 2023 by Landon Curt Noll. All Rights
Reserved. You are free to share and adapt this file under the terms of
this license:</p>
<pre><code>Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)</code></pre>
<p>For more information, see:
https://creativecommons.org/licenses/by-sa/4.0/</p>
<!-- START: this line starts content generated by: bin/gen-inventory.sh -->
<h1 id="inventory-for-1998schweikh1"><a name="inventory"></a>Inventory
for 1998/schweikh1</h1>
<h2 id="primary-files">Primary files</h2>
<ul>
<li><a href="index.html">index.html</a> - winner home page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1998/schweikh1/schweikh1.c">schweikh1.c</a>
- winning source</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1998/schweikh1/Makefile">Makefile</a>
- winner Makefile</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1998/schweikh1/schweikh1.alt.c">schweikh1.alt.c</a>
- alternative source</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1998/schweikh1/schweikh1.orig.c">schweikh1.orig.c</a>
- original source</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1998/schweikh1/charcount.pl">charcount.pl</a>
- character counter</li>
<li><a href="macos.html">macos.html</a> - work with macOS</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1998/schweikh1/info">info</a>
- standards compliance</li>
<li><a href="1998_schweikh1.tar.bz2">1998_schweikh1.tar.bz2</a> -
download winning source</li>
</ul>
<h2 id="secondary-files">Secondary files</h2>
<ul>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1998/schweikh1/.gitignore">.gitignore</a>
- list of files that should not be committed under git</li>
<li><a href=".path">.path</a> - directory path from top directory</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1998/schweikh1/.winner.json">.winner.json</a>
- description of winner in JSON</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1998/schweikh1/README.md">README.md</a>
- markdown source for index.html</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1998/schweikh1/macos.md">macos.md</a>
- work with macOS</li>
</ul>
<!-- END: next line ends content generated by: bin/gen-inventory.sh -->
<!-- START: this line starts content from: inc/after-content.default.html -->
<!-- END: this line ends content from: inc/after-content.default.html -->
<!-- START: this line starts content from: inc/end-rightcolumn.default.html -->
</div>
<!-- END: this line ends content from: inc/end-rightcolumn.default.html -->
<!-- START: this line starts content from: inc/end-row.default.html -->
</div>
<!-- END: this line ends content from: inc/end-row.default.html -->
<!-- START: this line starts content from: inc/footer.default.html -->
<div class="footer">
<hr>
<h2>Coda</h2>
<p><a href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fioccc-src.github.io%2Ftemp-test-ioccc%2F1998%2Fschweikh1%2Findex.html">Nu HTML check this web page</a></p>
<p><a href="#top">Jump to top</a> <a href="#content">Jump to Content</a> <a href="#inventory">Jump to Inventory</a></p>
</div>
<!-- END: this line ends content from: inc/footer.default.html -->
<!-- START: this line starts content from: inc/bottom.default.html -->
</body>
</html>
<!-- END: this line ends content from: inc/bottom.default.html -->