-! xdaliclock -root -builtin2 \n\
-! xswarm -r 2>&- \n\
-! xwave -root \n\
-! xbouncebits ... \n\
-! ico -r -faces -sleep 1 -obj ico \n\
-! xsplinefun \n\
-! kaleid -root \n\
-! color: xfishtank -c black -d -r 2 \n\
-!
-! xtacy is ok, but it only works on the default visual. We can satisfy
-! that constraint like so:
-!
-! default: xtacy -root -delay 100 -funky -number 3 \n\
-! default: xtacy -root -delay 100 -gravity \n\
-! default: xtacy -root -delay 100 -mixer \n\
-! default: xtacy -root -delay 100 -taffy -pal 4 \n\
-!
-! To display a slideshow of images, you can do something like this:
-!
-! default: xv -root -rmode 5 image-1.gif -quit
-! default: xv -root -rmode 5 image-2.gif -quit
-! default: xv -root -rmode 5 image-3.gif -quit
-! ...and so on...
-!
-! however, for this to work, you must also have started the screensaver so
-! that it uses the default colormap (the "-no-install" command-line option, or
-! the "installColormap: False" resource) because when XV is running in "-root"
-! mode, it always assumes that the default colormap is being used, rather than
-! examining the window it is drawing on to see what colormap it has. (It
-! also assumes the default visual, but we've taken care of that above.)
-!
-! Some SGI GL programs work with XScreenSaver; most don't.
-!
-! Bongo works fine:
-!
-! /usr/demos/bin/bongo -wbongo
-!
-! ElectroPaint sort-of works; XScreenSaver will launch it, and it will run
-! properly, but when it's time to turn off the screensaver, you need to hit
-! the Escape key, rather than just moving the mouse. Apparently GL programs
-! are able to intercept the keyboard even when X has the keyboard grabbed!
-!
-! /usr/demos/bin/ep
-!
-! None of the other SGI GL demos I've tried worked, because none of them seem
-! to have command-line options that will make them take up the whole screen;
-! so all you get is a miniscule 100x100 image, which is worthless. This is a
-! shame, since many of those demos would make fine screensavers.
-!
-! If anyone who understands how "haven" works would like to send me the code
-! necessary to do what it does, I would be much obliged.
+*programs: \
+ "Qix (solid)" qix -root -solid -segments 100 \n\
+ "Qix (transparent)" qix -root -count 4 -solid -transparent \n\
+ "Qix (linear)" qix -root -count 5 -solid -transparent \
+ -linear -segments 250 -size 100 \n\
+- "Qix (xor)" qix -root -linear -count 5 -size 200 \
+ -spread 30 -segments 75 -solid -xor \n\
+ \
+ "Attraction (balls)" attraction -root -mode balls \n\
+ "Attraction (lines)" attraction -root -mode lines -points 3 \
+ -segments 200 \n\
+- "Attraction (poly)" attraction -root -mode polygons \n\
+ "Attraction (splines)" attraction -root -mode splines -segments \
+ 300 \n\
+ "Attraction (orbital)" attraction -root -mode lines -radius 300 \
+ -orbit -vmult 0.5 \n\
+ \
+ pyro -root \n\
+ rocks -root \n\
+ helix -root \n\
+ pedal -root \n\
+ rorschach -root -offset 7 \n\
+ hopalong -root \n\
+ greynetic -root \n\
+ imsmap -root \n\
+ slidescreen -root \n\
+ decayscreen -root \n\
+ jigsaw -root \n\
+ blitspin -root -grab \n\
+ slip -root \n\
+ distort -root \n\
+ spotlight -root \n\
+ "Ripples (oily)" ripples -root -oily -light 2 \n\
+ "Ripples (stir)" ripples -root -oily -light 2 -stir \n\
+ "Ripples (desktop)" ripples -root -water -light 6 \n\
+ hypercube -root \n\
+- hyperball -root \n\
+ halo -root \n\
+ maze -root \n\
+ noseguy -root \n\
+ flame -root \n\
+- lmorph -root \n\
+ deco -root \n\
+ moire -root \n\
+ moire2 -root \n\
+ lightning -root \n\
+ strange -root \n\
+- spiral -root \n\
+ laser -root \n\
+ grav -root \n\
+ "Grav (trails)" grav -root -trail -decay \n\
+ drift -root \n\
+ ifs -root \n\
+ julia -root \n\
+ penrose -root \n\
+- sierpinski -root \n\
+ braid -root \n\
+ galaxy -root \n\
+ bouboule -root \n\
+ swirl -root \n\
+ flag -root \n\
+ sphere -root \n\
+ forest -root \n\
+- lisa -root \n\
+- lissie -root \n\
+ goop -root -max-velocity 0.5 -elasticity \
+ 0.9 \n\
+ starfish -root \n\
+ "Starfish (blob)" starfish -root -blob \n\
+ munch -root \n\
+ mismunch -root \n\
+ fadeplot -root \n\
+ coral -root -delay 0 \n\
+ mountain -root \n\
+ triangle -root -delay 1 \n\
+- worm -root \n\
+- rotor -root \n\
+- ant -root \n\
+- demon -root \n\
+- loop -root \n\
+- vines -root \n\
+ kaleidescope -root \n\
+ xjack -root \n\
+ xlyap -root -randomize \n\
+ cynosure -root \n\
+ flow -root \n\
+ epicycle -root \n\
+ interference -root \n\
+ truchet -root -randomize \n\
+ bsod -root \n\
+ crystal -root \n\
+ discrete -root \n\
+ kumppa -root \n\
+ rd-bomb -root \n\
+ "RD-Bomb (mobile)" rd-bomb -root -speed 1 -size 0.1 \n\
+ sonar -root \n\
+ t3d -root \n\
+ penetrate -root \n\
+ deluxe -root \n\
+ compass -root \n\
+ squiral -root \n\
+ xflame -root \n\
+ wander -root \n\
+ "Wander (spots)" wander -root -advance 0 -size 10 -circles \
+ -length 10000 -reset 100000 \n\
+- critical -root \n\
+ phosphor -root \n\
+ xmatrix -root \n\
+ petri -root -size 2 -count 20 \n\
+ "Petri 2" petri -root -minlifespeed 0.02 \
+ -maxlifespeed 0.03 -minlifespan 1 \
+ -maxlifespan 1 -instantdeathchan 0 \
+ -minorchan 0 -anychan 0.3 \n\
+ shadebobs -root \n\
+ ccurve -root \n\
+ blaster -root \n\
+ bumps -root \n\
+ xteevee -root \n\
+ xanalogtv -root \n\
+ xspirograph -root \n\
+ nerverot -root \n\
+- "NerveRot (dense)" nerverot -root -count 1000 \n\
+- "NerveRot (thick)" nerverot -root -count 100 -line-width 4 \
+ -max-nerve-radius 0.8 -nervousness 0.5 -db \n\
+ xrayswarm -root \n\
+- "Zoom (Fatbits)" zoom -root \n\
+ "Zoom (Lenses)" zoom -root -lenses \n\
+ rotzoomer -root \n\
+- "RotZoomer (mobile)" rotzoomer -root -move \n\
+- "RotZoomer (sweep)" rotzoomer -root -sweep \n\
+ whirlwindwarp -root \n\
+ "WhirlyGig" whirlygig -root \n\
+ "SpeedMine" speedmine -root \n\
+ "SpeedWorm" speedmine -root -worm \n\
+ vermiculate -root \n\
+ twang -root \n\
+ apollonian -root \n\
+ euler2d -root \n\
+ "Euler2d (dense)" euler2d -root -count 4000 -eulertail 400 \
+ -ncolors 230 \n\
+- juggle -root \n\
+ polyominoes -root \n\
+- thornbird -root \n\
+ fluidballs -root \n\
+ anemone -root \n\
+ halftone -root \n\
+ metaballs -root \n\
+ eruption -root \n\
+ popsquares -root \n\
+ barcode -root \n\
+ piecewise -root \n\
+ cloudlife -root \n\
+ "FontGlide" fontglide -root -page \n\
+ "FontGlide (scroller)" fontglide -root -scroll \n\
+ apple2 -root \n\
+ bubbles -root \n\
+ pong -root \n\
+ wormhole -root \n\
+ pacman -root \n\
+ fuzzyflakes -root \n\
+ anemotaxis -root \n\
+ memscroller -root \n\
+ substrate -root \n\
+ intermomentary -root \n\
+ fireworkx -root \n\
+- default-n: webcollage -root \n\
+- default-n: "WebCollage (whacked)" \
+ webcollage -root -filter \
+ 'vidwhacker -stdin -stdout' \n\
+- default-n: vidwhacker -root \n\
+ \
+@GL_KLUDGE@ GL: gears -root \n\
+@GL_KLUDGE@ GL: "Gears (planetary)" gears -root -planetary \n\
+@GL_KLUDGE@ GL: superquadrics -root \n\
+@GL_KLUDGE@ GL: morph3d -root \n\
+@GL_KLUDGE@ GL: cage -root \n\
+@GL_KLUDGE@ GL: moebius -root \n\
+@GL_KLUDGE@ GL: stairs -root \n\
+@GL_KLUDGE@ GL: pipes -root \n\
+@GL_KLUDGE@ GL: sproingies -root \n\
+@GL_KLUDGE@ GL: rubik -root \n\
+@GL_KLUDGE@ GL: atlantis -root -gradient \n\
+@GL_KLUDGE@ GL: lament -root \n\
+@GL_KLUDGE@ GL: bubble3d -root \n\
+@GL_KLUDGE@ GL: glplanet -root \n\
+@GL_KLUDGE@ GL: flurry -root -preset random \n\
+@GL_KLUDGE@ GL: pulsar -root \n\
+- GL: "Pulsar (textures)" \
+ pulsar -root -texture -mipmap \
+ -texture_quality -light -fog \n\
+@GLE_KLUDGE@GL: extrusion -root \n\
+@GL_KLUDGE@ GL: sierpinski3d -root \n\
+@GL_KLUDGE@ GL: menger -root \n\
+@GL_KLUDGE@ GL: "GFlux" gflux -root \n\
+@GL_KLUDGE@ GL: "GFlux (grab)" gflux -root -mode grab \n\
+@GL_KLUDGE@ GL: stonerview -root \n\
+@GL_KLUDGE@ GL: starwars -root \n\
+@GL_KLUDGE@ GL: gltext -root \n\
+@GL_KLUDGE@ GL: "GLText (clock)" gltext -text "%A%n%d %b %Y%n%r" -root \n\
+@GL_KLUDGE@ GL: "Molecule" molecule -root \n\
+@GL_KLUDGE@ GL: "Molecule (lumpy)" molecule -root -no-bonds -no-labels \n\
+@GL_KLUDGE@ GL: dangerball -root \n\
+@GL_KLUDGE@ GL: circuit -root \n\
+@GL_KLUDGE@ GL: engine -root \n\
+@GL_KLUDGE@ GL: flipscreen3d -root \n\
+@GL_KLUDGE@ GL: glsnake -root \n\
+@GL_KLUDGE@ GL: boxed -root \n\
+- GL: "GLForestFire" glforestfire -root \n\
+- GL: "GLForestFire (rain)" glforestfire -root -count 0 \n\
+- GL: sballs -root \n\
+@GL_KLUDGE@ GL: cubenetic -root \n\
+@GL_KLUDGE@ GL: spheremonics -root \n\
+@GL_KLUDGE@ GL: lavalite -root \n\
+@GL_KLUDGE@ GL: queens -root \n\
+@GL_KLUDGE@ GL: endgame -root \n\
+- GL: glblur -root \n\
+@GL_KLUDGE@ GL: atunnel -root \n\
+@GL_KLUDGE@ GL: flyingtoasters -root \n\
+@GL_KLUDGE@ GL: bouncingcow -root \n\
+@GL_KLUDGE@ GL: jigglypuff -root -random \n\
+@GL_KLUDGE@ GL: klein -root -random \n\
+@GL_KLUDGE@ GL: "HyperTorus (striped)" hypertorus -root \n\
+@GL_KLUDGE@ GL: "HyperTorus (solid)" hypertorus -root -solid -transparent \n\
+@GL_KLUDGE@ GL: glmatrix -root \n\
+@GL_KLUDGE@ GL: cubestorm -root \n\
+@GL_KLUDGE@ GL: glknots -root \n\
+@GL_KLUDGE@ GL: blocktube -root \n\
+@GL_KLUDGE@ GL: flipflop -root \n\
+@GL_KLUDGE@ GL: antspotlight -root \n\
+- GL: glslideshow -root \n\
+@GL_KLUDGE@ GL: polytopes -root \n\
+@GL_KLUDGE@ GL: gleidescope -root \n\
+- GL: mirrorblob -root \n\
+@GL_KLUDGE@ GL: "MirrorBlob (color only)" \
+ mirrorblob -root -colour -no-texture \n\
+@GL_KLUDGE@ GL: blinkbox -root \n\
+@GL_KLUDGE@ GL: noof -root \n\
+@GL_KLUDGE@ GL: polyhedra -root \n\
+- GL: antinspect -root \n\
+@GL_KLUDGE@ GL: providence -root \n\
+@GL_KLUDGE@ GL: "Pinion (large gears)" pinion -root \n\
+@GL_KLUDGE@ GL: "Pinion (small gears)" pinion -root -size 0.2 \n\
+@GL_KLUDGE@ GL: pinion -root \n\
+ \
+- xdaliclock -root -builtin3 -cycle \n\
+- default-n: xearth -nofork -nostars -ncolors 50 \
+ -night 3 -wait 0 -timewarp 400.0 -pos \
+ sunrel/38/-30 \n\
+- xplanet -vroot -wait 1 -timewarp 90000 \
+ -label -origin moon \n\
+- xmountains -b -M -Z 0 -r 1 \n\
+- "XMountains (top)" xmountains -b -M -Z 0 -r 1 -m \n\
+- xaos -root -autopilot -nogui -delay 10000 \
+ -maxframerate 30 \
+ -incoloring -1 -outcoloring -1 \n\
+- xfishtank -d -s \n\
+- xsnow \n\
+- goban -root \n\
+- electricsheep \n\
+- cosmos -root \n\
+- GL: sphereEversion --root \n\
+- GL: fireflies -root \n