It should be 'Location of winning authors' (as it is now) but by mistake
there was an extra space ('Location of winning authors'). Obviously
this is a huge commit as every html file with a menu (almost all) had to
be updated.
720 lines
29 KiB
HTML
720 lines
29 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>2000/dlowe - Worst abuse of the rules</title>
|
||
<link rel="icon" type="image/x-icon" href="../../favicon.ico">
|
||
<meta name="description" content="2000 IOCCC entry dlowe - Worst abuse of the rules">
|
||
<meta name="keywords" content="IOCCC, 2000, IOCCC 2000, IOCCC entry, dlowe, Worst abuse of the rules">
|
||
</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: 2000/dlowe/README.md -->
|
||
<!-- -->
|
||
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: 2000/dlowe/README.md !!! -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: 2000/dlowe/README.md !!! -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: 2000/dlowe/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 winning authors
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../bugs.html" class="sub-item-link">
|
||
Bugs and (mis)features
|
||
</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">
|
||
IOCCC 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/index.html" class="sub-item-link">
|
||
Rules and Guidelines
|
||
</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">
|
||
FAQ
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../faq.html#submit" class="sub-item-link">
|
||
How to enter the IOCCC
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../faq.html#fix_an_entry" class="sub-item-link">
|
||
Fixing IOCCC entries
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../faq.html#fix_web_site" class="sub-item-link">
|
||
Fixing the website
|
||
</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">
|
||
About
|
||
</span>
|
||
|
||
<div class="sub-item">
|
||
<div class="outfit-font">
|
||
<a href="../../index.html" class="sub-item-link">
|
||
IOCCC Home
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../judges.html" class="sub-item-link">
|
||
The IOCCC Judges
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../contact.html" class="sub-item-link">
|
||
Contacting the IOCCC
|
||
</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="../../markdown.html" class="sub-item-link">
|
||
IOCCC markdown guidelines
|
||
</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">
|
||
Authors of winning IOCCC entries
|
||
</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>
|
||
|
||
</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="../../status.html">
|
||
Contest status
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../next/index.html">
|
||
Rules and Guidelines
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../news.html">
|
||
IOCCC News
|
||
</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="../../faq.html#submit">
|
||
How to enter the IOCCC
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../faq.html#fix_an_entry">
|
||
Fixing IOCCC entries
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../faq.html#fix_web_site">
|
||
Fixing the website
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../faq.html#fix_author">
|
||
Fixing author info
|
||
</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">
|
||
IOCCC Home
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../judges.html">
|
||
The IOCCC Judges
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../contact.html">
|
||
Contacting the IOCCC
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../thanks-for-help.html">
|
||
Thanks for the help
|
||
</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>2000/dlowe - Worst abuse of the rules</h2>
|
||
</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="../dhyang/index.html">← dhyang</a>
|
||
<a class="Left" href="../index.html">↑ 2000 ↑</a>
|
||
<a class="Left" href="../jarijyrki/index.html">jarijyrki →</a>
|
||
<a class="Right" href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2000/dlowe/dlowe.c">C code</a>
|
||
<a class="Right" href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2000/dlowe/Makefile">Makefile</a>
|
||
<a class="Right" href="#inventory">Inventory</a>
|
||
<a class="Right" href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fioccc-src.github.io%2Ftemp-test-ioccc%2F2000%2Fdlowe%2Findex.html">✓</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#J_David_Lowe">J. David Lowe</a><br>
|
||
Location: <a href="../../location.html#US">US</a> - <em>United States of America</em> (<em>United States</em>)</li>
|
||
</ul>
|
||
|
||
<!-- END: next line ends content generated by: bin/output-index-author.sh -->
|
||
|
||
<!-- END: this line ends content for HTML phase 20 by: bin/output-index-author.sh via bin/md2html.sh -->
|
||
<!-- START: this line starts content for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
|
||
|
||
<!-- BEFORE: 1st line of markdown file: 2000/dlowe/README.md -->
|
||
<h2 id="to-build">To build:</h2>
|
||
<pre><code> make</code></pre>
|
||
<p>The following bit of perl may help determine the values you need:</p>
|
||
<pre><code> perl -MConfig -e 'print "$Config{archlibexp}/CORE\n"'</code></pre>
|
||
<p>… just in case the Makefile does not figure this out for you.</p>
|
||
<h3 id="bugs-and-misfeatures">Bugs and (Mis)features:</h3>
|
||
<p>The current status of this entry is:</p>
|
||
<pre><code> STATUS: known bug - please help us fix
|
||
STATUS: INABIAF - please **DO NOT** fix</code></pre>
|
||
<p>For more detailed information see <a href="../../bugs.html#2000_dlowe">2000/dlowe in bugs.html</a>.</p>
|
||
<h2 id="to-use">To use:</h2>
|
||
<pre><code> ./dlowe [file ...]</code></pre>
|
||
<h2 id="try">Try:</h2>
|
||
<pre><code> ./try.sh</code></pre>
|
||
<h2 id="judges-remarks">Judges’ remarks:</h2>
|
||
<p>When this entry was submitted the rules of the IOCCC did not prohibit
|
||
the use of embedded language interpreters. The judges considered
|
||
disqualifying this entry because of the use of perl, but on the other
|
||
hand it qualifies as the Worst Abuse of the Rules. As a previous author,
|
||
<a href="../../authors.html#J_David_Lowe">David Lowe</a> continues to inflict the highest quality “poot” on the
|
||
Judges.</p>
|
||
<p>The program also contains an undocumented command for Chad and Chongo (Landon).
|
||
The judges’ remarks contain a clue to the hidden command :-).</p>
|
||
<ul>
|
||
<li>The IOCCC uses an anonymous judging process which keeps the identity
|
||
of the submitters hidden until all winning entries have been selected.</li>
|
||
</ul>
|
||
<h2 id="authors-remarks">Author’s remarks:</h2>
|
||
<h3 id="usage">Usage</h3>
|
||
<pre><code> ./dlowe [file ...]</code></pre>
|
||
<h3 id="synopsis">Synopsis</h3>
|
||
<p>This is a <a href="https://en.wikipedia.org/wiki/Reverse_Polish_notation">Reverse Polish
|
||
calculator</a>, loosely
|
||
based on the <code>dc(1)</code> unix calculator.</p>
|
||
<h1 id="syntax">Syntax</h1>
|
||
<p>This program understands the following <code>dc(1)</code> commands:</p>
|
||
<pre><code> p prints the top stack value without altering the stack.
|
||
P prints the top stack value, removing it from the stack, and
|
||
doesn't print a trailing newline.
|
||
f prints the contents of the stack, one number per line,
|
||
without modifying it.
|
||
c clears the stack.
|
||
d pushes a copy of the top stack value onto the stack.
|
||
r reverses the order of the top two stack values.</code></pre>
|
||
<p>And the following arithmetic operators are supported:</p>
|
||
<pre><code> + Pops 2 values and pushes their sum.
|
||
- Pops 2 values and pushes the result of subtracting the first
|
||
from the second.
|
||
* Pops 2 values and pushes their product.
|
||
/ Pops 2 values and pushes the result of dividing the second
|
||
by the first.
|
||
^ Pops 2 values and pushes the result of raising the second
|
||
to the power of the first.
|
||
% Pops 2 values and pushes the remainder of the division that
|
||
/ would do.</code></pre>
|
||
<p>The precision and range are double, like it or not, except that the
|
||
modulus operator actually returns <code>(p1 - (p2 * (p1 / p2)))</code>, but with
|
||
the innermost division calculated at integer precision. This is
|
||
usually what you expect (e.g. <code>echo "12 8 % p" | ./dlowe == 4</code>)</p>
|
||
<p>Commands are read from <code>stdin</code> or from a list of files named on
|
||
the command line. Unlike <code>dc(1)</code>, multiple commands on the same line
|
||
must be space separated. Commands are only executed when a newline
|
||
or EOF is encountered.</p>
|
||
<h3 id="diagnostics">Diagnostics:</h3>
|
||
<pre><code> "stack empty" Not enough on the stack for the requested command
|
||
"divide by zero" Attempt to divide by zero
|
||
"unimplemented" Invalid input
|
||
|
||
Floating point exception (core dumped) (or something to that effect)
|
||
Bug in Perl_sv_upgrade causes this in some cases when
|
||
the results of an operation are really huge (> 10^308)
|
||
This bug appears to be fixed in perl5.6.0</code></pre>
|
||
<h3 id="examples">Examples:</h3>
|
||
<pre><code> $ echo '12 13 14 15 16 + + + + f' | ./dlowe
|
||
70
|
||
$ echo '12 13 14 15 16 17 + - * / p' | ./dlowe
|
||
-0.0515873015873016
|
||
$ echo '+' | ./dlowe
|
||
stack empty
|
||
$ echo '999999999999999 1 + p' | ./dlowe
|
||
1e+15
|
||
$ echo '99999999999999 1 + p' | ./dlowe
|
||
100000000000000
|
||
$ echo '12.5 9 % 10 * 15 + f' | ./dlowe
|
||
50
|
||
$ echo '7 P 6 d P P 8 p' | ./dlowe | tr 876 tpo
|
||
poot</code></pre>
|
||
<h3 id="code-concept">Code Concept:</h3>
|
||
<p>We all know that Perl and other VHLLs (very high level languages)
|
||
are particularly well-suited for (among other things) string
|
||
handling, I/O, and powerful built-in data types, and (relatively)
|
||
poorly suited for number crunching and other processor-intensive
|
||
tasks - areas where C is strongest. This program takes this
|
||
knowledge to its extreme conclusion, using each language for its
|
||
strengths. Thus, it uses Perl to read and parse input, for output,
|
||
and for the easy-to-use list primitive, and uses C for mathematical
|
||
operations. Since the rules of this contest state that the program
|
||
must be generated by an ANSI C compiler, of course, the outer Perl
|
||
layer is wrapped with a thin layer of C.</p>
|
||
<p>In case that wasn’t clear, in a nutshell: this program is C, calling
|
||
embedded Perl (contained in a C string), which in turn calls back to
|
||
C, which performs math on Perl data types and calls Perl functions for
|
||
error reporting.</p>
|
||
<h3 id="requirements">Requirements:</h3>
|
||
<p>Unfortunately, Perl is an evolving beast - that includes the
|
||
embedding API and the XS API. The code was developed under
|
||
<code>Perl 5.005_03</code>, successfully tested against <code>Perl 5.6.0</code>, <code>Perl 5.005_02</code>
|
||
and <code>Perl 5.004_04</code>, and according to the version delta documentation,
|
||
should work as-is with <code>Perl 5.002</code> and later (which has been around
|
||
since February 1996). To clarify - it’s not the Perl code itself
|
||
that may be non-portable, it’s the C code for embedding Perl and for
|
||
calling C from Perl.</p>
|
||
<p>It is also important that Perl be installed cleanly and correctly.
|
||
You may have problems linking if, for example, you have multiple
|
||
overlapping versions of Perl installed (which might not be a problem
|
||
for scripts, but causes problems with embedding the interpreter).
|
||
More commonly, you may get non-fatal warnings from the linker, caused
|
||
by slight mis-configurations of Perl on your system.</p>
|
||
<p>Some compilers also complain that “third argument of <code>main()</code> is
|
||
deprecated” or something to that effect. But in Perl prior to
|
||
<code>5.6.0</code>, the header file “proto.h” actually had a prototype for <code>main()</code>, so
|
||
applications which embed Perl must use the three argument form of <code>main()</code>.</p>
|
||
<h3 id="aside-history">Aside: history…</h3>
|
||
<p>Larry Wall wrote the original Perl in 1986-87, the same two successive
|
||
years he won the IOCCC. I hope this program helps you to realize that
|
||
this was no fluke - that Perl and Obfuscation are as inseparable as,
|
||
say, camels and humps.</p>
|
||
<h3 id="obfuscated">Obfuscated?</h3>
|
||
<ul>
|
||
<li><p>Reverse Polish notation is pretty strange, in and of itself.</p></li>
|
||
<li><p>The layout of the program is three roughly symmetrical “stacks”
|
||
of code. This layout is quite sensitive in places - my C indenter
|
||
actually breaks the code by inserting spaces in certain places.</p></li>
|
||
<li><p>Anyone who has ever programmed in Perl can attest to the fact that
|
||
it is particularly well-suited to obfuscation; thus, the Perl is
|
||
obfuscated. (Here’s my favorite legal Perl from this program:
|
||
<code>_:$_=<>;</code> - but <code>$SS[$#SS]-=$SS[$#SS-1]</code> isn’t bad, either).</p></li>
|
||
<li><p>I’ve eschewed traditional branch and loop structures such as
|
||
<code>if</code> and <code>for</code>, in favor of their oft-neglected cousins, <code>goto</code>
|
||
and <code>?:</code>, in both the Perl and C code.</p></li>
|
||
<li><p>I’ve used some highly magical Perl incantations, such as symbolic
|
||
references, the <code>goto &NAME</code> syntax, <code>AUTOLOAD</code> for exception handling,
|
||
and abuse of the default scalar (<code>$_</code>).</p></li>
|
||
<li><p>I’ve also deliberately used Perl syntax that is very much unlike
|
||
C syntax: the <code>&NAME</code> rather than <code>NAME()</code> function calling syntax,
|
||
leaving off parentheses wherever possible, using <code>print()</code> instead
|
||
of <code>printf()</code>, and using the English style logic operators <code>and</code> and
|
||
<code>or</code> rather than <code>&&</code> and <code>||</code>, for example.</p></li>
|
||
<li><p>The fact that all the Perl code is in double-quotes doesn’t lend
|
||
any readability to the regular expressions and quoted strings
|
||
therein.</p></li>
|
||
<li><p>The points and ways in which C and Perl connect are <em>really</em>
|
||
obscure. They’re also incredibly poorly documented, as they’re
|
||
primarily used in machine-generated code. However, there’s a
|
||
wealth of example code on <a href="https://www.cpan.org">CPAN</a>.</p></li>
|
||
<li><p>The Perl API functions are almost all macros, so you will probably
|
||
find that preprocessor expansion will only make things worse. They
|
||
also have helpful, verbose names like <code>SvNV</code>, <code>SvIV</code>, and <code>newSVpv</code>. I
|
||
couldn’t have done better myself!</p></li>
|
||
<li><p>Figuring out how the mathematical C functions get called is a bit
|
||
tricky. Note the lack of explicit switching based on command
|
||
input.</p></li>
|
||
<li><p>Because of the “interesting” way that commands are interpreted,
|
||
all of the commands have synonyms. For example, if you find it
|
||
easier to remember, <code>=</code> is synonymous with <code>d</code>. This also makes it
|
||
possible to write (even more) obfuscated reverse Polish commands
|
||
(I figure this explanation moves the synonyms from ‘bug’ to
|
||
‘feature’!)</p></li>
|
||
</ul>
|
||
<p>. The first IOCCC entry with an “easter egg”?…</p>
|
||
<h3 id="aside-on-unobfuscated-perl">Aside: on unobfuscated Perl</h3>
|
||
<p>My original intent was to write obfuscated C and crystal-clear Perl,
|
||
to highlight my bending of the rules. Unfortunately, Perl really
|
||
doesn’t lend itself to crystal-clear code…</p>
|
||
<h3 id="bending-the-rules">Bending the rules?</h3>
|
||
<p>Well, the rules never state that you can’t embed another programming
|
||
language, but on the other hand, knowing Perl probably isn’t high on
|
||
the list of qualifications for judges… Oh dear, I guess your C
|
||
beautifier won’t help too much, either ;)</p>
|
||
<p>If you don’t change the rules, it’ll be embedded Ada next year!</p>
|
||
<h3 id="auto-defend">Auto defend</h3>
|
||
<p>A. Isn’t this the obfuscated C contest? What’s this Perl <code>$#_&&$_</code>?</p>
|
||
<p>D. Hey, this program <em>is</em> 100% C, and does not exec an external Perl
|
||
interpreter. It simply links against the Perl language library.
|
||
The “Perl code” is just a C string constant.</p>
|
||
<p>A. Perl isn’t portable enough, or ubiquitous enough.</p>
|
||
<p>D. I’d argue that it is more portable than X. According to the Perl
|
||
folks, it runs on the following platforms: Acorn, AIX, Amiga, AS/400,
|
||
BeOS, Concurrent, Debian, DEC OSF/1, Digital UNIX, EPOC, FreeBSD,
|
||
Guardian, HP-UX, IRIX, LinuxPPC, LynxOS, MacOS, MachTen, Minix, MPE/iX,
|
||
MS-DOS, MVS, NetBSD, Netware, NextStep, OpenBSD, OpenLinux, ODT, OpenVMS,
|
||
OS/2, OS390, OSR, PowerMAX, Psion, QNX, Redhat, Reliant UNIX, RISCOS,
|
||
SCO, SGI, SINIX, Slackware, Solaris, Sun, SuSE, Tandem, Tru64, UNIX,
|
||
U/WIN, Unixware, VMS, Win31, Win32, Windows 3.1, and Windows 95/98/NT/2K.
|
||
Granted, embeddable Perl isn’t quite so portable, but still…</p>
|
||
<p>Also, Perl 5 is bundled with the following OS distributions: AIX 4.3.3+,
|
||
FreeBSD 3.0+, IRIX 6.4+, every Linux distribution, NetBSD, OpenBSD, and
|
||
DEC Tru64 5.0+, again according to the Perl people.</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: 2000/dlowe/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-2000dlowe">Inventory for 2000/dlowe</h1>
|
||
</div>
|
||
<h2 id="primary-files">Primary files</h2>
|
||
<ul>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2000/dlowe/dlowe.c">dlowe.c</a> - entry source code</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2000/dlowe/Makefile">Makefile</a> - entry Makefile</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2000/dlowe/dlowe.orig.c">dlowe.orig.c</a> - original source code</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2000/dlowe/try.sh">try.sh</a> - script to try entry</li>
|
||
</ul>
|
||
<h2 id="secondary-files">Secondary files</h2>
|
||
<ul>
|
||
<li><a href="2000_dlowe.tar.bz2">2000_dlowe.tar.bz2</a> - download entry tarball</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2000/dlowe/README.md">README.md</a> - markdown source for this web page</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2000/dlowe/.entry.json">.entry.json</a> - entry summary and manifest in JSON</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2000/dlowe/.gitignore">.gitignore</a> - list of files that should not be committed under git</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2000/dlowe/.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-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/
|
||
|
||
-->
|
||
|
||
<div class="footer">
|
||
|
||
<div id="copyright"><h3>Copyright © 1984-2024 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%2Fioccc-src.github.io%2Ftemp-test-ioccc%2F2000%2Fdlowe%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 -->
|