Xmountains is a X11 based fractal landscape generator. It generates random
fractal surfaces and displays them in a window. While the program is running
the fractal is continuously extended on the right and the image is scrolled
from right to left to expose the newly generated area.

This is a very old piece of code but the algorithms
https://spbooth.github.io/xmountains/about_xmountains.html
are still quite interesting

This distribution contains an Imakefile. If your X-window software has been
correctly installed a Makefile appropriate to your system can be generated
from this using the command "xmkmf". Once this has been done the program is
compiled with the command "make".

== Commandline options ==

./xmountains: version 2.9
usage: ./xmountains -[bqgdPEmMrBZIASFTCapcevfRltxsXYH]
 -b       [false] use root window
 -q       [false] reset root window on exit
 -g string     window geometry
 -d string     display
 -P filename   write PID to file
 -E       [false] toggle explicit expose events
 -m       [false] print map
 -M       [false] disable reflections
 -r int   [20] # columns before scrolling
 -B int   [80] # shades in a colour band
 -n int   [245] # number of colours
 -Z int   [10] time to sleep before scrolling
 -I float [40.000000] vertical angle of light
 -A float [0.000000] horizontal angle of light
 -S float [0.600000] vertical stretch
 -T float [0.500000] vertical shift
 -W float [0.000000] sealevel
 -F int   [1] reduce variation in the foreground
 -G float [-1.000000] average foreground height
 -C float [0.300000] contour parameter
 -a float [2.500000] altitude of viewpoint
 -p float [4.000000] distance of viewpoint
 -c float [1.000000] contrast
 -e float [0.300000] ambient light level
 -v float [0.600000] vertical light level
Fractal options:
 -f float [0.650000] fractal dimension
 -R int   [0] rng seed, read clock if 0
 -l int   [10] # levels of recursion
 -t int   [2] # non fractal iterations
 -x       [true] cross update
 -s       [1] smoothing (0-7)
 -X float [0.000000] fraction of old value for rg2 & rg3
 -Y float [0.000000] fraction of old value for rg1
 -H            print short description of algorithm.

This program works best on a colour display. It will work on monochrome
displays but the default parameter values are not optimal for this.

The program breaks down into three sections
1) Fractal generation (calcalt.c random.c crinkle.h) This code should be fairly
   solid, It also contains some algorithmic tricks I had to invent (though it
   is not inconceivable that somebody else has also thought of them)
2) Image rendering & main program (artist.c global.c scroll.c global.h paint.h)
   This code is a bit more sloppy but seems to work OK.
3) The X interface (X_graphics.c) The X interface was retro-fitted to an earlier
   version of the program that was designed to use memory mapped video hardware.
   As a result this code is a little crude. A more experienced X hacker could
   do better but ...

== PROBLEMS ==
* All parameters are set on the command line.
* The choice of colours looks strange on some hardware.
* The program will not work with Xscreensaver or virtual window managers. This
  can be fixed by including vroot.h in X_graphics.c (define VROOT to cpp to do
  this) but I was a little wary of putting this in by default.

== Contact ==
If you have any comments/fixes etc for this program,
Email me at: S.Booth@epcc.ed.ac.uk or send pull request.

Copyright 1994 Stephen Booth, see copyright.h

