Various updates/fixes for recent chkentry mods

This commit is contained in:
Cody Boone Ferguson committed 2025-02-26 12:20:55 -08:00
1 parent 7e559b6da1
commit 664a7b57bd
8 files changed
+804 -601

No files matched your search

+214 -178
View File
@@ -425,7 +425,7 @@
<!-- BEFORE: 1st line of markdown file: faq.md --> <!-- BEFORE: 1st line of markdown file: faq.md -->
<h1 id="ioccc-faq-table-of-contents">IOCCC FAQ Table of Contents</h1> <h1 id="ioccc-faq-table-of-contents">IOCCC FAQ Table of Contents</h1>
<p>This is FAQ version <strong>28.2.9 2025-02-12</strong>.</p> <p>This is FAQ version <strong>28.2.10 2025-02-26</strong>.</p>
<h2 id="entering-the-ioccc-the-bare-minimum-you-need-to-know">0. <a href="#enter_questions">Entering the IOCCC: the bare minimum you need to know</a></h2> <h2 id="entering-the-ioccc-the-bare-minimum-you-need-to-know">0. <a href="#enter_questions">Entering the IOCCC: the bare minimum you need to know</a></h2>
<ul> <ul>
<li><strong>Q 0.0</strong>: <a class="normal" href="#enter">How can I enter the IOCCC?</a></li> <li><strong>Q 0.0</strong>: <a class="normal" href="#enter">How can I enter the IOCCC?</a></li>
@@ -471,7 +471,7 @@
<li><strong>Q 3.0</strong>: <a class="normal" href="#mkiocccentry_process">What is the <code>mkiocccentry(1)</code> process and what sort of checks does it perform?</a></li> <li><strong>Q 3.0</strong>: <a class="normal" href="#mkiocccentry_process">What is the <code>mkiocccentry(1)</code> process and what sort of checks does it perform?</a></li>
<li><strong>Q 3.1</strong>: <a class="normal" href="#txzchk">How can I validate my submission tarball?</a></li> <li><strong>Q 3.1</strong>: <a class="normal" href="#txzchk">How can I validate my submission tarball?</a></li>
<li><strong>Q 3.2</strong>: <a class="normal" href="#fnamchk">What is the <code>fnamchk</code> tool?</a></li> <li><strong>Q 3.2</strong>: <a class="normal" href="#fnamchk">What is the <code>fnamchk</code> tool?</a></li>
<li><strong>Q 3.3</strong>: <a class="normal" href="#chkentry">How can I validate my <code>.auth.json</code> and/or <code>.info.json</code> files?</a></li> <li><strong>Q 3.3</strong>: <a class="normal" href="#chkentry">How can I validate my submission directory?</a></li>
<li><strong>Q 3.4</strong>: <a class="normal" href="#auth_json">What is a <code>.auth.json</code> file?</a></li> <li><strong>Q 3.4</strong>: <a class="normal" href="#auth_json">What is a <code>.auth.json</code> file?</a></li>
<li><strong>Q 3.5</strong>: <a class="normal" href="#info_json">What is a <code>.info.json</code> file?</a></li> <li><strong>Q 3.5</strong>: <a class="normal" href="#info_json">What is a <code>.info.json</code> file?</a></li>
<li><strong>Q 3.6</strong>: <a class="normal" href="#author_handle_faq">What is an <code>author handle</code>?</a></li> <li><strong>Q 3.6</strong>: <a class="normal" href="#author_handle_faq">What is an <code>author handle</code>?</a></li>
@@ -629,11 +629,21 @@ code, your Makefile, your remarks, any other data files you wish to provide (up
to a maximum, including the mandatory files, defined in to a maximum, including the mandatory files, defined in
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">limit_ioccc.h</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">limit_ioccc.h</a>
as <code>MAX_FILE_COUNT</code>) and other information about your submission, as <code>MAX_FILE_COUNT</code>) and other information about your submission,
information about the author (or authors), and then it runs a lot of tests.</p> information about the author (or authors), and then it will give you a list of
subdirectories, if any, that will be made, and files that will be copied to the
submission directory. It will list files and directories that it will (for
various reasons) not create as well, asking you to confirm these things are all
okay. Some things are strictly forbidden (such as a directory tree too deep) and
it will tell you about these as well, so you can fix it.</p>
<p>Assuming you agree to the list of directories and files, it will make the
directories (if necessary) and copy the files. It will then switch to the
submission directory, run <code>make clobber</code> and then scan the directory again,
looking for mismatches. If no errors are detected it will list everything to you
again, asking you to confirm it is good.</p>
<p>If everything is OK, it will write the required <code>.auth.json</code> and <code>.info.json</code> <p>If everything is OK, it will write the required <code>.auth.json</code> and <code>.info.json</code>
files, checking each with <code>chkentry(1)</code> and then, if all is OK, it will create and then run <code>chkentry(1)</code> on the directory. If all is OK it will create the
the tarball. After the tarball is formed, it will run <code>txzchk(1)</code> on it, which tarball. After the tarball is formed, it will run <code>txzchk(1)</code> on it, which runs
runs <code>fnamchk(1)</code>. If all is OK, your submission tarball should be good to go.</p> <code>fnamchk(1)</code>. If all is OK, your submission tarball should be good to go.</p>
<p>Please see <p>Please see
FAQ on “<a href="#txzchk">txzchk</a>”, FAQ on “<a href="#txzchk">txzchk</a>”,
the the
@@ -706,19 +716,20 @@ cause problems. Additionally, if you do not have the most recent version when
submitting a tarball it will be rejected for not having the right versions of submitting a tarball it will be rejected for not having the right versions of
the tools. This is why you <strong>MUST</strong> make sure you have the most recent version the tools. This is why you <strong>MUST</strong> make sure you have the most recent version
of all the tools and you either run it from the repo directory itself OR you of all the tools and you either run it from the repo directory itself OR you
install them (<code>make install</code> as via <code>sudo</code> or as root).</p> install them (<code>make install</code> as via <code>sudo</code> or as root). We recommend you install
the tools but if you wish to run it from the repo directory you may.</p>
<p>If the <strong><em>subdirectory</em> in the <em>work directory</em></strong> (based on your submit ID and <p>If the <strong><em>subdirectory</em> in the <em>work directory</em></strong> (based on your submit ID and
slot number) already exists, you will have to slot number) already exists, you will have to move it, remove it or otherwise
move it, remove it or otherwise specify a different work directory (<strong>NOT</strong> the specify a different work directory (<strong>NOT</strong> the subdirectory), as it needs to be
subdirectory), as it needs to be empty.</p> empty.</p>
<p>This <em>subdirectory is where your files will be <strong>copied</strong> to</em>. Your <em>submission <p>This <em>subdirectory is where your directories will be made and where your files
tarball</em> (which you will upload to the submit server) that <code>txzchk(1)</code> will will be <strong>copied</strong> to</em>. Your <em>submission tarball</em> (which you will upload to the
validate <em>will be placed in the <strong>work directory</strong></em>, and <strong>its <em>contents</em> will submit server) that <code>txzchk(1)</code> will validate <em>will be placed in the <strong>work
be the <em>subdirectory</em> with your submission’s files</strong>. directory</strong></em>, and <strong>its <em>contents</em> will be the <em>subdirectory</em> with your
The <code>mkiocccentry(1)</code> tool will also ask you for information about your submission’s files</strong>. The <code>mkiocccentry(1)</code> tool will also ask you for
submission <em>as well as author details</em> (that will only be looked at if the information about your submission <em>as well as author details</em> (that will only be
submission wins), run some tests and run a number of other tools, as looked at if the submission wins), run some tests and run a number of other
mentioned above, and as described in the “<a href="#mkiocccentry_details">finer tools, as mentioned above, and as described in the “<a href="#mkiocccentry_details">finer
details</a>” section.</p> details</a>” section.</p>
<p>See also the <p>See also the
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/FAQ.md">mkiocccentry repo FAQ</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/FAQ.md">mkiocccentry repo FAQ</a>
@@ -885,7 +896,7 @@ FAQ on “<a href="#makefile">submission Makefiles</a>.</p>
<div id="file_perms"> <div id="file_perms">
<h3 id="q-0.6-what-permissions-may-my-files-be-and-what-if-i-need-different-permissions">Q 0.6: What permissions may my files be and what if I need different permissions?</h3> <h3 id="q-0.6-what-permissions-may-my-files-be-and-what-if-i-need-different-permissions">Q 0.6: What permissions may my files be and what if I need different permissions?</h3>
</div> </div>
<p>As <a href="#rule17">Rule 17</a> states, files in your submission tarball <strong>MUST</strong> be <p>As <a href="next/rules.html#rule17">Rule 17</a> states, files in your submission tarball <strong>MUST</strong> be
specific permissions. In particular: directories <strong>MUST</strong> be <code>drwxr-xr-x</code> (i.e. specific permissions. In particular: directories <strong>MUST</strong> be <code>drwxr-xr-x</code> (i.e.
<code>0755</code>), the optional files, <code>try.sh</code> or <code>try.alt.sh</code>, if provided, <strong>MUST</strong> be <code>0755</code>), the optional files, <code>try.sh</code> or <code>try.alt.sh</code>, if provided, <strong>MUST</strong> be
<code>-r-xr-xr-x</code> (i.e. <code>0555</code>) and all other files <strong>MUST</strong> be <code>-r--r--r--</code> (i.e. <code>-r-xr-xr-x</code> (i.e. <code>0555</code>) and all other files <strong>MUST</strong> be <code>-r--r--r--</code> (i.e.
@@ -969,7 +980,7 @@ For example:</p>
</div> </div>
<p>The IOCCC makes extensive use of <a href="https://daringfireball.net/projects/markdown/">markdown</a>. <p>The IOCCC makes extensive use of <a href="https://daringfireball.net/projects/markdown/">markdown</a>.
For example, when <a href="next/submit.html">submitting to the IOCCC</a>, we have people For example, when <a href="next/submit.html">submitting to the IOCCC</a>, we have people
submit remarks about entry in markdown format. Every submit remarks about their submission(s) in markdown format. Every
<a href="years.html">winning IOCCC entry</a> uses a <code>README.md</code> markdown file <a href="years.html">winning IOCCC entry</a> uses a <code>README.md</code> markdown file
as the basis for forming the <code>index.html</code> web page for that entry. as the basis for forming the <code>index.html</code> web page for that entry.
All generated HTML pages on the <a href="https://www.ioccc.org/index.html">Official IOCCC website</a> All generated HTML pages on the <a href="https://www.ioccc.org/index.html">Official IOCCC website</a>
@@ -1018,6 +1029,10 @@ do have to try again you’ll have to remove it.</p>
<p>This will run the tests that <code>mkiocccentry(1)</code>, write the JSON files, use <p>This will run the tests that <code>mkiocccentry(1)</code>, write the JSON files, use
<code>chkentry(1)</code>, package the tarball and run <code>txzchk(1)</code> on it.</p> <code>chkentry(1)</code>, package the tarball and run <code>txzchk(1)</code> on it.</p>
<p>See also the <p>See also the
FAQ on “<a href="#mkiocccentry">mkiocccentry</a>”,
the
FAQ on “<a href="#using_mkiocccentry">using mkiocccentry</a>”,
the
FAQ on “<a href="#info_json">.info.json</a>”, FAQ on “<a href="#info_json">.info.json</a>”,
the the
FAQ on “<a href="#auth_json">.auth.json</a>”, FAQ on “<a href="#auth_json">.auth.json</a>”,
@@ -1047,6 +1062,13 @@ submission</a>, which not only discusses the maximum
number of files (including extra files) but also specific rules you must follow number of files (including extra files) but also specific rules you must follow
if you do include a tarball. Not following these points puts you at great risk if you do include a tarball. Not following these points puts you at great risk
of violating <a href="next/rules.html#rule17">Rule 17</a>!</p> of violating <a href="next/rules.html#rule17">Rule 17</a>!</p>
<p>Also, remember what the <a href="next/guidelines.html">guidelines</a> say:</p>
<blockquote>
<p><strong>IMPORTANT REMINDER</strong>: make <strong>SURE</strong> your tarball does <strong>NOT</strong> reveal who you are!
The <code>mkiocccentry(1)</code> tool creates a v7 format tarball to prevent this.</p>
</blockquote>
<p>You can do this by creating the tarball like:</p>
<pre><code> tar --format=v7 -cJf foo.txz directory</code></pre>
<hr style="width:50%;text-align:left;margin-left:0"> <hr style="width:50%;text-align:left;margin-left:0">
<hr style="width:50%;text-align:left;margin-left:0"> <hr style="width:50%;text-align:left;margin-left:0">
<div id="judging"> <div id="judging">
@@ -1129,16 +1151,19 @@ discussion</a>.</p>
</div> </div>
<p>There are unfortunately some warnings that cannot be disabled; they are always <p>There are unfortunately some warnings that cannot be disabled; they are always
enabled whatever warning options you have enabled. Also, there is a warning that enabled whatever warning options you have enabled. Also, there is a warning that
is enabled whenever you act on <code>char *</code>s, saying it is unsafe buffer usage, even is enabled whenever you use a pointer as a buffer, saying it is unsafe buffer
when it’s not. This might be enabled by <code>-Weverything</code> but it might not be; for usage, even when it is not.</p>
more details on why we use <code>-Weverything</code> in Clang see the <p>This might be enabled by <code>-Weverything</code> but it might not be but it is not
FAQ on “<a href="#weverything">-Weverything</a>”.</p> detrimental to your submission if you disable this, which you can do by
<p>It is not detrimental to your submission if you disable this, which you can do specifying <code>-Wno-unsafe-buffer-usage</code>.</p>
by specifying <code>-Wno-unsafe-buffer-usage</code>.</p>
<p>So in short, no you should not worry about these as they are sometimes <p>So in short, no you should not worry about these as they are sometimes
inevitable in obfuscated code and even non-obfuscated code.</p> inevitable in obfuscated code and even non-obfuscated code.</p>
<p>If you <em>can</em> work past this it might be good but this is not something that <p>If you <em>can</em> work past this it might be good but this is not something that
should be worried about too much as this is on the compiler developers, not you.</p> should be worried about too much as this is on the compiler developers, not you.
Of course if you do work past it feel free to brag, though <strong>BE SURE TO TELL
US</strong> the OS, OS version, compiler and compiler version.</p>
<p>For more details on why we use <code>-Weverything</code> in Clang see the FAQ on
“<a href="#weverything">-Weverything</a>”.</p>
<p>Jump to: <a href="#">top</a></p> <p>Jump to: <a href="#">top</a></p>
<div id="frequent-themes"> <div id="frequent-themes">
<h3 id="q-2.3-what-types-of-entries-have-been-frequently-submitted-to-the-ioccc">Q 2.3: What types of entries have been frequently submitted to the IOCCC?</h3> <h3 id="q-2.3-what-types-of-entries-have-been-frequently-submitted-to-the-ioccc">Q 2.3: What types of entries have been frequently submitted to the IOCCC?</h3>
@@ -1399,11 +1424,12 @@ verify everything is in order. If something is not allowed (bad filename for
example) or an error occurs (missing required file for example) you will be example) or an error occurs (missing required file for example) you will be
notified of this. After you verify everything is okay the files/directories notified of this. After you verify everything is okay the files/directories
found will be copied/made and it will then switch to the submission directory. found will be copied/made and it will then switch to the submission directory.
In the submission directory it scans the file hierarchy again and verifies In the submission directory it first runs <code>make clobber</code> and then scans the
things are still okay. When done it will ask you to verify things are still OK. directory hierarchy again, verifying things are still okay. When done it will
If all is good it’ll ask you for more information about the author(s). Next the ask you to verify things still look OK to you too. If all is good it’ll ask you
two required JSON files <code>.auth.json</code> and <code>.info.json</code> will be created, running for more information about the author(s). Next the two required JSON files
<code>chkentry(1)</code> on each. If all is good it’ll give you another chance to say the <code>.auth.json</code> and <code>.info.json</code> will be created. After that <code>chkentry(1)</code> will be
run on the directory. If all is good it’ll give you another chance to say the
files/directories look good and if you answer yes it’ll create the tarball and files/directories look good and if you answer yes it’ll create the tarball and
run <code>txzchk</code> on it.</p> run <code>txzchk</code> on it.</p>
<p>In most cases the program will prompt you to verify your input is correct. In <p>In most cases the program will prompt you to verify your input is correct. In
@@ -1565,19 +1591,14 @@ but has no content is violating <a href="next/rules.html#rule17">Rule 17</a> and
<li>Ask the user for a one line abstract of the submission.</li> <li>Ask the user for a one line abstract of the submission.</li>
<li>Ask the user for the number of authors and for each author ask a variety of <li>Ask the user for the number of authors and for each author ask a variety of
questions (see below for more information on what kind of questions).</li> questions (see below for more information on what kind of questions).</li>
<li>Create <code>.info.json</code> and run <code>chkentry(1)</code> on it. <li>Create <code>.info.json</code>.</li>
<li>Create <code>.auth.json</code>.</li>
<li>Run <code>chkentry(1)</code> on your submission directory to verify things look good,
including that the <code>.info.json</code> and <code>.auth.json</code> files are okay.
<ul> <ul>
<li>If <code>chkentry(1)</code> fails to validate the file make sure that you have <li>It also checks that the manifest in <code>.info.json</code> matches what is in the
obtained and compiled the latest version of all the tools and you either are submission directory and it verifies file permissions too; if you wish to
in the repo’s directory, you pass the options to give the path to the tools know what else it does we suggest you read the source code.</li>
or you have installed the latest tools!</li>
</ul></li>
<li>Create <code>.auth.json</code> and run <code>chkentry(1)</code> on it.
<ul>
<li>If <code>chkentry(1)</code> fails to validate the file make sure that you have
obtained and compiled the latest version of all the tools and you either are
in the repo’s directory, you pass the options to give the path to the tools
or you have installed the latest tools!</li>
</ul></li> </ul></li>
<li>Show the output of <code>ls -lakR .</code>, asking the user to confirm that the listing <li>Show the output of <code>ls -lakR .</code>, asking the user to confirm that the listing
is okay.</li> is okay.</li>
@@ -1722,43 +1743,53 @@ for more information.</p>
<p>Jump to: <a href="#">top</a></p> <p>Jump to: <a href="#">top</a></p>
<div id="validating_auth_info_json"> <div id="validating_auth_info_json">
<div id="chkentry"> <div id="chkentry">
<h3 id="q-3.3-how-can-i-validate-my-.auth.json-andor-.info.json-files">Q 3.3: How can I validate my <code>.auth.json</code> and/or <code>.info.json</code> files?</h3> <h3 id="q-3.3-how-can-i-validate-my-submission-directory">Q 3.3: How can I validate my submission directory?</h3>
</div> </div>
</div> </div>
<p>If you want to validate the <code>.auth.json</code> or <code>.info.json</code> files you <p>If you want to validate your submission directory manually, including but not
should use <code>chkentry(1)</code> from the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry limited to the <code>.auth.json</code> or <code>.info.json</code> files, you should use <code>chkentry(1)</code>
repo</a>.</p> from the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry repo</a>.</p>
<p>The <code>chkentry(1)</code> tool uses the IOCCC version of the <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/jparse/man/man3/jparse.3">jparse <p>The <code>chkentry(1)</code> tool runs a variety of checks on your submission directory,
including but not limited to, using the <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/jparse/man/man3/jparse.3">jparse
API</a> API</a>
to perform <strong>additional</strong> checks on these two IOCCC specific JSON files. It is to validate the two IOCCC specific JSON files (as valid JSON) and additional
<em>possible</em> that this version will at times differ from the <a href="https://github.com/xexyl/jparse/blob/master/man/man3/jparse.3">official jparse checks on those files as well. An important thing that it does is verify that
API</a> at the your files are the right permissions and that the manifest in the <code>.info.json</code>
<a href="https://github.com/xexyl/jparse">official jparse repo</a> and this is one of the files match what is in the directory. What all the checks are is out of scope of this
reasons the tools’ <code>-V</code> (version option) show the JSON parser version as well.</p> document; if you wish to know we recommend you read the <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/chkentry.c">source
code</a>.</p>
<p><strong>NOTE</strong>: the IOCCC <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/jparse/man/man3/jparse.3">jparse
API</a>
is a synced copy of the <a href="https://github.com/xexyl/jparse">official jparse
repo</a> <em>at the time of the contest open date</em>.</p>
<p>See the <p>See the
FAQ on “<a href="#auth_json">.auth.json</a>” FAQ on “<a href="#auth_json">.auth.json</a>”
and and
FAQ on “<a href="#info_json">.info.json</a>” FAQ on “<a href="#info_json">.info.json</a>”
for more details on these files.</p> for more details on the two required and very important JSON files.</p>
<p>The <code>chkentry(1)</code> tool accepts more than one command line form. <p>The <code>chkentry(1)</code> tool accepts a single arg, a directory that <strong>MUST</strong> have the
You may specify a <code>.auth.json</code> and/or two JSON files, <code>.auth.json</code> and <code>.info.json</code>. (Okay there is an option to skip
<code>.info.json</code> file. An argument of “<code>.</code>” will skip that file. For instance:</p> files but this is for the judges <strong>ONLY</strong>; use of this option to validate your
<pre><code> # run checks on .info.json: submission puts you at a great risk of violating <a href="next/rules.html#rule17">Rule
chkentry . .info.json 17</a>!).</p>
<p>As an example, if your submission directory is <code>12345678-1234-4321-abcd-1234567890ab-0/</code> then you should run the
# run checks on .auth.json: following command:</p>
chkentry .auth.json . <pre><code> chkentry 12345678-1234-4321-abcd-1234567890ab-0</code></pre>
# run checks on .auth.json and .info.json:
chkentry .auth.json .info.json</code></pre>
<p>If there is a <a href="https://www.json.org/json-en.html">JSON</a> issue detected by the <p>If there is a <a href="https://www.json.org/json-en.html">JSON</a> issue detected by the
<code>jparse(3)</code> API, then there is a <a href="https://www.json.org/json-en.html">JSON</a> error and <code>jparse(3)</code> API (i.e. it is not valid JSON) it is an error and <code>chkentry(1)</code>
<code>chkentry(1)</code> will report it as an <strong>error</strong>. If the parsing is OK (i.e. valid will report this, exiting with a non-zero exit code. If the parsing is OK (i.e.
JSON) but there is an issue in one or both of the valid JSON) but there is an issue in one or both of the
<a href="https://www.json.org/json-en.html">JSON</a> files in <strong>the context of the IOCCC</strong>, <a href="https://www.json.org/json-en.html">JSON</a> files in <strong>the context of the IOCCC</strong>,
it will report this as an <strong>error</strong>. Thus, if you were to package your it will report this as an <strong>error</strong>. It also does, as briefly noted above, other
submission manually then you would be violating <a href="next/rules.html#rule17">Rule checks.</p>
17</a>.</p> <p>If <code>chkentry(1)</code> fails to validate your submission directory your submission
<strong>WILL</strong> be <strong>REJECTED</strong>! This is why you <strong>MUST</strong> make sure you use the
<code>mkiocccentry(1)</code> tool to form your submission directory.</p>
<p>See the
FAQ on “<a href="#auth_json">.auth.json</a>”
and the
FAQ on “<a href="#info_json">.info.json</a>”
as well as <a href="next/rules.html#rule17">Rule 17</a> for more information.</p>
<p>Jump to: <a href="#">top</a></p> <p>Jump to: <a href="#">top</a></p>
<div id="auth_json"> <div id="auth_json">
<h3 id="q-3.4-what-is-a-.auth.json-file">Q 3.4: What is a <code>.auth.json</code> file?</h3> <h3 id="q-3.4-what-is-a-.auth.json-file">Q 3.4: What is a <code>.auth.json</code> file?</h3>
@@ -1787,7 +1818,7 @@ information about the author or authors of the submission, in JSON format.</p>
<ul> <ul>
<li>The current version of the <code>.auth.json</code> file.</li> <li>The current version of the <code>.auth.json</code> file.</li>
</ul> </ul>
<p><strong>NOTE:</strong> this <strong>MUST</strong> match <strong>THIS</strong> IOCCC’s <code>.auth.json</code> version, defined as <p><strong>IMPORTANT:</strong> this <strong>MUST</strong> match <strong>THIS</strong> IOCCC’s <code>.auth.json</code> version, defined as
<code>AUTH_VERSION</code> in <code>AUTH_VERSION</code> in
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h">soup/version.h</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h">soup/version.h</a>
in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If
@@ -1796,7 +1827,7 @@ this is not the case your submission <strong>WILL BE</strong> rejected!</p></li>
<ul> <ul>
<li>Which contest number this is (e.g. 1 for 1984, 2 for 1985, 27 for 2020).</li> <li>Which contest number this is (e.g. 1 for 1984, 2 for 1985, 27 for 2020).</li>
</ul> </ul>
<p><strong>NOTE:</strong> this <strong>MUST</strong> match <strong>THIS</strong> IOCCC’s contest value, defined as <p><strong>IMPORTANT:</strong> this <strong>MUST</strong> match <strong>THIS</strong> IOCCC’s contest value, defined as
<code>IOCCC_CONTEST</code> in <code>IOCCC_CONTEST</code> in
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a>
in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If
@@ -1807,7 +1838,7 @@ this is not the case your submission <strong>WILL BE</strong> rejected!</p></li>
</ul> </ul>
<p><strong>NOTE:</strong> sometimes an IOCCC year runs into another year and the contest year <p><strong>NOTE:</strong> sometimes an IOCCC year runs into another year and the contest year
might not match when it ends.</p> might not match when it ends.</p>
<p><strong>NOTE:</strong> this <strong>MUST</strong> match <strong>THIS</strong> IOCCC’s contest, defined as <p><strong>IMPORTANT:</strong> this <strong>MUST</strong> match <strong>THIS</strong> IOCCC’s contest, defined as
<code>IOCCC_YEAR</code> in <code>IOCCC_YEAR</code> in
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a>
in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If
@@ -1816,17 +1847,17 @@ this is not the case your submission <strong>WILL BE</strong> rejected!</p></li>
<ul> <ul>
<li>The version of <code>mkiocccentry</code> that formed this <code>.auth.json</code> file.</li> <li>The version of <code>mkiocccentry</code> that formed this <code>.auth.json</code> file.</li>
</ul> </ul>
<p><strong>NOTE:</strong> this <strong>MUST</strong> match <strong>THIS</strong> IOCCC’s <code>mkiocccentry</code> version, <p><strong>IMPORTANT:</strong> this <strong>MUST</strong> match <strong>THIS</strong> IOCCC’s <code>mkiocccentry</code> version,
defined as <code>MKIOCCCENTRY_VERSION</code> in defined as <code>MKIOCCCENTRY_VERSION</code> in
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h">soup/version.h</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h">soup/version.h</a>
in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If
this is not the case your submission <strong>WILL BE</strong> rejected!</p></li> this is not the case your submission <strong>WILL BE</strong> rejected!</p></li>
<li><p><code>chkentry_version</code> (double quoted string)</p> <li><p><code>chkentry_version</code> (double quoted string)</p>
<ul> <ul>
<li>The version of <code>chkentry</code> that was used to validate this <code>.auth.json</code>, <li>The version of <code>chkentry</code> that was used to validate the submission
assuming that it was created by <code>mkiocccentry</code>.</li> directory, including the <code>.auth.json</code> file.</li>
</ul> </ul>
<p><strong>NOTE:</strong> this <strong>MUST</strong> match <strong>THIS</strong> IOCCC’s <code>chkentry</code> version, defined <p><strong>IMPORTANT:</strong> this <strong>MUST</strong> match <strong>THIS</strong> IOCCC’s <code>chkentry</code> version, defined
as <code>CHKENTRY_VERSION</code> in as <code>CHKENTRY_VERSION</code> in
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h">soup/version.h</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h">soup/version.h</a>
in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If
@@ -1836,7 +1867,7 @@ this is not the case your submission <strong>WILL BE</strong> rejected!</p></li>
<li>The version of <code>fnamchk</code> that <code>txzchk</code> uses to validate the filename of <li>The version of <code>fnamchk</code> that <code>txzchk</code> uses to validate the filename of
the xz compressed tarball.</li> the xz compressed tarball.</li>
</ul> </ul>
<p><strong>NOTE:</strong> this <strong>MUST</strong> match <strong>THIS</strong> IOCCC’s <code>fnamchk</code> version in order for it <p><strong>IMPORTANT:</strong> this <strong>MUST</strong> match <strong>THIS</strong> IOCCC’s <code>fnamchk</code> version in order for it
to be valid. If this is not the case your submission <strong>WILL BE</strong> rejected!</p></li> to be valid. If this is not the case your submission <strong>WILL BE</strong> rejected!</p></li>
<li><p><code>IOCCC_contest_id</code> (double quoted string)</p> <li><p><code>IOCCC_contest_id</code> (double quoted string)</p>
<ul> <ul>
@@ -1851,19 +1882,20 @@ violating <a href="next/rules.html#rule17">Rule 17</a>!</p></li>
<ul> <ul>
<li>The xz compressed tarball filename.</li> <li>The xz compressed tarball filename.</li>
</ul> </ul>
<p><strong>NOTE:</strong> this <strong>MUST</strong> match the actual tarball’s <strong>filename</strong> in order for <p><strong>IMPORTANT:</strong> this <strong>MUST</strong> match the actual tarball’s <strong>filename</strong> in order for
this to be valid. If there is a mismatch you stand a great risk of having this to be valid. If there is a mismatch you stand a great risk of having
your submission rejected for violating <a href="next/rules.html#rule17">Rule 17</a>! your submission rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!
Moreover, it is possible that <code>txzchk</code> will report a problem through Moreover, it is possible that <code>txzchk</code> will report a problem through
<code>fnamchk(1)</code> which also puts you at great risk of violating <a href="next/rules.html#rule17">Rule <code>fnamchk(1)</code> which also puts you at great risk of violating <a href="next/rules.html#rule17">Rule
17</a>. If <code>txzchk</code> does not detect this, though, it 17</a>. <code>txzchk</code> will use the output of <code>fnamchk</code> to
does not mean it’s a bug but rather that the directory in the tarball obtain the correct directory <em>name</em> in the tarball; if <code>fnamchk</code> fails to
matches the filename.</p></li> validate your filename, or if you have the wrong directory name in the
tarball, this will be flaggd.</p></li>
<li><p><code>submit_slot</code> (number)</p> <li><p><code>submit_slot</code> (number)</p>
<ul> <ul>
<li>The submission number.</li> <li>The submission number.</li>
</ul> </ul>
<p><strong>NOTE:</strong> this <strong>MUST</strong> be within the range of 0 <strong>THROUGH</strong> <p><strong>IMPORTANT:</strong> this <strong>MUST</strong> be within the range of 0 <strong>THROUGH</strong>
<code>MAX_SUBMIT_SLOT</code> (see <code>MAX_SUBMIT_SLOT</code> (see
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a>
in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>). If in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>). If
@@ -1873,7 +1905,7 @@ rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!</p></li>
<ul> <ul>
<li>How many authors this submission has.</li> <li>How many authors this submission has.</li>
</ul> </ul>
<p><strong>NOTE:</strong> this <strong>MUST</strong> be within the range of 1 <strong>THROUGH</strong> <p><strong>IMPORTANT:</strong> this <strong>MUST</strong> be within the range of 1 <strong>THROUGH</strong>
<code>MAX_AUTHORS</code> (see <code>MAX_AUTHORS</code> (see
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a>
in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>). If in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>). If
@@ -1910,10 +1942,14 @@ for a list of valid codes.</li>
<li><p><code>url</code> (<code>null</code> or double quoted string)</p> <li><p><code>url</code> (<code>null</code> or double quoted string)</p>
<ul> <ul>
<li>The primary <strong>URL</strong> of this author, or <code>null</code> if not provided.</li> <li>The primary <strong>URL</strong> of this author, or <code>null</code> if not provided.</li>
<li>The URL must start with <code>http://</code> or <code>https://</code> and have more text after it;
we do not even try and detect a hostname.</li>
</ul></li> </ul></li>
<li><p><code>alt_url</code> (<code>null</code> or double quoted string)</p> <li><p><code>alt_url</code> (<code>null</code> or double quoted string)</p>
<ul> <ul>
<li>The <strong>alt URL</strong> of this author, or <code>null</code> if not provided.</li> <li>The <strong>alt URL</strong> of this author, or <code>null</code> if not provided.</li>
<li>The URL must start with <code>http://</code> or <code>https://</code> and have more text after it;
we do not even try and detect a hostname.</li>
</ul></li> </ul></li>
<li><p><code>mastodon</code> (<code>null</code> or double quoted string)</p> <li><p><code>mastodon</code> (<code>null</code> or double quoted string)</p>
<ul> <ul>
@@ -1931,7 +1967,7 @@ provided.</li>
<ul> <ul>
<li>This author’s <strong>affiliation</strong>, if any, or <code>null</code> if not provided.</li> <li>This author’s <strong>affiliation</strong>, if any, or <code>null</code> if not provided.</li>
</ul> </ul>
<p><strong>NOTE:</strong> if provided, the length of the <strong>affiliation</strong> <strong>MUST</strong> be within <p><strong>IMPORTANT:</strong> if provided, the length of the <strong>affiliation</strong> <strong>MUST</strong> be within
the range of 1 <strong>THROUGH</strong> <code>MAX_AFFILIATION_LEN</code> (see the range of 1 <strong>THROUGH</strong> <code>MAX_AFFILIATION_LEN</code> (see
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a>
in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>). If in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>). If
@@ -1974,7 +2010,7 @@ for more information.</p></li>
FAQ on “<a href="#info_json">.info.json</a>” FAQ on “<a href="#info_json">.info.json</a>”
for more information.</li> for more information.</li>
</ul> </ul>
<p><strong>NOTE:</strong> this <strong>MUST</strong> be greater than or equal to <code>MIN_TIMESTAMP</code> (see <p><strong>IMPORTANT:</strong> this <strong>MUST</strong> be greater than or equal to <code>MIN_TIMESTAMP</code> (see
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a>
in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>). If in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>). If
this is not the case your submission <strong>WILL BE</strong> rejected.</p></li> this is not the case your submission <strong>WILL BE</strong> rejected.</p></li>
@@ -1983,7 +2019,7 @@ this is not the case your submission <strong>WILL BE</strong> rejected.</p></li>
<li>Microseconds since the tstamp (seconds since epoch when <code>.auth.json</code> was <li>Microseconds since the tstamp (seconds since epoch when <code>.auth.json</code> was
formed - see <code>gettimeofday(2)</code>) second.</li> formed - see <code>gettimeofday(2)</code>) second.</li>
</ul> </ul>
<p><strong>NOTE:</strong> this <strong>MUST</strong> be within the range <code>MIN_FORMED_TIMESTAMP_USEC</code> <p><strong>IMPORTANT:</strong> this <strong>MUST</strong> be within the range <code>MIN_FORMED_TIMESTAMP_USEC</code>
<strong>THROUGH</strong> <code>MAX_FORMED_TIMESTAMP_USEC</code> and is validated by <strong>THROUGH</strong> <code>MAX_FORMED_TIMESTAMP_USEC</code> and is validated by
<code>test_formed_timestamp_usec()</code> in <code>test_formed_timestamp_usec()</code> in
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/entry_util.c">soup/entry_util.c</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/entry_util.c">soup/entry_util.c</a>
@@ -1994,7 +2030,7 @@ submission <strong>WILL BE</strong> rejected!</p></li>
<ul> <ul>
<li><code>"Thu Jan 01 00:00:00 1970 UTC"</code> (<code>gettimeofday(2)</code> epoch).</li> <li><code>"Thu Jan 01 00:00:00 1970 UTC"</code> (<code>gettimeofday(2)</code> epoch).</li>
</ul> </ul>
<p><strong>NOTE:</strong> this <strong>MUST</strong> be <code>"Thu Jan 01 00:00:00 1970 UTC"</code> which is <code>#define</code>d <p><strong>IMPORTANT:</strong> this <strong>MUST</strong> be <code>"Thu Jan 01 00:00:00 1970 UTC"</code> which is <code>#define</code>d
as <code>TIMESTAMP_EPOCH</code> in as <code>TIMESTAMP_EPOCH</code> in
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a>
in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If
@@ -2003,30 +2039,35 @@ this is not the case your submission <strong>WILL BE</strong> rejected!</p></li>
<ul> <ul>
<li>Minimum number of second since epoch for <strong>this</strong> IOCCC.</li> <li>Minimum number of second since epoch for <strong>this</strong> IOCCC.</li>
</ul> </ul>
<p><strong>NOTE:</strong> this <strong>MUST</strong> be &gt;= <code>MIN_TIMESTAMP</code> defined in <p><strong>IMPORTANT:</strong> this <strong>MUST</strong> be &gt;= <code>MIN_TIMESTAMP</code> defined in
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a>
in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If
this is not the case your submission <strong>WILL BE</strong> rejected!</p></li> this is not the case your submission <strong>WILL BE</strong> rejected!</p></li>
</ul> </ul>
<p>This file will be verified with the <code>chkentry(1)</code> tool and if there are any <p>This file will be validated with the <code>chkentry(1)</code> tool and if there are any
problems <strong>it is an error</strong>. If there is an error the tarball will <strong>NOT</strong> be problems with it or the submission directory, <strong>it is an error</strong>. If there is an
formed by <code>mkiocccentry</code>; otherwise the <code>txzchk(1)</code> tool will be executed on the error the tarball will <strong>NOT</strong> be formed by <code>mkiocccentry</code>; otherwise the
tarball.</p> <code>txzchk(1)</code> tool will be executed on the tarball.</p>
<p>This file will <strong>NOT</strong> be looked at unless the submission wins! Nonetheless, <p>This file will <strong>NOT</strong> be looked at unless the submission wins! Nonetheless, the
<code>chkentry(1)</code> <strong>WILL BE</strong> used on the file as part of the judging process.</p> file <strong>MUST</strong> be present in the submission directory and it <strong>MUST</strong> be valid
JSON and it <strong>MUST</strong> pass all IOCCC semantics checks and all other checks
<code>chkentry(1)</code> perform. <code>chkentry(1)</code> is used by <code>mkiocccentry(1)</code> and the judges
will use it on the submission directory as part of the judging process.</p>
<p>At the risk of stating the obvious, if your <code>.auth.json</code> file is invalid JSON or <p>At the risk of stating the obvious, if your <code>.auth.json</code> file is invalid JSON or
is reported invalid by <code>chkentry</code> your submission will almost certainly be is reported invalid by <code>chkentry(1)</code>, or if your submission directory is
reported invalid by <code>chkentry(1)</code>, your submission will almost certainly be
rejected for violating the <a href="next/rules.html">Rules</a> and in particular <a href="next/rules.html#rule17">Rule rejected for violating the <a href="next/rules.html">Rules</a> and in particular <a href="next/rules.html#rule17">Rule
17</a>.</p> 17</a>.</p>
<p>An obvious example where <code>chkentry</code> would fail to validate <code>.auth.json</code> is if <p>An obvious example where <code>chkentry(1)</code> would fail to validate <code>.auth.json</code> is if
there is a mismatch of type in the JSON file with what is expected, for there is a mismatch of type in the JSON file with what is expected, for
instance, if in <code>.auth.json</code> the <code>no_comment</code> that we chose to not comment on is instance, if in <code>.auth.json</code> the <code>no_comment</code> that we chose to not comment on is
not a string. Another obvious example is when things are out of range (see above not a string or is the wrong string. Another obvious example is when things are
for list). Two more examples would be if a field is missing or if an unknown out of range (see above for list). Two more examples would be if a field is
filed is in the file. In these cases (and any others that must be established as missing or if an unknown filed is in the file. In these cases (and any others
valid by <code>chkentry</code>) your submission would be rejected for violating <a href="next/rules.html#rule17">Rule that must be established as valid by <code>chkentry(1)</code>) your submission would be
17</a> and in particular because <code>chkentry</code> would not rejected for violating <a href="next/rules.html#rule17">Rule 17</a> and in particular
validate the <code>.auth.json</code> file.</p> because <code>chkentry(1)</code> would not validate the <code>.auth.json</code> file (and maybe other
things too).</p>
<p>If you wish to <strong>verify</strong> that your <code>.auth.json</code> file is valid <strong>JSON</strong> then see the <p>If you wish to <strong>verify</strong> that your <code>.auth.json</code> file is valid <strong>JSON</strong> then see the
FAQ on “<a href="#validating_json">validating JSON documents</a>”.</p> FAQ on “<a href="#validating_json">validating JSON documents</a>”.</p>
<p>Jump to: <a href="#">top</a></p> <p>Jump to: <a href="#">top</a></p>
@@ -2066,7 +2107,7 @@ for more information.</p>
<ul> <ul>
<li>The current version of the <code>.info.json</code> files.</li> <li>The current version of the <code>.info.json</code> files.</li>
</ul> </ul>
<p><strong>NOTE:</strong> this <strong>MUST</strong> match <strong>THIS</strong> IOCCC’s <code>.info.json</code> version, defined as <p><strong>IMPORTANT:</strong> this <strong>MUST</strong> match <strong>THIS</strong> IOCCC’s <code>.info.json</code> version, defined as
<code>INFO_VERSION</code> in <code>INFO_VERSION</code> in
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h">soup/version.h</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h">soup/version.h</a>
in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If
@@ -2075,7 +2116,7 @@ this is not the case your submission <strong>WILL BE</strong> rejected!</p></li>
<ul> <ul>
<li>Which contest number this is (e.g. 1 for 1984, 2 for 1985, 27 for 2020).</li> <li>Which contest number this is (e.g. 1 for 1984, 2 for 1985, 27 for 2020).</li>
</ul> </ul>
<p><strong>NOTE:</strong> this <strong>MUST</strong> match <strong>THIS</strong> IOCCC’s contest value, defined as <p><strong>IMPORTANT:</strong> this <strong>MUST</strong> match <strong>THIS</strong> IOCCC’s contest value, defined as
<code>IOCCC_CONTEST</code> in <code>IOCCC_CONTEST</code> in
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a>
in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If
@@ -2086,7 +2127,7 @@ this is not the case your submission <strong>WILL BE</strong> rejected!</p></li>
</ul> </ul>
<p><strong>NOTE:</strong> sometimes an IOCCC year runs into another year and the contest year <p><strong>NOTE:</strong> sometimes an IOCCC year runs into another year and the contest year
might not match when it ends.</p> might not match when it ends.</p>
<p><strong>NOTE:</strong> this <strong>MUST</strong> match <strong>THIS</strong> IOCCC’s contest, defined as <p><strong>IMPORTANT:</strong> this <strong>MUST</strong> match <strong>THIS</strong> IOCCC’s contest, defined as
<code>IOCCC_YEAR</code> in <code>IOCCC_YEAR</code> in
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a>
in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If
@@ -2095,7 +2136,7 @@ this is not the case your submission <strong>WILL BE</strong> rejected!</p></li>
<ul> <ul>
<li>The version of <code>mkiocccentry</code> that formed this <code>.auth.json</code> file.</li> <li>The version of <code>mkiocccentry</code> that formed this <code>.auth.json</code> file.</li>
</ul> </ul>
<p><strong>NOTE:</strong> this <strong>MUST</strong> match <strong>THIS</strong> IOCCC’s <code>mkiocccentry</code> version, <p><strong>IMPORTANT:</strong> this <strong>MUST</strong> match <strong>THIS</strong> IOCCC’s <code>mkiocccentry</code> version,
defined as <code>MKIOCCCENTRY_VERSION</code> in defined as <code>MKIOCCCENTRY_VERSION</code> in
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h">soup/version.h</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h">soup/version.h</a>
in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If
@@ -2104,17 +2145,17 @@ this is not the case your submission <strong>WILL BE</strong> rejected!</p></li>
<ul> <ul>
<li>The version of <code>iocccsize</code> that was used for this <code>.info.json</code> file.</li> <li>The version of <code>iocccsize</code> that was used for this <code>.info.json</code> file.</li>
</ul> </ul>
<p><strong>NOTE:</strong> this <strong>MUST</strong> match <strong>THIS</strong> IOCCC’s <code>iocccentry</code> version, <p><strong>IMPORTANT:</strong> this <strong>MUST</strong> match <strong>THIS</strong> IOCCC’s <code>iocccentry</code> version,
defined as <code>IOCCCSIZE_VERSION</code> in defined as <code>IOCCCSIZE_VERSION</code> in
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h">soup/version.h</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h">soup/version.h</a>
in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If
this is not the case your submission <strong>WILL BE</strong> rejected!</p></li> this is not the case your submission <strong>WILL BE</strong> rejected!</p></li>
<li><p><code>chkentry_version</code> (double quoted string)</p> <li><p><code>chkentry_version</code> (double quoted string)</p>
<ul> <ul>
<li>The version of <code>chkentry</code> that was used to validate this <code>.info.json</code>, <li>The version of <code>chkentry</code> that was used to validate the submission
assuming that it was created by <code>mkiocccentry</code>.</li> directory, including the <code>.info.json</code> file.</li>
</ul> </ul>
<p><strong>NOTE:</strong> this <strong>MUST</strong> match <strong>THIS</strong> IOCCC’s <code>chkentry</code> version, defined <p><strong>IMPORTANT:</strong> this <strong>MUST</strong> match <strong>THIS</strong> IOCCC’s <code>chkentry</code> version, defined
as <code>CHKENTRY_VERSION</code> in as <code>CHKENTRY_VERSION</code> in
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h">soup/version.h</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h">soup/version.h</a>
in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If
@@ -2124,7 +2165,7 @@ this is not the case your submission <strong>WILL BE</strong> rejected!</p></li>
<li>The version of <code>fnamchk</code> that <code>txzchk</code> uses to validate the filename of <li>The version of <code>fnamchk</code> that <code>txzchk</code> uses to validate the filename of
the xz compressed tarball.</li> the xz compressed tarball.</li>
</ul> </ul>
<p><strong>NOTE:</strong> this <strong>MUST</strong> match <strong>THIS</strong> IOCCC’s <code>fnamchk</code> version, defined <p><strong>IMPORTANT:</strong> this <strong>MUST</strong> match <strong>THIS</strong> IOCCC’s <code>fnamchk</code> version, defined
as <code>FNAMCHK_VERSION</code> in as <code>FNAMCHK_VERSION</code> in
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h">soup/version.h</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h">soup/version.h</a>
in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If
@@ -2133,7 +2174,7 @@ this is not the case your submission <strong>WILL BE</strong> rejected!</p></li>
<ul> <ul>
<li>The version of <code>txzchk</code> used to validate the xz compressed tarball.</li> <li>The version of <code>txzchk</code> used to validate the xz compressed tarball.</li>
</ul> </ul>
<p><strong>NOTE:</strong> this <strong>MUST</strong> match <strong>THIS</strong> IOCCC’s <code>txzchk</code> version, defined <p><strong>IMPORTANT:</strong> this <strong>MUST</strong> match <strong>THIS</strong> IOCCC’s <code>txzchk</code> version, defined
as <code>TXZCHK_VERSION</code> in as <code>TXZCHK_VERSION</code> in
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h">soup/version.h</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h">soup/version.h</a>
in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If
@@ -2143,15 +2184,12 @@ this is not the case your submission <strong>WILL BE</strong> rejected!</p></li>
<li>The IOCCC contestant ID used as a username in the form of <strong>in the form of <li>The IOCCC contestant ID used as a username in the form of <strong>in the form of
a UUID</strong> and submission number; see the <a href="next/rules.html">rules</a> for more details a UUID</strong> and submission number; see the <a href="next/rules.html">rules</a> for more details
on this, and in particular <a href="next/rules.html#rule17">Rule 17</a>.</li> on this, and in particular <a href="next/rules.html#rule17">Rule 17</a>.</li>
</ul> </ul></li>
<p><strong>NOTE:</strong> if the contest ID is <strong>NOT</strong> in this format then <code>fnamchk</code> will
report it as an <strong>error</strong> and your submission <strong>WILL BE</strong> rejected for
violating <a href="next/rules.html#rule17">Rule 17</a>!</p></li>
<li><p><code>submit_slot</code> (number)</p> <li><p><code>submit_slot</code> (number)</p>
<ul> <ul>
<li>The submission number.</li> <li>The submission number.</li>
</ul> </ul>
<p><strong>NOTE:</strong> this <strong>MUST</strong> be within the range of 0 <strong>THROUGH</strong> <p><strong>IMPORTANT:</strong> this <strong>MUST</strong> be within the range of 0 <strong>THROUGH</strong>
<code>MAX_SUBMIT_SLOT</code> (see <code>MAX_SUBMIT_SLOT</code> (see
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a>
in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>). If in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>). If
@@ -2164,7 +2202,7 @@ rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!</p></li>
in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>) that in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>) that
matches the regexp <code>[a-z0-9][a-z0-9_+-]*</code>.</li> matches the regexp <code>[a-z0-9][a-z0-9_+-]*</code>.</li>
</ul> </ul>
<p><strong>NOTE:</strong> if this is <strong>NOT</strong> the case you stand a great risk of having your submission <p><strong>IMPORTANT:</strong> if this is <strong>NOT</strong> the case you stand a great risk of having your submission
rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!</p></li> rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!</p></li>
<li><p><code>abstract</code> (double quoted string)</p> <li><p><code>abstract</code> (double quoted string)</p>
<ul> <ul>
@@ -2174,33 +2212,34 @@ rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!</p></li>
in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>)</li> in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>)</li>
</ul> </ul>
<p>The <code>abstract</code> may not contain a <code>;</code> (semicolon), nor <code>&amp;</code> (ampersand), nor <code>,</code> (comma).</p> <p>The <code>abstract</code> may not contain a <code>;</code> (semicolon), nor <code>&amp;</code> (ampersand), nor <code>,</code> (comma).</p>
<p><strong>NOTE:</strong> if your abstract is 0 in length or &gt; the maximum abstract length you <p><strong>IMPORTANT:</strong> if your abstract is 0 in length or &gt; the maximum abstract length you
stand a great risk of having your submission rejected for violating <a href="next/rules.html#rule17">Rule stand a great risk of having your submission rejected for violating <a href="next/rules.html#rule17">Rule
17</a>!</p></li> 17</a>!</p></li>
<li><p><code>tarball</code> (double quoted string)</p> <li><p><code>tarball</code> (double quoted string)</p>
<ul> <ul>
<li>The xz compressed tarball filename.</li> <li>The xz compressed tarball filename.</li>
</ul> </ul>
<p><strong>NOTE:</strong> this <strong>MUST</strong> match the actual tarball’s <strong>filename</strong> in order for <p><strong>IMPORTANT:</strong> this <strong>MUST</strong> match the actual tarball’s <strong>filename</strong> in order for
this to be valid. If there is a mismatch you stand a great risk of having this to be valid. If there is a mismatch you stand a great risk of having
your submission rejected for violating <a href="next/rules.html#rule17">Rule 17</a>! your submission rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!
Moreover, it is possible that <code>txzchk</code> will report a problem through Moreover, it is possible that <code>txzchk</code> will report a problem through
<code>fnamchk(1)</code> which also puts you at great risk of violating <a href="next/rules.html#rule17">Rule <code>fnamchk(1)</code> which also puts you at great risk of violating <a href="next/rules.html#rule17">Rule
17</a>. If <code>txzchk</code> does not detect this, though, it 17</a>. <code>txzchk</code> will use the output of <code>fnamchk</code> to
does not mean it’s a bug but rather that the directory in the tarball obtain the correct directory <em>name</em> in the tarball; if <code>fnamchk</code> fails to
matches the filename.</p></li> validate your filename, or if you have the wrong directory name in the
tarball, this will be flaggd.</p></li>
<li><p><code>rule_2a_size</code> (number)</p> <li><p><code>rule_2a_size</code> (number)</p>
<ul> <ul>
<li>The size calculated of <a href="next/rules.html#rule2a">Rule 2a</a>.</li> <li>The size calculated of <a href="next/rules.html#rule2a">Rule 2a</a>.</li>
</ul> </ul>
<p><strong>NOTE:</strong> if this violates <a href="next/rules.html#rule2a">Rule 2a</a> you stand a great <p><strong>IMPORTANT:</strong> if this violates <a href="next/rules.html#rule2a">Rule 2a</a> you stand a great
chance of having your submission rejected for violating the chance of having your submission rejected for violating the
<a href="next/rules.html">Rules</a>!</p></li> <a href="next/rules.html">Rules</a>!</p></li>
<li><p><code>rule_2b_size</code> (number)</p> <li><p><code>rule_2b_size</code> (number)</p>
<ul> <ul>
<li>The size calculated of <a href="next/rules.html#rule2b">Rule 2b</a>.</li> <li>The size calculated of <a href="next/rules.html#rule2b">Rule 2b</a>.</li>
</ul> </ul>
<p><strong>NOTE:</strong> if this violates <a href="next/rules.html#rule2b">Rule 2b</a> you stand a great <p><strong>IMPORTANT:</strong> if this violates <a href="next/rules.html#rule2b">Rule 2b</a> you stand a great
chance of having your submission rejected for violating the chance of having your submission rejected for violating the
<a href="next/rules.html">Rules</a>!</p></li> <a href="next/rules.html">Rules</a>!</p></li>
<li><p><code>empty_override</code> (boolean)</p> <li><p><code>empty_override</code> (boolean)</p>
@@ -2212,7 +2251,7 @@ chance of having your submission rejected for violating the
<li><code>true</code> if user overrides warning of <a href="next/rules.html#rule2a">Rule 2a</a> <li><code>true</code> if user overrides warning of <a href="next/rules.html#rule2a">Rule 2a</a>
violation, else <code>false</code>.</li> violation, else <code>false</code>.</li>
</ul> </ul>
<p><strong>NOTE:</strong> if the <a href="next/rules.html#rule2a">Rule 2a</a> calculated size is <strong>NOT</strong> <p><strong>IMPORTANT:</strong> if the <a href="next/rules.html#rule2a">Rule 2a</a> calculated size is <strong>NOT</strong>
violated but this is <code>true</code> then you stand a good chance of having your violated but this is <code>true</code> then you stand a good chance of having your
submission rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!</p></li> submission rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!</p></li>
<li><p><code>rule_2a_mismatch</code> (boolean)</p> <li><p><code>rule_2a_mismatch</code> (boolean)</p>
@@ -2225,7 +2264,7 @@ same as the file size.</li>
<li><code>true</code> if user overrides warning of <a href="next/rules.html#rule2b">Rule 2b</a> <li><code>true</code> if user overrides warning of <a href="next/rules.html#rule2b">Rule 2b</a>
violation, else <code>false</code>.</li> violation, else <code>false</code>.</li>
</ul> </ul>
<p><strong>NOTE:</strong> if the <a href="next/rules.html#rule2b">Rule 2b</a> calculated size is <strong>NOT</strong> <p><strong>IMPORTANT:</strong> if the <a href="next/rules.html#rule2b">Rule 2b</a> calculated size is <strong>NOT</strong>
violated but this is <code>true</code> then you stand a good chance of having your violated but this is <code>true</code> then you stand a good chance of having your
submission rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!</p></li> submission rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!</p></li>
<li><p><code>highbit_warning</code> (boolean)</p> <li><p><code>highbit_warning</code> (boolean)</p>
@@ -2249,7 +2288,7 @@ bit set - octet value &gt;= 128); see <a href="next/rules.html#rule13">Rule 13</
<li><code>true</code> if <code>prog.c</code> triggered a word buffer overflow (see <code>iocccsize</code>), <li><code>true</code> if <code>prog.c</code> triggered a word buffer overflow (see <code>iocccsize</code>),
else <code>false</code>.</li> else <code>false</code>.</li>
</ul> </ul>
<p><strong>NOTE:</strong> this does <strong>NOT</strong> mean that your code has been checked for buffer <p><strong>IMPORTANT:</strong> this does <strong>NOT</strong> mean that your code has been checked for buffer
overflows in general.</p></li> overflows in general.</p></li>
<li><p><code>ungetc_warning</code> (boolean)</p> <li><p><code>ungetc_warning</code> (boolean)</p>
<ul> <ul>
@@ -2260,7 +2299,7 @@ overflows in general.</p></li>
<li><code>true</code> if the user overrides any warnings about an incomplete/incorrect <li><code>true</code> if the user overrides any warnings about an incomplete/incorrect
<code>Makefile</code> file, else <code>false</code>.</li> <code>Makefile</code> file, else <code>false</code>.</li>
</ul> </ul>
<p><strong>NOTE:</strong> if the <code>Makefile</code> file has no problems and this is <code>true</code> then <p><strong>IMPORTANT:</strong> if the <code>Makefile</code> file has no problems and this is <code>true</code> then
you stand a good chance of having your submission rejected for violating you stand a good chance of having your submission rejected for violating
<a href="next/rules.html#rule17">Rule 17</a>!</p> <a href="next/rules.html#rule17">Rule 17</a>!</p>
<p>See the <p>See the
@@ -2270,7 +2309,7 @@ for more information.</p></li>
<ul> <ul>
<li><code>true</code> if the first rule in the <code>Makefile</code> file is <code>all</code>, else <code>false</code>.</li> <li><code>true</code> if the first rule in the <code>Makefile</code> file is <code>all</code>, else <code>false</code>.</li>
</ul> </ul>
<p><strong>NOTE:</strong> if the <code>Makefile</code> file does <strong>NOT</strong> have an <code>all</code> rule or it is not <p><strong>IMPORTANT:</strong> if the <code>Makefile</code> file does <strong>NOT</strong> have an <code>all</code> rule or it is not
first and this boolean is <code>true</code> then you stand a good chance of having your first and this boolean is <code>true</code> then you stand a good chance of having your
submission rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!</p> submission rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!</p>
<p>See the <p>See the
@@ -2280,7 +2319,7 @@ for more information.</p></li>
<ul> <ul>
<li><code>true</code> if the <code>Makefile</code> file has an <code>all</code> rule, else <code>false</code>.</li> <li><code>true</code> if the <code>Makefile</code> file has an <code>all</code> rule, else <code>false</code>.</li>
</ul> </ul>
<p><strong>NOTE:</strong> if the <code>Makefile</code> file does <strong>NOT</strong> have an <code>all</code> rule and this <p><strong>IMPORTANT:</strong> if the <code>Makefile</code> file does <strong>NOT</strong> have an <code>all</code> rule and this
boolean is <code>true</code>, or if it does <strong>NOT</strong> have an <code>all</code> rule but boolean is <code>true</code>, or if it does <strong>NOT</strong> have an <code>all</code> rule but
<code>first_rule_is_all</code> is <code>true</code> then you stand a good chance of having your <code>first_rule_is_all</code> is <code>true</code> then you stand a good chance of having your
submission rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!</p> submission rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!</p>
@@ -2291,7 +2330,7 @@ for more information.</p></li>
<ul> <ul>
<li><code>true</code> if the <code>Makefile</code> file has a <code>clean</code> rule, else <code>false</code>.</li> <li><code>true</code> if the <code>Makefile</code> file has a <code>clean</code> rule, else <code>false</code>.</li>
</ul> </ul>
<p><strong>NOTE:</strong> if the <code>Makefile</code> file does <strong>NOT</strong> have a <code>clean</code> rule and this <p><strong>IMPORTANT:</strong> if the <code>Makefile</code> file does <strong>NOT</strong> have a <code>clean</code> rule and this
boolean is <code>true</code> then you stand a good chance of having your submission boolean is <code>true</code> then you stand a good chance of having your submission
rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!</p> rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!</p>
<p>See the <p>See the
@@ -2301,7 +2340,7 @@ for more information.</p></li>
<ul> <ul>
<li><code>true</code> if the <code>Makefile</code> file has a <code>clobber</code> rule, else <code>false</code>.</li> <li><code>true</code> if the <code>Makefile</code> file has a <code>clobber</code> rule, else <code>false</code>.</li>
</ul> </ul>
<p><strong>NOTE:</strong> if the <code>Makefile</code> file does <strong>NOT</strong> have an <code>clobber</code> rule and this <p><strong>IMPORTANT:</strong> if the <code>Makefile</code> file does <strong>NOT</strong> have an <code>clobber</code> rule and this
boolean is <code>true</code> then you stand a good chance of having your submission boolean is <code>true</code> then you stand a good chance of having your submission
rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!</p> rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!</p>
<p>See the <p>See the
@@ -2311,7 +2350,7 @@ for more information.</p></li>
<ul> <ul>
<li><code>true</code> if the <code>Makefile</code> file has a <code>try</code> rule, else <code>false</code>.</li> <li><code>true</code> if the <code>Makefile</code> file has a <code>try</code> rule, else <code>false</code>.</li>
</ul> </ul>
<p><strong>NOTE:</strong> if the <code>Makefile</code> file does <strong>NOT</strong> have an <code>try</code> rule and this <p><strong>IMPORTANT:</strong> if the <code>Makefile</code> file does <strong>NOT</strong> have a <code>try</code> rule and this
boolean is <code>true</code> then you stand a good chance of having your submission boolean is <code>true</code> then you stand a good chance of having your submission
rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!</p> rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!</p>
<p>See the <p>See the
@@ -2321,7 +2360,7 @@ for more information.</p></li>
<ul> <ul>
<li><code>true</code> if the <code>test</code> ID was used to form the tarball, else <code>false</code>.</li> <li><code>true</code> if the <code>test</code> ID was used to form the tarball, else <code>false</code>.</li>
</ul> </ul>
<p><strong>NOTE:</strong> if this is <code>true</code> then this may <strong>NOT</strong> be submitted to the <p><strong>IMPORTANT:</strong> if this is <code>true</code> then this may <strong>NOT</strong> be submitted to the
contest! Please do <strong>NOT</strong> email the <a href="judges.html">Judges</a> your submission!</p></li> contest! Please do <strong>NOT</strong> email the <a href="judges.html">Judges</a> your submission!</p></li>
</ul> </ul>
<p>Next comes the <code>manifest</code> <strong>array</strong> which <strong>MUST</strong> have AT LEAST the following. <p>Next comes the <code>manifest</code> <strong>array</strong> which <strong>MUST</strong> have AT LEAST the following.
@@ -2337,8 +2376,9 @@ See the
FAQ on “<a href="#info_json">.info.json</a>” FAQ on “<a href="#info_json">.info.json</a>”
for more information.</li> for more information.</li>
</ul> </ul>
<p><strong>NOTE:</strong> if this is <strong>NOT</strong> the case you stand a great chance of having your <p><strong>IMPORTANT:</strong> if this is <strong>NOT</strong> the case you stand a
submission rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!</p></li> great chance of having your submission rejected for violating <a href="next/rules.html#rule17">Rule
17</a>!</p></li>
<li><p><code>auth_JSON</code> (double quoted string)</p> <li><p><code>auth_JSON</code> (double quoted string)</p>
<ul> <ul>
<li>This <code>MUST</code> be <code>".auth.json"</code>, defined as <code>AUTH_JSON_FILENAME</code> in <li>This <code>MUST</code> be <code>".auth.json"</code>, defined as <code>AUTH_JSON_FILENAME</code> in
@@ -2349,7 +2389,7 @@ See the
FAQ on “<a href="#auth_json">.auth.json</a>” FAQ on “<a href="#auth_json">.auth.json</a>”
for more information.</li> for more information.</li>
</ul> </ul>
<p><strong>NOTE:</strong> if this is <strong>NOT</strong> the case you stand a great chance of having your <p><strong>IMPORTANT:</strong> if this is <strong>NOT</strong> the case you stand a great chance of having your
submission rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!</p></li> submission rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!</p></li>
<li><p><code>c_src</code> (double quoted string)</p> <li><p><code>c_src</code> (double quoted string)</p>
<ul> <ul>
@@ -2358,10 +2398,8 @@ submission rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!<
in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>, and in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>, and
is your submission source code.</li> is your submission source code.</li>
</ul> </ul>
<p><strong>NOTE:</strong> if this is <strong>NOT</strong> the case you stand a great chance of having your <p><strong>IMPORTANT:</strong> if this is <strong>NOT</strong> the case you stand a great chance of having your
submission rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!</p> submission rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!</p></li>
<p><strong>NOTE:</strong> if you provide to <code>mkiocccentry</code> a different filename it will be
copied to <code>prog.c</code>.</p></li>
<li><p><code>Makefile</code> (double quoted string)</p> <li><p><code>Makefile</code> (double quoted string)</p>
<ul> <ul>
<li>This <code>MUST</code> be <code>"Makefile"</code>, defined as <code>MAKEFILE_FILENAME</code> in <li>This <code>MUST</code> be <code>"Makefile"</code>, defined as <code>MAKEFILE_FILENAME</code> in
@@ -2372,10 +2410,8 @@ See the
FAQ on “<a href="#makefile">Makefile</a>” FAQ on “<a href="#makefile">Makefile</a>”
for more information.</li> for more information.</li>
</ul> </ul>
<p><strong>NOTE:</strong> if this is <strong>NOT</strong> the case you stand a great chance of having your <p><strong>IMPORTANT:</strong> if this is <strong>NOT</strong> the case you stand a great chance of having your
submission rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!</p> submission rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!</p></li>
<p><strong>NOTE:</strong> if you provide to <code>mkiocccentry</code> a different filename it will be
copied to <code>Makefile</code>.</p></li>
<li><p><code>remarks</code> (double quoted string)</p> <li><p><code>remarks</code> (double quoted string)</p>
<ul> <ul>
<li>This <code>MUST</code> be <code>"remarks.md"</code>, defined as <code>REMARKS_FILENAME</code> in <li>This <code>MUST</code> be <code>"remarks.md"</code>, defined as <code>REMARKS_FILENAME</code> in
@@ -2386,10 +2422,8 @@ See the
FAQ on “<a href="#remarks_md">remarks.md</a>” FAQ on “<a href="#remarks_md">remarks.md</a>”
for more information.</li> for more information.</li>
</ul> </ul>
<p><strong>NOTE:</strong> if this is <strong>NOT</strong> the case you stand a great chance of having your <p><strong>IMPORTANT:</strong> if this is <strong>NOT</strong> the case you stand a great chance of having your
submission rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!</p> submission rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!</p></li>
<p><strong>NOTE:</strong> if you provide to <code>mkiocccentry</code> a different filename it will be
copied to <code>remarks.md</code>.</p></li>
</ul> </ul>
<p>The <code>manifest</code> <strong>array</strong> also <strong>OPTIONALLY</strong> has one or more of the field:</p> <p>The <code>manifest</code> <strong>array</strong> also <strong>OPTIONALLY</strong> has one or more of the field:</p>
<ul> <ul>
@@ -2397,16 +2431,17 @@ copied to <code>remarks.md</code>.</p></li>
<ul> <ul>
<li>Any additional file that you need or want to include with your submission.</li> <li>Any additional file that you need or want to include with your submission.</li>
</ul> </ul>
<p><strong>NOTE:</strong> this MUST <strong>NOT</strong> match a mandatory filename (see above list) and <p><strong>IMPORTANT:</strong> this MUST <strong>NOT</strong> match a mandatory filename (see above list)
<code>chkentry</code> will verify this for you; it is <strong>ALSO</strong> an <strong>error</strong> if the and <code>chkentry</code> will verify this for you; it is <strong>ALSO</strong> an <strong>error</strong> if the
filenames are not unique. In these cases you stand a great risk of having filenames are not unique, not POSIX plus + safe chars only, if they are the
your submission rejected for violating <a href="next/rules.html#rule17">Rule 17</a>! On wrong permission and various other things. In these cases you stand a great
the other hand, <strong>ONLY</strong> <code>mkiocccentry</code> will verify that the files exist and risk of having your submission rejected for violating <a href="next/rules.html#rule17">Rule
can be read; <code>txzchk(1)</code> will <strong>NOT</strong> do this for you as it only <strong>LISTS</strong> 17</a>! On the other hand, <strong>ONLY</strong> <code>mkiocccentry</code> will
the tarball: it does <strong>NOT</strong> extract it. Even so, the <a href="judges.html">Judges</a> verify that the files exist and can be read; <code>txzchk(1)</code> will <strong>NOT</strong> do
<strong>WILL</strong> extract the tarball and if a file listed in the manifest does not this for you as it only <strong>LISTS</strong> the tarball: it does <strong>NOT</strong> extract it.
exist your submission will very likely be rejected for not being as Even so, the <a href="judges.html">Judges</a> <strong>WILL</strong> extract the tarball and if a
documented!</p></li> file listed in the manifest does not exist your submission will very likely
be rejected for not being as documented!</p></li>
</ul> </ul>
<p>Finally, after the <code>manifest</code> <strong>array</strong>, the following fields <strong>MUST</strong> exist:</p> <p>Finally, after the <code>manifest</code> <strong>array</strong>, the following fields <strong>MUST</strong> exist:</p>
<ul> <ul>
@@ -2414,7 +2449,7 @@ documented!</p></li>
<ul> <ul>
<li>Seconds since epoch when JSON (<code>.auth.json</code> or <code>.info.json</code>) file was formed (see <code>gettimeofday(2)</code>).</li> <li>Seconds since epoch when JSON (<code>.auth.json</code> or <code>.info.json</code>) file was formed (see <code>gettimeofday(2)</code>).</li>
</ul> </ul>
<p><strong>NOTE:</strong> this <strong>MUST</strong> be greater than or equal to <code>MIN_TIMESTAMP</code> (see <p><strong>IMPORTANT:</strong> this <strong>MUST</strong> be greater than or equal to <code>MIN_TIMESTAMP</code> (see
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a>
in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>). If in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>). If
this is not the case your submission <strong>WILL BE</strong> rejected.</p></li> this is not the case your submission <strong>WILL BE</strong> rejected.</p></li>
@@ -2423,7 +2458,7 @@ this is not the case your submission <strong>WILL BE</strong> rejected.</p></li>
<li>Microseconds since the tstamp (seconds since epoch when <code>.auth.json</code> was <li>Microseconds since the tstamp (seconds since epoch when <code>.auth.json</code> was
formed - see <code>gettimeofday(2)</code>) second.</li> formed - see <code>gettimeofday(2)</code>) second.</li>
</ul> </ul>
<p><strong>NOTE:</strong> this <strong>MUST</strong> be within the range <code>MIN_FORMED_TIMESTAMP_USEC</code> <p><strong>IMPORTANT:</strong> this <strong>MUST</strong> be within the range <code>MIN_FORMED_TIMESTAMP_USEC</code>
<strong>THROUGH</strong> <code>MAX_FORMED_TIMESTAMP_USEC</code> and is validated by <strong>THROUGH</strong> <code>MAX_FORMED_TIMESTAMP_USEC</code> and is validated by
<code>test_formed_timestamp_usec()</code> in <code>test_formed_timestamp_usec()</code> in
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/entry_util.c">soup/entry_util.c</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/entry_util.c">soup/entry_util.c</a>
@@ -2434,7 +2469,7 @@ submission <strong>WILL BE</strong> rejected!</p></li>
<ul> <ul>
<li><code>"Thu Jan 01 00:00:00 1970 UTC"</code> (<code>gettimeofday(2)</code> epoch).</li> <li><code>"Thu Jan 01 00:00:00 1970 UTC"</code> (<code>gettimeofday(2)</code> epoch).</li>
</ul> </ul>
<p><strong>NOTE:</strong> this <strong>MUST</strong> be <code>"Thu Jan 01 00:00:00 1970 UTC"</code> which is <code>#define</code>d <p><strong>IMPORTANT:</strong> this <strong>MUST</strong> be <code>"Thu Jan 01 00:00:00 1970 UTC"</code> which is <code>#define</code>d
as <code>TIMESTAMP_EPOCH</code> in as <code>TIMESTAMP_EPOCH</code> in
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a>
in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If
@@ -2443,25 +2478,26 @@ this is not the case your submission <strong>WILL BE</strong> rejected!</p></li>
<ul> <ul>
<li>Minimum number of second since epoch for <strong>this</strong> IOCCC.</li> <li>Minimum number of second since epoch for <strong>this</strong> IOCCC.</li>
</ul> </ul>
<p><strong>NOTE:</strong> this <strong>MUST</strong> be &gt;= <code>MIN_TIMESTAMP</code> defined in <p><strong>IMPORTANT:</strong> this <strong>MUST</strong> be &gt;= <code>MIN_TIMESTAMP</code> defined in
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a>
in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If in the <a href="https://github.com/ioccc-src/mkiocccentry/">mkiocccentry repo</a>. If
this is not the case your submission <strong>WILL BE</strong> rejected!</p></li> this is not the case your submission <strong>WILL BE</strong> rejected!</p></li>
</ul> </ul>
<p>This file will be verified with the <code>chkentry(1)</code> tool and if there are any <p>This file will be validated with the <code>chkentry(1)</code> tool and if there are any
problems <strong>it is an error</strong> and the tarball will <strong>NOT</strong> be formed by problems with it or the submission directory, <strong>it is an error</strong>. If there is an
<code>mkiocccentry</code>; otherwise the <code>txzchk(1)</code> tool will be executed on the tarball.</p> error the tarball will <strong>NOT</strong> be formed by <code>mkiocccentry</code>; otherwise the
<code>txzchk(1)</code> tool will be executed on the tarball.</p>
<p>The <a href="judges.html">Judges</a> <strong>WILL</strong> use <code>chkentry(1)</code> on this file during the <p>The <a href="judges.html">Judges</a> <strong>WILL</strong> use <code>chkentry(1)</code> on this file during the
judging process and if it does not pass your submission <strong>WILL BE</strong> rejected.</p> judging process and if it does not pass your submission <strong>WILL BE</strong> rejected.</p>
<p>An obvious example where <code>chkentry</code> would fail to validate <code>.info.json</code> is if <p>An obvious example where <code>chkentry</code> would fail to validate <code>.info.json</code> is if
there is a mismatch of type in the JSON file with what is expected, for there is a mismatch of type in the JSON file with what is expected, for
instance, if in <code>.info.json</code> the <code>no_comment</code> that we chose to not comment on is instance, if in <code>.info.json</code> the <code>no_comment</code> that we chose to not comment on is
not a string. Another obvious example is when things are out of range (see above not a string or is the wrong string. Another obvious example is when things are
for list). Two more examples would be if a field is missing or if an unknown out of range (see above for list). Two more examples would be if a field is
filed is in the file. In these cases (and any others that must be established as missing or if an unknown filed is in the file. In these cases (and any others
valid by <code>chkentry</code>) your submission would be rejected for violating <a href="next/rules.html#rule17">Rule that must be established as valid by <code>chkentry</code>) your submission would be
17</a> and in particular because <code>chkentry</code> would not rejected for violating <a href="next/rules.html#rule17">Rule 17</a> and in particular
validate the <code>.info.json</code> file.</p> because <code>chkentry</code> would not validate the <code>.info.json</code> file.</p>
<p>If you wish to <strong>verify</strong> that your <code>.info.json</code> file is valid <strong>JSON</strong> then see the <p>If you wish to <strong>verify</strong> that your <code>.info.json</code> file is valid <strong>JSON</strong> then see the
FAQ on “<a href="#validating_json">validating JSON documents</a>”.</p> FAQ on “<a href="#validating_json">validating JSON documents</a>”.</p>
<p>Jump to: <a href="#">top</a></p> <p>Jump to: <a href="#">top</a></p>
@@ -4049,8 +4085,8 @@ below note) this would be advisable.</p>
<p><strong>NOTE</strong>: different versions of <code>clang</code> have other differences as well. For instance <p><strong>NOTE</strong>: different versions of <code>clang</code> have other differences as well. For instance
a defect of <code>clang</code> that required numerous entries to be fixed for clang is that it a defect of <code>clang</code> that required numerous entries to be fixed for clang is that it
requires that <code>main()</code>’s arguments to be of a specific type. However some requires that <code>main()</code>’s arguments to be of a specific type. However some
versions of <code>clang</code> are more strict in the number of args allowed. versions of <code>clang</code> are more strict in the number of args allowed.</p>
Jump to: <a href="#">top</a></p> <p>Jump to: <a href="#">top</a></p>
<hr style="width:50%;text-align:left;margin-left:0"> <hr style="width:50%;text-align:left;margin-left:0">
<hr style="width:50%;text-align:left;margin-left:0"> <hr style="width:50%;text-align:left;margin-left:0">
<div id="running_entries"> <div id="running_entries">
+249 -202
View File
@@ -1,6 +1,6 @@
# IOCCC FAQ Table of Contents # IOCCC FAQ Table of Contents
This is FAQ version **28.2.9 2025-02-12**. This is FAQ version **28.2.10 2025-02-26**.
## 0. [Entering the IOCCC: the bare minimum you need to know](#enter_questions) ## 0. [Entering the IOCCC: the bare minimum you need to know](#enter_questions)
@@ -45,7 +45,7 @@ This is FAQ version **28.2.9 2025-02-12**.
- **Q 3.0**: <a class="normal" href="#mkiocccentry_process">What is the `mkiocccentry(1)` process and what sort of checks does it perform?</a> - **Q 3.0**: <a class="normal" href="#mkiocccentry_process">What is the `mkiocccentry(1)` process and what sort of checks does it perform?</a>
- **Q 3.1**: <a class="normal" href="#txzchk">How can I validate my submission tarball?</a> - **Q 3.1**: <a class="normal" href="#txzchk">How can I validate my submission tarball?</a>
- **Q 3.2**: <a class="normal" href="#fnamchk">What is the `fnamchk` tool?</a> - **Q 3.2**: <a class="normal" href="#fnamchk">What is the `fnamchk` tool?</a>
- **Q 3.3**: <a class="normal" href="#chkentry">How can I validate my `.auth.json` and/or `.info.json` files?</a> - **Q 3.3**: <a class="normal" href="#chkentry">How can I validate my submission directory?</a>
- **Q 3.4**: <a class="normal" href="#auth_json">What is a `.auth.json` file?</a> - **Q 3.4**: <a class="normal" href="#auth_json">What is a `.auth.json` file?</a>
- **Q 3.5**: <a class="normal" href="#info_json">What is a `.info.json` file?</a> - **Q 3.5**: <a class="normal" href="#info_json">What is a `.info.json` file?</a>
- **Q 3.6**: <a class="normal" href="#author_handle_faq">What is an `author handle`?</a> - **Q 3.6**: <a class="normal" href="#author_handle_faq">What is an `author handle`?</a>
@@ -218,12 +218,23 @@ code, your Makefile, your remarks, any other data files you wish to provide (up
to a maximum, including the mandatory files, defined in to a maximum, including the mandatory files, defined in
[limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) [limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h)
as `MAX_FILE_COUNT`) and other information about your submission, as `MAX_FILE_COUNT`) and other information about your submission,
information about the author (or authors), and then it runs a lot of tests. information about the author (or authors), and then it will give you a list of
subdirectories, if any, that will be made, and files that will be copied to the
submission directory. It will list files and directories that it will (for
various reasons) not create as well, asking you to confirm these things are all
okay. Some things are strictly forbidden (such as a directory tree too deep) and
it will tell you about these as well, so you can fix it.
Assuming you agree to the list of directories and files, it will make the
directories (if necessary) and copy the files. It will then switch to the
submission directory, run `make clobber` and then scan the directory again,
looking for mismatches. If no errors are detected it will list everything to you
again, asking you to confirm it is good.
If everything is OK, it will write the required `.auth.json` and `.info.json` If everything is OK, it will write the required `.auth.json` and `.info.json`
files, checking each with `chkentry(1)` and then, if all is OK, it will create and then run `chkentry(1)` on the directory. If all is OK it will create the
the tarball. After the tarball is formed, it will run `txzchk(1)` on it, which tarball. After the tarball is formed, it will run `txzchk(1)` on it, which runs
runs `fnamchk(1)`. If all is OK, your submission tarball should be good to go. `fnamchk(1)`. If all is OK, your submission tarball should be good to go.
Please see Please see
FAQ on "[txzchk](#txzchk)", FAQ on "[txzchk](#txzchk)",
@@ -328,21 +339,22 @@ cause problems. Additionally, if you do not have the most recent version when
submitting a tarball it will be rejected for not having the right versions of submitting a tarball it will be rejected for not having the right versions of
the tools. This is why you **MUST** make sure you have the most recent version the tools. This is why you **MUST** make sure you have the most recent version
of all the tools and you either run it from the repo directory itself OR you of all the tools and you either run it from the repo directory itself OR you
install them (`make install` as via `sudo` or as root). install them (`make install` as via `sudo` or as root). We recommend you install
the tools but if you wish to run it from the repo directory you may.
If the **_subdirectory_ in the _work directory_** (based on your submit ID and If the **_subdirectory_ in the _work directory_** (based on your submit ID and
slot number) already exists, you will have to slot number) already exists, you will have to move it, remove it or otherwise
move it, remove it or otherwise specify a different work directory (**NOT** the specify a different work directory (**NOT** the subdirectory), as it needs to be
subdirectory), as it needs to be empty. empty.
This _subdirectory is where your files will be **copied** to_. Your _submission This _subdirectory is where your directories will be made and where your files
tarball_ (which you will upload to the submit server) that `txzchk(1)` will will be **copied** to_. Your _submission tarball_ (which you will upload to the
validate _will be placed in the **work directory**_, and **its _contents_ will submit server) that `txzchk(1)` will validate _will be placed in the **work
be the _subdirectory_ with your submission's files**. directory**_, and **its _contents_ will be the _subdirectory_ with your
The `mkiocccentry(1)` tool will also ask you for information about your submission's files**. The `mkiocccentry(1)` tool will also ask you for
submission _as well as author details_ (that will only be looked at if the information about your submission _as well as author details_ (that will only be
submission wins), run some tests and run a number of other tools, as looked at if the submission wins), run some tests and run a number of other
mentioned above, and as described in the "[finer tools, as mentioned above, and as described in the "[finer
details](#mkiocccentry_details)" section. details](#mkiocccentry_details)" section.
See also the See also the
@@ -542,7 +554,7 @@ Jump to: [top](#)
### Q 0.6: What permissions may my files be and what if I need different permissions? ### Q 0.6: What permissions may my files be and what if I need different permissions?
</div> </div>
As [Rule 17](#rule17) states, files in your submission tarball **MUST** be As [Rule 17](next/rules.html#rule17) states, files in your submission tarball **MUST** be
specific permissions. In particular: directories **MUST** be `drwxr-xr-x` (i.e. specific permissions. In particular: directories **MUST** be `drwxr-xr-x` (i.e.
`0755`), the optional files, `try.sh` or `try.alt.sh`, if provided, **MUST** be `0755`), the optional files, `try.sh` or `try.alt.sh`, if provided, **MUST** be
`-r-xr-xr-x` (i.e. `0555`) and all other files **MUST** be `-r--r--r--` (i.e. `-r-xr-xr-x` (i.e. `0555`) and all other files **MUST** be `-r--r--r--` (i.e.
@@ -662,7 +674,7 @@ Jump to: [top](#)
The IOCCC makes extensive use of [markdown](https://daringfireball.net/projects/markdown/). The IOCCC makes extensive use of [markdown](https://daringfireball.net/projects/markdown/).
For example, when [submitting to the IOCCC](next/submit.html), we have people For example, when [submitting to the IOCCC](next/submit.html), we have people
submit remarks about entry in markdown format. Every submit remarks about their submission(s) in markdown format. Every
[winning IOCCC entry](years.html) uses a `README.md` markdown file [winning IOCCC entry](years.html) uses a `README.md` markdown file
as the basis for forming the `index.html` web page for that entry. as the basis for forming the `index.html` web page for that entry.
All generated HTML pages on the [Official IOCCC website](https://www.ioccc.org/index.html) All generated HTML pages on the [Official IOCCC website](https://www.ioccc.org/index.html)
@@ -731,6 +743,10 @@ This will run the tests that `mkiocccentry(1)`, write the JSON files, use
`chkentry(1)`, package the tarball and run `txzchk(1)` on it. `chkentry(1)`, package the tarball and run `txzchk(1)` on it.
See also the See also the
FAQ on "[mkiocccentry](#mkiocccentry)",
the
FAQ on "[using mkiocccentry](#using_mkiocccentry)",
the
FAQ on "[.info.json](#info_json)", FAQ on "[.info.json](#info_json)",
the the
FAQ on "[.auth.json](#auth_json)", FAQ on "[.auth.json](#auth_json)",
@@ -766,6 +782,20 @@ number of files (including extra files) but also specific rules you must follow
if you do include a tarball. Not following these points puts you at great risk if you do include a tarball. Not following these points puts you at great risk
of violating [Rule 17](next/rules.html#rule17)! of violating [Rule 17](next/rules.html#rule17)!
Also, remember what the [guidelines](next/guidelines.html) say:
> **IMPORTANT REMINDER**: make **SURE** your tarball does **NOT** reveal who you are!
The `mkiocccentry(1)` tool creates a v7 format tarball to prevent this.
You can do this by creating the tarball like:
``` <!---sh-->
tar --format=v7 -cJf foo.txz directory
```
<hr style="width:50%;text-align:left;margin-left:0"> <hr style="width:50%;text-align:left;margin-left:0">
<hr style="width:50%;text-align:left;margin-left:0"> <hr style="width:50%;text-align:left;margin-left:0">
@@ -873,19 +903,23 @@ Jump to: [top](#)
There are unfortunately some warnings that cannot be disabled; they are always There are unfortunately some warnings that cannot be disabled; they are always
enabled whatever warning options you have enabled. Also, there is a warning that enabled whatever warning options you have enabled. Also, there is a warning that
is enabled whenever you act on `char *`s, saying it is unsafe buffer usage, even is enabled whenever you use a pointer as a buffer, saying it is unsafe buffer
when it's not. This might be enabled by `-Weverything` but it might not be; for usage, even when it is not.
more details on why we use `-Weverything` in Clang see the
FAQ on "[-Weverything](#weverything)".
It is not detrimental to your submission if you disable this, which you can do This might be enabled by `-Weverything` but it might not be but it is not
by specifying `-Wno-unsafe-buffer-usage`. detrimental to your submission if you disable this, which you can do by
specifying `-Wno-unsafe-buffer-usage`.
So in short, no you should not worry about these as they are sometimes So in short, no you should not worry about these as they are sometimes
inevitable in obfuscated code and even non-obfuscated code. inevitable in obfuscated code and even non-obfuscated code.
If you *can* work past this it might be good but this is not something that If you *can* work past this it might be good but this is not something that
should be worried about too much as this is on the compiler developers, not you. should be worried about too much as this is on the compiler developers, not you.
Of course if you do work past it feel free to brag, though **BE SURE TO TELL
US** the OS, OS version, compiler and compiler version.
For more details on why we use `-Weverything` in Clang see the FAQ on
"[-Weverything](#weverything)".
Jump to: [top](#) Jump to: [top](#)
@@ -1219,11 +1253,12 @@ verify everything is in order. If something is not allowed (bad filename for
example) or an error occurs (missing required file for example) you will be example) or an error occurs (missing required file for example) you will be
notified of this. After you verify everything is okay the files/directories notified of this. After you verify everything is okay the files/directories
found will be copied/made and it will then switch to the submission directory. found will be copied/made and it will then switch to the submission directory.
In the submission directory it scans the file hierarchy again and verifies In the submission directory it first runs `make clobber` and then scans the
things are still okay. When done it will ask you to verify things are still OK. directory hierarchy again, verifying things are still okay. When done it will
If all is good it'll ask you for more information about the author(s). Next the ask you to verify things still look OK to you too. If all is good it'll ask you
two required JSON files `.auth.json` and `.info.json` will be created, running for more information about the author(s). Next the two required JSON files
`chkentry(1)` on each. If all is good it'll give you another chance to say the `.auth.json` and `.info.json` will be created. After that `chkentry(1)` will be
run on the directory. If all is good it'll give you another chance to say the
files/directories look good and if you answer yes it'll create the tarball and files/directories look good and if you answer yes it'll create the tarball and
run `txzchk` on it. run `txzchk` on it.
@@ -1369,21 +1404,18 @@ submission directory.
13. Ask the user for a one line abstract of the submission. 13. Ask the user for a one line abstract of the submission.
14. Ask the user for the number of authors and for each author ask a variety of 14. Ask the user for the number of authors and for each author ask a variety of
questions (see below for more information on what kind of questions). questions (see below for more information on what kind of questions).
15. Create `.info.json` and run `chkentry(1)` on it. 15. Create `.info.json`.
* If `chkentry(1)` fails to validate the file make sure that you have 16. Create `.auth.json`.
obtained and compiled the latest version of all the tools and you either are 17. Run `chkentry(1)` on your submission directory to verify things look good,
in the repo's directory, you pass the options to give the path to the tools including that the `.info.json` and `.auth.json` files are okay.
or you have installed the latest tools! * It also checks that the manifest in `.info.json` matches what is in the
16. Create `.auth.json` and run `chkentry(1)` on it. submission directory and it verifies file permissions too; if you wish to
* If `chkentry(1)` fails to validate the file make sure that you have know what else it does we suggest you read the source code.
obtained and compiled the latest version of all the tools and you either are 18. Show the output of `ls -lakR .`, asking the user to confirm that the listing
in the repo's directory, you pass the options to give the path to the tools
or you have installed the latest tools!
17. Show the output of `ls -lakR .`, asking the user to confirm that the listing
is okay. is okay.
18. Create the tarball with the name in the form of 19. Create the tarball with the name in the form of
`submit.USERNAME-SLOT.TIMESTAMP`. `submit.USERNAME-SLOT.TIMESTAMP`.
19. Run `txzchk(1)` on the tarball. 20. Run `txzchk(1)` on the tarball.
If any of the steps fail or if the user says something is not okay, it aborts. If any of the steps fail or if the user says something is not okay, it aborts.
Some of the other checks that are made: Some of the other checks that are made:
@@ -1554,51 +1586,66 @@ Jump to: [top](#)
<div id="validating_auth_info_json"> <div id="validating_auth_info_json">
<div id="chkentry"> <div id="chkentry">
### Q 3.3: How can I validate my `.auth.json` and/or `.info.json` files? ### Q 3.3: How can I validate my submission directory?
</div> </div>
</div> </div>
If you want to validate the `.auth.json` or `.info.json` files you If you want to validate your submission directory manually, including but not
should use `chkentry(1)` from the [mkiocccentry limited to the `.auth.json` or `.info.json` files, you should use `chkentry(1)`
repo](https://github.com/ioccc-src/mkiocccentry). from the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry).
The `chkentry(1)` tool uses the IOCCC version of the [jparse The `chkentry(1)` tool runs a variety of checks on your submission directory,
including but not limited to, using the [jparse
API](https://github.com/ioccc-src/mkiocccentry/blob/master/jparse/man/man3/jparse.3) API](https://github.com/ioccc-src/mkiocccentry/blob/master/jparse/man/man3/jparse.3)
to perform **additional** checks on these two IOCCC specific JSON files. It is to validate the two IOCCC specific JSON files (as valid JSON) and additional
_possible_ that this version will at times differ from the [official jparse checks on those files as well. An important thing that it does is verify that
API](https://github.com/xexyl/jparse/blob/master/man/man3/jparse.3) at the your files are the right permissions and that the manifest in the `.info.json`
[official jparse repo](https://github.com/xexyl/jparse) and this is one of the files match what is in the directory. What all the checks are is out of scope of this
reasons the tools' `-V` (version option) show the JSON parser version as well. document; if you wish to know we recommend you read the [source
code](https://github.com/ioccc-src/mkiocccentry/blob/master/chkentry.c).
**NOTE**: the IOCCC [jparse
API](https://github.com/ioccc-src/mkiocccentry/blob/master/jparse/man/man3/jparse.3)
is a synced copy of the [official jparse
repo](https://github.com/xexyl/jparse) _at the time of the contest open date_.
See the See the
FAQ on "[.auth.json](#auth_json)" FAQ on "[.auth.json](#auth_json)"
and and
FAQ on "[.info.json](#info_json)" FAQ on "[.info.json](#info_json)"
for more details on these files. for more details on the two required and very important JSON files.
The `chkentry(1)` tool accepts a single arg, a directory that **MUST** have the
two JSON files, `.auth.json` and `.info.json`. (Okay there is an option to skip
files but this is for the judges **ONLY**; use of this option to validate your
submission puts you at a great risk of violating [Rule
17](next/rules.html#rule17)!).
As an example, if your submission directory is `12345678-1234-4321-abcd-1234567890ab-0/` then you should run the
following command:
The `chkentry(1)` tool accepts more than one command line form.
You may specify a `.auth.json` and/or
`.info.json` file. An argument of "`.`" will skip that file. For instance:
``` <!---sh--> ``` <!---sh-->
# run checks on .info.json: chkentry 12345678-1234-4321-abcd-1234567890ab-0
chkentry . .info.json
# run checks on .auth.json:
chkentry .auth.json .
# run checks on .auth.json and .info.json:
chkentry .auth.json .info.json
``` ```
If there is a [JSON](https://www.json.org/json-en.html) issue detected by the If there is a [JSON](https://www.json.org/json-en.html) issue detected by the
`jparse(3)` API, then there is a [JSON](https://www.json.org/json-en.html) error and `jparse(3)` API (i.e. it is not valid JSON) it is an error and `chkentry(1)`
`chkentry(1)` will report it as an **error**. If the parsing is OK (i.e. valid will report this, exiting with a non-zero exit code. If the parsing is OK (i.e.
JSON) but there is an issue in one or both of the valid JSON) but there is an issue in one or both of the
[JSON](https://www.json.org/json-en.html) files in **the context of the IOCCC**, [JSON](https://www.json.org/json-en.html) files in **the context of the IOCCC**,
it will report this as an **error**. Thus, if you were to package your it will report this as an **error**. It also does, as briefly noted above, other
submission manually then you would be violating [Rule checks.
17](next/rules.html#rule17).
If `chkentry(1)` fails to validate your submission directory your submission
**WILL** be **REJECTED**! This is why you **MUST** make sure you use the
`mkiocccentry(1)` tool to form your submission directory.
See the
FAQ on "[.auth.json](#auth_json)"
and the
FAQ on "[.info.json](#info_json)"
as well as [Rule 17](next/rules.html#rule17) for more information.
Jump to: [top](#) Jump to: [top](#)
@@ -1628,7 +1675,7 @@ In order of the file's contents we describe each required field, below:
- `IOCCC_auth_version` (double quoted string) - `IOCCC_auth_version` (double quoted string)
* The current version of the `.auth.json` file. * The current version of the `.auth.json` file.
**NOTE:** this **MUST** match **THIS** IOCCC's `.auth.json` version, defined as **IMPORTANT:** this **MUST** match **THIS** IOCCC's `.auth.json` version, defined as
`AUTH_VERSION` in `AUTH_VERSION` in
[soup/version.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h) [soup/version.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h)
in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If
@@ -1637,7 +1684,7 @@ In order of the file's contents we describe each required field, below:
- `IOCCC_contest` (double quoted string) - `IOCCC_contest` (double quoted string)
* Which contest number this is (e.g. 1 for 1984, 2 for 1985, 27 for 2020). * Which contest number this is (e.g. 1 for 1984, 2 for 1985, 27 for 2020).
**NOTE:** this **MUST** match **THIS** IOCCC's contest value, defined as **IMPORTANT:** this **MUST** match **THIS** IOCCC's contest value, defined as
`IOCCC_CONTEST` in `IOCCC_CONTEST` in
[soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h)
in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If
@@ -1649,7 +1696,7 @@ In order of the file's contents we describe each required field, below:
**NOTE:** sometimes an IOCCC year runs into another year and the contest year **NOTE:** sometimes an IOCCC year runs into another year and the contest year
might not match when it ends. might not match when it ends.
**NOTE:** this **MUST** match **THIS** IOCCC's contest, defined as **IMPORTANT:** this **MUST** match **THIS** IOCCC's contest, defined as
`IOCCC_YEAR` in `IOCCC_YEAR` in
[soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h)
in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If
@@ -1658,17 +1705,17 @@ In order of the file's contents we describe each required field, below:
- `mkiocccentry_version` (double quoted string) - `mkiocccentry_version` (double quoted string)
* The version of `mkiocccentry` that formed this `.auth.json` file. * The version of `mkiocccentry` that formed this `.auth.json` file.
**NOTE:** this **MUST** match **THIS** IOCCC's `mkiocccentry` version, **IMPORTANT:** this **MUST** match **THIS** IOCCC's `mkiocccentry` version,
defined as `MKIOCCCENTRY_VERSION` in defined as `MKIOCCCENTRY_VERSION` in
[soup/version.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h) [soup/version.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h)
in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If
this is not the case your submission **WILL BE** rejected! this is not the case your submission **WILL BE** rejected!
- `chkentry_version` (double quoted string) - `chkentry_version` (double quoted string)
* The version of `chkentry` that was used to validate this `.auth.json`, * The version of `chkentry` that was used to validate the submission
assuming that it was created by `mkiocccentry`. directory, including the `.auth.json` file.
**NOTE:** this **MUST** match **THIS** IOCCC's `chkentry` version, defined **IMPORTANT:** this **MUST** match **THIS** IOCCC's `chkentry` version, defined
as `CHKENTRY_VERSION` in as `CHKENTRY_VERSION` in
[soup/version.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h) [soup/version.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h)
in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If
@@ -1678,7 +1725,7 @@ In order of the file's contents we describe each required field, below:
* The version of `fnamchk` that `txzchk` uses to validate the filename of * The version of `fnamchk` that `txzchk` uses to validate the filename of
the xz compressed tarball. the xz compressed tarball.
**NOTE:** this **MUST** match **THIS** IOCCC's `fnamchk` version in order for it **IMPORTANT:** this **MUST** match **THIS** IOCCC's `fnamchk` version in order for it
to be valid. If this is not the case your submission **WILL BE** rejected! to be valid. If this is not the case your submission **WILL BE** rejected!
- `IOCCC_contest_id` (double quoted string) - `IOCCC_contest_id` (double quoted string)
@@ -1693,19 +1740,20 @@ In order of the file's contents we describe each required field, below:
- `tarball` (double quoted string) - `tarball` (double quoted string)
* The xz compressed tarball filename. * The xz compressed tarball filename.
**NOTE:** this **MUST** match the actual tarball's **filename** in order for **IMPORTANT:** this **MUST** match the actual tarball's **filename** in order for
this to be valid. If there is a mismatch you stand a great risk of having this to be valid. If there is a mismatch you stand a great risk of having
your submission rejected for violating [Rule 17](next/rules.html#rule17)! your submission rejected for violating [Rule 17](next/rules.html#rule17)!
Moreover, it is possible that `txzchk` will report a problem through Moreover, it is possible that `txzchk` will report a problem through
`fnamchk(1)` which also puts you at great risk of violating [Rule `fnamchk(1)` which also puts you at great risk of violating [Rule
17](next/rules.html#rule17). If `txzchk` does not detect this, though, it 17](next/rules.html#rule17). `txzchk` will use the output of `fnamchk` to
does not mean it's a bug but rather that the directory in the tarball obtain the correct directory _name_ in the tarball; if `fnamchk` fails to
matches the filename. validate your filename, or if you have the wrong directory name in the
tarball, this will be flaggd.
- `submit_slot` (number) - `submit_slot` (number)
* The submission number. * The submission number.
**NOTE:** this **MUST** be within the range of 0 **THROUGH** **IMPORTANT:** this **MUST** be within the range of 0 **THROUGH**
`MAX_SUBMIT_SLOT` (see `MAX_SUBMIT_SLOT` (see
[soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h)
in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/)). If in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/)). If
@@ -1715,7 +1763,7 @@ In order of the file's contents we describe each required field, below:
- `author_count` (number) - `author_count` (number)
* How many authors this submission has. * How many authors this submission has.
**NOTE:** this **MUST** be within the range of 1 **THROUGH** **IMPORTANT:** this **MUST** be within the range of 1 **THROUGH**
`MAX_AUTHORS` (see `MAX_AUTHORS` (see
[soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h)
in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/)). If in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/)). If
@@ -1734,71 +1782,74 @@ Next, the JSON `authors` **array** holds the following information about the
author(s) of the submission: author(s) of the submission:
- `name` (double quoted string) - `name` (double quoted string)
* The **name** of this author. * The **name** of this author.
- `location_code` (double quoted string) - `location_code` (double quoted string)
* The **location code** of this author (an ISO 3166-1 2 character code). * The **location code** of this author (an ISO 3166-1 2 character code).
See See
<https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements> <https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements>
for a list of valid codes. for a list of valid codes.
**NOTE:** in `mkiocccentry` use `XX` if you want your location to be anonymous. **NOTE:** in `mkiocccentry` use `XX` if you want your location to be anonymous.
- `email` (`null` or double quoted string) - `email` (`null` or double quoted string)
* The **email** of this author in the form of `x@y`, or `null` if not provided. * The **email** of this author in the form of `x@y`, or `null` if not provided.
- `url` (`null` or double quoted string) - `url` (`null` or double quoted string)
* The primary **URL** of this author, or `null` if not provided. * The primary **URL** of this author, or `null` if not provided.
* The URL must start with `http://` or `https://` and have more text after it;
we do not even try and detect a hostname.
- `alt_url` (`null` or double quoted string) - `alt_url` (`null` or double quoted string)
* The **alt URL** of this author, or `null` if not provided. * The **alt URL** of this author, or `null` if not provided.
* The URL must start with `http://` or `https://` and have more text after it;
we do not even try and detect a hostname.
- `mastodon` (`null` or double quoted string) - `mastodon` (`null` or double quoted string)
* The Mastodon handle of this author in the form of `@user@domain`, or * The Mastodon handle of this author in the form of `@user@domain`, or
`null` if not provided. See the `null` if not provided. See the
FAQ on "[Mastodon](#try_mastodon)" FAQ on "[Mastodon](#try_mastodon)"
for more information. for more information.
- `github` (`null` or double quoted string) - `github` (`null` or double quoted string)
* The **[GitHub](https://github.com) account** of this author in the form of `@user`, or `null` if not * The **[GitHub](https://github.com) account** of this author in the form of `@user`, or `null` if not
provided. provided.
- `affiliation` (`null` or double quoted string) - `affiliation` (`null` or double quoted string)
* This author's **affiliation**, if any, or `null` if not provided. * This author's **affiliation**, if any, or `null` if not provided.
**NOTE:** if provided, the length of the **affiliation** **MUST** be within **IMPORTANT:** if provided, the length of the **affiliation** **MUST** be within
the range of 1 **THROUGH** `MAX_AFFILIATION_LEN` (see the range of 1 **THROUGH** `MAX_AFFILIATION_LEN` (see
[soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h)
in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/)). If in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/)). If
this is not the case you stand a great risk of having your submission this is not the case you stand a great risk of having your submission
rejected for violating [Rule 17](next/rules.html#rule17)! rejected for violating [Rule 17](next/rules.html#rule17)!
**NOTE:** an **affiliation** does **NOT** have any affect on whether you will win or not. **NOTE:** an **affiliation** does **NOT** have any affect on whether you will win or not.
- `past_winning_author` (boolean) - `past_winning_author` (boolean)
* `true` if this author claims to have won a past IOCCC, `false` if this * `true` if this author claims to have won a past IOCCC, `false` if this
author has **NOT** won before. author has **NOT** won before.
**NOTE:** this has **NO** effect on whether you will win or not. **NOTE:** this has **NO** effect on whether you will win or not.
- `default_handle` (boolean) - `default_handle` (boolean)
* `true` if this default handle was accepted, `false` if one is provided * `true` if this default handle was accepted, `false` if one is provided
by this author. by this author.
- `author_handle` (double quoted string) - `author_handle` (double quoted string)
* This author's handle (custom or default provided). * This author's handle (custom or default provided).
**NOTE:** if you have won before, we **ENCOURAGE** you to use the same handle of **NOTE:** if you have won before, we **ENCOURAGE** you to use the same handle of
your previous winning entries, to help in organising the your previous winning entries, to help in organising the
[authors.html](authors.html) page and the author JSON file. [authors.html](authors.html) page and the author JSON file.
See the See the
FAQ on "[author handle](#author_handle_faq)" FAQ on "[author handle](#author_handle_faq)"
and the and the
FAQ on "[author_handle.json](#author_json)" FAQ on "[author_handle.json](#author_json)"
for more information. for more information.
- `author_number` (number) - `author_number` (number)
* This author number in the `authors` array. * This author number in the `authors` array.
After the `authors` **array** the remaining of a `.auth.json` file holds: After the `authors` **array** the remaining of a `.auth.json` file holds:
@@ -1807,7 +1858,7 @@ After the `authors` **array** the remaining of a `.auth.json` file holds:
FAQ on "[.info.json](#info_json)" FAQ on "[.info.json](#info_json)"
for more information. for more information.
**NOTE:** this **MUST** be greater than or equal to `MIN_TIMESTAMP` (see **IMPORTANT:** this **MUST** be greater than or equal to `MIN_TIMESTAMP` (see
[soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h)
in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/)). If in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/)). If
this is not the case your submission **WILL BE** rejected. this is not the case your submission **WILL BE** rejected.
@@ -1816,7 +1867,7 @@ After the `authors` **array** the remaining of a `.auth.json` file holds:
* Microseconds since the tstamp (seconds since epoch when `.auth.json` was * Microseconds since the tstamp (seconds since epoch when `.auth.json` was
formed - see `gettimeofday(2)`) second. formed - see `gettimeofday(2)`) second.
**NOTE:** this **MUST** be within the range `MIN_FORMED_TIMESTAMP_USEC` **IMPORTANT:** this **MUST** be within the range `MIN_FORMED_TIMESTAMP_USEC`
**THROUGH** `MAX_FORMED_TIMESTAMP_USEC` and is validated by **THROUGH** `MAX_FORMED_TIMESTAMP_USEC` and is validated by
`test_formed_timestamp_usec()` in `test_formed_timestamp_usec()` in
[soup/entry_util.c](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/entry_util.c) [soup/entry_util.c](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/entry_util.c)
@@ -1827,7 +1878,7 @@ After the `authors` **array** the remaining of a `.auth.json` file holds:
- `timestamp_epoch` (double quoted string) - `timestamp_epoch` (double quoted string)
* `"Thu Jan 01 00:00:00 1970 UTC"` (`gettimeofday(2)` epoch). * `"Thu Jan 01 00:00:00 1970 UTC"` (`gettimeofday(2)` epoch).
**NOTE:** this **MUST** be `"Thu Jan 01 00:00:00 1970 UTC"` which is `#define`d **IMPORTANT:** this **MUST** be `"Thu Jan 01 00:00:00 1970 UTC"` which is `#define`d
as `TIMESTAMP_EPOCH` in as `TIMESTAMP_EPOCH` in
[soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h)
in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If
@@ -1836,33 +1887,38 @@ After the `authors` **array** the remaining of a `.auth.json` file holds:
- `min_timestamp` (number) - `min_timestamp` (number)
* Minimum number of second since epoch for **this** IOCCC. * Minimum number of second since epoch for **this** IOCCC.
**NOTE:** this **MUST** be >= `MIN_TIMESTAMP` defined in **IMPORTANT:** this **MUST** be >= `MIN_TIMESTAMP` defined in
[soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h)
in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If
this is not the case your submission **WILL BE** rejected! this is not the case your submission **WILL BE** rejected!
This file will be verified with the `chkentry(1)` tool and if there are any This file will be validated with the `chkentry(1)` tool and if there are any
problems **it is an error**. If there is an error the tarball will **NOT** be problems with it or the submission directory, **it is an error**. If there is an
formed by `mkiocccentry`; otherwise the `txzchk(1)` tool will be executed on the error the tarball will **NOT** be formed by `mkiocccentry`; otherwise the
tarball. `txzchk(1)` tool will be executed on the tarball.
This file will **NOT** be looked at unless the submission wins! Nonetheless, This file will **NOT** be looked at unless the submission wins! Nonetheless, the
`chkentry(1)` **WILL BE** used on the file as part of the judging process. file **MUST** be present in the submission directory and it **MUST** be valid
JSON and it **MUST** pass all IOCCC semantics checks and all other checks
`chkentry(1)` perform. `chkentry(1)` is used by `mkiocccentry(1)` and the judges
will use it on the submission directory as part of the judging process.
At the risk of stating the obvious, if your `.auth.json` file is invalid JSON or At the risk of stating the obvious, if your `.auth.json` file is invalid JSON or
is reported invalid by `chkentry` your submission will almost certainly be is reported invalid by `chkentry(1)`, or if your submission directory is
reported invalid by `chkentry(1)`, your submission will almost certainly be
rejected for violating the [Rules](next/rules.html) and in particular [Rule rejected for violating the [Rules](next/rules.html) and in particular [Rule
17](next/rules.html#rule17). 17](next/rules.html#rule17).
An obvious example where `chkentry` would fail to validate `.auth.json` is if An obvious example where `chkentry(1)` would fail to validate `.auth.json` is if
there is a mismatch of type in the JSON file with what is expected, for there is a mismatch of type in the JSON file with what is expected, for
instance, if in `.auth.json` the `no_comment` that we chose to not comment on is instance, if in `.auth.json` the `no_comment` that we chose to not comment on is
not a string. Another obvious example is when things are out of range (see above not a string or is the wrong string. Another obvious example is when things are
for list). Two more examples would be if a field is missing or if an unknown out of range (see above for list). Two more examples would be if a field is
filed is in the file. In these cases (and any others that must be established as missing or if an unknown filed is in the file. In these cases (and any others
valid by `chkentry`) your submission would be rejected for violating [Rule that must be established as valid by `chkentry(1)`) your submission would be
17](next/rules.html#rule17) and in particular because `chkentry` would not rejected for violating [Rule 17](next/rules.html#rule17) and in particular
validate the `.auth.json` file. because `chkentry(1)` would not validate the `.auth.json` file (and maybe other
things too).
If you wish to **verify** that your `.auth.json` file is valid **JSON** then see the If you wish to **verify** that your `.auth.json` file is valid **JSON** then see the
FAQ on "[validating JSON documents](#validating_json)". FAQ on "[validating JSON documents](#validating_json)".
@@ -1904,7 +1960,7 @@ In order of the file's contents we describe each required field, below:
- `IOCCC_info_version` (double quoted string) - `IOCCC_info_version` (double quoted string)
* The current version of the `.info.json` files. * The current version of the `.info.json` files.
**NOTE:** this **MUST** match **THIS** IOCCC's `.info.json` version, defined as **IMPORTANT:** this **MUST** match **THIS** IOCCC's `.info.json` version, defined as
`INFO_VERSION` in `INFO_VERSION` in
[soup/version.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h) [soup/version.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h)
in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If
@@ -1913,7 +1969,7 @@ In order of the file's contents we describe each required field, below:
- `IOCCC_contest` (double quoted string) - `IOCCC_contest` (double quoted string)
* Which contest number this is (e.g. 1 for 1984, 2 for 1985, 27 for 2020). * Which contest number this is (e.g. 1 for 1984, 2 for 1985, 27 for 2020).
**NOTE:** this **MUST** match **THIS** IOCCC's contest value, defined as **IMPORTANT:** this **MUST** match **THIS** IOCCC's contest value, defined as
`IOCCC_CONTEST` in `IOCCC_CONTEST` in
[soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h)
in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If
@@ -1925,7 +1981,7 @@ In order of the file's contents we describe each required field, below:
**NOTE:** sometimes an IOCCC year runs into another year and the contest year **NOTE:** sometimes an IOCCC year runs into another year and the contest year
might not match when it ends. might not match when it ends.
**NOTE:** this **MUST** match **THIS** IOCCC's contest, defined as **IMPORTANT:** this **MUST** match **THIS** IOCCC's contest, defined as
`IOCCC_YEAR` in `IOCCC_YEAR` in
[soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h)
in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If
@@ -1934,7 +1990,7 @@ In order of the file's contents we describe each required field, below:
- `mkiocccentry_version` (double quoted string) - `mkiocccentry_version` (double quoted string)
* The version of `mkiocccentry` that formed this `.auth.json` file. * The version of `mkiocccentry` that formed this `.auth.json` file.
**NOTE:** this **MUST** match **THIS** IOCCC's `mkiocccentry` version, **IMPORTANT:** this **MUST** match **THIS** IOCCC's `mkiocccentry` version,
defined as `MKIOCCCENTRY_VERSION` in defined as `MKIOCCCENTRY_VERSION` in
[soup/version.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h) [soup/version.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h)
in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If
@@ -1943,17 +1999,17 @@ In order of the file's contents we describe each required field, below:
- `iocccsize_version` (double quoted string) - `iocccsize_version` (double quoted string)
* The version of `iocccsize` that was used for this `.info.json` file. * The version of `iocccsize` that was used for this `.info.json` file.
**NOTE:** this **MUST** match **THIS** IOCCC's `iocccentry` version, **IMPORTANT:** this **MUST** match **THIS** IOCCC's `iocccentry` version,
defined as `IOCCCSIZE_VERSION` in defined as `IOCCCSIZE_VERSION` in
[soup/version.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h) [soup/version.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h)
in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If
this is not the case your submission **WILL BE** rejected! this is not the case your submission **WILL BE** rejected!
- `chkentry_version` (double quoted string) - `chkentry_version` (double quoted string)
* The version of `chkentry` that was used to validate this `.info.json`, * The version of `chkentry` that was used to validate the submission
assuming that it was created by `mkiocccentry`. directory, including the `.info.json` file.
**NOTE:** this **MUST** match **THIS** IOCCC's `chkentry` version, defined **IMPORTANT:** this **MUST** match **THIS** IOCCC's `chkentry` version, defined
as `CHKENTRY_VERSION` in as `CHKENTRY_VERSION` in
[soup/version.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h) [soup/version.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h)
in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If
@@ -1963,7 +2019,7 @@ In order of the file's contents we describe each required field, below:
* The version of `fnamchk` that `txzchk` uses to validate the filename of * The version of `fnamchk` that `txzchk` uses to validate the filename of
the xz compressed tarball. the xz compressed tarball.
**NOTE:** this **MUST** match **THIS** IOCCC's `fnamchk` version, defined **IMPORTANT:** this **MUST** match **THIS** IOCCC's `fnamchk` version, defined
as `FNAMCHK_VERSION` in as `FNAMCHK_VERSION` in
[soup/version.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h) [soup/version.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h)
in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If
@@ -1972,7 +2028,7 @@ In order of the file's contents we describe each required field, below:
- `txzchk_version` (double quoted string) - `txzchk_version` (double quoted string)
* The version of `txzchk` used to validate the xz compressed tarball. * The version of `txzchk` used to validate the xz compressed tarball.
**NOTE:** this **MUST** match **THIS** IOCCC's `txzchk` version, defined **IMPORTANT:** this **MUST** match **THIS** IOCCC's `txzchk` version, defined
as `TXZCHK_VERSION` in as `TXZCHK_VERSION` in
[soup/version.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h) [soup/version.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h)
in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If
@@ -1983,15 +2039,10 @@ In order of the file's contents we describe each required field, below:
a UUID** and submission number; see the [rules](next/rules.html) for more details a UUID** and submission number; see the [rules](next/rules.html) for more details
on this, and in particular [Rule 17](next/rules.html#rule17). on this, and in particular [Rule 17](next/rules.html#rule17).
**NOTE:** if the contest ID is **NOT** in this format then `fnamchk` will
report it as an **error** and your submission **WILL BE** rejected for
violating [Rule 17](next/rules.html#rule17)!
- `submit_slot` (number) - `submit_slot` (number)
* The submission number. * The submission number.
**NOTE:** this **MUST** be within the range of 0 **THROUGH** **IMPORTANT:** this **MUST** be within the range of 0 **THROUGH**
`MAX_SUBMIT_SLOT` (see `MAX_SUBMIT_SLOT` (see
[soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h)
in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/)). If in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/)). If
@@ -2004,7 +2055,7 @@ In order of the file's contents we describe each required field, below:
in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/)) that in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/)) that
matches the regexp `[a-z0-9][a-z0-9_+-]*`. matches the regexp `[a-z0-9][a-z0-9_+-]*`.
**NOTE:** if this is **NOT** the case you stand a great risk of having your submission **IMPORTANT:** if this is **NOT** the case you stand a great risk of having your submission
rejected for violating [Rule 17](next/rules.html#rule17)! rejected for violating [Rule 17](next/rules.html#rule17)!
- `abstract` (double quoted string) - `abstract` (double quoted string)
@@ -2015,33 +2066,34 @@ In order of the file's contents we describe each required field, below:
The `abstract` may not contain a `;` (semicolon), nor `&` (ampersand), nor `,` (comma). The `abstract` may not contain a `;` (semicolon), nor `&` (ampersand), nor `,` (comma).
**NOTE:** if your abstract is 0 in length or > the maximum abstract length you **IMPORTANT:** if your abstract is 0 in length or > the maximum abstract length you
stand a great risk of having your submission rejected for violating [Rule stand a great risk of having your submission rejected for violating [Rule
17](next/rules.html#rule17)! 17](next/rules.html#rule17)!
- `tarball` (double quoted string) - `tarball` (double quoted string)
* The xz compressed tarball filename. * The xz compressed tarball filename.
**NOTE:** this **MUST** match the actual tarball's **filename** in order for **IMPORTANT:** this **MUST** match the actual tarball's **filename** in order for
this to be valid. If there is a mismatch you stand a great risk of having this to be valid. If there is a mismatch you stand a great risk of having
your submission rejected for violating [Rule 17](next/rules.html#rule17)! your submission rejected for violating [Rule 17](next/rules.html#rule17)!
Moreover, it is possible that `txzchk` will report a problem through Moreover, it is possible that `txzchk` will report a problem through
`fnamchk(1)` which also puts you at great risk of violating [Rule `fnamchk(1)` which also puts you at great risk of violating [Rule
17](next/rules.html#rule17). If `txzchk` does not detect this, though, it 17](next/rules.html#rule17). `txzchk` will use the output of `fnamchk` to
does not mean it's a bug but rather that the directory in the tarball obtain the correct directory _name_ in the tarball; if `fnamchk` fails to
matches the filename. validate your filename, or if you have the wrong directory name in the
tarball, this will be flaggd.
- `rule_2a_size` (number) - `rule_2a_size` (number)
* The size calculated of [Rule 2a](next/rules.html#rule2a). * The size calculated of [Rule 2a](next/rules.html#rule2a).
**NOTE:** if this violates [Rule 2a](next/rules.html#rule2a) you stand a great **IMPORTANT:** if this violates [Rule 2a](next/rules.html#rule2a) you stand a great
chance of having your submission rejected for violating the chance of having your submission rejected for violating the
[Rules](next/rules.html)! [Rules](next/rules.html)!
- `rule_2b_size` (number) - `rule_2b_size` (number)
* The size calculated of [Rule 2b](next/rules.html#rule2b). * The size calculated of [Rule 2b](next/rules.html#rule2b).
**NOTE:** if this violates [Rule 2b](next/rules.html#rule2b) you stand a great **IMPORTANT:** if this violates [Rule 2b](next/rules.html#rule2b) you stand a great
chance of having your submission rejected for violating the chance of having your submission rejected for violating the
[Rules](next/rules.html)! [Rules](next/rules.html)!
@@ -2052,7 +2104,7 @@ In order of the file's contents we describe each required field, below:
* `true` if user overrides warning of [Rule 2a](next/rules.html#rule2a) * `true` if user overrides warning of [Rule 2a](next/rules.html#rule2a)
violation, else `false`. violation, else `false`.
**NOTE:** if the [Rule 2a](next/rules.html#rule2a) calculated size is **NOT** **IMPORTANT:** if the [Rule 2a](next/rules.html#rule2a) calculated size is **NOT**
violated but this is `true` then you stand a good chance of having your violated but this is `true` then you stand a good chance of having your
submission rejected for violating [Rule 17](next/rules.html#rule17)! submission rejected for violating [Rule 17](next/rules.html#rule17)!
@@ -2064,7 +2116,7 @@ In order of the file's contents we describe each required field, below:
* `true` if user overrides warning of [Rule 2b](next/rules.html#rule2b) * `true` if user overrides warning of [Rule 2b](next/rules.html#rule2b)
violation, else `false`. violation, else `false`.
**NOTE:** if the [Rule 2b](next/rules.html#rule2b) calculated size is **NOT** **IMPORTANT:** if the [Rule 2b](next/rules.html#rule2b) calculated size is **NOT**
violated but this is `true` then you stand a good chance of having your violated but this is `true` then you stand a good chance of having your
submission rejected for violating [Rule 17](next/rules.html#rule17)! submission rejected for violating [Rule 17](next/rules.html#rule17)!
@@ -2085,7 +2137,7 @@ In order of the file's contents we describe each required field, below:
* `true` if `prog.c` triggered a word buffer overflow (see `iocccsize`), * `true` if `prog.c` triggered a word buffer overflow (see `iocccsize`),
else `false`. else `false`.
**NOTE:** this does **NOT** mean that your code has been checked for buffer **IMPORTANT:** this does **NOT** mean that your code has been checked for buffer
overflows in general. overflows in general.
- `ungetc_warning` (boolean) - `ungetc_warning` (boolean)
@@ -2095,7 +2147,7 @@ In order of the file's contents we describe each required field, below:
* `true` if the user overrides any warnings about an incomplete/incorrect * `true` if the user overrides any warnings about an incomplete/incorrect
`Makefile` file, else `false`. `Makefile` file, else `false`.
**NOTE:** if the `Makefile` file has no problems and this is `true` then **IMPORTANT:** if the `Makefile` file has no problems and this is `true` then
you stand a good chance of having your submission rejected for violating you stand a good chance of having your submission rejected for violating
[Rule 17](next/rules.html#rule17)! [Rule 17](next/rules.html#rule17)!
@@ -2106,7 +2158,7 @@ In order of the file's contents we describe each required field, below:
- `first_rule_is_all` (boolean) - `first_rule_is_all` (boolean)
* `true` if the first rule in the `Makefile` file is `all`, else `false`. * `true` if the first rule in the `Makefile` file is `all`, else `false`.
**NOTE:** if the `Makefile` file does **NOT** have an `all` rule or it is not **IMPORTANT:** if the `Makefile` file does **NOT** have an `all` rule or it is not
first and this boolean is `true` then you stand a good chance of having your first and this boolean is `true` then you stand a good chance of having your
submission rejected for violating [Rule 17](next/rules.html#rule17)! submission rejected for violating [Rule 17](next/rules.html#rule17)!
@@ -2117,7 +2169,7 @@ In order of the file's contents we describe each required field, below:
- `found_all_rule` (boolean) - `found_all_rule` (boolean)
* `true` if the `Makefile` file has an `all` rule, else `false`. * `true` if the `Makefile` file has an `all` rule, else `false`.
**NOTE:** if the `Makefile` file does **NOT** have an `all` rule and this **IMPORTANT:** if the `Makefile` file does **NOT** have an `all` rule and this
boolean is `true`, or if it does **NOT** have an `all` rule but boolean is `true`, or if it does **NOT** have an `all` rule but
`first_rule_is_all` is `true` then you stand a good chance of having your `first_rule_is_all` is `true` then you stand a good chance of having your
submission rejected for violating [Rule 17](next/rules.html#rule17)! submission rejected for violating [Rule 17](next/rules.html#rule17)!
@@ -2129,7 +2181,7 @@ In order of the file's contents we describe each required field, below:
- `found_clean_rule` (boolean) - `found_clean_rule` (boolean)
* `true` if the `Makefile` file has a `clean` rule, else `false`. * `true` if the `Makefile` file has a `clean` rule, else `false`.
**NOTE:** if the `Makefile` file does **NOT** have a `clean` rule and this **IMPORTANT:** if the `Makefile` file does **NOT** have a `clean` rule and this
boolean is `true` then you stand a good chance of having your submission boolean is `true` then you stand a good chance of having your submission
rejected for violating [Rule 17](next/rules.html#rule17)! rejected for violating [Rule 17](next/rules.html#rule17)!
@@ -2140,7 +2192,7 @@ In order of the file's contents we describe each required field, below:
- `found_clobber_rule` (boolean) - `found_clobber_rule` (boolean)
* `true` if the `Makefile` file has a `clobber` rule, else `false`. * `true` if the `Makefile` file has a `clobber` rule, else `false`.
**NOTE:** if the `Makefile` file does **NOT** have an `clobber` rule and this **IMPORTANT:** if the `Makefile` file does **NOT** have an `clobber` rule and this
boolean is `true` then you stand a good chance of having your submission boolean is `true` then you stand a good chance of having your submission
rejected for violating [Rule 17](next/rules.html#rule17)! rejected for violating [Rule 17](next/rules.html#rule17)!
@@ -2151,7 +2203,7 @@ In order of the file's contents we describe each required field, below:
- `found_try_rule` (boolean) - `found_try_rule` (boolean)
* `true` if the `Makefile` file has a `try` rule, else `false`. * `true` if the `Makefile` file has a `try` rule, else `false`.
**NOTE:** if the `Makefile` file does **NOT** have an `try` rule and this **IMPORTANT:** if the `Makefile` file does **NOT** have a `try` rule and this
boolean is `true` then you stand a good chance of having your submission boolean is `true` then you stand a good chance of having your submission
rejected for violating [Rule 17](next/rules.html#rule17)! rejected for violating [Rule 17](next/rules.html#rule17)!
@@ -2162,7 +2214,7 @@ In order of the file's contents we describe each required field, below:
- `test_mode` (boolean) - `test_mode` (boolean)
* `true` if the `test` ID was used to form the tarball, else `false`. * `true` if the `test` ID was used to form the tarball, else `false`.
**NOTE:** if this is `true` then this may **NOT** be submitted to the **IMPORTANT:** if this is `true` then this may **NOT** be submitted to the
contest! Please do **NOT** email the [Judges](judges.html) your submission! contest! Please do **NOT** email the [Judges](judges.html) your submission!
Next comes the `manifest` **array** which **MUST** have AT LEAST the following. Next comes the `manifest` **array** which **MUST** have AT LEAST the following.
@@ -2177,8 +2229,9 @@ The `mkiocccentry(1)` tool will write it in this order:
FAQ on "[.info.json](#info_json)" FAQ on "[.info.json](#info_json)"
for more information. for more information.
**NOTE:** if this is **NOT** the case you stand a great chance of having your **IMPORTANT:** if this is **NOT** the case you stand a
submission rejected for violating [Rule 17](next/rules.html#rule17)! great chance of having your submission rejected for violating [Rule
17](next/rules.html#rule17)!
- `auth_JSON` (double quoted string) - `auth_JSON` (double quoted string)
* This `MUST` be `".auth.json"`, defined as `AUTH_JSON_FILENAME` in * This `MUST` be `".auth.json"`, defined as `AUTH_JSON_FILENAME` in
@@ -2189,7 +2242,7 @@ The `mkiocccentry(1)` tool will write it in this order:
FAQ on "[.auth.json](#auth_json)" FAQ on "[.auth.json](#auth_json)"
for more information. for more information.
**NOTE:** if this is **NOT** the case you stand a great chance of having your **IMPORTANT:** if this is **NOT** the case you stand a great chance of having your
submission rejected for violating [Rule 17](next/rules.html#rule17)! submission rejected for violating [Rule 17](next/rules.html#rule17)!
- `c_src` (double quoted string) - `c_src` (double quoted string)
@@ -2198,12 +2251,9 @@ The `mkiocccentry(1)` tool will write it in this order:
in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/), and in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/), and
is your submission source code. is your submission source code.
**NOTE:** if this is **NOT** the case you stand a great chance of having your **IMPORTANT:** if this is **NOT** the case you stand a great chance of having your
submission rejected for violating [Rule 17](next/rules.html#rule17)! submission rejected for violating [Rule 17](next/rules.html#rule17)!
**NOTE:** if you provide to `mkiocccentry` a different filename it will be
copied to `prog.c`.
- `Makefile` (double quoted string) - `Makefile` (double quoted string)
* This `MUST` be `"Makefile"`, defined as `MAKEFILE_FILENAME` in * This `MUST` be `"Makefile"`, defined as `MAKEFILE_FILENAME` in
[soup/entry_util.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/entry_util.h) [soup/entry_util.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/entry_util.h)
@@ -2213,12 +2263,9 @@ The `mkiocccentry(1)` tool will write it in this order:
FAQ on "[Makefile](#makefile)" FAQ on "[Makefile](#makefile)"
for more information. for more information.
**NOTE:** if this is **NOT** the case you stand a great chance of having your **IMPORTANT:** if this is **NOT** the case you stand a great chance of having your
submission rejected for violating [Rule 17](next/rules.html#rule17)! submission rejected for violating [Rule 17](next/rules.html#rule17)!
**NOTE:** if you provide to `mkiocccentry` a different filename it will be
copied to `Makefile`.
- `remarks` (double quoted string) - `remarks` (double quoted string)
* This `MUST` be `"remarks.md"`, defined as `REMARKS_FILENAME` in * This `MUST` be `"remarks.md"`, defined as `REMARKS_FILENAME` in
[soup/entry_util.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/entry_util.h) [soup/entry_util.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/entry_util.h)
@@ -2228,35 +2275,33 @@ The `mkiocccentry(1)` tool will write it in this order:
FAQ on "[remarks.md](#remarks_md)" FAQ on "[remarks.md](#remarks_md)"
for more information. for more information.
**NOTE:** if this is **NOT** the case you stand a great chance of having your **IMPORTANT:** if this is **NOT** the case you stand a great chance of having your
submission rejected for violating [Rule 17](next/rules.html#rule17)! submission rejected for violating [Rule 17](next/rules.html#rule17)!
**NOTE:** if you provide to `mkiocccentry` a different filename it will be
copied to `remarks.md`.
The `manifest` **array** also **OPTIONALLY** has one or more of the field: The `manifest` **array** also **OPTIONALLY** has one or more of the field:
- `extra_file` (double quoted string) - `extra_file` (double quoted string)
* Any additional file that you need or want to include with your submission. * Any additional file that you need or want to include with your submission.
**NOTE:** this MUST **NOT** match a mandatory filename (see above list) and **IMPORTANT:** this MUST **NOT** match a mandatory filename (see above list)
`chkentry` will verify this for you; it is **ALSO** an **error** if the and `chkentry` will verify this for you; it is **ALSO** an **error** if the
filenames are not unique. In these cases you stand a great risk of having filenames are not unique, not POSIX plus + safe chars only, if they are the
your submission rejected for violating [Rule 17](next/rules.html#rule17)! On wrong permission and various other things. In these cases you stand a great
the other hand, **ONLY** `mkiocccentry` will verify that the files exist and risk of having your submission rejected for violating [Rule
can be read; `txzchk(1)` will **NOT** do this for you as it only **LISTS** 17](next/rules.html#rule17)! On the other hand, **ONLY** `mkiocccentry` will
the tarball: it does **NOT** extract it. Even so, the [Judges](judges.html) verify that the files exist and can be read; `txzchk(1)` will **NOT** do
**WILL** extract the tarball and if a file listed in the manifest does not this for you as it only **LISTS** the tarball: it does **NOT** extract it.
exist your submission will very likely be rejected for not being as Even so, the [Judges](judges.html) **WILL** extract the tarball and if a
documented! file listed in the manifest does not exist your submission will very likely
be rejected for not being as documented!
Finally, after the `manifest` **array**, the following fields **MUST** exist: Finally, after the `manifest` **array**, the following fields **MUST** exist:
- `formed_timestamp` (number) - `formed_timestamp` (number)
* Seconds since epoch when JSON (`.auth.json` or `.info.json`) file was formed (see `gettimeofday(2)`). * Seconds since epoch when JSON (`.auth.json` or `.info.json`) file was formed (see `gettimeofday(2)`).
**NOTE:** this **MUST** be greater than or equal to `MIN_TIMESTAMP` (see **IMPORTANT:** this **MUST** be greater than or equal to `MIN_TIMESTAMP` (see
[soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h)
in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/)). If in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/)). If
this is not the case your submission **WILL BE** rejected. this is not the case your submission **WILL BE** rejected.
@@ -2265,7 +2310,7 @@ Finally, after the `manifest` **array**, the following fields **MUST** exist:
* Microseconds since the tstamp (seconds since epoch when `.auth.json` was * Microseconds since the tstamp (seconds since epoch when `.auth.json` was
formed - see `gettimeofday(2)`) second. formed - see `gettimeofday(2)`) second.
**NOTE:** this **MUST** be within the range `MIN_FORMED_TIMESTAMP_USEC` **IMPORTANT:** this **MUST** be within the range `MIN_FORMED_TIMESTAMP_USEC`
**THROUGH** `MAX_FORMED_TIMESTAMP_USEC` and is validated by **THROUGH** `MAX_FORMED_TIMESTAMP_USEC` and is validated by
`test_formed_timestamp_usec()` in `test_formed_timestamp_usec()` in
[soup/entry_util.c](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/entry_util.c) [soup/entry_util.c](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/entry_util.c)
@@ -2276,7 +2321,7 @@ Finally, after the `manifest` **array**, the following fields **MUST** exist:
- `timestamp_epoch` (double quoted string) - `timestamp_epoch` (double quoted string)
* `"Thu Jan 01 00:00:00 1970 UTC"` (`gettimeofday(2)` epoch). * `"Thu Jan 01 00:00:00 1970 UTC"` (`gettimeofday(2)` epoch).
**NOTE:** this **MUST** be `"Thu Jan 01 00:00:00 1970 UTC"` which is `#define`d **IMPORTANT:** this **MUST** be `"Thu Jan 01 00:00:00 1970 UTC"` which is `#define`d
as `TIMESTAMP_EPOCH` in as `TIMESTAMP_EPOCH` in
[soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h)
in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If
@@ -2285,14 +2330,15 @@ Finally, after the `manifest` **array**, the following fields **MUST** exist:
- `min_timestamp` (number) - `min_timestamp` (number)
* Minimum number of second since epoch for **this** IOCCC. * Minimum number of second since epoch for **this** IOCCC.
**NOTE:** this **MUST** be >= `MIN_TIMESTAMP` defined in **IMPORTANT:** this **MUST** be >= `MIN_TIMESTAMP` defined in
[soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h)
in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If
this is not the case your submission **WILL BE** rejected! this is not the case your submission **WILL BE** rejected!
This file will be verified with the `chkentry(1)` tool and if there are any This file will be validated with the `chkentry(1)` tool and if there are any
problems **it is an error** and the tarball will **NOT** be formed by problems with it or the submission directory, **it is an error**. If there is an
`mkiocccentry`; otherwise the `txzchk(1)` tool will be executed on the tarball. error the tarball will **NOT** be formed by `mkiocccentry`; otherwise the
`txzchk(1)` tool will be executed on the tarball.
The [Judges](judges.html) **WILL** use `chkentry(1)` on this file during the The [Judges](judges.html) **WILL** use `chkentry(1)` on this file during the
judging process and if it does not pass your submission **WILL BE** rejected. judging process and if it does not pass your submission **WILL BE** rejected.
@@ -2300,12 +2346,12 @@ judging process and if it does not pass your submission **WILL BE** rejected.
An obvious example where `chkentry` would fail to validate `.info.json` is if An obvious example where `chkentry` would fail to validate `.info.json` is if
there is a mismatch of type in the JSON file with what is expected, for there is a mismatch of type in the JSON file with what is expected, for
instance, if in `.info.json` the `no_comment` that we chose to not comment on is instance, if in `.info.json` the `no_comment` that we chose to not comment on is
not a string. Another obvious example is when things are out of range (see above not a string or is the wrong string. Another obvious example is when things are
for list). Two more examples would be if a field is missing or if an unknown out of range (see above for list). Two more examples would be if a field is
filed is in the file. In these cases (and any others that must be established as missing or if an unknown filed is in the file. In these cases (and any others
valid by `chkentry`) your submission would be rejected for violating [Rule that must be established as valid by `chkentry`) your submission would be
17](next/rules.html#rule17) and in particular because `chkentry` would not rejected for violating [Rule 17](next/rules.html#rule17) and in particular
validate the `.info.json` file. because `chkentry` would not validate the `.info.json` file.
If you wish to **verify** that your `.info.json` file is valid **JSON** then see the If you wish to **verify** that your `.info.json` file is valid **JSON** then see the
FAQ on "[validating JSON documents](#validating_json)". FAQ on "[validating JSON documents](#validating_json)".
@@ -4780,6 +4826,7 @@ below note) this would be advisable.
a defect of `clang` that required numerous entries to be fixed for clang is that it a defect of `clang` that required numerous entries to be fixed for clang is that it
requires that `main()`'s arguments to be of a specific type. However some requires that `main()`'s arguments to be of a specific type. However some
versions of `clang` are more strict in the number of args allowed. versions of `clang` are more strict in the number of args allowed.
Jump to: [top](#) Jump to: [top](#)
<hr style="width:50%;text-align:left;margin-left:0"> <hr style="width:50%;text-align:left;margin-left:0">
+68 -36
View File
@@ -436,8 +436,9 @@ Mastodon</a> feed as <em>sometimes</em> the
<p>See our <p>See our
FAQ on “<a href="../faq.html#feedback">rules, guidelines, tools feedback</a>” FAQ on “<a href="../faq.html#feedback">rules, guidelines, tools feedback</a>”
as well as our as well as our
FAQ on “<a href="../faq.html#question">about asking questions</a>” FAQ on “<a href="../faq.html#question">asking questions</a>”
about these guidelines. You might also find the FAQ in general useful, especially the about these rules. You might also find the FAQ in general useful, as well as the
<a href="../quick-start.html">quick start guide</a> and <a href="register.html">how to register</a>.
FAQ on “<a href="../quick-start.html#enter">how to enter the IOCCC</a>”.</p> FAQ on “<a href="../quick-start.html#enter">how to enter the IOCCC</a>”.</p>
<h1 id="the-ioccc-is-pending">The IOCCC is pending</h1> <h1 id="the-ioccc-is-pending">The IOCCC is pending</h1>
<p>While the IOCCC is not open yet, there is a tentative opening date for the next IOCCC.</p> <p>While the IOCCC is not open yet, there is a tentative opening date for the next IOCCC.</p>
@@ -461,11 +462,11 @@ writing by <a href="../contact.html">contacting the judges</a>.</p>
</div> </div>
</div> </div>
<p class="leftbar"> <p class="leftbar">
These <a href="guidelines.html">IOCCC guidelines</a> are version <strong>28.38 2025-02-12</strong>. These <a href="guidelines.html">IOCCC guidelines</a> are version <strong>28.39 2025-02-26</strong>.
</p> </p>
<p class="leftbar"> <p class="leftbar">
The <a href="guidelines.md" download="guidelines.md">markdown form of these guidelines</a> The markdown form of these guidelines <a href="guidelines.md"
is available for download. download="guidelines.md">is available for download</a>.
</p> </p>
<p><strong>IMPORTANT</strong>: Be <strong>SURE</strong> to read the <a href="rules.html">IOCCC rules</a>.</p> <p><strong>IMPORTANT</strong>: Be <strong>SURE</strong> to read the <a href="rules.html">IOCCC rules</a>.</p>
<p>Jump to: <a href="#">top</a></p> <p>Jump to: <a href="#">top</a></p>
@@ -602,11 +603,12 @@ The <code>-d</code> option is an alias for <code>-s 21701</code>. An example use
</p> </p>
<pre><code> mkiocccentry -d workdir topdir</code></pre> <pre><code> mkiocccentry -d workdir topdir</code></pre>
<p class="leftbar"> <p class="leftbar">
where <code>workdir</code> is the directory which the tarball will be formed and the where <code>workdir</code> is the directory where the tarball will be formed and the
<code>topdir</code> is the directory which has the required files (<code>prog.c</code>, <code>Makefile</code> and <code>topdir</code> is the directory which has the required files (<code>prog.c</code>, <code>Makefile</code> and
<code>remarks.md</code>) along with extra data files you wish to submit. Be aware <code>remarks.md</code>) along with extra data files (and if you wish, directories) you
that if the directory exists already, you will have to remove it or move it wish to submit. Be aware that if the directory exists already, you will have to
before this option will work a second time, just like in normal mode. remove it or move it before this option will work a second time, just like in
normal mode.
</p> </p>
<p class="leftbar"> <p class="leftbar">
<strong>IMPORTANT NOTE</strong>: if you run the program outside the repo directory <strong>IMPORTANT NOTE</strong>: if you run the program outside the repo directory
@@ -616,9 +618,10 @@ are required like <code>chkentry(1)</code>, <code>txzchk(1)</code> and <code>fna
have installed them but some tools are out of date (in the install path) it will have installed them but some tools are out of date (in the install path) it will
cause problems. Additionally, if you do not have the most recent version when cause problems. Additionally, if you do not have the most recent version when
submitting a tarball it will be rejected for not having the right versions of submitting a tarball it will be rejected for not having the right versions of
the tools. This is why you <strong>MUST</strong> make sure you have the most recent the tools. This is why you <strong>MUST</strong> make sure you have the most recent version
version of all the tools and you either run it from the repo directory itself OR of all the tools and you either run it from the repo directory itself OR you
you install them (<code>make install</code> as root or via <code>sudo</code>). install them (<code>make install</code> as via <code>sudo</code> or as root). We recommend you install
the tools but if you wish to run it from the repo directory you may.
</p> </p>
<p class="leftbar"> <p class="leftbar">
<a href="rules.html#rule17">Rule 17</a> has been <strong>significantly modified</strong> <a href="rules.html#rule17">Rule 17</a> has been <strong>significantly modified</strong>
@@ -652,8 +655,8 @@ previously uploaded submission by rebuilding your submission with the
To help you with this, so that you do not have to repeatedly answer all the To help you with this, so that you do not have to repeatedly answer all the
questions, the <code>mkiocccentry(1)</code> tool has the options <code>-a answers</code>, <code>-A answers</code> questions, the <code>mkiocccentry(1)</code> tool has the options <code>-a answers</code>, <code>-A answers</code>
and <code>-i answers</code>, where <code>-a</code> will write to an answers file (if it does not and <code>-i answers</code>, where <code>-a</code> will write to an answers file (if it does not
already exist), <code>-A</code> will overwrite the file and <code>-i</code> will read the answers from already exist), <code>-A</code> <strong>WILL OVERWRITE THE FILE</strong> and <code>-i</code> will read the answers from
the file. If you use <code>-A</code>, be sure you don’t overwrite another file by accident! the file. If you use <code>-A</code>, <strong>BE SURE</strong> you don’t overwrite another file by accident!
</p> </p>
<p class="leftbar"> <p class="leftbar">
Once the contest enters the <strong><a href="../status.html#judging">judging</a></strong> state, you will Once the contest enters the <strong><a href="../status.html#judging">judging</a></strong> state, you will
@@ -854,10 +857,11 @@ its algorithm.
</p> </p>
<p class="leftbar"> <p class="leftbar">
If <code>mkiocccentry</code> encounters an <strong>error</strong> the program will exit and the xz If <code>mkiocccentry</code> encounters an <strong>error</strong> the program will exit and the xz
compressed tarball <strong>will not be formed</strong>. For instance, if <code>chkentry(1)</code> (see compressed tarball <strong>will not be formed</strong>. For instance, if
below) fails to validate the <code>.auth.json</code> or <code>.info.json</code> <a href="#chkentry">chkentry(1)</a> fails to validate the <code>.auth.json</code> or <code>.info.json</code>
<a href="https://www.json.org/json-en.html">JSON</a> files (see below) that <code>mkiocccentry(1)</code> creates, <a href="https://www.json.org/json-en.html">JSON</a> files (see below) that
it is an error and <strong>possibly</strong> a bug that you should <a href="https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&amp;labels=bug&amp;projects=&amp;template=bug_report.yml&amp;title=%5BBug%5D+%3Ctitle%3E">report as a bug at the <code>mkiocccentry(1)</code> creates, or anything else <code>mkiocccentry(1)</code> does, it is an
<strong>error</strong> and <strong>possibly</strong> a bug that you should <a href="https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&amp;labels=bug&amp;projects=&amp;template=bug_report.yml&amp;title=%5BBug%5D+%3Ctitle%3E">report as a bug at the
mkiocccentry bug report mkiocccentry bug report
page</a>. page</a>.
<strong>PLEASE run the <code>bug_report.sh</code> script to help us out here!</strong> See the <strong>PLEASE run the <code>bug_report.sh</code> script to help us out here!</strong> See the
@@ -878,7 +882,9 @@ Needless to say, we do <strong>NOT</strong> recommend these options.
</p> </p>
<p class="leftbar"> <p class="leftbar">
In many places it will prompt you to verify what you input, allowing you to In many places it will prompt you to verify what you input, allowing you to
correct details as you go along. correct details as you go along. Be advised that there is a default answer and
if you press enter it will proceed with that default, so make sure you have
provided the correct answer.
</p> </p>
<p>Jump to: <a href="#">top</a></p> <p>Jump to: <a href="#">top</a></p>
<div id="mkiocccentry-synopsis"> <div id="mkiocccentry-synopsis">
@@ -891,9 +897,10 @@ The synopsis of the <code>mkiocccentry(1)</code> tool is:
<p class="leftbar"> <p class="leftbar">
To help you with editing a submission, the <code>mkiocccentry(1)</code> tool has To help you with editing a submission, the <code>mkiocccentry(1)</code> tool has
some options to write <em>OR</em> read from an answers file so you do not have to input some options to write <em>OR</em> read from an answers file so you do not have to input
the information about the author(s) and the submission more than once (unless of the information about the author(s) and the submission more than once, unless of
course you need to make some changes, in which case you can use the option that course you need to make some changes, in which case you can use the option that
overwrites the file). overwrites the file. If you do use the overwrite option, <strong>MAKE SURE</strong> you do
not overwrite another file!
</p> </p>
<p class="leftbar"> <p class="leftbar">
See the See the
@@ -911,8 +918,9 @@ execute one or more additional tools.
</p> </p>
<h2 id="iocccsize"><code>iocccsize</code></h2> <h2 id="iocccsize"><code>iocccsize</code></h2>
<p class="leftbar"> <p class="leftbar">
<code>mkiocccentry(1)</code> will use code from <code>iocccsize(1)</code> which <code>mkiocccentry(1)</code> will use code from <code>iocccsize(1)</code> which detects a number of
detects a number of issues that you may ignore, if you wish, as noted above. issues (such as <a href="rules.html#rule2">Rule 2</a>) that you may ignore, if you wish, as
noted above.
</p> </p>
<p class="leftbar"> <p class="leftbar">
In other words, you no longer need to run <code>iocccsize</code> manually. However, the In other words, you no longer need to run <code>iocccsize</code> manually. However, the
@@ -929,7 +937,12 @@ submission. These files <strong>MUST</strong> pass the checks of <code>chkentry(
If <code>chkentry</code> does not pass and you used <code>mkiocccentry(1)</code> it is <strong>very likely</strong> a If <code>chkentry</code> does not pass and you used <code>mkiocccentry(1)</code> it is <strong>very likely</strong> a
bug and you should <a href="https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&amp;labels=bug&amp;projects=&amp;template=bug_report.yml&amp;title=%5BBug%5D+%3Ctitle%3E">report it as a bug at the mkiocccentry issues bug and you should <a href="https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&amp;labels=bug&amp;projects=&amp;template=bug_report.yml&amp;title=%5BBug%5D+%3Ctitle%3E">report it as a bug at the mkiocccentry issues
page</a>. page</a>.
See the <strong>PLEASE</strong> run the command:
</p>
<pre><code> make bug_report</code></pre>
<p class="leftbar">
from the top level repo directory itself.
See also the
FAQ on “<a href="../faq.html#mkiocccentry_bugs">reporting mkiocccentry bugs</a>”. FAQ on “<a href="../faq.html#mkiocccentry_bugs">reporting mkiocccentry bugs</a>”.
</p> </p>
<p class="leftbar"> <p class="leftbar">
@@ -939,10 +952,15 @@ executed on it. In this case, there should be no problems, as <code>mkiocccentry
<strong>NOT</strong> form a tarball if there are any issues. <strong>NOT</strong> form a tarball if there are any issues.
</p> </p>
<p class="leftbar"> <p class="leftbar">
If <code>mkiocccentry(1)</code> is used and <code>chkentry(1)</code> fails to validate either of the <strong>NOTE</strong>: <code>chkentry(1)</code> also validates other things in your submission
files, then unless it is a system specific problem, it is likely a bug in directory.
</p>
<p class="leftbar">
If <code>mkiocccentry(1)</code> is used and <code>chkentry(1)</code> fails to validate your submission
directory, then unless it is a system specific problem, it could be a bug in
<code>mkiocccentry(1)</code>, <code>chkentry(1)</code> or possibly <code>jparse</code>, though this is quite <code>mkiocccentry(1)</code>, <code>chkentry(1)</code> or possibly <code>jparse</code>, though this is quite
unlikely. unlikely. Nonetheless, if you believe there is a bug, you may report it as
explained above.
</p> </p>
<p class="leftbar"> <p class="leftbar">
If you want to know what <code>.auth.json</code> is, see the If you want to know what <code>.auth.json</code> is, see the
@@ -993,15 +1011,16 @@ installed separately, in order to use the tools in <code>mkiocccentry</code>.
In other words, <code>mkiocccentry</code> <strong>contains everything</strong> you need, and <em>even if you In other words, <code>mkiocccentry</code> <strong>contains everything</strong> you need, and <em>even if you
do install</em> the libraries from their respective repos, it/they will <strong>not be do install</em> the libraries from their respective repos, it/they will <strong>not be
used</strong> when compiling the <code>mkiocccentry</code> tools. This is important to used</strong> when compiling the <code>mkiocccentry</code> tools. This is important to
make sure that you’re using the correct versions, which is verified by make sure that you’re using the correct versions, which is also verified by
<code>chkentry</code>. See <a href="rules.html#rule17">Rule 17</a>! <code>chkentry</code> (in the JSON files created by <code>mkiocccentry(1)</code>). See <a href="rules.html#rule17">Rule
17</a>!
</p> </p>
<p class="leftbar"> <p class="leftbar">
Please see the Please see the
FAQ on “<a href="../faq.html#chkentry">validating .auth.json and/or .info.json files</a> FAQ on “<a href="../faq.html#chkentry">validating .auth.json and/or .info.json files</a>
for more details on <code>chkentry</code> and how you can use it to validate your for more details on <code>chkentry</code> and how you can use it to validate your
<code>.auth.json</code> and <code>.info.json</code> files manually, without having to repackage your <code>.auth.json</code> and <code>.info.json</code> files (and your submission directory in general)
submission. manually, without having to repackage your submission.
</p> </p>
<p class="leftbar"> <p class="leftbar">
You might also wish to see the You might also wish to see the
@@ -1018,7 +1037,8 @@ compressed tarball; if any issues are found (‘<code>feathers are stuck in the
<code>mkiocccentry(1)</code></strong>, then it is <strong>possibly</strong> a bug in one of the tools and you <code>mkiocccentry(1)</code></strong>, then it is <strong>possibly</strong> a bug in one of the tools and you
might want to <a href="https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&amp;labels=bug&amp;projects=&amp;template=bug_report.yml&amp;title=%5BBug%5D+%3Ctitle%3E">report it as a bug at the mkiocccentry bug report might want to <a href="https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&amp;labels=bug&amp;projects=&amp;template=bug_report.yml&amp;title=%5BBug%5D+%3Ctitle%3E">report it as a bug at the mkiocccentry bug report
page</a>. <strong>PLEASE run the page</a>. <strong>PLEASE run the
<code>bug_report.sh</code> script to help us out here!</strong> See the <code>bug_report.sh</code> script to help us out here!</strong> You may do this by running from
the top level directory of the repo <code>make bug_report</code>. See the
FAQ on “<a href="../faq.html#mkiocccentry_bugs">report mkiocccentry bugs</a>”. FAQ on “<a href="../faq.html#mkiocccentry_bugs">report mkiocccentry bugs</a>”.
</p> </p>
<p class="leftbar"> <p class="leftbar">
@@ -1055,9 +1075,9 @@ an extra file, not an optional file.
<p class="leftbar"> <p class="leftbar">
In particular, any file that is not <code>prog.c</code>, <code>Makefile</code>, <code>remarks.md</code>, In particular, any file that is not <code>prog.c</code>, <code>Makefile</code>, <code>remarks.md</code>,
<code>try.sh</code>, <code>prog.alt.c</code> or <code>try.alt.sh</code> will be counted as an extra file, and if <code>try.sh</code>, <code>prog.alt.c</code> or <code>try.alt.sh</code> will be counted as an extra file, and if
<code>try.sh</code>, <code>prog.alt.c</code> or <code>try.alt.sh</code> are not in the top level directory they <code>try.sh</code>, <code>prog.alt.c</code> or <code>try.alt.sh</code> are not in the top level submission
will also be counted as an extra file. The <code>.info.json</code> and <code>.auth.json</code> files directory they will also be counted as an extra file. The <code>.info.json</code> and
are not counted as extra files but are required. <code>.auth.json</code> files are not counted as extra files but are required.
</p> </p>
<p class="leftbar"> <p class="leftbar">
In other words, the actual amount of <strong>EXTRA</strong> files is 31. In other words, the actual amount of <strong>EXTRA</strong> files is 31.
@@ -1078,7 +1098,9 @@ section</a> for more details on this important tool.
</p> </p>
<p class="leftbar"> <p class="leftbar">
If you <strong>DO</strong> include a tarball, and the build process or the program extracts If you <strong>DO</strong> include a tarball, and the build process or the program extracts
said tarball(s), the make <code>clobber</code> rule <strong>MUST</strong> remove them. said tarball(s), the make <code>clobber</code> rule <strong>MUST</strong> remove them. Even so, if you
include a tarball to get past the limit on the number of files, you <strong>MUST</strong>
justify this in your remarks!
</p> </p>
<p class="leftbar"> <p class="leftbar">
<strong>IMPORTANT REMINDER</strong>: make <strong>SURE</strong> your tarball does <strong>NOT</strong> reveal who you are! <strong>IMPORTANT REMINDER</strong>: make <strong>SURE</strong> your tarball does <strong>NOT</strong> reveal who you are!
@@ -1442,6 +1464,10 @@ use of <code>git(1)</code> or <code>gh(1)</code>, just be sure that your submiss
submission Makefile don’t depend on such tools. submission Makefile don’t depend on such tools.
</p> </p>
<p class="leftbar"> <p class="leftbar">
Of course if you do use GitHub to work on your submission, you might want to
make the repo private so you don’t reveal who you are. :-)
</p>
<p class="leftbar">
If this is not clear, please do <strong>NOT</strong> use these tools to help with the If this is not clear, please do <strong>NOT</strong> use these tools to help with the
<code>clobber</code> rule! For instance, do <strong>NOT</strong> use <code>git clean</code>! Not only does this <code>clobber</code> rule! For instance, do <strong>NOT</strong> use <code>git clean</code>! Not only does this
depend on the user having <code>git(1)</code> but it also does not account for the depend on the user having <code>git(1)</code> but it also does not account for the
@@ -1461,6 +1487,12 @@ In other words, for <code>make clobber</code>, do something like:
<p class="leftbar"> <p class="leftbar">
And do <strong>NOT</strong> use <code>git</code> for any other tool either. And do <strong>NOT</strong> use <code>git</code> for any other tool either.
</p> </p>
<p class="leftbar">
<strong>NOTE</strong>: <code>mkiocccentry(1)</code> will directly run <code>make clobber</code> in the submission
directory. An although it is not an error if this fails, if it fails because the
Makefile does not have a clobber rule, it will be flagged by <code>mkiocccentry(1)</code>
(you may ignore this but it does put you at a risk of violating the rules).
</p>
<p>Jump to: <a href="#">top</a></p> <p>Jump to: <a href="#">top</a></p>
<div id="likes"> <div id="likes">
<div id="dislikes"> <div id="dislikes">
+75 -38
View File
@@ -14,8 +14,9 @@ Mastodon](https://fosstodon.org/@ioccc) feed as _sometimes_ the
See our See our
FAQ on "[rules, guidelines, tools feedback](../faq.html#feedback)" FAQ on "[rules, guidelines, tools feedback](../faq.html#feedback)"
as well as our as well as our
FAQ on "[about asking questions](../faq.html#question)" FAQ on "[asking questions](../faq.html#question)"
about these guidelines. You might also find the FAQ in general useful, especially the about these rules. You might also find the FAQ in general useful, as well as the
[quick start guide](../quick-start.html) and [how to register](register.html).
FAQ on "[how to enter the IOCCC](../quick-start.html#enter)". FAQ on "[how to enter the IOCCC](../quick-start.html#enter)".
@@ -49,12 +50,12 @@ Jump to: [top](#)
</div> </div>
<p class="leftbar"> <p class="leftbar">
These [IOCCC guidelines](guidelines.html) are version **28.38 2025-02-12**. These [IOCCC guidelines](guidelines.html) are version **28.39 2025-02-26**.
</p> </p>
<p class="leftbar"> <p class="leftbar">
The <a href="guidelines.md" download="guidelines.md">markdown form of these guidelines</a> The markdown form of these guidelines <a href="guidelines.md"
is available for download. download="guidelines.md">is available for download</a>.
</p> </p>
**IMPORTANT**: Be **SURE** to read the [IOCCC rules](rules.html). **IMPORTANT**: Be **SURE** to read the [IOCCC rules](rules.html).
@@ -226,11 +227,12 @@ The `-d` option is an alias for `-s 21701`. An example use:
``` ```
<p class="leftbar"> <p class="leftbar">
where `workdir` is the directory which the tarball will be formed and the where `workdir` is the directory where the tarball will be formed and the
`topdir` is the directory which has the required files (`prog.c`, `Makefile` and `topdir` is the directory which has the required files (`prog.c`, `Makefile` and
`remarks.md`) along with extra data files you wish to submit. Be aware `remarks.md`) along with extra data files (and if you wish, directories) you
that if the directory exists already, you will have to remove it or move it wish to submit. Be aware that if the directory exists already, you will have to
before this option will work a second time, just like in normal mode. remove it or move it before this option will work a second time, just like in
normal mode.
</p> </p>
<p class="leftbar"> <p class="leftbar">
@@ -241,9 +243,10 @@ are required like `chkentry(1)`, `txzchk(1)` and `fnamchk(1)`. But even if you
have installed them but some tools are out of date (in the install path) it will have installed them but some tools are out of date (in the install path) it will
cause problems. Additionally, if you do not have the most recent version when cause problems. Additionally, if you do not have the most recent version when
submitting a tarball it will be rejected for not having the right versions of submitting a tarball it will be rejected for not having the right versions of
the tools. This is why you **MUST** make sure you have the most recent the tools. This is why you **MUST** make sure you have the most recent version
version of all the tools and you either run it from the repo directory itself OR of all the tools and you either run it from the repo directory itself OR you
you install them (`make install` as root or via `sudo`). install them (`make install` as via `sudo` or as root). We recommend you install
the tools but if you wish to run it from the repo directory you may.
</p> </p>
<p class="leftbar"> <p class="leftbar">
@@ -283,8 +286,8 @@ previously uploaded submission by rebuilding your submission with the
To help you with this, so that you do not have to repeatedly answer all the To help you with this, so that you do not have to repeatedly answer all the
questions, the `mkiocccentry(1)` tool has the options `-a answers`, `-A answers` questions, the `mkiocccentry(1)` tool has the options `-a answers`, `-A answers`
and `-i answers`, where `-a` will write to an answers file (if it does not and `-i answers`, where `-a` will write to an answers file (if it does not
already exist), `-A` will overwrite the file and `-i` will read the answers from already exist), `-A` **WILL OVERWRITE THE FILE** and `-i` will read the answers from
the file. If you use `-A`, be sure you don't overwrite another file by accident! the file. If you use `-A`, **BE SURE** you don't overwrite another file by accident!
</p> </p>
<p class="leftbar"> <p class="leftbar">
@@ -531,10 +534,11 @@ its algorithm.
<p class="leftbar"> <p class="leftbar">
If `mkiocccentry` encounters an **error** the program will exit and the xz If `mkiocccentry` encounters an **error** the program will exit and the xz
compressed tarball **will not be formed**. For instance, if `chkentry(1)` (see compressed tarball **will not be formed**. For instance, if
below) fails to validate the `.auth.json` or `.info.json` [chkentry(1)](#chkentry) fails to validate the `.auth.json` or `.info.json`
[JSON](https://www.json.org/json-en.html) files (see below) that `mkiocccentry(1)` creates, [JSON](https://www.json.org/json-en.html) files (see below) that
it is an error and **possibly** a bug that you should [report as a bug at the `mkiocccentry(1)` creates, or anything else `mkiocccentry(1)` does, it is an
**error** and **possibly** a bug that you should [report as a bug at the
mkiocccentry bug report mkiocccentry bug report
page](https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml&title=%5BBug%5D+%3Ctitle%3E). page](https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml&title=%5BBug%5D+%3Ctitle%3E).
**PLEASE run the `bug_report.sh` script to help us out here!** See the **PLEASE run the `bug_report.sh` script to help us out here!** See the
@@ -558,7 +562,9 @@ Needless to say, we do **NOT** recommend these options.
<p class="leftbar"> <p class="leftbar">
In many places it will prompt you to verify what you input, allowing you to In many places it will prompt you to verify what you input, allowing you to
correct details as you go along. correct details as you go along. Be advised that there is a default answer and
if you press enter it will proceed with that default, so make sure you have
provided the correct answer.
</p> </p>
@@ -579,9 +585,10 @@ The synopsis of the `mkiocccentry(1)` tool is:
<p class="leftbar"> <p class="leftbar">
To help you with editing a submission, the `mkiocccentry(1)` tool has To help you with editing a submission, the `mkiocccentry(1)` tool has
some options to write _OR_ read from an answers file so you do not have to input some options to write _OR_ read from an answers file so you do not have to input
the information about the author(s) and the submission more than once (unless of the information about the author(s) and the submission more than once, unless of
course you need to make some changes, in which case you can use the option that course you need to make some changes, in which case you can use the option that
overwrites the file). overwrites the file. If you do use the overwrite option, **MAKE SURE** you do
not overwrite another file!
</p> </p>
<p class="leftbar"> <p class="leftbar">
@@ -607,8 +614,9 @@ execute one or more additional tools.
</div> </div>
<p class="leftbar"> <p class="leftbar">
`mkiocccentry(1)` will use code from `iocccsize(1)` which `mkiocccentry(1)` will use code from `iocccsize(1)` which detects a number of
detects a number of issues that you may ignore, if you wish, as noted above. issues (such as [Rule 2](rules.html#rule2)) that you may ignore, if you wish, as
noted above.
</p> </p>
<p class="leftbar"> <p class="leftbar">
@@ -631,7 +639,16 @@ submission. These files **MUST** pass the checks of `chkentry(1)`!
If `chkentry` does not pass and you used `mkiocccentry(1)` it is **very likely** a If `chkentry` does not pass and you used `mkiocccentry(1)` it is **very likely** a
bug and you should [report it as a bug at the mkiocccentry issues bug and you should [report it as a bug at the mkiocccentry issues
page](https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml&title=%5BBug%5D+%3Ctitle%3E). page](https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml&title=%5BBug%5D+%3Ctitle%3E).
See the **PLEASE** run the command:
</p>
``` <!---sh-->
make bug_report
```
<p class="leftbar">
from the top level repo directory itself.
See also the
FAQ on "[reporting mkiocccentry bugs](../faq.html#mkiocccentry_bugs)". FAQ on "[reporting mkiocccentry bugs](../faq.html#mkiocccentry_bugs)".
</p> </p>
@@ -643,10 +660,16 @@ executed on it. In this case, there should be no problems, as `mkiocccentry(1)`
</p> </p>
<p class="leftbar"> <p class="leftbar">
If `mkiocccentry(1)` is used and `chkentry(1)` fails to validate either of the **NOTE**: `chkentry(1)` also validates other things in your submission
files, then unless it is a system specific problem, it is likely a bug in directory.
</p>
<p class="leftbar">
If `mkiocccentry(1)` is used and `chkentry(1)` fails to validate your submission
directory, then unless it is a system specific problem, it could be a bug in
`mkiocccentry(1)`, `chkentry(1)` or possibly `jparse`, though this is quite `mkiocccentry(1)`, `chkentry(1)` or possibly `jparse`, though this is quite
unlikely. unlikely. Nonetheless, if you believe there is a bug, you may report it as
explained above.
</p> </p>
<p class="leftbar"> <p class="leftbar">
@@ -703,16 +726,17 @@ installed separately, in order to use the tools in `mkiocccentry`.
In other words, `mkiocccentry` **contains everything** you need, and _even if you In other words, `mkiocccentry` **contains everything** you need, and _even if you
do install_ the libraries from their respective repos, it/they will **not be do install_ the libraries from their respective repos, it/they will **not be
used** when compiling the `mkiocccentry` tools. This is important to used** when compiling the `mkiocccentry` tools. This is important to
make sure that you're using the correct versions, which is verified by make sure that you're using the correct versions, which is also verified by
`chkentry`. See [Rule 17](rules.html#rule17)! `chkentry` (in the JSON files created by `mkiocccentry(1)`). See [Rule
17](rules.html#rule17)!
</p> </p>
<p class="leftbar"> <p class="leftbar">
Please see the Please see the
FAQ on "[validating .auth.json and/or .info.json files](../faq.html#chkentry) FAQ on "[validating .auth.json and/or .info.json files](../faq.html#chkentry)
for more details on `chkentry` and how you can use it to validate your for more details on `chkentry` and how you can use it to validate your
`.auth.json` and `.info.json` files manually, without having to repackage your `.auth.json` and `.info.json` files (and your submission directory in general)
submission. manually, without having to repackage your submission.
</p> </p>
<p class="leftbar"> <p class="leftbar">
@@ -736,7 +760,8 @@ tarball`' :-) ) **AND if and _ONLY IF_ you used
`mkiocccentry(1)`**, then it is **possibly** a bug in one of the tools and you `mkiocccentry(1)`**, then it is **possibly** a bug in one of the tools and you
might want to [report it as a bug at the mkiocccentry bug report might want to [report it as a bug at the mkiocccentry bug report
page](https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml&title=%5BBug%5D+%3Ctitle%3E). **PLEASE run the page](https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml&title=%5BBug%5D+%3Ctitle%3E). **PLEASE run the
`bug_report.sh` script to help us out here!** See the `bug_report.sh` script to help us out here!** You may do this by running from
the top level directory of the repo `make bug_report`. See the
FAQ on "[report mkiocccentry bugs](../faq.html#mkiocccentry_bugs)". FAQ on "[report mkiocccentry bugs](../faq.html#mkiocccentry_bugs)".
</p> </p>
@@ -780,9 +805,9 @@ an extra file, not an optional file.
<p class="leftbar"> <p class="leftbar">
In particular, any file that is not `prog.c`, `Makefile`, `remarks.md`, In particular, any file that is not `prog.c`, `Makefile`, `remarks.md`,
`try.sh`, `prog.alt.c` or `try.alt.sh` will be counted as an extra file, and if `try.sh`, `prog.alt.c` or `try.alt.sh` will be counted as an extra file, and if
`try.sh`, `prog.alt.c` or `try.alt.sh` are not in the top level directory they `try.sh`, `prog.alt.c` or `try.alt.sh` are not in the top level submission
will also be counted as an extra file. The `.info.json` and `.auth.json` files directory they will also be counted as an extra file. The `.info.json` and
are not counted as extra files but are required. `.auth.json` files are not counted as extra files but are required.
</p> </p>
<p class="leftbar"> <p class="leftbar">
@@ -807,7 +832,9 @@ section](#txzchk) for more details on this important tool.
<p class="leftbar"> <p class="leftbar">
If you **DO** include a tarball, and the build process or the program extracts If you **DO** include a tarball, and the build process or the program extracts
said tarball(s), the make `clobber` rule **MUST** remove them. said tarball(s), the make `clobber` rule **MUST** remove them. Even so, if you
include a tarball to get past the limit on the number of files, you **MUST**
justify this in your remarks!
</p> </p>
<p class="leftbar"> <p class="leftbar">
@@ -835,8 +862,6 @@ in your `remarks.md`).
</p> </p>
<p class="leftbar"> <p class="leftbar">
See also the See also the
FAQ on "[txzchk](../faq.html#txzchk)". FAQ on "[txzchk](../faq.html#txzchk)".
@@ -1282,6 +1307,11 @@ use of `git(1)` or `gh(1)`, just be sure that your submission code and your
submission Makefile don't depend on such tools. submission Makefile don't depend on such tools.
</p> </p>
<p class="leftbar">
Of course if you do use GitHub to work on your submission, you might want to
make the repo private so you don't reveal who you are. :-)
</p>
<p class="leftbar"> <p class="leftbar">
If this is not clear, please do **NOT** use these tools to help with the If this is not clear, please do **NOT** use these tools to help with the
`clobber` rule! For instance, do **NOT** use `git clean`! Not only does this `clobber` rule! For instance, do **NOT** use `git clean`! Not only does this
@@ -1314,6 +1344,13 @@ And do **NOT** use `git` for any other tool either.
</p> </p>
<p class="leftbar">
**NOTE**: `mkiocccentry(1)` will directly run `make clobber` in the submission
directory. An although it is not an error if this fails, if it fails because the
Makefile does not have a clobber rule, it will be flagged by `mkiocccentry(1)`
(you may ignore this but it does put you at a risk of violating the rules).
</p>
Jump to: [top](#) Jump to: [top](#)
<div id="likes"> <div id="likes">
+86 -62
View File
@@ -437,8 +437,8 @@ Mastodon</a> feed as <em>sometimes</em> the
FAQ on “<a href="../faq.html#feedback">rules, guidelines, tools feedback</a>” FAQ on “<a href="../faq.html#feedback">rules, guidelines, tools feedback</a>”
as well as our as well as our
FAQ on “<a href="../faq.html#question">about asking questions</a>” FAQ on “<a href="../faq.html#question">about asking questions</a>”
about these rules. You might also find the FAQ in general useful, especially the about these rules. You might also find the FAQ in general useful, as well as the
FAQ on “<a href="../quick-start.html#enter">how to enter the IOCCC</a>”.</p> <a href="../quick-start.html">quick start guide</a> and <a href="register.html">how to register</a>.</p>
<h1 id="the-ioccc-is-pending">The IOCCC is pending</h1> <h1 id="the-ioccc-is-pending">The IOCCC is pending</h1>
<p>While the IOCCC is not open now, there is a tentative opening date for the next IOCCC.</p> <p>While the IOCCC is not open now, there is a tentative opening date for the next IOCCC.</p>
<p>Comments and suggestions on these preliminary rules are welcome. See the <p>Comments and suggestions on these preliminary rules are welcome. See the
@@ -461,11 +461,11 @@ writing by <a href="../contact.html">contacting the judges</a>.</p>
</div> </div>
</div> </div>
<p class="leftbar"> <p class="leftbar">
These <a href="rules.html">IOCCC rules</a> are version <strong>28.24 2025-02-12</strong>. These <a href="rules.html">IOCCC rules</a> are version <strong>28.25 2025-02-26</strong>.
</p> </p>
<p class="leftbar"> <p class="leftbar">
The <a href="rules.md" download="rules.md">markdown form of these rules</a> The markdown form of these rules <a href="rules.md" download="rules.md">is
is available for download. available for download</a>.
</p> </p>
<p><strong>IMPORTANT</strong>: Be sure to read the <a href="guidelines.html">IOCCC guidelines</a>.</p> <p><strong>IMPORTANT</strong>: Be sure to read the <a href="guidelines.html">IOCCC guidelines</a>.</p>
<p>Jump to: <a href="#">top</a></p> <p>Jump to: <a href="#">top</a></p>
@@ -859,7 +859,7 @@ super-user, special owner, special group, etc.) are still <strong>HIGHLY
DISCOURAGED</strong>. We do not guarantee these functions will behave as DISCOURAGED</strong>. We do not guarantee these functions will behave as
you expect on our test platforms. If your program needs special you expect on our test platforms. If your program needs special
permissions you <strong>MUST</strong> document this fact, and explain why permissions you <strong>MUST</strong> document this fact, and explain why
it is needed in your submissions <code>remarks.md</code> file.</p> it is needed in your submission’s <code>remarks.md</code> file.</p>
<p>Jump to: <a href="#">top</a></p> <p>Jump to: <a href="#">top</a></p>
<div id="rule12"> <div id="rule12">
<h2 id="rule-12">Rule 12</h2> <h2 id="rule-12">Rule 12</h2>
@@ -978,10 +978,9 @@ and <code>.auth.json</code>) and files that are also not the optional files (<co
<p>Jump to: <a href="#">top</a></p> <p>Jump to: <a href="#">top</a></p>
<h3 id="rule-17---the-complex-details">Rule 17 - The COMPLEX details</h3> <h3 id="rule-17---the-complex-details">Rule 17 - The COMPLEX details</h3>
<p class="leftbar"> <p class="leftbar">
Each submission <strong>MUST</strong> be in the form of a xz compressed tarball. <p>Each submission <strong>MUST</strong> be in the form of a xz compressed tarball.
The xz compressed tarball filename must be of the form: The xz compressed tarball filename must be of the form:
</p> <code>^submit.username-slot_num.[1-9][0-9]{9,}.txz$</code>.</p>
<pre><code> ^submit.username-slot_num.[1-9][0-9]{9,}.txz$</code></pre>
<p class="leftbar"> <p class="leftbar">
… where <em><code>username</code></em> is your IOCCC registration username <strong>in the form of a … where <em><code>username</code></em> is your IOCCC registration username <strong>in the form of a
<a href="https://en.wikipedia.org/wiki/Universally_unique_identifier">UUID</a></strong> (see <a href="https://en.wikipedia.org/wiki/Universally_unique_identifier">UUID</a></strong> (see
@@ -993,7 +992,7 @@ details), and where <em><code>slot_num</code></em> is a single decimal digit int
In particular, <code>username</code> is in the form of: In particular, <code>username</code> is in the form of:
<code>xxxxxxxx-xxxx-4xxx-Nxxx-xxxxxxxxxxxx</code> where <code>'x'</code> is a hex digit in the range <code>xxxxxxxx-xxxx-4xxx-Nxxx-xxxxxxxxxxxx</code> where <code>'x'</code> is a hex digit in the range
of <code>[0-9a-f]</code>, 4 is the UUID version, and <code>N</code> is one of <code>8</code>, <code>9</code>, <code>a</code>, or <code>b</code>. of <code>[0-9a-f]</code>, 4 is the UUID version, and <code>N</code> is one of <code>8</code>, <code>9</code>, <code>a</code>, or <code>b</code>.
And yes, there is a 4 (UUID version 4) and variants <code>0x8</code>, <code>0x9</code>, <code>0xa</code> and And yes, there is a 4 (UUID version 4) and the variants <code>0x8</code>, <code>0x9</code>, <code>0xa</code> and
<code>0xb</code> in there. <code>0xb</code> in there.
</p> </p>
<p class="leftbar"> <p class="leftbar">
@@ -1001,40 +1000,27 @@ Your xz compressed tarball <strong>MUST</strong> contain, <strong>at a minimum</
</p> </p>
<ul> <ul>
<li><p class="leftbar"> <li><p class="leftbar">
<code>Makefile</code> <code>prog.c</code>
</p></li> </p></li>
<li><p class="leftbar"> <li><p class="leftbar">
<code>prog.c</code> <code>Makefile</code>
</p></li> </p></li>
<li><p class="leftbar"> <li><p class="leftbar">
<code>remarks.md</code> <code>remarks.md</code>
</p></li> </p></li>
<li><p class="leftbar"> <li><p class="leftbar">
<code>.info.json</code> <code>.auth.json</code>
</p></li> </p></li>
<li><p class="leftbar"> <li><p class="leftbar">
<code>.auth.json</code> <code>.info.json</code>
</p></li> </p></li>
</ul> </ul>
<p class="leftbar"> <p class="leftbar">
The <code>.info.json</code> is generated by the <code>mkiocccentry(1)</code> tool. If not, and it is <code>prog.c</code> is of course your submission program.
not valid JSON or it does not pass the <code>chkentry(1)</code> tool, your submission
<strong>WILL BE</strong> rejected! If you do use <code>mkiocccentry(1)</code> and it fails to pass
<code>chkentry(1)</code> then you might wish to <a href="https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&amp;labels=bug&amp;projects=&amp;template=bug_report.yml&amp;title=%5BBug%5D+%3Ctitle%3E">report it as a bug at the mkiocccentry
issues
page</a>.
</p>
<p class="leftbar">
The <code>.auth.json</code> is generated by the <code>mkiocccentry(1)</code> tool. If not, and it is
not valid JSON or it does not pass the <code>chkentry(1)</code> tool, your submission
<strong>WILL BE</strong> rejected! If you do use <code>mkiocccentry(1)</code> and it fails to pass
<code>chkentry(1)</code> then you might wish to <a href="https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&amp;labels=bug&amp;projects=&amp;template=bug_report.yml&amp;title=%5BBug%5D+%3Ctitle%3E">report it as a bug at the mkiocccentry
issues
page</a>.
</p> </p>
<p class="leftbar"> <p class="leftbar">
The <code>Makefile</code> <strong>MUST</strong> be a <strong>non</strong>-empty file in <strong><a href="https://www.gnu.org/software/make/manual/make.html">GNU The <code>Makefile</code> <strong>MUST</strong> be a <strong>non</strong>-empty file in <strong><a href="https://www.gnu.org/software/make/manual/make.html">GNU
Makefile</a></strong> form. See the Makefile</a></strong> format. See the
<a href="guidelines.html#makefile">Makefile section in the guidelines</a>, <a href="guidelines.html#makefile">Makefile section in the guidelines</a>,
the the
FAQ on “<a href="../faq.html#submission_makefiles">submission Makefile</a>” FAQ on “<a href="../faq.html#submission_makefiles">submission Makefile</a>”
@@ -1043,7 +1029,7 @@ FAQ on “<a href="../faq.html#make_compatibility">Makefile compatibility</a>”
for help. for help.
</p> </p>
<p class="leftbar"> <p class="leftbar">
The <code>remarks.md</code> <strong>MUST</strong> be a <strong>non</strong>-empty file in markdown form The <code>remarks.md</code> <strong>MUST</strong> be a <strong>non</strong>-empty file in markdown format
(<code>mkiocccentry(1)</code> only checks the file size but if you do not have any text in (<code>mkiocccentry(1)</code> only checks the file size but if you do not have any text in
it you still risk violating this rule). See also it you still risk violating this rule). See also
<a href="#rule18">Rule 18</a> and our <a href="#rule18">Rule 18</a> and our
@@ -1057,13 +1043,40 @@ See also the <a href="https://www.markdownguide.org/basic-syntax">markdown synta
and the <a href="https://spec.commonmark.org/current/">CommonMark Spec</a>. and the <a href="https://spec.commonmark.org/current/">CommonMark Spec</a>.
</p> </p>
<p class="leftbar"> <p class="leftbar">
The xz compressed tarball file <strong>MUST</strong> be less than or equal to <strong>3999971</strong> octets in size. The <code>.auth.json</code> file is created by <code>mkiocccentry(1)</code> and it holds information
about the author(s) of the submission. It will <strong>ONLY</strong> be looked at if your
submission wins but it <strong>MUST</strong> still be valid according to <code>chkentry(1)</code>.
</p>
<p class="leftbar">
The <code>.info.json</code> file is created by <code>mkiocccentry(1)</code> and it holds information
about the submission itself. It also <strong>MUST</strong> be valid according to
<code>chkentry(1)</code>.
</p>
<p class="leftbar">
For the complete <code>mkiocccentry(1)</code> process, see the
FAQ on the “<a href="../faq.html#mkiocccentry_process">mkiocccentry process</a>.
</p>
<p class="leftbar">
The tool performs a lot of checks, both directly and indirectly, and if it or
any other tool detects <strong>ANY</strong> problem, you are <strong>HIGHLY</strong> encouraged to fix it
and try again.
</p>
<p class="leftbar">
If you do use <code>mkiocccentry(1)</code> and you run into a problem, you might see the
FAQ on “<a href="../faq.html#questions">how to ask a question about the IOCCC rules, guidelines and
tools</a>”.
If you believe you have encountered a bug, feel free to open a bug report at the
<a href="https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&amp;labels=bug&amp;projects=&amp;template=bug_report.yml&amp;title=%5BBug%5D+%3Ctitle%3E">mkiocccentry repo issues
page</a>.
</p>
<p class="leftbar">
The xz compressed tarball file <strong>MUST</strong> be &lt;= <strong>3999971</strong> octets in size.
</p> </p>
<p class="leftbar"> <p class="leftbar">
When your submission’s xz compressed tarball is uncompressed, When your submission’s xz compressed tarball is uncompressed,
the total size of your submission: the sum of the size of the program, the total size of your submission (the sum of the size of the program,
hints, comments, build and info files <strong>MUST</strong> be less than or equal hints, comments, build and info files) <strong>MUST</strong> be &lt;=
to <strong>28314624</strong> octets (<strong>27651K</strong>) in size. <strong>28314624</strong> octets (<strong>27651K</strong>) in size.
</p> </p>
<p class="leftbar"> <p class="leftbar">
Your submission’s xz compressed tarball <strong>MUST</strong> pass the <code>txzchk(1)</code> test. See Your submission’s xz compressed tarball <strong>MUST</strong> pass the <code>txzchk(1)</code> test. See
@@ -1101,7 +1114,7 @@ Be &lt;= <strong>38</strong> characters in length.
<li><p class="leftbar"> <li><p class="leftbar">
<strong>NOT</strong> contain a path component of: <strong><code>.</code></strong> (that is, with <strong>NOT</strong> contain a path component of: <strong><code>.</code></strong> (that is, with
the exception of files generated by <code>mkiocccentry(1)</code> itself, it must have the exception of files generated by <code>mkiocccentry(1)</code> itself, it must have
<strong>NO</strong> <strong><code>.</code></strong>). <strong>NO</strong> <strong><code>.</code></strong> an <strong>NO</strong> dot file).
</p></li> </p></li>
<li><p class="leftbar"> <li><p class="leftbar">
<strong>NOT</strong> contain a path component of: <strong><code>..</code></strong> (that is, <strong>NOT</strong> contain a path component of: <strong><code>..</code></strong> (that is,
@@ -1134,8 +1147,8 @@ entry.
</p></li> </p></li>
</ul> </ul>
<p class="leftbar"> <p class="leftbar">
The <code>chkentry(1)</code> tool will validate these two JSON files <em>prior to</em> the tarball The <code>chkentry(1)</code> tool will validate these two JSON files, and do other checks
being formed. on your submission directory as well, <em>prior to</em> forming the tarball.
</p> </p>
<p class="leftbar"> <p class="leftbar">
Files and directories in your submission tarball <strong>MUST</strong> be specific Files and directories in your submission tarball <strong>MUST</strong> be specific
@@ -1144,17 +1157,22 @@ permissions and <code>mkiocccentry(1)</code> does this for you. In particular: d
<code>try.alt.sh</code>, if provided, <strong>MUST</strong> be <code>-r-xr-xr-x</code> (i.e. <code>0555</code>) and all other <code>try.alt.sh</code>, if provided, <strong>MUST</strong> be <code>-r-xr-xr-x</code> (i.e. <code>0555</code>) and all other
files <strong>MUST</strong> be <code>-r--r--r--</code> (i.e. <code>0444</code>). If the files do not have these files <strong>MUST</strong> be <code>-r--r--r--</code> (i.e. <code>0444</code>). If the files do not have these
permissions, your submission <strong>WILL</strong> be rejected for violating <a href="#rule17">Rule permissions, your submission <strong>WILL</strong> be rejected for violating <a href="#rule17">Rule
17</a>! If you do need different permissions, then see the 17</a>! In addition to <code>mkiocccentry(1)</code> creating and copying the
directories and files with these modes, it also verifies them after the fact and
if they are not correct it is an <strong>error</strong>.
</p>
<p class="leftbar">
If you do need different permissions, then see the
FAQ on “<a href="../faq.html#file_perms">file permissions</a>”. Also keep in mind FAQ on “<a href="../faq.html#file_perms">file permissions</a>”. Also keep in mind
<a href="#rule4">Rule 4</a>, <a href="#rule5">Rule 5</a> and <a href="#rule21">Rule 21</a>. <a href="#rule4">Rule 4</a>, <a href="#rule5">Rule 5</a> and <a href="#rule21">Rule 21</a>.
</p> </p>
<p class="leftbar"> <p class="leftbar">
The <code>txzchk(1)</code> tool will verify these (and other things) for you and The <code>txzchk(1)</code> tool will also verify file/directory permissions (and many other
the <code>chkentry(1)</code> tool will do additional checks on the contents of the things) for you and so will <code>chkentry(1)</code> (along with validating the JSON files
<code>.auth.json</code> and <code>.info.json</code> files (including JSON validity). If these checks and running semantics checks on them). If these checks fail it is an <strong>error</strong>
fail it is an error and <code>mkiocccentry(1)</code> will fail. In this case (it fails and and <code>mkiocccentry(1)</code> will fail. In this case (it fails and you used
you used <code>mkiocccentry(1)</code>) it is very <strong>possibly</strong> a bug; please <a href="https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&amp;labels=bug&amp;projects=&amp;template=bug_report.yml&amp;title=%5BBug%5D+%3Ctitle%3E">report it as <code>mkiocccentry(1)</code>) it is very <strong>possibly</strong> a bug; please <a href="https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&amp;labels=bug&amp;projects=&amp;template=bug_report.yml&amp;title=%5BBug%5D+%3Ctitle%3E">report it as a bug at
a bug at the mkiocccentry issues the mkiocccentry issues
page</a>. page</a>.
</p> </p>
<p class="leftbar"> <p class="leftbar">
@@ -1166,7 +1184,9 @@ possible there could be a problem and this poses a big risk of violating <a href
</p> </p>
<p class="leftbar"> <p class="leftbar">
The <code>fnamchk(1)</code>, which <code>txzchk(1)</code> executes, will verify that the The <code>fnamchk(1)</code>, which <code>txzchk(1)</code> executes, will verify that the
filename is correct. filename is correct. But if you do package your tarball manually, and you have a
mismatch in what is in the tarball and the name, <code>txzchk(1)</code> will flag the
discrepancy as an error and exit with non-zero.
</p> </p>
<p class="leftbar"> <p class="leftbar">
These checks <strong>MUST PASS</strong>. If they do not you stand a significant chance of These checks <strong>MUST PASS</strong>. If they do not you stand a significant chance of
@@ -1179,7 +1199,7 @@ having your submission rejected for violating <a href="#rule17">Rule 17</a>!
The maximum number of files your submission tarball may contain, not counting The maximum number of files your submission tarball may contain, not counting
the optional files (<code>prog.alt.c</code>, <code>try.sh</code>, <code>try.alt.sh</code>) and the mandatory the optional files (<code>prog.alt.c</code>, <code>try.sh</code>, <code>try.alt.sh</code>) and the mandatory
files (<code>prog.c</code>, <code>Makefile</code>, <code>remarks.md</code> plus the <code>mkiocccentry(1)</code> generated files (<code>prog.c</code>, <code>Makefile</code>, <code>remarks.md</code> plus the <code>mkiocccentry(1)</code> generated
files <code>.auth.json</code> and <code>.info.json</code>) is 31. This is defined in the macro files <code>.auth.json</code> and <code>.info.json</code>), is 31. This is defined in the macro
<code>MAX_EXTRA_FILE_COUNT</code> in <code>MAX_EXTRA_FILE_COUNT</code> in
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a>
in the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry repo</a>. See the in the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry repo</a>. See the
@@ -1191,7 +1211,8 @@ If you do include a tarball that takes your extra files count over the maximum,
you <strong>MUST</strong> explain this in your <code>remarks.md</code> file! <strong>PLEASE</strong> do not include a you <strong>MUST</strong> explain this in your <code>remarks.md</code> file! <strong>PLEASE</strong> do not include a
tarball with extra files for a test-suite; instead mention in your remarks that tarball with extra files for a test-suite; instead mention in your remarks that
you have extra files for a test-suite that can be included should your you have extra files for a test-suite that can be included should your
submission win. submission win. Of course if you don’t need that many files for a test-suite you
are more than welcome to include those files in your submission.
</p> </p>
<p class="leftbar"> <p class="leftbar">
If you need to extract a tarball by some Makefile, or perhaps the program If you need to extract a tarball by some Makefile, or perhaps the program
@@ -1199,13 +1220,14 @@ itself, then <code>make clobber</code> <strong>MUST</strong> remove everything t
created! created!
</p> </p>
<p class="leftbar"> <p class="leftbar">
Tarballs <strong>MUST</strong> only create files and directories <em>under them</em>. They may Tarballs <strong>MUST</strong> only create files and directories <em>under</em> the submission
<strong>NOT</strong> contain absolute paths (paths that start with <code>/</code>)! <code>txzchk</code> only checks directory. They may <strong>NOT</strong> contain absolute paths (paths that start with <code>/</code>)!
the submission tarball so you must verify these details yourself. <code>txzchk</code> only checks the submission tarball so you must verify these details
yourself.
</p> </p>
<p class="leftbar"> <p class="leftbar">
Make <strong>SURE</strong> your tarball does not reveal who you are! The <code>mkiocccentry(1)</code> <strong>IMPORTANT REMINDER</strong>: <strong>MAKE SURE</strong> your tarball does not reveal who you are!
tool uses the v7 format. For instance you might try: The <code>mkiocccentry(1)</code> tool uses the v7 format. For instance you might try:
</p> </p>
<pre><code> tar --format=v7 -cJf foo.txz directory</code></pre> <pre><code> tar --format=v7 -cJf foo.txz directory</code></pre>
<hr style="width:50%;text-align:left;margin-left:0"> <hr style="width:50%;text-align:left;margin-left:0">
@@ -1232,16 +1254,18 @@ for more help on ensuring you do have the most up to date release.
</p> </p>
<p class="leftbar"> <p class="leftbar">
We recommend that you run <code>make</code> and then install the tools (and man pages) via We recommend that you run <code>make</code> and then install the tools (and man pages) via
<code>make install</code> (as root or using <code>sudo(1)</code>) to help you run these tools from your <code>make install</code> (as root or using <code>sudo(1)</code>) to help you run these tools from
submission’s directory. The <code>make install</code> will install in <code>/usr/local</code>. your submission’s directory (or any other directory). The <code>make install</code> will
However, <strong>you do not have</strong> to install them, but in that case you’ll have to run it install in <code>/usr/local</code>. However, <strong>you do not have</strong> to install them, but in
from the toolkit’s directory or use the correct options to specify the path to that case you’ll have to run it from the toolkit’s directory or use the correct
the necessary tools, and also specify the path to your files. options to specify the path to the necessary tools, and also specify the path to
your files.
</p> </p>
<p class="leftbar"> <p class="leftbar">
These tools will link in the <code>jparse(3)</code> library; <code>chkentry(1)</code> uses the parser These tools will link in the <code>jparse(3)</code> library and the <code>dbg</code> library and the
to validate the <a href="https://www.json.org/json-en.html">JSON</a> but the other tools <code>dyn_array</code> library; <code>chkentry(1)</code> uses the JSON parser (<code>jparse</code>) to validate
use parts of the library as well. and parse the <a href="https://www.json.org/json-en.html">JSON</a> but the other tools use
parts of the <code>jparse</code> utility functions as well.
</p> </p>
<p class="leftbar"> <p class="leftbar">
If you run into a problem with one or more of these tools, <strong>PLEASE</strong> <a href="https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&amp;labels=bug&amp;projects=&amp;template=bug_report.yml&amp;title=%5BBug%5D+%3Ctitle%3E">report it If you run into a problem with one or more of these tools, <strong>PLEASE</strong> <a href="https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&amp;labels=bug&amp;projects=&amp;template=bug_report.yml&amp;title=%5BBug%5D+%3Ctitle%3E">report it
@@ -1253,10 +1277,10 @@ FAQ on “<a href="../faq.html#mkiocccentry_bugs">mkiocccentry repo bugs</a>”.
</p> </p>
<p class="leftbar"> <p class="leftbar">
At the risk of stating the obvious: submissions that violate <a href="#rule17">Rule At the risk of stating the obvious: submissions that violate <a href="#rule17">Rule
17</a> <strong>will be rejected</strong>, so <strong>be sure</strong> to use the latest release of the 17</a> <strong>WILL BE REJECTED</strong>, so <strong>BE SURE</strong> to use the latest release of the
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry repo</a>, to form and test <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry repo</a>, to form and test
your submission’s xz compressed tarball. Do <strong>NOT</strong> assume you have the most your submission’s xz compressed tarball. Do <strong>NOT</strong> assume you have the most
recent release without pulling or downloading via GitHub and <strong>make sure</strong> you recent release without pulling or downloading via GitHub and do <strong>MAKE SURE</strong> you
do this <strong>AFTER</strong> the <a href="../status.html">contest status</a> has changed to do this <strong>AFTER</strong> the <a href="../status.html">contest status</a> has changed to
<a href="../status.html#open">open</a>. <a href="../status.html#open">open</a>.
</p> </p>
+90 -65
View File
@@ -15,8 +15,8 @@ See our
FAQ on "[rules, guidelines, tools feedback](../faq.html#feedback)" FAQ on "[rules, guidelines, tools feedback](../faq.html#feedback)"
as well as our as well as our
FAQ on "[about asking questions](../faq.html#question)" FAQ on "[about asking questions](../faq.html#question)"
about these rules. You might also find the FAQ in general useful, especially the about these rules. You might also find the FAQ in general useful, as well as the
FAQ on "[how to enter the IOCCC](../quick-start.html#enter)". [quick start guide](../quick-start.html) and [how to register](register.html).
# The IOCCC is pending # The IOCCC is pending
@@ -50,15 +50,13 @@ Jump to: [top](#)
</div> </div>
</div> </div>
<p class="leftbar"> <p class="leftbar">
These [IOCCC rules](rules.html) are version **28.24 2025-02-12**. These [IOCCC rules](rules.html) are version **28.25 2025-02-26**.
</p> </p>
<p class="leftbar"> <p class="leftbar">
The <a href="rules.md" download="rules.md">markdown form of these rules</a> The markdown form of these rules <a href="rules.md" download="rules.md">is
is available for download. available for download</a>.
</p> </p>
**IMPORTANT**: Be sure to read the [IOCCC guidelines](guidelines.html). **IMPORTANT**: Be sure to read the [IOCCC guidelines](guidelines.html).
@@ -603,7 +601,7 @@ super-user, special owner, special group, etc.) are still **HIGHLY
DISCOURAGED**. We do not guarantee these functions will behave as DISCOURAGED**. We do not guarantee these functions will behave as
you expect on our test platforms. If your program needs special you expect on our test platforms. If your program needs special
permissions you **MUST** document this fact, and explain why permissions you **MUST** document this fact, and explain why
it is needed in your submissions `remarks.md` file. it is needed in your submission's `remarks.md` file.
Jump to: [top](#) Jump to: [top](#)
@@ -757,11 +755,7 @@ Jump to: [top](#)
<p class="leftbar"> <p class="leftbar">
Each submission **MUST** be in the form of a xz compressed tarball. Each submission **MUST** be in the form of a xz compressed tarball.
The xz compressed tarball filename must be of the form: The xz compressed tarball filename must be of the form:
</p> `^submit.username-slot_num.[1-9][0-9]{9,}.txz$`.
``` <!---re-->
^submit.username-slot_num.[1-9][0-9]{9,}.txz$
```
<p class="leftbar"> <p class="leftbar">
... where _`username`_ is your IOCCC registration username **in the form of a ... where _`username`_ is your IOCCC registration username **in the form of a
@@ -775,7 +769,7 @@ details), and where _`slot_num`_ is a single decimal digit integer
In particular, `username` is in the form of: In particular, `username` is in the form of:
`xxxxxxxx-xxxx-4xxx-Nxxx-xxxxxxxxxxxx` where `'x'` is a hex digit in the range `xxxxxxxx-xxxx-4xxx-Nxxx-xxxxxxxxxxxx` where `'x'` is a hex digit in the range
of `[0-9a-f]`, 4 is the UUID version, and `N` is one of `8`, `9`, `a`, or `b`. of `[0-9a-f]`, 4 is the UUID version, and `N` is one of `8`, `9`, `a`, or `b`.
And yes, there is a 4 (UUID version 4) and variants `0x8`, `0x9`, `0xa` and And yes, there is a 4 (UUID version 4) and the variants `0x8`, `0x9`, `0xa` and
`0xb` in there. `0xb` in there.
</p> </p>
@@ -783,33 +777,19 @@ And yes, there is a 4 (UUID version 4) and variants `0x8`, `0x9`, `0xa` and
Your xz compressed tarball **MUST** contain, **at a minimum**, the following files: Your xz compressed tarball **MUST** contain, **at a minimum**, the following files:
</p> </p>
* <p class="leftbar">`Makefile`</p>
* <p class="leftbar">`prog.c`</p> * <p class="leftbar">`prog.c`</p>
* <p class="leftbar">`Makefile`</p>
* <p class="leftbar">`remarks.md`</p> * <p class="leftbar">`remarks.md`</p>
* <p class="leftbar">`.info.json`</p>
* <p class="leftbar">`.auth.json`</p> * <p class="leftbar">`.auth.json`</p>
* <p class="leftbar">`.info.json`</p>
<p class="leftbar"> <p class="leftbar">
The `.info.json` is generated by the `mkiocccentry(1)` tool. If not, and it is `prog.c` is of course your submission program.
not valid JSON or it does not pass the `chkentry(1)` tool, your submission
**WILL BE** rejected! If you do use `mkiocccentry(1)` and it fails to pass
`chkentry(1)` then you might wish to [report it as a bug at the mkiocccentry
issues
page](https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml&title=%5BBug%5D+%3Ctitle%3E).
</p>
<p class="leftbar">
The `.auth.json` is generated by the `mkiocccentry(1)` tool. If not, and it is
not valid JSON or it does not pass the `chkentry(1)` tool, your submission
**WILL BE** rejected! If you do use `mkiocccentry(1)` and it fails to pass
`chkentry(1)` then you might wish to [report it as a bug at the mkiocccentry
issues
page](https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml&title=%5BBug%5D+%3Ctitle%3E).
</p> </p>
<p class="leftbar"> <p class="leftbar">
The `Makefile` **MUST** be a **non**-empty file in **[GNU The `Makefile` **MUST** be a **non**-empty file in **[GNU
Makefile](https://www.gnu.org/software/make/manual/make.html)** form. See the Makefile](https://www.gnu.org/software/make/manual/make.html)** format. See the
[Makefile section in the guidelines](guidelines.html#makefile), [Makefile section in the guidelines](guidelines.html#makefile),
the the
FAQ on "[submission Makefile](../faq.html#submission_makefiles)" FAQ on "[submission Makefile](../faq.html#submission_makefiles)"
@@ -819,7 +799,7 @@ for help.
</p> </p>
<p class="leftbar"> <p class="leftbar">
The `remarks.md` **MUST** be a **non**-empty file in markdown form The `remarks.md` **MUST** be a **non**-empty file in markdown format
(`mkiocccentry(1)` only checks the file size but if you do not have any text in (`mkiocccentry(1)` only checks the file size but if you do not have any text in
it you still risk violating this rule). See also it you still risk violating this rule). See also
[Rule 18](#rule18) and our [Rule 18](#rule18) and our
@@ -835,14 +815,47 @@ and the [CommonMark Spec](https://spec.commonmark.org/current/).
</p> </p>
<p class="leftbar"> <p class="leftbar">
The xz compressed tarball file **MUST** be less than or equal to **3999971** octets in size. The `.auth.json` file is created by `mkiocccentry(1)` and it holds information
about the author(s) of the submission. It will **ONLY** be looked at if your
submission wins but it **MUST** still be valid according to `chkentry(1)`.
</p>
<p class="leftbar">
The `.info.json` file is created by `mkiocccentry(1)` and it holds information
about the submission itself. It also **MUST** be valid according to
`chkentry(1)`.
</p>
<p class="leftbar">
For the complete `mkiocccentry(1)` process, see the
FAQ on the "[mkiocccentry process](../faq.html#mkiocccentry_process).
</p>
<p class="leftbar">
The tool performs a lot of checks, both directly and indirectly, and if it or
any other tool detects **ANY** problem, you are **HIGHLY** encouraged to fix it
and try again.
</p>
<p class="leftbar">
If you do use `mkiocccentry(1)` and you run into a problem, you might see the
FAQ on "[how to ask a question about the IOCCC rules, guidelines and
tools](../faq.html#questions)".
If you believe you have encountered a bug, feel free to open a bug report at the
[mkiocccentry repo issues
page](https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml&title=%5BBug%5D+%3Ctitle%3E).
</p>
<p class="leftbar">
The xz compressed tarball file **MUST** be <= **3999971** octets in size.
</p> </p>
<p class="leftbar"> <p class="leftbar">
When your submission's xz compressed tarball is uncompressed, When your submission's xz compressed tarball is uncompressed,
the total size of your submission: the sum of the size of the program, the total size of your submission (the sum of the size of the program,
hints, comments, build and info files **MUST** be less than or equal hints, comments, build and info files) **MUST** be <=
to **28314624** octets (**27651K**) in size. **28314624** octets (**27651K**) in size.
</p> </p>
<p class="leftbar"> <p class="leftbar">
@@ -881,7 +894,7 @@ Filenames in your entry (that is, not including the files generated by the
* <p class="leftbar">**NOT** have a leading **`/`**.</p> * <p class="leftbar">**NOT** have a leading **`/`**.</p>
* <p class="leftbar">**NOT** contain a path component of: **`.`** (that is, with * <p class="leftbar">**NOT** contain a path component of: **`.`** (that is, with
the exception of files generated by `mkiocccentry(1)` itself, it must have the exception of files generated by `mkiocccentry(1)` itself, it must have
**NO** **`.`**).</p> **NO** **`.`** an **NO** dot file).</p>
* <p class="leftbar">**NOT** contain a path component of: **`..`** (that is, * <p class="leftbar">**NOT** contain a path component of: **`..`** (that is,
**NO** **`..`**).</p> **NO** **`..`**).</p>
* <p class="leftbar">Match the regular expression * <p class="leftbar">Match the regular expression
@@ -901,8 +914,8 @@ authors (that will only be looked at if the submission wins).</p>
entry.</p> entry.</p>
<p class="leftbar"> <p class="leftbar">
The `chkentry(1)` tool will validate these two JSON files _prior to_ the tarball The `chkentry(1)` tool will validate these two JSON files, and do other checks
being formed. on your submission directory as well, _prior to_ forming the tarball.
</p> </p>
<p class="leftbar"> <p class="leftbar">
@@ -912,18 +925,24 @@ permissions and `mkiocccentry(1)` does this for you. In particular: directories
`try.alt.sh`, if provided, **MUST** be `-r-xr-xr-x` (i.e. `0555`) and all other `try.alt.sh`, if provided, **MUST** be `-r-xr-xr-x` (i.e. `0555`) and all other
files **MUST** be `-r--r--r--` (i.e. `0444`). If the files do not have these files **MUST** be `-r--r--r--` (i.e. `0444`). If the files do not have these
permissions, your submission **WILL** be rejected for violating [Rule permissions, your submission **WILL** be rejected for violating [Rule
17](#rule17)! If you do need different permissions, then see the 17](#rule17)! In addition to `mkiocccentry(1)` creating and copying the
directories and files with these modes, it also verifies them after the fact and
if they are not correct it is an **error**.
</p>
<p class="leftbar">
If you do need different permissions, then see the
FAQ on "[file permissions](../faq.html#file_perms)". Also keep in mind FAQ on "[file permissions](../faq.html#file_perms)". Also keep in mind
[Rule 4](#rule4), [Rule 5](#rule5) and [Rule 21](#rule21). [Rule 4](#rule4), [Rule 5](#rule5) and [Rule 21](#rule21).
</p> </p>
<p class="leftbar"> <p class="leftbar">
The `txzchk(1)` tool will verify these (and other things) for you and The `txzchk(1)` tool will also verify file/directory permissions (and many other
the `chkentry(1)` tool will do additional checks on the contents of the things) for you and so will `chkentry(1)` (along with validating the JSON files
`.auth.json` and `.info.json` files (including JSON validity). If these checks and running semantics checks on them). If these checks fail it is an **error**
fail it is an error and `mkiocccentry(1)` will fail. In this case (it fails and and `mkiocccentry(1)` will fail. In this case (it fails and you used
you used `mkiocccentry(1)`) it is very **possibly** a bug; please [report it as `mkiocccentry(1)`) it is very **possibly** a bug; please [report it as a bug at
a bug at the mkiocccentry issues the mkiocccentry issues
page](https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml&title=%5BBug%5D+%3Ctitle%3E). page](https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml&title=%5BBug%5D+%3Ctitle%3E).
</p> </p>
@@ -937,7 +956,9 @@ possible there could be a problem and this poses a big risk of violating [Rule
<p class="leftbar"> <p class="leftbar">
The `fnamchk(1)`, which `txzchk(1)` executes, will verify that the The `fnamchk(1)`, which `txzchk(1)` executes, will verify that the
filename is correct. filename is correct. But if you do package your tarball manually, and you have a
mismatch in what is in the tarball and the name, `txzchk(1)` will flag the
discrepancy as an error and exit with non-zero.
</p> </p>
<p class="leftbar"> <p class="leftbar">
@@ -953,7 +974,7 @@ having your submission rejected for violating [Rule 17](#rule17)!
The maximum number of files your submission tarball may contain, not counting The maximum number of files your submission tarball may contain, not counting
the optional files (`prog.alt.c`, `try.sh`, `try.alt.sh`) and the mandatory the optional files (`prog.alt.c`, `try.sh`, `try.alt.sh`) and the mandatory
files (`prog.c`, `Makefile`, `remarks.md` plus the `mkiocccentry(1)` generated files (`prog.c`, `Makefile`, `remarks.md` plus the `mkiocccentry(1)` generated
files `.auth.json` and `.info.json`) is 31. This is defined in the macro files `.auth.json` and `.info.json`), is 31. This is defined in the macro
`MAX_EXTRA_FILE_COUNT` in `MAX_EXTRA_FILE_COUNT` in
[soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h)
in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry). See the in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry). See the
@@ -966,7 +987,8 @@ If you do include a tarball that takes your extra files count over the maximum,
you **MUST** explain this in your `remarks.md` file! **PLEASE** do not include a you **MUST** explain this in your `remarks.md` file! **PLEASE** do not include a
tarball with extra files for a test-suite; instead mention in your remarks that tarball with extra files for a test-suite; instead mention in your remarks that
you have extra files for a test-suite that can be included should your you have extra files for a test-suite that can be included should your
submission win. submission win. Of course if you don't need that many files for a test-suite you
are more than welcome to include those files in your submission.
</p> </p>
<p class="leftbar"> <p class="leftbar">
@@ -976,14 +998,15 @@ created!
</p> </p>
<p class="leftbar"> <p class="leftbar">
Tarballs **MUST** only create files and directories _under them_. They may Tarballs **MUST** only create files and directories _under_ the submission
**NOT** contain absolute paths (paths that start with `/`)! `txzchk` only checks directory. They may **NOT** contain absolute paths (paths that start with `/`)!
the submission tarball so you must verify these details yourself. `txzchk` only checks the submission tarball so you must verify these details
yourself.
</p> </p>
<p class="leftbar"> <p class="leftbar">
Make **SURE** your tarball does not reveal who you are! The `mkiocccentry(1)` **IMPORTANT REMINDER**: **MAKE SURE** your tarball does not reveal who you are!
tool uses the v7 format. For instance you might try: The `mkiocccentry(1)` tool uses the v7 format. For instance you might try:
</p> </p>
``` <!---sh--> ``` <!---sh-->
@@ -1019,17 +1042,19 @@ for more help on ensuring you do have the most up to date release.
<p class="leftbar"> <p class="leftbar">
We recommend that you run `make` and then install the tools (and man pages) via We recommend that you run `make` and then install the tools (and man pages) via
`make install` (as root or using `sudo(1)`) to help you run these tools from your `make install` (as root or using `sudo(1)`) to help you run these tools from
submission's directory. The `make install` will install in `/usr/local`. your submission's directory (or any other directory). The `make install` will
However, **you do not have** to install them, but in that case you'll have to run it install in `/usr/local`. However, **you do not have** to install them, but in
from the toolkit's directory or use the correct options to specify the path to that case you'll have to run it from the toolkit's directory or use the correct
the necessary tools, and also specify the path to your files. options to specify the path to the necessary tools, and also specify the path to
your files.
</p> </p>
<p class="leftbar"> <p class="leftbar">
These tools will link in the `jparse(3)` library; `chkentry(1)` uses the parser These tools will link in the `jparse(3)` library and the `dbg` library and the
to validate the [JSON](https://www.json.org/json-en.html) but the other tools `dyn_array` library; `chkentry(1)` uses the JSON parser (`jparse`) to validate
use parts of the library as well. and parse the [JSON](https://www.json.org/json-en.html) but the other tools use
parts of the `jparse` utility functions as well.
</p> </p>
<p class="leftbar"> <p class="leftbar">
@@ -1042,10 +1067,10 @@ FAQ on "[mkiocccentry repo bugs](../faq.html#mkiocccentry_bugs)".
</p> </p>
<p class="leftbar">At the risk of stating the obvious: submissions that violate [Rule <p class="leftbar">At the risk of stating the obvious: submissions that violate [Rule
17](#rule17) **will be rejected**, so **be sure** to use the latest release of the 17](#rule17) **WILL BE REJECTED**, so **BE SURE** to use the latest release of the
[mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry), to form and test [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry), to form and test
your submission's xz compressed tarball. Do **NOT** assume you have the most your submission's xz compressed tarball. Do **NOT** assume you have the most
recent release without pulling or downloading via GitHub and **make sure** you recent release without pulling or downloading via GitHub and do **MAKE SURE** you
do this **AFTER** the [contest status](../status.html) has changed to do this **AFTER** the [contest status](../status.html) has changed to
[open](../status.html#open). [open](../status.html#open).
</p> </p>
+11 -10
View File
@@ -540,16 +540,17 @@ However, installing it will make it easier for you as you can run it from your
submission’s directory. See the submission’s directory. See the
FAQ on “<strong><a href="https://github.com/ioccc-src/mkiocccentry/blob/master/FAQ.md#install">installing mkiocccentry</a></strong>” FAQ on “<strong><a href="https://github.com/ioccc-src/mkiocccentry/blob/master/FAQ.md#install">installing mkiocccentry</a></strong>”
at the mkiocccentry repo.</p> at the mkiocccentry repo.</p>
<p>However, an <strong>IMPORTANT NOTE</strong>: if you run the program outside the repo <p><strong>IMPORTANT NOTE</strong>: if you run the program outside the repo directory
directory (specifying the absolute or relative path to the tool) and you (specifying the absolute or relative path to the tool) and you have not
have not installed the tools then you will have to specify the options for the installed the tools then you will have to specify the options for the tools that
tools that are required like <code>chkentry(1)</code>, <code>txzchk(1)</code> and <code>fnamchk(1)</code>. But are required like <code>chkentry(1)</code>, <code>txzchk(1)</code> and <code>fnamchk(1)</code>. But even if you
even if you have installed them but some tools are out of date (in the install have installed them but some tools are out of date (in the install path) it will
path) it will cause problems. Additionally, if you do not have the most recent cause problems. Additionally, if you do not have the most recent version when
version when submitting a tarball it will be rejected for not having the right submitting a tarball it will be rejected for not having the right versions of
versions of the tools. This is why you <strong>MUST</strong> make sure you have the most the tools. This is why you <strong>MUST</strong> make sure you have the most recent version
recent version of all the tools and you either run it from the repo directory of all the tools and you either run it from the repo directory itself OR you
itself OR you install them (<code>make install</code> as via <code>sudo</code> or as root).</p> install them (<code>make install</code> as via <code>sudo</code> or as root). We recommend you install
the tools but if you wish to run it from the repo directory you may.</p>
<p>If the <code>mkiocccentry</code> tool indicates that there is a problem with your <p>If the <code>mkiocccentry</code> tool indicates that there is a problem with your
submission, especially if it identifies a <a href="next/rules.html#rule2">Rule 2</a>, or submission, especially if it identifies a <a href="next/rules.html#rule2">Rule 2</a>, or
any other rule, related problem, you are <strong>strongly</strong> encouraged to revise and any other rule, related problem, you are <strong>strongly</strong> encouraged to revise and
+11 -10
View File
@@ -164,16 +164,17 @@ submission's directory. See the
FAQ on "**[installing mkiocccentry](https://github.com/ioccc-src/mkiocccentry/blob/master/FAQ.md#install)**" FAQ on "**[installing mkiocccentry](https://github.com/ioccc-src/mkiocccentry/blob/master/FAQ.md#install)**"
at the mkiocccentry repo. at the mkiocccentry repo.
However, an **IMPORTANT NOTE**: if you run the program outside the repo **IMPORTANT NOTE**: if you run the program outside the repo directory
directory (specifying the absolute or relative path to the tool) and you (specifying the absolute or relative path to the tool) and you have not
have not installed the tools then you will have to specify the options for the installed the tools then you will have to specify the options for the tools that
tools that are required like `chkentry(1)`, `txzchk(1)` and `fnamchk(1)`. But are required like `chkentry(1)`, `txzchk(1)` and `fnamchk(1)`. But even if you
even if you have installed them but some tools are out of date (in the install have installed them but some tools are out of date (in the install path) it will
path) it will cause problems. Additionally, if you do not have the most recent cause problems. Additionally, if you do not have the most recent version when
version when submitting a tarball it will be rejected for not having the right submitting a tarball it will be rejected for not having the right versions of
versions of the tools. This is why you **MUST** make sure you have the most the tools. This is why you **MUST** make sure you have the most recent version
recent version of all the tools and you either run it from the repo directory of all the tools and you either run it from the repo directory itself OR you
itself OR you install them (`make install` as via `sudo` or as root). install them (`make install` as via `sudo` or as root). We recommend you install
the tools but if you wish to run it from the repo directory you may.
If the `mkiocccentry` tool indicates that there is a problem with your If the `mkiocccentry` tool indicates that there is a problem with your
submission, especially if it identifies a [Rule 2](next/rules.html#rule2), or submission, especially if it identifies a [Rule 2](next/rules.html#rule2), or