say "So long and thanks for all the fish" to tmp
It is time to say "**So long and thanks for all the fish**" to the `tmp/` directory. Now that `bin/csv2entry.sh` and `bin/entry2csv.sh` are in working well, we no longer need any of the tools nor data files under the tmp/` directory. At this point, the `.entry.json` files AND `author/author_handle.json` are considered "_truth_" under this repo. BTW: We are developing the `bin/cvt-submission.sh` tool for the IOCCC judges to convert the contents of a submission files `.auth.json` and `.info.json` into `.entry.json` files AND `author/author_handle.json` file content (new or modified). We are also planning to develop a tool to validate an existing `.entry.json`: issuing warnings or errors if problematic `.entry.json` data is discovered. We also have the [chkentry(1)](https://github.com/ioccc-src/mkiocccentry/blob/master/chkentry.c) tool (and especially much thanks to the `jparse.a` link library) to validate `.auth.json` and `.info.json` files for a submission. With the completion of he `bin/cvt-submission.sh` tool and the `.entry.json` validator, as well as the `bin/csv2entry.sh` and `bin/entry2csv.sh`, we will be able to maintain a set of coherent `.entry.json` files.`
This commit is contained in:
1 parent
e83cd61baf
commit
633d457d1c
61 files changed
-51157
No files matched your search
@@ -1,657 +0,0 @@
|
||||
# tmp
|
||||
|
||||
The purpose of the `tmp` directory is to hold temporary files.
|
||||
The files in the `tmp` directory will go away leaving behind
|
||||
an empty `tmp` directory.
|
||||
|
||||
This documentation is here to help define terms, files under `tmp/`
|
||||
and the format of those files.
|
||||
|
||||
*NOTE*: The `terms` section may be moved to another file
|
||||
later on, after the contents
|
||||
|
||||
|
||||
## terms
|
||||
|
||||
|
||||
### `author`
|
||||
|
||||
An individual who was an `author` of at least one winning IOCCC entry.
|
||||
|
||||
Some authors have submitted more than one IOCCC entry that won. Some winning
|
||||
IOCCC entries have more than one author.
|
||||
|
||||
|
||||
### `author_handle`
|
||||
|
||||
An `author_handle` is string that refers to a given author and is unique to the
|
||||
IOCCC. Each author has exactly one `author_handle`.
|
||||
|
||||
For each `author_handle`, there will be a JSON file of the form:
|
||||
|
||||
```
|
||||
author/author_handle.json
|
||||
```
|
||||
|
||||
Because the `author_handle` is used to form a JSON filename, the string must be
|
||||
lower case POSIX safe string. Furthermore, the `author_handle` must be an ASCII
|
||||
string that matches this regexp:
|
||||
|
||||
``` <!---re-->
|
||||
^[0-9a-z][0-9a-z_]*$
|
||||
```
|
||||
|
||||
Default `author_handle`'s do not have multiple consecutive `_` (underscore)
|
||||
characters. Nevertheless, multiple consecutive `_` (underscore) characters are
|
||||
allowed. Contest submitters who wish to override the `author_handle` may do so.
|
||||
|
||||
The `author_handle` is derived from the name of the author. While there is a
|
||||
algorithm that maps the name of the author (which can contain any UTF-8
|
||||
characters) into a default `author_handle` string, those who submit an entry to
|
||||
the IOCCC are free to choose a different `author_handle` string if they so
|
||||
desire.
|
||||
|
||||
An `author` who has won a previous IOCCC is encouraged to reuse their
|
||||
`author_handle` so that new winning entries can be associated with the same
|
||||
author.
|
||||
|
||||
For an anonymous `author`, their handle is one of these forms:
|
||||
|
||||
```
|
||||
Anonymous_year
|
||||
```
|
||||
|
||||
or:
|
||||
|
||||
```
|
||||
Anonymous_year.digits
|
||||
```
|
||||
|
||||
|
||||
The latter form is in case there are more than one anonymous author in a given
|
||||
year.
|
||||
|
||||
NOTE: even if the directory name is not `anonymous` the above rules apply as in
|
||||
in the case of [2005/anon](/2005/anon/anon.c).
|
||||
|
||||
Anonymous `author_handle`'s match this regexp:
|
||||
|
||||
``` <!---re-->
|
||||
Anonymous_[0-9][0-9][0-9][0-9][.0-9]*$
|
||||
```
|
||||
|
||||
|
||||
### `winner`
|
||||
|
||||
An IOCCC entry that won an award for given IOCCC.
|
||||
|
||||
A `winner` has one more more `author`s.
|
||||
|
||||
Each `winner` is contained under its own directory. The parent of the winner directory
|
||||
is the year's directory.
|
||||
|
||||
While in most cases a `winner` consists of files under a `winner` directory,
|
||||
there are a few cases where a `winner` directory contains subdirectories.
|
||||
|
||||
Use of subdirectories under a `winner` directory is discouraged and
|
||||
may be limited to previous `winner`s that used them.
|
||||
|
||||
|
||||
### `year`
|
||||
|
||||
A `year` is a 4 character string. Most years are 4-digit strings that
|
||||
represent the year. Some special `year` strings are possible, such as _`mock`_.
|
||||
Non-numeric `year` strings are lower case.
|
||||
|
||||
A `year` string matches this regexp:
|
||||
|
||||
``` <!---re-->
|
||||
[0-9a-z][0-9a-z][0-9a-z][0-9a-z]
|
||||
```
|
||||
|
||||
The `year` directories reside directly below the top level directory.
|
||||
|
||||
|
||||
### `.year`
|
||||
|
||||
Each `year` will have a file directory under it named:
|
||||
|
||||
```
|
||||
.year
|
||||
```
|
||||
|
||||
The contents of the `.year` file is the year string of the directory. For
|
||||
instance, [2020/.year](/2020/.year) has the string: `2020`.
|
||||
|
||||
|
||||
### `dir`
|
||||
|
||||
A `dir` is a POSIX safe string that holds an winner.
|
||||
|
||||
A `dir` is a string that matches this regexp:
|
||||
|
||||
``` <!---re-->
|
||||
^[a-z][0-9a-z.-]*$
|
||||
```
|
||||
|
||||
Each `winner` is under its own individual directory. This directory
|
||||
is directly under a `year` directory.
|
||||
|
||||
|
||||
### `winner_id`
|
||||
|
||||
A string that identifies the winning entry. The string is of the form:
|
||||
|
||||
```
|
||||
year_dir
|
||||
```
|
||||
|
||||
|
||||
### `.id`
|
||||
|
||||
Each `winner` directory will have a file directory under it named:
|
||||
|
||||
```
|
||||
.id
|
||||
```
|
||||
|
||||
The contents of `_.id_` file is the `winner_id` string for that `winner`.
|
||||
|
||||
* `sort_word`
|
||||
|
||||
A string that is used to determine the position within the `winners.html` file;
|
||||
an `author` and the `winners` they submitted are to be listed.
|
||||
|
||||
A `sort_word` match this regexp:
|
||||
|
||||
``` <!---re-->
|
||||
^[a-z][0-9a-z]*
|
||||
```
|
||||
|
||||
|
||||
## files
|
||||
|
||||
|
||||
### [README.md](README.md)
|
||||
|
||||
This file.
|
||||
|
||||
|
||||
### [author_names.txt](author_names.txt)
|
||||
|
||||
A text file of full names of each `author`: one full name per line.
|
||||
|
||||
In the case of anonymous authors the form is:
|
||||
|
||||
```
|
||||
Anonymous YYYY
|
||||
```
|
||||
|
||||
|
||||
### [author_wins.csv](author_wins.csv)
|
||||
|
||||
A CSV (Comma Separated Values) file: one line per `author`.
|
||||
|
||||
The first field is an `author_handle`.
|
||||
|
||||
The other fields are the `winner_id`'s of all `winner`s won by the `author`.
|
||||
|
||||
|
||||
### [author.csv](author.csv)
|
||||
|
||||
The [author.csv](author.csv) is a CSV file that was exported from the
|
||||
[author.numbers](author.numbers) file.
|
||||
|
||||
In case of conflict, the data in [author.numbers](author.numbers) file is
|
||||
considered authoritative over the [author.csv](author.csv) file.
|
||||
|
||||
The [author.csv](author.csv) is generated from the [author.numbers](author.numbers) file,
|
||||
via the [macOS](https://www.apple.com/macos/)
|
||||
[Numbers](https://www.apple.com/numbers/) spreadsheet app, as follows:
|
||||
|
||||
0. open [author.csv](author.csv) in numbers: modify if/as needed
|
||||
|
||||
1. File -> Export To -> CSV...
|
||||
* 1a. `[ ]` Include table names (unset)
|
||||
* 1b. Text Encoding: Unicode (UTF-8)
|
||||
* 1c. Click ((Save..))
|
||||
|
||||
2. Save As: author.csv
|
||||
* 2a. Select the `tmp` directory
|
||||
|
||||
3. Click ((Export))
|
||||
* 3a. If needed click ((Replace))
|
||||
|
||||
4. open a terminal window
|
||||
|
||||
5. cd to the `tmp` directory
|
||||
|
||||
6. tr -d '\015' < author.csv > tmp.csv
|
||||
|
||||
7. echo >> tmp.csv
|
||||
|
||||
8. mv -f tmp.csv author.csv
|
||||
|
||||
|
||||
### [author.numbers](author.numbers)
|
||||
|
||||
A [macOS](https://www.apple.com/macos) [Numbers](https://www.apple.com/numbers/)
|
||||
spreadsheet contains information about `author`s: one line per `author` with the
|
||||
following fields:
|
||||
|
||||
1. This field is `sort_word` string.
|
||||
|
||||
2. This field is the full name of the `author`.
|
||||
|
||||
3. This field is the `author_handle` of the `author`.
|
||||
|
||||
4. This field is the primary URL of `author` or the string `null` if none was
|
||||
given.
|
||||
|
||||
5. This field is the email address of `author` or the string `null` if none was
|
||||
given.
|
||||
|
||||
6. This field is the location ISO 3166 code of `author` or the string `null` is unknown.
|
||||
An `author` who does not wish to specify a location ISO 3166 code is encouraged to
|
||||
use the code `XX`. The location ISO 3166 code consists of two UPPER CASE ASCII letters.
|
||||
|
||||
7. This field is the twitter handle of the `author` or the string `null` if none
|
||||
was given. This field is kept for purely historic record purposes and is
|
||||
otherwise not used.
|
||||
|
||||
8. This field is the mastodon handle of the `author` or the string `null` if
|
||||
none was given.
|
||||
|
||||
9. This field is the alternate URL of `author` or the string `null` if none
|
||||
was given.
|
||||
|
||||
|
||||
### [author_handle.txt](author_handle.txt)
|
||||
|
||||
A text file containing `author_handle`s for each `author`: one `author_handle`
|
||||
per line.
|
||||
|
||||
|
||||
### [awards_check.sh](awards_check.sh)
|
||||
|
||||
Script to verify that the award name for each entry as found as a level 1
|
||||
markdown header in each entry's `README.md` file.
|
||||
|
||||
Run the script from the top level directory. The output should end in ":1".
|
||||
|
||||
For example, this command should not produce any output.
|
||||
|
||||
``` <!---sh-->
|
||||
tmp/awards_check.sh | grep -v ':1$'
|
||||
```
|
||||
|
||||
Any output is an indication that either an award name is incorrect, or the
|
||||
award is not formed at a level 1 markdown header, or that more than one
|
||||
award line as at a level 1 markdown header we found, or the `README.md`
|
||||
file is missing, etc.
|
||||
|
||||
|
||||
### [check_file_list.sh](check_file_list.sh)
|
||||
|
||||
Look for problems with file_list.required.txt, file_list.full_manifest.txt,
|
||||
and file_list.found.txt files. In particular, the files found in
|
||||
winning directories are compared with the list of required files
|
||||
as well as the complete manifest list of files.
|
||||
|
||||
If all is OK, [check_file_list.sh](check_file_list.sh) exits 0 and prints
|
||||
nothing. If there are missing required files, or extra files found
|
||||
then [check_file_list.sh](check_file_list.sh) will exit non-zero and
|
||||
print information about problems.
|
||||
|
||||
|
||||
### [example.author.json](example.author.json)
|
||||
|
||||
This is a JSON file containing an example `author/author_handle.json` for a
|
||||
fictitious `author`.
|
||||
|
||||
An `author/author_handle.json` file will be derived from the contents of the
|
||||
[author.csv](author.csv) file and the [author_wins.csv](author_wins.csv) file.
|
||||
|
||||
|
||||
### [example.dot_winner.json](example.dot_winner.json)
|
||||
|
||||
This is a JSON file containing an example `year/dir/.winner.json` for a
|
||||
fictitious `winner`.
|
||||
|
||||
A `year/dir/.winner.json` file will be derived from the contents the `year/dir/.id` file,
|
||||
the [author_wins.csv](author_wins.csv) file, the `year/dir/.year` file, and the
|
||||
contents of the `year/dir` directory.
|
||||
|
||||
The 11 field names in [manifest.numbers](manifest.numbers),
|
||||
[missing_manifest.numbers](missing_manifest.numbers), and
|
||||
[full_manifest.numbers](full_manifest.numbers) match the JSON member
|
||||
names found in [example.dot_winner.json](example.dot_winner.json).
|
||||
|
||||
|
||||
### [file_list.full_manifest.txt](file_list.full_manifest.txt)
|
||||
|
||||
This is the list of file paths, both primary and constructed
|
||||
files from winners.
|
||||
|
||||
This is the sorted combined [file_list.built.txt](file_list.built.txt)
|
||||
and [file_list.required.txt](file_list.required.txt) files.
|
||||
|
||||
This file is formed by the [fix_numbers_csv.sh](fix_numbers_csv.sh) tool.
|
||||
|
||||
|
||||
### [file_list.built.txt](file_list.built.txt)
|
||||
|
||||
A list of file paths (from the top directory) of winner directories,
|
||||
that are built from other primary content files.
|
||||
|
||||
These paths are formed from [full_manifest.numbers](full_manifest.numbers)
|
||||
entries where the "created_by" (5th) field is null. See
|
||||
[manifest.numbers](manifest.numbers) for details on the fields.
|
||||
|
||||
This file is formed by the [fix_numbers_csv.sh](fix_numbers_csv.sh) tool.
|
||||
|
||||
|
||||
### [file_list.required.txt](file_list.required.txt)
|
||||
|
||||
A list of file paths (from the top directory) of winner directories,
|
||||
that are required to exist.
|
||||
|
||||
These paths are formed from [full_manifest.numbers](full_manifest.numbers)
|
||||
entries where the "created_by" (5th) field is non-null. See
|
||||
[manifest.numbers](manifest.numbers) for details on the fields.
|
||||
|
||||
This file is formed by the [fix_numbers_csv.sh](fix_numbers_csv.sh) tool.
|
||||
|
||||
|
||||
### [file_list.found.txt](file_list.found.txt)
|
||||
|
||||
A list of files that exist, or should exist once the tools to generate certain files,
|
||||
such as the `index.html`, or the `.winner.json` files for each entry, are created.
|
||||
|
||||
This file is created by [gen_file_list.found.sh](gen_file_list.found.sh).
|
||||
|
||||
|
||||
### [fix_numbers_csv.sh](fix_numbers_csv.sh)
|
||||
|
||||
This tool will fix the [manifest.csv](manifest.csv) and [missing_manifest.csv](missing_manifest.csv)
|
||||
files, removing carriage returns and appending a newline if it was missing.
|
||||
|
||||
This tool also creates / updates [full_manifest.csv](full_manifest.csv).
|
||||
|
||||
|
||||
### [full_manifest.csv](full_manifest.csv)
|
||||
|
||||
Combined and sorted [manifest.csv](manifest.csv) and [missing_manifest.csv](missing_manifest.csv).
|
||||
|
||||
This file is formed by the [fix_numbers_csv.sh](fix_numbers_csv.sh) tool.
|
||||
|
||||
See [manifest.numbers](manifest.numbers) for information on this file format
|
||||
as it has the exact same format.
|
||||
|
||||
In case of conflict, the data in [full_manifest.csv](full_manifest.csv) file is
|
||||
considered authoritative over the [full_manifest.numbers](full_manifest.numbers) file.
|
||||
|
||||
|
||||
### [full_manifest.numbers](full_manifest.numbers)
|
||||
|
||||
This file is formed by opening [manifest.csv](manifest.csv) in numbers
|
||||
and saving the result as a numbers file.
|
||||
|
||||
In case of conflict, the data in [full_manifest.csv](full_manifest.csv) file is
|
||||
considered authoritative over the [full_manifest.numbers](full_manifest.numbers) file.
|
||||
|
||||
**NOTE**: Due to the way that the macOS numbers program imports CSV
|
||||
files, some values of false may be turned into FALSE, some values
|
||||
of true may be turned into TRUE, and some values of null may be
|
||||
turned into NULL. JSON does not allow UPPER case FALSE, nor TRUE,
|
||||
nor NULL, so the UPPER case values of fields should be used in JSON
|
||||
in their lower case form.
|
||||
|
||||
The 11 field names in [manifest.numbers](manifest.numbers),
|
||||
[missing_manifest.numbers](missing_manifest.numbers), and
|
||||
[full_manifest.numbers](full_manifest.numbers) match the JSON member
|
||||
names found in [example.dot_winner.json](example.dot_winner.json).
|
||||
|
||||
|
||||
### [gen_author_json.sh](gen_author_json.sh)
|
||||
|
||||
Temporary tool used to generate the `author/author_handle.json` files.
|
||||
|
||||
The following command, executed in this directory, created the `author/` directory:
|
||||
|
||||
``` <!---sh-->
|
||||
rm -rf ../author ; ./gen_author_json.sh author_handle.txt author.csv author_wins.csv ../author
|
||||
```
|
||||
|
||||
|
||||
### [gen_file_list.found.sh](gen_file_list.found.sh)
|
||||
|
||||
The list of paths of files in winners.
|
||||
|
||||
After doing a `make clobber` this tool updates, if needed,
|
||||
form [file_list.found.txt](file_list.found.txt).
|
||||
|
||||
|
||||
### [manifest.numbers](manifest.numbers)
|
||||
|
||||
|
||||
A [macOS](https://www.apple.com/macos) [Numbers](https://www.apple.com/numbers/)
|
||||
spreadsheet contains information about files, that must already exist, with the
|
||||
following fields:
|
||||
|
||||
1. year:
|
||||
|
||||
IOCCC year as a 4-character string. Normally this would be a 4 digit year string,
|
||||
however it may also be a string such as "mock".
|
||||
|
||||
NOTE: If year begins with "#", then dir is a comment, and the
|
||||
rest of the row is to be ignored. Rows of this form do NOT
|
||||
contain manifest information for a file.
|
||||
|
||||
2. dir:
|
||||
|
||||
Directory name number the IOCCC year.
|
||||
|
||||
3. winners_rank:
|
||||
|
||||
If a number, then this is the winners rank showing the order
|
||||
that this file is to be listed for the given entry's in
|
||||
[winners.html](winners.html), or null if the file is not to be listed.
|
||||
|
||||
4. path:
|
||||
|
||||
Path under the IOCCC/directory. In a few cases this is a path,
|
||||
not just a simple filename under the IOCCC/directory.
|
||||
|
||||
5. created_by:
|
||||
|
||||
The name of the program that creates this file, or null is the
|
||||
file an original file.
|
||||
|
||||
NOTE: A null created_by value indicates that the file is part
|
||||
of the primary content. A non-null created_by value indicates
|
||||
that the contents of the file is created by given program from
|
||||
primary content files.
|
||||
|
||||
NOTE: The created_by values for [manifest.numbers](manifest.numbers)
|
||||
MUST always be null. This is because every file with primary
|
||||
content (i.e., content not created by some tool) MUST be listed
|
||||
in the [manifest.numbers](manifest.numbers) file and MUST NOT
|
||||
listed in the [missing_manifest.numbers](missing_manifest.numbers) file.
|
||||
|
||||
NOTE: The created_by values for [missing_manifest.numbers](missing_manifest.numbers) '
|
||||
MUST always be non-null. This is because every file that is NOT a primary
|
||||
content file (i.e., content that is created by some tool) MUST
|
||||
be listed in the [missing_manifest.numbers](missing_manifest.numbers)
|
||||
file and MUST NOT listed in the [manifest.numbers](manifest.numbers) file.
|
||||
|
||||
6. prog:
|
||||
|
||||
This field indicates if the file main program. This filed is one of:
|
||||
|
||||
main The main source code to display.
|
||||
alt The alternative source code.
|
||||
orig The original version of the source code (may be the same as main).
|
||||
null Not a primary, nor alternative, nor original source code file.
|
||||
|
||||
7. filetype:
|
||||
|
||||
The type of file.
|
||||
|
||||
8. ext:
|
||||
|
||||
This ending filename extension, or null if no extension.
|
||||
This field is temporary and may go away.
|
||||
|
||||
9. winners_show:
|
||||
|
||||
A JSON boolean indicating of the file is listed on `winners.html` or not.
|
||||
|
||||
The winners_show value must be either true or false.
|
||||
|
||||
NOTE: When winners_show is false, display_via MUST be null.
|
||||
|
||||
10. display_via:
|
||||
|
||||
A string indicating how the file is to be displayed from `winners.html`.
|
||||
Possible files include:
|
||||
|
||||
browser The file is to be displayed directly from the browser.
|
||||
github The file should be linked to the GitHub repo so that
|
||||
it may be rendered directly by GitHub. In the future
|
||||
this may changed to allow a suitable browser to
|
||||
directly display this file instead of via GitHub.
|
||||
download The file is intended to be downloaded from the browser
|
||||
instead of being displayed.
|
||||
null This file not listed in `winners.html`.
|
||||
|
||||
NOTE: When display_via is null, winners_show MUST be false.
|
||||
|
||||
11. winners_text:
|
||||
|
||||
Any text that should be displayed at the end of line in `winners.html`
|
||||
(with a preceding " - "), or null is no such text is to be displayed.
|
||||
|
||||
The 11 field names in [manifest.numbers](manifest.numbers),
|
||||
[missing_manifest.numbers](missing_manifest.numbers), and
|
||||
[full_manifest.numbers](full_manifest.numbers) match the JSON member
|
||||
names found in [example.dot_winner.json](example.dot_winner.json).
|
||||
|
||||
NOTE: Cells containing null are a JSON NULLs.
|
||||
NOTE: Cells containing true or false are JSON booleans.
|
||||
NOTE: Empty cells are TBD and need to be filled in.
|
||||
NOTE: The winners_rank cells are either JSON null or JSON numbers.
|
||||
NOTE: All other cells are JSON strings that need to be double quoted, including the year.
|
||||
NOTE: Do not put commas, nor quotes, nor newlines in fields as these are bound to cause problems.
|
||||
|
||||
In case of conflict, the data in [manifest.numbers](manifest.numbers) file is
|
||||
considered authoritative over the [manifest.csv](manifest.csv) file.
|
||||
|
||||
|
||||
### [manifest.csv](manifest.csv)
|
||||
|
||||
The [manifest.csv](manifest.csv) is a CSV file that was exported from the
|
||||
[manifest.numbers](manifest.numbers) file.
|
||||
|
||||
In case of conflict, the data in [manifest.numbers](manifest.numbers) file is
|
||||
considered authoritative over the [manifest.csv](manifest.csv) file.
|
||||
|
||||
The [manifest.csv](manifest.csv) is generated from the [manifest.numbers](manifest.numbers) file,
|
||||
via the [macOS](https://www.apple.com/macos/)
|
||||
[Numbers](https://www.apple.com/numbers/) spreadsheet app, as follows:
|
||||
|
||||
0. open [manifest.csv](manifest.csv) in numbers: modify if/as needed
|
||||
|
||||
1. File -> Export To -> CSV...
|
||||
* 1a. `[ ]` Include table names (unset)
|
||||
* 1b. Text Encoding: Unicode (UTF-8)
|
||||
* 1c. Click ((Save..))
|
||||
|
||||
2. Save As: manifest.csv
|
||||
* 2a. Select the `tmp` directory
|
||||
|
||||
3. Click ((Export))
|
||||
* 3a. If needed click ((Replace))
|
||||
|
||||
4. execute ./[fix_numbers_csv.sh](fix_numbers_csv.sh)
|
||||
|
||||
|
||||
### [missing_manifest.numbers](missing_manifest.numbers)
|
||||
|
||||
A [macOS](https://www.apple.com/macos) [Numbers](https://www.apple.com/numbers/)
|
||||
spreadsheet contains information about files, that may not yet exist because
|
||||
a tool needs to create it, with the following fields:
|
||||
|
||||
In case of conflict, the data in [missing_manifest.numbers](missing_manifest.numbers) file is
|
||||
considered authoritative over the [missing_manifest.csv](missing_manifest.csv) file.
|
||||
|
||||
See [manifest.numbers](manifest.numbers) for information on this file format
|
||||
as it has the exact same format.
|
||||
|
||||
The 11 field names in [manifest.numbers](manifest.numbers),
|
||||
[missing_manifest.numbers](missing_manifest.numbers), and
|
||||
[full_manifest.numbers](full_manifest.numbers) match the JSON member
|
||||
names found in [example.dot_winner.json](example.dot_winner.json).
|
||||
|
||||
|
||||
### [missing_manifest.csv](missing_manifest.csv)
|
||||
|
||||
The [missing_manifest.csv](missing_manifest.csv) is a CSV file that was exported from the
|
||||
[missing_manifest.numbers](missing_manifest.numbers) file.
|
||||
|
||||
In case of conflict, the data in [missing_manifest.numbers](missing_manifest.numbers) file is
|
||||
considered authoritative over the [missing_manifest.csv](missing_manifest.csv) file.
|
||||
|
||||
The [missing_manifest.csv](missing_manifest.csv) is generated from the [missing_manifest.numbers](missing_manifest.numbers) file,
|
||||
via the [macOS](https://www.apple.com/macos/)
|
||||
[Numbers](https://www.apple.com/numbers/) spreadsheet app, as follows:
|
||||
|
||||
0. open [missing_manifest.csv](missing_manifest.csv) in numbers: modify if/as needed
|
||||
|
||||
1. File -> Export To -> CSV...
|
||||
* 1a. `[ ]` Include table names (unset)
|
||||
* 1b. Text Encoding: Unicode (UTF-8)
|
||||
* 1c. Click ((Save..))
|
||||
|
||||
2. Save As: missing_manifest.csv
|
||||
* 2a. Select the `tmp` directory
|
||||
|
||||
3. Click ((Export))
|
||||
* 3a. If needed click ((Replace))
|
||||
|
||||
4. execute ./[fix_numbers_csv.sh](fix_numbers_csv.sh)
|
||||
|
||||
|
||||
### [sql/winners.sql](sql/winners.sql)
|
||||
|
||||
This is a SQL file, extracted from another SQL file that was used in the past
|
||||
to generate data for the old winners directory tree.
|
||||
|
||||
|
||||
### [winner_id.txt](winner_id.txt)
|
||||
|
||||
A text file containing `winner_id` strings: one `winner_id` per line.
|
||||
|
||||
|
||||
### [year_prize.csv](year_prize.csv)
|
||||
|
||||
A CSV file: one line per `winner`.
|
||||
|
||||
The first field is a `winner_id`.
|
||||
|
||||
The second field is the name of the award for given `winner`.
|
||||
|
||||
|
||||
<!--
|
||||
|
||||
Copyright © 1984-2024 by Landon Curt Noll. All Rights Reserved.
|
||||
|
||||
You are free to share and adapt this file under the terms of this license:
|
||||
|
||||
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
|
||||
For more information, see:
|
||||
|
||||
https://creativecommons.org/licenses/by-sa/4.0/
|
||||
|
||||
-->
|
||||
@@ -1,197 +0,0 @@
|
||||
# sort_word,name,author_handle,url,email,location_code,deprecated_twitter,mastodon,alternate_url,
|
||||
adamovsky,Ondřej Adamovský,Ondrej_Adamovsky,null,oa@cmail.cz,CZ,null,null,null,
|
||||
algmyr,Anton Älgmyr,Anton_Algmyr,algmyr@student.chalmers.se,@aalgmyr,SE,@aalgmyr,null,null,
|
||||
anderson,Derek Anderson,Derek_Anderson,null,dereka9991@gmail.com,US,null,null,null,
|
||||
anderson,Glyn Anderson,Glyn_Anderson,null,glyn@mataharistudios.com,null,null,null,null,
|
||||
anonymous,Anonymous 1984,Anonymous_1984,null,null,US,null,null,null,
|
||||
anonymous,Anonymous 2004,Anonymous_2004,https://web.archive.org/web/20040324155828/http://bicoherent.topcities.com/,null,SG,null,null,null,
|
||||
anonymous,Anonymous 2005,Anonymous_2005,null,null,null,null,null,null,
|
||||
anonymous,Anonymous 2015,Anonymous_2015,null,hirekokeshi@gmail.com,JP,@hirekoke,null,null,
|
||||
applegate,David Applegate,David_Applegate,http://www.caam.rice.edu/~davida,davida@caam.rice.edu,US,null,null,null,
|
||||
applin,Jack Applin,Jack_Applin,https://www.cs.colostate.edu/~applin/,neutron@fc.hp.com,US,null,null,null,
|
||||
arkko,Jari Arkko,Jari_Arkko,http://www.arkko.com,jari@arkko.com,null,null,null,null,
|
||||
ash,Michael Ash,Michael_Ash,null,mike@mikeash.com,US,null,null,null,
|
||||
augustsson,Lennart Augustsson,Lennart_Augustsson,https://web.archive.org/web/20090831055828/http://www.cs.chalmers.se/~augustss,null,null,null,null,null,
|
||||
bakker,Bas de Bakker,Bas_de_Bakker,null,bas@bbwt.demon.nl,NL,null,null,null,
|
||||
banks,Carl Banks,Carl_Banks,https://blog.aerojockey.com/post/iocccsim,web39@aerojockey.com,null,null,null,null,
|
||||
barraclough,Gavin Barraclough,Gavin_Barraclough,null,gavin@barraclough.name,null,null,null,null,
|
||||
barrett,Sean Barrett,Sean_Barrett,http://world.std.com/~buzzard,buzzard@world.std.com,null,null,null,null,
|
||||
beardsley,Doug Beardsley,Doug_Beardsley,null,dgbeards@southern.edu,US,null,null,null,
|
||||
bellard,Fabrice Bellard,Fabrice_Bellard,https://bellard.org/,fabrice@bellard.org,FR,null,null,null,
|
||||
berkenbilt,E. Jay Berkenbilt,E_Jay_Berkenbilt,null,null,null,null,null,null,
|
||||
bernstein,Daniel J. Bernstein,Daniel_J_Bernstein,http://pobox.com/~djb/djb.html,djb@pobox.com,null,null,null,null,
|
||||
biggar,Mark Biggar,Mark_Biggar,null,mark@biggar.org,null,null,null,null,
|
||||
birken,Michael Birken,Michael_Birken,http://www.meatfighter.com/,null,US,null,null,null,
|
||||
black,Paul E. Black,Paul_E_Black,http://hissa.ncsl.nist.gov/~black/black.html,p.black@acm.org,null,null,null,null,
|
||||
blakely,Philip Blakely,Philip_Blakely,null,pmblakely@gmail.com,GB,null,null,null,
|
||||
bonfield,James Bonfield,James_Bonfield,null,jkb@mrc-lmb.cam.ac.uk,GB,null,null,null,
|
||||
borsanyi,Szabolcs Borsanyi,Szabolcs_Borsanyi,null,borsanyi@uni-wuppertal.de,DE,null,null,null,
|
||||
boutines,Francois Boutines,Francois_Boutines,null,francois.boutines@gmail.com,FR,null,null,null,
|
||||
brackle,David Van Brackle,David_Van_Brackle,http://east.isx.com/~vanb/,vanb@east.isx.com,null,null,null,null,
|
||||
briddlebane,Moxen N. Briddlebane,Moxen_N_Briddlebane,null,moxen@gateway.net,null,null,null,null,
|
||||
bright,Walter Bright,Walter_Bright,http://www.walterbright.com/,emperor@classicempire.com,null,null,null,null,
|
||||
broukhis,Leonid A. Broukhis,Leonid_A_Broukhis,http://www.mailcom.com/leob,leob@mailcom.com,US,null,null,null,
|
||||
bsoup,bsoup,Bsoup,null,mail@bsoup.skr.jp,JP,null,null,null,
|
||||
burchall,Laurion Burchall,Laurion_Burchall,http://www.netspace.org/users/ldb,ldb@netspace.org,null,null,null,null,
|
||||
burley,Brent Burley,Brent_Burley,null,brent.burley@disney.com,US,null,null,null,
|
||||
burton,Dave Burton,Dave_Burton,http://snox.net/ioccc,daveb@snox.net,US,@lv2jmp,null,null,
|
||||
buttimore,Gavin Buttimore,Gavin_Buttimore,null,gavin.buttimore@creaturelabs.com,null,null,null,null,
|
||||
cable,Adrian Cable,Adrian_Cable,null,null,US,null,null,null,
|
||||
carlini,Nicholas Carlini,Nicholas_Carlini,https://nicholas.carlini.com,nicholas@carlini.com,US,null,null,null,
|
||||
cheong,Raymond Cheong,Raymond_Cheong,http://www.raymondcheong.com/index.html,rcheong@jhu.edu,US,null,null,null,
|
||||
chia,V. Chia,V_Chia,null,bi@mncw.tk,SG,null,null,null,
|
||||
ciura,Marcin Ciura,Marcin_Ciura,null,mciura@gmail.com,PL,@mciura,null,null,
|
||||
collier,Ian Collier,Ian_Collier,http://www.comlab.ox.ac.uk/oucl/users/ian.collier/,imc@comlab.ox.ac.uk,GB,null,null,null,
|
||||
coupard,Pierre-Philippe Coupard,Pierre-Philippe_Coupard,null,pierre@lineo.com,null,null,null,null,
|
||||
dalbec,John Dalbec,John_Dalbec,https://jpdalbec.people.ysu.edu,jdalbec@cboss.com,null,null,null,null,
|
||||
dale,Paul Dale,Paul_Dale,http://www.jcu.edu.au/~ccptd/,null,null,null,null,null,
|
||||
deak,Ferenc Deak,Ferenc_Deak,null,null,null,null,null,null,
|
||||
deckmyn,Alex Deckmyn,Alex_Deckmyn,null,alex.deckmyn@gmail.com,BE,null,null,null,
|
||||
decot,Dave Decot,Dave_Decot,null,null,null,null,null,null,
|
||||
deorowicz,Sebastian Deorowicz,Sebastian_Deorowicz,http://sun.aei.polsl.pl/~sdeor/,sdeorowicz@gmail.com,null,null,null,null,
|
||||
diels-grabsch,Volker Diels-Grabsch,Volker_Diels-Grabsch,https://njh.eu,v@njh.eu,DE,null,null,null,
|
||||
dodson,Don Dodson,Don_Dodson,http://www.neta.com/~dodson/,null,US,null,null,null,
|
||||
dogon,Gil Dogon,Gil_Dogon,null,gil.jade@gmail.com,IL,null,null,null,
|
||||
dorsselaer,Frans van Dorsselaer,Frans_van_Dorsselaer,null,frans@biabv.com,null,null,null,null,
|
||||
dorward,Sean Dorward,Sean_Dorward,null,null,null,null,null,null,
|
||||
downs,Heather Downs,Heather_Downs,http://www.bungalow.com/,heather@bungalow.com,null,null,null,null,
|
||||
duarte,Carlos Duarte,Carlos_Duarte,null,null,null,null,null,null,
|
||||
duble,Etienne Duble,Etienne_Duble,https://lig-membres.imag.fr/duble,etienne.duble@gmail.com,FR,@etienne_duble,null,null,
|
||||
dupont,Christian Dupont,Christian_Dupont,null,christian.dupont@lemel.fr,FR,null,null,null,
|
||||
eastman,Peter Eastman,Peter_Eastman,null,peter.eastman@gmail.com,US,null,null,null,
|
||||
eggert,Paul Eggert,Paul_Eggert,null,eggert@twinsun.com,null,null,null,null,
|
||||
eldby,Thor Eldby,Thor_Eldby,null,null,null,null,null,null,
|
||||
endoh,Yusuke Endoh,Yusuke_Endoh,null,mame@ruby-lang.org,JP,null,@mame@ruby.social,null,
|
||||
ferguson,Cody Boone Ferguson,Cody_Boone_Ferguson,https://xexyl.net,ioccc@xexyl.net,US,null,@xexyl@fosstodon.org,https://ioccc.xexyl.net,
|
||||
finch,Tony Finch,Tony_Finch,http://dotat.at/,dot@dotat.at,null,null,null,null,
|
||||
fine,Thomas A. Fine,Thomas_A_Fine,http://hea-www.harvard.edu/~fine/,fine@head-cfa.harvard.edu,US,null,null,null,
|
||||
fischer,Daniel Fischer,Daniel_Fischer,null,df@freudenstadt.net,null,null,null,null,
|
||||
fox,Karl F. Fox,Karl_F_Fox,null,karl@ascend.com,null,null,null,null,
|
||||
fredriksson,Kimmo Fredriksson,Kimmo_Fredriksson,null,kimmo.k.k.fredriksson@gmail.com,FI,null,null,null,
|
||||
frogley,Thaddaeus Frogley,Thaddaeus_Frogley,http://thad.notagoth.org/,codemonkey_uk@hotmail.com,null,null,null,null,
|
||||
gavare,Anders Gavare,Anders_Gavare,https://gavare.se,gavare@gmail.com,SE,null,null,null,
|
||||
gibson,David Gibson,David_Gibson,null,null,null,null,null,null,
|
||||
giles,Edward Giles,Edward_Giles,https://id523a.com/,edward@giles.net.au,AU,null,null,null,
|
||||
glendown,Garry Glendown,Garry_Glendown,https://web.archive.org/web/20011221120305/http://insider.regio.net/~garry/,garry@insider.regio.net,null,null,null,null,
|
||||
goodenough,David Goodenough,David_Goodenough,null,null,null,null,null,null,
|
||||
goren,Uri Goren,Uri_Goren,null,goren.uri@gmail.com,IL,null,null,null,
|
||||
grothe,Aaron Grothe,Aaron_Grothe,null,ajgrothe@yahoo.com,US,null,null,null,
|
||||
gustafsson,Andreas Gustafsson,Andreas_Gustafsson,http://www.araneus.fi/gson/,gson@araneus.fi,FI,null,null,null,
|
||||
hague,Jim Hague,Jim_Hague,http://www.oxinet.co.uk/jim,jim.hague@acm.org,GB,null,null,null,
|
||||
hamaji,Shinichiro Hamaji,Shinichiro_Hamaji,null,shinichiro.hamaji@gmail.com,JP,null,null,null,
|
||||
hamano,Tsukasa Hamano,Tsukasa_Hamano,null,hamano@cuspy.org,JP,null,null,null,
|
||||
hamre,Steinar Hamre,Steinar_Hamre,null,null,NO,null,null,null,
|
||||
heckbert,Paul Heckbert,Paul_Heckbert,http://www.cs.cmu.edu/~ph,ph@cs.cmu.edu,US,null,null,null,
|
||||
heckendorn,Robert Heckendorn,Robert_Heckendorn,http://www.cs.colostate.edu/~heckendo/main.html,null,null,null,null,null,
|
||||
heizmann,Arne Timwi Heizmann,Arne_Heizmann,null,timwi@gmx.net,DE,null,null,null,
|
||||
hemmer,Stig Hemmer,Stig_Hemmer,http://www.pvv.ntnu.no/~stig/,stig@pvv.ntnu.no,NO,null,null,null,
|
||||
herrmann,Immanuel Herrmann,Immanuel_Herrmann,https://web.archive.org/web/20071018081145/http://pcpool.mathematik.uni-freiburg.de/~immi/,null,null,null,null,null,
|
||||
hines,Spencer Hines,Spencer_Hines,null,null,null,null,null,null,
|
||||
holloway,Bruce Holloway,Bruce_Holloway,null,null,US,null,null,null,
|
||||
holopainen,Jyrki Holopainen,Jyrki_Holopainen,https://web.archive.org/web/20061205082106/http://personal.eunet.fi/pp/halo/,jyrki.holopainen@paetronics.fi,FI,null,null,null,
|
||||
horst,Albert van der Horst,Albert_van_der_Horst,http://home.hccnet.nl/a.w.m.van.der.horst,albert@spenarnc.xs4all.nl,NL,null,null,null,
|
||||
horton,Mary Ann Horton,Mary_Ann_Horton,https://maryannhorton.com,null,US,null,null,null,
|
||||
hou,Qiming HOU,Qiming_HOU,null,hqm03ster@gmail.com,CN,null,null,null,
|
||||
howe,Anthony C. Howe,Anthony_C_Howe,http://www.snert.com/,achowe@snert.com,CA,@SirWumpus,null,null,
|
||||
hoyle,Jonathan Hoyle,Jonathan_Hoyle,http://www.jonhoyle.com,jonhoyle@mac.com,null,null,null,null,
|
||||
huffman,Ken Huffman,Ken_Huffman,http://www.huffmancoding.com,huffmancoding@gmail.com,null,null,null,null,
|
||||
isaak,Mark Isaak,Mark_Isaak,null,null,null,null,null,null,
|
||||
john,Thomas P John,Thomas_P_John,https://web.archive.org/web/20010720192926/http://tomx.tripod.com/,thomaspjohn@hotmail.com,null,null,null,null,
|
||||
johnson,Nick Johnson,Nick_Johnson,https://web.archive.org/web/20051030162356/http://www.notdot.net/,null,NZ,null,null,null,
|
||||
jones,Larry Jones,Larry_Jones,null,lawrence.jones@siemens.com,null,null,null,null,
|
||||
kang,Seonghoon Kang,Seonghoon_Kang,http://mearie.org,kang.seonghoon@mearie.org,KR,null,null,null,
|
||||
karns,Joshua Karns,Joshua_Karns,null,jkarns275@gmail.com,US,@jkarnss,null,null,
|
||||
king,Chris King,Chris_King,null,ctk314@yahoo.com,null,null,null,null,
|
||||
kivinen,Tero Kivinen,Tero_Kivinen,http://www.iki.fi/kivinen/,kivinen@iki.fi,FI,null,null,null,
|
||||
klausler,Peter Klausler,Peter_Klausler,null,pmk@cray.com,US,null,null,null,
|
||||
konno,Taketo Konno,Taketo_Konno,null,inaniwa3@gmail.com,JP,null,null,null,
|
||||
kopczynski,Eryk Kopczynski,Eryk_Kopczynski,http://www.mimuw.edu.pl/~erykk/,ek189185@zodiac.mimuw.edu.pl,PL,null,null,null,
|
||||
korn,David Korn,David_Korn,http://www.kornshell.com/~dgk/,dgk@research.att.com,US,null,null,null,
|
||||
kurdyukov,Ilya Kurdyukov,Ilya_Kurdyukov,https://github.com/ilyakurdyukov,olme8@mail.ru,RU,@ilyakurdyukov,null,null,
|
||||
laman,Mike Laman,Mike_Laman,null,mlaman@home.com,null,null,null,null,
|
||||
lassila,Ora Lassila,Ora_Lassila,http://www.lassila.org/,ora.lassila@nokia.com,null,null,null,null,
|
||||
lauha,Jetro Lauha,Jetro_Lauha,http://jet.ro,null,FI,null,null,null,
|
||||
lievaart,Roemer B. Lievaart,Roemer_B_Lievaart,http://huizen.dds.nl/~lievaart,roemer.lievaart@xs4all.nl,NL,null,null,null,
|
||||
litmaath,Maarten Litmaath,Maarten_Litmaath,null,litmaath@cern.ch,CH,null,null,null,
|
||||
lowe,J. David Lowe,J_David_Lowe,https://github.com/dlowe,j.david.lowe@gmail.com,US,null,null,null,
|
||||
luehe,Oskar von der Luehe,Oskar_von_der_Luehe,null,null,null,null,null,null,
|
||||
luke,Ed Luke,Ed_Luke,http://www.erc.msstate.edu/~lush,lush@erc.msstate.edu,null,null,null,null,
|
||||
lycklama,Ed Lycklama,Ed_Lycklama,http://www.klg.com,eal@klg.com,null,null,null,null,
|
||||
lynn,Ben Lynn,Ben_Lynn,https://crypto.stanford.edu/~blynn/,benlynn@gmail.com,US,@bmxlynn,null,null,
|
||||
madore,David Madore,David_Madore,http://www.madore.org/~david/,david+alexander@madore.org,FR,null,null,null,
|
||||
maffiodo,Sandro Maffiodo,Sandro_Maffiodo,http://www.assezeta.com/sandromaffiodo,null,IT,null,null,null,
|
||||
makarios,Selene Makarios,Selene_Makarios,http://www.bungalow.com/,null,null,null,null,null,
|
||||
marangoni,Andrea Marangoni,Andrea_Marangoni,http://www.andreamarangoni.it,andrea@andreamarangoni.it,IT,null,null,null,
|
||||
mariano,Adrian Mariano,Adrian_Mariano,http://cam.cornell.edu/adrian/,adrian@cam.cornell.edu,US,null,null,null,
|
||||
marshall,Eric Marshall,Eric_Marshall,null,eric@EMIEng.com,US,null,null,null,
|
||||
mcfarland,Ron McFarland,Ron_McFarland,null,rcm@one.net,null,null,null,null,
|
||||
meyer,Bernd Meyer,Bernd_Meyer,https://web.archive.org/web/20030212213342/http://byron.csse.monash.edu.au/realindex.html,bmeyer@cs.monash.edu.au,AU,null,null,null,
|
||||
meyer,Raphael Meyer,Raphael_Meyer,null,null,US,null,null,null,
|
||||
mills,Christopher Mills,Christopher_Mills,null,mrxo@sonic.net,US,@MisterXopher,null,null,
|
||||
mix,Neil Mix,Neil_Mix,null,null,null,null,null,null,
|
||||
monge,Maurizio Monge,Maurizio_Monge,null,maurizio.monge@gmail.com,IT,null,null,null,
|
||||
morgan,Yves-Marie Morgan,Yves-Marie_Morgan,null,null,FR,null,null,null,
|
||||
mullender,Sjoerd Mullender,Sjoerd_Mullender,https://github.com/sjoerdmullender,Sjoerd.Mullender@cwi.nl,NL,null,null,null,
|
||||
muth,Dominik Muth,Dominik_Muth,null,dominik.muth@gmx.de,DE,null,null,null,
|
||||
newbern,Jeff Newbern,Jeff_Newbern,null,jnewbern@yahoo.com,null,null,null,null,
|
||||
night,Christopher Night,Christopher_Night,https://web.archive.org/web/20090415070532/https://www.people.fas.harvard.edu/~night/,null,US,null,null,null,
|
||||
nissenbaum,Baruch Nissenbaum,Baruch_Nissenbaum,null,baruch@eng.tau.ac.il,IL,null,null,null,
|
||||
nuutila,Esko Nuutila,Esko_Nuutila,http://www.cs.hut.fi/~enu/,enu@cs.hut.fi,FI,null,null,null,
|
||||
ollinger,Nicolas Ollinger,Nicolas_Ollinger,https://www.univ-orleans.fr/lifo/Members/Nicolas.Ollinger/,nicolas.ollinger@univ-orleans.fr,FR,null,null,null,
|
||||
orendorff,Jason Orendorff,Jason_Orendorff,http://jorendorff.blogspot.com,jason@jorendorff.com,US,null,null,null,
|
||||
osovlanski,Doron Osovlanski,Doron_Osovlanski,http://www.cadtech.co.il/profile.html,null,null,null,null,null,
|
||||
otterness,Nathan Otterness,Nathan_Otterness,https://github.com/yalue,supersasquatch@gmail.com,US,null,null,null,
|
||||
pawka,Michael H. Pawka,Michael_H_Pawka,http://niceup.com,mikey@niceup.com,null,null,null,null,
|
||||
paxson,Vern Paxson,Vern_Paxson,null,vern@ee.lbl.gov,US,null,null,null,
|
||||
persano,Mauro Persano,Mauro_Persano,null,mauro_persano@yahoo.com,BR,null,null,null,
|
||||
phillipps,Ian Phillipps,Ian_Phillipps,null,ian@dial.pipex.com,null,null,null,null,
|
||||
plummer,Mark Plummer,Mark_Plummer,http://www.nrgnet.com/markus,markus@nrgnet.com,null,null,null,null,
|
||||
poikola,Timo Poikola,Timo_Poikola,https://ig.fi/other/ioccc,timo@ig.fi,FI,@timpoiko,null,null,
|
||||
prishchepov,Alexander Prishchepov,Alexander_Prishchepov,https://github.com/sans17/,student.00x@gmail.com,US,null,null,null,
|
||||
pulo,Kevin Pulo,Kevin_Pulo,//www.kev.pulo.com.au/,kev@pulo.com.au,AU,null,@devkev@fosstodon.org,null,
|
||||
rakitzis,Byron Rakitzis,Byron_Rakitzis,null,null,null,null,null,null,
|
||||
rantanen,Teemu Rantanen,Teemu_Rantanen,http://www.cs.hut.fi/~tvr/,tvr@cs.hut.fi,FI,null,null,null,
|
||||
reddy,Gopi Reddy,Gopi_Reddy,null,null,null,null,null,null,
|
||||
renesse,Robbert van Renesse,Robbert_van_Renesse,http://www.cs.cornell.edu/home/rvr,rvr@cs.cornell.edu,US,null,null,null,
|
||||
richards,Gregor Richards,Gregor_Richards,null,Richards@codu.org,US,null,null,null,
|
||||
robison,Arch D. Robison,Arch_D_Robison,null,null,US,null,null,null,
|
||||
rosten,Edward Rosten,Edward_Rosten,https://www.edwardrosten.com,ed@edwardrosten.com,null,null,null,null,
|
||||
ruczynski,Peter J Ruczynski,Peter_J_Ruczynski,http://www.softbase.co.uk/,pete@softbase.demon.co.uk,GB,null,null,null,
|
||||
rusinkiewicz,Szymon Rusinkiewicz,Szymon_Rusinkiewicz,http://www-leland.stanford.edu/~smr,smr@cs.stanford.edu,US,null,null,null,
|
||||
savastio,Michael Savastio,Michael_Savastio,http://www.geocities.com/SouthBeach/Marina/5775,null,null,null,null,null,
|
||||
schneiderwent,Craig Schneiderwent,Craig_Schneiderwent,null,evilgenius@attglobal.net,null,null,null,null,
|
||||
schnitzius,Mark Schnitzius,Mark_Schnitzius,null,schnitzi@gmail.com,null,null,null,null,
|
||||
schweikhardt,Jens Schweikhardt,Jens_Schweikhardt,http://www.schweikhardt.net,schweikh@schweikhardt.net,DE,null,null,null,
|
||||
shapiro,Andrew T. Shapiro,Andrew_Shapiro,null,null,null,null,null,null,
|
||||
shapiro,Carl Shapiro,Carl_Shapiro,null,carl@lasvegassun.com,null,null,null,null,
|
||||
shin,NATORI Shin,NATORI_Shin,null,natori@is.s.u-tokyo.ac.jp,JP,null,null,null,
|
||||
sicherman,Col. G. L. Sicherman,Col_G_L_Sicherman,http://www.monmouth.com/~colonel/,colonel@monmouth.com,null,null,null,null,
|
||||
sidwell,Nathan Sidwell,Nathan_Sidwell,http://www.cs.bris.ac.uk/~nathan/,nathan@cs.bris.ac.uk,GB,null,null,null,
|
||||
skeggs,Cel Skeggs,Cel_Skeggs,http://www.celskeggs.com,celskeggs@gmail.com,null,null,null,null,
|
||||
sloane,Andy Sloane,Andy_Sloane,null,null,US,null,null,null,
|
||||
smet,Alan De Smet,Alan_De_Smet,http://www.highprogrammer.com/alan,null,null,null,null,null,
|
||||
spinellis,Diomidis Spinellis,Diomidis_Spinellis,http://www.spinellis.gr,dds@aueb.gr,GR,null,@DSpinellis@mstdn.social,null,
|
||||
stein,Jan Stein,Jan_Stein,null,null,null,null,null,null,
|
||||
stewart,Thomas Stewart,Thomas_Stewart,null,null,US,null,null,null,
|
||||
swift,Dean Swift,Dean_Swift,null,null,null,null,null,null,
|
||||
sykes,Stephen Sykes,Stephen_Sykes,https://web.archive.org/web/20160316092728/http://www.stephensykes.com/,null,FI,null,null,null,
|
||||
thingvold,Jon Thingvold,Jon_Thingvold,null,jon.thingvold@usit.uio.no,NO,null,null,null,
|
||||
thornton,Aidan Thornton,Aidan_Thornton,null,makomk@lycos.co.uk,GB,null,null,null,
|
||||
toledo,Oscar Toledo G.,Oscar_Toledo,https://nanochess.org/,null,MX,null,null,null,
|
||||
torfs,Tom Torfs,Tom_Torfs,https://web.archive.org/web/20010520021948/http://members.nbci.com/tomtorfs/,null,null,null,null,null,
|
||||
tromp,John Tromp,John_Tromp,http://tromp.github.io/,john.tromp@gmail.com,US,null,null,null,
|
||||
tsoj,tsoj,Tsoj,https://gitlab.com/tsoj,tsoj.tsoj@gmx.de,DE,null,null,null,
|
||||
vik,Daniel Vik,Daniel_Vik,https://www.vik.cc,daniel@vik.cc,US,null,null,null,
|
||||
vokes,Scott Vokes,Scott_Vokes,null,vokes.s@gmail.com,US,@silentbicycle,null,null,
|
||||
vosburgh,Jay Vosburgh,Jay_Vosburgh,null,fubar@sequent.com,US,null,null,null,
|
||||
wall,Larry Wall,Larry_Wall,http://www.wall.org/~larry/,larry@wall.org,US,null,null,null,
|
||||
weaver,Vincent Weaver,Vincent_Weaver,http://www.deater.net/weave/,vince@deater.net,US,null,null,null,
|
||||
weisberg,Jeff Weisberg,Jeff_Weisberg,http://www.op.net/~jaw,jaw@op.net,null,null,null,null,
|
||||
westley,Brian Westley,Brian_Westley,http://www.westley.org,brian@westley.org,US,null,null,null,
|
||||
wiedijk,Freek Wiedijk,Freek_Wiedijk,null,null,NL,null,null,null,
|
||||
williams,John Williams,John_Williams,null,williams@morinda.com,null,null,null,null,
|
||||
woods,James A. Woods,James_A_Woods,null,null,null,null,null,null,
|
||||
yang,Don Yang,Don_Yang,http://uguu.org/,omoikane@uguu.org,US,null,null,null,
|
||||
zarbon,Lord Zarbon,Lord_Zarbon,null,null,null,null,null,null,
|
||||
zeitak,Adar Zeitak,Adar_Zeitak,null,aa4z2@walla.co.il,IL,null,null,null,
|
||||
zucker,Matt Zucker,Matt_Zucker,https://mzucker.github.io/swarthmore/,mzucker1@swarthmore.edu,US,null,null,null,
|
||||
|
Binary file not shown.
@@ -1,360 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# awards_check - check the award lines in README.md files
|
||||
#
|
||||
# XXX - This is a temporary utility that will be replaced when
|
||||
# the .winner.json files are built
|
||||
#
|
||||
# This script was mostly auto-generated with the contents of the
|
||||
# tmp/year-auth-prize.csv file but modified in vim to make it simpler to
|
||||
# generate as it was not worth getting everything correct. It was initially
|
||||
# generated like:
|
||||
#
|
||||
# echo '#!/bin/bash' > bin/awards_check.sh ; ( while read -r g ; do
|
||||
# echo grep "$g";
|
||||
# done < <(sed -e 's,_,/,g' -e 's/"/\\"/g' tmp/year-auth-prize.csv |
|
||||
# awk -F, '{print grep "\x22" $2 "\x22" " " $1 "/" "README.md"}' ); )
|
||||
# >> bin/awards_check.sh
|
||||
#
|
||||
# To determine how many entries have a mismatch in award compared to the CSV
|
||||
# file do:
|
||||
#
|
||||
# sh tmp/awards_check.sh | grep :0
|
||||
#
|
||||
# It must be run in the tmp/ subdirectory. It shouldn't be necessary in future
|
||||
# IOCCC contests as the problem should not occur again (hence it's a temporary
|
||||
# file :-) )
|
||||
#
|
||||
# This was a hack and not the prettiest hack made by Cody Boone Ferguson
|
||||
# (@xexyl) to quickly check all entries from 1984 through 2020. It probably could
|
||||
# have been done simpler but this is what I came up with after being awake for
|
||||
# 5+ hours at 0700 in the morning. I didn't particularly fancy going through 321
|
||||
# README.md files and checking 321 lines of the CSV file!
|
||||
#
|
||||
# This file as well as some README.md and the CSV file all had to be modified a
|
||||
# number of times as mismatches were found which is another reason I did not
|
||||
# want to spend effort trying to get the exact pipeline as it was quicker to
|
||||
# modify this script.
|
||||
#
|
||||
|
||||
grep -Hc "^# Dishonorable mention" ../1984/anonymous/README.md
|
||||
grep -Hc "^# Second place" ../1984/decot/README.md
|
||||
grep -Hc "^# Third place" ../1984/laman/README.md
|
||||
grep -Hc "^# Grand Prize" ../1984/mullender/README.md
|
||||
grep -Hc "^# Best one liner" ../1985/applin/README.md
|
||||
grep -Hc "^# Most obscure program" ../1985/august/README.md
|
||||
grep -Hc "^# Strangest appearing program" ../1985/lycklama/README.md
|
||||
grep -Hc "^# Grand prize for most well-rounded in confusion" ../1985/shapiro/README.md
|
||||
grep -Hc "^# Worst abuse of the C preprocessor" ../1985/sicherman/README.md
|
||||
grep -Hc "^# Most adaptable program" ../1986/applin/README.md
|
||||
grep -Hc "^# Best complex task done in a complex way" ../1986/august/README.md
|
||||
grep -Hc "^# Most useful obfuscation" ../1986/bright/README.md
|
||||
grep -Hc "^# Worst abuse of the C preprocessor" ../1986/hague/README.md
|
||||
grep -Hc "^# Best simple task performed in a complex way" ../1986/holloway/README.md
|
||||
grep -Hc "^# Best layout" ../1986/marshall/README.md
|
||||
grep -Hc "^# Most illegible code" ../1986/pawka/README.md
|
||||
grep -Hc "^# Best one liner" ../1986/stein/README.md
|
||||
grep -Hc "^# Grand prize in most well-rounded in confusion" ../1986/wall/README.md
|
||||
grep -Hc "^# Best Abuse of the Rules" ../1987/biggar/README.md
|
||||
grep -Hc "^# Best Obfuscator of Programs" ../1987/heckbert/README.md
|
||||
grep -Hc "^# Worst Style" ../1987/hines/README.md
|
||||
grep -Hc "^# Best One Liner" ../1987/korn/README.md
|
||||
grep -Hc "^# Grand Prize" ../1987/lievaart/README.md
|
||||
grep -Hc "^# Most Useful Obfuscation" ../1987/wall/README.md
|
||||
grep -Hc "^# Best Layout" ../1987/westley/README.md
|
||||
grep -Hc "^# Best of show" ../1988/applin/README.md
|
||||
grep -Hc "^# Best abuse of system calls" ../1988/dale/README.md
|
||||
grep -Hc "^# Best visuals" ../1988/isaak/README.md
|
||||
grep -Hc "^# Best small program" ../1988/litmaath/README.md
|
||||
grep -Hc "^# Least likely to compile successfully" ../1988/phillipps/README.md
|
||||
grep -Hc "^# Most useful Obfuscated C program" ../1988/reddy/README.md
|
||||
grep -Hc "^# Best abuse of C constructs" ../1988/robison/README.md
|
||||
grep -Hc "^# Best abuse of the rules" ../1988/spinellis/README.md
|
||||
grep -Hc "^# Best layout" ../1988/westley/README.md
|
||||
grep -Hc "^# Best self-modifying program" ../1989/fubar/README.md
|
||||
grep -Hc "^# Strangest abuse of the rules" ../1989/jar.1/README.md
|
||||
grep -Hc "^# Best of show" ../1989/jar.2/README.md
|
||||
grep -Hc "^# Most humorous output" ../1989/ovdluhe/README.md
|
||||
grep -Hc "^# Most complex algorithm" ../1989/paul/README.md
|
||||
grep -Hc "^# Best minimal use of C" ../1989/robison/README.md
|
||||
grep -Hc "^# Best layout" ../1989/roemer/README.md
|
||||
grep -Hc "^# Best game" ../1989/tromp/README.md
|
||||
grep -Hc "^# Best one liner" ../1989/vanb/README.md
|
||||
grep -Hc "^# Most algorithms in one program" ../1989/westley/README.md
|
||||
grep -Hc "^# Best Small Program" ../1990/baruch/README.md
|
||||
grep -Hc "^# Best Game" ../1990/cmills/README.md
|
||||
grep -Hc "^# Best Language Tool" ../1990/dds/README.md
|
||||
grep -Hc "^# Best Abuse of the C Preprocessor" ../1990/dg/README.md
|
||||
grep -Hc "^# Best Entropy-reducer" ../1990/jaw/README.md
|
||||
grep -Hc "^# Most Unusual Data Structure" ../1990/pjr/README.md
|
||||
grep -Hc "^# ANSI Committee's Worst Abuse of C" ../1990/scjones/README.md
|
||||
grep -Hc "^# Strangest Abuse of the Rules" ../1990/stig/README.md
|
||||
grep -Hc "^# Best Utility" ../1990/tbr/README.md
|
||||
grep -Hc "^# Best of Show" ../1990/theorem/README.md
|
||||
grep -Hc "^# Best Layout" ../1990/westley/README.md
|
||||
grep -Hc "^# Best Utility" ../1991/ant/README.md
|
||||
grep -Hc "^# Best Of Show" ../1991/brnstnd/README.md
|
||||
grep -Hc "^# Best Output" ../1991/buzzard/README.md
|
||||
grep -Hc "^# Most Useful Label" ../1991/cdupont/README.md
|
||||
grep -Hc "^# Best X11 Graphics" ../1991/davidguy/README.md
|
||||
grep -Hc "^# Most Well Rounded" ../1991/dds/README.md
|
||||
grep -Hc "^# Best One Liner" ../1991/fine/README.md
|
||||
grep -Hc "^# Best Game" ../1991/rince/README.md
|
||||
grep -Hc "^# Grand Prize" ../1991/westley/README.md
|
||||
grep -Hc "^# Most Educational" ../1992/adrian/README.md
|
||||
grep -Hc "^# Most Useful Program" ../1992/albert/README.md
|
||||
grep -Hc "^# Best Utility" ../1992/ant/README.md
|
||||
grep -Hc "^# Most Obfuscated Algorithm" ../1992/buzzard.1/README.md
|
||||
grep -Hc "^# Best Language Tool" ../1992/buzzard.2/README.md
|
||||
grep -Hc "^# Most Humorous Output" ../1992/gson/README.md
|
||||
grep -Hc "^# Best Output" ../1992/imc/README.md
|
||||
grep -Hc "^# Best X Program" ../1992/kivinen/README.md
|
||||
grep -Hc "^# Worst Abuse of the C Preprocessor" ../1992/lush/README.md
|
||||
grep -Hc "^# Best Game" ../1992/marangon/README.md
|
||||
grep -Hc "^# Worst Abuse of the Rules" ../1992/nathan/README.md
|
||||
grep -Hc "^# Best of Show" ../1992/vern/README.md
|
||||
grep -Hc "^# Best Small Program" ../1992/westley/README.md
|
||||
grep -Hc "^# Best Utility" ../1993/ant/README.md
|
||||
grep -Hc "^# \"Bill Gates\" Award" ../1993/cmills/README.md
|
||||
grep -Hc "^# Best Abuse of the C Preprocessor" ../1993/dgibson/README.md
|
||||
grep -Hc "^# Best Obfuscated Algorithm" ../1993/ejb/README.md
|
||||
grep -Hc "^# Most Obfuscated X Program" ../1993/jonth/README.md
|
||||
grep -Hc "^# Best Game" ../1993/leo/README.md
|
||||
grep -Hc "^# Most Versatile Source" ../1993/lmfjyh/README.md
|
||||
grep -Hc "^# Best One Liner" ../1993/plummer/README.md
|
||||
grep -Hc "^# Most Well Rounded" ../1993/rince/README.md
|
||||
grep -Hc "^# Obfuscated Intelligence Award" ../1993/schnitzi/README.md
|
||||
grep -Hc "^# Most Irregular Expression" ../1993/vanb/README.md
|
||||
grep -Hc "^# Best Game" ../1994/dodsond1/README.md
|
||||
grep -Hc "^# Most Obfuscated Packaging" ../1994/dodsond2/README.md
|
||||
grep -Hc "^# Best Utility" ../1994/horton/README.md
|
||||
grep -Hc "^# Most Obfuscated Algorithm" ../1994/imc/README.md
|
||||
grep -Hc "^# Best One-liner" ../1994/ldb/README.md
|
||||
grep -Hc "^# Best Layout" ../1994/schnitzi/README.md
|
||||
grep -Hc "^# Most Well Rounded Obfuscation" ../1994/shapiro/README.md
|
||||
grep -Hc "^# Worst Abuse of the Rules" ../1994/smr/README.md
|
||||
grep -Hc "^# Best X11 Program" ../1994/tvr/README.md
|
||||
grep -Hc "^# Best Short Program" ../1994/weisberg/README.md
|
||||
grep -Hc "^# Worst Abuse of the C Preprocessor" ../1994/westley/README.md
|
||||
grep -Hc "^# Best Output" ../1995/cdua/README.md
|
||||
grep -Hc "^# Most Humorous" ../1995/dodsond1/README.md
|
||||
grep -Hc "^# Best Game" ../1995/dodsond2/README.md
|
||||
grep -Hc "^# Interesting Algorithm" ../1995/esde/README.md
|
||||
grep -Hc "^# Best Utility" ../1995/garry/README.md
|
||||
grep -Hc "^# Best Layout" ../1995/heathbar/README.md
|
||||
grep -Hc "^# Best Use of Obfuscation" ../1995/leo/README.md
|
||||
grep -Hc "^# Best Short Program" ../1995/makarios/README.md
|
||||
grep -Hc "^# Most Obfuscated Syntax" ../1995/savastio/README.md
|
||||
grep -Hc "^# Best One Liner" ../1995/schnitzi/README.md
|
||||
grep -Hc "^# Abusing The Rules" ../1995/spinellis/README.md
|
||||
grep -Hc "^# Worst Abuse of the C Preprocessor and Most Likely To Amaze" ../1995/vanschnitz/README.md
|
||||
grep -Hc "^# Best of Show" ../1996/august/README.md
|
||||
grep -Hc "^# Best Numerical Obfuscation" ../1996/dalbec/README.md
|
||||
grep -Hc "^# Best Output" ../1996/eldby/README.md
|
||||
grep -Hc "^# Best Layout" ../1996/gandalf/README.md
|
||||
grep -Hc "^# Best Obfuscated Character Set Utility" ../1996/huffman/README.md
|
||||
grep -Hc "^# Best X11 Entry" ../1996/jonth/README.md
|
||||
grep -Hc "^# Best RFC Obfuscation" ../1996/rcm/README.md
|
||||
grep -Hc "^# Worst Abuse of the C Preprocessor" ../1996/schweikh1/README.md
|
||||
grep -Hc "^# Best Algorithm" ../1996/schweikh2/README.md
|
||||
grep -Hc "^# Best Utility" ../1996/schweikh3/README.md
|
||||
grep -Hc "^# Best One Liner" ../1996/westley/README.md
|
||||
grep -Hc "^# Best of Show" ../1998/banks/README.md
|
||||
grep -Hc "^# Best Encapsulation" ../1998/bas1/README.md
|
||||
grep -Hc "^# Best Small Program" ../1998/bas2/README.md
|
||||
grep -Hc "^# Best Object Orientation" ../1998/chaos/README.md
|
||||
grep -Hc "^# Best Data Hiding" ../1998/df/README.md
|
||||
grep -Hc "^# Best Utility" ../1998/dlowe/README.md
|
||||
grep -Hc "^# Most Fun" ../1998/dloweneil/README.md
|
||||
grep -Hc "^# Obsolescent Feature" ../1998/dorssel/README.md
|
||||
grep -Hc "^# Most Obfuscated Translator" ../1998/fanf/README.md
|
||||
grep -Hc "^# Best Flow Control" ../1998/schnitzi/README.md
|
||||
grep -Hc "^# CPP Abuse" ../1998/schweikh1/README.md
|
||||
grep -Hc "^# Most Erratic Behavior" ../1998/schweikh2/README.md
|
||||
grep -Hc "^# Most Space Efficient" ../1998/schweikh3/README.md
|
||||
grep -Hc "^# Best Self-Documenting" ../1998/tomtorfs/README.md
|
||||
grep -Hc "^# Best Use of Flags" ../2000/anderson/README.md
|
||||
grep -Hc "^# Most Specific Output" ../2000/bellard/README.md
|
||||
grep -Hc "^# Best Utility" ../2000/bmeyer/README.md
|
||||
grep -Hc "^# Best Abuse of User" ../2000/briddlebane/README.md
|
||||
grep -Hc "^# Best Layout" ../2000/dhyang/README.md
|
||||
grep -Hc "^# Worst Abuse of the Rules" ../2000/dlowe/README.md
|
||||
grep -Hc "^# Best of Show" ../2000/jarijyrki/README.md
|
||||
grep -Hc "^# Best Small Program" ../2000/natori/README.md
|
||||
grep -Hc "^# Best Abuse of CPP" ../2000/primenum/README.md
|
||||
grep -Hc "^# Astronomically Obfuscated" ../2000/rince/README.md
|
||||
grep -Hc "^# Best game" ../2000/robison/README.md
|
||||
grep -Hc "^# Most Timely Output" ../2000/schneiderwent/README.md
|
||||
grep -Hc "^# Most Portable Output" ../2000/thadgavin/README.md
|
||||
grep -Hc "^# Most Complete Program" ../2000/tomx/README.md
|
||||
grep -Hc "^# Dishonorable mention" ../2001/anonymous/README.md
|
||||
grep -Hc "^# Best abuse of the rules" ../2001/bellard/README.md
|
||||
grep -Hc "^# Best short program" ../2001/cheong/README.md
|
||||
grep -Hc "^# Most obfuscated sound" ../2001/coupard/README.md
|
||||
grep -Hc "^# Worst Driver" ../2001/ctk/README.md
|
||||
grep -Hc "^# Best AI" ../2001/dgbeards/README.md
|
||||
grep -Hc "^# Best abuse of the C preprocessor" ../2001/herrmann1/README.md
|
||||
grep -Hc "^# Most eye-crossing" ../2001/herrmann2/README.md
|
||||
grep -Hc "^# Best Of Show" ../2001/jason/README.md
|
||||
grep -Hc "^# Best Curses Game" ../2001/kev/README.md
|
||||
grep -Hc "^# Best of Show" ../2001/ollinger/README.md
|
||||
grep -Hc "^# Best abuse of the user" ../2001/rosten/README.md
|
||||
grep -Hc "^# Best one-liner" ../2001/schweikh/README.md
|
||||
grep -Hc "^# Best position-independent code" ../2001/westley/README.md
|
||||
grep -Hc "^# Best Graphic Game" ../2001/williams/README.md
|
||||
grep -Hc "^# Best use of \"Precious\" Lines" ../2004/anonymous/README.md
|
||||
grep -Hc "^# Best use of Vision" ../2004/arachnid/README.md
|
||||
grep -Hc "^# Best Calculated Risk" ../2004/burley/README.md
|
||||
grep -Hc "^# Best Use of Light and Spheres" ../2004/gavare/README.md
|
||||
grep -Hc "^# Best of Show" ../2004/gavin/README.md
|
||||
grep -Hc "^# Best Abuse of the Guidelines" ../2004/hibachi/README.md
|
||||
grep -Hc "^# Most Functional Output" ../2004/hoyle/README.md
|
||||
grep -Hc "^# Best Abuse of the Periodic Table" ../2004/jdalbec/README.md
|
||||
grep -Hc "^# Best One-Liner" ../2004/kopczynski/README.md
|
||||
grep -Hc "^# Best Font Engine" ../2004/newbern/README.md
|
||||
grep -Hc "^# Best Utility" ../2004/omoikane/README.md
|
||||
grep -Hc "^# Best Non-Use of Curses" ../2004/schnitzi/README.md
|
||||
grep -Hc "^# Best Abuse of Indentation" ../2004/sds/README.md
|
||||
grep -Hc "^# Best X11 Game" ../2004/vik1/README.md
|
||||
grep -Hc "^# Best Abuse of CPP" ../2004/vik2/README.md
|
||||
grep -Hc "^# Most ingenious puzzle solution" ../2005/aidan/README.md
|
||||
grep -Hc "^# Best 3D puzzle" ../2005/anon/README.md
|
||||
grep -Hc "^# Most superfluous output" ../2005/boutines/README.md
|
||||
grep -Hc "^# Most ambiguous language" ../2005/chia/README.md
|
||||
grep -Hc "^# Best 2D puzzle" ../2005/giljade/README.md
|
||||
grep -Hc "^# Most sonorous output" ../2005/jetro/README.md
|
||||
grep -Hc "^# Abuse of the rules" ../2005/klausler/README.md
|
||||
grep -Hc "^# Best use of parenthesis" ../2005/mikeash/README.md
|
||||
grep -Hc "^# Best use of the WWW" ../2005/mynx/README.md
|
||||
grep -Hc "^# Best of Show" ../2005/persano/README.md
|
||||
grep -Hc "^# Best Emulator" ../2005/sykes/README.md
|
||||
grep -Hc "^# Most discourteous interpreter" ../2005/timwi/README.md
|
||||
grep -Hc "^# Best Game" ../2005/toledo/README.md
|
||||
grep -Hc "^# Most circuitous walk" ../2005/vik/README.md
|
||||
grep -Hc "^# Most beauteous visuals" ../2005/vince/README.md
|
||||
grep -Hc "^# EDAMAME Award" ../2006/birken/README.md
|
||||
grep -Hc "^# Most Useful" ../2006/borsanyi/README.md
|
||||
grep -Hc "^# Most Obfuscated Audio" ../2006/grothe/README.md
|
||||
grep -Hc "^# Most Irrational" ../2006/hamre/README.md
|
||||
grep -Hc "^# Best Game" ../2006/meyer/README.md
|
||||
grep -Hc "^# Best Compiled Graphics" ../2006/monge/README.md
|
||||
grep -Hc "^# Best Abuse of Computation" ../2006/night/README.md
|
||||
grep -Hc "^# Homer's Favorite" ../2006/sloane/README.md
|
||||
grep -Hc "^# Best Computed Graphics" ../2006/stewart/README.md
|
||||
grep -Hc "^# Best Assembler" ../2006/sykes1/README.md
|
||||
grep -Hc "^# Best One Liner" ../2006/sykes2/README.md
|
||||
grep -Hc "^# Best Small Program" ../2006/toledo1/README.md
|
||||
grep -Hc "^# Best of Show" ../2006/toledo2/README.md
|
||||
grep -Hc "^# Most Portable Chess Set" ../2006/toledo3/README.md
|
||||
grep -Hc "^# Best of Show - Most Shrinkable" ../2011/akari/README.md
|
||||
grep -Hc "^# Most devolving" ../2011/blakely/README.md
|
||||
grep -Hc "^# Best data utility" ../2011/borsanyi/README.md
|
||||
grep -Hc "^# Most self deprecating" ../2011/dlowe/README.md
|
||||
grep -Hc "^# Best ball" ../2011/eastman/README.md
|
||||
grep -Hc "^# Most useful" ../2011/fredriksson/README.md
|
||||
grep -Hc "^# Most artistic" ../2011/goren/README.md
|
||||
grep -Hc "^# Best solved puzzle" ../2011/hamaji/README.md
|
||||
grep -Hc "^# Best self documenting program" ../2011/hou/README.md
|
||||
grep -Hc "^# Best one liner" ../2011/konno/README.md
|
||||
grep -Hc "^# Most surprisingly portable" ../2011/richards/README.md
|
||||
grep -Hc "^# Best non-chess game" ../2011/toledo/README.md
|
||||
grep -Hc "^# Most sound" ../2011/vik/README.md
|
||||
grep -Hc "^# Most shiny" ../2011/zucker/README.md
|
||||
grep -Hc "^# Most GIFted expressions" ../2012/blakely/README.md
|
||||
grep -Hc "^# Most notable and best tool" ../2012/deckmyn/README.md
|
||||
grep -Hc "^# Best way to lose a life" ../2012/dlowe/README.md
|
||||
grep -Hc "^# Most complex ASCII fluid - Honorable mention" ../2012/endoh1/README.md
|
||||
grep -Hc "^# PiE in the sky award" ../2012/endoh2/README.md
|
||||
grep -Hc "^# Most conspiratorial" ../2012/grothe/README.md
|
||||
grep -Hc "^# Most elementary use of C - Silver award" ../2012/hamano/README.md
|
||||
grep -Hc "^# Most useful obfuscation" ../2012/hou/README.md
|
||||
grep -Hc "^# Best short program" ../2012/kang/README.md
|
||||
grep -Hc "^# Best one liner" ../2012/konno/README.md
|
||||
grep -Hc "^# Most surreptitious" ../2012/omoikane/README.md
|
||||
grep -Hc "^# Most functional" ../2012/tromp/README.md
|
||||
grep -Hc "^# Best use of cocoa - Bronze award" ../2012/vik/README.md
|
||||
grep -Hc "^# Balanced use of obfuscation - Gold award" ../2012/zeitak/README.md
|
||||
grep -Hc "^# Best painting tool" ../2013/birken/README.md
|
||||
grep -Hc "^# Most partisan 1-liner" ../2013/cable1/README.md
|
||||
grep -Hc "^# Best of show" ../2013/cable2/README.md
|
||||
grep -Hc "^# Largest small system emulator" ../2013/cable3/README.md
|
||||
grep -Hc "^# Best sparkling utility" ../2013/dlowe/README.md
|
||||
grep -Hc "^# Most lazy SKIer" ../2013/endoh1/README.md
|
||||
grep -Hc "^# Most recyclable" ../2013/endoh2/README.md
|
||||
grep -Hc "^# Most tweetable 1-liner" ../2013/endoh3/README.md
|
||||
grep -Hc "^# Most solid" ../2013/endoh4/README.md
|
||||
grep -Hc "^# Best use of 1 Infinite Loop" ../2013/hou/README.md
|
||||
grep -Hc "^# Most timely rendered" ../2013/mills/README.md
|
||||
grep -Hc "^# Most catty" ../2013/misaka/README.md
|
||||
grep -Hc "^# Smallest large system simulator" ../2013/morgan1/README.md
|
||||
grep -Hc "^# Most playfully versatile" ../2013/morgan2/README.md
|
||||
grep -Hc "^# Most poetic use of strings" ../2013/robison/README.md
|
||||
grep -Hc "^# Best use of port 1701" ../2014/birken/README.md
|
||||
grep -Hc "^# Most underscored argument" ../2014/deak/README.md
|
||||
grep -Hc "^# Most square (YODA award)" ../2014/endoh1/README.md
|
||||
grep -Hc "^# Best use of bioinformatics" ../2014/endoh2/README.md
|
||||
grep -Hc "^# Homage to a classic game" ../2014/maffiodo1/README.md
|
||||
grep -Hc "^# Most tweetable entry" ../2014/maffiodo2/README.md
|
||||
grep -Hc "^# Most likely to succeed" ../2014/morgan/README.md
|
||||
grep -Hc "^# Best choice of optimization" ../2014/sinon/README.md
|
||||
grep -Hc "^# Most dynamic" ../2014/skeggs/README.md
|
||||
grep -Hc "^# Best handling of beeps" ../2014/vik/README.md
|
||||
grep -Hc "^# Most functional" ../2014/wiedijk/README.md
|
||||
grep -Hc "^# Most Useful" ../2015/burton/README.md
|
||||
grep -Hc "^# Most Crafty" ../2015/dogon/README.md
|
||||
grep -Hc "^# Best Handwriting" ../2015/duble/README.md
|
||||
grep -Hc "^# Most Diffused Reaction" ../2015/endoh1/README.md
|
||||
grep -Hc "^# Most Overlooked Obfuscation" ../2015/endoh2/README.md
|
||||
grep -Hc "^# Back to the Future Award" ../2015/endoh3/README.md
|
||||
grep -Hc "^# Best One-liner" ../2015/endoh4/README.md
|
||||
grep -Hc "^# Most Well-rounded Hash" ../2015/hou/README.md
|
||||
grep -Hc "^# Most Different" ../2015/howe/README.md
|
||||
grep -Hc "^# \"For the Birds!\" Award" ../2015/mills1/README.md
|
||||
grep -Hc "^# Most Compact" ../2015/mills2/README.md
|
||||
grep -Hc "^# Most Complete Use of CPP" ../2015/muth/README.md
|
||||
grep -Hc "^# Best Documented" ../2015/schweikhardt/README.md
|
||||
grep -Hc "^# Most Pointed Reaction" ../2015/yang/README.md
|
||||
grep -Hc "^# Most cacophonic" ../2018/algmyr/README.md
|
||||
grep -Hc "^# Most able to divine code gaps" ../2018/anderson/README.md
|
||||
grep -Hc "^# Most inflationary" ../2018/bellard/README.md
|
||||
grep -Hc "^# Best one-liner" ../2018/burton1/README.md
|
||||
grep -Hc "^# Best abuse of the rules" ../2018/burton2/README.md
|
||||
grep -Hc "^# Most likely to be awarded" ../2018/ciura/README.md
|
||||
grep -Hc "^# Best tool to reveal holes" ../2018/endoh1/README.md
|
||||
grep -Hc "^# Best use of python" ../2018/endoh2/README.md
|
||||
grep -Hc "^# Best use of weasel words" ../2018/ferguson/README.md
|
||||
grep -Hc "^# Most unstable" ../2018/giles/README.md
|
||||
grep -Hc "^# Most likely to top the charts" ../2018/hou/README.md
|
||||
grep -Hc "^# Best of show" ../2018/mills/README.md
|
||||
grep -Hc "^# Most stellar" ../2018/poikola/README.md
|
||||
grep -Hc "^# Most connected" ../2018/vokes/README.md
|
||||
grep -Hc "^# Most shifty" ../2018/yang/README.md
|
||||
grep -Hc "^# Most functional interpreter" ../2019/adamovsky/README.md
|
||||
grep -Hc "^# Best one-liner" ../2019/burton/README.md
|
||||
grep -Hc "^# Most alphabetic" ../2019/ciura/README.md
|
||||
grep -Hc "^# Best small program" ../2019/diels-grabsch1/README.md
|
||||
grep -Hc "^# Most self-aware" ../2019/diels-grabsch2/README.md
|
||||
grep -Hc "^# Best use of space and time" ../2019/dogon/README.md
|
||||
grep -Hc "^# Best collaborative graphics" ../2019/duble/README.md
|
||||
grep -Hc "^# Most in need of debugging" ../2019/endoh/README.md
|
||||
grep -Hc "^# Most in need of wide space" ../2019/giles/README.md
|
||||
grep -Hc "^# Most in need of whitespace" ../2019/karns/README.md
|
||||
grep -Hc "^# Most functional compiler" ../2019/lynn/README.md
|
||||
grep -Hc "^# Most in need to be tweeted" ../2019/mills/README.md
|
||||
grep -Hc "^# Most calendrical" ../2019/poikola/README.md
|
||||
grep -Hc "^# Most in need of transparency" ../2019/yang/README.md
|
||||
grep -Hc "^# Best one-liner" ../2020/burton/README.md
|
||||
grep -Hc "^# Best of show - abuse of libc" ../2020/carlini/README.md
|
||||
grep -Hc "^# Most explosive" ../2020/endoh1/README.md
|
||||
grep -Hc "^# Best perspective" ../2020/endoh2/README.md
|
||||
grep -Hc "^# Most head-turning" ../2020/endoh3/README.md
|
||||
grep -Hc "^# Don't tread on me award" ../2020/ferguson1/README.md
|
||||
grep -Hc "^# Most enigmatic" ../2020/ferguson2/README.md
|
||||
grep -Hc "^# Most phony" ../2020/giles/README.md
|
||||
grep -Hc "^# Best utility" ../2020/kurdyukov1/README.md
|
||||
grep -Hc "^# Least detailed" ../2020/kurdyukov2/README.md
|
||||
grep -Hc "^# Bset slaml prragom" ../2020/kurdyukov3/README.md
|
||||
grep -Hc "^# Best abuse of lámatyávë" ../2020/kurdyukov4/README.md
|
||||
grep -Hc "^# Most percussive" ../2020/otterness/README.md
|
||||
grep -Hc "^# Most misleading indentation" ../2020/tsoj/README.md
|
||||
grep -Hc "^# Best abuse of CPP" ../2020/yang/README.md
|
||||
@@ -1,89 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# check_file_list.sh - look for problems with file_list.* files
|
||||
#
|
||||
# XXX - This is a temporary utility that will be replaced when
|
||||
# the .winner.json files are built
|
||||
#
|
||||
|
||||
# setup
|
||||
#
|
||||
export REQUIRED_FILE_LIST="file_list.required.txt"
|
||||
export BUILT_FILE_LIST="file_list.built.txt"
|
||||
export FULL_MANIFEST_LIST="file_list.full_manifest.txt"
|
||||
export FOUND_LIST="file_list.found.txt"
|
||||
export EXIT_CODE=0
|
||||
|
||||
# firewall
|
||||
#
|
||||
if [[ ! -f $REQUIRED_FILE_LIST ]]; then
|
||||
echo "$0: ERROR: missing REQUIRED_FILE_LIST: $REQUIRED_FILE_LIST" 1>&2
|
||||
exit 10
|
||||
fi
|
||||
if [[ ! -s $REQUIRED_FILE_LIST ]]; then
|
||||
echo "$0: ERROR: REQUIRED_FILE_LIST is empty: $REQUIRED_FILE_LIST" 1>&2
|
||||
exit 11
|
||||
fi
|
||||
if [[ ! -f $BUILT_FILE_LIST ]]; then
|
||||
echo "$0: ERROR: missing BUILT_FILE_LIST: $BUILT_FILE_LIST" 1>&2
|
||||
exit 12
|
||||
fi
|
||||
if [[ ! -s $BUILT_FILE_LIST ]]; then
|
||||
echo "$0: ERROR: BUILT_FILE_LIST is empty: $BUILT_FILE_LIST" 1>&2
|
||||
exit 13
|
||||
fi
|
||||
if [[ ! -f $FULL_MANIFEST_LIST ]]; then
|
||||
echo "$0: ERROR: missing FULL_MANIFEST_LIST: $FULL_MANIFEST_LIST" 1>&2
|
||||
exit 14
|
||||
fi
|
||||
if [[ ! -s $FULL_MANIFEST_LIST ]]; then
|
||||
echo "$0: ERROR: FULL_MANIFEST_LIST is empty: $FULL_MANIFEST_LIST" 1>&2
|
||||
exit 15
|
||||
fi
|
||||
if [[ ! -f $FOUND_LIST ]]; then
|
||||
echo "$0: ERROR: missing FOUND_LIST: $FOUND_LIST" 1>&2
|
||||
exit 16
|
||||
fi
|
||||
if [[ ! -s $FOUND_LIST ]]; then
|
||||
echo "$0: ERROR: FOUND_LIST is empty: $FOUND_LIST" 1>&2
|
||||
exit 17
|
||||
fi
|
||||
|
||||
# look for missing required files
|
||||
#
|
||||
export TMP_FILE="tmp.$$.missing"
|
||||
trap 'rm -f $TMP_FILE; exit' 0 1 2 3 15
|
||||
comm -23 "$REQUIRED_FILE_LIST" "$FOUND_LIST" | sort -t/ > "$TMP_FILE"
|
||||
if [[ -s $TMP_FILE ]]; then
|
||||
COUNT=$(wc -l < "$TMP_FILE" | sed -e 's/^ *//')
|
||||
echo "# $0: Waning: missing required file count: $COUNT"
|
||||
EXIT_CODE=18 # exit 18
|
||||
echo "#"
|
||||
echo "# $0: missing required file list starts below"
|
||||
cat "$TMP_FILE"
|
||||
echo "# $0: missing required file list ends above"
|
||||
fi
|
||||
rm -f "$TMP_FILE"
|
||||
|
||||
# look for found files not in the manifest
|
||||
#
|
||||
export TMP_FILE="tmp.$$.missing"
|
||||
trap 'rm -f $TMP_FILE; exit' 0 1 2 3 15
|
||||
comm -13 "$FULL_MANIFEST_LIST" "$FOUND_LIST" | sort -t/ > "$TMP_FILE"
|
||||
if [[ -s $TMP_FILE ]]; then
|
||||
COUNT=$(wc -l < "$TMP_FILE" | sed -e 's/^ *//')
|
||||
echo "# $0: Waning: found files not in the manifest count: $COUNT"
|
||||
EXIT_CODE=19 # exit 19
|
||||
echo "#"
|
||||
echo "# $0: found files not in the manifest list starts below"
|
||||
cat "$TMP_FILE"
|
||||
echo "# $0: found files not in the manifest list ends above"
|
||||
fi
|
||||
rm -f "$TMP_FILE"
|
||||
|
||||
# All Done!!! All Done!!! -- Jessica Noll, Age 2
|
||||
#
|
||||
if [[ $EXIT_CODE -ne 0 ]]; then
|
||||
echo "$0: Warning: about to exit: $EXIT_CODE" 1>&2
|
||||
fi
|
||||
exit "$EXIT_CODE"
|
||||
@@ -1,253 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# fake.gen_index.sh - generate a fake index.html file for an entry
|
||||
#
|
||||
# XXX - This is a temporary utility that will be replaced when
|
||||
# the .winner.json files are built
|
||||
#
|
||||
# Copyright (c) 2023 by Landon Curt Noll. All Rights Reserved.
|
||||
#
|
||||
# Permission to use, copy, modify, and distribute this software and
|
||||
# its documentation for any purpose and without fee is hereby granted,
|
||||
# provided that the above copyright, this permission notice and text
|
||||
# this comment, and the disclaimer below appear in all of the following:
|
||||
#
|
||||
# supporting documentation
|
||||
# source copies
|
||||
# source works derived from this source
|
||||
# binaries derived from this source or from derived source
|
||||
#
|
||||
# LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
||||
# EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
||||
# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
# chongo (Landon Curt Noll, http://www.isthe.com/chongo/index.html) /\oo/\
|
||||
#
|
||||
# Share and enjoy! :-)
|
||||
|
||||
# setup
|
||||
#
|
||||
export VERSION="1.0.5 2023-10-31"
|
||||
NAME=$(basename "$0"); export NAME
|
||||
#
|
||||
export V_FLAG=0
|
||||
export DOMAIN="ioccc-src.github.io"
|
||||
export DOCPATH="/temp-test-ioccc"
|
||||
export GITHUB_REPO="https://github.com/ioccc-src/temp-test-ioccc"
|
||||
export TOPDIR=".."
|
||||
|
||||
# usage
|
||||
#
|
||||
export USAGE="usage: $0 [-h] [-v level] [-d www.domain.org] [-p /path/to/docroot] [-g github_url ] [-t topdir] year[/dir] [dir]
|
||||
|
||||
-h print help message and exit
|
||||
-v level set verbosity level (def level: $V_FLAG)
|
||||
|
||||
-d www.domain.org change domain (def: $DOMAIN)
|
||||
-p /path/to/docroot use path under domain to document root (def: $DOCPATH)
|
||||
-g github_url path to the GitHub repo (def: $GITHUB_REPO)
|
||||
-t topdir path to top of the local GitHub repo tree (def: $TOPDIR)
|
||||
|
||||
year[/dir] path to winner directory (or just year if there is a path arg
|
||||
[dir] optional winner directory (1st arg is just year)
|
||||
|
||||
Exit codes:
|
||||
0 all OK
|
||||
2 -h and help string printed or -V and version string printed
|
||||
3 command line error
|
||||
4 cannot find writable winner directory
|
||||
>= 10 internal error
|
||||
|
||||
$NAME version: $VERSION"
|
||||
|
||||
# parse command line
|
||||
#
|
||||
while getopts :hv:d:p:g:t: flag; do
|
||||
case "$flag" in
|
||||
h) echo "$USAGE"
|
||||
exit 2
|
||||
;;
|
||||
v) V_FLAG="$OPTARG"
|
||||
;;
|
||||
d) DOMAIN="$OPTARG"
|
||||
;;
|
||||
p) DOCPATH="$OPTARG"
|
||||
;;
|
||||
g) GITHUB_REPO="$OPTARG"
|
||||
;;
|
||||
t) TOPDIR="$OPTARG"
|
||||
;;
|
||||
\?) echo "$0: ERROR: invalid option: -$OPTARG" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
:) echo "$0: ERROR: option -$OPTARG requires an argument" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
*) echo "$0: ERROR: unexpected value from getopts: $flag" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
done
|
||||
#
|
||||
# remove the options
|
||||
#
|
||||
shift $(( OPTIND - 1 ));
|
||||
#
|
||||
# verify arg count and parse args
|
||||
#
|
||||
export WINNER_PATH
|
||||
export YEAR
|
||||
export WINNER
|
||||
case "$#" in
|
||||
1) WINNER_PATH="$1"
|
||||
YEAR="${WINNER_PATH%/*}"
|
||||
WINNER="${WINNER_PATH#*/}"
|
||||
;;
|
||||
2) WINNER_PATH="$1/$2"
|
||||
YEAR="$1"
|
||||
WINNER="$2"
|
||||
;;
|
||||
*) echo "$0: ERROR: expected 1 or 2 args, found: $#" 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
export FULL_WINNER_PATH="$TOPDIR/$WINNER_PATH"
|
||||
|
||||
# form full URL
|
||||
#
|
||||
export URL_PATH="https://$DOMAIN$DOCPATH/$YEAR/$WINNER"
|
||||
export URL_BASENAME="index.html"
|
||||
export URL="$URL_PATH/$URL_BASENAME"
|
||||
export GITHUB_URL_PATH="$GITHUB_REPO/$YEAR/$WINNER"
|
||||
export GITHUB_URL="$GITHUB_URL_PATH/$URL_BASENAME"
|
||||
|
||||
# form Nu Html Checker doc url string
|
||||
#
|
||||
VALIDATOR_ENCODED_URL=$(echo "$URL" | sed -e 's;/;%2F;g' -e 's;:;%3A;')
|
||||
export VALIDATOR_ENCODED_URL
|
||||
|
||||
# print running info if verbose
|
||||
#
|
||||
if [[ $V_FLAG -ge 5 ]]; then
|
||||
echo "$0: debug[5]: V_FLAG=$V_FLAG" 1>&2
|
||||
echo "$0: debug[5]: DOMAIN=$DOMAIN" 1>&2
|
||||
echo "$0: debug[5]: DOCPATH=$DOCPATH" 1>&2
|
||||
echo "$0: debug[5]: GITHUB_REPO=$GITHUB_REPO" 1>&2
|
||||
echo "$0: debug[5]: TOPDIR=$TOPDIR" 1>&2
|
||||
echo "$0: debug[5]: WINNER_PATH=$WINNER_PATH" 1>&2
|
||||
echo "$0: debug[5]: YEAR=$YEAR" 1>&2
|
||||
echo "$0: debug[5]: WINNER=$WINNER" 1>&2
|
||||
echo "$0: debug[5]: WINNER_PATH=$WINNER_PATH" 1>&2
|
||||
echo "$0: debug[5]: URL_PATH=$URL_PATH" 1>&2
|
||||
echo "$0: debug[5]: URL_BASENAME=$URL_BASENAME" 1>&2
|
||||
echo "$0: debug[5]: URL=$URL" 1>&2
|
||||
echo "$0: debug[5]: GITHUB_URL_PATH=$GITHUB_URL_PATH" 1>&2
|
||||
echo "$0: debug[5]: GITHUB_URL=$GITHUB_URL" 1>&2
|
||||
echo "$0: debug[5]: VALIDATOR_ENCODED_URL=$VALIDATOR_ENCODED_URL" 1>&2
|
||||
fi
|
||||
|
||||
# make is easier to process CSV files
|
||||
#
|
||||
IFS="$IFS,"
|
||||
|
||||
# verify winner directory is writable
|
||||
#
|
||||
if [[ ! -e $FULL_WINNER_PATH ]]; then
|
||||
echo "$0: ERROR: FULL_WINNER_PATH does not exist: $FULL_WINNER_PATH" 1>&2
|
||||
exit 4
|
||||
fi
|
||||
if [[ ! -d $FULL_WINNER_PATH ]]; then
|
||||
echo "$0: ERROR: FULL_WINNER_PATH is not a directory: $FULL_WINNER_PATH" 1>&2
|
||||
exit 4
|
||||
fi
|
||||
if [[ ! -w $FULL_WINNER_PATH ]]; then
|
||||
echo "$0: ERROR: FULL_WINNER_PATH is not a writable directory: $FULL_WINNER_PATH" 1>&2
|
||||
exit 4
|
||||
fi
|
||||
|
||||
# build the index.html file
|
||||
#
|
||||
export INDEX_PATH="$FULL_WINNER_PATH/$URL_BASENAME"
|
||||
export TMP_FILE="$FULL_WINNER_PATH/tmp.$$.$URL_BASENAME"
|
||||
trap 'rm -f $TMP_FILE; exit' 0 1 2 3 15
|
||||
cat > "$TMP_FILE" << EOF
|
||||
<!DOCTYPE html>
|
||||
<!-- -->
|
||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
<!-- -->
|
||||
<!-- file: $WINNER_PATH/$URL_BASENAME created by: $NAME version: $VERSION -->
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>$YEAR $WINNER</title>
|
||||
<meta name="description" content="IOCCC year: $YEAR IOCCC winner: $WINNER winner index page">
|
||||
<meta name="keywords" content="IOCCC,$YEAR,$WINNER,winner index page">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<h1>$YEAR $WINNER</h1>
|
||||
|
||||
<p>XXX - fake content until readme2index is working - XXX</p>
|
||||
|
||||
<hr style="width:50%;text-align:left;margin-left:0">
|
||||
|
||||
<!-- Start Nu Html Checker -->
|
||||
<p><a href="https://validator.w3.org/nu/?doc=$VALIDATOR_ENCODED_URL">Nu Html check $URL</a></p>
|
||||
<!-- End Nu Html Checker -->
|
||||
|
||||
</body>
|
||||
</html>
|
||||
EOF
|
||||
|
||||
# update index.html if needed
|
||||
#
|
||||
if ! cmp -s "$TMP_FILE" "$INDEX_PATH"; then
|
||||
|
||||
# replace index.html file
|
||||
#
|
||||
if [[ $V_FLAG -ge 1 ]]; then
|
||||
echo "$0: debug[1]: updating $INDEX_PATH"
|
||||
fi
|
||||
if [[ $V_FLAG -ge 1 ]]; then
|
||||
mv -f -v "$TMP_FILE" "$INDEX_PATH"
|
||||
status="$?"
|
||||
else
|
||||
mv -f "$TMP_FILE" "$INDEX_PATH"
|
||||
status="$?"
|
||||
fi
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: mv -f -v $TMP_FILE $INDEX_PATH failed, error: $status" 1>&2
|
||||
exit 10
|
||||
fi
|
||||
|
||||
else
|
||||
|
||||
# index.html is OK, remove the tmp file
|
||||
#
|
||||
rm -f "$TMP_FILE"
|
||||
if [[ -e $TMP_FILE ]]; then
|
||||
echo "$0: ERROR: TMP_FILE cannot be removed for cleanup: $TMP_FILE" 1>&2
|
||||
exit 11
|
||||
fi
|
||||
fi
|
||||
|
||||
# All Done!!! All Done!!! -- Jessica Noll, Age 2
|
||||
#
|
||||
exit 0
|
||||
@@ -1,263 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# fake.gen_inventory.sh - generate a fake .inventory.html file for an entry
|
||||
#
|
||||
# XXX - This is a temporary utility that will be replaced when
|
||||
# the .winner.json files are built
|
||||
#
|
||||
# Copyright (c) 2023 by Landon Curt Noll. All Rights Reserved.
|
||||
#
|
||||
# Permission to use, copy, modify, and distribute this software and
|
||||
# its documentation for any purpose and without fee is hereby granted,
|
||||
# provided that the above copyright, this permission notice and text
|
||||
# this comment, and the disclaimer below appear in all of the following:
|
||||
#
|
||||
# supporting documentation
|
||||
# source copies
|
||||
# source works derived from this source
|
||||
# binaries derived from this source or from derived source
|
||||
#
|
||||
# LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
||||
# EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
||||
# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
# chongo (Landon Curt Noll, http://www.isthe.com/chongo/index.html) /\oo/\
|
||||
#
|
||||
# Share and enjoy! :-)
|
||||
|
||||
# setup
|
||||
#
|
||||
export VERSION="1.0.1 2023-10-31"
|
||||
NAME=$(basename "$0"); export NAME
|
||||
#
|
||||
export V_FLAG=0
|
||||
export DOMAIN="ioccc-src.github.io"
|
||||
export DOCPATH="/temp-test-ioccc"
|
||||
export GITHUB_REPO="https://github.com/ioccc-src/temp-test-ioccc"
|
||||
export TOPDIR=".."
|
||||
|
||||
# usage
|
||||
#
|
||||
export USAGE="usage: $0 [-h] [-v level] [-d www.domain.org] [-p /path/to/docroot] [-g github_url ] [-t topdir] year[/dir] [dir]
|
||||
|
||||
-h print help message and exit
|
||||
-v level set verbosity level (def level: $V_FLAG)
|
||||
|
||||
-d www.domain.org change domain (def: $DOMAIN)
|
||||
-p /path/to/docroot use path under domain to document root (def: $DOCPATH)
|
||||
-g github_url path to the GitHub repo (def: $GITHUB_REPO)
|
||||
-t topdir path to top of the local GitHub repo tree (def: $TOPDIR)
|
||||
|
||||
year[/dir] path to winner directory (or just year if there is a path arg
|
||||
[dir] optional winner directory (1st arg is just year)
|
||||
|
||||
Exit codes:
|
||||
0 all OK
|
||||
2 -h and help string printed or -V and version string printed
|
||||
3 command line error
|
||||
4 cannot find writable winner directory
|
||||
>= 10 internal error
|
||||
|
||||
$NAME version: $VERSION"
|
||||
|
||||
# parse command line
|
||||
#
|
||||
while getopts :hv:d:p:g:t: flag; do
|
||||
case "$flag" in
|
||||
h) echo "$USAGE"
|
||||
exit 2
|
||||
;;
|
||||
v) V_FLAG="$OPTARG"
|
||||
;;
|
||||
d) DOMAIN="$OPTARG"
|
||||
;;
|
||||
p) DOCPATH="$OPTARG"
|
||||
;;
|
||||
g) GITHUB_REPO="$OPTARG"
|
||||
;;
|
||||
t) TOPDIR="$OPTARG"
|
||||
;;
|
||||
\?) echo "$0: ERROR: invalid option: -$OPTARG" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
:) echo "$0: ERROR: option -$OPTARG requires an argument" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
*) echo "$0: ERROR: unexpected value from getopts: $flag" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
done
|
||||
#
|
||||
# remove the options
|
||||
#
|
||||
shift $(( OPTIND - 1 ));
|
||||
#
|
||||
# verify arg count and parse args
|
||||
#
|
||||
export WINNER_PATH
|
||||
export YEAR
|
||||
export WINNER
|
||||
case "$#" in
|
||||
1) WINNER_PATH="$1"
|
||||
YEAR="${WINNER_PATH%/*}"
|
||||
WINNER="${WINNER_PATH#*/}"
|
||||
;;
|
||||
2) WINNER_PATH="$1/$2"
|
||||
YEAR="$1"
|
||||
WINNER="$2"
|
||||
;;
|
||||
*) echo "$0: ERROR: expected 1 or 2 args, found: $#" 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
export FULL_WINNER_PATH="$TOPDIR/$WINNER_PATH"
|
||||
|
||||
# form full URL
|
||||
#
|
||||
export URL_PATH="https://$DOMAIN$DOCPATH/$YEAR/$WINNER"
|
||||
export URL_BASENAME=".inventory.html"
|
||||
export URL="$URL_PATH/$URL_BASENAME"
|
||||
export GITHUB_URL_PATH="$GITHUB_REPO/$YEAR/$WINNER"
|
||||
export GITHUB_URL="$GITHUB_URL_PATH/$URL_BASENAME"
|
||||
|
||||
# form Nu Html Checker doc url string
|
||||
#
|
||||
VALIDATOR_ENCODED_URL=$(echo "$URL" | sed -e 's;/;%2F;g' -e 's;:;%3A;')
|
||||
export VALIDATOR_ENCODED_URL
|
||||
|
||||
# print running info if verbose
|
||||
#
|
||||
if [[ $V_FLAG -ge 5 ]]; then
|
||||
echo "$0: debug[5]: V_FLAG=$V_FLAG" 1>&2
|
||||
echo "$0: debug[5]: DOMAIN=$DOMAIN" 1>&2
|
||||
echo "$0: debug[5]: DOCPATH=$DOCPATH" 1>&2
|
||||
echo "$0: debug[5]: GITHUB_REPO=$GITHUB_REPO" 1>&2
|
||||
echo "$0: debug[5]: TOPDIR=$TOPDIR" 1>&2
|
||||
echo "$0: debug[5]: WINNER_PATH=$WINNER_PATH" 1>&2
|
||||
echo "$0: debug[5]: YEAR=$YEAR" 1>&2
|
||||
echo "$0: debug[5]: WINNER=$WINNER" 1>&2
|
||||
echo "$0: debug[5]: WINNER_PATH=$WINNER_PATH" 1>&2
|
||||
echo "$0: debug[5]: URL_PATH=$URL_PATH" 1>&2
|
||||
echo "$0: debug[5]: URL_BASENAME=$URL_BASENAME" 1>&2
|
||||
echo "$0: debug[5]: URL=$URL" 1>&2
|
||||
echo "$0: debug[5]: GITHUB_URL_PATH=$GITHUB_URL_PATH" 1>&2
|
||||
echo "$0: debug[5]: GITHUB_URL=$GITHUB_URL" 1>&2
|
||||
echo "$0: debug[5]: VALIDATOR_ENCODED_URL=$VALIDATOR_ENCODED_URL" 1>&2
|
||||
fi
|
||||
|
||||
# make is easier to process CSV files
|
||||
#
|
||||
IFS="$IFS,"
|
||||
|
||||
# verify winner directory is writable
|
||||
#
|
||||
if [[ ! -e $FULL_WINNER_PATH ]]; then
|
||||
echo "$0: ERROR: FULL_WINNER_PATH does not exist: $FULL_WINNER_PATH" 1>&2
|
||||
exit 4
|
||||
fi
|
||||
if [[ ! -d $FULL_WINNER_PATH ]]; then
|
||||
echo "$0: ERROR: FULL_WINNER_PATH is not a directory: $FULL_WINNER_PATH" 1>&2
|
||||
exit 4
|
||||
fi
|
||||
if [[ ! -w $FULL_WINNER_PATH ]]; then
|
||||
echo "$0: ERROR: FULL_WINNER_PATH is not a writable directory: $FULL_WINNER_PATH" 1>&2
|
||||
exit 4
|
||||
fi
|
||||
|
||||
# build the .inventory.html file
|
||||
#
|
||||
export INVENTORY_PATH="$FULL_WINNER_PATH/$URL_BASENAME"
|
||||
export TMP_FILE="$FULL_WINNER_PATH/tmp.$$.$URL_BASENAME"
|
||||
trap 'rm -f $TMP_FILE; exit' 0 1 2 3 15
|
||||
cat > "$TMP_FILE" << EOF
|
||||
<!DOCTYPE html>
|
||||
<!-- -->
|
||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
<!-- -->
|
||||
<!-- file: $WINNER_PATH/$URL_BASENAME created by: $NAME version: $VERSION -->
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>$YEAR $WINNER Inventory</title>
|
||||
<meta name="description" content="IOCCC year: $YEAR IOCCC winner: $WINNER winner inventory">
|
||||
<meta name="keywords" content="IOCCC,$YEAR,$WINNER,winner inventory">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<h1>$YEAR $WINNER Inventory</h1>
|
||||
|
||||
<p><ul>
|
||||
<li><a href="$URL_PATH/index.html">index.html</a> - click here first</a></li>
|
||||
<li>XXX - put link to prog source code - XXX</a></li>
|
||||
<li><a href="$GITHUB_URL_PATH/Makefile">Makefile</a> - Makefile</a></li>
|
||||
<li>XXX - put link to prog alt code if it exists - XXX</a></li>
|
||||
<li>XXX - put link to prog original code - XXX</a></li>
|
||||
<li>XXX - put links to other winners_rank numbered inventory files - XXX</a></li>
|
||||
<li><a href="$GITHUB_URL_PATH/.inventory.html">.inventory.html</a> - full inventory of all winner files</a></li>
|
||||
<li><a href="$GITHUB_URL_PATH/.gitignore">.gitignore</a> - list of files that should not be committed under git</a></li>
|
||||
<li>XXX - put links to other null winners_rank inventory files - XXX</a></li>
|
||||
</ul>
|
||||
|
||||
<hr style="width:50%;text-align:left;margin-left:0">
|
||||
|
||||
<!-- Start Nu Html Checker -->
|
||||
<p><a href="https://validator.w3.org/nu/?doc=$VALIDATOR_ENCODED_URL">Nu Html check $URL</a></p>
|
||||
<!-- End Nu Html Checker -->
|
||||
|
||||
</body>
|
||||
</html>
|
||||
EOF
|
||||
|
||||
# update .inventory.html if needed
|
||||
#
|
||||
if ! cmp -s "$TMP_FILE" "$INVENTORY_PATH"; then
|
||||
|
||||
# replace index.html file
|
||||
#
|
||||
if [[ $V_FLAG -ge 1 ]]; then
|
||||
echo "$0: debug[1]: updating $INVENTORY_PATH"
|
||||
fi
|
||||
if [[ $V_FLAG -ge 1 ]]; then
|
||||
mv -f -v "$TMP_FILE" "$INVENTORY_PATH"
|
||||
status="$?"
|
||||
else
|
||||
mv -f "$TMP_FILE" "$INVENTORY_PATH"
|
||||
status="$?"
|
||||
fi
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: mv -f -v $TMP_FILE $INVENTORY_PATH failed, error: $status" 1>&2
|
||||
exit 10
|
||||
fi
|
||||
|
||||
else
|
||||
|
||||
# index.html is OK, remove the tmp file
|
||||
#
|
||||
rm -f "$TMP_FILE"
|
||||
if [[ -e $TMP_FILE ]]; then
|
||||
echo "$0: ERROR: TMP_FILE cannot be removed for cleanup: $TMP_FILE" 1>&2
|
||||
exit 11
|
||||
fi
|
||||
fi
|
||||
|
||||
# All Done!!! All Done!!! -- Jessica Noll, Age 2
|
||||
#
|
||||
exit 0
|
||||
@@ -1,989 +0,0 @@
|
||||
1984/anonymous/.winner.json
|
||||
1984/anonymous/1984_anonymous.tar.bz2
|
||||
1984/anonymous/index.html
|
||||
1984/decot/.winner.json
|
||||
1984/decot/1984_decot.tar.bz2
|
||||
1984/decot/index.html
|
||||
1984/laman/.winner.json
|
||||
1984/laman/1984_laman.tar.bz2
|
||||
1984/laman/index.html
|
||||
1984/mullender/.winner.json
|
||||
1984/mullender/1984_mullender.tar.bz2
|
||||
1984/mullender/index.html
|
||||
1985/applin/.winner.json
|
||||
1985/applin/1985_applin.tar.bz2
|
||||
1985/applin/index.html
|
||||
1985/august/.winner.json
|
||||
1985/august/1985_august.tar.bz2
|
||||
1985/august/index.html
|
||||
1985/lycklama/.winner.json
|
||||
1985/lycklama/1985_lycklama.tar.bz2
|
||||
1985/lycklama/index.html
|
||||
1985/shapiro/.winner.json
|
||||
1985/shapiro/1985_shapiro.tar.bz2
|
||||
1985/shapiro/index.html
|
||||
1985/sicherman/.winner.json
|
||||
1985/sicherman/1985_sicherman.tar.bz2
|
||||
1985/sicherman/index.html
|
||||
1986/applin/.winner.json
|
||||
1986/applin/1986_applin.tar.bz2
|
||||
1986/applin/index.html
|
||||
1986/august/.winner.json
|
||||
1986/august/1986_august.tar.bz2
|
||||
1986/august/index.html
|
||||
1986/bright/.winner.json
|
||||
1986/bright/1986_bright.tar.bz2
|
||||
1986/bright/index.html
|
||||
1986/hague/.winner.json
|
||||
1986/hague/1986_hague.tar.bz2
|
||||
1986/hague/index.html
|
||||
1986/holloway/.winner.json
|
||||
1986/holloway/1986_holloway.tar.bz2
|
||||
1986/holloway/index.html
|
||||
1986/marshall/.winner.json
|
||||
1986/marshall/1986_marshall.tar.bz2
|
||||
1986/marshall/index.html
|
||||
1986/pawka/.winner.json
|
||||
1986/pawka/1986_pawka.tar.bz2
|
||||
1986/pawka/index.html
|
||||
1986/stein/.winner.json
|
||||
1986/stein/1986_stein.tar.bz2
|
||||
1986/stein/index.html
|
||||
1986/wall/.winner.json
|
||||
1986/wall/1986_wall.tar.bz2
|
||||
1986/wall/index.html
|
||||
1987/biggar/.winner.json
|
||||
1987/biggar/1987_biggar.tar.bz2
|
||||
1987/biggar/index.html
|
||||
1987/heckbert/.winner.json
|
||||
1987/heckbert/1987_heckbert.tar.bz2
|
||||
1987/heckbert/index.html
|
||||
1987/hines/.winner.json
|
||||
1987/hines/1987_hines.tar.bz2
|
||||
1987/hines/index.html
|
||||
1987/korn/.winner.json
|
||||
1987/korn/1987_korn.tar.bz2
|
||||
1987/korn/index.html
|
||||
1987/lievaart/.winner.json
|
||||
1987/lievaart/1987_lievaart.tar.bz2
|
||||
1987/lievaart/index.html
|
||||
1987/wall/.winner.json
|
||||
1987/wall/1987_wall.tar.bz2
|
||||
1987/wall/index.html
|
||||
1987/westley/.winner.json
|
||||
1987/westley/1987_westley.tar.bz2
|
||||
1987/westley/index.html
|
||||
1988/applin/.winner.json
|
||||
1988/applin/1988_applin.tar.bz2
|
||||
1988/applin/index.html
|
||||
1988/dale/.winner.json
|
||||
1988/dale/1988_dale.tar.bz2
|
||||
1988/dale/index.html
|
||||
1988/isaak/.winner.json
|
||||
1988/isaak/1988_isaak.tar.bz2
|
||||
1988/isaak/index.html
|
||||
1988/litmaath/.winner.json
|
||||
1988/litmaath/1988_litmaath.tar.bz2
|
||||
1988/litmaath/index.html
|
||||
1988/phillipps/.winner.json
|
||||
1988/phillipps/1988_phillipps.tar.bz2
|
||||
1988/phillipps/index.html
|
||||
1988/reddy/.winner.json
|
||||
1988/reddy/1988_reddy.tar.bz2
|
||||
1988/reddy/index.html
|
||||
1988/robison/.winner.json
|
||||
1988/robison/1988_robison.tar.bz2
|
||||
1988/robison/index.html
|
||||
1988/spinellis/.winner.json
|
||||
1988/spinellis/1988_spinellis.tar.bz2
|
||||
1988/spinellis/index.html
|
||||
1988/westley/.winner.json
|
||||
1988/westley/1988_westley.tar.bz2
|
||||
1988/westley/index.html
|
||||
1989/fubar/.winner.json
|
||||
1989/fubar/1989_fubar.tar.bz2
|
||||
1989/fubar/index.html
|
||||
1989/jar.1/.winner.json
|
||||
1989/jar.1/1989_jar.1.tar.bz2
|
||||
1989/jar.1/index.html
|
||||
1989/jar.2/.winner.json
|
||||
1989/jar.2/1989_jar.2.tar.bz2
|
||||
1989/jar.2/index.html
|
||||
1989/ovdluhe/.winner.json
|
||||
1989/ovdluhe/1989_ovdluhe.tar.bz2
|
||||
1989/ovdluhe/index.html
|
||||
1989/paul/.winner.json
|
||||
1989/paul/1989_paul.tar.bz2
|
||||
1989/paul/index.html
|
||||
1989/robison/.winner.json
|
||||
1989/robison/1989_robison.tar.bz2
|
||||
1989/robison/index.html
|
||||
1989/roemer/.winner.json
|
||||
1989/roemer/1989_roemer.tar.bz2
|
||||
1989/roemer/index.html
|
||||
1989/tromp/.winner.json
|
||||
1989/tromp/1989_tromp.tar.bz2
|
||||
1989/tromp/index.html
|
||||
1989/vanb/.winner.json
|
||||
1989/vanb/1989_vanb.tar.bz2
|
||||
1989/vanb/index.html
|
||||
1989/westley/.winner.json
|
||||
1989/westley/1989_westley.tar.bz2
|
||||
1989/westley/index.html
|
||||
1990/baruch/.winner.json
|
||||
1990/baruch/1990_baruch.tar.bz2
|
||||
1990/baruch/index.html
|
||||
1990/cmills/.winner.json
|
||||
1990/cmills/1990_cmills.tar.bz2
|
||||
1990/cmills/index.html
|
||||
1990/dds/.winner.json
|
||||
1990/dds/1990_dds.tar.bz2
|
||||
1990/dds/index.html
|
||||
1990/dg/.winner.json
|
||||
1990/dg/1990_dg.tar.bz2
|
||||
1990/dg/index.html
|
||||
1990/jaw/.winner.json
|
||||
1990/jaw/1990_jaw.tar.bz2
|
||||
1990/jaw/index.html
|
||||
1990/pjr/.winner.json
|
||||
1990/pjr/1990_pjr.tar.bz2
|
||||
1990/pjr/index.html
|
||||
1990/scjones/.winner.json
|
||||
1990/scjones/1990_scjones.tar.bz2
|
||||
1990/scjones/index.html
|
||||
1990/stig/.winner.json
|
||||
1990/stig/1990_stig.tar.bz2
|
||||
1990/stig/index.html
|
||||
1990/tbr/.winner.json
|
||||
1990/tbr/1990_tbr.tar.bz2
|
||||
1990/tbr/index.html
|
||||
1990/theorem/.winner.json
|
||||
1990/theorem/1990_theorem.tar.bz2
|
||||
1990/theorem/index.html
|
||||
1990/westley/.winner.json
|
||||
1990/westley/1990_westley.tar.bz2
|
||||
1990/westley/index.html
|
||||
1991/ant/.winner.json
|
||||
1991/ant/1991_ant.tar.bz2
|
||||
1991/ant/index.html
|
||||
1991/brnstnd/.winner.json
|
||||
1991/brnstnd/1991_brnstnd.tar.bz2
|
||||
1991/brnstnd/index.html
|
||||
1991/brnstnd/sorta.README.html
|
||||
1991/buzzard/.winner.json
|
||||
1991/buzzard/1991_buzzard.tar.bz2
|
||||
1991/buzzard/index.html
|
||||
1991/cdupont/.winner.json
|
||||
1991/cdupont/1991_cdupont.tar.bz2
|
||||
1991/cdupont/index.html
|
||||
1991/davidguy/.winner.json
|
||||
1991/davidguy/1991_davidguy.tar.bz2
|
||||
1991/davidguy/index.html
|
||||
1991/dds/.winner.json
|
||||
1991/dds/1991_dds.tar.bz2
|
||||
1991/dds/index.html
|
||||
1991/fine/.winner.json
|
||||
1991/fine/1991_fine.tar.bz2
|
||||
1991/fine/index.html
|
||||
1991/rince/.winner.json
|
||||
1991/rince/1991_rince.tar.bz2
|
||||
1991/rince/index.html
|
||||
1991/westley/.winner.json
|
||||
1991/westley/1991_westley.tar.bz2
|
||||
1991/westley/index.html
|
||||
1992/adrian/.winner.json
|
||||
1992/adrian/1992_adrian.tar.bz2
|
||||
1992/adrian/index.html
|
||||
1992/albert/.winner.json
|
||||
1992/albert/1992_albert.tar.bz2
|
||||
1992/albert/index.html
|
||||
1992/ant/.winner.json
|
||||
1992/ant/1992_ant.tar.bz2
|
||||
1992/ant/index.html
|
||||
1992/buzzard.1/.winner.json
|
||||
1992/buzzard.1/1992_buzzard.1.tar.bz2
|
||||
1992/buzzard.1/index.html
|
||||
1992/buzzard.2/.winner.json
|
||||
1992/buzzard.2/1992_buzzard.2.tar.bz2
|
||||
1992/buzzard.2/buzzard.2.README.html
|
||||
1992/buzzard.2/index.html
|
||||
1992/gson/.winner.json
|
||||
1992/gson/1992_gson.tar.bz2
|
||||
1992/gson/index.html
|
||||
1992/imc/.winner.json
|
||||
1992/imc/1992_imc.tar.bz2
|
||||
1992/imc/index.html
|
||||
1992/kivinen/.winner.json
|
||||
1992/kivinen/1992_kivinen.tar.bz2
|
||||
1992/kivinen/index.html
|
||||
1992/lush/.winner.json
|
||||
1992/lush/1992_lush.tar.bz2
|
||||
1992/lush/index.html
|
||||
1992/marangon/.winner.json
|
||||
1992/marangon/1992_marangon.tar.bz2
|
||||
1992/marangon/index.html
|
||||
1992/nathan/.winner.json
|
||||
1992/nathan/1992_nathan.tar.bz2
|
||||
1992/nathan/index.html
|
||||
1992/vern/.winner.json
|
||||
1992/vern/1992_vern.tar.bz2
|
||||
1992/vern/index.html
|
||||
1992/westley/.winner.json
|
||||
1992/westley/1992_westley.tar.bz2
|
||||
1992/westley/index.html
|
||||
1993/ant/.winner.json
|
||||
1993/ant/1993_ant.tar.bz2
|
||||
1993/ant/index.html
|
||||
1993/cmills/.winner.json
|
||||
1993/cmills/1993_cmills.tar.bz2
|
||||
1993/cmills/index.html
|
||||
1993/dgibson/.winner.json
|
||||
1993/dgibson/1993_dgibson.tar.bz2
|
||||
1993/dgibson/index.html
|
||||
1993/ejb/.winner.json
|
||||
1993/ejb/1993_ejb.tar.bz2
|
||||
1993/ejb/hanoi.html
|
||||
1993/ejb/index.html
|
||||
1993/ejb/patience.html
|
||||
1993/jonth/.winner.json
|
||||
1993/jonth/1993_jonth.tar.bz2
|
||||
1993/jonth/index.html
|
||||
1993/leo/.winner.json
|
||||
1993/leo/1993_leo.tar.bz2
|
||||
1993/leo/index.html
|
||||
1993/lmfjyh/.winner.json
|
||||
1993/lmfjyh/1993_lmfjyh.tar.bz2
|
||||
1993/lmfjyh/index.html
|
||||
1993/plummer/.winner.json
|
||||
1993/plummer/1993_plummer.tar.bz2
|
||||
1993/plummer/index.html
|
||||
1993/rince/.winner.json
|
||||
1993/rince/1993_rince.tar.bz2
|
||||
1993/rince/design.html
|
||||
1993/rince/index.html
|
||||
1993/schnitzi/.winner.json
|
||||
1993/schnitzi/1993_schnitzi.tar.bz2
|
||||
1993/schnitzi/index.html
|
||||
1993/vanb/.winner.json
|
||||
1993/vanb/1993_vanb.tar.bz2
|
||||
1993/vanb/index.html
|
||||
1994/dodsond1/.winner.json
|
||||
1994/dodsond1/1994_dodsond1.tar.bz2
|
||||
1994/dodsond1/index.html
|
||||
1994/dodsond2/.winner.json
|
||||
1994/dodsond2/1994_dodsond2.tar.bz2
|
||||
1994/dodsond2/index.html
|
||||
1994/horton/.winner.json
|
||||
1994/horton/1994_horton.tar.bz2
|
||||
1994/horton/index.html
|
||||
1994/imc/.winner.json
|
||||
1994/imc/1994_imc.tar.bz2
|
||||
1994/imc/index.html
|
||||
1994/ldb/.winner.json
|
||||
1994/ldb/1994_ldb.tar.bz2
|
||||
1994/ldb/index.html
|
||||
1994/schnitzi/.winner.json
|
||||
1994/schnitzi/1994_schnitzi.tar.bz2
|
||||
1994/schnitzi/index.html
|
||||
1994/shapiro/.winner.json
|
||||
1994/shapiro/1994_shapiro.tar.bz2
|
||||
1994/shapiro/index.html
|
||||
1994/shapiro/shapiro.html
|
||||
1994/smr/.winner.json
|
||||
1994/smr/1994_smr.tar.bz2
|
||||
1994/smr/index.html
|
||||
1994/tvr/.winner.json
|
||||
1994/tvr/1994_tvr.tar.bz2
|
||||
1994/tvr/index.html
|
||||
1994/weisberg/.winner.json
|
||||
1994/weisberg/1994_weisberg.tar.bz2
|
||||
1994/weisberg/index.html
|
||||
1994/westley/.winner.json
|
||||
1994/westley/1994_westley.tar.bz2
|
||||
1994/westley/index.html
|
||||
1995/cdua/.winner.json
|
||||
1995/cdua/1995_cdua.tar.bz2
|
||||
1995/cdua/index.html
|
||||
1995/dodsond1/.winner.json
|
||||
1995/dodsond1/1995_dodsond1.tar.bz2
|
||||
1995/dodsond1/index.html
|
||||
1995/dodsond2/.winner.json
|
||||
1995/dodsond2/1995_dodsond2.tar.bz2
|
||||
1995/dodsond2/index.html
|
||||
1995/esde/.winner.json
|
||||
1995/esde/1995_esde.tar.bz2
|
||||
1995/esde/index.html
|
||||
1995/garry/.winner.json
|
||||
1995/garry/1995_garry.tar.bz2
|
||||
1995/garry/index.html
|
||||
1995/heathbar/.winner.json
|
||||
1995/heathbar/1995_heathbar.tar.bz2
|
||||
1995/heathbar/index.html
|
||||
1995/leo/.winner.json
|
||||
1995/leo/1995_leo.tar.bz2
|
||||
1995/leo/index.html
|
||||
1995/makarios/.winner.json
|
||||
1995/makarios/1995_makarios.tar.bz2
|
||||
1995/makarios/index.html
|
||||
1995/savastio/.winner.json
|
||||
1995/savastio/1995_savastio.tar.bz2
|
||||
1995/savastio/index.html
|
||||
1995/schnitzi/.winner.json
|
||||
1995/schnitzi/1995_schnitzi.tar.bz2
|
||||
1995/schnitzi/index.html
|
||||
1995/spinellis/.winner.json
|
||||
1995/spinellis/1995_spinellis.tar.bz2
|
||||
1995/spinellis/index.html
|
||||
1995/vanschnitz/.winner.json
|
||||
1995/vanschnitz/1995_vanschnitz.tar.bz2
|
||||
1995/vanschnitz/index.html
|
||||
1996/august/.winner.json
|
||||
1996/august/1996_august.tar.bz2
|
||||
1996/august/index.html
|
||||
1996/dalbec/.winner.json
|
||||
1996/dalbec/1996_dalbec.tar.bz2
|
||||
1996/dalbec/index.html
|
||||
1996/eldby/.winner.json
|
||||
1996/eldby/1996_eldby.tar.bz2
|
||||
1996/eldby/index.html
|
||||
1996/gandalf/.winner.json
|
||||
1996/gandalf/1996_gandalf.tar.bz2
|
||||
1996/gandalf/index.html
|
||||
1996/huffman/.winner.json
|
||||
1996/huffman/1996_huffman.tar.bz2
|
||||
1996/huffman/index.html
|
||||
1996/jonth/.winner.json
|
||||
1996/jonth/1996_jonth.tar.bz2
|
||||
1996/jonth/index.html
|
||||
1996/rcm/.winner.json
|
||||
1996/rcm/1996_rcm.tar.bz2
|
||||
1996/rcm/index.html
|
||||
1996/schweikh1/.winner.json
|
||||
1996/schweikh1/1996_schweikh1.tar.bz2
|
||||
1996/schweikh1/index.html
|
||||
1996/schweikh2/.winner.json
|
||||
1996/schweikh2/1996_schweikh2.tar.bz2
|
||||
1996/schweikh2/index.html
|
||||
1996/schweikh3/.winner.json
|
||||
1996/schweikh3/1996_schweikh3.tar.bz2
|
||||
1996/schweikh3/index.html
|
||||
1996/westley/.winner.json
|
||||
1996/westley/1996_westley.tar.bz2
|
||||
1996/westley/index.html
|
||||
1998/banks/.winner.json
|
||||
1998/banks/1998_banks.tar.bz2
|
||||
1998/banks/index.html
|
||||
1998/bas1/.winner.json
|
||||
1998/bas1/1998_bas1.tar.bz2
|
||||
1998/bas1/index.html
|
||||
1998/bas2/.winner.json
|
||||
1998/bas2/1998_bas2.tar.bz2
|
||||
1998/bas2/index.html
|
||||
1998/chaos/.winner.json
|
||||
1998/chaos/1998_chaos.tar.bz2
|
||||
1998/chaos/index.html
|
||||
1998/df/.winner.json
|
||||
1998/df/1998_df.tar.bz2
|
||||
1998/df/index.html
|
||||
1998/dlowe/.winner.json
|
||||
1998/dlowe/1998_dlowe.tar.bz2
|
||||
1998/dlowe/index.html
|
||||
1998/dloweneil/.winner.json
|
||||
1998/dloweneil/1998_dloweneil.tar.bz2
|
||||
1998/dloweneil/index.html
|
||||
1998/dorssel/.winner.json
|
||||
1998/dorssel/1998_dorssel.tar.bz2
|
||||
1998/dorssel/dorssel.html
|
||||
1998/dorssel/index.html
|
||||
1998/fanf/.winner.json
|
||||
1998/fanf/1998_fanf.tar.bz2
|
||||
1998/fanf/index.html
|
||||
1998/schnitzi/.winner.json
|
||||
1998/schnitzi/1998_schnitzi.tar.bz2
|
||||
1998/schnitzi/index.html
|
||||
1998/schweikh1/.winner.json
|
||||
1998/schweikh1/1998_schweikh1.tar.bz2
|
||||
1998/schweikh1/index.html
|
||||
1998/schweikh2/.winner.json
|
||||
1998/schweikh2/1998_schweikh2.tar.bz2
|
||||
1998/schweikh2/index.html
|
||||
1998/schweikh3/.winner.json
|
||||
1998/schweikh3/1998_schweikh3.tar.bz2
|
||||
1998/schweikh3/index.html
|
||||
1998/tomtorfs/.winner.json
|
||||
1998/tomtorfs/1998_tomtorfs.tar.bz2
|
||||
1998/tomtorfs/index.html
|
||||
2000/anderson/.winner.json
|
||||
2000/anderson/2000_anderson.tar.bz2
|
||||
2000/anderson/index.html
|
||||
2000/bellard/.winner.json
|
||||
2000/bellard/2000_bellard.tar.bz2
|
||||
2000/bellard/index.html
|
||||
2000/bmeyer/.winner.json
|
||||
2000/bmeyer/2000_bmeyer.tar.bz2
|
||||
2000/bmeyer/index.html
|
||||
2000/briddlebane/.winner.json
|
||||
2000/briddlebane/2000_briddlebane.tar.bz2
|
||||
2000/briddlebane/index.html
|
||||
2000/dhyang/.winner.json
|
||||
2000/dhyang/2000_dhyang.tar.bz2
|
||||
2000/dhyang/index.html
|
||||
2000/dlowe/.winner.json
|
||||
2000/dlowe/2000_dlowe.tar.bz2
|
||||
2000/dlowe/index.html
|
||||
2000/jarijyrki/.winner.json
|
||||
2000/jarijyrki/2000_jarijyrki.tar.bz2
|
||||
2000/jarijyrki/index.html
|
||||
2000/natori/.winner.json
|
||||
2000/natori/2000_natori.tar.bz2
|
||||
2000/natori/index.html
|
||||
2000/primenum/.winner.json
|
||||
2000/primenum/2000_primenum.tar.bz2
|
||||
2000/primenum/index.html
|
||||
2000/rince/.winner.json
|
||||
2000/rince/2000_rince.tar.bz2
|
||||
2000/rince/index.html
|
||||
2000/robison/.winner.json
|
||||
2000/robison/2000_robison.tar.bz2
|
||||
2000/robison/index.html
|
||||
2000/schneiderwent/.winner.json
|
||||
2000/schneiderwent/2000_schneiderwent.tar.bz2
|
||||
2000/schneiderwent/index.html
|
||||
2000/thadgavin/.winner.json
|
||||
2000/thadgavin/2000_thadgavin.tar.bz2
|
||||
2000/thadgavin/index.html
|
||||
2000/tomx/.winner.json
|
||||
2000/tomx/2000_tomx.tar.bz2
|
||||
2000/tomx/index.html
|
||||
2001/anonymous/.winner.json
|
||||
2001/anonymous/2001_anonymous.tar.bz2
|
||||
2001/anonymous/index.html
|
||||
2001/bellard/.winner.json
|
||||
2001/bellard/2001_bellard.tar.bz2
|
||||
2001/bellard/index.html
|
||||
2001/cheong/.winner.json
|
||||
2001/cheong/2001_cheong.tar.bz2
|
||||
2001/cheong/index.html
|
||||
2001/coupard/.winner.json
|
||||
2001/coupard/2001_coupard.tar.bz2
|
||||
2001/coupard/index.html
|
||||
2001/ctk/.winner.json
|
||||
2001/ctk/2001_ctk.tar.bz2
|
||||
2001/ctk/index.html
|
||||
2001/dgbeards/.winner.json
|
||||
2001/dgbeards/2001_dgbeards.tar.bz2
|
||||
2001/dgbeards/index.html
|
||||
2001/herrmann1/.winner.json
|
||||
2001/herrmann1/2001_herrmann1.tar.bz2
|
||||
2001/herrmann1/index.html
|
||||
2001/herrmann2/.winner.json
|
||||
2001/herrmann2/2001_herrmann2.tar.bz2
|
||||
2001/herrmann2/index.html
|
||||
2001/jason/.winner.json
|
||||
2001/jason/2001_jason.tar.bz2
|
||||
2001/jason/index.html
|
||||
2001/kev/.winner.json
|
||||
2001/kev/2001_kev.tar.bz2
|
||||
2001/kev/index.html
|
||||
2001/ollinger/.winner.json
|
||||
2001/ollinger/2001_ollinger.tar.bz2
|
||||
2001/ollinger/index.html
|
||||
2001/rosten/.winner.json
|
||||
2001/rosten/2001_rosten.tar.bz2
|
||||
2001/rosten/index.html
|
||||
2001/schweikh/.winner.json
|
||||
2001/schweikh/2001_schweikh.tar.bz2
|
||||
2001/schweikh/index.html
|
||||
2001/westley/.winner.json
|
||||
2001/westley/2001_westley.tar.bz2
|
||||
2001/westley/index.html
|
||||
2001/williams/.winner.json
|
||||
2001/williams/2001_williams.tar.bz2
|
||||
2001/williams/index.html
|
||||
2004/anonymous/.winner.json
|
||||
2004/anonymous/2004_anonymous.tar.bz2
|
||||
2004/anonymous/index.html
|
||||
2004/arachnid/.winner.json
|
||||
2004/arachnid/2004_arachnid.tar.bz2
|
||||
2004/arachnid/index.html
|
||||
2004/burley/.winner.json
|
||||
2004/burley/2004_burley.tar.bz2
|
||||
2004/burley/index.html
|
||||
2004/gavare/.winner.json
|
||||
2004/gavare/2004_gavare.tar.bz2
|
||||
2004/gavare/index.html
|
||||
2004/gavin/.winner.json
|
||||
2004/gavin/2004_gavin.tar.bz2
|
||||
2004/gavin/gavin.html
|
||||
2004/gavin/index.html
|
||||
2004/hibachi/.winner.json
|
||||
2004/hibachi/2004_hibachi.tar.bz2
|
||||
2004/hibachi/index.html
|
||||
2004/hoyle/.winner.json
|
||||
2004/hoyle/2004_hoyle.tar.bz2
|
||||
2004/hoyle/index.html
|
||||
2004/jdalbec/.winner.json
|
||||
2004/jdalbec/2004_jdalbec.tar.bz2
|
||||
2004/jdalbec/index.html
|
||||
2004/kopczynski/.winner.json
|
||||
2004/kopczynski/2004_kopczynski.tar.bz2
|
||||
2004/kopczynski/index.html
|
||||
2004/newbern/.winner.json
|
||||
2004/newbern/2004_newbern.tar.bz2
|
||||
2004/newbern/index.html
|
||||
2004/omoikane/.winner.json
|
||||
2004/omoikane/2004_omoikane.tar.bz2
|
||||
2004/omoikane/index.html
|
||||
2004/schnitzi/.winner.json
|
||||
2004/schnitzi/2004_schnitzi.tar.bz2
|
||||
2004/schnitzi/index.html
|
||||
2004/sds/.winner.json
|
||||
2004/sds/2004_sds.tar.bz2
|
||||
2004/sds/index.html
|
||||
2004/vik1/.winner.json
|
||||
2004/vik1/2004_vik1.tar.bz2
|
||||
2004/vik1/index.html
|
||||
2004/vik2/.winner.json
|
||||
2004/vik2/2004_vik2.tar.bz2
|
||||
2004/vik2/index.html
|
||||
2005/aidan/.winner.json
|
||||
2005/aidan/2005_aidan.tar.bz2
|
||||
2005/aidan/index.html
|
||||
2005/anon/.winner.json
|
||||
2005/anon/2005_anon.tar.bz2
|
||||
2005/anon/index.html
|
||||
2005/boutines/.winner.json
|
||||
2005/boutines/2005_boutines.tar.bz2
|
||||
2005/boutines/index.html
|
||||
2005/chia/.winner.json
|
||||
2005/chia/2005_chia.tar.bz2
|
||||
2005/chia/index.html
|
||||
2005/giljade/.winner.json
|
||||
2005/giljade/2005_giljade.tar.bz2
|
||||
2005/giljade/index.html
|
||||
2005/jetro/.winner.json
|
||||
2005/jetro/2005_jetro.tar.bz2
|
||||
2005/jetro/index.html
|
||||
2005/klausler/.winner.json
|
||||
2005/klausler/2005_klausler.tar.bz2
|
||||
2005/klausler/index.html
|
||||
2005/mikeash/.winner.json
|
||||
2005/mikeash/2005_mikeash.tar.bz2
|
||||
2005/mikeash/index.html
|
||||
2005/mynx/.winner.json
|
||||
2005/mynx/2005_mynx.tar.bz2
|
||||
2005/mynx/index.html
|
||||
2005/persano/.winner.json
|
||||
2005/persano/2005_persano.tar.bz2
|
||||
2005/persano/index.html
|
||||
2005/sykes/.winner.json
|
||||
2005/sykes/2005_sykes.tar.bz2
|
||||
2005/sykes/index.html
|
||||
2005/timwi/.winner.json
|
||||
2005/timwi/2005_timwi.tar.bz2
|
||||
2005/timwi/index.html
|
||||
2005/toledo/.winner.json
|
||||
2005/toledo/2005_toledo.tar.bz2
|
||||
2005/toledo/index.html
|
||||
2005/vik/.winner.json
|
||||
2005/vik/2005_vik.tar.bz2
|
||||
2005/vik/index.html
|
||||
2005/vince/.winner.json
|
||||
2005/vince/2005_vince.tar.bz2
|
||||
2005/vince/index.html
|
||||
2006/birken/.winner.json
|
||||
2006/birken/2006_birken.tar.bz2
|
||||
2006/birken/index.html
|
||||
2006/borsanyi/.winner.json
|
||||
2006/borsanyi/2006_borsanyi.tar.bz2
|
||||
2006/borsanyi/index.html
|
||||
2006/grothe/.winner.json
|
||||
2006/grothe/2006_grothe.tar.bz2
|
||||
2006/grothe/index.html
|
||||
2006/hamre/.winner.json
|
||||
2006/hamre/2006_hamre.tar.bz2
|
||||
2006/hamre/index.html
|
||||
2006/meyer/.winner.json
|
||||
2006/meyer/2006_meyer.tar.bz2
|
||||
2006/meyer/index.html
|
||||
2006/monge/.winner.json
|
||||
2006/monge/2006_monge.tar.bz2
|
||||
2006/monge/index.html
|
||||
2006/night/.winner.json
|
||||
2006/night/2006_night.tar.bz2
|
||||
2006/night/index.html
|
||||
2006/sloane/.winner.json
|
||||
2006/sloane/2006_sloane.tar.bz2
|
||||
2006/sloane/index.html
|
||||
2006/stewart/.winner.json
|
||||
2006/stewart/2006_stewart.tar.bz2
|
||||
2006/stewart/index.html
|
||||
2006/sykes1/.winner.json
|
||||
2006/sykes1/2006_sykes1.tar.bz2
|
||||
2006/sykes1/index.html
|
||||
2006/sykes2/.winner.json
|
||||
2006/sykes2/2006_sykes2.tar.bz2
|
||||
2006/sykes2/index.html
|
||||
2006/toledo1/.winner.json
|
||||
2006/toledo1/2006_toledo1.tar.bz2
|
||||
2006/toledo1/index.html
|
||||
2006/toledo2/.winner.json
|
||||
2006/toledo2/2006_toledo2.tar.bz2
|
||||
2006/toledo2/index.html
|
||||
2006/toledo3/.winner.json
|
||||
2006/toledo3/2006_toledo3.tar.bz2
|
||||
2006/toledo3/index.html
|
||||
2011/akari/.winner.json
|
||||
2011/akari/2011_akari.tar.bz2
|
||||
2011/akari/index.html
|
||||
2011/blakely/.winner.json
|
||||
2011/blakely/2011_blakely.tar.bz2
|
||||
2011/blakely/index.html
|
||||
2011/borsanyi/.winner.json
|
||||
2011/borsanyi/2011_borsanyi.tar.bz2
|
||||
2011/borsanyi/index.html
|
||||
2011/dlowe/.winner.json
|
||||
2011/dlowe/2011_dlowe.tar.bz2
|
||||
2011/dlowe/index.html
|
||||
2011/eastman/.winner.json
|
||||
2011/eastman/2011_eastman.tar.bz2
|
||||
2011/eastman/index.html
|
||||
2011/fredriksson/.winner.json
|
||||
2011/fredriksson/2011_fredriksson.tar.bz2
|
||||
2011/fredriksson/index.html
|
||||
2011/goren/.winner.json
|
||||
2011/goren/2011_goren.tar.bz2
|
||||
2011/goren/index.html
|
||||
2011/hamaji/.winner.json
|
||||
2011/hamaji/2011_hamaji.tar.bz2
|
||||
2011/hamaji/index.html
|
||||
2011/hou/.winner.json
|
||||
2011/hou/2011_hou.tar.bz2
|
||||
2011/hou/index.html
|
||||
2011/konno/.winner.json
|
||||
2011/konno/2011_konno.tar.bz2
|
||||
2011/konno/index.html
|
||||
2011/richards/.winner.json
|
||||
2011/richards/2011_richards.tar.bz2
|
||||
2011/richards/index.html
|
||||
2011/toledo/.winner.json
|
||||
2011/toledo/2011_toledo.tar.bz2
|
||||
2011/toledo/index.html
|
||||
2011/vik/.winner.json
|
||||
2011/vik/2011_vik.tar.bz2
|
||||
2011/vik/index.html
|
||||
2011/zucker/.winner.json
|
||||
2011/zucker/2011_zucker.tar.bz2
|
||||
2011/zucker/index.html
|
||||
2012/blakely/.winner.json
|
||||
2012/blakely/2012_blakely.tar.bz2
|
||||
2012/blakely/index.html
|
||||
2012/deckmyn/.winner.json
|
||||
2012/deckmyn/2012_deckmyn.tar.bz2
|
||||
2012/deckmyn/deckmyn.html
|
||||
2012/deckmyn/index.html
|
||||
2012/dlowe/.winner.json
|
||||
2012/dlowe/2012_dlowe.tar.bz2
|
||||
2012/dlowe/index.html
|
||||
2012/endoh1/.winner.json
|
||||
2012/endoh1/2012_endoh1.tar.bz2
|
||||
2012/endoh1/index.html
|
||||
2012/endoh2/.winner.json
|
||||
2012/endoh2/2012_endoh2.tar.bz2
|
||||
2012/endoh2/index.html
|
||||
2012/grothe/.winner.json
|
||||
2012/grothe/2012_grothe.tar.bz2
|
||||
2012/grothe/index.html
|
||||
2012/hamano/.winner.json
|
||||
2012/hamano/2012_hamano.tar.bz2
|
||||
2012/hamano/index.html
|
||||
2012/hou/.winner.json
|
||||
2012/hou/2012_hou.tar.bz2
|
||||
2012/hou/index.html
|
||||
2012/kang/.winner.json
|
||||
2012/kang/2012_kang.tar.bz2
|
||||
2012/kang/index.html
|
||||
2012/konno/.winner.json
|
||||
2012/konno/2012_konno.tar.bz2
|
||||
2012/konno/index.html
|
||||
2012/omoikane/.winner.json
|
||||
2012/omoikane/2012_omoikane.tar.bz2
|
||||
2012/omoikane/index.html
|
||||
2012/tromp/.winner.json
|
||||
2012/tromp/2012_tromp.tar.bz2
|
||||
2012/tromp/how.html
|
||||
2012/tromp/index.html
|
||||
2012/vik/.winner.json
|
||||
2012/vik/2012_vik.tar.bz2
|
||||
2012/vik/index.html
|
||||
2012/zeitak/.winner.json
|
||||
2012/zeitak/2012_zeitak.tar.bz2
|
||||
2012/zeitak/index.html
|
||||
2013/birken/.winner.json
|
||||
2013/birken/2013_birken.tar.bz2
|
||||
2013/birken/index.html
|
||||
2013/cable1/.winner.json
|
||||
2013/cable1/2013_cable1.tar.bz2
|
||||
2013/cable1/index.html
|
||||
2013/cable2/.winner.json
|
||||
2013/cable2/2013_cable2.tar.bz2
|
||||
2013/cable2/index.html
|
||||
2013/cable3/.winner.json
|
||||
2013/cable3/2013_cable3.tar.bz2
|
||||
2013/cable3/index.html
|
||||
2013/dlowe/.winner.json
|
||||
2013/dlowe/2013_dlowe.tar.bz2
|
||||
2013/dlowe/index.html
|
||||
2013/endoh1/.winner.json
|
||||
2013/endoh1/2013_endoh1.tar.bz2
|
||||
2013/endoh1/index.html
|
||||
2013/endoh2/.winner.json
|
||||
2013/endoh2/2013_endoh2.tar.bz2
|
||||
2013/endoh2/index.html
|
||||
2013/endoh3/.winner.json
|
||||
2013/endoh3/2013_endoh3.tar.bz2
|
||||
2013/endoh3/index.html
|
||||
2013/endoh4/.winner.json
|
||||
2013/endoh4/2013_endoh4.tar.bz2
|
||||
2013/endoh4/index.html
|
||||
2013/hou/.winner.json
|
||||
2013/hou/2013_hou.tar.bz2
|
||||
2013/hou/doc/example.html
|
||||
2013/hou/index.html
|
||||
2013/mills/.winner.json
|
||||
2013/mills/2013_mills.tar.bz2
|
||||
2013/mills/index.html
|
||||
2013/misaka/.winner.json
|
||||
2013/misaka/2013_misaka.tar.bz2
|
||||
2013/misaka/index.html
|
||||
2013/morgan1/.winner.json
|
||||
2013/morgan1/2013_morgan1.tar.bz2
|
||||
2013/morgan1/index.html
|
||||
2013/morgan2/.winner.json
|
||||
2013/morgan2/2013_morgan2.tar.bz2
|
||||
2013/morgan2/index.html
|
||||
2013/robison/.winner.json
|
||||
2013/robison/2013_robison.tar.bz2
|
||||
2013/robison/index.html
|
||||
2014/birken/.winner.json
|
||||
2014/birken/2014_birken.tar.bz2
|
||||
2014/birken/index.html
|
||||
2014/deak/.winner.json
|
||||
2014/deak/2014_deak.tar.bz2
|
||||
2014/deak/index.html
|
||||
2014/endoh1/.winner.json
|
||||
2014/endoh1/2014_endoh1.tar.bz2
|
||||
2014/endoh1/index.html
|
||||
2014/endoh1/read_me.html
|
||||
2014/endoh1/spoilers.html
|
||||
2014/endoh2/.winner.json
|
||||
2014/endoh2/2014_endoh2.tar.bz2
|
||||
2014/endoh2/index.html
|
||||
2014/maffiodo1/.winner.json
|
||||
2014/maffiodo1/2014_maffiodo1.tar.bz2
|
||||
2014/maffiodo1/index.html
|
||||
2014/maffiodo2/.winner.json
|
||||
2014/maffiodo2/2014_maffiodo2.tar.bz2
|
||||
2014/maffiodo2/index.html
|
||||
2014/morgan/.winner.json
|
||||
2014/morgan/2014_morgan.tar.bz2
|
||||
2014/morgan/index.html
|
||||
2014/sinon/.winner.json
|
||||
2014/sinon/2014_sinon.tar.bz2
|
||||
2014/sinon/index.html
|
||||
2014/skeggs/.winner.json
|
||||
2014/skeggs/2014_skeggs.tar.bz2
|
||||
2014/skeggs/index.html
|
||||
2014/vik/.winner.json
|
||||
2014/vik/2014_vik.tar.bz2
|
||||
2014/vik/index.html
|
||||
2014/wiedijk/.winner.json
|
||||
2014/wiedijk/2014_wiedijk.tar.bz2
|
||||
2014/wiedijk/index.html
|
||||
2015/burton/.winner.json
|
||||
2015/burton/2015_burton.tar.bz2
|
||||
2015/burton/index.html
|
||||
2015/burton/spoilers.html
|
||||
2015/dogon/.winner.json
|
||||
2015/dogon/2015_dogon.tar.bz2
|
||||
2015/dogon/index.html
|
||||
2015/duble/.winner.json
|
||||
2015/duble/2015_duble.tar.bz2
|
||||
2015/duble/index.html
|
||||
2015/endoh1/.winner.json
|
||||
2015/endoh1/2015_endoh1.tar.bz2
|
||||
2015/endoh1/index.html
|
||||
2015/endoh2/.winner.json
|
||||
2015/endoh2/2015_endoh2.tar.bz2
|
||||
2015/endoh2/index.html
|
||||
2015/endoh3/.winner.json
|
||||
2015/endoh3/2015_endoh3.tar.bz2
|
||||
2015/endoh3/index.html
|
||||
2015/endoh4/.winner.json
|
||||
2015/endoh4/2015_endoh4.tar.bz2
|
||||
2015/endoh4/index.html
|
||||
2015/hou/.winner.json
|
||||
2015/hou/2015_hou.tar.bz2
|
||||
2015/hou/index.html
|
||||
2015/howe/.winner.json
|
||||
2015/howe/2015_howe.tar.bz2
|
||||
2015/howe/index.html
|
||||
2015/mills1/.winner.json
|
||||
2015/mills1/2015_mills1.tar.bz2
|
||||
2015/mills1/index.html
|
||||
2015/mills2/.winner.json
|
||||
2015/mills2/2015_mills2.tar.bz2
|
||||
2015/mills2/index.html
|
||||
2015/muth/.winner.json
|
||||
2015/muth/2015_muth.tar.bz2
|
||||
2015/muth/index.html
|
||||
2015/schweikhardt/.winner.json
|
||||
2015/schweikhardt/2015_schweikhardt.tar.bz2
|
||||
2015/schweikhardt/index.html
|
||||
2015/yang/.winner.json
|
||||
2015/yang/2015_yang.tar.bz2
|
||||
2015/yang/index.html
|
||||
2018/algmyr/.winner.json
|
||||
2018/algmyr/2018_algmyr.tar.bz2
|
||||
2018/algmyr/index.html
|
||||
2018/anderson/.winner.json
|
||||
2018/anderson/2018_anderson.tar.bz2
|
||||
2018/anderson/index.html
|
||||
2018/bellard/.winner.json
|
||||
2018/bellard/2018_bellard.tar.bz2
|
||||
2018/bellard/index.html
|
||||
2018/burton1/.winner.json
|
||||
2018/burton1/2018_burton1.tar.bz2
|
||||
2018/burton1/index.html
|
||||
2018/burton2/.winner.json
|
||||
2018/burton2/2018_burton2.tar.bz2
|
||||
2018/burton2/discrepancies.html
|
||||
2018/burton2/index.html
|
||||
2018/ciura/.winner.json
|
||||
2018/ciura/2018_ciura.tar.bz2
|
||||
2018/ciura/index.html
|
||||
2018/endoh1/.winner.json
|
||||
2018/endoh1/2018_endoh1.tar.bz2
|
||||
2018/endoh1/index.html
|
||||
2018/endoh2/.winner.json
|
||||
2018/endoh2/2018_endoh2.tar.bz2
|
||||
2018/endoh2/index.html
|
||||
2018/ferguson/.winner.json
|
||||
2018/ferguson/2018_ferguson.tar.bz2
|
||||
2018/ferguson/index.html
|
||||
2018/ferguson/rpm.html
|
||||
2018/giles/.winner.json
|
||||
2018/giles/2018_giles.tar.bz2
|
||||
2018/giles/index.html
|
||||
2018/hou/.winner.json
|
||||
2018/hou/2018_hou.tar.bz2
|
||||
2018/hou/index.html
|
||||
2018/mills/.winner.json
|
||||
2018/mills/2018_mills.tar.bz2
|
||||
2018/mills/index.html
|
||||
2018/poikola/.winner.json
|
||||
2018/poikola/2018_poikola.tar.bz2
|
||||
2018/poikola/index.html
|
||||
2018/vokes/.winner.json
|
||||
2018/vokes/2018_vokes.tar.bz2
|
||||
2018/vokes/index.html
|
||||
2018/yang/.winner.json
|
||||
2018/yang/2018_yang.tar.bz2
|
||||
2018/yang/index.html
|
||||
2019/adamovsky/.winner.json
|
||||
2019/adamovsky/2019_adamovsky.tar.bz2
|
||||
2019/adamovsky/index.html
|
||||
2019/burton/.winner.json
|
||||
2019/burton/2019_burton.tar.bz2
|
||||
2019/burton/index.html
|
||||
2019/ciura/.winner.json
|
||||
2019/ciura/2019_ciura.tar.bz2
|
||||
2019/ciura/index.html
|
||||
2019/diels-grabsch1/.winner.json
|
||||
2019/diels-grabsch1/2019_diels-grabsch1.tar.bz2
|
||||
2019/diels-grabsch1/index.html
|
||||
2019/diels-grabsch2/.winner.json
|
||||
2019/diels-grabsch2/2019_diels-grabsch2.tar.bz2
|
||||
2019/diels-grabsch2/index.html
|
||||
2019/dogon/.winner.json
|
||||
2019/dogon/2019_dogon.tar.bz2
|
||||
2019/dogon/index.html
|
||||
2019/duble/.winner.json
|
||||
2019/duble/2019_duble.tar.bz2
|
||||
2019/duble/index.html
|
||||
2019/endoh/.winner.json
|
||||
2019/endoh/2019_endoh.tar.bz2
|
||||
2019/endoh/index.html
|
||||
2019/giles/.winner.json
|
||||
2019/giles/2019_giles.tar.bz2
|
||||
2019/giles/index.html
|
||||
2019/karns/.winner.json
|
||||
2019/karns/2019_karns.tar.bz2
|
||||
2019/karns/index.html
|
||||
2019/lynn/.winner.json
|
||||
2019/lynn/2019_lynn.tar.bz2
|
||||
2019/lynn/index.html
|
||||
2019/mills/.winner.json
|
||||
2019/mills/2019_mills.tar.bz2
|
||||
2019/mills/index.html
|
||||
2019/poikola/.winner.json
|
||||
2019/poikola/2019_poikola.tar.bz2
|
||||
2019/poikola/index.html
|
||||
2019/yang/.winner.json
|
||||
2019/yang/2019_yang.tar.bz2
|
||||
2019/yang/index.html
|
||||
2020/burton/.winner.json
|
||||
2020/burton/2020_burton.tar.bz2
|
||||
2020/burton/index.html
|
||||
2020/carlini/.winner.json
|
||||
2020/carlini/2020_carlini.tar.bz2
|
||||
2020/carlini/index.html
|
||||
2020/endoh1/.winner.json
|
||||
2020/endoh1/2020_endoh1.tar.bz2
|
||||
2020/endoh1/index.html
|
||||
2020/endoh2/.winner.json
|
||||
2020/endoh2/2020_endoh2.tar.bz2
|
||||
2020/endoh2/index.html
|
||||
2020/endoh3/.winner.json
|
||||
2020/endoh3/2020_endoh3.tar.bz2
|
||||
2020/endoh3/index.html
|
||||
2020/ferguson1/.winner.json
|
||||
2020/ferguson1/2020_ferguson1.tar.bz2
|
||||
2020/ferguson1/COMPILING.html
|
||||
2020/ferguson1/HACKING.html
|
||||
2020/ferguson1/bugs.html
|
||||
2020/ferguson1/cannibalism.log.html
|
||||
2020/ferguson1/chocolate-cake.html
|
||||
2020/ferguson1/crazy.log.html
|
||||
2020/ferguson1/gameplay.html
|
||||
2020/ferguson1/index.html
|
||||
2020/ferguson1/spoilers.html
|
||||
2020/ferguson1/terminals.html
|
||||
2020/ferguson1/troubleshooting.html
|
||||
2020/ferguson2/.winner.json
|
||||
2020/ferguson2/2020_ferguson2.tar.bz2
|
||||
2020/ferguson2/index.html
|
||||
2020/giles/.winner.json
|
||||
2020/giles/2020_giles.tar.bz2
|
||||
2020/giles/index.html
|
||||
2020/kurdyukov1/.winner.json
|
||||
2020/kurdyukov1/2020_kurdyukov1.tar.bz2
|
||||
2020/kurdyukov1/index.html
|
||||
2020/kurdyukov2/.winner.json
|
||||
2020/kurdyukov2/2020_kurdyukov2.tar.bz2
|
||||
2020/kurdyukov2/index.html
|
||||
2020/kurdyukov3/.winner.json
|
||||
2020/kurdyukov3/2020_kurdyukov3.tar.bz2
|
||||
2020/kurdyukov3/index.html
|
||||
2020/kurdyukov4/.winner.json
|
||||
2020/kurdyukov4/2020_kurdyukov4.tar.bz2
|
||||
2020/kurdyukov4/index.html
|
||||
2020/otterness/.winner.json
|
||||
2020/otterness/2020_otterness.tar.bz2
|
||||
2020/otterness/index.html
|
||||
2020/tsoj/.winner.json
|
||||
2020/tsoj/2020_tsoj.tar.bz2
|
||||
2020/tsoj/index.html
|
||||
2020/yang/.winner.json
|
||||
2020/yang/2020_yang.tar.bz2
|
||||
2020/yang/index.html
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -1,229 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# fix_numbers_csv - fix the exported CSV files from numbers
|
||||
#
|
||||
# When Apple numbers exports a CSV file from manifest.numbers,
|
||||
# and exports a CSV file from missing-manifest.numbers,
|
||||
# the CSV file lines are separated by carriage returns (\015)
|
||||
# and is not terminated by a newline. This script will "correct"
|
||||
# these issues.
|
||||
#
|
||||
# XXX - This is a temporary utility that will be removed when
|
||||
# the .winner.json files are built
|
||||
|
||||
# setup
|
||||
#
|
||||
export MANIFEST_CSV="manifest.csv"
|
||||
export MISSING_MANIFEST_CSV="missing_manifest.csv"
|
||||
export FULL_MANIFEST_CSV="full_manifest.csv"
|
||||
export TMP_CSV
|
||||
|
||||
# process files that exist
|
||||
#
|
||||
for i in "$MANIFEST_CSV" "$MISSING_MANIFEST_CSV"; do
|
||||
|
||||
# process if non-empty file exists
|
||||
#
|
||||
if [[ -s $i ]]; then
|
||||
|
||||
# setup temp file
|
||||
#
|
||||
TMP_CSV="tmp.$$.$i"
|
||||
rm -f "$TMP_CSV"
|
||||
if [[ -e $TMP_CSV ]]; then
|
||||
echo "$0: ERROR: TMP_CSV cannot be removed: $TMP_CSV" 1>&2
|
||||
exit 10
|
||||
fi
|
||||
|
||||
# remove carriage returns
|
||||
#
|
||||
trap 'rm -f $TMP_CSV; exit' 0 1 2 3 15
|
||||
tr -d '\015' < "$i" > "$TMP_CSV"
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
printf "$0: ERROR: TMP_CSV: tr -d '\\\015' < %s > %s failed, error: %s\n" "$i" "$TMP_CSV" "$status" 1>&2
|
||||
exit 11
|
||||
fi
|
||||
if [[ ! -s $TMP_CSV ]]; then
|
||||
printf "$0: ERROR: TMP_CSV: tr -d '\\\015' < %s > %s produced a empty file" "$i" "$TMP_CSV" 1>&2
|
||||
exit 12
|
||||
fi
|
||||
|
||||
# sort file
|
||||
#
|
||||
sort -t, -k1,1 -k2d,2 -k3g,3 -k4d,10 "$TMP_CSV" -o "$TMP_CSV"
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
printf "$0: ERROR: sort -t, -k1,1 -k2d,2 -k3g,3 -k4d,10 %s -o %s failed, error: %s\n" "$TMP_CSV" "$TMP_CSV" "$status" 1>&2
|
||||
exit 13
|
||||
fi
|
||||
|
||||
# append newline if last line is not empty
|
||||
#
|
||||
LAST_CHAR=$(tail -c 1 "$TMP_CSV")
|
||||
if [[ -n $LAST_CHAR ]]; then
|
||||
echo "" >> "$TMP_CSV"
|
||||
fi
|
||||
|
||||
# replace CSV file if different
|
||||
#
|
||||
if ! cmp -s "$TMP_CSV" "$i"; then
|
||||
|
||||
# replace CSV file with a better formatted version
|
||||
#
|
||||
echo "$0: updating $i"
|
||||
mv -f -v "$TMP_CSV" "$i"
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: mv -f -v $TMP_CSV $i failed, error: $status" 1>&2
|
||||
exit 14
|
||||
fi
|
||||
|
||||
else
|
||||
|
||||
# CSV file is OK, remove the tmp file
|
||||
#
|
||||
rm -f "$TMP_CSV"
|
||||
if [[ -e $TMP_CSV ]]; then
|
||||
echo "$0: ERROR: TMP_CSV cannot be removed for cleanup: $TMP_CSV" 1>&2
|
||||
exit 15
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# setup the full manifest
|
||||
#
|
||||
TMP_CSV="tmp.$$.$FULL_MANIFEST_CSV"
|
||||
sed -e '/^# -/d' "$MANIFEST_CSV" "$MISSING_MANIFEST_CSV" |
|
||||
sort -u |
|
||||
sort -t, -k1,1 -k2d,2 -k3g,3 -k4d,10 > "$TMP_CSV"
|
||||
if [[ ! -s $TMP_CSV ]]; then
|
||||
echo "$0: ERROR: sorted $MANIFEST_CSV $MISSING_MANIFEST_CSV is empty" 1>&2
|
||||
exit 16
|
||||
fi
|
||||
if ! cmp -s "$TMP_CSV" "$FULL_MANIFEST_CSV"; then
|
||||
|
||||
# replace full CSV file if different
|
||||
#
|
||||
echo "$0: updating $FULL_MANIFEST_CSV"
|
||||
mv -f -v "$TMP_CSV" "$FULL_MANIFEST_CSV"
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: mv -f -v $TMP_CSV $FULL_MANIFEST_CSV failed, error: $status" 1>&2
|
||||
exit 17
|
||||
fi
|
||||
|
||||
else
|
||||
|
||||
# fill CSV file is OK, remove the tmp file
|
||||
#
|
||||
rm -f "$TMP_CSV"
|
||||
if [[ -e $TMP_CSV ]]; then
|
||||
echo "$0: ERROR: TMP_CSV cannot be removed for cleanup: $TMP_CSV" 1>&2
|
||||
exit 18
|
||||
fi
|
||||
fi
|
||||
|
||||
# build required file list
|
||||
#
|
||||
export REQUIRED_FILE_LIST="file_list.required.txt"
|
||||
export TMP_FILE="tmp.$$.$REQUIRED_FILE_LIST"
|
||||
trap 'rm -f $TMP_FILE; exit' 0 1 2 3 15
|
||||
awk -F, '$1 !~ "^#" && $5 == "null" { print $1 "/" $2 "/" $4; }' "$FULL_MANIFEST_CSV" | sort -t/ > "$TMP_FILE"
|
||||
if [[ ! -s $TMP_FILE ]]; then
|
||||
echo "$0: ERROR: TMP_FILE, for required file list, is empty: $TMP_CSV" 1>&2
|
||||
exit 19
|
||||
fi
|
||||
if ! cmp -s "$TMP_FILE" "$REQUIRED_FILE_LIST"; then
|
||||
|
||||
# replace required file
|
||||
#
|
||||
echo "$0: updating $REQUIRED_FILE_LIST"
|
||||
mv -f -v "$TMP_FILE" "$REQUIRED_FILE_LIST"
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: mv -f -v $TMP_FILE $REQUIRED_FILE_LIST failed, error: $status" 1>&2
|
||||
exit 20
|
||||
fi
|
||||
|
||||
else
|
||||
|
||||
# required file list is OK, remove the tmp file
|
||||
#
|
||||
rm -f "$TMP_FILE"
|
||||
if [[ -e $TMP_CSV ]]; then
|
||||
echo "$0: ERROR: TMP_FILE cannot be removed for cleanup: $TMP_FILE" 1>&2
|
||||
exit 21
|
||||
fi
|
||||
fi
|
||||
|
||||
# build the built file list
|
||||
#
|
||||
export BUILT_FILE_LIST="file_list.built.txt"
|
||||
export TMP_FILE="tmp.$$.$BUILT_FILE_LIST"
|
||||
trap 'rm -f $TMP_FILE; exit' 0 1 2 3 15
|
||||
awk -F, '$1 !~ "^#" && $5 != "null" { print $1 "/" $2 "/" $4; }' "$FULL_MANIFEST_CSV" | sort -t/ > "$TMP_FILE"
|
||||
if [[ ! -s $TMP_FILE ]]; then
|
||||
echo "$0: ERROR: TMP_FILE, for built file list, is empty: $TMP_CSV" 1>&2
|
||||
exit 22
|
||||
fi
|
||||
if ! cmp -s "$TMP_FILE" "$BUILT_FILE_LIST"; then
|
||||
|
||||
# replace built file
|
||||
#
|
||||
echo "$0: updating $BUILT_FILE_LIST"
|
||||
mv -f -v "$TMP_FILE" "$BUILT_FILE_LIST"
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: mv -f -v $TMP_FILE $BUILT_FILE_LIST failed, error: $status" 1>&2
|
||||
exit 23
|
||||
fi
|
||||
|
||||
else
|
||||
|
||||
# built file list is OK, remove the tmp file
|
||||
#
|
||||
rm -f "$TMP_FILE"
|
||||
if [[ -e $TMP_CSV ]]; then
|
||||
echo "$0: ERROR: TMP_FILE cannot be removed for cleanup: $TMP_FILE" 1>&2
|
||||
exit 24
|
||||
fi
|
||||
fi
|
||||
|
||||
# build full_manifest file list
|
||||
#
|
||||
export FULL_MANIFEST_LIST="file_list.full_manifest.txt"
|
||||
export TMP_FILE="tmp.$$.$BUILT_FILE_LIST"
|
||||
trap 'rm -f $TMP_FILE; exit' 0 1 2 3 15
|
||||
cat "$REQUIRED_FILE_LIST" "$BUILT_FILE_LIST" | sort -t/ > "$TMP_FILE"
|
||||
if [[ ! -s $TMP_FILE ]]; then
|
||||
echo "$0: ERROR: TMP_FILE, for full_manifest file list, is empty: $TMP_CSV" 1>&2
|
||||
exit 25
|
||||
fi
|
||||
if ! cmp -s "$TMP_FILE" "$FULL_MANIFEST_LIST"; then
|
||||
|
||||
# replace full_manifest file
|
||||
#
|
||||
echo "$0: updating $FULL_MANIFEST_LIST"
|
||||
mv -f -v "$TMP_FILE" "$FULL_MANIFEST_LIST"
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: mv -f -v $TMP_FILE $FULL_MANIFEST_LIST failed, error: $status" 1>&2
|
||||
exit 26
|
||||
fi
|
||||
|
||||
else
|
||||
|
||||
# full_manifest file list is OK, remove the tmp file
|
||||
#
|
||||
rm -f "$TMP_FILE"
|
||||
if [[ -e $TMP_CSV ]]; then
|
||||
echo "$0: ERROR: TMP_FILE cannot be removed for cleanup: $TMP_FILE" 1>&2
|
||||
exit 27
|
||||
fi
|
||||
fi
|
||||
|
||||
# All Done!!! All Done!!! -- Jessica Noll, Age 2
|
||||
#
|
||||
exit 0
|
||||
File diff suppressed because it is too large.
Load diff
Binary file not shown.
@@ -1,565 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# gen_author_json - generate author/author_handle.json files
|
||||
#
|
||||
# Generate the initial contents of the author/author_handle.json using
|
||||
# tmp/author_handle.txt and tmp/author.csv and tmp/author-wins.csv.
|
||||
#
|
||||
# XXX - This is a temporary utility that will be replaced when
|
||||
# the .entry.json files are built.
|
||||
#
|
||||
# Copyright (c) 2023,2024 by Landon Curt Noll. All Rights Reserved.
|
||||
#
|
||||
# Permission to use, copy, modify, and distribute this software and
|
||||
# its documentation for any purpose and without fee is hereby granted,
|
||||
# provided that the above copyright, this permission notice and text
|
||||
# this comment, and the disclaimer below appear in all of the following:
|
||||
#
|
||||
# supporting documentation
|
||||
# source copies
|
||||
# source works derived from this source
|
||||
# binaries derived from this source or from derived source
|
||||
#
|
||||
# LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
||||
# EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
||||
# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
# chongo (Landon Curt Noll, http://www.isthe.com/chongo/index.html) /\oo/\
|
||||
#
|
||||
# Share and enjoy! :-)
|
||||
|
||||
# setup
|
||||
#
|
||||
export VERSION="1.1 2024-03-04"
|
||||
NAME=$(basename "$0"); export NAME
|
||||
export JSTRENCODE="../../mkiocccentry/jparse/jstrencode"
|
||||
export LOCATION="../../mkiocccentry/soup/location"
|
||||
#
|
||||
export V_FLAG=0
|
||||
|
||||
# usage
|
||||
#
|
||||
export USAGE="usage: $0 [-h] [-v level] [-V] author_handle.txt author.csv author-wins.csv author_dir
|
||||
|
||||
-h print help message and exit
|
||||
-v level set verbosity level (def level: $V_FLAG)
|
||||
-V print version string and exit
|
||||
|
||||
-t jstrencode=path path of jstrencode utility (def: ../../mkiocccentry/jparse/jstrencode)
|
||||
-t location=path path of location utility (def: ../../mkiocccentry/soup/location)
|
||||
|
||||
author_handle.txt author handle names, one per line
|
||||
author.csv CSV of information about each author
|
||||
author-wins.csv CSV showing wins for each author
|
||||
author_dir directory to create with author_handle.json files
|
||||
|
||||
Exit codes:
|
||||
0 all OK
|
||||
2 -h and help string printed or -V and version string printed
|
||||
3 command line error
|
||||
4 missing file (author_handle.txt, author.csv, author-wins.csv_
|
||||
5 author_dir already exists or cannot be created
|
||||
6 cannot find critical executable tool
|
||||
>= 10 internal error
|
||||
|
||||
$NAME version: $VERSION"
|
||||
|
||||
# parse command line
|
||||
#
|
||||
while getopts :hv:Vt: flag; do
|
||||
case "$flag" in
|
||||
h) echo "$USAGE"
|
||||
exit 2
|
||||
;;
|
||||
v) V_FLAG="$OPTARG"
|
||||
;;
|
||||
V) echo "$VERSION"
|
||||
exit 2
|
||||
;;
|
||||
t) case "$OPTARG" in
|
||||
jstrencode=*)
|
||||
JSTRENCODE=${OPTIND##jstrencode=}
|
||||
;;
|
||||
location=*)
|
||||
LOCATION=${OPTIND##location=}
|
||||
;;
|
||||
*=*)
|
||||
echo "$0: ERROR: -t tool=path is unknown" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
;;
|
||||
*) echo "$0: ERROR: -t optarg must be of the form -t tool=path" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
\?) echo "$0: ERROR: invalid option: -$OPTARG" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
:) echo "$0: ERROR: option -$OPTARG requires an argument" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
*) echo "$0: ERROR: unexpected value from getopts: $flag" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
done
|
||||
#
|
||||
# remove the options
|
||||
#
|
||||
shift $(( OPTIND - 1 ));
|
||||
#
|
||||
# verify arg count
|
||||
#
|
||||
if [[ $# -ne 4 ]]; then
|
||||
echo "$0: ERROR: expected 4 args, found: $#" 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
fi
|
||||
#
|
||||
# parse args
|
||||
#
|
||||
export AUTHOR_HANDLE_TXT="$1"
|
||||
if [[ ! -r $AUTHOR_HANDLE_TXT ]]; then
|
||||
echo "$0: ERROR: author_handle.txt not a readable file: $AUTHOR_HANDLE_TXT"
|
||||
exit 4
|
||||
fi
|
||||
export AUTHOR_CSV="$2"
|
||||
if [[ ! -r $AUTHOR_CSV ]]; then
|
||||
echo "$0: ERROR: author.csv not a readable file: $AUTHOR_CSV"
|
||||
exit 4
|
||||
fi
|
||||
export AUTHOR_WINS="$3"
|
||||
if [[ ! -r $AUTHOR_WINS ]]; then
|
||||
echo "$0: ERROR: author-wins.csv not a readable file: $AUTHOR_WINS"
|
||||
exit 4
|
||||
fi
|
||||
export AUTHOR_DIR="$4"
|
||||
if [[ -e $AUTHOR_DIR ]]; then
|
||||
echo "$0: ERROR: author_dir exists: $AUTHOR_DIR"
|
||||
exit 4
|
||||
fi
|
||||
if [[ $V_FLAG -ge 1 ]]; then
|
||||
echo "$0: debug[1]: debug level: $V_FLAG" 1>&2
|
||||
fi
|
||||
|
||||
# form the initial author_dir
|
||||
#
|
||||
mkdir -p "$AUTHOR_DIR"
|
||||
if [[ ! -d $AUTHOR_DIR ]]; then
|
||||
echo "$0: ERROR: cannot mkdir author_dir $AUTHOR_DIR"
|
||||
exit 5
|
||||
fi
|
||||
|
||||
# verify tool paths
|
||||
#
|
||||
if [[ ! -e $JSTRENCODE ]]; then
|
||||
echo "$0: ERROR: jstrencode does not exist: $JSTRENCODE" 1>&2
|
||||
exit 6
|
||||
fi
|
||||
if [[ ! -f $JSTRENCODE ]]; then
|
||||
echo "$0: ERROR: jstrencode is not a regular file: $JSTRENCODE" 1>&2
|
||||
exit 6
|
||||
fi
|
||||
if [[ ! -x $JSTRENCODE ]]; then
|
||||
echo "$0: ERROR: jstrencode not executable: $JSTRENCODE" 1>&2
|
||||
exit 6
|
||||
fi
|
||||
if [[ ! -e $LOCATION ]]; then
|
||||
echo "$0: ERROR: location does not exist: $LOCATION" 1>&2
|
||||
exit 6
|
||||
fi
|
||||
if [[ ! -f $LOCATION ]]; then
|
||||
echo "$0: ERROR: location is not a regular file: $LOCATION" 1>&2
|
||||
exit 6
|
||||
fi
|
||||
if [[ ! -x $LOCATION ]]; then
|
||||
echo "$0: ERROR: location not executable: $LOCATION" 1>&2
|
||||
exit 6
|
||||
fi
|
||||
|
||||
# make is easier to process CSV files
|
||||
#
|
||||
IFS="$IFS,"
|
||||
|
||||
# process each author handle
|
||||
#
|
||||
grep -v '^#' "$AUTHOR_HANDLE_TXT" | while read -r AUTHOR_HANDLE; do
|
||||
|
||||
# firewall - must be unique author handle
|
||||
#
|
||||
AUTHOR_HANDLE_JSON="$AUTHOR_DIR/$AUTHOR_HANDLE.json"
|
||||
export AUTHOR_HANDLE_JSON
|
||||
if [[ -e $AUTHOR_HANDLE_JSON ]]; then
|
||||
echo "$0: ERROR: AUTHOR_HANDLE.json file already exists: $AUTHOR_HANDLE_JSON" 1>&2
|
||||
exit 10
|
||||
fi
|
||||
if [[ $V_FLAG -ge 3 ]]; then
|
||||
echo "$0: debug[3]: processing author handle: $AUTHOR_HANDLE" 1>&2
|
||||
fi
|
||||
touch "$AUTHOR_HANDLE_JSON"
|
||||
if [[ ! -e $AUTHOR_HANDLE_JSON ]]; then
|
||||
echo "$0: ERROR: cannot create AUTHOR_HANDLE.json file: $AUTHOR_HANDLE_JSON" 1>&2
|
||||
exit 11
|
||||
fi
|
||||
|
||||
# firewall - must have 1 and only 1 line in author.csv
|
||||
#
|
||||
FOUND_AUTHOR_CSV_COUNT=$(grep -v '^#' "$AUTHOR_CSV" 2>/dev/null | grep -c "^[^,]*,[^,]*,$AUTHOR_HANDLE," 2>/dev/null)
|
||||
if [[ $FOUND_AUTHOR_CSV_COUNT -ne 1 ]]; then
|
||||
echo "$0: ERROR: expected to find one entry for $AUTHOR_HANDLE in $AUTHOR_CSV, found: $FOUND_AUTHOR_CSV_COUNT" 1>&2
|
||||
exit 12
|
||||
fi
|
||||
if [[ $V_FLAG -ge 7 ]]; then
|
||||
echo "$0: debug[7]: grep -v '^#' \"$AUTHOR_CSV\" 2>/dev/null | grep -c \"^[^,]*,[^,]*,$AUTHOR_HANDLE,\" 2>/dev/null" 1>&2
|
||||
fi
|
||||
|
||||
# firewall - must have 1 and only 1 line in author-wins.csv
|
||||
#
|
||||
FOUND_AUTHOR_WINS_COUNT=$(grep -v '^#' "$AUTHOR_WINS" 2>/dev/null | grep -c "^$AUTHOR_HANDLE," 2>/dev/null)
|
||||
if [[ $FOUND_AUTHOR_WINS_COUNT -ne 1 ]]; then
|
||||
echo "$0: ERROR: expected to find one entry for $AUTHOR_HANDLE in $AUTHOR_WINS, found: $FOUND_AUTHOR_WINS_COUNT" 1>&2
|
||||
exit 13
|
||||
fi
|
||||
if [[ $V_FLAG -ge 7 ]]; then
|
||||
echo "$0: debug[7]: grep -v '^#' \"$AUTHOR_WINS\" 2>/dev/null | grep -c \"^$AUTHOR_HANDLE,\" 2>/dev/null" 1>&2
|
||||
fi
|
||||
|
||||
# obtain their author.csv data for this author handle
|
||||
#
|
||||
# The format of author.csv is:
|
||||
#
|
||||
# # sort_word,name,author_handle,url,email,location_code,deprecated_twitter,mastodon,alternate_url,
|
||||
#
|
||||
# 0: lower case sort word
|
||||
# 1: name
|
||||
# 2: author_handle
|
||||
# 3: url
|
||||
# 4: email address
|
||||
# 5: location ISO 3166 code
|
||||
# 6: deprecated twitter handle
|
||||
# 7: mastodon handle
|
||||
# 8: alternate url
|
||||
#
|
||||
grep -v '^#' "$AUTHOR_CSV" 2>/dev/null | grep "^[^,]*,[^,]*,$AUTHOR_HANDLE," 2>/dev/null |
|
||||
while IFS="," read -r SORT_WORD NAME AUTHOR_HANDLE_FROM_AUTHOR_CSV URL EMAIL LOCATION_CODE DEPRECATED_TWITTER \
|
||||
MASTODON ALTERNATE_URL EXTRA; do
|
||||
|
||||
# parse CSV values
|
||||
#
|
||||
export SORT_WORD NAME AUTHOR_HANDLE_FROM_AUTHOR_CSV URL EMAIL LOCATION_CODE DEPRECATED_TWITTER
|
||||
export MASTODON ALTERNATE_URL EXTRA
|
||||
if [[ $V_FLAG -ge 9 ]]; then
|
||||
echo "$0: debug[9]: SORT_WORD: $SORT_WORD"
|
||||
echo "$0: debug[7]: NAME: $NAME"
|
||||
echo "$0: debug[7]: author_handle: $AUTHOR_HANDLE_FROM_AUTHOR_CSV"
|
||||
echo "$0: debug[7]: URL: $URL"
|
||||
echo "$0: debug[7]: EMAIL: $EMAIL"
|
||||
echo "$0: debug[7]: LOCATION_CODE: $LOCATION_CODE"
|
||||
echo "$0: debug[7]: DEPRECATED_TWITTER: $DEPRECATED_TWITTER"
|
||||
echo "$0: debug[7]: MASTODON: $MASTODON"
|
||||
echo "$0: debug[7]: ALTERNATE_URL: $ALTERNATE_URL"
|
||||
echo "$0: debug[7]: EXTRA: $EXTRA"
|
||||
fi
|
||||
if [[ -z $SORT_WORD ]]; then
|
||||
echo "$0: ERROR: cannot find SORT_WORD for author handle $AUTHOR_HANDLE In $AUTHOR_CSV" 1>&2
|
||||
exit 14
|
||||
fi
|
||||
if [[ -z $NAME ]]; then
|
||||
echo "$0: ERROR: cannot find NAME for author handle $AUTHOR_HANDLE in $AUTHOR_CSV" 1>&2
|
||||
exit 15
|
||||
fi
|
||||
if [[ -z $AUTHOR_HANDLE_FROM_AUTHOR_CSV ]]; then
|
||||
echo "$0: ERROR: cannot find author handle $AUTHOR_HANDLE in $AUTHOR_CSV" 1>&2
|
||||
exit 16
|
||||
fi
|
||||
if [[ -z $URL ]]; then
|
||||
echo "$0: ERROR: cannot find URL for author handle $AUTHOR_HANDLE in $AUTHOR_CSV" 1>&2
|
||||
exit 17
|
||||
fi
|
||||
if [[ -z $EMAIL ]]; then
|
||||
echo "$0: ERROR: cannot find EMAIL for author handle $AUTHOR_HANDLE in $AUTHOR_CSV" 1>&2
|
||||
exit 18
|
||||
fi
|
||||
if [[ -z $LOCATION_CODE ]]; then
|
||||
echo "$0: ERROR: cannot find LOCATION_CODE for author handle $AUTHOR_HANDLE in $AUTHOR_CSV" 1>&2
|
||||
exit 19
|
||||
fi
|
||||
if [[ -z $DEPRECATED_TWITTER ]]; then
|
||||
echo "$0: ERROR: cannot find DEPRECATED_TWITTER for author handle $AUTHOR_HANDLE in $AUTHOR_CSV" 1>&2
|
||||
exit 20
|
||||
fi
|
||||
if [[ -z $MASTODON ]]; then
|
||||
echo "$0: ERROR: cannot find MASTODON for author handle $AUTHOR_HANDLE in $AUTHOR_CSV" 1>&2
|
||||
exit 21
|
||||
fi
|
||||
if [[ -z $ALTERNATE_URL ]]; then
|
||||
echo "$0: ERROR: cannot find ALTERNATE_URL for author handle $AUTHOR_HANDLE in $AUTHOR_CSV" 1>&2
|
||||
exit 22
|
||||
fi
|
||||
if [[ -n $EXTRA ]]; then
|
||||
echo "$0: ERROR: found unexpected data for author handle $AUTHOR_HANDLE in $AUTHOR_CSV" 1>&2
|
||||
exit 23
|
||||
fi
|
||||
|
||||
# convert "null" to empty values for fields that can use them, object to null for fields that do not want them
|
||||
#
|
||||
if [[ $SORT_WORD = "null" ]]; then
|
||||
echo "$0: ERROR: found null SORT_WORD for author handle $AUTHOR_HANDLE in $AUTHOR_CSV" 1>&2
|
||||
exit 24
|
||||
fi
|
||||
if [[ $NAME = "null" ]]; then
|
||||
echo "$0: ERROR: found null NAME for author handle $AUTHOR_HANDLE in $AUTHOR_CSV" 1>&2
|
||||
exit 25
|
||||
fi
|
||||
if [[ $AUTHOR_HANDLE_FROM_AUTHOR_CSV = "null" ]]; then
|
||||
echo "$0: ERROR: found null author handle $AUTHOR_HANDLE in $AUTHOR_CSV" 1>&2
|
||||
exit 26
|
||||
fi
|
||||
if [[ $LOCATION_CODE = "null" ]]; then
|
||||
LOCATION_CODE=""
|
||||
fi
|
||||
if [[ $DEPRECATED_TWITTER = "null" ]]; then
|
||||
DEPRECATED_TWITTER=""
|
||||
fi
|
||||
|
||||
# verify that the AUTHOR_HANDLE_FROM_AUTHOR_CSV from the AUTHOR_CSV file matches the author handle
|
||||
#
|
||||
if [[ $AUTHOR_HANDLE != "$AUTHOR_HANDLE_FROM_AUTHOR_CSV" ]]; then
|
||||
echo "$0: ERROR: author handle: $AUTHOR_HANDLE_FROM_AUTHOR_CSV mismatch for author handle $AUTHOR_HANDLE in $AUTHOR_CSV" 1>&2
|
||||
exit 27
|
||||
fi
|
||||
|
||||
# if location code is non-empty, verify it is valid by obtaining the location name
|
||||
#
|
||||
export LOCATION_NAME=""
|
||||
if [[ -n $LOCATION_CODE ]]; then
|
||||
LOCATION_NAME=$("$LOCATION" -- "$LOCATION_CODE" 2>/dev/null)
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: LOCATION_CODE: $LOCATION_CODE invalid for for author handle $AUTHOR_HANDLE in $AUTHOR_CSV" 1>&2
|
||||
exit 28
|
||||
fi
|
||||
fi
|
||||
|
||||
# form the mastodon url from the mastodon handle
|
||||
#
|
||||
export MASTODON_URL=""
|
||||
if [[ -n $MASTODON ]]; then
|
||||
# verify mastodon handle is of the form @user@server
|
||||
#
|
||||
case "$MASTODON" in
|
||||
null)
|
||||
MASTODON_URL="null";
|
||||
;;
|
||||
@*@*)
|
||||
AT_MASTODON_USER=${MASTODON%@*}
|
||||
if [[ -z $AT_MASTODON_USER ]]; then
|
||||
echo "$0: ERROR: failed to parse @user in MASTODON: $MASTODON is"
|
||||
"for author handle $AUTHOR_HANDLE in $AUTHOR_CSV" 1>&2
|
||||
exit 29
|
||||
fi
|
||||
MASTODON_SERVER=${MASTODON##*@}
|
||||
if [[ -z $MASTODON_SERVER ]]; then
|
||||
echo "$0: ERROR: failed to extract server from MASTODON: $MASTODON is"
|
||||
"for author handle $AUTHOR_HANDLE in $AUTHOR_CSV" 1>&2
|
||||
exit 30
|
||||
fi
|
||||
MASTODON_URL="https://$MASTODON_SERVER/$AT_MASTODON_USER"
|
||||
;;
|
||||
*) echo "$0: ERROR: MASTODON: $MASTODON is not of the form @user@server"
|
||||
"for author handle $AUTHOR_HANDLE in $AUTHOR_CSV" 1>&2
|
||||
exit 31
|
||||
esac
|
||||
fi
|
||||
|
||||
# for AUTHOR_HANDLE_JSON, we need to translate strings
|
||||
#
|
||||
SORT_WORD=$("$JSTRENCODE" -n -- "$SORT_WORD" 2>/dev/null)
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: failed to JSON encode SORT_WORD for author handle $AUTHOR_HANDLE in $AUTHOR_CSV" 1>&2
|
||||
exit 32
|
||||
fi
|
||||
NAME=$("$JSTRENCODE" -n -- "$NAME" 2>/dev/null)
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: failed to JSON encode NAME for author handle $AUTHOR_HANDLE in $AUTHOR_CSV" 1>&2
|
||||
exit 33
|
||||
fi
|
||||
AUTHOR_HANDLE_FROM_AUTHOR_CSV=$("$JSTRENCODE" -n -- "$AUTHOR_HANDLE_FROM_AUTHOR_CSV" 2>/dev/null)
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: failed to JSON encode for author handle $AUTHOR_HANDLE in $AUTHOR_CSV" 1>&2
|
||||
exit 34
|
||||
fi
|
||||
URL=$("$JSTRENCODE" -n -- "$URL" 2>/dev/null)
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: failed to JSON encode URL for author handle $AUTHOR_HANDLE in $AUTHOR_CSV" 1>&2
|
||||
exit 35
|
||||
fi
|
||||
EMAIL=$("$JSTRENCODE" -n -- "$EMAIL" 2>/dev/null)
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: failed to JSON encode EMAIL for author handle $AUTHOR_HANDLE in $AUTHOR_CSV" 1>&2
|
||||
exit 36
|
||||
fi
|
||||
LOCATION_CODE=$("$JSTRENCODE" -n -- "$LOCATION_CODE" 2>/dev/null)
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: failed to JSON encode LOCATION_CODE for author handle $AUTHOR_HANDLE in $AUTHOR_CSV" 1>&2
|
||||
exit 37
|
||||
fi
|
||||
LOCATION_NAME=$("$JSTRENCODE" -n -- "$LOCATION_NAME" 2>/dev/null)
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: failed to JSON encode LOCATION_NAME for author handle $AUTHOR_HANDLE in $AUTHOR_CSV" 1>&2
|
||||
exit 38
|
||||
fi
|
||||
DEPRECATED_TWITTER=$("$JSTRENCODE" -n -- "$DEPRECATED_TWITTER" 2>/dev/null)
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: failed to JSON encode DEPRECATED_TWITTER for author handle $AUTHOR_HANDLE in $AUTHOR_CSV" 1>&2
|
||||
exit 39
|
||||
fi
|
||||
MASTODON=$("$JSTRENCODE" -n -- "$MASTODON" 2>/dev/null)
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: failed to JSON encode MASTODON for author handle $AUTHOR_HANDLE in $AUTHOR_CSV" 1>&2
|
||||
exit 40
|
||||
fi
|
||||
MASTODON_URL=$("$JSTRENCODE" -n -- "$MASTODON_URL" 2>/dev/null)
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: failed to JSON encode MASTODON_URL for author handle $AUTHOR_HANDLE in $AUTHOR_CSV" 1>&2
|
||||
exit 41
|
||||
fi
|
||||
ALTERNATE_URL=$("$JSTRENCODE" -n -- "$ALTERNATE_URL" 2>/dev/null)
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: failed to JSON encode ALTERNATE_URL for author handle $AUTHOR_HANDLE in $AUTHOR_CSV" 1>&2
|
||||
exit 42
|
||||
fi
|
||||
|
||||
# determine the winning entry set for the author handle
|
||||
#
|
||||
WINS=$(grep -v '^#' "$AUTHOR_WINS" 2>/dev/null |
|
||||
grep "^$AUTHOR_HANDLE," 2>/dev/null |
|
||||
sed -e "s/^$AUTHOR_HANDLE,//" -e "s/,$//")
|
||||
|
||||
# verify that the author handle from the AUTHOR_WINS has at least 1 win
|
||||
#
|
||||
if [[ -z $WINS ]]; then
|
||||
echo "$0: ERROR: author handle $AUTHOR_HANDLE as no win CSV fields in $AUTHOR_WINS" 1>&2
|
||||
exit 43
|
||||
fi
|
||||
if [[ $V_FLAG -ge 5 ]]; then
|
||||
echo "$0: debug[5]: author handle $AUTHOR_HANDLE wins: $WINS" 1>&2
|
||||
fi
|
||||
|
||||
# now that we have all of the data validated write to the AUTHOR_HANDLE_JSON file
|
||||
#
|
||||
(
|
||||
|
||||
# print the start of the AUTHOR_HANDLE_JSON file
|
||||
#
|
||||
echo '{'
|
||||
echo ' "no_comment" : "mandatory comment: because comments were removed from the original JSON spec",'
|
||||
echo ' "author_JSON_format_version" : "1.1 2024-02-11",'
|
||||
|
||||
# print author handle related JSON members from AUTHOR_CSV
|
||||
#
|
||||
echo ' "author_handle" : "'"$AUTHOR_HANDLE"'",'
|
||||
echo ' "full_name" : "'"$NAME"'",'
|
||||
echo ' "sort_word" : "'"$SORT_WORD"'",'
|
||||
if [[ $LOCATION_CODE == null || -z $LOCATION_CODE ]]; then
|
||||
echo ' "location_code" : null,'
|
||||
else
|
||||
echo ' "location_code" : "'"$LOCATION_CODE"'",'
|
||||
fi
|
||||
if [[ $EMAIL == null || -z $EMAIL ]]; then
|
||||
echo ' "email" : null,'
|
||||
else
|
||||
echo ' "email" : "'"$EMAIL"'",'
|
||||
fi
|
||||
if [[ $URL == null || -z $URL ]]; then
|
||||
echo ' "url" : null,'
|
||||
else
|
||||
echo ' "url" : "'"$URL"'",'
|
||||
fi
|
||||
if [[ $ALTERNATE_URL == null || -z $ALTERNATE_URL ]]; then
|
||||
echo ' "alt_url" : null,'
|
||||
else
|
||||
echo ' "alt_url" : "'"$ALTERNATE_URL"'",'
|
||||
fi
|
||||
if [[ $DEPRECATED_TWITTER == null || -z $DEPRECATED_TWITTER ]]; then
|
||||
echo ' "deprecated_twitter_handle" : null,'
|
||||
else
|
||||
echo ' "deprecated_twitter_handle" : "'"$DEPRECATED_TWITTER"'",'
|
||||
fi
|
||||
if [[ $MASTODON == null || -z $MASTODON ]]; then
|
||||
echo ' "mastodon" : null,'
|
||||
else
|
||||
echo ' "mastodon" : "'"$MASTODON"'",'
|
||||
fi
|
||||
if [[ $MASTODON_URL == null || -z $MASTODON_URL ]]; then
|
||||
echo ' "mastodon_url" : null,'
|
||||
else
|
||||
echo ' "mastodon_url" : "'"$MASTODON_URL"'",'
|
||||
fi
|
||||
echo ' "github" : null,'
|
||||
echo ' "affiliation" : null,'
|
||||
|
||||
# print the wins
|
||||
#
|
||||
echo ' "winning_entry_set" : ['
|
||||
WIN_COUNT=$(echo "$WINS" | sed -e 's/,/\n/g' | wc -l)
|
||||
export WIN_COUNT
|
||||
export WIN_NUMBER=0
|
||||
echo "$WINS" | sed -e 's/,/\n/g' | while read -r ENTRY_ID; do
|
||||
((++WIN_NUMBER))
|
||||
if [[ $WIN_NUMBER -lt $WIN_COUNT ]]; then
|
||||
echo ' { "entry_id" : "'"$ENTRY_ID"'" },'
|
||||
else
|
||||
echo ' { "entry_id" : "'"$ENTRY_ID"'" }'
|
||||
fi
|
||||
done
|
||||
echo ' ]'
|
||||
|
||||
# print the end of the AUTHOR_HANDLE_JSON file
|
||||
#
|
||||
echo '}'
|
||||
) > "$AUTHOR_HANDLE_JSON"
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: failed to write $AUTHOR_HANDLE_JSON: error code: $status" 1>&2
|
||||
exit 44
|
||||
fi
|
||||
|
||||
# make the AUTHOR_HANDLE_JSON file read only
|
||||
#
|
||||
chmod 0444 "$AUTHOR_HANDLE_JSON"
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: chmod 0444 $AUTHOR_HANDLE_JSON: error code: $status" 1>&2
|
||||
exit 45
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
# All Done!!! All Done!!! -- Jessica Noll, Age 2
|
||||
#
|
||||
exit 0
|
||||
@@ -1,163 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# gen_file_list.found.sh - generate tmp/file_list.found.txt for entry directories under a year
|
||||
#
|
||||
# XXX - This is a temporary utility that will be replaced when
|
||||
# the .winner.json files are built
|
||||
#
|
||||
# Copyright (c) 2023 by Landon Curt Noll. All Rights Reserved.
|
||||
#
|
||||
# Permission to use, copy, modify, and distribute this software and
|
||||
# its documentation for any purpose and without fee is hereby granted,
|
||||
# provided that the above copyright, this permission notice and text
|
||||
# this comment, and the disclaimer below appear in all of the following:
|
||||
#
|
||||
# supporting documentation
|
||||
# source copies
|
||||
# source works derived from this source
|
||||
# binaries derived from this source or from derived source
|
||||
#
|
||||
# LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
||||
# EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
||||
# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
# chongo (Landon Curt Noll, http://www.isthe.com/chongo/index.html) /\oo/\
|
||||
#
|
||||
# Share and enjoy! :-)
|
||||
|
||||
# setup
|
||||
#
|
||||
export VERSION="1.0 2023-10-26"
|
||||
NAME=$(basename "$0"); export NAME
|
||||
TOPDIR=".."
|
||||
#
|
||||
export V_FLAG=0
|
||||
|
||||
# usage
|
||||
#
|
||||
export USAGE="usage: $0 [-h] [-v level] [-V] [-t topdir]
|
||||
|
||||
-h print help message and exit
|
||||
-v level set verbosity level (def level: $V_FLAG)
|
||||
-V print version string and exit
|
||||
|
||||
-t topdir top directory under which year dirs are found (def: ..)
|
||||
|
||||
Exit codes:
|
||||
0 all OK
|
||||
2 -h and help string printed or -V and version string printed
|
||||
3 command line error
|
||||
>= 10 internal error
|
||||
|
||||
$NAME version: $VERSION"
|
||||
|
||||
# parse command line
|
||||
#
|
||||
while getopts :hv:Vt: flag; do
|
||||
case "$flag" in
|
||||
h) echo "$USAGE"
|
||||
exit 2
|
||||
;;
|
||||
v) V_FLAG="$OPTARG"
|
||||
;;
|
||||
V) echo "$VERSION"
|
||||
exit 2
|
||||
;;
|
||||
t) TOPDIR="$OPTARG"
|
||||
;;
|
||||
\?) echo "$0: ERROR: invalid option: -$OPTARG" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
:) echo "$0: ERROR: option -$OPTARG requires an argument" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
*) echo "$0: ERROR: unexpected value from getopts: $flag" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
done
|
||||
#
|
||||
# remove the options
|
||||
#
|
||||
shift $(( OPTIND - 1 ));
|
||||
#
|
||||
# verify arg count
|
||||
#
|
||||
if [[ $# -ne 0 ]]; then
|
||||
echo "$0: ERROR: expected 0 args, found: $#" 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
fi
|
||||
#
|
||||
# verify TOPDIR
|
||||
#
|
||||
if [[ -z $TOPDIR ]]; then
|
||||
echo "$0: ERROR: TOPDIR is empty" 1>&2
|
||||
exit 3
|
||||
fi
|
||||
if [[ ! -d $TOPDIR ]]; then
|
||||
echo "$0: ERROR: TOPDIR: $TOPDIR is not directory" 1>&2
|
||||
exit 3
|
||||
fi
|
||||
if [[ ! -d $TOPDIR/1984 ]]; then
|
||||
echo "$0: ERROR: TOPDIR: $TOPDIR is missing the 1984 sub-directory" 1>&2
|
||||
exit 3
|
||||
fi
|
||||
if [[ ! -d $TOPDIR/tmp ]]; then
|
||||
echo "$0: ERROR: TOPDIR: $TOPDIR is missing the tmp sub-directory" 1>&2
|
||||
exit 3
|
||||
fi
|
||||
if [[ ! -f $TOPDIR/Makefile ]]; then
|
||||
echo "$0: ERROR: TOPDIR: $TOPDIR is missing the top level Makefile" 1>&2
|
||||
exit 3
|
||||
fi
|
||||
|
||||
# move to TOPDIR
|
||||
#
|
||||
cd "$TOPDIR" || echo "$0: ERROR: cd $TOPDIR failed, error code: $status" 1>&2 || exit 10
|
||||
export FILE_LIST="tmp/file_list.found.txt"
|
||||
|
||||
# make clobber
|
||||
#
|
||||
make clobber >/dev/null 2>&1
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: make clobber failed, error code: $status" 1>&2
|
||||
exit 11
|
||||
fi
|
||||
|
||||
# find files under 4 character dirs
|
||||
#
|
||||
TMPFILE="tmp/tmp.file_list.found.txt.$$"
|
||||
trap 'rm -f $TMPFILE; exit' 0 1 2 3 15
|
||||
find -- ???? -mindepth 2 ! -name .DS_Store -type f -print | sort -t/ > "$TMPFILE"
|
||||
if [[ ! -s $TMPFILE ]]; then
|
||||
echo "$0: ERROR: TMPFILE: $TMPFILE is empty" 1>&2
|
||||
exit 12
|
||||
fi
|
||||
if ! cmp -s "$TMPFILE" "$FILE_LIST"; then
|
||||
|
||||
# replace the file list
|
||||
#
|
||||
echo "$0: updating $FILE_LIST"
|
||||
mv -f -v "$TMPFILE" "$FILE_LIST"
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: mv -f -v $TMPFILE $FILE_LIST failed, error: $status" 1>&2
|
||||
exit 13
|
||||
fi
|
||||
fi
|
||||
|
||||
# All Done!!! All Done!!! -- Jessica Noll, Age 2
|
||||
#
|
||||
exit 0
|
||||
File diff suppressed because it is too large.
Load diff
Binary file not shown.
File diff suppressed because it is too large.
Load diff
Binary file not shown.
@@ -1,994 +0,0 @@
|
||||
# -1,All other cells (excluding year+winners_rank+winners_show) are JSON strings that must not contain commas NOR quotes NOR newlines.,,,,,,,,,
|
||||
# -2,The year cells must be JSON numbers. The winners_rank cells must be a JSON number or JSON null. The winners_show cells must be JSON booleans.,,,,,,,,,
|
||||
# -3,Empty cells are filled in with red and need to be filled in and are TBD.,,,,,,,,,
|
||||
# -4,Any cell containing null is a JSON null value. Any cell containing true or false is a JSON boolean value.,,,,,,,,,
|
||||
# year,dir,winners_rank,path,created_by,prog,filetype,ext,winners_show,display_via,winners_text
|
||||
1984,anonymous,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1984,anonymous,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1984,anonymous,300,1984_anonymous.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1984,decot,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1984,decot,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1984,decot,300,1984_decot.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1984,laman,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1984,laman,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1984,laman,300,1984_laman.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1984,mullender,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1984,mullender,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1984,mullender,300,1984_mullender.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1985,applin,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1985,applin,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1985,applin,300,1985_applin.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1985,august,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1985,august,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1985,august,300,1985_august.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1985,lycklama,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1985,lycklama,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1985,lycklama,300,1985_lycklama.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1985,shapiro,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1985,shapiro,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1985,shapiro,300,1985_shapiro.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1985,sicherman,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1985,sicherman,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1985,sicherman,300,1985_sicherman.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1986,applin,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1986,applin,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1986,applin,300,1986_applin.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1986,august,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1986,august,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1986,august,300,1986_august.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1986,bright,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1986,bright,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1986,bright,300,1986_bright.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1986,hague,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1986,hague,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1986,hague,300,1986_hague.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1986,holloway,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1986,holloway,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1986,holloway,300,1986_holloway.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1986,marshall,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1986,marshall,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1986,marshall,300,1986_marshall.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1986,pawka,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1986,pawka,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1986,pawka,300,1986_pawka.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1986,stein,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1986,stein,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1986,stein,300,1986_stein.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1986,wall,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1986,wall,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1986,wall,300,1986_wall.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1987,biggar,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1987,biggar,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1987,biggar,300,1987_biggar.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1987,heckbert,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1987,heckbert,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1987,heckbert,300,1987_heckbert.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1987,hines,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1987,hines,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1987,hines,300,1987_hines.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1987,korn,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1987,korn,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1987,korn,300,1987_korn.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1987,lievaart,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1987,lievaart,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1987,lievaart,300,1987_lievaart.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1987,wall,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1987,wall,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1987,wall,300,1987_wall.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1987,westley,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1987,westley,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1987,westley,300,1987_westley.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1988,applin,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1988,applin,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1988,applin,300,1988_applin.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1988,dale,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1988,dale,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1988,dale,300,1988_dale.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1988,isaak,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1988,isaak,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1988,isaak,300,1988_isaak.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1988,litmaath,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1988,litmaath,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1988,litmaath,300,1988_litmaath.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1988,phillipps,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1988,phillipps,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1988,phillipps,300,1988_phillipps.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1988,reddy,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1988,reddy,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1988,reddy,300,1988_reddy.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1988,robison,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1988,robison,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1988,robison,300,1988_robison.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1988,spinellis,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1988,spinellis,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1988,spinellis,300,1988_spinellis.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1988,westley,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1988,westley,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1988,westley,300,1988_westley.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1989,fubar,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1989,fubar,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1989,fubar,300,1989_fubar.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1989,jar.1,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1989,jar.1,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1989,jar.1,300,1989_jar.1.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1989,jar.2,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1989,jar.2,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1989,jar.2,300,1989_jar.2.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1989,ovdluhe,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1989,ovdluhe,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1989,ovdluhe,300,1989_ovdluhe.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1989,paul,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1989,paul,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1989,paul,300,1989_paul.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1989,robison,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1989,robison,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1989,robison,300,1989_robison.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1989,roemer,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1989,roemer,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1989,roemer,300,1989_roemer.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1989,tromp,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1989,tromp,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1989,tromp,300,1989_tromp.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1989,vanb,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1989,vanb,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1989,vanb,300,1989_vanb.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1989,westley,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1989,westley,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1989,westley,300,1989_westley.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1990,baruch,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1990,baruch,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1990,baruch,300,1990_baruch.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1990,cmills,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1990,cmills,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1990,cmills,300,1990_cmills.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1990,dds,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1990,dds,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1990,dds,300,1990_dds.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1990,dg,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1990,dg,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1990,dg,300,1990_dg.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1990,jaw,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1990,jaw,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1990,jaw,300,1990_jaw.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1990,pjr,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1990,pjr,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1990,pjr,300,1990_pjr.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1990,scjones,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1990,scjones,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1990,scjones,300,1990_scjones.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1990,stig,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1990,stig,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1990,stig,300,1990_stig.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1990,tbr,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1990,tbr,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1990,tbr,300,1990_tbr.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1990,theorem,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1990,theorem,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1990,theorem,300,1990_theorem.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1990,westley,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1990,westley,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1990,westley,300,1990_westley.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1991,ant,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1991,ant,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1991,ant,300,1991_ant.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1991,brnstnd,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1991,brnstnd,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1991,brnstnd,100,sorta.README.html,md2html,null,html,html,true,browser,SORTA language infomation
|
||||
1991,brnstnd,300,1991_brnstnd.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1991,buzzard,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1991,buzzard,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1991,buzzard,300,1991_buzzard.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1991,cdupont,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1991,cdupont,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1991,cdupont,300,1991_cdupont.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1991,davidguy,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1991,davidguy,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1991,davidguy,300,1991_davidguy.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1991,dds,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1991,dds,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1991,dds,300,1991_dds.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1991,fine,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1991,fine,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1991,fine,300,1991_fine.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1991,rince,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1991,rince,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1991,rince,300,1991_rince.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1991,westley,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1991,westley,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1991,westley,300,1991_westley.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1992,adrian,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1992,adrian,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1992,adrian,300,1992_adrian.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1992,albert,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1992,albert,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1992,albert,300,1992_albert.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1992,ant,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1992,ant,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1992,ant,300,1992_ant.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1992,buzzard.1,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1992,buzzard.1,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1992,buzzard.1,300,1992_buzzard.1.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1992,buzzard.2,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1992,buzzard.2,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1992,buzzard.2,100,buzzard.2.README.html,md2html,null,html,html,true,browser,author description of files
|
||||
1992,buzzard.2,300,1992_buzzard.2.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1992,gson,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1992,gson,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1992,gson,300,1992_gson.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1992,imc,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1992,imc,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1992,imc,300,1992_imc.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1992,kivinen,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1992,kivinen,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1992,kivinen,300,1992_kivinen.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1992,lush,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1992,lush,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1992,lush,300,1992_lush.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1992,marangon,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1992,marangon,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1992,marangon,300,1992_marangon.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1992,nathan,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1992,nathan,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1992,nathan,300,1992_nathan.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1992,vern,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1992,vern,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1992,vern,300,1992_vern.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1992,westley,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1992,westley,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1992,westley,300,1992_westley.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1993,ant,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1993,ant,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1993,ant,300,1993_ant.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1993,cmills,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1993,cmills,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1993,cmills,300,1993_cmills.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1993,dgibson,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1993,dgibson,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1993,dgibson,300,1993_dgibson.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1993,ejb,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1993,ejb,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1993,ejb,100,hanoi.html,md2html,null,html,html,true,browser,about the Towers of Hanoi puzzle
|
||||
1993,ejb,100,patience.html,md2html,null,html,html,true,browser,about the Patience puzzle
|
||||
1993,ejb,300,1993_ejb.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1993,jonth,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1993,jonth,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1993,jonth,300,1993_jonth.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1993,leo,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1993,leo,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1993,leo,300,1993_leo.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1993,lmfjyh,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1993,lmfjyh,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1993,lmfjyh,300,1993_lmfjyh.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1993,plummer,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1993,plummer,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1993,plummer,300,1993_plummer.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1993,rince,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1993,rince,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1993,rince,100,design.html,md2html,null,html,html,true,browser,implementation notes
|
||||
1993,rince,300,1993_rince.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1993,schnitzi,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1993,schnitzi,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1993,schnitzi,300,1993_schnitzi.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1993,vanb,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1993,vanb,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1993,vanb,300,1993_vanb.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1994,dodsond1,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1994,dodsond1,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1994,dodsond1,300,1994_dodsond1.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1994,dodsond2,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1994,dodsond2,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1994,dodsond2,300,1994_dodsond2.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1994,horton,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1994,horton,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1994,horton,300,1994_horton.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1994,imc,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1994,imc,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1994,imc,300,1994_imc.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1994,ldb,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1994,ldb,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1994,ldb,300,1994_ldb.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1994,schnitzi,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1994,schnitzi,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1994,schnitzi,300,1994_schnitzi.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1994,shapiro,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1994,shapiro,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1994,shapiro,100,shapiro.html,md2html,null,html,html,true,browser,author hints
|
||||
1994,shapiro,300,1994_shapiro.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1994,smr,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1994,smr,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1994,smr,300,1994_smr.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1994,tvr,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1994,tvr,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1994,tvr,300,1994_tvr.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1994,weisberg,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1994,weisberg,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1994,weisberg,300,1994_weisberg.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1994,westley,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1994,westley,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1994,westley,300,1994_westley.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1995,cdua,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1995,cdua,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1995,cdua,300,1995_cdua.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1995,dodsond1,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1995,dodsond1,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1995,dodsond1,300,1995_dodsond1.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1995,dodsond2,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1995,dodsond2,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1995,dodsond2,300,1995_dodsond2.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1995,esde,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1995,esde,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1995,esde,300,1995_esde.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1995,garry,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1995,garry,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1995,garry,300,1995_garry.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1995,heathbar,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1995,heathbar,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1995,heathbar,300,1995_heathbar.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1995,leo,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1995,leo,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1995,leo,300,1995_leo.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1995,makarios,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1995,makarios,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1995,makarios,300,1995_makarios.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1995,savastio,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1995,savastio,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1995,savastio,300,1995_savastio.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1995,schnitzi,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1995,schnitzi,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1995,schnitzi,300,1995_schnitzi.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1995,spinellis,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1995,spinellis,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1995,spinellis,300,1995_spinellis.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1995,vanschnitz,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1995,vanschnitz,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1995,vanschnitz,300,1995_vanschnitz.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1996,august,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1996,august,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1996,august,300,1996_august.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1996,dalbec,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1996,dalbec,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1996,dalbec,300,1996_dalbec.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1996,eldby,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1996,eldby,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1996,eldby,300,1996_eldby.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1996,gandalf,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1996,gandalf,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1996,gandalf,300,1996_gandalf.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1996,huffman,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1996,huffman,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1996,huffman,300,1996_huffman.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1996,jonth,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1996,jonth,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1996,jonth,300,1996_jonth.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1996,rcm,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1996,rcm,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1996,rcm,300,1996_rcm.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1996,schweikh1,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1996,schweikh1,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1996,schweikh1,300,1996_schweikh1.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1996,schweikh2,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1996,schweikh2,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1996,schweikh2,300,1996_schweikh2.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1996,schweikh3,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1996,schweikh3,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1996,schweikh3,300,1996_schweikh3.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1996,westley,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1996,westley,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1996,westley,300,1996_westley.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1998,banks,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1998,banks,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1998,banks,300,1998_banks.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1998,bas1,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1998,bas1,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1998,bas1,300,1998_bas1.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1998,bas2,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1998,bas2,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1998,bas2,300,1998_bas2.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1998,chaos,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1998,chaos,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1998,chaos,300,1998_chaos.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1998,df,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1998,df,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1998,df,300,1998_df.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1998,dlowe,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1998,dlowe,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1998,dlowe,300,1998_dlowe.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1998,dloweneil,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1998,dloweneil,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1998,dloweneil,300,1998_dloweneil.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1998,dorssel,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1998,dorssel,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1998,dorssel,100,dorssel.html,md2html,null,html,html,true,browser,author description of entry
|
||||
1998,dorssel,300,1998_dorssel.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1998,fanf,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1998,fanf,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1998,fanf,300,1998_fanf.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1998,schnitzi,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1998,schnitzi,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1998,schnitzi,300,1998_schnitzi.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1998,schweikh1,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1998,schweikh1,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1998,schweikh1,300,1998_schweikh1.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1998,schweikh2,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1998,schweikh2,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1998,schweikh2,300,1998_schweikh2.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1998,schweikh3,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1998,schweikh3,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1998,schweikh3,300,1998_schweikh3.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
1998,tomtorfs,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
1998,tomtorfs,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
1998,tomtorfs,300,1998_tomtorfs.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2000,anderson,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2000,anderson,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2000,anderson,300,2000_anderson.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2000,bellard,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2000,bellard,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2000,bellard,300,2000_bellard.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2000,bmeyer,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2000,bmeyer,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2000,bmeyer,300,2000_bmeyer.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2000,briddlebane,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2000,briddlebane,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2000,briddlebane,300,2000_briddlebane.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2000,dhyang,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2000,dhyang,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2000,dhyang,300,2000_dhyang.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2000,dlowe,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2000,dlowe,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2000,dlowe,300,2000_dlowe.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2000,jarijyrki,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2000,jarijyrki,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2000,jarijyrki,300,2000_jarijyrki.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2000,natori,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2000,natori,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2000,natori,300,2000_natori.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2000,primenum,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2000,primenum,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2000,primenum,300,2000_primenum.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2000,rince,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2000,rince,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2000,rince,300,2000_rince.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2000,robison,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2000,robison,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2000,robison,300,2000_robison.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2000,schneiderwent,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2000,schneiderwent,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2000,schneiderwent,300,2000_schneiderwent.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2000,thadgavin,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2000,thadgavin,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2000,thadgavin,300,2000_thadgavin.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2000,tomx,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2000,tomx,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2000,tomx,300,2000_tomx.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2001,anonymous,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2001,anonymous,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2001,anonymous,300,2001_anonymous.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2001,bellard,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2001,bellard,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2001,bellard,300,2001_bellard.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2001,cheong,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2001,cheong,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2001,cheong,300,2001_cheong.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2001,coupard,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2001,coupard,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2001,coupard,300,2001_coupard.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2001,ctk,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2001,ctk,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2001,ctk,300,2001_ctk.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2001,dgbeards,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2001,dgbeards,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2001,dgbeards,300,2001_dgbeards.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2001,herrmann1,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2001,herrmann1,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2001,herrmann1,300,2001_herrmann1.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2001,herrmann2,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2001,herrmann2,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2001,herrmann2,300,2001_herrmann2.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2001,jason,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2001,jason,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2001,jason,300,2001_jason.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2001,kev,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2001,kev,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2001,kev,300,2001_kev.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2001,ollinger,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2001,ollinger,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2001,ollinger,300,2001_ollinger.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2001,rosten,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2001,rosten,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2001,rosten,300,2001_rosten.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2001,schweikh,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2001,schweikh,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2001,schweikh,300,2001_schweikh.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2001,westley,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2001,westley,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2001,westley,300,2001_westley.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2001,williams,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2001,williams,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2001,williams,300,2001_williams.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2004,anonymous,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2004,anonymous,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2004,anonymous,300,2004_anonymous.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2004,arachnid,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2004,arachnid,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2004,arachnid,300,2004_arachnid.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2004,burley,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2004,burley,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2004,burley,300,2004_burley.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2004,gavare,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2004,gavare,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2004,gavare,300,2004_gavare.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2004,gavin,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2004,gavin,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2004,gavin,100,gavin.html,md2html,null,html,html,true,browser,author usage guide
|
||||
2004,gavin,300,2004_gavin.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2004,hibachi,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2004,hibachi,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2004,hibachi,300,2004_hibachi.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2004,hoyle,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2004,hoyle,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2004,hoyle,300,2004_hoyle.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2004,jdalbec,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2004,jdalbec,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2004,jdalbec,300,2004_jdalbec.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2004,kopczynski,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2004,kopczynski,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2004,kopczynski,300,2004_kopczynski.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2004,newbern,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2004,newbern,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2004,newbern,300,2004_newbern.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2004,omoikane,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2004,omoikane,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2004,omoikane,300,2004_omoikane.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2004,schnitzi,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2004,schnitzi,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2004,schnitzi,300,2004_schnitzi.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2004,sds,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2004,sds,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2004,sds,300,2004_sds.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2004,vik1,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2004,vik1,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2004,vik1,300,2004_vik1.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2004,vik2,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2004,vik2,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2004,vik2,300,2004_vik2.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2005,aidan,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2005,aidan,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2005,aidan,300,2005_aidan.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2005,anon,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2005,anon,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2005,anon,300,2005_anon.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2005,boutines,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2005,boutines,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2005,boutines,300,2005_boutines.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2005,chia,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2005,chia,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2005,chia,300,2005_chia.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2005,giljade,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2005,giljade,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2005,giljade,300,2005_giljade.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2005,jetro,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2005,jetro,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2005,jetro,300,2005_jetro.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2005,klausler,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2005,klausler,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2005,klausler,300,2005_klausler.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2005,mikeash,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2005,mikeash,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2005,mikeash,300,2005_mikeash.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2005,mynx,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2005,mynx,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2005,mynx,300,2005_mynx.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2005,persano,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2005,persano,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2005,persano,300,2005_persano.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2005,sykes,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2005,sykes,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2005,sykes,300,2005_sykes.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2005,timwi,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2005,timwi,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2005,timwi,300,2005_timwi.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2005,toledo,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2005,toledo,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2005,toledo,300,2005_toledo.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2005,vik,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2005,vik,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2005,vik,300,2005_vik.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2005,vince,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2005,vince,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2005,vince,300,2005_vince.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2006,birken,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2006,birken,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2006,birken,300,2006_birken.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2006,borsanyi,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2006,borsanyi,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2006,borsanyi,300,2006_borsanyi.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2006,grothe,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2006,grothe,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2006,grothe,300,2006_grothe.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2006,hamre,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2006,hamre,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2006,hamre,300,2006_hamre.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2006,meyer,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2006,meyer,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2006,meyer,300,2006_meyer.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2006,monge,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2006,monge,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2006,monge,300,2006_monge.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2006,night,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2006,night,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2006,night,300,2006_night.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2006,sloane,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2006,sloane,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2006,sloane,300,2006_sloane.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2006,stewart,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2006,stewart,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2006,stewart,300,2006_stewart.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2006,sykes1,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2006,sykes1,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2006,sykes1,300,2006_sykes1.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2006,sykes2,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2006,sykes2,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2006,sykes2,300,2006_sykes2.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2006,toledo1,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2006,toledo1,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2006,toledo1,300,2006_toledo1.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2006,toledo2,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2006,toledo2,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2006,toledo2,300,2006_toledo2.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2006,toledo3,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2006,toledo3,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2006,toledo3,300,2006_toledo3.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2011,akari,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2011,akari,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2011,akari,300,2011_akari.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2011,blakely,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2011,blakely,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2011,blakely,300,2011_blakely.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2011,borsanyi,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2011,borsanyi,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2011,borsanyi,300,2011_borsanyi.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2011,dlowe,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2011,dlowe,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2011,dlowe,300,2011_dlowe.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2011,eastman,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2011,eastman,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2011,eastman,300,2011_eastman.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2011,fredriksson,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2011,fredriksson,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2011,fredriksson,300,2011_fredriksson.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2011,goren,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2011,goren,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2011,goren,300,2011_goren.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2011,hamaji,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2011,hamaji,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2011,hamaji,300,2011_hamaji.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2011,hou,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2011,hou,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2011,hou,300,2011_hou.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2011,konno,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2011,konno,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2011,konno,300,2011_konno.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2011,richards,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2011,richards,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2011,richards,300,2011_richards.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2011,toledo,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2011,toledo,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2011,toledo,300,2011_toledo.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2011,vik,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2011,vik,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2011,vik,300,2011_vik.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2011,zucker,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2011,zucker,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2011,zucker,300,2011_zucker.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2012,blakely,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2012,blakely,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2012,blakely,300,2012_blakely.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2012,deckmyn,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2012,deckmyn,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2012,deckmyn,100,deckmyn.html,md2html,null,html,html,true,browser,user manual
|
||||
2012,deckmyn,300,2012_deckmyn.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2012,dlowe,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2012,dlowe,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2012,dlowe,300,2012_dlowe.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2012,endoh1,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2012,endoh1,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2012,endoh1,300,2012_endoh1.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2012,endoh2,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2012,endoh2,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2012,endoh2,300,2012_endoh2.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2012,grothe,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2012,grothe,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2012,grothe,300,2012_grothe.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2012,hamano,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2012,hamano,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2012,hamano,300,2012_hamano.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2012,hou,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2012,hou,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2012,hou,300,2012_hou.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2012,kang,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2012,kang,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2012,kang,300,2012_kang.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2012,konno,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2012,konno,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2012,konno,300,2012_konno.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2012,omoikane,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2012,omoikane,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2012,omoikane,300,2012_omoikane.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2012,tromp,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2012,tromp,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2012,tromp,100,how.html,md2html,null,html,html,true,browser,author supplied spoiler
|
||||
2012,tromp,300,2012_tromp.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2012,vik,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2012,vik,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2012,vik,300,2012_vik.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2012,zeitak,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2012,zeitak,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2012,zeitak,300,2012_zeitak.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2013,birken,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2013,birken,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2013,birken,300,2013_birken.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2013,cable1,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2013,cable1,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2013,cable1,300,2013_cable1.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2013,cable2,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2013,cable2,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2013,cable2,300,2013_cable2.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2013,cable3,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2013,cable3,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2013,cable3,300,2013_cable3.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2013,dlowe,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2013,dlowe,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2013,dlowe,300,2013_dlowe.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2013,endoh1,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2013,endoh1,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2013,endoh1,300,2013_endoh1.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2013,endoh2,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2013,endoh2,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2013,endoh2,300,2013_endoh2.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2013,endoh3,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2013,endoh3,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2013,endoh3,300,2013_endoh3.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2013,endoh4,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2013,endoh4,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2013,endoh4,300,2013_endoh4.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2013,hou,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2013,hou,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2013,hou,100,doc/example.html,md2html,null,html,html,true,browser,detailed information about entry
|
||||
2013,hou,300,2013_hou.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2013,mills,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2013,mills,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2013,mills,300,2013_mills.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2013,misaka,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2013,misaka,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2013,misaka,300,2013_misaka.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2013,morgan1,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2013,morgan1,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2013,morgan1,300,2013_morgan1.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2013,morgan2,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2013,morgan2,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2013,morgan2,300,2013_morgan2.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2013,robison,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2013,robison,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2013,robison,300,2013_robison.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2014,birken,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2014,birken,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2014,birken,300,2014_birken.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2014,deak,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2014,deak,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2014,deak,300,2014_deak.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2014,endoh1,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2014,endoh1,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2014,endoh1,100,read_me.html,md2html,null,html,html,true,browser,about the Q(uine)R code generator
|
||||
2014,endoh1,100,spoilers.html,md2html,null,html,html,true,browser,spoilers about Q(uine)R code generator
|
||||
2014,endoh1,300,2014_endoh1.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2014,endoh2,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2014,endoh2,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2014,endoh2,300,2014_endoh2.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2014,maffiodo1,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2014,maffiodo1,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2014,maffiodo1,300,2014_maffiodo1.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2014,maffiodo2,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2014,maffiodo2,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2014,maffiodo2,300,2014_maffiodo2.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2014,morgan,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2014,morgan,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2014,morgan,300,2014_morgan.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2014,sinon,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2014,sinon,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2014,sinon,300,2014_sinon.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2014,skeggs,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2014,skeggs,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2014,skeggs,300,2014_skeggs.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2014,vik,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2014,vik,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2014,vik,300,2014_vik.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2014,wiedijk,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2014,wiedijk,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2014,wiedijk,300,2014_wiedijk.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2015,burton,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2015,burton,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2015,burton,200,spoilers.html,md2html,null,html,html,true,browser,SPOILER WARNING
|
||||
2015,burton,300,2015_burton.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2015,dogon,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2015,dogon,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2015,dogon,300,2015_dogon.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2015,duble,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2015,duble,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2015,duble,300,2015_duble.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2015,endoh1,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2015,endoh1,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2015,endoh1,300,2015_endoh1.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2015,endoh2,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2015,endoh2,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2015,endoh2,300,2015_endoh2.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2015,endoh3,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2015,endoh3,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2015,endoh3,300,2015_endoh3.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2015,endoh4,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2015,endoh4,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2015,endoh4,300,2015_endoh4.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2015,hou,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2015,hou,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2015,hou,300,2015_hou.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2015,howe,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2015,howe,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2015,howe,300,2015_howe.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2015,mills1,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2015,mills1,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2015,mills1,300,2015_mills1.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2015,mills2,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2015,mills2,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2015,mills2,300,2015_mills2.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2015,muth,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2015,muth,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2015,muth,300,2015_muth.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2015,schweikhardt,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2015,schweikhardt,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2015,schweikhardt,300,2015_schweikhardt.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2015,yang,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2015,yang,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2015,yang,300,2015_yang.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2018,algmyr,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2018,algmyr,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2018,algmyr,300,2018_algmyr.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2018,anderson,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2018,anderson,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2018,anderson,300,2018_anderson.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2018,bellard,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2018,bellard,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2018,bellard,300,2018_bellard.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2018,burton1,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2018,burton1,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2018,burton1,300,2018_burton1.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2018,burton2,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2018,burton2,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2018,burton2,100,discrepancies.html,md2html,null,html,html,true,browser,field-by-field difference between iocccsize and ion
|
||||
2018,burton2,300,2018_burton2.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2018,ciura,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2018,ciura,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2018,ciura,300,2018_ciura.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2018,endoh1,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2018,endoh1,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2018,endoh1,300,2018_endoh1.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2018,endoh2,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2018,endoh2,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2018,endoh2,300,2018_endoh2.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2018,ferguson,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2018,ferguson,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2018,ferguson,100,rpm.html,md2html,null,html,html,true,browser,about forming the rpm
|
||||
2018,ferguson,300,2018_ferguson.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2018,giles,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2018,giles,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2018,giles,300,2018_giles.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2018,hou,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2018,hou,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2018,hou,300,2018_hou.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2018,mills,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2018,mills,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2018,mills,300,2018_mills.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2018,poikola,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2018,poikola,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2018,poikola,300,2018_poikola.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2018,vokes,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2018,vokes,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2018,vokes,300,2018_vokes.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2018,yang,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2018,yang,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2018,yang,300,2018_yang.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2019,adamovsky,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2019,adamovsky,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2019,adamovsky,300,2019_adamovsky.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2019,burton,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2019,burton,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2019,burton,300,2019_burton.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2019,ciura,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2019,ciura,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2019,ciura,300,2019_ciura.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2019,diels-grabsch1,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2019,diels-grabsch1,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2019,diels-grabsch1,300,2019_diels-grabsch1.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2019,diels-grabsch2,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2019,diels-grabsch2,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2019,diels-grabsch2,300,2019_diels-grabsch2.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2019,dogon,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2019,dogon,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2019,dogon,300,2019_dogon.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2019,duble,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2019,duble,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2019,duble,300,2019_duble.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2019,endoh,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2019,endoh,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2019,endoh,300,2019_endoh.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2019,giles,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2019,giles,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2019,giles,300,2019_giles.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2019,karns,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2019,karns,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2019,karns,300,2019_karns.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2019,lynn,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2019,lynn,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2019,lynn,300,2019_lynn.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2019,mills,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2019,mills,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2019,mills,300,2019_mills.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2019,poikola,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2019,poikola,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2019,poikola,300,2019_poikola.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2019,yang,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2019,yang,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2019,yang,300,2019_yang.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2020,burton,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2020,burton,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2020,burton,300,2020_burton.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2020,carlini,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2020,carlini,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2020,carlini,300,2020_carlini.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2020,endoh1,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2020,endoh1,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2020,endoh1,300,2020_endoh1.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2020,endoh2,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2020,endoh2,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2020,endoh2,300,2020_endoh2.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2020,endoh3,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2020,endoh3,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2020,endoh3,300,2020_endoh3.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2020,ferguson1,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2020,ferguson1,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2020,ferguson1,100,COMPILING.html,md2html,null,html,html,true,browser,about compiling
|
||||
2020,ferguson1,100,HACKING.html,md2html,null,html,html,true,browser,information for herpetologist hackers
|
||||
2020,ferguson1,100,cannibalism.log.html,md2html,null,html,html,true,browser,about the snake game
|
||||
2020,ferguson1,100,crazy.log.html,md2html,null,html,html,true,browser,about some screen dumps
|
||||
2020,ferguson1,150,bugs.html,md2html,null,html,html,true,browser,bugs and mis-features
|
||||
2020,ferguson1,150,chocolate-cake.html,md2html,null,html,html,true,browser,chocolate cake recipe
|
||||
2020,ferguson1,150,gameplay.html,md2html,null,html,html,true,browser,how to play
|
||||
2020,ferguson1,150,terminals.html,md2html,null,html,html,true,browser,terminal capability documentation
|
||||
2020,ferguson1,150,troubleshooting.html,md2html,null,html,html,true,browser,troubleshooting
|
||||
2020,ferguson1,200,spoilers.html,md2html,null,html,html,true,browser,SPOILER WARNING
|
||||
2020,ferguson1,300,2020_ferguson1.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2020,ferguson2,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2020,ferguson2,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2020,ferguson2,300,2020_ferguson2.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2020,giles,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2020,giles,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2020,giles,300,2020_giles.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2020,kurdyukov1,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2020,kurdyukov1,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2020,kurdyukov1,300,2020_kurdyukov1.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2020,kurdyukov2,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2020,kurdyukov2,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2020,kurdyukov2,300,2020_kurdyukov2.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2020,kurdyukov3,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2020,kurdyukov3,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2020,kurdyukov3,300,2020_kurdyukov3.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2020,kurdyukov4,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2020,kurdyukov4,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2020,kurdyukov4,300,2020_kurdyukov4.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2020,otterness,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2020,otterness,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2020,otterness,300,2020_otterness.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2020,tsoj,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2020,tsoj,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2020,tsoj,300,2020_tsoj.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
2020,yang,null,.winner.json,jwinner,null,json,json,false,null,null
|
||||
2020,yang,10,index.html,readme2index,null,html,html,true,browser,click here first
|
||||
2020,yang,300,2020_yang.tar.bz2,mkwinnertbz2,null,tbz2,bz2,true,download,download winning source
|
||||
|
Binary file not shown.
@@ -1,77 +0,0 @@
|
||||
* {
|
||||
font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
|
||||
}
|
||||
body {
|
||||
max-width: 50em;
|
||||
margin: 0 auto;
|
||||
color: #111;
|
||||
}
|
||||
|
||||
pre, code {
|
||||
font-family: Monaco, Courier New, monospace;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 40px;
|
||||
font-weight: bold;
|
||||
letter-spacing: -1px;
|
||||
margin-bottom: -5px;
|
||||
}
|
||||
h1 code {
|
||||
font-size: 40px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
color: rgb(43,105,145);
|
||||
font-weight: bold;
|
||||
margin-bottom: -5px;
|
||||
}
|
||||
h2 code {
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
h3 {
|
||||
/* color: rgb(43,105,145); */
|
||||
font-weight: bold;
|
||||
margin-bottom: -5px;
|
||||
}
|
||||
h3 code {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
a {
|
||||
color: blue;
|
||||
text-decoration: underline;
|
||||
}
|
||||
a:visited {
|
||||
color: navy;
|
||||
}
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
pre {
|
||||
border-radius: 10px;
|
||||
-webkit-border-radius: 10px;
|
||||
-moz-border-radius: 10px;
|
||||
box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.3);
|
||||
-webkit-box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.3);
|
||||
-moz-box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.3);
|
||||
border-width: 1px;
|
||||
border-color: rgb(16,48,0);
|
||||
border-style: solid;
|
||||
padding: 0.6em;
|
||||
padding-left: 1em;
|
||||
margin-left: 5%;
|
||||
margin-right: 8%;
|
||||
background-color: rgb(16,48,0);
|
||||
overflow: auto;
|
||||
color: rgb(75,224,0);
|
||||
}
|
||||
|
||||
p, li {
|
||||
font-size: 14px;
|
||||
line-height: 18px;
|
||||
}
|
||||
|
||||
@@ -1,348 +0,0 @@
|
||||
CREATE TABLE winners (
|
||||
prize_tag TEXT,
|
||||
person_id TEXT,
|
||||
country TEXT,
|
||||
city TEXT,
|
||||
CONSTRAINT winners UNIQUE (prize_tag, person_id) ON CONFLICT REPLACE
|
||||
);
|
||||
INSERT INTO winners VALUES('2000_anderson','Glyn_Anderson',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1984_anonymous','Anonymous_1984',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2004_anonymous','Anonymous_2004',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1991_davidguy','David_Applegate',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1985_applin','Jack_Applin',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1986_applin','Jack_Applin',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1988_applin','Jack_Applin',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1989_jar.1','Jari_Arkko',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1989_jar.2','Jari_Arkko',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2000_jarijyrki','Jari_Arkko',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1985_august','Lennart_Augustsson',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1986_august','Lennart_Augustsson',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1996_august','Lennart_Augustsson',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1998_banks','Carl_Banks',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2001_anonymous','Anonymous_2001',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2004_gavin','Gavin_Barraclough',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1991_buzzard','Sean_Barrett',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1992_buzzard.1','Sean_Barrett',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1992_buzzard.2','Sean_Barrett',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2001_dgbeards','Doug_Beardsley',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2000_bellard','Fabrice_Bellard',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2001_bellard','Fabrice_Bellard',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1993_ejb','E._Jay_Berkenbilt',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1991_brnstnd','Daniel_J._Bernstein',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1987_biggar','Mark_Biggar',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1989_paul','Paul_E._Black',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1991_rince','James_Bonfield',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1993_rince','James_Bonfield',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2000_rince','James_Bonfield',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2000_briddlebane','Moxen_N._Briddlebane',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1986_bright','Walter_Bright',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1993_leo','Leonid_A._Broukhis',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1995_leo','Leonid_A._Broukhis',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1994_ldb','Laurion_Burchall',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2004_burley','Brent_Burley',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2000_thadgavin','Gavin_Buttimore',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2000_primenum','Raymond_Cheong',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2001_cheong','Raymond_Cheong',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1992_imc','Ian_Collier',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1994_imc','Ian_Collier',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2001_coupard','Pierre-Philippe_Coupard',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1996_dalbec','John_Dalbec',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2004_jdalbec','John_Dalbec',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1988_dale','Paul_Dale',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1998_bas1','Bas_de_Bakker',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1998_bas2','Bas_de_Bakker',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1998_chaos','Alan_De_Smet',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1984_decot','Dave_Decot',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1995_esde','Sebastian_Deorowicz',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1994_dodsond1','Don_Dodson',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1994_dodsond2','Don_Dodson',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1995_dodsond1','Don_Dodson',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1995_dodsond2','Don_Dodson',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1990_tbr','Sean_Dorward',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1995_heathbar','Heather_Downs',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1995_heathbar','Selene_Makarios',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1995_cdua','Carlos_Duarte',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1991_cdupont','Christian_Dupont',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1990_jaw','Paul_Eggert',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1996_eldby','Thor_Eldby',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1998_fanf','Tony_Finch',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1991_fine','Thomas_A._Fine',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1998_df','Daniel_Fischer',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1990_jaw','Karl_F._Fox',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2000_thadgavin','Thaddaeus_Frogley',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2004_gavare','Anders_Gavare',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1993_dgibson','David_Gibson',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1995_garry','Garry_Glendown',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1990_dg','David_Goodenough',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1992_gson','Andreas_Gustafsson',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1986_hague','Jim_Hague',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1987_heckbert','Paul_Heckbert',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1985_applin','Robert_Heckendorn',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1990_stig','Stig_Hemmer',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2001_herrmann1','Immanuel_Herrmann',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2001_herrmann2','Immanuel_Herrmann',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1987_hines','Spencer_Hines',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1986_holloway','Bruce_Holloway',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1993_lmfjyh','Jyrki_Holopainen',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2000_jarijyrki','Jyrki_Holopainen',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1994_horton','Mary_Ann_Horton',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1991_ant','Anthony_C._Howe',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1992_ant','Anthony_C._Howe',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1993_ant','Anthony_C._Howe',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2004_hibachi','Anthony_C._Howe',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2004_hoyle','Jonathan_Hoyle',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1996_huffman','Ken_Huffman',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1988_isaak','Mark_Isaak',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2000_tomx','Thomas_P_John',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2004_arachnid','Nick_Johnson',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1990_scjones','Larry_Jones',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2001_ctk','Chris_King',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1992_kivinen','Tero_Kivinen',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2004_kopczynski','Eryk_Kopczynski',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1987_korn','David_Korn',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1984_laman','Mike_Laman',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1989_jar.2','Ora_Lassila',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1987_lievaart','Roemer_B._Lievaart',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1989_roemer','Roemer_B._Lievaart',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1988_litmaath','Maarten_Litmaath',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1998_dlowe','J_David_Lowe',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1998_dloweneil','J_David_Lowe',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2000_dlowe','J_David_Lowe',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1992_lush','Ed_Luke',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1985_lycklama','Ed_Lycklama',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1995_makarios','Selene_Makarios',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1995_makarios','Heather_Downs',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1992_marangon','Andrea_Marangoni',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1990_theorem','Adrian_Mariano',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1992_adrian','Adrian_Mariano',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1986_marshall','Eric_Marshall',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1996_rcm','Ron_McFarland',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2000_bmeyer','Bernd_Meyer',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1990_cmills','Christopher_Mills',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1993_cmills','Christopher_Mills',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1998_dloweneil','Neil_Mix',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1984_mullender','Sjoerd_Mullender',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2004_newbern','Jeff_Newbern',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1990_baruch','Baruch_Nissenbaum',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1989_jar.2','Esko_Nuutila',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2001_ollinger','Nicolas_Ollinger',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2001_jason','Jason_Orendorff',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1990_baruch','Doron_Osovlanski',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1986_pawka','Michael_H._Pawka',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1992_vern','Vern_Paxson',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1988_phillipps','Ian_Phillipps',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1993_plummer','Mark_Plummer',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2001_kev','Kevin_Pulo',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1990_tbr','Byron_Rakitzis',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1994_tvr','Teemu_Rantanen',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1988_reddy','Gopi_Reddy',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1988_robison','Arch_D_Robison',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1989_robison','Arch_D_Robison',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2000_robison','Arch_D_Robison',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2001_rosten','Edward_Rosten',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1990_pjr','Peter_J_Ruczynski',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1994_smr','Szymon_Rusinkiewicz',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1995_savastio','Michael_Savastio',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2000_schneiderwent','Craig_Schneiderwent',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1993_schnitzi','Mark_Schnitzius',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1994_schnitzi','Mark_Schnitzius',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1995_schnitzi','Mark_Schnitzius',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1995_vanschnitz','Mark_Schnitzius',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1998_schnitzi','Mark_Schnitzius',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2004_schnitzi','Mark_Schnitzius',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1996_schweikh1','Jens_Schweikhardt',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1996_schweikh2','Jens_Schweikhardt',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1996_schweikh3','Jens_Schweikhardt',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1998_schweikh1','Jens_Schweikhardt',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1998_schweikh2','Jens_Schweikhardt',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1998_schweikh3','Jens_Schweikhardt',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2001_schweikh','Jens_Schweikhardt',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1994_shapiro','Andrew_Shapiro',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1985_shapiro','Carl_Shapiro',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2000_natori','NATORI_Shin',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1985_sicherman','Col._G._L._Sicherman',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1992_nathan','Nathan_Sidwell',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1988_spinellis','Diomidis_Spinellis',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1990_dds','Diomidis_Spinellis',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1991_dds','Diomidis_Spinellis',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1995_spinellis','Diomidis_Spinellis',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1986_stein','Jan_Stein',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1996_gandalf','Dean_Swift',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2004_sds','Stephen_Sykes',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1993_jonth','Jon_Thingvold',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1996_jonth','Jon_Thingvold',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1998_tomtorfs','Tom Torfs',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1989_tromp','John_Tromp',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1989_vanb','David_Van_Brackle',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1993_vanb','David_Van_Brackle',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1995_vanschnitz','David_Van_Brackle',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1992_albert','Albert_van_der_Horst',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1998_dorssel','Frans van Dorsselaer',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1984_mullender','Robbert_van_Renesse',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2004_vik1','Daniel_Vik',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2004_vik2','Daniel_Vik',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1989_ovdluhe','Oskar_von_der_Luehe',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1989_fubar','Jay_Vosburgh',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1986_wall','Larry_Wall',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1987_wall','Larry_Wall',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1994_weisberg','Jeff_Weisberg',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1987_westley','Brian_Westley',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1988_westley','Brian_Westley',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1989_westley','Brian_Westley',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1990_westley','Brian_Westley',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1991_westley','Brian_Westley',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1992_westley','Brian_Westley',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1994_westley','Brian_Westley',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1996_westley','Brian_Westley',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2001_westley','Brian_Westley',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2001_williams','John_Williams',NULL,NULL);
|
||||
INSERT INTO winners VALUES('1990_jaw','James_A._Woods',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2000_dhyang','Don_Yang',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2004_omoikane','Don_Yang',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2000_briddlebane','Lord_Zarbon',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2005_aidan','Aidan_Thornton',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2005_anon','Anonymous_2005',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2005_boutines','Francois_Boutines',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2005_chia','V._Chia',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2005_giljade','Gil_Dogon',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2005_jetro','Jetro_Lauha',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2005_klausler','Peter_Klausler',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2005_mikeash','Michael_Ash',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2005_mynx','Anthony_C._Howe',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2005_persano','Mauro_Persano',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2005_sykes','Stephen_Sykes',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2005_timwi','Arne_Heizmann',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2005_toledo','Oscar_Toledo_G.',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2005_vik','Daniel_Vik',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2005_vince','Vincent_Weaver',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2006_birken','Michael_Birken',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2006_borsanyi','Szabolcs_Borsanyi',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2006_grothe','Aaron_Grothe',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2006_hamre','Steinar_Hamre',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2006_meyer','Raphael_Meyer',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2006_monge','Maurizio_Monge',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2006_night','Christopher_Night',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2006_sloane','Andy_Sloane',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2006_stewart','Thomas_Stewart',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2006_sykes1','Stephen_Sykes',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2006_sykes2','Stephen_Sykes',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2006_toledo1','Oscar_Toledo_G.',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2006_toledo2','Oscar_Toledo_G.',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2006_toledo3','Oscar_Toledo_G.',NULL,NULL);
|
||||
INSERT INTO winners VALUES('2011_blakely','Philip_Blakely','UK',NULL);
|
||||
INSERT INTO winners VALUES('2011_borsanyi','Szabolcs_Borsanyi','Germany',NULL);
|
||||
INSERT INTO winners VALUES('2011_dlowe','J_David_Lowe','USA',NULL);
|
||||
INSERT INTO winners VALUES('2011_eastman','Peter_Eastman','USA',NULL);
|
||||
INSERT INTO winners VALUES('2011_fredriksson','Kimmo_Fredriksson','Finland',NULL);
|
||||
INSERT INTO winners VALUES('2011_goren','Uri_Goren','Israel',NULL);
|
||||
INSERT INTO winners VALUES('2011_hou','Qiming_HOU','China',NULL);
|
||||
INSERT INTO winners VALUES('2011_konno','Taketo_Konno','Japan',NULL);
|
||||
INSERT INTO winners VALUES('2011_hamaji','Shinichiro_Hamaji','Japan',NULL);
|
||||
INSERT INTO winners VALUES('2011_hamaji','bsoup','Japan',NULL);
|
||||
INSERT INTO winners VALUES('2011_richards','Gregor_Richards','USA',NULL);
|
||||
INSERT INTO winners VALUES('2011_toledo','Oscar_Toledo_G.','Mexico',NULL);
|
||||
INSERT INTO winners VALUES('2011_vik','Daniel_Vik','USA',NULL);
|
||||
INSERT INTO winners VALUES('2011_zucker','Matt_Zucker','USA',NULL);
|
||||
INSERT INTO winners VALUES('2011_akari','Don_Yang','USA',NULL);
|
||||
INSERT INTO winners VALUES('2012_hou','Qiming_HOU','CN',NULL);
|
||||
INSERT INTO winners VALUES('2012_grothe','Aaron_Grothe','US',NULL);
|
||||
INSERT INTO winners VALUES('2012_grothe','David_Madore','FR',NULL);
|
||||
INSERT INTO winners VALUES('2012_konno','Taketo_Konno','JP',NULL);
|
||||
INSERT INTO winners VALUES('2012_omoikane','Don_Yang','US',NULL);
|
||||
INSERT INTO winners VALUES('2012_kang','Seonghoon_Kang','KR',NULL);
|
||||
INSERT INTO winners VALUES('2012_dlowe','J_David_Lowe','US',NULL);
|
||||
INSERT INTO winners VALUES('2012_deckmyn','Alex_Deckmyn','BE',NULL);
|
||||
INSERT INTO winners VALUES('2012_endoh2','Yusuke_Endoh','JP',NULL);
|
||||
INSERT INTO winners VALUES('2012_blakely','Philip_Blakely','GB',NULL);
|
||||
INSERT INTO winners VALUES('2012_tromp','John_Tromp','US',NULL);
|
||||
INSERT INTO winners VALUES('2012_endoh1','Yusuke_Endoh','JP',NULL);
|
||||
INSERT INTO winners VALUES('2012_vik','Daniel_Vik','US',NULL);
|
||||
INSERT INTO winners VALUES('2012_hamano','Tsukasa_Hamano','JP',NULL);
|
||||
INSERT INTO winners VALUES('2012_zeitak','Adar_Zeitak','IL',NULL);
|
||||
INSERT INTO winners VALUES('2013_endoh3','Yusuke_Endoh','JP',NULL);
|
||||
INSERT INTO winners VALUES('2013_cable1','Adrian_Cable','US',NULL);
|
||||
INSERT INTO winners VALUES('2013_misaka','Don_Yang','US',NULL);
|
||||
INSERT INTO winners VALUES('2013_dlowe','J_David_Lowe','US',NULL);
|
||||
INSERT INTO winners VALUES('2013_endoh1','Yusuke_Endoh','JP',NULL);
|
||||
INSERT INTO winners VALUES('2013_morgan1','Yves-Marie_Morgan','FR',NULL);
|
||||
INSERT INTO winners VALUES('2013_robison','Arch_D_Robison','US',NULL);
|
||||
INSERT INTO winners VALUES('2013_hou','Qiming_HOU','CN',NULL);
|
||||
INSERT INTO winners VALUES('2013_birken','Michael_Birken','US',NULL);
|
||||
INSERT INTO winners VALUES('2013_endoh2','Yusuke_Endoh','JP',NULL);
|
||||
INSERT INTO winners VALUES('2013_cable3','Adrian_Cable','US',NULL);
|
||||
INSERT INTO winners VALUES('2013_morgan2','Yves-Marie_Morgan','FR',NULL);
|
||||
INSERT INTO winners VALUES('2013_endoh4','Yusuke_Endoh','JP',NULL);
|
||||
INSERT INTO winners VALUES('2013_mills','Christopher_Mills','US',NULL);
|
||||
INSERT INTO winners VALUES('2013_cable2','Adrian_Cable','US',NULL);
|
||||
INSERT INTO winners VALUES('2014_endoh1','Yusuke_Endoh','JP',NULL);
|
||||
INSERT INTO winners VALUES('2014_morgan','Yves-Marie_Morgan','FR',NULL);
|
||||
INSERT INTO winners VALUES('2014_maffiodo1','Sandro_Maffiodo','IT',NULL);
|
||||
INSERT INTO winners VALUES('2014_birken','Michael_Birken','US',NULL);
|
||||
INSERT INTO winners VALUES('2014_birken','Alexander_Prishchepov','US',NULL);
|
||||
INSERT INTO winners VALUES('2014_sinon','Don_Yang','US',NULL);
|
||||
INSERT INTO winners VALUES('2014_deak','Ferenc_Deak','NO',NULL);
|
||||
INSERT INTO winners VALUES('2014_skeggs','Cel_Skeggs','US',NULL);
|
||||
INSERT INTO winners VALUES('2014_maffiodo2','Sandro_Maffiodo','IT',NULL);
|
||||
INSERT INTO winners VALUES('2014_vik','Daniel_Vik','US',NULL);
|
||||
INSERT INTO winners VALUES('2014_endoh2','Yusuke_Endoh','JP',NULL);
|
||||
INSERT INTO winners VALUES('2014_wiedijk','Freek_Wiedijk','NL',NULL);
|
||||
INSERT INTO winners VALUES('2015_mills1','Christopher_Mills','US',NULL);
|
||||
INSERT INTO winners VALUES('2015_hou','Qiming_HOU','CN',NULL);
|
||||
INSERT INTO winners VALUES('2015_endoh1','Yusuke_Endoh','JP',NULL);
|
||||
INSERT INTO winners VALUES('2015_mills2','Christopher_Mills','US',NULL);
|
||||
INSERT INTO winners VALUES('2015_dogon','Gil_Dogon','IL',NULL);
|
||||
INSERT INTO winners VALUES('2015_endoh4','Yusuke_Endoh','JP',NULL);
|
||||
INSERT INTO winners VALUES('2015_endoh3','Yusuke_Endoh','JP',NULL);
|
||||
INSERT INTO winners VALUES('2015_schweikhardt','Jens_Schweikhardt','DE',NULL);
|
||||
INSERT INTO winners VALUES('2015_endoh1','Anonymous_2015','JP',NULL);
|
||||
INSERT INTO winners VALUES('2015_burton','Dave_Burton','US',NULL);
|
||||
INSERT INTO winners VALUES('2015_duble','Etienne_Duble','FR',NULL);
|
||||
INSERT INTO winners VALUES('2015_howe','Anthony_C._Howe','CA',NULL);
|
||||
INSERT INTO winners VALUES('2015_endoh2','Yusuke_Endoh','JP',NULL);
|
||||
INSERT INTO winners VALUES('2015_yang','Don_Yang','US',NULL);
|
||||
INSERT INTO winners VALUES('2015_muth','Dominik_Muth','DE',NULL);
|
||||
INSERT INTO winners VALUES('2018_endoh2','Yusuke_Endoh','JP',NULL);
|
||||
INSERT INTO winners VALUES('2018_giles','Edward_Giles','AU',NULL);
|
||||
INSERT INTO winners VALUES('2018_yang','Don_Yang','US',NULL);
|
||||
INSERT INTO winners VALUES('2018_anderson','Derek_Anderson','US',NULL);
|
||||
INSERT INTO winners VALUES('2018_ferguson','Cody_Ferguson','US',NULL);
|
||||
INSERT INTO winners VALUES('2018_bellard','Fabrice_Bellard','FR',NULL);
|
||||
INSERT INTO winners VALUES('2018_burton2','Dave_Burton','US',NULL);
|
||||
INSERT INTO winners VALUES('2018_hou','Qiming_HOU','CN',NULL);
|
||||
INSERT INTO winners VALUES('2018_ciura','Marcin_Ciura','PL',NULL);
|
||||
INSERT INTO winners VALUES('2018_burton1','Dave_Burton','US',NULL);
|
||||
INSERT INTO winners VALUES('2018_algmyr','Anton_Älgmyr','SE',NULL);
|
||||
INSERT INTO winners VALUES('2018_vokes','Scott_Vokes','US',NULL);
|
||||
INSERT INTO winners VALUES('2018_poikola','Timo_Poikola','FI',NULL);
|
||||
INSERT INTO winners VALUES('2018_mills','Christopher_Mills','US',NULL);
|
||||
INSERT INTO winners VALUES('2018_endoh1','Yusuke_Endoh','JP',NULL);
|
||||
INSERT INTO winners VALUES('2019_lynn','Ben_Lynn','US',NULL);
|
||||
INSERT INTO winners VALUES('2019_poikola','Timo_Poikola','FI',NULL);
|
||||
INSERT INTO winners VALUES('2019_duble','Etienne_Duble','FR',NULL);
|
||||
INSERT INTO winners VALUES('2019_ciura','Marcin_Ciura','PL',NULL);
|
||||
INSERT INTO winners VALUES('2019_karns','Joshua_Karns','US',NULL);
|
||||
INSERT INTO winners VALUES('2019_diels-grabsch1','Volker_Diels-Grabsch','DE',NULL);
|
||||
INSERT INTO winners VALUES('2019_mills','Christopher_Mills','US',NULL);
|
||||
INSERT INTO winners VALUES('2019_yang','Don_Yang','US',NULL);
|
||||
INSERT INTO winners VALUES('2019_giles','Edward_Giles','AU',NULL);
|
||||
INSERT INTO winners VALUES('2019_burton','Dave_Burton','US',NULL);
|
||||
INSERT INTO winners VALUES('2019_diels-grabsch2','Volker_Diels-Grabsch','DE',NULL);
|
||||
INSERT INTO winners VALUES('2019_endoh','Yusuke_Endoh','JP',NULL);
|
||||
INSERT INTO winners VALUES('2019_adamovsky','Ondřej_Adamovský','CZ',NULL);
|
||||
INSERT INTO winners VALUES('2019_dogon','Gil_Dogon','IL',NULL);
|
||||
INSERT INTO winners VALUES('2020_kurdyukov4','Ilya_Kurdyukov','RU',NULL);
|
||||
INSERT INTO winners VALUES('2020_ferguson2','Cody_Ferguson','US',NULL);
|
||||
INSERT INTO winners VALUES('2020_ferguson1','Cody_Ferguson','US',NULL);
|
||||
INSERT INTO winners VALUES('2020_endoh2','Yusuke_Endoh','JP',NULL);
|
||||
INSERT INTO winners VALUES('2020_yang','Don_Yang','US',NULL);
|
||||
INSERT INTO winners VALUES('2020_giles','Edward_Giles','AU',NULL);
|
||||
INSERT INTO winners VALUES('2020_tsoj','_tsoj','DE',NULL);
|
||||
INSERT INTO winners VALUES('2020_endoh3','Yusuke_Endoh','JP',NULL);
|
||||
INSERT INTO winners VALUES('2020_carlini','Nicholas_Carlini','US',NULL);
|
||||
INSERT INTO winners VALUES('2020_endoh1','Yusuke_Endoh','JP',NULL);
|
||||
INSERT INTO winners VALUES('2020_otterness','Nathan_Otterness','US',NULL);
|
||||
INSERT INTO winners VALUES('2020_burton','Dave_Burton','US',NULL);
|
||||
INSERT INTO winners VALUES('2020_kurdyukov2','Ilya_Kurdyukov','RU',NULL);
|
||||
INSERT INTO winners VALUES('2020_kurdyukov3','Ilya_Kurdyukov','RU',NULL);
|
||||
INSERT INTO winners VALUES('2020_kurdyukov1','Ilya_Kurdyukov','RU',NULL);
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<hr>
|
||||
|
||||
<h2>Footer</h2>
|
||||
|
||||
<p>This is where stuff at the bottom of all pages would be found.</p>
|
||||
|
||||
<a href="#top">Jump to top</a>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,60 +0,0 @@
|
||||
<!-- -->
|
||||
<head>
|
||||
<link rel="stylesheet" href="%%DOCROOT_URL_SLASH%%ioccc.css">
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
||||
<title>%%TITIE%%</title>
|
||||
<meta name="description" content="%%DESCRIPTION%%">
|
||||
<meta name="keywords" content="%%KEYWORDS%%">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
<img src="%%DOCROOT_URL_SLASH%%png/ioccc.png" alt="IOCCC image by Matt Zucker" width=300 height=110>
|
||||
<h1>%%HEADER_1%%</h1>
|
||||
<h2>%%HEADER_2%%</h2>
|
||||
</div>
|
||||
|
||||
<div class="topnav">
|
||||
<a href="%%LEFT_LINK%%">← %%LEFT_TEXT%%</a>
|
||||
<a href="%%UP_LINK%%">↑ %%UP_TEXT%% ↑</a>
|
||||
<a href="%%RIGHT_LINK%%">%%RIGHT_TEXT%% →</a>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="leftcolumn">
|
||||
|
||||
<div class="sidenav">
|
||||
<a href="#content">Jump to contents</a>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="sidenav">
|
||||
<a href="%%DOCROOT_URL_SLASH%%index.html">IOCCC Home</a>
|
||||
<a href="%%DOCROOT_URL_SLASH%%years.html">Winning Entries</a>
|
||||
<a href="%%DOCROOT_URL_SLASH%%winners.html">People who have won</a>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="sidenav">
|
||||
<a href="%%DOCROOT_URL_SLASH%%news.html">IOCCC News</a>
|
||||
<a href="%%DOCROOT_URL_SLASH%%judges.html">The IOCCC Judges</a>
|
||||
<a href="%%DOCROOT_URL_SLASH%%contact.html">Contacting the IOCCC</a>
|
||||
<a href="%%DOCROOT_URL_SLASH%%faq.html">FAQ</a>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="sidenav">
|
||||
<a href="%%DOCROOT_URL_SLASH%%faq.html#fix_a_winner">Fixing IOCCC winners</a>
|
||||
<a href="%%DOCROOT_URL_SLASH%%faq.html#fix_web_site">Fixing the web site</a>
|
||||
<a href="%%DOCROOT_URL_SLASH%%bugs.html">Bugs & (mis)features</a>
|
||||
<a href="%%DOCROOT_URL_SLASH%%thanks-for-help.html">Thanks for the help</a>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="sidenav">
|
||||
<a href="#top">Jump to top</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="rightcolumn">
|
||||
|
||||
<a name="content"></a>
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<!-- -->
|
||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
<!-- -->
|
||||
@@ -1,150 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<!-- -->
|
||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
<!-- -->
|
||||
<!-- file: tmp/test.html -->
|
||||
<!-- created by tool: vim -->
|
||||
<!-- tool version: 9.0.1894 -->
|
||||
<!-- content source: tmp/template-header.html -->
|
||||
<!-- content source: tmp/template-footer.html -->
|
||||
<!-- -->
|
||||
<head>
|
||||
<link rel="stylesheet" href="../ioccc.css">
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
||||
<title>test title</title>
|
||||
<meta name="description" content="test web page">
|
||||
<meta name="keywords" content="ioccc test, test, IOCCC CSS, IOCCC CSS test">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
<img src="../png/ioccc.png" alt="IOCCC image by Matt Zucker" width=300 height=110>
|
||||
<h1>The International Obfuscated C Code Contest</h1>
|
||||
<h2>2020/ferguson1</h2>
|
||||
</div>
|
||||
|
||||
<div class="topnav">
|
||||
<a class="Left Disabled" href="#">← endoh3</a>
|
||||
<a class="Left" href="#">↑ 2020 ↑</a>
|
||||
<a class="Left" href="#">ferguson2 →</a>
|
||||
<a class="Right" href="#">Inventory</a>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="leftcolumn">
|
||||
|
||||
<div class="sidenav">
|
||||
<a href="#content">Jump to contents</a>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="sidenav">
|
||||
<a href="../index.html">IOCCC Home</a>
|
||||
<a href="../years.html">Winning Entries</a>
|
||||
<a href="../winners.html">People who have won</a>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="sidenav">
|
||||
<a href="../news.html">IOCCC News</a>
|
||||
<a href="../judges.html">The IOCCC Judges</a>
|
||||
<a href="../contact.html">Contacting the IOCCC</a>
|
||||
<a href="../faq.html">FAQ</a>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="sidenav">
|
||||
<a href="../faq.html#fix_a_winner">Fixing IOCCC winners</a>
|
||||
<a href="../faq.html#fix_web_site">Fixing the web site</a>
|
||||
<a href="../bugs.html">Bugs & (mis)features</a>
|
||||
<a href="../thanks-for-help.html">Thanks for the help</a>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="sidenav">
|
||||
<a href="#top">Jump to top</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="rightcolumn">
|
||||
|
||||
<a name="content"></a>
|
||||
|
||||
<h1>Resize the browser window to see how this page changes.</h1>
|
||||
|
||||
<h2>This is a Header level 2</h2>
|
||||
|
||||
<h3>This content has nothing to do with 2020/ferguson1</h3>
|
||||
|
||||
<h4>Some of top and side bar navigation links do not (yet) work.</h4>
|
||||
|
||||
Below is some C source code!
|
||||
<code><pre>
|
||||
int main(void)
|
||||
{
|
||||
printf("Hello, world!\n");
|
||||
}
|
||||
</pre></code>
|
||||
|
||||
Do *NOT* try this set of shell commands at home:
|
||||
<code><pre>
|
||||
date
|
||||
hostname
|
||||
uptime
|
||||
sudo shutdown -p now
|
||||
</pre></code>
|
||||
|
||||
<p><a href="http://www.isthe.com">http://www.isthe.com</a></p>
|
||||
|
||||
<p><a href="http://www.example.org">http://www.example.org</a></p>
|
||||
|
||||
<p><a href="https://www.example.org">https://www.example.org</a></p>
|
||||
|
||||
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||
Nibh mauris cursus mattis molestie a iaculis at erat pellentesque.
|
||||
Faucibus purus in massa tempor nec feugiat.
|
||||
Gravida dictum fusce ut placerat orci nulla pellentesque.
|
||||
Vehicula ipsum a arcu cursus vitae congue mauris rhoncus.
|
||||
Risus viverra adipiscing at in tellus.
|
||||
Orci ac auctor augue mauris augue neque gravida in.
|
||||
Amet risus nullam eget felis eget.
|
||||
Massa tincidunt nunc pulvinar sapien et ligula ullamcorper.
|
||||
Tincidunt dui ut ornare lectus sit.
|
||||
Semper risus in hendrerit gravida.
|
||||
Eu mi bibendum neque egestas congue quisque egestas.
|
||||
Lectus vestibulum mattis ullamcorper velit sed ullamcorper morbi.
|
||||
Nunc sed velit dignissim sodales ut eu sem.</p>
|
||||
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||
Maecenas sit amet pretium urna. Vivamus venenatis velit nec neque ultricies,
|
||||
eget elementum magna tristique. Quisque vehicula, risus eget aliquam placerat,
|
||||
purus leo tincidunt eros, eget luctus quam orci in velit.
|
||||
Praesent scelerisque tortor sed accumsan convallis.</p>
|
||||
<h4>This is a Header level 4</h4>
|
||||
<p>Dictum at tempor commodo ullamcorper a lacus.
|
||||
Porttitor eget dolor morbi non arcu.
|
||||
Orci phasellus egestas tellus rutrum tellus pellentesque eu tincidunt.
|
||||
Risus pretium quam vulputate dignissim suspendisse in est ante.
|
||||
Quam vulputate dignissim suspendisse in est ante in nibh.
|
||||
In arcu cursus euismod quis viverra nibh cras pulvinar mattis. </p>
|
||||
<h5>This is a Header level 5</h5>
|
||||
<p>Chania is the capital of the Chania region on the island of Crete.
|
||||
The city can be divided in two parts, the old town and the modern city.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<hr>
|
||||
|
||||
<h2>Footer</h2>
|
||||
|
||||
<p>This is where stuff at the bottom of all pages would be found.</p>
|
||||
|
||||
<a href="#top">Jump to top</a>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -1 +0,0 @@
|
||||
winner_name
|
||||
@@ -1,83 +0,0 @@
|
||||
#!/usr/bin/env make
|
||||
#
|
||||
# winner_name - extract NAME handles from winners.html
|
||||
#
|
||||
# Copyright (c) 2023 by Landon Curt Noll. All Rights Reserved.
|
||||
#
|
||||
# Permission to use, copy, modify, and distribute this software and
|
||||
# its documentation for any purpose and without fee is hereby granted,
|
||||
# provided that the above copyright, this permission notice and text
|
||||
# this comment, and the disclaimer below appear in all of the following:
|
||||
#
|
||||
# supporting documentation
|
||||
# source copies
|
||||
# source works derived from this source
|
||||
# binaries derived from this source or from derived source
|
||||
#
|
||||
# LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
||||
# EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
||||
# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
# chongo (Landon Curt Noll, http://www.isthe.com/chongo/index.html) /\oo/\
|
||||
#
|
||||
# Share and enjoy! :-)
|
||||
|
||||
#############
|
||||
# utilities #
|
||||
#############
|
||||
|
||||
CC= cc
|
||||
CHMOD= chmod
|
||||
CP= cp
|
||||
INSTALL= install
|
||||
RM= rm
|
||||
SHELL= bash
|
||||
|
||||
#CFLAGS= -O3 -g3 --pedantic -Wall -Werror
|
||||
CFLAGS= -O3 -g3 --pedantic -Wall
|
||||
|
||||
######################
|
||||
# target information #
|
||||
######################
|
||||
|
||||
DESTDIR= ../../bin
|
||||
|
||||
TARGETS= winner_name
|
||||
|
||||
######################################
|
||||
# all - default rule - must be first #
|
||||
######################################
|
||||
|
||||
all: ${TARGETS}
|
||||
@:
|
||||
|
||||
winner_name: winner_name.sh
|
||||
${RM} -f -v $@
|
||||
${CP} -f -v $? $@
|
||||
${CHMOD} +x $@
|
||||
|
||||
#################################################
|
||||
# .PHONY list of rules that do not create files #
|
||||
#################################################
|
||||
|
||||
.PHONY: all configure clean clobber install
|
||||
|
||||
###################################
|
||||
# standard Makefile utility rules #
|
||||
###################################
|
||||
|
||||
configure:
|
||||
@:
|
||||
|
||||
clean:
|
||||
@:
|
||||
|
||||
clobber: clean
|
||||
rm -f ${TARGETS}
|
||||
|
||||
install: all
|
||||
${INSTALL} -m 0555 ${TARGETS} ${DESTDIR}
|
||||
@@ -1,147 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# winner_name - extract NAME tags from winners.html
|
||||
#
|
||||
# Print NAME tags from a winners.html. By default print just the winner_id renamed NAME tags.
|
||||
#
|
||||
# Copyright (c) 2023 by Landon Curt Noll. All Rights Reserved.
|
||||
#
|
||||
# Permission to use, copy, modify, and distribute this software and
|
||||
# its documentation for any purpose and without fee is hereby granted,
|
||||
# provided that the above copyright, this permission notice and text
|
||||
# this comment, and the disclaimer below appear in all of the following:
|
||||
#
|
||||
# supporting documentation
|
||||
# source copies
|
||||
# source works derived from this source
|
||||
# binaries derived from this source or from derived source
|
||||
#
|
||||
# LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
||||
# EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
||||
# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
# chongo (Landon Curt Noll, http://www.isthe.com/chongo/index.html) /\oo/\
|
||||
#
|
||||
# Share and enjoy! :-)
|
||||
|
||||
# setup
|
||||
#
|
||||
export VERSION="1.0 2023-05-15"
|
||||
NAME=$(basename "$0")
|
||||
export NAME
|
||||
#
|
||||
export A_FLAG=
|
||||
export V_FLAG=0
|
||||
export WINNERS_HTML="./winners.html"
|
||||
|
||||
# usage
|
||||
#
|
||||
export USAGE="usage: $0 [-h] [-v level] [-V] [-a] [winners.html]
|
||||
|
||||
-h print help message and exit
|
||||
-v level set verbosity level (def level: $V_FLAG)
|
||||
-V print version string and exit
|
||||
-a print all NAME tags (def: print just winner_id NAME tags)
|
||||
|
||||
winners.html path of winners.html (def: ./winners.html)
|
||||
|
||||
Exit codes:
|
||||
0 all OK
|
||||
1 winners.html does not exist, not a file, not readable
|
||||
2 -h and help string printed or -V and version string printed
|
||||
3 command line error
|
||||
>= 10 internal error
|
||||
|
||||
$NAME version: $VERSION"
|
||||
|
||||
# parse command line
|
||||
#
|
||||
while getopts :hv:Va flag; do
|
||||
case "$flag" in
|
||||
h) echo "$USAGE"
|
||||
exit 2
|
||||
;;
|
||||
v) V_FLAG="$OPTARG"
|
||||
;;
|
||||
V) echo "$VERSION"
|
||||
exit 2
|
||||
;;
|
||||
a) A_FLAG="true"
|
||||
;;
|
||||
\?) echo "$0: ERROR: invalid option: -$OPTARG" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
:) echo "$0: ERROR: option -$OPTARG requires an argument" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
*) echo "$0: ERROR: unexpected value from getopts: $flag" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
done
|
||||
if [[ $V_FLAG -ge 1 ]]; then
|
||||
echo "$0: debug[1]: debug level: $V_FLAG" 1>&2
|
||||
fi
|
||||
#
|
||||
# remove the options
|
||||
#
|
||||
shift $(( OPTIND - 1 ));
|
||||
#
|
||||
# verify arg count
|
||||
#
|
||||
if [[ $# -gt 1 ]]; then
|
||||
echo "$0: ERROR: expected 0 or 1 args, found: $#" 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
fi
|
||||
#
|
||||
# parse args
|
||||
#
|
||||
if [[ $# -gt 0 ]]; then
|
||||
export WINNERS_HTML="$1"
|
||||
fi
|
||||
|
||||
# firewall WINNERS_HTML must be a readable file
|
||||
#
|
||||
if [[ ! -e $WINNERS_HTML ]]; then
|
||||
echo "$0: ERROR: winners.html does not exist: $WINNERS_HTML" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
if [[ ! -f $WINNERS_HTML ]]; then
|
||||
echo "$0: ERROR: winners.html not a file: $WINNERS_HTML" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
if [[ ! -r $WINNERS_HTML ]]; then
|
||||
echo "$0: ERROR: winners.html not a readable file: $WINNERS_HTML" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# case: print only winner_id NAME tags
|
||||
#
|
||||
if [[ -z $A_FLAG ]]; then
|
||||
|
||||
grep -o -i '<a[[:space:]][[:space:]]*name[[:space:]]*=[[:space:]]*"[^"][^"]*"' "$WINNERS_HTML" |
|
||||
sed -e 's/^.*<[Aa][[:space:]][[:space:]]*[Nn][Aa][Mm][Ee][[:space:]]*=[[:space:]]*"//' -e 's/".*//' |
|
||||
grep '^[0-9A-Za-z][0-9A-Za-z]*_[0-9A-Za-z][0-9A-Za-z]*$'
|
||||
|
||||
# case: print all NAME tags
|
||||
#
|
||||
else
|
||||
|
||||
grep -o -i '<a[[:space:]][[:space:]]*name[[:space:]]*=[[:space:]]*"[^"][^"]*"' "$WINNERS_HTML" |
|
||||
sed -e 's/^.*<[Aa][[:space:]][[:space:]]*[Nn][Aa][Mm][Ee][[:space:]]*=[[:space:]]*"//' -e 's/".*//'
|
||||
fi
|
||||
|
||||
# All Done!!! All Done!!! -- Jessica Noll, Age 2
|
||||
#
|
||||
exit 0
|
||||
-502
@@ -1,502 +0,0 @@
|
||||
# tmp
|
||||
|
||||
The tools under this directory are an alpha release.
|
||||
The [bin directory](bin/index.html)
|
||||
holds the formal release of tools that will
|
||||
maintain the [official IOCCC website](https://www.ioccc.org).
|
||||
|
||||
Currently these tools maintain the [experimental website](https://ioccc-src.github.io/temp-test-ioccc/)
|
||||
by default, via the [temp-test-ioccc GitHub repo](https://github.com/ioccc-src/temp-test-ioccc).
|
||||
These tools will default to using the temp-test-ioccc repo and the experimental website
|
||||
until the [official IOCCC website](https://www.ioccc.org), via the
|
||||
[IOCCC winner repo](https://github.com/ioccc-src/winner) is ready for the mass pull request/merge.
|
||||
|
||||
**IMPORTANT**: The purpose of the `tmp` directory is to hold temporary files.
|
||||
The files in the `tmp` directory will go away leaving behind an empty `tmp` directory.
|
||||
|
||||
|
||||
## purpose
|
||||
|
||||
This documentation is here to help define terms, files under `tmp/`
|
||||
and the format of those files.
|
||||
|
||||
*NOTE*: The `terms` section may be moved to another file
|
||||
later on, after the contents of this directory are removed.
|
||||
|
||||
|
||||
## files
|
||||
|
||||
|
||||
### [OLD_manifest](OLD_manifest)
|
||||
|
||||
The files in the [OLD_manifest](OLD_manifest) were in the top of
|
||||
the tmp directory as of 2023 Oct 26. They represent the first
|
||||
complete manifest that matched the _YYYY/dir_ entry directories.
|
||||
|
||||
These files in this directory are kept as a temporary snapshot.
|
||||
|
||||
Some obsolete files and tools were moved under [OLD_manifest](OLD_manifest).
|
||||
|
||||
|
||||
### [README.md](README.md)
|
||||
|
||||
This file.
|
||||
|
||||
|
||||
### [author_handle.txt](author_handle.txt)
|
||||
|
||||
A text file containing `author_handle`s for each `author`: one `author_handle`
|
||||
per line.
|
||||
|
||||
|
||||
### [author_names.txt](author_names.txt)
|
||||
|
||||
A text file of full names of each `author`: one full name per line.
|
||||
|
||||
In the case of anonymous authors the form is:
|
||||
|
||||
```
|
||||
Anonymous YYYY
|
||||
```
|
||||
|
||||
|
||||
### [author_wins.csv](author_wins.csv)
|
||||
|
||||
The [author_wins.csv](author_wins.csv) is a CSV file that was exported from the
|
||||
[author_wins.numbers](author_wins.numbers) file.
|
||||
|
||||
In case of conflict, the data in [author_wins.numbers](author_wins.numbers) file is
|
||||
considered authoritative over the [author_wins.csv](author_wins.csv) file.
|
||||
|
||||
The [author_wins.csv.csv](author_wins.csv) is generated from the [author_wins.numbers](author_wins.numbers) file,
|
||||
via the [macOS](https://www.apple.com/macos/)
|
||||
[Numbers](https://www.apple.com/numbers/) spreadsheet app, as follows:
|
||||
|
||||
0. open [author_wins.numbers](author_wins.numbers) in numbers: modify if/as needed
|
||||
|
||||
1. File -> Export To -> CSV...
|
||||
* 1a. `[ ]` Include table names (unset)
|
||||
* 1b. Text Encoding: Unicode (UTF-8)
|
||||
* 1c. Click ((Save..))
|
||||
|
||||
2. Save As: author_wins.csv
|
||||
* 2a. Select the `tmp` directory
|
||||
|
||||
3. Click ((Export))
|
||||
* 3a. If needed click ((Replace))
|
||||
|
||||
4. Execute ./[fix_csv.sh](fix_csv.sh)
|
||||
|
||||
|
||||
### [author_wins.numbers](author_wins.numbers)
|
||||
|
||||
A [macOS](https://www.apple.com/macos) [Numbers](https://www.apple.com/numbers/)
|
||||
spreadsheet: one line per `author`.
|
||||
|
||||
The first field is an `author_handle`.
|
||||
|
||||
The other fields are the `entry_id`'s of all _YYYY/dir_ entry's won by the `author`.
|
||||
|
||||
|
||||
### [check_path_list.sh](check_path_list.sh)
|
||||
|
||||
Look for problems with path_list.required.txt, path_list.manifest.txt,
|
||||
and path_list.found.txt files. In particular, the files found in
|
||||
winning directories are compared with the list of required files
|
||||
as well as the complete manifest list of files.
|
||||
|
||||
If all is OK, [check_path_list.sh](check_path_list.sh) exits 0 and prints
|
||||
nothing. If there are missing required files, or extra files found
|
||||
then [check_path_list.sh](check_path_list.sh) will exit non-zero and
|
||||
print information about problems.
|
||||
|
||||
|
||||
### [echo.sh](echo.sh)
|
||||
|
||||
Tool that simply echos it arguments: used to test [run_all.sh](run_all.sh).
|
||||
|
||||
|
||||
### [entry_dir.txt](entry_dir.txt)
|
||||
|
||||
A list of paths to _YYYY/dir_ entry directories that reside
|
||||
under year directories.
|
||||
|
||||
|
||||
### [entry_id.txt](entry_id.txt)
|
||||
|
||||
A text file containing `entry_id` strings: one `entry_id` per line.
|
||||
|
||||
|
||||
### [example.author.json](example.author.json)
|
||||
|
||||
This is a JSON file containing an example `author/author_handle.json` for a
|
||||
fictitious `author`.
|
||||
|
||||
|
||||
### [example.dot_entry.json](example.dot_entry.json)
|
||||
|
||||
This is a JSON file containing an example `year/dir/.entry.json` for a
|
||||
fictitious winning _YYYY/dir_ entry.
|
||||
|
||||
A `year/dir/.entry.json` file will be derived from the contents the `year/dir/.id` file,
|
||||
the [author_wins.csv](author_wins.csv) file, the `year/dir/.year` file, and the
|
||||
the [manifest.csv](manifest.csv) file.
|
||||
|
||||
The 11 field names in [manifest.numbers](manifest.numbers) match
|
||||
the JSON member names found in
|
||||
[example.dot_entry.json](example.dot_entry.json).
|
||||
|
||||
|
||||
### [fix_csv.sh](fix_csv.sh)
|
||||
|
||||
This tool will fix CSV files exported by
|
||||
[macOS](https://www.apple.com/macos)
|
||||
[Numbers](https://www.apple.com/numbers/) by removing carriage
|
||||
returns and appending a newline if it was missing.
|
||||
|
||||
Fixing involves these actions:
|
||||
|
||||
``` <!---sh-->
|
||||
tr -d '\015' < input.csv > tmp.csv
|
||||
echo >> tmp.csv
|
||||
mv -f tmp.csv input.csv
|
||||
```
|
||||
|
||||
This tool also forms [path_list.built.txt](path_list.built.txt),
|
||||
[path_list.manifest.txt](path_list.manifest.txt), and
|
||||
[path_list.required.txt](path_list.required.txt) from
|
||||
[manifest.csv](manifest.csv).
|
||||
|
||||
|
||||
### [format-headers.sh](format-headers.sh)
|
||||
|
||||
This tool helped format the `README.md` files for _YYYY/dir_ winning entries.
|
||||
|
||||
|
||||
### [gen_entry_json.sh](gen_entry_json.sh)
|
||||
|
||||
Generate a `.entry.json` for a given winning _YYYY/dir_ entry.
|
||||
|
||||
|
||||
### [gen_path_list.found.sh](gen_path_list.found.sh)
|
||||
|
||||
The list of paths of files in all winning entries.
|
||||
|
||||
After doing a `make clobber` this tool updates, if needed,
|
||||
form [path_list.found.txt](path_list.found.txt).
|
||||
|
||||
|
||||
### [manifest.csv](manifest.csv)
|
||||
|
||||
The [manifest.csv](manifest.csv) is a CSV file that was exported from the
|
||||
[manifest.numbers](manifest.numbers) file.
|
||||
|
||||
In case of conflict, the data in [manifest.numbers](manifest.numbers) file is
|
||||
considered authoritative over the [manifest.csv](manifest.csv) file.
|
||||
|
||||
The [manifest.csv](manifest.csv) is generated from the [manifest.numbers](manifest.numbers) file,
|
||||
via the [macOS](https://www.apple.com/macos/)
|
||||
[Numbers](https://www.apple.com/numbers/) spreadsheet app, as follows:
|
||||
|
||||
0. open [manifest.numbers](manifest.numbers) in numbers: modify if/as needed
|
||||
|
||||
1. File -> Export To -> CSV...
|
||||
* 1a. `[ ]` Include table names (unset)
|
||||
* 1b. Text Encoding: Unicode (UTF-8)
|
||||
* 1c. Click ((Save..))
|
||||
|
||||
2. Save As: manifest.csv
|
||||
* 2a. Select the `tmp` directory
|
||||
|
||||
3. Click ((Export))
|
||||
* 3a. If needed click ((Replace))
|
||||
|
||||
4. Execute ./[fix_csv.sh](fix_csv.sh)
|
||||
|
||||
|
||||
### [manifest.numbers](manifest.numbers)
|
||||
|
||||
|
||||
A [macOS](https://www.apple.com/macos) [Numbers](https://www.apple.com/numbers/)
|
||||
spreadsheet contains information about files in _YYYY/dir_ entry directories under year directories.
|
||||
This file as the following fields:
|
||||
|
||||
1. year:
|
||||
|
||||
IOCCC year as a 4-character string. Normally this would be a 4 digit year string,
|
||||
however it may also be a string such as "mock".
|
||||
|
||||
NOTE: If year begins with "#", then dir is a comment, and the
|
||||
rest of the row is to be ignored. Rows of this form do NOT
|
||||
contain manifest information for a file.
|
||||
|
||||
2. dir:
|
||||
|
||||
Directory name number the IOCCC year.
|
||||
|
||||
3. path:
|
||||
|
||||
Path under the IOCCC/directory. In a few cases this is a path,
|
||||
not just a simple filename under the IOCCC/directory.
|
||||
|
||||
4. inventory_order:
|
||||
|
||||
This number is the rank showing the order
|
||||
that this file is to be listed for the given entry's in
|
||||
the winning entry's `index.html` file.
|
||||
|
||||
If the number is 9 digits or less, then the given file
|
||||
is considered a primary file when listed in the inventory
|
||||
of files for a given winning _YYYY/dir_ entry.
|
||||
|
||||
If the number is 10 digits or more, then the given file
|
||||
is considered a secondary file when listed in the inventory
|
||||
of files for a given winning _YYYY/dir_ entry We recommend using the
|
||||
value **4294967295** (2^32-1) for secondary files.
|
||||
|
||||
5. OK_to_edit:
|
||||
|
||||
If the value is `true`, then the file is one that may be
|
||||
edited directly.
|
||||
|
||||
If the value is `false`, then the file should **NOT** be
|
||||
edited, because the given file is generated by a tool.
|
||||
One should **NOT** modify such a file directly, but
|
||||
instead modify source files (i.e., markdown files,
|
||||
JSON files, etc.)
|
||||
|
||||
6. display_as:
|
||||
|
||||
The type of given file.
|
||||
|
||||
7. display_via_github
|
||||
|
||||
If `true`, then the contents of the file should be viewed
|
||||
via the GitHub repo.
|
||||
|
||||
If `false`, then the contents of the file should be viewed
|
||||
in the web browser directly. In some cases this may
|
||||
result in the file being downloaded instead of being displayed.
|
||||
|
||||
8. entry_text:
|
||||
|
||||
Any text that should be displayed at the end of line in `index.html`
|
||||
(with a preceding " - "), or null is no such text is to be displayed.
|
||||
|
||||
|
||||
The 8 field names in [manifest.numbers](manifest.numbers), must
|
||||
match the JSON member names found in
|
||||
[example.dot_entry.json](example.dot_entry.json).
|
||||
|
||||
NOTE: Cells containing true or false are JSON booleans.
|
||||
NOTE: All other cells are JSON strings that need to be double quoted, including the year.
|
||||
NOTE: Do not put commas, nor quotes, nor newlines in fields as these are bound to cause problems.
|
||||
|
||||
In case of conflict, the data in [manifest.numbers](manifest.numbers) file is
|
||||
considered authoritative over the [manifest.csv](manifest.csv) file.
|
||||
|
||||
|
||||
### [path_list.built.txt](path_list.built.txt)
|
||||
|
||||
A list of file paths (from the top directory) of _YYYY/dir_ entry directories,
|
||||
that are built from other primary content files.
|
||||
|
||||
These paths are formed from [manifest.numbers](manifest.numbers)
|
||||
entries where the "created_by" (5th) field is null. See
|
||||
[manifest.numbers](manifest.numbers) for details on the fields.
|
||||
|
||||
This file is formed by the [fix_csv.sh](fix_csv.sh) tool.
|
||||
|
||||
|
||||
### [path_list.found.txt](path_list.found.txt)
|
||||
|
||||
A list of files that exist, or should exist once the tools to generate certain files,
|
||||
such as the `index.html`, or the `.entry.json` files for each entry, are created.
|
||||
|
||||
This file is created by [gen_path_list.found.sh](gen_path_list.found.sh).
|
||||
|
||||
|
||||
### [path_list.manifest.txt](path_list.manifest.txt)
|
||||
|
||||
This is the list of file paths, both primary and constructed
|
||||
files from _YYYY/dir_ entry directories.
|
||||
|
||||
This file is formed by the [fix_csv.sh](fix_csv.sh) tool.
|
||||
|
||||
|
||||
### [path_list.required.txt](path_list.required.txt)
|
||||
|
||||
A list of file paths (from the top directory) of _YYYY/dir_ entry directories,
|
||||
that are required to exist.
|
||||
|
||||
These paths are formed from [manifest.numbers](manifest.numbers)
|
||||
entries where the "created_by" (5th) field is non-null. See
|
||||
[manifest.numbers](manifest.numbers) for details on the fields.
|
||||
|
||||
This file is formed by the [fix_csv.sh](fix_csv.sh) tool.
|
||||
|
||||
|
||||
### [run_all.sh](run_all.sh)
|
||||
|
||||
A tool to run another tool over all _YYYY/dir_ entry directories.
|
||||
|
||||
Examples:
|
||||
|
||||
``` <!---sh-->
|
||||
./run_all.sh -v 3 ./fake.gen_index.sh
|
||||
./run_all.sh -v 1 ./gen_entry_json.sh
|
||||
```
|
||||
|
||||
|
||||
## [md-chk-paths.sh](%%DOCROOT_SLASH%%tmp/md-chk-paths.sh)
|
||||
|
||||
Print full directories of local (non-remote URL) markdown paths.
|
||||
|
||||
Usage:
|
||||
|
||||
``` <!---sh-->
|
||||
tmp/md-chk-paths.sh
|
||||
```
|
||||
|
||||
|
||||
## [md-links.sh](%%DOCROOT_SLASH%%tmp/md-links.sh)
|
||||
|
||||
For all markdown files, print markdown links.
|
||||
|
||||
Usage:
|
||||
|
||||
``` <!---sh-->
|
||||
tmp/md-links.sh
|
||||
```
|
||||
|
||||
Lines printed are of the form:
|
||||
|
||||
```
|
||||
markdown_path.md [pseudo title](path)
|
||||
```
|
||||
|
||||
|
||||
## [md-local-links.sh](%%DOCROOT_SLASH%%tmp/md-local-links.sh)
|
||||
|
||||
For all markdown files, print markdown links that are local.
|
||||
We ignore URLs that start with "http:" or "https:" or "mailto:".
|
||||
We ignore links that are internal to the file (i.e., "#name").
|
||||
|
||||
Usage:
|
||||
|
||||
``` <!---sh-->
|
||||
tmp/md-local-links.sh
|
||||
```
|
||||
|
||||
Lines printed are of the form:
|
||||
|
||||
```
|
||||
markdown_path.md [pseudo title](path)
|
||||
```
|
||||
|
||||
|
||||
## [md-token-links.sh](%%DOCROOT_SLASH%%tmp/md-token-links.sh)
|
||||
|
||||
For all markdown files, print markdown links that start with a **%%TOKEN%%**.
|
||||
|
||||
Usage:
|
||||
|
||||
``` <!---sh-->
|
||||
tmp/md-token-links.sh
|
||||
```
|
||||
|
||||
Lines printed are of the form:
|
||||
|
||||
```
|
||||
markdown_path.md [pseudo title](%%TOKEN%%path)
|
||||
```
|
||||
|
||||
|
||||
## [md-link-paths.sh](%%DOCROOT_SLASH%%tmp/md-link-paths.sh(
|
||||
|
||||
Print local file paths referenced in markdown links.
|
||||
|
||||
We ignore URLs that start with "http:" or "https:" or "mailto:".
|
||||
We remove "%%REPO_URL%%/" and "%%DOCROOT_SLASH%%" from paths.
|
||||
We delete lines with "%%TOKEN%%" as this is just a test/example token.
|
||||
|
||||
Usage:
|
||||
|
||||
``` <!---sh-->
|
||||
tmp/md-link-paths.sh
|
||||
```
|
||||
|
||||
Lines printed are of the form:
|
||||
|
||||
```
|
||||
path
|
||||
```
|
||||
|
||||
|
||||
### [src](src)
|
||||
|
||||
This is a temporary location for potential tools that are used to
|
||||
build and maintain the www.ioccc.org website.
|
||||
|
||||
|
||||
### [things-todo.md](things-todo.md)
|
||||
|
||||
A todo list of known things to check and/or do.
|
||||
|
||||
|
||||
### [update-manifest.sh](update-manifest.sh)
|
||||
|
||||
Interactive script to update the IOCCC manifest step by step post manifest.csv export.
|
||||
|
||||
|
||||
### [year_prize.csv](year_prize.csv)
|
||||
|
||||
The [year_prize.csv](year_prize.csv) is a CSV file that was exported from the
|
||||
[year_prize.numbers](year_prize.numbers) file.
|
||||
|
||||
In case of conflict, the data in [year_prize.numbers](year_prize.numbers) file is
|
||||
considered authoritative over the [year_prize.csv](year_prize.csv) file.
|
||||
|
||||
The [year_prize.csv.csv](year_prize.csv) is generated from the [year_prizes.numbers](year_prize.numbers) file,
|
||||
via the [macOS](https://www.apple.com/macos/)
|
||||
[Numbers](https://www.apple.com/numbers/) spreadsheet app, as follows:
|
||||
|
||||
0. open [year_prize.numbers](year_prize.numbers) in numbers: modify if/as needed
|
||||
|
||||
1. File -> Export To -> CSV...
|
||||
* 1a. `[ ]` Include table names (unset)
|
||||
* 1b. Text Encoding: Unicode (UTF-8)
|
||||
* 1c. Click ((Save..))
|
||||
|
||||
2. Save As: year_prize.csv
|
||||
* 2a. Select the `tmp` directory
|
||||
|
||||
3. Click ((Export))
|
||||
* 3a. If needed click ((Replace))
|
||||
|
||||
4. Execute ./[fix_csv.sh](fix_csv.sh)
|
||||
|
||||
|
||||
### [year_prize.numbers](year_prize.numbers)
|
||||
|
||||
A [macOS](https://www.apple.com/macos) [Numbers](https://www.apple.com/numbers/)
|
||||
spreadsheet: one line per _YYYY/dir_ entry directory.
|
||||
|
||||
The first field is a `entry_id`.
|
||||
|
||||
The second field is the name of the award for given _YYYY/dir_ entry.
|
||||
|
||||
|
||||
<!--
|
||||
|
||||
Copyright © 1984-2024 by Landon Curt Noll. All Rights Reserved.
|
||||
|
||||
You are free to share and adapt this file under the terms of this license:
|
||||
|
||||
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
|
||||
For more information, see:
|
||||
|
||||
https://creativecommons.org/licenses/by-sa/4.0/
|
||||
|
||||
-->
|
||||
@@ -1,196 +0,0 @@
|
||||
Aaron_Grothe
|
||||
Adar_Zeitak
|
||||
Adrian_Cable
|
||||
Adrian_Mariano
|
||||
Aidan_Thornton
|
||||
Alan_De_Smet
|
||||
Albert_van_der_Horst
|
||||
Alex_Deckmyn
|
||||
Alexander_Prishchepov
|
||||
Anders_Gavare
|
||||
Andrea_Marangoni
|
||||
Andreas_Gustafsson
|
||||
Andrew_Shapiro
|
||||
Andy_Sloane
|
||||
Anonymous_1984
|
||||
Anonymous_2004
|
||||
Anonymous_2005
|
||||
Anonymous_2015
|
||||
Anthony_C_Howe
|
||||
Anton_Algmyr
|
||||
Arch_D_Robison
|
||||
Arne_Heizmann
|
||||
Baruch_Nissenbaum
|
||||
Bas_de_Bakker
|
||||
Ben_Lynn
|
||||
Bernd_Meyer
|
||||
Brent_Burley
|
||||
Brian_Westley
|
||||
Bruce_Holloway
|
||||
Bsoup
|
||||
Byron_Rakitzis
|
||||
Carl_Banks
|
||||
Carl_Shapiro
|
||||
Carlos_Duarte
|
||||
Cel_Skeggs
|
||||
Chris_King
|
||||
Christian_Dupont
|
||||
Christopher_Mills
|
||||
Christopher_Night
|
||||
Cody_Boone_Ferguson
|
||||
Col_G_L_Sicherman
|
||||
Craig_Schneiderwent
|
||||
Daniel_Fischer
|
||||
Daniel_J_Bernstein
|
||||
Daniel_Vik
|
||||
Dave_Burton
|
||||
Dave_Decot
|
||||
David_Applegate
|
||||
David_Gibson
|
||||
David_Goodenough
|
||||
David_Korn
|
||||
David_Madore
|
||||
David_Van_Brackle
|
||||
Dean_Swift
|
||||
Derek_Anderson
|
||||
Diomidis_Spinellis
|
||||
Dominik_Muth
|
||||
Don_Dodson
|
||||
Don_Yang
|
||||
Doron_Osovlanski
|
||||
Doug_Beardsley
|
||||
E_Jay_Berkenbilt
|
||||
Ed_Luke
|
||||
Ed_Lycklama
|
||||
Edward_Giles
|
||||
Edward_Rosten
|
||||
Eric_Marshall
|
||||
Eryk_Kopczynski
|
||||
Esko_Nuutila
|
||||
Etienne_Duble
|
||||
Fabrice_Bellard
|
||||
Ferenc_Deak
|
||||
Francois_Boutines
|
||||
Frans_van_Dorsselaer
|
||||
Freek_Wiedijk
|
||||
Garry_Glendown
|
||||
Gavin_Barraclough
|
||||
Gavin_Buttimore
|
||||
Gil_Dogon
|
||||
Glyn_Anderson
|
||||
Gopi_Reddy
|
||||
Gregor_Richards
|
||||
Heather_Downs
|
||||
Ian_Collier
|
||||
Ian_Phillipps
|
||||
Ilya_Kurdyukov
|
||||
Immanuel_Herrmann
|
||||
J_David_Lowe
|
||||
Jack_Applin
|
||||
James_A_Woods
|
||||
James_Bonfield
|
||||
Jan_Stein
|
||||
Jari_Arkko
|
||||
Jason_Orendorff
|
||||
Jay_Vosburgh
|
||||
Jeff_Newbern
|
||||
Jeff_Weisberg
|
||||
Jens_Schweikhardt
|
||||
Jetro_Lauha
|
||||
Jim_Hague
|
||||
John_Dalbec
|
||||
John_Tromp
|
||||
John_Williams
|
||||
Jon_Thingvold
|
||||
Jonathan_Hoyle
|
||||
Joshua_Karns
|
||||
Jyrki_Holopainen
|
||||
Karl_F_Fox
|
||||
Ken_Huffman
|
||||
Kevin_Pulo
|
||||
Kimmo_Fredriksson
|
||||
Larry_Jones
|
||||
Larry_Wall
|
||||
Laurion_Burchall
|
||||
Lennart_Augustsson
|
||||
Leonid_A_Broukhis
|
||||
Lord_Zarbon
|
||||
Maarten_Litmaath
|
||||
Marcin_Ciura
|
||||
Mark_Biggar
|
||||
Mark_Isaak
|
||||
Mark_Plummer
|
||||
Mark_Schnitzius
|
||||
Mary_Ann_Horton
|
||||
Matt_Zucker
|
||||
Maurizio_Monge
|
||||
Mauro_Persano
|
||||
Michael_Ash
|
||||
Michael_Birken
|
||||
Michael_H_Pawka
|
||||
Michael_Savastio
|
||||
Mike_Laman
|
||||
Moxen_N_Briddlebane
|
||||
NATORI_Shin
|
||||
Nathan_Otterness
|
||||
Nathan_Sidwell
|
||||
Neil_Mix
|
||||
Nicholas_Carlini
|
||||
Nick_Johnson
|
||||
Nicolas_Ollinger
|
||||
Ondrej_Adamovsky
|
||||
Ora_Lassila
|
||||
Oscar_Toledo
|
||||
Oskar_von_der_Luehe
|
||||
Paul_Dale
|
||||
Paul_E_Black
|
||||
Paul_Eggert
|
||||
Paul_Heckbert
|
||||
Peter_Eastman
|
||||
Peter_J_Ruczynski
|
||||
Peter_Klausler
|
||||
Philip_Blakely
|
||||
Pierre-Philippe_Coupard
|
||||
Qiming_HOU
|
||||
Raphael_Meyer
|
||||
Raymond_Cheong
|
||||
Robbert_van_Renesse
|
||||
Robert_Heckendorn
|
||||
Roemer_B_Lievaart
|
||||
Ron_McFarland
|
||||
Sandro_Maffiodo
|
||||
Scott_Vokes
|
||||
Sean_Barrett
|
||||
Sean_Dorward
|
||||
Sebastian_Deorowicz
|
||||
Selene_Makarios
|
||||
Seonghoon_Kang
|
||||
Shinichiro_Hamaji
|
||||
Sjoerd_Mullender
|
||||
Spencer_Hines
|
||||
Steinar_Hamre
|
||||
Stephen_Sykes
|
||||
Stig_Hemmer
|
||||
Szabolcs_Borsanyi
|
||||
Szymon_Rusinkiewicz
|
||||
Taketo_Konno
|
||||
Teemu_Rantanen
|
||||
Tero_Kivinen
|
||||
Thaddaeus_Frogley
|
||||
Thomas_A_Fine
|
||||
Thomas_P_John
|
||||
Thomas_Stewart
|
||||
Thor_Eldby
|
||||
Timo_Poikola
|
||||
Tom_Torfs
|
||||
Tony_Finch
|
||||
Tsoj
|
||||
Tsukasa_Hamano
|
||||
Uri_Goren
|
||||
V_Chia
|
||||
Vern_Paxson
|
||||
Vincent_Weaver
|
||||
Volker_Diels-Grabsch
|
||||
Walter_Bright
|
||||
Yusuke_Endoh
|
||||
Yves-Marie_Morgan
|
||||
@@ -1,196 +0,0 @@
|
||||
Aaron Grothe
|
||||
Adar Zeitak
|
||||
Adrian Cable
|
||||
Adrian Mariano
|
||||
Aidan Thornton
|
||||
Alan De Smet
|
||||
Albert van der Horst
|
||||
Alex Deckmyn
|
||||
Alexander Prishchepov
|
||||
Anders Gavare
|
||||
Andrea Marangoni
|
||||
Andreas Gustafsson
|
||||
Andrew T. Shapiro
|
||||
Andy Sloane
|
||||
Anonymous 1984
|
||||
Anonymous 2004
|
||||
Anonymous 2005
|
||||
Anonymous 2015
|
||||
Anthony C. Howe
|
||||
Anton Älgmyr
|
||||
Arch D. Robison
|
||||
Arne Timwi Heizmann
|
||||
Baruch Nissenbaum
|
||||
Bas de Bakker
|
||||
Ben Lynn
|
||||
Bernd Meyer
|
||||
Brent Burley
|
||||
Brian Westley
|
||||
Bruce Holloway
|
||||
Byron Rakitzis
|
||||
Carl Banks
|
||||
Carl Shapiro
|
||||
Carlos Duarte
|
||||
Cel Skeggs
|
||||
Chris King
|
||||
Christian Dupont
|
||||
Christopher Mills
|
||||
Christopher Night
|
||||
Cody Boone Ferguson
|
||||
Col. G. L. Sicherman
|
||||
Craig Schneiderwent
|
||||
Daniel Fischer
|
||||
Daniel J. Bernstein
|
||||
Daniel Vik
|
||||
Dave Burton
|
||||
Dave Decot
|
||||
David Applegate
|
||||
David Gibson
|
||||
David Goodenough
|
||||
David Korn
|
||||
David Madore
|
||||
David Van Brackle
|
||||
Dean Swift
|
||||
Derek Anderson
|
||||
Diomidis Spinellis
|
||||
Dominik Muth
|
||||
Don Dodson
|
||||
Don Yang
|
||||
Doron Osovlanski
|
||||
Doug Beardsley
|
||||
E. Jay Berkenbilt
|
||||
Ed Luke
|
||||
Ed Lycklama
|
||||
Edward Giles
|
||||
Edward Rosten
|
||||
Eric Marshall
|
||||
Eryk Kopczynski
|
||||
Esko Nuutila
|
||||
Etienne Duble
|
||||
Fabrice Bellard
|
||||
Ferenc Deak
|
||||
Francois Boutines
|
||||
Frans van Dorsselaer
|
||||
Freek Wiedijk
|
||||
Garry Glendown
|
||||
Gavin Barraclough
|
||||
Gavin Buttimore
|
||||
Gil Dogon
|
||||
Glyn Anderson
|
||||
Gopi Reddy
|
||||
Gregor Richards
|
||||
Heather Downs
|
||||
Ian Collier
|
||||
Ian Phillipps
|
||||
Ilya Kurdyukov
|
||||
Immanuel Herrmann
|
||||
J. David Lowe
|
||||
Jack Applin
|
||||
James A. Woods
|
||||
James Bonfield
|
||||
Jan Stein
|
||||
Jari Arkko
|
||||
Jason Orendorff
|
||||
Jay Vosburgh
|
||||
Jeff Newbern
|
||||
Jeff Weisberg
|
||||
Jens Schweikhardt
|
||||
Jetro Lauha
|
||||
Jim Hague
|
||||
John Dalbec
|
||||
John Tromp
|
||||
John Williams
|
||||
Jon Thingvold
|
||||
Jonathan Hoyle
|
||||
Joshua Karns
|
||||
Jyrki Holopainen
|
||||
Karl F. Fox
|
||||
Ken Huffman
|
||||
Kevin Pulo
|
||||
Kimmo Fredriksson
|
||||
Larry Jones
|
||||
Larry Wall
|
||||
Laurion Burchall
|
||||
Lennart Augustsson
|
||||
Leonid A. Broukhis
|
||||
Lord Zarbon
|
||||
Maarten Litmaath
|
||||
Marcin Ciura
|
||||
Mark Biggar
|
||||
Mark Isaak
|
||||
Mark Plummer
|
||||
Mark Schnitzius
|
||||
Mary Ann Horton
|
||||
Matt Zucker
|
||||
Maurizio Monge
|
||||
Mauro Persano
|
||||
Michael Ash
|
||||
Michael Birken
|
||||
Michael H. Pawka
|
||||
Michael Savastio
|
||||
Mike Laman
|
||||
Moxen N. Briddlebane
|
||||
NATORI Shin
|
||||
Nathan Otterness
|
||||
Nathan Sidwell
|
||||
Neil Mix
|
||||
Nicholas Carlini
|
||||
Nick Johnson
|
||||
Nicolas Ollinger
|
||||
Ondřej Adamovský
|
||||
Ora Lassila
|
||||
Oscar Toledo G.
|
||||
Oskar von der Luehe
|
||||
Paul Dale
|
||||
Paul E. Black
|
||||
Paul Eggert
|
||||
Paul Heckbert
|
||||
Peter Eastman
|
||||
Peter J Ruczynski
|
||||
Peter Klausler
|
||||
Philip Blakely
|
||||
Pierre-Philippe Coupard
|
||||
Qiming HOU
|
||||
Raphael Meyer
|
||||
Raymond Cheong
|
||||
Robbert van Renesse
|
||||
Robert Heckendorn
|
||||
Roemer B. Lievaart
|
||||
Ron McFarland
|
||||
Sandro Maffiodo
|
||||
Scott Vokes
|
||||
Sean Barrett
|
||||
Sean Dorward
|
||||
Sebastian Deorowicz
|
||||
Selene Makarios
|
||||
Seonghoon Kang
|
||||
Shinichiro Hamaji
|
||||
Sjoerd Mullender
|
||||
Spencer Hines
|
||||
Steinar Hamre
|
||||
Stephen Sykes
|
||||
Stig Hemmer
|
||||
Szabolcs Borsanyi
|
||||
Szymon Rusinkiewicz
|
||||
Taketo Konno
|
||||
Teemu Rantanen
|
||||
Tero Kivinen
|
||||
Thaddaeus Frogley
|
||||
Thomas A. Fine
|
||||
Thomas P John
|
||||
Thomas Stewart
|
||||
Thor Eldby
|
||||
Timo Poikola
|
||||
Tom Torfs
|
||||
Tony Finch
|
||||
Tsukasa Hamano
|
||||
Uri Goren
|
||||
V. Chia
|
||||
Vern Paxson
|
||||
Vincent Weaver
|
||||
Volker Diels-Grabsch
|
||||
Walter Bright
|
||||
Yusuke Endoh
|
||||
Yves-Marie Morgan
|
||||
bsoup
|
||||
tsoj
|
||||
@@ -1,198 +0,0 @@
|
||||
# author_handle,entry_id,entry_id,entry_id,…,,,,,,,,,,,,,,,
|
||||
Aaron_Grothe,2006_grothe,2012_grothe,,,,,,,,,,,,,,,,,
|
||||
Adar_Zeitak,2012_zeitak,,,,,,,,,,,,,,,,,,
|
||||
Adrian_Cable,2013_cable1,2013_cable2,2013_cable3,,,,,,,,,,,,,,,,
|
||||
Adrian_Mariano,1990_theorem,1992_adrian,,,,,,,,,,,,,,,,,
|
||||
Aidan_Thornton,2005_aidan,,,,,,,,,,,,,,,,,,
|
||||
Alan_De_Smet,1998_chaos,,,,,,,,,,,,,,,,,,
|
||||
Albert_van_der_Horst,1992_albert,,,,,,,,,,,,,,,,,,
|
||||
Alex_Deckmyn,2012_deckmyn,,,,,,,,,,,,,,,,,,
|
||||
Alexander_Prishchepov,2014_birken,,,,,,,,,,,,,,,,,,
|
||||
Anders_Gavare,2004_gavare,,,,,,,,,,,,,,,,,,
|
||||
Andrea_Marangoni,1992_marangon,,,,,,,,,,,,,,,,,,
|
||||
Andreas_Gustafsson,1992_gson,,,,,,,,,,,,,,,,,,
|
||||
Andrew_Shapiro,1994_shapiro,,,,,,,,,,,,,,,,,,
|
||||
Andy_Sloane,2006_sloane,,,,,,,,,,,,,,,,,,
|
||||
Anonymous_1984,1984_anonymous,,,,,,,,,,,,,,,,,,
|
||||
Anonymous_2001,2001_anonymous,,,,,,,,,,,,,,,,,,
|
||||
Anonymous_2004,2004_anonymous,,,,,,,,,,,,,,,,,,
|
||||
Anonymous_2005,2005_anon,,,,,,,,,,,,,,,,,,
|
||||
Anonymous_2015,2015_endoh1,,,,,,,,,,,,,,,,,,
|
||||
Anthony_C_Howe,1991_ant,1992_ant,1993_ant,2004_hibachi,2005_mynx,2015_howe,,,,,,,,,,,,,
|
||||
Anton_Algmyr,2018_algmyr,,,,,,,,,,,,,,,,,,
|
||||
Arch_D_Robison,1988_robison,1989_robison,2000_robison,2013_robison,,,,,,,,,,,,,,,
|
||||
Arne_Heizmann,2005_timwi,,,,,,,,,,,,,,,,,,
|
||||
Baruch_Nissenbaum,1990_baruch,,,,,,,,,,,,,,,,,,
|
||||
Bas_de_Bakker,1998_bas1,1998_bas2,,,,,,,,,,,,,,,,,
|
||||
Ben_Lynn,2019_lynn,,,,,,,,,,,,,,,,,,
|
||||
Bernd_Meyer,2000_bmeyer,,,,,,,,,,,,,,,,,,
|
||||
Brent_Burley,2004_burley,,,,,,,,,,,,,,,,,,
|
||||
Brian_Westley,1987_westley,1988_westley,1989_westley,1990_westley,1991_westley,1992_westley,1994_westley,1996_westley,2001_westley,,,,,,,,,,
|
||||
Bruce_Holloway,1986_holloway,,,,,,,,,,,,,,,,,,
|
||||
Bsoup,2011_hamaji,,,,,,,,,,,,,,,,,,
|
||||
Byron_Rakitzis,1990_tbr,,,,,,,,,,,,,,,,,,
|
||||
Carl_Banks,1998_banks,,,,,,,,,,,,,,,,,,
|
||||
Carl_Shapiro,1985_shapiro,,,,,,,,,,,,,,,,,,
|
||||
Carlos_Duarte,1995_cdua,,,,,,,,,,,,,,,,,,
|
||||
Cel_Skeggs,2014_skeggs,,,,,,,,,,,,,,,,,,
|
||||
Chris_King,2001_ctk,,,,,,,,,,,,,,,,,,
|
||||
Christian_Dupont,1991_cdupont,,,,,,,,,,,,,,,,,,
|
||||
Christopher_Mills,1990_cmills,1993_cmills,2013_mills,2015_mills1,2015_mills2,2018_mills,2019_mills,,,,,,,,,,,,
|
||||
Christopher_Night,2006_night,,,,,,,,,,,,,,,,,,
|
||||
Cody_Boone_Ferguson,2018_ferguson,2020_ferguson1,2020_ferguson2,,,,,,,,,,,,,,,,
|
||||
Col_G_L_Sicherman,1985_sicherman,,,,,,,,,,,,,,,,,,
|
||||
Craig_Schneiderwent,2000_schneiderwent,,,,,,,,,,,,,,,,,,
|
||||
Daniel_Fischer,1998_df,,,,,,,,,,,,,,,,,,
|
||||
Daniel_J_Bernstein,1991_brnstnd,,,,,,,,,,,,,,,,,,
|
||||
Daniel_Vik,2004_vik1,2004_vik2,2005_vik,2011_vik,2012_vik,2014_vik,,,,,,,,,,,,,
|
||||
Dave_Burton,2015_burton,2018_burton1,2018_burton2,2019_burton,2020_burton,,,,,,,,,,,,,,
|
||||
Dave_Decot,1984_decot,,,,,,,,,,,,,,,,,,
|
||||
David_Applegate,1991_davidguy,,,,,,,,,,,,,,,,,,
|
||||
David_Gibson,1993_dgibson,,,,,,,,,,,,,,,,,,
|
||||
David_Goodenough,1990_dg,,,,,,,,,,,,,,,,,,
|
||||
David_Korn,1987_korn,,,,,,,,,,,,,,,,,,
|
||||
David_Madore,2012_grothe,,,,,,,,,,,,,,,,,,
|
||||
David_Van_Brackle,1989_vanb,1993_vanb,1995_vanschnitz,,,,,,,,,,,,,,,,
|
||||
Dean_Swift,1996_gandalf,,,,,,,,,,,,,,,,,,
|
||||
Derek_Anderson,2018_anderson,,,,,,,,,,,,,,,,,,
|
||||
Diomidis_Spinellis,1988_spinellis,1990_dds,1991_dds,1995_spinellis,,,,,,,,,,,,,,,
|
||||
Dominik_Muth,2015_muth,,,,,,,,,,,,,,,,,,
|
||||
Don_Dodson,1994_dodsond1,1994_dodsond2,1995_dodsond1,1995_dodsond2,,,,,,,,,,,,,,,
|
||||
Don_Yang,2000_dhyang,2004_omoikane,2011_akari,2012_omoikane,2013_misaka,2014_sinon,2015_yang,2018_yang,2019_yang,2020_yang,,,,,,,,,
|
||||
Doron_Osovlanski,1990_baruch,,,,,,,,,,,,,,,,,,
|
||||
Doug_Beardsley,2001_dgbeards,,,,,,,,,,,,,,,,,,
|
||||
E_Jay_Berkenbilt,1993_ejb,,,,,,,,,,,,,,,,,,
|
||||
Ed_Luke,1992_lush,,,,,,,,,,,,,,,,,,
|
||||
Ed_Lycklama,1985_lycklama,,,,,,,,,,,,,,,,,,
|
||||
Edward_Giles,2018_giles,2019_giles,2020_giles,,,,,,,,,,,,,,,,
|
||||
Edward_Rosten,2001_rosten,,,,,,,,,,,,,,,,,,
|
||||
Eric_Marshall,1986_marshall,,,,,,,,,,,,,,,,,,
|
||||
Eryk_Kopczynski,2004_kopczynski,,,,,,,,,,,,,,,,,,
|
||||
Esko_Nuutila,1989_jar.2,,,,,,,,,,,,,,,,,,
|
||||
Etienne_Duble,2015_duble,2019_duble,,,,,,,,,,,,,,,,,
|
||||
Fabrice_Bellard,2000_bellard,2001_bellard,2018_bellard,,,,,,,,,,,,,,,,
|
||||
Ferenc_Deak,2014_deak,,,,,,,,,,,,,,,,,,
|
||||
Francois_Boutines,2005_boutines,,,,,,,,,,,,,,,,,,
|
||||
Frans_van_Dorsselaer,1998_dorssel,,,,,,,,,,,,,,,,,,
|
||||
Freek_Wiedijk,2014_wiedijk,,,,,,,,,,,,,,,,,,
|
||||
Garry_Glendown,1995_garry,,,,,,,,,,,,,,,,,,
|
||||
Gavin_Barraclough,2004_gavin,,,,,,,,,,,,,,,,,,
|
||||
Gavin_Buttimore,2000_thadgavin,,,,,,,,,,,,,,,,,,
|
||||
Gil_Dogon,2005_giljade,2015_dogon,2019_dogon,,,,,,,,,,,,,,,,
|
||||
Glyn_Anderson,2000_anderson,,,,,,,,,,,,,,,,,,
|
||||
Gopi_Reddy,1988_reddy,,,,,,,,,,,,,,,,,,
|
||||
Gregor_Richards,2011_richards,,,,,,,,,,,,,,,,,,
|
||||
Heather_Downs,1995_heathbar,1995_makarios,,,,,,,,,,,,,,,,,
|
||||
Ian_Collier,1992_imc,1994_imc,,,,,,,,,,,,,,,,,
|
||||
Ian_Phillipps,1988_phillipps,,,,,,,,,,,,,,,,,,
|
||||
Ilya_Kurdyukov,2020_kurdyukov1,2020_kurdyukov2,2020_kurdyukov3,2020_kurdyukov4,,,,,,,,,,,,,,,
|
||||
Immanuel_Herrmann,2001_herrmann1,2001_herrmann2,,,,,,,,,,,,,,,,,
|
||||
J_David_Lowe,1998_dlowe,1998_dloweneil,2000_dlowe,2011_dlowe,2012_dlowe,2013_dlowe,,,,,,,,,,,,,
|
||||
Jack_Applin,1985_applin,1986_applin,1988_applin,,,,,,,,,,,,,,,,
|
||||
James_A_Woods,1990_jaw,,,,,,,,,,,,,,,,,,
|
||||
James_Bonfield,1991_rince,1993_rince,2000_rince,,,,,,,,,,,,,,,,
|
||||
Jan_Stein,1986_stein,,,,,,,,,,,,,,,,,,
|
||||
Jari_Arkko,1989_jar.1,1989_jar.2,2000_jarijyrki,,,,,,,,,,,,,,,,
|
||||
Jason_Orendorff,2001_jason,,,,,,,,,,,,,,,,,,
|
||||
Jay_Vosburgh,1989_fubar,,,,,,,,,,,,,,,,,,
|
||||
Jeff_Newbern,2004_newbern,,,,,,,,,,,,,,,,,,
|
||||
Jeff_Weisberg,1994_weisberg,,,,,,,,,,,,,,,,,,
|
||||
Jens_Schweikhardt,1996_schweikh1,1996_schweikh2,1996_schweikh3,1998_schweikh1,1998_schweikh2,1998_schweikh3,2001_schweikh,2015_schweikhardt,,,,,,,,,,,
|
||||
Jetro_Lauha,2005_jetro,,,,,,,,,,,,,,,,,,
|
||||
Jim_Hague,1986_hague,,,,,,,,,,,,,,,,,,
|
||||
John_Dalbec,1996_dalbec,2004_jdalbec,,,,,,,,,,,,,,,,,
|
||||
John_Tromp,1989_tromp,2012_tromp,,,,,,,,,,,,,,,,,
|
||||
John_Williams,2001_williams,,,,,,,,,,,,,,,,,,
|
||||
Jon_Thingvold,1993_jonth,1996_jonth,,,,,,,,,,,,,,,,,
|
||||
Jonathan_Hoyle,2004_hoyle,,,,,,,,,,,,,,,,,,
|
||||
Joshua_Karns,2019_karns,,,,,,,,,,,,,,,,,,
|
||||
Jyrki_Holopainen,1993_lmfjyh,2000_jarijyrki,,,,,,,,,,,,,,,,,
|
||||
Karl_F_Fox,1990_jaw,,,,,,,,,,,,,,,,,,
|
||||
Ken_Huffman,1996_huffman,,,,,,,,,,,,,,,,,,
|
||||
Kevin_Pulo,2001_kev,,,,,,,,,,,,,,,,,,
|
||||
Kimmo_Fredriksson,2011_fredriksson,,,,,,,,,,,,,,,,,,
|
||||
Larry_Jones,1990_scjones,,,,,,,,,,,,,,,,,,
|
||||
Larry_Wall,1986_wall,1987_wall,,,,,,,,,,,,,,,,,
|
||||
Laurion_Burchall,1994_ldb,,,,,,,,,,,,,,,,,,
|
||||
Lennart_Augustsson,1985_august,1986_august,1996_august,,,,,,,,,,,,,,,,
|
||||
Leonid_A_Broukhis,1993_leo,1995_leo,,,,,,,,,,,,,,,,,
|
||||
Lord_Zarbon,2000_briddlebane,,,,,,,,,,,,,,,,,,
|
||||
Maarten_Litmaath,1988_litmaath,,,,,,,,,,,,,,,,,,
|
||||
Marcin_Ciura,2018_ciura,2019_ciura,,,,,,,,,,,,,,,,,
|
||||
Mark_Biggar,1987_biggar,,,,,,,,,,,,,,,,,,
|
||||
Mark_Isaak,1988_isaak,,,,,,,,,,,,,,,,,,
|
||||
Mark_Plummer,1993_plummer,,,,,,,,,,,,,,,,,,
|
||||
Mark_Schnitzius,1993_schnitzi,1994_schnitzi,1995_schnitzi,1995_vanschnitz,1998_schnitzi,2004_schnitzi,,,,,,,,,,,,,
|
||||
Mary_Ann_Horton,1994_horton,,,,,,,,,,,,,,,,,,
|
||||
Matt_Zucker,2011_zucker,,,,,,,,,,,,,,,,,,
|
||||
Maurizio_Monge,2006_monge,,,,,,,,,,,,,,,,,,
|
||||
Mauro_Persano,2005_persano,,,,,,,,,,,,,,,,,,
|
||||
Michael_Ash,2005_mikeash,,,,,,,,,,,,,,,,,,
|
||||
Michael_Birken,2006_birken,2013_birken,2014_birken,,,,,,,,,,,,,,,,
|
||||
Michael_H_Pawka,1986_pawka,,,,,,,,,,,,,,,,,,
|
||||
Michael_Savastio,1995_savastio,,,,,,,,,,,,,,,,,,
|
||||
Mike_Laman,1984_laman,,,,,,,,,,,,,,,,,,
|
||||
Moxen_N_Briddlebane,2000_briddlebane,,,,,,,,,,,,,,,,,,
|
||||
NATORI_Shin,2000_natori,,,,,,,,,,,,,,,,,,
|
||||
Nathan_Otterness,2020_otterness,,,,,,,,,,,,,,,,,,
|
||||
Nathan_Sidwell,1992_nathan,,,,,,,,,,,,,,,,,,
|
||||
Neil_Mix,1998_dloweneil,,,,,,,,,,,,,,,,,,
|
||||
Nicholas_Carlini,2020_carlini,,,,,,,,,,,,,,,,,,
|
||||
Nick_Johnson,2004_arachnid,,,,,,,,,,,,,,,,,,
|
||||
Nicolas_Ollinger,2001_ollinger,,,,,,,,,,,,,,,,,,
|
||||
Ondrej_Adamovsky,2019_adamovsky,,,,,,,,,,,,,,,,,,
|
||||
Ora_Lassila,1989_jar.2,,,,,,,,,,,,,,,,,,
|
||||
Oscar_Toledo,2005_toledo,2006_toledo1,2006_toledo2,2006_toledo3,2011_toledo,,,,,,,,,,,,,,
|
||||
Oskar_von_der_Luehe,1989_ovdluhe,,,,,,,,,,,,,,,,,,
|
||||
Paul_Dale,1988_dale,,,,,,,,,,,,,,,,,,
|
||||
Paul_E_Black,1989_paul,,,,,,,,,,,,,,,,,,
|
||||
Paul_Eggert,1990_jaw,,,,,,,,,,,,,,,,,,
|
||||
Paul_Heckbert,1987_heckbert,,,,,,,,,,,,,,,,,,
|
||||
Peter_Eastman,2011_eastman,,,,,,,,,,,,,,,,,,
|
||||
Peter_J_Ruczynski,1990_pjr,,,,,,,,,,,,,,,,,,
|
||||
Peter_Klausler,2005_klausler,,,,,,,,,,,,,,,,,,
|
||||
Philip_Blakely,2011_blakely,2012_blakely,,,,,,,,,,,,,,,,,
|
||||
Pierre-Philippe_Coupard,2001_coupard,,,,,,,,,,,,,,,,,,
|
||||
Qiming_HOU,2011_hou,2012_hou,2013_hou,2015_hou,2018_hou,,,,,,,,,,,,,,
|
||||
Raphael_Meyer,2006_meyer,,,,,,,,,,,,,,,,,,
|
||||
Raymond_Cheong,2000_primenum,2001_cheong,,,,,,,,,,,,,,,,,
|
||||
Robbert_van_Renesse,1984_mullender,,,,,,,,,,,,,,,,,,
|
||||
Robert_Heckendorn,1985_applin,,,,,,,,,,,,,,,,,,
|
||||
Roemer_B_Lievaart,1987_lievaart,1989_roemer,,,,,,,,,,,,,,,,,
|
||||
Ron_McFarland,1996_rcm,,,,,,,,,,,,,,,,,,
|
||||
Sandro_Maffiodo,2014_maffiodo1,2014_maffiodo2,,,,,,,,,,,,,,,,,
|
||||
Scott_Vokes,2018_vokes,,,,,,,,,,,,,,,,,,
|
||||
Sean_Barrett,1991_buzzard,1992_buzzard.1,1992_buzzard.2,,,,,,,,,,,,,,,,
|
||||
Sean_Dorward,1990_tbr,,,,,,,,,,,,,,,,,,
|
||||
Sebastian_Deorowicz,1995_esde,,,,,,,,,,,,,,,,,,
|
||||
Selene_Makarios,1995_heathbar,1995_makarios,,,,,,,,,,,,,,,,,
|
||||
Seonghoon_Kang,2012_kang,,,,,,,,,,,,,,,,,,
|
||||
Shinichiro_Hamaji,2011_hamaji,,,,,,,,,,,,,,,,,,
|
||||
Sjoerd_Mullender,1984_mullender,,,,,,,,,,,,,,,,,,
|
||||
Spencer_Hines,1987_hines,,,,,,,,,,,,,,,,,,
|
||||
Steinar_Hamre,2006_hamre,,,,,,,,,,,,,,,,,,
|
||||
Stephen_Sykes,2004_sds,2005_sykes,2006_sykes1,2006_sykes2,,,,,,,,,,,,,,,
|
||||
Stig_Hemmer,1990_stig,,,,,,,,,,,,,,,,,,
|
||||
Szabolcs_Borsanyi,2006_borsanyi,2011_borsanyi,,,,,,,,,,,,,,,,,
|
||||
Szymon_Rusinkiewicz,1994_smr,,,,,,,,,,,,,,,,,,
|
||||
Taketo_Konno,2011_konno,2012_konno,,,,,,,,,,,,,,,,,
|
||||
Teemu_Rantanen,1994_tvr,,,,,,,,,,,,,,,,,,
|
||||
Tero_Kivinen,1992_kivinen,,,,,,,,,,,,,,,,,,
|
||||
Thaddaeus_Frogley,2000_thadgavin,,,,,,,,,,,,,,,,,,
|
||||
Thomas_A_Fine,1991_fine,,,,,,,,,,,,,,,,,,
|
||||
Thomas_P_John,2000_tomx,,,,,,,,,,,,,,,,,,
|
||||
Thomas_Stewart,2006_stewart,,,,,,,,,,,,,,,,,,
|
||||
Thor_Eldby,1996_eldby,,,,,,,,,,,,,,,,,,
|
||||
Timo_Poikola,2018_poikola,2019_poikola,,,,,,,,,,,,,,,,,
|
||||
Tom_Torfs,1998_tomtorfs,,,,,,,,,,,,,,,,,,
|
||||
Tony_Finch,1998_fanf,,,,,,,,,,,,,,,,,,
|
||||
Tsoj,2020_tsoj,,,,,,,,,,,,,,,,,,
|
||||
Tsukasa_Hamano,2012_hamano,,,,,,,,,,,,,,,,,,
|
||||
Uri_Goren,2011_goren,,,,,,,,,,,,,,,,,,
|
||||
V_Chia,2005_chia,,,,,,,,,,,,,,,,,,
|
||||
Vern_Paxson,1992_vern,,,,,,,,,,,,,,,,,,
|
||||
Vincent_Weaver,2005_vince,,,,,,,,,,,,,,,,,,
|
||||
Volker_Diels-Grabsch,2019_diels-grabsch1,2019_diels-grabsch2,,,,,,,,,,,,,,,,,
|
||||
Walter_Bright,1986_bright,,,,,,,,,,,,,,,,,,
|
||||
Yusuke_Endoh,2012_endoh1,2012_endoh2,2013_endoh1,2013_endoh2,2013_endoh3,2013_endoh4,2014_endoh1,2014_endoh2,2015_endoh1,2015_endoh2,2015_endoh3,2015_endoh4,2018_endoh1,2018_endoh2,2019_endoh,2020_endoh1,2020_endoh2,2020_endoh3,
|
||||
Yves-Marie_Morgan,2013_morgan1,2013_morgan2,2014_morgan,,,,,,,,,,,,,,,,
|
||||
|
Binary file not shown.
@@ -1,89 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# check_path_list.sh - look for problems with path_list.* files
|
||||
#
|
||||
# XXX - This is a temporary utility that will be replaced when
|
||||
# the .entry.json files are built
|
||||
#
|
||||
|
||||
# setup
|
||||
#
|
||||
export REQUIRED_PATH_LIST="path_list.required.txt"
|
||||
export BUILT_PATH_LIST="path_list.built.txt"
|
||||
export MANIFEST_LIST="path_list.manifest.txt"
|
||||
export FOUND_LIST="path_list.found.txt"
|
||||
export EXIT_CODE=0
|
||||
|
||||
# firewall
|
||||
#
|
||||
if [[ ! -f $REQUIRED_PATH_LIST ]]; then
|
||||
echo "$0: ERROR: missing REQUIRED_PATH_LIST: $REQUIRED_PATH_LIST" 1>&2
|
||||
exit 10
|
||||
fi
|
||||
if [[ ! -s $REQUIRED_PATH_LIST ]]; then
|
||||
echo "$0: ERROR: REQUIRED_PATH_LIST is empty: $REQUIRED_PATH_LIST" 1>&2
|
||||
exit 11
|
||||
fi
|
||||
if [[ ! -f $BUILT_PATH_LIST ]]; then
|
||||
echo "$0: ERROR: missing BUILT_PATH_LIST: $BUILT_PATH_LIST" 1>&2
|
||||
exit 12
|
||||
fi
|
||||
if [[ ! -s $BUILT_PATH_LIST ]]; then
|
||||
echo "$0: ERROR: BUILT_PATH_LIST is empty: $BUILT_PATH_LIST" 1>&2
|
||||
exit 13
|
||||
fi
|
||||
if [[ ! -f $MANIFEST_LIST ]]; then
|
||||
echo "$0: ERROR: missing MANIFEST_LIST: $MANIFEST_LIST" 1>&2
|
||||
exit 14
|
||||
fi
|
||||
if [[ ! -s $MANIFEST_LIST ]]; then
|
||||
echo "$0: ERROR: MANIFEST_LIST is empty: $MANIFEST_LIST" 1>&2
|
||||
exit 15
|
||||
fi
|
||||
if [[ ! -f $FOUND_LIST ]]; then
|
||||
echo "$0: ERROR: missing FOUND_LIST: $FOUND_LIST" 1>&2
|
||||
exit 16
|
||||
fi
|
||||
if [[ ! -s $FOUND_LIST ]]; then
|
||||
echo "$0: ERROR: FOUND_LIST is empty: $FOUND_LIST" 1>&2
|
||||
exit 17
|
||||
fi
|
||||
|
||||
# look for missing required files
|
||||
#
|
||||
export TMP_FILE="tmp.$$.missing"
|
||||
trap 'rm -f $TMP_FILE; exit' 0 1 2 3 15
|
||||
comm -23 "$REQUIRED_PATH_LIST" "$FOUND_LIST" | sort -t/ > "$TMP_FILE"
|
||||
if [[ -s $TMP_FILE ]]; then
|
||||
COUNT=$(wc -l < "$TMP_FILE" | sed -e 's/^ *//')
|
||||
echo "# $0: Warning: missing required file count: $COUNT"
|
||||
EXIT_CODE=18 # exit 18
|
||||
echo "#"
|
||||
echo "# $0: missing required file list starts below"
|
||||
cat "$TMP_FILE"
|
||||
echo "# $0: missing required file list ends above"
|
||||
fi
|
||||
rm -f "$TMP_FILE"
|
||||
|
||||
# look for found files not in the manifest
|
||||
#
|
||||
export TMP_FILE="tmp.$$.missing"
|
||||
trap 'rm -f $TMP_FILE; exit' 0 1 2 3 15
|
||||
comm -13 "$MANIFEST_LIST" "$FOUND_LIST" | sort -t/ > "$TMP_FILE"
|
||||
if [[ -s $TMP_FILE ]]; then
|
||||
COUNT=$(wc -l < "$TMP_FILE" | sed -e 's/^ *//')
|
||||
echo "# $0: Warning: found files not in the manifest count: $COUNT"
|
||||
EXIT_CODE=19 # exit 19
|
||||
echo "#"
|
||||
echo "# $0: found files not in the manifest list starts below"
|
||||
cat "$TMP_FILE"
|
||||
echo "# $0: found files not in the manifest list ends above"
|
||||
fi
|
||||
rm -f "$TMP_FILE"
|
||||
|
||||
# All Done!!! All Done!!! -- Jessica Noll, Age 2
|
||||
#
|
||||
if [[ $EXIT_CODE -ne 0 ]]; then
|
||||
echo "$0: Warning: about to exit: $EXIT_CODE" 1>&2
|
||||
fi
|
||||
exit "$EXIT_CODE"
|
||||
@@ -1,9 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# echo.sh - echo arguments
|
||||
#
|
||||
# XXX - This is a temporary utility that will be removed when
|
||||
# the .entry.json files are built
|
||||
|
||||
echo "$@"
|
||||
exit 0
|
||||
@@ -1,321 +0,0 @@
|
||||
1984/anonymous
|
||||
1984/decot
|
||||
1984/laman
|
||||
1984/mullender
|
||||
1985/applin
|
||||
1985/august
|
||||
1985/lycklama
|
||||
1985/shapiro
|
||||
1985/sicherman
|
||||
1986/applin
|
||||
1986/august
|
||||
1986/bright
|
||||
1986/hague
|
||||
1986/holloway
|
||||
1986/marshall
|
||||
1986/pawka
|
||||
1986/stein
|
||||
1986/wall
|
||||
1987/biggar
|
||||
1987/heckbert
|
||||
1987/hines
|
||||
1987/korn
|
||||
1987/lievaart
|
||||
1987/wall
|
||||
1987/westley
|
||||
1988/applin
|
||||
1988/dale
|
||||
1988/isaak
|
||||
1988/litmaath
|
||||
1988/phillipps
|
||||
1988/reddy
|
||||
1988/robison
|
||||
1988/spinellis
|
||||
1988/westley
|
||||
1989/fubar
|
||||
1989/jar.1
|
||||
1989/jar.2
|
||||
1989/ovdluhe
|
||||
1989/paul
|
||||
1989/robison
|
||||
1989/roemer
|
||||
1989/tromp
|
||||
1989/vanb
|
||||
1989/westley
|
||||
1990/baruch
|
||||
1990/cmills
|
||||
1990/dds
|
||||
1990/dg
|
||||
1990/jaw
|
||||
1990/pjr
|
||||
1990/scjones
|
||||
1990/stig
|
||||
1990/tbr
|
||||
1990/theorem
|
||||
1990/westley
|
||||
1991/ant
|
||||
1991/brnstnd
|
||||
1991/buzzard
|
||||
1991/cdupont
|
||||
1991/davidguy
|
||||
1991/dds
|
||||
1991/fine
|
||||
1991/rince
|
||||
1991/westley
|
||||
1992/adrian
|
||||
1992/albert
|
||||
1992/ant
|
||||
1992/buzzard.1
|
||||
1992/buzzard.2
|
||||
1992/gson
|
||||
1992/imc
|
||||
1992/kivinen
|
||||
1992/lush
|
||||
1992/marangon
|
||||
1992/nathan
|
||||
1992/vern
|
||||
1992/westley
|
||||
1993/ant
|
||||
1993/cmills
|
||||
1993/dgibson
|
||||
1993/ejb
|
||||
1993/jonth
|
||||
1993/leo
|
||||
1993/lmfjyh
|
||||
1993/plummer
|
||||
1993/rince
|
||||
1993/schnitzi
|
||||
1993/vanb
|
||||
1994/dodsond1
|
||||
1994/dodsond2
|
||||
1994/horton
|
||||
1994/imc
|
||||
1994/ldb
|
||||
1994/schnitzi
|
||||
1994/shapiro
|
||||
1994/smr
|
||||
1994/tvr
|
||||
1994/weisberg
|
||||
1994/westley
|
||||
1995/cdua
|
||||
1995/dodsond1
|
||||
1995/dodsond2
|
||||
1995/esde
|
||||
1995/garry
|
||||
1995/heathbar
|
||||
1995/leo
|
||||
1995/makarios
|
||||
1995/savastio
|
||||
1995/schnitzi
|
||||
1995/spinellis
|
||||
1995/vanschnitz
|
||||
1996/august
|
||||
1996/dalbec
|
||||
1996/eldby
|
||||
1996/gandalf
|
||||
1996/huffman
|
||||
1996/jonth
|
||||
1996/rcm
|
||||
1996/schweikh1
|
||||
1996/schweikh2
|
||||
1996/schweikh3
|
||||
1996/westley
|
||||
1998/banks
|
||||
1998/bas1
|
||||
1998/bas2
|
||||
1998/chaos
|
||||
1998/df
|
||||
1998/dlowe
|
||||
1998/dloweneil
|
||||
1998/dorssel
|
||||
1998/fanf
|
||||
1998/schnitzi
|
||||
1998/schweikh1
|
||||
1998/schweikh2
|
||||
1998/schweikh3
|
||||
1998/tomtorfs
|
||||
2000/anderson
|
||||
2000/bellard
|
||||
2000/bmeyer
|
||||
2000/briddlebane
|
||||
2000/dhyang
|
||||
2000/dlowe
|
||||
2000/jarijyrki
|
||||
2000/natori
|
||||
2000/primenum
|
||||
2000/rince
|
||||
2000/robison
|
||||
2000/schneiderwent
|
||||
2000/thadgavin
|
||||
2000/tomx
|
||||
2001/anonymous
|
||||
2001/bellard
|
||||
2001/cheong
|
||||
2001/coupard
|
||||
2001/ctk
|
||||
2001/dgbeards
|
||||
2001/herrmann1
|
||||
2001/herrmann2
|
||||
2001/jason
|
||||
2001/kev
|
||||
2001/ollinger
|
||||
2001/rosten
|
||||
2001/schweikh
|
||||
2001/westley
|
||||
2001/williams
|
||||
2004/anonymous
|
||||
2004/arachnid
|
||||
2004/burley
|
||||
2004/gavare
|
||||
2004/gavin
|
||||
2004/hibachi
|
||||
2004/hoyle
|
||||
2004/jdalbec
|
||||
2004/kopczynski
|
||||
2004/newbern
|
||||
2004/omoikane
|
||||
2004/schnitzi
|
||||
2004/sds
|
||||
2004/vik1
|
||||
2004/vik2
|
||||
2005/aidan
|
||||
2005/anon
|
||||
2005/boutines
|
||||
2005/chia
|
||||
2005/giljade
|
||||
2005/jetro
|
||||
2005/klausler
|
||||
2005/mikeash
|
||||
2005/mynx
|
||||
2005/persano
|
||||
2005/sykes
|
||||
2005/timwi
|
||||
2005/toledo
|
||||
2005/vik
|
||||
2005/vince
|
||||
2006/birken
|
||||
2006/borsanyi
|
||||
2006/grothe
|
||||
2006/hamre
|
||||
2006/meyer
|
||||
2006/monge
|
||||
2006/night
|
||||
2006/sloane
|
||||
2006/stewart
|
||||
2006/sykes1
|
||||
2006/sykes2
|
||||
2006/toledo1
|
||||
2006/toledo2
|
||||
2006/toledo3
|
||||
2011/akari
|
||||
2011/blakely
|
||||
2011/borsanyi
|
||||
2011/dlowe
|
||||
2011/eastman
|
||||
2011/fredriksson
|
||||
2011/goren
|
||||
2011/hamaji
|
||||
2011/hou
|
||||
2011/konno
|
||||
2011/richards
|
||||
2011/toledo
|
||||
2011/vik
|
||||
2011/zucker
|
||||
2012/blakely
|
||||
2012/deckmyn
|
||||
2012/dlowe
|
||||
2012/endoh1
|
||||
2012/endoh2
|
||||
2012/grothe
|
||||
2012/hamano
|
||||
2012/hou
|
||||
2012/kang
|
||||
2012/konno
|
||||
2012/omoikane
|
||||
2012/tromp
|
||||
2012/vik
|
||||
2012/zeitak
|
||||
2013/birken
|
||||
2013/cable1
|
||||
2013/cable2
|
||||
2013/cable3
|
||||
2013/dlowe
|
||||
2013/endoh1
|
||||
2013/endoh2
|
||||
2013/endoh3
|
||||
2013/endoh4
|
||||
2013/hou
|
||||
2013/mills
|
||||
2013/misaka
|
||||
2013/morgan1
|
||||
2013/morgan2
|
||||
2013/robison
|
||||
2014/birken
|
||||
2014/deak
|
||||
2014/endoh1
|
||||
2014/endoh2
|
||||
2014/maffiodo1
|
||||
2014/maffiodo2
|
||||
2014/morgan
|
||||
2014/sinon
|
||||
2014/skeggs
|
||||
2014/vik
|
||||
2014/wiedijk
|
||||
2015/burton
|
||||
2015/dogon
|
||||
2015/duble
|
||||
2015/endoh1
|
||||
2015/endoh2
|
||||
2015/endoh3
|
||||
2015/endoh4
|
||||
2015/hou
|
||||
2015/howe
|
||||
2015/mills1
|
||||
2015/mills2
|
||||
2015/muth
|
||||
2015/schweikhardt
|
||||
2015/yang
|
||||
2018/algmyr
|
||||
2018/anderson
|
||||
2018/bellard
|
||||
2018/burton1
|
||||
2018/burton2
|
||||
2018/ciura
|
||||
2018/endoh1
|
||||
2018/endoh2
|
||||
2018/ferguson
|
||||
2018/giles
|
||||
2018/hou
|
||||
2018/mills
|
||||
2018/poikola
|
||||
2018/vokes
|
||||
2018/yang
|
||||
2019/adamovsky
|
||||
2019/burton
|
||||
2019/ciura
|
||||
2019/diels-grabsch1
|
||||
2019/diels-grabsch2
|
||||
2019/dogon
|
||||
2019/duble
|
||||
2019/endoh
|
||||
2019/giles
|
||||
2019/karns
|
||||
2019/lynn
|
||||
2019/mills
|
||||
2019/poikola
|
||||
2019/yang
|
||||
2020/burton
|
||||
2020/carlini
|
||||
2020/endoh1
|
||||
2020/endoh2
|
||||
2020/endoh3
|
||||
2020/ferguson1
|
||||
2020/ferguson2
|
||||
2020/giles
|
||||
2020/kurdyukov1
|
||||
2020/kurdyukov2
|
||||
2020/kurdyukov3
|
||||
2020/kurdyukov4
|
||||
2020/otterness
|
||||
2020/tsoj
|
||||
2020/yang
|
||||
@@ -1,321 +0,0 @@
|
||||
1984_anonymous
|
||||
1984_decot
|
||||
1984_laman
|
||||
1984_mullender
|
||||
1985_applin
|
||||
1985_august
|
||||
1985_lycklama
|
||||
1985_shapiro
|
||||
1985_sicherman
|
||||
1986_applin
|
||||
1986_august
|
||||
1986_bright
|
||||
1986_hague
|
||||
1986_holloway
|
||||
1986_marshall
|
||||
1986_pawka
|
||||
1986_stein
|
||||
1986_wall
|
||||
1987_biggar
|
||||
1987_heckbert
|
||||
1987_hines
|
||||
1987_korn
|
||||
1987_lievaart
|
||||
1987_wall
|
||||
1987_westley
|
||||
1988_applin
|
||||
1988_dale
|
||||
1988_isaak
|
||||
1988_litmaath
|
||||
1988_phillipps
|
||||
1988_reddy
|
||||
1988_robison
|
||||
1988_spinellis
|
||||
1988_westley
|
||||
1989_fubar
|
||||
1989_jar.1
|
||||
1989_jar.2
|
||||
1989_ovdluhe
|
||||
1989_paul
|
||||
1989_robison
|
||||
1989_roemer
|
||||
1989_tromp
|
||||
1989_vanb
|
||||
1989_westley
|
||||
1990_baruch
|
||||
1990_cmills
|
||||
1990_dds
|
||||
1990_dg
|
||||
1990_jaw
|
||||
1990_pjr
|
||||
1990_scjones
|
||||
1990_stig
|
||||
1990_tbr
|
||||
1990_theorem
|
||||
1990_westley
|
||||
1991_ant
|
||||
1991_brnstnd
|
||||
1991_buzzard
|
||||
1991_cdupont
|
||||
1991_davidguy
|
||||
1991_dds
|
||||
1991_fine
|
||||
1991_rince
|
||||
1991_westley
|
||||
1992_adrian
|
||||
1992_albert
|
||||
1992_ant
|
||||
1992_buzzard.1
|
||||
1992_buzzard.2
|
||||
1992_gson
|
||||
1992_imc
|
||||
1992_kivinen
|
||||
1992_lush
|
||||
1992_marangon
|
||||
1992_nathan
|
||||
1992_vern
|
||||
1992_westley
|
||||
1993_ant
|
||||
1993_cmills
|
||||
1993_dgibson
|
||||
1993_ejb
|
||||
1993_jonth
|
||||
1993_leo
|
||||
1993_lmfjyh
|
||||
1993_plummer
|
||||
1993_rince
|
||||
1993_schnitzi
|
||||
1993_vanb
|
||||
1994_dodsond1
|
||||
1994_dodsond2
|
||||
1994_horton
|
||||
1994_imc
|
||||
1994_ldb
|
||||
1994_schnitzi
|
||||
1994_shapiro
|
||||
1994_smr
|
||||
1994_tvr
|
||||
1994_weisberg
|
||||
1994_westley
|
||||
1995_cdua
|
||||
1995_dodsond1
|
||||
1995_dodsond2
|
||||
1995_esde
|
||||
1995_garry
|
||||
1995_heathbar
|
||||
1995_leo
|
||||
1995_makarios
|
||||
1995_savastio
|
||||
1995_schnitzi
|
||||
1995_spinellis
|
||||
1995_vanschnitz
|
||||
1996_august
|
||||
1996_dalbec
|
||||
1996_eldby
|
||||
1996_gandalf
|
||||
1996_huffman
|
||||
1996_jonth
|
||||
1996_rcm
|
||||
1996_schweikh1
|
||||
1996_schweikh2
|
||||
1996_schweikh3
|
||||
1996_westley
|
||||
1998_banks
|
||||
1998_bas1
|
||||
1998_bas2
|
||||
1998_chaos
|
||||
1998_df
|
||||
1998_dlowe
|
||||
1998_dloweneil
|
||||
1998_dorssel
|
||||
1998_fanf
|
||||
1998_schnitzi
|
||||
1998_schweikh1
|
||||
1998_schweikh2
|
||||
1998_schweikh3
|
||||
1998_tomtorfs
|
||||
2000_anderson
|
||||
2000_bellard
|
||||
2000_bmeyer
|
||||
2000_briddlebane
|
||||
2000_dhyang
|
||||
2000_dlowe
|
||||
2000_jarijyrki
|
||||
2000_natori
|
||||
2000_primenum
|
||||
2000_rince
|
||||
2000_robison
|
||||
2000_schneiderwent
|
||||
2000_thadgavin
|
||||
2000_tomx
|
||||
2001_anonymous
|
||||
2001_bellard
|
||||
2001_cheong
|
||||
2001_coupard
|
||||
2001_ctk
|
||||
2001_dgbeards
|
||||
2001_herrmann1
|
||||
2001_herrmann2
|
||||
2001_jason
|
||||
2001_kev
|
||||
2001_ollinger
|
||||
2001_rosten
|
||||
2001_schweikh
|
||||
2001_westley
|
||||
2001_williams
|
||||
2004_anonymous
|
||||
2004_arachnid
|
||||
2004_burley
|
||||
2004_gavare
|
||||
2004_gavin
|
||||
2004_hibachi
|
||||
2004_hoyle
|
||||
2004_jdalbec
|
||||
2004_kopczynski
|
||||
2004_newbern
|
||||
2004_omoikane
|
||||
2004_schnitzi
|
||||
2004_sds
|
||||
2004_vik1
|
||||
2004_vik2
|
||||
2005_aidan
|
||||
2005_anon
|
||||
2005_boutines
|
||||
2005_chia
|
||||
2005_giljade
|
||||
2005_jetro
|
||||
2005_klausler
|
||||
2005_mikeash
|
||||
2005_mynx
|
||||
2005_persano
|
||||
2005_sykes
|
||||
2005_timwi
|
||||
2005_toledo
|
||||
2005_vik
|
||||
2005_vince
|
||||
2006_birken
|
||||
2006_borsanyi
|
||||
2006_grothe
|
||||
2006_hamre
|
||||
2006_meyer
|
||||
2006_monge
|
||||
2006_night
|
||||
2006_sloane
|
||||
2006_stewart
|
||||
2006_sykes1
|
||||
2006_sykes2
|
||||
2006_toledo1
|
||||
2006_toledo2
|
||||
2006_toledo3
|
||||
2011_akari
|
||||
2011_blakely
|
||||
2011_borsanyi
|
||||
2011_dlowe
|
||||
2011_eastman
|
||||
2011_fredriksson
|
||||
2011_goren
|
||||
2011_hamaji
|
||||
2011_hou
|
||||
2011_konno
|
||||
2011_richards
|
||||
2011_toledo
|
||||
2011_vik
|
||||
2011_zucker
|
||||
2012_blakely
|
||||
2012_deckmyn
|
||||
2012_dlowe
|
||||
2012_endoh1
|
||||
2012_endoh2
|
||||
2012_grothe
|
||||
2012_hamano
|
||||
2012_hou
|
||||
2012_kang
|
||||
2012_konno
|
||||
2012_omoikane
|
||||
2012_tromp
|
||||
2012_vik
|
||||
2012_zeitak
|
||||
2013_birken
|
||||
2013_cable1
|
||||
2013_cable2
|
||||
2013_cable3
|
||||
2013_dlowe
|
||||
2013_endoh1
|
||||
2013_endoh2
|
||||
2013_endoh3
|
||||
2013_endoh4
|
||||
2013_hou
|
||||
2013_mills
|
||||
2013_misaka
|
||||
2013_morgan1
|
||||
2013_morgan2
|
||||
2013_robison
|
||||
2014_birken
|
||||
2014_deak
|
||||
2014_endoh1
|
||||
2014_endoh2
|
||||
2014_maffiodo1
|
||||
2014_maffiodo2
|
||||
2014_morgan
|
||||
2014_sinon
|
||||
2014_skeggs
|
||||
2014_vik
|
||||
2014_wiedijk
|
||||
2015_burton
|
||||
2015_dogon
|
||||
2015_duble
|
||||
2015_endoh1
|
||||
2015_endoh2
|
||||
2015_endoh3
|
||||
2015_endoh4
|
||||
2015_hou
|
||||
2015_howe
|
||||
2015_mills1
|
||||
2015_mills2
|
||||
2015_muth
|
||||
2015_schweikhardt
|
||||
2015_yang
|
||||
2018_algmyr
|
||||
2018_anderson
|
||||
2018_bellard
|
||||
2018_burton1
|
||||
2018_burton2
|
||||
2018_ciura
|
||||
2018_endoh1
|
||||
2018_endoh2
|
||||
2018_ferguson
|
||||
2018_giles
|
||||
2018_hou
|
||||
2018_mills
|
||||
2018_poikola
|
||||
2018_vokes
|
||||
2018_yang
|
||||
2019_adamovsky
|
||||
2019_burton
|
||||
2019_ciura
|
||||
2019_diels-grabsch1
|
||||
2019_diels-grabsch2
|
||||
2019_dogon
|
||||
2019_duble
|
||||
2019_endoh
|
||||
2019_giles
|
||||
2019_karns
|
||||
2019_lynn
|
||||
2019_mills
|
||||
2019_poikola
|
||||
2019_yang
|
||||
2020_burton
|
||||
2020_carlini
|
||||
2020_endoh1
|
||||
2020_endoh2
|
||||
2020_endoh3
|
||||
2020_ferguson1
|
||||
2020_ferguson2
|
||||
2020_giles
|
||||
2020_kurdyukov1
|
||||
2020_kurdyukov2
|
||||
2020_kurdyukov3
|
||||
2020_kurdyukov4
|
||||
2020_otterness
|
||||
2020_tsoj
|
||||
2020_yang
|
||||
@@ -1,21 +0,0 @@
|
||||
{
|
||||
"no_comment" : "mandatory comment: because comments were removed from the original JSON spec",
|
||||
"author_JSON_format_version" : "1.1 2024-02-11",
|
||||
"author_handle" : "first0_last0",
|
||||
"full_name" : "First Middle Last",
|
||||
"sort_word" : "lowercaselast",
|
||||
"location_code" : "AU",
|
||||
"email" : "user0@example.com",
|
||||
"url" : "https:\/\/a.host0.example.com\/index.html",
|
||||
"alt_url" : "https:\/\/b.host0.example.com\/index.html",
|
||||
"deprecated_twitter_handle" : "@something",
|
||||
"mastodon" : "@mastodon0@example.com",
|
||||
"mastodon_url" : "https:\/\/example.org\/@mastodon0",
|
||||
"github" : "@github0",
|
||||
"affiliation" : "an affiliation group",
|
||||
"winning_entry_set" : [
|
||||
{ "entry_id" : "1987_somedir" },
|
||||
{ "entry_id" : "2020_entrydir" },
|
||||
{ "entry_id" : "2024_dirname" }
|
||||
]
|
||||
}
|
||||
@@ -1,127 +0,0 @@
|
||||
{
|
||||
"no_comment" : "mandatory comment: because comments were removed from the original JSON spec",
|
||||
"entry_JSON_format_version" : "1.1 2024-02-11",
|
||||
"award" : "Award title",
|
||||
"year" : "2024",
|
||||
"dir" : "dirname",
|
||||
"entry_id" : "2024_dirname",
|
||||
"author_set" : [
|
||||
{ "author_handle" : "first0_last0" },
|
||||
{ "author_handle" : "first1_last1" },
|
||||
{ "author_handle" : "first2_last2" }
|
||||
],
|
||||
"manifest" : [
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 10,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : "prog.c",
|
||||
"inventory_order" : 20,
|
||||
"OK_to_edit" : true,
|
||||
"display_as" : "c",
|
||||
"display_via_github" : true,
|
||||
"entry_text" : "winning source"
|
||||
},
|
||||
{
|
||||
"file_path" : "Makefile",
|
||||
"inventory_order" : 30,
|
||||
"OK_to_edit" : true,
|
||||
"display_as" : "makefile",
|
||||
"display_via_github" : true,
|
||||
"entry_text" : "how to compile"
|
||||
},
|
||||
{
|
||||
"file_path" : "prog.alt.c",
|
||||
"inventory_order" : 40,
|
||||
"OK_to_edit" : true,
|
||||
"display_as" : "c",
|
||||
"display_via_github" : true,
|
||||
"entry_text" : "alternative source"
|
||||
},
|
||||
{
|
||||
"file_path" : "prog.orig.c",
|
||||
"inventory_order" : 50,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "c",
|
||||
"display_via_github" : true,
|
||||
"entry_text" : "original source"
|
||||
},
|
||||
{
|
||||
"file_path" : "chocolate_cake.jpg",
|
||||
"inventory_order" : 100,
|
||||
"OK_to_edit" : true,
|
||||
"display_as" : "image",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "required argument file"
|
||||
},
|
||||
{
|
||||
"file_path" : "magic.txt",
|
||||
"inventory_order" : 150,
|
||||
"OK_to_edit" : true,
|
||||
"display_as" : "text",
|
||||
"display_via_github" : true,
|
||||
"entry_text" : "data file"
|
||||
},
|
||||
{
|
||||
"file_path" : "special.src",
|
||||
"inventory_order" : 150,
|
||||
"OK_to_edit" : true,
|
||||
"display_as" : "text",
|
||||
"display_via_github" : true,
|
||||
"entry_text" : "special language source code"
|
||||
},
|
||||
{
|
||||
"file_path" : "raw_data.file",
|
||||
"inventory_order" : 180,
|
||||
"OK_to_edit" : true,
|
||||
"display_as" : "data",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "optional argument file"
|
||||
},
|
||||
{
|
||||
"file_path" : "spoiler.html",
|
||||
"inventory_order" : 200,
|
||||
"OK_to_edit" : true,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "SPOILER WARNING"
|
||||
},
|
||||
{
|
||||
"file_path" : "2024_dirname.tar.bz2",
|
||||
"inventory_order" : 300,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "tbz2",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "download winning source"
|
||||
},
|
||||
{
|
||||
"file_path" : ".gitignore",
|
||||
"inventory_order" : 4294967295,
|
||||
"OK_to_edit" : true,
|
||||
"display_as" : "gitignore",
|
||||
"display_via_github" : true,
|
||||
"entry_text" : "list of files that should not be committed under git"
|
||||
},
|
||||
{
|
||||
"file_path" : ".entry.json",
|
||||
"inventory_order" : 4294967295,
|
||||
"OK_to_edit" : true,
|
||||
"display_as" : "json",
|
||||
"display_via_github" : true,
|
||||
"entry_text" : "description of entry in JSON"
|
||||
},
|
||||
{
|
||||
"file_path" : "README.md",
|
||||
"inventory_order" : 4294967295,
|
||||
"OK_to_edit" : true,
|
||||
"display_as" : "markdown",
|
||||
"display_via_github" : true,
|
||||
"entry_text" : "markdown source for index.html"
|
||||
}
|
||||
]
|
||||
}
|
||||
-429
@@ -1,429 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# fix_csv - fix the exported CSV files, form path_list.* files
|
||||
#
|
||||
# When Apple numbers exports a CSV file from manifest.numbers,
|
||||
# and exports a CSV file from missing-manifest.numbers,
|
||||
# the CSV file lines are separated by carriage returns (\015)
|
||||
# and is not terminated by a newline. This script will "correct"
|
||||
# these issues.
|
||||
#
|
||||
# XXX - This is a temporary utility that will be removed when
|
||||
# the .entry.json files are built
|
||||
|
||||
# setup
|
||||
#
|
||||
export MANIFEST_CSV="manifest.csv"
|
||||
export TMP_CSV
|
||||
|
||||
if [[ ! -f $MANIFEST_CSV ]]; then
|
||||
echo "$0: ERROR: MANIFEST_CSV is missing: $MANIFEST_CSV" 1>&2
|
||||
exit 10
|
||||
fi
|
||||
if [[ ! -s $MANIFEST_CSV ]]; then
|
||||
echo "$0: ERROR: MANIFEST_CSV is empty: $MANIFEST_CSV" 1>&2
|
||||
exit 11
|
||||
fi
|
||||
|
||||
# setup temp manifest CSV file
|
||||
#
|
||||
TMP_CSV="tmp.$$.$MANIFEST_CSV"
|
||||
rm -f "$TMP_CSV"
|
||||
if [[ -e $TMP_CSV ]]; then
|
||||
echo "$0: ERROR: TMP_CSV cannot be removed: $TMP_CSV" 1>&2
|
||||
exit 12
|
||||
fi
|
||||
|
||||
# remove carriage returns in manifest CSV file
|
||||
#
|
||||
trap 'rm -f $TMP_CSV; exit' 0 1 2 3 15
|
||||
tr -d '\015' < "$MANIFEST_CSV" > "$TMP_CSV"
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
printf "$0: ERROR: TMP_CSV: tr -d '\\\015' < %s > %s failed, error: %s\n" "$MANIFEST_CSV" "$TMP_CSV" "$status" 1>&2
|
||||
exit 13
|
||||
fi
|
||||
if [[ ! -s $TMP_CSV ]]; then
|
||||
printf "$0: ERROR: TMP_CSV: tr -d '\\\015' < %s > %s produced an empty file" "$MANIFEST_CSV" "$TMP_CSV" 1>&2
|
||||
exit 14
|
||||
fi
|
||||
|
||||
# sanity check manifest CSV
|
||||
#
|
||||
|
||||
# check for double whitespace
|
||||
#
|
||||
trap 'rm -f $TMP_CSV $TMP_CHECK; exit' 0 1 2 3 15
|
||||
TMP_CHECK="tmp.$$.check"
|
||||
rm -f "$TMP_CHECK"
|
||||
grep -E '[[:space:]][[:space:]]' "$TMP_CSV" > "$TMP_CHECK"
|
||||
if [[ -s $TMP_CHECK ]]; then
|
||||
echo "$0: ERROR: found multiple consecutive whitespace in $MANIFEST_CSV" 1>&2
|
||||
echo "$0: Warning: consecutive whitespace lines from $MANIFEST_CSV starts below" 1>&2
|
||||
cat "$TMP_CHECK" 1>&2
|
||||
echo "$0: Warning: consecutive whitespace lines from $MANIFEST_CSV ends above" 1>&2
|
||||
exit 15
|
||||
fi
|
||||
|
||||
# check for leading whitespace
|
||||
#
|
||||
rm -f "$TMP_CHECK"
|
||||
grep -E ',[[:space:]]|^[[:space:]]' "$TMP_CSV" > "$TMP_CHECK"
|
||||
if [[ -s $TMP_CHECK ]]; then
|
||||
echo "$0: ERROR: found leading whitespace in $MANIFEST_CSV" 1>&2
|
||||
echo "$0: Warning: leading whitespace lines from $MANIFEST_CSV starts below" 1>&2
|
||||
cat "$TMP_CHECK" 1>&2
|
||||
echo "$0: Warning: leading whitespace lines from $MANIFEST_CSV ends above" 1>&2
|
||||
exit 16
|
||||
fi
|
||||
|
||||
# check for trailing whitespace
|
||||
#
|
||||
rm -f "$TMP_CHECK"
|
||||
grep -E '[[:space:]],|[[:space:]]$' "$TMP_CSV" > "$TMP_CHECK"
|
||||
if [[ -s $TMP_CHECK ]]; then
|
||||
echo "$0: ERROR: found trailing whitespace in $MANIFEST_CSV" 1>&2
|
||||
echo "$0: Warning: trailing whitespace lines from $MANIFEST_CSV starts below" 1>&2
|
||||
cat "$TMP_CHECK" 1>&2
|
||||
echo "$0: Warning: trailing whitespace lines from $MANIFEST_CSV ends above" 1>&2
|
||||
exit 17
|
||||
fi
|
||||
|
||||
# check for duplicate year,dir,file_path
|
||||
#
|
||||
rm -f "$TMP_CHECK"
|
||||
sed -e 's/^\([^,]*,[^,]*,[^,]*\).*/\1/' "$TMP_CSV" | sort | uniq -d > "$TMP_CHECK"
|
||||
if [[ -s $TMP_CHECK ]]; then
|
||||
echo "$0: ERROR: found duplicated year,dir,file_path in $MANIFEST_CSV" 1>&2
|
||||
echo "$0: Warning: duplicated year,dir,file_path in $MANIFEST_CSV starts below" 1>&2
|
||||
cat "$TMP_CHECK" 1>&2
|
||||
echo "$0: Warning: duplicated year,dir,file_path in $MANIFEST_CSV ends above" 1>&2
|
||||
exit 18
|
||||
fi
|
||||
|
||||
# check for ,TRUE,
|
||||
#
|
||||
rm -f "$TMP_CHECK"
|
||||
grep -E ',TRUE,|,TRUE$' "$TMP_CSV" > "$TMP_CHECK"
|
||||
if [[ -s $TMP_CHECK ]]; then
|
||||
echo "$0: ERROR: found ,TRUE, instead of ,true, in $MANIFEST_CSV" 1>&2
|
||||
echo "$0: Warning: lines with ,TRUE, $MANIFEST_CSV starts below" 1>&2
|
||||
cat "$TMP_CHECK" 1>&2
|
||||
echo "$0: Warning: lines with ,TRUE, $MANIFEST_CSV ends above" 1>&2
|
||||
exit 19
|
||||
fi
|
||||
|
||||
# check for ,FALSE,
|
||||
#
|
||||
rm -f "$TMP_CHECK"
|
||||
grep -E ',FALSE,|,FALSE$' "$TMP_CSV" > "$TMP_CHECK"
|
||||
if [[ -s $TMP_CHECK ]]; then
|
||||
echo "$0: ERROR: found ,FALSE, instead of ,false, in $MANIFEST_CSV" 1>&2
|
||||
echo "$0: Warning: lines with ,FALSE, $MANIFEST_CSV starts below" 1>&2
|
||||
cat "$TMP_CHECK" 1>&2
|
||||
echo "$0: Warning: lines with ,FALSE, $MANIFEST_CSV ends above" 1>&2
|
||||
exit 20
|
||||
fi
|
||||
|
||||
# check for ,null,
|
||||
#
|
||||
rm -f "$TMP_CHECK"
|
||||
grep -E ',null,|.,null$' "$TMP_CSV" > "$TMP_CHECK"
|
||||
if [[ -s $TMP_CHECK ]]; then
|
||||
echo "$0: ERROR: found ,null, in $MANIFEST_CSV" 1>&2
|
||||
echo "$0: Warning: lines with ,null, $MANIFEST_CSV starts below" 1>&2
|
||||
cat "$TMP_CHECK" 1>&2
|
||||
echo "$0: Warning: lines with ,null, $MANIFEST_CSV ends above" 1>&2
|
||||
exit 21
|
||||
fi
|
||||
rm -f "$TMP_CHECK"
|
||||
|
||||
# check for ,NULL,
|
||||
#
|
||||
rm -f "$TMP_CHECK"
|
||||
grep -E ',NULL,|,NULL$' "$TMP_CSV" > "$TMP_CHECK"
|
||||
if [[ -s $TMP_CHECK ]]; then
|
||||
echo "$0: ERROR: found ,NULL, in $MANIFEST_CSV" 1>&2
|
||||
echo "$0: Warning: lines with ,NULL, $MANIFEST_CSV starts below" 1>&2
|
||||
cat "$TMP_CHECK" 1>&2
|
||||
echo "$0: Warning: lines with ,NULL, $MANIFEST_CSV ends above" 1>&2
|
||||
exit 22
|
||||
fi
|
||||
rm -f "$TMP_CHECK"
|
||||
|
||||
# fix manifest CSV
|
||||
#
|
||||
|
||||
# sort manifest CSV file
|
||||
#
|
||||
# sort by: year dir file_path inventory_order everything_else
|
||||
#
|
||||
sort -t, -k1,1 -k2d,2 -k4g,4 -k3d,3 -k5d,8 "$TMP_CSV" -o "$TMP_CSV"
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
printf "$0: ERROR: sort -t, -k1,1 -k2d,2 -k4n,4 -k3d,3 -k5d,8 %s -o %s failed, error: %s\n" "$TMP_CSV" "$TMP_CSV" "$status" 1>&2
|
||||
exit 23
|
||||
fi
|
||||
|
||||
# append newline if last line of manifest CSV file if not empty
|
||||
#
|
||||
LAST_CHAR=$(tail -c 1 "$TMP_CSV")
|
||||
if [[ -n $LAST_CHAR ]]; then
|
||||
echo "" >> "$TMP_CSV"
|
||||
fi
|
||||
|
||||
# check for empty cells
|
||||
#
|
||||
rm -f "$TMP_CHECK"
|
||||
grep -E ',,|,$' "$TMP_CSV" > "$TMP_CHECK"
|
||||
if [[ -s $TMP_CHECK ]]; then
|
||||
echo "$0: ERROR: found ,empty cell in $MANIFEST_CSV" 1>&2
|
||||
echo "$0: Warning: lines with empty cell $MANIFEST_CSV starts below" 1>&2
|
||||
cat "$TMP_CHECK" 1>&2
|
||||
echo "$0: Warning: lines with empty cell $MANIFEST_CSV ends above" 1>&2
|
||||
exit 24
|
||||
fi
|
||||
rm -f "$TMP_CHECK"
|
||||
|
||||
# replace manifest CSV file if different
|
||||
#
|
||||
if ! cmp -s "$TMP_CSV" "$MANIFEST_CSV"; then
|
||||
|
||||
# replace CSV file with a better formatted version
|
||||
#
|
||||
echo "$0: updating $MANIFEST_CSV"
|
||||
mv -f -v "$TMP_CSV" "$MANIFEST_CSV"
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: mv -f -v $TMP_CSV $MANIFEST_CSV failed, error: $status" 1>&2
|
||||
exit 25
|
||||
fi
|
||||
|
||||
else
|
||||
|
||||
# CSV file is OK, remove the tmp file
|
||||
#
|
||||
rm -f "$TMP_CSV"
|
||||
if [[ -e $TMP_CSV ]]; then
|
||||
echo "$0: ERROR: TMP_CSV cannot be removed for cleanup: $TMP_CSV" 1>&2
|
||||
exit 26
|
||||
fi
|
||||
fi
|
||||
|
||||
# setup the full manifest path list
|
||||
#
|
||||
TMP_CSV="tmp.$$.$MANIFEST_CSV"
|
||||
sed -e '/^# -/d' "$MANIFEST_CSV" |
|
||||
sort -u |
|
||||
sort -t, -k1,1 -k2d,2 -k4g,4 -k3d,3 -k5d,10 > "$TMP_CSV"
|
||||
if [[ ! -s $TMP_CSV ]]; then
|
||||
echo "$0: ERROR: sorted $MANIFEST_CSV is empty" 1>&2
|
||||
exit 27
|
||||
fi
|
||||
if ! cmp -s "$TMP_CSV" "$MANIFEST_CSV"; then
|
||||
|
||||
# replace full CSV file if different
|
||||
#
|
||||
echo "$0: updating $MANIFEST_CSV"
|
||||
mv -f -v "$TMP_CSV" "$MANIFEST_CSV"
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: mv -f -v $TMP_CSV $MANIFEST_CSV failed, error: $status" 1>&2
|
||||
exit 28
|
||||
fi
|
||||
|
||||
else
|
||||
|
||||
# fill CSV file is OK, remove the tmp file
|
||||
#
|
||||
rm -f "$TMP_CSV"
|
||||
if [[ -e $TMP_CSV ]]; then
|
||||
echo "$0: ERROR: TMP_CSV cannot be removed for cleanup: $TMP_CSV" 1>&2
|
||||
exit 29
|
||||
fi
|
||||
fi
|
||||
|
||||
# build required file path list
|
||||
#
|
||||
export REQUIRED_PATH_LIST="path_list.required.txt"
|
||||
export TMP_FILE="tmp.$$.$REQUIRED_PATH_LIST"
|
||||
trap 'rm -f $TMP_FILE; exit' 0 1 2 3 15
|
||||
awk -F, '$1 !~ "^#" && ( $5 == "true" || $8 == "original source" ) { print $1 "/" $2 "/" $3; }' "$MANIFEST_CSV" | sort -t/ > "$TMP_FILE"
|
||||
if [[ ! -s $TMP_FILE ]]; then
|
||||
echo "$0: ERROR: TMP_FILE, for required file list, is empty: $TMP_CSV" 1>&2
|
||||
exit 30
|
||||
fi
|
||||
if ! cmp -s "$TMP_FILE" "$REQUIRED_PATH_LIST"; then
|
||||
|
||||
# replace required file
|
||||
#
|
||||
echo "$0: updating $REQUIRED_PATH_LIST"
|
||||
mv -f -v "$TMP_FILE" "$REQUIRED_PATH_LIST"
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: mv -f -v $TMP_FILE $REQUIRED_PATH_LIST failed, error: $status" 1>&2
|
||||
exit 31
|
||||
fi
|
||||
|
||||
else
|
||||
|
||||
# required file list is OK, remove the tmp file
|
||||
#
|
||||
rm -f "$TMP_FILE"
|
||||
if [[ -e $TMP_CSV ]]; then
|
||||
echo "$0: ERROR: TMP_FILE cannot be removed for cleanup: $TMP_FILE" 1>&2
|
||||
exit 32
|
||||
fi
|
||||
fi
|
||||
|
||||
# build the built file path list
|
||||
#
|
||||
export BUILT_PATH_LIST="path_list.built.txt"
|
||||
export TMP_FILE="tmp.$$.$BUILT_PATH_LIST"
|
||||
trap 'rm -f $TMP_FILE; exit' 0 1 2 3 15
|
||||
awk -F, '$1 !~ "^#" && $5 == "false" && $8 != "original source" { print $1 "/" $2 "/" $3; }' "$MANIFEST_CSV" | sort -t/ > "$TMP_FILE"
|
||||
if [[ ! -s $TMP_FILE ]]; then
|
||||
echo "$0: ERROR: TMP_FILE, for built file list, is empty: $TMP_CSV" 1>&2
|
||||
exit 33
|
||||
fi
|
||||
if ! cmp -s "$TMP_FILE" "$BUILT_PATH_LIST"; then
|
||||
|
||||
# replace built file
|
||||
#
|
||||
echo "$0: updating $BUILT_PATH_LIST"
|
||||
mv -f -v "$TMP_FILE" "$BUILT_PATH_LIST"
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: mv -f -v $TMP_FILE $BUILT_PATH_LIST failed, error: $status" 1>&2
|
||||
exit 34
|
||||
fi
|
||||
|
||||
else
|
||||
|
||||
# built file list is OK, remove the tmp file
|
||||
#
|
||||
rm -f "$TMP_FILE"
|
||||
if [[ -e $TMP_CSV ]]; then
|
||||
echo "$0: ERROR: TMP_FILE cannot be removed for cleanup: $TMP_FILE" 1>&2
|
||||
exit 35
|
||||
fi
|
||||
fi
|
||||
|
||||
# build manifest file list
|
||||
#
|
||||
export MANIFEST_LIST="path_list.manifest.txt"
|
||||
export TMP_FILE="tmp.$$.$BUILT_PATH_LIST"
|
||||
trap 'rm -f $TMP_FILE; exit' 0 1 2 3 15
|
||||
cat "$REQUIRED_PATH_LIST" "$BUILT_PATH_LIST" | sort -t/ > "$TMP_FILE"
|
||||
if [[ ! -s $TMP_FILE ]]; then
|
||||
echo "$0: ERROR: TMP_FILE, for manifest file list, is empty: $TMP_CSV" 1>&2
|
||||
exit 36
|
||||
fi
|
||||
if ! cmp -s "$TMP_FILE" "$MANIFEST_LIST"; then
|
||||
|
||||
# replace manifest file
|
||||
#
|
||||
echo "$0: updating $MANIFEST_LIST"
|
||||
mv -f -v "$TMP_FILE" "$MANIFEST_LIST"
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: mv -f -v $TMP_FILE $MANIFEST_LIST failed, error: $status" 1>&2
|
||||
exit 37
|
||||
fi
|
||||
|
||||
else
|
||||
|
||||
# manifest file list is OK, remove the tmp file
|
||||
#
|
||||
rm -f "$TMP_FILE"
|
||||
if [[ -e $TMP_CSV ]]; then
|
||||
echo "$0: ERROR: TMP_FILE cannot be removed for cleanup: $TMP_FILE" 1>&2
|
||||
exit 38
|
||||
fi
|
||||
fi
|
||||
|
||||
# fix other CSV files
|
||||
#
|
||||
# We will fix author_wins.csv, and year_prize.csv
|
||||
#
|
||||
for csv in author_wins.csv year_prize.csv; do
|
||||
|
||||
# verify that a CSV file exists
|
||||
#
|
||||
if [[ ! -f $csv ]]; then
|
||||
echo "$0: ERROR: CSV is missing: $csv" 1>&2
|
||||
exit 39
|
||||
fi
|
||||
if [[ ! -s $csv ]]; then
|
||||
echo "$0: ERROR: CSV is empty: $csv" 1>&2
|
||||
exit 40
|
||||
fi
|
||||
|
||||
# setup temp CSV file
|
||||
#
|
||||
TMP_CSV="tmp.$$.$csv"
|
||||
rm -f "$TMP_CSV"
|
||||
if [[ -e $TMP_CSV ]]; then
|
||||
echo "$0: ERROR: TMP_CSV cannot be removed: $TMP_CSV" 1>&2
|
||||
exit 41
|
||||
fi
|
||||
|
||||
# remove carriage returns in CSV file
|
||||
#
|
||||
trap 'rm -f $TMP_CSV; exit' 0 1 2 3 15
|
||||
tr -d '\015' < "$csv" > "$TMP_CSV"
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
printf "$0: ERROR: TMP_CSV: tr -d '\\\015' < %s > %s failed, error: %s\n" "$csv" "$TMP_CSV" "$status" 1>&2
|
||||
exit 42
|
||||
fi
|
||||
if [[ ! -s $TMP_CSV ]]; then
|
||||
printf "$0: ERROR: TMP_CSV: tr -d '\\\015' < %s > %s produced an empty file" "$csv" "$TMP_CSV" 1>&2
|
||||
exit 43
|
||||
fi
|
||||
|
||||
# sort CSV file
|
||||
#
|
||||
sort -t, -k1d,1 -k2d,2 "$TMP_CSV" -o "$TMP_CSV"
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
printf "$0: ERROR: sort -t, -k1d,1 -k2d,2 %s -o %s failed, error: %s\n" "$TMP_CSV" "$TMP_CSV" "$status" 1>&2
|
||||
exit 44
|
||||
fi
|
||||
|
||||
# append newline if last line of CSV file if not empty
|
||||
#
|
||||
LAST_CHAR=$(tail -c 1 "$TMP_CSV")
|
||||
if [[ -n $LAST_CHAR ]]; then
|
||||
echo "" >> "$TMP_CSV"
|
||||
fi
|
||||
|
||||
# replace CSV file if different
|
||||
#
|
||||
if ! cmp -s "$TMP_CSV" "$csv"; then
|
||||
|
||||
# replace CSV file with a better formatted version
|
||||
#
|
||||
echo "$0: updating $csv"
|
||||
mv -f -v "$TMP_CSV" "$csv"
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: mv -f -v $TMP_CSV $csv failed, error: $status" 1>&2
|
||||
exit 45
|
||||
fi
|
||||
|
||||
else
|
||||
|
||||
# CSV file is OK, remove the tmp file
|
||||
#
|
||||
rm -f "$TMP_CSV"
|
||||
if [[ -e $TMP_CSV ]]; then
|
||||
echo "$0: ERROR: TMP_CSV cannot be removed for cleanup: $TMP_CSV" 1>&2
|
||||
exit 46
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# All Done!!! All Done!!! -- Jessica Noll, Age 2
|
||||
#
|
||||
exit 0
|
||||
@@ -1,480 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# gen_entry_json.sh - generate .entry.json for an entry
|
||||
#
|
||||
# XXX - This is a temporary utility that will be replaced when
|
||||
# the .entry.json files are built.
|
||||
#
|
||||
# Copyright (c) 2023,2024 by Landon Curt Noll. All Rights Reserved.
|
||||
#
|
||||
# Permission to use, copy, modify, and distribute this software and
|
||||
# its documentation for any purpose and without fee is hereby granted,
|
||||
# provided that the above copyright, this permission notice and text
|
||||
# this comment, and the disclaimer below appear in all of the following:
|
||||
#
|
||||
# supporting documentation
|
||||
# source copies
|
||||
# source works derived from this source
|
||||
# binaries derived from this source or from derived source
|
||||
#
|
||||
# LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
||||
# EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
||||
# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
# chongo (Landon Curt Noll, http://www.isthe.com/chongo/index.html) /\oo/\
|
||||
#
|
||||
# Share and enjoy! :-)
|
||||
|
||||
# setup
|
||||
#
|
||||
export VERSION="1.1 2024-01-14"
|
||||
NAME=$(basename "$0"); export NAME
|
||||
export DOT_ENTRY_JSON_BASENAME=".entry.json"
|
||||
export ENTRY_JSON_FORMAT_VERSION="1.1 2024-02-11"
|
||||
export NO_COMMENT="mandatory comment: because comments were removed from the original JSON spec"
|
||||
export AUTHOR_WINS_CSV="author_wins.csv"
|
||||
export YEAR_PRIZE_CSV="year_prize.csv"
|
||||
export MANIFEST_CSV="manifest.csv"
|
||||
export PANDOC="/opt/homebrew/bin/pandoc"
|
||||
#
|
||||
export V_FLAG=0
|
||||
export DOMAIN="ioccc-src.github.io"
|
||||
export DOCPATH="/temp-test-ioccc"
|
||||
export GITHUB_REPO="https://github.com/ioccc-src/temp-test-ioccc/blob/master"
|
||||
export TOPDIR=".."
|
||||
|
||||
# usage
|
||||
#
|
||||
export USAGE="usage: $0 [-h] [-v level]
|
||||
[-d www.domain.org] [-p /path/to/docroot] [-g github_url ] [-t topdir] [-P /path/to/pandoc]
|
||||
year[/dir] [dir]
|
||||
|
||||
-h print help message and exit
|
||||
-v level set verbosity level (def level: $V_FLAG)
|
||||
|
||||
-d www.domain.org change domain (def: $DOMAIN)
|
||||
-p /path/to/docroot use path under domain to document root (def: $DOCPATH)
|
||||
-g github_url path to the GitHub repo (def: $GITHUB_REPO)
|
||||
-t topdir path to top of the local tree (def: $TOPDIR)
|
||||
-P /path/to/pandoc path to the pandoc tool (def: $PANDOC)
|
||||
|
||||
year[/dir] path ton entry directory (or just year if there is a path arg
|
||||
[dir] optionaln entry directory (1st arg is just year)
|
||||
|
||||
Exit codes:
|
||||
0 all OK
|
||||
2 -h and help string printed or -V and version string printed
|
||||
3 command line error
|
||||
4 cannot find writablen entry directory
|
||||
5 cannot find readable author_wins.csv
|
||||
6 cannot find readable year_prize.csv
|
||||
7 cannot find readable manifest.csv
|
||||
8 cannot find pandoc executable
|
||||
9 cannot determine the award for year/dir
|
||||
10 cannot determine authors of year/dir
|
||||
>= 20 internal error
|
||||
|
||||
$NAME version: $VERSION"
|
||||
|
||||
# parse command line
|
||||
#
|
||||
while getopts :hv:d:p:g:t:P: flag; do
|
||||
case "$flag" in
|
||||
h) echo "$USAGE"
|
||||
exit 2
|
||||
;;
|
||||
v) V_FLAG="$OPTARG"
|
||||
;;
|
||||
d) DOMAIN="$OPTARG"
|
||||
;;
|
||||
p) DOCPATH="$OPTARG"
|
||||
;;
|
||||
g) GITHUB_REPO="$OPTARG"
|
||||
;;
|
||||
t) TOPDIR="$OPTARG"
|
||||
;;
|
||||
P) PANDOC="$OPTARG"
|
||||
;;
|
||||
\?) echo "$0: ERROR: invalid option: -$OPTARG" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
:) echo "$0: ERROR: option -$OPTARG requires an argument" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
*) echo "$0: ERROR: unexpected value from getopts: $flag" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
done
|
||||
#
|
||||
# remove the options
|
||||
#
|
||||
shift $(( OPTIND - 1 ));
|
||||
#
|
||||
# verify arg count and parse args
|
||||
#
|
||||
export ENTRY_PATH
|
||||
export YEAR
|
||||
export ENTRY
|
||||
case "$#" in
|
||||
1) ENTRY_PATH="$1"
|
||||
YEAR="${ENTRY_PATH%/*}"
|
||||
ENTRY="${ENTRY_PATH#*/}"
|
||||
;;
|
||||
2) ENTRY_PATH="$1/$2"
|
||||
YEAR="$1"
|
||||
ENTRY="$2"
|
||||
;;
|
||||
*) echo "$0: ERROR: expected 1 or 2 args, found: $#" 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
export FULL_ENTRY_PATH="$TOPDIR/$ENTRY_PATH"
|
||||
export ENTRY_ID="${YEAR}_${ENTRY}"
|
||||
|
||||
export URL_PATH="https://$DOMAIN$DOCPATH/$YEAR/$ENTRY"
|
||||
|
||||
# setup temporary files
|
||||
#
|
||||
export ENTRY_JSON_PATH="$FULL_ENTRY_PATH/$DOT_ENTRY_JSON_BASENAME"
|
||||
export TMP_DOT_ENTRY_JSON="$FULL_ENTRY_PATH/tmp.$$.$DOT_ENTRY_JSON_BASENAME"
|
||||
trap 'rm -f $TMP_DOT_ENTRY_JSON' 0 1 2 3 15
|
||||
|
||||
# print running info if verbose
|
||||
#
|
||||
if [[ $V_FLAG -ge 5 ]]; then
|
||||
echo "$0: debug[5]: V_FLAG=$V_FLAG" 1>&2
|
||||
echo "$0: debug[5]: NAME=$NAME" 1>&2
|
||||
echo "$0: debug[5]: VERSION=$VERSION" 1>&2
|
||||
echo "$0: debug[5]: ENTRY_JSON_FORMAT_VERSION=$ENTRY_JSON_FORMAT_VERSION" 1>&2
|
||||
echo "$0: debug[5]: NO_COMMENT=$NO_COMMENT" 1>&2
|
||||
echo "$0: debug[5]: AUTHOR_WINS_CSV=$AUTHOR_WINS_CSV" 1>&2
|
||||
echo "$0: debug[5]: YEAR_PRIZE_CSV=$YEAR_PRIZE_CSV" 1>&2
|
||||
echo "$0: debug[5]: MANIFEST_CSV=$MANIFEST_CSV" 1>&2
|
||||
echo "$0: debug[5]: DOMAIN=$DOMAIN" 1>&2
|
||||
echo "$0: debug[5]: DOCPATH=$DOCPATH" 1>&2
|
||||
echo "$0: debug[5]: GITHUB_REPO=$GITHUB_REPO" 1>&2
|
||||
echo "$0: debug[5]: TOPDIR=$TOPDIR" 1>&2
|
||||
echo "$0: debug[5]: PANDOC=$PANDOC" 1>&2
|
||||
echo "$0: debug[5]: FULL_ENTRY_PATH=$FULL_ENTRY_PATH" 1>&2
|
||||
echo "$0: debug[5]: ENTRY_ID=$ENTRY_ID" 1>&2
|
||||
echo "$0: debug[5]: YEAR=$YEAR" 1>&2
|
||||
echo "$0: debug[5]: ENTRY=$ENTRY" 1>&2
|
||||
echo "$0: debug[5]: ENTRY_PATH=$ENTRY_PATH" 1>&2
|
||||
echo "$0: debug[5]: URL_PATH=$URL_PATH" 1>&2
|
||||
echo "$0: debug[5]: DOT_ENTRY_JSON_BASENAME=$DOT_ENTRY_JSON_BASENAME" 1>&2
|
||||
echo "$0: debug[5]: ENTRY_JSON_PATH=$ENTRY_JSON_PATH" 1>&2
|
||||
echo "$0: debug[5]: TMP_DOT_ENTRY_JSON=$TMP_DOT_ENTRY_JSON" 1>&2
|
||||
fi
|
||||
|
||||
# make is easier to process CSV files
|
||||
#
|
||||
IFS="$IFS,"
|
||||
|
||||
# verify entry directory is writable
|
||||
#
|
||||
if [[ ! -e $FULL_ENTRY_PATH ]]; then
|
||||
echo "$0: ERROR: FULL_ENTRY_PATH does not exist: $FULL_ENTRY_PATH" 1>&2
|
||||
exit 4
|
||||
fi
|
||||
if [[ ! -d $FULL_ENTRY_PATH ]]; then
|
||||
echo "$0: ERROR: FULL_ENTRY_PATH is not a directory: $FULL_ENTRY_PATH" 1>&2
|
||||
exit 4
|
||||
fi
|
||||
if [[ ! -w $FULL_ENTRY_PATH ]]; then
|
||||
echo "$0: ERROR: FULL_ENTRY_PATH is not a writable directory: $FULL_ENTRY_PATH" 1>&2
|
||||
exit 4
|
||||
fi
|
||||
|
||||
# verify author_wins.csv is readable
|
||||
#
|
||||
if [[ ! -e $AUTHOR_WINS_CSV ]]; then
|
||||
echo "$0: ERROR: AUTHOR_WINS_CSV does not exist: $AUTHOR_WINS_CSV" 1>&2
|
||||
exit 5
|
||||
fi
|
||||
if [[ ! -f $AUTHOR_WINS_CSV ]]; then
|
||||
echo "$0: ERROR: AUTHOR_WINS_CSV is not a file: $AUTHOR_WINS_CSV" 1>&2
|
||||
exit 5
|
||||
fi
|
||||
if [[ ! -r $AUTHOR_WINS_CSV ]]; then
|
||||
echo "$0: ERROR: AUTHOR_WINS_CSV is not a readable file: $AUTHOR_WINS_CSV" 1>&2
|
||||
exit 5
|
||||
fi
|
||||
|
||||
# verify year_prize.csv is readable
|
||||
#
|
||||
if [[ ! -e $YEAR_PRIZE_CSV ]]; then
|
||||
echo "$0: ERROR: YEAR_PRIZE_CSV does not exist: $YEAR_PRIZE_CSV" 1>&2
|
||||
exit 6
|
||||
fi
|
||||
if [[ ! -f $YEAR_PRIZE_CSV ]]; then
|
||||
echo "$0: ERROR: YEAR_PRIZE_CSV is not a file: $YEAR_PRIZE_CSV" 1>&2
|
||||
exit 6
|
||||
fi
|
||||
if [[ ! -r $YEAR_PRIZE_CSV ]]; then
|
||||
echo "$0: ERROR: YEAR_PRIZE_CSV is not a readable file: $YEAR_PRIZE_CSV" 1>&2
|
||||
exit 6
|
||||
fi
|
||||
|
||||
# verify manifest.csv is readable
|
||||
#
|
||||
if [[ ! -e $MANIFEST_CSV ]]; then
|
||||
echo "$0: ERROR: MANIFEST_CSV does not exist: $MANIFEST_CSV" 1>&2
|
||||
exit 7
|
||||
fi
|
||||
if [[ ! -f $MANIFEST_CSV ]]; then
|
||||
echo "$0: ERROR: MANIFEST_CSV is not a file: $MANIFEST_CSV" 1>&2
|
||||
exit 7
|
||||
fi
|
||||
if [[ ! -r $MANIFEST_CSV ]]; then
|
||||
echo "$0: ERROR: MANIFEST_CSV is not a readable file: $MANIFEST_CSV" 1>&2
|
||||
exit 7
|
||||
fi
|
||||
|
||||
# verify we have a pandoc executable
|
||||
#
|
||||
if [[ ! -x $PANDOC ]]; then
|
||||
echo "$0: ERROR: pandoc executable not found: $PANDOC" 1>&2
|
||||
exit 8
|
||||
fi
|
||||
|
||||
# determine award
|
||||
#
|
||||
AWARD=$(grep -E "^$ENTRY_ID," "$YEAR_PRIZE_CSV" | sed -e "s/^$ENTRY_ID,//")
|
||||
export AWARD
|
||||
if [[ -z $AWARD ]]; then
|
||||
echo "$0: ERROR: cannot find award for $ENTRY_ID in $YEAR_PRIZE_CSV" 1>&2
|
||||
exit 9
|
||||
fi
|
||||
if [[ $V_FLAG -ge 3 ]]; then
|
||||
echo "$0: debug[3]: AWARD for $ENTRY_ID: $AWARD" 1>&2
|
||||
fi
|
||||
|
||||
# determine author set
|
||||
#
|
||||
AUTHOR_SET=$(grep -E ",$ENTRY_ID," "$AUTHOR_WINS_CSV")
|
||||
declare -a AUTHOR
|
||||
while read -r author extra; do
|
||||
if [[ $V_FLAG -ge 5 ]]; then
|
||||
echo "$0: debug[5]: $ENTRY_ID extra: $extra"
|
||||
fi
|
||||
if [[ $V_FLAG -ge 3 ]]; then
|
||||
echo "$0: debug[3]: $ENTRY_ID author: $author"
|
||||
fi
|
||||
if [[ -z $author ]]; then
|
||||
echo "$0: ERROR: $ENTRY_ID empty author found in $AUTHOR_WINS_CSV with extra: $extra" 1>&2
|
||||
exit 10
|
||||
fi
|
||||
AUTHOR+=( "$author" )
|
||||
done <<< "$AUTHOR_SET"
|
||||
export AUTHOR_COUNT=${#AUTHOR[@]}
|
||||
if [[ $AUTHOR_COUNT -le 0 ]]; then
|
||||
echo "$0: ERROR: cannot find any authors for $ENTRY_ID" 1>&2
|
||||
exit 10
|
||||
fi
|
||||
if [[ $V_FLAG -ge 3 ]]; then
|
||||
echo "$0: debug[3]: author count for $ENTRY_ID: $AUTHOR_COUNT"
|
||||
fi
|
||||
|
||||
# collect inventory
|
||||
#
|
||||
NUMBER_RANKED_MANIFEST_SET=$(grep -E "^$YEAR,$ENTRY,[^,][^,]*,[0-9]" "$MANIFEST_CSV" | sort -t, -k4n)
|
||||
declare -a FILE_PATH INVENTORY_ORDER OK_TO_EDIT DISPLAY_AS DISPLAY_VIA_GITHUB ENTRY_TEXT
|
||||
#
|
||||
# process inventory with a numerical inventory_order
|
||||
#
|
||||
while IFS=, read -r year dir file_path inventory_order OK_to_edit display_as display_via_github entry_text extra; do
|
||||
|
||||
# firewall - year dir much match
|
||||
#
|
||||
if [[ $YEAR != "$year" ]]; then
|
||||
echo "$0: ERROR: ^$YEAR,$ENTRY inventory_order: $inventory_order YEAR: $YEAR != $year" 1>&2
|
||||
exit 30
|
||||
fi
|
||||
if [[ $ENTRY != "$dir" ]]; then
|
||||
echo "$0: ERROR: ^$YEAR,$ENTRY inventory_order: $inventory_order ENTRY: $ENTRY != $dir" 1>&2
|
||||
exit 31
|
||||
fi
|
||||
if [[ $V_FLAG -ge 7 ]]; then
|
||||
echo "$0: debug[7]: found: year: $year dir: $dir inventory_order: $inventory_order file_path: $file_path" 1>&2
|
||||
echo "$0: debug[7]: also: display_as: $display_as display_via_github: $display_via_github" 1>&2
|
||||
echo "$0: debug[7]: and: entry_text: $entry_text extra: $extra" 1>&2
|
||||
fi
|
||||
|
||||
# firewall - nothing except extra should be empty
|
||||
#
|
||||
if [[ -z $file_path ]]; then
|
||||
echo "$0: ERROR: ^$YEAR,$ENTRY inventory_order: $inventory_order empty file_path" 1>&2
|
||||
exit 32
|
||||
fi
|
||||
if [[ -z $inventory_order ]]; then
|
||||
echo "$0: ERROR: ^$YEAR,$ENTRY inventory_order: $inventory_order empty inventory_order" 1>&2
|
||||
exit 33
|
||||
fi
|
||||
if [[ -z $OK_to_edit ]]; then
|
||||
echo "$0: ERROR: ^$YEAR,$ENTRY inventory_order: $inventory_order empty OK_to_edit" 1>&2
|
||||
exit 34
|
||||
fi
|
||||
if [[ -z $display_as ]]; then
|
||||
echo "$0: ERROR: ^$YEAR,$ENTRY inventory_order: $inventory_order empty display_as" 1>&2
|
||||
exit 37
|
||||
fi
|
||||
if [[ -z $display_via_github ]]; then
|
||||
echo "$0: ERROR: ^$YEAR,$ENTRY inventory_order: $inventory_order empty display_via_github" 1>&2
|
||||
exit 38
|
||||
fi
|
||||
if [[ -z $entry_text ]]; then
|
||||
echo "$0: ERROR: ^$YEAR,$ENTRY inventory_order: $inventory_order empty entry_text" 1>&2
|
||||
exit 39
|
||||
fi
|
||||
|
||||
# save inventory information
|
||||
#
|
||||
FILE_PATH+=( "$file_path" )
|
||||
INVENTORY_ORDER+=( "$inventory_order" )
|
||||
OK_TO_EDIT+=( "$OK_to_edit" )
|
||||
DISPLAY_AS+=( "$display_as" )
|
||||
DISPLAY_VIA_GITHUB+=( "$display_via_github" )
|
||||
ENTRY_TEXT+=( "$entry_text" )
|
||||
done <<< "$NUMBER_RANKED_MANIFEST_SET"
|
||||
export FILE_COUNT=${#FILE_PATH[@]}
|
||||
if [[ $FILE_COUNT -le 0 ]]; then
|
||||
echo "$0: ERROR: cannot find files in manifest $MANIFEST_CSV for $ENTRY_ID" 1>&2
|
||||
exit 50
|
||||
fi
|
||||
if [[ $V_FLAG -ge 3 ]]; then
|
||||
echo "$0: debug[3]: manifest file count for $ENTRY_ID: $FILE_COUNT"
|
||||
fi
|
||||
|
||||
# write .entry.json
|
||||
#
|
||||
# write leading part of .entry.json
|
||||
#
|
||||
cat > "$TMP_DOT_ENTRY_JSON" << EOF
|
||||
{
|
||||
"no_comment" : "$NO_COMMENT",
|
||||
"entry_JSON_format_version" : "$ENTRY_JSON_FORMAT_VERSION",
|
||||
"award" : "$AWARD",
|
||||
"year" : $YEAR,
|
||||
"dir" : "$ENTRY",
|
||||
"entry_id" : "$ENTRY_ID",
|
||||
"author_set" : [
|
||||
EOF
|
||||
#
|
||||
# write author_handle part of .entry.json
|
||||
#
|
||||
((AUTHOR_COUNT_LESS_1=AUTHOR_COUNT-1))
|
||||
for i in "${!AUTHOR[@]}"; do
|
||||
# stupid JSON syntax does not allow a trailing comma
|
||||
if [[ $i -lt "$AUTHOR_COUNT_LESS_1" ]]; then
|
||||
cat >> "$TMP_DOT_ENTRY_JSON" << EOF
|
||||
{ "author_handle" : "${AUTHOR[$i]}" },
|
||||
EOF
|
||||
else
|
||||
cat >> "$TMP_DOT_ENTRY_JSON" << EOF
|
||||
{ "author_handle" : "${AUTHOR[$i]}" }
|
||||
EOF
|
||||
fi
|
||||
done
|
||||
#
|
||||
# write start of manifest of .entry.json
|
||||
#
|
||||
cat >> "$TMP_DOT_ENTRY_JSON" << EOF
|
||||
],
|
||||
"manifest" : [
|
||||
EOF
|
||||
((FILE_COUNT_LESS_1=FILE_COUNT-1))
|
||||
#
|
||||
# write each file in the manifest of .entry.json
|
||||
#
|
||||
for i in "${!INVENTORY_ORDER[@]}"; do
|
||||
|
||||
#
|
||||
# write start and file_path of a given file in manifest of .entry.json
|
||||
# write inventory_order of a given file in manifest of .entry.json
|
||||
# write OK_to_edit of a given file in manifest of .entry.json
|
||||
# write display_as of a given file in manifest of .entry.json
|
||||
# write display_via_github of a given file in manifest of .entry.json
|
||||
# write entry_text of a given file in manifest of .entry.json
|
||||
#
|
||||
cat >> "$TMP_DOT_ENTRY_JSON" << EOF
|
||||
{
|
||||
"file_path" : "${FILE_PATH[$i]}",
|
||||
"inventory_order" : ${INVENTORY_ORDER[$i]},
|
||||
"OK_to_edit" : ${OK_TO_EDIT[$i]},
|
||||
"display_as" : "${DISPLAY_AS[$i]}",
|
||||
"display_via_github" : ${DISPLAY_VIA_GITHUB[$i]},
|
||||
"entry_text" : "${ENTRY_TEXT[$i]}"
|
||||
EOF
|
||||
|
||||
# stupid JSON syntax does not allow a trailing comma
|
||||
if [[ $i -lt "$FILE_COUNT_LESS_1" ]]; then
|
||||
cat >> "$TMP_DOT_ENTRY_JSON" << EOF
|
||||
},
|
||||
EOF
|
||||
else
|
||||
cat >> "$TMP_DOT_ENTRY_JSON" << EOF
|
||||
}
|
||||
EOF
|
||||
fi
|
||||
done
|
||||
|
||||
#
|
||||
# write trailing part of .entry.json
|
||||
#
|
||||
cat >> "$TMP_DOT_ENTRY_JSON" << EOF
|
||||
]
|
||||
}
|
||||
EOF
|
||||
if [[ $V_FLAG -ge 7 ]]; then
|
||||
echo "$0: debug[7]: start of TMP_DOT_ENTRY_JSON below: $TMP_DOT_ENTRY_JSON" 1>&2
|
||||
cat "$TMP_DOT_ENTRY_JSON" 1>&2
|
||||
echo "$0: debug[7]: end of TMP_DOT_ENTRY_JSON above: $TMP_DOT_ENTRY_JSON" 1>&2
|
||||
fi
|
||||
|
||||
# update .entry.json if needed
|
||||
#
|
||||
if ! cmp -s "$TMP_DOT_ENTRY_JSON" "$ENTRY_JSON_PATH"; then
|
||||
|
||||
# replace index.html file
|
||||
#
|
||||
if [[ $V_FLAG -ge 1 ]]; then
|
||||
echo "$0: debug[1]: updating $ENTRY_JSON_PATH"
|
||||
fi
|
||||
if [[ $V_FLAG -ge 3 ]]; then
|
||||
mv -f -v "$TMP_DOT_ENTRY_JSON" "$ENTRY_JSON_PATH"
|
||||
status="$?"
|
||||
else
|
||||
mv -f "$TMP_DOT_ENTRY_JSON" "$ENTRY_JSON_PATH"
|
||||
status="$?"
|
||||
fi
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: mv -f -v $TMP_DOT_ENTRY_JSON $ENTRY_JSON_PATH failed, error: $status" 1>&2
|
||||
exit 100
|
||||
fi
|
||||
|
||||
else
|
||||
|
||||
# index.html is OK, remove the tmp file
|
||||
#
|
||||
rm -f "$TMP_DOT_ENTRY_JSON"
|
||||
if [[ -e $TMP_DOT_ENTRY_JSON ]]; then
|
||||
echo "$0: ERROR: TMP_DOT_ENTRY_JSON cannot be removed for cleanup: $TMP_DOT_ENTRY_JSON" 1>&2
|
||||
exit 101
|
||||
fi
|
||||
fi
|
||||
|
||||
# All Done!!! All Done!!! -- Jessica Noll, Age 2
|
||||
#
|
||||
exit 0
|
||||
@@ -1,164 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# gen_path_list.found.sh - generate tmp/path_list.found.txt for entry
|
||||
# directories under a year
|
||||
#
|
||||
# XXX - This is a temporary utility that will be replaced when
|
||||
# the .entry.json files are built.
|
||||
#
|
||||
# Copyright (c) 2023 by Landon Curt Noll. All Rights Reserved.
|
||||
#
|
||||
# Permission to use, copy, modify, and distribute this software and
|
||||
# its documentation for any purpose and without fee is hereby granted,
|
||||
# provided that the above copyright, this permission notice and text
|
||||
# this comment, and the disclaimer below appear in all of the following:
|
||||
#
|
||||
# supporting documentation
|
||||
# source copies
|
||||
# source works derived from this source
|
||||
# binaries derived from this source or from derived source
|
||||
#
|
||||
# LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
||||
# EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
||||
# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
# chongo (Landon Curt Noll, http://www.isthe.com/chongo/index.html) /\oo/\
|
||||
#
|
||||
# Share and enjoy! :-)
|
||||
|
||||
# setup
|
||||
#
|
||||
export VERSION="1.1 2024-01-14"
|
||||
NAME=$(basename "$0"); export NAME
|
||||
TOPDIR=".."
|
||||
#
|
||||
export V_FLAG=0
|
||||
|
||||
# usage
|
||||
#
|
||||
export USAGE="usage: $0 [-h] [-v level] [-V] [-t topdir]
|
||||
|
||||
-h print help message and exit
|
||||
-v level set verbosity level (def level: $V_FLAG)
|
||||
-V print version string and exit
|
||||
|
||||
-t topdir top directory under which year dirs are found (def: ..)
|
||||
|
||||
Exit codes:
|
||||
0 all OK
|
||||
2 -h and help string printed or -V and version string printed
|
||||
3 command line error
|
||||
>= 10 internal error
|
||||
|
||||
$NAME version: $VERSION"
|
||||
|
||||
# parse command line
|
||||
#
|
||||
while getopts :hv:Vt: flag; do
|
||||
case "$flag" in
|
||||
h) echo "$USAGE"
|
||||
exit 2
|
||||
;;
|
||||
v) V_FLAG="$OPTARG"
|
||||
;;
|
||||
V) echo "$VERSION"
|
||||
exit 2
|
||||
;;
|
||||
t) TOPDIR="$OPTARG"
|
||||
;;
|
||||
\?) echo "$0: ERROR: invalid option: -$OPTARG" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
:) echo "$0: ERROR: option -$OPTARG requires an argument" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
*) echo "$0: ERROR: unexpected value from getopts: $flag" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
done
|
||||
#
|
||||
# remove the options
|
||||
#
|
||||
shift $(( OPTIND - 1 ));
|
||||
#
|
||||
# verify arg count
|
||||
#
|
||||
if [[ $# -ne 0 ]]; then
|
||||
echo "$0: ERROR: expected 0 args, found: $#" 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
fi
|
||||
#
|
||||
# verify TOPDIR
|
||||
#
|
||||
if [[ -z $TOPDIR ]]; then
|
||||
echo "$0: ERROR: TOPDIR is empty" 1>&2
|
||||
exit 3
|
||||
fi
|
||||
if [[ ! -d $TOPDIR ]]; then
|
||||
echo "$0: ERROR: TOPDIR: $TOPDIR is not directory" 1>&2
|
||||
exit 3
|
||||
fi
|
||||
if [[ ! -d $TOPDIR/1984 ]]; then
|
||||
echo "$0: ERROR: TOPDIR: $TOPDIR is missing the 1984 sub-directory" 1>&2
|
||||
exit 3
|
||||
fi
|
||||
if [[ ! -d $TOPDIR/tmp ]]; then
|
||||
echo "$0: ERROR: TOPDIR: $TOPDIR is missing the tmp sub-directory" 1>&2
|
||||
exit 3
|
||||
fi
|
||||
if [[ ! -f $TOPDIR/Makefile ]]; then
|
||||
echo "$0: ERROR: TOPDIR: $TOPDIR is missing the top level Makefile" 1>&2
|
||||
exit 3
|
||||
fi
|
||||
|
||||
# move to TOPDIR
|
||||
#
|
||||
cd "$TOPDIR" || echo "$0: ERROR: cd $TOPDIR failed" 1>&2 || exit 10
|
||||
export PATH_LIST="tmp/path_list.found.txt"
|
||||
|
||||
# make clobber
|
||||
#
|
||||
make clobber >/dev/null 2>&1
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: make clobber failed, error code: $status" 1>&2
|
||||
exit 11
|
||||
fi
|
||||
|
||||
# find files under 4 character dirs that aren't .DS_Store or *.dSYM with a depth of at least 2
|
||||
#
|
||||
TMPFILE="tmp/tmp.path_list.found.txt.$$"
|
||||
trap 'rm -f $TMPFILE; exit' 0 1 2 3 15
|
||||
find -- ???? -mindepth 2 ! -name .DS_Store ! -name '.*.swp' -type f -print | sort -t/ > "$TMPFILE"
|
||||
if [[ ! -s $TMPFILE ]]; then
|
||||
echo "$0: ERROR: TMPFILE: $TMPFILE is empty" 1>&2
|
||||
exit 12
|
||||
fi
|
||||
if ! cmp -s "$TMPFILE" "$PATH_LIST"; then
|
||||
|
||||
# replace the file list
|
||||
#
|
||||
echo "$0: updating $PATH_LIST"
|
||||
mv -f -v "$TMPFILE" "$PATH_LIST"
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: ERROR: mv -f -v $TMPFILE $PATH_LIST failed, error: $status" 1>&2
|
||||
exit 13
|
||||
fi
|
||||
fi
|
||||
|
||||
# All Done!!! All Done!!! -- Jessica Noll, Age 2
|
||||
#
|
||||
exit 0
|
||||
-4355
File diff suppressed because it is too large.
Load diff
Binary file not shown.
@@ -1,463 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# md-chk-paths.sh - print local file paths referenced in markdown links
|
||||
#
|
||||
# For all markdown files, print markdown links that are local.
|
||||
# We ignore URLs that start with "http:" or "https:".
|
||||
# We ignore links that are internal to the file (i.e., "#name").
|
||||
# We strip all "#name" from paths.
|
||||
#
|
||||
# Copyright (c) 2024 by Landon Curt Noll. All Rights Reserved.
|
||||
#
|
||||
# Permission to use, copy, modify, and distribute this software and
|
||||
# its documentation for any purpose and without fee is hereby granted,
|
||||
# provided that the above copyright, this permission notice and text
|
||||
# this comment, and the disclaimer below appear in all of the following:
|
||||
#
|
||||
# supporting documentation
|
||||
# source copies
|
||||
# source works derived from this source
|
||||
# binaries derived from this source or from derived source
|
||||
#
|
||||
# LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
||||
# EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
||||
# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
# chongo (Landon Curt Noll, http://www.isthe.com/chongo/index.html) /\oo/\
|
||||
#
|
||||
# Share and enjoy! :-)
|
||||
|
||||
# firewall - run only with a bash that is version 5.1.8 or later
|
||||
#
|
||||
# The "/usr/bin/env bash" command must result in using a bash that
|
||||
# is version 5.1.8 or later.
|
||||
#
|
||||
# We could relax this version and insist on version 4.2 or later. Versions
|
||||
# of bash between 4.2 and 5.1.7 might work. However, to be safe, we will require
|
||||
# bash version 5.1.8 or later.
|
||||
#
|
||||
# WHY 5.1.8 and not 4.2? This safely is done because macOS Homebrew bash we
|
||||
# often use is "version 5.2.26(1)-release" or later, and the RHEL Linux bash we
|
||||
# use often use is "version 5.1.8(1)-release" or later. These versions are what
|
||||
# we initially tested. We recommend you either upgrade bash or install a newer
|
||||
# version of bash and adjust your $PATH so that "/usr/bin/env bash" finds a bash
|
||||
# that is version 5.1.8 or later.
|
||||
#
|
||||
# NOTE: The macOS shipped, as of 2024 March 15, a version of bash is something like
|
||||
# bash "version 3.2.57(1)-release". That macOS shipped version of bash
|
||||
# will NOT work. For users of macOS we recommend you install Homebrew,
|
||||
# (see https://brew.sh), and then run "brew install bash" which will
|
||||
# typically install it into /opt/homebrew/bin/bash, and then arrange your $PATH
|
||||
# so that "/usr/bin/env bash" finds "/opt/homebrew/bin" (or whatever the
|
||||
# Homebrew bash is).
|
||||
#
|
||||
# NOTE: And while MacPorts might work, we noticed a number of subtle differences
|
||||
# with some of their ported tools to suggest you might be better off
|
||||
# with installing Homebrew (see https://brew.sh). No disrespect is intended
|
||||
# to the MacPorts team as they do a commendable job. Nevertheless we ran
|
||||
# into enough differences with MacPorts environments to suggest you
|
||||
# might find a better experience with this tool under Homebrew instead.
|
||||
#
|
||||
if [[ -z ${BASH_VERSINFO[0]} ||
|
||||
${BASH_VERSINFO[0]} -lt 5 ||
|
||||
${BASH_VERSINFO[0]} -eq 5 && ${BASH_VERSINFO[1]} -lt 1 ||
|
||||
${BASH_VERSINFO[0]} -eq 5 && ${BASH_VERSINFO[1]} -eq 1 && ${BASH_VERSINFO[2]} -lt 8 ]]; then
|
||||
echo "$0: ERROR: bash version needs to be >= 5.1.8: $BASH_VERSION" 1>&2
|
||||
echo "$0: Warning: bash version >= 4.2 might work but 5.1.8 was the minimum we tested" 1>&2
|
||||
echo "$0: Notice: For macOS users: install Homebrew (see https://brew.sh), then run" \
|
||||
""brew install bash" and then modify your \$PATH so that \"#!/usr/bin/env bash\"" \
|
||||
"finds the Homebrew installed (usually /opt/homebrew/bin/bash) version of bash" 1>&2
|
||||
exit 4
|
||||
fi
|
||||
|
||||
|
||||
# setup bash file matching
|
||||
#
|
||||
# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables.
|
||||
# This requires a bash with a version 4.2 or later. See the larger comment above about bash versions.
|
||||
#
|
||||
shopt -s nullglob # enable expanded to nothing rather than remaining unexpanded
|
||||
shopt -u failglob # disable error message if no matches are found
|
||||
shopt -u dotglob # disable matching files starting with .
|
||||
shopt -u nocaseglob # disable strict case matching
|
||||
shopt -u extglob # enable extended globbing patterns
|
||||
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
|
||||
|
||||
# set variables referenced in the usage message
|
||||
#
|
||||
export VERSION="1.0 2024-04-25"
|
||||
NAME=$(basename "$0")
|
||||
export NAME
|
||||
export V_FLAG=0
|
||||
GIT_TOOL=$(type -P git)
|
||||
export GIT_TOOL
|
||||
if [[ -z "$GIT_TOOL" ]]; then
|
||||
echo "$0: FATAL: git tool is not installed or not in \$PATH" 1>&2
|
||||
exit 5
|
||||
fi
|
||||
"$GIT_TOOL" rev-parse --is-inside-work-tree >/dev/null 2>&1
|
||||
status="$?"
|
||||
if [[ $status -eq 0 ]]; then
|
||||
TOPDIR=$("$GIT_TOOL" rev-parse --show-toplevel)
|
||||
fi
|
||||
export TOPDIR
|
||||
|
||||
|
||||
# usage
|
||||
#
|
||||
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir]
|
||||
|
||||
-h print help message and exit
|
||||
-v level set verbosity level (def level: 0)
|
||||
-V print version string and exit
|
||||
|
||||
-d topdir set topdir (def: $TOPDIR)
|
||||
|
||||
Exit codes:
|
||||
0 all OK
|
||||
1 some internal tool exited non-zero
|
||||
2 -h and help string printed or -V and version string printed
|
||||
3 command line error
|
||||
4 bash version is too old
|
||||
6 problems found with or in the topdir or topdir/YYYY directory
|
||||
7 problems found with or in the entry topdir/YYYY/dir directory
|
||||
>= 10 internal error
|
||||
|
||||
$NAME version: $VERSION"
|
||||
|
||||
|
||||
# fast_dirname - perform dirname(1) without calling a command
|
||||
#
|
||||
# This is very similar with dirname(1) except it is much faster.
|
||||
#
|
||||
# usage:
|
||||
# fast_dirname path_name
|
||||
#
|
||||
# path to obtain the directory from
|
||||
#
|
||||
function fast_dirname
|
||||
{
|
||||
local PATH_NAME; # path_name argument to be modified
|
||||
|
||||
# parse args
|
||||
#
|
||||
if [[ $# -ne 1 ]]; then
|
||||
echo "$0: ERROR: in fast_dirname: debug_parameters requires 1 arg, found: $#" 1>&2
|
||||
exit 10
|
||||
fi
|
||||
PATH_NAME="$1"
|
||||
|
||||
# firewall - reject empty paths
|
||||
#
|
||||
if [[ -z $PATH_NAME ]]; then
|
||||
echo "$0: ERROR: in fast_dirname: pathname arg is empty" 1>&2
|
||||
exit 11
|
||||
fi
|
||||
|
||||
# reduce multiple consecutive /'s to just /
|
||||
#
|
||||
while :; do
|
||||
case "$PATH_NAME" in
|
||||
*//*) PATH_NAME="${PATH_NAME//\/\//\/}" ;;
|
||||
*) break ;;
|
||||
esac
|
||||
done
|
||||
|
||||
# trim any trailing /
|
||||
#
|
||||
PATH_NAME=${PATH_NAME%%/}
|
||||
|
||||
# case: if we only had /'s return /
|
||||
#
|
||||
if [[ -z "$PATH_NAME" ]]; then
|
||||
echo '/'
|
||||
return;
|
||||
fi
|
||||
|
||||
# case: PATH_NAME is an absolute path starting with /
|
||||
#
|
||||
case "$PATH_NAME" in
|
||||
/*) echo "${PATH_NAME%/*}"; return ;;
|
||||
*/*) echo "${PATH_NAME%/*}"; return ;;
|
||||
*) echo '.'; return ;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
# parse command line
|
||||
#
|
||||
while getopts :hv:Vd:nN flag; do
|
||||
case "$flag" in
|
||||
h) echo "$USAGE" 1>&2
|
||||
exit 2
|
||||
;;
|
||||
v) V_FLAG="$OPTARG"
|
||||
;;
|
||||
V) echo "$VERSION"
|
||||
exit 2
|
||||
;;
|
||||
d) TOPDIR="$OPTARG"
|
||||
;;
|
||||
\?) echo "$0: ERROR: invalid option: -$OPTARG" 1>&2
|
||||
echo 1>&2
|
||||
print_usage 1>&2
|
||||
exit 3
|
||||
;;
|
||||
:) echo "$0: ERROR: option -$OPTARG requires an argument" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
*) echo "$0: ERROR: unexpected value from getopts: $flag" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# remove the options
|
||||
#
|
||||
shift $(( OPTIND - 1 ));
|
||||
#
|
||||
if [[ $V_FLAG -ge 5 ]]; then
|
||||
echo "$0: debug[5]: file argument count: $#" 1>&2
|
||||
fi
|
||||
#
|
||||
# verify arg count and parse args
|
||||
#
|
||||
export TOOL
|
||||
case "$#" in
|
||||
0) ;;
|
||||
*) echo "$0: ERROR: expected 0 args, found: $#" 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
|
||||
# print running info if verbose
|
||||
#
|
||||
# If -v 3 or higher, print exported variables in order that they were exported.
|
||||
#
|
||||
if [[ $V_FLAG -ge 3 ]]; then
|
||||
echo "$0: debug[3]: VERSION=$VERSION" 1>&2
|
||||
echo "$0: debug[3]: NAME=$NAME" 1>&2
|
||||
echo "$0: debug[3]: V_FLAG=$V_FLAG" 1>&2
|
||||
echo "$0: debug[3]: GIT_TOOL=$GIT_TOOL" 1>&2
|
||||
echo "$0: debug[3]: TOPDIR=$TOPDIR" 1>&2
|
||||
fi
|
||||
|
||||
|
||||
# cd to topdir
|
||||
#
|
||||
if [[ ! -e $TOPDIR ]]; then
|
||||
echo "$0: ERROR: cannot cd to non-existent path: $TOPDIR" 1>&2
|
||||
exit 6
|
||||
fi
|
||||
if [[ ! -d $TOPDIR ]]; then
|
||||
echo "$0: ERROR: cannot cd to a non-directory: $TOPDIR" 1>&2
|
||||
exit 6
|
||||
fi
|
||||
export CD_FAILED
|
||||
if [[ $V_FLAG -ge 5 ]]; then
|
||||
echo "$0: debug[5]: about to: cd $TOPDIR" 1>&2
|
||||
fi
|
||||
cd "$TOPDIR" || CD_FAILED="true"
|
||||
if [[ -n $CD_FAILED ]]; then
|
||||
echo "$0: ERROR: cd $TOPDIR failed" 1>&2
|
||||
exit 6
|
||||
fi
|
||||
if [[ $V_FLAG -ge 3 ]]; then
|
||||
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
|
||||
fi
|
||||
|
||||
|
||||
# collect markdown links
|
||||
#
|
||||
# Here be extended regular expression magic dragons! :-)
|
||||
#
|
||||
# We will try to explain, as best as we can, these complex regular expressions.
|
||||
#
|
||||
# After grep of markdown files (files in sorted dictionary order) for markdown line lines, we sed:
|
||||
#
|
||||
# # remove any "[some string]" that is not immediately followed by "("
|
||||
#
|
||||
# -e 's/\[[^]]*\]([^(])/\1/' \
|
||||
#
|
||||
# # remove any trialing "[followed by text without a closing bracket"
|
||||
#
|
||||
# -e 's/\[[^]]*$//' \
|
||||
#
|
||||
# Then processing the second file (after the filename field) we sed:
|
||||
#
|
||||
# # remove any leading "..non-[-stuff..["
|
||||
#
|
||||
# -e 's/^[^[]()+\[/[/' \
|
||||
#
|
||||
# # replace "beginning text stuff](" with "[text stuff]("
|
||||
# # because the previous line might have ended with "[beginning"
|
||||
#
|
||||
# -e 's/^([^][]*\]\()/[\1/g' \
|
||||
#
|
||||
# # remove any "[..non-]-stuff..][..more-non-]-stuff..]"
|
||||
#
|
||||
# -e 's/(\[[^][]*\])+([^(])/\2/g' \
|
||||
#
|
||||
# # remove any non-link before the first "[some string](path)"
|
||||
#
|
||||
# -e 's/^[^][]+(\[[^]]*\]\([^(]*\))/\1/' \
|
||||
#
|
||||
# # remove any final "[..non-]-stuff..$"
|
||||
#
|
||||
# -e 's/\[[^]]*$//' \
|
||||
#
|
||||
# # remove any final "(..non-)-stuff..)..non-[-stuff.."
|
||||
#
|
||||
# -e 's/(\([^)]*\))[^[]*$/\1/' \
|
||||
#
|
||||
# # remove any trailing non-[-text after the final "[some string](path)"
|
||||
#
|
||||
# -e 's/(\[[^]]*\]\([^(]*\))[^[]+$/\1/' \
|
||||
#
|
||||
# # replace ")..non-open-bracket-stuff.[" with ") ["
|
||||
#
|
||||
# -e 's/\)[^[]*\[/) [/g' \
|
||||
#
|
||||
# # replace "[some string](apath) [other string](bpath)" with two lines:
|
||||
# #
|
||||
# # "[some string](apath)"
|
||||
# # "[other string](bpath)"
|
||||
#
|
||||
# -e 's/(\[[^]]*\]\([^(]*\))/\1\n/g' \
|
||||
#
|
||||
# # remove blank and empty lines
|
||||
#
|
||||
# -e '/^\s*$/d' \
|
||||
#
|
||||
# Then pipe the lines into another sed:
|
||||
#
|
||||
# # replace multiple space with a single space
|
||||
#
|
||||
# -e 's/ +/ /g' \
|
||||
#
|
||||
# # remove the leading "[pseudo title]("
|
||||
#
|
||||
# -e 's/\[[^]]*\]\(//' \
|
||||
#
|
||||
# # remove trailing ")":
|
||||
#
|
||||
# -e 's/\)$//' \
|
||||
#
|
||||
# # remove and trailing #name
|
||||
#
|
||||
# -e 's/#.*$//' \
|
||||
#
|
||||
# # remove any leading whitespace
|
||||
#
|
||||
# -e 's/^ //' \
|
||||
#
|
||||
# # remove blank and empty lines
|
||||
#
|
||||
# -e '/^\s*$/d' \
|
||||
#
|
||||
# # delete all http: and https: URLs
|
||||
#
|
||||
# -e '/^https?:/d' \
|
||||
#
|
||||
# # delete all mailto: URLs
|
||||
#
|
||||
# -e '/^mailto:/d' \
|
||||
#
|
||||
#
|
||||
# -e 's;%%DOCROOT_SLASH%%/*;/;' \
|
||||
#
|
||||
# # add current directory in front of absolute paths
|
||||
#
|
||||
# -e "s;^/;$PWD;" \
|
||||
#
|
||||
# # add current directory followed by / in front of relative paths
|
||||
#
|
||||
# -e "s;^([^/]);$PWD/\1;" \
|
||||
#
|
||||
# # convert "%%REPO_URL%%/" into TOPDIR
|
||||
#
|
||||
# -e "s;%%REPO_URL%%/*;$TOPDIR/;" \
|
||||
#
|
||||
# # convert "%%DOCROOT_SLASH%%" into TOPDIR
|
||||
#
|
||||
# -e "s;%%DOCROOT_SLASH%%/*;$TOPDIR/;" \
|
||||
#
|
||||
# # relative paths have the directory of the markdown file added to them
|
||||
#
|
||||
# -e "s;^([^/]);$TOPDIR/$MD_DIR/\1;" \
|
||||
#
|
||||
# # delete all lines containing "%%TOKEN%%" as this is a just a test/example token
|
||||
#
|
||||
# -e '/%%TOKEN%%/d' \
|
||||
#
|
||||
# At this point in the pipe, we have absolute /-based paths to markdown linked local files.
|
||||
# We test if those file exist, and if not report a problem in the form:
|
||||
#
|
||||
# # Missing file linked in: markdown_file_name.md
|
||||
# # Markdown line: ..the markdown line containing the line..
|
||||
# /missing/filename
|
||||
#
|
||||
find . -name '*.md' ! -name markdown.md ! -path './tmp/*' -print |
|
||||
LANG=C sort -d |
|
||||
xargs grep '\]([^)][^)]*)' /dev/null |
|
||||
sed -E \
|
||||
-e 's;^\.\/;;' \
|
||||
-e 's/^([^:]+):\s*/\1 /' \
|
||||
|
|
||||
while read -r MD_PATH MD_LINE; do
|
||||
|
||||
# note directory containing the markdown file
|
||||
#
|
||||
MD_DIR=$(fast_dirname "$MD_PATH")
|
||||
export MD_DIR
|
||||
|
||||
# extract markdown parts from the given markdown file
|
||||
#
|
||||
echo "$MD_LINE" |
|
||||
sed -E \
|
||||
-e 's/^[^[]()+\[/[/' \
|
||||
-e 's/^([^][]*\]\()/[\1/g' \
|
||||
-e 's/(\[[^][]*\])+([^(])/\2/g' \
|
||||
-e 's/^[^][]+(\[[^]]*\]\([^(]*\))/\1/' \
|
||||
-e 's/\[[^]]*$//' \
|
||||
-e 's/(\([^)]*\))[^[]*$/\1/' \
|
||||
-e 's/(\[[^]]*\]\([^(]*\))[^[]+$/\1/' \
|
||||
-e 's/\)[^[]*\[/) [/g' \
|
||||
-e 's/(\[[^]]*\]\([^(]*\))/\1\n/g' \
|
||||
-e '/^\s*$/d' \
|
||||
|
|
||||
sed -E \
|
||||
-e 's/ +/ /g' \
|
||||
-e 's/\[[^]]*\]\(//' \
|
||||
-e 's/\)$//' \
|
||||
-e 's/#.*$//' \
|
||||
-e 's/^ //' \
|
||||
-e '/^\s*$/d' \
|
||||
-e '/^https?:/d' \
|
||||
-e '/^mailto:/d' \
|
||||
-e "s;%%REPO_URL%%/*;$TOPDIR/;" \
|
||||
-e "s;%%DOCROOT_SLASH%%/*;$TOPDIR/;" \
|
||||
-e "s;^([^/]);$TOPDIR/$MD_DIR/\1;" \
|
||||
-e '/%%TOKEN%%/d' \
|
||||
|
|
||||
while read -r ABS_LOCAL_FILE_PATH; do
|
||||
if [[ ! -e $ABS_LOCAL_FILE_PATH ]]; then
|
||||
echo "# Missing file linked in: $MD_PATH" 1>&2
|
||||
echo "# Markdown line: $MD_LINE" 1>&2
|
||||
echo "$ABS_LOCAL_FILE_PATH" 1>&2
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
# All Done!!! All Done!!! -- Jessica Noll, Age 2
|
||||
#
|
||||
exit 0
|
||||
@@ -1,365 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# bin/md-link-paths.sh - print local file paths referenced in markdown links
|
||||
#
|
||||
# For all markdown files, print markdown links that are local.
|
||||
# We ignore URLs that start with "http:" or "https:".
|
||||
# We ignore links that are internal to the file (i.e., "#name").
|
||||
# We strip all "#name" from paths.
|
||||
#
|
||||
# Copyright (c) 2024 by Landon Curt Noll. All Rights Reserved.
|
||||
#
|
||||
# Permission to use, copy, modify, and distribute this software and
|
||||
# its documentation for any purpose and without fee is hereby granted,
|
||||
# provided that the above copyright, this permission notice and text
|
||||
# this comment, and the disclaimer below appear in all of the following:
|
||||
#
|
||||
# supporting documentation
|
||||
# source copies
|
||||
# source works derived from this source
|
||||
# binaries derived from this source or from derived source
|
||||
#
|
||||
# LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
||||
# EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
||||
# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
# chongo (Landon Curt Noll, http://www.isthe.com/chongo/index.html) /\oo/\
|
||||
#
|
||||
# Share and enjoy! :-)
|
||||
|
||||
# firewall - run only with a bash that is version 5.1.8 or later
|
||||
#
|
||||
# The "/usr/bin/env bash" command must result in using a bash that
|
||||
# is version 5.1.8 or later.
|
||||
#
|
||||
# We could relax this version and insist on version 4.2 or later. Versions
|
||||
# of bash between 4.2 and 5.1.7 might work. However, to be safe, we will require
|
||||
# bash version 5.1.8 or later.
|
||||
#
|
||||
# WHY 5.1.8 and not 4.2? This safely is done because macOS Homebrew bash we
|
||||
# often use is "version 5.2.26(1)-release" or later, and the RHEL Linux bash we
|
||||
# use often use is "version 5.1.8(1)-release" or later. These versions are what
|
||||
# we initially tested. We recommend you either upgrade bash or install a newer
|
||||
# version of bash and adjust your $PATH so that "/usr/bin/env bash" finds a bash
|
||||
# that is version 5.1.8 or later.
|
||||
#
|
||||
# NOTE: The macOS shipped, as of 2024 March 15, a version of bash is something like
|
||||
# bash "version 3.2.57(1)-release". That macOS shipped version of bash
|
||||
# will NOT work. For users of macOS we recommend you install Homebrew,
|
||||
# (see https://brew.sh), and then run "brew install bash" which will
|
||||
# typically install it into /opt/homebrew/bin/bash, and then arrange your $PATH
|
||||
# so that "/usr/bin/env bash" finds "/opt/homebrew/bin" (or whatever the
|
||||
# Homebrew bash is).
|
||||
#
|
||||
# NOTE: And while MacPorts might work, we noticed a number of subtle differences
|
||||
# with some of their ported tools to suggest you might be better off
|
||||
# with installing Homebrew (see https://brew.sh). No disrespect is intended
|
||||
# to the MacPorts team as they do a commendable job. Nevertheless we ran
|
||||
# into enough differences with MacPorts environments to suggest you
|
||||
# might find a better experience with this tool under Homebrew instead.
|
||||
#
|
||||
if [[ -z ${BASH_VERSINFO[0]} ||
|
||||
${BASH_VERSINFO[0]} -lt 5 ||
|
||||
${BASH_VERSINFO[0]} -eq 5 && ${BASH_VERSINFO[1]} -lt 1 ||
|
||||
${BASH_VERSINFO[0]} -eq 5 && ${BASH_VERSINFO[1]} -eq 1 && ${BASH_VERSINFO[2]} -lt 8 ]]; then
|
||||
echo "$0: ERROR: bash version needs to be >= 5.1.8: $BASH_VERSION" 1>&2
|
||||
echo "$0: Warning: bash version >= 4.2 might work but 5.1.8 was the minimum we tested" 1>&2
|
||||
echo "$0: Notice: For macOS users: install Homebrew (see https://brew.sh), then run" \
|
||||
""brew install bash" and then modify your \$PATH so that \"#!/usr/bin/env bash\"" \
|
||||
"finds the Homebrew installed (usually /opt/homebrew/bin/bash) version of bash" 1>&2
|
||||
exit 4
|
||||
fi
|
||||
|
||||
|
||||
# setup bash file matching
|
||||
#
|
||||
# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables.
|
||||
# This requires a bash with a version 4.2 or later. See the larger comment above about bash versions.
|
||||
#
|
||||
shopt -s nullglob # enable expanded to nothing rather than remaining unexpanded
|
||||
shopt -u failglob # disable error message if no matches are found
|
||||
shopt -u dotglob # disable matching files starting with .
|
||||
shopt -u nocaseglob # disable strict case matching
|
||||
shopt -u extglob # enable extended globbing patterns
|
||||
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
|
||||
|
||||
# set variables referenced in the usage message
|
||||
#
|
||||
export VERSION="1.0 2024-04-25"
|
||||
NAME=$(basename "$0")
|
||||
export NAME
|
||||
export V_FLAG=0
|
||||
GIT_TOOL=$(type -P git)
|
||||
export GIT_TOOL
|
||||
if [[ -z "$GIT_TOOL" ]]; then
|
||||
echo "$0: FATAL: git tool is not installed or not in \$PATH" 1>&2
|
||||
exit 5
|
||||
fi
|
||||
"$GIT_TOOL" rev-parse --is-inside-work-tree >/dev/null 2>&1
|
||||
status="$?"
|
||||
if [[ $status -eq 0 ]]; then
|
||||
TOPDIR=$("$GIT_TOOL" rev-parse --show-toplevel)
|
||||
fi
|
||||
export TOPDIR
|
||||
|
||||
|
||||
# usage
|
||||
#
|
||||
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir]
|
||||
|
||||
-h print help message and exit
|
||||
-v level set verbosity level (def level: 0)
|
||||
-V print version string and exit
|
||||
|
||||
-d topdir set topdir (def: $TOPDIR)
|
||||
|
||||
Exit codes:
|
||||
0 all OK
|
||||
1 some internal tool exited non-zero
|
||||
2 -h and help string printed or -V and version string printed
|
||||
3 command line error
|
||||
4 bash version is too old
|
||||
>= 10 internal error
|
||||
|
||||
$NAME version: $VERSION"
|
||||
|
||||
|
||||
# parse command line
|
||||
#
|
||||
while getopts :hv:Vd:nN flag; do
|
||||
case "$flag" in
|
||||
h) echo "$USAGE" 1>&2
|
||||
exit 2
|
||||
;;
|
||||
v) V_FLAG="$OPTARG"
|
||||
;;
|
||||
V) echo "$VERSION"
|
||||
exit 2
|
||||
;;
|
||||
d) TOPDIR="$OPTARG"
|
||||
;;
|
||||
\?) echo "$0: ERROR: invalid option: -$OPTARG" 1>&2
|
||||
echo 1>&2
|
||||
print_usage 1>&2
|
||||
exit 3
|
||||
;;
|
||||
:) echo "$0: ERROR: option -$OPTARG requires an argument" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
*) echo "$0: ERROR: unexpected value from getopts: $flag" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# remove the options
|
||||
#
|
||||
shift $(( OPTIND - 1 ));
|
||||
#
|
||||
if [[ $V_FLAG -ge 5 ]]; then
|
||||
echo "$0: debug[5]: file argument count: $#" 1>&2
|
||||
fi
|
||||
#
|
||||
# verify arg count and parse args
|
||||
#
|
||||
export TOOL
|
||||
case "$#" in
|
||||
0) ;;
|
||||
*) echo "$0: ERROR: expected 0 args, found: $#" 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
|
||||
# print running info if verbose
|
||||
#
|
||||
# If -v 3 or higher, print exported variables in order that they were exported.
|
||||
#
|
||||
if [[ $V_FLAG -ge 3 ]]; then
|
||||
echo "$0: debug[3]: VERSION=$VERSION" 1>&2
|
||||
echo "$0: debug[3]: NAME=$NAME" 1>&2
|
||||
echo "$0: debug[3]: V_FLAG=$V_FLAG" 1>&2
|
||||
echo "$0: debug[3]: GIT_TOOL=$GIT_TOOL" 1>&2
|
||||
echo "$0: debug[3]: TOPDIR=$TOPDIR" 1>&2
|
||||
fi
|
||||
|
||||
|
||||
# cd to topdir
|
||||
#
|
||||
if [[ ! -e $TOPDIR ]]; then
|
||||
echo "$0: ERROR: cannot cd to non-existent path: $TOPDIR" 1>&2
|
||||
exit 6
|
||||
fi
|
||||
if [[ ! -d $TOPDIR ]]; then
|
||||
echo "$0: ERROR: cannot cd to a non-directory: $TOPDIR" 1>&2
|
||||
exit 6
|
||||
fi
|
||||
export CD_FAILED
|
||||
if [[ $V_FLAG -ge 5 ]]; then
|
||||
echo "$0: debug[5]: about to: cd $TOPDIR" 1>&2
|
||||
fi
|
||||
cd "$TOPDIR" || CD_FAILED="true"
|
||||
if [[ -n $CD_FAILED ]]; then
|
||||
echo "$0: ERROR: cd $TOPDIR failed" 1>&2
|
||||
exit 6
|
||||
fi
|
||||
if [[ $V_FLAG -ge 3 ]]; then
|
||||
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
|
||||
fi
|
||||
|
||||
|
||||
# collect markdown links
|
||||
#
|
||||
# Here be extended regular expression magic dragons! :-)
|
||||
#
|
||||
# We will try to explain, as best as we can, these complex regular expressions.
|
||||
#
|
||||
# After grep of markdown files (files in sorted dictionary order) for markdown line lines, we sed:
|
||||
#
|
||||
# # remove any "[some string]" that is not immediately followed by "("
|
||||
#
|
||||
# -e 's/\[[^]]*\]([^(])/\1/' \
|
||||
#
|
||||
# # remove any trialing "[followed by text without a closing bracket"
|
||||
#
|
||||
# -e 's/\[[^]]*$//' \
|
||||
#
|
||||
# Then processing the second file (after the filename field) we sed:
|
||||
#
|
||||
# # remove any leading "..non-[-stuff..["
|
||||
#
|
||||
# -e 's/^[^[]()+\[/[/' \
|
||||
#
|
||||
# # replace "beginning text stuff](" with "[text stuff]("
|
||||
# # because the previous line might have ended with "[beginning"
|
||||
#
|
||||
# -e 's/^([^][]*\]\()/[\1/g' \
|
||||
#
|
||||
# # remove any "[..non-]-stuff..][..more-non-]-stuff..]"
|
||||
#
|
||||
# -e 's/(\[[^][]*\])+([^(])/\2/g' \
|
||||
#
|
||||
# # remove any non-link before the first "[some string](path)"
|
||||
#
|
||||
# -e 's/^[^][]+(\[[^]]*\]\([^(]*\))/\1/' \
|
||||
#
|
||||
# # remove any final "[..non-]-stuff..$"
|
||||
#
|
||||
# -e 's/\[[^]]*$//' \
|
||||
#
|
||||
# # remove any final "(..non-)-stuff..)..non-[-stuff.."
|
||||
#
|
||||
# -e 's/(\([^)]*\))[^[]*$/\1/' \
|
||||
#
|
||||
# # remove any trailing non-[-text after the final "[some string](path)"
|
||||
#
|
||||
# -e 's/(\[[^]]*\]\([^(]*\))[^[]+$/\1/' \
|
||||
#
|
||||
# # replace ")..non-open-bracket-stuff.[" with ") ["
|
||||
#
|
||||
# -e 's/\)[^[]*\[/) [/g' \
|
||||
#
|
||||
# # replace "[some string](apath) [other string](bpath)" with two lines:
|
||||
# #
|
||||
# # "[some string](apath)"
|
||||
# # "[other string](bpath)"
|
||||
#
|
||||
# -e 's/(\[[^]]*\]\([^(]*\))/\1\n/g' \
|
||||
#
|
||||
# # remove blank and empty lines
|
||||
#
|
||||
# -e '/^\s*$/d' \
|
||||
#
|
||||
# Then pipe the lines into another sed:
|
||||
#
|
||||
# # replace multiple space with a single space
|
||||
#
|
||||
# -e 's/ +/ /g' \
|
||||
#
|
||||
# # remove the leading "[pseudo title]("
|
||||
#
|
||||
# -e 's/\[[^]]*\]\(//' \
|
||||
#
|
||||
# # remove trailing ")":
|
||||
#
|
||||
# -e 's/\)$//' \
|
||||
#
|
||||
# # remove and trailing #name
|
||||
#
|
||||
# -e 's/#.*$//' \
|
||||
#
|
||||
# # remove "%%REPO_URL%%/"
|
||||
#
|
||||
# -e 's/%%REPO_URL%%\///' \
|
||||
#
|
||||
# # remove "%%DOCROOT_SLASH%%"
|
||||
#
|
||||
# -e 's/%%DOCROOT_SLASH%%//' \
|
||||
#
|
||||
# # delete all lines containing "%%TOKEN%%" as this is a just a test/example token
|
||||
#
|
||||
# -e '/%%TOKEN%%/d' \
|
||||
#
|
||||
# # remove any leading whitespace
|
||||
#
|
||||
# -e 's/^ //' \
|
||||
#
|
||||
# # remove blank and empty lines
|
||||
#
|
||||
# -e '/^\s*$/d'
|
||||
#
|
||||
# We then remove all links that start with:
|
||||
#
|
||||
# http:
|
||||
# https:
|
||||
#
|
||||
# and output just paths
|
||||
#
|
||||
# We do not process markdown.md because it contains examples
|
||||
# of poor markdown use.
|
||||
#
|
||||
find . -name '*.md' ! -name markdown.md ! -path './tmp/*' -print |
|
||||
LANG=C sort -d |
|
||||
xargs grep '\]([^)][^)]*)' /dev/null |
|
||||
sed -E \
|
||||
-e 's;^\.\/;;' \
|
||||
-e 's/^([^:]+):\s*/\1 /' \
|
||||
|
|
||||
while read -r MD_PATH MD_LINE; do
|
||||
echo "$MD_LINE" |
|
||||
sed -E \
|
||||
-e 's/^[^[]()+\[/[/' \
|
||||
-e 's/^([^][]*\]\()/[\1/g' \
|
||||
-e 's/(\[[^][]*\])+([^(])/\2/g' \
|
||||
-e 's/^[^][]+(\[[^]]*\]\([^(]*\))/\1/' \
|
||||
-e 's/\[[^]]*$//' \
|
||||
-e 's/(\([^)]*\))[^[]*$/\1/' \
|
||||
-e 's/(\[[^]]*\]\([^(]*\))[^[]+$/\1/' \
|
||||
-e 's/\)[^[]*\[/) [/g' \
|
||||
-e 's/(\[[^]]*\]\([^(]*\))/\1\n/g' \
|
||||
-e '/^\s*$/d' \
|
||||
|
|
||||
sed -E \
|
||||
-e 's/ +/ /g' \
|
||||
-e 's/\[[^]]*\]\(//' \
|
||||
-e 's/\)$//' \
|
||||
-e 's/#.*$//' \
|
||||
-e 's/%%REPO_URL%%\///' \
|
||||
-e 's/%%DOCROOT_SLASH%%//' \
|
||||
-e '/%%TOKEN%%/d' \
|
||||
-e 's/^ //' \
|
||||
-e '/^\s*$/d'
|
||||
done |
|
||||
grep -v -E '^http:|^https:|^mailto:'
|
||||
|
||||
# All Done!!! All Done!!! -- Jessica Noll, Age 2
|
||||
#
|
||||
exit 0
|
||||
-331
@@ -1,331 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# md-links.sh - print all markdown links
|
||||
#
|
||||
# Copyright (c) 2024 by Landon Curt Noll. All Rights Reserved.
|
||||
#
|
||||
# Permission to use, copy, modify, and distribute this software and
|
||||
# its documentation for any purpose and without fee is hereby granted,
|
||||
# provided that the above copyright, this permission notice and text
|
||||
# this comment, and the disclaimer below appear in all of the following:
|
||||
#
|
||||
# supporting documentation
|
||||
# source copies
|
||||
# source works derived from this source
|
||||
# binaries derived from this source or from derived source
|
||||
#
|
||||
# LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
||||
# EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
||||
# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
# chongo (Landon Curt Noll, http://www.isthe.com/chongo/index.html) /\oo/\
|
||||
#
|
||||
# Share and enjoy! :-)
|
||||
|
||||
# firewall - run only with a bash that is version 5.1.8 or later
|
||||
#
|
||||
# The "/usr/bin/env bash" command must result in using a bash that
|
||||
# is version 5.1.8 or later.
|
||||
#
|
||||
# We could relax this version and insist on version 4.2 or later. Versions
|
||||
# of bash between 4.2 and 5.1.7 might work. However, to be safe, we will require
|
||||
# bash version 5.1.8 or later.
|
||||
#
|
||||
# WHY 5.1.8 and not 4.2? This safely is done because macOS Homebrew bash we
|
||||
# often use is "version 5.2.26(1)-release" or later, and the RHEL Linux bash we
|
||||
# use often use is "version 5.1.8(1)-release" or later. These versions are what
|
||||
# we initially tested. We recommend you either upgrade bash or install a newer
|
||||
# version of bash and adjust your $PATH so that "/usr/bin/env bash" finds a bash
|
||||
# that is version 5.1.8 or later.
|
||||
#
|
||||
# NOTE: The macOS shipped, as of 2024 March 15, a version of bash is something like
|
||||
# bash "version 3.2.57(1)-release". That macOS shipped version of bash
|
||||
# will NOT work. For users of macOS we recommend you install Homebrew,
|
||||
# (see https://brew.sh), and then run "brew install bash" which will
|
||||
# typically install it into /opt/homebrew/bin/bash, and then arrange your $PATH
|
||||
# so that "/usr/bin/env bash" finds "/opt/homebrew/bin" (or whatever the
|
||||
# Homebrew bash is).
|
||||
#
|
||||
# NOTE: And while MacPorts might work, we noticed a number of subtle differences
|
||||
# with some of their ported tools to suggest you might be better off
|
||||
# with installing Homebrew (see https://brew.sh). No disrespect is intended
|
||||
# to the MacPorts team as they do a commendable job. Nevertheless we ran
|
||||
# into enough differences with MacPorts environments to suggest you
|
||||
# might find a better experience with this tool under Homebrew instead.
|
||||
#
|
||||
if [[ -z ${BASH_VERSINFO[0]} ||
|
||||
${BASH_VERSINFO[0]} -lt 5 ||
|
||||
${BASH_VERSINFO[0]} -eq 5 && ${BASH_VERSINFO[1]} -lt 1 ||
|
||||
${BASH_VERSINFO[0]} -eq 5 && ${BASH_VERSINFO[1]} -eq 1 && ${BASH_VERSINFO[2]} -lt 8 ]]; then
|
||||
echo "$0: ERROR: bash version needs to be >= 5.1.8: $BASH_VERSION" 1>&2
|
||||
echo "$0: Warning: bash version >= 4.2 might work but 5.1.8 was the minimum we tested" 1>&2
|
||||
echo "$0: Notice: For macOS users: install Homebrew (see https://brew.sh), then run" \
|
||||
""brew install bash" and then modify your \$PATH so that \"#!/usr/bin/env bash\"" \
|
||||
"finds the Homebrew installed (usually /opt/homebrew/bin/bash) version of bash" 1>&2
|
||||
exit 4
|
||||
fi
|
||||
|
||||
|
||||
# setup bash file matching
|
||||
#
|
||||
# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables.
|
||||
# This requires a bash with a version 4.2 or later. See the larger comment above about bash versions.
|
||||
#
|
||||
shopt -s nullglob # enable expanded to nothing rather than remaining unexpanded
|
||||
shopt -u failglob # disable error message if no matches are found
|
||||
shopt -u dotglob # disable matching files starting with .
|
||||
shopt -u nocaseglob # disable strict case matching
|
||||
shopt -u extglob # enable extended globbing patterns
|
||||
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
|
||||
|
||||
# set variables referenced in the usage message
|
||||
#
|
||||
export VERSION="1.0 2024-04-25"
|
||||
NAME=$(basename "$0")
|
||||
export NAME
|
||||
export V_FLAG=0
|
||||
GIT_TOOL=$(type -P git)
|
||||
export GIT_TOOL
|
||||
if [[ -z "$GIT_TOOL" ]]; then
|
||||
echo "$0: FATAL: git tool is not installed or not in \$PATH" 1>&2
|
||||
exit 5
|
||||
fi
|
||||
"$GIT_TOOL" rev-parse --is-inside-work-tree >/dev/null 2>&1
|
||||
status="$?"
|
||||
if [[ $status -eq 0 ]]; then
|
||||
TOPDIR=$("$GIT_TOOL" rev-parse --show-toplevel)
|
||||
fi
|
||||
export TOPDIR
|
||||
|
||||
|
||||
# usage
|
||||
#
|
||||
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir]
|
||||
|
||||
-h print help message and exit
|
||||
-v level set verbosity level (def level: 0)
|
||||
-V print version string and exit
|
||||
|
||||
-d topdir set topdir (def: $TOPDIR)
|
||||
|
||||
Exit codes:
|
||||
0 all OK
|
||||
1 some internal tool exited non-zero
|
||||
2 -h and help string printed or -V and version string printed
|
||||
3 command line error
|
||||
4 bash version is too old
|
||||
>= 10 internal error
|
||||
|
||||
$NAME version: $VERSION"
|
||||
|
||||
|
||||
# parse command line
|
||||
#
|
||||
while getopts :hv:Vd:nN flag; do
|
||||
case "$flag" in
|
||||
h) echo "$USAGE" 1>&2
|
||||
exit 2
|
||||
;;
|
||||
v) V_FLAG="$OPTARG"
|
||||
;;
|
||||
V) echo "$VERSION"
|
||||
exit 2
|
||||
;;
|
||||
d) TOPDIR="$OPTARG"
|
||||
;;
|
||||
\?) echo "$0: ERROR: invalid option: -$OPTARG" 1>&2
|
||||
echo 1>&2
|
||||
print_usage 1>&2
|
||||
exit 3
|
||||
;;
|
||||
:) echo "$0: ERROR: option -$OPTARG requires an argument" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
*) echo "$0: ERROR: unexpected value from getopts: $flag" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# remove the options
|
||||
#
|
||||
shift $(( OPTIND - 1 ));
|
||||
#
|
||||
if [[ $V_FLAG -ge 5 ]]; then
|
||||
echo "$0: debug[5]: file argument count: $#" 1>&2
|
||||
fi
|
||||
#
|
||||
# verify arg count and parse args
|
||||
#
|
||||
export TOOL
|
||||
case "$#" in
|
||||
0) ;;
|
||||
*) echo "$0: ERROR: expected 0 args, found: $#" 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
|
||||
# print running info if verbose
|
||||
#
|
||||
# If -v 3 or higher, print exported variables in order that they were exported.
|
||||
#
|
||||
if [[ $V_FLAG -ge 3 ]]; then
|
||||
echo "$0: debug[3]: VERSION=$VERSION" 1>&2
|
||||
echo "$0: debug[3]: NAME=$NAME" 1>&2
|
||||
echo "$0: debug[3]: V_FLAG=$V_FLAG" 1>&2
|
||||
echo "$0: debug[3]: GIT_TOOL=$GIT_TOOL" 1>&2
|
||||
echo "$0: debug[3]: TOPDIR=$TOPDIR" 1>&2
|
||||
fi
|
||||
|
||||
|
||||
# cd to topdir
|
||||
#
|
||||
if [[ ! -e $TOPDIR ]]; then
|
||||
echo "$0: ERROR: cannot cd to non-existent path: $TOPDIR" 1>&2
|
||||
exit 6
|
||||
fi
|
||||
if [[ ! -d $TOPDIR ]]; then
|
||||
echo "$0: ERROR: cannot cd to a non-directory: $TOPDIR" 1>&2
|
||||
exit 6
|
||||
fi
|
||||
export CD_FAILED
|
||||
if [[ $V_FLAG -ge 5 ]]; then
|
||||
echo "$0: debug[5]: about to: cd $TOPDIR" 1>&2
|
||||
fi
|
||||
cd "$TOPDIR" || CD_FAILED="true"
|
||||
if [[ -n $CD_FAILED ]]; then
|
||||
echo "$0: ERROR: cd $TOPDIR failed" 1>&2
|
||||
exit 6
|
||||
fi
|
||||
if [[ $V_FLAG -ge 3 ]]; then
|
||||
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
|
||||
fi
|
||||
|
||||
|
||||
# collect markdown links
|
||||
#
|
||||
# Here be extended regular expression magic dragons! :-)
|
||||
#
|
||||
# We will try to explain, as best as we can, these complex regular expressions.
|
||||
#
|
||||
# After grep of markdown files (files in sorted dictionary order) for markdown line lines, we sed:
|
||||
#
|
||||
# # remove any "[some string]" that is not immediately followed by "("
|
||||
#
|
||||
# -e 's/\[[^]]*\]([^(])/\1/' \
|
||||
#
|
||||
# # remove any trialing "[followed by text without a closing bracket"
|
||||
#
|
||||
# -e 's/\[[^]]*$//' \
|
||||
#
|
||||
# Then processing the second file (after the filename field) we sed:
|
||||
#
|
||||
# # remove any leading "..non-[-stuff..["
|
||||
#
|
||||
# -e 's/^[^[]()+\[/[/' \
|
||||
#
|
||||
# # replace "beginning text stuff](" with "[text stuff]("
|
||||
# # because the previous line might have ended with "[beginning"
|
||||
#
|
||||
# -e 's/^([^][]*\]\()/[\1/g' \
|
||||
#
|
||||
# # remove any "[..non-]-stuff..][..more-non-]-stuff..]"
|
||||
#
|
||||
# -e 's/(\[[^][]*\])+([^(])/\2/g' \
|
||||
#
|
||||
# # remove any non-link before the first "[some string](path)"
|
||||
#
|
||||
# -e 's/^[^][]+(\[[^]]*\]\([^(]*\))/\1/' \
|
||||
#
|
||||
# # remove any final "[..non-]-stuff..$"
|
||||
#
|
||||
# -e 's/\[[^]]*$//' \
|
||||
#
|
||||
# # remove any final "(..non-)-stuff..)..non-[-stuff.."
|
||||
#
|
||||
# -e 's/(\([^)]*\))[^[]*$/\1/' \
|
||||
#
|
||||
# # remove any trailing non-[-text after the final "[some string](path)"
|
||||
#
|
||||
# -e 's/(\[[^]]*\]\([^(]*\))[^[]+$/\1/' \
|
||||
#
|
||||
# # replace ")..non-open-bracket-stuff.[" with ") ["
|
||||
#
|
||||
# -e 's/\)[^[]*\[/) [/g' \
|
||||
#
|
||||
# # replace "[some string](apath) [other string](bpath)" with two lines:
|
||||
# #
|
||||
# # "[some string](apath)"
|
||||
# # "[other string](bpath)"
|
||||
#
|
||||
# -e 's/(\[[^]]*\]\([^(]*\))/\1\n/g' \
|
||||
#
|
||||
# # remove blank and empty lines
|
||||
#
|
||||
# -e '/^\s*$/d' \
|
||||
#
|
||||
# Then pipe the lines into another sed:
|
||||
#
|
||||
# # replace multiple space with a single space
|
||||
#
|
||||
# -e 's/ +/ /g' \
|
||||
#
|
||||
# # remove blank and empty lines
|
||||
#
|
||||
# -e '/^\s*$/d' \
|
||||
#
|
||||
# # prepend the markdown path (without the leading "./") followed by space to each line
|
||||
#
|
||||
# -e "s;^;$MD_PATH ;" \
|
||||
#
|
||||
# # replace multiple space with a single space
|
||||
#
|
||||
# -e 's/ +/ /g'
|
||||
#
|
||||
# Output are lines of the form:
|
||||
#
|
||||
# markdown_path.md [pseudo title](path)
|
||||
#
|
||||
# We do not process markdown.md because it contains examples
|
||||
# of poor markdown use.
|
||||
#
|
||||
find . -name '*.md' ! -name markdown.md ! -path './tmp/*' -print |
|
||||
LANG=C sort -d |
|
||||
xargs grep '\]([^)][^)]*)' /dev/null |
|
||||
sed -E \
|
||||
-e 's;^\.\/;;' \
|
||||
-e 's/^([^:]+):\s*/\1 /' \
|
||||
|
|
||||
while read -r MD_PATH MD_LINE; do
|
||||
echo "$MD_LINE" |
|
||||
sed -E \
|
||||
-e 's/^[^[]()+\[/[/' \
|
||||
-e 's/^([^][]*\]\()/[\1/g' \
|
||||
-e 's/(\[[^][]*\])+([^(])/\2/g' \
|
||||
-e 's/^[^][]+(\[[^]]*\]\([^(]*\))/\1/' \
|
||||
-e 's/\[[^]]*$//' \
|
||||
-e 's/(\([^)]*\))[^[]*$/\1/' \
|
||||
-e 's/(\[[^]]*\]\([^(]*\))[^[]+$/\1/' \
|
||||
-e 's/\)[^[]*\[/) [/g' \
|
||||
-e 's/(\[[^]]*\]\([^(]*\))/\1\n/g' \
|
||||
-e '/^\s*$/d' \
|
||||
|
|
||||
sed -E \
|
||||
-e 's/ +/ /g' \
|
||||
-e '/^\s*$/d' \
|
||||
-e "s;^;${MD_PATH} ;" \
|
||||
-e 's/ +/ /g'
|
||||
done
|
||||
|
||||
# All Done!!! All Done!!! -- Jessica Noll, Age 2
|
||||
#
|
||||
exit 0
|
||||
@@ -1,343 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# md-local-links.sh - print all markdown links to a local file
|
||||
#
|
||||
# For all markdown files, print markdown links that are local.
|
||||
# We ignore URLs that start with "http:" or "https:".
|
||||
# We ignore links that are internal to the file (i.e., "#name").
|
||||
#
|
||||
# Copyright (c) 2024 by Landon Curt Noll. All Rights Reserved.
|
||||
#
|
||||
# Permission to use, copy, modify, and distribute this software and
|
||||
# its documentation for any purpose and without fee is hereby granted,
|
||||
# provided that the above copyright, this permission notice and text
|
||||
# this comment, and the disclaimer below appear in all of the following:
|
||||
#
|
||||
# supporting documentation
|
||||
# source copies
|
||||
# source works derived from this source
|
||||
# binaries derived from this source or from derived source
|
||||
#
|
||||
# LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
||||
# EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
||||
# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
# chongo (Landon Curt Noll, http://www.isthe.com/chongo/index.html) /\oo/\
|
||||
#
|
||||
# Share and enjoy! :-)
|
||||
|
||||
# firewall - run only with a bash that is version 5.1.8 or later
|
||||
#
|
||||
# The "/usr/bin/env bash" command must result in using a bash that
|
||||
# is version 5.1.8 or later.
|
||||
#
|
||||
# We could relax this version and insist on version 4.2 or later. Versions
|
||||
# of bash between 4.2 and 5.1.7 might work. However, to be safe, we will require
|
||||
# bash version 5.1.8 or later.
|
||||
#
|
||||
# WHY 5.1.8 and not 4.2? This safely is done because macOS Homebrew bash we
|
||||
# often use is "version 5.2.26(1)-release" or later, and the RHEL Linux bash we
|
||||
# use often use is "version 5.1.8(1)-release" or later. These versions are what
|
||||
# we initially tested. We recommend you either upgrade bash or install a newer
|
||||
# version of bash and adjust your $PATH so that "/usr/bin/env bash" finds a bash
|
||||
# that is version 5.1.8 or later.
|
||||
#
|
||||
# NOTE: The macOS shipped, as of 2024 March 15, a version of bash is something like
|
||||
# bash "version 3.2.57(1)-release". That macOS shipped version of bash
|
||||
# will NOT work. For users of macOS we recommend you install Homebrew,
|
||||
# (see https://brew.sh), and then run "brew install bash" which will
|
||||
# typically install it into /opt/homebrew/bin/bash, and then arrange your $PATH
|
||||
# so that "/usr/bin/env bash" finds "/opt/homebrew/bin" (or whatever the
|
||||
# Homebrew bash is).
|
||||
#
|
||||
# NOTE: And while MacPorts might work, we noticed a number of subtle differences
|
||||
# with some of their ported tools to suggest you might be better off
|
||||
# with installing Homebrew (see https://brew.sh). No disrespect is intended
|
||||
# to the MacPorts team as they do a commendable job. Nevertheless we ran
|
||||
# into enough differences with MacPorts environments to suggest you
|
||||
# might find a better experience with this tool under Homebrew instead.
|
||||
#
|
||||
if [[ -z ${BASH_VERSINFO[0]} ||
|
||||
${BASH_VERSINFO[0]} -lt 5 ||
|
||||
${BASH_VERSINFO[0]} -eq 5 && ${BASH_VERSINFO[1]} -lt 1 ||
|
||||
${BASH_VERSINFO[0]} -eq 5 && ${BASH_VERSINFO[1]} -eq 1 && ${BASH_VERSINFO[2]} -lt 8 ]]; then
|
||||
echo "$0: ERROR: bash version needs to be >= 5.1.8: $BASH_VERSION" 1>&2
|
||||
echo "$0: Warning: bash version >= 4.2 might work but 5.1.8 was the minimum we tested" 1>&2
|
||||
echo "$0: Notice: For macOS users: install Homebrew (see https://brew.sh), then run" \
|
||||
""brew install bash" and then modify your \$PATH so that \"#!/usr/bin/env bash\"" \
|
||||
"finds the Homebrew installed (usually /opt/homebrew/bin/bash) version of bash" 1>&2
|
||||
exit 4
|
||||
fi
|
||||
|
||||
|
||||
# setup bash file matching
|
||||
#
|
||||
# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables.
|
||||
# This requires a bash with a version 4.2 or later. See the larger comment above about bash versions.
|
||||
#
|
||||
shopt -s nullglob # enable expanded to nothing rather than remaining unexpanded
|
||||
shopt -u failglob # disable error message if no matches are found
|
||||
shopt -u dotglob # disable matching files starting with .
|
||||
shopt -u nocaseglob # disable strict case matching
|
||||
shopt -u extglob # enable extended globbing patterns
|
||||
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
|
||||
|
||||
# set variables referenced in the usage message
|
||||
#
|
||||
export VERSION="1.0 2024-04-25"
|
||||
NAME=$(basename "$0")
|
||||
export NAME
|
||||
export V_FLAG=0
|
||||
GIT_TOOL=$(type -P git)
|
||||
export GIT_TOOL
|
||||
if [[ -z "$GIT_TOOL" ]]; then
|
||||
echo "$0: FATAL: git tool is not installed or not in \$PATH" 1>&2
|
||||
exit 5
|
||||
fi
|
||||
"$GIT_TOOL" rev-parse --is-inside-work-tree >/dev/null 2>&1
|
||||
status="$?"
|
||||
if [[ $status -eq 0 ]]; then
|
||||
TOPDIR=$("$GIT_TOOL" rev-parse --show-toplevel)
|
||||
fi
|
||||
export TOPDIR
|
||||
|
||||
|
||||
# usage
|
||||
#
|
||||
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir]
|
||||
|
||||
-h print help message and exit
|
||||
-v level set verbosity level (def level: 0)
|
||||
-V print version string and exit
|
||||
|
||||
-d topdir set topdir (def: $TOPDIR)
|
||||
|
||||
Exit codes:
|
||||
0 all OK
|
||||
1 some internal tool exited non-zero
|
||||
2 -h and help string printed or -V and version string printed
|
||||
3 command line error
|
||||
4 bash version is too old
|
||||
>= 10 internal error
|
||||
|
||||
$NAME version: $VERSION"
|
||||
|
||||
|
||||
# parse command line
|
||||
#
|
||||
while getopts :hv:Vd:nN flag; do
|
||||
case "$flag" in
|
||||
h) echo "$USAGE" 1>&2
|
||||
exit 2
|
||||
;;
|
||||
v) V_FLAG="$OPTARG"
|
||||
;;
|
||||
V) echo "$VERSION"
|
||||
exit 2
|
||||
;;
|
||||
d) TOPDIR="$OPTARG"
|
||||
;;
|
||||
\?) echo "$0: ERROR: invalid option: -$OPTARG" 1>&2
|
||||
echo 1>&2
|
||||
print_usage 1>&2
|
||||
exit 3
|
||||
;;
|
||||
:) echo "$0: ERROR: option -$OPTARG requires an argument" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
*) echo "$0: ERROR: unexpected value from getopts: $flag" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# remove the options
|
||||
#
|
||||
shift $(( OPTIND - 1 ));
|
||||
#
|
||||
if [[ $V_FLAG -ge 5 ]]; then
|
||||
echo "$0: debug[5]: file argument count: $#" 1>&2
|
||||
fi
|
||||
#
|
||||
# verify arg count and parse args
|
||||
#
|
||||
export TOOL
|
||||
case "$#" in
|
||||
0) ;;
|
||||
*) echo "$0: ERROR: expected 0 args, found: $#" 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
|
||||
# print running info if verbose
|
||||
#
|
||||
# If -v 3 or higher, print exported variables in order that they were exported.
|
||||
#
|
||||
if [[ $V_FLAG -ge 3 ]]; then
|
||||
echo "$0: debug[3]: VERSION=$VERSION" 1>&2
|
||||
echo "$0: debug[3]: NAME=$NAME" 1>&2
|
||||
echo "$0: debug[3]: V_FLAG=$V_FLAG" 1>&2
|
||||
echo "$0: debug[3]: GIT_TOOL=$GIT_TOOL" 1>&2
|
||||
echo "$0: debug[3]: TOPDIR=$TOPDIR" 1>&2
|
||||
fi
|
||||
|
||||
|
||||
# cd to topdir
|
||||
#
|
||||
if [[ ! -e $TOPDIR ]]; then
|
||||
echo "$0: ERROR: cannot cd to non-existent path: $TOPDIR" 1>&2
|
||||
exit 6
|
||||
fi
|
||||
if [[ ! -d $TOPDIR ]]; then
|
||||
echo "$0: ERROR: cannot cd to a non-directory: $TOPDIR" 1>&2
|
||||
exit 6
|
||||
fi
|
||||
export CD_FAILED
|
||||
if [[ $V_FLAG -ge 5 ]]; then
|
||||
echo "$0: debug[5]: about to: cd $TOPDIR" 1>&2
|
||||
fi
|
||||
cd "$TOPDIR" || CD_FAILED="true"
|
||||
if [[ -n $CD_FAILED ]]; then
|
||||
echo "$0: ERROR: cd $TOPDIR failed" 1>&2
|
||||
exit 6
|
||||
fi
|
||||
if [[ $V_FLAG -ge 3 ]]; then
|
||||
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
|
||||
fi
|
||||
|
||||
|
||||
# collect markdown links
|
||||
#
|
||||
# Here be extended regular expression magic dragons! :-)
|
||||
#
|
||||
# We will try to explain, as best as we can, these complex regular expressions.
|
||||
#
|
||||
# After grep of markdown files (files in sorted dictionary order) for markdown line lines, we sed:
|
||||
#
|
||||
# # remove any "[some string]" that is not immediately followed by "("
|
||||
#
|
||||
# -e 's/\[[^]]*\]([^(])/\1/' \
|
||||
#
|
||||
# # remove any trialing "[followed by text without a closing bracket"
|
||||
#
|
||||
# -e 's/\[[^]]*$//' \
|
||||
#
|
||||
# Then processing the second file (after the filename field) we sed:
|
||||
#
|
||||
# # remove any leading "..non-[-stuff..["
|
||||
#
|
||||
# -e 's/^[^[]()+\[/[/' \
|
||||
#
|
||||
# # replace "beginning text stuff](" with "[text stuff]("
|
||||
# # because the previous line might have ended with "[beginning"
|
||||
#
|
||||
# -e 's/^([^][]*\]\()/[\1/g' \
|
||||
#
|
||||
# # remove any "[..non-]-stuff..][..more-non-]-stuff..]"
|
||||
#
|
||||
# -e 's/(\[[^][]*\])+([^(])/\2/g' \
|
||||
#
|
||||
# # remove any non-link before the first "[some string](path)"
|
||||
#
|
||||
# -e 's/^[^][]+(\[[^]]*\]\([^(]*\))/\1/' \
|
||||
#
|
||||
# # remove any final "[..non-]-stuff..$"
|
||||
#
|
||||
# -e 's/\[[^]]*$//' \
|
||||
#
|
||||
# # remove any final "(..non-)-stuff..)..non-[-stuff.."
|
||||
#
|
||||
# -e 's/(\([^)]*\))[^[]*$/\1/' \
|
||||
#
|
||||
# # remove any trailing non-[-text after the final "[some string](path)"
|
||||
#
|
||||
# -e 's/(\[[^]]*\]\([^(]*\))[^[]+$/\1/' \
|
||||
#
|
||||
# # replace ")..non-open-bracket-stuff.[" with ") ["
|
||||
#
|
||||
# -e 's/\)[^[]*\[/) [/g' \
|
||||
#
|
||||
# # replace "[some string](apath) [other string](bpath)" with two lines:
|
||||
# #
|
||||
# # "[some string](apath)"
|
||||
# # "[other string](bpath)"
|
||||
#
|
||||
# -e 's/(\[[^]]*\]\([^(]*\))/\1\n/g' \
|
||||
#
|
||||
# # remove blank and empty lines
|
||||
#
|
||||
# -e '/^\s*$/d' \
|
||||
#
|
||||
# Then pipe the lines into another sed:
|
||||
#
|
||||
# # replace multiple space with a single space
|
||||
#
|
||||
# -e 's/ +/ /g' \
|
||||
#
|
||||
# # remove blank and empty lines
|
||||
#
|
||||
# -e '/^\s*$/d' \
|
||||
#
|
||||
# # prepend the markdown path (without the leading "./") followed by space to each line
|
||||
#
|
||||
# -e "s;^;$MD_PATH ;" \
|
||||
#
|
||||
# # replace multiple space with a single space
|
||||
#
|
||||
# -e 's/ +/ /g'
|
||||
#
|
||||
# We then remove all links that start with:
|
||||
#
|
||||
# http:
|
||||
# https:
|
||||
# mailto:
|
||||
# #
|
||||
#
|
||||
# Output are lines of the form:
|
||||
#
|
||||
# markdown_path.md [pseudo title](path)
|
||||
#
|
||||
# We do not process markdown.md because it contains examples
|
||||
# of poor markdown use.
|
||||
#
|
||||
find . -name '*.md' ! -name markdown.md ! -path './tmp/*' -print |
|
||||
LANG=C sort -d |
|
||||
xargs grep '\]([^)][^)]*)' /dev/null |
|
||||
sed -E \
|
||||
-e 's;^\.\/;;' \
|
||||
-e 's/^([^:]+):\s*/\1 /' \
|
||||
|
|
||||
while read -r MD_PATH MD_LINE; do
|
||||
echo "$MD_LINE" |
|
||||
sed -E \
|
||||
-e 's/^[^[]()+\[/[/' \
|
||||
-e 's/^([^][]*\]\()/[\1/g' \
|
||||
-e 's/(\[[^][]*\])+([^(])/\2/g' \
|
||||
-e 's/^[^][]+(\[[^]]*\]\([^(]*\))/\1/' \
|
||||
-e 's/\[[^]]*$//' \
|
||||
-e 's/(\([^)]*\))[^[]*$/\1/' \
|
||||
-e 's/(\[[^]]*\]\([^(]*\))[^[]+$/\1/' \
|
||||
-e 's/\)[^[]*\[/) [/g' \
|
||||
-e 's/(\[[^]]*\]\([^(]*\))/\1\n/g' \
|
||||
-e '/^\s*$/d' \
|
||||
|
|
||||
sed -E \
|
||||
-e 's/ +/ /g' \
|
||||
-e '/^\s*$/d' \
|
||||
-e "s;^;${MD_PATH} ;" \
|
||||
-e 's/ +/ /g'
|
||||
done |
|
||||
grep -E -v '^\S+ \[[^]]*\]\(http:|^\S+ \[[^]]*\]\(https:|^\S+ \[[^]]*\]\(mailto:|^\S+ \[[^]]*\]\(#'
|
||||
|
||||
# All Done!!! All Done!!! -- Jessica Noll, Age 2
|
||||
#
|
||||
exit 0
|
||||
@@ -1,331 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# md--token-links.sh - print all markdown links that start with a **%%TOKEN%%**
|
||||
#
|
||||
# Copyright (c) 2024 by Landon Curt Noll. All Rights Reserved.
|
||||
#
|
||||
# Permission to use, copy, modify, and distribute this software and
|
||||
# its documentation for any purpose and without fee is hereby granted,
|
||||
# provided that the above copyright, this permission notice and text
|
||||
# this comment, and the disclaimer below appear in all of the following:
|
||||
#
|
||||
# supporting documentation
|
||||
# source copies
|
||||
# source works derived from this source
|
||||
# binaries derived from this source or from derived source
|
||||
#
|
||||
# LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
||||
# EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
||||
# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
# chongo (Landon Curt Noll, http://www.isthe.com/chongo/index.html) /\oo/\
|
||||
#
|
||||
# Share and enjoy! :-)
|
||||
|
||||
# firewall - run only with a bash that is version 5.1.8 or later
|
||||
#
|
||||
# The "/usr/bin/env bash" command must result in using a bash that
|
||||
# is version 5.1.8 or later.
|
||||
#
|
||||
# We could relax this version and insist on version 4.2 or later. Versions
|
||||
# of bash between 4.2 and 5.1.7 might work. However, to be safe, we will require
|
||||
# bash version 5.1.8 or later.
|
||||
#
|
||||
# WHY 5.1.8 and not 4.2? This safely is done because macOS Homebrew bash we
|
||||
# often use is "version 5.2.26(1)-release" or later, and the RHEL Linux bash we
|
||||
# use often use is "version 5.1.8(1)-release" or later. These versions are what
|
||||
# we initially tested. We recommend you either upgrade bash or install a newer
|
||||
# version of bash and adjust your $PATH so that "/usr/bin/env bash" finds a bash
|
||||
# that is version 5.1.8 or later.
|
||||
#
|
||||
# NOTE: The macOS shipped, as of 2024 March 15, a version of bash is something like
|
||||
# bash "version 3.2.57(1)-release". That macOS shipped version of bash
|
||||
# will NOT work. For users of macOS we recommend you install Homebrew,
|
||||
# (see https://brew.sh), and then run "brew install bash" which will
|
||||
# typically install it into /opt/homebrew/bin/bash, and then arrange your $PATH
|
||||
# so that "/usr/bin/env bash" finds "/opt/homebrew/bin" (or whatever the
|
||||
# Homebrew bash is).
|
||||
#
|
||||
# NOTE: And while MacPorts might work, we noticed a number of subtle differences
|
||||
# with some of their ported tools to suggest you might be better off
|
||||
# with installing Homebrew (see https://brew.sh). No disrespect is intended
|
||||
# to the MacPorts team as they do a commendable job. Nevertheless we ran
|
||||
# into enough differences with MacPorts environments to suggest you
|
||||
# might find a better experience with this tool under Homebrew instead.
|
||||
#
|
||||
if [[ -z ${BASH_VERSINFO[0]} ||
|
||||
${BASH_VERSINFO[0]} -lt 5 ||
|
||||
${BASH_VERSINFO[0]} -eq 5 && ${BASH_VERSINFO[1]} -lt 1 ||
|
||||
${BASH_VERSINFO[0]} -eq 5 && ${BASH_VERSINFO[1]} -eq 1 && ${BASH_VERSINFO[2]} -lt 8 ]]; then
|
||||
echo "$0: ERROR: bash version needs to be >= 5.1.8: $BASH_VERSION" 1>&2
|
||||
echo "$0: Warning: bash version >= 4.2 might work but 5.1.8 was the minimum we tested" 1>&2
|
||||
echo "$0: Notice: For macOS users: install Homebrew (see https://brew.sh), then run" \
|
||||
""brew install bash" and then modify your \$PATH so that \"#!/usr/bin/env bash\"" \
|
||||
"finds the Homebrew installed (usually /opt/homebrew/bin/bash) version of bash" 1>&2
|
||||
exit 4
|
||||
fi
|
||||
|
||||
|
||||
# setup bash file matching
|
||||
#
|
||||
# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables.
|
||||
# This requires a bash with a version 4.2 or later. See the larger comment above about bash versions.
|
||||
#
|
||||
shopt -s nullglob # enable expanded to nothing rather than remaining unexpanded
|
||||
shopt -u failglob # disable error message if no matches are found
|
||||
shopt -u dotglob # disable matching files starting with .
|
||||
shopt -u nocaseglob # disable strict case matching
|
||||
shopt -u extglob # enable extended globbing patterns
|
||||
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
|
||||
|
||||
# set variables referenced in the usage message
|
||||
#
|
||||
export VERSION="1.0 2024-04-25"
|
||||
NAME=$(basename "$0")
|
||||
export NAME
|
||||
export V_FLAG=0
|
||||
GIT_TOOL=$(type -P git)
|
||||
export GIT_TOOL
|
||||
if [[ -z "$GIT_TOOL" ]]; then
|
||||
echo "$0: FATAL: git tool is not installed or not in \$PATH" 1>&2
|
||||
exit 5
|
||||
fi
|
||||
"$GIT_TOOL" rev-parse --is-inside-work-tree >/dev/null 2>&1
|
||||
status="$?"
|
||||
if [[ $status -eq 0 ]]; then
|
||||
TOPDIR=$("$GIT_TOOL" rev-parse --show-toplevel)
|
||||
fi
|
||||
export TOPDIR
|
||||
|
||||
|
||||
# usage
|
||||
#
|
||||
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir]
|
||||
|
||||
-h print help message and exit
|
||||
-v level set verbosity level (def level: 0)
|
||||
-V print version string and exit
|
||||
|
||||
-d topdir set topdir (def: $TOPDIR)
|
||||
|
||||
Exit codes:
|
||||
0 all OK
|
||||
1 some internal tool exited non-zero
|
||||
2 -h and help string printed or -V and version string printed
|
||||
3 command line error
|
||||
4 bash version is too old
|
||||
>= 10 internal error
|
||||
|
||||
$NAME version: $VERSION"
|
||||
|
||||
|
||||
# parse command line
|
||||
#
|
||||
while getopts :hv:Vd:nN flag; do
|
||||
case "$flag" in
|
||||
h) echo "$USAGE" 1>&2
|
||||
exit 2
|
||||
;;
|
||||
v) V_FLAG="$OPTARG"
|
||||
;;
|
||||
V) echo "$VERSION"
|
||||
exit 2
|
||||
;;
|
||||
d) TOPDIR="$OPTARG"
|
||||
;;
|
||||
\?) echo "$0: ERROR: invalid option: -$OPTARG" 1>&2
|
||||
echo 1>&2
|
||||
print_usage 1>&2
|
||||
exit 3
|
||||
;;
|
||||
:) echo "$0: ERROR: option -$OPTARG requires an argument" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
*) echo "$0: ERROR: unexpected value from getopts: $flag" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# remove the options
|
||||
#
|
||||
shift $(( OPTIND - 1 ));
|
||||
#
|
||||
if [[ $V_FLAG -ge 5 ]]; then
|
||||
echo "$0: debug[5]: file argument count: $#" 1>&2
|
||||
fi
|
||||
#
|
||||
# verify arg count and parse args
|
||||
#
|
||||
export TOOL
|
||||
case "$#" in
|
||||
0) ;;
|
||||
*) echo "$0: ERROR: expected 0 args, found: $#" 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
|
||||
# print running info if verbose
|
||||
#
|
||||
# If -v 3 or higher, print exported variables in order that they were exported.
|
||||
#
|
||||
if [[ $V_FLAG -ge 3 ]]; then
|
||||
echo "$0: debug[3]: VERSION=$VERSION" 1>&2
|
||||
echo "$0: debug[3]: NAME=$NAME" 1>&2
|
||||
echo "$0: debug[3]: V_FLAG=$V_FLAG" 1>&2
|
||||
echo "$0: debug[3]: GIT_TOOL=$GIT_TOOL" 1>&2
|
||||
echo "$0: debug[3]: TOPDIR=$TOPDIR" 1>&2
|
||||
fi
|
||||
|
||||
|
||||
# cd to topdir
|
||||
#
|
||||
if [[ ! -e $TOPDIR ]]; then
|
||||
echo "$0: ERROR: cannot cd to non-existent path: $TOPDIR" 1>&2
|
||||
exit 6
|
||||
fi
|
||||
if [[ ! -d $TOPDIR ]]; then
|
||||
echo "$0: ERROR: cannot cd to a non-directory: $TOPDIR" 1>&2
|
||||
exit 6
|
||||
fi
|
||||
export CD_FAILED
|
||||
if [[ $V_FLAG -ge 5 ]]; then
|
||||
echo "$0: debug[5]: about to: cd $TOPDIR" 1>&2
|
||||
fi
|
||||
cd "$TOPDIR" || CD_FAILED="true"
|
||||
if [[ -n $CD_FAILED ]]; then
|
||||
echo "$0: ERROR: cd $TOPDIR failed" 1>&2
|
||||
exit 6
|
||||
fi
|
||||
if [[ $V_FLAG -ge 3 ]]; then
|
||||
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
|
||||
fi
|
||||
|
||||
|
||||
# collect markdown links with a path that starts with a %%TOKEN%%
|
||||
#
|
||||
# Here be extended regular expression magic dragons! :-)
|
||||
#
|
||||
# We will try to explain, as best as we can, these complex regular expressions.
|
||||
#
|
||||
# After grep of markdown files (files in sorted dictionary order) for (%%TOKEN%%) lines, we sed:
|
||||
#
|
||||
# # remove any "[some string]" that is not immediately followed by "("
|
||||
#
|
||||
# -e 's/\[[^]]*\]([^(])/\1/' \
|
||||
#
|
||||
# # remove any trialing "[followed by text without a closing bracket"
|
||||
#
|
||||
# -e 's/\[[^]]*$//' \
|
||||
#
|
||||
# Then processing the second file (after the filename field) we sed:
|
||||
#
|
||||
# # remove any leading "..non-[-stuff..["
|
||||
#
|
||||
# -e 's/^[^[]()+\[/[/' \
|
||||
#
|
||||
# # replace "beginning text stuff](" with "[text stuff]("
|
||||
# # because the previous line might have ended with "[beginning"
|
||||
#
|
||||
# -e 's/^([^][]*\]\()/[\1/g' \
|
||||
#
|
||||
# # remove any "[..non-]-stuff..][..more-non-]-stuff..]"
|
||||
#
|
||||
# -e 's/(\[[^][]*\])+([^(])/\2/g' \
|
||||
#
|
||||
# # remove any non-link before the first "[some string](path)"
|
||||
#
|
||||
# -e 's/^[^][]+(\[[^]]*\]\([^(]*\))/\1/' \
|
||||
#
|
||||
# # remove any final "[..non-]-stuff..$"
|
||||
#
|
||||
# -e 's/\[[^]]*$//' \
|
||||
#
|
||||
# # remove any final "(..non-)-stuff..)..non-[-stuff.."
|
||||
#
|
||||
# -e 's/(\([^)]*\))[^[]*$/\1/' \
|
||||
#
|
||||
# # remove any trailing non-[-text after the final "[some string](%%TOKEN%%path)"
|
||||
#
|
||||
# -e 's/(\[[^]]*\]\([^(]*\))[^[]+$/\1/' \
|
||||
#
|
||||
# # replace ")..non-open-bracket-stuff.[" with ") ["
|
||||
#
|
||||
# -e 's/\)[^[]*\[/) [/g' \
|
||||
#
|
||||
# # replace "[some string](apath) [other string](bpath)" with two lines:
|
||||
# #
|
||||
# # "[some string](apath)"
|
||||
# # "[other string](bpath)"
|
||||
#
|
||||
# -e 's/(\[[^]]*\]\([^(]*\))/\1\n/g' \
|
||||
#
|
||||
# # remove blank and empty lines
|
||||
#
|
||||
# -e '/^\s*$/d' \
|
||||
#
|
||||
# Then pipe the lines into another sed:
|
||||
#
|
||||
# # replace multiple space with a single space
|
||||
#
|
||||
# -e 's/ +/ /g' \
|
||||
#
|
||||
# # remove blank and empty lines
|
||||
#
|
||||
# -e '/^\s*$/d' \
|
||||
#
|
||||
# # prepend the markdown path (without the leading "./") followed by space to each line
|
||||
#
|
||||
# -e "s;^;$MD_PATH ;" \
|
||||
#
|
||||
# # replace multiple space with a single space
|
||||
#
|
||||
# -e 's/ +/ /g'
|
||||
#
|
||||
# Output are lines of the form:
|
||||
#
|
||||
# markdown_path.md [pseudo title](%%TOKEN%%path)
|
||||
#
|
||||
# We do not process markdown.md because it contains examples
|
||||
# of poor markdown use.
|
||||
#
|
||||
find . -name '*.md' ! -name markdown.md ! -path './tmp/*' -print |
|
||||
LANG=C sort -d |
|
||||
xargs grep '\](%%[A-Za-z][0-9A-Za-z_]*%%[^)]*)' /dev/null |
|
||||
sed -E \
|
||||
-e 's;^\.\/;;' \
|
||||
-e 's/^([^:]+):\s*/\1 /' \
|
||||
|
|
||||
while read -r MD_PATH MD_LINE; do
|
||||
echo "$MD_LINE" |
|
||||
sed -E \
|
||||
-e 's/^[^[]()+\[/[/' \
|
||||
-e 's/^([^][]*\]\()/[\1/g' \
|
||||
-e 's/(\[[^][]*\])+([^(])/\2/g' \
|
||||
-e 's/^[^][]+(\[[^]]*\]\([^(]*\))/\1/' \
|
||||
-e 's/\[[^]]*$//' \
|
||||
-e 's/(\([^)]*\))[^[]*$/\1/' \
|
||||
-e 's/(\[[^]]*\]\([^(]*\))[^[]+$/\1/' \
|
||||
-e 's/\)[^[]*\[/) [/g' \
|
||||
-e 's/(\[[^]]*\]\([^(]*\))/\1\n/g' \
|
||||
-e '/^\s*$/d' \
|
||||
|
|
||||
sed -E \
|
||||
-e 's/ +/ /g' \
|
||||
-e '/^\s*$/d' \
|
||||
-e "s;^;${MD_PATH} ;" \
|
||||
-e 's/ +/ /g'
|
||||
done
|
||||
|
||||
# All Done!!! All Done!!! -- Jessica Noll, Age 2
|
||||
#
|
||||
exit 0
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
-218
@@ -1,218 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# run_all.sh - run a command for all entries
|
||||
#
|
||||
# XXX - This is a temporary utility that will be replaced when
|
||||
# the .entry.json files are built
|
||||
#
|
||||
# Copyright (c) 2023 by Landon Curt Noll. All Rights Reserved.
|
||||
#
|
||||
# Permission to use, copy, modify, and distribute this software and
|
||||
# its documentation for any purpose and without fee is hereby granted,
|
||||
# provided that the above copyright, this permission notice and text
|
||||
# this comment, and the disclaimer below appear in all of the following:
|
||||
#
|
||||
# supporting documentation
|
||||
# source copies
|
||||
# source works derived from this source
|
||||
# binaries derived from this source or from derived source
|
||||
#
|
||||
# LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
||||
# EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
||||
# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
# chongo (Landon Curt Noll, http://www.isthe.com/chongo/index.html) /\oo/\
|
||||
#
|
||||
# Share and enjoy! :-)
|
||||
|
||||
# setup
|
||||
#
|
||||
export VERSION="1.0.1 2023-11-06"
|
||||
NAME=$(basename "$0"); export NAME
|
||||
EXIT_CODE=0
|
||||
#
|
||||
export V_FLAG=0
|
||||
export CAP_D_FLAG=0
|
||||
export DOMAIN="ioccc-src.github.io"
|
||||
export DOCPATH="/temp-test-ioccc"
|
||||
export GITHUB_REPO="https://github.com/ioccc-src/temp-test-ioccc/blob/master"
|
||||
export TOPDIR=".."
|
||||
export ENTRY_DIR_TXT="entry_dir.txt"
|
||||
|
||||
# usage
|
||||
#
|
||||
export USAGE="usage: $0 [-h] [-v level] [-D level]
|
||||
[-d www.domain.org] [-p /path/to/docroot] [-g github_url ] [-t topdir] [-w entry_dir.txt]
|
||||
tool
|
||||
|
||||
-h print help message and exit
|
||||
-v level set verbosity level (def level: $V_FLAG)
|
||||
-D level set verbosity level (via -v level) in tool: (def level: $CAP_D_FLAG)
|
||||
|
||||
-d www.domain.org change domain (def: $DOMAIN)
|
||||
-p /path/to/docroot use path under domain to document root (def: $DOCPATH)
|
||||
-g github_url path to the GitHub repo (def: $GITHUB_REPO)
|
||||
-t topdir path to top of the local GitHub repo tree (def: $TOPDIR)
|
||||
|
||||
-w entry_dir.txt
|
||||
|
||||
tool the tool to run over all entries
|
||||
|
||||
Exit codes:
|
||||
0 all OK
|
||||
2 -h and help string printed or -V and version string printed
|
||||
3 command line error
|
||||
4 cannot find writable entry directory
|
||||
5 tool is not an executable file
|
||||
6 missing entry directory as found in entry_dir.txt
|
||||
7 tool exited non-zero
|
||||
>= 10 internal error
|
||||
|
||||
$NAME version: $VERSION"
|
||||
|
||||
# parse command line
|
||||
#
|
||||
while getopts :hv:D:d:p:g:t:w: flag; do
|
||||
case "$flag" in
|
||||
h) echo "$USAGE"
|
||||
exit 2
|
||||
;;
|
||||
v) V_FLAG="$OPTARG"
|
||||
;;
|
||||
D) CAP_D_FLAG="$OPTARG"
|
||||
;;
|
||||
d) DOMAIN="$OPTARG"
|
||||
;;
|
||||
p) DOCPATH="$OPTARG"
|
||||
;;
|
||||
g) GITHUB_REPO="$OPTARG"
|
||||
;;
|
||||
t) TOPDIR="$OPTARG"
|
||||
;;
|
||||
w) ENTRY_DIR_TXT="$OPTARG"
|
||||
;;
|
||||
\?) echo "$0: ERROR: invalid option: -$OPTARG" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
:) echo "$0: ERROR: option -$OPTARG requires an argument" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
*) echo "$0: ERROR: unexpected value from getopts: $flag" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
done
|
||||
#
|
||||
# remove the options
|
||||
#
|
||||
shift $(( OPTIND - 1 ));
|
||||
#
|
||||
# verify arg count and parse args
|
||||
#
|
||||
export TOOL
|
||||
case "$#" in
|
||||
1) TOOL="$1"
|
||||
;;
|
||||
*) echo "$0: ERROR: expected 1 arg, found: $#" 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
|
||||
# print running info if verbose
|
||||
#
|
||||
if [[ $V_FLAG -ge 3 ]]; then
|
||||
echo "$0: debug[3]: V_FLAG=$V_FLAG" 1>&2
|
||||
echo "$0: debug[3]: CAP_D_FLAG=$CAP_D_FLAG" 1>&2
|
||||
echo "$0: debug[3]: DOMAIN=$DOMAIN" 1>&2
|
||||
echo "$0: debug[3]: DOCPATH=$DOCPATH" 1>&2
|
||||
echo "$0: debug[3]: GITHUB_REPO=$GITHUB_REPO" 1>&2
|
||||
echo "$0: debug[3]: TOPDIR=$TOPDIR" 1>&2
|
||||
echo "$0: debug[3]: TOOL=$TOOL" 1>&2
|
||||
echo "$0: debug[3]: ENTRY_DIR_TXT=$ENTRY_DIR_TXT" 1>&2
|
||||
fi
|
||||
|
||||
# make it easier to process CSV files
|
||||
#
|
||||
IFS="$IFS,"
|
||||
|
||||
# verify entry_dir.txt is readable
|
||||
#
|
||||
if [[ ! -e $ENTRY_DIR_TXT ]]; then
|
||||
echo "$0: ERROR: ENTRY_DIR_TXT does not exist: $ENTRY_DIR_TXT" 1>&2
|
||||
exit 4
|
||||
fi
|
||||
if [[ ! -f $ENTRY_DIR_TXT ]]; then
|
||||
echo "$0: ERROR: ENTRY_DIR_TXT is not a regular file: $ENTRY_DIR_TXT" 1>&2
|
||||
exit 4
|
||||
fi
|
||||
if [[ ! -r $ENTRY_DIR_TXT ]]; then
|
||||
echo "$0: ERROR: ENTRY_DIR_TXT is not a readable file: $ENTRY_DIR_TXT" 1>&2
|
||||
exit 4
|
||||
fi
|
||||
|
||||
# verify tool is executable
|
||||
#
|
||||
if [[ ! -e $TOOL ]]; then
|
||||
echo "$0: ERROR: TOOL does not exist: $TOOL" 1>&2
|
||||
exit 5
|
||||
fi
|
||||
if [[ ! -f $TOOL ]]; then
|
||||
echo "$0: ERROR: TOOL is not a regular file: $TOOL" 1>&2
|
||||
exit 5
|
||||
fi
|
||||
if [[ ! -x $TOOL ]]; then
|
||||
echo "$0: ERROR: TOOL is not an executable file: $TOOL" 1>&2
|
||||
exit 5
|
||||
fi
|
||||
|
||||
# verify that the entry directories exist
|
||||
#
|
||||
for d in $(< "$ENTRY_DIR_TXT"); do
|
||||
dir="$TOPDIR/$d"
|
||||
if [[ ! -e $dir ]]; then
|
||||
echo "$0: ERROR: entry directory does not exist: $dir" 1>&2
|
||||
exit 6
|
||||
fi
|
||||
if [[ ! -d $dir ]]; then
|
||||
echo "$0: ERROR: not a directory: $dir" 1>&2
|
||||
exit 6
|
||||
fi
|
||||
if [[ ! -x $dir ]]; then
|
||||
echo "$0: ERROR: not a writable directory: $dir" 1>&2
|
||||
exit 6
|
||||
fi
|
||||
done
|
||||
|
||||
# process tool for each entry
|
||||
#
|
||||
for dir in $(< "$ENTRY_DIR_TXT"); do
|
||||
if [[ $V_FLAG -ge 1 ]]; then
|
||||
echo "$0: debug[1]: $TOOL -d $DOMAIN -p $DOCPATH -g $GITHUB_REPO -t $TOPDIR -v $CAP_D_FLAG -- $dir" 1>&2
|
||||
fi
|
||||
$TOOL -d "$DOMAIN" -p "$DOCPATH" -g "$GITHUB_REPO" -t "$TOPDIR" -v "$CAP_D_FLAG" -- "$dir"
|
||||
status="$?"
|
||||
if [[ $status -ne 0 ]]; then
|
||||
echo "$0: Warning: $TOOL -d $DOMAIN -p $DOCPATH -g $GITHUB_REPO -t $TOPDIR -v $CAP_D_FLAG -- $dir exit code: $status" 1>&2
|
||||
EXIT_CODE="7" # exit 7
|
||||
elif [[ $V_FLAG -ge 3 ]]; then
|
||||
echo "$0: debug[3]: success" 1>&2
|
||||
fi
|
||||
done
|
||||
|
||||
# All Done!!! All Done!!! -- Jessica Noll, Age 2
|
||||
#
|
||||
if [[ $V_FLAG -ge 1 ]]; then
|
||||
echo "$0: debug[0]: about to exit $EXIT_CODE" 1>&2
|
||||
fi
|
||||
exit "$EXIT_CODE"
|
||||
@@ -1,131 +0,0 @@
|
||||
#!/usr/bin/env make
|
||||
#
|
||||
# src - all source for bin tools
|
||||
#
|
||||
# Copyright (c) 2023 by Landon Curt Noll. All Rights Reserved.
|
||||
#
|
||||
# Permission to use, copy, modify, and distribute this software and
|
||||
# its documentation for any purpose and without fee is hereby granted,
|
||||
# provided that the above copyright, this permission notice and text
|
||||
# this comment, and the disclaimer below appear in all of the following:
|
||||
#
|
||||
# supporting documentation
|
||||
# source copies
|
||||
# source works derived from this source
|
||||
# binaries derived from this source or from derived source
|
||||
#
|
||||
# LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
||||
# EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
||||
# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
# chongo (Landon Curt Noll, http://www.isthe.com/chongo/index.html) /\oo/\
|
||||
#
|
||||
# Share and enjoy! :-)
|
||||
|
||||
#############
|
||||
# utilities #
|
||||
#############
|
||||
|
||||
CC= cc
|
||||
CHMOD= chmod
|
||||
CP= cp
|
||||
INSTALL= install
|
||||
RM= rm
|
||||
SHELL= bash
|
||||
|
||||
#CFLAGS= -O3 -g3 --pedantic -Wall -Werror
|
||||
CFLAGS= -O3 -g3 --pedantic -Wall
|
||||
|
||||
######################
|
||||
# target information #
|
||||
######################
|
||||
|
||||
TARGETS= ioccc_status
|
||||
|
||||
######################################
|
||||
# all - default rule - must be first #
|
||||
######################################
|
||||
|
||||
all: ${TARGETS}
|
||||
@for dir in ${TARGETS}; do \
|
||||
if [[ ! -d $$dir ]]; then \
|
||||
echo "$0: FATAL: not a sub-directory: $$dir" 1>&2; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
if [[ ! -f $$dir/Makefile ]]; then \
|
||||
echo "$0: FATAL: not a file: $$dir/Makefile" 1>&2; \
|
||||
exit 2; \
|
||||
fi; \
|
||||
echo "make -C \"$$dir\" $@"; \
|
||||
make -C "$$dir" $@; \
|
||||
done
|
||||
|
||||
#################################################
|
||||
# .PHONY list of rules that do not create files #
|
||||
#################################################
|
||||
|
||||
.PHONY: all configure clean clobber install
|
||||
|
||||
###################################
|
||||
# standard Makefile utility rules #
|
||||
###################################
|
||||
|
||||
configure:
|
||||
@for dir in ${TARGETS}; do \
|
||||
if [[ ! -d $$dir ]]; then \
|
||||
echo "$0: FATAL: not a sub-directory: $$dir" 1>&2; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
if [[ ! -f $$dir/Makefile ]]; then \
|
||||
echo "$0: FATAL: not a file: $$dir/Makefile" 1>&2; \
|
||||
exit 2; \
|
||||
fi; \
|
||||
echo "make -C \"$$dir\" $@"; \
|
||||
make -C "$$dir" $@; \
|
||||
done
|
||||
|
||||
clean:
|
||||
@for dir in ${TARGETS}; do \
|
||||
if [[ ! -d $$dir ]]; then \
|
||||
echo "$0: FATAL: not a sub-directory: $$dir" 1>&2; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
if [[ ! -f $$dir/Makefile ]]; then \
|
||||
echo "$0: FATAL: not a file: $$dir/Makefile" 1>&2; \
|
||||
exit 2; \
|
||||
fi; \
|
||||
echo "make -C \"$$dir\" $@"; \
|
||||
make -C "$$dir" $@; \
|
||||
done
|
||||
|
||||
clobber: clean
|
||||
@for dir in ${TARGETS}; do \
|
||||
if [[ ! -d $$dir ]]; then \
|
||||
echo "$0: FATAL: not a sub-directory: $$dir" 1>&2; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
if [[ ! -f $$dir/Makefile ]]; then \
|
||||
echo "$0: FATAL: not a file: $$dir/Makefile" 1>&2; \
|
||||
exit 2; \
|
||||
fi; \
|
||||
echo "make -C \"$$dir\" $@"; \
|
||||
make -C "$$dir" $@; \
|
||||
done
|
||||
|
||||
install: all
|
||||
@for dir in ${TARGETS}; do \
|
||||
if [[ ! -d $$dir ]]; then \
|
||||
echo "$0: FATAL: not a sub-directory: $$dir" 1>&2; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
if [[ ! -f $$dir/Makefile ]]; then \
|
||||
echo "$0: FATAL: not a file: $$dir/Makefile" 1>&2; \
|
||||
exit 2; \
|
||||
fi; \
|
||||
echo "make -C \"$$dir\" $@"; \
|
||||
make -C "$$dir" $@; \
|
||||
done
|
||||
@@ -1,396 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# update-manifest.sh - temporary interactive script to update the IOCCC manifest
|
||||
# step by step post manifest.csv export.
|
||||
#
|
||||
# Written by Cody Boone Ferguson in 2024 to greatly simplify fixing and
|
||||
# improving the manifest of winning IOCCC entries. This script WILL GO AWAY when
|
||||
# both the manifest and html issues are completed.
|
||||
#
|
||||
|
||||
export UPDATE_MANIFEST_VERSION="0.0.1-1 2024-28-01" # format: major.minor.patch-release YYYY-DD-MM
|
||||
NAME="$(basename "$0")"; export NAME
|
||||
|
||||
export V_FLAG=0
|
||||
export A_FLAG=
|
||||
# default -v 3 for other tools
|
||||
export CAP_D_FLAG=3
|
||||
export TOPDIR=".."
|
||||
GIT="$(type -P git)"
|
||||
export GIT
|
||||
|
||||
# usage
|
||||
#
|
||||
export USAGE="usage: $0 [-h] [-v level] [-D] [-g git] [-a]
|
||||
|
||||
-h print help message and exit
|
||||
-v level set verbosity level (def level: $V_FLAG)
|
||||
-D level set verbosity level (via -v level) in tool: (def level: $CAP_D_FLAG)
|
||||
|
||||
-t topdir path to top of the local GitHub repo tree (def: $TOPDIR)
|
||||
|
||||
-a automatically run git add an git commit commands (when prompted)
|
||||
|
||||
|
||||
Exit codes:
|
||||
0 all OK
|
||||
2 -h and help string printed or -V and version string printed
|
||||
3 command line error
|
||||
4 user told us there is a problem
|
||||
5 a tool exited non-zero
|
||||
|
||||
$NAME version: $UPDATE_MANIFEST_VERSION"
|
||||
|
||||
# parse command line
|
||||
#
|
||||
while getopts :hv:D:t:g:a flag; do
|
||||
case "$flag" in
|
||||
h) echo "$USAGE"
|
||||
exit 2
|
||||
;;
|
||||
v) V_FLAG="$OPTARG"
|
||||
;;
|
||||
D) CAP_D_FLAG="$OPTARG"
|
||||
;;
|
||||
t) TOPDIR="$OPTARG"
|
||||
;;
|
||||
g) GIT="$OPTARG"
|
||||
;;
|
||||
a) A_FLAG="-a"
|
||||
;;
|
||||
\?) echo "$0: ERROR: invalid option: -$OPTARG" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
:) echo "$0: ERROR: option -$OPTARG requires an argument" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
*) echo "$0: ERROR: unexpected value from getopts: $flag" 1>&2
|
||||
echo 1>&2
|
||||
echo "$USAGE" 1>&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# print running info if verbose
|
||||
#
|
||||
if [[ $V_FLAG -ge 3 ]]; then
|
||||
echo "$0: debug[3]: V_FLAG=$V_FLAG" 1>&2
|
||||
echo "$0: debug[3]: TOPDIR=$TOPDIR" 1>&2
|
||||
fi
|
||||
|
||||
# first determine if git is executable
|
||||
if [[ -z "$GIT" || ! -f "$GIT" || ! -x "$GIT" ]]; then
|
||||
echo "$0: ERROR: git not a regular executable file: $GIT" 1>&2
|
||||
exit 3
|
||||
fi
|
||||
|
||||
# check that topdir is a directory and a git repo
|
||||
#
|
||||
|
||||
# first verify $TOPDIR is not empty and that it's a directory
|
||||
if [[ -z "$TOPDIR" ]]; then
|
||||
echo "$0: ERROR: topdir is empty: $TOPDIR" 1>&2
|
||||
exit 3
|
||||
fi
|
||||
if [[ ! -d "$TOPDIR" ]]; then
|
||||
echo "$0: ERROR: topdir not a directory: $TOPDIR" 1>&2
|
||||
exit 3
|
||||
fi
|
||||
|
||||
# now cd to directory
|
||||
#
|
||||
if ! cd "$TOPDIR"; then
|
||||
echo "$0: could not cd to topdir: $TOPDIR" 1>&2
|
||||
exit 3
|
||||
fi
|
||||
|
||||
# I have found problems using git rev-parse to verify that we're in a git repo
|
||||
# and we need the user to see git status anyway so use git status instead.
|
||||
if ! "$GIT" status 1>&2; then
|
||||
echo "$USAGE" 1>&2
|
||||
echo 1>&2
|
||||
echo "ERROR: ${PWD} is not a git repository" 1>&2
|
||||
exit 3
|
||||
fi
|
||||
|
||||
echo 1>&2
|
||||
echo "NOTE: manifest.numbers and manifest.csv may be modified here BUT NOTHING ELSE" 1>&2
|
||||
echo "MAY BE UNLESS IT IS RELATED TO THE MANIFEST UPDATE ITSELF (e.g. rerunning to fix" 1>&2
|
||||
echo "a problem or if the need for the manifest to be updated is because of the other" 1>&2
|
||||
echo "changes)." 1>&2
|
||||
read -r -p "Do you have a clean state from git status (Y/N)? "
|
||||
if [[ "$REPLY" != "Y" && "$REPLY" != "y" ]]; then
|
||||
echo 1>&2
|
||||
echo "exiting 4 due to user telling us that manifest.numbers and/or" 1>&2
|
||||
echo "manifest.csv NOT UPDATED." 1>&2
|
||||
exit 4
|
||||
fi
|
||||
|
||||
# ask user if they're on the correct branch
|
||||
#
|
||||
echo "Showing branches: " 1>&2
|
||||
"$GIT" branch 1>&2
|
||||
read -r -p "Are you on the right branch (Y/N)? "
|
||||
if [[ "$REPLY" != "Y" && "$REPLY" != "y" ]]; then
|
||||
echo "exiting 4 due to user telling us they're on the WRONG BRANCH." 1>&2
|
||||
exit 4
|
||||
fi
|
||||
|
||||
# now cd to the tmp directory
|
||||
#
|
||||
if ! cd tmp; then
|
||||
echo "$0: could not cd to tmp subdirectory of topdir: $TOPDIR"
|
||||
exit 3
|
||||
fi
|
||||
|
||||
# now check that manifest.csv is a regular readable file
|
||||
#
|
||||
if [[ ! -f manifest.csv || ! -r manifest.csv ]]; then
|
||||
echo "manifest.csv does not exist or not a regular readable file" 1>&2
|
||||
exit 3
|
||||
fi
|
||||
|
||||
# now ask user if they sorted the manifest.numbers AND exported it to the CSV
|
||||
# file
|
||||
echo "We will now try and update the manifest files. Are you sure that you updated" 1>&2
|
||||
read -r -p "AND sorted the manifest.numbers spreadsheet AND exported to manifest.csv (Y/N)? "
|
||||
if [[ "$REPLY" != "y" && "$REPLY" != "Y" ]]; then
|
||||
echo "exiting 4 due to user not updating manifest files before running this tool" 1>&2
|
||||
exit 4
|
||||
fi
|
||||
|
||||
# run ./fix_csv.sh first
|
||||
#
|
||||
echo "$(basename "$0"): now will run: ./fix_csv.sh -v $CAP_D_FLAG" 1>&2
|
||||
if ! ./fix_csv.sh -v "$CAP_D_FLAG" ; then
|
||||
echo "fix_csv.sh failed, try updating manifest.csv and try again." 1>&2
|
||||
exit 5
|
||||
fi
|
||||
|
||||
# run ./gen_path_list.found.sh
|
||||
#
|
||||
echo "$(basename "$0"): now will run: ./gen_path_list.found.sh -v $CAP_D_FLAG" 1>&2
|
||||
if ! ./gen_path_list.found.sh -v "$CAP_D_FLAG" ; then
|
||||
echo "gen_path_list.found.sh failed, try updating manifest.csv and try again." 1>&2
|
||||
exit 5
|
||||
fi
|
||||
|
||||
# now run git diff path_list.found.txt
|
||||
#
|
||||
read -r -n 1 -p "Press any key to run: $GIT diff path_list.found.txt: "
|
||||
echo 1>&2
|
||||
"$GIT" diff path_list.found.txt
|
||||
|
||||
read -r -p "Does everything look okay (Y/N)? "
|
||||
if [[ "$REPLY" != "y" && "$REPLY" != "Y" ]]; then
|
||||
echo "exiting 4 due to user telling us that git diff path_list.found.txt DOES" 1>&2
|
||||
echo "NOT LOOK OKAY." 1>&2
|
||||
exit 4
|
||||
fi
|
||||
|
||||
# run ./check_path_list.sh
|
||||
#
|
||||
echo "$(basename "$0"): now will run: ./check_path_list.sh -v $CAP_D_FLAG" 1>&2
|
||||
if ! ./check_path_list.sh -v "$CAP_D_FLAG"; then
|
||||
echo "check_path_list.sh failed, try updating manifest.csv and try again." 1>&2
|
||||
exit 5
|
||||
fi
|
||||
|
||||
echo "$0: now will run: $GIT archive HEAD manifest.numbers | tar -tvf - manifest.numbers" 1>&2
|
||||
"$GIT" archive HEAD manifest.numbers | tar -tvf - manifest.numbers
|
||||
read -r -p "Does everything look okay (Y/N)? "
|
||||
if [[ "$REPLY" != "Y" && "$REPLY" != "y" ]]; then
|
||||
echo "$0: exiting 4 due to user telling us there's a problem." 1>&2
|
||||
exit 4
|
||||
fi
|
||||
|
||||
if [[ -n "$A_FLAG" ]]; then
|
||||
echo "Do you wish to automatically run the commands:" 1>&2
|
||||
echo " $GIT add -u" 1>&2
|
||||
echo " $GIT status" 1>&2
|
||||
echo " $GIT commit -m'update manifest as per recent file changes'" 1>&2
|
||||
|
||||
read -r -p "Enter your choice (Y/N): "
|
||||
if [[ "$REPLY" != "Y" && "$REPLY" != "y" ]]; then
|
||||
echo "Now you should run the following commands in another terminal," 1>&2
|
||||
echo "making sure you're on the appropriate branch:"
|
||||
echo 1>&2
|
||||
echo " git add -u" 1>&2
|
||||
echo " git status" 1>&2
|
||||
echo " git commit -m'update manifest as per recent file changes'" 1>&2
|
||||
echo 1>&2
|
||||
read -r -n 1 -p "Press any key when this is done: "
|
||||
echo 1>&2
|
||||
else
|
||||
"$GIT" add -u
|
||||
"$GIT" status
|
||||
"$GIT" commit -m'update manifest as per recent file changes'
|
||||
fi
|
||||
else
|
||||
# user did not use -a, don't prompt: make them run commands in another
|
||||
# terminal first.
|
||||
echo "Now you should run the following commands in another terminal," 1>&2
|
||||
echo "making sure you're on the appropriate branch:"
|
||||
echo 1>&2
|
||||
echo " git add -u" 1>&2
|
||||
echo " git status" 1>&2
|
||||
echo " git commit -m'update manifest as per recent file changes'" 1>&2
|
||||
echo 1>&2
|
||||
read -r -n 1 -p "Press any key when this is done: "
|
||||
echo 1>&2
|
||||
fi
|
||||
|
||||
echo 1>&2
|
||||
echo "$(basename "$0"): now will run ./run_all.sh -v $CAP_D_FLAG ./gen_entry_json.sh" 1>&2
|
||||
echo "NOTE: this step will take a while." 1>&2
|
||||
if ! ./run_all.sh -v "$CAP_D_FLAG" ./gen_entry_json.sh; then
|
||||
echo "problem with ./run_all.sh, fix manifest and try again." 1>&2
|
||||
exit 5
|
||||
fi
|
||||
|
||||
read -r -n 1 -p "Press any key to run: $GIT diff: "
|
||||
echo 1>&2
|
||||
"$GIT" diff
|
||||
read -r -p "Does everything look okay (Y/N)? "
|
||||
if [[ "$REPLY" != "Y" && "$REPLY" != "y" ]]; then
|
||||
echo "$0: exiting 4 due to user telling us there's a problem." 1>&2
|
||||
exit 4
|
||||
fi
|
||||
|
||||
if [[ -n "$A_FLAG" ]]; then
|
||||
echo "Do you wish to automatically run the commands:" 1>&2
|
||||
echo " $GIT add -u" 1>&2
|
||||
echo " $GIT status" 1>&2
|
||||
echo " $GIT commit -m'update .entry.json files per recent manifest changes'" 1>&2
|
||||
|
||||
read -r -p "Enter your choice (Y/N): "
|
||||
if [[ "$REPLY" != "Y" && "$REPLY" != "y" ]]; then
|
||||
echo "Now you should run the following commands in another terminal," 1>&2
|
||||
echo "making sure you're on the appropriate branch:"
|
||||
echo 1>&2
|
||||
echo " $GIT add -u" 1>&2
|
||||
echo " $GIT status" 1>&2
|
||||
echo " $GIT commit -m'update .entry.json files per recent manifest changes'" 1>&2
|
||||
echo 1>&2
|
||||
read -r -n 1 -p "Press any key when this is done: "
|
||||
echo 1>&2
|
||||
else
|
||||
"$GIT" add -u
|
||||
"$GIT" status
|
||||
"$GIT" commit -m'update .entry.json files per recent manifest changes'
|
||||
fi
|
||||
else
|
||||
echo "Now you should run the following commands in another terminal," 1>&2
|
||||
echo "making sure you're on the appropriate branch:"
|
||||
echo 1>&2
|
||||
echo " $GIT add -u" 1>&2
|
||||
echo " $GIT status" 1>&2
|
||||
echo " $GIT commit -m'update .entry.json files per recent manifest changes'" 1>&2
|
||||
echo 1>&2
|
||||
read -r -n 1 -p "Press any key when this is done: "
|
||||
echo 1>&2
|
||||
fi
|
||||
|
||||
# now cd to top level directory
|
||||
cd ..
|
||||
|
||||
read -r -n 1 -p "Press any key to continue: "
|
||||
echo 1>&2
|
||||
|
||||
echo "$(basename "$0"): will now update index.html files." 1>&2
|
||||
echo "NOTE: quick-readme2index.sh will not create all index.html" 1>&2
|
||||
echo "files: it checks the timestamp of README.md and the respective" 1>&2
|
||||
echo "index.html files. Thus if you have not modified all the necessary" 1>&2
|
||||
echo "README.md files then you should not use the quick option!" 1>&2
|
||||
read -r -p "Do you wish to use quick-readme2index.sh (Y/N)? "
|
||||
if [[ "$REPLY" != "Y" && "$REPLY" != "y" ]]; then
|
||||
echo "$(basename "$0"): now will run: bin/all-run.sh -v $CAP_D_FLAG bin/readme2index.sh -v $CAP_D_FLAG" 1>&2
|
||||
if ! bin/all-run.sh -v "$CAP_D_FLAG" bin/readme2index.sh -v "$CAP_D_FLAG"; then
|
||||
echo "problem running bin/all-run bin/readme2index.sh, fix and try again." 1>&2
|
||||
exit 5
|
||||
fi
|
||||
else
|
||||
echo "$(basename "$0"): now will run: bin/all-run.sh -v $CAP_D_FLAG bin/quick-readme2index.sh -v $CAP_D_FLAG"
|
||||
echo "NOTE: this will take a while." 1>&2
|
||||
if ! bin/all-run.sh -v "$CAP_D_FLAG" bin/quick-readme2index.sh -v "$CAP_D_FLAG"; then
|
||||
echo "problem running bin/all-run bin bin/quick-readme2index.sh, fix and try again." 1>&2
|
||||
exit 5
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "$(basename "$0"): now will run: bin/gen-other-html.sh -v $CAP_D_FLAG"
|
||||
echo "NOTE: this can take a while." 1>&2
|
||||
if ! bin/gen-other-html.sh -v "$CAP_D_FLAG"; then
|
||||
echo "problem running bin/gen-other-html.sh, fix and try again." 1>&2
|
||||
exit 5
|
||||
fi
|
||||
|
||||
read -r -n 1 -p "Press any key to run: $GIT diff: "
|
||||
echo 1>&2
|
||||
"$GIT" diff
|
||||
|
||||
read -r -p "Does everything look okay (Y/N)? "
|
||||
if [[ "$REPLY" != "Y" && "$REPLY" != "y" ]]; then
|
||||
echo "$0: exiting 4 due to user telling us git diff DOES NOT LOOK OKAY." 1>&2
|
||||
exit 4
|
||||
fi
|
||||
|
||||
echo "$(basename "$0"): now will run: make find_missing_links"
|
||||
echo "NOTE: this can take a little while." 1>&2
|
||||
if ! make find_missing_links; then
|
||||
echo "problem running make find_missing_links, fix and try again." 1>&2
|
||||
echo "NOTE: since everything else was updated, you can just fix the links" 1>&2
|
||||
echo "and then run the appropriate make rules to fix just the affected html" 1>&2
|
||||
echo "files rather than run this script all over again. If you're in doubt," 1>&2
|
||||
echo "you can run:" 1>&2
|
||||
echo
|
||||
echo " make www" 1>&2
|
||||
echo
|
||||
echo "to be absolutely sure that every html file is updated but this is likely" 1>&2
|
||||
echo "not needed unless a lot of files had broken links." 1>&2
|
||||
exit 5
|
||||
fi
|
||||
|
||||
if [[ -n "$A_FLAG" ]]; then
|
||||
echo "Do you wish to automatically run the commands:" 1>&2
|
||||
echo " git add -u" 1>&2
|
||||
echo " git status" 1>&2
|
||||
echo " git commit -m'update index.html and .entry.json per recent manifest changes'" 1>&2
|
||||
read -r -p "Enter your choice (Y/N): "
|
||||
if [[ "$REPLY" != "Y" && "$REPLY" != "y" ]]; then
|
||||
echo "Now you should run the following commands in another terminal," 1>&2
|
||||
echo "making sure you're on the appropriate branch:"
|
||||
echo 1>&2
|
||||
echo " git add -u" 1>&2
|
||||
echo " git status" 1>&2
|
||||
echo " git commit -m'update index.html and .entry.json per recent manifest changes'" 1>&2
|
||||
echo 1>&2
|
||||
read -r -n 1 -p "Press any key when this is done: "
|
||||
echo 1>&2
|
||||
else
|
||||
"$GIT" add -u
|
||||
"$GIT" status
|
||||
"$GIT" commit -m'update index.html and .entry.json per recent manifest changes'
|
||||
fi
|
||||
else
|
||||
echo "Now you should run the following commands in another terminal," 1>&2
|
||||
echo "making sure you're on the appropriate branch:"
|
||||
echo 1>&2
|
||||
echo " git add -u" 1>&2
|
||||
echo " git status" 1>&2
|
||||
echo " git commit -m'update index.html and .entry.json per recent manifest changes'" 1>&2
|
||||
echo 1>&2
|
||||
read -r -n 1 -p "Press any key when this is done: "
|
||||
echo 1>&2
|
||||
fi
|
||||
|
||||
echo 1>&2
|
||||
echo 1>&2
|
||||
|
||||
echo "All done. Make sure to push the commits and open a GitHub pull request." 1>&2
|
||||
exit 0
|
||||
@@ -1,322 +0,0 @@
|
||||
# year_handle,award name
|
||||
1984_anonymous,Dishonorable Mention
|
||||
1984_decot,Second Place
|
||||
1984_laman,Third Place
|
||||
1984_mullender,Grand Prize
|
||||
1985_applin,Best one liner
|
||||
1985_august,Most obscure program
|
||||
1985_lycklama,Strangest appearing program
|
||||
1985_shapiro,Grand Prize - Most well rounded in confusion
|
||||
1985_sicherman,Worst abuse of the C preprocessor
|
||||
1986_applin,Most adaptable program
|
||||
1986_august,Best complex task done in a complex way
|
||||
1986_bright,Most useful obfuscation
|
||||
1986_hague,Worst abuse of the C preprocessor
|
||||
1986_holloway,Best simple task performed in a complex way
|
||||
1986_marshall,Best layout
|
||||
1986_pawka,Most illegible code
|
||||
1986_stein,Best one liner
|
||||
1986_wall,Grand Prize - Most well rounded in confusion
|
||||
1987_biggar,Best abuse of the rules
|
||||
1987_heckbert,Best obfuscator of programs
|
||||
1987_hines,Worst style
|
||||
1987_korn,Best one liner
|
||||
1987_lievaart,Grand Prize
|
||||
1987_wall,Most useful obfuscation
|
||||
1987_westley,Best layout
|
||||
1988_applin,Best of Show
|
||||
1988_dale,Best abuse of system calls
|
||||
1988_isaak,Best visuals
|
||||
1988_litmaath,Best small program
|
||||
1988_phillipps,Least likely to compile successfully
|
||||
1988_reddy,Most useful obfuscated C program
|
||||
1988_robison,Best abuse of C constructs
|
||||
1988_spinellis,Best abuse of the rules
|
||||
1988_westley,Best layout
|
||||
1989_fubar,Best self-modifying program
|
||||
1989_jar.1,Strangest abuse of the rules
|
||||
1989_jar.2,Best of Show
|
||||
1989_ovdluhe,Most humorous output
|
||||
1989_paul,Most complex algorithm
|
||||
1989_robison,Best minimal use of C
|
||||
1989_roemer,Best layout
|
||||
1989_tromp,Best game
|
||||
1989_vanb,Best one liner
|
||||
1989_westley,Most algorithms in one program
|
||||
1990_baruch,Best small program
|
||||
1990_cmills,Best game
|
||||
1990_dds,Best language tool
|
||||
1990_dg,Best abuse of the C preprocessor
|
||||
1990_jaw,Best entropy-reducer
|
||||
1990_pjr,Most unusual data structure
|
||||
1990_scjones,ANSI Committee's worst abuse of C
|
||||
1990_stig,Strangest abuse of the rules
|
||||
1990_tbr,Best utility
|
||||
1990_theorem,Best of Show
|
||||
1990_westley,Best layout
|
||||
1991_ant,Best utility
|
||||
1991_brnstnd,Best of Show
|
||||
1991_buzzard,Best output
|
||||
1991_cdupont,Most useful label
|
||||
1991_davidguy,Best X11 graphics
|
||||
1991_dds,Most well rounded
|
||||
1991_fine,Best one liner
|
||||
1991_rince,Best game
|
||||
1991_westley,Grand Prize
|
||||
1992_adrian,Most educational
|
||||
1992_albert,Most useful program
|
||||
1992_ant,Best utility
|
||||
1992_buzzard.1,Most obfuscated algorithm
|
||||
1992_buzzard.2,Best language tool
|
||||
1992_gson,Most humorous output
|
||||
1992_imc,Best output
|
||||
1992_kivinen,Best X program
|
||||
1992_lush,Worst abuse of the C preprocessor
|
||||
1992_marangon,Best game
|
||||
1992_nathan,Worst abuse of the rules
|
||||
1992_vern,Best of Show
|
||||
1992_westley,Best small program
|
||||
1993_ant,Best utility
|
||||
1993_cmills,Bill Gates Award
|
||||
1993_dgibson,Best abuse of the C preprocessor
|
||||
1993_ejb,Best obfuscated algorithm
|
||||
1993_jonth,Most obfuscated X program
|
||||
1993_leo,Best game
|
||||
1993_lmfjyh,Most versatile source
|
||||
1993_plummer,Best one liner
|
||||
1993_rince,Most well rounded
|
||||
1993_schnitzi,Obfuscated Intelligence Award
|
||||
1993_vanb,Most irregular expression
|
||||
1994_dodsond1,Best game
|
||||
1994_dodsond2,Most obfuscated packaging
|
||||
1994_horton,Best utility
|
||||
1994_imc,Most obfuscated algorithm
|
||||
1994_ldb,Best one liner
|
||||
1994_schnitzi,Best layout
|
||||
1994_shapiro,Most well rounded obfuscation
|
||||
1994_smr,Worst abuse of the rules
|
||||
1994_tvr,Best X11 program
|
||||
1994_weisberg,Best short program
|
||||
1994_westley,Worst abuse of the C preprocessor
|
||||
1995_cdua,Best output
|
||||
1995_dodsond1,Most humorous
|
||||
1995_dodsond2,Best game
|
||||
1995_esde,Interesting algorithm
|
||||
1995_garry,Best utility
|
||||
1995_heathbar,Best layout
|
||||
1995_leo,Best use of obfuscation
|
||||
1995_makarios,Best short program
|
||||
1995_savastio,Most obfuscated syntax
|
||||
1995_schnitzi,Best one liner
|
||||
1995_spinellis,Abusing the rules
|
||||
1995_vanschnitz,Worst abuse of the C preprocessor and most likely to amaze
|
||||
1996_august,Best of Show
|
||||
1996_dalbec,Best numerical obfuscation
|
||||
1996_eldby,Best output
|
||||
1996_gandalf,Best layout
|
||||
1996_huffman,Best obfuscated character set utility
|
||||
1996_jonth,Best X11 entry
|
||||
1996_rcm,Best RFC obfuscation
|
||||
1996_schweikh1,Worst abuse of the C preprocessor
|
||||
1996_schweikh2,Best algorithm
|
||||
1996_schweikh3,Best utility
|
||||
1996_westley,Best one liner
|
||||
1998_banks,Best of Show
|
||||
1998_bas1,Best encapsulation
|
||||
1998_bas2,Best small program
|
||||
1998_chaos,Best object orientation
|
||||
1998_df,Best data hiding
|
||||
1998_dlowe,Best utility
|
||||
1998_dloweneil,Most fun
|
||||
1998_dorssel,Obsolescent feature
|
||||
1998_fanf,Most obfuscated translator
|
||||
1998_schnitzi,Best flow control
|
||||
1998_schweikh1,CPP abuse
|
||||
1998_schweikh2,Most erratic behavior
|
||||
1998_schweikh3,Most space efficient
|
||||
1998_tomtorfs,Best self-documenting
|
||||
2000_anderson,Best use of flags
|
||||
2000_bellard,Most specific output
|
||||
2000_bmeyer,Best utility
|
||||
2000_briddlebane,Best abuse of user
|
||||
2000_dhyang,Best layout
|
||||
2000_dlowe,Worst abuse of the rules
|
||||
2000_jarijyrki,Best of Show
|
||||
2000_natori,Best small program
|
||||
2000_primenum,Best abuse of CPP
|
||||
2000_rince,Astronomically obfuscated
|
||||
2000_robison,Best game
|
||||
2000_schneiderwent,Most timely output
|
||||
2000_thadgavin,Most portable output
|
||||
2000_tomx,Most complete program
|
||||
2001_anonymous,Dishonorable mention
|
||||
2001_bellard,Best abuse of the rules
|
||||
2001_cheong,Best short program
|
||||
2001_coupard,Most obfuscated sound
|
||||
2001_ctk,Worst driver
|
||||
2001_dgbeards,Best AI
|
||||
2001_herrmann1,Best abuse of the C preprocessor
|
||||
2001_herrmann2,Most eye-crossing
|
||||
2001_jason,Best of Show
|
||||
2001_kev,Best curses game
|
||||
2001_ollinger,Best of Show
|
||||
2001_rosten,Best abuse of the user
|
||||
2001_schweikh,Best one liner
|
||||
2001_westley,Best position-independent code
|
||||
2001_williams,Best graphic game
|
||||
2004_anonymous,Best use of 'Precious' Lines
|
||||
2004_arachnid,Best use of vision
|
||||
2004_burley,Best calculated risk
|
||||
2004_gavare,Best use of light and spheres
|
||||
2004_gavin,Best of Show
|
||||
2004_hibachi,Best abuse of the guidelines
|
||||
2004_hoyle,Most functional output
|
||||
2004_jdalbec,Best abuse of the periodic table
|
||||
2004_kopczynski,Best one liner
|
||||
2004_newbern,Best font engine
|
||||
2004_omoikane,Best utility
|
||||
2004_schnitzi,Best non-use of curses
|
||||
2004_sds,Best abuse of indentation
|
||||
2004_vik1,Best X11 game
|
||||
2004_vik2,Best abuse of CPP
|
||||
2005_aidan,Most ingenious puzzle solution
|
||||
2005_anon,Best 3D puzzle
|
||||
2005_boutines,Most superfluous output
|
||||
2005_chia,Most ambiguous language
|
||||
2005_giljade,Best 2D puzzle
|
||||
2005_jetro,Most sonorous output
|
||||
2005_klausler,Abuse of the rules
|
||||
2005_mikeash,Best use of parenthesis
|
||||
2005_mynx,Best use of the WWW
|
||||
2005_persano,Best of Show
|
||||
2005_sykes,Best emulator
|
||||
2005_timwi,Most discourteous interpreter
|
||||
2005_toledo,Best game
|
||||
2005_vik,Most circuitous walk
|
||||
2005_vince,Most beauteous visuals
|
||||
2006_birken,EDAMAME Award
|
||||
2006_borsanyi,Most useful
|
||||
2006_grothe,Most obfuscated audio
|
||||
2006_hamre,Most irrational
|
||||
2006_meyer,Best game
|
||||
2006_monge,Best compiled graphics
|
||||
2006_night,Best abuse of computation
|
||||
2006_sloane,Homer's favorite
|
||||
2006_stewart,Best computed graphics
|
||||
2006_sykes1,Best assembler
|
||||
2006_sykes2,Best one liner
|
||||
2006_toledo1,Best small program
|
||||
2006_toledo2,Best of Show
|
||||
2006_toledo3,Most portable chess set
|
||||
2011_akari,Best of Show - Most Shrinkable
|
||||
2011_blakely,Most devolving
|
||||
2011_borsanyi,Best data utility
|
||||
2011_dlowe,Most self deprecating
|
||||
2011_eastman,Best ball
|
||||
2011_fredriksson,Most useful
|
||||
2011_goren,Most artistic
|
||||
2011_hamaji,Best solved puzzle
|
||||
2011_hou,Best self documenting program
|
||||
2011_konno,Best one liner
|
||||
2011_richards,Most surprisingly portable
|
||||
2011_toledo,Best non-chess game
|
||||
2011_vik,Most sound
|
||||
2011_zucker,Most shiny
|
||||
2012_blakely,Most GIFted expressions
|
||||
2012_deckmyn,Most notable and best tool
|
||||
2012_dlowe,Best way to lose a life
|
||||
2012_endoh1,Most complex ASCII fluid - Honorable mention
|
||||
2012_endoh2,PiE in the sky award
|
||||
2012_grothe,Most conspiratorial
|
||||
2012_hamano,Silver Award - Most elementary use of C
|
||||
2012_hou,Most useful obfuscation
|
||||
2012_kang,Best short program
|
||||
2012_konno,Best one liner
|
||||
2012_omoikane,Most surreptitious
|
||||
2012_tromp,Most functional
|
||||
2012_vik,Bronze Award - Best use of cocoa
|
||||
2012_zeitak,Gold Award - Balanced use of obfuscation
|
||||
2013_birken,Best painting tool
|
||||
2013_cable1,Most partisan one liner
|
||||
2013_cable2,Best of Show
|
||||
2013_cable3,Largest small system emulator
|
||||
2013_dlowe,Best sparkling utility
|
||||
2013_endoh1,Most lazy SKIer
|
||||
2013_endoh2,Most recyclable
|
||||
2013_endoh3,Most tweetable one liner
|
||||
2013_endoh4,Most solid
|
||||
2013_hou,Best use of one infinite loop
|
||||
2013_mills,Most timely rendered
|
||||
2013_misaka,Most catty
|
||||
2013_morgan1,Smallest large system simulator
|
||||
2013_morgan2,Most playfully versatile
|
||||
2013_robison,Most poetic use of strings
|
||||
2014_birken,Best use of port 1701
|
||||
2014_deak,Most underscored argument
|
||||
2014_endoh1,Most square (YODA Award)
|
||||
2014_endoh2,Best use of bioinformatics
|
||||
2014_maffiodo1,Homage to a classic game
|
||||
2014_maffiodo2,Most tweetable entry
|
||||
2014_morgan,Most likely to succeed
|
||||
2014_sinon,Best choice of optimization
|
||||
2014_skeggs,Most dynamic
|
||||
2014_vik,Best handling of beeps
|
||||
2014_wiedijk,Most functional
|
||||
2015_burton,Most useful
|
||||
2015_dogon,Most crafty
|
||||
2015_duble,Best handwriting
|
||||
2015_endoh1,Most diffused reaction
|
||||
2015_endoh2,Most overlooked obfuscation
|
||||
2015_endoh3,Back to the Future Award
|
||||
2015_endoh4,Best one liner
|
||||
2015_hou,Most well rounded hash
|
||||
2015_howe,Most different
|
||||
2015_mills1,For the Birds! Award
|
||||
2015_mills2,Most compact
|
||||
2015_muth,Most complete use of CPP
|
||||
2015_schweikhardt,Best documented
|
||||
2015_yang,Most pointed reaction
|
||||
2018_algmyr,Most cacophonic
|
||||
2018_anderson,Most able to divine code gaps
|
||||
2018_bellard,Most inflationary
|
||||
2018_burton1,Best one liner
|
||||
2018_burton2,Best abuse of the rules
|
||||
2018_ciura,Most likely to be awarded
|
||||
2018_endoh1,Best tool to reveal holes
|
||||
2018_endoh2,Best use of python
|
||||
2018_ferguson,Best use of weasel words
|
||||
2018_giles,Most unstable
|
||||
2018_hou,Most likely to top the charts
|
||||
2018_mills,Best of Show
|
||||
2018_poikola,Most stellar
|
||||
2018_vokes,Most connected
|
||||
2018_yang,Most shifty
|
||||
2019_adamovsky,Most functional interpreter
|
||||
2019_burton,Best one liner
|
||||
2019_ciura,Most alphabetic
|
||||
2019_diels-grabsch1,Best small program
|
||||
2019_diels-grabsch2,Most self-aware
|
||||
2019_dogon,Best use of space and time
|
||||
2019_duble,Best collaborative graphics
|
||||
2019_endoh,Most in need of debugging
|
||||
2019_giles,Most in need of wide space
|
||||
2019_karns,Most in need of whitespace
|
||||
2019_lynn,Most functional compiler
|
||||
2019_mills,Most in need to be tweeted
|
||||
2019_poikola,Most calendrical
|
||||
2019_yang,Most in need of transparency
|
||||
2020_burton,Best one liner
|
||||
2020_carlini,Best of Show - abuse of libc
|
||||
2020_endoh1,Most explosive
|
||||
2020_endoh2,Best perspective
|
||||
2020_endoh3,Most head-turning
|
||||
2020_ferguson1,Don't tread on me award
|
||||
2020_ferguson2,Most enigmatic
|
||||
2020_giles,Most phony
|
||||
2020_kurdyukov1,Best utility
|
||||
2020_kurdyukov2,Least detailed
|
||||
2020_kurdyukov3,Bset slaml prragom
|
||||
2020_kurdyukov4,Best abuse of lámatyávë
|
||||
2020_otterness,Most percussive
|
||||
2020_tsoj,Most misleading indentation
|
||||
2020_yang,Best abuse of CPP
|
||||
|
Binary file not shown.
Reference in new issue
Block a user