Files

113 lines
3.0 KiB
Markdown

## To build:
``` <!---sh-->
make chaos
```
**NOTE**: Some systems do not implement `halfdelay()` in their `libcurses`.
You might try compiling with `-lncurses` if you have that library.
Or you can build this entry without the `halfdelay()` call by:
``` <!---sh-->
make chaos_nohalf
```
### Bugs and (Mis)features:
The current status of this entry is:
> **STATUS: INABIAF - please DO NOT fix**
For more detailed information see [1998/chaos in bugs.html](../../bugs.html#1998_chaos).
## To use:
``` <!---sh-->
./chaos
```
## Try:
``` <!---sh-->
./try.sh
```
This script will run the program on each data file. To quit the program hit `q`.
If not all files have been used it will go to the next one; otherwise the script
will be finished. To end the script early send intr/ctrl-c.
The script will give you instructions on how to use the program and things to
try each time it is run, as a helpful reminder.
## 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 out why, in some cases, it wants to read itself?
## Author's remarks:
### 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 `malloc(3)`ed 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.
<!--
Copyright © 1984-2024 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/
-->