Fix 1984/decot to not require -traditional-cpp

This was fun to fix. What prompted me to do so is that I noticed that
the patch from Yusuke Endoh actually doesn't work in fedora linux. It never
worked with clang as it required -traditional-cpp and also had
non-standard second and third args type to main (not a char ** but
implicit int). No more. This entry now works with both linux and macOS!

I was able to remove all the macros as they were problematic and not
needed. The code that used them was updated to be what was necessary.

Add to Makefile inclusion of stdio.h and math.h (printf, floor).
Some systems require -lm so that was also added to the Makefile.

Very little else was required to make it work.

The decot.alt.c is the version patched by Yusuke but fixed by me to
compile with fedora's gcc.

Removed this entry from bugs.md.
This commit is contained in:
Cody Boone Ferguson committed 2023-04-04 06:11:38 -07:00
1 parent 7832ef5e46
commit 606e01cb78
5 files changed
+97 -56

No files matched your search

+4 -9
View File
@@ -63,7 +63,7 @@ CDEFINE=
# Include files that are needed to compile
#
CINCLUDE=
CINCLUDE= -include stdio.h -include math.h
# Optimization
#
@@ -75,7 +75,7 @@ CFLAGS= ${CSTD} ${CWARN} ${ARCH} ${CDEFINE} ${CINCLUDE} ${OPT}
# Libraries needed to build
#
LIBS=
LIBS= -lm
# C compiler to use
#
@@ -114,12 +114,8 @@ OBJ= ${PROG}.o
DATA=
TARGET= ${PROG}
#
ALT_OBJ=
ALT_TARGET=
# FORCE use of -traditional-cpp
#
CFLAGS+= -traditional-cpp
ALT_OBJ= ${PROG}.alt.o
ALT_TARGET= ${PROG}.alt
#################
@@ -134,7 +130,6 @@ all: data ${TARGET}
supernova deep_magic magic charon pluto
${PROG}: ${PROG}.c
@echo "NOTE: this entry requires a compiler that supports -traditional-cpp."
${CC} ${CFLAGS} $< -o $@ ${LIBS}
# alternative executable
+47 -17
View File
@@ -6,33 +6,63 @@ Dave Decot
make all
[Yusuke Endoh](/winners.html#Yusuke_Endoh) supplied a patch so that this
entry would compile with gcc. Thank you Yusuke!
NOTE: this entry requires a compiler that supports `-traditional-cpp`. Note that
clang does not support it and in macOS gcc is actually clang so this will not
compile with the default compiler in macOS.
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! [Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson)
noticed this did not work under fedora linux and it definitely didn't work with
macOS as it requires a compiler that supports `-traditional-cpp` which clang
does not. Clang also requires that the second and third arguments to main be a
`char **`. Cody fixed both problems and now it works under both macOS and linux
- clang and gcc. Thank you Cody for your assistance!
## To run:
./decot
```sh
./decot
```
### Alternative code:
The alternative code, [decot.alt.c](decot.alt.c), is the fix that Cody made to
the version that does require `-traditional-cpp` and still runs afoul with
clang's requirement for the second and third arguments to main() being a `char
**` (the fixed version's main() only has one arg, an int). It is a minor fix to
Yusuke's fix. Thank you Yusuke and Cody!
To try this version:
```sh
make alt
./decot.alt
```
## Judges' comments:
Some new (in 1984) compilers disliked line 15 of the source, so we changed it
from:
for(signal=0;*k * x * __FILE__ *i;) do {
to:
for(signal=0;*k *x * __FILE__ *i;) do {
This program prints out a string of garbage.
The judges also offer this one comment: understand comments!
### Historical comments:
Some new (in 1984) compilers disliked line 15 of the original source, so we changed it
from:
```c
for(signal=0;*k * x * __FILE__ *i;) do {
```
to:
```c
for(signal=0;*k *x * __FILE__ *i;) do {
```
To see what we mean look at the source file in the
[archive/archive-1984.tar.bz2](/archive-1984.tar.bz2) tarball or
[decot.alt.c](decot.alt.c).
## Author's comments:
No comments were provided by the author.
+33
View File
@@ -0,0 +1,33 @@
int printf(const char *format, ...);
double floor(double x);
#define x =
#define double(a,b) int
#define char k['a']
#define union static struct
double (x1, y1) b,
char x {sizeof(
double(%s,%D)(*)())
,};
struct tag{int x0,*xO;}
*main(i, dup, signal) {
{
for(signal=0;*k *x * __FILE__ *i;) do {
(printf(&*"'\",x); /*\n\\", (*((double(tag,u)(*)())&floor))(i)));
goto _0;
_O: while (!(char <<x - dup)) { /*/*\*/
union tag u x{4};
}
}
while(b x 3, i); {
char x b,i;
_0:if(b&&(int)k+
sin(signal) / * ((main) (b)-> xO));/*}
;
}
*/}}}
+13 -17
View File
@@ -1,30 +1,26 @@
#define x =
#define double(a,b) int
#define char k['a']
#define union static struct
double (x1, y1) b,
char x {sizeof(
double(%s,%D)(*)())
int b,
k['a'] = {sizeof(
int(*)())
,};
struct tag{int x0,*xO;}
struct tag{int x0,*xO;};
*main(i, dup, signal) {
int dup, signal;
*main(int i) {
{
for(signal=0;*k *x * __FILE__ *i;) do {
(printf(&*"'\",x); /*\n\\", (*((double(tag,u)(*)())&floor))(i)));
for(signal=0;*k *= * __FILE__ *i;) do {
(printf(&*"'\",x); /*\n\\", (*((int(*)())&floor))(i)));
goto _0;
_O: while (!(char <<x - dup)) { /*/*\*/
union tag u x{4};
_O: while (!(k['a'] <<= - dup)) { /*/*\*/
static struct tag u = {4};
}
}
while(b x 3, i); {
char x b,i;
while(b = 3, i); {
k['a'] = b,i;
_0:if(b&&(int)k+
sin(signal) / * ((main) (b)-> xO));/*}
sin(signal) / * ((main) (((struct tag *)b)-> xO)));/*}
;
}
-13
View File
@@ -245,19 +245,6 @@ this in the [README.md](1984/anonymous/README.md) file. Can you fix this? We
welcome your help!
## [1984/decot](1984/decot/decot.c) ([README.md](1984/decot/README.md))
## STATUS: requires a compiler supporting `-traditional-cpp` - alternate code requested
This entry needs a compiler that support `-traditional-cpp`. `gcc`
supports this but `clang` does not. Please be advised that `gcc` under macOS is
actually gcc if it looks like it's gcc (two different binaries).
If you do wish to provide an alternate version of the program that does not need
compiler supporting `-traditional-cpp` you are welcome to submit such code via a [GitHub pull request](https://github.com/ioccc-src/temp-test-ioccc/pulls) and we will be happy to credit you in the entry's _README.md_ file.
# 1984
# 1985