Prepare for the winners of **IOCCC28**. > However these are not the 2024 droids you are looking for. :-) The HTML menu (both JavaScript and non-JavaScript) has been updated. The `Status -> Rules and guidelines' have been replaced with two separate menus `Status -> IOCCC rules` and `Status -> IOCCC guidelines`. Added a new top level `social.html` page: built from a new `social.md`. Sorted rules for building specific web pages in the top level `Makefile`. Added `make social` to make the `social.html` page from `social.md`. The `bin/gen-top-html.sh` now is able to process a argument of **social** to process the new top level `social.html` page. Changed `bin/gen-top-html.sh` VERSION from "2.0.0 2025-03-13" to "2.0.1 2025-07-25". Below `About -> Home page` a new `About -> IOCCC social media` menu item as added. Because the menu change touched every HTML file, we changed the general copyright date range for HTML files from "1984-2024" to "1984-2025" due to the extensive changes made for **IOCCC28**. Those markdown files that were modified in 2025 had their copyright date range also changed from "1984-2024" to "1984-2025". Rebuilt tarballs and sitemap due to the extensive HTML rebuilding. Ran `make update` to perform the above.
644 lines
22 KiB
HTML
644 lines
22 KiB
HTML
<!DOCTYPE html>
|
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
<!-- START: two lines up starts content from: inc/top.default.html -->
|
|
|
|
<!-- END: this line ends content from: inc/top.default.html -->
|
|
<!-- START: this line starts content from: inc/head.default.html -->
|
|
|
|
<head>
|
|
<link rel="stylesheet" href="../../ioccc.css">
|
|
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap" rel="stylesheet">
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
|
<title>The International Obfuscated C Code Contest</title>
|
|
<link rel="icon" type="image/x-icon" href="../../favicon.ico">
|
|
<meta name="description" content="shapiro.md for 1994/shapiro">
|
|
<meta name="keywords" content="IOCCC, 1994/shapiro, shapiro.md">
|
|
</head>
|
|
|
|
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
|
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
|
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
|
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
|
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
|
|
|
<!-- END: this line ends content from: inc/head.default.html -->
|
|
|
|
<!-- -->
|
|
<!-- This web page was formed via the tool: bin/gen-other-html.sh -->
|
|
<!-- The content of main section of this web page came from: 1994/shapiro/shapiro.md -->
|
|
<!-- -->
|
|
|
|
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
|
<!-- !!! Do not modify this web page, instead modify the file: 1994/shapiro/shapiro.md !!! -->
|
|
<!-- !!! Do not modify this web page, instead modify the file: 1994/shapiro/shapiro.md !!! -->
|
|
<!-- !!! Do not modify this web page, instead modify the file: 1994/shapiro/shapiro.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>shapiro.html for 1994/shapiro</h2>
|
|
</div>
|
|
|
|
<!-- END: this line ends content from: inc/header.default.html -->
|
|
<!-- START: this line starts content from: inc/navbar.up2index.html -->
|
|
|
|
<div class="navbar">
|
|
<a class="Left" href="index.html">↑ jump to 1994/shapiro/index.html ↑</a>
|
|
<a class="Right" href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fwww.ioccc.org%2F1994%2Fshapiro%2Fshapiro.html">✓</a>
|
|
</div>
|
|
|
|
<!-- END: this line ends content from: inc/navbar.up2index.html -->
|
|
<!-- START: this line starts content from: inc/before-content.default.html -->
|
|
|
|
<div class="content" id="content">
|
|
|
|
<!-- END: this line ends content from: inc/before-content.default.html -->
|
|
<!-- START: this line starts content for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
|
|
|
|
<!-- BEFORE: 1st line of markdown file: 1994/shapiro/shapiro.md -->
|
|
<h1 id="hints">HINTS</h1>
|
|
<p>For the first program, <a href="https://github.com/ioccc-src/winner/blob/master/1994/shapiro/shapiro.c">shapiro.c</a>:</p>
|
|
<p>This is a very simple program:</p>
|
|
<pre><code> 1. #include <stdio.h>
|
|
2. main()
|
|
3. {
|
|
4. int K,L,M=0;
|
|
5. FILE *J;
|
|
6. J=fopen(__FILE__,"r");
|
|
7. for(;
|
|
8. (L=getc(J))>=0;
|
|
9. L>='J'&&L<='J'+15 &&
|
|
10. ((M=!M)?K=L:putchar(K-'J'|(L-'J'<<4)))
|
|
11. );
|
|
12. exit(0);}</code></pre>
|
|
<p>Lines 1-5 are basic stuff. Line 6 opens the source code for input. Line 7 is the
|
|
loop. Line 8 reads in each character in the file (placed in <code>L</code>) while not >= 0.
|
|
Line 9 is an <code>if</code> expression which filters out all characters not between <code>J</code>
|
|
and <code>J + 15</code>. Line 10 uses <code>M</code> to execute two different paths; the first just
|
|
stores the character in <code>K</code> and the second path combines the last two characters
|
|
read in as high and low nibbles of a byte and outputs them. In effect this is a
|
|
very poor ASCII to binary decoder. The last line is necessary so that make will
|
|
not stop when it executes this program.</p>
|
|
<p>The second program is encoded into this format and then included (mostly)
|
|
as a comment.</p>
|
|
<p>Notice that it is impossible to write this program while leaving 16
|
|
contiguous ASCII characters free for the encoding. Because of this the
|
|
second program is mostly included as a comment. However, some of the
|
|
characters of the encoded program are also source code for the decoder.</p>
|
|
<h3 id="for-the-second-program-with-time.h">For the second program (with time.h):</h3>
|
|
<pre><code> 1 #include <stdio.h>
|
|
2 #include <time.h>
|
|
3 #define o(j,k,m,n,l) {fprintf(j,a[k],m,n,a[l]);fflush(j);}
|
|
4 char *a[]={"%c+------------+\n","%c+%3d %-8s+\n","seconds","minutes",
|
|
5 "hours","%s\n","\0337\033[%d;65;H%s\0338"};
|
|
6 int b[]={0,0,17,14,11,0};
|
|
7 main(v,c)
|
|
8 int v;
|
|
9 char ** c;
|
|
10 {
|
|
11 char d[40],*e,f=6;
|
|
12 time_t g;
|
|
13 FILE *h,*i;
|
|
14 while (--f && !pipe(d) && !fork());
|
|
15 h=fdopen(6-f<<1,"a");
|
|
16 i=fdopen((6-f<<1)+1,"r");
|
|
17 for(;;){
|
|
18 if(f){
|
|
19 fgets(d,40,i);
|
|
20 d[strlen(d)-1]='\0';
|
|
21 if(*d=='0'+f){ sprintf(*c,"%s\n",d+1); o(stdout,6,6-f,d+1,0) }
|
|
22 if(*d>'0'+f) o(h,5,d,0,0)
|
|
23 }else{
|
|
24 time(&g);
|
|
25 e=asctime(localtime(&g));
|
|
26 for(v=1;v<6;v++) o(h,v!=1&&v!=6-1,v+'0',atoi(e+b[v]),v)
|
|
27 sleep(1);
|
|
28 }}}</code></pre>
|
|
<p>Lines 1 and 2 have to be there. Think of <code>o</code> in line 3 as send message with
|
|
<code>j</code>,<code>k</code> and <code>m</code> as where, format and what. Lines 4 and 5 are all the text
|
|
strings. Line 6 is the offsets into the time string for the hours, minutes and
|
|
seconds. Lines 7-13 are basic stuff. Line 14 is the crux of the biscuit. 14
|
|
forks off <code>f</code> (6) processes each of which is connected to the ones above and
|
|
below it with a Unix pipe. It was too difficult to recover the actual FD numbers
|
|
for the pipe ends in line 14 so I regenerate them and <code>fdopen()</code> them (for use
|
|
with the standard C library functions) on lines 15 and 16. Now we have six
|
|
almost identical processes each of which has two files open, <code>h</code> and <code>i</code> (up and
|
|
down). The only difference in each process is the value of <code>f</code> (<code>0 <= f < 6</code>).
|
|
The five processes where <code>f !=0</code> are the slave processes and <code>f == 0</code> is the
|
|
master. Line 17 says we are going to do this forever. Lines 18 and 23
|
|
differentiate between the master and the slaves.</p>
|
|
<p>Lines 19 to 22 are the slave code. Here we read in a line of text from
|
|
<code>i</code> (down, line 19) and remove the newline char (line 20). On line
|
|
21 if this message is for us (if the first character is our number, <code>f</code>,
|
|
in ASCII) we do two things:</p>
|
|
<ol type="1">
|
|
<li>We copy the text of the message to <code>*c</code> which is really <code>argv[0]</code>. If you are
|
|
on the correct flavor of Unix this will change the output of the <code>ps(1)</code> command
|
|
to the string we just put there.</li>
|
|
<li>We send the message (not including the number) to <code>stdout</code> with format number 6
|
|
(<code>"\0337\033[%d;65;H%s\0338"</code>) If you can read VTxxx (and I read books printed
|
|
as ANSI/VTxxx codes for fun :-) ) you know this is the sequence for:</li>
|
|
</ol>
|
|
<blockquote>
|
|
<p>remember where we are,<br>
|
|
go somewhere else,<br>
|
|
print the message,<br>
|
|
and return to where we started.</p>
|
|
</blockquote>
|
|
<p>Line 22 says if this message is not for us (the number is bigger than ours)
|
|
send it to <code>h</code> (up).</p>
|
|
<p>Lines 24 to 27 are the master code. Here we get the time and convert it
|
|
to an ASCII format (lines 24 and 25). Then on line 26 we build and send
|
|
each of the messages for the slaves. The message uses a different control
|
|
string for the different slaves. For the first and last slave the message
|
|
text is just <code>"%c+------------+\n"</code> (slave number, text, newline.) For the
|
|
other slaves it is <code>"%c+%3d %-8s+\n"</code> (slave number, number, units, newline).
|
|
The slave number is <code>v+'0'</code>. The number (if used) is <code>atoi(e+b[v])</code> and the
|
|
units are just the string in the slave number position.</p>
|
|
<hr style="width:10%;text-align:left;margin-left:0">
|
|
<p>Jump to: <a href="#">top</a></p>
|
|
<!--
|
|
|
|
Copyright © 1984-2024 by Landon Curt Noll. All Rights Reserved.
|
|
|
|
You are free to share and adapt this file under the terms of this license:
|
|
|
|
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
|
|
|
For more information, see:
|
|
|
|
https://creativecommons.org/licenses/by-sa/4.0/
|
|
|
|
-->
|
|
<!-- AFTER: last line of markdown file: 1994/shapiro/shapiro.md -->
|
|
|
|
<!-- END: this line ends content for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
|
|
<!-- START: this line starts content from: inc/after-content.default.html -->
|
|
|
|
</div>
|
|
|
|
<!-- END: this line ends content from: inc/after-content.default.html -->
|
|
<!-- START: this line starts content from: inc/footer.default.html -->
|
|
|
|
<!--
|
|
|
|
Copyright © 1984-2025 by Landon Curt Noll. All Rights Reserved.
|
|
|
|
You are free to share and adapt this file under the terms of this license:
|
|
|
|
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
|
|
|
For more information, see:
|
|
|
|
https://creativecommons.org/licenses/by-sa/4.0/
|
|
|
|
-->
|
|
|
|
<div class="footer">
|
|
|
|
<div id="copyright"><h3>Copyright © 1984-2025 by Landon Curt Noll:
|
|
<a href="https://creativecommons.org/faq/#what-does-some-rights-reserved-mean"
|
|
target="_blank"
|
|
rel="license noopener noreferrer">Some Rights Reserved</a></h3>
|
|
<p>
|
|
This work is <b>licensed by Landon Curt Noll</b> under
|
|
<b><a href="https://creativecommons.org/licenses/by-sa/4.0/?ref=chooser-v1"
|
|
target="_blank"
|
|
rel="license noopener noreferrer"
|
|
style="display:inline-block;">CC BY-SA 4.0</a></b>.
|
|
<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
|
|
src="../../png/cc.png"
|
|
alt="cc inside circle symbol">
|
|
<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
|
|
src="../../png/by.png"
|
|
alt="person inside circle symbol">
|
|
<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
|
|
src="../../png/sa.png"
|
|
alt="arrow looping back on itself inside circle symbol"><br>
|
|
You should <b>carefully review</b> the
|
|
<b><a href="https://creativecommons.org/licenses/by-sa/4.0/legalcode.en"
|
|
target="_blank"
|
|
rel="license noopener noreferrer">CC BY-SA 4.0 LEGAL CODE</a></b>
|
|
before using the licensed material.<br>
|
|
You may wish to review the
|
|
<b><a href="../../license.html"
|
|
target="_blank"
|
|
rel="license noopener noreferrer">highlights of some of the key features and terms</a></b>
|
|
of <b>CC BY-SA 4.0</b>.<br>
|
|
</p>
|
|
</div>
|
|
|
|
<div id="coda"><h3>Coda</h3>
|
|
<p>
|
|
<a href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fwww.ioccc.org%2F1994%2Fshapiro%2Fshapiro.html" rel="nofollow">Nu HTML check this web page</a><br>
|
|
<a href="#top">Jump to top</a> <a href="#content">Jump to Content</a>
|
|
</p>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<!-- END: this line ends content from: inc/footer.default.html -->
|
|
<!-- START: this line starts content from: inc/bottom.default.html -->
|
|
|
|
</body>
|
|
</html>
|
|
|
|
<!-- END: this line ends content from: inc/bottom.default.html -->
|