Change level 3 (###) to level 2 (##):
sgit -e 's/^### \(Alternate code\)/## \1/g' '*README.md'
which is the same as:
sgit -e 's/^### Alternate code/## Alternate code/g' '*README.md'
This is per discussion in GitHub.
As in:
sgit -e 's/# To run/# To use/g' '*README.md'
This makes consistent the message for how to use the program. 'How to
use' was chosen because one can run a program just by doing './foo' but
that doesn't imply that's how to use it but the purpose of the section
is how to use it.
We now have 6 diff rules:
diff_orig_prog
diff_prog_orig
diff_alt_prog
diff_prog_alt
diff_orig_alt
diff_alt_orig
The FAQ for these diffs needs to be updated
as we have 6 types of diffs now.
The use of the markdown trailing whitespace to indicate
line break should NOT be done when the following line is empty.
This removes such improper use of whitespace in README.md files.
There was a comment in the form of:
... the liked/allowed ...
which should instead be:
... liked/allowed ...
and this was fixed with my sgit tool like:
sgit -e 's,the \(liked/allowed or compile\),\1,g' '*Makefile'
With the make indent rule there was a typo for indent as 'intent'. This
was fixed with my sgit tool like:
sgit -e 's/no intent\( tool found\)/no indent\1/g' '*Makefile'
To make this slightly more portable still I have removed the hard-coding
of gcc to make it just be cc. In modern systems this should be fine.
This involved updating the magic numbers by subtracting one from each,
making them (in the primary version 43 and 45 and 94 and 96 in the
alternate code for macOS) but since one of the purposes of the fixes of
code include making them work in more systems I have made it use cc as
it should work (gcc is most likely in all systems anyway but it seemed
like a better idea for 2023).
I previously noted in the thanks-for-fixes.md that the mode in fopen()
could remain 44+__FILE__ (though as noted above it's now 43) but that I
had changed it to "r". This was a mistake and it is now restored though
again it is now 43 not 44.
The FILE * which was renamed to G has been changed back to H. Observe
how there is a macro with the same name. There was actually no need to
change it.
I have restored some of the control codes in the C preprocessor
directives. Unfortunately that is only prior to the #define because some
systems will give an annoying warning otherwise. For instance fedora
linux shows:
schweikh1.c:6:8: warning: form feed in preprocessing directive
6 | #define
x
)
==
0
?__LINE__:0){O
=__LINE__;break;}
}
|
and possibly vertical tab too.
So although it would be ideal to have them closer to the original I deem
that preventing warnings that cannot be, for whatever reason, disabled.
The thanks-for-fixes.md was updated for these changes and now includes
more details on the fixes to match the rest of the other entries (though
some might also be lacking in details).
There were a number of problems in the README.md that were fixed. A big
one was in usage where it said you could run the program and then input
a number. Although one could certainly go through that action it would
have no effect. Not entering a number at the command line does something
different (in a way different) from specifying a number.
Also the historical notes were updated to be more consistent and
hopefully clearer than before.
Since the author called the program yarng (see README.md for why this
is) the Makefile now creates a symlink to it, rather than forcing users
to go back and forth as the author gives example uses as well. The to
use and try sections now also use yarng. Running make clobber (from make
clean) will remove the symlink.
The .gitignore file was updated: added yarng.
The thanks-for-fixes.md file was updated slightly for the above changes,
particularly the historical remarks, linking indeed to the historical
remarks in the README.md file.
By some chance the original code that was restored as schweikh2.orig.c
was not the original. This has been fixed by copying it from the
archive. The file that is being updated is almost like my fix (which
solves a gcc internal compiler error).
This is not only to help with formatting - especially important in
markdown files - but it's no longer really necessary to do it. One
might not feel the need to do it in non-markdown files but I did it
anyway to be consistent. Thus instead of showing Un*x/UN*X it shows
Unix/UNIX.
A question of whether or not it should all be the same case is another
thing entirely but if this is desired at some point it should be easy to
do anyway - with some care in case it's in formatted text.
A note about the glob: why '.' when there are C files and other file
types where it could be dangerous to modify? Because I did a git grep
first so I knew that it was safe.
I also updated the todo.md file as I left some things out that have to
be done. I only explicitly named one thing but when I go over them as a
final pass I will address the things in question (some will require
discussion).
This is a HUGE commit:
417 files changed, 874 insertions(+), 874 deletions(-)
As the IOCCC website now is https enabled I have updated the
'http://www.ioccc' to 'https://www.ioccc'.
There was also a typo in Makefiles where it said 'for VERY WELCOME' when
it should be 'are VERY WELCOME'.
Finally slashdot.org is also https enabled so references to
'http://slashdot' were changed to 'https://slashdot'.
This was done by my sgit tool (see https://github.com/xexyl/sgit)
like:
sgit -e 's,http://www.ioccc,https://www.ioccc,g' -e 's/for VERY WELCOME/are VERY WELCOME/g' -e .
but because I didn't have a list of files that should be modified I had
to be careful which files to commit as I had files that were changed but
not ready to be committed. Since I did it in steps, finding typos as I
went along, I actually ran sgit three times but to simplify the above
(and to show that it's possible to do more than one sed command) I made
it all as one. Since I did not have a list of files ahead of time I had
to determine what files to commit, first going through them like:
for j in $(for i in $(git status|grep modified|cut -d: -f2); do \
git grep 'https://www.ioccc' "$i"; done|cut -d: -f1|sort|uniq); \
do git diff "$j"; done|less -r
(I had to pipe through less because of a strange problem with the git
diff which appears to be because of a terminal problem maybe due to the
command above but it was all I could come up with in a very tired head.)
The above and
git status | grep modified:
showed that some C files had been modified which obviously should not be
done so I had to do:
git co '*c'
to undo those changes.
Finally to commit the correct files I did:
for i in $(git status|grep modified|cut -d: -f2); do \
git grep -E 'https://www.ioccc|https://slashdot|are VERY WELCOME' "$i"; \
done |cut -d: -f1|sort|uniq|xargs git commit -v
or so (with any formatting issues or typos here due to typos in the log
due to the terminal (in)sanity issue described).
There was 'I' in the README.md that was an artefact left over from
before the thanks file was introduced so that sentence was removed.
The thanks file was slightly updated too wrt this entry both as a new
category of fixes (the alternate code I made so that it works with macOS
but also referring to the README.md file).
This is to make it more standard which further allows one to run make on
some other source code, say because they want to try and fix an entry
but forget to update the Makefile. Or if they're the author they can not
worry about it in some cases. But since LDFLAGS is the standard way it
seems better to have the LIBS variable in the Makefile be LDFLAGS.
Maybe there is a reason to not have this and I'm happy to close this in
that case but it does seem better this way so I'm doing this commit.
As besides the entries that are not supposed to compile/cannot compile
due to architectural limitations all the entries can compile in macOS
(though some do not work - yet(? I have plans to work on more later)) it
was not necessary to not silence the warnings after all as the entries
that don't work will be easy to identify ('they don't work' :-) ) so I
can just do make CSILENCE= all in the directory of those entries which
solves the problem I had originally thought of.
Some of the Makefiles have retained other changes I had to make
yesterday to get the entries to work with clang in linux but most of
them were either not changed or were made better with the rollback of
the commit that originally silenced warnings.
Now work on silencing warnings for linux can be done.
Due to the fact we now have .orig.c files and thus the possibility of
winner.orig or prog.orig being built I have updated all the .gitignore
files so that these files ignored. This was done with the following
shell commands, for reference:
for i in $(find 19* 200* 201[0123] -mindepth 2 -maxdepth 2 -name .gitignore) ; do echo $(dirname "$i"|sed -e 's,[0-9]\{4\}/,,g').orig >> "$i"; done
for i in $(find 201[4-9] 2020 -mindepth 2 -maxdepth 2 -name .gitignore) ; do echo prog.orig >> "$i"; done
and the two commands is because it was only in 2014 that the winning
entries were renamed to prog so prog.orig is the correct glob.
Originally dorssel.hint was the hint file but then that was renamed to README.md
and the file the provided additional hint file was renamed to dorssel.md
but the README.md did not refer to dorssel.md but rather dorssel.hint.
Used the following script to check for warnings
not silenced via ${CSILENCE}:
```sh
find ???? -mindepth 1 -maxdepth 1 -type d | while read dir; do
(cd "$dir"; echo =-=-= "$dir" =-=-= ; csilence -v 1 clobber all ; echo ; csilence -v 1 clobber alt)
done 2>&1 | less
```
(Note that it used to be that some compilers had a problem with the
original source but now some compilers have a problem with the C
pre-processed code and in particular with the #line macro and this
commit addresses this problem.)
A funny problem occurred when compiling with gcc: an internal compiler
error:
:10:16: warning: type defaults to 'int' in declaration of 'zero' [-Wimplicit-int]
: In function 'main':
:12:1: warning: missing terminating " character
:12:19: internal compiler error: invalid built-in macro "__FILE__"
It now works with clang and gcc just as well. The alt source file was
removed as there is no need for it now. The fix was quite simple. The
string '"01\015"' had to be replaced with 'ONE(O(1,1,2,6,0,6))' and this
was actually what was in the original code in the archive and in the alt
code (which was removed as there is no need for it now though it
differed slightly from what is in the archive).
The trigraph was restored as the Makefile already had the -trigraphs
option forced in CFLAGS.
Note that the README.md file has had the judges' remarks changed in such
a way that there is a historical note as at the time of judging it was
the original code that had a problem with some compilers whereas now
some compilers have a problem with the modified code (or C pre-processed
code). These details are put in a new subsection 'Historical remarks'.
The C pre-processing stages of the build failed in Linux so instead of
having those steps fanf.c became what was the code that was compiled.
Now it works with both macOS and Linux. This fix required changes to
fanf.c and also the Makefile.
I also removed the address from the README.md file as well.
At least one entry was missing (1984/anonymous).
Some entries were removed. One such entry was not ever broken but
instead when I had renamed a file (to markdown) I forgot to update the
DATA variable in the Makefile which then broke compilation. This was
seen in the log and mistakenly believed that there was something wrong
with the entry when there wasn't. Other entries removed were not fixes
but notes.
Various README.md files have been updated for this sometimes just
formatting merely because I opened the file because for instance there
is an alternate version (many by me) that is referred to. I'd not be
surprised if more README.md files have to be updated for this much
better system but these will be found in time when I do another pass
(and some years I have not checked at all yet).
The fix thank you's have been moved from `README.md` to
`thanks-for-fixes.md`.
**WARNING**: Some mistakes may have been made in doing this.
We presume later changes by others will correct any issues.
The `CONTRIBUTING.md` was renamed `how-to-enter.md`.
A 3rd line of links was added to top level html such as
`contact.html`, `index.html`, `judges.html`, `winners.html`,
and `years.html`.
Improved blank line use in a number (but not all) `README.md` files.
The is a file excluded from this commit that has had the change because
there are other changes but the file is incomplete. That file will be
committed when the fixes are complete which will happen at a later date.
I know that in bugs.md there is a missing URL for him or at least about
one of the entries but I'll have to look at that later. It might be that
it should stay there as it was a website for the entry itself and it
would be nice to have it back but for now this is unaddressed.
This to make the country code consistent with mkiocccentry (and I guess
international standard country codes).
This affects many README.md files and (for one line) winners.csv.
Also USA -> US. This to make country codes more consistent with
mkiocccentry. This will be done on a wider scale (all README.md files
and the winners.csv file) soon.
The bugs.md file has been updated in this pull request because the
previous one is also about 'poot' and one of the authors of this entry
is the same. The typo has to do with the path to the C file.
I also added this entry (missing URL) to bugs.md - but referring to the
1998/dlowe entry as it's the same information.
Unfortunately the domain no longer exists as it once did (if it exists
it no longer has the script set up). Added this to bugs.md and noted
that there is a script (not checked for any security problems modernly)
if they have the bandwidth and wish to set it up.
Updated .gitignore as I added a try section.
Moved the dlowe.alt related text to new 'Alternate code' section.
His website is of course no longer at the university he went to.
I also linked (via the Internet Wayback Machine which was found in the
archive of his old website) an article about the flight simulator that
he linked. It seemed appropriate especially as this won 'Best of Show'.
The URL was fixed in winners.csv and winners.html; his email was updated
in winners.csv as well (didn't see it in winners.html).
As Landon had me reapply the fixes I had originally made the note about
invalid input very likely causing a crash (though I incorrectly put it
as it will crash absolutely) in the Makefile is no longer valid.