Files
Landon Curt Noll a1c86c8a7a add original C links to entry navigation bars
The navigation bar for a winning entry now has a "_Original C_" link
(between the ✅ and the Inventory on the right hand side) so that one
may easily view the original C code that was submitted for IOCCC judging.

Ran `make www timestamp` to perform the above.
2025-08-10 12:46:23 -07:00

742 lines
28 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!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>2014/skeggs - Most dynamic</title>
<link rel="icon" type="image/x-icon" href="../../favicon.ico">
<meta name="description" content="2014 IOCCC entry skeggs - Most dynamic">
<meta name="keywords" content="IOCCC, 2014, IOCCC 2014, IOCCC entry, skeggs, Most dynamic">
</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/readme2index.sh -->
<!-- The content of main section of this web page came from: 2014/skeggs/README.md -->
<!-- -->
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<!-- !!! Do not modify this web page, instead modify the file: 2014/skeggs/README.md !!! -->
<!-- !!! Do not modify this web page, instead modify the file: 2014/skeggs/README.md !!! -->
<!-- !!! Do not modify this web page, instead modify the file: 2014/skeggs/README.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>2014/skeggs - Most dynamic</h2>
<h3>dynamic library abusing game</h3>
</div>
<!-- END: this line ends content from: inc/header.default.html -->
<!-- START: this line starts content from: inc/navbar.mid.html -->
<div class="navbar">
<a class="Left" href="../sinon/index.html">&larr; 2014/sinon</a>
<a class="Left" href="../index.html">&uarr; 2014 &uarr;</a>
<a class="Left" href="../vik/index.html">2014/vik &rarr;</a>
<a class="Right" href="https://github.com/ioccc-src/winner/blob/master/2014/skeggs/prog.c">C code</a>
<a class="Right" href="https://github.com/ioccc-src/winner/blob/master/2014/skeggs/Makefile">Makefile</a>
<a class="Right" href="#inventory">Inventory</a>
<a class="Right" href="https://github.com/ioccc-src/winner/blob/master/2014/skeggs/prog.orig.c">Original C</a>
<a class="Right" href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fwww.ioccc.org%2F2014%2Fskeggs%2Findex.html">&#x2713;</a>
</div>
<!-- END: this line ends content from: inc/navbar.mid.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 20 by: bin/output-index-author.sh via bin/md2html.sh -->
<!-- START: this line starts content generated by: bin/output-index-author.sh -->
<h2 id="author">Author:</h2>
<ul>
<li>Name: <a href="../../authors.html#Cel_Skeggs">Cel Skeggs</a><br>
Location: <a href="../../location.html#US">US</a> - <em>United States of America</em> (<em>United States</em>)</li>
</ul>
<!-- END: next line ends content generated by: bin/output-index-author.sh -->
<!-- END: this line ends content for HTML phase 20 by: bin/output-index-author.sh via bin/md2html.sh -->
<!-- START: this line starts content for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
<!-- BEFORE: 1st line of markdown file: 2014/skeggs/README.md -->
<h2 id="to-build">To build:</h2>
<pre><code> make</code></pre>
<h2 id="to-use">To use:</h2>
<pre><code> ./prog</code></pre>
<p><strong>HINT</strong>: Try pressing the left and right arrow keys as needed.
Also try pressing space/enter to select options.
Pressing Q or Escape may end the fun before you are ready. :-)</p>
<h2 id="judges-remarks">Judges’ remarks:</h2>
<p>When the code looks like lemons, it is probably because the LEMONPEOPLE,
or at least the LEMONLORD was involved. :-)</p>
<p>Look at some of the C pre-processor macros in the source code.
Ask yourself why C source is being passed as arguments to some
of those macros.</p>
<p>Now you may observe, while it is running, that some C source code is being
written to a file and then compiled. And yet that compiled code is somehow
executed from <code>main()</code>. But how? How is <code>main()</code> able to call code that was
written and compiled just in time for execution?</p>
<h2 id="authors-remarks">Author’s remarks:</h2>
<h3 id="table-of-contents">TABLE OF CONTENTS</h3>
<ul>
<li>Backstory</li>
<li>Known compiler warnings</li>
<li>Obfuscation</li>
<li>Troubleshooting guide (IMPORTANT!)</li>
<li>Q&amp;A</li>
</ul>
<h3 id="backstory">BACKSTORY</h3>
<p>It was ten yours ago when THE LEMONPEOPLE invaded, juicing all in their path.</p>
<p>Attempting to free the Earth from their tyranny, you have endured pulpy and
sour battles.</p>
<p>This has now culminated in you reaching the throne room of THE LEMONLORD.</p>
<p>Armed with your right-facing curly brace, you charge into battle.</p>
<p>(Use left and right arrow keys and space/enter to select options. Press Q or
Escape to quit.)</p>
<h3 id="known-compiler-warnings">KNOWN COMPILER WARNINGS</h3>
<p>Unfortunately, it became very difficult to get this entry to fit within the
size requirements. It’s currently at 2052 according to
<a href="https://github.com/ioccc-src/winner/blob/master/2014/iocccsize.c">iocccsize</a>, and 3994 according to <code>wc -c</code>.</p>
<p>The current size is a third to a half of the original size before compression.</p>
<p>Due to this, it does LOTS of things that subtly annoy compilers!</p>
<ul>
<li><p><code>(10)</code> data argument not used by format string</p>
<p>This occurs because some of the <code>fprintf(3)</code> invocations don’t use all their
parameters. The program should still work fine!</p></li>
<li><p><code>(1)</code> using the result of an assignment as a condition without parentheses</p>
<p>Somewhere, I needed to set a variable and then branch on the result. The
shortest way was to combine them. Some self-proclaimed “EXPERTS” think this
is a bad programming practice, but what do they know? :P</p></li>
<li><p><code>(1)</code> implicit declaration of function ‘time’ is invalid in C99</p>
<p>An <code>#include</code> statement is expensive, and I’m broke.</p></li>
<li><p><code>(1)</code> control may reach end of non-void function</p>
<p>Turns out that sometimes, a <code>return</code> statement is too much. This will never
actually occur, but some C compilers think they know more about my program
than I do! :P</p></li>
<li><p>(?) Under some systems, <code>-fPIC</code> is irrelevant for shared libraries. If so,
you should remove it from the Makefile.</p></li>
</ul>
<h2 id="obfuscation-what-obfuscation-this-is-a-perfectly-normal-c-program">OBFUSCATION? WHAT OBFUSCATION? THIS IS A PERFECTLY NORMAL C PROGRAM!</h2>
<h1 id="the-cool-part">THE COOL PART</h1>
<p>Take a close look at how it works. Notice that it’s passing C code to certain
macros…</p>
<p>Guess what? It’s a very simple kind of JIT compiler, though not used as deeply
as would be cool.</p>
<p>Essentially, it generates C code at runtime, dumps it to a file, and then runs
a C compiler on that file, telling the C compiler to generate a shared library.
Then it loads the shared library with <code>dlopen(3)</code>, and…</p>
<p>Ignores the result?</p>
<p>That can’t be right.</p>
<p>Well, it is. Instead of using <code>dlsym(3)</code> like a normal programmer, I mark one of the
generated functions with <code>__attribute__((constructor))</code>. This means that it
gets called immediately on load, so it can make its functions available.</p>
<p>But wait - how can it link into the main program, either? It has no way to
reference anything in the main executable!</p>
<p>But it does: I’m injecting certain addresses into the generated code, which it
then casts to pointers and accesses! It uses this to make certain functions
available to the main program, so the main program’s generated code will then
enter itself where it’s needed.</p>
<h1 id="the-not-so-cool-part">THE NOT-SO-COOL PART</h1>
<p>There are also lots of <code>#defines</code>.</p>
<p>No, these are not obfuscation. These are compression.</p>
<p>There is a little bit of obfuscation gained from using the stringification
operator. (I can never remember what it’s actually called, but it’s the <code>#</code>
operator in a preprocessor macro) - this allows me to pass C code in arguments
to the macros, meaning that it gets interpreted as C code instead of a string
by the <a href="https://github.com/ioccc-src/winner/blob/master/2014/iocccsize.c">iocccsize</a> tool, so it gets counted as smaller! :D</p>
<h1 id="a-slightly-cool-part">A SLIGHTLY COOL PART</h1>
<p>As part of the JIT compiling, the program hides the fact that it needs ncurses:
it just links ncurses with one of the generated shared libraries, and then can
access the contents of the ncurses library!</p>
<h1 id="wait-what">WAIT WHAT</h1>
<p>Also, note where functions start and end…</p>
<p>I’ve messed with the syntax so that it’s not actually formatted properly. It
almost looks like it is, but it isn’t.</p>
<p>This isn’t significant obfuscation as long as you run it through a C source
code beautifier.</p>
<p>But wait… if you aren’t careful, running it through a C source code
beautifier won’t work. Remember how I’m interlacing generated C code with
actual C code? Note that this WRECKS some beautifiers. I hope you have a good
one!</p>
<p>(There’s an obvious way around this but I’m not going to spell it out for you.
That’d be too easy!)</p>
<h3 id="miscellaneous-stuff">MISCELLANEOUS STUFF</h3>
<p>Do note that there are some other miscellaneous obfuscations, but they should
be easy to understand once you figure out the ones above.</p>
<h3 id="troubleshooting-guide">TROUBLESHOOTING GUIDE</h3>
<p>This program is a very easy program to cause to fail!</p>
<p>Some things to check</p>
<ul>
<li><p>On line 16, where it says <code>%cinclude "prog.c"</code>, is <code>prog.c</code> the name of the
original source code file?</p></li>
<li><p>Do you have ncurses installed?</p></li>
<li><p>Does your system have <code>ncurses.h</code> (like a nice system) or
<code>ncurses/ncurses.h</code> (like a rude system) ?</p>
<p>If it’s the latter (or some other path), you’ll need to update line 97.</p>
<p>(I had to do this under Cygwin.)</p></li>
<li><p>Does your system need <code>-fPIC</code> (or other arcane invocations) to compile a
shared library? If so, make sure that you include it in the <code>-DCC</code> argument in
the build script.</p></li>
<li><p>Does your system have a vague dislike for <code>-fPIC</code>? (Like Cygwin.) You might
need to remove it from the build script.</p></li>
<li><p>Does your system support <code>__attribute__((constructor))</code>? It needs to.</p></li>
<li><p>Check the file <code>err</code>. Maybe it will help you figure out why a runtime-
generated program failed. The failing program should be found in <code>t.c</code>.</p></li>
<li><p>Can’t run a beautifier on the source code? I’m not going to help you there.</p></li>
</ul>
<p>I’ve tested it on the following platforms, in case you need to try it on one:</p>
<ul>
<li>64-bit Windows 7 32-bit Cygwin with gcc 4.8.2 and standards c89, c90, c99,
and c11. Note that the program ran as 32-bit due to the version of cygwin.</li>
<li>64-bit Arch Linux with gcc 4.9.1 and standards c89, c90, c99, c11.</li>
<li>64-bit Arch Linux with clang 3.5.0 and standards c89 and c11.</li>
</ul>
<p>I ran out of time to test it on more systems.</p>
<h3 id="qa">Q&amp;A</h3>
<ul>
<li><p>Who am I?</p>
<p>Yes.</p></li>
<li><p>Why doesn’t your program require a pet fish license?</p>
<p>THE LEMONLORD’s pet LEMONFISH was not rendered in the game, and so does not
require a pet fish license.</p></li>
<li><p>Was this inspired by anything?</p>
<p>Yes, this was inspired by a minigame from an open-source codebase of Space
Station 13. I didn’t, however, look at the minigame at all during the
development of this entry.</p></li>
<li><p>What’s the length of this README file according to the
<a href="https://github.com/ioccc-src/winner/blob/master/2014/iocccsize.c">iocccsize</a> tool?</p></li>
</ul>
<pre><code> $ ./iocccsize -i &lt; README.md
6057</code></pre>
<!--
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: 2014/skeggs/README.md -->
<!-- END: this line ends content for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
<!-- START: this line starts content for HTML phase 22 by: bin/output-index-inventory.sh via bin/md2html.sh -->
<!-- START: this line starts content generated by: bin/output-index-inventory.sh -->
<div id="inventory">
<h1 id="inventory-for-2014skeggs">Inventory for 2014/skeggs</h1>
</div>
<h2 id="primary-files">Primary files</h2>
<ul>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2014/skeggs/prog.c">prog.c</a> - entry source code</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2014/skeggs/Makefile">Makefile</a> - entry Makefile</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2014/skeggs/prog.orig.c">prog.orig.c</a> - original source code</li>
</ul>
<h2 id="secondary-files">Secondary files</h2>
<ul>
<li><a href="2014_skeggs.tar.bz2">2014_skeggs.tar.bz2</a> - download entry tarball</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2014/skeggs/README.md">README.md</a> - markdown source for this web page</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2014/skeggs/.entry.json">.entry.json</a> - entry summary and manifest in JSON</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2014/skeggs/.gitignore">.gitignore</a> - list of files that should not be committed under git</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2014/skeggs/.path">.path</a> - directory path from top level directory</li>
<li><a href="index.html">index.html</a> - this web page</li>
</ul>
<hr style="width:10%;text-align:left;margin-left:0">
<h4>
Jump to: <a href="#">top</a>
</h4>
<!-- END: next line ends content generated by: bin/output-index-inventory.sh -->
<!-- END: this line ends content for HTML phase 22 by: bin/output-index-inventory.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.inventory.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 &copy; 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%2F2014%2Fskeggs%2Findex.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> <a href="#inventory">Jump to Inventory</a><br>
</p>
</div>
</div>
<!-- END: this line ends content from: inc/footer.inventory.html -->
<!-- START: this line starts content from: inc/bottom.default.html -->
</body>
</html>
<!-- END: this line ends content from: inc/bottom.default.html -->