Merge pull request #1858 from xexyl/fubar89

This commit is contained in:
Landon Curt Noll authored and GitHub committed 2024-01-11 11:14:23 -08:00
commit 03774e19ce
6 files changed
+49 -9

No files matched your search

+2 -1
View File
@@ -38,7 +38,8 @@ include ../../var.mk
# Common C compiler warnings to silence
#
CSILENCE= -Wno-implicit-function-declaration -Wno-incompatible-library-redeclaration
CSILENCE= -Wno-implicit-function-declaration -Wno-incompatible-library-redeclaration -Wno-implicit-int \
-Wno-deprecated-non-prototype
# Common C compiler warning flags
#
+5 -2
View File
@@ -26,14 +26,17 @@ For more detailed information see [1989 fubar in bugs.md](/bugs.md#1989-fubar).
### Try:
```sh
./fubar 2
./try.sh # run on 1 - 7
./fubar.sh 2 # run via script
./fubar 2 # run directly
```
## Judges' remarks:
Run this with a single digit argument (or wait a long time and risk an infinite
loop as described above).
loop as described in the [bugs.md](/bugs.md#1989-fubar) file).
The blank line at the beginning of the source is mandatory.
Do you know why?
+2 -2
View File
@@ -3,14 +3,14 @@
#include <stdlib.h>
#define QQ 1
#define TT 1
#define cc int main(c,v) int c; char **v;{char tt[12],qq[7]; int q=0,o=1,l=1,m=1;struct {int c;} f;
#define cc main(c,v) int c; char **v;{char tt[12],qq[7]; int q=0,o=1,l=1,m=1;struct {int c;} f;
#define ouroboros qq[6]='\0';tt[11]='\0';if(QQ==atoi(v[1])+1){(void)fprintf(stderr,"%s factorial = %d\n",v[1], TT);exit(1);}o=c+f
#define x ;while(EOF!=(o=getchar())){if(l && q=='Q' && o=='Q'){l=0;(void)getchar();(void)fread(qq,6,1,stdin);(void)printf("Q %6d",atoi(qq)+1);}else
if(m && q=='T' && o=='T'){m=0;(void)fread(tt,11,1,stdin);(void)printf("T %9d\n",atoi(tt)*QQ);}else {q=o;(void)putchar(o);}}exit(0);}
cc ouroboros.c -o x
#define zxc ;{/*
cat ./ouroboros.c | ./x $1 > x1
if [ $? -ne 0 ]; then
if [[ $? -ne 0 ]]; then
exit
fi
mv x1 ./ouroboros.c
+3 -3
View File
@@ -1,8 +1,8 @@
#!/usr/bin/env sh
#!/usr/bin/env bash
# to run fubar in the 'proper' way
# parse args
if [ $# -ne 1 ]; then
if [[ $# -ne 1 ]]; then
echo "usage: $0 number" 1>&2
exit 1
fi
@@ -15,5 +15,5 @@ r fubar.c
w ouroboros.c
EOF
chmod +x ouroboros.c
./ouroboros.c $1
./ouroboros.c "$1"
#rm -f ouroboros.c x1 x
+30
View File
@@ -0,0 +1,30 @@
#!/usr/bin/env bash
#
# try.sh - demonstrate IOCCC winner 1989/fubar
#
# make sure CC is set so that when we do make CC="$CC" it isn't empty. Doing it
# this way allows us to have the user specify a different compiler in an easy
# way.
if [[ -z "$CC" ]]; then
CC="cc"
fi
make CC="$CC" all >/dev/null || exit 1
# clear screen after compilation so that only the entry is shown
clear
fubar()
{
if [[ "$#" -ne 1 ]]; then
echo "$0: expected 1 arg, got: $#" 1>&2
else
read -r -n 1 -p "Press any key to run: ./fubar.sh $1: "
echo 1>&2
./fubar.sh "$1"
fi
}
for i in $(seq 1 7); do fubar "$i" ; done
+7 -1
View File
@@ -755,7 +755,13 @@ 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.
`$PATH`) to files referred to in the code. The path problem was also fixed in
[fubar.sh](/1989/fubar/fubar.sh).
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.
## <a name="1989_jar.1"></a>[1989/jar.1](/1989/jar.1/jar.1.c) ([README.md](/1989/jar.1/README.md]))