Prepare for the winners of **IOCCC28**. > However these are not the 2024 droids you are looking for. :-) The HTML menu (both JavaScript and non-JavaScript) has been updated. The `Status -> Rules and guidelines' have been replaced with two separate menus `Status -> IOCCC rules` and `Status -> IOCCC guidelines`. Added a new top level `social.html` page: built from a new `social.md`. Sorted rules for building specific web pages in the top level `Makefile`. Added `make social` to make the `social.html` page from `social.md`. The `bin/gen-top-html.sh` now is able to process a argument of **social** to process the new top level `social.html` page. Changed `bin/gen-top-html.sh` VERSION from "2.0.0 2025-03-13" to "2.0.1 2025-07-25". Below `About -> Home page` a new `About -> IOCCC social media` menu item as added. Because the menu change touched every HTML file, we changed the general copyright date range for HTML files from "1984-2024" to "1984-2025" due to the extensive changes made for **IOCCC28**. Those markdown files that were modified in 2025 had their copyright date range also changed from "1984-2024" to "1984-2025". Rebuilt tarballs and sitemap due to the extensive HTML rebuilding. Ran `make update` to perform the above.
To build:
We recommend you try the alternate version first so you can get a better idea of what this entry was like back in 1993 (though see the known bug in bugs.html). See the original code section below to run the original (the bug also exists here).
make alt
NOTE: this entry requires the X11/Xlib.h header file and the X11 library to
compile. For more information see the
FAQ on "X11".
To configure how many microseconds to sleep before updates try:
make clobber SLEEP=200 alt
Bugs and (Mis)features:
The current status of this entry is:
STATUS: known bug - please help us fix
For more detailed information see 1993/cmills in bugs.html.
To use:
DISPLAY="your_X_server_display"
export DISPLAY
./cmills.alt [speed] # must be run on an X11 server
where:
speed is update speed from 1 to 9 (default is 9).
NOTE: in most cases DISPLAY should already be set.
Original code:
We recommend the version that uses usleep(3) to more easily see what is going
on but you can use the original without any delays if you wish.
Original build:
make all
Original use:
Use cmills as you would cmills.alt above.
Judges' remarks:
From the San Jose Mercury News (May 15, 1993 page 20A "West Hackers trounce East in computer quiz game"):
"Since 1984, a contest has been held on Usenet for the most unreadable, creative, bizarre but working C program", Gates said. "What is the name of this contest?"
"Windows," shot back Gassee, naming Microsoft's premier product - a product over which Apple sued Microsoft five years ago. Not the right answer - it's "The Obfuscated C Contest [sic]" - but it brought down the house of Apple partisans...
[The expression on Bill Gates' face was a sight to behold, as reported to us by several who were there].
You must set $DISPLAY in your environment or the program will
dump core. This is not a bug as the author documented it as
a feature. :-)
The optional argument is integer which controls the speed of the program. By default the speed is 9. You may want to try 1.
You will have to kill the program (i.e., ^C) to stop it.
WARNING: Slow servers or servers with long request queues will continue to 'run' for a while after you have killed the program.
This program makes your windows about as useful as their windows. :-)
Author's remarks:
The program uses a single backing pixmap (which is the size of the screen) for all of its subwindows (with a little bit of trickery to move the offset around). This is much better (and faster) than the obvious implementation which would require a full-screen pixmap and a separate backing pixmap for each subwindow.
The chance that a window breaks is based on it's kinetic energy, which in turn is based on it's area and speed. How silly!