diff --git a/2000/tomx/README.md b/2000/tomx/README.md index c2dba0630..ae5b4ce8c 100644 --- a/2000/tomx/README.md +++ b/2000/tomx/README.md @@ -1,4 +1,4 @@ -Most Complete Program: +# Most Complete Program: Thomas P John Mishybi Plamoottil @@ -9,106 +9,109 @@ Most Complete Program: http://tomx.tripod.com/ -Judges' Comments: +## Judges' Comments: +### To use: - To build: + make tomx - make tomx +### Try: - Try: + rm -f ./tomx + sh tomx.c + ./tomx - rm -f ./tomx - sh tomx.c - ./tomx +If sh is your shell: - If sh is your shell: + rm -f ./tomx + chmod +x ./tomx.c + ./tomx.c + ./tomx - rm -f ./tomx - chmod +x ./tomx.c - ./tomx.c - ./tomx +### Also try: - Also try: - - rm -f ./tomx - make -f tomx.c - ./tomx - - Polyglots have come and gone, but this was the first one we'd seen - where one language *used* another to perform its tasks. An interesting - approach. Admittedly, it's not all that obfuscated - but there's more - to it than you might think, since you have to make sure that your - changes don't change the shell code or the makefile. + rm -f ./tomx + make -f tomx.c + ./tomx -Selected Author's Comments: +### Selected Judges Remarks - Summary - ------- - This program works as a C source file, a Makefile and also as a - Shell (/bin/sh) script. But unlike some other multi-language prog- - rams, this one is NOT meant to print "Hello, world" in all 3 cases - (At least in the true sense ;-)). The C, make and shell code build - upon each other to create a C program (?) which when executed as a - shell script will compile itself through the C compiler using a - makefile! - Pretty useful, Eh?. +Polyglots have come and gone, but this was the first one we'd seen +where one language *used* another to perform its tasks. An interesting +approach. Admittedly, it's not all that obfuscated - but there's more +to it than you might think, since you have to make sure that your +changes don't change the shell code or the makefile. - Probably, this is the first entry ever to fully satisfy Rule #1 - ("Your entry must be a complete program") in the strictest sense;-) - Top 5 reasons (IMHO) why this code is an entry for IOCCC - -------------------------------------------------------- - 1. A glance at the source itself will tell U that most of the - Obfuscation is NOT in the C code per se, but in the comments - to the C code. (But sadly, I could not find an "International - Obfuscated C COMMENT contest". So I HAD to sent this entry - here to the IOCCC itself). +### Selected Author's Comments: - 2. Of the 3 languages in the source, the least obfuscated is - C (But again, there was NO obfuscated make/shscript contest) - (Does this hint for a rule in IOCCC-2001 that the major - obfuscation should be in C and not elsewhere???. Mmmmm...) +### Summary - 3. Extending Argument #2... Obfuscation done in the C code - (comments?) create obfuscated code for the other 2 languages. - This opens new possibilities to be explored in depth in future - IOCCCs +This program works as a C source file, a Makefile and also as a +Shell (/bin/sh) script. But unlike some other multi-language prog- +rams, this one is NOT meant to print "Hello, world" in all 3 cases +(At least in the true sense ;-)). The C, make and shell code build +upon each other to create a C program (?) which when executed as a +shell script will compile itself through the C compiler using a +makefile! - Pretty useful, Eh?. - 4. LOOKS like a makefile, WORKS like a shell script and COMPILES - like a C program +Probably, this is the first entry ever to fully satisfy Rule #1 +("Your entry must be a complete program") in the strictest sense;-) - 5. Does something useful (See Notes #1, #2) +### Top 5 reasons (IMHO) why this code is an entry for IOCCC - Notes - ----- - 1. The program could have been something other than the simple - "Hello, world" program that it is. It is possible to do - #include "prog2.c" in the place of the main(), leaving the - complexities of the C file elsewhere and making this source - still acceptable to "make" and "sh". The following modif- - ication to the last few lines will compile IOCCCs famous - "mkentry.c" +1. A glance at the source itself will tell you that most of the + Obfuscation is NOT in the C code per se, but in the comments + to the C code. (But sadly, I could not find an "International + Obfuscated C COMMENT contest". So I HAD to send this entry + here to the IOCCC itself). - .PHONY: /* true clean */ - #undef true - #include "mkentry.c" +2. Of the 3 languages in the source, the least obfuscated is + C (But again, there was NO obfuscated make/shscript contest) + (Does this hint for a rule in IOCCC-2001 that the major + obfuscation should be in C and not elsewhere???. Mmmmm...). - Ain't that useful? +3. Extending Argument #2... Obfuscation done in the C code + (comments?) create obfuscated code for the other 2 languages. + This opens new possibilities to be explored in depth in future + IOCCCs. - 2. By extending this program's idea, It is possible to do some - very interesting things like generating C code on execution - by adding additional code in make/sh (open up a loop????). - This opens the possibilities of generating & compiling some - [obfuscated?] C code.(Maybe should try this if this program - fails at IOCCC 2000) +4. LOOKS like a Makefile, WORKS like a shell script and COMPILES + like a C program. - 3. Changing the "%:%.c" dependency to a "$(PROG):$(PROG).c" form - can compile this program with some other make-s (I got it to - work in Windows using nmake and Gnuwin32's sh ;-) +5. Does something useful (See Notes #1, #2). - 4. Interesting things to do: try "$ ./tomx.c clean". This will - do the same as "make clean" :-)). Also: "$ ./tomx.c all" - 5. Be careful about the Tabs in the source code. Removing them - or converting Tabs to spaces can be disasterous +### Notes + +1. The program could have been something other than the simple "Hello, world" +program that it is. It is possible to do `#include "prog2.c"` in the place of +the main(), leaving the complexities of the C file elsewhere and making this +source still acceptable to "make" and "sh". The following modification to the +last few lines will compile the IOCCC's famous `mkentry.c`. + + + .PHONY: /* true clean */ + #undef true + #include "mkentry.c" + + + Ain't that useful? + +2. By extending this program's idea, It is possible to do some +very interesting things like generating C code on execution +by adding additional code in make/sh (open up a loop????). +This opens the possibilities of generating & compiling some +[obfuscated?] C code. (Maybe should try this if this program +fails at IOCCC 2000) + +3. Changing the `%:%.c` dependency to a `$(PROG):$(PROG).c` form +can compile this program with some other `make`s (I got it to +work in Windows using nmake and Gnuwin32's sh ;-) + +4. Interesting things to do: try `./tomx.c clean`. This will +do the same as `make clean` :-)). Also: `./tomx.c all` + +5. Be careful about the Tabs in the source code. Removing them +or converting Tabs to spaces can be disastrous.