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

755 lines
29 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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>2001/kev - Best curses game</title>
<link rel="icon" type="image/x-icon" href="../../favicon.ico">
<meta name="description" content="2001 IOCCC entry kev - Best curses game">
<meta name="keywords" content="IOCCC, 2001, IOCCC 2001, IOCCC entry, kev, Best curses game">
</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: 2001/kev/README.md -->
<!-- -->
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<!-- !!! Do not modify this web page, instead modify the file: 2001/kev/README.md !!! -->
<!-- !!! Do not modify this web page, instead modify the file: 2001/kev/README.md !!! -->
<!-- !!! Do not modify this web page, instead modify the file: 2001/kev/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>2001/kev - Best curses game</h2>
<h3>A Pong game across network</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="../jason/index.html">&larr; 2001/jason</a>
<a class="Left" href="../index.html">&uarr; 2001 &uarr;</a>
<a class="Left" href="../ollinger/index.html">2001/ollinger &rarr;</a>
<a class="Right" href="https://github.com/ioccc-src/winner/blob/master/2001/kev/kev.c">C code</a>
<a class="Right" href="https://github.com/ioccc-src/winner/blob/master/2001/kev/Makefile">Makefile</a>
<a class="Right" href="#inventory">Inventory</a>
<a class="Right" href="https://github.com/ioccc-src/winner/blob/master/2001/kev/kev.orig.c">Original C</a>
<a class="Right" href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fwww.ioccc.org%2F2001%2Fkev%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#Kevin_Pulo">Kevin Pulo</a><br>
Location: <a href="../../location.html#AU">AU</a> - <em>Commonwealth of Australia</em> (<em>Australia</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: 2001/kev/README.md -->
<h2 id="to-build">To build:</h2>
<pre><code> make</code></pre>
<p>There is another version which lets you use the arrow keys rather than the more
awkward <code>,</code> and <code>.</code> keys. See <a href="#alternate-code">Alternate code</a> below.</p>
<h3 id="bugs-and-misfeatures">Bugs and (Mis)features:</h3>
<p>The current status of this entry is:</p>
<blockquote>
<p><strong>STATUS: INABIAF - please DO NOT fix</strong></p>
</blockquote>
<p>For more detailed information see <a href="../../bugs.html#2001_kev">2001/kev in bugs.html</a>.</p>
<h2 id="to-use">To use:</h2>
<pre><code> ./kev # in one terminal
./kev hostname # in another terminal</code></pre>
<p><strong>NOTE</strong>: each player’s paddle is at the bottom and the opponent at the top.</p>
<h2 id="try">Try:</h2>
<pre><code> ./kev # in one terminal
./kev localhost # in another terminal on the same host</code></pre>
<p>If you need to change the speed you can reconfigure it like (say
for over a network and not the same host):</p>
<pre><code> make clobber SPEED=50 all # original default value which is very fast</code></pre>
<p>If you wish to change the port you can do so like:</p>
<pre><code> make clobber PORT=3773 all</code></pre>
<p>Of course if you want a port &lt; 1024 you’ll need to be root so don’t do that.</p>
<p>And if you know what you’re doing you can redefine the call to the <code>socket(2)</code>
syscall with the <code>l_</code> macro, changing the <code>L</code> variable like one would <code>PORT</code>. Of
course you can do more than one at the same time. For instance to change the
speed and port:</p>
<pre><code> make clobber SPEED=512 PORT=3773 all</code></pre>
<p>If you have <code>xterm</code> try on one system:</p>
<pre><code> xterm -geometry 80x40 -fg green -bg black -fn 9x15bold -e ./kev &amp;</code></pre>
<p>and then the other, the client system:</p>
<pre><code> xterm -geometry 80x40 -fg green -bg black -fn 9x15bold -e ./kev localhost&amp;</code></pre>
<p>This might look nicer than just the terminal itself.</p>
<h2 id="alternate-code">Alternate code:</h2>
<p>This version allows you to use arrow keys on the keyboard rather than the more
awkward <code>,</code> and <code>.</code> keys to move your paddle.</p>
<h3 id="alternate-build">Alternate build:</h3>
<pre><code> make alt</code></pre>
<p>You can reconfigure the macros described above in the same way.</p>
<h3 id="alternate-use">Alternate use:</h3>
<p>Use <code>kev.alt</code> as you would <code>kev</code>.</p>
<p>What happens if you use both, one in one terminal and the other in another
terminal?</p>
<h3 id="alternate-try">Alternate try:</h3>
<p>If you have <code>xterm</code> try on one system:</p>
<pre><code> xterm -geometry 80x40 -fg green -bg black -fn 9x15bold -e ./kev.alt &amp;</code></pre>
<p>and then the other, the client system:</p>
<pre><code> xterm -geometry 80x40 -fg green -bg black -fn 9x15bold -e ./kev.alt localhost&amp;</code></pre>
<h2 id="judges-remarks">Judges’ remarks:</h2>
<p>Continuing with this year’s “retro game” theme, this is another old game;
arguably, one of the oldest. Requires a functioning network, and curses.</p>
<p>The graphics aren’t the impressive part; the graphics and network are.
How many games come out at $50 and still require you to wait for a patch
to come out before you can play multiplayer? This one works out of the
box.</p>
<h2 id="authors-remarks">Author’s remarks:</h2>
<p><strong>NETWORK PONG!</strong></p>
<h3 id="requirements">REQUIREMENTS</h3>
<ul>
<li>TCP sockets</li>
<li>curses</li>
<li><code>usleep(3)</code></li>
</ul>
<h3 id="description">DESCRIPTION</h3>
<p>This program is a two-player networked version of the eighties arcade classic,
<a href="https://en.wikipedia.org/wiki/Pong">Pong</a>. It uses standard TCP sockets to
communicate over the net, and <code>ncurses</code> for display. It supports variable
terminal sizes (though both players must have the same terminal size) and game
speeds. Each player has a paddle to hit the ball, and you get points for
getting the ball past your opponent’s paddle. It’s pretty fun! :)</p>
<h3 id="running">RUNNING</h3>
<p>Run the server first without any command line arguments, i.e.</p>
<pre><code> ./kev</code></pre>
<p>Then run the client with a single command line argument which is
the name of the machine running the server, e.g.</p>
<pre><code> ./kev localhost</code></pre>
<p>Make sure that the terminals on both ends are the same size. Also, the TCP port
number (by default 5455) specified in the <a href="https://github.com/ioccc-src/winner/blob/master/2001/kev/Makefile">Makefile</a> mustn’t be
blocked by a firewall.</p>
<p>Here’s a good quick example to see it in action on your own
machine, assuming you have <code>Xwindows</code>:</p>
<pre><code> xterm -geometry 80x40 -fg green -bg black -fn 9x15bold -e ./kev &amp;
xterm -geometry 80x40 -fg green -bg black -fn 9x15bold -e ./kev localhost&amp;</code></pre>
<h3 id="playing">PLAYING</h3>
<p>Your paddle is the one at the bottom of the screen, your opponent
is at the top. To move your paddle left, hold down <code>,</code> (i.e. <code>&lt;</code>
but don’t press shift). To move your paddle right, hold down <code>.</code>.
To quit, either player may press <code>q</code>.</p>
<p>The current score is shown on the left side of the halfway line.
Your score is the lower number, your opponents score is the upper
number. Your score is the number of times your opponent has
missed the ball.</p>
<p>You can control the speed of the ball by the motion of your paddle
when the ball hits it. If your paddle is still, then the ball
just bounces normally off it. If your paddle is moving in the
same direction as the ball, then the ball’s speed in that
direction will increase. If your paddle is moving in the opposite
direction to the ball, then the ball’s speed in that direction
will decrease (or if the ball is going slowly enough, it’ll turn
around).</p>
<p>You might want to increase your keyboard repeat rate before
playing. On the Linux console try <code>kbdrate -r 24.0 -d 250</code>
(<code>kbdrate</code> might be “hidden” from normal users in <code>/sbin</code>, and you
might need to be root anyway), in <code>Xwindows</code> try <code>xset r rate 250 24</code> (find out your current rate first with <code>xset q</code>, so that you
can reset it later).</p>
<p>Look below in the Building section for info on how to speed up or
slow down the game (useful if you increase or decrease the
terminal size).</p>
<h3 id="building">BUILDING</h3>
<p>Just run <code>make</code> to use the Makefile as above. The <code>SPEED</code> variable in the
Makefile controls the speed of the game (defaults to <code>50</code>). This speed is the
delay between frames in milliseconds. Thus a value of 0 will make the game go
as fast as your network can handle, and values less than 50 are useful for
larger terminals or more exciting games. The program needs bandwidth equal to
1/s bytes per second (where <code>s</code> is the speed value). Any latency on the network
will be added to <code>s</code> - so you should probably subtract any latency from the
value of <code>s</code> you want to have. Given that <code>loopback</code> and fast Ethernet LANs are
both much less than 1ms of latency, you should only need to worry about this if
you plan on playing over a slower link like a cable modem, DSL, or (God-forbid)
dial-up.</p>
<p>The TCP port to use for network communications is specified by the
<code>PORT</code> variable in the Makefile. If the default of <code>5455</code> is
blocked for whatever reason, you can change it to something else.
Of course if you use a port &lt; 1024, you’ll need to be root.</p>
<h3 id="obfuscation">OBFUSCATION</h3>
<p>The program’s broad structure is fairly straightforward, but
individual tasks are rarely done in a straightforward manner. ;)</p>
<p>Identifier names have mostly been chosen to resemble paddles and
balls, and to generally decrease readability.</p>
<p>The source has been cleverly formatted to resemble one of the
paddles from the game, rotated 90 degrees. ;) (The “source
paddle” has approximately the same aspect ratio as the game at 80
columns wide, which is 1:10.)</p>
<p>Finally, the number of “non-whitespace characters” (as defined by
the rules) in the file is exactly 2048, which I think is rather
unexpectedly cool. :)</p>
<h3 id="bugs">BUGS</h3>
<p>There are 3 warnings when I compile with gcc 2.95.3 (<code>-Wall -ansi -pedantic</code>) on my Linux system, but all are completely harmless.</p>
<p>I don’t like the curses and/or termcaps/terminfos on IRIX and
Solaris (the only two non-Linux systems I have access to).
Despite calling <code>timeout(0);</code>, <code>notimeout(win, TRUE);</code>, <code>nodelay(win, TRUE);</code> and/or <code>keypad(win, FALSE);</code>, it still seems to force a delay
into calls to <code>getch()</code> - I’m guessing at a termcap/terminfo level.
At any rate, I can’t seem to force no delay. This is a shame,
because it basically plays havoc with the input code, particularly
the read-ahead canceller. It still works, but not nearly as well
(key presses are dodgy and holding down keys doesn’t always work),
and so I <em>much</em> prefer and recommend Linux <code>libncurses</code>.</p>
<p>Sometimes when <code>q</code> is pressed in one, the other will crash out
with <code>Broken pipe</code>.</p>
<p>If the specified port can’t be bound or connected to, the program
segfaults.</p>
<p>If your terminal is too wide (we’re talking gigantic here - over
500 characters wide) then the program can segfault. It’s also
possible to crash the program a player scores over a billion
points (1e9). Maybe you can consider that the goal… ;)</p>
<p>If you run the client and server on different architectures, both
architectures need to have the same character systems (i.e. don’t
try mixing ASCII and EBCDIC). It is independent of endianness
though.</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: 2001/kev/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-2001kev">Inventory for 2001/kev</h1>
</div>
<h2 id="primary-files">Primary files</h2>
<ul>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2001/kev/kev.c">kev.c</a> - entry source code</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2001/kev/Makefile">Makefile</a> - entry Makefile</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2001/kev/kev.alt.c">kev.alt.c</a> - alternate source code</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2001/kev/kev.orig.c">kev.orig.c</a> - original source code</li>
</ul>
<h2 id="secondary-files">Secondary files</h2>
<ul>
<li><a href="2001_kev.tar.bz2">2001_kev.tar.bz2</a> - download entry tarball</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2001/kev/README.md">README.md</a> - markdown source for this web page</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2001/kev/.entry.json">.entry.json</a> - entry summary and manifest in JSON</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2001/kev/.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/2001/kev/.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%2F2001%2Fkev%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 -->