Prepare for the winners of **IOCCC28**. > However these are not the 2024 droids you are looking for. :-) The HTML menu (both JavaScript and non-JavaScript) has been updated. The `Status -> Rules and guidelines' have been replaced with two separate menus `Status -> IOCCC rules` and `Status -> IOCCC guidelines`. Added a new top level `social.html` page: built from a new `social.md`. Sorted rules for building specific web pages in the top level `Makefile`. Added `make social` to make the `social.html` page from `social.md`. The `bin/gen-top-html.sh` now is able to process a argument of **social** to process the new top level `social.html` page. Changed `bin/gen-top-html.sh` VERSION from "2.0.0 2025-03-13" to "2.0.1 2025-07-25". Below `About -> Home page` a new `About -> IOCCC social media` menu item as added. Because the menu change touched every HTML file, we changed the general copyright date range for HTML files from "1984-2024" to "1984-2025" due to the extensive changes made for **IOCCC28**. Those markdown files that were modified in 2025 had their copyright date range also changed from "1984-2024" to "1984-2025". Rebuilt tarballs and sitemap due to the extensive HTML rebuilding. Ran `make update` to perform the above.
718 lines
26 KiB
HTML
718 lines
26 KiB
HTML
<!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 -->
|
||
|
||
<!-- END: this line ends content from: inc/top.default.html -->
|
||
<!-- START: this line starts content from: inc/head.default.html -->
|
||
|
||
<head>
|
||
<link rel="stylesheet" href="../../ioccc.css">
|
||
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap" rel="stylesheet">
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
||
<title>The International Obfuscated C Code Contest</title>
|
||
<link rel="icon" type="image/x-icon" href="../../favicon.ico">
|
||
<meta name="description" content="dorssel.md for 1998/dorssel">
|
||
<meta name="keywords" content="IOCCC, 1998/dorssel, dorssel.md">
|
||
</head>
|
||
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
|
||
<!-- END: this line ends content from: inc/head.default.html -->
|
||
|
||
<!-- -->
|
||
<!-- This web page was formed via the tool: bin/gen-other-html.sh -->
|
||
<!-- The content of main section of this web page came from: 1998/dorssel/dorssel.md -->
|
||
<!-- -->
|
||
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: 1998/dorssel/dorssel.md !!! -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: 1998/dorssel/dorssel.md !!! -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: 1998/dorssel/dorssel.md !!! -->
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
|
||
<!-- Markdown content was converted into HTML via the tool: bin/md2html.sh -->
|
||
|
||
<!-- START: this line starts content from: inc/body.default.html -->
|
||
|
||
<body>
|
||
|
||
<!-- END: this line ends content from: inc/body.default.html -->
|
||
<!-- START: this line starts content from: inc/topbar.default.html -->
|
||
|
||
<div class="theader">
|
||
<nav class="topbar">
|
||
<div class="container">
|
||
<div class="logo">
|
||
<a href="../../index.html" class="logo-link">
|
||
IOCCC
|
||
</a>
|
||
</div>
|
||
|
||
<div class="topbar-items">
|
||
<div class="item">
|
||
<span class="item-header">
|
||
Entries
|
||
</span>
|
||
|
||
<div class="sub-item">
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../years.html" class="sub-item-link">
|
||
Winning entries
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../authors.html" class="sub-item-link">
|
||
Winning authors
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../location.html" class="sub-item-link">
|
||
Location of authors
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../bugs.html" class="sub-item-link">
|
||
Bugs and (mis)features
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../faq.html#fix_an_entry" class="sub-item-link">
|
||
Fixing entries
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../faq.html#fix_author" class="sub-item-link">
|
||
Updating author info
|
||
</a>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<div class="item">
|
||
<span class="item-header">
|
||
Status
|
||
</span>
|
||
|
||
<div class="sub-item">
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../news.html" class="sub-item-link">
|
||
News
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../status.html" class="sub-item-link">
|
||
Contest status
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../next/rules.html" class="sub-item-link">
|
||
IOCCC rules
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../next/guidelines.html" class="sub-item-link">
|
||
IOCCC guidelines
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../markdown.html" class="sub-item-link">
|
||
Markdown guidelines
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../SECURITY.html" class="sub-item-link">
|
||
Security policy
|
||
</a>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<div class="item">
|
||
<span class="item-header">
|
||
FAQ
|
||
</span>
|
||
|
||
<div class="sub-item">
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../faq.html" class="sub-item-link">
|
||
Frequently asked questions
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../quick-start.html#enter" class="sub-item-link">
|
||
Enter the IOCCC
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../faq.html#compiling" class="sub-item-link">
|
||
Compiling entries
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../faq.html#running_entries" class="sub-item-link">
|
||
Running entries
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../faq.html#help" class="sub-item-link">
|
||
How to help
|
||
</a>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<div class="item">
|
||
<span class="item-header">
|
||
About
|
||
</span>
|
||
|
||
<div class="sub-item">
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../index.html" class="sub-item-link">
|
||
Home page
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../social.html" class="sub-item-link">
|
||
IOCCC social media
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../about.html" class="sub-item-link">
|
||
About the IOCCC
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../judges.html" class="sub-item-link">
|
||
The judges
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../thanks-for-help.html" class="sub-item-link">
|
||
Thanks for the help
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../contact.html" class="sub-item-link">
|
||
Contact us
|
||
</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
|
||
<div class="header-mobile-menu">
|
||
<noscript>
|
||
<a href="../../nojs-menu.html" class="topbar-js-label">
|
||
Please Enable JavaScript
|
||
</a>
|
||
</noscript>
|
||
|
||
<button id="header-open-menu-button" class="topbar-mobile-menu">
|
||
<img
|
||
src="../../png/hamburger-icon-open.png"
|
||
alt="hamburger style menu icon - open state"
|
||
width=48
|
||
height=48>
|
||
</button>
|
||
|
||
<button id="header-close-menu-button" class="hide-content">
|
||
<img
|
||
src="../../png/hamburger-icon-closed.png"
|
||
alt="hamburger style menu icon - closed state"
|
||
width=48
|
||
height=48>
|
||
</button>
|
||
|
||
<div id="mobile-menu-panel" class="hide-content">
|
||
<div class="mobile-menu-container">
|
||
|
||
<div class="mobile-menu-wrapper">
|
||
<div class="mobile-menu-item">
|
||
Entries
|
||
</div>
|
||
<div class="mobile-submenu-wrapper">
|
||
|
||
<a class="mobile-submenu-item" href="../../years.html">
|
||
Winning entries
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../authors.html">
|
||
Winning authors
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../location.html">
|
||
Location of authors
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../bugs.html">
|
||
Bugs and (mis)features
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../faq.html#fix_an_entry">
|
||
Fixing entries
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../faq.html#fix_author">
|
||
Updating author info
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../thanks-for-help.html">
|
||
Thanks for the help
|
||
</a>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<div class="mobile-menu-wrapper">
|
||
|
||
<div class="mobile-menu-item">
|
||
Status
|
||
</div>
|
||
<div class="mobile-submenu-wrapper">
|
||
|
||
<a class="mobile-submenu-item" href="../../news.html">
|
||
News
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../status.html">
|
||
Contest status
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../next/rules.html">
|
||
IOCCC rules
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../next/guidelines.html">
|
||
IOCCC guidelines
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../markdown.html">
|
||
Markdown guidelines
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../SECURITY.html">
|
||
Security policy
|
||
</a>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<div class="mobile-menu-wrapper">
|
||
<div class="mobile-menu-item">
|
||
FAQ
|
||
</div>
|
||
<div class="mobile-submenu-wrapper">
|
||
|
||
<a class="mobile-submenu-item" href="../../faq.html">
|
||
Frequently asked questions
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../quick-start.html#enter">
|
||
Enter the IOCCC
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../faq.html#compiling">
|
||
Compiling entries
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../faq.html#running_entries">
|
||
Running entries
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../faq.html#help">
|
||
How to help
|
||
</a>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<div class="mobile-menu-wrapper">
|
||
<div class="mobile-menu-item">
|
||
About
|
||
</div>
|
||
<div class="mobile-submenu-wrapper">
|
||
|
||
<a class="mobile-submenu-item" href="../../index.html">
|
||
Home page
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../social.html">
|
||
IOCCC social media
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../about.html">
|
||
About the IOCCC
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../judges.html">
|
||
The judges
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../contact.html">
|
||
Contact us
|
||
</a>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<script>
|
||
var headerOpenMenuButton = document.getElementById("header-open-menu-button");
|
||
var headerCloseMenuButton = document.getElementById("header-close-menu-button");
|
||
var mobileMenuPanel = document.getElementById("mobile-menu-panel");
|
||
|
||
headerOpenMenuButton.addEventListener("click", () => {
|
||
headerOpenMenuButton.classList.remove("topbar-mobile-menu");
|
||
headerOpenMenuButton.classList.add("hide-content");
|
||
|
||
headerCloseMenuButton.classList.remove("hide-content");
|
||
headerCloseMenuButton.classList.add("topbar-mobile-menu");
|
||
|
||
mobileMenuPanel.classList.remove("hide-content");
|
||
mobileMenuPanel.classList.add("topbar-mobile-panel");
|
||
});
|
||
|
||
headerCloseMenuButton.addEventListener("click", () => {
|
||
headerCloseMenuButton.classList.remove("topbar-mobile-menu");
|
||
headerCloseMenuButton.classList.add("hide-content");
|
||
|
||
mobileMenuPanel.classList.add("hide-content");
|
||
mobileMenuPanel.classList.remove("topbar-mobile-panel");
|
||
|
||
headerOpenMenuButton.classList.add("topbar-mobile-menu");
|
||
headerOpenMenuButton.classList.remove("hide-content");
|
||
});
|
||
</script>
|
||
|
||
<!-- END: this line ends content from: inc/topbar.default.html -->
|
||
<!-- START: this line starts content from: inc/header.default.html -->
|
||
|
||
<div class="header">
|
||
<a href="../../2011/zucker/index.html">
|
||
<img src="../../png/ioccc.png"
|
||
alt="IOCCC image by Matt Zucker"
|
||
width=300
|
||
height=110>
|
||
</a>
|
||
<h1>The International Obfuscated C Code Contest</h1>
|
||
<h2>dorssel.html for 1998/dorssel</h2>
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/header.default.html -->
|
||
<!-- START: this line starts content from: inc/navbar.up2index.html -->
|
||
|
||
<div class="navbar">
|
||
<a class="Left" href="index.html">↑ jump to 1998/dorssel/index.html ↑</a>
|
||
<a class="Right" href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fwww.ioccc.org%2F1998%2Fdorssel%2Fdorssel.html">✓</a>
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/navbar.up2index.html -->
|
||
<!-- START: this line starts content from: inc/before-content.default.html -->
|
||
|
||
<div class="content" id="content">
|
||
|
||
<!-- END: this line ends content from: inc/before-content.default.html -->
|
||
<!-- START: this line starts content for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
|
||
|
||
<!-- BEFORE: 1st line of markdown file: 1998/dorssel/dorssel.md -->
|
||
<h1 id="information-about-this-entry">Information about this entry</h1>
|
||
<p>Morse codes for letters and digits use sequences of 1 to 5 (inclusive)
|
||
Morse symbols (denoted as <code>.</code> or <code>-</code>), e.g.</p>
|
||
<pre><code> E .
|
||
Z --..
|
||
3 ...--</code></pre>
|
||
<p>(BTW: digits always have 5 symbols, letters 1 to 4. I didn’t use this fact.)</p>
|
||
<p>Of course we can encode these symbols with bits in a byte. I chose <code>-</code>
|
||
to be a bit set to 0, <code>.</code> to be a bit set to 1. Characters in C are at
|
||
least 8 bits, but they are either signed or unsigned. To be portable,
|
||
I’ve used only values from 0 to 127 (inclusive) (both in the encoding
|
||
of Morse codes, as well as in subexpressions in the program). Hence we
|
||
can use type <code>char</code> (using <code>unsigned char</code> for an extra bit would have made
|
||
the source code excessively large ;-)</p>
|
||
<p>The least significant bit contains the first symbol of a Morse code, so
|
||
we have</p>
|
||
<pre><code> E > 0......1
|
||
Z > 0...1100
|
||
3 > 0..00111</code></pre>
|
||
<p>The dots still have to be determined. But we also need to encode the
|
||
length of the sequence. Since there are only 4 different kind of lengths,
|
||
two bits would suffice, e.g.</p>
|
||
<pre><code> E > 000....1
|
||
Z > 010.1100
|
||
3 > 01100111</code></pre>
|
||
<p>That means bits 6 and 5 set to 00 is length 1, set to 01 is length 2, etc.
|
||
But this would mean that we would have to extract the length into a
|
||
counter before shifting out each symbol, such as</p>
|
||
<pre><code> length = (encoding & 96) >> 5;
|
||
do {
|
||
putchar(encoding & 1 ? '-' : '.');
|
||
encoding >>= 1;
|
||
} while (length--);</code></pre>
|
||
<p>We can also use the remaining bits to <em>include</em> the counter</p>
|
||
<pre><code> length 1: 00000.1x `E > 00000.11
|
||
length 2: 0000.1xx
|
||
length 3: 000.1xxx
|
||
length 4: 00.1xxxx Z > 00.11100
|
||
length 5: 0.1xxxxx 3 > 0.100111</code></pre>
|
||
<p>with 1 bit still to be chosen freely (let’s assume it is 0). Now we can do</p>
|
||
<pre><code> do {
|
||
putchar(encoding & 1 ? '-' : '.');
|
||
encoding >>= 1;
|
||
while (encoding > 1);</code></pre>
|
||
<p>As you see, the encoded Morse sequence can be the counter itself. But
|
||
this is not very pleasant, as some Morse sequences will end up having
|
||
an ASCII value < 32, i.e. they will be control codes. This would make
|
||
the initializing (encoding) string awkward. Hence I came up with the
|
||
following</p>
|
||
<pre><code> length 1: 0010010x E > 00100101 (= '%')
|
||
length 2: 001010xx
|
||
length 3: 00110xxx
|
||
length 4: 0100xxxx Z > 01001100 (= 'L')
|
||
length 5: 011xxxxx 3 > 01100111 (= 'g')</code></pre>
|
||
<p>Notice these encodings in the initialization string. Only the coding for
|
||
<code>5</code> needs an escape (<code>5 = ..... > 01111111 = '\177'</code>). The way the length
|
||
is encoded still allows the encoding to be its own counter:</p>
|
||
<pre><code> do {
|
||
putchar(encoding & 1 ? '-' : '.');
|
||
encoding = (encoding + 32) >> 1;
|
||
} while (encoding > 35);</code></pre>
|
||
<p>The last shift will always result in <code>00100010</code>, hence the test for <code>>35</code>.
|
||
Note that the calculation for the next value of <code>encoding</code> is done at <code>int</code>
|
||
precision, so that the actual value of the <code>char</code> remains <code><= 127</code>.</p>
|
||
<p>The character <code>'-'</code> (ASCII 45) and <code>'.'</code> (ASCII 46) are conveniently in
|
||
sequence, so the <code>putchar(3)</code> can simply be</p>
|
||
<pre><code> putchar(45 + encoding % 2);</code></pre>
|
||
<p>I used the modulo operator this time, because <code>+</code> takes precedence over <code>&</code>.
|
||
The assignment can be incorporated into the <code>while</code> control test, and a
|
||
<code>do-while</code> loop with a body of a single expression statement can be written
|
||
as a <code>while</code> loop with a comma operator in the test:</p>
|
||
<pre><code> while(putchar(45 + encoding % 2),
|
||
encoding = encoding + 32 >> 1);</code></pre>
|
||
<p>Voila.</p>
|
||
<p>Now, the decoding of Morse codes is just the reverse. We shift in <code>0</code>s
|
||
and <code>1</code>s as we scan the line. But: we have to scan from back to front
|
||
(the left most Morse symbol is in the least significant bit, and thus
|
||
has to shifted in last). The test for the scanning while loop must
|
||
stop when there are no more <code>.</code> or <code>-</code> on the left. Hence we need a
|
||
terminating character in front of the line. The input line is read one
|
||
past the encoding string (into the same character array) the terminating
|
||
character for the reverse scan is therefore provided by the implicit <code>'\0'</code>
|
||
of the array initializer ! The test also stops when at most 5 symbols
|
||
have been shifted in.</p>
|
||
<p>The encoded character is then looked up in the encoding string with
|
||
<code>memchr(3)</code> (why <code>memchr(3)</code> is explained later). Either a <code>?</code> (when there are
|
||
more than 5 consecutive Morse symbols, or if the sequence is unknown)
|
||
or the decoded character is printed. Or a <code>' '</code> if there was an extra
|
||
space in the source line. Note the use of “or” in these last sentences,
|
||
as they explain the use of the conditional operator.</p>
|
||
<p>The <code>strspn(3)</code> calls need either <code>" .-"</code> or <code>".-"</code> as argument. Of course they
|
||
are overlapped. I put these strings between the encodings for digits
|
||
and letters. This is OK, since neither of these characters, or the <code>'\0'</code>,
|
||
is a valid encoding ! We must, however, use <code>memchr(3)</code> instead of <code>strchr(3)</code> in
|
||
the decoding lookup because of this <code>'\0'</code>. Since it is far more obscure
|
||
this way, I hope you’ll forgive me.</p>
|
||
<p>The outline of the program is roughly as follows (pseudo C):</p>
|
||
<pre><code> while (more lines) {
|
||
if (line is in morse) {
|
||
while (more characters) {
|
||
skip next sequence
|
||
if (' ')
|
||
putchar(' ');
|
||
else
|
||
decode_sequence; /* backwards */
|
||
}
|
||
} else {
|
||
while (more characters) {
|
||
if (isalnum)
|
||
encode_character;
|
||
putchar(' ');
|
||
}
|
||
}</code></pre>
|
||
<p>Because of the <em>two</em> <code>while(more characters)</code> loops are the same, I’ve
|
||
exchanged the <code>if(line is in morse)</code> and the two <code>while</code> loops (so there
|
||
is <em>single</em> <code>while</code> loop). However, we must now store the <code>if(line is in morse)</code> test for efficiency (it would be stupid to test the entire line
|
||
for every character). This is done in <code>l[0]</code> ! (the first encoding is
|
||
thus in <code>l[1]</code>). The <code>memchr(3)</code> decoding lookup is not disturbed, because the
|
||
test is always <code>0</code> for Morse lines, and <code>'\0'</code> is not a possible encoding.
|
||
<code>l[0]</code> is also used as the temporary shift character while encoding a
|
||
line of text. This does not disturb the <code>if (line is in morse)</code> test,
|
||
as the temporary <code>l[0]</code> will remain <code>!= 0</code>.</p>
|
||
<p>I’ve put the <code>if</code>s in the above layout into a single switch. Hope you don’t
|
||
mind ;-)</p>
|
||
<p>Summary of the use of <code>l[999]</code>:</p>
|
||
<ul>
|
||
<li><code>l[0]</code>
|
||
<ul>
|
||
<li><strong>result of “is this line in morse” test</strong></li>
|
||
</ul></li>
|
||
<li><code>l[0]</code>
|
||
<ul>
|
||
<li><strong>temporary shift during encoding</strong></li>
|
||
</ul></li>
|
||
<li><code>l[0] - l[33]</code>
|
||
<ul>
|
||
<li><strong>Morse codings (letters and digits, plus garbage)</strong></li>
|
||
</ul></li>
|
||
<li><code>l[11] - l[14]</code>
|
||
<ul>
|
||
<li><strong><code>strspn(3)</code> argument</strong></li>
|
||
</ul></li>
|
||
<li><code>l[12] - l[14]</code>
|
||
<ul>
|
||
<li><strong><code>strspn(3)</code> argument</strong></li>
|
||
</ul></li>
|
||
<li><code>l[34]</code>
|
||
<ul>
|
||
<li><strong>terminator for backward decoding</strong></li>
|
||
</ul></li>
|
||
<li><code>l[35] - l[998]</code>
|
||
<ul>
|
||
<li><strong>input line</strong></li>
|
||
</ul></li>
|
||
</ul>
|
||
<hr style="width:10%;text-align:left;margin-left:0">
|
||
<p>Selected notes:</p>
|
||
<ul>
|
||
<li>We don’t need to declare <code>isalnum(3)</code> (or include <code>ctype.h</code>) as its implicit
|
||
declaration is correct (<code>int</code> argument, <code>int</code> result). This is not so for
|
||
<code>strlen(3)</code>, <code>strspn(3)</code>, and <code>memchr(3)</code> as they use <code>size_t</code>.</li>
|
||
<li>During development, my gcc 2.7.2.3 had an internal compiler error (signal
|
||
6) on code that was correct !</li>
|
||
<li>lclint 2.4b thinks that “the observer is modified” a couple of times,
|
||
whereas it is not. Well, it is, but there is a sequence point in between.</li>
|
||
<li>lclint 2.4b parses <a href="https://github.com/ioccc-src/winner/blob/master/1998/dorssel/dorssel.c#L13">line 13</a> as <code><error></code>, whereas it is correct code.</li>
|
||
<li>lclint 2.4b is positive the second <code>while</code> loop is infinite, whereas it is
|
||
not.</li>
|
||
</ul>
|
||
<hr style="width:10%;text-align:left;margin-left:0">
|
||
<p>.. - …. .. -. -.- - …. .. … … .–. — .. .-.. . .-. .. … – — .-. . — -… ..-. ..- … -.-. .- - . -.. - …. .- -. - …. . .–. .-. — –. .-. .- –</p>
|
||
<p>. -..- . .-. -.-. .. … .
|
||
-.-. …. .- -. –. . - …. . .–. .-. — –. .-. .- – … — .. - -.. — . … -. — - … …. — ..- -</p>
|
||
<hr style="width:10%;text-align:left;margin-left:0">
|
||
<p>Jump to: <a href="#">top</a></p>
|
||
<!--
|
||
|
||
Copyright © 1984-2024 by Landon Curt Noll. All Rights Reserved.
|
||
|
||
You are free to share and adapt this file under the terms of this license:
|
||
|
||
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||
|
||
For more information, see:
|
||
|
||
https://creativecommons.org/licenses/by-sa/4.0/
|
||
|
||
-->
|
||
<!-- AFTER: last line of markdown file: 1998/dorssel/dorssel.md -->
|
||
|
||
<!-- END: this line ends content for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
|
||
<!-- START: this line starts content from: inc/after-content.default.html -->
|
||
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/after-content.default.html -->
|
||
<!-- START: this line starts content from: inc/footer.default.html -->
|
||
|
||
<!--
|
||
|
||
Copyright © 1984-2025 by Landon Curt Noll. All Rights Reserved.
|
||
|
||
You are free to share and adapt this file under the terms of this license:
|
||
|
||
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||
|
||
For more information, see:
|
||
|
||
https://creativecommons.org/licenses/by-sa/4.0/
|
||
|
||
-->
|
||
|
||
<div class="footer">
|
||
|
||
<div id="copyright"><h3>Copyright © 1984-2025 by Landon Curt Noll:
|
||
<a href="https://creativecommons.org/faq/#what-does-some-rights-reserved-mean"
|
||
target="_blank"
|
||
rel="license noopener noreferrer">Some Rights Reserved</a></h3>
|
||
<p>
|
||
This work is <b>licensed by Landon Curt Noll</b> under
|
||
<b><a href="https://creativecommons.org/licenses/by-sa/4.0/?ref=chooser-v1"
|
||
target="_blank"
|
||
rel="license noopener noreferrer"
|
||
style="display:inline-block;">CC BY-SA 4.0</a></b>.
|
||
<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
|
||
src="../../png/cc.png"
|
||
alt="cc inside circle symbol">
|
||
<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
|
||
src="../../png/by.png"
|
||
alt="person inside circle symbol">
|
||
<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
|
||
src="../../png/sa.png"
|
||
alt="arrow looping back on itself inside circle symbol"><br>
|
||
You should <b>carefully review</b> the
|
||
<b><a href="https://creativecommons.org/licenses/by-sa/4.0/legalcode.en"
|
||
target="_blank"
|
||
rel="license noopener noreferrer">CC BY-SA 4.0 LEGAL CODE</a></b>
|
||
before using the licensed material.<br>
|
||
You may wish to review the
|
||
<b><a href="../../license.html"
|
||
target="_blank"
|
||
rel="license noopener noreferrer">highlights of some of the key features and terms</a></b>
|
||
of <b>CC BY-SA 4.0</b>.<br>
|
||
</p>
|
||
</div>
|
||
|
||
<div id="coda"><h3>Coda</h3>
|
||
<p>
|
||
<a href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fwww.ioccc.org%2F1998%2Fdorssel%2Fdorssel.html" rel="nofollow">Nu HTML check this web page</a><br>
|
||
<a href="#top">Jump to top</a> <a href="#content">Jump to Content</a>
|
||
</p>
|
||
</div>
|
||
|
||
</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 -->
|