From a981cacbeeaeb52338dc04efbe865ccb51121b42 Mon Sep 17 00:00:00 2001
From: Cody Boone Ferguson <53008573+xexyl@users.noreply.github.com>
Date: Tue, 6 Jun 2023 04:50:41 -0700
Subject: [PATCH] Begin centralising thank yous to a single file
NOTE: this is just one way to fix the problem described below but it can
be modified - perhaps greatly changed - or rejected and done
differently. That being said it does isolate the entries that can be
modified except for the one by Simon Cooper as I had intended to do all
entries before a commit but I am too tired to continue and there are
more important things to be done for the IOCCC (hopefully later today).
I don't mind but I wanted to save Landon some of the work as I started
the problem even though all with good intention after Landon noted he
wanted to thank those in the README.md files.
First I would like to also apologise to any previous winners if there
was upset or concern; this was all done with the best intentions and I
know that it was a fine line but the judges' goal is to make it so
previous entries do work in modern systems so that everyone can enjoy
them. Still I am sorry if I caused any offence or anything else! I
actually agree with the situation and I had been wondering about how to
go about it too. Now for the rationale behind this update.
A couple previous winners have voiced concern about the way the thank
you notes are displayed in the README.md files I have started the work
to save Landon some of the trouble as although it was with good
intentions (and based on the note that Landon wanted to thank those who
fixed an entry) I started the problem so it seems only right that I help
rectify it. I also agree with the problem and had thought of it before,
even thinking that in some entries it needs not have any reference to
anyone but the winner! This commit has removed the thank you notes from
several entries and added a THANKS.md file.
The THANKS.md file has the rest of the entries that were fixed as well
which should if nothing else help isolate the entries that need to be
modified. Some entries actually referred to me but were not a thank you
note due to a fix; some were from winners themselves for instance.
Note that I did not update the bugs.md file or any other file that might
refer to these things in the README.md files. The bugs.md for instance
refers to adding credits to those who fix problems or provide missing
links or files to the respective README.md files and this will have to
change once the way this is done is finalised. But hopefully this is a
help to Landon so that he may also focus on the important jprint tool in
the mkiocccentry repo.
---
1984/anonymous/README.md | 6 -
1984/decot/README.md | 11 -
1985/applin/README.md | 21 --
1985/lycklama/README.md | 7 -
1985/sicherman/README.md | 6 -
1986/holloway/README.md | 8 -
1986/marshall/README.md | 7 -
1986/wall/README.md | 8 -
1987/wall/README.md | 4 -
1987/westley/README.md | 5 -
1988/dale/README.md | 45 ----
1988/isaak/README.md | 5 -
1988/phillipps/README.md | 9 -
1989/fubar/README.md | 4 -
1989/jar.2/README.md | 16 --
1989/paul/README.md | 5 -
1989/robison/README.md | 4 -
1989/tromp/README.md | 13 -
1990/cmills/README.md | 11 -
1990/dds/README.md | 8 -
1990/jaw/README.md | 13 +-
THANKS.md | 497 +++++++++++++++++++++++++++++++++++++++
22 files changed, 499 insertions(+), 214 deletions(-)
create mode 100644 THANKS.md
diff --git a/1984/anonymous/README.md b/1984/anonymous/README.md
index 9b88a4a9f..72d0a9135 100644
--- a/1984/anonymous/README.md
+++ b/1984/anonymous/README.md
@@ -15,12 +15,6 @@ make all
./anonymous
```
-[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed this to work
-under macOS. The fix was to not use implicit `int`s in the `read()` function as
-it once did. Instead the second arg is a `void *`. In the `read()` function
-(which actually calls `write(2)`) the `i` (which is the `void *`) has to be cast
-to an `int`. This solves the problem. Thank you Cody for your assistance!
-
### Alternate code:
The original version of this entry was added, by request,
diff --git a/1984/decot/README.md b/1984/decot/README.md
index ed0215d26..e8a963b9e 100644
--- a/1984/decot/README.md
+++ b/1984/decot/README.md
@@ -8,17 +8,6 @@ Dave Decot
make all
```
-[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed this to not
-require `-traditional-cpp` which not all compilers support (clang does not
-support it for example). Clang is also more strict about the args' types in
-`main()` and this was also a problem that Cody fixed, making it work with both
-clang and gcc. For the original code with the gcc fix described below, see the
-alternate code section below. Thank you Cody for your assistance!
-
-Originally [Yusuke Endoh](/winners.html#Yusuke_Endoh) supplied a patch so that
-this entry would compile with gcc - but not clang - or at least some versions.
-Thank you Yusuke!
-
## To run:
```sh
diff --git a/1985/applin/README.md b/1985/applin/README.md
index 9e25e0993..eb34f5205 100644
--- a/1985/applin/README.md
+++ b/1985/applin/README.md
@@ -16,27 +16,6 @@ make all
./applin
```
-[Yusuke Endoh](/winners.html#Yusuke_Endoh) provided a patch to get this to
-not issue crash and [Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson)
-fixed this to work with macOS (it printed the string `H????` in a seemingly
-infinite loop of printing more and more `?`s).
-
-The problem with the crash is that it destructively rewrites string literals but
-with `strdup()` it's safe.
-
-For macOS it's because there was no prototype for `execlp()` 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
-though that fix was more complicated). Ironically this fix was discovered
-through linux!
-
-NOTE: originally this entry did not print a newline prior to returning to the
-shell, after the output (despite having `\n` in the string - why?) but to make
-it more friendly to users Cody made it print a `\n` prior to returning to the
-shell.
-
-Thank you Yusuke and Cody for your help!
-
## Judges' remarks:
One liner programs are short but twisted. This `Hello, world!` version
diff --git a/1985/lycklama/README.md b/1985/lycklama/README.md
index a6deba5c4..6a1f47686 100644
--- a/1985/lycklama/README.md
+++ b/1985/lycklama/README.md
@@ -9,13 +9,6 @@ make all
```
-[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) 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 effect as using `#define` but
-this does not work in modern systems so Cody changed the `#o` lines to
-`#define`. The `lycklama.alt.c` is the original source code as it provides some
-fun input for the entry. Thank you Cody!
-
With a tip from [Yusuke Endoh](/winners.html#Yusuke_Endoh) it was indirectly
noticed that if one slows down the call to `write()` one can see some fun output
that's not visible with modern systems so Cody added a call to `usleep()`. The
diff --git a/1985/sicherman/README.md b/1985/sicherman/README.md
index 57a520938..20aa14279 100644
--- a/1985/sicherman/README.md
+++ b/1985/sicherman/README.md
@@ -9,12 +9,6 @@ make all
```
-[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed this _very twisted
-entry_ to not require `-traditional-cpp`. He'd like to refer you to the original
-file in [sicherman.alt.c](sicherman.alt.c) and he suggests that you then compare
-it to [sicherman.c](sicherman.c) for some good old C-fashioned fun! Thank you
-Cody for your assistance!
-
## Try:
```sh
diff --git a/1986/holloway/README.md b/1986/holloway/README.md
index 06e540779..4be41a680 100644
--- a/1986/holloway/README.md
+++ b/1986/holloway/README.md
@@ -9,14 +9,6 @@ US
make all
```
-[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) 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 main(). However simply
-changing it to a `char **` and updating the `*s` to `**s` caused a segfault. By
-adding a new variable, `char *t`, initialising it to `s` and then using `t`
-instead of `s` it compiles and runs successfully under clang and gcc. Thank you
-Cody for your assistance!
-
## Try:
```sh
diff --git a/1986/marshall/README.md b/1986/marshall/README.md
index 744b8c6e9..b1c1b880b 100644
--- a/1986/marshall/README.md
+++ b/1986/marshall/README.md
@@ -9,13 +9,6 @@ make all
```
-[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) got this to
-compile and work with clang. It did not work with clang because it is more
-strict about the second and third args to main() and the third arg was an int.
-He notes that he tried to keep the picture as close to the original. The line
-lengths are the same but some spaces had to be changed to non-spaces. Thank you
-Cody for your help!
-
## Try:
```sh
diff --git a/1986/wall/README.md b/1986/wall/README.md
index 22c2fbc14..9dcf7fd83 100644
--- a/1986/wall/README.md
+++ b/1986/wall/README.md
@@ -9,14 +9,6 @@ US
make all
```
-We used a patch provided by [Yusuke Endoh](/winners.html#Yusuke_Endoh) to make
-this work with gcc (in particular the patch uses `strdup()` on two strings).
-Thank you Yusuke! [Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed
-this so that it does not require `-traditional-cpp`. This took a fair bit of
-tinkering as this entry *is* strange. The original code is provided to allow one
-to easily see how different C was in those days. See below for details. Thank
-you Cody for your assistance!
-
## To use:
```sh
diff --git a/1987/wall/README.md b/1987/wall/README.md
index 776dec55a..cd6111c4a 100644
--- a/1987/wall/README.md
+++ b/1987/wall/README.md
@@ -20,10 +20,6 @@ make all
# enter some strings
```
-[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) made this safer by
-using `fgets()` instead of `gets()`. This prevents an annoying and potentially
-alarming warning at compiling, linking or runtime.
-
## Try:
diff --git a/1987/westley/README.md b/1987/westley/README.md
index 729fc1ae2..2dca78a4e 100644
--- a/1987/westley/README.md
+++ b/1987/westley/README.md
@@ -14,11 +14,6 @@ US
make all
```
-[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed this for modern
-systems. The problem was 'assignment to cast is illegal, lvalue casts are not
-supported'. For the original file see below. Thank you Cody for your assistance!
-
-
## To run:
```sh
diff --git a/1988/dale/README.md b/1988/dale/README.md
index d44e6773a..5ba311efe 100644
--- a/1988/dale/README.md
+++ b/1988/dale/README.md
@@ -9,51 +9,6 @@ Australia
make all
```
-[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed this for modern
-compilers. There were two problems to address. One was that the entry required
-`-traditional-cpp` (which not all compilers support `clang`
-does not support) which Cody fixed. It needed that option because of two things
-it did:
-
-```c
-#define a(x)get/***/x/***/id())
-
-/* ... */
-
-p Z=chroot("/");L(!a(u)execv((q(v="/ipu6ljov"),v),C);Z-=kill(l);
-
-/* ... */
-
-case_2:L(!--V){O/*/*/c*c+c);wait(A+c*c-c);L(!Z)f(A,"\n",c);return(A*getgid());};C++;
-```
-
-no longer works to create `getuid()` and `getgid()`. The second is that
-
-```c
-for/*/(;;);/*/k()){O/*/*/c);
-```
-
-cannot form `fork())` in modern C compilers. What is quite fun is that the cpp
-can!
-
-The other problem was that modern compilers do not allow directives like:
-
-```c
-#define _ define
-+#_ P char
-+#_ p int
-+#_ O close(
-...
-```
-
-so Cody changed the lines to be in the form of:
-
-```c
-#define foo bar
-```
-
-Thank you Cody for your assistance!
-
## Try:
```sh
diff --git a/1988/isaak/README.md b/1988/isaak/README.md
index 251133c20..2a46aadfd 100644
--- a/1988/isaak/README.md
+++ b/1988/isaak/README.md
@@ -19,11 +19,6 @@ make all
./isaak
```
-[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed this to work for
-modern systems. The problem was that the important function, a redefinition of
-exit(), was not being called in main(). See below notes for the original,
-alternative version. Thank you Cody for your assistance!
-
### Alternate code:
The original version of this code is in [isaak.alt.c](isaak.alt.c).
diff --git a/1988/phillipps/README.md b/1988/phillipps/README.md
index 8c6c9a652..5340c1e6f 100644
--- a/1988/phillipps/README.md
+++ b/1988/phillipps/README.md
@@ -15,15 +15,6 @@ make all
```
-[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed this for modern
-systems. It did not compile with clang because it requires the second and third
-args to main() to be `char **` but even before that with gcc it printed random
-characters. After fixing it for clang by changing main() to call the new
-function pain() (chosen because it's a pain that clang requires these args to
-be `char **` :-) ) with the correct args it now works. Thank you Cody for your
-assistance!
-
-
## Judges' remarks:
Compile and run without parameters.
diff --git a/1989/fubar/README.md b/1989/fubar/README.md
index 9c13c3d34..3c274babf 100644
--- a/1989/fubar/README.md
+++ b/1989/fubar/README.md
@@ -13,10 +13,6 @@ US
make all
```
-[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) got this to work with
-modern systems. Thank you Cody for your assistance!
-
-
## To run:
```sh
diff --git a/1989/jar.2/README.md b/1989/jar.2/README.md
index 9c2afe5b8..f6798b2f2 100644
--- a/1989/jar.2/README.md
+++ b/1989/jar.2/README.md
@@ -13,22 +13,6 @@ Finland
make all
```
-[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed this to work with
-modern compilers. Modern compilers do not allow code like:
-
-```c
-#define D define
-#define a include
-
-#D foo bar
-#a
-```
-
-He notes that there _is_ a way to get it (or something close to it) to work. Do
-you know how?
-
-Thank you Cody for your assistance!
-
## To run:
diff --git a/1989/paul/README.md b/1989/paul/README.md
index 5b1fc5637..c7deb7b77 100644
--- a/1989/paul/README.md
+++ b/1989/paul/README.md
@@ -20,11 +20,6 @@ make all
./paul
```
-[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed a segfault under
-macOS. 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
-long. Thank you Cody for your assistance!
-
## Judges' remarks:
The original source contained a long line which caused many
diff --git a/1989/robison/README.md b/1989/robison/README.md
index 0171a7bd7..0009067f7 100644
--- a/1989/robison/README.md
+++ b/1989/robison/README.md
@@ -14,10 +14,6 @@ make all
```
-NOTE: we were able to get this to compile under modern systems with a patch from
-[Yusuke Endoh](/winners.html#Yusuke_Endoh). Thank you for your assistance
-Yusuke!
-
## To run:
```sh
diff --git a/1989/tromp/README.md b/1989/tromp/README.md
index 9e0a30474..6a1b073dc 100644
--- a/1989/tromp/README.md
+++ b/1989/tromp/README.md
@@ -12,19 +12,6 @@ Netherlands
make all
```
-We used a patch from [Yusuke Endoh](/winners.html#Yusuke_Endoh)
-to get this to compile under gcc. Thank you Yusuke for your assistance!
-
-[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) got this to work with
-clang by further changing the variable `a` to be not the third argument to
-`main()` and instead be a variable declared in `main()`.
-
-Cody also bug fixed it so that the high score file would work (it was not even
-being created) and after this making sure the terminal stayed sane (the letter
-`u` could not be typed and echo was disabled outright after the segfault fix /
-high score file was reinstated). We thank you for your assistance Cody (he
-cynically notes that he did it because tetris just has to work)!
-
## To run:
```sh
diff --git a/1990/cmills/README.md b/1990/cmills/README.md
index 7c9b8f5f4..95c51056e 100644
--- a/1990/cmills/README.md
+++ b/1990/cmills/README.md
@@ -18,17 +18,6 @@ make all
./cmills [starting_cash]
```
-We used a patch from [Yusuke Endoh](/winners.html#Yusuke_Endoh) to get this to
-work in modern systems (it resulted in a bus error otherwise). Thank you Yusuke
-for your assistance!
-
-[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) made this safer by
-using `fgets()` instead of `gets()`. This avoids an annoying and potentially
-alarming warning at compiling and/or linking and/or runtime that in some cases
-is interspersed with the program's output. Thank you Cody for your assistance!
-
-For the original code see the [1992 archive](/archive/archive-1990.tar.bz2).
-
## Try:
diff --git a/1990/dds/README.md b/1990/dds/README.md
index abe679176..82e1d75e5 100644
--- a/1990/dds/README.md
+++ b/1990/dds/README.md
@@ -12,14 +12,6 @@ make all
```
-[Yusuke Endoh](/winners.html#Yusuke_Endoh) fixed this for modern systems. Thank
-you Yusuke!
-
-[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) removed the erroneous
-prototype to `fopen()` and made this use `fgets()` instead of `gets()` to make
-it safer and to prevent an annoying and potentially alarming warning at
-compiling and/or linking and/or runtime. Thank you Cody for your assistance!
-
## To run:
```sh
diff --git a/1990/jaw/README.md b/1990/jaw/README.md
index b934acb95..84f634e1d 100644
--- a/1990/jaw/README.md
+++ b/1990/jaw/README.md
@@ -25,17 +25,8 @@ US
make all
```
-[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed the script to
-work properly in modern environments (to do with PATH not having '.' in it). He
-notes that with an invocation in the try section below will with macOS show
-what appears to be an error message but is actually okay. He gives more
-information in the [bugs.md](/bugs.md) file. Thank you Cody for the help and
-notes!
-
-NOTE: as `btoa` is not common we used a ruby script from [Yusuke
-Endoh](/winners.html#Yusuke_Endoh). Thank you Yusuke for your implementation of
-`btoa`!
-
+NOTE: see the [bugs.md](/bugs.md) file for information on what appears to be a
+bug in macOS but is actually not.
## Try:
diff --git a/THANKS.md b/THANKS.md
new file mode 100644
index 000000000..0cb87c649
--- /dev/null
+++ b/THANKS.md
@@ -0,0 +1,497 @@
+We would like to extend our gratitude to various people - some previous winners,
+some not - for fixes to the following entries.
+
+[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed many entries so
+that they worked in modern systems. He also added several scripts to showcase
+entries and he provided some fun remarks and try commands and questions to
+ponder.
+
+Cody also spent a great deal of time and effort fixing formatting of the
+README.md files as well as the many typo and consistency fixes, though this is
+currently (as of 6 June 2023) a work in progress.
+
+He also provided some alternate versions sometimes as a fix or enhancement (a
+good example is when the entry moved too fast due to faster computers but this
+is not the only type of alternate version) and other times for some other
+reason. However as this is part of the respective entries we have kept them in
+the README.md files.
+
+Thank you Cody!
+
+[Yusuke Endoh](/winners.html#Yusuke_Endoh) provided fixes to quite a few
+entries as well though at this time he is unaware of it :-) Thank you Yusuke!
+
+Misha Dynin provided a fix for [1988/westley](1988/westley/westley.c)
+([README.md](1988/westley/README.md)) so that it would compile and work with
+both K&R and more modern C compilers. Thank you Misha!
+
+Simon Cooper fixed an entry as well which will be noted in the respective entry.
+
+In cases where there is an alt version we will also refer to it below.
+
+Please also see the [bugs.md](bugs.md) file!
+
+The below entries were modified or had alternate versions provided with details
+for each entry modified. As Misha is already noted above the entry is not listed
+again but this does not mean we appreciate it any less!
+
+
+## [1984/anonymous](1984/anonymous/anonymous.c) ([README.md](1984/anonymous/README.md]))
+
+[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed this to work
+under macOS. The fix was to not use implicit `int`s in the `read()` function as
+it once did. Instead the second arg is a `void *`. In the `read()` function
+(which actually calls `write(2)`) the `i` (which is the `void *`) has to be cast
+to an `int`. This solves the problem. Thank you Cody for your assistance!
+
+
+## [1984/decot](1984/decot/decot.c) ([README.md](1984/decot/README.md]))
+
+[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed this to not
+require `-traditional-cpp` which not all compilers support (clang does not
+support it for example). Clang is also more strict about the args' types in
+`main()` and this was also a problem that Cody fixed, making it work with both
+clang and gcc. For the original code with the gcc fix described below, see the
+alternate code section below. Thank you Cody for your assistance!
+
+Originally [Yusuke Endoh](/winners.html#Yusuke_Endoh) supplied a patch so that
+this entry would compile with gcc - but not clang - or at least some versions.
+Thank you Yusuke!
+
+
+## [1984/mullender](1984/mullender/mullender.c) ([README.md](1984/mullender/README.md]))
+
+[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) provided an alternate
+version which was an improved version from the judges so that everyone can enjoy
+it in systems that are not VAX/PDP. We also refer you to the [faq](faq.md) as
+there are some winning entries that also let one enjoy it - with more to them of
+course!
+
+## [1985/applin](1985/applin/applin.c) ([README.md](1985/applin/README.md]))
+
+[Yusuke Endoh](/winners.html#Yusuke_Endoh) provided a patch to get this to
+not issue crash and [Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson)
+fixed this to work with macOS (it printed the string `H????` in a seemingly
+infinite loop of printing more and more `?`s).
+
+The problem with the crash is that it destructively rewrites string literals but
+with `strdup()` it's safe.
+
+For macOS it's because there was no prototype for `execlp()` 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
+though that fix was more complicated). Ironically this fix was discovered
+through linux!
+
+NOTE: originally this entry did not print a newline prior to returning to the
+shell, after the output (despite having `\n` in the string - why?) but to make
+it more friendly to users Cody made it print a `\n` prior to returning to the
+shell.
+
+Thank you Yusuke and Cody for your help!
+
+
+## [1985/lycklama](1985/lycklama/lycklama.c) ([README.md](1985/lycklama/README.md]))
+
+[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) 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 effect as using `#define` but
+this does not work in modern systems so Cody changed the `#o` lines to
+`#define`. The `lycklama.alt.c` is the original source code as it provides some
+fun input for the entry. Thank you Cody!
+
+[Yusuke Endoh](/winners.html#Yusuke_Endoh) provided some useful information that
+amounts to an alternate version but which does not actually modify the code.
+Perhaps it should be an alternate version but in any case see the README.md file
+for details.
+
+
+## [1985/sicherman](1985/sicherman/sicherman.c) ([README.md](1985/sicherman/README.md]))
+
+[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed this _very twisted
+entry_ to not require `-traditional-cpp`. He'd like to refer you to the original
+file in [sicherman.alt.c](1985/sicherman.alt.c) and he suggests that you then compare
+it to [sicherman.c](1985/sicherman/sicherman.c) for some good old C-fashioned fun!
+
+
+## [1986/holloway](1986/holloway/holloway.c) ([README.md](1986/holloway/README.md]))
+
+[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) 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 main(). However simply
+changing it to a `char **` and updating the `*s` to `**s` caused a segfault. By
+adding a new variable, `char *t`, initialising it to `s` and then using `t`
+instead of `s` it compiles and runs successfully under clang and gcc.
+
+
+## [1986/marshall](1986/marshall/marshall.c) ([README.md](1986/marshall/README.md]))
+
+[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) got this to
+compile and work with clang. It did not work with clang because it is more
+strict about the second and third args to main() and the third arg was an int.
+He notes that he tried to keep the picture as close to the original. The line
+lengths are the same but some spaces had to be changed to non-spaces.
+
+
+## [1986/wall](1986/wall/wall.c) ([README.md](1986/wall/README.md]))
+
+We used a patch provided by [Yusuke Endoh](/winners.html#Yusuke_Endoh) to make
+this work with gcc (in particular the patch uses `strdup()` on two strings).
+Thank you Yusuke! [Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed
+this so that it does not require `-traditional-cpp`. This took a fair bit of
+tinkering as this entry *is* strange. The original code is provided to allow one
+to easily see how different C was in those days. See below for details. Thank
+you Cody for your assistance!
+
+
+## [1987/wall](1987/wall/wall.c) ([README.md](1987/wall/README.md]))
+
+[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) made this safer by
+using `fgets()` instead of `gets()`. This prevents an annoying and potentially
+alarming warning at compiling, linking or runtime.
+
+
+## [1987/westley](1987/westley/westley.c) ([README.md](1987/westley/README.md]))
+
+[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed this for modern
+systems. The problem was 'assignment to cast is illegal, lvalue casts are not
+supported'. For the original file see below. Thank you Cody for your assistance!
+
+## [1988/dale](1988/dale/dale.c) ([README.md](1988/dale/README.md]))
+
+[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed this for modern
+compilers. There were two problems to address. One was that the entry required
+`-traditional-cpp` (which not all compilers support `clang`
+does not support) which Cody fixed. It needed that option because of two things
+it did:
+
+```c
+#define a(x)get/***/x/***/id())
+
+/* ... */
+
+p Z=chroot("/");L(!a(u)execv((q(v="/ipu6ljov"),v),C);Z-=kill(l);
+
+/* ... */
+
+case_2:L(!--V){O/*/*/c*c+c);wait(A+c*c-c);L(!Z)f(A,"\n",c);return(A*getgid());};C++;
+```
+
+no longer works to create `getuid()` and `getgid()`. The second is that
+
+```c
+for/*/(;;);/*/k()){O/*/*/c);
+```
+
+cannot form `fork())` in modern C compilers. What is quite fun is that the cpp
+can!
+
+The other problem was that modern compilers do not allow directives like:
+
+```c
+#define _ define
++#_ P char
++#_ p int
++#_ O close(
+...
+```
+
+so Cody changed the lines to be in the form of:
+
+```c
+#define foo bar
+```
+
+## [1988/isaak](1988/isaak/isaak.c) ([README.md](1988/isaak/README.md]))
+
+[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed this to work for
+modern systems. The problem was that the important function, a redefinition of
+exit(), was not being called in main(). See below notes for the original,
+alternative version.
+
+The original version is in [1988/isaak/isaak.alt.c](1988/isaak/isaak.alt.c).
+
+## [1988/phillipps](1988/phillipps/phillipps.c) ([README.md](1988/phillipps/README.md]))
+
+[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed this for modern
+systems. It did not compile with clang because it requires the second and third
+args to main() to be `char **` but even before that with gcc it printed random
+characters. After fixing it for clang by changing main() to call the new
+function pain() (chosen because it's a pain that clang requires these args to
+be `char **` :-) ) with the correct args it now works. Thank you Cody for your
+assistance!
+
+
+## [1988/spinellis](1988/spinellis/spinellis.c) ([README.md](1988/spinellis/README.md]))
+
+An alternate version was provided by Cody for this so that it works for
+compilers like clang.
+
+## [1989/fubar](1989/fubar/fubar.c) ([README.md](1989/fubar/README.md]))
+
+[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) got this to work with
+modern systems. The main issues were an `#include` had to be added and fixing the
+path to files referred to in the code was also needed.
+
+
+## [1989/jar.2](1989/jar.2/jar.2.c) ([README.md](1989/jar.2/README.md]))
+
+[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed this to work with
+modern compilers. Modern compilers do not allow code like:
+
+```c
+#define D define
+#define a include
+
+#D foo bar
+#a
+```
+
+He notes that there _is_ a way to get it (or something close to it) to work. Do
+you know how?
+
+## [1989/ovdluhe](1989/ovdluhe/ovdluhe.c) ([README.md](1989/ovdluhe/README.md]))
+
+Cody provided an alternate version based on the author's remarks. See the
+README.md for details.
+
+## [1989/paul](1989/paul/paul.c) ([README.md](1989/paul/README.md]))
+
+[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed a segfault under
+macOS. 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
+long. Thank you Cody for your assistance!
+
+## [1989/robison](1989/robison/robison.c) ([README.md](1989/robison/README.md]))
+
+Yusuke Endoh fixed this to compile under modern systems.
+
+
+## [1989/tromp](1989/tromp/tromp.c) ([README.md](1989/tromp/README.md]))
+
+We used a patch from [Yusuke Endoh](/winners.html#Yusuke_Endoh)
+to get this to compile under gcc. Thank you Yusuke for your assistance!
+
+[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) got this to work with
+clang by further changing the variable `a` to be not the third argument to
+`main()` and instead be a variable declared in `main()`.
+
+Cody also bug fixed it so that the high score file would work (it was not even
+being created) and after this making sure the terminal stayed sane (the letter
+`u` could not be typed and echo was disabled outright after the segfault fix /
+high score file was reinstated). We thank you for your assistance Cody (he
+cynically notes that he did it because tetris just has to work)!
+
+
+## [1989/westley](1989/westley/westley.c) ([README.md](1989/westley/README.md]))
+
+Cody got this to partly work with clang. As there are some important notes on
+this in the README.md file we have left the details in that file, at least for
+now. Perhaps the [bugs.md](bugs.md) file is a better place but this can be
+decided later.
+
+
+## [1990/baruch](1990/baruch/baruch.c) ([README.md](1990/baruch/README.md]))
+
+Cody added an alternate version which allows certain compilers to compile the
+code, based on the author's remarks.
+
+## [1990/cmills](1990/cmills/cmills.c) ([README.md](1990/cmills/README.md]))
+
+Yusuke got this to work in modern systems (it resulted in a bus error).
+
+To prevent alarming warnings at linking or runtime Cody made the entry use
+`fgets()` rather than `gets()`. He notes that another option would have been to
+redirect `stderr` to `/dev/null` but he did not think of that at the time.
+
+For the original code see the [1992 archive](/archive/archive-1990.tar.bz2).
+
+
+## [1990/dds](1990/dds/dds.c) ([README.md](1990/dds/README.md]))
+
+[Yusuke Endoh](/winners.html#Yusuke_Endoh) fixed this for modern systems. Thank
+you Yusuke!
+
+[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) removed the erroneous
+prototype to `fopen()` and made this use `fgets()` instead of `gets()` to make
+it safer and to prevent an annoying and potentially alarming warning at
+compiling and/or linking and/or runtime. Thank you Cody for your assistance!
+
+
+## [1990/jaw](1990/jaw/jaw.c) ([README.md](1990/jaw/README.md]))
+
+[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed the script to
+work properly in modern environments (to do with PATH not having '.' in it). He
+notes that with an invocation in the try section will with macOS show
+what appears to be an error message but is actually okay. He gives more
+information in the [bugs.md](/bugs.md) file. Thank you Cody for the help and
+notes!
+
+NOTE: as `btoa` is not common we used a ruby script from [Yusuke
+Endoh](/winners.html#Yusuke_Endoh). Thank you Yusuke for your implementation of
+`btoa`!
+
+
+## [1990/scjones](1990/scjones/scjones.c) ([README.md](1990/scjones/README.md]))
+
+## [1990/tbr](1990/tbr/tbr.c) ([README.md](1990/tbr/README.md]))
+
+## [1990/theorem](1990/theorem/theorem.c) ([README.md](1990/theorem/README.md]))
+
+## [1990/westley](1990/westley/westley.c) ([README.md](1990/westley/README.md]))
+
+## [1991/brnstnd](1991/brnstnd/brnstnd.c) ([README.md](1991/brnstnd/README.md]))
+
+## [1991/dds](1991/dds/dds.c) ([README.md](1991/dds/README.md]))
+
+## [1991/westley](1991/westley/westley.c) ([README.md](1991/westley/README.md]))
+
+## [1992/adrian](1992/adrian/adrian.c) ([README.md](1992/adrian/README.md]))
+
+## [1992/gson](1992/gson/gson.c) ([README.md](1992/gson/README.md]))
+
+## [1992/kivinen](1992/kivinen/kivinen.c) ([README.md](1992/kivinen/README.md]))
+
+## [1992/lush](1992/lush/lush.c) ([README.md](1992/lush/README.md]))
+
+## [1992/westley](1992/westley/westley.c) ([README.md](1992/westley/README.md]))
+
+## [1993/jonth](1993/jonth/jonth.c) ([README.md](1993/jonth/README.md]))
+
+## [1993/leo](1993/leo/leo.c) ([README.md](1993/leo/README.md]))
+
+## [1993/lmfjyh](1993/lmfjyh/lmfjyh.c) ([README.md](1993/lmfjyh/README.md]))
+
+## [1993/plummer](1993/plummer/plummer.c) ([README.md](1993/plummer/README.md]))
+
+## [1993/rince](1993/rince/rince.c) ([README.md](1993/rince/README.md]))
+
+## [1993/schnitzi](1993/schnitzi/schnitzi.c) ([README.md](1993/schnitzi/README.md]))
+
+## [1993/vanb](1993/vanb/vanb.c) ([README.md](1993/vanb/README.md]))
+
+## [1994/ldb](1994/ldb/ldb.c) ([README.md](1994/ldb/README.md]))
+
+## [1994/schnitzi](1994/schnitzi/schnitzi.c) ([README.md](1994/schnitzi/README.md]))
+
+## [1994/shapiro](1994/shapiro/shapiro.c) ([README.md](1994/shapiro/README.md]))
+
+## [1994/westley](1994/westley/westley.c) ([README.md](1994/westley/README.md]))
+
+## [1995/cdua](1995/cdua/cdua.c) ([README.md](1995/cdua/README.md]))
+
+## [1995/garry](1995/garry/garry.c) ([README.md](1995/garry/README.md]))
+
+## [1996/august](1996/august/august.c) ([README.md](1996/august/README.md]))
+
+## [1996/dalbec](1996/dalbec/dalbec.c) ([README.md](1996/dalbec/README.md]))
+
+## [1996/eldby](1996/eldby/eldby.c) ([README.md](1996/eldby/README.md]))
+
+## [1996/gandalf](1996/gandalf/gandalf.c) ([README.md](1996/gandalf/README.md]))
+
+## [1996/westley](1996/westley/westley.c) ([README.md](1996/westley/README.md]))
+
+## [1998/chaos](1998/chaos/chaos.c) ([README.md](1998/chaos/README.md]))
+
+## [1998/schnitzi](1998/schnitzi/schnitzi.c) ([README.md](1998/schnitzi/README.md]))
+
+## [1998/schweikh1](1998/schweikh1/schweikh1.c) ([README.md](1998/schweikh1/README.md]))
+
+## [2000/anderson](2000/anderson/anderson.c) ([README.md](2000/anderson/README.md]))
+
+## [2000/briddlebane](2000/briddlebane/briddlebane.c) ([README.md](2000/briddlebane/README.md]))
+
+## [2000/dlowe](2000/dlowe/dlowe.c) ([README.md](2000/dlowe/README.md]))
+
+## [2000/jarijyrki](2000/jarijyrki/jarijyrki.c) ([README.md](2000/jarijyrki/README.md]))
+
+## [2000/natori](2000/natori/natori.c) ([README.md](2000/natori/README.md]))
+
+## [2000/thadgavin](2000/thadgavin/thadgavin.c) ([README.md](2000/thadgavin/README.md]))
+
+## [2001/anonymous](2001/anonymous/anonymous.c) ([README.md](2001/anonymous/README.md]))
+
+## [2001/bellard](2001/bellard/bellard.c) ([README.md](2001/bellard/README.md]))
+
+## [2001/cheong](2001/cheong/cheong.c) ([README.md](2001/cheong/README.md]))
+
+## [2001/coupard](2001/coupard/coupard.c) ([README.md](2001/coupard/README.md]))
+
+## [2001/ctk](2001/ctk/ctk.c) ([README.md](2001/ctk/README.md]))
+
+## [2001/dgbeards](2001/dgbeards/dgbeards.c) ([README.md](2001/dgbeards/README.md]))
+
+## [2001/herrmann2](2001/herrmann2/herrmann2.c) ([README.md](2001/herrmann2/README.md]))
+
+## [2001/kev](2001/kev/kev.c) ([README.md](2001/kev/README.md]))
+
+## [2001/westley](2001/westley/westley.c) ([README.md](2001/westley/README.md]))
+
+## [2004/arachnid](2004/arachnid/arachnid.c) ([README.md](2004/arachnid/README.md]))
+
+## [2004/burley](2004/burley/burley.c) ([README.md](2004/burley/README.md]))
+
+## [2004/gavin](2004/gavin/gavin.c) ([README.md](2004/gavin/README.md]))
+
+## [2004/kopczynski](2004/kopczynski/kopczynski.c) ([README.md](2004/kopczynski/README.md]))
+
+## [2004/newbern](2004/newbern/newbern.c) ([README.md](2004/newbern/README.md]))
+
+## [2005/aidan](2005/aidan/aidan.c) ([README.md](2005/aidan/README.md]))
+
+## [2005/anon](2005/anon/anon.c) ([README.md](2005/anon/README.md]))
+
+## [2005/giljade](2005/giljade/giljade.c) ([README.md](2005/giljade/README.md]))
+
+## [2005/mynx](2005/mynx/mynx.c) ([README.md](2005/mynx/README.md]))
+
+## [2006/birken](2006/birken/birken.c) ([README.md](2006/birken/README.md]))
+
+## [2006/borsanyi](2006/borsanyi/borsanyi.c) ([README.md](2006/borsanyi/README.md]))
+
+## [2006/monge](2006/monge/monge.c) ([README.md](2006/monge/README.md]))
+
+## [2006/night](2006/night/night.c) ([README.md](2006/night/README.md]))
+
+## [2006/sloane](2006/sloane/sloane.c) ([README.md](2006/sloane/README.md]))
+
+## [2006/toledo2](2006/toledo2/toledo2.c) ([README.md](2006/toledo2/README.md]))
+
+## [2006/toledo3](2006/toledo3/toledo3.c) ([README.md](2006/toledo3/README.md]))
+
+## [2011/eastman](2011/eastman/eastman.c) ([README.md](2011/eastman/README.md]))
+
+## [2011/goren](2011/goren/goren.c) ([README.md](2011/goren/README.md]))
+
+## [2011/richards](2011/richards/richards.c) ([README.md](2011/richards/README.md]))
+
+## [2011/vik](2011/vik/vik.c) ([README.md](2011/vik/README.md]))
+
+## [2012/kang](2012/kang/kang.c) ([README.md](2012/kang/README.md]))
+
+## [2012/tromp](2012/tromp/tromp.c) ([README.md](2012/tromp/README.md]))
+
+## [2012/vik](2012/vik/vik.c) ([README.md](2012/vik/README.md]))
+
+## [2013/birken](2013/birken/birken.c) ([README.md](2013/birken/README.md]))
+
+## [2013/cable3](2013/cable3/cable3.c) ([README.md](2013/cable3/README.md]))
+
+## [2014/maffiodo1](2014/maffiodo1/maffiodo1.c) ([README.md](2014/maffiodo1/README.md]))
+
+## [2014/vik](2014/vik/vik.c) ([README.md](2014/vik/README.md]))
+
+## [2015/endoh3](2015/endoh3/prog.c) ([README.md](2015/endoh3/README.md]))
+
+## [2015/yang](2015/yang/prog.c) ([README.md](2015/yang/README.md]))
+
+## [2018/poikola](2018/poikola/prog.c) ([README.md](2018/poikola/README.md]))
+
+## [2019/ciura](2019/ciura/prog.c) ([README.md](2019/ciura/README.md]))
+
+## [2019/diels-grabsch1](2019/diels-grabsch1/prog.c) ([README.md](2019/diels-grabsch1/README.md]))
+
+## [2019/diels-grabsch2](2019/diels-grabsch2/prog.c) ([README.md](2019/diels-grabsch2/README.md]))
+
+## [2019/karns](2019/karns/prog.c) ([README.md](2019/karns/README.md]))