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.
753 lines
32 KiB
HTML
753 lines
32 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>1991/brnstnd - Best of Show</title>
|
||
<link rel="icon" type="image/x-icon" href="../../favicon.ico">
|
||
<meta name="description" content="1991 IOCCC entry brnstnd - Best of Show">
|
||
<meta name="keywords" content="IOCCC, 1991, IOCCC 1991, IOCCC entry, brnstnd, Best of Show">
|
||
</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: 1991/brnstnd/README.md -->
|
||
<!-- -->
|
||
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: 1991/brnstnd/README.md !!! -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: 1991/brnstnd/README.md !!! -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: 1991/brnstnd/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>1991/brnstnd - Best of Show</h2>
|
||
<h3>sorta stack language</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="../ant/index.html">← 1991/ant</a>
|
||
<a class="Left" href="../index.html">↑ 1991 ↑</a>
|
||
<a class="Left" href="../buzzard/index.html">1991/buzzard →</a>
|
||
<a class="Right" href="https://github.com/ioccc-src/winner/blob/master/1991/brnstnd/brnstnd.c">C code</a>
|
||
<a class="Right" href="https://github.com/ioccc-src/winner/blob/master/1991/brnstnd/Makefile">Makefile</a>
|
||
<a class="Right" href="#inventory">Inventory</a>
|
||
<a class="Right" href="https://github.com/ioccc-src/winner/blob/master/1991/brnstnd/brnstnd.orig.c">Original C</a>
|
||
<a class="Right" href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fwww.ioccc.org%2F1991%2Fbrnstnd%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#Daniel_J_Bernstein">Daniel J. Bernstein</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: 1991/brnstnd/README.md -->
|
||
<h2 id="to-build">To build:</h2>
|
||
<pre><code> make all</code></pre>
|
||
<h2 id="try">Try:</h2>
|
||
<pre><code> ./try.sh
|
||
|
||
./sorta < sorta.itailrec</code></pre>
|
||
<h2 id="judges-remarks">Judges’ remarks:</h2>
|
||
<p>For info on more examples, read the <a href="sorta.README.html">sorta.README.html</a> web page.</p>
|
||
<p>The author wished to win the “most useful program” award and documented this in
|
||
the source code. The judges were unmoved by this blatant attempt to influence
|
||
the contest and rejected this idea… so we gave it the “Best of Show”
|
||
instead!!</p>
|
||
<p><strong>NOTE</strong>: One should remove the final trailing newline to obtain the
|
||
original source file. This step is not needed to compile
|
||
this entry.</p>
|
||
<p>To have a chance to compile under a modern CPP, we had to
|
||
replace <code>#D</code> with <code>#define</code>.</p>
|
||
<h2 id="authors-remarks">Author’s remarks:</h2>
|
||
<p>This is an interpreter for the programming language SORTA, a systems
|
||
and numerical programming language with features sorta from C, sorta
|
||
from FORTH, and sorta from Ada.</p>
|
||
<p>SORTA lets you manipulate files and spawn programs easily, has bitwise
|
||
operators, and gives you absolutely brilliant error messages like ‘?’
|
||
(that’s the C bit). SORTA programs work with a stack (that’s the FORTH
|
||
bit)—actually two stacks, one for integers and one for strings. And
|
||
all SORTA operations are strongly typed, detect practically any failure,
|
||
and garbage-collect (that’s the Ada bit).</p>
|
||
<p>SORTA also contains features you might not expect from such a small
|
||
interpreter: arbitrary-length string input and concatenation, for
|
||
instance, not to mention infinite-depth tail recursion.</p>
|
||
<p>SORTA ignores its arguments (though it makes them available to the
|
||
script); it takes all commands, character by character, from its
|
||
standard input. Unrecognized commands are repeated with a ‘?’.</p>
|
||
<p>SORTA maintains an <code>i</code> stack for integers and an <code>s</code> stack for strings. It also
|
||
keeps track of <code>programs</code>, one for each character. Operations are silently
|
||
ignored if the relevant stacks are too low, except as noted for <code>s</code>, <code>S</code>, and
|
||
<code>!</code>. If the <code>i</code> stack or <code>s</code> stack (or the stack of buffered macro commands)
|
||
grows too high, SORTA will exit silently with exit code 2. (Compile parameter
|
||
<code>-Do=250</code> controls what ‘too high’ means; you should not make <code>o</code> larger than
|
||
250.) I don’t think it’s possible to crash the interpreter.</p>
|
||
<p>Here, then, is the SORTA programming language. All non-digits delimit
|
||
numeric constants. Spaces and newlines are ignored except as numeric
|
||
delimiters.</p>
|
||
<h3 id="basic-operations">Basic operations</h3>
|
||
<ul>
|
||
<li><code>q</code>: quit</li>
|
||
<li><code>number</code>: push that number on top of the <code>i</code> stack</li>
|
||
<li><code>"string"</code>: push that string on top of the <code>s</code> stack, no length limit</li>
|
||
<li><code>[string]</code>: push that string on top of the <code>s</code> stack, no length limit</li>
|
||
<li><code>#</code>: make top of <code>i</code> stack non-destructively in ASCII, push result onto <code>s</code> stack</li>
|
||
<li><code>`</code>: print top of <code>s</code> stack non-destructively</li>
|
||
<li><code>$</code>: print top of <code>s</code> stack non-destructively without newline</li>
|
||
<li><code>d</code>: drop (pop) top of <code>i</code> stack</li>
|
||
<li><code>D</code>: dup (duplicate) top of <code>i</code> stack</li>
|
||
<li><code>'</code>: dup top of <code>s</code> stack</li>
|
||
<li><code>s</code>: pop top of <code>i</code> stack. If it is <code>n</code>, swap <code>(n+1)</code>th-top of <code>i</code> stack with top.
|
||
<code>1s</code>, for example, swaps the top two elements; <code>2s</code> swaps the top with the
|
||
third down; etc. This always pops the top of the <code>i</code> stack, even upon
|
||
failure.</li>
|
||
<li><code>S</code>: pop top of <code>i</code> stack, then act just like <code>s</code> but upon <code>s</code> stack</li>
|
||
<li><code>l</code>: pop top of <code>s</code> stack, push its length onto <code>i</code> stack</li>
|
||
<li><code>a</code>: push argc onto <code>i</code> stack</li>
|
||
<li><code>A</code>: pop top of <code>i</code> stack, push <code>argv[i]</code> on top of <code>s</code> stack</li>
|
||
<li><code>T</code>: concatenate top two elements of <code>s</code> stack</li>
|
||
<li><code>_</code>: negate top of <code>i</code> stack</li>
|
||
<li><code>+</code>: pop top two elements of <code>i</code> stack, add, push back sum</li>
|
||
<li><code>*</code>: pop top two elements of <code>i</code> stack, multiply, push back product</li>
|
||
<li><code>/</code>: pop top two elements of <code>i</code> stack, divide, push back quotient</li>
|
||
<li><code>></code>: pop top two elements of <code>i</code> stack, compare, push back 1 or 0 as in C</li>
|
||
<li><code>&</code>: pop top two elements of <code>i</code> stack, NAND, push back bitwise result
|
||
Note that NAND is sufficient to construct all bitwise operations, as
|
||
demonstrated by <code>icalc</code> in <a href="sorta.README.html">sorta.README.html</a>.</li>
|
||
</ul>
|
||
<h3 id="system-operations">System operations</h3>
|
||
<ul>
|
||
<li><code>o</code>: pop top of <code>s</code> stack and top two of <code>i</code> stack; <code>open(s1,i2,i1);</code> leave
|
||
result on <code>i</code> stack</li>
|
||
<li><code>O</code>: pop top of <code>i</code> stack, <code>close()</code> it</li>
|
||
<li><code>u</code>: pop top of <code>i</code> stack, <code>dup()</code> it, push result back on</li>
|
||
<li><code>F</code>: <code>fork()</code>, push result on <code>i</code> stack. This is not always safe while SORTA is
|
||
reading keyboard input or a script, as the forked programs share file
|
||
descriptors. It is always safe inside a program (see below).</li>
|
||
<li><code>P</code>: <code>pipe()</code>, push two ends <code><p0> <p1></code> onto <code>i</code> stack. In case of trouble,
|
||
<code>push <?> <-1></code> onto <code>i</code> stack.</li>
|
||
<li><code>w</code>: <code>wait()</code>, push successful result (or <code>-1</code> if no children) on <code>i</code> stack</li>
|
||
<li><code>!</code>: <code>execvp()</code> top of the <code>s</code> stack. Arguments are the next things down on
|
||
the <code>s</code> stack, in reverse order from popping; the first character of
|
||
each string is lopped off. There must be an empty string somewhere
|
||
in the <code>s</code> stack to terminate the argument list. If the <code>execve()</code>
|
||
fails, any operation involving current members of the <code>s</code> stack has
|
||
undefined effects, and <code>-1</code> is pushed onto the <code>i</code> stack.</li>
|
||
</ul>
|
||
<h3 id="high-level-language-operations">High-level language operations</h3>
|
||
<ul>
|
||
<li><code>:x</code>: copy the top of the <code>s</code> stack into a program labeled by character <code>x</code></li>
|
||
<li><code>=x</code>: pop the top of the <code>i</code> stack. If it was nonzero, execute the program
|
||
labeled by character <code>x</code>. Note that a digit at the end of a program
|
||
will merge with any digits after <code>=x</code>; in that case you usually want
|
||
to add a space at the end of the program.</li>
|
||
</ul>
|
||
<p>Common idioms: To drop the top of the <code>s</code> stack, <code>ld</code>. To do a <code><</code>, <code>1s></code>. To
|
||
unconditionally execute the program labeled by character <code>x</code>, <code>1=x</code> (or any
|
||
nonzero number followed by <code>=x</code>). To print the top of the <code>i</code> stack
|
||
non-destructively, <code>#</code> (or <code>#$</code> if you don’t want the newline). To
|
||
subtract, <code>_+</code>. To do mod or and or any of the other missing operations,
|
||
combine the available operations as illustrated below. To introduce a
|
||
comment, <code>[ this is a comment string which is promptly eliminated ]ld</code>.</p>
|
||
<p><code>SORTA</code>’s requirements: it wants <code>fork()</code>, <code>execvp()</code>, <code>open()</code>,
|
||
<code>close()</code>, <code>dup()</code>, <code>pipe()</code>, and <code>wait()</code>, so it obviously won’t even compile
|
||
on a non-UNIX machine. It also assumes that you have a size-256
|
||
character set and that the characters between <code>'0'</code> and <code>'9'</code> are exactly
|
||
the digits in order. It does <em>not</em> depend on ASCII, despite the code
|
||
appearance. Also note that SORTA does not attempt to declare <code>malloc()</code>,
|
||
so you will get some warnings about illegal pointer combinations. Also
|
||
note that there are unreachable statements in SORTA.</p>
|
||
<p>While the program source of course depends highly on <code>#define</code>s for
|
||
obfuscation, I like to think that this code has those little touches,
|
||
those professionally sharpened edges that mark true software
|
||
engineering. Observe, for instance, how <code>i</code> and <code>s</code> are the string and
|
||
integer stacks respectively. It’s these little things that make you
|
||
feel at home in an otherwise utterly useless piece of code. They’re
|
||
what make an obfuscation work.</p>
|
||
<p>The character pool (<code>I</code> after cpp) makes it rather painful to
|
||
see the effect of commands at a glance. I can just imagine people
|
||
spending hours bouncing between the pool and the rest of the code,
|
||
or accidentally changing the pool without realizing its importance.
|
||
Without documentation and example scripts, someone would find it
|
||
a challenge to figure out what the arrays are used for, let alone
|
||
that SORTA is a scripting language.</p>
|
||
<p>Another nice feature is that the SORTA language itself encourages you to write
|
||
not merely obfuscated but plain incomprehensible scripts (like the <a href="sorta.README.html">examples in
|
||
sorta.README.html</a> —after working with the language for a
|
||
while, I guess I can read it pretty easily, but I also think FORTH is a
|
||
beautiful language). The numbers running around everywhere will make people
|
||
think of ASCII, even though the code is not ASCII-dependent. What’s your first
|
||
thought when you see several <code>arrays[256]</code>? This is pretty standard obfuscation
|
||
otherwise. I like the way that unbalanced macro braces can throw off the reader
|
||
in <code>if(c>0){y+1]=z[c];</code>, and I had fun covering the alphabet with <code>#define</code>s,
|
||
but that’s nothing special.</p>
|
||
<p>Possible future extensions to SORTA include string extraction and
|
||
matching, reading from files into strings, and encrypting the string
|
||
pool to further confuse the judges. I don’t think I can fit this into
|
||
the size limit, unfortunately.</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: 1991/brnstnd/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-1991brnstnd">Inventory for 1991/brnstnd</h1>
|
||
</div>
|
||
<h2 id="primary-files">Primary files</h2>
|
||
<ul>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/1991/brnstnd/brnstnd.c">brnstnd.c</a> - entry source code</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/1991/brnstnd/Makefile">Makefile</a> - entry Makefile</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/1991/brnstnd/brnstnd.orig.c">brnstnd.orig.c</a> - original source code</li>
|
||
<li><a href="sorta.README.html">sorta.README.html</a> - SORTA language README</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/1991/brnstnd/try.sh">try.sh</a> - script to try entry</li>
|
||
<li><a href="try.txt">try.txt</a> - input file used by try.sh</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/1991/brnstnd/sorta.i2+2">sorta.i2+2</a> - SORTA source</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/1991/brnstnd/sorta.iarg0">sorta.iarg0</a> - SORTA source</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/1991/brnstnd/sorta.icalc">sorta.icalc</a> - SORTA source</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/1991/brnstnd/sorta.idup">sorta.idup</a> - SORTA source</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/1991/brnstnd/sorta.iecho">sorta.iecho</a> - SORTA source</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/1991/brnstnd/sorta.ifact1">sorta.ifact1</a> - SORTA source</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/1991/brnstnd/sorta.ifact2">sorta.ifact2</a> - SORTA source</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/1991/brnstnd/sorta.ifact3">sorta.ifact3</a> - SORTA source</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/1991/brnstnd/sorta.iio">sorta.iio</a> - SORTA source</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/1991/brnstnd/sorta.irot13">sorta.irot13</a> - SORTA source</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/1991/brnstnd/sorta.isleep">sorta.isleep</a> - SORTA source</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/1991/brnstnd/sorta.itailrec">sorta.itailrec</a> - SORTA source</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/1991/brnstnd/sorta.iwhosort">sorta.iwhosort</a> - SORTA source</li>
|
||
</ul>
|
||
<h2 id="secondary-files">Secondary files</h2>
|
||
<ul>
|
||
<li><a href="1991_brnstnd.tar.bz2">1991_brnstnd.tar.bz2</a> - download entry tarball</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/1991/brnstnd/README.md">README.md</a> - markdown source for this web page</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/1991/brnstnd/.entry.json">.entry.json</a> - entry summary and manifest in JSON</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/1991/brnstnd/.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/1991/brnstnd/.path">.path</a> - directory path from top level directory</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/1991/brnstnd/sorta.README.md">sorta.README.md</a> - markdown source for sorta.README.html</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 © 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%2F1991%2Fbrnstnd%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 -->
|