build missing HTML files for entries

Setup a simple topnav for missing HTML files for entries.

Added `bin/gen-other-html.sh` to build entry HTML files from
markdown other than README.md to index.html HTML files.

Fixed duplicate link text in `2020/ferguson1/gameplay.md`.

Improved `inc/md2html.cfg` to support building the missing HTML
files for entries.

Added `make gen_other_html` to top level Makefile.
Added `make gen_other_html` to `make quick_www` and `make www`.

Fixed inventory links for year level index.html files.
Changed `bin/output-year-index.sh` VERSION from "1.0.1 2024-02-23"
to "1.1 2024-02-27".

Added missing lines in `manifest.numbers`.  Update the affected
`.entry.json` files.

The manifest (in both `manifest.numbers` and the collection of
manifests from of all entry `.entry.json` files) now match.  Errors
from `make verify_entry_files` will now abort both `make quick_www`
and `make www` rules in the top level `Makefile`.

Changed markdown files in manifest to have an _inventory_order_ of
_2000000000_ so that the `index.html` file will usually appear at
the start of the _Secondary files_ set for the "#inventory" section
of an entry's `index.html` file.

Changed compressed tar files (files that end in _.tar.bz2_) in
manifest to have an _inventory_order_ of _100000_ so that these
files will usually appear at the end of the _Primary files_ set for
the "#inventory" section of an entry's `index.html` file.

Added 'Jump to top` link above the _Primary files_ section.
Changed `bin/output-index-inventory.sh` VERSION from "1.1.1 2024-02-23"
to "1.2 2024-02-27".

Updated HTML files to perform the above via `make www`.
This commit is contained in:
Landon Curt Noll committed 2024-02-27 22:36:20 -08:00
1 parent 7babf792e4
commit 9d3438fb88
718 files changed
+17515 -4084

No files matched your search

+8 -8
View File
@@ -9,14 +9,6 @@
{ "author_handle" : "Adrian_Mariano" }
],
"manifest" : [
{
"file_path" : "index.html",
"inventory_order" : 10,
"OK_to_edit" : false,
"display_as" : "html",
"display_via_github" : false,
"entry_text" : "entry home page"
},
{
"file_path" : "adrian.c",
"inventory_order" : 20,
@@ -113,6 +105,14 @@
"display_via_github" : false,
"entry_text" : "download entry source"
},
{
"file_path" : "index.html",
"inventory_order" : 2000000000,
"OK_to_edit" : false,
"display_as" : "html",
"display_via_github" : false,
"entry_text" : "entry home page"
},
{
"file_path" : ".entry.json",
"inventory_order" : 4294967295,
+2 -1
View File
@@ -313,9 +313,9 @@ https://creativecommons.org/licenses/by-sa/4.0/</p>
<h1 id="inventory-for-1992adrian"><a name="inventory"></a>Inventory for
1992/adrian</h1>
<p><a href="#top">Jump to top</a></p>
<h2 id="primary-files">Primary files</h2>
<ul>
<li><a href="index.html">index.html</a> - entry home page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/adrian/adrian.c">adrian.c</a>
- entry source</li>
@@ -354,6 +354,7 @@ entry source</li>
</ul>
<h2 id="secondary-files">Secondary files</h2>
<ul>
<li><a href="index.html">index.html</a> - entry home page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/adrian/.entry.json">.entry.json</a>
- description of entry in JSON</li>
+8 -8
View File
@@ -9,14 +9,6 @@
{ "author_handle" : "Albert_van_der_Horst" }
],
"manifest" : [
{
"file_path" : "index.html",
"inventory_order" : 10,
"OK_to_edit" : false,
"display_as" : "html",
"display_via_github" : false,
"entry_text" : "entry home page"
},
{
"file_path" : "albert.c",
"inventory_order" : 20,
@@ -73,6 +65,14 @@
"display_via_github" : false,
"entry_text" : "download entry source"
},
{
"file_path" : "index.html",
"inventory_order" : 2000000000,
"OK_to_edit" : false,
"display_as" : "html",
"display_via_github" : false,
"entry_text" : "entry home page"
},
{
"file_path" : ".entry.json",
"inventory_order" : 4294967295,
+2 -1
View File
@@ -238,9 +238,9 @@ https://creativecommons.org/licenses/by-sa/4.0/</p>
<h1 id="inventory-for-1992albert"><a name="inventory"></a>Inventory for
1992/albert</h1>
<p><a href="#top">Jump to top</a></p>
<h2 id="primary-files">Primary files</h2>
<ul>
<li><a href="index.html">index.html</a> - entry home page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/albert/albert.c">albert.c</a>
- entry source</li>
@@ -264,6 +264,7 @@ entry source</li>
</ul>
<h2 id="secondary-files">Secondary files</h2>
<ul>
<li><a href="index.html">index.html</a> - entry home page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/albert/.entry.json">.entry.json</a>
- description of entry in JSON</li>
+8 -8
View File
@@ -9,14 +9,6 @@
{ "author_handle" : "Anthony_C_Howe" }
],
"manifest" : [
{
"file_path" : "index.html",
"inventory_order" : 10,
"OK_to_edit" : false,
"display_as" : "html",
"display_via_github" : false,
"entry_text" : "entry home page"
},
{
"file_path" : "ant.c",
"inventory_order" : 20,
@@ -73,6 +65,14 @@
"display_via_github" : false,
"entry_text" : "download entry source"
},
{
"file_path" : "index.html",
"inventory_order" : 2000000000,
"OK_to_edit" : false,
"display_as" : "html",
"display_via_github" : false,
"entry_text" : "entry home page"
},
{
"file_path" : ".entry.json",
"inventory_order" : 4294967295,
+2 -1
View File
@@ -160,9 +160,9 @@ https://creativecommons.org/licenses/by-sa/4.0/</p>
<h1 id="inventory-for-1992ant"><a name="inventory"></a>Inventory for
1992/ant</h1>
<p><a href="#top">Jump to top</a></p>
<h2 id="primary-files">Primary files</h2>
<ul>
<li><a href="index.html">index.html</a> - entry home page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/ant/ant.c">ant.c</a>
- entry source</li>
@@ -186,6 +186,7 @@ source</li>
</ul>
<h2 id="secondary-files">Secondary files</h2>
<ul>
<li><a href="index.html">index.html</a> - entry home page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/ant/.entry.json">.entry.json</a>
- description of entry in JSON</li>
+8 -8
View File
@@ -9,14 +9,6 @@
{ "author_handle" : "Sean_Barrett" }
],
"manifest" : [
{
"file_path" : "index.html",
"inventory_order" : 10,
"OK_to_edit" : false,
"display_as" : "html",
"display_via_github" : false,
"entry_text" : "entry home page"
},
{
"file_path" : "buzzard.1.c",
"inventory_order" : 20,
@@ -57,6 +49,14 @@
"display_via_github" : false,
"entry_text" : "download entry source"
},
{
"file_path" : "index.html",
"inventory_order" : 2000000000,
"OK_to_edit" : false,
"display_as" : "html",
"display_via_github" : false,
"entry_text" : "entry home page"
},
{
"file_path" : ".entry.json",
"inventory_order" : 4294967295,
+2 -1
View File
@@ -306,9 +306,9 @@ https://creativecommons.org/licenses/by-sa/4.0/</p>
<h1 id="inventory-for-1992buzzard.1"><a name="inventory"></a>Inventory
for 1992/buzzard.1</h1>
<p><a href="#top">Jump to top</a></p>
<h2 id="primary-files">Primary files</h2>
<ul>
<li><a href="index.html">index.html</a> - entry home page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/buzzard.1/buzzard.1.c">buzzard.1.c</a>
- entry source</li>
@@ -326,6 +326,7 @@ download entry source</li>
</ul>
<h2 id="secondary-files">Secondary files</h2>
<ul>
<li><a href="index.html">index.html</a> - entry home page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/buzzard.1/.entry.json">.entry.json</a>
- description of entry in JSON</li>
+20 -12
View File
@@ -9,14 +9,6 @@
{ "author_handle" : "Sean_Barrett" }
],
"manifest" : [
{
"file_path" : "index.html",
"inventory_order" : 10,
"OK_to_edit" : false,
"display_as" : "html",
"display_via_github" : false,
"entry_text" : "entry home page"
},
{
"file_path" : "buzzard.2.c",
"inventory_order" : 20,
@@ -58,11 +50,11 @@
"entry_text" : "author description of files"
},
{
"file_path" : "buzzard.2.design.md",
"file_path" : "buzzard.2.design.html",
"inventory_order" : 100,
"OK_to_edit" : true,
"display_as" : "markdown",
"display_via_github" : true,
"display_as" : "html",
"display_via_github" : false,
"entry_text" : "about the FORTH language"
},
{
@@ -161,6 +153,14 @@
"display_via_github" : false,
"entry_text" : "download entry source"
},
{
"file_path" : "index.html",
"inventory_order" : 2000000000,
"OK_to_edit" : false,
"display_as" : "html",
"display_via_github" : false,
"entry_text" : "entry home page"
},
{
"file_path" : ".entry.json",
"inventory_order" : 4294967295,
@@ -199,7 +199,15 @@
"OK_to_edit" : true,
"display_as" : "markdown",
"display_via_github" : true,
"entry_text" : "markdown source for cannibalism.log.html"
"entry_text" : "markdown source for buzzard.2.README.html"
},
{
"file_path" : "buzzard.2.design.md",
"inventory_order" : 4294967295,
"OK_to_edit" : true,
"display_as" : "markdown",
"display_via_github" : true,
"entry_text" : "markdown source for buzzard.2.design.html"
}
]
}
+166
View File
@@ -0,0 +1,166 @@
<!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 !!! -->
<!-- !!! 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/top.default.html -->
<!-- -->
<!-- The original markdown content was formed by the tool: bin/gen-other-html.sh -->
<!-- The HTML was converted from markdown by the tool: bin/md2html.sh -->
<!-- -->
<!-- START: this line starts content from: inc/head.default.html -->
<head>
<link rel="stylesheet" href="../../ioccc.css">
<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>
<meta name="description" content="buzzard.2.README.md for 1992/buzzard.2">
<meta name="keywords" content="IOCCC, 1992/buzzard.2, buzzard.2.README.md">
</head>
<!-- END: this line ends content from: inc/head.default.html -->
<!-- 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/header.default.html -->
<div class="header">
<img src="../../png/ioccc.png" alt="IOCCC image by Matt Zucker" width=300 height=110>
<h1>The International Obfuscated C Code Contest</h1>
<h2>buzzard.2.README.md for 1992/buzzard.2</h2>
</div>
<!-- END: this line ends content from: inc/header.default.html -->
<!-- START: this line starts content from: inc/topnav.up2index.html -->
<div class="topnav">
<a class="Left" href="index.html">&uarr; jump to index.html &uarr;</a>
</div>
<!-- END: this line ends content from: inc/topnav.up2index.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="../../index.html">IOCCC Home</a>
<a href="../../years.html">Winning Entries</a>
<a href="../../authors.html">People who have won</a>
</div>
<hr>
<div class="sidenav">
<a href="../../news.html">IOCCC News</a>
<a href="../../faq.html#submit">How to enter the IOCCC</a>
<a href="../../faq.html">FAQ</a>
</div>
<hr>
<div class="sidenav">
<a href="../../bugs.html">Bugs &amp; (mis)features</a>
<a href="../../faq.html#fix_an_entry">Fixing IOCCC entries</a>
<a href="../../faq.html#fix_web_site">Fixing the web site</a>
<a href="../../faq.html#fix_author">Fixing author info</a>
<a href="../../thanks-for-help.html">Thanks for the help</a>
</div>
<hr>
<div class="sidenav">
<a href="../../judges.html">The IOCCC Judges</a>
<a href="../../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 for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
<p><a href="buzzard.2.README.md">buzzard.2.README.md</a> this file<br />
<a href="buzzard.2.design.md">buzzard.2.design.md</a> description of
FIRST (design documentation of THIRD)<br />
<a href="third">third</a> implementation of THIRD in FIRST<br />
<a href="help.th">help.th</a> online listing of THIRD primitives<br />
</p>
<h1 id="first-demos">FIRST demos:</h1>
<p>Use <code>./first &lt; &lt;demo&gt;</code>.</p>
<p><a href="demo1.1st">demo1.1st</a> prints Hello World! assuming
ASCII</p>
<h1 id="third-demos">THIRD demos:</h1>
<p>Use <code>cat third &lt;demo&gt; | ./first</code>.</p>
<h2 id="demo-files">Demo files:</h2>
<p><a href="demo1.th">demo1.th</a> prints Hello World! regardless of
character set <a href="demo2.th">demo2.th</a> demonstrates a simple loop
<a href="demo3.th">demo3.th</a> demonstrates a simple if test <a
href="demo4.th">demo4.th</a> recursive factorial calculating on the way
up <a href="demo5.th">demo5.th</a> recursive factorial calculating on
the way down <a href="demo6.th">demo6.th</a> demonstrates switching from
compiler to execution mode</p>
<h1 id="interactive-third">Interactive THIRD:</h1>
<p>Use <code>cat third - | ./first</code>.</p>
<p>To include the primitive on-line help, use
<code>cat third help.th - | ./first</code>.</p>
<!-- 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 -->
<!-- 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=#">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 -->
+847
View File
@@ -0,0 +1,847 @@
<!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 !!! -->
<!-- !!! 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/top.default.html -->
<!-- -->
<!-- The original markdown content was formed by the tool: bin/gen-other-html.sh -->
<!-- The HTML was converted from markdown by the tool: bin/md2html.sh -->
<!-- -->
<!-- START: this line starts content from: inc/head.default.html -->
<head>
<link rel="stylesheet" href="../../ioccc.css">
<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>
<meta name="description" content="buzzard.2.design.md for 1992/buzzard.2">
<meta name="keywords" content="IOCCC, 1992/buzzard.2, buzzard.2.design.md">
</head>
<!-- END: this line ends content from: inc/head.default.html -->
<!-- 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/header.default.html -->
<div class="header">
<img src="../../png/ioccc.png" alt="IOCCC image by Matt Zucker" width=300 height=110>
<h1>The International Obfuscated C Code Contest</h1>
<h2>buzzard.2.design.md for 1992/buzzard.2</h2>
</div>
<!-- END: this line ends content from: inc/header.default.html -->
<!-- START: this line starts content from: inc/topnav.up2index.html -->
<div class="topnav">
<a class="Left" href="index.html">&uarr; jump to index.html &uarr;</a>
</div>
<!-- END: this line ends content from: inc/topnav.up2index.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="../../index.html">IOCCC Home</a>
<a href="../../years.html">Winning Entries</a>
<a href="../../authors.html">People who have won</a>
</div>
<hr>
<div class="sidenav">
<a href="../../news.html">IOCCC News</a>
<a href="../../faq.html#submit">How to enter the IOCCC</a>
<a href="../../faq.html">FAQ</a>
</div>
<hr>
<div class="sidenav">
<a href="../../bugs.html">Bugs &amp; (mis)features</a>
<a href="../../faq.html#fix_an_entry">Fixing IOCCC entries</a>
<a href="../../faq.html#fix_web_site">Fixing the web site</a>
<a href="../../faq.html#fix_author">Fixing author info</a>
<a href="../../thanks-for-help.html">Thanks for the help</a>
</div>
<hr>
<div class="sidenav">
<a href="../../judges.html">The IOCCC Judges</a>
<a href="../../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 for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
<h1 id="first-third-almost-forth">FIRST &amp; THIRD (almost FORTH)</h1>
<p>FORTH is a language mostly familiar to users of “small” machines.
FORTH programs are small because they are interpreted–a function call in
FORTH takes two bytes. FORTH is an extendable language– built-in
primitives are indistinguishable from user-defined <em>words</em>. FORTH
interpreters are small because much of the system can be coded in
FORTH–only a small number of primitives need to be implemented. Some
FORTH interpreters can also compile defined words into machine code,
resulting in a fast system.</p>
<p>FIRST is an incredibly small language which is sufficient for
defining the language THIRD, which is mostly like FORTH. There are some
differences, and THIRD is probably just enough like FORTH for those
differences to be disturbing to regular FORTH users.</p>
<p>The only existing FIRST interpreter is written in obfuscated C, and
rings in at under 800 bytes of source code, although through deletion of
both whitespace and obfuscation it can be brought to about 650
bytes.</p>
<p>This document FIRST defines the FIRST environment and primitives,
with relevant design decision explanations. It secondly documents the
general strategies we will use to implement THIRD. The THIRD section
demonstrates how the complete THIRD system is built up using FIRST.</p>
<h2 id="section-1-first">Section 1: FIRST</h2>
<h3 id="environment">Environment</h3>
<p>FIRST implements a virtual machine. The machine has three chunks of
memory: “main memory”, “the stack”, and “string storage”. When the
virtual machine wishes to do random memory accesses, they come out of
main memory–it cannot access the stack or string storage.</p>
<p>The stack is simply a standard LIFO data structure that is used
implicitly by most of the FIRST primitives. The stack is made up of
<code>int</code>s, whatever size they are on the host machine.</p>
<p>String storage is used to store the names of built-in and defined
primitives. Separate storage is used for these because it allows the C
code to use C string operations, reducing C source code size.</p>
<p>Main memory is a large array of <code>int</code>s. When we speak of
addresses, we actually mean indices into main memory. Main memory is
used for two things, primarily: the return stack and the dictionary.</p>
<p>The return stack is a LIFO data structure, independent of the
above-mentioned “stack”, which is used by FIRST to keep track of
function call return addresses.</p>
<p>The dictionary is a list of words. Each word contains a header and a
data field. In the header is the address of the previous word, an index
into the string storage indicating where the name of this word is
stored, and a “code pointer”. The code pointer is simply an integer
which names which “machine-language-primitive” implements this
instruction. For example, for defined words the code pointer names the
“run some code” primitive, which pushes the current program counter onto
the return stack and sets the counter to the address of the data field
for this word.</p>
<p>There are several important pointers into main memory. There is a
pointer to the most recently defined word, which is used to start
searches back through memory when compiling words. There is a pointer to
the top of the return stack. There is a pointer to the current end of
the dictionary, used while compiling.</p>
<p>For the last two pointers, namely the return stack pointer and the
dictionary pointer, there is an important distinction: the pointers
themselves are stored in main memory (in <code>FIRST</code>’s main
memory). This is critical, because it means FIRST programs can get at
them without any further primitives needing to be defined.</p>
<h3 id="instructions">Instructions</h3>
<p>There are two kinds of FIRST instructions, normal instructions and
immediate instructions. Immediate instructions do something significant
when they are used. Normal instructions compile a pointer to their
executable part onto the end of the dictionary. As we will see, this
means that by default FIRST simply compiles things.</p>
<h4 id="integer-operations">Integer Operations</h4>
<pre><code>SYMBOL NAME FUNCTION
- binary minus pop top 2 elements of stack, subtract, push
* multiply pop top 2 elements of stack, multiply, push
/ divide pop top 2 elements of stack, divide, push
&lt;0 less than 0 pop top element of stack, push 1 if &lt; 0 else 0</code></pre>
<p>Note that we can synthesize addition and negation from binary minus,
but we cannot synthesize a time efficient divide or multiply from it.
<code>&lt;0</code> is synthesize-able, but only in a non-portable
way.</p>
<h4 id="memory-operations">Memory Operations</h4>
<pre><code>SYMBOL NAME FUNCTION
@ fetch pop top of stack, treat as address to push contents of
! store top of stack is address, 2nd is value; store to memory
and pop both off the stack</code></pre>
<h4 id="inputoutput-operations">Input/Output Operations</h4>
<pre><code>NAME FUNCTION
echo output top of stack through C&#39;s putchar()
key push C&#39;s getchar() onto top of stack
_read read a space-delimited word, find it in the
dictionary, and compile a pointer to
that word&#39;s code pointer onto the
current end of the dictionary</code></pre>
<p>Although <code>_read</code> could be synthesized from key, we need
<code>_read</code> to be able to compile words to be able to start any
syntheses.</p>
<h4 id="execution-operations">Execution Operations</h4>
<pre><code>NAME FUNCTION
exit leave the current function: pop the return stack
into the program counter</code></pre>
<h4 id="immediate-compilation-operations">Immediate (compilation)
Operations</h4>
<pre><code>SYMBOL NAME FUNCTION
: define read in the next space-delimited word, add it to
the end of our string storage, and generate
a header for the new word so that when it
is typed it compiles a pointer to itself
so that it can be executed.
immediate immediate when used immediately after a name following a &#39;:&#39;,
it makes the word being defined run whenever
it is typed.</code></pre>
<p><code>:</code> cannot be synthesized, because we could not synthesize
anything. <code>immediate</code> has to be an immediate operation, so it
could not be synthesized unless by default operations were immediate;
but that would preclude our being able to do any useful compilation.</p>
<h4 id="stack-operations">Stack Operations</h4>
<pre><code>NAME FUNCTION
pick pop top of stack, use as index into stack and copy up
that element</code></pre>
<p>If the data stack were stored in main memory, we could synthesize
<code>pick</code>; but putting the stack and stack pointer in main
memory would significantly increase the C source code size.</p>
<p>There are three more primitives, but they are “internal only”– they
have no names and no dictionary entries. The first is
<code>pushint</code>. It takes the next integer out of the instruction
stream and pushes it on the stack. This could be synthesized, but
probably not without using integer constants. It is generated by
<code>_read</code> when the input is not a known word. The second is
<code>compile me</code>. When this instruction is executed, a pointer to
the word’s data field is appended to the dictionary. The third is
<code>run me</code>–the word’s data field is taken to be a stream of
pointers to words, and is executed.</p>
<p>One last note about the environment: FIRST builds a very small word
internally that it executes as its main loop. This word calls
<code>_read</code> and then calls itself. Each time it calls itself, it
uses up a word on the return stack, so it will eventually trash things.
This is discussed some more in section 2.</p>
<p>Here’s a handy summary of all the FIRST words:</p>
<pre><code>WORD DESCRIPTION
- * / binary integer operations on the stack
&lt;0 is top of stack less than 0?
@ ! read from or write to memory
echo key output or input one character
_read read a word from input and compile a pointer to it
exit stop running the current function
: compile the header of a definition
immediate modify the header to create an immediate word</code></pre>
<p>Here is a sample FIRST program. I’m assuming you’re using the ASCII
character set. FIRST does not depend upon ASCII, but since FIRST has no
syntax for character constants, one normally has to use decimal values.
This can be avoided using <code>getchar(3)</code>, though. Oh. One other
odd thing. FIRST initially builds its symbol table by calling
<code>:</code> several times, so it needs to get the names of the base
symbols as its first 13 words of input. You could even name them
differently if you wanted.</p>
<p>These FIRST programs have FORTH comments in them: they are contained
inside parentheses. FIRST programs cannot have FORTH comments; but I
need some device to indicate what’s going on. (THIRD programs are an
entirely different subject.)</p>
<pre><code> ( Our first line gives the symbols for the built-ins )
: immediate _read @ ! - * / &lt;0 exit echo key _pick
( now we define a simple word that will print out a couple characters )
: L ( define a word named &#39;L&#39; )
108 echo ( output an ascii &#39;l&#39; )
exit
: hello ( define a word named &#39;hello&#39;)
72 echo ( output an ascii &#39;H&#39; )
101 echo ( output an ascii &#39;e&#39; )
111 ( push ascii &#39;o&#39; onto the stack )
L L ( output two ascii &#39;l&#39;s )
echo ( output the &#39;o&#39; we pushed on the stack before )
10 echo ( print a newline )
exit ( stop running this routine )
: test immediate ( define a word named &#39;test&#39; that runs whenever typed )
hello ( call hello )
exit
test
( The result of running this program should be:
Hello
)</code></pre>
<h2 id="section-2-motivating-third">Section 2: Motivating THIRD</h2>
<p>What is missing from FIRST? There are a large number of important
primitives that aren’t implemented, but which are easy to implement.
<code>drop</code>, which throws away the top of the stack, can be
implemented as <code>{ 0 * + }</code> – that is, multiply the top of the
stack by <code>0</code> (which turns the top of the stack into a
<code>0</code>), and then add the top two elements of the stack.</p>
<p><code>dup</code>, which copies the top of the stack, can be easily
implemented using temporary storage locations. Conveniently, FIRST
leaves memory locations <code>3</code>, <code>4</code>, and
<code>5</code> unused. So we can implement <code>dup</code> by writing
the top of stack into <code>3</code>, and then reading it out twice:
<code>{ 3 ! 3 @ 3 @ }</code>.</p>
<p>We will never use the FIRST primitive <code>pick</code> in building
THIRD, just to show that it can be done; <code>pick</code> is only
provided because <code>pick</code> itself cannot be built out of the
rest of <code>FIRST</code>’s building blocks.</p>
<p>So, instead of worrying about stack primitives and the like, what
else is missing from FIRST? We get recursion, but no control flow–no
conditional operations. We cannot at the moment write a looping routine
which terminates.</p>
<p>Another glaring dissimilarity between FIRST and FORTH is that there
is no “command mode”–you cannot be outside of a <code>:</code>
definition and issue some straight commands to be executed. Also, as we
noted above, we cannot do comments.</p>
<p>FORTH also provides a system for defining new data types, using the
words (in one version of FORTH) <code>builds and does</code>. We would
like to implement these words as well.</p>
<p>As the highest priority thing, we will build control flow structures
first. Once we have control structures, we can write recursive routines
that terminate, and we are ready to tackle tasks like parsing, and the
building of a command mode.</p>
<p>By the way, location <code>0</code> holds the dictionary pointer,
location <code>1</code> holds the return stack pointer, and location
<code>2</code> should always be <code>0</code>–it’s a fake dictionary
entry that means <code>pushint</code>.</p>
<h2 id="section-3-building-third">Section 3: Building THIRD</h2>
<p>In this section we’ll eventually have real comments.</p>
<p>The first thing we have to do is give the symbols for our
built-ins.</p>
<pre><code>: immediate _read @ ! - * / &lt; exit echo key _pick</code></pre>
<p>Next we want to be mildly self commenting, so we define the word
<code>r</code> to push the <em>address of the return stack pointer</em>
onto the stack–NOT the value of the return stack pointer. (In fact, when
we run <code>r</code>, the value of the return stack pointer is
temporarily changed.)</p>
<pre><code>: r 1 exit</code></pre>
<p>Next, we’re currently executing a short loop that contains
<code>_read</code> and recursion, which is slowly blowing up the return
stack. So let’s define a new word, from which you can never return. What
it does is drops the top value off the return stack, calls
<code>_read</code>, then calls itself. Because it kills the top of the
return stack, it can recurse indefinitely.</p>
<pre><code>: ]
r @ Get the value of the return stack pointer
1 - Subtract one
r ! Store it back into the return stack pointer
_read Read and compile one word
] Start over</code></pre>
<p>Notice that we don’t need to exit, since we never come back. Also,
it’s possible that an immediate word may get run during
<code>_read</code>, and that <code>_read</code> will never return!</p>
<p>Now let’s get compile running.</p>
<pre><code>: main immediate ]
main</code></pre>
<p>Next off, I’m going to do this the easy but non-portable way, and put
some character constant definitions in. I wanted them at the top of the
file, but that would have burned too much of the return stack.</p>
<pre><code>: &#39;&quot;&#39; 34 exit
: &#39;)&#39; 41 exit
: &#39;\n&#39; 10 exit
: &#39;space&#39; 32 exit
: &#39;0&#39; 48 exit
: &#39;-&#39; 45 exit
: cr &#39;\n&#39; echo exit</code></pre>
<p>Next, we want to define some temporary variables for locations
<code>3</code>, <code>4</code>, and <code>5</code>, since this’ll make
our code look clearer.</p>
<pre><code>: _x 3 @ exit
: _x! 3 ! exit
: _y 4 @ exit
: _y! 4 ! exit
</code></pre>
<p>OK. Now, we want to make THIRD look vaguely like FORTH, so we’re
going to define <code>;</code>. What <code>;</code> ought to do is
terminate a compilation, and turn control over to the command-mode
handler. We don’t have one, so all we want <code>;</code> to do for now
is compile <code>exit</code> at the end of the current word. To do this
we’ll need several other words.</p>
<p>Swap by writing out the top two elements into temps, and then reading
them back in the other order.</p>
<pre><code>: swap _x! _y! _x _y exit</code></pre>
<p>Take another look and make sure you see why that works, since it
LOOKS like I’m reading them back in the same order–in fact, it not only
looks like it, but I AM!</p>
<p>Addition might be nice to have. To add, we need to negate the top
element of the stack, and then subtract. To negate, we subtract from
<code>0</code>.</p>
<pre><code>: +
0 swap -
-
exit
</code></pre>
<p>Create a copy of the top of stack.</p>
<pre><code>: dup _x! _x _x exit</code></pre>
<p>Get a mnemonic name for our dictionary pointer–we need to compile
stuff, so it goes through this.</p>
<pre><code>: h 0 exit</code></pre>
<p>We’re going to need to advance that pointer, so let’s make a generic
pointer-advancing function. Given a pointer to a memory location,
increment the value at that memory location.</p>
<pre><code>: inc
dup @ Get another copy of the address, and get the value
so now we have value, address on top of stack.
1 + Add one to the value
swap Swap to put the address on top of the stack
! exit Write it to memory
</code></pre>
<p><code>,</code> is a standard FORTH word. It should write the top of
stack into the dictionary, and advance the pointer</p>
<pre><code>: ,
h @ Get the value of the dictionary pointer
! Write the top of stack there
h inc And increment the dictionary pointer
exit</code></pre>
<p><code>'</code> is a standard FORTH word. It should push the address
of the word that follows it onto the stack. We could do this by making
<code>'</code> immediate, but then it’d need to parse the next word.
Instead, we compile the next word as normal. When <code>'</code> is
executed, the top of the return stack will point into the instruction
stream immediately after the <code>'</code>. We push the word there, and
advance the return stack pointer so that we don’t execute it.</p>
<pre><code>: &#39;
r @ Get the address of the top of return stack
We currently have a pointer to the top of return stack
@ Get the value from there
We currently have a pointer to the instruction stream
dup Get another copy of it--the bottom copy will stick
around until the end of this word
1 + Increment the pointer, pointing to the NEXT instruction
r @ ! Write it back onto the top of the return stack
We currently have our first copy of the old pointer
to the instruction stream
@ Get the value there--the address of the &quot;next word&quot;
exit
</code></pre>
<p>Now we’re set. <code>;</code> should be an immediate word that pushes
the address of <code>exit</code> onto the stack, then writes it out.</p>
<pre><code>: ; immediate
&#39; exit Get the address of exit
, Compile it
exit And we should return</code></pre>
<p>Now let’s test out <code>;</code> by defining a useful word:</p>
<pre><code>: drop 0 * + ;</code></pre>
<p>Since we have <code>inc</code>, we ought to make
<code>dec</code>:</p>
<pre><code>: dec dup @ 1 - swap ! ;</code></pre>
<p>Our next goal, now that we have <code>;</code>, is to implement
<code>if-then</code>. To do this, we’ll need to play fast and loose with
the return stack, so let’s make some words to save us some effort.</p>
<p>First we want a word that pops off the top of the normal stack and
pushes it on top of the return stack. We’ll call this <code>tor</code>,
for TO-Return-stack. It sounds easy, but when <code>tor</code> is
running, there’s an extra value on the return stack–<code>tor</code>’s
return address! So we have to pop that off first… We better just bite
the bullet and code it out–but we can’t really break it into smaller
words, because that’ll trash the return stack.</p>
<pre><code>: tor
r @ @ Get the value off the top of the return stack
swap Bring the value to be pushed to the top of stack
r @ ! Write it over the current top of return stack
r @ 1 + r ! Increment the return stack pointer--but can&#39;t use inc
r @ ! Store our return address back on the return stack
;</code></pre>
<p>Next we want the opposite routine, which pops the top of the return
stack, and puts it on the normal stack.</p>
<pre><code>: fromr
r @ @ Save old value
r @ 1 - r ! Decrement pointer
r @ @ Get value that we want off
swap Bring return address to top
r @ ! Store it and return
;</code></pre>
<p>Now, if we have a routine that’s recursing, and we want to be polite
about the return stack, right before we recurse we can run
<code>{ fromr drop }</code> so the stack won’t blow up. This means,
though, that the first time we enter this recursive routine, we blow our
<em>real</em> return address–so when we’re done, we’ll return up two
levels. To save a little, we make <code>tail</code> mean
<code>{ fromr drop }</code>; however, it’s more complex since there’s a
new value on top of the return stack.</p>
<pre><code>: tail fromr fromr drop tor ;</code></pre>
<p>Now, we want to do <code>if</code>. To do this, we need to convert
values to boolean values. The next few words set this up.</p>
<p><code>minus</code> gives us unary negation.</p>
<pre><code>: minus 0 swap - ;</code></pre>
<p>If top of stack is boolean, <code>bnot</code> gives us inverse</p>
<pre><code>: bnot 1 swap - ;</code></pre>
<p>To compare two numbers, subtract and compare to <code>0</code>.</p>
<pre><code>: &lt; - &lt;0 ;</code></pre>
<p><code>logical</code> turns the top of stack into either
<code>0</code> or <code>1</code>.</p>
<pre><code>: logical
dup Get two copies of it
0 &lt; 1 if &lt; 0, 0 otherwise
swap minus Swap number back up, and take negative
0 &lt; 1 if original was &gt; 0, 0 otherwise
+ Add them up--has to be 0 or 1!
;</code></pre>
<p><code>not</code> returns 1 if top of stack is 0, and 0 otherwise</p>
<pre><code>: not logical bnot ;</code></pre>
<p>We can test equality by subtracting and comparing to
<code>0</code>.</p>
<pre><code>: = - not ;</code></pre>
<p>Just to show how you compute a branch: Suppose you’ve compiled a call
to branch, and immediately after it is an integer constant with the
offset of how far to branch. To branch, we use the return stack to read
the offset, and add that on to the top of the return stack, and
return.</p>
<pre><code>: branch
r @ Address of top of return stack
@ Our return address
@ Value from there: the branch offset
r @ @ Our return address again
+ The address we want to execute at
r @ ! Store it back onto the return stack
;</code></pre>
<p>For conditional branches, we want to branch by a certain amount if
true, otherwise we want to skip over the branch offset constant–that is,
branch by one. Assuming that the top of the stack is the branch offset,
and the second on the stack is <code>1</code> if we should branch, and
<code>0</code> if not, the following computes the correct branch
offset.</p>
<pre><code>: computebranch 1 - * 1 + ;</code></pre>
<p>Branch if the value on top of the stack is <code>0</code>.</p>
<pre><code>: notbranch
not
r @ @ @ Get the branch offset
computebranch Adjust as necessary
r @ @ + Calculate the new address
r @ ! Store it
;</code></pre>
<p><code>here</code> is a standard FORTH word which returns a pointer to
the current dictionary address–that is, the value of the dictionary
pointer.</p>
<pre><code>: here h @ ;</code></pre>
<p>We’re ALL SET to compile <code>if...else...then</code> constructs!
Here’s what we do. When we get <code>if</code>, we compile a call to
<code>notbranch</code>, and then compile a dummy offset, because we
don’t know where the <code>then</code> will be. On the <em>stack</em> we
leave the address where we compiled the dummy offset. <code>then</code>
will calculate the offset and fill it in for us.</p>
<pre><code>: if immediate
&#39; notbranch , Compile notbranch
here Save the current dictionary address
0 , Compile a dummy value
;</code></pre>
<p><code>then</code> expects the address to <code>fixup</code> to be on
the stack.</p>
<pre><code>: then immediate
dup Make another copy of the address
here Find the current location, where to branch to
swap - Calculate the difference between them
swap ! Bring the address to the top, and store it.
;</code></pre>
<p>Now that we can do <code>if...then</code> statements, we can do some
parsing! Let’s introduce real FORTH comments. <code>find-)</code> will
scan the input until it finds a <code>)</code>, and exit.</p>
<pre><code>: find-)
key Read in a character
&#39;)&#39; = Compare it to close parentheses
not if If it&#39;s not equal
tail find-) repeat (popping R stack)
then Otherwise branch here and exit
;
: ( immediate
find-)
;
( we should be able to do FORTH-style comments now )
( now that we&#39;ve got comments, we can comment the rest of the code
in a legitimate [self parsing] fashion. Note that you can&#39;t
nest parentheses... )
: else immediate
&#39; branch , ( compile a definite branch )
here ( push the backpatching address )
0 , ( compile a dummy offset for branch )
swap ( bring old backpatch address to top )
dup here swap - ( calculate the offset from old address )
swap ! ( put the address on top and store it )
;
: over _x! _y! _y _x _y ;
: add
_x! ( save the pointer in a temp variable )
_x @ ( get the value pointed to )
+ ( add the incremement from on top of the stack )
_x ! ( and save it )
;
: allot h add ;
: maybebranch
logical ( force the TOS to be 0 or 1 )
r @ @ @ ( load the branch offset )
computebranch ( calculate the condition offset [either TOS or 1])
r @ @ + ( add it to the return address )
r @ ! ( store it to our return address and return )
;
: mod _x! _y! ( get x then y off of stack )
_y _y _x / _x * ( y - y / x * x )
-
;
: printnum
dup
10 mod &#39;0&#39; +
swap 10 / dup
if
printnum
echo
else
drop
echo
then
;
: .
dup 0 &lt;
if
&#39;-&#39; echo minus
then
printnum
&#39;space&#39; echo
;
: debugprint dup . cr ;
( the following routine takes a pointer to a string, and prints it,
except for the trailing quote. returns a pointer to the next word
after the trailing quote )
: _print
dup 1 +
swap @
dup &#39;&quot;&#39; =
if
drop exit
then
echo
tail _print
;
: print _print ;
( print the next thing from the instruction stream )
: immprint
r @ @
print
r @ !
;
: find-&quot;
key dup ,
&#39;&quot;&#39; =
if
exit
then
tail find-&quot;
;
: &quot; immediate
key drop
&#39; immprint ,
find-&quot;
;
: do immediate
&#39; swap , ( compile &#39;swap&#39; to swap the limit and start )
&#39; tor , ( compile to push the limit onto the return stack )
&#39; tor , ( compile to push the start on the return stack )
here ( save this address so we can branch back to it )
;
: i r @ 1 - @ ;
: j r @ 3 - @ ;
: &gt; swap &lt; ;
: &lt;= 1 + &lt; ;
: &gt;= swap &lt;= ;
: inci
r @ 1 - ( get the pointer to i )
inc ( add one to it )
r @ 1 - @ ( find the value again )
r @ 2 - @ ( find the limit value )
&lt;=
if
r @ @ @ r @ @ + r @ ! exit ( branch )
then
fromr 1 +
fromr drop
fromr drop
tor
;
: loop immediate &#39; inci @ here - , ;
: loopexit
fromr drop ( pop off our return address )
fromr drop ( pop off i )
fromr drop ( pop off the limit of i )
; ( and return to the caller&#39;s caller routine )
: execute
8 !
&#39; exit 9 !
8 tor
;
: :: ; ( :: is going to be a word that does &#39;:&#39; at runtime )
: fix-:: immediate 3 &#39; :: ! ;
fix-::
( Override old definition of &#39;:&#39; with a new one that invokes ] )
: : immediate :: ] ;
: command
here 5 ! ( store dict pointer in temp variable )
_read ( compile a word )
( if we get control back: )
here 5 @
= if
tail command ( we didn&#39;t compile anything )
then
here 1 - h ! ( decrement the dictionary pointer )
here 5 @ ( get the original value )
= if
here @ ( get the word that was compiled )
execute ( and run it )
else
here @ ( else it was an integer constant, so push it )
here 1 - h ! ( and decrement the dictionary pointer again )
then
tail command
;
: make-immediate ( make a word just compiled immediate )
here 1 - ( back up a word in the dictionary )
dup dup ( save the pointer to here )
h ! ( store as the current dictionary pointer )
@ ( get the run-time code pointer )
swap ( get the dict pointer again )
1 - ( point to the compile-time code pointer )
! ( write run-time code pointer on compile-time pointer )
;
: &lt;build immediate
make-immediate ( make the word compiled so far immediate )
&#39; :: , ( compile &#39;::&#39;, so we read next word )
2 , ( compile &#39;pushint&#39; )
here 0 , ( write out a 0 but save address for does&gt; )
&#39; , , ( compile a push that address onto dictionary )
;
: does&gt; immediate
&#39; command , ( jump back into command mode at runtime )
here swap ! ( backpatch the build&gt; to point to here )
2 , ( compile run-code primitive so we look like a word )
&#39; fromr , ( compile fromr, which leaves var address on stack )
;
: _dump ( dump out the definition of a word, sort of )
dup &quot; (&quot; . &quot; , &quot;
dup @ ( save the pointer and get the contents )
dup &#39; exit
= if
&quot; ;)&quot; cr exit
then
. &quot; ), &quot;
1 +
tail _dump
;
: dump _dump ;
: # . cr ;
: var &lt;build , does&gt; ;
: constant &lt;build , does&gt; @ ;
: array &lt;build allot does&gt; + ;
: [ immediate command ;
: _welcome &quot; Welcome to THIRD.
Ok.
&quot; ;
: ; immediate &#39; exit , command exit
[
_welcome</code></pre>
<!-- 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 -->
<!-- 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=#">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 -->
+8 -5
View File
@@ -333,9 +333,9 @@ https://creativecommons.org/licenses/by-sa/4.0/</p>
<h1 id="inventory-for-1992buzzard.2"><a name="inventory"></a>Inventory
for 1992/buzzard.2</h1>
<p><a href="#top">Jump to top</a></p>
<h2 id="primary-files">Primary files</h2>
<ul>
<li><a href="index.html">index.html</a> - entry home page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/buzzard.2/buzzard.2.c">buzzard.2.c</a>
- entry source</li>
@@ -350,9 +350,8 @@ href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/buzzard.2/bu
- original source</li>
<li><a href="buzzard.2.README.html">buzzard.2.README.html</a> - author
description of files</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/buzzard.2/buzzard.2.design.md">buzzard.2.design.md</a>
- about the FORTH language</li>
<li><a href="buzzard.2.design.html">buzzard.2.design.html</a> - about
the FORTH language</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/buzzard.2/try.alt.sh">try.alt.sh</a>
- how to run alternative code</li>
@@ -391,6 +390,7 @@ download entry source</li>
</ul>
<h2 id="secondary-files">Secondary files</h2>
<ul>
<li><a href="index.html">index.html</a> - entry home page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/buzzard.2/.entry.json">.entry.json</a>
- description of entry in JSON</li>
@@ -403,7 +403,10 @@ href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/buzzard.2/RE
- markdown source for index.html</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/buzzard.2/buzzard.2.README.md">buzzard.2.README.md</a>
- markdown source for cannibalism.log.html</li>
- markdown source for buzzard.2.README.html</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/buzzard.2/buzzard.2.design.md">buzzard.2.design.md</a>
- markdown source for buzzard.2.design.html</li>
</ul>
<!-- END: next line ends content generated by: bin/output-index-inventory.sh -->
+8 -8
View File
@@ -9,14 +9,6 @@
{ "author_handle" : "Andreas_Gustafsson" }
],
"manifest" : [
{
"file_path" : "index.html",
"inventory_order" : 10,
"OK_to_edit" : false,
"display_as" : "html",
"display_via_github" : false,
"entry_text" : "entry home page"
},
{
"file_path" : "gson.c",
"inventory_order" : 20,
@@ -65,6 +57,14 @@
"display_via_github" : false,
"entry_text" : "download entry source"
},
{
"file_path" : "index.html",
"inventory_order" : 2000000000,
"OK_to_edit" : false,
"display_as" : "html",
"display_via_github" : false,
"entry_text" : "entry home page"
},
{
"file_path" : ".entry.json",
"inventory_order" : 4294967295,
+2 -1
View File
@@ -348,9 +348,9 @@ https://creativecommons.org/licenses/by-sa/4.0/</p>
<h1 id="inventory-for-1992gson"><a name="inventory"></a>Inventory for
1992/gson</h1>
<p><a href="#top">Jump to top</a></p>
<h2 id="primary-files">Primary files</h2>
<ul>
<li><a href="index.html">index.html</a> - entry home page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/gson/gson.c">gson.c</a>
- entry source</li>
@@ -371,6 +371,7 @@ source</li>
</ul>
<h2 id="secondary-files">Secondary files</h2>
<ul>
<li><a href="index.html">index.html</a> - entry home page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/gson/.entry.json">.entry.json</a>
- description of entry in JSON</li>
+8 -8
View File
@@ -9,14 +9,6 @@
{ "author_handle" : "Ian_Collier" }
],
"manifest" : [
{
"file_path" : "index.html",
"inventory_order" : 10,
"OK_to_edit" : false,
"display_as" : "html",
"display_via_github" : false,
"entry_text" : "entry home page"
},
{
"file_path" : "imc.c",
"inventory_order" : 20,
@@ -57,6 +49,14 @@
"display_via_github" : false,
"entry_text" : "download entry source"
},
{
"file_path" : "index.html",
"inventory_order" : 2000000000,
"OK_to_edit" : false,
"display_as" : "html",
"display_via_github" : false,
"entry_text" : "entry home page"
},
{
"file_path" : ".entry.json",
"inventory_order" : 4294967295,
+2 -1
View File
@@ -277,9 +277,9 @@ https://creativecommons.org/licenses/by-sa/4.0/</p>
<h1 id="inventory-for-1992imc"><a name="inventory"></a>Inventory for
1992/imc</h1>
<p><a href="#top">Jump to top</a></p>
<h2 id="primary-files">Primary files</h2>
<ul>
<li><a href="index.html">index.html</a> - entry home page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/imc/imc.c">imc.c</a>
- entry source</li>
@@ -297,6 +297,7 @@ source</li>
</ul>
<h2 id="secondary-files">Secondary files</h2>
<ul>
<li><a href="index.html">index.html</a> - entry home page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/imc/.entry.json">.entry.json</a>
- description of entry in JSON</li>
+16 -20
View File
@@ -205,28 +205,24 @@ Entries of 1992 - The 9th IOCCC</h1>
<p><strong>Download IOCCC</strong> <a
href="1992/ioccc.1992.tar.bz2">1992 entry source</a></p>
<ul>
<li><a href="1992/adrian/index.html">1992/adrian</a> - Most
Educational</li>
<li><a href="1992/albert/index.html">1992/albert</a> - Most Useful
<li><a href="adrian/index.html">1992/adrian</a> - Most Educational</li>
<li><a href="albert/index.html">1992/albert</a> - Most Useful
Program</li>
<li><a href="1992/ant/index.html">1992/ant</a> - Best Utility</li>
<li><a href="1992/buzzard.1/index.html">1992/buzzard.1</a> - Most
Obfuscated Algorithm</li>
<li><a href="1992/buzzard.2/index.html">1992/buzzard.2</a> - Best
Language Tool</li>
<li><a href="1992/gson/index.html">1992/gson</a> - Most Humorous
Output</li>
<li><a href="1992/imc/index.html">1992/imc</a> - Best Output</li>
<li><a href="1992/kivinen/index.html">1992/kivinen</a> - Best X
Program</li>
<li><a href="1992/lush/index.html">1992/lush</a> - Worst Abuse of the C
<li><a href="ant/index.html">1992/ant</a> - Best Utility</li>
<li><a href="buzzard.1/index.html">1992/buzzard.1</a> - Most Obfuscated
Algorithm</li>
<li><a href="buzzard.2/index.html">1992/buzzard.2</a> - Best Language
Tool</li>
<li><a href="gson/index.html">1992/gson</a> - Most Humorous Output</li>
<li><a href="imc/index.html">1992/imc</a> - Best Output</li>
<li><a href="kivinen/index.html">1992/kivinen</a> - Best X Program</li>
<li><a href="lush/index.html">1992/lush</a> - Worst Abuse of the C
Preprocessor</li>
<li><a href="1992/marangon/index.html">1992/marangon</a> - Best
Game</li>
<li><a href="1992/nathan/index.html">1992/nathan</a> - Worst Abuse of
the Rules</li>
<li><a href="1992/vern/index.html">1992/vern</a> - Best of Show</li>
<li><a href="1992/westley/index.html">1992/westley</a> - Best Small
<li><a href="marangon/index.html">1992/marangon</a> - Best Game</li>
<li><a href="nathan/index.html">1992/nathan</a> - Worst Abuse of the
Rules</li>
<li><a href="vern/index.html">1992/vern</a> - Best of Show</li>
<li><a href="westley/index.html">1992/westley</a> - Best Small
Program</li>
</ul>
<p> <strong>Jump to:</strong> <a href="#">top</a></p>
+8 -8
View File
@@ -9,14 +9,6 @@
{ "author_handle" : "Tero_Kivinen" }
],
"manifest" : [
{
"file_path" : "index.html",
"inventory_order" : 10,
"OK_to_edit" : false,
"display_as" : "html",
"display_via_github" : false,
"entry_text" : "entry home page"
},
{
"file_path" : "kivinen.c",
"inventory_order" : 20,
@@ -57,6 +49,14 @@
"display_via_github" : false,
"entry_text" : "download entry source"
},
{
"file_path" : "index.html",
"inventory_order" : 2000000000,
"OK_to_edit" : false,
"display_as" : "html",
"display_via_github" : false,
"entry_text" : "entry home page"
},
{
"file_path" : ".entry.json",
"inventory_order" : 4294967295,
+2 -1
View File
@@ -239,9 +239,9 @@ https://creativecommons.org/licenses/by-sa/4.0/</p>
<h1 id="inventory-for-1992kivinen"><a name="inventory"></a>Inventory for
1992/kivinen</h1>
<p><a href="#top">Jump to top</a></p>
<h2 id="primary-files">Primary files</h2>
<ul>
<li><a href="index.html">index.html</a> - entry home page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/kivinen/kivinen.c">kivinen.c</a>
- entry source</li>
@@ -259,6 +259,7 @@ entry source</li>
</ul>
<h2 id="secondary-files">Secondary files</h2>
<ul>
<li><a href="index.html">index.html</a> - entry home page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/kivinen/.entry.json">.entry.json</a>
- description of entry in JSON</li>
+8 -8
View File
@@ -9,14 +9,6 @@
{ "author_handle" : "Ed_Luke" }
],
"manifest" : [
{
"file_path" : "index.html",
"inventory_order" : 10,
"OK_to_edit" : false,
"display_as" : "html",
"display_via_github" : false,
"entry_text" : "entry home page"
},
{
"file_path" : "lush.c",
"inventory_order" : 20,
@@ -57,6 +49,14 @@
"display_via_github" : false,
"entry_text" : "download entry source"
},
{
"file_path" : "index.html",
"inventory_order" : 2000000000,
"OK_to_edit" : false,
"display_as" : "html",
"display_via_github" : false,
"entry_text" : "entry home page"
},
{
"file_path" : ".entry.json",
"inventory_order" : 4294967295,
+2 -1
View File
@@ -158,9 +158,9 @@ https://creativecommons.org/licenses/by-sa/4.0/</p>
<h1 id="inventory-for-1992lush"><a name="inventory"></a>Inventory for
1992/lush</h1>
<p><a href="#top">Jump to top</a></p>
<h2 id="primary-files">Primary files</h2>
<ul>
<li><a href="index.html">index.html</a> - entry home page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/lush/lush.c">lush.c</a>
- entry source</li>
@@ -178,6 +178,7 @@ source</li>
</ul>
<h2 id="secondary-files">Secondary files</h2>
<ul>
<li><a href="index.html">index.html</a> - entry home page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/lush/.entry.json">.entry.json</a>
- description of entry in JSON</li>
+8 -8
View File
@@ -9,14 +9,6 @@
{ "author_handle" : "Andrea_Marangoni" }
],
"manifest" : [
{
"file_path" : "index.html",
"inventory_order" : 10,
"OK_to_edit" : false,
"display_as" : "html",
"display_via_github" : false,
"entry_text" : "entry home page"
},
{
"file_path" : "marangon.c",
"inventory_order" : 20,
@@ -49,6 +41,14 @@
"display_via_github" : false,
"entry_text" : "download entry source"
},
{
"file_path" : "index.html",
"inventory_order" : 2000000000,
"OK_to_edit" : false,
"display_as" : "html",
"display_via_github" : false,
"entry_text" : "entry home page"
},
{
"file_path" : ".entry.json",
"inventory_order" : 4294967295,
+2 -1
View File
@@ -165,9 +165,9 @@ https://creativecommons.org/licenses/by-sa/4.0/</p>
<h1 id="inventory-for-1992marangon"><a name="inventory"></a>Inventory
for 1992/marangon</h1>
<p><a href="#top">Jump to top</a></p>
<h2 id="primary-files">Primary files</h2>
<ul>
<li><a href="index.html">index.html</a> - entry home page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/marangon/marangon.c">marangon.c</a>
- entry source</li>
@@ -182,6 +182,7 @@ entry source</li>
</ul>
<h2 id="secondary-files">Secondary files</h2>
<ul>
<li><a href="index.html">index.html</a> - entry home page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/marangon/.entry.json">.entry.json</a>
- description of entry in JSON</li>
+8 -8
View File
@@ -9,14 +9,6 @@
{ "author_handle" : "Nathan_Sidwell" }
],
"manifest" : [
{
"file_path" : "index.html",
"inventory_order" : 10,
"OK_to_edit" : false,
"display_as" : "html",
"display_via_github" : false,
"entry_text" : "entry home page"
},
{
"file_path" : "nathan.c",
"inventory_order" : 20,
@@ -57,6 +49,14 @@
"display_via_github" : false,
"entry_text" : "download entry source"
},
{
"file_path" : "index.html",
"inventory_order" : 2000000000,
"OK_to_edit" : false,
"display_as" : "html",
"display_via_github" : false,
"entry_text" : "entry home page"
},
{
"file_path" : ".entry.json",
"inventory_order" : 4294967295,
+2 -1
View File
@@ -229,9 +229,9 @@ https://creativecommons.org/licenses/by-sa/4.0/</p>
<h1 id="inventory-for-1992nathan"><a name="inventory"></a>Inventory for
1992/nathan</h1>
<p><a href="#top">Jump to top</a></p>
<h2 id="primary-files">Primary files</h2>
<ul>
<li><a href="index.html">index.html</a> - entry home page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/nathan/nathan.c">nathan.c</a>
- entry source</li>
@@ -249,6 +249,7 @@ entry source</li>
</ul>
<h2 id="secondary-files">Secondary files</h2>
<ul>
<li><a href="index.html">index.html</a> - entry home page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/nathan/.entry.json">.entry.json</a>
- description of entry in JSON</li>
+8 -8
View File
@@ -9,14 +9,6 @@
{ "author_handle" : "Vern_Paxson" }
],
"manifest" : [
{
"file_path" : "index.html",
"inventory_order" : 10,
"OK_to_edit" : false,
"display_as" : "html",
"display_via_github" : false,
"entry_text" : "entry home page"
},
{
"file_path" : "vern.c",
"inventory_order" : 20,
@@ -49,6 +41,14 @@
"display_via_github" : false,
"entry_text" : "download entry source"
},
{
"file_path" : "index.html",
"inventory_order" : 2000000000,
"OK_to_edit" : false,
"display_as" : "html",
"display_via_github" : false,
"entry_text" : "entry home page"
},
{
"file_path" : ".entry.json",
"inventory_order" : 4294967295,
+2 -1
View File
@@ -270,9 +270,9 @@ https://creativecommons.org/licenses/by-sa/4.0/</p>
<h1 id="inventory-for-1992vern"><a name="inventory"></a>Inventory for
1992/vern</h1>
<p><a href="#top">Jump to top</a></p>
<h2 id="primary-files">Primary files</h2>
<ul>
<li><a href="index.html">index.html</a> - entry home page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/vern/vern.c">vern.c</a>
- entry source</li>
@@ -287,6 +287,7 @@ source</li>
</ul>
<h2 id="secondary-files">Secondary files</h2>
<ul>
<li><a href="index.html">index.html</a> - entry home page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/vern/.entry.json">.entry.json</a>
- description of entry in JSON</li>
+8 -8
View File
@@ -9,14 +9,6 @@
{ "author_handle" : "Brian_Westley" }
],
"manifest" : [
{
"file_path" : "index.html",
"inventory_order" : 10,
"OK_to_edit" : false,
"display_as" : "html",
"display_via_github" : false,
"entry_text" : "entry home page"
},
{
"file_path" : "westley.c",
"inventory_order" : 20,
@@ -97,6 +89,14 @@
"display_via_github" : false,
"entry_text" : "download entry source"
},
{
"file_path" : "index.html",
"inventory_order" : 2000000000,
"OK_to_edit" : false,
"display_as" : "html",
"display_via_github" : false,
"entry_text" : "entry home page"
},
{
"file_path" : ".entry.json",
"inventory_order" : 4294967295,
+2 -1
View File
@@ -267,9 +267,9 @@ https://creativecommons.org/licenses/by-sa/4.0/</p>
<h1 id="inventory-for-1992westley"><a name="inventory"></a>Inventory for
1992/westley</h1>
<p><a href="#top">Jump to top</a></p>
<h2 id="primary-files">Primary files</h2>
<ul>
<li><a href="index.html">index.html</a> - entry home page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/westley/westley.c">westley.c</a>
- entry source</li>
@@ -302,6 +302,7 @@ entry source</li>
</ul>
<h2 id="secondary-files">Secondary files</h2>
<ul>
<li><a href="index.html">index.html</a> - entry home page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1992/westley/.entry.json">.entry.json</a>
- description of entry in JSON</li>