diff --git a/1984/mullender/README.md b/1984/mullender/README.md
index 6588218d2..acda6f847 100644
--- a/1984/mullender/README.md
+++ b/1984/mullender/README.md
@@ -93,7 +93,7 @@ the rules were changed, requesting non-machine specific code.
This program was selected for the 1987 t-shirt collection.
-The C startup routine (via [crt0.o](https://en.wikipedia.org/wiki/Crt0))
+The C startup routine, via [crt0.o](https://en.wikipedia.org/wiki/Crt0),
transfers control to a location named `main`. In this case, `main` just happens
to be in the data area. The array of `short`s, which has been further
obfuscated by use of different data types, just happens to form a meaningful set
@@ -188,10 +188,10 @@ since there was no CS curriculum when we started). We had an assignment to
create a pair of programs for the computer networks course. The programs were
supposed to send data reliably from one program to the other over an unreliable
channel. This channel was simulated with a pair of
-[pipes](https://en.wikipedia.org/wiki/Pipeline_(software)).
+[pipes](https://en.wikipedia.org/wiki/Pipeline_(software)).
We decided for fun to create an
-[obfuscated](https://en.wikipedia.org/wiki/Obfuscation_(software)) set of
+[obfuscated](https://en.wikipedia.org/wiki/Obfuscation_(software)) set of
programs, only for the
[PDP](https://en.wikipedia.org/wiki/Programmed_Data_Processor), to do this, but
circumventing the channel (i.e. cheating, hence the needed obfuscation). Our
@@ -207,12 +207,12 @@ there](https://groups.google.com/g/net.lang.c/c/lx-TAuEyeRI/m/HdOOnNx6LC0J) and
it.
Since we had just recently created these [obfuscated
-programs](https://en.wikipedia.org/wiki/Obfuscation_(software)) we decided we could
+programs](https://en.wikipedia.org/wiki/Obfuscation_(software)) we decided we could
use the same technique for an obfuscated C program. We upped the ante a bit by
making it "portable".
To add to the
-[obfuscation](https://en.wikipedia.org/wiki/Obfuscation_(software)), we used
+[obfuscation](https://en.wikipedia.org/wiki/Obfuscation_(software)), we used
different formats for the integers in the array: some in decimal, some in octal,
some in hexadecimal, and when the value would fit, some as an ASCII character.
@@ -230,7 +230,7 @@ Our program is idempotent under `cb`.
When this program is compiled, the compiler places the array somewhere in
memory, just like it places any compiled code somewhere in memory. Usually, the
-C startup code ([crt0.o](https://en.wikipedia.org/wiki/Crt0)) calls a routine
+C startup code, [crt0.o](https://en.wikipedia.org/wiki/Crt0), calls a routine
named `main()`. The loader fills in the address in the startup code, but at
least on the old systems where this program ran, it doesn't know that the
`main()` in this program isn't code but data!
@@ -242,13 +242,13 @@ both a [PDP-11](https://en.wikipedia.org/wiki/PDP-11) and a
On the [VAX](https://en.wikipedia.org/wiki/VAX), the routine `main()` is called
with the `calls` instruction. This instruction uses the first (2-byte)
-[word](https://en.wikipedia.org/wiki/Word_(computer_architecture)) of the called
+[word](https://en.wikipedia.org/wiki/Word_(computer_architecture)) of the called
routine as a mask of
[registers](https://en.wikipedia.org/wiki/Processor_register) that are to be
-saved on the [stack](https://en.wikipedia.org/wiki/Stack_(abstract_data_type)).
+saved on the [stack](https://en.wikipedia.org/wiki/Stack(abstract_data_type)).
In other words, on the VAX the first word can be anything. On the
[PDP](https://en.wikipedia.org/wiki/Programmed_Data_Processor), the first word
-is a [branch](https://en.wikipedia.org/wiki/Branch_(computer_science))
+is a [branch](https://en.wikipedia.org/wiki/Branch_(computer_science))
[instruction](https://en.wikipedia.org/wiki/Instruction_set_architecture#Instructions)
that branches over the VAX code. The PDP and VAX codes are thus completely
separate.
@@ -356,7 +356,7 @@ program that we came up with is as follows:
The first word (after the label `vax`) is the
[PDP](https://en.wikipedia.org/wiki/Programmed_Data_Processor) [branch
-instruction](https://en.wikipedia.org/wiki/Branch_(computer_science)).
+instruction](https://en.wikipedia.org/wiki/Branch_(computer_science)).
[PDP](https://en.wikipedia.org/wiki/Programmed_Data_Processor) branch
instructions are octal `400` + the distance divided by `2`. The string that both
the [PDP](https://en.wikipedia.org/wiki/Programmed_Data_Processor) and
@@ -366,10 +366,10 @@ programs use is after the `str` label, and the
`pdp` label.
On the [VAX](https://en.wikipedia.org/wiki/VAX), the program
-[pushes](https://en.wikipedia.org/wiki/Stack_(abstract_data_type)) 9 (the length
-of the string), the address of the string and 1 (the [file
+[pushes](https://en.wikipedia.org/wiki/Stack_(abstract_data_type)) 9 (the length
+of the string), the address of the string and 1, the [file
descriptor](https://en.wikipedia.org/wiki/File_descriptor) on the
-[stack](https://en.wikipedia.org/wiki/Stack_(abstract_data_type))) and calls
+[stack](https://en.wikipedia.org/wiki/Stack_(abstract_data_type)), and calls
`write(2)`. Since we didn't know the exact calling sequence for [system
calls](https://en.wikipedia.org/wiki/System_call), we just copied the source for
the `write(2)` system call stub into our program. After `write(2)` finishes, the
@@ -455,7 +455,7 @@ The only problem we had was that the program had chosen an
Since everybody knows what a [PDP-11](https://en.wikipedia.org/wiki/PDP-11)
branch instruction looks like (everyone knows that the traditional magic word
for an executable, `0407`, is a [PDP-11](https://en.wikipedia.org/wiki/PDP-11)
-[branch](https://en.wikipedia.org/wiki/Branch_(computer_science))), we changed
+[branch](https://en.wikipedia.org/wiki/Branch_(computer_science)), we changed
that to [decimal](https://en.wikipedia.org/wiki/Decimal). After checking the
size of the resulting program we saw that it was one byte too long. The limit
was 512 bytes, and our program was 513 bytes. So we changed the word `and` in
diff --git a/1984/mullender/index.html b/1984/mullender/index.html
index 08c342c12..57c79d243 100644
--- a/1984/mullender/index.html
+++ b/1984/mullender/index.html
@@ -452,7 +452,7 @@ that has ever been received! Like all great contest entries, it resulted in a
change of rules for the following year. To prevent a flood of similar programs,
the rules were changed, requesting non-machine specific code.
This program was selected for the 1987 t-shirt collection.
The C startup routine, via crt0.o,
transfers control to a location named main. In this case, main just happens
to be in the data area. The array of shorts, which has been further
obfuscated by use of different data types, just happens to form a meaningful set
@@ -549,7 +549,7 @@ Our program is idempotent under cb.
More detailed analysis
When this program is compiled, the compiler places the array somewhere in
memory, just like it places any compiled code somewhere in memory. Usually, the
-C startup code (crt0.o) calls a routine
+C startup code, crt0.o, calls a routine
named main(). The loader fills in the address in the startup code, but at
least on the old systems where this program ran, it doesn’t know that the
main() in this program isn’t code but data!
@@ -562,7 +562,7 @@ with the calls instruction. This instruction uses the first (2-byte
word of the called
routine as a mask of
registers that are to be
-saved on the stack.
+saved on the stack.
In other words, on the VAX the first word can be anything. On the
PDP, the first word
is a branch
@@ -664,9 +664,9 @@ programs use is after the str label, and the
pdp label.
On the VAX, the program
pushes 9 (the length
-of the string), the address of the string and 1 (the file
+of the string), the address of the string and 1, the file
descriptor on the
-stack) and calls
+stack, and calls
write(2). Since we didn’t know the exact calling sequence for system
calls, we just copied the source for
the write(2) system call stub into our program. After write(2) finishes, the
@@ -745,7 +745,7 @@ The only problem we had was that the program had chosen an
Since everybody knows what a PDP-11
branch instruction looks like (everyone knows that the traditional magic word
for an executable, 0407, is a PDP-11
-branch), we changed
+branch, we changed
that to decimal. After checking the
size of the resulting program we saw that it was one byte too long. The limit
was 512 bytes, and our program was 513 bytes. So we changed the word and in
diff --git a/1985/README.md b/1985/README.md
index b22dd1ba3..3faba9d52 100644
--- a/1985/README.md
+++ b/1985/README.md
@@ -6,7 +6,7 @@ and try to figure how it does what it does! You may then wish to look at the
Author's remarks for even more details.
Hints against machine dependent code were added to the [rules](rules.txt) to
-avoid another 1984 style entry ([1984/mullender](../1984/mullender/index.html)).
+avoid another 1984 style [1984/mullender](../1984/mullender/index.html) entry.
[Rules](rules.txt) and [results](../years.html#1985) were posted to _net.lang.c_
and _net.unix-wizards_. Larry Bassel was invited to help in the judging.
Awards were given to 5 classes of programs since we were unable to select only
diff --git a/1985/august/README.md b/1985/august/README.md
index fd5173c5b..eb2228d90 100644
--- a/1985/august/README.md
+++ b/1985/august/README.md
@@ -18,8 +18,8 @@
./try.sh
```
-If you have the `primes(6)` tool (sometimes part of [BSD
-Games](https://github.com/vattam/BSDGames)) you can see
+If you have the `primes(6)` tool (sometimes part of
+([BSD](https://github.com/vattam/BSDGames) Games) you can see
what of the output in the first `N` (say `15` or `25`) lines are primes:
```
diff --git a/1985/august/index.html b/1985/august/index.html
index c7963784b..2083ac9d1 100644
--- a/1985/august/index.html
+++ b/1985/august/index.html
@@ -403,8 +403,8 @@ Location: SE - Kingdom of Sweden (
./august
Try:
./try.sh
-
If you have the primes(6) tool (sometimes part of BSD
-Games) you can see
+
If you have the primes(6) tool (sometimes part of
+(BSD Games) you can see
what of the output in the first N (say 15 or 25) lines are primes:
./primes.sh # 15
./primes.sh 25
diff --git a/1985/index.html b/1985/index.html
index 4e47e539e..f72a1cf78 100644
--- a/1985/index.html
+++ b/1985/index.html
@@ -388,7 +388,7 @@ to compile it and how to run the winning program. Look at the winning source
and try to figure how it does what it does! You may then wish to look at the
Author’s remarks for even more details.
Hints against machine dependent code were added to the rules to
-avoid another 1984 style entry (1984/mullender).
+avoid another 1984 style 1984/mullender entry.
Rules and results were posted to net.lang.c
and net.unix-wizards. Larry Bassel was invited to help in the judging.
Awards were given to 5 classes of programs since we were unable to select only
diff --git a/1986/README.md b/1986/README.md
index 3a453c228..92bf1cfb2 100644
--- a/1986/README.md
+++ b/1986/README.md
@@ -13,7 +13,7 @@ A poll was taken for the worst code for
[BSD](https://en.wikipedia.org/wiki/Berkeley_Software_Distribution) and [System
V](https://en.wikipedia.org/wiki/UNIX_System_V) program. The [Bourne
Shell](https://en.wikipedia.org/wiki/Bourne_shell) (`/bin/sh`) won for both
-systems. The BSD [finger](https://en.wikipedia.org/wiki/Finger_(protocol))
+systems. The BSD [finger](https://en.wikipedia.org/wiki/Finger_(protocol))
program took third place.
[Rules](rules.txt) and [results](../years.html#1986) were posted to _net.lang.c_
diff --git a/1986/wall/README.md b/1986/wall/README.md
index d2fdef964..6846abf8e 100644
--- a/1986/wall/README.md
+++ b/1986/wall/README.md
@@ -19,8 +19,8 @@ This caused a number of System V C pre-preprocessors to gripe about a
syntax error.
This program is a masterpiece of obfuscation and humor. Larry Wall (the hacker
-who gave us [rn](https://en.wikipedia.org/wiki/Rn_(newsreader)) and
-[patch](https://en.wikipedia.org/wiki/Patch_(Unix))) asks you to compile and
+who gave us [rn](https://en.wikipedia.org/wiki/Rn_(newsreader)) and
+[patch](https://en.wikipedia.org/wiki/Patch_(Unix)), etc.) asks you to compile and
consider the warning message generated by the C compiler. Then execute the
program and type characters into its standard input. You will see why the
compiler documents the program.
diff --git a/1986/wall/index.html b/1986/wall/index.html
index 4ae8bfa50..eae849343 100644
--- a/1986/wall/index.html
+++ b/1986/wall/index.html
@@ -407,7 +407,7 @@ This caused a number of System V C pre-preprocessors to gripe about a
syntax error.
This program is a masterpiece of obfuscation and humor. Larry Wall (the hacker
who gave us rn and
-patch) asks you to compile and
+patch, etc.) asks you to compile and
consider the warning message generated by the C compiler. Then execute the
program and type characters into its standard input. You will see why the
compiler documents the program.
diff --git a/1987/lievaart/README.md b/1987/lievaart/README.md
index c09e75841..8f737539b 100644
--- a/1987/lievaart/README.md
+++ b/1987/lievaart/README.md
@@ -29,7 +29,7 @@ We believe that you too will be amazed at just how much power Mr. Lievaart
packed into 1024 bytes!
This Plays the game of [Reversi
-(Othello)](https://en.wikipedia.org/wiki/Reversi)! Compile and run. It then
+[Othello](https://en.wikipedia.org/wiki/Reversi)! Compile and run. It then
asks for a playing level. Enter 0-10 (easy-hard). It then asks for
your move. A move is a number within 11-88, or 99 to pass. Illegal
moves (except for an illegal pass) are rejected. Then the computer
diff --git a/1987/lievaart/index.html b/1987/lievaart/index.html
index af02327e3..653902d14 100644
--- a/1987/lievaart/index.html
+++ b/1987/lievaart/index.html
@@ -409,8 +409,8 @@ Location: NL - Kingdom of the Netherlan
Judges’ remarks:
We believe that you too will be amazed at just how much power Mr. Lievaart
packed into 1024 bytes!
This Plays the game of [Reversi
+Othello! Compile and run. It then
asks for a playing level. Enter 0-10 (easy-hard). It then asks for
your move. A move is a number within 11-88, or 99 to pass. Illegal
moves (except for an illegal pass) are rejected. Then the computer
diff --git a/1989/robison/README.md b/1989/robison/README.md
index 01e4a330a..b2c87e05e 100644
--- a/1989/robison/README.md
+++ b/1989/robison/README.md
@@ -58,7 +58,7 @@ For an interesting document on APL, see
This program is a handy picoAPL interpreter written in `C--`. It
outputs the evaluation of an
-[APL](https://en.wikipedia.org/wiki/APL_(programming_language)) expression from standard
+[APL](https://en.wikipedia.org/wiki/APL_(programming_language)) expression from standard
input. Functions are limited to dyadic `+`,`-`,`x`, and unary `-`;
numerals must be binary. Parentheses may be used for
grouping. For example:
diff --git a/1990/jaw/README.md b/1990/jaw/README.md
index 2b321b3d5..725ff729e 100644
--- a/1990/jaw/README.md
+++ b/1990/jaw/README.md
@@ -80,7 +80,7 @@ by the receiver. Command shell archives alleviate this problem somewhat, but
still require standardization for the function of data compression and
mail-transparency encoding. On Unix, these coding format quandaries are overcome
by planting a novel [Trojan
-Horse](https://en.wikipedia.org/wiki/Trojan_horse_(computing)) in the archive
+Horse](https://en.wikipedia.org/wiki/Trojan_horse_(computing)) in the archive
header to perform negotiation-less decoding.
Specifically, we outline the development of an extraordinarily compact portable
diff --git a/1991/cdupont/README.md b/1991/cdupont/README.md
index 434fbd94e..7132a3ef6 100644
--- a/1991/cdupont/README.md
+++ b/1991/cdupont/README.md
@@ -21,7 +21,7 @@ Why is the following label necessary?
```
Notice that if you C beautify (cb) or pre-process this program, it
-will no longer work correctly, if at all. (go ahead, try it... :-))
+will no longer work correctly, if at all. Go ahead, try it... :-)
NOTE: One should remove the final trailing newline to obtain the
original source file. This step is not needed to compile
diff --git a/1991/cdupont/index.html b/1991/cdupont/index.html
index 476bdbd9b..65576fde8 100644
--- a/1991/cdupont/index.html
+++ b/1991/cdupont/index.html
@@ -405,7 +405,7 @@ Location: FR - French Republic (Why is the following label necessary?
sorryfor_this_unused_but_very_needed_label:
Notice that if you C beautify (cb) or pre-process this program, it
-will no longer work correctly, if at all. (go ahead, try it… :-))
+will no longer work correctly, if at all. Go ahead, try it… :-)
NOTE: One should remove the final trailing newline to obtain the
original source file. This step is not needed to compile
this entry.
diff --git a/1991/fine/README.md b/1991/fine/README.md
index 4307b6182..740a03162 100644
--- a/1991/fine/README.md
+++ b/1991/fine/README.md
@@ -30,7 +30,7 @@ rotated from `the rug gary lent`!
## Judges' remarks:
This filter, 80 chars plus a newline, fits into a single line on most
-terminals (unless your terminal has a line wrap mis-feature :-)).
+terminals, unless your terminal has a line wrap mis-feature :-).
Note in 2023: fixing this entry to work with modern systems increased the size,
originally to 106 characters but it was dropped back down to 80 with clever use
diff --git a/1991/fine/index.html b/1991/fine/index.html
index b39292953..e351bb974 100644
--- a/1991/fine/index.html
+++ b/1991/fine/index.html
@@ -412,7 +412,7 @@ those who have a harder time reading backwards it says: Gary lent the rug<
rotated from the rug gary lent!
Judges’ remarks:
This filter, 80 chars plus a newline, fits into a single line on most
-terminals (unless your terminal has a line wrap mis-feature :-)).
+terminals, unless your terminal has a line wrap mis-feature :-).
Note in 2023: fixing this entry to work with modern systems increased the size,
originally to 106 characters but it was dropped back down to 80 with clever use
of the Makefile.
diff --git a/1992/buzzard.2/README.md b/1992/buzzard.2/README.md
index 434923bf8..a4f2d027a 100644
--- a/1992/buzzard.2/README.md
+++ b/1992/buzzard.2/README.md
@@ -137,7 +137,7 @@ part.
For more information on what you can do once you've piped [third](%%REPO_URL%%/1992/buzzard.2/third) into
first, type `help` and consult
-[FORTH](https://en.wikipedia.org/wiki/Forth_(programming_language)) manuals for
+[FORTH](https://en.wikipedia.org/wiki/Forth_(programming_language)) manuals for
further reference. Six sample THIRD programs are included in the files
`demo1.th` through `demo6.th`. See [buzzard.2.README.html](buzzard.2.README.html)
for more information.
@@ -190,7 +190,7 @@ answer the question "what will this do when I run it". A reader who has
deciphered `first` to this point may think they know the answer to this
question, but they may not know the answer to the more important question, "what
will this program do when given the right input?"
-[FORTH](https://en.wikipedia.org/wiki/Forth_(programming_language)) aficionados,
+[FORTH](https://en.wikipedia.org/wiki/Forth_(programming_language)) aficionados,
and especially FORTH implementers, may recognize the similarity of the internal
compiler format to many FORTH internal representations, and, being aware that
FORTH interpreters can often be self-compiling, may be suspicious that this
diff --git a/1992/vern/README.md b/1992/vern/README.md
index 601195c1e..d409a111a 100644
--- a/1992/vern/README.md
+++ b/1992/vern/README.md
@@ -147,8 +147,8 @@ by comparing the function pointer with the function itself).
Fourth, there are no independent routines for generating potential moves.
Instead, the program generates its moves by brute force: for every piece it
controls on the board, it attempts to move it to every square on the board.
-Those moves that are legal it then explores to see their effects (using
-[alpha-beta search](https://en.wikipedia.org/wiki/Alpha-beta_pruning)). This
+Those moves that are legal it then explores to see their effects, using
+[alpha-beta search](https://en.wikipedia.org/wiki/Alpha-beta_pruning). This
tactic somewhat obfuscates the algorithm used by the program.
Finally, there are three key constants that occur throughout the program: `64`,
diff --git a/1992/vern/index.html b/1992/vern/index.html
index 6e34fb2ba..42766ff78 100644
--- a/1992/vern/index.html
+++ b/1992/vern/index.html
@@ -499,8 +499,8 @@ by comparing the function pointer with the function itself).
Fourth, there are no independent routines for generating potential moves.
Instead, the program generates its moves by brute force: for every piece it
controls on the board, it attempts to move it to every square on the board.
-Those moves that are legal it then explores to see their effects (using
-alpha-beta search). This
+Those moves that are legal it then explores to see their effects, using
+alpha-beta search. This
tactic somewhat obfuscates the algorithm used by the program.
Finally, there are three key constants that occur throughout the program: 64,
8, and 3 (lg 8). Rather than making these available at compile-time,
diff --git a/1993/dgibson/README.md b/1993/dgibson/README.md
index 21e43db22..e26616fe2 100644
--- a/1993/dgibson/README.md
+++ b/1993/dgibson/README.md
@@ -13,7 +13,7 @@
where:
-`datafile` is the initial pattern (default: [dgibson.data1](%%REPO_URL%%/1993/dgibson/dgibson.data1))
+`datafile` is the initial pattern (default is the [dgibson.data1](%%REPO_URL%%/1993/dgibson/dgibson.data1) file)
## Try:
diff --git a/1993/dgibson/index.html b/1993/dgibson/index.html
index c9cfea1a8..d19167a9f 100644
--- a/1993/dgibson/index.html
+++ b/1993/dgibson/index.html
@@ -402,7 +402,7 @@ Location: ZZ - Unknown locationTo use:
./dgibson.sh [datafile]
where:
-
datafile is the initial pattern (default: dgibson.data1)
+
datafile is the initial pattern (default is the dgibson.data1 file)
Try:
./try.sh
Judges’ remarks:
diff --git a/1994/README.md b/1994/README.md
index 6224feae4..0a34f4c3e 100644
--- a/1994/README.md
+++ b/1994/README.md
@@ -25,7 +25,7 @@ errors.
Rule abuse was encouraged this year - two of this year's winning entries found
new and interesting abuses of the rules. Next year's rules will change
-due to these ([smr](smr/index.html) and [dodsond2](dodsond2/index.html)) entries'
+due to these [smr](smr/index.html) and [dodsond2](dodsond2/index.html) entries'
forms of abuse.
diff --git a/1994/index.html b/1994/index.html
index 59dda97e3..ff82735ad 100644
--- a/1994/index.html
+++ b/1994/index.html
@@ -403,7 +403,7 @@ unable to find an ANSI C compiler that flagged such expressions as
errors.
Rule abuse was encouraged this year - two of this year’s winning entries found
new and interesting abuses of the rules. Next year’s rules will change
-due to these (smr and dodsond2) entries’
+due to these smr and dodsond2 entries’
forms of abuse.
Want to be an IOCCC Judge?
We are thinking about adding a 3rd judge to our team. A 3rd judge
diff --git a/1994/shapiro/README.md b/1994/shapiro/README.md
index 4ee67bbd4..749b64281 100644
--- a/1994/shapiro/README.md
+++ b/1994/shapiro/README.md
@@ -67,18 +67,18 @@ The basic theme (pun) of this program is:
```
-My entry ([shapiro.c](%%REPO_URL%%/1994/shapiro/shapiro.c)) is mostly comments, formatted in the shape of a
+My entry, [shapiro.c](%%REPO_URL%%/1994/shapiro/shapiro.c), is mostly comments, formatted in the shape of a
clock. If you strip out the comments and look at the code you will
quickly realize that the comments were the important part and that
the code does very little (see pun above). It writes (to `stdout`)
-another C program ([shapiro_t2.c](%%REPO_URL%%/1994/shapiro/shapiro_t2.c)). This is the first level of
+another C program ([shapiro_t2.c](%%REPO_URL%%/1994/shapiro/shapiro_t2.c). This is the first level of
obfuscation.
The second program ([shapiro_t2.c](%%REPO_URL%%/1994/shapiro/shapiro_t2.c) (use `make everything` first)
prints a clock in the upper right hand corner of your VTxxx/ANSI display.
-Most of the surface obfuscation in the second program
-([shapiro_t2.c](%%REPO_URL%%/1994/shapiro/shapiro_t2.c)) was an attempt to make it as small as possible.
+Most of the surface obfuscation in the second program,
+[shapiro_t2.c](%%REPO_URL%%/1994/shapiro/shapiro_t2.c), was an attempt to make it as small as possible.
You should be able to see around this with `cb(1)` and some more intelligent
variable names. Once you get past this you will realize that the third level of
obfuscation is a six member client/server hierarchy. (See the
diff --git a/1994/shapiro/index.html b/1994/shapiro/index.html
index e667f9522..ec2d15e98 100644
--- a/1994/shapiro/index.html
+++ b/1994/shapiro/index.html
@@ -430,16 +430,16 @@ this program. Note that this alt file is currently missing. See
The basic theme (pun) of this program is:
"This time (everything) is not where it should be."
~~~~
-
My entry (shapiro.c) is mostly comments, formatted in the shape of a
+
My entry, shapiro.c, is mostly comments, formatted in the shape of a
clock. If you strip out the comments and look at the code you will
quickly realize that the comments were the important part and that
the code does very little (see pun above). It writes (to stdout)
-another C program (shapiro_t2.c). This is the first level of
+another C program (shapiro_t2.c. This is the first level of
obfuscation.
The second program (shapiro_t2.c (use make everything first)
prints a clock in the upper right hand corner of your VTxxx/ANSI display.
-
Most of the surface obfuscation in the second program
-(shapiro_t2.c) was an attempt to make it as small as possible.
+
Most of the surface obfuscation in the second program,
+shapiro_t2.c, was an attempt to make it as small as possible.
You should be able to see around this with cb(1) and some more intelligent
variable names. Once you get past this you will realize that the third level of
obfuscation is a six member client/server hierarchy. (See the
diff --git a/1994/shapiro/shapiro.html b/1994/shapiro/shapiro.html
index be0a0a9c2..aa864583e 100644
--- a/1994/shapiro/shapiro.html
+++ b/1994/shapiro/shapiro.html
@@ -380,7 +380,7 @@
1. #include <stdio.h>
2. main()
diff --git a/1994/shapiro/shapiro.md b/1994/shapiro/shapiro.md
index f61299e81..eb3aa6e43 100644
--- a/1994/shapiro/shapiro.md
+++ b/1994/shapiro/shapiro.md
@@ -1,6 +1,6 @@
# HINTS
-For the first program ([shapiro.c](%%REPO_URL%%/1994/shapiro/shapiro.c)):
+For the first program, [shapiro.c](%%REPO_URL%%/1994/shapiro/shapiro.c):
This is a very simple program:
diff --git a/1994/tvr/README.md b/1994/tvr/README.md
index a76e67475..68f3e30e4 100644
--- a/1994/tvr/README.md
+++ b/1994/tvr/README.md
@@ -86,9 +86,9 @@ fix it without breaking something else?
This program contains four pairs of fractals/effects and three methods of
animating them. There are two windows for a pair of fractals, one of which
-contains static fractal (e.g. [Mandelbrot
-set](https://en.wikipedia.org/wiki/Mandelbrot_set)) and the other an animating
-one (e.g. [Julia set](https://en.wikipedia.org/wiki/Julia_set)) which is derived
+contains static fractal (e.g., [Mandelbrot](https://en.wikipedia.org/wiki/Mandelbrot_set) set)
+and the other an animating
+one (e.g., [Julia](https://en.wikipedia.org/wiki/Julia_set) set) which is derived
from the same formula as the static one. Only one pair of fractals can be
displayed in one process.
diff --git a/1994/tvr/index.html b/1994/tvr/index.html
index 5f90ca146..9af23ef93 100644
--- a/1994/tvr/index.html
+++ b/1994/tvr/index.html
@@ -434,9 +434,9 @@ fix it without breaking something else?
Interactive Fractals for X Window System
This program contains four pairs of fractals/effects and three methods of
animating them. There are two windows for a pair of fractals, one of which
-contains static fractal (e.g. Mandelbrot
-set) and the other an animating
-one (e.g. Julia set) which is derived
+contains static fractal (e.g., Mandelbrot set)
+and the other an animating
+one (e.g., Julia set) which is derived
from the same formula as the static one. Only one pair of fractals can be
displayed in one process.
To animate the fractal, you must move your mouse on the static
diff --git a/1994/weisberg/README.md b/1994/weisberg/README.md
index 8a70f5a24..8ef664b99 100644
--- a/1994/weisberg/README.md
+++ b/1994/weisberg/README.md
@@ -77,7 +77,7 @@ event of a system shutdown or reboot.
### Bugs
-The alternative version ([weisberg.alt.c](%%REPO_URL%%/1994/weisberg/weisberg.alt.c)) has never actually run
+The alternative version ([weisberg.alt.c](%%REPO_URL%%/1994/weisberg/weisberg.alt.c) source) has never actually run
to completion. After running for close to a week it had reached somewhere around
250e6, when it became necessary to test the reboot feature (which worked
remarkably well). As there are quite a lot of primes to be found before reaching
diff --git a/1994/weisberg/index.html b/1994/weisberg/index.html
index f57c768ee..9a60b6e7a 100644
--- a/1994/weisberg/index.html
+++ b/1994/weisberg/index.html
@@ -433,7 +433,7 @@ run to completion, so as an added feature, it will cease execution upon
reception of a signal (any will do equally well), as well as in the
event of a system shutdown or reboot.
Bugs
-
The alternative version (weisberg.alt.c) has never actually run
+
The alternative version (weisberg.alt.c source) has never actually run
to completion. After running for close to a week it had reached somewhere around
250e6, when it became necessary to test the reboot feature (which worked
remarkably well). As there are quite a lot of primes to be found before reaching
diff --git a/1996/rcm/README.md b/1996/rcm/README.md
index 88bd7e63d..3a5177007 100644
--- a/1996/rcm/README.md
+++ b/1996/rcm/README.md
@@ -39,8 +39,8 @@ commands including a way to do the above command but with more steps.
Except for some silly requirements regarding input validation, CRC checking, and
similar unimportant fluff, this program is a fully compliant
-[RFC1951](https://www.ietf.org/rfc/rfc1951.txt)/[RFC1952](https://www.ietf.org/rfc/rfc1952.txt)
-([GNU Gzip](https://www.gnu.org/software/gzip/)) file uncompressor. Feed it a
+[RFC1951](https://www.ietf.org/rfc/rfc1951.txt)/[RFC1952](https://www.ietf.org/rfc/rfc1952.txt),
+[GNU Gzip](https://www.gnu.org/software/gzip/), file uncompressor. Feed it a
`gzip` compressed file on standard input, and it will write the fully
uncompressed original file to standard output.
diff --git a/1996/rcm/index.html b/1996/rcm/index.html
index b32a943cf..477a69309 100644
--- a/1996/rcm/index.html
+++ b/1996/rcm/index.html
@@ -413,8 +413,8 @@ commands including a way to do the above command but with more steps.
Author’s remarks:
Except for some silly requirements regarding input validation, CRC checking, and
similar unimportant fluff, this program is a fully compliant
-RFC1951/RFC1952
-(GNU Gzip) file uncompressor. Feed it a
+RFC1951/RFC1952,
+GNU Gzip, file uncompressor. Feed it a
gzip compressed file on standard input, and it will write the fully
uncompressed original file to standard output.
ObJustifications for this entry:
diff --git a/1996/westley/README.md b/1996/westley/README.md
index 476a44a6a..985085dc5 100644
--- a/1996/westley/README.md
+++ b/1996/westley/README.md
@@ -60,8 +60,9 @@ This 1-line program allows various analog ASCII clocks to print out the time;
the ASCII clock is built from the command line arguments, so many different
types of clocks can be generated. Three different scripts are supplied to print
out a grandfather clock, a mantle clock that runs backwards, and a linear-style
-clock. (they are [clock1.sh](%%REPO_URL%%/1996/westley/clock1.sh), [clock2.sh](%%REPO_URL%%/1996/westley/clock2.sh), and
-[clock3.sh](%%REPO_URL%%/1996/westley/clock3.sh))
+clock. (they are [clock1.sh](%%REPO_URL%%/1996/westley/clock1.sh),
+[clock2.sh](%%REPO_URL%%/1996/westley/clock2.sh), and
+[clock3.sh](%%REPO_URL%%/1996/westley/clock3.sh).
The program makes the following (possibly non-portable) assumptions:
diff --git a/1996/westley/index.html b/1996/westley/index.html
index 2eb0531cc..0af1048dd 100644
--- a/1996/westley/index.html
+++ b/1996/westley/index.html
@@ -426,8 +426,9 @@ understand it.
the ASCII clock is built from the command line arguments, so many different
types of clocks can be generated. Three different scripts are supplied to print
out a grandfather clock, a mantle clock that runs backwards, and a linear-style
-clock. (they are clock1.sh, clock2.sh, and
-clock3.sh)
+clock. (they are clock1.sh,
+clock2.sh, and
+clock3.sh.
The program makes the following (possibly non-portable) assumptions:
Command line strings can be written to.
diff --git a/1998/schnitzi/README.md b/1998/schnitzi/README.md
index d7fc68330..e8974962f 100644
--- a/1998/schnitzi/README.md
+++ b/1998/schnitzi/README.md
@@ -77,8 +77,8 @@ the letter `e`.
The IOCCC has been no stranger to this concept. Several winning entries from
years past have accomplished interesting feats while completely avoiding the use
-of certain C constructs thought to be essential (e.g.
-[1988/robison.c](%%REPO_URL%%/1988/robison/robison.c)). If you have to ask why they would
+of certain C constructs thought to be essential (e.g.,
+[1988/robison.c](%%REPO_URL%%/1988/robison/robison.c) file). If you have to ask why they would
do it this way, then this contest just isn't for you.
In continuing with this fine tradition, this program suggests to the ANSI
diff --git a/1998/schnitzi/index.html b/1998/schnitzi/index.html
index 61bcff2c4..d31bc66e3 100644
--- a/1998/schnitzi/index.html
+++ b/1998/schnitzi/index.html
@@ -441,8 +441,8 @@ entire novel (E. V. Wright’s “Gadsby”) in which no word contains
the letter e.
The IOCCC has been no stranger to this concept. Several winning entries from
years past have accomplished interesting feats while completely avoiding the use
-of certain C constructs thought to be essential (e.g.
-1988/robison.c). If you have to ask why they would
+of certain C constructs thought to be essential (e.g.,
+1988/robison.c file). If you have to ask why they would
do it this way, then this contest just isn’t for you.
In continuing with this fine tradition, this program suggests to the ANSI
committee some new practical simplifications for the C language. For instance,
diff --git a/2001/anonymous/README.md b/2001/anonymous/README.md
index 15f68fed8..9b4619bf5 100644
--- a/2001/anonymous/README.md
+++ b/2001/anonymous/README.md
@@ -123,7 +123,7 @@ The build script should give an example command to compile the program.
### Features
[Basic Block](https://en.wikipedia.org/wiki/Basic_block)
-[Cache](https://en.wikipedia.org/wiki/Cache_(computing)): Rather than
+[Cache](https://en.wikipedia.org/wiki/Cache_(computing)): Rather than
translating each instruction individually the dynamic binary translator
generates a translation for an entire basic block of subject code. Having
translated a block once, the target code generated will be stored for the
@@ -138,7 +138,7 @@ The program runs [dynamically
linked](https://en.wikipedia.org/wiki/Dynamic_linker) [ELF
binaries](https://en.wikipedia.org/wiki/Executable_and_Linkable_Format), and
when the subject program attempts to make a call to a standard
-[library](https://en.wikipedia.org/wiki/Library_(computing)), the translator
+[library](https://en.wikipedia.org/wiki/Library_(computing)), the translator
attempts to make an appropriate call to the native system libraries on the
target machine. This involves mangling between different calling conventions,
etc.
@@ -209,9 +209,9 @@ on to the next line of code.
Due to space limitations only a handful of instructions are supported; these
instructions which are supported are supported in somewhat non-conventional
ways: chunks of the architecture (e.g. flags) are just ignored, the ELF
-[loader](https://en.wikipedia.org/wiki/Loader_(computing)) does not really load
+[loader](https://en.wikipedia.org/wiki/Loader_(computing)) does not really load
the [ELF binary](https://en.wikipedia.org/wiki/Executable_and_Linkable_Format),
-the target [library linking](https://en.wikipedia.org/wiki/Linker_(computing))
+the target [library linking](https://en.wikipedia.org/wiki/Linker_(computing))
can only pass up to 3 parameters to the target library function, etc.
In short, please consider this a full disclaimer for any bug that may
diff --git a/2001/bellard/README.md b/2001/bellard/README.md
index f159d7c57..0fefb10c5 100644
--- a/2001/bellard/README.md
+++ b/2001/bellard/README.md
@@ -53,8 +53,8 @@ You can use it by typing:
or by giving the C source to its standard input.
-`args` are given to the `main()` function of `bellard.c` (`argv[0]` is
-[bellard.c](%%REPO_URL%%/2001/bellard/bellard.c)).
+`args` are given to the `main()` function of `bellard.c`, `argv[0]` is
+[bellard.c](%%REPO_URL%%/2001/bellard/bellard.c).
### Examples:
diff --git a/2001/bellard/index.html b/2001/bellard/index.html
index 18d741651..84f075885 100644
--- a/2001/bellard/index.html
+++ b/2001/bellard/index.html
@@ -420,8 +420,8 @@ program.
You can use it by typing:
./bellard bellard.c [args]...
or by giving the C source to its standard input.
-
args are given to the main() function of bellard.c (argv[0] is
-bellard.c).
+
args are given to the main() function of bellard.c, argv[0] is
+bellard.c.
Examples:
Sample compilation and execution:
diff --git a/2001/dgbeards/README.md b/2001/dgbeards/README.md
index 1744586d0..7de92ab76 100644
--- a/2001/dgbeards/README.md
+++ b/2001/dgbeards/README.md
@@ -162,7 +162,7 @@ program would probably be rated somewhere around 1700-1900. It is better
than most players, but will get destroyed by experienced human opponents.
This program searches to a fixed depth of 3
-[ply](https://en.wikipedia.org/wiki/Ply_(game_theory)). Because it does not
+[ply](https://en.wikipedia.org/wiki/Ply_(game_theory)). Because it does not
search very deep, it performs very poorly in quiet strategic positions.
In such positions, it will often just shuffle pieces around aimlessly
until a tactical exchange presents itself.
diff --git a/2001/herrmann2/README.md b/2001/herrmann2/README.md
index 764840259..d436aa06d 100644
--- a/2001/herrmann2/README.md
+++ b/2001/herrmann2/README.md
@@ -19,7 +19,7 @@
```
If you use vi(m) you can see a pattern in [herrmann2.cup](%%REPO_URL%%/2001/herrmann2/herrmann2.cup) and
-[herrmann2.ioccc][(%%REPO_URL%%/2001/herrmann2/herrmann2.ioccc]) by say:
+[herrmann2.ioccc][(%%REPO_URL%%/2001/herrmann2/herrmann2.ioccc] by say:
```
diff --git a/2001/herrmann2/index.html b/2001/herrmann2/index.html
index 4daeb4621..61b7e2c51 100644
--- a/2001/herrmann2/index.html
+++ b/2001/herrmann2/index.html
@@ -404,7 +404,7 @@ Location: DE - Federal Republic of Germ
Try:
./try.sh
If you use vi(m) you can see a pattern in herrmann2.cup and
-[herrmann2.ioccc][(https://github.com/ioccc-src/temp-test-ioccc/blob/master/2001/herrmann2/herrmann2.ioccc]) by say:
+[herrmann2.ioccc][(https://github.com/ioccc-src/temp-test-ioccc/blob/master/2001/herrmann2/herrmann2.ioccc] by say:
/[pon]\
and
/l
diff --git a/2004/anonymous/README.md b/2004/anonymous/README.md
index 581cbcccb..979089a3a 100644
--- a/2004/anonymous/README.md
+++ b/2004/anonymous/README.md
@@ -93,8 +93,8 @@ transcription to standard output as a [portable
graymap](https://en.wikipedia.org/wiki/Netpbm#PGM_example) (PGM) file.
The specific transcription mode is the [Black
-Speech](https://www.glyphweb.com/arda/b/blackspeech.html) ([Tengwar
-mode](https://www.glyphweb.com/arda/t/tengwar.html)), as
+Speech](https://www.glyphweb.com/arda/b/blackspeech.html)
+([Tengwar](https://www.glyphweb.com/arda/t/tengwar.html) mode), as
used in the inscription on the [One
Ring](https://www.glyphweb.com/arda/o/onering.html). The program handles the
following digraphs:
diff --git a/2004/anonymous/index.html b/2004/anonymous/index.html
index 5517ed39c..c12c27fc9 100644
--- a/2004/anonymous/index.html
+++ b/2004/anonymous/index.html
@@ -454,8 +454,8 @@ argument text into Tolkien’s Elvish letters, and writes the
transcription to standard output as a portable
graymap (PGM) file.
The specific transcription mode is the Black
-Speech (Tengwar
-mode), as
+Speech
+(Tengwar mode), as
used in the inscription on the One
Ring. The program handles the
following digraphs:
diff --git a/2004/gavare/README.md b/2004/gavare/README.md
index 1d1f6941a..cd92cabd3 100644
--- a/2004/gavare/README.md
+++ b/2004/gavare/README.md
@@ -114,7 +114,7 @@ although the compiler gives it special meaning) and no preprocessor
directives.
This program is a small
-[ray-tracer](https://en.wikipedia.org/wiki/Ray_tracing_(graphics)). The first
+[ray-tracer](https://en.wikipedia.org/wiki/Ray_tracing_(graphics)). The first
line of the source code may be modified if you want the resulting image to be of
some other resolution than the predefined. The `A` value is an anti-alias
factor. Setting it to `1` disables the anti-aliasing feature which makes the
diff --git a/2004/gavin/README.md b/2004/gavin/README.md
index fbb1e68c8..918ee92ef 100644
--- a/2004/gavin/README.md
+++ b/2004/gavin/README.md
@@ -102,8 +102,8 @@ well as the judges' remarks below plus [gavin.html](gavin.html).
## Judges' remarks:
Over the years, we've seen a program that immediately dumps core if executed on
-the "wrong" architectures (e.g., [1984/mullender](../../1984/mullender/index.html)) and a
-program that dumps core after a while (e.g., [2001/bellard](../../2001/bellard/index.html)).
+the "wrong" architectures (e.g., [1984/mullender](../../1984/mullender/index.html) entry) and a
+program that dumps core after a while (e.g., [2001/bellard](../../2001/bellard/index.html) entry).
This entry will happily compile and execute on most any architecture - the trick
is that the result, to be useful, must be produced (and can only be enjoyed) on
a particular architecture. We have not decided yet whether to disallow this for
diff --git a/2004/gavin/index.html b/2004/gavin/index.html
index 1bd50f8c0..2f368eba6 100644
--- a/2004/gavin/index.html
+++ b/2004/gavin/index.html
@@ -441,8 +441,8 @@ generated are the same names. See to use and gavin.html.
Judges’ remarks:
Over the years, we’ve seen a program that immediately dumps core if executed on
-the “wrong” architectures (e.g., 1984/mullender) and a
-program that dumps core after a while (e.g., 2001/bellard).
+the “wrong” architectures (e.g., 1984/mullender entry) and a
+program that dumps core after a while (e.g., 2001/bellard entry).
This entry will happily compile and execute on most any architecture - the trick
is that the result, to be useful, must be produced (and can only be enjoyed) on
a particular architecture. We have not decided yet whether to disallow this for
diff --git a/2004/jdalbec/README.md b/2004/jdalbec/README.md
index 337d5c545..9d4b3959f 100644
--- a/2004/jdalbec/README.md
+++ b/2004/jdalbec/README.md
@@ -47,7 +47,7 @@ which line it is on.
make alt
```
-The macro `Ag` ([silver](https://en.wikipedia.org/wiki/Silver)) controls how
+The macro [Ag](https://en.wikipedia.org/wiki/Silver) controls how
many number of lines to print on a line. Set at default to 11 protons, salt, if
you wish to make it silver, 47 (a prime) protons, do:
diff --git a/2004/jdalbec/index.html b/2004/jdalbec/index.html
index da9ced0a3..484750e8b 100644
--- a/2004/jdalbec/index.html
+++ b/2004/jdalbec/index.html
@@ -416,7 +416,7 @@ that don’t end up having too many line breaks it also makes it easier to see
which line it is on.
The macro Ag controls how
many number of lines to print on a line. Set at default to 11 protons, salt, if
you wish to make it silver, 47 (a prime) protons, do:
make clobber Ag=47 alt
diff --git a/2004/vik2/README.md b/2004/vik2/README.md
index 297d0f47b..09a5da7d6 100644
--- a/2004/vik2/README.md
+++ b/2004/vik2/README.md
@@ -157,7 +157,7 @@ Then run the program to reveal all prime numbers up to 32 (if you used
I wasn't able to compile the full program which calculates [prime
numbers](https://en.wikipedia.org/wiki/Prime_number) up to 1024 using GNU `cpp`
-(or any other [pre-processor](https://en.wikipedia.org/wiki/C_preprocessor)) so
+(or any other [pre-processor](https://en.wikipedia.org/wiki/C_preprocessor) tool) so
I had to write my own. Knowing how the program works it was quite easy to reduce
the compilation time from several hours to about one second. I also added some
statistics to my home made pre-processor and I found that calculating prime
diff --git a/2004/vik2/index.html b/2004/vik2/index.html
index b92916db1..b309fcf06 100644
--- a/2004/vik2/index.html
+++ b/2004/vik2/index.html
@@ -504,7 +504,7 @@ work. This will take some time….
Verification
I wasn’t able to compile the full program which calculates prime
numbers up to 1024 using GNU cpp
-(or any other pre-processor) so
+(or any other pre-processor tool) so
I had to write my own. Knowing how the program works it was quite easy to reduce
the compilation time from several hours to about one second. I also added some
statistics to my home made pre-processor and I found that calculating prime
diff --git a/2005/aidan/README.md b/2005/aidan/README.md
index 8b872d19c..e87325108 100644
--- a/2005/aidan/README.md
+++ b/2005/aidan/README.md
@@ -111,7 +111,7 @@ it as you wish, though please give me credit.
### What is a sudoku?
(If you know, feel free to skip this section. Get more details from [the
-wikipedia entry](http://en.wikipedia.org/wiki/Sudoku))
+wikipedia entry](http://en.wikipedia.org/wiki/Sudoku).
A sudoku is a type of logic puzzle. You are given a grid of 9x9 boxes, some
of which contain digits. This is divided into a 3x3 set up, e.g. (from the
@@ -177,7 +177,7 @@ program generated):
```
Be warned - it's evil! (I certainly haven't been able to solve it by hand. The
-brute-force program given above, `sudoku-bfi.c` ([aidan.alt.c](%%REPO_URL%%/2005/aidan/aidan.alt.c)),
+brute-force program given above, `sudoku-bfi.c`, [aidan.alt.c](%%REPO_URL%%/2005/aidan/aidan.alt.c),
also has trouble - it took 66 seconds to solve it - but probably for different
reasons. That's the worst performance I've had from brute-force so far!)
diff --git a/2005/aidan/index.html b/2005/aidan/index.html
index b89d2f541..7989e5818 100644
--- a/2005/aidan/index.html
+++ b/2005/aidan/index.html
@@ -457,7 +457,7 @@ Go find some unpopular multinational to sue instead.
it as you wish, though please give me credit.
What is a sudoku?
(If you know, feel free to skip this section. Get more details from the
-wikipedia entry)
+wikipedia entry.
A sudoku is a type of logic puzzle. You are given a grid of 9x9 boxes, some
of which contain digits. This is divided into a 3x3 set up, e.g. (from the
Wikipedia article - fairly easy):
Be warned - it’s evil! (I certainly haven’t been able to solve it by hand. The
-brute-force program given above, sudoku-bfi.c (aidan.alt.c),
+brute-force program given above, sudoku-bfi.c, aidan.alt.c,
also has trouble - it took 66 seconds to solve it - but probably for different
reasons. That’s the worst performance I’ve had from brute-force so far!)
Usage
diff --git a/2005/anon/README.md b/2005/anon/README.md
index 37d14b8f5..31e18b56c 100644
--- a/2005/anon/README.md
+++ b/2005/anon/README.md
@@ -222,7 +222,7 @@ isolated `||` on line 68?
But wait... why aren't any statements terminated by semicolons? Why is there
only ONE semicolon in the entire program?! Why is the author opening nested
-blocks by such strange things as `||` and `(`, and closing them by `||` and `))`? The
+blocks by such strange things as `||` and `(`, and closing them by `||` and `)`? The
`for` loop isn't a `for` loop! The `do` loop isn't a `do` loop! Or... are they? Well,
the `for` loop is defined in terms of a `while` loop. But wait, the `while` loop is
defined in terms of the `do` loop. And the `do` loop is defined in terms of ...
diff --git a/2005/anon/index.html b/2005/anon/index.html
index 686b7e7ea..47b29de89 100644
--- a/2005/anon/index.html
+++ b/2005/anon/index.html
@@ -525,7 +525,7 @@ are there such strange statements, like that empty string on line 65, or that
isolated || on line 68?
But wait… why aren’t any statements terminated by semicolons? Why is there
only ONE semicolon in the entire program?! Why is the author opening nested
-blocks by such strange things as || and (, and closing them by || and ))? The
+blocks by such strange things as || and (, and closing them by || and )? The
for loop isn’t a for loop! The do loop isn’t a do loop! Or… are they? Well,
the for loop is defined in terms of a while loop. But wait, the while loop is
defined in terms of the do loop. And the do loop is defined in terms of …
diff --git a/2005/boutines/README.md b/2005/boutines/README.md
index ae60f02e6..daafc5f18 100644
--- a/2005/boutines/README.md
+++ b/2005/boutines/README.md
@@ -121,7 +121,7 @@ diagrams](https://en.wikipedia.org/wiki/Voronoi_diagram), see
[Qhull](http://www.qhull.org/), [CGAL](https://www.cgal.org) and the like but
you may still encounter large output volumes (and have to handle some sort of
clipping in order to represent properly infinite regions of the diagram in
-[SVG](https://www.w3.org/TR/SVG11/expanded-toc.html)).
+[SVG](https://www.w3.org/TR/SVG11/expanded-toc.html).
Beware, compilation may report warnings about precision loss, linting may be a
disaster, but the code should remain portable, and the output accurate enough
diff --git a/2005/boutines/index.html b/2005/boutines/index.html
index f4fb2dd83..230692778 100644
--- a/2005/boutines/index.html
+++ b/2005/boutines/index.html
@@ -468,7 +468,7 @@ diagrams, see
Qhull, CGAL and the like but
you may still encounter large output volumes (and have to handle some sort of
clipping in order to represent properly infinite regions of the diagram in
-SVG).
Beware, compilation may report warnings about precision loss, linting may be a
disaster, but the code should remain portable, and the output accurate enough
for most devices (including many inkjet printers). If you ever miss precision
diff --git a/2005/timwi/README.md b/2005/timwi/README.md
index 85ccb6008..0ec3f5ec8 100644
--- a/2005/timwi/README.md
+++ b/2005/timwi/README.md
@@ -28,7 +28,7 @@ simple 3-character fix will make it slightly less so.
Quite a few BF programs found on the Net expect byte-based memory, quite a few
exceed the capacity of this interpreter, but there are many that work. Some
-small [quines](https://en.wikipedia.org/wiki/Quine_(computing)) work, some don't.
+small [quines](https://en.wikipedia.org/wiki/Quine_(computing)) work, some don't.
Why?
diff --git a/2005/toledo/README.md b/2005/toledo/README.md
index 21a6558d0..3807b5042 100644
--- a/2005/toledo/README.md
+++ b/2005/toledo/README.md
@@ -68,14 +68,14 @@ get the first mode, run the program without arguments:
```
The other mode is accessible running the program with one argument
-(5-[ply](https://en.wikipedia.org/wiki/Ply_(game_theory))
+(5-[ply](https://en.wikipedia.org/wiki/Ply_(game_theory))
analysis):
```
./toledo a
```
-Two arguments for 6-[ply](https://en.wikipedia.org/wiki/Ply_(game_theory))
+Two arguments for 6-[ply](https://en.wikipedia.org/wiki/Ply_(game_theory))
analysis:
```
@@ -83,7 +83,7 @@ analysis:
```
And each successive argument will analyze one
-[ply](https://en.wikipedia.org/wiki/Ply_(game_theory)) more. There is no ply
+[ply](https://en.wikipedia.org/wiki/Ply_(game_theory)) more. There is no ply
limit, but beyond 7 ply is very slow, try it at your own risk and computing
time.
@@ -125,7 +125,7 @@ algorithms.
The interface accounts for only a fraction of the code, the core does multiples
functions: it is called recursively to analyze and evaluate each
-[ply](https://en.wikipedia.org/wiki/Ply_(game_theory)), does [alpha-beta
+[ply](https://en.wikipedia.org/wiki/Ply_(game_theory)), does [alpha-beta
pruning](https://en.wikipedia.org/wiki/Alpha-beta_pruning), move generation,
machine playing, check detection, illegal move verification and does moves after
they are verified.
@@ -142,7 +142,7 @@ Other features are:
* [Checkmate](https://en.wikipedia.org/wiki/Checkmate) detection.
* Stalemate detection.
* Computer is tough (check
-7-[ply](https://en.wikipedia.org/wiki/Ply_(game_theory))) and even in 5 ply can give a surprise to
+7-[ply](https://en.wikipedia.org/wiki/Ply_(game_theory)) and even in 5 ply can give a surprise to
amateur players.
diff --git a/2005/toledo/index.html b/2005/toledo/index.html
index 8ec7b607f..dd25bdedd 100644
--- a/2005/toledo/index.html
+++ b/2005/toledo/index.html
@@ -475,7 +475,7 @@ computer can do all legal chess moves.
Computer is tough (check
-7-ply) and even in 5 ply can give a surprise to
+7-ply and even in 5 ply can give a surprise to
amateur players.
Obfuscation tricks
diff --git a/2005/vik/README.md b/2005/vik/README.md
index f8277506d..5ebd6dfef 100644
--- a/2005/vik/README.md
+++ b/2005/vik/README.md
@@ -29,7 +29,7 @@ sure to pay attention to commas! :-)
## Author's remarks:
This entry is a [Wolfenstein](https://en.wikipedia.org/wiki/Wolfenstein) style
-[graphics engine](https://en.wikipedia.org/wiki/Rendering_(computer_graphics))
+[graphics engine](https://en.wikipedia.org/wiki/Rendering_(computer_graphics))
where a user can navigate in a
[3D](https://en.wikipedia.org/wiki/3D_computer_graphics) world. The
[maze](https://en.wikipedia.org/wiki/Maze) has walls with [bitmap
diff --git a/2006/birken/README.md b/2006/birken/README.md
index 700bcda38..fd1bbec3d 100644
--- a/2006/birken/README.md
+++ b/2006/birken/README.md
@@ -41,7 +41,7 @@ A: Electronic Design Automation - Mechanical Abstract Machine Emulator
What is TOFU? It's not a veggie friendly food, nor it is
[Verilog](https://en.wikipedia.org/wiki/Verilog) or
[VHDL](https://en.wikipedia.org/wiki/VHDL) It is not even
-[Pascal](https://en.wikipedia.org/wiki/Pascal_(programming_language))!
+[Pascal](https://en.wikipedia.org/wiki/Pascal_(programming_language))!
NOTE: On some systems, `file(1)` claims one of the `.tofu` files is Pascal
source. :-)
@@ -66,7 +66,7 @@ circuits)? This program is my tribute to the early computer pioneers like
tool designed to introduce students to digital circuit theory using technology
that was considered state of the art in the 1940s! To enable you to fully
understand the capabilities of this circuit simulator, I have included a 55 page
-manual ([info.pdf](info.pdf)) in the info portion of the entry submission.
+manual, [info.pdf](info.pdf), in the info portion of the entry submission.
The primary obfuscation is the data structure chosen for parsing the
input file and for executing the simulation. Oh man... coding that
diff --git a/2006/birken/index.html b/2006/birken/index.html
index 24cbad2b4..53ff0f8c4 100644
--- a/2006/birken/index.html
+++ b/2006/birken/index.html
@@ -432,7 +432,7 @@ circuits)? This program is my tribute to the early computer pioneers like
tool designed to introduce students to digital circuit theory using technology
that was considered state of the art in the 1940s! To enable you to fully
understand the capabilities of this circuit simulator, I have included a 55 page
-manual (info.pdf) in the info portion of the entry submission.
+manual, info.pdf, in the info portion of the entry submission.
The primary obfuscation is the data structure chosen for parsing the
input file and for executing the simulation. Oh man… coding that
data structure gave me such a bad headache. But, I figure, who needs
diff --git a/2006/meyer/README.md b/2006/meyer/README.md
index 32a0e64f9..c01e2c009 100644
--- a/2006/meyer/README.md
+++ b/2006/meyer/README.md
@@ -89,10 +89,10 @@ include:
- constructors (invoked by the new operator).
- new operators (every class gets its own new operator at compile time).
- virtual method tables (all the virtual method tables have been combined to a
-single [vtable](https://en.wikipedia.org/wiki/Virtual_method_table)).
+single [vtable](https://en.wikipedia.org/wiki/Virtual_method_table) table).
- runtime method binding.
-- [inheritance](https://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming))
-and [polymorphism](https://en.wikipedia.org/wiki/Polymorphism_(computer_science)).
+- [inheritance](https://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming))
+and [polymorphism](https://en.wikipedia.org/wiki/Polymorphism_(computer_science)).
It is left as an exercise to the reader to find a corresponding
implementation in a popular object-oriented programming language.
diff --git a/2006/meyer/index.html b/2006/meyer/index.html
index a89086fc4..42d4041f6 100644
--- a/2006/meyer/index.html
+++ b/2006/meyer/index.html
@@ -450,7 +450,7 @@ include:
constructors (invoked by the new operator).
new operators (every class gets its own new operator at compile time).
virtual method tables (all the virtual method tables have been combined to a
-single vtable).
diff --git a/2006/monge/README.md b/2006/monge/README.md
index a23c572c7..62d035da0 100644
--- a/2006/monge/README.md
+++ b/2006/monge/README.md
@@ -135,7 +135,7 @@ separated list of assignments to do once per pixel, and the second a semicolon
separated list of assignments and conditions that will be executed (and
conditions checked) for each iteration (up to the maximum). Using the left and
right mouse buttons you will be able to zoom in and out (a la
-[XaoS](https://github.com/xaos-project/XaoS)), the zooming algorithm is a bit
+[XaoS](https://github.com/xaos-project/XaoS) project), the zooming algorithm is a bit
slower than `XaoS`'s but it should give slightly better results.
Formulas can use all `a-z` (lowercase) variables, and the special
diff --git a/2006/monge/index.html b/2006/monge/index.html
index c4fafcdf3..b6fc01b69 100644
--- a/2006/monge/index.html
+++ b/2006/monge/index.html
@@ -468,7 +468,7 @@ separated list of assignments to do once per pixel, and the second a semicolon
separated list of assignments and conditions that will be executed (and
conditions checked) for each iteration (up to the maximum). Using the left and
right mouse buttons you will be able to zoom in and out (a la
-XaoS), the zooming algorithm is a bit
+XaoS project), the zooming algorithm is a bit
slower than XaoS’s but it should give slightly better results.
Formulas can use all a-z (lowercase) variables, and the special
variables c and i are respectively set by default to the
diff --git a/2006/toledo2/README.md b/2006/toledo2/README.md
index 0042d36d7..70d8d679f 100644
--- a/2006/toledo2/README.md
+++ b/2006/toledo2/README.md
@@ -102,7 +102,7 @@ and a disk controller, just like at the start of the personal computers
revolution (circa 1975).
It needs an initial memory image to do something usable, so along with it you
-will find two files: ([C.BASIC](%%REPO_URL%%/2006/toledo2/C.BASIC) and [C.BIOS](%%REPO_URL%%/2006/toledo2/C.BIOS)). Rename
+will find two files: [C.BASIC](%%REPO_URL%%/2006/toledo2/C.BASIC) and [C.BIOS](%%REPO_URL%%/2006/toledo2/C.BIOS). Rename
[C.BASIC](%%REPO_URL%%/2006/toledo2/C.BASIC) to `C` (NOTE from the judges: running `make` will do this for
you), run the emulator, and et voila! you have the public domain Palo Alto [Tiny
BASIC](https://en.wikipedia.org/wiki/Tiny_BASIC) (by Li-Chen Wang), published in
diff --git a/2006/toledo2/index.html b/2006/toledo2/index.html
index 1b149ace8..9a01910b1 100644
--- a/2006/toledo2/index.html
+++ b/2006/toledo2/index.html
@@ -452,7 +452,7 @@ removes those files extracted from the KAYPROII.ZIP.
and a disk controller, just like at the start of the personal computers
revolution (circa 1975).
It needs an initial memory image to do something usable, so along with it you
-will find two files: (C.BASIC and C.BIOS). Rename
+will find two files: C.BASIC and C.BIOS. Rename
C.BASIC to C (NOTE from the judges: running make will do this for
you), run the emulator, and et voila! you have the public domain Palo Alto Tiny
BASIC (by Li-Chen Wang), published in
diff --git a/2006/toledo3/README.md b/2006/toledo3/README.md
index 7ba6d0c8f..a81a30264 100644
--- a/2006/toledo3/README.md
+++ b/2006/toledo3/README.md
@@ -82,7 +82,7 @@ a mistake and the computer surpasses you. ;)
### WHAT ABOUT THE ENGINE
Uses an [alpha-beta](https://en.wikipedia.org/wiki/Alpha_Beta) search up to a
-depth of 3+level [ply](https://en.wikipedia.org/wiki/Ply_(game_theory)),
+depth of 3+level [ply](https://en.wikipedia.org/wiki/Ply_(game_theory)),
extended with quiescence search, that helps playing strength, something around
1500 ELO (level 1) to 1700 ELO (level 3).
diff --git a/2011/blakely/README.md b/2011/blakely/README.md
index 7e1a4a79f..8333e3f18 100644
--- a/2011/blakely/README.md
+++ b/2011/blakely/README.md
@@ -33,7 +33,7 @@ threshold.
## Judges' remarks:
This program plays [Life](https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life)
-(see also [here](https://conwaylife.com)), computes Pi to 16 digits
+(see [here](https://conwaylife.com) also), computes Pi to 16 digits
if given its own source as input, and allows to check if your garden
is a [Garden of Eden](http://en.wikipedia.org/wiki/Garden_of_Eden_%28cellular_automaton%29), all in one source.
diff --git a/2011/blakely/index.html b/2011/blakely/index.html
index 9c74d7d30..346d52920 100644
--- a/2011/blakely/index.html
+++ b/2011/blakely/index.html
@@ -410,7 +410,7 @@ Location: GB - United Kingdom of Great
threshold.
Judges’ remarks:
This program plays Life
-(see also here), computes Pi to 16 digits
+(see here also), computes Pi to 16 digits
if given its own source as input, and allows to check if your garden
is a Garden of Eden, all in one source.
If you have enough time to spare, put the plan of your garden in a text file,
diff --git a/2011/dlowe/README.md b/2011/dlowe/README.md
index cd913e454..7427478cc 100644
--- a/2011/dlowe/README.md
+++ b/2011/dlowe/README.md
@@ -175,9 +175,9 @@ to help the IOCCC judges. Here's to shorter, more frequent contests!
### Description
-This is a multilayer [perceptron](https://en.wikipedia.org/wiki/Perceptron) (a
+This is a multilayer [perceptron](https://en.wikipedia.org/wiki/Perceptron), a
[feedforward artificial neural
-network](https://en.wikipedia.org/wiki/Feedforward_neural_network))
+network](https://en.wikipedia.org/wiki/Feedforward_neural_network),
which can be trained, using on-line
[backpropagation](https://en.wikipedia.org/wiki/Backpropagation), to classify input files.
diff --git a/2011/dlowe/index.html b/2011/dlowe/index.html
index d2dbcfd24..0cf7e1572 100644
--- a/2011/dlowe/index.html
+++ b/2011/dlowe/index.html
@@ -490,9 +490,9 @@ Data that XORs to 1
intelligent judging tool
to help the IOCCC judges. Here’s to shorter, more frequent contests!
It has a fixed topology of 2^16 input neurons, 6 hidden neurons and 1 output
diff --git a/2011/fredriksson/README.md b/2011/fredriksson/README.md
index 9c04ae94d..49cf10318 100644
--- a/2011/fredriksson/README.md
+++ b/2011/fredriksson/README.md
@@ -75,8 +75,8 @@ This version of `grep` recognizes two more options, not present in normal
`grep` implementations:
* `-kN` Permit `N` insertions, deletions or mismatches of characters in the
- matches (aka
- [edit-distance](https://en.wikipedia.org/wiki/Edit_distance)). E.g.
+ matches, aka
+ [edit-distance](https://en.wikipedia.org/wiki/Edit_distance). E.g.,
"`obfuscated`" matches "`obfuscation`"
with one deletion and two mismatches. Likewise, "`obfuscate`" and
"`oversimplify`" match with 7
@@ -119,7 +119,7 @@ expressions by putting `]` as the first character, and putting `-` last.
### Other uses
-* You can use this in place of [cat](https://en.wikipedia.org/wiki/Cat_(Unix)).
+* You can use this in place of [cat](https://en.wikipedia.org/wiki/Cat_(Unix)).
Just say
diff --git a/2011/fredriksson/index.html b/2011/fredriksson/index.html
index 601eb4bbc..cd8d5a425 100644
--- a/2011/fredriksson/index.html
+++ b/2011/fredriksson/index.html
@@ -436,8 +436,8 @@ The options -i, -c, -v and -ngrep
implementations:
-kN Permit N insertions, deletions or mismatches of characters in the
-matches (aka
-edit-distance). E.g.
+matches, aka
+edit-distance. E.g.,
“obfuscated” matches “obfuscation”
with one deletion and two mismatches. Likewise, “obfuscate” and
“oversimplify” match with 7
diff --git a/2011/richards/README.md b/2011/richards/README.md
index 0a34636f5..95aca8882 100644
--- a/2011/richards/README.md
+++ b/2011/richards/README.md
@@ -33,7 +33,7 @@ For more detailed information see [2011 richards bugs](../../bugs.html#2011_rich
## Judges' remarks:
Oh no, yet another
-[dc](https://en.wikipedia.org/wiki/Dc_(computer_program))-style calculator? (see
+[dc](https://en.wikipedia.org/wiki/Dc_(computer_program))-style calculator? (see
[2000/dlowe](../../2000/dlowe/index.html) using an embedded Perl interpreter and deemed `Worst
Abuse of the Rules`). Well, this one does it (expression calculation, that is,
not the rule abuse) in a different way. The author claims that his calculator
@@ -44,7 +44,7 @@ without attempting to unravel the source?
## Author's remarks:
This is an implementation of the classic UNIX
-[dc](https://en.wikipedia.org/wiki/Dc_(computer_program)) command, the
+[dc](https://en.wikipedia.org/wiki/Dc_(computer_program)) command, the
[reverse Polish](https://en.wikipedia.org/wiki/Reverse_Polish_notation)
calculator. Actually it's a pretty bad implementation, since it only implements
32-bit integers (well, `sizeof(int)`-sized integers). It only implements the
diff --git a/2011/toledo/README.md b/2011/toledo/README.md
index c91171a96..a18f2c427 100644
--- a/2011/toledo/README.md
+++ b/2011/toledo/README.md
@@ -18,7 +18,7 @@ Windows](%%REPO_URL%%/2011/toledo/toledo.alt2.c). See [Alternate code](#alternat
```
-## Alternate code:
+## Alternate code
The first alt version, [toledo.alt.c](%%REPO_URL%%/2011/toledo/toledo.alt.c), allows you to reconfigure
the controls and the dimensions more easily.
@@ -191,7 +191,7 @@ Not really, just kidding :D
* It is written in the only true C: K&R, and no, that doesn't mean
Katherine & Rose.
* Vectorial scalable graphics: do you want a bigger viewport? Change variables
- `M` and `N` (see the [alternate code](#alternate-code)).
+ `M` and `N` (see the [alternate](#alternate-code) code).
* Half of the program is formatted as 3D cube. View with tabs at 8 columns and a
square font.
* The other half of the program is unprintable source code, so no typing from
diff --git a/2011/toledo/index.html b/2011/toledo/index.html
index 84c29c830..82a696171 100644
--- a/2011/toledo/index.html
+++ b/2011/toledo/index.html
@@ -405,7 +405,7 @@ controls and size and Alternate code below.
To use:
./toledo
-
Alternate code:
+
Alternate code
The first alt version, toledo.alt.c, allows you to reconfigure
the controls and the dimensions more easily.
The second version, toledo.alt2.c, should work for Windows but
@@ -527,7 +527,7 @@ x86-64 512 MB).
It is written in the only true C: K&R, and no, that doesn’t mean
Katherine & Rose.
Vectorial scalable graphics: do you want a bigger viewport? Change variables
-M and N (see the alternate code).
Half of the program is formatted as 3D cube. View with tabs at 8 columns and a
square font.
The other half of the program is unprintable source code, so no typing from
diff --git a/2011/zucker/README.md b/2011/zucker/README.md
index eab5c9ab7..54c8b70eb 100644
--- a/2011/zucker/README.md
+++ b/2011/zucker/README.md
@@ -156,7 +156,7 @@ direction and surface normal.
#### Further details (contains spoilers):
The program is not quite a traditional [ray
-tracer](https://en.wikipedia.org/wiki/Ray_tracing_(graphics)), but a "[sphere
+tracer](https://en.wikipedia.org/wiki/Ray_tracing_(graphics)), but a "[sphere
tracer](sphere-tracing.pdf)" which uses distance fields to encode proximity to
objects in the scene. Using sphere tracing to compute visibility instead of
analytic ray tracing provides two advantages: first, it greatly eases the
diff --git a/2012/README.md b/2012/README.md
index d0a7669c1..ba1e6fd17 100644
--- a/2012/README.md
+++ b/2012/README.md
@@ -56,7 +56,7 @@ But don't ignore the other winning entries! There are games, utilities,
eye candy, calculators and graphical tools to explore.
This year, Yusuke Endoh won with two entries, one of which
-([endoh1](endoh1/index.html)) won the special Honorable mention award. Eight of
+([endoh1](endoh1/index.html) entry) won the special Honorable mention award. Eight of
the winning entries were from people who won in previous years.
This year we had a number of authors from Asia. We saw our second
diff --git a/2012/blakely/README.md b/2012/blakely/README.md
index ddb3b3359..b4fc79669 100644
--- a/2012/blakely/README.md
+++ b/2012/blakely/README.md
@@ -35,7 +35,7 @@ For more detailed information see [2012 blakely bugs](../../bugs.html#2012_blake
Several IOCCC themes ([RPN
calculator](https://en.wikipedia.org/wiki/Reverse_Polish_notation), animated
[GIF](https://en.wikipedia.org/wiki/GIF) generator, [ray
-tracing](https://en.wikipedia.org/wiki/Ray_tracing_(graphics))) in one package!
+tracing](https://en.wikipedia.org/wiki/Ray_tracing_(graphics)) graphics) in one package!
Very impressive!
The checkerboard pattern in the output can be broken. Could you figure out how?
@@ -49,7 +49,7 @@ Larger GIF files confuse some image viewers.
This program renders a generic
[RPN](https://en.wikipedia.org/wiki/Reverse_Polish_notation) expression in
-[ray-traced](https://en.wikipedia.org/wiki/Ray_tracing_(graphics)) animated
+[ray-traced](https://en.wikipedia.org/wiki/Ray_tracing_(graphics)) animated
[GIF](https://en.wikipedia.org/wiki/GIF) form. The expression in spatial
variables `x` and `y` is specified on the command-line with the required
resolution, and an animated GIF showing a fly-around of the resulting surface is
diff --git a/2012/blakely/index.html b/2012/blakely/index.html
index 9e5f79962..4f9cea72a 100644
--- a/2012/blakely/index.html
+++ b/2012/blakely/index.html
@@ -411,7 +411,7 @@ Location: GB - United Kingdom of Great
Several IOCCC themes (RPN
calculator, animated
GIF generator, ray
-tracing) in one package!
+tracing graphics) in one package!
Very impressive!
The checkerboard pattern in the output can be broken. Could you figure out how?
Larger GIF files confuse some image viewers.
diff --git a/2012/deckmyn/README.md b/2012/deckmyn/README.md
index a16ebfc04..af2e1b4c6 100644
--- a/2012/deckmyn/README.md
+++ b/2012/deckmyn/README.md
@@ -108,8 +108,8 @@ be `"`` ` ``cat deckmyn.c`` ` ``"`.
The second command line argument is the music itself. This is, again, a string,
not a file name. All music signs are entered as tokens of exactly 3 characters.
The code is very sensitive to bad spacing! So for instance, if you use a file to
-write the music (e.g. [example\_greensleeves](%%REPO_URL%%/2012/deckmyn/example_greensleeves)), you should
-keep in mind that newline is also a character!
+write the music (e.g., [example\_greensleeves](%%REPO_URL%%/2012/deckmyn/example_greensleeves) file),
+you should keep in mind that newline is also a character!
### Internals
diff --git a/2012/deckmyn/index.html b/2012/deckmyn/index.html
index 25b378769..e6709c805 100644
--- a/2012/deckmyn/index.html
+++ b/2012/deckmyn/index.html
@@ -452,8 +452,8 @@ be "``cat deckmyn.c``".
The second command line argument is the music itself. This is, again, a string,
not a file name. All music signs are entered as tokens of exactly 3 characters.
The code is very sensitive to bad spacing! So for instance, if you use a file to
-write the music (e.g. example_greensleeves), you should
-keep in mind that newline is also a character!
+write the music (e.g., example_greensleeves file),
+you should keep in mind that newline is also a character!
Internals
To minimise the memory footprint, this program has no variable declarations at
all, except for the arguments to main(). The only available memory space is
diff --git a/2012/endoh1/README.md b/2012/endoh1/README.md
index 3292f7eaa..23b69ec41 100644
--- a/2012/endoh1/README.md
+++ b/2012/endoh1/README.md
@@ -291,8 +291,8 @@ casting) it to an integer-type variable.
[pour-out.txt](%%REPO_URL%%/2012/endoh1/pour-out.txt) pours you a cup of tea.
-[tanada.txt](%%REPO_URL%%/2012/endoh1/tanada.txt) simulates "Terrace farming". ("Tanada" means a "[terraced rice
-fields](https://en.wikipedia.org/wiki/Terrace_(earthworks))" in Japanese.)
+[tanada.txt](%%REPO_URL%%/2012/endoh1/tanada.txt) simulates "Terrace farming". ("Tanada" means a
+"[terraced rice](https://en.wikipedia.org/wiki/Terrace_(earthworks) fields)" in Japanese.)
[clock.txt](%%REPO_URL%%/2012/endoh1/clock.txt) is a "water" clock created by HAMANO Tsukasa.
diff --git a/2012/endoh1/index.html b/2012/endoh1/index.html
index c36e60c6d..2814a08bc 100644
--- a/2012/endoh1/index.html
+++ b/2012/endoh1/index.html
@@ -570,8 +570,8 @@ casting) it to an integer-type variable.
logo.txt is a source of the logo in this remark file.
column.txt is a water column collapse, which is a popular demo of SPH.
clock.txt is a “water” clock created by HAMANO Tsukasa.
Other *.txt files are from the judges.
endoh1_color.c is a variant that shows the density by using terminal 256
diff --git a/2012/endoh2/README.md b/2012/endoh2/README.md
index 295aa608c..ae8abb594 100644
--- a/2012/endoh2/README.md
+++ b/2012/endoh2/README.md
@@ -34,7 +34,7 @@ and:
## Judges' remarks:
A
-[pi](https://en.wikipedia.org/wiki/Pi)/[e](https://en.wikipedia.org/wiki/E_(mathematical_constant))
+[pi](https://en.wikipedia.org/wiki/Pi)/[e](https://en.wikipedia.org/wiki/E_(mathematical_constant))
printing quasi-[quine](https://en.wikipedia.org/wiki/Quine_(computing) in [ASCII
art](https://en.wikipedia.org/wiki/ASCII_art) with a compressed font in it; what
else to wish for in this program? [Virtual
@@ -47,7 +47,7 @@ Yeah, "Again". Sorry. But I don't feel guilty or uncomfortable.
This entry is based on 'over-used themes' such as self reproducing
program and [pi](https://en.wikipedia.org/wiki/Pi) or
-[e](https://en.wikipedia.org/wiki/E_(mathematical_constant))) computation. I
+[e](https://en.wikipedia.org/wiki/E_(mathematical_constant() computation. I
know you're tired of them.
But have you ever seen them **all-in-one**?
@@ -65,18 +65,18 @@ This program generates a new program in the shape of the Greek letter
One more thing... When you give a command line argument `e` to the
first program, the generated one will compute [Napier's
-constant](https://en.wikipedia.org/wiki/E_(mathematical_constant)))
+constant](https://en.wikipedia.org/wiki/E_(mathematical_constant))
rather than pi.
### Obfuscation
This program itself is in the shape of a
-[spigot](https://en.wikipedia.org/wiki/Tap_(valve)). This is derived as an
+[spigot](https://en.wikipedia.org/wiki/Tap_(valve)). This is derived as an
analogy with [spigot algorithm](https://en.wikipedia.org/wiki/Spigot_algorithm)
which infinitely computes the value of a mathematical constant such as
[pi](https://en.wikipedia.org/wiki/Pi) or
-[e](https://en.wikipedia.org/wiki/E_(mathematical_constant)).
+[e](https://en.wikipedia.org/wiki/E_(mathematical_constant)).
The two sets of programs, `314*.c` and `271*.c`, are almost the same
except their shape and constant computational part. I tailored the
@@ -85,7 +85,7 @@ tweaking the computational order and adding meaningless code fragments.
On the other hand, to make it fit inside one screen (80 x 25), my program is
shortened properly, more than it looks. (As you may know,
-[quines](https://en.wikipedia.org/wiki/Quine_(computing)) need to make its
+[quines](https://en.wikipedia.org/wiki/Quine_(computing)) need to make its
program size doubled.) For example, this program involves 3x5 bitmap font data
of ten characters (`0` -- `9`), as just 20 bytes: `G1%xJ{;Q7wunmuGuu%uu`. We
can decode character `n` as `275*s[n+10] - 8*s[n] - 8`. I solved the system of
diff --git a/2012/endoh2/index.html b/2012/endoh2/index.html
index f39f880ef..02f9f2081 100644
--- a/2012/endoh2/index.html
+++ b/2012/endoh2/index.html
@@ -421,7 +421,7 @@ machine emulation?
Yeah, “Again”. Sorry. But I don’t feel guilty or uncomfortable.
This entry is based on ‘over-used themes’ such as self reproducing
program and pi or
-e) computation. I
+e computation. I
know you’re tired of them.
But have you ever seen them all-in-one?
What it is
@@ -436,7 +436,7 @@ know you’re tired of them.
One more thing… When you give a command line argument e to the
first program, the generated one will compute Napier’s
-constant)
+constant
rather than pi.
Obfuscation
This program itself is in the shape of a
diff --git a/2012/hamano/README.md b/2012/hamano/README.md
index 0526f0d9a..028aa86b8 100644
--- a/2012/hamano/README.md
+++ b/2012/hamano/README.md
@@ -65,7 +65,7 @@ confused.
The results can be viewed with Acrobat Reader,
[evince](http://en.wikipedia.org/wiki/Evince) and Apple's
-[Preview](https://en.wikipedia.org/wiki/Preview_(macOS)).
+[Preview](https://en.wikipedia.org/wiki/Preview_(macOS)).
The updated version can also be viewed using Ghostscript.
diff --git a/2012/index.html b/2012/index.html
index c831b3729..0fe8f7856 100644
--- a/2012/index.html
+++ b/2012/index.html
@@ -421,7 +421,7 @@ very likely say wow as we did!
But don’t ignore the other winning entries! There are games, utilities,
eye candy, calculators and graphical tools to explore.
This year, Yusuke Endoh won with two entries, one of which
-(endoh1) won the special Honorable mention award. Eight of
+(endoh1 entry) won the special Honorable mention award. Eight of
the winning entries were from people who won in previous years.
This year we had a number of authors from Asia. We saw our second
authors from China and first from Korea. We are pleased to see
diff --git a/2012/omoikane/README.md b/2012/omoikane/README.md
index 490f9c171..c5adcf9a2 100644
--- a/2012/omoikane/README.md
+++ b/2012/omoikane/README.md
@@ -153,7 +153,7 @@ Output code has these features:
* Uses a fairly efficient encoding scheme, better than `uuencode` for
files larger than ~13K, and better than `base64` for files larger
than 20K.
-* Encryption with [ISAAC](https://en.wikipedia.org/wiki/ISAAC_(cipher)), a
+* Encryption with [ISAAC](https://en.wikipedia.org/wiki/ISAAC_(cipher)), a
cryptographically secure pseudorandom number generator.
* Trivial 3 language polyglot.
diff --git a/2012/tromp/README.md b/2012/tromp/README.md
index 928b6030d..94a17b119 100644
--- a/2012/tromp/README.md
+++ b/2012/tromp/README.md
@@ -71,8 +71,8 @@ representation in lambda calculus), and translates the evaluated result back
into a stream of bits to be output.
Lambda is encoded as 00, application as 01, and the variable bound by the `n`th
-enclosing lambda (denoted `n` in so-called [De Bruijn
-notation](https://en.wikipedia.org/wiki/De_Bruijn_notation)) as `1^{n}0`.
+enclosing lambda (denoted `n` in so-called [De Bruijn](https://en.wikipedia.org/wiki/De_Bruijn_notation)
+notation) as `1^{n}0`.
That's all there is to
[BLC](https://tromp.github.io/cl/Binary_lambda_calculus.html)!
@@ -110,8 +110,8 @@ The size of the term space is fixed at compile time with `-DA`.
### A half byte `cat`
-The shortest (closed) lambda calculus term is `\x x (\ 1` in [De Bruijn
-notation](https://en.wikipedia.org/wiki/De_Bruijn_notation)) which is the
+The shortest (closed) lambda calculus term is `\x x (\ 1` in
+[De Bruijn](https://en.wikipedia.org/wiki/De_Bruijn_notation) notation which is the
identity function. When its encoding `0010` is fed into the universal machine,
it will simply copy the input to the output (well, not that simply, since each
byte is smashed to bits and rebuilt from scratch). Voila: a half byte cat:
diff --git a/2012/tromp/index.html b/2012/tromp/index.html
index 4144acef1..c3ce046cf 100644
--- a/2012/tromp/index.html
+++ b/2012/tromp/index.html
@@ -435,8 +435,8 @@ the remainder of input (translated to a lazy list of
representation in lambda calculus), and translates the evaluated result back
into a stream of bits to be output.
Lambda is encoded as 00, application as 01, and the variable bound by the nth
-enclosing lambda (denoted n in so-called De Bruijn
-notation) as 1^{n}0.
+enclosing lambda (denoted n in so-called De Bruijn
+notation) as 1^{n}0.
That’s all there is to
BLC!
For example the encoding of lambda term S = \x \y \z (x z) (y z),
@@ -459,8 +459,8 @@ bit of input, and using characters 0 and 1 for output.
1,2,3,4,8,9: result not in list form
The size of the term space is fixed at compile time with -DA.
A half byte cat
-
The shortest (closed) lambda calculus term is \x x (\ 1 in De Bruijn
-notation) which is the
+
The shortest (closed) lambda calculus term is \x x (\ 1 in
+De Bruijn notation which is the
identity function. When its encoding 0010 is fed into the universal machine,
it will simply copy the input to the output (well, not that simply, since each
byte is smashed to bits and rebuilt from scratch). Voila: a half byte cat:
diff --git a/2012/zeitak/README.md b/2012/zeitak/README.md
index 475d10ba1..48c68a1fe 100644
--- a/2012/zeitak/README.md
+++ b/2012/zeitak/README.md
@@ -31,7 +31,7 @@ will not detect multiple issues.
## Alternate code:
-The alternate code, [zeitak.alt.c](z%%REPO_URL%%/2012/zeitak/eitak.alt.c), is a version that was slightly
+The alternate code, [zeitak.alt.c](%%REPO_URL%%/2012/zeitak/zeitak.alt.c), is a version that was slightly
deobfuscated by the author. You may find reading it helpful in your attempt to
understand this extremely subtle entry.
diff --git a/2012/zeitak/index.html b/2012/zeitak/index.html
index 6a61ed06c..204e171bd 100644
--- a/2012/zeitak/index.html
+++ b/2012/zeitak/index.html
@@ -411,7 +411,7 @@ text files that are not code.
NOTE: the program prints an error and exits on the first nesting error so it
will not detect multiple issues.
Alternate code:
-
The alternate code, zeitak.alt.c, is a version that was slightly
+
The alternate code, zeitak.alt.c, is a version that was slightly
deobfuscated by the author. You may find reading it helpful in your attempt to
understand this extremely subtle entry.
Alternate build:
diff --git a/2013/birken/README.md b/2013/birken/README.md
index 95ef510b2..d8399a8fc 100644
--- a/2013/birken/README.md
+++ b/2013/birken/README.md
@@ -177,8 +177,8 @@ would not be necessary:
For reference, the names of the 7
[tetriminos](https://en.wikipedia.org/wiki/Tetromino) (the game pieces or
-actually a kind of geometric shape used in
-[Tetris](https://en.wikipedia.org/wiki/Tetris)) appear in the table below.
+actually a kind of geometric shape used in the
+[Tetris](https://en.wikipedia.org/wiki/Tetris) game) appear in the table below.
Single Square Emitters
For reference, the names of the 7
tetriminos (the game pieces or
-actually a kind of geometric shape used in
-Tetris) appear in the table below.
+actually a kind of geometric shape used in the
+Tetris game) appear in the table below.
@@ -620,7 +620,7 @@ represented using ANSI escape sequences.
rate in which the terminal application receives and displays the ANSI
escape sequences.
To slow down the output programmatically, introduce a delay immediately after the
-call to fflush(3) (N.B: see birken.alt.c).
+call to fflush(3) (N.B: see birken.alt.c source).
IOCCC Size Tool Bug
This program demonstrates how to exploit a bug in IOCCC size tool version
2013-07-30-v17. The first line of the program is reproduced below.
diff --git a/2013/cable3/README.md b/2013/cable3/README.md
index 45d07c40b..f3b2bb231 100644
--- a/2013/cable3/README.md
+++ b/2013/cable3/README.md
@@ -221,7 +221,7 @@ the `fd.img` provided, which is a FreeDOS boot disk.
Before running the emulator on a Unix-type system, `stty` needs to be used to
put the keyboard into raw mode (and afterwards it needs to be put back to
cooked). So, run the emulator using something like this script (provided as
-[cable3.sh](%%REPO_URL%%/2013/cable3/cable3.sh)):
+the [cable3.sh](%%REPO_URL%%/2013/cable3/cable3.sh) file):
```
stty cbreak raw -echo min 0
@@ -394,7 +394,7 @@ disks (18 sectors per track, 2 heads) and 720KB disks (9 sectors per track, 2
heads).
If you want to install your own software from floppy images (downloaded from
-e.g. [Vetusware](https://vetusware.com)), the easiest way to "change disks" is
+e.g., vetusware.com at one time), the easiest way to "change disks" is
to copy each disk image in turn over the floppy image file you specify on the
command line. Don't forget to put your original boot disk back at the end!
diff --git a/2013/cable3/index.html b/2013/cable3/index.html
index b080cc5b6..228669602 100644
--- a/2013/cable3/index.html
+++ b/2013/cable3/index.html
@@ -547,7 +547,7 @@ the fd.img provided, which is a FreeDOS boot disk.
Before running the emulator on a Unix-type system, stty needs to be used to
put the keyboard into raw mode (and afterwards it needs to be put back to
cooked). So, run the emulator using something like this script (provided as
-cable3.sh):
stty cbreak raw -echo min 0
./cable3 bios fd.img
stty cooked echo
@@ -674,7 +674,7 @@ shutting down the terminal.
disks (18 sectors per track, 2 heads) and 720KB disks (9 sectors per track, 2
heads).
If you want to install your own software from floppy images (downloaded from
-e.g. Vetusware), the easiest way to “change disks” is
+e.g., vetusware.com at one time), the easiest way to “change disks” is
to copy each disk image in turn over the floppy image file you specify on the
command line. Don’t forget to put your original boot disk back at the end!
Hard disk support
diff --git a/2013/endoh4/README.md b/2013/endoh4/README.md
index 769500e20..4955c32f9 100644
--- a/2013/endoh4/README.md
+++ b/2013/endoh4/README.md
@@ -154,7 +154,7 @@ The `solids` directory includes various solid data:
I created the files by using the POV-Ray scripts
([1](http://en.wikipedia.org/wiki/File:Poly.pov) and
-[2](http://en.wikipedia.org/wiki/User:AndrewKepert/poly.pov)) in Wikipedia.
+[2](http://en.wikipedia.org/wiki/User:AndrewKepert/poly.pov) in Wikipedia.
They are copyrighted in CC BY-SA 3.0 by "User:Cyp" and "User:AndrewKepert".
diff --git a/2013/endoh4/index.html b/2013/endoh4/index.html
index d2f1574c1..f58c0767f 100644
--- a/2013/endoh4/index.html
+++ b/2013/endoh4/index.html
@@ -483,7 +483,7 @@ So, try:
I created the files by using the POV-Ray scripts
(1 and
-2) in Wikipedia.
+2 in Wikipedia.
They are copyrighted in CC BY-SA 3.0 by “User:Cyp” and “User:AndrewKepert”.
@@ -258,8 +258,8 @@ format earlier in the source.)
ternary operators, and so on.
* Huffman coding.
* Base-85 because high bits are frowned upon.
-* Mixed radix encoding to game iocccsize. From a past entry
-([2018/bellard](../../2018/bellard/index.html)), it seems 9 11 12 32 are the only
+* Mixed radix encoding to game iocccsize. From a past entry,
+[2018/bellard](../../2018/bellard/index.html), it seems 9 11 12 32 are the only
whitespace octets that may appear verbatim in string literals.
* Choosing what to encode in Huffman/base-85 and what to encode in mixed radix
was a delicate balancing act. In the end, I only had a few bytes to spare, which
@@ -267,7 +267,7 @@ I spent on gratuitous confusion.
* The effects of some functions depend on the order their arguments are
evaluated, yet the program works either way. Why?
* Ugly macros for the runtime system's jump table for lazy reduction. A previous
-entry ([2013/endoh1](../../2013/endoh1/index.html)) has a cuter solution, which I
+entry, [2013/endoh1](../../2013/endoh1/index.html), has a cuter solution, which I
avoid because of originality concerns and also because my combinators are
compressed.
* Relies on the inability of C comments to nest.
diff --git a/2019/lynn/index.html b/2019/lynn/index.html
index bdda752fc..76c976c72 100644
--- a/2019/lynn/index.html
+++ b/2019/lynn/index.html
@@ -464,8 +464,8 @@ of the characters a and b that contain an even number
A GHC wrapper is provided:
ghc ghclol.hs
Strongly-connected components:
-
See scc.hs (and its GHC wrapper ghcscc.hs) for an elegant
-way to print the strongly-connected components of a graph in reverse topological
+
See scc.hs, and its GHC wrapper ghcscc.hs,
+for an elegant way to print the strongly-connected components of a graph in reverse topological
order.
(./prog < scc.hs ; cat prog.c) > scc.c
It expects the input to be in a similar format as a previous entry
@@ -545,8 +545,8 @@ format earlier in the source.)
ternary operators, and so on.
Huffman coding.
Base-85 because high bits are frowned upon.
-
Mixed radix encoding to game iocccsize. From a past entry
-(2018/bellard), it seems 9 11 12 32 are the only
+
Mixed radix encoding to game iocccsize. From a past entry,
+2018/bellard, it seems 9 11 12 32 are the only
whitespace octets that may appear verbatim in string literals.
Choosing what to encode in Huffman/base-85 and what to encode in mixed radix
was a delicate balancing act. In the end, I only had a few bytes to spare, which
@@ -554,7 +554,7 @@ I spent on gratuitous confusion.
The effects of some functions depend on the order their arguments are
evaluated, yet the program works either way. Why?
Ugly macros for the runtime system’s jump table for lazy reduction. A previous
-entry (2013/endoh1) has a cuter solution, which I
+entry, 2013/endoh1, has a cuter solution, which I
avoid because of originality concerns and also because my combinators are
compressed.
Relies on the inability of C comments to nest.
diff --git a/2019/mills/README.md b/2019/mills/README.md
index 3563e7bd7..bc04b3f53 100644
--- a/2019/mills/README.md
+++ b/2019/mills/README.md
@@ -246,7 +246,7 @@ training loss will give you an idea of how well the network is learning and
can let you know if the network is [overfitting or underfitting][7].
As part of the training process, the data set (which for OMLET is the
-[Shakespeare.txt](Shakespeare.txt) file you gave on the command line) is divided into
+[Shakespeare.txt](Shakespeare.txt)file you gave on the command line) is divided into
[training and validation sets][8] (by default, 95% of the data is used for
training, but like most OMLET parameters, you can change this at compile-time).
diff --git a/2019/mills/index.html b/2019/mills/index.html
index 6310c0037..b85704ce1 100644
--- a/2019/mills/index.html
+++ b/2019/mills/index.html
@@ -578,7 +578,7 @@ validation loss is about 1.72. Comparing the validation loss and the
training loss will give you an idea of how well the network is learning and
can let you know if the network is overfitting or underfitting.
As part of the training process, the data set (which for OMLET is the
-Shakespeare.txt file you gave on the command line) is divided into
+Shakespeare.txtfile you gave on the command line) is divided into
training and validation sets (by default, 95% of the data is used for
training, but like most OMLET parameters, you can change this at compile-time).
At the end of the validation run, OMLET writes out a checkpoint file with a
diff --git a/2019/poikola/README.md b/2019/poikola/README.md
index c56691a8f..2ae8f3728 100644
--- a/2019/poikola/README.md
+++ b/2019/poikola/README.md
@@ -88,9 +88,9 @@ Do you have the time to see what this program does? Think again, come back and
try again.
Note that [2](https://t5k.org/curios/page.php/2.html) can be said to be the
-least [odd](https://en.wikipedia.org/wiki/Parity_(mathematics))
+least [odd](https://en.wikipedia.org/wiki/Parity_(mathematics))
[prime](https://en.wikipedia.org/wiki/Prime_number) because it is the greatest
-[even](https://en.wikipedia.org/wiki/Parity_(mathematics)) prime. Moreover `2`
+[even](https://en.wikipedia.org/wiki/Parity_(mathematics)) prime. Moreover `2`
can be also said to be the greatest odd prime because it is the least even
prime.
diff --git a/2020/README.md b/2020/README.md
index 7c3da9478..346c7c959 100644
--- a/2020/README.md
+++ b/2020/README.md
@@ -32,7 +32,7 @@ For some reason, this year's set of winning entries contains three nostalgic gam
[Asteroids (tsoj)](tsoj/index.html), [Minesweeper (endoh1)](endoh1/index.html),
and [Snake (ferguson1)](ferguson1/index.html).
-An entry ([kurdyukov1](kurdyukov1/index.html)) pays homage to previous entry
+An entry, [kurdyukov1](kurdyukov1/index.html), pays homage to previous entry
[2015/hou](2015/hou/index.html).
...We'll stop spouting spoilers now. Have fun exploring all the entries!
diff --git a/2020/endoh1/README.md b/2020/endoh1/README.md
index 6a525da45..0b4ad195b 100644
--- a/2020/endoh1/README.md
+++ b/2020/endoh1/README.md
@@ -54,7 +54,7 @@ Use `prog.alt` as you would `prog` above.
## Judges' remarks:
When playing
-[Minesweeper](https://en.wikipedia.org/wiki/Minesweeper_(video_game)), a
+[Minesweeper](https://en.wikipedia.org/wiki/Minesweeper_(video_game)), a
misclick might ruin a game, so why not leave the routine to the computer? This
program automatically uncovers mines according to several rules, and leaves
guessing (and applying the most straightforward of the rules -- just for fun,
@@ -216,14 +216,14 @@ There are mines in a cell whose "priorities-of-each-cell" is less than
### Bug fixes and Credits
-The judges pointed out a bug of the original version that I submitted
-([prog.alt.c](%%REPO_URL%%/2020/endoh1/prog.alt.c)). Because this program does not provide a feature to
+The judges pointed out a bug of the original version that I submitted,
+[prog.alt.c](%%REPO_URL%%/2020/endoh1/prog.alt.c). Because this program does not provide a feature to
flag unprobed cells manually, we can do nothing if the number of unprobed cells
are equal to the number of mines remaining; [unwinnable.txt](unwinnable.txt) is
an example for such a case.
Thus, I implemented an additional rule to flag all unprobed cells in such a case
-into the final version ([prog.c](%%REPO_URL%%/2020/endoh1/prog.c)).
+into the final version: [prog.c](%%REPO_URL%%/2020/endoh1/prog.c).
[Ilya Kurdyukov](../../authors.html#Ilya_Kurdyukov) also pointed out a warning
"ignoring return value of 'fscanf'" only when `-O3` is used. So I changed the
diff --git a/2020/endoh1/index.html b/2020/endoh1/index.html
index 6f8fe8927..11c19d805 100644
--- a/2020/endoh1/index.html
+++ b/2020/endoh1/index.html
@@ -518,13 +518,13 @@ Analyze the code.
There are mines in a cell whose “priorities-of-each-cell” is less than
“number-of-mines”. (But the mine in the first-clicked cell is removed.)
Bug fixes and Credits
-
The judges pointed out a bug of the original version that I submitted
-(prog.alt.c). Because this program does not provide a feature to
+
The judges pointed out a bug of the original version that I submitted,
+prog.alt.c. Because this program does not provide a feature to
flag unprobed cells manually, we can do nothing if the number of unprobed cells
are equal to the number of mines remaining; unwinnable.txt is
an example for such a case.
Thus, I implemented an additional rule to flag all unprobed cells in such a case
-into the final version (prog.c).
Ilya Kurdyukov also pointed out a warning
“ignoring return value of ‘fscanf’” only when -O3 is used. So I changed the
code a little to pretend to use the return value of fscanf(3).
diff --git a/2020/ferguson1/README.md b/2020/ferguson1/README.md
index 4d336bba4..9d2440d8d 100644
--- a/2020/ferguson1/README.md
+++ b/2020/ferguson1/README.md
@@ -129,7 +129,7 @@ Information about terminal capabilities, dimensions (setting and how to restore
Workarounds for various game *features*
-* [bugs.html]([bugs.html)
+* [bugs.html](bugs.html)
Bugs and things that might seem like bugs but are not.
@@ -522,7 +522,7 @@ The [prog.3.c](%%REPO_URL%%/2020/ferguson1/prog.3.c) is in a more artistic layou
additional obfuscation technique (see spoilers) but it also has more digraphs
and as the judges said they feel that digraphs are dated so that's probably why
they chose the first layout. The [prog.3-j.c](%%REPO_URL%%/2020/ferguson1/prog.3-j.c) version is
-[prog.3.c](%%REPO_URL%%%%REPO_URL%%/2020/ferguson1/prog.3.c) with a shorter `J` macro.
+[prog.3.c](%%REPO_URL%%/2020/ferguson1/prog.3.c) with a shorter `J` macro.
The prog.alt.c version is the one that allows for customising the bug colour and
it's used in both [snake-colours.sh][] and [play.sh][]. It also calls `erase()`
diff --git a/2020/ferguson1/index.html b/2020/ferguson1/index.html
index f9f287c92..e98ffa4d4 100644
--- a/2020/ferguson1/index.html
+++ b/2020/ferguson1/index.html
@@ -495,7 +495,7 @@ This game has a number of configurable pitfalls including walls and snakes.
Bugs and things that might seem like bugs but are not.
@@ -818,7 +818,7 @@ been warned.
additional obfuscation technique (see spoilers) but it also has more digraphs
and as the judges said they feel that digraphs are dated so that’s probably why
they chose the first layout. The prog.3-j.c version is
-prog.3.c with a shorter J macro.
+prog.3.c with a shorter J macro.
The prog.alt.c version is the one that allows for customising the bug colour and
it’s used in both snake-colours.sh and play.sh. It also calls erase()
first, clearing the screen, which the play.sh and snake-colours.sh scripts also
diff --git a/2020/ferguson2/README.md b/2020/ferguson2/README.md
index a15a89c98..d9600fc6b 100644
--- a/2020/ferguson2/README.md
+++ b/2020/ferguson2/README.md
@@ -288,7 +288,7 @@ After that you can input the string and it'll go from there.
BTW: There's a much more entertaining (and delicious) challenge or exercise in
[recode.html][] (if you're reading this on GitHub check the
[recode.html](recode.html) file instead); this involves [chocolate-cake.html][] (if
-on GitHub see [here](chocolate-cake.html)) though one might need a different kind
+on GitHub, see [here](chocolate-cake.html), though one might need a different kind
of exercise after taking up the challenge! :-) These however show the general
program as well as how to use the two winning entries of the [Morse
code](https://en.wikipedia.org/wiki/Morse_code) that I referred to earlier:
@@ -423,7 +423,7 @@ it prompts you for the settings
settings](https://en.wikipedia.org/wiki/Enigma_rotor_details#Ring_setting) and
positions,
[reflector](https://www.ciphermachinesandcryptology.com/en/enigmatech.htm#Reflector) and
-[plugboard pairs](https://www.cryptomuseum.com/crypto/enigma/i/sb.htm)),
+[plugboard pairs](https://www.cryptomuseum.com/crypto/enigma/i/sb.htm),
validating input as you go.
After that it prompts for text that you can pass to the Enigma simulator;
@@ -775,7 +775,7 @@ of the Wehrmacht rather than the Wehrmacht and the Kriegsmarine.
[Enigma Message Procedures][]: The [Heer][],
[Luftwaffe](https://en.wikipedia.org/wiki/Luftwaffe) and
-[Kriegsmarine](https://en.wikipedia.org/wiki/Kriegsmarine))
+[Kriegsmarine](https://en.wikipedia.org/wiki/Kriegsmarine)
[Enigma](https://en.wikipedia.org/wiki/Enigma_machine)
procedures.
diff --git a/2020/ferguson2/index.html b/2020/ferguson2/index.html
index fb4040863..cb9d1df6f 100644
--- a/2020/ferguson2/index.html
+++ b/2020/ferguson2/index.html
@@ -600,7 +600,7 @@ pairs.
BTW: There’s a much more entertaining (and delicious) challenge or exercise in
recode.html (if you’re reading this on GitHub check the
recode.html file instead); this involves chocolate-cake.html (if
-on GitHub see here) though one might need a different kind
+on GitHub, see here, though one might need a different kind
of exercise after taking up the challenge! :-) These however show the general
program as well as how to use the two winning entries of the Morse
code that I referred to earlier:
After that it prompts for text that you can pass to the Enigma simulator;
alternatively you can specify a file to read in.
@@ -952,7 +952,7 @@ Wehrmacht; when you see this you can read it as the Kriegsmarine versus the rest
of the Wehrmacht rather than the Wehrmacht and the Kriegsmarine.
Add code (to prog.c) that tries to determine possible decipherments based on
+
Add code, to prog.c, that tries to determine possible decipherments based on
a given crib (or set of cribs).
diff --git a/2020/ferguson2/recode.md b/2020/ferguson2/recode.md
index f8fb22658..30f6c06c3 100644
--- a/2020/ferguson2/recode.md
+++ b/2020/ferguson2/recode.md
@@ -550,7 +550,7 @@ delicious challenge).
# Example additions
-* Add code (to [prog.c](%%REPO_URL%%/2020/ferguson1/prog.c)) that tries to determine possible decipherments based on
+* Add code, to [prog.c](%%REPO_URL%%/2020/ferguson1/prog.c), that tries to determine possible decipherments based on
a given crib (or set of cribs).
diff --git a/2020/giles/README.md b/2020/giles/README.md
index 9d33dfad8..75b65caec 100644
--- a/2020/giles/README.md
+++ b/2020/giles/README.md
@@ -43,7 +43,7 @@ will be converted to the DTMF sound!
If the script [try.sh](%%REPO_URL%%/2020/giles/try.sh) did not play a WAV file, it means you do not have
SoX installed; see [FAQ 3.10: How do I compile and use an IOCCC entry that
-requires sound?](../../faq.html#sox)). In this case install it and try it again or
+requires sound?](../../faq.html#sox). In this case install it and try it again or
play the files `jenny.wav` and `ioccc28.wav` in a program that can play WAV
files.
diff --git a/2020/giles/index.html b/2020/giles/index.html
index 33fe29296..d8b9b4453 100644
--- a/2020/giles/index.html
+++ b/2020/giles/index.html
@@ -420,7 +420,7 @@ will be converted to the DTMF sound!
./prog 867-5309 > jenny.wav
If the script try.sh did not play a WAV file, it means you do not have
SoX installed; see FAQ 3.10: How do I compile and use an IOCCC entry that
-requires sound?). In this case install it and try it again or
+requires sound?. In this case install it and try it again or
play the files jenny.wav and ioccc28.wav in a program that can play WAV
files.
NOTE: the phone number of jenny.wav comes from
diff --git a/2020/index.html b/2020/index.html
index d5cc24ef0..01d703d6c 100644
--- a/2020/index.html
+++ b/2020/index.html
@@ -404,7 +404,7 @@ IOCCC list!
…We’ll stop spouting spoilers now. Have fun exploring all the entries!
Remarks on some of submissions that did not win
diff --git a/2020/otterness/README.md b/2020/otterness/README.md
index 96f99fd30..d34ef78b5 100644
--- a/2020/otterness/README.md
+++ b/2020/otterness/README.md
@@ -66,7 +66,7 @@ I found [here](http://www.kunstderfuge.com/beethoven/variae.htm#Symphonies).
However, as discussed under the [Limitations](#limitations) section below, not
all of them work correctly. I will admit to having used
`http://www.kunstderfuge.com/-/midi.asp?file=beethoven/symphony_6_1_(c)cvikl.mid`
-for most of my testing (see [cvikl.mid](%%REPO_URL%%/2020/otterness/cvikl.mid)).
+for most of my testing, see [cvikl.mid](%%REPO_URL%%/2020/otterness/cvikl.mid).
### Usage
diff --git a/2020/otterness/index.html b/2020/otterness/index.html
index 926901725..ef6554a25 100644
--- a/2020/otterness/index.html
+++ b/2020/otterness/index.html
@@ -432,7 +432,7 @@ I found he
However, as discussed under the Limitations section below, not
all of them work correctly. I will admit to having used
http://www.kunstderfuge.com/-/midi.asp?file=beethoven/symphony_6_1_(c)cvikl.mid
-for most of my testing (see cvikl.mid).
+for most of my testing, see cvikl.mid.
Usage
Compile the program using the following command (I tested this using both
clang and gcc):
diff --git a/README.html b/README.html
index 2c1c28155..f671e01e7 100644
--- a/README.html
+++ b/README.html
@@ -421,7 +421,7 @@ programming practice, then to what depths might quality sink if people really
tried to write poor code?
I put that question to the USENET news groups net.lang.c and net.unix-wizards in
the form of a contest. I selected a form similar to the contest
-(Bulwer-Lytton) that asks people to create the
+(Bulwer-Lytton contest) that asks people to create the
worst opening line to a novel (that contest in turn was inspired by disgust over
a novel by Edward
Bulwer-Lytton that opened
diff --git a/README.md b/README.md
index b72c1fc27..a2d31fee2 100644
--- a/README.md
+++ b/README.md
@@ -56,7 +56,7 @@ tried to write poor code?
I put that question to the USENET news groups net.lang.c and net.unix-wizards in
the form of a contest. I selected a form similar to the contest
-([Bulwer-Lytton](https://www.bulwer-lytton.com)) that asks people to create the
+([Bulwer-Lytton](https://www.bulwer-lytton.com) contest) that asks people to create the
worst opening line to a novel (that contest in turn was inspired by disgust over
[a novel](https://en.wikipedia.org/wiki/Paul_Clifford) by [Edward
Bulwer-Lytton](https://en.wikipedia.org/wiki/Edward_Bulwer-Lytton) that opened
diff --git a/bin/README.md b/bin/README.md
index 4f53f5ec2..eb07b7cea 100644
--- a/bin/README.md
+++ b/bin/README.md
@@ -9,10 +9,10 @@ files and other content from the [IOCCC GitHub
repo](https://github.com/ioccc-src/temp-test-ioccc).
-## [bin/](index.html) tools
+## [bin/](%%DOCROOT_SLASH%%bin/index.html) tools
-### [all-run.sh](all-run.sh)
+### [all-run.sh](%%DOCROOT_SLASH%%bin/all-run.sh)
Run a command on all winning entries.
@@ -29,7 +29,7 @@ Or for example:
```
-### [all-years.sh](all-years.sh)
+### [all-years.sh](%%DOCROOT_SLASH%%bin/all-years.sh)
Run a command on all IOCCC years.
@@ -52,7 +52,7 @@ We recommend that this tool be invoked via the top level `Makefile`:
```
-### [chk-entry.sh](chk-entry.sh)
+### [chk-entry.sh](%%DOCROOT_SLASH%%bin/chk-entry.sh)
Check that files required by an entry match the entry's manifest as found in
`.entry.json`.
@@ -64,7 +64,7 @@ For example:
```
-### [filelist.entry.json.awk](filelist.entry.json.awk)
+### [filelist.entry.json.awk](%%DOCROOT_SLASH%%bin/filelist.entry.json.awk)
Generate the list of files in the entry's manifest, `.entry.json`.
@@ -75,7 +75,7 @@ For example:
```
-### [gen-authors.sh](gen-authors.sh)
+### [gen-authors.sh](%%DOCROOT_SLASH%%bin/gen-authors.sh)
Generate the top level `/authors.html` page.
@@ -86,7 +86,7 @@ Usage:
```
-### [gen-location.sh](gen-location.sh)
+### [gen-location.sh](%%DOCROOT_SLASH%%bin/gen-location.sh)
Generate the top level `/location.html` page.
@@ -97,7 +97,7 @@ Usage:
```
-### [gen-other-html.sh](gen-other-html.sh)
+### [gen-other-html.sh](%%DOCROOT_SLASH%%bin/gen-other-html.sh)
Generate entry HTML files (other than README.md to index.html) from markdown
files.
@@ -109,7 +109,7 @@ Usage:
```
-### [gen-sitemap.sh](gen-sitemap.sh)
+### [gen-sitemap.sh](%%DOCROOT_SLASH%%bin/gen-sitemap.sh)
Generate an XML sitemap for the IOCCC web site.
@@ -126,7 +126,7 @@ We recommend that this tool be invoked via the top level `Makefile`:
```
-### [gen-status.sh](gen-status.sh)
+### [gen-status.sh](%%DOCROOT_SLASH%%bin/gen-status.sh)
Generate `status.json` according to the modification dates of `status.json`
and `news.html`.
@@ -164,7 +164,7 @@ We recommend that this tool be invoked via the top level `Makefile`:
```
-### [gen-top-html.sh](gen-top-html.sh)
+### [gen-top-html.sh](%%DOCROOT_SLASH%%bin/gen-top-html.sh)
Generate a number of top level HTML pages for the IOCCC web sites.
@@ -196,7 +196,7 @@ We recommend that this tool be invoked via the top level `Makefile`:
```
-### [gen-year-index.sh](gen-year-index.sh)
+### [gen-year-index.sh](%%DOCROOT_SLASH%%bin/gen-year-index.sh)
Generate an `index.html` page for an given IOCCC year.
@@ -213,7 +213,7 @@ We recommend that this tool be invoked via the top level `Makefile`:
```
-### [gen-years.sh](gen-years.sh)
+### [gen-years.sh](%%DOCROOT_SLASH%%bin/gen-years.sh)
Generate the top level `/years.html` page.
@@ -230,7 +230,7 @@ We recommend that this tool be invoked via the top level `Makefile`:
```
-### [md2html.sh](md2html.sh)
+### [md2html.sh](%%DOCROOT_SLASH%%bin/md2html.sh)
This is the primary tool that forms IOCCC generated HTML content from
markdown files (permanent markdown files or temporarily generated
@@ -240,28 +240,28 @@ The [../inc/md2html.cfg](../inc/md2html.cfg) configuration file is
used by [md2html.sh](md2html.sh) to drive the generation process.
-### [output-index-author.sh](output-index-author.sh)
+### [output-index-author.sh](%%DOCROOT_SLASH%%bin/output-index-author.sh)
Output author's or authors' related HTML details for an entry's index.html
page.
-### [output-index-inventory.sh](output-index-inventory.sh)
+### [output-index-inventory.sh](%%DOCROOT_SLASH%%bin/output-index-inventory.sh)
Output the inventory in HTML form for an entry's index.html page.
-### [output-year-index.sh](output-year-index.sh)
+### [output-year-index.sh](%%DOCROOT_SLASH%%bin/output-year-index.sh)
Output markdown of wining entry links for a given year.
-### [pandoc-wrapper.sh](pandoc-wrapper.sh)
+### [pandoc-wrapper.sh](%%DOCROOT_SLASH%%bin/pandoc-wrapper.sh)
Wrapper tool to run pandoc.
-### [quick-readme2index.sh](quick-readme2index.sh)
+### [quick-readme2index.sh](%%DOCROOT_SLASH%%bin/quick-readme2index.sh)
Builds an entry's `index.html` file if the entry directory
does not have a non-empty `index.hmtl` file, or if either
@@ -271,13 +271,13 @@ This is useful when only a few entries have been
modified (resulting in an updated `.entry.json` file)
or if the `index.html` of a few entries has been changed.
-While the [readme2index.sh](readme2index.sh) take a few
+While the [readme2index.sh](%%DOCROOT_SLASH%%bin/readme2index.sh) take a few
seconds to run, when applied to 300+ entries,
the extra time can add up.
If only a few `index.hmtl` files need updating, then
this command will only briefly pause while the
-slightly longer [readme2index.sh](readme2index.sh) is run:
+slightly longer [readme2index.sh](%%DOCROOT_SLASH%%bin/readme2index.sh) is run:
```
bin/all-run.sh -v 3 bin/quick-readme2index.sh -v 1
@@ -294,7 +294,7 @@ We recommend that this tool be invoked via the top level `Makefile`:
```
-### [readme2index.sh](readme2index.sh)
+### [readme2index.sh](%%DOCROOT_SLASH%%bin/readme2index.sh)
Convert an entry README.md into entry directory index.html.
@@ -315,7 +315,7 @@ We recommend that this tool be invoked via the top level `Makefile`:
```
-### [status2html.sh](status2html.sh)
+### [status2html.sh](%%DOCROOT_SLASH%%bin/status2html.sh)
Convert `status.json` into HTML.
@@ -323,7 +323,7 @@ This tool is a 'before tool' (-b tool) that is intended
to be used by `bin/gen-status.sh`.
-### [sgi.sh](sgi.sh)
+### [sgi.sh](%%DOCROOT_SLASH%%bin/sgi.sh)
Sort .gitignore content from `stdin` to `stdout`.
@@ -332,10 +332,10 @@ We sort with lines starting with `*` second.
We sort with lines that do not start with `[#!*]` third.
We sort with lines starting with `!` fourth.
-This tool is used by [sort.gitignore.sh](sort.gitignore.sh).
+This tool is used by [sort.gitignore.sh](%%DOCROOT_SLASH%%bin/sort.gitignore.sh).
-### [sort.gitignore.sh](sort.gitignore.sh)
+### [sort.gitignore.sh](%%DOCROOT_SLASH%%bin/sort.gitignore.sh)
Sort a .gitignore in a entry directory.
@@ -358,32 +358,32 @@ We recommend that this tool be invoked via the top level `Makefile`:
```
-### [subst.default.sh](subst.default.sh)
+### [subst.default.sh](%%DOCROOT_SLASH%%bin/subst.default.sh)
Print default substitutions.
-### [subst.entry-index.sh](subst.entry-index.sh)
+### [subst.entry-index.sh](%%DOCROOT_SLASH%%bin/subst.entry-index.sh)
Print substitutions for an entry index.html.
-### [subst.entry-navbar.awk](subst.entry-navbar.awk)
+### [subst.entry-navbar.awk](%%DOCROOT_SLASH%%bin/subst.entry-navbar.awk)
Output substitutions for navbar on behalf of an entry.
-### [subst.year-index.sh](subst.year-index.sh)
+### [subst.year-index.sh](%%DOCROOT_SLASH%%bin/subst.year-index.sh)
Print substitutions for a year level index.html.
-### [subst.year-navbar.awk](subst.year-navbar.awk)
+### [subst.year-navbar.awk](%%DOCROOT_SLASH%%bin/subst.year-navbar.awk)
Output substitutions for navbar on behalf of a year level index.html.
-## [tar-entry.sh](tar-entry.sh)
+## [tar-entry.sh](%%DOCROOT_SLASH%%bin/tar-entry.sh)
Form a compressed tarball for an entry.
@@ -400,7 +400,7 @@ bin/all-run.sh -v 3 bin/tar-entry.sh -v 1 -W
```
-## [tar-year.sh](tar-year.sh)
+## [tar-year.sh](%%DOCROOT_SLASH%%bin/tar-year.sh)
Form a compressed tarball for an IOCCC year.
@@ -423,7 +423,7 @@ make form_year_tarball
```
-## [untar-entry.sh](untar-entry.sh)
+## [untar-entry.sh](%%DOCROOT_SLASH%%bin/untar-entry.sh)
Untar an entry's a compressed tarball.
@@ -446,7 +446,7 @@ We recommend that this tool be invoked via the top level `Makefile`:
```
-## [untar-year.sh](untar-year.sh)
+## [untar-year.sh](%%DOCROOT_SLASH%%bin/untar-year.sh)
Untar an IOCCC year's compressed tarball.
@@ -473,7 +473,7 @@ We recommend that this tool be invoked via the top level `Makefile`:
# How IOCCC HTML content is built
-The [md2html.sh](md2html.sh) tool is the primary tool that
+The [md2html.sh](%%DOCROOT_SLASH%%bin/md2html.sh) tool is the primary tool that
is used to form all IOCCC related HTML pages for the [official IOCCC web
site](https://www.ioccc.org).
@@ -561,7 +561,7 @@ It is an error, unless `-S` is given, for any phase, except phases HTML
20-29, to not substitute all **%%TOKEN%%**'s. For phases HTML 20-29, any
**%%TOKEN%%** that is not substituted are passed thru without substitution.
-See the tool [readme2index.sh](readme2index.sh) for an example of
+See the tool [readme2index.sh](%%DOCROOT_SLASH%%bin/readme2index.sh) for an example of
how HTML phases are implemented.
@@ -684,18 +684,18 @@ output), or the command will exit non-zero, unless `-S` is given. If `-S` is
given, only a warning about non-substituted tokens will be written to `stderr`.
The command line of tools in the [bin directory](index.html), and perhaps
-modified via the [md2html config file](../inc/md2html.cfg) may change to using a
+modified via the [md2html config file](%%DOCROOT_SLASH%%inc/md2html.cfg) may change to using a
different filename for a given phase.
For example when forming the HTML from
-[2020/ferguson1/chocolate-cake.md](/2020/ferguson1/chocolate-cake.md),
+[2020/ferguson1/chocolate-cake.md](%%DOCROOT_SLASH%%2020/ferguson1/chocolate-cake.md),
a different `navbar` navigation bar is needed. So instead of the
usual top navigation bar that normally directs people to the previous
entry for the year, or go up to the year page, or to the next entry
for the year, a top navigation bar to just go up to the entry's
-main page is needed. A line in the [md2html config file](../inc/md2html.cfg)
+main page is needed. A line in the [md2html config file](%%DOCROOT_SLASH%%inc/md2html.cfg)
that refers to
-[2020/ferguson1/chocolate-cake.md](/2020/ferguson1/chocolate-cake.md) may
+[2020/ferguson1/chocolate-cake.md](%%DOCROOT_SLASH%%2020/ferguson1/chocolate-cake.md) may
specify use of `navbar.up2index.html` (as `navbar.up2index`)instead of using the
`navbar.default.html` (`navbar.default.html`) default.
@@ -703,7 +703,7 @@ The HTML phase may be skipped resulting in no HTML output during a given phase
and furthermore, forming no HTML content from a given markdown file altogether.
See comments in the [md2html config file](../inc/md2html.cfg) for details.
-See also, the tool [readme2index.sh](readme2index.sh) for an example of
+See also, the tool [readme2index.sh](%%DOCROOT_SLASH%%bin/readme2index.sh) for an example of
how such command lines are used.
@@ -792,7 +792,7 @@ a natural fit for GitHub and [GitHub pages](https://pages.github.com).
The `
inc directory as well as various JSON
files and other content from the IOCCC GitHub
repo.
-
This is the primary tool that forms IOCCC generated HTML content from
markdown files (permanent markdown files or temporarily generated
markdown files) and HTML fragments from the inc directory.
Builds an entry’s index.html file if the entry directory
does not have a non-empty index.hmtl file, or if either
.entry.json or index.html is newer than the index.hmtl file.
This is useful when only a few entries have been
modified (resulting in an updated .entry.json file)
or if the index.html of a few entries has been changed.
We sort with lines starting with # first.
We sort with lines starting with * second.
We sort with lines that do not start with [#!*] third.
We sort with lines starting with ! fourth.
Nearly all IOCCC related HTML pages are built from markdown files,
@@ -638,7 +638,7 @@ as well as the markdown content given to the pandoc wrapper tool (<
It is an error, unless -S is given, for any phase, except phases HTML
20-29, to not substitute all %%TOKEN%%’s. For phases HTML 20-29, any
%%TOKEN%% that is not substituted are passed thru without substitution.
See the tool readme2index.sh for an example of
how HTML phases are implemented.
getopt phase processing of the command line
@@ -709,20 +709,20 @@ given, only a warning about non-substituted tokens will be written to stde
modified via the md2html config file may change to using a
different filename for a given phase.
For example when forming the HTML from
-2020/ferguson1/chocolate-cake.md,
+2020/ferguson1/chocolate-cake.md,
a different navbar navigation bar is needed. So instead of the
usual top navigation bar that normally directs people to the previous
entry for the year, or go up to the year page, or to the next entry
for the year, a top navigation bar to just go up to the entry’s
main page is needed. A line in the md2html config file
that refers to
-2020/ferguson1/chocolate-cake.md may
+2020/ferguson1/chocolate-cake.md may
specify use of navbar.up2index.html (as navbar.up2index)instead of using the
navbar.default.html (navbar.default.html) default.
The HTML phase may be skipped resulting in no HTML output during a given phase
and furthermore, forming no HTML content from a given markdown file altogether.
Some of the files under this directory are used to form MOST of the HTML content
diff --git a/bugs.html b/bugs.html
index cc99fe1f0..92de37da0 100644
--- a/bugs.html
+++ b/bugs.html
@@ -407,7 +407,7 @@ it takes away some instructional value or even usability. _In this case we’re
VERY SORRY about it: it’s a fine line, we know, and we tried to use careful
judgement but invariably some might have been the wrong decision. Thank you for
understanding!
I ( Cody Boone Ferguson )
accept the blame in some cases; when working on getting entries to compile
sometimes I got carried away with it and there might be that I fixed some things
that should not have been fixed. I am correcting these mistakes as I come across
@@ -1793,7 +1793,7 @@ crash this makes sense.
-0.0515873015873016
and that’s what it shows in linux.
Note that with different perl libraries in macOS (for instance from
-Homebrew and MacPorts) it will
+Homebrew and MacPorts package managers) it will
likely print different warnings when compiling. It was observed that with
Homebrew it does not report any warnings but with MacPorts it results in a total
of 92 warnings! Nonetheless neither works okay and both crash.
diff --git a/bugs.md b/bugs.md
index b350b9df6..8fe58bed7 100644
--- a/bugs.md
+++ b/bugs.md
@@ -38,7 +38,7 @@ it takes away some instructional value or even usability. _In this case we're
judgement but invariably some might have been the wrong decision. Thank you for
understanding!
-I ([Cody Boone Ferguson](authors.html#Cody_Boone_Ferguson))
+I ( [Cody Boone Ferguson](authors.html#Cody_Boone_Ferguson) )
accept the blame in some cases; when working on getting entries to compile
sometimes I got carried away with it and there might be that I fixed some things
that should not have been fixed. I am correcting these mistakes as I come across
@@ -2079,7 +2079,7 @@ The example command above _should_ print:
and that's what it shows in linux.
Note that with different perl libraries in macOS (for instance from
-[Homebrew](https://brew.sh) and [MacPorts](https://www.macports.org)) it will
+[Homebrew](https://brew.sh) and [MacPorts](https://www.macports.org) package managers) it will
likely print different warnings when compiling. It was observed that with
Homebrew it does not report any warnings but with MacPorts it results in a total
of 92 warnings! Nonetheless neither works okay and both crash.
@@ -2124,7 +2124,7 @@ make a pull request.
If `DISPLAY` is not set the program will very likely crash, do something strange
(or if you're very unlucky your computer might [halt and catch
-fire](https://en.wikipedia.org/wiki/Halt_and_Catch_Fire_(computing))! :-) ).
+fire](https://en.wikipedia.org/wiki/Halt_and_Catch_Fire_(computing))! :-) ).
@@ -3202,7 +3202,7 @@ Do you have a fix? We welcome it!
The author stated that the program will crash if no argument is passed to the
program though we note that your computer might also [halt and catch
-fire](https://en.wikipedia.org/wiki/Halt_and_Catch_Fire_(computing)) :-)
+fire](https://en.wikipedia.org/wiki/Halt_and_Catch_Fire_(computing)) :-)
@@ -3328,7 +3328,7 @@ The author stated that the program will crash if no argument is passed to the
program or if invalid arguments (e.g. file does not exist) or images of
mismatching sizes or unsupported pixel formats though we note that your computer
might also [halt and catch
-fire](https://en.wikipedia.org/wiki/Halt_and_Catch_Fire_(computing)) :-)
+fire](https://en.wikipedia.org/wiki/Halt_and_Catch_Fire_(computing)) :-)
diff --git a/contact.html b/contact.html
index 8135529a0..a9e0394af 100644
--- a/contact.html
+++ b/contact.html
@@ -381,9 +381,9 @@
Instead first look at the IOCCC
issues to see if the
@@ -403,9 +403,9 @@ been reported, then feel free to open a FAQ 0.5)
-
Comment or make a suggestion on IOCCC guidelines - (see FAQ 0.5)
-
Comment or make a suggestion on IOCCC tools - (see FAQ 0.5)
+
Comment or make a suggestion on IOCCC rules - See FAQ 0.5
+
Comment or make a suggestion on IOCCC guidelines - See FAQ 0.5
+
Comment or make a suggestion on IOCCC tools - See FAQ 0.5
Those FAQ entries will help guide you on how to make public comments
and suggestion in the relevant places.
diff --git a/contact.md b/contact.md
index 8010d8497..4180abb4f 100644
--- a/contact.md
+++ b/contact.md
@@ -2,9 +2,9 @@
If you are trying to:
-* **Fix a winning IOCCC entry** - (see [FAQ 5.2](faq.html#fix_an_entry))
-* **Update winning author information** - (see [FAQ 5.5](faq.html#fix_author))
-* **Correct a web site problem** - (see [FAQ 5.4](faq.html#fix_web_site) or [FAQ 5.6](faq.html#fix_link))
+* **Fix a winning IOCCC entry** - See [FAQ 5.2](faq.html#fix_an_entry)
+* **Update winning author information** - See [FAQ 5.5](faq.html#fix_author)
+* **Correct a web site problem** - See [FAQ 5.4](faq.html#fix_web_site) or [FAQ 5.6](faq.html#fix_link)
Instead of sending us Email, **Please** consider using the [GitHub
pull request](https://github.com/ioccc-src/winner/pulls) process
@@ -13,9 +13,9 @@ of the [ioccc-src/winner repo](https://github.com/ioccc-src/winner).
If you are trying to:
-* **Report a bug in an IOCCC winning entry** - (see [FAQ 5.1](faq.html#report_bug))
-* **Report an IOCCC web site problem** - (see [FAQ 5.3](faq.html#report_web_problem))
-* **Report a broken or wrong web link** - (see [FAQ 5.6](faq.html#fix_link))
+* **Report a bug in an IOCCC winning entry** - See [FAQ 5.1](faq.html#report_bug)
+* **Report an IOCCC web site problem** - See [FAQ 5.3](faq.html#report_web_problem)
+* **Report a broken or wrong web link** - See [FAQ 5.6](faq.html#fix_link)
Instead first look at the [IOCCC
issues](https://github.com/ioccc-src/winner/issues) to see if the
@@ -26,9 +26,9 @@ issue](https://github.com/ioccc-src/winner/issues).
If you are trying to:
-* **Comment or make a suggestion on IOCCC rules** - (see [FAQ 0.5](faq.html#feedback))
-* **Comment or make a suggestion on IOCCC guidelines** - (see [FAQ 0.5](faq.html#feedback))
-* **Comment or make a suggestion on IOCCC tools** - (see [FAQ 0.5](faq.html#feedback))
+* **Comment or make a suggestion on IOCCC rules** - See [FAQ 0.5](faq.html#feedback)
+* **Comment or make a suggestion on IOCCC guidelines** - See [FAQ 0.5](faq.html#feedback)
+* **Comment or make a suggestion on IOCCC tools** - See [FAQ 0.5](faq.html#feedback)
Those FAQ entries will help guide you on how to make public comments
and suggestion in the relevant places.
diff --git a/faq.html b/faq.html
index e8b4d200e..d4027b427 100644
--- a/faq.html
+++ b/faq.html
@@ -551,7 +551,7 @@ winners based on the same theme.
frequently submitted theme, be sure that it is obfuscated in several
new and novel ways.
IMPORTANT HINT: Be sure to clearly explain near the beginning
-of your remarks.md file (see FAQ 2.1)
+of your remarks.md file, see FAQ 2.1,
why you are submitting a entry based on a frequently
submitted theme and how compares with previous IOCCC winners
of the same theme.
@@ -630,7 +630,7 @@ previous IOCCC entries make it more challenging to be successful.
state something along the lines of:
We tend to dislike programs that: are similar to previous winning entries.
FAIR WARNING: Be sure to clearly explain near the beginning
-of your remarks.md file (see FAQ 2.1)
+of your remarks.md file, see FAQ 2.1,
why you are submitting a entry based on a frequently
submitted theme and how compares with previous IOCCC winners
of the same theme.
@@ -851,7 +851,7 @@ entries
of the IOCCC 2020,
after a far too long of a delay
(due in part to a former IOCCC judge whose resignation was noted on
-2021 Jan 04)
+2021 Jan 04 commit)
from their initial 2020 Jul 25
announcement,
were added by an IOCCC judge
diff --git a/faq.md b/faq.md
index 04ae331ba..1f8df5f66 100644
--- a/faq.md
+++ b/faq.md
@@ -215,7 +215,7 @@ frequently submitted theme, be sure that it is obfuscated in several
new and novel ways.
**IMPORTANT HINT**: Be sure to **clearly explain** near the beginning
-of your `remarks.md` file (see [FAQ 2.1](#remarks_md))
+of your `remarks.md` file, see [FAQ 2.1](#remarks_md),
**why you are submitting a entry based on a frequently
submitted theme** and **how compares with previous IOCCC winners**
of the same theme.
@@ -315,7 +315,7 @@ state something along the lines of:
```
**FAIR WARNING**: Be sure to **clearly explain** near the beginning
-of your `remarks.md` file (see [FAQ 2.1](#remarks_md))
+of your `remarks.md` file, see [FAQ 2.1](#remarks_md),
**why you are submitting a entry based on a frequently
submitted theme** and **how compares with previous IOCCC winners**
of the same theme.
@@ -617,7 +617,7 @@ entries](https://github.com/ioccc-src/winner/commit/9d61fc0fb4a3245afb1435458cfb
of the [IOCCC 2020](years.html#2020),
after a far too long of a delay
(due in part to a [former IOCCC judge whose resignation was noted on
-2021 Jan 04](https://github.com/ioccc-src/winner/commit/c94fc84c35dc83e3eb9900720b95917a15c27afe))
+2021 Jan 04](https://github.com/ioccc-src/winner/commit/c94fc84c35dc83e3eb9900720b95917a15c27afe) commit)
from their initial [2020 Jul 25
announcement](https://web.archive.org/web/20200726232505/http://www.ioccc.org:80/index.html),
were added by an [IOCCC judge](https://www.ioccc.org/judges.html)
@@ -3148,7 +3148,7 @@ NOTE: The _JSON null_ is **NOT** enclosed in quotes!
```
This _JSON member_ holds the
-[Mastodon social network](https://en.wikipedia.org/wiki/Mastodon_\(social_network\))
+[Mastodon social network](https://en.wikipedia.org/wiki/Mastodon_(social_network))
handle of the author.
There **MUST** be one and only one `mastodon` _JSON member_ and the _JSON value_ **MUST**
diff --git a/markdown.html b/markdown.html
index 99f648b87..539825231 100644
--- a/markdown.html
+++ b/markdown.html
@@ -388,7 +388,9 @@ All generated HTML pages on the Offic
start with some markdown content.
Nevertheless, the IOCCC does have certain practices that we ask authors to follow.
+
Nevertheless, the IOCCC does have certain practices that we ask authors to follow.
+Some these relate to use of markdown directly, others relate to injecting HTML
+into the markdown file.
In particular there are things we ask people to please do NOT use markdown files:
Do not use name attributes in HTML a tags
Please do not use the HTML construct:
@@ -476,7 +478,46 @@ unquoted attribute values.
<span style="font-family: monospace;">Use of monospaced font is one option</span>
Or better and easier still, use an inline markdown code block:
`inline markdown code block is easier and much better`
diff --git a/markdown.md b/markdown.md
index 18fcc5010..b156df736 100644
--- a/markdown.md
+++ b/markdown.md
@@ -12,6 +12,8 @@ See the [markdown syntax](https://www.markdownguide.org/basic-syntax) guide.
See also [CommonMark Spec](https://spec.commonmark.org/current/).
Nevertheless, the IOCCC does have certain practices that we ask authors to follow.
+Some these relate to use of markdown directly, others relate to injecting HTML
+into the markdown file.
In particular there are things we ask people to please do **NOT** use markdown files:
@@ -195,3 +197,87 @@ Or better and easier still, use an inline markdown code block:
```
`inline markdown code block is easier and much better`
```
+
+
+## Do not add trailing slash on void HTML elements
+
+Please do not use trailing slash on [void HTML
+elements](https://github.com/validator/validator/wiki/Markup-»-Void-elements).
+
+See also this note on [trailing slashes in void-element start
+tags](https://github.com/validator/validator/wiki/Markup-»-Void-elements#trailing-slashes-in-void-element-start-tags-do-not-mark-the-start-tags-as-self-closing).
+
+The trailing slash on void HTML elements has no effect and interacts badly with unquoted attribute values.
+
+For example, please do not use:
+
+```
+ <=== no thank you
+```
+
+Instead use just:
+
+```
+
+```
+
+And for example, please do not use:
+
+```
+ <=== no thank you
+```
+
+Instead use just:
+
+```
+
+```
+
+And for example, please do not use:
+
+```
+ <=== no thank you
+```
+
+Instead use just:
+
+```
+
+```
+
+etc.
+
+## Do not end markdown links in ))
+
+Please do not end a markdown links with a double closed parenthesis "))".
+
+Markdown links that end in "))" complicate parsing and sometimes lead
+to incorrect URLs or file paths.
+
+Instead of:
+
+```
+[some text](https://example.com/foo_(bar)) <=== no thank you
+```
+
+Use:
+
+```
+[some text](https://example.com/foo_(bar))
+```
+
+Instead of:
+
+```
+This thing ([some text](some/path)) is not ideal. <=== no thank you
+``
+
+Use:
+
+```
+This thing, [some text](some/path), is better.
+```
diff --git a/nojs-menu.html b/nojs-menu.html
index ce34cfa3e..d669eecc3 100644
--- a/nojs-menu.html
+++ b/nojs-menu.html
@@ -384,7 +384,7 @@
The problem was to do with the way that the read(2) function was redefined.
@@ -417,7 +417,7 @@ line rather than two lines which the author told us (Landon) that they liked.
Thus now it is like the original where the first line ends with "hell\ and
the second line starts with o, world!\n".
By request, the original code is provided as
-anonymous.alt.c so that one can look at it and
+anonymous.alt.c so that one can look at it and
the famous tattoo which we also include here:
Cody fixed this to not require -traditional-cpp which some compilers like
clang do not support. Fixing -traditional-cpp is, as noted later on, very
@@ -475,19 +475,19 @@ but not clang - or at least some versions.
Cody also fixed this to not crash when no arg is specified. Note that if the arg
is not a positive number it will not do anything useful or anything at all.
This was fixed on 30 October 2023 after the bug status was changed from INABIAF
(it’s not a bug it’s a feature) to bug.
Cody provided an alternate version,
an improved version of the judges, so that everyone can enjoy it with systems
that are not VAX/PDP. It moves at approximately the same speed as the original
did. We also refer you to the FAQ as there are some winning entries
@@ -496,8 +496,8 @@ speed was discovered) - with more to them of course! The difference between the
original is that it will start over after it times out but that might not happen
with the original (might need you to press a key though this is not known for
sure).
-
Cody also added the gentab.c file, fixed to compile
-(and work, though see bugs.html) with modern systems
+
Cody also added the gentab.c file, fixed to compile
+(and work, though see the bugs entry for 1984/mullender) with modern systems
and so that it would create the proper array (it had unbalanced }s), which the
author noted in their remarks (which Cody also found). As this file uses the old
header file a.out.h that is not available in all modern systems, Cody found a
@@ -508,8 +508,8 @@ Repo.
Both Cody and Yusuke fixed this; Yusuke got this to not crash and Cody fixed it
to work with macOS.
@@ -520,7 +520,7 @@ seemingly infinite loop, each time printing another ?, and it proba
have until it ran out of memory.
The fix for macOS is that there was no prototype for execlp(3) and macOS has
problems with missing prototypes for some functions (this was also seen when
-Cody fixed 1984/anonymous for macOS as well). As
+Cody fixed 1984/anonymous for macOS as well). As
this is a one-liner the include of unistd.h was done in the Makefile.
Ironically this fix was discovered through Linux!
NOTE: originally this entry did not print a newline prior to returning to the
@@ -528,25 +528,25 @@ shell, after the output (despite having \n in the string - can you
why?) but to make it more friendly to users Cody made it print a \n prior to
returning to the shell. The original code does not have this change.
Cody, out of abundance of caution, added a second arg to main() because some
versions of clang object to the number of args of main(), saying that it must
be 0, 2 or 3. The version this has been observed in does not actually object to
1 arg but it is entirely possible that this changes so a second arg (that’s not
needed and is unused) has been added just in case.
-
Cody also added the script primes.sh which allows one
+
Cody also added the script primes.sh which allows one
to check the output for the first N prime numbers of the output, where N is
either the default or user specified. The inspiration was the previous try
command he gave to have fun with finding primes that might seem unusual in a
way.
-
Cody also added the try.sh script (which calls primes.sh
+
Cody also added the try.sh script (which calls primes.sh
whether primes(6) is installed or not, but it only does it once with the
default value).
Cody fixed this to compile with modern compilers. In the past one could get away
with defining some macro to #define and then use #foo to have the same
@@ -554,28 +554,28 @@ effect as using #define but this does not work in modern systems so
changed the #o lines to #define. Also unistd.h had to be #included.
Yusuke provided some useful information that amounts to an alternate version
that Cody added. See the index.html for details.
Cody added the alt code which allows one to resize the maze and he also added
-the try.alt.sh script that randomly selects sizes
+the try.alt.sh script that randomly selects sizes
(five times) and compiles and runs it. After the five runs it prompts you to
enter a number, in an infinite loop, exiting if any non-digits are in input
(this includes negative numbers which in the code actually sets it back to 39,
the default).
Cody fixed this very twisted entry to not require -traditional-cpp. Fixing
-traditional-cpp is, as noted later on, very complicated, but Cody would like
to refer you to the original file
-sicherman.orig.c and he suggests that you
-then compare it to sicherman.c for some good old
+sicherman.orig.c and he suggests that you
+then compare it to sicherman.c for some good old
C-fashioned fun (alternatively, see below explanation)!
-
Later on Cody improved the fix so that it looks much more like the original
+
To get this to all work the following changes were made. If you really want to
@@ -597,12 +597,12 @@ were actually not what they appear: the only arg that existed in main()
The macros C and V were changed to lower case. This is because it felt
like the C=" ..’ part in subr() would be better to be upper case as it talks
-about the language. Also in the second alternate
+about the language. Also in the second alternate
version (the first being the
original code) which is in case a new version of clang ever objects to only one
arg in main() (which is not out of the realm of possibility), main() can
have C as argc to main() so it would read like it once did: C manual
-albeit with a , separating the two. The second
+albeit with a , separating the two. The second
alternate version is compiled
in case the first does not. Originally the macros were kept the same and the
C in subr() was c. It feels better (in some ways) to make it so that the
@@ -649,34 +649,34 @@ don’t even bother calling subr()?
should they object to main() having only one arg. This version will
automatically be compiled if the entry fails to compile for some reason but one
can compile it manually as make alt in which case it’ll be compiled as
-sicherman.alt (if it’s done because sicherman.c
+sicherman.alt (if it’s done because sicherman.c
fails to compile it will be built as sicherman as part of the sicherman
rule).
Cody fixed this to compile and work with clang (it already worked with gcc).
The problem was that clang is more strict about the type of second arg to
@@ -685,8 +685,8 @@ caused a segfault. By adding a new variable, char *t, initialising
and then using t instead of s it compiles and runs successfully under clang
and gcc.
Cody got this to compile and work with clang and gcc. He noted that he tried to
keep the ASCII art as close to the original as possible. The line lengths are
@@ -725,29 +725,29 @@ was possible to silence it. In particular:
which can be disabled. It results in the same behaviour but this way no warnings
are produced.
Cody noticed and fixed a funny mistake in the Makefile where a
-Wno-strict-prototypes was in the wrong location, suggesting that there is a
-D needed to compile the entry.
Cody restored the original entry which was a single line. The code
being longer (in 1986 a one liner could be longer) was split to three lines to
avoid problems with news and mail but as it was the ‘Best one liner’ it is now
one line.
-
Cody also added the stein.sh script which runs the two
+
Cody also added the stein.sh script which runs the two
commands that we suggest in order to get it to show clean output.
Yusuke originally patched this to use strdup() on two strings and this let it
@@ -810,33 +810,33 @@ work with gcc but it still required -traditional-cpp.
Cody made this look more like the original entry by restoring the #define of
define. It’s not used but it now looks closer to the original.
-
Cody also added the try.sh script which shows how the
+
Cody also added the try.sh script which shows how the
program works but also how the folded code can recreate the original.
Also because index(3) is deprecated and in some systems requires the inclusion
of strings.h and because it’s identical in use to strchr(3) (and we noted
that for System V we had to do this) Cody added to the Makefile
-Dindex=strchr.
Cody added the try.sh script and the C file
+goto.c and the text file goto.txt
for demonstration purposes. Notice that the program is case sensitive which
running the program on the text file demonstrates.
Cody added back the documented checks for invalid input which no longer worked
and instead resulted in either accepting the level, whether or not it was a
@@ -873,14 +873,14 @@ immediately goes back to the prompting of the level.
well (the one with the board and the one without, the entry itself with the
size constraints of the contest).
Cody fixed this for modern systems. The problem was 'assignment to cast is illegal, lvalue casts are not supported'. For the original file see the
index.html file. Unfortunately this ruins some symmetry. To try and resolve this
@@ -895,8 +895,8 @@ unlikely(?) but nevertheless suggested case that putchar() is not a
Cody fixed this twisted entry (as we called it :-) ) for modern compilers,
including making it no longer require -traditional-cpp. Fixing
@@ -949,24 +949,24 @@ modern compilers do not allow directives like:
macro in place it’s just no longer used.
See the index.html file for details on the original code, provided as an alt
version in case you have an older compiler or wish to try -traditional-cpp.
Cody fixed this to work for modern systems. The problem was that the important
function, a redefinition of exit(), was not being called in main(). The
-original version is in 1988/isaak/isaak.alt.c. See the
+original version is in 1988/isaak/isaak.alt.c. See the
index.html file for more details.
Cody fixed this for modern systems. It did not compile with clang because it
requires the second and third args of main() to be `char ** but even before
@@ -982,15 +982,15 @@ once did. The format of pain() is exactly like how main()main() returns !pain(...) like main() used to do
to itself and pain() does now.
Cody provided an alternate version so that
this will work with compilers like clang. An alternate version had to be
provided because not doing so would be tampering with the entry too much. It
would work but it would not show the same creativity and cleverness.
@@ -1001,14 +1001,14 @@ original. See the index.html file for details on the alternate code.
doing this) that with a slight modification this entry can be C++ instead. We don’t
thank him for this ghastly point! :-)
The original version, provided as alternate code,
was fixed by Misha Dynin, based on the judges’ remarks, so that this would work
with modern C compilers. We encourage you to try the alternate version to see
what happens with current compilers! See the index.html files for details.
-
Cody added the try.sh script to show the magic of the
+
Cody added the try.sh script to show the magic of the
entry as seeing the code with the result at once is far more beautiful.
Cody also changed the ints to be float as that’s what they are printed as:
not strictly necessary but nonetheless more correct, even if not warned against.
@@ -1016,13 +1016,13 @@ not strictly necessary but nonetheless more correct, even if not warned against.
Cody got this to work with modern systems. The main issues were that an
#include had to be added along with fixing the path (due to . not being in
$PATH) to files referred to in the code. The path problem was also fixed in
-fubar.sh.
A strange problem occurred where if one made modifications to the C file it
might end up failing to work even after changing it back. This was resolved by:
--- i/1989/fubar/fubar.sh
@@ -1042,10 +1042,10 @@ might end up failing to work even after changing it back. This was resolved by:<
chmod +x ouroboros.c
Cody also ‘modernised’ the script to use bash and fixed for ShellCheck. The
if [ .. ] was changed in the C code as well as the script.
To prevent annoying output to /dev/tty we changed the code to simulate the
output via strings(1) but Cody removed the ill-famed useless use of cat to
@@ -1060,8 +1060,8 @@ code directly, to match that of the main entry. As we simulate the functionality
anyway, and since one may still run the code or the script (for the original
entry and the alt code) anyway, it works out well.
Cody also provided the try.sh script and the
+supplementary files try.txt,
+fib.lisp and
+chocolate_cake.lisp. The try.txt comes
from the author and the fib.lisp comes from Yusuke. Cody wrote the script and
offered us some chocolate cake :-) See index.html for details on how to use the
script.
@@ -1088,45 +1088,45 @@ result in:
shell returned 2
because the alt rule had what normally is in the ${PROG}.alt rule.
Cody fixed an infinite loop where the program would print the same thing over
and over again, flooding the screen. The problem is that there was a for loop
that by necessity had to not have an increment stage but the pointer only got
updated in the if path (in the loop itself).
-
Cody also provided the try.sh script which runs the
+
Cody also provided the try.sh script which runs the
program four times on three files to show the different output. It doesn’t run
the program on each file four times in a row but rather does it on each file
and starts over, doing it four times, to help with hopefully allowing different
output.
Cody also provided an alternate version based on
+the author’s remarks and the try.alt.sh script that
uses the alt code, allowing one to configure the alt build. See the index.html
for details. The fix described above was fixed in this version too, after it was
discovered and fixed.
Cody fixed a segfault under macOS that prevented it from working. The problem
was that the int (from #define f) should be a long. This became apparent when
he was using lldb and saw that the type of a pointer was too long :-)
Cody and Yusuke fixed this entry: Yusuke fixed this to compile with gcc and Cody
fixed it for clang and made some other fixes as well.
@@ -1149,13 +1149,13 @@ various other things, so that now the alt version, which is better, can be used.
IOCCC Tetris working (this of course was
not his only reason :-) )
Cody fixed this for clang, except that two versions generated by the program
cannot be compiled by clang due to inherent defects in the compiler and how the
@@ -1207,21 +1207,21 @@ Comments might have been changed but it is no longer known if that happened only
in the working on version 2 and 3 or if in the fix for clang as well as version
0 and 1.
To make use of this several scripts were added by Cody.
-
The compile.sh script that removes the generated
+
The compile.sh script that removes the generated
code, rebuilds the program and regenerates the other code and then compiles it
will work for compilers like gcc and one can then use the
-try.sh script to see example input and output.
Cody also added an alternate version which allows Turbo-C
and MSC to compile this code, based on the authors’ remarks, except that Cody
did not change the " #Q" string as that showed worse looking output
instead of improved output though he has no way to test the compilers in
@@ -1234,15 +1234,15 @@ question (i.e. it was only tested in the original entry). YMMV.
the variables, adding instead -Wno-implicit-int. The newline added by the
judges was retained.
Yusuke and Cody in conjunction fixed this for modern systems (both fixed a
different compiler error but more fixes were also made).
@@ -1251,11 +1251,11 @@ is a compiler error because free() returns void. Cody then made it
more like the original in this way by redefining free to have the comma
operator itself.
Cody fixed another compiler error by removing the erroneous prototype to
-fopen(). Cody also changed a char * used for file I/O to be a proper FILE * and fixed a typo in LANDER.BAS.
+fopen(). Cody also changed a char * used for file I/O to be a proper FILE * and fixed a typo in LANDER.BAS.
Cody fixed the script to work properly in modern environments including writing
to and extracting from stdout and relying on the exit code in the commands to
allow for && ....
He also changed the perror(3) call to fprintf(3) because in macOS when errno
is 0 it shows what looks like an error.
-
He added the try.sh to run the commands that we suggested at
+
He added the try.sh to run the commands that we suggested at
the time.
NOTE: as btoa is not common we used a ruby script from Yusuke but with a minor
fix applied by Cody that made the program just show oops twice from invalid
input but which now works.
Cody added the alt code which was suggested by the judges
+
Cody added the alt code which was suggested by the judges
in the case that your compiler cannot compile X=g()... but it actually does
something else and is recommended by the author as well.
Cody fixed this to work with modern compilers; exit(3) returns void but the
function was used in a binary expression so this wouldn’t even compile.
@@ -1311,12 +1311,12 @@ the program’s interactive output.
Additionally, Cody fixed the shortened version provided by the author in the
same way as the original entry, first the compile fix and then later on making
it look more like the original by redefining exit and also redefining gets()
-to be fgets() in the same way that the original entry is. This way the alt
+to be fgets() in the same way that the original entry is. This way the alt
version is equivalent in function, like the
author intended, but more compact.
He also fixed some bugs that impacted the usability of this program including some
@@ -1339,41 +1339,41 @@ this is why it was done.
with clang in Linux but which was defaulting to an error. This way was the
simplest way to deal with the problem in question due to the way the entry
works.
-
Cody also added the try.sh script which shows the
+
Cody also added the try.sh script which shows the
original program and some of the programs it generates.
Yusuke pointed out that atof nowadays needs #include <stdlib.h> which was
used in order to get this to work initially (prior to this output was there but
incomplete).
Cody fixed this for modern systems. It had 1s in places for a short int which was changed to just 1. Since it’s instructional to see the
differences he has provided an alternate version,
-westley.alt.c, which is the original code.
Cody fixed this for modern systems. There were two invalid operands to binary
expression (char * and void and int and void) to resolve and
@@ -1396,11 +1396,11 @@ defined as C =G to make += and similar operators no lo
invalid operands to binary expressions were resolved with the comma operator.
Later on, Cody added back the macro #define D define to make it look ever so
slightly more like the original, even though it’s unused.
-
Cody also added the try.sh script and
-try.txt which the script uses.
+
Cody also added the try.sh script and
+try.txt which the script uses.
Cody fixed this so that the coordinates being specified would not crash the
program. This happened because the function that calls atoi(3) took an arg
@@ -1408,23 +1408,23 @@ without any type specified and as an implicit int it was not a
Cody also made the file name in the code (which is the default maze file) not
hard-coded but instead be __FILE__.
Finally Cody added the alternate
version which will possibly feel more at
home with those familiar with vi(m) (it certainly does feel more at home with
him): k for forward, h for left and l for right. This version also has a
more useful way to exit, just entering q followed by enter, rather than
completing or killing the program.
As some systems like macOS can be particular about not declaring functions Cody
added to the Makefile some -include options. These appear to not be strictly
necessary but it was done due to other syscalls being a problem not being
declared first.
Cody fixed a segfault that prevented this entry from working in any condition
and he also made it work for clang. He also added checks for NULL FILE *s.
@@ -1499,8 +1499,8 @@ The definition of whether that should be a bug to fix or a feature to not fix
was pondered and changed numerous times and ultimately that problem with this
entry was fixed. It has not been done in all.
Cody made it look much more like the original entry even after the fix that
increased the count in characters from 80 to 106, getting it back down to just
@@ -1513,13 +1513,13 @@ not strictly necessary (this does create a new warning: ordered comparison
which also resolved the warning described above. This was by more clever use of
the Makefile which now has a -DB=(int)b so that B can be used in place where
(int)b used to be necessary.
-
Cody also added the try.sh script which feeds the program
+
Cody also added the try.sh script which feeds the program
some fun input for fun but mostly different output. He added a great string from
Brian Westley and Cody also added several of his own (can you figure out exactly
which ones? :-) )
Cody fixed it so that the messages that show if you won or lost will be seen
after the end of the game. The reason it did not work before is curses was ended
@@ -1527,13 +1527,13 @@ at the end of the program which clears the screen. To make it look most like the
original entry Cody left the message before ending curses in and printed another
message of the same kind after endwin() was called with the exception that he
added a newline at the end of the screen to be more user friendly.
Cody also added two alt versions, one to
remove the maximum number of moves you may make and another to let you configure
the maximum number of moves, even if that is making it harder to win. Naturally
the above fix was applied to these versions too.
Cody fixed a segfault in this program which prevented it from working. The
problem was that the read-only char array char *z[] was being written to. The
@@ -1554,8 +1554,8 @@ should have been removed.
Cody fixed the code so that it will try opening the file the code was compiled
from (__FILE__), not adgrep.c, as the latter does not exist: adgrep is
@@ -1600,13 +1600,13 @@ like:
one must keep the Y[strlen(Y)-1]='\0'; part and keep it there.
These fixes are complex changes due to the way the program and Makefile generate
the additional tools.
-
Cody finally added the try.sh script that shows the entry
+
Cody finally added the try.sh script that shows the entry
and some of the tools this entry generates. Unlike other scripts, it does not
clear the screen after compilation so that one can see how the other files are
generated.
Cody fixed this to compile with modern systems. Note that in 1996 a bug fix was
applied to the code, provided as the alt code as that version is not obfuscated.
@@ -1614,12 +1614,12 @@ Thus Cody’s fix applies to the original entry. The problems were that ma
is not the correct header file now (at least in some systems?) and a non-void
(implicit int) function returning without a value. That function was changed to
return void.
-
Cody also added the try.sh and
-try.alt.sh scripts that correspond to the entry and
+
Cody also added the try.sh and
+try.alt.sh scripts that correspond to the entry and
the alt code.
Cody fixed the Makefile so that the program will actually work with it (or at
least the rule to clobber files and link am to ant). The issue was that the
@@ -1635,34 +1635,34 @@ rule where a line was not ended with a \ but should have been.
The author stated that in some systems like DOS with Turbo C, it might be
necessary to include time.h so Cody did this as well as this exists in other
systems too.
Cody added a check for the right number of args, exiting 1 if not enough (2)
used. This was not originally done but at a time it was changed to be considered
a bug so it was fixed at that point as it only took a few seconds and had to be
verified that it was consistent with the bugs.html file.
Cody also added the mkdict.sh script that the author
included in their remarks. See the index.html for its purpose. It was NOT fixed
for ShellCheck
because the author deliberately obfuscated it so PLEASE DO NOT FIX THIS OR
@@ -1673,22 +1673,22 @@ from stdin after starting the program). Ideally fgets(3)
1992/gson in bugs.html for more
details if you’re interested in trying to understand it (or fix?).
The original code, imc.orig.c, assumed that exit(3)
returned a value but this will cause problems where exit(3) returns void. The
source code was modified to avoid this problem but like Cody did with other fixes
he made this more like the original by redefining exit to use the comma
operator so that it could be used in binary expressions.
Yusuke supplied a patch which makes this work with gcc. Due to how it works (see
Judges’ remarks in the index.html file) this will not work with clang.
Cody added the original file back as it was deemed that the export restrictions
should no longer be a cause of concern for this entry. Doing this did require a
@@ -1730,11 +1730,11 @@ change to Cody’s 2020/ferguson2 entry
referenced.
Cody cynically noted that if he goes quiet, for instance if he no longer
participates in the IOCCC, that it must be our fault! :-)
-
Cody also added the try.sh script that runs a few commands
+
Cody also added the try.sh script that runs a few commands
that we suggested as well as one he provided.
Cody fixed an infinite loop if one were to input numbers < 0 or > 077. The
problem was that it tried to use scanf(3) with the format specifier "%o %o" in a
@@ -1748,8 +1748,8 @@ both numbers (using "%o %o" does not solve the problem).
This was deemed a problem to fix as the Judges’ remarks hinted that this was how
it used to be.
Cody fixed this to work for clang by changing the third and fourth arg of
main() to be char ** insidemain(); clang requires args 2 - 4 to bechar
@@ -1767,11 +1767,11 @@ should help make it much easier to use. Note that if the number of columns is &l
the final loop it prints another newline. This fix has another bonus in that
resizing the terminal after running it should not mess up the display either,
unless of course it becomes too small.
Cody added the scripts whereami.sh and
+whereami.alt.sh which correspond to the entry and
the alt code but first check that the number of columns is at least 80 and if
not it is an error.
-
Cody added the try.sh script that shows the different
+
Cody added the try.sh script that shows the different
cities that the author recommended one try as well as the one recommended by the
judges (approximate judging location), labelling each city and printing a
newline before the next city. The try.sh script uses the whereami.sh and
@@ -1780,7 +1780,7 @@ first tries to make it executable and if it fails to do so it just uses
westley or westley.alt. The scripts can be deceived by COLUMNS=80 ./try.sh
(or COLUMNS=80 ./whereami.sh etc.) but this is a feature, not a bug.
Cody also added an arg check because the program and the
-alternate version might have crashed or
+alternate version might have crashed or
nuked the entire
world or just the
USA, respectively, without enough
@@ -1790,35 +1790,35 @@ encourage you to try the original without two args :-)
Yusuke suggested that with modern systems this goes too fast so he added a call
to usleep(3) in a patch he made. Cody made it configurable at compilation by
using a macro. This is in the alt version which is the recommended one to try
first.
Both Cody and Yusuke fixed this so that it will work with modern systems. Yusuke
provided some fixes of the X code and Cody fixed the C pre-processor directives
@@ -1829,16 +1829,16 @@ so that it would compile. It used to be that you could get away with code like:<
case but that’s no longer the case so the offending lines had #define
prepended to them.
Cody added an alternate
version which does what the program did
with gcc < 2.3.3. See the index.html file for details and for why this was made
the alternate version, not the actual entry.
@@ -1846,22 +1846,22 @@ the alternate version, not the actual entry.
would be compiled if gcc < 2.3.3) whether or not compilation succeeds (which is
highly unlikely).
Cody also added an alternate version which uses
usleep(3) so you can see what is happening with faster systems. This version
also checks for two args and it is the one we recommend one try first. See the
index.html files for details.
-
Cody also added the try.sh and
-try.alt.sh scripts that correspond to the original
+
Cody also added the try.sh and
+try.alt.sh scripts that correspond to the original
entry and the alt version, both allowing one to change the args (and in the case
of the alt one allowing one to change the amount to sleep).
Yusuke supplied a patch to get this to work in modern systems. This fix also
applies the compatibility issue of select(2) described in the index.html file.
@@ -1873,13 +1873,13 @@ users. The slowing down was based on our suggestion that it might be desired to
slow down but Cody did it in such a way that makes it easy to configure at
compile time. See the index.html for details.
Cody fixed this to work with clang. The problem was that the third arg to main()
was not a char **. InsteadO5()(which wasmain()via-DO5=main`) is now
@@ -1898,13 +1898,13 @@ work).
but fixed to work with clang as well.
NOTE: the N1 and N2 are provided as notes in the index.html file describing
this code. Other code is also described there.
Cody fixed an infinite loop that could happen when you shoot an arrow
and end up having no arrows, thus making one force quit the game. The problem
@@ -1931,8 +1931,8 @@ Now the counters are reset. The way this bug was fixed is that there is now a
counter for how many you have found and how many you shot in addition to the two
that already existed, how many you had and how many were stolen.
Cody fixed this to check that four args were specified (at a time it
was considered a bug to fix). With the use of the C pre-processor macro and
@@ -1941,27 +1941,27 @@ same column width and no additional lines were added. This was done during one
of the times where this was changed to bug to fix status, for better or worse.
Cody also fixed the Makefile which was causing alt code to be compiled when it
shouldn’t be.
Cody also added inclusion of unistd.h for getpid(2). While strictly speaking
this was not necessary (in multiple systems) it can sometimes be a problem and
as it was noticed it was changed (the only case this was done except in the
entries that actually did not work because of missing or incorrect prototypes).
Cody fixed this so it would compile and work with modern compilers. The problem
was that srand() returns void but it was used in a || expression. Thus the
@@ -1979,14 +1979,14 @@ unless 2>/dev/null - and the difference is that now it’s just
rather than an annoying warning. A subtlety about this fix: if a line is greater
than 231 in length if the program chooses that line it might print the first 231
characters or it might print (up to) the next 231 characters and so on.
Cody fixed a bug on systems where EOF != -1. The problem is that getc() and
the related functions do not return -1 on EOF or error but rather EOF.
@@ -2012,19 +2012,19 @@ where EOF != -1 it could result in an infinite loop.
For an interesting problem that occurred here and what was done to solve it,
check the bugs.html file.
Cody added the try scripts, four total, colour and black and white
pairs for the original entry and the alt code. These scripts are
-try.color.sh, try.bw.sh,
-try.alt.color.sh and
-try.alt.bw.sh, respectively. The scripts go through
+try.color.sh, try.bw.sh,
+try.alt.color.sh and
+try.alt.bw.sh, respectively. The scripts go through
each mode allowed with two sizes, 128 and 256, allowing one to quit or skip each
(given that there are a lot of invocations this seemed like a good idea).
Cody also made this use fgets(3) instead of gets(3). In this case the newline had
@@ -2033,38 +2033,39 @@ to use fgets() and the inclusion of stdio.h had to be
more like the original entry this was done in the Makefile. The alt code was
also changed to use fgets(3).
Cody changed the Makefile to make this program more user friendly and easier to
use with other tools as well by making the program output not a space after each
number but rather a newline.
-
Cody also added the scripts try.sh and
-primes.sh. The primes.sh script is used by
+
Cody also added the scripts try.sh and
+primes.sh. The primes.sh script is used by
try.sh and if both primes(1) and rev(1) are installed it will reverse the
lines of the weisberg, feeding it to primes(1), showing those that are
primes. It only does the reversed output because the program actually prints
primes.
Cody converted the spoiler compiler options (provided by the author) to be
-compiler commands and added a script try.sh to
+compiler commands and added a script try.sh to
automate the spoiler commands to make it easier to see the game in action from
start to finish.
Cody also added the alternate version that will look fine on terminals not set
-to 80 columns and the try.alt.sh script to automate
-the play along the lines of the try.sh script.
+to 80 columns and the try.alt.sh script to automate
+the play along the lines of the try.sh script.
Cody fixed this so that it would work with macOS. Once it could compile it
additionally segfaulted under macOS which he also fixed.
-
Cody also provided the Alternate code for fun :-) ) (in
+
Cody also provided the Alternate code for fun :-) ) (in
particular to make it easier to see the program do what it does in systems that
are too fast … if there is such a thing anyway :-) ). See the index.html for
details on this.
@@ -2075,67 +2076,77 @@ It actually appears to allow 1 but if you specify 4 it says 0, 2 or 3 and it is
an error but it’s entirely possible that they will eventually make the defect
function as the error message claims.
Cody fixed the alt code so that it will compile with modern compilers. The
problem was a missing int for the f variable. He felt it was even more
important that it works because the layout does indeed look to him like a rat is
dropping core :-), something that the judges suggested.
-
Cody also renamed garry.test.sh to try.sh and improved it
+
Cody also renamed garry.test.sh to try.sh and improved it
to to make sure the program is compiled before trying to use it as well as
adding a few enhancements. For the alt version he also added the
-try.alt.sh script to use the alt version, though the
+try.alt.sh script to use the alt version, though the
alt version is not as important as alt code in other entries. In order to get
the paging to work right for the garry.data file leading blank lines had to be
added.
Cody fixed this so that it will compile with versions of clang that has a defect
which only allows main() to have 0, 2 or 3 args. This is done by a new
function (pain() as it’s annoying that clang is this way :-) ) that main()
calls which has the four args.
Cody added the authors’ spoiler as a C
file as in 2023 we have decided that in most
cases all the code should be available for the wider audience, without having to
extract it. The exception is when the files are created by the entry or the
entry decrypts the text or something like that.
Cody fixed a segfault in this program that prevented it from working right and
also fixed an infinite loop in the try commands.
@@ -2144,11 +2155,12 @@ lines starting with # removed and it was not being done. After this
with say sed(1) (like sed -i'' '/^#/d' august.oc which has been added to
both the remarks and the try.sh script noted below) the code can proceed. This
problem existed in macOS.
-
Cody also added the try.sh script that runs all the
+
Cody also added the try.sh script that runs all the
commands that were given by the judges in the try section, with the fix above
applied.
Cody proposed a fix for this to compile with clang and Landon implemented it
after some discussion (though Cody changed the function name). The reason Cody
@@ -2162,46 +2174,52 @@ the fix was wrong.
number is printed on a line by itself rather than having a long string of
numbers on the same line. This was not put in an alternate version but perhaps
it should be.
-
Cody provided an alternate version which uses
usleep() in between writing the output to make it easier to see what is going
on with faster systems and importantly also for those who are sensitive to text
flashing by rapidly (it affects him too but he also thinks it moves too fast
nowadays anyway). We recommend that you try the alternate version first due to
these reasons.
Cody fixed this to compile and work with modern systems. As he loved the
references in the code that could not compile he just commented out as little as
possible to get this to compile.
-
Cody also added the rather useful try.sh script to
+
Cody also added the rather useful try.sh script to
really demonstrate the different ways of running the program ends up showing
either different output or the same output that we briefly pointed out.
BTW: it is perilous to try the patience of
Gandalf. Go ahead, try it! :-)
Cody fixed this to not segfault under macOS. The problem was that the function
pointer w, which points to XCreateWindow(), did not specify the parameters of
the function in the pointer assignment.
NOTE: if there is no X server running this program will still crash.
The author stated that -I/usr/include is needed by gcc in Solaris because
errno.h has two identical extern declarations of errno. That leads to an
error due to the redefinition of main but the -I option makes sure the
@@ -2210,20 +2228,23 @@ on other systems (the other file is
gcc-lib/sparc-sun-solaris2.5/2.7.2/include/errno.h). Thus Cody also added this to
the Makefile despite the fact that very few probably use Solaris nowadays.
Cody added the try.sh script with a few commands to try
+
Cody added the try.sh script with a few commands to try
along with a shorter version of something the author suggested one try (it is
suggested that one try the longer version too but it will run in an infinite
loop so having it in a script is less desired).
Cody updated the Makefile so that if it fails to compile it will try he
method suggested for SunOS rather than having to update the Makefile manually or
running a more complicated command: now one can just run make.
Cody fixed a segfault in this entry as well as it displaying environmental
variables. Although the scripts showed correct output, it somewhat lessened the
@@ -2232,11 +2253,11 @@ interspersed with the output of the program. With the fix they no longer have
this problem. If argc < 5 (argv[4] is referenced) it will not do anything
and it will not segfault either - this was caused by the body of the for() loop
which is now empty (it doesn’t appear to be needed at all at least modernly).
-Note that you should check the westley.alt.c file
+Note that you should check the westley.alt.c file
when reading the author’s comments. To see how to use the original, see the
index.html file.
-
Cody also added the two scripts, try.sh and
-try.alt.sh to automate showing the different
+
Cody also added the two scripts, try.sh and
+try.alt.sh to automate showing the different
clocks, both with the fixed version and the original (alt) version.
Also, to fix any potential problem with displaying in GitHub the scripts
provided by the author, Cody added ‘.sh’ to the clock[1-3].sh scripts.
@@ -2244,20 +2265,22 @@ provided by the author, Cody added ‘.sh’ to the clock[1-3].sh s
Cody improved the Makefile to allow for easier redefining the control
keys and time step that the author set up.
Cody also set up the Makefile to have an alt build (using the same code) for those
who do not have a page up or page down key and added the
-keysym.h header file as a reference for other keys one
+keysym.h header file as a reference for other keys one
can use if they wish to modify the controls. One can certainly do this even if
they do have page up and page down but this gives a default for those who don’t
have them like with Macs. The alt build hard codes the page up and page down
alternatives because not doing so would overly complicate both builds and since
you can configure them all in both builds it shouldn’t matter.
Cody, out of an abundance of caution, added a second arg to main() as some
versions of clang whine about the number of args on top of what type they are
@@ -2265,23 +2288,26 @@ In particular some versions claim that they only allow 0, 2 or 3 args. It
appears that they do allow 1 but for instance 4 is not allowed. However as it’s
quite possible they will ‘fix’ this defect it would be better to have this not
be a problem at such a time.
-
Cody also added the bas1.sh script to simplify running the
+
Cody also added the bas1.sh script to simplify running the
program.
Cody added a call to endwin() to restore terminal sanity (echo etc.) when
exiting the program (in both versions).
-
Cody also added the try.sh script that runs the program on
+
Cody also added the try.sh script that runs the program on
all the data files, giving instructions on how to rotate and zoom in and out,
prior to each run.
Cody changed a int * used for fopen(3) to be a FILE * to be more correct
and prevent any possible problems in some systems (which has happened).
@@ -2289,32 +2315,36 @@ and prevent any possible problems in some systems (which has happened).
the old style of main() args so that it reads i,love_unix more naturally,
and by changing the typedef int lint to be typedef int _int. See the code
for why this has to be done this way.
-
Cody also added the try.sh script which runs the program in a
+
Cody also added the try.sh script which runs the program in a
loop until one hits q (or Q) or sends intr/ctrl-c. He also proposed there’s
a way to cheat very easily. Can you figure out how?
Cody added alt code which has vi(m) movement
(in addition to the other keys except for dropping it’s not d but j or
space) keys as well as allowing one to quit the game.
Cody fixed this to compile. The problem was the intermediate steps to get to the
final code that is compiled. The code is now what it essentially becomes when
@@ -2328,10 +2358,11 @@ is mostly just through the C pre-processor Cody added a new macro to make the
code look like the original with just an extra arg.
In some versions of clang -Wno-int-conversion had to be added to the
CSILENCE variable of the Makefile.
-
Cody also added the try.sh script to show the output of some
+
Cody also added the try.sh script to show the output of some
of the expressions that we selected.
Cody fixed invalid data types which prevented this entry from working, causing a
segfault. This showed itself in two parts which required two fixes, one for
@@ -2346,10 +2377,11 @@ doesn’t crash. At this point since the author stated it has no whiledo...while, for, if/else, switch, ?: Cody removed the if statement by
doing:
Cody fixed this for modern systems (it did not work at all) and added an
alternate version that works with macOS. Cody also made it ever so slightly more
@@ -2391,9 +2423,10 @@ as the author stated: as long as the options -E -dM of the compiler
the macros in the form of gcc -dM i.e., the lines are in the form #define MACRO value it will work, assuming that compiler can run, of course.
Cody also added the perl script that the author provided that they used to
compute the character count in the code according to the contest rules of 1998
-in the file charcount.pl.
Cody fixed the code to not trigger an internal compiler error in gcc:
:10:16: warning: type defaults to 'int' in declaration of 'zero' [-Wimplicit-int]
@@ -2402,23 +2435,24 @@ in the file charcount.pl.
:12:19: internal compiler error: invalid built-in macro "__FILE__"
The string "01\015" had to be changed to ONE(O(1,1,2,6,0,6)). For an
interesting historical explanation and further details and fun, see the
-historical remarks in the
+historical remarks in the
index.html.
Cody also added an int after register in main() in case clang decides to
have a problem with that in the future which is not entirely out of the
question.
Cody added the alternate code which allows one
to reconfigure the size constant in the rare case that the author wrote about
occurs.
Cody made main() have two args out of an abundance of caution as some versions
of clang say that main() can only have 0, 2 or 3 args. These versions accept 1
arg but it is entirely possible that they fix this so this should prevent it
from breaking if that happens.
-
Cody added the try.sh script to make it easier to try
+
Cody added the try.sh script to make it easier to try
the commands that we suggested. One command was not added, that of the to use
command.
Cody also made the Makefile rule all symlink the entry to samefile as that
@@ -2434,7 +2468,8 @@ for more details.
There actually is a web page for the tool and this was added to the author
information for the entry. It has not been added to any JSON file.
Cody fixed the assumption that EOF is -1 (the author noted that it assumes
it is -1 and it’s indeed a valid concern as the standard only guarantees that
@@ -2443,55 +2478,62 @@ unlikely that it wouldn’t be but since the author suggested it it was changed
EXIT_FAILURE). To make it so the lines end at the same columns as the original
the EXIT_FAILURE change was done by redefining exit(3) to be exit(a) return EXIT_FAILURE and 1 was passed to it (return was used because the original
program had return 1).
-
Cody also added the try.sh script to try out a few
+
Cody also added the try.sh script to try out a few
commands that we recommended.
Cody fixed this to compile with more recent perl versions; the symbol that’s now
PL_na was once na. He notes that this entry crashes under macOS but it works
under Linux after this change.
Cody fixed this for modern compilers. Depending on the compiler it would either
segfault when run or not compile at all (gcc and clang respectively).
Cody also provided alternate code that supports the southern hemisphere.
-
Cody also provided the try.sh and
-try.alt.sh scripts that show the Moon phase in
+
Cody also provided the try.sh and
+try.alt.sh scripts that show the Moon phase in
artistic ways. It is recommended one try both a number of times in a row on
different days (that is run ./try.sh several times in a row a few days apart,
until you see all the Moon phases, and run ./try.alt.sh a few times in a row a
@@ -2505,16 +2547,19 @@ like the original entry but with the two fixes.
variable which although works it is incongruent with the other Makefiles and is
more confusing (even if not confusing).
Cody fixed an infinite loop that occurred if invalid input was entered, flooding
the screen with:
@@ -2523,11 +2568,13 @@ the screen with:
on it to assign to the ints, much like with 1987/lievaart. The strings are
char[5] and the % specifier is %4s which is enough for the game.
Cody fixed the code and added an appropriate make rule so that the
SDL version works independent from the curses version
@@ -2563,11 +2610,12 @@ index.html for details on that. Note that this alternate version only will impac
the curses and the SDL versions as Cody does not have a DOS system to test the
other version in.
Cody added the alt code based on the
author’s remarks with a fix for modern systems and he also added the two
-scripts, try.sh and try.alt.sh for
+scripts, try.sh and try.alt.sh for
the main code and the alt code respectively.
And although the scripts do chmod +x on the source code (see the index.html for
details) the source code is now executable by default.
@@ -2575,7 +2623,8 @@ details) the source code is now executable by default.
Cody fixed both the supplementary program and the program itself (both of which
segfaulted and once that was fixed only the binary was modified; it was not run
@@ -2629,11 +2678,12 @@ wish to see, try the following commands from the 2001/anonymous dir
As well he added the try.sh so that one can
attempt to use the program as it was designed but if compiling as 32-bit fails
it will at least run the supplementary program as a 64-bit program directly.
Cody fixed this to compile with clang but according to the author this will not
work without i386 Linux. It generates i386 32-bit code (not bytecode) but
@@ -2645,7 +2695,7 @@ course, but it won’t work). This involved pointer updates and also changing an
case of main() this was not possible.
Yusuke added another change (see below) to make it even more portable across
compilers besides what Cody did.
Cody entirely fixed the supplementary
bellard.otccex.c so it does not segfault and
works as well (it did not work at all). The main problem was that some ints were
being used as pointers. This includes, for example, an int used as a char *,
@@ -2669,17 +2719,19 @@ versions of clang it is. With gcc we can get away with
compiler that does not support this would not work. Thus we use the modification
by Yusuke.
Cody fixed this to work with clang by adding another function that is allowed to
have a third arg as an int, not a char **. He chosepain()` because it’s a four
letter word that would match the format and because it’s pain that clang forces
this. :-) This fix makes a point of the author’s notes on portability no longer
valid, BTW.
Cody added a value to return in main() to make it more portable.
Cody fixed this to compile with clang in Linux. The problem was C99 does not
@@ -2699,9 +2751,10 @@ or /dev/sound/dsp (which is most everyone nowadays, it seems, and e
those with macOS) (to do with sound; see his
/2013/endoh3/index.html entry where he also refers to
sound devices in macOS).
The ANSI escape codes were no longer valid but Yusuke provided a patch to fix
the ANSI escape codes. This works with both Linux and macOS.
@@ -2709,10 +2762,11 @@ the ANSI escape codes. This works with both Linux and macOS.
etc.) after exiting even if you don’t press ‘q’, if you crash or if you kill the
program prematurely. This was done by adding an explicit call to e() at the
end of main().
-
The author provided two changes: one to speed it up and one to make it not crash
on losing. Cody provided an alternate version which does the former but he felt
@@ -2721,39 +2775,42 @@ might be) too good to get rid of so he kept that in.
He also points out that there is a way to get the computer to automatically lose
very quickly. Do you know what it is?
He also fixed the script herrmann1.sh for
shellcheck. In particular there were quite a few:
SC2086 (info): Double quote to prevent globbing and word splitting.
SC2248 (style): Prefer double quoting even when variables don't contain special characters.
Cody fixed this to work with both 64-bit and 32-bit compilers by changing most
of the ints (all but that in main(int ...)) to longs. He also fixed it to
compile with clang by changing the args of main to be int and char **, respectively, and changing specific references to theargvarg, casting tolong(wasintbut the 64-bit fix requireslong`) which was its old type.
-
Cody also added the try.sh script which might be more
+
Cody also added the try.sh script which might be more
useful than any other place as the command to try is quite long with C code.
For some reason the original code was missing (presumingly because it had been
added to .gitignore by accident) but Cody restored it from the archive.
Cody improved the Makefile to allow one to more easily set up the port,
speed and socket(2) call that the author had set up.
Cody also slowed down the ball just a tad (it was already a -D macro that was used
in the code) as it went too fast for the speed at which the paddles move even
when holding down the movement keys (but see below).
Cody also provided an alternate version which lets you use
the arrow keys on your keyboard instead of the more awkward ‘,’ and ‘.’.
He updated both versions to have #ifndef..#endif pairs for the macros so one
can more easily configure different settings without having to specify all of
@@ -2762,23 +2819,26 @@ done). The speed, SPEED, will be set to 50 if it’s not defined at
line as 50 is what it used to be set to. This way it’s more to the original but
without having to sacrifice playability by running make.
Cody also fixed it to not crash if not enough args, exiting 1 instead. This was
done at a time where it was said to be a bug that should be fixed, for better or
worse.
Cody fixed this to not crash if not enough args as this was not documented by
the author. The other problems are documented so were not fixed. See
index.html for details.
Cody added the script try.sh to automate a heap of commands
+
Cody added the script try.sh to automate a heap of commands
that we, the IOCCC judges, suggested, as well as some additional ones that he
thought would be fun. He also provided the sort and punch card versions,
described in the index.html, based on the author’s remarks.
@@ -2786,22 +2846,25 @@ described in the index.html, based on the author’s remarks.
Cody added an alternate version which
allows those like himself used to h, j, k and l movement keys to not get
lost. Non rogue players, vi users and Dvorak typists are invited to get lost (or
use the original version)! :-)
Cody also renamed the arachnid.info file to
-arachnid.txt as it’s not really an informative
+arachnid.txt as it’s not really an informative
file but a maze file. The extension .maz was not chosen to help with (some?)
browsers knowing what to do with it.
Cody provided the alt code for
those who want to use QEMU. The most important part of this is the macro K has
to be defined as 1, not 0.
Yusuke provided the kernel and fs.tar files which can be used if
you cannot normally use this entry. Instead of generating the files just use the
-files provided, found under the img/ directory. Note that
+files provided, found under the img/ directory. Note that
the img/fs.tar extracts into fs/ so you will have to fix the tarball; this
is done this way to prevent extraction from the entry directory overwriting the
files and causing make clobber to wipe some of them out.
Cody fixed a bunch of links in the index.html provided with the entry
(web server) that no longer exist or have changed in some other way (https
@@ -2864,11 +2930,13 @@ instead of http for instance). In most cases a new link or change t
all that was necessary but at least one or two URLs required the Internet
Wayback Machine.
Cody fixed this to compile with gcc (it worked with clang). The problem was the
cpp being unable to parse the generated code (see the index.html for details) and
@@ -2888,53 +2956,59 @@ this ended up with a number of errors like:
Cody also added alt code which allows
one to control how many numbers after the : to print before printing a
newline, so that one can see the output a bit better (though for lines that have
a lot of numbers this will be harder to see).
-
Finally Cody added try.sh and
-try.alt.sh to demonstrate both versions.
+
Finally Cody added try.sh and
+try.alt.sh to demonstrate both versions.
Cody reported that this entry cannot be optimised by the compiler as otherwise
it will not work.
Cody, out of an abundance of caution for clang, added a second arg to main()
as some versions complain about the number of args and although they accept 1 it
is entirely possible it will eventually be that they don’t.
-
Cody also added the try.sh script and various data
+
Cody also added the try.sh script and various data
files: kopczynski-a to demonstrate what happens when art more
like a letter is fed to the program and the kopczynski*-rev files which are
the data files reversed with rev(1). One had to be modified additionally to
get it to work, that being kopczynski-10-rev.
Cody and Landon individually fixed this to work with clang.
-
Cody also added the try.sh script (with a hidden feature
+
Cody also added the try.sh script (with a hidden feature
that the author referred to and was documented by Yusuke though Cody
chose the word IOCCC instead of AAA).
Also, after the README.md file had copyright changes, it broke the script so
Cody made a copy of the older README.md file into README_sds.txt and added that
to the repo for the script instead.
Cody fixed this to compile in Linux. Although it compiled cleanly in macOS (and
BSD?) the code failed to compile at all in Linux due to:
@@ -2975,53 +3049,57 @@ BSD?) the code failed to compile at all in Linux due to:
make: *** [Makefile:133: vik2] Error 1
Unfortunately the fix required heavy modification to the original file (see
below) and also inclusion of what used to be generated by the
-Makefile but now it at least works for both Linux and
+Makefile but now it at least works for both Linux and
macOS.
As for the fix itself it required changing the C pre-processor macros that
resulted in macros themselves like #ifdef, #else etc. to be #ifdef,
-#else etc. and also the inclusion of the file vik2_1.c
+#else etc. and also the inclusion of the file vik2_1.c
(which actually includes itself, once directly and now by __FILE__)
which used to be generated by the Makefile via cc -E.
Cody also made it so that the FNAME is (for the entry file itself and
vik2_1.c: it shouldn’t be done for
-vik2.possible.cat.death.c!) __FILE__
+vik2.possible.cat.death.c!) __FILE__
just to make it a bit easier to compile.
Cody fixed the test script, described by the author in their remarks, to refer
to the proper compiled program (it’s hardcoded). This had never been done and so
the script did not even work (at least modernly?).
He also added the alt code based on the
author’s remarks which is a different approach than the one used and which
(according to the author) ‘is slower (particularly in worst-case or nearly so
scenarios), inelegant, and not a good starting place for sudoku generation.’
-
Cody added the try.sh and
-try.alt.sh scripts that correspond to the entry and
+
Cody added the try.sh and
+try.alt.sh scripts that correspond to the entry and
alt code respectively.
Cody added the make test and make test-n0 rules for easier use of the test
suite.
Cody fixed a problem where in some systems (like macOS) the stty sane would
not work and end up causing a bus error. Instead of stty sane it uses stty echo which is what it was trying to accomplish.
The author noted that one can define NO_STTY to not use stty(1) at all
(either to prevent having to hit enter or to turn echo off/on) which is
explained in the index.html.
After Landon fixed the entry to compile with clang Cody noticed this
does not work at all in modern systems (see below). He fixed this to work and
@@ -3057,7 +3135,7 @@ is:
Cody also added the try.sh script which also lets one see
+
Cody also added the try.sh script which also lets one see
the beauty of the entry without having to use vi(m), should they be afraid of
getting stuck in it (and for ease of use). :-)
Finally, to improve upon the test-suite provided by the program, Cody added the
@@ -3065,18 +3143,21 @@ getting stuck in it (and for ease of use). :-)
temporary file the compilation including the ‘Line’ lines. After that is done it
uses grep -c on the file to show that there are indeed as many versions the
program generates as the author states, 180. If it does not find 180 it is an
-error; otherwise it is success. It uses test.sh.
+error; otherwise it is success. It uses test.sh.
Cody fixed this to work in Linux. The problem was an unknown escape sequence,
\N, which caused a funny compiler error:
@@ -3098,9 +3179,10 @@ feeding the program itself will print itself, showing no difference, which is
what is supposed to happen. It is not known, however, if having to change the
\N to \n ended up breaking any LISP. The other examples given by the author
also show correct output though.
-
Cody fixed this so that the configure script (which is not
needed but part of the entry) would work with compilers that have by default
@@ -3110,15 +3192,17 @@ how https is set up, in which case just enjoy it for what it was. But there
might be some command line that will let it work that way or perhaps someone
wants to add the necessary code.
Cody added the (untested) alternate
code which should work for Windows as it
sets binary mode on stdout. It is untested as Cody has no Windows system to
test it on.
Cody added the saved (with the SAVE command) BASIC program PET which was:
10 PRINT "2005'S IOCCC BEST EMULATOR"
@@ -3137,28 +3221,31 @@ test it on.
2005'S IOCCC BEST EMULATOR
BY STEPHEN SYKES!
to both save and test run it.
-
Cody added the try.sh script which runs in a loop with a
+
Cody added the try.sh script which runs in a loop with a
menu of things one might wish to try, asking if they wish to continue when done.
-
Cody added the script test.sh and the make rule test to
+
Cody added the script test.sh and the make rule test to
run the test suite. The program will enter an infinite loop after it runs so you
have to hit ctrl-c to end it which the script tells you.
The scripts note every time that one will have to send ctrl-c or whatever their
interrupt is set to in order to exit the program.
Cody added try.sh. It only has one command as he doesn’t
+
Cody added try.sh. It only has one command as he doesn’t
want to knacker his brain any more than it might or might not already be :-) and
he doesn’t want to damage anyone else’s brain either. :-)
Cody fixed this to compile with some versions of clang which have an additional
defect where main() can only have 0, 2 or 3 args (it was 4). It now calls
another function that takes 4 args and which is what used to be main().
Cody fixed this in the case that the program is compiled or linked/copies to
another file name: the code constructed the source code file name in a clever
@@ -3173,34 +3260,39 @@ if one runs it from another directory, specifying the directory, it’ll not cat
Cody also fixed the Makefile to use sdl-config (which is what the author
stated too though that was noticed later), not sdl2-config as two functions
that are used were removed from SDL2,
@@ -3211,17 +3303,19 @@ the original it was simply made to link in SDL1.
Cody fixed this entry to work with clang which has a defect with the args to
main(): it requires specific types: int and `char ** for the first and
latter args.
Cody also provided the alternate version, which
allows one to see what is going on in modern systems, and which we recommend one
use first.
Curiously, although clang requires the types of args to be strictly correct,
@@ -3239,36 +3333,41 @@ by default.
Since the author suggested that the lack of certain #includes might break the
program in some systems he also added -include ... to the Makefile as well.
Cody also fixed it so that if the file cannot be opened it exits rather than trying
to read from the file. This was done at a time when it was considered to be a
bug to fix.
Cody also provided the bedlam-cubes.pdf file,
obtained from the Internet Wayback Machine, as the file was no longer available.
The video was also no longer available but Cody found an alternative and added
it to the repo as well.
Cody, out of an abundance of caution for clang’s defects, made main() have
to args instead of 1 as some versions report that main() must have 0, 2 or 3
args, even though at least one of those versions allows 1 arg only.
-
Cody also added the try.sh script for easier use of the
+
Cody also added the try.sh script for easier use of the
entry to show the clock update in real time.
Cody fixed a segfault in this program which was making it fail to work under
macOS - it did not seem to be a problem under Linux, at least not fedora. The
@@ -3283,7 +3382,8 @@ the program and modified the fread(3)/fwrite(3) sectio
(perhaps Cody’s fix was for arm64 only?). Also, he added a note to clarify from
where appears the IMPORT.COM and HALT.COM files.
Cody fixed a crash and a display problem in this entry so that it now works in
modern (64-bit) systems. The crash appears to only occur in macOS but the fix
@@ -3291,72 +3391,83 @@ lets it work in both Linux and macOS. The problem was that it relied on 32-bits
so some ints were changed to longs. The display problem might or might not
have been a problem in Linux with the old ints but this is no longer known.
Cody also added the code that should work for Windows,
-toledo3.alt.c, based on the author’s remarks.
+toledo3.alt.c, based on the author’s remarks.
We’re not able to test this.
Cody, out of an abundance of caution, added a second arg to main() as some
versions of clang complain about not only the type of each arg to main() but
the number of args as well.
Cody fixed this for macOS. Before the fix it segfaulted. It worked fine under
Linux. After fixing it it was noticed that the author stated it does not work
for 64-bit so it was then tested as a 32-bit binary (Linux) and 64-bit binary
(Linux, macOS) and both work. It was fixed by changing some ints to longs
and now it does work with 64-bit systems as well as 32-bit systems.
Cody fixed a minor problem that showed up in both Linux and macOS. He notes
however that as of this time this entry does not work properly with macOS at
@@ -3366,57 +3477,63 @@ particular with the silicon chip. See 2011/ric
bugs.html for more details and a
document from Apple about how it might be fixed if anyone is brave enough to
try. If they do they might want to look also at
-richards.alt.c, for whatever it might or might
+richards.alt.c, for whatever it might or might
not be worth, as it is a possible starting point that Cody added.
-
Cody also added the try.sh and the
-try.alt.sh scripts. The try.alt.sh script will be
+
Cody also added the try.sh and the
+try.alt.sh scripts. The try.alt.sh script will be
helpful to test any fixes for Apple silicon chips (see 2011/richards in
bugs.html for more details).
Cody added two alternate versions: one that
lets one reconfigure the controls and also the size of the game and another
version that should work in Windows, based on the author’s remarks and support
file, layer.c.
The Makefile was also modified by Cody to make it simpler to redefine the
controls, width and height.
Cody also added an alternate version for Windows
based on the author’s comments (along with looking up the function for the right
header files). To build try the alt rule of the Makefile.
Cody also added alt code that should work on
Windows, based on the author’s remarks that if the system distinguishes binary
and text then stdout needs to be set to binary mode.
Cody also added two alt versions that
let one control how fast the fluid moves (how long to sleep in between writes)
and also the gravity factor, the pressure factor and the viscosity factor as
well as an alarm that lets one run it in a loop without having to hit
@@ -3425,30 +3542,32 @@ one to easily do this with variable names rather than redefining CDEFINE
The two different alt versions is because there are two versions: the original
and the colour version added by the author, Yusuke, at the request of
the judges.
-
Cody also added the try.alt.sh script that compiles
+
Cody also added the try.alt.sh script that compiles
the alt code in two ways, one with setting the gravity factor to I and another
with the default, and which is run on the source file and each of the text files
supplied by the author. This code has an alarm set at 10 seconds so that one
need not hit ctrl-c/intr in between .. say to make it more fluid :-)
Cody also added the try.alt.bw.sh which is the
same as the try.alt.sh except it does not use the coloured version.
-
Finally Cody added the try.sh and
-try.bw.sh which correspond to the coloured version
-endoh1_color.c and the original submitted
-version without colour, endoh1.c.
Finally Cody added the try.sh and
+try.bw.sh which correspond to the coloured version
+endoh1_color.c and the original submitted
+version without colour, endoh1.c.
+
The endoh1.alt2.c was provided by the author,
Yusuke, at the time of the contest as a de-obfuscated version.
Cody also changed argv to be not const char ** butchar , mostly out of an
abundance of caution in case clang, which already imposes restrictions on the
types of args to main() including to do with `char , decides to further
@@ -3461,21 +3580,24 @@ recent domain. For historical purposes the old link was
http://recipes.stevex.net/ but it redirects to https://www.mealsteps.com
which the recipe file now links to.
Cody added the try.sh script and the helper
Makefile rules hint.pdf, hint, hello.pdf and hello to simplify the
procedure for both hint.pdf and hello.pdf as well as compiling them as C.
Cody added the try.sh script and restored the original hint
markdown file as the changes made when converting to a GitHub
index.html made the generated html not look correct; it did not have a title, a
stylesheet etc. due to the fact that there is no # header (which specified
title and stylesheet) and other formatting changes.
Cody added alt code that fixes a problem where in German ‘v’ sounds like ‘f’
which the program has as ‘f’: with the original version it would translate
@@ -3487,48 +3609,53 @@ considered a feature and not a bug so an alt version is the better way to go
about it. Using both, however, allows one to experience different capabilities
and also enjoy or appreciate the entry even more, given how simple the
difference is.
-
Cody also added six scripts: en.sh,
-de.sh, en.alt.sh and
-de.alt.sh which count from 0 through 13 in English and German
+
Cody also added six scripts: en.sh,
+de.sh, en.alt.sh and
+de.alt.sh which count from 0 through 13 in English and German
using the original entry and the alt version respectively.
In the German scripts it uses the umlaut and also does it without the umlaut
(add an ‘e’). Notice how the program picks up on this! All scripts can use
either version but the .alt.sh versions default to the alt version whereas
the other defaults to the submitted entry. See the index.html for details.
-
The fifth and sixth scripts, try.sh and
-try.alt.sh, run a sequence of commands to
+
The fifth and sixth scripts, try.sh and
+try.alt.sh, run a sequence of commands to
show different languages and numbers with the submitted and alternate version
respectively. Notice how a single letter changes so much!
Cody added the alternate versions
which will, if no arg is specified, read in the program itself, rather than
/dev/urandom. This is mostly useful for those without a /dev/urandom device
file (the default for the entry). The second alternate version is like the first
except that it also sets binary mode on stdin and stdout which should
theoretically make it work in Windows.
Based on the author’s description it should be able to get this entry to work
for Windows. With his instructions Cody also added the alternate version that
does this for the few who might use Windows.
Codytest.sh script and the make test rule
that uses the script along with a number of files that will correctly be flagged
as incorrect (including a text file and a java file, with a joke, to show that
it’s not that it parses C but rather just matching pairs though that’s probably
@@ -3543,7 +3670,8 @@ it easier for those who do not know how, and to make it more obvious to try it.<
Cody changed the return 0; at the end of the program to be return system("reset"); (via redefining exit(3) so that the column ending would be
the same) so that as long as it runs to completion the terminal will be sane and
@@ -3554,19 +3682,22 @@ these were not done.
done, based on the author’s recommendations, except that Cody made it
configurable at compile time. The Makefile was modified in such a way as to make
it very easy to redefine it at compile time.
-
Cody also added the try.sh script for the entry and the
-try.alt.sh script for the alt code.
+
Cody also added the try.sh script for the entry and the
+try.alt.sh script for the alt code.
Cody fixed this to compile with modern systems. The problems were that
localtime() is used differently and time.h being included (with
@@ -3581,28 +3712,29 @@ This meant that at one point to be strictly technical, the removal of
failed to compile again also due to localtime() so he removed the prototype
entirely to solve the problem.
Cody also slightly improved the runme script (renamed to
-cable3.sh for consistency with other entries that have
+cable3.sh for consistency with other entries that have
wrapper scripts) to not assume that the program has been compiled by running
make clobber all || exit 1 and he also made it pass shellcheck (using [[ .. ]] over [ .. ]).
-
As well, based on the author’s remarks, Cody added the alternate
+
As well, based on the author’s remarks, Cody added the alternate
code which should be compilable for Windows/MS Visual
Studio. This is done by in the compile line undefining KB (-UKB) and then in
the source code defining KB to what the author suggested,
(kb=H(8),kbhit())&&(r[1190]=getch(),H(7)). It need hardly be mentioned that
this will not link in Unix systems (including macOS).
Clang required a -Wno- option as well.
-
Finally Cody provided the bios.asm that the author
+
Finally Cody provided the bios.asm that the author
referred to, found at the GitHub repo for the
entry, and the ‘ready-made
40MB hard disk image containing a whole bunch of software’ in hd.img that the
author linked to at https://bitly.com/1bU8URK.
Cody added the source code that we suggested one should compile and run with
-different compilers as fun.c. He modified the Makefile so
+different compilers as fun.c. He modified the Makefile so
that running make all will compile it, saving you the effort.
-
He also provided the script slflen.sh which is based on
+
He also provided the script slflen.sh which is based on
the author’s remarks, fixing it for shellcheck and improving upon it (show what
files will be processed). This script shows the sparkline of the file lengths
(as in wc -c). The fixes (but not the improvements) were added to the author’s
@@ -3611,16 +3743,18 @@ remarks.
running make all will create a symlink to dlowe as sparkl. Running make clobber will delete both and running make clobber all will ensure that the
symlink is created. The slflen.sh script also explicitly makes sure to create
the symlink as it uses it, even though it runs make clobber all.
-
Cody also added the try.sh script to more easily try the
+
Cody also added the try.sh script to more easily try the
program.
-
He also added the diff.sh script which is based on some
+
He also added the diff.sh script which is based on some
commands to try that he suggested to see how different lengths look.
Cody fixed the Makefile check rule so that it checks :-) that both
Ruby and ImageMagick are
@@ -3638,17 +3772,19 @@ not installed, and after checking these requirements it will exit if either is
not found.
The entry can still be enjoyed if you do not have these tools, however.
Cody added the endoh4.sh script which temporarily
turns off the cursor as suggested by the author, with the addition that if no
-file is specified it will feed the source code endoh4.c
+file is specified it will feed the source code endoh4.c
to the program rather than the file specified. It does not try and detect if the
file exists or can be read as that will be handled by the shell/program. One may
pass more than one file to the script.
@@ -3656,7 +3792,8 @@ pass more than one file to the script.
author’s remarks for more details on what this means). The endoh4.sh script
allows one to redefine it as well.
Cody fixed the Makefile so that this would work properly. Before this
the use of the program just did what the judges’ remarks said as far as how it
@@ -3676,9 +3813,10 @@ does not).
Further, after the file 2013/hou/doc/example.markdown was moved to
2013/hou/doc/example.html to match the rest of the repo
this broke make which Cody also fixed.
Cody fixed this so that the server would not refuse the connection
after the first call to close(2). The problem was that because the backlog to
@@ -3687,26 +3825,30 @@ The backlog was changed to 10 and this solves the problem. It is not known if
this was specific to macOS but it was not specific to a browser as Safari and
Firefox both had the problem.
Cody provided the alternate
code that lets one redefine the port to
bind to in case there is a firewall issue or there is some other reason to not
have the default port. Remember that ports < 1024 are privileged. It also lets
@@ -3714,9 +3856,10 @@ you redefine the timing constant STARDATE (see the author’s remar
details on this macro). The Makefile was made to use variables so it’s easier to
redefine the port and timing constant.
Cody added alt code that lets
one (via the Makefile) reconfigure the coordinates but instead of being a
modified version of the entry it is the version the author provided which would
be what the program would look like if, as the author put it:
@@ -3729,11 +3872,12 @@ application source code is intentionally kept to a bare minimum.
return statement (this might have been fixed in the index.html file too) so
that was fixed and it also has #include <stdio.h> for putchar(3). The
#ifndef..#define..#endif was not part of the original alt code, of course.
-
Cody added the rake.sh script and make rake
rule that runs the script. This script will check that rake is installed and
if it is not it will report this and then check that gem is installed. It
checks that gem is installed in this case because gem is how you install
@@ -3742,50 +3886,56 @@ install gem. Then it tells you how to install rake. If
then it tells you to install a specific gem and then to try again. Finally if
rake succeeds it will verify that prog is executable and if it is it will
run it.
Barely worth noting but done nonetheless, Cody renamed the read_me.html
file to spoilers.html to be clearer in its purpose as
it is a file with spoilers (and too close to index.html?).
Cody fixed the code so that the game can play automatically like it
once did. The problem is that it expects a certain file name which was
sinon.c. The code now refers to prog.c.
-
Cody also fixed the scripts glock.sh and
-hecate.sh which did not work after running either once
+
Cody also fixed the scripts glock.sh and
+hecate.sh which did not work after running either once
as they compile run.c and then do ./run | tee run.c which overwrites it with
output that is not code.
-
Cody also added the try.sh script that will first (if perl
+
Cody also added the try.sh script that will first (if perl
is installed) run the demo mode and then after that it will run the above noted
scripts in a loop until the user says they do not want to try again (or they
kill it). This is done this way in case it jams (see index.html for details).
Cody fixed the Makefile to compile this entry in modern systems. The problem was
that the CDEFINE variable in the Makefile was missing 's: the #define CC
@@ -3799,9 +3949,10 @@ added later to make it more portable.
The program creates files in the working directory as part of how it works (see
the index.html file for details) so Cody made sure that make clobber (via make clean) removes those files and so that they are ignored by .gitignore.
Cody added the try.sh script. Cody notes that there
+
Cody added the try.sh script. Cody notes that there
is a bug that will show itself as one of the features does not work right. The
translation of the raw audio to text is buggy in some cases.
Cody also added an alternate version that is based on the author’s remarks that will
@@ -3809,9 +3960,10 @@ theoretically work for Microsoft Windows compilers (if anything works in Windows
:-) ). We have no way of testing this and if anything has changed since 2014
that would break it we do not know.
Cody added the try.sh script which is based on
the command to try in the ‘try’ section but improved so one can more easily
specify what ident tool they want to use and also change which sed to use,
should they want to. It also checks that both of these two tools exist and are
@@ -3821,7 +3973,8 @@ output.
Cody fixed the code so one can make use of the echo feature, where the
first character of the filename starts with e. The only way it would work
@@ -3832,16 +3985,16 @@ before that is if one did something like:
(./eprog). This was done by adding to the Makefile -include libgen.h and
adding to main() after the variable declaration (V*A;) the code:
*K=basename(*K);
-
This was done for both the prog.c and
-prog.alt.c. The Makefile was also updated to build
+
This was done for both the prog.c and
+prog.alt.c. The Makefile was also updated to build
eprog and eprog.alt to make use of the feature more easily. Each is a new
target (first in TARGET and second in ALT_TARGET) which have a prerequisite
of ${PROG} and ${PROG}.alt respectively both of which also copy the prog
(prog or eprog) to the respective eprog (eprog or eprog.alt). With
these changes now one can easily use the echo feature the author implemented.
-
Cody also added the try.sh script. This involved
-adding a text file, try.this.txt.
-
Cody also added calc.1 in place of calc.man to have
+
Cody also added the try.sh script. This involved
+adding a text file, try.this.txt.
+
Cody also added calc.1 in place of calc.man to have
proper formatting (in the style of man(1)). The calc.man was removed so as
to not have to maintain two copies of the same text.
Cody updated the Makefile to copy the prog to calc and prog.alt to
@@ -3849,7 +4002,8 @@ to not have to maintain two copies of the same text.
called calc and is in documentation including the man page. Thus one only need
add a ./ to the commands in the man page/index.html.
Cody fixed this to compile with Linux which was having a problem with duplicate
symbols of main(). The fix is through the compiler option -fcommon which
will let it compile like it does with macOS.
-
Cody also added the try.sh script which makes use of the
+
Cody also added the try.sh script which makes use of the
make rule he added (to enjoy the theme of the entry, Back to the
Future using this entry by
simply typing make back_to or make mullender) and then runs the famous
-1984/mullender.c.
Cody added explicit linking of libm (-lm) for systems that do not do this
(Linux doesn’t seem to but macOS does).
-
Cody also added the try.sh script and the large file large
+
Cody also added the try.sh script and the large file large
which the try.sh script uses.
-
Cody also added the RFC 1321 text file, rfc1321.txt to
+
Cody also added the RFC 1321 text file, rfc1321.txt to
the directory, to make it so one need not download it, and which the index.html
file now links to.
Cody added the try.sh script, downloaded the War
-and Peace text file, fixed the avgtime.sh script (it
+
Cody added the try.sh script, downloaded the War
+and Peace text file, fixed the avgtime.sh script (it
resulted in standard input errors in piping to bc(1)) and added the
-cc.1 man page as not all systems have it (in fact it’s
+cc.1 man page as not all systems have it (in fact it’s
gcc(1) from Rocky Linux).
Cody added the try.sh script which changes the
parameters to what we had in the judges’ remarks to make it easier (he only died
when he tried to mark a reminder complete on the other side of the screen at the
same time and he almost survived that, scoring at that point over 90 - but this
also involves good eye-hand coordination and playing games like this in the
past).
Cody fixed the build so that EOF will be -1 as the program assumes
this. It was decided by Cody to do -UEOF -DEOF=-1 so as to not have to modify
the code any with C preprocessor directives (the preferred way) or changing
EOF to -1.
Cody fixed an unfortunate typo in the Makefile that was preventing some of the
files from compiling properly, trying instead to compile already compiled code.
He also added explicit linking of libm (-lm) for systems that do not do this
(Linux seems to not but macOS does).
Cody also, out of abundance of caution, added a second arg to main() because
some versions of clang object to the number of args of main(), saying that it
must be 0, 2 or 3. The version this has been observed in does not actually
@@ -3953,20 +4121,22 @@ object to 1 arg but it is entirely possible that this changes so a second arg
(that’s not needed and is unused) has been added just in case.
Cody also added explicit linking of libm (-lm) for systems that do not do this
(Linux doesn’t seem to but macOS does).
Cody also added alt code that should
work for Windows, based on the author’s remarks. The same thing with the number
of args to main() that was done in the original entry was done with this
version as well.
Cody fixed the scripthd script (referred to prog not ./prog) and
-renamed it to scripthd.sh to help browsers and
+renamed it to scripthd.sh to help browsers and
GitHub as far as downloading/displaying goes.
-
Cody also added the try.sh script which also uses
+
Cody also added the try.sh script which also uses
scripthd.sh to show how it differs from prog itself.
Cody fixed the make test rule: it tried to run tac(1) (in systems
that have that command) rather than the entry itself which is called tac and
@@ -3980,20 +4150,22 @@ did the same with tokenfix to tokenfix.sh as well as <
file tac.1.
Cody also renamed discrepancies to discrepancies.html and made it markdown
format.
Cody added the try.sh script which shows the
input files one at a time and after each one is shown, it feeds it to the
program, redirecting the output to the respective GIF file. It then will inform
the user they should open it in a GIF viewer that can show animation in animated
@@ -4001,35 +4173,39 @@ GIF files. It offers an example command for macOS like the judges did in their
remarks. The input files offered includes the prog.c as the author,
Yusuke, suggested that it too has a secret.
Cody fixed the run.sh script (had commands that didn’t
+
Cody fixed the run.sh script (had commands that didn’t
exist and also didn’t work even after that was addressed) and added the
-try.sh, python.sh and
-python3.sh scripts. The try.sh script runs all
+try.sh, python.sh and
+python3.sh scripts. The try.sh script runs all
three of the other scripts but each allows one to send an interrupt in the loops
and still continue to the next script (if one does it when not in a loop it will
exit the script). The make python and make python3 rules in the Makefile now
run the respective scripts.
Cody, with irony well intended :-), fixed the test.sh
+
Cody, with irony well intended :-), fixed the test.sh
script for portability, shellcheck, making it executable
and other things, fixed dead links in the man page, updated the test-strings.txt
-file and other things as well (like adding the try.sh
-and try.alt.sh scripts).
+file and other things as well (like adding the try.sh
+and try.alt.sh scripts).
Landon notes that Cody will probably never finish changes in his entries and
that’s probably true: let’s just say that for the IOCCC I’m (Cody) a weasel! :-)
(but isn’t that kind of the point ? :-) )
Cody, based on the author’s remarks, made it possible to save state
between runs of the program so that one can resume where they left off. It
@@ -4040,53 +4216,59 @@ file you should run sync prior to exiting or else the file might no
it might be corrupt. See 2018/mills in bugs.html for more
details on the bug.
Dave Burton, during the preview period, noticed a
problem where the macOS Terminal.app does not work properly for this program.
We added some additional notes on what might happen (it varies depending on
configuration).
Cody added the try.sh script and the Unlambda
-file crash.unl which is in the judges’ remarks as
+
Cody added the try.sh script and the Unlambda
+file crash.unl which is in the judges’ remarks as
to what can crash it - but it’s not a bug, it’s a feature.
Cody also added the try.sh script which shows a
side-by-side comparison on several files of the entry and wc(1) as well as
running make test.
-
Cody also fixed the script check.sh (renamed from
+
Cody also fixed the script check.sh (renamed from
check) in case x is specified and is not executable and also made it satisfy
ShellCheck. He also made ShellCheck not be a cow and/or (to use Bart Simpson’s
advice :-) ) ‘not have a cow’ about certain things (including one thing it was
-wrong about) in cow.sh (which was renamed from cow)
+wrong about) in cow.sh (which was renamed from cow)
mootoo.
Cody fixed an invalid bytes error in tr in the scripts. This does not
mean that they will produce any output, though, as they provide expect all
@@ -4094,38 +4276,41 @@ letters and that makes it harder to form perfect pangrams. On the subject of
German umlauts and Eszett (ß) see the entry in bugs.html.
Cody also fixed the Makefile so that the alt code would be built when running
make alt.
-
Cody converted the PS file linked to by the author to a PDF
-(fasc5c.pdf) and added it to the
+
Cody converted the PS file linked to by the author to a PDF,
+fasc5c.pdf, and added it to the
website.
Finally he added the scripts for the different languages that use the alt
version but with the caveat that only English appears to work. See the entry in
bugs.html for more details.
Cody also added the file Shakespeare.txt
from 2019/mills (after running make) so that one can
not worry about having the entire IOCCC winning entry tree (or at least the 2019 tree each
entry in a subdirectory). This is more important as there is discussion of
having tarballs for each individual entry as a convenience.
Cody added the try.sh script. This
script will try and show the difference (i.e. the same output) between the
program and the result of sha512sum or shasum -a 512 if either of those
tools can be found but otherwise it’ll just run the program itself, showing its
own sha512sum value.
He also made it possible to easily redefine the memory macro Z at compilation
time by modifying the Makefile.
He fixed a link in the spoiler source code. As a spoiler it felt more important
@@ -4133,64 +4318,71 @@ that this was done (some typos were fixed as well but only some - the purpose
was to only correct spelling and only some, not to change wording or anything
else).
Cody made the make fullscreen more portable by not relying on
stty(1) and sed(1) but rather it just uses tput(1). He also made it so
that if tput(1) is not found it tells the user an easier way to compile the full
screen size rather than having to modify the Makefile. This done with a script,
-fullscreen.sh, to simplify the Makefile and provide
+fullscreen.sh, to simplify the Makefile and provide
an easy way to tell the user how to compile it, assuming that the environmental
variables LINES and COLUMNS are set. But even if they’re not set it explains
how to easily compile the program to a specific size. Note that LINES and
COLUMNS is not available to scripts so it can’t make use of them that way.
As this is a backtrace quine having the optimiser enabled is not a good idea so
Cody disabled it. For this same reason he also added the -g flag to the
compilation as debugging symbols might just be useful for an entry that’s
supposed to segfault :-)
-
Cody also added the simple ascii.c that (while it has an
+
Cody also added the simple ascii.c that (while it has an
arg) prints out the character of the ASCII value (uses isascii(3) first). This
-combined with the try.sh script that he added allows one
+combined with the try.sh script that he added allows one
to easily reconstruct the source code through GDB by the fact it’s a backtrace
quine.
Cody reported that with -O level > 0 this program segfaults (sometimes?). He’s
not sure why as it worked fine before on the same systems tested but -O0
appears to fix the problem in both macOS and Linux. Perhaps this is the problem
that the author reported where it sometimes segfaults but Cody did not try
debugging it since it works with -O0.
-
He also added the script try.sh to showcase the entry a
+
He also added the script try.sh to showcase the entry a
bit more easily.
Cody also disabled the optimiser because the author stated that for clang the
levels [0123s] work okay but with GCC (6) they only said level 0 works,
suggesting that with some versions of GCC it might not be correct with levels !=
@@ -4198,43 +4390,48 @@ suggesting that with some versions of GCC it might not be correct with levels !=
tested: gnu17 was not tested but gnu11 was so the standard was set to
gnu11.
Cody added the try.sh script which also involved
+slightly updating the sample_input.txt file
(removed trailing newlines as it resulted in diff showing differences when it
-shouldn’t) and adding the ioccc.txt file.
Cody fixed the script check_be.sh: it
assumed that prog_be was in PATH which is unlikely so it was changed to
./prog_be.
Cody also improved the make test rule (which uses check_be.sh and the Little
Endian counterpart) so that it shows that the files are identical rather than
showing nothing at all.
Cody added the try.sh script which although at
first glance might not appear to have a point, it actually does, namely showing
how you can automate play and then reminding you to actually play for real, with
a friend, whether that’s real or imagined.
Cody copied the files from the spoiler.zip file (from his copy during
the preview period) that was password protected with a password that was no
longer known.
Cody fixed the script run_clock.sh which gave a
funny error when running it:
$ ./run_clock.sh
-bash: ./run_clock.sh: cannot execute: required file not found
@@ -4250,23 +4447,24 @@ first.
Cody also reported (during the preview period of 2020) for some systems (at some
point?) like macOS the use of make clock would not work due possibly to a
timing issue so Yusuke changed it to compile the
-clock.c file directly (this might have been fixed in the
+clock.c file directly (this might have been fixed in the
Makefile later on but it doesn’t hurt to keep it in and this way it isn’t a
problem in any system). How Cody remembers this minor detail more than three
years ago is something that many people might wonder but he also once told us
that if someone moves something of his even a millimetre from where it was he
knows it so he might be called unusual (and he argues, with pride, eccentric :-)
) :-)
He improved the termcaps.c test utility, bug fixed
+play.sh, fixed other scripts and the Makefile, changed
some files to be markdown (and fixed problems that he caused in doing so :-) ),
fixed typos and formatting and he also fixed some issues that occurred when
files were renamed to .html from .markdown.
@@ -4277,16 +4475,17 @@ how rich it is? If not and you like chocolate I (that is Cody :-) ) highly
recommend you give it a go! :-) You’re welcome to ask me questions if you wish
and I encourage you to do so as the cake is quite picky!
The try scripts involved the addition of a text file,
-key.txt which has the key of the file the judges
-added in try.this.txt which itself was based on
+key.txt which has the key of the file the judges
+added in try.this.txt which itself was based on
something the author (Cody :-) ) submitted in the first place.
He also fixed some issues that occurred when files were renamed to .html from
.markdown.
@@ -4298,9 +4497,10 @@ how rich it is? If not and you like chocolate I (that is Cody :-) ) highly
recommend you give it a go! :-) You’re welcome to ask me questions if you wish
and I encourage you to do so as the cake is quite picky!
Cody added the try.sh script. This script does
the conversion of pi.wav (showing the digits) and also converts the number for
jenny.wav and a number Cody ‘came up with’: one that resembles IOCCC 28:
10666-28. The 6 is the closest to C in his head even though it’s not
@@ -4310,35 +4510,39 @@ neither are installed it warns the user about this, linking to the FAQ about it,
and tells them they will have to play the WAV files manually. Otherwise it’ll
use the program to play the WAV files (and in one case stdout).
Cody also added -L/-I paths to the Makefile to let this compile more easily if
the user has installed the appropriate library with
MacPorts (with the default MacPorts prefix
/opt/local).
-
Cody also fixed the script makegif.sh in a variety
+
Cody also fixed the script makegif.sh in a variety
of ways: shellcheck(1), make sure the program is compiled first (allowing one to
specify which compiler to use with CC=foo ./makegif.sh ...), checking that
convert(1) is found and that it worked properly (linking to the proper FAQ
entry if not installed or it fails).
He also added a link that has much more details about this phenomenon to the
index.html. Naturally he’s one of the ones who can read text even if it’s even
more jumbled but we know of others too.
Cody also added from 2019/mills the text file
-Shakespeare.txt as we are considering to
+Shakespeare.txt as we are considering to
have each entry have a tarball with the entry by itself.
Also, to explain the confusing to most people award, Cody gave a quick
translation of lámatyávë, which comes from History of Middle-earth [HoMe],
@@ -4346,23 +4550,26 @@ volume X, Morgoth’s Ring, which he also has (and which is part of the 12 volum
set by the late Christopher Tolkien, son and literary executor and heir to
J.R.R. Tolkien).
Cody added the MIDI files cvikl.mid and
+entertainer.mid from the URLs we suggested so
that one need not download them and to make sure they can always be obtained
even if the domain or link goes dead.
Cody added alternate code that will feel
more at home for vi users. One might still end up cursing (see the index.html
file) but probably a lot less :-)
Cody also added a make rule (make cppp) for the author’s provided C++ code
that can preprocess the generated output to make them more acceptable to typical
compilers. See the index.html for more details.
@@ -4409,8 +4616,8 @@ it is $(MAKE).
Cody also added missing variables like BASH and PDFLATEX to the
var.mk file and removed another that was deemed problematic or
undesired. Other variable names had typos in them.
-
In at least one case (like the top level Makefile) where raw
-commands (that are in var.mk) were used, Cody updated them to use the
+
In at least one case, like the top level Makefile, where raw
+commands that are in var.mk were used, Cody updated them to use the
variables.
A comment was missing for the diff_alt_orig rule in all the Makefiles and
this, along with many other fixes and changes to the Makefiles were made by
@@ -4458,8 +4665,8 @@ HARD bug fixes like 1988/
2005/giljade, making entries like
1985/sicherman and
1986/wall not need -traditional-cpp (all
-EXTREMELY HARD), fixing entries to work with clang (some EXTREMELY HARD
-like 1991/dds) or as much as possible
+EXTREMELY HARD), fixing entries to work with clang, some EXTREMELY HARD
+like 1991/dds, or as much as possible
(1989/westley, a true masterpiece that is
INCREDIBLY HARD, MUCH MORE SO than any other fix!), porting entries to
macOS (some EXTREMELY HARD like
diff --git a/thanks-for-help.md b/thanks-for-help.md
index 717b0463b..19aec07ee 100644
--- a/thanks-for-help.md
+++ b/thanks-for-help.md
@@ -34,8 +34,8 @@ on a IOCCC entry by entry basis.
[Cody](#cody) fixed this to work for macOS.
@@ -50,7 +50,7 @@ Thus now it is like the original where the first line ends with `"hell\` and
the second line starts with `o, world!\n"`.
By request, the original code is provided as
-[anonymous.alt.c](1984/anonymous/anonymous.alt.c) so that one can look at it and
+[anonymous.alt.c](%%REPO_URL%%/1984/anonymous/anonymous.alt.c) so that one can look at it and
the famous tattoo which we also include here:
-# [1984/decot](1984/decot/index.html)
-## Source code: [decot.c](1984/decot/decot.c)
+## [1984/decot](1984/decot/index.html)
+### Source code: [decot.c](%%REPO_URL%%/1984/decot/decot.c)
[Cody](#cody) fixed this to not require `-traditional-cpp` which some compilers like
@@ -130,11 +130,11 @@ To see the difference from start to fixed:
-[Cody](#cody) added the [try.sh](1984/laman/try.sh) script.
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/1984/laman/try.sh) script.
Cody also fixed this to not crash when no arg is specified. Note that if the arg
is not a positive number it will not do anything useful or anything at all.
@@ -143,11 +143,11 @@ This was fixed on 30 October 2023 after the bug status was changed from INABIAF
-[Cody](#cody) provided an [alternate version](1984/mullender/mullender.alt.c),
+[Cody](#cody) provided an [alternate version](%%REPO_URL%%/1984/mullender/mullender.alt.c),
an improved version of the judges, so that everyone can enjoy it with systems
that are not VAX/PDP. It moves at approximately the same speed as the original
did. We also refer you to the [FAQ](faq.html) as there are some winning entries
@@ -157,8 +157,8 @@ original is that it will start over after it times out but that might not happen
with the original (might need you to press a key though this is not known for
sure).
-Cody also added the [gentab.c](1984/mullender/gentab.c) file, fixed to compile
-(and work, though see [bugs.html](#1984mullender-readmemd)) with modern systems
+Cody also added the [gentab.c](%%REPO_URL%%/1984/mullender/gentab.c) file, fixed to compile
+(and work, though see the [bugs](bugs.html#1984_mullender) entry for 1984/mullender) with modern systems
and so that it would create the proper array (it had unbalanced `}`s), which the
author noted in their remarks (which Cody also found). As this file uses the old
header file `a.out.h` that is not available in all modern systems, Cody found a
@@ -173,8 +173,8 @@ Repo](https://github.com/dspinellis/unix-history-repo/tree/Research-Release).
Both [Cody](#cody) and [Yusuke](#yusuke) fixed this; Yusuke got this to not crash and Cody fixed it
@@ -189,7 +189,7 @@ have until it ran out of memory.
The fix for macOS is that there was no prototype for `execlp(3)` and macOS has
problems with missing prototypes for some functions (this was also seen when
-Cody fixed [1984/anonymous](1984/anonymous/anonymous.c) for macOS as well). As
+Cody fixed [1984/anonymous](%%REPO_URL%%/1984/anonymous/anonymous.c) for macOS as well). As
this is a one-liner the include of `unistd.h` was done in the Makefile.
Ironically this fix was discovered through Linux!
@@ -200,8 +200,8 @@ returning to the shell. The original code does not have this change.
[Cody](#cody), out of abundance of caution, added a second arg to `main()` because some
@@ -210,20 +210,20 @@ be 0, 2 or 3. The version this has been observed in does not actually object to
1 arg but it is entirely possible that this changes so a second arg (that's not
needed and is unused) has been added just in case.
-Cody also added the script [primes.sh](1985/august/primes.sh) which allows one
+Cody also added the script [primes.sh](%%REPO_URL%%/1985/august/primes.sh) which allows one
to check the output for the first `N` prime numbers of the output, where `N` is
either the default or user specified. The inspiration was the previous `try`
command he gave to have fun with finding primes that might seem unusual in a
way.
-Cody also added the [try.sh](1985/august/try.sh) script (which calls `primes.sh`
+Cody also added the [try.sh](%%REPO_URL%%/1985/august/try.sh) script (which calls `primes.sh`
whether `primes(6)` is installed or not, but it only does it once with the
default value).
[Cody](#cody) fixed this to compile with modern compilers. In the past one could get away
@@ -234,16 +234,16 @@ changed the `#o` lines to `#define`. Also `unistd.h` had to be `#include`d.
[Yusuke](#yusuke) provided some useful information that amounts to an alternate version
that Cody added. See the index.html for details.
-Cody also provided the [try.alt.sh](1985/lycklama/try.alt.sh) script.
+Cody also provided the [try.alt.sh](%%REPO_URL%%/1985/lycklama/try.alt.sh) script.
[Cody](#cody) added the alt code which allows one to resize the maze and he also added
-the [try.alt.sh](1985/shapiro/try.alt.sh) script that randomly selects sizes
+the [try.alt.sh](%%REPO_URL%%/1985/shapiro/try.alt.sh) script that randomly selects sizes
(five times) and compiles and runs it. After the five runs it prompts you to
enter a number, in an infinite loop, exiting if any non-digits are in input
(this includes negative numbers which in the code actually sets it back to 39,
@@ -251,19 +251,19 @@ the default).
[Cody](#cody) fixed this _very twisted entry_ to not require `-traditional-cpp`. Fixing
`-traditional-cpp` is, as noted later on, very complicated, but Cody would like
to refer you to the original file
-[sicherman.orig.c](1985/sicherman/sicherman.orig.c) and he suggests that you
-then compare it to [sicherman.c](1985/sicherman/sicherman.c) for some good old
+[sicherman.orig.c](%%REPO_URL%%/1985/sicherman/sicherman.orig.c) and he suggests that you
+then compare it to [sicherman.c](%%REPO_URL%%/1985/sicherman/sicherman.c) for some good old
C-fashioned fun (alternatively, see below explanation)!
Later on Cody improved the fix so that it looks much more like the [original
-entry](1985/sicherman/sicherman.c). He did this several more times and it's
+entry](%%REPO_URL%%/1985/sicherman/sicherman.c). He did this several more times and it's
as close to the original as one can get without causing compiler errors.
To get this to all work the following changes were made. If you really want to
@@ -292,12 +292,12 @@ were actually not what they appear: the only arg that existed in `main()` was
- The macros `C` and `V` were changed to lower case. This is because it felt
like the `C=" ..`' part in `subr()` would be better to be upper case as it talks
about the language. Also in the second [alternate
-version](1985/sicherman/sicherman.alt2.c) (the first being the
+version](%%REPO_URL%%/1985/sicherman/sicherman.alt2.c) (the first being the
original code) which is in case a new version of clang ever objects to only one
arg in `main()` (which is not out of the realm of possibility), `main()` can
have `C` as `argc` to `main()` so it would read like it once did: `C manual`
albeit with a `,` separating the two. The [second
-alternate](1985/sicherman/sicherman.alt2.c) version is compiled
+alternate](%%REPO_URL%%/1985/sicherman/sicherman.alt2.c) version is compiled
in case the first does not. Originally the macros were kept the same and the
`C` in `subr()` was `c`. It feels better (in some ways) to make it so that the
`C` for the language is upper case though, and since it actually translated to
@@ -362,12 +362,12 @@ Additional code was added in case the fix cannot be compiled by some compilers
should they object to `main()` having only one arg. This version will
automatically be compiled if the entry fails to compile for some reason but one
can compile it manually as `make alt` in which case it'll be compiled as
-`sicherman.alt` (if it's done because [sicherman.c](1985/sicherman/sicherman.c)
+`sicherman.alt` (if it's done because [sicherman.c](%%REPO_URL%%/1985/sicherman/sicherman.c)
fails to compile it will be built as `sicherman` as part of the `sicherman`
rule).
-Cody also added the [try.sh](1985/sicherman/try.sh) and
-[try.alt.sh](1985/sicherman/try.alt.sh) scripts.
+Cody also added the [try.sh](%%REPO_URL%%/1985/sicherman/try.sh) and
+[try.alt.sh](%%REPO_URL%%/1985/sicherman/try.alt.sh) scripts.
@@ -376,8 +376,8 @@ Cody also added the [try.sh](1985/sicherman/try.sh) and
[Cody](#cody) made this use `fgets()`.
-Cody also added the [try.sh](1986/hague/try.sh) script which also feeds to the
+Cody also added the [try.sh](%%REPO_URL%%/1986/hague/try.sh) script which also feeds to the
program the added `input.txt` file.
[Cody](#cody) restored the original entry which was a single line. The code
@@ -499,19 +499,19 @@ being longer (in 1986 a one liner could be longer) was split to three lines to
avoid problems with news and mail but as it was the 'Best one liner' it is now
one line.
-Cody also added the [stein.sh](1986/stein/stein.sh) script which runs the two
+Cody also added the [stein.sh](%%REPO_URL%%/1986/stein/stein.sh) script which runs the two
commands that we suggest in order to get it to show clean output.
[Cody](#cody) fixed this so that it does not require `-traditional-cpp`. This took a fair
bit of tinkering as this entry *very twisted*; fixing `-traditional-cpp` is, as
noted earlier, very complicated, but we encourage you to look at [original
-code](1986/wall/wall.orig.c) to see how different C was in 1986, as well as
+code](%%REPO_URL%%/1986/wall/wall.orig.c) to see how different C was in 1986, as well as
below.
[Yusuke](#yusuke) originally patched this to use `strdup()` on two strings and this let it
@@ -621,22 +621,22 @@ There might have been other changes as well.
[Cody](#cody) made this look more like the original entry by restoring the `#define` of
`define`. It's not used but it now looks closer to the original.
-Cody also added the [try.sh](1987/heckbert/try.sh) script which shows how the
+Cody also added the [try.sh](%%REPO_URL%%/1987/heckbert/try.sh) script which shows how the
program works but also how the folded code can recreate the original.
Also because `index(3)` is deprecated and in some systems requires the inclusion
@@ -646,19 +646,19 @@ that for System V we had to do this) Cody added to the Makefile
-[Cody](#cody) added the [try.sh](1987/hines/try.sh) script and the C file
-[goto.c](1987/hines/goto.c) and the text file [goto.txt](1987/hines/goto.txt)
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/1987/hines/try.sh) script and the C file
+[goto.c](%%REPO_URL%%/1987/hines/goto.c) and the text file [goto.txt](1987/hines/goto.txt)
for demonstration purposes. Notice that the program is case sensitive which
running the program on the text file demonstrates.
[Cody](#cody) made this use `fgets(3)`.
-Cody also added the [try.sh](1987/wall/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/1987/wall/try.sh) script.
[Cody](#cody) fixed this for modern systems. The problem was `'assignment to cast is
@@ -738,8 +738,8 @@ unlikely(?) but nevertheless suggested case that `putchar()` is not available.
[Cody](#cody) fixed this twisted entry (as we called it :-) ) for modern compilers,
@@ -817,23 +817,23 @@ macro in place it's just no longer used.
See the index.html file for details on the original code, provided as an alt
version in case you have an older compiler or wish to try `-traditional-cpp`.
-Cody also provided the [try.sh](1988/dale/try.sh) script.
+Cody also provided the [try.sh](%%REPO_URL%%/1988/dale/try.sh) script.
[Cody](#cody) fixed this to work for modern systems. The problem was that the important
function, a redefinition of `exit()`, was not being called in `main()`. The
-original version is in [1988/isaak/isaak.alt.c](1988/isaak/isaak.alt.c). See the
+original version is in [1988/isaak/isaak.alt.c](%%REPO_URL%%/1988/isaak/isaak.alt.c). See the
index.html file for more details.
[Cody](#cody) added the alt code which is code that we suggested at the time of
@@ -841,8 +841,8 @@ publication, in the remarks, to help understand the entry, and for fun.
-[Cody](#cody) provided an [alternate version](1988/spinellis/spinellis.alt.c) so that
+[Cody](#cody) provided an [alternate version](%%REPO_URL%%/1988/spinellis/spinellis.alt.c) so that
this will work with compilers like clang. An alternate version had to be
provided because not doing so would be tampering with the entry too much. It
would work but it would not show the same creativity and cleverness.
@@ -890,16 +890,16 @@ thank him for this ghastly point! :-)
-The [original version](1988/westley/westley.alt.c), provided as alternate code,
+The [original version](%%REPO_URL%%/1988/westley/westley.alt.c), provided as alternate code,
was fixed by Misha Dynin, based on the judges' remarks, so that this would work
with modern C compilers. We encourage you to try the alternate version to see
what happens with current compilers! See the index.html files for details.
-[Cody](#cody) added the [try.sh](1988/westley/try.sh) script to show the magic of the
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/1988/westley/try.sh) script to show the magic of the
entry as seeing the code with the result at once is far more beautiful.
Cody also changed the `int`s to be `float` as that's what they are printed as:
@@ -914,14 +914,14 @@ not strictly necessary but nonetheless more correct, even if not warned against.
[Cody](#cody) got this to work with modern systems. The main issues were that an
`#include` had to be added along with fixing the path (due to `.` not being in
`$PATH`) to files referred to in the code. The path problem was also fixed in
-[fubar.sh](1989/fubar/fubar.sh).
+[fubar.sh](%%REPO_URL%%/1989/fubar/fubar.sh).
A strange problem occurred where if one made modifications to the C file it
might end up failing to work even after changing it back. This was resolved by:
@@ -947,12 +947,12 @@ might end up failing to work even after changing it back. This was resolved by:
Cody also 'modernised' the script to use `bash` and fixed for ShellCheck. The
`if [ .. ]` was changed in the C code as well as the script.
-Cody also added the [try.sh](1989/fubar/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/1989/fubar/try.sh) script.
[Cody](#cody) fixed this to work with modern compilers. Modern compilers do not allow
@@ -989,10 +989,10 @@ code like:
He notes that there _is_ a way to get it (or something close to it) to work. Do
you know how?
-Cody also provided the [try.sh](1989/jar.2/try.sh) script and the
-supplementary files [try.txt](1989/jar.2/try.txt),
-[fib.lisp](1989/jar.2/fib.lisp) and
-[chocolate_cake.lisp](1989/jar.2/chocolate_cake.lisp). The `try.txt` comes
+Cody also provided the [try.sh](%%REPO_URL%%/1989/jar.2/try.sh) script and the
+supplementary files [try.txt](%%REPO_URL%%/1989/jar.2/try.txt),
+[fib.lisp](%%REPO_URL%%/1989/jar.2/fib.lisp) and
+[chocolate_cake.lisp](%%REPO_URL%%/1989/jar.2/chocolate_cake.lisp). The `try.txt` comes
from the author and the `fib.lisp` comes from [Yusuke](#yusuke). Cody wrote the script and
offered us some chocolate cake :-) See index.html for details on how to use the
script.
@@ -1013,8 +1013,8 @@ because the `alt` rule had what normally is in the `${PROG}.alt` rule.
[Cody](#cody) fixed an infinite loop where the program would print the same thing over
@@ -1022,36 +1022,36 @@ and over again, flooding the screen. The problem is that there was a `for` loop
that by necessity had to not have an increment stage but the pointer only got
updated in the `if` path (in the loop itself).
-Cody also provided the [try.sh](1989/ovdluhe/try.sh) script which runs the
+Cody also provided the [try.sh](%%REPO_URL%%/1989/ovdluhe/try.sh) script which runs the
program four times on three files to show the different output. It doesn't run
the program on each file four times in a row but rather does it on each file
and starts over, doing it four times, to help with hopefully allowing different
output.
-Cody also provided an [alternate version](1989/ovdluhe/ovdluhe.alt.c) based on
-the author's remarks and the [try.alt.sh](1989/ovdluhe/try.alt.sh) script that
+Cody also provided an [alternate version](%%REPO_URL%%/1989/ovdluhe/ovdluhe.alt.c) based on
+the author's remarks and the [try.alt.sh](%%REPO_URL%%/1989/ovdluhe/try.alt.sh) script that
uses the alt code, allowing one to configure the alt build. See the index.html
for details. The fix described above was fixed in this version too, after it was
discovered and fixed.
[Cody](#cody) fixed a segfault under macOS that prevented it from working. The problem
was that the int (from `#define f`) should be a long. This became apparent when
he was using lldb and saw that the type of a pointer was too `long` :-)
-Cody also provided the [alternate version](1989/paul/paul.alt.c)
+Cody also provided the [alternate version](%%REPO_URL%%/1989/paul/paul.alt.c)
which has the trace function that the author included but commented out. See the
index.html for details.
[Yusuke Endoh](#yusuke) fixed this to compile under modern systems. To see the changes
@@ -1064,12 +1064,12 @@ made, try:
(It adds the C token pasting operator `##` instead of `/**/`.)
-Cody also added the [try.sh](1989/robison/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/1989/robison/try.sh) script.
[Cody](#cody) fixed this for clang, except that two versions generated by the program
@@ -1171,10 +1171,10 @@ in the working on version 2 and 3 or if in the fix for clang as well as version
To make use of this several scripts were added by Cody.
-The [compile.sh](1989/westley/compile.sh) script that removes the generated
+The [compile.sh](%%REPO_URL%%/1989/westley/compile.sh) script that removes the generated
code, rebuilds the program and regenerates the other code and then compiles it
will work for compilers like gcc and one can then use the
-[try.sh](1989/westley/try.sh) script to see example input and output.
+[try.sh](%%REPO_URL%%/1989/westley/try.sh) script to see example input and output.
The `compile.sh` script allows one to specify the compiler with the `CC`
environmental variable; see the index.html for details.
@@ -1186,13 +1186,13 @@ environmental variable; see the index.html for details.
-[Cody](#cody) added the [try.sh](1990/baruch/try.sh) script.
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/1990/baruch/try.sh) script.
-Cody also added an [alternate version](1990/baruch/baruch.alt.c) which allows Turbo-C
+Cody also added an [alternate version](%%REPO_URL%%/1990/baruch/baruch.alt.c) which allows Turbo-C
and MSC to compile this code, based on the authors' remarks, except that Cody
did not change the `" #Q"` string as that showed worse looking output
instead of improved output though he has no way to test the compilers in
@@ -1209,8 +1209,8 @@ judges was retained.
[Yusuke](#yusuke) and [Cody](#cody) in conjunction fixed this for modern systems (both fixed a
@@ -1234,14 +1234,14 @@ operator itself.
Cody fixed another compiler error by removing the erroneous prototype to
`fopen()`. Cody also changed a `char *` used for file I/O to be a proper `FILE
-*` and fixed a typo in [LANDER.BAS](1990/dds/LANDER.BAS).
+*` and fixed a typo in [LANDER.BAS](%%REPO_URL%%/1990/dds/LANDER.BAS).
Cody also made this use `fgets(3)`.
[Cody](#cody) fixed this for modern systems. There were two problems to be resolved.
@@ -1262,12 +1262,12 @@ but later Cody added it back to make it more like the original).
The second problem was suggested by the judges at the time of judging, to do
with if the C preprocessor botches single quotes in cpp expansion.
-Cody also added the [try.sh](1990/dg/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/1990/dg/try.sh) script.
[Cody](#cody) fixed the script to work properly in modern environments including writing
@@ -1277,7 +1277,7 @@ allow for `&& ...`.
He also changed the `perror(3)` call to `fprintf(3)` because in macOS when errno
is 0 it shows what looks like an error.
-He added the [try.sh](1990/jaw/try.sh) to run the commands that we suggested at
+He added the [try.sh](%%REPO_URL%%/1990/jaw/try.sh) to run the commands that we suggested at
the time.
NOTE: as `btoa` is not common we used a ruby script from [Yusuke](#yusuke) but with a minor
@@ -1286,30 +1286,30 @@ input but which now works.
-[Cody](#cody) added the [alt code](1990/pjr/pjr.alt.c) which was suggested by the judges
+[Cody](#cody) added the [alt code](%%REPO_URL%%/1990/pjr/pjr.alt.c) which was suggested by the judges
in the case that your compiler cannot compile `X=g()...` but it actually does
something else and is recommended by the author as well.
[Yusuke](#yusuke) suggested `-ansi` to get the entry to compile due to trigraphs and [Cody](#cody)
suggested `-trigraphs`. Both work but we used Yusuke's idea.
-Cody added the [try.sh](1990/scjones/try.sh) script to show exactly what the
+Cody added the [try.sh](%%REPO_URL%%/1990/scjones/try.sh) script to show exactly what the
entry does.
[Cody](#cody) fixed this to work with modern compilers; `exit(3)` returns void but the
@@ -1324,13 +1324,13 @@ Additionally, Cody fixed the shortened version provided by the author in the
same way as the original entry, first the compile fix and then later on making
it look more like the original by redefining `exit` and also redefining `gets()`
to be `fgets()` in the same way that the original entry is. This way the [alt
-version](1990/tbr/index.html#alternate-code) is equivalent in function, like the
+version](%%REPO_URL%%/1990/tbr/index.html#alternate-code) is equivalent in function, like the
author intended, but more compact.
[Cody](#cody) fixed this to compile with modern systems.
@@ -1364,7 +1364,7 @@ with clang in Linux but which was defaulting to an error. This way was the
simplest way to deal with the problem in question due to the way the entry
works.
-Cody also added the [try.sh](1990/theorem/try.sh) script which shows the
+Cody also added the [try.sh](%%REPO_URL%%/1990/theorem/try.sh) script which shows the
original program and some of the programs it generates.
[Yusuke](#yusuke) pointed out that `atof` nowadays needs `#include ` which was
@@ -1373,8 +1373,8 @@ incomplete).
[Cody](#cody) fixed the paths in the Makefile so that this would build in Linux (it
@@ -1385,14 +1385,14 @@ He also changed the Makefile to use `bash` not `zsh` as not all systems have
[Cody](#cody) fixed this for modern systems. It had `1s` in places for a `short
int` which was changed to just `1`. Since it's instructional to see the
differences he has provided an alternate version,
-[westley.alt.c](1990/westley/westley.alt.c), which is the original code.
+[westley.alt.c](%%REPO_URL%%/1990/westley/westley.alt.c), which is the original code.
He also changed the `argc` to be an `int`, not a `char`, even though it might
often be the same (for the purpose of `clang`?).
@@ -1400,7 +1400,7 @@ often be the same (for the purpose of `clang`?).
He also fixed the code to not enter an infinite loop if arg is a number not > 0
and to not crash if no arg is specified.
-Cody also added the [try.sh](1990/westley/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/1990/westley/try.sh) script.
The alt code did NOT have arg checks added as it is actually a copy of the
original code.
@@ -1412,11 +1412,11 @@ original code.
-[Cody](#cody) added [alt code](1991/ant/ant.alt.c) that will be a bit easier to use for
+[Cody](#cody) added [alt code](%%REPO_URL%%/1991/ant/ant.alt.c) that will be a bit easier to use for
those familiar with vim in the following ways:
- Use `0` to go to first column.
@@ -1430,8 +1430,8 @@ The other keys were left unchanged.
[Cody](#cody) fixed this for modern systems. There were two invalid operands to binary
@@ -1444,13 +1444,13 @@ invalid operands to binary expressions were resolved with the comma operator.
Later on, Cody added back the macro `#define D define` to make it look ever so
slightly more like the original, even though it's unused.
-Cody also added the [try.sh](1991/brnstnd/try.sh) script and
-[try.txt](1991/brnstnd/try.txt) which the script uses.
+Cody also added the [try.sh](%%REPO_URL%%/1991/brnstnd/try.sh) script and
+[try.txt](%%REPO_URL%%/1991/brnstnd/try.txt) which the script uses.
[Cody](#cody) fixed this so that the coordinates being specified would not crash the
@@ -1462,7 +1462,7 @@ Cody also made the file name in the code (which is the default maze file) not
hard-coded but instead be `__FILE__`.
Finally Cody added the [alternate
-version](1991/buzzard/index.html#alternate-code) which will possibly feel more at
+version](%%REPO_URL%%/1991/buzzard/index.html#alternate-code) which will possibly feel more at
home with those familiar with vi(m) (it certainly does feel more at home with
him): `k` for forward, `h` for left and `l` for right. This version also has a
more useful way to exit, just entering `q` followed by enter, rather than
@@ -1470,8 +1470,8 @@ completing or killing the program.
[Cody](#cody) fixed a segfault that prevented this entry from working in any condition
@@ -1613,8 +1613,8 @@ entry was fixed. It has not been done in all.
[Cody](#cody) made it look much more like the original entry even after the fix that
@@ -1632,15 +1632,15 @@ which also resolved the warning described above. This was by more clever use of
the Makefile which now has a `-DB=(int)b` so that `B` can be used in place where
`(int)b` used to be necessary.
-Cody also added the [try.sh](1991/fine/try.sh) script which feeds the program
+Cody also added the [try.sh](%%REPO_URL%%/1991/fine/try.sh) script which feeds the program
some fun input for fun but mostly different output. He added a great string from
Brian Westley and Cody also added several of his own (can you figure out exactly
which ones? :-) )
[Cody](#cody) fixed it so that the messages that show if you won or lost will be seen
@@ -1650,15 +1650,15 @@ original entry Cody left the message before ending curses in and printed another
message of the same kind after `endwin()` was called with the exception that he
added a newline at the end of the screen to be more user friendly.
-Cody also added [two alt versions](1991/rince/index.html#alternate-code), one to
+Cody also added [two alt versions](%%REPO_URL%%/1991/rince/index.html#alternate-code), one to
remove the maximum number of moves you may make and another to let you configure
the maximum number of moves, even if that is making it harder to win. Naturally
the above fix was applied to these versions too.
[Cody](#cody) fixed the code so that it will try opening the file the code was compiled
@@ -1758,15 +1758,15 @@ one must keep the `Y[strlen(Y)-1]='\0';` part and keep it there.
These fixes are complex changes due to the way the program and Makefile generate
the additional tools.
-Cody finally added the [try.sh](1992/adrian/try.sh) script that shows the entry
+Cody finally added the [try.sh](%%REPO_URL%%/1992/adrian/try.sh) script that shows the entry
and some of the tools this entry generates. Unlike other scripts, it does not
clear the screen after compilation so that one can see how the other files are
generated.
[Cody](#cody) fixed this to compile with modern systems. Note that in 1996 a bug fix was
@@ -1776,14 +1776,14 @@ is not the correct header file now (at least in some systems?) and a non-void
(implicit `int`) function returning without a value. That function was changed to
return `void`.
-Cody also added the [try.sh](1992/albert/try.sh) and
-[try.alt.sh](1992/albert/try.alt.sh) scripts that correspond to the entry and
+Cody also added the [try.sh](%%REPO_URL%%/1992/albert/try.sh) and
+[try.alt.sh](%%REPO_URL%%/1992/albert/try.alt.sh) scripts that correspond to the entry and
the alt code.
[Cody](#cody) fixed the Makefile so that the program will actually work with it (or at
@@ -1803,12 +1803,12 @@ The author stated that in some systems like DOS with Turbo C, it might be
necessary to include `time.h` so Cody did this as well as this exists in other
systems too.
-Cody also added the [try.sh](1992/ant/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/1992/ant/try.sh) script.
[Cody](#cody) added a check for the right number of args, exiting 1 if not enough (2)
@@ -1816,34 +1816,34 @@ used. This was not originally done but at a time it was changed to be considered
a bug so it was fixed at that point as it only took a few seconds and had to be
verified that it was consistent with the [bugs.html](bugs.html) file.
-He also added the [try.sh](1992/buzzard.1/try.sh) script to try out some
+He also added the [try.sh](%%REPO_URL%%/1992/buzzard.1/try.sh) script to try out some
commands that we suggested and some additional ones that he provide for some fun.
[Cody](#cody) fixed the alt code to compile. The problem was it assumed that
`exit(3)` returns a value, not `void`. This was fixed with a `,0`.
-Cody also added the [try.sh](1992/buzzard.2/try.sh) and
-[try.alt.sh](1992/buzzard.2/try.alt.sh) scripts that correspond to the entry
+Cody also added the [try.sh](%%REPO_URL%%/1992/buzzard.2/try.sh) and
+[try.alt.sh](%%REPO_URL%%/1992/buzzard.2/try.alt.sh) scripts that correspond to the entry
and its alt code.
[Cody](#cody) fixed a crash that prevented this entry from working in some cases in some
systems (like macOS) by disabling the optimiser in the Makefile.
-Cody also added the [try.sh](1992/gson/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/1992/gson/try.sh) script.
-Cody also added the [mkdict.sh](1992/gson/mkdict.sh) script that the author
+Cody also added the [mkdict.sh](%%REPO_URL%%/1992/gson/mkdict.sh) script that the author
included in their remarks. See the index.html for its purpose. It was NOT fixed
for [ShellCheck](https://github.com/koalaman/shellcheck)
because the author deliberately obfuscated it so **PLEASE *DO NOT* FIX THIS OR
@@ -1857,13 +1857,13 @@ details if you're interested in trying to understand it (or fix?).
-[Cody](#cody) provided the [try.sh](1992/imc/try.sh) script.
+[Cody](#cody) provided the [try.sh](%%REPO_URL%%/1992/imc/try.sh) script.
-The original code, [imc.orig.c](1992/imc/imc.orig.c), assumed that `exit(3)`
+The original code, [imc.orig.c](%%REPO_URL%%/1992/imc/imc.orig.c), assumed that `exit(3)`
returned a value but this will cause problems where `exit(3)` returns `void`. The
source code was modified to avoid this problem but like Cody did with other fixes
he made this more like the original by redefining `exit` to use the comma
@@ -1871,15 +1871,15 @@ operator so that it could be used in binary expressions.
It was observed that on modern systems this goes much too quick. [Yusuke](#yusuke) created
a patch that calls `usleep(3)` but [Cody](#cody) thought the value was too slow so he
made it a macro in the Makefile `Z` (which can be redefined with `make
SLEEP=...`), defaulting at 15000. This was made an [alt
-version](1992/kivinen/kivinen.alt.c) and it is recommended one use the alt
+version](%%REPO_URL%%/1992/kivinen/kivinen.alt.c) and it is recommended one use the alt
version first. See the index.html file to see how to reconfigure it.
Cody also made the fixed version (the code relied on `exit(3)` returning to use
@@ -1900,14 +1900,14 @@ it moves towards the right but if you click the mouse it goes back.
[Yusuke](#yusuke) supplied a patch which makes this work with gcc. Due to how it works (see
Judges' remarks in the index.html file) this will not work with clang.
-[Cody](#cody) also provided the [lush.sh](1992/lush/lush.sh) script to
+[Cody](#cody) also provided the [lush.sh](%%REPO_URL%%/1992/lush/lush.sh) script to
demonstrate it as using make was problematic.
Cody made it use `fgets()` instead of `gets()`.
@@ -1917,16 +1917,16 @@ will compile fine but it won't work). See [bugs.html](bugs.html) for details.
[Cody](#cody) added the original file back as it was deemed that the export restrictions
@@ -1937,13 +1937,13 @@ referenced.
Cody cynically noted that if he goes quiet, for instance if he no longer
participates in the IOCCC, that it must be our fault! :-)
-Cody also added the [try.sh](1992/nathan/try.sh) script that runs a few commands
+Cody also added the [try.sh](%%REPO_URL%%/1992/nathan/try.sh) script that runs a few commands
that we suggested as well as one he provided.
[Cody](#cody) fixed this to work for clang by changing the third and fourth arg of
@@ -1985,12 +1985,12 @@ the final loop it prints another newline. This fix has another bonus in that
resizing the terminal after running it should not mess up the display either,
unless of course it becomes too small.
-Cody added the scripts [whereami.sh](1992/westley/whereami.sh) and
-[whereami.alt.sh](1992/westley/whereami.alt.sh) which correspond to the entry and
+Cody added the scripts [whereami.sh](%%REPO_URL%%/1992/westley/whereami.sh) and
+[whereami.alt.sh](%%REPO_URL%%/1992/westley/whereami.alt.sh) which correspond to the entry and
the alt code but first check that the number of columns is at least 80 and if
not it is an error.
-Cody added the [try.sh](1992/westley/try.sh) script that shows the different
+Cody added the [try.sh](%%REPO_URL%%/1992/westley/try.sh) script that shows the different
cities that the author recommended one try as well as the one recommended by the
judges (approximate judging location), labelling each city and printing a
newline before the next city. The try.sh script uses the `whereami.sh` and
@@ -2000,7 +2000,7 @@ first tries to make it executable and if it fails to do so it just uses
(or `COLUMNS=80 ./whereami.sh` etc.) but this is a feature, not a bug.
Cody also added an arg check because the program and the
-[alternate version](1992/westley/westley.alt.c) might have crashed or
+[alternate version](%%REPO_URL%%/1992/westley/westley.alt.c) might have crashed or
[nuked](https://en.wikipedia.org/wiki/Nuclear_weapon) the [entire
world](https://en.wikipedia.org/wiki/Earth) or just the
[USA](https://en.wikipedia.org/wiki/United_States), respectively, without enough
@@ -2014,17 +2014,17 @@ encourage you to try the original without two args :-)
-[Cody](#cody) added the [try.sh](1993/ant/try.sh) script and a data file,
-[ants.txt](1993/ant/ants.txt), full of ants for the script.
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/1993/ant/try.sh) script and a data file,
+[ants.txt](%%REPO_URL%%/1993/ant/ants.txt), full of ants for the script.
-[Cody](#cody) fixed the [dgibson.sh](1993/dgibson/dgibson.sh) script to work
+[Cody](#cody) fixed the [dgibson.sh](%%REPO_URL%%/1993/dgibson/dgibson.sh) script to work
which assumed that `.` is in the path.
-Cody also added the [try.sh](1993/dgibson/try.sh) script which runs the above
+Cody also added the [try.sh](%%REPO_URL%%/1993/dgibson/try.sh) script which runs the above
mentioned script on all the data files.
[Cody](#cody) added an [alternate
-version](1993/lmfjyh/index.html#alternate-code) which does what the program did
+version](%%REPO_URL%%/1993/lmfjyh/index.html#alternate-code) which does what the program did
with gcc < 2.3.3. See the index.html file for details and for why this was made
the alternate version, not the actual entry.
@@ -2097,27 +2097,27 @@ highly unlikely).
[Cody](#cody) added check for two args during a time that this was considered a
bug to fix.
-Cody also added an [alternate version](1993/plummer/plummer.alt.c) which uses
+Cody also added an [alternate version](%%REPO_URL%%/1993/plummer/plummer.alt.c) which uses
`usleep(3)` so you can see what is happening with faster systems. This version
also checks for two args and it is the one we recommend one try first. See the
index.html files for details.
-Cody also added the [try.sh](1993/plummer/try.sh) and
-[try.alt.sh](1993/plummer/try.alt.sh) scripts that correspond to the original
+Cody also added the [try.sh](%%REPO_URL%%/1993/plummer/try.sh) and
+[try.alt.sh](%%REPO_URL%%/1993/plummer/try.alt.sh) scripts that correspond to the original
entry and the alt version, both allowing one to change the args (and in the case
of the alt one allowing one to change the amount to sleep).
[Yusuke](#yusuke) supplied a patch to get this to work in modern systems. This fix also
@@ -2134,16 +2134,16 @@ compile time. See the index.html for details.
[Cody](#cody) fixed this to work with clang. The problem was that the third arg to main()
@@ -2172,7 +2172,7 @@ but fixed to work with clang as well.
NOTE: the `N1` and `N2` are provided as notes in the index.html file describing
this code. Other code is also described there.
-Cody also added the [try.sh](1993/vanb/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/1993/vanb/try.sh) script.
@@ -2181,8 +2181,8 @@ Cody also added the [try.sh](1993/vanb/try.sh) script.
[Cody](#cody) fixed an infinite loop that could happen when you shoot an arrow
@@ -2215,8 +2215,8 @@ that already existed, how many you had and how many were stolen.
[Cody](#cody) fixed this to check that four args were specified (at a time it
@@ -2228,24 +2228,24 @@ of the times where this was changed to bug to fix status, for better or worse.
Cody also fixed the Makefile which was causing alt code to be compiled when it
shouldn't be.
-Cody also added the scripts [try.sh](1994/horton/try.sh) and
-[try.alt.sh](1994/horton/try.alt.sh).
+Cody also added the scripts [try.sh](%%REPO_URL%%/1994/horton/try.sh) and
+[try.alt.sh](%%REPO_URL%%/1994/horton/try.alt.sh).
Finally he added the article (written by the entry's author) cited in the
remarks: the full [USENIX Association Newsletter ;login: September / October
-1992 Vol. 17, No. 5](1994/horton/login_sept92.pdf) and the pages cited as a
+1992 Vol. 17, No. 5](%%REPO_URL%%/1994/horton/login_sept92.pdf) and the pages cited as a
shorter PDF file,
-[login_sept92-pp28-31.pdf](1994/horton/login_sept92-pp28-31.pdf). The full
+[login_sept92-pp28-31.pdf](%%REPO_URL%%/1994/horton/login_sept92-pp28-31.pdf). The full
newsletter was found on the Internet Wayback Machine and the article was
extracted as a PDF in the macOS `Preview.app` (`File -> Print` feature).
-[Cody](#cody) added the [try.sh](1994/imc/try.sh) script.
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/1994/imc/try.sh) script.
Cody also added inclusion of `unistd.h` for `getpid(2)`. While strictly speaking
this was not necessary (in multiple systems) it can sometimes be a problem and
@@ -2254,8 +2254,8 @@ entries that actually did not work because of missing or incorrect prototypes).
[Cody](#cody) fixed this so it would compile and work with modern compilers. The problem
@@ -2277,18 +2277,18 @@ rather than an annoying warning. A subtlety about this fix: if a line is greater
than 231 in length if the program chooses that line it might print the first 231
characters or it might print (up to) the next 231 characters and so on.
-Cody also added the [try.sh](1994/ldb/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/1994/ldb/try.sh) script.
[Cody](#cody) added two alt versions, [one which uses
-`fgets()`](1994/schnitzi/schnitzi.alt.c) but when fed its own source code cannot
+`fgets()`](%%REPO_URL%%/1994/schnitzi/schnitzi.alt.c) but when fed its own source code cannot
generate code that compile and another [one with a bigger buffer
-size](1994/schnitzi/schnitzi.alt2.c) which, when fed its own source code, will
+size](%%REPO_URL%%/1994/schnitzi/schnitzi.alt2.c) which, when fed its own source code, will
generate compilable code but not with the same buffer size but rather the
original buffer size. Cody explains this in the at [1994/schnitzi in
bugs.html](bugs.html#1994-schnitzi).
@@ -2301,13 +2301,13 @@ bugs.html](bugs.html#1994-schnitzi) where Cody also explains the magic for more
details. Later on, if nobody takes up the task, Cody might resume it, but for
now there is more important work to do so that the next contest can run.
-Cody also added the [try.sh](1994/schnitzi/try.sh) and
-[try.alt.sh](1994/schnitzi/try.alt.sh) scripts.
+Cody also added the [try.sh](%%REPO_URL%%/1994/schnitzi/try.sh) and
+[try.alt.sh](%%REPO_URL%%/1994/schnitzi/try.alt.sh) scripts.
[Cody](#cody) fixed a bug on systems where `EOF != -1`. The problem is that `getc()` and
@@ -2321,23 +2321,23 @@ check the [bugs.html](bugs.html) file.
[Cody](#cody) added the try scripts, four total, colour and black and white
pairs for the original entry and the alt code. These scripts are
-[try.color.sh](1994/tvr/try.color.sh), [try.bw.sh](1994/tvr/try.bw.sh),
-[try.alt.color.sh](1994/tvr/try.alt.color.sh) and
-[try.alt.bw.sh](1994/tvr/try.alt.bw.sh), respectively. The scripts go through
+[try.color.sh](%%REPO_URL%%/1994/tvr/try.color.sh), [try.bw.sh](1994/tvr/try.bw.sh),
+[try.alt.color.sh](%%REPO_URL%%/1994/tvr/try.alt.color.sh) and
+[try.alt.bw.sh](%%REPO_URL%%/1994/tvr/try.alt.bw.sh), respectively. The scripts go through
each mode allowed with two sizes, 128 and 256, allowing one to quit or skip each
(given that there are a lot of invocations this seemed like a good idea).
@@ -2349,16 +2349,16 @@ also changed to use `fgets(3)`.
[Cody](#cody) changed the Makefile to make this program more user friendly and easier to
use with other tools as well by making the program output not a space after each
number but rather a newline.
-Cody also added the scripts [try.sh](1994/weisberg/try.sh) and
-[primes.sh](1994/weisberg/primes.sh). The `primes.sh` script is used by
+Cody also added the scripts [try.sh](%%REPO_URL%%/1994/weisberg/try.sh) and
+[primes.sh](%%REPO_URL%%/1994/weisberg/primes.sh). The `primes.sh` script is used by
`try.sh` and if both `primes(1)` and `rev(1)` are installed it will reverse the
lines of the `weisberg`, feeding it to `primes(1)`, showing those that are
primes. It only does the reversed output because the program actually prints
@@ -2366,18 +2366,18 @@ primes.
[Cody](#cody) converted the spoiler compiler options (provided by the author) to be
-compiler commands and added a script [try.sh](1994/westley/try.sh) to
+compiler commands and added a script [try.sh](%%REPO_URL%%/1994/westley/try.sh) to
automate the spoiler commands to make it easier to see the game in action from
start to finish.
Cody also added the alternate version that will look fine on terminals not set
-to 80 columns and the [try.alt.sh](1994/westley/try.alt.sh) script to automate
-the play along the lines of the [try.sh](1994/westley/try.sh) script.
+to 80 columns and the [try.alt.sh](%%REPO_URL%%/1994/westley/try.alt.sh) script to automate
+the play along the lines of the [try.sh](%%REPO_URL%%/1994/westley/try.sh) script.
@@ -2386,13 +2386,14 @@ the play along the lines of the [try.sh](1994/westley/try.sh) script.
[Cody](#cody) fixed this so that it would work with macOS. Once it could compile it
additionally segfaulted under macOS which he also fixed.
-Cody also provided the [Alternate code](1995/cdua/cdua.alt.c) for fun :-) ) (in
+Cody also provided the [Alternate code](%%REPO_URL%%/1995/cdua/cdua.alt.c) for fun :-) ) (in
particular to make it easier to see the program do what it does in systems that
are too fast ... if there is such a thing anyway :-) ). See the index.html for
details on this.
@@ -2406,22 +2407,25 @@ function as the error message claims.
-[Cody](#cody) added the [try.sh](1995/dodsond1/try.sh) script that uses the text file he
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/1995/dodsond1/try.sh) script that uses the text file he
provided which is input we suggested one try with the entry.
[Cody](#cody) fixed the alt code so that it will compile with modern compilers. The
@@ -2429,34 +2433,37 @@ problem was a missing `int` for the `f` variable. He felt it was even more
important that it works because the layout does indeed look to him like a rat is
dropping core :-), something that the judges suggested.
-Cody also renamed `garry.test.sh` to [try.sh](1995/garry/try.sh) and improved it
+Cody also renamed `garry.test.sh` to [try.sh](%%REPO_URL%%/1995/garry/try.sh) and improved it
to to make sure the program is compiled before trying to use it as well as
adding a few enhancements. For the alt version he also added the
-[try.alt.sh](1995/garry/try.alt.sh) script to use the alt version, though the
+[try.alt.sh](%%REPO_URL%%/1995/garry/try.alt.sh) script to use the alt version, though the
alt version is not as important as alt code in other entries. In order to get
the paging to work right for the `garry.data` file leading blank lines had to be
added.
-[Cody](#cody) added the [try.sh](1995/leo/try.sh) script.
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/1995/leo/try.sh) script.
At our change in how to deal with spoilers, Cody also uudecoded the spoiler provided
by the author, putting it in [spoiler1.html](1995/leo/spoiler1.html).
[Cody](#cody) added the authors' [spoiler as a C
-file](1995/vanschnitz/vanschnitz.alt.c) as in 2023 we have decided that in most
+file](%%REPO_URL%%/1995/vanschnitz/vanschnitz.alt.c) as in 2023 we have decided that in most
cases all the code should be available for the wider audience, without having to
extract it. The exception is when the files are created by the entry or the
entry decrypts the text or something like that.
-Cody also added the [try.sh](1995/vanschnitz/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/1995/vanschnitz/try.sh) script.
@@ -2498,7 +2508,8 @@ Cody also added the [try.sh](1995/vanschnitz/try.sh) script.
[Cody](#cody) fixed a segfault in this program that prevented it from working right and
@@ -2510,13 +2521,14 @@ with say `sed(1)` (like `sed -i'' '/^#/d' august.oc` which has been added to
both the remarks and the `try.sh` script noted below) the code can proceed. This
problem existed in macOS.
-Cody also added the [try.sh](1996/august/try.sh) script that runs all the
+Cody also added the [try.sh](%%REPO_URL%%/1996/august/try.sh) script that runs all the
commands that were given by the judges in the try section, with the fix above
applied.
[Cody](#cody) proposed a fix for this to compile with clang and Landon implemented it
@@ -2533,14 +2545,15 @@ number is printed on a line by itself rather than having a long string of
numbers on the same line. This was not put in an alternate version but perhaps
it should be.
-Cody also added the [try.sh](1996/dalbec/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/1996/dalbec/try.sh) script.
-[Cody](#cody) provided an [alternate version](1996/eldby/eldby.alt.c) which uses
+[Cody](#cody) provided an [alternate version](%%REPO_URL%%/1996/eldby/eldby.alt.c) which uses
`usleep()` in between writing the output to make it easier to see what is going
on with faster systems and importantly also for those who are sensitive to text
flashing by rapidly (it affects him too but he also thinks it moves too fast
@@ -2549,14 +2562,15 @@ these reasons.
[Cody](#cody) fixed this to compile and work with modern systems. As he loved the
references in the code that could not compile he just commented out as little as
possible to get this to compile.
-Cody also added the rather useful [try.sh](1996/gandalf/try.sh) script to
+Cody also added the rather useful [try.sh](%%REPO_URL%%/1996/gandalf/try.sh) script to
really demonstrate the different ways of running the program ends up showing
either different output or the same output that we briefly pointed out.
@@ -2565,14 +2579,16 @@ BTW: it is perilous to try the patience of
[Cody](#cody) fixed this to not segfault under macOS. The problem was that the function
@@ -2583,17 +2599,19 @@ NOTE: if there is no X server running this program will still crash.
-[Cody](#cody) added the [try.sh](1996/schweikh1/try.sh) script.
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/1996/schweikh1/try.sh) script.
The author stated that `-I/usr/include` is needed by gcc in Solaris because
`errno.h` has two identical extern declarations of `errno`. That leads to an
@@ -2605,17 +2623,19 @@ the Makefile despite the fact that very few probably use Solaris nowadays.
-[Cody](#cody) added the [try.sh](1996/schweikh2/try.sh) script with a few commands to try
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/1996/schweikh2/try.sh) script with a few commands to try
along with a shorter version of something the author suggested one try (it is
suggested that one try the longer version too but it will run in an infinite
loop so having it in a script is less desired).
[Cody](#cody) updated the Makefile so that if it fails to compile it will try he
@@ -2624,7 +2644,8 @@ running a more complicated command: now one can just run `make`.
[Cody](#cody) fixed a segfault in this entry as well as it displaying environmental
@@ -2634,12 +2655,12 @@ interspersed with the output of the program. With the fix they no longer have
this problem. If `argc < 5` (`argv[4]` is referenced) it will not do anything
and it will not segfault either - this was caused by the body of the for() loop
which is now empty (it doesn't appear to be needed at all at least modernly).
-Note that you should check the [westley.alt.c](1996/westley/westley.alt.c) file
+Note that you should check the [westley.alt.c](%%REPO_URL%%/1996/westley/westley.alt.c) file
when reading the author's comments. To see how to use the original, see the
index.html file.
-Cody also added the two scripts, [try.sh](1996/westley/try.sh) and
-[try.alt.sh](1996/westley/try.alt.sh) to automate showing the different
+Cody also added the two scripts, [try.sh](%%REPO_URL%%/1996/westley/try.sh) and
+[try.alt.sh](%%REPO_URL%%/1996/westley/try.alt.sh) to automate showing the different
clocks, both with the fixed version and the original (alt) version.
Also, to fix any potential problem with displaying in GitHub the scripts
@@ -2652,7 +2673,8 @@ provided by the author, Cody added '.sh' to the `clock[1-3].sh` scripts.
[Cody](#cody) improved the Makefile to allow for easier redefining the control
@@ -2660,7 +2682,7 @@ keys and time step that the author set up.
Cody also set up the Makefile to have an alt build (using the same code) for those
who do not have a page up or page down key and added the
-[keysym.h](1998/banks/keysym.h) header file as a reference for other keys one
+[keysym.h](%%REPO_URL%%/1998/banks/keysym.h) header file as a reference for other keys one
can use if they wish to modify the controls. One can certainly do this even if
they do have page up and page down but this gives a default for those who don't
have them like with Macs. The alt build hard codes the page up and page down
@@ -2669,7 +2691,8 @@ you can configure them all in both builds it shouldn't matter.
[Cody](#cody), out of an abundance of caution, added a second arg to `main()` as some
@@ -2679,32 +2702,35 @@ appears that they do allow 1 but for instance 4 is not allowed. However as it's
quite possible they will 'fix' this defect it would be better to have this not
be a problem at such a time.
-Cody also added the [bas1.sh](1998/bas1/bas1.sh) script to simplify running the
+Cody also added the [bas1.sh](%%REPO_URL%%/1998/bas1/bas1.sh) script to simplify running the
program.
-[Cody](#cody) added the [try.sh](1998/bas2/try.sh) script which runs some default actions
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/1998/bas2/try.sh) script which runs some default actions
as well as allowing one to pass in different file names or strings.
[Cody](#cody) added a call to `endwin()` to restore terminal sanity (echo etc.) when
exiting the program (in both versions).
-Cody also added the [try.sh](1998/chaos/try.sh) script that runs the program on
+Cody also added the [try.sh](%%REPO_URL%%/1998/chaos/try.sh) script that runs the program on
all the data files, giving instructions on how to rotate and zoom in and out,
prior to each run.
[Cody](#cody) changed a `int *` used for `fopen(3)` to be a `FILE *` to be more correct
@@ -2715,44 +2741,48 @@ the old style of `main()` args so that it reads `i,love_unix` more naturally,
and by changing the `typedef int lint` to be `typedef int _int`. See the code
for why this has to be done this way.
-Cody also added the [try.sh](1998/df/try.sh) script which runs the program in a
+Cody also added the [try.sh](%%REPO_URL%%/1998/df/try.sh) script which runs the program in a
loop until one hits `q` (or `Q`) or sends intr/ctrl-c. He also proposed there's
a way to cheat very easily. Can you figure out how?
[Cody](#cody) made the program more portable by changing the void return type of `main()`
to be `int` (in both versions).
-Cody added the scripts [try.sh](1998/dlowe/try.sh),
-[try.alt.sh](1998/dlowe/try.alt.sh), [pootify.sh](1998/dlowe/pootify.sh) and
-[pootify.cgi.sh](1998/dlowe/pootify.cgi.sh) for a fun example use of the
+Cody added the scripts [try.sh](%%REPO_URL%%/1998/dlowe/try.sh),
+[try.alt.sh](%%REPO_URL%%/1998/dlowe/try.alt.sh), [pootify.sh](1998/dlowe/pootify.sh) and
+[pootify.cgi.sh](%%REPO_URL%%/1998/dlowe/pootify.cgi.sh) for a fun example use of the
program, a local pootifier of web pages and a CGI pootifier. See [historical
-remarks](1998/dlowe/index.html#historical-remarks) for more details on the
+remarks](%%REPO_URL%%/1998/dlowe/index.html#historical-remarks) for more details on the
pootify scripts.
-[Cody](#cody) added [alt code](1998/dloweneil/dloweneil.alt.c) which has vi(m) movement
+[Cody](#cody) added [alt code](%%REPO_URL%%/1998/dloweneil/dloweneil.alt.c) which has vi(m) movement
(in addition to the other keys except for dropping it's not `d` but `j` or
space) keys as well as allowing one to quit the game.
[Cody](#cody) fixed this to compile. The problem was the intermediate steps to get to the
@@ -2770,12 +2800,13 @@ code look like the original with just an extra arg.
In some versions of clang `-Wno-int-conversion` had to be added to the
`CSILENCE` variable of the Makefile.
-Cody also added the [try.sh](1998/fanf/try.sh) script to show the output of some
+Cody also added the [try.sh](%%REPO_URL%%/1998/fanf/try.sh) script to show the output of some
of the expressions that we selected.
[Cody](#cody) fixed invalid data types which prevented this entry from working, causing a
@@ -2797,12 +2828,13 @@ doing:
((V[1]&&((atoi(V[1])>0&&atoi(V[1])<27))||(exit(1),1)));
```
-Cody also added the [try.sh](1998/schnitzi/try.sh) script to help users try the
+Cody also added the [try.sh](%%REPO_URL%%/1998/schnitzi/try.sh) script to help users try the
commands that we recommended as well as some added by him.
[Cody](#cody) fixed this for modern systems (it did not work at all) and added an
@@ -2858,11 +2890,12 @@ MACRO value` it will work, assuming that compiler can run, of course.
Cody also added the perl script that the author provided that they used to
compute the character count in the code according to the contest rules of 1998
-in the file [charcount.pl](1998/schweikh1/charcount.pl).
+in the file [charcount.pl](%%REPO_URL%%/1998/schweikh1/charcount.pl).
[Cody](#cody) fixed the code to not trigger an internal compiler error in gcc:
@@ -2876,21 +2909,22 @@ in the file [charcount.pl](1998/schweikh1/charcount.pl).
The string `"01\015"` had to be changed to `ONE(O(1,1,2,6,0,6))`. For an
interesting historical explanation and further details and fun, see the
-[historical remarks](1998/schweikh2/index.html#historical-remarks) in the
+[historical remarks](%%REPO_URL%%/1998/schweikh2/index.html#historical-remarks) in the
index.html.
Cody also added an `int` after `register` in `main()` in case clang decides to
have a problem with that in the future which is not entirely out of the
question.
-Cody also added the [try.sh](1998/schweikh2/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/1998/schweikh2/try.sh) script.
-[Cody](#cody) added the [alternate code](1998/schweikh3/index.html#alternate-code) which allows one
+[Cody](#cody) added the [alternate code](%%REPO_URL%%/1998/schweikh3/index.html#alternate-code) which allows one
to reconfigure the size constant in the rare case that the author wrote about
occurs.
@@ -2899,7 +2933,7 @@ of clang say that `main()` can only have 0, 2 or 3 args. These versions accept 1
arg but it is entirely possible that they fix this so this should prevent it
from breaking if that happens.
-Cody added the [try.sh](1998/schweikh3/try.sh) script to make it easier to try
+Cody added the [try.sh](%%REPO_URL%%/1998/schweikh3/try.sh) script to make it easier to try
the commands that we suggested. One command was not added, that of the to use
command.
@@ -2924,7 +2958,8 @@ information for the entry. It has not been added to any JSON file.
[Cody](#cody) fixed the assumption that `EOF` is `-1` (the author noted that it assumes
@@ -2936,7 +2971,7 @@ the `EXIT_FAILURE` change was done by redefining `exit(3)` to be `exit(a) return
EXIT_FAILURE` and `1` was passed to it (`return` was used because the original
program had `return 1`).
-Cody also added the [try.sh](1998/tomtorfs/try.sh) script to try out a few
+Cody also added the [try.sh](%%REPO_URL%%/1998/tomtorfs/try.sh) script to try out a few
commands that we recommended.
@@ -2946,57 +2981,63 @@ commands that we recommended.
[Cody](#cody) changed this entry to use `fgets(3)` instead of `gets(3)`. This involved
changing the `K` arg to `gets(3)` to `&K` in `fgets(3)`.
-Cody also added the [try.sh](2000/anderson/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/2000/anderson/try.sh) script.
-[Cody](#cody) added the [try.sh](2000/bmeyer/try.sh) script with some improvements to the
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2000/bmeyer/try.sh) script with some improvements to the
commands we recommended like not assuming the number of columns one has in their
terminal.
[Cody](#cody) fixed this to compile in systems that require one to explicitly link in
`libm`.
-Cody also added the [try.sh](2000/briddlebane/try.sh) script for those who are
+Cody also added the [try.sh](%%REPO_URL%%/2000/briddlebane/try.sh) script for those who are
feeling a bit too confident, cocky or even happy :-)
[Cody](#cody) made this more portable by changing the `void main` to `int main`.
-He also added the [try.sh](2000/dhyang/try.sh) script.
+He also added the [try.sh](%%REPO_URL%%/2000/dhyang/try.sh) script.
[Cody](#cody) fixed this to compile with more recent perl versions; the symbol that's now
`PL_na` was once `na`. He notes that this entry crashes under macOS but it works
under Linux after this change.
-Cody also added the [try.sh](2000/dlowe/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/2000/dlowe/try.sh) script.
[Cody](#cody) fixed this for modern compilers. Depending on the compiler it would either
@@ -3012,8 +3054,8 @@ segfault when run or not compile at all (gcc and clang respectively).
Cody also provided alternate code that supports the southern hemisphere.
-Cody also provided the [try.sh](2000/natori/try.sh) and
-[try.alt.sh](2000/natori/try.alt.sh) scripts that show the Moon phase in
+Cody also provided the [try.sh](%%REPO_URL%%/2000/natori/try.sh) and
+[try.alt.sh](%%REPO_URL%%/2000/natori/try.alt.sh) scripts that show the Moon phase in
artistic ways. It is recommended one try both a number of times in a row on
different days (that is run `./try.sh` several times in a row a few days apart,
until you see all the Moon phases, and run `./try.alt.sh` a few times in a row a
@@ -3031,23 +3073,26 @@ more confusing (even if not confusing).
[Cody](#cody) made this more portable by changing the `void main` to `int main`.
-Cody also added the [try.sh](2000/primenum/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/2000/primenum/try.sh) script.
[Cody](#cody) fixed an infinite loop that occurred if invalid input was entered, flooding
@@ -3063,14 +3108,16 @@ on it to assign to the `int`s, much like with `1987/lievaart`. The strings are
-[Cody](#cody) added the [alt code](2000/tomx/index.html#alternate-code) based on the
+[Cody](#cody) added the [alt code](%%REPO_URL%%/2000/tomx/index.html#alternate-code) based on the
author's remarks with a fix for modern systems and he also added the two
-scripts, [try.sh](2000/tomx/try.sh) and [try.alt.sh](2000/tomx/try.alt.sh) for
+scripts, [try.sh](%%REPO_URL%%/2000/tomx/try.sh) and [try.alt.sh](2000/tomx/try.alt.sh) for
the main code and the alt code respectively.
And although the scripts do `chmod +x` on the source code (see the index.html for
@@ -3133,7 +3181,8 @@ details) the source code is now executable by default.
[Cody](#cody) fixed both the supplementary program and the program itself (both of which
@@ -3215,13 +3264,14 @@ Cody also added a [program](anonymous.bed.c) like [anonymous.ten.c](anonymous.te
[Ten Green Bottles](https://en.wikipedia.org/wiki/Ten_Green_Bottles) but which
sings [Ten in the Bed](https://allnurseryrhymes.com/ten-in-the-bed/) instead.
-As well he added the [try.sh](2001/anonymous/try.sh) so that one can
+As well he added the [try.sh](%%REPO_URL%%/2001/anonymous/try.sh) so that one can
attempt to use the program as it was designed but if compiling as 32-bit fails
it will at least run the supplementary program as a 64-bit program directly.
[Cody](#cody) fixed this to compile with clang but according to the author this will not
@@ -3238,7 +3288,7 @@ case of `main()` this was not possible.
compilers besides what Cody did.
Cody entirely fixed the [supplementary
-bellard.otccex.c](2001/bellard/bellard.otccex.c) so it does not segfault and
+bellard.otccex.c](%%REPO_URL%%/2001/bellard/bellard.otccex.c) so it does not segfault and
works as well (it did not work at all). The main problem was that some ints were
being used as pointers. This includes, for example, an int used as a `char *`,
an int used as a function pointer and an int to access `argv` as well as there
@@ -3269,7 +3319,8 @@ by Yusuke.
[Cody](#cody) fixed this to work with clang by adding another function that is allowed to
@@ -3278,13 +3329,14 @@ letter word that would match the format and because it's pain that clang forces
this. :-) This fix makes a point of the author's notes on portability no longer
valid, BTW.
-Cody also added the [try.sh](2001/cheong/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/2001/cheong/try.sh) script.
He also fixed it to check the number of args.
[Cody](#cody) added a value to `return` in `main()` to make it more portable.
@@ -3312,11 +3364,12 @@ those with macOS) (to do with sound; see his
[/2013/endoh3/index.html](2013/endoh3/index.html) entry where he also refers to
sound devices in macOS).
-Cody added the [try.sh](2001/coupard/try.sh).
+Cody added the [try.sh](%%REPO_URL%%/2001/coupard/try.sh).
The ANSI escape codes were no longer valid but [Yusuke](#yusuke) provided a patch to fix
@@ -3327,12 +3380,13 @@ etc.) after exiting even if you don't press 'q', if you crash or if you kill the
program prematurely. This was done by adding an explicit call to `e()` at the
end of `main()`.
-Cody also added the [alt code](2001/ctk/index.html#alternate-code) that adds
+Cody also added the [alt code](%%REPO_URL%%/2001/ctk/index.html#alternate-code) that adds
vi(m) movement keys.
[Cody](#cody) fixed this so that the when compiling the code the program is not executed
itself by itself which just showed the usage string and exited. The [script
-herrmann1.sh](2001/herrmann1/herrmann1.sh) is used to compile the program but
+herrmann1.sh](%%REPO_URL%%/2001/herrmann1/herrmann1.sh) is used to compile the program but
it's also how you invoke the program.
-Cody provided the file [plus1.turing](2001/herrmann1/plus1.turing) based on the
+Cody provided the file [plus1.turing](%%REPO_URL%%/2001/herrmann1/plus1.turing) based on the
author's remarks.
-He also fixed the [script herrmann1.sh](2001/herrmann1/herrmann1.sh) for
+He also fixed the [script herrmann1.sh](%%REPO_URL%%/2001/herrmann1/herrmann1.sh) for
shellcheck. In particular there were quite a few:
@@ -3367,11 +3422,12 @@ shellcheck. In particular there were quite a few:
errors/warnings.
-Cody also added the [try.sh](2001/herrmann1/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/2001/herrmann1/try.sh) script.
[Cody](#cody) fixed this to work with both 64-bit and 32-bit compilers by changing most
@@ -3380,7 +3436,7 @@ compile with clang by changing the args of main to be `int` and `char **,
respectively, and changing specific references to the `argv` arg, casting to
`long` (was `int` but the 64-bit fix requires `long`) which was its old type.
-Cody also added the [try.sh](2001/herrmann2/try.sh) script which might be more
+Cody also added the [try.sh](%%REPO_URL%%/2001/herrmann2/try.sh) script which might be more
useful than any other place as the command to try is quite long with C code.
For some reason the original code was missing (presumingly because it had been
@@ -3388,7 +3444,8 @@ added to `.gitignore` by accident) but Cody restored it from the archive.
[Cody](#cody) improved the Makefile to allow one to more easily set up the port,
@@ -3398,7 +3455,7 @@ Cody also slowed down the ball just a tad (it was already a `-D` macro that was
in the code) as it went too fast for the speed at which the paddles move even
when holding down the movement keys (but see below).
-Cody also provided an [alternate version](2001/kev/kev.alt.c) which lets you use
+Cody also provided an [alternate version](%%REPO_URL%%/2001/kev/kev.alt.c) which lets you use
the arrow keys on your keyboard instead of the more awkward '`,`' and '`.`'.
He updated both versions to have `#ifndef..#endif` pairs for the macros so one
@@ -3410,10 +3467,11 @@ without having to sacrifice playability by running `make`.
-[Cody](#cody) added the [try.sh](2001/ollinger/try.sh) script.
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2001/ollinger/try.sh) script.
Cody also fixed it to not crash if not enough args, exiting 1 instead. This was
done at a time where it was said to be a bug that should be fixed, for better or
@@ -3421,21 +3479,23 @@ worse.
[Cody](#cody) fixed this to not crash if not enough args as this was not documented by
the author. The other problems are documented so were not fixed. See
index.html for details.
-Cody also added the [try.sh](2001/schweikh/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/2001/schweikh/try.sh) script.
-[Cody](#cody) added the script [try.sh](2001/westley/try.sh) to automate a heap of commands
+[Cody](#cody) added the script [try.sh](%%REPO_URL%%/2001/westley/try.sh) to automate a heap of commands
that we, the IOCCC judges, suggested, as well as some additional ones that he
thought would be fun. He also provided the sort and punch card versions,
described in the index.html, based on the author's remarks.
@@ -3447,29 +3507,32 @@ described in the index.html, based on the author's remarks.
-[Cody](#cody) added an [alternate version](2004/arachnid/index.html#alternate-code) which
+[Cody](#cody) added an [alternate version](%%REPO_URL%%/2004/arachnid/index.html#alternate-code) which
allows those like himself used to `h`, `j`, `k` and `l` movement keys to not get
lost. Non rogue players, vi users and Dvorak typists are invited to get lost (or
use the original version)! :-)
Cody also renamed the `arachnid.info` file to
-[arachnid.txt](2004/arachnid/arachnid.txt) as it's not really an informative
+[arachnid.txt](%%REPO_URL%%/2004/arachnid/arachnid.txt) as it's not really an informative
file but a maze file. The extension `.maz` was not chosen to help with (some?)
browsers knowing what to do with it.
[Cody](#cody) added three different [alternate
-versions](2004/gavare/index.html#alternate-code):
+versions](%%REPO_URL%%/2004/gavare/index.html#alternate-code):
-- [gavare.alt.c](2004/gavare/gavare.alt.c) allows you to change the image size
+- [gavare.alt.c](%%REPO_URL%%/2004/gavare/gavare.alt.c) allows you to change the image size
and anti-alias setting at compile time.
-- [gavare.alt2.c](2004/gavare/gavare.alt2.c) is like
-[gavare.alt.c](2004/gavare/gavare.alt.c) but it should work for Windows as well
+- [gavare.alt2.c](%%REPO_URL%%/2004/gavare/gavare.alt2.c) is like
+[gavare.alt.c](%%REPO_URL%%/2004/gavare/gavare.alt.c) but it should work for Windows as well
(it sets binary mode on `stdout`).
-- [gavare.r3.c](2004/gavare/gavare.r3.c) is the author's unobfuscated version
+- [gavare.r3.c](%%REPO_URL%%/2004/gavare/gavare.r3.c) is the author's unobfuscated version
that was used during development, found on their [website about the
entry](https://gavare.se/ioccc/ioccc_gavare.c.html).
-[Cody](#cody) provided the [alt code](2004/gavin/index.html#alternate-code) for
+[Cody](#cody) provided the [alt code](%%REPO_URL%%/2004/gavin/index.html#alternate-code) for
those who want to use QEMU. The most important part of this is the macro `K` has
to be defined as `1`, not `0`.
[Yusuke](#yusuke) provided the `kernel` and `fs.tar` files which can be used if
you cannot normally use this entry. Instead of generating the files just use the
-files provided, found under the [img/](2004/gavin/img/) directory. Note that
+files provided, found under the [img/](%%REPO_URL%%/2004/gavin/img/) directory. Note that
the `img/fs.tar` extracts into `fs/` so you will have to fix the tarball; this
is done this way to prevent extraction from the entry directory overwriting the
files and causing `make clobber` to wipe some of them out.
[Cody](#cody) fixed this to compile with gcc (it worked with clang). The problem was the
@@ -3584,17 +3652,18 @@ this ended up with a number of errors like:
and various other problems.
-Cody also added [alt code](2004/jdalbec/index.html#alternate-code) which allows
+Cody also added [alt code](%%REPO_URL%%/2004/jdalbec/index.html#alternate-code) which allows
one to control how many numbers after the `:` to print before printing a
newline, so that one can see the output a bit better (though for lines that have
a lot of numbers this will be harder to see).
-Finally Cody added [try.sh](2004/jdalbec/try.sh) and
-[try.alt.sh](2004/jdalbec/try.alt.sh) to demonstrate both versions.
+Finally Cody added [try.sh](%%REPO_URL%%/2004/jdalbec/try.sh) and
+[try.alt.sh](%%REPO_URL%%/2004/jdalbec/try.alt.sh) to demonstrate both versions.
[Cody](#cody) reported that this entry cannot be optimised by the compiler as otherwise
@@ -3604,7 +3673,7 @@ Cody, out of an abundance of caution for clang, added a second arg to `main()`
as some versions complain about the number of args and although they accept 1 it
is entirely possible it will eventually be that they don't.
-Cody also added the [try.sh](2004/kopczynski/try.sh) script and various data
+Cody also added the [try.sh](%%REPO_URL%%/2004/kopczynski/try.sh) script and various data
files: [kopczynski-a](kopczynski-a) to demonstrate what happens when art more
like a letter is fed to the program and the `kopczynski*-rev` files which are
the data files reversed with `rev(1)`. One had to be modified additionally to
@@ -3612,25 +3681,28 @@ get it to work, that being `kopczynski-10-rev`.
[Cody](#cody) and Landon individually fixed this to work with clang.
-Cody also added the [try.sh](2004/newbern/try.sh) script (with a hidden feature
+Cody also added the [try.sh](%%REPO_URL%%/2004/newbern/try.sh) script (with a hidden feature
that the author referred to and was documented by [Yusuke](#yusuke) though Cody
chose the word `IOCCC` instead of `AAA`).
[Cody](#cody) made this use `fgets(3)`.
@@ -3639,14 +3711,15 @@ He also changed the time factor in the data files as the animations went too
fast in modern systems, especially the scrolling text of
[schnitzi.inp1](schnitzi.inp1).
-Cody also added the [try.sh](2004/schnitzi/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/2004/schnitzi/try.sh) script.
-[Cody](#cody) added the [try.sh](2004/sds/try.sh) script.
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2004/sds/try.sh) script.
Also, after the README.md file had copyright changes, it broke the script so
Cody made a copy of the older README.md file into `README_sds.txt` and added that
@@ -3654,7 +3727,8 @@ to the repo for the script instead.
[Cody](#cody) fixed this to compile in Linux. Although it compiled cleanly in macOS (and
@@ -3700,18 +3774,18 @@ BSD?) the code failed to compile at all in Linux due to:
Unfortunately the fix required heavy modification to the original file (see
below) and also inclusion of what used to be generated by the
-[Makefile](2004/vik2/Makefile) but now it at least works for both Linux and
+[Makefile](%%REPO_URL%%/2004/vik2/Makefile) but now it at least works for both Linux and
macOS.
As for the fix itself it required changing the C pre-processor macros that
resulted in macros themselves like `#ifdef`, `#else` etc. to be `#ifdef`,
-`#else` etc. and also the inclusion of the file [vik2_1.c](2004/vik2/vik2_1.c)
+`#else` etc. and also the inclusion of the file [vik2_1.c](%%REPO_URL%%/2004/vik2/vik2_1.c)
(which actually includes itself, once directly and now by `__FILE__`)
which used to be generated by the Makefile via `cc -E`.
Cody also made it so that the `FNAME` is (for the entry file itself and
`vik2_1.c`: it shouldn't be done for
-[vik2.possible.cat.death.c](2004/vik2/vik2.possible.cat.death.c)!) `__FILE__`
+[vik2.possible.cat.death.c](%%REPO_URL%%/2004/vik2/vik2.possible.cat.death.c)!) `__FILE__`
just to make it a bit easier to compile.
@@ -3721,20 +3795,21 @@ just to make it a bit easier to compile.
[Cody](#cody) fixed the test script, described by the author in their remarks, to refer
to the proper compiled program (it's hardcoded). This had never been done and so
the script did not even work (at least modernly?).
-He also added the [alt code](2005/aidan/index.html#alternate-code) based on the
+He also added the [alt code](%%REPO_URL%%/2005/aidan/index.html#alternate-code) based on the
author's remarks which is a different approach than the one used and which
(according to the author) 'is slower (particularly in worst-case or nearly so
scenarios), inelegant, and not a good starting place for sudoku generation.'
-Cody added the [try.sh](2005/aidan/try.sh) and
-[try.alt.sh](2005/aidan/try.alt.sh) scripts that correspond to the entry and
+Cody added the [try.sh](%%REPO_URL%%/2005/aidan/try.sh) and
+[try.alt.sh](%%REPO_URL%%/2005/aidan/try.alt.sh) scripts that correspond to the entry and
alt code respectively.
Cody added the `make test` and `make test-n0` rules for easier use of the test
@@ -3742,7 +3817,8 @@ suite.
[Cody](#cody) fixed a problem where in some systems (like macOS) the `stty sane` would
@@ -3753,22 +3829,24 @@ The author noted that one can define `NO_STTY` to not use `stty(1)` at all
(either to prevent having to hit enter or to turn echo off/on) which is
explained in the index.html.
-Cody added the [alt code](2005/anon/index.html#alternate-code) with vi(m) like
+Cody added the [alt code](%%REPO_URL%%/2005/anon/index.html#alternate-code) with vi(m) like
movements.
-[Cody](#cody) added the [input.txt](2005/boutines/input.txt) data file based on suggested
+[Cody](#cody) added the [input.txt](%%REPO_URL%%/2005/boutines/input.txt) data file based on suggested
input from the author, adapting it to a command to try out.
-Cody also added the [try.sh](2005/boutines/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/2005/boutines/try.sh) script.
After Landon fixed the entry to compile with clang [Cody](#cody) noticed this
@@ -3825,7 +3903,7 @@ or as a diff:
+;;char*A=0,*_,*R,*Q, D[9999],*r,l[9999],T=42, M,V=32;int *E,k[9999],B[1 <<+21],*N=B+
```
-Cody also added the [try.sh](2005/giljade/try.sh) script which also lets one see
+Cody also added the [try.sh](%%REPO_URL%%/2005/giljade/try.sh) script which also lets one see
the beauty of the entry without having to use vi(m), should they be afraid of
getting stuck in it (and for ease of use). :-)
@@ -3834,11 +3912,12 @@ Finally, to improve upon the test-suite provided by the program, Cody added the
temporary file the compilation including the 'Line' lines. After that is done it
uses `grep -c` on the file to show that there are indeed as many versions the
program generates as the author states, 180. If it does not find 180 it is an
-error; otherwise it is success. It uses [test.sh](2005/giljade/test.sh).
+error; otherwise it is success. It uses [test.sh](%%REPO_URL%%/2005/giljade/test.sh).
[Cody](#cody) added explicit linking of libm (`-lm`) for systems like Linux that seem to
@@ -3847,14 +3926,16 @@ not do it implicitly (like macOS does).
[Cody](#cody) fixed this to work in Linux. The problem was an unknown escape sequence,
@@ -3884,11 +3965,12 @@ what is supposed to happen. It is not known, however, if having to change the
`\N` to `\n` ended up breaking any LISP. The other examples given by the author
also show correct output though.
-Cody also added the [try.sh](2005/mikeash/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/2005/mikeash/try.sh) script.
[Cody](#cody) added the (untested) [alternate
-code](2005/persano/index.html#alternate-code) which should work for Windows as it
+code](%%REPO_URL%%/2005/persano/index.html#alternate-code) which should work for Windows as it
sets binary mode on `stdout`. It is untested as Cody has no Windows system to
test it on.
-Cody also added the [try.sh](2005/persano/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/2005/persano/try.sh) script.
[Cody](#cody) added the saved (with the `SAVE` command) BASIC program `PET` which was:
@@ -3943,10 +4027,10 @@ followed by the commands:
to both save and test run it.
-Cody added the [try.sh](2005/sykes/try.sh) script which runs in a loop with a
+Cody added the [try.sh](%%REPO_URL%%/2005/sykes/try.sh) script which runs in a loop with a
menu of things one might wish to try, asking if they wish to continue when done.
-Cody added the script [test.sh](2005/sykes/test.sh) and the make rule `test` to
+Cody added the script [test.sh](%%REPO_URL%%/2005/sykes/test.sh) and the make rule `test` to
run the test suite. The program will enter an infinite loop after it runs so you
have to hit ctrl-c to end it which the script tells you.
@@ -3955,16 +4039,18 @@ interrupt is set to in order to exit the program.
-[Cody](#cody) added [try.sh](2005/timwi/try.sh). It only has one command as he doesn't
+[Cody](#cody) added [try.sh](%%REPO_URL%%/2005/timwi/try.sh). It only has one command as he doesn't
want to knacker his brain any more than it might or might not already be :-) and
he doesn't want to damage anyone else's brain either. :-)
[Cody](#cody) fixed this in the case that the program is compiled or linked/copies to
@@ -3995,51 +4082,56 @@ if one runs it from another directory, specifying the directory, it'll not catch
[Cody](#cody) fixed a segfault in macOS with this entry. The problem was a missing `+1`
for strlen() with malloc(). This prevented it from working.
-Cody also added the [try.sh](2006/birken/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/2006/birken/try.sh) script.
[Cody](#cody) fixed the Makefile to work in systems where the `lpthread` is not
implicitly linked in.
-Cody also added the [try.sh](2006/borsanyi/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/2006/borsanyi/try.sh) script.
[Cody](#cody) fixed this so that it will not crash without an arg after it was suggested
this should be fixed.
-Cody also added the [try.sh](2006/hamre/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/2006/hamre/try.sh) script.
-[Cody](#cody) added the [alternate code](2006/monge/index.html#alternate-code) that lets
+[Cody](#cody) added the [alternate code](%%REPO_URL%%/2006/monge/index.html#alternate-code) that lets
one resize the image and redefine the number of iterations.
-Cody also added the [try.sh](2006/monge/try.sh) and
-[try.alt.sh](2006/monge/try.alt.sh) scripts.
+Cody also added the [try.sh](%%REPO_URL%%/2006/monge/try.sh) and
+[try.alt.sh](%%REPO_URL%%/2006/monge/try.alt.sh) scripts.
Cody also fixed the Makefile to use `sdl-config` (which is what the author
stated too though that was noticed later), not `sdl2-config` as two functions
@@ -4054,22 +4146,24 @@ bugs.html](bugs.html#2006-monge).
As [Cody](#cody) is a lost :-) `vim` user he took the author's remarks to add support
-back for arrow keys in the [alternate version](2006/night/night.alt.c).
+back for arrow keys in the [alternate version](%%REPO_URL%%/2006/night/night.alt.c).
[Cody](#cody) fixed this entry to work with clang which has a defect with the args to
`main()`: it requires specific types: `int` and `char ** for the first and
latter args.
-Cody also provided the [alternate version](2006/sloane/sloane.alt.c), which
+Cody also provided the [alternate version](%%REPO_URL%%/2006/sloane/sloane.alt.c), which
allows one to see what is going on in modern systems, and which we recommend one
use _first_.
@@ -4093,10 +4187,11 @@ program in some systems he also added `-include ...` to the Makefile as well.
-[Cody](#cody) added the [try.sh](2006/stewart/try.sh) script.
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2006/stewart/try.sh) script.
Cody also fixed it so that if the file cannot be opened it exits rather than trying
to read from the file. This was done at a time when it was considered to be a
@@ -4104,41 +4199,45 @@ bug to fix.
-[Cody](#cody) provided the [alt code](2006/sykes1/index.html#alternate-code) based on the
+[Cody](#cody) provided the [alt code](%%REPO_URL%%/2006/sykes1/index.html#alternate-code) based on the
author's remarks.
-Cody also added the [try.sh](2006/sykes1/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/2006/sykes1/try.sh) script.
-Cody also provided the [bedlam-cubes.pdf](2006/sykes1/bedlam-cubes.pdf) file,
+Cody also provided the [bedlam-cubes.pdf](%%REPO_URL%%/2006/sykes1/bedlam-cubes.pdf) file,
obtained from the Internet Wayback Machine, as the file was no longer available.
The video was also no longer available but Cody found an alternative and added
it to the repo as well.
[Cody](#cody), out of an abundance of caution for `clang`'s defects, made `main()` have
to args instead of 1 as some versions report that `main()` must have 0, 2 or 3
args, even though at least one of those versions allows 1 arg only.
-Cody also added the [try.sh](2006/sykes2/try.sh) script for easier use of the
+Cody also added the [try.sh](%%REPO_URL%%/2006/sykes2/try.sh) script for easier use of the
entry to show the clock update in real time.
[Cody](#cody) fixed a segfault in this program which was making it fail to work under
@@ -4159,7 +4258,8 @@ where appears the `IMPORT.COM` and `HALT.COM` files.
[Cody](#cody) fixed a crash and a display problem in this entry so that it now works in
@@ -4169,7 +4269,7 @@ so some `int`s were changed to `long`s. The display problem might or might not
have been a problem in Linux with the old `int`s but this is no longer known.
Cody also added the code that _should_ work for Windows,
-[toledo3.alt.c](2006/toledo3/toledo3.alt.c), based on the author's remarks.
+[toledo3.alt.c](%%REPO_URL%%/2006/toledo3/toledo3.alt.c), based on the author's remarks.
We're not able to test this.
@@ -4179,54 +4279,61 @@ We're not able to test this.
[Cody](#cody), out of an abundance of caution, added a second arg to `main()` as some
versions of clang complain about not only the type of each arg to `main()` but
the number of args as well.
-Cody also added the [try.sh](2011/borsanyi/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/2011/borsanyi/try.sh) script.
-[Cody](#cody) added the video file [boing-ball.mp4](2011/eastman) which is the demo the
+[Cody](#cody) added the video file [boing-ball.mp4](%%REPO_URL%%/2011/eastman) which is the demo the
author referred to.
[Cody](#cody) fixed this for macOS. Before the fix it segfaulted. It worked fine under
@@ -4235,44 +4342,48 @@ for 64-bit so it was then tested as a 32-bit binary (Linux) and 64-bit binary
(Linux, macOS) and both work. It was fixed by changing some `int`s to `long`s
and now it does work with 64-bit systems as well as 32-bit systems.
-Cody also added the [try.sh](2011/goren/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/2011/goren/try.sh) script.
Cody added the following words of wisdom: `'"this" is not a pipe but "!" is'`.
-[Cody](#cody) added the [try.sh](2011/hamaji/try.sh) script and the `.nono` files
-[conway-game-of-life.nono](2011/hamaji/conway-game-of-life.nono),
-[multi-solutions.nono](2011/hamaji/multi-solutions.nono),
-[no-solution.nono](2011/hamaji/no-solution.nono),
-[plus.nono](2011/hamaji/plus.nono) and [smiley.nono](2011/hamaji/smiley.nono).
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2011/hamaji/try.sh) script and the `.nono` files
+[conway-game-of-life.nono](%%REPO_URL%%/2011/hamaji/conway-game-of-life.nono),
+[multi-solutions.nono](%%REPO_URL%%/2011/hamaji/multi-solutions.nono),
+[no-solution.nono](%%REPO_URL%%/2011/hamaji/no-solution.nono),
+[plus.nono](%%REPO_URL%%/2011/hamaji/plus.nono) and [smiley.nono](2011/hamaji/smiley.nono).
The latter two `.nono` files were taken from
and the others were from the authors' remarks.
[Cody](#cody) fixed the program to not crash if no arg was specified as this was not a
documented feature.
-Cody also added the [try.sh](2011/konno/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/2011/konno/try.sh) script.
[Cody](#cody) fixed a minor problem that showed up in both Linux and macOS. He notes
@@ -4283,20 +4394,21 @@ particular with the silicon chip. See [2011/richards in
bugs.html](bugs.html#2011-richards) for more details and a
document from Apple about how it might be fixed if anyone is brave enough to
try. If they do they might want to look also at
-[richards.alt.c](2011/richards/richards.alt.c), for whatever it might or might
+[richards.alt.c](%%REPO_URL%%/2011/richards/richards.alt.c), for whatever it might or might
not be worth, as it is a possible starting point that Cody added.
-Cody also added the [try.sh](2011/richards/try.sh) and the
-[try.alt.sh](2011/richards/try.alt.sh) scripts. The `try.alt.sh` script will be
+Cody also added the [try.sh](%%REPO_URL%%/2011/richards/try.sh) and the
+[try.alt.sh](%%REPO_URL%%/2011/richards/try.alt.sh) scripts. The `try.alt.sh` script will be
helpful to test any fixes for Apple silicon chips (see [2011/richards in
bugs.html](bugs.html#2011-richards) for more details).
-[Cody](#cody) added two [alternate versions](2011/toledo/index.html#alternate-code): one that
+[Cody](#cody) added two [alternate versions](%%REPO_URL%%/2011/toledo/index.html#alternate-code): one that
lets one reconfigure the controls and also the size of the game and another
version that should work in Windows, based on the author's remarks and support
file, `layer.c`.
@@ -4306,28 +4418,30 @@ controls, width and height.
-[Cody](#cody) added the [try.sh](2011/vik/try.sh) script.
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2011/vik/try.sh) script.
-Cody also added an [alternate version](2011/vik/index.html#alternate-code) for Windows
+Cody also added an [alternate version](%%REPO_URL%%/2011/vik/index.html#alternate-code) for Windows
based on the author's comments (along with looking up the function for the right
header files). To build try the alt rule of the Makefile.
-[Cody](#cody) added the [try.sh](2011/zucker/try.sh) script.
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2011/zucker/try.sh) script.
-Cody also added [alt code](2011/zucker/index.html#alternate-code) that should work on
+Cody also added [alt code](%%REPO_URL%%/2011/zucker/index.html#alternate-code) that should work on
Windows, based on the author's remarks that if the system distinguishes binary
and text then `stdout` needs to be set to binary mode.
Cody also added the PDF file
-[sphere-tracing.pdf](2011/zucker/sphere-tracing.pdf) in case the link
+[sphere-tracing.pdf](%%REPO_URL%%/2011/zucker/sphere-tracing.pdf) in case the link
eventually dies.
@@ -4337,30 +4451,33 @@ eventually dies.
[Cody](#cody) added explicit linking of libm (`-lm`) as not all systems do this
implicitly (Linux doesn't seem to but macOS does).
-Cody also added the [try.sh](2012/blakely/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/2012/blakely/try.sh) script.
[Cody](#cody) added explicit linking of libm (`-lm`) as not all systems do this
implicitly (Linux doesn't seem to but macOS does).
-Cody also added two [alt versions](2012/endoh1/index.html#alternate-code) that
+Cody also added two [alt versions](%%REPO_URL%%/2012/endoh1/index.html#alternate-code) that
let one control how fast the fluid moves (how long to sleep in between writes)
and also the gravity factor, the pressure factor and the viscosity factor as
well as an alarm that lets one run it in a loop without having to hit
@@ -4371,40 +4488,42 @@ The two different alt versions is because there are two versions: the original
and the colour version added by the author, [Yusuke](#yusuke), at the request of
the judges.
-Cody also added the [try.alt.sh](2012/endoh1/try.alt.sh) script that compiles
+Cody also added the [try.alt.sh](%%REPO_URL%%/2012/endoh1/try.alt.sh) script that compiles
the alt code in two ways, one with setting the gravity factor to `I` and another
with the default, and which is run on the source file and each of the text files
supplied by the author. This code has an alarm set at 10 seconds so that one
need not hit ctrl-c/intr in between .. say to make it more fluid :-)
-Cody also added the [try.alt.bw.sh](2012/endoh1/try.alt.bw.sh) which is the
+Cody also added the [try.alt.bw.sh](%%REPO_URL%%/2012/endoh1/try.alt.bw.sh) which is the
same as the `try.alt.sh` except it does not use the coloured version.
-Finally Cody added the [try.sh](2012/endoh1/try.sh) and
-[try.bw.sh](2012/endoh1/try.bw.sh) which correspond to the coloured version
-[endoh1_color.c](2012/endoh1/endoh1_color.c) and the original submitted
-version without colour, [endoh1.c](2012/endoh1/endoh1.c).
+Finally Cody added the [try.sh](%%REPO_URL%%/2012/endoh1/try.sh) and
+[try.bw.sh](%%REPO_URL%%/2012/endoh1/try.bw.sh) which correspond to the coloured version
+[endoh1_color.c](%%REPO_URL%%/2012/endoh1/endoh1_color.c) and the original submitted
+version without colour, [endoh1.c](%%REPO_URL%%/2012/endoh1/endoh1.c).
-The [endoh1.alt2.c](2012/endoh1/endoh1.alt2.c) was provided by the author,
+The [endoh1.alt2.c](%%REPO_URL%%/2012/endoh1/endoh1.alt2.c) was provided by the author,
[Yusuke](#yusuke), at the time of the contest as a de-obfuscated version.
-[Cody](#cody) added the [try.sh](2012/endoh2/try.sh) script that runs
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2012/endoh2/try.sh) script that runs
everything, filtered through less.
Cody also fixed a typo in the ruby script
-[find-font-table.rb](2012/endoh2/find-font-table.rb).
+[find-font-table.rb](%%REPO_URL%%/2012/endoh2/find-font-table.rb).
-[Cody](#cody) added the [try.sh](2012/grothe/try.sh) script.
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2012/grothe/try.sh) script.
Cody also changed `argv` to be not `const char ** but `char **, mostly out of an
abundance of caution in case clang, which already imposes restrictions on the
@@ -4422,19 +4541,21 @@ which the recipe file now links to.
-[Cody](#cody) added the [try.sh](2012/hamano/try.sh) script and the helper
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2012/hamano/try.sh) script and the helper
Makefile rules `hint.pdf`, `hint`, `hello.pdf` and `hello` to simplify the
procedure for both `hint.pdf` and `hello.pdf` as well as compiling them as C.
-[Cody](#cody) added the [try.sh](2012/hou/try.sh) script and restored the original [hint
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2012/hou/try.sh) script and restored the original [hint
markdown file](2012/hou/hint.html) as the changes made when converting to a GitHub
index.html made the generated html not look correct; it did not have a title, a
stylesheet etc. due to the fact that there is no `#` header (which specified
@@ -4442,7 +4563,8 @@ title and stylesheet) and other formatting changes.
[Cody](#cody) added alt code that fixes a problem where in German 'v' sounds like 'f'
@@ -4457,9 +4579,9 @@ about it. Using both, however, allows one to experience different capabilities
and also enjoy or appreciate the entry even more, given how simple the
difference is.
-Cody also added six scripts: [en.sh](2012/kang/en.sh),
-[de.sh](2012/kang/de.sh), [en.alt.sh](2012/kang/en.alt.sh) and
-[de.alt.sh](2012/de.alt.sh) which count from 0 through 13 in English and German
+Cody also added six scripts: [en.sh](%%REPO_URL%%/2012/kang/en.sh),
+[de.sh](%%REPO_URL%%/2012/kang/de.sh), [en.alt.sh](2012/kang/en.alt.sh) and
+[de.alt.sh](%%REPO_URL%%/2012/de.alt.sh) which count from 0 through 13 in English and German
using the original entry and the alt version respectively.
In the German scripts it uses the umlaut and also does it without the umlaut
@@ -4467,46 +4589,50 @@ In the German scripts it uses the umlaut and also does it without the umlaut
either version but the `.alt.sh` versions default to the `alt` version whereas
the other defaults to the submitted entry. See the index.html for details.
-The fifth and sixth scripts, [try.sh](2012/kang/try.sh) and
-[try.alt.sh](2012/kang/try.alt.sh), run a sequence of commands to
+The fifth and sixth scripts, [try.sh](%%REPO_URL%%/2012/kang/try.sh) and
+[try.alt.sh](%%REPO_URL%%/2012/kang/try.alt.sh), run a sequence of commands to
show different languages and numbers with the submitted and alternate version
respectively. Notice how a single letter changes so much!
-[Cody](#cody) added the [alternate versions](2012/omoikane/index.html#alternate-code)
+[Cody](#cody) added the [alternate versions](%%REPO_URL%%/2012/omoikane/index.html#alternate-code)
which will, if no arg is specified, read in the program itself, rather than
`/dev/urandom`. This is mostly useful for those without a `/dev/urandom` device
file (the default for the entry). The second alternate version is like the first
except that it also sets binary mode on `stdin` and `stdout` which should
theoretically make it work in Windows.
-Cody also added the [try.sh](2012/omoikane/try.sh) and
-[try.alt.sh](2012/omoikane/try.alt.sh) scripts.
+Cody also added the [try.sh](%%REPO_URL%%/2012/omoikane/try.sh) and
+[try.alt.sh](%%REPO_URL%%/2012/omoikane/try.alt.sh) scripts.
-[Cody](#cody) added the [try.sh](2012/vik/try.sh) script.
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2012/vik/try.sh) script.
Based on the author's description it should be able to get this entry to work
for Windows. With his instructions Cody also added the alternate version that
@@ -4514,10 +4640,11 @@ does this for the few who might use Windows.
-[Cody](#cody) [test.sh](2012/zeitak/test.sh) script and the `make test` rule
+[Cody](#cody) [test.sh](%%REPO_URL%%/2012/zeitak/test.sh) script and the `make test` rule
that uses the script along with a number of files that will correctly be flagged
as incorrect (including a text file and a java file, with a joke, to show that
it's not that it parses C but rather just matching pairs though that's probably
@@ -4537,7 +4664,8 @@ it easier for those who do not know how, and to make it more obvious to try it.
[Cody](#cody) changed the `return 0;` at the end of the program to be `return
@@ -4552,27 +4680,30 @@ done, based on the author's recommendations, except that Cody made it
configurable at compile time. The Makefile was modified in such a way as to make
it very easy to redefine it at compile time.
-Cody also added the [try.sh](2013/birken/try.sh) script for the entry and the
-[try.alt.sh](2013/birken/try.alt.sh) script for the alt code.
+Cody also added the [try.sh](%%REPO_URL%%/2013/birken/try.sh) script for the entry and the
+[try.alt.sh](%%REPO_URL%%/2013/birken/try.alt.sh) script for the alt code.
-[Cody](#cody) added the [try.sh](2013/cable1/try.sh) script which also has an
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2013/cable1/try.sh) script which also has an
joke Easter egg in it based on the judges' remarks.
[Cody](#cody) fixed this to compile with modern systems. The problems were that
@@ -4591,13 +4722,13 @@ failed to compile again also due to `localtime()` so he removed the prototype
entirely to solve the problem.
Cody also slightly improved the `runme` script (renamed to
-[cable3.sh](2013/cable3/cable3.sh) for consistency with other entries that have
+[cable3.sh](%%REPO_URL%%/2013/cable3/cable3.sh) for consistency with other entries that have
wrapper scripts) to not assume that the program has been compiled by running
`make clobber all || exit 1` and he also made it pass `shellcheck` (using `[[ ..
]]` over `[ .. ]`).
As well, based on the author's remarks, Cody added the [alternate
-code](2013/cable3/cable3.alt.c) which should be compilable for Windows/MS Visual
+code](%%REPO_URL%%/2013/cable3/cable3.alt.c) which should be compilable for Windows/MS Visual
Studio. This is done by in the compile line undefining `KB` (`-UKB`) and then in
the source code defining `KB` to what the author suggested,
`(kb=H(8),kbhit())&&(r[1190]=getch(),H(7))`. It need hardly be mentioned that
@@ -4605,7 +4736,7 @@ this will not link in Unix systems (including macOS).
Clang required a `-Wno-` option as well.
-Finally Cody provided the [bios.asm](2013/cable3/bios.asm) that the author
+Finally Cody provided the [bios.asm](%%REPO_URL%%/2013/cable3/bios.asm) that the author
referred to, found at the [GitHub repo for the
entry](https://github.com/adriancable/8086tiny/tree/master), and the 'ready-made
40MB hard disk image containing a whole bunch of software' in `hd.img` that the
@@ -4613,14 +4744,15 @@ author linked to at `https://bitly.com/1bU8URK`.
[Cody](#cody) added the source code that we suggested one should compile and run with
-different compilers as [fun.c](2013/dlowe/fun.c). He modified the Makefile so
+different compilers as [fun.c](%%REPO_URL%%/2013/dlowe/fun.c). He modified the Makefile so
that running `make all` will compile it, saving you the effort.
-He also provided the script [slflen.sh](2013/dlowe/slflen.sh) which is based on
+He also provided the script [slflen.sh](%%REPO_URL%%/2013/dlowe/slflen.sh) which is based on
the author's remarks, fixing it for shellcheck and improving upon it (show what
files will be processed). This script shows the sparkline of the file lengths
(as in `wc -c`). The fixes (but not the improvements) were added to the author's
@@ -4632,22 +4764,24 @@ clobber` will delete both and running `make clobber all` will ensure that the
symlink is created. The `slflen.sh` script also explicitly makes sure to create
the symlink as it uses it, even though it runs `make clobber all`.
-Cody also added the [try.sh](2013/dlowe/try.sh) script to more easily try the
+Cody also added the [try.sh](%%REPO_URL%%/2013/dlowe/try.sh) script to more easily try the
program.
-He also added the [diff.sh](2013/dlowe/diff.sh) script which is based on some
+He also added the [diff.sh](%%REPO_URL%%/2013/dlowe/diff.sh) script which is based on some
commands to try that he suggested to see how different lengths look.
[Cody](#cody) fixed the Makefile `check` rule so that it `checks` :-) that both
@@ -4671,22 +4805,24 @@ The entry can still be enjoyed if you do not have these tools, however.
-[Cody](#cody) added the [try.sh](2013/endoh3/try.sh) script.
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2013/endoh3/try.sh) script.
Cody also (out of an abundance of caution for `clang(1)` which is strict with
arg type and count to `main()`) added a second (unused) arg to `main()`.
-[Cody](#cody) added the [endoh4.sh](2013/endoh4/endoh4.sh) script which temporarily
+[Cody](#cody) added the [endoh4.sh](%%REPO_URL%%/2013/endoh4/endoh4.sh) script which temporarily
turns off the cursor as suggested by the author, with the addition that if no
-file is specified it will feed the source code [endoh4.c](2013/endoh4/endoh4.c)
+file is specified it will feed the source code [endoh4.c](%%REPO_URL%%/2013/endoh4/endoh4.c)
to the program rather than the file specified. It does not try and detect if the
file exists or can be read as that will be handled by the shell/program. One may
pass more than one file to the script.
@@ -4697,7 +4833,8 @@ allows one to redefine it as well.
[Cody](#cody) fixed the Makefile so that this would work properly. Before this
@@ -4730,11 +4867,12 @@ Further, after the file `2013/hou/doc/example.markdown` was moved to
[2013/hou/doc/example.html](2013/hou/doc/example.html) to match the rest of the repo
this broke `make` which Cody also fixed.
-Cody also added the [try.sh](2013/hou/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/2013/hou/try.sh) script.
[Cody](#cody) added explicit linking of libm (`-lm`) as not all systems do this
implicitly (Linux doesn't seem to but macOS does).
-Cody also added the [try.sh](2013/morgan1/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/2013/morgan1/try.sh) script.
[Cody](#cody) provided the [alternate
-code](2014/birken/index.html#alternate-code) that lets one redefine the port to
+code](%%REPO_URL%%/2014/birken/index.html#alternate-code) that lets one redefine the port to
bind to in case there is a firewall issue or there is some other reason to not
have the default port. Remember that ports < 1024 are privileged. It also lets
you redefine the timing constant `STARDATE` (see the author's remarks for more
@@ -4788,10 +4930,11 @@ redefine the port and timing constant.
-[Cody](#cody) added [alt code](2014/deak/index.html#alternate-code) that lets
+[Cody](#cody) added [alt code](%%REPO_URL%%/2014/deak/index.html#alternate-code) that lets
one (via the Makefile) reconfigure the coordinates but instead of being a
modified version of the entry it is the version the author provided which would
be what the program would look like if, as the author put it:
@@ -4806,14 +4949,15 @@ This alt version did not originally compile because a value was left off the
that was fixed and it also has `#include ` for `putchar(3)`. The
`#ifndef..#define..#endif` was not part of the original alt code, of course.
-Cody also added the [try.alt.sh](2014/deak/try.alt.sh) script.
+Cody also added the [try.alt.sh](%%REPO_URL%%/2014/deak/try.alt.sh) script.
-[Cody](#cody) added the [rake.sh](2014/endoh1/rake.sh) script and `make rake`
+[Cody](#cody) added the [rake.sh](%%REPO_URL%%/2014/endoh1/rake.sh) script and `make rake`
rule that runs the script. This script will check that `rake` is installed and
if it is not it will report this and then check that `gem` is installed. It
checks that `gem` is installed in this case because `gem` is how you install
@@ -4823,7 +4967,7 @@ then it tells you to install a specific gem and then to try again. Finally if
`rake` succeeds it will verify that `prog` is executable and if it is it will
run it.
-Cody also added the [try.sh](2014/endoh1/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/2014/endoh1/try.sh) script.
**_Barely_** worth noting but done nonetheless, Cody renamed the `read_me.html`
file to [spoilers.html](2014/endoh1/spoilers.html) to be clearer in its purpose as
@@ -4831,64 +4975,70 @@ it is a file with spoilers (and too close to index.html?).
[Cody](#cody) fixed the build for this entry: it does not require
[SDL2](https://www.libsdl.org) but SDL1 so there were linking errors.
-Cody also added the [mario.sh](2014/maffiodo1/mario.sh) and
-[giana.sh](2014/maffiodo1/giana.sh) scripts which play, respectively, [Super
+Cody also added the [mario.sh](%%REPO_URL%%/2014/maffiodo1/mario.sh) and
+[giana.sh](%%REPO_URL%%/2014/maffiodo1/giana.sh) scripts which play, respectively, [Super
Mario Bros](http://en.wikipedia.org/wiki/Super_Mario_Bros.) and one of [The
Great Giana Sisters](http://en.wikipedia.org/wiki/The_Great_Giana_Sisters), but
which let one configure the width and height of the game.
-[Cody](#cody) added the [try.sh](2014/maffiodo2/try.sh) script.
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2014/maffiodo2/try.sh) script.
-He also added the [alternate code](2014/maffiodo2/index.html#alternate-code)
+He also added the [alternate code](%%REPO_URL%%/2014/maffiodo2/index.html#alternate-code)
provided by the author.
[Cody](#cody) fixed the code so that the game can play automatically like it
once did. The problem is that it expects a certain file name which was
`sinon.c`. The code now refers to `prog.c`.
-Cody also fixed the scripts [glock.sh](2014/sinon/glock.sh) and
-[hecate.sh](2014/sinon/hecate.sh) which did not work after running either once
+Cody also fixed the scripts [glock.sh](%%REPO_URL%%/2014/sinon/glock.sh) and
+[hecate.sh](%%REPO_URL%%/2014/sinon/hecate.sh) which did not work after running either once
as they compile `run.c` and then do `./run | tee run.c` which overwrites it with
output that is not code.
-Cody also added the [try.sh](2014/sinon/try.sh) script that will first (if perl
+Cody also added the [try.sh](%%REPO_URL%%/2014/sinon/try.sh) script that will first (if perl
is installed) run the demo mode and then after that it will run the above noted
scripts in a loop until the user says they do not want to try again (or they
kill it). This is done this way in case it jams (see index.html for details).
[Cody](#cody) fixed the Makefile to compile this entry in modern systems. The problem was
@@ -4908,10 +5058,11 @@ clean`) removes those files and so that they are ignored by `.gitignore`.
-[Cody](#cody) added the [try.sh](2014/vik/try.sh) script. Cody notes that there
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2014/vik/try.sh) script. Cody notes that there
is a bug that will show itself as one of the features does not work right. The
translation of the raw audio to text is buggy in some cases.
@@ -4922,10 +5073,11 @@ that would break it we do not know.
-[Cody](#cody) added the [try.sh](2014/wiedijk/try.sh) script which is based on
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2014/wiedijk/try.sh) script which is based on
the command to try in the 'try' section but improved so one can more easily
specify what ident tool they want to use and also change which sed to use,
should they want to. It also checks that both of these two tools exist and are
@@ -4939,7 +5091,8 @@ output.
@@ -4960,18 +5113,18 @@ adding to `main()` after the variable declaration (`V*A;`) the code:
*K=basename(*K);
```
-This was done for both the [prog.c](2015/burton/prog.c) and
-[prog.alt.c](2015/burton/prog.alt.c). The Makefile was also updated to build
+This was done for both the [prog.c](%%REPO_URL%%/2015/burton/prog.c) and
+[prog.alt.c](%%REPO_URL%%/2015/burton/prog.alt.c). The Makefile was also updated to build
`eprog` and `eprog.alt` to make use of the feature more easily. Each is a new
target (first in `TARGET` and second in `ALT_TARGET`) which have a prerequisite
of `${PROG}` and `${PROG}.alt` respectively both of which also copy the `prog`
(`prog` or `eprog`) to the respective `eprog` (`eprog` or `eprog.alt`). With
these changes now one can easily use the echo feature the author implemented.
-Cody also added the [try.sh](2015/burton/try.sh) script. This involved
-adding a text file, [try.this.txt](2015/burton/try.this.txt).
+Cody also added the [try.sh](%%REPO_URL%%/2015/burton/try.sh) script. This involved
+adding a text file, [try.this.txt](%%REPO_URL%%/2015/burton/try.this.txt).
-Cody also added [calc.1](2015/burton/calc.1) in place of `calc.man` to have
+Cody also added [calc.1](%%REPO_URL%%/2015/burton/calc.1) in place of `calc.man` to have
proper formatting (in the style of `man(1)`). The `calc.man` was removed so as
to not have to maintain two copies of the same text.
@@ -4982,7 +5135,8 @@ add a `./` to the commands in the man page/index.html.
[Cody](#cody) fixed this to compile with Linux which was having a problem with duplicate
symbols of `main()`. The fix is through the compiler option `-fcommon` which
will let it compile like it does with macOS.
-Cody also added the [try.sh](2015/endoh3/try.sh) script which makes use of the
+Cody also added the [try.sh](%%REPO_URL%%/2015/endoh3/try.sh) script which makes use of the
make rule he added (to enjoy the theme of the entry, [Back to the
Future](https://en.wikipedia.org/wiki/Back_to_the_Future) using this entry by
simply typing `make back_to` or `make mullender`) and then runs the famous
-[1984/mullender.c](1984/mullender/mullender.c).
+[1984/mullender.c](%%REPO_URL%%/1984/mullender/mullender.c).
[Cody](#cody) added explicit linking of libm (`-lm`) for systems that do not do this
(Linux doesn't seem to but macOS does).
-Cody also added the [try.sh](2015/hou/try.sh) script and the large file `large`
+Cody also added the [try.sh](%%REPO_URL%%/2015/hou/try.sh) script and the large file `large`
which the `try.sh` script uses.
-Cody also added the RFC 1321 text file, [rfc1321.txt](2015/hou/rfc1321.txt) to
+Cody also added the RFC 1321 text file, [rfc1321.txt](%%REPO_URL%%/2015/hou/rfc1321.txt) to
the directory, to make it so one need not download it, and which the index.html
file now links to.
-[Cody](#cody) added the [try.sh](2015/howe/try.sh) script, downloaded the War
-and Peace text file, fixed the [avgtime.sh](2015/howe/avgtime.sh) script (it
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2015/howe/try.sh) script, downloaded the War
+and Peace text file, fixed the [avgtime.sh](%%REPO_URL%%/2015/howe/avgtime.sh) script (it
resulted in standard input errors in piping to `bc(1)`) and added the
-[cc.1](2015/howe/cc.1) man page as not all systems have it (in fact it's
+[cc.1](%%REPO_URL%%/2015/howe/cc.1) man page as not all systems have it (in fact it's
`gcc(1)` from Rocky Linux).
-[Cody](#cody) added the [try.sh](2015/mills1/try.sh) script which changes the
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2015/mills1/try.sh) script which changes the
parameters to what we had in the judges' remarks to make it easier (he only died
when he tried to mark a reminder complete on the other side of the screen at the
same time and he almost survived that, scoring at that point over 90 - but this
@@ -5068,21 +5229,24 @@ past).
[Cody](#cody) fixed the build so that `EOF` will be `-1` as the program assumes
@@ -5090,11 +5254,12 @@ this. It was decided by Cody to do `-UEOF -DEOF=-1` so as to not have to modify
the code any with C preprocessor directives (the preferred way) or changing
`EOF` to `-1`.
-Cody also added the [try.sh](2015/schweikhardt/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/2015/schweikhardt/try.sh) script.
[Cody](#cody) fixed an unfortunate typo in the Makefile that was preventing some of the
@@ -5103,7 +5268,7 @@ files from compiling properly, trying instead to compile already compiled code.
He also added explicit linking of libm (`-lm`) for systems that do not do this
(Linux seems to not but macOS does).
-He also added the [try.sh](2015/yang/try.sh) script.
+He also added the [try.sh](%%REPO_URL%%/2015/yang/try.sh) script.
@@ -5112,26 +5277,29 @@ He also added the [try.sh](2015/yang/try.sh) script.
-[Cody](#cody) added the [try.sh](2018/anderson/try.sh) and
-[try.alt.sh](2018/anderson/try.alt.sh) scripts.
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2018/anderson/try.sh) and
+[try.alt.sh](%%REPO_URL%%/2018/anderson/try.alt.sh) scripts.
-[Cody](#cody) added the [try.sh](2018/bellard/try.sh) script.
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2018/bellard/try.sh) script.
Cody also, out of abundance of caution, added a second arg to `main()` because
some versions of clang object to the number of args of `main()`, saying that it
@@ -5142,26 +5310,28 @@ object to 1 arg but it is entirely possible that this changes so a second arg
Cody also added explicit linking of libm (`-lm`) for systems that do not do this
(Linux doesn't seem to but macOS does).
-Cody also added [alt code](2018/bellard/index.html#alternate-code) that should
+Cody also added [alt code](%%REPO_URL%%/2018/bellard/index.html#alternate-code) that should
work for Windows, based on the author's remarks. The same thing with the number
of args to `main()` that was done in the original entry was done with this
version as well.
[Cody](#cody) fixed the `scripthd` script (referred to `prog` not `./prog`) and
-renamed it to [scripthd.sh](2018/burton1/scripthd.sh) to help browsers and
+renamed it to [scripthd.sh](%%REPO_URL%%/2018/burton1/scripthd.sh) to help browsers and
GitHub as far as downloading/displaying goes.
-Cody also added the [try.sh](2018/burton1/try.sh) script which also uses
+Cody also added the [try.sh](%%REPO_URL%%/2018/burton1/try.sh) script which also uses
`scripthd.sh` to show how it differs from `prog` itself.
[Cody](#cody) fixed the `make test` rule: it tried to run `tac(1)` (in systems
@@ -5180,27 +5350,29 @@ file `tac.1`.
Cody also renamed `discrepancies` to `discrepancies.html` and made it markdown
format.
-Cody added the [tokcount.sh](2018/burton2/tokcount.sh) script which was
+Cody added the [tokcount.sh](%%REPO_URL%%/2018/burton2/tokcount.sh) script which was
included in the remarks of the author but not an included file.
-Finally Cody added the [try.sh](2018/burton2/try.sh) script.
+Finally Cody added the [try.sh](%%REPO_URL%%/2018/burton2/try.sh) script.
-[Cody](#cody) added the [try.sh](2018/ciura/try.sh) and
-[try.alt.sh](2018/ciura/try.alt.sh) scripts and the PDF file,
-[lexicon.pdf](2018/ciura/lexicon.pdf), that was a dead link, restored from the
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2018/ciura/try.sh) and
+[try.alt.sh](%%REPO_URL%%/2018/ciura/try.alt.sh) scripts and the PDF file,
+[lexicon.pdf](%%REPO_URL%%/2018/ciura/lexicon.pdf), that was a dead link, restored from the
Internet Wayback Machine.
-[Cody](#cody) added the [try.sh](2018/endoh1/try.sh) script which shows the
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2018/endoh1/try.sh) script which shows the
input files one at a time and after each one is shown, it feeds it to the
program, redirecting the output to the respective GIF file. It then will inform
the user they should open it in a GIF viewer that can show animation in animated
@@ -5210,13 +5382,14 @@ remarks. The input files offered includes the prog.c as the author,
-[Cody](#cody) fixed the [run.sh](2018/endoh2/run.sh) script (had commands that didn't
+[Cody](#cody) fixed the [run.sh](%%REPO_URL%%/2018/endoh2/run.sh) script (had commands that didn't
exist and also didn't work even after that was addressed) and added the
-[try.sh](2018/endoh2/try.sh), [python.sh](2018/endoh2/python.sh) and
-[python3.sh](2018/endoh2/python3.sh) scripts. The `try.sh` script runs all
+[try.sh](%%REPO_URL%%/2018/endoh2/try.sh), [python.sh](2018/endoh2/python.sh) and
+[python3.sh](%%REPO_URL%%/2018/endoh2/python3.sh) scripts. The `try.sh` script runs all
three of the other scripts but each allows one to send an interrupt in the loops
and still continue to the next script (if one does it when not in a loop it will
exit the script). The `make python` and `make python3` rules in the Makefile now
@@ -5224,14 +5397,15 @@ run the respective scripts.
[Cody](#cody), with irony well intended :-), fixed the [test.sh
-script](2018/ferguson/test.sh) for portability, shellcheck, making it executable
+script](%%REPO_URL%%/2018/ferguson/test.sh) for portability, shellcheck, making it executable
and other things, fixed dead links in the man page, updated the test-strings.txt
-file and other things as well (like adding the [try.sh](2018/ferguson/try.sh)
-and [try.alt.sh](2018/ferguson/try.alt.sh) scripts).
+file and other things as well (like adding the [try.sh](%%REPO_URL%%/2018/ferguson/try.sh)
+and [try.alt.sh](%%REPO_URL%%/2018/ferguson/try.alt.sh) scripts).
Landon notes that Cody will probably never finish changes in his entries and
that's probably true: let's just say that for the IOCCC I'm (Cody) a weasel! :-)
@@ -5239,17 +5413,19 @@ that's probably true: let's just say that for the IOCCC I'm (Cody) a weasel! :-)
[Cody](#cody) added explicit linking of libm (`-lm`) for systems that do not do this
(Linux doesn't seem to but macOS does).
-Cody also added the [try.sh](2018/hou/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/2018/hou/try.sh) script.
[Cody](#cody) added the missing `docs` rule to the Makefile that forms a PDF
file. The rule requires the tool `pdflatex`.
-Cody also added the [try.sh](2018/poikola/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/2018/poikola/try.sh) script.
[Dave Burton](authors.html#Dave_Burton), during the preview period, noticed a
problem where the macOS `Terminal.app` does not work properly for this program.
@@ -5278,17 +5455,19 @@ configuration).
-[Cody](#cody) added the [try.sh](2018/yang/try.sh) script. This script will ask
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2018/yang/try.sh) script. This script will ask
if the user wants to see some of the spoilers and only show them if they type
`y` or `Y`.
@@ -5300,39 +5479,42 @@ if the user wants to see some of the spoilers and only show them if they type
-[Cody](#cody) added the [try.sh](2019/adamovsky/try.sh) script and the Unlambda
-file [crash.unl](2019/adamovsky/crash.unl) which is in the judges' remarks as
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2019/adamovsky/try.sh) script and the Unlambda
+file [crash.unl](%%REPO_URL%%/2019/adamovsky/crash.unl) which is in the judges' remarks as
to what can crash it - but it's not a bug, it's a feature.
[Cody](#cody) fixed the Makefile which had a bad character, a '%' instead of a '$' which
caused a rule to fail.
-Cody also added the [try.sh](2019/burton/try.sh) script which shows a
+Cody also added the [try.sh](%%REPO_URL%%/2019/burton/try.sh) script which shows a
side-by-side comparison on several files of the entry and `wc(1)` as well as
running `make test`.
-Cody also fixed the script [check.sh](2019/burton/check.sh) (renamed from
+Cody also fixed the script [check.sh](%%REPO_URL%%/2019/burton/check.sh) (renamed from
`check`) in case `x` is specified and is not executable and also made it satisfy
ShellCheck. He also made ShellCheck not be a cow and/or (to use Bart Simpson's
advice :-) ) 'not have a cow' about certain things (including one thing it was
-wrong about) in [cow.sh](2019/burton/cow.sh) (which was renamed from `cow`)
+wrong about) in [cow.sh](%%REPO_URL%%/2019/burton/cow.sh) (which was renamed from `cow`)
mootoo.
Cody also renamed the file `on.one.liners` to
-[on.one.liners.txt](2019/burton/on.one.liners.txt) to help with
+[on.one.liners.txt](%%REPO_URL%%/2019/burton/on.one.liners.txt) to help with
browsers/GitHub.
[Cody](#cody) fixed an invalid bytes error in `tr` in the scripts. This does not
@@ -5343,12 +5525,12 @@ German umlauts and Eszett (ß) see the [entry in bugs.html](bugs.html#2019-ciura
Cody also fixed the Makefile so that the alt code would be built when running
`make alt`.
-Cody converted the PS file linked to by the author to a PDF
-([fasc5c.pdf](2019/ciura/fasc5c.pdf)) and added it to the
+Cody converted the PS file linked to by the author to a PDF,
+[fasc5c.pdf](%%REPO_URL%%/2019/ciura/fasc5c.pdf), and added it to the
website.
-Cody also added the [try.sh](2019/ciura/try.sh) and
-[try.alt.sh](2019/ciura/try.alt.sh) scripts.
+Cody also added the [try.sh](%%REPO_URL%%/2019/ciura/try.sh) and
+[try.alt.sh](%%REPO_URL%%/2019/ciura/try.alt.sh) scripts.
Finally he added the scripts for the different languages that use the alt
version but with the caveat that only English appears to work. See the [entry in
@@ -5357,12 +5539,13 @@ bugs.html](bugs.html#2019-ciura) for more details.
-[Cody](#cody) added the [try.sh](2019/diels-grabsch1/try.sh) script.
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2019/diels-grabsch1/try.sh) script.
-Cody also added the file [Shakespeare.txt](2019/diels-grabsch1/Shakespeare.txt)
+Cody also added the file [Shakespeare.txt](%%REPO_URL%%/2019/diels-grabsch1/Shakespeare.txt)
from [2019/mills](2019/mills/index.html) (after running `make`) so that one can
not worry about having the entire IOCCC winning entry tree (or at least the 2019 tree each
entry in a subdirectory). This is more important as there is discussion of
@@ -5370,10 +5553,11 @@ having tarballs for each individual entry as a convenience.
-[Cody](#cody) added the [try.sh](2019/diels-grabsch2/try.sh) script. This
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2019/diels-grabsch2/try.sh) script. This
script will try and show the difference (i.e. the same output) between the
program and the result of `sha512sum` or `shasum -a 512` if either of those
tools can be found but otherwise it'll just run the program itself, showing its
@@ -5381,7 +5565,8 @@ own sha512sum value.
[Cody](#cody) added explicit linking of libm (`-lm`) for systems that do not do this
@@ -5389,7 +5574,7 @@ own sha512sum value.
He also fixed the Makefile so that it compiles with clang in Linux.
-He also added the [try.sh](2019/dogon/try.sh) script.
+He also added the [try.sh](%%REPO_URL%%/2019/dogon/try.sh) script.
He also made it possible to easily redefine the memory macro `Z` at compilation
time by modifying the Makefile.
@@ -5401,14 +5586,15 @@ else).
[Cody](#cody) made the `make fullscreen` more portable by not relying on
`stty(1)` and `sed(1)` but rather it just uses `tput(1)`. He also made it so
that if `tput(1)` is not found it tells the user an easier way to compile the full
screen size rather than having to modify the Makefile. This done with a script,
-[fullscreen.sh](2019/duble/fullscreen.sh), to simplify the Makefile and provide
+[fullscreen.sh](%%REPO_URL%%/2019/duble/fullscreen.sh), to simplify the Makefile and provide
an easy way to tell the user how to compile it, assuming that the environmental
variables `LINES` and `COLUMNS` are set. But even if they're not set it explains
how to easily compile the program to a specific size. Note that `LINES` and
@@ -5416,7 +5602,8 @@ how to easily compile the program to a specific size. Note that `LINES` and
As this is a backtrace quine having the optimiser enabled is not a good idea so
@@ -5424,22 +5611,24 @@ As this is a backtrace quine having the optimiser enabled is not a good idea so
compilation as debugging symbols might just be useful for an entry that's
supposed to segfault :-)
-Cody also added the simple [ascii.c](2019/endoh/ascii.c) that (while it has an
+Cody also added the simple [ascii.c](%%REPO_URL%%/2019/endoh/ascii.c) that (while it has an
arg) prints out the character of the ASCII value (uses `isascii(3)` first). This
-combined with the [try.sh](2019/endoh/try.sh) script that he added allows one
+combined with the [try.sh](%%REPO_URL%%/2019/endoh/try.sh) script that he added allows one
to easily reconstruct the source code through GDB by the fact it's a backtrace
quine.
[Cody](#cody) reported that with `-O` level > 0 this program segfaults (sometimes?). He's
@@ -5448,41 +5637,44 @@ appears to fix the problem in both macOS and Linux. Perhaps this is the problem
that the author reported where it sometimes segfaults but Cody did not try
debugging it since it works with `-O0`.
-He also added the script [try.sh](2019/karns/try.sh) to showcase the entry a
+He also added the script [try.sh](%%REPO_URL%%/2019/karns/try.sh) to showcase the entry a
bit more easily.
-[Cody](#cody) added the [try.sh](2019/lynn/try.sh) script.
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2019/lynn/try.sh) script.
-Cody also added the [example-1.txt](2019/lynn/example-1.txt) and
-[example-2.txt](2019/lynn/example-2.txt) text files from
+Cody also added the [example-1.txt](%%REPO_URL%%/2019/lynn/example-1.txt) and
+[example-2.txt](%%REPO_URL%%/2019/lynn/example-2.txt) text files from
[2018/vokes](2018/vokes/index.html) so that the entry does not rely on any other
entry existing.
[Cody](#cody) added the missing `docs` rule to the Makefile that forms a PDF
file. The rule requires the tool
[pdflatex](https://tug.org/applications/pdftex/index.html).
-Cody also added the [alternate code](2019/poikola/index.html#alternate-code).
+Cody also added the [alternate code](%%REPO_URL%%/2019/poikola/index.html#alternate-code).
-Cody also added the [try.sh](2019/poikola/try.sh) and
-[try.alt.sh](2019/poikola/try.alt.sh) scripts.
+Cody also added the [try.sh](%%REPO_URL%%/2019/poikola/try.sh) and
+[try.alt.sh](%%REPO_URL%%/2019/poikola/try.alt.sh) scripts.
Cody also disabled the optimiser because the author stated that for clang the
levels [0123s] work okay but with GCC (6) they only said level 0 works,
@@ -5493,13 +5685,14 @@ tested: `gnu17` was not tested but `gnu11` was so the standard was set to
-[Cody](#cody) added the [try.sh](2019/yang/try.sh) script which also involved
-slightly updating the [sample_input.txt](2019/yang/sample_input.txt) file
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2019/yang/try.sh) script which also involved
+slightly updating the [sample_input.txt](%%REPO_URL%%/2019/yang/sample_input.txt) file
(removed trailing newlines as it resulted in `diff` showing differences when it
-shouldn't) and adding the [ioccc.txt](2019/yang/ioccc.txt) file.
+shouldn't) and adding the [ioccc.txt](%%REPO_URL%%/2019/yang/ioccc.txt) file.
@@ -5508,10 +5701,11 @@ shouldn't) and adding the [ioccc.txt](2019/yang/ioccc.txt) file.
-[Cody](#cody) fixed the script [check_be.sh](2020/burton/check_be.sh): it
+[Cody](#cody) fixed the script [check_be.sh](%%REPO_URL%%/2020/burton/check_be.sh): it
assumed that `prog_be` was in `PATH` which is unlikely so it was changed to
`./prog_be`.
@@ -5519,35 +5713,38 @@ Cody also improved the `make test` rule (which uses `check_be.sh` and the Little
Endian counterpart) so that it shows that the files are identical rather than
showing nothing at all.
-Cody also added the [try.sh](2020/burton/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/2020/burton/try.sh) script.
-[Cody](#cody) added the [try.sh](2020/carlini/try.sh) script which although at
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2020/carlini/try.sh) script which although at
first glance might not appear to have a point, it actually does, namely showing
how you can automate play and then reminding you to actually play for real, with
a friend, whether that's real or imagined.
[Cody](#cody) copied the files from the spoiler.zip file (from his copy during
the preview period) that was password protected with a password that was no
longer known.
-He also added the [try.sh](2020/endoh2/try.sh) script.
+He also added the [try.sh](%%REPO_URL%%/2020/endoh2/try.sh) script.
-[Cody](#cody) fixed the script [run_clock.sh](2020/endoh3/run_clock.sh) which gave a
+[Cody](#cody) fixed the script [run_clock.sh](%%REPO_URL%%/2020/endoh3/run_clock.sh) which gave a
funny error when running it:
```
@@ -5574,7 +5771,7 @@ first.
Cody also reported (during the preview period of 2020) for some systems (at some
point?) like macOS the use of `make clock` would not work due possibly to a
timing issue so [Yusuke](#yusuke) changed it to compile the
-[clock.c](2020/endoh3/clock.c) file directly (this might have been fixed in the
+[clock.c](%%REPO_URL%%/2020/endoh3/clock.c) file directly (this might have been fixed in the
Makefile later on but it doesn't hurt to keep it in and this way it isn't a
problem in any system). How Cody remembers this minor detail more than three
years ago is something that many people might wonder but he also once told us
@@ -5582,20 +5779,21 @@ that if someone moves something of his even a millimetre from where it was he
knows it so he might be called unusual (and he argues, with pride, eccentric :-)
) :-)
-Cody also added the [run_clock.alt.sh](2020/endoh3/run_clock.alt.sh) script
-which is analogous to the [run_clock.sh](2020/endoh3/run_clock.sh) but for the
+Cody also added the [run_clock.alt.sh](%%REPO_URL%%/2020/endoh3/run_clock.alt.sh) script
+which is analogous to the [run_clock.sh](%%REPO_URL%%/2020/endoh3/run_clock.sh) but for the
alt code provided by the author, Yusuke.
[Cody](#cody), with intentional irony here :-), fixed formatting, links and typos in
various files.
-He improved the [termcaps.c test utility](2020/ferguson1/termcaps.c), bug fixed
-[play.sh](2020/ferguson1/play.sh), fixed other scripts and the Makefile, changed
+He improved the [termcaps.c test utility](%%REPO_URL%%/2020/ferguson1/termcaps.c), bug fixed
+[play.sh](%%REPO_URL%%/2020/ferguson1/play.sh), fixed other scripts and the Makefile, changed
some files to be markdown (and fixed problems that he caused in doing so :-) ),
fixed typos and formatting and he also fixed some issues that occurred when
files were renamed to `.html` from `.markdown`.
@@ -5610,20 +5808,21 @@ and I encourage you to do so as the cake is quite picky!
[Cody](#cody), with intentional irony here :-), fixed formatting, links and typos in
various files.
-He also added the [try.sh](2020/ferguson2/try.sh) script.
+He also added the [try.sh](%%REPO_URL%%/2020/ferguson2/try.sh) script.
-He also added the [alt code](2020/ferguson2/index.html#alternate-code) and the
-[try.alt.sh](2020/ferguson2/try.alt.sh) script.
+He also added the [alt code](%%REPO_URL%%/2020/ferguson2/index.html#alternate-code) and the
+[try.alt.sh](%%REPO_URL%%/2020/ferguson2/try.alt.sh) script.
The try scripts involved the addition of a text file,
-[key.txt](2020/ferguson2/key.txt) which has the key of the file the judges
-added in [try.this.txt](2020/ferguson2/try.this.txt) which itself was based on
+[key.txt](%%REPO_URL%%/2020/ferguson2/key.txt) which has the key of the file the judges
+added in [try.this.txt](%%REPO_URL%%/2020/ferguson2/try.this.txt) which itself was based on
something the author (Cody :-) ) submitted in the first place.
He also fixed some issues that occurred when files were renamed to `.html` from
@@ -5640,10 +5839,11 @@ and I encourage you to do so as the cake is quite picky!
-[Cody](#cody) added the [try.sh](2020/giles/try.sh) script. This script does
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2020/giles/try.sh) script. This script does
the conversion of `pi.wav` (showing the digits) and also converts the number for
`jenny.wav` and a number Cody 'came up with': one that resembles `IOCCC 28`:
`10666-28`. The `6` is the closest to `C` in his head even though it's not
@@ -5656,24 +5856,26 @@ use the program to play the WAV files (and in one case `stdout`).
-[Cody](#cody) added the [try.sh](2020/kurdyukov2/try.sh) script.
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2020/kurdyukov2/try.sh) script.
Cody also added `-L`/`-I` paths to the Makefile to let this compile more easily if
the user has installed the appropriate library with
[MacPorts](https://www.macports.org) (with the default MacPorts prefix
`/opt/local`).
-Cody also fixed the script [makegif.sh](2020/kurdyukov2/makegif.sh) in a variety
+Cody also fixed the script [makegif.sh](%%REPO_URL%%/2020/kurdyukov2/makegif.sh) in a variety
of ways: shellcheck(1), make sure the program is compiled first (allowing one to
specify which compiler to use with `CC=foo ./makegif.sh ...`), checking that
`convert(1)` is found and that it worked properly (linking to the proper FAQ
@@ -5681,10 +5883,11 @@ entry if not installed or it fails).
-[Cody](#cody) added the [try.sh](2020/kurdyukov3/try.sh) script.
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2020/kurdyukov3/try.sh) script.
He also added a link that has much more details about this phenomenon to the
index.html. Naturally he's one of the ones who can read text even if it's even
@@ -5692,13 +5895,14 @@ more jumbled but we know of others too.
-[Cody](#cody) added the [try.sh](2020/kurdyukov4/try.sh) script.
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2020/kurdyukov4/try.sh) script.
Cody also added from [2019/mills](2019/mills/index.html) the text file
-[Shakespeare.txt](2020/kurdyukov4/Shakespeare.txt) as we are considering to
+[Shakespeare.txt](%%REPO_URL%%/2020/kurdyukov4/Shakespeare.txt) as we are considering to
have each entry have a tarball with the entry by itself.
Also, to explain the confusing to most people award, Cody gave a quick
@@ -5709,32 +5913,35 @@ J.R.R. Tolkien).
-[Cody](#cody) added the MIDI files [cvikl.mid](2020/otterness/cvikl.mid) and
-[entertainer.mid](2020/otterness/entertainer.mid) from the URLs we suggested so
+[Cody](#cody) added the MIDI files [cvikl.mid](%%REPO_URL%%/2020/otterness/cvikl.mid) and
+[entertainer.mid](%%REPO_URL%%/2020/otterness/entertainer.mid) from the URLs we suggested so
that one need not download them and to make sure they can always be obtained
even if the domain or link goes dead.
-Cody also added the [try.sh](2020/otterness/try.sh) script.
+Cody also added the [try.sh](%%REPO_URL%%/2020/otterness/try.sh) script.
-[Cody](#cody) added [alternate code](2020/tsoj/index.html#alternate-code) that will feel
+[Cody](#cody) added [alternate code](%%REPO_URL%%/2020/tsoj/index.html#alternate-code) that will feel
more at home for vi users. One might still end up cursing (see the index.html
file) but probably a lot less :-)
-[Cody](#cody) added the [try.sh](2020/yang/try.sh) script.
+[Cody](#cody) added the [try.sh](%%REPO_URL%%/2020/yang/try.sh) script.
Cody also added a make rule (`make cppp`) for the author's provided C++ code
that can preprocess the generated output to make them more acceptable to typical
@@ -5797,8 +6004,8 @@ Cody also added missing variables like `BASH` and `PDFLATEX` to the
[var.mk](var.mk) file and removed another that was deemed problematic or
undesired. Other variable names had typos in them.
-In at least one case (like the [top level Makefile](/Makefile)) where raw
-commands (that are in [var.mk](/var.mk)) were used, Cody updated them to use the
+In at least one case, like the [top level Makefile](%%REPO_URL%%/Makefile), where raw
+commands that are in [var.mk](/var.mk) were used, Cody updated them to use the
variables.
A comment was missing for the `diff_alt_orig` rule in all the Makefiles and
@@ -5862,8 +6069,8 @@ HARD bug fixes** like [1988/phillipps](thanks-for-help.html#1988_phillipps),
[2005/giljade](thanks-for-help.html#2005_giljade), making entries like
[1985/sicherman](thanks-for-help.html#1985_sicherman) and
[1986/wall](thanks-for-help.html#1986_wall) not need `-traditional-cpp` (all
-**EXTREMELY HARD**), fixing entries to work with clang (some **EXTREMELY HARD**
-like [1991/dds](thanks-for-help.html#1991_dds)) or as much as possible
+**EXTREMELY HARD**), fixing entries to work with clang, some **EXTREMELY HARD**
+like [1991/dds](thanks-for-help.html#1991_dds), or as much as possible
([1989/westley](thanks-for-help.html#1989_westley), a true masterpiece that is
**INCREDIBLY HARD, *MUCH MORE SO* than any other fix!**), porting entries to
macOS (some **EXTREMELY HARD** like
diff --git a/tmp/README.md b/tmp/README.md
index 7312d279e..a5929cd9f 100644
--- a/tmp/README.md
+++ b/tmp/README.md
@@ -348,6 +348,80 @@ Examples:
```
+## [md-links.sh](%%DOCROOT_SLASH%%tmp/md-links.sh)
+
+For all markdown files, print markdown links.
+
+Usage:
+
+```
+ 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:
+
+```
+ 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:
+
+```
+ 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:
+
+```
+ 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
diff --git a/tmp/md-link-paths.sh b/tmp/md-link-paths.sh
new file mode 100755
index 000000000..5c9466b57
--- /dev/null
+++ b/tmp/md-link-paths.sh
@@ -0,0 +1,362 @@
+#!/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
+#
+find . -name '*.md' -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!!! -- Jessica Noll, Age 2
+#
+exit 0
diff --git a/tmp/md-links.sh b/tmp/md-links.sh
new file mode 100755
index 000000000..df06e7f3d
--- /dev/null
+++ b/tmp/md-links.sh
@@ -0,0 +1,328 @@
+#!/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)
+#
+find . -name '*.md' -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!!! -- Jessica Noll, Age 2
+#
+exit 0
diff --git a/tmp/md-local-links.sh b/tmp/md-local-links.sh
new file mode 100755
index 000000000..88c3ee787
--- /dev/null
+++ b/tmp/md-local-links.sh
@@ -0,0 +1,340 @@
+#!/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)
+#
+find . -name '*.md' -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!!! -- Jessica Noll, Age 2
+#
+exit 0
diff --git a/tmp/md-token-links.sh b/tmp/md-token-links.sh
new file mode 100755
index 000000000..9fa1f5b66
--- /dev/null
+++ b/tmp/md-token-links.sh
@@ -0,0 +1,328 @@
+#!/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)
+#
+find . -name '*.md' -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!!! -- Jessica Noll, Age 2
+#
+exit 0