Obfuscated C

Well this year i decided to enter the International Obfuscated C Code Contest. This was my first attempt at writing obfuscated C (at least purposely), so I am sure that this is kids-stuff for the real obfuscation gurus. Anyway, the results are out, and I am not a finalist (I wasn't expecting to be), so I figured I would share my code with you all, just for fun. If anyone else made an entry this year, please share them!

Here are the remarks included with my entry:

This program grew out of a non-obfuscated utility that I threw
together a while ago. I use it as a reference from time to
time since different architectures produce different results (at
least, the output is different on my HP-UX box than it is on my
Intel box). It simply outputs a nicely formatted ascii character
table. It is run with no arguments and produces its report on
the standard out. I achieved obfuscation by using a couple of
levels of recursion, plus some confusingly named variables and
functions. I also included some additional code which does
absolutley nothing just to confuse things a little more.

I strived for "-Wall" cleanness.  As a result I had to give up
a couple minor obfuscations, but I think it is still sufficiently
convoluted.  This is my first attempt at obfuscated C -- it was
written over the course of several weeks as a diversion.  By
the end it became very difficult to improve as I could no longer
understand how it worked without a serious amount of thought!

The code is neatly arranged in the form of my initials.  :\)
#  include  <stdio.h>
#          define d (
#          define I1 1<<
#          define b )
#          define Il(l) \
           return(l)
#          define lI \
I*((I1 3)-1)+(I*(I1\
1))-(I-\
(I1 4))
#define \
_l(l)  \
ll_l(l)
#define \
ll(l) l
#define \
l1 main(

long i,l,ll(I)=d(I1 5)-(I1 1)b;int _l(l)
{putchar d ll(l)b;Il(l);}int II(l,L){_l(
(l/L)+48);l-=((l/L)*L);d L/=10 b?II(l,L)
          :0;Il(l);}int l1 
          b{*d d l b?&I:&l
          b=I;if d l>(I1 8
          b b Il(I1 0);_l(
          32);_l(I1 5);II(
          l,25<<2);_l(58);
          _l(I1 5);_l(ll(l
          ));l%(I1 2)?0:_l
          ((I1 3)+(ll(I1 1)
          )b;l++;Il(l1 l));
}

Hey, I like that!
I've moved it to $HOME/bin since it is a lot better than "man ascii"...
Here's one of my favorites:

 main() { printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}

It was written by David Korn, and won Best One-Liner in 1987.
Another one I think is awesome is thadgavin.c, a winner in 2000 (source too long to post here).

Also, a stongly suggested entry to look at in jarijyrki.c in 2000. I've actually used that program before for work purposes!

Lookin' good PxT!

That one liner is not working.
What include files should I have in the code ?

thank you,
sharath chandra

Dr. Korn's one liner seems to have been written in the days of K&R C. LivinFree uses HP-UX. HP-UX includes a old K&R C compiler for free as part of the OS. I am sure that he is using this compiler to compile the one liner.

The old C preprocessor seems to set the symbol "unix" to be "1" for some odd reason. And I guess that ansi cleaned up the name space. I never noticed this before and now I wonder what old C compilers did on, say, an old IBM pc. Set unix to 0? Or leave unix undefined and set ms-dos to 1?

In any event, I got the one liner to work with ansi C by adding a line "#define unix 1".

I also got it compiled on a Linux machine with gcc.
I checked the Makefile, and I didn't see any extra options either that may be needed on some systems. I also checked the hint file again to see if some compilers didn't like it... The commands I used were:
$ gcc -o korn korn.c
$ ./korn
unix

What system are you using to compile? What compiler?

Hi,
It was nice and could't trace how it is printing.

Awesome..................

thank you,
K.S.SHARATH CHANDRA