Files
ioccc/1998/chaos/README.md
T
Cody Boone Ferguson e09f677b37 Mass typo fix (all README.md and Makefiles)
As in

    sgit -e 's/the terms this license/the terms of this license/g' '*/Makefile' '*/README.md'
2023-04-02 09:27:13 -07:00

2.7 KiB

Best Object Orientation:

Alan De Smet
8531 Greenway Blvd. #206
Middleton, WI 53562
USA

http://www.upl.cs.wisc.edu/~chaos/

To build:

make chaos

NOTE: Some systems do not implement halfdelay() in their libcurses. You might try compiling with -lncurses of you have that library. Or you can build this entry without the halfdelay() call by:

make chaos_nohalf

Cody Boone Ferguson added a call to endwin() to restore terminal sanity (echo etc.) when exiting the program. Thank you Cody for your assistance!

To run:

./chaos

Judge's Comments:

This is the author's first IOCCC entry. We thought the entry was a nice example of a compact collection of obfuscations.

Can you figure our why, in some cases, it wants to read itself?

Selected Author's Comments:

Usage

The executable takes a single argument for the data file to use. If no argument is given, it will find a data file by itself, don't worry about it...

Summary

This is a simple ncurses 3D object viewer. The keys 'y', 'u', 'i', 'h', 'j', and 'k' rotate. 'a' and 'z' zoom in and out. 'q' quits. Given about 3 seconds of no input, it will start rotating until interrupted by user input.

Features (aka Bugs):

Memory malloced is never freed. This shouldn't be a big deal, since only one block is ever allocated, and the OS should recover it.

My local flavor of lint doesn't seem to like the fact that I never "return" from main. Feh, what does it know? Otherwise, ignoring lint's over protectiveness ("Of course I'm not using all of the functions defined in curses.h!"), it's lint clean.

If the compiler happens to generate the byte sequence "AlWuzEre" in the executable by chance, the program may be unable to locate the embedded string. As a result, running the program without an external data file may act in undefined ways.

If the compiler doesn't store char * P's data in a nice contiguous stream, it would be bad. As above, it would break running the program without an external data file.

If the incoming data is corrupt, the results are undefined. (Although dumping core is a popular result.)

When a point passes behind the camera, it is still plotted. The object will "bounce" off the camera, but the result (some points in front, some reflected from the rear) looks really odd. And it sometimes hangs. So just don't fly through objects. You'll be happier.

This file is Copyright (c) 2023 by Landon Curt Noll. All Rights Reserved. You are free to share and adapt this file under the terms of this license:

Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)

For more information, see: https://creativecommons.org/licenses/by-sa/4.0/