The `bin/pandoc-wrapper.sh` tool will verify that the ssytem has a recent enough version of `pandoc(1)`. We explain why we insist on `pandoc(1)`. version >= 3.1.12.2 in comments where the $PANDOC_MIN_VERSION is set. Added `--wrap=preserve` as a default argument to `pandoc(1)`. While this change will impact every HTML file generated, we believe this will improve the ability of someone to look at the generated HTML and correlate with the original markdown. Changed `bin/pandoc-wrapper.sh` VERSION from "1.4.2 2024-03-17" to "1.4.3 2024-03-18". Performed `make www` to achieve all of the above and to generate HTML using the new `--wrap=preserve` `pandoc(1)` mode.
314 lines
19 KiB
HTML
314 lines
19 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 -->
|
||
<!-- -->
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
<!-- -->
|
||
<!-- END: this line ends content from: inc/top.default.html -->
|
||
<!-- -->
|
||
<!-- This web page was formed via the tool: bin/readme2index.sh -->
|
||
<!-- -->
|
||
<!-- The content of main section of this web page came from: 2012/deckmyn/README.md -->
|
||
<!-- -->
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: 2012/deckmyn/README.md -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: 2012/deckmyn/README.md -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: 2012/deckmyn/README.md -->
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
<!-- -->
|
||
<!-- Markdown content was converted into HTML via the tool: bin/md2html.sh -->
|
||
<!-- -->
|
||
<!-- START: this line starts content from: inc/head.default.html -->
|
||
|
||
<head>
|
||
<link rel="stylesheet" href="../../ioccc.css">
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
||
<title>2012/deckmyn - Most notable and best tool</title>
|
||
<meta name="description" content="2012 IOCCC entry deckmyn - Most notable and best tool">
|
||
<meta name="keywords" content="IOCCC, 2012, IOCCC 2012, IOCCC entry, deckmyn, Most notable and best tool">
|
||
</head>
|
||
|
||
<!-- END: this line ends content from: inc/head.default.html -->
|
||
<!-- START: this line starts content from: inc/body.default.html -->
|
||
|
||
<body>
|
||
|
||
<!-- END: this line ends content from: inc/body.default.html -->
|
||
<!-- START: this line starts content from: inc/header.default.html -->
|
||
|
||
<div class="header">
|
||
<img src="../../png/ioccc.png" alt="IOCCC image by Matt Zucker" width=300 height=110>
|
||
<h1>The International Obfuscated C Code Contest</h1>
|
||
<h2>2012/deckmyn - Most notable and best tool</h2>
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/header.default.html -->
|
||
<!-- START: this line starts content from: inc/topnav.mid.html -->
|
||
|
||
<div class="topnav">
|
||
<a class="Left" href="../blakely/index.html">← blakely</a>
|
||
<a class="Left" href="../index.html">↑ 2012 ↑</a>
|
||
<a class="Left" href="../dlowe/index.html">dlowe →</a>
|
||
<a class="Right" href="https://github.com/ioccc-src/temp-test-ioccc/2012/deckmyn/deckmyn.c">C code</a>
|
||
<a class="Right" href="https://github.com/ioccc-src/temp-test-ioccc/2012/deckmyn/Makefile">Makefile</a>
|
||
<a class="Right" href="#inventory">Inventory</a>
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/topnav.mid.html -->
|
||
<!-- START: this line starts content from: inc/begin-row.default.html -->
|
||
|
||
<div class="row">
|
||
|
||
<!-- END: this line ends content from: inc/begin-row.default.html -->
|
||
<!-- START: this line starts content from: inc/begin-leftcolumn.default.html -->
|
||
|
||
<div class="leftcolumn">
|
||
|
||
<!-- END: this line ends content from: inc/begin-leftcolumn.default.html -->
|
||
<!-- START: this line starts content from: inc/sidenav.default.html -->
|
||
|
||
<div class="sidenav">
|
||
<a href="#content">Jump to contents</a>
|
||
</div>
|
||
<hr>
|
||
<div class="sidenav">
|
||
<a href="../../index.html">IOCCC Home</a>
|
||
<a href="../../years.html">Winning Entries</a>
|
||
<a href="../../authors.html">People who have won</a>
|
||
<a href="../../location.html">Location of authors</a>
|
||
</div>
|
||
<hr>
|
||
<div class="sidenav">
|
||
<a href="../../news.html">IOCCC News</a>
|
||
<a href="../../status.html">Contest status</a>
|
||
<a href="../../faq.html#submit">How to enter the IOCCC</a>
|
||
<a href="../../faq.html">FAQ</a>
|
||
</div>
|
||
<hr>
|
||
<div class="sidenav">
|
||
<a href="../../bugs.html">Bugs & (mis)features</a>
|
||
<a href="../../faq.html#fix_an_entry">Fixing IOCCC entries</a>
|
||
<a href="../../faq.html#fix_web_site">Fixing the web site</a>
|
||
<a href="../../faq.html#fix_author">Fixing author info</a>
|
||
<a href="../../thanks-for-help.html">Thanks for the help</a>
|
||
</div>
|
||
<hr>
|
||
<div class="sidenav">
|
||
<a href="../../judges.html">The IOCCC Judges</a>
|
||
<a href="../../contact.html">Contacting the IOCCC</a>
|
||
</div>
|
||
<hr>
|
||
<div class="sidenav">
|
||
<a href="#top">Jump to top</a>
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/sidenav.default.html -->
|
||
<!-- START: this line starts content from: inc/end-leftcolumn.default.html -->
|
||
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/end-leftcolumn.default.html -->
|
||
<!-- START: this line starts content from: inc/begin-rightcolumn.default.html -->
|
||
|
||
<div class="rightcolumn">
|
||
|
||
<!-- END: this line ends content from: inc/begin-rightcolumn.default.html -->
|
||
<!-- START: this line starts content from: inc/before-content.default.html -->
|
||
|
||
<a name="content"></a>
|
||
|
||
<!-- END: this line ends content from: inc/before-content.default.html -->
|
||
<!-- START: this line starts content for HTML phase 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"><a name="author"></a>Author:</h2>
|
||
<ul>
|
||
<li>Name: <a href="../../authors.html#Alex_Deckmyn">Alex Deckmyn</a><br>
|
||
Location: <a href="../../location.html#BE">BE</a> - <em>Kingdom of Belgium</em> (<em>Belgium</em>)
|
||
<br><br></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 -->
|
||
|
||
<h2 id="to-build">To build:</h2>
|
||
<div class="sourceCode" id="cb1"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="fu">make</span></span></code></pre></div>
|
||
<h3 id="bugs-and-misfeatures">Bugs and (Mis)features:</h3>
|
||
<p>The current status of this entry is:</p>
|
||
<pre><code>STATUS: INABIAF - please **DO NOT** fix</code></pre>
|
||
<p>For more detailed information see <a href="../../bugs.html#2012_deckmyn">2012 deckmyn bugs</a>.</p>
|
||
<h2 id="to-use">To use:</h2>
|
||
<div class="sourceCode" id="cb3"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./deckmyn</span> <span class="st">"</span><span class="va">$(</span><span class="fu">cat</span> deckmyn.c<span class="va">)</span><span class="st">"</span> <span class="st">"</span><span class="va">$(</span><span class="fu">cat</span> musicfile.txt<span class="va">)</span><span class="st">"</span> <span class="op">></span> sheetmusic.pbm</span></code></pre></div>
|
||
<h2 id="try">Try:</h2>
|
||
<div class="sourceCode" id="cb4"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./try.sh</span></span></code></pre></div>
|
||
<h2 id="judges-remarks">Judges’ remarks:</h2>
|
||
<p>The C of this entry is definitely sharp. The program cleverly uses its own
|
||
source at runtime to define the notes, time signature and accidental bitmaps.</p>
|
||
<p>In addition to sheet music, this program is also able to, given the right input,
|
||
generate an image of a 10-pin <a href="https://en.wikipedia.org/wiki/Dual_in-line_package">DIP
|
||
chip</a> (a sound processor?).</p>
|
||
<h3 id="historical-remarks">Historical remarks:</h3>
|
||
<p>We previously wrote that ironically, the way this entry is called from the
|
||
command line is an abuse of <a href="https://en.wikipedia.org/wiki/C_shell">C Shell</a>.
|
||
Please use <a href="https://en.wikipedia.org/wiki/Bourne_shell">Bourne-family shells</a> to
|
||
run this entry.</p>
|
||
<p>… but in 2023 we changed the backticks to be the bash <code>$(..)</code> construct. This
|
||
is not done in the author’s remarks, however.</p>
|
||
<h2 id="authors-remarks">Author’s remarks:</h2>
|
||
<h3 id="example-use">Example use</h3>
|
||
<p>You need the source code and example input (either one of the example files, or
|
||
manual input as below) ready and a program capable of showing <a href="https://en.wikipedia.org/wiki/Netpbm">.pbm bitmap
|
||
format</a> images.</p>
|
||
<div class="sourceCode" id="cb5"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./deckmyn</span> <span class="st">"</span><span class="kw">`</span><span class="fu">cat</span> deckmyn.c<span class="kw">`</span><span class="st">"</span> <span class="st">"</span><span class="kw">`</span><span class="fu">cat</span> example_greensleeves<span class="kw">`</span><span class="st">"</span> <span class="op">></span> greensleeves.pbm</span></code></pre></div>
|
||
<p>If you have macOS you can open the image like:</p>
|
||
<div class="sourceCode" id="cb6"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a><span class="ex">open</span> greensleeves.pbm</span></code></pre></div>
|
||
<p>… otherwise, you’ll have to open it in your viewer of choice how you would
|
||
normally open an image.</p>
|
||
<div class="sourceCode" id="cb7"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./deckmyn</span> <span class="st">"</span><span class="kw">`</span><span class="fu">cat</span> deckmyn.c<span class="kw">`</span><span class="st">"</span> <span class="st">"KF m44c4 c4 g4 g4 : a4 a4 g2 :; "</span> <span class="op">></span> short_bass.pbm</span></code></pre></div>
|
||
<p>If you have macOS you can open the image like:</p>
|
||
<div class="sourceCode" id="cb8"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a><span class="ex">open</span> short_bass.pbm</span></code></pre></div>
|
||
<p>… otherwise, you’ll have to open it in your viewer of choice how you would
|
||
normally open an image.</p>
|
||
<h3 id="description">Description</h3>
|
||
<p>Every major C competition should have an entry capable of producing C major.
|
||
This is a music notation program. It produces
|
||
<a href="https://en.wikipedia.org/wiki/Netpbm">bitmaps</a> (<code>.pbm</code>) of music based on ASCII
|
||
input. A full manual is added as a <a href="deckmyn.html">separate file</a>. Some musical
|
||
examples are also included.</p>
|
||
<p>The program is capable of printing notes, rests, (double) bar lines and
|
||
accidentals on a single melodic line (multiple staves). No chords, polyphony
|
||
etc.</p>
|
||
<p>The program expects <em>two command line arguments</em>. The first is a (very long)
|
||
string that contains the complete music font. Note that it should <em>not</em> be given
|
||
as a file name! The default music font is encoded in the (whitespace of the)
|
||
source code <a href="deckmyn.c">deckmyn.c</a> itself. Therefore, the first argument should
|
||
be <code>"``</code> <code>cat deckmyn.c</code> <code>``"</code>.</p>
|
||
<p>The second command line argument is the music itself. This is, again, a string,
|
||
not a file name. All music signs are entered as tokens of exactly 3 characters.
|
||
The code is very sensitive to bad spacing! So for instance, if you use a file to
|
||
write the music (e.g. <a href="example_greensleeves">example_greensleeves</a>), you should
|
||
keep in mind that newline is also a character!</p>
|
||
<h3 id="internals">Internals</h3>
|
||
<p>To minimise the memory footprint, this program has <em>no variable declarations at
|
||
all</em>, except for the arguments to <code>main()</code>. The only available memory space is
|
||
from the command line arguments and count (<code>argv</code> and <code>argc</code>). Parts of <code>argv</code>
|
||
are cast as <code>int</code> when values under 0 or beyond 127 are expected.</p>
|
||
<p>The “music font” is defined by the source code itself. The first few lines are
|
||
not part of the font definition, as this memory space will be modified by the
|
||
program. (So as required by the rules, it is only a (memory) copy of the source
|
||
code that is modified.)</p>
|
||
<p>As there is no memory available, output is directly to <code>stdout</code>, byte by byte,
|
||
from the top left to the bottom right pixel.</p>
|
||
<h3 id="limitations">LIMITATIONS</h3>
|
||
<p>The memory locations of <code>argv</code> are used for various purposes. Therefore, the
|
||
program name (default <code>deckmyn</code>) must be <em>at least 4 characters long</em>, including
|
||
possibly the path. This, along with the ending <code>'\0'</code>, gives minimum 5 bytes of
|
||
useful memory space. Otherwise, the program may attempt to write outside the
|
||
string.</p>
|
||
<p>The code is quite sensitive. Errors in the input can lead to strange results.
|
||
The code does not read beyond the end of the music input, but that is about the
|
||
only error checking available. Any input that is not according to the rules in
|
||
the <a href="deckmyn.html">manual</a>, may cause errors.</p>
|
||
<p>The program has no special hardware limitations or requirements, other than 8bit
|
||
<code>char</code> (<code>signed</code> or <code>unsigned</code>) and two’s complement negatives.</p>
|
||
<p>The limitations of using <code>char</code> as counters for e.g. the number of music staves
|
||
are minor. 127 staves to a page is rather a lot.</p>
|
||
<h3 id="obfuscations">Obfuscations</h3>
|
||
<p>The code has no declared variables other than the command line variables. Not
|
||
even pointers (we all know how messy code can get with too many pointers!). As
|
||
more than one variable needs values beyond 127, parts of the command line memory
|
||
are cast to <code>int</code> using a macro.</p>
|
||
<ul>
|
||
<li>The formatting of the code is in fact necessary, as this is the definition of
|
||
the music font. It is therefore not an obfuscation.</li>
|
||
<li>The use of only <code>argv</code>/<code>argc</code> as memory locations is a matter of reducing the
|
||
memory footprint. Again, it is not an obfuscation.</li>
|
||
<li>Calling the only remaining variables, and the two defined macros, <code>c</code> and <code>C</code>,
|
||
is merely a matter of conforming to the standard
|
||
<a href="https://en.wikipedia.org/wiki/WYSIWYG">WYSIWYG</a> paradigm common in commercial
|
||
notation programs (’What You <code>C</code> is What You Get). So once again it is not an
|
||
obfuscation. Anyway, it’s a C coding contest, right?</li>
|
||
<li>Randomly using the numerical (ASCII) value for characters is compensated for
|
||
by replacing some numbers by a character representation. On average, therefore,
|
||
it is not an obfuscation.</li>
|
||
<li>Randomly changing the way the elements of <code>argv</code> are addressed is a matter of
|
||
maintaining a diversified code base. It is therefore not… Oh all right.</li>
|
||
<li>The actual output of the music is done by one <code>printf(3)</code> call including a 800+
|
||
character nested conditional expression.</li>
|
||
<li><code>printf()</code> is also used for its return value.</li>
|
||
</ul>
|
||
<h2 id="copyright-and-cc-by-sa-4.0-license">Copyright and CC BY-SA 4.0 License:</h2>
|
||
<p>This file is Copyright (c) 2023 by Landon Curt Noll. All Rights Reserved.
|
||
You are free to share and adapt this file under the terms of this license:</p>
|
||
<pre><code>Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)</code></pre>
|
||
<p>For more information, see: https://creativecommons.org/licenses/by-sa/4.0/</p>
|
||
|
||
<!-- 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 -->
|
||
|
||
<h1 id="inventory-for-2012deckmyn"><a name="inventory"></a>Inventory for 2012/deckmyn</h1>
|
||
<p><a href="#top">Jump to top</a></p>
|
||
<h2 id="primary-files">Primary files</h2>
|
||
<ul>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2012/deckmyn/deckmyn.c">deckmyn.c</a> - entry source</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2012/deckmyn/Makefile">Makefile</a> - entry Makefile</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2012/deckmyn/deckmyn.orig.c">deckmyn.orig.c</a> - original source</li>
|
||
<li><a href="deckmyn.html">deckmyn.html</a> - user manual</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2012/deckmyn/example_beethoven">example_beethoven</a> - music notation</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2012/deckmyn/example_greensleeves">example_greensleeves</a> - music notation</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2012/deckmyn/try.sh">try.sh</a> - how to run</li>
|
||
<li><a href="2012_deckmyn.tar.bz2">2012_deckmyn.tar.bz2</a> - download entry source</li>
|
||
</ul>
|
||
<h2 id="secondary-files">Secondary files</h2>
|
||
<ul>
|
||
<li><a href="index.html">index.html</a> - entry home page</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2012/deckmyn/.entry.json">.entry.json</a> - description of entry in JSON</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2012/deckmyn/.gitignore">.gitignore</a> - list of files that should not be committed under git</li>
|
||
<li><a href=".path">.path</a> - directory path from top directory</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2012/deckmyn/README.md">README.md</a> - markdown source for index.html</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2012/deckmyn/deckmyn.md">deckmyn.md</a> - markdown source for deckmyn.html</li>
|
||
</ul>
|
||
|
||
<!-- 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 -->
|
||
|
||
<!-- END: this line ends content from: inc/after-content.default.html -->
|
||
<!-- START: this line starts content from: inc/end-rightcolumn.default.html -->
|
||
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/end-rightcolumn.default.html -->
|
||
<!-- START: this line starts content from: inc/end-row.default.html -->
|
||
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/end-row.default.html -->
|
||
<!-- START: this line starts content from: inc/footer.default.html -->
|
||
|
||
<div class="footer">
|
||
<hr>
|
||
<h2>Coda</h2>
|
||
<p><a href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fioccc-src.github.io%2Ftemp-test-ioccc%2F2012%2Fdeckmyn%2Findex.html">Nu HTML check this web page</a></p>
|
||
<p><a href="#top">Jump to top</a> <a href="#content">Jump to Content</a> <a href="#inventory">Jump to Inventory</a></p>
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/footer.default.html -->
|
||
<!-- START: this line starts content from: inc/bottom.default.html -->
|
||
|
||
</body>
|
||
</html>
|
||
|
||
<!-- END: this line ends content from: inc/bottom.default.html -->
|