Merge pull request #1858 from xexyl/fubar89
This commit is contained in:
6 files changed
+49
-9
No files matched your search
+2
-1
@@ -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
|
||||
#
|
||||
|
||||
@@ -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
@@ -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
@@ -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
|
||||
Executable
+30
@@ -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
@@ -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]))
|
||||
|
||||
Reference in new issue
Block a user