summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFranklin Wei <git@fwei.tk>2017-04-29 18:21:56 -0400
committerFranklin Wei <git@fwei.tk>2017-04-29 18:24:42 -0400
commit881746789a489fad85aae8317555f73dbe261556 (patch)
treecec2946362c4698c8db3c10f3242ef546c2c22dd
parent03dd4b92be7dcd5c8ab06da3810887060e06abd5 (diff)
downloadrockbox-881746789a489fad85aae8317555f73dbe261556.tar.gz
rockbox-881746789a489fad85aae8317555f73dbe261556.zip
puzzles: refactor and resync with upstream
This brings puzzles up-to-date with upstream revision 2d333750272c3967cfd5cd3677572cddeaad5932, though certain changes made by me, including cursor-only Untangle and some compilation fixes remain. Upstream code has been moved to its separate subdirectory and future syncs can be done by simply copying over the new sources. Change-Id: Ia6506ca5f78c3627165ea6791d38db414ace0804
-rw-r--r--apps/plugins/puzzles/README.rockbox7
-rw-r--r--apps/plugins/puzzles/SOURCES42
-rw-r--r--apps/plugins/puzzles/SOURCES.games90
-rw-r--r--apps/plugins/puzzles/dummy/assert.h1
-rw-r--r--apps/plugins/puzzles/dummy/math.h0
-rw-r--r--apps/plugins/puzzles/dummy/stdlib.h0
-rwxr-xr-xapps/plugins/puzzles/html/jspage.pl120
-rw-r--r--apps/plugins/puzzles/keymaps.h206
-rw-r--r--apps/plugins/puzzles/puzzles.make16
-rw-r--r--apps/plugins/puzzles/rbcompat.h12
-rw-r--r--apps/plugins/puzzles/rbmalloc.c (renamed from apps/plugins/puzzles/malloc.c)2
-rw-r--r--apps/plugins/puzzles/rbwrappers.c29
-rw-r--r--apps/plugins/puzzles/rockbox.c69
-rw-r--r--apps/plugins/puzzles/src/Buildscr (renamed from apps/plugins/puzzles/Buildscr)0
-rw-r--r--apps/plugins/puzzles/src/CHECKLST.txt (renamed from apps/plugins/puzzles/CHECKLST.txt)0
-rw-r--r--apps/plugins/puzzles/src/LICENCE (renamed from apps/plugins/puzzles/LICENCE)0
-rw-r--r--apps/plugins/puzzles/src/Makefile727
-rw-r--r--apps/plugins/puzzles/src/Makefile.am446
-rw-r--r--apps/plugins/puzzles/src/Makefile.cyg718
-rw-r--r--apps/plugins/puzzles/src/Makefile.doc17
-rw-r--r--apps/plugins/puzzles/src/Makefile.emcc497
-rw-r--r--apps/plugins/puzzles/src/Makefile.gnustep412
-rw-r--r--apps/plugins/puzzles/src/Makefile.gtk727
-rw-r--r--apps/plugins/puzzles/src/Makefile.in2611
-rw-r--r--apps/plugins/puzzles/src/Makefile.nestedvm556
-rw-r--r--apps/plugins/puzzles/src/Makefile.osx574
-rw-r--r--apps/plugins/puzzles/src/Makefile.vc1040
-rw-r--r--apps/plugins/puzzles/src/Makefile.wce808
-rw-r--r--apps/plugins/puzzles/src/PuzzleApplet.java (renamed from apps/plugins/puzzles/PuzzleApplet.java)61
-rw-r--r--apps/plugins/puzzles/src/README (renamed from apps/plugins/puzzles/README)0
-rw-r--r--apps/plugins/puzzles/src/Recipe (renamed from apps/plugins/puzzles/Recipe)0
-rw-r--r--apps/plugins/puzzles/src/aclocal.m41832
-rwxr-xr-xapps/plugins/puzzles/src/benchmark.pl (renamed from apps/plugins/puzzles/benchmark.pl)0
-rwxr-xr-xapps/plugins/puzzles/src/benchmark.sh (renamed from apps/plugins/puzzles/benchmark.sh)0
-rw-r--r--apps/plugins/puzzles/src/blackbox.R (renamed from apps/plugins/puzzles/blackbox.R)0
-rw-r--r--apps/plugins/puzzles/src/blackbox.c (renamed from apps/plugins/puzzles/blackbox.c)4
-rw-r--r--apps/plugins/puzzles/src/blackbox.html125
-rw-r--r--apps/plugins/puzzles/src/bridges.R (renamed from apps/plugins/puzzles/bridges.R)0
-rw-r--r--apps/plugins/puzzles/src/bridges.c (renamed from apps/plugins/puzzles/bridges.c)4
-rw-r--r--apps/plugins/puzzles/src/bridges.html135
-rw-r--r--apps/plugins/puzzles/src/chm.but (renamed from apps/plugins/puzzles/chm.but)0
-rw-r--r--apps/plugins/puzzles/src/chm.css (renamed from apps/plugins/puzzles/chm.css)0
-rw-r--r--apps/plugins/puzzles/src/combi.c (renamed from apps/plugins/puzzles/combi.c)2
-rw-r--r--apps/plugins/puzzles/src/common.html285
-rwxr-xr-xapps/plugins/puzzles/src/compile347
-rw-r--r--apps/plugins/puzzles/src/config.log135
-rwxr-xr-xapps/plugins/puzzles/src/configure5739
-rw-r--r--apps/plugins/puzzles/src/configure.ac (renamed from apps/plugins/puzzles/configure.ac)0
-rw-r--r--apps/plugins/puzzles/src/cube.R (renamed from apps/plugins/puzzles/cube.R)0
-rw-r--r--apps/plugins/puzzles/src/cube.c (renamed from apps/plugins/puzzles/cube.c)4
-rw-r--r--apps/plugins/puzzles/src/cube.html57
-rwxr-xr-xapps/plugins/puzzles/src/depcomp791
-rwxr-xr-xapps/plugins/puzzles/src/desktop.pl (renamed from apps/plugins/puzzles/desktop.pl)0
-rw-r--r--apps/plugins/puzzles/src/devel.but (renamed from apps/plugins/puzzles/devel.but)170
-rw-r--r--apps/plugins/puzzles/src/divvy.c (renamed from apps/plugins/puzzles/divvy.c)2
-rw-r--r--apps/plugins/puzzles/src/docindex.html217
-rw-r--r--apps/plugins/puzzles/src/dominosa.R (renamed from apps/plugins/puzzles/dominosa.R)0
-rw-r--r--apps/plugins/puzzles/src/dominosa.c (renamed from apps/plugins/puzzles/dominosa.c)4
-rw-r--r--apps/plugins/puzzles/src/dominosa.html57
-rw-r--r--apps/plugins/puzzles/src/drawing.c (renamed from apps/plugins/puzzles/drawing.c)2
-rw-r--r--apps/plugins/puzzles/src/dsf.c (renamed from apps/plugins/puzzles/dsf.c)2
-rw-r--r--apps/plugins/puzzles/src/emcc.c (renamed from apps/plugins/puzzles/emcc.c)45
-rw-r--r--apps/plugins/puzzles/src/emcclib.js (renamed from apps/plugins/puzzles/emcclib.js)133
-rw-r--r--apps/plugins/puzzles/src/emccpre.js (renamed from apps/plugins/puzzles/emccpre.js)35
-rw-r--r--apps/plugins/puzzles/src/emccx.json (renamed from apps/plugins/puzzles/emccx.json)0
-rw-r--r--apps/plugins/puzzles/src/fifteen.R (renamed from apps/plugins/puzzles/fifteen.R)0
-rw-r--r--apps/plugins/puzzles/src/fifteen.c (renamed from apps/plugins/puzzles/fifteen.c)4
-rw-r--r--apps/plugins/puzzles/src/fifteen.html41
-rw-r--r--apps/plugins/puzzles/src/filling.R (renamed from apps/plugins/puzzles/filling.R)0
-rw-r--r--apps/plugins/puzzles/src/filling.c (renamed from apps/plugins/puzzles/filling.c)8
-rw-r--r--apps/plugins/puzzles/src/filling.html50
-rw-r--r--apps/plugins/puzzles/src/findloop.c (renamed from apps/plugins/puzzles/findloop.c)0
-rw-r--r--apps/plugins/puzzles/src/flip.R (renamed from apps/plugins/puzzles/flip.R)0
-rw-r--r--apps/plugins/puzzles/src/flip.c (renamed from apps/plugins/puzzles/flip.c)4
-rw-r--r--apps/plugins/puzzles/src/flip.html54
-rw-r--r--apps/plugins/puzzles/src/flood.R (renamed from apps/plugins/puzzles/flood.R)0
-rw-r--r--apps/plugins/puzzles/src/flood.c (renamed from apps/plugins/puzzles/flood.c)4
-rw-r--r--apps/plugins/puzzles/src/flood.html64
-rw-r--r--apps/plugins/puzzles/src/galaxies.R (renamed from apps/plugins/puzzles/galaxies.R)0
-rw-r--r--apps/plugins/puzzles/src/galaxies.c (renamed from apps/plugins/puzzles/galaxies.c)4
-rw-r--r--apps/plugins/puzzles/src/galaxies.html60
-rw-r--r--apps/plugins/puzzles/src/gamedesc.txt39
-rw-r--r--apps/plugins/puzzles/src/grid.c (renamed from apps/plugins/puzzles/grid.c)171
-rw-r--r--apps/plugins/puzzles/src/grid.h (renamed from apps/plugins/puzzles/grid.h)1
-rw-r--r--apps/plugins/puzzles/src/gtk.c (renamed from apps/plugins/puzzles/gtk.c)187
-rw-r--r--apps/plugins/puzzles/src/guess.R (renamed from apps/plugins/puzzles/guess.R)0
-rw-r--r--apps/plugins/puzzles/src/guess.c (renamed from apps/plugins/puzzles/guess.c)4
-rw-r--r--apps/plugins/puzzles/src/guess.html94
-rw-r--r--apps/plugins/puzzles/src/html/blackbox.html (renamed from apps/plugins/puzzles/html/blackbox.html)0
-rw-r--r--apps/plugins/puzzles/src/html/bridges.html (renamed from apps/plugins/puzzles/html/bridges.html)0
-rw-r--r--apps/plugins/puzzles/src/html/cube.html (renamed from apps/plugins/puzzles/html/cube.html)0
-rw-r--r--apps/plugins/puzzles/src/html/dominosa.html (renamed from apps/plugins/puzzles/html/dominosa.html)0
-rw-r--r--apps/plugins/puzzles/src/html/fifteen.html (renamed from apps/plugins/puzzles/html/fifteen.html)0
-rw-r--r--apps/plugins/puzzles/src/html/filling.html (renamed from apps/plugins/puzzles/html/filling.html)0
-rw-r--r--apps/plugins/puzzles/src/html/flip.html (renamed from apps/plugins/puzzles/html/flip.html)0
-rw-r--r--apps/plugins/puzzles/src/html/flood.html (renamed from apps/plugins/puzzles/html/flood.html)0
-rw-r--r--apps/plugins/puzzles/src/html/galaxies.html (renamed from apps/plugins/puzzles/html/galaxies.html)0
-rw-r--r--apps/plugins/puzzles/src/html/group.html (renamed from apps/plugins/puzzles/html/group.html)0
-rw-r--r--apps/plugins/puzzles/src/html/guess.html (renamed from apps/plugins/puzzles/html/guess.html)0
-rw-r--r--apps/plugins/puzzles/src/html/inertia.html (renamed from apps/plugins/puzzles/html/inertia.html)0
-rwxr-xr-xapps/plugins/puzzles/src/html/javapage.pl (renamed from apps/plugins/puzzles/html/javapage.pl)0
-rwxr-xr-xapps/plugins/puzzles/src/html/jspage.pl242
-rw-r--r--apps/plugins/puzzles/src/html/keen.html (renamed from apps/plugins/puzzles/html/keen.html)0
-rw-r--r--apps/plugins/puzzles/src/html/lightup.html (renamed from apps/plugins/puzzles/html/lightup.html)0
-rw-r--r--apps/plugins/puzzles/src/html/loopy.html (renamed from apps/plugins/puzzles/html/loopy.html)0
-rw-r--r--apps/plugins/puzzles/src/html/magnets.html (renamed from apps/plugins/puzzles/html/magnets.html)0
-rw-r--r--apps/plugins/puzzles/src/html/map.html (renamed from apps/plugins/puzzles/html/map.html)0
-rw-r--r--apps/plugins/puzzles/src/html/mines.html (renamed from apps/plugins/puzzles/html/mines.html)0
-rw-r--r--apps/plugins/puzzles/src/html/net.html (renamed from apps/plugins/puzzles/html/net.html)0
-rw-r--r--apps/plugins/puzzles/src/html/netslide.html (renamed from apps/plugins/puzzles/html/netslide.html)0
-rw-r--r--apps/plugins/puzzles/src/html/palisade.html (renamed from apps/plugins/puzzles/html/palisade.html)0
-rw-r--r--apps/plugins/puzzles/src/html/pattern.html (renamed from apps/plugins/puzzles/html/pattern.html)0
-rw-r--r--apps/plugins/puzzles/src/html/pearl.html (renamed from apps/plugins/puzzles/html/pearl.html)0
-rw-r--r--apps/plugins/puzzles/src/html/pegs.html (renamed from apps/plugins/puzzles/html/pegs.html)0
-rw-r--r--apps/plugins/puzzles/src/html/range.html (renamed from apps/plugins/puzzles/html/range.html)0
-rw-r--r--apps/plugins/puzzles/src/html/rect.html (renamed from apps/plugins/puzzles/html/rect.html)0
-rw-r--r--apps/plugins/puzzles/src/html/samegame.html (renamed from apps/plugins/puzzles/html/samegame.html)0
-rw-r--r--apps/plugins/puzzles/src/html/signpost.html (renamed from apps/plugins/puzzles/html/signpost.html)0
-rw-r--r--apps/plugins/puzzles/src/html/singles.html (renamed from apps/plugins/puzzles/html/singles.html)0
-rw-r--r--apps/plugins/puzzles/src/html/sixteen.html (renamed from apps/plugins/puzzles/html/sixteen.html)0
-rw-r--r--apps/plugins/puzzles/src/html/slant.html (renamed from apps/plugins/puzzles/html/slant.html)0
-rw-r--r--apps/plugins/puzzles/src/html/solo.html (renamed from apps/plugins/puzzles/html/solo.html)0
-rw-r--r--apps/plugins/puzzles/src/html/tents.html (renamed from apps/plugins/puzzles/html/tents.html)0
-rw-r--r--apps/plugins/puzzles/src/html/towers.html (renamed from apps/plugins/puzzles/html/towers.html)0
-rw-r--r--apps/plugins/puzzles/src/html/tracks.html (renamed from apps/plugins/puzzles/html/tracks.html)0
-rw-r--r--apps/plugins/puzzles/src/html/twiddle.html (renamed from apps/plugins/puzzles/html/twiddle.html)0
-rw-r--r--apps/plugins/puzzles/src/html/undead.html (renamed from apps/plugins/puzzles/html/undead.html)0
-rw-r--r--apps/plugins/puzzles/src/html/unequal.html (renamed from apps/plugins/puzzles/html/unequal.html)0
-rw-r--r--apps/plugins/puzzles/src/html/unruly.html (renamed from apps/plugins/puzzles/html/unruly.html)0
-rw-r--r--apps/plugins/puzzles/src/html/untangle.html (renamed from apps/plugins/puzzles/html/untangle.html)0
-rw-r--r--apps/plugins/puzzles/src/icons/Makefile (renamed from apps/plugins/puzzles/icons/Makefile)0
-rw-r--r--apps/plugins/puzzles/src/icons/blackbox.sav (renamed from apps/plugins/puzzles/icons/blackbox.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/bridges.sav (renamed from apps/plugins/puzzles/icons/bridges.sav)0
-rwxr-xr-xapps/plugins/puzzles/src/icons/cicon.pl (renamed from apps/plugins/puzzles/icons/cicon.pl)0
-rwxr-xr-xapps/plugins/puzzles/src/icons/crop.sh (renamed from apps/plugins/puzzles/icons/crop.sh)0
-rw-r--r--apps/plugins/puzzles/src/icons/cube.sav (renamed from apps/plugins/puzzles/icons/cube.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/dominosa.sav (renamed from apps/plugins/puzzles/icons/dominosa.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/fifteen.sav (renamed from apps/plugins/puzzles/icons/fifteen.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/filling.sav (renamed from apps/plugins/puzzles/icons/filling.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/flip.sav (renamed from apps/plugins/puzzles/icons/flip.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/flood.sav (renamed from apps/plugins/puzzles/icons/flood.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/galaxies.sav (renamed from apps/plugins/puzzles/icons/galaxies.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/guess.sav (renamed from apps/plugins/puzzles/icons/guess.sav)0
-rwxr-xr-xapps/plugins/puzzles/src/icons/icon.pl (renamed from apps/plugins/puzzles/icons/icon.pl)0
-rw-r--r--apps/plugins/puzzles/src/icons/inertia.sav (renamed from apps/plugins/puzzles/icons/inertia.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/keen.sav (renamed from apps/plugins/puzzles/icons/keen.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/lightup.sav (renamed from apps/plugins/puzzles/icons/lightup.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/loopy.sav (renamed from apps/plugins/puzzles/icons/loopy.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/magnets.sav (renamed from apps/plugins/puzzles/icons/magnets.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/map.sav (renamed from apps/plugins/puzzles/icons/map.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/mines.sav (renamed from apps/plugins/puzzles/icons/mines.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/net.sav (renamed from apps/plugins/puzzles/icons/net.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/netslide.sav (renamed from apps/plugins/puzzles/icons/netslide.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/palisade.sav (renamed from apps/plugins/puzzles/icons/palisade.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/pattern.sav (renamed from apps/plugins/puzzles/icons/pattern.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/pearl.sav (renamed from apps/plugins/puzzles/icons/pearl.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/pegs.sav (renamed from apps/plugins/puzzles/icons/pegs.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/range.sav (renamed from apps/plugins/puzzles/icons/range.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/rect.sav (renamed from apps/plugins/puzzles/icons/rect.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/samegame.sav (renamed from apps/plugins/puzzles/icons/samegame.sav)0
-rwxr-xr-xapps/plugins/puzzles/src/icons/screenshot.sh (renamed from apps/plugins/puzzles/icons/screenshot.sh)0
-rw-r--r--apps/plugins/puzzles/src/icons/signpost.sav (renamed from apps/plugins/puzzles/icons/signpost.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/singles.sav (renamed from apps/plugins/puzzles/icons/singles.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/sixteen.sav (renamed from apps/plugins/puzzles/icons/sixteen.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/slant.sav (renamed from apps/plugins/puzzles/icons/slant.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/solo.sav (renamed from apps/plugins/puzzles/icons/solo.sav)0
-rwxr-xr-xapps/plugins/puzzles/src/icons/square.pl (renamed from apps/plugins/puzzles/icons/square.pl)0
-rw-r--r--apps/plugins/puzzles/src/icons/tents.sav (renamed from apps/plugins/puzzles/icons/tents.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/towers.sav (renamed from apps/plugins/puzzles/icons/towers.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/tracks.sav (renamed from apps/plugins/puzzles/icons/tracks.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/twiddle.sav (renamed from apps/plugins/puzzles/icons/twiddle.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/undead.sav (renamed from apps/plugins/puzzles/icons/undead.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/unequal.sav (renamed from apps/plugins/puzzles/icons/unequal.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/unruly.sav (renamed from apps/plugins/puzzles/icons/unruly.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/untangle.sav (renamed from apps/plugins/puzzles/icons/untangle.sav)0
-rw-r--r--apps/plugins/puzzles/src/icons/win16pal.xpm (renamed from apps/plugins/puzzles/icons/win16pal.xpm)0
-rw-r--r--apps/plugins/puzzles/src/index.html67
-rw-r--r--apps/plugins/puzzles/src/inertia.R (renamed from apps/plugins/puzzles/inertia.R)0
-rw-r--r--apps/plugins/puzzles/src/inertia.c (renamed from apps/plugins/puzzles/inertia.c)4
-rw-r--r--apps/plugins/puzzles/src/inertia.html54
-rwxr-xr-xapps/plugins/puzzles/src/install-sh501
-rw-r--r--apps/plugins/puzzles/src/intro.html39
-rw-r--r--apps/plugins/puzzles/src/keen.R (renamed from apps/plugins/puzzles/keen.R)0
-rw-r--r--apps/plugins/puzzles/src/keen.c (renamed from apps/plugins/puzzles/keen.c)4
-rw-r--r--apps/plugins/puzzles/src/keen.html102
-rw-r--r--apps/plugins/puzzles/src/latin.c (renamed from apps/plugins/puzzles/latin.c)2
-rw-r--r--apps/plugins/puzzles/src/latin.h (renamed from apps/plugins/puzzles/latin.h)0
-rw-r--r--apps/plugins/puzzles/src/laydomino.c (renamed from apps/plugins/puzzles/laydomino.c)2
-rw-r--r--apps/plugins/puzzles/src/licence.html33
-rw-r--r--apps/plugins/puzzles/src/lightup.R (renamed from apps/plugins/puzzles/lightup.R)0
-rw-r--r--apps/plugins/puzzles/src/lightup.c (renamed from apps/plugins/puzzles/lightup.c)4
-rw-r--r--apps/plugins/puzzles/src/lightup.html98
-rw-r--r--apps/plugins/puzzles/src/list.c (renamed from apps/plugins/puzzles/list.c)0
-rw-r--r--apps/plugins/puzzles/src/loopgen.c (renamed from apps/plugins/puzzles/loopgen.c)2
-rw-r--r--apps/plugins/puzzles/src/loopgen.h (renamed from apps/plugins/puzzles/loopgen.h)0
-rw-r--r--apps/plugins/puzzles/src/loopy.R (renamed from apps/plugins/puzzles/loopy.R)0
-rw-r--r--apps/plugins/puzzles/src/loopy.c (renamed from apps/plugins/puzzles/loopy.c)240
-rw-r--r--apps/plugins/puzzles/src/loopy.html69
-rw-r--r--apps/plugins/puzzles/src/magnets.R (renamed from apps/plugins/puzzles/magnets.R)0
-rw-r--r--apps/plugins/puzzles/src/magnets.c (renamed from apps/plugins/puzzles/magnets.c)4
-rw-r--r--apps/plugins/puzzles/src/magnets.html76
-rwxr-xr-xapps/plugins/puzzles/src/makedist.sh (renamed from apps/plugins/puzzles/makedist.sh)0
-rw-r--r--apps/plugins/puzzles/src/malloc.c53
-rw-r--r--apps/plugins/puzzles/src/map.R (renamed from apps/plugins/puzzles/map.R)0
-rw-r--r--apps/plugins/puzzles/src/map.c (renamed from apps/plugins/puzzles/map.c)4
-rw-r--r--apps/plugins/puzzles/src/map.html76
-rw-r--r--apps/plugins/puzzles/src/maxflow.c (renamed from apps/plugins/puzzles/maxflow.c)2
-rw-r--r--apps/plugins/puzzles/src/maxflow.h (renamed from apps/plugins/puzzles/maxflow.h)0
-rw-r--r--apps/plugins/puzzles/src/midend.c (renamed from apps/plugins/puzzles/midend.c)315
-rw-r--r--apps/plugins/puzzles/src/mines.R (renamed from apps/plugins/puzzles/mines.R)0
-rw-r--r--apps/plugins/puzzles/src/mines.c (renamed from apps/plugins/puzzles/mines.c)4
-rw-r--r--apps/plugins/puzzles/src/mines.html82
-rw-r--r--apps/plugins/puzzles/src/misc.c (renamed from apps/plugins/puzzles/misc.c)19
-rwxr-xr-xapps/plugins/puzzles/src/missing215
-rwxr-xr-xapps/plugins/puzzles/src/mkauto.sh (renamed from apps/plugins/puzzles/mkauto.sh)0
-rwxr-xr-xapps/plugins/puzzles/src/mkfiles.pl (renamed from apps/plugins/puzzles/mkfiles.pl)0
-rw-r--r--apps/plugins/puzzles/src/nestedvm.c (renamed from apps/plugins/puzzles/nestedvm.c)33
-rw-r--r--apps/plugins/puzzles/src/net.R (renamed from apps/plugins/puzzles/net.R)0
-rw-r--r--apps/plugins/puzzles/src/net.c (renamed from apps/plugins/puzzles/net.c)78
-rw-r--r--apps/plugins/puzzles/src/net.html108
-rw-r--r--apps/plugins/puzzles/src/netslide.R (renamed from apps/plugins/puzzles/netslide.R)0
-rw-r--r--apps/plugins/puzzles/src/netslide.c (renamed from apps/plugins/puzzles/netslide.c)4
-rw-r--r--apps/plugins/puzzles/src/netslide.html30
-rw-r--r--apps/plugins/puzzles/src/no-icon.c (renamed from apps/plugins/puzzles/no-icon.c)0
-rw-r--r--apps/plugins/puzzles/src/noicon.rc (renamed from apps/plugins/puzzles/noicon.rc)0
-rw-r--r--apps/plugins/puzzles/src/nullfe.c (renamed from apps/plugins/puzzles/nullfe.c)5
-rw-r--r--apps/plugins/puzzles/src/nullgame.R (renamed from apps/plugins/puzzles/nullgame.R)0
-rw-r--r--apps/plugins/puzzles/src/nullgame.c (renamed from apps/plugins/puzzles/nullgame.c)4
-rw-r--r--apps/plugins/puzzles/src/obfusc.c (renamed from apps/plugins/puzzles/obfusc.c)4
-rw-r--r--apps/plugins/puzzles/src/osx-help.but (renamed from apps/plugins/puzzles/osx-help.but)0
-rw-r--r--apps/plugins/puzzles/src/osx-info.plist (renamed from apps/plugins/puzzles/osx-info.plist)0
-rw-r--r--apps/plugins/puzzles/src/osx.icns (renamed from apps/plugins/puzzles/osx.icns)bin48589 -> 48589 bytes
-rw-r--r--apps/plugins/puzzles/src/osx.m (renamed from apps/plugins/puzzles/osx.m)109
-rw-r--r--apps/plugins/puzzles/src/padtoolbar.bmp (renamed from apps/plugins/puzzles/padtoolbar.bmp)bin1198 -> 1198 bytes
-rw-r--r--apps/plugins/puzzles/src/palisade.R (renamed from apps/plugins/puzzles/palisade.R)0
-rw-r--r--apps/plugins/puzzles/src/palisade.c (renamed from apps/plugins/puzzles/palisade.c)4
-rw-r--r--apps/plugins/puzzles/src/palisade.html54
-rw-r--r--apps/plugins/puzzles/src/pattern.R (renamed from apps/plugins/puzzles/pattern.R)0
-rw-r--r--apps/plugins/puzzles/src/pattern.c (renamed from apps/plugins/puzzles/pattern.c)4
-rw-r--r--apps/plugins/puzzles/src/pattern.html50
-rw-r--r--apps/plugins/puzzles/src/pearl.R (renamed from apps/plugins/puzzles/pearl.R)0
-rw-r--r--apps/plugins/puzzles/src/pearl.c (renamed from apps/plugins/puzzles/pearl.c)4
-rw-r--r--apps/plugins/puzzles/src/pearl.html65
-rw-r--r--apps/plugins/puzzles/src/pegs.R (renamed from apps/plugins/puzzles/pegs.R)0
-rw-r--r--apps/plugins/puzzles/src/pegs.c (renamed from apps/plugins/puzzles/pegs.c)4
-rw-r--r--apps/plugins/puzzles/src/pegs.html54
-rw-r--r--apps/plugins/puzzles/src/penrose.c (renamed from apps/plugins/puzzles/penrose.c)2
-rw-r--r--apps/plugins/puzzles/src/penrose.h (renamed from apps/plugins/puzzles/penrose.h)0
-rw-r--r--apps/plugins/puzzles/src/printing.c (renamed from apps/plugins/puzzles/printing.c)0
-rw-r--r--apps/plugins/puzzles/src/ps.c (renamed from apps/plugins/puzzles/ps.c)2
-rw-r--r--apps/plugins/puzzles/src/puzzles.but (renamed from apps/plugins/puzzles/puzzles.but)0
-rw-r--r--apps/plugins/puzzles/src/puzzles.cnt167
-rw-r--r--apps/plugins/puzzles/src/puzzles.h (renamed from apps/plugins/puzzles/puzzles.h)78
-rw-r--r--apps/plugins/puzzles/src/puzzles.hlpbin0 -> 201514 bytes
-rw-r--r--apps/plugins/puzzles/src/puzzles.rc2 (renamed from apps/plugins/puzzles/puzzles.rc2)0
-rw-r--r--apps/plugins/puzzles/src/puzzles.txt3163
-rw-r--r--apps/plugins/puzzles/src/random.c (renamed from apps/plugins/puzzles/random.c)3
-rw-r--r--apps/plugins/puzzles/src/range.R (renamed from apps/plugins/puzzles/range.R)0
-rw-r--r--apps/plugins/puzzles/src/range.c (renamed from apps/plugins/puzzles/range.c)4
-rw-r--r--apps/plugins/puzzles/src/range.html67
-rw-r--r--apps/plugins/puzzles/src/rect.R (renamed from apps/plugins/puzzles/rect.R)0
-rw-r--r--apps/plugins/puzzles/src/rect.c (renamed from apps/plugins/puzzles/rect.c)4
-rw-r--r--apps/plugins/puzzles/src/rect.html76
-rw-r--r--apps/plugins/puzzles/src/resource.h (renamed from apps/plugins/puzzles/resource.h)0
-rw-r--r--apps/plugins/puzzles/src/samegame.R (renamed from apps/plugins/puzzles/samegame.R)0
-rw-r--r--apps/plugins/puzzles/src/samegame.c (renamed from apps/plugins/puzzles/samegame.c)4
-rw-r--r--apps/plugins/puzzles/src/samegame.html82
-rw-r--r--apps/plugins/puzzles/src/signpost.R (renamed from apps/plugins/puzzles/signpost.R)0
-rw-r--r--apps/plugins/puzzles/src/signpost.c (renamed from apps/plugins/puzzles/signpost.c)4
-rw-r--r--apps/plugins/puzzles/src/signpost.html72
-rw-r--r--apps/plugins/puzzles/src/singles.R (renamed from apps/plugins/puzzles/singles.R)0
-rw-r--r--apps/plugins/puzzles/src/singles.c (renamed from apps/plugins/puzzles/singles.c)4
-rw-r--r--apps/plugins/puzzles/src/singles.html67
-rw-r--r--apps/plugins/puzzles/src/sixteen.R (renamed from apps/plugins/puzzles/sixteen.R)0
-rw-r--r--apps/plugins/puzzles/src/sixteen.c (renamed from apps/plugins/puzzles/sixteen.c)4
-rw-r--r--apps/plugins/puzzles/src/sixteen.html48
-rw-r--r--apps/plugins/puzzles/src/slant.R (renamed from apps/plugins/puzzles/slant.R)0
-rw-r--r--apps/plugins/puzzles/src/slant.c (renamed from apps/plugins/puzzles/slant.c)4
-rw-r--r--apps/plugins/puzzles/src/slant.html64
-rw-r--r--apps/plugins/puzzles/src/solo.R (renamed from apps/plugins/puzzles/solo.R)0
-rw-r--r--apps/plugins/puzzles/src/solo.c (renamed from apps/plugins/puzzles/solo.c)4
-rw-r--r--apps/plugins/puzzles/src/solo.html99
-rw-r--r--apps/plugins/puzzles/src/tdq.c (renamed from apps/plugins/puzzles/tdq.c)2
-rw-r--r--apps/plugins/puzzles/src/tents.R (renamed from apps/plugins/puzzles/tents.R)0
-rw-r--r--apps/plugins/puzzles/src/tents.c (renamed from apps/plugins/puzzles/tents.c)4
-rw-r--r--apps/plugins/puzzles/src/tents.html67
-rw-r--r--apps/plugins/puzzles/src/towers.R (renamed from apps/plugins/puzzles/towers.R)0
-rw-r--r--apps/plugins/puzzles/src/towers.c (renamed from apps/plugins/puzzles/towers.c)4
-rw-r--r--apps/plugins/puzzles/src/towers.html88
-rw-r--r--apps/plugins/puzzles/src/tracks.R (renamed from apps/plugins/puzzles/tracks.R)0
-rw-r--r--apps/plugins/puzzles/src/tracks.c (renamed from apps/plugins/puzzles/tracks.c)4
-rw-r--r--apps/plugins/puzzles/src/tracks.html63
-rw-r--r--apps/plugins/puzzles/src/tree234.c (renamed from apps/plugins/puzzles/tree234.c)2
-rw-r--r--apps/plugins/puzzles/src/tree234.h (renamed from apps/plugins/puzzles/tree234.h)0
-rw-r--r--apps/plugins/puzzles/src/twiddle.R (renamed from apps/plugins/puzzles/twiddle.R)0
-rw-r--r--apps/plugins/puzzles/src/twiddle.c (renamed from apps/plugins/puzzles/twiddle.c)4
-rw-r--r--apps/plugins/puzzles/src/twiddle.html63
-rw-r--r--apps/plugins/puzzles/src/undead.R (renamed from apps/plugins/puzzles/undead.R)0
-rw-r--r--apps/plugins/puzzles/src/undead.c (renamed from apps/plugins/puzzles/undead.c)4
-rw-r--r--apps/plugins/puzzles/src/undead.html84
-rw-r--r--apps/plugins/puzzles/src/unequal.R (renamed from apps/plugins/puzzles/unequal.R)0
-rw-r--r--apps/plugins/puzzles/src/unequal.c (renamed from apps/plugins/puzzles/unequal.c)4
-rw-r--r--apps/plugins/puzzles/src/unequal.html103
-rw-r--r--apps/plugins/puzzles/src/unfinished/README (renamed from apps/plugins/puzzles/unfinished/README)0
-rw-r--r--apps/plugins/puzzles/src/unfinished/group.R (renamed from apps/plugins/puzzles/unfinished/group.R)0
-rw-r--r--apps/plugins/puzzles/src/unfinished/group.c (renamed from apps/plugins/puzzles/unfinished/group.c)2
-rw-r--r--apps/plugins/puzzles/src/unfinished/group.gap (renamed from apps/plugins/puzzles/unfinished/group.gap)0
-rw-r--r--apps/plugins/puzzles/src/unfinished/numgame.c (renamed from apps/plugins/puzzles/unfinished/numgame.c)0
-rw-r--r--apps/plugins/puzzles/src/unfinished/path.c (renamed from apps/plugins/puzzles/unfinished/path.c)0
-rw-r--r--apps/plugins/puzzles/src/unfinished/separate.R (renamed from apps/plugins/puzzles/unfinished/separate.R)0
-rw-r--r--apps/plugins/puzzles/src/unfinished/separate.c (renamed from apps/plugins/puzzles/unfinished/separate.c)2
-rw-r--r--apps/plugins/puzzles/src/unfinished/slide.R (renamed from apps/plugins/puzzles/unfinished/slide.R)0
-rw-r--r--apps/plugins/puzzles/src/unfinished/slide.c (renamed from apps/plugins/puzzles/unfinished/slide.c)2
-rw-r--r--apps/plugins/puzzles/src/unfinished/sokoban.R (renamed from apps/plugins/puzzles/unfinished/sokoban.R)0
-rw-r--r--apps/plugins/puzzles/src/unfinished/sokoban.c (renamed from apps/plugins/puzzles/unfinished/sokoban.c)2
-rw-r--r--apps/plugins/puzzles/src/unruly.R (renamed from apps/plugins/puzzles/unruly.R)0
-rw-r--r--apps/plugins/puzzles/src/unruly.c (renamed from apps/plugins/puzzles/unruly.c)4
-rw-r--r--apps/plugins/puzzles/src/unruly.html63
-rw-r--r--apps/plugins/puzzles/src/untangle.R (renamed from apps/plugins/puzzles/untangle.R)0
-rw-r--r--apps/plugins/puzzles/src/untangle.c (renamed from apps/plugins/puzzles/untangle.c)4
-rw-r--r--apps/plugins/puzzles/src/untangle.html45
-rw-r--r--apps/plugins/puzzles/src/version.c (renamed from apps/plugins/puzzles/version.c)0
-rw-r--r--apps/plugins/puzzles/src/version.h (renamed from apps/plugins/puzzles/version.h)0
-rw-r--r--apps/plugins/puzzles/src/wceinf.pl (renamed from apps/plugins/puzzles/wceinf.pl)0
-rwxr-xr-xapps/plugins/puzzles/src/webpage.pl (renamed from apps/plugins/puzzles/webpage.pl)0
-rw-r--r--apps/plugins/puzzles/src/website.url (renamed from apps/plugins/puzzles/website.url)0
-rw-r--r--apps/plugins/puzzles/src/windows.c (renamed from apps/plugins/puzzles/windows.c)124
-rwxr-xr-xapps/plugins/puzzles/src/winiss.pl (renamed from apps/plugins/puzzles/winiss.pl)0
-rw-r--r--apps/plugins/puzzles/src/winwix.mc (renamed from apps/plugins/puzzles/winwix.mc)0
329 files changed, 27352 insertions, 1045 deletions
diff --git a/apps/plugins/puzzles/README.rockbox b/apps/plugins/puzzles/README.rockbox
index e11025dbec..b0c54b287f 100644
--- a/apps/plugins/puzzles/README.rockbox
+++ b/apps/plugins/puzzles/README.rockbox
@@ -19,3 +19,10 @@ out how to do that with a wildcard or something.
19Kudos to Simon (duh), and Frank, for telling me about it. 19Kudos to Simon (duh), and Frank, for telling me about it.
20 20
21Franklin Wei (__builtin) 21Franklin Wei (__builtin)
22
23April 2017: Changes made to move upstream sources to a separate
24subdirectory, where they are completely unmodified from the
25original. Updating the upstream version is now as simple as copying a
26fresh set of sources to src/. Several hacks were used to accomplish
27this: a global include specified on the command line, and a directory
28of dummy header files.
diff --git a/apps/plugins/puzzles/SOURCES b/apps/plugins/puzzles/SOURCES
index 9c41a00358..1d58ff5723 100644
--- a/apps/plugins/puzzles/SOURCES
+++ b/apps/plugins/puzzles/SOURCES
@@ -1,26 +1,26 @@
1rockbox.c 1rockbox.c
2rbwrappers.c 2rbwrappers.c
3 3rbmalloc.c
4combi.c 4src/combi.c
5divvy.c 5src/divvy.c
6drawing.c 6src/drawing.c
7dsf.c 7src/dsf.c
8findloop.c 8src/findloop.c
9grid.c 9src/grid.c
10latin.c 10src/latin.c
11laydomino.c 11src/laydomino.c
12loopgen.c 12src/loopgen.c
13malloc.c 13/*src/malloc.c*/ /* we have our own */
14maxflow.c 14src/maxflow.c
15midend.c 15src/midend.c
16misc.c 16src/misc.c
17penrose.c 17src/penrose.c
18printing.c 18src/printing.c
19random.c 19src/random.c
20tdq.c 20src/tdq.c
21tree234.c 21src/tree234.c
22version.c 22src/version.c
23 23
24#ifdef COMBINED 24#ifdef COMBINED
25list.c 25src/list.c
26#endif 26#endif
diff --git a/apps/plugins/puzzles/SOURCES.games b/apps/plugins/puzzles/SOURCES.games
index c14d15b9a1..5f8c58b477 100644
--- a/apps/plugins/puzzles/SOURCES.games
+++ b/apps/plugins/puzzles/SOURCES.games
@@ -1,51 +1,51 @@
1blackbox.c 1src/blackbox.c
2bridges.c 2src/bridges.c
3cube.c 3src/cube.c
4dominosa.c 4src/dominosa.c
5fifteen.c 5src/fifteen.c
6/*filling.c*/ 6/*src/filling.c*/
7flip.c 7src/flip.c
8flood.c 8src/flood.c
9galaxies.c 9src/galaxies.c
10guess.c 10src/guess.c
11inertia.c 11src/inertia.c
12/*keen.c*/ 12/*src/keen.c*/
13lightup.c 13src/lightup.c
14/*loopy.c*/ 14/*src/loopy.c*/
15magnets.c 15src/magnets.c
16map.c 16src/map.c
17/*mines.c*/ 17/*src/mines.c*/
18net.c 18src/net.c
19netslide.c 19src/netslide.c
20/*palisade.c*/ 20/*src/palisade.c*/
21pattern.c 21src/pattern.c
22pegs.c 22src/pegs.c
23range.c 23src/range.c
24rect.c 24src/rect.c
25samegame.c 25src/samegame.c
26signpost.c 26src/signpost.c
27singles.c 27src/singles.c
28sixteen.c 28src/sixteen.c
29slant.c 29src/slant.c
30/*solo.c*/ 30/*src/solo.c*/
31tents.c 31src/tents.c
32/*towers.c*/ 32/*src/towers.c*/
33tracks.c 33src/tracks.c
34twiddle.c 34src/twiddle.c
35/*undead.c*/ 35/*src/undead.c*/
36/*unequal.c*/ 36/*src/unequal.c*/
37unruly.c 37src/unruly.c
38untangle.c 38src/untangle.c
39 39
40/* disabled for now */ 40/* disabled for now */
41/*unfinished/group.c*/ 41/*src/unfinished/group.c*/
42/*unfinished/separate.c*/ 42/*src/unfinished/separate.c*/
43/*unfinished/slide.c*/ 43/*src/unfinished/slide.c*/
44/*unfinished/sokoban.c*/ 44/*src/unfinished/sokoban.c*/
45 45
46/* no c200v2 */ 46/* no c200v2 */
47#if PLUGIN_BUFFER_SIZE > 0x14000 47#if PLUGIN_BUFFER_SIZE > 0x14000
48pearl.c 48src/pearl.c
49/*loopy.c*/ 49/*src/loopy.c*/
50/*solo.c*/ 50/*src/solo.c*/
51#endif 51#endif
diff --git a/apps/plugins/puzzles/dummy/assert.h b/apps/plugins/puzzles/dummy/assert.h
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/apps/plugins/puzzles/dummy/assert.h
@@ -0,0 +1 @@
diff --git a/apps/plugins/puzzles/dummy/math.h b/apps/plugins/puzzles/dummy/math.h
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/apps/plugins/puzzles/dummy/math.h
diff --git a/apps/plugins/puzzles/dummy/stdlib.h b/apps/plugins/puzzles/dummy/stdlib.h
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/apps/plugins/puzzles/dummy/stdlib.h
diff --git a/apps/plugins/puzzles/html/jspage.pl b/apps/plugins/puzzles/html/jspage.pl
deleted file mode 100755
index 19868bd948..0000000000
--- a/apps/plugins/puzzles/html/jspage.pl
+++ /dev/null
@@ -1,120 +0,0 @@
1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6open my $footerfile, "<", shift @ARGV or die "footer: open: $!\n";
7my $footer = "";
8$footer .= $_ while <$footerfile>;
9close $footerfile;
10
11for my $arg (@ARGV) {
12 $arg =~ /(.*\/)?([^\/]+)\.html$/ or die;
13 my $filename = $2;
14 open my $gamefile, "<", $arg or die "$arg: open: $!\n";
15 my $unfinished = 0;
16 my $docname = $filename;
17 chomp(my $puzzlename = <$gamefile>);
18 while ($puzzlename =~ s/^([^:=]+)(=([^:]+))?://) {
19 if ($1 eq "unfinished") {
20 $unfinished = 1;
21 } elsif ($1 eq "docname") {
22 $docname = $3;
23 } else {
24 die "$arg: unknown keyword '$1'\n";
25 }
26 }
27 my $instructions = "";
28 $instructions .= $_ while <$gamefile>;
29 close $gamefile;
30
31 open my $outpage, ">", "${filename}.html";
32
33 my $unfinishedtitlefragment = $unfinished ? "an unfinished puzzle " : "";
34 my $unfinishedheading = $unfinished ? "<h2 align=center>an unfinished puzzle</h2>\n" : "";
35 my $unfinishedpara;
36 my $links;
37 if ($unfinished) {
38 $unfinishedpara = <<EOF;
39<p>
40You have found your way to a page containing an <em>unfinished</em>
41puzzle in my collection, not linked from the <a href="../">main
42puzzles page</a>. Don't be surprised if things are hard to understand
43or don't work as you expect.
44EOF
45 $links = <<EOF;
46<p align="center">
47<a href="../">Back to main puzzles page</a> (which does not link to this)
48EOF
49 } else {
50 $unfinishedpara = "";
51 $links = <<EOF;
52<p align="center">
53<a href="../doc/${docname}.html#${docname}">Full instructions</a>
54|
55<a href="../">Back to main puzzles page</a>
56EOF
57 }
58
59 print $outpage <<EOF;
60<!DOCTYPE html>
61<html>
62<head>
63<meta http-equiv="Content-Type" content="text/html; charset=ASCII" />
64<title>${puzzlename}, ${unfinishedtitlefragment}from Simon Tatham's Portable Puzzle Collection</title>
65<script type="text/javascript" src="${filename}.js"></script>
66</head>
67<body onLoad="initPuzzle();">
68<h1 align=center>${puzzlename}</h1>
69${unfinishedheading}
70<h2 align=center>from Simon Tatham's Portable Puzzle Collection</h2>
71
72${unfinishedpara}
73
74<hr>
75<div id="puzzle" style="display: none">
76<p align=center>
77 <input type="button" id="new" value="New game">
78 <input type="button" id="restart" value="Restart game">
79 <input type="button" id="undo" value="Undo move">
80 <input type="button" id="redo" value="Redo move">
81 <input type="button" id="solve" value="Solve game">
82 <input type="button" id="specific" value="Enter game ID">
83 <input type="button" id="random" value="Enter random seed">
84 <select id="gametype"></select>
85</p>
86<div align=center>
87 <div id="resizable" style="position:relative; left:0; top:0">
88 <canvas style="display: block" id="puzzlecanvas" width="1px" height="1px" tabindex="1">
89 </canvas>
90 <div id="statusbarholder" style="display: block">
91 </div>
92 </div>
93 <p>
94 Link to this puzzle:
95 <a id="permalink-desc">by game ID</a>
96 <a id="permalink-seed">by random seed</a>
97 </p>
98</div>
99</div>
100<div id="apology">
101Sorry, this Javascript puzzle doesn't seem to work in your web
102browser. Perhaps you have Javascript disabled, or perhaps your browser
103doesn't provide a feature that the puzzle code requires (such as
104<a href="https://developer.mozilla.org/en-US/docs/JavaScript/Typed_arrays">typed arrays</a>).
105These puzzles have been successfully run in Firefox 19, Chrome 26,
106Internet Explorer 10 and Safari 6.
107</div>
108<hr>
109
110${instructions}
111
112${links}
113
114${footer}
115</body>
116</html>
117EOF
118
119 close $outpage;
120}
diff --git a/apps/plugins/puzzles/keymaps.h b/apps/plugins/puzzles/keymaps.h
deleted file mode 100644
index 651ecca250..0000000000
--- a/apps/plugins/puzzles/keymaps.h
+++ /dev/null
@@ -1,206 +0,0 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2014 Franklin Wei, Benjamin Brown
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
16 *
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
19 *
20 ***************************************************************************/
21
22#ifndef _XWORLD_KEYMAPS_H
23#define _XWORLD_KEYMAPS_H
24
25/* Handle the "nice" targets that have directional buttons with normal names */
26#if (CONFIG_KEYPAD == PHILIPS_HDD1630_PAD) || \
27 (CONFIG_KEYPAD == PHILIPS_HDD6330_PAD) || \
28 (CONFIG_KEYPAD == PHILIPS_SA9200_PAD) || \
29 (CONFIG_KEYPAD == CREATIVE_ZENXFI2_PAD) || \
30 (CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD) || \
31 (CONFIG_KEYPAD == SANSA_CONNECT_PAD) || \
32 (CONFIG_KEYPAD == SANSA_C200_PAD) || \
33 (CONFIG_KEYPAD == SANSA_CLIP_PAD) || \
34 (CONFIG_KEYPAD == SANSA_E200_PAD) || \
35 (CONFIG_KEYPAD == SANSA_FUZE_PAD) || \
36 (CONFIG_KEYPAD == SANSA_FUZEPLUS_PAD) || \
37 (CONFIG_KEYPAD == GIGABEAT_PAD) || \
38 (CONFIG_KEYPAD == GIGABEAT_S_PAD) || \
39 (CONFIG_KEYPAD == SAMSUNG_YH92X_PAD) || \
40 (CONFIG_KEYPAD == SAMSUNG_YH820_PAD) || \
41 (CONFIG_KEYPAD == IAUDIO_X5M5_PAD) || \
42 (CONFIG_KEYPAD == CREATIVE_ZEN_PAD) || \
43 (CONFIG_KEYPAD == SONY_NWZ_PAD) || \
44 (CONFIG_KEYPAD == CREATIVEZVM_PAD) || \
45 (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD) || \
46 (CONFIG_KEYPAD == IRIVER_H300_PAD) || \
47 (CONFIG_KEYPAD == HM801_PAD) || \
48 (CONFIG_KEYPAD == HM60X_PAD)
49#define BTN_UP BUTTON_UP
50#define BTN_DOWN BUTTON_DOWN
51#define BTN_LEFT BUTTON_LEFT
52#define BTN_RIGHT BUTTON_RIGHT
53
54#if (CONFIG_KEYPAD == SANSA_FUZEPLUS_PAD)
55#define BTN_UP_LEFT BUTTON_BACK
56#define BTN_UP_RIGHT BUTTON_PLAYPAUSE
57#define BTN_DOWN_LEFT BUTTON_BOTTOMLEFT
58#define BTN_DOWN_RIGHT BUTTON_BOTTOMRIGHT
59#endif
60
61#if (CONFIG_KEYPAD == HM60X_PAD)
62#define BTN_FIRE BUTTON_POWER
63#define BTN_PAUSE BUTTON_SELECT
64#endif
65
66#if (CONFIG_KEYPAD == PHILIPS_HDD1630_PAD) || \
67 (CONFIG_KEYPAD == PHILIPS_HDD6330_PAD) || \
68 (CONFIG_KEYPAD == PHILIPS_SA9200_PAD) || \
69 (CONFIG_KEYPAD == CREATIVE_ZENXFI2_PAD) || \
70 (CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD) || \
71 (CONFIG_KEYPAD == SANSA_CONNECT_PAD) || \
72 (CONFIG_KEYPAD == SANSA_C200_PAD) || \
73 (CONFIG_KEYPAD == SANSA_FUZEPLUS_PAD) || \
74 (CONFIG_KEYPAD == ONDAVX747_PAD)
75#define BTN_FIRE BUTTON_VOL_UP
76#define BTN_PAUSE BUTTON_VOL_DOWN
77
78#elif (CONFIG_KEYPAD == SANSA_FUZE_PAD)
79#define BTN_FIRE BUTTON_HOME
80#define BTN_PAUSE BUTTON_SELECT
81
82#elif (CONFIG_KEYPAD == SAMSUNG_YH92X_PAD)
83#define BTN_FIRE BUTTON_FFWD
84#define BTN_PAUSE BUTTON_REW
85
86#elif (CONFIG_KEYPAD == SANSA_E200_PAD)
87#define BTN_FIRE BUTTON_REC
88#define BTN_PAUSE BUTTON_POWER
89
90#elif (CONFIG_KEYPAD == SANSA_CLIP_PAD)
91#define BTN_FIRE BUTTON_SELECT
92#define BTN_PAUSE BUTTON_POWER
93
94#elif (CONFIG_KEYPAD == CREATIVE_ZEN_PAD)
95#define BTN_FIRE BUTTON_SELECT
96#define BTN_PAUSE BUTTON_BACK
97
98#elif (CONFIG_KEYPAD == CREATIVEZVM_PAD)
99#define BTN_FIRE BUTTON_PLAY
100#define BTN_PAUSE BUTTON_MENU
101
102#elif (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD)
103#define BTN_FIRE BUTTON_USER
104#define BTN_PAUSE BUTTON_MENU
105
106#elif (CONFIG_KEYPAD == SONY_NWZ_PAD)
107#define BTN_FIRE BUTTON_PLAY
108#define BTN_PAUSE BUTTON_BACK
109
110#elif (CONFIG_KEYPAD == IRIVER_H300_PAD)
111#define BTN_FIRE BUTTON_REC
112#define BTN_PAUSE BUTTON_MODE
113
114#elif (CONFIG_KEYPAD == HM801_PAD)
115#define BTN_FIRE BUTTON_PREV
116#define BTN_PAUSE BUTTON_NEXT
117
118#elif (CONFIG_KEYPAD == SAMSUNG_YH820_PAD) || \
119 (CONFIG_KEYPAD == IAUDIO_X5M5_PAD)
120#define BTN_FIRE BUTTON_REC
121#define BTN_PAUSE BUTTON_PLAY
122
123#elif (CONFIG_KEYPAD == GIGABEAT_PAD) || \
124 (CONFIG_KEYPAD == GIGABEAT_S_PAD)
125#define BTN_FIRE BUTTON_VOL_UP
126#define BTN_PAUSE BUTTON_MENU
127/* #if CONFIG_KEYPAD == PHILIPS_HDD1630_PAD */
128#endif
129
130/* ... and now for the bad ones that don't have
131 * standard names for the directional buttons */
132#elif (CONFIG_KEYPAD == PBELL_VIBE500_PAD)
133#define BTN_UP BUTTON_OK
134#define BTN_DOWN BUTTON_CANCEL
135#define BTN_LEFT BUTTON_MENU
136#define BTN_RIGHT BUTTON_PLAY
137#define BTN_FIRE BUTTON_POWER
138#define BTN_PAUSE BUTTON_REC
139
140#elif (CONFIG_KEYPAD == IRIVER_H10_PAD)
141#define BTN_UP BUTTON_SCROLL_UP
142#define BTN_DOWN BUTTON_SCROLL_DOWN
143#define BTN_LEFT BUTTON_LEFT
144#define BTN_RIGHT BUTTON_RIGHT
145#define BTN_FIRE BUTTON_REW
146#define BTN_PAUSE BUTTON_PLAY
147
148#elif (CONFIG_KEYPAD == MROBE500_PAD)
149#define BTN_FIRE BUTTON_POWER
150
151#elif (CONFIG_KEYPAD == MROBE_REMOTE)
152#define BTN_UP BUTTON_RC_PLAY
153#define BTN_DOWN BUTTON_RC_DOWN
154#define BTN_LEFT BUTTON_RC_REW
155#define BTN_RIGHT BUTTON_RC_FF
156
157#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
158 (CONFIG_KEYPAD == IPOD_3G_PAD) || \
159 (CONFIG_KEYPAD == IPOD_1G2G_PAD)
160#define BTN_UP BUTTON_MENU
161#define BTN_DOWN BUTTON_PLAY
162#define BTN_LEFT BUTTON_LEFT
163#define BTN_RIGHT BUTTON_RIGHT
164#define BTN_FIRE BUTTON_SELECT
165#define BTN_PAUSE (BUTTON_MENU | BUTTON_SELECT)
166
167#elif (CONFIG_KEYPAD == ONDAVX777_PAD)
168#define BTN_FIRE BUTTON_POWER
169
170#elif (CONFIG_KEYPAD == COWON_D2_PAD)
171#define BTN_FIRE BUTTON_PLUS
172#define BTN_PAUSE BUTTON_MINUS
173
174#elif (CONFIG_KEYPAD == ONDAVX747_PAD) || \
175 (CONFIG_KEYPAD == DX50_PAD)
176#define BTN_LEFT BUTTON_LEFT
177#define BTN_RIGHT BUTTON_RIGHT
178#define BTN_FIRE BUTTON_BOTTOMLEFT
179#define BTN_PAUSE BUTTON_TOPLEFT
180
181#else
182#error Unsupported keypad
183#endif
184
185#ifdef HAVE_TOUCHSCREEN
186#define BTN_UP BUTTON_TOPMIDDLE
187#define BTN_DOWN BUTTON_BOTTOMMIDDLE
188#define BTN_LEFT BUTTON_LEFT
189#define BTN_RIGHT BUTTON_RIGHT
190
191#if (CONFIG_KEYPAD == MROBE500_PAD) || \
192 (CONFIG_KEYPAD == ONDAVX777_PAD)
193#define BTN_PAUSE BUTTON_BOTTOMLEFT
194
195#elif (CONFIG_KEYPAD != COWON_D2_PAD) && \
196 (CONFIG_KEYPAD != DX50_PAD) && \
197 (CONFIG_KEYPAD != ONDAVX777_PAD)
198#define BTN_FIRE BUTTON_BOTTOMLEFT
199#define BTN_PAUSE BUTTON_TOPLEFT
200#endif
201
202/* HAVE_TOUCHSCREEN */
203#endif
204
205/* _XWORLD_KEYMAPS_H */
206#endif
diff --git a/apps/plugins/puzzles/puzzles.make b/apps/plugins/puzzles/puzzles.make
index 8780986a51..87e113efa9 100644
--- a/apps/plugins/puzzles/puzzles.make
+++ b/apps/plugins/puzzles/puzzles.make
@@ -48,9 +48,11 @@ PUZZLESOPTIMIZE := -Os # tiny plugin buffer
48endif 48endif
49 49
50# we suppress all warnings 50# we suppress all warnings
51PUZZLESFLAGS = $(filter-out -O%,$(PLUGINFLAGS)) $(PUZZLESOPTIMIZE) \ 51PUZZLESFLAGS = -I$(PUZZLES_SRCDIR)/dummy \
52 -Wno-unused-parameter -Wno-sign-compare -Wno-strict-aliasing -w \ 52 $(filter-out -O%,$(PLUGINFLAGS)) $(PUZZLESOPTIMIZE) \
53 -DFOR_REAL -I$(PUZZLES_SRCDIR) 53 -Wno-unused-parameter -Wno-sign-compare -Wno-strict-aliasing \
54 -DFOR_REAL -I$(PUZZLES_SRCDIR)/src \
55 -include $(PUZZLES_SRCDIR)/rbcompat.h
54ifdef PUZZLES_COMBINED 56ifdef PUZZLES_COMBINED
55PUZZLESFLAGS += -DCOMBINED 57PUZZLESFLAGS += -DCOMBINED
56endif 58endif
@@ -71,11 +73,11 @@ $(PUZZLES_OBJDIR)/puzzles.ovl: $(PUZZLES_OBJ) $(PUZZLES_OUTLDS) $(TLSFLIB)
71 -lgcc $(PUZZLES_OVLFLAGS) 73 -lgcc $(PUZZLES_OVLFLAGS)
72 $(call PRINTS,LD $(@F))$(call objcopy,$(basename $@).elf,$@) 74 $(call PRINTS,LD $(@F))$(call objcopy,$(basename $@).elf,$@)
73else 75else
74$(PUZZLES_OBJDIR)/sgt-%.rock: $(PUZZLES_OBJDIR)/%.o $(PUZZLES_SHARED_OBJ) $(TLSFLIB) 76$(PUZZLES_OBJDIR)/sgt-%.rock: $(PUZZLES_OBJDIR)/src/%.o $(PUZZLES_SHARED_OBJ) $(TLSFLIB)
75 $(call PRINTS,LD $(@F))$(CC) $(PLUGINFLAGS) -o $(PUZZLES_OBJDIR)/$*.elf \ 77 $(call PRINTS,LD $(@F))$(CC) $(PLUGINFLAGS) -o $(PUZZLES_OBJDIR)/$*.elf \
76 $(filter %.o, $^) \ 78 $(filter %.o, $^) \
77 $(filter %.a, $+) \ 79 $(filter %.a, $+) \
78 -lgcc $(filter-out -Wl%.map, $(PLUGINLDFLAGS)) -Wl,-Map,$(PUZZLES_OBJDIR)/$*.map 80 -lgcc $(filter-out -Wl%.map, $(PLUGINLDFLAGS)) -Wl,-Map,$(PUZZLES_OBJDIR)/src/$*.map
79 $(SILENT)$(call objcopy,$(PUZZLES_OBJDIR)/$*.elf,$@) 81 $(SILENT)$(call objcopy,$(PUZZLES_OBJDIR)/$*.elf,$@)
80endif 82endif
81 83
@@ -87,3 +89,7 @@ $(PUZZLES_OBJDIR)/%.o: $(PUZZLES_SRCDIR)/%.c $(PUZZLES_SRCDIR)/puzzles.make
87$(PUZZLES_OBJDIR)/unfinished/%.o: $(PUZZLES_SRCDIR)/unfinished/%.c $(PUZZLES_SRCDIR)/puzzles.make 89$(PUZZLES_OBJDIR)/unfinished/%.o: $(PUZZLES_SRCDIR)/unfinished/%.c $(PUZZLES_SRCDIR)/puzzles.make
88 $(SILENT)mkdir -p $(dir $@) 90 $(SILENT)mkdir -p $(dir $@)
89 $(call PRINTS,CC $(subst $(ROOTDIR)/,,$<))$(CC) -I$(dir $<) $(PUZZLESFLAGS) -c $< -o $@ 91 $(call PRINTS,CC $(subst $(ROOTDIR)/,,$<))$(CC) -I$(dir $<) $(PUZZLESFLAGS) -c $< -o $@
92
93$(PUZZLES_OBJDIR)/src/%.o: $(PUZZLES_SRCDIR)/src/%.c $(PUZZLES_SRCDIR)/puzzles.make
94 $(SILENT)mkdir -p $(dir $@)
95 $(call PRINTS,CC $(subst $(ROOTDIR)/,,$<))$(CC) -I$(dir $<) $(PUZZLESFLAGS) -c $< -o $@
diff --git a/apps/plugins/puzzles/rbcompat.h b/apps/plugins/puzzles/rbcompat.h
index 148aaef073..4bb9f39ca7 100644
--- a/apps/plugins/puzzles/rbcompat.h
+++ b/apps/plugins/puzzles/rbcompat.h
@@ -1,5 +1,11 @@
1#ifndef __RBCOMPAT_H__
2#define __RBCOMPAT_H__
3
1#include "plugin.h" 4#include "plugin.h"
2#include "rbassert.h" 5#include "rbassert.h"
6#include "lib/pluginlib_exit.h"
7
8#include <tlsf.h>
3 9
4int sprintf_wrapper(char *str, const char *fmt, ...); 10int sprintf_wrapper(char *str, const char *fmt, ...);
5char *getenv_wrapper(const char *c); 11char *getenv_wrapper(const char *c);
@@ -60,3 +66,9 @@ double acos_wrapper(double x);
60#define strtoq strtoq_wrapper 66#define strtoq strtoq_wrapper
61#define strtouq strtouq_wrapper 67#define strtouq strtouq_wrapper
62#define vsprintf vsprintf_wrapper 68#define vsprintf vsprintf_wrapper
69
70#define abs(x) ((x)<0?-(x):(x))
71
72/* work around compilation error */
73typedef void FILE;
74#endif
diff --git a/apps/plugins/puzzles/malloc.c b/apps/plugins/puzzles/rbmalloc.c
index 47a7137459..5bf914ff87 100644
--- a/apps/plugins/puzzles/malloc.c
+++ b/apps/plugins/puzzles/rbmalloc.c
@@ -4,7 +4,7 @@
4 4
5#include <stdlib.h> 5#include <stdlib.h>
6#include <string.h> 6#include <string.h>
7#include "puzzles.h" 7#include "src/puzzles.h"
8 8
9/* 9/*
10 * smalloc should guarantee to return a useful pointer - Halibut 10 * smalloc should guarantee to return a useful pointer - Halibut
diff --git a/apps/plugins/puzzles/rbwrappers.c b/apps/plugins/puzzles/rbwrappers.c
index e595cf93d1..4fbfdc4e60 100644
--- a/apps/plugins/puzzles/rbwrappers.c
+++ b/apps/plugins/puzzles/rbwrappers.c
@@ -1346,9 +1346,12 @@ double scalbn_wrapper (double x, int n)
1346 if (k > 0) /* normal result */ 1346 if (k > 0) /* normal result */
1347 {__HI(x) = (hx&0x800fffff)|(k<<20); return x;} 1347 {__HI(x) = (hx&0x800fffff)|(k<<20); return x;}
1348 if (k <= -54) 1348 if (k <= -54)
1349 {
1349 if (n > 50000) /* in case integer overflow in n+k */ 1350 if (n > 50000) /* in case integer overflow in n+k */
1350 return huge*copysign_wrapper(huge,x); /*overflow*/ 1351 return huge*copysign_wrapper(huge,x); /*overflow*/
1351 else return tiny*copysign_wrapper(tiny,x); /*underflow*/ 1352 else
1353 return tiny*copysign_wrapper(tiny,x); /*underflow*/
1354 }
1352 k += 54; /* subnormal result */ 1355 k += 54; /* subnormal result */
1353 __HI(x) = (hx&0x800fffff)|(k<<20); 1356 __HI(x) = (hx&0x800fffff)|(k<<20);
1354 return x*twom54; 1357 return x*twom54;
@@ -1608,18 +1611,6 @@ static void bcopy_wrapper(const void *src, void *dst, size_t n)
1608} 1611}
1609 1612
1610int 1613int
1611sscanf_wrapper(const char *ibuf, const char *fmt, ...)
1612{
1613 va_list ap;
1614 int ret;
1615
1616 va_start(ap, fmt);
1617 ret = rb_vsscanf(ibuf, fmt, ap);
1618 va_end(ap);
1619 return(ret);
1620}
1621
1622int
1623rb_vsscanf(const char *inp, char const *fmt0, va_list ap) 1614rb_vsscanf(const char *inp, char const *fmt0, va_list ap)
1624{ 1615{
1625 int inr; 1616 int inr;
@@ -2065,6 +2056,18 @@ match_failure:
2065 return (nassigned); 2056 return (nassigned);
2066} 2057}
2067 2058
2059int
2060sscanf_wrapper(const char *ibuf, const char *fmt, ...)
2061{
2062 va_list ap;
2063 int ret;
2064
2065 va_start(ap, fmt);
2066 ret = rb_vsscanf(ibuf, fmt, ap);
2067 va_end(ap);
2068 return(ret);
2069}
2070
2068/* 2071/*
2069 * Fill in the given table from the scanset at the given format 2072 * Fill in the given table from the scanset at the given format
2070 * (just after `['). Return a pointer to the character past the 2073 * (just after `['). Return a pointer to the character past the
diff --git a/apps/plugins/puzzles/rockbox.c b/apps/plugins/puzzles/rockbox.c
index 077d5f8fe2..54d24b065b 100644
--- a/apps/plugins/puzzles/rockbox.c
+++ b/apps/plugins/puzzles/rockbox.c
@@ -23,8 +23,8 @@
23 23
24#include "plugin.h" 24#include "plugin.h"
25 25
26#include "puzzles.h" 26#include "src/puzzles.h"
27#include "keymaps.h" 27#include "src/keymaps.h"
28 28
29#ifndef COMBINED 29#ifndef COMBINED
30#include "lib/playback_control.h" 30#include "lib/playback_control.h"
@@ -315,6 +315,7 @@ static void rb_draw_line(void *handle, int x1, int y1, int x2, int y2,
315 draw_antialiased_line(x1, y1, x2, y2); 315 draw_antialiased_line(x1, y1, x2, y2);
316} 316}
317 317
318#if 0
318/* 319/*
319 * draw filled polygon 320 * draw filled polygon
320 * originally by Sebastian Leonhardt (ulmutul) 321 * originally by Sebastian Leonhardt (ulmutul)
@@ -409,6 +410,7 @@ static void v_fillarea(int count, int *pxy)
409 fill_poly_line(i, count, pxy); 410 fill_poly_line(i, count, pxy);
410 } 411 }
411} 412}
413#endif
412 414
413static void rb_draw_poly(void *handle, int *coords, int npoints, 415static void rb_draw_poly(void *handle, int *coords, int npoints,
414 int fillcolor, int outlinecolor) 416 int fillcolor, int outlinecolor)
@@ -916,7 +918,7 @@ static bool config_menu(void)
916 config_item old; 918 config_item old;
917 int pos = rb->gui_synclist_get_sel_pos(&list); 919 int pos = rb->gui_synclist_get_sel_pos(&list);
918 memcpy(&old, config + pos, sizeof(old)); 920 memcpy(&old, config + pos, sizeof(old));
919 char *old_str; 921 char *old_str = NULL;
920 if(old.type == C_STRING) 922 if(old.type == C_STRING)
921 old_str = dupstr(old.sval); 923 old_str = dupstr(old.sval);
922 bool freed_str = do_configure_item(config + pos); 924 bool freed_str = do_configure_item(config + pos);
@@ -928,13 +930,13 @@ static bool config_menu(void)
928 if(freed_str) 930 if(freed_str)
929 config[pos].sval = old_str; 931 config[pos].sval = old_str;
930 } 932 }
931 else if(old.type == C_STRING)
932 {
933 /* success, and we duplicated the old string, so free it */
934 sfree(old_str);
935 }
936 else 933 else
937 { 934 {
935 if(old.type == C_STRING)
936 {
937 /* success, and we duplicated the old string, so free it */
938 sfree(old_str);
939 }
938 success = true; 940 success = true;
939 } 941 }
940 break; 942 break;
@@ -956,33 +958,29 @@ done:
956 958
957const char *preset_formatter(int sel, void *data, char *buf, size_t len) 959const char *preset_formatter(int sel, void *data, char *buf, size_t len)
958{ 960{
959 char *name; 961 struct preset_menu *menu = data;
960 game_params *junk; 962 rb->snprintf(buf, len, "%s", menu->entries[sel].title);
961 midend_fetch_preset(me, sel, &name, &junk);
962 rb->strlcpy(buf, name, len);
963 return buf; 963 return buf;
964} 964}
965 965
966static bool presets_menu(void) 966/* main worker function */
967static bool do_preset_menu(struct preset_menu *menu, char *title)
967{ 968{
968 if(!midend_num_presets(me)) 969 if(!menu->n_entries)
969 {
970 rb->splash(HZ, "No presets!");
971 return false; 970 return false;
972 }
973 971
974 /* display a list */ 972 /* display a list */
975 struct gui_synclist list; 973 struct gui_synclist list;
976 974
977 rb->gui_synclist_init(&list, &preset_formatter, NULL, false, 1, NULL); 975 rb->gui_synclist_init(&list, &preset_formatter, menu, false, 1, NULL);
978 rb->gui_synclist_set_icon_callback(&list, NULL); 976 rb->gui_synclist_set_icon_callback(&list, NULL);
979 rb->gui_synclist_set_nb_items(&list, midend_num_presets(me)); 977 rb->gui_synclist_set_nb_items(&list, menu->n_entries);
980 rb->gui_synclist_limit_scroll(&list, false); 978 rb->gui_synclist_limit_scroll(&list, false);
981 979
982 int current = midend_which_preset(me); 980 rb->gui_synclist_select_item(&list, 0); /* we don't start with the current one selected */
983 rb->gui_synclist_select_item(&list, current >= 0 ? current : 0);
984 981
985 rb->gui_synclist_set_title(&list, "Game Type", NOICON); 982 char def[] = "Game Type";
983 rb->gui_synclist_set_title(&list, title ? title : def, NOICON);
986 while(1) 984 while(1)
987 { 985 {
988 rb->gui_synclist_draw(&list); 986 rb->gui_synclist_draw(&list);
@@ -994,11 +992,19 @@ static bool presets_menu(void)
994 case ACTION_STD_OK: 992 case ACTION_STD_OK:
995 { 993 {
996 int sel = rb->gui_synclist_get_sel_pos(&list); 994 int sel = rb->gui_synclist_get_sel_pos(&list);
997 char *junk; 995 struct preset_menu_entry *entry = menu->entries + sel;
998 game_params *params; 996 if(entry->params)
999 midend_fetch_preset(me, sel, &junk, &params); 997 {
1000 midend_set_params(me, params); 998 midend_set_params(me, entry->params);
1001 return true; 999 return true;
1000 }
1001 else
1002 {
1003 /* recurse */
1004 if(do_preset_menu(entry->submenu, entry->title))
1005 return true;
1006 }
1007 break;
1002 } 1008 }
1003 case ACTION_STD_PREV: 1009 case ACTION_STD_PREV:
1004 case ACTION_STD_CANCEL: 1010 case ACTION_STD_CANCEL:
@@ -1009,6 +1015,11 @@ static bool presets_menu(void)
1009 } 1015 }
1010} 1016}
1011 1017
1018static bool presets_menu(void)
1019{
1020 return do_preset_menu(midend_get_presets(me, NULL), NULL);
1021}
1022
1012static const struct { 1023static const struct {
1013 const char *game, *help; 1024 const char *game, *help;
1014} quick_help_text[] = { 1025} quick_help_text[] = {
@@ -1212,7 +1223,7 @@ static int pausemenu_cb(int action, const struct menu_item_ex *this_item)
1212 return ACTION_EXIT_MENUITEM; 1223 return ACTION_EXIT_MENUITEM;
1213#endif 1224#endif
1214 case 9: 1225 case 9:
1215 if(!midend_num_presets(me)) 1226 if(!midend_get_presets(me, NULL)->n_entries)
1216 return ACTION_EXIT_MENUITEM; 1227 return ACTION_EXIT_MENUITEM;
1217 break; 1228 break;
1218 case 10: 1229 case 10:
@@ -1808,7 +1819,7 @@ static int mainmenu_cb(int action, const struct menu_item_ex *this_item)
1808 return ACTION_EXIT_MENUITEM; 1819 return ACTION_EXIT_MENUITEM;
1809#endif 1820#endif
1810 case 5: 1821 case 5:
1811 if(!midend_num_presets(me)) 1822 if(!midend_get_presets(me, NULL)->n_entries)
1812 return ACTION_EXIT_MENUITEM; 1823 return ACTION_EXIT_MENUITEM;
1813 break; 1824 break;
1814 case 6: 1825 case 6:
diff --git a/apps/plugins/puzzles/Buildscr b/apps/plugins/puzzles/src/Buildscr
index 910981f079..910981f079 100644
--- a/apps/plugins/puzzles/Buildscr
+++ b/apps/plugins/puzzles/src/Buildscr
diff --git a/apps/plugins/puzzles/CHECKLST.txt b/apps/plugins/puzzles/src/CHECKLST.txt
index 2bef909e14..2bef909e14 100644
--- a/apps/plugins/puzzles/CHECKLST.txt
+++ b/apps/plugins/puzzles/src/CHECKLST.txt
diff --git a/apps/plugins/puzzles/LICENCE b/apps/plugins/puzzles/src/LICENCE
index 4235005ea7..4235005ea7 100644
--- a/apps/plugins/puzzles/LICENCE
+++ b/apps/plugins/puzzles/src/LICENCE
diff --git a/apps/plugins/puzzles/src/Makefile b/apps/plugins/puzzles/src/Makefile
new file mode 100644
index 0000000000..09acd2dd39
--- /dev/null
+++ b/apps/plugins/puzzles/src/Makefile
@@ -0,0 +1,727 @@
1# Makefile for puzzles under X/GTK and Unix.
2#
3# This file was created by `mkfiles.pl' from the `Recipe' file.
4# DO NOT EDIT THIS FILE DIRECTLY; edit Recipe or mkfiles.pl instead.
5
6# You can define this path to point at your tools if you need to
7# TOOLPATH = /opt/gcc/bin
8CC := $(TOOLPATH)$(CC)
9# You can manually set this to `gtk-config' or `pkg-config gtk+-1.2'
10# (depending on what works on your system) if you want to enforce
11# building with GTK 1.2, or you can set it to `pkg-config gtk+-2.0'
12# if you want to enforce 2.0. The default is to try 2.0 and fall back
13# to 1.2 if it isn't found.
14GTK_CONFIG = sh -c 'pkg-config gtk+-2.0 $$0 2>/dev/null || gtk-config $$0'
15
16CFLAGS := -O2 -Wall -ansi -pedantic -g -I./ -Iicons/ `$(GTK_CONFIG) \
17 --cflags` $(CFLAGS)
18XLIBS = `$(GTK_CONFIG) --libs` -lm
19ULIBS = -lm#
20INSTALL=install
21INSTALL_PROGRAM=$(INSTALL)
22INSTALL_DATA=$(INSTALL)
23prefix=/usr/local
24exec_prefix=$(prefix)
25bindir=$(exec_prefix)/bin
26gamesdir=$(exec_prefix)/games
27mandir=$(prefix)/man
28man1dir=$(mandir)/man1
29
30all: $(BINPREFIX)blackbox $(BINPREFIX)bridges $(BINPREFIX)cube \
31 $(BINPREFIX)dominosa $(BINPREFIX)fifteen \
32 $(BINPREFIX)fifteensolver $(BINPREFIX)filling \
33 $(BINPREFIX)fillingsolver $(BINPREFIX)flip $(BINPREFIX)flood \
34 $(BINPREFIX)galaxies $(BINPREFIX)galaxiespicture \
35 $(BINPREFIX)galaxiessolver $(BINPREFIX)guess \
36 $(BINPREFIX)inertia $(BINPREFIX)keen $(BINPREFIX)keensolver \
37 $(BINPREFIX)latincheck $(BINPREFIX)lightup \
38 $(BINPREFIX)lightupsolver $(BINPREFIX)loopy \
39 $(BINPREFIX)loopysolver $(BINPREFIX)magnets \
40 $(BINPREFIX)magnetssolver $(BINPREFIX)map \
41 $(BINPREFIX)mapsolver $(BINPREFIX)mineobfusc \
42 $(BINPREFIX)mines $(BINPREFIX)net $(BINPREFIX)netslide \
43 $(BINPREFIX)nullgame $(BINPREFIX)obfusc $(BINPREFIX)palisade \
44 $(BINPREFIX)pattern $(BINPREFIX)patternpicture \
45 $(BINPREFIX)patternsolver $(BINPREFIX)pearl \
46 $(BINPREFIX)pearlbench $(BINPREFIX)pegs $(BINPREFIX)range \
47 $(BINPREFIX)rect $(BINPREFIX)samegame $(BINPREFIX)signpost \
48 $(BINPREFIX)signpostsolver $(BINPREFIX)singles \
49 $(BINPREFIX)singlessolver $(BINPREFIX)sixteen \
50 $(BINPREFIX)slant $(BINPREFIX)slantsolver $(BINPREFIX)solo \
51 $(BINPREFIX)solosolver $(BINPREFIX)tents \
52 $(BINPREFIX)tentssolver $(BINPREFIX)towers \
53 $(BINPREFIX)towerssolver $(BINPREFIX)tracks \
54 $(BINPREFIX)twiddle $(BINPREFIX)undead $(BINPREFIX)unequal \
55 $(BINPREFIX)unequalsolver $(BINPREFIX)unruly \
56 $(BINPREFIX)unrulysolver $(BINPREFIX)untangle
57
58$(BINPREFIX)blackbox: blackbox.o drawing.o gtk.o malloc.o midend.o misc.o \
59 no-icon.o printing.o ps.o random.o version.o
60 $(CC) -o $@ blackbox.o drawing.o gtk.o malloc.o midend.o misc.o \
61 no-icon.o printing.o ps.o random.o version.o $(XLFLAGS) \
62 $(XLIBS)
63
64$(BINPREFIX)bridges: bridges.o drawing.o dsf.o findloop.o gtk.o malloc.o \
65 midend.o misc.o no-icon.o printing.o ps.o random.o version.o
66 $(CC) -o $@ bridges.o drawing.o dsf.o findloop.o gtk.o malloc.o \
67 midend.o misc.o no-icon.o printing.o ps.o random.o version.o \
68 $(XLFLAGS) $(XLIBS)
69
70$(BINPREFIX)cube: cube.o drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
71 printing.o ps.o random.o version.o
72 $(CC) -o $@ cube.o drawing.o gtk.o malloc.o midend.o misc.o \
73 no-icon.o printing.o ps.o random.o version.o $(XLFLAGS) \
74 $(XLIBS)
75
76$(BINPREFIX)dominosa: dominosa.o drawing.o gtk.o laydomino.o malloc.o \
77 midend.o misc.o no-icon.o printing.o ps.o random.o version.o
78 $(CC) -o $@ dominosa.o drawing.o gtk.o laydomino.o malloc.o midend.o \
79 misc.o no-icon.o printing.o ps.o random.o version.o \
80 $(XLFLAGS) $(XLIBS)
81
82$(BINPREFIX)fifteen: drawing.o fifteen.o gtk.o malloc.o midend.o misc.o \
83 no-icon.o printing.o ps.o random.o version.o
84 $(CC) -o $@ drawing.o fifteen.o gtk.o malloc.o midend.o misc.o \
85 no-icon.o printing.o ps.o random.o version.o $(XLFLAGS) \
86 $(XLIBS)
87
88$(BINPREFIX)fifteensolver: fifteen2.o malloc.o misc.o nullfe.o random.o
89 $(CC) -o $@ fifteen2.o malloc.o misc.o nullfe.o random.o $(XLFLAGS) \
90 $(ULIBS)
91
92$(BINPREFIX)filling: drawing.o dsf.o filling.o gtk.o malloc.o midend.o \
93 misc.o no-icon.o printing.o ps.o random.o version.o
94 $(CC) -o $@ drawing.o dsf.o filling.o gtk.o malloc.o midend.o misc.o \
95 no-icon.o printing.o ps.o random.o version.o $(XLFLAGS) \
96 $(XLIBS)
97
98$(BINPREFIX)fillingsolver: dsf.o filling2.o malloc.o misc.o nullfe.o \
99 random.o
100 $(CC) -o $@ dsf.o filling2.o malloc.o misc.o nullfe.o random.o \
101 $(XLFLAGS) $(ULIBS)
102
103$(BINPREFIX)flip: drawing.o flip.o gtk.o malloc.o midend.o misc.o no-icon.o \
104 printing.o ps.o random.o tree234.o version.o
105 $(CC) -o $@ drawing.o flip.o gtk.o malloc.o midend.o misc.o \
106 no-icon.o printing.o ps.o random.o tree234.o version.o \
107 $(XLFLAGS) $(XLIBS)
108
109$(BINPREFIX)flood: drawing.o flood.o gtk.o malloc.o midend.o misc.o \
110 no-icon.o printing.o ps.o random.o version.o
111 $(CC) -o $@ drawing.o flood.o gtk.o malloc.o midend.o misc.o \
112 no-icon.o printing.o ps.o random.o version.o $(XLFLAGS) \
113 $(XLIBS)
114
115$(BINPREFIX)galaxies: drawing.o dsf.o galaxies.o gtk.o malloc.o midend.o \
116 misc.o no-icon.o printing.o ps.o random.o version.o
117 $(CC) -o $@ drawing.o dsf.o galaxies.o gtk.o malloc.o midend.o \
118 misc.o no-icon.o printing.o ps.o random.o version.o \
119 $(XLFLAGS) $(XLIBS)
120
121$(BINPREFIX)galaxiespicture: dsf.o galaxie4.o malloc.o misc.o nullfe.o \
122 random.o
123 $(CC) -o $@ dsf.o galaxie4.o malloc.o misc.o nullfe.o random.o -lm \
124 $(XLFLAGS) $(ULIBS)
125
126$(BINPREFIX)galaxiessolver: dsf.o galaxie2.o malloc.o misc.o nullfe.o \
127 random.o
128 $(CC) -o $@ dsf.o galaxie2.o malloc.o misc.o nullfe.o random.o -lm \
129 $(XLFLAGS) $(ULIBS)
130
131$(BINPREFIX)guess: drawing.o gtk.o guess.o malloc.o midend.o misc.o \
132 no-icon.o printing.o ps.o random.o version.o
133 $(CC) -o $@ drawing.o gtk.o guess.o malloc.o midend.o misc.o \
134 no-icon.o printing.o ps.o random.o version.o $(XLFLAGS) \
135 $(XLIBS)
136
137$(BINPREFIX)inertia: drawing.o gtk.o inertia.o malloc.o midend.o misc.o \
138 no-icon.o printing.o ps.o random.o version.o
139 $(CC) -o $@ drawing.o gtk.o inertia.o malloc.o midend.o misc.o \
140 no-icon.o printing.o ps.o random.o version.o $(XLFLAGS) \
141 $(XLIBS)
142
143$(BINPREFIX)keen: drawing.o dsf.o gtk.o keen.o latin.o malloc.o maxflow.o \
144 midend.o misc.o no-icon.o printing.o ps.o random.o tree234.o \
145 version.o
146 $(CC) -o $@ drawing.o dsf.o gtk.o keen.o latin.o malloc.o maxflow.o \
147 midend.o misc.o no-icon.o printing.o ps.o random.o tree234.o \
148 version.o $(XLFLAGS) $(XLIBS)
149
150$(BINPREFIX)keensolver: dsf.o keen2.o latin6.o malloc.o maxflow.o misc.o \
151 nullfe.o random.o tree234.o
152 $(CC) -o $@ dsf.o keen2.o latin6.o malloc.o maxflow.o misc.o \
153 nullfe.o random.o tree234.o $(XLFLAGS) $(ULIBS)
154
155$(BINPREFIX)latincheck: latin8.o malloc.o maxflow.o misc.o nullfe.o random.o \
156 tree234.o
157 $(CC) -o $@ latin8.o malloc.o maxflow.o misc.o nullfe.o random.o \
158 tree234.o $(XLFLAGS) $(ULIBS)
159
160$(BINPREFIX)lightup: combi.o drawing.o gtk.o lightup.o malloc.o midend.o \
161 misc.o no-icon.o printing.o ps.o random.o version.o
162 $(CC) -o $@ combi.o drawing.o gtk.o lightup.o malloc.o midend.o \
163 misc.o no-icon.o printing.o ps.o random.o version.o \
164 $(XLFLAGS) $(XLIBS)
165
166$(BINPREFIX)lightupsolver: combi.o lightup2.o malloc.o misc.o nullfe.o \
167 random.o
168 $(CC) -o $@ combi.o lightup2.o malloc.o misc.o nullfe.o random.o \
169 $(XLFLAGS) $(ULIBS)
170
171$(BINPREFIX)loopy: drawing.o dsf.o grid.o gtk.o loopgen.o loopy.o malloc.o \
172 midend.o misc.o no-icon.o penrose.o printing.o ps.o random.o \
173 tree234.o version.o
174 $(CC) -o $@ drawing.o dsf.o grid.o gtk.o loopgen.o loopy.o malloc.o \
175 midend.o misc.o no-icon.o penrose.o printing.o ps.o random.o \
176 tree234.o version.o $(XLFLAGS) $(XLIBS)
177
178$(BINPREFIX)loopysolver: dsf.o grid.o loopgen.o loopy2.o malloc.o misc.o \
179 nullfe.o penrose.o random.o tree234.o
180 $(CC) -o $@ dsf.o grid.o loopgen.o loopy2.o malloc.o misc.o nullfe.o \
181 penrose.o random.o tree234.o -lm $(XLFLAGS) $(ULIBS)
182
183$(BINPREFIX)magnets: drawing.o gtk.o laydomino.o magnets.o malloc.o midend.o \
184 misc.o no-icon.o printing.o ps.o random.o version.o
185 $(CC) -o $@ drawing.o gtk.o laydomino.o magnets.o malloc.o midend.o \
186 misc.o no-icon.o printing.o ps.o random.o version.o \
187 $(XLFLAGS) $(XLIBS)
188
189$(BINPREFIX)magnetssolver: laydomino.o magnets2.o malloc.o misc.o nullfe.o \
190 random.o
191 $(CC) -o $@ laydomino.o magnets2.o malloc.o misc.o nullfe.o random.o \
192 -lm $(XLFLAGS) $(ULIBS)
193
194$(BINPREFIX)map: drawing.o dsf.o gtk.o malloc.o map.o midend.o misc.o \
195 no-icon.o printing.o ps.o random.o version.o
196 $(CC) -o $@ drawing.o dsf.o gtk.o malloc.o map.o midend.o misc.o \
197 no-icon.o printing.o ps.o random.o version.o $(XLFLAGS) \
198 $(XLIBS)
199
200$(BINPREFIX)mapsolver: dsf.o malloc.o map2.o misc.o nullfe.o random.o
201 $(CC) -o $@ dsf.o malloc.o map2.o misc.o nullfe.o random.o -lm \
202 $(XLFLAGS) $(ULIBS)
203
204$(BINPREFIX)mineobfusc: malloc.o mines2.o misc.o nullfe.o random.o tree234.o
205 $(CC) -o $@ malloc.o mines2.o misc.o nullfe.o random.o tree234.o \
206 $(XLFLAGS) $(ULIBS)
207
208$(BINPREFIX)mines: drawing.o gtk.o malloc.o midend.o mines.o misc.o \
209 no-icon.o printing.o ps.o random.o tree234.o version.o
210 $(CC) -o $@ drawing.o gtk.o malloc.o midend.o mines.o misc.o \
211 no-icon.o printing.o ps.o random.o tree234.o version.o \
212 $(XLFLAGS) $(XLIBS)
213
214$(BINPREFIX)net: drawing.o dsf.o findloop.o gtk.o malloc.o midend.o misc.o \
215 net.o no-icon.o printing.o ps.o random.o tree234.o version.o
216 $(CC) -o $@ drawing.o dsf.o findloop.o gtk.o malloc.o midend.o \
217 misc.o net.o no-icon.o printing.o ps.o random.o tree234.o \
218 version.o $(XLFLAGS) $(XLIBS)
219
220$(BINPREFIX)netslide: drawing.o gtk.o malloc.o midend.o misc.o netslide.o \
221 no-icon.o printing.o ps.o random.o tree234.o version.o
222 $(CC) -o $@ drawing.o gtk.o malloc.o midend.o misc.o netslide.o \
223 no-icon.o printing.o ps.o random.o tree234.o version.o \
224 $(XLFLAGS) $(XLIBS)
225
226$(BINPREFIX)nullgame: drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
227 nullgame.o printing.o ps.o random.o version.o
228 $(CC) -o $@ drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
229 nullgame.o printing.o ps.o random.o version.o $(XLFLAGS) \
230 $(XLIBS)
231
232$(BINPREFIX)obfusc: malloc.o misc.o nullfe.o obfusc.o random.o
233 $(CC) -o $@ malloc.o misc.o nullfe.o obfusc.o random.o $(XLFLAGS) \
234 $(ULIBS)
235
236$(BINPREFIX)palisade: divvy.o drawing.o dsf.o gtk.o malloc.o midend.o misc.o \
237 no-icon.o palisade.o printing.o ps.o random.o version.o
238 $(CC) -o $@ divvy.o drawing.o dsf.o gtk.o malloc.o midend.o misc.o \
239 no-icon.o palisade.o printing.o ps.o random.o version.o \
240 $(XLFLAGS) $(XLIBS)
241
242$(BINPREFIX)pattern: drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
243 pattern.o printing.o ps.o random.o version.o
244 $(CC) -o $@ drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
245 pattern.o printing.o ps.o random.o version.o $(XLFLAGS) \
246 $(XLIBS)
247
248$(BINPREFIX)patternpicture: malloc.o misc.o nullfe.o pattern4.o random.o
249 $(CC) -o $@ malloc.o misc.o nullfe.o pattern4.o random.o $(XLFLAGS) \
250 $(ULIBS)
251
252$(BINPREFIX)patternsolver: malloc.o misc.o nullfe.o pattern2.o random.o
253 $(CC) -o $@ malloc.o misc.o nullfe.o pattern2.o random.o $(XLFLAGS) \
254 $(ULIBS)
255
256$(BINPREFIX)pearl: drawing.o dsf.o grid.o gtk.o loopgen.o malloc.o midend.o \
257 misc.o no-icon.o pearl.o penrose.o printing.o ps.o random.o \
258 tdq.o tree234.o version.o
259 $(CC) -o $@ drawing.o dsf.o grid.o gtk.o loopgen.o malloc.o midend.o \
260 misc.o no-icon.o pearl.o penrose.o printing.o ps.o random.o \
261 tdq.o tree234.o version.o $(XLFLAGS) $(XLIBS)
262
263$(BINPREFIX)pearlbench: dsf.o grid.o loopgen.o malloc.o misc.o nullfe.o \
264 pearl2.o penrose.o random.o tdq.o tree234.o
265 $(CC) -o $@ dsf.o grid.o loopgen.o malloc.o misc.o nullfe.o pearl2.o \
266 penrose.o random.o tdq.o tree234.o -lm $(XLFLAGS) $(ULIBS)
267
268$(BINPREFIX)pegs: drawing.o gtk.o malloc.o midend.o misc.o no-icon.o pegs.o \
269 printing.o ps.o random.o tree234.o version.o
270 $(CC) -o $@ drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
271 pegs.o printing.o ps.o random.o tree234.o version.o \
272 $(XLFLAGS) $(XLIBS)
273
274$(BINPREFIX)range: drawing.o dsf.o gtk.o malloc.o midend.o misc.o no-icon.o \
275 printing.o ps.o random.o range.o version.o
276 $(CC) -o $@ drawing.o dsf.o gtk.o malloc.o midend.o misc.o no-icon.o \
277 printing.o ps.o random.o range.o version.o $(XLFLAGS) \
278 $(XLIBS)
279
280$(BINPREFIX)rect: drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
281 printing.o ps.o random.o rect.o version.o
282 $(CC) -o $@ drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
283 printing.o ps.o random.o rect.o version.o $(XLFLAGS) \
284 $(XLIBS)
285
286$(BINPREFIX)samegame: drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
287 printing.o ps.o random.o samegame.o version.o
288 $(CC) -o $@ drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
289 printing.o ps.o random.o samegame.o version.o $(XLFLAGS) \
290 $(XLIBS)
291
292$(BINPREFIX)signpost: drawing.o dsf.o gtk.o malloc.o midend.o misc.o \
293 no-icon.o printing.o ps.o random.o signpost.o version.o
294 $(CC) -o $@ drawing.o dsf.o gtk.o malloc.o midend.o misc.o no-icon.o \
295 printing.o ps.o random.o signpost.o version.o $(XLFLAGS) \
296 $(XLIBS)
297
298$(BINPREFIX)signpostsolver: dsf.o malloc.o misc.o nullfe.o random.o \
299 signpos2.o
300 $(CC) -o $@ dsf.o malloc.o misc.o nullfe.o random.o signpos2.o -lm \
301 $(XLFLAGS) $(ULIBS)
302
303$(BINPREFIX)singles: drawing.o dsf.o gtk.o latin.o malloc.o maxflow.o \
304 midend.o misc.o no-icon.o printing.o ps.o random.o singles.o \
305 tree234.o version.o
306 $(CC) -o $@ drawing.o dsf.o gtk.o latin.o malloc.o maxflow.o \
307 midend.o misc.o no-icon.o printing.o ps.o random.o singles.o \
308 tree234.o version.o $(XLFLAGS) $(XLIBS)
309
310$(BINPREFIX)singlessolver: dsf.o latin.o malloc.o maxflow.o misc.o nullfe.o \
311 random.o singles3.o tree234.o
312 $(CC) -o $@ dsf.o latin.o malloc.o maxflow.o misc.o nullfe.o \
313 random.o singles3.o tree234.o $(XLFLAGS) $(ULIBS)
314
315$(BINPREFIX)sixteen: drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
316 printing.o ps.o random.o sixteen.o version.o
317 $(CC) -o $@ drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
318 printing.o ps.o random.o sixteen.o version.o $(XLFLAGS) \
319 $(XLIBS)
320
321$(BINPREFIX)slant: drawing.o dsf.o findloop.o gtk.o malloc.o midend.o misc.o \
322 no-icon.o printing.o ps.o random.o slant.o version.o
323 $(CC) -o $@ drawing.o dsf.o findloop.o gtk.o malloc.o midend.o \
324 misc.o no-icon.o printing.o ps.o random.o slant.o version.o \
325 $(XLFLAGS) $(XLIBS)
326
327$(BINPREFIX)slantsolver: dsf.o findloop.o malloc.o misc.o nullfe.o random.o \
328 slant2.o
329 $(CC) -o $@ dsf.o findloop.o malloc.o misc.o nullfe.o random.o \
330 slant2.o $(XLFLAGS) $(ULIBS)
331
332$(BINPREFIX)solo: divvy.o drawing.o dsf.o gtk.o malloc.o midend.o misc.o \
333 no-icon.o printing.o ps.o random.o solo.o version.o
334 $(CC) -o $@ divvy.o drawing.o dsf.o gtk.o malloc.o midend.o misc.o \
335 no-icon.o printing.o ps.o random.o solo.o version.o \
336 $(XLFLAGS) $(XLIBS)
337
338$(BINPREFIX)solosolver: divvy.o dsf.o malloc.o misc.o nullfe.o random.o \
339 solo2.o
340 $(CC) -o $@ divvy.o dsf.o malloc.o misc.o nullfe.o random.o solo2.o \
341 $(XLFLAGS) $(ULIBS)
342
343$(BINPREFIX)tents: drawing.o dsf.o gtk.o malloc.o maxflow.o midend.o misc.o \
344 no-icon.o printing.o ps.o random.o tents.o version.o
345 $(CC) -o $@ drawing.o dsf.o gtk.o malloc.o maxflow.o midend.o misc.o \
346 no-icon.o printing.o ps.o random.o tents.o version.o \
347 $(XLFLAGS) $(XLIBS)
348
349$(BINPREFIX)tentssolver: dsf.o malloc.o maxflow.o misc.o nullfe.o random.o \
350 tents3.o
351 $(CC) -o $@ dsf.o malloc.o maxflow.o misc.o nullfe.o random.o \
352 tents3.o $(XLFLAGS) $(ULIBS)
353
354$(BINPREFIX)towers: drawing.o gtk.o latin.o malloc.o maxflow.o midend.o \
355 misc.o no-icon.o printing.o ps.o random.o towers.o tree234.o \
356 version.o
357 $(CC) -o $@ drawing.o gtk.o latin.o malloc.o maxflow.o midend.o \
358 misc.o no-icon.o printing.o ps.o random.o towers.o tree234.o \
359 version.o $(XLFLAGS) $(XLIBS)
360
361$(BINPREFIX)towerssolver: latin6.o malloc.o maxflow.o misc.o nullfe.o \
362 random.o towers2.o tree234.o
363 $(CC) -o $@ latin6.o malloc.o maxflow.o misc.o nullfe.o random.o \
364 towers2.o tree234.o $(XLFLAGS) $(ULIBS)
365
366$(BINPREFIX)tracks: drawing.o dsf.o findloop.o gtk.o malloc.o midend.o \
367 misc.o no-icon.o printing.o ps.o random.o tracks.o version.o
368 $(CC) -o $@ drawing.o dsf.o findloop.o gtk.o malloc.o midend.o \
369 misc.o no-icon.o printing.o ps.o random.o tracks.o version.o \
370 $(XLFLAGS) $(XLIBS)
371
372$(BINPREFIX)twiddle: drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
373 printing.o ps.o random.o twiddle.o version.o
374 $(CC) -o $@ drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
375 printing.o ps.o random.o twiddle.o version.o $(XLFLAGS) \
376 $(XLIBS)
377
378$(BINPREFIX)undead: drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
379 printing.o ps.o random.o undead.o version.o
380 $(CC) -o $@ drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
381 printing.o ps.o random.o undead.o version.o $(XLFLAGS) \
382 $(XLIBS)
383
384$(BINPREFIX)unequal: drawing.o gtk.o latin.o malloc.o maxflow.o midend.o \
385 misc.o no-icon.o printing.o ps.o random.o tree234.o \
386 unequal.o version.o
387 $(CC) -o $@ drawing.o gtk.o latin.o malloc.o maxflow.o midend.o \
388 misc.o no-icon.o printing.o ps.o random.o tree234.o \
389 unequal.o version.o $(XLFLAGS) $(XLIBS)
390
391$(BINPREFIX)unequalsolver: latin6.o malloc.o maxflow.o misc.o nullfe.o \
392 random.o tree234.o unequal2.o
393 $(CC) -o $@ latin6.o malloc.o maxflow.o misc.o nullfe.o random.o \
394 tree234.o unequal2.o $(XLFLAGS) $(ULIBS)
395
396$(BINPREFIX)unruly: drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
397 printing.o ps.o random.o unruly.o version.o
398 $(CC) -o $@ drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
399 printing.o ps.o random.o unruly.o version.o $(XLFLAGS) \
400 $(XLIBS)
401
402$(BINPREFIX)unrulysolver: malloc.o misc.o nullfe.o random.o unruly2.o
403 $(CC) -o $@ malloc.o misc.o nullfe.o random.o unruly2.o $(XLFLAGS) \
404 $(ULIBS)
405
406$(BINPREFIX)untangle: drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
407 printing.o ps.o random.o tree234.o untangle.o version.o
408 $(CC) -o $@ drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
409 printing.o ps.o random.o tree234.o untangle.o version.o \
410 $(XLFLAGS) $(XLIBS)
411
412blackbox.o: ./blackbox.c ./puzzles.h
413 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
414blackbo3.o: ./blackbox.c ./puzzles.h
415 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
416bridges.o: ./bridges.c ./puzzles.h
417 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
418bridges3.o: ./bridges.c ./puzzles.h
419 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
420combi.o: ./combi.c ./puzzles.h
421 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
422cube.o: ./cube.c ./puzzles.h
423 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
424cube3.o: ./cube.c ./puzzles.h
425 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
426divvy.o: ./divvy.c ./puzzles.h
427 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
428dominosa.o: ./dominosa.c ./puzzles.h
429 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
430dominos3.o: ./dominosa.c ./puzzles.h
431 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
432drawing.o: ./drawing.c ./puzzles.h
433 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
434dsf.o: ./dsf.c ./puzzles.h
435 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
436fifteen.o: ./fifteen.c ./puzzles.h
437 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
438fifteen5.o: ./fifteen.c ./puzzles.h
439 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
440fifteen2.o: ./fifteen.c ./puzzles.h
441 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
442filling.o: ./filling.c ./puzzles.h
443 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
444filling5.o: ./filling.c ./puzzles.h
445 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
446filling2.o: ./filling.c ./puzzles.h
447 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
448findloop.o: ./findloop.c ./puzzles.h
449 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
450flip.o: ./flip.c ./puzzles.h ./tree234.h
451 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
452flip3.o: ./flip.c ./puzzles.h ./tree234.h
453 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
454flood.o: ./flood.c ./puzzles.h
455 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
456flood3.o: ./flood.c ./puzzles.h
457 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
458galaxies.o: ./galaxies.c ./puzzles.h
459 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
460galaxie7.o: ./galaxies.c ./puzzles.h
461 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
462galaxie4.o: ./galaxies.c ./puzzles.h
463 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_PICTURE_GENERATOR -c $< -o $@
464galaxie2.o: ./galaxies.c ./puzzles.h
465 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
466grid.o: ./grid.c ./puzzles.h ./tree234.h ./grid.h ./penrose.h
467 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
468gtk.o: ./gtk.c ./puzzles.h
469 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
470guess.o: ./guess.c ./puzzles.h
471 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
472guess3.o: ./guess.c ./puzzles.h
473 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
474inertia.o: ./inertia.c ./puzzles.h
475 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
476inertia3.o: ./inertia.c ./puzzles.h
477 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
478keen.o: ./keen.c ./puzzles.h ./latin.h
479 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
480keen5.o: ./keen.c ./puzzles.h ./latin.h
481 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
482keen2.o: ./keen.c ./puzzles.h ./latin.h
483 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
484latin.o: ./latin.c ./puzzles.h ./tree234.h ./maxflow.h ./latin.h
485 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
486latin8.o: ./latin.c ./puzzles.h ./tree234.h ./maxflow.h ./latin.h
487 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_LATIN_TEST -c $< -o $@
488latin6.o: ./latin.c ./puzzles.h ./tree234.h ./maxflow.h ./latin.h
489 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
490laydomino.o: ./laydomino.c ./puzzles.h
491 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
492lightup.o: ./lightup.c ./puzzles.h
493 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
494lightup5.o: ./lightup.c ./puzzles.h
495 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
496lightup2.o: ./lightup.c ./puzzles.h
497 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
498list.o: ./list.c ./puzzles.h
499 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
500loopgen.o: ./loopgen.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
501 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
502loopy.o: ./loopy.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
503 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
504loopy5.o: ./loopy.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
505 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
506loopy2.o: ./loopy.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
507 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
508magnets.o: ./magnets.c ./puzzles.h
509 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
510magnets5.o: ./magnets.c ./puzzles.h
511 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
512magnets2.o: ./magnets.c ./puzzles.h
513 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
514malloc.o: ./malloc.c ./puzzles.h
515 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
516map.o: ./map.c ./puzzles.h
517 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
518map5.o: ./map.c ./puzzles.h
519 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
520map2.o: ./map.c ./puzzles.h
521 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
522maxflow.o: ./maxflow.c ./maxflow.h ./puzzles.h
523 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
524midend.o: ./midend.c ./puzzles.h
525 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
526mines.o: ./mines.c ./tree234.h ./puzzles.h
527 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
528mines5.o: ./mines.c ./tree234.h ./puzzles.h
529 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
530mines2.o: ./mines.c ./tree234.h ./puzzles.h
531 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_OBFUSCATOR -c $< -o $@
532misc.o: ./misc.c ./puzzles.h
533 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
534net.o: ./net.c ./puzzles.h ./tree234.h
535 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
536net3.o: ./net.c ./puzzles.h ./tree234.h
537 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
538netslide.o: ./netslide.c ./puzzles.h ./tree234.h
539 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
540netslid3.o: ./netslide.c ./puzzles.h ./tree234.h
541 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
542no-icon.o: ./no-icon.c
543 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
544nullfe.o: ./nullfe.c ./puzzles.h
545 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
546nullgame.o: ./nullgame.c ./puzzles.h
547 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
548obfusc.o: ./obfusc.c ./puzzles.h
549 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
550osx.o: ./osx.m ./puzzles.h
551 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
552palisade.o: ./palisade.c ./puzzles.h
553 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
554palisad3.o: ./palisade.c ./puzzles.h
555 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
556pattern.o: ./pattern.c ./puzzles.h
557 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
558pattern7.o: ./pattern.c ./puzzles.h
559 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
560pattern4.o: ./pattern.c ./puzzles.h
561 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_PICTURE_GENERATOR -c $< -o $@
562pattern2.o: ./pattern.c ./puzzles.h
563 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
564pearl.o: ./pearl.c ./puzzles.h ./grid.h ./loopgen.h
565 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
566pearl5.o: ./pearl.c ./puzzles.h ./grid.h ./loopgen.h
567 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
568pearl2.o: ./pearl.c ./puzzles.h ./grid.h ./loopgen.h
569 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
570pegs.o: ./pegs.c ./puzzles.h ./tree234.h
571 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
572pegs3.o: ./pegs.c ./puzzles.h ./tree234.h
573 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
574penrose.o: ./penrose.c ./puzzles.h ./penrose.h
575 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
576printing.o: ./printing.c ./puzzles.h
577 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
578ps.o: ./ps.c ./puzzles.h
579 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
580random.o: ./random.c ./puzzles.h
581 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
582range.o: ./range.c ./puzzles.h
583 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
584range3.o: ./range.c ./puzzles.h
585 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
586rect.o: ./rect.c ./puzzles.h
587 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
588rect3.o: ./rect.c ./puzzles.h
589 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
590samegame.o: ./samegame.c ./puzzles.h
591 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
592samegam3.o: ./samegame.c ./puzzles.h
593 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
594signpost.o: ./signpost.c ./puzzles.h
595 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
596signpos5.o: ./signpost.c ./puzzles.h
597 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
598signpos2.o: ./signpost.c ./puzzles.h
599 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
600singles.o: ./singles.c ./puzzles.h ./latin.h
601 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
602singles5.o: ./singles.c ./puzzles.h ./latin.h
603 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
604singles3.o: ./singles.c ./puzzles.h ./latin.h
605 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
606sixteen.o: ./sixteen.c ./puzzles.h
607 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
608sixteen3.o: ./sixteen.c ./puzzles.h
609 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
610slant.o: ./slant.c ./puzzles.h
611 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
612slant5.o: ./slant.c ./puzzles.h
613 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
614slant2.o: ./slant.c ./puzzles.h
615 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
616solo.o: ./solo.c ./puzzles.h
617 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
618solo5.o: ./solo.c ./puzzles.h
619 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
620solo2.o: ./solo.c ./puzzles.h
621 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
622tdq.o: ./tdq.c ./puzzles.h
623 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
624tents.o: ./tents.c ./puzzles.h ./maxflow.h
625 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
626tents5.o: ./tents.c ./puzzles.h ./maxflow.h
627 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
628tents3.o: ./tents.c ./puzzles.h ./maxflow.h
629 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
630towers.o: ./towers.c ./puzzles.h ./latin.h
631 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
632towers5.o: ./towers.c ./puzzles.h ./latin.h
633 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
634towers2.o: ./towers.c ./puzzles.h ./latin.h
635 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
636tracks.o: ./tracks.c ./puzzles.h
637 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
638tracks3.o: ./tracks.c ./puzzles.h
639 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
640tree234.o: ./tree234.c ./tree234.h ./puzzles.h
641 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
642twiddle.o: ./twiddle.c ./puzzles.h
643 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
644twiddle3.o: ./twiddle.c ./puzzles.h
645 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
646undead.o: ./undead.c ./puzzles.h
647 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
648undead3.o: ./undead.c ./puzzles.h
649 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
650unequal.o: ./unequal.c ./puzzles.h ./latin.h
651 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
652unequal5.o: ./unequal.c ./puzzles.h ./latin.h
653 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
654unequal2.o: ./unequal.c ./puzzles.h ./latin.h
655 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
656unruly.o: ./unruly.c ./puzzles.h
657 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
658unruly5.o: ./unruly.c ./puzzles.h
659 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
660unruly2.o: ./unruly.c ./puzzles.h
661 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
662untangle.o: ./untangle.c ./puzzles.h ./tree234.h
663 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
664untangl3.o: ./untangle.c ./puzzles.h ./tree234.h
665 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
666version.o: ./version.c ./version.h
667 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
668windows.o: ./windows.c ./puzzles.h ./resource.h
669 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
670windows1.o: ./windows.c ./puzzles.h ./resource.h
671 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
672
673GAMES += blackbox
674GAMES += bridges
675GAMES += cube
676GAMES += dominosa
677GAMES += fifteen
678GAMES += filling
679GAMES += flip
680GAMES += flood
681GAMES += galaxies
682GAMES += guess
683GAMES += inertia
684GAMES += keen
685GAMES += lightup
686GAMES += loopy
687GAMES += magnets
688GAMES += map
689GAMES += mines
690GAMES += net
691GAMES += netslide
692GAMES += palisade
693GAMES += pattern
694GAMES += pearl
695GAMES += pegs
696GAMES += range
697GAMES += rect
698GAMES += samegame
699GAMES += signpost
700GAMES += singles
701GAMES += sixteen
702GAMES += slant
703GAMES += solo
704GAMES += tents
705GAMES += towers
706GAMES += tracks
707GAMES += twiddle
708GAMES += undead
709GAMES += unequal
710GAMES += unruly
711GAMES += untangle
712install:
713 for i in $(GAMES); do \
714 $(INSTALL_PROGRAM) -m 755 $(BINPREFIX)$$i $(DESTDIR)$(gamesdir)/$(BINPREFIX)$$i \
715 || exit 1; \
716 done
717test: benchmark.html benchmark.txt
718
719benchmark.html: benchmark.txt benchmark.pl
720 ./benchmark.pl benchmark.txt > $@
721
722benchmark.txt: benchmark.sh $(GAMES)
723 ./benchmark.sh > $@
724
725
726clean:
727 rm -f *.o $(BINPREFIX)blackbox $(BINPREFIX)bridges $(BINPREFIX)cube $(BINPREFIX)dominosa $(BINPREFIX)fifteen $(BINPREFIX)fifteensolver $(BINPREFIX)filling $(BINPREFIX)fillingsolver $(BINPREFIX)flip $(BINPREFIX)flood $(BINPREFIX)galaxies $(BINPREFIX)galaxiespicture $(BINPREFIX)galaxiessolver $(BINPREFIX)guess $(BINPREFIX)inertia $(BINPREFIX)keen $(BINPREFIX)keensolver $(BINPREFIX)latincheck $(BINPREFIX)lightup $(BINPREFIX)lightupsolver $(BINPREFIX)loopy $(BINPREFIX)loopysolver $(BINPREFIX)magnets $(BINPREFIX)magnetssolver $(BINPREFIX)map $(BINPREFIX)mapsolver $(BINPREFIX)mineobfusc $(BINPREFIX)mines $(BINPREFIX)net $(BINPREFIX)netslide $(BINPREFIX)nullgame $(BINPREFIX)obfusc $(BINPREFIX)palisade $(BINPREFIX)pattern $(BINPREFIX)patternpicture $(BINPREFIX)patternsolver $(BINPREFIX)pearl $(BINPREFIX)pearlbench $(BINPREFIX)pegs $(BINPREFIX)range $(BINPREFIX)rect $(BINPREFIX)samegame $(BINPREFIX)signpost $(BINPREFIX)signpostsolver $(BINPREFIX)singles $(BINPREFIX)singlessolver $(BINPREFIX)sixteen $(BINPREFIX)slant $(BINPREFIX)slantsolver $(BINPREFIX)solo $(BINPREFIX)solosolver $(BINPREFIX)tents $(BINPREFIX)tentssolver $(BINPREFIX)towers $(BINPREFIX)towerssolver $(BINPREFIX)tracks $(BINPREFIX)twiddle $(BINPREFIX)undead $(BINPREFIX)unequal $(BINPREFIX)unequalsolver $(BINPREFIX)unruly $(BINPREFIX)unrulysolver $(BINPREFIX)untangle
diff --git a/apps/plugins/puzzles/src/Makefile.am b/apps/plugins/puzzles/src/Makefile.am
new file mode 100644
index 0000000000..6e03ed49a5
--- /dev/null
+++ b/apps/plugins/puzzles/src/Makefile.am
@@ -0,0 +1,446 @@
1# Makefile.am for puzzles under Unix with Autoconf/Automake.
2#
3# This file was created by `mkfiles.pl' from the `Recipe' file.
4# DO NOT EDIT THIS FILE DIRECTLY; edit Recipe or mkfiles.pl instead.
5
6GAMES =
7noinst_PROGRAMS = blackbox bridges cube dominosa fifteen fifteensolver \
8 filling fillingsolver flip flood galaxies galaxiespicture \
9 galaxiessolver guess inertia keen keensolver latincheck \
10 lightup lightupsolver loopy loopysolver magnets \
11 magnetssolver map mapsolver mineobfusc mines net netslide \
12 nullgame obfusc palisade pattern patternpicture \
13 patternsolver pearl pearlbench pegs range rect samegame \
14 signpost signpostsolver singles singlessolver sixteen slant \
15 slantsolver solo solosolver tents tentssolver towers \
16 towerssolver tracks twiddle undead unequal unequalsolver \
17 unruly unrulysolver untangle
18AUTOMAKE_OPTIONS = subdir-objects
19
20allsources = ./blackbox.c ./bridges.c ./combi.c ./cube.c ./divvy.c \
21 ./dominosa.c ./drawing.c ./dsf.c ./fifteen.c ./filling.c \
22 ./findloop.c ./flip.c ./flood.c ./galaxies.c ./grid.c \
23 ./grid.h ./gtk.c ./guess.c ./inertia.c ./keen.c ./latin.c \
24 ./latin.h ./laydomino.c ./lightup.c ./list.c ./loopgen.c \
25 ./loopgen.h ./loopy.c ./magnets.c ./malloc.c ./map.c \
26 ./maxflow.c ./maxflow.h ./midend.c ./mines.c ./misc.c \
27 ./net.c ./netslide.c ./no-icon.c ./nullfe.c ./nullgame.c \
28 ./obfusc.c ./osx.m ./palisade.c ./pattern.c ./pearl.c \
29 ./pegs.c ./penrose.c ./penrose.h ./printing.c ./ps.c \
30 ./puzzles.h ./random.c ./range.c ./rect.c ./resource.h \
31 ./samegame.c ./signpost.c ./singles.c ./sixteen.c ./slant.c \
32 ./solo.c ./tdq.c ./tents.c ./towers.c ./tracks.c ./tree234.c \
33 ./tree234.h ./twiddle.c ./undead.c ./unequal.c ./unruly.c \
34 ./untangle.c ./version.c ./version.h ./windows.c
35
36AM_CPPFLAGS = -I$(srcdir)/./ -I$(srcdir)/icons/
37AM_CFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS)
38blackbox_SOURCES = ./blackbox.c ./drawing.c ./gtk.c ./malloc.c ./midend.c \
39 ./misc.c ./no-icon.c ./printing.c ./ps.c ./puzzles.h \
40 ./random.c ./version.c ./version.h
41blackbox_LDADD = $(GTK_LIBS) -lm
42
43bridges_SOURCES = ./bridges.c ./drawing.c ./dsf.c ./findloop.c ./gtk.c \
44 ./malloc.c ./midend.c ./misc.c ./no-icon.c ./printing.c \
45 ./ps.c ./puzzles.h ./random.c ./version.c ./version.h
46bridges_LDADD = $(GTK_LIBS) -lm
47
48cube_SOURCES = ./cube.c ./drawing.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
49 ./no-icon.c ./printing.c ./ps.c ./puzzles.h ./random.c \
50 ./version.c ./version.h
51cube_LDADD = $(GTK_LIBS) -lm
52
53dominosa_SOURCES = ./dominosa.c ./drawing.c ./gtk.c ./laydomino.c ./malloc.c \
54 ./midend.c ./misc.c ./no-icon.c ./printing.c ./ps.c \
55 ./puzzles.h ./random.c ./version.c ./version.h
56dominosa_LDADD = $(GTK_LIBS) -lm
57
58fifteen_SOURCES = ./drawing.c ./fifteen.c ./gtk.c ./malloc.c ./midend.c \
59 ./misc.c ./no-icon.c ./printing.c ./ps.c ./puzzles.h \
60 ./random.c ./version.c ./version.h
61fifteen_LDADD = $(GTK_LIBS) -lm
62
63fifteensolver_SOURCES = ./malloc.c ./misc.c ./nullfe.c ./puzzles.h \
64 ./random.c
65fifteensolver_LDADD = libfifteen2_a-fifteen.$(OBJEXT) -lm
66
67filling_SOURCES = ./drawing.c ./dsf.c ./filling.c ./gtk.c ./malloc.c \
68 ./midend.c ./misc.c ./no-icon.c ./printing.c ./ps.c \
69 ./puzzles.h ./random.c ./version.c ./version.h
70filling_LDADD = $(GTK_LIBS) -lm
71
72fillingsolver_SOURCES = ./dsf.c ./malloc.c ./misc.c ./nullfe.c ./puzzles.h \
73 ./random.c
74fillingsolver_LDADD = libfilling2_a-filling.$(OBJEXT) -lm
75
76flip_SOURCES = ./drawing.c ./flip.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
77 ./no-icon.c ./printing.c ./ps.c ./puzzles.h ./random.c \
78 ./tree234.c ./tree234.h ./version.c ./version.h
79flip_LDADD = $(GTK_LIBS) -lm
80
81flood_SOURCES = ./drawing.c ./flood.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
82 ./no-icon.c ./printing.c ./ps.c ./puzzles.h ./random.c \
83 ./version.c ./version.h
84flood_LDADD = $(GTK_LIBS) -lm
85
86galaxies_SOURCES = ./drawing.c ./dsf.c ./galaxies.c ./gtk.c ./malloc.c \
87 ./midend.c ./misc.c ./no-icon.c ./printing.c ./ps.c \
88 ./puzzles.h ./random.c ./version.c ./version.h
89galaxies_LDADD = $(GTK_LIBS) -lm
90
91galaxiespicture_SOURCES = ./dsf.c ./malloc.c ./misc.c ./nullfe.c ./puzzles.h \
92 ./random.c
93galaxiespicture_LDADD = libgalaxie4_a-galaxies.$(OBJEXT) -lm
94
95galaxiessolver_SOURCES = ./dsf.c ./malloc.c ./misc.c ./nullfe.c ./puzzles.h \
96 ./random.c
97galaxiessolver_LDADD = libgalaxie2_a-galaxies.$(OBJEXT) -lm
98
99guess_SOURCES = ./drawing.c ./gtk.c ./guess.c ./malloc.c ./midend.c ./misc.c \
100 ./no-icon.c ./printing.c ./ps.c ./puzzles.h ./random.c \
101 ./version.c ./version.h
102guess_LDADD = $(GTK_LIBS) -lm
103
104inertia_SOURCES = ./drawing.c ./gtk.c ./inertia.c ./malloc.c ./midend.c \
105 ./misc.c ./no-icon.c ./printing.c ./ps.c ./puzzles.h \
106 ./random.c ./version.c ./version.h
107inertia_LDADD = $(GTK_LIBS) -lm
108
109keen_SOURCES = ./drawing.c ./dsf.c ./gtk.c ./keen.c ./latin.c ./latin.h \
110 ./malloc.c ./maxflow.c ./maxflow.h ./midend.c ./misc.c \
111 ./no-icon.c ./printing.c ./ps.c ./puzzles.h ./random.c \
112 ./tree234.c ./tree234.h ./version.c ./version.h
113keen_LDADD = $(GTK_LIBS) -lm
114
115keensolver_SOURCES = ./dsf.c ./malloc.c ./maxflow.c ./maxflow.h ./misc.c \
116 ./nullfe.c ./puzzles.h ./random.c ./tree234.c ./tree234.h
117keensolver_LDADD = libkeen2_a-keen.$(OBJEXT) liblatin6_a-latin.$(OBJEXT) -lm
118
119latincheck_SOURCES = ./malloc.c ./maxflow.c ./maxflow.h ./misc.c ./nullfe.c \
120 ./puzzles.h ./random.c ./tree234.c ./tree234.h
121latincheck_LDADD = liblatin8_a-latin.$(OBJEXT) -lm
122
123lightup_SOURCES = ./combi.c ./drawing.c ./gtk.c ./lightup.c ./malloc.c \
124 ./midend.c ./misc.c ./no-icon.c ./printing.c ./ps.c \
125 ./puzzles.h ./random.c ./version.c ./version.h
126lightup_LDADD = $(GTK_LIBS) -lm
127
128lightupsolver_SOURCES = ./combi.c ./malloc.c ./misc.c ./nullfe.c ./puzzles.h \
129 ./random.c
130lightupsolver_LDADD = liblightup2_a-lightup.$(OBJEXT) -lm
131
132loopy_SOURCES = ./drawing.c ./dsf.c ./grid.c ./grid.h ./gtk.c ./loopgen.c \
133 ./loopgen.h ./loopy.c ./malloc.c ./midend.c ./misc.c \
134 ./no-icon.c ./penrose.c ./penrose.h ./printing.c ./ps.c \
135 ./puzzles.h ./random.c ./tree234.c ./tree234.h ./version.c \
136 ./version.h
137loopy_LDADD = $(GTK_LIBS) -lm
138
139loopysolver_SOURCES = ./dsf.c ./grid.c ./grid.h ./loopgen.c ./loopgen.h \
140 ./malloc.c ./misc.c ./nullfe.c ./penrose.c ./penrose.h \
141 ./puzzles.h ./random.c ./tree234.c ./tree234.h
142loopysolver_LDADD = libloopy2_a-loopy.$(OBJEXT) -lm
143
144magnets_SOURCES = ./drawing.c ./gtk.c ./laydomino.c ./magnets.c ./malloc.c \
145 ./midend.c ./misc.c ./no-icon.c ./printing.c ./ps.c \
146 ./puzzles.h ./random.c ./version.c ./version.h
147magnets_LDADD = $(GTK_LIBS) -lm
148
149magnetssolver_SOURCES = ./laydomino.c ./malloc.c ./misc.c ./nullfe.c \
150 ./puzzles.h ./random.c
151magnetssolver_LDADD = libmagnets2_a-magnets.$(OBJEXT) -lm
152
153map_SOURCES = ./drawing.c ./dsf.c ./gtk.c ./malloc.c ./map.c ./midend.c \
154 ./misc.c ./no-icon.c ./printing.c ./ps.c ./puzzles.h \
155 ./random.c ./version.c ./version.h
156map_LDADD = $(GTK_LIBS) -lm
157
158mapsolver_SOURCES = ./dsf.c ./malloc.c ./misc.c ./nullfe.c ./puzzles.h \
159 ./random.c
160mapsolver_LDADD = libmap2_a-map.$(OBJEXT) -lm
161
162mineobfusc_SOURCES = ./malloc.c ./misc.c ./nullfe.c ./puzzles.h ./random.c \
163 ./tree234.c ./tree234.h
164mineobfusc_LDADD = libmines2_a-mines.$(OBJEXT) -lm
165
166mines_SOURCES = ./drawing.c ./gtk.c ./malloc.c ./midend.c ./mines.c ./misc.c \
167 ./no-icon.c ./printing.c ./ps.c ./puzzles.h ./random.c \
168 ./tree234.c ./tree234.h ./version.c ./version.h
169mines_LDADD = $(GTK_LIBS) -lm
170
171net_SOURCES = ./drawing.c ./dsf.c ./findloop.c ./gtk.c ./malloc.c ./midend.c \
172 ./misc.c ./net.c ./no-icon.c ./printing.c ./ps.c ./puzzles.h \
173 ./random.c ./tree234.c ./tree234.h ./version.c ./version.h
174net_LDADD = $(GTK_LIBS) -lm
175
176netslide_SOURCES = ./drawing.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
177 ./netslide.c ./no-icon.c ./printing.c ./ps.c ./puzzles.h \
178 ./random.c ./tree234.c ./tree234.h ./version.c ./version.h
179netslide_LDADD = $(GTK_LIBS) -lm
180
181nullgame_SOURCES = ./drawing.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
182 ./no-icon.c ./nullgame.c ./printing.c ./ps.c ./puzzles.h \
183 ./random.c ./version.c ./version.h
184nullgame_LDADD = $(GTK_LIBS) -lm
185
186obfusc_SOURCES = ./malloc.c ./misc.c ./nullfe.c ./obfusc.c ./puzzles.h \
187 ./random.c
188obfusc_LDADD = -lm
189
190palisade_SOURCES = ./divvy.c ./drawing.c ./dsf.c ./gtk.c ./malloc.c \
191 ./midend.c ./misc.c ./no-icon.c ./palisade.c ./printing.c \
192 ./ps.c ./puzzles.h ./random.c ./version.c ./version.h
193palisade_LDADD = $(GTK_LIBS) -lm
194
195pattern_SOURCES = ./drawing.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
196 ./no-icon.c ./pattern.c ./printing.c ./ps.c ./puzzles.h \
197 ./random.c ./version.c ./version.h
198pattern_LDADD = $(GTK_LIBS) -lm
199
200patternpicture_SOURCES = ./malloc.c ./misc.c ./nullfe.c ./puzzles.h \
201 ./random.c
202patternpicture_LDADD = libpattern4_a-pattern.$(OBJEXT) -lm
203
204patternsolver_SOURCES = ./malloc.c ./misc.c ./nullfe.c ./puzzles.h \
205 ./random.c
206patternsolver_LDADD = libpattern2_a-pattern.$(OBJEXT) -lm
207
208pearl_SOURCES = ./drawing.c ./dsf.c ./grid.c ./grid.h ./gtk.c ./loopgen.c \
209 ./loopgen.h ./malloc.c ./midend.c ./misc.c ./no-icon.c \
210 ./pearl.c ./penrose.c ./penrose.h ./printing.c ./ps.c \
211 ./puzzles.h ./random.c ./tdq.c ./tree234.c ./tree234.h \
212 ./version.c ./version.h
213pearl_LDADD = $(GTK_LIBS) -lm
214
215pearlbench_SOURCES = ./dsf.c ./grid.c ./grid.h ./loopgen.c ./loopgen.h \
216 ./malloc.c ./misc.c ./nullfe.c ./penrose.c ./penrose.h \
217 ./puzzles.h ./random.c ./tdq.c ./tree234.c ./tree234.h
218pearlbench_LDADD = libpearl2_a-pearl.$(OBJEXT) -lm
219
220pegs_SOURCES = ./drawing.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
221 ./no-icon.c ./pegs.c ./printing.c ./ps.c ./puzzles.h \
222 ./random.c ./tree234.c ./tree234.h ./version.c ./version.h
223pegs_LDADD = $(GTK_LIBS) -lm
224
225range_SOURCES = ./drawing.c ./dsf.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
226 ./no-icon.c ./printing.c ./ps.c ./puzzles.h ./random.c \
227 ./range.c ./version.c ./version.h
228range_LDADD = $(GTK_LIBS) -lm
229
230rect_SOURCES = ./drawing.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
231 ./no-icon.c ./printing.c ./ps.c ./puzzles.h ./random.c \
232 ./rect.c ./version.c ./version.h
233rect_LDADD = $(GTK_LIBS) -lm
234
235samegame_SOURCES = ./drawing.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
236 ./no-icon.c ./printing.c ./ps.c ./puzzles.h ./random.c \
237 ./samegame.c ./version.c ./version.h
238samegame_LDADD = $(GTK_LIBS) -lm
239
240signpost_SOURCES = ./drawing.c ./dsf.c ./gtk.c ./malloc.c ./midend.c \
241 ./misc.c ./no-icon.c ./printing.c ./ps.c ./puzzles.h \
242 ./random.c ./signpost.c ./version.c ./version.h
243signpost_LDADD = $(GTK_LIBS) -lm
244
245signpostsolver_SOURCES = ./dsf.c ./malloc.c ./misc.c ./nullfe.c ./puzzles.h \
246 ./random.c
247signpostsolver_LDADD = libsignpos2_a-signpost.$(OBJEXT) -lm
248
249singles_SOURCES = ./drawing.c ./dsf.c ./gtk.c ./latin.c ./latin.h ./malloc.c \
250 ./maxflow.c ./maxflow.h ./midend.c ./misc.c ./no-icon.c \
251 ./printing.c ./ps.c ./puzzles.h ./random.c ./singles.c \
252 ./tree234.c ./tree234.h ./version.c ./version.h
253singles_LDADD = $(GTK_LIBS) -lm
254
255singlessolver_SOURCES = ./dsf.c ./latin.c ./latin.h ./malloc.c ./maxflow.c \
256 ./maxflow.h ./misc.c ./nullfe.c ./puzzles.h ./random.c \
257 ./tree234.c ./tree234.h
258singlessolver_LDADD = libsingles3_a-singles.$(OBJEXT) -lm
259
260sixteen_SOURCES = ./drawing.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
261 ./no-icon.c ./printing.c ./ps.c ./puzzles.h ./random.c \
262 ./sixteen.c ./version.c ./version.h
263sixteen_LDADD = $(GTK_LIBS) -lm
264
265slant_SOURCES = ./drawing.c ./dsf.c ./findloop.c ./gtk.c ./malloc.c \
266 ./midend.c ./misc.c ./no-icon.c ./printing.c ./ps.c \
267 ./puzzles.h ./random.c ./slant.c ./version.c ./version.h
268slant_LDADD = $(GTK_LIBS) -lm
269
270slantsolver_SOURCES = ./dsf.c ./findloop.c ./malloc.c ./misc.c ./nullfe.c \
271 ./puzzles.h ./random.c
272slantsolver_LDADD = libslant2_a-slant.$(OBJEXT) -lm
273
274solo_SOURCES = ./divvy.c ./drawing.c ./dsf.c ./gtk.c ./malloc.c ./midend.c \
275 ./misc.c ./no-icon.c ./printing.c ./ps.c ./puzzles.h \
276 ./random.c ./solo.c ./version.c ./version.h
277solo_LDADD = $(GTK_LIBS) -lm
278
279solosolver_SOURCES = ./divvy.c ./dsf.c ./malloc.c ./misc.c ./nullfe.c \
280 ./puzzles.h ./random.c
281solosolver_LDADD = libsolo2_a-solo.$(OBJEXT) -lm
282
283tents_SOURCES = ./drawing.c ./dsf.c ./gtk.c ./malloc.c ./maxflow.c \
284 ./maxflow.h ./midend.c ./misc.c ./no-icon.c ./printing.c \
285 ./ps.c ./puzzles.h ./random.c ./tents.c ./version.c \
286 ./version.h
287tents_LDADD = $(GTK_LIBS) -lm
288
289tentssolver_SOURCES = ./dsf.c ./malloc.c ./maxflow.c ./maxflow.h ./misc.c \
290 ./nullfe.c ./puzzles.h ./random.c
291tentssolver_LDADD = libtents3_a-tents.$(OBJEXT) -lm
292
293towers_SOURCES = ./drawing.c ./gtk.c ./latin.c ./latin.h ./malloc.c \
294 ./maxflow.c ./maxflow.h ./midend.c ./misc.c ./no-icon.c \
295 ./printing.c ./ps.c ./puzzles.h ./random.c ./towers.c \
296 ./tree234.c ./tree234.h ./version.c ./version.h
297towers_LDADD = $(GTK_LIBS) -lm
298
299towerssolver_SOURCES = ./malloc.c ./maxflow.c ./maxflow.h ./misc.c \
300 ./nullfe.c ./puzzles.h ./random.c ./tree234.c ./tree234.h
301towerssolver_LDADD = liblatin6_a-latin.$(OBJEXT) \
302 libtowers2_a-towers.$(OBJEXT) -lm
303
304tracks_SOURCES = ./drawing.c ./dsf.c ./findloop.c ./gtk.c ./malloc.c \
305 ./midend.c ./misc.c ./no-icon.c ./printing.c ./ps.c \
306 ./puzzles.h ./random.c ./tracks.c ./version.c ./version.h
307tracks_LDADD = $(GTK_LIBS) -lm
308
309twiddle_SOURCES = ./drawing.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
310 ./no-icon.c ./printing.c ./ps.c ./puzzles.h ./random.c \
311 ./twiddle.c ./version.c ./version.h
312twiddle_LDADD = $(GTK_LIBS) -lm
313
314undead_SOURCES = ./drawing.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
315 ./no-icon.c ./printing.c ./ps.c ./puzzles.h ./random.c \
316 ./undead.c ./version.c ./version.h
317undead_LDADD = $(GTK_LIBS) -lm
318
319unequal_SOURCES = ./drawing.c ./gtk.c ./latin.c ./latin.h ./malloc.c \
320 ./maxflow.c ./maxflow.h ./midend.c ./misc.c ./no-icon.c \
321 ./printing.c ./ps.c ./puzzles.h ./random.c ./tree234.c \
322 ./tree234.h ./unequal.c ./version.c ./version.h
323unequal_LDADD = $(GTK_LIBS) -lm
324
325unequalsolver_SOURCES = ./malloc.c ./maxflow.c ./maxflow.h ./misc.c \
326 ./nullfe.c ./puzzles.h ./random.c ./tree234.c ./tree234.h
327unequalsolver_LDADD = liblatin6_a-latin.$(OBJEXT) \
328 libunequal2_a-unequal.$(OBJEXT) -lm
329
330unruly_SOURCES = ./drawing.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
331 ./no-icon.c ./printing.c ./ps.c ./puzzles.h ./random.c \
332 ./unruly.c ./version.c ./version.h
333unruly_LDADD = $(GTK_LIBS) -lm
334
335unrulysolver_SOURCES = ./malloc.c ./misc.c ./nullfe.c ./puzzles.h ./random.c
336unrulysolver_LDADD = libunruly2_a-unruly.$(OBJEXT) -lm
337
338untangle_SOURCES = ./drawing.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
339 ./no-icon.c ./printing.c ./ps.c ./puzzles.h ./random.c \
340 ./tree234.c ./tree234.h ./untangle.c ./version.c ./version.h
341untangle_LDADD = $(GTK_LIBS) -lm
342
343libfifteen2_a_SOURCES = ./fifteen.c ./puzzles.h
344libfifteen2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
345libfilling2_a_SOURCES = ./filling.c ./puzzles.h
346libfilling2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
347libgalaxie2_a_SOURCES = ./galaxies.c ./puzzles.h
348libgalaxie2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
349libgalaxie4_a_SOURCES = ./galaxies.c ./puzzles.h
350libgalaxie4_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) \
351 -DSTANDALONE_PICTURE_GENERATOR
352libkeen2_a_SOURCES = ./keen.c ./puzzles.h ./latin.h
353libkeen2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
354liblatin6_a_SOURCES = ./latin.c ./puzzles.h ./tree234.h ./maxflow.h \
355 ./latin.h
356liblatin6_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
357liblatin8_a_SOURCES = ./latin.c ./puzzles.h ./tree234.h ./maxflow.h \
358 ./latin.h
359liblatin8_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_LATIN_TEST
360liblightup2_a_SOURCES = ./lightup.c ./puzzles.h
361liblightup2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
362libloopy2_a_SOURCES = ./loopy.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
363libloopy2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
364libmagnets2_a_SOURCES = ./magnets.c ./puzzles.h
365libmagnets2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
366libmap2_a_SOURCES = ./map.c ./puzzles.h
367libmap2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
368libmines2_a_SOURCES = ./mines.c ./tree234.h ./puzzles.h
369libmines2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_OBFUSCATOR
370libpattern2_a_SOURCES = ./pattern.c ./puzzles.h
371libpattern2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
372libpattern4_a_SOURCES = ./pattern.c ./puzzles.h
373libpattern4_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) \
374 -DSTANDALONE_PICTURE_GENERATOR
375libpearl2_a_SOURCES = ./pearl.c ./puzzles.h ./grid.h ./loopgen.h
376libpearl2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
377libsignpos2_a_SOURCES = ./signpost.c ./puzzles.h
378libsignpos2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
379libsingles3_a_SOURCES = ./singles.c ./puzzles.h ./latin.h
380libsingles3_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
381libslant2_a_SOURCES = ./slant.c ./puzzles.h
382libslant2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
383libsolo2_a_SOURCES = ./solo.c ./puzzles.h
384libsolo2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
385libtents3_a_SOURCES = ./tents.c ./puzzles.h ./maxflow.h
386libtents3_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
387libtowers2_a_SOURCES = ./towers.c ./puzzles.h ./latin.h
388libtowers2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
389libunequal2_a_SOURCES = ./unequal.c ./puzzles.h ./latin.h
390libunequal2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
391libunruly2_a_SOURCES = ./unruly.c ./puzzles.h
392libunruly2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
393noinst_LIBRARIES = libfifteen2.a libfilling2.a libgalaxie2.a libgalaxie4.a \
394 libkeen2.a liblatin6.a liblatin8.a liblightup2.a libloopy2.a \
395 libmagnets2.a libmap2.a libmines2.a libpattern2.a \
396 libpattern4.a libpearl2.a libsignpos2.a libsingles3.a \
397 libslant2.a libsolo2.a libtents3.a libtowers2.a \
398 libunequal2.a libunruly2.a
399
400GAMES += blackbox
401GAMES += bridges
402GAMES += cube
403GAMES += dominosa
404GAMES += fifteen
405GAMES += filling
406GAMES += flip
407GAMES += flood
408GAMES += galaxies
409GAMES += guess
410GAMES += inertia
411GAMES += keen
412GAMES += lightup
413GAMES += loopy
414GAMES += magnets
415GAMES += map
416GAMES += mines
417GAMES += net
418GAMES += netslide
419GAMES += palisade
420GAMES += pattern
421GAMES += pearl
422GAMES += pegs
423GAMES += range
424GAMES += rect
425GAMES += samegame
426GAMES += signpost
427GAMES += singles
428GAMES += sixteen
429GAMES += slant
430GAMES += solo
431GAMES += tents
432GAMES += towers
433GAMES += tracks
434GAMES += twiddle
435GAMES += undead
436GAMES += unequal
437GAMES += unruly
438GAMES += untangle
439bin_PROGRAMS = $(GAMES)
440test: benchmark.html benchmark.txt
441
442benchmark.html: benchmark.txt benchmark.pl
443 ./benchmark.pl benchmark.txt > $@
444
445benchmark.txt: benchmark.sh $(GAMES)
446 ./benchmark.sh > $@
diff --git a/apps/plugins/puzzles/src/Makefile.cyg b/apps/plugins/puzzles/src/Makefile.cyg
new file mode 100644
index 0000000000..4dcfd8ae2d
--- /dev/null
+++ b/apps/plugins/puzzles/src/Makefile.cyg
@@ -0,0 +1,718 @@
1# Makefile for puzzles under cygwin.
2#
3# This file was created by `mkfiles.pl' from the `Recipe' file.
4# DO NOT EDIT THIS FILE DIRECTLY; edit Recipe or mkfiles.pl instead.
5
6# You can define this path to point at your tools if you need to
7# TOOLPATH = c:\cygwin\bin\ # or similar, if you're running Windows
8# TOOLPATH = /pkg/mingw32msvc/i386-mingw32msvc/bin/
9CC = $(TOOLPATH)gcc
10RC = $(TOOLPATH)windres
11# Uncomment the following two lines to compile under Winelib
12# CC = winegcc
13# RC = wrc
14# You may also need to tell windres where to find include files:
15# RCINC = --include-dir c:\cygwin\include\
16
17CFLAGS = -mno-cygwin -Wall -O2 -D_WINDOWS -DDEBUG -DWIN32S_COMPAT \
18 -D_NO_OLDNAMES -DNO_MULTIMON -DNO_HTMLHELP -I./ -Iicons/
19LDFLAGS = -mno-cygwin -s
20RCFLAGS = $(RCINC) --define WIN32=1 --define _WIN32=1 --define WINVER=0x0400 \
21 --define MINGW32_FIX=1 --include ./ --include icons/
22
23all: blackbox.exe bridges.exe cube.exe dominosa.exe fifteen.exe \
24 fifteensolver.exe filling.exe fillingsolver.exe flip.exe \
25 flood.exe galaxies.exe galaxiespicture.exe \
26 galaxiessolver.exe guess.exe inertia.exe keen.exe \
27 keensolver.exe latincheck.exe lightup.exe lightupsolver.exe \
28 loopy.exe loopysolver.exe magnets.exe magnetssolver.exe \
29 map.exe mapsolver.exe mineobfusc.exe mines.exe netgame.exe \
30 netslide.exe nullgame.exe palisade.exe pattern.exe \
31 patternpicture.exe patternsolver.exe pearl.exe \
32 pearlbench.exe pegs.exe puzzles.exe range.exe rect.exe \
33 samegame.exe signpost.exe signpostsolver.exe singles.exe \
34 singlessolver.exe sixteen.exe slant.exe slantsolver.exe \
35 solo.exe solosolver.exe tents.exe tentssolver.exe towers.exe \
36 towerssolver.exe tracks.exe twiddle.exe undead.exe \
37 unequal.exe unequalsolver.exe unruly.exe unrulysolver.exe \
38 untangle.exe
39
40blackbox.exe: blackbox.o drawing.o malloc.o midend.o misc.o noicon.res.o \
41 printing.o random.o version.o windows.o
42 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,blackbox.map blackbox.o \
43 drawing.o malloc.o midend.o misc.o noicon.res.o printing.o \
44 random.o version.o windows.o -lcomctl32 -lcomdlg32 -lgdi32 \
45 -luser32 -lwinspool
46
47bridges.exe: bridges.o drawing.o dsf.o findloop.o malloc.o midend.o misc.o \
48 noicon.res.o printing.o random.o version.o windows.o
49 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,bridges.map bridges.o \
50 drawing.o dsf.o findloop.o malloc.o midend.o misc.o \
51 noicon.res.o printing.o random.o version.o windows.o \
52 -lcomctl32 -lcomdlg32 -lgdi32 -luser32 -lwinspool
53
54cube.exe: cube.o drawing.o malloc.o midend.o misc.o noicon.res.o printing.o \
55 random.o version.o windows.o
56 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,cube.map cube.o drawing.o \
57 malloc.o midend.o misc.o noicon.res.o printing.o random.o \
58 version.o windows.o -lcomctl32 -lcomdlg32 -lgdi32 -luser32 \
59 -lwinspool
60
61dominosa.exe: dominosa.o drawing.o laydomino.o malloc.o midend.o misc.o \
62 noicon.res.o printing.o random.o version.o windows.o
63 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,dominosa.map dominosa.o \
64 drawing.o laydomino.o malloc.o midend.o misc.o noicon.res.o \
65 printing.o random.o version.o windows.o -lcomctl32 \
66 -lcomdlg32 -lgdi32 -luser32 -lwinspool
67
68fifteen.exe: drawing.o fifteen.o malloc.o midend.o misc.o noicon.res.o \
69 printing.o random.o version.o windows.o
70 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,fifteen.map drawing.o \
71 fifteen.o malloc.o midend.o misc.o noicon.res.o printing.o \
72 random.o version.o windows.o -lcomctl32 -lcomdlg32 -lgdi32 \
73 -luser32 -lwinspool
74
75fifteensolver.exe: fifteen2.o malloc.o misc.o nullfe.o random.o
76 $(CC) $(LDFLAGS) -o $@ -Wl,-Map,fifteensolver.map fifteen2.o \
77 malloc.o misc.o nullfe.o random.o
78
79filling.exe: drawing.o dsf.o filling.o malloc.o midend.o misc.o noicon.res.o \
80 printing.o random.o version.o windows.o
81 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,filling.map drawing.o \
82 dsf.o filling.o malloc.o midend.o misc.o noicon.res.o \
83 printing.o random.o version.o windows.o -lcomctl32 \
84 -lcomdlg32 -lgdi32 -luser32 -lwinspool
85
86fillingsolver.exe: dsf.o filling2.o malloc.o misc.o nullfe.o random.o
87 $(CC) $(LDFLAGS) -o $@ -Wl,-Map,fillingsolver.map dsf.o filling2.o \
88 malloc.o misc.o nullfe.o random.o
89
90flip.exe: drawing.o flip.o malloc.o midend.o misc.o noicon.res.o printing.o \
91 random.o tree234.o version.o windows.o
92 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,flip.map drawing.o flip.o \
93 malloc.o midend.o misc.o noicon.res.o printing.o random.o \
94 tree234.o version.o windows.o -lcomctl32 -lcomdlg32 -lgdi32 \
95 -luser32 -lwinspool
96
97flood.exe: drawing.o flood.o malloc.o midend.o misc.o noicon.res.o \
98 printing.o random.o version.o windows.o
99 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,flood.map drawing.o \
100 flood.o malloc.o midend.o misc.o noicon.res.o printing.o \
101 random.o version.o windows.o -lcomctl32 -lcomdlg32 -lgdi32 \
102 -luser32 -lwinspool
103
104galaxies.exe: drawing.o dsf.o galaxies.o malloc.o midend.o misc.o \
105 noicon.res.o printing.o random.o version.o windows.o
106 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,galaxies.map drawing.o \
107 dsf.o galaxies.o malloc.o midend.o misc.o noicon.res.o \
108 printing.o random.o version.o windows.o -lcomctl32 \
109 -lcomdlg32 -lgdi32 -luser32 -lwinspool
110
111galaxiespicture.exe: dsf.o galaxie4.o malloc.o misc.o nullfe.o random.o
112 $(CC) $(LDFLAGS) -o $@ -Wl,-Map,galaxiespicture.map dsf.o galaxie4.o \
113 malloc.o misc.o nullfe.o random.o
114
115galaxiessolver.exe: dsf.o galaxie2.o malloc.o misc.o nullfe.o random.o
116 $(CC) $(LDFLAGS) -o $@ -Wl,-Map,galaxiessolver.map dsf.o galaxie2.o \
117 malloc.o misc.o nullfe.o random.o
118
119guess.exe: drawing.o guess.o malloc.o midend.o misc.o noicon.res.o \
120 printing.o random.o version.o windows.o
121 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,guess.map drawing.o \
122 guess.o malloc.o midend.o misc.o noicon.res.o printing.o \
123 random.o version.o windows.o -lcomctl32 -lcomdlg32 -lgdi32 \
124 -luser32 -lwinspool
125
126inertia.exe: drawing.o inertia.o malloc.o midend.o misc.o noicon.res.o \
127 printing.o random.o version.o windows.o
128 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,inertia.map drawing.o \
129 inertia.o malloc.o midend.o misc.o noicon.res.o printing.o \
130 random.o version.o windows.o -lcomctl32 -lcomdlg32 -lgdi32 \
131 -luser32 -lwinspool
132
133keen.exe: drawing.o dsf.o keen.o latin.o malloc.o maxflow.o midend.o misc.o \
134 noicon.res.o printing.o random.o tree234.o version.o \
135 windows.o
136 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,keen.map drawing.o dsf.o \
137 keen.o latin.o malloc.o maxflow.o midend.o misc.o \
138 noicon.res.o printing.o random.o tree234.o version.o \
139 windows.o -lcomctl32 -lcomdlg32 -lgdi32 -luser32 -lwinspool
140
141keensolver.exe: dsf.o keen2.o latin6.o malloc.o maxflow.o misc.o nullfe.o \
142 random.o tree234.o
143 $(CC) $(LDFLAGS) -o $@ -Wl,-Map,keensolver.map dsf.o keen2.o \
144 latin6.o malloc.o maxflow.o misc.o nullfe.o random.o \
145 tree234.o
146
147latincheck.exe: latin8.o malloc.o maxflow.o misc.o nullfe.o random.o \
148 tree234.o
149 $(CC) $(LDFLAGS) -o $@ -Wl,-Map,latincheck.map latin8.o malloc.o \
150 maxflow.o misc.o nullfe.o random.o tree234.o
151
152lightup.exe: combi.o drawing.o lightup.o malloc.o midend.o misc.o \
153 noicon.res.o printing.o random.o version.o windows.o
154 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,lightup.map combi.o \
155 drawing.o lightup.o malloc.o midend.o misc.o noicon.res.o \
156 printing.o random.o version.o windows.o -lcomctl32 \
157 -lcomdlg32 -lgdi32 -luser32 -lwinspool
158
159lightupsolver.exe: combi.o lightup2.o malloc.o misc.o nullfe.o random.o
160 $(CC) $(LDFLAGS) -o $@ -Wl,-Map,lightupsolver.map combi.o lightup2.o \
161 malloc.o misc.o nullfe.o random.o
162
163loopy.exe: drawing.o dsf.o grid.o loopgen.o loopy.o malloc.o midend.o misc.o \
164 noicon.res.o penrose.o printing.o random.o tree234.o \
165 version.o windows.o
166 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,loopy.map drawing.o dsf.o \
167 grid.o loopgen.o loopy.o malloc.o midend.o misc.o \
168 noicon.res.o penrose.o printing.o random.o tree234.o \
169 version.o windows.o -lcomctl32 -lcomdlg32 -lgdi32 -luser32 \
170 -lwinspool
171
172loopysolver.exe: dsf.o grid.o loopgen.o loopy2.o malloc.o misc.o nullfe.o \
173 penrose.o random.o tree234.o
174 $(CC) $(LDFLAGS) -o $@ -Wl,-Map,loopysolver.map dsf.o grid.o \
175 loopgen.o loopy2.o malloc.o misc.o nullfe.o penrose.o \
176 random.o tree234.o
177
178magnets.exe: drawing.o laydomino.o magnets.o malloc.o midend.o misc.o \
179 noicon.res.o printing.o random.o version.o windows.o
180 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,magnets.map drawing.o \
181 laydomino.o magnets.o malloc.o midend.o misc.o noicon.res.o \
182 printing.o random.o version.o windows.o -lcomctl32 \
183 -lcomdlg32 -lgdi32 -luser32 -lwinspool
184
185magnetssolver.exe: laydomino.o magnets2.o malloc.o misc.o nullfe.o random.o
186 $(CC) $(LDFLAGS) -o $@ -Wl,-Map,magnetssolver.map laydomino.o \
187 magnets2.o malloc.o misc.o nullfe.o random.o
188
189map.exe: drawing.o dsf.o malloc.o map.o midend.o misc.o noicon.res.o \
190 printing.o random.o version.o windows.o
191 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,map.map drawing.o dsf.o \
192 malloc.o map.o midend.o misc.o noicon.res.o printing.o \
193 random.o version.o windows.o -lcomctl32 -lcomdlg32 -lgdi32 \
194 -luser32 -lwinspool
195
196mapsolver.exe: dsf.o malloc.o map2.o misc.o nullfe.o random.o
197 $(CC) $(LDFLAGS) -o $@ -Wl,-Map,mapsolver.map dsf.o malloc.o map2.o \
198 misc.o nullfe.o random.o
199
200mineobfusc.exe: malloc.o mines2.o misc.o nullfe.o random.o tree234.o
201 $(CC) $(LDFLAGS) -o $@ -Wl,-Map,mineobfusc.map malloc.o mines2.o \
202 misc.o nullfe.o random.o tree234.o
203
204mines.exe: drawing.o malloc.o midend.o mines.o misc.o noicon.res.o \
205 printing.o random.o tree234.o version.o windows.o
206 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,mines.map drawing.o \
207 malloc.o midend.o mines.o misc.o noicon.res.o printing.o \
208 random.o tree234.o version.o windows.o -lcomctl32 -lcomdlg32 \
209 -lgdi32 -luser32 -lwinspool
210
211netgame.exe: drawing.o dsf.o findloop.o malloc.o midend.o misc.o net.o \
212 noicon.res.o printing.o random.o tree234.o version.o \
213 windows.o
214 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,netgame.map drawing.o \
215 dsf.o findloop.o malloc.o midend.o misc.o net.o noicon.res.o \
216 printing.o random.o tree234.o version.o windows.o -lcomctl32 \
217 -lcomdlg32 -lgdi32 -luser32 -lwinspool
218
219netslide.exe: drawing.o malloc.o midend.o misc.o netslide.o noicon.res.o \
220 printing.o random.o tree234.o version.o windows.o
221 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,netslide.map drawing.o \
222 malloc.o midend.o misc.o netslide.o noicon.res.o printing.o \
223 random.o tree234.o version.o windows.o -lcomctl32 -lcomdlg32 \
224 -lgdi32 -luser32 -lwinspool
225
226nullgame.exe: drawing.o malloc.o midend.o misc.o noicon.res.o nullgame.o \
227 printing.o random.o version.o windows.o
228 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,nullgame.map drawing.o \
229 malloc.o midend.o misc.o noicon.res.o nullgame.o printing.o \
230 random.o version.o windows.o -lcomctl32 -lcomdlg32 -lgdi32 \
231 -luser32 -lwinspool
232
233palisade.exe: divvy.o drawing.o dsf.o malloc.o midend.o misc.o noicon.res.o \
234 palisade.o printing.o random.o version.o windows.o
235 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,palisade.map divvy.o \
236 drawing.o dsf.o malloc.o midend.o misc.o noicon.res.o \
237 palisade.o printing.o random.o version.o windows.o \
238 -lcomctl32 -lcomdlg32 -lgdi32 -luser32 -lwinspool
239
240pattern.exe: drawing.o malloc.o midend.o misc.o noicon.res.o pattern.o \
241 printing.o random.o version.o windows.o
242 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,pattern.map drawing.o \
243 malloc.o midend.o misc.o noicon.res.o pattern.o printing.o \
244 random.o version.o windows.o -lcomctl32 -lcomdlg32 -lgdi32 \
245 -luser32 -lwinspool
246
247patternpicture.exe: malloc.o misc.o nullfe.o pattern4.o random.o
248 $(CC) $(LDFLAGS) -o $@ -Wl,-Map,patternpicture.map malloc.o misc.o \
249 nullfe.o pattern4.o random.o
250
251patternsolver.exe: malloc.o misc.o nullfe.o pattern2.o random.o
252 $(CC) $(LDFLAGS) -o $@ -Wl,-Map,patternsolver.map malloc.o misc.o \
253 nullfe.o pattern2.o random.o
254
255pearl.exe: drawing.o dsf.o grid.o loopgen.o malloc.o midend.o misc.o pearl.o \
256 penrose.o printing.o random.o tdq.o tree234.o version.o \
257 windows.o
258 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,pearl.map drawing.o dsf.o \
259 grid.o loopgen.o malloc.o midend.o misc.o pearl.o penrose.o \
260 printing.o random.o tdq.o tree234.o version.o windows.o \
261 -lcomctl32 -lcomdlg32 -lgdi32 -luser32 -lwinspool
262
263pearlbench.exe: dsf.o grid.o loopgen.o malloc.o misc.o nullfe.o pearl2.o \
264 penrose.o random.o tdq.o tree234.o
265 $(CC) $(LDFLAGS) -o $@ -Wl,-Map,pearlbench.map dsf.o grid.o \
266 loopgen.o malloc.o misc.o nullfe.o pearl2.o penrose.o \
267 random.o tdq.o tree234.o
268
269pegs.exe: drawing.o malloc.o midend.o misc.o noicon.res.o pegs.o printing.o \
270 random.o tree234.o version.o windows.o
271 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,pegs.map drawing.o \
272 malloc.o midend.o misc.o noicon.res.o pegs.o printing.o \
273 random.o tree234.o version.o windows.o -lcomctl32 -lcomdlg32 \
274 -lgdi32 -luser32 -lwinspool
275
276puzzles.exe: blackbo3.o bridges3.o combi.o cube3.o divvy.o dominos3.o \
277 drawing.o dsf.o fifteen5.o filling5.o findloop.o flip3.o \
278 flood3.o galaxie7.o grid.o guess3.o inertia3.o keen5.o \
279 latin.o laydomino.o lightup5.o list.o loopgen.o loopy5.o \
280 magnets5.o malloc.o map5.o maxflow.o midend.o mines5.o \
281 misc.o net3.o netslid3.o noicon.res.o palisad3.o pattern7.o \
282 pearl5.o pegs3.o penrose.o printing.o random.o range3.o \
283 rect3.o samegam3.o signpos5.o singles5.o sixteen3.o slant5.o \
284 solo5.o tdq.o tents5.o towers5.o tracks3.o tree234.o \
285 twiddle3.o undead3.o unequal5.o unruly5.o untangl3.o \
286 version.o windows1.o
287 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,puzzles.map blackbo3.o \
288 bridges3.o combi.o cube3.o divvy.o dominos3.o drawing.o \
289 dsf.o fifteen5.o filling5.o findloop.o flip3.o flood3.o \
290 galaxie7.o grid.o guess3.o inertia3.o keen5.o latin.o \
291 laydomino.o lightup5.o list.o loopgen.o loopy5.o magnets5.o \
292 malloc.o map5.o maxflow.o midend.o mines5.o misc.o net3.o \
293 netslid3.o noicon.res.o palisad3.o pattern7.o pearl5.o \
294 pegs3.o penrose.o printing.o random.o range3.o rect3.o \
295 samegam3.o signpos5.o singles5.o sixteen3.o slant5.o solo5.o \
296 tdq.o tents5.o towers5.o tracks3.o tree234.o twiddle3.o \
297 undead3.o unequal5.o unruly5.o untangl3.o version.o \
298 windows1.o -lcomctl32 -lcomdlg32 -lgdi32 -luser32 -lwinspool
299
300range.exe: drawing.o dsf.o malloc.o midend.o misc.o noicon.res.o printing.o \
301 random.o range.o version.o windows.o
302 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,range.map drawing.o dsf.o \
303 malloc.o midend.o misc.o noicon.res.o printing.o random.o \
304 range.o version.o windows.o -lcomctl32 -lcomdlg32 -lgdi32 \
305 -luser32 -lwinspool
306
307rect.exe: drawing.o malloc.o midend.o misc.o noicon.res.o printing.o \
308 random.o rect.o version.o windows.o
309 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,rect.map drawing.o \
310 malloc.o midend.o misc.o noicon.res.o printing.o random.o \
311 rect.o version.o windows.o -lcomctl32 -lcomdlg32 -lgdi32 \
312 -luser32 -lwinspool
313
314samegame.exe: drawing.o malloc.o midend.o misc.o noicon.res.o printing.o \
315 random.o samegame.o version.o windows.o
316 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,samegame.map drawing.o \
317 malloc.o midend.o misc.o noicon.res.o printing.o random.o \
318 samegame.o version.o windows.o -lcomctl32 -lcomdlg32 -lgdi32 \
319 -luser32 -lwinspool
320
321signpost.exe: drawing.o dsf.o malloc.o midend.o misc.o noicon.res.o \
322 printing.o random.o signpost.o version.o windows.o
323 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,signpost.map drawing.o \
324 dsf.o malloc.o midend.o misc.o noicon.res.o printing.o \
325 random.o signpost.o version.o windows.o -lcomctl32 \
326 -lcomdlg32 -lgdi32 -luser32 -lwinspool
327
328signpostsolver.exe: dsf.o malloc.o misc.o nullfe.o random.o signpos2.o
329 $(CC) $(LDFLAGS) -o $@ -Wl,-Map,signpostsolver.map dsf.o malloc.o \
330 misc.o nullfe.o random.o signpos2.o
331
332singles.exe: drawing.o dsf.o latin.o malloc.o maxflow.o midend.o misc.o \
333 noicon.res.o printing.o random.o singles.o tree234.o \
334 version.o windows.o
335 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,singles.map drawing.o \
336 dsf.o latin.o malloc.o maxflow.o midend.o misc.o \
337 noicon.res.o printing.o random.o singles.o tree234.o \
338 version.o windows.o -lcomctl32 -lcomdlg32 -lgdi32 -luser32 \
339 -lwinspool
340
341singlessolver.exe: dsf.o latin.o malloc.o maxflow.o misc.o nullfe.o random.o \
342 singles3.o tree234.o
343 $(CC) $(LDFLAGS) -o $@ -Wl,-Map,singlessolver.map dsf.o latin.o \
344 malloc.o maxflow.o misc.o nullfe.o random.o singles3.o \
345 tree234.o
346
347sixteen.exe: drawing.o malloc.o midend.o misc.o noicon.res.o printing.o \
348 random.o sixteen.o version.o windows.o
349 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,sixteen.map drawing.o \
350 malloc.o midend.o misc.o noicon.res.o printing.o random.o \
351 sixteen.o version.o windows.o -lcomctl32 -lcomdlg32 -lgdi32 \
352 -luser32 -lwinspool
353
354slant.exe: drawing.o dsf.o findloop.o malloc.o midend.o misc.o noicon.res.o \
355 printing.o random.o slant.o version.o windows.o
356 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,slant.map drawing.o dsf.o \
357 findloop.o malloc.o midend.o misc.o noicon.res.o printing.o \
358 random.o slant.o version.o windows.o -lcomctl32 -lcomdlg32 \
359 -lgdi32 -luser32 -lwinspool
360
361slantsolver.exe: dsf.o findloop.o malloc.o misc.o nullfe.o random.o slant2.o
362 $(CC) $(LDFLAGS) -o $@ -Wl,-Map,slantsolver.map dsf.o findloop.o \
363 malloc.o misc.o nullfe.o random.o slant2.o
364
365solo.exe: divvy.o drawing.o dsf.o malloc.o midend.o misc.o noicon.res.o \
366 printing.o random.o solo.o version.o windows.o
367 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,solo.map divvy.o drawing.o \
368 dsf.o malloc.o midend.o misc.o noicon.res.o printing.o \
369 random.o solo.o version.o windows.o -lcomctl32 -lcomdlg32 \
370 -lgdi32 -luser32 -lwinspool
371
372solosolver.exe: divvy.o dsf.o malloc.o misc.o nullfe.o random.o solo2.o
373 $(CC) $(LDFLAGS) -o $@ -Wl,-Map,solosolver.map divvy.o dsf.o \
374 malloc.o misc.o nullfe.o random.o solo2.o
375
376tents.exe: drawing.o dsf.o malloc.o maxflow.o midend.o misc.o noicon.res.o \
377 printing.o random.o tents.o version.o windows.o
378 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,tents.map drawing.o dsf.o \
379 malloc.o maxflow.o midend.o misc.o noicon.res.o printing.o \
380 random.o tents.o version.o windows.o -lcomctl32 -lcomdlg32 \
381 -lgdi32 -luser32 -lwinspool
382
383tentssolver.exe: dsf.o malloc.o maxflow.o misc.o nullfe.o random.o tents3.o
384 $(CC) $(LDFLAGS) -o $@ -Wl,-Map,tentssolver.map dsf.o malloc.o \
385 maxflow.o misc.o nullfe.o random.o tents3.o
386
387towers.exe: drawing.o latin.o malloc.o maxflow.o midend.o misc.o \
388 noicon.res.o printing.o random.o towers.o tree234.o \
389 version.o windows.o
390 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,towers.map drawing.o \
391 latin.o malloc.o maxflow.o midend.o misc.o noicon.res.o \
392 printing.o random.o towers.o tree234.o version.o windows.o \
393 -lcomctl32 -lcomdlg32 -lgdi32 -luser32 -lwinspool
394
395towerssolver.exe: latin6.o malloc.o maxflow.o misc.o nullfe.o random.o \
396 towers2.o tree234.o
397 $(CC) $(LDFLAGS) -o $@ -Wl,-Map,towerssolver.map latin6.o malloc.o \
398 maxflow.o misc.o nullfe.o random.o towers2.o tree234.o
399
400tracks.exe: drawing.o dsf.o findloop.o malloc.o midend.o misc.o noicon.res.o \
401 printing.o random.o tracks.o version.o windows.o
402 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,tracks.map drawing.o dsf.o \
403 findloop.o malloc.o midend.o misc.o noicon.res.o printing.o \
404 random.o tracks.o version.o windows.o -lcomctl32 -lcomdlg32 \
405 -lgdi32 -luser32 -lwinspool
406
407twiddle.exe: drawing.o malloc.o midend.o misc.o noicon.res.o printing.o \
408 random.o twiddle.o version.o windows.o
409 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,twiddle.map drawing.o \
410 malloc.o midend.o misc.o noicon.res.o printing.o random.o \
411 twiddle.o version.o windows.o -lcomctl32 -lcomdlg32 -lgdi32 \
412 -luser32 -lwinspool
413
414undead.exe: drawing.o malloc.o midend.o misc.o noicon.res.o printing.o \
415 random.o undead.o version.o windows.o
416 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,undead.map drawing.o \
417 malloc.o midend.o misc.o noicon.res.o printing.o random.o \
418 undead.o version.o windows.o -lcomctl32 -lcomdlg32 -lgdi32 \
419 -luser32 -lwinspool
420
421unequal.exe: drawing.o latin.o malloc.o maxflow.o midend.o misc.o \
422 noicon.res.o printing.o random.o tree234.o unequal.o \
423 version.o windows.o
424 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,unequal.map drawing.o \
425 latin.o malloc.o maxflow.o midend.o misc.o noicon.res.o \
426 printing.o random.o tree234.o unequal.o version.o windows.o \
427 -lcomctl32 -lcomdlg32 -lgdi32 -luser32 -lwinspool
428
429unequalsolver.exe: latin6.o malloc.o maxflow.o misc.o nullfe.o random.o \
430 tree234.o unequal2.o
431 $(CC) $(LDFLAGS) -o $@ -Wl,-Map,unequalsolver.map latin6.o malloc.o \
432 maxflow.o misc.o nullfe.o random.o tree234.o unequal2.o
433
434unruly.exe: drawing.o malloc.o midend.o misc.o noicon.res.o printing.o \
435 random.o unruly.o version.o windows.o
436 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,unruly.map drawing.o \
437 malloc.o midend.o misc.o noicon.res.o printing.o random.o \
438 unruly.o version.o windows.o -lcomctl32 -lcomdlg32 -lgdi32 \
439 -luser32 -lwinspool
440
441unrulysolver.exe: malloc.o misc.o nullfe.o random.o unruly2.o
442 $(CC) $(LDFLAGS) -o $@ -Wl,-Map,unrulysolver.map malloc.o misc.o \
443 nullfe.o random.o unruly2.o
444
445untangle.exe: drawing.o malloc.o midend.o misc.o noicon.res.o printing.o \
446 random.o tree234.o untangle.o version.o windows.o
447 $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,untangle.map drawing.o \
448 malloc.o midend.o misc.o noicon.res.o printing.o random.o \
449 tree234.o untangle.o version.o windows.o -lcomctl32 \
450 -lcomdlg32 -lgdi32 -luser32 -lwinspool
451
452blackbox.o: ./blackbox.c ./puzzles.h
453 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
454blackbo3.o: ./blackbox.c ./puzzles.h
455 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
456bridges.o: ./bridges.c ./puzzles.h
457 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
458bridges3.o: ./bridges.c ./puzzles.h
459 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
460combi.o: ./combi.c ./puzzles.h
461 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
462cube.o: ./cube.c ./puzzles.h
463 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
464cube3.o: ./cube.c ./puzzles.h
465 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
466divvy.o: ./divvy.c ./puzzles.h
467 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
468dominosa.o: ./dominosa.c ./puzzles.h
469 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
470dominos3.o: ./dominosa.c ./puzzles.h
471 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
472drawing.o: ./drawing.c ./puzzles.h
473 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
474dsf.o: ./dsf.c ./puzzles.h
475 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
476fifteen.o: ./fifteen.c ./puzzles.h
477 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
478fifteen5.o: ./fifteen.c ./puzzles.h
479 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
480fifteen2.o: ./fifteen.c ./puzzles.h
481 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
482filling.o: ./filling.c ./puzzles.h
483 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
484filling5.o: ./filling.c ./puzzles.h
485 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
486filling2.o: ./filling.c ./puzzles.h
487 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
488findloop.o: ./findloop.c ./puzzles.h
489 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
490flip.o: ./flip.c ./puzzles.h ./tree234.h
491 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
492flip3.o: ./flip.c ./puzzles.h ./tree234.h
493 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
494flood.o: ./flood.c ./puzzles.h
495 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
496flood3.o: ./flood.c ./puzzles.h
497 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
498galaxies.o: ./galaxies.c ./puzzles.h
499 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
500galaxie7.o: ./galaxies.c ./puzzles.h
501 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
502galaxie4.o: ./galaxies.c ./puzzles.h
503 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_PICTURE_GENERATOR -c $< -o $@
504galaxie2.o: ./galaxies.c ./puzzles.h
505 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
506grid.o: ./grid.c ./puzzles.h ./tree234.h ./grid.h ./penrose.h
507 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
508gtk.o: ./gtk.c ./puzzles.h
509 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
510guess.o: ./guess.c ./puzzles.h
511 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
512guess3.o: ./guess.c ./puzzles.h
513 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
514inertia.o: ./inertia.c ./puzzles.h
515 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
516inertia3.o: ./inertia.c ./puzzles.h
517 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
518keen.o: ./keen.c ./puzzles.h ./latin.h
519 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
520keen5.o: ./keen.c ./puzzles.h ./latin.h
521 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
522keen2.o: ./keen.c ./puzzles.h ./latin.h
523 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
524latin.o: ./latin.c ./puzzles.h ./tree234.h ./maxflow.h ./latin.h
525 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
526latin8.o: ./latin.c ./puzzles.h ./tree234.h ./maxflow.h ./latin.h
527 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_LATIN_TEST -c $< -o $@
528latin6.o: ./latin.c ./puzzles.h ./tree234.h ./maxflow.h ./latin.h
529 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
530laydomino.o: ./laydomino.c ./puzzles.h
531 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
532lightup.o: ./lightup.c ./puzzles.h
533 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
534lightup5.o: ./lightup.c ./puzzles.h
535 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
536lightup2.o: ./lightup.c ./puzzles.h
537 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
538list.o: ./list.c ./puzzles.h
539 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
540loopgen.o: ./loopgen.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
541 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
542loopy.o: ./loopy.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
543 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
544loopy5.o: ./loopy.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
545 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
546loopy2.o: ./loopy.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
547 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
548magnets.o: ./magnets.c ./puzzles.h
549 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
550magnets5.o: ./magnets.c ./puzzles.h
551 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
552magnets2.o: ./magnets.c ./puzzles.h
553 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
554malloc.o: ./malloc.c ./puzzles.h
555 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
556map.o: ./map.c ./puzzles.h
557 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
558map5.o: ./map.c ./puzzles.h
559 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
560map2.o: ./map.c ./puzzles.h
561 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
562maxflow.o: ./maxflow.c ./maxflow.h ./puzzles.h
563 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
564midend.o: ./midend.c ./puzzles.h
565 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
566mines.o: ./mines.c ./tree234.h ./puzzles.h
567 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
568mines5.o: ./mines.c ./tree234.h ./puzzles.h
569 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
570mines2.o: ./mines.c ./tree234.h ./puzzles.h
571 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_OBFUSCATOR -c $< -o $@
572misc.o: ./misc.c ./puzzles.h
573 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
574net.o: ./net.c ./puzzles.h ./tree234.h
575 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
576net3.o: ./net.c ./puzzles.h ./tree234.h
577 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
578netslide.o: ./netslide.c ./puzzles.h ./tree234.h
579 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
580netslid3.o: ./netslide.c ./puzzles.h ./tree234.h
581 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
582no-icon.o: ./no-icon.c
583 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
584noicon.res.o: ./noicon.rc ./puzzles.rc2 ./resource.h
585 $(RC) $(FWHACK) $(RCFL) $(RCFLAGS) $< $@
586nullfe.o: ./nullfe.c ./puzzles.h
587 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
588nullgame.o: ./nullgame.c ./puzzles.h
589 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
590obfusc.o: ./obfusc.c ./puzzles.h
591 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
592osx.o: ./osx.m ./puzzles.h
593 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
594palisade.o: ./palisade.c ./puzzles.h
595 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
596palisad3.o: ./palisade.c ./puzzles.h
597 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
598pattern.o: ./pattern.c ./puzzles.h
599 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
600pattern7.o: ./pattern.c ./puzzles.h
601 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
602pattern4.o: ./pattern.c ./puzzles.h
603 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_PICTURE_GENERATOR -c $< -o $@
604pattern2.o: ./pattern.c ./puzzles.h
605 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
606pearl.o: ./pearl.c ./puzzles.h ./grid.h ./loopgen.h
607 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
608pearl5.o: ./pearl.c ./puzzles.h ./grid.h ./loopgen.h
609 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
610pearl2.o: ./pearl.c ./puzzles.h ./grid.h ./loopgen.h
611 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
612pegs.o: ./pegs.c ./puzzles.h ./tree234.h
613 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
614pegs3.o: ./pegs.c ./puzzles.h ./tree234.h
615 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
616penrose.o: ./penrose.c ./puzzles.h ./penrose.h
617 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
618printing.o: ./printing.c ./puzzles.h
619 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
620ps.o: ./ps.c ./puzzles.h
621 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
622random.o: ./random.c ./puzzles.h
623 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
624range.o: ./range.c ./puzzles.h
625 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
626range3.o: ./range.c ./puzzles.h
627 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
628rect.o: ./rect.c ./puzzles.h
629 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
630rect3.o: ./rect.c ./puzzles.h
631 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
632samegame.o: ./samegame.c ./puzzles.h
633 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
634samegam3.o: ./samegame.c ./puzzles.h
635 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
636signpost.o: ./signpost.c ./puzzles.h
637 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
638signpos5.o: ./signpost.c ./puzzles.h
639 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
640signpos2.o: ./signpost.c ./puzzles.h
641 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
642singles.o: ./singles.c ./puzzles.h ./latin.h
643 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
644singles5.o: ./singles.c ./puzzles.h ./latin.h
645 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
646singles3.o: ./singles.c ./puzzles.h ./latin.h
647 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
648sixteen.o: ./sixteen.c ./puzzles.h
649 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
650sixteen3.o: ./sixteen.c ./puzzles.h
651 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
652slant.o: ./slant.c ./puzzles.h
653 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
654slant5.o: ./slant.c ./puzzles.h
655 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
656slant2.o: ./slant.c ./puzzles.h
657 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
658solo.o: ./solo.c ./puzzles.h
659 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
660solo5.o: ./solo.c ./puzzles.h
661 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
662solo2.o: ./solo.c ./puzzles.h
663 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
664tdq.o: ./tdq.c ./puzzles.h
665 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
666tents.o: ./tents.c ./puzzles.h ./maxflow.h
667 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
668tents5.o: ./tents.c ./puzzles.h ./maxflow.h
669 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
670tents3.o: ./tents.c ./puzzles.h ./maxflow.h
671 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
672towers.o: ./towers.c ./puzzles.h ./latin.h
673 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
674towers5.o: ./towers.c ./puzzles.h ./latin.h
675 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
676towers2.o: ./towers.c ./puzzles.h ./latin.h
677 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
678tracks.o: ./tracks.c ./puzzles.h
679 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
680tracks3.o: ./tracks.c ./puzzles.h
681 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
682tree234.o: ./tree234.c ./tree234.h ./puzzles.h
683 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
684twiddle.o: ./twiddle.c ./puzzles.h
685 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
686twiddle3.o: ./twiddle.c ./puzzles.h
687 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
688undead.o: ./undead.c ./puzzles.h
689 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
690undead3.o: ./undead.c ./puzzles.h
691 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
692unequal.o: ./unequal.c ./puzzles.h ./latin.h
693 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
694unequal5.o: ./unequal.c ./puzzles.h ./latin.h
695 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
696unequal2.o: ./unequal.c ./puzzles.h ./latin.h
697 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
698unruly.o: ./unruly.c ./puzzles.h
699 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
700unruly5.o: ./unruly.c ./puzzles.h
701 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
702unruly2.o: ./unruly.c ./puzzles.h
703 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
704untangle.o: ./untangle.c ./puzzles.h ./tree234.h
705 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
706untangl3.o: ./untangle.c ./puzzles.h ./tree234.h
707 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
708version.o: ./version.c ./version.h
709 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
710windows.o: ./windows.c ./puzzles.h ./resource.h
711 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
712windows1.o: ./windows.c ./puzzles.h ./resource.h
713 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
714
715
716clean:
717 rm -f *.o *.exe *.res.o *.map
718
diff --git a/apps/plugins/puzzles/src/Makefile.doc b/apps/plugins/puzzles/src/Makefile.doc
new file mode 100644
index 0000000000..c7d6946cf1
--- /dev/null
+++ b/apps/plugins/puzzles/src/Makefile.doc
@@ -0,0 +1,17 @@
1all: puzzles.hlp puzzles.txt HACKING
2
3preprocessed.but: puzzles.but
4 sed 's/PREFIX-/$(BINPREFIX)/g' puzzles.but > preprocessed.but
5
6puzzles.hlp puzzles.txt: preprocessed.but
7 halibut --winhelp=puzzles.hlp --text=puzzles.txt preprocessed.but
8
9HACKING: devel.but
10 halibut --text=HACKING devel.but
11
12chm: puzzles.hhp
13puzzles.hhp: puzzles.but chm.but
14 halibut --html puzzles.but chm.but
15
16clean:
17 rm -f puzzles.hlp puzzles.txt preprocessed.but HACKING *.html *.hh[pck]
diff --git a/apps/plugins/puzzles/src/Makefile.emcc b/apps/plugins/puzzles/src/Makefile.emcc
new file mode 100644
index 0000000000..9677b2a1cf
--- /dev/null
+++ b/apps/plugins/puzzles/src/Makefile.emcc
@@ -0,0 +1,497 @@
1# Makefile for puzzles using Emscripten. Requires GNU make.
2#
3# This file was created by `mkfiles.pl' from the `Recipe' file.
4# DO NOT EDIT THIS FILE DIRECTLY; edit Recipe or mkfiles.pl instead.
5
6# This can be set on the command line to point at the emcc command,
7# if it is not on your PATH.
8EMCC = emcc
9
10CFLAGS = -DSLOW_SYSTEM -I./ -Iicons/
11
12all: $(OUTPREFIX)blackbox.js $(OUTPREFIX)bridges.js $(OUTPREFIX)cube.js \
13 $(OUTPREFIX)dominosa.js $(OUTPREFIX)fifteen.js \
14 $(OUTPREFIX)filling.js $(OUTPREFIX)flip.js \
15 $(OUTPREFIX)flood.js $(OUTPREFIX)galaxies.js \
16 $(OUTPREFIX)guess.js $(OUTPREFIX)inertia.js \
17 $(OUTPREFIX)keen.js $(OUTPREFIX)lightup.js \
18 $(OUTPREFIX)loopy.js $(OUTPREFIX)magnets.js \
19 $(OUTPREFIX)map.js $(OUTPREFIX)mines.js $(OUTPREFIX)net.js \
20 $(OUTPREFIX)netslide.js $(OUTPREFIX)nullgame.js \
21 $(OUTPREFIX)palisade.js $(OUTPREFIX)pattern.js \
22 $(OUTPREFIX)pearl.js $(OUTPREFIX)pegs.js \
23 $(OUTPREFIX)range.js $(OUTPREFIX)rect.js \
24 $(OUTPREFIX)samegame.js $(OUTPREFIX)signpost.js \
25 $(OUTPREFIX)singles.js $(OUTPREFIX)sixteen.js \
26 $(OUTPREFIX)slant.js $(OUTPREFIX)solo.js \
27 $(OUTPREFIX)tents.js $(OUTPREFIX)towers.js \
28 $(OUTPREFIX)tracks.js $(OUTPREFIX)twiddle.js \
29 $(OUTPREFIX)undead.js $(OUTPREFIX)unequal.js \
30 $(OUTPREFIX)unruly.js $(OUTPREFIX)untangle.js
31
32$(OUTPREFIX)blackbox.js: blackbox.o drawing.o emcc.o malloc.o midend.o \
33 misc.o no-icon.o printing.o ps.o random.o version.o \
34 emccpre.js emcclib.js emccx.json
35 $(EMCC) -o $(OUTPREFIX)blackbox.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" blackbox.o drawing.o emcc.o malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o version.o
36
37$(OUTPREFIX)bridges.js: bridges.o drawing.o dsf.o findloop.o emcc.o malloc.o \
38 midend.o misc.o no-icon.o printing.o ps.o random.o version.o \
39 emccpre.js emcclib.js emccx.json
40 $(EMCC) -o $(OUTPREFIX)bridges.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" bridges.o drawing.o dsf.o findloop.o emcc.o malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o version.o
41
42$(OUTPREFIX)cube.js: cube.o drawing.o emcc.o malloc.o midend.o misc.o \
43 no-icon.o printing.o ps.o random.o version.o emccpre.js \
44 emcclib.js emccx.json
45 $(EMCC) -o $(OUTPREFIX)cube.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" cube.o drawing.o emcc.o malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o version.o
46
47$(OUTPREFIX)dominosa.js: dominosa.o drawing.o emcc.o laydomino.o malloc.o \
48 midend.o misc.o no-icon.o printing.o ps.o random.o version.o \
49 emccpre.js emcclib.js emccx.json
50 $(EMCC) -o $(OUTPREFIX)dominosa.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" dominosa.o drawing.o emcc.o laydomino.o malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o version.o
51
52$(OUTPREFIX)fifteen.js: drawing.o fifteen.o emcc.o malloc.o midend.o misc.o \
53 no-icon.o printing.o ps.o random.o version.o emccpre.js \
54 emcclib.js emccx.json
55 $(EMCC) -o $(OUTPREFIX)fifteen.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o fifteen.o emcc.o malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o version.o
56
57$(OUTPREFIX)filling.js: drawing.o dsf.o filling.o emcc.o malloc.o midend.o \
58 misc.o no-icon.o printing.o ps.o random.o version.o \
59 emccpre.js emcclib.js emccx.json
60 $(EMCC) -o $(OUTPREFIX)filling.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o dsf.o filling.o emcc.o malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o version.o
61
62$(OUTPREFIX)flip.js: drawing.o flip.o emcc.o malloc.o midend.o misc.o \
63 no-icon.o printing.o ps.o random.o tree234.o version.o \
64 emccpre.js emcclib.js emccx.json
65 $(EMCC) -o $(OUTPREFIX)flip.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o flip.o emcc.o malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o tree234.o version.o
66
67$(OUTPREFIX)flood.js: drawing.o flood.o emcc.o malloc.o midend.o misc.o \
68 no-icon.o printing.o ps.o random.o version.o emccpre.js \
69 emcclib.js emccx.json
70 $(EMCC) -o $(OUTPREFIX)flood.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o flood.o emcc.o malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o version.o
71
72$(OUTPREFIX)galaxies.js: drawing.o dsf.o galaxies.o emcc.o malloc.o midend.o \
73 misc.o no-icon.o printing.o ps.o random.o version.o \
74 emccpre.js emcclib.js emccx.json
75 $(EMCC) -o $(OUTPREFIX)galaxies.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o dsf.o galaxies.o emcc.o malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o version.o
76
77$(OUTPREFIX)guess.js: drawing.o emcc.o guess.o malloc.o midend.o misc.o \
78 no-icon.o printing.o ps.o random.o version.o emccpre.js \
79 emcclib.js emccx.json
80 $(EMCC) -o $(OUTPREFIX)guess.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o emcc.o guess.o malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o version.o
81
82$(OUTPREFIX)inertia.js: drawing.o emcc.o inertia.o malloc.o midend.o misc.o \
83 no-icon.o printing.o ps.o random.o version.o emccpre.js \
84 emcclib.js emccx.json
85 $(EMCC) -o $(OUTPREFIX)inertia.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o emcc.o inertia.o malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o version.o
86
87$(OUTPREFIX)keen.js: drawing.o dsf.o emcc.o keen.o latin.o malloc.o \
88 maxflow.o midend.o misc.o no-icon.o printing.o ps.o random.o \
89 tree234.o version.o emccpre.js emcclib.js emccx.json
90 $(EMCC) -o $(OUTPREFIX)keen.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o dsf.o emcc.o keen.o latin.o malloc.o maxflow.o midend.o misc.o no-icon.o printing.o ps.o random.o tree234.o version.o
91
92$(OUTPREFIX)lightup.js: combi.o drawing.o emcc.o lightup.o malloc.o midend.o \
93 misc.o no-icon.o printing.o ps.o random.o version.o \
94 emccpre.js emcclib.js emccx.json
95 $(EMCC) -o $(OUTPREFIX)lightup.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" combi.o drawing.o emcc.o lightup.o malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o version.o
96
97$(OUTPREFIX)loopy.js: drawing.o dsf.o grid.o emcc.o loopgen.o loopy.o \
98 malloc.o midend.o misc.o no-icon.o penrose.o printing.o ps.o \
99 random.o tree234.o version.o emccpre.js emcclib.js \
100 emccx.json
101 $(EMCC) -o $(OUTPREFIX)loopy.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o dsf.o grid.o emcc.o loopgen.o loopy.o malloc.o midend.o misc.o no-icon.o penrose.o printing.o ps.o random.o tree234.o version.o
102
103$(OUTPREFIX)magnets.js: drawing.o emcc.o laydomino.o magnets.o malloc.o \
104 midend.o misc.o no-icon.o printing.o ps.o random.o version.o \
105 emccpre.js emcclib.js emccx.json
106 $(EMCC) -o $(OUTPREFIX)magnets.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o emcc.o laydomino.o magnets.o malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o version.o
107
108$(OUTPREFIX)map.js: drawing.o dsf.o emcc.o malloc.o map.o midend.o misc.o \
109 no-icon.o printing.o ps.o random.o version.o emccpre.js \
110 emcclib.js emccx.json
111 $(EMCC) -o $(OUTPREFIX)map.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o dsf.o emcc.o malloc.o map.o midend.o misc.o no-icon.o printing.o ps.o random.o version.o
112
113$(OUTPREFIX)mines.js: drawing.o emcc.o malloc.o midend.o mines.o misc.o \
114 no-icon.o printing.o ps.o random.o tree234.o version.o \
115 emccpre.js emcclib.js emccx.json
116 $(EMCC) -o $(OUTPREFIX)mines.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o emcc.o malloc.o midend.o mines.o misc.o no-icon.o printing.o ps.o random.o tree234.o version.o
117
118$(OUTPREFIX)net.js: drawing.o dsf.o findloop.o emcc.o malloc.o midend.o \
119 misc.o net.o no-icon.o printing.o ps.o random.o tree234.o \
120 version.o emccpre.js emcclib.js emccx.json
121 $(EMCC) -o $(OUTPREFIX)net.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o dsf.o findloop.o emcc.o malloc.o midend.o misc.o net.o no-icon.o printing.o ps.o random.o tree234.o version.o
122
123$(OUTPREFIX)netslide.js: drawing.o emcc.o malloc.o midend.o misc.o \
124 netslide.o no-icon.o printing.o ps.o random.o tree234.o \
125 version.o emccpre.js emcclib.js emccx.json
126 $(EMCC) -o $(OUTPREFIX)netslide.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o emcc.o malloc.o midend.o misc.o netslide.o no-icon.o printing.o ps.o random.o tree234.o version.o
127
128$(OUTPREFIX)nullgame.js: drawing.o emcc.o malloc.o midend.o misc.o no-icon.o \
129 nullgame.o printing.o ps.o random.o version.o emccpre.js \
130 emcclib.js emccx.json
131 $(EMCC) -o $(OUTPREFIX)nullgame.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o emcc.o malloc.o midend.o misc.o no-icon.o nullgame.o printing.o ps.o random.o version.o
132
133$(OUTPREFIX)palisade.js: divvy.o drawing.o dsf.o emcc.o malloc.o midend.o \
134 misc.o no-icon.o palisade.o printing.o ps.o random.o \
135 version.o emccpre.js emcclib.js emccx.json
136 $(EMCC) -o $(OUTPREFIX)palisade.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" divvy.o drawing.o dsf.o emcc.o malloc.o midend.o misc.o no-icon.o palisade.o printing.o ps.o random.o version.o
137
138$(OUTPREFIX)pattern.js: drawing.o emcc.o malloc.o midend.o misc.o no-icon.o \
139 pattern.o printing.o ps.o random.o version.o emccpre.js \
140 emcclib.js emccx.json
141 $(EMCC) -o $(OUTPREFIX)pattern.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o emcc.o malloc.o midend.o misc.o no-icon.o pattern.o printing.o ps.o random.o version.o
142
143$(OUTPREFIX)pearl.js: drawing.o dsf.o grid.o emcc.o loopgen.o malloc.o \
144 midend.o misc.o no-icon.o pearl.o penrose.o printing.o ps.o \
145 random.o tdq.o tree234.o version.o emccpre.js emcclib.js \
146 emccx.json
147 $(EMCC) -o $(OUTPREFIX)pearl.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o dsf.o grid.o emcc.o loopgen.o malloc.o midend.o misc.o no-icon.o pearl.o penrose.o printing.o ps.o random.o tdq.o tree234.o version.o
148
149$(OUTPREFIX)pegs.js: drawing.o emcc.o malloc.o midend.o misc.o no-icon.o \
150 pegs.o printing.o ps.o random.o tree234.o version.o \
151 emccpre.js emcclib.js emccx.json
152 $(EMCC) -o $(OUTPREFIX)pegs.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o emcc.o malloc.o midend.o misc.o no-icon.o pegs.o printing.o ps.o random.o tree234.o version.o
153
154$(OUTPREFIX)range.js: drawing.o dsf.o emcc.o malloc.o midend.o misc.o \
155 no-icon.o printing.o ps.o random.o range.o version.o \
156 emccpre.js emcclib.js emccx.json
157 $(EMCC) -o $(OUTPREFIX)range.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o dsf.o emcc.o malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o range.o version.o
158
159$(OUTPREFIX)rect.js: drawing.o emcc.o malloc.o midend.o misc.o no-icon.o \
160 printing.o ps.o random.o rect.o version.o emccpre.js \
161 emcclib.js emccx.json
162 $(EMCC) -o $(OUTPREFIX)rect.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o emcc.o malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o rect.o version.o
163
164$(OUTPREFIX)samegame.js: drawing.o emcc.o malloc.o midend.o misc.o no-icon.o \
165 printing.o ps.o random.o samegame.o version.o emccpre.js \
166 emcclib.js emccx.json
167 $(EMCC) -o $(OUTPREFIX)samegame.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o emcc.o malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o samegame.o version.o
168
169$(OUTPREFIX)signpost.js: drawing.o dsf.o emcc.o malloc.o midend.o misc.o \
170 no-icon.o printing.o ps.o random.o signpost.o version.o \
171 emccpre.js emcclib.js emccx.json
172 $(EMCC) -o $(OUTPREFIX)signpost.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o dsf.o emcc.o malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o signpost.o version.o
173
174$(OUTPREFIX)singles.js: drawing.o dsf.o emcc.o latin.o malloc.o maxflow.o \
175 midend.o misc.o no-icon.o printing.o ps.o random.o singles.o \
176 tree234.o version.o emccpre.js emcclib.js emccx.json
177 $(EMCC) -o $(OUTPREFIX)singles.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o dsf.o emcc.o latin.o malloc.o maxflow.o midend.o misc.o no-icon.o printing.o ps.o random.o singles.o tree234.o version.o
178
179$(OUTPREFIX)sixteen.js: drawing.o emcc.o malloc.o midend.o misc.o no-icon.o \
180 printing.o ps.o random.o sixteen.o version.o emccpre.js \
181 emcclib.js emccx.json
182 $(EMCC) -o $(OUTPREFIX)sixteen.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o emcc.o malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o sixteen.o version.o
183
184$(OUTPREFIX)slant.js: drawing.o dsf.o findloop.o emcc.o malloc.o midend.o \
185 misc.o no-icon.o printing.o ps.o random.o slant.o version.o \
186 emccpre.js emcclib.js emccx.json
187 $(EMCC) -o $(OUTPREFIX)slant.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o dsf.o findloop.o emcc.o malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o slant.o version.o
188
189$(OUTPREFIX)solo.js: divvy.o drawing.o dsf.o emcc.o malloc.o midend.o misc.o \
190 no-icon.o printing.o ps.o random.o solo.o version.o \
191 emccpre.js emcclib.js emccx.json
192 $(EMCC) -o $(OUTPREFIX)solo.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" divvy.o drawing.o dsf.o emcc.o malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o solo.o version.o
193
194$(OUTPREFIX)tents.js: drawing.o dsf.o emcc.o malloc.o maxflow.o midend.o \
195 misc.o no-icon.o printing.o ps.o random.o tents.o version.o \
196 emccpre.js emcclib.js emccx.json
197 $(EMCC) -o $(OUTPREFIX)tents.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o dsf.o emcc.o malloc.o maxflow.o midend.o misc.o no-icon.o printing.o ps.o random.o tents.o version.o
198
199$(OUTPREFIX)towers.js: drawing.o emcc.o latin.o malloc.o maxflow.o midend.o \
200 misc.o no-icon.o printing.o ps.o random.o towers.o tree234.o \
201 version.o emccpre.js emcclib.js emccx.json
202 $(EMCC) -o $(OUTPREFIX)towers.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o emcc.o latin.o malloc.o maxflow.o midend.o misc.o no-icon.o printing.o ps.o random.o towers.o tree234.o version.o
203
204$(OUTPREFIX)tracks.js: drawing.o dsf.o findloop.o emcc.o malloc.o midend.o \
205 misc.o no-icon.o printing.o ps.o random.o tracks.o version.o \
206 emccpre.js emcclib.js emccx.json
207 $(EMCC) -o $(OUTPREFIX)tracks.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o dsf.o findloop.o emcc.o malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o tracks.o version.o
208
209$(OUTPREFIX)twiddle.js: drawing.o emcc.o malloc.o midend.o misc.o no-icon.o \
210 printing.o ps.o random.o twiddle.o version.o emccpre.js \
211 emcclib.js emccx.json
212 $(EMCC) -o $(OUTPREFIX)twiddle.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o emcc.o malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o twiddle.o version.o
213
214$(OUTPREFIX)undead.js: drawing.o emcc.o malloc.o midend.o misc.o no-icon.o \
215 printing.o ps.o random.o undead.o version.o emccpre.js \
216 emcclib.js emccx.json
217 $(EMCC) -o $(OUTPREFIX)undead.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o emcc.o malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o undead.o version.o
218
219$(OUTPREFIX)unequal.js: drawing.o emcc.o latin.o malloc.o maxflow.o midend.o \
220 misc.o no-icon.o printing.o ps.o random.o tree234.o \
221 unequal.o version.o emccpre.js emcclib.js emccx.json
222 $(EMCC) -o $(OUTPREFIX)unequal.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o emcc.o latin.o malloc.o maxflow.o midend.o misc.o no-icon.o printing.o ps.o random.o tree234.o unequal.o version.o
223
224$(OUTPREFIX)unruly.js: drawing.o emcc.o malloc.o midend.o misc.o no-icon.o \
225 printing.o ps.o random.o unruly.o version.o emccpre.js \
226 emcclib.js emccx.json
227 $(EMCC) -o $(OUTPREFIX)unruly.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o emcc.o malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o unruly.o version.o
228
229$(OUTPREFIX)untangle.js: drawing.o emcc.o malloc.o midend.o misc.o no-icon.o \
230 printing.o ps.o random.o tree234.o untangle.o version.o \
231 emccpre.js emcclib.js emccx.json
232 $(EMCC) -o $(OUTPREFIX)untangle.js -O2 -s ASM_JS=1 --pre-js emccpre.js --js-library emcclib.js -s EXPORTED_FUNCTIONS="`sed 's://.*::' emccx.json | tr -d ' \n'`" drawing.o emcc.o malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o tree234.o untangle.o version.o
233
234blackbox.o: ./blackbox.c ./puzzles.h
235 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
236blackbo3.o: ./blackbox.c ./puzzles.h
237 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
238bridges.o: ./bridges.c ./puzzles.h
239 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
240bridges3.o: ./bridges.c ./puzzles.h
241 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
242combi.o: ./combi.c ./puzzles.h
243 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
244cube.o: ./cube.c ./puzzles.h
245 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
246cube3.o: ./cube.c ./puzzles.h
247 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
248divvy.o: ./divvy.c ./puzzles.h
249 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
250dominosa.o: ./dominosa.c ./puzzles.h
251 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
252dominos3.o: ./dominosa.c ./puzzles.h
253 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
254drawing.o: ./drawing.c ./puzzles.h
255 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
256dsf.o: ./dsf.c ./puzzles.h
257 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
258fifteen.o: ./fifteen.c ./puzzles.h
259 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
260fifteen5.o: ./fifteen.c ./puzzles.h
261 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
262fifteen2.o: ./fifteen.c ./puzzles.h
263 $(EMCC) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
264filling.o: ./filling.c ./puzzles.h
265 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
266filling5.o: ./filling.c ./puzzles.h
267 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
268filling2.o: ./filling.c ./puzzles.h
269 $(EMCC) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
270findloop.o: ./findloop.c ./puzzles.h
271 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
272flip.o: ./flip.c ./puzzles.h ./tree234.h
273 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
274flip3.o: ./flip.c ./puzzles.h ./tree234.h
275 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
276flood.o: ./flood.c ./puzzles.h
277 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
278flood3.o: ./flood.c ./puzzles.h
279 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
280galaxies.o: ./galaxies.c ./puzzles.h
281 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
282galaxie7.o: ./galaxies.c ./puzzles.h
283 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
284galaxie4.o: ./galaxies.c ./puzzles.h
285 $(EMCC) $(CFLAGS) $(XFLAGS) -DSTANDALONE_PICTURE_GENERATOR -c $< -o $@
286galaxie2.o: ./galaxies.c ./puzzles.h
287 $(EMCC) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
288grid.o: ./grid.c ./puzzles.h ./tree234.h ./grid.h ./penrose.h
289 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
290emcc.o: ./emcc.c ./puzzles.h
291 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
292guess.o: ./guess.c ./puzzles.h
293 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
294guess3.o: ./guess.c ./puzzles.h
295 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
296inertia.o: ./inertia.c ./puzzles.h
297 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
298inertia3.o: ./inertia.c ./puzzles.h
299 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
300keen.o: ./keen.c ./puzzles.h ./latin.h
301 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
302keen5.o: ./keen.c ./puzzles.h ./latin.h
303 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
304keen2.o: ./keen.c ./puzzles.h ./latin.h
305 $(EMCC) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
306latin.o: ./latin.c ./puzzles.h ./tree234.h ./maxflow.h ./latin.h
307 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
308latin8.o: ./latin.c ./puzzles.h ./tree234.h ./maxflow.h ./latin.h
309 $(EMCC) $(CFLAGS) $(XFLAGS) -DSTANDALONE_LATIN_TEST -c $< -o $@
310latin6.o: ./latin.c ./puzzles.h ./tree234.h ./maxflow.h ./latin.h
311 $(EMCC) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
312laydomino.o: ./laydomino.c ./puzzles.h
313 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
314lightup.o: ./lightup.c ./puzzles.h
315 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
316lightup5.o: ./lightup.c ./puzzles.h
317 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
318lightup2.o: ./lightup.c ./puzzles.h
319 $(EMCC) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
320list.o: ./list.c ./puzzles.h
321 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
322loopgen.o: ./loopgen.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
323 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
324loopy.o: ./loopy.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
325 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
326loopy5.o: ./loopy.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
327 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
328loopy2.o: ./loopy.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
329 $(EMCC) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
330magnets.o: ./magnets.c ./puzzles.h
331 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
332magnets5.o: ./magnets.c ./puzzles.h
333 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
334magnets2.o: ./magnets.c ./puzzles.h
335 $(EMCC) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
336malloc.o: ./malloc.c ./puzzles.h
337 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
338map.o: ./map.c ./puzzles.h
339 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
340map5.o: ./map.c ./puzzles.h
341 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
342map2.o: ./map.c ./puzzles.h
343 $(EMCC) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
344maxflow.o: ./maxflow.c ./maxflow.h ./puzzles.h
345 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
346midend.o: ./midend.c ./puzzles.h
347 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
348mines.o: ./mines.c ./tree234.h ./puzzles.h
349 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
350mines5.o: ./mines.c ./tree234.h ./puzzles.h
351 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
352mines2.o: ./mines.c ./tree234.h ./puzzles.h
353 $(EMCC) $(CFLAGS) $(XFLAGS) -DSTANDALONE_OBFUSCATOR -c $< -o $@
354misc.o: ./misc.c ./puzzles.h
355 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
356net.o: ./net.c ./puzzles.h ./tree234.h
357 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
358net3.o: ./net.c ./puzzles.h ./tree234.h
359 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
360netslide.o: ./netslide.c ./puzzles.h ./tree234.h
361 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
362netslid3.o: ./netslide.c ./puzzles.h ./tree234.h
363 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
364no-icon.o: ./no-icon.c
365 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
366nullfe.o: ./nullfe.c ./puzzles.h
367 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
368nullgame.o: ./nullgame.c ./puzzles.h
369 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
370obfusc.o: ./obfusc.c ./puzzles.h
371 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
372osx.o: ./osx.m ./puzzles.h
373 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
374palisade.o: ./palisade.c ./puzzles.h
375 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
376palisad3.o: ./palisade.c ./puzzles.h
377 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
378pattern.o: ./pattern.c ./puzzles.h
379 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
380pattern7.o: ./pattern.c ./puzzles.h
381 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
382pattern4.o: ./pattern.c ./puzzles.h
383 $(EMCC) $(CFLAGS) $(XFLAGS) -DSTANDALONE_PICTURE_GENERATOR -c $< -o $@
384pattern2.o: ./pattern.c ./puzzles.h
385 $(EMCC) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
386pearl.o: ./pearl.c ./puzzles.h ./grid.h ./loopgen.h
387 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
388pearl5.o: ./pearl.c ./puzzles.h ./grid.h ./loopgen.h
389 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
390pearl2.o: ./pearl.c ./puzzles.h ./grid.h ./loopgen.h
391 $(EMCC) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
392pegs.o: ./pegs.c ./puzzles.h ./tree234.h
393 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
394pegs3.o: ./pegs.c ./puzzles.h ./tree234.h
395 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
396penrose.o: ./penrose.c ./puzzles.h ./penrose.h
397 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
398printing.o: ./printing.c ./puzzles.h
399 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
400ps.o: ./ps.c ./puzzles.h
401 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
402random.o: ./random.c ./puzzles.h
403 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
404range.o: ./range.c ./puzzles.h
405 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
406range3.o: ./range.c ./puzzles.h
407 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
408rect.o: ./rect.c ./puzzles.h
409 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
410rect3.o: ./rect.c ./puzzles.h
411 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
412samegame.o: ./samegame.c ./puzzles.h
413 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
414samegam3.o: ./samegame.c ./puzzles.h
415 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
416signpost.o: ./signpost.c ./puzzles.h
417 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
418signpos5.o: ./signpost.c ./puzzles.h
419 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
420signpos2.o: ./signpost.c ./puzzles.h
421 $(EMCC) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
422singles.o: ./singles.c ./puzzles.h ./latin.h
423 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
424singles5.o: ./singles.c ./puzzles.h ./latin.h
425 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
426singles3.o: ./singles.c ./puzzles.h ./latin.h
427 $(EMCC) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
428sixteen.o: ./sixteen.c ./puzzles.h
429 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
430sixteen3.o: ./sixteen.c ./puzzles.h
431 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
432slant.o: ./slant.c ./puzzles.h
433 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
434slant5.o: ./slant.c ./puzzles.h
435 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
436slant2.o: ./slant.c ./puzzles.h
437 $(EMCC) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
438solo.o: ./solo.c ./puzzles.h
439 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
440solo5.o: ./solo.c ./puzzles.h
441 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
442solo2.o: ./solo.c ./puzzles.h
443 $(EMCC) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
444tdq.o: ./tdq.c ./puzzles.h
445 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
446tents.o: ./tents.c ./puzzles.h ./maxflow.h
447 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
448tents5.o: ./tents.c ./puzzles.h ./maxflow.h
449 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
450tents3.o: ./tents.c ./puzzles.h ./maxflow.h
451 $(EMCC) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
452towers.o: ./towers.c ./puzzles.h ./latin.h
453 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
454towers5.o: ./towers.c ./puzzles.h ./latin.h
455 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
456towers2.o: ./towers.c ./puzzles.h ./latin.h
457 $(EMCC) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
458tracks.o: ./tracks.c ./puzzles.h
459 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
460tracks3.o: ./tracks.c ./puzzles.h
461 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
462tree234.o: ./tree234.c ./tree234.h ./puzzles.h
463 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
464twiddle.o: ./twiddle.c ./puzzles.h
465 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
466twiddle3.o: ./twiddle.c ./puzzles.h
467 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
468undead.o: ./undead.c ./puzzles.h
469 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
470undead3.o: ./undead.c ./puzzles.h
471 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
472unequal.o: ./unequal.c ./puzzles.h ./latin.h
473 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
474unequal5.o: ./unequal.c ./puzzles.h ./latin.h
475 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
476unequal2.o: ./unequal.c ./puzzles.h ./latin.h
477 $(EMCC) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
478unruly.o: ./unruly.c ./puzzles.h
479 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
480unruly5.o: ./unruly.c ./puzzles.h
481 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
482unruly2.o: ./unruly.c ./puzzles.h
483 $(EMCC) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
484untangle.o: ./untangle.c ./puzzles.h ./tree234.h
485 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
486untangl3.o: ./untangle.c ./puzzles.h ./tree234.h
487 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
488version.o: ./version.c ./version.h
489 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
490windows.o: ./windows.c ./puzzles.h ./resource.h
491 $(EMCC) $(CFLAGS) $(XFLAGS) -c $< -o $@
492windows1.o: ./windows.c ./puzzles.h ./resource.h
493 $(EMCC) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
494
495
496clean:
497 rm -rf *.o $(OUTPREFIX)blackbox.js $(OUTPREFIX)bridges.js $(OUTPREFIX)cube.js $(OUTPREFIX)dominosa.js $(OUTPREFIX)fifteen.js $(OUTPREFIX)filling.js $(OUTPREFIX)flip.js $(OUTPREFIX)flood.js $(OUTPREFIX)galaxies.js $(OUTPREFIX)guess.js $(OUTPREFIX)inertia.js $(OUTPREFIX)keen.js $(OUTPREFIX)lightup.js $(OUTPREFIX)loopy.js $(OUTPREFIX)magnets.js $(OUTPREFIX)map.js $(OUTPREFIX)mines.js $(OUTPREFIX)net.js $(OUTPREFIX)netslide.js $(OUTPREFIX)nullgame.js $(OUTPREFIX)palisade.js $(OUTPREFIX)pattern.js $(OUTPREFIX)pearl.js $(OUTPREFIX)pegs.js $(OUTPREFIX)range.js $(OUTPREFIX)rect.js $(OUTPREFIX)samegame.js $(OUTPREFIX)signpost.js $(OUTPREFIX)singles.js $(OUTPREFIX)sixteen.js $(OUTPREFIX)slant.js $(OUTPREFIX)solo.js $(OUTPREFIX)tents.js $(OUTPREFIX)towers.js $(OUTPREFIX)tracks.js $(OUTPREFIX)twiddle.js $(OUTPREFIX)undead.js $(OUTPREFIX)unequal.js $(OUTPREFIX)unruly.js $(OUTPREFIX)untangle.js
diff --git a/apps/plugins/puzzles/src/Makefile.gnustep b/apps/plugins/puzzles/src/Makefile.gnustep
new file mode 100644
index 0000000000..79677f2728
--- /dev/null
+++ b/apps/plugins/puzzles/src/Makefile.gnustep
@@ -0,0 +1,412 @@
1# Makefile for puzzles under GNUstep.
2#
3# This file was created by `mkfiles.pl' from the `Recipe' file.
4# DO NOT EDIT THIS FILE DIRECTLY; edit Recipe or mkfiles.pl instead.
5NEEDS_GUI=yes
6include $(GNUSTEP_MAKEFILES)/common.make
7include $(GNUSTEP_MAKEFILES)/rules.make
8include $(GNUSTEP_MAKEFILES)/Instance/rules.make
9
10all:: Puzzles fifteensolver fillingsolver galaxiespicture galaxiessolver \
11 keensolver latincheck lightupsolver loopysolver \
12 magnetssolver mapsolver mineobfusc obfusc patternpicture \
13 patternsolver pearlbench signpostsolver singlessolver \
14 slantsolver solosolver tentssolver towerssolver \
15 unequalsolver unrulysolver
16
17.SUFFIXES: .o .c .m
18
19
20
21Puzzles.app:
22 mkdir -p $@
23Puzzles.app/Resources: Puzzles.app
24 mkdir -p $@
25Puzzles.app/Resources/Puzzles.icns: Puzzles.app/Resources osx.icns
26 cp osx.icns $@
27Puzzles.app/Info.plist: Puzzles.app osx-info.plist
28 cp osx-info.plist $@
29Puzzles: Puzzles.app Puzzles.app/Puzzles \
30 Puzzles.app/Resources/Puzzles.icns Puzzles.app/Info.plist \
31 $(Puzzles_extra)
32
33Puzzles.app/Puzzles: blackbo3.o bridges3.o combi.o cube3.o divvy.o \
34 dominos3.o drawing.o dsf.o fifteen5.o filling5.o findloop.o \
35 flip3.o flood3.o galaxie7.o grid.o guess3.o inertia3.o \
36 keen5.o latin.o laydomino.o lightup5.o list.o loopgen.o \
37 loopy5.o magnets5.o malloc.o map5.o maxflow.o midend.o \
38 mines5.o misc.o net3.o netslid3.o osx.o palisad3.o \
39 pattern7.o pearl5.o pegs3.o penrose.o random.o range3.o \
40 rect3.o samegam3.o signpos5.o singles5.o sixteen3.o slant5.o \
41 solo5.o tdq.o tents5.o towers5.o tracks3.o tree234.o \
42 twiddle3.o undead3.o unequal5.o unruly5.o untangl3.o \
43 version.o
44 $(CC) $(ALL_LDFLAGS) -o $@ blackbo3.o bridges3.o combi.o cube3.o \
45 divvy.o dominos3.o drawing.o dsf.o fifteen5.o filling5.o \
46 findloop.o flip3.o flood3.o galaxie7.o grid.o guess3.o \
47 inertia3.o keen5.o latin.o laydomino.o lightup5.o list.o \
48 loopgen.o loopy5.o magnets5.o malloc.o map5.o maxflow.o \
49 midend.o mines5.o misc.o net3.o netslid3.o osx.o palisad3.o \
50 pattern7.o pearl5.o pegs3.o penrose.o random.o range3.o \
51 rect3.o samegam3.o signpos5.o singles5.o sixteen3.o slant5.o \
52 solo5.o tdq.o tents5.o towers5.o tracks3.o tree234.o \
53 twiddle3.o undead3.o unequal5.o unruly5.o untangl3.o \
54 version.o $(ALL_LIB_DIRS) $(ALL_LIBS)
55
56fifteensolver: fifteen2.o malloc.o misc.o nullfe.o random.o
57 $(CC) $(ULDFLAGS) -o $@ fifteen2.o malloc.o misc.o nullfe.o random.o
58
59fillingsolver: dsf.o filling2.o malloc.o misc.o nullfe.o random.o
60 $(CC) $(ULDFLAGS) -o $@ dsf.o filling2.o malloc.o misc.o nullfe.o \
61 random.o
62
63galaxiespicture: dsf.o galaxie4.o malloc.o misc.o nullfe.o random.o
64 $(CC) $(ULDFLAGS) -o $@ dsf.o galaxie4.o malloc.o misc.o nullfe.o \
65 random.o -lm
66
67galaxiessolver: dsf.o galaxie2.o malloc.o misc.o nullfe.o random.o
68 $(CC) $(ULDFLAGS) -o $@ dsf.o galaxie2.o malloc.o misc.o nullfe.o \
69 random.o -lm
70
71keensolver: dsf.o keen2.o latin6.o malloc.o maxflow.o misc.o nullfe.o \
72 random.o tree234.o
73 $(CC) $(ULDFLAGS) -o $@ dsf.o keen2.o latin6.o malloc.o maxflow.o \
74 misc.o nullfe.o random.o tree234.o
75
76latincheck: latin8.o malloc.o maxflow.o misc.o nullfe.o random.o tree234.o
77 $(CC) $(ULDFLAGS) -o $@ latin8.o malloc.o maxflow.o misc.o nullfe.o \
78 random.o tree234.o
79
80lightupsolver: combi.o lightup2.o malloc.o misc.o nullfe.o random.o
81 $(CC) $(ULDFLAGS) -o $@ combi.o lightup2.o malloc.o misc.o nullfe.o \
82 random.o
83
84loopysolver: dsf.o grid.o loopgen.o loopy2.o malloc.o misc.o nullfe.o \
85 penrose.o random.o tree234.o
86 $(CC) $(ULDFLAGS) -o $@ dsf.o grid.o loopgen.o loopy2.o malloc.o \
87 misc.o nullfe.o penrose.o random.o tree234.o -lm
88
89magnetssolver: laydomino.o magnets2.o malloc.o misc.o nullfe.o random.o
90 $(CC) $(ULDFLAGS) -o $@ laydomino.o magnets2.o malloc.o misc.o \
91 nullfe.o random.o -lm
92
93mapsolver: dsf.o malloc.o map2.o misc.o nullfe.o random.o
94 $(CC) $(ULDFLAGS) -o $@ dsf.o malloc.o map2.o misc.o nullfe.o \
95 random.o -lm
96
97mineobfusc: malloc.o mines2.o misc.o nullfe.o random.o tree234.o
98 $(CC) $(ULDFLAGS) -o $@ malloc.o mines2.o misc.o nullfe.o random.o \
99 tree234.o
100
101obfusc: malloc.o misc.o nullfe.o obfusc.o random.o
102 $(CC) $(ULDFLAGS) -o $@ malloc.o misc.o nullfe.o obfusc.o random.o
103
104patternpicture: malloc.o misc.o nullfe.o pattern4.o random.o
105 $(CC) $(ULDFLAGS) -o $@ malloc.o misc.o nullfe.o pattern4.o random.o
106
107patternsolver: malloc.o misc.o nullfe.o pattern2.o random.o
108 $(CC) $(ULDFLAGS) -o $@ malloc.o misc.o nullfe.o pattern2.o random.o
109
110pearlbench: dsf.o grid.o loopgen.o malloc.o misc.o nullfe.o pearl2.o \
111 penrose.o random.o tdq.o tree234.o
112 $(CC) $(ULDFLAGS) -o $@ dsf.o grid.o loopgen.o malloc.o misc.o \
113 nullfe.o pearl2.o penrose.o random.o tdq.o tree234.o -lm
114
115signpostsolver: dsf.o malloc.o misc.o nullfe.o random.o signpos2.o
116 $(CC) $(ULDFLAGS) -o $@ dsf.o malloc.o misc.o nullfe.o random.o \
117 signpos2.o -lm
118
119singlessolver: dsf.o latin.o malloc.o maxflow.o misc.o nullfe.o random.o \
120 singles3.o tree234.o
121 $(CC) $(ULDFLAGS) -o $@ dsf.o latin.o malloc.o maxflow.o misc.o \
122 nullfe.o random.o singles3.o tree234.o
123
124slantsolver: dsf.o findloop.o malloc.o misc.o nullfe.o random.o slant2.o
125 $(CC) $(ULDFLAGS) -o $@ dsf.o findloop.o malloc.o misc.o nullfe.o \
126 random.o slant2.o
127
128solosolver: divvy.o dsf.o malloc.o misc.o nullfe.o random.o solo2.o
129 $(CC) $(ULDFLAGS) -o $@ divvy.o dsf.o malloc.o misc.o nullfe.o \
130 random.o solo2.o
131
132tentssolver: dsf.o malloc.o maxflow.o misc.o nullfe.o random.o tents3.o
133 $(CC) $(ULDFLAGS) -o $@ dsf.o malloc.o maxflow.o misc.o nullfe.o \
134 random.o tents3.o
135
136towerssolver: latin6.o malloc.o maxflow.o misc.o nullfe.o random.o towers2.o \
137 tree234.o
138 $(CC) $(ULDFLAGS) -o $@ latin6.o malloc.o maxflow.o misc.o nullfe.o \
139 random.o towers2.o tree234.o
140
141unequalsolver: latin6.o malloc.o maxflow.o misc.o nullfe.o random.o \
142 tree234.o unequal2.o
143 $(CC) $(ULDFLAGS) -o $@ latin6.o malloc.o maxflow.o misc.o nullfe.o \
144 random.o tree234.o unequal2.o
145
146unrulysolver: malloc.o misc.o nullfe.o random.o unruly2.o
147 $(CC) $(ULDFLAGS) -o $@ malloc.o misc.o nullfe.o random.o unruly2.o
148
149blackbox.o: ./blackbox.c ./puzzles.h
150 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
151blackbo3.o: ./blackbox.c ./puzzles.h
152 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
153bridges.o: ./bridges.c ./puzzles.h
154 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
155bridges3.o: ./bridges.c ./puzzles.h
156 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
157combi.o: ./combi.c ./puzzles.h
158 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
159cube.o: ./cube.c ./puzzles.h
160 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
161cube3.o: ./cube.c ./puzzles.h
162 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
163divvy.o: ./divvy.c ./puzzles.h
164 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
165dominosa.o: ./dominosa.c ./puzzles.h
166 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
167dominos3.o: ./dominosa.c ./puzzles.h
168 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
169drawing.o: ./drawing.c ./puzzles.h
170 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
171dsf.o: ./dsf.c ./puzzles.h
172 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
173fifteen.o: ./fifteen.c ./puzzles.h
174 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
175fifteen5.o: ./fifteen.c ./puzzles.h
176 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
177fifteen2.o: ./fifteen.c ./puzzles.h
178 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
179filling.o: ./filling.c ./puzzles.h
180 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
181filling5.o: ./filling.c ./puzzles.h
182 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
183filling2.o: ./filling.c ./puzzles.h
184 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
185findloop.o: ./findloop.c ./puzzles.h
186 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
187flip.o: ./flip.c ./puzzles.h ./tree234.h
188 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
189flip3.o: ./flip.c ./puzzles.h ./tree234.h
190 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
191flood.o: ./flood.c ./puzzles.h
192 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
193flood3.o: ./flood.c ./puzzles.h
194 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
195galaxies.o: ./galaxies.c ./puzzles.h
196 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
197galaxie7.o: ./galaxies.c ./puzzles.h
198 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
199galaxie4.o: ./galaxies.c ./puzzles.h
200 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_PICTURE_GENERATOR -c $< -o $@
201galaxie2.o: ./galaxies.c ./puzzles.h
202 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
203grid.o: ./grid.c ./puzzles.h ./tree234.h ./grid.h ./penrose.h
204 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
205gtk.o: ./gtk.c ./puzzles.h
206 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
207guess.o: ./guess.c ./puzzles.h
208 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
209guess3.o: ./guess.c ./puzzles.h
210 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
211inertia.o: ./inertia.c ./puzzles.h
212 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
213inertia3.o: ./inertia.c ./puzzles.h
214 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
215keen.o: ./keen.c ./puzzles.h ./latin.h
216 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
217keen5.o: ./keen.c ./puzzles.h ./latin.h
218 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
219keen2.o: ./keen.c ./puzzles.h ./latin.h
220 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
221latin.o: ./latin.c ./puzzles.h ./tree234.h ./maxflow.h ./latin.h
222 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
223latin8.o: ./latin.c ./puzzles.h ./tree234.h ./maxflow.h ./latin.h
224 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_LATIN_TEST -c $< -o $@
225latin6.o: ./latin.c ./puzzles.h ./tree234.h ./maxflow.h ./latin.h
226 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
227laydomino.o: ./laydomino.c ./puzzles.h
228 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
229lightup.o: ./lightup.c ./puzzles.h
230 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
231lightup5.o: ./lightup.c ./puzzles.h
232 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
233lightup2.o: ./lightup.c ./puzzles.h
234 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
235list.o: ./list.c ./puzzles.h
236 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
237loopgen.o: ./loopgen.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
238 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
239loopy.o: ./loopy.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
240 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
241loopy5.o: ./loopy.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
242 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
243loopy2.o: ./loopy.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
244 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
245magnets.o: ./magnets.c ./puzzles.h
246 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
247magnets5.o: ./magnets.c ./puzzles.h
248 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
249magnets2.o: ./magnets.c ./puzzles.h
250 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
251malloc.o: ./malloc.c ./puzzles.h
252 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
253map.o: ./map.c ./puzzles.h
254 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
255map5.o: ./map.c ./puzzles.h
256 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
257map2.o: ./map.c ./puzzles.h
258 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
259maxflow.o: ./maxflow.c ./maxflow.h ./puzzles.h
260 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
261midend.o: ./midend.c ./puzzles.h
262 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
263mines.o: ./mines.c ./tree234.h ./puzzles.h
264 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
265mines5.o: ./mines.c ./tree234.h ./puzzles.h
266 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
267mines2.o: ./mines.c ./tree234.h ./puzzles.h
268 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_OBFUSCATOR -c $< -o $@
269misc.o: ./misc.c ./puzzles.h
270 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
271net.o: ./net.c ./puzzles.h ./tree234.h
272 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
273net3.o: ./net.c ./puzzles.h ./tree234.h
274 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
275netslide.o: ./netslide.c ./puzzles.h ./tree234.h
276 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
277netslid3.o: ./netslide.c ./puzzles.h ./tree234.h
278 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
279no-icon.o: ./no-icon.c
280 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
281nullfe.o: ./nullfe.c ./puzzles.h
282 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
283nullgame.o: ./nullgame.c ./puzzles.h
284 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
285obfusc.o: ./obfusc.c ./puzzles.h
286 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
287osx.o: ./osx.m ./puzzles.h
288 $(CC) -DGNUSTEP $(ALL_OBJCFLAGS) $(COMPAT) $(FWHACK) $(OBJCFLAGS) $(XFLAGS) -c $< -o $@
289palisade.o: ./palisade.c ./puzzles.h
290 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
291palisad3.o: ./palisade.c ./puzzles.h
292 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
293pattern.o: ./pattern.c ./puzzles.h
294 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
295pattern7.o: ./pattern.c ./puzzles.h
296 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
297pattern4.o: ./pattern.c ./puzzles.h
298 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_PICTURE_GENERATOR -c $< -o $@
299pattern2.o: ./pattern.c ./puzzles.h
300 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
301pearl.o: ./pearl.c ./puzzles.h ./grid.h ./loopgen.h
302 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
303pearl5.o: ./pearl.c ./puzzles.h ./grid.h ./loopgen.h
304 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
305pearl2.o: ./pearl.c ./puzzles.h ./grid.h ./loopgen.h
306 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
307pegs.o: ./pegs.c ./puzzles.h ./tree234.h
308 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
309pegs3.o: ./pegs.c ./puzzles.h ./tree234.h
310 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
311penrose.o: ./penrose.c ./puzzles.h ./penrose.h
312 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
313printing.o: ./printing.c ./puzzles.h
314 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
315ps.o: ./ps.c ./puzzles.h
316 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
317random.o: ./random.c ./puzzles.h
318 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
319range.o: ./range.c ./puzzles.h
320 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
321range3.o: ./range.c ./puzzles.h
322 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
323rect.o: ./rect.c ./puzzles.h
324 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
325rect3.o: ./rect.c ./puzzles.h
326 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
327samegame.o: ./samegame.c ./puzzles.h
328 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
329samegam3.o: ./samegame.c ./puzzles.h
330 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
331signpost.o: ./signpost.c ./puzzles.h
332 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
333signpos5.o: ./signpost.c ./puzzles.h
334 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
335signpos2.o: ./signpost.c ./puzzles.h
336 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
337singles.o: ./singles.c ./puzzles.h ./latin.h
338 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
339singles5.o: ./singles.c ./puzzles.h ./latin.h
340 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
341singles3.o: ./singles.c ./puzzles.h ./latin.h
342 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
343sixteen.o: ./sixteen.c ./puzzles.h
344 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
345sixteen3.o: ./sixteen.c ./puzzles.h
346 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
347slant.o: ./slant.c ./puzzles.h
348 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
349slant5.o: ./slant.c ./puzzles.h
350 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
351slant2.o: ./slant.c ./puzzles.h
352 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
353solo.o: ./solo.c ./puzzles.h
354 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
355solo5.o: ./solo.c ./puzzles.h
356 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
357solo2.o: ./solo.c ./puzzles.h
358 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
359tdq.o: ./tdq.c ./puzzles.h
360 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
361tents.o: ./tents.c ./puzzles.h ./maxflow.h
362 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
363tents5.o: ./tents.c ./puzzles.h ./maxflow.h
364 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
365tents3.o: ./tents.c ./puzzles.h ./maxflow.h
366 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
367towers.o: ./towers.c ./puzzles.h ./latin.h
368 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
369towers5.o: ./towers.c ./puzzles.h ./latin.h
370 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
371towers2.o: ./towers.c ./puzzles.h ./latin.h
372 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
373tracks.o: ./tracks.c ./puzzles.h
374 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
375tracks3.o: ./tracks.c ./puzzles.h
376 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
377tree234.o: ./tree234.c ./tree234.h ./puzzles.h
378 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
379twiddle.o: ./twiddle.c ./puzzles.h
380 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
381twiddle3.o: ./twiddle.c ./puzzles.h
382 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
383undead.o: ./undead.c ./puzzles.h
384 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
385undead3.o: ./undead.c ./puzzles.h
386 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
387unequal.o: ./unequal.c ./puzzles.h ./latin.h
388 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
389unequal5.o: ./unequal.c ./puzzles.h ./latin.h
390 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
391unequal2.o: ./unequal.c ./puzzles.h ./latin.h
392 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
393unruly.o: ./unruly.c ./puzzles.h
394 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
395unruly5.o: ./unruly.c ./puzzles.h
396 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
397unruly2.o: ./unruly.c ./puzzles.h
398 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
399untangle.o: ./untangle.c ./puzzles.h ./tree234.h
400 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
401untangl3.o: ./untangle.c ./puzzles.h ./tree234.h
402 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
403version.o: ./version.c ./version.h
404 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
405windows.o: ./windows.c ./puzzles.h ./resource.h
406 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
407windows1.o: ./windows.c ./puzzles.h ./resource.h
408 $(CC) $(ALL_CFLAGS) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
409
410clean::
411 rm -f *.o fifteensolver fillingsolver galaxiespicture galaxiessolver keensolver latincheck lightupsolver loopysolver magnetssolver mapsolver mineobfusc obfusc patternpicture patternsolver pearlbench signpostsolver singlessolver slantsolver solosolver tentssolver towerssolver unequalsolver unrulysolver
412 rm -rf *.app
diff --git a/apps/plugins/puzzles/src/Makefile.gtk b/apps/plugins/puzzles/src/Makefile.gtk
new file mode 100644
index 0000000000..e5c1d40b90
--- /dev/null
+++ b/apps/plugins/puzzles/src/Makefile.gtk
@@ -0,0 +1,727 @@
1# Makefile for puzzles under X/GTK and Unix.
2#
3# This file was created by `mkfiles.pl' from the `Recipe' file.
4# DO NOT EDIT THIS FILE DIRECTLY; edit Recipe or mkfiles.pl instead.
5
6# You can define this path to point at your tools if you need to
7# TOOLPATH = /opt/gcc/bin
8CC := $(TOOLPATH)$(CC)
9# You can manually set this to `gtk-config' or `pkg-config gtk+-1.2'
10# (depending on what works on your system) if you want to enforce
11# building with GTK 1.2, or you can set it to `pkg-config gtk+-2.0'
12# if you want to enforce 2.0. The default is to try 2.0 and fall back
13# to 1.2 if it isn't found.
14GTK_CONFIG = sh -c 'pkg-config gtk+-2.0 $$0 2>/dev/null || gtk-config $$0'
15
16CFLAGS := -O2 -Wall -Werror -ansi -pedantic -g -I./ -Iicons/ `$(GTK_CONFIG) \
17 --cflags` $(CFLAGS)
18XLIBS = `$(GTK_CONFIG) --libs` -lm
19ULIBS = -lm#
20INSTALL=install
21INSTALL_PROGRAM=$(INSTALL)
22INSTALL_DATA=$(INSTALL)
23prefix=/usr/local
24exec_prefix=$(prefix)
25bindir=$(exec_prefix)/bin
26gamesdir=$(exec_prefix)/games
27mandir=$(prefix)/man
28man1dir=$(mandir)/man1
29
30all: $(BINPREFIX)blackbox $(BINPREFIX)bridges $(BINPREFIX)cube \
31 $(BINPREFIX)dominosa $(BINPREFIX)fifteen \
32 $(BINPREFIX)fifteensolver $(BINPREFIX)filling \
33 $(BINPREFIX)fillingsolver $(BINPREFIX)flip $(BINPREFIX)flood \
34 $(BINPREFIX)galaxies $(BINPREFIX)galaxiespicture \
35 $(BINPREFIX)galaxiessolver $(BINPREFIX)guess \
36 $(BINPREFIX)inertia $(BINPREFIX)keen $(BINPREFIX)keensolver \
37 $(BINPREFIX)latincheck $(BINPREFIX)lightup \
38 $(BINPREFIX)lightupsolver $(BINPREFIX)loopy \
39 $(BINPREFIX)loopysolver $(BINPREFIX)magnets \
40 $(BINPREFIX)magnetssolver $(BINPREFIX)map \
41 $(BINPREFIX)mapsolver $(BINPREFIX)mineobfusc \
42 $(BINPREFIX)mines $(BINPREFIX)net $(BINPREFIX)netslide \
43 $(BINPREFIX)nullgame $(BINPREFIX)obfusc $(BINPREFIX)palisade \
44 $(BINPREFIX)pattern $(BINPREFIX)patternpicture \
45 $(BINPREFIX)patternsolver $(BINPREFIX)pearl \
46 $(BINPREFIX)pearlbench $(BINPREFIX)pegs $(BINPREFIX)range \
47 $(BINPREFIX)rect $(BINPREFIX)samegame $(BINPREFIX)signpost \
48 $(BINPREFIX)signpostsolver $(BINPREFIX)singles \
49 $(BINPREFIX)singlessolver $(BINPREFIX)sixteen \
50 $(BINPREFIX)slant $(BINPREFIX)slantsolver $(BINPREFIX)solo \
51 $(BINPREFIX)solosolver $(BINPREFIX)tents \
52 $(BINPREFIX)tentssolver $(BINPREFIX)towers \
53 $(BINPREFIX)towerssolver $(BINPREFIX)tracks \
54 $(BINPREFIX)twiddle $(BINPREFIX)undead $(BINPREFIX)unequal \
55 $(BINPREFIX)unequalsolver $(BINPREFIX)unruly \
56 $(BINPREFIX)unrulysolver $(BINPREFIX)untangle
57
58$(BINPREFIX)blackbox: blackbox.o drawing.o gtk.o malloc.o midend.o misc.o \
59 no-icon.o printing.o ps.o random.o version.o
60 $(CC) -o $@ blackbox.o drawing.o gtk.o malloc.o midend.o misc.o \
61 no-icon.o printing.o ps.o random.o version.o $(XLFLAGS) \
62 $(XLIBS)
63
64$(BINPREFIX)bridges: bridges.o drawing.o dsf.o findloop.o gtk.o malloc.o \
65 midend.o misc.o no-icon.o printing.o ps.o random.o version.o
66 $(CC) -o $@ bridges.o drawing.o dsf.o findloop.o gtk.o malloc.o \
67 midend.o misc.o no-icon.o printing.o ps.o random.o version.o \
68 $(XLFLAGS) $(XLIBS)
69
70$(BINPREFIX)cube: cube.o drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
71 printing.o ps.o random.o version.o
72 $(CC) -o $@ cube.o drawing.o gtk.o malloc.o midend.o misc.o \
73 no-icon.o printing.o ps.o random.o version.o $(XLFLAGS) \
74 $(XLIBS)
75
76$(BINPREFIX)dominosa: dominosa.o drawing.o gtk.o laydomino.o malloc.o \
77 midend.o misc.o no-icon.o printing.o ps.o random.o version.o
78 $(CC) -o $@ dominosa.o drawing.o gtk.o laydomino.o malloc.o midend.o \
79 misc.o no-icon.o printing.o ps.o random.o version.o \
80 $(XLFLAGS) $(XLIBS)
81
82$(BINPREFIX)fifteen: drawing.o fifteen.o gtk.o malloc.o midend.o misc.o \
83 no-icon.o printing.o ps.o random.o version.o
84 $(CC) -o $@ drawing.o fifteen.o gtk.o malloc.o midend.o misc.o \
85 no-icon.o printing.o ps.o random.o version.o $(XLFLAGS) \
86 $(XLIBS)
87
88$(BINPREFIX)fifteensolver: fifteen2.o malloc.o misc.o nullfe.o random.o
89 $(CC) -o $@ fifteen2.o malloc.o misc.o nullfe.o random.o $(XLFLAGS) \
90 $(ULIBS)
91
92$(BINPREFIX)filling: drawing.o dsf.o filling.o gtk.o malloc.o midend.o \
93 misc.o no-icon.o printing.o ps.o random.o version.o
94 $(CC) -o $@ drawing.o dsf.o filling.o gtk.o malloc.o midend.o misc.o \
95 no-icon.o printing.o ps.o random.o version.o $(XLFLAGS) \
96 $(XLIBS)
97
98$(BINPREFIX)fillingsolver: dsf.o filling2.o malloc.o misc.o nullfe.o \
99 random.o
100 $(CC) -o $@ dsf.o filling2.o malloc.o misc.o nullfe.o random.o \
101 $(XLFLAGS) $(ULIBS)
102
103$(BINPREFIX)flip: drawing.o flip.o gtk.o malloc.o midend.o misc.o no-icon.o \
104 printing.o ps.o random.o tree234.o version.o
105 $(CC) -o $@ drawing.o flip.o gtk.o malloc.o midend.o misc.o \
106 no-icon.o printing.o ps.o random.o tree234.o version.o \
107 $(XLFLAGS) $(XLIBS)
108
109$(BINPREFIX)flood: drawing.o flood.o gtk.o malloc.o midend.o misc.o \
110 no-icon.o printing.o ps.o random.o version.o
111 $(CC) -o $@ drawing.o flood.o gtk.o malloc.o midend.o misc.o \
112 no-icon.o printing.o ps.o random.o version.o $(XLFLAGS) \
113 $(XLIBS)
114
115$(BINPREFIX)galaxies: drawing.o dsf.o galaxies.o gtk.o malloc.o midend.o \
116 misc.o no-icon.o printing.o ps.o random.o version.o
117 $(CC) -o $@ drawing.o dsf.o galaxies.o gtk.o malloc.o midend.o \
118 misc.o no-icon.o printing.o ps.o random.o version.o \
119 $(XLFLAGS) $(XLIBS)
120
121$(BINPREFIX)galaxiespicture: dsf.o galaxie4.o malloc.o misc.o nullfe.o \
122 random.o
123 $(CC) -o $@ dsf.o galaxie4.o malloc.o misc.o nullfe.o random.o -lm \
124 $(XLFLAGS) $(ULIBS)
125
126$(BINPREFIX)galaxiessolver: dsf.o galaxie2.o malloc.o misc.o nullfe.o \
127 random.o
128 $(CC) -o $@ dsf.o galaxie2.o malloc.o misc.o nullfe.o random.o -lm \
129 $(XLFLAGS) $(ULIBS)
130
131$(BINPREFIX)guess: drawing.o gtk.o guess.o malloc.o midend.o misc.o \
132 no-icon.o printing.o ps.o random.o version.o
133 $(CC) -o $@ drawing.o gtk.o guess.o malloc.o midend.o misc.o \
134 no-icon.o printing.o ps.o random.o version.o $(XLFLAGS) \
135 $(XLIBS)
136
137$(BINPREFIX)inertia: drawing.o gtk.o inertia.o malloc.o midend.o misc.o \
138 no-icon.o printing.o ps.o random.o version.o
139 $(CC) -o $@ drawing.o gtk.o inertia.o malloc.o midend.o misc.o \
140 no-icon.o printing.o ps.o random.o version.o $(XLFLAGS) \
141 $(XLIBS)
142
143$(BINPREFIX)keen: drawing.o dsf.o gtk.o keen.o latin.o malloc.o maxflow.o \
144 midend.o misc.o no-icon.o printing.o ps.o random.o tree234.o \
145 version.o
146 $(CC) -o $@ drawing.o dsf.o gtk.o keen.o latin.o malloc.o maxflow.o \
147 midend.o misc.o no-icon.o printing.o ps.o random.o tree234.o \
148 version.o $(XLFLAGS) $(XLIBS)
149
150$(BINPREFIX)keensolver: dsf.o keen2.o latin6.o malloc.o maxflow.o misc.o \
151 nullfe.o random.o tree234.o
152 $(CC) -o $@ dsf.o keen2.o latin6.o malloc.o maxflow.o misc.o \
153 nullfe.o random.o tree234.o $(XLFLAGS) $(ULIBS)
154
155$(BINPREFIX)latincheck: latin8.o malloc.o maxflow.o misc.o nullfe.o random.o \
156 tree234.o
157 $(CC) -o $@ latin8.o malloc.o maxflow.o misc.o nullfe.o random.o \
158 tree234.o $(XLFLAGS) $(ULIBS)
159
160$(BINPREFIX)lightup: combi.o drawing.o gtk.o lightup.o malloc.o midend.o \
161 misc.o no-icon.o printing.o ps.o random.o version.o
162 $(CC) -o $@ combi.o drawing.o gtk.o lightup.o malloc.o midend.o \
163 misc.o no-icon.o printing.o ps.o random.o version.o \
164 $(XLFLAGS) $(XLIBS)
165
166$(BINPREFIX)lightupsolver: combi.o lightup2.o malloc.o misc.o nullfe.o \
167 random.o
168 $(CC) -o $@ combi.o lightup2.o malloc.o misc.o nullfe.o random.o \
169 $(XLFLAGS) $(ULIBS)
170
171$(BINPREFIX)loopy: drawing.o dsf.o grid.o gtk.o loopgen.o loopy.o malloc.o \
172 midend.o misc.o no-icon.o penrose.o printing.o ps.o random.o \
173 tree234.o version.o
174 $(CC) -o $@ drawing.o dsf.o grid.o gtk.o loopgen.o loopy.o malloc.o \
175 midend.o misc.o no-icon.o penrose.o printing.o ps.o random.o \
176 tree234.o version.o $(XLFLAGS) $(XLIBS)
177
178$(BINPREFIX)loopysolver: dsf.o grid.o loopgen.o loopy2.o malloc.o misc.o \
179 nullfe.o penrose.o random.o tree234.o
180 $(CC) -o $@ dsf.o grid.o loopgen.o loopy2.o malloc.o misc.o nullfe.o \
181 penrose.o random.o tree234.o -lm $(XLFLAGS) $(ULIBS)
182
183$(BINPREFIX)magnets: drawing.o gtk.o laydomino.o magnets.o malloc.o midend.o \
184 misc.o no-icon.o printing.o ps.o random.o version.o
185 $(CC) -o $@ drawing.o gtk.o laydomino.o magnets.o malloc.o midend.o \
186 misc.o no-icon.o printing.o ps.o random.o version.o \
187 $(XLFLAGS) $(XLIBS)
188
189$(BINPREFIX)magnetssolver: laydomino.o magnets2.o malloc.o misc.o nullfe.o \
190 random.o
191 $(CC) -o $@ laydomino.o magnets2.o malloc.o misc.o nullfe.o random.o \
192 -lm $(XLFLAGS) $(ULIBS)
193
194$(BINPREFIX)map: drawing.o dsf.o gtk.o malloc.o map.o midend.o misc.o \
195 no-icon.o printing.o ps.o random.o version.o
196 $(CC) -o $@ drawing.o dsf.o gtk.o malloc.o map.o midend.o misc.o \
197 no-icon.o printing.o ps.o random.o version.o $(XLFLAGS) \
198 $(XLIBS)
199
200$(BINPREFIX)mapsolver: dsf.o malloc.o map2.o misc.o nullfe.o random.o
201 $(CC) -o $@ dsf.o malloc.o map2.o misc.o nullfe.o random.o -lm \
202 $(XLFLAGS) $(ULIBS)
203
204$(BINPREFIX)mineobfusc: malloc.o mines2.o misc.o nullfe.o random.o tree234.o
205 $(CC) -o $@ malloc.o mines2.o misc.o nullfe.o random.o tree234.o \
206 $(XLFLAGS) $(ULIBS)
207
208$(BINPREFIX)mines: drawing.o gtk.o malloc.o midend.o mines.o misc.o \
209 no-icon.o printing.o ps.o random.o tree234.o version.o
210 $(CC) -o $@ drawing.o gtk.o malloc.o midend.o mines.o misc.o \
211 no-icon.o printing.o ps.o random.o tree234.o version.o \
212 $(XLFLAGS) $(XLIBS)
213
214$(BINPREFIX)net: drawing.o dsf.o findloop.o gtk.o malloc.o midend.o misc.o \
215 net.o no-icon.o printing.o ps.o random.o tree234.o version.o
216 $(CC) -o $@ drawing.o dsf.o findloop.o gtk.o malloc.o midend.o \
217 misc.o net.o no-icon.o printing.o ps.o random.o tree234.o \
218 version.o $(XLFLAGS) $(XLIBS)
219
220$(BINPREFIX)netslide: drawing.o gtk.o malloc.o midend.o misc.o netslide.o \
221 no-icon.o printing.o ps.o random.o tree234.o version.o
222 $(CC) -o $@ drawing.o gtk.o malloc.o midend.o misc.o netslide.o \
223 no-icon.o printing.o ps.o random.o tree234.o version.o \
224 $(XLFLAGS) $(XLIBS)
225
226$(BINPREFIX)nullgame: drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
227 nullgame.o printing.o ps.o random.o version.o
228 $(CC) -o $@ drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
229 nullgame.o printing.o ps.o random.o version.o $(XLFLAGS) \
230 $(XLIBS)
231
232$(BINPREFIX)obfusc: malloc.o misc.o nullfe.o obfusc.o random.o
233 $(CC) -o $@ malloc.o misc.o nullfe.o obfusc.o random.o $(XLFLAGS) \
234 $(ULIBS)
235
236$(BINPREFIX)palisade: divvy.o drawing.o dsf.o gtk.o malloc.o midend.o misc.o \
237 no-icon.o palisade.o printing.o ps.o random.o version.o
238 $(CC) -o $@ divvy.o drawing.o dsf.o gtk.o malloc.o midend.o misc.o \
239 no-icon.o palisade.o printing.o ps.o random.o version.o \
240 $(XLFLAGS) $(XLIBS)
241
242$(BINPREFIX)pattern: drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
243 pattern.o printing.o ps.o random.o version.o
244 $(CC) -o $@ drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
245 pattern.o printing.o ps.o random.o version.o $(XLFLAGS) \
246 $(XLIBS)
247
248$(BINPREFIX)patternpicture: malloc.o misc.o nullfe.o pattern4.o random.o
249 $(CC) -o $@ malloc.o misc.o nullfe.o pattern4.o random.o $(XLFLAGS) \
250 $(ULIBS)
251
252$(BINPREFIX)patternsolver: malloc.o misc.o nullfe.o pattern2.o random.o
253 $(CC) -o $@ malloc.o misc.o nullfe.o pattern2.o random.o $(XLFLAGS) \
254 $(ULIBS)
255
256$(BINPREFIX)pearl: drawing.o dsf.o grid.o gtk.o loopgen.o malloc.o midend.o \
257 misc.o no-icon.o pearl.o penrose.o printing.o ps.o random.o \
258 tdq.o tree234.o version.o
259 $(CC) -o $@ drawing.o dsf.o grid.o gtk.o loopgen.o malloc.o midend.o \
260 misc.o no-icon.o pearl.o penrose.o printing.o ps.o random.o \
261 tdq.o tree234.o version.o $(XLFLAGS) $(XLIBS)
262
263$(BINPREFIX)pearlbench: dsf.o grid.o loopgen.o malloc.o misc.o nullfe.o \
264 pearl2.o penrose.o random.o tdq.o tree234.o
265 $(CC) -o $@ dsf.o grid.o loopgen.o malloc.o misc.o nullfe.o pearl2.o \
266 penrose.o random.o tdq.o tree234.o -lm $(XLFLAGS) $(ULIBS)
267
268$(BINPREFIX)pegs: drawing.o gtk.o malloc.o midend.o misc.o no-icon.o pegs.o \
269 printing.o ps.o random.o tree234.o version.o
270 $(CC) -o $@ drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
271 pegs.o printing.o ps.o random.o tree234.o version.o \
272 $(XLFLAGS) $(XLIBS)
273
274$(BINPREFIX)range: drawing.o dsf.o gtk.o malloc.o midend.o misc.o no-icon.o \
275 printing.o ps.o random.o range.o version.o
276 $(CC) -o $@ drawing.o dsf.o gtk.o malloc.o midend.o misc.o no-icon.o \
277 printing.o ps.o random.o range.o version.o $(XLFLAGS) \
278 $(XLIBS)
279
280$(BINPREFIX)rect: drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
281 printing.o ps.o random.o rect.o version.o
282 $(CC) -o $@ drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
283 printing.o ps.o random.o rect.o version.o $(XLFLAGS) \
284 $(XLIBS)
285
286$(BINPREFIX)samegame: drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
287 printing.o ps.o random.o samegame.o version.o
288 $(CC) -o $@ drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
289 printing.o ps.o random.o samegame.o version.o $(XLFLAGS) \
290 $(XLIBS)
291
292$(BINPREFIX)signpost: drawing.o dsf.o gtk.o malloc.o midend.o misc.o \
293 no-icon.o printing.o ps.o random.o signpost.o version.o
294 $(CC) -o $@ drawing.o dsf.o gtk.o malloc.o midend.o misc.o no-icon.o \
295 printing.o ps.o random.o signpost.o version.o $(XLFLAGS) \
296 $(XLIBS)
297
298$(BINPREFIX)signpostsolver: dsf.o malloc.o misc.o nullfe.o random.o \
299 signpos2.o
300 $(CC) -o $@ dsf.o malloc.o misc.o nullfe.o random.o signpos2.o -lm \
301 $(XLFLAGS) $(ULIBS)
302
303$(BINPREFIX)singles: drawing.o dsf.o gtk.o latin.o malloc.o maxflow.o \
304 midend.o misc.o no-icon.o printing.o ps.o random.o singles.o \
305 tree234.o version.o
306 $(CC) -o $@ drawing.o dsf.o gtk.o latin.o malloc.o maxflow.o \
307 midend.o misc.o no-icon.o printing.o ps.o random.o singles.o \
308 tree234.o version.o $(XLFLAGS) $(XLIBS)
309
310$(BINPREFIX)singlessolver: dsf.o latin.o malloc.o maxflow.o misc.o nullfe.o \
311 random.o singles3.o tree234.o
312 $(CC) -o $@ dsf.o latin.o malloc.o maxflow.o misc.o nullfe.o \
313 random.o singles3.o tree234.o $(XLFLAGS) $(ULIBS)
314
315$(BINPREFIX)sixteen: drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
316 printing.o ps.o random.o sixteen.o version.o
317 $(CC) -o $@ drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
318 printing.o ps.o random.o sixteen.o version.o $(XLFLAGS) \
319 $(XLIBS)
320
321$(BINPREFIX)slant: drawing.o dsf.o findloop.o gtk.o malloc.o midend.o misc.o \
322 no-icon.o printing.o ps.o random.o slant.o version.o
323 $(CC) -o $@ drawing.o dsf.o findloop.o gtk.o malloc.o midend.o \
324 misc.o no-icon.o printing.o ps.o random.o slant.o version.o \
325 $(XLFLAGS) $(XLIBS)
326
327$(BINPREFIX)slantsolver: dsf.o findloop.o malloc.o misc.o nullfe.o random.o \
328 slant2.o
329 $(CC) -o $@ dsf.o findloop.o malloc.o misc.o nullfe.o random.o \
330 slant2.o $(XLFLAGS) $(ULIBS)
331
332$(BINPREFIX)solo: divvy.o drawing.o dsf.o gtk.o malloc.o midend.o misc.o \
333 no-icon.o printing.o ps.o random.o solo.o version.o
334 $(CC) -o $@ divvy.o drawing.o dsf.o gtk.o malloc.o midend.o misc.o \
335 no-icon.o printing.o ps.o random.o solo.o version.o \
336 $(XLFLAGS) $(XLIBS)
337
338$(BINPREFIX)solosolver: divvy.o dsf.o malloc.o misc.o nullfe.o random.o \
339 solo2.o
340 $(CC) -o $@ divvy.o dsf.o malloc.o misc.o nullfe.o random.o solo2.o \
341 $(XLFLAGS) $(ULIBS)
342
343$(BINPREFIX)tents: drawing.o dsf.o gtk.o malloc.o maxflow.o midend.o misc.o \
344 no-icon.o printing.o ps.o random.o tents.o version.o
345 $(CC) -o $@ drawing.o dsf.o gtk.o malloc.o maxflow.o midend.o misc.o \
346 no-icon.o printing.o ps.o random.o tents.o version.o \
347 $(XLFLAGS) $(XLIBS)
348
349$(BINPREFIX)tentssolver: dsf.o malloc.o maxflow.o misc.o nullfe.o random.o \
350 tents3.o
351 $(CC) -o $@ dsf.o malloc.o maxflow.o misc.o nullfe.o random.o \
352 tents3.o $(XLFLAGS) $(ULIBS)
353
354$(BINPREFIX)towers: drawing.o gtk.o latin.o malloc.o maxflow.o midend.o \
355 misc.o no-icon.o printing.o ps.o random.o towers.o tree234.o \
356 version.o
357 $(CC) -o $@ drawing.o gtk.o latin.o malloc.o maxflow.o midend.o \
358 misc.o no-icon.o printing.o ps.o random.o towers.o tree234.o \
359 version.o $(XLFLAGS) $(XLIBS)
360
361$(BINPREFIX)towerssolver: latin6.o malloc.o maxflow.o misc.o nullfe.o \
362 random.o towers2.o tree234.o
363 $(CC) -o $@ latin6.o malloc.o maxflow.o misc.o nullfe.o random.o \
364 towers2.o tree234.o $(XLFLAGS) $(ULIBS)
365
366$(BINPREFIX)tracks: drawing.o dsf.o findloop.o gtk.o malloc.o midend.o \
367 misc.o no-icon.o printing.o ps.o random.o tracks.o version.o
368 $(CC) -o $@ drawing.o dsf.o findloop.o gtk.o malloc.o midend.o \
369 misc.o no-icon.o printing.o ps.o random.o tracks.o version.o \
370 $(XLFLAGS) $(XLIBS)
371
372$(BINPREFIX)twiddle: drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
373 printing.o ps.o random.o twiddle.o version.o
374 $(CC) -o $@ drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
375 printing.o ps.o random.o twiddle.o version.o $(XLFLAGS) \
376 $(XLIBS)
377
378$(BINPREFIX)undead: drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
379 printing.o ps.o random.o undead.o version.o
380 $(CC) -o $@ drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
381 printing.o ps.o random.o undead.o version.o $(XLFLAGS) \
382 $(XLIBS)
383
384$(BINPREFIX)unequal: drawing.o gtk.o latin.o malloc.o maxflow.o midend.o \
385 misc.o no-icon.o printing.o ps.o random.o tree234.o \
386 unequal.o version.o
387 $(CC) -o $@ drawing.o gtk.o latin.o malloc.o maxflow.o midend.o \
388 misc.o no-icon.o printing.o ps.o random.o tree234.o \
389 unequal.o version.o $(XLFLAGS) $(XLIBS)
390
391$(BINPREFIX)unequalsolver: latin6.o malloc.o maxflow.o misc.o nullfe.o \
392 random.o tree234.o unequal2.o
393 $(CC) -o $@ latin6.o malloc.o maxflow.o misc.o nullfe.o random.o \
394 tree234.o unequal2.o $(XLFLAGS) $(ULIBS)
395
396$(BINPREFIX)unruly: drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
397 printing.o ps.o random.o unruly.o version.o
398 $(CC) -o $@ drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
399 printing.o ps.o random.o unruly.o version.o $(XLFLAGS) \
400 $(XLIBS)
401
402$(BINPREFIX)unrulysolver: malloc.o misc.o nullfe.o random.o unruly2.o
403 $(CC) -o $@ malloc.o misc.o nullfe.o random.o unruly2.o $(XLFLAGS) \
404 $(ULIBS)
405
406$(BINPREFIX)untangle: drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
407 printing.o ps.o random.o tree234.o untangle.o version.o
408 $(CC) -o $@ drawing.o gtk.o malloc.o midend.o misc.o no-icon.o \
409 printing.o ps.o random.o tree234.o untangle.o version.o \
410 $(XLFLAGS) $(XLIBS)
411
412blackbox.o: ./blackbox.c ./puzzles.h
413 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
414blackbo3.o: ./blackbox.c ./puzzles.h
415 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
416bridges.o: ./bridges.c ./puzzles.h
417 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
418bridges3.o: ./bridges.c ./puzzles.h
419 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
420combi.o: ./combi.c ./puzzles.h
421 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
422cube.o: ./cube.c ./puzzles.h
423 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
424cube3.o: ./cube.c ./puzzles.h
425 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
426divvy.o: ./divvy.c ./puzzles.h
427 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
428dominosa.o: ./dominosa.c ./puzzles.h
429 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
430dominos3.o: ./dominosa.c ./puzzles.h
431 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
432drawing.o: ./drawing.c ./puzzles.h
433 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
434dsf.o: ./dsf.c ./puzzles.h
435 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
436fifteen.o: ./fifteen.c ./puzzles.h
437 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
438fifteen5.o: ./fifteen.c ./puzzles.h
439 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
440fifteen2.o: ./fifteen.c ./puzzles.h
441 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
442filling.o: ./filling.c ./puzzles.h
443 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
444filling5.o: ./filling.c ./puzzles.h
445 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
446filling2.o: ./filling.c ./puzzles.h
447 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
448findloop.o: ./findloop.c ./puzzles.h
449 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
450flip.o: ./flip.c ./puzzles.h ./tree234.h
451 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
452flip3.o: ./flip.c ./puzzles.h ./tree234.h
453 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
454flood.o: ./flood.c ./puzzles.h
455 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
456flood3.o: ./flood.c ./puzzles.h
457 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
458galaxies.o: ./galaxies.c ./puzzles.h
459 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
460galaxie7.o: ./galaxies.c ./puzzles.h
461 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
462galaxie4.o: ./galaxies.c ./puzzles.h
463 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_PICTURE_GENERATOR -c $< -o $@
464galaxie2.o: ./galaxies.c ./puzzles.h
465 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
466grid.o: ./grid.c ./puzzles.h ./tree234.h ./grid.h ./penrose.h
467 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
468gtk.o: ./gtk.c ./puzzles.h
469 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
470guess.o: ./guess.c ./puzzles.h
471 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
472guess3.o: ./guess.c ./puzzles.h
473 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
474inertia.o: ./inertia.c ./puzzles.h
475 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
476inertia3.o: ./inertia.c ./puzzles.h
477 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
478keen.o: ./keen.c ./puzzles.h ./latin.h
479 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
480keen5.o: ./keen.c ./puzzles.h ./latin.h
481 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
482keen2.o: ./keen.c ./puzzles.h ./latin.h
483 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
484latin.o: ./latin.c ./puzzles.h ./tree234.h ./maxflow.h ./latin.h
485 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
486latin8.o: ./latin.c ./puzzles.h ./tree234.h ./maxflow.h ./latin.h
487 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_LATIN_TEST -c $< -o $@
488latin6.o: ./latin.c ./puzzles.h ./tree234.h ./maxflow.h ./latin.h
489 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
490laydomino.o: ./laydomino.c ./puzzles.h
491 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
492lightup.o: ./lightup.c ./puzzles.h
493 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
494lightup5.o: ./lightup.c ./puzzles.h
495 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
496lightup2.o: ./lightup.c ./puzzles.h
497 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
498list.o: ./list.c ./puzzles.h
499 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
500loopgen.o: ./loopgen.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
501 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
502loopy.o: ./loopy.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
503 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
504loopy5.o: ./loopy.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
505 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
506loopy2.o: ./loopy.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
507 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
508magnets.o: ./magnets.c ./puzzles.h
509 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
510magnets5.o: ./magnets.c ./puzzles.h
511 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
512magnets2.o: ./magnets.c ./puzzles.h
513 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
514malloc.o: ./malloc.c ./puzzles.h
515 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
516map.o: ./map.c ./puzzles.h
517 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
518map5.o: ./map.c ./puzzles.h
519 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
520map2.o: ./map.c ./puzzles.h
521 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
522maxflow.o: ./maxflow.c ./maxflow.h ./puzzles.h
523 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
524midend.o: ./midend.c ./puzzles.h
525 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
526mines.o: ./mines.c ./tree234.h ./puzzles.h
527 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
528mines5.o: ./mines.c ./tree234.h ./puzzles.h
529 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
530mines2.o: ./mines.c ./tree234.h ./puzzles.h
531 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_OBFUSCATOR -c $< -o $@
532misc.o: ./misc.c ./puzzles.h
533 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
534net.o: ./net.c ./puzzles.h ./tree234.h
535 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
536net3.o: ./net.c ./puzzles.h ./tree234.h
537 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
538netslide.o: ./netslide.c ./puzzles.h ./tree234.h
539 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
540netslid3.o: ./netslide.c ./puzzles.h ./tree234.h
541 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
542no-icon.o: ./no-icon.c
543 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
544nullfe.o: ./nullfe.c ./puzzles.h
545 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
546nullgame.o: ./nullgame.c ./puzzles.h
547 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
548obfusc.o: ./obfusc.c ./puzzles.h
549 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
550osx.o: ./osx.m ./puzzles.h
551 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
552palisade.o: ./palisade.c ./puzzles.h
553 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
554palisad3.o: ./palisade.c ./puzzles.h
555 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
556pattern.o: ./pattern.c ./puzzles.h
557 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
558pattern7.o: ./pattern.c ./puzzles.h
559 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
560pattern4.o: ./pattern.c ./puzzles.h
561 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_PICTURE_GENERATOR -c $< -o $@
562pattern2.o: ./pattern.c ./puzzles.h
563 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
564pearl.o: ./pearl.c ./puzzles.h ./grid.h ./loopgen.h
565 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
566pearl5.o: ./pearl.c ./puzzles.h ./grid.h ./loopgen.h
567 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
568pearl2.o: ./pearl.c ./puzzles.h ./grid.h ./loopgen.h
569 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
570pegs.o: ./pegs.c ./puzzles.h ./tree234.h
571 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
572pegs3.o: ./pegs.c ./puzzles.h ./tree234.h
573 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
574penrose.o: ./penrose.c ./puzzles.h ./penrose.h
575 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
576printing.o: ./printing.c ./puzzles.h
577 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
578ps.o: ./ps.c ./puzzles.h
579 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
580random.o: ./random.c ./puzzles.h
581 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
582range.o: ./range.c ./puzzles.h
583 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
584range3.o: ./range.c ./puzzles.h
585 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
586rect.o: ./rect.c ./puzzles.h
587 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
588rect3.o: ./rect.c ./puzzles.h
589 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
590samegame.o: ./samegame.c ./puzzles.h
591 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
592samegam3.o: ./samegame.c ./puzzles.h
593 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
594signpost.o: ./signpost.c ./puzzles.h
595 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
596signpos5.o: ./signpost.c ./puzzles.h
597 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
598signpos2.o: ./signpost.c ./puzzles.h
599 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
600singles.o: ./singles.c ./puzzles.h ./latin.h
601 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
602singles5.o: ./singles.c ./puzzles.h ./latin.h
603 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
604singles3.o: ./singles.c ./puzzles.h ./latin.h
605 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
606sixteen.o: ./sixteen.c ./puzzles.h
607 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
608sixteen3.o: ./sixteen.c ./puzzles.h
609 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
610slant.o: ./slant.c ./puzzles.h
611 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
612slant5.o: ./slant.c ./puzzles.h
613 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
614slant2.o: ./slant.c ./puzzles.h
615 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
616solo.o: ./solo.c ./puzzles.h
617 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
618solo5.o: ./solo.c ./puzzles.h
619 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
620solo2.o: ./solo.c ./puzzles.h
621 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
622tdq.o: ./tdq.c ./puzzles.h
623 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
624tents.o: ./tents.c ./puzzles.h ./maxflow.h
625 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
626tents5.o: ./tents.c ./puzzles.h ./maxflow.h
627 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
628tents3.o: ./tents.c ./puzzles.h ./maxflow.h
629 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
630towers.o: ./towers.c ./puzzles.h ./latin.h
631 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
632towers5.o: ./towers.c ./puzzles.h ./latin.h
633 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
634towers2.o: ./towers.c ./puzzles.h ./latin.h
635 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
636tracks.o: ./tracks.c ./puzzles.h
637 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
638tracks3.o: ./tracks.c ./puzzles.h
639 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
640tree234.o: ./tree234.c ./tree234.h ./puzzles.h
641 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
642twiddle.o: ./twiddle.c ./puzzles.h
643 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
644twiddle3.o: ./twiddle.c ./puzzles.h
645 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
646undead.o: ./undead.c ./puzzles.h
647 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
648undead3.o: ./undead.c ./puzzles.h
649 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
650unequal.o: ./unequal.c ./puzzles.h ./latin.h
651 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
652unequal5.o: ./unequal.c ./puzzles.h ./latin.h
653 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
654unequal2.o: ./unequal.c ./puzzles.h ./latin.h
655 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
656unruly.o: ./unruly.c ./puzzles.h
657 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
658unruly5.o: ./unruly.c ./puzzles.h
659 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
660unruly2.o: ./unruly.c ./puzzles.h
661 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
662untangle.o: ./untangle.c ./puzzles.h ./tree234.h
663 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
664untangl3.o: ./untangle.c ./puzzles.h ./tree234.h
665 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
666version.o: ./version.c ./version.h
667 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
668windows.o: ./windows.c ./puzzles.h ./resource.h
669 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
670windows1.o: ./windows.c ./puzzles.h ./resource.h
671 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
672
673GAMES += blackbox
674GAMES += bridges
675GAMES += cube
676GAMES += dominosa
677GAMES += fifteen
678GAMES += filling
679GAMES += flip
680GAMES += flood
681GAMES += galaxies
682GAMES += guess
683GAMES += inertia
684GAMES += keen
685GAMES += lightup
686GAMES += loopy
687GAMES += magnets
688GAMES += map
689GAMES += mines
690GAMES += net
691GAMES += netslide
692GAMES += palisade
693GAMES += pattern
694GAMES += pearl
695GAMES += pegs
696GAMES += range
697GAMES += rect
698GAMES += samegame
699GAMES += signpost
700GAMES += singles
701GAMES += sixteen
702GAMES += slant
703GAMES += solo
704GAMES += tents
705GAMES += towers
706GAMES += tracks
707GAMES += twiddle
708GAMES += undead
709GAMES += unequal
710GAMES += unruly
711GAMES += untangle
712install:
713 for i in $(GAMES); do \
714 $(INSTALL_PROGRAM) -m 755 $(BINPREFIX)$$i $(DESTDIR)$(gamesdir)/$(BINPREFIX)$$i \
715 || exit 1; \
716 done
717test: benchmark.html benchmark.txt
718
719benchmark.html: benchmark.txt benchmark.pl
720 ./benchmark.pl benchmark.txt > $@
721
722benchmark.txt: benchmark.sh $(GAMES)
723 ./benchmark.sh > $@
724
725
726clean:
727 rm -f *.o $(BINPREFIX)blackbox $(BINPREFIX)bridges $(BINPREFIX)cube $(BINPREFIX)dominosa $(BINPREFIX)fifteen $(BINPREFIX)fifteensolver $(BINPREFIX)filling $(BINPREFIX)fillingsolver $(BINPREFIX)flip $(BINPREFIX)flood $(BINPREFIX)galaxies $(BINPREFIX)galaxiespicture $(BINPREFIX)galaxiessolver $(BINPREFIX)guess $(BINPREFIX)inertia $(BINPREFIX)keen $(BINPREFIX)keensolver $(BINPREFIX)latincheck $(BINPREFIX)lightup $(BINPREFIX)lightupsolver $(BINPREFIX)loopy $(BINPREFIX)loopysolver $(BINPREFIX)magnets $(BINPREFIX)magnetssolver $(BINPREFIX)map $(BINPREFIX)mapsolver $(BINPREFIX)mineobfusc $(BINPREFIX)mines $(BINPREFIX)net $(BINPREFIX)netslide $(BINPREFIX)nullgame $(BINPREFIX)obfusc $(BINPREFIX)palisade $(BINPREFIX)pattern $(BINPREFIX)patternpicture $(BINPREFIX)patternsolver $(BINPREFIX)pearl $(BINPREFIX)pearlbench $(BINPREFIX)pegs $(BINPREFIX)range $(BINPREFIX)rect $(BINPREFIX)samegame $(BINPREFIX)signpost $(BINPREFIX)signpostsolver $(BINPREFIX)singles $(BINPREFIX)singlessolver $(BINPREFIX)sixteen $(BINPREFIX)slant $(BINPREFIX)slantsolver $(BINPREFIX)solo $(BINPREFIX)solosolver $(BINPREFIX)tents $(BINPREFIX)tentssolver $(BINPREFIX)towers $(BINPREFIX)towerssolver $(BINPREFIX)tracks $(BINPREFIX)twiddle $(BINPREFIX)undead $(BINPREFIX)unequal $(BINPREFIX)unequalsolver $(BINPREFIX)unruly $(BINPREFIX)unrulysolver $(BINPREFIX)untangle
diff --git a/apps/plugins/puzzles/src/Makefile.in b/apps/plugins/puzzles/src/Makefile.in
new file mode 100644
index 0000000000..b86194f893
--- /dev/null
+++ b/apps/plugins/puzzles/src/Makefile.in
@@ -0,0 +1,2611 @@
1# Makefile.in generated by automake 1.15 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994-2014 Free Software Foundation, Inc.
5
6# This Makefile.in is free software; the Free Software Foundation
7# gives unlimited permission to copy and/or distribute it,
8# with or without modifications, as long as this notice is preserved.
9
10# This program is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
12# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
13# PARTICULAR PURPOSE.
14
15@SET_MAKE@
16
17# Makefile.am for puzzles under Unix with Autoconf/Automake.
18#
19# This file was created by `mkfiles.pl' from the `Recipe' file.
20# DO NOT EDIT THIS FILE DIRECTLY; edit Recipe or mkfiles.pl instead.
21
22
23VPATH = @srcdir@
24am__is_gnu_make = { \
25 if test -z '$(MAKELEVEL)'; then \
26 false; \
27 elif test -n '$(MAKE_HOST)'; then \
28 true; \
29 elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
30 true; \
31 else \
32 false; \
33 fi; \
34}
35am__make_running_with_option = \
36 case $${target_option-} in \
37 ?) ;; \
38 *) echo "am__make_running_with_option: internal error: invalid" \
39 "target option '$${target_option-}' specified" >&2; \
40 exit 1;; \
41 esac; \
42 has_opt=no; \
43 sane_makeflags=$$MAKEFLAGS; \
44 if $(am__is_gnu_make); then \
45 sane_makeflags=$$MFLAGS; \
46 else \
47 case $$MAKEFLAGS in \
48 *\\[\ \ ]*) \
49 bs=\\; \
50 sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
51 | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
52 esac; \
53 fi; \
54 skip_next=no; \
55 strip_trailopt () \
56 { \
57 flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
58 }; \
59 for flg in $$sane_makeflags; do \
60 test $$skip_next = yes && { skip_next=no; continue; }; \
61 case $$flg in \
62 *=*|--*) continue;; \
63 -*I) strip_trailopt 'I'; skip_next=yes;; \
64 -*I?*) strip_trailopt 'I';; \
65 -*O) strip_trailopt 'O'; skip_next=yes;; \
66 -*O?*) strip_trailopt 'O';; \
67 -*l) strip_trailopt 'l'; skip_next=yes;; \
68 -*l?*) strip_trailopt 'l';; \
69 -[dEDm]) skip_next=yes;; \
70 -[JT]) skip_next=yes;; \
71 esac; \
72 case $$flg in \
73 *$$target_option*) has_opt=yes; break;; \
74 esac; \
75 done; \
76 test $$has_opt = yes
77am__make_dryrun = (target_option=n; $(am__make_running_with_option))
78am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
79pkgdatadir = $(datadir)/@PACKAGE@
80pkgincludedir = $(includedir)/@PACKAGE@
81pkglibdir = $(libdir)/@PACKAGE@
82pkglibexecdir = $(libexecdir)/@PACKAGE@
83am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
84install_sh_DATA = $(install_sh) -c -m 644
85install_sh_PROGRAM = $(install_sh) -c
86install_sh_SCRIPT = $(install_sh) -c
87INSTALL_HEADER = $(INSTALL_DATA)
88transform = $(program_transform_name)
89NORMAL_INSTALL = :
90PRE_INSTALL = :
91POST_INSTALL = :
92NORMAL_UNINSTALL = :
93PRE_UNINSTALL = :
94POST_UNINSTALL = :
95noinst_PROGRAMS = blackbox$(EXEEXT) bridges$(EXEEXT) cube$(EXEEXT) \
96 dominosa$(EXEEXT) fifteen$(EXEEXT) fifteensolver$(EXEEXT) \
97 filling$(EXEEXT) fillingsolver$(EXEEXT) flip$(EXEEXT) \
98 flood$(EXEEXT) galaxies$(EXEEXT) galaxiespicture$(EXEEXT) \
99 galaxiessolver$(EXEEXT) guess$(EXEEXT) inertia$(EXEEXT) \
100 keen$(EXEEXT) keensolver$(EXEEXT) latincheck$(EXEEXT) \
101 lightup$(EXEEXT) lightupsolver$(EXEEXT) loopy$(EXEEXT) \
102 loopysolver$(EXEEXT) magnets$(EXEEXT) magnetssolver$(EXEEXT) \
103 map$(EXEEXT) mapsolver$(EXEEXT) mineobfusc$(EXEEXT) \
104 mines$(EXEEXT) net$(EXEEXT) netslide$(EXEEXT) \
105 nullgame$(EXEEXT) obfusc$(EXEEXT) palisade$(EXEEXT) \
106 pattern$(EXEEXT) patternpicture$(EXEEXT) \
107 patternsolver$(EXEEXT) pearl$(EXEEXT) pearlbench$(EXEEXT) \
108 pegs$(EXEEXT) range$(EXEEXT) rect$(EXEEXT) samegame$(EXEEXT) \
109 signpost$(EXEEXT) signpostsolver$(EXEEXT) singles$(EXEEXT) \
110 singlessolver$(EXEEXT) sixteen$(EXEEXT) slant$(EXEEXT) \
111 slantsolver$(EXEEXT) solo$(EXEEXT) solosolver$(EXEEXT) \
112 tents$(EXEEXT) tentssolver$(EXEEXT) towers$(EXEEXT) \
113 towerssolver$(EXEEXT) tracks$(EXEEXT) twiddle$(EXEEXT) \
114 undead$(EXEEXT) unequal$(EXEEXT) unequalsolver$(EXEEXT) \
115 unruly$(EXEEXT) unrulysolver$(EXEEXT) untangle$(EXEEXT)
116bin_PROGRAMS = $(am__EXEEXT_1)
117subdir = .
118ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
119am__aclocal_m4_deps = $(top_srcdir)/configure.ac
120am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
121 $(ACLOCAL_M4)
122DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
123 $(am__configure_deps) $(am__DIST_COMMON)
124am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
125 configure.lineno config.status.lineno
126mkinstalldirs = $(install_sh) -d
127CONFIG_CLEAN_FILES =
128CONFIG_CLEAN_VPATH_FILES =
129LIBRARIES = $(noinst_LIBRARIES)
130AR = ar
131ARFLAGS = cru
132AM_V_AR = $(am__v_AR_@AM_V@)
133am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
134am__v_AR_0 = @echo " AR " $@;
135am__v_AR_1 =
136libfifteen2_a_AR = $(AR) $(ARFLAGS)
137libfifteen2_a_LIBADD =
138am__dirstamp = $(am__leading_dot)dirstamp
139am_libfifteen2_a_OBJECTS = ./libfifteen2_a-fifteen.$(OBJEXT)
140libfifteen2_a_OBJECTS = $(am_libfifteen2_a_OBJECTS)
141libfilling2_a_AR = $(AR) $(ARFLAGS)
142libfilling2_a_LIBADD =
143am_libfilling2_a_OBJECTS = ./libfilling2_a-filling.$(OBJEXT)
144libfilling2_a_OBJECTS = $(am_libfilling2_a_OBJECTS)
145libgalaxie2_a_AR = $(AR) $(ARFLAGS)
146libgalaxie2_a_LIBADD =
147am_libgalaxie2_a_OBJECTS = ./libgalaxie2_a-galaxies.$(OBJEXT)
148libgalaxie2_a_OBJECTS = $(am_libgalaxie2_a_OBJECTS)
149libgalaxie4_a_AR = $(AR) $(ARFLAGS)
150libgalaxie4_a_LIBADD =
151am_libgalaxie4_a_OBJECTS = ./libgalaxie4_a-galaxies.$(OBJEXT)
152libgalaxie4_a_OBJECTS = $(am_libgalaxie4_a_OBJECTS)
153libkeen2_a_AR = $(AR) $(ARFLAGS)
154libkeen2_a_LIBADD =
155am_libkeen2_a_OBJECTS = ./libkeen2_a-keen.$(OBJEXT)
156libkeen2_a_OBJECTS = $(am_libkeen2_a_OBJECTS)
157liblatin6_a_AR = $(AR) $(ARFLAGS)
158liblatin6_a_LIBADD =
159am_liblatin6_a_OBJECTS = ./liblatin6_a-latin.$(OBJEXT)
160liblatin6_a_OBJECTS = $(am_liblatin6_a_OBJECTS)
161liblatin8_a_AR = $(AR) $(ARFLAGS)
162liblatin8_a_LIBADD =
163am_liblatin8_a_OBJECTS = ./liblatin8_a-latin.$(OBJEXT)
164liblatin8_a_OBJECTS = $(am_liblatin8_a_OBJECTS)
165liblightup2_a_AR = $(AR) $(ARFLAGS)
166liblightup2_a_LIBADD =
167am_liblightup2_a_OBJECTS = ./liblightup2_a-lightup.$(OBJEXT)
168liblightup2_a_OBJECTS = $(am_liblightup2_a_OBJECTS)
169libloopy2_a_AR = $(AR) $(ARFLAGS)
170libloopy2_a_LIBADD =
171am_libloopy2_a_OBJECTS = ./libloopy2_a-loopy.$(OBJEXT)
172libloopy2_a_OBJECTS = $(am_libloopy2_a_OBJECTS)
173libmagnets2_a_AR = $(AR) $(ARFLAGS)
174libmagnets2_a_LIBADD =
175am_libmagnets2_a_OBJECTS = ./libmagnets2_a-magnets.$(OBJEXT)
176libmagnets2_a_OBJECTS = $(am_libmagnets2_a_OBJECTS)
177libmap2_a_AR = $(AR) $(ARFLAGS)
178libmap2_a_LIBADD =
179am_libmap2_a_OBJECTS = ./libmap2_a-map.$(OBJEXT)
180libmap2_a_OBJECTS = $(am_libmap2_a_OBJECTS)
181libmines2_a_AR = $(AR) $(ARFLAGS)
182libmines2_a_LIBADD =
183am_libmines2_a_OBJECTS = ./libmines2_a-mines.$(OBJEXT)
184libmines2_a_OBJECTS = $(am_libmines2_a_OBJECTS)
185libpattern2_a_AR = $(AR) $(ARFLAGS)
186libpattern2_a_LIBADD =
187am_libpattern2_a_OBJECTS = ./libpattern2_a-pattern.$(OBJEXT)
188libpattern2_a_OBJECTS = $(am_libpattern2_a_OBJECTS)
189libpattern4_a_AR = $(AR) $(ARFLAGS)
190libpattern4_a_LIBADD =
191am_libpattern4_a_OBJECTS = ./libpattern4_a-pattern.$(OBJEXT)
192libpattern4_a_OBJECTS = $(am_libpattern4_a_OBJECTS)
193libpearl2_a_AR = $(AR) $(ARFLAGS)
194libpearl2_a_LIBADD =
195am_libpearl2_a_OBJECTS = ./libpearl2_a-pearl.$(OBJEXT)
196libpearl2_a_OBJECTS = $(am_libpearl2_a_OBJECTS)
197libsignpos2_a_AR = $(AR) $(ARFLAGS)
198libsignpos2_a_LIBADD =
199am_libsignpos2_a_OBJECTS = ./libsignpos2_a-signpost.$(OBJEXT)
200libsignpos2_a_OBJECTS = $(am_libsignpos2_a_OBJECTS)
201libsingles3_a_AR = $(AR) $(ARFLAGS)
202libsingles3_a_LIBADD =
203am_libsingles3_a_OBJECTS = ./libsingles3_a-singles.$(OBJEXT)
204libsingles3_a_OBJECTS = $(am_libsingles3_a_OBJECTS)
205libslant2_a_AR = $(AR) $(ARFLAGS)
206libslant2_a_LIBADD =
207am_libslant2_a_OBJECTS = ./libslant2_a-slant.$(OBJEXT)
208libslant2_a_OBJECTS = $(am_libslant2_a_OBJECTS)
209libsolo2_a_AR = $(AR) $(ARFLAGS)
210libsolo2_a_LIBADD =
211am_libsolo2_a_OBJECTS = ./libsolo2_a-solo.$(OBJEXT)
212libsolo2_a_OBJECTS = $(am_libsolo2_a_OBJECTS)
213libtents3_a_AR = $(AR) $(ARFLAGS)
214libtents3_a_LIBADD =
215am_libtents3_a_OBJECTS = ./libtents3_a-tents.$(OBJEXT)
216libtents3_a_OBJECTS = $(am_libtents3_a_OBJECTS)
217libtowers2_a_AR = $(AR) $(ARFLAGS)
218libtowers2_a_LIBADD =
219am_libtowers2_a_OBJECTS = ./libtowers2_a-towers.$(OBJEXT)
220libtowers2_a_OBJECTS = $(am_libtowers2_a_OBJECTS)
221libunequal2_a_AR = $(AR) $(ARFLAGS)
222libunequal2_a_LIBADD =
223am_libunequal2_a_OBJECTS = ./libunequal2_a-unequal.$(OBJEXT)
224libunequal2_a_OBJECTS = $(am_libunequal2_a_OBJECTS)
225libunruly2_a_AR = $(AR) $(ARFLAGS)
226libunruly2_a_LIBADD =
227am_libunruly2_a_OBJECTS = ./libunruly2_a-unruly.$(OBJEXT)
228libunruly2_a_OBJECTS = $(am_libunruly2_a_OBJECTS)
229am__EXEEXT_1 = blackbox$(EXEEXT) bridges$(EXEEXT) cube$(EXEEXT) \
230 dominosa$(EXEEXT) fifteen$(EXEEXT) filling$(EXEEXT) \
231 flip$(EXEEXT) flood$(EXEEXT) galaxies$(EXEEXT) guess$(EXEEXT) \
232 inertia$(EXEEXT) keen$(EXEEXT) lightup$(EXEEXT) loopy$(EXEEXT) \
233 magnets$(EXEEXT) map$(EXEEXT) mines$(EXEEXT) net$(EXEEXT) \
234 netslide$(EXEEXT) palisade$(EXEEXT) pattern$(EXEEXT) \
235 pearl$(EXEEXT) pegs$(EXEEXT) range$(EXEEXT) rect$(EXEEXT) \
236 samegame$(EXEEXT) signpost$(EXEEXT) singles$(EXEEXT) \
237 sixteen$(EXEEXT) slant$(EXEEXT) solo$(EXEEXT) tents$(EXEEXT) \
238 towers$(EXEEXT) tracks$(EXEEXT) twiddle$(EXEEXT) \
239 undead$(EXEEXT) unequal$(EXEEXT) unruly$(EXEEXT) \
240 untangle$(EXEEXT)
241am__installdirs = "$(DESTDIR)$(bindir)"
242PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
243am_blackbox_OBJECTS = ./blackbox.$(OBJEXT) ./drawing.$(OBJEXT) \
244 ./gtk.$(OBJEXT) ./malloc.$(OBJEXT) ./midend.$(OBJEXT) \
245 ./misc.$(OBJEXT) ./no-icon.$(OBJEXT) ./printing.$(OBJEXT) \
246 ./ps.$(OBJEXT) ./random.$(OBJEXT) ./version.$(OBJEXT)
247blackbox_OBJECTS = $(am_blackbox_OBJECTS)
248am__DEPENDENCIES_1 =
249blackbox_DEPENDENCIES = $(am__DEPENDENCIES_1)
250am_bridges_OBJECTS = ./bridges.$(OBJEXT) ./drawing.$(OBJEXT) \
251 ./dsf.$(OBJEXT) ./findloop.$(OBJEXT) ./gtk.$(OBJEXT) \
252 ./malloc.$(OBJEXT) ./midend.$(OBJEXT) ./misc.$(OBJEXT) \
253 ./no-icon.$(OBJEXT) ./printing.$(OBJEXT) ./ps.$(OBJEXT) \
254 ./random.$(OBJEXT) ./version.$(OBJEXT)
255bridges_OBJECTS = $(am_bridges_OBJECTS)
256bridges_DEPENDENCIES = $(am__DEPENDENCIES_1)
257am_cube_OBJECTS = ./cube.$(OBJEXT) ./drawing.$(OBJEXT) ./gtk.$(OBJEXT) \
258 ./malloc.$(OBJEXT) ./midend.$(OBJEXT) ./misc.$(OBJEXT) \
259 ./no-icon.$(OBJEXT) ./printing.$(OBJEXT) ./ps.$(OBJEXT) \
260 ./random.$(OBJEXT) ./version.$(OBJEXT)
261cube_OBJECTS = $(am_cube_OBJECTS)
262cube_DEPENDENCIES = $(am__DEPENDENCIES_1)
263am_dominosa_OBJECTS = ./dominosa.$(OBJEXT) ./drawing.$(OBJEXT) \
264 ./gtk.$(OBJEXT) ./laydomino.$(OBJEXT) ./malloc.$(OBJEXT) \
265 ./midend.$(OBJEXT) ./misc.$(OBJEXT) ./no-icon.$(OBJEXT) \
266 ./printing.$(OBJEXT) ./ps.$(OBJEXT) ./random.$(OBJEXT) \
267 ./version.$(OBJEXT)
268dominosa_OBJECTS = $(am_dominosa_OBJECTS)
269dominosa_DEPENDENCIES = $(am__DEPENDENCIES_1)
270am_fifteen_OBJECTS = ./drawing.$(OBJEXT) ./fifteen.$(OBJEXT) \
271 ./gtk.$(OBJEXT) ./malloc.$(OBJEXT) ./midend.$(OBJEXT) \
272 ./misc.$(OBJEXT) ./no-icon.$(OBJEXT) ./printing.$(OBJEXT) \
273 ./ps.$(OBJEXT) ./random.$(OBJEXT) ./version.$(OBJEXT)
274fifteen_OBJECTS = $(am_fifteen_OBJECTS)
275fifteen_DEPENDENCIES = $(am__DEPENDENCIES_1)
276am_fifteensolver_OBJECTS = ./malloc.$(OBJEXT) ./misc.$(OBJEXT) \
277 ./nullfe.$(OBJEXT) ./random.$(OBJEXT)
278fifteensolver_OBJECTS = $(am_fifteensolver_OBJECTS)
279fifteensolver_DEPENDENCIES = libfifteen2_a-fifteen.$(OBJEXT)
280am_filling_OBJECTS = ./drawing.$(OBJEXT) ./dsf.$(OBJEXT) \
281 ./filling.$(OBJEXT) ./gtk.$(OBJEXT) ./malloc.$(OBJEXT) \
282 ./midend.$(OBJEXT) ./misc.$(OBJEXT) ./no-icon.$(OBJEXT) \
283 ./printing.$(OBJEXT) ./ps.$(OBJEXT) ./random.$(OBJEXT) \
284 ./version.$(OBJEXT)
285filling_OBJECTS = $(am_filling_OBJECTS)
286filling_DEPENDENCIES = $(am__DEPENDENCIES_1)
287am_fillingsolver_OBJECTS = ./dsf.$(OBJEXT) ./malloc.$(OBJEXT) \
288 ./misc.$(OBJEXT) ./nullfe.$(OBJEXT) ./random.$(OBJEXT)
289fillingsolver_OBJECTS = $(am_fillingsolver_OBJECTS)
290fillingsolver_DEPENDENCIES = libfilling2_a-filling.$(OBJEXT)
291am_flip_OBJECTS = ./drawing.$(OBJEXT) ./flip.$(OBJEXT) ./gtk.$(OBJEXT) \
292 ./malloc.$(OBJEXT) ./midend.$(OBJEXT) ./misc.$(OBJEXT) \
293 ./no-icon.$(OBJEXT) ./printing.$(OBJEXT) ./ps.$(OBJEXT) \
294 ./random.$(OBJEXT) ./tree234.$(OBJEXT) ./version.$(OBJEXT)
295flip_OBJECTS = $(am_flip_OBJECTS)
296flip_DEPENDENCIES = $(am__DEPENDENCIES_1)
297am_flood_OBJECTS = ./drawing.$(OBJEXT) ./flood.$(OBJEXT) \
298 ./gtk.$(OBJEXT) ./malloc.$(OBJEXT) ./midend.$(OBJEXT) \
299 ./misc.$(OBJEXT) ./no-icon.$(OBJEXT) ./printing.$(OBJEXT) \
300 ./ps.$(OBJEXT) ./random.$(OBJEXT) ./version.$(OBJEXT)
301flood_OBJECTS = $(am_flood_OBJECTS)
302flood_DEPENDENCIES = $(am__DEPENDENCIES_1)
303am_galaxies_OBJECTS = ./drawing.$(OBJEXT) ./dsf.$(OBJEXT) \
304 ./galaxies.$(OBJEXT) ./gtk.$(OBJEXT) ./malloc.$(OBJEXT) \
305 ./midend.$(OBJEXT) ./misc.$(OBJEXT) ./no-icon.$(OBJEXT) \
306 ./printing.$(OBJEXT) ./ps.$(OBJEXT) ./random.$(OBJEXT) \
307 ./version.$(OBJEXT)
308galaxies_OBJECTS = $(am_galaxies_OBJECTS)
309galaxies_DEPENDENCIES = $(am__DEPENDENCIES_1)
310am_galaxiespicture_OBJECTS = ./dsf.$(OBJEXT) ./malloc.$(OBJEXT) \
311 ./misc.$(OBJEXT) ./nullfe.$(OBJEXT) ./random.$(OBJEXT)
312galaxiespicture_OBJECTS = $(am_galaxiespicture_OBJECTS)
313galaxiespicture_DEPENDENCIES = libgalaxie4_a-galaxies.$(OBJEXT)
314am_galaxiessolver_OBJECTS = ./dsf.$(OBJEXT) ./malloc.$(OBJEXT) \
315 ./misc.$(OBJEXT) ./nullfe.$(OBJEXT) ./random.$(OBJEXT)
316galaxiessolver_OBJECTS = $(am_galaxiessolver_OBJECTS)
317galaxiessolver_DEPENDENCIES = libgalaxie2_a-galaxies.$(OBJEXT)
318am_guess_OBJECTS = ./drawing.$(OBJEXT) ./gtk.$(OBJEXT) \
319 ./guess.$(OBJEXT) ./malloc.$(OBJEXT) ./midend.$(OBJEXT) \
320 ./misc.$(OBJEXT) ./no-icon.$(OBJEXT) ./printing.$(OBJEXT) \
321 ./ps.$(OBJEXT) ./random.$(OBJEXT) ./version.$(OBJEXT)
322guess_OBJECTS = $(am_guess_OBJECTS)
323guess_DEPENDENCIES = $(am__DEPENDENCIES_1)
324am_inertia_OBJECTS = ./drawing.$(OBJEXT) ./gtk.$(OBJEXT) \
325 ./inertia.$(OBJEXT) ./malloc.$(OBJEXT) ./midend.$(OBJEXT) \
326 ./misc.$(OBJEXT) ./no-icon.$(OBJEXT) ./printing.$(OBJEXT) \
327 ./ps.$(OBJEXT) ./random.$(OBJEXT) ./version.$(OBJEXT)
328inertia_OBJECTS = $(am_inertia_OBJECTS)
329inertia_DEPENDENCIES = $(am__DEPENDENCIES_1)
330am_keen_OBJECTS = ./drawing.$(OBJEXT) ./dsf.$(OBJEXT) ./gtk.$(OBJEXT) \
331 ./keen.$(OBJEXT) ./latin.$(OBJEXT) ./malloc.$(OBJEXT) \
332 ./maxflow.$(OBJEXT) ./midend.$(OBJEXT) ./misc.$(OBJEXT) \
333 ./no-icon.$(OBJEXT) ./printing.$(OBJEXT) ./ps.$(OBJEXT) \
334 ./random.$(OBJEXT) ./tree234.$(OBJEXT) ./version.$(OBJEXT)
335keen_OBJECTS = $(am_keen_OBJECTS)
336keen_DEPENDENCIES = $(am__DEPENDENCIES_1)
337am_keensolver_OBJECTS = ./dsf.$(OBJEXT) ./malloc.$(OBJEXT) \
338 ./maxflow.$(OBJEXT) ./misc.$(OBJEXT) ./nullfe.$(OBJEXT) \
339 ./random.$(OBJEXT) ./tree234.$(OBJEXT)
340keensolver_OBJECTS = $(am_keensolver_OBJECTS)
341keensolver_DEPENDENCIES = libkeen2_a-keen.$(OBJEXT) \
342 liblatin6_a-latin.$(OBJEXT)
343am_latincheck_OBJECTS = ./malloc.$(OBJEXT) ./maxflow.$(OBJEXT) \
344 ./misc.$(OBJEXT) ./nullfe.$(OBJEXT) ./random.$(OBJEXT) \
345 ./tree234.$(OBJEXT)
346latincheck_OBJECTS = $(am_latincheck_OBJECTS)
347latincheck_DEPENDENCIES = liblatin8_a-latin.$(OBJEXT)
348am_lightup_OBJECTS = ./combi.$(OBJEXT) ./drawing.$(OBJEXT) \
349 ./gtk.$(OBJEXT) ./lightup.$(OBJEXT) ./malloc.$(OBJEXT) \
350 ./midend.$(OBJEXT) ./misc.$(OBJEXT) ./no-icon.$(OBJEXT) \
351 ./printing.$(OBJEXT) ./ps.$(OBJEXT) ./random.$(OBJEXT) \
352 ./version.$(OBJEXT)
353lightup_OBJECTS = $(am_lightup_OBJECTS)
354lightup_DEPENDENCIES = $(am__DEPENDENCIES_1)
355am_lightupsolver_OBJECTS = ./combi.$(OBJEXT) ./malloc.$(OBJEXT) \
356 ./misc.$(OBJEXT) ./nullfe.$(OBJEXT) ./random.$(OBJEXT)
357lightupsolver_OBJECTS = $(am_lightupsolver_OBJECTS)
358lightupsolver_DEPENDENCIES = liblightup2_a-lightup.$(OBJEXT)
359am_loopy_OBJECTS = ./drawing.$(OBJEXT) ./dsf.$(OBJEXT) \
360 ./grid.$(OBJEXT) ./gtk.$(OBJEXT) ./loopgen.$(OBJEXT) \
361 ./loopy.$(OBJEXT) ./malloc.$(OBJEXT) ./midend.$(OBJEXT) \
362 ./misc.$(OBJEXT) ./no-icon.$(OBJEXT) ./penrose.$(OBJEXT) \
363 ./printing.$(OBJEXT) ./ps.$(OBJEXT) ./random.$(OBJEXT) \
364 ./tree234.$(OBJEXT) ./version.$(OBJEXT)
365loopy_OBJECTS = $(am_loopy_OBJECTS)
366loopy_DEPENDENCIES = $(am__DEPENDENCIES_1)
367am_loopysolver_OBJECTS = ./dsf.$(OBJEXT) ./grid.$(OBJEXT) \
368 ./loopgen.$(OBJEXT) ./malloc.$(OBJEXT) ./misc.$(OBJEXT) \
369 ./nullfe.$(OBJEXT) ./penrose.$(OBJEXT) ./random.$(OBJEXT) \
370 ./tree234.$(OBJEXT)
371loopysolver_OBJECTS = $(am_loopysolver_OBJECTS)
372loopysolver_DEPENDENCIES = libloopy2_a-loopy.$(OBJEXT)
373am_magnets_OBJECTS = ./drawing.$(OBJEXT) ./gtk.$(OBJEXT) \
374 ./laydomino.$(OBJEXT) ./magnets.$(OBJEXT) ./malloc.$(OBJEXT) \
375 ./midend.$(OBJEXT) ./misc.$(OBJEXT) ./no-icon.$(OBJEXT) \
376 ./printing.$(OBJEXT) ./ps.$(OBJEXT) ./random.$(OBJEXT) \
377 ./version.$(OBJEXT)
378magnets_OBJECTS = $(am_magnets_OBJECTS)
379magnets_DEPENDENCIES = $(am__DEPENDENCIES_1)
380am_magnetssolver_OBJECTS = ./laydomino.$(OBJEXT) ./malloc.$(OBJEXT) \
381 ./misc.$(OBJEXT) ./nullfe.$(OBJEXT) ./random.$(OBJEXT)
382magnetssolver_OBJECTS = $(am_magnetssolver_OBJECTS)
383magnetssolver_DEPENDENCIES = libmagnets2_a-magnets.$(OBJEXT)
384am_map_OBJECTS = ./drawing.$(OBJEXT) ./dsf.$(OBJEXT) ./gtk.$(OBJEXT) \
385 ./malloc.$(OBJEXT) ./map.$(OBJEXT) ./midend.$(OBJEXT) \
386 ./misc.$(OBJEXT) ./no-icon.$(OBJEXT) ./printing.$(OBJEXT) \
387 ./ps.$(OBJEXT) ./random.$(OBJEXT) ./version.$(OBJEXT)
388map_OBJECTS = $(am_map_OBJECTS)
389map_DEPENDENCIES = $(am__DEPENDENCIES_1)
390am_mapsolver_OBJECTS = ./dsf.$(OBJEXT) ./malloc.$(OBJEXT) \
391 ./misc.$(OBJEXT) ./nullfe.$(OBJEXT) ./random.$(OBJEXT)
392mapsolver_OBJECTS = $(am_mapsolver_OBJECTS)
393mapsolver_DEPENDENCIES = libmap2_a-map.$(OBJEXT)
394am_mineobfusc_OBJECTS = ./malloc.$(OBJEXT) ./misc.$(OBJEXT) \
395 ./nullfe.$(OBJEXT) ./random.$(OBJEXT) ./tree234.$(OBJEXT)
396mineobfusc_OBJECTS = $(am_mineobfusc_OBJECTS)
397mineobfusc_DEPENDENCIES = libmines2_a-mines.$(OBJEXT)
398am_mines_OBJECTS = ./drawing.$(OBJEXT) ./gtk.$(OBJEXT) \
399 ./malloc.$(OBJEXT) ./midend.$(OBJEXT) ./mines.$(OBJEXT) \
400 ./misc.$(OBJEXT) ./no-icon.$(OBJEXT) ./printing.$(OBJEXT) \
401 ./ps.$(OBJEXT) ./random.$(OBJEXT) ./tree234.$(OBJEXT) \
402 ./version.$(OBJEXT)
403mines_OBJECTS = $(am_mines_OBJECTS)
404mines_DEPENDENCIES = $(am__DEPENDENCIES_1)
405am_net_OBJECTS = ./drawing.$(OBJEXT) ./dsf.$(OBJEXT) \
406 ./findloop.$(OBJEXT) ./gtk.$(OBJEXT) ./malloc.$(OBJEXT) \
407 ./midend.$(OBJEXT) ./misc.$(OBJEXT) ./net.$(OBJEXT) \
408 ./no-icon.$(OBJEXT) ./printing.$(OBJEXT) ./ps.$(OBJEXT) \
409 ./random.$(OBJEXT) ./tree234.$(OBJEXT) ./version.$(OBJEXT)
410net_OBJECTS = $(am_net_OBJECTS)
411net_DEPENDENCIES = $(am__DEPENDENCIES_1)
412am_netslide_OBJECTS = ./drawing.$(OBJEXT) ./gtk.$(OBJEXT) \
413 ./malloc.$(OBJEXT) ./midend.$(OBJEXT) ./misc.$(OBJEXT) \
414 ./netslide.$(OBJEXT) ./no-icon.$(OBJEXT) ./printing.$(OBJEXT) \
415 ./ps.$(OBJEXT) ./random.$(OBJEXT) ./tree234.$(OBJEXT) \
416 ./version.$(OBJEXT)
417netslide_OBJECTS = $(am_netslide_OBJECTS)
418netslide_DEPENDENCIES = $(am__DEPENDENCIES_1)
419am_nullgame_OBJECTS = ./drawing.$(OBJEXT) ./gtk.$(OBJEXT) \
420 ./malloc.$(OBJEXT) ./midend.$(OBJEXT) ./misc.$(OBJEXT) \
421 ./no-icon.$(OBJEXT) ./nullgame.$(OBJEXT) ./printing.$(OBJEXT) \
422 ./ps.$(OBJEXT) ./random.$(OBJEXT) ./version.$(OBJEXT)
423nullgame_OBJECTS = $(am_nullgame_OBJECTS)
424nullgame_DEPENDENCIES = $(am__DEPENDENCIES_1)
425am_obfusc_OBJECTS = ./malloc.$(OBJEXT) ./misc.$(OBJEXT) \
426 ./nullfe.$(OBJEXT) ./obfusc.$(OBJEXT) ./random.$(OBJEXT)
427obfusc_OBJECTS = $(am_obfusc_OBJECTS)
428obfusc_DEPENDENCIES =
429am_palisade_OBJECTS = ./divvy.$(OBJEXT) ./drawing.$(OBJEXT) \
430 ./dsf.$(OBJEXT) ./gtk.$(OBJEXT) ./malloc.$(OBJEXT) \
431 ./midend.$(OBJEXT) ./misc.$(OBJEXT) ./no-icon.$(OBJEXT) \
432 ./palisade.$(OBJEXT) ./printing.$(OBJEXT) ./ps.$(OBJEXT) \
433 ./random.$(OBJEXT) ./version.$(OBJEXT)
434palisade_OBJECTS = $(am_palisade_OBJECTS)
435palisade_DEPENDENCIES = $(am__DEPENDENCIES_1)
436am_pattern_OBJECTS = ./drawing.$(OBJEXT) ./gtk.$(OBJEXT) \
437 ./malloc.$(OBJEXT) ./midend.$(OBJEXT) ./misc.$(OBJEXT) \
438 ./no-icon.$(OBJEXT) ./pattern.$(OBJEXT) ./printing.$(OBJEXT) \
439 ./ps.$(OBJEXT) ./random.$(OBJEXT) ./version.$(OBJEXT)
440pattern_OBJECTS = $(am_pattern_OBJECTS)
441pattern_DEPENDENCIES = $(am__DEPENDENCIES_1)
442am_patternpicture_OBJECTS = ./malloc.$(OBJEXT) ./misc.$(OBJEXT) \
443 ./nullfe.$(OBJEXT) ./random.$(OBJEXT)
444patternpicture_OBJECTS = $(am_patternpicture_OBJECTS)
445patternpicture_DEPENDENCIES = libpattern4_a-pattern.$(OBJEXT)
446am_patternsolver_OBJECTS = ./malloc.$(OBJEXT) ./misc.$(OBJEXT) \
447 ./nullfe.$(OBJEXT) ./random.$(OBJEXT)
448patternsolver_OBJECTS = $(am_patternsolver_OBJECTS)
449patternsolver_DEPENDENCIES = libpattern2_a-pattern.$(OBJEXT)
450am_pearl_OBJECTS = ./drawing.$(OBJEXT) ./dsf.$(OBJEXT) \
451 ./grid.$(OBJEXT) ./gtk.$(OBJEXT) ./loopgen.$(OBJEXT) \
452 ./malloc.$(OBJEXT) ./midend.$(OBJEXT) ./misc.$(OBJEXT) \
453 ./no-icon.$(OBJEXT) ./pearl.$(OBJEXT) ./penrose.$(OBJEXT) \
454 ./printing.$(OBJEXT) ./ps.$(OBJEXT) ./random.$(OBJEXT) \
455 ./tdq.$(OBJEXT) ./tree234.$(OBJEXT) ./version.$(OBJEXT)
456pearl_OBJECTS = $(am_pearl_OBJECTS)
457pearl_DEPENDENCIES = $(am__DEPENDENCIES_1)
458am_pearlbench_OBJECTS = ./dsf.$(OBJEXT) ./grid.$(OBJEXT) \
459 ./loopgen.$(OBJEXT) ./malloc.$(OBJEXT) ./misc.$(OBJEXT) \
460 ./nullfe.$(OBJEXT) ./penrose.$(OBJEXT) ./random.$(OBJEXT) \
461 ./tdq.$(OBJEXT) ./tree234.$(OBJEXT)
462pearlbench_OBJECTS = $(am_pearlbench_OBJECTS)
463pearlbench_DEPENDENCIES = libpearl2_a-pearl.$(OBJEXT)
464am_pegs_OBJECTS = ./drawing.$(OBJEXT) ./gtk.$(OBJEXT) \
465 ./malloc.$(OBJEXT) ./midend.$(OBJEXT) ./misc.$(OBJEXT) \
466 ./no-icon.$(OBJEXT) ./pegs.$(OBJEXT) ./printing.$(OBJEXT) \
467 ./ps.$(OBJEXT) ./random.$(OBJEXT) ./tree234.$(OBJEXT) \
468 ./version.$(OBJEXT)
469pegs_OBJECTS = $(am_pegs_OBJECTS)
470pegs_DEPENDENCIES = $(am__DEPENDENCIES_1)
471am_range_OBJECTS = ./drawing.$(OBJEXT) ./dsf.$(OBJEXT) ./gtk.$(OBJEXT) \
472 ./malloc.$(OBJEXT) ./midend.$(OBJEXT) ./misc.$(OBJEXT) \
473 ./no-icon.$(OBJEXT) ./printing.$(OBJEXT) ./ps.$(OBJEXT) \
474 ./random.$(OBJEXT) ./range.$(OBJEXT) ./version.$(OBJEXT)
475range_OBJECTS = $(am_range_OBJECTS)
476range_DEPENDENCIES = $(am__DEPENDENCIES_1)
477am_rect_OBJECTS = ./drawing.$(OBJEXT) ./gtk.$(OBJEXT) \
478 ./malloc.$(OBJEXT) ./midend.$(OBJEXT) ./misc.$(OBJEXT) \
479 ./no-icon.$(OBJEXT) ./printing.$(OBJEXT) ./ps.$(OBJEXT) \
480 ./random.$(OBJEXT) ./rect.$(OBJEXT) ./version.$(OBJEXT)
481rect_OBJECTS = $(am_rect_OBJECTS)
482rect_DEPENDENCIES = $(am__DEPENDENCIES_1)
483am_samegame_OBJECTS = ./drawing.$(OBJEXT) ./gtk.$(OBJEXT) \
484 ./malloc.$(OBJEXT) ./midend.$(OBJEXT) ./misc.$(OBJEXT) \
485 ./no-icon.$(OBJEXT) ./printing.$(OBJEXT) ./ps.$(OBJEXT) \
486 ./random.$(OBJEXT) ./samegame.$(OBJEXT) ./version.$(OBJEXT)
487samegame_OBJECTS = $(am_samegame_OBJECTS)
488samegame_DEPENDENCIES = $(am__DEPENDENCIES_1)
489am_signpost_OBJECTS = ./drawing.$(OBJEXT) ./dsf.$(OBJEXT) \
490 ./gtk.$(OBJEXT) ./malloc.$(OBJEXT) ./midend.$(OBJEXT) \
491 ./misc.$(OBJEXT) ./no-icon.$(OBJEXT) ./printing.$(OBJEXT) \
492 ./ps.$(OBJEXT) ./random.$(OBJEXT) ./signpost.$(OBJEXT) \
493 ./version.$(OBJEXT)
494signpost_OBJECTS = $(am_signpost_OBJECTS)
495signpost_DEPENDENCIES = $(am__DEPENDENCIES_1)
496am_signpostsolver_OBJECTS = ./dsf.$(OBJEXT) ./malloc.$(OBJEXT) \
497 ./misc.$(OBJEXT) ./nullfe.$(OBJEXT) ./random.$(OBJEXT)
498signpostsolver_OBJECTS = $(am_signpostsolver_OBJECTS)
499signpostsolver_DEPENDENCIES = libsignpos2_a-signpost.$(OBJEXT)
500am_singles_OBJECTS = ./drawing.$(OBJEXT) ./dsf.$(OBJEXT) \
501 ./gtk.$(OBJEXT) ./latin.$(OBJEXT) ./malloc.$(OBJEXT) \
502 ./maxflow.$(OBJEXT) ./midend.$(OBJEXT) ./misc.$(OBJEXT) \
503 ./no-icon.$(OBJEXT) ./printing.$(OBJEXT) ./ps.$(OBJEXT) \
504 ./random.$(OBJEXT) ./singles.$(OBJEXT) ./tree234.$(OBJEXT) \
505 ./version.$(OBJEXT)
506singles_OBJECTS = $(am_singles_OBJECTS)
507singles_DEPENDENCIES = $(am__DEPENDENCIES_1)
508am_singlessolver_OBJECTS = ./dsf.$(OBJEXT) ./latin.$(OBJEXT) \
509 ./malloc.$(OBJEXT) ./maxflow.$(OBJEXT) ./misc.$(OBJEXT) \
510 ./nullfe.$(OBJEXT) ./random.$(OBJEXT) ./tree234.$(OBJEXT)
511singlessolver_OBJECTS = $(am_singlessolver_OBJECTS)
512singlessolver_DEPENDENCIES = libsingles3_a-singles.$(OBJEXT)
513am_sixteen_OBJECTS = ./drawing.$(OBJEXT) ./gtk.$(OBJEXT) \
514 ./malloc.$(OBJEXT) ./midend.$(OBJEXT) ./misc.$(OBJEXT) \
515 ./no-icon.$(OBJEXT) ./printing.$(OBJEXT) ./ps.$(OBJEXT) \
516 ./random.$(OBJEXT) ./sixteen.$(OBJEXT) ./version.$(OBJEXT)
517sixteen_OBJECTS = $(am_sixteen_OBJECTS)
518sixteen_DEPENDENCIES = $(am__DEPENDENCIES_1)
519am_slant_OBJECTS = ./drawing.$(OBJEXT) ./dsf.$(OBJEXT) \
520 ./findloop.$(OBJEXT) ./gtk.$(OBJEXT) ./malloc.$(OBJEXT) \
521 ./midend.$(OBJEXT) ./misc.$(OBJEXT) ./no-icon.$(OBJEXT) \
522 ./printing.$(OBJEXT) ./ps.$(OBJEXT) ./random.$(OBJEXT) \
523 ./slant.$(OBJEXT) ./version.$(OBJEXT)
524slant_OBJECTS = $(am_slant_OBJECTS)
525slant_DEPENDENCIES = $(am__DEPENDENCIES_1)
526am_slantsolver_OBJECTS = ./dsf.$(OBJEXT) ./findloop.$(OBJEXT) \
527 ./malloc.$(OBJEXT) ./misc.$(OBJEXT) ./nullfe.$(OBJEXT) \
528 ./random.$(OBJEXT)
529slantsolver_OBJECTS = $(am_slantsolver_OBJECTS)
530slantsolver_DEPENDENCIES = libslant2_a-slant.$(OBJEXT)
531am_solo_OBJECTS = ./divvy.$(OBJEXT) ./drawing.$(OBJEXT) \
532 ./dsf.$(OBJEXT) ./gtk.$(OBJEXT) ./malloc.$(OBJEXT) \
533 ./midend.$(OBJEXT) ./misc.$(OBJEXT) ./no-icon.$(OBJEXT) \
534 ./printing.$(OBJEXT) ./ps.$(OBJEXT) ./random.$(OBJEXT) \
535 ./solo.$(OBJEXT) ./version.$(OBJEXT)
536solo_OBJECTS = $(am_solo_OBJECTS)
537solo_DEPENDENCIES = $(am__DEPENDENCIES_1)
538am_solosolver_OBJECTS = ./divvy.$(OBJEXT) ./dsf.$(OBJEXT) \
539 ./malloc.$(OBJEXT) ./misc.$(OBJEXT) ./nullfe.$(OBJEXT) \
540 ./random.$(OBJEXT)
541solosolver_OBJECTS = $(am_solosolver_OBJECTS)
542solosolver_DEPENDENCIES = libsolo2_a-solo.$(OBJEXT)
543am_tents_OBJECTS = ./drawing.$(OBJEXT) ./dsf.$(OBJEXT) ./gtk.$(OBJEXT) \
544 ./malloc.$(OBJEXT) ./maxflow.$(OBJEXT) ./midend.$(OBJEXT) \
545 ./misc.$(OBJEXT) ./no-icon.$(OBJEXT) ./printing.$(OBJEXT) \
546 ./ps.$(OBJEXT) ./random.$(OBJEXT) ./tents.$(OBJEXT) \
547 ./version.$(OBJEXT)
548tents_OBJECTS = $(am_tents_OBJECTS)
549tents_DEPENDENCIES = $(am__DEPENDENCIES_1)
550am_tentssolver_OBJECTS = ./dsf.$(OBJEXT) ./malloc.$(OBJEXT) \
551 ./maxflow.$(OBJEXT) ./misc.$(OBJEXT) ./nullfe.$(OBJEXT) \
552 ./random.$(OBJEXT)
553tentssolver_OBJECTS = $(am_tentssolver_OBJECTS)
554tentssolver_DEPENDENCIES = libtents3_a-tents.$(OBJEXT)
555am_towers_OBJECTS = ./drawing.$(OBJEXT) ./gtk.$(OBJEXT) \
556 ./latin.$(OBJEXT) ./malloc.$(OBJEXT) ./maxflow.$(OBJEXT) \
557 ./midend.$(OBJEXT) ./misc.$(OBJEXT) ./no-icon.$(OBJEXT) \
558 ./printing.$(OBJEXT) ./ps.$(OBJEXT) ./random.$(OBJEXT) \
559 ./towers.$(OBJEXT) ./tree234.$(OBJEXT) ./version.$(OBJEXT)
560towers_OBJECTS = $(am_towers_OBJECTS)
561towers_DEPENDENCIES = $(am__DEPENDENCIES_1)
562am_towerssolver_OBJECTS = ./malloc.$(OBJEXT) ./maxflow.$(OBJEXT) \
563 ./misc.$(OBJEXT) ./nullfe.$(OBJEXT) ./random.$(OBJEXT) \
564 ./tree234.$(OBJEXT)
565towerssolver_OBJECTS = $(am_towerssolver_OBJECTS)
566towerssolver_DEPENDENCIES = liblatin6_a-latin.$(OBJEXT) \
567 libtowers2_a-towers.$(OBJEXT)
568am_tracks_OBJECTS = ./drawing.$(OBJEXT) ./dsf.$(OBJEXT) \
569 ./findloop.$(OBJEXT) ./gtk.$(OBJEXT) ./malloc.$(OBJEXT) \
570 ./midend.$(OBJEXT) ./misc.$(OBJEXT) ./no-icon.$(OBJEXT) \
571 ./printing.$(OBJEXT) ./ps.$(OBJEXT) ./random.$(OBJEXT) \
572 ./tracks.$(OBJEXT) ./version.$(OBJEXT)
573tracks_OBJECTS = $(am_tracks_OBJECTS)
574tracks_DEPENDENCIES = $(am__DEPENDENCIES_1)
575am_twiddle_OBJECTS = ./drawing.$(OBJEXT) ./gtk.$(OBJEXT) \
576 ./malloc.$(OBJEXT) ./midend.$(OBJEXT) ./misc.$(OBJEXT) \
577 ./no-icon.$(OBJEXT) ./printing.$(OBJEXT) ./ps.$(OBJEXT) \
578 ./random.$(OBJEXT) ./twiddle.$(OBJEXT) ./version.$(OBJEXT)
579twiddle_OBJECTS = $(am_twiddle_OBJECTS)
580twiddle_DEPENDENCIES = $(am__DEPENDENCIES_1)
581am_undead_OBJECTS = ./drawing.$(OBJEXT) ./gtk.$(OBJEXT) \
582 ./malloc.$(OBJEXT) ./midend.$(OBJEXT) ./misc.$(OBJEXT) \
583 ./no-icon.$(OBJEXT) ./printing.$(OBJEXT) ./ps.$(OBJEXT) \
584 ./random.$(OBJEXT) ./undead.$(OBJEXT) ./version.$(OBJEXT)
585undead_OBJECTS = $(am_undead_OBJECTS)
586undead_DEPENDENCIES = $(am__DEPENDENCIES_1)
587am_unequal_OBJECTS = ./drawing.$(OBJEXT) ./gtk.$(OBJEXT) \
588 ./latin.$(OBJEXT) ./malloc.$(OBJEXT) ./maxflow.$(OBJEXT) \
589 ./midend.$(OBJEXT) ./misc.$(OBJEXT) ./no-icon.$(OBJEXT) \
590 ./printing.$(OBJEXT) ./ps.$(OBJEXT) ./random.$(OBJEXT) \
591 ./tree234.$(OBJEXT) ./unequal.$(OBJEXT) ./version.$(OBJEXT)
592unequal_OBJECTS = $(am_unequal_OBJECTS)
593unequal_DEPENDENCIES = $(am__DEPENDENCIES_1)
594am_unequalsolver_OBJECTS = ./malloc.$(OBJEXT) ./maxflow.$(OBJEXT) \
595 ./misc.$(OBJEXT) ./nullfe.$(OBJEXT) ./random.$(OBJEXT) \
596 ./tree234.$(OBJEXT)
597unequalsolver_OBJECTS = $(am_unequalsolver_OBJECTS)
598unequalsolver_DEPENDENCIES = liblatin6_a-latin.$(OBJEXT) \
599 libunequal2_a-unequal.$(OBJEXT)
600am_unruly_OBJECTS = ./drawing.$(OBJEXT) ./gtk.$(OBJEXT) \
601 ./malloc.$(OBJEXT) ./midend.$(OBJEXT) ./misc.$(OBJEXT) \
602 ./no-icon.$(OBJEXT) ./printing.$(OBJEXT) ./ps.$(OBJEXT) \
603 ./random.$(OBJEXT) ./unruly.$(OBJEXT) ./version.$(OBJEXT)
604unruly_OBJECTS = $(am_unruly_OBJECTS)
605unruly_DEPENDENCIES = $(am__DEPENDENCIES_1)
606am_unrulysolver_OBJECTS = ./malloc.$(OBJEXT) ./misc.$(OBJEXT) \
607 ./nullfe.$(OBJEXT) ./random.$(OBJEXT)
608unrulysolver_OBJECTS = $(am_unrulysolver_OBJECTS)
609unrulysolver_DEPENDENCIES = libunruly2_a-unruly.$(OBJEXT)
610am_untangle_OBJECTS = ./drawing.$(OBJEXT) ./gtk.$(OBJEXT) \
611 ./malloc.$(OBJEXT) ./midend.$(OBJEXT) ./misc.$(OBJEXT) \
612 ./no-icon.$(OBJEXT) ./printing.$(OBJEXT) ./ps.$(OBJEXT) \
613 ./random.$(OBJEXT) ./tree234.$(OBJEXT) ./untangle.$(OBJEXT) \
614 ./version.$(OBJEXT)
615untangle_OBJECTS = $(am_untangle_OBJECTS)
616untangle_DEPENDENCIES = $(am__DEPENDENCIES_1)
617AM_V_P = $(am__v_P_@AM_V@)
618am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
619am__v_P_0 = false
620am__v_P_1 = :
621AM_V_GEN = $(am__v_GEN_@AM_V@)
622am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
623am__v_GEN_0 = @echo " GEN " $@;
624am__v_GEN_1 =
625AM_V_at = $(am__v_at_@AM_V@)
626am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
627am__v_at_0 = @
628am__v_at_1 =
629DEFAULT_INCLUDES = -I.@am__isrc@
630depcomp = $(SHELL) $(top_srcdir)/depcomp
631am__depfiles_maybe = depfiles
632am__mv = mv -f
633AM_V_lt = $(am__v_lt_@AM_V@)
634am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
635am__v_lt_0 = --silent
636am__v_lt_1 =
637COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
638 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
639AM_V_CC = $(am__v_CC_@AM_V@)
640am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
641am__v_CC_0 = @echo " CC " $@;
642am__v_CC_1 =
643CCLD = $(CC)
644LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
645AM_V_CCLD = $(am__v_CCLD_@AM_V@)
646am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
647am__v_CCLD_0 = @echo " CCLD " $@;
648am__v_CCLD_1 =
649SOURCES = $(libfifteen2_a_SOURCES) $(libfilling2_a_SOURCES) \
650 $(libgalaxie2_a_SOURCES) $(libgalaxie4_a_SOURCES) \
651 $(libkeen2_a_SOURCES) $(liblatin6_a_SOURCES) \
652 $(liblatin8_a_SOURCES) $(liblightup2_a_SOURCES) \
653 $(libloopy2_a_SOURCES) $(libmagnets2_a_SOURCES) \
654 $(libmap2_a_SOURCES) $(libmines2_a_SOURCES) \
655 $(libpattern2_a_SOURCES) $(libpattern4_a_SOURCES) \
656 $(libpearl2_a_SOURCES) $(libsignpos2_a_SOURCES) \
657 $(libsingles3_a_SOURCES) $(libslant2_a_SOURCES) \
658 $(libsolo2_a_SOURCES) $(libtents3_a_SOURCES) \
659 $(libtowers2_a_SOURCES) $(libunequal2_a_SOURCES) \
660 $(libunruly2_a_SOURCES) $(blackbox_SOURCES) $(bridges_SOURCES) \
661 $(cube_SOURCES) $(dominosa_SOURCES) $(fifteen_SOURCES) \
662 $(fifteensolver_SOURCES) $(filling_SOURCES) \
663 $(fillingsolver_SOURCES) $(flip_SOURCES) $(flood_SOURCES) \
664 $(galaxies_SOURCES) $(galaxiespicture_SOURCES) \
665 $(galaxiessolver_SOURCES) $(guess_SOURCES) $(inertia_SOURCES) \
666 $(keen_SOURCES) $(keensolver_SOURCES) $(latincheck_SOURCES) \
667 $(lightup_SOURCES) $(lightupsolver_SOURCES) $(loopy_SOURCES) \
668 $(loopysolver_SOURCES) $(magnets_SOURCES) \
669 $(magnetssolver_SOURCES) $(map_SOURCES) $(mapsolver_SOURCES) \
670 $(mineobfusc_SOURCES) $(mines_SOURCES) $(net_SOURCES) \
671 $(netslide_SOURCES) $(nullgame_SOURCES) $(obfusc_SOURCES) \
672 $(palisade_SOURCES) $(pattern_SOURCES) \
673 $(patternpicture_SOURCES) $(patternsolver_SOURCES) \
674 $(pearl_SOURCES) $(pearlbench_SOURCES) $(pegs_SOURCES) \
675 $(range_SOURCES) $(rect_SOURCES) $(samegame_SOURCES) \
676 $(signpost_SOURCES) $(signpostsolver_SOURCES) \
677 $(singles_SOURCES) $(singlessolver_SOURCES) $(sixteen_SOURCES) \
678 $(slant_SOURCES) $(slantsolver_SOURCES) $(solo_SOURCES) \
679 $(solosolver_SOURCES) $(tents_SOURCES) $(tentssolver_SOURCES) \
680 $(towers_SOURCES) $(towerssolver_SOURCES) $(tracks_SOURCES) \
681 $(twiddle_SOURCES) $(undead_SOURCES) $(unequal_SOURCES) \
682 $(unequalsolver_SOURCES) $(unruly_SOURCES) \
683 $(unrulysolver_SOURCES) $(untangle_SOURCES)
684DIST_SOURCES = $(libfifteen2_a_SOURCES) $(libfilling2_a_SOURCES) \
685 $(libgalaxie2_a_SOURCES) $(libgalaxie4_a_SOURCES) \
686 $(libkeen2_a_SOURCES) $(liblatin6_a_SOURCES) \
687 $(liblatin8_a_SOURCES) $(liblightup2_a_SOURCES) \
688 $(libloopy2_a_SOURCES) $(libmagnets2_a_SOURCES) \
689 $(libmap2_a_SOURCES) $(libmines2_a_SOURCES) \
690 $(libpattern2_a_SOURCES) $(libpattern4_a_SOURCES) \
691 $(libpearl2_a_SOURCES) $(libsignpos2_a_SOURCES) \
692 $(libsingles3_a_SOURCES) $(libslant2_a_SOURCES) \
693 $(libsolo2_a_SOURCES) $(libtents3_a_SOURCES) \
694 $(libtowers2_a_SOURCES) $(libunequal2_a_SOURCES) \
695 $(libunruly2_a_SOURCES) $(blackbox_SOURCES) $(bridges_SOURCES) \
696 $(cube_SOURCES) $(dominosa_SOURCES) $(fifteen_SOURCES) \
697 $(fifteensolver_SOURCES) $(filling_SOURCES) \
698 $(fillingsolver_SOURCES) $(flip_SOURCES) $(flood_SOURCES) \
699 $(galaxies_SOURCES) $(galaxiespicture_SOURCES) \
700 $(galaxiessolver_SOURCES) $(guess_SOURCES) $(inertia_SOURCES) \
701 $(keen_SOURCES) $(keensolver_SOURCES) $(latincheck_SOURCES) \
702 $(lightup_SOURCES) $(lightupsolver_SOURCES) $(loopy_SOURCES) \
703 $(loopysolver_SOURCES) $(magnets_SOURCES) \
704 $(magnetssolver_SOURCES) $(map_SOURCES) $(mapsolver_SOURCES) \
705 $(mineobfusc_SOURCES) $(mines_SOURCES) $(net_SOURCES) \
706 $(netslide_SOURCES) $(nullgame_SOURCES) $(obfusc_SOURCES) \
707 $(palisade_SOURCES) $(pattern_SOURCES) \
708 $(patternpicture_SOURCES) $(patternsolver_SOURCES) \
709 $(pearl_SOURCES) $(pearlbench_SOURCES) $(pegs_SOURCES) \
710 $(range_SOURCES) $(rect_SOURCES) $(samegame_SOURCES) \
711 $(signpost_SOURCES) $(signpostsolver_SOURCES) \
712 $(singles_SOURCES) $(singlessolver_SOURCES) $(sixteen_SOURCES) \
713 $(slant_SOURCES) $(slantsolver_SOURCES) $(solo_SOURCES) \
714 $(solosolver_SOURCES) $(tents_SOURCES) $(tentssolver_SOURCES) \
715 $(towers_SOURCES) $(towerssolver_SOURCES) $(tracks_SOURCES) \
716 $(twiddle_SOURCES) $(undead_SOURCES) $(unequal_SOURCES) \
717 $(unequalsolver_SOURCES) $(unruly_SOURCES) \
718 $(unrulysolver_SOURCES) $(untangle_SOURCES)
719am__can_run_installinfo = \
720 case $$AM_UPDATE_INFO_DIR in \
721 n|no|NO) false;; \
722 *) (install-info --version) >/dev/null 2>&1;; \
723 esac
724am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
725# Read a list of newline-separated strings from the standard input,
726# and print each of them once, without duplicates. Input order is
727# *not* preserved.
728am__uniquify_input = $(AWK) '\
729 BEGIN { nonempty = 0; } \
730 { items[$$0] = 1; nonempty = 1; } \
731 END { if (nonempty) { for (i in items) print i; }; } \
732'
733# Make sure the list of sources is unique. This is necessary because,
734# e.g., the same source file might be shared among _SOURCES variables
735# for different programs/libraries.
736am__define_uniq_tagged_files = \
737 list='$(am__tagged_files)'; \
738 unique=`for i in $$list; do \
739 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
740 done | $(am__uniquify_input)`
741ETAGS = etags
742CTAGS = ctags
743CSCOPE = cscope
744AM_RECURSIVE_TARGETS = cscope
745am__DIST_COMMON = $(srcdir)/Makefile.in README compile depcomp \
746 install-sh missing
747DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
748distdir = $(PACKAGE)-$(VERSION)
749top_distdir = $(distdir)
750am__remove_distdir = \
751 if test -d "$(distdir)"; then \
752 find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
753 && rm -rf "$(distdir)" \
754 || { sleep 5 && rm -rf "$(distdir)"; }; \
755 else :; fi
756am__post_remove_distdir = $(am__remove_distdir)
757DIST_ARCHIVES = $(distdir).tar.gz
758GZIP_ENV = --best
759DIST_TARGETS = dist-gzip
760distuninstallcheck_listfiles = find . -type f -print
761am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
762 | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
763distcleancheck_listfiles = find . -type f -print
764ACLOCAL = @ACLOCAL@
765AMTAR = @AMTAR@
766AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
767AUTOCONF = @AUTOCONF@
768AUTOHEADER = @AUTOHEADER@
769AUTOMAKE = @AUTOMAKE@
770AWK = @AWK@
771CC = @CC@
772CCDEPMODE = @CCDEPMODE@
773CFLAGS = @CFLAGS@
774CPPFLAGS = @CPPFLAGS@
775CYGPATH_W = @CYGPATH_W@
776DEFS = @DEFS@
777DEPDIR = @DEPDIR@
778ECHO_C = @ECHO_C@
779ECHO_N = @ECHO_N@
780ECHO_T = @ECHO_T@
781EXEEXT = @EXEEXT@
782GTK_CFLAGS = @GTK_CFLAGS@
783GTK_LIBS = @GTK_LIBS@
784INSTALL = @INSTALL@
785INSTALL_DATA = @INSTALL_DATA@
786INSTALL_PROGRAM = @INSTALL_PROGRAM@
787INSTALL_SCRIPT = @INSTALL_SCRIPT@
788INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
789LDFLAGS = @LDFLAGS@
790LIBOBJS = @LIBOBJS@
791LIBS = @LIBS@
792LTLIBOBJS = @LTLIBOBJS@
793MAKEINFO = @MAKEINFO@
794MKDIR_P = @MKDIR_P@
795OBJEXT = @OBJEXT@
796PACKAGE = @PACKAGE@
797PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
798PACKAGE_NAME = @PACKAGE_NAME@
799PACKAGE_STRING = @PACKAGE_STRING@
800PACKAGE_TARNAME = @PACKAGE_TARNAME@
801PACKAGE_URL = @PACKAGE_URL@
802PACKAGE_VERSION = @PACKAGE_VERSION@
803PATH_SEPARATOR = @PATH_SEPARATOR@
804PKG_CONFIG = @PKG_CONFIG@
805PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
806PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
807RANLIB = @RANLIB@
808SET_MAKE = @SET_MAKE@
809SHELL = @SHELL@
810STRIP = @STRIP@
811VERSION = @VERSION@
812abs_builddir = @abs_builddir@
813abs_srcdir = @abs_srcdir@
814abs_top_builddir = @abs_top_builddir@
815abs_top_srcdir = @abs_top_srcdir@
816ac_ct_CC = @ac_ct_CC@
817am__include = @am__include@
818am__leading_dot = @am__leading_dot@
819am__quote = @am__quote@
820am__tar = @am__tar@
821am__untar = @am__untar@
822bindir = @bindir@
823build_alias = @build_alias@
824builddir = @builddir@
825datadir = @datadir@
826datarootdir = @datarootdir@
827docdir = @docdir@
828dvidir = @dvidir@
829exec_prefix = @exec_prefix@
830host_alias = @host_alias@
831htmldir = @htmldir@
832includedir = @includedir@
833infodir = @infodir@
834install_sh = @install_sh@
835libdir = @libdir@
836libexecdir = @libexecdir@
837localedir = @localedir@
838localstatedir = @localstatedir@
839mandir = @mandir@
840mkdir_p = @mkdir_p@
841oldincludedir = @oldincludedir@
842pdfdir = @pdfdir@
843prefix = @prefix@
844program_transform_name = @program_transform_name@
845psdir = @psdir@
846sbindir = @sbindir@
847sharedstatedir = @sharedstatedir@
848srcdir = @srcdir@
849sysconfdir = @sysconfdir@
850target_alias = @target_alias@
851top_build_prefix = @top_build_prefix@
852top_builddir = @top_builddir@
853top_srcdir = @top_srcdir@
854GAMES = blackbox bridges cube dominosa fifteen filling flip flood \
855 galaxies guess inertia keen lightup loopy magnets map mines \
856 net netslide palisade pattern pearl pegs range rect samegame \
857 signpost singles sixteen slant solo tents towers tracks \
858 twiddle undead unequal unruly untangle
859AUTOMAKE_OPTIONS = subdir-objects
860allsources = ./blackbox.c ./bridges.c ./combi.c ./cube.c ./divvy.c \
861 ./dominosa.c ./drawing.c ./dsf.c ./fifteen.c ./filling.c \
862 ./findloop.c ./flip.c ./flood.c ./galaxies.c ./grid.c \
863 ./grid.h ./gtk.c ./guess.c ./inertia.c ./keen.c ./latin.c \
864 ./latin.h ./laydomino.c ./lightup.c ./list.c ./loopgen.c \
865 ./loopgen.h ./loopy.c ./magnets.c ./malloc.c ./map.c \
866 ./maxflow.c ./maxflow.h ./midend.c ./mines.c ./misc.c \
867 ./net.c ./netslide.c ./no-icon.c ./nullfe.c ./nullgame.c \
868 ./obfusc.c ./osx.m ./palisade.c ./pattern.c ./pearl.c \
869 ./pegs.c ./penrose.c ./penrose.h ./printing.c ./ps.c \
870 ./puzzles.h ./random.c ./range.c ./rect.c ./resource.h \
871 ./samegame.c ./signpost.c ./singles.c ./sixteen.c ./slant.c \
872 ./solo.c ./tdq.c ./tents.c ./towers.c ./tracks.c ./tree234.c \
873 ./tree234.h ./twiddle.c ./undead.c ./unequal.c ./unruly.c \
874 ./untangle.c ./version.c ./version.h ./windows.c
875
876AM_CPPFLAGS = -I$(srcdir)/./ -I$(srcdir)/icons/
877AM_CFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS)
878blackbox_SOURCES = ./blackbox.c ./drawing.c ./gtk.c ./malloc.c ./midend.c \
879 ./misc.c ./no-icon.c ./printing.c ./ps.c ./puzzles.h \
880 ./random.c ./version.c ./version.h
881
882blackbox_LDADD = $(GTK_LIBS) -lm
883bridges_SOURCES = ./bridges.c ./drawing.c ./dsf.c ./findloop.c ./gtk.c \
884 ./malloc.c ./midend.c ./misc.c ./no-icon.c ./printing.c \
885 ./ps.c ./puzzles.h ./random.c ./version.c ./version.h
886
887bridges_LDADD = $(GTK_LIBS) -lm
888cube_SOURCES = ./cube.c ./drawing.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
889 ./no-icon.c ./printing.c ./ps.c ./puzzles.h ./random.c \
890 ./version.c ./version.h
891
892cube_LDADD = $(GTK_LIBS) -lm
893dominosa_SOURCES = ./dominosa.c ./drawing.c ./gtk.c ./laydomino.c ./malloc.c \
894 ./midend.c ./misc.c ./no-icon.c ./printing.c ./ps.c \
895 ./puzzles.h ./random.c ./version.c ./version.h
896
897dominosa_LDADD = $(GTK_LIBS) -lm
898fifteen_SOURCES = ./drawing.c ./fifteen.c ./gtk.c ./malloc.c ./midend.c \
899 ./misc.c ./no-icon.c ./printing.c ./ps.c ./puzzles.h \
900 ./random.c ./version.c ./version.h
901
902fifteen_LDADD = $(GTK_LIBS) -lm
903fifteensolver_SOURCES = ./malloc.c ./misc.c ./nullfe.c ./puzzles.h \
904 ./random.c
905
906fifteensolver_LDADD = libfifteen2_a-fifteen.$(OBJEXT) -lm
907filling_SOURCES = ./drawing.c ./dsf.c ./filling.c ./gtk.c ./malloc.c \
908 ./midend.c ./misc.c ./no-icon.c ./printing.c ./ps.c \
909 ./puzzles.h ./random.c ./version.c ./version.h
910
911filling_LDADD = $(GTK_LIBS) -lm
912fillingsolver_SOURCES = ./dsf.c ./malloc.c ./misc.c ./nullfe.c ./puzzles.h \
913 ./random.c
914
915fillingsolver_LDADD = libfilling2_a-filling.$(OBJEXT) -lm
916flip_SOURCES = ./drawing.c ./flip.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
917 ./no-icon.c ./printing.c ./ps.c ./puzzles.h ./random.c \
918 ./tree234.c ./tree234.h ./version.c ./version.h
919
920flip_LDADD = $(GTK_LIBS) -lm
921flood_SOURCES = ./drawing.c ./flood.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
922 ./no-icon.c ./printing.c ./ps.c ./puzzles.h ./random.c \
923 ./version.c ./version.h
924
925flood_LDADD = $(GTK_LIBS) -lm
926galaxies_SOURCES = ./drawing.c ./dsf.c ./galaxies.c ./gtk.c ./malloc.c \
927 ./midend.c ./misc.c ./no-icon.c ./printing.c ./ps.c \
928 ./puzzles.h ./random.c ./version.c ./version.h
929
930galaxies_LDADD = $(GTK_LIBS) -lm
931galaxiespicture_SOURCES = ./dsf.c ./malloc.c ./misc.c ./nullfe.c ./puzzles.h \
932 ./random.c
933
934galaxiespicture_LDADD = libgalaxie4_a-galaxies.$(OBJEXT) -lm
935galaxiessolver_SOURCES = ./dsf.c ./malloc.c ./misc.c ./nullfe.c ./puzzles.h \
936 ./random.c
937
938galaxiessolver_LDADD = libgalaxie2_a-galaxies.$(OBJEXT) -lm
939guess_SOURCES = ./drawing.c ./gtk.c ./guess.c ./malloc.c ./midend.c ./misc.c \
940 ./no-icon.c ./printing.c ./ps.c ./puzzles.h ./random.c \
941 ./version.c ./version.h
942
943guess_LDADD = $(GTK_LIBS) -lm
944inertia_SOURCES = ./drawing.c ./gtk.c ./inertia.c ./malloc.c ./midend.c \
945 ./misc.c ./no-icon.c ./printing.c ./ps.c ./puzzles.h \
946 ./random.c ./version.c ./version.h
947
948inertia_LDADD = $(GTK_LIBS) -lm
949keen_SOURCES = ./drawing.c ./dsf.c ./gtk.c ./keen.c ./latin.c ./latin.h \
950 ./malloc.c ./maxflow.c ./maxflow.h ./midend.c ./misc.c \
951 ./no-icon.c ./printing.c ./ps.c ./puzzles.h ./random.c \
952 ./tree234.c ./tree234.h ./version.c ./version.h
953
954keen_LDADD = $(GTK_LIBS) -lm
955keensolver_SOURCES = ./dsf.c ./malloc.c ./maxflow.c ./maxflow.h ./misc.c \
956 ./nullfe.c ./puzzles.h ./random.c ./tree234.c ./tree234.h
957
958keensolver_LDADD = libkeen2_a-keen.$(OBJEXT) liblatin6_a-latin.$(OBJEXT) -lm
959latincheck_SOURCES = ./malloc.c ./maxflow.c ./maxflow.h ./misc.c ./nullfe.c \
960 ./puzzles.h ./random.c ./tree234.c ./tree234.h
961
962latincheck_LDADD = liblatin8_a-latin.$(OBJEXT) -lm
963lightup_SOURCES = ./combi.c ./drawing.c ./gtk.c ./lightup.c ./malloc.c \
964 ./midend.c ./misc.c ./no-icon.c ./printing.c ./ps.c \
965 ./puzzles.h ./random.c ./version.c ./version.h
966
967lightup_LDADD = $(GTK_LIBS) -lm
968lightupsolver_SOURCES = ./combi.c ./malloc.c ./misc.c ./nullfe.c ./puzzles.h \
969 ./random.c
970
971lightupsolver_LDADD = liblightup2_a-lightup.$(OBJEXT) -lm
972loopy_SOURCES = ./drawing.c ./dsf.c ./grid.c ./grid.h ./gtk.c ./loopgen.c \
973 ./loopgen.h ./loopy.c ./malloc.c ./midend.c ./misc.c \
974 ./no-icon.c ./penrose.c ./penrose.h ./printing.c ./ps.c \
975 ./puzzles.h ./random.c ./tree234.c ./tree234.h ./version.c \
976 ./version.h
977
978loopy_LDADD = $(GTK_LIBS) -lm
979loopysolver_SOURCES = ./dsf.c ./grid.c ./grid.h ./loopgen.c ./loopgen.h \
980 ./malloc.c ./misc.c ./nullfe.c ./penrose.c ./penrose.h \
981 ./puzzles.h ./random.c ./tree234.c ./tree234.h
982
983loopysolver_LDADD = libloopy2_a-loopy.$(OBJEXT) -lm
984magnets_SOURCES = ./drawing.c ./gtk.c ./laydomino.c ./magnets.c ./malloc.c \
985 ./midend.c ./misc.c ./no-icon.c ./printing.c ./ps.c \
986 ./puzzles.h ./random.c ./version.c ./version.h
987
988magnets_LDADD = $(GTK_LIBS) -lm
989magnetssolver_SOURCES = ./laydomino.c ./malloc.c ./misc.c ./nullfe.c \
990 ./puzzles.h ./random.c
991
992magnetssolver_LDADD = libmagnets2_a-magnets.$(OBJEXT) -lm
993map_SOURCES = ./drawing.c ./dsf.c ./gtk.c ./malloc.c ./map.c ./midend.c \
994 ./misc.c ./no-icon.c ./printing.c ./ps.c ./puzzles.h \
995 ./random.c ./version.c ./version.h
996
997map_LDADD = $(GTK_LIBS) -lm
998mapsolver_SOURCES = ./dsf.c ./malloc.c ./misc.c ./nullfe.c ./puzzles.h \
999 ./random.c
1000
1001mapsolver_LDADD = libmap2_a-map.$(OBJEXT) -lm
1002mineobfusc_SOURCES = ./malloc.c ./misc.c ./nullfe.c ./puzzles.h ./random.c \
1003 ./tree234.c ./tree234.h
1004
1005mineobfusc_LDADD = libmines2_a-mines.$(OBJEXT) -lm
1006mines_SOURCES = ./drawing.c ./gtk.c ./malloc.c ./midend.c ./mines.c ./misc.c \
1007 ./no-icon.c ./printing.c ./ps.c ./puzzles.h ./random.c \
1008 ./tree234.c ./tree234.h ./version.c ./version.h
1009
1010mines_LDADD = $(GTK_LIBS) -lm
1011net_SOURCES = ./drawing.c ./dsf.c ./findloop.c ./gtk.c ./malloc.c ./midend.c \
1012 ./misc.c ./net.c ./no-icon.c ./printing.c ./ps.c ./puzzles.h \
1013 ./random.c ./tree234.c ./tree234.h ./version.c ./version.h
1014
1015net_LDADD = $(GTK_LIBS) -lm
1016netslide_SOURCES = ./drawing.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
1017 ./netslide.c ./no-icon.c ./printing.c ./ps.c ./puzzles.h \
1018 ./random.c ./tree234.c ./tree234.h ./version.c ./version.h
1019
1020netslide_LDADD = $(GTK_LIBS) -lm
1021nullgame_SOURCES = ./drawing.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
1022 ./no-icon.c ./nullgame.c ./printing.c ./ps.c ./puzzles.h \
1023 ./random.c ./version.c ./version.h
1024
1025nullgame_LDADD = $(GTK_LIBS) -lm
1026obfusc_SOURCES = ./malloc.c ./misc.c ./nullfe.c ./obfusc.c ./puzzles.h \
1027 ./random.c
1028
1029obfusc_LDADD = -lm
1030palisade_SOURCES = ./divvy.c ./drawing.c ./dsf.c ./gtk.c ./malloc.c \
1031 ./midend.c ./misc.c ./no-icon.c ./palisade.c ./printing.c \
1032 ./ps.c ./puzzles.h ./random.c ./version.c ./version.h
1033
1034palisade_LDADD = $(GTK_LIBS) -lm
1035pattern_SOURCES = ./drawing.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
1036 ./no-icon.c ./pattern.c ./printing.c ./ps.c ./puzzles.h \
1037 ./random.c ./version.c ./version.h
1038
1039pattern_LDADD = $(GTK_LIBS) -lm
1040patternpicture_SOURCES = ./malloc.c ./misc.c ./nullfe.c ./puzzles.h \
1041 ./random.c
1042
1043patternpicture_LDADD = libpattern4_a-pattern.$(OBJEXT) -lm
1044patternsolver_SOURCES = ./malloc.c ./misc.c ./nullfe.c ./puzzles.h \
1045 ./random.c
1046
1047patternsolver_LDADD = libpattern2_a-pattern.$(OBJEXT) -lm
1048pearl_SOURCES = ./drawing.c ./dsf.c ./grid.c ./grid.h ./gtk.c ./loopgen.c \
1049 ./loopgen.h ./malloc.c ./midend.c ./misc.c ./no-icon.c \
1050 ./pearl.c ./penrose.c ./penrose.h ./printing.c ./ps.c \
1051 ./puzzles.h ./random.c ./tdq.c ./tree234.c ./tree234.h \
1052 ./version.c ./version.h
1053
1054pearl_LDADD = $(GTK_LIBS) -lm
1055pearlbench_SOURCES = ./dsf.c ./grid.c ./grid.h ./loopgen.c ./loopgen.h \
1056 ./malloc.c ./misc.c ./nullfe.c ./penrose.c ./penrose.h \
1057 ./puzzles.h ./random.c ./tdq.c ./tree234.c ./tree234.h
1058
1059pearlbench_LDADD = libpearl2_a-pearl.$(OBJEXT) -lm
1060pegs_SOURCES = ./drawing.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
1061 ./no-icon.c ./pegs.c ./printing.c ./ps.c ./puzzles.h \
1062 ./random.c ./tree234.c ./tree234.h ./version.c ./version.h
1063
1064pegs_LDADD = $(GTK_LIBS) -lm
1065range_SOURCES = ./drawing.c ./dsf.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
1066 ./no-icon.c ./printing.c ./ps.c ./puzzles.h ./random.c \
1067 ./range.c ./version.c ./version.h
1068
1069range_LDADD = $(GTK_LIBS) -lm
1070rect_SOURCES = ./drawing.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
1071 ./no-icon.c ./printing.c ./ps.c ./puzzles.h ./random.c \
1072 ./rect.c ./version.c ./version.h
1073
1074rect_LDADD = $(GTK_LIBS) -lm
1075samegame_SOURCES = ./drawing.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
1076 ./no-icon.c ./printing.c ./ps.c ./puzzles.h ./random.c \
1077 ./samegame.c ./version.c ./version.h
1078
1079samegame_LDADD = $(GTK_LIBS) -lm
1080signpost_SOURCES = ./drawing.c ./dsf.c ./gtk.c ./malloc.c ./midend.c \
1081 ./misc.c ./no-icon.c ./printing.c ./ps.c ./puzzles.h \
1082 ./random.c ./signpost.c ./version.c ./version.h
1083
1084signpost_LDADD = $(GTK_LIBS) -lm
1085signpostsolver_SOURCES = ./dsf.c ./malloc.c ./misc.c ./nullfe.c ./puzzles.h \
1086 ./random.c
1087
1088signpostsolver_LDADD = libsignpos2_a-signpost.$(OBJEXT) -lm
1089singles_SOURCES = ./drawing.c ./dsf.c ./gtk.c ./latin.c ./latin.h ./malloc.c \
1090 ./maxflow.c ./maxflow.h ./midend.c ./misc.c ./no-icon.c \
1091 ./printing.c ./ps.c ./puzzles.h ./random.c ./singles.c \
1092 ./tree234.c ./tree234.h ./version.c ./version.h
1093
1094singles_LDADD = $(GTK_LIBS) -lm
1095singlessolver_SOURCES = ./dsf.c ./latin.c ./latin.h ./malloc.c ./maxflow.c \
1096 ./maxflow.h ./misc.c ./nullfe.c ./puzzles.h ./random.c \
1097 ./tree234.c ./tree234.h
1098
1099singlessolver_LDADD = libsingles3_a-singles.$(OBJEXT) -lm
1100sixteen_SOURCES = ./drawing.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
1101 ./no-icon.c ./printing.c ./ps.c ./puzzles.h ./random.c \
1102 ./sixteen.c ./version.c ./version.h
1103
1104sixteen_LDADD = $(GTK_LIBS) -lm
1105slant_SOURCES = ./drawing.c ./dsf.c ./findloop.c ./gtk.c ./malloc.c \
1106 ./midend.c ./misc.c ./no-icon.c ./printing.c ./ps.c \
1107 ./puzzles.h ./random.c ./slant.c ./version.c ./version.h
1108
1109slant_LDADD = $(GTK_LIBS) -lm
1110slantsolver_SOURCES = ./dsf.c ./findloop.c ./malloc.c ./misc.c ./nullfe.c \
1111 ./puzzles.h ./random.c
1112
1113slantsolver_LDADD = libslant2_a-slant.$(OBJEXT) -lm
1114solo_SOURCES = ./divvy.c ./drawing.c ./dsf.c ./gtk.c ./malloc.c ./midend.c \
1115 ./misc.c ./no-icon.c ./printing.c ./ps.c ./puzzles.h \
1116 ./random.c ./solo.c ./version.c ./version.h
1117
1118solo_LDADD = $(GTK_LIBS) -lm
1119solosolver_SOURCES = ./divvy.c ./dsf.c ./malloc.c ./misc.c ./nullfe.c \
1120 ./puzzles.h ./random.c
1121
1122solosolver_LDADD = libsolo2_a-solo.$(OBJEXT) -lm
1123tents_SOURCES = ./drawing.c ./dsf.c ./gtk.c ./malloc.c ./maxflow.c \
1124 ./maxflow.h ./midend.c ./misc.c ./no-icon.c ./printing.c \
1125 ./ps.c ./puzzles.h ./random.c ./tents.c ./version.c \
1126 ./version.h
1127
1128tents_LDADD = $(GTK_LIBS) -lm
1129tentssolver_SOURCES = ./dsf.c ./malloc.c ./maxflow.c ./maxflow.h ./misc.c \
1130 ./nullfe.c ./puzzles.h ./random.c
1131
1132tentssolver_LDADD = libtents3_a-tents.$(OBJEXT) -lm
1133towers_SOURCES = ./drawing.c ./gtk.c ./latin.c ./latin.h ./malloc.c \
1134 ./maxflow.c ./maxflow.h ./midend.c ./misc.c ./no-icon.c \
1135 ./printing.c ./ps.c ./puzzles.h ./random.c ./towers.c \
1136 ./tree234.c ./tree234.h ./version.c ./version.h
1137
1138towers_LDADD = $(GTK_LIBS) -lm
1139towerssolver_SOURCES = ./malloc.c ./maxflow.c ./maxflow.h ./misc.c \
1140 ./nullfe.c ./puzzles.h ./random.c ./tree234.c ./tree234.h
1141
1142towerssolver_LDADD = liblatin6_a-latin.$(OBJEXT) \
1143 libtowers2_a-towers.$(OBJEXT) -lm
1144
1145tracks_SOURCES = ./drawing.c ./dsf.c ./findloop.c ./gtk.c ./malloc.c \
1146 ./midend.c ./misc.c ./no-icon.c ./printing.c ./ps.c \
1147 ./puzzles.h ./random.c ./tracks.c ./version.c ./version.h
1148
1149tracks_LDADD = $(GTK_LIBS) -lm
1150twiddle_SOURCES = ./drawing.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
1151 ./no-icon.c ./printing.c ./ps.c ./puzzles.h ./random.c \
1152 ./twiddle.c ./version.c ./version.h
1153
1154twiddle_LDADD = $(GTK_LIBS) -lm
1155undead_SOURCES = ./drawing.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
1156 ./no-icon.c ./printing.c ./ps.c ./puzzles.h ./random.c \
1157 ./undead.c ./version.c ./version.h
1158
1159undead_LDADD = $(GTK_LIBS) -lm
1160unequal_SOURCES = ./drawing.c ./gtk.c ./latin.c ./latin.h ./malloc.c \
1161 ./maxflow.c ./maxflow.h ./midend.c ./misc.c ./no-icon.c \
1162 ./printing.c ./ps.c ./puzzles.h ./random.c ./tree234.c \
1163 ./tree234.h ./unequal.c ./version.c ./version.h
1164
1165unequal_LDADD = $(GTK_LIBS) -lm
1166unequalsolver_SOURCES = ./malloc.c ./maxflow.c ./maxflow.h ./misc.c \
1167 ./nullfe.c ./puzzles.h ./random.c ./tree234.c ./tree234.h
1168
1169unequalsolver_LDADD = liblatin6_a-latin.$(OBJEXT) \
1170 libunequal2_a-unequal.$(OBJEXT) -lm
1171
1172unruly_SOURCES = ./drawing.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
1173 ./no-icon.c ./printing.c ./ps.c ./puzzles.h ./random.c \
1174 ./unruly.c ./version.c ./version.h
1175
1176unruly_LDADD = $(GTK_LIBS) -lm
1177unrulysolver_SOURCES = ./malloc.c ./misc.c ./nullfe.c ./puzzles.h ./random.c
1178unrulysolver_LDADD = libunruly2_a-unruly.$(OBJEXT) -lm
1179untangle_SOURCES = ./drawing.c ./gtk.c ./malloc.c ./midend.c ./misc.c \
1180 ./no-icon.c ./printing.c ./ps.c ./puzzles.h ./random.c \
1181 ./tree234.c ./tree234.h ./untangle.c ./version.c ./version.h
1182
1183untangle_LDADD = $(GTK_LIBS) -lm
1184libfifteen2_a_SOURCES = ./fifteen.c ./puzzles.h
1185libfifteen2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
1186libfilling2_a_SOURCES = ./filling.c ./puzzles.h
1187libfilling2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
1188libgalaxie2_a_SOURCES = ./galaxies.c ./puzzles.h
1189libgalaxie2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
1190libgalaxie4_a_SOURCES = ./galaxies.c ./puzzles.h
1191libgalaxie4_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) \
1192 -DSTANDALONE_PICTURE_GENERATOR
1193
1194libkeen2_a_SOURCES = ./keen.c ./puzzles.h ./latin.h
1195libkeen2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
1196liblatin6_a_SOURCES = ./latin.c ./puzzles.h ./tree234.h ./maxflow.h \
1197 ./latin.h
1198
1199liblatin6_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
1200liblatin8_a_SOURCES = ./latin.c ./puzzles.h ./tree234.h ./maxflow.h \
1201 ./latin.h
1202
1203liblatin8_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_LATIN_TEST
1204liblightup2_a_SOURCES = ./lightup.c ./puzzles.h
1205liblightup2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
1206libloopy2_a_SOURCES = ./loopy.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
1207libloopy2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
1208libmagnets2_a_SOURCES = ./magnets.c ./puzzles.h
1209libmagnets2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
1210libmap2_a_SOURCES = ./map.c ./puzzles.h
1211libmap2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
1212libmines2_a_SOURCES = ./mines.c ./tree234.h ./puzzles.h
1213libmines2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_OBFUSCATOR
1214libpattern2_a_SOURCES = ./pattern.c ./puzzles.h
1215libpattern2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
1216libpattern4_a_SOURCES = ./pattern.c ./puzzles.h
1217libpattern4_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) \
1218 -DSTANDALONE_PICTURE_GENERATOR
1219
1220libpearl2_a_SOURCES = ./pearl.c ./puzzles.h ./grid.h ./loopgen.h
1221libpearl2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
1222libsignpos2_a_SOURCES = ./signpost.c ./puzzles.h
1223libsignpos2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
1224libsingles3_a_SOURCES = ./singles.c ./puzzles.h ./latin.h
1225libsingles3_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
1226libslant2_a_SOURCES = ./slant.c ./puzzles.h
1227libslant2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
1228libsolo2_a_SOURCES = ./solo.c ./puzzles.h
1229libsolo2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
1230libtents3_a_SOURCES = ./tents.c ./puzzles.h ./maxflow.h
1231libtents3_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
1232libtowers2_a_SOURCES = ./towers.c ./puzzles.h ./latin.h
1233libtowers2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
1234libunequal2_a_SOURCES = ./unequal.c ./puzzles.h ./latin.h
1235libunequal2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
1236libunruly2_a_SOURCES = ./unruly.c ./puzzles.h
1237libunruly2_a_CPPFLAGS = $(GTK_CFLAGS) $(WARNINGOPTS) -DSTANDALONE_SOLVER
1238noinst_LIBRARIES = libfifteen2.a libfilling2.a libgalaxie2.a libgalaxie4.a \
1239 libkeen2.a liblatin6.a liblatin8.a liblightup2.a libloopy2.a \
1240 libmagnets2.a libmap2.a libmines2.a libpattern2.a \
1241 libpattern4.a libpearl2.a libsignpos2.a libsingles3.a \
1242 libslant2.a libsolo2.a libtents3.a libtowers2.a \
1243 libunequal2.a libunruly2.a
1244
1245all: all-am
1246
1247.SUFFIXES:
1248.SUFFIXES: .c .o .obj
1249am--refresh: Makefile
1250 @:
1251$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
1252 @for dep in $?; do \
1253 case '$(am__configure_deps)' in \
1254 *$$dep*) \
1255 echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
1256 $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
1257 && exit 0; \
1258 exit 1;; \
1259 esac; \
1260 done; \
1261 echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
1262 $(am__cd) $(top_srcdir) && \
1263 $(AUTOMAKE) --foreign Makefile
1264Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
1265 @case '$?' in \
1266 *config.status*) \
1267 echo ' $(SHELL) ./config.status'; \
1268 $(SHELL) ./config.status;; \
1269 *) \
1270 echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
1271 cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
1272 esac;
1273
1274$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
1275 $(SHELL) ./config.status --recheck
1276
1277$(top_srcdir)/configure: $(am__configure_deps)
1278 $(am__cd) $(srcdir) && $(AUTOCONF)
1279$(ACLOCAL_M4): $(am__aclocal_m4_deps)
1280 $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
1281$(am__aclocal_m4_deps):
1282
1283clean-noinstLIBRARIES:
1284 -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
1285./$(am__dirstamp):
1286 @$(MKDIR_P) .
1287 @: > ./$(am__dirstamp)
1288$(DEPDIR)/$(am__dirstamp):
1289 @$(MKDIR_P) ./$(DEPDIR)
1290 @: > $(DEPDIR)/$(am__dirstamp)
1291./libfifteen2_a-fifteen.$(OBJEXT): ./$(am__dirstamp) \
1292 $(DEPDIR)/$(am__dirstamp)
1293
1294libfifteen2.a: $(libfifteen2_a_OBJECTS) $(libfifteen2_a_DEPENDENCIES) $(EXTRA_libfifteen2_a_DEPENDENCIES)
1295 $(AM_V_at)-rm -f libfifteen2.a
1296 $(AM_V_AR)$(libfifteen2_a_AR) libfifteen2.a $(libfifteen2_a_OBJECTS) $(libfifteen2_a_LIBADD)
1297 $(AM_V_at)$(RANLIB) libfifteen2.a
1298./libfilling2_a-filling.$(OBJEXT): ./$(am__dirstamp) \
1299 $(DEPDIR)/$(am__dirstamp)
1300
1301libfilling2.a: $(libfilling2_a_OBJECTS) $(libfilling2_a_DEPENDENCIES) $(EXTRA_libfilling2_a_DEPENDENCIES)
1302 $(AM_V_at)-rm -f libfilling2.a
1303 $(AM_V_AR)$(libfilling2_a_AR) libfilling2.a $(libfilling2_a_OBJECTS) $(libfilling2_a_LIBADD)
1304 $(AM_V_at)$(RANLIB) libfilling2.a
1305./libgalaxie2_a-galaxies.$(OBJEXT): ./$(am__dirstamp) \
1306 $(DEPDIR)/$(am__dirstamp)
1307
1308libgalaxie2.a: $(libgalaxie2_a_OBJECTS) $(libgalaxie2_a_DEPENDENCIES) $(EXTRA_libgalaxie2_a_DEPENDENCIES)
1309 $(AM_V_at)-rm -f libgalaxie2.a
1310 $(AM_V_AR)$(libgalaxie2_a_AR) libgalaxie2.a $(libgalaxie2_a_OBJECTS) $(libgalaxie2_a_LIBADD)
1311 $(AM_V_at)$(RANLIB) libgalaxie2.a
1312./libgalaxie4_a-galaxies.$(OBJEXT): ./$(am__dirstamp) \
1313 $(DEPDIR)/$(am__dirstamp)
1314
1315libgalaxie4.a: $(libgalaxie4_a_OBJECTS) $(libgalaxie4_a_DEPENDENCIES) $(EXTRA_libgalaxie4_a_DEPENDENCIES)
1316 $(AM_V_at)-rm -f libgalaxie4.a
1317 $(AM_V_AR)$(libgalaxie4_a_AR) libgalaxie4.a $(libgalaxie4_a_OBJECTS) $(libgalaxie4_a_LIBADD)
1318 $(AM_V_at)$(RANLIB) libgalaxie4.a
1319./libkeen2_a-keen.$(OBJEXT): ./$(am__dirstamp) \
1320 $(DEPDIR)/$(am__dirstamp)
1321
1322libkeen2.a: $(libkeen2_a_OBJECTS) $(libkeen2_a_DEPENDENCIES) $(EXTRA_libkeen2_a_DEPENDENCIES)
1323 $(AM_V_at)-rm -f libkeen2.a
1324 $(AM_V_AR)$(libkeen2_a_AR) libkeen2.a $(libkeen2_a_OBJECTS) $(libkeen2_a_LIBADD)
1325 $(AM_V_at)$(RANLIB) libkeen2.a
1326./liblatin6_a-latin.$(OBJEXT): ./$(am__dirstamp) \
1327 $(DEPDIR)/$(am__dirstamp)
1328
1329liblatin6.a: $(liblatin6_a_OBJECTS) $(liblatin6_a_DEPENDENCIES) $(EXTRA_liblatin6_a_DEPENDENCIES)
1330 $(AM_V_at)-rm -f liblatin6.a
1331 $(AM_V_AR)$(liblatin6_a_AR) liblatin6.a $(liblatin6_a_OBJECTS) $(liblatin6_a_LIBADD)
1332 $(AM_V_at)$(RANLIB) liblatin6.a
1333./liblatin8_a-latin.$(OBJEXT): ./$(am__dirstamp) \
1334 $(DEPDIR)/$(am__dirstamp)
1335
1336liblatin8.a: $(liblatin8_a_OBJECTS) $(liblatin8_a_DEPENDENCIES) $(EXTRA_liblatin8_a_DEPENDENCIES)
1337 $(AM_V_at)-rm -f liblatin8.a
1338 $(AM_V_AR)$(liblatin8_a_AR) liblatin8.a $(liblatin8_a_OBJECTS) $(liblatin8_a_LIBADD)
1339 $(AM_V_at)$(RANLIB) liblatin8.a
1340./liblightup2_a-lightup.$(OBJEXT): ./$(am__dirstamp) \
1341 $(DEPDIR)/$(am__dirstamp)
1342
1343liblightup2.a: $(liblightup2_a_OBJECTS) $(liblightup2_a_DEPENDENCIES) $(EXTRA_liblightup2_a_DEPENDENCIES)
1344 $(AM_V_at)-rm -f liblightup2.a
1345 $(AM_V_AR)$(liblightup2_a_AR) liblightup2.a $(liblightup2_a_OBJECTS) $(liblightup2_a_LIBADD)
1346 $(AM_V_at)$(RANLIB) liblightup2.a
1347./libloopy2_a-loopy.$(OBJEXT): ./$(am__dirstamp) \
1348 $(DEPDIR)/$(am__dirstamp)
1349
1350libloopy2.a: $(libloopy2_a_OBJECTS) $(libloopy2_a_DEPENDENCIES) $(EXTRA_libloopy2_a_DEPENDENCIES)
1351 $(AM_V_at)-rm -f libloopy2.a
1352 $(AM_V_AR)$(libloopy2_a_AR) libloopy2.a $(libloopy2_a_OBJECTS) $(libloopy2_a_LIBADD)
1353 $(AM_V_at)$(RANLIB) libloopy2.a
1354./libmagnets2_a-magnets.$(OBJEXT): ./$(am__dirstamp) \
1355 $(DEPDIR)/$(am__dirstamp)
1356
1357libmagnets2.a: $(libmagnets2_a_OBJECTS) $(libmagnets2_a_DEPENDENCIES) $(EXTRA_libmagnets2_a_DEPENDENCIES)
1358 $(AM_V_at)-rm -f libmagnets2.a
1359 $(AM_V_AR)$(libmagnets2_a_AR) libmagnets2.a $(libmagnets2_a_OBJECTS) $(libmagnets2_a_LIBADD)
1360 $(AM_V_at)$(RANLIB) libmagnets2.a
1361./libmap2_a-map.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1362
1363libmap2.a: $(libmap2_a_OBJECTS) $(libmap2_a_DEPENDENCIES) $(EXTRA_libmap2_a_DEPENDENCIES)
1364 $(AM_V_at)-rm -f libmap2.a
1365 $(AM_V_AR)$(libmap2_a_AR) libmap2.a $(libmap2_a_OBJECTS) $(libmap2_a_LIBADD)
1366 $(AM_V_at)$(RANLIB) libmap2.a
1367./libmines2_a-mines.$(OBJEXT): ./$(am__dirstamp) \
1368 $(DEPDIR)/$(am__dirstamp)
1369
1370libmines2.a: $(libmines2_a_OBJECTS) $(libmines2_a_DEPENDENCIES) $(EXTRA_libmines2_a_DEPENDENCIES)
1371 $(AM_V_at)-rm -f libmines2.a
1372 $(AM_V_AR)$(libmines2_a_AR) libmines2.a $(libmines2_a_OBJECTS) $(libmines2_a_LIBADD)
1373 $(AM_V_at)$(RANLIB) libmines2.a
1374./libpattern2_a-pattern.$(OBJEXT): ./$(am__dirstamp) \
1375 $(DEPDIR)/$(am__dirstamp)
1376
1377libpattern2.a: $(libpattern2_a_OBJECTS) $(libpattern2_a_DEPENDENCIES) $(EXTRA_libpattern2_a_DEPENDENCIES)
1378 $(AM_V_at)-rm -f libpattern2.a
1379 $(AM_V_AR)$(libpattern2_a_AR) libpattern2.a $(libpattern2_a_OBJECTS) $(libpattern2_a_LIBADD)
1380 $(AM_V_at)$(RANLIB) libpattern2.a
1381./libpattern4_a-pattern.$(OBJEXT): ./$(am__dirstamp) \
1382 $(DEPDIR)/$(am__dirstamp)
1383
1384libpattern4.a: $(libpattern4_a_OBJECTS) $(libpattern4_a_DEPENDENCIES) $(EXTRA_libpattern4_a_DEPENDENCIES)
1385 $(AM_V_at)-rm -f libpattern4.a
1386 $(AM_V_AR)$(libpattern4_a_AR) libpattern4.a $(libpattern4_a_OBJECTS) $(libpattern4_a_LIBADD)
1387 $(AM_V_at)$(RANLIB) libpattern4.a
1388./libpearl2_a-pearl.$(OBJEXT): ./$(am__dirstamp) \
1389 $(DEPDIR)/$(am__dirstamp)
1390
1391libpearl2.a: $(libpearl2_a_OBJECTS) $(libpearl2_a_DEPENDENCIES) $(EXTRA_libpearl2_a_DEPENDENCIES)
1392 $(AM_V_at)-rm -f libpearl2.a
1393 $(AM_V_AR)$(libpearl2_a_AR) libpearl2.a $(libpearl2_a_OBJECTS) $(libpearl2_a_LIBADD)
1394 $(AM_V_at)$(RANLIB) libpearl2.a
1395./libsignpos2_a-signpost.$(OBJEXT): ./$(am__dirstamp) \
1396 $(DEPDIR)/$(am__dirstamp)
1397
1398libsignpos2.a: $(libsignpos2_a_OBJECTS) $(libsignpos2_a_DEPENDENCIES) $(EXTRA_libsignpos2_a_DEPENDENCIES)
1399 $(AM_V_at)-rm -f libsignpos2.a
1400 $(AM_V_AR)$(libsignpos2_a_AR) libsignpos2.a $(libsignpos2_a_OBJECTS) $(libsignpos2_a_LIBADD)
1401 $(AM_V_at)$(RANLIB) libsignpos2.a
1402./libsingles3_a-singles.$(OBJEXT): ./$(am__dirstamp) \
1403 $(DEPDIR)/$(am__dirstamp)
1404
1405libsingles3.a: $(libsingles3_a_OBJECTS) $(libsingles3_a_DEPENDENCIES) $(EXTRA_libsingles3_a_DEPENDENCIES)
1406 $(AM_V_at)-rm -f libsingles3.a
1407 $(AM_V_AR)$(libsingles3_a_AR) libsingles3.a $(libsingles3_a_OBJECTS) $(libsingles3_a_LIBADD)
1408 $(AM_V_at)$(RANLIB) libsingles3.a
1409./libslant2_a-slant.$(OBJEXT): ./$(am__dirstamp) \
1410 $(DEPDIR)/$(am__dirstamp)
1411
1412libslant2.a: $(libslant2_a_OBJECTS) $(libslant2_a_DEPENDENCIES) $(EXTRA_libslant2_a_DEPENDENCIES)
1413 $(AM_V_at)-rm -f libslant2.a
1414 $(AM_V_AR)$(libslant2_a_AR) libslant2.a $(libslant2_a_OBJECTS) $(libslant2_a_LIBADD)
1415 $(AM_V_at)$(RANLIB) libslant2.a
1416./libsolo2_a-solo.$(OBJEXT): ./$(am__dirstamp) \
1417 $(DEPDIR)/$(am__dirstamp)
1418
1419libsolo2.a: $(libsolo2_a_OBJECTS) $(libsolo2_a_DEPENDENCIES) $(EXTRA_libsolo2_a_DEPENDENCIES)
1420 $(AM_V_at)-rm -f libsolo2.a
1421 $(AM_V_AR)$(libsolo2_a_AR) libsolo2.a $(libsolo2_a_OBJECTS) $(libsolo2_a_LIBADD)
1422 $(AM_V_at)$(RANLIB) libsolo2.a
1423./libtents3_a-tents.$(OBJEXT): ./$(am__dirstamp) \
1424 $(DEPDIR)/$(am__dirstamp)
1425
1426libtents3.a: $(libtents3_a_OBJECTS) $(libtents3_a_DEPENDENCIES) $(EXTRA_libtents3_a_DEPENDENCIES)
1427 $(AM_V_at)-rm -f libtents3.a
1428 $(AM_V_AR)$(libtents3_a_AR) libtents3.a $(libtents3_a_OBJECTS) $(libtents3_a_LIBADD)
1429 $(AM_V_at)$(RANLIB) libtents3.a
1430./libtowers2_a-towers.$(OBJEXT): ./$(am__dirstamp) \
1431 $(DEPDIR)/$(am__dirstamp)
1432
1433libtowers2.a: $(libtowers2_a_OBJECTS) $(libtowers2_a_DEPENDENCIES) $(EXTRA_libtowers2_a_DEPENDENCIES)
1434 $(AM_V_at)-rm -f libtowers2.a
1435 $(AM_V_AR)$(libtowers2_a_AR) libtowers2.a $(libtowers2_a_OBJECTS) $(libtowers2_a_LIBADD)
1436 $(AM_V_at)$(RANLIB) libtowers2.a
1437./libunequal2_a-unequal.$(OBJEXT): ./$(am__dirstamp) \
1438 $(DEPDIR)/$(am__dirstamp)
1439
1440libunequal2.a: $(libunequal2_a_OBJECTS) $(libunequal2_a_DEPENDENCIES) $(EXTRA_libunequal2_a_DEPENDENCIES)
1441 $(AM_V_at)-rm -f libunequal2.a
1442 $(AM_V_AR)$(libunequal2_a_AR) libunequal2.a $(libunequal2_a_OBJECTS) $(libunequal2_a_LIBADD)
1443 $(AM_V_at)$(RANLIB) libunequal2.a
1444./libunruly2_a-unruly.$(OBJEXT): ./$(am__dirstamp) \
1445 $(DEPDIR)/$(am__dirstamp)
1446
1447libunruly2.a: $(libunruly2_a_OBJECTS) $(libunruly2_a_DEPENDENCIES) $(EXTRA_libunruly2_a_DEPENDENCIES)
1448 $(AM_V_at)-rm -f libunruly2.a
1449 $(AM_V_AR)$(libunruly2_a_AR) libunruly2.a $(libunruly2_a_OBJECTS) $(libunruly2_a_LIBADD)
1450 $(AM_V_at)$(RANLIB) libunruly2.a
1451install-binPROGRAMS: $(bin_PROGRAMS)
1452 @$(NORMAL_INSTALL)
1453 @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
1454 if test -n "$$list"; then \
1455 echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
1456 $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
1457 fi; \
1458 for p in $$list; do echo "$$p $$p"; done | \
1459 sed 's/$(EXEEXT)$$//' | \
1460 while read p p1; do if test -f $$p \
1461 ; then echo "$$p"; echo "$$p"; else :; fi; \
1462 done | \
1463 sed -e 'p;s,.*/,,;n;h' \
1464 -e 's|.*|.|' \
1465 -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
1466 sed 'N;N;N;s,\n, ,g' | \
1467 $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
1468 { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
1469 if ($$2 == $$4) files[d] = files[d] " " $$1; \
1470 else { print "f", $$3 "/" $$4, $$1; } } \
1471 END { for (d in files) print "f", d, files[d] }' | \
1472 while read type dir files; do \
1473 if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
1474 test -z "$$files" || { \
1475 echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
1476 $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
1477 } \
1478 ; done
1479
1480uninstall-binPROGRAMS:
1481 @$(NORMAL_UNINSTALL)
1482 @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
1483 files=`for p in $$list; do echo "$$p"; done | \
1484 sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
1485 -e 's/$$/$(EXEEXT)/' \
1486 `; \
1487 test -n "$$list" || exit 0; \
1488 echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
1489 cd "$(DESTDIR)$(bindir)" && rm -f $$files
1490
1491clean-binPROGRAMS:
1492 -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
1493
1494clean-noinstPROGRAMS:
1495 -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
1496./blackbox.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1497./drawing.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1498./gtk.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1499./malloc.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1500./midend.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1501./misc.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1502./no-icon.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1503./printing.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1504./ps.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1505./random.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1506./version.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1507
1508blackbox$(EXEEXT): $(blackbox_OBJECTS) $(blackbox_DEPENDENCIES) $(EXTRA_blackbox_DEPENDENCIES)
1509 @rm -f blackbox$(EXEEXT)
1510 $(AM_V_CCLD)$(LINK) $(blackbox_OBJECTS) $(blackbox_LDADD) $(LIBS)
1511./bridges.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1512./dsf.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1513./findloop.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1514
1515bridges$(EXEEXT): $(bridges_OBJECTS) $(bridges_DEPENDENCIES) $(EXTRA_bridges_DEPENDENCIES)
1516 @rm -f bridges$(EXEEXT)
1517 $(AM_V_CCLD)$(LINK) $(bridges_OBJECTS) $(bridges_LDADD) $(LIBS)
1518./cube.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1519
1520cube$(EXEEXT): $(cube_OBJECTS) $(cube_DEPENDENCIES) $(EXTRA_cube_DEPENDENCIES)
1521 @rm -f cube$(EXEEXT)
1522 $(AM_V_CCLD)$(LINK) $(cube_OBJECTS) $(cube_LDADD) $(LIBS)
1523./dominosa.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1524./laydomino.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1525
1526dominosa$(EXEEXT): $(dominosa_OBJECTS) $(dominosa_DEPENDENCIES) $(EXTRA_dominosa_DEPENDENCIES)
1527 @rm -f dominosa$(EXEEXT)
1528 $(AM_V_CCLD)$(LINK) $(dominosa_OBJECTS) $(dominosa_LDADD) $(LIBS)
1529./fifteen.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1530
1531fifteen$(EXEEXT): $(fifteen_OBJECTS) $(fifteen_DEPENDENCIES) $(EXTRA_fifteen_DEPENDENCIES)
1532 @rm -f fifteen$(EXEEXT)
1533 $(AM_V_CCLD)$(LINK) $(fifteen_OBJECTS) $(fifteen_LDADD) $(LIBS)
1534./nullfe.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1535
1536fifteensolver$(EXEEXT): $(fifteensolver_OBJECTS) $(fifteensolver_DEPENDENCIES) $(EXTRA_fifteensolver_DEPENDENCIES)
1537 @rm -f fifteensolver$(EXEEXT)
1538 $(AM_V_CCLD)$(LINK) $(fifteensolver_OBJECTS) $(fifteensolver_LDADD) $(LIBS)
1539./filling.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1540
1541filling$(EXEEXT): $(filling_OBJECTS) $(filling_DEPENDENCIES) $(EXTRA_filling_DEPENDENCIES)
1542 @rm -f filling$(EXEEXT)
1543 $(AM_V_CCLD)$(LINK) $(filling_OBJECTS) $(filling_LDADD) $(LIBS)
1544
1545fillingsolver$(EXEEXT): $(fillingsolver_OBJECTS) $(fillingsolver_DEPENDENCIES) $(EXTRA_fillingsolver_DEPENDENCIES)
1546 @rm -f fillingsolver$(EXEEXT)
1547 $(AM_V_CCLD)$(LINK) $(fillingsolver_OBJECTS) $(fillingsolver_LDADD) $(LIBS)
1548./flip.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1549./tree234.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1550
1551flip$(EXEEXT): $(flip_OBJECTS) $(flip_DEPENDENCIES) $(EXTRA_flip_DEPENDENCIES)
1552 @rm -f flip$(EXEEXT)
1553 $(AM_V_CCLD)$(LINK) $(flip_OBJECTS) $(flip_LDADD) $(LIBS)
1554./flood.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1555
1556flood$(EXEEXT): $(flood_OBJECTS) $(flood_DEPENDENCIES) $(EXTRA_flood_DEPENDENCIES)
1557 @rm -f flood$(EXEEXT)
1558 $(AM_V_CCLD)$(LINK) $(flood_OBJECTS) $(flood_LDADD) $(LIBS)
1559./galaxies.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1560
1561galaxies$(EXEEXT): $(galaxies_OBJECTS) $(galaxies_DEPENDENCIES) $(EXTRA_galaxies_DEPENDENCIES)
1562 @rm -f galaxies$(EXEEXT)
1563 $(AM_V_CCLD)$(LINK) $(galaxies_OBJECTS) $(galaxies_LDADD) $(LIBS)
1564
1565galaxiespicture$(EXEEXT): $(galaxiespicture_OBJECTS) $(galaxiespicture_DEPENDENCIES) $(EXTRA_galaxiespicture_DEPENDENCIES)
1566 @rm -f galaxiespicture$(EXEEXT)
1567 $(AM_V_CCLD)$(LINK) $(galaxiespicture_OBJECTS) $(galaxiespicture_LDADD) $(LIBS)
1568
1569galaxiessolver$(EXEEXT): $(galaxiessolver_OBJECTS) $(galaxiessolver_DEPENDENCIES) $(EXTRA_galaxiessolver_DEPENDENCIES)
1570 @rm -f galaxiessolver$(EXEEXT)
1571 $(AM_V_CCLD)$(LINK) $(galaxiessolver_OBJECTS) $(galaxiessolver_LDADD) $(LIBS)
1572./guess.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1573
1574guess$(EXEEXT): $(guess_OBJECTS) $(guess_DEPENDENCIES) $(EXTRA_guess_DEPENDENCIES)
1575 @rm -f guess$(EXEEXT)
1576 $(AM_V_CCLD)$(LINK) $(guess_OBJECTS) $(guess_LDADD) $(LIBS)
1577./inertia.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1578
1579inertia$(EXEEXT): $(inertia_OBJECTS) $(inertia_DEPENDENCIES) $(EXTRA_inertia_DEPENDENCIES)
1580 @rm -f inertia$(EXEEXT)
1581 $(AM_V_CCLD)$(LINK) $(inertia_OBJECTS) $(inertia_LDADD) $(LIBS)
1582./keen.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1583./latin.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1584./maxflow.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1585
1586keen$(EXEEXT): $(keen_OBJECTS) $(keen_DEPENDENCIES) $(EXTRA_keen_DEPENDENCIES)
1587 @rm -f keen$(EXEEXT)
1588 $(AM_V_CCLD)$(LINK) $(keen_OBJECTS) $(keen_LDADD) $(LIBS)
1589
1590keensolver$(EXEEXT): $(keensolver_OBJECTS) $(keensolver_DEPENDENCIES) $(EXTRA_keensolver_DEPENDENCIES)
1591 @rm -f keensolver$(EXEEXT)
1592 $(AM_V_CCLD)$(LINK) $(keensolver_OBJECTS) $(keensolver_LDADD) $(LIBS)
1593
1594latincheck$(EXEEXT): $(latincheck_OBJECTS) $(latincheck_DEPENDENCIES) $(EXTRA_latincheck_DEPENDENCIES)
1595 @rm -f latincheck$(EXEEXT)
1596 $(AM_V_CCLD)$(LINK) $(latincheck_OBJECTS) $(latincheck_LDADD) $(LIBS)
1597./combi.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1598./lightup.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1599
1600lightup$(EXEEXT): $(lightup_OBJECTS) $(lightup_DEPENDENCIES) $(EXTRA_lightup_DEPENDENCIES)
1601 @rm -f lightup$(EXEEXT)
1602 $(AM_V_CCLD)$(LINK) $(lightup_OBJECTS) $(lightup_LDADD) $(LIBS)
1603
1604lightupsolver$(EXEEXT): $(lightupsolver_OBJECTS) $(lightupsolver_DEPENDENCIES) $(EXTRA_lightupsolver_DEPENDENCIES)
1605 @rm -f lightupsolver$(EXEEXT)
1606 $(AM_V_CCLD)$(LINK) $(lightupsolver_OBJECTS) $(lightupsolver_LDADD) $(LIBS)
1607./grid.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1608./loopgen.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1609./loopy.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1610./penrose.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1611
1612loopy$(EXEEXT): $(loopy_OBJECTS) $(loopy_DEPENDENCIES) $(EXTRA_loopy_DEPENDENCIES)
1613 @rm -f loopy$(EXEEXT)
1614 $(AM_V_CCLD)$(LINK) $(loopy_OBJECTS) $(loopy_LDADD) $(LIBS)
1615
1616loopysolver$(EXEEXT): $(loopysolver_OBJECTS) $(loopysolver_DEPENDENCIES) $(EXTRA_loopysolver_DEPENDENCIES)
1617 @rm -f loopysolver$(EXEEXT)
1618 $(AM_V_CCLD)$(LINK) $(loopysolver_OBJECTS) $(loopysolver_LDADD) $(LIBS)
1619./magnets.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1620
1621magnets$(EXEEXT): $(magnets_OBJECTS) $(magnets_DEPENDENCIES) $(EXTRA_magnets_DEPENDENCIES)
1622 @rm -f magnets$(EXEEXT)
1623 $(AM_V_CCLD)$(LINK) $(magnets_OBJECTS) $(magnets_LDADD) $(LIBS)
1624
1625magnetssolver$(EXEEXT): $(magnetssolver_OBJECTS) $(magnetssolver_DEPENDENCIES) $(EXTRA_magnetssolver_DEPENDENCIES)
1626 @rm -f magnetssolver$(EXEEXT)
1627 $(AM_V_CCLD)$(LINK) $(magnetssolver_OBJECTS) $(magnetssolver_LDADD) $(LIBS)
1628./map.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1629
1630map$(EXEEXT): $(map_OBJECTS) $(map_DEPENDENCIES) $(EXTRA_map_DEPENDENCIES)
1631 @rm -f map$(EXEEXT)
1632 $(AM_V_CCLD)$(LINK) $(map_OBJECTS) $(map_LDADD) $(LIBS)
1633
1634mapsolver$(EXEEXT): $(mapsolver_OBJECTS) $(mapsolver_DEPENDENCIES) $(EXTRA_mapsolver_DEPENDENCIES)
1635 @rm -f mapsolver$(EXEEXT)
1636 $(AM_V_CCLD)$(LINK) $(mapsolver_OBJECTS) $(mapsolver_LDADD) $(LIBS)
1637
1638mineobfusc$(EXEEXT): $(mineobfusc_OBJECTS) $(mineobfusc_DEPENDENCIES) $(EXTRA_mineobfusc_DEPENDENCIES)
1639 @rm -f mineobfusc$(EXEEXT)
1640 $(AM_V_CCLD)$(LINK) $(mineobfusc_OBJECTS) $(mineobfusc_LDADD) $(LIBS)
1641./mines.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1642
1643mines$(EXEEXT): $(mines_OBJECTS) $(mines_DEPENDENCIES) $(EXTRA_mines_DEPENDENCIES)
1644 @rm -f mines$(EXEEXT)
1645 $(AM_V_CCLD)$(LINK) $(mines_OBJECTS) $(mines_LDADD) $(LIBS)
1646./net.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1647
1648net$(EXEEXT): $(net_OBJECTS) $(net_DEPENDENCIES) $(EXTRA_net_DEPENDENCIES)
1649 @rm -f net$(EXEEXT)
1650 $(AM_V_CCLD)$(LINK) $(net_OBJECTS) $(net_LDADD) $(LIBS)
1651./netslide.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1652
1653netslide$(EXEEXT): $(netslide_OBJECTS) $(netslide_DEPENDENCIES) $(EXTRA_netslide_DEPENDENCIES)
1654 @rm -f netslide$(EXEEXT)
1655 $(AM_V_CCLD)$(LINK) $(netslide_OBJECTS) $(netslide_LDADD) $(LIBS)
1656./nullgame.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1657
1658nullgame$(EXEEXT): $(nullgame_OBJECTS) $(nullgame_DEPENDENCIES) $(EXTRA_nullgame_DEPENDENCIES)
1659 @rm -f nullgame$(EXEEXT)
1660 $(AM_V_CCLD)$(LINK) $(nullgame_OBJECTS) $(nullgame_LDADD) $(LIBS)
1661./obfusc.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1662
1663obfusc$(EXEEXT): $(obfusc_OBJECTS) $(obfusc_DEPENDENCIES) $(EXTRA_obfusc_DEPENDENCIES)
1664 @rm -f obfusc$(EXEEXT)
1665 $(AM_V_CCLD)$(LINK) $(obfusc_OBJECTS) $(obfusc_LDADD) $(LIBS)
1666./divvy.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1667./palisade.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1668
1669palisade$(EXEEXT): $(palisade_OBJECTS) $(palisade_DEPENDENCIES) $(EXTRA_palisade_DEPENDENCIES)
1670 @rm -f palisade$(EXEEXT)
1671 $(AM_V_CCLD)$(LINK) $(palisade_OBJECTS) $(palisade_LDADD) $(LIBS)
1672./pattern.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1673
1674pattern$(EXEEXT): $(pattern_OBJECTS) $(pattern_DEPENDENCIES) $(EXTRA_pattern_DEPENDENCIES)
1675 @rm -f pattern$(EXEEXT)
1676 $(AM_V_CCLD)$(LINK) $(pattern_OBJECTS) $(pattern_LDADD) $(LIBS)
1677
1678patternpicture$(EXEEXT): $(patternpicture_OBJECTS) $(patternpicture_DEPENDENCIES) $(EXTRA_patternpicture_DEPENDENCIES)
1679 @rm -f patternpicture$(EXEEXT)
1680 $(AM_V_CCLD)$(LINK) $(patternpicture_OBJECTS) $(patternpicture_LDADD) $(LIBS)
1681
1682patternsolver$(EXEEXT): $(patternsolver_OBJECTS) $(patternsolver_DEPENDENCIES) $(EXTRA_patternsolver_DEPENDENCIES)
1683 @rm -f patternsolver$(EXEEXT)
1684 $(AM_V_CCLD)$(LINK) $(patternsolver_OBJECTS) $(patternsolver_LDADD) $(LIBS)
1685./pearl.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1686./tdq.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1687
1688pearl$(EXEEXT): $(pearl_OBJECTS) $(pearl_DEPENDENCIES) $(EXTRA_pearl_DEPENDENCIES)
1689 @rm -f pearl$(EXEEXT)
1690 $(AM_V_CCLD)$(LINK) $(pearl_OBJECTS) $(pearl_LDADD) $(LIBS)
1691
1692pearlbench$(EXEEXT): $(pearlbench_OBJECTS) $(pearlbench_DEPENDENCIES) $(EXTRA_pearlbench_DEPENDENCIES)
1693 @rm -f pearlbench$(EXEEXT)
1694 $(AM_V_CCLD)$(LINK) $(pearlbench_OBJECTS) $(pearlbench_LDADD) $(LIBS)
1695./pegs.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1696
1697pegs$(EXEEXT): $(pegs_OBJECTS) $(pegs_DEPENDENCIES) $(EXTRA_pegs_DEPENDENCIES)
1698 @rm -f pegs$(EXEEXT)
1699 $(AM_V_CCLD)$(LINK) $(pegs_OBJECTS) $(pegs_LDADD) $(LIBS)
1700./range.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1701
1702range$(EXEEXT): $(range_OBJECTS) $(range_DEPENDENCIES) $(EXTRA_range_DEPENDENCIES)
1703 @rm -f range$(EXEEXT)
1704 $(AM_V_CCLD)$(LINK) $(range_OBJECTS) $(range_LDADD) $(LIBS)
1705./rect.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1706
1707rect$(EXEEXT): $(rect_OBJECTS) $(rect_DEPENDENCIES) $(EXTRA_rect_DEPENDENCIES)
1708 @rm -f rect$(EXEEXT)
1709 $(AM_V_CCLD)$(LINK) $(rect_OBJECTS) $(rect_LDADD) $(LIBS)
1710./samegame.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1711
1712samegame$(EXEEXT): $(samegame_OBJECTS) $(samegame_DEPENDENCIES) $(EXTRA_samegame_DEPENDENCIES)
1713 @rm -f samegame$(EXEEXT)
1714 $(AM_V_CCLD)$(LINK) $(samegame_OBJECTS) $(samegame_LDADD) $(LIBS)
1715./signpost.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1716
1717signpost$(EXEEXT): $(signpost_OBJECTS) $(signpost_DEPENDENCIES) $(EXTRA_signpost_DEPENDENCIES)
1718 @rm -f signpost$(EXEEXT)
1719 $(AM_V_CCLD)$(LINK) $(signpost_OBJECTS) $(signpost_LDADD) $(LIBS)
1720
1721signpostsolver$(EXEEXT): $(signpostsolver_OBJECTS) $(signpostsolver_DEPENDENCIES) $(EXTRA_signpostsolver_DEPENDENCIES)
1722 @rm -f signpostsolver$(EXEEXT)
1723 $(AM_V_CCLD)$(LINK) $(signpostsolver_OBJECTS) $(signpostsolver_LDADD) $(LIBS)
1724./singles.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1725
1726singles$(EXEEXT): $(singles_OBJECTS) $(singles_DEPENDENCIES) $(EXTRA_singles_DEPENDENCIES)
1727 @rm -f singles$(EXEEXT)
1728 $(AM_V_CCLD)$(LINK) $(singles_OBJECTS) $(singles_LDADD) $(LIBS)
1729
1730singlessolver$(EXEEXT): $(singlessolver_OBJECTS) $(singlessolver_DEPENDENCIES) $(EXTRA_singlessolver_DEPENDENCIES)
1731 @rm -f singlessolver$(EXEEXT)
1732 $(AM_V_CCLD)$(LINK) $(singlessolver_OBJECTS) $(singlessolver_LDADD) $(LIBS)
1733./sixteen.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1734
1735sixteen$(EXEEXT): $(sixteen_OBJECTS) $(sixteen_DEPENDENCIES) $(EXTRA_sixteen_DEPENDENCIES)
1736 @rm -f sixteen$(EXEEXT)
1737 $(AM_V_CCLD)$(LINK) $(sixteen_OBJECTS) $(sixteen_LDADD) $(LIBS)
1738./slant.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1739
1740slant$(EXEEXT): $(slant_OBJECTS) $(slant_DEPENDENCIES) $(EXTRA_slant_DEPENDENCIES)
1741 @rm -f slant$(EXEEXT)
1742 $(AM_V_CCLD)$(LINK) $(slant_OBJECTS) $(slant_LDADD) $(LIBS)
1743
1744slantsolver$(EXEEXT): $(slantsolver_OBJECTS) $(slantsolver_DEPENDENCIES) $(EXTRA_slantsolver_DEPENDENCIES)
1745 @rm -f slantsolver$(EXEEXT)
1746 $(AM_V_CCLD)$(LINK) $(slantsolver_OBJECTS) $(slantsolver_LDADD) $(LIBS)
1747./solo.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1748
1749solo$(EXEEXT): $(solo_OBJECTS) $(solo_DEPENDENCIES) $(EXTRA_solo_DEPENDENCIES)
1750 @rm -f solo$(EXEEXT)
1751 $(AM_V_CCLD)$(LINK) $(solo_OBJECTS) $(solo_LDADD) $(LIBS)
1752
1753solosolver$(EXEEXT): $(solosolver_OBJECTS) $(solosolver_DEPENDENCIES) $(EXTRA_solosolver_DEPENDENCIES)
1754 @rm -f solosolver$(EXEEXT)
1755 $(AM_V_CCLD)$(LINK) $(solosolver_OBJECTS) $(solosolver_LDADD) $(LIBS)
1756./tents.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1757
1758tents$(EXEEXT): $(tents_OBJECTS) $(tents_DEPENDENCIES) $(EXTRA_tents_DEPENDENCIES)
1759 @rm -f tents$(EXEEXT)
1760 $(AM_V_CCLD)$(LINK) $(tents_OBJECTS) $(tents_LDADD) $(LIBS)
1761
1762tentssolver$(EXEEXT): $(tentssolver_OBJECTS) $(tentssolver_DEPENDENCIES) $(EXTRA_tentssolver_DEPENDENCIES)
1763 @rm -f tentssolver$(EXEEXT)
1764 $(AM_V_CCLD)$(LINK) $(tentssolver_OBJECTS) $(tentssolver_LDADD) $(LIBS)
1765./towers.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1766
1767towers$(EXEEXT): $(towers_OBJECTS) $(towers_DEPENDENCIES) $(EXTRA_towers_DEPENDENCIES)
1768 @rm -f towers$(EXEEXT)
1769 $(AM_V_CCLD)$(LINK) $(towers_OBJECTS) $(towers_LDADD) $(LIBS)
1770
1771towerssolver$(EXEEXT): $(towerssolver_OBJECTS) $(towerssolver_DEPENDENCIES) $(EXTRA_towerssolver_DEPENDENCIES)
1772 @rm -f towerssolver$(EXEEXT)
1773 $(AM_V_CCLD)$(LINK) $(towerssolver_OBJECTS) $(towerssolver_LDADD) $(LIBS)
1774./tracks.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1775
1776tracks$(EXEEXT): $(tracks_OBJECTS) $(tracks_DEPENDENCIES) $(EXTRA_tracks_DEPENDENCIES)
1777 @rm -f tracks$(EXEEXT)
1778 $(AM_V_CCLD)$(LINK) $(tracks_OBJECTS) $(tracks_LDADD) $(LIBS)
1779./twiddle.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1780
1781twiddle$(EXEEXT): $(twiddle_OBJECTS) $(twiddle_DEPENDENCIES) $(EXTRA_twiddle_DEPENDENCIES)
1782 @rm -f twiddle$(EXEEXT)
1783 $(AM_V_CCLD)$(LINK) $(twiddle_OBJECTS) $(twiddle_LDADD) $(LIBS)
1784./undead.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1785
1786undead$(EXEEXT): $(undead_OBJECTS) $(undead_DEPENDENCIES) $(EXTRA_undead_DEPENDENCIES)
1787 @rm -f undead$(EXEEXT)
1788 $(AM_V_CCLD)$(LINK) $(undead_OBJECTS) $(undead_LDADD) $(LIBS)
1789./unequal.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1790
1791unequal$(EXEEXT): $(unequal_OBJECTS) $(unequal_DEPENDENCIES) $(EXTRA_unequal_DEPENDENCIES)
1792 @rm -f unequal$(EXEEXT)
1793 $(AM_V_CCLD)$(LINK) $(unequal_OBJECTS) $(unequal_LDADD) $(LIBS)
1794
1795unequalsolver$(EXEEXT): $(unequalsolver_OBJECTS) $(unequalsolver_DEPENDENCIES) $(EXTRA_unequalsolver_DEPENDENCIES)
1796 @rm -f unequalsolver$(EXEEXT)
1797 $(AM_V_CCLD)$(LINK) $(unequalsolver_OBJECTS) $(unequalsolver_LDADD) $(LIBS)
1798./unruly.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1799
1800unruly$(EXEEXT): $(unruly_OBJECTS) $(unruly_DEPENDENCIES) $(EXTRA_unruly_DEPENDENCIES)
1801 @rm -f unruly$(EXEEXT)
1802 $(AM_V_CCLD)$(LINK) $(unruly_OBJECTS) $(unruly_LDADD) $(LIBS)
1803
1804unrulysolver$(EXEEXT): $(unrulysolver_OBJECTS) $(unrulysolver_DEPENDENCIES) $(EXTRA_unrulysolver_DEPENDENCIES)
1805 @rm -f unrulysolver$(EXEEXT)
1806 $(AM_V_CCLD)$(LINK) $(unrulysolver_OBJECTS) $(unrulysolver_LDADD) $(LIBS)
1807./untangle.$(OBJEXT): ./$(am__dirstamp) $(DEPDIR)/$(am__dirstamp)
1808
1809untangle$(EXEEXT): $(untangle_OBJECTS) $(untangle_DEPENDENCIES) $(EXTRA_untangle_DEPENDENCIES)
1810 @rm -f untangle$(EXEEXT)
1811 $(AM_V_CCLD)$(LINK) $(untangle_OBJECTS) $(untangle_LDADD) $(LIBS)
1812
1813mostlyclean-compile:
1814 -rm -f *.$(OBJEXT)
1815 -rm -f ./*.$(OBJEXT)
1816
1817distclean-compile:
1818 -rm -f *.tab.c
1819
1820@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blackbox.Po@am__quote@
1821@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bridges.Po@am__quote@
1822@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/combi.Po@am__quote@
1823@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cube.Po@am__quote@
1824@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/divvy.Po@am__quote@
1825@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dominosa.Po@am__quote@
1826@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drawing.Po@am__quote@
1827@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dsf.Po@am__quote@
1828@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fifteen.Po@am__quote@
1829@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filling.Po@am__quote@
1830@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/findloop.Po@am__quote@
1831@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flip.Po@am__quote@
1832@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flood.Po@am__quote@
1833@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/galaxies.Po@am__quote@
1834@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grid.Po@am__quote@
1835@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtk.Po@am__quote@
1836@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/guess.Po@am__quote@
1837@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inertia.Po@am__quote@
1838@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keen.Po@am__quote@
1839@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/latin.Po@am__quote@
1840@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/laydomino.Po@am__quote@
1841@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libfifteen2_a-fifteen.Po@am__quote@
1842@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libfilling2_a-filling.Po@am__quote@
1843@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgalaxie2_a-galaxies.Po@am__quote@
1844@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgalaxie4_a-galaxies.Po@am__quote@
1845@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libkeen2_a-keen.Po@am__quote@
1846@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblatin6_a-latin.Po@am__quote@
1847@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblatin8_a-latin.Po@am__quote@
1848@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblightup2_a-lightup.Po@am__quote@
1849@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libloopy2_a-loopy.Po@am__quote@
1850@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmagnets2_a-magnets.Po@am__quote@
1851@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmap2_a-map.Po@am__quote@
1852@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmines2_a-mines.Po@am__quote@
1853@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpattern2_a-pattern.Po@am__quote@
1854@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpattern4_a-pattern.Po@am__quote@
1855@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpearl2_a-pearl.Po@am__quote@
1856@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsignpos2_a-signpost.Po@am__quote@
1857@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsingles3_a-singles.Po@am__quote@
1858@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libslant2_a-slant.Po@am__quote@
1859@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsolo2_a-solo.Po@am__quote@
1860@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtents3_a-tents.Po@am__quote@
1861@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtowers2_a-towers.Po@am__quote@
1862@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libunequal2_a-unequal.Po@am__quote@
1863@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libunruly2_a-unruly.Po@am__quote@
1864@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lightup.Po@am__quote@
1865@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/loopgen.Po@am__quote@
1866@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/loopy.Po@am__quote@
1867@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/magnets.Po@am__quote@
1868@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloc.Po@am__quote@
1869@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/map.Po@am__quote@
1870@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxflow.Po@am__quote@
1871@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/midend.Po@am__quote@
1872@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mines.Po@am__quote@
1873@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/misc.Po@am__quote@
1874@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/net.Po@am__quote@
1875@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netslide.Po@am__quote@
1876@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/no-icon.Po@am__quote@
1877@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nullfe.Po@am__quote@
1878@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nullgame.Po@am__quote@
1879@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obfusc.Po@am__quote@
1880@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/palisade.Po@am__quote@
1881@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pattern.Po@am__quote@
1882@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pearl.Po@am__quote@
1883@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pegs.Po@am__quote@
1884@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/penrose.Po@am__quote@
1885@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printing.Po@am__quote@
1886@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ps.Po@am__quote@
1887@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/random.Po@am__quote@
1888@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/range.Po@am__quote@
1889@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rect.Po@am__quote@
1890@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samegame.Po@am__quote@
1891@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signpost.Po@am__quote@
1892@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/singles.Po@am__quote@
1893@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sixteen.Po@am__quote@
1894@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slant.Po@am__quote@
1895@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/solo.Po@am__quote@
1896@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tdq.Po@am__quote@
1897@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tents.Po@am__quote@
1898@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/towers.Po@am__quote@
1899@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tracks.Po@am__quote@
1900@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tree234.Po@am__quote@
1901@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/twiddle.Po@am__quote@
1902@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/undead.Po@am__quote@
1903@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unequal.Po@am__quote@
1904@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unruly.Po@am__quote@
1905@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/untangle.Po@am__quote@
1906@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version.Po@am__quote@
1907
1908.c.o:
1909@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
1910@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
1911@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
1912@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
1913@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1914@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
1915
1916.c.obj:
1917@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
1918@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
1919@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
1920@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
1921@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1922@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
1923
1924./libfifteen2_a-fifteen.o: ./fifteen.c
1925@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libfifteen2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libfifteen2_a-fifteen.o -MD -MP -MF $(DEPDIR)/libfifteen2_a-fifteen.Tpo -c -o ./libfifteen2_a-fifteen.o `test -f './fifteen.c' || echo '$(srcdir)/'`./fifteen.c
1926@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libfifteen2_a-fifteen.Tpo $(DEPDIR)/libfifteen2_a-fifteen.Po
1927@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./fifteen.c' object='./libfifteen2_a-fifteen.o' libtool=no @AMDEPBACKSLASH@
1928@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1929@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libfifteen2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libfifteen2_a-fifteen.o `test -f './fifteen.c' || echo '$(srcdir)/'`./fifteen.c
1930
1931./libfifteen2_a-fifteen.obj: ./fifteen.c
1932@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libfifteen2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libfifteen2_a-fifteen.obj -MD -MP -MF $(DEPDIR)/libfifteen2_a-fifteen.Tpo -c -o ./libfifteen2_a-fifteen.obj `if test -f './fifteen.c'; then $(CYGPATH_W) './fifteen.c'; else $(CYGPATH_W) '$(srcdir)/./fifteen.c'; fi`
1933@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libfifteen2_a-fifteen.Tpo $(DEPDIR)/libfifteen2_a-fifteen.Po
1934@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./fifteen.c' object='./libfifteen2_a-fifteen.obj' libtool=no @AMDEPBACKSLASH@
1935@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1936@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libfifteen2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libfifteen2_a-fifteen.obj `if test -f './fifteen.c'; then $(CYGPATH_W) './fifteen.c'; else $(CYGPATH_W) '$(srcdir)/./fifteen.c'; fi`
1937
1938./libfilling2_a-filling.o: ./filling.c
1939@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libfilling2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libfilling2_a-filling.o -MD -MP -MF $(DEPDIR)/libfilling2_a-filling.Tpo -c -o ./libfilling2_a-filling.o `test -f './filling.c' || echo '$(srcdir)/'`./filling.c
1940@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libfilling2_a-filling.Tpo $(DEPDIR)/libfilling2_a-filling.Po
1941@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./filling.c' object='./libfilling2_a-filling.o' libtool=no @AMDEPBACKSLASH@
1942@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1943@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libfilling2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libfilling2_a-filling.o `test -f './filling.c' || echo '$(srcdir)/'`./filling.c
1944
1945./libfilling2_a-filling.obj: ./filling.c
1946@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libfilling2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libfilling2_a-filling.obj -MD -MP -MF $(DEPDIR)/libfilling2_a-filling.Tpo -c -o ./libfilling2_a-filling.obj `if test -f './filling.c'; then $(CYGPATH_W) './filling.c'; else $(CYGPATH_W) '$(srcdir)/./filling.c'; fi`
1947@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libfilling2_a-filling.Tpo $(DEPDIR)/libfilling2_a-filling.Po
1948@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./filling.c' object='./libfilling2_a-filling.obj' libtool=no @AMDEPBACKSLASH@
1949@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1950@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libfilling2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libfilling2_a-filling.obj `if test -f './filling.c'; then $(CYGPATH_W) './filling.c'; else $(CYGPATH_W) '$(srcdir)/./filling.c'; fi`
1951
1952./libgalaxie2_a-galaxies.o: ./galaxies.c
1953@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgalaxie2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libgalaxie2_a-galaxies.o -MD -MP -MF $(DEPDIR)/libgalaxie2_a-galaxies.Tpo -c -o ./libgalaxie2_a-galaxies.o `test -f './galaxies.c' || echo '$(srcdir)/'`./galaxies.c
1954@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgalaxie2_a-galaxies.Tpo $(DEPDIR)/libgalaxie2_a-galaxies.Po
1955@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./galaxies.c' object='./libgalaxie2_a-galaxies.o' libtool=no @AMDEPBACKSLASH@
1956@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1957@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgalaxie2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libgalaxie2_a-galaxies.o `test -f './galaxies.c' || echo '$(srcdir)/'`./galaxies.c
1958
1959./libgalaxie2_a-galaxies.obj: ./galaxies.c
1960@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgalaxie2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libgalaxie2_a-galaxies.obj -MD -MP -MF $(DEPDIR)/libgalaxie2_a-galaxies.Tpo -c -o ./libgalaxie2_a-galaxies.obj `if test -f './galaxies.c'; then $(CYGPATH_W) './galaxies.c'; else $(CYGPATH_W) '$(srcdir)/./galaxies.c'; fi`
1961@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgalaxie2_a-galaxies.Tpo $(DEPDIR)/libgalaxie2_a-galaxies.Po
1962@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./galaxies.c' object='./libgalaxie2_a-galaxies.obj' libtool=no @AMDEPBACKSLASH@
1963@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1964@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgalaxie2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libgalaxie2_a-galaxies.obj `if test -f './galaxies.c'; then $(CYGPATH_W) './galaxies.c'; else $(CYGPATH_W) '$(srcdir)/./galaxies.c'; fi`
1965
1966./libgalaxie4_a-galaxies.o: ./galaxies.c
1967@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgalaxie4_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libgalaxie4_a-galaxies.o -MD -MP -MF $(DEPDIR)/libgalaxie4_a-galaxies.Tpo -c -o ./libgalaxie4_a-galaxies.o `test -f './galaxies.c' || echo '$(srcdir)/'`./galaxies.c
1968@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgalaxie4_a-galaxies.Tpo $(DEPDIR)/libgalaxie4_a-galaxies.Po
1969@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./galaxies.c' object='./libgalaxie4_a-galaxies.o' libtool=no @AMDEPBACKSLASH@
1970@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1971@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgalaxie4_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libgalaxie4_a-galaxies.o `test -f './galaxies.c' || echo '$(srcdir)/'`./galaxies.c
1972
1973./libgalaxie4_a-galaxies.obj: ./galaxies.c
1974@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgalaxie4_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libgalaxie4_a-galaxies.obj -MD -MP -MF $(DEPDIR)/libgalaxie4_a-galaxies.Tpo -c -o ./libgalaxie4_a-galaxies.obj `if test -f './galaxies.c'; then $(CYGPATH_W) './galaxies.c'; else $(CYGPATH_W) '$(srcdir)/./galaxies.c'; fi`
1975@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgalaxie4_a-galaxies.Tpo $(DEPDIR)/libgalaxie4_a-galaxies.Po
1976@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./galaxies.c' object='./libgalaxie4_a-galaxies.obj' libtool=no @AMDEPBACKSLASH@
1977@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1978@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgalaxie4_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libgalaxie4_a-galaxies.obj `if test -f './galaxies.c'; then $(CYGPATH_W) './galaxies.c'; else $(CYGPATH_W) '$(srcdir)/./galaxies.c'; fi`
1979
1980./libkeen2_a-keen.o: ./keen.c
1981@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libkeen2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libkeen2_a-keen.o -MD -MP -MF $(DEPDIR)/libkeen2_a-keen.Tpo -c -o ./libkeen2_a-keen.o `test -f './keen.c' || echo '$(srcdir)/'`./keen.c
1982@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libkeen2_a-keen.Tpo $(DEPDIR)/libkeen2_a-keen.Po
1983@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./keen.c' object='./libkeen2_a-keen.o' libtool=no @AMDEPBACKSLASH@
1984@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1985@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libkeen2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libkeen2_a-keen.o `test -f './keen.c' || echo '$(srcdir)/'`./keen.c
1986
1987./libkeen2_a-keen.obj: ./keen.c
1988@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libkeen2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libkeen2_a-keen.obj -MD -MP -MF $(DEPDIR)/libkeen2_a-keen.Tpo -c -o ./libkeen2_a-keen.obj `if test -f './keen.c'; then $(CYGPATH_W) './keen.c'; else $(CYGPATH_W) '$(srcdir)/./keen.c'; fi`
1989@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libkeen2_a-keen.Tpo $(DEPDIR)/libkeen2_a-keen.Po
1990@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./keen.c' object='./libkeen2_a-keen.obj' libtool=no @AMDEPBACKSLASH@
1991@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1992@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libkeen2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libkeen2_a-keen.obj `if test -f './keen.c'; then $(CYGPATH_W) './keen.c'; else $(CYGPATH_W) '$(srcdir)/./keen.c'; fi`
1993
1994./liblatin6_a-latin.o: ./latin.c
1995@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblatin6_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./liblatin6_a-latin.o -MD -MP -MF $(DEPDIR)/liblatin6_a-latin.Tpo -c -o ./liblatin6_a-latin.o `test -f './latin.c' || echo '$(srcdir)/'`./latin.c
1996@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liblatin6_a-latin.Tpo $(DEPDIR)/liblatin6_a-latin.Po
1997@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./latin.c' object='./liblatin6_a-latin.o' libtool=no @AMDEPBACKSLASH@
1998@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1999@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblatin6_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./liblatin6_a-latin.o `test -f './latin.c' || echo '$(srcdir)/'`./latin.c
2000
2001./liblatin6_a-latin.obj: ./latin.c
2002@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblatin6_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./liblatin6_a-latin.obj -MD -MP -MF $(DEPDIR)/liblatin6_a-latin.Tpo -c -o ./liblatin6_a-latin.obj `if test -f './latin.c'; then $(CYGPATH_W) './latin.c'; else $(CYGPATH_W) '$(srcdir)/./latin.c'; fi`
2003@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liblatin6_a-latin.Tpo $(DEPDIR)/liblatin6_a-latin.Po
2004@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./latin.c' object='./liblatin6_a-latin.obj' libtool=no @AMDEPBACKSLASH@
2005@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2006@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblatin6_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./liblatin6_a-latin.obj `if test -f './latin.c'; then $(CYGPATH_W) './latin.c'; else $(CYGPATH_W) '$(srcdir)/./latin.c'; fi`
2007
2008./liblatin8_a-latin.o: ./latin.c
2009@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblatin8_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./liblatin8_a-latin.o -MD -MP -MF $(DEPDIR)/liblatin8_a-latin.Tpo -c -o ./liblatin8_a-latin.o `test -f './latin.c' || echo '$(srcdir)/'`./latin.c
2010@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liblatin8_a-latin.Tpo $(DEPDIR)/liblatin8_a-latin.Po
2011@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./latin.c' object='./liblatin8_a-latin.o' libtool=no @AMDEPBACKSLASH@
2012@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2013@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblatin8_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./liblatin8_a-latin.o `test -f './latin.c' || echo '$(srcdir)/'`./latin.c
2014
2015./liblatin8_a-latin.obj: ./latin.c
2016@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblatin8_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./liblatin8_a-latin.obj -MD -MP -MF $(DEPDIR)/liblatin8_a-latin.Tpo -c -o ./liblatin8_a-latin.obj `if test -f './latin.c'; then $(CYGPATH_W) './latin.c'; else $(CYGPATH_W) '$(srcdir)/./latin.c'; fi`
2017@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liblatin8_a-latin.Tpo $(DEPDIR)/liblatin8_a-latin.Po
2018@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./latin.c' object='./liblatin8_a-latin.obj' libtool=no @AMDEPBACKSLASH@
2019@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2020@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblatin8_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./liblatin8_a-latin.obj `if test -f './latin.c'; then $(CYGPATH_W) './latin.c'; else $(CYGPATH_W) '$(srcdir)/./latin.c'; fi`
2021
2022./liblightup2_a-lightup.o: ./lightup.c
2023@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblightup2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./liblightup2_a-lightup.o -MD -MP -MF $(DEPDIR)/liblightup2_a-lightup.Tpo -c -o ./liblightup2_a-lightup.o `test -f './lightup.c' || echo '$(srcdir)/'`./lightup.c
2024@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liblightup2_a-lightup.Tpo $(DEPDIR)/liblightup2_a-lightup.Po
2025@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./lightup.c' object='./liblightup2_a-lightup.o' libtool=no @AMDEPBACKSLASH@
2026@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2027@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblightup2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./liblightup2_a-lightup.o `test -f './lightup.c' || echo '$(srcdir)/'`./lightup.c
2028
2029./liblightup2_a-lightup.obj: ./lightup.c
2030@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblightup2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./liblightup2_a-lightup.obj -MD -MP -MF $(DEPDIR)/liblightup2_a-lightup.Tpo -c -o ./liblightup2_a-lightup.obj `if test -f './lightup.c'; then $(CYGPATH_W) './lightup.c'; else $(CYGPATH_W) '$(srcdir)/./lightup.c'; fi`
2031@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liblightup2_a-lightup.Tpo $(DEPDIR)/liblightup2_a-lightup.Po
2032@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./lightup.c' object='./liblightup2_a-lightup.obj' libtool=no @AMDEPBACKSLASH@
2033@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2034@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblightup2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./liblightup2_a-lightup.obj `if test -f './lightup.c'; then $(CYGPATH_W) './lightup.c'; else $(CYGPATH_W) '$(srcdir)/./lightup.c'; fi`
2035
2036./libloopy2_a-loopy.o: ./loopy.c
2037@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libloopy2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libloopy2_a-loopy.o -MD -MP -MF $(DEPDIR)/libloopy2_a-loopy.Tpo -c -o ./libloopy2_a-loopy.o `test -f './loopy.c' || echo '$(srcdir)/'`./loopy.c
2038@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libloopy2_a-loopy.Tpo $(DEPDIR)/libloopy2_a-loopy.Po
2039@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./loopy.c' object='./libloopy2_a-loopy.o' libtool=no @AMDEPBACKSLASH@
2040@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2041@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libloopy2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libloopy2_a-loopy.o `test -f './loopy.c' || echo '$(srcdir)/'`./loopy.c
2042
2043./libloopy2_a-loopy.obj: ./loopy.c
2044@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libloopy2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libloopy2_a-loopy.obj -MD -MP -MF $(DEPDIR)/libloopy2_a-loopy.Tpo -c -o ./libloopy2_a-loopy.obj `if test -f './loopy.c'; then $(CYGPATH_W) './loopy.c'; else $(CYGPATH_W) '$(srcdir)/./loopy.c'; fi`
2045@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libloopy2_a-loopy.Tpo $(DEPDIR)/libloopy2_a-loopy.Po
2046@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./loopy.c' object='./libloopy2_a-loopy.obj' libtool=no @AMDEPBACKSLASH@
2047@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2048@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libloopy2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libloopy2_a-loopy.obj `if test -f './loopy.c'; then $(CYGPATH_W) './loopy.c'; else $(CYGPATH_W) '$(srcdir)/./loopy.c'; fi`
2049
2050./libmagnets2_a-magnets.o: ./magnets.c
2051@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmagnets2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libmagnets2_a-magnets.o -MD -MP -MF $(DEPDIR)/libmagnets2_a-magnets.Tpo -c -o ./libmagnets2_a-magnets.o `test -f './magnets.c' || echo '$(srcdir)/'`./magnets.c
2052@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmagnets2_a-magnets.Tpo $(DEPDIR)/libmagnets2_a-magnets.Po
2053@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./magnets.c' object='./libmagnets2_a-magnets.o' libtool=no @AMDEPBACKSLASH@
2054@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2055@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmagnets2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libmagnets2_a-magnets.o `test -f './magnets.c' || echo '$(srcdir)/'`./magnets.c
2056
2057./libmagnets2_a-magnets.obj: ./magnets.c
2058@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmagnets2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libmagnets2_a-magnets.obj -MD -MP -MF $(DEPDIR)/libmagnets2_a-magnets.Tpo -c -o ./libmagnets2_a-magnets.obj `if test -f './magnets.c'; then $(CYGPATH_W) './magnets.c'; else $(CYGPATH_W) '$(srcdir)/./magnets.c'; fi`
2059@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmagnets2_a-magnets.Tpo $(DEPDIR)/libmagnets2_a-magnets.Po
2060@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./magnets.c' object='./libmagnets2_a-magnets.obj' libtool=no @AMDEPBACKSLASH@
2061@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2062@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmagnets2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libmagnets2_a-magnets.obj `if test -f './magnets.c'; then $(CYGPATH_W) './magnets.c'; else $(CYGPATH_W) '$(srcdir)/./magnets.c'; fi`
2063
2064./libmap2_a-map.o: ./map.c
2065@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmap2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libmap2_a-map.o -MD -MP -MF $(DEPDIR)/libmap2_a-map.Tpo -c -o ./libmap2_a-map.o `test -f './map.c' || echo '$(srcdir)/'`./map.c
2066@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmap2_a-map.Tpo $(DEPDIR)/libmap2_a-map.Po
2067@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./map.c' object='./libmap2_a-map.o' libtool=no @AMDEPBACKSLASH@
2068@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2069@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmap2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libmap2_a-map.o `test -f './map.c' || echo '$(srcdir)/'`./map.c
2070
2071./libmap2_a-map.obj: ./map.c
2072@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmap2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libmap2_a-map.obj -MD -MP -MF $(DEPDIR)/libmap2_a-map.Tpo -c -o ./libmap2_a-map.obj `if test -f './map.c'; then $(CYGPATH_W) './map.c'; else $(CYGPATH_W) '$(srcdir)/./map.c'; fi`
2073@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmap2_a-map.Tpo $(DEPDIR)/libmap2_a-map.Po
2074@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./map.c' object='./libmap2_a-map.obj' libtool=no @AMDEPBACKSLASH@
2075@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2076@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmap2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libmap2_a-map.obj `if test -f './map.c'; then $(CYGPATH_W) './map.c'; else $(CYGPATH_W) '$(srcdir)/./map.c'; fi`
2077
2078./libmines2_a-mines.o: ./mines.c
2079@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmines2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libmines2_a-mines.o -MD -MP -MF $(DEPDIR)/libmines2_a-mines.Tpo -c -o ./libmines2_a-mines.o `test -f './mines.c' || echo '$(srcdir)/'`./mines.c
2080@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmines2_a-mines.Tpo $(DEPDIR)/libmines2_a-mines.Po
2081@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./mines.c' object='./libmines2_a-mines.o' libtool=no @AMDEPBACKSLASH@
2082@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2083@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmines2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libmines2_a-mines.o `test -f './mines.c' || echo '$(srcdir)/'`./mines.c
2084
2085./libmines2_a-mines.obj: ./mines.c
2086@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmines2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libmines2_a-mines.obj -MD -MP -MF $(DEPDIR)/libmines2_a-mines.Tpo -c -o ./libmines2_a-mines.obj `if test -f './mines.c'; then $(CYGPATH_W) './mines.c'; else $(CYGPATH_W) '$(srcdir)/./mines.c'; fi`
2087@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmines2_a-mines.Tpo $(DEPDIR)/libmines2_a-mines.Po
2088@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./mines.c' object='./libmines2_a-mines.obj' libtool=no @AMDEPBACKSLASH@
2089@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2090@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmines2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libmines2_a-mines.obj `if test -f './mines.c'; then $(CYGPATH_W) './mines.c'; else $(CYGPATH_W) '$(srcdir)/./mines.c'; fi`
2091
2092./libpattern2_a-pattern.o: ./pattern.c
2093@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpattern2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libpattern2_a-pattern.o -MD -MP -MF $(DEPDIR)/libpattern2_a-pattern.Tpo -c -o ./libpattern2_a-pattern.o `test -f './pattern.c' || echo '$(srcdir)/'`./pattern.c
2094@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libpattern2_a-pattern.Tpo $(DEPDIR)/libpattern2_a-pattern.Po
2095@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./pattern.c' object='./libpattern2_a-pattern.o' libtool=no @AMDEPBACKSLASH@
2096@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2097@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpattern2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libpattern2_a-pattern.o `test -f './pattern.c' || echo '$(srcdir)/'`./pattern.c
2098
2099./libpattern2_a-pattern.obj: ./pattern.c
2100@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpattern2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libpattern2_a-pattern.obj -MD -MP -MF $(DEPDIR)/libpattern2_a-pattern.Tpo -c -o ./libpattern2_a-pattern.obj `if test -f './pattern.c'; then $(CYGPATH_W) './pattern.c'; else $(CYGPATH_W) '$(srcdir)/./pattern.c'; fi`
2101@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libpattern2_a-pattern.Tpo $(DEPDIR)/libpattern2_a-pattern.Po
2102@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./pattern.c' object='./libpattern2_a-pattern.obj' libtool=no @AMDEPBACKSLASH@
2103@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2104@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpattern2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libpattern2_a-pattern.obj `if test -f './pattern.c'; then $(CYGPATH_W) './pattern.c'; else $(CYGPATH_W) '$(srcdir)/./pattern.c'; fi`
2105
2106./libpattern4_a-pattern.o: ./pattern.c
2107@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpattern4_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libpattern4_a-pattern.o -MD -MP -MF $(DEPDIR)/libpattern4_a-pattern.Tpo -c -o ./libpattern4_a-pattern.o `test -f './pattern.c' || echo '$(srcdir)/'`./pattern.c
2108@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libpattern4_a-pattern.Tpo $(DEPDIR)/libpattern4_a-pattern.Po
2109@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./pattern.c' object='./libpattern4_a-pattern.o' libtool=no @AMDEPBACKSLASH@
2110@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2111@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpattern4_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libpattern4_a-pattern.o `test -f './pattern.c' || echo '$(srcdir)/'`./pattern.c
2112
2113./libpattern4_a-pattern.obj: ./pattern.c
2114@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpattern4_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libpattern4_a-pattern.obj -MD -MP -MF $(DEPDIR)/libpattern4_a-pattern.Tpo -c -o ./libpattern4_a-pattern.obj `if test -f './pattern.c'; then $(CYGPATH_W) './pattern.c'; else $(CYGPATH_W) '$(srcdir)/./pattern.c'; fi`
2115@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libpattern4_a-pattern.Tpo $(DEPDIR)/libpattern4_a-pattern.Po
2116@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./pattern.c' object='./libpattern4_a-pattern.obj' libtool=no @AMDEPBACKSLASH@
2117@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2118@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpattern4_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libpattern4_a-pattern.obj `if test -f './pattern.c'; then $(CYGPATH_W) './pattern.c'; else $(CYGPATH_W) '$(srcdir)/./pattern.c'; fi`
2119
2120./libpearl2_a-pearl.o: ./pearl.c
2121@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpearl2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libpearl2_a-pearl.o -MD -MP -MF $(DEPDIR)/libpearl2_a-pearl.Tpo -c -o ./libpearl2_a-pearl.o `test -f './pearl.c' || echo '$(srcdir)/'`./pearl.c
2122@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libpearl2_a-pearl.Tpo $(DEPDIR)/libpearl2_a-pearl.Po
2123@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./pearl.c' object='./libpearl2_a-pearl.o' libtool=no @AMDEPBACKSLASH@
2124@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2125@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpearl2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libpearl2_a-pearl.o `test -f './pearl.c' || echo '$(srcdir)/'`./pearl.c
2126
2127./libpearl2_a-pearl.obj: ./pearl.c
2128@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpearl2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libpearl2_a-pearl.obj -MD -MP -MF $(DEPDIR)/libpearl2_a-pearl.Tpo -c -o ./libpearl2_a-pearl.obj `if test -f './pearl.c'; then $(CYGPATH_W) './pearl.c'; else $(CYGPATH_W) '$(srcdir)/./pearl.c'; fi`
2129@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libpearl2_a-pearl.Tpo $(DEPDIR)/libpearl2_a-pearl.Po
2130@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./pearl.c' object='./libpearl2_a-pearl.obj' libtool=no @AMDEPBACKSLASH@
2131@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2132@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpearl2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libpearl2_a-pearl.obj `if test -f './pearl.c'; then $(CYGPATH_W) './pearl.c'; else $(CYGPATH_W) '$(srcdir)/./pearl.c'; fi`
2133
2134./libsignpos2_a-signpost.o: ./signpost.c
2135@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsignpos2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libsignpos2_a-signpost.o -MD -MP -MF $(DEPDIR)/libsignpos2_a-signpost.Tpo -c -o ./libsignpos2_a-signpost.o `test -f './signpost.c' || echo '$(srcdir)/'`./signpost.c
2136@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsignpos2_a-signpost.Tpo $(DEPDIR)/libsignpos2_a-signpost.Po
2137@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./signpost.c' object='./libsignpos2_a-signpost.o' libtool=no @AMDEPBACKSLASH@
2138@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2139@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsignpos2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libsignpos2_a-signpost.o `test -f './signpost.c' || echo '$(srcdir)/'`./signpost.c
2140
2141./libsignpos2_a-signpost.obj: ./signpost.c
2142@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsignpos2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libsignpos2_a-signpost.obj -MD -MP -MF $(DEPDIR)/libsignpos2_a-signpost.Tpo -c -o ./libsignpos2_a-signpost.obj `if test -f './signpost.c'; then $(CYGPATH_W) './signpost.c'; else $(CYGPATH_W) '$(srcdir)/./signpost.c'; fi`
2143@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsignpos2_a-signpost.Tpo $(DEPDIR)/libsignpos2_a-signpost.Po
2144@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./signpost.c' object='./libsignpos2_a-signpost.obj' libtool=no @AMDEPBACKSLASH@
2145@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2146@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsignpos2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libsignpos2_a-signpost.obj `if test -f './signpost.c'; then $(CYGPATH_W) './signpost.c'; else $(CYGPATH_W) '$(srcdir)/./signpost.c'; fi`
2147
2148./libsingles3_a-singles.o: ./singles.c
2149@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsingles3_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libsingles3_a-singles.o -MD -MP -MF $(DEPDIR)/libsingles3_a-singles.Tpo -c -o ./libsingles3_a-singles.o `test -f './singles.c' || echo '$(srcdir)/'`./singles.c
2150@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsingles3_a-singles.Tpo $(DEPDIR)/libsingles3_a-singles.Po
2151@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./singles.c' object='./libsingles3_a-singles.o' libtool=no @AMDEPBACKSLASH@
2152@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2153@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsingles3_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libsingles3_a-singles.o `test -f './singles.c' || echo '$(srcdir)/'`./singles.c
2154
2155./libsingles3_a-singles.obj: ./singles.c
2156@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsingles3_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libsingles3_a-singles.obj -MD -MP -MF $(DEPDIR)/libsingles3_a-singles.Tpo -c -o ./libsingles3_a-singles.obj `if test -f './singles.c'; then $(CYGPATH_W) './singles.c'; else $(CYGPATH_W) '$(srcdir)/./singles.c'; fi`
2157@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsingles3_a-singles.Tpo $(DEPDIR)/libsingles3_a-singles.Po
2158@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./singles.c' object='./libsingles3_a-singles.obj' libtool=no @AMDEPBACKSLASH@
2159@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2160@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsingles3_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libsingles3_a-singles.obj `if test -f './singles.c'; then $(CYGPATH_W) './singles.c'; else $(CYGPATH_W) '$(srcdir)/./singles.c'; fi`
2161
2162./libslant2_a-slant.o: ./slant.c
2163@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslant2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libslant2_a-slant.o -MD -MP -MF $(DEPDIR)/libslant2_a-slant.Tpo -c -o ./libslant2_a-slant.o `test -f './slant.c' || echo '$(srcdir)/'`./slant.c
2164@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libslant2_a-slant.Tpo $(DEPDIR)/libslant2_a-slant.Po
2165@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./slant.c' object='./libslant2_a-slant.o' libtool=no @AMDEPBACKSLASH@
2166@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2167@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslant2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libslant2_a-slant.o `test -f './slant.c' || echo '$(srcdir)/'`./slant.c
2168
2169./libslant2_a-slant.obj: ./slant.c
2170@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslant2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libslant2_a-slant.obj -MD -MP -MF $(DEPDIR)/libslant2_a-slant.Tpo -c -o ./libslant2_a-slant.obj `if test -f './slant.c'; then $(CYGPATH_W) './slant.c'; else $(CYGPATH_W) '$(srcdir)/./slant.c'; fi`
2171@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libslant2_a-slant.Tpo $(DEPDIR)/libslant2_a-slant.Po
2172@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./slant.c' object='./libslant2_a-slant.obj' libtool=no @AMDEPBACKSLASH@
2173@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2174@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslant2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libslant2_a-slant.obj `if test -f './slant.c'; then $(CYGPATH_W) './slant.c'; else $(CYGPATH_W) '$(srcdir)/./slant.c'; fi`
2175
2176./libsolo2_a-solo.o: ./solo.c
2177@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsolo2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libsolo2_a-solo.o -MD -MP -MF $(DEPDIR)/libsolo2_a-solo.Tpo -c -o ./libsolo2_a-solo.o `test -f './solo.c' || echo '$(srcdir)/'`./solo.c
2178@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsolo2_a-solo.Tpo $(DEPDIR)/libsolo2_a-solo.Po
2179@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./solo.c' object='./libsolo2_a-solo.o' libtool=no @AMDEPBACKSLASH@
2180@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2181@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsolo2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libsolo2_a-solo.o `test -f './solo.c' || echo '$(srcdir)/'`./solo.c
2182
2183./libsolo2_a-solo.obj: ./solo.c
2184@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsolo2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libsolo2_a-solo.obj -MD -MP -MF $(DEPDIR)/libsolo2_a-solo.Tpo -c -o ./libsolo2_a-solo.obj `if test -f './solo.c'; then $(CYGPATH_W) './solo.c'; else $(CYGPATH_W) '$(srcdir)/./solo.c'; fi`
2185@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsolo2_a-solo.Tpo $(DEPDIR)/libsolo2_a-solo.Po
2186@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./solo.c' object='./libsolo2_a-solo.obj' libtool=no @AMDEPBACKSLASH@
2187@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2188@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsolo2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libsolo2_a-solo.obj `if test -f './solo.c'; then $(CYGPATH_W) './solo.c'; else $(CYGPATH_W) '$(srcdir)/./solo.c'; fi`
2189
2190./libtents3_a-tents.o: ./tents.c
2191@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtents3_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libtents3_a-tents.o -MD -MP -MF $(DEPDIR)/libtents3_a-tents.Tpo -c -o ./libtents3_a-tents.o `test -f './tents.c' || echo '$(srcdir)/'`./tents.c
2192@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtents3_a-tents.Tpo $(DEPDIR)/libtents3_a-tents.Po
2193@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./tents.c' object='./libtents3_a-tents.o' libtool=no @AMDEPBACKSLASH@
2194@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2195@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtents3_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libtents3_a-tents.o `test -f './tents.c' || echo '$(srcdir)/'`./tents.c
2196
2197./libtents3_a-tents.obj: ./tents.c
2198@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtents3_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libtents3_a-tents.obj -MD -MP -MF $(DEPDIR)/libtents3_a-tents.Tpo -c -o ./libtents3_a-tents.obj `if test -f './tents.c'; then $(CYGPATH_W) './tents.c'; else $(CYGPATH_W) '$(srcdir)/./tents.c'; fi`
2199@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtents3_a-tents.Tpo $(DEPDIR)/libtents3_a-tents.Po
2200@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./tents.c' object='./libtents3_a-tents.obj' libtool=no @AMDEPBACKSLASH@
2201@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2202@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtents3_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libtents3_a-tents.obj `if test -f './tents.c'; then $(CYGPATH_W) './tents.c'; else $(CYGPATH_W) '$(srcdir)/./tents.c'; fi`
2203
2204./libtowers2_a-towers.o: ./towers.c
2205@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtowers2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libtowers2_a-towers.o -MD -MP -MF $(DEPDIR)/libtowers2_a-towers.Tpo -c -o ./libtowers2_a-towers.o `test -f './towers.c' || echo '$(srcdir)/'`./towers.c
2206@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtowers2_a-towers.Tpo $(DEPDIR)/libtowers2_a-towers.Po
2207@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./towers.c' object='./libtowers2_a-towers.o' libtool=no @AMDEPBACKSLASH@
2208@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2209@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtowers2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libtowers2_a-towers.o `test -f './towers.c' || echo '$(srcdir)/'`./towers.c
2210
2211./libtowers2_a-towers.obj: ./towers.c
2212@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtowers2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libtowers2_a-towers.obj -MD -MP -MF $(DEPDIR)/libtowers2_a-towers.Tpo -c -o ./libtowers2_a-towers.obj `if test -f './towers.c'; then $(CYGPATH_W) './towers.c'; else $(CYGPATH_W) '$(srcdir)/./towers.c'; fi`
2213@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtowers2_a-towers.Tpo $(DEPDIR)/libtowers2_a-towers.Po
2214@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./towers.c' object='./libtowers2_a-towers.obj' libtool=no @AMDEPBACKSLASH@
2215@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2216@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtowers2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libtowers2_a-towers.obj `if test -f './towers.c'; then $(CYGPATH_W) './towers.c'; else $(CYGPATH_W) '$(srcdir)/./towers.c'; fi`
2217
2218./libunequal2_a-unequal.o: ./unequal.c
2219@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libunequal2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libunequal2_a-unequal.o -MD -MP -MF $(DEPDIR)/libunequal2_a-unequal.Tpo -c -o ./libunequal2_a-unequal.o `test -f './unequal.c' || echo '$(srcdir)/'`./unequal.c
2220@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libunequal2_a-unequal.Tpo $(DEPDIR)/libunequal2_a-unequal.Po
2221@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./unequal.c' object='./libunequal2_a-unequal.o' libtool=no @AMDEPBACKSLASH@
2222@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2223@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libunequal2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libunequal2_a-unequal.o `test -f './unequal.c' || echo '$(srcdir)/'`./unequal.c
2224
2225./libunequal2_a-unequal.obj: ./unequal.c
2226@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libunequal2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libunequal2_a-unequal.obj -MD -MP -MF $(DEPDIR)/libunequal2_a-unequal.Tpo -c -o ./libunequal2_a-unequal.obj `if test -f './unequal.c'; then $(CYGPATH_W) './unequal.c'; else $(CYGPATH_W) '$(srcdir)/./unequal.c'; fi`
2227@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libunequal2_a-unequal.Tpo $(DEPDIR)/libunequal2_a-unequal.Po
2228@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./unequal.c' object='./libunequal2_a-unequal.obj' libtool=no @AMDEPBACKSLASH@
2229@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2230@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libunequal2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libunequal2_a-unequal.obj `if test -f './unequal.c'; then $(CYGPATH_W) './unequal.c'; else $(CYGPATH_W) '$(srcdir)/./unequal.c'; fi`
2231
2232./libunruly2_a-unruly.o: ./unruly.c
2233@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libunruly2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libunruly2_a-unruly.o -MD -MP -MF $(DEPDIR)/libunruly2_a-unruly.Tpo -c -o ./libunruly2_a-unruly.o `test -f './unruly.c' || echo '$(srcdir)/'`./unruly.c
2234@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libunruly2_a-unruly.Tpo $(DEPDIR)/libunruly2_a-unruly.Po
2235@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./unruly.c' object='./libunruly2_a-unruly.o' libtool=no @AMDEPBACKSLASH@
2236@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2237@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libunruly2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libunruly2_a-unruly.o `test -f './unruly.c' || echo '$(srcdir)/'`./unruly.c
2238
2239./libunruly2_a-unruly.obj: ./unruly.c
2240@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libunruly2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ./libunruly2_a-unruly.obj -MD -MP -MF $(DEPDIR)/libunruly2_a-unruly.Tpo -c -o ./libunruly2_a-unruly.obj `if test -f './unruly.c'; then $(CYGPATH_W) './unruly.c'; else $(CYGPATH_W) '$(srcdir)/./unruly.c'; fi`
2241@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libunruly2_a-unruly.Tpo $(DEPDIR)/libunruly2_a-unruly.Po
2242@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='./unruly.c' object='./libunruly2_a-unruly.obj' libtool=no @AMDEPBACKSLASH@
2243@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2244@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libunruly2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ./libunruly2_a-unruly.obj `if test -f './unruly.c'; then $(CYGPATH_W) './unruly.c'; else $(CYGPATH_W) '$(srcdir)/./unruly.c'; fi`
2245
2246ID: $(am__tagged_files)
2247 $(am__define_uniq_tagged_files); mkid -fID $$unique
2248tags: tags-am
2249TAGS: tags
2250
2251tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
2252 set x; \
2253 here=`pwd`; \
2254 $(am__define_uniq_tagged_files); \
2255 shift; \
2256 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
2257 test -n "$$unique" || unique=$$empty_fix; \
2258 if test $$# -gt 0; then \
2259 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
2260 "$$@" $$unique; \
2261 else \
2262 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
2263 $$unique; \
2264 fi; \
2265 fi
2266ctags: ctags-am
2267
2268CTAGS: ctags
2269ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
2270 $(am__define_uniq_tagged_files); \
2271 test -z "$(CTAGS_ARGS)$$unique" \
2272 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
2273 $$unique
2274
2275GTAGS:
2276 here=`$(am__cd) $(top_builddir) && pwd` \
2277 && $(am__cd) $(top_srcdir) \
2278 && gtags -i $(GTAGS_ARGS) "$$here"
2279cscope: cscope.files
2280 test ! -s cscope.files \
2281 || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
2282clean-cscope:
2283 -rm -f cscope.files
2284cscope.files: clean-cscope cscopelist
2285cscopelist: cscopelist-am
2286
2287cscopelist-am: $(am__tagged_files)
2288 list='$(am__tagged_files)'; \
2289 case "$(srcdir)" in \
2290 [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
2291 *) sdir=$(subdir)/$(srcdir) ;; \
2292 esac; \
2293 for i in $$list; do \
2294 if test -f "$$i"; then \
2295 echo "$(subdir)/$$i"; \
2296 else \
2297 echo "$$sdir/$$i"; \
2298 fi; \
2299 done >> $(top_builddir)/cscope.files
2300
2301distclean-tags:
2302 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
2303 -rm -f cscope.out cscope.in.out cscope.po.out cscope.files
2304
2305distdir: $(DISTFILES)
2306 $(am__remove_distdir)
2307 test -d "$(distdir)" || mkdir "$(distdir)"
2308 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
2309 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
2310 list='$(DISTFILES)'; \
2311 dist_files=`for file in $$list; do echo $$file; done | \
2312 sed -e "s|^$$srcdirstrip/||;t" \
2313 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
2314 case $$dist_files in \
2315 */*) $(MKDIR_P) `echo "$$dist_files" | \
2316 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
2317 sort -u` ;; \
2318 esac; \
2319 for file in $$dist_files; do \
2320 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
2321 if test -d $$d/$$file; then \
2322 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
2323 if test -d "$(distdir)/$$file"; then \
2324 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
2325 fi; \
2326 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
2327 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
2328 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
2329 fi; \
2330 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
2331 else \
2332 test -f "$(distdir)/$$file" \
2333 || cp -p $$d/$$file "$(distdir)/$$file" \
2334 || exit 1; \
2335 fi; \
2336 done
2337 -test -n "$(am__skip_mode_fix)" \
2338 || find "$(distdir)" -type d ! -perm -755 \
2339 -exec chmod u+rwx,go+rx {} \; -o \
2340 ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
2341 ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
2342 ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
2343 || chmod -R a+r "$(distdir)"
2344dist-gzip: distdir
2345 tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
2346 $(am__post_remove_distdir)
2347
2348dist-bzip2: distdir
2349 tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
2350 $(am__post_remove_distdir)
2351
2352dist-lzip: distdir
2353 tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
2354 $(am__post_remove_distdir)
2355
2356dist-xz: distdir
2357 tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
2358 $(am__post_remove_distdir)
2359
2360dist-tarZ: distdir
2361 @echo WARNING: "Support for distribution archives compressed with" \
2362 "legacy program 'compress' is deprecated." >&2
2363 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
2364 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
2365 $(am__post_remove_distdir)
2366
2367dist-shar: distdir
2368 @echo WARNING: "Support for shar distribution archives is" \
2369 "deprecated." >&2
2370 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
2371 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
2372 $(am__post_remove_distdir)
2373
2374dist-zip: distdir
2375 -rm -f $(distdir).zip
2376 zip -rq $(distdir).zip $(distdir)
2377 $(am__post_remove_distdir)
2378
2379dist dist-all:
2380 $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
2381 $(am__post_remove_distdir)
2382
2383# This target untars the dist file and tries a VPATH configuration. Then
2384# it guarantees that the distribution is self-contained by making another
2385# tarfile.
2386distcheck: dist
2387 case '$(DIST_ARCHIVES)' in \
2388 *.tar.gz*) \
2389 eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
2390 *.tar.bz2*) \
2391 bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
2392 *.tar.lz*) \
2393 lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
2394 *.tar.xz*) \
2395 xz -dc $(distdir).tar.xz | $(am__untar) ;;\
2396 *.tar.Z*) \
2397 uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
2398 *.shar.gz*) \
2399 eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
2400 *.zip*) \
2401 unzip $(distdir).zip ;;\
2402 esac
2403 chmod -R a-w $(distdir)
2404 chmod u+w $(distdir)
2405 mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
2406 chmod a-w $(distdir)
2407 test -d $(distdir)/_build || exit 0; \
2408 dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
2409 && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
2410 && am__cwd=`pwd` \
2411 && $(am__cd) $(distdir)/_build/sub \
2412 && ../../configure \
2413 $(AM_DISTCHECK_CONFIGURE_FLAGS) \
2414 $(DISTCHECK_CONFIGURE_FLAGS) \
2415 --srcdir=../.. --prefix="$$dc_install_base" \
2416 && $(MAKE) $(AM_MAKEFLAGS) \
2417 && $(MAKE) $(AM_MAKEFLAGS) dvi \
2418 && $(MAKE) $(AM_MAKEFLAGS) check \
2419 && $(MAKE) $(AM_MAKEFLAGS) install \
2420 && $(MAKE) $(AM_MAKEFLAGS) installcheck \
2421 && $(MAKE) $(AM_MAKEFLAGS) uninstall \
2422 && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
2423 distuninstallcheck \
2424 && chmod -R a-w "$$dc_install_base" \
2425 && ({ \
2426 (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
2427 && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
2428 && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
2429 && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
2430 distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
2431 } || { rm -rf "$$dc_destdir"; exit 1; }) \
2432 && rm -rf "$$dc_destdir" \
2433 && $(MAKE) $(AM_MAKEFLAGS) dist \
2434 && rm -rf $(DIST_ARCHIVES) \
2435 && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
2436 && cd "$$am__cwd" \
2437 || exit 1
2438 $(am__post_remove_distdir)
2439 @(echo "$(distdir) archives ready for distribution: "; \
2440 list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
2441 sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
2442distuninstallcheck:
2443 @test -n '$(distuninstallcheck_dir)' || { \
2444 echo 'ERROR: trying to run $@ with an empty' \
2445 '$$(distuninstallcheck_dir)' >&2; \
2446 exit 1; \
2447 }; \
2448 $(am__cd) '$(distuninstallcheck_dir)' || { \
2449 echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
2450 exit 1; \
2451 }; \
2452 test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
2453 || { echo "ERROR: files left after uninstall:" ; \
2454 if test -n "$(DESTDIR)"; then \
2455 echo " (check DESTDIR support)"; \
2456 fi ; \
2457 $(distuninstallcheck_listfiles) ; \
2458 exit 1; } >&2
2459distcleancheck: distclean
2460 @if test '$(srcdir)' = . ; then \
2461 echo "ERROR: distcleancheck can only run from a VPATH build" ; \
2462 exit 1 ; \
2463 fi
2464 @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
2465 || { echo "ERROR: files left in build directory after distclean:" ; \
2466 $(distcleancheck_listfiles) ; \
2467 exit 1; } >&2
2468check-am: all-am
2469check: check-am
2470all-am: Makefile $(LIBRARIES) $(PROGRAMS)
2471installdirs:
2472 for dir in "$(DESTDIR)$(bindir)"; do \
2473 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
2474 done
2475install: install-am
2476install-exec: install-exec-am
2477install-data: install-data-am
2478uninstall: uninstall-am
2479
2480install-am: all-am
2481 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
2482
2483installcheck: installcheck-am
2484install-strip:
2485 if test -z '$(STRIP)'; then \
2486 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
2487 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
2488 install; \
2489 else \
2490 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
2491 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
2492 "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
2493 fi
2494mostlyclean-generic:
2495
2496clean-generic:
2497
2498distclean-generic:
2499 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
2500 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
2501 -rm -f ./$(am__dirstamp)
2502 -test -z "$(DEPDIR)/$(am__dirstamp)" || rm -f $(DEPDIR)/$(am__dirstamp)
2503
2504maintainer-clean-generic:
2505 @echo "This command is intended for maintainers to use"
2506 @echo "it deletes files that may require special tools to rebuild."
2507clean: clean-am
2508
2509clean-am: clean-binPROGRAMS clean-generic clean-noinstLIBRARIES \
2510 clean-noinstPROGRAMS mostlyclean-am
2511
2512distclean: distclean-am
2513 -rm -f $(am__CONFIG_DISTCLEAN_FILES)
2514 -rm -rf ./$(DEPDIR)
2515 -rm -f Makefile
2516distclean-am: clean-am distclean-compile distclean-generic \
2517 distclean-tags
2518
2519dvi: dvi-am
2520
2521dvi-am:
2522
2523html: html-am
2524
2525html-am:
2526
2527info: info-am
2528
2529info-am:
2530
2531install-data-am:
2532
2533install-dvi: install-dvi-am
2534
2535install-dvi-am:
2536
2537install-exec-am: install-binPROGRAMS
2538
2539install-html: install-html-am
2540
2541install-html-am:
2542
2543install-info: install-info-am
2544
2545install-info-am:
2546
2547install-man:
2548
2549install-pdf: install-pdf-am
2550
2551install-pdf-am:
2552
2553install-ps: install-ps-am
2554
2555install-ps-am:
2556
2557installcheck-am:
2558
2559maintainer-clean: maintainer-clean-am
2560 -rm -f $(am__CONFIG_DISTCLEAN_FILES)
2561 -rm -rf $(top_srcdir)/autom4te.cache
2562 -rm -rf ./$(DEPDIR)
2563 -rm -f Makefile
2564maintainer-clean-am: distclean-am maintainer-clean-generic
2565
2566mostlyclean: mostlyclean-am
2567
2568mostlyclean-am: mostlyclean-compile mostlyclean-generic
2569
2570pdf: pdf-am
2571
2572pdf-am:
2573
2574ps: ps-am
2575
2576ps-am:
2577
2578uninstall-am: uninstall-binPROGRAMS
2579
2580.MAKE: install-am install-strip
2581
2582.PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-am clean \
2583 clean-binPROGRAMS clean-cscope clean-generic \
2584 clean-noinstLIBRARIES clean-noinstPROGRAMS cscope \
2585 cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
2586 dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \
2587 distcheck distclean distclean-compile distclean-generic \
2588 distclean-tags distcleancheck distdir distuninstallcheck dvi \
2589 dvi-am html html-am info info-am install install-am \
2590 install-binPROGRAMS install-data install-data-am install-dvi \
2591 install-dvi-am install-exec install-exec-am install-html \
2592 install-html-am install-info install-info-am install-man \
2593 install-pdf install-pdf-am install-ps install-ps-am \
2594 install-strip installcheck installcheck-am installdirs \
2595 maintainer-clean maintainer-clean-generic mostlyclean \
2596 mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
2597 tags tags-am uninstall uninstall-am uninstall-binPROGRAMS
2598
2599.PRECIOUS: Makefile
2600
2601test: benchmark.html benchmark.txt
2602
2603benchmark.html: benchmark.txt benchmark.pl
2604 ./benchmark.pl benchmark.txt > $@
2605
2606benchmark.txt: benchmark.sh $(GAMES)
2607 ./benchmark.sh > $@
2608
2609# Tell versions [3.59,3.63) of GNU make to not export all variables.
2610# Otherwise a system limit (for SysV at least) may be exceeded.
2611.NOEXPORT:
diff --git a/apps/plugins/puzzles/src/Makefile.nestedvm b/apps/plugins/puzzles/src/Makefile.nestedvm
new file mode 100644
index 0000000000..cf91de2e53
--- /dev/null
+++ b/apps/plugins/puzzles/src/Makefile.nestedvm
@@ -0,0 +1,556 @@
1# Makefile for puzzles under NestedVM.
2#
3# This file was created by `mkfiles.pl' from the `Recipe' file.
4# DO NOT EDIT THIS FILE DIRECTLY; edit Recipe or mkfiles.pl instead.
5
6# This path points at the nestedvm root directory
7NESTEDVM = /opt/nestedvm
8# You can define this path to point at your tools if you need to
9TOOLPATH = $(NESTEDVM)/upstream/install/bin
10CC = $(TOOLPATH)/mips-unknown-elf-gcc
11
12CFLAGS = -O2 -Wall -Werror -DSLOW_SYSTEM -g -I./ -Iicons/
13
14all: blackbox.jar bridges.jar cube.jar dominosa.jar fifteen.jar filling.jar \
15 flip.jar flood.jar galaxies.jar guess.jar inertia.jar \
16 keen.jar lightup.jar loopy.jar magnets.jar map.jar mines.jar \
17 net.jar netslide.jar nullgame.jar palisade.jar pattern.jar \
18 pearl.jar pegs.jar range.jar rect.jar samegame.jar \
19 signpost.jar singles.jar sixteen.jar slant.jar solo.jar \
20 tents.jar towers.jar tracks.jar twiddle.jar undead.jar \
21 unequal.jar unruly.jar untangle.jar
22
23blackbox.mips: blackbox.o drawing.o nestedvm.o malloc.o midend.o misc.o \
24 no-icon.o printing.o ps.o random.o version.o
25 $(CC) $(XLDFLAGS) -o $@ blackbox.o drawing.o nestedvm.o malloc.o \
26 midend.o misc.o no-icon.o printing.o ps.o random.o version.o \
27 -lm
28
29bridges.mips: bridges.o drawing.o dsf.o findloop.o nestedvm.o malloc.o \
30 midend.o misc.o no-icon.o printing.o ps.o random.o version.o
31 $(CC) $(XLDFLAGS) -o $@ bridges.o drawing.o dsf.o findloop.o \
32 nestedvm.o malloc.o midend.o misc.o no-icon.o printing.o \
33 ps.o random.o version.o -lm
34
35cube.mips: cube.o drawing.o nestedvm.o malloc.o midend.o misc.o no-icon.o \
36 printing.o ps.o random.o version.o
37 $(CC) $(XLDFLAGS) -o $@ cube.o drawing.o nestedvm.o malloc.o \
38 midend.o misc.o no-icon.o printing.o ps.o random.o version.o \
39 -lm
40
41dominosa.mips: dominosa.o drawing.o nestedvm.o laydomino.o malloc.o midend.o \
42 misc.o no-icon.o printing.o ps.o random.o version.o
43 $(CC) $(XLDFLAGS) -o $@ dominosa.o drawing.o nestedvm.o laydomino.o \
44 malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o \
45 version.o -lm
46
47fifteen.mips: drawing.o fifteen.o nestedvm.o malloc.o midend.o misc.o \
48 no-icon.o printing.o ps.o random.o version.o
49 $(CC) $(XLDFLAGS) -o $@ drawing.o fifteen.o nestedvm.o malloc.o \
50 midend.o misc.o no-icon.o printing.o ps.o random.o version.o \
51 -lm
52
53filling.mips: drawing.o dsf.o filling.o nestedvm.o malloc.o midend.o misc.o \
54 no-icon.o printing.o ps.o random.o version.o
55 $(CC) $(XLDFLAGS) -o $@ drawing.o dsf.o filling.o nestedvm.o \
56 malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o \
57 version.o -lm
58
59flip.mips: drawing.o flip.o nestedvm.o malloc.o midend.o misc.o no-icon.o \
60 printing.o ps.o random.o tree234.o version.o
61 $(CC) $(XLDFLAGS) -o $@ drawing.o flip.o nestedvm.o malloc.o \
62 midend.o misc.o no-icon.o printing.o ps.o random.o tree234.o \
63 version.o -lm
64
65flood.mips: drawing.o flood.o nestedvm.o malloc.o midend.o misc.o no-icon.o \
66 printing.o ps.o random.o version.o
67 $(CC) $(XLDFLAGS) -o $@ drawing.o flood.o nestedvm.o malloc.o \
68 midend.o misc.o no-icon.o printing.o ps.o random.o version.o \
69 -lm
70
71galaxies.mips: drawing.o dsf.o galaxies.o nestedvm.o malloc.o midend.o \
72 misc.o no-icon.o printing.o ps.o random.o version.o
73 $(CC) $(XLDFLAGS) -o $@ drawing.o dsf.o galaxies.o nestedvm.o \
74 malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o \
75 version.o -lm
76
77guess.mips: drawing.o nestedvm.o guess.o malloc.o midend.o misc.o no-icon.o \
78 printing.o ps.o random.o version.o
79 $(CC) $(XLDFLAGS) -o $@ drawing.o nestedvm.o guess.o malloc.o \
80 midend.o misc.o no-icon.o printing.o ps.o random.o version.o \
81 -lm
82
83inertia.mips: drawing.o nestedvm.o inertia.o malloc.o midend.o misc.o \
84 no-icon.o printing.o ps.o random.o version.o
85 $(CC) $(XLDFLAGS) -o $@ drawing.o nestedvm.o inertia.o malloc.o \
86 midend.o misc.o no-icon.o printing.o ps.o random.o version.o \
87 -lm
88
89keen.mips: drawing.o dsf.o nestedvm.o keen.o latin.o malloc.o maxflow.o \
90 midend.o misc.o no-icon.o printing.o ps.o random.o tree234.o \
91 version.o
92 $(CC) $(XLDFLAGS) -o $@ drawing.o dsf.o nestedvm.o keen.o latin.o \
93 malloc.o maxflow.o midend.o misc.o no-icon.o printing.o ps.o \
94 random.o tree234.o version.o -lm
95
96lightup.mips: combi.o drawing.o nestedvm.o lightup.o malloc.o midend.o \
97 misc.o no-icon.o printing.o ps.o random.o version.o
98 $(CC) $(XLDFLAGS) -o $@ combi.o drawing.o nestedvm.o lightup.o \
99 malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o \
100 version.o -lm
101
102loopy.mips: drawing.o dsf.o grid.o nestedvm.o loopgen.o loopy.o malloc.o \
103 midend.o misc.o no-icon.o penrose.o printing.o ps.o random.o \
104 tree234.o version.o
105 $(CC) $(XLDFLAGS) -o $@ drawing.o dsf.o grid.o nestedvm.o loopgen.o \
106 loopy.o malloc.o midend.o misc.o no-icon.o penrose.o \
107 printing.o ps.o random.o tree234.o version.o -lm
108
109magnets.mips: drawing.o nestedvm.o laydomino.o magnets.o malloc.o midend.o \
110 misc.o no-icon.o printing.o ps.o random.o version.o
111 $(CC) $(XLDFLAGS) -o $@ drawing.o nestedvm.o laydomino.o magnets.o \
112 malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o \
113 version.o -lm
114
115map.mips: drawing.o dsf.o nestedvm.o malloc.o map.o midend.o misc.o \
116 no-icon.o printing.o ps.o random.o version.o
117 $(CC) $(XLDFLAGS) -o $@ drawing.o dsf.o nestedvm.o malloc.o map.o \
118 midend.o misc.o no-icon.o printing.o ps.o random.o version.o \
119 -lm
120
121mines.mips: drawing.o nestedvm.o malloc.o midend.o mines.o misc.o no-icon.o \
122 printing.o ps.o random.o tree234.o version.o
123 $(CC) $(XLDFLAGS) -o $@ drawing.o nestedvm.o malloc.o midend.o \
124 mines.o misc.o no-icon.o printing.o ps.o random.o tree234.o \
125 version.o -lm
126
127net.mips: drawing.o dsf.o findloop.o nestedvm.o malloc.o midend.o misc.o \
128 net.o no-icon.o printing.o ps.o random.o tree234.o version.o
129 $(CC) $(XLDFLAGS) -o $@ drawing.o dsf.o findloop.o nestedvm.o \
130 malloc.o midend.o misc.o net.o no-icon.o printing.o ps.o \
131 random.o tree234.o version.o -lm
132
133netslide.mips: drawing.o nestedvm.o malloc.o midend.o misc.o netslide.o \
134 no-icon.o printing.o ps.o random.o tree234.o version.o
135 $(CC) $(XLDFLAGS) -o $@ drawing.o nestedvm.o malloc.o midend.o \
136 misc.o netslide.o no-icon.o printing.o ps.o random.o \
137 tree234.o version.o -lm
138
139nullgame.mips: drawing.o nestedvm.o malloc.o midend.o misc.o no-icon.o \
140 nullgame.o printing.o ps.o random.o version.o
141 $(CC) $(XLDFLAGS) -o $@ drawing.o nestedvm.o malloc.o midend.o \
142 misc.o no-icon.o nullgame.o printing.o ps.o random.o \
143 version.o -lm
144
145palisade.mips: divvy.o drawing.o dsf.o nestedvm.o malloc.o midend.o misc.o \
146 no-icon.o palisade.o printing.o ps.o random.o version.o
147 $(CC) $(XLDFLAGS) -o $@ divvy.o drawing.o dsf.o nestedvm.o malloc.o \
148 midend.o misc.o no-icon.o palisade.o printing.o ps.o \
149 random.o version.o -lm
150
151pattern.mips: drawing.o nestedvm.o malloc.o midend.o misc.o no-icon.o \
152 pattern.o printing.o ps.o random.o version.o
153 $(CC) $(XLDFLAGS) -o $@ drawing.o nestedvm.o malloc.o midend.o \
154 misc.o no-icon.o pattern.o printing.o ps.o random.o \
155 version.o -lm
156
157pearl.mips: drawing.o dsf.o grid.o nestedvm.o loopgen.o malloc.o midend.o \
158 misc.o no-icon.o pearl.o penrose.o printing.o ps.o random.o \
159 tdq.o tree234.o version.o
160 $(CC) $(XLDFLAGS) -o $@ drawing.o dsf.o grid.o nestedvm.o loopgen.o \
161 malloc.o midend.o misc.o no-icon.o pearl.o penrose.o \
162 printing.o ps.o random.o tdq.o tree234.o version.o -lm
163
164pegs.mips: drawing.o nestedvm.o malloc.o midend.o misc.o no-icon.o pegs.o \
165 printing.o ps.o random.o tree234.o version.o
166 $(CC) $(XLDFLAGS) -o $@ drawing.o nestedvm.o malloc.o midend.o \
167 misc.o no-icon.o pegs.o printing.o ps.o random.o tree234.o \
168 version.o -lm
169
170range.mips: drawing.o dsf.o nestedvm.o malloc.o midend.o misc.o no-icon.o \
171 printing.o ps.o random.o range.o version.o
172 $(CC) $(XLDFLAGS) -o $@ drawing.o dsf.o nestedvm.o malloc.o midend.o \
173 misc.o no-icon.o printing.o ps.o random.o range.o version.o \
174 -lm
175
176rect.mips: drawing.o nestedvm.o malloc.o midend.o misc.o no-icon.o \
177 printing.o ps.o random.o rect.o version.o
178 $(CC) $(XLDFLAGS) -o $@ drawing.o nestedvm.o malloc.o midend.o \
179 misc.o no-icon.o printing.o ps.o random.o rect.o version.o \
180 -lm
181
182samegame.mips: drawing.o nestedvm.o malloc.o midend.o misc.o no-icon.o \
183 printing.o ps.o random.o samegame.o version.o
184 $(CC) $(XLDFLAGS) -o $@ drawing.o nestedvm.o malloc.o midend.o \
185 misc.o no-icon.o printing.o ps.o random.o samegame.o \
186 version.o -lm
187
188signpost.mips: drawing.o dsf.o nestedvm.o malloc.o midend.o misc.o no-icon.o \
189 printing.o ps.o random.o signpost.o version.o
190 $(CC) $(XLDFLAGS) -o $@ drawing.o dsf.o nestedvm.o malloc.o midend.o \
191 misc.o no-icon.o printing.o ps.o random.o signpost.o \
192 version.o -lm
193
194singles.mips: drawing.o dsf.o nestedvm.o latin.o malloc.o maxflow.o midend.o \
195 misc.o no-icon.o printing.o ps.o random.o singles.o \
196 tree234.o version.o
197 $(CC) $(XLDFLAGS) -o $@ drawing.o dsf.o nestedvm.o latin.o malloc.o \
198 maxflow.o midend.o misc.o no-icon.o printing.o ps.o random.o \
199 singles.o tree234.o version.o -lm
200
201sixteen.mips: drawing.o nestedvm.o malloc.o midend.o misc.o no-icon.o \
202 printing.o ps.o random.o sixteen.o version.o
203 $(CC) $(XLDFLAGS) -o $@ drawing.o nestedvm.o malloc.o midend.o \
204 misc.o no-icon.o printing.o ps.o random.o sixteen.o \
205 version.o -lm
206
207slant.mips: drawing.o dsf.o findloop.o nestedvm.o malloc.o midend.o misc.o \
208 no-icon.o printing.o ps.o random.o slant.o version.o
209 $(CC) $(XLDFLAGS) -o $@ drawing.o dsf.o findloop.o nestedvm.o \
210 malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o \
211 slant.o version.o -lm
212
213solo.mips: divvy.o drawing.o dsf.o nestedvm.o malloc.o midend.o misc.o \
214 no-icon.o printing.o ps.o random.o solo.o version.o
215 $(CC) $(XLDFLAGS) -o $@ divvy.o drawing.o dsf.o nestedvm.o malloc.o \
216 midend.o misc.o no-icon.o printing.o ps.o random.o solo.o \
217 version.o -lm
218
219tents.mips: drawing.o dsf.o nestedvm.o malloc.o maxflow.o midend.o misc.o \
220 no-icon.o printing.o ps.o random.o tents.o version.o
221 $(CC) $(XLDFLAGS) -o $@ drawing.o dsf.o nestedvm.o malloc.o \
222 maxflow.o midend.o misc.o no-icon.o printing.o ps.o random.o \
223 tents.o version.o -lm
224
225towers.mips: drawing.o nestedvm.o latin.o malloc.o maxflow.o midend.o misc.o \
226 no-icon.o printing.o ps.o random.o towers.o tree234.o \
227 version.o
228 $(CC) $(XLDFLAGS) -o $@ drawing.o nestedvm.o latin.o malloc.o \
229 maxflow.o midend.o misc.o no-icon.o printing.o ps.o random.o \
230 towers.o tree234.o version.o -lm
231
232tracks.mips: drawing.o dsf.o findloop.o nestedvm.o malloc.o midend.o misc.o \
233 no-icon.o printing.o ps.o random.o tracks.o version.o
234 $(CC) $(XLDFLAGS) -o $@ drawing.o dsf.o findloop.o nestedvm.o \
235 malloc.o midend.o misc.o no-icon.o printing.o ps.o random.o \
236 tracks.o version.o -lm
237
238twiddle.mips: drawing.o nestedvm.o malloc.o midend.o misc.o no-icon.o \
239 printing.o ps.o random.o twiddle.o version.o
240 $(CC) $(XLDFLAGS) -o $@ drawing.o nestedvm.o malloc.o midend.o \
241 misc.o no-icon.o printing.o ps.o random.o twiddle.o \
242 version.o -lm
243
244undead.mips: drawing.o nestedvm.o malloc.o midend.o misc.o no-icon.o \
245 printing.o ps.o random.o undead.o version.o
246 $(CC) $(XLDFLAGS) -o $@ drawing.o nestedvm.o malloc.o midend.o \
247 misc.o no-icon.o printing.o ps.o random.o undead.o version.o \
248 -lm
249
250unequal.mips: drawing.o nestedvm.o latin.o malloc.o maxflow.o midend.o \
251 misc.o no-icon.o printing.o ps.o random.o tree234.o \
252 unequal.o version.o
253 $(CC) $(XLDFLAGS) -o $@ drawing.o nestedvm.o latin.o malloc.o \
254 maxflow.o midend.o misc.o no-icon.o printing.o ps.o random.o \
255 tree234.o unequal.o version.o -lm
256
257unruly.mips: drawing.o nestedvm.o malloc.o midend.o misc.o no-icon.o \
258 printing.o ps.o random.o unruly.o version.o
259 $(CC) $(XLDFLAGS) -o $@ drawing.o nestedvm.o malloc.o midend.o \
260 misc.o no-icon.o printing.o ps.o random.o unruly.o version.o \
261 -lm
262
263untangle.mips: drawing.o nestedvm.o malloc.o midend.o misc.o no-icon.o \
264 printing.o ps.o random.o tree234.o untangle.o version.o
265 $(CC) $(XLDFLAGS) -o $@ drawing.o nestedvm.o malloc.o midend.o \
266 misc.o no-icon.o printing.o ps.o random.o tree234.o \
267 untangle.o version.o -lm
268
269blackbox.o: ./blackbox.c ./puzzles.h
270 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
271blackbo3.o: ./blackbox.c ./puzzles.h
272 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
273bridges.o: ./bridges.c ./puzzles.h
274 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
275bridges3.o: ./bridges.c ./puzzles.h
276 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
277combi.o: ./combi.c ./puzzles.h
278 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
279cube.o: ./cube.c ./puzzles.h
280 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
281cube3.o: ./cube.c ./puzzles.h
282 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
283divvy.o: ./divvy.c ./puzzles.h
284 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
285dominosa.o: ./dominosa.c ./puzzles.h
286 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
287dominos3.o: ./dominosa.c ./puzzles.h
288 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
289drawing.o: ./drawing.c ./puzzles.h
290 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
291dsf.o: ./dsf.c ./puzzles.h
292 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
293fifteen.o: ./fifteen.c ./puzzles.h
294 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
295fifteen5.o: ./fifteen.c ./puzzles.h
296 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
297fifteen2.o: ./fifteen.c ./puzzles.h
298 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
299filling.o: ./filling.c ./puzzles.h
300 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
301filling5.o: ./filling.c ./puzzles.h
302 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
303filling2.o: ./filling.c ./puzzles.h
304 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
305findloop.o: ./findloop.c ./puzzles.h
306 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
307flip.o: ./flip.c ./puzzles.h ./tree234.h
308 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
309flip3.o: ./flip.c ./puzzles.h ./tree234.h
310 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
311flood.o: ./flood.c ./puzzles.h
312 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
313flood3.o: ./flood.c ./puzzles.h
314 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
315galaxies.o: ./galaxies.c ./puzzles.h
316 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
317galaxie7.o: ./galaxies.c ./puzzles.h
318 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
319galaxie4.o: ./galaxies.c ./puzzles.h
320 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_PICTURE_GENERATOR -c $< -o $@
321galaxie2.o: ./galaxies.c ./puzzles.h
322 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
323grid.o: ./grid.c ./puzzles.h ./tree234.h ./grid.h ./penrose.h
324 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
325nestedvm.o: ./nestedvm.c ./puzzles.h
326 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
327guess.o: ./guess.c ./puzzles.h
328 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
329guess3.o: ./guess.c ./puzzles.h
330 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
331inertia.o: ./inertia.c ./puzzles.h
332 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
333inertia3.o: ./inertia.c ./puzzles.h
334 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
335keen.o: ./keen.c ./puzzles.h ./latin.h
336 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
337keen5.o: ./keen.c ./puzzles.h ./latin.h
338 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
339keen2.o: ./keen.c ./puzzles.h ./latin.h
340 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
341latin.o: ./latin.c ./puzzles.h ./tree234.h ./maxflow.h ./latin.h
342 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
343latin8.o: ./latin.c ./puzzles.h ./tree234.h ./maxflow.h ./latin.h
344 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_LATIN_TEST -c $< -o $@
345latin6.o: ./latin.c ./puzzles.h ./tree234.h ./maxflow.h ./latin.h
346 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
347laydomino.o: ./laydomino.c ./puzzles.h
348 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
349lightup.o: ./lightup.c ./puzzles.h
350 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
351lightup5.o: ./lightup.c ./puzzles.h
352 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
353lightup2.o: ./lightup.c ./puzzles.h
354 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
355list.o: ./list.c ./puzzles.h
356 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
357loopgen.o: ./loopgen.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
358 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
359loopy.o: ./loopy.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
360 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
361loopy5.o: ./loopy.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
362 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
363loopy2.o: ./loopy.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
364 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
365magnets.o: ./magnets.c ./puzzles.h
366 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
367magnets5.o: ./magnets.c ./puzzles.h
368 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
369magnets2.o: ./magnets.c ./puzzles.h
370 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
371malloc.o: ./malloc.c ./puzzles.h
372 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
373map.o: ./map.c ./puzzles.h
374 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
375map5.o: ./map.c ./puzzles.h
376 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
377map2.o: ./map.c ./puzzles.h
378 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
379maxflow.o: ./maxflow.c ./maxflow.h ./puzzles.h
380 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
381midend.o: ./midend.c ./puzzles.h
382 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
383mines.o: ./mines.c ./tree234.h ./puzzles.h
384 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
385mines5.o: ./mines.c ./tree234.h ./puzzles.h
386 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
387mines2.o: ./mines.c ./tree234.h ./puzzles.h
388 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_OBFUSCATOR -c $< -o $@
389misc.o: ./misc.c ./puzzles.h
390 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
391net.o: ./net.c ./puzzles.h ./tree234.h
392 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
393net3.o: ./net.c ./puzzles.h ./tree234.h
394 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
395netslide.o: ./netslide.c ./puzzles.h ./tree234.h
396 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
397netslid3.o: ./netslide.c ./puzzles.h ./tree234.h
398 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
399no-icon.o: ./no-icon.c
400 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
401nullfe.o: ./nullfe.c ./puzzles.h
402 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
403nullgame.o: ./nullgame.c ./puzzles.h
404 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
405obfusc.o: ./obfusc.c ./puzzles.h
406 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
407osx.o: ./osx.m ./puzzles.h
408 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
409palisade.o: ./palisade.c ./puzzles.h
410 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
411palisad3.o: ./palisade.c ./puzzles.h
412 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
413pattern.o: ./pattern.c ./puzzles.h
414 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
415pattern7.o: ./pattern.c ./puzzles.h
416 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
417pattern4.o: ./pattern.c ./puzzles.h
418 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_PICTURE_GENERATOR -c $< -o $@
419pattern2.o: ./pattern.c ./puzzles.h
420 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
421pearl.o: ./pearl.c ./puzzles.h ./grid.h ./loopgen.h
422 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
423pearl5.o: ./pearl.c ./puzzles.h ./grid.h ./loopgen.h
424 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
425pearl2.o: ./pearl.c ./puzzles.h ./grid.h ./loopgen.h
426 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
427pegs.o: ./pegs.c ./puzzles.h ./tree234.h
428 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
429pegs3.o: ./pegs.c ./puzzles.h ./tree234.h
430 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
431penrose.o: ./penrose.c ./puzzles.h ./penrose.h
432 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
433printing.o: ./printing.c ./puzzles.h
434 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
435ps.o: ./ps.c ./puzzles.h
436 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
437random.o: ./random.c ./puzzles.h
438 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
439range.o: ./range.c ./puzzles.h
440 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
441range3.o: ./range.c ./puzzles.h
442 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
443rect.o: ./rect.c ./puzzles.h
444 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
445rect3.o: ./rect.c ./puzzles.h
446 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
447samegame.o: ./samegame.c ./puzzles.h
448 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
449samegam3.o: ./samegame.c ./puzzles.h
450 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
451signpost.o: ./signpost.c ./puzzles.h
452 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
453signpos5.o: ./signpost.c ./puzzles.h
454 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
455signpos2.o: ./signpost.c ./puzzles.h
456 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
457singles.o: ./singles.c ./puzzles.h ./latin.h
458 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
459singles5.o: ./singles.c ./puzzles.h ./latin.h
460 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
461singles3.o: ./singles.c ./puzzles.h ./latin.h
462 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
463sixteen.o: ./sixteen.c ./puzzles.h
464 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
465sixteen3.o: ./sixteen.c ./puzzles.h
466 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
467slant.o: ./slant.c ./puzzles.h
468 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
469slant5.o: ./slant.c ./puzzles.h
470 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
471slant2.o: ./slant.c ./puzzles.h
472 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
473solo.o: ./solo.c ./puzzles.h
474 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
475solo5.o: ./solo.c ./puzzles.h
476 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
477solo2.o: ./solo.c ./puzzles.h
478 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
479tdq.o: ./tdq.c ./puzzles.h
480 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
481tents.o: ./tents.c ./puzzles.h ./maxflow.h
482 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
483tents5.o: ./tents.c ./puzzles.h ./maxflow.h
484 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
485tents3.o: ./tents.c ./puzzles.h ./maxflow.h
486 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
487towers.o: ./towers.c ./puzzles.h ./latin.h
488 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
489towers5.o: ./towers.c ./puzzles.h ./latin.h
490 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
491towers2.o: ./towers.c ./puzzles.h ./latin.h
492 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
493tracks.o: ./tracks.c ./puzzles.h
494 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
495tracks3.o: ./tracks.c ./puzzles.h
496 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
497tree234.o: ./tree234.c ./tree234.h ./puzzles.h
498 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
499twiddle.o: ./twiddle.c ./puzzles.h
500 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
501twiddle3.o: ./twiddle.c ./puzzles.h
502 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
503undead.o: ./undead.c ./puzzles.h
504 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
505undead3.o: ./undead.c ./puzzles.h
506 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
507unequal.o: ./unequal.c ./puzzles.h ./latin.h
508 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
509unequal5.o: ./unequal.c ./puzzles.h ./latin.h
510 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
511unequal2.o: ./unequal.c ./puzzles.h ./latin.h
512 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
513unruly.o: ./unruly.c ./puzzles.h
514 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
515unruly5.o: ./unruly.c ./puzzles.h
516 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
517unruly2.o: ./unruly.c ./puzzles.h
518 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
519untangle.o: ./untangle.c ./puzzles.h ./tree234.h
520 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
521untangl3.o: ./untangle.c ./puzzles.h ./tree234.h
522 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
523version.o: ./version.c ./version.h
524 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
525windows.o: ./windows.c ./puzzles.h ./resource.h
526 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
527windows1.o: ./windows.c ./puzzles.h ./resource.h
528 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
529
530.PRECIOUS: %.class
531%.class: %.mips
532 java -cp $(NESTEDVM)/build:$(NESTEDVM)/upstream/build/classgen/build \
533 org.ibex.nestedvm.Compiler -outformat class -d . \
534 PuzzleEngine $<
535 mv PuzzleEngine.class $@
536
537org:
538 mkdir -p org/ibex/nestedvm/util
539 cp $(NESTEDVM)/build/org/ibex/nestedvm/Registers.class org/ibex/nestedvm
540 cp $(NESTEDVM)/build/org/ibex/nestedvm/UsermodeConstants.class org/ibex/nestedvm
541 cp $(NESTEDVM)/build/org/ibex/nestedvm/Runtime*.class org/ibex/nestedvm
542 cp $(NESTEDVM)/build/org/ibex/nestedvm/util/Platform*.class org/ibex/nestedvm/util
543 cp $(NESTEDVM)/build/org/ibex/nestedvm/util/Seekable*.class org/ibex/nestedvm/util
544 echo "Main-Class: PuzzleApplet" >applet.manifest
545
546PuzzleApplet.class: PuzzleApplet.java org
547 javac -source 1.3 -target 1.3 PuzzleApplet.java
548
549%.jar: %.class PuzzleApplet.class org
550 mv $< PuzzleEngine.class
551 jar cfm $@ applet.manifest PuzzleEngine.class PuzzleApplet*.class org
552 echo '<applet archive="'$@'" code="PuzzleApplet" width="700" height="500"></applet>' >$*.html
553 mv PuzzleEngine.class $<
554
555clean:
556 rm -rf *.o *.mips *.class *.html *.jar org applet.manifest
diff --git a/apps/plugins/puzzles/src/Makefile.osx b/apps/plugins/puzzles/src/Makefile.osx
new file mode 100644
index 0000000000..5d607d88e3
--- /dev/null
+++ b/apps/plugins/puzzles/src/Makefile.osx
@@ -0,0 +1,574 @@
1# Makefile for puzzles under Mac OS X.
2#
3# This file was created by `mkfiles.pl' from the `Recipe' file.
4# DO NOT EDIT THIS FILE DIRECTLY; edit Recipe or mkfiles.pl instead.
5CC = $(TOOLPATH)gcc
6LIPO = $(TOOLPATH)lipo
7
8CFLAGS = -O2 -Wall -Werror -g -I./ -Iicons/
9LDFLAGS = -framework Cocoa
10all: Puzzles fifteensolver fillingsolver galaxiespicture galaxiessolver \
11 keensolver latincheck lightupsolver loopysolver \
12 magnetssolver mapsolver mineobfusc obfusc patternpicture \
13 patternsolver pearlbench signpostsolver singlessolver \
14 slantsolver solosolver tentssolver towerssolver \
15 unequalsolver unrulysolver
16Puzzles_extra = Puzzles.app/Contents/Resources/Help/index.html
17Puzzles.app/Contents/Resources/Help/index.html: \
18 Puzzles.app/Contents/Resources/Help osx-help.but puzzles.but
19 cd Puzzles.app/Contents/Resources/Help; \
20 halibut --html ../../../../osx-help.but ../../../../puzzles.but
21Puzzles.app/Contents/Resources/Help: Puzzles.app/Contents/Resources
22 mkdir -p Puzzles.app/Contents/Resources/Help
23
24release: Puzzles.dmg
25Puzzles.dmg: Puzzles
26 rm -f raw.dmg
27 hdiutil create -megabytes 5 -layout NONE raw.dmg
28 hdid -nomount raw.dmg > devicename
29 newfs_hfs -v "Simon Tatham's Puzzle Collection" `cat devicename`
30 hdiutil eject `cat devicename`
31 hdid raw.dmg | cut -f1 -d' ' > devicename
32 cp -R Puzzles.app /Volumes/"Simon Tatham's Puzzle Collection"
33 hdiutil eject `cat devicename`
34 rm -f Puzzles.dmg
35 hdiutil convert -format UDCO raw.dmg -o Puzzles.dmg
36 rm -f raw.dmg devicename
37
38.SUFFIXES: .o .c .m
39
40
41
42Puzzles.app:
43 mkdir -p $@
44Puzzles.app/Contents: Puzzles.app
45 mkdir -p $@
46Puzzles.app/Contents/MacOS: Puzzles.app/Contents
47 mkdir -p $@
48Puzzles.app/Contents/Resources: Puzzles.app/Contents
49 mkdir -p $@
50Puzzles.app/Contents/Resources/Puzzles.icns: Puzzles.app/Contents/Resources osx.icns
51 cp osx.icns $@
52Puzzles.app/Contents/Info.plist: Puzzles.app/Contents/Resources osx-info.plist
53 cp osx-info.plist $@
54Puzzles: Puzzles.app/Contents/MacOS/Puzzles \
55 Puzzles.app/Contents/Resources/Puzzles.icns \
56 Puzzles.app/Contents/Info.plist $(Puzzles_extra)
57
58Puzzles.i386.bin: blackbo3.i386.o bridges3.i386.o combi.i386.o cube3.i386.o \
59 divvy.i386.o dominos3.i386.o drawing.i386.o dsf.i386.o \
60 fifteen5.i386.o filling5.i386.o findloop.i386.o flip3.i386.o \
61 flood3.i386.o galaxie7.i386.o grid.i386.o guess3.i386.o \
62 inertia3.i386.o keen5.i386.o latin.i386.o laydomino.i386.o \
63 lightup5.i386.o list.i386.o loopgen.i386.o loopy5.i386.o \
64 magnets5.i386.o malloc.i386.o map5.i386.o maxflow.i386.o \
65 midend.i386.o mines5.i386.o misc.i386.o net3.i386.o \
66 netslid3.i386.o osx.i386.o palisad3.i386.o pattern7.i386.o \
67 pearl5.i386.o pegs3.i386.o penrose.i386.o random.i386.o \
68 range3.i386.o rect3.i386.o samegam3.i386.o signpos5.i386.o \
69 singles5.i386.o sixteen3.i386.o slant5.i386.o solo5.i386.o \
70 tdq.i386.o tents5.i386.o towers5.i386.o tracks3.i386.o \
71 tree234.i386.o twiddle3.i386.o undead3.i386.o \
72 unequal5.i386.o unruly5.i386.o untangl3.i386.o \
73 version.i386.o
74 $(CC) -arch i386 -mmacosx-version-min=10.4 $(LDFLAGS) -o $@ \
75 blackbo3.i386.o bridges3.i386.o combi.i386.o cube3.i386.o \
76 divvy.i386.o dominos3.i386.o drawing.i386.o dsf.i386.o \
77 fifteen5.i386.o filling5.i386.o findloop.i386.o flip3.i386.o \
78 flood3.i386.o galaxie7.i386.o grid.i386.o guess3.i386.o \
79 inertia3.i386.o keen5.i386.o latin.i386.o laydomino.i386.o \
80 lightup5.i386.o list.i386.o loopgen.i386.o loopy5.i386.o \
81 magnets5.i386.o malloc.i386.o map5.i386.o maxflow.i386.o \
82 midend.i386.o mines5.i386.o misc.i386.o net3.i386.o \
83 netslid3.i386.o osx.i386.o palisad3.i386.o pattern7.i386.o \
84 pearl5.i386.o pegs3.i386.o penrose.i386.o random.i386.o \
85 range3.i386.o rect3.i386.o samegam3.i386.o signpos5.i386.o \
86 singles5.i386.o sixteen3.i386.o slant5.i386.o solo5.i386.o \
87 tdq.i386.o tents5.i386.o towers5.i386.o tracks3.i386.o \
88 tree234.i386.o twiddle3.i386.o undead3.i386.o \
89 unequal5.i386.o unruly5.i386.o untangl3.i386.o \
90 version.i386.o
91
92Puzzles.app/Contents/MacOS/Puzzles: Puzzles.app/Contents/MacOS \
93 Puzzles.i386.bin
94 $(LIPO) -create Puzzles.i386.bin -output $@
95
96fifteensolver.i386: fifteen2.i386.o malloc.i386.o misc.i386.o nullfe.i386.o \
97 random.i386.o
98 $(CC) -arch i386 -mmacosx-version-min=10.4 $(ULDFLAGS) -o $@ \
99 fifteen2.i386.o malloc.i386.o misc.i386.o nullfe.i386.o \
100 random.i386.o
101
102fifteensolver: fifteensolver.i386
103 $(LIPO) -create fifteensolver.i386 -output $@
104
105fillingsolver.i386: dsf.i386.o filling2.i386.o malloc.i386.o misc.i386.o \
106 nullfe.i386.o random.i386.o
107 $(CC) -arch i386 -mmacosx-version-min=10.4 $(ULDFLAGS) -o $@ \
108 dsf.i386.o filling2.i386.o malloc.i386.o misc.i386.o \
109 nullfe.i386.o random.i386.o
110
111fillingsolver: fillingsolver.i386
112 $(LIPO) -create fillingsolver.i386 -output $@
113
114galaxiespicture.i386: dsf.i386.o galaxie4.i386.o malloc.i386.o misc.i386.o \
115 nullfe.i386.o random.i386.o
116 $(CC) -arch i386 -mmacosx-version-min=10.4 $(ULDFLAGS) -o $@ \
117 dsf.i386.o galaxie4.i386.o malloc.i386.o misc.i386.o \
118 nullfe.i386.o random.i386.o -lm
119
120galaxiespicture: galaxiespicture.i386
121 $(LIPO) -create galaxiespicture.i386 -output $@
122
123galaxiessolver.i386: dsf.i386.o galaxie2.i386.o malloc.i386.o misc.i386.o \
124 nullfe.i386.o random.i386.o
125 $(CC) -arch i386 -mmacosx-version-min=10.4 $(ULDFLAGS) -o $@ \
126 dsf.i386.o galaxie2.i386.o malloc.i386.o misc.i386.o \
127 nullfe.i386.o random.i386.o -lm
128
129galaxiessolver: galaxiessolver.i386
130 $(LIPO) -create galaxiessolver.i386 -output $@
131
132keensolver.i386: dsf.i386.o keen2.i386.o latin6.i386.o malloc.i386.o \
133 maxflow.i386.o misc.i386.o nullfe.i386.o random.i386.o \
134 tree234.i386.o
135 $(CC) -arch i386 -mmacosx-version-min=10.4 $(ULDFLAGS) -o $@ \
136 dsf.i386.o keen2.i386.o latin6.i386.o malloc.i386.o \
137 maxflow.i386.o misc.i386.o nullfe.i386.o random.i386.o \
138 tree234.i386.o
139
140keensolver: keensolver.i386
141 $(LIPO) -create keensolver.i386 -output $@
142
143latincheck.i386: latin8.i386.o malloc.i386.o maxflow.i386.o misc.i386.o \
144 nullfe.i386.o random.i386.o tree234.i386.o
145 $(CC) -arch i386 -mmacosx-version-min=10.4 $(ULDFLAGS) -o $@ \
146 latin8.i386.o malloc.i386.o maxflow.i386.o misc.i386.o \
147 nullfe.i386.o random.i386.o tree234.i386.o
148
149latincheck: latincheck.i386
150 $(LIPO) -create latincheck.i386 -output $@
151
152lightupsolver.i386: combi.i386.o lightup2.i386.o malloc.i386.o misc.i386.o \
153 nullfe.i386.o random.i386.o
154 $(CC) -arch i386 -mmacosx-version-min=10.4 $(ULDFLAGS) -o $@ \
155 combi.i386.o lightup2.i386.o malloc.i386.o misc.i386.o \
156 nullfe.i386.o random.i386.o
157
158lightupsolver: lightupsolver.i386
159 $(LIPO) -create lightupsolver.i386 -output $@
160
161loopysolver.i386: dsf.i386.o grid.i386.o loopgen.i386.o loopy2.i386.o \
162 malloc.i386.o misc.i386.o nullfe.i386.o penrose.i386.o \
163 random.i386.o tree234.i386.o
164 $(CC) -arch i386 -mmacosx-version-min=10.4 $(ULDFLAGS) -o $@ \
165 dsf.i386.o grid.i386.o loopgen.i386.o loopy2.i386.o \
166 malloc.i386.o misc.i386.o nullfe.i386.o penrose.i386.o \
167 random.i386.o tree234.i386.o -lm
168
169loopysolver: loopysolver.i386
170 $(LIPO) -create loopysolver.i386 -output $@
171
172magnetssolver.i386: laydomino.i386.o magnets2.i386.o malloc.i386.o \
173 misc.i386.o nullfe.i386.o random.i386.o
174 $(CC) -arch i386 -mmacosx-version-min=10.4 $(ULDFLAGS) -o $@ \
175 laydomino.i386.o magnets2.i386.o malloc.i386.o misc.i386.o \
176 nullfe.i386.o random.i386.o -lm
177
178magnetssolver: magnetssolver.i386
179 $(LIPO) -create magnetssolver.i386 -output $@
180
181mapsolver.i386: dsf.i386.o malloc.i386.o map2.i386.o misc.i386.o \
182 nullfe.i386.o random.i386.o
183 $(CC) -arch i386 -mmacosx-version-min=10.4 $(ULDFLAGS) -o $@ \
184 dsf.i386.o malloc.i386.o map2.i386.o misc.i386.o \
185 nullfe.i386.o random.i386.o -lm
186
187mapsolver: mapsolver.i386
188 $(LIPO) -create mapsolver.i386 -output $@
189
190mineobfusc.i386: malloc.i386.o mines2.i386.o misc.i386.o nullfe.i386.o \
191 random.i386.o tree234.i386.o
192 $(CC) -arch i386 -mmacosx-version-min=10.4 $(ULDFLAGS) -o $@ \
193 malloc.i386.o mines2.i386.o misc.i386.o nullfe.i386.o \
194 random.i386.o tree234.i386.o
195
196mineobfusc: mineobfusc.i386
197 $(LIPO) -create mineobfusc.i386 -output $@
198
199obfusc.i386: malloc.i386.o misc.i386.o nullfe.i386.o obfusc.i386.o \
200 random.i386.o
201 $(CC) -arch i386 -mmacosx-version-min=10.4 $(ULDFLAGS) -o $@ \
202 malloc.i386.o misc.i386.o nullfe.i386.o obfusc.i386.o \
203 random.i386.o
204
205obfusc: obfusc.i386
206 $(LIPO) -create obfusc.i386 -output $@
207
208patternpicture.i386: malloc.i386.o misc.i386.o nullfe.i386.o pattern4.i386.o \
209 random.i386.o
210 $(CC) -arch i386 -mmacosx-version-min=10.4 $(ULDFLAGS) -o $@ \
211 malloc.i386.o misc.i386.o nullfe.i386.o pattern4.i386.o \
212 random.i386.o
213
214patternpicture: patternpicture.i386
215 $(LIPO) -create patternpicture.i386 -output $@
216
217patternsolver.i386: malloc.i386.o misc.i386.o nullfe.i386.o pattern2.i386.o \
218 random.i386.o
219 $(CC) -arch i386 -mmacosx-version-min=10.4 $(ULDFLAGS) -o $@ \
220 malloc.i386.o misc.i386.o nullfe.i386.o pattern2.i386.o \
221 random.i386.o
222
223patternsolver: patternsolver.i386
224 $(LIPO) -create patternsolver.i386 -output $@
225
226pearlbench.i386: dsf.i386.o grid.i386.o loopgen.i386.o malloc.i386.o \
227 misc.i386.o nullfe.i386.o pearl2.i386.o penrose.i386.o \
228 random.i386.o tdq.i386.o tree234.i386.o
229 $(CC) -arch i386 -mmacosx-version-min=10.4 $(ULDFLAGS) -o $@ \
230 dsf.i386.o grid.i386.o loopgen.i386.o malloc.i386.o \
231 misc.i386.o nullfe.i386.o pearl2.i386.o penrose.i386.o \
232 random.i386.o tdq.i386.o tree234.i386.o -lm
233
234pearlbench: pearlbench.i386
235 $(LIPO) -create pearlbench.i386 -output $@
236
237signpostsolver.i386: dsf.i386.o malloc.i386.o misc.i386.o nullfe.i386.o \
238 random.i386.o signpos2.i386.o
239 $(CC) -arch i386 -mmacosx-version-min=10.4 $(ULDFLAGS) -o $@ \
240 dsf.i386.o malloc.i386.o misc.i386.o nullfe.i386.o \
241 random.i386.o signpos2.i386.o -lm
242
243signpostsolver: signpostsolver.i386
244 $(LIPO) -create signpostsolver.i386 -output $@
245
246singlessolver.i386: dsf.i386.o latin.i386.o malloc.i386.o maxflow.i386.o \
247 misc.i386.o nullfe.i386.o random.i386.o singles3.i386.o \
248 tree234.i386.o
249 $(CC) -arch i386 -mmacosx-version-min=10.4 $(ULDFLAGS) -o $@ \
250 dsf.i386.o latin.i386.o malloc.i386.o maxflow.i386.o \
251 misc.i386.o nullfe.i386.o random.i386.o singles3.i386.o \
252 tree234.i386.o
253
254singlessolver: singlessolver.i386
255 $(LIPO) -create singlessolver.i386 -output $@
256
257slantsolver.i386: dsf.i386.o findloop.i386.o malloc.i386.o misc.i386.o \
258 nullfe.i386.o random.i386.o slant2.i386.o
259 $(CC) -arch i386 -mmacosx-version-min=10.4 $(ULDFLAGS) -o $@ \
260 dsf.i386.o findloop.i386.o malloc.i386.o misc.i386.o \
261 nullfe.i386.o random.i386.o slant2.i386.o
262
263slantsolver: slantsolver.i386
264 $(LIPO) -create slantsolver.i386 -output $@
265
266solosolver.i386: divvy.i386.o dsf.i386.o malloc.i386.o misc.i386.o \
267 nullfe.i386.o random.i386.o solo2.i386.o
268 $(CC) -arch i386 -mmacosx-version-min=10.4 $(ULDFLAGS) -o $@ \
269 divvy.i386.o dsf.i386.o malloc.i386.o misc.i386.o \
270 nullfe.i386.o random.i386.o solo2.i386.o
271
272solosolver: solosolver.i386
273 $(LIPO) -create solosolver.i386 -output $@
274
275tentssolver.i386: dsf.i386.o malloc.i386.o maxflow.i386.o misc.i386.o \
276 nullfe.i386.o random.i386.o tents3.i386.o
277 $(CC) -arch i386 -mmacosx-version-min=10.4 $(ULDFLAGS) -o $@ \
278 dsf.i386.o malloc.i386.o maxflow.i386.o misc.i386.o \
279 nullfe.i386.o random.i386.o tents3.i386.o
280
281tentssolver: tentssolver.i386
282 $(LIPO) -create tentssolver.i386 -output $@
283
284towerssolver.i386: latin6.i386.o malloc.i386.o maxflow.i386.o misc.i386.o \
285 nullfe.i386.o random.i386.o towers2.i386.o tree234.i386.o
286 $(CC) -arch i386 -mmacosx-version-min=10.4 $(ULDFLAGS) -o $@ \
287 latin6.i386.o malloc.i386.o maxflow.i386.o misc.i386.o \
288 nullfe.i386.o random.i386.o towers2.i386.o tree234.i386.o
289
290towerssolver: towerssolver.i386
291 $(LIPO) -create towerssolver.i386 -output $@
292
293unequalsolver.i386: latin6.i386.o malloc.i386.o maxflow.i386.o misc.i386.o \
294 nullfe.i386.o random.i386.o tree234.i386.o unequal2.i386.o
295 $(CC) -arch i386 -mmacosx-version-min=10.4 $(ULDFLAGS) -o $@ \
296 latin6.i386.o malloc.i386.o maxflow.i386.o misc.i386.o \
297 nullfe.i386.o random.i386.o tree234.i386.o unequal2.i386.o
298
299unequalsolver: unequalsolver.i386
300 $(LIPO) -create unequalsolver.i386 -output $@
301
302unrulysolver.i386: malloc.i386.o misc.i386.o nullfe.i386.o random.i386.o \
303 unruly2.i386.o
304 $(CC) -arch i386 -mmacosx-version-min=10.4 $(ULDFLAGS) -o $@ \
305 malloc.i386.o misc.i386.o nullfe.i386.o random.i386.o \
306 unruly2.i386.o
307
308unrulysolver: unrulysolver.i386
309 $(LIPO) -create unrulysolver.i386 -output $@
310
311blackbox.i386.o: ./blackbox.c ./puzzles.h
312 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
313blackbo3.i386.o: ./blackbox.c ./puzzles.h
314 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
315bridges.i386.o: ./bridges.c ./puzzles.h
316 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
317bridges3.i386.o: ./bridges.c ./puzzles.h
318 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
319combi.i386.o: ./combi.c ./puzzles.h
320 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
321cube.i386.o: ./cube.c ./puzzles.h
322 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
323cube3.i386.o: ./cube.c ./puzzles.h
324 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
325divvy.i386.o: ./divvy.c ./puzzles.h
326 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
327dominosa.i386.o: ./dominosa.c ./puzzles.h
328 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
329dominos3.i386.o: ./dominosa.c ./puzzles.h
330 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
331drawing.i386.o: ./drawing.c ./puzzles.h
332 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
333dsf.i386.o: ./dsf.c ./puzzles.h
334 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
335fifteen.i386.o: ./fifteen.c ./puzzles.h
336 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
337fifteen5.i386.o: ./fifteen.c ./puzzles.h
338 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
339fifteen2.i386.o: ./fifteen.c ./puzzles.h
340 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
341filling.i386.o: ./filling.c ./puzzles.h
342 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
343filling5.i386.o: ./filling.c ./puzzles.h
344 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
345filling2.i386.o: ./filling.c ./puzzles.h
346 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
347findloop.i386.o: ./findloop.c ./puzzles.h
348 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
349flip.i386.o: ./flip.c ./puzzles.h ./tree234.h
350 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
351flip3.i386.o: ./flip.c ./puzzles.h ./tree234.h
352 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
353flood.i386.o: ./flood.c ./puzzles.h
354 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
355flood3.i386.o: ./flood.c ./puzzles.h
356 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
357galaxies.i386.o: ./galaxies.c ./puzzles.h
358 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
359galaxie7.i386.o: ./galaxies.c ./puzzles.h
360 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
361galaxie4.i386.o: ./galaxies.c ./puzzles.h
362 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_PICTURE_GENERATOR -c $< -o $@
363galaxie2.i386.o: ./galaxies.c ./puzzles.h
364 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
365grid.i386.o: ./grid.c ./puzzles.h ./tree234.h ./grid.h ./penrose.h
366 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
367gtk.i386.o: ./gtk.c ./puzzles.h
368 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
369guess.i386.o: ./guess.c ./puzzles.h
370 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
371guess3.i386.o: ./guess.c ./puzzles.h
372 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
373inertia.i386.o: ./inertia.c ./puzzles.h
374 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
375inertia3.i386.o: ./inertia.c ./puzzles.h
376 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
377keen.i386.o: ./keen.c ./puzzles.h ./latin.h
378 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
379keen5.i386.o: ./keen.c ./puzzles.h ./latin.h
380 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
381keen2.i386.o: ./keen.c ./puzzles.h ./latin.h
382 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
383latin.i386.o: ./latin.c ./puzzles.h ./tree234.h ./maxflow.h ./latin.h
384 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
385latin8.i386.o: ./latin.c ./puzzles.h ./tree234.h ./maxflow.h ./latin.h
386 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_LATIN_TEST -c $< -o $@
387latin6.i386.o: ./latin.c ./puzzles.h ./tree234.h ./maxflow.h ./latin.h
388 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
389laydomino.i386.o: ./laydomino.c ./puzzles.h
390 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
391lightup.i386.o: ./lightup.c ./puzzles.h
392 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
393lightup5.i386.o: ./lightup.c ./puzzles.h
394 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
395lightup2.i386.o: ./lightup.c ./puzzles.h
396 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
397list.i386.o: ./list.c ./puzzles.h
398 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
399loopgen.i386.o: ./loopgen.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
400 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
401loopy.i386.o: ./loopy.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
402 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
403loopy5.i386.o: ./loopy.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
404 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
405loopy2.i386.o: ./loopy.c ./puzzles.h ./tree234.h ./grid.h ./loopgen.h
406 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
407magnets.i386.o: ./magnets.c ./puzzles.h
408 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
409magnets5.i386.o: ./magnets.c ./puzzles.h
410 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
411magnets2.i386.o: ./magnets.c ./puzzles.h
412 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
413malloc.i386.o: ./malloc.c ./puzzles.h
414 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
415map.i386.o: ./map.c ./puzzles.h
416 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
417map5.i386.o: ./map.c ./puzzles.h
418 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
419map2.i386.o: ./map.c ./puzzles.h
420 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
421maxflow.i386.o: ./maxflow.c ./maxflow.h ./puzzles.h
422 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
423midend.i386.o: ./midend.c ./puzzles.h
424 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
425mines.i386.o: ./mines.c ./tree234.h ./puzzles.h
426 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
427mines5.i386.o: ./mines.c ./tree234.h ./puzzles.h
428 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
429mines2.i386.o: ./mines.c ./tree234.h ./puzzles.h
430 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_OBFUSCATOR -c $< -o $@
431misc.i386.o: ./misc.c ./puzzles.h
432 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
433net.i386.o: ./net.c ./puzzles.h ./tree234.h
434 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
435net3.i386.o: ./net.c ./puzzles.h ./tree234.h
436 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
437netslide.i386.o: ./netslide.c ./puzzles.h ./tree234.h
438 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
439netslid3.i386.o: ./netslide.c ./puzzles.h ./tree234.h
440 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
441no-icon.i386.o: ./no-icon.c
442 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
443nullfe.i386.o: ./nullfe.c ./puzzles.h
444 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
445nullgame.i386.o: ./nullgame.c ./puzzles.h
446 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
447obfusc.i386.o: ./obfusc.c ./puzzles.h
448 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
449osx.i386.o: ./osx.m ./puzzles.h
450 $(CC) -arch i386 -mmacosx-version-min=10.4 -x objective-c $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
451palisade.i386.o: ./palisade.c ./puzzles.h
452 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
453palisad3.i386.o: ./palisade.c ./puzzles.h
454 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
455pattern.i386.o: ./pattern.c ./puzzles.h
456 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
457pattern7.i386.o: ./pattern.c ./puzzles.h
458 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
459pattern4.i386.o: ./pattern.c ./puzzles.h
460 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_PICTURE_GENERATOR -c $< -o $@
461pattern2.i386.o: ./pattern.c ./puzzles.h
462 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
463pearl.i386.o: ./pearl.c ./puzzles.h ./grid.h ./loopgen.h
464 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
465pearl5.i386.o: ./pearl.c ./puzzles.h ./grid.h ./loopgen.h
466 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
467pearl2.i386.o: ./pearl.c ./puzzles.h ./grid.h ./loopgen.h
468 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
469pegs.i386.o: ./pegs.c ./puzzles.h ./tree234.h
470 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
471pegs3.i386.o: ./pegs.c ./puzzles.h ./tree234.h
472 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
473penrose.i386.o: ./penrose.c ./puzzles.h ./penrose.h
474 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
475printing.i386.o: ./printing.c ./puzzles.h
476 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
477ps.i386.o: ./ps.c ./puzzles.h
478 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
479random.i386.o: ./random.c ./puzzles.h
480 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
481range.i386.o: ./range.c ./puzzles.h
482 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
483range3.i386.o: ./range.c ./puzzles.h
484 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
485rect.i386.o: ./rect.c ./puzzles.h
486 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
487rect3.i386.o: ./rect.c ./puzzles.h
488 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
489samegame.i386.o: ./samegame.c ./puzzles.h
490 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
491samegam3.i386.o: ./samegame.c ./puzzles.h
492 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
493signpost.i386.o: ./signpost.c ./puzzles.h
494 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
495signpos5.i386.o: ./signpost.c ./puzzles.h
496 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
497signpos2.i386.o: ./signpost.c ./puzzles.h
498 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
499singles.i386.o: ./singles.c ./puzzles.h ./latin.h
500 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
501singles5.i386.o: ./singles.c ./puzzles.h ./latin.h
502 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
503singles3.i386.o: ./singles.c ./puzzles.h ./latin.h
504 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
505sixteen.i386.o: ./sixteen.c ./puzzles.h
506 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
507sixteen3.i386.o: ./sixteen.c ./puzzles.h
508 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
509slant.i386.o: ./slant.c ./puzzles.h
510 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
511slant5.i386.o: ./slant.c ./puzzles.h
512 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
513slant2.i386.o: ./slant.c ./puzzles.h
514 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
515solo.i386.o: ./solo.c ./puzzles.h
516 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
517solo5.i386.o: ./solo.c ./puzzles.h
518 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
519solo2.i386.o: ./solo.c ./puzzles.h
520 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
521tdq.i386.o: ./tdq.c ./puzzles.h
522 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
523tents.i386.o: ./tents.c ./puzzles.h ./maxflow.h
524 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
525tents5.i386.o: ./tents.c ./puzzles.h ./maxflow.h
526 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
527tents3.i386.o: ./tents.c ./puzzles.h ./maxflow.h
528 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
529towers.i386.o: ./towers.c ./puzzles.h ./latin.h
530 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
531towers5.i386.o: ./towers.c ./puzzles.h ./latin.h
532 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
533towers2.i386.o: ./towers.c ./puzzles.h ./latin.h
534 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
535tracks.i386.o: ./tracks.c ./puzzles.h
536 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
537tracks3.i386.o: ./tracks.c ./puzzles.h
538 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
539tree234.i386.o: ./tree234.c ./tree234.h ./puzzles.h
540 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
541twiddle.i386.o: ./twiddle.c ./puzzles.h
542 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
543twiddle3.i386.o: ./twiddle.c ./puzzles.h
544 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
545undead.i386.o: ./undead.c ./puzzles.h
546 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
547undead3.i386.o: ./undead.c ./puzzles.h
548 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
549unequal.i386.o: ./unequal.c ./puzzles.h ./latin.h
550 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
551unequal5.i386.o: ./unequal.c ./puzzles.h ./latin.h
552 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
553unequal2.i386.o: ./unequal.c ./puzzles.h ./latin.h
554 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
555unruly.i386.o: ./unruly.c ./puzzles.h
556 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
557unruly5.i386.o: ./unruly.c ./puzzles.h
558 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
559unruly2.i386.o: ./unruly.c ./puzzles.h
560 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DSTANDALONE_SOLVER -c $< -o $@
561untangle.i386.o: ./untangle.c ./puzzles.h ./tree234.h
562 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
563untangl3.i386.o: ./untangle.c ./puzzles.h ./tree234.h
564 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
565version.i386.o: ./version.c ./version.h
566 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
567windows.i386.o: ./windows.c ./puzzles.h ./resource.h
568 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -c $< -o $@
569windows1.i386.o: ./windows.c ./puzzles.h ./resource.h
570 $(CC) -arch i386 -mmacosx-version-min=10.4 $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) -DCOMBINED -c $< -o $@
571
572clean:
573 rm -f *.o *.dmg fifteensolver fifteensolver.i386 fillingsolver fillingsolver.i386 galaxiespicture galaxiespicture.i386 galaxiessolver galaxiessolver.i386 keensolver keensolver.i386 latincheck latincheck.i386 lightupsolver lightupsolver.i386 loopysolver loopysolver.i386 magnetssolver magnetssolver.i386 mapsolver mapsolver.i386 mineobfusc mineobfusc.i386 obfusc obfusc.i386 patternpicture patternpicture.i386 patternsolver patternsolver.i386 pearlbench pearlbench.i386 signpostsolver signpostsolver.i386 singlessolver singlessolver.i386 slantsolver slantsolver.i386 solosolver solosolver.i386 tentssolver tentssolver.i386 towerssolver towerssolver.i386 unequalsolver unequalsolver.i386 unrulysolver unrulysolver.i386
574 rm -rf *.app
diff --git a/apps/plugins/puzzles/src/Makefile.vc b/apps/plugins/puzzles/src/Makefile.vc
new file mode 100644
index 0000000000..45e77a5d8a
--- /dev/null
+++ b/apps/plugins/puzzles/src/Makefile.vc
@@ -0,0 +1,1040 @@
1# Makefile for puzzles under Visual C.
2#
3# This file was created by `mkfiles.pl' from the `Recipe' file.
4# DO NOT EDIT THIS FILE DIRECTLY; edit Recipe or mkfiles.pl instead.
5
6# If you rename this file to `Makefile', you should change this line,
7# so that the .rsp files still depend on the correct makefile.
8MAKEFILE = Makefile.vc
9
10# C compilation flags
11CFLAGS = /nologo /W3 /O1 /D_WINDOWS /D_WIN32_WINDOWS=0x401 /DWINVER=0x401 /I.
12LFLAGS = /incremental:no /fixed
13
14all: blackbox.exe bridges.exe cube.exe dominosa.exe fifteen.exe \
15 fifteensolver.exe filling.exe fillingsolver.exe flip.exe \
16 flood.exe galaxies.exe galaxiespicture.exe \
17 galaxiessolver.exe guess.exe inertia.exe keen.exe \
18 keensolver.exe latincheck.exe lightup.exe lightupsolver.exe \
19 loopy.exe loopysolver.exe magnets.exe magnetssolver.exe \
20 map.exe mapsolver.exe mineobfusc.exe mines.exe netgame.exe \
21 netslide.exe nullgame.exe palisade.exe pattern.exe \
22 patternpicture.exe patternsolver.exe pearl.exe \
23 pearlbench.exe pegs.exe puzzles.exe range.exe rect.exe \
24 samegame.exe signpost.exe signpostsolver.exe singles.exe \
25 singlessolver.exe sixteen.exe slant.exe slantsolver.exe \
26 solo.exe solosolver.exe tents.exe tentssolver.exe towers.exe \
27 towerssolver.exe tracks.exe twiddle.exe undead.exe \
28 unequal.exe unequalsolver.exe unruly.exe unrulysolver.exe \
29 untangle.exe
30
31blackbox.exe: blackbox.obj drawing.obj malloc.obj midend.obj misc.obj \
32 noicon.res printing.obj random.obj version.obj windows.obj \
33 blackbox.rsp
34 link $(LFLAGS) -out:blackbox.exe -map:blackbox.map @blackbox.rsp
35
36bridges.exe: bridges.obj drawing.obj dsf.obj findloop.obj malloc.obj \
37 midend.obj misc.obj noicon.res printing.obj random.obj \
38 version.obj windows.obj bridges.rsp
39 link $(LFLAGS) -out:bridges.exe -map:bridges.map @bridges.rsp
40
41cube.exe: cube.obj drawing.obj malloc.obj midend.obj misc.obj noicon.res \
42 printing.obj random.obj version.obj windows.obj cube.rsp
43 link $(LFLAGS) -out:cube.exe -map:cube.map @cube.rsp
44
45dominosa.exe: dominosa.obj drawing.obj laydomino.obj malloc.obj midend.obj \
46 misc.obj noicon.res printing.obj random.obj version.obj \
47 windows.obj dominosa.rsp
48 link $(LFLAGS) -out:dominosa.exe -map:dominosa.map @dominosa.rsp
49
50fifteen.exe: drawing.obj fifteen.obj malloc.obj midend.obj misc.obj \
51 noicon.res printing.obj random.obj version.obj windows.obj \
52 fifteen.rsp
53 link $(LFLAGS) -out:fifteen.exe -map:fifteen.map @fifteen.rsp
54
55fifteensolver.exe: fifteen2.obj malloc.obj misc.obj nullfe.obj random.obj \
56 fifteensolver.rsp
57 link $(LFLAGS) -out:fifteensolver.exe -map:fifteensolver.map @fifteensolver.rsp
58
59filling.exe: drawing.obj dsf.obj filling.obj malloc.obj midend.obj misc.obj \
60 noicon.res printing.obj random.obj version.obj windows.obj \
61 filling.rsp
62 link $(LFLAGS) -out:filling.exe -map:filling.map @filling.rsp
63
64fillingsolver.exe: dsf.obj filling2.obj malloc.obj misc.obj nullfe.obj \
65 random.obj fillingsolver.rsp
66 link $(LFLAGS) -out:fillingsolver.exe -map:fillingsolver.map @fillingsolver.rsp
67
68flip.exe: drawing.obj flip.obj malloc.obj midend.obj misc.obj noicon.res \
69 printing.obj random.obj tree234.obj version.obj windows.obj \
70 flip.rsp
71 link $(LFLAGS) -out:flip.exe -map:flip.map @flip.rsp
72
73flood.exe: drawing.obj flood.obj malloc.obj midend.obj misc.obj noicon.res \
74 printing.obj random.obj version.obj windows.obj flood.rsp
75 link $(LFLAGS) -out:flood.exe -map:flood.map @flood.rsp
76
77galaxies.exe: drawing.obj dsf.obj galaxies.obj malloc.obj midend.obj \
78 misc.obj noicon.res printing.obj random.obj version.obj \
79 windows.obj galaxies.rsp
80 link $(LFLAGS) -out:galaxies.exe -map:galaxies.map @galaxies.rsp
81
82galaxiespicture.exe: dsf.obj galaxie4.obj malloc.obj misc.obj nullfe.obj \
83 random.obj galaxiespicture.rsp
84 link $(LFLAGS) -out:galaxiespicture.exe -map:galaxiespicture.map @galaxiespicture.rsp
85
86galaxiessolver.exe: dsf.obj galaxie2.obj malloc.obj misc.obj nullfe.obj \
87 random.obj galaxiessolver.rsp
88 link $(LFLAGS) -out:galaxiessolver.exe -map:galaxiessolver.map @galaxiessolver.rsp
89
90guess.exe: drawing.obj guess.obj malloc.obj midend.obj misc.obj noicon.res \
91 printing.obj random.obj version.obj windows.obj guess.rsp
92 link $(LFLAGS) -out:guess.exe -map:guess.map @guess.rsp
93
94inertia.exe: drawing.obj inertia.obj malloc.obj midend.obj misc.obj \
95 noicon.res printing.obj random.obj version.obj windows.obj \
96 inertia.rsp
97 link $(LFLAGS) -out:inertia.exe -map:inertia.map @inertia.rsp
98
99keen.exe: drawing.obj dsf.obj keen.obj latin.obj malloc.obj maxflow.obj \
100 midend.obj misc.obj noicon.res printing.obj random.obj \
101 tree234.obj version.obj windows.obj keen.rsp
102 link $(LFLAGS) -out:keen.exe -map:keen.map @keen.rsp
103
104keensolver.exe: dsf.obj keen2.obj latin6.obj malloc.obj maxflow.obj misc.obj \
105 nullfe.obj random.obj tree234.obj keensolver.rsp
106 link $(LFLAGS) -out:keensolver.exe -map:keensolver.map @keensolver.rsp
107
108latincheck.exe: latin8.obj malloc.obj maxflow.obj misc.obj nullfe.obj \
109 random.obj tree234.obj latincheck.rsp
110 link $(LFLAGS) -out:latincheck.exe -map:latincheck.map @latincheck.rsp
111
112lightup.exe: combi.obj drawing.obj lightup.obj malloc.obj midend.obj \
113 misc.obj noicon.res printing.obj random.obj version.obj \
114 windows.obj lightup.rsp
115 link $(LFLAGS) -out:lightup.exe -map:lightup.map @lightup.rsp
116
117lightupsolver.exe: combi.obj lightup2.obj malloc.obj misc.obj nullfe.obj \
118 random.obj lightupsolver.rsp
119 link $(LFLAGS) -out:lightupsolver.exe -map:lightupsolver.map @lightupsolver.rsp
120
121loopy.exe: drawing.obj dsf.obj grid.obj loopgen.obj loopy.obj malloc.obj \
122 midend.obj misc.obj noicon.res penrose.obj printing.obj \
123 random.obj tree234.obj version.obj windows.obj loopy.rsp
124 link $(LFLAGS) -out:loopy.exe -map:loopy.map @loopy.rsp
125
126loopysolver.exe: dsf.obj grid.obj loopgen.obj loopy2.obj malloc.obj misc.obj \
127 nullfe.obj penrose.obj random.obj tree234.obj \
128 loopysolver.rsp
129 link $(LFLAGS) -out:loopysolver.exe -map:loopysolver.map @loopysolver.rsp
130
131magnets.exe: drawing.obj laydomino.obj magnets.obj malloc.obj midend.obj \
132 misc.obj noicon.res printing.obj random.obj version.obj \
133 windows.obj magnets.rsp
134 link $(LFLAGS) -out:magnets.exe -map:magnets.map @magnets.rsp
135
136magnetssolver.exe: laydomino.obj magnets2.obj malloc.obj misc.obj nullfe.obj \
137 random.obj magnetssolver.rsp
138 link $(LFLAGS) -out:magnetssolver.exe -map:magnetssolver.map @magnetssolver.rsp
139
140map.exe: drawing.obj dsf.obj malloc.obj map.obj midend.obj misc.obj \
141 noicon.res printing.obj random.obj version.obj windows.obj \
142 map.rsp
143 link $(LFLAGS) -out:map.exe -map:map.map @map.rsp
144
145mapsolver.exe: dsf.obj malloc.obj map2.obj misc.obj nullfe.obj random.obj \
146 mapsolver.rsp
147 link $(LFLAGS) -out:mapsolver.exe -map:mapsolver.map @mapsolver.rsp
148
149mineobfusc.exe: malloc.obj mines2.obj misc.obj nullfe.obj random.obj \
150 tree234.obj mineobfusc.rsp
151 link $(LFLAGS) -out:mineobfusc.exe -map:mineobfusc.map @mineobfusc.rsp
152
153mines.exe: drawing.obj malloc.obj midend.obj mines.obj misc.obj noicon.res \
154 printing.obj random.obj tree234.obj version.obj windows.obj \
155 mines.rsp
156 link $(LFLAGS) -out:mines.exe -map:mines.map @mines.rsp
157
158netgame.exe: drawing.obj dsf.obj findloop.obj malloc.obj midend.obj misc.obj \
159 net.obj noicon.res printing.obj random.obj tree234.obj \
160 version.obj windows.obj netgame.rsp
161 link $(LFLAGS) -out:netgame.exe -map:netgame.map @netgame.rsp
162
163netslide.exe: drawing.obj malloc.obj midend.obj misc.obj netslide.obj \
164 noicon.res printing.obj random.obj tree234.obj version.obj \
165 windows.obj netslide.rsp
166 link $(LFLAGS) -out:netslide.exe -map:netslide.map @netslide.rsp
167
168nullgame.exe: drawing.obj malloc.obj midend.obj misc.obj noicon.res \
169 nullgame.obj printing.obj random.obj version.obj windows.obj \
170 nullgame.rsp
171 link $(LFLAGS) -out:nullgame.exe -map:nullgame.map @nullgame.rsp
172
173palisade.exe: divvy.obj drawing.obj dsf.obj malloc.obj midend.obj misc.obj \
174 noicon.res palisade.obj printing.obj random.obj version.obj \
175 windows.obj palisade.rsp
176 link $(LFLAGS) -out:palisade.exe -map:palisade.map @palisade.rsp
177
178pattern.exe: drawing.obj malloc.obj midend.obj misc.obj noicon.res \
179 pattern.obj printing.obj random.obj version.obj windows.obj \
180 pattern.rsp
181 link $(LFLAGS) -out:pattern.exe -map:pattern.map @pattern.rsp
182
183patternpicture.exe: malloc.obj misc.obj nullfe.obj pattern4.obj random.obj \
184 patternpicture.rsp
185 link $(LFLAGS) -out:patternpicture.exe -map:patternpicture.map @patternpicture.rsp
186
187patternsolver.exe: malloc.obj misc.obj nullfe.obj pattern2.obj random.obj \
188 patternsolver.rsp
189 link $(LFLAGS) -out:patternsolver.exe -map:patternsolver.map @patternsolver.rsp
190
191pearl.exe: drawing.obj dsf.obj grid.obj loopgen.obj malloc.obj midend.obj \
192 misc.obj pearl.obj penrose.obj printing.obj random.obj \
193 tdq.obj tree234.obj version.obj windows.obj pearl.rsp
194 link $(LFLAGS) -out:pearl.exe -map:pearl.map @pearl.rsp
195
196pearlbench.exe: dsf.obj grid.obj loopgen.obj malloc.obj misc.obj nullfe.obj \
197 pearl2.obj penrose.obj random.obj tdq.obj tree234.obj \
198 pearlbench.rsp
199 link $(LFLAGS) -out:pearlbench.exe -map:pearlbench.map @pearlbench.rsp
200
201pegs.exe: drawing.obj malloc.obj midend.obj misc.obj noicon.res pegs.obj \
202 printing.obj random.obj tree234.obj version.obj windows.obj \
203 pegs.rsp
204 link $(LFLAGS) -out:pegs.exe -map:pegs.map @pegs.rsp
205
206puzzles.exe: blackbo3.obj bridges3.obj combi.obj cube3.obj divvy.obj \
207 dominos3.obj drawing.obj dsf.obj fifteen5.obj filling5.obj \
208 findloop.obj flip3.obj flood3.obj galaxie7.obj grid.obj \
209 guess3.obj inertia3.obj keen5.obj latin.obj laydomino.obj \
210 lightup5.obj list.obj loopgen.obj loopy5.obj magnets5.obj \
211 malloc.obj map5.obj maxflow.obj midend.obj mines5.obj \
212 misc.obj net3.obj netslid3.obj noicon.res palisad3.obj \
213 pattern7.obj pearl5.obj pegs3.obj penrose.obj printing.obj \
214 random.obj range3.obj rect3.obj samegam3.obj signpos5.obj \
215 singles5.obj sixteen3.obj slant5.obj solo5.obj tdq.obj \
216 tents5.obj towers5.obj tracks3.obj tree234.obj twiddle3.obj \
217 undead3.obj unequal5.obj unruly5.obj untangl3.obj \
218 version.obj windows1.obj puzzles.rsp
219 link $(LFLAGS) -out:puzzles.exe -map:puzzles.map @puzzles.rsp
220
221range.exe: drawing.obj dsf.obj malloc.obj midend.obj misc.obj noicon.res \
222 printing.obj random.obj range.obj version.obj windows.obj \
223 range.rsp
224 link $(LFLAGS) -out:range.exe -map:range.map @range.rsp
225
226rect.exe: drawing.obj malloc.obj midend.obj misc.obj noicon.res printing.obj \
227 random.obj rect.obj version.obj windows.obj rect.rsp
228 link $(LFLAGS) -out:rect.exe -map:rect.map @rect.rsp
229
230samegame.exe: drawing.obj malloc.obj midend.obj misc.obj noicon.res \
231 printing.obj random.obj samegame.obj version.obj windows.obj \
232 samegame.rsp
233 link $(LFLAGS) -out:samegame.exe -map:samegame.map @samegame.rsp
234
235signpost.exe: drawing.obj dsf.obj malloc.obj midend.obj misc.obj noicon.res \
236 printing.obj random.obj signpost.obj version.obj windows.obj \
237 signpost.rsp
238 link $(LFLAGS) -out:signpost.exe -map:signpost.map @signpost.rsp
239
240signpostsolver.exe: dsf.obj malloc.obj misc.obj nullfe.obj random.obj \
241 signpos2.obj signpostsolver.rsp
242 link $(LFLAGS) -out:signpostsolver.exe -map:signpostsolver.map @signpostsolver.rsp
243
244singles.exe: drawing.obj dsf.obj latin.obj malloc.obj maxflow.obj midend.obj \
245 misc.obj noicon.res printing.obj random.obj singles.obj \
246 tree234.obj version.obj windows.obj singles.rsp
247 link $(LFLAGS) -out:singles.exe -map:singles.map @singles.rsp
248
249singlessolver.exe: dsf.obj latin.obj malloc.obj maxflow.obj misc.obj \
250 nullfe.obj random.obj singles3.obj tree234.obj \
251 singlessolver.rsp
252 link $(LFLAGS) -out:singlessolver.exe -map:singlessolver.map @singlessolver.rsp
253
254sixteen.exe: drawing.obj malloc.obj midend.obj misc.obj noicon.res \
255 printing.obj random.obj sixteen.obj version.obj windows.obj \
256 sixteen.rsp
257 link $(LFLAGS) -out:sixteen.exe -map:sixteen.map @sixteen.rsp
258
259slant.exe: drawing.obj dsf.obj findloop.obj malloc.obj midend.obj misc.obj \
260 noicon.res printing.obj random.obj slant.obj version.obj \
261 windows.obj slant.rsp
262 link $(LFLAGS) -out:slant.exe -map:slant.map @slant.rsp
263
264slantsolver.exe: dsf.obj findloop.obj malloc.obj misc.obj nullfe.obj \
265 random.obj slant2.obj slantsolver.rsp
266 link $(LFLAGS) -out:slantsolver.exe -map:slantsolver.map @slantsolver.rsp
267
268solo.exe: divvy.obj drawing.obj dsf.obj malloc.obj midend.obj misc.obj \
269 noicon.res printing.obj random.obj solo.obj version.obj \
270 windows.obj solo.rsp
271 link $(LFLAGS) -out:solo.exe -map:solo.map @solo.rsp
272
273solosolver.exe: divvy.obj dsf.obj malloc.obj misc.obj nullfe.obj random.obj \
274 solo2.obj solosolver.rsp
275 link $(LFLAGS) -out:solosolver.exe -map:solosolver.map @solosolver.rsp
276
277tents.exe: drawing.obj dsf.obj malloc.obj maxflow.obj midend.obj misc.obj \
278 noicon.res printing.obj random.obj tents.obj version.obj \
279 windows.obj tents.rsp
280 link $(LFLAGS) -out:tents.exe -map:tents.map @tents.rsp
281
282tentssolver.exe: dsf.obj malloc.obj maxflow.obj misc.obj nullfe.obj \
283 random.obj tents3.obj tentssolver.rsp
284 link $(LFLAGS) -out:tentssolver.exe -map:tentssolver.map @tentssolver.rsp
285
286towers.exe: drawing.obj latin.obj malloc.obj maxflow.obj midend.obj misc.obj \
287 noicon.res printing.obj random.obj towers.obj tree234.obj \
288 version.obj windows.obj towers.rsp
289 link $(LFLAGS) -out:towers.exe -map:towers.map @towers.rsp
290
291towerssolver.exe: latin6.obj malloc.obj maxflow.obj misc.obj nullfe.obj \
292 random.obj towers2.obj tree234.obj towerssolver.rsp
293 link $(LFLAGS) -out:towerssolver.exe -map:towerssolver.map @towerssolver.rsp
294
295tracks.exe: drawing.obj dsf.obj findloop.obj malloc.obj midend.obj misc.obj \
296 noicon.res printing.obj random.obj tracks.obj version.obj \
297 windows.obj tracks.rsp
298 link $(LFLAGS) -out:tracks.exe -map:tracks.map @tracks.rsp
299
300twiddle.exe: drawing.obj malloc.obj midend.obj misc.obj noicon.res \
301 printing.obj random.obj twiddle.obj version.obj windows.obj \
302 twiddle.rsp
303 link $(LFLAGS) -out:twiddle.exe -map:twiddle.map @twiddle.rsp
304
305undead.exe: drawing.obj malloc.obj midend.obj misc.obj noicon.res \
306 printing.obj random.obj undead.obj version.obj windows.obj \
307 undead.rsp
308 link $(LFLAGS) -out:undead.exe -map:undead.map @undead.rsp
309
310unequal.exe: drawing.obj latin.obj malloc.obj maxflow.obj midend.obj \
311 misc.obj noicon.res printing.obj random.obj tree234.obj \
312 unequal.obj version.obj windows.obj unequal.rsp
313 link $(LFLAGS) -out:unequal.exe -map:unequal.map @unequal.rsp
314
315unequalsolver.exe: latin6.obj malloc.obj maxflow.obj misc.obj nullfe.obj \
316 random.obj tree234.obj unequal2.obj unequalsolver.rsp
317 link $(LFLAGS) -out:unequalsolver.exe -map:unequalsolver.map @unequalsolver.rsp
318
319unruly.exe: drawing.obj malloc.obj midend.obj misc.obj noicon.res \
320 printing.obj random.obj unruly.obj version.obj windows.obj \
321 unruly.rsp
322 link $(LFLAGS) -out:unruly.exe -map:unruly.map @unruly.rsp
323
324unrulysolver.exe: malloc.obj misc.obj nullfe.obj random.obj unruly2.obj \
325 unrulysolver.rsp
326 link $(LFLAGS) -out:unrulysolver.exe -map:unrulysolver.map @unrulysolver.rsp
327
328untangle.exe: drawing.obj malloc.obj midend.obj misc.obj noicon.res \
329 printing.obj random.obj tree234.obj untangle.obj version.obj \
330 windows.obj untangle.rsp
331 link $(LFLAGS) -out:untangle.exe -map:untangle.map @untangle.rsp
332
333blackbox.rsp: $(MAKEFILE)
334 echo /nologo /subsystem:windows > blackbox.rsp
335 echo blackbox.obj comctl32.lib comdlg32.lib >> blackbox.rsp
336 echo drawing.obj gdi32.lib malloc.obj midend.obj >> blackbox.rsp
337 echo misc.obj noicon.res printing.obj random.obj >> blackbox.rsp
338 echo user32.lib version.obj windows.obj winspool.lib >> blackbox.rsp
339
340bridges.rsp: $(MAKEFILE)
341 echo /nologo /subsystem:windows > bridges.rsp
342 echo bridges.obj comctl32.lib comdlg32.lib drawing.obj >> bridges.rsp
343 echo dsf.obj findloop.obj gdi32.lib malloc.obj >> bridges.rsp
344 echo midend.obj misc.obj noicon.res printing.obj >> bridges.rsp
345 echo random.obj user32.lib version.obj windows.obj >> bridges.rsp
346 echo winspool.lib >> bridges.rsp
347
348cube.rsp: $(MAKEFILE)
349 echo /nologo /subsystem:windows > cube.rsp
350 echo comctl32.lib comdlg32.lib cube.obj drawing.obj >> cube.rsp
351 echo gdi32.lib malloc.obj midend.obj misc.obj >> cube.rsp
352 echo noicon.res printing.obj random.obj user32.lib >> cube.rsp
353 echo version.obj windows.obj winspool.lib >> cube.rsp
354
355dominosa.rsp: $(MAKEFILE)
356 echo /nologo /subsystem:windows > dominosa.rsp
357 echo comctl32.lib comdlg32.lib dominosa.obj >> dominosa.rsp
358 echo drawing.obj gdi32.lib laydomino.obj malloc.obj >> dominosa.rsp
359 echo midend.obj misc.obj noicon.res printing.obj >> dominosa.rsp
360 echo random.obj user32.lib version.obj windows.obj >> dominosa.rsp
361 echo winspool.lib >> dominosa.rsp
362
363fifteen.rsp: $(MAKEFILE)
364 echo /nologo /subsystem:windows > fifteen.rsp
365 echo comctl32.lib comdlg32.lib drawing.obj fifteen.obj >> fifteen.rsp
366 echo gdi32.lib malloc.obj midend.obj misc.obj >> fifteen.rsp
367 echo noicon.res printing.obj random.obj user32.lib >> fifteen.rsp
368 echo version.obj windows.obj winspool.lib >> fifteen.rsp
369
370fifteensolver.rsp: $(MAKEFILE)
371 echo /nologo /subsystem:console > fifteensolver.rsp
372 echo fifteen2.obj malloc.obj misc.obj nullfe.obj >> fifteensolver.rsp
373 echo random.obj >> fifteensolver.rsp
374
375filling.rsp: $(MAKEFILE)
376 echo /nologo /subsystem:windows > filling.rsp
377 echo comctl32.lib comdlg32.lib drawing.obj dsf.obj >> filling.rsp
378 echo filling.obj gdi32.lib malloc.obj midend.obj >> filling.rsp
379 echo misc.obj noicon.res printing.obj random.obj >> filling.rsp
380 echo user32.lib version.obj windows.obj winspool.lib >> filling.rsp
381
382fillingsolver.rsp: $(MAKEFILE)
383 echo /nologo /subsystem:console > fillingsolver.rsp
384 echo dsf.obj filling2.obj malloc.obj misc.obj >> fillingsolver.rsp
385 echo nullfe.obj random.obj >> fillingsolver.rsp
386
387flip.rsp: $(MAKEFILE)
388 echo /nologo /subsystem:windows > flip.rsp
389 echo comctl32.lib comdlg32.lib drawing.obj flip.obj >> flip.rsp
390 echo gdi32.lib malloc.obj midend.obj misc.obj >> flip.rsp
391 echo noicon.res printing.obj random.obj tree234.obj >> flip.rsp
392 echo user32.lib version.obj windows.obj winspool.lib >> flip.rsp
393
394flood.rsp: $(MAKEFILE)
395 echo /nologo /subsystem:windows > flood.rsp
396 echo comctl32.lib comdlg32.lib drawing.obj flood.obj >> flood.rsp
397 echo gdi32.lib malloc.obj midend.obj misc.obj >> flood.rsp
398 echo noicon.res printing.obj random.obj user32.lib >> flood.rsp
399 echo version.obj windows.obj winspool.lib >> flood.rsp
400
401galaxies.rsp: $(MAKEFILE)
402 echo /nologo /subsystem:windows > galaxies.rsp
403 echo comctl32.lib comdlg32.lib drawing.obj dsf.obj >> galaxies.rsp
404 echo galaxies.obj gdi32.lib malloc.obj midend.obj >> galaxies.rsp
405 echo misc.obj noicon.res printing.obj random.obj >> galaxies.rsp
406 echo user32.lib version.obj windows.obj winspool.lib >> galaxies.rsp
407
408galaxiespicture.rsp: $(MAKEFILE)
409 echo /nologo /subsystem:console > galaxiespicture.rsp
410 echo dsf.obj galaxie4.obj malloc.obj misc.obj >> galaxiespicture.rsp
411 echo nullfe.obj random.obj >> galaxiespicture.rsp
412
413galaxiessolver.rsp: $(MAKEFILE)
414 echo /nologo /subsystem:console > galaxiessolver.rsp
415 echo dsf.obj galaxie2.obj malloc.obj misc.obj >> galaxiessolver.rsp
416 echo nullfe.obj random.obj >> galaxiessolver.rsp
417
418guess.rsp: $(MAKEFILE)
419 echo /nologo /subsystem:windows > guess.rsp
420 echo comctl32.lib comdlg32.lib drawing.obj gdi32.lib >> guess.rsp
421 echo guess.obj malloc.obj midend.obj misc.obj >> guess.rsp
422 echo noicon.res printing.obj random.obj user32.lib >> guess.rsp
423 echo version.obj windows.obj winspool.lib >> guess.rsp
424
425inertia.rsp: $(MAKEFILE)
426 echo /nologo /subsystem:windows > inertia.rsp
427 echo comctl32.lib comdlg32.lib drawing.obj gdi32.lib >> inertia.rsp
428 echo inertia.obj malloc.obj midend.obj misc.obj >> inertia.rsp
429 echo noicon.res printing.obj random.obj user32.lib >> inertia.rsp
430 echo version.obj windows.obj winspool.lib >> inertia.rsp
431
432keen.rsp: $(MAKEFILE)
433 echo /nologo /subsystem:windows > keen.rsp
434 echo comctl32.lib comdlg32.lib drawing.obj dsf.obj >> keen.rsp
435 echo gdi32.lib keen.obj latin.obj malloc.obj >> keen.rsp
436 echo maxflow.obj midend.obj misc.obj noicon.res >> keen.rsp
437 echo printing.obj random.obj tree234.obj user32.lib >> keen.rsp
438 echo version.obj windows.obj winspool.lib >> keen.rsp
439
440keensolver.rsp: $(MAKEFILE)
441 echo /nologo /subsystem:console > keensolver.rsp
442 echo dsf.obj keen2.obj latin6.obj malloc.obj >> keensolver.rsp
443 echo maxflow.obj misc.obj nullfe.obj random.obj >> keensolver.rsp
444 echo tree234.obj >> keensolver.rsp
445
446latincheck.rsp: $(MAKEFILE)
447 echo /nologo /subsystem:console > latincheck.rsp
448 echo latin8.obj malloc.obj maxflow.obj misc.obj >> latincheck.rsp
449 echo nullfe.obj random.obj tree234.obj >> latincheck.rsp
450
451lightup.rsp: $(MAKEFILE)
452 echo /nologo /subsystem:windows > lightup.rsp
453 echo combi.obj comctl32.lib comdlg32.lib drawing.obj >> lightup.rsp
454 echo gdi32.lib lightup.obj malloc.obj midend.obj >> lightup.rsp
455 echo misc.obj noicon.res printing.obj random.obj >> lightup.rsp
456 echo user32.lib version.obj windows.obj winspool.lib >> lightup.rsp
457
458lightupsolver.rsp: $(MAKEFILE)
459 echo /nologo /subsystem:console > lightupsolver.rsp
460 echo combi.obj lightup2.obj malloc.obj misc.obj >> lightupsolver.rsp
461 echo nullfe.obj random.obj >> lightupsolver.rsp
462
463loopy.rsp: $(MAKEFILE)
464 echo /nologo /subsystem:windows > loopy.rsp
465 echo comctl32.lib comdlg32.lib drawing.obj dsf.obj >> loopy.rsp
466 echo gdi32.lib grid.obj loopgen.obj loopy.obj >> loopy.rsp
467 echo malloc.obj midend.obj misc.obj noicon.res >> loopy.rsp
468 echo penrose.obj printing.obj random.obj tree234.obj >> loopy.rsp
469 echo user32.lib version.obj windows.obj winspool.lib >> loopy.rsp
470
471loopysolver.rsp: $(MAKEFILE)
472 echo /nologo /subsystem:console > loopysolver.rsp
473 echo dsf.obj grid.obj loopgen.obj loopy2.obj >> loopysolver.rsp
474 echo malloc.obj misc.obj nullfe.obj penrose.obj >> loopysolver.rsp
475 echo random.obj tree234.obj >> loopysolver.rsp
476
477magnets.rsp: $(MAKEFILE)
478 echo /nologo /subsystem:windows > magnets.rsp
479 echo comctl32.lib comdlg32.lib drawing.obj gdi32.lib >> magnets.rsp
480 echo laydomino.obj magnets.obj malloc.obj midend.obj >> magnets.rsp
481 echo misc.obj noicon.res printing.obj random.obj >> magnets.rsp
482 echo user32.lib version.obj windows.obj winspool.lib >> magnets.rsp
483
484magnetssolver.rsp: $(MAKEFILE)
485 echo /nologo /subsystem:console > magnetssolver.rsp
486 echo laydomino.obj magnets2.obj malloc.obj misc.obj >> magnetssolver.rsp
487 echo nullfe.obj random.obj >> magnetssolver.rsp
488
489map.rsp: $(MAKEFILE)
490 echo /nologo /subsystem:windows > map.rsp
491 echo comctl32.lib comdlg32.lib drawing.obj dsf.obj >> map.rsp
492 echo gdi32.lib malloc.obj map.obj midend.obj misc.obj >> map.rsp
493 echo noicon.res printing.obj random.obj user32.lib >> map.rsp
494 echo version.obj windows.obj winspool.lib >> map.rsp
495
496mapsolver.rsp: $(MAKEFILE)
497 echo /nologo /subsystem:console > mapsolver.rsp
498 echo dsf.obj malloc.obj map2.obj misc.obj nullfe.obj >> mapsolver.rsp
499 echo random.obj >> mapsolver.rsp
500
501mineobfusc.rsp: $(MAKEFILE)
502 echo /nologo /subsystem:console > mineobfusc.rsp
503 echo malloc.obj mines2.obj misc.obj nullfe.obj >> mineobfusc.rsp
504 echo random.obj tree234.obj >> mineobfusc.rsp
505
506mines.rsp: $(MAKEFILE)
507 echo /nologo /subsystem:windows > mines.rsp
508 echo comctl32.lib comdlg32.lib drawing.obj gdi32.lib >> mines.rsp
509 echo malloc.obj midend.obj mines.obj misc.obj >> mines.rsp
510 echo noicon.res printing.obj random.obj tree234.obj >> mines.rsp
511 echo user32.lib version.obj windows.obj winspool.lib >> mines.rsp
512
513netgame.rsp: $(MAKEFILE)
514 echo /nologo /subsystem:windows > netgame.rsp
515 echo comctl32.lib comdlg32.lib drawing.obj dsf.obj >> netgame.rsp
516 echo findloop.obj gdi32.lib malloc.obj midend.obj >> netgame.rsp
517 echo misc.obj net.obj noicon.res printing.obj >> netgame.rsp
518 echo random.obj tree234.obj user32.lib version.obj >> netgame.rsp
519 echo windows.obj winspool.lib >> netgame.rsp
520
521netslide.rsp: $(MAKEFILE)
522 echo /nologo /subsystem:windows > netslide.rsp
523 echo comctl32.lib comdlg32.lib drawing.obj gdi32.lib >> netslide.rsp
524 echo malloc.obj midend.obj misc.obj netslide.obj >> netslide.rsp
525 echo noicon.res printing.obj random.obj tree234.obj >> netslide.rsp
526 echo user32.lib version.obj windows.obj winspool.lib >> netslide.rsp
527
528nullgame.rsp: $(MAKEFILE)
529 echo /nologo /subsystem:windows > nullgame.rsp
530 echo comctl32.lib comdlg32.lib drawing.obj gdi32.lib >> nullgame.rsp
531 echo malloc.obj midend.obj misc.obj noicon.res >> nullgame.rsp
532 echo nullgame.obj printing.obj random.obj user32.lib >> nullgame.rsp
533 echo version.obj windows.obj winspool.lib >> nullgame.rsp
534
535palisade.rsp: $(MAKEFILE)
536 echo /nologo /subsystem:windows > palisade.rsp
537 echo comctl32.lib comdlg32.lib divvy.obj drawing.obj >> palisade.rsp
538 echo dsf.obj gdi32.lib malloc.obj midend.obj misc.obj >> palisade.rsp
539 echo noicon.res palisade.obj printing.obj random.obj >> palisade.rsp
540 echo user32.lib version.obj windows.obj winspool.lib >> palisade.rsp
541
542pattern.rsp: $(MAKEFILE)
543 echo /nologo /subsystem:windows > pattern.rsp
544 echo comctl32.lib comdlg32.lib drawing.obj gdi32.lib >> pattern.rsp
545 echo malloc.obj midend.obj misc.obj noicon.res >> pattern.rsp
546 echo pattern.obj printing.obj random.obj user32.lib >> pattern.rsp
547 echo version.obj windows.obj winspool.lib >> pattern.rsp
548
549patternpicture.rsp: $(MAKEFILE)
550 echo /nologo /subsystem:console > patternpicture.rsp
551 echo malloc.obj misc.obj nullfe.obj pattern4.obj >> patternpicture.rsp
552 echo random.obj >> patternpicture.rsp
553
554patternsolver.rsp: $(MAKEFILE)
555 echo /nologo /subsystem:console > patternsolver.rsp
556 echo malloc.obj misc.obj nullfe.obj pattern2.obj >> patternsolver.rsp
557 echo random.obj >> patternsolver.rsp
558
559pearl.rsp: $(MAKEFILE)
560 echo /nologo /subsystem:windows > pearl.rsp
561 echo comctl32.lib comdlg32.lib drawing.obj dsf.obj >> pearl.rsp
562 echo gdi32.lib grid.obj loopgen.obj malloc.obj >> pearl.rsp
563 echo midend.obj misc.obj pearl.obj penrose.obj >> pearl.rsp
564 echo printing.obj random.obj tdq.obj tree234.obj >> pearl.rsp
565 echo user32.lib version.obj windows.obj winspool.lib >> pearl.rsp
566
567pearlbench.rsp: $(MAKEFILE)
568 echo /nologo /subsystem:console > pearlbench.rsp
569 echo dsf.obj grid.obj loopgen.obj malloc.obj misc.obj >> pearlbench.rsp
570 echo nullfe.obj pearl2.obj penrose.obj random.obj >> pearlbench.rsp
571 echo tdq.obj tree234.obj >> pearlbench.rsp
572
573pegs.rsp: $(MAKEFILE)
574 echo /nologo /subsystem:windows > pegs.rsp
575 echo comctl32.lib comdlg32.lib drawing.obj gdi32.lib >> pegs.rsp
576 echo malloc.obj midend.obj misc.obj noicon.res >> pegs.rsp
577 echo pegs.obj printing.obj random.obj tree234.obj >> pegs.rsp
578 echo user32.lib version.obj windows.obj winspool.lib >> pegs.rsp
579
580puzzles.rsp: $(MAKEFILE)
581 echo /nologo /subsystem:windows > puzzles.rsp
582 echo blackbo3.obj bridges3.obj combi.obj comctl32.lib >> puzzles.rsp
583 echo comdlg32.lib cube3.obj divvy.obj dominos3.obj >> puzzles.rsp
584 echo drawing.obj dsf.obj fifteen5.obj filling5.obj >> puzzles.rsp
585 echo findloop.obj flip3.obj flood3.obj galaxie7.obj >> puzzles.rsp
586 echo gdi32.lib grid.obj guess3.obj inertia3.obj >> puzzles.rsp
587 echo keen5.obj latin.obj laydomino.obj lightup5.obj >> puzzles.rsp
588 echo list.obj loopgen.obj loopy5.obj magnets5.obj >> puzzles.rsp
589 echo malloc.obj map5.obj maxflow.obj midend.obj >> puzzles.rsp
590 echo mines5.obj misc.obj net3.obj netslid3.obj >> puzzles.rsp
591 echo noicon.res palisad3.obj pattern7.obj pearl5.obj >> puzzles.rsp
592 echo pegs3.obj penrose.obj printing.obj random.obj >> puzzles.rsp
593 echo range3.obj rect3.obj samegam3.obj signpos5.obj >> puzzles.rsp
594 echo singles5.obj sixteen3.obj slant5.obj solo5.obj >> puzzles.rsp
595 echo tdq.obj tents5.obj towers5.obj tracks3.obj >> puzzles.rsp
596 echo tree234.obj twiddle3.obj undead3.obj unequal5.obj >> puzzles.rsp
597 echo unruly5.obj untangl3.obj user32.lib version.obj >> puzzles.rsp
598 echo windows1.obj winspool.lib >> puzzles.rsp
599
600range.rsp: $(MAKEFILE)
601 echo /nologo /subsystem:windows > range.rsp
602 echo comctl32.lib comdlg32.lib drawing.obj dsf.obj >> range.rsp
603 echo gdi32.lib malloc.obj midend.obj misc.obj >> range.rsp
604 echo noicon.res printing.obj random.obj range.obj >> range.rsp
605 echo user32.lib version.obj windows.obj winspool.lib >> range.rsp
606
607rect.rsp: $(MAKEFILE)
608 echo /nologo /subsystem:windows > rect.rsp
609 echo comctl32.lib comdlg32.lib drawing.obj gdi32.lib >> rect.rsp
610 echo malloc.obj midend.obj misc.obj noicon.res >> rect.rsp
611 echo printing.obj random.obj rect.obj user32.lib >> rect.rsp
612 echo version.obj windows.obj winspool.lib >> rect.rsp
613
614samegame.rsp: $(MAKEFILE)
615 echo /nologo /subsystem:windows > samegame.rsp
616 echo comctl32.lib comdlg32.lib drawing.obj gdi32.lib >> samegame.rsp
617 echo malloc.obj midend.obj misc.obj noicon.res >> samegame.rsp
618 echo printing.obj random.obj samegame.obj user32.lib >> samegame.rsp
619 echo version.obj windows.obj winspool.lib >> samegame.rsp
620
621signpost.rsp: $(MAKEFILE)
622 echo /nologo /subsystem:windows > signpost.rsp
623 echo comctl32.lib comdlg32.lib drawing.obj dsf.obj >> signpost.rsp
624 echo gdi32.lib malloc.obj midend.obj misc.obj >> signpost.rsp
625 echo noicon.res printing.obj random.obj signpost.obj >> signpost.rsp
626 echo user32.lib version.obj windows.obj winspool.lib >> signpost.rsp
627
628signpostsolver.rsp: $(MAKEFILE)
629 echo /nologo /subsystem:console > signpostsolver.rsp
630 echo dsf.obj malloc.obj misc.obj nullfe.obj random.obj >> signpostsolver.rsp
631 echo signpos2.obj >> signpostsolver.rsp
632
633singles.rsp: $(MAKEFILE)
634 echo /nologo /subsystem:windows > singles.rsp
635 echo comctl32.lib comdlg32.lib drawing.obj dsf.obj >> singles.rsp
636 echo gdi32.lib latin.obj malloc.obj maxflow.obj >> singles.rsp
637 echo midend.obj misc.obj noicon.res printing.obj >> singles.rsp
638 echo random.obj singles.obj tree234.obj user32.lib >> singles.rsp
639 echo version.obj windows.obj winspool.lib >> singles.rsp
640
641singlessolver.rsp: $(MAKEFILE)
642 echo /nologo /subsystem:console > singlessolver.rsp
643 echo dsf.obj latin.obj malloc.obj maxflow.obj misc.obj >> singlessolver.rsp
644 echo nullfe.obj random.obj singles3.obj tree234.obj >> singlessolver.rsp
645
646sixteen.rsp: $(MAKEFILE)
647 echo /nologo /subsystem:windows > sixteen.rsp
648 echo comctl32.lib comdlg32.lib drawing.obj gdi32.lib >> sixteen.rsp
649 echo malloc.obj midend.obj misc.obj noicon.res >> sixteen.rsp
650 echo printing.obj random.obj sixteen.obj user32.lib >> sixteen.rsp
651 echo version.obj windows.obj winspool.lib >> sixteen.rsp
652
653slant.rsp: $(MAKEFILE)
654 echo /nologo /subsystem:windows > slant.rsp
655 echo comctl32.lib comdlg32.lib drawing.obj dsf.obj >> slant.rsp
656 echo findloop.obj gdi32.lib malloc.obj midend.obj >> slant.rsp
657 echo misc.obj noicon.res printing.obj random.obj >> slant.rsp
658 echo slant.obj user32.lib version.obj windows.obj >> slant.rsp
659 echo winspool.lib >> slant.rsp
660
661slantsolver.rsp: $(MAKEFILE)
662 echo /nologo /subsystem:console > slantsolver.rsp
663 echo dsf.obj findloop.obj malloc.obj misc.obj >> slantsolver.rsp
664 echo nullfe.obj random.obj slant2.obj >> slantsolver.rsp
665
666solo.rsp: $(MAKEFILE)
667 echo /nologo /subsystem:windows > solo.rsp
668 echo comctl32.lib comdlg32.lib divvy.obj drawing.obj >> solo.rsp
669 echo dsf.obj gdi32.lib malloc.obj midend.obj misc.obj >> solo.rsp
670 echo noicon.res printing.obj random.obj solo.obj >> solo.rsp
671 echo user32.lib version.obj windows.obj winspool.lib >> solo.rsp
672
673solosolver.rsp: $(MAKEFILE)
674 echo /nologo /subsystem:console > solosolver.rsp
675 echo divvy.obj dsf.obj malloc.obj misc.obj nullfe.obj >> solosolver.rsp
676 echo random.obj solo2.obj >> solosolver.rsp
677
678tents.rsp: $(MAKEFILE)
679 echo /nologo /subsystem:windows > tents.rsp
680 echo comctl32.lib comdlg32.lib drawing.obj dsf.obj >> tents.rsp
681 echo gdi32.lib malloc.obj maxflow.obj midend.obj >> tents.rsp
682 echo misc.obj noicon.res printing.obj random.obj >> tents.rsp
683 echo tents.obj user32.lib version.obj windows.obj >> tents.rsp
684 echo winspool.lib >> tents.rsp
685
686tentssolver.rsp: $(MAKEFILE)
687 echo /nologo /subsystem:console > tentssolver.rsp
688 echo dsf.obj malloc.obj maxflow.obj misc.obj >> tentssolver.rsp
689 echo nullfe.obj random.obj tents3.obj >> tentssolver.rsp
690
691towers.rsp: $(MAKEFILE)
692 echo /nologo /subsystem:windows > towers.rsp
693 echo comctl32.lib comdlg32.lib drawing.obj gdi32.lib >> towers.rsp
694 echo latin.obj malloc.obj maxflow.obj midend.obj >> towers.rsp
695 echo misc.obj noicon.res printing.obj random.obj >> towers.rsp
696 echo towers.obj tree234.obj user32.lib version.obj >> towers.rsp
697 echo windows.obj winspool.lib >> towers.rsp
698
699towerssolver.rsp: $(MAKEFILE)
700 echo /nologo /subsystem:console > towerssolver.rsp
701 echo latin6.obj malloc.obj maxflow.obj misc.obj >> towerssolver.rsp
702 echo nullfe.obj random.obj towers2.obj tree234.obj >> towerssolver.rsp
703
704tracks.rsp: $(MAKEFILE)
705 echo /nologo /subsystem:windows > tracks.rsp
706 echo comctl32.lib comdlg32.lib drawing.obj dsf.obj >> tracks.rsp
707 echo findloop.obj gdi32.lib malloc.obj midend.obj >> tracks.rsp
708 echo misc.obj noicon.res printing.obj random.obj >> tracks.rsp
709 echo tracks.obj user32.lib version.obj windows.obj >> tracks.rsp
710 echo winspool.lib >> tracks.rsp
711
712twiddle.rsp: $(MAKEFILE)
713 echo /nologo /subsystem:windows > twiddle.rsp
714 echo comctl32.lib comdlg32.lib drawing.obj gdi32.lib >> twiddle.rsp
715 echo malloc.obj midend.obj misc.obj noicon.res >> twiddle.rsp
716 echo printing.obj random.obj twiddle.obj user32.lib >> twiddle.rsp
717 echo version.obj windows.obj winspool.lib >> twiddle.rsp
718
719undead.rsp: $(MAKEFILE)
720 echo /nologo /subsystem:windows > undead.rsp
721 echo comctl32.lib comdlg32.lib drawing.obj gdi32.lib >> undead.rsp
722 echo malloc.obj midend.obj misc.obj noicon.res >> undead.rsp
723 echo printing.obj random.obj undead.obj user32.lib >> undead.rsp
724 echo version.obj windows.obj winspool.lib >> undead.rsp
725
726unequal.rsp: $(MAKEFILE)
727 echo /nologo /subsystem:windows > unequal.rsp
728 echo comctl32.lib comdlg32.lib drawing.obj gdi32.lib >> unequal.rsp
729 echo latin.obj malloc.obj maxflow.obj midend.obj >> unequal.rsp
730 echo misc.obj noicon.res printing.obj random.obj >> unequal.rsp
731 echo tree234.obj unequal.obj user32.lib version.obj >> unequal.rsp
732 echo windows.obj winspool.lib >> unequal.rsp
733
734unequalsolver.rsp: $(MAKEFILE)
735 echo /nologo /subsystem:console > unequalsolver.rsp
736 echo latin6.obj malloc.obj maxflow.obj misc.obj >> unequalsolver.rsp
737 echo nullfe.obj random.obj tree234.obj unequal2.obj >> unequalsolver.rsp
738
739unruly.rsp: $(MAKEFILE)
740 echo /nologo /subsystem:windows > unruly.rsp
741 echo comctl32.lib comdlg32.lib drawing.obj gdi32.lib >> unruly.rsp
742 echo malloc.obj midend.obj misc.obj noicon.res >> unruly.rsp
743 echo printing.obj random.obj unruly.obj user32.lib >> unruly.rsp
744 echo version.obj windows.obj winspool.lib >> unruly.rsp
745
746unrulysolver.rsp: $(MAKEFILE)
747 echo /nologo /subsystem:console > unrulysolver.rsp
748 echo malloc.obj misc.obj nullfe.obj random.obj >> unrulysolver.rsp
749 echo unruly2.obj >> unrulysolver.rsp
750
751untangle.rsp: $(MAKEFILE)
752 echo /nologo /subsystem:windows > untangle.rsp
753 echo comctl32.lib comdlg32.lib drawing.obj gdi32.lib >> untangle.rsp
754 echo malloc.obj midend.obj misc.obj noicon.res >> untangle.rsp
755 echo printing.obj random.obj tree234.obj untangle.obj >> untangle.rsp
756 echo user32.lib version.obj windows.obj winspool.lib >> untangle.rsp
757
758blackbox.obj: .\blackbox.c .\puzzles.h
759 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\blackbox.c /Foblackbox.obj
760blackbo3.obj: .\blackbox.c .\puzzles.h
761 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\blackbox.c /Foblackbo3.obj
762bridges.obj: .\bridges.c .\puzzles.h
763 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\bridges.c /Fobridges.obj
764bridges3.obj: .\bridges.c .\puzzles.h
765 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\bridges.c /Fobridges3.obj
766combi.obj: .\combi.c .\puzzles.h
767 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\combi.c /Focombi.obj
768cube.obj: .\cube.c .\puzzles.h
769 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\cube.c /Focube.obj
770cube3.obj: .\cube.c .\puzzles.h
771 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\cube.c /Focube3.obj
772divvy.obj: .\divvy.c .\puzzles.h
773 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\divvy.c /Fodivvy.obj
774dominosa.obj: .\dominosa.c .\puzzles.h
775 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\dominosa.c /Fodominosa.obj
776dominos3.obj: .\dominosa.c .\puzzles.h
777 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\dominosa.c /Fodominos3.obj
778drawing.obj: .\drawing.c .\puzzles.h
779 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\drawing.c /Fodrawing.obj
780dsf.obj: .\dsf.c .\puzzles.h
781 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\dsf.c /Fodsf.obj
782fifteen.obj: .\fifteen.c .\puzzles.h
783 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\fifteen.c /Fofifteen.obj
784fifteen5.obj: .\fifteen.c .\puzzles.h
785 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\fifteen.c /Fofifteen5.obj
786fifteen2.obj: .\fifteen.c .\puzzles.h
787 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\fifteen.c /Fofifteen2.obj
788filling.obj: .\filling.c .\puzzles.h
789 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\filling.c /Fofilling.obj
790filling5.obj: .\filling.c .\puzzles.h
791 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\filling.c /Fofilling5.obj
792filling2.obj: .\filling.c .\puzzles.h
793 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\filling.c /Fofilling2.obj
794findloop.obj: .\findloop.c .\puzzles.h
795 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\findloop.c /Fofindloop.obj
796flip.obj: .\flip.c .\puzzles.h .\tree234.h
797 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\flip.c /Foflip.obj
798flip3.obj: .\flip.c .\puzzles.h .\tree234.h
799 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\flip.c /Foflip3.obj
800flood.obj: .\flood.c .\puzzles.h
801 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\flood.c /Foflood.obj
802flood3.obj: .\flood.c .\puzzles.h
803 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\flood.c /Foflood3.obj
804galaxies.obj: .\galaxies.c .\puzzles.h
805 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\galaxies.c /Fogalaxies.obj
806galaxie7.obj: .\galaxies.c .\puzzles.h
807 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\galaxies.c /Fogalaxie7.obj
808galaxie4.obj: .\galaxies.c .\puzzles.h
809 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_PICTURE_GENERATOR /c .\galaxies.c /Fogalaxie4.obj
810galaxie2.obj: .\galaxies.c .\puzzles.h
811 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\galaxies.c /Fogalaxie2.obj
812grid.obj: .\grid.c .\puzzles.h .\tree234.h .\grid.h .\penrose.h
813 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\grid.c /Fogrid.obj
814gtk.obj: .\gtk.c .\puzzles.h
815 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\gtk.c /Fogtk.obj
816guess.obj: .\guess.c .\puzzles.h
817 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\guess.c /Foguess.obj
818guess3.obj: .\guess.c .\puzzles.h
819 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\guess.c /Foguess3.obj
820inertia.obj: .\inertia.c .\puzzles.h
821 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\inertia.c /Foinertia.obj
822inertia3.obj: .\inertia.c .\puzzles.h
823 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\inertia.c /Foinertia3.obj
824keen.obj: .\keen.c .\puzzles.h .\latin.h
825 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\keen.c /Fokeen.obj
826keen5.obj: .\keen.c .\puzzles.h .\latin.h
827 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\keen.c /Fokeen5.obj
828keen2.obj: .\keen.c .\puzzles.h .\latin.h
829 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\keen.c /Fokeen2.obj
830latin.obj: .\latin.c .\puzzles.h .\tree234.h .\maxflow.h .\latin.h
831 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\latin.c /Folatin.obj
832latin8.obj: .\latin.c .\puzzles.h .\tree234.h .\maxflow.h .\latin.h
833 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_LATIN_TEST /c .\latin.c /Folatin8.obj
834latin6.obj: .\latin.c .\puzzles.h .\tree234.h .\maxflow.h .\latin.h
835 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\latin.c /Folatin6.obj
836laydomino.obj: .\laydomino.c .\puzzles.h
837 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\laydomino.c /Folaydomino.obj
838lightup.obj: .\lightup.c .\puzzles.h
839 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\lightup.c /Folightup.obj
840lightup5.obj: .\lightup.c .\puzzles.h
841 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\lightup.c /Folightup5.obj
842lightup2.obj: .\lightup.c .\puzzles.h
843 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\lightup.c /Folightup2.obj
844list.obj: .\list.c .\puzzles.h
845 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\list.c /Folist.obj
846loopgen.obj: .\loopgen.c .\puzzles.h .\tree234.h .\grid.h .\loopgen.h
847 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\loopgen.c /Foloopgen.obj
848loopy.obj: .\loopy.c .\puzzles.h .\tree234.h .\grid.h .\loopgen.h
849 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\loopy.c /Foloopy.obj
850loopy5.obj: .\loopy.c .\puzzles.h .\tree234.h .\grid.h .\loopgen.h
851 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\loopy.c /Foloopy5.obj
852loopy2.obj: .\loopy.c .\puzzles.h .\tree234.h .\grid.h .\loopgen.h
853 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\loopy.c /Foloopy2.obj
854magnets.obj: .\magnets.c .\puzzles.h
855 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\magnets.c /Fomagnets.obj
856magnets5.obj: .\magnets.c .\puzzles.h
857 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\magnets.c /Fomagnets5.obj
858magnets2.obj: .\magnets.c .\puzzles.h
859 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\magnets.c /Fomagnets2.obj
860malloc.obj: .\malloc.c .\puzzles.h
861 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\malloc.c /Fomalloc.obj
862map.obj: .\map.c .\puzzles.h
863 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\map.c /Fomap.obj
864map5.obj: .\map.c .\puzzles.h
865 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\map.c /Fomap5.obj
866map2.obj: .\map.c .\puzzles.h
867 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\map.c /Fomap2.obj
868maxflow.obj: .\maxflow.c .\maxflow.h .\puzzles.h
869 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\maxflow.c /Fomaxflow.obj
870midend.obj: .\midend.c .\puzzles.h
871 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\midend.c /Fomidend.obj
872mines.obj: .\mines.c .\tree234.h .\puzzles.h
873 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\mines.c /Fomines.obj
874mines5.obj: .\mines.c .\tree234.h .\puzzles.h
875 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\mines.c /Fomines5.obj
876mines2.obj: .\mines.c .\tree234.h .\puzzles.h
877 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_OBFUSCATOR /c .\mines.c /Fomines2.obj
878misc.obj: .\misc.c .\puzzles.h
879 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\misc.c /Fomisc.obj
880net.obj: .\net.c .\puzzles.h .\tree234.h
881 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\net.c /Fonet.obj
882net3.obj: .\net.c .\puzzles.h .\tree234.h
883 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\net.c /Fonet3.obj
884netslide.obj: .\netslide.c .\puzzles.h .\tree234.h
885 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\netslide.c /Fonetslide.obj
886netslid3.obj: .\netslide.c .\puzzles.h .\tree234.h
887 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\netslide.c /Fonetslid3.obj
888no-icon.obj: .\no-icon.c
889 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\no-icon.c /Fono-icon.obj
890noicon.res: .\noicon.rc .\puzzles.rc2 .\resource.h
891 rc $(FWHACK) $(RCFL) -r -DWIN32 -D_WIN32 -DWINVER=0x0400 -fonoicon.res .\noicon.rc
892nullfe.obj: .\nullfe.c .\puzzles.h
893 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\nullfe.c /Fonullfe.obj
894nullgame.obj: .\nullgame.c .\puzzles.h
895 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\nullgame.c /Fonullgame.obj
896obfusc.obj: .\obfusc.c .\puzzles.h
897 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\obfusc.c /Foobfusc.obj
898osx.obj: .\osx.m .\puzzles.h
899 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\osx.m /Foosx.obj
900palisade.obj: .\palisade.c .\puzzles.h
901 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\palisade.c /Fopalisade.obj
902palisad3.obj: .\palisade.c .\puzzles.h
903 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\palisade.c /Fopalisad3.obj
904pattern.obj: .\pattern.c .\puzzles.h
905 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\pattern.c /Fopattern.obj
906pattern7.obj: .\pattern.c .\puzzles.h
907 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\pattern.c /Fopattern7.obj
908pattern4.obj: .\pattern.c .\puzzles.h
909 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_PICTURE_GENERATOR /c .\pattern.c /Fopattern4.obj
910pattern2.obj: .\pattern.c .\puzzles.h
911 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\pattern.c /Fopattern2.obj
912pearl.obj: .\pearl.c .\puzzles.h .\grid.h .\loopgen.h
913 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\pearl.c /Fopearl.obj
914pearl5.obj: .\pearl.c .\puzzles.h .\grid.h .\loopgen.h
915 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\pearl.c /Fopearl5.obj
916pearl2.obj: .\pearl.c .\puzzles.h .\grid.h .\loopgen.h
917 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\pearl.c /Fopearl2.obj
918pegs.obj: .\pegs.c .\puzzles.h .\tree234.h
919 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\pegs.c /Fopegs.obj
920pegs3.obj: .\pegs.c .\puzzles.h .\tree234.h
921 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\pegs.c /Fopegs3.obj
922penrose.obj: .\penrose.c .\puzzles.h .\penrose.h
923 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\penrose.c /Fopenrose.obj
924printing.obj: .\printing.c .\puzzles.h
925 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\printing.c /Foprinting.obj
926ps.obj: .\ps.c .\puzzles.h
927 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\ps.c /Fops.obj
928random.obj: .\random.c .\puzzles.h
929 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\random.c /Forandom.obj
930range.obj: .\range.c .\puzzles.h
931 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\range.c /Forange.obj
932range3.obj: .\range.c .\puzzles.h
933 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\range.c /Forange3.obj
934rect.obj: .\rect.c .\puzzles.h
935 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\rect.c /Forect.obj
936rect3.obj: .\rect.c .\puzzles.h
937 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\rect.c /Forect3.obj
938samegame.obj: .\samegame.c .\puzzles.h
939 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\samegame.c /Fosamegame.obj
940samegam3.obj: .\samegame.c .\puzzles.h
941 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\samegame.c /Fosamegam3.obj
942signpost.obj: .\signpost.c .\puzzles.h
943 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\signpost.c /Fosignpost.obj
944signpos5.obj: .\signpost.c .\puzzles.h
945 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\signpost.c /Fosignpos5.obj
946signpos2.obj: .\signpost.c .\puzzles.h
947 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\signpost.c /Fosignpos2.obj
948singles.obj: .\singles.c .\puzzles.h .\latin.h
949 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\singles.c /Fosingles.obj
950singles5.obj: .\singles.c .\puzzles.h .\latin.h
951 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\singles.c /Fosingles5.obj
952singles3.obj: .\singles.c .\puzzles.h .\latin.h
953 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\singles.c /Fosingles3.obj
954sixteen.obj: .\sixteen.c .\puzzles.h
955 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\sixteen.c /Fosixteen.obj
956sixteen3.obj: .\sixteen.c .\puzzles.h
957 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\sixteen.c /Fosixteen3.obj
958slant.obj: .\slant.c .\puzzles.h
959 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\slant.c /Foslant.obj
960slant5.obj: .\slant.c .\puzzles.h
961 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\slant.c /Foslant5.obj
962slant2.obj: .\slant.c .\puzzles.h
963 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\slant.c /Foslant2.obj
964solo.obj: .\solo.c .\puzzles.h
965 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\solo.c /Fosolo.obj
966solo5.obj: .\solo.c .\puzzles.h
967 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\solo.c /Fosolo5.obj
968solo2.obj: .\solo.c .\puzzles.h
969 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\solo.c /Fosolo2.obj
970tdq.obj: .\tdq.c .\puzzles.h
971 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\tdq.c /Fotdq.obj
972tents.obj: .\tents.c .\puzzles.h .\maxflow.h
973 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\tents.c /Fotents.obj
974tents5.obj: .\tents.c .\puzzles.h .\maxflow.h
975 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\tents.c /Fotents5.obj
976tents3.obj: .\tents.c .\puzzles.h .\maxflow.h
977 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\tents.c /Fotents3.obj
978towers.obj: .\towers.c .\puzzles.h .\latin.h
979 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\towers.c /Fotowers.obj
980towers5.obj: .\towers.c .\puzzles.h .\latin.h
981 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\towers.c /Fotowers5.obj
982towers2.obj: .\towers.c .\puzzles.h .\latin.h
983 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\towers.c /Fotowers2.obj
984tracks.obj: .\tracks.c .\puzzles.h
985 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\tracks.c /Fotracks.obj
986tracks3.obj: .\tracks.c .\puzzles.h
987 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\tracks.c /Fotracks3.obj
988tree234.obj: .\tree234.c .\tree234.h .\puzzles.h
989 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\tree234.c /Fotree234.obj
990twiddle.obj: .\twiddle.c .\puzzles.h
991 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\twiddle.c /Fotwiddle.obj
992twiddle3.obj: .\twiddle.c .\puzzles.h
993 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\twiddle.c /Fotwiddle3.obj
994undead.obj: .\undead.c .\puzzles.h
995 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\undead.c /Foundead.obj
996undead3.obj: .\undead.c .\puzzles.h
997 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\undead.c /Foundead3.obj
998unequal.obj: .\unequal.c .\puzzles.h .\latin.h
999 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\unequal.c /Founequal.obj
1000unequal5.obj: .\unequal.c .\puzzles.h .\latin.h
1001 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\unequal.c /Founequal5.obj
1002unequal2.obj: .\unequal.c .\puzzles.h .\latin.h
1003 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\unequal.c /Founequal2.obj
1004unruly.obj: .\unruly.c .\puzzles.h
1005 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\unruly.c /Founruly.obj
1006unruly5.obj: .\unruly.c .\puzzles.h
1007 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\unruly.c /Founruly5.obj
1008unruly2.obj: .\unruly.c .\puzzles.h
1009 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\unruly.c /Founruly2.obj
1010untangle.obj: .\untangle.c .\puzzles.h .\tree234.h
1011 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\untangle.c /Fountangle.obj
1012untangl3.obj: .\untangle.c .\puzzles.h .\tree234.h
1013 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\untangle.c /Fountangl3.obj
1014version.obj: .\version.c .\version.h
1015 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\version.c /Foversion.obj
1016windows.obj: .\windows.c .\puzzles.h .\resource.h
1017 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\windows.c /Fowindows.obj
1018windows1.obj: .\windows.c .\puzzles.h .\resource.h
1019 cl $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\windows.c /Fowindows1.obj
1020
1021
1022clean: tidy
1023 -del *.exe
1024
1025tidy:
1026 -del *.obj
1027 -del *.res
1028 -del *.pch
1029 -del *.aps
1030 -del *.ilk
1031 -del *.pdb
1032 -del *.rsp
1033 -del *.dsp
1034 -del *.dsw
1035 -del *.ncb
1036 -del *.opt
1037 -del *.plg
1038 -del *.map
1039 -del *.idb
1040 -del debug.log
diff --git a/apps/plugins/puzzles/src/Makefile.wce b/apps/plugins/puzzles/src/Makefile.wce
new file mode 100644
index 0000000000..241e30b8df
--- /dev/null
+++ b/apps/plugins/puzzles/src/Makefile.wce
@@ -0,0 +1,808 @@
1# Makefile for puzzles on PocketPC using eMbedded Visual C.
2#
3# This file was created by `mkfiles.pl' from the `Recipe' file.
4# DO NOT EDIT THIS FILE DIRECTLY; edit Recipe or mkfiles.pl instead.
5
6# If you rename this file to `Makefile', you should change this line,
7# so that the .rsp files still depend on the correct makefile.
8MAKEFILE = Makefile.wce
9
10# This makefile expects the environment to have been set up by one
11# of the PocketPC batch files wcearmv4.bat and wceemulator.bat. No
12# other build targets are currently supported, because they would
13# need a section in this if statement.
14!if "$(TARGETCPU)" == "emulator"
15PLATFORM_DEFS=/D "_i386_" /D "i_386_" /D "_X86_" /D "x86"
16CC=cl
17BASELIBS=commctrl.lib coredll.lib corelibc.lib aygshell.lib
18MACHINE=IX86
19!else
20PLATFORM_DEFS=/D "ARM" /D "_ARM_" /D "ARMV4"
21CC=clarm
22BASELIBS=commctrl.lib coredll.lib aygshell.lib
23MACHINE=ARM
24!endif
25
26# C compilation flags
27CFLAGS = /nologo /W3 /O1 /MC /D _WIN32_WCE=420 /D "WIN32_PLATFORM_PSPC=400" /D UNDER_CE=420 \
28 $(PLATFORM_DEFS) \
29 /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "NO_HTMLHELP"
30
31LFLAGS = /nologo /incremental:no \
32 /base:0x00010000 /stack:0x10000,0x1000 /entry:WinMainCRTStartup \
33 /nodefaultlib:libc.lib /nodefaultlib:libcmt.lib /nodefaultlib:msvcrt.lib /nodefaultlib:OLDNAMES.lib \
34 /subsystem:windowsce,4.20 /align:4096 /MACHINE:$(MACHINE)
35
36RCFL = /d UNDER_CE=420 /d _WIN32_WCE=420 /d "WIN32_PLATFORM_PSPC=400" \
37 $(PLATFORM_DEFS) \
38 /d "NDEBUG" /d "UNICODE" /d "_UNICODE"
39
40all: blackbox.exe bridges.exe cube.exe dominosa.exe fifteen.exe filling.exe \
41 flip.exe flood.exe galaxies.exe guess.exe inertia.exe \
42 keen.exe lightup.exe loopy.exe magnets.exe map.exe mines.exe \
43 netgame.exe netslide.exe nullgame.exe palisade.exe \
44 pattern.exe pearl.exe pegs.exe puzzles.exe range.exe \
45 rect.exe samegame.exe signpost.exe singles.exe sixteen.exe \
46 slant.exe solo.exe tents.exe towers.exe tracks.exe \
47 twiddle.exe undead.exe unequal.exe unruly.exe untangle.exe
48
49blackbox.exe: blackbox.obj drawing.obj malloc.obj midend.obj misc.obj \
50 noicon.res printing.obj random.obj version.obj windows.obj \
51 blackbox.rsp
52 link $(LFLAGS) -out:blackbox.exe -map:blackbox.map @blackbox.rsp
53
54bridges.exe: bridges.obj drawing.obj dsf.obj findloop.obj malloc.obj \
55 midend.obj misc.obj noicon.res printing.obj random.obj \
56 version.obj windows.obj bridges.rsp
57 link $(LFLAGS) -out:bridges.exe -map:bridges.map @bridges.rsp
58
59cube.exe: cube.obj drawing.obj malloc.obj midend.obj misc.obj noicon.res \
60 printing.obj random.obj version.obj windows.obj cube.rsp
61 link $(LFLAGS) -out:cube.exe -map:cube.map @cube.rsp
62
63dominosa.exe: dominosa.obj drawing.obj laydomino.obj malloc.obj midend.obj \
64 misc.obj noicon.res printing.obj random.obj version.obj \
65 windows.obj dominosa.rsp
66 link $(LFLAGS) -out:dominosa.exe -map:dominosa.map @dominosa.rsp
67
68fifteen.exe: drawing.obj fifteen.obj malloc.obj midend.obj misc.obj \
69 noicon.res printing.obj random.obj version.obj windows.obj \
70 fifteen.rsp
71 link $(LFLAGS) -out:fifteen.exe -map:fifteen.map @fifteen.rsp
72
73filling.exe: drawing.obj dsf.obj filling.obj malloc.obj midend.obj misc.obj \
74 noicon.res printing.obj random.obj version.obj windows.obj \
75 filling.rsp
76 link $(LFLAGS) -out:filling.exe -map:filling.map @filling.rsp
77
78flip.exe: drawing.obj flip.obj malloc.obj midend.obj misc.obj noicon.res \
79 printing.obj random.obj tree234.obj version.obj windows.obj \
80 flip.rsp
81 link $(LFLAGS) -out:flip.exe -map:flip.map @flip.rsp
82
83flood.exe: drawing.obj flood.obj malloc.obj midend.obj misc.obj noicon.res \
84 printing.obj random.obj version.obj windows.obj flood.rsp
85 link $(LFLAGS) -out:flood.exe -map:flood.map @flood.rsp
86
87galaxies.exe: drawing.obj dsf.obj galaxies.obj malloc.obj midend.obj \
88 misc.obj noicon.res printing.obj random.obj version.obj \
89 windows.obj galaxies.rsp
90 link $(LFLAGS) -out:galaxies.exe -map:galaxies.map @galaxies.rsp
91
92guess.exe: drawing.obj guess.obj malloc.obj midend.obj misc.obj noicon.res \
93 printing.obj random.obj version.obj windows.obj guess.rsp
94 link $(LFLAGS) -out:guess.exe -map:guess.map @guess.rsp
95
96inertia.exe: drawing.obj inertia.obj malloc.obj midend.obj misc.obj \
97 noicon.res printing.obj random.obj version.obj windows.obj \
98 inertia.rsp
99 link $(LFLAGS) -out:inertia.exe -map:inertia.map @inertia.rsp
100
101keen.exe: drawing.obj dsf.obj keen.obj latin.obj malloc.obj maxflow.obj \
102 midend.obj misc.obj noicon.res printing.obj random.obj \
103 tree234.obj version.obj windows.obj keen.rsp
104 link $(LFLAGS) -out:keen.exe -map:keen.map @keen.rsp
105
106lightup.exe: combi.obj drawing.obj lightup.obj malloc.obj midend.obj \
107 misc.obj noicon.res printing.obj random.obj version.obj \
108 windows.obj lightup.rsp
109 link $(LFLAGS) -out:lightup.exe -map:lightup.map @lightup.rsp
110
111loopy.exe: drawing.obj dsf.obj grid.obj loopgen.obj loopy.obj malloc.obj \
112 midend.obj misc.obj noicon.res penrose.obj printing.obj \
113 random.obj tree234.obj version.obj windows.obj loopy.rsp
114 link $(LFLAGS) -out:loopy.exe -map:loopy.map @loopy.rsp
115
116magnets.exe: drawing.obj laydomino.obj magnets.obj malloc.obj midend.obj \
117 misc.obj noicon.res printing.obj random.obj version.obj \
118 windows.obj magnets.rsp
119 link $(LFLAGS) -out:magnets.exe -map:magnets.map @magnets.rsp
120
121map.exe: drawing.obj dsf.obj malloc.obj map.obj midend.obj misc.obj \
122 noicon.res printing.obj random.obj version.obj windows.obj \
123 map.rsp
124 link $(LFLAGS) -out:map.exe -map:map.map @map.rsp
125
126mines.exe: drawing.obj malloc.obj midend.obj mines.obj misc.obj noicon.res \
127 printing.obj random.obj tree234.obj version.obj windows.obj \
128 mines.rsp
129 link $(LFLAGS) -out:mines.exe -map:mines.map @mines.rsp
130
131netgame.exe: drawing.obj dsf.obj findloop.obj malloc.obj midend.obj misc.obj \
132 net.obj noicon.res printing.obj random.obj tree234.obj \
133 version.obj windows.obj netgame.rsp
134 link $(LFLAGS) -out:netgame.exe -map:netgame.map @netgame.rsp
135
136netslide.exe: drawing.obj malloc.obj midend.obj misc.obj netslide.obj \
137 noicon.res printing.obj random.obj tree234.obj version.obj \
138 windows.obj netslide.rsp
139 link $(LFLAGS) -out:netslide.exe -map:netslide.map @netslide.rsp
140
141nullgame.exe: drawing.obj malloc.obj midend.obj misc.obj noicon.res \
142 nullgame.obj printing.obj random.obj version.obj windows.obj \
143 nullgame.rsp
144 link $(LFLAGS) -out:nullgame.exe -map:nullgame.map @nullgame.rsp
145
146palisade.exe: divvy.obj drawing.obj dsf.obj malloc.obj midend.obj misc.obj \
147 noicon.res palisade.obj printing.obj random.obj version.obj \
148 windows.obj palisade.rsp
149 link $(LFLAGS) -out:palisade.exe -map:palisade.map @palisade.rsp
150
151pattern.exe: drawing.obj malloc.obj midend.obj misc.obj noicon.res \
152 pattern.obj printing.obj random.obj version.obj windows.obj \
153 pattern.rsp
154 link $(LFLAGS) -out:pattern.exe -map:pattern.map @pattern.rsp
155
156pearl.exe: drawing.obj dsf.obj grid.obj loopgen.obj malloc.obj midend.obj \
157 misc.obj pearl.obj penrose.obj printing.obj random.obj \
158 tdq.obj tree234.obj version.obj windows.obj pearl.rsp
159 link $(LFLAGS) -out:pearl.exe -map:pearl.map @pearl.rsp
160
161pegs.exe: drawing.obj malloc.obj midend.obj misc.obj noicon.res pegs.obj \
162 printing.obj random.obj tree234.obj version.obj windows.obj \
163 pegs.rsp
164 link $(LFLAGS) -out:pegs.exe -map:pegs.map @pegs.rsp
165
166puzzles.exe: blackbo3.obj bridges3.obj combi.obj cube3.obj divvy.obj \
167 dominos3.obj drawing.obj dsf.obj fifteen5.obj filling5.obj \
168 findloop.obj flip3.obj flood3.obj galaxie7.obj grid.obj \
169 guess3.obj inertia3.obj keen5.obj latin.obj laydomino.obj \
170 lightup5.obj list.obj loopgen.obj loopy5.obj magnets5.obj \
171 malloc.obj map5.obj maxflow.obj midend.obj mines5.obj \
172 misc.obj net3.obj netslid3.obj noicon.res palisad3.obj \
173 pattern7.obj pearl5.obj pegs3.obj penrose.obj printing.obj \
174 random.obj range3.obj rect3.obj samegam3.obj signpos5.obj \
175 singles5.obj sixteen3.obj slant5.obj solo5.obj tdq.obj \
176 tents5.obj towers5.obj tracks3.obj tree234.obj twiddle3.obj \
177 undead3.obj unequal5.obj unruly5.obj untangl3.obj \
178 version.obj windows1.obj puzzles.rsp
179 link $(LFLAGS) -out:puzzles.exe -map:puzzles.map @puzzles.rsp
180
181range.exe: drawing.obj dsf.obj malloc.obj midend.obj misc.obj noicon.res \
182 printing.obj random.obj range.obj version.obj windows.obj \
183 range.rsp
184 link $(LFLAGS) -out:range.exe -map:range.map @range.rsp
185
186rect.exe: drawing.obj malloc.obj midend.obj misc.obj noicon.res printing.obj \
187 random.obj rect.obj version.obj windows.obj rect.rsp
188 link $(LFLAGS) -out:rect.exe -map:rect.map @rect.rsp
189
190samegame.exe: drawing.obj malloc.obj midend.obj misc.obj noicon.res \
191 printing.obj random.obj samegame.obj version.obj windows.obj \
192 samegame.rsp
193 link $(LFLAGS) -out:samegame.exe -map:samegame.map @samegame.rsp
194
195signpost.exe: drawing.obj dsf.obj malloc.obj midend.obj misc.obj noicon.res \
196 printing.obj random.obj signpost.obj version.obj windows.obj \
197 signpost.rsp
198 link $(LFLAGS) -out:signpost.exe -map:signpost.map @signpost.rsp
199
200singles.exe: drawing.obj dsf.obj latin.obj malloc.obj maxflow.obj midend.obj \
201 misc.obj noicon.res printing.obj random.obj singles.obj \
202 tree234.obj version.obj windows.obj singles.rsp
203 link $(LFLAGS) -out:singles.exe -map:singles.map @singles.rsp
204
205sixteen.exe: drawing.obj malloc.obj midend.obj misc.obj noicon.res \
206 printing.obj random.obj sixteen.obj version.obj windows.obj \
207 sixteen.rsp
208 link $(LFLAGS) -out:sixteen.exe -map:sixteen.map @sixteen.rsp
209
210slant.exe: drawing.obj dsf.obj findloop.obj malloc.obj midend.obj misc.obj \
211 noicon.res printing.obj random.obj slant.obj version.obj \
212 windows.obj slant.rsp
213 link $(LFLAGS) -out:slant.exe -map:slant.map @slant.rsp
214
215solo.exe: divvy.obj drawing.obj dsf.obj malloc.obj midend.obj misc.obj \
216 noicon.res printing.obj random.obj solo.obj version.obj \
217 windows.obj solo.rsp
218 link $(LFLAGS) -out:solo.exe -map:solo.map @solo.rsp
219
220tents.exe: drawing.obj dsf.obj malloc.obj maxflow.obj midend.obj misc.obj \
221 noicon.res printing.obj random.obj tents.obj version.obj \
222 windows.obj tents.rsp
223 link $(LFLAGS) -out:tents.exe -map:tents.map @tents.rsp
224
225towers.exe: drawing.obj latin.obj malloc.obj maxflow.obj midend.obj misc.obj \
226 noicon.res printing.obj random.obj towers.obj tree234.obj \
227 version.obj windows.obj towers.rsp
228 link $(LFLAGS) -out:towers.exe -map:towers.map @towers.rsp
229
230tracks.exe: drawing.obj dsf.obj findloop.obj malloc.obj midend.obj misc.obj \
231 noicon.res printing.obj random.obj tracks.obj version.obj \
232 windows.obj tracks.rsp
233 link $(LFLAGS) -out:tracks.exe -map:tracks.map @tracks.rsp
234
235twiddle.exe: drawing.obj malloc.obj midend.obj misc.obj noicon.res \
236 printing.obj random.obj twiddle.obj version.obj windows.obj \
237 twiddle.rsp
238 link $(LFLAGS) -out:twiddle.exe -map:twiddle.map @twiddle.rsp
239
240undead.exe: drawing.obj malloc.obj midend.obj misc.obj noicon.res \
241 printing.obj random.obj undead.obj version.obj windows.obj \
242 undead.rsp
243 link $(LFLAGS) -out:undead.exe -map:undead.map @undead.rsp
244
245unequal.exe: drawing.obj latin.obj malloc.obj maxflow.obj midend.obj \
246 misc.obj noicon.res printing.obj random.obj tree234.obj \
247 unequal.obj version.obj windows.obj unequal.rsp
248 link $(LFLAGS) -out:unequal.exe -map:unequal.map @unequal.rsp
249
250unruly.exe: drawing.obj malloc.obj midend.obj misc.obj noicon.res \
251 printing.obj random.obj unruly.obj version.obj windows.obj \
252 unruly.rsp
253 link $(LFLAGS) -out:unruly.exe -map:unruly.map @unruly.rsp
254
255untangle.exe: drawing.obj malloc.obj midend.obj misc.obj noicon.res \
256 printing.obj random.obj tree234.obj untangle.obj version.obj \
257 windows.obj untangle.rsp
258 link $(LFLAGS) -out:untangle.exe -map:untangle.map @untangle.rsp
259
260blackbox.rsp: $(MAKEFILE)
261 echo $(BASELIBS) > blackbox.rsp
262 echo blackbox.obj drawing.obj malloc.obj midend.obj >> blackbox.rsp
263 echo misc.obj noicon.res printing.obj random.obj >> blackbox.rsp
264 echo version.obj windows.obj >> blackbox.rsp
265
266bridges.rsp: $(MAKEFILE)
267 echo $(BASELIBS) > bridges.rsp
268 echo bridges.obj drawing.obj dsf.obj findloop.obj >> bridges.rsp
269 echo malloc.obj midend.obj misc.obj noicon.res >> bridges.rsp
270 echo printing.obj random.obj version.obj windows.obj >> bridges.rsp
271
272cube.rsp: $(MAKEFILE)
273 echo $(BASELIBS) > cube.rsp
274 echo cube.obj drawing.obj malloc.obj midend.obj >> cube.rsp
275 echo misc.obj noicon.res printing.obj random.obj >> cube.rsp
276 echo version.obj windows.obj >> cube.rsp
277
278dominosa.rsp: $(MAKEFILE)
279 echo $(BASELIBS) > dominosa.rsp
280 echo dominosa.obj drawing.obj laydomino.obj malloc.obj >> dominosa.rsp
281 echo midend.obj misc.obj noicon.res printing.obj >> dominosa.rsp
282 echo random.obj version.obj windows.obj >> dominosa.rsp
283
284fifteen.rsp: $(MAKEFILE)
285 echo $(BASELIBS) > fifteen.rsp
286 echo drawing.obj fifteen.obj malloc.obj midend.obj >> fifteen.rsp
287 echo misc.obj noicon.res printing.obj random.obj >> fifteen.rsp
288 echo version.obj windows.obj >> fifteen.rsp
289
290filling.rsp: $(MAKEFILE)
291 echo $(BASELIBS) > filling.rsp
292 echo drawing.obj dsf.obj filling.obj malloc.obj >> filling.rsp
293 echo midend.obj misc.obj noicon.res printing.obj >> filling.rsp
294 echo random.obj version.obj windows.obj >> filling.rsp
295
296flip.rsp: $(MAKEFILE)
297 echo $(BASELIBS) > flip.rsp
298 echo drawing.obj flip.obj malloc.obj midend.obj >> flip.rsp
299 echo misc.obj noicon.res printing.obj random.obj >> flip.rsp
300 echo tree234.obj version.obj windows.obj >> flip.rsp
301
302flood.rsp: $(MAKEFILE)
303 echo $(BASELIBS) > flood.rsp
304 echo drawing.obj flood.obj malloc.obj midend.obj >> flood.rsp
305 echo misc.obj noicon.res printing.obj random.obj >> flood.rsp
306 echo version.obj windows.obj >> flood.rsp
307
308galaxies.rsp: $(MAKEFILE)
309 echo $(BASELIBS) > galaxies.rsp
310 echo drawing.obj dsf.obj galaxies.obj malloc.obj >> galaxies.rsp
311 echo midend.obj misc.obj noicon.res printing.obj >> galaxies.rsp
312 echo random.obj version.obj windows.obj >> galaxies.rsp
313
314guess.rsp: $(MAKEFILE)
315 echo $(BASELIBS) > guess.rsp
316 echo drawing.obj guess.obj malloc.obj midend.obj >> guess.rsp
317 echo misc.obj noicon.res printing.obj random.obj >> guess.rsp
318 echo version.obj windows.obj >> guess.rsp
319
320inertia.rsp: $(MAKEFILE)
321 echo $(BASELIBS) > inertia.rsp
322 echo drawing.obj inertia.obj malloc.obj midend.obj >> inertia.rsp
323 echo misc.obj noicon.res printing.obj random.obj >> inertia.rsp
324 echo version.obj windows.obj >> inertia.rsp
325
326keen.rsp: $(MAKEFILE)
327 echo $(BASELIBS) > keen.rsp
328 echo drawing.obj dsf.obj keen.obj latin.obj malloc.obj >> keen.rsp
329 echo maxflow.obj midend.obj misc.obj noicon.res >> keen.rsp
330 echo printing.obj random.obj tree234.obj version.obj >> keen.rsp
331 echo windows.obj >> keen.rsp
332
333lightup.rsp: $(MAKEFILE)
334 echo $(BASELIBS) > lightup.rsp
335 echo combi.obj drawing.obj lightup.obj malloc.obj >> lightup.rsp
336 echo midend.obj misc.obj noicon.res printing.obj >> lightup.rsp
337 echo random.obj version.obj windows.obj >> lightup.rsp
338
339loopy.rsp: $(MAKEFILE)
340 echo $(BASELIBS) > loopy.rsp
341 echo drawing.obj dsf.obj grid.obj loopgen.obj >> loopy.rsp
342 echo loopy.obj malloc.obj midend.obj misc.obj >> loopy.rsp
343 echo noicon.res penrose.obj printing.obj random.obj >> loopy.rsp
344 echo tree234.obj version.obj windows.obj >> loopy.rsp
345
346magnets.rsp: $(MAKEFILE)
347 echo $(BASELIBS) > magnets.rsp
348 echo drawing.obj laydomino.obj magnets.obj malloc.obj >> magnets.rsp
349 echo midend.obj misc.obj noicon.res printing.obj >> magnets.rsp
350 echo random.obj version.obj windows.obj >> magnets.rsp
351
352map.rsp: $(MAKEFILE)
353 echo $(BASELIBS) > map.rsp
354 echo drawing.obj dsf.obj malloc.obj map.obj midend.obj >> map.rsp
355 echo misc.obj noicon.res printing.obj random.obj >> map.rsp
356 echo version.obj windows.obj >> map.rsp
357
358mines.rsp: $(MAKEFILE)
359 echo $(BASELIBS) > mines.rsp
360 echo drawing.obj malloc.obj midend.obj mines.obj >> mines.rsp
361 echo misc.obj noicon.res printing.obj random.obj >> mines.rsp
362 echo tree234.obj version.obj windows.obj >> mines.rsp
363
364netgame.rsp: $(MAKEFILE)
365 echo $(BASELIBS) > netgame.rsp
366 echo drawing.obj dsf.obj findloop.obj malloc.obj >> netgame.rsp
367 echo midend.obj misc.obj net.obj noicon.res >> netgame.rsp
368 echo printing.obj random.obj tree234.obj version.obj >> netgame.rsp
369 echo windows.obj >> netgame.rsp
370
371netslide.rsp: $(MAKEFILE)
372 echo $(BASELIBS) > netslide.rsp
373 echo drawing.obj malloc.obj midend.obj misc.obj >> netslide.rsp
374 echo netslide.obj noicon.res printing.obj random.obj >> netslide.rsp
375 echo tree234.obj version.obj windows.obj >> netslide.rsp
376
377nullgame.rsp: $(MAKEFILE)
378 echo $(BASELIBS) > nullgame.rsp
379 echo drawing.obj malloc.obj midend.obj misc.obj >> nullgame.rsp
380 echo noicon.res nullgame.obj printing.obj random.obj >> nullgame.rsp
381 echo version.obj windows.obj >> nullgame.rsp
382
383palisade.rsp: $(MAKEFILE)
384 echo $(BASELIBS) > palisade.rsp
385 echo divvy.obj drawing.obj dsf.obj malloc.obj >> palisade.rsp
386 echo midend.obj misc.obj noicon.res palisade.obj >> palisade.rsp
387 echo printing.obj random.obj version.obj windows.obj >> palisade.rsp
388
389pattern.rsp: $(MAKEFILE)
390 echo $(BASELIBS) > pattern.rsp
391 echo drawing.obj malloc.obj midend.obj misc.obj >> pattern.rsp
392 echo noicon.res pattern.obj printing.obj random.obj >> pattern.rsp
393 echo version.obj windows.obj >> pattern.rsp
394
395pearl.rsp: $(MAKEFILE)
396 echo $(BASELIBS) > pearl.rsp
397 echo drawing.obj dsf.obj grid.obj loopgen.obj >> pearl.rsp
398 echo malloc.obj midend.obj misc.obj pearl.obj >> pearl.rsp
399 echo penrose.obj printing.obj random.obj tdq.obj >> pearl.rsp
400 echo tree234.obj version.obj windows.obj >> pearl.rsp
401
402pegs.rsp: $(MAKEFILE)
403 echo $(BASELIBS) > pegs.rsp
404 echo drawing.obj malloc.obj midend.obj misc.obj >> pegs.rsp
405 echo noicon.res pegs.obj printing.obj random.obj >> pegs.rsp
406 echo tree234.obj version.obj windows.obj >> pegs.rsp
407
408puzzles.rsp: $(MAKEFILE)
409 echo $(BASELIBS) > puzzles.rsp
410 echo blackbo3.obj bridges3.obj combi.obj cube3.obj >> puzzles.rsp
411 echo divvy.obj dominos3.obj drawing.obj dsf.obj >> puzzles.rsp
412 echo fifteen5.obj filling5.obj findloop.obj flip3.obj >> puzzles.rsp
413 echo flood3.obj galaxie7.obj grid.obj guess3.obj >> puzzles.rsp
414 echo inertia3.obj keen5.obj latin.obj laydomino.obj >> puzzles.rsp
415 echo lightup5.obj list.obj loopgen.obj loopy5.obj >> puzzles.rsp
416 echo magnets5.obj malloc.obj map5.obj maxflow.obj >> puzzles.rsp
417 echo midend.obj mines5.obj misc.obj net3.obj >> puzzles.rsp
418 echo netslid3.obj noicon.res palisad3.obj pattern7.obj >> puzzles.rsp
419 echo pearl5.obj pegs3.obj penrose.obj printing.obj >> puzzles.rsp
420 echo random.obj range3.obj rect3.obj samegam3.obj >> puzzles.rsp
421 echo signpos5.obj singles5.obj sixteen3.obj slant5.obj >> puzzles.rsp
422 echo solo5.obj tdq.obj tents5.obj towers5.obj >> puzzles.rsp
423 echo tracks3.obj tree234.obj twiddle3.obj undead3.obj >> puzzles.rsp
424 echo unequal5.obj unruly5.obj untangl3.obj version.obj >> puzzles.rsp
425 echo windows1.obj >> puzzles.rsp
426
427range.rsp: $(MAKEFILE)
428 echo $(BASELIBS) > range.rsp
429 echo drawing.obj dsf.obj malloc.obj midend.obj >> range.rsp
430 echo misc.obj noicon.res printing.obj random.obj >> range.rsp
431 echo range.obj version.obj windows.obj >> range.rsp
432
433rect.rsp: $(MAKEFILE)
434 echo $(BASELIBS) > rect.rsp
435 echo drawing.obj malloc.obj midend.obj misc.obj >> rect.rsp
436 echo noicon.res printing.obj random.obj rect.obj >> rect.rsp
437 echo version.obj windows.obj >> rect.rsp
438
439samegame.rsp: $(MAKEFILE)
440 echo $(BASELIBS) > samegame.rsp
441 echo drawing.obj malloc.obj midend.obj misc.obj >> samegame.rsp
442 echo noicon.res printing.obj random.obj samegame.obj >> samegame.rsp
443 echo version.obj windows.obj >> samegame.rsp
444
445signpost.rsp: $(MAKEFILE)
446 echo $(BASELIBS) > signpost.rsp
447 echo drawing.obj dsf.obj malloc.obj midend.obj >> signpost.rsp
448 echo misc.obj noicon.res printing.obj random.obj >> signpost.rsp
449 echo signpost.obj version.obj windows.obj >> signpost.rsp
450
451singles.rsp: $(MAKEFILE)
452 echo $(BASELIBS) > singles.rsp
453 echo drawing.obj dsf.obj latin.obj malloc.obj >> singles.rsp
454 echo maxflow.obj midend.obj misc.obj noicon.res >> singles.rsp
455 echo printing.obj random.obj singles.obj tree234.obj >> singles.rsp
456 echo version.obj windows.obj >> singles.rsp
457
458sixteen.rsp: $(MAKEFILE)
459 echo $(BASELIBS) > sixteen.rsp
460 echo drawing.obj malloc.obj midend.obj misc.obj >> sixteen.rsp
461 echo noicon.res printing.obj random.obj sixteen.obj >> sixteen.rsp
462 echo version.obj windows.obj >> sixteen.rsp
463
464slant.rsp: $(MAKEFILE)
465 echo $(BASELIBS) > slant.rsp
466 echo drawing.obj dsf.obj findloop.obj malloc.obj >> slant.rsp
467 echo midend.obj misc.obj noicon.res printing.obj >> slant.rsp
468 echo random.obj slant.obj version.obj windows.obj >> slant.rsp
469
470solo.rsp: $(MAKEFILE)
471 echo $(BASELIBS) > solo.rsp
472 echo divvy.obj drawing.obj dsf.obj malloc.obj >> solo.rsp
473 echo midend.obj misc.obj noicon.res printing.obj >> solo.rsp
474 echo random.obj solo.obj version.obj windows.obj >> solo.rsp
475
476tents.rsp: $(MAKEFILE)
477 echo $(BASELIBS) > tents.rsp
478 echo drawing.obj dsf.obj malloc.obj maxflow.obj >> tents.rsp
479 echo midend.obj misc.obj noicon.res printing.obj >> tents.rsp
480 echo random.obj tents.obj version.obj windows.obj >> tents.rsp
481
482towers.rsp: $(MAKEFILE)
483 echo $(BASELIBS) > towers.rsp
484 echo drawing.obj latin.obj malloc.obj maxflow.obj >> towers.rsp
485 echo midend.obj misc.obj noicon.res printing.obj >> towers.rsp
486 echo random.obj towers.obj tree234.obj version.obj >> towers.rsp
487 echo windows.obj >> towers.rsp
488
489tracks.rsp: $(MAKEFILE)
490 echo $(BASELIBS) > tracks.rsp
491 echo drawing.obj dsf.obj findloop.obj malloc.obj >> tracks.rsp
492 echo midend.obj misc.obj noicon.res printing.obj >> tracks.rsp
493 echo random.obj tracks.obj version.obj windows.obj >> tracks.rsp
494
495twiddle.rsp: $(MAKEFILE)
496 echo $(BASELIBS) > twiddle.rsp
497 echo drawing.obj malloc.obj midend.obj misc.obj >> twiddle.rsp
498 echo noicon.res printing.obj random.obj twiddle.obj >> twiddle.rsp
499 echo version.obj windows.obj >> twiddle.rsp
500
501undead.rsp: $(MAKEFILE)
502 echo $(BASELIBS) > undead.rsp
503 echo drawing.obj malloc.obj midend.obj misc.obj >> undead.rsp
504 echo noicon.res printing.obj random.obj undead.obj >> undead.rsp
505 echo version.obj windows.obj >> undead.rsp
506
507unequal.rsp: $(MAKEFILE)
508 echo $(BASELIBS) > unequal.rsp
509 echo drawing.obj latin.obj malloc.obj maxflow.obj >> unequal.rsp
510 echo midend.obj misc.obj noicon.res printing.obj >> unequal.rsp
511 echo random.obj tree234.obj unequal.obj version.obj >> unequal.rsp
512 echo windows.obj >> unequal.rsp
513
514unruly.rsp: $(MAKEFILE)
515 echo $(BASELIBS) > unruly.rsp
516 echo drawing.obj malloc.obj midend.obj misc.obj >> unruly.rsp
517 echo noicon.res printing.obj random.obj unruly.obj >> unruly.rsp
518 echo version.obj windows.obj >> unruly.rsp
519
520untangle.rsp: $(MAKEFILE)
521 echo $(BASELIBS) > untangle.rsp
522 echo drawing.obj malloc.obj midend.obj misc.obj >> untangle.rsp
523 echo noicon.res printing.obj random.obj tree234.obj >> untangle.rsp
524 echo untangle.obj version.obj windows.obj >> untangle.rsp
525
526blackbox.obj: .\blackbox.c .\puzzles.h
527 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\blackbox.c /Foblackbox.obj
528blackbo3.obj: .\blackbox.c .\puzzles.h
529 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\blackbox.c /Foblackbo3.obj
530bridges.obj: .\bridges.c .\puzzles.h
531 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\bridges.c /Fobridges.obj
532bridges3.obj: .\bridges.c .\puzzles.h
533 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\bridges.c /Fobridges3.obj
534combi.obj: .\combi.c .\puzzles.h
535 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\combi.c /Focombi.obj
536cube.obj: .\cube.c .\puzzles.h
537 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\cube.c /Focube.obj
538cube3.obj: .\cube.c .\puzzles.h
539 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\cube.c /Focube3.obj
540divvy.obj: .\divvy.c .\puzzles.h
541 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\divvy.c /Fodivvy.obj
542dominosa.obj: .\dominosa.c .\puzzles.h
543 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\dominosa.c /Fodominosa.obj
544dominos3.obj: .\dominosa.c .\puzzles.h
545 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\dominosa.c /Fodominos3.obj
546drawing.obj: .\drawing.c .\puzzles.h
547 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\drawing.c /Fodrawing.obj
548dsf.obj: .\dsf.c .\puzzles.h
549 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\dsf.c /Fodsf.obj
550fifteen.obj: .\fifteen.c .\puzzles.h
551 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\fifteen.c /Fofifteen.obj
552fifteen5.obj: .\fifteen.c .\puzzles.h
553 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\fifteen.c /Fofifteen5.obj
554fifteen2.obj: .\fifteen.c .\puzzles.h
555 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\fifteen.c /Fofifteen2.obj
556filling.obj: .\filling.c .\puzzles.h
557 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\filling.c /Fofilling.obj
558filling5.obj: .\filling.c .\puzzles.h
559 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\filling.c /Fofilling5.obj
560filling2.obj: .\filling.c .\puzzles.h
561 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\filling.c /Fofilling2.obj
562findloop.obj: .\findloop.c .\puzzles.h
563 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\findloop.c /Fofindloop.obj
564flip.obj: .\flip.c .\puzzles.h .\tree234.h
565 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\flip.c /Foflip.obj
566flip3.obj: .\flip.c .\puzzles.h .\tree234.h
567 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\flip.c /Foflip3.obj
568flood.obj: .\flood.c .\puzzles.h
569 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\flood.c /Foflood.obj
570flood3.obj: .\flood.c .\puzzles.h
571 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\flood.c /Foflood3.obj
572galaxies.obj: .\galaxies.c .\puzzles.h
573 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\galaxies.c /Fogalaxies.obj
574galaxie7.obj: .\galaxies.c .\puzzles.h
575 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\galaxies.c /Fogalaxie7.obj
576galaxie4.obj: .\galaxies.c .\puzzles.h
577 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_PICTURE_GENERATOR /c .\galaxies.c /Fogalaxie4.obj
578galaxie2.obj: .\galaxies.c .\puzzles.h
579 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\galaxies.c /Fogalaxie2.obj
580grid.obj: .\grid.c .\puzzles.h .\tree234.h .\grid.h .\penrose.h
581 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\grid.c /Fogrid.obj
582gtk.obj: .\gtk.c .\puzzles.h
583 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\gtk.c /Fogtk.obj
584guess.obj: .\guess.c .\puzzles.h
585 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\guess.c /Foguess.obj
586guess3.obj: .\guess.c .\puzzles.h
587 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\guess.c /Foguess3.obj
588inertia.obj: .\inertia.c .\puzzles.h
589 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\inertia.c /Foinertia.obj
590inertia3.obj: .\inertia.c .\puzzles.h
591 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\inertia.c /Foinertia3.obj
592keen.obj: .\keen.c .\puzzles.h .\latin.h
593 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\keen.c /Fokeen.obj
594keen5.obj: .\keen.c .\puzzles.h .\latin.h
595 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\keen.c /Fokeen5.obj
596keen2.obj: .\keen.c .\puzzles.h .\latin.h
597 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\keen.c /Fokeen2.obj
598latin.obj: .\latin.c .\puzzles.h .\tree234.h .\maxflow.h .\latin.h
599 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\latin.c /Folatin.obj
600latin8.obj: .\latin.c .\puzzles.h .\tree234.h .\maxflow.h .\latin.h
601 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_LATIN_TEST /c .\latin.c /Folatin8.obj
602latin6.obj: .\latin.c .\puzzles.h .\tree234.h .\maxflow.h .\latin.h
603 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\latin.c /Folatin6.obj
604laydomino.obj: .\laydomino.c .\puzzles.h
605 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\laydomino.c /Folaydomino.obj
606lightup.obj: .\lightup.c .\puzzles.h
607 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\lightup.c /Folightup.obj
608lightup5.obj: .\lightup.c .\puzzles.h
609 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\lightup.c /Folightup5.obj
610lightup2.obj: .\lightup.c .\puzzles.h
611 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\lightup.c /Folightup2.obj
612list.obj: .\list.c .\puzzles.h
613 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\list.c /Folist.obj
614loopgen.obj: .\loopgen.c .\puzzles.h .\tree234.h .\grid.h .\loopgen.h
615 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\loopgen.c /Foloopgen.obj
616loopy.obj: .\loopy.c .\puzzles.h .\tree234.h .\grid.h .\loopgen.h
617 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\loopy.c /Foloopy.obj
618loopy5.obj: .\loopy.c .\puzzles.h .\tree234.h .\grid.h .\loopgen.h
619 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\loopy.c /Foloopy5.obj
620loopy2.obj: .\loopy.c .\puzzles.h .\tree234.h .\grid.h .\loopgen.h
621 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\loopy.c /Foloopy2.obj
622magnets.obj: .\magnets.c .\puzzles.h
623 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\magnets.c /Fomagnets.obj
624magnets5.obj: .\magnets.c .\puzzles.h
625 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\magnets.c /Fomagnets5.obj
626magnets2.obj: .\magnets.c .\puzzles.h
627 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\magnets.c /Fomagnets2.obj
628malloc.obj: .\malloc.c .\puzzles.h
629 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\malloc.c /Fomalloc.obj
630map.obj: .\map.c .\puzzles.h
631 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\map.c /Fomap.obj
632map5.obj: .\map.c .\puzzles.h
633 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\map.c /Fomap5.obj
634map2.obj: .\map.c .\puzzles.h
635 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\map.c /Fomap2.obj
636maxflow.obj: .\maxflow.c .\maxflow.h .\puzzles.h
637 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\maxflow.c /Fomaxflow.obj
638midend.obj: .\midend.c .\puzzles.h
639 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\midend.c /Fomidend.obj
640mines.obj: .\mines.c .\tree234.h .\puzzles.h
641 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\mines.c /Fomines.obj
642mines5.obj: .\mines.c .\tree234.h .\puzzles.h
643 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\mines.c /Fomines5.obj
644mines2.obj: .\mines.c .\tree234.h .\puzzles.h
645 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_OBFUSCATOR /c .\mines.c /Fomines2.obj
646misc.obj: .\misc.c .\puzzles.h
647 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\misc.c /Fomisc.obj
648net.obj: .\net.c .\puzzles.h .\tree234.h
649 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\net.c /Fonet.obj
650net3.obj: .\net.c .\puzzles.h .\tree234.h
651 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\net.c /Fonet3.obj
652netslide.obj: .\netslide.c .\puzzles.h .\tree234.h
653 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\netslide.c /Fonetslide.obj
654netslid3.obj: .\netslide.c .\puzzles.h .\tree234.h
655 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\netslide.c /Fonetslid3.obj
656no-icon.obj: .\no-icon.c
657 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\no-icon.c /Fono-icon.obj
658noicon.res: .\noicon.rc .\puzzles.rc2 .\resource.h
659 rc $(FWHACK) $(RCFL) -r -fonoicon.res .\noicon.rc
660nullfe.obj: .\nullfe.c .\puzzles.h
661 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\nullfe.c /Fonullfe.obj
662nullgame.obj: .\nullgame.c .\puzzles.h
663 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\nullgame.c /Fonullgame.obj
664obfusc.obj: .\obfusc.c .\puzzles.h
665 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\obfusc.c /Foobfusc.obj
666osx.obj: .\osx.m .\puzzles.h
667 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\osx.m /Foosx.obj
668palisade.obj: .\palisade.c .\puzzles.h
669 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\palisade.c /Fopalisade.obj
670palisad3.obj: .\palisade.c .\puzzles.h
671 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\palisade.c /Fopalisad3.obj
672pattern.obj: .\pattern.c .\puzzles.h
673 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\pattern.c /Fopattern.obj
674pattern7.obj: .\pattern.c .\puzzles.h
675 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\pattern.c /Fopattern7.obj
676pattern4.obj: .\pattern.c .\puzzles.h
677 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_PICTURE_GENERATOR /c .\pattern.c /Fopattern4.obj
678pattern2.obj: .\pattern.c .\puzzles.h
679 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\pattern.c /Fopattern2.obj
680pearl.obj: .\pearl.c .\puzzles.h .\grid.h .\loopgen.h
681 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\pearl.c /Fopearl.obj
682pearl5.obj: .\pearl.c .\puzzles.h .\grid.h .\loopgen.h
683 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\pearl.c /Fopearl5.obj
684pearl2.obj: .\pearl.c .\puzzles.h .\grid.h .\loopgen.h
685 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\pearl.c /Fopearl2.obj
686pegs.obj: .\pegs.c .\puzzles.h .\tree234.h
687 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\pegs.c /Fopegs.obj
688pegs3.obj: .\pegs.c .\puzzles.h .\tree234.h
689 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\pegs.c /Fopegs3.obj
690penrose.obj: .\penrose.c .\puzzles.h .\penrose.h
691 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\penrose.c /Fopenrose.obj
692printing.obj: .\printing.c .\puzzles.h
693 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\printing.c /Foprinting.obj
694ps.obj: .\ps.c .\puzzles.h
695 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\ps.c /Fops.obj
696random.obj: .\random.c .\puzzles.h
697 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\random.c /Forandom.obj
698range.obj: .\range.c .\puzzles.h
699 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\range.c /Forange.obj
700range3.obj: .\range.c .\puzzles.h
701 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\range.c /Forange3.obj
702rect.obj: .\rect.c .\puzzles.h
703 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\rect.c /Forect.obj
704rect3.obj: .\rect.c .\puzzles.h
705 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\rect.c /Forect3.obj
706samegame.obj: .\samegame.c .\puzzles.h
707 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\samegame.c /Fosamegame.obj
708samegam3.obj: .\samegame.c .\puzzles.h
709 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\samegame.c /Fosamegam3.obj
710signpost.obj: .\signpost.c .\puzzles.h
711 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\signpost.c /Fosignpost.obj
712signpos5.obj: .\signpost.c .\puzzles.h
713 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\signpost.c /Fosignpos5.obj
714signpos2.obj: .\signpost.c .\puzzles.h
715 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\signpost.c /Fosignpos2.obj
716singles.obj: .\singles.c .\puzzles.h .\latin.h
717 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\singles.c /Fosingles.obj
718singles5.obj: .\singles.c .\puzzles.h .\latin.h
719 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\singles.c /Fosingles5.obj
720singles3.obj: .\singles.c .\puzzles.h .\latin.h
721 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\singles.c /Fosingles3.obj
722sixteen.obj: .\sixteen.c .\puzzles.h
723 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\sixteen.c /Fosixteen.obj
724sixteen3.obj: .\sixteen.c .\puzzles.h
725 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\sixteen.c /Fosixteen3.obj
726slant.obj: .\slant.c .\puzzles.h
727 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\slant.c /Foslant.obj
728slant5.obj: .\slant.c .\puzzles.h
729 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\slant.c /Foslant5.obj
730slant2.obj: .\slant.c .\puzzles.h
731 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\slant.c /Foslant2.obj
732solo.obj: .\solo.c .\puzzles.h
733 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\solo.c /Fosolo.obj
734solo5.obj: .\solo.c .\puzzles.h
735 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\solo.c /Fosolo5.obj
736solo2.obj: .\solo.c .\puzzles.h
737 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\solo.c /Fosolo2.obj
738tdq.obj: .\tdq.c .\puzzles.h
739 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\tdq.c /Fotdq.obj
740tents.obj: .\tents.c .\puzzles.h .\maxflow.h
741 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\tents.c /Fotents.obj
742tents5.obj: .\tents.c .\puzzles.h .\maxflow.h
743 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\tents.c /Fotents5.obj
744tents3.obj: .\tents.c .\puzzles.h .\maxflow.h
745 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\tents.c /Fotents3.obj
746towers.obj: .\towers.c .\puzzles.h .\latin.h
747 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\towers.c /Fotowers.obj
748towers5.obj: .\towers.c .\puzzles.h .\latin.h
749 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\towers.c /Fotowers5.obj
750towers2.obj: .\towers.c .\puzzles.h .\latin.h
751 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\towers.c /Fotowers2.obj
752tracks.obj: .\tracks.c .\puzzles.h
753 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\tracks.c /Fotracks.obj
754tracks3.obj: .\tracks.c .\puzzles.h
755 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\tracks.c /Fotracks3.obj
756tree234.obj: .\tree234.c .\tree234.h .\puzzles.h
757 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\tree234.c /Fotree234.obj
758twiddle.obj: .\twiddle.c .\puzzles.h
759 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\twiddle.c /Fotwiddle.obj
760twiddle3.obj: .\twiddle.c .\puzzles.h
761 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\twiddle.c /Fotwiddle3.obj
762undead.obj: .\undead.c .\puzzles.h
763 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\undead.c /Foundead.obj
764undead3.obj: .\undead.c .\puzzles.h
765 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\undead.c /Foundead3.obj
766unequal.obj: .\unequal.c .\puzzles.h .\latin.h
767 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\unequal.c /Founequal.obj
768unequal5.obj: .\unequal.c .\puzzles.h .\latin.h
769 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\unequal.c /Founequal5.obj
770unequal2.obj: .\unequal.c .\puzzles.h .\latin.h
771 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\unequal.c /Founequal2.obj
772unruly.obj: .\unruly.c .\puzzles.h
773 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\unruly.c /Founruly.obj
774unruly5.obj: .\unruly.c .\puzzles.h
775 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\unruly.c /Founruly5.obj
776unruly2.obj: .\unruly.c .\puzzles.h
777 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DSTANDALONE_SOLVER /c .\unruly.c /Founruly2.obj
778untangle.obj: .\untangle.c .\puzzles.h .\tree234.h
779 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\untangle.c /Fountangle.obj
780untangl3.obj: .\untangle.c .\puzzles.h .\tree234.h
781 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\untangle.c /Fountangl3.obj
782version.obj: .\version.c .\version.h
783 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\version.c /Foversion.obj
784windows.obj: .\windows.c .\puzzles.h .\resource.h
785 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /c .\windows.c /Fowindows.obj
786windows1.obj: .\windows.c .\puzzles.h .\resource.h
787 $(CC) $(COMPAT) $(FWHACK) $(CFLAGS) $(XFLAGS) /DCOMBINED /c .\windows.c /Fowindows1.obj
788
789
790clean: tidy
791 -del *.exe
792
793tidy:
794 -del *.obj
795 -del *.res
796 -del *.pch
797 -del *.aps
798 -del *.ilk
799 -del *.pdb
800 -del *.rsp
801 -del *.dsp
802 -del *.dsw
803 -del *.ncb
804 -del *.opt
805 -del *.plg
806 -del *.map
807 -del *.idb
808 -del debug.log
diff --git a/apps/plugins/puzzles/PuzzleApplet.java b/apps/plugins/puzzles/src/PuzzleApplet.java
index 0b0648ce9b..512aede580 100644
--- a/apps/plugins/puzzles/PuzzleApplet.java
+++ b/apps/plugins/puzzles/src/PuzzleApplet.java
@@ -28,6 +28,9 @@ public class PuzzleApplet extends JApplet implements Runtime.CallJavaCB {
28 private JFrame mainWindow; 28 private JFrame mainWindow;
29 29
30 private JMenu typeMenu; 30 private JMenu typeMenu;
31 private JMenuItem[] typeMenuItems;
32 private int customMenuItemIndex;
33
31 private JMenuItem solveCommand; 34 private JMenuItem solveCommand;
32 private Color[] colors; 35 private Color[] colors;
33 private JLabel statusBar; 36 private JLabel statusBar;
@@ -219,17 +222,17 @@ public class PuzzleApplet extends JApplet implements Runtime.CallJavaCB {
219 } 222 }
220 223
221 private JMenuItem addMenuItemCallback(JMenu jm, String name, final String callback, final int arg) { 224 private JMenuItem addMenuItemCallback(JMenu jm, String name, final String callback, final int arg) {
222 return addMenuItemCallback(jm, name, callback, new int[] {arg}); 225 return addMenuItemCallback(jm, name, callback, new int[] {arg}, false);
223 } 226 }
224 227
225 private JMenuItem addMenuItemCallback(JMenu jm, String name, final String callback) { 228 private JMenuItem addMenuItemCallback(JMenu jm, String name, final String callback) {
226 return addMenuItemCallback(jm, name, callback, new int[0]); 229 return addMenuItemCallback(jm, name, callback, new int[0], false);
227 } 230 }
228 231
229 private JMenuItem addMenuItemCallback(JMenu jm, String name, final String callback, final int[] args) { 232 private JMenuItem addMenuItemCallback(JMenu jm, String name, final String callback, final int[] args, boolean checkbox) {
230 JMenuItem jmi; 233 JMenuItem jmi;
231 if (jm == typeMenu) 234 if (checkbox)
232 typeMenu.add(jmi = new JCheckBoxMenuItem(name)); 235 jm.add(jmi = new JCheckBoxMenuItem(name));
233 else 236 else
234 jm.add(jmi = new JMenuItem(name)); 237 jm.add(jmi = new JMenuItem(name));
235 jmi.addActionListener(new ActionListener() { 238 jmi.addActionListener(new ActionListener() {
@@ -261,12 +264,29 @@ public class PuzzleApplet extends JApplet implements Runtime.CallJavaCB {
261 } else { 264 } else {
262 typeMenu.setVisible(true); 265 typeMenu.setVisible(true);
263 } 266 }
264 addMenuItemCallback(typeMenu, "Custom...", "jcallback_config_event", CFG_SETTINGS); 267 typeMenuItems[customMenuItemIndex] =
268 addMenuItemCallback(typeMenu, "Custom...",
269 "jcallback_config_event",
270 new int[] {CFG_SETTINGS}, true);
265 } 271 }
266 272
267 private void addTypeItem(String name, final int ptrGameParams) { 273 private void addTypeItem
274 (JMenu targetMenu, String name, int newId, final int ptrGameParams) {
275
268 typeMenu.setVisible(true); 276 typeMenu.setVisible(true);
269 addMenuItemCallback(typeMenu, name, "jcallback_preset_event", ptrGameParams); 277 typeMenuItems[newId] =
278 addMenuItemCallback(targetMenu, name,
279 "jcallback_preset_event",
280 new int[] {ptrGameParams}, true);
281 }
282
283 private void addTypeSubmenu
284 (JMenu targetMenu, String name, int newId) {
285
286 JMenu newMenu = new JMenu(name);
287 newMenu.setVisible(true);
288 typeMenuItems[newId] = newMenu;
289 targetMenu.add(newMenu);
270 } 290 }
271 291
272 public int call(int cmd, int arg1, int arg2, int arg3) { 292 public int call(int cmd, int arg1, int arg2, int arg3) {
@@ -279,8 +299,20 @@ public class PuzzleApplet extends JApplet implements Runtime.CallJavaCB {
279 if ((arg2 & 4) != 0) solveCommand.setEnabled(true); 299 if ((arg2 & 4) != 0) solveCommand.setEnabled(true);
280 colors = new Color[arg3]; 300 colors = new Color[arg3];
281 return 0; 301 return 0;
282 case 1: // Type menu item 302 case 1: // configure Type menu
283 addTypeItem(runtime.cstring(arg1), arg2); 303 if (arg1 == 0) {
304 // preliminary setup
305 typeMenuItems = new JMenuItem[arg2 + 2];
306 typeMenuItems[arg2] = typeMenu;
307 customMenuItemIndex = arg2 + 1;
308 return arg2;
309 } else if (xarg1 != 0) {
310 addTypeItem((JMenu)typeMenuItems[arg2],
311 runtime.cstring(arg1), arg3, xarg1);
312 } else {
313 addTypeSubmenu((JMenu)typeMenuItems[arg2],
314 runtime.cstring(arg1), arg3);
315 }
284 return 0; 316 return 0;
285 case 2: // MessageBox 317 case 2: // MessageBox
286 JOptionPane.showMessageDialog(this, runtime.cstring(arg2), runtime.cstring(arg1), arg3 == 0 ? JOptionPane.INFORMATION_MESSAGE : JOptionPane.ERROR_MESSAGE); 318 JOptionPane.showMessageDialog(this, runtime.cstring(arg2), runtime.cstring(arg1), arg3 == 0 ? JOptionPane.INFORMATION_MESSAGE : JOptionPane.ERROR_MESSAGE);
@@ -432,10 +464,11 @@ public class PuzzleApplet extends JApplet implements Runtime.CallJavaCB {
432 dlg = null; 464 dlg = null;
433 return 0; 465 return 0;
434 case 13: // tick a menu item 466 case 13: // tick a menu item
435 if (arg1 < 0) arg1 = typeMenu.getItemCount() - 1; 467 if (arg1 < 0) arg1 = customMenuItemIndex;
436 for (int i = 0; i < typeMenu.getItemCount(); i++) { 468 for (int i = 0; i < typeMenuItems.length; i++) {
437 if (typeMenu.getMenuComponent(i) instanceof JCheckBoxMenuItem) { 469 if (typeMenuItems[i] instanceof JCheckBoxMenuItem) {
438 ((JCheckBoxMenuItem)typeMenu.getMenuComponent(i)).setSelected(arg1 == i); 470 ((JCheckBoxMenuItem)typeMenuItems[i]).setSelected
471 (arg1 == i);
439 } 472 }
440 } 473 }
441 return 0; 474 return 0;
diff --git a/apps/plugins/puzzles/README b/apps/plugins/puzzles/src/README
index 890db56771..890db56771 100644
--- a/apps/plugins/puzzles/README
+++ b/apps/plugins/puzzles/src/README
diff --git a/apps/plugins/puzzles/Recipe b/apps/plugins/puzzles/src/Recipe
index ba8317f51a..ba8317f51a 100644
--- a/apps/plugins/puzzles/Recipe
+++ b/apps/plugins/puzzles/src/Recipe
diff --git a/apps/plugins/puzzles/src/aclocal.m4 b/apps/plugins/puzzles/src/aclocal.m4
new file mode 100644
index 0000000000..6e4efedfb6
--- /dev/null
+++ b/apps/plugins/puzzles/src/aclocal.m4
@@ -0,0 +1,1832 @@
1# generated automatically by aclocal 1.15 -*- Autoconf -*-
2
3# Copyright (C) 1996-2014 Free Software Foundation, Inc.
4
5# This file is free software; the Free Software Foundation
6# gives unlimited permission to copy and/or distribute it,
7# with or without modifications, as long as this notice is preserved.
8
9# This program is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
11# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
12# PARTICULAR PURPOSE.
13
14m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
15m4_ifndef([AC_AUTOCONF_VERSION],
16 [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
17m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
18[m4_warning([this file was generated for autoconf 2.69.
19You have another version of autoconf. It may work, but is not guaranteed to.
20If you have problems, you may need to regenerate the build system entirely.
21To do so, use the procedure documented by the package, typically 'autoreconf'.])])
22
23# Configure paths for GTK+
24# Owen Taylor 1997-2001
25
26dnl AM_PATH_GTK_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
27dnl Test for GTK+, and define GTK_CFLAGS and GTK_LIBS, if gthread is specified in MODULES,
28dnl pass to pkg-config
29dnl
30AC_DEFUN([AM_PATH_GTK_2_0],
31[dnl
32dnl Get the cflags and libraries from pkg-config
33dnl
34AC_ARG_ENABLE(gtktest, [ --disable-gtktest do not try to compile and run a test GTK+ program],
35 , enable_gtktest=yes)
36
37 pkg_config_args=gtk+-2.0
38 for module in . $4
39 do
40 case "$module" in
41 gthread)
42 pkg_config_args="$pkg_config_args gthread-2.0"
43 ;;
44 esac
45 done
46
47 no_gtk=""
48
49 AC_REQUIRE([PKG_PROG_PKG_CONFIG])
50 PKG_PROG_PKG_CONFIG([0.7])
51
52 min_gtk_version=ifelse([$1], ,2.0.0,$1)
53 AC_MSG_CHECKING(for GTK+ - version >= $min_gtk_version)
54
55 if test x$PKG_CONFIG != xno ; then
56 ## don't try to run the test against uninstalled libtool libs
57 if $PKG_CONFIG --uninstalled $pkg_config_args; then
58 echo "Will use uninstalled version of GTK+ found in PKG_CONFIG_PATH"
59 enable_gtktest=no
60 fi
61
62 if $PKG_CONFIG --atleast-version $min_gtk_version $pkg_config_args; then
63 :
64 else
65 no_gtk=yes
66 fi
67 fi
68
69 if test x"$no_gtk" = x ; then
70 GTK_CFLAGS=`$PKG_CONFIG $pkg_config_args --cflags`
71 GTK_LIBS=`$PKG_CONFIG $pkg_config_args --libs`
72 gtk_config_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
73 sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
74 gtk_config_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
75 sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
76 gtk_config_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
77 sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
78 if test "x$enable_gtktest" = "xyes" ; then
79 ac_save_CFLAGS="$CFLAGS"
80 ac_save_LIBS="$LIBS"
81 CFLAGS="$CFLAGS $GTK_CFLAGS"
82 LIBS="$GTK_LIBS $LIBS"
83dnl
84dnl Now check if the installed GTK+ is sufficiently new. (Also sanity
85dnl checks the results of pkg-config to some extent)
86dnl
87 rm -f conf.gtktest
88 AC_TRY_RUN([
89#include <gtk/gtk.h>
90#include <stdio.h>
91#include <stdlib.h>
92
93int
94main ()
95{
96 int major, minor, micro;
97 char *tmp_version;
98
99 fclose (fopen ("conf.gtktest", "w"));
100
101 /* HP/UX 9 (%@#!) writes to sscanf strings */
102 tmp_version = g_strdup("$min_gtk_version");
103 if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
104 printf("%s, bad version string\n", "$min_gtk_version");
105 exit(1);
106 }
107
108 if ((gtk_major_version != $gtk_config_major_version) ||
109 (gtk_minor_version != $gtk_config_minor_version) ||
110 (gtk_micro_version != $gtk_config_micro_version))
111 {
112 printf("\n*** 'pkg-config --modversion gtk+-2.0' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n",
113 $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version,
114 gtk_major_version, gtk_minor_version, gtk_micro_version);
115 printf ("*** was found! If pkg-config was correct, then it is best\n");
116 printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n");
117 printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
118 printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
119 printf("*** required on your system.\n");
120 printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n");
121 printf("*** to point to the correct configuration files\n");
122 }
123 else if ((gtk_major_version != GTK_MAJOR_VERSION) ||
124 (gtk_minor_version != GTK_MINOR_VERSION) ||
125 (gtk_micro_version != GTK_MICRO_VERSION))
126 {
127 printf("*** GTK+ header files (version %d.%d.%d) do not match\n",
128 GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION);
129 printf("*** library (version %d.%d.%d)\n",
130 gtk_major_version, gtk_minor_version, gtk_micro_version);
131 }
132 else
133 {
134 if ((gtk_major_version > major) ||
135 ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
136 ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro)))
137 {
138 return 0;
139 }
140 else
141 {
142 printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n",
143 gtk_major_version, gtk_minor_version, gtk_micro_version);
144 printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n",
145 major, minor, micro);
146 printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n");
147 printf("***\n");
148 printf("*** If you have already installed a sufficiently new version, this error\n");
149 printf("*** probably means that the wrong copy of the pkg-config shell script is\n");
150 printf("*** being found. The easiest way to fix this is to remove the old version\n");
151 printf("*** of GTK+, but you can also set the PKG_CONFIG environment to point to the\n");
152 printf("*** correct copy of pkg-config. (In this case, you will have to\n");
153 printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
154 printf("*** so that the correct libraries are found at run-time))\n");
155 }
156 }
157 return 1;
158}
159],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
160 CFLAGS="$ac_save_CFLAGS"
161 LIBS="$ac_save_LIBS"
162 fi
163 fi
164 if test "x$no_gtk" = x ; then
165 AC_MSG_RESULT(yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version))
166 ifelse([$2], , :, [$2])
167 else
168 AC_MSG_RESULT(no)
169 if test "$PKG_CONFIG" = "no" ; then
170 echo "*** A new enough version of pkg-config was not found."
171 echo "*** See http://pkgconfig.sourceforge.net"
172 else
173 if test -f conf.gtktest ; then
174 :
175 else
176 echo "*** Could not run GTK+ test program, checking why..."
177 ac_save_CFLAGS="$CFLAGS"
178 ac_save_LIBS="$LIBS"
179 CFLAGS="$CFLAGS $GTK_CFLAGS"
180 LIBS="$LIBS $GTK_LIBS"
181 AC_TRY_LINK([
182#include <gtk/gtk.h>
183#include <stdio.h>
184], [ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ],
185 [ echo "*** The test program compiled, but did not run. This usually means"
186 echo "*** that the run-time linker is not finding GTK+ or finding the wrong"
187 echo "*** version of GTK+. If it is not finding GTK+, you'll need to set your"
188 echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
189 echo "*** to the installed location Also, make sure you have run ldconfig if that"
190 echo "*** is required on your system"
191 echo "***"
192 echo "*** If you have an old version installed, it is best to remove it, although"
193 echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ],
194 [ echo "*** The test program failed to compile or link. See the file config.log for the"
195 echo "*** exact error that occured. This usually means GTK+ is incorrectly installed."])
196 CFLAGS="$ac_save_CFLAGS"
197 LIBS="$ac_save_LIBS"
198 fi
199 fi
200 GTK_CFLAGS=""
201 GTK_LIBS=""
202 ifelse([$3], , :, [$3])
203 fi
204 AC_SUBST(GTK_CFLAGS)
205 AC_SUBST(GTK_LIBS)
206 rm -f conf.gtktest
207])
208
209# Configure paths for GTK+
210# Owen Taylor 1997-2001
211
212dnl AM_PATH_GTK_3_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
213dnl Test for GTK+, and define GTK_CFLAGS and GTK_LIBS, if gthread is specified in MODULES,
214dnl pass to pkg-config
215dnl
216AC_DEFUN([AM_PATH_GTK_3_0],
217[m4_warn([obsolete], [AM_PATH_GTK_3_0 is deprecated, use PKG_CHECK_MODULES([GTK], [gtk+-3.0]) instead])
218dnl Get the cflags and libraries from pkg-config
219dnl
220AC_ARG_ENABLE(gtktest, [ --disable-gtktest do not try to compile and run a test GTK+ program],
221 , enable_gtktest=yes)
222 min_gtk_version=ifelse([$1], [], [3.0.0], [$1])
223
224 pkg_config_args="gtk+-3.0 >= $min_gtk_version"
225 for module in . $4
226 do
227 case "$module" in
228 gthread)
229 pkg_config_args="$pkg_config_args gthread-2.0"
230 ;;
231 esac
232 done
233
234 no_gtk=""
235
236 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
237
238 if test x$PKG_CONFIG != xno ; then
239 if $PKG_CONFIG --atleast-pkgconfig-version 0.7 ; then
240 :
241 else
242 echo "*** pkg-config too old; version 0.7 or better required."
243 no_gtk=yes
244 PKG_CONFIG=no
245 fi
246 else
247 no_gtk=yes
248 fi
249
250 AC_MSG_CHECKING(for GTK+ - version >= $min_gtk_version)
251
252 if test x$PKG_CONFIG != xno ; then
253 ## don't try to run the test against uninstalled libtool libs
254 if $PKG_CONFIG --uninstalled $pkg_config_args; then
255 echo "Will use uninstalled version of GTK+ found in PKG_CONFIG_PATH"
256 enable_gtktest=no
257 fi
258
259 if $PKG_CONFIG $pkg_config_args; then
260 :
261 else
262 no_gtk=yes
263 fi
264 fi
265
266 if test x"$no_gtk" = x ; then
267 GTK_CFLAGS=`$PKG_CONFIG $pkg_config_args --cflags`
268 GTK_LIBS=`$PKG_CONFIG $pkg_config_args --libs`
269 gtk_config_major_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
270 sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
271 gtk_config_minor_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
272 sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
273 gtk_config_micro_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
274 sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
275 if test "x$enable_gtktest" = "xyes" ; then
276 ac_save_CFLAGS="$CFLAGS"
277 ac_save_LIBS="$LIBS"
278 CFLAGS="$CFLAGS $GTK_CFLAGS"
279 LIBS="$GTK_LIBS $LIBS"
280dnl
281dnl Now check if the installed GTK+ is sufficiently new. (Also sanity
282dnl checks the results of pkg-config to some extent)
283dnl
284 rm -f conf.gtktest
285 AC_TRY_RUN([
286#include <gtk/gtk.h>
287#include <stdio.h>
288#include <stdlib.h>
289
290int
291main ()
292{
293 unsigned int major, minor, micro;
294
295 fclose (fopen ("conf.gtktest", "w"));
296
297 if (sscanf("$min_gtk_version", "%u.%u.%u", &major, &minor, &micro) != 3) {
298 printf("%s, bad version string\n", "$min_gtk_version");
299 exit(1);
300 }
301
302 if ((gtk_major_version != $gtk_config_major_version) ||
303 (gtk_minor_version != $gtk_config_minor_version) ||
304 (gtk_micro_version != $gtk_config_micro_version))
305 {
306 printf("\n*** 'pkg-config --modversion gtk+-3.0' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n",
307 $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version,
308 gtk_major_version, gtk_minor_version, gtk_micro_version);
309 printf ("*** was found! If pkg-config was correct, then it is best\n");
310 printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n");
311 printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
312 printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
313 printf("*** required on your system.\n");
314 printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n");
315 printf("*** to point to the correct configuration files\n");
316 }
317 else if ((gtk_major_version != GTK_MAJOR_VERSION) ||
318 (gtk_minor_version != GTK_MINOR_VERSION) ||
319 (gtk_micro_version != GTK_MICRO_VERSION))
320 {
321 printf("*** GTK+ header files (version %d.%d.%d) do not match\n",
322 GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION);
323 printf("*** library (version %d.%d.%d)\n",
324 gtk_major_version, gtk_minor_version, gtk_micro_version);
325 }
326 else
327 {
328 if ((gtk_major_version > major) ||
329 ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
330 ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro)))
331 {
332 return 0;
333 }
334 else
335 {
336 printf("\n*** An old version of GTK+ (%u.%u.%u) was found.\n",
337 gtk_major_version, gtk_minor_version, gtk_micro_version);
338 printf("*** You need a version of GTK+ newer than %u.%u.%u. The latest version of\n",
339 major, minor, micro);
340 printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n");
341 printf("***\n");
342 printf("*** If you have already installed a sufficiently new version, this error\n");
343 printf("*** probably means that the wrong copy of the pkg-config shell script is\n");
344 printf("*** being found. The easiest way to fix this is to remove the old version\n");
345 printf("*** of GTK+, but you can also set the PKG_CONFIG environment to point to the\n");
346 printf("*** correct copy of pkg-config. (In this case, you will have to\n");
347 printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
348 printf("*** so that the correct libraries are found at run-time))\n");
349 }
350 }
351 return 1;
352}
353],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
354 CFLAGS="$ac_save_CFLAGS"
355 LIBS="$ac_save_LIBS"
356 fi
357 fi
358 if test "x$no_gtk" = x ; then
359 AC_MSG_RESULT(yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version))
360 ifelse([$2], , :, [$2])
361 else
362 AC_MSG_RESULT(no)
363 if test "$PKG_CONFIG" = "no" ; then
364 echo "*** A new enough version of pkg-config was not found."
365 echo "*** See http://pkgconfig.sourceforge.net"
366 else
367 if test -f conf.gtktest ; then
368 :
369 else
370 echo "*** Could not run GTK+ test program, checking why..."
371 ac_save_CFLAGS="$CFLAGS"
372 ac_save_LIBS="$LIBS"
373 CFLAGS="$CFLAGS $GTK_CFLAGS"
374 LIBS="$LIBS $GTK_LIBS"
375 AC_TRY_LINK([
376#include <gtk/gtk.h>
377#include <stdio.h>
378], [ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ],
379 [ echo "*** The test program compiled, but did not run. This usually means"
380 echo "*** that the run-time linker is not finding GTK+ or finding the wrong"
381 echo "*** version of GTK+. If it is not finding GTK+, you'll need to set your"
382 echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
383 echo "*** to the installed location Also, make sure you have run ldconfig if that"
384 echo "*** is required on your system"
385 echo "***"
386 echo "*** If you have an old version installed, it is best to remove it, although"
387 echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ],
388 [ echo "*** The test program failed to compile or link. See the file config.log for the"
389 echo "*** exact error that occurred. This usually means GTK+ is incorrectly installed."])
390 CFLAGS="$ac_save_CFLAGS"
391 LIBS="$ac_save_LIBS"
392 fi
393 fi
394 GTK_CFLAGS=""
395 GTK_LIBS=""
396 ifelse([$3], , :, [$3])
397 fi
398 AC_SUBST(GTK_CFLAGS)
399 AC_SUBST(GTK_LIBS)
400 rm -f conf.gtktest
401])
402
403dnl GTK_CHECK_BACKEND(BACKEND-NAME [, MINIMUM-VERSION [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
404dnl Tests for BACKEND-NAME in the GTK targets list
405dnl
406AC_DEFUN([GTK_CHECK_BACKEND],
407[m4_warn([obsolete], [GTK_CHECK_BACKEND is deprecated, use PKG_CHECK_MODULES([GTK_X11], [gtk+-x11-3.0]) or similar instead])
408 pkg_config_args=ifelse([$1],,gtk+-3.0, gtk+-$1-3.0)
409 min_gtk_version=ifelse([$2],,3.0.0,$2)
410 pkg_config_args="$pkg_config_args >= $min_gtk_version"
411
412 AC_PATH_PROG(PKG_CONFIG, [pkg-config], [AC_MSG_ERROR([No pkg-config found])])
413
414 if $PKG_CONFIG $pkg_config_args ; then
415 target_found=yes
416 else
417 target_found=no
418 fi
419
420 if test "x$target_found" = "xno"; then
421 ifelse([$4],,[AC_MSG_ERROR([Backend $backend not found.])],[$4])
422 else
423 ifelse([$3],,[:],[$3])
424 fi
425])
426
427dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
428dnl serial 11 (pkg-config-0.29.1)
429dnl
430dnl Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
431dnl Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
432dnl
433dnl This program is free software; you can redistribute it and/or modify
434dnl it under the terms of the GNU General Public License as published by
435dnl the Free Software Foundation; either version 2 of the License, or
436dnl (at your option) any later version.
437dnl
438dnl This program is distributed in the hope that it will be useful, but
439dnl WITHOUT ANY WARRANTY; without even the implied warranty of
440dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
441dnl General Public License for more details.
442dnl
443dnl You should have received a copy of the GNU General Public License
444dnl along with this program; if not, write to the Free Software
445dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
446dnl 02111-1307, USA.
447dnl
448dnl As a special exception to the GNU General Public License, if you
449dnl distribute this file as part of a program that contains a
450dnl configuration script generated by Autoconf, you may include it under
451dnl the same distribution terms that you use for the rest of that
452dnl program.
453
454dnl PKG_PREREQ(MIN-VERSION)
455dnl -----------------------
456dnl Since: 0.29
457dnl
458dnl Verify that the version of the pkg-config macros are at least
459dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's
460dnl installed version of pkg-config, this checks the developer's version
461dnl of pkg.m4 when generating configure.
462dnl
463dnl To ensure that this macro is defined, also add:
464dnl m4_ifndef([PKG_PREREQ],
465dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])])
466dnl
467dnl See the "Since" comment for each macro you use to see what version
468dnl of the macros you require.
469m4_defun([PKG_PREREQ],
470[m4_define([PKG_MACROS_VERSION], [0.29.1])
471m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1,
472 [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])])
473])dnl PKG_PREREQ
474
475dnl PKG_PROG_PKG_CONFIG([MIN-VERSION])
476dnl ----------------------------------
477dnl Since: 0.16
478dnl
479dnl Search for the pkg-config tool and set the PKG_CONFIG variable to
480dnl first found in the path. Checks that the version of pkg-config found
481dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is
482dnl used since that's the first version where most current features of
483dnl pkg-config existed.
484AC_DEFUN([PKG_PROG_PKG_CONFIG],
485[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
486m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
487m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$])
488AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
489AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
490AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
491
492if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
493 AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
494fi
495if test -n "$PKG_CONFIG"; then
496 _pkg_min_version=m4_default([$1], [0.9.0])
497 AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
498 if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
499 AC_MSG_RESULT([yes])
500 else
501 AC_MSG_RESULT([no])
502 PKG_CONFIG=""
503 fi
504fi[]dnl
505])dnl PKG_PROG_PKG_CONFIG
506
507dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
508dnl -------------------------------------------------------------------
509dnl Since: 0.18
510dnl
511dnl Check to see whether a particular set of modules exists. Similar to
512dnl PKG_CHECK_MODULES(), but does not set variables or print errors.
513dnl
514dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
515dnl only at the first occurence in configure.ac, so if the first place
516dnl it's called might be skipped (such as if it is within an "if", you
517dnl have to call PKG_CHECK_EXISTS manually
518AC_DEFUN([PKG_CHECK_EXISTS],
519[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
520if test -n "$PKG_CONFIG" && \
521 AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
522 m4_default([$2], [:])
523m4_ifvaln([$3], [else
524 $3])dnl
525fi])
526
527dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
528dnl ---------------------------------------------
529dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting
530dnl pkg_failed based on the result.
531m4_define([_PKG_CONFIG],
532[if test -n "$$1"; then
533 pkg_cv_[]$1="$$1"
534 elif test -n "$PKG_CONFIG"; then
535 PKG_CHECK_EXISTS([$3],
536 [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`
537 test "x$?" != "x0" && pkg_failed=yes ],
538 [pkg_failed=yes])
539 else
540 pkg_failed=untried
541fi[]dnl
542])dnl _PKG_CONFIG
543
544dnl _PKG_SHORT_ERRORS_SUPPORTED
545dnl ---------------------------
546dnl Internal check to see if pkg-config supports short errors.
547AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
548[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
549if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
550 _pkg_short_errors_supported=yes
551else
552 _pkg_short_errors_supported=no
553fi[]dnl
554])dnl _PKG_SHORT_ERRORS_SUPPORTED
555
556
557dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
558dnl [ACTION-IF-NOT-FOUND])
559dnl --------------------------------------------------------------
560dnl Since: 0.4.0
561dnl
562dnl Note that if there is a possibility the first call to
563dnl PKG_CHECK_MODULES might not happen, you should be sure to include an
564dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
565AC_DEFUN([PKG_CHECK_MODULES],
566[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
567AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
568AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
569
570pkg_failed=no
571AC_MSG_CHECKING([for $1])
572
573_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
574_PKG_CONFIG([$1][_LIBS], [libs], [$2])
575
576m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
577and $1[]_LIBS to avoid the need to call pkg-config.
578See the pkg-config man page for more details.])
579
580if test $pkg_failed = yes; then
581 AC_MSG_RESULT([no])
582 _PKG_SHORT_ERRORS_SUPPORTED
583 if test $_pkg_short_errors_supported = yes; then
584 $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
585 else
586 $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
587 fi
588 # Put the nasty error message in config.log where it belongs
589 echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
590
591 m4_default([$4], [AC_MSG_ERROR(
592[Package requirements ($2) were not met:
593
594$$1_PKG_ERRORS
595
596Consider adjusting the PKG_CONFIG_PATH environment variable if you
597installed software in a non-standard prefix.
598
599_PKG_TEXT])[]dnl
600 ])
601elif test $pkg_failed = untried; then
602 AC_MSG_RESULT([no])
603 m4_default([$4], [AC_MSG_FAILURE(
604[The pkg-config script could not be found or is too old. Make sure it
605is in your PATH or set the PKG_CONFIG environment variable to the full
606path to pkg-config.
607
608_PKG_TEXT
609
610To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
611 ])
612else
613 $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
614 $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
615 AC_MSG_RESULT([yes])
616 $3
617fi[]dnl
618])dnl PKG_CHECK_MODULES
619
620
621dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
622dnl [ACTION-IF-NOT-FOUND])
623dnl ---------------------------------------------------------------------
624dnl Since: 0.29
625dnl
626dnl Checks for existence of MODULES and gathers its build flags with
627dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags
628dnl and VARIABLE-PREFIX_LIBS from --libs.
629dnl
630dnl Note that if there is a possibility the first call to
631dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to
632dnl include an explicit call to PKG_PROG_PKG_CONFIG in your
633dnl configure.ac.
634AC_DEFUN([PKG_CHECK_MODULES_STATIC],
635[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
636_save_PKG_CONFIG=$PKG_CONFIG
637PKG_CONFIG="$PKG_CONFIG --static"
638PKG_CHECK_MODULES($@)
639PKG_CONFIG=$_save_PKG_CONFIG[]dnl
640])dnl PKG_CHECK_MODULES_STATIC
641
642
643dnl PKG_INSTALLDIR([DIRECTORY])
644dnl -------------------------
645dnl Since: 0.27
646dnl
647dnl Substitutes the variable pkgconfigdir as the location where a module
648dnl should install pkg-config .pc files. By default the directory is
649dnl $libdir/pkgconfig, but the default can be changed by passing
650dnl DIRECTORY. The user can override through the --with-pkgconfigdir
651dnl parameter.
652AC_DEFUN([PKG_INSTALLDIR],
653[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
654m4_pushdef([pkg_description],
655 [pkg-config installation directory @<:@]pkg_default[@:>@])
656AC_ARG_WITH([pkgconfigdir],
657 [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],,
658 [with_pkgconfigdir=]pkg_default)
659AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
660m4_popdef([pkg_default])
661m4_popdef([pkg_description])
662])dnl PKG_INSTALLDIR
663
664
665dnl PKG_NOARCH_INSTALLDIR([DIRECTORY])
666dnl --------------------------------
667dnl Since: 0.27
668dnl
669dnl Substitutes the variable noarch_pkgconfigdir as the location where a
670dnl module should install arch-independent pkg-config .pc files. By
671dnl default the directory is $datadir/pkgconfig, but the default can be
672dnl changed by passing DIRECTORY. The user can override through the
673dnl --with-noarch-pkgconfigdir parameter.
674AC_DEFUN([PKG_NOARCH_INSTALLDIR],
675[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
676m4_pushdef([pkg_description],
677 [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@])
678AC_ARG_WITH([noarch-pkgconfigdir],
679 [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],,
680 [with_noarch_pkgconfigdir=]pkg_default)
681AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
682m4_popdef([pkg_default])
683m4_popdef([pkg_description])
684])dnl PKG_NOARCH_INSTALLDIR
685
686
687dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
688dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
689dnl -------------------------------------------
690dnl Since: 0.28
691dnl
692dnl Retrieves the value of the pkg-config variable for the given module.
693AC_DEFUN([PKG_CHECK_VAR],
694[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
695AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl
696
697_PKG_CONFIG([$1], [variable="][$3]["], [$2])
698AS_VAR_COPY([$1], [pkg_cv_][$1])
699
700AS_VAR_IF([$1], [""], [$5], [$4])dnl
701])dnl PKG_CHECK_VAR
702
703# Copyright (C) 2002-2014 Free Software Foundation, Inc.
704#
705# This file is free software; the Free Software Foundation
706# gives unlimited permission to copy and/or distribute it,
707# with or without modifications, as long as this notice is preserved.
708
709# AM_AUTOMAKE_VERSION(VERSION)
710# ----------------------------
711# Automake X.Y traces this macro to ensure aclocal.m4 has been
712# generated from the m4 files accompanying Automake X.Y.
713# (This private macro should not be called outside this file.)
714AC_DEFUN([AM_AUTOMAKE_VERSION],
715[am__api_version='1.15'
716dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
717dnl require some minimum version. Point them to the right macro.
718m4_if([$1], [1.15], [],
719 [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
720])
721
722# _AM_AUTOCONF_VERSION(VERSION)
723# -----------------------------
724# aclocal traces this macro to find the Autoconf version.
725# This is a private macro too. Using m4_define simplifies
726# the logic in aclocal, which can simply ignore this definition.
727m4_define([_AM_AUTOCONF_VERSION], [])
728
729# AM_SET_CURRENT_AUTOMAKE_VERSION
730# -------------------------------
731# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
732# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
733AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
734[AM_AUTOMAKE_VERSION([1.15])dnl
735m4_ifndef([AC_AUTOCONF_VERSION],
736 [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
737_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
738
739# AM_AUX_DIR_EXPAND -*- Autoconf -*-
740
741# Copyright (C) 2001-2014 Free Software Foundation, Inc.
742#
743# This file is free software; the Free Software Foundation
744# gives unlimited permission to copy and/or distribute it,
745# with or without modifications, as long as this notice is preserved.
746
747# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
748# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to
749# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
750#
751# Of course, Automake must honor this variable whenever it calls a
752# tool from the auxiliary directory. The problem is that $srcdir (and
753# therefore $ac_aux_dir as well) can be either absolute or relative,
754# depending on how configure is run. This is pretty annoying, since
755# it makes $ac_aux_dir quite unusable in subdirectories: in the top
756# source directory, any form will work fine, but in subdirectories a
757# relative path needs to be adjusted first.
758#
759# $ac_aux_dir/missing
760# fails when called from a subdirectory if $ac_aux_dir is relative
761# $top_srcdir/$ac_aux_dir/missing
762# fails if $ac_aux_dir is absolute,
763# fails when called from a subdirectory in a VPATH build with
764# a relative $ac_aux_dir
765#
766# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
767# are both prefixed by $srcdir. In an in-source build this is usually
768# harmless because $srcdir is '.', but things will broke when you
769# start a VPATH build or use an absolute $srcdir.
770#
771# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
772# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
773# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
774# and then we would define $MISSING as
775# MISSING="\${SHELL} $am_aux_dir/missing"
776# This will work as long as MISSING is not called from configure, because
777# unfortunately $(top_srcdir) has no meaning in configure.
778# However there are other variables, like CC, which are often used in
779# configure, and could therefore not use this "fixed" $ac_aux_dir.
780#
781# Another solution, used here, is to always expand $ac_aux_dir to an
782# absolute PATH. The drawback is that using absolute paths prevent a
783# configured tree to be moved without reconfiguration.
784
785AC_DEFUN([AM_AUX_DIR_EXPAND],
786[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
787# Expand $ac_aux_dir to an absolute path.
788am_aux_dir=`cd "$ac_aux_dir" && pwd`
789])
790
791# AM_CONDITIONAL -*- Autoconf -*-
792
793# Copyright (C) 1997-2014 Free Software Foundation, Inc.
794#
795# This file is free software; the Free Software Foundation
796# gives unlimited permission to copy and/or distribute it,
797# with or without modifications, as long as this notice is preserved.
798
799# AM_CONDITIONAL(NAME, SHELL-CONDITION)
800# -------------------------------------
801# Define a conditional.
802AC_DEFUN([AM_CONDITIONAL],
803[AC_PREREQ([2.52])dnl
804 m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
805 [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
806AC_SUBST([$1_TRUE])dnl
807AC_SUBST([$1_FALSE])dnl
808_AM_SUBST_NOTMAKE([$1_TRUE])dnl
809_AM_SUBST_NOTMAKE([$1_FALSE])dnl
810m4_define([_AM_COND_VALUE_$1], [$2])dnl
811if $2; then
812 $1_TRUE=
813 $1_FALSE='#'
814else
815 $1_TRUE='#'
816 $1_FALSE=
817fi
818AC_CONFIG_COMMANDS_PRE(
819[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
820 AC_MSG_ERROR([[conditional "$1" was never defined.
821Usually this means the macro was only invoked conditionally.]])
822fi])])
823
824# Copyright (C) 1999-2014 Free Software Foundation, Inc.
825#
826# This file is free software; the Free Software Foundation
827# gives unlimited permission to copy and/or distribute it,
828# with or without modifications, as long as this notice is preserved.
829
830
831# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
832# written in clear, in which case automake, when reading aclocal.m4,
833# will think it sees a *use*, and therefore will trigger all it's
834# C support machinery. Also note that it means that autoscan, seeing
835# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
836
837
838# _AM_DEPENDENCIES(NAME)
839# ----------------------
840# See how the compiler implements dependency checking.
841# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
842# We try a few techniques and use that to set a single cache variable.
843#
844# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
845# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
846# dependency, and given that the user is not expected to run this macro,
847# just rely on AC_PROG_CC.
848AC_DEFUN([_AM_DEPENDENCIES],
849[AC_REQUIRE([AM_SET_DEPDIR])dnl
850AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
851AC_REQUIRE([AM_MAKE_INCLUDE])dnl
852AC_REQUIRE([AM_DEP_TRACK])dnl
853
854m4_if([$1], [CC], [depcc="$CC" am_compiler_list=],
855 [$1], [CXX], [depcc="$CXX" am_compiler_list=],
856 [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
857 [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
858 [$1], [UPC], [depcc="$UPC" am_compiler_list=],
859 [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
860 [depcc="$$1" am_compiler_list=])
861
862AC_CACHE_CHECK([dependency style of $depcc],
863 [am_cv_$1_dependencies_compiler_type],
864[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
865 # We make a subdir and do the tests there. Otherwise we can end up
866 # making bogus files that we don't know about and never remove. For
867 # instance it was reported that on HP-UX the gcc test will end up
868 # making a dummy file named 'D' -- because '-MD' means "put the output
869 # in D".
870 rm -rf conftest.dir
871 mkdir conftest.dir
872 # Copy depcomp to subdir because otherwise we won't find it if we're
873 # using a relative directory.
874 cp "$am_depcomp" conftest.dir
875 cd conftest.dir
876 # We will build objects and dependencies in a subdirectory because
877 # it helps to detect inapplicable dependency modes. For instance
878 # both Tru64's cc and ICC support -MD to output dependencies as a
879 # side effect of compilation, but ICC will put the dependencies in
880 # the current directory while Tru64 will put them in the object
881 # directory.
882 mkdir sub
883
884 am_cv_$1_dependencies_compiler_type=none
885 if test "$am_compiler_list" = ""; then
886 am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
887 fi
888 am__universal=false
889 m4_case([$1], [CC],
890 [case " $depcc " in #(
891 *\ -arch\ *\ -arch\ *) am__universal=true ;;
892 esac],
893 [CXX],
894 [case " $depcc " in #(
895 *\ -arch\ *\ -arch\ *) am__universal=true ;;
896 esac])
897
898 for depmode in $am_compiler_list; do
899 # Setup a source with many dependencies, because some compilers
900 # like to wrap large dependency lists on column 80 (with \), and
901 # we should not choose a depcomp mode which is confused by this.
902 #
903 # We need to recreate these files for each test, as the compiler may
904 # overwrite some of them when testing with obscure command lines.
905 # This happens at least with the AIX C compiler.
906 : > sub/conftest.c
907 for i in 1 2 3 4 5 6; do
908 echo '#include "conftst'$i'.h"' >> sub/conftest.c
909 # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
910 # Solaris 10 /bin/sh.
911 echo '/* dummy */' > sub/conftst$i.h
912 done
913 echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
914
915 # We check with '-c' and '-o' for the sake of the "dashmstdout"
916 # mode. It turns out that the SunPro C++ compiler does not properly
917 # handle '-M -o', and we need to detect this. Also, some Intel
918 # versions had trouble with output in subdirs.
919 am__obj=sub/conftest.${OBJEXT-o}
920 am__minus_obj="-o $am__obj"
921 case $depmode in
922 gcc)
923 # This depmode causes a compiler race in universal mode.
924 test "$am__universal" = false || continue
925 ;;
926 nosideeffect)
927 # After this tag, mechanisms are not by side-effect, so they'll
928 # only be used when explicitly requested.
929 if test "x$enable_dependency_tracking" = xyes; then
930 continue
931 else
932 break
933 fi
934 ;;
935 msvc7 | msvc7msys | msvisualcpp | msvcmsys)
936 # This compiler won't grok '-c -o', but also, the minuso test has
937 # not run yet. These depmodes are late enough in the game, and
938 # so weak that their functioning should not be impacted.
939 am__obj=conftest.${OBJEXT-o}
940 am__minus_obj=
941 ;;
942 none) break ;;
943 esac
944 if depmode=$depmode \
945 source=sub/conftest.c object=$am__obj \
946 depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
947 $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
948 >/dev/null 2>conftest.err &&
949 grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
950 grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
951 grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
952 ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
953 # icc doesn't choke on unknown options, it will just issue warnings
954 # or remarks (even with -Werror). So we grep stderr for any message
955 # that says an option was ignored or not supported.
956 # When given -MP, icc 7.0 and 7.1 complain thusly:
957 # icc: Command line warning: ignoring option '-M'; no argument required
958 # The diagnosis changed in icc 8.0:
959 # icc: Command line remark: option '-MP' not supported
960 if (grep 'ignoring option' conftest.err ||
961 grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
962 am_cv_$1_dependencies_compiler_type=$depmode
963 break
964 fi
965 fi
966 done
967
968 cd ..
969 rm -rf conftest.dir
970else
971 am_cv_$1_dependencies_compiler_type=none
972fi
973])
974AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
975AM_CONDITIONAL([am__fastdep$1], [
976 test "x$enable_dependency_tracking" != xno \
977 && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
978])
979
980
981# AM_SET_DEPDIR
982# -------------
983# Choose a directory name for dependency files.
984# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
985AC_DEFUN([AM_SET_DEPDIR],
986[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
987AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
988])
989
990
991# AM_DEP_TRACK
992# ------------
993AC_DEFUN([AM_DEP_TRACK],
994[AC_ARG_ENABLE([dependency-tracking], [dnl
995AS_HELP_STRING(
996 [--enable-dependency-tracking],
997 [do not reject slow dependency extractors])
998AS_HELP_STRING(
999 [--disable-dependency-tracking],
1000 [speeds up one-time build])])
1001if test "x$enable_dependency_tracking" != xno; then
1002 am_depcomp="$ac_aux_dir/depcomp"
1003 AMDEPBACKSLASH='\'
1004 am__nodep='_no'
1005fi
1006AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
1007AC_SUBST([AMDEPBACKSLASH])dnl
1008_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
1009AC_SUBST([am__nodep])dnl
1010_AM_SUBST_NOTMAKE([am__nodep])dnl
1011])
1012
1013# Generate code to set up dependency tracking. -*- Autoconf -*-
1014
1015# Copyright (C) 1999-2014 Free Software Foundation, Inc.
1016#
1017# This file is free software; the Free Software Foundation
1018# gives unlimited permission to copy and/or distribute it,
1019# with or without modifications, as long as this notice is preserved.
1020
1021
1022# _AM_OUTPUT_DEPENDENCY_COMMANDS
1023# ------------------------------
1024AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
1025[{
1026 # Older Autoconf quotes --file arguments for eval, but not when files
1027 # are listed without --file. Let's play safe and only enable the eval
1028 # if we detect the quoting.
1029 case $CONFIG_FILES in
1030 *\'*) eval set x "$CONFIG_FILES" ;;
1031 *) set x $CONFIG_FILES ;;
1032 esac
1033 shift
1034 for mf
1035 do
1036 # Strip MF so we end up with the name of the file.
1037 mf=`echo "$mf" | sed -e 's/:.*$//'`
1038 # Check whether this is an Automake generated Makefile or not.
1039 # We used to match only the files named 'Makefile.in', but
1040 # some people rename them; so instead we look at the file content.
1041 # Grep'ing the first line is not enough: some people post-process
1042 # each Makefile.in and add a new line on top of each file to say so.
1043 # Grep'ing the whole file is not good either: AIX grep has a line
1044 # limit of 2048, but all sed's we know have understand at least 4000.
1045 if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
1046 dirpart=`AS_DIRNAME("$mf")`
1047 else
1048 continue
1049 fi
1050 # Extract the definition of DEPDIR, am__include, and am__quote
1051 # from the Makefile without running 'make'.
1052 DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
1053 test -z "$DEPDIR" && continue
1054 am__include=`sed -n 's/^am__include = //p' < "$mf"`
1055 test -z "$am__include" && continue
1056 am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
1057 # Find all dependency output files, they are included files with
1058 # $(DEPDIR) in their names. We invoke sed twice because it is the
1059 # simplest approach to changing $(DEPDIR) to its actual value in the
1060 # expansion.
1061 for file in `sed -n "
1062 s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
1063 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
1064 # Make sure the directory exists.
1065 test -f "$dirpart/$file" && continue
1066 fdir=`AS_DIRNAME(["$file"])`
1067 AS_MKDIR_P([$dirpart/$fdir])
1068 # echo "creating $dirpart/$file"
1069 echo '# dummy' > "$dirpart/$file"
1070 done
1071 done
1072}
1073])# _AM_OUTPUT_DEPENDENCY_COMMANDS
1074
1075
1076# AM_OUTPUT_DEPENDENCY_COMMANDS
1077# -----------------------------
1078# This macro should only be invoked once -- use via AC_REQUIRE.
1079#
1080# This code is only required when automatic dependency tracking
1081# is enabled. FIXME. This creates each '.P' file that we will
1082# need in order to bootstrap the dependency handling code.
1083AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
1084[AC_CONFIG_COMMANDS([depfiles],
1085 [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
1086 [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
1087])
1088
1089# Do all the work for Automake. -*- Autoconf -*-
1090
1091# Copyright (C) 1996-2014 Free Software Foundation, Inc.
1092#
1093# This file is free software; the Free Software Foundation
1094# gives unlimited permission to copy and/or distribute it,
1095# with or without modifications, as long as this notice is preserved.
1096
1097# This macro actually does too much. Some checks are only needed if
1098# your package does certain things. But this isn't really a big deal.
1099
1100dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O.
1101m4_define([AC_PROG_CC],
1102m4_defn([AC_PROG_CC])
1103[_AM_PROG_CC_C_O
1104])
1105
1106# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
1107# AM_INIT_AUTOMAKE([OPTIONS])
1108# -----------------------------------------------
1109# The call with PACKAGE and VERSION arguments is the old style
1110# call (pre autoconf-2.50), which is being phased out. PACKAGE
1111# and VERSION should now be passed to AC_INIT and removed from
1112# the call to AM_INIT_AUTOMAKE.
1113# We support both call styles for the transition. After
1114# the next Automake release, Autoconf can make the AC_INIT
1115# arguments mandatory, and then we can depend on a new Autoconf
1116# release and drop the old call support.
1117AC_DEFUN([AM_INIT_AUTOMAKE],
1118[AC_PREREQ([2.65])dnl
1119dnl Autoconf wants to disallow AM_ names. We explicitly allow
1120dnl the ones we care about.
1121m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
1122AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
1123AC_REQUIRE([AC_PROG_INSTALL])dnl
1124if test "`cd $srcdir && pwd`" != "`pwd`"; then
1125 # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
1126 # is not polluted with repeated "-I."
1127 AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
1128 # test to see if srcdir already configured
1129 if test -f $srcdir/config.status; then
1130 AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
1131 fi
1132fi
1133
1134# test whether we have cygpath
1135if test -z "$CYGPATH_W"; then
1136 if (cygpath --version) >/dev/null 2>/dev/null; then
1137 CYGPATH_W='cygpath -w'
1138 else
1139 CYGPATH_W=echo
1140 fi
1141fi
1142AC_SUBST([CYGPATH_W])
1143
1144# Define the identity of the package.
1145dnl Distinguish between old-style and new-style calls.
1146m4_ifval([$2],
1147[AC_DIAGNOSE([obsolete],
1148 [$0: two- and three-arguments forms are deprecated.])
1149m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
1150 AC_SUBST([PACKAGE], [$1])dnl
1151 AC_SUBST([VERSION], [$2])],
1152[_AM_SET_OPTIONS([$1])dnl
1153dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
1154m4_if(
1155 m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
1156 [ok:ok],,
1157 [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
1158 AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
1159 AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
1160
1161_AM_IF_OPTION([no-define],,
1162[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
1163 AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
1164
1165# Some tools Automake needs.
1166AC_REQUIRE([AM_SANITY_CHECK])dnl
1167AC_REQUIRE([AC_ARG_PROGRAM])dnl
1168AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
1169AM_MISSING_PROG([AUTOCONF], [autoconf])
1170AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
1171AM_MISSING_PROG([AUTOHEADER], [autoheader])
1172AM_MISSING_PROG([MAKEINFO], [makeinfo])
1173AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
1174AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
1175AC_REQUIRE([AC_PROG_MKDIR_P])dnl
1176# For better backward compatibility. To be removed once Automake 1.9.x
1177# dies out for good. For more background, see:
1178# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
1179# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
1180AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
1181# We need awk for the "check" target (and possibly the TAP driver). The
1182# system "awk" is bad on some platforms.
1183AC_REQUIRE([AC_PROG_AWK])dnl
1184AC_REQUIRE([AC_PROG_MAKE_SET])dnl
1185AC_REQUIRE([AM_SET_LEADING_DOT])dnl
1186_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
1187 [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
1188 [_AM_PROG_TAR([v7])])])
1189_AM_IF_OPTION([no-dependencies],,
1190[AC_PROVIDE_IFELSE([AC_PROG_CC],
1191 [_AM_DEPENDENCIES([CC])],
1192 [m4_define([AC_PROG_CC],
1193 m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
1194AC_PROVIDE_IFELSE([AC_PROG_CXX],
1195 [_AM_DEPENDENCIES([CXX])],
1196 [m4_define([AC_PROG_CXX],
1197 m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
1198AC_PROVIDE_IFELSE([AC_PROG_OBJC],
1199 [_AM_DEPENDENCIES([OBJC])],
1200 [m4_define([AC_PROG_OBJC],
1201 m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
1202AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
1203 [_AM_DEPENDENCIES([OBJCXX])],
1204 [m4_define([AC_PROG_OBJCXX],
1205 m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
1206])
1207AC_REQUIRE([AM_SILENT_RULES])dnl
1208dnl The testsuite driver may need to know about EXEEXT, so add the
1209dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This
1210dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.
1211AC_CONFIG_COMMANDS_PRE(dnl
1212[m4_provide_if([_AM_COMPILER_EXEEXT],
1213 [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
1214
1215# POSIX will say in a future version that running "rm -f" with no argument
1216# is OK; and we want to be able to make that assumption in our Makefile
1217# recipes. So use an aggressive probe to check that the usage we want is
1218# actually supported "in the wild" to an acceptable degree.
1219# See automake bug#10828.
1220# To make any issue more visible, cause the running configure to be aborted
1221# by default if the 'rm' program in use doesn't match our expectations; the
1222# user can still override this though.
1223if rm -f && rm -fr && rm -rf; then : OK; else
1224 cat >&2 <<'END'
1225Oops!
1226
1227Your 'rm' program seems unable to run without file operands specified
1228on the command line, even when the '-f' option is present. This is contrary
1229to the behaviour of most rm programs out there, and not conforming with
1230the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
1231
1232Please tell bug-automake@gnu.org about your system, including the value
1233of your $PATH and any error possibly output before this message. This
1234can help us improve future automake versions.
1235
1236END
1237 if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
1238 echo 'Configuration will proceed anyway, since you have set the' >&2
1239 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
1240 echo >&2
1241 else
1242 cat >&2 <<'END'
1243Aborting the configuration process, to ensure you take notice of the issue.
1244
1245You can download and install GNU coreutils to get an 'rm' implementation
1246that behaves properly: <http://www.gnu.org/software/coreutils/>.
1247
1248If you want to complete the configuration process using your problematic
1249'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
1250to "yes", and re-run configure.
1251
1252END
1253 AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
1254 fi
1255fi
1256dnl The trailing newline in this macro's definition is deliberate, for
1257dnl backward compatibility and to allow trailing 'dnl'-style comments
1258dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841.
1259])
1260
1261dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
1262dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
1263dnl mangled by Autoconf and run in a shell conditional statement.
1264m4_define([_AC_COMPILER_EXEEXT],
1265m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
1266
1267# When config.status generates a header, we must update the stamp-h file.
1268# This file resides in the same directory as the config header
1269# that is generated. The stamp files are numbered to have different names.
1270
1271# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
1272# loop where config.status creates the headers, so we can generate
1273# our stamp files there.
1274AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
1275[# Compute $1's index in $config_headers.
1276_am_arg=$1
1277_am_stamp_count=1
1278for _am_header in $config_headers :; do
1279 case $_am_header in
1280 $_am_arg | $_am_arg:* )
1281 break ;;
1282 * )
1283 _am_stamp_count=`expr $_am_stamp_count + 1` ;;
1284 esac
1285done
1286echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
1287
1288# Copyright (C) 2001-2014 Free Software Foundation, Inc.
1289#
1290# This file is free software; the Free Software Foundation
1291# gives unlimited permission to copy and/or distribute it,
1292# with or without modifications, as long as this notice is preserved.
1293
1294# AM_PROG_INSTALL_SH
1295# ------------------
1296# Define $install_sh.
1297AC_DEFUN([AM_PROG_INSTALL_SH],
1298[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
1299if test x"${install_sh+set}" != xset; then
1300 case $am_aux_dir in
1301 *\ * | *\ *)
1302 install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
1303 *)
1304 install_sh="\${SHELL} $am_aux_dir/install-sh"
1305 esac
1306fi
1307AC_SUBST([install_sh])])
1308
1309# Copyright (C) 2003-2014 Free Software Foundation, Inc.
1310#
1311# This file is free software; the Free Software Foundation
1312# gives unlimited permission to copy and/or distribute it,
1313# with or without modifications, as long as this notice is preserved.
1314
1315# Check whether the underlying file-system supports filenames
1316# with a leading dot. For instance MS-DOS doesn't.
1317AC_DEFUN([AM_SET_LEADING_DOT],
1318[rm -rf .tst 2>/dev/null
1319mkdir .tst 2>/dev/null
1320if test -d .tst; then
1321 am__leading_dot=.
1322else
1323 am__leading_dot=_
1324fi
1325rmdir .tst 2>/dev/null
1326AC_SUBST([am__leading_dot])])
1327
1328# Check to see how 'make' treats includes. -*- Autoconf -*-
1329
1330# Copyright (C) 2001-2014 Free Software Foundation, Inc.
1331#
1332# This file is free software; the Free Software Foundation
1333# gives unlimited permission to copy and/or distribute it,
1334# with or without modifications, as long as this notice is preserved.
1335
1336# AM_MAKE_INCLUDE()
1337# -----------------
1338# Check to see how make treats includes.
1339AC_DEFUN([AM_MAKE_INCLUDE],
1340[am_make=${MAKE-make}
1341cat > confinc << 'END'
1342am__doit:
1343 @echo this is the am__doit target
1344.PHONY: am__doit
1345END
1346# If we don't find an include directive, just comment out the code.
1347AC_MSG_CHECKING([for style of include used by $am_make])
1348am__include="#"
1349am__quote=
1350_am_result=none
1351# First try GNU make style include.
1352echo "include confinc" > confmf
1353# Ignore all kinds of additional output from 'make'.
1354case `$am_make -s -f confmf 2> /dev/null` in #(
1355*the\ am__doit\ target*)
1356 am__include=include
1357 am__quote=
1358 _am_result=GNU
1359 ;;
1360esac
1361# Now try BSD make style include.
1362if test "$am__include" = "#"; then
1363 echo '.include "confinc"' > confmf
1364 case `$am_make -s -f confmf 2> /dev/null` in #(
1365 *the\ am__doit\ target*)
1366 am__include=.include
1367 am__quote="\""
1368 _am_result=BSD
1369 ;;
1370 esac
1371fi
1372AC_SUBST([am__include])
1373AC_SUBST([am__quote])
1374AC_MSG_RESULT([$_am_result])
1375rm -f confinc confmf
1376])
1377
1378# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
1379
1380# Copyright (C) 1997-2014 Free Software Foundation, Inc.
1381#
1382# This file is free software; the Free Software Foundation
1383# gives unlimited permission to copy and/or distribute it,
1384# with or without modifications, as long as this notice is preserved.
1385
1386# AM_MISSING_PROG(NAME, PROGRAM)
1387# ------------------------------
1388AC_DEFUN([AM_MISSING_PROG],
1389[AC_REQUIRE([AM_MISSING_HAS_RUN])
1390$1=${$1-"${am_missing_run}$2"}
1391AC_SUBST($1)])
1392
1393# AM_MISSING_HAS_RUN
1394# ------------------
1395# Define MISSING if not defined so far and test if it is modern enough.
1396# If it is, set am_missing_run to use it, otherwise, to nothing.
1397AC_DEFUN([AM_MISSING_HAS_RUN],
1398[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
1399AC_REQUIRE_AUX_FILE([missing])dnl
1400if test x"${MISSING+set}" != xset; then
1401 case $am_aux_dir in
1402 *\ * | *\ *)
1403 MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
1404 *)
1405 MISSING="\${SHELL} $am_aux_dir/missing" ;;
1406 esac
1407fi
1408# Use eval to expand $SHELL
1409if eval "$MISSING --is-lightweight"; then
1410 am_missing_run="$MISSING "
1411else
1412 am_missing_run=
1413 AC_MSG_WARN(['missing' script is too old or missing])
1414fi
1415])
1416
1417# Helper functions for option handling. -*- Autoconf -*-
1418
1419# Copyright (C) 2001-2014 Free Software Foundation, Inc.
1420#
1421# This file is free software; the Free Software Foundation
1422# gives unlimited permission to copy and/or distribute it,
1423# with or without modifications, as long as this notice is preserved.
1424
1425# _AM_MANGLE_OPTION(NAME)
1426# -----------------------
1427AC_DEFUN([_AM_MANGLE_OPTION],
1428[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
1429
1430# _AM_SET_OPTION(NAME)
1431# --------------------
1432# Set option NAME. Presently that only means defining a flag for this option.
1433AC_DEFUN([_AM_SET_OPTION],
1434[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
1435
1436# _AM_SET_OPTIONS(OPTIONS)
1437# ------------------------
1438# OPTIONS is a space-separated list of Automake options.
1439AC_DEFUN([_AM_SET_OPTIONS],
1440[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
1441
1442# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
1443# -------------------------------------------
1444# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
1445AC_DEFUN([_AM_IF_OPTION],
1446[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
1447
1448# Copyright (C) 1999-2014 Free Software Foundation, Inc.
1449#
1450# This file is free software; the Free Software Foundation
1451# gives unlimited permission to copy and/or distribute it,
1452# with or without modifications, as long as this notice is preserved.
1453
1454# _AM_PROG_CC_C_O
1455# ---------------
1456# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC
1457# to automatically call this.
1458AC_DEFUN([_AM_PROG_CC_C_O],
1459[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
1460AC_REQUIRE_AUX_FILE([compile])dnl
1461AC_LANG_PUSH([C])dnl
1462AC_CACHE_CHECK(
1463 [whether $CC understands -c and -o together],
1464 [am_cv_prog_cc_c_o],
1465 [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
1466 # Make sure it works both with $CC and with simple cc.
1467 # Following AC_PROG_CC_C_O, we do the test twice because some
1468 # compilers refuse to overwrite an existing .o file with -o,
1469 # though they will create one.
1470 am_cv_prog_cc_c_o=yes
1471 for am_i in 1 2; do
1472 if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \
1473 && test -f conftest2.$ac_objext; then
1474 : OK
1475 else
1476 am_cv_prog_cc_c_o=no
1477 break
1478 fi
1479 done
1480 rm -f core conftest*
1481 unset am_i])
1482if test "$am_cv_prog_cc_c_o" != yes; then
1483 # Losing compiler, so override with the script.
1484 # FIXME: It is wrong to rewrite CC.
1485 # But if we don't then we get into trouble of one sort or another.
1486 # A longer-term fix would be to have automake use am__CC in this case,
1487 # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
1488 CC="$am_aux_dir/compile $CC"
1489fi
1490AC_LANG_POP([C])])
1491
1492# For backward compatibility.
1493AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
1494
1495# Copyright (C) 2001-2014 Free Software Foundation, Inc.
1496#
1497# This file is free software; the Free Software Foundation
1498# gives unlimited permission to copy and/or distribute it,
1499# with or without modifications, as long as this notice is preserved.
1500
1501# AM_RUN_LOG(COMMAND)
1502# -------------------
1503# Run COMMAND, save the exit status in ac_status, and log it.
1504# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
1505AC_DEFUN([AM_RUN_LOG],
1506[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
1507 ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
1508 ac_status=$?
1509 echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
1510 (exit $ac_status); }])
1511
1512# Check to make sure that the build environment is sane. -*- Autoconf -*-
1513
1514# Copyright (C) 1996-2014 Free Software Foundation, Inc.
1515#
1516# This file is free software; the Free Software Foundation
1517# gives unlimited permission to copy and/or distribute it,
1518# with or without modifications, as long as this notice is preserved.
1519
1520# AM_SANITY_CHECK
1521# ---------------
1522AC_DEFUN([AM_SANITY_CHECK],
1523[AC_MSG_CHECKING([whether build environment is sane])
1524# Reject unsafe characters in $srcdir or the absolute working directory
1525# name. Accept space and tab only in the latter.
1526am_lf='
1527'
1528case `pwd` in
1529 *[[\\\"\#\$\&\'\`$am_lf]]*)
1530 AC_MSG_ERROR([unsafe absolute working directory name]);;
1531esac
1532case $srcdir in
1533 *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
1534 AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
1535esac
1536
1537# Do 'set' in a subshell so we don't clobber the current shell's
1538# arguments. Must try -L first in case configure is actually a
1539# symlink; some systems play weird games with the mod time of symlinks
1540# (eg FreeBSD returns the mod time of the symlink's containing
1541# directory).
1542if (
1543 am_has_slept=no
1544 for am_try in 1 2; do
1545 echo "timestamp, slept: $am_has_slept" > conftest.file
1546 set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
1547 if test "$[*]" = "X"; then
1548 # -L didn't work.
1549 set X `ls -t "$srcdir/configure" conftest.file`
1550 fi
1551 if test "$[*]" != "X $srcdir/configure conftest.file" \
1552 && test "$[*]" != "X conftest.file $srcdir/configure"; then
1553
1554 # If neither matched, then we have a broken ls. This can happen
1555 # if, for instance, CONFIG_SHELL is bash and it inherits a
1556 # broken ls alias from the environment. This has actually
1557 # happened. Such a system could not be considered "sane".
1558 AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
1559 alias in your environment])
1560 fi
1561 if test "$[2]" = conftest.file || test $am_try -eq 2; then
1562 break
1563 fi
1564 # Just in case.
1565 sleep 1
1566 am_has_slept=yes
1567 done
1568 test "$[2]" = conftest.file
1569 )
1570then
1571 # Ok.
1572 :
1573else
1574 AC_MSG_ERROR([newly created file is older than distributed files!
1575Check your system clock])
1576fi
1577AC_MSG_RESULT([yes])
1578# If we didn't sleep, we still need to ensure time stamps of config.status and
1579# generated files are strictly newer.
1580am_sleep_pid=
1581if grep 'slept: no' conftest.file >/dev/null 2>&1; then
1582 ( sleep 1 ) &
1583 am_sleep_pid=$!
1584fi
1585AC_CONFIG_COMMANDS_PRE(
1586 [AC_MSG_CHECKING([that generated files are newer than configure])
1587 if test -n "$am_sleep_pid"; then
1588 # Hide warnings about reused PIDs.
1589 wait $am_sleep_pid 2>/dev/null
1590 fi
1591 AC_MSG_RESULT([done])])
1592rm -f conftest.file
1593])
1594
1595# Copyright (C) 2009-2014 Free Software Foundation, Inc.
1596#
1597# This file is free software; the Free Software Foundation
1598# gives unlimited permission to copy and/or distribute it,
1599# with or without modifications, as long as this notice is preserved.
1600
1601# AM_SILENT_RULES([DEFAULT])
1602# --------------------------
1603# Enable less verbose build rules; with the default set to DEFAULT
1604# ("yes" being less verbose, "no" or empty being verbose).
1605AC_DEFUN([AM_SILENT_RULES],
1606[AC_ARG_ENABLE([silent-rules], [dnl
1607AS_HELP_STRING(
1608 [--enable-silent-rules],
1609 [less verbose build output (undo: "make V=1")])
1610AS_HELP_STRING(
1611 [--disable-silent-rules],
1612 [verbose build output (undo: "make V=0")])dnl
1613])
1614case $enable_silent_rules in @%:@ (((
1615 yes) AM_DEFAULT_VERBOSITY=0;;
1616 no) AM_DEFAULT_VERBOSITY=1;;
1617 *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
1618esac
1619dnl
1620dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
1621dnl do not support nested variable expansions.
1622dnl See automake bug#9928 and bug#10237.
1623am_make=${MAKE-make}
1624AC_CACHE_CHECK([whether $am_make supports nested variables],
1625 [am_cv_make_support_nested_variables],
1626 [if AS_ECHO([['TRUE=$(BAR$(V))
1627BAR0=false
1628BAR1=true
1629V=1
1630am__doit:
1631 @$(TRUE)
1632.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then
1633 am_cv_make_support_nested_variables=yes
1634else
1635 am_cv_make_support_nested_variables=no
1636fi])
1637if test $am_cv_make_support_nested_variables = yes; then
1638 dnl Using '$V' instead of '$(V)' breaks IRIX make.
1639 AM_V='$(V)'
1640 AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
1641else
1642 AM_V=$AM_DEFAULT_VERBOSITY
1643 AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
1644fi
1645AC_SUBST([AM_V])dnl
1646AM_SUBST_NOTMAKE([AM_V])dnl
1647AC_SUBST([AM_DEFAULT_V])dnl
1648AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl
1649AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
1650AM_BACKSLASH='\'
1651AC_SUBST([AM_BACKSLASH])dnl
1652_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
1653])
1654
1655# Copyright (C) 2001-2014 Free Software Foundation, Inc.
1656#
1657# This file is free software; the Free Software Foundation
1658# gives unlimited permission to copy and/or distribute it,
1659# with or without modifications, as long as this notice is preserved.
1660
1661# AM_PROG_INSTALL_STRIP
1662# ---------------------
1663# One issue with vendor 'install' (even GNU) is that you can't
1664# specify the program used to strip binaries. This is especially
1665# annoying in cross-compiling environments, where the build's strip
1666# is unlikely to handle the host's binaries.
1667# Fortunately install-sh will honor a STRIPPROG variable, so we
1668# always use install-sh in "make install-strip", and initialize
1669# STRIPPROG with the value of the STRIP variable (set by the user).
1670AC_DEFUN([AM_PROG_INSTALL_STRIP],
1671[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
1672# Installed binaries are usually stripped using 'strip' when the user
1673# run "make install-strip". However 'strip' might not be the right
1674# tool to use in cross-compilation environments, therefore Automake
1675# will honor the 'STRIP' environment variable to overrule this program.
1676dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
1677if test "$cross_compiling" != no; then
1678 AC_CHECK_TOOL([STRIP], [strip], :)
1679fi
1680INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
1681AC_SUBST([INSTALL_STRIP_PROGRAM])])
1682
1683# Copyright (C) 2006-2014 Free Software Foundation, Inc.
1684#
1685# This file is free software; the Free Software Foundation
1686# gives unlimited permission to copy and/or distribute it,
1687# with or without modifications, as long as this notice is preserved.
1688
1689# _AM_SUBST_NOTMAKE(VARIABLE)
1690# ---------------------------
1691# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
1692# This macro is traced by Automake.
1693AC_DEFUN([_AM_SUBST_NOTMAKE])
1694
1695# AM_SUBST_NOTMAKE(VARIABLE)
1696# --------------------------
1697# Public sister of _AM_SUBST_NOTMAKE.
1698AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
1699
1700# Check how to create a tarball. -*- Autoconf -*-
1701
1702# Copyright (C) 2004-2014 Free Software Foundation, Inc.
1703#
1704# This file is free software; the Free Software Foundation
1705# gives unlimited permission to copy and/or distribute it,
1706# with or without modifications, as long as this notice is preserved.
1707
1708# _AM_PROG_TAR(FORMAT)
1709# --------------------
1710# Check how to create a tarball in format FORMAT.
1711# FORMAT should be one of 'v7', 'ustar', or 'pax'.
1712#
1713# Substitute a variable $(am__tar) that is a command
1714# writing to stdout a FORMAT-tarball containing the directory
1715# $tardir.
1716# tardir=directory && $(am__tar) > result.tar
1717#
1718# Substitute a variable $(am__untar) that extract such
1719# a tarball read from stdin.
1720# $(am__untar) < result.tar
1721#
1722AC_DEFUN([_AM_PROG_TAR],
1723[# Always define AMTAR for backward compatibility. Yes, it's still used
1724# in the wild :-( We should find a proper way to deprecate it ...
1725AC_SUBST([AMTAR], ['$${TAR-tar}'])
1726
1727# We'll loop over all known methods to create a tar archive until one works.
1728_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
1729
1730m4_if([$1], [v7],
1731 [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
1732
1733 [m4_case([$1],
1734 [ustar],
1735 [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
1736 # There is notably a 21 bits limit for the UID and the GID. In fact,
1737 # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
1738 # and bug#13588).
1739 am_max_uid=2097151 # 2^21 - 1
1740 am_max_gid=$am_max_uid
1741 # The $UID and $GID variables are not portable, so we need to resort
1742 # to the POSIX-mandated id(1) utility. Errors in the 'id' calls
1743 # below are definitely unexpected, so allow the users to see them
1744 # (that is, avoid stderr redirection).
1745 am_uid=`id -u || echo unknown`
1746 am_gid=`id -g || echo unknown`
1747 AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
1748 if test $am_uid -le $am_max_uid; then
1749 AC_MSG_RESULT([yes])
1750 else
1751 AC_MSG_RESULT([no])
1752 _am_tools=none
1753 fi
1754 AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
1755 if test $am_gid -le $am_max_gid; then
1756 AC_MSG_RESULT([yes])
1757 else
1758 AC_MSG_RESULT([no])
1759 _am_tools=none
1760 fi],
1761
1762 [pax],
1763 [],
1764
1765 [m4_fatal([Unknown tar format])])
1766
1767 AC_MSG_CHECKING([how to create a $1 tar archive])
1768
1769 # Go ahead even if we have the value already cached. We do so because we
1770 # need to set the values for the 'am__tar' and 'am__untar' variables.
1771 _am_tools=${am_cv_prog_tar_$1-$_am_tools}
1772
1773 for _am_tool in $_am_tools; do
1774 case $_am_tool in
1775 gnutar)
1776 for _am_tar in tar gnutar gtar; do
1777 AM_RUN_LOG([$_am_tar --version]) && break
1778 done
1779 am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
1780 am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
1781 am__untar="$_am_tar -xf -"
1782 ;;
1783 plaintar)
1784 # Must skip GNU tar: if it does not support --format= it doesn't create
1785 # ustar tarball either.
1786 (tar --version) >/dev/null 2>&1 && continue
1787 am__tar='tar chf - "$$tardir"'
1788 am__tar_='tar chf - "$tardir"'
1789 am__untar='tar xf -'
1790 ;;
1791 pax)
1792 am__tar='pax -L -x $1 -w "$$tardir"'
1793 am__tar_='pax -L -x $1 -w "$tardir"'
1794 am__untar='pax -r'
1795 ;;
1796 cpio)
1797 am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
1798 am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
1799 am__untar='cpio -i -H $1 -d'
1800 ;;
1801 none)
1802 am__tar=false
1803 am__tar_=false
1804 am__untar=false
1805 ;;
1806 esac
1807
1808 # If the value was cached, stop now. We just wanted to have am__tar
1809 # and am__untar set.
1810 test -n "${am_cv_prog_tar_$1}" && break
1811
1812 # tar/untar a dummy directory, and stop if the command works.
1813 rm -rf conftest.dir
1814 mkdir conftest.dir
1815 echo GrepMe > conftest.dir/file
1816 AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
1817 rm -rf conftest.dir
1818 if test -s conftest.tar; then
1819 AM_RUN_LOG([$am__untar <conftest.tar])
1820 AM_RUN_LOG([cat conftest.dir/file])
1821 grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
1822 fi
1823 done
1824 rm -rf conftest.dir
1825
1826 AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
1827 AC_MSG_RESULT([$am_cv_prog_tar_$1])])
1828
1829AC_SUBST([am__tar])
1830AC_SUBST([am__untar])
1831]) # _AM_PROG_TAR
1832
diff --git a/apps/plugins/puzzles/benchmark.pl b/apps/plugins/puzzles/src/benchmark.pl
index 98763859e8..98763859e8 100755
--- a/apps/plugins/puzzles/benchmark.pl
+++ b/apps/plugins/puzzles/src/benchmark.pl
diff --git a/apps/plugins/puzzles/benchmark.sh b/apps/plugins/puzzles/src/benchmark.sh
index b3af27765e..b3af27765e 100755
--- a/apps/plugins/puzzles/benchmark.sh
+++ b/apps/plugins/puzzles/src/benchmark.sh
diff --git a/apps/plugins/puzzles/blackbox.R b/apps/plugins/puzzles/src/blackbox.R
index 116225206d..116225206d 100644
--- a/apps/plugins/puzzles/blackbox.R
+++ b/apps/plugins/puzzles/src/blackbox.R
diff --git a/apps/plugins/puzzles/blackbox.c b/apps/plugins/puzzles/src/blackbox.c
index a4875e49d7..b334cf7117 100644
--- a/apps/plugins/puzzles/blackbox.c
+++ b/apps/plugins/puzzles/src/blackbox.c
@@ -5,7 +5,7 @@
5#include <stdio.h> 5#include <stdio.h>
6#include <stdlib.h> 6#include <stdlib.h>
7#include <string.h> 7#include <string.h>
8#include "rbassert.h" 8#include <assert.h>
9#include <ctype.h> 9#include <ctype.h>
10#include <math.h> 10#include <math.h>
11 11
@@ -1505,7 +1505,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
1505const struct game thegame = { 1505const struct game thegame = {
1506 "Black Box", "games.blackbox", "blackbox", 1506 "Black Box", "games.blackbox", "blackbox",
1507 default_params, 1507 default_params,
1508 game_fetch_preset, 1508 game_fetch_preset, NULL,
1509 decode_params, 1509 decode_params,
1510 encode_params, 1510 encode_params,
1511 free_params, 1511 free_params,
diff --git a/apps/plugins/puzzles/src/blackbox.html b/apps/plugins/puzzles/src/blackbox.html
new file mode 100644
index 0000000000..f7bb340f41
--- /dev/null
+++ b/apps/plugins/puzzles/src/blackbox.html
@@ -0,0 +1,125 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Black Box</title>
7<link rel="previous" href="untangle.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="slant.html">
12</head>
13<body>
14<p><a href="untangle.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="slant.html">Next</a></p>
15<h1><a name="C19"></a>Chapter 19: <a name="i0"></a>Black Box</h1>
16<p>
17A number of balls are hidden in a rectangular arena. You have to deduce the positions of the balls by firing lasers positioned at the edges of the arena and observing how their beams are deflected.
18</p>
19<p>
20Beams will travel straight from their origin until they hit the opposite side of the arena (at which point they emerge), unless affected by balls in one of the following ways:
21</p>
22<ul><li>
23A beam that hits a ball head-on is absorbed and will never re-emerge. This includes beams that meet a ball on the first rank of the arena.
24</li>
25<li>
26A beam with a ball in its front-left square and no ball ahead of it gets deflected 90 degrees to the right.
27</li>
28<li>
29A beam with a ball in its front-right square and no ball ahead of it gets similarly deflected to the left.
30</li>
31<li>
32A beam that would re-emerge from its entry location is considered to be &#8216;reflected&#8217;.
33</li>
34<li>
35A beam which would get deflected before entering the arena by a ball to the front-left or front-right of its entry point is also considered to be &#8216;reflected&#8217;.
36</li>
37</ul>
38<p>
39Beams that are reflected appear as a &#8216;R&#8217;; beams that hit balls head-on appear as &#8216;H&#8217;. Otherwise, a number appears at the firing point and the location where the beam emerges (this number is unique to that shot).
40</p>
41<p>
42You can place guesses as to the location of the balls, based on the entry and exit patterns of the beams; once you have placed enough balls a button appears enabling you to have your guesses checked.
43</p>
44<p>
45Here is a diagram showing how the positions of balls can create each of the beam behaviours shown above:
46</p>
47<pre><code> 1RHR----
48|..O.O...|
492........3
50|........|
51|........|
523........|
53|......O.|
54H........|
55|.....O..|
56 12-RR---
57</code></pre>
58<p>
59As shown, it is possible for a beam to receive multiple reflections before re-emerging (see turn 3). Similarly, a beam may be reflected (possibly more than once) before receiving a hit (the &#8216;H&#8217; on the left side of the example).
60</p>
61<p>
62Note that any layout with more than 4 balls may have a non-unique solution. The following diagram illustrates this; if you know the board contains 5 balls, it is impossible to determine where the fifth ball is (possible positions marked with an <code>x</code>):
63</p>
64<pre><code> --------
65|........|
66|........|
67|..O..O..|
68|...xx...|
69|...xx...|
70|..O..O..|
71|........|
72|........|
73 --------
74</code></pre>
75<p>
76For this reason, when you have your guesses checked, the game will check that your solution <em>produces the same results</em> as the computer's, rather than that your solution is identical to the computer's. So in the above example, you could put the fifth ball at <em>any</em> of the locations marked with an <code>x</code>, and you would still win.
77</p>
78<p>
79Black Box was contributed to this collection by James Harvey.
80</p>
81<h2><a name="S19.1"></a>19.1 <a name="i1"></a>Black Box controls</h2>
82<p>
83To fire a laser beam, left-click in a square around the edge of the arena. The results will be displayed immediately. Clicking or holding the left button on one of these squares will highlight the current go (or a previous go) to confirm the exit point for that laser, if applicable.
84</p>
85<p>
86To guess the location of a ball, left-click within the arena and a black circle will appear marking the guess; click again to remove the guessed ball.
87</p>
88<p>
89Locations in the arena may be locked against modification by right-clicking; whole rows and columns may be similarly locked by right-clicking in the laser square above/below that column, or to the left/right of that row.
90</p>
91<p>
92The cursor keys may also be used to move around the grid. Pressing the Enter key will fire a laser or add a new ball-location guess, and pressing Space will lock a cell, row, or column.
93</p>
94<p>
95When an appropriate number of balls have been guessed, a button will appear at the top-left corner of the grid; clicking that (with mouse or cursor) will check your guesses.
96</p>
97<p>
98If you click the &#8216;check&#8217; button and your guesses are not correct, the game will show you the minimum information necessary to demonstrate this to you, so you can try again. If your ball positions are not consistent with the beam paths you already know about, one beam path will be circled to indicate that it proves you wrong. If your positions match all the existing beam paths but are still wrong, one new beam path will be revealed (written in red) which is not consistent with your current guesses.
99</p>
100<p>
101If you decide to give up completely, you can select Solve to reveal the actual ball positions. At this point, correctly-placed balls will be displayed as filled black circles, incorrectly-placed balls as filled black circles with red crosses, and missing balls as filled red circles. In addition, a red circle marks any laser you had already fired which is not consistent with your ball layout (just as when you press the &#8216;check&#8217; button), and red text marks any laser you <em>could</em> have fired in order to distinguish your ball layout from the correct one.
102</p>
103<p>
104(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
105</p>
106<h2><a name="S19.2"></a>19.2 <a name="i2"></a>Black Box parameters</h2>
107<p>
108These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
109</p>
110<dl><dt>
111<em>Width</em>, <em>Height</em>
112</dt>
113<dd>
114Size of grid in squares. There are 2 &#215; <em>Width</em> &#215; <em>Height</em> lasers per grid, two per row and two per column.
115</dd>
116<dt>
117<em>No. of balls</em>
118</dt>
119<dd>
120Number of balls to place in the grid. This can be a single number, or a range (separated with a hyphen, like &#8216;2-6&#8217;), and determines the number of balls to place on the grid. The &#8216;reveal&#8217; button is only enabled if you have guessed an appropriate number of balls; a guess using a different number to the original solution is still acceptable, if all the beam inputs and outputs match.
121</dd>
122</dl>
123
124<hr><address></address></body>
125</html>
diff --git a/apps/plugins/puzzles/bridges.R b/apps/plugins/puzzles/src/bridges.R
index 75df309152..75df309152 100644
--- a/apps/plugins/puzzles/bridges.R
+++ b/apps/plugins/puzzles/src/bridges.R
diff --git a/apps/plugins/puzzles/bridges.c b/apps/plugins/puzzles/src/bridges.c
index 05a9b16823..6975208fd6 100644
--- a/apps/plugins/puzzles/bridges.c
+++ b/apps/plugins/puzzles/src/bridges.c
@@ -70,7 +70,7 @@
70#include <stdio.h> 70#include <stdio.h>
71#include <stdlib.h> 71#include <stdlib.h>
72#include <string.h> 72#include <string.h>
73#include "rbassert.h" 73#include <assert.h>
74#include <ctype.h> 74#include <ctype.h>
75#include <math.h> 75#include <math.h>
76 76
@@ -3224,7 +3224,7 @@ static void game_print(drawing *dr, const game_state *state, int ts)
3224const struct game thegame = { 3224const struct game thegame = {
3225 "Bridges", "games.bridges", "bridges", 3225 "Bridges", "games.bridges", "bridges",
3226 default_params, 3226 default_params,
3227 game_fetch_preset, 3227 game_fetch_preset, NULL,
3228 decode_params, 3228 decode_params,
3229 encode_params, 3229 encode_params,
3230 free_params, 3230 free_params,
diff --git a/apps/plugins/puzzles/src/bridges.html b/apps/plugins/puzzles/src/bridges.html
new file mode 100644
index 0000000000..74a8a130cd
--- /dev/null
+++ b/apps/plugins/puzzles/src/bridges.html
@@ -0,0 +1,135 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Bridges</title>
7<link rel="previous" href="tents.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="unequal.html">
12</head>
13<body>
14<p><a href="tents.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="unequal.html">Next</a></p>
15<h1><a name="C26"></a>Chapter 26: <a name="i0"></a>Bridges</h1>
16<p>
17You have a set of islands distributed across the playing area. Each island contains a number. Your aim is to connect the islands together with bridges, in such a way that:
18</p>
19<ul><li>
20Bridges run horizontally or vertically.
21</li>
22<li>
23The number of bridges terminating at any island is equal to the number written in that island.
24</li>
25<li>
26Two bridges may run in parallel between the same two islands, but no more than two may do so.
27</li>
28<li>
29No bridge crosses another bridge.
30</li>
31<li>
32All the islands are connected together.
33</li>
34</ul>
35<p>
36There are some configurable alternative modes, which involve changing the parallel-bridge limit to something other than 2, and introducing the additional constraint that no sequence of bridges may form a loop from one island back to the same island. The rules stated above are the default ones.
37</p>
38<p>
39Credit for this puzzle goes to <a name="i1"></a>Nikoli <a href="#p0">[12]</a>.
40</p>
41<p>
42Bridges was contributed to this collection by James Harvey.
43</p>
44<p><a name="p0"></a>
45[12] <a href="http://www.nikoli.co.jp/en/puzzles/hashiwokakero.html"><code>http://www.nikoli.co.jp/en/puzzles/hashiwokakero.html</code></a> (beware of Flash)
46</p>
47<h2><a name="S26.1"></a>26.1 <a name="i2"></a>Bridges controls</h2>
48<p>
49To place a bridge between two islands, click the mouse down on one island and drag it towards the other. You do not need to drag all the way to the other island; you only need to move the mouse far enough for the intended bridge direction to be unambiguous. (So you can keep the mouse near the starting island and conveniently throw bridges out from it in many directions.)
50</p>
51<p>
52Doing this again when a bridge is already present will add another parallel bridge. If there are already as many bridges between the two islands as permitted by the current game rules (i.e. two by default), the same dragging action will remove all of them.
53</p>
54<p>
55If you want to remind yourself that two islands definitely <em>do not</em> have a bridge between them, you can right-drag between them in the same way to draw a &#8216;non-bridge&#8217; marker.
56</p>
57<p>
58If you think you have finished with an island (i.e. you have placed all its bridges and are confident that they are in the right places), you can mark the island as finished by left-clicking on it. This will highlight it and all the bridges connected to it, and you will be prevented from accidentally modifying any of those bridges in future. Left-clicking again on a highlighted island will unmark it and restore your ability to modify it.
59</p>
60<p>
61You can also use the cursor keys to move around the grid: if possible the cursor will always move orthogonally, otherwise it will move towards the nearest island to the indicated direction. Holding Control and pressing a cursor key will lay a bridge in that direction (if available); Shift and a cursor key will lay a &#8216;non-bridge&#8217; marker. Pressing the return key followed by a cursor key will also lay a bridge in that direction.
62</p>
63<p>
64You can mark an island as finished by pressing the space bar or by pressing the return key twice.
65</p>
66<p>
67By pressing a number key, you can jump to the nearest island with that number. Letters &#8216;a&#8217;, ..., &#8216;f&#8217; count as 10, ..., 15 and &#8216;0&#8217; as 16.
68</p>
69<p>
70Violations of the puzzle rules will be marked in red:
71</p>
72<ul><li>
73An island with too many bridges will be highlighted in red.
74</li>
75<li>
76An island with too few bridges will be highlighted in red if it is definitely an error (as opposed to merely not being finished yet): if adding enough bridges would involve having to cross another bridge or remove a non-bridge marker, or if the island has been highlighted as complete.
77</li>
78<li>
79A group of islands and bridges may be highlighted in red if it is a closed subset of the puzzle with no way to connect it to the rest of the islands. For example, if you directly connect two 1s together with a bridge and they are not the only two islands on the grid, they will light up red to indicate that such a group cannot be contained in any valid solution.
80</li>
81<li>
82If you have selected the (non-default) option to disallow loops in the solution, a group of bridges which forms a loop will be highlighted.
83</li>
84</ul>
85<p>
86(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
87</p>
88<h2><a name="S26.2"></a>26.2 <a name="i3"></a>Bridges parameters</h2>
89<p>
90These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
91</p>
92<dl><dt>
93<em>Width</em>, <em>Height</em>
94</dt>
95<dd>
96Size of grid in squares.
97</dd>
98<dt>
99<em>Difficulty</em>
100</dt>
101<dd>
102Difficulty level of puzzle.
103</dd>
104<dt>
105<em>Allow loops</em>
106</dt>
107<dd>
108This is set by default. If cleared, puzzles will be generated in such a way that they are always soluble without creating a loop, and solutions which do involve a loop will be disallowed.
109</dd>
110<dt>
111<em>Max. bridges per direction</em>
112</dt>
113<dd>
114Maximum number of bridges in any particular direction. The default is 2, but you can change it to 1, 3 or 4. In general, fewer is easier.
115</dd>
116<dt>
117<em>%age of island squares</em>
118</dt>
119<dd>
120Gives a rough percentage of islands the generator will try and lay before finishing the puzzle. Certain layouts will not manage to lay enough islands; this is an upper bound.
121</dd>
122<dt>
123<em>Expansion factor (%age)</em>
124</dt>
125<dd>
126The grid generator works by picking an existing island at random (after first creating an initial island somewhere). It then decides on a direction (at random), and then works out how far it could extend before creating another island. This parameter determines how likely it is to extend as far as it can, rather than choosing somewhere closer.
127<p>
128High expansion factors usually mean easier puzzles with fewer possible islands; low expansion factors can create lots of tightly-packed islands.
129</p>
130
131</dd>
132</dl>
133
134<hr><address></address></body>
135</html>
diff --git a/apps/plugins/puzzles/chm.but b/apps/plugins/puzzles/src/chm.but
index e0237044e4..e0237044e4 100644
--- a/apps/plugins/puzzles/chm.but
+++ b/apps/plugins/puzzles/src/chm.but
diff --git a/apps/plugins/puzzles/chm.css b/apps/plugins/puzzles/src/chm.css
index d8c316bfc6..d8c316bfc6 100644
--- a/apps/plugins/puzzles/chm.css
+++ b/apps/plugins/puzzles/src/chm.css
diff --git a/apps/plugins/puzzles/combi.c b/apps/plugins/puzzles/src/combi.c
index d39e298405..4c5d1077aa 100644
--- a/apps/plugins/puzzles/combi.c
+++ b/apps/plugins/puzzles/src/combi.c
@@ -1,4 +1,4 @@
1#include "rbassert.h" 1#include <assert.h>
2#include <string.h> 2#include <string.h>
3 3
4#include "puzzles.h" 4#include "puzzles.h"
diff --git a/apps/plugins/puzzles/src/common.html b/apps/plugins/puzzles/src/common.html
new file mode 100644
index 0000000000..951429d806
--- /dev/null
+++ b/apps/plugins/puzzles/src/common.html
@@ -0,0 +1,285 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Common features</title>
7<link rel="previous" href="intro.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="net.html">
12</head>
13<body>
14<p><a href="intro.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="net.html">Next</a></p>
15
16<ul>
17<li><a href="#C2">Chapter 2: Common features</a>
18<ul>
19<li><a href="#S2.1">2.1 Common actions</a></li>
20<li><a href="#S2.2">2.2 Specifying games with the game ID</a></li>
21<li><a href="#S2.3">2.3 The &#8216;Type&#8217; menu</a></li>
22<li><a href="#S2.4">2.4 Specifying game parameters on the command line</a></li>
23<li><a href="#S2.5">2.5 Unix command-line options</a></li>
24</ul></li>
25</ul>
26<h1><a name="C2"></a>Chapter 2: <a name="i0"></a>Common features</h1>
27<p>
28This chapter describes features that are common to all the games.
29</p>
30<h2><a name="S2.1"></a>2.1 <a name="i1"></a>Common actions</h2>
31<p>
32These actions are all available from the <a name="i2"></a>&#8216;Game&#8217; menu and via <a name="i3"></a>keyboard shortcuts, in addition to any game-specific actions.
33</p>
34<p>
35(On <a name="i4"></a>Mac OS X, to conform with local user interface standards, these actions are situated on the <a name="i5"></a>&#8216;File&#8217; and <a name="i6"></a>&#8216;Edit&#8217; menus instead.)
36</p>
37<dl><dt>
38<a name="i7"></a><em>New game</em> (&#8216;N&#8217;, Ctrl+&#8216;N&#8217;)
39</dt>
40<dd>
41Starts a new game, with a random initial state.
42</dd>
43<dt>
44<a name="i8"></a><em>Restart game</em>
45</dt>
46<dd>
47Resets the current game to its initial state. (This can be undone.)
48</dd>
49<dt>
50<a name="i9"></a><em>Load</em>
51</dt>
52<dd>
53Loads a saved game from a file on disk.
54</dd>
55<dt>
56<a name="i10"></a><em>Save</em>
57</dt>
58<dd>
59Saves the current state of your game to a file on disk.
60<p>
61The Load and Save operations preserve your entire game history (so you can save, reload, and still Undo and Redo things you had done before saving).
62</p>
63
64</dd>
65<dt>
66<a name="i11"></a><em>Print</em>
67</dt>
68<dd>
69Where supported (currently only on Windows), brings up a dialog allowing you to print an arbitrary number of puzzles randomly generated from the current parameters, optionally including the current puzzle. (Only for puzzles which make sense to print, of course &#8211; it's hard to think of a sensible printable representation of Fifteen!)
70</dd>
71<dt>
72<a name="i12"></a><em>Undo</em> (&#8216;U&#8217;, Ctrl+&#8216;Z&#8217;, Ctrl+&#8216;_&#8217;)
73</dt>
74<dd>
75Undoes a single move. (You can undo moves back to the start of the session.)
76</dd>
77<dt>
78<a name="i13"></a><em>Redo</em> (&#8216;R&#8217;, Ctrl+&#8216;R&#8217;)
79</dt>
80<dd>
81Redoes a previously undone move.
82</dd>
83<dt>
84<a name="i14"></a><em>Copy</em>
85</dt>
86<dd>
87Copies the current state of your game to the clipboard in text format, so that you can paste it into (say) an e-mail client or a web message board if you're discussing the game with someone else. (Not all games support this feature.)
88</dd>
89<dt>
90<a name="i15"></a><em>Solve</em>
91</dt>
92<dd>
93Transforms the puzzle instantly into its solved state. For some games (Cube) this feature is not supported at all because it is of no particular use. For other games (such as Pattern), the solved state can be used to give you information, if you can't see how a solution can exist at all or you want to know where you made a mistake. For still other games (such as Sixteen), automatic solution tells you nothing about how to <em>get</em> to the solution, but it does provide a useful way to get there quickly so that you can experiment with set-piece moves and transformations.
94<p>
95Some games (such as Solo) are capable of solving a game ID you have typed in from elsewhere. Other games (such as Rectangles) cannot solve a game ID they didn't invent themself, but when they did invent the game ID they know what the solution is already. Still other games (Pattern) can solve <em>some</em> external game IDs, but only if they aren't too difficult.
96</p>
97<p>
98The &#8216;Solve&#8217; command adds the solved state to the end of the undo chain for the puzzle. In other words, if you want to go back to solving it yourself after seeing the answer, you can just press Undo.
99</p>
100
101</dd>
102<dt>
103<a name="i16"></a><a name="i17"></a><em>Quit</em> (&#8216;Q&#8217;, Ctrl+&#8216;Q&#8217;)
104</dt>
105<dd>
106Closes the application entirely.
107</dd>
108</dl>
109<h2><a name="S2.2"></a>2.2 Specifying games with the <a name="i18"></a>game ID</h2>
110<p>
111There are two ways to save a game specification out of a puzzle and recreate it later, or recreate it in somebody else's copy of the same puzzle.
112</p>
113<p>
114The &#8216;<a name="i19"></a>Specific&#8217; and &#8216;<a name="i20"></a>Random Seed&#8217; options from the <a name="i21"></a>&#8216;Game&#8217; menu (or the &#8216;File&#8217; menu, on <a name="i22"></a>Mac OS X) each show a piece of text (a &#8216;game ID&#8217;) which is sufficient to reconstruct precisely the same game at a later date.
115</p>
116<p>
117You can enter either of these pieces of text back into the program (via the same &#8216;Specific&#8217; or &#8216;Random Seed&#8217; menu options) at a later point, and it will recreate the same game. You can also use either one as a <a name="i23"></a>command line argument (on Windows or Unix); see <a href="#S2.4">section 2.4</a> for more detail.
118</p>
119<p>
120The difference between the two forms is that a descriptive game ID is a literal <em>description</em> of the <a name="i24"></a>initial state of the game, whereas a random seed is just a piece of arbitrary text which was provided as input to the random number generator used to create the puzzle. This means that:
121</p>
122<ul><li>
123Descriptive game IDs tend to be longer in many puzzles (although some, such as Cube (<a href="cube.html#C4">chapter 4</a>), only need very short descriptions). So a random seed is often a <em>quicker</em> way to note down the puzzle you're currently playing, or to tell it to somebody else so they can play the same one as you.
124</li>
125<li>
126Any text at all is a valid random seed. The automatically generated ones are fifteen-digit numbers, but anything will do; you can type in your full name, or a word you just made up, and a valid puzzle will be generated from it. This provides a way for two or more people to race to complete the same puzzle: you think of a random seed, then everybody types it in at the same time, and nobody has an advantage due to having seen the generated puzzle before anybody else.
127</li>
128<li>
129It is often possible to convert puzzles from other sources (such as &#8216;nonograms&#8217; or &#8216;sudoku&#8217; from newspapers) into descriptive game IDs suitable for use with these programs.
130</li>
131<li>
132Random seeds are not guaranteed to produce the same result if you use them with a different <a name="i25"></a><em>version</em> of the puzzle program. This is because the generation algorithm might have been improved or modified in later versions of the code, and will therefore produce a different result when given the same sequence of random numbers. Use a descriptive game ID if you aren't sure that it will be used on the same version of the program as yours.
133<p>
134(Use the &#8216;About&#8217; menu option to find out the version number of the program. Programs with the same version number running on different platforms should still be random-seed compatible.)
135</p>
136
137</li>
138</ul>
139<p>
140<a name="i26"></a>A descriptive game ID starts with a piece of text which encodes the <a name="i27"></a><em>parameters</em> of the current game (such as grid size). Then there is a colon, and after that is the description of the game's initial state. A random seed starts with a similar string of parameters, but then it contains a hash sign followed by arbitrary data.
141</p>
142<p>
143If you enter a descriptive game ID, the program will not be able to show you the random seed which generated it, since it wasn't generated <em>from</em> a random seed. If you <em>enter</em> a random seed, however, the program will be able to show you the descriptive game ID derived from that random seed.
144</p>
145<p>
146Note that the game parameter strings are not always identical between the two forms. For some games, there will be parameter data provided with the random seed which is not included in the descriptive game ID. This is because that parameter information is only relevant when <em>generating</em> puzzle grids, and is not important when playing them. Thus, for example, the difficulty level in Solo (<a href="solo.html#C11">chapter 11</a>) is not mentioned in the descriptive game ID.
147</p>
148<p>
149These additional parameters are also not set permanently if you type in a game ID. For example, suppose you have Solo set to &#8216;Advanced&#8217; difficulty level, and then a friend wants your help with a &#8216;Trivial&#8217; puzzle; so the friend reads out a random seed specifying &#8216;Trivial&#8217; difficulty, and you type it in. The program will generate you the same &#8216;Trivial&#8217; grid which your friend was having trouble with, but once you have finished playing it, when you ask for a new game it will automatically go back to the &#8216;Advanced&#8217; difficulty which it was previously set on.
150</p>
151<h2><a name="S2.3"></a>2.3 The &#8216;Type&#8217; menu</h2>
152<p>
153The <a name="i28"></a>&#8216;Type&#8217; menu, if present, may contain a list of <a name="i29"></a>preset game settings. Selecting one of these will start a new random game with the parameters specified.
154</p>
155<p>
156The &#8216;Type&#8217; menu may also contain a &#8216;<a name="i30"></a>Custom&#8217; option which allows you to fine-tune game <a name="i31"></a>parameters. The parameters available are specific to each game and are described in the following sections.
157</p>
158<h2><a name="S2.4"></a>2.4 Specifying game parameters on the <a name="i32"></a>command line</h2>
159<p>
160(This section does not apply to the <a name="i33"></a>Mac OS X version.)
161</p>
162<p>
163The games in this collection deliberately do not ever save information on to the computer they run on: they have no high score tables and no saved preferences. (This is because I expect at least some people to play them at work, and those people will probably appreciate leaving as little evidence as possible!)
164</p>
165<p>
166However, if you do want to arrange for one of these games to <a name="i34"></a>default to a particular set of parameters, you can specify them on the command line.
167</p>
168<p>
169The easiest way to do this is to set up the parameters you want using the &#8216;Type&#8217; menu (see <a href="#S2.3">section 2.3</a>), and then to select &#8216;Random Seed&#8217; from the &#8216;Game&#8217; or &#8216;File&#8217; menu (see <a href="#S2.2">section 2.2</a>). The text in the &#8216;Game ID&#8217; box will be composed of two parts, separated by a hash. The first of these parts represents the game parameters (the size of the playing area, for example, and anything else you set using the &#8216;Type&#8217; menu).
170</p>
171<p>
172If you run the game with just that parameter text on the command line, it will start up with the settings you specified.
173</p>
174<p>
175For example: if you run Cube (see <a href="cube.html#C4">chapter 4</a>), select &#8216;Octahedron&#8217; from the &#8216;Type&#8217; menu, and then go to the game ID selection, you will see a string of the form &#8216;<code>o2x2#338686542711620</code>&#8217;. Take only the part before the hash (&#8216;<code>o2x2</code>&#8217;), and start Cube with that text on the command line: &#8216;<code>PREFIX-cube o2x2</code>&#8217;.
176</p>
177<p>
178If you copy the <em>entire</em> game ID on to the command line, the game will start up in the specific game that was described. This is occasionally a more convenient way to start a particular game ID than by pasting it into the game ID selection box.
179</p>
180<p>
181(You could also retrieve the encoded game parameters using the &#8216;Specific&#8217; menu option instead of &#8216;Random Seed&#8217;, but if you do then some options, such as the difficulty level in Solo, will be missing. See <a href="#S2.2">section 2.2</a> for more details on this.)
182</p>
183<h2><a name="S2.5"></a>2.5 <a name="i35"></a>Unix <a name="i36"></a>command-line options</h2>
184<p>
185(This section only applies to the Unix port.)
186</p>
187<p>
188In addition to being able to specify game parameters on the command line (see <a href="#S2.4">section 2.4</a>), there are various other options:
189</p>
190<dl><dt>
191<code>--game</code>
192</dt>
193<dt>
194<code>--load</code>
195</dt>
196<dd>
197These options respectively determine whether the command-line argument is treated as specifying game parameters or a <a name="i37"></a>save file to <a name="i38"></a>load. Only one should be specified. If neither of these options is specified, a guess is made based on the format of the argument.
198</dd>
199<dt>
200<code>--generate </code><em>n</em>
201</dt>
202<dd>
203If this option is specified, instead of a puzzle being displayed, a number of descriptive game IDs will be <a name="i39"></a>invented and printed on standard output. This is useful for gaining access to the game generation algorithms without necessarily using the frontend.
204<p>
205If game parameters are specified on the command-line, they will be used to generate the game IDs; otherwise a default set of parameters will be used.
206</p>
207<p>
208The most common use of this option is in conjunction with <code>--print</code>, in which case its behaviour is slightly different; see below.
209</p>
210
211</dd>
212<dt>
213<a name="i40"></a><code>--print </code><em>w</em><code>x</code><em>h</em>
214</dt>
215<dd>
216If this option is specified, instead of a puzzle being displayed, a printed representation of one or more unsolved puzzles is sent to standard output, in <a name="i41"></a>PostScript format.
217<p>
218On each page of puzzles, there will be <em>w</em> across and <em>h</em> down. If there are more puzzles than <em>w</em>&#215;<em>h</em>, more than one page will be printed.
219</p>
220<p>
221If <code>--generate</code> has also been specified, the invented game IDs will be used to generate the printed output. Otherwise, a list of game IDs is expected on standard input (which can be descriptive or random seeds; see <a href="#S2.2">section 2.2</a>), in the same format produced by <code>--generate</code>.
222</p>
223<p>
224For example:
225</p>
226<pre><code>PREFIX-net --generate 12 --print 2x3 7x7w | lpr
227</code></pre>
228<p>
229will generate two pages of printed Net puzzles (each of which will have a 7&#215;7 wrapping grid), and pipe the output to the <code>lpr</code> command, which on many systems will send them to an actual printer.
230</p>
231<p>
232There are various other options which affect printing; see below.
233</p>
234
235</dd>
236<dt>
237<code>--save </code><em>file-prefix</em> [ <code>--save-suffix </code><em>file-suffix</em> ]
238</dt>
239<dd>
240If this option is specified, instead of a puzzle being displayed, saved-game files for one or more unsolved puzzles are written to files constructed from the supplied prefix and/or suffix.
241<p>
242If <code>--generate</code> has also been specified, the invented game IDs will be used to generate the printed output. Otherwise, a list of game IDs is expected on standard input (which can be descriptive or random seeds; see <a href="#S2.2">section 2.2</a>), in the same format produced by <code>--generate</code>.
243</p>
244<p>
245For example:
246</p>
247<pre><code>PREFIX-net --generate 12 --save game --save-suffix .sav
248</code></pre>
249<p>
250will generate twelve Net saved-game files with the names <code>game0.sav</code> to <code>game11.sav</code>.
251</p>
252
253</dd>
254<dt>
255<code>--version</code>
256</dt>
257<dd>
258Prints version information about the game, and then quits.
259</dd>
260</dl>
261<p>
262The following options are only meaningful if <code>--print</code> is also specified:
263</p>
264<dl><dt>
265<code>--with-solutions</code>
266</dt>
267<dd>
268The set of pages filled with unsolved puzzles will be followed by the solutions to those puzzles.
269</dd>
270<dt>
271<code>--scale </code><em>n</em>
272</dt>
273<dd>
274Adjusts how big each puzzle is when printed. Larger numbers make puzzles bigger; the default is 1.0.
275</dd>
276<dt>
277<code>--colour</code>
278</dt>
279<dd>
280Puzzles will be printed in colour, rather than in black and white (if supported by the puzzle).
281</dd>
282</dl>
283
284<hr><address></address></body>
285</html>
diff --git a/apps/plugins/puzzles/src/compile b/apps/plugins/puzzles/src/compile
new file mode 100755
index 0000000000..a85b723c7e
--- /dev/null
+++ b/apps/plugins/puzzles/src/compile
@@ -0,0 +1,347 @@
1#! /bin/sh
2# Wrapper for compilers which do not understand '-c -o'.
3
4scriptversion=2012-10-14.11; # UTC
5
6# Copyright (C) 1999-2014 Free Software Foundation, Inc.
7# Written by Tom Tromey <tromey@cygnus.com>.
8#
9# This program is free software; you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation; either version 2, or (at your option)
12# any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with this program. If not, see <http://www.gnu.org/licenses/>.
21
22# As a special exception to the GNU General Public License, if you
23# distribute this file as part of a program that contains a
24# configuration script generated by Autoconf, you may include it under
25# the same distribution terms that you use for the rest of that program.
26
27# This file is maintained in Automake, please report
28# bugs to <bug-automake@gnu.org> or send patches to
29# <automake-patches@gnu.org>.
30
31nl='
32'
33
34# We need space, tab and new line, in precisely that order. Quoting is
35# there to prevent tools from complaining about whitespace usage.
36IFS=" "" $nl"
37
38file_conv=
39
40# func_file_conv build_file lazy
41# Convert a $build file to $host form and store it in $file
42# Currently only supports Windows hosts. If the determined conversion
43# type is listed in (the comma separated) LAZY, no conversion will
44# take place.
45func_file_conv ()
46{
47 file=$1
48 case $file in
49 / | /[!/]*) # absolute file, and not a UNC file
50 if test -z "$file_conv"; then
51 # lazily determine how to convert abs files
52 case `uname -s` in
53 MINGW*)
54 file_conv=mingw
55 ;;
56 CYGWIN*)
57 file_conv=cygwin
58 ;;
59 *)
60 file_conv=wine
61 ;;
62 esac
63 fi
64 case $file_conv/,$2, in
65 *,$file_conv,*)
66 ;;
67 mingw/*)
68 file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
69 ;;
70 cygwin/*)
71 file=`cygpath -m "$file" || echo "$file"`
72 ;;
73 wine/*)
74 file=`winepath -w "$file" || echo "$file"`
75 ;;
76 esac
77 ;;
78 esac
79}
80
81# func_cl_dashL linkdir
82# Make cl look for libraries in LINKDIR
83func_cl_dashL ()
84{
85 func_file_conv "$1"
86 if test -z "$lib_path"; then
87 lib_path=$file
88 else
89 lib_path="$lib_path;$file"
90 fi
91 linker_opts="$linker_opts -LIBPATH:$file"
92}
93
94# func_cl_dashl library
95# Do a library search-path lookup for cl
96func_cl_dashl ()
97{
98 lib=$1
99 found=no
100 save_IFS=$IFS
101 IFS=';'
102 for dir in $lib_path $LIB
103 do
104 IFS=$save_IFS
105 if $shared && test -f "$dir/$lib.dll.lib"; then
106 found=yes
107 lib=$dir/$lib.dll.lib
108 break
109 fi
110 if test -f "$dir/$lib.lib"; then
111 found=yes
112 lib=$dir/$lib.lib
113 break
114 fi
115 if test -f "$dir/lib$lib.a"; then
116 found=yes
117 lib=$dir/lib$lib.a
118 break
119 fi
120 done
121 IFS=$save_IFS
122
123 if test "$found" != yes; then
124 lib=$lib.lib
125 fi
126}
127
128# func_cl_wrapper cl arg...
129# Adjust compile command to suit cl
130func_cl_wrapper ()
131{
132 # Assume a capable shell
133 lib_path=
134 shared=:
135 linker_opts=
136 for arg
137 do
138 if test -n "$eat"; then
139 eat=
140 else
141 case $1 in
142 -o)
143 # configure might choose to run compile as 'compile cc -o foo foo.c'.
144 eat=1
145 case $2 in
146 *.o | *.[oO][bB][jJ])
147 func_file_conv "$2"
148 set x "$@" -Fo"$file"
149 shift
150 ;;
151 *)
152 func_file_conv "$2"
153 set x "$@" -Fe"$file"
154 shift
155 ;;
156 esac
157 ;;
158 -I)
159 eat=1
160 func_file_conv "$2" mingw
161 set x "$@" -I"$file"
162 shift
163 ;;
164 -I*)
165 func_file_conv "${1#-I}" mingw
166 set x "$@" -I"$file"
167 shift
168 ;;
169 -l)
170 eat=1
171 func_cl_dashl "$2"
172 set x "$@" "$lib"
173 shift
174 ;;
175 -l*)
176 func_cl_dashl "${1#-l}"
177 set x "$@" "$lib"
178 shift
179 ;;
180 -L)
181 eat=1
182 func_cl_dashL "$2"
183 ;;
184 -L*)
185 func_cl_dashL "${1#-L}"
186 ;;
187 -static)
188 shared=false
189 ;;
190 -Wl,*)
191 arg=${1#-Wl,}
192 save_ifs="$IFS"; IFS=','
193 for flag in $arg; do
194 IFS="$save_ifs"
195 linker_opts="$linker_opts $flag"
196 done
197 IFS="$save_ifs"
198 ;;
199 -Xlinker)
200 eat=1
201 linker_opts="$linker_opts $2"
202 ;;
203 -*)
204 set x "$@" "$1"
205 shift
206 ;;
207 *.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
208 func_file_conv "$1"
209 set x "$@" -Tp"$file"
210 shift
211 ;;
212 *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
213 func_file_conv "$1" mingw
214 set x "$@" "$file"
215 shift
216 ;;
217 *)
218 set x "$@" "$1"
219 shift
220 ;;
221 esac
222 fi
223 shift
224 done
225 if test -n "$linker_opts"; then
226 linker_opts="-link$linker_opts"
227 fi
228 exec "$@" $linker_opts
229 exit 1
230}
231
232eat=
233
234case $1 in
235 '')
236 echo "$0: No command. Try '$0 --help' for more information." 1>&2
237 exit 1;
238 ;;
239 -h | --h*)
240 cat <<\EOF
241Usage: compile [--help] [--version] PROGRAM [ARGS]
242
243Wrapper for compilers which do not understand '-c -o'.
244Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
245arguments, and rename the output as expected.
246
247If you are trying to build a whole package this is not the
248right script to run: please start by reading the file 'INSTALL'.
249
250Report bugs to <bug-automake@gnu.org>.
251EOF
252 exit $?
253 ;;
254 -v | --v*)
255 echo "compile $scriptversion"
256 exit $?
257 ;;
258 cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
259 func_cl_wrapper "$@" # Doesn't return...
260 ;;
261esac
262
263ofile=
264cfile=
265
266for arg
267do
268 if test -n "$eat"; then
269 eat=
270 else
271 case $1 in
272 -o)
273 # configure might choose to run compile as 'compile cc -o foo foo.c'.
274 # So we strip '-o arg' only if arg is an object.
275 eat=1
276 case $2 in
277 *.o | *.obj)
278 ofile=$2
279 ;;
280 *)
281 set x "$@" -o "$2"
282 shift
283 ;;
284 esac
285 ;;
286 *.c)
287 cfile=$1
288 set x "$@" "$1"
289 shift
290 ;;
291 *)
292 set x "$@" "$1"
293 shift
294 ;;
295 esac
296 fi
297 shift
298done
299
300if test -z "$ofile" || test -z "$cfile"; then
301 # If no '-o' option was seen then we might have been invoked from a
302 # pattern rule where we don't need one. That is ok -- this is a
303 # normal compilation that the losing compiler can handle. If no
304 # '.c' file was seen then we are probably linking. That is also
305 # ok.
306 exec "$@"
307fi
308
309# Name of file we expect compiler to create.
310cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
311
312# Create the lock directory.
313# Note: use '[/\\:.-]' here to ensure that we don't use the same name
314# that we are using for the .o file. Also, base the name on the expected
315# object file name, since that is what matters with a parallel build.
316lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
317while true; do
318 if mkdir "$lockdir" >/dev/null 2>&1; then
319 break
320 fi
321 sleep 1
322done
323# FIXME: race condition here if user kills between mkdir and trap.
324trap "rmdir '$lockdir'; exit 1" 1 2 15
325
326# Run the compile.
327"$@"
328ret=$?
329
330if test -f "$cofile"; then
331 test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
332elif test -f "${cofile}bj"; then
333 test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
334fi
335
336rmdir "$lockdir"
337exit $ret
338
339# Local Variables:
340# mode: shell-script
341# sh-indentation: 2
342# eval: (add-hook 'write-file-hooks 'time-stamp)
343# time-stamp-start: "scriptversion="
344# time-stamp-format: "%:y-%02m-%02d.%02H"
345# time-stamp-time-zone: "UTC"
346# time-stamp-end: "; # UTC"
347# End:
diff --git a/apps/plugins/puzzles/src/config.log b/apps/plugins/puzzles/src/config.log
new file mode 100644
index 0000000000..8bf125c515
--- /dev/null
+++ b/apps/plugins/puzzles/src/config.log
@@ -0,0 +1,135 @@
1This file contains any messages produced by compilers while
2running configure, to aid debugging if configure makes a mistake.
3
4It was created by puzzles configure 6.66, which was
5generated by GNU Autoconf 2.69. Invocation command line was
6
7 $ ./configure
8
9## --------- ##
10## Platform. ##
11## --------- ##
12
13hostname = alpha
14uname -m = x86_64
15uname -r = 4.8.4-1-ARCH
16uname -s = Linux
17uname -v = #1 SMP PREEMPT Sat Oct 22 18:26:57 CEST 2016
18
19/usr/bin/uname -p = unknown
20/bin/uname -X = unknown
21
22/bin/arch = unknown
23/usr/bin/arch -k = unknown
24/usr/convex/getsysinfo = unknown
25/usr/bin/hostinfo = unknown
26/bin/machine = unknown
27/usr/bin/oslevel = unknown
28/bin/universe = unknown
29
30PATH: /usr/local/sbin
31PATH: /usr/local/bin
32PATH: /usr/bin
33PATH: /opt/cuda/bin
34PATH: /usr/lib/jvm/default/bin
35PATH: /opt/kde/bin
36PATH: /usr/bin/site_perl
37PATH: /usr/bin/vendor_perl
38PATH: /usr/bin/core_perl
39
40
41## ----------- ##
42## Core tests. ##
43## ----------- ##
44
45
46## ---------------- ##
47## Cache variables. ##
48## ---------------- ##
49
50ac_cv_env_CC_set=
51ac_cv_env_CC_value=
52ac_cv_env_CFLAGS_set=
53ac_cv_env_CFLAGS_value=
54ac_cv_env_CPPFLAGS_set=
55ac_cv_env_CPPFLAGS_value=
56ac_cv_env_LDFLAGS_set=
57ac_cv_env_LDFLAGS_value=
58ac_cv_env_LIBS_set=
59ac_cv_env_LIBS_value=
60ac_cv_env_build_alias_set=
61ac_cv_env_build_alias_value=
62ac_cv_env_host_alias_set=
63ac_cv_env_host_alias_value=
64ac_cv_env_target_alias_set=
65ac_cv_env_target_alias_value=
66
67## ----------------- ##
68## Output variables. ##
69## ----------------- ##
70
71CC=''
72CFLAGS=''
73CPPFLAGS=''
74DEFS=''
75ECHO_C=''
76ECHO_N='-n'
77ECHO_T=''
78EXEEXT=''
79INSTALL_DATA=''
80INSTALL_PROGRAM=''
81INSTALL_SCRIPT=''
82LDFLAGS=''
83LIBOBJS=''
84LIBS=''
85LTLIBOBJS=''
86OBJEXT=''
87PACKAGE_BUGREPORT='anakin@pobox.com'
88PACKAGE_NAME='puzzles'
89PACKAGE_STRING='puzzles 6.66'
90PACKAGE_TARNAME='puzzles'
91PACKAGE_URL=''
92PACKAGE_VERSION='6.66'
93PATH_SEPARATOR=':'
94RANLIB=''
95SHELL='/bin/sh'
96ac_ct_CC=''
97bindir='${exec_prefix}/bin'
98build_alias=''
99datadir='${datarootdir}'
100datarootdir='${prefix}/share'
101docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
102dvidir='${docdir}'
103exec_prefix='NONE'
104host_alias=''
105htmldir='${docdir}'
106includedir='${prefix}/include'
107infodir='${datarootdir}/info'
108libdir='${exec_prefix}/lib'
109libexecdir='${exec_prefix}/libexec'
110localedir='${datarootdir}/locale'
111localstatedir='${prefix}/var'
112mandir='${datarootdir}/man'
113oldincludedir='/usr/include'
114pdfdir='${docdir}'
115prefix='NONE'
116program_transform_name='s,x,x,'
117psdir='${docdir}'
118sbindir='${exec_prefix}/sbin'
119sharedstatedir='${prefix}/com'
120sysconfdir='${prefix}/etc'
121target_alias=''
122
123## ----------- ##
124## confdefs.h. ##
125## ----------- ##
126
127/* confdefs.h */
128#define PACKAGE_NAME "puzzles"
129#define PACKAGE_TARNAME "puzzles"
130#define PACKAGE_VERSION "6.66"
131#define PACKAGE_STRING "puzzles 6.66"
132#define PACKAGE_BUGREPORT "anakin@pobox.com"
133#define PACKAGE_URL ""
134
135configure: exit 2
diff --git a/apps/plugins/puzzles/src/configure b/apps/plugins/puzzles/src/configure
new file mode 100755
index 0000000000..432ca273b3
--- /dev/null
+++ b/apps/plugins/puzzles/src/configure
@@ -0,0 +1,5739 @@
1#! /bin/sh
2# Guess values for system-dependent variables and create Makefiles.
3# Generated by GNU Autoconf 2.69 for puzzles 6.66.
4#
5# Report bugs to <anakin@pobox.com>.
6#
7#
8# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
9#
10#
11# This configure script is free software; the Free Software Foundation
12# gives unlimited permission to copy, distribute and modify it.
13## -------------------- ##
14## M4sh Initialization. ##
15## -------------------- ##
16
17# Be more Bourne compatible
18DUALCASE=1; export DUALCASE # for MKS sh
19if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
20 emulate sh
21 NULLCMD=:
22 # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
23 # is contrary to our usage. Disable this feature.
24 alias -g '${1+"$@"}'='"$@"'
25 setopt NO_GLOB_SUBST
26else
27 case `(set -o) 2>/dev/null` in #(
28 *posix*) :
29 set -o posix ;; #(
30 *) :
31 ;;
32esac
33fi
34
35
36as_nl='
37'
38export as_nl
39# Printing a long string crashes Solaris 7 /usr/bin/printf.
40as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
41as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
42as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
43# Prefer a ksh shell builtin over an external printf program on Solaris,
44# but without wasting forks for bash or zsh.
45if test -z "$BASH_VERSION$ZSH_VERSION" \
46 && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
47 as_echo='print -r --'
48 as_echo_n='print -rn --'
49elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
50 as_echo='printf %s\n'
51 as_echo_n='printf %s'
52else
53 if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
54 as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
55 as_echo_n='/usr/ucb/echo -n'
56 else
57 as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
58 as_echo_n_body='eval
59 arg=$1;
60 case $arg in #(
61 *"$as_nl"*)
62 expr "X$arg" : "X\\(.*\\)$as_nl";
63 arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
64 esac;
65 expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
66 '
67 export as_echo_n_body
68 as_echo_n='sh -c $as_echo_n_body as_echo'
69 fi
70 export as_echo_body
71 as_echo='sh -c $as_echo_body as_echo'
72fi
73
74# The user is always right.
75if test "${PATH_SEPARATOR+set}" != set; then
76 PATH_SEPARATOR=:
77 (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
78 (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
79 PATH_SEPARATOR=';'
80 }
81fi
82
83
84# IFS
85# We need space, tab and new line, in precisely that order. Quoting is
86# there to prevent editors from complaining about space-tab.
87# (If _AS_PATH_WALK were called with IFS unset, it would disable word
88# splitting by setting IFS to empty value.)
89IFS=" "" $as_nl"
90
91# Find who we are. Look in the path if we contain no directory separator.
92as_myself=
93case $0 in #((
94 *[\\/]* ) as_myself=$0 ;;
95 *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
96for as_dir in $PATH
97do
98 IFS=$as_save_IFS
99 test -z "$as_dir" && as_dir=.
100 test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
101 done
102IFS=$as_save_IFS
103
104 ;;
105esac
106# We did not find ourselves, most probably we were run as `sh COMMAND'
107# in which case we are not to be found in the path.
108if test "x$as_myself" = x; then
109 as_myself=$0
110fi
111if test ! -f "$as_myself"; then
112 $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
113 exit 1
114fi
115
116# Unset variables that we do not need and which cause bugs (e.g. in
117# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
118# suppresses any "Segmentation fault" message there. '((' could
119# trigger a bug in pdksh 5.2.14.
120for as_var in BASH_ENV ENV MAIL MAILPATH
121do eval test x\${$as_var+set} = xset \
122 && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
123done
124PS1='$ '
125PS2='> '
126PS4='+ '
127
128# NLS nuisances.
129LC_ALL=C
130export LC_ALL
131LANGUAGE=C
132export LANGUAGE
133
134# CDPATH.
135(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
136
137# Use a proper internal environment variable to ensure we don't fall
138 # into an infinite loop, continuously re-executing ourselves.
139 if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
140 _as_can_reexec=no; export _as_can_reexec;
141 # We cannot yet assume a decent shell, so we have to provide a
142# neutralization value for shells without unset; and this also
143# works around shells that cannot unset nonexistent variables.
144# Preserve -v and -x to the replacement shell.
145BASH_ENV=/dev/null
146ENV=/dev/null
147(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
148case $- in # ((((
149 *v*x* | *x*v* ) as_opts=-vx ;;
150 *v* ) as_opts=-v ;;
151 *x* ) as_opts=-x ;;
152 * ) as_opts= ;;
153esac
154exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
155# Admittedly, this is quite paranoid, since all the known shells bail
156# out after a failed `exec'.
157$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
158as_fn_exit 255
159 fi
160 # We don't want this to propagate to other subprocesses.
161 { _as_can_reexec=; unset _as_can_reexec;}
162if test "x$CONFIG_SHELL" = x; then
163 as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
164 emulate sh
165 NULLCMD=:
166 # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
167 # is contrary to our usage. Disable this feature.
168 alias -g '\${1+\"\$@\"}'='\"\$@\"'
169 setopt NO_GLOB_SUBST
170else
171 case \`(set -o) 2>/dev/null\` in #(
172 *posix*) :
173 set -o posix ;; #(
174 *) :
175 ;;
176esac
177fi
178"
179 as_required="as_fn_return () { (exit \$1); }
180as_fn_success () { as_fn_return 0; }
181as_fn_failure () { as_fn_return 1; }
182as_fn_ret_success () { return 0; }
183as_fn_ret_failure () { return 1; }
184
185exitcode=0
186as_fn_success || { exitcode=1; echo as_fn_success failed.; }
187as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
188as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
189as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
190if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
191
192else
193 exitcode=1; echo positional parameters were not saved.
194fi
195test x\$exitcode = x0 || exit 1
196test -x / || exit 1"
197 as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
198 as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
199 eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
200 test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1"
201 if (eval "$as_required") 2>/dev/null; then :
202 as_have_required=yes
203else
204 as_have_required=no
205fi
206 if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
207
208else
209 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
210as_found=false
211for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
212do
213 IFS=$as_save_IFS
214 test -z "$as_dir" && as_dir=.
215 as_found=:
216 case $as_dir in #(
217 /*)
218 for as_base in sh bash ksh sh5; do
219 # Try only shells that exist, to save several forks.
220 as_shell=$as_dir/$as_base
221 if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
222 { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
223 CONFIG_SHELL=$as_shell as_have_required=yes
224 if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
225 break 2
226fi
227fi
228 done;;
229 esac
230 as_found=false
231done
232$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
233 { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
234 CONFIG_SHELL=$SHELL as_have_required=yes
235fi; }
236IFS=$as_save_IFS
237
238
239 if test "x$CONFIG_SHELL" != x; then :
240 export CONFIG_SHELL
241 # We cannot yet assume a decent shell, so we have to provide a
242# neutralization value for shells without unset; and this also
243# works around shells that cannot unset nonexistent variables.
244# Preserve -v and -x to the replacement shell.
245BASH_ENV=/dev/null
246ENV=/dev/null
247(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
248case $- in # ((((
249 *v*x* | *x*v* ) as_opts=-vx ;;
250 *v* ) as_opts=-v ;;
251 *x* ) as_opts=-x ;;
252 * ) as_opts= ;;
253esac
254exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
255# Admittedly, this is quite paranoid, since all the known shells bail
256# out after a failed `exec'.
257$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
258exit 255
259fi
260
261 if test x$as_have_required = xno; then :
262 $as_echo "$0: This script requires a shell more modern than all"
263 $as_echo "$0: the shells that I found on your system."
264 if test x${ZSH_VERSION+set} = xset ; then
265 $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
266 $as_echo "$0: be upgraded to zsh 4.3.4 or later."
267 else
268 $as_echo "$0: Please tell bug-autoconf@gnu.org and anakin@pobox.com
269$0: about your system, including any error possibly output
270$0: before this message. Then install a modern shell, or
271$0: manually run the script under such a shell if you do
272$0: have one."
273 fi
274 exit 1
275fi
276fi
277fi
278SHELL=${CONFIG_SHELL-/bin/sh}
279export SHELL
280# Unset more variables known to interfere with behavior of common tools.
281CLICOLOR_FORCE= GREP_OPTIONS=
282unset CLICOLOR_FORCE GREP_OPTIONS
283
284## --------------------- ##
285## M4sh Shell Functions. ##
286## --------------------- ##
287# as_fn_unset VAR
288# ---------------
289# Portably unset VAR.
290as_fn_unset ()
291{
292 { eval $1=; unset $1;}
293}
294as_unset=as_fn_unset
295
296# as_fn_set_status STATUS
297# -----------------------
298# Set $? to STATUS, without forking.
299as_fn_set_status ()
300{
301 return $1
302} # as_fn_set_status
303
304# as_fn_exit STATUS
305# -----------------
306# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
307as_fn_exit ()
308{
309 set +e
310 as_fn_set_status $1
311 exit $1
312} # as_fn_exit
313
314# as_fn_mkdir_p
315# -------------
316# Create "$as_dir" as a directory, including parents if necessary.
317as_fn_mkdir_p ()
318{
319
320 case $as_dir in #(
321 -*) as_dir=./$as_dir;;
322 esac
323 test -d "$as_dir" || eval $as_mkdir_p || {
324 as_dirs=
325 while :; do
326 case $as_dir in #(
327 *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
328 *) as_qdir=$as_dir;;
329 esac
330 as_dirs="'$as_qdir' $as_dirs"
331 as_dir=`$as_dirname -- "$as_dir" ||
332$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
333 X"$as_dir" : 'X\(//\)[^/]' \| \
334 X"$as_dir" : 'X\(//\)$' \| \
335 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
336$as_echo X"$as_dir" |
337 sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
338 s//\1/
339 q
340 }
341 /^X\(\/\/\)[^/].*/{
342 s//\1/
343 q
344 }
345 /^X\(\/\/\)$/{
346 s//\1/
347 q
348 }
349 /^X\(\/\).*/{
350 s//\1/
351 q
352 }
353 s/.*/./; q'`
354 test -d "$as_dir" && break
355 done
356 test -z "$as_dirs" || eval "mkdir $as_dirs"
357 } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
358
359
360} # as_fn_mkdir_p
361
362# as_fn_executable_p FILE
363# -----------------------
364# Test if FILE is an executable regular file.
365as_fn_executable_p ()
366{
367 test -f "$1" && test -x "$1"
368} # as_fn_executable_p
369# as_fn_append VAR VALUE
370# ----------------------
371# Append the text in VALUE to the end of the definition contained in VAR. Take
372# advantage of any shell optimizations that allow amortized linear growth over
373# repeated appends, instead of the typical quadratic growth present in naive
374# implementations.
375if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
376 eval 'as_fn_append ()
377 {
378 eval $1+=\$2
379 }'
380else
381 as_fn_append ()
382 {
383 eval $1=\$$1\$2
384 }
385fi # as_fn_append
386
387# as_fn_arith ARG...
388# ------------------
389# Perform arithmetic evaluation on the ARGs, and store the result in the
390# global $as_val. Take advantage of shells that can avoid forks. The arguments
391# must be portable across $(()) and expr.
392if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
393 eval 'as_fn_arith ()
394 {
395 as_val=$(( $* ))
396 }'
397else
398 as_fn_arith ()
399 {
400 as_val=`expr "$@" || test $? -eq 1`
401 }
402fi # as_fn_arith
403
404
405# as_fn_error STATUS ERROR [LINENO LOG_FD]
406# ----------------------------------------
407# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
408# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
409# script with STATUS, using 1 if that was 0.
410as_fn_error ()
411{
412 as_status=$1; test $as_status -eq 0 && as_status=1
413 if test "$4"; then
414 as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
415 $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
416 fi
417 $as_echo "$as_me: error: $2" >&2
418 as_fn_exit $as_status
419} # as_fn_error
420
421if expr a : '\(a\)' >/dev/null 2>&1 &&
422 test "X`expr 00001 : '.*\(...\)'`" = X001; then
423 as_expr=expr
424else
425 as_expr=false
426fi
427
428if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
429 as_basename=basename
430else
431 as_basename=false
432fi
433
434if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
435 as_dirname=dirname
436else
437 as_dirname=false
438fi
439
440as_me=`$as_basename -- "$0" ||
441$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
442 X"$0" : 'X\(//\)$' \| \
443 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
444$as_echo X/"$0" |
445 sed '/^.*\/\([^/][^/]*\)\/*$/{
446 s//\1/
447 q
448 }
449 /^X\/\(\/\/\)$/{
450 s//\1/
451 q
452 }
453 /^X\/\(\/\).*/{
454 s//\1/
455 q
456 }
457 s/.*/./; q'`
458
459# Avoid depending upon Character Ranges.
460as_cr_letters='abcdefghijklmnopqrstuvwxyz'
461as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
462as_cr_Letters=$as_cr_letters$as_cr_LETTERS
463as_cr_digits='0123456789'
464as_cr_alnum=$as_cr_Letters$as_cr_digits
465
466
467 as_lineno_1=$LINENO as_lineno_1a=$LINENO
468 as_lineno_2=$LINENO as_lineno_2a=$LINENO
469 eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
470 test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
471 # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
472 sed -n '
473 p
474 /[$]LINENO/=
475 ' <$as_myself |
476 sed '
477 s/[$]LINENO.*/&-/
478 t lineno
479 b
480 :lineno
481 N
482 :loop
483 s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
484 t loop
485 s/-\n.*//
486 ' >$as_me.lineno &&
487 chmod +x "$as_me.lineno" ||
488 { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
489
490 # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
491 # already done that, so ensure we don't try to do so again and fall
492 # in an infinite loop. This has already happened in practice.
493 _as_can_reexec=no; export _as_can_reexec
494 # Don't try to exec as it changes $[0], causing all sort of problems
495 # (the dirname of $[0] is not the place where we might find the
496 # original and so on. Autoconf is especially sensitive to this).
497 . "./$as_me.lineno"
498 # Exit status is that of the last command.
499 exit
500}
501
502ECHO_C= ECHO_N= ECHO_T=
503case `echo -n x` in #(((((
504-n*)
505 case `echo 'xy\c'` in
506 *c*) ECHO_T=' ';; # ECHO_T is single tab character.
507 xy) ECHO_C='\c';;
508 *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
509 ECHO_T=' ';;
510 esac;;
511*)
512 ECHO_N='-n';;
513esac
514
515rm -f conf$$ conf$$.exe conf$$.file
516if test -d conf$$.dir; then
517 rm -f conf$$.dir/conf$$.file
518else
519 rm -f conf$$.dir
520 mkdir conf$$.dir 2>/dev/null
521fi
522if (echo >conf$$.file) 2>/dev/null; then
523 if ln -s conf$$.file conf$$ 2>/dev/null; then
524 as_ln_s='ln -s'
525 # ... but there are two gotchas:
526 # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
527 # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
528 # In both cases, we have to default to `cp -pR'.
529 ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
530 as_ln_s='cp -pR'
531 elif ln conf$$.file conf$$ 2>/dev/null; then
532 as_ln_s=ln
533 else
534 as_ln_s='cp -pR'
535 fi
536else
537 as_ln_s='cp -pR'
538fi
539rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
540rmdir conf$$.dir 2>/dev/null
541
542if mkdir -p . 2>/dev/null; then
543 as_mkdir_p='mkdir -p "$as_dir"'
544else
545 test -d ./-p && rmdir ./-p
546 as_mkdir_p=false
547fi
548
549as_test_x='test -x'
550as_executable_p=as_fn_executable_p
551
552# Sed expression to map a string onto a valid CPP name.
553as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
554
555# Sed expression to map a string onto a valid variable name.
556as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
557
558
559test -n "$DJDIR" || exec 7<&0 </dev/null
560exec 6>&1
561
562# Name of the host.
563# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
564# so uname gets run too.
565ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
566
567#
568# Initializations.
569#
570ac_default_prefix=/usr/local
571ac_clean_files=
572ac_config_libobj_dir=.
573LIBOBJS=
574cross_compiling=no
575subdirs=
576MFLAGS=
577MAKEFLAGS=
578
579# Identity of this package.
580PACKAGE_NAME='puzzles'
581PACKAGE_TARNAME='puzzles'
582PACKAGE_VERSION='6.66'
583PACKAGE_STRING='puzzles 6.66'
584PACKAGE_BUGREPORT='anakin@pobox.com'
585PACKAGE_URL=''
586
587ac_unique_file="midend.c"
588ac_subst_vars='am__EXEEXT_FALSE
589am__EXEEXT_TRUE
590LTLIBOBJS
591LIBOBJS
592RANLIB
593PKG_CONFIG_LIBDIR
594PKG_CONFIG_PATH
595GTK_LIBS
596GTK_CFLAGS
597PKG_CONFIG
598am__fastdepCC_FALSE
599am__fastdepCC_TRUE
600CCDEPMODE
601am__nodep
602AMDEPBACKSLASH
603AMDEP_FALSE
604AMDEP_TRUE
605am__quote
606am__include
607DEPDIR
608OBJEXT
609EXEEXT
610ac_ct_CC
611CPPFLAGS
612LDFLAGS
613CFLAGS
614CC
615AM_BACKSLASH
616AM_DEFAULT_VERBOSITY
617AM_DEFAULT_V
618AM_V
619am__untar
620am__tar
621AMTAR
622am__leading_dot
623SET_MAKE
624AWK
625mkdir_p
626MKDIR_P
627INSTALL_STRIP_PROGRAM
628STRIP
629install_sh
630MAKEINFO
631AUTOHEADER
632AUTOMAKE
633AUTOCONF
634ACLOCAL
635VERSION
636PACKAGE
637CYGPATH_W
638am__isrc
639INSTALL_DATA
640INSTALL_SCRIPT
641INSTALL_PROGRAM
642target_alias
643host_alias
644build_alias
645LIBS
646ECHO_T
647ECHO_N
648ECHO_C
649DEFS
650mandir
651localedir
652libdir
653psdir
654pdfdir
655dvidir
656htmldir
657infodir
658docdir
659oldincludedir
660includedir
661localstatedir
662sharedstatedir
663sysconfdir
664datadir
665datarootdir
666libexecdir
667sbindir
668bindir
669program_transform_name
670prefix
671exec_prefix
672PACKAGE_URL
673PACKAGE_BUGREPORT
674PACKAGE_STRING
675PACKAGE_VERSION
676PACKAGE_TARNAME
677PACKAGE_NAME
678PATH_SEPARATOR
679SHELL'
680ac_subst_files=''
681ac_user_opts='
682enable_option_checking
683enable_silent_rules
684enable_dependency_tracking
685with_gtk
686enable_gtktest
687'
688 ac_precious_vars='build_alias
689host_alias
690target_alias
691CC
692CFLAGS
693LDFLAGS
694LIBS
695CPPFLAGS
696PKG_CONFIG
697PKG_CONFIG_PATH
698PKG_CONFIG_LIBDIR'
699
700
701# Initialize some variables set by options.
702ac_init_help=
703ac_init_version=false
704ac_unrecognized_opts=
705ac_unrecognized_sep=
706# The variables have the same names as the options, with
707# dashes changed to underlines.
708cache_file=/dev/null
709exec_prefix=NONE
710no_create=
711no_recursion=
712prefix=NONE
713program_prefix=NONE
714program_suffix=NONE
715program_transform_name=s,x,x,
716silent=
717site=
718srcdir=
719verbose=
720x_includes=NONE
721x_libraries=NONE
722
723# Installation directory options.
724# These are left unexpanded so users can "make install exec_prefix=/foo"
725# and all the variables that are supposed to be based on exec_prefix
726# by default will actually change.
727# Use braces instead of parens because sh, perl, etc. also accept them.
728# (The list follows the same order as the GNU Coding Standards.)
729bindir='${exec_prefix}/bin'
730sbindir='${exec_prefix}/sbin'
731libexecdir='${exec_prefix}/libexec'
732datarootdir='${prefix}/share'
733datadir='${datarootdir}'
734sysconfdir='${prefix}/etc'
735sharedstatedir='${prefix}/com'
736localstatedir='${prefix}/var'
737includedir='${prefix}/include'
738oldincludedir='/usr/include'
739docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
740infodir='${datarootdir}/info'
741htmldir='${docdir}'
742dvidir='${docdir}'
743pdfdir='${docdir}'
744psdir='${docdir}'
745libdir='${exec_prefix}/lib'
746localedir='${datarootdir}/locale'
747mandir='${datarootdir}/man'
748
749ac_prev=
750ac_dashdash=
751for ac_option
752do
753 # If the previous option needs an argument, assign it.
754 if test -n "$ac_prev"; then
755 eval $ac_prev=\$ac_option
756 ac_prev=
757 continue
758 fi
759
760 case $ac_option in
761 *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
762 *=) ac_optarg= ;;
763 *) ac_optarg=yes ;;
764 esac
765
766 # Accept the important Cygnus configure options, so we can diagnose typos.
767
768 case $ac_dashdash$ac_option in
769 --)
770 ac_dashdash=yes ;;
771
772 -bindir | --bindir | --bindi | --bind | --bin | --bi)
773 ac_prev=bindir ;;
774 -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
775 bindir=$ac_optarg ;;
776
777 -build | --build | --buil | --bui | --bu)
778 ac_prev=build_alias ;;
779 -build=* | --build=* | --buil=* | --bui=* | --bu=*)
780 build_alias=$ac_optarg ;;
781
782 -cache-file | --cache-file | --cache-fil | --cache-fi \
783 | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
784 ac_prev=cache_file ;;
785 -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
786 | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
787 cache_file=$ac_optarg ;;
788
789 --config-cache | -C)
790 cache_file=config.cache ;;
791
792 -datadir | --datadir | --datadi | --datad)
793 ac_prev=datadir ;;
794 -datadir=* | --datadir=* | --datadi=* | --datad=*)
795 datadir=$ac_optarg ;;
796
797 -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
798 | --dataroo | --dataro | --datar)
799 ac_prev=datarootdir ;;
800 -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
801 | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
802 datarootdir=$ac_optarg ;;
803
804 -disable-* | --disable-*)
805 ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
806 # Reject names that are not valid shell variable names.
807 expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
808 as_fn_error $? "invalid feature name: $ac_useropt"
809 ac_useropt_orig=$ac_useropt
810 ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
811 case $ac_user_opts in
812 *"
813"enable_$ac_useropt"
814"*) ;;
815 *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
816 ac_unrecognized_sep=', ';;
817 esac
818 eval enable_$ac_useropt=no ;;
819
820 -docdir | --docdir | --docdi | --doc | --do)
821 ac_prev=docdir ;;
822 -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
823 docdir=$ac_optarg ;;
824
825 -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
826 ac_prev=dvidir ;;
827 -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
828 dvidir=$ac_optarg ;;
829
830 -enable-* | --enable-*)
831 ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
832 # Reject names that are not valid shell variable names.
833 expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
834 as_fn_error $? "invalid feature name: $ac_useropt"
835 ac_useropt_orig=$ac_useropt
836 ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
837 case $ac_user_opts in
838 *"
839"enable_$ac_useropt"
840"*) ;;
841 *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
842 ac_unrecognized_sep=', ';;
843 esac
844 eval enable_$ac_useropt=\$ac_optarg ;;
845
846 -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
847 | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
848 | --exec | --exe | --ex)
849 ac_prev=exec_prefix ;;
850 -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
851 | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
852 | --exec=* | --exe=* | --ex=*)
853 exec_prefix=$ac_optarg ;;
854
855 -gas | --gas | --ga | --g)
856 # Obsolete; use --with-gas.
857 with_gas=yes ;;
858
859 -help | --help | --hel | --he | -h)
860 ac_init_help=long ;;
861 -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
862 ac_init_help=recursive ;;
863 -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
864 ac_init_help=short ;;
865
866 -host | --host | --hos | --ho)
867 ac_prev=host_alias ;;
868 -host=* | --host=* | --hos=* | --ho=*)
869 host_alias=$ac_optarg ;;
870
871 -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
872 ac_prev=htmldir ;;
873 -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
874 | --ht=*)
875 htmldir=$ac_optarg ;;
876
877 -includedir | --includedir | --includedi | --included | --include \
878 | --includ | --inclu | --incl | --inc)
879 ac_prev=includedir ;;
880 -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
881 | --includ=* | --inclu=* | --incl=* | --inc=*)
882 includedir=$ac_optarg ;;
883
884 -infodir | --infodir | --infodi | --infod | --info | --inf)
885 ac_prev=infodir ;;
886 -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
887 infodir=$ac_optarg ;;
888
889 -libdir | --libdir | --libdi | --libd)
890 ac_prev=libdir ;;
891 -libdir=* | --libdir=* | --libdi=* | --libd=*)
892 libdir=$ac_optarg ;;
893
894 -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
895 | --libexe | --libex | --libe)
896 ac_prev=libexecdir ;;
897 -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
898 | --libexe=* | --libex=* | --libe=*)
899 libexecdir=$ac_optarg ;;
900
901 -localedir | --localedir | --localedi | --localed | --locale)
902 ac_prev=localedir ;;
903 -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
904 localedir=$ac_optarg ;;
905
906 -localstatedir | --localstatedir | --localstatedi | --localstated \
907 | --localstate | --localstat | --localsta | --localst | --locals)
908 ac_prev=localstatedir ;;
909 -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
910 | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
911 localstatedir=$ac_optarg ;;
912
913 -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
914 ac_prev=mandir ;;
915 -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
916 mandir=$ac_optarg ;;
917
918 -nfp | --nfp | --nf)
919 # Obsolete; use --without-fp.
920 with_fp=no ;;
921
922 -no-create | --no-create | --no-creat | --no-crea | --no-cre \
923 | --no-cr | --no-c | -n)
924 no_create=yes ;;
925
926 -no-recursion | --no-recursion | --no-recursio | --no-recursi \
927 | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
928 no_recursion=yes ;;
929
930 -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
931 | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
932 | --oldin | --oldi | --old | --ol | --o)
933 ac_prev=oldincludedir ;;
934 -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
935 | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
936 | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
937 oldincludedir=$ac_optarg ;;
938
939 -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
940 ac_prev=prefix ;;
941 -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
942 prefix=$ac_optarg ;;
943
944 -program-prefix | --program-prefix | --program-prefi | --program-pref \
945 | --program-pre | --program-pr | --program-p)
946 ac_prev=program_prefix ;;
947 -program-prefix=* | --program-prefix=* | --program-prefi=* \
948 | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
949 program_prefix=$ac_optarg ;;
950
951 -program-suffix | --program-suffix | --program-suffi | --program-suff \
952 | --program-suf | --program-su | --program-s)
953 ac_prev=program_suffix ;;
954 -program-suffix=* | --program-suffix=* | --program-suffi=* \
955 | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
956 program_suffix=$ac_optarg ;;
957
958 -program-transform-name | --program-transform-name \
959 | --program-transform-nam | --program-transform-na \
960 | --program-transform-n | --program-transform- \
961 | --program-transform | --program-transfor \
962 | --program-transfo | --program-transf \
963 | --program-trans | --program-tran \
964 | --progr-tra | --program-tr | --program-t)
965 ac_prev=program_transform_name ;;
966 -program-transform-name=* | --program-transform-name=* \
967 | --program-transform-nam=* | --program-transform-na=* \
968 | --program-transform-n=* | --program-transform-=* \
969 | --program-transform=* | --program-transfor=* \
970 | --program-transfo=* | --program-transf=* \
971 | --program-trans=* | --program-tran=* \
972 | --progr-tra=* | --program-tr=* | --program-t=*)
973 program_transform_name=$ac_optarg ;;
974
975 -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
976 ac_prev=pdfdir ;;
977 -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
978 pdfdir=$ac_optarg ;;
979
980 -psdir | --psdir | --psdi | --psd | --ps)
981 ac_prev=psdir ;;
982 -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
983 psdir=$ac_optarg ;;
984
985 -q | -quiet | --quiet | --quie | --qui | --qu | --q \
986 | -silent | --silent | --silen | --sile | --sil)
987 silent=yes ;;
988
989 -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
990 ac_prev=sbindir ;;
991 -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
992 | --sbi=* | --sb=*)
993 sbindir=$ac_optarg ;;
994
995 -sharedstatedir | --sharedstatedir | --sharedstatedi \
996 | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
997 | --sharedst | --shareds | --shared | --share | --shar \
998 | --sha | --sh)
999 ac_prev=sharedstatedir ;;
1000 -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
1001 | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
1002 | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
1003 | --sha=* | --sh=*)
1004 sharedstatedir=$ac_optarg ;;
1005
1006 -site | --site | --sit)
1007 ac_prev=site ;;
1008 -site=* | --site=* | --sit=*)
1009 site=$ac_optarg ;;
1010
1011 -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
1012 ac_prev=srcdir ;;
1013 -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
1014 srcdir=$ac_optarg ;;
1015
1016 -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
1017 | --syscon | --sysco | --sysc | --sys | --sy)
1018 ac_prev=sysconfdir ;;
1019 -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
1020 | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
1021 sysconfdir=$ac_optarg ;;
1022
1023 -target | --target | --targe | --targ | --tar | --ta | --t)
1024 ac_prev=target_alias ;;
1025 -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
1026 target_alias=$ac_optarg ;;
1027
1028 -v | -verbose | --verbose | --verbos | --verbo | --verb)
1029 verbose=yes ;;
1030
1031 -version | --version | --versio | --versi | --vers | -V)
1032 ac_init_version=: ;;
1033
1034 -with-* | --with-*)
1035 ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
1036 # Reject names that are not valid shell variable names.
1037 expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
1038 as_fn_error $? "invalid package name: $ac_useropt"
1039 ac_useropt_orig=$ac_useropt
1040 ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
1041 case $ac_user_opts in
1042 *"
1043"with_$ac_useropt"
1044"*) ;;
1045 *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
1046 ac_unrecognized_sep=', ';;
1047 esac
1048 eval with_$ac_useropt=\$ac_optarg ;;
1049
1050 -without-* | --without-*)
1051 ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
1052 # Reject names that are not valid shell variable names.
1053 expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
1054 as_fn_error $? "invalid package name: $ac_useropt"
1055 ac_useropt_orig=$ac_useropt
1056 ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
1057 case $ac_user_opts in
1058 *"
1059"with_$ac_useropt"
1060"*) ;;
1061 *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
1062 ac_unrecognized_sep=', ';;
1063 esac
1064 eval with_$ac_useropt=no ;;
1065
1066 --x)
1067 # Obsolete; use --with-x.
1068 with_x=yes ;;
1069
1070 -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
1071 | --x-incl | --x-inc | --x-in | --x-i)
1072 ac_prev=x_includes ;;
1073 -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
1074 | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
1075 x_includes=$ac_optarg ;;
1076
1077 -x-libraries | --x-libraries | --x-librarie | --x-librari \
1078 | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
1079 ac_prev=x_libraries ;;
1080 -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
1081 | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
1082 x_libraries=$ac_optarg ;;
1083
1084 -*) as_fn_error $? "unrecognized option: \`$ac_option'
1085Try \`$0 --help' for more information"
1086 ;;
1087
1088 *=*)
1089 ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
1090 # Reject names that are not valid shell variable names.
1091 case $ac_envvar in #(
1092 '' | [0-9]* | *[!_$as_cr_alnum]* )
1093 as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
1094 esac
1095 eval $ac_envvar=\$ac_optarg
1096 export $ac_envvar ;;
1097
1098 *)
1099 # FIXME: should be removed in autoconf 3.0.
1100 $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
1101 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
1102 $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
1103 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
1104 ;;
1105
1106 esac
1107done
1108
1109if test -n "$ac_prev"; then
1110 ac_option=--`echo $ac_prev | sed 's/_/-/g'`
1111 as_fn_error $? "missing argument to $ac_option"
1112fi
1113
1114if test -n "$ac_unrecognized_opts"; then
1115 case $enable_option_checking in
1116 no) ;;
1117 fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
1118 *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
1119 esac
1120fi
1121
1122# Check all directory arguments for consistency.
1123for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
1124 datadir sysconfdir sharedstatedir localstatedir includedir \
1125 oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
1126 libdir localedir mandir
1127do
1128 eval ac_val=\$$ac_var
1129 # Remove trailing slashes.
1130 case $ac_val in
1131 */ )
1132 ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
1133 eval $ac_var=\$ac_val;;
1134 esac
1135 # Be sure to have absolute directory names.
1136 case $ac_val in
1137 [\\/$]* | ?:[\\/]* ) continue;;
1138 NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
1139 esac
1140 as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
1141done
1142
1143# There might be people who depend on the old broken behavior: `$host'
1144# used to hold the argument of --host etc.
1145# FIXME: To remove some day.
1146build=$build_alias
1147host=$host_alias
1148target=$target_alias
1149
1150# FIXME: To remove some day.
1151if test "x$host_alias" != x; then
1152 if test "x$build_alias" = x; then
1153 cross_compiling=maybe
1154 elif test "x$build_alias" != "x$host_alias"; then
1155 cross_compiling=yes
1156 fi
1157fi
1158
1159ac_tool_prefix=
1160test -n "$host_alias" && ac_tool_prefix=$host_alias-
1161
1162test "$silent" = yes && exec 6>/dev/null
1163
1164
1165ac_pwd=`pwd` && test -n "$ac_pwd" &&
1166ac_ls_di=`ls -di .` &&
1167ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
1168 as_fn_error $? "working directory cannot be determined"
1169test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
1170 as_fn_error $? "pwd does not report name of working directory"
1171
1172
1173# Find the source files, if location was not specified.
1174if test -z "$srcdir"; then
1175 ac_srcdir_defaulted=yes
1176 # Try the directory containing this script, then the parent directory.
1177 ac_confdir=`$as_dirname -- "$as_myself" ||
1178$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
1179 X"$as_myself" : 'X\(//\)[^/]' \| \
1180 X"$as_myself" : 'X\(//\)$' \| \
1181 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
1182$as_echo X"$as_myself" |
1183 sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
1184 s//\1/
1185 q
1186 }
1187 /^X\(\/\/\)[^/].*/{
1188 s//\1/
1189 q
1190 }
1191 /^X\(\/\/\)$/{
1192 s//\1/
1193 q
1194 }
1195 /^X\(\/\).*/{
1196 s//\1/
1197 q
1198 }
1199 s/.*/./; q'`
1200 srcdir=$ac_confdir
1201 if test ! -r "$srcdir/$ac_unique_file"; then
1202 srcdir=..
1203 fi
1204else
1205 ac_srcdir_defaulted=no
1206fi
1207if test ! -r "$srcdir/$ac_unique_file"; then
1208 test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
1209 as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
1210fi
1211ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
1212ac_abs_confdir=`(
1213 cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
1214 pwd)`
1215# When building in place, set srcdir=.
1216if test "$ac_abs_confdir" = "$ac_pwd"; then
1217 srcdir=.
1218fi
1219# Remove unnecessary trailing slashes from srcdir.
1220# Double slashes in file names in object file debugging info
1221# mess up M-x gdb in Emacs.
1222case $srcdir in
1223*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
1224esac
1225for ac_var in $ac_precious_vars; do
1226 eval ac_env_${ac_var}_set=\${${ac_var}+set}
1227 eval ac_env_${ac_var}_value=\$${ac_var}
1228 eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
1229 eval ac_cv_env_${ac_var}_value=\$${ac_var}
1230done
1231
1232#
1233# Report the --help message.
1234#
1235if test "$ac_init_help" = "long"; then
1236 # Omit some internal or obsolete options to make the list less imposing.
1237 # This message is too long to be a string in the A/UX 3.1 sh.
1238 cat <<_ACEOF
1239\`configure' configures puzzles 6.66 to adapt to many kinds of systems.
1240
1241Usage: $0 [OPTION]... [VAR=VALUE]...
1242
1243To assign environment variables (e.g., CC, CFLAGS...), specify them as
1244VAR=VALUE. See below for descriptions of some of the useful variables.
1245
1246Defaults for the options are specified in brackets.
1247
1248Configuration:
1249 -h, --help display this help and exit
1250 --help=short display options specific to this package
1251 --help=recursive display the short help of all the included packages
1252 -V, --version display version information and exit
1253 -q, --quiet, --silent do not print \`checking ...' messages
1254 --cache-file=FILE cache test results in FILE [disabled]
1255 -C, --config-cache alias for \`--cache-file=config.cache'
1256 -n, --no-create do not create output files
1257 --srcdir=DIR find the sources in DIR [configure dir or \`..']
1258
1259Installation directories:
1260 --prefix=PREFIX install architecture-independent files in PREFIX
1261 [$ac_default_prefix]
1262 --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
1263 [PREFIX]
1264
1265By default, \`make install' will install all the files in
1266\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
1267an installation prefix other than \`$ac_default_prefix' using \`--prefix',
1268for instance \`--prefix=\$HOME'.
1269
1270For better control, use the options below.
1271
1272Fine tuning of the installation directories:
1273 --bindir=DIR user executables [EPREFIX/bin]
1274 --sbindir=DIR system admin executables [EPREFIX/sbin]
1275 --libexecdir=DIR program executables [EPREFIX/libexec]
1276 --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
1277 --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
1278 --localstatedir=DIR modifiable single-machine data [PREFIX/var]
1279 --libdir=DIR object code libraries [EPREFIX/lib]
1280 --includedir=DIR C header files [PREFIX/include]
1281 --oldincludedir=DIR C header files for non-gcc [/usr/include]
1282 --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
1283 --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
1284 --infodir=DIR info documentation [DATAROOTDIR/info]
1285 --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
1286 --mandir=DIR man documentation [DATAROOTDIR/man]
1287 --docdir=DIR documentation root [DATAROOTDIR/doc/puzzles]
1288 --htmldir=DIR html documentation [DOCDIR]
1289 --dvidir=DIR dvi documentation [DOCDIR]
1290 --pdfdir=DIR pdf documentation [DOCDIR]
1291 --psdir=DIR ps documentation [DOCDIR]
1292_ACEOF
1293
1294 cat <<\_ACEOF
1295
1296Program names:
1297 --program-prefix=PREFIX prepend PREFIX to installed program names
1298 --program-suffix=SUFFIX append SUFFIX to installed program names
1299 --program-transform-name=PROGRAM run sed PROGRAM on installed program names
1300_ACEOF
1301fi
1302
1303if test -n "$ac_init_help"; then
1304 case $ac_init_help in
1305 short | recursive ) echo "Configuration of puzzles 6.66:";;
1306 esac
1307 cat <<\_ACEOF
1308
1309Optional Features:
1310 --disable-option-checking ignore unrecognized --enable/--with options
1311 --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
1312 --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
1313 --enable-silent-rules less verbose build output (undo: "make V=1")
1314 --disable-silent-rules verbose build output (undo: "make V=0")
1315 --enable-dependency-tracking
1316 do not reject slow dependency extractors
1317 --disable-dependency-tracking
1318 speeds up one-time build
1319 --disable-gtktest do not try to compile and run a test GTK+ program
1320
1321Optional Packages:
1322 --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
1323 --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
1324 --with-gtk=VER specify GTK version to use (`2' or `3')
1325
1326Some influential environment variables:
1327 CC C compiler command
1328 CFLAGS C compiler flags
1329 LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
1330 nonstandard directory <lib dir>
1331 LIBS libraries to pass to the linker, e.g. -l<library>
1332 CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
1333 you have headers in a nonstandard directory <include dir>
1334 PKG_CONFIG path to pkg-config utility
1335 PKG_CONFIG_PATH
1336 directories to add to pkg-config's search path
1337 PKG_CONFIG_LIBDIR
1338 path overriding pkg-config's built-in search path
1339
1340Use these variables to override the choices made by `configure' or to help
1341it to find libraries and programs with nonstandard names/locations.
1342
1343Report bugs to <anakin@pobox.com>.
1344_ACEOF
1345ac_status=$?
1346fi
1347
1348if test "$ac_init_help" = "recursive"; then
1349 # If there are subdirs, report their specific --help.
1350 for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
1351 test -d "$ac_dir" ||
1352 { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
1353 continue
1354 ac_builddir=.
1355
1356case "$ac_dir" in
1357.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
1358*)
1359 ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
1360 # A ".." for each directory in $ac_dir_suffix.
1361 ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
1362 case $ac_top_builddir_sub in
1363 "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
1364 *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
1365 esac ;;
1366esac
1367ac_abs_top_builddir=$ac_pwd
1368ac_abs_builddir=$ac_pwd$ac_dir_suffix
1369# for backward compatibility:
1370ac_top_builddir=$ac_top_build_prefix
1371
1372case $srcdir in
1373 .) # We are building in place.
1374 ac_srcdir=.
1375 ac_top_srcdir=$ac_top_builddir_sub
1376 ac_abs_top_srcdir=$ac_pwd ;;
1377 [\\/]* | ?:[\\/]* ) # Absolute name.
1378 ac_srcdir=$srcdir$ac_dir_suffix;
1379 ac_top_srcdir=$srcdir
1380 ac_abs_top_srcdir=$srcdir ;;
1381 *) # Relative name.
1382 ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
1383 ac_top_srcdir=$ac_top_build_prefix$srcdir
1384 ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
1385esac
1386ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
1387
1388 cd "$ac_dir" || { ac_status=$?; continue; }
1389 # Check for guested configure.
1390 if test -f "$ac_srcdir/configure.gnu"; then
1391 echo &&
1392 $SHELL "$ac_srcdir/configure.gnu" --help=recursive
1393 elif test -f "$ac_srcdir/configure"; then
1394 echo &&
1395 $SHELL "$ac_srcdir/configure" --help=recursive
1396 else
1397 $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
1398 fi || ac_status=$?
1399 cd "$ac_pwd" || { ac_status=$?; break; }
1400 done
1401fi
1402
1403test -n "$ac_init_help" && exit $ac_status
1404if $ac_init_version; then
1405 cat <<\_ACEOF
1406puzzles configure 6.66
1407generated by GNU Autoconf 2.69
1408
1409Copyright (C) 2012 Free Software Foundation, Inc.
1410This configure script is free software; the Free Software Foundation
1411gives unlimited permission to copy, distribute and modify it.
1412_ACEOF
1413 exit
1414fi
1415
1416## ------------------------ ##
1417## Autoconf initialization. ##
1418## ------------------------ ##
1419
1420# ac_fn_c_try_compile LINENO
1421# --------------------------
1422# Try to compile conftest.$ac_ext, and return whether this succeeded.
1423ac_fn_c_try_compile ()
1424{
1425 as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
1426 rm -f conftest.$ac_objext
1427 if { { ac_try="$ac_compile"
1428case "(($ac_try" in
1429 *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
1430 *) ac_try_echo=$ac_try;;
1431esac
1432eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
1433$as_echo "$ac_try_echo"; } >&5
1434 (eval "$ac_compile") 2>conftest.err
1435 ac_status=$?
1436 if test -s conftest.err; then
1437 grep -v '^ *+' conftest.err >conftest.er1
1438 cat conftest.er1 >&5
1439 mv -f conftest.er1 conftest.err
1440 fi
1441 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
1442 test $ac_status = 0; } && {
1443 test -z "$ac_c_werror_flag" ||
1444 test ! -s conftest.err
1445 } && test -s conftest.$ac_objext; then :
1446 ac_retval=0
1447else
1448 $as_echo "$as_me: failed program was:" >&5
1449sed 's/^/| /' conftest.$ac_ext >&5
1450
1451 ac_retval=1
1452fi
1453 eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
1454 as_fn_set_status $ac_retval
1455
1456} # ac_fn_c_try_compile
1457
1458# ac_fn_c_try_run LINENO
1459# ----------------------
1460# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
1461# that executables *can* be run.
1462ac_fn_c_try_run ()
1463{
1464 as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
1465 if { { ac_try="$ac_link"
1466case "(($ac_try" in
1467 *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
1468 *) ac_try_echo=$ac_try;;
1469esac
1470eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
1471$as_echo "$ac_try_echo"; } >&5
1472 (eval "$ac_link") 2>&5
1473 ac_status=$?
1474 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
1475 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
1476 { { case "(($ac_try" in
1477 *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
1478 *) ac_try_echo=$ac_try;;
1479esac
1480eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
1481$as_echo "$ac_try_echo"; } >&5
1482 (eval "$ac_try") 2>&5
1483 ac_status=$?
1484 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
1485 test $ac_status = 0; }; }; then :
1486 ac_retval=0
1487else
1488 $as_echo "$as_me: program exited with status $ac_status" >&5
1489 $as_echo "$as_me: failed program was:" >&5
1490sed 's/^/| /' conftest.$ac_ext >&5
1491
1492 ac_retval=$ac_status
1493fi
1494 rm -rf conftest.dSYM conftest_ipa8_conftest.oo
1495 eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
1496 as_fn_set_status $ac_retval
1497
1498} # ac_fn_c_try_run
1499
1500# ac_fn_c_try_link LINENO
1501# -----------------------
1502# Try to link conftest.$ac_ext, and return whether this succeeded.
1503ac_fn_c_try_link ()
1504{
1505 as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
1506 rm -f conftest.$ac_objext conftest$ac_exeext
1507 if { { ac_try="$ac_link"
1508case "(($ac_try" in
1509 *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
1510 *) ac_try_echo=$ac_try;;
1511esac
1512eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
1513$as_echo "$ac_try_echo"; } >&5
1514 (eval "$ac_link") 2>conftest.err
1515 ac_status=$?
1516 if test -s conftest.err; then
1517 grep -v '^ *+' conftest.err >conftest.er1
1518 cat conftest.er1 >&5
1519 mv -f conftest.er1 conftest.err
1520 fi
1521 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
1522 test $ac_status = 0; } && {
1523 test -z "$ac_c_werror_flag" ||
1524 test ! -s conftest.err
1525 } && test -s conftest$ac_exeext && {
1526 test "$cross_compiling" = yes ||
1527 test -x conftest$ac_exeext
1528 }; then :
1529 ac_retval=0
1530else
1531 $as_echo "$as_me: failed program was:" >&5
1532sed 's/^/| /' conftest.$ac_ext >&5
1533
1534 ac_retval=1
1535fi
1536 # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
1537 # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
1538 # interfere with the next link command; also delete a directory that is
1539 # left behind by Apple's compiler. We do this before executing the actions.
1540 rm -rf conftest.dSYM conftest_ipa8_conftest.oo
1541 eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
1542 as_fn_set_status $ac_retval
1543
1544} # ac_fn_c_try_link
1545cat >config.log <<_ACEOF
1546This file contains any messages produced by compilers while
1547running configure, to aid debugging if configure makes a mistake.
1548
1549It was created by puzzles $as_me 6.66, which was
1550generated by GNU Autoconf 2.69. Invocation command line was
1551
1552 $ $0 $@
1553
1554_ACEOF
1555exec 5>>config.log
1556{
1557cat <<_ASUNAME
1558## --------- ##
1559## Platform. ##
1560## --------- ##
1561
1562hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
1563uname -m = `(uname -m) 2>/dev/null || echo unknown`
1564uname -r = `(uname -r) 2>/dev/null || echo unknown`
1565uname -s = `(uname -s) 2>/dev/null || echo unknown`
1566uname -v = `(uname -v) 2>/dev/null || echo unknown`
1567
1568/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
1569/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
1570
1571/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
1572/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
1573/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
1574/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
1575/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
1576/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
1577/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
1578
1579_ASUNAME
1580
1581as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
1582for as_dir in $PATH
1583do
1584 IFS=$as_save_IFS
1585 test -z "$as_dir" && as_dir=.
1586 $as_echo "PATH: $as_dir"
1587 done
1588IFS=$as_save_IFS
1589
1590} >&5
1591
1592cat >&5 <<_ACEOF
1593
1594
1595## ----------- ##
1596## Core tests. ##
1597## ----------- ##
1598
1599_ACEOF
1600
1601
1602# Keep a trace of the command line.
1603# Strip out --no-create and --no-recursion so they do not pile up.
1604# Strip out --silent because we don't want to record it for future runs.
1605# Also quote any args containing shell meta-characters.
1606# Make two passes to allow for proper duplicate-argument suppression.
1607ac_configure_args=
1608ac_configure_args0=
1609ac_configure_args1=
1610ac_must_keep_next=false
1611for ac_pass in 1 2
1612do
1613 for ac_arg
1614 do
1615 case $ac_arg in
1616 -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
1617 -q | -quiet | --quiet | --quie | --qui | --qu | --q \
1618 | -silent | --silent | --silen | --sile | --sil)
1619 continue ;;
1620 *\'*)
1621 ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
1622 esac
1623 case $ac_pass in
1624 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
1625 2)
1626 as_fn_append ac_configure_args1 " '$ac_arg'"
1627 if test $ac_must_keep_next = true; then
1628 ac_must_keep_next=false # Got value, back to normal.
1629 else
1630 case $ac_arg in
1631 *=* | --config-cache | -C | -disable-* | --disable-* \
1632 | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
1633 | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
1634 | -with-* | --with-* | -without-* | --without-* | --x)
1635 case "$ac_configure_args0 " in
1636 "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
1637 esac
1638 ;;
1639 -* ) ac_must_keep_next=true ;;
1640 esac
1641 fi
1642 as_fn_append ac_configure_args " '$ac_arg'"
1643 ;;
1644 esac
1645 done
1646done
1647{ ac_configure_args0=; unset ac_configure_args0;}
1648{ ac_configure_args1=; unset ac_configure_args1;}
1649
1650# When interrupted or exit'd, cleanup temporary files, and complete
1651# config.log. We remove comments because anyway the quotes in there
1652# would cause problems or look ugly.
1653# WARNING: Use '\'' to represent an apostrophe within the trap.
1654# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
1655trap 'exit_status=$?
1656 # Save into config.log some information that might help in debugging.
1657 {
1658 echo
1659
1660 $as_echo "## ---------------- ##
1661## Cache variables. ##
1662## ---------------- ##"
1663 echo
1664 # The following way of writing the cache mishandles newlines in values,
1665(
1666 for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
1667 eval ac_val=\$$ac_var
1668 case $ac_val in #(
1669 *${as_nl}*)
1670 case $ac_var in #(
1671 *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
1672$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
1673 esac
1674 case $ac_var in #(
1675 _ | IFS | as_nl) ;; #(
1676 BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
1677 *) { eval $ac_var=; unset $ac_var;} ;;
1678 esac ;;
1679 esac
1680 done
1681 (set) 2>&1 |
1682 case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
1683 *${as_nl}ac_space=\ *)
1684 sed -n \
1685 "s/'\''/'\''\\\\'\'''\''/g;
1686 s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
1687 ;; #(
1688 *)
1689 sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
1690 ;;
1691 esac |
1692 sort
1693)
1694 echo
1695
1696 $as_echo "## ----------------- ##
1697## Output variables. ##
1698## ----------------- ##"
1699 echo
1700 for ac_var in $ac_subst_vars
1701 do
1702 eval ac_val=\$$ac_var
1703 case $ac_val in
1704 *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
1705 esac
1706 $as_echo "$ac_var='\''$ac_val'\''"
1707 done | sort
1708 echo
1709
1710 if test -n "$ac_subst_files"; then
1711 $as_echo "## ------------------- ##
1712## File substitutions. ##
1713## ------------------- ##"
1714 echo
1715 for ac_var in $ac_subst_files
1716 do
1717 eval ac_val=\$$ac_var
1718 case $ac_val in
1719 *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
1720 esac
1721 $as_echo "$ac_var='\''$ac_val'\''"
1722 done | sort
1723 echo
1724 fi
1725
1726 if test -s confdefs.h; then
1727 $as_echo "## ----------- ##
1728## confdefs.h. ##
1729## ----------- ##"
1730 echo
1731 cat confdefs.h
1732 echo
1733 fi
1734 test "$ac_signal" != 0 &&
1735 $as_echo "$as_me: caught signal $ac_signal"
1736 $as_echo "$as_me: exit $exit_status"
1737 } >&5
1738 rm -f core *.core core.conftest.* &&
1739 rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
1740 exit $exit_status
1741' 0
1742for ac_signal in 1 2 13 15; do
1743 trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
1744done
1745ac_signal=0
1746
1747# confdefs.h avoids OS command line length limits that DEFS can exceed.
1748rm -f -r conftest* confdefs.h
1749
1750$as_echo "/* confdefs.h */" > confdefs.h
1751
1752# Predefined preprocessor variables.
1753
1754cat >>confdefs.h <<_ACEOF
1755#define PACKAGE_NAME "$PACKAGE_NAME"
1756_ACEOF
1757
1758cat >>confdefs.h <<_ACEOF
1759#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
1760_ACEOF
1761
1762cat >>confdefs.h <<_ACEOF
1763#define PACKAGE_VERSION "$PACKAGE_VERSION"
1764_ACEOF
1765
1766cat >>confdefs.h <<_ACEOF
1767#define PACKAGE_STRING "$PACKAGE_STRING"
1768_ACEOF
1769
1770cat >>confdefs.h <<_ACEOF
1771#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
1772_ACEOF
1773
1774cat >>confdefs.h <<_ACEOF
1775#define PACKAGE_URL "$PACKAGE_URL"
1776_ACEOF
1777
1778
1779# Let the site file select an alternate cache file if it wants to.
1780# Prefer an explicitly selected file to automatically selected ones.
1781ac_site_file1=NONE
1782ac_site_file2=NONE
1783if test -n "$CONFIG_SITE"; then
1784 # We do not want a PATH search for config.site.
1785 case $CONFIG_SITE in #((
1786 -*) ac_site_file1=./$CONFIG_SITE;;
1787 */*) ac_site_file1=$CONFIG_SITE;;
1788 *) ac_site_file1=./$CONFIG_SITE;;
1789 esac
1790elif test "x$prefix" != xNONE; then
1791 ac_site_file1=$prefix/share/config.site
1792 ac_site_file2=$prefix/etc/config.site
1793else
1794 ac_site_file1=$ac_default_prefix/share/config.site
1795 ac_site_file2=$ac_default_prefix/etc/config.site
1796fi
1797for ac_site_file in "$ac_site_file1" "$ac_site_file2"
1798do
1799 test "x$ac_site_file" = xNONE && continue
1800 if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
1801 { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
1802$as_echo "$as_me: loading site script $ac_site_file" >&6;}
1803 sed 's/^/| /' "$ac_site_file" >&5
1804 . "$ac_site_file" \
1805 || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
1806$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
1807as_fn_error $? "failed to load site script $ac_site_file
1808See \`config.log' for more details" "$LINENO" 5; }
1809 fi
1810done
1811
1812if test -r "$cache_file"; then
1813 # Some versions of bash will fail to source /dev/null (special files
1814 # actually), so we avoid doing that. DJGPP emulates it as a regular file.
1815 if test /dev/null != "$cache_file" && test -f "$cache_file"; then
1816 { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
1817$as_echo "$as_me: loading cache $cache_file" >&6;}
1818 case $cache_file in
1819 [\\/]* | ?:[\\/]* ) . "$cache_file";;
1820 *) . "./$cache_file";;
1821 esac
1822 fi
1823else
1824 { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
1825$as_echo "$as_me: creating cache $cache_file" >&6;}
1826 >$cache_file
1827fi
1828
1829# Check that the precious variables saved in the cache have kept the same
1830# value.
1831ac_cache_corrupted=false
1832for ac_var in $ac_precious_vars; do
1833 eval ac_old_set=\$ac_cv_env_${ac_var}_set
1834 eval ac_new_set=\$ac_env_${ac_var}_set
1835 eval ac_old_val=\$ac_cv_env_${ac_var}_value
1836 eval ac_new_val=\$ac_env_${ac_var}_value
1837 case $ac_old_set,$ac_new_set in
1838 set,)
1839 { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
1840$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
1841 ac_cache_corrupted=: ;;
1842 ,set)
1843 { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
1844$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
1845 ac_cache_corrupted=: ;;
1846 ,);;
1847 *)
1848 if test "x$ac_old_val" != "x$ac_new_val"; then
1849 # differences in whitespace do not lead to failure.
1850 ac_old_val_w=`echo x $ac_old_val`
1851 ac_new_val_w=`echo x $ac_new_val`
1852 if test "$ac_old_val_w" != "$ac_new_val_w"; then
1853 { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
1854$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
1855 ac_cache_corrupted=:
1856 else
1857 { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
1858$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
1859 eval $ac_var=\$ac_old_val
1860 fi
1861 { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
1862$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
1863 { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
1864$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
1865 fi;;
1866 esac
1867 # Pass precious variables to config.status.
1868 if test "$ac_new_set" = set; then
1869 case $ac_new_val in
1870 *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
1871 *) ac_arg=$ac_var=$ac_new_val ;;
1872 esac
1873 case " $ac_configure_args " in
1874 *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
1875 *) as_fn_append ac_configure_args " '$ac_arg'" ;;
1876 esac
1877 fi
1878done
1879if $ac_cache_corrupted; then
1880 { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
1881$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
1882 { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
1883$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
1884 as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
1885fi
1886## -------------------- ##
1887## Main body of script. ##
1888## -------------------- ##
1889
1890ac_ext=c
1891ac_cpp='$CPP $CPPFLAGS'
1892ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
1893ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
1894ac_compiler_gnu=$ac_cv_c_compiler_gnu
1895
1896
1897
1898am__api_version='1.15'
1899
1900ac_aux_dir=
1901for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
1902 if test -f "$ac_dir/install-sh"; then
1903 ac_aux_dir=$ac_dir
1904 ac_install_sh="$ac_aux_dir/install-sh -c"
1905 break
1906 elif test -f "$ac_dir/install.sh"; then
1907 ac_aux_dir=$ac_dir
1908 ac_install_sh="$ac_aux_dir/install.sh -c"
1909 break
1910 elif test -f "$ac_dir/shtool"; then
1911 ac_aux_dir=$ac_dir
1912 ac_install_sh="$ac_aux_dir/shtool install -c"
1913 break
1914 fi
1915done
1916if test -z "$ac_aux_dir"; then
1917 as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
1918fi
1919
1920# These three variables are undocumented and unsupported,
1921# and are intended to be withdrawn in a future Autoconf release.
1922# They can cause serious problems if a builder's source tree is in a directory
1923# whose full name contains unusual characters.
1924ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
1925ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
1926ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
1927
1928
1929# Find a good install program. We prefer a C program (faster),
1930# so one script is as good as another. But avoid the broken or
1931# incompatible versions:
1932# SysV /etc/install, /usr/sbin/install
1933# SunOS /usr/etc/install
1934# IRIX /sbin/install
1935# AIX /bin/install
1936# AmigaOS /C/install, which installs bootblocks on floppy discs
1937# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
1938# AFS /usr/afsws/bin/install, which mishandles nonexistent args
1939# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
1940# OS/2's system install, which has a completely different semantic
1941# ./install, which can be erroneously created by make from ./install.sh.
1942# Reject install programs that cannot install multiple files.
1943{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
1944$as_echo_n "checking for a BSD-compatible install... " >&6; }
1945if test -z "$INSTALL"; then
1946if ${ac_cv_path_install+:} false; then :
1947 $as_echo_n "(cached) " >&6
1948else
1949 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
1950for as_dir in $PATH
1951do
1952 IFS=$as_save_IFS
1953 test -z "$as_dir" && as_dir=.
1954 # Account for people who put trailing slashes in PATH elements.
1955case $as_dir/ in #((
1956 ./ | .// | /[cC]/* | \
1957 /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
1958 ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
1959 /usr/ucb/* ) ;;
1960 *)
1961 # OSF1 and SCO ODT 3.0 have their own names for install.
1962 # Don't use installbsd from OSF since it installs stuff as root
1963 # by default.
1964 for ac_prog in ginstall scoinst install; do
1965 for ac_exec_ext in '' $ac_executable_extensions; do
1966 if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
1967 if test $ac_prog = install &&
1968 grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
1969 # AIX install. It has an incompatible calling convention.
1970 :
1971 elif test $ac_prog = install &&
1972 grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
1973 # program-specific install script used by HP pwplus--don't use.
1974 :
1975 else
1976 rm -rf conftest.one conftest.two conftest.dir
1977 echo one > conftest.one
1978 echo two > conftest.two
1979 mkdir conftest.dir
1980 if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
1981 test -s conftest.one && test -s conftest.two &&
1982 test -s conftest.dir/conftest.one &&
1983 test -s conftest.dir/conftest.two
1984 then
1985 ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
1986 break 3
1987 fi
1988 fi
1989 fi
1990 done
1991 done
1992 ;;
1993esac
1994
1995 done
1996IFS=$as_save_IFS
1997
1998rm -rf conftest.one conftest.two conftest.dir
1999
2000fi
2001 if test "${ac_cv_path_install+set}" = set; then
2002 INSTALL=$ac_cv_path_install
2003 else
2004 # As a last resort, use the slow shell script. Don't cache a
2005 # value for INSTALL within a source directory, because that will
2006 # break other packages using the cache if that directory is
2007 # removed, or if the value is a relative name.
2008 INSTALL=$ac_install_sh
2009 fi
2010fi
2011{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
2012$as_echo "$INSTALL" >&6; }
2013
2014# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
2015# It thinks the first close brace ends the variable substitution.
2016test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
2017
2018test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
2019
2020test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
2021
2022{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
2023$as_echo_n "checking whether build environment is sane... " >&6; }
2024# Reject unsafe characters in $srcdir or the absolute working directory
2025# name. Accept space and tab only in the latter.
2026am_lf='
2027'
2028case `pwd` in
2029 *[\\\"\#\$\&\'\`$am_lf]*)
2030 as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
2031esac
2032case $srcdir in
2033 *[\\\"\#\$\&\'\`$am_lf\ \ ]*)
2034 as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
2035esac
2036
2037# Do 'set' in a subshell so we don't clobber the current shell's
2038# arguments. Must try -L first in case configure is actually a
2039# symlink; some systems play weird games with the mod time of symlinks
2040# (eg FreeBSD returns the mod time of the symlink's containing
2041# directory).
2042if (
2043 am_has_slept=no
2044 for am_try in 1 2; do
2045 echo "timestamp, slept: $am_has_slept" > conftest.file
2046 set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
2047 if test "$*" = "X"; then
2048 # -L didn't work.
2049 set X `ls -t "$srcdir/configure" conftest.file`
2050 fi
2051 if test "$*" != "X $srcdir/configure conftest.file" \
2052 && test "$*" != "X conftest.file $srcdir/configure"; then
2053
2054 # If neither matched, then we have a broken ls. This can happen
2055 # if, for instance, CONFIG_SHELL is bash and it inherits a
2056 # broken ls alias from the environment. This has actually
2057 # happened. Such a system could not be considered "sane".
2058 as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
2059 alias in your environment" "$LINENO" 5
2060 fi
2061 if test "$2" = conftest.file || test $am_try -eq 2; then
2062 break
2063 fi
2064 # Just in case.
2065 sleep 1
2066 am_has_slept=yes
2067 done
2068 test "$2" = conftest.file
2069 )
2070then
2071 # Ok.
2072 :
2073else
2074 as_fn_error $? "newly created file is older than distributed files!
2075Check your system clock" "$LINENO" 5
2076fi
2077{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
2078$as_echo "yes" >&6; }
2079# If we didn't sleep, we still need to ensure time stamps of config.status and
2080# generated files are strictly newer.
2081am_sleep_pid=
2082if grep 'slept: no' conftest.file >/dev/null 2>&1; then
2083 ( sleep 1 ) &
2084 am_sleep_pid=$!
2085fi
2086
2087rm -f conftest.file
2088
2089test "$program_prefix" != NONE &&
2090 program_transform_name="s&^&$program_prefix&;$program_transform_name"
2091# Use a double $ so make ignores it.
2092test "$program_suffix" != NONE &&
2093 program_transform_name="s&\$&$program_suffix&;$program_transform_name"
2094# Double any \ or $.
2095# By default was `s,x,x', remove it if useless.
2096ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
2097program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
2098
2099# Expand $ac_aux_dir to an absolute path.
2100am_aux_dir=`cd "$ac_aux_dir" && pwd`
2101
2102if test x"${MISSING+set}" != xset; then
2103 case $am_aux_dir in
2104 *\ * | *\ *)
2105 MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
2106 *)
2107 MISSING="\${SHELL} $am_aux_dir/missing" ;;
2108 esac
2109fi
2110# Use eval to expand $SHELL
2111if eval "$MISSING --is-lightweight"; then
2112 am_missing_run="$MISSING "
2113else
2114 am_missing_run=
2115 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
2116$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
2117fi
2118
2119if test x"${install_sh+set}" != xset; then
2120 case $am_aux_dir in
2121 *\ * | *\ *)
2122 install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
2123 *)
2124 install_sh="\${SHELL} $am_aux_dir/install-sh"
2125 esac
2126fi
2127
2128# Installed binaries are usually stripped using 'strip' when the user
2129# run "make install-strip". However 'strip' might not be the right
2130# tool to use in cross-compilation environments, therefore Automake
2131# will honor the 'STRIP' environment variable to overrule this program.
2132if test "$cross_compiling" != no; then
2133 if test -n "$ac_tool_prefix"; then
2134 # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
2135set dummy ${ac_tool_prefix}strip; ac_word=$2
2136{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
2137$as_echo_n "checking for $ac_word... " >&6; }
2138if ${ac_cv_prog_STRIP+:} false; then :
2139 $as_echo_n "(cached) " >&6
2140else
2141 if test -n "$STRIP"; then
2142 ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
2143else
2144as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
2145for as_dir in $PATH
2146do
2147 IFS=$as_save_IFS
2148 test -z "$as_dir" && as_dir=.
2149 for ac_exec_ext in '' $ac_executable_extensions; do
2150 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
2151 ac_cv_prog_STRIP="${ac_tool_prefix}strip"
2152 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
2153 break 2
2154 fi
2155done
2156 done
2157IFS=$as_save_IFS
2158
2159fi
2160fi
2161STRIP=$ac_cv_prog_STRIP
2162if test -n "$STRIP"; then
2163 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
2164$as_echo "$STRIP" >&6; }
2165else
2166 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
2167$as_echo "no" >&6; }
2168fi
2169
2170
2171fi
2172if test -z "$ac_cv_prog_STRIP"; then
2173 ac_ct_STRIP=$STRIP
2174 # Extract the first word of "strip", so it can be a program name with args.
2175set dummy strip; ac_word=$2
2176{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
2177$as_echo_n "checking for $ac_word... " >&6; }
2178if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
2179 $as_echo_n "(cached) " >&6
2180else
2181 if test -n "$ac_ct_STRIP"; then
2182 ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
2183else
2184as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
2185for as_dir in $PATH
2186do
2187 IFS=$as_save_IFS
2188 test -z "$as_dir" && as_dir=.
2189 for ac_exec_ext in '' $ac_executable_extensions; do
2190 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
2191 ac_cv_prog_ac_ct_STRIP="strip"
2192 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
2193 break 2
2194 fi
2195done
2196 done
2197IFS=$as_save_IFS
2198
2199fi
2200fi
2201ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
2202if test -n "$ac_ct_STRIP"; then
2203 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
2204$as_echo "$ac_ct_STRIP" >&6; }
2205else
2206 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
2207$as_echo "no" >&6; }
2208fi
2209
2210 if test "x$ac_ct_STRIP" = x; then
2211 STRIP=":"
2212 else
2213 case $cross_compiling:$ac_tool_warned in
2214yes:)
2215{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
2216$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
2217ac_tool_warned=yes ;;
2218esac
2219 STRIP=$ac_ct_STRIP
2220 fi
2221else
2222 STRIP="$ac_cv_prog_STRIP"
2223fi
2224
2225fi
2226INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
2227
2228{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
2229$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
2230if test -z "$MKDIR_P"; then
2231 if ${ac_cv_path_mkdir+:} false; then :
2232 $as_echo_n "(cached) " >&6
2233else
2234 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
2235for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
2236do
2237 IFS=$as_save_IFS
2238 test -z "$as_dir" && as_dir=.
2239 for ac_prog in mkdir gmkdir; do
2240 for ac_exec_ext in '' $ac_executable_extensions; do
2241 as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
2242 case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
2243 'mkdir (GNU coreutils) '* | \
2244 'mkdir (coreutils) '* | \
2245 'mkdir (fileutils) '4.1*)
2246 ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
2247 break 3;;
2248 esac
2249 done
2250 done
2251 done
2252IFS=$as_save_IFS
2253
2254fi
2255
2256 test -d ./--version && rmdir ./--version
2257 if test "${ac_cv_path_mkdir+set}" = set; then
2258 MKDIR_P="$ac_cv_path_mkdir -p"
2259 else
2260 # As a last resort, use the slow shell script. Don't cache a
2261 # value for MKDIR_P within a source directory, because that will
2262 # break other packages using the cache if that directory is
2263 # removed, or if the value is a relative name.
2264 MKDIR_P="$ac_install_sh -d"
2265 fi
2266fi
2267{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
2268$as_echo "$MKDIR_P" >&6; }
2269
2270for ac_prog in gawk mawk nawk awk
2271do
2272 # Extract the first word of "$ac_prog", so it can be a program name with args.
2273set dummy $ac_prog; ac_word=$2
2274{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
2275$as_echo_n "checking for $ac_word... " >&6; }
2276if ${ac_cv_prog_AWK+:} false; then :
2277 $as_echo_n "(cached) " >&6
2278else
2279 if test -n "$AWK"; then
2280 ac_cv_prog_AWK="$AWK" # Let the user override the test.
2281else
2282as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
2283for as_dir in $PATH
2284do
2285 IFS=$as_save_IFS
2286 test -z "$as_dir" && as_dir=.
2287 for ac_exec_ext in '' $ac_executable_extensions; do
2288 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
2289 ac_cv_prog_AWK="$ac_prog"
2290 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
2291 break 2
2292 fi
2293done
2294 done
2295IFS=$as_save_IFS
2296
2297fi
2298fi
2299AWK=$ac_cv_prog_AWK
2300if test -n "$AWK"; then
2301 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
2302$as_echo "$AWK" >&6; }
2303else
2304 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
2305$as_echo "no" >&6; }
2306fi
2307
2308
2309 test -n "$AWK" && break
2310done
2311
2312{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
2313$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
2314set x ${MAKE-make}
2315ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
2316if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
2317 $as_echo_n "(cached) " >&6
2318else
2319 cat >conftest.make <<\_ACEOF
2320SHELL = /bin/sh
2321all:
2322 @echo '@@@%%%=$(MAKE)=@@@%%%'
2323_ACEOF
2324# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
2325case `${MAKE-make} -f conftest.make 2>/dev/null` in
2326 *@@@%%%=?*=@@@%%%*)
2327 eval ac_cv_prog_make_${ac_make}_set=yes;;
2328 *)
2329 eval ac_cv_prog_make_${ac_make}_set=no;;
2330esac
2331rm -f conftest.make
2332fi
2333if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
2334 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
2335$as_echo "yes" >&6; }
2336 SET_MAKE=
2337else
2338 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
2339$as_echo "no" >&6; }
2340 SET_MAKE="MAKE=${MAKE-make}"
2341fi
2342
2343rm -rf .tst 2>/dev/null
2344mkdir .tst 2>/dev/null
2345if test -d .tst; then
2346 am__leading_dot=.
2347else
2348 am__leading_dot=_
2349fi
2350rmdir .tst 2>/dev/null
2351
2352# Check whether --enable-silent-rules was given.
2353if test "${enable_silent_rules+set}" = set; then :
2354 enableval=$enable_silent_rules;
2355fi
2356
2357case $enable_silent_rules in # (((
2358 yes) AM_DEFAULT_VERBOSITY=0;;
2359 no) AM_DEFAULT_VERBOSITY=1;;
2360 *) AM_DEFAULT_VERBOSITY=1;;
2361esac
2362am_make=${MAKE-make}
2363{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
2364$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
2365if ${am_cv_make_support_nested_variables+:} false; then :
2366 $as_echo_n "(cached) " >&6
2367else
2368 if $as_echo 'TRUE=$(BAR$(V))
2369BAR0=false
2370BAR1=true
2371V=1
2372am__doit:
2373 @$(TRUE)
2374.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
2375 am_cv_make_support_nested_variables=yes
2376else
2377 am_cv_make_support_nested_variables=no
2378fi
2379fi
2380{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
2381$as_echo "$am_cv_make_support_nested_variables" >&6; }
2382if test $am_cv_make_support_nested_variables = yes; then
2383 AM_V='$(V)'
2384 AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
2385else
2386 AM_V=$AM_DEFAULT_VERBOSITY
2387 AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
2388fi
2389AM_BACKSLASH='\'
2390
2391if test "`cd $srcdir && pwd`" != "`pwd`"; then
2392 # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
2393 # is not polluted with repeated "-I."
2394 am__isrc=' -I$(srcdir)'
2395 # test to see if srcdir already configured
2396 if test -f $srcdir/config.status; then
2397 as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
2398 fi
2399fi
2400
2401# test whether we have cygpath
2402if test -z "$CYGPATH_W"; then
2403 if (cygpath --version) >/dev/null 2>/dev/null; then
2404 CYGPATH_W='cygpath -w'
2405 else
2406 CYGPATH_W=echo
2407 fi
2408fi
2409
2410
2411# Define the identity of the package.
2412 PACKAGE='puzzles'
2413 VERSION='6.66'
2414
2415
2416cat >>confdefs.h <<_ACEOF
2417#define PACKAGE "$PACKAGE"
2418_ACEOF
2419
2420
2421cat >>confdefs.h <<_ACEOF
2422#define VERSION "$VERSION"
2423_ACEOF
2424
2425# Some tools Automake needs.
2426
2427ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
2428
2429
2430AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
2431
2432
2433AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
2434
2435
2436AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
2437
2438
2439MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
2440
2441# For better backward compatibility. To be removed once Automake 1.9.x
2442# dies out for good. For more background, see:
2443# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
2444# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
2445mkdir_p='$(MKDIR_P)'
2446
2447# We need awk for the "check" target (and possibly the TAP driver). The
2448# system "awk" is bad on some platforms.
2449# Always define AMTAR for backward compatibility. Yes, it's still used
2450# in the wild :-( We should find a proper way to deprecate it ...
2451AMTAR='$${TAR-tar}'
2452
2453
2454# We'll loop over all known methods to create a tar archive until one works.
2455_am_tools='gnutar pax cpio none'
2456
2457am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
2458
2459
2460
2461
2462
2463
2464# POSIX will say in a future version that running "rm -f" with no argument
2465# is OK; and we want to be able to make that assumption in our Makefile
2466# recipes. So use an aggressive probe to check that the usage we want is
2467# actually supported "in the wild" to an acceptable degree.
2468# See automake bug#10828.
2469# To make any issue more visible, cause the running configure to be aborted
2470# by default if the 'rm' program in use doesn't match our expectations; the
2471# user can still override this though.
2472if rm -f && rm -fr && rm -rf; then : OK; else
2473 cat >&2 <<'END'
2474Oops!
2475
2476Your 'rm' program seems unable to run without file operands specified
2477on the command line, even when the '-f' option is present. This is contrary
2478to the behaviour of most rm programs out there, and not conforming with
2479the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
2480
2481Please tell bug-automake@gnu.org about your system, including the value
2482of your $PATH and any error possibly output before this message. This
2483can help us improve future automake versions.
2484
2485END
2486 if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
2487 echo 'Configuration will proceed anyway, since you have set the' >&2
2488 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
2489 echo >&2
2490 else
2491 cat >&2 <<'END'
2492Aborting the configuration process, to ensure you take notice of the issue.
2493
2494You can download and install GNU coreutils to get an 'rm' implementation
2495that behaves properly: <http://www.gnu.org/software/coreutils/>.
2496
2497If you want to complete the configuration process using your problematic
2498'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
2499to "yes", and re-run configure.
2500
2501END
2502 as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
2503 fi
2504fi
2505
2506ac_ext=c
2507ac_cpp='$CPP $CPPFLAGS'
2508ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
2509ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
2510ac_compiler_gnu=$ac_cv_c_compiler_gnu
2511if test -n "$ac_tool_prefix"; then
2512 # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
2513set dummy ${ac_tool_prefix}gcc; ac_word=$2
2514{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
2515$as_echo_n "checking for $ac_word... " >&6; }
2516if ${ac_cv_prog_CC+:} false; then :
2517 $as_echo_n "(cached) " >&6
2518else
2519 if test -n "$CC"; then
2520 ac_cv_prog_CC="$CC" # Let the user override the test.
2521else
2522as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
2523for as_dir in $PATH
2524do
2525 IFS=$as_save_IFS
2526 test -z "$as_dir" && as_dir=.
2527 for ac_exec_ext in '' $ac_executable_extensions; do
2528 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
2529 ac_cv_prog_CC="${ac_tool_prefix}gcc"
2530 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
2531 break 2
2532 fi
2533done
2534 done
2535IFS=$as_save_IFS
2536
2537fi
2538fi
2539CC=$ac_cv_prog_CC
2540if test -n "$CC"; then
2541 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
2542$as_echo "$CC" >&6; }
2543else
2544 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
2545$as_echo "no" >&6; }
2546fi
2547
2548
2549fi
2550if test -z "$ac_cv_prog_CC"; then
2551 ac_ct_CC=$CC
2552 # Extract the first word of "gcc", so it can be a program name with args.
2553set dummy gcc; ac_word=$2
2554{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
2555$as_echo_n "checking for $ac_word... " >&6; }
2556if ${ac_cv_prog_ac_ct_CC+:} false; then :
2557 $as_echo_n "(cached) " >&6
2558else
2559 if test -n "$ac_ct_CC"; then
2560 ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
2561else
2562as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
2563for as_dir in $PATH
2564do
2565 IFS=$as_save_IFS
2566 test -z "$as_dir" && as_dir=.
2567 for ac_exec_ext in '' $ac_executable_extensions; do
2568 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
2569 ac_cv_prog_ac_ct_CC="gcc"
2570 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
2571 break 2
2572 fi
2573done
2574 done
2575IFS=$as_save_IFS
2576
2577fi
2578fi
2579ac_ct_CC=$ac_cv_prog_ac_ct_CC
2580if test -n "$ac_ct_CC"; then
2581 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
2582$as_echo "$ac_ct_CC" >&6; }
2583else
2584 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
2585$as_echo "no" >&6; }
2586fi
2587
2588 if test "x$ac_ct_CC" = x; then
2589 CC=""
2590 else
2591 case $cross_compiling:$ac_tool_warned in
2592yes:)
2593{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
2594$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
2595ac_tool_warned=yes ;;
2596esac
2597 CC=$ac_ct_CC
2598 fi
2599else
2600 CC="$ac_cv_prog_CC"
2601fi
2602
2603if test -z "$CC"; then
2604 if test -n "$ac_tool_prefix"; then
2605 # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
2606set dummy ${ac_tool_prefix}cc; ac_word=$2
2607{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
2608$as_echo_n "checking for $ac_word... " >&6; }
2609if ${ac_cv_prog_CC+:} false; then :
2610 $as_echo_n "(cached) " >&6
2611else
2612 if test -n "$CC"; then
2613 ac_cv_prog_CC="$CC" # Let the user override the test.
2614else
2615as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
2616for as_dir in $PATH
2617do
2618 IFS=$as_save_IFS
2619 test -z "$as_dir" && as_dir=.
2620 for ac_exec_ext in '' $ac_executable_extensions; do
2621 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
2622 ac_cv_prog_CC="${ac_tool_prefix}cc"
2623 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
2624 break 2
2625 fi
2626done
2627 done
2628IFS=$as_save_IFS
2629
2630fi
2631fi
2632CC=$ac_cv_prog_CC
2633if test -n "$CC"; then
2634 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
2635$as_echo "$CC" >&6; }
2636else
2637 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
2638$as_echo "no" >&6; }
2639fi
2640
2641
2642 fi
2643fi
2644if test -z "$CC"; then
2645 # Extract the first word of "cc", so it can be a program name with args.
2646set dummy cc; ac_word=$2
2647{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
2648$as_echo_n "checking for $ac_word... " >&6; }
2649if ${ac_cv_prog_CC+:} false; then :
2650 $as_echo_n "(cached) " >&6
2651else
2652 if test -n "$CC"; then
2653 ac_cv_prog_CC="$CC" # Let the user override the test.
2654else
2655 ac_prog_rejected=no
2656as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
2657for as_dir in $PATH
2658do
2659 IFS=$as_save_IFS
2660 test -z "$as_dir" && as_dir=.
2661 for ac_exec_ext in '' $ac_executable_extensions; do
2662 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
2663 if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
2664 ac_prog_rejected=yes
2665 continue
2666 fi
2667 ac_cv_prog_CC="cc"
2668 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
2669 break 2
2670 fi
2671done
2672 done
2673IFS=$as_save_IFS
2674
2675if test $ac_prog_rejected = yes; then
2676 # We found a bogon in the path, so make sure we never use it.
2677 set dummy $ac_cv_prog_CC
2678 shift
2679 if test $# != 0; then
2680 # We chose a different compiler from the bogus one.
2681 # However, it has the same basename, so the bogon will be chosen
2682 # first if we set CC to just the basename; use the full file name.
2683 shift
2684 ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
2685 fi
2686fi
2687fi
2688fi
2689CC=$ac_cv_prog_CC
2690if test -n "$CC"; then
2691 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
2692$as_echo "$CC" >&6; }
2693else
2694 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
2695$as_echo "no" >&6; }
2696fi
2697
2698
2699fi
2700if test -z "$CC"; then
2701 if test -n "$ac_tool_prefix"; then
2702 for ac_prog in cl.exe
2703 do
2704 # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
2705set dummy $ac_tool_prefix$ac_prog; ac_word=$2
2706{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
2707$as_echo_n "checking for $ac_word... " >&6; }
2708if ${ac_cv_prog_CC+:} false; then :
2709 $as_echo_n "(cached) " >&6
2710else
2711 if test -n "$CC"; then
2712 ac_cv_prog_CC="$CC" # Let the user override the test.
2713else
2714as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
2715for as_dir in $PATH
2716do
2717 IFS=$as_save_IFS
2718 test -z "$as_dir" && as_dir=.
2719 for ac_exec_ext in '' $ac_executable_extensions; do
2720 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
2721 ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
2722 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
2723 break 2
2724 fi
2725done
2726 done
2727IFS=$as_save_IFS
2728
2729fi
2730fi
2731CC=$ac_cv_prog_CC
2732if test -n "$CC"; then
2733 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
2734$as_echo "$CC" >&6; }
2735else
2736 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
2737$as_echo "no" >&6; }
2738fi
2739
2740
2741 test -n "$CC" && break
2742 done
2743fi
2744if test -z "$CC"; then
2745 ac_ct_CC=$CC
2746 for ac_prog in cl.exe
2747do
2748 # Extract the first word of "$ac_prog", so it can be a program name with args.
2749set dummy $ac_prog; ac_word=$2
2750{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
2751$as_echo_n "checking for $ac_word... " >&6; }
2752if ${ac_cv_prog_ac_ct_CC+:} false; then :
2753 $as_echo_n "(cached) " >&6
2754else
2755 if test -n "$ac_ct_CC"; then
2756 ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
2757else
2758as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
2759for as_dir in $PATH
2760do
2761 IFS=$as_save_IFS
2762 test -z "$as_dir" && as_dir=.
2763 for ac_exec_ext in '' $ac_executable_extensions; do
2764 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
2765 ac_cv_prog_ac_ct_CC="$ac_prog"
2766 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
2767 break 2
2768 fi
2769done
2770 done
2771IFS=$as_save_IFS
2772
2773fi
2774fi
2775ac_ct_CC=$ac_cv_prog_ac_ct_CC
2776if test -n "$ac_ct_CC"; then
2777 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
2778$as_echo "$ac_ct_CC" >&6; }
2779else
2780 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
2781$as_echo "no" >&6; }
2782fi
2783
2784
2785 test -n "$ac_ct_CC" && break
2786done
2787
2788 if test "x$ac_ct_CC" = x; then
2789 CC=""
2790 else
2791 case $cross_compiling:$ac_tool_warned in
2792yes:)
2793{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
2794$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
2795ac_tool_warned=yes ;;
2796esac
2797 CC=$ac_ct_CC
2798 fi
2799fi
2800
2801fi
2802
2803
2804test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
2805$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
2806as_fn_error $? "no acceptable C compiler found in \$PATH
2807See \`config.log' for more details" "$LINENO" 5; }
2808
2809# Provide some information about the compiler.
2810$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
2811set X $ac_compile
2812ac_compiler=$2
2813for ac_option in --version -v -V -qversion; do
2814 { { ac_try="$ac_compiler $ac_option >&5"
2815case "(($ac_try" in
2816 *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
2817 *) ac_try_echo=$ac_try;;
2818esac
2819eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
2820$as_echo "$ac_try_echo"; } >&5
2821 (eval "$ac_compiler $ac_option >&5") 2>conftest.err
2822 ac_status=$?
2823 if test -s conftest.err; then
2824 sed '10a\
2825... rest of stderr output deleted ...
2826 10q' conftest.err >conftest.er1
2827 cat conftest.er1 >&5
2828 fi
2829 rm -f conftest.er1 conftest.err
2830 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
2831 test $ac_status = 0; }
2832done
2833
2834cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2835/* end confdefs.h. */
2836
2837int
2838main ()
2839{
2840
2841 ;
2842 return 0;
2843}
2844_ACEOF
2845ac_clean_files_save=$ac_clean_files
2846ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
2847# Try to create an executable without -o first, disregard a.out.
2848# It will help us diagnose broken compilers, and finding out an intuition
2849# of exeext.
2850{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
2851$as_echo_n "checking whether the C compiler works... " >&6; }
2852ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
2853
2854# The possible output files:
2855ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
2856
2857ac_rmfiles=
2858for ac_file in $ac_files
2859do
2860 case $ac_file in
2861 *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
2862 * ) ac_rmfiles="$ac_rmfiles $ac_file";;
2863 esac
2864done
2865rm -f $ac_rmfiles
2866
2867if { { ac_try="$ac_link_default"
2868case "(($ac_try" in
2869 *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
2870 *) ac_try_echo=$ac_try;;
2871esac
2872eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
2873$as_echo "$ac_try_echo"; } >&5
2874 (eval "$ac_link_default") 2>&5
2875 ac_status=$?
2876 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
2877 test $ac_status = 0; }; then :
2878 # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
2879# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
2880# in a Makefile. We should not override ac_cv_exeext if it was cached,
2881# so that the user can short-circuit this test for compilers unknown to
2882# Autoconf.
2883for ac_file in $ac_files ''
2884do
2885 test -f "$ac_file" || continue
2886 case $ac_file in
2887 *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
2888 ;;
2889 [ab].out )
2890 # We found the default executable, but exeext='' is most
2891 # certainly right.
2892 break;;
2893 *.* )
2894 if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
2895 then :; else
2896 ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
2897 fi
2898 # We set ac_cv_exeext here because the later test for it is not
2899 # safe: cross compilers may not add the suffix if given an `-o'
2900 # argument, so we may need to know it at that point already.
2901 # Even if this section looks crufty: it has the advantage of
2902 # actually working.
2903 break;;
2904 * )
2905 break;;
2906 esac
2907done
2908test "$ac_cv_exeext" = no && ac_cv_exeext=
2909
2910else
2911 ac_file=''
2912fi
2913if test -z "$ac_file"; then :
2914 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
2915$as_echo "no" >&6; }
2916$as_echo "$as_me: failed program was:" >&5
2917sed 's/^/| /' conftest.$ac_ext >&5
2918
2919{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
2920$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
2921as_fn_error 77 "C compiler cannot create executables
2922See \`config.log' for more details" "$LINENO" 5; }
2923else
2924 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
2925$as_echo "yes" >&6; }
2926fi
2927{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
2928$as_echo_n "checking for C compiler default output file name... " >&6; }
2929{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
2930$as_echo "$ac_file" >&6; }
2931ac_exeext=$ac_cv_exeext
2932
2933rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
2934ac_clean_files=$ac_clean_files_save
2935{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
2936$as_echo_n "checking for suffix of executables... " >&6; }
2937if { { ac_try="$ac_link"
2938case "(($ac_try" in
2939 *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
2940 *) ac_try_echo=$ac_try;;
2941esac
2942eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
2943$as_echo "$ac_try_echo"; } >&5
2944 (eval "$ac_link") 2>&5
2945 ac_status=$?
2946 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
2947 test $ac_status = 0; }; then :
2948 # If both `conftest.exe' and `conftest' are `present' (well, observable)
2949# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
2950# work properly (i.e., refer to `conftest.exe'), while it won't with
2951# `rm'.
2952for ac_file in conftest.exe conftest conftest.*; do
2953 test -f "$ac_file" || continue
2954 case $ac_file in
2955 *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
2956 *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
2957 break;;
2958 * ) break;;
2959 esac
2960done
2961else
2962 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
2963$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
2964as_fn_error $? "cannot compute suffix of executables: cannot compile and link
2965See \`config.log' for more details" "$LINENO" 5; }
2966fi
2967rm -f conftest conftest$ac_cv_exeext
2968{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
2969$as_echo "$ac_cv_exeext" >&6; }
2970
2971rm -f conftest.$ac_ext
2972EXEEXT=$ac_cv_exeext
2973ac_exeext=$EXEEXT
2974cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2975/* end confdefs.h. */
2976#include <stdio.h>
2977int
2978main ()
2979{
2980FILE *f = fopen ("conftest.out", "w");
2981 return ferror (f) || fclose (f) != 0;
2982
2983 ;
2984 return 0;
2985}
2986_ACEOF
2987ac_clean_files="$ac_clean_files conftest.out"
2988# Check that the compiler produces executables we can run. If not, either
2989# the compiler is broken, or we cross compile.
2990{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
2991$as_echo_n "checking whether we are cross compiling... " >&6; }
2992if test "$cross_compiling" != yes; then
2993 { { ac_try="$ac_link"
2994case "(($ac_try" in
2995 *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
2996 *) ac_try_echo=$ac_try;;
2997esac
2998eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
2999$as_echo "$ac_try_echo"; } >&5
3000 (eval "$ac_link") 2>&5
3001 ac_status=$?
3002 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
3003 test $ac_status = 0; }
3004 if { ac_try='./conftest$ac_cv_exeext'
3005 { { case "(($ac_try" in
3006 *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
3007 *) ac_try_echo=$ac_try;;
3008esac
3009eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
3010$as_echo "$ac_try_echo"; } >&5
3011 (eval "$ac_try") 2>&5
3012 ac_status=$?
3013 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
3014 test $ac_status = 0; }; }; then
3015 cross_compiling=no
3016 else
3017 if test "$cross_compiling" = maybe; then
3018 cross_compiling=yes
3019 else
3020 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
3021$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
3022as_fn_error $? "cannot run C compiled programs.
3023If you meant to cross compile, use \`--host'.
3024See \`config.log' for more details" "$LINENO" 5; }
3025 fi
3026 fi
3027fi
3028{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
3029$as_echo "$cross_compiling" >&6; }
3030
3031rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
3032ac_clean_files=$ac_clean_files_save
3033{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
3034$as_echo_n "checking for suffix of object files... " >&6; }
3035if ${ac_cv_objext+:} false; then :
3036 $as_echo_n "(cached) " >&6
3037else
3038 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
3039/* end confdefs.h. */
3040
3041int
3042main ()
3043{
3044
3045 ;
3046 return 0;
3047}
3048_ACEOF
3049rm -f conftest.o conftest.obj
3050if { { ac_try="$ac_compile"
3051case "(($ac_try" in
3052 *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
3053 *) ac_try_echo=$ac_try;;
3054esac
3055eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
3056$as_echo "$ac_try_echo"; } >&5
3057 (eval "$ac_compile") 2>&5
3058 ac_status=$?
3059 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
3060 test $ac_status = 0; }; then :
3061 for ac_file in conftest.o conftest.obj conftest.*; do
3062 test -f "$ac_file" || continue;
3063 case $ac_file in
3064 *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
3065 *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
3066 break;;
3067 esac
3068done
3069else
3070 $as_echo "$as_me: failed program was:" >&5
3071sed 's/^/| /' conftest.$ac_ext >&5
3072
3073{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
3074$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
3075as_fn_error $? "cannot compute suffix of object files: cannot compile
3076See \`config.log' for more details" "$LINENO" 5; }
3077fi
3078rm -f conftest.$ac_cv_objext conftest.$ac_ext
3079fi
3080{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
3081$as_echo "$ac_cv_objext" >&6; }
3082OBJEXT=$ac_cv_objext
3083ac_objext=$OBJEXT
3084{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
3085$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
3086if ${ac_cv_c_compiler_gnu+:} false; then :
3087 $as_echo_n "(cached) " >&6
3088else
3089 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
3090/* end confdefs.h. */
3091
3092int
3093main ()
3094{
3095#ifndef __GNUC__
3096 choke me
3097#endif
3098
3099 ;
3100 return 0;
3101}
3102_ACEOF
3103if ac_fn_c_try_compile "$LINENO"; then :
3104 ac_compiler_gnu=yes
3105else
3106 ac_compiler_gnu=no
3107fi
3108rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
3109ac_cv_c_compiler_gnu=$ac_compiler_gnu
3110
3111fi
3112{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
3113$as_echo "$ac_cv_c_compiler_gnu" >&6; }
3114if test $ac_compiler_gnu = yes; then
3115 GCC=yes
3116else
3117 GCC=
3118fi
3119ac_test_CFLAGS=${CFLAGS+set}
3120ac_save_CFLAGS=$CFLAGS
3121{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
3122$as_echo_n "checking whether $CC accepts -g... " >&6; }
3123if ${ac_cv_prog_cc_g+:} false; then :
3124 $as_echo_n "(cached) " >&6
3125else
3126 ac_save_c_werror_flag=$ac_c_werror_flag
3127 ac_c_werror_flag=yes
3128 ac_cv_prog_cc_g=no
3129 CFLAGS="-g"
3130 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
3131/* end confdefs.h. */
3132
3133int
3134main ()
3135{
3136
3137 ;
3138 return 0;
3139}
3140_ACEOF
3141if ac_fn_c_try_compile "$LINENO"; then :
3142 ac_cv_prog_cc_g=yes
3143else
3144 CFLAGS=""
3145 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
3146/* end confdefs.h. */
3147
3148int
3149main ()
3150{
3151
3152 ;
3153 return 0;
3154}
3155_ACEOF
3156if ac_fn_c_try_compile "$LINENO"; then :
3157
3158else
3159 ac_c_werror_flag=$ac_save_c_werror_flag
3160 CFLAGS="-g"
3161 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
3162/* end confdefs.h. */
3163
3164int
3165main ()
3166{
3167
3168 ;
3169 return 0;
3170}
3171_ACEOF
3172if ac_fn_c_try_compile "$LINENO"; then :
3173 ac_cv_prog_cc_g=yes
3174fi
3175rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
3176fi
3177rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
3178fi
3179rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
3180 ac_c_werror_flag=$ac_save_c_werror_flag
3181fi
3182{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
3183$as_echo "$ac_cv_prog_cc_g" >&6; }
3184if test "$ac_test_CFLAGS" = set; then
3185 CFLAGS=$ac_save_CFLAGS
3186elif test $ac_cv_prog_cc_g = yes; then
3187 if test "$GCC" = yes; then
3188 CFLAGS="-g -O2"
3189 else
3190 CFLAGS="-g"
3191 fi
3192else
3193 if test "$GCC" = yes; then
3194 CFLAGS="-O2"
3195 else
3196 CFLAGS=
3197 fi
3198fi
3199{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
3200$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
3201if ${ac_cv_prog_cc_c89+:} false; then :
3202 $as_echo_n "(cached) " >&6
3203else
3204 ac_cv_prog_cc_c89=no
3205ac_save_CC=$CC
3206cat confdefs.h - <<_ACEOF >conftest.$ac_ext
3207/* end confdefs.h. */
3208#include <stdarg.h>
3209#include <stdio.h>
3210struct stat;
3211/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
3212struct buf { int x; };
3213FILE * (*rcsopen) (struct buf *, struct stat *, int);
3214static char *e (p, i)
3215 char **p;
3216 int i;
3217{
3218 return p[i];
3219}
3220static char *f (char * (*g) (char **, int), char **p, ...)
3221{
3222 char *s;
3223 va_list v;
3224 va_start (v,p);
3225 s = g (p, va_arg (v,int));
3226 va_end (v);
3227 return s;
3228}
3229
3230/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
3231 function prototypes and stuff, but not '\xHH' hex character constants.
3232 These don't provoke an error unfortunately, instead are silently treated
3233 as 'x'. The following induces an error, until -std is added to get
3234 proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
3235 array size at least. It's necessary to write '\x00'==0 to get something
3236 that's true only with -std. */
3237int osf4_cc_array ['\x00' == 0 ? 1 : -1];
3238
3239/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
3240 inside strings and character constants. */
3241#define FOO(x) 'x'
3242int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
3243
3244int test (int i, double x);
3245struct s1 {int (*f) (int a);};
3246struct s2 {int (*f) (double a);};
3247int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
3248int argc;
3249char **argv;
3250int
3251main ()
3252{
3253return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
3254 ;
3255 return 0;
3256}
3257_ACEOF
3258for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
3259 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
3260do
3261 CC="$ac_save_CC $ac_arg"
3262 if ac_fn_c_try_compile "$LINENO"; then :
3263 ac_cv_prog_cc_c89=$ac_arg
3264fi
3265rm -f core conftest.err conftest.$ac_objext
3266 test "x$ac_cv_prog_cc_c89" != "xno" && break
3267done
3268rm -f conftest.$ac_ext
3269CC=$ac_save_CC
3270
3271fi
3272# AC_CACHE_VAL
3273case "x$ac_cv_prog_cc_c89" in
3274 x)
3275 { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
3276$as_echo "none needed" >&6; } ;;
3277 xno)
3278 { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
3279$as_echo "unsupported" >&6; } ;;
3280 *)
3281 CC="$CC $ac_cv_prog_cc_c89"
3282 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
3283$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
3284esac
3285if test "x$ac_cv_prog_cc_c89" != xno; then :
3286
3287fi
3288
3289ac_ext=c
3290ac_cpp='$CPP $CPPFLAGS'
3291ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
3292ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
3293ac_compiler_gnu=$ac_cv_c_compiler_gnu
3294
3295ac_ext=c
3296ac_cpp='$CPP $CPPFLAGS'
3297ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
3298ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
3299ac_compiler_gnu=$ac_cv_c_compiler_gnu
3300{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
3301$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
3302if ${am_cv_prog_cc_c_o+:} false; then :
3303 $as_echo_n "(cached) " >&6
3304else
3305 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
3306/* end confdefs.h. */
3307
3308int
3309main ()
3310{
3311
3312 ;
3313 return 0;
3314}
3315_ACEOF
3316 # Make sure it works both with $CC and with simple cc.
3317 # Following AC_PROG_CC_C_O, we do the test twice because some
3318 # compilers refuse to overwrite an existing .o file with -o,
3319 # though they will create one.
3320 am_cv_prog_cc_c_o=yes
3321 for am_i in 1 2; do
3322 if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
3323 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
3324 ac_status=$?
3325 echo "$as_me:$LINENO: \$? = $ac_status" >&5
3326 (exit $ac_status); } \
3327 && test -f conftest2.$ac_objext; then
3328 : OK
3329 else
3330 am_cv_prog_cc_c_o=no
3331 break
3332 fi
3333 done
3334 rm -f core conftest*
3335 unset am_i
3336fi
3337{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
3338$as_echo "$am_cv_prog_cc_c_o" >&6; }
3339if test "$am_cv_prog_cc_c_o" != yes; then
3340 # Losing compiler, so override with the script.
3341 # FIXME: It is wrong to rewrite CC.
3342 # But if we don't then we get into trouble of one sort or another.
3343 # A longer-term fix would be to have automake use am__CC in this case,
3344 # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
3345 CC="$am_aux_dir/compile $CC"
3346fi
3347ac_ext=c
3348ac_cpp='$CPP $CPPFLAGS'
3349ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
3350ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
3351ac_compiler_gnu=$ac_cv_c_compiler_gnu
3352
3353DEPDIR="${am__leading_dot}deps"
3354
3355ac_config_commands="$ac_config_commands depfiles"
3356
3357
3358am_make=${MAKE-make}
3359cat > confinc << 'END'
3360am__doit:
3361 @echo this is the am__doit target
3362.PHONY: am__doit
3363END
3364# If we don't find an include directive, just comment out the code.
3365{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
3366$as_echo_n "checking for style of include used by $am_make... " >&6; }
3367am__include="#"
3368am__quote=
3369_am_result=none
3370# First try GNU make style include.
3371echo "include confinc" > confmf
3372# Ignore all kinds of additional output from 'make'.
3373case `$am_make -s -f confmf 2> /dev/null` in #(
3374*the\ am__doit\ target*)
3375 am__include=include
3376 am__quote=
3377 _am_result=GNU
3378 ;;
3379esac
3380# Now try BSD make style include.
3381if test "$am__include" = "#"; then
3382 echo '.include "confinc"' > confmf
3383 case `$am_make -s -f confmf 2> /dev/null` in #(
3384 *the\ am__doit\ target*)
3385 am__include=.include
3386 am__quote="\""
3387 _am_result=BSD
3388 ;;
3389 esac
3390fi
3391
3392
3393{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
3394$as_echo "$_am_result" >&6; }
3395rm -f confinc confmf
3396
3397# Check whether --enable-dependency-tracking was given.
3398if test "${enable_dependency_tracking+set}" = set; then :
3399 enableval=$enable_dependency_tracking;
3400fi
3401
3402if test "x$enable_dependency_tracking" != xno; then
3403 am_depcomp="$ac_aux_dir/depcomp"
3404 AMDEPBACKSLASH='\'
3405 am__nodep='_no'
3406fi
3407 if test "x$enable_dependency_tracking" != xno; then
3408 AMDEP_TRUE=
3409 AMDEP_FALSE='#'
3410else
3411 AMDEP_TRUE='#'
3412 AMDEP_FALSE=
3413fi
3414
3415
3416
3417depcc="$CC" am_compiler_list=
3418
3419{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
3420$as_echo_n "checking dependency style of $depcc... " >&6; }
3421if ${am_cv_CC_dependencies_compiler_type+:} false; then :
3422 $as_echo_n "(cached) " >&6
3423else
3424 if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
3425 # We make a subdir and do the tests there. Otherwise we can end up
3426 # making bogus files that we don't know about and never remove. For
3427 # instance it was reported that on HP-UX the gcc test will end up
3428 # making a dummy file named 'D' -- because '-MD' means "put the output
3429 # in D".
3430 rm -rf conftest.dir
3431 mkdir conftest.dir
3432 # Copy depcomp to subdir because otherwise we won't find it if we're
3433 # using a relative directory.
3434 cp "$am_depcomp" conftest.dir
3435 cd conftest.dir
3436 # We will build objects and dependencies in a subdirectory because
3437 # it helps to detect inapplicable dependency modes. For instance
3438 # both Tru64's cc and ICC support -MD to output dependencies as a
3439 # side effect of compilation, but ICC will put the dependencies in
3440 # the current directory while Tru64 will put them in the object
3441 # directory.
3442 mkdir sub
3443
3444 am_cv_CC_dependencies_compiler_type=none
3445 if test "$am_compiler_list" = ""; then
3446 am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
3447 fi
3448 am__universal=false
3449 case " $depcc " in #(
3450 *\ -arch\ *\ -arch\ *) am__universal=true ;;
3451 esac
3452
3453 for depmode in $am_compiler_list; do
3454 # Setup a source with many dependencies, because some compilers
3455 # like to wrap large dependency lists on column 80 (with \), and
3456 # we should not choose a depcomp mode which is confused by this.
3457 #
3458 # We need to recreate these files for each test, as the compiler may
3459 # overwrite some of them when testing with obscure command lines.
3460 # This happens at least with the AIX C compiler.
3461 : > sub/conftest.c
3462 for i in 1 2 3 4 5 6; do
3463 echo '#include "conftst'$i'.h"' >> sub/conftest.c
3464 # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
3465 # Solaris 10 /bin/sh.
3466 echo '/* dummy */' > sub/conftst$i.h
3467 done
3468 echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
3469
3470 # We check with '-c' and '-o' for the sake of the "dashmstdout"
3471 # mode. It turns out that the SunPro C++ compiler does not properly
3472 # handle '-M -o', and we need to detect this. Also, some Intel
3473 # versions had trouble with output in subdirs.
3474 am__obj=sub/conftest.${OBJEXT-o}
3475 am__minus_obj="-o $am__obj"
3476 case $depmode in
3477 gcc)
3478 # This depmode causes a compiler race in universal mode.
3479 test "$am__universal" = false || continue
3480 ;;
3481 nosideeffect)
3482 # After this tag, mechanisms are not by side-effect, so they'll
3483 # only be used when explicitly requested.
3484 if test "x$enable_dependency_tracking" = xyes; then
3485 continue
3486 else
3487 break
3488 fi
3489 ;;
3490 msvc7 | msvc7msys | msvisualcpp | msvcmsys)
3491 # This compiler won't grok '-c -o', but also, the minuso test has
3492 # not run yet. These depmodes are late enough in the game, and
3493 # so weak that their functioning should not be impacted.
3494 am__obj=conftest.${OBJEXT-o}
3495 am__minus_obj=
3496 ;;
3497 none) break ;;
3498 esac
3499 if depmode=$depmode \
3500 source=sub/conftest.c object=$am__obj \
3501 depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
3502 $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
3503 >/dev/null 2>conftest.err &&
3504 grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
3505 grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
3506 grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
3507 ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
3508 # icc doesn't choke on unknown options, it will just issue warnings
3509 # or remarks (even with -Werror). So we grep stderr for any message
3510 # that says an option was ignored or not supported.
3511 # When given -MP, icc 7.0 and 7.1 complain thusly:
3512 # icc: Command line warning: ignoring option '-M'; no argument required
3513 # The diagnosis changed in icc 8.0:
3514 # icc: Command line remark: option '-MP' not supported
3515 if (grep 'ignoring option' conftest.err ||
3516 grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
3517 am_cv_CC_dependencies_compiler_type=$depmode
3518 break
3519 fi
3520 fi
3521 done
3522
3523 cd ..
3524 rm -rf conftest.dir
3525else
3526 am_cv_CC_dependencies_compiler_type=none
3527fi
3528
3529fi
3530{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
3531$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
3532CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
3533
3534 if
3535 test "x$enable_dependency_tracking" != xno \
3536 && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
3537 am__fastdepCC_TRUE=
3538 am__fastdepCC_FALSE='#'
3539else
3540 am__fastdepCC_TRUE='#'
3541 am__fastdepCC_FALSE=
3542fi
3543
3544
3545
3546
3547# Check whether --with-gtk was given.
3548if test "${with_gtk+set}" = set; then :
3549 withval=$with_gtk; gtk_version_desired="$withval"
3550else
3551 gtk_version_desired="any"
3552fi
3553
3554
3555case "$gtk_version_desired" in
3556 2 | 3 | any) ;;
3557 yes) gtk_version_desired="any" ;;
3558 *) as_fn_error $? "Invalid GTK version specified" "$LINENO" 5
3559esac
3560
3561gtk=none
3562
3563case "$gtk_version_desired:$gtk" in
3564 3:none | any:none)
3565
3566
3567
3568# Check whether --enable-gtktest was given.
3569if test "${enable_gtktest+set}" = set; then :
3570 enableval=$enable_gtktest;
3571else
3572 enable_gtktest=yes
3573fi
3574
3575 min_gtk_version=3.0.0
3576
3577 pkg_config_args="gtk+-3.0 >= $min_gtk_version"
3578 for module in .
3579 do
3580 case "$module" in
3581 gthread)
3582 pkg_config_args="$pkg_config_args gthread-2.0"
3583 ;;
3584 esac
3585 done
3586
3587 no_gtk=""
3588
3589 # Extract the first word of "pkg-config", so it can be a program name with args.
3590set dummy pkg-config; ac_word=$2
3591{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
3592$as_echo_n "checking for $ac_word... " >&6; }
3593if ${ac_cv_path_PKG_CONFIG+:} false; then :
3594 $as_echo_n "(cached) " >&6
3595else
3596 case $PKG_CONFIG in
3597 [\\/]* | ?:[\\/]*)
3598 ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
3599 ;;
3600 *)
3601 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
3602for as_dir in $PATH
3603do
3604 IFS=$as_save_IFS
3605 test -z "$as_dir" && as_dir=.
3606 for ac_exec_ext in '' $ac_executable_extensions; do
3607 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
3608 ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
3609 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
3610 break 2
3611 fi
3612done
3613 done
3614IFS=$as_save_IFS
3615
3616 test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
3617 ;;
3618esac
3619fi
3620PKG_CONFIG=$ac_cv_path_PKG_CONFIG
3621if test -n "$PKG_CONFIG"; then
3622 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
3623$as_echo "$PKG_CONFIG" >&6; }
3624else
3625 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
3626$as_echo "no" >&6; }
3627fi
3628
3629
3630
3631 if test x$PKG_CONFIG != xno ; then
3632 if $PKG_CONFIG --atleast-pkgconfig-version 0.7 ; then
3633 :
3634 else
3635 echo "*** pkg-config too old; version 0.7 or better required."
3636 no_gtk=yes
3637 PKG_CONFIG=no
3638 fi
3639 else
3640 no_gtk=yes
3641 fi
3642
3643 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK+ - version >= $min_gtk_version" >&5
3644$as_echo_n "checking for GTK+ - version >= $min_gtk_version... " >&6; }
3645
3646 if test x$PKG_CONFIG != xno ; then
3647 ## don't try to run the test against uninstalled libtool libs
3648 if $PKG_CONFIG --uninstalled $pkg_config_args; then
3649 echo "Will use uninstalled version of GTK+ found in PKG_CONFIG_PATH"
3650 enable_gtktest=no
3651 fi
3652
3653 if $PKG_CONFIG $pkg_config_args; then
3654 :
3655 else
3656 no_gtk=yes
3657 fi
3658 fi
3659
3660 if test x"$no_gtk" = x ; then
3661 GTK_CFLAGS=`$PKG_CONFIG $pkg_config_args --cflags`
3662 GTK_LIBS=`$PKG_CONFIG $pkg_config_args --libs`
3663 gtk_config_major_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
3664 sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'`
3665 gtk_config_minor_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
3666 sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'`
3667 gtk_config_micro_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
3668 sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'`
3669 if test "x$enable_gtktest" = "xyes" ; then
3670 ac_save_CFLAGS="$CFLAGS"
3671 ac_save_LIBS="$LIBS"
3672 CFLAGS="$CFLAGS $GTK_CFLAGS"
3673 LIBS="$GTK_LIBS $LIBS"
3674 rm -f conf.gtktest
3675 if test "$cross_compiling" = yes; then :
3676 echo $ac_n "cross compiling; assumed OK... $ac_c"
3677else
3678 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
3679/* end confdefs.h. */
3680
3681#include <gtk/gtk.h>
3682#include <stdio.h>
3683#include <stdlib.h>
3684
3685int
3686main ()
3687{
3688 unsigned int major, minor, micro;
3689
3690 fclose (fopen ("conf.gtktest", "w"));
3691
3692 if (sscanf("$min_gtk_version", "%u.%u.%u", &major, &minor, &micro) != 3) {
3693 printf("%s, bad version string\n", "$min_gtk_version");
3694 exit(1);
3695 }
3696
3697 if ((gtk_major_version != $gtk_config_major_version) ||
3698 (gtk_minor_version != $gtk_config_minor_version) ||
3699 (gtk_micro_version != $gtk_config_micro_version))
3700 {
3701 printf("\n*** 'pkg-config --modversion gtk+-3.0' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n",
3702 $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version,
3703 gtk_major_version, gtk_minor_version, gtk_micro_version);
3704 printf ("*** was found! If pkg-config was correct, then it is best\n");
3705 printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n");
3706 printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
3707 printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
3708 printf("*** required on your system.\n");
3709 printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n");
3710 printf("*** to point to the correct configuration files\n");
3711 }
3712 else if ((gtk_major_version != GTK_MAJOR_VERSION) ||
3713 (gtk_minor_version != GTK_MINOR_VERSION) ||
3714 (gtk_micro_version != GTK_MICRO_VERSION))
3715 {
3716 printf("*** GTK+ header files (version %d.%d.%d) do not match\n",
3717 GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION);
3718 printf("*** library (version %d.%d.%d)\n",
3719 gtk_major_version, gtk_minor_version, gtk_micro_version);
3720 }
3721 else
3722 {
3723 if ((gtk_major_version > major) ||
3724 ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
3725 ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro)))
3726 {
3727 return 0;
3728 }
3729 else
3730 {
3731 printf("\n*** An old version of GTK+ (%u.%u.%u) was found.\n",
3732 gtk_major_version, gtk_minor_version, gtk_micro_version);
3733 printf("*** You need a version of GTK+ newer than %u.%u.%u. The latest version of\n",
3734 major, minor, micro);
3735 printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n");
3736 printf("***\n");
3737 printf("*** If you have already installed a sufficiently new version, this error\n");
3738 printf("*** probably means that the wrong copy of the pkg-config shell script is\n");
3739 printf("*** being found. The easiest way to fix this is to remove the old version\n");
3740 printf("*** of GTK+, but you can also set the PKG_CONFIG environment to point to the\n");
3741 printf("*** correct copy of pkg-config. (In this case, you will have to\n");
3742 printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
3743 printf("*** so that the correct libraries are found at run-time))\n");
3744 }
3745 }
3746 return 1;
3747}
3748
3749_ACEOF
3750if ac_fn_c_try_run "$LINENO"; then :
3751
3752else
3753 no_gtk=yes
3754fi
3755rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
3756 conftest.$ac_objext conftest.beam conftest.$ac_ext
3757fi
3758
3759 CFLAGS="$ac_save_CFLAGS"
3760 LIBS="$ac_save_LIBS"
3761 fi
3762 fi
3763 if test "x$no_gtk" = x ; then
3764 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version)" >&5
3765$as_echo "yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version)" >&6; }
3766 gtk=3
3767 else
3768 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
3769$as_echo "no" >&6; }
3770 if test "$PKG_CONFIG" = "no" ; then
3771 echo "*** A new enough version of pkg-config was not found."
3772 echo "*** See http://pkgconfig.sourceforge.net"
3773 else
3774 if test -f conf.gtktest ; then
3775 :
3776 else
3777 echo "*** Could not run GTK+ test program, checking why..."
3778 ac_save_CFLAGS="$CFLAGS"
3779 ac_save_LIBS="$LIBS"
3780 CFLAGS="$CFLAGS $GTK_CFLAGS"
3781 LIBS="$LIBS $GTK_LIBS"
3782 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
3783/* end confdefs.h. */
3784
3785#include <gtk/gtk.h>
3786#include <stdio.h>
3787
3788int
3789main ()
3790{
3791 return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version));
3792 ;
3793 return 0;
3794}
3795_ACEOF
3796if ac_fn_c_try_link "$LINENO"; then :
3797 echo "*** The test program compiled, but did not run. This usually means"
3798 echo "*** that the run-time linker is not finding GTK+ or finding the wrong"
3799 echo "*** version of GTK+. If it is not finding GTK+, you'll need to set your"
3800 echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
3801 echo "*** to the installed location Also, make sure you have run ldconfig if that"
3802 echo "*** is required on your system"
3803 echo "***"
3804 echo "*** If you have an old version installed, it is best to remove it, although"
3805 echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
3806else
3807 echo "*** The test program failed to compile or link. See the file config.log for the"
3808 echo "*** exact error that occurred. This usually means GTK+ is incorrectly installed."
3809fi
3810rm -f core conftest.err conftest.$ac_objext \
3811 conftest$ac_exeext conftest.$ac_ext
3812 CFLAGS="$ac_save_CFLAGS"
3813 LIBS="$ac_save_LIBS"
3814 fi
3815 fi
3816 GTK_CFLAGS=""
3817 GTK_LIBS=""
3818 :
3819 fi
3820
3821
3822 rm -f conf.gtktest
3823
3824
3825 ;;
3826esac
3827
3828case "$gtk_version_desired:$gtk" in
3829 2:none | any:none)
3830
3831
3832
3833
3834
3835
3836
3837
3838if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
3839 if test -n "$ac_tool_prefix"; then
3840 # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
3841set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
3842{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
3843$as_echo_n "checking for $ac_word... " >&6; }
3844if ${ac_cv_path_PKG_CONFIG+:} false; then :
3845 $as_echo_n "(cached) " >&6
3846else
3847 case $PKG_CONFIG in
3848 [\\/]* | ?:[\\/]*)
3849 ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
3850 ;;
3851 *)
3852 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
3853for as_dir in $PATH
3854do
3855 IFS=$as_save_IFS
3856 test -z "$as_dir" && as_dir=.
3857 for ac_exec_ext in '' $ac_executable_extensions; do
3858 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
3859 ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
3860 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
3861 break 2
3862 fi
3863done
3864 done
3865IFS=$as_save_IFS
3866
3867 ;;
3868esac
3869fi
3870PKG_CONFIG=$ac_cv_path_PKG_CONFIG
3871if test -n "$PKG_CONFIG"; then
3872 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
3873$as_echo "$PKG_CONFIG" >&6; }
3874else
3875 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
3876$as_echo "no" >&6; }
3877fi
3878
3879
3880fi
3881if test -z "$ac_cv_path_PKG_CONFIG"; then
3882 ac_pt_PKG_CONFIG=$PKG_CONFIG
3883 # Extract the first word of "pkg-config", so it can be a program name with args.
3884set dummy pkg-config; ac_word=$2
3885{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
3886$as_echo_n "checking for $ac_word... " >&6; }
3887if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
3888 $as_echo_n "(cached) " >&6
3889else
3890 case $ac_pt_PKG_CONFIG in
3891 [\\/]* | ?:[\\/]*)
3892 ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
3893 ;;
3894 *)
3895 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
3896for as_dir in $PATH
3897do
3898 IFS=$as_save_IFS
3899 test -z "$as_dir" && as_dir=.
3900 for ac_exec_ext in '' $ac_executable_extensions; do
3901 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
3902 ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
3903 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
3904 break 2
3905 fi
3906done
3907 done
3908IFS=$as_save_IFS
3909
3910 ;;
3911esac
3912fi
3913ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
3914if test -n "$ac_pt_PKG_CONFIG"; then
3915 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
3916$as_echo "$ac_pt_PKG_CONFIG" >&6; }
3917else
3918 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
3919$as_echo "no" >&6; }
3920fi
3921
3922 if test "x$ac_pt_PKG_CONFIG" = x; then
3923 PKG_CONFIG=""
3924 else
3925 case $cross_compiling:$ac_tool_warned in
3926yes:)
3927{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
3928$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
3929ac_tool_warned=yes ;;
3930esac
3931 PKG_CONFIG=$ac_pt_PKG_CONFIG
3932 fi
3933else
3934 PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
3935fi
3936
3937fi
3938if test -n "$PKG_CONFIG"; then
3939 _pkg_min_version=0.9.0
3940 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
3941$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
3942 if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
3943 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
3944$as_echo "yes" >&6; }
3945 else
3946 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
3947$as_echo "no" >&6; }
3948 PKG_CONFIG=""
3949 fi
3950fi
3951# Check whether --enable-gtktest was given.
3952if test "${enable_gtktest+set}" = set; then :
3953 enableval=$enable_gtktest;
3954else
3955 enable_gtktest=yes
3956fi
3957
3958
3959 pkg_config_args=gtk+-2.0
3960 for module in .
3961 do
3962 case "$module" in
3963 gthread)
3964 pkg_config_args="$pkg_config_args gthread-2.0"
3965 ;;
3966 esac
3967 done
3968
3969 no_gtk=""
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
3980 if test -n "$ac_tool_prefix"; then
3981 # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
3982set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
3983{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
3984$as_echo_n "checking for $ac_word... " >&6; }
3985if ${ac_cv_path_PKG_CONFIG+:} false; then :
3986 $as_echo_n "(cached) " >&6
3987else
3988 case $PKG_CONFIG in
3989 [\\/]* | ?:[\\/]*)
3990 ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
3991 ;;
3992 *)
3993 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
3994for as_dir in $PATH
3995do
3996 IFS=$as_save_IFS
3997 test -z "$as_dir" && as_dir=.
3998 for ac_exec_ext in '' $ac_executable_extensions; do
3999 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
4000 ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
4001 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
4002 break 2
4003 fi
4004done
4005 done
4006IFS=$as_save_IFS
4007
4008 ;;
4009esac
4010fi
4011PKG_CONFIG=$ac_cv_path_PKG_CONFIG
4012if test -n "$PKG_CONFIG"; then
4013 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
4014$as_echo "$PKG_CONFIG" >&6; }
4015else
4016 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
4017$as_echo "no" >&6; }
4018fi
4019
4020
4021fi
4022if test -z "$ac_cv_path_PKG_CONFIG"; then
4023 ac_pt_PKG_CONFIG=$PKG_CONFIG
4024 # Extract the first word of "pkg-config", so it can be a program name with args.
4025set dummy pkg-config; ac_word=$2
4026{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
4027$as_echo_n "checking for $ac_word... " >&6; }
4028if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
4029 $as_echo_n "(cached) " >&6
4030else
4031 case $ac_pt_PKG_CONFIG in
4032 [\\/]* | ?:[\\/]*)
4033 ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
4034 ;;
4035 *)
4036 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
4037for as_dir in $PATH
4038do
4039 IFS=$as_save_IFS
4040 test -z "$as_dir" && as_dir=.
4041 for ac_exec_ext in '' $ac_executable_extensions; do
4042 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
4043 ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
4044 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
4045 break 2
4046 fi
4047done
4048 done
4049IFS=$as_save_IFS
4050
4051 ;;
4052esac
4053fi
4054ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
4055if test -n "$ac_pt_PKG_CONFIG"; then
4056 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
4057$as_echo "$ac_pt_PKG_CONFIG" >&6; }
4058else
4059 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
4060$as_echo "no" >&6; }
4061fi
4062
4063 if test "x$ac_pt_PKG_CONFIG" = x; then
4064 PKG_CONFIG=""
4065 else
4066 case $cross_compiling:$ac_tool_warned in
4067yes:)
4068{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
4069$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
4070ac_tool_warned=yes ;;
4071esac
4072 PKG_CONFIG=$ac_pt_PKG_CONFIG
4073 fi
4074else
4075 PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
4076fi
4077
4078fi
4079if test -n "$PKG_CONFIG"; then
4080 _pkg_min_version=0.7
4081 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
4082$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
4083 if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
4084 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
4085$as_echo "yes" >&6; }
4086 else
4087 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
4088$as_echo "no" >&6; }
4089 PKG_CONFIG=""
4090 fi
4091fi
4092
4093 min_gtk_version=2.0.0
4094 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK+ - version >= $min_gtk_version" >&5
4095$as_echo_n "checking for GTK+ - version >= $min_gtk_version... " >&6; }
4096
4097 if test x$PKG_CONFIG != xno ; then
4098 ## don't try to run the test against uninstalled libtool libs
4099 if $PKG_CONFIG --uninstalled $pkg_config_args; then
4100 echo "Will use uninstalled version of GTK+ found in PKG_CONFIG_PATH"
4101 enable_gtktest=no
4102 fi
4103
4104 if $PKG_CONFIG --atleast-version $min_gtk_version $pkg_config_args; then
4105 :
4106 else
4107 no_gtk=yes
4108 fi
4109 fi
4110
4111 if test x"$no_gtk" = x ; then
4112 GTK_CFLAGS=`$PKG_CONFIG $pkg_config_args --cflags`
4113 GTK_LIBS=`$PKG_CONFIG $pkg_config_args --libs`
4114 gtk_config_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
4115 sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'`
4116 gtk_config_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
4117 sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'`
4118 gtk_config_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
4119 sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'`
4120 if test "x$enable_gtktest" = "xyes" ; then
4121 ac_save_CFLAGS="$CFLAGS"
4122 ac_save_LIBS="$LIBS"
4123 CFLAGS="$CFLAGS $GTK_CFLAGS"
4124 LIBS="$GTK_LIBS $LIBS"
4125 rm -f conf.gtktest
4126 if test "$cross_compiling" = yes; then :
4127 echo $ac_n "cross compiling; assumed OK... $ac_c"
4128else
4129 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
4130/* end confdefs.h. */
4131
4132#include <gtk/gtk.h>
4133#include <stdio.h>
4134#include <stdlib.h>
4135
4136int
4137main ()
4138{
4139 int major, minor, micro;
4140 char *tmp_version;
4141
4142 fclose (fopen ("conf.gtktest", "w"));
4143
4144 /* HP/UX 9 (%@#!) writes to sscanf strings */
4145 tmp_version = g_strdup("$min_gtk_version");
4146 if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
4147 printf("%s, bad version string\n", "$min_gtk_version");
4148 exit(1);
4149 }
4150
4151 if ((gtk_major_version != $gtk_config_major_version) ||
4152 (gtk_minor_version != $gtk_config_minor_version) ||
4153 (gtk_micro_version != $gtk_config_micro_version))
4154 {
4155 printf("\n*** 'pkg-config --modversion gtk+-2.0' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n",
4156 $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version,
4157 gtk_major_version, gtk_minor_version, gtk_micro_version);
4158 printf ("*** was found! If pkg-config was correct, then it is best\n");
4159 printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n");
4160 printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
4161 printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
4162 printf("*** required on your system.\n");
4163 printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n");
4164 printf("*** to point to the correct configuration files\n");
4165 }
4166 else if ((gtk_major_version != GTK_MAJOR_VERSION) ||
4167 (gtk_minor_version != GTK_MINOR_VERSION) ||
4168 (gtk_micro_version != GTK_MICRO_VERSION))
4169 {
4170 printf("*** GTK+ header files (version %d.%d.%d) do not match\n",
4171 GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION);
4172 printf("*** library (version %d.%d.%d)\n",
4173 gtk_major_version, gtk_minor_version, gtk_micro_version);
4174 }
4175 else
4176 {
4177 if ((gtk_major_version > major) ||
4178 ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
4179 ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro)))
4180 {
4181 return 0;
4182 }
4183 else
4184 {
4185 printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n",
4186 gtk_major_version, gtk_minor_version, gtk_micro_version);
4187 printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n",
4188 major, minor, micro);
4189 printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n");
4190 printf("***\n");
4191 printf("*** If you have already installed a sufficiently new version, this error\n");
4192 printf("*** probably means that the wrong copy of the pkg-config shell script is\n");
4193 printf("*** being found. The easiest way to fix this is to remove the old version\n");
4194 printf("*** of GTK+, but you can also set the PKG_CONFIG environment to point to the\n");
4195 printf("*** correct copy of pkg-config. (In this case, you will have to\n");
4196 printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
4197 printf("*** so that the correct libraries are found at run-time))\n");
4198 }
4199 }
4200 return 1;
4201}
4202
4203_ACEOF
4204if ac_fn_c_try_run "$LINENO"; then :
4205
4206else
4207 no_gtk=yes
4208fi
4209rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
4210 conftest.$ac_objext conftest.beam conftest.$ac_ext
4211fi
4212
4213 CFLAGS="$ac_save_CFLAGS"
4214 LIBS="$ac_save_LIBS"
4215 fi
4216 fi
4217 if test "x$no_gtk" = x ; then
4218 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version)" >&5
4219$as_echo "yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version)" >&6; }
4220 gtk=2
4221 else
4222 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
4223$as_echo "no" >&6; }
4224 if test "$PKG_CONFIG" = "no" ; then
4225 echo "*** A new enough version of pkg-config was not found."
4226 echo "*** See http://pkgconfig.sourceforge.net"
4227 else
4228 if test -f conf.gtktest ; then
4229 :
4230 else
4231 echo "*** Could not run GTK+ test program, checking why..."
4232 ac_save_CFLAGS="$CFLAGS"
4233 ac_save_LIBS="$LIBS"
4234 CFLAGS="$CFLAGS $GTK_CFLAGS"
4235 LIBS="$LIBS $GTK_LIBS"
4236 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
4237/* end confdefs.h. */
4238
4239#include <gtk/gtk.h>
4240#include <stdio.h>
4241
4242int
4243main ()
4244{
4245 return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version));
4246 ;
4247 return 0;
4248}
4249_ACEOF
4250if ac_fn_c_try_link "$LINENO"; then :
4251 echo "*** The test program compiled, but did not run. This usually means"
4252 echo "*** that the run-time linker is not finding GTK+ or finding the wrong"
4253 echo "*** version of GTK+. If it is not finding GTK+, you'll need to set your"
4254 echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
4255 echo "*** to the installed location Also, make sure you have run ldconfig if that"
4256 echo "*** is required on your system"
4257 echo "***"
4258 echo "*** If you have an old version installed, it is best to remove it, although"
4259 echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
4260else
4261 echo "*** The test program failed to compile or link. See the file config.log for the"
4262 echo "*** exact error that occured. This usually means GTK+ is incorrectly installed."
4263fi
4264rm -f core conftest.err conftest.$ac_objext \
4265 conftest$ac_exeext conftest.$ac_ext
4266 CFLAGS="$ac_save_CFLAGS"
4267 LIBS="$ac_save_LIBS"
4268 fi
4269 fi
4270 GTK_CFLAGS=""
4271 GTK_LIBS=""
4272 :
4273 fi
4274
4275
4276 rm -f conf.gtktest
4277
4278
4279 ;;
4280esac
4281
4282if test "$gtk" = "none"; then
4283 as_fn_error $? "cannot build without GTK 2 or GTK 3" "$LINENO" 5
4284fi
4285
4286if test "x$GCC" = "xyes"; then
4287 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for usable gcc warning flags" >&5
4288$as_echo_n "checking for usable gcc warning flags... " >&6; }
4289 gccwarningflags=
4290 for flag in -Wall -Werror -std=c89 -pedantic; do
4291 ac_save_CFLAGS="$CFLAGS"
4292 ac_save_LIBS="$LIBS"
4293 CFLAGS="$CFLAGS$gccwarningflags $flag $GTK_CFLAGS"
4294 LIBS="$GTK_LIBS $LIBS"
4295 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
4296/* end confdefs.h. */
4297
4298 #include <stdio.h>
4299 #include <assert.h>
4300 #include <stdlib.h>
4301 #include <time.h>
4302 #include <stdarg.h>
4303 #include <string.h>
4304 #include <errno.h>
4305 #include <math.h>
4306
4307 #include <sys/time.h>
4308 #include <sys/resource.h>
4309
4310 #include <gtk/gtk.h>
4311 #include <gdk/gdkkeysyms.h>
4312
4313 #include <gdk-pixbuf/gdk-pixbuf.h>
4314
4315 #include <gdk/gdkx.h>
4316 #include <X11/Xlib.h>
4317 #include <X11/Xutil.h>
4318 #include <X11/Xatom.h>
4319
4320int
4321main ()
4322{
4323
4324 return 0;
4325
4326 ;
4327 return 0;
4328}
4329_ACEOF
4330if ac_fn_c_try_compile "$LINENO"; then :
4331 gccwarningflags="$gccwarningflags $flag"
4332fi
4333rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
4334 CFLAGS="$ac_save_CFLAGS"
4335 LIBS="$ac_save_LIBS"
4336 done
4337 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gccwarningflags" >&5
4338$as_echo "$gccwarningflags" >&6; }
4339 CFLAGS="$CFLAGS$gccwarningflags"
4340fi
4341
4342if test -n "$ac_tool_prefix"; then
4343 # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
4344set dummy ${ac_tool_prefix}ranlib; ac_word=$2
4345{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
4346$as_echo_n "checking for $ac_word... " >&6; }
4347if ${ac_cv_prog_RANLIB+:} false; then :
4348 $as_echo_n "(cached) " >&6
4349else
4350 if test -n "$RANLIB"; then
4351 ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
4352else
4353as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
4354for as_dir in $PATH
4355do
4356 IFS=$as_save_IFS
4357 test -z "$as_dir" && as_dir=.
4358 for ac_exec_ext in '' $ac_executable_extensions; do
4359 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
4360 ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
4361 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
4362 break 2
4363 fi
4364done
4365 done
4366IFS=$as_save_IFS
4367
4368fi
4369fi
4370RANLIB=$ac_cv_prog_RANLIB
4371if test -n "$RANLIB"; then
4372 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
4373$as_echo "$RANLIB" >&6; }
4374else
4375 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
4376$as_echo "no" >&6; }
4377fi
4378
4379
4380fi
4381if test -z "$ac_cv_prog_RANLIB"; then
4382 ac_ct_RANLIB=$RANLIB
4383 # Extract the first word of "ranlib", so it can be a program name with args.
4384set dummy ranlib; ac_word=$2
4385{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
4386$as_echo_n "checking for $ac_word... " >&6; }
4387if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
4388 $as_echo_n "(cached) " >&6
4389else
4390 if test -n "$ac_ct_RANLIB"; then
4391 ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
4392else
4393as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
4394for as_dir in $PATH
4395do
4396 IFS=$as_save_IFS
4397 test -z "$as_dir" && as_dir=.
4398 for ac_exec_ext in '' $ac_executable_extensions; do
4399 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
4400 ac_cv_prog_ac_ct_RANLIB="ranlib"
4401 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
4402 break 2
4403 fi
4404done
4405 done
4406IFS=$as_save_IFS
4407
4408fi
4409fi
4410ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
4411if test -n "$ac_ct_RANLIB"; then
4412 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
4413$as_echo "$ac_ct_RANLIB" >&6; }
4414else
4415 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
4416$as_echo "no" >&6; }
4417fi
4418
4419 if test "x$ac_ct_RANLIB" = x; then
4420 RANLIB=":"
4421 else
4422 case $cross_compiling:$ac_tool_warned in
4423yes:)
4424{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
4425$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
4426ac_tool_warned=yes ;;
4427esac
4428 RANLIB=$ac_ct_RANLIB
4429 fi
4430else
4431 RANLIB="$ac_cv_prog_RANLIB"
4432fi
4433
4434
4435ac_config_files="$ac_config_files Makefile"
4436
4437cat >confcache <<\_ACEOF
4438# This file is a shell script that caches the results of configure
4439# tests run on this system so they can be shared between configure
4440# scripts and configure runs, see configure's option --config-cache.
4441# It is not useful on other systems. If it contains results you don't
4442# want to keep, you may remove or edit it.
4443#
4444# config.status only pays attention to the cache file if you give it
4445# the --recheck option to rerun configure.
4446#
4447# `ac_cv_env_foo' variables (set or unset) will be overridden when
4448# loading this file, other *unset* `ac_cv_foo' will be assigned the
4449# following values.
4450
4451_ACEOF
4452
4453# The following way of writing the cache mishandles newlines in values,
4454# but we know of no workaround that is simple, portable, and efficient.
4455# So, we kill variables containing newlines.
4456# Ultrix sh set writes to stderr and can't be redirected directly,
4457# and sets the high bit in the cache file unless we assign to the vars.
4458(
4459 for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
4460 eval ac_val=\$$ac_var
4461 case $ac_val in #(
4462 *${as_nl}*)
4463 case $ac_var in #(
4464 *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
4465$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
4466 esac
4467 case $ac_var in #(
4468 _ | IFS | as_nl) ;; #(
4469 BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
4470 *) { eval $ac_var=; unset $ac_var;} ;;
4471 esac ;;
4472 esac
4473 done
4474
4475 (set) 2>&1 |
4476 case $as_nl`(ac_space=' '; set) 2>&1` in #(
4477 *${as_nl}ac_space=\ *)
4478 # `set' does not quote correctly, so add quotes: double-quote
4479 # substitution turns \\\\ into \\, and sed turns \\ into \.
4480 sed -n \
4481 "s/'/'\\\\''/g;
4482 s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
4483 ;; #(
4484 *)
4485 # `set' quotes correctly as required by POSIX, so do not add quotes.
4486 sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
4487 ;;
4488 esac |
4489 sort
4490) |
4491 sed '
4492 /^ac_cv_env_/b end
4493 t clear
4494 :clear
4495 s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
4496 t end
4497 s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
4498 :end' >>confcache
4499if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
4500 if test -w "$cache_file"; then
4501 if test "x$cache_file" != "x/dev/null"; then
4502 { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
4503$as_echo "$as_me: updating cache $cache_file" >&6;}
4504 if test ! -f "$cache_file" || test -h "$cache_file"; then
4505 cat confcache >"$cache_file"
4506 else
4507 case $cache_file in #(
4508 */* | ?:*)
4509 mv -f confcache "$cache_file"$$ &&
4510 mv -f "$cache_file"$$ "$cache_file" ;; #(
4511 *)
4512 mv -f confcache "$cache_file" ;;
4513 esac
4514 fi
4515 fi
4516 else
4517 { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
4518$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
4519 fi
4520fi
4521rm -f confcache
4522
4523test "x$prefix" = xNONE && prefix=$ac_default_prefix
4524# Let make expand exec_prefix.
4525test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
4526
4527# Transform confdefs.h into DEFS.
4528# Protect against shell expansion while executing Makefile rules.
4529# Protect against Makefile macro expansion.
4530#
4531# If the first sed substitution is executed (which looks for macros that
4532# take arguments), then branch to the quote section. Otherwise,
4533# look for a macro that doesn't take arguments.
4534ac_script='
4535:mline
4536/\\$/{
4537 N
4538 s,\\\n,,
4539 b mline
4540}
4541t clear
4542:clear
4543s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g
4544t quote
4545s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g
4546t quote
4547b any
4548:quote
4549s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g
4550s/\[/\\&/g
4551s/\]/\\&/g
4552s/\$/$$/g
4553H
4554:any
4555${
4556 g
4557 s/^\n//
4558 s/\n/ /g
4559 p
4560}
4561'
4562DEFS=`sed -n "$ac_script" confdefs.h`
4563
4564
4565ac_libobjs=
4566ac_ltlibobjs=
4567U=
4568for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
4569 # 1. Remove the extension, and $U if already installed.
4570 ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
4571 ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
4572 # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
4573 # will be set to the directory where LIBOBJS objects are built.
4574 as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
4575 as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
4576done
4577LIBOBJS=$ac_libobjs
4578
4579LTLIBOBJS=$ac_ltlibobjs
4580
4581
4582{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
4583$as_echo_n "checking that generated files are newer than configure... " >&6; }
4584 if test -n "$am_sleep_pid"; then
4585 # Hide warnings about reused PIDs.
4586 wait $am_sleep_pid 2>/dev/null
4587 fi
4588 { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
4589$as_echo "done" >&6; }
4590 if test -n "$EXEEXT"; then
4591 am__EXEEXT_TRUE=
4592 am__EXEEXT_FALSE='#'
4593else
4594 am__EXEEXT_TRUE='#'
4595 am__EXEEXT_FALSE=
4596fi
4597
4598if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
4599 as_fn_error $? "conditional \"AMDEP\" was never defined.
4600Usually this means the macro was only invoked conditionally." "$LINENO" 5
4601fi
4602if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
4603 as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
4604Usually this means the macro was only invoked conditionally." "$LINENO" 5
4605fi
4606
4607: "${CONFIG_STATUS=./config.status}"
4608ac_write_fail=0
4609ac_clean_files_save=$ac_clean_files
4610ac_clean_files="$ac_clean_files $CONFIG_STATUS"
4611{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
4612$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
4613as_write_fail=0
4614cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
4615#! $SHELL
4616# Generated by $as_me.
4617# Run this file to recreate the current configuration.
4618# Compiler output produced by configure, useful for debugging
4619# configure, is in config.log if it exists.
4620
4621debug=false
4622ac_cs_recheck=false
4623ac_cs_silent=false
4624
4625SHELL=\${CONFIG_SHELL-$SHELL}
4626export SHELL
4627_ASEOF
4628cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
4629## -------------------- ##
4630## M4sh Initialization. ##
4631## -------------------- ##
4632
4633# Be more Bourne compatible
4634DUALCASE=1; export DUALCASE # for MKS sh
4635if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
4636 emulate sh
4637 NULLCMD=:
4638 # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
4639 # is contrary to our usage. Disable this feature.
4640 alias -g '${1+"$@"}'='"$@"'
4641 setopt NO_GLOB_SUBST
4642else
4643 case `(set -o) 2>/dev/null` in #(
4644 *posix*) :
4645 set -o posix ;; #(
4646 *) :
4647 ;;
4648esac
4649fi
4650
4651
4652as_nl='
4653'
4654export as_nl
4655# Printing a long string crashes Solaris 7 /usr/bin/printf.
4656as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
4657as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
4658as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
4659# Prefer a ksh shell builtin over an external printf program on Solaris,
4660# but without wasting forks for bash or zsh.
4661if test -z "$BASH_VERSION$ZSH_VERSION" \
4662 && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
4663 as_echo='print -r --'
4664 as_echo_n='print -rn --'
4665elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
4666 as_echo='printf %s\n'
4667 as_echo_n='printf %s'
4668else
4669 if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
4670 as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
4671 as_echo_n='/usr/ucb/echo -n'
4672 else
4673 as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
4674 as_echo_n_body='eval
4675 arg=$1;
4676 case $arg in #(
4677 *"$as_nl"*)
4678 expr "X$arg" : "X\\(.*\\)$as_nl";
4679 arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
4680 esac;
4681 expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
4682 '
4683 export as_echo_n_body
4684 as_echo_n='sh -c $as_echo_n_body as_echo'
4685 fi
4686 export as_echo_body
4687 as_echo='sh -c $as_echo_body as_echo'
4688fi
4689
4690# The user is always right.
4691if test "${PATH_SEPARATOR+set}" != set; then
4692 PATH_SEPARATOR=:
4693 (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
4694 (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
4695 PATH_SEPARATOR=';'
4696 }
4697fi
4698
4699
4700# IFS
4701# We need space, tab and new line, in precisely that order. Quoting is
4702# there to prevent editors from complaining about space-tab.
4703# (If _AS_PATH_WALK were called with IFS unset, it would disable word
4704# splitting by setting IFS to empty value.)
4705IFS=" "" $as_nl"
4706
4707# Find who we are. Look in the path if we contain no directory separator.
4708as_myself=
4709case $0 in #((
4710 *[\\/]* ) as_myself=$0 ;;
4711 *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
4712for as_dir in $PATH
4713do
4714 IFS=$as_save_IFS
4715 test -z "$as_dir" && as_dir=.
4716 test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
4717 done
4718IFS=$as_save_IFS
4719
4720 ;;
4721esac
4722# We did not find ourselves, most probably we were run as `sh COMMAND'
4723# in which case we are not to be found in the path.
4724if test "x$as_myself" = x; then
4725 as_myself=$0
4726fi
4727if test ! -f "$as_myself"; then
4728 $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
4729 exit 1
4730fi
4731
4732# Unset variables that we do not need and which cause bugs (e.g. in
4733# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
4734# suppresses any "Segmentation fault" message there. '((' could
4735# trigger a bug in pdksh 5.2.14.
4736for as_var in BASH_ENV ENV MAIL MAILPATH
4737do eval test x\${$as_var+set} = xset \
4738 && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
4739done
4740PS1='$ '
4741PS2='> '
4742PS4='+ '
4743
4744# NLS nuisances.
4745LC_ALL=C
4746export LC_ALL
4747LANGUAGE=C
4748export LANGUAGE
4749
4750# CDPATH.
4751(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
4752
4753
4754# as_fn_error STATUS ERROR [LINENO LOG_FD]
4755# ----------------------------------------
4756# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
4757# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
4758# script with STATUS, using 1 if that was 0.
4759as_fn_error ()
4760{
4761 as_status=$1; test $as_status -eq 0 && as_status=1
4762 if test "$4"; then
4763 as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
4764 $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
4765 fi
4766 $as_echo "$as_me: error: $2" >&2
4767 as_fn_exit $as_status
4768} # as_fn_error
4769
4770
4771# as_fn_set_status STATUS
4772# -----------------------
4773# Set $? to STATUS, without forking.
4774as_fn_set_status ()
4775{
4776 return $1
4777} # as_fn_set_status
4778
4779# as_fn_exit STATUS
4780# -----------------
4781# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
4782as_fn_exit ()
4783{
4784 set +e
4785 as_fn_set_status $1
4786 exit $1
4787} # as_fn_exit
4788
4789# as_fn_unset VAR
4790# ---------------
4791# Portably unset VAR.
4792as_fn_unset ()
4793{
4794 { eval $1=; unset $1;}
4795}
4796as_unset=as_fn_unset
4797# as_fn_append VAR VALUE
4798# ----------------------
4799# Append the text in VALUE to the end of the definition contained in VAR. Take
4800# advantage of any shell optimizations that allow amortized linear growth over
4801# repeated appends, instead of the typical quadratic growth present in naive
4802# implementations.
4803if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
4804 eval 'as_fn_append ()
4805 {
4806 eval $1+=\$2
4807 }'
4808else
4809 as_fn_append ()
4810 {
4811 eval $1=\$$1\$2
4812 }
4813fi # as_fn_append
4814
4815# as_fn_arith ARG...
4816# ------------------
4817# Perform arithmetic evaluation on the ARGs, and store the result in the
4818# global $as_val. Take advantage of shells that can avoid forks. The arguments
4819# must be portable across $(()) and expr.
4820if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
4821 eval 'as_fn_arith ()
4822 {
4823 as_val=$(( $* ))
4824 }'
4825else
4826 as_fn_arith ()
4827 {
4828 as_val=`expr "$@" || test $? -eq 1`
4829 }
4830fi # as_fn_arith
4831
4832
4833if expr a : '\(a\)' >/dev/null 2>&1 &&
4834 test "X`expr 00001 : '.*\(...\)'`" = X001; then
4835 as_expr=expr
4836else
4837 as_expr=false
4838fi
4839
4840if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
4841 as_basename=basename
4842else
4843 as_basename=false
4844fi
4845
4846if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
4847 as_dirname=dirname
4848else
4849 as_dirname=false
4850fi
4851
4852as_me=`$as_basename -- "$0" ||
4853$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
4854 X"$0" : 'X\(//\)$' \| \
4855 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
4856$as_echo X/"$0" |
4857 sed '/^.*\/\([^/][^/]*\)\/*$/{
4858 s//\1/
4859 q
4860 }
4861 /^X\/\(\/\/\)$/{
4862 s//\1/
4863 q
4864 }
4865 /^X\/\(\/\).*/{
4866 s//\1/
4867 q
4868 }
4869 s/.*/./; q'`
4870
4871# Avoid depending upon Character Ranges.
4872as_cr_letters='abcdefghijklmnopqrstuvwxyz'
4873as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
4874as_cr_Letters=$as_cr_letters$as_cr_LETTERS
4875as_cr_digits='0123456789'
4876as_cr_alnum=$as_cr_Letters$as_cr_digits
4877
4878ECHO_C= ECHO_N= ECHO_T=
4879case `echo -n x` in #(((((
4880-n*)
4881 case `echo 'xy\c'` in
4882 *c*) ECHO_T=' ';; # ECHO_T is single tab character.
4883 xy) ECHO_C='\c';;
4884 *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
4885 ECHO_T=' ';;
4886 esac;;
4887*)
4888 ECHO_N='-n';;
4889esac
4890
4891rm -f conf$$ conf$$.exe conf$$.file
4892if test -d conf$$.dir; then
4893 rm -f conf$$.dir/conf$$.file
4894else
4895 rm -f conf$$.dir
4896 mkdir conf$$.dir 2>/dev/null
4897fi
4898if (echo >conf$$.file) 2>/dev/null; then
4899 if ln -s conf$$.file conf$$ 2>/dev/null; then
4900 as_ln_s='ln -s'
4901 # ... but there are two gotchas:
4902 # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
4903 # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
4904 # In both cases, we have to default to `cp -pR'.
4905 ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
4906 as_ln_s='cp -pR'
4907 elif ln conf$$.file conf$$ 2>/dev/null; then
4908 as_ln_s=ln
4909 else
4910 as_ln_s='cp -pR'
4911 fi
4912else
4913 as_ln_s='cp -pR'
4914fi
4915rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
4916rmdir conf$$.dir 2>/dev/null
4917
4918
4919# as_fn_mkdir_p
4920# -------------
4921# Create "$as_dir" as a directory, including parents if necessary.
4922as_fn_mkdir_p ()
4923{
4924
4925 case $as_dir in #(
4926 -*) as_dir=./$as_dir;;
4927 esac
4928 test -d "$as_dir" || eval $as_mkdir_p || {
4929 as_dirs=
4930 while :; do
4931 case $as_dir in #(
4932 *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
4933 *) as_qdir=$as_dir;;
4934 esac
4935 as_dirs="'$as_qdir' $as_dirs"
4936 as_dir=`$as_dirname -- "$as_dir" ||
4937$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
4938 X"$as_dir" : 'X\(//\)[^/]' \| \
4939 X"$as_dir" : 'X\(//\)$' \| \
4940 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
4941$as_echo X"$as_dir" |
4942 sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
4943 s//\1/
4944 q
4945 }
4946 /^X\(\/\/\)[^/].*/{
4947 s//\1/
4948 q
4949 }
4950 /^X\(\/\/\)$/{
4951 s//\1/
4952 q
4953 }
4954 /^X\(\/\).*/{
4955 s//\1/
4956 q
4957 }
4958 s/.*/./; q'`
4959 test -d "$as_dir" && break
4960 done
4961 test -z "$as_dirs" || eval "mkdir $as_dirs"
4962 } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
4963
4964
4965} # as_fn_mkdir_p
4966if mkdir -p . 2>/dev/null; then
4967 as_mkdir_p='mkdir -p "$as_dir"'
4968else
4969 test -d ./-p && rmdir ./-p
4970 as_mkdir_p=false
4971fi
4972
4973
4974# as_fn_executable_p FILE
4975# -----------------------
4976# Test if FILE is an executable regular file.
4977as_fn_executable_p ()
4978{
4979 test -f "$1" && test -x "$1"
4980} # as_fn_executable_p
4981as_test_x='test -x'
4982as_executable_p=as_fn_executable_p
4983
4984# Sed expression to map a string onto a valid CPP name.
4985as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
4986
4987# Sed expression to map a string onto a valid variable name.
4988as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
4989
4990
4991exec 6>&1
4992## ----------------------------------- ##
4993## Main body of $CONFIG_STATUS script. ##
4994## ----------------------------------- ##
4995_ASEOF
4996test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
4997
4998cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
4999# Save the log message, to keep $0 and so on meaningful, and to
5000# report actual input values of CONFIG_FILES etc. instead of their
5001# values after options handling.
5002ac_log="
5003This file was extended by puzzles $as_me 6.66, which was
5004generated by GNU Autoconf 2.69. Invocation command line was
5005
5006 CONFIG_FILES = $CONFIG_FILES
5007 CONFIG_HEADERS = $CONFIG_HEADERS
5008 CONFIG_LINKS = $CONFIG_LINKS
5009 CONFIG_COMMANDS = $CONFIG_COMMANDS
5010 $ $0 $@
5011
5012on `(hostname || uname -n) 2>/dev/null | sed 1q`
5013"
5014
5015_ACEOF
5016
5017case $ac_config_files in *"
5018"*) set x $ac_config_files; shift; ac_config_files=$*;;
5019esac
5020
5021
5022
5023cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
5024# Files that config.status was made for.
5025config_files="$ac_config_files"
5026config_commands="$ac_config_commands"
5027
5028_ACEOF
5029
5030cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
5031ac_cs_usage="\
5032\`$as_me' instantiates files and other configuration actions
5033from templates according to the current configuration. Unless the files
5034and actions are specified as TAGs, all are instantiated by default.
5035
5036Usage: $0 [OPTION]... [TAG]...
5037
5038 -h, --help print this help, then exit
5039 -V, --version print version number and configuration settings, then exit
5040 --config print configuration, then exit
5041 -q, --quiet, --silent
5042 do not print progress messages
5043 -d, --debug don't remove temporary files
5044 --recheck update $as_me by reconfiguring in the same conditions
5045 --file=FILE[:TEMPLATE]
5046 instantiate the configuration file FILE
5047
5048Configuration files:
5049$config_files
5050
5051Configuration commands:
5052$config_commands
5053
5054Report bugs to <anakin@pobox.com>."
5055
5056_ACEOF
5057cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
5058ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
5059ac_cs_version="\\
5060puzzles config.status 6.66
5061configured by $0, generated by GNU Autoconf 2.69,
5062 with options \\"\$ac_cs_config\\"
5063
5064Copyright (C) 2012 Free Software Foundation, Inc.
5065This config.status script is free software; the Free Software Foundation
5066gives unlimited permission to copy, distribute and modify it."
5067
5068ac_pwd='$ac_pwd'
5069srcdir='$srcdir'
5070INSTALL='$INSTALL'
5071MKDIR_P='$MKDIR_P'
5072AWK='$AWK'
5073test -n "\$AWK" || AWK=awk
5074_ACEOF
5075
5076cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
5077# The default lists apply if the user does not specify any file.
5078ac_need_defaults=:
5079while test $# != 0
5080do
5081 case $1 in
5082 --*=?*)
5083 ac_option=`expr "X$1" : 'X\([^=]*\)='`
5084 ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
5085 ac_shift=:
5086 ;;
5087 --*=)
5088 ac_option=`expr "X$1" : 'X\([^=]*\)='`
5089 ac_optarg=
5090 ac_shift=:
5091 ;;
5092 *)
5093 ac_option=$1
5094 ac_optarg=$2
5095 ac_shift=shift
5096 ;;
5097 esac
5098
5099 case $ac_option in
5100 # Handling of the options.
5101 -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
5102 ac_cs_recheck=: ;;
5103 --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
5104 $as_echo "$ac_cs_version"; exit ;;
5105 --config | --confi | --conf | --con | --co | --c )
5106 $as_echo "$ac_cs_config"; exit ;;
5107 --debug | --debu | --deb | --de | --d | -d )
5108 debug=: ;;
5109 --file | --fil | --fi | --f )
5110 $ac_shift
5111 case $ac_optarg in
5112 *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
5113 '') as_fn_error $? "missing file argument" ;;
5114 esac
5115 as_fn_append CONFIG_FILES " '$ac_optarg'"
5116 ac_need_defaults=false;;
5117 --he | --h | --help | --hel | -h )
5118 $as_echo "$ac_cs_usage"; exit ;;
5119 -q | -quiet | --quiet | --quie | --qui | --qu | --q \
5120 | -silent | --silent | --silen | --sile | --sil | --si | --s)
5121 ac_cs_silent=: ;;
5122
5123 # This is an error.
5124 -*) as_fn_error $? "unrecognized option: \`$1'
5125Try \`$0 --help' for more information." ;;
5126
5127 *) as_fn_append ac_config_targets " $1"
5128 ac_need_defaults=false ;;
5129
5130 esac
5131 shift
5132done
5133
5134ac_configure_extra_args=
5135
5136if $ac_cs_silent; then
5137 exec 6>/dev/null
5138 ac_configure_extra_args="$ac_configure_extra_args --silent"
5139fi
5140
5141_ACEOF
5142cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
5143if \$ac_cs_recheck; then
5144 set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
5145 shift
5146 \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
5147 CONFIG_SHELL='$SHELL'
5148 export CONFIG_SHELL
5149 exec "\$@"
5150fi
5151
5152_ACEOF
5153cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
5154exec 5>>config.log
5155{
5156 echo
5157 sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
5158## Running $as_me. ##
5159_ASBOX
5160 $as_echo "$ac_log"
5161} >&5
5162
5163_ACEOF
5164cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
5165#
5166# INIT-COMMANDS
5167#
5168AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
5169
5170_ACEOF
5171
5172cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
5173
5174# Handling of arguments.
5175for ac_config_target in $ac_config_targets
5176do
5177 case $ac_config_target in
5178 "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
5179 "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
5180
5181 *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
5182 esac
5183done
5184
5185
5186# If the user did not use the arguments to specify the items to instantiate,
5187# then the envvar interface is used. Set only those that are not.
5188# We use the long form for the default assignment because of an extremely
5189# bizarre bug on SunOS 4.1.3.
5190if $ac_need_defaults; then
5191 test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
5192 test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
5193fi
5194
5195# Have a temporary directory for convenience. Make it in the build tree
5196# simply because there is no reason against having it here, and in addition,
5197# creating and moving files from /tmp can sometimes cause problems.
5198# Hook for its removal unless debugging.
5199# Note that there is a small window in which the directory will not be cleaned:
5200# after its creation but before its name has been assigned to `$tmp'.
5201$debug ||
5202{
5203 tmp= ac_tmp=
5204 trap 'exit_status=$?
5205 : "${ac_tmp:=$tmp}"
5206 { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
5207' 0
5208 trap 'as_fn_exit 1' 1 2 13 15
5209}
5210# Create a (secure) tmp directory for tmp files.
5211
5212{
5213 tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
5214 test -d "$tmp"
5215} ||
5216{
5217 tmp=./conf$$-$RANDOM
5218 (umask 077 && mkdir "$tmp")
5219} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
5220ac_tmp=$tmp
5221
5222# Set up the scripts for CONFIG_FILES section.
5223# No need to generate them if there are no CONFIG_FILES.
5224# This happens for instance with `./config.status config.h'.
5225if test -n "$CONFIG_FILES"; then
5226
5227
5228ac_cr=`echo X | tr X '\015'`
5229# On cygwin, bash can eat \r inside `` if the user requested igncr.
5230# But we know of no other shell where ac_cr would be empty at this
5231# point, so we can use a bashism as a fallback.
5232if test "x$ac_cr" = x; then
5233 eval ac_cr=\$\'\\r\'
5234fi
5235ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
5236if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
5237 ac_cs_awk_cr='\\r'
5238else
5239 ac_cs_awk_cr=$ac_cr
5240fi
5241
5242echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
5243_ACEOF
5244
5245
5246{
5247 echo "cat >conf$$subs.awk <<_ACEOF" &&
5248 echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
5249 echo "_ACEOF"
5250} >conf$$subs.sh ||
5251 as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
5252ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
5253ac_delim='%!_!# '
5254for ac_last_try in false false false false false :; do
5255 . ./conf$$subs.sh ||
5256 as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
5257
5258 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
5259 if test $ac_delim_n = $ac_delim_num; then
5260 break
5261 elif $ac_last_try; then
5262 as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
5263 else
5264 ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
5265 fi
5266done
5267rm -f conf$$subs.sh
5268
5269cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
5270cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
5271_ACEOF
5272sed -n '
5273h
5274s/^/S["/; s/!.*/"]=/
5275p
5276g
5277s/^[^!]*!//
5278:repl
5279t repl
5280s/'"$ac_delim"'$//
5281t delim
5282:nl
5283h
5284s/\(.\{148\}\)..*/\1/
5285t more1
5286s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
5287p
5288n
5289b repl
5290:more1
5291s/["\\]/\\&/g; s/^/"/; s/$/"\\/
5292p
5293g
5294s/.\{148\}//
5295t nl
5296:delim
5297h
5298s/\(.\{148\}\)..*/\1/
5299t more2
5300s/["\\]/\\&/g; s/^/"/; s/$/"/
5301p
5302b
5303:more2
5304s/["\\]/\\&/g; s/^/"/; s/$/"\\/
5305p
5306g
5307s/.\{148\}//
5308t delim
5309' <conf$$subs.awk | sed '
5310/^[^""]/{
5311 N
5312 s/\n//
5313}
5314' >>$CONFIG_STATUS || ac_write_fail=1
5315rm -f conf$$subs.awk
5316cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
5317_ACAWK
5318cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
5319 for (key in S) S_is_set[key] = 1
5320 FS = ""
5321
5322}
5323{
5324 line = $ 0
5325 nfields = split(line, field, "@")
5326 substed = 0
5327 len = length(field[1])
5328 for (i = 2; i < nfields; i++) {
5329 key = field[i]
5330 keylen = length(key)
5331 if (S_is_set[key]) {
5332 value = S[key]
5333 line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
5334 len += length(value) + length(field[++i])
5335 substed = 1
5336 } else
5337 len += 1 + keylen
5338 }
5339
5340 print line
5341}
5342
5343_ACAWK
5344_ACEOF
5345cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
5346if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
5347 sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
5348else
5349 cat
5350fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
5351 || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
5352_ACEOF
5353
5354# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
5355# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
5356# trailing colons and then remove the whole line if VPATH becomes empty
5357# (actually we leave an empty line to preserve line numbers).
5358if test "x$srcdir" = x.; then
5359 ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
5360h
5361s///
5362s/^/:/
5363s/[ ]*$/:/
5364s/:\$(srcdir):/:/g
5365s/:\${srcdir}:/:/g
5366s/:@srcdir@:/:/g
5367s/^:*//
5368s/:*$//
5369x
5370s/\(=[ ]*\).*/\1/
5371G
5372s/\n//
5373s/^[^=]*=[ ]*$//
5374}'
5375fi
5376
5377cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
5378fi # test -n "$CONFIG_FILES"
5379
5380
5381eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS"
5382shift
5383for ac_tag
5384do
5385 case $ac_tag in
5386 :[FHLC]) ac_mode=$ac_tag; continue;;
5387 esac
5388 case $ac_mode$ac_tag in
5389 :[FHL]*:*);;
5390 :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
5391 :[FH]-) ac_tag=-:-;;
5392 :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
5393 esac
5394 ac_save_IFS=$IFS
5395 IFS=:
5396 set x $ac_tag
5397 IFS=$ac_save_IFS
5398 shift
5399 ac_file=$1
5400 shift
5401
5402 case $ac_mode in
5403 :L) ac_source=$1;;
5404 :[FH])
5405 ac_file_inputs=
5406 for ac_f
5407 do
5408 case $ac_f in
5409 -) ac_f="$ac_tmp/stdin";;
5410 *) # Look for the file first in the build tree, then in the source tree
5411 # (if the path is not absolute). The absolute path cannot be DOS-style,
5412 # because $ac_f cannot contain `:'.
5413 test -f "$ac_f" ||
5414 case $ac_f in
5415 [\\/$]*) false;;
5416 *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
5417 esac ||
5418 as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
5419 esac
5420 case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
5421 as_fn_append ac_file_inputs " '$ac_f'"
5422 done
5423
5424 # Let's still pretend it is `configure' which instantiates (i.e., don't
5425 # use $as_me), people would be surprised to read:
5426 # /* config.h. Generated by config.status. */
5427 configure_input='Generated from '`
5428 $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
5429 `' by configure.'
5430 if test x"$ac_file" != x-; then
5431 configure_input="$ac_file. $configure_input"
5432 { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
5433$as_echo "$as_me: creating $ac_file" >&6;}
5434 fi
5435 # Neutralize special characters interpreted by sed in replacement strings.
5436 case $configure_input in #(
5437 *\&* | *\|* | *\\* )
5438 ac_sed_conf_input=`$as_echo "$configure_input" |
5439 sed 's/[\\\\&|]/\\\\&/g'`;; #(
5440 *) ac_sed_conf_input=$configure_input;;
5441 esac
5442
5443 case $ac_tag in
5444 *:-:* | *:-) cat >"$ac_tmp/stdin" \
5445 || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
5446 esac
5447 ;;
5448 esac
5449
5450 ac_dir=`$as_dirname -- "$ac_file" ||
5451$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
5452 X"$ac_file" : 'X\(//\)[^/]' \| \
5453 X"$ac_file" : 'X\(//\)$' \| \
5454 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
5455$as_echo X"$ac_file" |
5456 sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
5457 s//\1/
5458 q
5459 }
5460 /^X\(\/\/\)[^/].*/{
5461 s//\1/
5462 q
5463 }
5464 /^X\(\/\/\)$/{
5465 s//\1/
5466 q
5467 }
5468 /^X\(\/\).*/{
5469 s//\1/
5470 q
5471 }
5472 s/.*/./; q'`
5473 as_dir="$ac_dir"; as_fn_mkdir_p
5474 ac_builddir=.
5475
5476case "$ac_dir" in
5477.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
5478*)
5479 ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
5480 # A ".." for each directory in $ac_dir_suffix.
5481 ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
5482 case $ac_top_builddir_sub in
5483 "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
5484 *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
5485 esac ;;
5486esac
5487ac_abs_top_builddir=$ac_pwd
5488ac_abs_builddir=$ac_pwd$ac_dir_suffix
5489# for backward compatibility:
5490ac_top_builddir=$ac_top_build_prefix
5491
5492case $srcdir in
5493 .) # We are building in place.
5494 ac_srcdir=.
5495 ac_top_srcdir=$ac_top_builddir_sub
5496 ac_abs_top_srcdir=$ac_pwd ;;
5497 [\\/]* | ?:[\\/]* ) # Absolute name.
5498 ac_srcdir=$srcdir$ac_dir_suffix;
5499 ac_top_srcdir=$srcdir
5500 ac_abs_top_srcdir=$srcdir ;;
5501 *) # Relative name.
5502 ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
5503 ac_top_srcdir=$ac_top_build_prefix$srcdir
5504 ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
5505esac
5506ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
5507
5508
5509 case $ac_mode in
5510 :F)
5511 #
5512 # CONFIG_FILE
5513 #
5514
5515 case $INSTALL in
5516 [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
5517 *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
5518 esac
5519 ac_MKDIR_P=$MKDIR_P
5520 case $MKDIR_P in
5521 [\\/$]* | ?:[\\/]* ) ;;
5522 */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
5523 esac
5524_ACEOF
5525
5526cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
5527# If the template does not know about datarootdir, expand it.
5528# FIXME: This hack should be removed a few years after 2.60.
5529ac_datarootdir_hack=; ac_datarootdir_seen=
5530ac_sed_dataroot='
5531/datarootdir/ {
5532 p
5533 q
5534}
5535/@datadir@/p
5536/@docdir@/p
5537/@infodir@/p
5538/@localedir@/p
5539/@mandir@/p'
5540case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
5541*datarootdir*) ac_datarootdir_seen=yes;;
5542*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
5543 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
5544$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
5545_ACEOF
5546cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
5547 ac_datarootdir_hack='
5548 s&@datadir@&$datadir&g
5549 s&@docdir@&$docdir&g
5550 s&@infodir@&$infodir&g
5551 s&@localedir@&$localedir&g
5552 s&@mandir@&$mandir&g
5553 s&\\\${datarootdir}&$datarootdir&g' ;;
5554esac
5555_ACEOF
5556
5557# Neutralize VPATH when `$srcdir' = `.'.
5558# Shell code in configure.ac might set extrasub.
5559# FIXME: do we really want to maintain this feature?
5560cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
5561ac_sed_extra="$ac_vpsub
5562$extrasub
5563_ACEOF
5564cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
5565:t
5566/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
5567s|@configure_input@|$ac_sed_conf_input|;t t
5568s&@top_builddir@&$ac_top_builddir_sub&;t t
5569s&@top_build_prefix@&$ac_top_build_prefix&;t t
5570s&@srcdir@&$ac_srcdir&;t t
5571s&@abs_srcdir@&$ac_abs_srcdir&;t t
5572s&@top_srcdir@&$ac_top_srcdir&;t t
5573s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
5574s&@builddir@&$ac_builddir&;t t
5575s&@abs_builddir@&$ac_abs_builddir&;t t
5576s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
5577s&@INSTALL@&$ac_INSTALL&;t t
5578s&@MKDIR_P@&$ac_MKDIR_P&;t t
5579$ac_datarootdir_hack
5580"
5581eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
5582 >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
5583
5584test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
5585 { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
5586 { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
5587 "$ac_tmp/out"`; test -z "$ac_out"; } &&
5588 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
5589which seems to be undefined. Please make sure it is defined" >&5
5590$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
5591which seems to be undefined. Please make sure it is defined" >&2;}
5592
5593 rm -f "$ac_tmp/stdin"
5594 case $ac_file in
5595 -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
5596 *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
5597 esac \
5598 || as_fn_error $? "could not create $ac_file" "$LINENO" 5
5599 ;;
5600
5601
5602 :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
5603$as_echo "$as_me: executing $ac_file commands" >&6;}
5604 ;;
5605 esac
5606
5607
5608 case $ac_file$ac_mode in
5609 "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
5610 # Older Autoconf quotes --file arguments for eval, but not when files
5611 # are listed without --file. Let's play safe and only enable the eval
5612 # if we detect the quoting.
5613 case $CONFIG_FILES in
5614 *\'*) eval set x "$CONFIG_FILES" ;;
5615 *) set x $CONFIG_FILES ;;
5616 esac
5617 shift
5618 for mf
5619 do
5620 # Strip MF so we end up with the name of the file.
5621 mf=`echo "$mf" | sed -e 's/:.*$//'`
5622 # Check whether this is an Automake generated Makefile or not.
5623 # We used to match only the files named 'Makefile.in', but
5624 # some people rename them; so instead we look at the file content.
5625 # Grep'ing the first line is not enough: some people post-process
5626 # each Makefile.in and add a new line on top of each file to say so.
5627 # Grep'ing the whole file is not good either: AIX grep has a line
5628 # limit of 2048, but all sed's we know have understand at least 4000.
5629 if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
5630 dirpart=`$as_dirname -- "$mf" ||
5631$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
5632 X"$mf" : 'X\(//\)[^/]' \| \
5633 X"$mf" : 'X\(//\)$' \| \
5634 X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
5635$as_echo X"$mf" |
5636 sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
5637 s//\1/
5638 q
5639 }
5640 /^X\(\/\/\)[^/].*/{
5641 s//\1/
5642 q
5643 }
5644 /^X\(\/\/\)$/{
5645 s//\1/
5646 q
5647 }
5648 /^X\(\/\).*/{
5649 s//\1/
5650 q
5651 }
5652 s/.*/./; q'`
5653 else
5654 continue
5655 fi
5656 # Extract the definition of DEPDIR, am__include, and am__quote
5657 # from the Makefile without running 'make'.
5658 DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
5659 test -z "$DEPDIR" && continue
5660 am__include=`sed -n 's/^am__include = //p' < "$mf"`
5661 test -z "$am__include" && continue
5662 am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
5663 # Find all dependency output files, they are included files with
5664 # $(DEPDIR) in their names. We invoke sed twice because it is the
5665 # simplest approach to changing $(DEPDIR) to its actual value in the
5666 # expansion.
5667 for file in `sed -n "
5668 s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
5669 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
5670 # Make sure the directory exists.
5671 test -f "$dirpart/$file" && continue
5672 fdir=`$as_dirname -- "$file" ||
5673$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
5674 X"$file" : 'X\(//\)[^/]' \| \
5675 X"$file" : 'X\(//\)$' \| \
5676 X"$file" : 'X\(/\)' \| . 2>/dev/null ||
5677$as_echo X"$file" |
5678 sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
5679 s//\1/
5680 q
5681 }
5682 /^X\(\/\/\)[^/].*/{
5683 s//\1/
5684 q
5685 }
5686 /^X\(\/\/\)$/{
5687 s//\1/
5688 q
5689 }
5690 /^X\(\/\).*/{
5691 s//\1/
5692 q
5693 }
5694 s/.*/./; q'`
5695 as_dir=$dirpart/$fdir; as_fn_mkdir_p
5696 # echo "creating $dirpart/$file"
5697 echo '# dummy' > "$dirpart/$file"
5698 done
5699 done
5700}
5701 ;;
5702
5703 esac
5704done # for ac_tag
5705
5706
5707as_fn_exit 0
5708_ACEOF
5709ac_clean_files=$ac_clean_files_save
5710
5711test $ac_write_fail = 0 ||
5712 as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
5713
5714
5715# configure is writing to config.log, and then calls config.status.
5716# config.status does its own redirection, appending to config.log.
5717# Unfortunately, on DOS this fails, as config.log is still kept open
5718# by configure, so config.status won't be able to write to it; its
5719# output is simply discarded. So we exec the FD to /dev/null,
5720# effectively closing config.log, so it can be properly (re)opened and
5721# appended to by config.status. When coming back to configure, we
5722# need to make the FD available again.
5723if test "$no_create" != yes; then
5724 ac_cs_success=:
5725 ac_config_status_args=
5726 test "$silent" = yes &&
5727 ac_config_status_args="$ac_config_status_args --quiet"
5728 exec 5>/dev/null
5729 $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
5730 exec 5>>config.log
5731 # Use ||, not &&, to avoid exiting from the if with $? = 1, which
5732 # would make configure fail if this is the last instruction.
5733 $ac_cs_success || as_fn_exit 1
5734fi
5735if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
5736 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
5737$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
5738fi
5739
diff --git a/apps/plugins/puzzles/configure.ac b/apps/plugins/puzzles/src/configure.ac
index 3a38c95602..3a38c95602 100644
--- a/apps/plugins/puzzles/configure.ac
+++ b/apps/plugins/puzzles/src/configure.ac
diff --git a/apps/plugins/puzzles/cube.R b/apps/plugins/puzzles/src/cube.R
index 85b081ec76..85b081ec76 100644
--- a/apps/plugins/puzzles/cube.R
+++ b/apps/plugins/puzzles/src/cube.R
diff --git a/apps/plugins/puzzles/cube.c b/apps/plugins/puzzles/src/cube.c
index d0d9525130..a30dc10b3f 100644
--- a/apps/plugins/puzzles/cube.c
+++ b/apps/plugins/puzzles/src/cube.c
@@ -5,7 +5,7 @@
5#include <stdio.h> 5#include <stdio.h>
6#include <stdlib.h> 6#include <stdlib.h>
7#include <string.h> 7#include <string.h>
8#include "rbassert.h" 8#include <assert.h>
9#include <ctype.h> 9#include <ctype.h>
10#include <math.h> 10#include <math.h>
11 11
@@ -1737,7 +1737,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
1737const struct game thegame = { 1737const struct game thegame = {
1738 "Cube", "games.cube", "cube", 1738 "Cube", "games.cube", "cube",
1739 default_params, 1739 default_params,
1740 game_fetch_preset, 1740 game_fetch_preset, NULL,
1741 decode_params, 1741 decode_params,
1742 encode_params, 1742 encode_params,
1743 free_params, 1743 free_params,
diff --git a/apps/plugins/puzzles/src/cube.html b/apps/plugins/puzzles/src/cube.html
new file mode 100644
index 0000000000..0e32be600e
--- /dev/null
+++ b/apps/plugins/puzzles/src/cube.html
@@ -0,0 +1,57 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Cube</title>
7<link rel="previous" href="net.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="fifteen.html">
12</head>
13<body>
14<p><a href="net.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="fifteen.html">Next</a></p>
15<h1><a name="C4"></a>Chapter 4: <a name="i0"></a>Cube</h1>
16<p>
17This is another one I originally saw as a web game. This one was a Java game <a href="#p0">[2]</a>, by Paul Scott. You have a grid of 16 squares, six of which are blue; on one square rests a cube. Your move is to use the arrow keys to roll the cube through 90 degrees so that it moves to an adjacent square. If you roll the cube on to a blue square, the blue square is picked up on one face of the cube; if you roll a blue face of the cube on to a non-blue square, the blueness is put down again. (In general, whenever you roll the cube, the two faces that come into contact swap colours.) Your job is to get all six blue squares on to the six faces of the cube at the same time. Count your moves and try to do it in as few as possible.
18</p>
19<p>
20Unlike the original Java game, my version has an additional feature: once you've mastered the game with a cube rolling on a square grid, you can change to a triangular grid and roll any of a tetrahedron, an octahedron or an icosahedron.
21</p>
22<p><a name="p0"></a>
23[2] <a href="http://www3.sympatico.ca/paulscott/cube/cube.htm"><code>http://www3.sympatico.ca/paulscott/cube/cube.htm</code></a>
24</p>
25<h2><a name="S4.1"></a>4.1 <a name="i1"></a>Cube controls</h2>
26<p>
27This game can be played with either the keyboard or the mouse.
28</p>
29<p>
30Left-clicking anywhere on the window will move the cube (or other solid) towards the mouse pointer.
31</p>
32<p>
33The arrow keys can also used to roll the cube on its square grid in the four cardinal directions. On the triangular grids, the mapping of arrow keys to directions is more approximate. Vertical movement is disallowed where it doesn't make sense. The four keys surrounding the arrow keys on the numeric keypad (&#8216;7&#8217;, &#8216;9&#8217;, &#8216;1&#8217;, &#8216;3&#8217;) can be used for diagonal movement.
34</p>
35<p>
36(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
37</p>
38<h2><a name="S4.2"></a>4.2 <a name="i2"></a>Cube parameters</h2>
39<p>
40These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
41</p>
42<dl><dt>
43<em>Type of solid</em>
44</dt>
45<dd>
46Selects the solid to roll (and hence the shape of the grid): tetrahedron, cube, octahedron, or icosahedron.
47</dd>
48<dt>
49<em>Width / top</em>, <em>Height / bottom</em>
50</dt>
51<dd>
52On a square grid, horizontal and vertical dimensions. On a triangular grid, the number of triangles on the top and bottom rows respectively.
53</dd>
54</dl>
55
56<hr><address></address></body>
57</html>
diff --git a/apps/plugins/puzzles/src/depcomp b/apps/plugins/puzzles/src/depcomp
new file mode 100755
index 0000000000..fc98710e2a
--- /dev/null
+++ b/apps/plugins/puzzles/src/depcomp
@@ -0,0 +1,791 @@
1#! /bin/sh
2# depcomp - compile a program generating dependencies as side-effects
3
4scriptversion=2013-05-30.07; # UTC
5
6# Copyright (C) 1999-2014 Free Software Foundation, Inc.
7
8# This program is free software; you can redistribute it and/or modify
9# it under the terms of the GNU General Public License as published by
10# the Free Software Foundation; either version 2, or (at your option)
11# any later version.
12
13# This program is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16# GNU General Public License for more details.
17
18# You should have received a copy of the GNU General Public License
19# along with this program. If not, see <http://www.gnu.org/licenses/>.
20
21# As a special exception to the GNU General Public License, if you
22# distribute this file as part of a program that contains a
23# configuration script generated by Autoconf, you may include it under
24# the same distribution terms that you use for the rest of that program.
25
26# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
27
28case $1 in
29 '')
30 echo "$0: No command. Try '$0 --help' for more information." 1>&2
31 exit 1;
32 ;;
33 -h | --h*)
34 cat <<\EOF
35Usage: depcomp [--help] [--version] PROGRAM [ARGS]
36
37Run PROGRAMS ARGS to compile a file, generating dependencies
38as side-effects.
39
40Environment variables:
41 depmode Dependency tracking mode.
42 source Source file read by 'PROGRAMS ARGS'.
43 object Object file output by 'PROGRAMS ARGS'.
44 DEPDIR directory where to store dependencies.
45 depfile Dependency file to output.
46 tmpdepfile Temporary file to use when outputting dependencies.
47 libtool Whether libtool is used (yes/no).
48
49Report bugs to <bug-automake@gnu.org>.
50EOF
51 exit $?
52 ;;
53 -v | --v*)
54 echo "depcomp $scriptversion"
55 exit $?
56 ;;
57esac
58
59# Get the directory component of the given path, and save it in the
60# global variables '$dir'. Note that this directory component will
61# be either empty or ending with a '/' character. This is deliberate.
62set_dir_from ()
63{
64 case $1 in
65 */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
66 *) dir=;;
67 esac
68}
69
70# Get the suffix-stripped basename of the given path, and save it the
71# global variable '$base'.
72set_base_from ()
73{
74 base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
75}
76
77# If no dependency file was actually created by the compiler invocation,
78# we still have to create a dummy depfile, to avoid errors with the
79# Makefile "include basename.Plo" scheme.
80make_dummy_depfile ()
81{
82 echo "#dummy" > "$depfile"
83}
84
85# Factor out some common post-processing of the generated depfile.
86# Requires the auxiliary global variable '$tmpdepfile' to be set.
87aix_post_process_depfile ()
88{
89 # If the compiler actually managed to produce a dependency file,
90 # post-process it.
91 if test -f "$tmpdepfile"; then
92 # Each line is of the form 'foo.o: dependency.h'.
93 # Do two passes, one to just change these to
94 # $object: dependency.h
95 # and one to simply output
96 # dependency.h:
97 # which is needed to avoid the deleted-header problem.
98 { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
99 sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
100 } > "$depfile"
101 rm -f "$tmpdepfile"
102 else
103 make_dummy_depfile
104 fi
105}
106
107# A tabulation character.
108tab=' '
109# A newline character.
110nl='
111'
112# Character ranges might be problematic outside the C locale.
113# These definitions help.
114upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
115lower=abcdefghijklmnopqrstuvwxyz
116digits=0123456789
117alpha=${upper}${lower}
118
119if test -z "$depmode" || test -z "$source" || test -z "$object"; then
120 echo "depcomp: Variables source, object and depmode must be set" 1>&2
121 exit 1
122fi
123
124# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
125depfile=${depfile-`echo "$object" |
126 sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
127tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
128
129rm -f "$tmpdepfile"
130
131# Avoid interferences from the environment.
132gccflag= dashmflag=
133
134# Some modes work just like other modes, but use different flags. We
135# parameterize here, but still list the modes in the big case below,
136# to make depend.m4 easier to write. Note that we *cannot* use a case
137# here, because this file can only contain one case statement.
138if test "$depmode" = hp; then
139 # HP compiler uses -M and no extra arg.
140 gccflag=-M
141 depmode=gcc
142fi
143
144if test "$depmode" = dashXmstdout; then
145 # This is just like dashmstdout with a different argument.
146 dashmflag=-xM
147 depmode=dashmstdout
148fi
149
150cygpath_u="cygpath -u -f -"
151if test "$depmode" = msvcmsys; then
152 # This is just like msvisualcpp but w/o cygpath translation.
153 # Just convert the backslash-escaped backslashes to single forward
154 # slashes to satisfy depend.m4
155 cygpath_u='sed s,\\\\,/,g'
156 depmode=msvisualcpp
157fi
158
159if test "$depmode" = msvc7msys; then
160 # This is just like msvc7 but w/o cygpath translation.
161 # Just convert the backslash-escaped backslashes to single forward
162 # slashes to satisfy depend.m4
163 cygpath_u='sed s,\\\\,/,g'
164 depmode=msvc7
165fi
166
167if test "$depmode" = xlc; then
168 # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
169 gccflag=-qmakedep=gcc,-MF
170 depmode=gcc
171fi
172
173case "$depmode" in
174gcc3)
175## gcc 3 implements dependency tracking that does exactly what
176## we want. Yay! Note: for some reason libtool 1.4 doesn't like
177## it if -MD -MP comes after the -MF stuff. Hmm.
178## Unfortunately, FreeBSD c89 acceptance of flags depends upon
179## the command line argument order; so add the flags where they
180## appear in depend2.am. Note that the slowdown incurred here
181## affects only configure: in makefiles, %FASTDEP% shortcuts this.
182 for arg
183 do
184 case $arg in
185 -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
186 *) set fnord "$@" "$arg" ;;
187 esac
188 shift # fnord
189 shift # $arg
190 done
191 "$@"
192 stat=$?
193 if test $stat -ne 0; then
194 rm -f "$tmpdepfile"
195 exit $stat
196 fi
197 mv "$tmpdepfile" "$depfile"
198 ;;
199
200gcc)
201## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
202## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
203## (see the conditional assignment to $gccflag above).
204## There are various ways to get dependency output from gcc. Here's
205## why we pick this rather obscure method:
206## - Don't want to use -MD because we'd like the dependencies to end
207## up in a subdir. Having to rename by hand is ugly.
208## (We might end up doing this anyway to support other compilers.)
209## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
210## -MM, not -M (despite what the docs say). Also, it might not be
211## supported by the other compilers which use the 'gcc' depmode.
212## - Using -M directly means running the compiler twice (even worse
213## than renaming).
214 if test -z "$gccflag"; then
215 gccflag=-MD,
216 fi
217 "$@" -Wp,"$gccflag$tmpdepfile"
218 stat=$?
219 if test $stat -ne 0; then
220 rm -f "$tmpdepfile"
221 exit $stat
222 fi
223 rm -f "$depfile"
224 echo "$object : \\" > "$depfile"
225 # The second -e expression handles DOS-style file names with drive
226 # letters.
227 sed -e 's/^[^:]*: / /' \
228 -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
229## This next piece of magic avoids the "deleted header file" problem.
230## The problem is that when a header file which appears in a .P file
231## is deleted, the dependency causes make to die (because there is
232## typically no way to rebuild the header). We avoid this by adding
233## dummy dependencies for each header file. Too bad gcc doesn't do
234## this for us directly.
235## Some versions of gcc put a space before the ':'. On the theory
236## that the space means something, we add a space to the output as
237## well. hp depmode also adds that space, but also prefixes the VPATH
238## to the object. Take care to not repeat it in the output.
239## Some versions of the HPUX 10.20 sed can't process this invocation
240## correctly. Breaking it into two sed invocations is a workaround.
241 tr ' ' "$nl" < "$tmpdepfile" \
242 | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
243 | sed -e 's/$/ :/' >> "$depfile"
244 rm -f "$tmpdepfile"
245 ;;
246
247hp)
248 # This case exists only to let depend.m4 do its work. It works by
249 # looking at the text of this script. This case will never be run,
250 # since it is checked for above.
251 exit 1
252 ;;
253
254sgi)
255 if test "$libtool" = yes; then
256 "$@" "-Wp,-MDupdate,$tmpdepfile"
257 else
258 "$@" -MDupdate "$tmpdepfile"
259 fi
260 stat=$?
261 if test $stat -ne 0; then
262 rm -f "$tmpdepfile"
263 exit $stat
264 fi
265 rm -f "$depfile"
266
267 if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
268 echo "$object : \\" > "$depfile"
269 # Clip off the initial element (the dependent). Don't try to be
270 # clever and replace this with sed code, as IRIX sed won't handle
271 # lines with more than a fixed number of characters (4096 in
272 # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
273 # the IRIX cc adds comments like '#:fec' to the end of the
274 # dependency line.
275 tr ' ' "$nl" < "$tmpdepfile" \
276 | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
277 | tr "$nl" ' ' >> "$depfile"
278 echo >> "$depfile"
279 # The second pass generates a dummy entry for each header file.
280 tr ' ' "$nl" < "$tmpdepfile" \
281 | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
282 >> "$depfile"
283 else
284 make_dummy_depfile
285 fi
286 rm -f "$tmpdepfile"
287 ;;
288
289xlc)
290 # This case exists only to let depend.m4 do its work. It works by
291 # looking at the text of this script. This case will never be run,
292 # since it is checked for above.
293 exit 1
294 ;;
295
296aix)
297 # The C for AIX Compiler uses -M and outputs the dependencies
298 # in a .u file. In older versions, this file always lives in the
299 # current directory. Also, the AIX compiler puts '$object:' at the
300 # start of each line; $object doesn't have directory information.
301 # Version 6 uses the directory in both cases.
302 set_dir_from "$object"
303 set_base_from "$object"
304 if test "$libtool" = yes; then
305 tmpdepfile1=$dir$base.u
306 tmpdepfile2=$base.u
307 tmpdepfile3=$dir.libs/$base.u
308 "$@" -Wc,-M
309 else
310 tmpdepfile1=$dir$base.u
311 tmpdepfile2=$dir$base.u
312 tmpdepfile3=$dir$base.u
313 "$@" -M
314 fi
315 stat=$?
316 if test $stat -ne 0; then
317 rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
318 exit $stat
319 fi
320
321 for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
322 do
323 test -f "$tmpdepfile" && break
324 done
325 aix_post_process_depfile
326 ;;
327
328tcc)
329 # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
330 # FIXME: That version still under development at the moment of writing.
331 # Make that this statement remains true also for stable, released
332 # versions.
333 # It will wrap lines (doesn't matter whether long or short) with a
334 # trailing '\', as in:
335 #
336 # foo.o : \
337 # foo.c \
338 # foo.h \
339 #
340 # It will put a trailing '\' even on the last line, and will use leading
341 # spaces rather than leading tabs (at least since its commit 0394caf7
342 # "Emit spaces for -MD").
343 "$@" -MD -MF "$tmpdepfile"
344 stat=$?
345 if test $stat -ne 0; then
346 rm -f "$tmpdepfile"
347 exit $stat
348 fi
349 rm -f "$depfile"
350 # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
351 # We have to change lines of the first kind to '$object: \'.
352 sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
353 # And for each line of the second kind, we have to emit a 'dep.h:'
354 # dummy dependency, to avoid the deleted-header problem.
355 sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
356 rm -f "$tmpdepfile"
357 ;;
358
359## The order of this option in the case statement is important, since the
360## shell code in configure will try each of these formats in the order
361## listed in this file. A plain '-MD' option would be understood by many
362## compilers, so we must ensure this comes after the gcc and icc options.
363pgcc)
364 # Portland's C compiler understands '-MD'.
365 # Will always output deps to 'file.d' where file is the root name of the
366 # source file under compilation, even if file resides in a subdirectory.
367 # The object file name does not affect the name of the '.d' file.
368 # pgcc 10.2 will output
369 # foo.o: sub/foo.c sub/foo.h
370 # and will wrap long lines using '\' :
371 # foo.o: sub/foo.c ... \
372 # sub/foo.h ... \
373 # ...
374 set_dir_from "$object"
375 # Use the source, not the object, to determine the base name, since
376 # that's sadly what pgcc will do too.
377 set_base_from "$source"
378 tmpdepfile=$base.d
379
380 # For projects that build the same source file twice into different object
381 # files, the pgcc approach of using the *source* file root name can cause
382 # problems in parallel builds. Use a locking strategy to avoid stomping on
383 # the same $tmpdepfile.
384 lockdir=$base.d-lock
385 trap "
386 echo '$0: caught signal, cleaning up...' >&2
387 rmdir '$lockdir'
388 exit 1
389 " 1 2 13 15
390 numtries=100
391 i=$numtries
392 while test $i -gt 0; do
393 # mkdir is a portable test-and-set.
394 if mkdir "$lockdir" 2>/dev/null; then
395 # This process acquired the lock.
396 "$@" -MD
397 stat=$?
398 # Release the lock.
399 rmdir "$lockdir"
400 break
401 else
402 # If the lock is being held by a different process, wait
403 # until the winning process is done or we timeout.
404 while test -d "$lockdir" && test $i -gt 0; do
405 sleep 1
406 i=`expr $i - 1`
407 done
408 fi
409 i=`expr $i - 1`
410 done
411 trap - 1 2 13 15
412 if test $i -le 0; then
413 echo "$0: failed to acquire lock after $numtries attempts" >&2
414 echo "$0: check lockdir '$lockdir'" >&2
415 exit 1
416 fi
417
418 if test $stat -ne 0; then
419 rm -f "$tmpdepfile"
420 exit $stat
421 fi
422 rm -f "$depfile"
423 # Each line is of the form `foo.o: dependent.h',
424 # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
425 # Do two passes, one to just change these to
426 # `$object: dependent.h' and one to simply `dependent.h:'.
427 sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
428 # Some versions of the HPUX 10.20 sed can't process this invocation
429 # correctly. Breaking it into two sed invocations is a workaround.
430 sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
431 | sed -e 's/$/ :/' >> "$depfile"
432 rm -f "$tmpdepfile"
433 ;;
434
435hp2)
436 # The "hp" stanza above does not work with aCC (C++) and HP's ia64
437 # compilers, which have integrated preprocessors. The correct option
438 # to use with these is +Maked; it writes dependencies to a file named
439 # 'foo.d', which lands next to the object file, wherever that
440 # happens to be.
441 # Much of this is similar to the tru64 case; see comments there.
442 set_dir_from "$object"
443 set_base_from "$object"
444 if test "$libtool" = yes; then
445 tmpdepfile1=$dir$base.d
446 tmpdepfile2=$dir.libs/$base.d
447 "$@" -Wc,+Maked
448 else
449 tmpdepfile1=$dir$base.d
450 tmpdepfile2=$dir$base.d
451 "$@" +Maked
452 fi
453 stat=$?
454 if test $stat -ne 0; then
455 rm -f "$tmpdepfile1" "$tmpdepfile2"
456 exit $stat
457 fi
458
459 for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
460 do
461 test -f "$tmpdepfile" && break
462 done
463 if test -f "$tmpdepfile"; then
464 sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
465 # Add 'dependent.h:' lines.
466 sed -ne '2,${
467 s/^ *//
468 s/ \\*$//
469 s/$/:/
470 p
471 }' "$tmpdepfile" >> "$depfile"
472 else
473 make_dummy_depfile
474 fi
475 rm -f "$tmpdepfile" "$tmpdepfile2"
476 ;;
477
478tru64)
479 # The Tru64 compiler uses -MD to generate dependencies as a side
480 # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
481 # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
482 # dependencies in 'foo.d' instead, so we check for that too.
483 # Subdirectories are respected.
484 set_dir_from "$object"
485 set_base_from "$object"
486
487 if test "$libtool" = yes; then
488 # Libtool generates 2 separate objects for the 2 libraries. These
489 # two compilations output dependencies in $dir.libs/$base.o.d and
490 # in $dir$base.o.d. We have to check for both files, because
491 # one of the two compilations can be disabled. We should prefer
492 # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
493 # automatically cleaned when .libs/ is deleted, while ignoring
494 # the former would cause a distcleancheck panic.
495 tmpdepfile1=$dir$base.o.d # libtool 1.5
496 tmpdepfile2=$dir.libs/$base.o.d # Likewise.
497 tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504
498 "$@" -Wc,-MD
499 else
500 tmpdepfile1=$dir$base.d
501 tmpdepfile2=$dir$base.d
502 tmpdepfile3=$dir$base.d
503 "$@" -MD
504 fi
505
506 stat=$?
507 if test $stat -ne 0; then
508 rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
509 exit $stat
510 fi
511
512 for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
513 do
514 test -f "$tmpdepfile" && break
515 done
516 # Same post-processing that is required for AIX mode.
517 aix_post_process_depfile
518 ;;
519
520msvc7)
521 if test "$libtool" = yes; then
522 showIncludes=-Wc,-showIncludes
523 else
524 showIncludes=-showIncludes
525 fi
526 "$@" $showIncludes > "$tmpdepfile"
527 stat=$?
528 grep -v '^Note: including file: ' "$tmpdepfile"
529 if test $stat -ne 0; then
530 rm -f "$tmpdepfile"
531 exit $stat
532 fi
533 rm -f "$depfile"
534 echo "$object : \\" > "$depfile"
535 # The first sed program below extracts the file names and escapes
536 # backslashes for cygpath. The second sed program outputs the file
537 # name when reading, but also accumulates all include files in the
538 # hold buffer in order to output them again at the end. This only
539 # works with sed implementations that can handle large buffers.
540 sed < "$tmpdepfile" -n '
541/^Note: including file: *\(.*\)/ {
542 s//\1/
543 s/\\/\\\\/g
544 p
545}' | $cygpath_u | sort -u | sed -n '
546s/ /\\ /g
547s/\(.*\)/'"$tab"'\1 \\/p
548s/.\(.*\) \\/\1:/
549H
550$ {
551 s/.*/'"$tab"'/
552 G
553 p
554}' >> "$depfile"
555 echo >> "$depfile" # make sure the fragment doesn't end with a backslash
556 rm -f "$tmpdepfile"
557 ;;
558
559msvc7msys)
560 # This case exists only to let depend.m4 do its work. It works by
561 # looking at the text of this script. This case will never be run,
562 # since it is checked for above.
563 exit 1
564 ;;
565
566#nosideeffect)
567 # This comment above is used by automake to tell side-effect
568 # dependency tracking mechanisms from slower ones.
569
570dashmstdout)
571 # Important note: in order to support this mode, a compiler *must*
572 # always write the preprocessed file to stdout, regardless of -o.
573 "$@" || exit $?
574
575 # Remove the call to Libtool.
576 if test "$libtool" = yes; then
577 while test "X$1" != 'X--mode=compile'; do
578 shift
579 done
580 shift
581 fi
582
583 # Remove '-o $object'.
584 IFS=" "
585 for arg
586 do
587 case $arg in
588 -o)
589 shift
590 ;;
591 $object)
592 shift
593 ;;
594 *)
595 set fnord "$@" "$arg"
596 shift # fnord
597 shift # $arg
598 ;;
599 esac
600 done
601
602 test -z "$dashmflag" && dashmflag=-M
603 # Require at least two characters before searching for ':'
604 # in the target name. This is to cope with DOS-style filenames:
605 # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
606 "$@" $dashmflag |
607 sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
608 rm -f "$depfile"
609 cat < "$tmpdepfile" > "$depfile"
610 # Some versions of the HPUX 10.20 sed can't process this sed invocation
611 # correctly. Breaking it into two sed invocations is a workaround.
612 tr ' ' "$nl" < "$tmpdepfile" \
613 | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
614 | sed -e 's/$/ :/' >> "$depfile"
615 rm -f "$tmpdepfile"
616 ;;
617
618dashXmstdout)
619 # This case only exists to satisfy depend.m4. It is never actually
620 # run, as this mode is specially recognized in the preamble.
621 exit 1
622 ;;
623
624makedepend)
625 "$@" || exit $?
626 # Remove any Libtool call
627 if test "$libtool" = yes; then
628 while test "X$1" != 'X--mode=compile'; do
629 shift
630 done
631 shift
632 fi
633 # X makedepend
634 shift
635 cleared=no eat=no
636 for arg
637 do
638 case $cleared in
639 no)
640 set ""; shift
641 cleared=yes ;;
642 esac
643 if test $eat = yes; then
644 eat=no
645 continue
646 fi
647 case "$arg" in
648 -D*|-I*)
649 set fnord "$@" "$arg"; shift ;;
650 # Strip any option that makedepend may not understand. Remove
651 # the object too, otherwise makedepend will parse it as a source file.
652 -arch)
653 eat=yes ;;
654 -*|$object)
655 ;;
656 *)
657 set fnord "$@" "$arg"; shift ;;
658 esac
659 done
660 obj_suffix=`echo "$object" | sed 's/^.*\././'`
661 touch "$tmpdepfile"
662 ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
663 rm -f "$depfile"
664 # makedepend may prepend the VPATH from the source file name to the object.
665 # No need to regex-escape $object, excess matching of '.' is harmless.
666 sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
667 # Some versions of the HPUX 10.20 sed can't process the last invocation
668 # correctly. Breaking it into two sed invocations is a workaround.
669 sed '1,2d' "$tmpdepfile" \
670 | tr ' ' "$nl" \
671 | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
672 | sed -e 's/$/ :/' >> "$depfile"
673 rm -f "$tmpdepfile" "$tmpdepfile".bak
674 ;;
675
676cpp)
677 # Important note: in order to support this mode, a compiler *must*
678 # always write the preprocessed file to stdout.
679 "$@" || exit $?
680
681 # Remove the call to Libtool.
682 if test "$libtool" = yes; then
683 while test "X$1" != 'X--mode=compile'; do
684 shift
685 done
686 shift
687 fi
688
689 # Remove '-o $object'.
690 IFS=" "
691 for arg
692 do
693 case $arg in
694 -o)
695 shift
696 ;;
697 $object)
698 shift
699 ;;
700 *)
701 set fnord "$@" "$arg"
702 shift # fnord
703 shift # $arg
704 ;;
705 esac
706 done
707
708 "$@" -E \
709 | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
710 -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
711 | sed '$ s: \\$::' > "$tmpdepfile"
712 rm -f "$depfile"
713 echo "$object : \\" > "$depfile"
714 cat < "$tmpdepfile" >> "$depfile"
715 sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
716 rm -f "$tmpdepfile"
717 ;;
718
719msvisualcpp)
720 # Important note: in order to support this mode, a compiler *must*
721 # always write the preprocessed file to stdout.
722 "$@" || exit $?
723
724 # Remove the call to Libtool.
725 if test "$libtool" = yes; then
726 while test "X$1" != 'X--mode=compile'; do
727 shift
728 done
729 shift
730 fi
731
732 IFS=" "
733 for arg
734 do
735 case "$arg" in
736 -o)
737 shift
738 ;;
739 $object)
740 shift
741 ;;
742 "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
743 set fnord "$@"
744 shift
745 shift
746 ;;
747 *)
748 set fnord "$@" "$arg"
749 shift
750 shift
751 ;;
752 esac
753 done
754 "$@" -E 2>/dev/null |
755 sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
756 rm -f "$depfile"
757 echo "$object : \\" > "$depfile"
758 sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
759 echo "$tab" >> "$depfile"
760 sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
761 rm -f "$tmpdepfile"
762 ;;
763
764msvcmsys)
765 # This case exists only to let depend.m4 do its work. It works by
766 # looking at the text of this script. This case will never be run,
767 # since it is checked for above.
768 exit 1
769 ;;
770
771none)
772 exec "$@"
773 ;;
774
775*)
776 echo "Unknown depmode $depmode" 1>&2
777 exit 1
778 ;;
779esac
780
781exit 0
782
783# Local Variables:
784# mode: shell-script
785# sh-indentation: 2
786# eval: (add-hook 'write-file-hooks 'time-stamp)
787# time-stamp-start: "scriptversion="
788# time-stamp-format: "%:y-%02m-%02d.%02H"
789# time-stamp-time-zone: "UTC"
790# time-stamp-end: "; # UTC"
791# End:
diff --git a/apps/plugins/puzzles/desktop.pl b/apps/plugins/puzzles/src/desktop.pl
index 204c0ce262..204c0ce262 100755
--- a/apps/plugins/puzzles/desktop.pl
+++ b/apps/plugins/puzzles/src/desktop.pl
diff --git a/apps/plugins/puzzles/devel.but b/apps/plugins/puzzles/src/devel.but
index 9befcadcb7..a38fdda5d0 100644
--- a/apps/plugins/puzzles/devel.but
+++ b/apps/plugins/puzzles/src/devel.but
@@ -391,8 +391,9 @@ with the default values, and returns a pointer to it.
391 391
392\c int (*fetch_preset)(int i, char **name, game_params **params); 392\c int (*fetch_preset)(int i, char **name, game_params **params);
393 393
394This function is used to populate the \q{Type} menu, which provides 394This function is one of the two APIs a back end can provide to
395a list of conveniently accessible preset parameters for most games. 395populate the \q{Type} menu, which provides a list of conveniently
396accessible preset parameters for most games.
396 397
397The function is called with \c{i} equal to the index of the preset 398The function is called with \c{i} equal to the index of the preset
398required (numbering from zero). It returns \cw{FALSE} if that preset 399required (numbering from zero). It returns \cw{FALSE} if that preset
@@ -406,6 +407,33 @@ returns \cw{TRUE}.
406If the game does not wish to support any presets at all, this 407If the game does not wish to support any presets at all, this
407function is permitted to return \cw{FALSE} always. 408function is permitted to return \cw{FALSE} always.
408 409
410If the game wants to return presets in the form of a hierarchical menu
411instead of a flat list (and, indeed, even if it doesn't), then it may
412set this function pointer to \cw{NULL}, and instead fill in the
413alternative function pointer \cw{preset_menu}
414(\k{backend-preset-menu}).
415
416\S{backend-preset-menu} \cw{preset_menu()}
417
418\c struct preset_menu *(*preset_menu)(void);
419
420This function is the more flexible of the two APIs by which a back end
421can define a collection of preset game parameters.
422
423This function simply returns a complete menu hierarchy, in the form of
424a \c{struct preset_menu} (see \k{midend-get-presets}) and further
425submenus (if it wishes) dangling off it. There are utility functions
426described in \k{utils-presets} to make it easy for the back end to
427construct this menu.
428
429If the game has no need to return a hierarchy of menus, it may instead
430opt to implement the \cw{fetch_preset()} function (see
431\k{backend-fetch-preset}).
432
433The game need not fill in the \c{id} fields in the preset menu
434structures. The mid-end will do that after it receives the structure
435from the game, and before passing it on to the front end.
436
409\S{backend-encode-params} \cw{encode_params()} 437\S{backend-encode-params} \cw{encode_params()}
410 438
411\c char *(*encode_params)(const game_params *params, int full); 439\c char *(*encode_params)(const game_params *params, int full);
@@ -2743,8 +2771,8 @@ these parameters until further notice.
2743 2771
2744The usual way in which the front end will have an actual 2772The usual way in which the front end will have an actual
2745\c{game_params} structure to pass to this function is if it had 2773\c{game_params} structure to pass to this function is if it had
2746previously got it from \cw{midend_fetch_preset()} 2774previously got it from \cw{midend_get_presets()}
2747(\k{midend-fetch-preset}). Thus, this function is usually called in 2775(\k{midend-get-presets}). Thus, this function is usually called in
2748response to the user making a selection from the presets menu. 2776response to the user making a selection from the presets menu.
2749 2777
2750\H{midend-get-params} \cw{midend_get_params()} 2778\H{midend-get-params} \cw{midend_get_params()}
@@ -2966,34 +2994,63 @@ One of the major purposes of timing in the mid-end is to perform
2966move animation. Therefore, calling this function is very likely to 2994move animation. Therefore, calling this function is very likely to
2967result in calls back to the front end's drawing API. 2995result in calls back to the front end's drawing API.
2968 2996
2969\H{midend-num-presets} \cw{midend_num_presets()} 2997\H{midend-get-presets} \cw{midend_get_presets()}
2970 2998
2971\c int midend_num_presets(midend *me); 2999\c struct preset_menu *midend_get_presets(midend *me, int *id_limit);
2972 3000
2973Returns the number of game parameter presets supplied by this game. 3001Returns a data structure describing this game's collection of preset
2974Front ends should use this function and \cw{midend_fetch_preset()} 3002game parameters, organised into a hierarchical structure of menus and
2975to configure their presets menu rather than calling the back end 3003submenus.
2976directly, since the mid-end adds standard customisation facilities.
2977(At the time of writing, those customisation facilities are
2978implemented hackily by means of environment variables, but it's not
2979impossible that they may become more full and formal in future.)
2980 3004
2981\H{midend-fetch-preset} \cw{midend_fetch_preset()} 3005The return value is a pointer to a data structure containing the
3006following fields (among others, which are not intended for front end
3007use):
2982 3008
2983\c void midend_fetch_preset(midend *me, int n, 3009\c struct preset_menu {
2984\c char **name, game_params **params); 3010\c int n_entries;
3011\c struct preset_menu_entry *entries;
3012\c /* and other things */
3013\e iiiiiiiiiiiiiiiiiiiiii
3014\c };
2985 3015
2986Returns one of the preset game parameter structures for the game. On 3016Those fields describe the intended contents of one particular menu in
2987input \c{n} must be a non-negative integer and less than the value 3017the hierarchy. \cq{entries} points to an array of \cq{n_entries}
2988returned from \cw{midend_num_presets()}. On output, \c{*name} is set 3018items, each of which is a structure containing the following fields:
2989to an ASCII string suitable for entering in the game's presets menu, 3019
2990and \c{*params} is set to the corresponding \c{game_params} 3020\c struct preset_menu_entry {
2991structure. 3021\c char *title;
3022\c game_params *params;
3023\c struct preset_menu *submenu;
3024\c int id;
3025\c };
2992 3026
2993Both of the two output values are dynamically allocated, but they 3027Of these fields, \cq{title} and \cq{id} are present in every entry,
2994are owned by the mid-end structure: the front end should not ever 3028giving (respectively) the textual name of the menu item and an integer
2995free them directly, because they will be freed automatically during 3029identifier for it. The integer id will correspond to the one returned
2996\cw{midend_free()}. 3030by \c{midend_which_preset} (\k{midend-which-preset}), when that preset
3031is the one selected.
3032
3033The other two fields are mutually exclusive. Each \c{struct
3034preset_menu_entry} will have one of those fields \cw{NULL} and the
3035other one non-null. If the menu item is an actual preset, then
3036\cq{params} will point to the set of game parameters that go with the
3037name; if it's a submenu, then \cq{submenu} instead will be non-null,
3038and will point at a subsidiary \c{struct preset_menu}.
3039
3040The complete hierarchy of these structures is owned by the mid-end,
3041and will be freed when the mid-end is freed. The front end should not
3042attempt to free any of it.
3043
3044The integer identifiers will be allocated densely from 0 upwards, so
3045that it's reasonable for the front end to allocate an array which uses
3046them as indices, if it needs to store information per preset menu
3047item. For this purpose, the front end may pass the second parameter
3048\cq{id_limit} to \cw{midend_get_presets} as the address of an \c{int}
3049variable, into which \cw{midend_get_presets} will write an integer one
3050larger than the largest id number actually used (i.e. the number of
3051elements the front end would need in the array).
3052
3053Submenu-type entries also have integer identifiers.
2997 3054
2998\H{midend-which-preset} \cw{midend_which_preset()} 3055\H{midend-which-preset} \cw{midend_which_preset()}
2999 3056
@@ -3005,6 +3062,10 @@ no preset matches. Front ends could use this to maintain a tick
3005beside one of the items in the menu (or tick the \q{Custom} option 3062beside one of the items in the menu (or tick the \q{Custom} option
3006if the return value is less than zero). 3063if the return value is less than zero).
3007 3064
3065The returned index value (if non-negative) will match the \c{id} field
3066of the corresponding \cw{struct preset_menu_entry} returned by
3067\c{midend_get_presets()} (\k{midend-get-presets}).
3068
3008\H{midend-wants-statusbar} \cw{midend_wants_statusbar()} 3069\H{midend-wants-statusbar} \cw{midend_wants_statusbar()}
3009 3070
3010\c int midend_wants_statusbar(midend *me); 3071\c int midend_wants_statusbar(midend *me);
@@ -3535,6 +3596,63 @@ single element (typically measured using \c{sizeof}). \c{rs} is a
3535\c{random_state} used to generate all the random numbers for the 3596\c{random_state} used to generate all the random numbers for the
3536shuffling process. 3597shuffling process.
3537 3598
3599\H{utils-presets} Presets menu management
3600
3601The function \c{midend_get_presets()} (\k{midend-get-presets}) returns
3602a data structure describing a menu hierarchy. Back ends can also
3603choose to provide such a structure to the mid-end, if they want to
3604group their presets hierarchically. To make this easy, there are a few
3605utility functions to construct preset menu structures, and also one
3606intended for front-end use.
3607
3608\S{utils-preset-menu-new} \cw{preset_menu_new()}
3609
3610\c struct preset_menu *preset_menu_new(void);
3611
3612Allocates a new \c{struct preset_menu}, and initialises it to hold no
3613menu items.
3614
3615\S{utils-preset-menu-add_submenu} \cw{preset_menu_add_submenu()}
3616
3617\c struct preset_menu *preset_menu_add_submenu
3618\c (struct preset_menu *parent, char *title);
3619
3620Adds a new submenu to the end of an existing preset menu, and returns
3621a pointer to a newly allocated \c{struct preset_menu} describing the
3622submenu.
3623
3624The string parameter \cq{title} must be dynamically allocated by the
3625caller. The preset-menu structure will take ownership of it, so the
3626caller must not free it.
3627
3628\S{utils-preset-menu-add-preset} \cw{preset_menu_add_preset()}
3629
3630\c void preset_menu_add_preset
3631\c (struct preset_menu *menu, char *title, game_params *params);
3632
3633Adds a preset game configuration to the end of a preset menu.
3634
3635Both the string parameter \cq{title} and the game parameter structure
3636\cq{params} itself must be dynamically allocated by the caller. The
3637preset-menu structure will take ownership of it, so the caller must
3638not free it.
3639
3640\S{utils-preset-menu-lookup-by-id} \cw{preset_menu_lookup_by_id()}
3641
3642\c game_params *preset_menu_lookup_by_id
3643\c (struct preset_menu *menu, int id);
3644
3645Given a numeric index, searches recursively through a preset menu
3646hierarchy to find the corresponding menu entry, and returns a pointer
3647to its existing \c{game_params} structure.
3648
3649This function is intended for front end use (but front ends need not
3650use it if they prefer to do things another way). If a front end finds
3651it inconvenient to store anything more than a numeric index alongside
3652each menu item, then this function provides an easy way for the front
3653end to get back the actual game parameters corresponding to a menu
3654item that the user has selected.
3655
3538\H{utils-alloc} Memory allocation 3656\H{utils-alloc} Memory allocation
3539 3657
3540Puzzles has some central wrappers on the standard memory allocation 3658Puzzles has some central wrappers on the standard memory allocation
diff --git a/apps/plugins/puzzles/divvy.c b/apps/plugins/puzzles/src/divvy.c
index dfd409c9e0..517e3ddbb0 100644
--- a/apps/plugins/puzzles/divvy.c
+++ b/apps/plugins/puzzles/src/divvy.c
@@ -185,7 +185,7 @@
185 * think of. 185 * think of.
186 */ 186 */
187 187
188#include "rbassert.h" 188#include <assert.h>
189#include <stdio.h> 189#include <stdio.h>
190#include <stdlib.h> 190#include <stdlib.h>
191#include <stddef.h> 191#include <stddef.h>
diff --git a/apps/plugins/puzzles/src/docindex.html b/apps/plugins/puzzles/src/docindex.html
new file mode 100644
index 0000000000..8ed483bbe1
--- /dev/null
+++ b/apps/plugins/puzzles/src/docindex.html
@@ -0,0 +1,217 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title></title>
7<link rel="previous" href="licence.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10</head>
11<body>
12<p><a href="licence.html">Previous</a> | <a href="index.html">Contents</a> | Index | Next</p>
13<h1><a name="Index"></a>Index</h1><p>
14Black Box: <a href="blackbox.html#i0">Chapter 19</a><br>
15Bridges: <a href="bridges.html#i0">Chapter 26</a><br>
16bugs: <a href="intro.html#i7">Chapter 1</a><br>
17command line: <a href="common.html#i23">Section 2.2</a>, <a href="common.html#i32">Section 2.4</a>, <a href="common.html#i36">Section 2.5</a><br>
18common features: <a href="common.html#i0">Chapter 2</a><br>
19controls: <a href="common.html#i1">Section 2.1</a><br>
20controls, for Black Box: <a href="blackbox.html#i1">Section 19.1</a><br>
21controls, for Bridges: <a href="bridges.html#i2">Section 26.1</a><br>
22controls, for Cube: <a href="cube.html#i1">Section 4.1</a><br>
23controls, for Dominosa: <a href="dominosa.html#i1">Section 17.1</a><br>
24controls, for Fifteen: <a href="fifteen.html#i2">Section 5.1</a><br>
25controls, for Filling: <a href="filling.html#i2">Section 29.1</a><br>
26controls, for Flip: <a href="flip.html#i1">Section 14.1</a><br>
27controls, for Flood: <a href="flood.html#i1">Section 39.1</a><br>
28controls, for Galaxies: <a href="galaxies.html#i2">Section 28.1</a><br>
29controls, for Guess: <a href="guess.html#i2">Section 15.1</a><br>
30controls, for Inertia: <a href="inertia.html#i1">Section 24.1</a><br>
31controls, for Keen: <a href="keen.html#i2">Section 30.1</a><br>
32controls, for Light Up: <a href="lightup.html#i2">Section 21.1</a><br>
33controls, for Loopy: <a href="loopy.html#i2">Section 23.1</a><br>
34controls, for Magnets: <a href="magnets.html#i2">Section 33.1</a><br>
35controls, for Map: <a href="map.html#i2">Section 22.1</a><br>
36controls, for Mines: <a href="mines.html#i1">Section 12.1</a><br>
37controls, for Net: <a href="net.html#i5">Section 3.1</a><br>
38controls, for Netslide: <a href="netslide.html#i1">Chapter 9</a><br>
39controls, for Palisade: <a href="palisade.html#i2">Section 41.1</a><br>
40controls, for Pattern: <a href="pattern.html#i2">Section 10.1</a><br>
41controls, for Pearl: <a href="pearl.html#i2">Section 36.1</a><br>
42controls, for Pegs: <a href="pegs.html#i2">Section 16.1</a><br>
43controls, for Range: <a href="range.html#i2">Section 35.1</a><br>
44controls, for Rectangles: <a href="rect.html#i3">Section 8.1</a><br>
45controls, for Same Game: <a href="samegame.html#i1">Section 13.1</a><br>
46controls, for Signpost: <a href="signpost.html#i2">Section 34.1</a><br>
47controls, for Singles: <a href="singles.html#i3">Section 32.1</a><br>
48controls, for Sixteen: <a href="sixteen.html#i1">Section 6.1</a><br>
49controls, for Slant: <a href="slant.html#i2">Section 20.1</a><br>
50controls, for Solo: <a href="solo.html#i2">Section 11.1</a><br>
51controls, for Tents: <a href="tents.html#i1">Section 25.1</a><br>
52controls, for Towers: <a href="towers.html#i2">Section 31.1</a><br>
53controls, for Tracks: <a href="tracks.html#i1">Section 40.1</a><br>
54controls, for Twiddle: <a href="twiddle.html#i1">Section 7.1</a><br>
55controls, for Undead: <a href="undead.html#i1">Section 37.1</a><br>
56controls, for Unequal: <a href="unequal.html#i3">Section 27.1</a><br>
57controls, for Unruly: <a href="unruly.html#i1">Section 38.1</a><br>
58controls, for Untangle: <a href="untangle.html#i2">Section 18.1</a><br>
59copy: <a href="common.html#i14">Section 2.1</a><br>
60copyright: <a href="licence.html#i2">Appendix A</a><br>
61Cube: <a href="cube.html#i0">Chapter 4</a><br>
62&#8216;Custom&#8217;, menu option: <a href="common.html#i30">Section 2.3</a><br>
63default parameters, specifying: <a href="common.html#i34">Section 2.4</a><br>
64Dominosa: <a href="dominosa.html#i0">Chapter 17</a><br>
65Edit menu: <a href="common.html#i6">Section 2.1</a><br>
66exit: <a href="common.html#i16">Section 2.1</a><br>
67feedback: <a href="intro.html#i6">Chapter 1</a><br>
68Fifteen: <a href="fifteen.html#i0">Chapter 5</a><br>
69File menu: <a href="common.html#i5">Section 2.1</a><br>
70Filling: <a href="filling.html#i0">Chapter 29</a><br>
71Flip: <a href="flip.html#i0">Chapter 14</a><br>
72Flood: <a href="flood.html#i0">Chapter 39</a><br>
73format, ID: <a href="common.html#i26">Section 2.2</a><br>
74four-colouring: <a href="map.html#i1">Chapter 22</a><br>
75FreeNet: <a href="net.html#i3">Chapter 3</a><br>
76Futoshiki: <a href="unequal.html#i2">Chapter 27</a><br>
77Galaxies: <a href="galaxies.html#i0">Chapter 28</a><br>
78game ID: <a href="common.html#i18">Section 2.2</a><br>
79game ID, format: <a href="common.html#i26">Section 2.2</a><br>
80game ID, generating: <a href="common.html#i39">Section 2.5</a><br>
81Game menu: <a href="common.html#i2">Section 2.1</a>, <a href="common.html#i21">Section 2.2</a><br>
82generating game IDs: <a href="common.html#i39">Section 2.5</a><br>
83Guess: <a href="guess.html#i0">Chapter 15</a><br>
84Hitori: <a href="singles.html#i2">Chapter 32</a><br>
85ID format: <a href="common.html#i26">Section 2.2</a><br>
86ID, game: <a href="common.html#i18">Section 2.2</a><br>
87Inertia: <a href="inertia.html#i0">Chapter 24</a><br>
88initial state: <a href="common.html#i24">Section 2.2</a><br>
89Janko: <a href="magnets.html#i1">Chapter 33</a>, <a href="signpost.html#i1">Chapter 34</a><br>
90Keen: <a href="keen.html#i0">Chapter 30</a><br>
91KenKen: <a href="keen.html#i1">Chapter 30</a><br>
92keys: <a href="common.html#i3">Section 2.1</a><br>
93keys, for Black Box: <a href="blackbox.html#i1">Section 19.1</a><br>
94keys, for Cube: <a href="cube.html#i1">Section 4.1</a><br>
95keys, for Fifteen: <a href="fifteen.html#i2">Section 5.1</a><br>
96keys, for Flip: <a href="flip.html#i1">Section 14.1</a><br>
97keys, for Guess: <a href="guess.html#i2">Section 15.1</a><br>
98keys, for Inertia: <a href="inertia.html#i1">Section 24.1</a><br>
99keys, for Net: <a href="net.html#i5">Section 3.1</a><br>
100keys, for Same Game: <a href="samegame.html#i1">Section 13.1</a><br>
101Latin square: <a href="unequal.html#i1">Chapter 27</a><br>
102licence: <a href="licence.html#i1">Appendix A</a><br>
103licence, MIT: <a href="intro.html#i3">Chapter 1</a>, <a href="licence.html#i0">Appendix A</a><br>
104Light Up: <a href="lightup.html#i0">Chapter 21</a><br>
105Linux: <a href="intro.html#i0">Chapter 1</a>, <a href="common.html#i35">Section 2.5</a><br>
106load: <a href="common.html#i9">Section 2.1</a>, <a href="common.html#i38">Section 2.5</a><br>
107Loopy: <a href="loopy.html#i0">Chapter 23</a><br>
108Mac OS X: <a href="intro.html#i2">Chapter 1</a>, <a href="common.html#i4">Section 2.1</a>, <a href="common.html#i22">Section 2.2</a>, <a href="common.html#i33">Section 2.4</a><br>
109Magnets: <a href="magnets.html#i0">Chapter 33</a><br>
110Map: <a href="map.html#i0">Chapter 22</a><br>
111Mastermind: <a href="guess.html#i1">Chapter 15</a><br>
112Mines: <a href="mines.html#i0">Chapter 12</a><br>
113MIT licence: <a href="intro.html#i3">Chapter 1</a>, <a href="licence.html#i0">Appendix A</a><br>
114Net: <a href="net.html#i0">Chapter 3</a><br>
115<code>NETGAME.EXE</code>: <a href="net.html#i2">Chapter 3</a><br>
116Netslide: <a href="netslide.html#i0">Chapter 9</a><br>
117NetWalk: <a href="net.html#i4">Chapter 3</a><br>
118new game: <a href="common.html#i7">Section 2.1</a><br>
119Nikoli: <a href="rect.html#i1">Chapter 8</a>, <a href="solo.html#i1">Chapter 11</a>, <a href="slant.html#i1">Chapter 20</a>, <a href="lightup.html#i1">Chapter 21</a>, <a href="loopy.html#i1">Chapter 23</a>, <a href="bridges.html#i1">Chapter 26</a>, <a href="galaxies.html#i1">Chapter 28</a>, <a href="filling.html#i1">Chapter 29</a>, <a href="singles.html#i1">Chapter 32</a>, <a href="range.html#i1">Chapter 35</a>, <a href="pearl.html#i1">Chapter 36</a>, <a href="palisade.html#i1">Chapter 41</a><br>
120nonograms: <a href="pattern.html#i1">Chapter 10</a><br>
121Palisade: <a href="palisade.html#i0">Chapter 41</a><br>
122parameters: <a href="common.html#i27">Section 2.2</a>, <a href="common.html#i31">Section 2.3</a><br>
123parameters, for Black Box: <a href="blackbox.html#i2">Section 19.2</a><br>
124parameters, for Bridges: <a href="bridges.html#i3">Section 26.2</a><br>
125parameters, for Cube: <a href="cube.html#i2">Section 4.2</a><br>
126parameters, for Dominosa: <a href="dominosa.html#i2">Section 17.2</a><br>
127parameters, for Fifteen: <a href="fifteen.html#i3">Section 5.2</a><br>
128parameters, for Filling: <a href="filling.html#i3">Section 29.2</a><br>
129parameters, for flip: <a href="flip.html#i2">Section 14.2</a><br>
130parameters, for Flood: <a href="flood.html#i2">Section 39.2</a><br>
131parameters, for Galaxies: <a href="galaxies.html#i3">Section 28.2</a><br>
132parameters, for Guess: <a href="guess.html#i3">Section 15.2</a><br>
133parameters, for Inertia: <a href="inertia.html#i2">Section 24.2</a><br>
134parameters, for Keen: <a href="keen.html#i3">Section 30.2</a><br>
135parameters, for Light Up: <a href="lightup.html#i3">Section 21.2</a><br>
136parameters, for Loopy: <a href="loopy.html#i3">Section 23.2</a><br>
137parameters, for Magnets: <a href="magnets.html#i3">Section 33.2</a><br>
138parameters, for Map: <a href="map.html#i3">Section 22.2</a><br>
139parameters, for Mines: <a href="mines.html#i2">Section 12.2</a><br>
140parameters, for Net: <a href="net.html#i6">Section 3.2</a><br>
141parameters, for Netslide: <a href="netslide.html#i2">Chapter 9</a><br>
142parameters, for Palisade: <a href="palisade.html#i3">Section 41.2</a><br>
143parameters, for Pattern: <a href="pattern.html#i3">Section 10.2</a><br>
144parameters, for Pearl: <a href="pearl.html#i3">Section 36.2</a><br>
145parameters, for Pegs: <a href="pegs.html#i3">Section 16.2</a><br>
146parameters, for Range: <a href="range.html#i3">Section 35.2</a><br>
147parameters, for Rectangles: <a href="rect.html#i4">Section 8.2</a><br>
148parameters, for Same Game: <a href="samegame.html#i2">Section 13.2</a><br>
149parameters, for Signpost: <a href="signpost.html#i3">Section 34.2</a><br>
150parameters, for Singles: <a href="singles.html#i4">Section 32.2</a><br>
151parameters, for Sixteen: <a href="sixteen.html#i2">Section 6.2</a><br>
152parameters, for Slant: <a href="slant.html#i3">Section 20.2</a><br>
153parameters, for Solo: <a href="solo.html#i3">Section 11.2</a><br>
154parameters, for Tents: <a href="tents.html#i2">Section 25.2</a><br>
155parameters, for Towers: <a href="towers.html#i3">Section 31.2</a><br>
156parameters, for Tracks: <a href="tracks.html#i2">Section 40.2</a><br>
157parameters, for Twiddle: <a href="twiddle.html#i2">Section 7.2</a><br>
158parameters, for Undead: <a href="undead.html#i2">Section 37.2</a><br>
159parameters, for Unequal: <a href="unequal.html#i4">Section 27.2</a><br>
160parameters, for Unruly: <a href="unruly.html#i2">Section 38.2</a><br>
161parameters, for Untangle: <a href="untangle.html#i3">Section 18.2</a><br>
162patches: <a href="intro.html#i8">Chapter 1</a><br>
163Pattern: <a href="pattern.html#i0">Chapter 10</a><br>
164Pearl: <a href="pearl.html#i0">Chapter 36</a><br>
165Pegs: <a href="pegs.html#i0">Chapter 16</a><br>
166Planarity: <a href="untangle.html#i1">Chapter 18</a><br>
167PostScript: <a href="common.html#i41">Section 2.5</a><br>
168preferences, specifying default: <a href="common.html#i34">Section 2.4</a><br>
169preset: <a href="common.html#i29">Section 2.3</a><br>
170printing, on Unix: <a href="common.html#i40">Section 2.5</a><br>
171printing, on Windows: <a href="common.html#i11">Section 2.1</a><br>
17215-puzzle: <a href="fifteen.html#i1">Chapter 5</a><br>
173Puzzle Palace: <a href="rect.html#i2">Chapter 8</a><br>
174quit: <a href="common.html#i17">Section 2.1</a><br>
175Random Seed: <a href="common.html#i20">Section 2.2</a><br>
176Range: <a href="range.html#i0">Chapter 35</a><br>
177Rectangles: <a href="rect.html#i0">Chapter 8</a><br>
178redo: <a href="common.html#i13">Section 2.1</a><br>
179restart game: <a href="common.html#i8">Section 2.1</a><br>
180Same Game: <a href="samegame.html#i0">Chapter 13</a><br>
181save: <a href="common.html#i10">Section 2.1</a>, <a href="common.html#i37">Section 2.5</a><br>
182shortcuts (keyboard): <a href="common.html#i3">Section 2.1</a><br>
183shortcuts (keyboard), for Black Box: <a href="blackbox.html#i1">Section 19.1</a><br>
184shortcuts (keyboard), for Cube: <a href="cube.html#i1">Section 4.1</a><br>
185shortcuts (keyboard), for Fifteen: <a href="fifteen.html#i2">Section 5.1</a><br>
186shortcuts (keyboard), for Flip: <a href="flip.html#i1">Section 14.1</a><br>
187shortcuts (keyboard), for Guess: <a href="guess.html#i2">Section 15.1</a><br>
188shortcuts (keyboard), for Inertia: <a href="inertia.html#i1">Section 24.1</a><br>
189shortcuts (keyboard), for Net: <a href="net.html#i5">Section 3.1</a><br>
190shortcuts (keyboard), for Same Game: <a href="samegame.html#i1">Section 13.1</a><br>
191Signpost: <a href="signpost.html#i0">Chapter 34</a><br>
192Singles: <a href="singles.html#i0">Chapter 32</a><br>
193Sixteen: <a href="sixteen.html#i0">Chapter 6</a><br>
194Skyscrapers: <a href="towers.html#i1">Chapter 31</a><br>
195Slant: <a href="slant.html#i0">Chapter 20</a><br>
196Solitaire, Peg: <a href="pegs.html#i1">Chapter 16</a><br>
197Solo: <a href="solo.html#i0">Chapter 11</a><br>
198solve: <a href="common.html#i15">Section 2.1</a><br>
199source code: <a href="intro.html#i4">Chapter 1</a><br>
200&#8216;Specific&#8217;, menu option: <a href="common.html#i19">Section 2.2</a><br>
201state, initial: <a href="common.html#i24">Section 2.2</a><br>
202Tents: <a href="tents.html#i0">Chapter 25</a><br>
203Towers: <a href="towers.html#i0">Chapter 31</a><br>
204Tracks: <a href="tracks.html#i0">Chapter 40</a><br>
205Twiddle: <a href="twiddle.html#i0">Chapter 7</a><br>
206Type menu: <a href="common.html#i28">Section 2.3</a><br>
207Undead: <a href="undead.html#i0">Chapter 37</a><br>
208undo: <a href="common.html#i12">Section 2.1</a><br>
209Unequal: <a href="unequal.html#i0">Chapter 27</a><br>
210Unix: <a href="intro.html#i0">Chapter 1</a>, <a href="common.html#i35">Section 2.5</a><br>
211Unruly: <a href="unruly.html#i0">Chapter 38</a><br>
212Untangle: <a href="untangle.html#i0">Chapter 18</a><br>
213version: <a href="common.html#i25">Section 2.2</a><br>
214website: <a href="intro.html#i5">Chapter 1</a><br>
215Windows: <a href="intro.html#i1">Chapter 1</a>, <a href="net.html#i1">Chapter 3</a></p>
216<hr><address></address></body>
217</html>
diff --git a/apps/plugins/puzzles/dominosa.R b/apps/plugins/puzzles/src/dominosa.R
index 99218366e6..99218366e6 100644
--- a/apps/plugins/puzzles/dominosa.R
+++ b/apps/plugins/puzzles/src/dominosa.R
diff --git a/apps/plugins/puzzles/dominosa.c b/apps/plugins/puzzles/src/dominosa.c
index a2dd69ba86..c86ba19dfa 100644
--- a/apps/plugins/puzzles/dominosa.c
+++ b/apps/plugins/puzzles/src/dominosa.c
@@ -42,7 +42,7 @@
42#include <stdio.h> 42#include <stdio.h>
43#include <stdlib.h> 43#include <stdlib.h>
44#include <string.h> 44#include <string.h>
45#include "rbassert.h" 45#include <assert.h>
46#include <ctype.h> 46#include <ctype.h>
47#include <math.h> 47#include <math.h>
48 48
@@ -1709,7 +1709,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
1709const struct game thegame = { 1709const struct game thegame = {
1710 "Dominosa", "games.dominosa", "dominosa", 1710 "Dominosa", "games.dominosa", "dominosa",
1711 default_params, 1711 default_params,
1712 game_fetch_preset, 1712 game_fetch_preset, NULL,
1713 decode_params, 1713 decode_params,
1714 encode_params, 1714 encode_params,
1715 free_params, 1715 free_params,
diff --git a/apps/plugins/puzzles/src/dominosa.html b/apps/plugins/puzzles/src/dominosa.html
new file mode 100644
index 0000000000..67659571ea
--- /dev/null
+++ b/apps/plugins/puzzles/src/dominosa.html
@@ -0,0 +1,57 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Dominosa</title>
7<link rel="previous" href="pegs.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="untangle.html">
12</head>
13<body>
14<p><a href="pegs.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="untangle.html">Next</a></p>
15<h1><a name="C17"></a>Chapter 17: <a name="i0"></a>Dominosa</h1>
16<p>
17A normal set of dominoes &#8211; that is, one instance of every (unordered) pair of numbers from 0 to 6 &#8211; has been arranged irregularly into a rectangle; then the number in each square has been written down and the dominoes themselves removed. Your task is to reconstruct the pattern by arranging the set of dominoes to match the provided array of numbers.
18</p>
19<p>
20This puzzle is widely credited to O. S. Adler, and takes part of its name from those initials.
21</p>
22<h2><a name="S17.1"></a>17.1 <a name="i1"></a>Dominosa controls</h2>
23<p>
24Left-clicking between any two adjacent numbers places a domino covering them, or removes one if it is already present. Trying to place a domino which overlaps existing dominoes will remove the ones it overlaps.
25</p>
26<p>
27Right-clicking between two adjacent numbers draws a line between them, which you can use to remind yourself that you know those two numbers are <em>not</em> covered by a single domino. Right-clicking again removes the line.
28</p>
29<p>
30You can also use the cursor keys to move a cursor around the grid. When the cursor is half way between two adjacent numbers, pressing the return key will place a domino covering those numbers, or pressing the space bar will lay a line between the two squares. Repeating either action removes the domino or line.
31</p>
32<p>
33Pressing a number key will highlight all occurrences of that number. Pressing that number again will clear the highlighting. Up to two different numbers can be highlighted at any given time.
34</p>
35<p>
36(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
37</p>
38<h2><a name="S17.2"></a>17.2 <a name="i2"></a>Dominosa parameters</h2>
39<p>
40These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
41</p>
42<dl><dt>
43<em>Maximum number on dominoes</em>
44</dt>
45<dd>
46Controls the size of the puzzle, by controlling the size of the set of dominoes used to make it. Dominoes with numbers going up to N will give rise to an (N+2) &#215; (N+1) rectangle; so, in particular, the default value of 6 gives an 8&#215;7 grid.
47</dd>
48<dt>
49<em>Ensure unique solution</em>
50</dt>
51<dd>
52Normally, Dominosa will make sure that the puzzles it presents have only one solution. Puzzles with ambiguous sections can be more difficult and sometimes more subtle, so if you like you can turn off this feature. Also, finding <em>all</em> the possible solutions can be an additional challenge for an advanced player. Turning off this option can also speed up puzzle generation.
53</dd>
54</dl>
55
56<hr><address></address></body>
57</html>
diff --git a/apps/plugins/puzzles/drawing.c b/apps/plugins/puzzles/src/drawing.c
index 8bf58d5530..7f4a6cf674 100644
--- a/apps/plugins/puzzles/drawing.c
+++ b/apps/plugins/puzzles/src/drawing.c
@@ -26,7 +26,7 @@
26#include <stdio.h> 26#include <stdio.h>
27#include <stdlib.h> 27#include <stdlib.h>
28#include <string.h> 28#include <string.h>
29#include "rbassert.h" 29#include <assert.h>
30#include <math.h> 30#include <math.h>
31 31
32#include "puzzles.h" 32#include "puzzles.h"
diff --git a/apps/plugins/puzzles/dsf.c b/apps/plugins/puzzles/src/dsf.c
index 1a2fa8c4be..aa22392661 100644
--- a/apps/plugins/puzzles/dsf.c
+++ b/apps/plugins/puzzles/src/dsf.c
@@ -4,7 +4,7 @@
4 * worry about avoiding closed loops. 4 * worry about avoiding closed loops.
5 */ 5 */
6 6
7#include "rbassert.h" 7#include <assert.h>
8#include <string.h> 8#include <string.h>
9 9
10#include "puzzles.h" 10#include "puzzles.h"
diff --git a/apps/plugins/puzzles/emcc.c b/apps/plugins/puzzles/src/emcc.c
index 5ffcb0b793..ca033cbd47 100644
--- a/apps/plugins/puzzles/emcc.c
+++ b/apps/plugins/puzzles/src/emcc.c
@@ -47,7 +47,7 @@
47 * that using whatever they normally use to print PDFs!) 47 * that using whatever they normally use to print PDFs!)
48 */ 48 */
49 49
50#include "rbassert.h" 50#include <assert.h>
51#include <stdio.h> 51#include <stdio.h>
52#include <string.h> 52#include <string.h>
53#include <stdarg.h> 53#include <stdarg.h>
@@ -61,7 +61,8 @@ extern void js_debug(const char *);
61extern void js_error_box(const char *message); 61extern void js_error_box(const char *message);
62extern void js_remove_type_dropdown(void); 62extern void js_remove_type_dropdown(void);
63extern void js_remove_solve_button(void); 63extern void js_remove_solve_button(void);
64extern void js_add_preset(const char *name); 64extern void js_add_preset(int menuid, const char *name, int value);
65extern int js_add_preset_submenu(int menuid, const char *name);
65extern int js_get_selected_preset(void); 66extern int js_get_selected_preset(void);
66extern void js_select_preset(int n); 67extern void js_select_preset(int n);
67extern void js_get_date_64(unsigned *p); 68extern void js_get_date_64(unsigned *p);
@@ -552,6 +553,21 @@ static game_params **presets;
552static int npresets; 553static int npresets;
553int have_presets_dropdown; 554int have_presets_dropdown;
554 555
556void populate_js_preset_menu(int menuid, struct preset_menu *menu)
557{
558 int i;
559 for (i = 0; i < menu->n_entries; i++) {
560 struct preset_menu_entry *entry = &menu->entries[i];
561 if (entry->params) {
562 presets[entry->id] = entry->params;
563 js_add_preset(menuid, entry->title, entry->id);
564 } else {
565 int js_submenu = js_add_preset_submenu(menuid, entry->title);
566 populate_js_preset_menu(js_submenu, entry->submenu);
567 }
568 }
569}
570
555void select_appropriate_preset(void) 571void select_appropriate_preset(void)
556{ 572{
557 if (have_presets_dropdown) { 573 if (have_presets_dropdown) {
@@ -696,7 +712,7 @@ void command(int n)
696 midend_redraw(me); 712 midend_redraw(me);
697 update_undo_redo(); 713 update_undo_redo();
698 js_focus_canvas(); 714 js_focus_canvas();
699 select_appropriate_preset(); /* sort out Custom/Customise */ 715 select_appropriate_preset();
700 } 716 }
701 } 717 }
702 break; 718 break;
@@ -787,23 +803,16 @@ int main(int argc, char **argv)
787 * Set up the game-type dropdown with presets and/or the Custom 803 * Set up the game-type dropdown with presets and/or the Custom
788 * option. 804 * option.
789 */ 805 */
790 npresets = midend_num_presets(me); 806 {
791 if (npresets == 0) { 807 struct preset_menu *menu = midend_get_presets(me, &npresets);
792 /*
793 * This puzzle doesn't have selectable game types at all.
794 * Completely remove the drop-down list from the page.
795 */
796 js_remove_type_dropdown();
797 have_presets_dropdown = FALSE;
798 } else {
799 presets = snewn(npresets, game_params *); 808 presets = snewn(npresets, game_params *);
800 for (i = 0; i < npresets; i++) { 809 for (i = 0; i < npresets; i++)
801 char *name; 810 presets[i] = NULL;
802 midend_fetch_preset(me, i, &name, &presets[i]); 811
803 js_add_preset(name); 812 populate_js_preset_menu(0, menu);
804 } 813
805 if (thegame.can_configure) 814 if (thegame.can_configure)
806 js_add_preset(NULL); /* the 'Custom' entry in the dropdown */ 815 js_add_preset(0, "Custom", -1);
807 816
808 have_presets_dropdown = TRUE; 817 have_presets_dropdown = TRUE;
809 818
diff --git a/apps/plugins/puzzles/emcclib.js b/apps/plugins/puzzles/src/emcclib.js
index 385281ad0b..cd8876e76d 100644
--- a/apps/plugins/puzzles/emcclib.js
+++ b/apps/plugins/puzzles/src/emcclib.js
@@ -45,7 +45,7 @@ mergeInto(LibraryManager.library, {
45 * provides neither presets nor configurability. 45 * provides neither presets nor configurability.
46 */ 46 */
47 js_remove_type_dropdown: function() { 47 js_remove_type_dropdown: function() {
48 document.getElementById("gametype").style.display = "none"; 48 gametypelist.style.display = "none";
49 }, 49 },
50 50
51 /* 51 /*
@@ -59,58 +59,71 @@ mergeInto(LibraryManager.library, {
59 }, 59 },
60 60
61 /* 61 /*
62 * void js_add_preset(const char *name); 62 * void js_add_preset(int menuid, const char *name, int value);
63 * 63 *
64 * Add a preset to the drop-down types menu. The provided text is 64 * Add a preset to the drop-down types menu, or to a submenu of
65 * the name of the preset. (The corresponding game_params stays on 65 * it. 'menuid' specifies an index into our array of submenus
66 * the C side and never comes out this far; we just pass a numeric 66 * where the item might be placed; 'value' specifies the number
67 * index back to the C code when a selection is made.) 67 * that js_get_selected_preset() will return when this item is
68 * 68 * clicked.
69 * The special 'Custom' preset is requested by passing NULL to 69 */
70 * this function, rather than the string "Custom", since in that 70 js_add_preset: function(menuid, ptr, value) {
71 * case we need to do something special - see below. 71 var name = Pointer_stringify(ptr);
72 */ 72 var item = document.createElement("li");
73 js_add_preset: function(ptr) { 73 item.setAttribute("data-index", value);
74 var name = (ptr == 0 ? "Customise..." : Pointer_stringify(ptr)); 74 var tick = document.createElement("span");
75 var value = gametypeoptions.length; 75 tick.appendChild(document.createTextNode("\u2713"));
76 76 tick.style.color = "transparent";
77 var option = document.createElement("option"); 77 tick.style.paddingRight = "0.5em";
78 option.value = value; 78 item.appendChild(tick);
79 option.appendChild(document.createTextNode(name)); 79 item.appendChild(document.createTextNode(name));
80 gametypeselector.appendChild(option); 80 gametypesubmenus[menuid].appendChild(item);
81 gametypeoptions.push(option); 81 gametypeitems.push(item);
82 82
83 if (ptr == 0) { 83 item.onclick = function(event) {
84 // The option we've just created is the one for inventing 84 if (dlg_dimmer === null) {
85 // a new custom setup. 85 gametypeselectedindex = value;
86 gametypenewcustom = option; 86 command(2);
87 option.value = -1; 87 }
88
89 // Now create another element called 'Custom', which will
90 // be auto-selected by us to indicate the custom settings
91 // you've previously selected. However, we don't add it to
92 // the game type selector; it will only appear when the
93 // user actually has custom settings selected.
94 option = document.createElement("option");
95 option.value = -2;
96 option.appendChild(document.createTextNode("Custom"));
97 gametypethiscustom = option;
98 } 88 }
99 }, 89 },
100 90
101 /* 91 /*
92 * int js_add_preset_submenu(int menuid, const char *name);
93 *
94 * Add a submenu in the presets menu hierarchy. Returns its index,
95 * for passing as the 'menuid' argument in further calls to
96 * js_add_preset or this function.
97 */
98 js_add_preset_submenu: function(menuid, ptr, value) {
99 var name = Pointer_stringify(ptr);
100 var item = document.createElement("li");
101 // We still create a transparent tick element, even though it
102 // won't ever be selected, to make submenu titles line up
103 // nicely with their neighbours.
104 var tick = document.createElement("span");
105 tick.appendChild(document.createTextNode("\u2713"));
106 tick.style.color = "transparent";
107 tick.style.paddingRight = "0.5em";
108 item.appendChild(tick);
109 item.appendChild(document.createTextNode(name));
110 var submenu = document.createElement("ul");
111 submenu.className = "left";
112 item.appendChild(submenu);
113 gametypesubmenus[menuid].appendChild(item);
114 var toret = gametypesubmenus.length;
115 gametypesubmenus.push(submenu);
116 return toret;
117 },
118
119 /*
102 * int js_get_selected_preset(void); 120 * int js_get_selected_preset(void);
103 * 121 *
104 * Return the index of the currently selected value in the type 122 * Return the index of the currently selected value in the type
105 * dropdown. 123 * dropdown.
106 */ 124 */
107 js_get_selected_preset: function() { 125 js_get_selected_preset: function() {
108 for (var i in gametypeoptions) { 126 return gametypeselectedindex;
109 if (gametypeoptions[i].selected) {
110 return gametypeoptions[i].value;
111 }
112 }
113 return 0;
114 }, 127 },
115 128
116 /* 129 /*
@@ -121,33 +134,15 @@ mergeInto(LibraryManager.library, {
121 * which turn out to exactly match a preset). 134 * which turn out to exactly match a preset).
122 */ 135 */
123 js_select_preset: function(n) { 136 js_select_preset: function(n) {
124 if (gametypethiscustom !== null) { 137 gametypeselectedindex = n;
125 // Fiddle with the Custom/Customise options. If we're 138 for (var i in gametypeitems) {
126 // about to select the Custom option, then it should be in 139 var item = gametypeitems[i];
127 // the menu, and the other one should read "Re-customise"; 140 var tick = item.firstChild;
128 // if we're about to select another one, then the static 141 if (item.getAttribute("data-index") == n) {
129 // Custom option should disappear and the other one should 142 tick.style.color = "inherit";
130 // read "Customise".
131
132 if (gametypethiscustom.parentNode == gametypeselector)
133 gametypeselector.removeChild(gametypethiscustom);
134 if (gametypenewcustom.parentNode == gametypeselector)
135 gametypeselector.removeChild(gametypenewcustom);
136
137 if (n < 0) {
138 gametypeselector.appendChild(gametypethiscustom);
139 gametypenewcustom.lastChild.data = "Re-customise...";
140 } else { 143 } else {
141 gametypenewcustom.lastChild.data = "Customise..."; 144 tick.style.color = "transparent";
142 } 145 }
143 gametypeselector.appendChild(gametypenewcustom);
144 gametypenewcustom.selected = false;
145 }
146
147 if (n < 0) {
148 gametypethiscustom.selected = true;
149 } else {
150 gametypeoptions[n].selected = true;
151 } 146 }
152 }, 147 },
153 148
@@ -192,8 +187,8 @@ mergeInto(LibraryManager.library, {
192 * after a move. 187 * after a move.
193 */ 188 */
194 js_enable_undo_redo: function(undo, redo) { 189 js_enable_undo_redo: function(undo, redo) {
195 undo_button.disabled = (undo == 0); 190 disable_menu_item(undo_button, (undo == 0));
196 redo_button.disabled = (redo == 0); 191 disable_menu_item(redo_button, (redo == 0));
197 }, 192 },
198 193
199 /* 194 /*
diff --git a/apps/plugins/puzzles/emccpre.js b/apps/plugins/puzzles/src/emccpre.js
index ebf67d1fc6..d715858883 100644
--- a/apps/plugins/puzzles/emccpre.js
+++ b/apps/plugins/puzzles/src/emccpre.js
@@ -79,22 +79,12 @@ var dlg_return_funcs = null;
79// pass back the final value in each dialog control. 79// pass back the final value in each dialog control.
80var dlg_return_sval, dlg_return_ival; 80var dlg_return_sval, dlg_return_ival;
81 81
82// The <select> object implementing the game-type drop-down, and a 82// The <ul> object implementing the game-type drop-down, and a list of
83// list of the <option> objects inside it. Used by js_add_preset(), 83// the <li> objects inside it. Used by js_add_preset(),
84// js_get_selected_preset() and js_select_preset(). 84// js_get_selected_preset() and js_select_preset().
85// 85var gametypelist = null, gametypeitems = [];
86// gametypethiscustom is an option which indicates some custom game 86var gametypeselectedindex = null;
87// params you've already set up, and which will be auto-selected on 87var gametypesubmenus = [];
88// return from the customisation dialog; gametypenewcustom is an
89// option which you select to indicate that you want to bring up the
90// customisation dialog and select a new configuration. Ideally I'd do
91// this with just one option serving both purposes, but instead we
92// have to do this a bit oddly because browsers don't send 'onchange'
93// events for a select element if you reselect the same one - so if
94// you've picked a custom setup and now want to change it, you need a
95// way to specify that.
96var gametypeselector = null, gametypeoptions = [];
97var gametypethiscustom = null, gametypehiddencustom = null;
98 88
99// The two anchors used to give permalinks to the current puzzle. Used 89// The two anchors used to give permalinks to the current puzzle. Used
100// by js_update_permalinks(). 90// by js_update_permalinks().
@@ -131,6 +121,14 @@ function relative_mouse_coords(event, element) {
131 y: event.pageY - ecoords.y}; 121 y: event.pageY - ecoords.y};
132} 122}
133 123
124// Enable and disable items in the CSS menus.
125function disable_menu_item(item, disabledFlag) {
126 if (disabledFlag)
127 item.className = "disabled";
128 else
129 item.className = "";
130}
131
134// Init function called from body.onload. 132// Init function called from body.onload.
135function initPuzzle() { 133function initPuzzle() {
136 // Construct the off-screen canvas used for double buffering. 134 // Construct the off-screen canvas used for double buffering.
@@ -232,11 +230,8 @@ function initPuzzle() {
232 command(9); 230 command(9);
233 }; 231 };
234 232
235 gametypeselector = document.getElementById("gametype"); 233 gametypelist = document.getElementById("gametype");
236 gametypeselector.onchange = function(event) { 234 gametypesubmenus.push(gametypelist);
237 if (dlg_dimmer === null)
238 command(2);
239 };
240 235
241 // In IE, the canvas doesn't automatically gain focus on a mouse 236 // In IE, the canvas doesn't automatically gain focus on a mouse
242 // click, so make sure it does 237 // click, so make sure it does
diff --git a/apps/plugins/puzzles/emccx.json b/apps/plugins/puzzles/src/emccx.json
index e03f7e25c7..e03f7e25c7 100644
--- a/apps/plugins/puzzles/emccx.json
+++ b/apps/plugins/puzzles/src/emccx.json
diff --git a/apps/plugins/puzzles/fifteen.R b/apps/plugins/puzzles/src/fifteen.R
index b2292acc69..b2292acc69 100644
--- a/apps/plugins/puzzles/fifteen.R
+++ b/apps/plugins/puzzles/src/fifteen.R
diff --git a/apps/plugins/puzzles/fifteen.c b/apps/plugins/puzzles/src/fifteen.c
index 0d5e7f5b0c..aee89071ca 100644
--- a/apps/plugins/puzzles/fifteen.c
+++ b/apps/plugins/puzzles/src/fifteen.c
@@ -5,7 +5,7 @@
5#include <stdio.h> 5#include <stdio.h>
6#include <stdlib.h> 6#include <stdlib.h>
7#include <string.h> 7#include <string.h>
8#include "rbassert.h" 8#include <assert.h>
9#include <ctype.h> 9#include <ctype.h>
10#include <math.h> 10#include <math.h>
11 11
@@ -1089,7 +1089,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
1089const struct game thegame = { 1089const struct game thegame = {
1090 "Fifteen", "games.fifteen", "fifteen", 1090 "Fifteen", "games.fifteen", "fifteen",
1091 default_params, 1091 default_params,
1092 game_fetch_preset, 1092 game_fetch_preset, NULL,
1093 decode_params, 1093 decode_params,
1094 encode_params, 1094 encode_params,
1095 free_params, 1095 free_params,
diff --git a/apps/plugins/puzzles/src/fifteen.html b/apps/plugins/puzzles/src/fifteen.html
new file mode 100644
index 0000000000..05d3661dad
--- /dev/null
+++ b/apps/plugins/puzzles/src/fifteen.html
@@ -0,0 +1,41 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Fifteen</title>
7<link rel="previous" href="cube.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="sixteen.html">
12</head>
13<body>
14<p><a href="cube.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="sixteen.html">Next</a></p>
15<h1><a name="C5"></a>Chapter 5: <a name="i0"></a>Fifteen</h1>
16<p>
17The old ones are the best: this is the good old &#8216;<a name="i1"></a>15-puzzle&#8217; with sliding tiles. You have a 4&#215;4 square grid; 15 squares contain numbered tiles, and the sixteenth is empty. Your move is to choose a tile next to the empty space, and slide it into the space. The aim is to end up with the tiles in numerical order, with the space in the bottom right (so that the top row reads 1,2,3,4 and the bottom row reads 13,14,15,<em>space</em>).
18</p>
19<h2><a name="S5.1"></a>5.1 <a name="i2"></a>Fifteen controls</h2>
20<p>
21This game can be controlled with the mouse or the keyboard.
22</p>
23<p>
24A left-click with the mouse in the row or column containing the empty space will move as many tiles as necessary to move the space to the mouse pointer.
25</p>
26<p>
27The arrow keys will move a tile adjacent to the space in the direction indicated (moving the space in the <em>opposite</em> direction).
28</p>
29<p>
30Pressing &#8216;h&#8217; will make a suggested move. Pressing &#8216;h&#8217; enough times will solve the game, but it may scramble your progress while doing so.
31</p>
32<p>
33(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
34</p>
35<h2><a name="S5.2"></a>5.2 <a name="i3"></a>Fifteen parameters</h2>
36<p>
37The only options available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu are <em>Width</em> and <em>Height</em>, which are self-explanatory. (Once you've changed these, it's not a &#8216;15-puzzle&#8217; any more, of course!)
38</p>
39
40<hr><address></address></body>
41</html>
diff --git a/apps/plugins/puzzles/filling.R b/apps/plugins/puzzles/src/filling.R
index cffbafaa0a..cffbafaa0a 100644
--- a/apps/plugins/puzzles/filling.R
+++ b/apps/plugins/puzzles/src/filling.R
diff --git a/apps/plugins/puzzles/filling.c b/apps/plugins/puzzles/src/filling.c
index c2dfafc7ca..d8d0c8cbb0 100644
--- a/apps/plugins/puzzles/filling.c
+++ b/apps/plugins/puzzles/src/filling.c
@@ -56,7 +56,7 @@
56 * + but the hints are independent, not linear, so... what? 56 * + but the hints are independent, not linear, so... what?
57 */ 57 */
58 58
59#include "rbassert.h" 59#include <assert.h>
60#include <ctype.h> 60#include <ctype.h>
61#include <math.h> 61#include <math.h>
62#include <stdarg.h> 62#include <stdarg.h>
@@ -1551,12 +1551,12 @@ static game_state *execute_move(const game_state *state, const char *move)
1551 int value; 1551 int value;
1552 char *endptr, *delim = strchr(move, '_'); 1552 char *endptr, *delim = strchr(move, '_');
1553 if (!delim) goto err; 1553 if (!delim) goto err;
1554 value = strtol(delim+1, &endptr, 10); 1554 value = strtol(delim+1, &endptr, 0);
1555 if (*endptr || endptr == delim+1) goto err; 1555 if (*endptr || endptr == delim+1) goto err;
1556 if (value < 0 || value > 9) goto err; 1556 if (value < 0 || value > 9) goto err;
1557 new_state = dup_game(state); 1557 new_state = dup_game(state);
1558 while (*move) { 1558 while (*move) {
1559 const int i = strtol(move, &endptr, 10); 1559 const int i = strtol(move, &endptr, 0);
1560 if (endptr == move) goto err; 1560 if (endptr == move) goto err;
1561 if (i < 0 || i >= sz) goto err; 1561 if (i < 0 || i >= sz) goto err;
1562 new_state->board[i] = value; 1562 new_state->board[i] = value;
@@ -2111,7 +2111,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
2111const struct game thegame = { 2111const struct game thegame = {
2112 "Filling", "games.filling", "filling", 2112 "Filling", "games.filling", "filling",
2113 default_params, 2113 default_params,
2114 game_fetch_preset, 2114 game_fetch_preset, NULL,
2115 decode_params, 2115 decode_params,
2116 encode_params, 2116 encode_params,
2117 free_params, 2117 free_params,
diff --git a/apps/plugins/puzzles/src/filling.html b/apps/plugins/puzzles/src/filling.html
new file mode 100644
index 0000000000..3ccbf06e4d
--- /dev/null
+++ b/apps/plugins/puzzles/src/filling.html
@@ -0,0 +1,50 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Filling</title>
7<link rel="previous" href="galaxies.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="keen.html">
12</head>
13<body>
14<p><a href="galaxies.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="keen.html">Next</a></p>
15<h1><a name="C29"></a>Chapter 29: <a name="i0"></a>Filling</h1>
16<p>
17You have a grid of squares, some of which contain digits, and the rest of which are empty. Your job is to fill in digits in the empty squares, in such a way that each connected region of squares all containing the same digit has an area equal to that digit.
18</p>
19<p>
20(&#8216;Connected region&#8217;, for the purposes of this game, does not count diagonally separated squares as adjacent.)
21</p>
22<p>
23For example, it follows that no square can contain a zero, and that two adjacent squares can not both contain a one. No region has an area greater than 9 (because then its area would not be a single digit).
24</p>
25<p>
26Credit for this puzzle goes to <a name="i1"></a>Nikoli <a href="#p0">[14]</a>.
27</p>
28<p>
29Filling was contributed to this collection by Jonas K&#246;lker.
30</p>
31<p><a name="p0"></a>
32[14] <a href="http://www.nikoli.co.jp/en/puzzles/fillomino.html"><code>http://www.nikoli.co.jp/en/puzzles/fillomino.html</code></a>
33</p>
34<h2><a name="S29.1"></a>29.1 <a name="i2"></a>Filling controls</h2>
35<p>
36To play Filling, simply click the mouse in any empty square and then type a digit on the keyboard to fill that square. By dragging the mouse, you can select multiple squares to fill with a single keypress. If you make a mistake, click the mouse in the incorrect square and press 0, Space, Backspace or Enter to clear it again (or use the Undo feature).
37</p>
38<p>
39You can also move around the grid with the cursor keys; typing a digit will fill the square containing the cursor with that number; typing 0 will clear it. You can also select multiple squares for numbering or clearing with the return and arrow keys, before typing a digit to fill or clear the highlighted squares (as above). The space bar adds and removes single squares to and from the selection. Backspace and escape remove all squares from the selection.
40</p>
41<p>
42(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
43</p>
44<h2><a name="S29.2"></a>29.2 <a name="i3"></a>Filling parameters</h2>
45<p>
46Filling allows you to configure the number of rows and columns of the grid, through the &#8216;Type&#8217; menu.
47</p>
48
49<hr><address></address></body>
50</html>
diff --git a/apps/plugins/puzzles/findloop.c b/apps/plugins/puzzles/src/findloop.c
index e6b2654cad..e6b2654cad 100644
--- a/apps/plugins/puzzles/findloop.c
+++ b/apps/plugins/puzzles/src/findloop.c
diff --git a/apps/plugins/puzzles/flip.R b/apps/plugins/puzzles/src/flip.R
index 03241f015b..03241f015b 100644
--- a/apps/plugins/puzzles/flip.R
+++ b/apps/plugins/puzzles/src/flip.R
diff --git a/apps/plugins/puzzles/flip.c b/apps/plugins/puzzles/src/flip.c
index ffa6c07c94..c7126fb7d9 100644
--- a/apps/plugins/puzzles/flip.c
+++ b/apps/plugins/puzzles/src/flip.c
@@ -6,7 +6,7 @@
6#include <stdio.h> 6#include <stdio.h>
7#include <stdlib.h> 7#include <stdlib.h>
8#include <string.h> 8#include <string.h>
9#include "rbassert.h" 9#include <assert.h>
10#include <ctype.h> 10#include <ctype.h>
11#include <math.h> 11#include <math.h>
12 12
@@ -1313,7 +1313,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
1313const struct game thegame = { 1313const struct game thegame = {
1314 "Flip", "games.flip", "flip", 1314 "Flip", "games.flip", "flip",
1315 default_params, 1315 default_params,
1316 game_fetch_preset, 1316 game_fetch_preset, NULL,
1317 decode_params, 1317 decode_params,
1318 encode_params, 1318 encode_params,
1319 free_params, 1319 free_params,
diff --git a/apps/plugins/puzzles/src/flip.html b/apps/plugins/puzzles/src/flip.html
new file mode 100644
index 0000000000..52790dba6c
--- /dev/null
+++ b/apps/plugins/puzzles/src/flip.html
@@ -0,0 +1,54 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Flip</title>
7<link rel="previous" href="samegame.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="guess.html">
12</head>
13<body>
14<p><a href="samegame.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="guess.html">Next</a></p>
15<h1><a name="C14"></a>Chapter 14: <a name="i0"></a>Flip</h1>
16<p>
17You have a grid of squares, some light and some dark. Your aim is to light all the squares up at the same time. You can choose any square and flip its state from light to dark or dark to light, but when you do so, other squares around it change state as well.
18</p>
19<p>
20Each square contains a small diagram showing which other squares change when you flip it.
21</p>
22<h2><a name="S14.1"></a>14.1 <a name="i1"></a>Flip controls</h2>
23<p>
24This game can be played with either the keyboard or the mouse.
25</p>
26<p>
27Left-click in a square to flip it and its associated squares, or use the cursor keys to choose a square and the space bar or Enter key to flip.
28</p>
29<p>
30If you use the &#8216;Solve&#8217; function on this game, it will mark some of the squares in red. If you click once in every square with a red mark, the game should be solved. (If you click in a square <em>without</em> a red mark, a red mark will appear in it to indicate that you will need to reverse that operation to reach the solution.)
31</p>
32<p>
33(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
34</p>
35<h2><a name="S14.2"></a>14.2 <a name="i2"></a>Flip parameters</h2>
36<p>
37These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
38</p>
39<dl><dt>
40<em>Width</em>, <em>Height</em>
41</dt>
42<dd>
43Size of grid in squares.
44</dd>
45<dt>
46<em>Shape type</em>
47</dt>
48<dd>
49This control determines the shape of the region which is flipped by clicking in any given square. The default setting, &#8216;Crosses&#8217;, causes every square to flip itself and its four immediate neighbours (or three or two if it's at an edge or corner). The other setting, &#8216;Random&#8217;, causes a random shape to be chosen for every square, so the game is different every time.
50</dd>
51</dl>
52
53<hr><address></address></body>
54</html>
diff --git a/apps/plugins/puzzles/flood.R b/apps/plugins/puzzles/src/flood.R
index 359bbb5dce..359bbb5dce 100644
--- a/apps/plugins/puzzles/flood.R
+++ b/apps/plugins/puzzles/src/flood.R
diff --git a/apps/plugins/puzzles/flood.c b/apps/plugins/puzzles/src/flood.c
index 69ae3067a9..1262be8175 100644
--- a/apps/plugins/puzzles/flood.c
+++ b/apps/plugins/puzzles/src/flood.c
@@ -29,7 +29,7 @@
29#include <stdlib.h> 29#include <stdlib.h>
30#include <stdarg.h> 30#include <stdarg.h>
31#include <string.h> 31#include <string.h>
32#include "rbassert.h" 32#include <assert.h>
33#include <ctype.h> 33#include <ctype.h>
34#include <math.h> 34#include <math.h>
35 35
@@ -1336,7 +1336,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
1336const struct game thegame = { 1336const struct game thegame = {
1337 "Flood", "games.flood", "flood", 1337 "Flood", "games.flood", "flood",
1338 default_params, 1338 default_params,
1339 game_fetch_preset, 1339 game_fetch_preset, NULL,
1340 decode_params, 1340 decode_params,
1341 encode_params, 1341 encode_params,
1342 free_params, 1342 free_params,
diff --git a/apps/plugins/puzzles/src/flood.html b/apps/plugins/puzzles/src/flood.html
new file mode 100644
index 0000000000..21beaa689b
--- /dev/null
+++ b/apps/plugins/puzzles/src/flood.html
@@ -0,0 +1,64 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Flood</title>
7<link rel="previous" href="unruly.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="tracks.html">
12</head>
13<body>
14<p><a href="unruly.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="tracks.html">Next</a></p>
15<h1><a name="C39"></a>Chapter 39: <a name="i0"></a>Flood</h1>
16<p>
17You are given a grid of squares, coloured at random in multiple colours. In each move, you can flood-fill the top left square in a colour of your choice (i.e. every square reachable from the starting square by an orthogonally connected path of squares all the same colour will be filled in the new colour). As you do this, more and more of the grid becomes connected to the starting square.
18</p>
19<p>
20Your aim is to make the whole grid the same colour, in as few moves as possible. The game will set a limit on the number of moves, based on running its own internal solver. You win if you can make the whole grid the same colour in that many moves or fewer.
21</p>
22<p>
23I saw this game (with a fixed grid size, fixed number of colours, and fixed move limit) at http://floodit.appspot.com (no longer accessible).
24</p>
25<h2><a name="S39.1"></a>39.1 <a name="i1"></a>Flood controls</h2>
26<p>
27To play Flood, click the mouse in a square. The top left corner and everything connected to it will be flood-filled with the colour of the square you clicked. Clicking a square the same colour as the top left corner has no effect, and therefore does not count as a move.
28</p>
29<p>
30You can also use the cursor keys to move a cursor (outline black square) around the grid. Pressing the return key will fill the top left corner in the colour of the square under the cursor.
31</p>
32<p>
33(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
34</p>
35<h2><a name="S39.2"></a>39.2 <a name="i2"></a>Flood parameters</h2>
36<p>
37These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
38</p>
39<dl><dt>
40<em>Width</em>, <em>Height</em>
41</dt>
42<dd>
43Size of the grid, in squares.
44</dd>
45<dt>
46<em>Colours</em>
47</dt>
48<dd>
49Number of colours used to fill the grid. Must be at least 3 (with two colours there would only be one legal move at any stage, hence no choice to make at all), and at most 10.
50</dd>
51<dt>
52<em>Extra moves permitted</em>
53</dt>
54<dd>
55Controls the difficulty of the puzzle, by increasing the move limit. In each new grid, Flood will run an internal solver to generate its own solution, and then the value in this field will be added to the length of Flood's solution to generate the game's move limit. So a value of 0 requires you to be just as efficient as Flood's automated solver, and a larger value makes it easier.
56<p>
57(Note that Flood's internal solver will not necessarily find the shortest possible solution, though I believe it's pretty close. For a real challenge, set this value to 0 and then try to solve a grid in <em>strictly fewer</em> moves than the limit you're given!)
58</p>
59
60</dd>
61</dl>
62
63<hr><address></address></body>
64</html>
diff --git a/apps/plugins/puzzles/galaxies.R b/apps/plugins/puzzles/src/galaxies.R
index 957e5dad90..957e5dad90 100644
--- a/apps/plugins/puzzles/galaxies.R
+++ b/apps/plugins/puzzles/src/galaxies.R
diff --git a/apps/plugins/puzzles/galaxies.c b/apps/plugins/puzzles/src/galaxies.c
index a18901d6e5..f4f75c629c 100644
--- a/apps/plugins/puzzles/galaxies.c
+++ b/apps/plugins/puzzles/src/galaxies.c
@@ -40,7 +40,7 @@
40#include <stdio.h> 40#include <stdio.h>
41#include <stdlib.h> 41#include <stdlib.h>
42#include <string.h> 42#include <string.h>
43#include "rbassert.h" 43#include <assert.h>
44#include <ctype.h> 44#include <ctype.h>
45#include <math.h> 45#include <math.h>
46 46
@@ -3633,7 +3633,7 @@ static void game_print(drawing *dr, const game_state *state, int sz)
3633const struct game thegame = { 3633const struct game thegame = {
3634 "Galaxies", "games.galaxies", "galaxies", 3634 "Galaxies", "games.galaxies", "galaxies",
3635 default_params, 3635 default_params,
3636 game_fetch_preset, 3636 game_fetch_preset, NULL,
3637 decode_params, 3637 decode_params,
3638 encode_params, 3638 encode_params,
3639 free_params, 3639 free_params,
diff --git a/apps/plugins/puzzles/src/galaxies.html b/apps/plugins/puzzles/src/galaxies.html
new file mode 100644
index 0000000000..41c32c1b1e
--- /dev/null
+++ b/apps/plugins/puzzles/src/galaxies.html
@@ -0,0 +1,60 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Galaxies</title>
7<link rel="previous" href="unequal.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="filling.html">
12</head>
13<body>
14<p><a href="unequal.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="filling.html">Next</a></p>
15<h1><a name="C28"></a>Chapter 28: <a name="i0"></a>Galaxies</h1>
16<p>
17You have a rectangular grid containing a number of dots. Your aim is to draw edges along the grid lines which divide the rectangle into regions in such a way that every region is 180&#176; rotationally symmetric, and contains exactly one dot which is located at its centre of symmetry.
18</p>
19<p>
20This puzzle was invented by <a name="i1"></a>Nikoli <a href="#p0">[13]</a>, under the name &#8216;Tentai Show&#8217;; its name is commonly translated into English as &#8216;Spiral Galaxies&#8217;.
21</p>
22<p>
23Galaxies was contributed to this collection by James Harvey.
24</p>
25<p><a name="p0"></a>
26[13] <a href="http://www.nikoli.co.jp/en/puzzles/astronomical_show.html"><code>http://www.nikoli.co.jp/en/puzzles/astronomical_show.html</code></a>
27</p>
28<h2><a name="S28.1"></a>28.1 <a name="i2"></a>Galaxies controls</h2>
29<p>
30Left-click on any grid line to draw an edge if there isn't one already, or to remove one if there is. When you create a valid region (one which is closed, contains exactly one dot, is 180&#176; symmetric about that dot, and contains no extraneous edges inside it) it will be highlighted automatically; so your aim is to have the whole grid highlighted in that way.
31</p>
32<p>
33During solving, you might know that a particular grid square belongs to a specific dot, but not be sure of where the edges go and which other squares are connected to the dot. In order to mark this so you don't forget, you can right-click on the dot and drag, which will create an arrow marker pointing at the dot. Drop that in a square of your choice and it will remind you which dot it's associated with. You can also right-click on existing arrows to pick them up and move them, or destroy them by dropping them off the edge of the grid. (Also, if you're not sure which dot an arrow is pointing at, you can pick it up and move it around to make it clearer. It will swivel constantly as you drag it, to stay pointed at its parent dot.)
34</p>
35<p>
36You can also use the cursor keys to move around the grid squares and lines. Pressing the return key when over a grid line will draw or clear its edge, as above. Pressing the return key when over a dot will pick up an arrow, to be dropped the next time the return key is pressed; this can also be used to move existing arrows around, removing them by dropping them on a dot or another arrow.
37</p>
38<p>
39(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
40</p>
41<h2><a name="S28.2"></a>28.2 <a name="i3"></a>Galaxies parameters</h2>
42<p>
43These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
44</p>
45<dl><dt>
46<em>Width</em>, <em>Height</em>
47</dt>
48<dd>
49Size of grid in squares.
50</dd>
51<dt>
52<em>Difficulty</em>
53</dt>
54<dd>
55Controls the difficulty of the generated puzzle. More difficult puzzles require more complex deductions, and the &#8216;Unreasonable&#8217; difficulty level may require backtracking.
56</dd>
57</dl>
58
59<hr><address></address></body>
60</html>
diff --git a/apps/plugins/puzzles/src/gamedesc.txt b/apps/plugins/puzzles/src/gamedesc.txt
new file mode 100644
index 0000000000..db0d9cbd01
--- /dev/null
+++ b/apps/plugins/puzzles/src/gamedesc.txt
@@ -0,0 +1,39 @@
1blackbox:blackbox.exe:Black Box:Ball-finding puzzle:Find the hidden balls in the box by bouncing laser beams off them.
2bridges:bridges.exe:Bridges:Bridge-placing puzzle:Connect all the islands with a network of bridges.
3cube:cube.exe:Cube:Rolling cube puzzle:Pick up all the blue squares by rolling the cube over them.
4dominosa:dominosa.exe:Dominosa:Domino tiling puzzle:Tile the rectangle with a full set of dominoes.
5fifteen:fifteen.exe:Fifteen:Sliding block puzzle:Slide the tiles around to arrange them into order.
6filling:filling.exe:Filling:Polyomino puzzle:Mark every square with the area of its containing region.
7flip:flip.exe:Flip:Tile inversion puzzle:Flip groups of squares to light them all up at once.
8flood:flood.exe:Flood:Flood-filling puzzle:Turn the grid the same colour in as few flood fills as possible.
9galaxies:galaxies.exe:Galaxies:Symmetric polyomino puzzle:Divide the grid into rotationally symmetric regions each centred on a dot.
10guess:guess.exe:Guess:Combination-guessing puzzle:Guess the hidden combination of colours.
11inertia:inertia.exe:Inertia:Gem-collecting puzzle:Collect all the gems without running into any of the mines.
12keen:keen.exe:Keen:Arithmetic Latin square puzzle:Complete the latin square in accordance with the arithmetic clues.
13lightup:lightup.exe:Light Up:Light-bulb placing puzzle:Place bulbs to light up all the squares.
14loopy:loopy.exe:Loopy:Loop-drawing puzzle:Draw a single closed loop, given clues about number of adjacent edges.
15magnets:magnets.exe:Magnets:Magnet-placing puzzle:Place magnets to satisfy the clues and avoid like poles touching.
16map:map.exe:Map:Map-colouring puzzle:Colour the map so that adjacent regions are never the same colour.
17mines:mines.exe:Mines:Mine-finding puzzle:Find all the mines without treading on any of them.
18net:netgame.exe:Net:Network jigsaw puzzle:Rotate each tile to reassemble the network.
19netslide:netslide.exe:Netslide:Toroidal sliding network puzzle:Slide a row at a time to reassemble the network.
20palisade:palisade.exe:Palisade:Grid-division puzzle:Divide the grid into equal-sized areas in accordance with the clues.
21pattern:pattern.exe:Pattern:Pattern puzzle:Fill in the pattern in the grid, given only the lengths of runs of black squares.
22pearl:pearl.exe:Pearl:Loop-drawing puzzle:Draw a single closed loop, given clues about corner and straight squares.
23pegs:pegs.exe:Pegs:Peg solitaire puzzle:Jump pegs over each other to remove all but one.
24range:range.exe:Range:Visible-distance puzzle:Place black squares to limit the visible distance from each numbered cell.
25rect:rect.exe:Rectangles:Rectangles puzzle:Divide the grid into rectangles with areas equal to the numbers.
26samegame:samegame.exe:Same Game:Block-clearing puzzle:Clear the grid by removing touching groups of the same colour squares.
27signpost:signpost.exe:Signpost:Square-connecting puzzle:Connect the squares into a path following the arrows.
28singles:singles.exe:Singles:Number-removing puzzle:Black out the right set of duplicate numbers.
29sixteen:sixteen.exe:Sixteen:Toroidal sliding block puzzle:Slide a row at a time to arrange the tiles into order.
30slant:slant.exe:Slant:Maze-drawing puzzle:Draw a maze of slanting lines that matches the clues.
31solo:solo.exe:Solo:Number placement puzzle:Fill in the grid so that each row, column and square block contains one of every digit.
32tents:tents.exe:Tents:Tent-placing puzzle:Place a tent next to each tree.
33towers:towers.exe:Towers:Tower-placing Latin square puzzle:Complete the latin square of towers in accordance with the clues.
34tracks:tracks.exe:Tracks:Path-finding railway track puzzle:Fill in the railway track according to the clues.
35twiddle:twiddle.exe:Twiddle:Rotational sliding block puzzle:Rotate the tiles around themselves to arrange them into order.
36undead:undead.exe:Undead:Monster-placing puzzle:Place ghosts, vampires and zombies so that the right numbers of them can be seen in mirrors.
37unequal:unequal.exe:Unequal:Latin square puzzle:Complete the latin square in accordance with the > signs.
38unruly:unruly.exe:Unruly:Black and white grid puzzle:Fill in the black and white grid to avoid runs of three.
39untangle:untangle.exe:Untangle:Planar graph layout puzzle:Reposition the points so that the lines do not cross.
diff --git a/apps/plugins/puzzles/grid.c b/apps/plugins/puzzles/src/grid.c
index 112162d4df..4929b5c7d3 100644
--- a/apps/plugins/puzzles/grid.c
+++ b/apps/plugins/puzzles/src/grid.c
@@ -9,7 +9,7 @@
9#include <stdio.h> 9#include <stdio.h>
10#include <stdlib.h> 10#include <stdlib.h>
11#include <string.h> 11#include <string.h>
12#include "rbassert.h" 12#include <assert.h>
13#include <ctype.h> 13#include <ctype.h>
14#include <math.h> 14#include <math.h>
15#include <float.h> 15#include <float.h>
@@ -2571,6 +2571,175 @@ static grid *grid_new_greatdodecagonal(int width, int height, const char *desc)
2571 return g; 2571 return g;
2572} 2572}
2573 2573
2574static void grid_size_greatgreatdodecagonal(int width, int height,
2575 int *tilesize, int *xextent, int *yextent)
2576{
2577 int a = DODEC_A;
2578 int b = DODEC_B;
2579
2580 *tilesize = DODEC_TILESIZE;
2581 *xextent = (4*a + 4*b) * (width-1) + 2*(2*a + b) + 2*a + 2*b;
2582 *yextent = (6*a + 2*b) * (height-1) + 2*(2*a + b);
2583}
2584
2585static grid *grid_new_greatgreatdodecagonal(int width, int height, const char *desc)
2586{
2587 int x, y;
2588 /* Vector for side of triangle - ratio is close to sqrt(3) */
2589 int a = DODEC_A;
2590 int b = DODEC_B;
2591
2592 /* Upper bounds - don't have to be exact */
2593 int max_faces = 50 * width * height;
2594 int max_dots = 300 * width * height;
2595
2596 tree234 *points;
2597
2598 grid *g = grid_empty();
2599 g->tilesize = DODEC_TILESIZE;
2600 g->faces = snewn(max_faces, grid_face);
2601 g->dots = snewn(max_dots, grid_dot);
2602
2603 points = newtree234(grid_point_cmp_fn);
2604
2605 for (y = 0; y < height; y++) {
2606 for (x = 0; x < width; x++) {
2607 grid_dot *d;
2608 /* centre of dodecagon */
2609 int px = (4*a + 4*b) * x;
2610 int py = (6*a + 2*b) * y;
2611 if (y % 2)
2612 px += 2*a + 2*b;
2613
2614 /* dodecagon */
2615 grid_face_add_new(g, 12);
2616 d = grid_get_dot(g, points, px + ( a ), py - (2*a + b)); grid_face_set_dot(g, d, 0);
2617 d = grid_get_dot(g, points, px + ( a + b), py - ( a + b)); grid_face_set_dot(g, d, 1);
2618 d = grid_get_dot(g, points, px + (2*a + b), py - ( a )); grid_face_set_dot(g, d, 2);
2619 d = grid_get_dot(g, points, px + (2*a + b), py + ( a )); grid_face_set_dot(g, d, 3);
2620 d = grid_get_dot(g, points, px + ( a + b), py + ( a + b)); grid_face_set_dot(g, d, 4);
2621 d = grid_get_dot(g, points, px + ( a ), py + (2*a + b)); grid_face_set_dot(g, d, 5);
2622 d = grid_get_dot(g, points, px - ( a ), py + (2*a + b)); grid_face_set_dot(g, d, 6);
2623 d = grid_get_dot(g, points, px - ( a + b), py + ( a + b)); grid_face_set_dot(g, d, 7);
2624 d = grid_get_dot(g, points, px - (2*a + b), py + ( a )); grid_face_set_dot(g, d, 8);
2625 d = grid_get_dot(g, points, px - (2*a + b), py - ( a )); grid_face_set_dot(g, d, 9);
2626 d = grid_get_dot(g, points, px - ( a + b), py - ( a + b)); grid_face_set_dot(g, d, 10);
2627 d = grid_get_dot(g, points, px - ( a ), py - (2*a + b)); grid_face_set_dot(g, d, 11);
2628
2629 /* hexagon on top right of dodecagon */
2630 if (y && (x < width - 1 || !(y % 2))) {
2631 grid_face_add_new(g, 6);
2632 d = grid_get_dot(g, points, px + (a + 2*b), py - (4*a + b)); grid_face_set_dot(g, d, 0);
2633 d = grid_get_dot(g, points, px + (a + 2*b), py - (2*a + b)); grid_face_set_dot(g, d, 1);
2634 d = grid_get_dot(g, points, px + (a + b), py - ( a + b)); grid_face_set_dot(g, d, 2);
2635 d = grid_get_dot(g, points, px + (a ), py - (2*a + b)); grid_face_set_dot(g, d, 3);
2636 d = grid_get_dot(g, points, px + (a ), py - (4*a + b)); grid_face_set_dot(g, d, 4);
2637 d = grid_get_dot(g, points, px + (a + b), py - (5*a + b)); grid_face_set_dot(g, d, 5);
2638 }
2639
2640 /* hexagon on right of dodecagon*/
2641 if (x < width - 1) {
2642 grid_face_add_new(g, 6);
2643 d = grid_get_dot(g, points, px + (2*a + 3*b), py - a); grid_face_set_dot(g, d, 0);
2644 d = grid_get_dot(g, points, px + (2*a + 3*b), py + a); grid_face_set_dot(g, d, 1);
2645 d = grid_get_dot(g, points, px + (2*a + 2*b), py + 2*a); grid_face_set_dot(g, d, 2);
2646 d = grid_get_dot(g, points, px + (2*a + b), py + a); grid_face_set_dot(g, d, 3);
2647 d = grid_get_dot(g, points, px + (2*a + b), py - a); grid_face_set_dot(g, d, 4);
2648 d = grid_get_dot(g, points, px + (2*a + 2*b), py - 2*a); grid_face_set_dot(g, d, 5);
2649 }
2650
2651 /* hexagon on bottom right of dodecagon */
2652 if ((y < height - 1) && (x < width - 1 || !(y % 2))) {
2653 grid_face_add_new(g, 6);
2654 d = grid_get_dot(g, points, px + (a + 2*b), py + (2*a + b)); grid_face_set_dot(g, d, 0);
2655 d = grid_get_dot(g, points, px + (a + 2*b), py + (4*a + b)); grid_face_set_dot(g, d, 1);
2656 d = grid_get_dot(g, points, px + (a + b), py + (5*a + b)); grid_face_set_dot(g, d, 2);
2657 d = grid_get_dot(g, points, px + (a ), py + (4*a + b)); grid_face_set_dot(g, d, 3);
2658 d = grid_get_dot(g, points, px + (a ), py + (2*a + b)); grid_face_set_dot(g, d, 4);
2659 d = grid_get_dot(g, points, px + (a + b), py + ( a + b)); grid_face_set_dot(g, d, 5);
2660 }
2661
2662 /* square on top right of dodecagon */
2663 if (y && (x < width - 1 )) {
2664 grid_face_add_new(g, 4);
2665 d = grid_get_dot(g, points, px + ( a + 2*b), py - (2*a + b)); grid_face_set_dot(g, d, 0);
2666 d = grid_get_dot(g, points, px + (2*a + 2*b), py - (2*a )); grid_face_set_dot(g, d, 1);
2667 d = grid_get_dot(g, points, px + (2*a + b), py - ( a )); grid_face_set_dot(g, d, 2);
2668 d = grid_get_dot(g, points, px + ( a + b), py - ( a + b)); grid_face_set_dot(g, d, 3);
2669 }
2670
2671 /* square on bottom right of dodecagon */
2672 if ((y < height - 1) && (x < width - 1 )) {
2673 grid_face_add_new(g, 4);
2674 d = grid_get_dot(g, points, px + (2*a + 2*b), py + (2*a )); grid_face_set_dot(g, d, 0);
2675 d = grid_get_dot(g, points, px + ( a + 2*b), py + (2*a + b)); grid_face_set_dot(g, d, 1);
2676 d = grid_get_dot(g, points, px + ( a + b), py + ( a + b)); grid_face_set_dot(g, d, 2);
2677 d = grid_get_dot(g, points, px + (2*a + b), py + ( a )); grid_face_set_dot(g, d, 3);
2678 }
2679
2680 /* square below dodecagon */
2681 if ((y < height - 1) && (x < width - 1 || !(y % 2)) && (x > 0 || (y % 2))) {
2682 grid_face_add_new(g, 4);
2683 d = grid_get_dot(g, points, px + a, py + (2*a + b)); grid_face_set_dot(g, d, 0);
2684 d = grid_get_dot(g, points, px + a, py + (4*a + b)); grid_face_set_dot(g, d, 1);
2685 d = grid_get_dot(g, points, px - a, py + (4*a + b)); grid_face_set_dot(g, d, 2);
2686 d = grid_get_dot(g, points, px - a, py + (2*a + b)); grid_face_set_dot(g, d, 3);
2687 }
2688
2689 /* square on bottom left of dodecagon */
2690 if (x && (y < height - 1)) {
2691 grid_face_add_new(g, 4);
2692 d = grid_get_dot(g, points, px - (2*a + b), py + ( a )); grid_face_set_dot(g, d, 0);
2693 d = grid_get_dot(g, points, px - ( a + b), py + ( a + b)); grid_face_set_dot(g, d, 1);
2694 d = grid_get_dot(g, points, px - ( a + 2*b), py + (2*a + b)); grid_face_set_dot(g, d, 2);
2695 d = grid_get_dot(g, points, px - (2*a + 2*b), py + (2*a )); grid_face_set_dot(g, d, 3);
2696 }
2697
2698 /* square on top left of dodecagon */
2699 if (x && y) {
2700 grid_face_add_new(g, 4);
2701 d = grid_get_dot(g, points, px - ( a + b), py - ( a + b)); grid_face_set_dot(g, d, 0);
2702 d = grid_get_dot(g, points, px - (2*a + b), py - ( a )); grid_face_set_dot(g, d, 1);
2703 d = grid_get_dot(g, points, px - (2*a + 2*b), py - (2*a )); grid_face_set_dot(g, d, 2);
2704 d = grid_get_dot(g, points, px - ( a + 2*b), py - (2*a + b)); grid_face_set_dot(g, d, 3);
2705
2706 }
2707
2708 /* square above dodecagon */
2709 if (y && (x < width - 1 || !(y % 2)) && (x > 0 || (y % 2))) {
2710 grid_face_add_new(g, 4);
2711 d = grid_get_dot(g, points, px + a, py - (4*a + b)); grid_face_set_dot(g, d, 0);
2712 d = grid_get_dot(g, points, px + a, py - (2*a + b)); grid_face_set_dot(g, d, 1);
2713 d = grid_get_dot(g, points, px - a, py - (2*a + b)); grid_face_set_dot(g, d, 2);
2714 d = grid_get_dot(g, points, px - a, py - (4*a + b)); grid_face_set_dot(g, d, 3);
2715 }
2716
2717 /* upper triangle (v) */
2718 if (y && (x < width - 1)) {
2719 grid_face_add_new(g, 3);
2720 d = grid_get_dot(g, points, px + (3*a + 2*b), py - (2*a + b)); grid_face_set_dot(g, d, 0);
2721 d = grid_get_dot(g, points, px + (2*a + 2*b), py - (2*a )); grid_face_set_dot(g, d, 1);
2722 d = grid_get_dot(g, points, px + ( a + 2*b), py - (2*a + b)); grid_face_set_dot(g, d, 2);
2723 }
2724
2725 /* lower triangle (^) */
2726 if ((y < height - 1) && (x < width - 1)) {
2727 grid_face_add_new(g, 3);
2728 d = grid_get_dot(g, points, px + (3*a + 2*b), py + (2*a + b)); grid_face_set_dot(g, d, 0);
2729 d = grid_get_dot(g, points, px + ( a + 2*b), py + (2*a + b)); grid_face_set_dot(g, d, 1);
2730 d = grid_get_dot(g, points, px + (2*a + 2*b), py + (2*a )); grid_face_set_dot(g, d, 2);
2731 }
2732 }
2733 }
2734
2735 freetree234(points);
2736 assert(g->num_faces <= max_faces);
2737 assert(g->num_dots <= max_dots);
2738
2739 grid_make_consistent(g);
2740 return g;
2741}
2742
2574typedef struct setface_ctx 2743typedef struct setface_ctx
2575{ 2744{
2576 int xmin, xmax, ymin, ymax; 2745 int xmin, xmax, ymin, ymax;
diff --git a/apps/plugins/puzzles/grid.h b/apps/plugins/puzzles/src/grid.h
index 17d0aa1961..fb8ac48790 100644
--- a/apps/plugins/puzzles/grid.h
+++ b/apps/plugins/puzzles/src/grid.h
@@ -105,6 +105,7 @@ typedef struct grid {
105 A(FLORET,floret) \ 105 A(FLORET,floret) \
106 A(DODECAGONAL,dodecagonal) \ 106 A(DODECAGONAL,dodecagonal) \
107 A(GREATDODECAGONAL,greatdodecagonal) \ 107 A(GREATDODECAGONAL,greatdodecagonal) \
108 A(GREATGREATDODECAGONAL,greatgreatdodecagonal) \
108 A(PENROSE_P2,penrose_p2_kite) \ 109 A(PENROSE_P2,penrose_p2_kite) \
109 A(PENROSE_P3,penrose_p3_thick) 110 A(PENROSE_P3,penrose_p3_thick)
110 111
diff --git a/apps/plugins/puzzles/gtk.c b/apps/plugins/puzzles/src/gtk.c
index e132c3db58..c5e3d1c997 100644
--- a/apps/plugins/puzzles/gtk.c
+++ b/apps/plugins/puzzles/src/gtk.c
@@ -3,7 +3,7 @@
3 */ 3 */
4 4
5#include <stdio.h> 5#include <stdio.h>
6#include "rbassert.h" 6#include <assert.h>
7#include <stdlib.h> 7#include <stdlib.h>
8#include <time.h> 8#include <time.h>
9#include <stdarg.h> 9#include <stdarg.h>
@@ -144,6 +144,9 @@ struct frontend {
144 GtkWidget *area; 144 GtkWidget *area;
145 GtkWidget *statusbar; 145 GtkWidget *statusbar;
146 GtkWidget *menubar; 146 GtkWidget *menubar;
147#if GTK_CHECK_VERSION(3,20,0)
148 GtkCssProvider *css_provider;
149#endif
147 guint statusctx; 150 guint statusctx;
148 int w, h; 151 int w, h;
149 midend *me; 152 midend *me;
@@ -179,7 +182,6 @@ struct frontend {
179 char *filesel_name; 182 char *filesel_name;
180#endif 183#endif
181 GSList *preset_radio; 184 GSList *preset_radio;
182 int n_preset_menu_items;
183 int preset_threaded; 185 int preset_threaded;
184 GtkWidget *preset_custom; 186 GtkWidget *preset_custom;
185 GtkWidget *copy_menu_item; 187 GtkWidget *copy_menu_item;
@@ -290,7 +292,27 @@ static void set_colour(frontend *fe, int colour)
290 292
291static void set_window_background(frontend *fe, int colour) 293static void set_window_background(frontend *fe, int colour)
292{ 294{
293#if GTK_CHECK_VERSION(3,0,0) 295#if GTK_CHECK_VERSION(3,20,0)
296 char css_buf[512];
297 sprintf(css_buf, ".background { "
298 "background-color: #%02x%02x%02x; }",
299 (unsigned)(fe->colours[3*colour + 0] * 255),
300 (unsigned)(fe->colours[3*colour + 1] * 255),
301 (unsigned)(fe->colours[3*colour + 2] * 255));
302 if (!fe->css_provider)
303 fe->css_provider = gtk_css_provider_new();
304 if (!gtk_css_provider_load_from_data(
305 GTK_CSS_PROVIDER(fe->css_provider), css_buf, -1, NULL))
306 assert(0 && "Couldn't load CSS");
307 gtk_style_context_add_provider(
308 gtk_widget_get_style_context(fe->window),
309 GTK_STYLE_PROVIDER(fe->css_provider),
310 GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
311 gtk_style_context_add_provider(
312 gtk_widget_get_style_context(fe->area),
313 GTK_STYLE_PROVIDER(fe->css_provider),
314 GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
315#elif GTK_CHECK_VERSION(3,0,0)
294 GdkRGBA rgba; 316 GdkRGBA rgba;
295 rgba.red = fe->colours[3*colour + 0]; 317 rgba.red = fe->colours[3*colour + 0];
296 rgba.green = fe->colours[3*colour + 1]; 318 rgba.green = fe->colours[3*colour + 1];
@@ -439,11 +461,13 @@ static void clear_backing_store(frontend *fe)
439 fe->image = NULL; 461 fe->image = NULL;
440} 462}
441 463
442static void wipe_and_destroy_cairo(frontend *fe, cairo_t *cr) 464static void wipe_and_maybe_destroy_cairo(frontend *fe, cairo_t *cr,
465 int destroy)
443{ 466{
444 cairo_set_source_rgb(cr, fe->colours[0], fe->colours[1], fe->colours[2]); 467 cairo_set_source_rgb(cr, fe->colours[0], fe->colours[1], fe->colours[2]);
445 cairo_paint(cr); 468 cairo_paint(cr);
446 cairo_destroy(cr); 469 if (destroy)
470 cairo_destroy(cr);
447} 471}
448 472
449static void setup_backing_store(frontend *fe) 473static void setup_backing_store(frontend *fe)
@@ -455,12 +479,29 @@ static void setup_backing_store(frontend *fe)
455 fe->image = cairo_image_surface_create(CAIRO_FORMAT_RGB24, 479 fe->image = cairo_image_surface_create(CAIRO_FORMAT_RGB24,
456 fe->pw, fe->ph); 480 fe->pw, fe->ph);
457 481
458 wipe_and_destroy_cairo(fe, cairo_create(fe->image)); 482 wipe_and_maybe_destroy_cairo(fe, cairo_create(fe->image), TRUE);
459#ifndef USE_CAIRO_WITHOUT_PIXMAP 483#ifndef USE_CAIRO_WITHOUT_PIXMAP
460 wipe_and_destroy_cairo(fe, gdk_cairo_create(fe->pixmap)); 484 wipe_and_maybe_destroy_cairo(fe, gdk_cairo_create(fe->pixmap), TRUE);
485#endif
486#if GTK_CHECK_VERSION(3,22,0)
487 {
488 GdkWindow *gdkwin;
489 cairo_region_t *region;
490 GdkDrawingContext *drawctx;
491 cairo_t *cr;
492
493 gdkwin = gtk_widget_get_window(fe->area);
494 region = gdk_window_get_clip_region(gdkwin);
495 drawctx = gdk_window_begin_draw_frame(gdkwin, region);
496 cr = gdk_drawing_context_get_cairo_context(drawctx);
497 wipe_and_maybe_destroy_cairo(fe, cr, FALSE);
498 gdk_window_end_draw_frame(gdkwin, drawctx);
499 cairo_region_destroy(region);
500 }
501#else
502 wipe_and_maybe_destroy_cairo(
503 fe, gdk_cairo_create(gtk_widget_get_window(fe->area)), TRUE);
461#endif 504#endif
462 wipe_and_destroy_cairo(fe, gdk_cairo_create
463 (gtk_widget_get_window(fe->area)));
464} 505}
465 506
466static int backing_store_ok(frontend *fe) 507static int backing_store_ok(frontend *fe)
@@ -1842,20 +1883,22 @@ static void changed_preset(frontend *fe)
1842 TRUE); 1883 TRUE);
1843 } else { 1884 } else {
1844 GSList *gs = fe->preset_radio; 1885 GSList *gs = fe->preset_radio;
1845 int i = fe->n_preset_menu_items - 1 - n; 1886 GSList *found = NULL;
1846 if (fe->preset_custom) 1887
1847 gs = gs->next; 1888 for (gs = fe->preset_radio; gs; gs = gs->next) {
1848 while (i && gs) { 1889 struct preset_menu_entry *entry =
1849 i--; 1890 (struct preset_menu_entry *)g_object_get_data(
1850 gs = gs->next; 1891 G_OBJECT(gs->data), "user-data");
1851 } 1892
1852 if (gs) { 1893 if (entry && entry->id != n)
1853 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gs->data), 1894 gtk_check_menu_item_set_active(
1854 TRUE); 1895 GTK_CHECK_MENU_ITEM(gs->data), FALSE);
1855 } else for (gs = fe->preset_radio; gs; gs = gs->next) { 1896 else
1856 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gs->data), 1897 found = gs;
1857 FALSE); 1898 }
1858 } 1899 if (found)
1900 gtk_check_menu_item_set_active(
1901 GTK_CHECK_MENU_ITEM(found->data), FALSE);
1859 } 1902 }
1860 fe->preset_threaded = FALSE; 1903 fe->preset_threaded = FALSE;
1861 1904
@@ -1977,14 +2020,15 @@ static void resize_fe(frontend *fe)
1977static void menu_preset_event(GtkMenuItem *menuitem, gpointer data) 2020static void menu_preset_event(GtkMenuItem *menuitem, gpointer data)
1978{ 2021{
1979 frontend *fe = (frontend *)data; 2022 frontend *fe = (frontend *)data;
1980 game_params *params = 2023 struct preset_menu_entry *entry =
1981 (game_params *)g_object_get_data(G_OBJECT(menuitem), "user-data"); 2024 (struct preset_menu_entry *)g_object_get_data(
2025 G_OBJECT(menuitem), "user-data");
1982 2026
1983 if (fe->preset_threaded || 2027 if (fe->preset_threaded ||
1984 (GTK_IS_CHECK_MENU_ITEM(menuitem) && 2028 (GTK_IS_CHECK_MENU_ITEM(menuitem) &&
1985 !gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem)))) 2029 !gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem))))
1986 return; 2030 return;
1987 midend_set_params(fe->me, params); 2031 midend_set_params(fe->me, entry->params);
1988 midend_new_game(fe->me); 2032 midend_new_game(fe->me);
1989 changed_preset(fe); 2033 changed_preset(fe);
1990 resize_fe(fe); 2034 resize_fe(fe);
@@ -2341,6 +2385,36 @@ static void add_menu_separator(GtkContainer *cont)
2341 gtk_widget_show(menuitem); 2385 gtk_widget_show(menuitem);
2342} 2386}
2343 2387
2388static void populate_gtk_preset_menu(frontend *fe, struct preset_menu *menu,
2389 GtkWidget *gtkmenu)
2390{
2391 int i;
2392
2393 for (i = 0; i < menu->n_entries; i++) {
2394 struct preset_menu_entry *entry = &menu->entries[i];
2395 GtkWidget *menuitem;
2396
2397 if (entry->params) {
2398 menuitem = gtk_radio_menu_item_new_with_label(
2399 fe->preset_radio, entry->title);
2400 fe->preset_radio = gtk_radio_menu_item_get_group(
2401 GTK_RADIO_MENU_ITEM(menuitem));
2402 g_object_set_data(G_OBJECT(menuitem), "user-data", entry);
2403 g_signal_connect(G_OBJECT(menuitem), "activate",
2404 G_CALLBACK(menu_preset_event), fe);
2405 } else {
2406 GtkWidget *submenu;
2407 menuitem = gtk_menu_item_new_with_label(entry->title);
2408 submenu = gtk_menu_new();
2409 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu);
2410 populate_gtk_preset_menu(fe, entry->submenu, submenu);
2411 }
2412
2413 gtk_container_add(GTK_CONTAINER(gtkmenu), menuitem);
2414 gtk_widget_show(menuitem);
2415 }
2416}
2417
2344enum { ARG_EITHER, ARG_SAVE, ARG_ID }; /* for argtype */ 2418enum { ARG_EITHER, ARG_SAVE, ARG_ID }; /* for argtype */
2345 2419
2346static frontend *new_window(char *arg, int argtype, char **error) 2420static frontend *new_window(char *arg, int argtype, char **error)
@@ -2353,8 +2427,12 @@ static frontend *new_window(char *arg, int argtype, char **error)
2353 char errbuf[1024]; 2427 char errbuf[1024];
2354 extern char *const *const xpm_icons[]; 2428 extern char *const *const xpm_icons[];
2355 extern const int n_xpm_icons; 2429 extern const int n_xpm_icons;
2430 struct preset_menu *preset_menu;
2356 2431
2357 fe = snew(frontend); 2432 fe = snew(frontend);
2433#if GTK_CHECK_VERSION(3,20,0)
2434 fe->css_provider = NULL;
2435#endif
2358 2436
2359 fe->timer_active = FALSE; 2437 fe->timer_active = FALSE;
2360 fe->timer_id = -1; 2438 fe->timer_id = -1;
@@ -2501,11 +2579,11 @@ static frontend *new_window(char *arg, int argtype, char **error)
2501 2579
2502 fe->preset_radio = NULL; 2580 fe->preset_radio = NULL;
2503 fe->preset_custom = NULL; 2581 fe->preset_custom = NULL;
2504 fe->n_preset_menu_items = 0;
2505 fe->preset_threaded = FALSE; 2582 fe->preset_threaded = FALSE;
2506 if ((n = midend_num_presets(fe->me)) > 0 || thegame.can_configure) { 2583
2584 preset_menu = midend_get_presets(fe->me, NULL);
2585 if (preset_menu->n_entries > 0 || thegame.can_configure) {
2507 GtkWidget *submenu; 2586 GtkWidget *submenu;
2508 int i;
2509 2587
2510 menuitem = gtk_menu_item_new_with_mnemonic("_Type"); 2588 menuitem = gtk_menu_item_new_with_mnemonic("_Type");
2511 gtk_container_add(GTK_CONTAINER(fe->menubar), menuitem); 2589 gtk_container_add(GTK_CONTAINER(fe->menubar), menuitem);
@@ -2514,23 +2592,7 @@ static frontend *new_window(char *arg, int argtype, char **error)
2514 submenu = gtk_menu_new(); 2592 submenu = gtk_menu_new();
2515 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); 2593 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu);
2516 2594
2517 for (i = 0; i < n; i++) { 2595 populate_gtk_preset_menu(fe, preset_menu, submenu);
2518 char *name;
2519 game_params *params;
2520
2521 midend_fetch_preset(fe->me, i, &name, &params);
2522
2523 menuitem =
2524 gtk_radio_menu_item_new_with_label(fe->preset_radio, name);
2525 fe->preset_radio =
2526 gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem));
2527 fe->n_preset_menu_items++;
2528 gtk_container_add(GTK_CONTAINER(submenu), menuitem);
2529 g_object_set_data(G_OBJECT(menuitem), "user-data", params);
2530 g_signal_connect(G_OBJECT(menuitem), "activate",
2531 G_CALLBACK(menu_preset_event), fe);
2532 gtk_widget_show(menuitem);
2533 }
2534 2596
2535 if (thegame.can_configure) { 2597 if (thegame.can_configure) {
2536 menuitem = fe->preset_custom = 2598 menuitem = fe->preset_custom =
@@ -2781,6 +2843,22 @@ char *fgetline(FILE *fp)
2781 return ret; 2843 return ret;
2782} 2844}
2783 2845
2846static void list_presets_from_menu(struct preset_menu *menu)
2847{
2848 int i;
2849
2850 for (i = 0; i < menu->n_entries; i++) {
2851 if (menu->entries[i].params) {
2852 char *paramstr = thegame.encode_params(
2853 menu->entries[i].params, TRUE);
2854 printf("%s %s\n", paramstr, menu->entries[i].title);
2855 sfree(paramstr);
2856 } else {
2857 list_presets_from_menu(menu->entries[i].submenu);
2858 }
2859 }
2860}
2861
2784int main(int argc, char **argv) 2862int main(int argc, char **argv)
2785{ 2863{
2786 char *pname = argv[0]; 2864 char *pname = argv[0];
@@ -3184,23 +3262,12 @@ int main(int argc, char **argv)
3184 * Another specialist mode which causes the puzzle to list the 3262 * Another specialist mode which causes the puzzle to list the
3185 * game_params strings for all its preset configurations. 3263 * game_params strings for all its preset configurations.
3186 */ 3264 */
3187 int i, npresets;
3188 midend *me; 3265 midend *me;
3266 struct preset_menu *menu;
3189 3267
3190 me = midend_new(NULL, &thegame, NULL, NULL); 3268 me = midend_new(NULL, &thegame, NULL, NULL);
3191 npresets = midend_num_presets(me); 3269 menu = midend_get_presets(me, NULL);
3192 3270 list_presets_from_menu(menu);
3193 for (i = 0; i < npresets; i++) {
3194 game_params *params;
3195 char *name, *paramstr;
3196
3197 midend_fetch_preset(me, i, &name, &params);
3198 paramstr = thegame.encode_params(params, TRUE);
3199
3200 printf("%s %s\n", paramstr, name);
3201 sfree(paramstr);
3202 }
3203
3204 midend_free(me); 3271 midend_free(me);
3205 return 0; 3272 return 0;
3206 } else { 3273 } else {
diff --git a/apps/plugins/puzzles/guess.R b/apps/plugins/puzzles/src/guess.R
index 0e1a00c073..0e1a00c073 100644
--- a/apps/plugins/puzzles/guess.R
+++ b/apps/plugins/puzzles/src/guess.R
diff --git a/apps/plugins/puzzles/guess.c b/apps/plugins/puzzles/src/guess.c
index d1187f3e3c..8f058638da 100644
--- a/apps/plugins/puzzles/guess.c
+++ b/apps/plugins/puzzles/src/guess.c
@@ -5,7 +5,7 @@
5#include <stdio.h> 5#include <stdio.h>
6#include <stdlib.h> 6#include <stdlib.h>
7#include <string.h> 7#include <string.h>
8#include "rbassert.h" 8#include <assert.h>
9#include <ctype.h> 9#include <ctype.h>
10#include <math.h> 10#include <math.h>
11 11
@@ -1480,7 +1480,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
1480const struct game thegame = { 1480const struct game thegame = {
1481 "Guess", "games.guess", "guess", 1481 "Guess", "games.guess", "guess",
1482 default_params, 1482 default_params,
1483 game_fetch_preset, 1483 game_fetch_preset, NULL,
1484 decode_params, 1484 decode_params,
1485 encode_params, 1485 encode_params,
1486 free_params, 1486 free_params,
diff --git a/apps/plugins/puzzles/src/guess.html b/apps/plugins/puzzles/src/guess.html
new file mode 100644
index 0000000000..b530f71a75
--- /dev/null
+++ b/apps/plugins/puzzles/src/guess.html
@@ -0,0 +1,94 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Guess</title>
7<link rel="previous" href="flip.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="pegs.html">
12</head>
13<body>
14<p><a href="flip.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="pegs.html">Next</a></p>
15<h1><a name="C15"></a>Chapter 15: <a name="i0"></a>Guess</h1>
16<p>
17You have a set of coloured pegs, and have to reproduce a predetermined sequence of them (chosen by the computer) within a certain number of guesses.
18</p>
19<p>
20Each guess gets marked with the number of correctly-coloured pegs in the correct places (in black), and also the number of correctly-coloured pegs in the wrong places (in white).
21</p>
22<p>
23This game is also known (and marketed, by Hasbro, mainly) as a board game &#8216;<a name="i1"></a>Mastermind&#8217;, with 6 colours, 4 pegs per row, and 10 guesses. However, this version allows custom settings of number of colours (up to 10), number of pegs per row, and number of guesses.
24</p>
25<p>
26Guess was contributed to this collection by James Harvey.
27</p>
28<h2><a name="S15.1"></a>15.1 <a name="i2"></a>Guess controls</h2>
29<p>
30This game can be played with either the keyboard or the mouse.
31</p>
32<p>
33With the mouse, drag a coloured peg from the tray on the left-hand side to its required position in the current guess; pegs may also be dragged from current and past guesses to copy them elsewhere. To remove a peg, drag it off its current position to somewhere invalid.
34</p>
35<p>
36Right-clicking in the current guess adds a &#8216;hold&#8217; marker; pegs that have hold markers will be automatically added to the next guess after marking.
37</p>
38<p>
39Alternatively, with the keyboard, the up and down cursor keys can be used to select a peg colour, the left and right keys to select a peg position, and the space bar or Enter key to place a peg of the selected colour in the chosen position. &#8216;D&#8217; or Backspace removes a peg, and Space adds a hold marker.
40</p>
41<p>
42Pressing &#8216;h&#8217; or &#8216;?&#8217; will fill the current guess with a suggested guess. Using this is not recommended for 10 or more pegs as it is slow.
43</p>
44<p>
45When the guess is complete, the smaller feedback pegs will be highlighted; clicking on these (or moving the peg cursor to them with the arrow keys and pressing the space bar or Enter key) will mark the current guess, copy any held pegs to the next guess, and move the &#8216;current guess&#8217; marker.
46</p>
47<p>
48If you correctly position all the pegs the solution will be displayed below; if you run out of guesses (or select &#8216;Solve...&#8217;) the solution will also be revealed.
49</p>
50<p>
51(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
52</p>
53<h2><a name="S15.2"></a>15.2 <a name="i3"></a>Guess parameters</h2>
54<p>
55These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu. The default game matches the parameters for the board game &#8216;Mastermind&#8217;.
56</p>
57<dl><dt>
58<em>Colours</em>
59</dt>
60<dd>
61Number of colours the solution is chosen from; from 2 to 10 (more is harder).
62</dd>
63<dt>
64<em>Pegs per guess</em>
65</dt>
66<dd>
67Number of pegs per guess (more is harder).
68</dd>
69<dt>
70<em>Guesses</em>
71</dt>
72<dd>
73Number of guesses you have to find the solution in (fewer is harder).
74</dd>
75<dt>
76<em>Allow blanks</em>
77</dt>
78<dd>
79Allows blank pegs to be given as part of a guess (makes it easier, because you know that those will never be counted as part of the solution). This is turned off by default.
80<p>
81Note that this doesn't allow blank pegs in the solution; if you really wanted that, use one extra colour.
82</p>
83
84</dd>
85<dt>
86<em>Allow duplicates</em>
87</dt>
88<dd>
89Allows the solution (and the guesses) to contain colours more than once; this increases the search space (making things harder), and is turned on by default.
90</dd>
91</dl>
92
93<hr><address></address></body>
94</html>
diff --git a/apps/plugins/puzzles/html/blackbox.html b/apps/plugins/puzzles/src/html/blackbox.html
index f98604f12f..f98604f12f 100644
--- a/apps/plugins/puzzles/html/blackbox.html
+++ b/apps/plugins/puzzles/src/html/blackbox.html
diff --git a/apps/plugins/puzzles/html/bridges.html b/apps/plugins/puzzles/src/html/bridges.html
index 06ec2d4d4b..06ec2d4d4b 100644
--- a/apps/plugins/puzzles/html/bridges.html
+++ b/apps/plugins/puzzles/src/html/bridges.html
diff --git a/apps/plugins/puzzles/html/cube.html b/apps/plugins/puzzles/src/html/cube.html
index f08e16c38d..f08e16c38d 100644
--- a/apps/plugins/puzzles/html/cube.html
+++ b/apps/plugins/puzzles/src/html/cube.html
diff --git a/apps/plugins/puzzles/html/dominosa.html b/apps/plugins/puzzles/src/html/dominosa.html
index d2f672806a..d2f672806a 100644
--- a/apps/plugins/puzzles/html/dominosa.html
+++ b/apps/plugins/puzzles/src/html/dominosa.html
diff --git a/apps/plugins/puzzles/html/fifteen.html b/apps/plugins/puzzles/src/html/fifteen.html
index 53053b440d..53053b440d 100644
--- a/apps/plugins/puzzles/html/fifteen.html
+++ b/apps/plugins/puzzles/src/html/fifteen.html
diff --git a/apps/plugins/puzzles/html/filling.html b/apps/plugins/puzzles/src/html/filling.html
index 70ce16d4a9..70ce16d4a9 100644
--- a/apps/plugins/puzzles/html/filling.html
+++ b/apps/plugins/puzzles/src/html/filling.html
diff --git a/apps/plugins/puzzles/html/flip.html b/apps/plugins/puzzles/src/html/flip.html
index 404aae6b9a..404aae6b9a 100644
--- a/apps/plugins/puzzles/html/flip.html
+++ b/apps/plugins/puzzles/src/html/flip.html
diff --git a/apps/plugins/puzzles/html/flood.html b/apps/plugins/puzzles/src/html/flood.html
index cf09eac766..cf09eac766 100644
--- a/apps/plugins/puzzles/html/flood.html
+++ b/apps/plugins/puzzles/src/html/flood.html
diff --git a/apps/plugins/puzzles/html/galaxies.html b/apps/plugins/puzzles/src/html/galaxies.html
index 8041a95cee..8041a95cee 100644
--- a/apps/plugins/puzzles/html/galaxies.html
+++ b/apps/plugins/puzzles/src/html/galaxies.html
diff --git a/apps/plugins/puzzles/html/group.html b/apps/plugins/puzzles/src/html/group.html
index c0f52de629..c0f52de629 100644
--- a/apps/plugins/puzzles/html/group.html
+++ b/apps/plugins/puzzles/src/html/group.html
diff --git a/apps/plugins/puzzles/html/guess.html b/apps/plugins/puzzles/src/html/guess.html
index 1e4fc1ed04..1e4fc1ed04 100644
--- a/apps/plugins/puzzles/html/guess.html
+++ b/apps/plugins/puzzles/src/html/guess.html
diff --git a/apps/plugins/puzzles/html/inertia.html b/apps/plugins/puzzles/src/html/inertia.html
index 20077c0048..20077c0048 100644
--- a/apps/plugins/puzzles/html/inertia.html
+++ b/apps/plugins/puzzles/src/html/inertia.html
diff --git a/apps/plugins/puzzles/html/javapage.pl b/apps/plugins/puzzles/src/html/javapage.pl
index cd5e6a1669..cd5e6a1669 100755
--- a/apps/plugins/puzzles/html/javapage.pl
+++ b/apps/plugins/puzzles/src/html/javapage.pl
diff --git a/apps/plugins/puzzles/src/html/jspage.pl b/apps/plugins/puzzles/src/html/jspage.pl
new file mode 100755
index 0000000000..a21f977166
--- /dev/null
+++ b/apps/plugins/puzzles/src/html/jspage.pl
@@ -0,0 +1,242 @@
1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6open my $footerfile, "<", shift @ARGV or die "footer: open: $!\n";
7my $footer = "";
8$footer .= $_ while <$footerfile>;
9close $footerfile;
10
11for my $arg (@ARGV) {
12 $arg =~ /(.*\/)?([^\/]+)\.html$/ or die;
13 my $filename = $2;
14 open my $gamefile, "<", $arg or die "$arg: open: $!\n";
15 my $unfinished = 0;
16 my $docname = $filename;
17 chomp(my $puzzlename = <$gamefile>);
18 while ($puzzlename =~ s/^([^:=]+)(=([^:]+))?://) {
19 if ($1 eq "unfinished") {
20 $unfinished = 1;
21 } elsif ($1 eq "docname") {
22 $docname = $3;
23 } else {
24 die "$arg: unknown keyword '$1'\n";
25 }
26 }
27 my $instructions = "";
28 $instructions .= $_ while <$gamefile>;
29 close $gamefile;
30
31 open my $outpage, ">", "${filename}.html";
32
33 my $unfinishedtitlefragment = $unfinished ? "an unfinished puzzle " : "";
34 my $unfinishedheading = $unfinished ? "<h2 align=center>an unfinished puzzle</h2>\n" : "";
35 my $unfinishedpara;
36 my $links;
37 if ($unfinished) {
38 $unfinishedpara = <<EOF;
39<p>
40You have found your way to a page containing an <em>unfinished</em>
41puzzle in my collection, not linked from the <a href="../">main
42puzzles page</a>. Don't be surprised if things are hard to understand
43or don't work as you expect.
44EOF
45 $links = <<EOF;
46<p align="center">
47<a href="../">Back to main puzzles page</a> (which does not link to this)
48EOF
49 } else {
50 $unfinishedpara = "";
51 $links = <<EOF;
52<p align="center">
53<a href="../doc/${docname}.html#${docname}">Full instructions</a>
54|
55<a href="../">Back to main puzzles page</a>
56EOF
57 }
58
59 print $outpage <<EOF;
60<!DOCTYPE html>
61<html>
62<head>
63<meta http-equiv="Content-Type" content="text/html; charset=ASCII" />
64<title>${puzzlename}, ${unfinishedtitlefragment}from Simon Tatham's Portable Puzzle Collection</title>
65<script type="text/javascript" src="${filename}.js"></script>
66<style class="text/css">
67/* Margins and centring on the top-level div for the game menu */
68#gamemenu { margin-top: 0; margin-bottom: 0.5em; text-align: center }
69
70/* Inside that div, the main menu bar and every submenu inside it is a <ul> */
71#gamemenu ul {
72 list-style: none; /* get rid of the normal unordered-list bullets */
73 display: inline; /* make top-level menu bar items appear side by side */
74 position: relative; /* allow submenus to position themselves near parent */
75 margin: 0;
76 margin-bottom: 0.5em;
77 padding: 0;
78}
79
80/* Individual menu items are <li> elements within such a <ul> */
81#gamemenu ul li {
82 /* Add a little mild text formatting */
83 font-weight: bold; font-size: 0.8em;
84 /* Line height and padding appropriate to top-level menu items */
85 padding-left: 0.75em; padding-right: 0.75em;
86 padding-top: 0.2em; padding-bottom: 0.2em;
87 margin: 0;
88 /* Make top-level menu items appear side by side, not vertically stacked */
89 display: inline;
90 /* Suppress the text-selection I-beam pointer */
91 cursor: default;
92 /* Surround each menu item with a border. The left border is removed
93 * because it will abut the right border of the previous item. (A rule
94 * below will reinstate the left border for the leftmost menu item.) */
95 border-left: 0;
96 border-right: 1px solid rgba(0,0,0,0.3);
97 border-top: 1px solid rgba(0,0,0,0.3);
98 border-bottom: 1px solid rgba(0,0,0,0.3);
99}
100
101#gamemenu ul li.disabled {
102 /* Grey out menu items with the "disabled" class */
103 color: rgba(0,0,0,0.5);
104}
105
106#gamemenu ul li:first-of-type {
107 /* Reinstate the left border for the leftmost top-level menu item */
108 border-left: 1px solid rgba(0,0,0,0.3);
109}
110
111#gamemenu ul li:hover {
112 /* When the mouse is over a menu item, highlight it */
113 background: rgba(0,0,0,0.3);
114 /* Set position:relative, so that if this item has a submenu it can
115 * position itself relative to the parent item. */
116 position: relative;
117}
118
119#gamemenu ul li.disabled:hover {
120 /* Disabled menu items don't get a highlight on mouse hover */
121 background: inherit;
122}
123
124#gamemenu ul ul {
125 /* Second-level menus and below are not displayed by default */
126 display: none;
127 /* When they are displayed, they are positioned immediately below
128 * their parent <li>, and with the left edge aligning */
129 position: absolute;
130 top: 100%;
131 left: 0;
132 /* We must specify an explicit background colour for submenus, because
133 * they must be opaque (don't want other page contents showing through
134 * them). */
135 background: white;
136 /* And make sure they appear in front. */
137 z-index: 1;
138}
139
140#gamemenu ul ul.left {
141 /* A second-level menu with class "left" aligns its right edge with
142 * its parent, rather than its left edge */
143 left: inherit; right: 0;
144}
145
146/* Menu items in second-level menus and below */
147#gamemenu ul ul li {
148 /* Go back to vertical stacking, for drop-down submenus */
149 display: block;
150 /* Inhibit wrapping, so the submenu will expand its width as needed. */
151 white-space: nowrap;
152 /* Override the text-align:center from above */
153 text-align: left;
154 /* Don't make the text any smaller than the previous level of menu */
155 font-size: 100%;
156 /* This time it's the top border that we omit on all but the first
157 * element in the submenu, since now they're vertically stacked */
158 border-left: 1px solid rgba(0,0,0,0.3);
159 border-right: 1px solid rgba(0,0,0,0.3);
160 border-top: 0;
161 border-bottom: 1px solid rgba(0,0,0,0.3);
162}
163
164#gamemenu ul ul li:first-of-type {
165 /* Reinstate top border for first item in a submenu */
166 border-top: 1px solid rgba(0,0,0,0.3);
167}
168
169#gamemenu ul ul ul {
170 /* Third-level submenus are drawn to the side of their parent menu
171 * item, not below it */
172 top: 0; left: 100%;
173}
174
175#gamemenu ul ul ul.left {
176 /* A submenu with class "left" goes to the left of its parent,
177 * not the right */
178 left: inherit; right: 100%;
179}
180
181#gamemenu ul li:hover > ul {
182 /* Last but by no means least, the all-important line that makes
183 * submenus be displayed! Any <ul> whose parent <li> is being
184 * hovered over gets display:block overriding the display:none
185 * from above. */
186 display: block;
187}
188</style>
189</head>
190<body onLoad="initPuzzle();">
191<h1 align=center>${puzzlename}</h1>
192${unfinishedheading}
193<h2 align=center>from Simon Tatham's Portable Puzzle Collection</h2>
194
195${unfinishedpara}
196
197<hr>
198<div id="puzzle" style="display: none">
199<div id="gamemenu"><ul><li id="new">New game</li
200><li id="restart">Restart game</li
201><li id="undo">Undo move</li
202><li id="redo">Redo move</li
203><li id="solve">Solve game</li
204><li id="specific">Enter game ID</li
205><li id="random">Enter random seed</li
206><li>Select game type<ul id="gametype" class="left"></ul></li
207></ul></div>
208<div align=center>
209 <div id="resizable" style="position:relative; left:0; top:0">
210 <canvas style="display: block" id="puzzlecanvas" width="1px" height="1px" tabindex="1">
211 </canvas>
212 <div id="statusbarholder" style="display: block">
213 </div>
214 </div>
215 <p>
216 Link to this puzzle:
217 <a id="permalink-desc">by game ID</a>
218 <a id="permalink-seed">by random seed</a>
219 </p>
220</div>
221</div>
222<div id="apology">
223Sorry, this Javascript puzzle doesn't seem to work in your web
224browser. Perhaps you have Javascript disabled, or perhaps your browser
225doesn't provide a feature that the puzzle code requires (such as
226<a href="https://developer.mozilla.org/en-US/docs/JavaScript/Typed_arrays">typed arrays</a>).
227These puzzles have been successfully run in Firefox 19, Chrome 26,
228Internet Explorer 10 and Safari 6.
229</div>
230<hr>
231
232${instructions}
233
234${links}
235
236${footer}
237</body>
238</html>
239EOF
240
241 close $outpage;
242}
diff --git a/apps/plugins/puzzles/html/keen.html b/apps/plugins/puzzles/src/html/keen.html
index bd0eb3644d..bd0eb3644d 100644
--- a/apps/plugins/puzzles/html/keen.html
+++ b/apps/plugins/puzzles/src/html/keen.html
diff --git a/apps/plugins/puzzles/html/lightup.html b/apps/plugins/puzzles/src/html/lightup.html
index 2de2f91bb9..2de2f91bb9 100644
--- a/apps/plugins/puzzles/html/lightup.html
+++ b/apps/plugins/puzzles/src/html/lightup.html
diff --git a/apps/plugins/puzzles/html/loopy.html b/apps/plugins/puzzles/src/html/loopy.html
index 96f3a9d908..96f3a9d908 100644
--- a/apps/plugins/puzzles/html/loopy.html
+++ b/apps/plugins/puzzles/src/html/loopy.html
diff --git a/apps/plugins/puzzles/html/magnets.html b/apps/plugins/puzzles/src/html/magnets.html
index 2807569a6c..2807569a6c 100644
--- a/apps/plugins/puzzles/html/magnets.html
+++ b/apps/plugins/puzzles/src/html/magnets.html
diff --git a/apps/plugins/puzzles/html/map.html b/apps/plugins/puzzles/src/html/map.html
index 5f81793054..5f81793054 100644
--- a/apps/plugins/puzzles/html/map.html
+++ b/apps/plugins/puzzles/src/html/map.html
diff --git a/apps/plugins/puzzles/html/mines.html b/apps/plugins/puzzles/src/html/mines.html
index d17d6ffa80..d17d6ffa80 100644
--- a/apps/plugins/puzzles/html/mines.html
+++ b/apps/plugins/puzzles/src/html/mines.html
diff --git a/apps/plugins/puzzles/html/net.html b/apps/plugins/puzzles/src/html/net.html
index 08bffbac3e..08bffbac3e 100644
--- a/apps/plugins/puzzles/html/net.html
+++ b/apps/plugins/puzzles/src/html/net.html
diff --git a/apps/plugins/puzzles/html/netslide.html b/apps/plugins/puzzles/src/html/netslide.html
index f1877417d4..f1877417d4 100644
--- a/apps/plugins/puzzles/html/netslide.html
+++ b/apps/plugins/puzzles/src/html/netslide.html
diff --git a/apps/plugins/puzzles/html/palisade.html b/apps/plugins/puzzles/src/html/palisade.html
index 5b6b933104..5b6b933104 100644
--- a/apps/plugins/puzzles/html/palisade.html
+++ b/apps/plugins/puzzles/src/html/palisade.html
diff --git a/apps/plugins/puzzles/html/pattern.html b/apps/plugins/puzzles/src/html/pattern.html
index 54e05d6416..54e05d6416 100644
--- a/apps/plugins/puzzles/html/pattern.html
+++ b/apps/plugins/puzzles/src/html/pattern.html
diff --git a/apps/plugins/puzzles/html/pearl.html b/apps/plugins/puzzles/src/html/pearl.html
index 2ca25a5ee0..2ca25a5ee0 100644
--- a/apps/plugins/puzzles/html/pearl.html
+++ b/apps/plugins/puzzles/src/html/pearl.html
diff --git a/apps/plugins/puzzles/html/pegs.html b/apps/plugins/puzzles/src/html/pegs.html
index 4a2378873e..4a2378873e 100644
--- a/apps/plugins/puzzles/html/pegs.html
+++ b/apps/plugins/puzzles/src/html/pegs.html
diff --git a/apps/plugins/puzzles/html/range.html b/apps/plugins/puzzles/src/html/range.html
index bb5b59c4d2..bb5b59c4d2 100644
--- a/apps/plugins/puzzles/html/range.html
+++ b/apps/plugins/puzzles/src/html/range.html
diff --git a/apps/plugins/puzzles/html/rect.html b/apps/plugins/puzzles/src/html/rect.html
index d23d827663..d23d827663 100644
--- a/apps/plugins/puzzles/html/rect.html
+++ b/apps/plugins/puzzles/src/html/rect.html
diff --git a/apps/plugins/puzzles/html/samegame.html b/apps/plugins/puzzles/src/html/samegame.html
index e6de095210..e6de095210 100644
--- a/apps/plugins/puzzles/html/samegame.html
+++ b/apps/plugins/puzzles/src/html/samegame.html
diff --git a/apps/plugins/puzzles/html/signpost.html b/apps/plugins/puzzles/src/html/signpost.html
index fa23e99de0..fa23e99de0 100644
--- a/apps/plugins/puzzles/html/signpost.html
+++ b/apps/plugins/puzzles/src/html/signpost.html
diff --git a/apps/plugins/puzzles/html/singles.html b/apps/plugins/puzzles/src/html/singles.html
index 252bffb380..252bffb380 100644
--- a/apps/plugins/puzzles/html/singles.html
+++ b/apps/plugins/puzzles/src/html/singles.html
diff --git a/apps/plugins/puzzles/html/sixteen.html b/apps/plugins/puzzles/src/html/sixteen.html
index 4530469fe6..4530469fe6 100644
--- a/apps/plugins/puzzles/html/sixteen.html
+++ b/apps/plugins/puzzles/src/html/sixteen.html
diff --git a/apps/plugins/puzzles/html/slant.html b/apps/plugins/puzzles/src/html/slant.html
index d6d31aa302..d6d31aa302 100644
--- a/apps/plugins/puzzles/html/slant.html
+++ b/apps/plugins/puzzles/src/html/slant.html
diff --git a/apps/plugins/puzzles/html/solo.html b/apps/plugins/puzzles/src/html/solo.html
index 88ebd5cb29..88ebd5cb29 100644
--- a/apps/plugins/puzzles/html/solo.html
+++ b/apps/plugins/puzzles/src/html/solo.html
diff --git a/apps/plugins/puzzles/html/tents.html b/apps/plugins/puzzles/src/html/tents.html
index e3f6d5f0ea..e3f6d5f0ea 100644
--- a/apps/plugins/puzzles/html/tents.html
+++ b/apps/plugins/puzzles/src/html/tents.html
diff --git a/apps/plugins/puzzles/html/towers.html b/apps/plugins/puzzles/src/html/towers.html
index a710e0ab6e..a710e0ab6e 100644
--- a/apps/plugins/puzzles/html/towers.html
+++ b/apps/plugins/puzzles/src/html/towers.html
diff --git a/apps/plugins/puzzles/html/tracks.html b/apps/plugins/puzzles/src/html/tracks.html
index afabed37ac..afabed37ac 100644
--- a/apps/plugins/puzzles/html/tracks.html
+++ b/apps/plugins/puzzles/src/html/tracks.html
diff --git a/apps/plugins/puzzles/html/twiddle.html b/apps/plugins/puzzles/src/html/twiddle.html
index 5f94e4e120..5f94e4e120 100644
--- a/apps/plugins/puzzles/html/twiddle.html
+++ b/apps/plugins/puzzles/src/html/twiddle.html
diff --git a/apps/plugins/puzzles/html/undead.html b/apps/plugins/puzzles/src/html/undead.html
index c21374f6dc..c21374f6dc 100644
--- a/apps/plugins/puzzles/html/undead.html
+++ b/apps/plugins/puzzles/src/html/undead.html
diff --git a/apps/plugins/puzzles/html/unequal.html b/apps/plugins/puzzles/src/html/unequal.html
index 085f82effc..085f82effc 100644
--- a/apps/plugins/puzzles/html/unequal.html
+++ b/apps/plugins/puzzles/src/html/unequal.html
diff --git a/apps/plugins/puzzles/html/unruly.html b/apps/plugins/puzzles/src/html/unruly.html
index 2cd3fb25f5..2cd3fb25f5 100644
--- a/apps/plugins/puzzles/html/unruly.html
+++ b/apps/plugins/puzzles/src/html/unruly.html
diff --git a/apps/plugins/puzzles/html/untangle.html b/apps/plugins/puzzles/src/html/untangle.html
index 7171a3d55d..7171a3d55d 100644
--- a/apps/plugins/puzzles/html/untangle.html
+++ b/apps/plugins/puzzles/src/html/untangle.html
diff --git a/apps/plugins/puzzles/icons/Makefile b/apps/plugins/puzzles/src/icons/Makefile
index 00dae1f841..00dae1f841 100644
--- a/apps/plugins/puzzles/icons/Makefile
+++ b/apps/plugins/puzzles/src/icons/Makefile
diff --git a/apps/plugins/puzzles/icons/blackbox.sav b/apps/plugins/puzzles/src/icons/blackbox.sav
index 4483f3c81a..4483f3c81a 100644
--- a/apps/plugins/puzzles/icons/blackbox.sav
+++ b/apps/plugins/puzzles/src/icons/blackbox.sav
diff --git a/apps/plugins/puzzles/icons/bridges.sav b/apps/plugins/puzzles/src/icons/bridges.sav
index ddae7085cd..ddae7085cd 100644
--- a/apps/plugins/puzzles/icons/bridges.sav
+++ b/apps/plugins/puzzles/src/icons/bridges.sav
diff --git a/apps/plugins/puzzles/icons/cicon.pl b/apps/plugins/puzzles/src/icons/cicon.pl
index 3578bd33fe..3578bd33fe 100755
--- a/apps/plugins/puzzles/icons/cicon.pl
+++ b/apps/plugins/puzzles/src/icons/cicon.pl
diff --git a/apps/plugins/puzzles/icons/crop.sh b/apps/plugins/puzzles/src/icons/crop.sh
index 0d15d3c9b9..0d15d3c9b9 100755
--- a/apps/plugins/puzzles/icons/crop.sh
+++ b/apps/plugins/puzzles/src/icons/crop.sh
diff --git a/apps/plugins/puzzles/icons/cube.sav b/apps/plugins/puzzles/src/icons/cube.sav
index bb123f4e74..bb123f4e74 100644
--- a/apps/plugins/puzzles/icons/cube.sav
+++ b/apps/plugins/puzzles/src/icons/cube.sav
diff --git a/apps/plugins/puzzles/icons/dominosa.sav b/apps/plugins/puzzles/src/icons/dominosa.sav
index 5991f3e57e..5991f3e57e 100644
--- a/apps/plugins/puzzles/icons/dominosa.sav
+++ b/apps/plugins/puzzles/src/icons/dominosa.sav
diff --git a/apps/plugins/puzzles/icons/fifteen.sav b/apps/plugins/puzzles/src/icons/fifteen.sav
index d81345a7d8..d81345a7d8 100644
--- a/apps/plugins/puzzles/icons/fifteen.sav
+++ b/apps/plugins/puzzles/src/icons/fifteen.sav
diff --git a/apps/plugins/puzzles/icons/filling.sav b/apps/plugins/puzzles/src/icons/filling.sav
index caf0bb2d4c..caf0bb2d4c 100644
--- a/apps/plugins/puzzles/icons/filling.sav
+++ b/apps/plugins/puzzles/src/icons/filling.sav
diff --git a/apps/plugins/puzzles/icons/flip.sav b/apps/plugins/puzzles/src/icons/flip.sav
index 82b4c49357..82b4c49357 100644
--- a/apps/plugins/puzzles/icons/flip.sav
+++ b/apps/plugins/puzzles/src/icons/flip.sav
diff --git a/apps/plugins/puzzles/icons/flood.sav b/apps/plugins/puzzles/src/icons/flood.sav
index ac4adf7020..ac4adf7020 100644
--- a/apps/plugins/puzzles/icons/flood.sav
+++ b/apps/plugins/puzzles/src/icons/flood.sav
diff --git a/apps/plugins/puzzles/icons/galaxies.sav b/apps/plugins/puzzles/src/icons/galaxies.sav
index 42d18bc335..42d18bc335 100644
--- a/apps/plugins/puzzles/icons/galaxies.sav
+++ b/apps/plugins/puzzles/src/icons/galaxies.sav
diff --git a/apps/plugins/puzzles/icons/guess.sav b/apps/plugins/puzzles/src/icons/guess.sav
index 69852bf769..69852bf769 100644
--- a/apps/plugins/puzzles/icons/guess.sav
+++ b/apps/plugins/puzzles/src/icons/guess.sav
diff --git a/apps/plugins/puzzles/icons/icon.pl b/apps/plugins/puzzles/src/icons/icon.pl
index fcb1aa3e2c..fcb1aa3e2c 100755
--- a/apps/plugins/puzzles/icons/icon.pl
+++ b/apps/plugins/puzzles/src/icons/icon.pl
diff --git a/apps/plugins/puzzles/icons/inertia.sav b/apps/plugins/puzzles/src/icons/inertia.sav
index a6d6faed1b..a6d6faed1b 100644
--- a/apps/plugins/puzzles/icons/inertia.sav
+++ b/apps/plugins/puzzles/src/icons/inertia.sav
diff --git a/apps/plugins/puzzles/icons/keen.sav b/apps/plugins/puzzles/src/icons/keen.sav
index 4adbd42d17..4adbd42d17 100644
--- a/apps/plugins/puzzles/icons/keen.sav
+++ b/apps/plugins/puzzles/src/icons/keen.sav
diff --git a/apps/plugins/puzzles/icons/lightup.sav b/apps/plugins/puzzles/src/icons/lightup.sav
index 21b59bdec4..21b59bdec4 100644
--- a/apps/plugins/puzzles/icons/lightup.sav
+++ b/apps/plugins/puzzles/src/icons/lightup.sav
diff --git a/apps/plugins/puzzles/icons/loopy.sav b/apps/plugins/puzzles/src/icons/loopy.sav
index 11611818af..11611818af 100644
--- a/apps/plugins/puzzles/icons/loopy.sav
+++ b/apps/plugins/puzzles/src/icons/loopy.sav
diff --git a/apps/plugins/puzzles/icons/magnets.sav b/apps/plugins/puzzles/src/icons/magnets.sav
index 3c317b70ce..3c317b70ce 100644
--- a/apps/plugins/puzzles/icons/magnets.sav
+++ b/apps/plugins/puzzles/src/icons/magnets.sav
diff --git a/apps/plugins/puzzles/icons/map.sav b/apps/plugins/puzzles/src/icons/map.sav
index 33863e1eeb..33863e1eeb 100644
--- a/apps/plugins/puzzles/icons/map.sav
+++ b/apps/plugins/puzzles/src/icons/map.sav
diff --git a/apps/plugins/puzzles/icons/mines.sav b/apps/plugins/puzzles/src/icons/mines.sav
index a827541163..a827541163 100644
--- a/apps/plugins/puzzles/icons/mines.sav
+++ b/apps/plugins/puzzles/src/icons/mines.sav
diff --git a/apps/plugins/puzzles/icons/net.sav b/apps/plugins/puzzles/src/icons/net.sav
index 06a5426280..06a5426280 100644
--- a/apps/plugins/puzzles/icons/net.sav
+++ b/apps/plugins/puzzles/src/icons/net.sav
diff --git a/apps/plugins/puzzles/icons/netslide.sav b/apps/plugins/puzzles/src/icons/netslide.sav
index f37178ee0c..f37178ee0c 100644
--- a/apps/plugins/puzzles/icons/netslide.sav
+++ b/apps/plugins/puzzles/src/icons/netslide.sav
diff --git a/apps/plugins/puzzles/icons/palisade.sav b/apps/plugins/puzzles/src/icons/palisade.sav
index a935e890bb..a935e890bb 100644
--- a/apps/plugins/puzzles/icons/palisade.sav
+++ b/apps/plugins/puzzles/src/icons/palisade.sav
diff --git a/apps/plugins/puzzles/icons/pattern.sav b/apps/plugins/puzzles/src/icons/pattern.sav
index 97c2396052..97c2396052 100644
--- a/apps/plugins/puzzles/icons/pattern.sav
+++ b/apps/plugins/puzzles/src/icons/pattern.sav
diff --git a/apps/plugins/puzzles/icons/pearl.sav b/apps/plugins/puzzles/src/icons/pearl.sav
index 730ca85149..730ca85149 100644
--- a/apps/plugins/puzzles/icons/pearl.sav
+++ b/apps/plugins/puzzles/src/icons/pearl.sav
diff --git a/apps/plugins/puzzles/icons/pegs.sav b/apps/plugins/puzzles/src/icons/pegs.sav
index 22b8a0d82f..22b8a0d82f 100644
--- a/apps/plugins/puzzles/icons/pegs.sav
+++ b/apps/plugins/puzzles/src/icons/pegs.sav
diff --git a/apps/plugins/puzzles/icons/range.sav b/apps/plugins/puzzles/src/icons/range.sav
index 708e7db248..708e7db248 100644
--- a/apps/plugins/puzzles/icons/range.sav
+++ b/apps/plugins/puzzles/src/icons/range.sav
diff --git a/apps/plugins/puzzles/icons/rect.sav b/apps/plugins/puzzles/src/icons/rect.sav
index 17264daeeb..17264daeeb 100644
--- a/apps/plugins/puzzles/icons/rect.sav
+++ b/apps/plugins/puzzles/src/icons/rect.sav
diff --git a/apps/plugins/puzzles/icons/samegame.sav b/apps/plugins/puzzles/src/icons/samegame.sav
index f92b52d1b6..f92b52d1b6 100644
--- a/apps/plugins/puzzles/icons/samegame.sav
+++ b/apps/plugins/puzzles/src/icons/samegame.sav
diff --git a/apps/plugins/puzzles/icons/screenshot.sh b/apps/plugins/puzzles/src/icons/screenshot.sh
index 0e2a06eea7..0e2a06eea7 100755
--- a/apps/plugins/puzzles/icons/screenshot.sh
+++ b/apps/plugins/puzzles/src/icons/screenshot.sh
diff --git a/apps/plugins/puzzles/icons/signpost.sav b/apps/plugins/puzzles/src/icons/signpost.sav
index 9ad1958ddf..9ad1958ddf 100644
--- a/apps/plugins/puzzles/icons/signpost.sav
+++ b/apps/plugins/puzzles/src/icons/signpost.sav
diff --git a/apps/plugins/puzzles/icons/singles.sav b/apps/plugins/puzzles/src/icons/singles.sav
index 260fd1f2b3..260fd1f2b3 100644
--- a/apps/plugins/puzzles/icons/singles.sav
+++ b/apps/plugins/puzzles/src/icons/singles.sav
diff --git a/apps/plugins/puzzles/icons/sixteen.sav b/apps/plugins/puzzles/src/icons/sixteen.sav
index 076b1fbd4d..076b1fbd4d 100644
--- a/apps/plugins/puzzles/icons/sixteen.sav
+++ b/apps/plugins/puzzles/src/icons/sixteen.sav
diff --git a/apps/plugins/puzzles/icons/slant.sav b/apps/plugins/puzzles/src/icons/slant.sav
index 02017e5d48..02017e5d48 100644
--- a/apps/plugins/puzzles/icons/slant.sav
+++ b/apps/plugins/puzzles/src/icons/slant.sav
diff --git a/apps/plugins/puzzles/icons/solo.sav b/apps/plugins/puzzles/src/icons/solo.sav
index 385cc68fe5..385cc68fe5 100644
--- a/apps/plugins/puzzles/icons/solo.sav
+++ b/apps/plugins/puzzles/src/icons/solo.sav
diff --git a/apps/plugins/puzzles/icons/square.pl b/apps/plugins/puzzles/src/icons/square.pl
index 815b94b532..815b94b532 100755
--- a/apps/plugins/puzzles/icons/square.pl
+++ b/apps/plugins/puzzles/src/icons/square.pl
diff --git a/apps/plugins/puzzles/icons/tents.sav b/apps/plugins/puzzles/src/icons/tents.sav
index 292c2d2d75..292c2d2d75 100644
--- a/apps/plugins/puzzles/icons/tents.sav
+++ b/apps/plugins/puzzles/src/icons/tents.sav
diff --git a/apps/plugins/puzzles/icons/towers.sav b/apps/plugins/puzzles/src/icons/towers.sav
index 351d473a63..351d473a63 100644
--- a/apps/plugins/puzzles/icons/towers.sav
+++ b/apps/plugins/puzzles/src/icons/towers.sav
diff --git a/apps/plugins/puzzles/icons/tracks.sav b/apps/plugins/puzzles/src/icons/tracks.sav
index ca30644506..ca30644506 100644
--- a/apps/plugins/puzzles/icons/tracks.sav
+++ b/apps/plugins/puzzles/src/icons/tracks.sav
diff --git a/apps/plugins/puzzles/icons/twiddle.sav b/apps/plugins/puzzles/src/icons/twiddle.sav
index 2863033f99..2863033f99 100644
--- a/apps/plugins/puzzles/icons/twiddle.sav
+++ b/apps/plugins/puzzles/src/icons/twiddle.sav
diff --git a/apps/plugins/puzzles/icons/undead.sav b/apps/plugins/puzzles/src/icons/undead.sav
index 3c314dde8a..3c314dde8a 100644
--- a/apps/plugins/puzzles/icons/undead.sav
+++ b/apps/plugins/puzzles/src/icons/undead.sav
diff --git a/apps/plugins/puzzles/icons/unequal.sav b/apps/plugins/puzzles/src/icons/unequal.sav
index c414513a22..c414513a22 100644
--- a/apps/plugins/puzzles/icons/unequal.sav
+++ b/apps/plugins/puzzles/src/icons/unequal.sav
diff --git a/apps/plugins/puzzles/icons/unruly.sav b/apps/plugins/puzzles/src/icons/unruly.sav
index 0f7ca1b9dd..0f7ca1b9dd 100644
--- a/apps/plugins/puzzles/icons/unruly.sav
+++ b/apps/plugins/puzzles/src/icons/unruly.sav
diff --git a/apps/plugins/puzzles/icons/untangle.sav b/apps/plugins/puzzles/src/icons/untangle.sav
index 016318a521..016318a521 100644
--- a/apps/plugins/puzzles/icons/untangle.sav
+++ b/apps/plugins/puzzles/src/icons/untangle.sav
diff --git a/apps/plugins/puzzles/icons/win16pal.xpm b/apps/plugins/puzzles/src/icons/win16pal.xpm
index 66fd60a480..66fd60a480 100644
--- a/apps/plugins/puzzles/icons/win16pal.xpm
+++ b/apps/plugins/puzzles/src/icons/win16pal.xpm
diff --git a/apps/plugins/puzzles/src/index.html b/apps/plugins/puzzles/src/index.html
new file mode 100644
index 0000000000..460883a32c
--- /dev/null
+++ b/apps/plugins/puzzles/src/index.html
@@ -0,0 +1,67 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Simon Tatham's Portable Puzzle Collection</title>
7<link rel="index" href="docindex.html">
8<link rel="next" href="intro.html">
9<meta name="AppleTitle" content="Puzzles Help"></head>
10<body>
11<p>Previous | Contents | <a href="docindex.html">Index</a> | <a href="intro.html">Next</a></p>
12<h1>Simon Tatham's Portable Puzzle Collection</h1>
13<p>
14This is a collection of small one-player puzzle games.
15</p>
16<p>
17This manual is copyright 2004-2014 Simon Tatham. All rights reserved. You may distribute this documentation under the MIT licence. See <a href="licence.html#AA">appendix A</a> for the licence text in full.
18</p>
19
20<ul>
21<li><a href="intro.html#C1">Chapter 1: Introduction</a></li>
22<li><a href="common.html#C2">Chapter 2: Common features</a></li>
23<li><a href="net.html#C3">Chapter 3: Net</a></li>
24<li><a href="cube.html#C4">Chapter 4: Cube</a></li>
25<li><a href="fifteen.html#C5">Chapter 5: Fifteen</a></li>
26<li><a href="sixteen.html#C6">Chapter 6: Sixteen</a></li>
27<li><a href="twiddle.html#C7">Chapter 7: Twiddle</a></li>
28<li><a href="rect.html#C8">Chapter 8: Rectangles</a></li>
29<li><a href="netslide.html#C9">Chapter 9: Netslide</a></li>
30<li><a href="pattern.html#C10">Chapter 10: Pattern</a></li>
31<li><a href="solo.html#C11">Chapter 11: Solo</a></li>
32<li><a href="mines.html#C12">Chapter 12: Mines</a></li>
33<li><a href="samegame.html#C13">Chapter 13: Same Game</a></li>
34<li><a href="flip.html#C14">Chapter 14: Flip</a></li>
35<li><a href="guess.html#C15">Chapter 15: Guess</a></li>
36<li><a href="pegs.html#C16">Chapter 16: Pegs</a></li>
37<li><a href="dominosa.html#C17">Chapter 17: Dominosa</a></li>
38<li><a href="untangle.html#C18">Chapter 18: Untangle</a></li>
39<li><a href="blackbox.html#C19">Chapter 19: Black Box</a></li>
40<li><a href="slant.html#C20">Chapter 20: Slant</a></li>
41<li><a href="lightup.html#C21">Chapter 21: Light Up</a></li>
42<li><a href="map.html#C22">Chapter 22: Map</a></li>
43<li><a href="loopy.html#C23">Chapter 23: Loopy</a></li>
44<li><a href="inertia.html#C24">Chapter 24: Inertia</a></li>
45<li><a href="tents.html#C25">Chapter 25: Tents</a></li>
46<li><a href="bridges.html#C26">Chapter 26: Bridges</a></li>
47<li><a href="unequal.html#C27">Chapter 27: Unequal</a></li>
48<li><a href="galaxies.html#C28">Chapter 28: Galaxies</a></li>
49<li><a href="filling.html#C29">Chapter 29: Filling</a></li>
50<li><a href="keen.html#C30">Chapter 30: Keen</a></li>
51<li><a href="towers.html#C31">Chapter 31: Towers</a></li>
52<li><a href="singles.html#C32">Chapter 32: Singles</a></li>
53<li><a href="magnets.html#C33">Chapter 33: Magnets</a></li>
54<li><a href="signpost.html#C34">Chapter 34: Signpost</a></li>
55<li><a href="range.html#C35">Chapter 35: Range</a></li>
56<li><a href="pearl.html#C36">Chapter 36: Pearl</a></li>
57<li><a href="undead.html#C37">Chapter 37: Undead</a></li>
58<li><a href="unruly.html#C38">Chapter 38: Unruly</a></li>
59<li><a href="flood.html#C39">Chapter 39: Flood</a></li>
60<li><a href="tracks.html#C40">Chapter 40: Tracks</a></li>
61<li><a href="palisade.html#C41">Chapter 41: Palisade</a></li>
62<li><a href="licence.html#AA">Appendix A: Licence</a></li>
63<li><a href="docindex.html#Index">Index</a></li>
64</ul>
65
66<hr><address></address></body>
67</html>
diff --git a/apps/plugins/puzzles/inertia.R b/apps/plugins/puzzles/src/inertia.R
index e6e86beaec..e6e86beaec 100644
--- a/apps/plugins/puzzles/inertia.R
+++ b/apps/plugins/puzzles/src/inertia.R
diff --git a/apps/plugins/puzzles/inertia.c b/apps/plugins/puzzles/src/inertia.c
index a0e1c45fb1..c22d2e17d4 100644
--- a/apps/plugins/puzzles/inertia.c
+++ b/apps/plugins/puzzles/src/inertia.c
@@ -9,7 +9,7 @@
9#include <stdio.h> 9#include <stdio.h>
10#include <stdlib.h> 10#include <stdlib.h>
11#include <string.h> 11#include <string.h>
12#include "rbassert.h" 12#include <assert.h>
13#include <ctype.h> 13#include <ctype.h>
14#include <math.h> 14#include <math.h>
15 15
@@ -2213,7 +2213,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
2213const struct game thegame = { 2213const struct game thegame = {
2214 "Inertia", "games.inertia", "inertia", 2214 "Inertia", "games.inertia", "inertia",
2215 default_params, 2215 default_params,
2216 game_fetch_preset, 2216 game_fetch_preset, NULL,
2217 decode_params, 2217 decode_params,
2218 encode_params, 2218 encode_params,
2219 free_params, 2219 free_params,
diff --git a/apps/plugins/puzzles/src/inertia.html b/apps/plugins/puzzles/src/inertia.html
new file mode 100644
index 0000000000..a8cca75c37
--- /dev/null
+++ b/apps/plugins/puzzles/src/inertia.html
@@ -0,0 +1,54 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Inertia</title>
7<link rel="previous" href="loopy.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="tents.html">
12</head>
13<body>
14<p><a href="loopy.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="tents.html">Next</a></p>
15<h1><a name="C24"></a>Chapter 24: <a name="i0"></a>Inertia</h1>
16<p>
17You are a small green ball sitting in a grid full of obstacles. Your aim is to collect all the gems without running into any mines.
18</p>
19<p>
20You can move the ball in any orthogonal <em>or diagonal</em> direction. Once the ball starts moving, it will continue until something stops it. A wall directly in its path will stop it (but if it is moving diagonally, it will move through a diagonal gap between two other walls without stopping). Also, some of the squares are &#8216;stops&#8217;; when the ball moves on to a stop, it will stop moving no matter what direction it was going in. Gems do <em>not</em> stop the ball; it picks them up and keeps on going.
21</p>
22<p>
23Running into a mine is fatal. Even if you picked up the last gem in the same move which then hit a mine, the game will count you as dead rather than victorious.
24</p>
25<p>
26This game was originally implemented for Windows by Ben Olmstead <a href="#p0">[11]</a>, who was kind enough to release his source code on request so that it could be re-implemented for this collection.
27</p>
28<p><a name="p0"></a>
29[11] <a href="http://xn13.com/"><code>http://xn13.com/</code></a>
30</p>
31<h2><a name="S24.1"></a>24.1 <a name="i1"></a>Inertia controls</h2>
32<p>
33You can move the ball in any of the eight directions using the numeric keypad. Alternatively, if you click the left mouse button on the grid, the ball will begin a move in the general direction of where you clicked.
34</p>
35<p>
36If you use the &#8216;Solve&#8217; function on this game, the program will compute a path through the grid which collects all the remaining gems and returns to the current position. A hint arrow will appear on the ball indicating the direction in which you should move to begin on this path. If you then move in that direction, the arrow will update to indicate the next direction on the path. You can also press Space to automatically move in the direction of the hint arrow. If you move in a different direction from the one shown by the arrow, arrows will be shown only if the puzzle is still solvable.
37</p>
38<p>
39All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available. In particular, if you do run into a mine and die, you can use the Undo function and resume playing from before the fatal move. The game will keep track of the number of times you have done this.
40</p>
41<h2><a name="S24.2"></a>24.2 <a name="i2"></a>Inertia parameters</h2>
42<p>
43These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
44</p>
45<dl><dt>
46<em>Width</em>, <em>Height</em>
47</dt>
48<dd>
49Size of grid in squares.
50</dd>
51</dl>
52
53<hr><address></address></body>
54</html>
diff --git a/apps/plugins/puzzles/src/install-sh b/apps/plugins/puzzles/src/install-sh
new file mode 100755
index 0000000000..0b0fdcbba6
--- /dev/null
+++ b/apps/plugins/puzzles/src/install-sh
@@ -0,0 +1,501 @@
1#!/bin/sh
2# install - install a program, script, or datafile
3
4scriptversion=2013-12-25.23; # UTC
5
6# This originates from X11R5 (mit/util/scripts/install.sh), which was
7# later released in X11R6 (xc/config/util/install.sh) with the
8# following copyright and license.
9#
10# Copyright (C) 1994 X Consortium
11#
12# Permission is hereby granted, free of charge, to any person obtaining a copy
13# of this software and associated documentation files (the "Software"), to
14# deal in the Software without restriction, including without limitation the
15# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
16# sell copies of the Software, and to permit persons to whom the Software is
17# furnished to do so, subject to the following conditions:
18#
19# The above copyright notice and this permission notice shall be included in
20# all copies or substantial portions of the Software.
21#
22# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
26# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
27# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28#
29# Except as contained in this notice, the name of the X Consortium shall not
30# be used in advertising or otherwise to promote the sale, use or other deal-
31# ings in this Software without prior written authorization from the X Consor-
32# tium.
33#
34#
35# FSF changes to this file are in the public domain.
36#
37# Calling this script install-sh is preferred over install.sh, to prevent
38# 'make' implicit rules from creating a file called install from it
39# when there is no Makefile.
40#
41# This script is compatible with the BSD install script, but was written
42# from scratch.
43
44tab=' '
45nl='
46'
47IFS=" $tab$nl"
48
49# Set DOITPROG to "echo" to test this script.
50
51doit=${DOITPROG-}
52doit_exec=${doit:-exec}
53
54# Put in absolute file names if you don't have them in your path;
55# or use environment vars.
56
57chgrpprog=${CHGRPPROG-chgrp}
58chmodprog=${CHMODPROG-chmod}
59chownprog=${CHOWNPROG-chown}
60cmpprog=${CMPPROG-cmp}
61cpprog=${CPPROG-cp}
62mkdirprog=${MKDIRPROG-mkdir}
63mvprog=${MVPROG-mv}
64rmprog=${RMPROG-rm}
65stripprog=${STRIPPROG-strip}
66
67posix_mkdir=
68
69# Desired mode of installed file.
70mode=0755
71
72chgrpcmd=
73chmodcmd=$chmodprog
74chowncmd=
75mvcmd=$mvprog
76rmcmd="$rmprog -f"
77stripcmd=
78
79src=
80dst=
81dir_arg=
82dst_arg=
83
84copy_on_change=false
85is_target_a_directory=possibly
86
87usage="\
88Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
89 or: $0 [OPTION]... SRCFILES... DIRECTORY
90 or: $0 [OPTION]... -t DIRECTORY SRCFILES...
91 or: $0 [OPTION]... -d DIRECTORIES...
92
93In the 1st form, copy SRCFILE to DSTFILE.
94In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
95In the 4th, create DIRECTORIES.
96
97Options:
98 --help display this help and exit.
99 --version display version info and exit.
100
101 -c (ignored)
102 -C install only if different (preserve the last data modification time)
103 -d create directories instead of installing files.
104 -g GROUP $chgrpprog installed files to GROUP.
105 -m MODE $chmodprog installed files to MODE.
106 -o USER $chownprog installed files to USER.
107 -s $stripprog installed files.
108 -t DIRECTORY install into DIRECTORY.
109 -T report an error if DSTFILE is a directory.
110
111Environment variables override the default commands:
112 CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
113 RMPROG STRIPPROG
114"
115
116while test $# -ne 0; do
117 case $1 in
118 -c) ;;
119
120 -C) copy_on_change=true;;
121
122 -d) dir_arg=true;;
123
124 -g) chgrpcmd="$chgrpprog $2"
125 shift;;
126
127 --help) echo "$usage"; exit $?;;
128
129 -m) mode=$2
130 case $mode in
131 *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
132 echo "$0: invalid mode: $mode" >&2
133 exit 1;;
134 esac
135 shift;;
136
137 -o) chowncmd="$chownprog $2"
138 shift;;
139
140 -s) stripcmd=$stripprog;;
141
142 -t)
143 is_target_a_directory=always
144 dst_arg=$2
145 # Protect names problematic for 'test' and other utilities.
146 case $dst_arg in
147 -* | [=\(\)!]) dst_arg=./$dst_arg;;
148 esac
149 shift;;
150
151 -T) is_target_a_directory=never;;
152
153 --version) echo "$0 $scriptversion"; exit $?;;
154
155 --) shift
156 break;;
157
158 -*) echo "$0: invalid option: $1" >&2
159 exit 1;;
160
161 *) break;;
162 esac
163 shift
164done
165
166# We allow the use of options -d and -T together, by making -d
167# take the precedence; this is for compatibility with GNU install.
168
169if test -n "$dir_arg"; then
170 if test -n "$dst_arg"; then
171 echo "$0: target directory not allowed when installing a directory." >&2
172 exit 1
173 fi
174fi
175
176if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
177 # When -d is used, all remaining arguments are directories to create.
178 # When -t is used, the destination is already specified.
179 # Otherwise, the last argument is the destination. Remove it from $@.
180 for arg
181 do
182 if test -n "$dst_arg"; then
183 # $@ is not empty: it contains at least $arg.
184 set fnord "$@" "$dst_arg"
185 shift # fnord
186 fi
187 shift # arg
188 dst_arg=$arg
189 # Protect names problematic for 'test' and other utilities.
190 case $dst_arg in
191 -* | [=\(\)!]) dst_arg=./$dst_arg;;
192 esac
193 done
194fi
195
196if test $# -eq 0; then
197 if test -z "$dir_arg"; then
198 echo "$0: no input file specified." >&2
199 exit 1
200 fi
201 # It's OK to call 'install-sh -d' without argument.
202 # This can happen when creating conditional directories.
203 exit 0
204fi
205
206if test -z "$dir_arg"; then
207 if test $# -gt 1 || test "$is_target_a_directory" = always; then
208 if test ! -d "$dst_arg"; then
209 echo "$0: $dst_arg: Is not a directory." >&2
210 exit 1
211 fi
212 fi
213fi
214
215if test -z "$dir_arg"; then
216 do_exit='(exit $ret); exit $ret'
217 trap "ret=129; $do_exit" 1
218 trap "ret=130; $do_exit" 2
219 trap "ret=141; $do_exit" 13
220 trap "ret=143; $do_exit" 15
221
222 # Set umask so as not to create temps with too-generous modes.
223 # However, 'strip' requires both read and write access to temps.
224 case $mode in
225 # Optimize common cases.
226 *644) cp_umask=133;;
227 *755) cp_umask=22;;
228
229 *[0-7])
230 if test -z "$stripcmd"; then
231 u_plus_rw=
232 else
233 u_plus_rw='% 200'
234 fi
235 cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
236 *)
237 if test -z "$stripcmd"; then
238 u_plus_rw=
239 else
240 u_plus_rw=,u+rw
241 fi
242 cp_umask=$mode$u_plus_rw;;
243 esac
244fi
245
246for src
247do
248 # Protect names problematic for 'test' and other utilities.
249 case $src in
250 -* | [=\(\)!]) src=./$src;;
251 esac
252
253 if test -n "$dir_arg"; then
254 dst=$src
255 dstdir=$dst
256 test -d "$dstdir"
257 dstdir_status=$?
258 else
259
260 # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
261 # might cause directories to be created, which would be especially bad
262 # if $src (and thus $dsttmp) contains '*'.
263 if test ! -f "$src" && test ! -d "$src"; then
264 echo "$0: $src does not exist." >&2
265 exit 1
266 fi
267
268 if test -z "$dst_arg"; then
269 echo "$0: no destination specified." >&2
270 exit 1
271 fi
272 dst=$dst_arg
273
274 # If destination is a directory, append the input filename; won't work
275 # if double slashes aren't ignored.
276 if test -d "$dst"; then
277 if test "$is_target_a_directory" = never; then
278 echo "$0: $dst_arg: Is a directory" >&2
279 exit 1
280 fi
281 dstdir=$dst
282 dst=$dstdir/`basename "$src"`
283 dstdir_status=0
284 else
285 dstdir=`dirname "$dst"`
286 test -d "$dstdir"
287 dstdir_status=$?
288 fi
289 fi
290
291 obsolete_mkdir_used=false
292
293 if test $dstdir_status != 0; then
294 case $posix_mkdir in
295 '')
296 # Create intermediate dirs using mode 755 as modified by the umask.
297 # This is like FreeBSD 'install' as of 1997-10-28.
298 umask=`umask`
299 case $stripcmd.$umask in
300 # Optimize common cases.
301 *[2367][2367]) mkdir_umask=$umask;;
302 .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
303
304 *[0-7])
305 mkdir_umask=`expr $umask + 22 \
306 - $umask % 100 % 40 + $umask % 20 \
307 - $umask % 10 % 4 + $umask % 2
308 `;;
309 *) mkdir_umask=$umask,go-w;;
310 esac
311
312 # With -d, create the new directory with the user-specified mode.
313 # Otherwise, rely on $mkdir_umask.
314 if test -n "$dir_arg"; then
315 mkdir_mode=-m$mode
316 else
317 mkdir_mode=
318 fi
319
320 posix_mkdir=false
321 case $umask in
322 *[123567][0-7][0-7])
323 # POSIX mkdir -p sets u+wx bits regardless of umask, which
324 # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
325 ;;
326 *)
327 tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
328 trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
329
330 if (umask $mkdir_umask &&
331 exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
332 then
333 if test -z "$dir_arg" || {
334 # Check for POSIX incompatibilities with -m.
335 # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
336 # other-writable bit of parent directory when it shouldn't.
337 # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
338 ls_ld_tmpdir=`ls -ld "$tmpdir"`
339 case $ls_ld_tmpdir in
340 d????-?r-*) different_mode=700;;
341 d????-?--*) different_mode=755;;
342 *) false;;
343 esac &&
344 $mkdirprog -m$different_mode -p -- "$tmpdir" && {
345 ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
346 test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
347 }
348 }
349 then posix_mkdir=:
350 fi
351 rmdir "$tmpdir/d" "$tmpdir"
352 else
353 # Remove any dirs left behind by ancient mkdir implementations.
354 rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
355 fi
356 trap '' 0;;
357 esac;;
358 esac
359
360 if
361 $posix_mkdir && (
362 umask $mkdir_umask &&
363 $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
364 )
365 then :
366 else
367
368 # The umask is ridiculous, or mkdir does not conform to POSIX,
369 # or it failed possibly due to a race condition. Create the
370 # directory the slow way, step by step, checking for races as we go.
371
372 case $dstdir in
373 /*) prefix='/';;
374 [-=\(\)!]*) prefix='./';;
375 *) prefix='';;
376 esac
377
378 oIFS=$IFS
379 IFS=/
380 set -f
381 set fnord $dstdir
382 shift
383 set +f
384 IFS=$oIFS
385
386 prefixes=
387
388 for d
389 do
390 test X"$d" = X && continue
391
392 prefix=$prefix$d
393 if test -d "$prefix"; then
394 prefixes=
395 else
396 if $posix_mkdir; then
397 (umask=$mkdir_umask &&
398 $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
399 # Don't fail if two instances are running concurrently.
400 test -d "$prefix" || exit 1
401 else
402 case $prefix in
403 *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
404 *) qprefix=$prefix;;
405 esac
406 prefixes="$prefixes '$qprefix'"
407 fi
408 fi
409 prefix=$prefix/
410 done
411
412 if test -n "$prefixes"; then
413 # Don't fail if two instances are running concurrently.
414 (umask $mkdir_umask &&
415 eval "\$doit_exec \$mkdirprog $prefixes") ||
416 test -d "$dstdir" || exit 1
417 obsolete_mkdir_used=true
418 fi
419 fi
420 fi
421
422 if test -n "$dir_arg"; then
423 { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
424 { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
425 { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
426 test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
427 else
428
429 # Make a couple of temp file names in the proper directory.
430 dsttmp=$dstdir/_inst.$$_
431 rmtmp=$dstdir/_rm.$$_
432
433 # Trap to clean up those temp files at exit.
434 trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
435
436 # Copy the file name to the temp name.
437 (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
438
439 # and set any options; do chmod last to preserve setuid bits.
440 #
441 # If any of these fail, we abort the whole thing. If we want to
442 # ignore errors from any of these, just make sure not to ignore
443 # errors from the above "$doit $cpprog $src $dsttmp" command.
444 #
445 { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
446 { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
447 { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
448 { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
449
450 # If -C, don't bother to copy if it wouldn't change the file.
451 if $copy_on_change &&
452 old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
453 new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
454 set -f &&
455 set X $old && old=:$2:$4:$5:$6 &&
456 set X $new && new=:$2:$4:$5:$6 &&
457 set +f &&
458 test "$old" = "$new" &&
459 $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
460 then
461 rm -f "$dsttmp"
462 else
463 # Rename the file to the real destination.
464 $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
465
466 # The rename failed, perhaps because mv can't rename something else
467 # to itself, or perhaps because mv is so ancient that it does not
468 # support -f.
469 {
470 # Now remove or move aside any old file at destination location.
471 # We try this two ways since rm can't unlink itself on some
472 # systems and the destination file might be busy for other
473 # reasons. In this case, the final cleanup might fail but the new
474 # file should still install successfully.
475 {
476 test ! -f "$dst" ||
477 $doit $rmcmd -f "$dst" 2>/dev/null ||
478 { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
479 { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
480 } ||
481 { echo "$0: cannot unlink or rename $dst" >&2
482 (exit 1); exit 1
483 }
484 } &&
485
486 # Now rename the file to the real destination.
487 $doit $mvcmd "$dsttmp" "$dst"
488 }
489 fi || exit 1
490
491 trap '' 0
492 fi
493done
494
495# Local variables:
496# eval: (add-hook 'write-file-hooks 'time-stamp)
497# time-stamp-start: "scriptversion="
498# time-stamp-format: "%:y-%02m-%02d.%02H"
499# time-stamp-time-zone: "UTC"
500# time-stamp-end: "; # UTC"
501# End:
diff --git a/apps/plugins/puzzles/src/intro.html b/apps/plugins/puzzles/src/intro.html
new file mode 100644
index 0000000000..cf82c837de
--- /dev/null
+++ b/apps/plugins/puzzles/src/intro.html
@@ -0,0 +1,39 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Introduction</title>
7<link rel="previous" href="index.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="common.html">
12</head>
13<body>
14<p><a href="index.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="common.html">Next</a></p>
15<h1><a name="C1"></a>Chapter 1: Introduction</h1>
16<p>
17I wrote this collection because I thought there should be more small desktop toys available: little games you can pop up in a window and play for two or three minutes while you take a break from whatever else you were doing. And I was also annoyed that every time I found a good game on (say) <a name="i0"></a>Unix, it wasn't available the next time I was sitting at a <a name="i1"></a>Windows machine, or vice versa; so I arranged that everything in my personal puzzle collection will happily run on both, and have more recently done a port to <a name="i2"></a>Mac OS X as well. When I find (or perhaps invent) further puzzle games that I like, they'll be added to this collection and will immediately be available on both platforms. And if anyone feels like writing any other front ends &#8211; PocketPC, Mac OS pre-10, or whatever it might be &#8211; then all the games in this framework will immediately become available on another platform as well.
18</p>
19<p>
20The actual games in this collection were mostly not my invention; they are re-implementations of existing game concepts within my portable puzzle framework. I do not claim credit, in general, for inventing the rules of any of these puzzles. (I don't even claim authorship of all the code; some of the puzzles have been submitted by other authors.)
21</p>
22<p>
23This collection is distributed under the <a name="i3"></a>MIT licence (see <a href="licence.html#AA">appendix A</a>). This means that you can do pretty much anything you like with the game binaries or the code, except pretending you wrote them yourself, or suing me if anything goes wrong.
24</p>
25<p>
26The most recent versions, and <a name="i4"></a>source code, can be found at <a name="i5"></a><a href="http://www.chiark.greenend.org.uk/~sgtatham/puzzles/"><code>http://www.chiark.greenend.org.uk/~sgtatham/puzzles/</code></a>.
27</p>
28<p>
29Please report <a name="i6"></a><a name="i7"></a>bugs to <a href="mailto:anakin@pobox.com"><code>anakin@pobox.com</code></a>. You might find it helpful to read this article before reporting a bug:
30</p>
31<p>
32<a href="http://www.chiark.greenend.org.uk/~sgtatham/bugs.html"><code>http://www.chiark.greenend.org.uk/~sgtatham/bugs.html</code></a>
33</p>
34<p>
35<a name="i8"></a>Patches are welcome. Especially if they provide a new front end (to make all these games run on another platform), or a new game.
36</p>
37
38<hr><address></address></body>
39</html>
diff --git a/apps/plugins/puzzles/keen.R b/apps/plugins/puzzles/src/keen.R
index 77609bc7fa..77609bc7fa 100644
--- a/apps/plugins/puzzles/keen.R
+++ b/apps/plugins/puzzles/src/keen.R
diff --git a/apps/plugins/puzzles/keen.c b/apps/plugins/puzzles/src/keen.c
index 32d6288f88..fdaae32e5d 100644
--- a/apps/plugins/puzzles/keen.c
+++ b/apps/plugins/puzzles/src/keen.c
@@ -6,7 +6,7 @@
6#include <stdio.h> 6#include <stdio.h>
7#include <stdlib.h> 7#include <stdlib.h>
8#include <string.h> 8#include <string.h>
9#include "rbassert.h" 9#include <assert.h>
10#include <ctype.h> 10#include <ctype.h>
11#include <math.h> 11#include <math.h>
12 12
@@ -2340,7 +2340,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
2340const struct game thegame = { 2340const struct game thegame = {
2341 "Keen", "games.keen", "keen", 2341 "Keen", "games.keen", "keen",
2342 default_params, 2342 default_params,
2343 game_fetch_preset, 2343 game_fetch_preset, NULL,
2344 decode_params, 2344 decode_params,
2345 encode_params, 2345 encode_params,
2346 free_params, 2346 free_params,
diff --git a/apps/plugins/puzzles/src/keen.html b/apps/plugins/puzzles/src/keen.html
new file mode 100644
index 0000000000..062f0dd728
--- /dev/null
+++ b/apps/plugins/puzzles/src/keen.html
@@ -0,0 +1,102 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Keen</title>
7<link rel="previous" href="filling.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="towers.html">
12</head>
13<body>
14<p><a href="filling.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="towers.html">Next</a></p>
15<h1><a name="C30"></a>Chapter 30: <a name="i0"></a>Keen</h1>
16<p>
17You have a square grid; each square may contain a digit from 1 to the size of the grid. The grid is divided into blocks of varying shape and size, with arithmetic clues written in them. Your aim is to fully populate the grid with digits such that:
18</p>
19<ul><li>
20Each row contains only one occurrence of each digit
21</li>
22<li>
23Each column contains only one occurrence of each digit
24</li>
25<li>
26The digits in each block can be combined to form the number stated in the clue, using the arithmetic operation given in the clue. That is:
27<ul><li>
28An addition clue means that the sum of the digits in the block must be the given number. For example, &#8216;15+&#8217; means the contents of the block adds up to fifteen.
29</li>
30<li>
31A multiplication clue (e.g. &#8216;60&#215;&#8217;), similarly, means that the product of the digits in the block must be the given number.
32</li>
33<li>
34A subtraction clue will always be written in a block of size two, and it means that one of the digits in the block is greater than the other by the given amount. For example, &#8216;2&#8722;&#8217; means that one of the digits in the block is 2 more than the other, or equivalently that one digit minus the other one is 2. The two digits could be either way round, though.
35</li>
36<li>
37A division clue (e.g. &#8216;3&#247;&#8217;), similarly, is always in a block of size two and means that one digit divided by the other is equal to the given amount.
38</li>
39</ul>
40<p>
41Note that a block may contain the same digit more than once (provided the identical ones are not in the same row and column). This rule is precisely the opposite of the rule in Solo's &#8216;Killer&#8217; mode (see <a href="solo.html#C11">chapter 11</a>).
42</p>
43
44</li>
45</ul>
46<p>
47This puzzle appears in the Times under the name &#8216;<a name="i1"></a>KenKen&#8217;.
48</p>
49<h2><a name="S30.1"></a>30.1 <a name="i2"></a>Keen controls</h2>
50<p>
51Keen shares much of its control system with Solo (and Unequal).
52</p>
53<p>
54To play Keen, simply click the mouse in any empty square and then type a digit on the keyboard to fill that square. If you make a mistake, click the mouse in the incorrect square and press Space to clear it again (or use the Undo feature).
55</p>
56<p>
57If you <em>right</em>-click in a square and then type a number, that number will be entered in the square as a &#8216;pencil mark&#8217;. You can have pencil marks for multiple numbers in the same square. Squares containing filled-in numbers cannot also contain pencil marks.
58</p>
59<p>
60The game pays no attention to pencil marks, so exactly what you use them for is up to you: you can use them as reminders that a particular square needs to be re-examined once you know more about a particular number, or you can use them as lists of the possible numbers in a given square, or anything else you feel like.
61</p>
62<p>
63To erase a single pencil mark, right-click in the square and type the same number again.
64</p>
65<p>
66All pencil marks in a square are erased when you left-click and type a number, or when you left-click and press space. Right-clicking and pressing space will also erase pencil marks.
67</p>
68<p>
69As for Solo, the cursor keys can be used in conjunction with the digit keys to set numbers or pencil marks. Use the cursor keys to move a highlight around the grid, and type a digit to enter it in the highlighted square. Pressing return toggles the highlight into a mode in which you can enter or remove pencil marks.
70</p>
71<p>
72Pressing M will fill in a full set of pencil marks in every square that does not have a main digit in it.
73</p>
74<p>
75(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
76</p>
77<h2><a name="S30.2"></a>30.2 <a name="i3"></a>Keen parameters</h2>
78<p>
79These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
80</p>
81<dl><dt>
82<em>Grid size</em>
83</dt>
84<dd>
85Specifies the size of the grid. Lower limit is 3; upper limit is 9 (because the user interface would become more difficult with &#8216;digits&#8217; bigger than 9!).
86</dd>
87<dt>
88<em>Difficulty</em>
89</dt>
90<dd>
91Controls the difficulty of the generated puzzle. At Unreasonable level, some backtracking will be required, but the solution should still be unique. The remaining levels require increasingly complex reasoning to avoid having to backtrack.
92</dd>
93<dt>
94<em>Multiplication only</em>
95</dt>
96<dd>
97If this is enabled, all boxes will be multiplication boxes. With this rule, the puzzle is known as &#8216;Inshi No Heya&#8217;.
98</dd>
99</dl>
100
101<hr><address></address></body>
102</html>
diff --git a/apps/plugins/puzzles/latin.c b/apps/plugins/puzzles/src/latin.c
index f7e97a7fa6..03d78aff1f 100644
--- a/apps/plugins/puzzles/latin.c
+++ b/apps/plugins/puzzles/src/latin.c
@@ -1,4 +1,4 @@
1#include "rbassert.h" 1#include <assert.h>
2#include <string.h> 2#include <string.h>
3#include <stdarg.h> 3#include <stdarg.h>
4 4
diff --git a/apps/plugins/puzzles/latin.h b/apps/plugins/puzzles/src/latin.h
index 4b09f16ce1..4b09f16ce1 100644
--- a/apps/plugins/puzzles/latin.h
+++ b/apps/plugins/puzzles/src/latin.h
diff --git a/apps/plugins/puzzles/laydomino.c b/apps/plugins/puzzles/src/laydomino.c
index 458027020b..cead5d5a7f 100644
--- a/apps/plugins/puzzles/laydomino.c
+++ b/apps/plugins/puzzles/src/laydomino.c
@@ -5,7 +5,7 @@
5 5
6#include <stdio.h> 6#include <stdio.h>
7#include <stdlib.h> 7#include <stdlib.h>
8#include "rbassert.h" 8#include <assert.h>
9 9
10#include "puzzles.h" 10#include "puzzles.h"
11 11
diff --git a/apps/plugins/puzzles/src/licence.html b/apps/plugins/puzzles/src/licence.html
new file mode 100644
index 0000000000..17501348e4
--- /dev/null
+++ b/apps/plugins/puzzles/src/licence.html
@@ -0,0 +1,33 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Licence</title>
7<link rel="previous" href="palisade.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="docindex.html">
12</head>
13<body>
14<p><a href="palisade.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="docindex.html">Next</a></p>
15<h1><a name="AA"></a>Appendix A: <a name="i0"></a><a name="i1"></a>Licence</h1>
16<p>
17This software is <a name="i2"></a>copyright 2004-2014 Simon Tatham.
18</p>
19<p>
20Portions copyright Richard Boulton, James Harvey, Mike Pinna, Jonas K&#246;lker, Dariusz Olszewski, Michael Schierl, Lambros Lambrou, Bernd Schmidt, Steffen Bauer, Lennard Sprong and Rogier Goossens.
21</p>
22<p>
23Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the &#8216;Software&#8217;), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
24</p>
25<p>
26The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
27</p>
28<p>
29THE SOFTWARE IS PROVIDED &#8216;AS IS&#8217;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30</p>
31
32<hr><address></address></body>
33</html>
diff --git a/apps/plugins/puzzles/lightup.R b/apps/plugins/puzzles/src/lightup.R
index a474de815d..a474de815d 100644
--- a/apps/plugins/puzzles/lightup.R
+++ b/apps/plugins/puzzles/src/lightup.R
diff --git a/apps/plugins/puzzles/lightup.c b/apps/plugins/puzzles/src/lightup.c
index 9ca37b19d2..4dd46c8392 100644
--- a/apps/plugins/puzzles/lightup.c
+++ b/apps/plugins/puzzles/src/lightup.c
@@ -45,7 +45,7 @@
45#include <stdio.h> 45#include <stdio.h>
46#include <stdlib.h> 46#include <stdlib.h>
47#include <string.h> 47#include <string.h>
48#include "rbassert.h" 48#include <assert.h>
49#include <ctype.h> 49#include <ctype.h>
50#include <math.h> 50#include <math.h>
51 51
@@ -2290,7 +2290,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
2290const struct game thegame = { 2290const struct game thegame = {
2291 "Light Up", "games.lightup", "lightup", 2291 "Light Up", "games.lightup", "lightup",
2292 default_params, 2292 default_params,
2293 game_fetch_preset, 2293 game_fetch_preset, NULL,
2294 decode_params, 2294 decode_params,
2295 encode_params, 2295 encode_params,
2296 free_params, 2296 free_params,
diff --git a/apps/plugins/puzzles/src/lightup.html b/apps/plugins/puzzles/src/lightup.html
new file mode 100644
index 0000000000..8cf1befa40
--- /dev/null
+++ b/apps/plugins/puzzles/src/lightup.html
@@ -0,0 +1,98 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Light Up</title>
7<link rel="previous" href="slant.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="map.html">
12</head>
13<body>
14<p><a href="slant.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="map.html">Next</a></p>
15<h1><a name="C21"></a>Chapter 21: <a name="i0"></a>Light Up</h1>
16<p>
17You have a grid of squares. Some are filled in black; some of the black squares are numbered. Your aim is to &#8216;light up&#8217; all the empty squares by placing light bulbs in some of them.
18</p>
19<p>
20Each light bulb illuminates the square it is on, plus all squares in line with it horizontally or vertically unless a black square is blocking the way.
21</p>
22<p>
23To win the game, you must satisfy the following conditions:
24</p>
25<ul><li>
26All non-black squares are lit.
27</li>
28<li>
29No light is lit by another light.
30</li>
31<li>
32All numbered black squares have exactly that number of lights adjacent to them (in the four squares above, below, and to the side).
33</li>
34</ul>
35<p>
36Non-numbered black squares may have any number of lights adjacent to them.
37</p>
38<p>
39Credit for this puzzle goes to <a name="i1"></a>Nikoli <a href="#p0">[9]</a>.
40</p>
41<p>
42Light Up was contributed to this collection by James Harvey.
43</p>
44<p><a name="p0"></a>
45[9] <a href="http://www.nikoli.co.jp/en/puzzles/akari.html"><code>http://www.nikoli.co.jp/en/puzzles/akari.html</code></a> (beware of Flash)
46</p>
47<h2><a name="S21.1"></a>21.1 <a name="i2"></a>Light Up controls</h2>
48<p>
49Left-clicking in a non-black square will toggle the presence of a light in that square. Right-clicking in a non-black square toggles a mark there to aid solving; it can be used to highlight squares that cannot be lit, for example.
50</p>
51<p>
52You may not place a light in a marked square, nor place a mark in a lit square.
53</p>
54<p>
55The game will highlight obvious errors in red. Lights lit by other lights are highlighted in this way, as are numbered squares which do not (or cannot) have the right number of lights next to them.
56</p>
57<p>
58Thus, the grid is solved when all non-black squares have yellow highlights and there are no red lights.
59</p>
60<p>
61(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
62</p>
63<h2><a name="S21.2"></a>21.2 <a name="i3"></a>Light Up parameters</h2>
64<p>
65These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
66</p>
67<dl><dt>
68<em>Width</em>, <em>Height</em>
69</dt>
70<dd>
71Size of grid in squares.
72</dd>
73<dt>
74<em>%age of black squares</em>
75</dt>
76<dd>
77Rough percentage of black squares in the grid.
78<p>
79This is a hint rather than an instruction. If the grid generator is unable to generate a puzzle to this precise specification, it will increase the proportion of black squares until it can.
80</p>
81
82</dd>
83<dt>
84<em>Symmetry</em>
85</dt>
86<dd>
87Allows you to specify the required symmetry of the black squares in the grid. (This does not affect the difficulty of the puzzles noticeably.)
88</dd>
89<dt>
90<em>Difficulty</em>
91</dt>
92<dd>
93&#8216;Easy&#8217; means that the puzzles should be soluble without backtracking or guessing, &#8216;Hard&#8217; means that some guesses will probably be necessary.
94</dd>
95</dl>
96
97<hr><address></address></body>
98</html>
diff --git a/apps/plugins/puzzles/list.c b/apps/plugins/puzzles/src/list.c
index ec019c31b2..ec019c31b2 100644
--- a/apps/plugins/puzzles/list.c
+++ b/apps/plugins/puzzles/src/list.c
diff --git a/apps/plugins/puzzles/loopgen.c b/apps/plugins/puzzles/src/loopgen.c
index 25b63906fa..0b6990455f 100644
--- a/apps/plugins/puzzles/loopgen.c
+++ b/apps/plugins/puzzles/src/loopgen.c
@@ -6,7 +6,7 @@
6#include <stdlib.h> 6#include <stdlib.h>
7#include <stddef.h> 7#include <stddef.h>
8#include <string.h> 8#include <string.h>
9#include "rbassert.h" 9#include <assert.h>
10#include <ctype.h> 10#include <ctype.h>
11#include <math.h> 11#include <math.h>
12 12
diff --git a/apps/plugins/puzzles/loopgen.h b/apps/plugins/puzzles/src/loopgen.h
index 079c87c576..079c87c576 100644
--- a/apps/plugins/puzzles/loopgen.h
+++ b/apps/plugins/puzzles/src/loopgen.h
diff --git a/apps/plugins/puzzles/loopy.R b/apps/plugins/puzzles/src/loopy.R
index f44560095d..f44560095d 100644
--- a/apps/plugins/puzzles/loopy.R
+++ b/apps/plugins/puzzles/src/loopy.R
diff --git a/apps/plugins/puzzles/loopy.c b/apps/plugins/puzzles/src/loopy.c
index a931b31c37..652b9ecc09 100644
--- a/apps/plugins/puzzles/loopy.c
+++ b/apps/plugins/puzzles/src/loopy.c
@@ -75,7 +75,7 @@
75#include <stdlib.h> 75#include <stdlib.h>
76#include <stddef.h> 76#include <stddef.h>
77#include <string.h> 77#include <string.h>
78#include "rbassert.h" 78#include <assert.h>
79#include <ctype.h> 79#include <ctype.h>
80#include <math.h> 80#include <math.h>
81 81
@@ -243,32 +243,55 @@ static void check_caches(const solver_state* sstate);
243#define check_caches(s) 243#define check_caches(s)
244#endif 244#endif
245 245
246/* ------- List of grid generators ------- */ 246/*
247#define GRIDLIST(A) \ 247 * Grid type config options available in Loopy.
248 A(Squares,GRID_SQUARE,3,3) \ 248 *
249 A(Triangular,GRID_TRIANGULAR,3,3) \ 249 * Annoyingly, we have to use an enum here which doesn't match up
250 A(Honeycomb,GRID_HONEYCOMB,3,3) \ 250 * exactly to the grid-type enum in grid.h. Values in params->types
251 A(Snub-Square,GRID_SNUBSQUARE,3,3) \ 251 * are given by names such as LOOPY_GRID_SQUARE, which shouldn't be
252 A(Cairo,GRID_CAIRO,3,4) \ 252 * confused with GRID_SQUARE which is the value you pass to grid_new()
253 A(Great-Hexagonal,GRID_GREATHEXAGONAL,3,3) \ 253 * and friends. So beware!
254 A(Octagonal,GRID_OCTAGONAL,3,3) \ 254 *
255 A(Kites,GRID_KITE,3,3) \ 255 * (This is partly for historical reasons - Loopy's version of the
256 A(Floret,GRID_FLORET,1,2) \ 256 * enum is encoded in game parameter strings, so we keep it for
257 A(Dodecagonal,GRID_DODECAGONAL,2,2) \ 257 * backwards compatibility. But also, we need to store additional data
258 A(Great-Dodecagonal,GRID_GREATDODECAGONAL,2,2) \ 258 * here alongside each enum value, such as names for the presets menu,
259 A(Penrose (kite/dart),GRID_PENROSE_P2,3,3) \ 259 * which isn't stored in grid.h; so we have to have our own list macro
260 A(Penrose (rhombs),GRID_PENROSE_P3,3,3) 260 * here anyway, and C doesn't make it easy to enforce that that lines
261 261 * up exactly with grid.h.)
262#define GRID_NAME(title,type,amin,omin) #title, 262 *
263#define GRID_CONFIG(title,type,amin,omin) ":" #title 263 * Do not add values to this list _except_ at the end, or old game ids
264#define GRID_TYPE(title,type,amin,omin) type, 264 * will stop working!
265 */
266#define GRIDLIST(A) \
267 A("Squares",SQUARE,3,3) \
268 A("Triangular",TRIANGULAR,3,3) \
269 A("Honeycomb",HONEYCOMB,3,3) \
270 A("Snub-Square",SNUBSQUARE,3,3) \
271 A("Cairo",CAIRO,3,4) \
272 A("Great-Hexagonal",GREATHEXAGONAL,3,3) \
273 A("Octagonal",OCTAGONAL,3,3) \
274 A("Kites",KITE,3,3) \
275 A("Floret",FLORET,1,2) \
276 A("Dodecagonal",DODECAGONAL,2,2) \
277 A("Great-Dodecagonal",GREATDODECAGONAL,2,2) \
278 A("Penrose (kite/dart)",PENROSE_P2,3,3) \
279 A("Penrose (rhombs)",PENROSE_P3,3,3) \
280 A("Great-Great-Dodecagonal",GREATGREATDODECAGONAL,2,2) \
281 /* end of list */
282
283#define GRID_NAME(title,type,amin,omin) title,
284#define GRID_CONFIG(title,type,amin,omin) ":" title
285#define GRID_LOOPYTYPE(title,type,amin,omin) LOOPY_GRID_ ## type,
286#define GRID_GRIDTYPE(title,type,amin,omin) GRID_ ## type,
265#define GRID_SIZES(title,type,amin,omin) \ 287#define GRID_SIZES(title,type,amin,omin) \
266 {amin, omin, \ 288 {amin, omin, \
267 "Width and height for this grid type must both be at least " #amin, \ 289 "Width and height for this grid type must both be at least " #amin, \
268 "At least one of width and height for this grid type must be at least " #omin,}, 290 "At least one of width and height for this grid type must be at least " #omin,},
291enum { GRIDLIST(GRID_LOOPYTYPE) };
269static char const *const gridnames[] = { GRIDLIST(GRID_NAME) }; 292static char const *const gridnames[] = { GRIDLIST(GRID_NAME) };
270#define GRID_CONFIGS GRIDLIST(GRID_CONFIG) 293#define GRID_CONFIGS GRIDLIST(GRID_CONFIG)
271static grid_type grid_types[] = { GRIDLIST(GRID_TYPE) }; 294static grid_type grid_types[] = { GRIDLIST(GRID_GRIDTYPE) };
272#define NUM_GRID_TYPES (sizeof(grid_types) / sizeof(grid_types[0])) 295#define NUM_GRID_TYPES (sizeof(grid_types) / sizeof(grid_types[0]))
273static const struct { 296static const struct {
274 int amin, omin; 297 int amin, omin;
@@ -490,61 +513,82 @@ static game_params *dup_params(const game_params *params)
490 return ret; 513 return ret;
491} 514}
492 515
493static const game_params presets[] = { 516static const game_params loopy_presets_top[] = {
517#ifdef SMALL_SCREEN
518 { 7, 7, DIFF_EASY, LOOPY_GRID_SQUARE },
519 { 7, 7, DIFF_NORMAL, LOOPY_GRID_SQUARE },
520 { 7, 7, DIFF_HARD, LOOPY_GRID_SQUARE },
521 { 7, 7, DIFF_HARD, LOOPY_GRID_TRIANGULAR },
522 { 5, 5, DIFF_HARD, LOOPY_GRID_SNUBSQUARE },
523 { 7, 7, DIFF_HARD, LOOPY_GRID_CAIRO },
524 { 5, 5, DIFF_HARD, LOOPY_GRID_KITE },
525 { 6, 6, DIFF_HARD, LOOPY_GRID_PENROSE_P2 },
526 { 6, 6, DIFF_HARD, LOOPY_GRID_PENROSE_P3 },
527#else
528 { 7, 7, DIFF_EASY, LOOPY_GRID_SQUARE },
529 { 10, 10, DIFF_EASY, LOOPY_GRID_SQUARE },
530 { 7, 7, DIFF_NORMAL, LOOPY_GRID_SQUARE },
531 { 10, 10, DIFF_NORMAL, LOOPY_GRID_SQUARE },
532 { 7, 7, DIFF_HARD, LOOPY_GRID_SQUARE },
533 { 10, 10, DIFF_HARD, LOOPY_GRID_SQUARE },
534 { 12, 10, DIFF_HARD, LOOPY_GRID_TRIANGULAR },
535 { 7, 7, DIFF_HARD, LOOPY_GRID_SNUBSQUARE },
536 { 9, 9, DIFF_HARD, LOOPY_GRID_CAIRO },
537 { 5, 5, DIFF_HARD, LOOPY_GRID_KITE },
538 { 10, 10, DIFF_HARD, LOOPY_GRID_PENROSE_P2 },
539 { 10, 10, DIFF_HARD, LOOPY_GRID_PENROSE_P3 },
540#endif
541};
542
543static const game_params loopy_presets_more[] = {
494#ifdef SMALL_SCREEN 544#ifdef SMALL_SCREEN
495 { 7, 7, DIFF_EASY, 0 }, 545 { 7, 7, DIFF_HARD, LOOPY_GRID_HONEYCOMB },
496 { 7, 7, DIFF_NORMAL, 0 }, 546 { 5, 4, DIFF_HARD, LOOPY_GRID_GREATHEXAGONAL },
497 { 7, 7, DIFF_HARD, 0 }, 547 { 5, 5, DIFF_HARD, LOOPY_GRID_OCTAGONAL },
498 { 7, 7, DIFF_HARD, 1 }, 548 { 3, 3, DIFF_HARD, LOOPY_GRID_FLORET },
499 { 7, 7, DIFF_HARD, 2 }, 549 { 3, 3, DIFF_HARD, LOOPY_GRID_DODECAGONAL },
500 { 5, 5, DIFF_HARD, 3 }, 550 { 3, 3, DIFF_HARD, LOOPY_GRID_GREATDODECAGONAL },
501 { 7, 7, DIFF_HARD, 4 }, 551 { 3, 2, DIFF_HARD, LOOPY_GRID_GREATGREATDODECAGONAL },
502 { 5, 4, DIFF_HARD, 5 },
503 { 5, 5, DIFF_HARD, 6 },
504 { 5, 5, DIFF_HARD, 7 },
505 { 3, 3, DIFF_HARD, 8 },
506 { 3, 3, DIFF_HARD, 9 },
507 { 3, 3, DIFF_HARD, 10 },
508 { 6, 6, DIFF_HARD, 11 },
509 { 6, 6, DIFF_HARD, 12 },
510#else 552#else
511 { 7, 7, DIFF_EASY, 0 }, 553 { 10, 10, DIFF_HARD, LOOPY_GRID_HONEYCOMB },
512 { 10, 10, DIFF_EASY, 0 }, 554 { 5, 4, DIFF_HARD, LOOPY_GRID_GREATHEXAGONAL },
513 { 7, 7, DIFF_NORMAL, 0 }, 555 { 7, 7, DIFF_HARD, LOOPY_GRID_OCTAGONAL },
514 { 10, 10, DIFF_NORMAL, 0 }, 556 { 5, 5, DIFF_HARD, LOOPY_GRID_FLORET },
515 { 7, 7, DIFF_HARD, 0 }, 557 { 5, 4, DIFF_HARD, LOOPY_GRID_DODECAGONAL },
516 { 10, 10, DIFF_HARD, 0 }, 558 { 5, 4, DIFF_HARD, LOOPY_GRID_GREATDODECAGONAL },
517 { 10, 10, DIFF_HARD, 1 }, 559 { 5, 3, DIFF_HARD, LOOPY_GRID_GREATGREATDODECAGONAL },
518 { 12, 10, DIFF_HARD, 2 },
519 { 7, 7, DIFF_HARD, 3 },
520 { 9, 9, DIFF_HARD, 4 },
521 { 5, 4, DIFF_HARD, 5 },
522 { 7, 7, DIFF_HARD, 6 },
523 { 5, 5, DIFF_HARD, 7 },
524 { 5, 5, DIFF_HARD, 8 },
525 { 5, 4, DIFF_HARD, 9 },
526 { 5, 4, DIFF_HARD, 10 },
527 { 10, 10, DIFF_HARD, 11 },
528 { 10, 10, DIFF_HARD, 12 }
529#endif 560#endif
530}; 561};
531 562
532static int game_fetch_preset(int i, char **name, game_params **params) 563static void preset_menu_add_preset_with_title(struct preset_menu *menu,
564 const game_params *params)
533{ 565{
534 game_params *tmppar;
535 char buf[80]; 566 char buf[80];
567 game_params *dup_params;
536 568
537 if (i < 0 || i >= lenof(presets)) 569 sprintf(buf, "%dx%d %s - %s", params->h, params->w,
538 return FALSE; 570 gridnames[params->type], diffnames[params->diff]);
539 571
540 tmppar = snew(game_params); 572 dup_params = snew(game_params);
541 *tmppar = presets[i]; 573 *dup_params = *params;
542 *params = tmppar;
543 sprintf(buf, "%dx%d %s - %s", tmppar->h, tmppar->w,
544 gridnames[tmppar->type], diffnames[tmppar->diff]);
545 *name = dupstr(buf);
546 574
547 return TRUE; 575 preset_menu_add_preset(menu, dupstr(buf), dup_params);
576}
577
578static struct preset_menu *game_preset_menu(void)
579{
580 struct preset_menu *top, *more;
581 int i;
582
583 top = preset_menu_new();
584 for (i = 0; i < lenof(loopy_presets_top); i++)
585 preset_menu_add_preset_with_title(top, &loopy_presets_top[i]);
586
587 more = preset_menu_add_submenu(top, dupstr("More..."));
588 for (i = 0; i < lenof(loopy_presets_more); i++)
589 preset_menu_add_preset_with_title(more, &loopy_presets_more[i]);
590
591 return top;
548} 592}
549 593
550static void free_params(game_params *params) 594static void free_params(game_params *params)
@@ -2903,7 +2947,8 @@ static char *interpret_move(const game_state *state, game_ui *ui,
2903 grid *g = state->game_grid; 2947 grid *g = state->game_grid;
2904 grid_edge *e; 2948 grid_edge *e;
2905 int i; 2949 int i;
2906 char *ret, buf[80]; 2950 char *movebuf;
2951 int movelen, movesize;
2907 char button_char = ' '; 2952 char button_char = ' ';
2908 enum line_state old_state; 2953 enum line_state old_state;
2909 2954
@@ -2965,11 +3010,64 @@ static char *interpret_move(const game_state *state, game_ui *ui,
2965 return NULL; 3010 return NULL;
2966 } 3011 }
2967 3012
3013 movelen = 0;
3014 movesize = 80;
3015 movebuf = snewn(movesize, char);
3016 movelen = sprintf(movebuf, "%d%c", i, (int)button_char);
3017 {
3018 static enum { OFF, FIXED, ADAPTIVE, DUNNO } autofollow = DUNNO;
3019 if (autofollow == DUNNO) {
3020 const char *env = getenv("LOOPY_AUTOFOLLOW");
3021 if (env && !strcmp(env, "off"))
3022 autofollow = OFF;
3023 else if (env && !strcmp(env, "fixed"))
3024 autofollow = FIXED;
3025 else if (env && !strcmp(env, "adaptive"))
3026 autofollow = ADAPTIVE;
3027 else
3028 autofollow = OFF;
3029 }
2968 3030
2969 sprintf(buf, "%d%c", i, (int)button_char); 3031 if (autofollow != OFF) {
2970 ret = dupstr(buf); 3032 int dotid;
3033 for (dotid = 0; dotid < 2; dotid++) {
3034 grid_dot *dot = (dotid == 0 ? e->dot1 : e->dot2);
3035 grid_edge *e_this = e;
3036
3037 while (1) {
3038 int j, n_found;
3039 grid_edge *e_next = NULL;
3040
3041 for (j = n_found = 0; j < dot->order; j++) {
3042 grid_edge *e_candidate = dot->edges[j];
3043 int i_candidate = e_candidate - g->edges;
3044 if (e_candidate != e_this &&
3045 (autofollow == FIXED ||
3046 state->lines[i] == LINE_NO ||
3047 state->lines[i_candidate] != LINE_NO)) {
3048 e_next = e_candidate;
3049 n_found++;
3050 }
3051 }
2971 3052
2972 return ret; 3053 if (n_found != 1 ||
3054 state->lines[e_next - g->edges] != state->lines[i])
3055 break;
3056
3057 dot = (e_next->dot1 != dot ? e_next->dot1 : e_next->dot2);
3058 if (movelen > movesize - 40) {
3059 movesize = movesize * 5 / 4 + 128;
3060 movebuf = sresize(movebuf, movesize, char);
3061 }
3062 e_this = e_next;
3063 movelen += sprintf(movebuf+movelen, "%d%c",
3064 (int)(e_this - g->edges), button_char);
3065 }
3066 }
3067 }
3068 }
3069
3070 return sresize(movebuf, movelen+1, char);
2973} 3071}
2974 3072
2975static game_state *execute_move(const game_state *state, const char *move) 3073static game_state *execute_move(const game_state *state, const char *move)
@@ -3523,7 +3621,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
3523const struct game thegame = { 3621const struct game thegame = {
3524 "Loopy", "games.loopy", "loopy", 3622 "Loopy", "games.loopy", "loopy",
3525 default_params, 3623 default_params,
3526 game_fetch_preset, 3624 NULL, game_preset_menu,
3527 decode_params, 3625 decode_params,
3528 encode_params, 3626 encode_params,
3529 free_params, 3627 free_params,
diff --git a/apps/plugins/puzzles/src/loopy.html b/apps/plugins/puzzles/src/loopy.html
new file mode 100644
index 0000000000..6730e15664
--- /dev/null
+++ b/apps/plugins/puzzles/src/loopy.html
@@ -0,0 +1,69 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Loopy</title>
7<link rel="previous" href="map.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="inertia.html">
12</head>
13<body>
14<p><a href="map.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="inertia.html">Next</a></p>
15<h1><a name="C23"></a>Chapter 23: <a name="i0"></a>Loopy</h1>
16<p>
17You are given a grid of dots, marked with yellow lines to indicate which dots you are allowed to connect directly together. Your aim is to use some subset of those yellow lines to draw a single unbroken loop from dot to dot within the grid.
18</p>
19<p>
20Some of the spaces between the lines contain numbers. These numbers indicate how many of the lines around that space form part of the loop. The loop you draw must correctly satisfy all of these clues to be considered a correct solution.
21</p>
22<p>
23In the default mode, the dots are arranged in a grid of squares; however, you can also play on triangular or hexagonal grids, or even more exotic ones.
24</p>
25<p>
26Credit for the basic puzzle idea goes to <a name="i1"></a>Nikoli <a href="#p0">[10]</a>.
27</p>
28<p>
29Loopy was originally contributed to this collection by Mike Pinna, and subsequently enhanced to handle various types of non-square grid by Lambros Lambrou.
30</p>
31<p><a name="p0"></a>
32[10] <a href="http://www.nikoli.co.jp/en/puzzles/slitherlink.html"><code>http://www.nikoli.co.jp/en/puzzles/slitherlink.html</code></a> (beware of Flash)
33</p>
34<h2><a name="S23.1"></a>23.1 <a name="i2"></a>Loopy controls</h2>
35<p>
36Click the left mouse button on a yellow line to turn it black, indicating that you think it is part of the loop. Click again to turn the line yellow again (meaning you aren't sure yet).
37</p>
38<p>
39If you are sure that a particular line segment is <em>not</em> part of the loop, you can click the right mouse button to remove it completely. Again, clicking a second time will turn the line back to yellow.
40</p>
41<p>
42(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
43</p>
44<h2><a name="S23.2"></a>23.2 <a name="i3"></a>Loopy parameters</h2>
45<p>
46These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
47</p>
48<dl><dt>
49<em>Width</em>, <em>Height</em>
50</dt>
51<dd>
52Size of grid, measured in number of regions across and down. For square grids, it's clear how this is counted; for other types of grid you may have to think a bit to see how the dimensions are measured.
53</dd>
54<dt>
55<em>Grid type</em>
56</dt>
57<dd>
58Allows you to choose between a selection of types of tiling. Some have all the faces the same but may have multiple different types of vertex (e.g. the <em>Cairo</em> or <em>Kites</em> mode); others have all the vertices the same but may have different types of face (e.g. the <em>Great Hexagonal</em>). The square, triangular and honeycomb grids are fully regular, and have all their vertices <em>and</em> faces the same; this makes them the least confusing to play.
59</dd>
60<dt>
61<em>Difficulty</em>
62</dt>
63<dd>
64Controls the difficulty of the generated puzzle.
65</dd>
66</dl>
67
68<hr><address></address></body>
69</html>
diff --git a/apps/plugins/puzzles/magnets.R b/apps/plugins/puzzles/src/magnets.R
index e55e4746ee..e55e4746ee 100644
--- a/apps/plugins/puzzles/magnets.R
+++ b/apps/plugins/puzzles/src/magnets.R
diff --git a/apps/plugins/puzzles/magnets.c b/apps/plugins/puzzles/src/magnets.c
index e51ae103c5..553ca0d0da 100644
--- a/apps/plugins/puzzles/magnets.c
+++ b/apps/plugins/puzzles/src/magnets.c
@@ -34,7 +34,7 @@
34#include <stdio.h> 34#include <stdio.h>
35#include <stdlib.h> 35#include <stdlib.h>
36#include <string.h> 36#include <string.h>
37#include "rbassert.h" 37#include <assert.h>
38#include <ctype.h> 38#include <ctype.h>
39#include <math.h> 39#include <math.h>
40 40
@@ -2396,7 +2396,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
2396const struct game thegame = { 2396const struct game thegame = {
2397 "Magnets", "games.magnets", "magnets", 2397 "Magnets", "games.magnets", "magnets",
2398 default_params, 2398 default_params,
2399 game_fetch_preset, 2399 game_fetch_preset, NULL,
2400 decode_params, 2400 decode_params,
2401 encode_params, 2401 encode_params,
2402 free_params, 2402 free_params,
diff --git a/apps/plugins/puzzles/src/magnets.html b/apps/plugins/puzzles/src/magnets.html
new file mode 100644
index 0000000000..0e756f2555
--- /dev/null
+++ b/apps/plugins/puzzles/src/magnets.html
@@ -0,0 +1,76 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Magnets</title>
7<link rel="previous" href="singles.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="signpost.html">
12</head>
13<body>
14<p><a href="singles.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="signpost.html">Next</a></p>
15<h1><a name="C33"></a>Chapter 33: <a name="i0"></a>Magnets</h1>
16<p>
17A rectangular grid has been filled with a mixture of magnets (that is, dominoes with one positive end and one negative end) and blank dominoes (that is, dominoes with two neutral poles). These dominoes are initially only seen in silhouette. Around the grid are placed a number of clues indicating the number of positive and negative poles contained in certain columns and rows.
18</p>
19<p>
20Your aim is to correctly place the magnets and blank dominoes such that all the clues are satisfied, with the additional constraint that no two similar magnetic poles may be orthogonally adjacent (since they repel). Neutral poles do not repel, and can be adjacent to any other pole.
21</p>
22<p>
23Credit for this puzzle goes to <a name="i1"></a>Janko <a href="#p0">[16]</a>.
24</p>
25<p>
26Magnets was contributed to this collection by James Harvey.
27</p>
28<p><a name="p0"></a>
29[16] <a href="http://www.janko.at/Raetsel/Magnete/index.htm"><code>http://www.janko.at/Raetsel/Magnete/index.htm</code></a>
30</p>
31<h2><a name="S33.1"></a>33.1 <a name="i2"></a>Magnets controls</h2>
32<p>
33Left-clicking on an empty square places a magnet at that position with the positive pole on the square and the negative pole on the other half of the magnet; left-clicking again reverses the polarity, and a third click removes the magnet.
34</p>
35<p>
36Right-clicking on an empty square places a blank domino there. Right-clicking again places two question marks on the domino, signifying &#8216;this cannot be blank&#8217; (which can be useful to note deductions while solving), and right-clicking again empties the domino.
37</p>
38<p>
39Left-clicking a clue will mark it as done (grey it out), or unmark it if it is already marked.
40</p>
41<p>
42You can also use the cursor keys to move a cursor around the grid. Pressing the return key will lay a domino with a positive pole at that position; pressing again reverses the polarity and then removes the domino, as with left-clicking. Using the space bar allows placement of blank dominoes and cannot-be-blank hints, as for right-clicking.
43</p>
44<p>
45(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
46</p>
47<h2><a name="S33.2"></a>33.2 <a name="i3"></a>Magnets parameters</h2>
48<p>
49These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
50</p>
51<dl><dt>
52<em>Width</em>, <em>Height</em>
53</dt>
54<dd>
55Size of grid in squares. There will be half <em>Width</em> &#215; <em>Height</em> dominoes in the grid: if this number is odd then one square will be blank.
56<p>
57(Grids with at least one odd dimension tend to be easier to solve.)
58</p>
59
60</dd>
61<dt>
62<em>Difficulty</em>
63</dt>
64<dd>
65Controls the difficulty of the generated puzzle. At Tricky level, you are required to make more deductions about empty dominoes and row/column counts.
66</dd>
67<dt>
68<em>Strip clues</em>
69</dt>
70<dd>
71If true, some of the clues around the grid are removed at generation time, making the puzzle more difficult.
72</dd>
73</dl>
74
75<hr><address></address></body>
76</html>
diff --git a/apps/plugins/puzzles/makedist.sh b/apps/plugins/puzzles/src/makedist.sh
index 22b4f5d0ae..22b4f5d0ae 100755
--- a/apps/plugins/puzzles/makedist.sh
+++ b/apps/plugins/puzzles/src/makedist.sh
diff --git a/apps/plugins/puzzles/src/malloc.c b/apps/plugins/puzzles/src/malloc.c
new file mode 100644
index 0000000000..a7fa7c5adc
--- /dev/null
+++ b/apps/plugins/puzzles/src/malloc.c
@@ -0,0 +1,53 @@
1/*
2 * malloc.c: safe wrappers around malloc, realloc, free, strdup
3 */
4
5#include <stdlib.h>
6#include <string.h>
7#include "puzzles.h"
8
9/*
10 * smalloc should guarantee to return a useful pointer - Halibut
11 * can do nothing except die when it's out of memory anyway.
12 */
13void *smalloc(size_t size) {
14 void *p;
15 p = malloc(size);
16 if (!p)
17 fatal("out of memory");
18 return p;
19}
20
21/*
22 * sfree should guaranteeably deal gracefully with freeing NULL
23 */
24void sfree(void *p) {
25 if (p) {
26 free(p);
27 }
28}
29
30/*
31 * srealloc should guaranteeably be able to realloc NULL
32 */
33void *srealloc(void *p, size_t size) {
34 void *q;
35 if (p) {
36 q = realloc(p, size);
37 } else {
38 q = malloc(size);
39 }
40 if (!q)
41 fatal("out of memory");
42 return q;
43}
44
45/*
46 * dupstr is like strdup, but with the never-return-NULL property
47 * of smalloc (and also reliably defined in all environments :-)
48 */
49char *dupstr(const char *s) {
50 char *r = smalloc(1+strlen(s));
51 strcpy(r,s);
52 return r;
53}
diff --git a/apps/plugins/puzzles/map.R b/apps/plugins/puzzles/src/map.R
index 1e702aa19d..1e702aa19d 100644
--- a/apps/plugins/puzzles/map.R
+++ b/apps/plugins/puzzles/src/map.R
diff --git a/apps/plugins/puzzles/map.c b/apps/plugins/puzzles/src/map.c
index 6e9c12523a..f1af38ba5e 100644
--- a/apps/plugins/puzzles/map.c
+++ b/apps/plugins/puzzles/src/map.c
@@ -12,7 +12,7 @@
12#include <stdio.h> 12#include <stdio.h>
13#include <stdlib.h> 13#include <stdlib.h>
14#include <string.h> 14#include <string.h>
15#include "rbassert.h" 15#include <assert.h>
16#include <ctype.h> 16#include <ctype.h>
17#include <math.h> 17#include <math.h>
18 18
@@ -3199,7 +3199,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
3199const struct game thegame = { 3199const struct game thegame = {
3200 "Map", "games.map", "map", 3200 "Map", "games.map", "map",
3201 default_params, 3201 default_params,
3202 game_fetch_preset, 3202 game_fetch_preset, NULL,
3203 decode_params, 3203 decode_params,
3204 encode_params, 3204 encode_params,
3205 free_params, 3205 free_params,
diff --git a/apps/plugins/puzzles/src/map.html b/apps/plugins/puzzles/src/map.html
new file mode 100644
index 0000000000..d3aac337d8
--- /dev/null
+++ b/apps/plugins/puzzles/src/map.html
@@ -0,0 +1,76 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Map</title>
7<link rel="previous" href="lightup.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="loopy.html">
12</head>
13<body>
14<p><a href="lightup.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="loopy.html">Next</a></p>
15<h1><a name="C22"></a>Chapter 22: <a name="i0"></a>Map</h1>
16<p>
17You are given a map consisting of a number of regions. Your task is to colour each region with one of four colours, in such a way that no two regions sharing a boundary have the same colour. You are provided with some regions already coloured, sufficient to make the remainder of the solution unique.
18</p>
19<p>
20Only regions which share a length of border are required to be different colours. Two regions which meet at only one <em>point</em> (i.e. are diagonally separated) may be the same colour.
21</p>
22<p>
23I believe this puzzle is original; I've never seen an implementation of it anywhere else. The concept of a <a name="i1"></a>four-colouring puzzle was suggested by Owen Dunn; credit must also go to Nikoli and to Verity Allan for inspiring the train of thought that led to me realising Owen's suggestion was a viable puzzle. Thanks also to Gareth Taylor for many detailed suggestions.
24</p>
25<h2><a name="S22.1"></a>22.1 <a name="i2"></a>Map controls</h2>
26<p>
27To colour a region, click the left mouse button on an existing region of the desired colour and drag that colour into the new region.
28</p>
29<p>
30(The program will always ensure the starting puzzle has at least one region of each colour, so that this is always possible!)
31</p>
32<p>
33If you need to clear a region, you can drag from an empty region, or from the puzzle boundary if there are no empty regions left.
34</p>
35<p>
36Dragging a colour using the <em>right</em> mouse button will stipple the region in that colour, which you can use as a note to yourself that you think the region <em>might</em> be that colour. A region can contain stipples in multiple colours at once. (This is often useful at the harder difficulty levels.)
37</p>
38<p>
39You can also use the cursor keys to move around the map: the colour of the cursor indicates the position of the colour you would drag (which is not obvious if you're on a region's boundary, since it depends on the direction from which you approached the boundary). Pressing the return key starts a drag of that colour, as above, which you control with the cursor keys; pressing the return key again finishes the drag. The space bar can be used similarly to create a stippled region. Double-pressing the return key (without moving the cursor) will clear the region, as a drag from an empty region does: this is useful with the cursor mode if you have filled the entire map in but need to correct the layout.
40</p>
41<p>
42If you press L during play, the game will toggle display of a number in each region of the map. This is useful if you want to discuss a particular puzzle instance with a friend &#8211; having an unambiguous name for each region is much easier than trying to refer to them all by names such as &#8216;the one down and right of the brown one on the top border&#8217;.
43</p>
44<p>
45(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
46</p>
47<h2><a name="S22.2"></a>22.2 <a name="i3"></a>Map parameters</h2>
48<p>
49These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
50</p>
51<dl><dt>
52<em>Width</em>, <em>Height</em>
53</dt>
54<dd>
55Size of grid in squares.
56</dd>
57<dt>
58<em>Regions</em>
59</dt>
60<dd>
61Number of regions in the generated map.
62</dd>
63<dt>
64<em>Difficulty</em>
65</dt>
66<dd>
67In &#8216;Easy&#8217; mode, there should always be at least one region whose colour can be determined trivially. In &#8216;Normal&#8217; and &#8216;Hard&#8217; modes, you will have to use increasingly complex logic to deduce the colour of some regions. However, it will always be possible without having to guess or backtrack.
68<p>
69In &#8216;Unreasonable&#8217; mode, the program will feel free to generate puzzles which are as hard as it can possibly make them: the only constraint is that they should still have a unique solution. Solving Unreasonable puzzles may require guessing and backtracking.
70</p>
71
72</dd>
73</dl>
74
75<hr><address></address></body>
76</html>
diff --git a/apps/plugins/puzzles/maxflow.c b/apps/plugins/puzzles/src/maxflow.c
index 3a25654ff0..028946b9bd 100644
--- a/apps/plugins/puzzles/maxflow.c
+++ b/apps/plugins/puzzles/src/maxflow.c
@@ -10,7 +10,7 @@
10 * anyway :-) 10 * anyway :-)
11 */ 11 */
12 12
13#include "rbassert.h" 13#include <assert.h>
14#include <stdlib.h> 14#include <stdlib.h>
15#include <stdio.h> 15#include <stdio.h>
16 16
diff --git a/apps/plugins/puzzles/maxflow.h b/apps/plugins/puzzles/src/maxflow.h
index d490f45421..d490f45421 100644
--- a/apps/plugins/puzzles/maxflow.h
+++ b/apps/plugins/puzzles/src/maxflow.h
diff --git a/apps/plugins/puzzles/midend.c b/apps/plugins/puzzles/src/midend.c
index e2938a45bc..2eb5ee93e8 100644
--- a/apps/plugins/puzzles/midend.c
+++ b/apps/plugins/puzzles/src/midend.c
@@ -4,10 +4,14 @@
4 * Maintains a move list, takes care of Undo and Redo commands, and 4 * Maintains a move list, takes care of Undo and Redo commands, and
5 * processes standard keystrokes for undo/redo/new/quit. 5 * processes standard keystrokes for undo/redo/new/quit.
6 */ 6 */
7#include "puzzles.h"
8 7
9#include "rbcompat.h" 8#include <stdio.h>
10#include "rbassert.h" 9#include <string.h>
10#include <assert.h>
11#include <stdlib.h>
12#include <ctype.h>
13
14#include "puzzles.h"
11 15
12enum { DEF_PARAMS, DEF_SEED, DEF_DESC }; /* for midend_game_id_int */ 16enum { DEF_PARAMS, DEF_SEED, DEF_DESC }; /* for midend_game_id_int */
13 17
@@ -26,9 +30,9 @@ struct midend {
26 random_state *random; 30 random_state *random;
27 const game *ourgame; 31 const game *ourgame;
28 32
29 game_params **presets; 33 struct preset_menu *preset_menu;
30 char **preset_names, **preset_encodings; 34 char **encoded_presets; /* for midend_which_preset to check against */
31 int npresets, presetsize; 35 int n_encoded_presets;
32 36
33 /* 37 /*
34 * `desc' and `privdesc' deserve a comment. 38 * `desc' and `privdesc' deserve a comment.
@@ -154,10 +158,7 @@ midend *midend_new(frontend *fe, const game *ourgame,
154 me->genmode = GOT_NOTHING; 158 me->genmode = GOT_NOTHING;
155 me->drawstate = NULL; 159 me->drawstate = NULL;
156 me->oldstate = NULL; 160 me->oldstate = NULL;
157 me->presets = NULL; 161 me->preset_menu = NULL;
158 me->preset_names = NULL;
159 me->preset_encodings = NULL;
160 me->npresets = me->presetsize = 0;
161 me->anim_time = me->anim_pos = 0.0F; 162 me->anim_time = me->anim_pos = 0.0F;
162 me->flash_time = me->flash_pos = 0.0F; 163 me->flash_time = me->flash_pos = 0.0F;
163 me->dir = 0; 164 me->dir = 0;
@@ -205,10 +206,23 @@ static void midend_free_game(midend *me)
205 me->ourgame->free_drawstate(me->drawing, me->drawstate); 206 me->ourgame->free_drawstate(me->drawing, me->drawstate);
206} 207}
207 208
208void midend_free(midend *me) 209static void midend_free_preset_menu(midend *me, struct preset_menu *menu)
209{ 210{
210 int i; 211 if (menu) {
212 int i;
213 for (i = 0; i < menu->n_entries; i++) {
214 sfree(menu->entries[i].title);
215 if (menu->entries[i].params)
216 me->ourgame->free_params(menu->entries[i].params);
217 midend_free_preset_menu(me, menu->entries[i].submenu);
218 }
219 sfree(menu->entries);
220 sfree(menu);
221 }
222}
211 223
224void midend_free(midend *me)
225{
212 midend_free_game(me); 226 midend_free_game(me);
213 227
214 if (me->drawing) 228 if (me->drawing)
@@ -220,16 +234,7 @@ void midend_free(midend *me)
220 sfree(me->seedstr); 234 sfree(me->seedstr);
221 sfree(me->aux_info); 235 sfree(me->aux_info);
222 me->ourgame->free_params(me->params); 236 me->ourgame->free_params(me->params);
223 if (me->npresets) { 237 midend_free_preset_menu(me, me->preset_menu);
224 for (i = 0; i < me->npresets; i++) {
225 sfree(me->presets[i]);
226 sfree(me->preset_names[i]);
227 sfree(me->preset_encodings[i]);
228 }
229 sfree(me->presets);
230 sfree(me->preset_names);
231 sfree(me->preset_encodings);
232 }
233 if (me->ui) 238 if (me->ui)
234 me->ourgame->free_ui(me->ui); 239 me->ourgame->free_ui(me->ui);
235 if (me->curparams) 240 if (me->curparams)
@@ -923,40 +928,177 @@ float *midend_colours(midend *me, int *ncolours)
923 return ret; 928 return ret;
924} 929}
925 930
926int midend_num_presets(midend *me) 931struct preset_menu *preset_menu_new(void)
927{ 932{
928 if (!me->npresets) { 933 struct preset_menu *menu = snew(struct preset_menu);
929 char *name; 934 menu->n_entries = 0;
935 menu->entries_size = 0;
936 menu->entries = NULL;
937 return menu;
938}
939
940static struct preset_menu_entry *preset_menu_add(struct preset_menu *menu,
941 char *title)
942{
943 struct preset_menu_entry *toret;
944 if (menu->n_entries >= menu->entries_size) {
945 menu->entries_size = menu->n_entries * 5 / 4 + 10;
946 menu->entries = sresize(menu->entries, menu->entries_size,
947 struct preset_menu_entry);
948 }
949 toret = &menu->entries[menu->n_entries++];
950 toret->title = title;
951 toret->params = NULL;
952 toret->submenu = NULL;
953 return toret;
954}
955
956struct preset_menu *preset_menu_add_submenu(struct preset_menu *parent,
957 char *title)
958{
959 struct preset_menu_entry *entry = preset_menu_add(parent, title);
960 entry->submenu = preset_menu_new();
961 return entry->submenu;
962}
963
964void preset_menu_add_preset(struct preset_menu *parent,
965 char *title, game_params *params)
966{
967 struct preset_menu_entry *entry = preset_menu_add(parent, title);
968 entry->params = params;
969}
970
971game_params *preset_menu_lookup_by_id(struct preset_menu *menu, int id)
972{
973 int i;
974 game_params *retd;
975
976 for (i = 0; i < menu->n_entries; i++) {
977 if (id == menu->entries[i].id)
978 return menu->entries[i].params;
979 if (menu->entries[i].submenu &&
980 (retd = preset_menu_lookup_by_id(
981 menu->entries[i].submenu, id)) != NULL)
982 return retd;
983 }
984
985 return NULL;
986}
987
988static char *preset_menu_add_from_user_env(
989 midend *me, struct preset_menu *menu, char *p, int top_level)
990{
991 while (*p) {
992 char *name, *val;
930 game_params *preset; 993 game_params *preset;
931 994
932 while (me->ourgame->fetch_preset(me->npresets, &name, &preset)) { 995 name = p;
933 if (me->presetsize <= me->npresets) { 996 while (*p && *p != ':') p++;
934 me->presetsize = me->npresets + 10; 997 if (*p) *p++ = '\0';
935 me->presets = sresize(me->presets, me->presetsize, 998 val = p;
936 game_params *); 999 while (*p && *p != ':') p++;
937 me->preset_names = sresize(me->preset_names, me->presetsize, 1000 if (*p) *p++ = '\0';
938 char *); 1001
939 me->preset_encodings = sresize(me->preset_encodings, 1002 if (!strcmp(val, "#")) {
940 me->presetsize, char *); 1003 /*
1004 * Special case: either open a new submenu with the given
1005 * title, or terminate the current submenu.
1006 */
1007 if (*name) {
1008 struct preset_menu *submenu =
1009 preset_menu_add_submenu(menu, dupstr(name));
1010 p = preset_menu_add_from_user_env(me, submenu, p, FALSE);
1011 } else {
1012 /*
1013 * If we get a 'close submenu' indication at the top
1014 * level, there's not much we can do but quietly
1015 * ignore it.
1016 */
1017 if (!top_level)
1018 return p;
941 } 1019 }
1020 continue;
1021 }
1022
1023 preset = me->ourgame->default_params();
1024 me->ourgame->decode_params(preset, val);
1025
1026 if (me->ourgame->validate_params(preset, TRUE)) {
1027 /* Drop this one from the list. */
1028 me->ourgame->free_params(preset);
1029 continue;
1030 }
1031
1032 preset_menu_add_preset(menu, dupstr(name), preset);
1033 }
1034
1035 return p;
1036}
1037
1038static void preset_menu_alloc_ids(midend *me, struct preset_menu *menu)
1039{
1040 int i;
1041
1042 for (i = 0; i < menu->n_entries; i++)
1043 menu->entries[i].id = me->n_encoded_presets++;
1044
1045 for (i = 0; i < menu->n_entries; i++)
1046 if (menu->entries[i].submenu)
1047 preset_menu_alloc_ids(me, menu->entries[i].submenu);
1048}
942 1049
943 me->presets[me->npresets] = preset; 1050static void preset_menu_encode_params(midend *me, struct preset_menu *menu)
944 me->preset_names[me->npresets] = name; 1051{
945 me->preset_encodings[me->npresets] = 1052 int i;
946 me->ourgame->encode_params(preset, TRUE);; 1053
947 me->npresets++; 1054 for (i = 0; i < menu->n_entries; i++) {
1055 if (menu->entries[i].params) {
1056 me->encoded_presets[menu->entries[i].id] =
1057 me->ourgame->encode_params(menu->entries[i].params, TRUE);
1058 } else {
1059 preset_menu_encode_params(me, menu->entries[i].submenu);
948 } 1060 }
949 } 1061 }
1062}
1063
1064struct preset_menu *midend_get_presets(midend *me, int *id_limit)
1065{
1066 int i;
1067
1068 if (me->preset_menu)
1069 return me->preset_menu;
1070
1071#if 0
1072 /* Expect the game to implement exactly one of the two preset APIs */
1073 assert(me->ourgame->fetch_preset || me->ourgame->preset_menu);
1074 assert(!(me->ourgame->fetch_preset && me->ourgame->preset_menu));
1075#endif
1076
1077 if (me->ourgame->fetch_preset) {
1078 char *name;
1079 game_params *preset;
1080
1081 /* Simple one-level menu */
1082 assert(!me->ourgame->preset_menu);
1083 me->preset_menu = preset_menu_new();
1084 for (i = 0; me->ourgame->fetch_preset(i, &name, &preset); i++)
1085 preset_menu_add_preset(me->preset_menu, name, preset);
1086
1087 } else {
1088 /* Hierarchical menu provided by the game backend */
1089 me->preset_menu = me->ourgame->preset_menu();
1090 }
950 1091
951 { 1092 {
952 /* 1093 /*
953 * Allow environment-based extensions to the preset list by 1094 * Allow user extensions to the preset list by defining an
954 * defining a variable along the lines of `SOLO_PRESETS=2x3 1095 * environment variable <gamename>_PRESETS whose value is a
955 * Advanced:2x3da'. Colon-separated list of items, 1096 * colon-separated list of items, alternating between textual
956 * alternating between textual titles in the menu and 1097 * titles in the menu and encoded parameter strings. For
957 * encoded parameter strings. 1098 * example, "SOLO_PRESETS=2x3 Advanced:2x3da" would define
1099 * just one additional preset for Solo.
958 */ 1100 */
959 char buf[80], *e, *p; 1101 char buf[80], *e;
960 int j, k; 1102 int j, k;
961 1103
962 sprintf(buf, "%s_PRESETS", me->ourgame->name); 1104 sprintf(buf, "%s_PRESETS", me->ourgame->name);
@@ -966,57 +1108,27 @@ int midend_num_presets(midend *me)
966 buf[k] = '\0'; 1108 buf[k] = '\0';
967 1109
968 if ((e = getenv(buf)) != NULL) { 1110 if ((e = getenv(buf)) != NULL) {
969 p = e = dupstr(e); 1111 e = dupstr(e);
970 1112 preset_menu_add_from_user_env(me, me->preset_menu, e, TRUE);
971 while (*p) {
972 char *name, *val;
973 game_params *preset;
974
975 name = p;
976 while (*p && *p != ':') p++;
977 if (*p) *p++ = '\0';
978 val = p;
979 while (*p && *p != ':') p++;
980 if (*p) *p++ = '\0';
981
982 preset = me->ourgame->default_params();
983 me->ourgame->decode_params(preset, val);
984
985 if (me->ourgame->validate_params(preset, TRUE)) {
986 /* Drop this one from the list. */
987 me->ourgame->free_params(preset);
988 continue;
989 }
990
991 if (me->presetsize <= me->npresets) {
992 me->presetsize = me->npresets + 10;
993 me->presets = sresize(me->presets, me->presetsize,
994 game_params *);
995 me->preset_names = sresize(me->preset_names,
996 me->presetsize, char *);
997 me->preset_encodings = sresize(me->preset_encodings,
998 me->presetsize, char *);
999 }
1000
1001 me->presets[me->npresets] = preset;
1002 me->preset_names[me->npresets] = dupstr(name);
1003 me->preset_encodings[me->npresets] =
1004 me->ourgame->encode_params(preset, TRUE);
1005 me->npresets++;
1006 }
1007 sfree(e); 1113 sfree(e);
1008 } 1114 }
1009 } 1115 }
1010 1116
1011 return me->npresets; 1117 /*
1012} 1118 * Finalise the menu: allocate an integer id to each entry, and
1013 1119 * store string encodings of the presets' parameters in
1014void midend_fetch_preset(midend *me, int n, 1120 * me->encoded_presets.
1015 char **name, game_params **params) 1121 */
1016{ 1122 me->n_encoded_presets = 0;
1017 assert(n >= 0 && n < me->npresets); 1123 preset_menu_alloc_ids(me, me->preset_menu);
1018 *name = me->preset_names[n]; 1124 me->encoded_presets = snewn(me->n_encoded_presets, char *);
1019 *params = me->presets[n]; 1125 for (i = 0; i < me->n_encoded_presets; i++)
1126 me->encoded_presets[i] = NULL;
1127 preset_menu_encode_params(me, me->preset_menu);
1128
1129 if (id_limit)
1130 *id_limit = me->n_encoded_presets;
1131 return me->preset_menu;
1020} 1132}
1021 1133
1022int midend_which_preset(midend *me) 1134int midend_which_preset(midend *me)
@@ -1025,8 +1137,9 @@ int midend_which_preset(midend *me)
1025 int i, ret; 1137 int i, ret;
1026 1138
1027 ret = -1; 1139 ret = -1;
1028 for (i = 0; i < me->npresets; i++) 1140 for (i = 0; i < me->n_encoded_presets; i++)
1029 if (!strcmp(encoding, me->preset_encodings[i])) { 1141 if (me->encoded_presets[i] &&
1142 !strcmp(encoding, me->encoded_presets[i])) {
1030 ret = i; 1143 ret = i;
1031 break; 1144 break;
1032 } 1145 }
@@ -1479,18 +1592,6 @@ char *midend_rewrite_statusbar(midend *me, char *text)
1479#define SERIALISE_MAGIC "Simon Tatham's Portable Puzzle Collection" 1592#define SERIALISE_MAGIC "Simon Tatham's Portable Puzzle Collection"
1480#define SERIALISE_VERSION "1" 1593#define SERIALISE_VERSION "1"
1481 1594
1482/* rockbox kludge */
1483static void copy_left_justified(char *buf, size_t sz, const char *str)
1484{
1485 memset(buf, ' ', sz - 1);
1486 int len = strlen(str);
1487 if(len <= sz - 1)
1488 memcpy(buf, str, len);
1489 else
1490 fatal("overrun");
1491 buf[sz - 1] = 0;
1492}
1493
1494void midend_serialise(midend *me, 1595void midend_serialise(midend *me,
1495 void (*write)(void *ctx, void *buf, int len), 1596 void (*write)(void *ctx, void *buf, int len),
1496 void *wctx) 1597 void *wctx)
@@ -1509,7 +1610,7 @@ void midend_serialise(midend *me,
1509#define wr(h,s) do { \ 1610#define wr(h,s) do { \
1510 char hbuf[80]; \ 1611 char hbuf[80]; \
1511 char *str = (s); \ 1612 char *str = (s); \
1512 char lbuf[9]; \ 1613 char lbuf[9]; \
1513 copy_left_justified(lbuf, sizeof(lbuf), h); \ 1614 copy_left_justified(lbuf, sizeof(lbuf), h); \
1514 sprintf(hbuf, "%s:%d:", lbuf, (int)strlen(str)); \ 1615 sprintf(hbuf, "%s:%d:", lbuf, (int)strlen(str)); \
1515 write(wctx, hbuf, strlen(hbuf)); \ 1616 write(wctx, hbuf, strlen(hbuf)); \
diff --git a/apps/plugins/puzzles/mines.R b/apps/plugins/puzzles/src/mines.R
index 275c76c7ad..275c76c7ad 100644
--- a/apps/plugins/puzzles/mines.R
+++ b/apps/plugins/puzzles/src/mines.R
diff --git a/apps/plugins/puzzles/mines.c b/apps/plugins/puzzles/src/mines.c
index deb71aed6b..6a5ce029a0 100644
--- a/apps/plugins/puzzles/mines.c
+++ b/apps/plugins/puzzles/src/mines.c
@@ -10,7 +10,7 @@
10#include <stdio.h> 10#include <stdio.h>
11#include <stdlib.h> 11#include <stdlib.h>
12#include <string.h> 12#include <string.h>
13#include "rbassert.h" 13#include <assert.h>
14#include <ctype.h> 14#include <ctype.h>
15#include <math.h> 15#include <math.h>
16 16
@@ -3142,7 +3142,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
3142const struct game thegame = { 3142const struct game thegame = {
3143 "Mines", "games.mines", "mines", 3143 "Mines", "games.mines", "mines",
3144 default_params, 3144 default_params,
3145 game_fetch_preset, 3145 game_fetch_preset, NULL,
3146 decode_params, 3146 decode_params,
3147 encode_params, 3147 encode_params,
3148 free_params, 3148 free_params,
diff --git a/apps/plugins/puzzles/src/mines.html b/apps/plugins/puzzles/src/mines.html
new file mode 100644
index 0000000000..15c8b3e9c8
--- /dev/null
+++ b/apps/plugins/puzzles/src/mines.html
@@ -0,0 +1,82 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Mines</title>
7<link rel="previous" href="solo.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="samegame.html">
12</head>
13<body>
14<p><a href="solo.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="samegame.html">Next</a></p>
15<h1><a name="C12"></a>Chapter 12: <a name="i0"></a>Mines</h1>
16<p>
17You have a grid of covered squares, some of which contain mines, but you don't know which. Your job is to uncover every square which does <em>not</em> contain a mine. If you uncover a square containing a mine, you lose. If you uncover a square which does not contain a mine, you are told how many mines are contained within the eight surrounding squares.
18</p>
19<p>
20This game needs no introduction; popularised by Windows, it is perhaps the single best known desktop puzzle game in existence.
21</p>
22<p>
23This version of it has an unusual property. By default, it will generate its mine positions in such a way as to ensure that you never need to <em>guess</em> where a mine is: you will always be able to deduce it somehow. So you will never, as can happen in other versions, get to the last four squares and discover that there are two mines left but you have no way of knowing for sure where they are.
24</p>
25<h2><a name="S12.1"></a>12.1 <a name="i1"></a>Mines controls</h2>
26<p>
27This game is played with the mouse.
28</p>
29<p>
30If you left-click in a covered square, it will be uncovered.
31</p>
32<p>
33If you right-click in a covered square, it will place a flag which indicates that the square is believed to be a mine. Left-clicking in a marked square will not uncover it, for safety. You can right-click again to remove a mark placed in error.
34</p>
35<p>
36If you left-click in an <em>uncovered</em> square, it will &#8216;clear around&#8217; the square. This means: if the square has exactly as many flags surrounding it as it should have mines, then all the covered squares next to it which are <em>not</em> flagged will be uncovered. So once you think you know the location of all the mines around a square, you can use this function as a shortcut to avoid having to click on each of the remaining squares one by one.
37</p>
38<p>
39If you uncover a square which has <em>no</em> mines in the surrounding eight squares, then it is obviously safe to uncover those squares in turn, and so on if any of them also has no surrounding mines. This will be done for you automatically; so sometimes when you uncover a square, a whole new area will open up to be explored.
40</p>
41<p>
42You can also use the cursor keys to move around the minefield. Pressing the return key in a covered square uncovers it, and in an uncovered square will clear around it (so it acts as the left button), pressing the space bar in a covered square will place a flag (similarly, it acts as the right button).
43</p>
44<p>
45All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.
46</p>
47<p>
48Even Undo is available, although you might consider it cheating to use it. If you step on a mine, the program will only reveal the mine in question (unlike most other implementations, which reveal all of them). You can then Undo your fatal move and continue playing if you like. The program will track the number of times you died (and Undo will not reduce that counter), so when you get to the end of the game you know whether or not you did it without making any errors.
49</p>
50<p>
51(If you really want to know the full layout of the grid, which other implementations will show you after you die, you can always use the Solve menu option.)
52</p>
53<h2><a name="S12.2"></a>12.2 <a name="i2"></a>Mines parameters</h2>
54<p>
55The options available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu are:
56</p>
57<dl><dt>
58<em>Width</em>, <em>Height</em>
59</dt>
60<dd>
61Size of grid in squares.
62</dd>
63<dt>
64<em>Mines</em>
65</dt>
66<dd>
67Number of mines in the grid. You can enter this as an absolute mine count, or alternatively you can put a <code>%</code> sign on the end in which case the game will arrange for that proportion of the squares in the grid to be mines.
68<p>
69Beware of setting the mine count too high. At very high densities, the program may spend forever searching for a solvable grid.
70</p>
71
72</dd>
73<dt>
74<em>Ensure solubility</em>
75</dt>
76<dd>
77When this option is enabled (as it is by default), Mines will ensure that the entire grid can be fully deduced starting from the initial open space. If you prefer the riskier grids generated by other implementations, you can switch off this option.
78</dd>
79</dl>
80
81<hr><address></address></body>
82</html>
diff --git a/apps/plugins/puzzles/misc.c b/apps/plugins/puzzles/src/misc.c
index cd5c393b95..c721016563 100644
--- a/apps/plugins/puzzles/misc.c
+++ b/apps/plugins/puzzles/src/misc.c
@@ -2,7 +2,7 @@
2 * misc.c: Miscellaneous helpful functions. 2 * misc.c: Miscellaneous helpful functions.
3 */ 3 */
4 4
5#include "rbassert.h" 5#include <assert.h>
6#include <stdlib.h> 6#include <stdlib.h>
7#include <string.h> 7#include <string.h>
8#include <stdio.h> 8#include <stdio.h>
@@ -201,7 +201,7 @@ void game_mkhighlight(frontend *fe, float *ret,
201 game_mkhighlight_specific(fe, ret, background, highlight, lowlight); 201 game_mkhighlight_specific(fe, ret, background, highlight, lowlight);
202} 202}
203 203
204static void memswap_puzzles(void *av, void *bv, int size) 204static void memswap(void *av, void *bv, int size)
205{ 205{
206 char tmpbuf[512]; 206 char tmpbuf[512];
207 char *a = av, *b = bv; 207 char *a = av, *b = bv;
@@ -225,7 +225,7 @@ void shuffle(void *array, int nelts, int eltsize, random_state *rs)
225 for (i = nelts; i-- > 1 ;) { 225 for (i = nelts; i-- > 1 ;) {
226 int j = random_upto(rs, i+1); 226 int j = random_upto(rs, i+1);
227 if (j != i) 227 if (j != i)
228 memswap_puzzles(carray + eltsize * i, carray + eltsize * j, eltsize); 228 memswap(carray + eltsize * i, carray + eltsize * j, eltsize);
229 } 229 }
230} 230}
231 231
@@ -358,6 +358,19 @@ void draw_text_outline(drawing *dr, int x, int y, int fonttype,
358 draw_text(dr, x, y+1, fonttype, fontsize, align, outline_colour, text); 358 draw_text(dr, x, y+1, fonttype, fontsize, align, outline_colour, text);
359 } 359 }
360 draw_text(dr, x, y, fonttype, fontsize, align, text_colour, text); 360 draw_text(dr, x, y, fonttype, fontsize, align, text_colour, text);
361
362}
363
364/* kludge for non-compliant sprintf() */
365void copy_left_justified(char *buf, size_t sz, const char *str)
366{
367 memset(buf, ' ', sz - 1);
368 int len = strlen(str);
369 if(len <= sz - 1)
370 memcpy(buf, str, len);
371 else
372 fatal("overrun");
373 buf[sz - 1] = 0;
361} 374}
362 375
363/* vim: set shiftwidth=4 tabstop=8: */ 376/* vim: set shiftwidth=4 tabstop=8: */
diff --git a/apps/plugins/puzzles/src/missing b/apps/plugins/puzzles/src/missing
new file mode 100755
index 0000000000..f62bbae306
--- /dev/null
+++ b/apps/plugins/puzzles/src/missing
@@ -0,0 +1,215 @@
1#! /bin/sh
2# Common wrapper for a few potentially missing GNU programs.
3
4scriptversion=2013-10-28.13; # UTC
5
6# Copyright (C) 1996-2014 Free Software Foundation, Inc.
7# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
8
9# This program is free software; you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation; either version 2, or (at your option)
12# any later version.
13
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU General Public License for more details.
18
19# You should have received a copy of the GNU General Public License
20# along with this program. If not, see <http://www.gnu.org/licenses/>.
21
22# As a special exception to the GNU General Public License, if you
23# distribute this file as part of a program that contains a
24# configuration script generated by Autoconf, you may include it under
25# the same distribution terms that you use for the rest of that program.
26
27if test $# -eq 0; then
28 echo 1>&2 "Try '$0 --help' for more information"
29 exit 1
30fi
31
32case $1 in
33
34 --is-lightweight)
35 # Used by our autoconf macros to check whether the available missing
36 # script is modern enough.
37 exit 0
38 ;;
39
40 --run)
41 # Back-compat with the calling convention used by older automake.
42 shift
43 ;;
44
45 -h|--h|--he|--hel|--help)
46 echo "\
47$0 [OPTION]... PROGRAM [ARGUMENT]...
48
49Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
50to PROGRAM being missing or too old.
51
52Options:
53 -h, --help display this help and exit
54 -v, --version output version information and exit
55
56Supported PROGRAM values:
57 aclocal autoconf autoheader autom4te automake makeinfo
58 bison yacc flex lex help2man
59
60Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
61'g' are ignored when checking the name.
62
63Send bug reports to <bug-automake@gnu.org>."
64 exit $?
65 ;;
66
67 -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
68 echo "missing $scriptversion (GNU Automake)"
69 exit $?
70 ;;
71
72 -*)
73 echo 1>&2 "$0: unknown '$1' option"
74 echo 1>&2 "Try '$0 --help' for more information"
75 exit 1
76 ;;
77
78esac
79
80# Run the given program, remember its exit status.
81"$@"; st=$?
82
83# If it succeeded, we are done.
84test $st -eq 0 && exit 0
85
86# Also exit now if we it failed (or wasn't found), and '--version' was
87# passed; such an option is passed most likely to detect whether the
88# program is present and works.
89case $2 in --version|--help) exit $st;; esac
90
91# Exit code 63 means version mismatch. This often happens when the user
92# tries to use an ancient version of a tool on a file that requires a
93# minimum version.
94if test $st -eq 63; then
95 msg="probably too old"
96elif test $st -eq 127; then
97 # Program was missing.
98 msg="missing on your system"
99else
100 # Program was found and executed, but failed. Give up.
101 exit $st
102fi
103
104perl_URL=http://www.perl.org/
105flex_URL=http://flex.sourceforge.net/
106gnu_software_URL=http://www.gnu.org/software
107
108program_details ()
109{
110 case $1 in
111 aclocal|automake)
112 echo "The '$1' program is part of the GNU Automake package:"
113 echo "<$gnu_software_URL/automake>"
114 echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
115 echo "<$gnu_software_URL/autoconf>"
116 echo "<$gnu_software_URL/m4/>"
117 echo "<$perl_URL>"
118 ;;
119 autoconf|autom4te|autoheader)
120 echo "The '$1' program is part of the GNU Autoconf package:"
121 echo "<$gnu_software_URL/autoconf/>"
122 echo "It also requires GNU m4 and Perl in order to run:"
123 echo "<$gnu_software_URL/m4/>"
124 echo "<$perl_URL>"
125 ;;
126 esac
127}
128
129give_advice ()
130{
131 # Normalize program name to check for.
132 normalized_program=`echo "$1" | sed '
133 s/^gnu-//; t
134 s/^gnu//; t
135 s/^g//; t'`
136
137 printf '%s\n' "'$1' is $msg."
138
139 configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
140 case $normalized_program in
141 autoconf*)
142 echo "You should only need it if you modified 'configure.ac',"
143 echo "or m4 files included by it."
144 program_details 'autoconf'
145 ;;
146 autoheader*)
147 echo "You should only need it if you modified 'acconfig.h' or"
148 echo "$configure_deps."
149 program_details 'autoheader'
150 ;;
151 automake*)
152 echo "You should only need it if you modified 'Makefile.am' or"
153 echo "$configure_deps."
154 program_details 'automake'
155 ;;
156 aclocal*)
157 echo "You should only need it if you modified 'acinclude.m4' or"
158 echo "$configure_deps."
159 program_details 'aclocal'
160 ;;
161 autom4te*)
162 echo "You might have modified some maintainer files that require"
163 echo "the 'autom4te' program to be rebuilt."
164 program_details 'autom4te'
165 ;;
166 bison*|yacc*)
167 echo "You should only need it if you modified a '.y' file."
168 echo "You may want to install the GNU Bison package:"
169 echo "<$gnu_software_URL/bison/>"
170 ;;
171 lex*|flex*)
172 echo "You should only need it if you modified a '.l' file."
173 echo "You may want to install the Fast Lexical Analyzer package:"
174 echo "<$flex_URL>"
175 ;;
176 help2man*)
177 echo "You should only need it if you modified a dependency" \
178 "of a man page."
179 echo "You may want to install the GNU Help2man package:"
180 echo "<$gnu_software_URL/help2man/>"
181 ;;
182 makeinfo*)
183 echo "You should only need it if you modified a '.texi' file, or"
184 echo "any other file indirectly affecting the aspect of the manual."
185 echo "You might want to install the Texinfo package:"
186 echo "<$gnu_software_URL/texinfo/>"
187 echo "The spurious makeinfo call might also be the consequence of"
188 echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
189 echo "want to install GNU make:"
190 echo "<$gnu_software_URL/make/>"
191 ;;
192 *)
193 echo "You might have modified some files without having the proper"
194 echo "tools for further handling them. Check the 'README' file, it"
195 echo "often tells you about the needed prerequisites for installing"
196 echo "this package. You may also peek at any GNU archive site, in"
197 echo "case some other package contains this missing '$1' program."
198 ;;
199 esac
200}
201
202give_advice "$1" | sed -e '1s/^/WARNING: /' \
203 -e '2,$s/^/ /' >&2
204
205# Propagate the correct exit status (expected to be 127 for a program
206# not found, 63 for a program that failed due to version mismatch).
207exit $st
208
209# Local variables:
210# eval: (add-hook 'write-file-hooks 'time-stamp)
211# time-stamp-start: "scriptversion="
212# time-stamp-format: "%:y-%02m-%02d.%02H"
213# time-stamp-time-zone: "UTC"
214# time-stamp-end: "; # UTC"
215# End:
diff --git a/apps/plugins/puzzles/mkauto.sh b/apps/plugins/puzzles/src/mkauto.sh
index 297212ad4d..297212ad4d 100755
--- a/apps/plugins/puzzles/mkauto.sh
+++ b/apps/plugins/puzzles/src/mkauto.sh
diff --git a/apps/plugins/puzzles/mkfiles.pl b/apps/plugins/puzzles/src/mkfiles.pl
index c1623dfd12..c1623dfd12 100755
--- a/apps/plugins/puzzles/mkfiles.pl
+++ b/apps/plugins/puzzles/src/mkfiles.pl
diff --git a/apps/plugins/puzzles/nestedvm.c b/apps/plugins/puzzles/src/nestedvm.c
index c61afecf6a..79b797116f 100644
--- a/apps/plugins/puzzles/nestedvm.c
+++ b/apps/plugins/puzzles/src/nestedvm.c
@@ -3,7 +3,7 @@
3 */ 3 */
4 4
5#include <stdio.h> 5#include <stdio.h>
6#include "rbassert.h" 6#include <assert.h>
7#include <stdlib.h> 7#include <stdlib.h>
8#include <time.h> 8#include <time.h>
9#include <stdarg.h> 9#include <stdarg.h>
@@ -382,6 +382,23 @@ int jcallback_about_event()
382 return 0; 382 return 0;
383} 383}
384 384
385void preset_menu_populate(struct preset_menu *menu, int menuid)
386{
387 int i;
388
389 for (i = 0; i < menu->n_entries; i++) {
390 struct preset_menu_entry *entry = &menu->entries[i];
391 if (entry->params) {
392 _call_java(5, (int)entry->params, 0, 0);
393 _call_java(1, (int)entry->title, menuid, entry->id);
394 } else {
395 _call_java(5, 0, 0, 0);
396 _call_java(1, (int)entry->title, menuid, entry->id);
397 preset_menu_populate(entry->submenu, entry->id);
398 }
399 }
400}
401
385int main(int argc, char **argv) 402int main(int argc, char **argv)
386{ 403{
387 int i, n; 404 int i, n;
@@ -394,14 +411,12 @@ int main(int argc, char **argv)
394 midend_game_id(_fe->me, argv[1]); /* ignore failure */ 411 midend_game_id(_fe->me, argv[1]); /* ignore failure */
395 midend_new_game(_fe->me); 412 midend_new_game(_fe->me);
396 413
397 if ((n = midend_num_presets(_fe->me)) > 0) { 414 {
398 int i; 415 struct preset_menu *menu;
399 for (i = 0; i < n; i++) { 416 int nids, topmenu;
400 char *name; 417 menu = midend_get_presets(_fe->me, &nids);
401 game_params *params; 418 topmenu = _call_java(1, 0, nids, 0);
402 midend_fetch_preset(_fe->me, i, &name, &params); 419 preset_menu_populate(menu, topmenu);
403 _call_java(1, (int)name, (int)params, 0);
404 }
405 } 420 }
406 421
407 colours = midend_colours(_fe->me, &n); 422 colours = midend_colours(_fe->me, &n);
diff --git a/apps/plugins/puzzles/net.R b/apps/plugins/puzzles/src/net.R
index 8e98216e03..8e98216e03 100644
--- a/apps/plugins/puzzles/net.R
+++ b/apps/plugins/puzzles/src/net.R
diff --git a/apps/plugins/puzzles/net.c b/apps/plugins/puzzles/src/net.c
index 18ba7760d5..de51f82fd7 100644
--- a/apps/plugins/puzzles/net.c
+++ b/apps/plugins/puzzles/src/net.c
@@ -5,7 +5,7 @@
5#include <stdio.h> 5#include <stdio.h>
6#include <stdlib.h> 6#include <stdlib.h>
7#include <string.h> 7#include <string.h>
8#include "rbassert.h" 8#include <assert.h>
9#include <ctype.h> 9#include <ctype.h>
10#include <math.h> 10#include <math.h>
11 11
@@ -2390,24 +2390,31 @@ static game_state *execute_move(const game_state *from, const char *move)
2390 /* 2390 /*
2391 * Check whether the game has been completed. 2391 * Check whether the game has been completed.
2392 * 2392 *
2393 * For this purpose it doesn't matter where the source square 2393 * For this purpose it doesn't matter where the source square is,
2394 * is, because we can start from anywhere and correctly 2394 * because we can start from anywhere (or, at least, any square
2395 * determine whether the game is completed. 2395 * that's non-empty!), and correctly determine whether the game is
2396 * completed.
2396 */ 2397 */
2397 { 2398 {
2398 unsigned char *active = compute_active(ret, 0, 0); 2399 unsigned char *active;
2399 int x1, y1; 2400 int pos;
2400 int complete = TRUE; 2401 int complete = TRUE;
2401 2402
2402 for (x1 = 0; x1 < ret->width; x1++) 2403 for (pos = 0; pos < ret->width * ret->height; pos++)
2403 for (y1 = 0; y1 < ret->height; y1++) 2404 if (ret->tiles[pos] & 0xF)
2404 if ((tile(ret, x1, y1) & 0xF) && !index(ret, active, x1, y1)) { 2405 break;
2406
2407 if (pos < ret->width * ret->height) {
2408 active = compute_active(ret, pos % ret->width, pos / ret->width);
2409
2410 for (pos = 0; pos < ret->width * ret->height; pos++)
2411 if ((ret->tiles[pos] & 0xF) && !active[pos]) {
2405 complete = FALSE; 2412 complete = FALSE;
2406 goto break_label; /* break out of two loops at once */ 2413 break;
2407 } 2414 }
2408 break_label:
2409 2415
2410 sfree(active); 2416 sfree(active);
2417 }
2411 2418
2412 if (complete) 2419 if (complete)
2413 ret->completed = TRUE; 2420 ret->completed = TRUE;
@@ -2964,20 +2971,43 @@ static void game_redraw(drawing *dr, game_drawstate *ds,
2964 * Update the status bar. 2971 * Update the status bar.
2965 */ 2972 */
2966 { 2973 {
2967 char statusbuf[256]; 2974 char statusbuf[256], *p;
2968 int i, n, n2, a; 2975 int i, n, n2, a;
2976 int complete = FALSE;
2977
2978 p = statusbuf;
2979 *p = '\0'; /* ensure even an empty status string is terminated */
2969 2980
2970 n = state->width * state->height; 2981 if (state->used_solve) {
2971 for (i = a = n2 = 0; i < n; i++) { 2982 p += sprintf(p, "Auto-solved. ");
2972 if (active[i]) 2983 complete = TRUE;
2973 a++; 2984 } else if (state->completed) {
2974 if (state->tiles[i] & 0xF) 2985 p += sprintf(p, "COMPLETED! ");
2975 n2++; 2986 complete = TRUE;
2976 } 2987 }
2977 2988
2978 sprintf(statusbuf, "%sActive: %d/%d", 2989 /*
2979 (state->used_solve ? "Auto-solved. " : 2990 * Omit the 'Active: n/N' counter completely if the source
2980 state->completed ? "COMPLETED! " : ""), a, n2); 2991 * tile is a completely empty one, because then the active
2992 * count can't help but read '1'.
2993 */
2994 if (tile(state, ui->cx, ui->cy) & 0xF) {
2995 n = state->width * state->height;
2996 for (i = a = n2 = 0; i < n; i++) {
2997 if (active[i])
2998 a++;
2999 if (state->tiles[i] & 0xF)
3000 n2++;
3001 }
3002
3003 /*
3004 * Also, if we're displaying a completion indicator and
3005 * the game is still in its completed state (i.e. every
3006 * tile is active), we might as well omit this too.
3007 */
3008 if (!complete || a < n2)
3009 p += sprintf(p, "Active: %d/%d", a, n2);
3010 }
2981 3011
2982 status_bar(dr, statusbuf); 3012 status_bar(dr, statusbuf);
2983 } 3013 }
@@ -3174,7 +3204,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
3174const struct game thegame = { 3204const struct game thegame = {
3175 "Net", "games.net", "net", 3205 "Net", "games.net", "net",
3176 default_params, 3206 default_params,
3177 game_fetch_preset, 3207 game_fetch_preset, NULL,
3178 decode_params, 3208 decode_params,
3179 encode_params, 3209 encode_params,
3180 free_params, 3210 free_params,
diff --git a/apps/plugins/puzzles/src/net.html b/apps/plugins/puzzles/src/net.html
new file mode 100644
index 0000000000..30fe6a1bb5
--- /dev/null
+++ b/apps/plugins/puzzles/src/net.html
@@ -0,0 +1,108 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Net</title>
7<link rel="previous" href="common.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="cube.html">
12</head>
13<body>
14<p><a href="common.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="cube.html">Next</a></p>
15<h1><a name="C3"></a>Chapter 3: <a name="i0"></a>Net</h1>
16<p>
17(<em>Note:</em> the <a name="i1"></a>Windows version of this game is called <a name="i2"></a><code>NETGAME.EXE</code> to avoid clashing with Windows's own <code>NET.EXE</code>.)
18</p>
19<p>
20I originally saw this in the form of a Flash game called <a name="i3"></a>FreeNet <a href="#p0">[1]</a>, written by Pavils Jurjans; there are several other implementations under the name <a name="i4"></a>NetWalk. The computer prepares a network by connecting up the centres of squares in a grid, and then shuffles the network by rotating every tile randomly. Your job is to rotate it all back into place. The successful solution will be an entirely connected network, with no closed loops. As a visual aid, all tiles which are connected to the one in the middle are highlighted.
21</p>
22<p><a name="p0"></a>
23[1] <a href="http://www.jurjans.lv/stuff/net/FreeNet.htm"><code>http://www.jurjans.lv/stuff/net/FreeNet.htm</code></a>
24</p>
25<h2><a name="S3.1"></a>3.1 <a name="i5"></a>Net controls</h2>
26<p>
27This game can be played with either the keyboard or the mouse. The controls are:
28</p>
29<dl><dt>
30<em>Select tile</em>: mouse pointer, arrow keys
31</dt>
32<dt>
33<em>Rotate tile anticlockwise</em>: left mouse button, &#8216;A&#8217; key
34</dt>
35<dt>
36<em>Rotate tile clockwise</em>: right mouse button, &#8216;D&#8217; key
37</dt>
38<dt>
39<em>Rotate tile by 180 degrees</em>: &#8216;F&#8217; key
40</dt>
41<dt>
42<em>Lock (or unlock) tile</em>: middle mouse button, shift-click, &#8216;S&#8217; key
43</dt>
44<dd>
45You can lock a tile once you're sure of its orientation. You can also unlock it again, but while it's locked you can't accidentally turn it.
46</dd>
47</dl>
48<p>
49The following controls are not necessary to complete the game, but may be useful:
50</p>
51<dl><dt>
52<em>Shift grid</em>: Shift + arrow keys
53</dt>
54<dd>
55On grids that wrap, you can move the origin of the grid, so that tiles that were on opposite sides of the grid can be seen together.
56</dd>
57<dt>
58<em>Move centre</em>: Ctrl + arrow keys
59</dt>
60<dd>
61You can change which tile is used as the source of highlighting. (It doesn't ultimately matter which tile this is, as every tile will be connected to every other tile in a correct solution, but it may be helpful in the intermediate stages of solving the puzzle.)
62</dd>
63<dt>
64<em>Jumble tiles</em>: &#8216;J&#8217; key
65</dt>
66<dd>
67This key turns all tiles that are not locked to random orientations.
68</dd>
69</dl>
70<p>
71(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
72</p>
73<h2><a name="S3.2"></a>3.2 <a name="i6"></a>Net parameters</h2>
74<p>
75These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
76</p>
77<dl><dt>
78<em>Width</em>, <em>Height</em>
79</dt>
80<dd>
81Size of grid in tiles.
82</dd>
83<dt>
84<em>Walls wrap around</em>
85</dt>
86<dd>
87If checked, flow can pass from the left edge to the right edge, and from top to bottom, and vice versa.
88</dd>
89<dt>
90<em>Barrier probability</em>
91</dt>
92<dd>
93A number between 0.0 and 1.0 controlling whether an immovable barrier is placed between two tiles to prevent flow between them (a higher number gives more barriers). Since barriers are immovable, they act as constraints on the solution (i.e., hints).
94<p>
95The grid generation in Net has been carefully arranged so that the barriers are independent of the rest of the grid. This means that if you note down the random seed used to generate the current puzzle (see <a href="common.html#S2.2">section 2.2</a>), change the <em>Barrier probability</em> parameter, and then re-enter the same random seed, you should see exactly the same starting grid, with the only change being the number of barriers. So if you're stuck on a particular grid and need a hint, you could start up another instance of Net, set up the same parameters but a higher barrier probability, and enter the game seed from the original Net window.
96</p>
97
98</dd>
99<dt>
100<em>Ensure unique solution</em>
101</dt>
102<dd>
103Normally, Net will make sure that the puzzles it presents have only one solution. Puzzles with ambiguous sections can be more difficult and more subtle, so if you like you can turn off this feature and risk having ambiguous puzzles. (Also, finding <em>all</em> the possible solutions can be an additional challenge for an advanced player.)
104</dd>
105</dl>
106
107<hr><address></address></body>
108</html>
diff --git a/apps/plugins/puzzles/netslide.R b/apps/plugins/puzzles/src/netslide.R
index ecfe7c3df8..ecfe7c3df8 100644
--- a/apps/plugins/puzzles/netslide.R
+++ b/apps/plugins/puzzles/src/netslide.R
diff --git a/apps/plugins/puzzles/netslide.c b/apps/plugins/puzzles/src/netslide.c
index e299b96eb3..c56e1abd6a 100644
--- a/apps/plugins/puzzles/netslide.c
+++ b/apps/plugins/puzzles/src/netslide.c
@@ -6,7 +6,7 @@
6#include <stdio.h> 6#include <stdio.h>
7#include <stdlib.h> 7#include <stdlib.h>
8#include <string.h> 8#include <string.h>
9#include "rbassert.h" 9#include <assert.h>
10#include <ctype.h> 10#include <ctype.h>
11#include <math.h> 11#include <math.h>
12 12
@@ -1855,7 +1855,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
1855const struct game thegame = { 1855const struct game thegame = {
1856 "Netslide", "games.netslide", "netslide", 1856 "Netslide", "games.netslide", "netslide",
1857 default_params, 1857 default_params,
1858 game_fetch_preset, 1858 game_fetch_preset, NULL,
1859 decode_params, 1859 decode_params,
1860 encode_params, 1860 encode_params,
1861 free_params, 1861 free_params,
diff --git a/apps/plugins/puzzles/src/netslide.html b/apps/plugins/puzzles/src/netslide.html
new file mode 100644
index 0000000000..b63223745f
--- /dev/null
+++ b/apps/plugins/puzzles/src/netslide.html
@@ -0,0 +1,30 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Netslide</title>
7<link rel="previous" href="rect.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="pattern.html">
12</head>
13<body>
14<p><a href="rect.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="pattern.html">Next</a></p>
15<h1><a name="C9"></a>Chapter 9: <a name="i0"></a>Netslide</h1>
16<p>
17This game combines the grid generation of Net (see <a href="net.html#C3">chapter 3</a>) with the movement of Sixteen (see <a href="sixteen.html#C6">chapter 6</a>): you have a Net grid, but instead of rotating tiles back into place you have to slide them into place by moving a whole row at a time.
18</p>
19<p>
20As in Sixteen, <a name="i1"></a>control is with the mouse or cursor keys. See <a href="sixteen.html#S6.1">section 6.1</a>.
21</p>
22<p>
23<a name="i2"></a>The available game parameters have similar meanings to those in Net (see <a href="net.html#S3.2">section 3.2</a>) and Sixteen (see <a href="sixteen.html#S6.2">section 6.2</a>).
24</p>
25<p>
26Netslide was contributed to this collection by Richard Boulton.
27</p>
28
29<hr><address></address></body>
30</html>
diff --git a/apps/plugins/puzzles/no-icon.c b/apps/plugins/puzzles/src/no-icon.c
index 114b2c57c7..114b2c57c7 100644
--- a/apps/plugins/puzzles/no-icon.c
+++ b/apps/plugins/puzzles/src/no-icon.c
diff --git a/apps/plugins/puzzles/noicon.rc b/apps/plugins/puzzles/src/noicon.rc
index 1de605d605..1de605d605 100644
--- a/apps/plugins/puzzles/noicon.rc
+++ b/apps/plugins/puzzles/src/noicon.rc
diff --git a/apps/plugins/puzzles/nullfe.c b/apps/plugins/puzzles/src/nullfe.c
index 4c9975b90e..ad381a135b 100644
--- a/apps/plugins/puzzles/nullfe.c
+++ b/apps/plugins/puzzles/src/nullfe.c
@@ -43,6 +43,11 @@ void print_line_width(drawing *dr, int width) {}
43void print_line_dotted(drawing *dr, int dotted) {} 43void print_line_dotted(drawing *dr, int dotted) {}
44void midend_supersede_game_desc(midend *me, char *desc, char *privdesc) {} 44void midend_supersede_game_desc(midend *me, char *desc, char *privdesc) {}
45void status_bar(drawing *dr, char *text) {} 45void status_bar(drawing *dr, char *text) {}
46struct preset_menu *preset_menu_new(void) {return NULL;}
47struct preset_menu *preset_menu_add_submenu(struct preset_menu *parent,
48 char *title) {return NULL;}
49void preset_menu_add_preset(struct preset_menu *parent,
50 char *title, game_params *params) {}
46 51
47void fatal(char *fmt, ...) 52void fatal(char *fmt, ...)
48{ 53{
diff --git a/apps/plugins/puzzles/nullgame.R b/apps/plugins/puzzles/src/nullgame.R
index 41bdb85d57..41bdb85d57 100644
--- a/apps/plugins/puzzles/nullgame.R
+++ b/apps/plugins/puzzles/src/nullgame.R
diff --git a/apps/plugins/puzzles/nullgame.c b/apps/plugins/puzzles/src/nullgame.c
index 6e14c3237c..183b1e39c2 100644
--- a/apps/plugins/puzzles/nullgame.c
+++ b/apps/plugins/puzzles/src/nullgame.c
@@ -14,7 +14,7 @@
14#include <stdio.h> 14#include <stdio.h>
15#include <stdlib.h> 15#include <stdlib.h>
16#include <string.h> 16#include <string.h>
17#include "rbassert.h" 17#include <assert.h>
18#include <ctype.h> 18#include <ctype.h>
19#include <math.h> 19#include <math.h>
20 20
@@ -267,7 +267,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
267const struct game thegame = { 267const struct game thegame = {
268 "Null Game", NULL, NULL, 268 "Null Game", NULL, NULL,
269 default_params, 269 default_params,
270 game_fetch_preset, 270 game_fetch_preset, NULL,
271 decode_params, 271 decode_params,
272 encode_params, 272 encode_params,
273 free_params, 273 free_params,
diff --git a/apps/plugins/puzzles/obfusc.c b/apps/plugins/puzzles/src/obfusc.c
index e95fa3f397..dc0656c20e 100644
--- a/apps/plugins/puzzles/obfusc.c
+++ b/apps/plugins/puzzles/src/obfusc.c
@@ -63,6 +63,8 @@ int main(int argc, char **argv)
63 outputmode = HEX; 63 outputmode = HEX;
64 break; 64 break;
65 default: 65 default:
66 fprintf(stderr, "obfusc: unrecognised option '-%c'\n",
67 *p);
66 return 1; 68 return 1;
67 } 69 }
68 p++; 70 p++;
@@ -71,12 +73,14 @@ int main(int argc, char **argv)
71 if (!inhex) { 73 if (!inhex) {
72 inhex = p; 74 inhex = p;
73 } else { 75 } else {
76 fprintf(stderr, "obfusc: expected at most one argument\n");
74 return 1; 77 return 1;
75 } 78 }
76 } 79 }
77 } 80 }
78 81
79 if (decode < 0) { 82 if (decode < 0) {
83 fprintf(stderr, "usage: obfusc < -e | -d > [ -b | -h ] [hex data]\n");
80 return 0; 84 return 0;
81 } 85 }
82 86
diff --git a/apps/plugins/puzzles/osx-help.but b/apps/plugins/puzzles/src/osx-help.but
index fa45996aee..fa45996aee 100644
--- a/apps/plugins/puzzles/osx-help.but
+++ b/apps/plugins/puzzles/src/osx-help.but
diff --git a/apps/plugins/puzzles/osx-info.plist b/apps/plugins/puzzles/src/osx-info.plist
index 9f4aef8e53..9f4aef8e53 100644
--- a/apps/plugins/puzzles/osx-info.plist
+++ b/apps/plugins/puzzles/src/osx-info.plist
diff --git a/apps/plugins/puzzles/osx.icns b/apps/plugins/puzzles/src/osx.icns
index b4346a0da1..b4346a0da1 100644
--- a/apps/plugins/puzzles/osx.icns
+++ b/apps/plugins/puzzles/src/osx.icns
Binary files differ
diff --git a/apps/plugins/puzzles/osx.m b/apps/plugins/puzzles/src/osx.m
index 4740124175..9d74da1574 100644
--- a/apps/plugins/puzzles/osx.m
+++ b/apps/plugins/puzzles/src/osx.m
@@ -426,6 +426,9 @@ struct frontend {
426 NSView **cfg_controls; 426 NSView **cfg_controls;
427 int cfg_ncontrols; 427 int cfg_ncontrols;
428 NSTextField *status; 428 NSTextField *status;
429 struct preset_menu *preset_menu;
430 NSMenuItem **preset_menu_items;
431 int n_preset_menu_items;
429} 432}
430- (id)initWithGame:(const game *)g; 433- (id)initWithGame:(const game *)g;
431- (void)dealloc; 434- (void)dealloc;
@@ -540,6 +543,8 @@ struct frontend {
540 int w, h; 543 int w, h;
541 544
542 ourgame = g; 545 ourgame = g;
546 preset_menu = NULL;
547 preset_menu_items = NULL;
543 548
544 fe.window = self; 549 fe.window = self;
545 550
@@ -618,6 +623,7 @@ struct frontend {
618 [fe.colours[i] release]; 623 [fe.colours[i] release];
619 } 624 }
620 sfree(fe.colours); 625 sfree(fe.colours);
626 sfree(preset_menu_items);
621 midend_free(me); 627 midend_free(me);
622 [super dealloc]; 628 [super dealloc];
623} 629}
@@ -847,54 +853,99 @@ struct frontend {
847 853
848- (void)clearTypeMenu 854- (void)clearTypeMenu
849{ 855{
856 int i;
857
850 while ([typemenu numberOfItems] > 1) 858 while ([typemenu numberOfItems] > 1)
851 [typemenu removeItemAtIndex:0]; 859 [typemenu removeItemAtIndex:0];
852 [[typemenu itemAtIndex:0] setState:NSOffState]; 860 [[typemenu itemAtIndex:0] setState:NSOffState];
861
862 for (i = 0; i < n_preset_menu_items; i++)
863 preset_menu_items[i] = NULL;
853} 864}
854 865
855- (void)updateTypeMenuTick 866- (void)updateTypeMenuTick
856{ 867{
857 int i, total, n; 868 int i, n;
858 869
859 total = [typemenu numberOfItems];
860 n = midend_which_preset(me); 870 n = midend_which_preset(me);
861 if (n < 0) 871
862 n = total - 1; /* that's always where "Custom" lives */ 872 for (i = 0; i < n_preset_menu_items; i++)
863 for (i = 0; i < total; i++) 873 if (preset_menu_items[i])
864 [[typemenu itemAtIndex:i] setState:(i == n ? NSOnState : NSOffState)]; 874 [preset_menu_items[i] setState:(i == n ? NSOnState : NSOffState)];
875
876 /*
877 * The Custom menu item is always right at the bottom of the
878 * Type menu.
879 */
880 [[typemenu itemAtIndex:[typemenu numberOfItems]-1]
881 setState:(n < 0 ? NSOnState : NSOffState)];
865} 882}
866 883
867- (void)becomeKeyWindow 884- (void)populateTypeMenu:(NSMenu *)nsmenu from:(struct preset_menu *)menu
868{ 885{
869 int n; 886 int i;
887
888 /*
889 * We process the entries in reverse order so that (in the
890 * top-level Type menu at least) we don't disturb the 'Custom'
891 * item which remains fixed even when we change back and forth
892 * between puzzle type windows.
893 */
894 for (i = menu->n_entries; i-- > 0 ;) {
895 struct preset_menu_entry *entry = &menu->entries[i];
896 NSMenuItem *item;
897
898 if (entry->params) {
899 DataMenuItem *ditem;
900 ditem = [[[DataMenuItem alloc]
901 initWithTitle:[NSString stringWithUTF8String:
902 entry->title]
903 action:NULL keyEquivalent:@""]
904 autorelease];
905
906 [ditem setTarget:self];
907 [ditem setAction:@selector(presetGame:)];
908 [ditem setPayload:entry->params];
909
910 preset_menu_items[entry->id] = ditem;
911
912 item = ditem;
913 } else {
914 NSMenu *nssubmenu;
915
916 item = [[[NSMenuItem alloc]
917 initWithTitle:[NSString stringWithUTF8String:
918 entry->title]
919 action:NULL keyEquivalent:@""]
920 autorelease];
921 nssubmenu = newmenu(entry->title);
922 [item setSubmenu:nssubmenu];
923
924 [self populateTypeMenu:nssubmenu from:entry->submenu];
925 }
926
927 [item setEnabled:YES];
928 [nsmenu insertItem:item atIndex:0];
929 }
930}
870 931
932- (void)becomeKeyWindow
933{
871 [self clearTypeMenu]; 934 [self clearTypeMenu];
872 935
873 [super becomeKeyWindow]; 936 [super becomeKeyWindow];
874 937
875 n = midend_num_presets(me); 938 if (!preset_menu) {
939 int i;
940 preset_menu = midend_get_presets(me, &n_preset_menu_items);
941 preset_menu_items = snewn(n_preset_menu_items, NSMenuItem *);
942 for (i = 0; i < n_preset_menu_items; i++)
943 preset_menu_items[i] = NULL;
944 }
876 945
877 if (n > 0) { 946 if (preset_menu->n_entries > 0) {
878 [typemenu insertItem:[NSMenuItem separatorItem] atIndex:0]; 947 [typemenu insertItem:[NSMenuItem separatorItem] atIndex:0];
879 while (n--) { 948 [self populateTypeMenu:typemenu from:preset_menu];
880 char *name;
881 game_params *params;
882 DataMenuItem *item;
883
884 midend_fetch_preset(me, n, &name, &params);
885
886 item = [[[DataMenuItem alloc]
887 initWithTitle:[NSString stringWithUTF8String:name]
888 action:NULL keyEquivalent:@""]
889 autorelease];
890
891 [item setEnabled:YES];
892 [item setTarget:self];
893 [item setAction:@selector(presetGame:)];
894 [item setPayload:params];
895
896 [typemenu insertItem:item atIndex:0];
897 }
898 } 949 }
899 950
900 [self updateTypeMenuTick]; 951 [self updateTypeMenuTick];
diff --git a/apps/plugins/puzzles/padtoolbar.bmp b/apps/plugins/puzzles/src/padtoolbar.bmp
index 46c3e0dcae..46c3e0dcae 100644
--- a/apps/plugins/puzzles/padtoolbar.bmp
+++ b/apps/plugins/puzzles/src/padtoolbar.bmp
Binary files differ
diff --git a/apps/plugins/puzzles/palisade.R b/apps/plugins/puzzles/src/palisade.R
index de4bd83126..de4bd83126 100644
--- a/apps/plugins/puzzles/palisade.R
+++ b/apps/plugins/puzzles/src/palisade.R
diff --git a/apps/plugins/puzzles/palisade.c b/apps/plugins/puzzles/src/palisade.c
index c5f1b62022..b9d578d0f7 100644
--- a/apps/plugins/puzzles/palisade.c
+++ b/apps/plugins/puzzles/src/palisade.c
@@ -15,7 +15,7 @@
15 * - white-blink the edges (instead), a la loopy? 15 * - white-blink the edges (instead), a la loopy?
16 */ 16 */
17 17
18#include "rbassert.h" 18#include <assert.h>
19#include <ctype.h> 19#include <ctype.h>
20#include <stdarg.h> 20#include <stdarg.h>
21#include <stdio.h> 21#include <stdio.h>
@@ -1347,7 +1347,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
1347const struct game thegame = { 1347const struct game thegame = {
1348 "Palisade", "games.palisade", "palisade", 1348 "Palisade", "games.palisade", "palisade",
1349 default_params, 1349 default_params,
1350 game_fetch_preset, 1350 game_fetch_preset, NULL,
1351 decode_params, 1351 decode_params,
1352 encode_params, 1352 encode_params,
1353 free_params, 1353 free_params,
diff --git a/apps/plugins/puzzles/src/palisade.html b/apps/plugins/puzzles/src/palisade.html
new file mode 100644
index 0000000000..c0f19c5f5c
--- /dev/null
+++ b/apps/plugins/puzzles/src/palisade.html
@@ -0,0 +1,54 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Palisade</title>
7<link rel="previous" href="tracks.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="licence.html">
12</head>
13<body>
14<p><a href="tracks.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="licence.html">Next</a></p>
15<h1><a name="C41"></a>Chapter 41: <a name="i0"></a>Palisade</h1>
16<p>
17You're given a grid of squares, some of which contain numbers. Your goal is to subdivide the grid into contiguous regions, all of the same (given) size, such that each square containing a number is adjacent to exactly that many edges (including those between the inside and the outside of the grid).
18</p>
19<p>
20Credit for this puzzle goes to <a name="i1"></a>Nikoli, who call it &#8216;Five Cells&#8217;. <a href="#p0">[22]</a>.
21</p>
22<p>
23Palisade was contributed to this collection by Jonas K&#246;lker.
24</p>
25<p><a name="p0"></a>
26[22] <a href="http://nikoli.co.jp/en/puzzles/five_cells.html"><code>http://nikoli.co.jp/en/puzzles/five_cells.html</code></a>
27</p>
28<h2><a name="S41.1"></a>41.1 <a name="i2"></a>Palisade controls</h2>
29<p>
30Left-click to place an edge. Right-click to indicate &#8216;no edge&#8217;. Alternatively, the arrow keys will move a keyboard cursor. Holding Control while pressing an arrow key will place an edge. Press Shift-arrowkey to switch off an edge. Repeat an action to perform its inverse.
31</p>
32<p>
33(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
34</p>
35<h2><a name="S41.2"></a>41.2 <a name="i3"></a>Palisade parameters</h2>
36<p>
37These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
38</p>
39<dl><dt>
40<em>Width</em>, <em>Height</em>
41</dt>
42<dd>
43Size of grid in squares.
44</dd>
45<dt>
46<em>Region size</em>
47</dt>
48<dd>
49The size of the regions into which the grid must be subdivided.
50</dd>
51</dl>
52
53<hr><address></address></body>
54</html>
diff --git a/apps/plugins/puzzles/pattern.R b/apps/plugins/puzzles/src/pattern.R
index d6695715f9..d6695715f9 100644
--- a/apps/plugins/puzzles/pattern.R
+++ b/apps/plugins/puzzles/src/pattern.R
diff --git a/apps/plugins/puzzles/pattern.c b/apps/plugins/puzzles/src/pattern.c
index c741a2e3a4..9a74e55318 100644
--- a/apps/plugins/puzzles/pattern.c
+++ b/apps/plugins/puzzles/src/pattern.c
@@ -5,7 +5,7 @@
5#include <stdio.h> 5#include <stdio.h>
6#include <stdlib.h> 6#include <stdlib.h>
7#include <string.h> 7#include <string.h>
8#include "rbassert.h" 8#include <assert.h>
9#include <ctype.h> 9#include <ctype.h>
10#include <math.h> 10#include <math.h>
11 11
@@ -1971,7 +1971,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
1971const struct game thegame = { 1971const struct game thegame = {
1972 "Pattern", "games.pattern", "pattern", 1972 "Pattern", "games.pattern", "pattern",
1973 default_params, 1973 default_params,
1974 game_fetch_preset, 1974 game_fetch_preset, NULL,
1975 decode_params, 1975 decode_params,
1976 encode_params, 1976 encode_params,
1977 free_params, 1977 free_params,
diff --git a/apps/plugins/puzzles/src/pattern.html b/apps/plugins/puzzles/src/pattern.html
new file mode 100644
index 0000000000..35f570ec85
--- /dev/null
+++ b/apps/plugins/puzzles/src/pattern.html
@@ -0,0 +1,50 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Pattern</title>
7<link rel="previous" href="netslide.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="solo.html">
12</head>
13<body>
14<p><a href="netslide.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="solo.html">Next</a></p>
15<h1><a name="C10"></a>Chapter 10: <a name="i0"></a>Pattern</h1>
16<p>
17You have a grid of squares, which must all be filled in either black or white. Beside each row of the grid are listed the lengths of the runs of black squares on that row; above each column are listed the lengths of the runs of black squares in that column. Your aim is to fill in the entire grid black or white.
18</p>
19<p>
20I first saw this puzzle form around 1995, under the name &#8216;<a name="i1"></a>nonograms&#8217;. I've seen it in various places since then, under different names.
21</p>
22<p>
23Normally, puzzles of this type turn out to be a meaningful picture of something once you've solved them. However, since this version generates the puzzles automatically, they will just look like random groupings of squares. (One user has suggested that this is actually a <em>good</em> thing, since it prevents you from guessing the colour of squares based on the picture, and forces you to use logic instead.) The advantage, though, is that you never run out of them.
24</p>
25<h2><a name="S10.1"></a>10.1 <a name="i2"></a>Pattern controls</h2>
26<p>
27This game is played with the mouse.
28</p>
29<p>
30Left-click in a square to colour it black. Right-click to colour it white. If you make a mistake, you can middle-click, or hold down Shift while clicking with any button, to colour the square in the default grey (meaning &#8216;undecided&#8217;) again.
31</p>
32<p>
33You can click and drag with the left or right mouse button to colour a vertical or horizontal line of squares black or white at a time (respectively). If you click and drag with the middle button, or with Shift held down, you can colour a whole rectangle of squares grey.
34</p>
35<p>
36You can also move around the grid with the cursor keys. Pressing the return key will cycle the current cell through empty, then black, then white, then empty, and the space bar does the same cycle in reverse.
37</p>
38<p>
39Moving the cursor while holding Control will colour the moved-over squares black. Holding Shift will colour the moved-over squares white, and holding both will colour them grey.
40</p>
41<p>
42(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
43</p>
44<h2><a name="S10.2"></a>10.2 <a name="i3"></a>Pattern parameters</h2>
45<p>
46The only options available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu are <em>Width</em> and <em>Height</em>, which are self-explanatory.
47</p>
48
49<hr><address></address></body>
50</html>
diff --git a/apps/plugins/puzzles/pearl.R b/apps/plugins/puzzles/src/pearl.R
index 79bc7325c7..79bc7325c7 100644
--- a/apps/plugins/puzzles/pearl.R
+++ b/apps/plugins/puzzles/src/pearl.R
diff --git a/apps/plugins/puzzles/pearl.c b/apps/plugins/puzzles/src/pearl.c
index 1f41f65af2..c6c305f3f2 100644
--- a/apps/plugins/puzzles/pearl.c
+++ b/apps/plugins/puzzles/src/pearl.c
@@ -33,7 +33,7 @@
33#include <stdio.h> 33#include <stdio.h>
34#include <stdlib.h> 34#include <stdlib.h>
35#include <string.h> 35#include <string.h>
36#include "rbassert.h" 36#include <assert.h>
37#include <ctype.h> 37#include <ctype.h>
38#include <math.h> 38#include <math.h>
39 39
@@ -2608,7 +2608,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
2608const struct game thegame = { 2608const struct game thegame = {
2609 "Pearl", "games.pearl", "pearl", 2609 "Pearl", "games.pearl", "pearl",
2610 default_params, 2610 default_params,
2611 game_fetch_preset, 2611 game_fetch_preset, NULL,
2612 decode_params, 2612 decode_params,
2613 encode_params, 2613 encode_params,
2614 free_params, 2614 free_params,
diff --git a/apps/plugins/puzzles/src/pearl.html b/apps/plugins/puzzles/src/pearl.html
new file mode 100644
index 0000000000..c366ed3a4c
--- /dev/null
+++ b/apps/plugins/puzzles/src/pearl.html
@@ -0,0 +1,65 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Pearl</title>
7<link rel="previous" href="range.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="undead.html">
12</head>
13<body>
14<p><a href="range.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="undead.html">Next</a></p>
15<h1><a name="C36"></a>Chapter 36: <a name="i0"></a>Pearl</h1>
16<p>
17You have a grid of squares. Your job is to draw lines between the centres of horizontally or vertically adjacent squares, so that the lines form a single closed loop. In the resulting grid, some of the squares that the loop passes through will contain corners, and some will be straight horizontal or vertical lines. (And some squares can be completely empty &#8211; the loop doesn't have to pass through every square.)
18</p>
19<p>
20Some of the squares contain black and white circles, which are clues that the loop must satisfy.
21</p>
22<p>
23A black circle in a square indicates that that square is a corner, but neither of the squares adjacent to it in the loop is also a corner.
24</p>
25<p>
26A white circle indicates that the square is a straight edge, but <em>at least one</em> of the squares adjacent to it in the loop is a corner.
27</p>
28<p>
29(In both cases, the clue only constrains the two squares adjacent <em>in the loop</em>, that is, the squares that the loop passes into after leaving the clue square. The squares that are only adjacent <em>in the grid</em> are not constrained.)
30</p>
31<p>
32Credit for this puzzle goes to <a name="i1"></a>Nikoli, who call it &#8216;Masyu&#8217;. <a href="#p0">[19]</a>
33</p>
34<p>
35Thanks to James Harvey for assistance with the implementation.
36</p>
37<p><a name="p0"></a>
38[19] <a href="http://www.nikoli.co.jp/en/puzzles/masyu.html"><code>http://www.nikoli.co.jp/en/puzzles/masyu.html</code></a> (beware of Flash)
39</p>
40<h2><a name="S36.1"></a>36.1 <a name="i2"></a>Pearl controls</h2>
41<p>
42Click with the left button on a grid edge to draw a segment of the loop through that edge, or to remove a segment once it is drawn.
43</p>
44<p>
45Drag with the left button through a series of squares to draw more than one segment of the loop in one go. Alternatively, drag over an existing part of the loop to undraw it, or to undraw part of it and then go in a different direction.
46</p>
47<p>
48Click with the right button on a grid edge to mark it with a cross, indicating that you are sure the loop does not go through that edge. (For instance, if you have decided which of the squares adjacent to a white clue has to be a corner, but don't yet know which way the corner turns, you might mark the one way it <em>can't</em> go with a cross.)
49</p>
50<p>
51Alternatively, use the cursor keys to move the cursor. Use the Enter key to begin and end keyboard &#8216;drag&#8217; operations. Use the Space, Escape or Backspace keys to cancel the drag. Or, hold Control while dragging with the cursor keys to toggle segments as you move between squares.
52</p>
53<p>
54Pressing Control-Shift-arrowkey or Shift-arrowkey simulates a left or right click, respectively, on the edge in the direction of the key.
55</p>
56<p>
57(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
58</p>
59<h2><a name="S36.2"></a>36.2 <a name="i3"></a>Pearl parameters</h2>
60<p>
61These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
62</p>
63
64<hr><address></address></body>
65</html>
diff --git a/apps/plugins/puzzles/pegs.R b/apps/plugins/puzzles/src/pegs.R
index 1e79e99ca0..1e79e99ca0 100644
--- a/apps/plugins/puzzles/pegs.R
+++ b/apps/plugins/puzzles/src/pegs.R
diff --git a/apps/plugins/puzzles/pegs.c b/apps/plugins/puzzles/src/pegs.c
index f02e25cafa..8286851954 100644
--- a/apps/plugins/puzzles/pegs.c
+++ b/apps/plugins/puzzles/src/pegs.c
@@ -5,7 +5,7 @@
5#include <stdio.h> 5#include <stdio.h>
6#include <stdlib.h> 6#include <stdlib.h>
7#include <string.h> 7#include <string.h>
8#include "rbassert.h" 8#include <assert.h>
9#include <ctype.h> 9#include <ctype.h>
10#include <math.h> 10#include <math.h>
11 11
@@ -1302,7 +1302,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
1302const struct game thegame = { 1302const struct game thegame = {
1303 "Pegs", "games.pegs", "pegs", 1303 "Pegs", "games.pegs", "pegs",
1304 default_params, 1304 default_params,
1305 game_fetch_preset, 1305 game_fetch_preset, NULL,
1306 decode_params, 1306 decode_params,
1307 encode_params, 1307 encode_params,
1308 free_params, 1308 free_params,
diff --git a/apps/plugins/puzzles/src/pegs.html b/apps/plugins/puzzles/src/pegs.html
new file mode 100644
index 0000000000..cfe2e76eeb
--- /dev/null
+++ b/apps/plugins/puzzles/src/pegs.html
@@ -0,0 +1,54 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Pegs</title>
7<link rel="previous" href="guess.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="dominosa.html">
12</head>
13<body>
14<p><a href="guess.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="dominosa.html">Next</a></p>
15<h1><a name="C16"></a>Chapter 16: <a name="i0"></a>Pegs</h1>
16<p>
17A number of pegs are placed in holes on a board. You can remove a peg by jumping an adjacent peg over it (horizontally or vertically) to a vacant hole on the other side. Your aim is to remove all but one of the pegs initially present.
18</p>
19<p>
20This game, best known as <a name="i1"></a>&#8216;Peg Solitaire&#8217;, is possibly one of the oldest puzzle games still commonly known.
21</p>
22<h2><a name="S16.1"></a>16.1 <a name="i2"></a>Pegs controls</h2>
23<p>
24To move a peg, drag it with the mouse from its current position to its final position. If the final position is exactly two holes away from the initial position, is currently unoccupied by a peg, and there is a peg in the intervening square, the move will be permitted and the intervening peg will be removed.
25</p>
26<p>
27Vacant spaces which you can move a peg into are marked with holes. A space with no peg and no hole is not available for moving at all: it is an obstacle which you must work around.
28</p>
29<p>
30You can also use the cursor keys to move a position indicator around the board. Pressing the return key while over a peg, followed by a cursor key, will jump the peg in that direction (if that is a legal move).
31</p>
32<p>
33(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
34</p>
35<h2><a name="S16.2"></a>16.2 <a name="i3"></a>Pegs parameters</h2>
36<p>
37These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
38</p>
39<dl><dt>
40<em>Width</em>, <em>Height</em>
41</dt>
42<dd>
43Size of grid in holes.
44</dd>
45<dt>
46<em>Board type</em>
47</dt>
48<dd>
49Controls whether you are given a board of a standard shape or a randomly generated shape. The two standard shapes currently supported are &#8216;Cross&#8217; and &#8216;Octagon&#8217; (also commonly known as the English and European traditional board layouts respectively). Selecting &#8216;Random&#8217; will give you a different board shape every time (but always one that is known to have a solution).
50</dd>
51</dl>
52
53<hr><address></address></body>
54</html>
diff --git a/apps/plugins/puzzles/penrose.c b/apps/plugins/puzzles/src/penrose.c
index 839b50a853..ccde30d8b4 100644
--- a/apps/plugins/puzzles/penrose.c
+++ b/apps/plugins/puzzles/src/penrose.c
@@ -7,7 +7,7 @@
7 * http://tartarus.org/simon/20110412-penrose/penrose.xhtml 7 * http://tartarus.org/simon/20110412-penrose/penrose.xhtml
8 */ 8 */
9 9
10#include "rbassert.h" 10#include <assert.h>
11#include <string.h> 11#include <string.h>
12#include <math.h> 12#include <math.h>
13#include <stdio.h> 13#include <stdio.h>
diff --git a/apps/plugins/puzzles/penrose.h b/apps/plugins/puzzles/src/penrose.h
index ba5ae16f2c..ba5ae16f2c 100644
--- a/apps/plugins/puzzles/penrose.h
+++ b/apps/plugins/puzzles/src/penrose.h
diff --git a/apps/plugins/puzzles/printing.c b/apps/plugins/puzzles/src/printing.c
index e921a4d545..e921a4d545 100644
--- a/apps/plugins/puzzles/printing.c
+++ b/apps/plugins/puzzles/src/printing.c
diff --git a/apps/plugins/puzzles/ps.c b/apps/plugins/puzzles/src/ps.c
index 67d76b4daa..2394cc5e8e 100644
--- a/apps/plugins/puzzles/ps.c
+++ b/apps/plugins/puzzles/src/ps.c
@@ -5,7 +5,7 @@
5#include <stdio.h> 5#include <stdio.h>
6#include <stdarg.h> 6#include <stdarg.h>
7#include <string.h> 7#include <string.h>
8#include "rbassert.h" 8#include <assert.h>
9 9
10#include "puzzles.h" 10#include "puzzles.h"
11 11
diff --git a/apps/plugins/puzzles/puzzles.but b/apps/plugins/puzzles/src/puzzles.but
index 2508fe3337..2508fe3337 100644
--- a/apps/plugins/puzzles/puzzles.but
+++ b/apps/plugins/puzzles/src/puzzles.but
diff --git a/apps/plugins/puzzles/src/puzzles.cnt b/apps/plugins/puzzles/src/puzzles.cnt
new file mode 100644
index 0000000000..fef32228ea
--- /dev/null
+++ b/apps/plugins/puzzles/src/puzzles.cnt
@@ -0,0 +1,167 @@
1:Title Simon Tatham's Portable Puzzle Collection
21 Contents=Top
31 Chapter 1: Introduction
42 Chapter 1: Introduction=t00000000
51 Chapter 2: Common features
62 Chapter 2: Common features=t00000001
72 Section 2.1: Common actions=t00000002
82 Section 2.2: Specifying games with the game ID=t00000003
92 Section 2.3: The ‘Type’ menu=t00000004
102 Section 2.4: Specifying game parameters on the command line=t00000005
112 Section 2.5: Unix command-line options=t00000006
121 Chapter 3: Net
132 Chapter 3: Net=games.net
142 Section 3.1: Net controls=t00000007
152 Section 3.2: Net parameters=t00000008
161 Chapter 4: Cube
172 Chapter 4: Cube=games.cube
182 Section 4.1: Cube controls=t00000009
192 Section 4.2: Cube parameters=t00000010
201 Chapter 5: Fifteen
212 Chapter 5: Fifteen=games.fifteen
222 Section 5.1: Fifteen controls=t00000011
232 Section 5.2: Fifteen parameters=t00000012
241 Chapter 6: Sixteen
252 Chapter 6: Sixteen=games.sixteen
262 Section 6.1: Sixteen controls=t00000013
272 Section 6.2: Sixteen parameters=t00000014
281 Chapter 7: Twiddle
292 Chapter 7: Twiddle=games.twiddle
302 Section 7.1: Twiddle controls=t00000015
312 Section 7.2: Twiddle parameters=t00000016
321 Chapter 8: Rectangles
332 Chapter 8: Rectangles=games.rectangles
342 Section 8.1: Rectangles controls=t00000017
352 Section 8.2: Rectangles parameters=t00000018
361 Chapter 9: Netslide
372 Chapter 9: Netslide=games.netslide
381 Chapter 10: Pattern
392 Chapter 10: Pattern=games.pattern
402 Section 10.1: Pattern controls=t00000019
412 Section 10.2: Pattern parameters=t00000020
421 Chapter 11: Solo
432 Chapter 11: Solo=games.solo
442 Section 11.1: Solo controls=t00000021
452 Section 11.2: Solo parameters=t00000022
461 Chapter 12: Mines
472 Chapter 12: Mines=games.mines
482 Section 12.1: Mines controls=t00000023
492 Section 12.2: Mines parameters=t00000024
501 Chapter 13: Same Game
512 Chapter 13: Same Game=games.samegame
522 Section 13.1: Same Game controls=t00000025
532 Section 13.2: Same Game parameters=t00000026
541 Chapter 14: Flip
552 Chapter 14: Flip=games.flip
562 Section 14.1: Flip controls=t00000027
572 Section 14.2: Flip parameters=t00000028
581 Chapter 15: Guess
592 Chapter 15: Guess=games.guess
602 Section 15.1: Guess controls=t00000029
612 Section 15.2: Guess parameters=t00000030
621 Chapter 16: Pegs
632 Chapter 16: Pegs=games.pegs
642 Section 16.1: Pegs controls=t00000031
652 Section 16.2: Pegs parameters=t00000032
661 Chapter 17: Dominosa
672 Chapter 17: Dominosa=games.dominosa
682 Section 17.1: Dominosa controls=t00000033
692 Section 17.2: Dominosa parameters=t00000034
701 Chapter 18: Untangle
712 Chapter 18: Untangle=games.untangle
722 Section 18.1: Untangle controls=t00000035
732 Section 18.2: Untangle parameters=t00000036
741 Chapter 19: Black Box
752 Chapter 19: Black Box=games.blackbox
762 Section 19.1: Black Box controls=t00000037
772 Section 19.2: Black Box parameters=t00000038
781 Chapter 20: Slant
792 Chapter 20: Slant=games.slant
802 Section 20.1: Slant controls=t00000039
812 Section 20.2: Slant parameters=t00000040
821 Chapter 21: Light Up
832 Chapter 21: Light Up=games.lightup
842 Section 21.1: Light Up controls=t00000041
852 Section 21.2: Light Up parameters=t00000042
861 Chapter 22: Map
872 Chapter 22: Map=games.map
882 Section 22.1: Map controls=t00000043
892 Section 22.2: Map parameters=t00000044
901 Chapter 23: Loopy
912 Chapter 23: Loopy=games.loopy
922 Section 23.1: Loopy controls=t00000045
932 Section 23.2: Loopy parameters=t00000046
941 Chapter 24: Inertia
952 Chapter 24: Inertia=games.inertia
962 Section 24.1: Inertia controls=t00000047
972 Section 24.2: Inertia parameters=t00000048
981 Chapter 25: Tents
992 Chapter 25: Tents=games.tents
1002 Section 25.1: Tents controls=t00000049
1012 Section 25.2: Tents parameters=t00000050
1021 Chapter 26: Bridges
1032 Chapter 26: Bridges=games.bridges
1042 Section 26.1: Bridges controls=t00000051
1052 Section 26.2: Bridges parameters=t00000052
1061 Chapter 27: Unequal
1072 Chapter 27: Unequal=games.unequal
1082 Section 27.1: Unequal controls=t00000053
1092 Section 27.2: Unequal parameters=t00000054
1101 Chapter 28: Galaxies
1112 Chapter 28: Galaxies=games.galaxies
1122 Section 28.1: Galaxies controls=t00000055
1132 Section 28.2: Galaxies parameters=t00000056
1141 Chapter 29: Filling
1152 Chapter 29: Filling=games.filling
1162 Section 29.1: Filling controls=t00000057
1172 Section 29.2: Filling parameters=t00000058
1181 Chapter 30: Keen
1192 Chapter 30: Keen=games.keen
1202 Section 30.1: Keen controls=t00000059
1212 Section 30.2: Keen parameters=t00000060
1221 Chapter 31: Towers
1232 Chapter 31: Towers=games.towers
1242 Section 31.1: Towers controls=t00000061
1252 Section 31.2: Towers parameters=t00000062
1261 Chapter 32: Singles
1272 Chapter 32: Singles=games.singles
1282 Section 32.1: Singles controls=t00000063
1292 Section 32.2: Singles parameters=t00000064
1301 Chapter 33: Magnets
1312 Chapter 33: Magnets=games.magnets
1322 Section 33.1: Magnets controls=t00000065
1332 Section 33.2: Magnets parameters=t00000066
1341 Chapter 34: Signpost
1352 Chapter 34: Signpost=games.signpost
1362 Section 34.1: Signpost controls=t00000067
1372 Section 34.2: Signpost parameters=t00000068
1381 Chapter 35: Range
1392 Chapter 35: Range=games.range
1402 Section 35.1: Range controls=t00000069
1412 Section 35.2: Range parameters=t00000070
1421 Chapter 36: Pearl
1432 Chapter 36: Pearl=games.pearl
1442 Section 36.1: Pearl controls=t00000071
1452 Section 36.2: Pearl parameters=t00000072
1461 Chapter 37: Undead
1472 Chapter 37: Undead=games.undead
1482 Section 37.1: Undead controls=t00000073
1492 Section 37.2: Undead parameters=t00000074
1501 Chapter 38: Unruly
1512 Chapter 38: Unruly=games.unruly
1522 Section 38.1: Unruly controls=t00000075
1532 Section 38.2: Unruly parameters=t00000076
1541 Chapter 39: Flood
1552 Chapter 39: Flood=games.flood
1562 Section 39.1: Flood controls=t00000077
1572 Section 39.2: Flood parameters=t00000078
1581 Chapter 40: Tracks
1592 Chapter 40: Tracks=games.tracks
1602 Section 40.1: Tracks controls=t00000079
1612 Section 40.2: Tracks parameters=t00000080
1621 Chapter 41: Palisade
1632 Chapter 41: Palisade=games.palisade
1642 Section 41.1: Palisade controls=t00000081
1652 Section 41.2: Palisade parameters=t00000082
1661 Appendix A: Licence
1672 Appendix A: Licence=t00000083
diff --git a/apps/plugins/puzzles/puzzles.h b/apps/plugins/puzzles/src/puzzles.h
index c70b33ccbf..03af2ca186 100644
--- a/apps/plugins/puzzles/puzzles.h
+++ b/apps/plugins/puzzles/src/puzzles.h
@@ -5,16 +5,9 @@
5#ifndef PUZZLES_PUZZLES_H 5#ifndef PUZZLES_PUZZLES_H
6#define PUZZLES_PUZZLES_H 6#define PUZZLES_PUZZLES_H
7 7
8#include "plugin.h" 8#include <stdio.h> /* for FILE */
9#include <tlsf.h> 9#include <stdlib.h> /* for size_t */
10#include "rbcompat.h" 10#include <limits.h> /* for UINT_MAX */
11#include "lib/pluginlib_exit.h"
12
13#ifdef ROCKBOX
14#if LCD_WIDTH < LCD_HEIGHT
15#define PORTRAIT_SCREEN
16#endif
17#endif
18 11
19#ifndef TRUE 12#ifndef TRUE
20#define TRUE 1 13#define TRUE 1
@@ -27,7 +20,6 @@
27 20
28#define lenof(array) ( sizeof(array) / sizeof(*(array)) ) 21#define lenof(array) ( sizeof(array) / sizeof(*(array)) )
29 22
30#undef STR
31#define STR_INT(x) #x 23#define STR_INT(x) #x
32#define STR(x) STR_INT(x) 24#define STR(x) STR_INT(x)
33 25
@@ -162,6 +154,54 @@ struct config_item {
162}; 154};
163 155
164/* 156/*
157 * Structure used to communicate the presets menu from midend to
158 * frontend. In principle, it's also used to pass the same information
159 * from game to midend, though games that don't specify a menu
160 * hierarchy (i.e. most of them) will use the simpler fetch_preset()
161 * function to return an unstructured list.
162 *
163 * A tree of these structures always belongs to the midend, and only
164 * the midend should ever need to free it. The front end should treat
165 * them as read-only.
166 */
167struct preset_menu_entry {
168 char *title;
169 /* Exactly one of the next two fields is NULL, depending on
170 * whether this entry is a submenu title or an actual preset */
171 game_params *params;
172 struct preset_menu *submenu;
173 /* Every preset menu entry has a number allocated by the mid-end,
174 * so that midend_which_preset() can return a value that
175 * identifies an entry anywhere in the menu hierarchy. The values
176 * will be allocated reasonably densely from 1 upwards (so it's
177 * reasonable for the front end to use them as array indices if it
178 * needs to store GUI state per menu entry), but no other
179 * guarantee is given about their ordering.
180 *
181 * Entries containing submenus have ids too - not only the actual
182 * presets are numbered. */
183 int id;
184};
185struct preset_menu {
186 int n_entries; /* number of entries actually in use */
187 int entries_size; /* space currently allocated in this array */
188 struct preset_menu_entry *entries;
189};
190/* For games which do want to directly return a tree of these, here
191 * are convenience routines (in midend.c) for constructing one. These
192 * assume that 'title' and 'encoded_params' are already dynamically
193 * allocated by the caller; the resulting preset_menu tree takes
194 * ownership of them. */
195struct preset_menu *preset_menu_new(void);
196struct preset_menu *preset_menu_add_submenu(struct preset_menu *parent,
197 char *title);
198void preset_menu_add_preset(struct preset_menu *menu,
199 char *title, game_params *params);
200/* Helper routine front ends can use for one of the ways they might
201 * want to organise their preset menu usage */
202game_params *preset_menu_lookup_by_id(struct preset_menu *menu, int id);
203
204/*
165 * Platform routines 205 * Platform routines
166 */ 206 */
167 207
@@ -250,9 +290,7 @@ void midend_redraw(midend *me);
250float *midend_colours(midend *me, int *ncolours); 290float *midend_colours(midend *me, int *ncolours);
251void midend_freeze_timer(midend *me, float tprop); 291void midend_freeze_timer(midend *me, float tprop);
252void midend_timer(midend *me, float tplus); 292void midend_timer(midend *me, float tplus);
253int midend_num_presets(midend *me); 293struct preset_menu *midend_get_presets(midend *me, int *id_limit);
254void midend_fetch_preset(midend *me, int n,
255 char **name, game_params **params);
256int midend_which_preset(midend *me); 294int midend_which_preset(midend *me);
257int midend_wants_statusbar(midend *me); 295int midend_wants_statusbar(midend *me);
258enum { CFG_SETTINGS, CFG_SEED, CFG_DESC, CFG_FRONTEND_SPECIFIC }; 296enum { CFG_SETTINGS, CFG_SEED, CFG_DESC, CFG_FRONTEND_SPECIFIC };
@@ -338,6 +376,11 @@ void pos2c(int w, int h, int pos, int *cx, int *cy);
338void draw_text_outline(drawing *dr, int x, int y, int fonttype, 376void draw_text_outline(drawing *dr, int x, int y, int fonttype,
339 int fontsize, int align, 377 int fontsize, int align,
340 int text_colour, int outline_colour, char *text); 378 int text_colour, int outline_colour, char *text);
379
380/* Copies text left-justified with spaces. Length of string must be
381 * less than buffer size. */
382void copy_left_justified(char *buf, size_t sz, const char *str);
383
341/* 384/*
342 * dsf.c 385 * dsf.c
343 */ 386 */
@@ -451,9 +494,9 @@ void document_print(document *doc, drawing *dr);
451/* 494/*
452 * ps.c 495 * ps.c
453 */ 496 */
454//psdata *ps_init(FILE *outfile, int colour); 497psdata *ps_init(FILE *outfile, int colour);
455//void ps_free(psdata *ps); 498void ps_free(psdata *ps);
456//drawing *ps_drawing_api(psdata *ps); 499drawing *ps_drawing_api(psdata *ps);
457 500
458/* 501/*
459 * combi.c: provides a structure and functions for iterating over 502 * combi.c: provides a structure and functions for iterating over
@@ -522,6 +565,7 @@ struct game {
522 const char *winhelp_topic, *htmlhelp_topic; 565 const char *winhelp_topic, *htmlhelp_topic;
523 game_params *(*default_params)(void); 566 game_params *(*default_params)(void);
524 int (*fetch_preset)(int i, char **name, game_params **params); 567 int (*fetch_preset)(int i, char **name, game_params **params);
568 struct preset_menu *(*preset_menu)(void);
525 void (*decode_params)(game_params *, char const *string); 569 void (*decode_params)(game_params *, char const *string);
526 char *(*encode_params)(const game_params *, int full); 570 char *(*encode_params)(const game_params *, int full);
527 void (*free_params)(game_params *params); 571 void (*free_params)(game_params *params);
diff --git a/apps/plugins/puzzles/src/puzzles.hlp b/apps/plugins/puzzles/src/puzzles.hlp
new file mode 100644
index 0000000000..f59292eb20
--- /dev/null
+++ b/apps/plugins/puzzles/src/puzzles.hlp
Binary files differ
diff --git a/apps/plugins/puzzles/puzzles.rc2 b/apps/plugins/puzzles/src/puzzles.rc2
index 4442a9b138..4442a9b138 100644
--- a/apps/plugins/puzzles/puzzles.rc2
+++ b/apps/plugins/puzzles/src/puzzles.rc2
diff --git a/apps/plugins/puzzles/src/puzzles.txt b/apps/plugins/puzzles/src/puzzles.txt
new file mode 100644
index 0000000000..88d83f791d
--- /dev/null
+++ b/apps/plugins/puzzles/src/puzzles.txt
@@ -0,0 +1,3163 @@
1 Simon Tatham's Portable Puzzle Collection
2 =========================================
3
4This is a collection of small one-player puzzle games.
5
6This manual is copyright 2004-2014 Simon Tatham. All rights reserved. You
7may distribute this documentation under the MIT licence. See appendix A for
8the licence text in full.
9
10Chapter 1: Introduction
11-----------------------
12
13 I wrote this collection because I thought there should be more small
14 desktop toys available: little games you can pop up in a window and
15 play for two or three minutes while you take a break from whatever
16 else you were doing. And I was also annoyed that every time I found
17 a good game on (say) Unix, it wasn't available the next time I was
18 sitting at a Windows machine, or vice versa; so I arranged that
19 everything in my personal puzzle collection will happily run on
20 both, and have more recently done a port to Mac OS X as well. When I
21 find (or perhaps invent) further puzzle games that I like, they'll
22 be added to this collection and will immediately be available on
23 both platforms. And if anyone feels like writing any other front
24 ends - PocketPC, Mac OS pre-10, or whatever it might be - then all
25 the games in this framework will immediately become available on
26 another platform as well.
27
28 The actual games in this collection were mostly not my invention;
29 they are re-implementations of existing game concepts within my
30 portable puzzle framework. I do not claim credit, in general, for
31 inventing the rules of any of these puzzles. (I don't even claim
32 authorship of all the code; some of the puzzles have been submitted
33 by other authors.)
34
35 This collection is distributed under the MIT licence (see appendix
36 A). This means that you can do pretty much anything you like with
37 the game binaries or the code, except pretending you wrote them
38 yourself, or suing me if anything goes wrong.
39
40 The most recent versions, and source code, can be found at
41 http://www.chiark.greenend.org.uk/~sgtatham/puzzles/.
42
43 Please report bugs to anakin@pobox.com. You might find it helpful to
44 read this article before reporting a bug:
45
46 http://www.chiark.greenend.org.uk/~sgtatham/bugs.html
47
48 Patches are welcome. Especially if they provide a new front end (to
49 make all these games run on another platform), or a new game.
50
51Chapter 2: Common features
52--------------------------
53
54 This chapter describes features that are common to all the games.
55
56 2.1 Common actions
57
58 These actions are all available from the `Game' menu and via
59 keyboard shortcuts, in addition to any game-specific actions.
60
61 (On Mac OS X, to conform with local user interface standards, these
62 actions are situated on the `File' and `Edit' menus instead.)
63
64 _New game_ (`N', Ctrl+`N')
65
66 Starts a new game, with a random initial state.
67
68 _Restart game_
69
70 Resets the current game to its initial state. (This can be
71 undone.)
72
73 _Load_
74
75 Loads a saved game from a file on disk.
76
77 _Save_
78
79 Saves the current state of your game to a file on disk.
80
81 The Load and Save operations preserve your entire game history
82 (so you can save, reload, and still Undo and Redo things you had
83 done before saving).
84
85 _Print_
86
87 Where supported (currently only on Windows), brings up a dialog
88 allowing you to print an arbitrary number of puzzles randomly
89 generated from the current parameters, optionally including
90 the current puzzle. (Only for puzzles which make sense to
91 print, of course - it's hard to think of a sensible printable
92 representation of Fifteen!)
93
94 _Undo_ (`U', Ctrl+`Z', Ctrl+`_')
95
96 Undoes a single move. (You can undo moves back to the start of
97 the session.)
98
99 _Redo_ (`R', Ctrl+`R')
100
101 Redoes a previously undone move.
102
103 _Copy_
104
105 Copies the current state of your game to the clipboard in text
106 format, so that you can paste it into (say) an e-mail client or
107 a web message board if you're discussing the game with someone
108 else. (Not all games support this feature.)
109
110 _Solve_
111
112 Transforms the puzzle instantly into its solved state. For some
113 games (Cube) this feature is not supported at all because it is
114 of no particular use. For other games (such as Pattern), the
115 solved state can be used to give you information, if you can't
116 see how a solution can exist at all or you want to know where
117 you made a mistake. For still other games (such as Sixteen),
118 automatic solution tells you nothing about how to _get_ to
119 the solution, but it does provide a useful way to get there
120 quickly so that you can experiment with set-piece moves and
121 transformations.
122
123 Some games (such as Solo) are capable of solving a game ID you
124 have typed in from elsewhere. Other games (such as Rectangles)
125 cannot solve a game ID they didn't invent themself, but when
126 they did invent the game ID they know what the solution is
127 already. Still other games (Pattern) can solve _some_ external
128 game IDs, but only if they aren't too difficult.
129
130 The `Solve' command adds the solved state to the end of the undo
131 chain for the puzzle. In other words, if you want to go back to
132 solving it yourself after seeing the answer, you can just press
133 Undo.
134
135 _Quit_ (`Q', Ctrl+`Q')
136
137 Closes the application entirely.
138
139 2.2 Specifying games with the game ID
140
141 There are two ways to save a game specification out of a puzzle and
142 recreate it later, or recreate it in somebody else's copy of the
143 same puzzle.
144
145 The `Specific' and `Random Seed' options from the `Game' menu (or
146 the `File' menu, on Mac OS X) each show a piece of text (a `game
147 ID') which is sufficient to reconstruct precisely the same game at a
148 later date.
149
150 You can enter either of these pieces of text back into the program
151 (via the same `Specific' or `Random Seed' menu options) at a later
152 point, and it will recreate the same game. You can also use either
153 one as a command line argument (on Windows or Unix); see section 2.4
154 for more detail.
155
156 The difference between the two forms is that a descriptive game ID
157 is a literal _description_ of the initial state of the game, whereas
158 a random seed is just a piece of arbitrary text which was provided
159 as input to the random number generator used to create the puzzle.
160 This means that:
161
162 - Descriptive game IDs tend to be longer in many puzzles
163 (although some, such as Cube (chapter 4), only need very short
164 descriptions). So a random seed is often a _quicker_ way to
165 note down the puzzle you're currently playing, or to tell it to
166 somebody else so they can play the same one as you.
167
168 - Any text at all is a valid random seed. The automatically
169 generated ones are fifteen-digit numbers, but anything will do;
170 you can type in your full name, or a word you just made up, and
171 a valid puzzle will be generated from it. This provides a way
172 for two or more people to race to complete the same puzzle:
173 you think of a random seed, then everybody types it in at the
174 same time, and nobody has an advantage due to having seen the
175 generated puzzle before anybody else.
176
177 - It is often possible to convert puzzles from other sources (such
178 as `nonograms' or `sudoku' from newspapers) into descriptive
179 game IDs suitable for use with these programs.
180
181 - Random seeds are not guaranteed to produce the same result
182 if you use them with a different _version_ of the puzzle
183 program. This is because the generation algorithm might have
184 been improved or modified in later versions of the code, and
185 will therefore produce a different result when given the same
186 sequence of random numbers. Use a descriptive game ID if you
187 aren't sure that it will be used on the same version of the
188 program as yours.
189
190 (Use the `About' menu option to find out the version number of
191 the program. Programs with the same version number running on
192 different platforms should still be random-seed compatible.)
193
194 A descriptive game ID starts with a piece of text which encodes the
195 _parameters_ of the current game (such as grid size). Then there is
196 a colon, and after that is the description of the game's initial
197 state. A random seed starts with a similar string of parameters, but
198 then it contains a hash sign followed by arbitrary data.
199
200 If you enter a descriptive game ID, the program will not be able
201 to show you the random seed which generated it, since it wasn't
202 generated _from_ a random seed. If you _enter_ a random seed,
203 however, the program will be able to show you the descriptive game
204 ID derived from that random seed.
205
206 Note that the game parameter strings are not always identical
207 between the two forms. For some games, there will be parameter
208 data provided with the random seed which is not included in the
209 descriptive game ID. This is because that parameter information is
210 only relevant when _generating_ puzzle grids, and is not important
211 when playing them. Thus, for example, the difficulty level in Solo
212 (chapter 11) is not mentioned in the descriptive game ID.
213
214 These additional parameters are also not set permanently if you type
215 in a game ID. For example, suppose you have Solo set to `Advanced'
216 difficulty level, and then a friend wants your help with a `Trivial'
217 puzzle; so the friend reads out a random seed specifying `Trivial'
218 difficulty, and you type it in. The program will generate you the
219 same `Trivial' grid which your friend was having trouble with, but
220 once you have finished playing it, when you ask for a new game it
221 will automatically go back to the `Advanced' difficulty which it was
222 previously set on.
223
224 2.3 The `Type' menu
225
226 The `Type' menu, if present, may contain a list of preset game
227 settings. Selecting one of these will start a new random game with
228 the parameters specified.
229
230 The `Type' menu may also contain a `Custom' option which allows you
231 to fine-tune game parameters. The parameters available are specific
232 to each game and are described in the following sections.
233
234 2.4 Specifying game parameters on the command line
235
236 (This section does not apply to the Mac OS X version.)
237
238 The games in this collection deliberately do not ever save
239 information on to the computer they run on: they have no high score
240 tables and no saved preferences. (This is because I expect at least
241 some people to play them at work, and those people will probably
242 appreciate leaving as little evidence as possible!)
243
244 However, if you do want to arrange for one of these games to default
245 to a particular set of parameters, you can specify them on the
246 command line.
247
248 The easiest way to do this is to set up the parameters you want
249 using the `Type' menu (see section 2.3), and then to select `Random
250 Seed' from the `Game' or `File' menu (see section 2.2). The text
251 in the `Game ID' box will be composed of two parts, separated by a
252 hash. The first of these parts represents the game parameters (the
253 size of the playing area, for example, and anything else you set
254 using the `Type' menu).
255
256 If you run the game with just that parameter text on the command
257 line, it will start up with the settings you specified.
258
259 For example: if you run Cube (see chapter 4), select `Octahedron'
260 from the `Type' menu, and then go to the game ID selection, you
261 will see a string of the form `o2x2#338686542711620'. Take only the
262 part before the hash (`o2x2'), and start Cube with that text on the
263 command line: `PREFIX-cube o2x2'.
264
265 If you copy the _entire_ game ID on to the command line, the game
266 will start up in the specific game that was described. This is
267 occasionally a more convenient way to start a particular game ID
268 than by pasting it into the game ID selection box.
269
270 (You could also retrieve the encoded game parameters using the
271 `Specific' menu option instead of `Random Seed', but if you do then
272 some options, such as the difficulty level in Solo, will be missing.
273 See section 2.2 for more details on this.)
274
275 2.5 Unix command-line options
276
277 (This section only applies to the Unix port.)
278
279 In addition to being able to specify game parameters on the command
280 line (see section 2.4), there are various other options:
281
282 --game
283
284 --load
285
286 These options respectively determine whether the command-line
287 argument is treated as specifying game parameters or a save
288 file to load. Only one should be specified. If neither of these
289 options is specified, a guess is made based on the format of the
290 argument.
291
292 --generate _n_
293
294 If this option is specified, instead of a puzzle being
295 displayed, a number of descriptive game IDs will be invented and
296 printed on standard output. This is useful for gaining access
297 to the game generation algorithms without necessarily using the
298 frontend.
299
300 If game parameters are specified on the command-line, they will
301 be used to generate the game IDs; otherwise a default set of
302 parameters will be used.
303
304 The most common use of this option is in conjunction with `--
305 print', in which case its behaviour is slightly different; see
306 below.
307
308 --print _w_x_h_
309
310 If this option is specified, instead of a puzzle being
311 displayed, a printed representation of one or more unsolved
312 puzzles is sent to standard output, in PostScript format.
313
314 On each page of puzzles, there will be _w_ across and _h_ down.
315 If there are more puzzles than _w_x_h_, more than one page will
316 be printed.
317
318 If `--generate' has also been specified, the invented game
319 IDs will be used to generate the printed output. Otherwise,
320 a list of game IDs is expected on standard input (which can
321 be descriptive or random seeds; see section 2.2), in the same
322 format produced by `--generate'.
323
324 For example:
325
326 PREFIX-net --generate 12 --print 2x3 7x7w | lpr
327
328 will generate two pages of printed Net puzzles (each of which
329 will have a 7x7 wrapping grid), and pipe the output to the `lpr'
330 command, which on many systems will send them to an actual
331 printer.
332
333 There are various other options which affect printing; see
334 below.
335
336 --save _file-prefix_ [ --save-suffix _file-suffix_ ]
337
338 If this option is specified, instead of a puzzle being
339 displayed, saved-game files for one or more unsolved puzzles are
340 written to files constructed from the supplied prefix and/or
341 suffix.
342
343 If `--generate' has also been specified, the invented game
344 IDs will be used to generate the printed output. Otherwise,
345 a list of game IDs is expected on standard input (which can
346 be descriptive or random seeds; see section 2.2), in the same
347 format produced by `--generate'.
348
349 For example:
350
351 PREFIX-net --generate 12 --save game --save-suffix .sav
352
353 will generate twelve Net saved-game files with the names
354 game0.sav to game11.sav.
355
356 --version
357
358 Prints version information about the game, and then quits.
359
360 The following options are only meaningful if `--print' is also
361 specified:
362
363 --with-solutions
364
365 The set of pages filled with unsolved puzzles will be followed
366 by the solutions to those puzzles.
367
368 --scale _n_
369
370 Adjusts how big each puzzle is when printed. Larger numbers make
371 puzzles bigger; the default is 1.0.
372
373 --colour
374
375 Puzzles will be printed in colour, rather than in black and
376 white (if supported by the puzzle).
377
378Chapter 3: Net
379--------------
380
381 (_Note:_ the Windows version of this game is called NETGAME.EXE to
382 avoid clashing with Windows's own NET.EXE.)
383
384 I originally saw this in the form of a Flash game called
385 FreeNet [1], written by Pavils Jurjans; there are several other
386 implementations under the name NetWalk. The computer prepares a
387 network by connecting up the centres of squares in a grid, and then
388 shuffles the network by rotating every tile randomly. Your job is
389 to rotate it all back into place. The successful solution will be
390 an entirely connected network, with no closed loops. As a visual
391 aid, all tiles which are connected to the one in the middle are
392 highlighted.
393
394 [1] http://www.jurjans.lv/stuff/net/FreeNet.htm
395
396 3.1 Net controls
397
398 This game can be played with either the keyboard or the mouse. The
399 controls are:
400
401 _Select tile_: mouse pointer, arrow keys
402
403 _Rotate tile anticlockwise_: left mouse button, `A' key
404
405 _Rotate tile clockwise_: right mouse button, `D' key
406
407 _Rotate tile by 180 degrees_: `F' key
408
409 _Lock (or unlock) tile_: middle mouse button, shift-click, `S' key
410
411 You can lock a tile once you're sure of its orientation. You
412 can also unlock it again, but while it's locked you can't
413 accidentally turn it.
414
415 The following controls are not necessary to complete the game, but
416 may be useful:
417
418 _Shift grid_: Shift + arrow keys
419
420 On grids that wrap, you can move the origin of the grid, so
421 that tiles that were on opposite sides of the grid can be seen
422 together.
423
424 _Move centre_: Ctrl + arrow keys
425
426 You can change which tile is used as the source of highlighting.
427 (It doesn't ultimately matter which tile this is, as every tile
428 will be connected to every other tile in a correct solution,
429 but it may be helpful in the intermediate stages of solving the
430 puzzle.)
431
432 _Jumble tiles_: `J' key
433
434 This key turns all tiles that are not locked to random
435 orientations.
436
437 (All the actions described in section 2.1 are also available.)
438
439 3.2 Net parameters
440
441 These parameters are available from the `Custom...' option on the
442 `Type' menu.
443
444 _Width_, _Height_
445
446 Size of grid in tiles.
447
448 _Walls wrap around_
449
450 If checked, flow can pass from the left edge to the right edge,
451 and from top to bottom, and vice versa.
452
453 _Barrier probability_
454
455 A number between 0.0 and 1.0 controlling whether an immovable
456 barrier is placed between two tiles to prevent flow between
457 them (a higher number gives more barriers). Since barriers
458 are immovable, they act as constraints on the solution (i.e.,
459 hints).
460
461 The grid generation in Net has been carefully arranged so that
462 the barriers are independent of the rest of the grid. This
463 means that if you note down the random seed used to generate
464 the current puzzle (see section 2.2), change the _Barrier
465 probability_ parameter, and then re-enter the same random seed,
466 you should see exactly the same starting grid, with the only
467 change being the number of barriers. So if you're stuck on a
468 particular grid and need a hint, you could start up another
469 instance of Net, set up the same parameters but a higher barrier
470 probability, and enter the game seed from the original Net
471 window.
472
473 _Ensure unique solution_
474
475 Normally, Net will make sure that the puzzles it presents have
476 only one solution. Puzzles with ambiguous sections can be more
477 difficult and more subtle, so if you like you can turn off this
478 feature and risk having ambiguous puzzles. (Also, finding _all_
479 the possible solutions can be an additional challenge for an
480 advanced player.)
481
482Chapter 4: Cube
483---------------
484
485 This is another one I originally saw as a web game. This one was a
486 Java game [2], by Paul Scott. You have a grid of 16 squares, six of
487 which are blue; on one square rests a cube. Your move is to use the
488 arrow keys to roll the cube through 90 degrees so that it moves to
489 an adjacent square. If you roll the cube on to a blue square, the
490 blue square is picked up on one face of the cube; if you roll a blue
491 face of the cube on to a non-blue square, the blueness is put down
492 again. (In general, whenever you roll the cube, the two faces that
493 come into contact swap colours.) Your job is to get all six blue
494 squares on to the six faces of the cube at the same time. Count your
495 moves and try to do it in as few as possible.
496
497 Unlike the original Java game, my version has an additional feature:
498 once you've mastered the game with a cube rolling on a square grid,
499 you can change to a triangular grid and roll any of a tetrahedron,
500 an octahedron or an icosahedron.
501
502 [2] http://www3.sympatico.ca/paulscott/cube/cube.htm
503
504 4.1 Cube controls
505
506 This game can be played with either the keyboard or the mouse.
507
508 Left-clicking anywhere on the window will move the cube (or other
509 solid) towards the mouse pointer.
510
511 The arrow keys can also used to roll the cube on its square grid in
512 the four cardinal directions. On the triangular grids, the mapping
513 of arrow keys to directions is more approximate. Vertical movement
514 is disallowed where it doesn't make sense. The four keys surrounding
515 the arrow keys on the numeric keypad (`7', `9', `1', `3') can be
516 used for diagonal movement.
517
518 (All the actions described in section 2.1 are also available.)
519
520 4.2 Cube parameters
521
522 These parameters are available from the `Custom...' option on the
523 `Type' menu.
524
525 _Type of solid_
526
527 Selects the solid to roll (and hence the shape of the grid):
528 tetrahedron, cube, octahedron, or icosahedron.
529
530 _Width / top_, _Height / bottom_
531
532 On a square grid, horizontal and vertical dimensions. On a
533 triangular grid, the number of triangles on the top and bottom
534 rows respectively.
535
536Chapter 5: Fifteen
537------------------
538
539 The old ones are the best: this is the good old `15-puzzle' with
540 sliding tiles. You have a 4x4 square grid; 15 squares contain
541 numbered tiles, and the sixteenth is empty. Your move is to choose a
542 tile next to the empty space, and slide it into the space. The aim
543 is to end up with the tiles in numerical order, with the space in
544 the bottom right (so that the top row reads 1,2,3,4 and the bottom
545 row reads 13,14,15,_space_).
546
547 5.1 Fifteen controls
548
549 This game can be controlled with the mouse or the keyboard.
550
551 A left-click with the mouse in the row or column containing the
552 empty space will move as many tiles as necessary to move the space
553 to the mouse pointer.
554
555 The arrow keys will move a tile adjacent to the space in the
556 direction indicated (moving the space in the _opposite_ direction).
557
558 Pressing `h' will make a suggested move. Pressing `h' enough times
559 will solve the game, but it may scramble your progress while doing
560 so.
561
562 (All the actions described in section 2.1 are also available.)
563
564 5.2 Fifteen parameters
565
566 The only options available from the `Custom...' option on the `Type'
567 menu are _Width_ and _Height_, which are self-explanatory. (Once
568 you've changed these, it's not a `15-puzzle' any more, of course!)
569
570Chapter 6: Sixteen
571------------------
572
573 Another sliding tile puzzle, visually similar to Fifteen (see
574 chapter 5) but with a different type of move. This time, there is no
575 hole: all 16 squares on the grid contain numbered squares. Your move
576 is to shift an entire row left or right, or shift an entire column
577 up or down; every time you do that, the tile you shift off the grid
578 re-appears at the other end of the same row, in the space you just
579 vacated. To win, arrange the tiles into numerical order (1,2,3,4 on
580 the top row, 13,14,15,16 on the bottom). When you've done that, try
581 playing on different sizes of grid.
582
583 I _might_ have invented this game myself, though only by accident
584 if so (and I'm sure other people have independently invented it). I
585 thought I was imitating a screensaver I'd seen, but I have a feeling
586 that the screensaver might actually have been a Fifteen-type puzzle
587 rather than this slightly different kind. So this might be the one
588 thing in my puzzle collection which represents creativity on my part
589 rather than just engineering.
590
591 6.1 Sixteen controls
592
593 Left-clicking on an arrow will move the appropriate row or column in
594 the direction indicated. Right-clicking will move it in the opposite
595 direction.
596
597 Alternatively, use the cursor keys to move the position indicator
598 around the edge of the grid, and use the return key to move the
599 row/column in the direction indicated.
600
601 You can also move the tiles directly. Move the cursor onto a tile,
602 hold Control and press an arrow key to move the tile under the
603 cursor and move the cursor along with the tile. Or, hold Shift to
604 move only the tile. Pressing Enter simulates holding down Control
605 (press Enter again to release), while pressing Space simulates
606 holding down shift.
607
608 (All the actions described in section 2.1 are also available.)
609
610 6.2 Sixteen parameters
611
612 The parameters available from the `Custom...' option on the `Type'
613 menu are:
614
615 - _Width_ and _Height_, which are self-explanatory.
616
617 - You can ask for a limited shuffling operation to be performed on
618 the grid. By default, Sixteen will shuffle the grid in such a
619 way that any arrangement is about as probable as any other. You
620 can override this by requesting a precise number of shuffling
621 moves to be performed. Typically your aim is then to determine
622 the precise set of shuffling moves and invert them exactly,
623 so that you answer (say) a four-move shuffle with a four-move
624 solution. Note that the more moves you ask for, the more likely
625 it is that solutions shorter than the target length will turn
626 out to be possible.
627
628Chapter 7: Twiddle
629------------------
630
631 Twiddle is a tile-rearrangement puzzle, visually similar to Sixteen
632 (see chapter 6): you are given a grid of square tiles, each
633 containing a number, and your aim is to arrange the numbers into
634 ascending order.
635
636 In basic Twiddle, your move is to rotate a square group of four
637 tiles about their common centre. (Orientation is not significant
638 in the basic puzzle, although you can select it.) On more advanced
639 settings, you can rotate a larger square group of tiles.
640
641 I first saw this type of puzzle in the GameCube game `Metroid
642 Prime 2'. In the Main Gyro Chamber in that game, there is a puzzle
643 you solve to unlock a door, which is a special case of Twiddle. I
644 developed this game as a generalisation of that puzzle.
645
646 7.1 Twiddle controls
647
648 To play Twiddle, click the mouse in the centre of the square group
649 you wish to rotate. In the basic mode, you rotate a 2x2 square,
650 which means you have to click at a corner point where four tiles
651 meet.
652
653 In more advanced modes you might be rotating 3x3 or even more at a
654 time; if the size of the square is odd then you simply click in the
655 centre tile of the square you want to rotate.
656
657 Clicking with the left mouse button rotates the group anticlockwise.
658 Clicking with the right button rotates it clockwise.
659
660 You can also move an outline square around the grid with the cursor
661 keys; the square is the size above (2x2 by default, or larger).
662 Pressing the return key or space bar will rotate the current square
663 anticlockwise or clockwise respectively.
664
665 (All the actions described in section 2.1 are also available.)
666
667 7.2 Twiddle parameters
668
669 Twiddle provides several configuration options via the `Custom'
670 option on the `Type' menu:
671
672 - You can configure the width and height of the puzzle grid.
673
674 - You can configure the size of square block that rotates at a
675 time.
676
677 - You can ask for every square in the grid to be distinguishable
678 (the default), or you can ask for a simplified puzzle in which
679 there are groups of identical numbers. In the simplified puzzle
680 your aim is just to arrange all the 1s into the first row, all
681 the 2s into the second row, and so on.
682
683 - You can configure whether the orientation of tiles matters. If
684 you ask for an orientable puzzle, each tile will have a triangle
685 drawn in it. All the triangles must be pointing upwards to
686 complete the puzzle.
687
688 - You can ask for a limited shuffling operation to be performed
689 on the grid. By default, Twiddle will shuffle the grid so much
690 that any arrangement is about as probable as any other. You can
691 override this by requesting a precise number of shuffling moves
692 to be performed. Typically your aim is then to determine the
693 precise set of shuffling moves and invert them exactly, so that
694 you answer (say) a four-move shuffle with a four-move solution.
695 Note that the more moves you ask for, the more likely it is that
696 solutions shorter than the target length will turn out to be
697 possible.
698
699Chapter 8: Rectangles
700---------------------
701
702 You have a grid of squares, with numbers written in some (but
703 not all) of the squares. Your task is to subdivide the grid into
704 rectangles of various sizes, such that (a) every rectangle contains
705 exactly one numbered square, and (b) the area of each rectangle is
706 equal to the number written in its numbered square.
707
708 Credit for this game goes to the Japanese puzzle magazine Nikoli [3]
709 ; I've also seen a Palm implementation at Puzzle Palace [4]. Unlike
710 Puzzle Palace's implementation, my version automatically generates
711 random grids of any size you like. The quality of puzzle design is
712 therefore not quite as good as hand-crafted puzzles would be, but on
713 the plus side you get an inexhaustible supply of puzzles tailored to
714 your own specification.
715
716 [3] http://www.nikoli.co.jp/en/puzzles/shikaku.html (beware of
717 Flash)
718
719 [4]
720 https://web.archive.org/web/20041024001459/http://www.puzzle.gr.jp/puzzle/sikaku/palm/index.html.en
721
722 8.1 Rectangles controls
723
724 This game is played with the mouse or cursor keys.
725
726 Left-click any edge to toggle it on or off, or left-click and
727 drag to draw an entire rectangle (or line) on the grid in one go
728 (removing any existing edges within that rectangle). Right-clicking
729 and dragging will allow you to erase the contents of a rectangle
730 without affecting its edges.
731
732 Alternatively, use the cursor keys to move the position indicator
733 around the board. Pressing the return key then allows you to use the
734 cursor keys to drag a rectangle out from that position, and pressing
735 the return key again completes the rectangle. Using the space bar
736 instead of the return key allows you to erase the contents of a
737 rectangle without affecting its edges, as above. Pressing escape
738 cancels a drag.
739
740 When a rectangle of the correct size is completed, it will be
741 shaded.
742
743 (All the actions described in section 2.1 are also available.)
744
745 8.2 Rectangles parameters
746
747 These parameters are available from the `Custom...' option on the
748 `Type' menu.
749
750 _Width_, _Height_
751
752 Size of grid, in squares.
753
754 _Expansion factor_
755
756 This is a mechanism for changing the type of grids generated by
757 the program. Some people prefer a grid containing a few large
758 rectangles to one containing many small ones. So you can ask
759 Rectangles to essentially generate a _smaller_ grid than the
760 size you specified, and then to expand it by adding rows and
761 columns.
762
763 The default expansion factor of zero means that Rectangles will
764 simply generate a grid of the size you ask for, and do nothing
765 further. If you set an expansion factor of (say) 0.5, it means
766 that each dimension of the grid will be expanded to half again
767 as big after generation. In other words, the initial grid will
768 be 2/3 the size in each dimension, and will be expanded to its
769 full size without adding any more rectangles.
770
771 Setting an expansion factor of around 0.5 tends to make the
772 game more difficult, and also (in my experience) rewards a
773 less deductive and more intuitive playing style. If you set it
774 _too_ high, though, the game simply cannot generate more than a
775 few rectangles to cover the entire grid, and the game becomes
776 trivial.
777
778 _Ensure unique solution_
779
780 Normally, Rectangles will make sure that the puzzles it presents
781 have only one solution. Puzzles with ambiguous sections can be
782 more difficult and more subtle, so if you like you can turn off
783 this feature and risk having ambiguous puzzles. Also, finding
784 _all_ the possible solutions can be an additional challenge for
785 an advanced player. Turning off this option can also speed up
786 puzzle generation.
787
788Chapter 9: Netslide
789-------------------
790
791 This game combines the grid generation of Net (see chapter 3) with
792 the movement of Sixteen (see chapter 6): you have a Net grid, but
793 instead of rotating tiles back into place you have to slide them
794 into place by moving a whole row at a time.
795
796 As in Sixteen, control is with the mouse or cursor keys. See section
797 6.1.
798
799 The available game parameters have similar meanings to those in Net
800 (see section 3.2) and Sixteen (see section 6.2).
801
802 Netslide was contributed to this collection by Richard Boulton.
803
804Chapter 10: Pattern
805-------------------
806
807 You have a grid of squares, which must all be filled in either black
808 or white. Beside each row of the grid are listed the lengths of the
809 runs of black squares on that row; above each column are listed the
810 lengths of the runs of black squares in that column. Your aim is to
811 fill in the entire grid black or white.
812
813 I first saw this puzzle form around 1995, under the name
814 `nonograms'. I've seen it in various places since then, under
815 different names.
816
817 Normally, puzzles of this type turn out to be a meaningful picture
818 of something once you've solved them. However, since this version
819 generates the puzzles automatically, they will just look like random
820 groupings of squares. (One user has suggested that this is actually
821 a _good_ thing, since it prevents you from guessing the colour of
822 squares based on the picture, and forces you to use logic instead.)
823 The advantage, though, is that you never run out of them.
824
825 10.1 Pattern controls
826
827 This game is played with the mouse.
828
829 Left-click in a square to colour it black. Right-click to colour it
830 white. If you make a mistake, you can middle-click, or hold down
831 Shift while clicking with any button, to colour the square in the
832 default grey (meaning `undecided') again.
833
834 You can click and drag with the left or right mouse button to colour
835 a vertical or horizontal line of squares black or white at a time
836 (respectively). If you click and drag with the middle button, or
837 with Shift held down, you can colour a whole rectangle of squares
838 grey.
839
840 You can also move around the grid with the cursor keys. Pressing the
841 return key will cycle the current cell through empty, then black,
842 then white, then empty, and the space bar does the same cycle in
843 reverse.
844
845 Moving the cursor while holding Control will colour the moved-over
846 squares black. Holding Shift will colour the moved-over squares
847 white, and holding both will colour them grey.
848
849 (All the actions described in section 2.1 are also available.)
850
851 10.2 Pattern parameters
852
853 The only options available from the `Custom...' option on the `Type'
854 menu are _Width_ and _Height_, which are self-explanatory.
855
856Chapter 11: Solo
857----------------
858
859 You have a square grid, which is divided into as many equally sized
860 sub-blocks as the grid has rows. Each square must be filled in with
861 a digit from 1 to the size of the grid, in such a way that
862
863 - every row contains only one occurrence of each digit
864
865 - every column contains only one occurrence of each digit
866
867 - every block contains only one occurrence of each digit.
868
869 - (optionally, by default off) each of the square's two main
870 diagonals contains only one occurrence of each digit.
871
872 You are given some of the numbers as clues; your aim is to place the
873 rest of the numbers correctly.
874
875 Under the default settings, the sub-blocks are square or
876 rectangular. The default puzzle size is 3x3 (a 9x9 actual grid,
877 divided into nine 3x3 blocks). You can also select sizes with
878 rectangular blocks instead of square ones, such as 2x3 (a 6x6 grid
879 divided into six 3x2 blocks). Alternatively, you can select `jigsaw'
880 mode, in which the sub-blocks are arbitrary shapes which differ
881 between individual puzzles.
882
883 Another available mode is `killer'. In this mode, clues are not
884 given in the form of filled-in squares; instead, the grid is divided
885 into `cages' by coloured lines, and for each cage the game tells
886 you what the sum of all the digits in that cage should be. Also,
887 no digit may appear more than once within a cage, even if the cage
888 crosses the boundaries of existing regions.
889
890 If you select a puzzle size which requires more than 9 digits, the
891 additional digits will be letters of the alphabet. For example, if
892 you select 3x4 then the digits which go in your grid will be 1 to 9,
893 plus `a', `b' and `c'. This cannot be selected for killer puzzles.
894
895 I first saw this puzzle in Nikoli [5], although it's also been
896 popularised by various newspapers under the name `Sudoku' or `Su
897 Doku'. Howard Garns is considered the inventor of the modern form of
898 the puzzle, and it was first published in _Dell Pencil Puzzles and
899 Word Games_. A more elaborate treatment of the history of the puzzle
900 can be found on Wikipedia [6].
901
902 [5] http://www.nikoli.co.jp/en/puzzles/sudoku.html (beware of Flash)
903
904 [6] http://en.wikipedia.org/wiki/Sudoku
905
906 11.1 Solo controls
907
908 To play Solo, simply click the mouse in any empty square and then
909 type a digit or letter on the keyboard to fill that square. If you
910 make a mistake, click the mouse in the incorrect square and press
911 Space to clear it again (or use the Undo feature).
912
913 If you _right_-click in a square and then type a number, that
914 number will be entered in the square as a `pencil mark'. You can
915 have pencil marks for multiple numbers in the same square. Squares
916 containing filled-in numbers cannot also contain pencil marks.
917
918 The game pays no attention to pencil marks, so exactly what you
919 use them for is up to you: you can use them as reminders that a
920 particular square needs to be re-examined once you know more about
921 a particular number, or you can use them as lists of the possible
922 numbers in a given square, or anything else you feel like.
923
924 To erase a single pencil mark, right-click in the square and type
925 the same number again.
926
927 All pencil marks in a square are erased when you left-click and type
928 a number, or when you left-click and press space. Right-clicking and
929 pressing space will also erase pencil marks.
930
931 Alternatively, use the cursor keys to move the mark around the grid.
932 Pressing the return key toggles the mark (from a normal mark to a
933 pencil mark), and typing a number in is entered in the square in the
934 appropriate way; typing in a 0 or using the space bar will clear a
935 filled square.
936
937 (All the actions described in section 2.1 are also available.)
938
939 11.2 Solo parameters
940
941 Solo allows you to configure two separate dimensions of the puzzle
942 grid on the `Type' menu: the number of columns, and the number of
943 rows, into which the main grid is divided. (The size of a block is
944 the inverse of this: for example, if you select 2 columns and 3
945 rows, each actual block will have 3 columns and 2 rows.)
946
947 If you tick the `X' checkbox, Solo will apply the optional extra
948 constraint that the two main diagonals of the grid also contain
949 one of every digit. (This is sometimes known as `Sudoku-X' in
950 newspapers.) In this mode, the squares on the two main diagonals
951 will be shaded slightly so that you know it's enabled.
952
953 If you tick the `Jigsaw' checkbox, Solo will generate randomly
954 shaped sub-blocks. In this mode, the actual grid size will be taken
955 to be the product of the numbers entered in the `Columns' and `Rows'
956 boxes. There is no reason why you have to enter a number greater
957 than 1 in both boxes; Jigsaw mode has no constraint on the grid
958 size, and it can even be a prime number if you feel like it.
959
960 If you tick the `Killer' checkbox, Solo will generate a set of
961 of cages, which are randomly shaped and drawn in an outline of a
962 different colour. Each of these regions contains a smaller clue
963 which shows the digit sum of all the squares in this region.
964
965 You can also configure the type of symmetry shown in the generated
966 puzzles. More symmetry makes the puzzles look prettier but may also
967 make them easier, since the symmetry constraints can force more
968 clues than necessary to be present. Completely asymmetric puzzles
969 have the freedom to contain as few clues as possible.
970
971 Finally, you can configure the difficulty of the generated puzzles.
972 Difficulty levels are judged by the complexity of the techniques
973 of deduction required to solve the puzzle: each level requires a
974 mode of reasoning which was not necessary in the previous one. In
975 particular, on difficulty levels `Trivial' and `Basic' there will be
976 a square you can fill in with a single number at all times, whereas
977 at `Intermediate' level and beyond you will have to make partial
978 deductions about the _set_ of squares a number could be in (or the
979 set of numbers that could be in a square). At `Unreasonable' level,
980 even this is not enough, and you will eventually have to make a
981 guess, and then backtrack if it turns out to be wrong.
982
983 Generating difficult puzzles is itself difficult: if you select one
984 of the higher difficulty levels, Solo may have to make many attempts
985 at generating a puzzle before it finds one hard enough for you. Be
986 prepared to wait, especially if you have also configured a large
987 puzzle size.
988
989Chapter 12: Mines
990-----------------
991
992 You have a grid of covered squares, some of which contain mines, but
993 you don't know which. Your job is to uncover every square which does
994 _not_ contain a mine. If you uncover a square containing a mine, you
995 lose. If you uncover a square which does not contain a mine, you
996 are told how many mines are contained within the eight surrounding
997 squares.
998
999 This game needs no introduction; popularised by Windows, it is
1000 perhaps the single best known desktop puzzle game in existence.
1001
1002 This version of it has an unusual property. By default, it will
1003 generate its mine positions in such a way as to ensure that you
1004 never need to _guess_ where a mine is: you will always be able
1005 to deduce it somehow. So you will never, as can happen in other
1006 versions, get to the last four squares and discover that there are
1007 two mines left but you have no way of knowing for sure where they
1008 are.
1009
1010 12.1 Mines controls
1011
1012 This game is played with the mouse.
1013
1014 If you left-click in a covered square, it will be uncovered.
1015
1016 If you right-click in a covered square, it will place a flag which
1017 indicates that the square is believed to be a mine. Left-clicking in
1018 a marked square will not uncover it, for safety. You can right-click
1019 again to remove a mark placed in error.
1020
1021 If you left-click in an _uncovered_ square, it will `clear around'
1022 the square. This means: if the square has exactly as many flags
1023 surrounding it as it should have mines, then all the covered squares
1024 next to it which are _not_ flagged will be uncovered. So once you
1025 think you know the location of all the mines around a square, you
1026 can use this function as a shortcut to avoid having to click on each
1027 of the remaining squares one by one.
1028
1029 If you uncover a square which has _no_ mines in the surrounding
1030 eight squares, then it is obviously safe to uncover those squares in
1031 turn, and so on if any of them also has no surrounding mines. This
1032 will be done for you automatically; so sometimes when you uncover a
1033 square, a whole new area will open up to be explored.
1034
1035 You can also use the cursor keys to move around the minefield.
1036 Pressing the return key in a covered square uncovers it, and in
1037 an uncovered square will clear around it (so it acts as the left
1038 button), pressing the space bar in a covered square will place a
1039 flag (similarly, it acts as the right button).
1040
1041 All the actions described in section 2.1 are also available.
1042
1043 Even Undo is available, although you might consider it cheating to
1044 use it. If you step on a mine, the program will only reveal the mine
1045 in question (unlike most other implementations, which reveal all of
1046 them). You can then Undo your fatal move and continue playing if you
1047 like. The program will track the number of times you died (and Undo
1048 will not reduce that counter), so when you get to the end of the
1049 game you know whether or not you did it without making any errors.
1050
1051 (If you really want to know the full layout of the grid, which other
1052 implementations will show you after you die, you can always use the
1053 Solve menu option.)
1054
1055 12.2 Mines parameters
1056
1057 The options available from the `Custom...' option on the `Type' menu
1058 are:
1059
1060 _Width_, _Height_
1061
1062 Size of grid in squares.
1063
1064 _Mines_
1065
1066 Number of mines in the grid. You can enter this as an absolute
1067 mine count, or alternatively you can put a % sign on the end
1068 in which case the game will arrange for that proportion of the
1069 squares in the grid to be mines.
1070
1071 Beware of setting the mine count too high. At very high
1072 densities, the program may spend forever searching for a
1073 solvable grid.
1074
1075 _Ensure solubility_
1076
1077 When this option is enabled (as it is by default), Mines will
1078 ensure that the entire grid can be fully deduced starting
1079 from the initial open space. If you prefer the riskier grids
1080 generated by other implementations, you can switch off this
1081 option.
1082
1083Chapter 13: Same Game
1084---------------------
1085
1086 You have a grid of coloured squares, which you have to clear by
1087 highlighting contiguous regions of more than one coloured square;
1088 the larger the region you highlight, the more points you get (and
1089 the faster you clear the arena).
1090
1091 If you clear the grid you win. If you end up with nothing but single
1092 squares (i.e., there are no more clickable regions left) you lose.
1093
1094 Removing a region causes the rest of the grid to shuffle up: blocks
1095 that are suspended will fall down (first), and then empty columns
1096 are filled from the right.
1097
1098 Same Game was contributed to this collection by James Harvey.
1099
1100 13.1 Same Game controls
1101
1102 This game can be played with either the keyboard or the mouse.
1103
1104 If you left-click an unselected region, it becomes selected
1105 (possibly clearing the current selection).
1106
1107 If you left-click the selected region, it will be removed (and the
1108 rest of the grid shuffled immediately).
1109
1110 If you right-click the selected region, it will be unselected.
1111
1112 The cursor keys move a cursor around the grid. Pressing the Space or
1113 Enter keys while the cursor is in an unselected region selects it;
1114 pressing Space or Enter again removes it as above.
1115
1116 (All the actions described in section 2.1 are also available.)
1117
1118 13.2 Same Game parameters
1119
1120 These parameters are available from the `Custom...' option on the
1121 `Type' menu.
1122
1123 _Width_, _Height_
1124
1125 Size of grid in squares.
1126
1127 _No. of colours_
1128
1129 Number of different colours used to fill the grid; the more
1130 colours, the fewer large regions of colour and thus the more
1131 difficult it is to successfully clear the grid.
1132
1133 _Scoring system_
1134
1135 Controls the precise mechanism used for scoring. With the
1136 default system, `(n-2)^2', only regions of three squares or more
1137 will score any points at all. With the alternative `(n-1)^2'
1138 system, regions of two squares score a point each, and larger
1139 regions score relatively more points.
1140
1141 _Ensure solubility_
1142
1143 If this option is ticked (the default state), generated grids
1144 will be guaranteed to have at least one solution.
1145
1146 If you turn it off, the game generator will not try to guarantee
1147 soluble grids; it will, however, still ensure that there are at
1148 least 2 squares of each colour on the grid at the start (since a
1149 grid with exactly one square of a given colour is _definitely_
1150 insoluble). Grids generated with this option disabled may
1151 contain more large areas of contiguous colour, leading to
1152 opportunities for higher scores; they can also take less time to
1153 generate.
1154
1155Chapter 14: Flip
1156----------------
1157
1158 You have a grid of squares, some light and some dark. Your aim is to
1159 light all the squares up at the same time. You can choose any square
1160 and flip its state from light to dark or dark to light, but when you
1161 do so, other squares around it change state as well.
1162
1163 Each square contains a small diagram showing which other squares
1164 change when you flip it.
1165
1166 14.1 Flip controls
1167
1168 This game can be played with either the keyboard or the mouse.
1169
1170 Left-click in a square to flip it and its associated squares, or use
1171 the cursor keys to choose a square and the space bar or Enter key to
1172 flip.
1173
1174 If you use the `Solve' function on this game, it will mark some of
1175 the squares in red. If you click once in every square with a red
1176 mark, the game should be solved. (If you click in a square _without_
1177 a red mark, a red mark will appear in it to indicate that you will
1178 need to reverse that operation to reach the solution.)
1179
1180 (All the actions described in section 2.1 are also available.)
1181
1182 14.2 Flip parameters
1183
1184 These parameters are available from the `Custom...' option on the
1185 `Type' menu.
1186
1187 _Width_, _Height_
1188
1189 Size of grid in squares.
1190
1191 _Shape type_
1192
1193 This control determines the shape of the region which is flipped
1194 by clicking in any given square. The default setting, `Crosses',
1195 causes every square to flip itself and its four immediate
1196 neighbours (or three or two if it's at an edge or corner). The
1197 other setting, `Random', causes a random shape to be chosen for
1198 every square, so the game is different every time.
1199
1200Chapter 15: Guess
1201-----------------
1202
1203 You have a set of coloured pegs, and have to reproduce a
1204 predetermined sequence of them (chosen by the computer) within a
1205 certain number of guesses.
1206
1207 Each guess gets marked with the number of correctly-coloured pegs
1208 in the correct places (in black), and also the number of correctly-
1209 coloured pegs in the wrong places (in white).
1210
1211 This game is also known (and marketed, by Hasbro, mainly) as a board
1212 game `Mastermind', with 6 colours, 4 pegs per row, and 10 guesses.
1213 However, this version allows custom settings of number of colours
1214 (up to 10), number of pegs per row, and number of guesses.
1215
1216 Guess was contributed to this collection by James Harvey.
1217
1218 15.1 Guess controls
1219
1220 This game can be played with either the keyboard or the mouse.
1221
1222 With the mouse, drag a coloured peg from the tray on the left-hand
1223 side to its required position in the current guess; pegs may also
1224 be dragged from current and past guesses to copy them elsewhere. To
1225 remove a peg, drag it off its current position to somewhere invalid.
1226
1227 Right-clicking in the current guess adds a `hold' marker; pegs that
1228 have hold markers will be automatically added to the next guess
1229 after marking.
1230
1231 Alternatively, with the keyboard, the up and down cursor keys can
1232 be used to select a peg colour, the left and right keys to select a
1233 peg position, and the space bar or Enter key to place a peg of the
1234 selected colour in the chosen position. `D' or Backspace removes a
1235 peg, and Space adds a hold marker.
1236
1237 Pressing `h' or `?' will fill the current guess with a suggested
1238 guess. Using this is not recommended for 10 or more pegs as it is
1239 slow.
1240
1241 When the guess is complete, the smaller feedback pegs will be
1242 highlighted; clicking on these (or moving the peg cursor to them
1243 with the arrow keys and pressing the space bar or Enter key) will
1244 mark the current guess, copy any held pegs to the next guess, and
1245 move the `current guess' marker.
1246
1247 If you correctly position all the pegs the solution will be
1248 displayed below; if you run out of guesses (or select `Solve...')
1249 the solution will also be revealed.
1250
1251 (All the actions described in section 2.1 are also available.)
1252
1253 15.2 Guess parameters
1254
1255 These parameters are available from the `Custom...' option on the
1256 `Type' menu. The default game matches the parameters for the board
1257 game `Mastermind'.
1258
1259 _Colours_
1260
1261 Number of colours the solution is chosen from; from 2 to 10
1262 (more is harder).
1263
1264 _Pegs per guess_
1265
1266 Number of pegs per guess (more is harder).
1267
1268 _Guesses_
1269
1270 Number of guesses you have to find the solution in (fewer is
1271 harder).
1272
1273 _Allow blanks_
1274
1275 Allows blank pegs to be given as part of a guess (makes it
1276 easier, because you know that those will never be counted as
1277 part of the solution). This is turned off by default.
1278
1279 Note that this doesn't allow blank pegs in the solution; if you
1280 really wanted that, use one extra colour.
1281
1282 _Allow duplicates_
1283
1284 Allows the solution (and the guesses) to contain colours more
1285 than once; this increases the search space (making things
1286 harder), and is turned on by default.
1287
1288Chapter 16: Pegs
1289----------------
1290
1291 A number of pegs are placed in holes on a board. You can remove a
1292 peg by jumping an adjacent peg over it (horizontally or vertically)
1293 to a vacant hole on the other side. Your aim is to remove all but
1294 one of the pegs initially present.
1295
1296 This game, best known as `Peg Solitaire', is possibly one of the
1297 oldest puzzle games still commonly known.
1298
1299 16.1 Pegs controls
1300
1301 To move a peg, drag it with the mouse from its current position to
1302 its final position. If the final position is exactly two holes away
1303 from the initial position, is currently unoccupied by a peg, and
1304 there is a peg in the intervening square, the move will be permitted
1305 and the intervening peg will be removed.
1306
1307 Vacant spaces which you can move a peg into are marked with holes. A
1308 space with no peg and no hole is not available for moving at all: it
1309 is an obstacle which you must work around.
1310
1311 You can also use the cursor keys to move a position indicator around
1312 the board. Pressing the return key while over a peg, followed by a
1313 cursor key, will jump the peg in that direction (if that is a legal
1314 move).
1315
1316 (All the actions described in section 2.1 are also available.)
1317
1318 16.2 Pegs parameters
1319
1320 These parameters are available from the `Custom...' option on the
1321 `Type' menu.
1322
1323 _Width_, _Height_
1324
1325 Size of grid in holes.
1326
1327 _Board type_
1328
1329 Controls whether you are given a board of a standard shape or
1330 a randomly generated shape. The two standard shapes currently
1331 supported are `Cross' and `Octagon' (also commonly known as the
1332 English and European traditional board layouts respectively).
1333 Selecting `Random' will give you a different board shape every
1334 time (but always one that is known to have a solution).
1335
1336Chapter 17: Dominosa
1337--------------------
1338
1339 A normal set of dominoes - that is, one instance of every
1340 (unordered) pair of numbers from 0 to 6 - has been arranged
1341 irregularly into a rectangle; then the number in each square has
1342 been written down and the dominoes themselves removed. Your task is
1343 to reconstruct the pattern by arranging the set of dominoes to match
1344 the provided array of numbers.
1345
1346 This puzzle is widely credited to O. S. Adler, and takes part of its
1347 name from those initials.
1348
1349 17.1 Dominosa controls
1350
1351 Left-clicking between any two adjacent numbers places a domino
1352 covering them, or removes one if it is already present. Trying to
1353 place a domino which overlaps existing dominoes will remove the ones
1354 it overlaps.
1355
1356 Right-clicking between two adjacent numbers draws a line between
1357 them, which you can use to remind yourself that you know those two
1358 numbers are _not_ covered by a single domino. Right-clicking again
1359 removes the line.
1360
1361 You can also use the cursor keys to move a cursor around the grid.
1362 When the cursor is half way between two adjacent numbers, pressing
1363 the return key will place a domino covering those numbers, or
1364 pressing the space bar will lay a line between the two squares.
1365 Repeating either action removes the domino or line.
1366
1367 Pressing a number key will highlight all occurrences of that number.
1368 Pressing that number again will clear the highlighting. Up to two
1369 different numbers can be highlighted at any given time.
1370
1371 (All the actions described in section 2.1 are also available.)
1372
1373 17.2 Dominosa parameters
1374
1375 These parameters are available from the `Custom...' option on the
1376 `Type' menu.
1377
1378 _Maximum number on dominoes_
1379
1380 Controls the size of the puzzle, by controlling the size of the
1381 set of dominoes used to make it. Dominoes with numbers going
1382 up to N will give rise to an (N+2) x (N+1) rectangle; so, in
1383 particular, the default value of 6 gives an 8x7 grid.
1384
1385 _Ensure unique solution_
1386
1387 Normally, Dominosa will make sure that the puzzles it presents
1388 have only one solution. Puzzles with ambiguous sections can be
1389 more difficult and sometimes more subtle, so if you like you
1390 can turn off this feature. Also, finding _all_ the possible
1391 solutions can be an additional challenge for an advanced player.
1392 Turning off this option can also speed up puzzle generation.
1393
1394Chapter 18: Untangle
1395--------------------
1396
1397 You are given a number of points, some of which have lines drawn
1398 between them. You can move the points about arbitrarily; your aim is
1399 to position the points so that no line crosses another.
1400
1401 I originally saw this in the form of a Flash game called Planarity
1402 [7], written by John Tantalo.
1403
1404 [7] http://planarity.net
1405
1406 18.1 Untangle controls
1407
1408 To move a point, click on it with the left mouse button and drag it
1409 into a new position.
1410
1411 (All the actions described in section 2.1 are also available.)
1412
1413 18.2 Untangle parameters
1414
1415 There is only one parameter available from the `Custom...' option on
1416 the `Type' menu:
1417
1418 _Number of points_
1419
1420 Controls the size of the puzzle, by specifying the number of
1421 points in the generated graph.
1422
1423Chapter 19: Black Box
1424---------------------
1425
1426 A number of balls are hidden in a rectangular arena. You have to
1427 deduce the positions of the balls by firing lasers positioned at the
1428 edges of the arena and observing how their beams are deflected.
1429
1430 Beams will travel straight from their origin until they hit the
1431 opposite side of the arena (at which point they emerge), unless
1432 affected by balls in one of the following ways:
1433
1434 - A beam that hits a ball head-on is absorbed and will never re-
1435 emerge. This includes beams that meet a ball on the first rank
1436 of the arena.
1437
1438 - A beam with a ball in its front-left square and no ball ahead of
1439 it gets deflected 90 degrees to the right.
1440
1441 - A beam with a ball in its front-right square and no ball ahead
1442 of it gets similarly deflected to the left.
1443
1444 - A beam that would re-emerge from its entry location is
1445 considered to be `reflected'.
1446
1447 - A beam which would get deflected before entering the arena by a
1448 ball to the front-left or front-right of its entry point is also
1449 considered to be `reflected'.
1450
1451 Beams that are reflected appear as a `R'; beams that hit balls head-
1452 on appear as `H'. Otherwise, a number appears at the firing point
1453 and the location where the beam emerges (this number is unique to
1454 that shot).
1455
1456 You can place guesses as to the location of the balls, based on the
1457 entry and exit patterns of the beams; once you have placed enough
1458 balls a button appears enabling you to have your guesses checked.
1459
1460 Here is a diagram showing how the positions of balls can create each
1461 of the beam behaviours shown above:
1462
1463 1RHR----
1464 |..O.O...|
1465 2........3
1466 |........|
1467 |........|
1468 3........|
1469 |......O.|
1470 H........|
1471 |.....O..|
1472 12-RR---
1473
1474 As shown, it is possible for a beam to receive multiple reflections
1475 before re-emerging (see turn 3). Similarly, a beam may be reflected
1476 (possibly more than once) before receiving a hit (the `H' on the
1477 left side of the example).
1478
1479 Note that any layout with more than 4 balls may have a non-unique
1480 solution. The following diagram illustrates this; if you know the
1481 board contains 5 balls, it is impossible to determine where the
1482 fifth ball is (possible positions marked with an x):
1483
1484 --------
1485 |........|
1486 |........|
1487 |..O..O..|
1488 |...xx...|
1489 |...xx...|
1490 |..O..O..|
1491 |........|
1492 |........|
1493 --------
1494
1495 For this reason, when you have your guesses checked, the game
1496 will check that your solution _produces the same results_ as the
1497 computer's, rather than that your solution is identical to the
1498 computer's. So in the above example, you could put the fifth ball at
1499 _any_ of the locations marked with an x, and you would still win.
1500
1501 Black Box was contributed to this collection by James Harvey.
1502
1503 19.1 Black Box controls
1504
1505 To fire a laser beam, left-click in a square around the edge of
1506 the arena. The results will be displayed immediately. Clicking or
1507 holding the left button on one of these squares will highlight the
1508 current go (or a previous go) to confirm the exit point for that
1509 laser, if applicable.
1510
1511 To guess the location of a ball, left-click within the arena and a
1512 black circle will appear marking the guess; click again to remove
1513 the guessed ball.
1514
1515 Locations in the arena may be locked against modification by right-
1516 clicking; whole rows and columns may be similarly locked by right-
1517 clicking in the laser square above/below that column, or to the
1518 left/right of that row.
1519
1520 The cursor keys may also be used to move around the grid. Pressing
1521 the Enter key will fire a laser or add a new ball-location guess,
1522 and pressing Space will lock a cell, row, or column.
1523
1524 When an appropriate number of balls have been guessed, a button will
1525 appear at the top-left corner of the grid; clicking that (with mouse
1526 or cursor) will check your guesses.
1527
1528 If you click the `check' button and your guesses are not correct,
1529 the game will show you the minimum information necessary to
1530 demonstrate this to you, so you can try again. If your ball
1531 positions are not consistent with the beam paths you already know
1532 about, one beam path will be circled to indicate that it proves you
1533 wrong. If your positions match all the existing beam paths but are
1534 still wrong, one new beam path will be revealed (written in red)
1535 which is not consistent with your current guesses.
1536
1537 If you decide to give up completely, you can select Solve to reveal
1538 the actual ball positions. At this point, correctly-placed balls
1539 will be displayed as filled black circles, incorrectly-placed balls
1540 as filled black circles with red crosses, and missing balls as
1541 filled red circles. In addition, a red circle marks any laser you
1542 had already fired which is not consistent with your ball layout
1543 (just as when you press the `check' button), and red text marks
1544 any laser you _could_ have fired in order to distinguish your ball
1545 layout from the correct one.
1546
1547 (All the actions described in section 2.1 are also available.)
1548
1549 19.2 Black Box parameters
1550
1551 These parameters are available from the `Custom...' option on the
1552 `Type' menu.
1553
1554 _Width_, _Height_
1555
1556 Size of grid in squares. There are 2 x _Width_ x _Height_ lasers
1557 per grid, two per row and two per column.
1558
1559 _No. of balls_
1560
1561 Number of balls to place in the grid. This can be a single
1562 number, or a range (separated with a hyphen, like `2-6'),
1563 and determines the number of balls to place on the grid.
1564 The `reveal' button is only enabled if you have guessed an
1565 appropriate number of balls; a guess using a different number
1566 to the original solution is still acceptable, if all the beam
1567 inputs and outputs match.
1568
1569Chapter 20: Slant
1570-----------------
1571
1572 You have a grid of squares. Your aim is to draw a diagonal line
1573 through each square, and choose which way each line slants so that
1574 the following conditions are met:
1575
1576 - The diagonal lines never form a loop.
1577
1578 - Any point with a circled number has precisely that many lines
1579 meeting at it. (Thus, a 4 is the centre of a cross shape,
1580 whereas a zero is the centre of a diamond shape - or rather, a
1581 partial diamond shape, because a zero can never appear in the
1582 middle of the grid because that would immediately cause a loop.)
1583
1584 Credit for this puzzle goes to Nikoli [8].
1585
1586 [8] http://www.nikoli.co.jp/ja/puzzles/gokigen_naname (in Japanese)
1587
1588 20.1 Slant controls
1589
1590 Left-clicking in a blank square will place a \ in it (a line leaning
1591 to the left, i.e. running from the top left of the square to the
1592 bottom right). Right-clicking in a blank square will place a / in it
1593 (leaning to the right, running from top right to bottom left).
1594
1595 Continuing to click either button will cycle between the three
1596 possible square contents. Thus, if you left-click repeatedly in a
1597 blank square it will change from blank to \ to / back to blank, and
1598 if you right-click repeatedly the square will change from blank to /
1599 to \ back to blank. (Therefore, you can play the game entirely with
1600 one button if you need to.)
1601
1602 You can also use the cursor keys to move around the grid. Pressing
1603 the return or space keys will place a \ or a /, respectively, and
1604 will then cycle them as above. You can also press / or \ to place a
1605 / or \, respectively, independent of what is already in the cursor
1606 square. Backspace removes any line from the cursor square.
1607
1608 (All the actions described in section 2.1 are also available.)
1609
1610 20.2 Slant parameters
1611
1612 These parameters are available from the `Custom...' option on the
1613 `Type' menu.
1614
1615 _Width_, _Height_
1616
1617 Size of grid in squares.
1618
1619 _Difficulty_
1620
1621 Controls the difficulty of the generated puzzle. At Hard
1622 level, you are required to do deductions based on knowledge of
1623 _relationships_ between squares rather than always being able to
1624 deduce the exact contents of one square at a time. (For example,
1625 you might know that two squares slant in the same direction,
1626 even if you don't yet know what that direction is, and this
1627 might enable you to deduce something about still other squares.)
1628 Even at Hard level, guesswork and backtracking should never be
1629 necessary.
1630
1631Chapter 21: Light Up
1632--------------------
1633
1634 You have a grid of squares. Some are filled in black; some of the
1635 black squares are numbered. Your aim is to `light up' all the empty
1636 squares by placing light bulbs in some of them.
1637
1638 Each light bulb illuminates the square it is on, plus all squares
1639 in line with it horizontally or vertically unless a black square is
1640 blocking the way.
1641
1642 To win the game, you must satisfy the following conditions:
1643
1644 - All non-black squares are lit.
1645
1646 - No light is lit by another light.
1647
1648 - All numbered black squares have exactly that number of lights
1649 adjacent to them (in the four squares above, below, and to the
1650 side).
1651
1652 Non-numbered black squares may have any number of lights adjacent to
1653 them.
1654
1655 Credit for this puzzle goes to Nikoli [9].
1656
1657 Light Up was contributed to this collection by James Harvey.
1658
1659 [9] http://www.nikoli.co.jp/en/puzzles/akari.html (beware of Flash)
1660
1661 21.1 Light Up controls
1662
1663 Left-clicking in a non-black square will toggle the presence of a
1664 light in that square. Right-clicking in a non-black square toggles a
1665 mark there to aid solving; it can be used to highlight squares that
1666 cannot be lit, for example.
1667
1668 You may not place a light in a marked square, nor place a mark in a
1669 lit square.
1670
1671 The game will highlight obvious errors in red. Lights lit by other
1672 lights are highlighted in this way, as are numbered squares which do
1673 not (or cannot) have the right number of lights next to them.
1674
1675 Thus, the grid is solved when all non-black squares have yellow
1676 highlights and there are no red lights.
1677
1678 (All the actions described in section 2.1 are also available.)
1679
1680 21.2 Light Up parameters
1681
1682 These parameters are available from the `Custom...' option on the
1683 `Type' menu.
1684
1685 _Width_, _Height_
1686
1687 Size of grid in squares.
1688
1689 _%age of black squares_
1690
1691 Rough percentage of black squares in the grid.
1692
1693 This is a hint rather than an instruction. If the grid generator
1694 is unable to generate a puzzle to this precise specification, it
1695 will increase the proportion of black squares until it can.
1696
1697 _Symmetry_
1698
1699 Allows you to specify the required symmetry of the black squares
1700 in the grid. (This does not affect the difficulty of the puzzles
1701 noticeably.)
1702
1703 _Difficulty_
1704
1705 `Easy' means that the puzzles should be soluble without
1706 backtracking or guessing, `Hard' means that some guesses will
1707 probably be necessary.
1708
1709Chapter 22: Map
1710---------------
1711
1712 You are given a map consisting of a number of regions. Your task is
1713 to colour each region with one of four colours, in such a way that
1714 no two regions sharing a boundary have the same colour. You are
1715 provided with some regions already coloured, sufficient to make the
1716 remainder of the solution unique.
1717
1718 Only regions which share a length of border are required to be
1719 different colours. Two regions which meet at only one _point_ (i.e.
1720 are diagonally separated) may be the same colour.
1721
1722 I believe this puzzle is original; I've never seen an implementation
1723 of it anywhere else. The concept of a four-colouring puzzle was
1724 suggested by Owen Dunn; credit must also go to Nikoli and to Verity
1725 Allan for inspiring the train of thought that led to me realising
1726 Owen's suggestion was a viable puzzle. Thanks also to Gareth Taylor
1727 for many detailed suggestions.
1728
1729 22.1 Map controls
1730
1731 To colour a region, click the left mouse button on an existing
1732 region of the desired colour and drag that colour into the new
1733 region.
1734
1735 (The program will always ensure the starting puzzle has at least one
1736 region of each colour, so that this is always possible!)
1737
1738 If you need to clear a region, you can drag from an empty region, or
1739 from the puzzle boundary if there are no empty regions left.
1740
1741 Dragging a colour using the _right_ mouse button will stipple the
1742 region in that colour, which you can use as a note to yourself that
1743 you think the region _might_ be that colour. A region can contain
1744 stipples in multiple colours at once. (This is often useful at the
1745 harder difficulty levels.)
1746
1747 You can also use the cursor keys to move around the map: the colour
1748 of the cursor indicates the position of the colour you would drag
1749 (which is not obvious if you're on a region's boundary, since it
1750 depends on the direction from which you approached the boundary).
1751 Pressing the return key starts a drag of that colour, as above,
1752 which you control with the cursor keys; pressing the return key
1753 again finishes the drag. The space bar can be used similarly to
1754 create a stippled region. Double-pressing the return key (without
1755 moving the cursor) will clear the region, as a drag from an empty
1756 region does: this is useful with the cursor mode if you have filled
1757 the entire map in but need to correct the layout.
1758
1759 If you press L during play, the game will toggle display of a number
1760 in each region of the map. This is useful if you want to discuss a
1761 particular puzzle instance with a friend - having an unambiguous
1762 name for each region is much easier than trying to refer to them all
1763 by names such as `the one down and right of the brown one on the top
1764 border'.
1765
1766 (All the actions described in section 2.1 are also available.)
1767
1768 22.2 Map parameters
1769
1770 These parameters are available from the `Custom...' option on the
1771 `Type' menu.
1772
1773 _Width_, _Height_
1774
1775 Size of grid in squares.
1776
1777 _Regions_
1778
1779 Number of regions in the generated map.
1780
1781 _Difficulty_
1782
1783 In `Easy' mode, there should always be at least one region whose
1784 colour can be determined trivially. In `Normal' and `Hard'
1785 modes, you will have to use increasingly complex logic to deduce
1786 the colour of some regions. However, it will always be possible
1787 without having to guess or backtrack.
1788
1789 In `Unreasonable' mode, the program will feel free to generate
1790 puzzles which are as hard as it can possibly make them: the
1791 only constraint is that they should still have a unique
1792 solution. Solving Unreasonable puzzles may require guessing and
1793 backtracking.
1794
1795Chapter 23: Loopy
1796-----------------
1797
1798 You are given a grid of dots, marked with yellow lines to indicate
1799 which dots you are allowed to connect directly together. Your aim is
1800 to use some subset of those yellow lines to draw a single unbroken
1801 loop from dot to dot within the grid.
1802
1803 Some of the spaces between the lines contain numbers. These numbers
1804 indicate how many of the lines around that space form part of the
1805 loop. The loop you draw must correctly satisfy all of these clues to
1806 be considered a correct solution.
1807
1808 In the default mode, the dots are arranged in a grid of squares;
1809 however, you can also play on triangular or hexagonal grids, or even
1810 more exotic ones.
1811
1812 Credit for the basic puzzle idea goes to Nikoli [10].
1813
1814 Loopy was originally contributed to this collection by Mike Pinna,
1815 and subsequently enhanced to handle various types of non-square grid
1816 by Lambros Lambrou.
1817
1818 [10] http://www.nikoli.co.jp/en/puzzles/slitherlink.html (beware of
1819 Flash)
1820
1821 23.1 Loopy controls
1822
1823 Click the left mouse button on a yellow line to turn it black,
1824 indicating that you think it is part of the loop. Click again to
1825 turn the line yellow again (meaning you aren't sure yet).
1826
1827 If you are sure that a particular line segment is _not_ part of the
1828 loop, you can click the right mouse button to remove it completely.
1829 Again, clicking a second time will turn the line back to yellow.
1830
1831 (All the actions described in section 2.1 are also available.)
1832
1833 23.2 Loopy parameters
1834
1835 These parameters are available from the `Custom...' option on the
1836 `Type' menu.
1837
1838 _Width_, _Height_
1839
1840 Size of grid, measured in number of regions across and down. For
1841 square grids, it's clear how this is counted; for other types of
1842 grid you may have to think a bit to see how the dimensions are
1843 measured.
1844
1845 _Grid type_
1846
1847 Allows you to choose between a selection of types of tiling.
1848 Some have all the faces the same but may have multiple different
1849 types of vertex (e.g. the _Cairo_ or _Kites_ mode); others
1850 have all the vertices the same but may have different types of
1851 face (e.g. the _Great Hexagonal_). The square, triangular and
1852 honeycomb grids are fully regular, and have all their vertices
1853 _and_ faces the same; this makes them the least confusing to
1854 play.
1855
1856 _Difficulty_
1857
1858 Controls the difficulty of the generated puzzle.
1859
1860Chapter 24: Inertia
1861-------------------
1862
1863 You are a small green ball sitting in a grid full of obstacles. Your
1864 aim is to collect all the gems without running into any mines.
1865
1866 You can move the ball in any orthogonal _or diagonal_ direction.
1867 Once the ball starts moving, it will continue until something stops
1868 it. A wall directly in its path will stop it (but if it is moving
1869 diagonally, it will move through a diagonal gap between two other
1870 walls without stopping). Also, some of the squares are `stops'; when
1871 the ball moves on to a stop, it will stop moving no matter what
1872 direction it was going in. Gems do _not_ stop the ball; it picks
1873 them up and keeps on going.
1874
1875 Running into a mine is fatal. Even if you picked up the last gem in
1876 the same move which then hit a mine, the game will count you as dead
1877 rather than victorious.
1878
1879 This game was originally implemented for Windows by Ben Olmstead
1880 [11], who was kind enough to release his source code on request so
1881 that it could be re-implemented for this collection.
1882
1883 [11] http://xn13.com/
1884
1885 24.1 Inertia controls
1886
1887 You can move the ball in any of the eight directions using the
1888 numeric keypad. Alternatively, if you click the left mouse button
1889 on the grid, the ball will begin a move in the general direction of
1890 where you clicked.
1891
1892 If you use the `Solve' function on this game, the program will
1893 compute a path through the grid which collects all the remaining
1894 gems and returns to the current position. A hint arrow will appear
1895 on the ball indicating the direction in which you should move to
1896 begin on this path. If you then move in that direction, the arrow
1897 will update to indicate the next direction on the path. You can
1898 also press Space to automatically move in the direction of the hint
1899 arrow. If you move in a different direction from the one shown
1900 by the arrow, arrows will be shown only if the puzzle is still
1901 solvable.
1902
1903 All the actions described in section 2.1 are also available. In
1904 particular, if you do run into a mine and die, you can use the Undo
1905 function and resume playing from before the fatal move. The game
1906 will keep track of the number of times you have done this.
1907
1908 24.2 Inertia parameters
1909
1910 These parameters are available from the `Custom...' option on the
1911 `Type' menu.
1912
1913 _Width_, _Height_
1914
1915 Size of grid in squares.
1916
1917Chapter 25: Tents
1918-----------------
1919
1920 You have a grid of squares, some of which contain trees. Your aim is
1921 to place tents in some of the remaining squares, in such a way that
1922 the following conditions are met:
1923
1924 - There are exactly as many tents as trees.
1925
1926 - The tents and trees can be matched up in such a way that each
1927 tent is directly adjacent (horizontally or vertically, but not
1928 diagonally) to its own tree. However, a tent may be adjacent to
1929 other trees as well as its own.
1930
1931 - No two tents are adjacent horizontally, vertically _or
1932 diagonally_.
1933
1934 - The number of tents in each row, and in each column, matches the
1935 numbers given round the sides of the grid.
1936
1937 This puzzle can be found in several places on the Internet, and was
1938 brought to my attention by e-mail. I don't know who I should credit
1939 for inventing it.
1940
1941 25.1 Tents controls
1942
1943 Left-clicking in a blank square will place a tent in it. Right-
1944 clicking in a blank square will colour it green, indicating that you
1945 are sure it _isn't_ a tent. Clicking either button in an occupied
1946 square will clear it.
1947
1948 If you _drag_ with the right button along a row or column, every
1949 blank square in the region you cover will be turned green, and no
1950 other squares will be affected. (This is useful for clearing the
1951 remainder of a row once you have placed all its tents.)
1952
1953 You can also use the cursor keys to move around the grid. Pressing
1954 the return key over an empty square will place a tent, and pressing
1955 the space bar over an empty square will colour it green; either key
1956 will clear an occupied square. Holding Shift and pressing the cursor
1957 keys will colour empty squares green. Holding Control and pressing
1958 the cursor keys will colour green both empty squares and squares
1959 with tents.
1960
1961 (All the actions described in section 2.1 are also available.)
1962
1963 25.2 Tents parameters
1964
1965 These parameters are available from the `Custom...' option on the
1966 `Type' menu.
1967
1968 _Width_, _Height_
1969
1970 Size of grid in squares.
1971
1972 _Difficulty_
1973
1974 Controls the difficulty of the generated puzzle. More difficult
1975 puzzles require more complex deductions, but at present none
1976 of the available difficulty levels requires guesswork or
1977 backtracking.
1978
1979Chapter 26: Bridges
1980-------------------
1981
1982 You have a set of islands distributed across the playing area.
1983 Each island contains a number. Your aim is to connect the islands
1984 together with bridges, in such a way that:
1985
1986 - Bridges run horizontally or vertically.
1987
1988 - The number of bridges terminating at any island is equal to the
1989 number written in that island.
1990
1991 - Two bridges may run in parallel between the same two islands,
1992 but no more than two may do so.
1993
1994 - No bridge crosses another bridge.
1995
1996 - All the islands are connected together.
1997
1998 There are some configurable alternative modes, which involve
1999 changing the parallel-bridge limit to something other than 2, and
2000 introducing the additional constraint that no sequence of bridges
2001 may form a loop from one island back to the same island. The rules
2002 stated above are the default ones.
2003
2004 Credit for this puzzle goes to Nikoli [12].
2005
2006 Bridges was contributed to this collection by James Harvey.
2007
2008 [12] http://www.nikoli.co.jp/en/puzzles/hashiwokakero.html (beware
2009 of Flash)
2010
2011 26.1 Bridges controls
2012
2013 To place a bridge between two islands, click the mouse down on one
2014 island and drag it towards the other. You do not need to drag all
2015 the way to the other island; you only need to move the mouse far
2016 enough for the intended bridge direction to be unambiguous. (So you
2017 can keep the mouse near the starting island and conveniently throw
2018 bridges out from it in many directions.)
2019
2020 Doing this again when a bridge is already present will add another
2021 parallel bridge. If there are already as many bridges between the
2022 two islands as permitted by the current game rules (i.e. two by
2023 default), the same dragging action will remove all of them.
2024
2025 If you want to remind yourself that two islands definitely _do not_
2026 have a bridge between them, you can right-drag between them in the
2027 same way to draw a `non-bridge' marker.
2028
2029 If you think you have finished with an island (i.e. you have placed
2030 all its bridges and are confident that they are in the right
2031 places), you can mark the island as finished by left-clicking on it.
2032 This will highlight it and all the bridges connected to it, and you
2033 will be prevented from accidentally modifying any of those bridges
2034 in future. Left-clicking again on a highlighted island will unmark
2035 it and restore your ability to modify it.
2036
2037 You can also use the cursor keys to move around the grid: if
2038 possible the cursor will always move orthogonally, otherwise it
2039 will move towards the nearest island to the indicated direction.
2040 Holding Control and pressing a cursor key will lay a bridge in that
2041 direction (if available); Shift and a cursor key will lay a `non-
2042 bridge' marker. Pressing the return key followed by a cursor key
2043 will also lay a bridge in that direction.
2044
2045 You can mark an island as finished by pressing the space bar or by
2046 pressing the return key twice.
2047
2048 By pressing a number key, you can jump to the nearest island with
2049 that number. Letters `a', ..., `f' count as 10, ..., 15 and `0' as
2050 16.
2051
2052 Violations of the puzzle rules will be marked in red:
2053
2054 - An island with too many bridges will be highlighted in red.
2055
2056 - An island with too few bridges will be highlighted in red if it
2057 is definitely an error (as opposed to merely not being finished
2058 yet): if adding enough bridges would involve having to cross
2059 another bridge or remove a non-bridge marker, or if the island
2060 has been highlighted as complete.
2061
2062 - A group of islands and bridges may be highlighted in red if it
2063 is a closed subset of the puzzle with no way to connect it to
2064 the rest of the islands. For example, if you directly connect
2065 two 1s together with a bridge and they are not the only two
2066 islands on the grid, they will light up red to indicate that
2067 such a group cannot be contained in any valid solution.
2068
2069 - If you have selected the (non-default) option to disallow loops
2070 in the solution, a group of bridges which forms a loop will be
2071 highlighted.
2072
2073 (All the actions described in section 2.1 are also available.)
2074
2075 26.2 Bridges parameters
2076
2077 These parameters are available from the `Custom...' option on the
2078 `Type' menu.
2079
2080 _Width_, _Height_
2081
2082 Size of grid in squares.
2083
2084 _Difficulty_
2085
2086 Difficulty level of puzzle.
2087
2088 _Allow loops_
2089
2090 This is set by default. If cleared, puzzles will be generated in
2091 such a way that they are always soluble without creating a loop,
2092 and solutions which do involve a loop will be disallowed.
2093
2094 _Max. bridges per direction_
2095
2096 Maximum number of bridges in any particular direction. The
2097 default is 2, but you can change it to 1, 3 or 4. In general,
2098 fewer is easier.
2099
2100 _%age of island squares_
2101
2102 Gives a rough percentage of islands the generator will try and
2103 lay before finishing the puzzle. Certain layouts will not manage
2104 to lay enough islands; this is an upper bound.
2105
2106 _Expansion factor (%age)_
2107
2108 The grid generator works by picking an existing island at random
2109 (after first creating an initial island somewhere). It then
2110 decides on a direction (at random), and then works out how far
2111 it could extend before creating another island. This parameter
2112 determines how likely it is to extend as far as it can, rather
2113 than choosing somewhere closer.
2114
2115 High expansion factors usually mean easier puzzles with fewer
2116 possible islands; low expansion factors can create lots of
2117 tightly-packed islands.
2118
2119Chapter 27: Unequal
2120-------------------
2121
2122 You have a square grid; each square may contain a digit from 1 to
2123 the size of the grid, and some squares have clue signs between them.
2124 Your aim is to fully populate the grid with numbers such that:
2125
2126 - Each row contains only one occurrence of each digit
2127
2128 - Each column contains only one occurrence of each digit
2129
2130 - All the clue signs are satisfied.
2131
2132 There are two modes for this game, `Unequal' and `Adjacent'.
2133
2134 In `Unequal' mode, the clue signs are greater-than symbols
2135 indicating one square's value is greater than its neighbour's. In
2136 this mode not all clues may be visible, particularly at higher
2137 difficulty levels.
2138
2139 In `Adjacent' mode, the clue signs are bars indicating one square's
2140 value is numerically adjacent (i.e. one higher or one lower) than
2141 its neighbour. In this mode all clues are always visible: absence of
2142 a bar thus means that a square's value is definitely not numerically
2143 adjacent to that neighbour's.
2144
2145 In `Trivial' difficulty level (available via the `Custom' game type
2146 selector), there are no greater-than signs in `Unequal' mode; the
2147 puzzle is to solve the Latin square only.
2148
2149 At the time of writing, the `Unequal' mode of this puzzle is
2150 appearing in the Guardian weekly under the name `Futoshiki'.
2151
2152 Unequal was contributed to this collection by James Harvey.
2153
2154 27.1 Unequal controls
2155
2156 Unequal shares much of its control system with Solo.
2157
2158 To play Unequal, simply click the mouse in any empty square and then
2159 type a digit or letter on the keyboard to fill that square. If you
2160 make a mistake, click the mouse in the incorrect square and press
2161 Space to clear it again (or use the Undo feature).
2162
2163 If you _right_-click in a square and then type a number, that
2164 number will be entered in the square as a `pencil mark'. You can
2165 have pencil marks for multiple numbers in the same square. Squares
2166 containing filled-in numbers cannot also contain pencil marks.
2167
2168 The game pays no attention to pencil marks, so exactly what you
2169 use them for is up to you: you can use them as reminders that a
2170 particular square needs to be re-examined once you know more about
2171 a particular number, or you can use them as lists of the possible
2172 numbers in a given square, or anything else you feel like.
2173
2174 To erase a single pencil mark, right-click in the square and type
2175 the same number again.
2176
2177 All pencil marks in a square are erased when you left-click and type
2178 a number, or when you left-click and press space. Right-clicking and
2179 pressing space will also erase pencil marks.
2180
2181 As for Solo, the cursor keys can be used in conjunction with the
2182 digit keys to set numbers or pencil marks. You can also use the `M'
2183 key to auto-fill every numeric hint, ready for removal as required,
2184 or the `H' key to do the same but also to remove all obvious hints.
2185
2186 Alternatively, use the cursor keys to move the mark around the grid.
2187 Pressing the return key toggles the mark (from a normal mark to a
2188 pencil mark), and typing a number in is entered in the square in the
2189 appropriate way; typing in a 0 or using the space bar will clear a
2190 filled square.
2191
2192 Left-clicking a clue will mark it as done (grey it out), or unmark
2193 it if it is already marked. Holding Control or Shift and pressing
2194 an arrow key likewise marks any clue adjacent to the cursor in the
2195 given direction.
2196
2197 (All the actions described in section 2.1 are also available.)
2198
2199 27.2 Unequal parameters
2200
2201 These parameters are available from the `Custom...' option on the
2202 `Type' menu.
2203
2204 _Mode_
2205
2206 Mode of the puzzle (`Unequal' or `Adjacent')
2207
2208 _Size (s*s)_
2209
2210 Size of grid.
2211
2212 _Difficulty_
2213
2214 Controls the difficulty of the generated puzzle. At Trivial
2215 level, there are no greater-than signs; the puzzle is to solve
2216 the Latin square only. At Recursive level (only available via
2217 the `Custom' game type selector) backtracking will be required,
2218 but the solution should still be unique. The levels in between
2219 require increasingly complex reasoning to avoid having to
2220 backtrack.
2221
2222Chapter 28: Galaxies
2223--------------------
2224
2225 You have a rectangular grid containing a number of dots. Your aim is
2226 to draw edges along the grid lines which divide the rectangle into
2227 regions in such a way that every region is 180-degree rotationally
2228 symmetric, and contains exactly one dot which is located at its
2229 centre of symmetry.
2230
2231 This puzzle was invented by Nikoli [13], under the name `Tentai
2232 Show'; its name is commonly translated into English as `Spiral
2233 Galaxies'.
2234
2235 Galaxies was contributed to this collection by James Harvey.
2236
2237 [13] http://www.nikoli.co.jp/en/puzzles/astronomical_show.html
2238
2239 28.1 Galaxies controls
2240
2241 Left-click on any grid line to draw an edge if there isn't one
2242 already, or to remove one if there is. When you create a valid
2243 region (one which is closed, contains exactly one dot, is 180-degree
2244 symmetric about that dot, and contains no extraneous edges inside
2245 it) it will be highlighted automatically; so your aim is to have the
2246 whole grid highlighted in that way.
2247
2248 During solving, you might know that a particular grid square belongs
2249 to a specific dot, but not be sure of where the edges go and which
2250 other squares are connected to the dot. In order to mark this so you
2251 don't forget, you can right-click on the dot and drag, which will
2252 create an arrow marker pointing at the dot. Drop that in a square of
2253 your choice and it will remind you which dot it's associated with.
2254 You can also right-click on existing arrows to pick them up and move
2255 them, or destroy them by dropping them off the edge of the grid.
2256 (Also, if you're not sure which dot an arrow is pointing at, you can
2257 pick it up and move it around to make it clearer. It will swivel
2258 constantly as you drag it, to stay pointed at its parent dot.)
2259
2260 You can also use the cursor keys to move around the grid squares and
2261 lines. Pressing the return key when over a grid line will draw or
2262 clear its edge, as above. Pressing the return key when over a dot
2263 will pick up an arrow, to be dropped the next time the return key
2264 is pressed; this can also be used to move existing arrows around,
2265 removing them by dropping them on a dot or another arrow.
2266
2267 (All the actions described in section 2.1 are also available.)
2268
2269 28.2 Galaxies parameters
2270
2271 These parameters are available from the `Custom...' option on the
2272 `Type' menu.
2273
2274 _Width_, _Height_
2275
2276 Size of grid in squares.
2277
2278 _Difficulty_
2279
2280 Controls the difficulty of the generated puzzle. More difficult
2281 puzzles require more complex deductions, and the `Unreasonable'
2282 difficulty level may require backtracking.
2283
2284Chapter 29: Filling
2285-------------------
2286
2287 You have a grid of squares, some of which contain digits, and the
2288 rest of which are empty. Your job is to fill in digits in the empty
2289 squares, in such a way that each connected region of squares all
2290 containing the same digit has an area equal to that digit.
2291
2292 (`Connected region', for the purposes of this game, does not count
2293 diagonally separated squares as adjacent.)
2294
2295 For example, it follows that no square can contain a zero, and that
2296 two adjacent squares can not both contain a one. No region has an
2297 area greater than 9 (because then its area would not be a single
2298 digit).
2299
2300 Credit for this puzzle goes to Nikoli [14].
2301
2302 Filling was contributed to this collection by Jonas Koelker.
2303
2304 [14] http://www.nikoli.co.jp/en/puzzles/fillomino.html
2305
2306 29.1 Filling controls
2307
2308 To play Filling, simply click the mouse in any empty square and
2309 then type a digit on the keyboard to fill that square. By dragging
2310 the mouse, you can select multiple squares to fill with a single
2311 keypress. If you make a mistake, click the mouse in the incorrect
2312 square and press 0, Space, Backspace or Enter to clear it again (or
2313 use the Undo feature).
2314
2315 You can also move around the grid with the cursor keys; typing a
2316 digit will fill the square containing the cursor with that number;
2317 typing 0 will clear it. You can also select multiple squares for
2318 numbering or clearing with the return and arrow keys, before typing
2319 a digit to fill or clear the highlighted squares (as above). The
2320 space bar adds and removes single squares to and from the selection.
2321 Backspace and escape remove all squares from the selection.
2322
2323 (All the actions described in section 2.1 are also available.)
2324
2325 29.2 Filling parameters
2326
2327 Filling allows you to configure the number of rows and columns of
2328 the grid, through the `Type' menu.
2329
2330Chapter 30: Keen
2331----------------
2332
2333 You have a square grid; each square may contain a digit from 1 to
2334 the size of the grid. The grid is divided into blocks of varying
2335 shape and size, with arithmetic clues written in them. Your aim is
2336 to fully populate the grid with digits such that:
2337
2338 - Each row contains only one occurrence of each digit
2339
2340 - Each column contains only one occurrence of each digit
2341
2342 - The digits in each block can be combined to form the number
2343 stated in the clue, using the arithmetic operation given in the
2344 clue. That is:
2345
2346 - An addition clue means that the sum of the digits in the
2347 block must be the given number. For example, `15+' means the
2348 contents of the block adds up to fifteen.
2349
2350 - A multiplication clue (e.g. `60*'), similarly, means that
2351 the product of the digits in the block must be the given
2352 number.
2353
2354 - A subtraction clue will always be written in a block of
2355 size two, and it means that one of the digits in the block
2356 is greater than the other by the given amount. For example,
2357 `2-' means that one of the digits in the block is 2 more
2358 than the other, or equivalently that one digit minus the
2359 other one is 2. The two digits could be either way round,
2360 though.
2361
2362 - A division clue (e.g. `3/'), similarly, is always in a block
2363 of size two and means that one digit divided by the other is
2364 equal to the given amount.
2365
2366 Note that a block may contain the same digit more than once
2367 (provided the identical ones are not in the same row and
2368 column). This rule is precisely the opposite of the rule in
2369 Solo's `Killer' mode (see chapter 11).
2370
2371 This puzzle appears in the Times under the name `KenKen'.
2372
2373 30.1 Keen controls
2374
2375 Keen shares much of its control system with Solo (and Unequal).
2376
2377 To play Keen, simply click the mouse in any empty square and then
2378 type a digit on the keyboard to fill that square. If you make a
2379 mistake, click the mouse in the incorrect square and press Space to
2380 clear it again (or use the Undo feature).
2381
2382 If you _right_-click in a square and then type a number, that
2383 number will be entered in the square as a `pencil mark'. You can
2384 have pencil marks for multiple numbers in the same square. Squares
2385 containing filled-in numbers cannot also contain pencil marks.
2386
2387 The game pays no attention to pencil marks, so exactly what you
2388 use them for is up to you: you can use them as reminders that a
2389 particular square needs to be re-examined once you know more about
2390 a particular number, or you can use them as lists of the possible
2391 numbers in a given square, or anything else you feel like.
2392
2393 To erase a single pencil mark, right-click in the square and type
2394 the same number again.
2395
2396 All pencil marks in a square are erased when you left-click and type
2397 a number, or when you left-click and press space. Right-clicking and
2398 pressing space will also erase pencil marks.
2399
2400 As for Solo, the cursor keys can be used in conjunction with the
2401 digit keys to set numbers or pencil marks. Use the cursor keys to
2402 move a highlight around the grid, and type a digit to enter it in
2403 the highlighted square. Pressing return toggles the highlight into a
2404 mode in which you can enter or remove pencil marks.
2405
2406 Pressing M will fill in a full set of pencil marks in every square
2407 that does not have a main digit in it.
2408
2409 (All the actions described in section 2.1 are also available.)
2410
2411 30.2 Keen parameters
2412
2413 These parameters are available from the `Custom...' option on the
2414 `Type' menu.
2415
2416 _Grid size_
2417
2418 Specifies the size of the grid. Lower limit is 3; upper limit is
2419 9 (because the user interface would become more difficult with
2420 `digits' bigger than 9!).
2421
2422 _Difficulty_
2423
2424 Controls the difficulty of the generated puzzle. At Unreasonable
2425 level, some backtracking will be required, but the solution
2426 should still be unique. The remaining levels require
2427 increasingly complex reasoning to avoid having to backtrack.
2428
2429 _Multiplication only_
2430
2431 If this is enabled, all boxes will be multiplication boxes. With
2432 this rule, the puzzle is known as `Inshi No Heya'.
2433
2434Chapter 31: Towers
2435------------------
2436
2437 You have a square grid. On each square of the grid you can build
2438 a tower, with its height ranging from 1 to the size of the grid.
2439 Around the edge of the grid are some numeric clues.
2440
2441 Your task is to build a tower on every square, in such a way that:
2442
2443 - Each row contains every possible height of tower once
2444
2445 - Each column contains every possible height of tower once
2446
2447 - Each numeric clue describes the number of towers that can be
2448 seen if you look into the square from that direction, assuming
2449 that shorter towers are hidden behind taller ones. For example,
2450 in a 5x5 grid, a clue marked `5' indicates that the five tower
2451 heights must appear in increasing order (otherwise you would
2452 not be able to see all five towers), whereas a clue marked `1'
2453 indicates that the tallest tower (the one marked 5) must come
2454 first.
2455
2456 In harder or larger puzzles, some towers will be specified for you
2457 as well as the clues round the edge, and some edge clues may be
2458 missing.
2459
2460 This puzzle appears on the web under various names, particularly
2461 `Skyscrapers', but I don't know who first invented it.
2462
2463 31.1 Towers controls
2464
2465 Towers shares much of its control system with Solo, Unequal and
2466 Keen.
2467
2468 To play Towers, simply click the mouse in any empty square and then
2469 type a digit on the keyboard to fill that square with a tower of
2470 the given height. If you make a mistake, click the mouse in the
2471 incorrect square and press Space to clear it again (or use the Undo
2472 feature).
2473
2474 If you _right_-click in a square and then type a number, that
2475 number will be entered in the square as a `pencil mark'. You can
2476 have pencil marks for multiple numbers in the same square. A square
2477 containing a tower cannot also contain pencil marks.
2478
2479 The game pays no attention to pencil marks, so exactly what you
2480 use them for is up to you: you can use them as reminders that a
2481 particular square needs to be re-examined once you know more about
2482 a particular number, or you can use them as lists of the possible
2483 numbers in a given square, or anything else you feel like.
2484
2485 To erase a single pencil mark, right-click in the square and type
2486 the same number again.
2487
2488 All pencil marks in a square are erased when you left-click and type
2489 a number, or when you left-click and press space. Right-clicking and
2490 pressing space will also erase pencil marks.
2491
2492 As for Solo, the cursor keys can be used in conjunction with the
2493 digit keys to set numbers or pencil marks. Use the cursor keys to
2494 move a highlight around the grid, and type a digit to enter it in
2495 the highlighted square. Pressing return toggles the highlight into a
2496 mode in which you can enter or remove pencil marks.
2497
2498 Pressing M will fill in a full set of pencil marks in every square
2499 that does not have a main digit in it.
2500
2501 Left-clicking a clue will mark it as done (grey it out), or unmark
2502 it if it is already marked. Holding Control or Shift and pressing an
2503 arrow key likewise marks any clue in the given direction.
2504
2505 (All the actions described in section 2.1 are also available.)
2506
2507 31.2 Towers parameters
2508
2509 These parameters are available from the `Custom...' option on the
2510 `Type' menu.
2511
2512 _Grid size_
2513
2514 Specifies the size of the grid. Lower limit is 3; upper limit is
2515 9 (because the user interface would become more difficult with
2516 `digits' bigger than 9!).
2517
2518 _Difficulty_
2519
2520 Controls the difficulty of the generated puzzle. At Unreasonable
2521 level, some backtracking will be required, but the solution
2522 should still be unique. The remaining levels require
2523 increasingly complex reasoning to avoid having to backtrack.
2524
2525Chapter 32: Singles
2526-------------------
2527
2528 You have a grid of white squares, all of which contain numbers. Your
2529 task is to colour some of the squares black (removing the number) so
2530 as to satisfy all of the following conditions:
2531
2532 - No number occurs more than once in any row or column.
2533
2534 - No black square is horizontally or vertically adjacent to any
2535 other black square.
2536
2537 - The remaining white squares must all form one contiguous region
2538 (connected by edges, not just touching at corners).
2539
2540 Credit for this puzzle goes to Nikoli [15] who call it Hitori.
2541
2542 Singles was contributed to this collection by James Harvey.
2543
2544 [15] http://www.nikoli.com/en/puzzles/hitori.html (beware of Flash)
2545
2546 32.1 Singles controls
2547
2548 Left-clicking on an empty square will colour it black; left-clicking
2549 again will restore the number. Right-clicking will add a circle
2550 (useful for indicating that a cell is definitely not black).
2551
2552 You can also use the cursor keys to move around the grid. Pressing
2553 the return or space keys will turn a square black or add a circle
2554 respectively, and pressing the key again will restore the number or
2555 remove the circle.
2556
2557 (All the actions described in section 2.1 are also available.)
2558
2559 32.2 Singles parameters
2560
2561 These parameters are available from the `Custom...' option on the
2562 `Type' menu.
2563
2564 _Width_, _Height_
2565
2566 Size of grid in squares.
2567
2568 _Difficulty_
2569
2570 Controls the difficulty of the generated puzzle.
2571
2572Chapter 33: Magnets
2573-------------------
2574
2575 A rectangular grid has been filled with a mixture of magnets (that
2576 is, dominoes with one positive end and one negative end) and blank
2577 dominoes (that is, dominoes with two neutral poles). These dominoes
2578 are initially only seen in silhouette. Around the grid are placed a
2579 number of clues indicating the number of positive and negative poles
2580 contained in certain columns and rows.
2581
2582 Your aim is to correctly place the magnets and blank dominoes such
2583 that all the clues are satisfied, with the additional constraint
2584 that no two similar magnetic poles may be orthogonally adjacent
2585 (since they repel). Neutral poles do not repel, and can be adjacent
2586 to any other pole.
2587
2588 Credit for this puzzle goes to Janko [16].
2589
2590 Magnets was contributed to this collection by James Harvey.
2591
2592 [16] http://www.janko.at/Raetsel/Magnete/index.htm
2593
2594 33.1 Magnets controls
2595
2596 Left-clicking on an empty square places a magnet at that position
2597 with the positive pole on the square and the negative pole on the
2598 other half of the magnet; left-clicking again reverses the polarity,
2599 and a third click removes the magnet.
2600
2601 Right-clicking on an empty square places a blank domino there.
2602 Right-clicking again places two question marks on the domino,
2603 signifying `this cannot be blank' (which can be useful to note
2604 deductions while solving), and right-clicking again empties the
2605 domino.
2606
2607 Left-clicking a clue will mark it as done (grey it out), or unmark
2608 it if it is already marked.
2609
2610 You can also use the cursor keys to move a cursor around the grid.
2611 Pressing the return key will lay a domino with a positive pole at
2612 that position; pressing again reverses the polarity and then removes
2613 the domino, as with left-clicking. Using the space bar allows
2614 placement of blank dominoes and cannot-be-blank hints, as for right-
2615 clicking.
2616
2617 (All the actions described in section 2.1 are also available.)
2618
2619 33.2 Magnets parameters
2620
2621 These parameters are available from the `Custom...' option on the
2622 `Type' menu.
2623
2624 _Width_, _Height_
2625
2626 Size of grid in squares. There will be half _Width_ x _Height_
2627 dominoes in the grid: if this number is odd then one square will
2628 be blank.
2629
2630 (Grids with at least one odd dimension tend to be easier to
2631 solve.)
2632
2633 _Difficulty_
2634
2635 Controls the difficulty of the generated puzzle. At Tricky
2636 level, you are required to make more deductions about empty
2637 dominoes and row/column counts.
2638
2639 _Strip clues_
2640
2641 If true, some of the clues around the grid are removed at
2642 generation time, making the puzzle more difficult.
2643
2644Chapter 34: Signpost
2645--------------------
2646
2647 You have a grid of squares; each square (except the last one)
2648 contains an arrow, and some squares also contain numbers. Your job
2649 is to connect the squares to form a continuous list of numbers
2650 starting at 1 and linked in the direction of the arrows - so the
2651 arrow inside the square with the number 1 will point to the square
2652 containing the number 2, which will point to the square containing
2653 the number 3, etc. Each square can be any distance away from the
2654 previous one, as long as it is somewhere in the direction of the
2655 arrow.
2656
2657 By convention the first and last numbers are shown; one or more
2658 interim numbers may also appear at the beginning.
2659
2660 Credit for this puzzle goes to Janko [17], who call it `Pfeilpfad'
2661 (`arrow path').
2662
2663 Signpost was contributed to this collection by James Harvey.
2664
2665 [17] http://janko.at/Raetsel/Pfeilpfad/index.htm
2666
2667 34.1 Signpost controls
2668
2669 To play Signpost, you connect squares together by dragging from
2670 one square to another, indicating that they are adjacent in the
2671 sequence. Drag with the left button from a square to its successor,
2672 or with the right button from a square to its predecessor.
2673
2674 If you connect together two squares in this way and one of them has
2675 a number in it, the appropriate number will appear in the other
2676 square. If you connect two non-numbered squares, they will be
2677 assigned temporary algebraic labels: on the first occasion, they
2678 will be labelled `a' and `a+1', and then `b' and `b+1', and so on.
2679 Connecting more squares on to the ends of such a chain will cause
2680 them all to be labelled with the same letter.
2681
2682 When you left-click or right-click in a square, the legal squares to
2683 connect it to will be shown.
2684
2685 The arrow in each square starts off black, and goes grey once you
2686 connect the square to its successor. Also, each square which needs
2687 a predecessor has a small dot in the bottom left corner, which
2688 vanishes once you link a square to it. So your aim is always to
2689 connect a square with a black arrow to a square with a dot.
2690
2691 To remove any links for a particular square (both incoming and
2692 outgoing), left-drag it off the grid. To remove a whole chain,
2693 right-drag any square in the chain off the grid.
2694
2695 You can also use the cursor keys to move around the grid squares
2696 and lines. Pressing the return key when over a square starts a link
2697 operation, and pressing the return key again over a square will
2698 finish the link, if allowable. Pressing the space bar over a square
2699 will show the other squares pointing to it, and allow you to form a
2700 backward link, and pressing the space bar again cancels this.
2701
2702 (All the actions described in section 2.1 are also available.)
2703
2704 34.2 Signpost parameters
2705
2706 These parameters are available from the `Custom...' option on the
2707 `Type' menu.
2708
2709 _Width_, _Height_
2710
2711 Size of grid in squares.
2712
2713 _Force start/end to corners_
2714
2715 If true, the start and end squares are always placed in opposite
2716 corners (the start at the top left, and the end at the bottom
2717 right). If false the start and end squares are placed randomly
2718 (although always both shown).
2719
2720Chapter 35: Range
2721-----------------
2722
2723 You have a grid of squares; some squares contain numbers. Your job
2724 is to colour some of the squares black, such that several criteria
2725 are satisfied:
2726
2727 - no square with a number is coloured black.
2728
2729 - no two black squares are adjacent (horizontally or vertically).
2730
2731 - for any two white squares, there is a path between them using
2732 only white squares.
2733
2734 - for each square with a number, that number denotes the total
2735 number of white squares reachable from that square going in a
2736 straight line in any horizontal or vertical direction until
2737 hitting a wall or a black square; the square with the number is
2738 included in the total (once).
2739
2740 For instance, a square containing the number one must have four
2741 black squares as its neighbours by the last criterion; but then it's
2742 impossible for it to be connected to any outside white square, which
2743 violates the second to last criterion. So no square will contain the
2744 number one.
2745
2746 Credit for this puzzle goes to Nikoli, who have variously called it
2747 `Kurodoko', `Kuromasu' or `Where is Black Cells'. [18].
2748
2749 Range was contributed to this collection by Jonas Koelker.
2750
2751 [18] http://www.nikoli.co.jp/en/puzzles/where_is_black_cells.html
2752
2753 35.1 Range controls
2754
2755 Click with the left button to paint a square black, or with the
2756 right button to mark a square with a dot to indicate that you are
2757 sure it should _not_ be painted black. Repeated clicking with either
2758 button will cycle the square through the three possible states
2759 (filled, dotted or empty) in opposite directions.
2760
2761 You can also use the cursor keys to move around the grid squares.
2762 Pressing Return does the same as clicking with the left button,
2763 while pressing Space does the same as a right button click. Moving
2764 with the cursor keys while holding Shift will place dots in all
2765 squares that are moved through.
2766
2767 (All the actions described in section 2.1 are also available.)
2768
2769 35.2 Range parameters
2770
2771 These parameters are available from the `Custom...' option on the
2772 `Type' menu.
2773
2774 _Width_, _Height_
2775
2776 Size of grid in squares.
2777
2778Chapter 36: Pearl
2779-----------------
2780
2781 You have a grid of squares. Your job is to draw lines between the
2782 centres of horizontally or vertically adjacent squares, so that the
2783 lines form a single closed loop. In the resulting grid, some of the
2784 squares that the loop passes through will contain corners, and some
2785 will be straight horizontal or vertical lines. (And some squares can
2786 be completely empty - the loop doesn't have to pass through every
2787 square.)
2788
2789 Some of the squares contain black and white circles, which are clues
2790 that the loop must satisfy.
2791
2792 A black circle in a square indicates that that square is a corner,
2793 but neither of the squares adjacent to it in the loop is also a
2794 corner.
2795
2796 A white circle indicates that the square is a straight edge, but _at
2797 least one_ of the squares adjacent to it in the loop is a corner.
2798
2799 (In both cases, the clue only constrains the two squares adjacent
2800 _in the loop_, that is, the squares that the loop passes into after
2801 leaving the clue square. The squares that are only adjacent _in the
2802 grid_ are not constrained.)
2803
2804 Credit for this puzzle goes to Nikoli, who call it `Masyu'. [19]
2805
2806 Thanks to James Harvey for assistance with the implementation.
2807
2808 [19] http://www.nikoli.co.jp/en/puzzles/masyu.html (beware of Flash)
2809
2810 36.1 Pearl controls
2811
2812 Click with the left button on a grid edge to draw a segment of the
2813 loop through that edge, or to remove a segment once it is drawn.
2814
2815 Drag with the left button through a series of squares to draw more
2816 than one segment of the loop in one go. Alternatively, drag over an
2817 existing part of the loop to undraw it, or to undraw part of it and
2818 then go in a different direction.
2819
2820 Click with the right button on a grid edge to mark it with a cross,
2821 indicating that you are sure the loop does not go through that edge.
2822 (For instance, if you have decided which of the squares adjacent
2823 to a white clue has to be a corner, but don't yet know which way
2824 the corner turns, you might mark the one way it _can't_ go with a
2825 cross.)
2826
2827 Alternatively, use the cursor keys to move the cursor. Use the Enter
2828 key to begin and end keyboard `drag' operations. Use the Space,
2829 Escape or Backspace keys to cancel the drag. Or, hold Control while
2830 dragging with the cursor keys to toggle segments as you move between
2831 squares.
2832
2833 Pressing Control-Shift-arrowkey or Shift-arrowkey simulates a left
2834 or right click, respectively, on the edge in the direction of the
2835 key.
2836
2837 (All the actions described in section 2.1 are also available.)
2838
2839 36.2 Pearl parameters
2840
2841 These parameters are available from the `Custom...' option on the
2842 `Type' menu.
2843
2844Chapter 37: Undead
2845------------------
2846
2847 You are given a grid of squares, some of which contain diagonal
2848 mirrors. Every square which is not a mirror must be filled with one
2849 of three types of undead monster: a ghost, a vampire, or a zombie.
2850
2851 Vampires can be seen directly, but are invisible when reflected in
2852 mirrors. Ghosts are the opposite way round: they can be seen in
2853 mirrors, but are invisible when looked at directly. Zombies are
2854 visible by any means.
2855
2856 You are also told the total number of each type of monster in the
2857 grid. Also around the edge of the grid are written numbers, which
2858 indicate how many monsters can be seen if you look into the grid
2859 along a row or column starting from that position. (The diagonal
2860 mirrors are reflective on both sides. If your reflected line of
2861 sight crosses the same monster more than once, the number will count
2862 it each time it is visible, not just once.)
2863
2864 This puzzle type was invented by David Millar, under the name
2865 `Haunted Mirror Maze'. See [20] for more details.
2866
2867 Undead was contributed to this collection by Steffen Bauer.
2868
2869 [20] http://www.janko.at/Raetsel/Spukschloss/index.htm
2870
2871 37.1 Undead controls
2872
2873 Undead has a similar control system to Solo, Unequal and Keen.
2874
2875 To play Undead, click the mouse in any empty square and then type
2876 a letter on the keyboard indicating the type of monster: `G' for
2877 a ghost, `V' for a vampire, or `Z' for a zombie. If you make a
2878 mistake, click the mouse in the incorrect square and press Space to
2879 clear it again (or use the Undo feature).
2880
2881 If you _right_-click in a square and then type a letter, the
2882 corresponding monster will be shown in reduced size in that square,
2883 as a `pencil mark'. You can have pencil marks for multiple monsters
2884 in the same square. A square containing a full-size monster cannot
2885 also contain pencil marks.
2886
2887 The game pays no attention to pencil marks, so exactly what you
2888 use them for is up to you: you can use them as reminders that a
2889 particular square needs to be re-examined once you know more about
2890 a particular monster, or you can use them as lists of the possible
2891 monster in a given square, or anything else you feel like.
2892
2893 To erase a single pencil mark, right-click in the square and type
2894 the same letter again.
2895
2896 All pencil marks in a square are erased when you left-click and type
2897 a monster letter, or when you left-click and press Space. Right-
2898 clicking and pressing space will also erase pencil marks.
2899
2900 As for Solo, the cursor keys can be used in conjunction with the
2901 letter keys to place monsters or pencil marks. Use the cursor keys
2902 to move a highlight around the grid, and type a monster letter to
2903 enter it in the highlighted square. Pressing return toggles the
2904 highlight into a mode in which you can enter or remove pencil marks.
2905
2906 If you prefer plain letters of the alphabet to cute monster
2907 pictures, you can press `A' to toggle between showing the monsters
2908 as monsters or showing them as letters.
2909
2910 Left-clicking a clue will mark it as done (grey it out), or unmark
2911 it if it is already marked.
2912
2913 (All the actions described in section 2.1 are also available.)
2914
2915 37.2 Undead parameters
2916
2917 These parameters are available from the `Custom...' option on the
2918 `Type' menu.
2919
2920 _Width_, _Height_
2921
2922 Size of grid in squares.
2923
2924 _Difficulty_
2925
2926 Controls the difficulty of the generated puzzle.
2927
2928Chapter 38: Unruly
2929------------------
2930
2931 You are given a grid of squares, which you must colour either black
2932 or white. Some squares are provided as clues; the rest are left for
2933 you to fill in. Each row and column must contain the same number
2934 of black and white squares, and no row or column may contain three
2935 consecutive squares of the same colour.
2936
2937 This puzzle type was invented by Adolfo Zanellati, under the name
2938 `Tohu wa Vohu'. See [21] for more details.
2939
2940 Unruly was contributed to this collection by Lennard Sprong.
2941
2942 [21] http://www.janko.at/Raetsel/Tohu-Wa-Vohu/index.htm
2943
2944 38.1 Unruly controls
2945
2946 To play Unruly, click the mouse in a square to change its colour.
2947 Left-clicking an empty square will turn it black, and right-clicking
2948 will turn it white. Keep clicking the same button to cycle through
2949 the three possible states for the square. If you middle-click in a
2950 square it will be reset to empty.
2951
2952 You can also use the cursor keys to move around the grid. Pressing
2953 the return or space keys will turn an empty square black or white
2954 respectively (and then cycle the colours in the same way as the
2955 mouse buttons), and pressing Backspace will reset a square to empty.
2956
2957 (All the actions described in section 2.1 are also available.)
2958
2959 38.2 Unruly parameters
2960
2961 These parameters are available from the `Custom...' option on the
2962 `Type' menu.
2963
2964 _Width_, _Height_
2965
2966 Size of grid in squares. (Note that the rules of the game
2967 require both the width and height to be even numbers.)
2968
2969 _Difficulty_
2970
2971 Controls the difficulty of the generated puzzle.
2972
2973 _Unique rows and columns_
2974
2975 If enabled, no two rows are permitted to have exactly the same
2976 pattern, and likewise columns. (A row and a column can match,
2977 though.)
2978
2979Chapter 39: Flood
2980-----------------
2981
2982 You are given a grid of squares, coloured at random in multiple
2983 colours. In each move, you can flood-fill the top left square in a
2984 colour of your choice (i.e. every square reachable from the starting
2985 square by an orthogonally connected path of squares all the same
2986 colour will be filled in the new colour). As you do this, more and
2987 more of the grid becomes connected to the starting square.
2988
2989 Your aim is to make the whole grid the same colour, in as few moves
2990 as possible. The game will set a limit on the number of moves, based
2991 on running its own internal solver. You win if you can make the
2992 whole grid the same colour in that many moves or fewer.
2993
2994 I saw this game (with a fixed grid size, fixed number of colours,
2995 and fixed move limit) at http://floodit.appspot.com (no longer
2996 accessible).
2997
2998 39.1 Flood controls
2999
3000 To play Flood, click the mouse in a square. The top left corner and
3001 everything connected to it will be flood-filled with the colour of
3002 the square you clicked. Clicking a square the same colour as the top
3003 left corner has no effect, and therefore does not count as a move.
3004
3005 You can also use the cursor keys to move a cursor (outline black
3006 square) around the grid. Pressing the return key will fill the top
3007 left corner in the colour of the square under the cursor.
3008
3009 (All the actions described in section 2.1 are also available.)
3010
3011 39.2 Flood parameters
3012
3013 These parameters are available from the `Custom...' option on the
3014 `Type' menu.
3015
3016 _Width_, _Height_
3017
3018 Size of the grid, in squares.
3019
3020 _Colours_
3021
3022 Number of colours used to fill the grid. Must be at least 3
3023 (with two colours there would only be one legal move at any
3024 stage, hence no choice to make at all), and at most 10.
3025
3026 _Extra moves permitted_
3027
3028 Controls the difficulty of the puzzle, by increasing the move
3029 limit. In each new grid, Flood will run an internal solver to
3030 generate its own solution, and then the value in this field
3031 will be added to the length of Flood's solution to generate the
3032 game's move limit. So a value of 0 requires you to be just as
3033 efficient as Flood's automated solver, and a larger value makes
3034 it easier.
3035
3036 (Note that Flood's internal solver will not necessarily find the
3037 shortest possible solution, though I believe it's pretty close.
3038 For a real challenge, set this value to 0 and then try to solve
3039 a grid in _strictly fewer_ moves than the limit you're given!)
3040
3041Chapter 40: Tracks
3042------------------
3043
3044 You are given a grid of squares, some of which are filled with train
3045 tracks. You need to complete the track from A to B so that the
3046 rows and columns contain the same number of track segments as are
3047 indicated in the clues to the top and right of the grid.
3048
3049 There are only straight and 90 degree curved rails, and the track
3050 may not cross itself.
3051
3052 Tracks was contributed to this collection by James Harvey.
3053
3054 40.1 Tracks controls
3055
3056 Left-clicking on an edge between two squares adds a track segment
3057 between the two squares. Right-clicking on an edge adds a cross on
3058 the edge, indicating no track is possible there.
3059
3060 Left-clicking in a square adds a colour indicator showing that
3061 you know the square must contain a track, even if you don't know
3062 which edges it crosses yet. Right-clicking in a square adds a cross
3063 indicating it contains no track segment.
3064
3065 Left- or right-dragging between squares allows you to lay a straight
3066 line of is-track or is-not-track indicators, useful for filling in
3067 rows or columns to match the clue.
3068
3069 (All the actions described in section 2.1 are also available.)
3070
3071 40.2 Tracks parameters
3072
3073 These parameters are available from the `Custom...' option on the
3074 `Type' menu.
3075
3076 _Width_, _Height_
3077
3078 Size of the grid, in squares.
3079
3080 _Difficulty_
3081
3082 Controls the difficulty of the generated puzzle: at Tricky
3083 level, you are required to make more deductions regarding
3084 disregarding moves that would lead to impossible crossings
3085 later.
3086
3087 _Disallow consecutive 1 clues_
3088
3089 Controls whether the Tracks game generation permits two adjacent
3090 rows or columns to have a 1 clue, or permits the row or column
3091 of the track's endpoint to have a 1 clue. By default this is
3092 not permitted, to avoid long straight boring segments of track
3093 and make the games more twiddly and interesting. If you want to
3094 restore the possibility, turn this option off.
3095
3096Chapter 41: Palisade
3097--------------------
3098
3099 You're given a grid of squares, some of which contain numbers. Your
3100 goal is to subdivide the grid into contiguous regions, all of the
3101 same (given) size, such that each square containing a number is
3102 adjacent to exactly that many edges (including those between the
3103 inside and the outside of the grid).
3104
3105 Credit for this puzzle goes to Nikoli, who call it `Five Cells'.
3106 [22].
3107
3108 Palisade was contributed to this collection by Jonas Koelker.
3109
3110 [22] http://nikoli.co.jp/en/puzzles/five_cells.html
3111
3112 41.1 Palisade controls
3113
3114 Left-click to place an edge. Right-click to indicate `no edge'.
3115 Alternatively, the arrow keys will move a keyboard cursor. Holding
3116 Control while pressing an arrow key will place an edge. Press Shift-
3117 arrowkey to switch off an edge. Repeat an action to perform its
3118 inverse.
3119
3120 (All the actions described in section 2.1 are also available.)
3121
3122 41.2 Palisade parameters
3123
3124 These parameters are available from the `Custom...' option on the
3125 `Type' menu.
3126
3127 _Width_, _Height_
3128
3129 Size of grid in squares.
3130
3131 _Region size_
3132
3133 The size of the regions into which the grid must be subdivided.
3134
3135Appendix A: Licence
3136-------------------
3137
3138 This software is copyright 2004-2014 Simon Tatham.
3139
3140 Portions copyright Richard Boulton, James Harvey, Mike Pinna, Jonas
3141 Koelker, Dariusz Olszewski, Michael Schierl, Lambros Lambrou, Bernd
3142 Schmidt, Steffen Bauer, Lennard Sprong and Rogier Goossens.
3143
3144 Permission is hereby granted, free of charge, to any person
3145 obtaining a copy of this software and associated documentation files
3146 (the `Software'), to deal in the Software without restriction,
3147 including without limitation the rights to use, copy, modify, merge,
3148 publish, distribute, sublicense, and/or sell copies of the Software,
3149 and to permit persons to whom the Software is furnished to do so,
3150 subject to the following conditions:
3151
3152 The above copyright notice and this permission notice shall be
3153 included in all copies or substantial portions of the Software.
3154
3155 THE SOFTWARE IS PROVIDED `AS IS', WITHOUT WARRANTY OF ANY KIND,
3156 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
3157 OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
3158 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
3159 BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
3160 ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
3161 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
3162 SOFTWARE.
3163
diff --git a/apps/plugins/puzzles/random.c b/apps/plugins/puzzles/src/random.c
index c129a8d2ba..fb54560c95 100644
--- a/apps/plugins/puzzles/random.c
+++ b/apps/plugins/puzzles/src/random.c
@@ -10,6 +10,7 @@
10 * easier to reuse it than to do anything else! 10 * easier to reuse it than to do anything else!
11 */ 11 */
12 12
13#include <assert.h>
13#include <string.h> 14#include <string.h>
14#include <stdio.h> 15#include <stdio.h>
15 16
@@ -271,7 +272,7 @@ unsigned long random_upto(random_state *state, unsigned long limit)
271 bits++; 272 bits++;
272 273
273 bits += 3; 274 bits += 3;
274 //assert(bits < 32); 275 assert(bits < 32);
275 276
276 max = 1L << bits; 277 max = 1L << bits;
277 divisor = max / limit; 278 divisor = max / limit;
diff --git a/apps/plugins/puzzles/range.R b/apps/plugins/puzzles/src/range.R
index f1256efd1e..f1256efd1e 100644
--- a/apps/plugins/puzzles/range.R
+++ b/apps/plugins/puzzles/src/range.R
diff --git a/apps/plugins/puzzles/range.c b/apps/plugins/puzzles/src/range.c
index e1067cbcc5..588178c003 100644
--- a/apps/plugins/puzzles/range.c
+++ b/apps/plugins/puzzles/src/range.c
@@ -56,7 +56,7 @@
56#include <stdio.h> 56#include <stdio.h>
57#include <stdlib.h> 57#include <stdlib.h>
58#include <string.h> 58#include <string.h>
59#include "rbassert.h" 59#include <assert.h>
60#include <ctype.h> 60#include <ctype.h>
61#include <math.h> 61#include <math.h>
62 62
@@ -1797,7 +1797,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
1797struct game const thegame = { 1797struct game const thegame = {
1798 "Range", "games.range", "range", 1798 "Range", "games.range", "range",
1799 default_params, 1799 default_params,
1800 game_fetch_preset, 1800 game_fetch_preset, NULL,
1801 decode_params, 1801 decode_params,
1802 encode_params, 1802 encode_params,
1803 free_params, 1803 free_params,
diff --git a/apps/plugins/puzzles/src/range.html b/apps/plugins/puzzles/src/range.html
new file mode 100644
index 0000000000..7a93216805
--- /dev/null
+++ b/apps/plugins/puzzles/src/range.html
@@ -0,0 +1,67 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Range</title>
7<link rel="previous" href="signpost.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="pearl.html">
12</head>
13<body>
14<p><a href="signpost.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="pearl.html">Next</a></p>
15<h1><a name="C35"></a>Chapter 35: <a name="i0"></a>Range</h1>
16<p>
17You have a grid of squares; some squares contain numbers. Your job is to colour some of the squares black, such that several criteria are satisfied:
18</p>
19<ul><li>
20no square with a number is coloured black.
21</li>
22<li>
23no two black squares are adjacent (horizontally or vertically).
24</li>
25<li>
26for any two white squares, there is a path between them using only white squares.
27</li>
28<li>
29for each square with a number, that number denotes the total number of white squares reachable from that square going in a straight line in any horizontal or vertical direction until hitting a wall or a black square; the square with the number is included in the total (once).
30</li>
31</ul>
32<p>
33For instance, a square containing the number one must have four black squares as its neighbours by the last criterion; but then it's impossible for it to be connected to any outside white square, which violates the second to last criterion. So no square will contain the number one.
34</p>
35<p>
36Credit for this puzzle goes to <a name="i1"></a>Nikoli, who have variously called it &#8216;Kurodoko&#8217;, &#8216;Kuromasu&#8217; or &#8216;Where is Black Cells&#8217;. <a href="#p0">[18]</a>.
37</p>
38<p>
39Range was contributed to this collection by Jonas K&#246;lker.
40</p>
41<p><a name="p0"></a>
42[18] <a href="http://www.nikoli.co.jp/en/puzzles/where_is_black_cells.html"><code>http://www.nikoli.co.jp/en/puzzles/where_is_black_cells.html</code></a>
43</p>
44<h2><a name="S35.1"></a>35.1 <a name="i2"></a>Range controls</h2>
45<p>
46Click with the left button to paint a square black, or with the right button to mark a square with a dot to indicate that you are sure it should <em>not</em> be painted black. Repeated clicking with either button will cycle the square through the three possible states (filled, dotted or empty) in opposite directions.
47</p>
48<p>
49You can also use the cursor keys to move around the grid squares. Pressing Return does the same as clicking with the left button, while pressing Space does the same as a right button click. Moving with the cursor keys while holding Shift will place dots in all squares that are moved through.
50</p>
51<p>
52(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
53</p>
54<h2><a name="S35.2"></a>35.2 <a name="i3"></a>Range parameters</h2>
55<p>
56These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
57</p>
58<dl><dt>
59<em>Width</em>, <em>Height</em>
60</dt>
61<dd>
62Size of grid in squares.
63</dd>
64</dl>
65
66<hr><address></address></body>
67</html>
diff --git a/apps/plugins/puzzles/rect.R b/apps/plugins/puzzles/src/rect.R
index 1448c0fa63..1448c0fa63 100644
--- a/apps/plugins/puzzles/rect.R
+++ b/apps/plugins/puzzles/src/rect.R
diff --git a/apps/plugins/puzzles/rect.c b/apps/plugins/puzzles/src/rect.c
index ca3cb984ea..465e1436fa 100644
--- a/apps/plugins/puzzles/rect.c
+++ b/apps/plugins/puzzles/src/rect.c
@@ -24,7 +24,7 @@
24#include <stdio.h> 24#include <stdio.h>
25#include <stdlib.h> 25#include <stdlib.h>
26#include <string.h> 26#include <string.h>
27#include "rbassert.h" 27#include <assert.h>
28#include <ctype.h> 28#include <ctype.h>
29#include <math.h> 29#include <math.h>
30 30
@@ -2962,7 +2962,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
2962const struct game thegame = { 2962const struct game thegame = {
2963 "Rectangles", "games.rectangles", "rect", 2963 "Rectangles", "games.rectangles", "rect",
2964 default_params, 2964 default_params,
2965 game_fetch_preset, 2965 game_fetch_preset, NULL,
2966 decode_params, 2966 decode_params,
2967 encode_params, 2967 encode_params,
2968 free_params, 2968 free_params,
diff --git a/apps/plugins/puzzles/src/rect.html b/apps/plugins/puzzles/src/rect.html
new file mode 100644
index 0000000000..923b34cefd
--- /dev/null
+++ b/apps/plugins/puzzles/src/rect.html
@@ -0,0 +1,76 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Rectangles</title>
7<link rel="previous" href="twiddle.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="netslide.html">
12</head>
13<body>
14<p><a href="twiddle.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="netslide.html">Next</a></p>
15<h1><a name="C8"></a>Chapter 8: <a name="i0"></a>Rectangles</h1>
16<p>
17You have a grid of squares, with numbers written in some (but not all) of the squares. Your task is to subdivide the grid into rectangles of various sizes, such that (a) every rectangle contains exactly one numbered square, and (b) the area of each rectangle is equal to the number written in its numbered square.
18</p>
19<p>
20Credit for this game goes to the Japanese puzzle magazine <a name="i1"></a>Nikoli <a href="#p0">[3]</a>; I've also seen a Palm implementation at <a name="i2"></a>Puzzle Palace <a href="#p1">[4]</a>. Unlike Puzzle Palace's implementation, my version automatically generates random grids of any size you like. The quality of puzzle design is therefore not quite as good as hand-crafted puzzles would be, but on the plus side you get an inexhaustible supply of puzzles tailored to your own specification.
21</p>
22<p><a name="p0"></a>
23[3] <a href="http://www.nikoli.co.jp/en/puzzles/shikaku.html"><code>http://www.nikoli.co.jp/en/puzzles/shikaku.html</code></a> (beware of Flash)
24</p>
25<p><a name="p1"></a>
26[4] <a href="https://web.archive.org/web/20041024001459/http://www.puzzle.gr.jp/puzzle/sikaku/palm/index.html.en"><code>https://web.archive.org/web/20041024001459/http://www.puzzle.gr.jp/puzzle/sikaku/palm/index.html.en</code></a>
27</p>
28<h2><a name="S8.1"></a>8.1 <a name="i3"></a>Rectangles controls</h2>
29<p>
30This game is played with the mouse or cursor keys.
31</p>
32<p>
33Left-click any edge to toggle it on or off, or left-click and drag to draw an entire rectangle (or line) on the grid in one go (removing any existing edges within that rectangle). Right-clicking and dragging will allow you to erase the contents of a rectangle without affecting its edges.
34</p>
35<p>
36Alternatively, use the cursor keys to move the position indicator around the board. Pressing the return key then allows you to use the cursor keys to drag a rectangle out from that position, and pressing the return key again completes the rectangle. Using the space bar instead of the return key allows you to erase the contents of a rectangle without affecting its edges, as above. Pressing escape cancels a drag.
37</p>
38<p>
39When a rectangle of the correct size is completed, it will be shaded.
40</p>
41<p>
42(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
43</p>
44<h2><a name="S8.2"></a>8.2 <a name="i4"></a>Rectangles parameters</h2>
45<p>
46These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
47</p>
48<dl><dt>
49<em>Width</em>, <em>Height</em>
50</dt>
51<dd>
52Size of grid, in squares.
53</dd>
54<dt>
55<em>Expansion factor</em>
56</dt>
57<dd>
58This is a mechanism for changing the type of grids generated by the program. Some people prefer a grid containing a few large rectangles to one containing many small ones. So you can ask Rectangles to essentially generate a <em>smaller</em> grid than the size you specified, and then to expand it by adding rows and columns.
59<p>
60The default expansion factor of zero means that Rectangles will simply generate a grid of the size you ask for, and do nothing further. If you set an expansion factor of (say) 0.5, it means that each dimension of the grid will be expanded to half again as big after generation. In other words, the initial grid will be 2/3 the size in each dimension, and will be expanded to its full size without adding any more rectangles.
61</p>
62<p>
63Setting an expansion factor of around 0.5 tends to make the game more difficult, and also (in my experience) rewards a less deductive and more intuitive playing style. If you set it <em>too</em> high, though, the game simply cannot generate more than a few rectangles to cover the entire grid, and the game becomes trivial.
64</p>
65
66</dd>
67<dt>
68<em>Ensure unique solution</em>
69</dt>
70<dd>
71Normally, Rectangles will make sure that the puzzles it presents have only one solution. Puzzles with ambiguous sections can be more difficult and more subtle, so if you like you can turn off this feature and risk having ambiguous puzzles. Also, finding <em>all</em> the possible solutions can be an additional challenge for an advanced player. Turning off this option can also speed up puzzle generation.
72</dd>
73</dl>
74
75<hr><address></address></body>
76</html>
diff --git a/apps/plugins/puzzles/resource.h b/apps/plugins/puzzles/src/resource.h
index f0bfa16d6d..f0bfa16d6d 100644
--- a/apps/plugins/puzzles/resource.h
+++ b/apps/plugins/puzzles/src/resource.h
diff --git a/apps/plugins/puzzles/samegame.R b/apps/plugins/puzzles/src/samegame.R
index cc0d350041..cc0d350041 100644
--- a/apps/plugins/puzzles/samegame.R
+++ b/apps/plugins/puzzles/src/samegame.R
diff --git a/apps/plugins/puzzles/samegame.c b/apps/plugins/puzzles/src/samegame.c
index ed5efd224e..88edad32b1 100644
--- a/apps/plugins/puzzles/samegame.c
+++ b/apps/plugins/puzzles/src/samegame.c
@@ -65,7 +65,7 @@
65#include <stdio.h> 65#include <stdio.h>
66#include <stdlib.h> 66#include <stdlib.h>
67#include <string.h> 67#include <string.h>
68#include "rbassert.h" 68#include <assert.h>
69#include <ctype.h> 69#include <ctype.h>
70#include <math.h> 70#include <math.h>
71 71
@@ -1643,7 +1643,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
1643const struct game thegame = { 1643const struct game thegame = {
1644 "Same Game", "games.samegame", "samegame", 1644 "Same Game", "games.samegame", "samegame",
1645 default_params, 1645 default_params,
1646 game_fetch_preset, 1646 game_fetch_preset, NULL,
1647 decode_params, 1647 decode_params,
1648 encode_params, 1648 encode_params,
1649 free_params, 1649 free_params,
diff --git a/apps/plugins/puzzles/src/samegame.html b/apps/plugins/puzzles/src/samegame.html
new file mode 100644
index 0000000000..8861e4b77b
--- /dev/null
+++ b/apps/plugins/puzzles/src/samegame.html
@@ -0,0 +1,82 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Same Game</title>
7<link rel="previous" href="mines.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="flip.html">
12</head>
13<body>
14<p><a href="mines.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="flip.html">Next</a></p>
15<h1><a name="C13"></a>Chapter 13: <a name="i0"></a>Same Game</h1>
16<p>
17You have a grid of coloured squares, which you have to clear by highlighting contiguous regions of more than one coloured square; the larger the region you highlight, the more points you get (and the faster you clear the arena).
18</p>
19<p>
20If you clear the grid you win. If you end up with nothing but single squares (i.e., there are no more clickable regions left) you lose.
21</p>
22<p>
23Removing a region causes the rest of the grid to shuffle up: blocks that are suspended will fall down (first), and then empty columns are filled from the right.
24</p>
25<p>
26Same Game was contributed to this collection by James Harvey.
27</p>
28<h2><a name="S13.1"></a>13.1 <a name="i1"></a>Same Game controls</h2>
29<p>
30This game can be played with either the keyboard or the mouse.
31</p>
32<p>
33If you left-click an unselected region, it becomes selected (possibly clearing the current selection).
34</p>
35<p>
36If you left-click the selected region, it will be removed (and the rest of the grid shuffled immediately).
37</p>
38<p>
39If you right-click the selected region, it will be unselected.
40</p>
41<p>
42The cursor keys move a cursor around the grid. Pressing the Space or Enter keys while the cursor is in an unselected region selects it; pressing Space or Enter again removes it as above.
43</p>
44<p>
45(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
46</p>
47<h2><a name="S13.2"></a>13.2 <a name="i2"></a>Same Game parameters</h2>
48<p>
49These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
50</p>
51<dl><dt>
52<em>Width</em>, <em>Height</em>
53</dt>
54<dd>
55Size of grid in squares.
56</dd>
57<dt>
58<em>No. of colours</em>
59</dt>
60<dd>
61Number of different colours used to fill the grid; the more colours, the fewer large regions of colour and thus the more difficult it is to successfully clear the grid.
62</dd>
63<dt>
64<em>Scoring system</em>
65</dt>
66<dd>
67Controls the precise mechanism used for scoring. With the default system, &#8216;(n-2)^2&#8217;, only regions of three squares or more will score any points at all. With the alternative &#8216;(n-1)^2&#8217; system, regions of two squares score a point each, and larger regions score relatively more points.
68</dd>
69<dt>
70<em>Ensure solubility</em>
71</dt>
72<dd>
73If this option is ticked (the default state), generated grids will be guaranteed to have at least one solution.
74<p>
75If you turn it off, the game generator will not try to guarantee soluble grids; it will, however, still ensure that there are at least 2 squares of each colour on the grid at the start (since a grid with exactly one square of a given colour is <em>definitely</em> insoluble). Grids generated with this option disabled may contain more large areas of contiguous colour, leading to opportunities for higher scores; they can also take less time to generate.
76</p>
77
78</dd>
79</dl>
80
81<hr><address></address></body>
82</html>
diff --git a/apps/plugins/puzzles/signpost.R b/apps/plugins/puzzles/src/signpost.R
index 09ea367d57..09ea367d57 100644
--- a/apps/plugins/puzzles/signpost.R
+++ b/apps/plugins/puzzles/src/signpost.R
diff --git a/apps/plugins/puzzles/signpost.c b/apps/plugins/puzzles/src/signpost.c
index ce27da1a9d..ca72768c27 100644
--- a/apps/plugins/puzzles/signpost.c
+++ b/apps/plugins/puzzles/src/signpost.c
@@ -5,7 +5,7 @@
5#include <stdio.h> 5#include <stdio.h>
6#include <stdlib.h> 6#include <stdlib.h>
7#include <string.h> 7#include <string.h>
8#include "rbassert.h" 8#include <assert.h>
9#include <ctype.h> 9#include <ctype.h>
10#include <math.h> 10#include <math.h>
11 11
@@ -2228,7 +2228,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
2228const struct game thegame = { 2228const struct game thegame = {
2229 "Signpost", "games.signpost", "signpost", 2229 "Signpost", "games.signpost", "signpost",
2230 default_params, 2230 default_params,
2231 game_fetch_preset, 2231 game_fetch_preset, NULL,
2232 decode_params, 2232 decode_params,
2233 encode_params, 2233 encode_params,
2234 free_params, 2234 free_params,
diff --git a/apps/plugins/puzzles/src/signpost.html b/apps/plugins/puzzles/src/signpost.html
new file mode 100644
index 0000000000..8a30030124
--- /dev/null
+++ b/apps/plugins/puzzles/src/signpost.html
@@ -0,0 +1,72 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Signpost</title>
7<link rel="previous" href="magnets.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="range.html">
12</head>
13<body>
14<p><a href="magnets.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="range.html">Next</a></p>
15<h1><a name="C34"></a>Chapter 34: <a name="i0"></a>Signpost</h1>
16<p>
17You have a grid of squares; each square (except the last one) contains an arrow, and some squares also contain numbers. Your job is to connect the squares to form a continuous list of numbers starting at 1 and linked in the direction of the arrows &#8211; so the arrow inside the square with the number 1 will point to the square containing the number 2, which will point to the square containing the number 3, etc. Each square can be any distance away from the previous one, as long as it is somewhere in the direction of the arrow.
18</p>
19<p>
20By convention the first and last numbers are shown; one or more interim numbers may also appear at the beginning.
21</p>
22<p>
23Credit for this puzzle goes to <a name="i1"></a>Janko <a href="#p0">[17]</a>, who call it &#8216;Pfeilpfad&#8217; (&#8216;arrow path&#8217;).
24</p>
25<p>
26Signpost was contributed to this collection by James Harvey.
27</p>
28<p><a name="p0"></a>
29[17] <a href="http://janko.at/Raetsel/Pfeilpfad/index.htm"><code>http://janko.at/Raetsel/Pfeilpfad/index.htm</code></a>
30</p>
31<h2><a name="S34.1"></a>34.1 <a name="i2"></a>Signpost controls</h2>
32<p>
33To play Signpost, you connect squares together by dragging from one square to another, indicating that they are adjacent in the sequence. Drag with the left button from a square to its successor, or with the right button from a square to its predecessor.
34</p>
35<p>
36If you connect together two squares in this way and one of them has a number in it, the appropriate number will appear in the other square. If you connect two non-numbered squares, they will be assigned temporary algebraic labels: on the first occasion, they will be labelled &#8216;<code>a</code>&#8217; and &#8216;<code>a+1</code>&#8217;, and then &#8216;<code>b</code>&#8217; and &#8216;<code>b+1</code>&#8217;, and so on. Connecting more squares on to the ends of such a chain will cause them all to be labelled with the same letter.
37</p>
38<p>
39When you left-click or right-click in a square, the legal squares to connect it to will be shown.
40</p>
41<p>
42The arrow in each square starts off black, and goes grey once you connect the square to its successor. Also, each square which needs a predecessor has a small dot in the bottom left corner, which vanishes once you link a square to it. So your aim is always to connect a square with a black arrow to a square with a dot.
43</p>
44<p>
45To remove any links for a particular square (both incoming and outgoing), left-drag it off the grid. To remove a whole chain, right-drag any square in the chain off the grid.
46</p>
47<p>
48You can also use the cursor keys to move around the grid squares and lines. Pressing the return key when over a square starts a link operation, and pressing the return key again over a square will finish the link, if allowable. Pressing the space bar over a square will show the other squares pointing to it, and allow you to form a backward link, and pressing the space bar again cancels this.
49</p>
50<p>
51(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
52</p>
53<h2><a name="S34.2"></a>34.2 <a name="i3"></a>Signpost parameters</h2>
54<p>
55These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
56</p>
57<dl><dt>
58<em>Width</em>, <em>Height</em>
59</dt>
60<dd>
61Size of grid in squares.
62</dd>
63<dt>
64<em>Force start/end to corners</em>
65</dt>
66<dd>
67If true, the start and end squares are always placed in opposite corners (the start at the top left, and the end at the bottom right). If false the start and end squares are placed randomly (although always both shown).
68</dd>
69</dl>
70
71<hr><address></address></body>
72</html>
diff --git a/apps/plugins/puzzles/singles.R b/apps/plugins/puzzles/src/singles.R
index 2d10c4b388..2d10c4b388 100644
--- a/apps/plugins/puzzles/singles.R
+++ b/apps/plugins/puzzles/src/singles.R
diff --git a/apps/plugins/puzzles/singles.c b/apps/plugins/puzzles/src/singles.c
index 119be29122..5fe054c663 100644
--- a/apps/plugins/puzzles/singles.c
+++ b/apps/plugins/puzzles/src/singles.c
@@ -56,7 +56,7 @@
56#include <stdio.h> 56#include <stdio.h>
57#include <stdlib.h> 57#include <stdlib.h>
58#include <string.h> 58#include <string.h>
59#include "rbassert.h" 59#include <assert.h>
60#include <ctype.h> 60#include <ctype.h>
61#include <math.h> 61#include <math.h>
62 62
@@ -1814,7 +1814,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
1814const struct game thegame = { 1814const struct game thegame = {
1815 "Singles", "games.singles", "singles", 1815 "Singles", "games.singles", "singles",
1816 default_params, 1816 default_params,
1817 game_fetch_preset, 1817 game_fetch_preset, NULL,
1818 decode_params, 1818 decode_params,
1819 encode_params, 1819 encode_params,
1820 free_params, 1820 free_params,
diff --git a/apps/plugins/puzzles/src/singles.html b/apps/plugins/puzzles/src/singles.html
new file mode 100644
index 0000000000..ee353a5962
--- /dev/null
+++ b/apps/plugins/puzzles/src/singles.html
@@ -0,0 +1,67 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Singles</title>
7<link rel="previous" href="towers.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="magnets.html">
12</head>
13<body>
14<p><a href="towers.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="magnets.html">Next</a></p>
15<h1><a name="C32"></a>Chapter 32: <a name="i0"></a>Singles</h1>
16<p>
17You have a grid of white squares, all of which contain numbers. Your task is to colour some of the squares black (removing the number) so as to satisfy all of the following conditions:
18</p>
19<ul><li>
20No number occurs more than once in any row or column.
21</li>
22<li>
23No black square is horizontally or vertically adjacent to any other black square.
24</li>
25<li>
26The remaining white squares must all form one contiguous region (connected by edges, not just touching at corners).
27</li>
28</ul>
29<p>
30Credit for this puzzle goes to <a name="i1"></a>Nikoli <a href="#p0">[15]</a> who call it <a name="i2"></a>Hitori.
31</p>
32<p>
33Singles was contributed to this collection by James Harvey.
34</p>
35<p><a name="p0"></a>
36[15] <a href="http://www.nikoli.com/en/puzzles/hitori.html"><code>http://www.nikoli.com/en/puzzles/hitori.html</code></a> (beware of Flash)
37</p>
38<h2><a name="S32.1"></a>32.1 <a name="i3"></a>Singles controls</h2>
39<p>
40Left-clicking on an empty square will colour it black; left-clicking again will restore the number. Right-clicking will add a circle (useful for indicating that a cell is definitely not black).
41</p>
42<p>
43You can also use the cursor keys to move around the grid. Pressing the return or space keys will turn a square black or add a circle respectively, and pressing the key again will restore the number or remove the circle.
44</p>
45<p>
46(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
47</p>
48<h2><a name="S32.2"></a>32.2 <a name="i4"></a>Singles parameters</h2>
49<p>
50These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
51</p>
52<dl><dt>
53<em>Width</em>, <em>Height</em>
54</dt>
55<dd>
56Size of grid in squares.
57</dd>
58<dt>
59<em>Difficulty</em>
60</dt>
61<dd>
62Controls the difficulty of the generated puzzle.
63</dd>
64</dl>
65
66<hr><address></address></body>
67</html>
diff --git a/apps/plugins/puzzles/sixteen.R b/apps/plugins/puzzles/src/sixteen.R
index c63a27cef8..c63a27cef8 100644
--- a/apps/plugins/puzzles/sixteen.R
+++ b/apps/plugins/puzzles/src/sixteen.R
diff --git a/apps/plugins/puzzles/sixteen.c b/apps/plugins/puzzles/src/sixteen.c
index 1dd1d6b017..edc9771867 100644
--- a/apps/plugins/puzzles/sixteen.c
+++ b/apps/plugins/puzzles/src/sixteen.c
@@ -7,7 +7,7 @@
7#include <stdio.h> 7#include <stdio.h>
8#include <stdlib.h> 8#include <stdlib.h>
9#include <string.h> 9#include <string.h>
10#include "rbassert.h" 10#include <assert.h>
11#include <ctype.h> 11#include <ctype.h>
12#include <math.h> 12#include <math.h>
13 13
@@ -1176,7 +1176,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
1176const struct game thegame = { 1176const struct game thegame = {
1177 "Sixteen", "games.sixteen", "sixteen", 1177 "Sixteen", "games.sixteen", "sixteen",
1178 default_params, 1178 default_params,
1179 game_fetch_preset, 1179 game_fetch_preset, NULL,
1180 decode_params, 1180 decode_params,
1181 encode_params, 1181 encode_params,
1182 free_params, 1182 free_params,
diff --git a/apps/plugins/puzzles/src/sixteen.html b/apps/plugins/puzzles/src/sixteen.html
new file mode 100644
index 0000000000..cda88d5e6c
--- /dev/null
+++ b/apps/plugins/puzzles/src/sixteen.html
@@ -0,0 +1,48 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Sixteen</title>
7<link rel="previous" href="fifteen.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="twiddle.html">
12</head>
13<body>
14<p><a href="fifteen.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="twiddle.html">Next</a></p>
15<h1><a name="C6"></a>Chapter 6: <a name="i0"></a>Sixteen</h1>
16<p>
17Another sliding tile puzzle, visually similar to Fifteen (see <a href="fifteen.html#C5">chapter 5</a>) but with a different type of move. This time, there is no hole: all 16 squares on the grid contain numbered squares. Your move is to shift an entire row left or right, or shift an entire column up or down; every time you do that, the tile you shift off the grid re-appears at the other end of the same row, in the space you just vacated. To win, arrange the tiles into numerical order (1,2,3,4 on the top row, 13,14,15,16 on the bottom). When you've done that, try playing on different sizes of grid.
18</p>
19<p>
20I <em>might</em> have invented this game myself, though only by accident if so (and I'm sure other people have independently invented it). I thought I was imitating a screensaver I'd seen, but I have a feeling that the screensaver might actually have been a Fifteen-type puzzle rather than this slightly different kind. So this might be the one thing in my puzzle collection which represents creativity on my part rather than just engineering.
21</p>
22<h2><a name="S6.1"></a>6.1 <a name="i1"></a>Sixteen controls</h2>
23<p>
24Left-clicking on an arrow will move the appropriate row or column in the direction indicated. Right-clicking will move it in the opposite direction.
25</p>
26<p>
27Alternatively, use the cursor keys to move the position indicator around the edge of the grid, and use the return key to move the row/column in the direction indicated.
28</p>
29<p>
30You can also move the tiles directly. Move the cursor onto a tile, hold Control and press an arrow key to move the tile under the cursor and move the cursor along with the tile. Or, hold Shift to move only the tile. Pressing Enter simulates holding down Control (press Enter again to release), while pressing Space simulates holding down shift.
31</p>
32<p>
33(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
34</p>
35<h2><a name="S6.2"></a>6.2 <a name="i2"></a>Sixteen parameters</h2>
36<p>
37The parameters available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu are:
38</p>
39<ul><li>
40<em>Width</em> and <em>Height</em>, which are self-explanatory.
41</li>
42<li>
43You can ask for a limited shuffling operation to be performed on the grid. By default, Sixteen will shuffle the grid in such a way that any arrangement is about as probable as any other. You can override this by requesting a precise number of shuffling moves to be performed. Typically your aim is then to determine the precise set of shuffling moves and invert them exactly, so that you answer (say) a four-move shuffle with a four-move solution. Note that the more moves you ask for, the more likely it is that solutions shorter than the target length will turn out to be possible.
44</li>
45</ul>
46
47<hr><address></address></body>
48</html>
diff --git a/apps/plugins/puzzles/slant.R b/apps/plugins/puzzles/src/slant.R
index ff0d21f1eb..ff0d21f1eb 100644
--- a/apps/plugins/puzzles/slant.R
+++ b/apps/plugins/puzzles/src/slant.R
diff --git a/apps/plugins/puzzles/slant.c b/apps/plugins/puzzles/src/slant.c
index 3ab4d306ef..5f9f4f6fed 100644
--- a/apps/plugins/puzzles/slant.c
+++ b/apps/plugins/puzzles/src/slant.c
@@ -26,7 +26,7 @@
26#include <stdlib.h> 26#include <stdlib.h>
27#include <stdarg.h> 27#include <stdarg.h>
28#include <string.h> 28#include <string.h>
29#include "rbassert.h" 29#include <assert.h>
30#include <ctype.h> 30#include <ctype.h>
31#include <math.h> 31#include <math.h>
32 32
@@ -2150,7 +2150,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
2150const struct game thegame = { 2150const struct game thegame = {
2151 "Slant", "games.slant", "slant", 2151 "Slant", "games.slant", "slant",
2152 default_params, 2152 default_params,
2153 game_fetch_preset, 2153 game_fetch_preset, NULL,
2154 decode_params, 2154 decode_params,
2155 encode_params, 2155 encode_params,
2156 free_params, 2156 free_params,
diff --git a/apps/plugins/puzzles/src/slant.html b/apps/plugins/puzzles/src/slant.html
new file mode 100644
index 0000000000..79ba076d66
--- /dev/null
+++ b/apps/plugins/puzzles/src/slant.html
@@ -0,0 +1,64 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Slant</title>
7<link rel="previous" href="blackbox.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="lightup.html">
12</head>
13<body>
14<p><a href="blackbox.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="lightup.html">Next</a></p>
15<h1><a name="C20"></a>Chapter 20: <a name="i0"></a>Slant</h1>
16<p>
17You have a grid of squares. Your aim is to draw a diagonal line through each square, and choose which way each line slants so that the following conditions are met:
18</p>
19<ul><li>
20The diagonal lines never form a loop.
21</li>
22<li>
23Any point with a circled number has precisely that many lines meeting at it. (Thus, a 4 is the centre of a cross shape, whereas a zero is the centre of a diamond shape &#8211; or rather, a partial diamond shape, because a zero can never appear in the middle of the grid because that would immediately cause a loop.)
24</li>
25</ul>
26<p>
27Credit for this puzzle goes to <a name="i1"></a>Nikoli <a href="#p0">[8]</a>.
28</p>
29<p><a name="p0"></a>
30[8] <a href="http://www.nikoli.co.jp/ja/puzzles/gokigen_naname"><code>http://www.nikoli.co.jp/ja/puzzles/gokigen_naname</code></a> (in Japanese)
31</p>
32<h2><a name="S20.1"></a>20.1 <a name="i2"></a>Slant controls</h2>
33<p>
34Left-clicking in a blank square will place a <code>\</code> in it (a line leaning to the left, i.e. running from the top left of the square to the bottom right). Right-clicking in a blank square will place a <code>/</code> in it (leaning to the right, running from top right to bottom left).
35</p>
36<p>
37Continuing to click either button will cycle between the three possible square contents. Thus, if you left-click repeatedly in a blank square it will change from blank to <code>\</code> to <code>/</code> back to blank, and if you right-click repeatedly the square will change from blank to <code>/</code> to <code>\</code> back to blank. (Therefore, you can play the game entirely with one button if you need to.)
38</p>
39<p>
40You can also use the cursor keys to move around the grid. Pressing the return or space keys will place a <code>\</code> or a <code>/</code>, respectively, and will then cycle them as above. You can also press <code>/</code> or <code>\</code> to place a <code>/</code> or <code>\</code>, respectively, independent of what is already in the cursor square. Backspace removes any line from the cursor square.
41</p>
42<p>
43(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
44</p>
45<h2><a name="S20.2"></a>20.2 <a name="i3"></a>Slant parameters</h2>
46<p>
47These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
48</p>
49<dl><dt>
50<em>Width</em>, <em>Height</em>
51</dt>
52<dd>
53Size of grid in squares.
54</dd>
55<dt>
56<em>Difficulty</em>
57</dt>
58<dd>
59Controls the difficulty of the generated puzzle. At Hard level, you are required to do deductions based on knowledge of <em>relationships</em> between squares rather than always being able to deduce the exact contents of one square at a time. (For example, you might know that two squares slant in the same direction, even if you don't yet know what that direction is, and this might enable you to deduce something about still other squares.) Even at Hard level, guesswork and backtracking should never be necessary.
60</dd>
61</dl>
62
63<hr><address></address></body>
64</html>
diff --git a/apps/plugins/puzzles/solo.R b/apps/plugins/puzzles/src/solo.R
index 081a76147e..081a76147e 100644
--- a/apps/plugins/puzzles/solo.R
+++ b/apps/plugins/puzzles/src/solo.R
diff --git a/apps/plugins/puzzles/solo.c b/apps/plugins/puzzles/src/solo.c
index 26f0eddd1a..0d383c39aa 100644
--- a/apps/plugins/puzzles/solo.c
+++ b/apps/plugins/puzzles/src/solo.c
@@ -85,7 +85,7 @@
85#include <stdio.h> 85#include <stdio.h>
86#include <stdlib.h> 86#include <stdlib.h>
87#include <string.h> 87#include <string.h>
88#include "rbassert.h" 88#include <assert.h>
89#include <ctype.h> 89#include <ctype.h>
90#include <math.h> 90#include <math.h>
91 91
@@ -5543,7 +5543,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
5543const struct game thegame = { 5543const struct game thegame = {
5544 "Solo", "games.solo", "solo", 5544 "Solo", "games.solo", "solo",
5545 default_params, 5545 default_params,
5546 game_fetch_preset, 5546 game_fetch_preset, NULL,
5547 decode_params, 5547 decode_params,
5548 encode_params, 5548 encode_params,
5549 free_params, 5549 free_params,
diff --git a/apps/plugins/puzzles/src/solo.html b/apps/plugins/puzzles/src/solo.html
new file mode 100644
index 0000000000..472a85b2d3
--- /dev/null
+++ b/apps/plugins/puzzles/src/solo.html
@@ -0,0 +1,99 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Solo</title>
7<link rel="previous" href="pattern.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="mines.html">
12</head>
13<body>
14<p><a href="pattern.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="mines.html">Next</a></p>
15<h1><a name="C11"></a>Chapter 11: <a name="i0"></a>Solo</h1>
16<p>
17You have a square grid, which is divided into as many equally sized sub-blocks as the grid has rows. Each square must be filled in with a digit from 1 to the size of the grid, in such a way that
18</p>
19<ul><li>
20every row contains only one occurrence of each digit
21</li>
22<li>
23every column contains only one occurrence of each digit
24</li>
25<li>
26every block contains only one occurrence of each digit.
27</li>
28<li>
29(optionally, by default off) each of the square's two main diagonals contains only one occurrence of each digit.
30</li>
31</ul>
32<p>
33You are given some of the numbers as clues; your aim is to place the rest of the numbers correctly.
34</p>
35<p>
36Under the default settings, the sub-blocks are square or rectangular. The default puzzle size is 3&#215;3 (a 9&#215;9 actual grid, divided into nine 3&#215;3 blocks). You can also select sizes with rectangular blocks instead of square ones, such as 2&#215;3 (a 6&#215;6 grid divided into six 3&#215;2 blocks). Alternatively, you can select &#8216;jigsaw&#8217; mode, in which the sub-blocks are arbitrary shapes which differ between individual puzzles.
37</p>
38<p>
39Another available mode is &#8216;killer&#8217;. In this mode, clues are not given in the form of filled-in squares; instead, the grid is divided into &#8216;cages&#8217; by coloured lines, and for each cage the game tells you what the sum of all the digits in that cage should be. Also, no digit may appear more than once within a cage, even if the cage crosses the boundaries of existing regions.
40</p>
41<p>
42If you select a puzzle size which requires more than 9 digits, the additional digits will be letters of the alphabet. For example, if you select 3&#215;4 then the digits which go in your grid will be 1 to 9, plus &#8216;<code>a</code>&#8217;, &#8216;<code>b</code>&#8217; and &#8216;<code>c</code>&#8217;. This cannot be selected for killer puzzles.
43</p>
44<p>
45I first saw this puzzle in <a name="i1"></a>Nikoli <a href="#p0">[5]</a>, although it's also been popularised by various newspapers under the name &#8216;Sudoku&#8217; or &#8216;Su Doku&#8217;. Howard Garns is considered the inventor of the modern form of the puzzle, and it was first published in <em>Dell Pencil Puzzles and Word Games</em>. A more elaborate treatment of the history of the puzzle can be found on Wikipedia <a href="#p1">[6]</a>.
46</p>
47<p><a name="p0"></a>
48[5] <a href="http://www.nikoli.co.jp/en/puzzles/sudoku.html"><code>http://www.nikoli.co.jp/en/puzzles/sudoku.html</code></a> (beware of Flash)
49</p>
50<p><a name="p1"></a>
51[6] <a href="http://en.wikipedia.org/wiki/Sudoku"><code>http://en.wikipedia.org/wiki/Sudoku</code></a>
52</p>
53<h2><a name="S11.1"></a>11.1 <a name="i2"></a>Solo controls</h2>
54<p>
55To play Solo, simply click the mouse in any empty square and then type a digit or letter on the keyboard to fill that square. If you make a mistake, click the mouse in the incorrect square and press Space to clear it again (or use the Undo feature).
56</p>
57<p>
58If you <em>right</em>-click in a square and then type a number, that number will be entered in the square as a &#8216;pencil mark&#8217;. You can have pencil marks for multiple numbers in the same square. Squares containing filled-in numbers cannot also contain pencil marks.
59</p>
60<p>
61The game pays no attention to pencil marks, so exactly what you use them for is up to you: you can use them as reminders that a particular square needs to be re-examined once you know more about a particular number, or you can use them as lists of the possible numbers in a given square, or anything else you feel like.
62</p>
63<p>
64To erase a single pencil mark, right-click in the square and type the same number again.
65</p>
66<p>
67All pencil marks in a square are erased when you left-click and type a number, or when you left-click and press space. Right-clicking and pressing space will also erase pencil marks.
68</p>
69<p>
70Alternatively, use the cursor keys to move the mark around the grid. Pressing the return key toggles the mark (from a normal mark to a pencil mark), and typing a number in is entered in the square in the appropriate way; typing in a 0 or using the space bar will clear a filled square.
71</p>
72<p>
73(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
74</p>
75<h2><a name="S11.2"></a>11.2 <a name="i3"></a>Solo parameters</h2>
76<p>
77Solo allows you to configure two separate dimensions of the puzzle grid on the &#8216;Type&#8217; menu: the number of columns, and the number of rows, into which the main grid is divided. (The size of a block is the inverse of this: for example, if you select 2 columns and 3 rows, each actual block will have 3 columns and 2 rows.)
78</p>
79<p>
80If you tick the &#8216;X&#8217; checkbox, Solo will apply the optional extra constraint that the two main diagonals of the grid also contain one of every digit. (This is sometimes known as &#8216;Sudoku-X&#8217; in newspapers.) In this mode, the squares on the two main diagonals will be shaded slightly so that you know it's enabled.
81</p>
82<p>
83If you tick the &#8216;Jigsaw&#8217; checkbox, Solo will generate randomly shaped sub-blocks. In this mode, the actual grid size will be taken to be the product of the numbers entered in the &#8216;Columns&#8217; and &#8216;Rows&#8217; boxes. There is no reason why you have to enter a number greater than 1 in both boxes; Jigsaw mode has no constraint on the grid size, and it can even be a prime number if you feel like it.
84</p>
85<p>
86If you tick the &#8216;Killer&#8217; checkbox, Solo will generate a set of of cages, which are randomly shaped and drawn in an outline of a different colour. Each of these regions contains a smaller clue which shows the digit sum of all the squares in this region.
87</p>
88<p>
89You can also configure the type of symmetry shown in the generated puzzles. More symmetry makes the puzzles look prettier but may also make them easier, since the symmetry constraints can force more clues than necessary to be present. Completely asymmetric puzzles have the freedom to contain as few clues as possible.
90</p>
91<p>
92Finally, you can configure the difficulty of the generated puzzles. Difficulty levels are judged by the complexity of the techniques of deduction required to solve the puzzle: each level requires a mode of reasoning which was not necessary in the previous one. In particular, on difficulty levels &#8216;Trivial&#8217; and &#8216;Basic&#8217; there will be a square you can fill in with a single number at all times, whereas at &#8216;Intermediate&#8217; level and beyond you will have to make partial deductions about the <em>set</em> of squares a number could be in (or the set of numbers that could be in a square). At &#8216;Unreasonable&#8217; level, even this is not enough, and you will eventually have to make a guess, and then backtrack if it turns out to be wrong.
93</p>
94<p>
95Generating difficult puzzles is itself difficult: if you select one of the higher difficulty levels, Solo may have to make many attempts at generating a puzzle before it finds one hard enough for you. Be prepared to wait, especially if you have also configured a large puzzle size.
96</p>
97
98<hr><address></address></body>
99</html>
diff --git a/apps/plugins/puzzles/tdq.c b/apps/plugins/puzzles/src/tdq.c
index 43c9c35de5..d66f9f4a83 100644
--- a/apps/plugins/puzzles/tdq.c
+++ b/apps/plugins/puzzles/src/tdq.c
@@ -3,7 +3,7 @@
3 * list mechanism. 3 * list mechanism.
4 */ 4 */
5 5
6#include "rbassert.h" 6#include <assert.h>
7 7
8#include "puzzles.h" 8#include "puzzles.h"
9 9
diff --git a/apps/plugins/puzzles/tents.R b/apps/plugins/puzzles/src/tents.R
index 557f929840..557f929840 100644
--- a/apps/plugins/puzzles/tents.R
+++ b/apps/plugins/puzzles/src/tents.R
diff --git a/apps/plugins/puzzles/tents.c b/apps/plugins/puzzles/src/tents.c
index 1bc7a85188..4ffeb7be64 100644
--- a/apps/plugins/puzzles/tents.c
+++ b/apps/plugins/puzzles/src/tents.c
@@ -30,7 +30,7 @@
30#include <stdio.h> 30#include <stdio.h>
31#include <stdlib.h> 31#include <stdlib.h>
32#include <string.h> 32#include <string.h>
33#include "rbassert.h" 33#include <assert.h>
34#include <ctype.h> 34#include <ctype.h>
35#include <math.h> 35#include <math.h>
36 36
@@ -2611,7 +2611,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
2611const struct game thegame = { 2611const struct game thegame = {
2612 "Tents", "games.tents", "tents", 2612 "Tents", "games.tents", "tents",
2613 default_params, 2613 default_params,
2614 game_fetch_preset, 2614 game_fetch_preset, NULL,
2615 decode_params, 2615 decode_params,
2616 encode_params, 2616 encode_params,
2617 free_params, 2617 free_params,
diff --git a/apps/plugins/puzzles/src/tents.html b/apps/plugins/puzzles/src/tents.html
new file mode 100644
index 0000000000..c503f008d8
--- /dev/null
+++ b/apps/plugins/puzzles/src/tents.html
@@ -0,0 +1,67 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Tents</title>
7<link rel="previous" href="inertia.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="bridges.html">
12</head>
13<body>
14<p><a href="inertia.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="bridges.html">Next</a></p>
15<h1><a name="C25"></a>Chapter 25: <a name="i0"></a>Tents</h1>
16<p>
17You have a grid of squares, some of which contain trees. Your aim is to place tents in some of the remaining squares, in such a way that the following conditions are met:
18</p>
19<ul><li>
20There are exactly as many tents as trees.
21</li>
22<li>
23The tents and trees can be matched up in such a way that each tent is directly adjacent (horizontally or vertically, but not diagonally) to its own tree. However, a tent may be adjacent to other trees as well as its own.
24</li>
25<li>
26No two tents are adjacent horizontally, vertically <em>or diagonally</em>.
27</li>
28<li>
29The number of tents in each row, and in each column, matches the numbers given round the sides of the grid.
30</li>
31</ul>
32<p>
33This puzzle can be found in several places on the Internet, and was brought to my attention by e-mail. I don't know who I should credit for inventing it.
34</p>
35<h2><a name="S25.1"></a>25.1 <a name="i1"></a>Tents controls</h2>
36<p>
37Left-clicking in a blank square will place a tent in it. Right-clicking in a blank square will colour it green, indicating that you are sure it <em>isn't</em> a tent. Clicking either button in an occupied square will clear it.
38</p>
39<p>
40If you <em>drag</em> with the right button along a row or column, every blank square in the region you cover will be turned green, and no other squares will be affected. (This is useful for clearing the remainder of a row once you have placed all its tents.)
41</p>
42<p>
43You can also use the cursor keys to move around the grid. Pressing the return key over an empty square will place a tent, and pressing the space bar over an empty square will colour it green; either key will clear an occupied square. Holding Shift and pressing the cursor keys will colour empty squares green. Holding Control and pressing the cursor keys will colour green both empty squares and squares with tents.
44</p>
45<p>
46(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
47</p>
48<h2><a name="S25.2"></a>25.2 <a name="i2"></a>Tents parameters</h2>
49<p>
50These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
51</p>
52<dl><dt>
53<em>Width</em>, <em>Height</em>
54</dt>
55<dd>
56Size of grid in squares.
57</dd>
58<dt>
59<em>Difficulty</em>
60</dt>
61<dd>
62Controls the difficulty of the generated puzzle. More difficult puzzles require more complex deductions, but at present none of the available difficulty levels requires guesswork or backtracking.
63</dd>
64</dl>
65
66<hr><address></address></body>
67</html>
diff --git a/apps/plugins/puzzles/towers.R b/apps/plugins/puzzles/src/towers.R
index c060c697a7..c060c697a7 100644
--- a/apps/plugins/puzzles/towers.R
+++ b/apps/plugins/puzzles/src/towers.R
diff --git a/apps/plugins/puzzles/towers.c b/apps/plugins/puzzles/src/towers.c
index d8e087a4bc..a3a7e55a45 100644
--- a/apps/plugins/puzzles/towers.c
+++ b/apps/plugins/puzzles/src/towers.c
@@ -21,7 +21,7 @@
21#include <stdio.h> 21#include <stdio.h>
22#include <stdlib.h> 22#include <stdlib.h>
23#include <string.h> 23#include <string.h>
24#include "rbassert.h" 24#include <assert.h>
25#include <ctype.h> 25#include <ctype.h>
26#include <math.h> 26#include <math.h>
27 27
@@ -1978,7 +1978,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
1978const struct game thegame = { 1978const struct game thegame = {
1979 "Towers", "games.towers", "towers", 1979 "Towers", "games.towers", "towers",
1980 default_params, 1980 default_params,
1981 game_fetch_preset, 1981 game_fetch_preset, NULL,
1982 decode_params, 1982 decode_params,
1983 encode_params, 1983 encode_params,
1984 free_params, 1984 free_params,
diff --git a/apps/plugins/puzzles/src/towers.html b/apps/plugins/puzzles/src/towers.html
new file mode 100644
index 0000000000..415f30c0d8
--- /dev/null
+++ b/apps/plugins/puzzles/src/towers.html
@@ -0,0 +1,88 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Towers</title>
7<link rel="previous" href="keen.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="singles.html">
12</head>
13<body>
14<p><a href="keen.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="singles.html">Next</a></p>
15<h1><a name="C31"></a>Chapter 31: <a name="i0"></a>Towers</h1>
16<p>
17You have a square grid. On each square of the grid you can build a tower, with its height ranging from 1 to the size of the grid. Around the edge of the grid are some numeric clues.
18</p>
19<p>
20Your task is to build a tower on every square, in such a way that:
21</p>
22<ul><li>
23Each row contains every possible height of tower once
24</li>
25<li>
26Each column contains every possible height of tower once
27</li>
28<li>
29Each numeric clue describes the number of towers that can be seen if you look into the square from that direction, assuming that shorter towers are hidden behind taller ones. For example, in a 5&#215;5 grid, a clue marked &#8216;5&#8217; indicates that the five tower heights must appear in increasing order (otherwise you would not be able to see all five towers), whereas a clue marked &#8216;1&#8217; indicates that the tallest tower (the one marked 5) must come first.
30</li>
31</ul>
32<p>
33In harder or larger puzzles, some towers will be specified for you as well as the clues round the edge, and some edge clues may be missing.
34</p>
35<p>
36This puzzle appears on the web under various names, particularly &#8216;<a name="i1"></a>Skyscrapers&#8217;, but I don't know who first invented it.
37</p>
38<h2><a name="S31.1"></a>31.1 <a name="i2"></a>Towers controls</h2>
39<p>
40Towers shares much of its control system with Solo, Unequal and Keen.
41</p>
42<p>
43To play Towers, simply click the mouse in any empty square and then type a digit on the keyboard to fill that square with a tower of the given height. If you make a mistake, click the mouse in the incorrect square and press Space to clear it again (or use the Undo feature).
44</p>
45<p>
46If you <em>right</em>-click in a square and then type a number, that number will be entered in the square as a &#8216;pencil mark&#8217;. You can have pencil marks for multiple numbers in the same square. A square containing a tower cannot also contain pencil marks.
47</p>
48<p>
49The game pays no attention to pencil marks, so exactly what you use them for is up to you: you can use them as reminders that a particular square needs to be re-examined once you know more about a particular number, or you can use them as lists of the possible numbers in a given square, or anything else you feel like.
50</p>
51<p>
52To erase a single pencil mark, right-click in the square and type the same number again.
53</p>
54<p>
55All pencil marks in a square are erased when you left-click and type a number, or when you left-click and press space. Right-clicking and pressing space will also erase pencil marks.
56</p>
57<p>
58As for Solo, the cursor keys can be used in conjunction with the digit keys to set numbers or pencil marks. Use the cursor keys to move a highlight around the grid, and type a digit to enter it in the highlighted square. Pressing return toggles the highlight into a mode in which you can enter or remove pencil marks.
59</p>
60<p>
61Pressing M will fill in a full set of pencil marks in every square that does not have a main digit in it.
62</p>
63<p>
64Left-clicking a clue will mark it as done (grey it out), or unmark it if it is already marked. Holding Control or Shift and pressing an arrow key likewise marks any clue in the given direction.
65</p>
66<p>
67(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
68</p>
69<h2><a name="S31.2"></a>31.2 <a name="i3"></a>Towers parameters</h2>
70<p>
71These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
72</p>
73<dl><dt>
74<em>Grid size</em>
75</dt>
76<dd>
77Specifies the size of the grid. Lower limit is 3; upper limit is 9 (because the user interface would become more difficult with &#8216;digits&#8217; bigger than 9!).
78</dd>
79<dt>
80<em>Difficulty</em>
81</dt>
82<dd>
83Controls the difficulty of the generated puzzle. At Unreasonable level, some backtracking will be required, but the solution should still be unique. The remaining levels require increasingly complex reasoning to avoid having to backtrack.
84</dd>
85</dl>
86
87<hr><address></address></body>
88</html>
diff --git a/apps/plugins/puzzles/tracks.R b/apps/plugins/puzzles/src/tracks.R
index f88dfb03eb..f88dfb03eb 100644
--- a/apps/plugins/puzzles/tracks.R
+++ b/apps/plugins/puzzles/src/tracks.R
diff --git a/apps/plugins/puzzles/tracks.c b/apps/plugins/puzzles/src/tracks.c
index 3dfbf62d6a..43428a19e9 100644
--- a/apps/plugins/puzzles/tracks.c
+++ b/apps/plugins/puzzles/src/tracks.c
@@ -17,7 +17,7 @@
17#include <stdio.h> 17#include <stdio.h>
18#include <stdlib.h> 18#include <stdlib.h>
19#include <string.h> 19#include <string.h>
20#include "rbassert.h" 20#include <assert.h>
21#include <ctype.h> 21#include <ctype.h>
22#include <math.h> 22#include <math.h>
23 23
@@ -2622,7 +2622,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
2622const struct game thegame = { 2622const struct game thegame = {
2623 "Train Tracks", "games.tracks", "tracks", 2623 "Train Tracks", "games.tracks", "tracks",
2624 default_params, 2624 default_params,
2625 game_fetch_preset, 2625 game_fetch_preset, NULL,
2626 decode_params, 2626 decode_params,
2627 encode_params, 2627 encode_params,
2628 free_params, 2628 free_params,
diff --git a/apps/plugins/puzzles/src/tracks.html b/apps/plugins/puzzles/src/tracks.html
new file mode 100644
index 0000000000..dbff14394f
--- /dev/null
+++ b/apps/plugins/puzzles/src/tracks.html
@@ -0,0 +1,63 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Tracks</title>
7<link rel="previous" href="flood.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="palisade.html">
12</head>
13<body>
14<p><a href="flood.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="palisade.html">Next</a></p>
15<h1><a name="C40"></a>Chapter 40: <a name="i0"></a>Tracks</h1>
16<p>
17You are given a grid of squares, some of which are filled with train tracks. You need to complete the track from A to B so that the rows and columns contain the same number of track segments as are indicated in the clues to the top and right of the grid.
18</p>
19<p>
20There are only straight and 90 degree curved rails, and the track may not cross itself.
21</p>
22<p>
23Tracks was contributed to this collection by James Harvey.
24</p>
25<h2><a name="S40.1"></a>40.1 <a name="i1"></a>Tracks controls</h2>
26<p>
27Left-clicking on an edge between two squares adds a track segment between the two squares. Right-clicking on an edge adds a cross on the edge, indicating no track is possible there.
28</p>
29<p>
30Left-clicking in a square adds a colour indicator showing that you know the square must contain a track, even if you don't know which edges it crosses yet. Right-clicking in a square adds a cross indicating it contains no track segment.
31</p>
32<p>
33Left- or right-dragging between squares allows you to lay a straight line of is-track or is-not-track indicators, useful for filling in rows or columns to match the clue.
34</p>
35<p>
36(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
37</p>
38<h2><a name="S40.2"></a>40.2 <a name="i2"></a>Tracks parameters</h2>
39<p>
40These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
41</p>
42<dl><dt>
43<em>Width</em>, <em>Height</em>
44</dt>
45<dd>
46Size of the grid, in squares.
47</dd>
48<dt>
49<em>Difficulty</em>
50</dt>
51<dd>
52Controls the difficulty of the generated puzzle: at Tricky level, you are required to make more deductions regarding disregarding moves that would lead to impossible crossings later.
53</dd>
54<dt>
55<em>Disallow consecutive 1 clues</em>
56</dt>
57<dd>
58Controls whether the Tracks game generation permits two adjacent rows or columns to have a 1 clue, or permits the row or column of the track's endpoint to have a 1 clue. By default this is not permitted, to avoid long straight boring segments of track and make the games more twiddly and interesting. If you want to restore the possibility, turn this option off.
59</dd>
60</dl>
61
62<hr><address></address></body>
63</html>
diff --git a/apps/plugins/puzzles/tree234.c b/apps/plugins/puzzles/src/tree234.c
index 71c3be242a..4b3151ee2f 100644
--- a/apps/plugins/puzzles/tree234.c
+++ b/apps/plugins/puzzles/src/tree234.c
@@ -27,7 +27,7 @@
27 27
28#include <stdio.h> 28#include <stdio.h>
29#include <stdlib.h> 29#include <stdlib.h>
30#include "rbassert.h" 30#include <assert.h>
31 31
32#include "tree234.h" 32#include "tree234.h"
33 33
diff --git a/apps/plugins/puzzles/tree234.h b/apps/plugins/puzzles/src/tree234.h
index f75c8f7fb3..f75c8f7fb3 100644
--- a/apps/plugins/puzzles/tree234.h
+++ b/apps/plugins/puzzles/src/tree234.h
diff --git a/apps/plugins/puzzles/twiddle.R b/apps/plugins/puzzles/src/twiddle.R
index 1495c33181..1495c33181 100644
--- a/apps/plugins/puzzles/twiddle.R
+++ b/apps/plugins/puzzles/src/twiddle.R
diff --git a/apps/plugins/puzzles/twiddle.c b/apps/plugins/puzzles/src/twiddle.c
index 2a2ab668ca..6e05f4ddec 100644
--- a/apps/plugins/puzzles/twiddle.c
+++ b/apps/plugins/puzzles/src/twiddle.c
@@ -8,7 +8,7 @@
8#include <stdio.h> 8#include <stdio.h>
9#include <stdlib.h> 9#include <stdlib.h>
10#include <string.h> 10#include <string.h>
11#include "rbassert.h" 11#include <assert.h>
12#include <ctype.h> 12#include <ctype.h>
13#include <math.h> 13#include <math.h>
14 14
@@ -1281,7 +1281,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
1281const struct game thegame = { 1281const struct game thegame = {
1282 "Twiddle", "games.twiddle", "twiddle", 1282 "Twiddle", "games.twiddle", "twiddle",
1283 default_params, 1283 default_params,
1284 game_fetch_preset, 1284 game_fetch_preset, NULL,
1285 decode_params, 1285 decode_params,
1286 encode_params, 1286 encode_params,
1287 free_params, 1287 free_params,
diff --git a/apps/plugins/puzzles/src/twiddle.html b/apps/plugins/puzzles/src/twiddle.html
new file mode 100644
index 0000000000..244ce45144
--- /dev/null
+++ b/apps/plugins/puzzles/src/twiddle.html
@@ -0,0 +1,63 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Twiddle</title>
7<link rel="previous" href="sixteen.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="rect.html">
12</head>
13<body>
14<p><a href="sixteen.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="rect.html">Next</a></p>
15<h1><a name="C7"></a>Chapter 7: <a name="i0"></a>Twiddle</h1>
16<p>
17Twiddle is a tile-rearrangement puzzle, visually similar to Sixteen (see <a href="sixteen.html#C6">chapter 6</a>): you are given a grid of square tiles, each containing a number, and your aim is to arrange the numbers into ascending order.
18</p>
19<p>
20In basic Twiddle, your move is to rotate a square group of four tiles about their common centre. (Orientation is not significant in the basic puzzle, although you can select it.) On more advanced settings, you can rotate a larger square group of tiles.
21</p>
22<p>
23I first saw this type of puzzle in the GameCube game &#8216;Metroid Prime 2&#8217;. In the Main Gyro Chamber in that game, there is a puzzle you solve to unlock a door, which is a special case of Twiddle. I developed this game as a generalisation of that puzzle.
24</p>
25<h2><a name="S7.1"></a>7.1 <a name="i1"></a>Twiddle controls</h2>
26<p>
27To play Twiddle, click the mouse in the centre of the square group you wish to rotate. In the basic mode, you rotate a 2&#215;2 square, which means you have to click at a corner point where four tiles meet.
28</p>
29<p>
30In more advanced modes you might be rotating 3&#215;3 or even more at a time; if the size of the square is odd then you simply click in the centre tile of the square you want to rotate.
31</p>
32<p>
33Clicking with the left mouse button rotates the group anticlockwise. Clicking with the right button rotates it clockwise.
34</p>
35<p>
36You can also move an outline square around the grid with the cursor keys; the square is the size above (2&#215;2 by default, or larger). Pressing the return key or space bar will rotate the current square anticlockwise or clockwise respectively.
37</p>
38<p>
39(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
40</p>
41<h2><a name="S7.2"></a>7.2 <a name="i2"></a>Twiddle parameters</h2>
42<p>
43Twiddle provides several configuration options via the &#8216;Custom&#8217; option on the &#8216;Type&#8217; menu:
44</p>
45<ul><li>
46You can configure the width and height of the puzzle grid.
47</li>
48<li>
49You can configure the size of square block that rotates at a time.
50</li>
51<li>
52You can ask for every square in the grid to be distinguishable (the default), or you can ask for a simplified puzzle in which there are groups of identical numbers. In the simplified puzzle your aim is just to arrange all the 1s into the first row, all the 2s into the second row, and so on.
53</li>
54<li>
55You can configure whether the orientation of tiles matters. If you ask for an orientable puzzle, each tile will have a triangle drawn in it. All the triangles must be pointing upwards to complete the puzzle.
56</li>
57<li>
58You can ask for a limited shuffling operation to be performed on the grid. By default, Twiddle will shuffle the grid so much that any arrangement is about as probable as any other. You can override this by requesting a precise number of shuffling moves to be performed. Typically your aim is then to determine the precise set of shuffling moves and invert them exactly, so that you answer (say) a four-move shuffle with a four-move solution. Note that the more moves you ask for, the more likely it is that solutions shorter than the target length will turn out to be possible.
59</li>
60</ul>
61
62<hr><address></address></body>
63</html>
diff --git a/apps/plugins/puzzles/undead.R b/apps/plugins/puzzles/src/undead.R
index 5907ed6b74..5907ed6b74 100644
--- a/apps/plugins/puzzles/undead.R
+++ b/apps/plugins/puzzles/src/undead.R
diff --git a/apps/plugins/puzzles/undead.c b/apps/plugins/puzzles/src/undead.c
index 28fd0f35fe..b1f536e8d0 100644
--- a/apps/plugins/puzzles/undead.c
+++ b/apps/plugins/puzzles/src/undead.c
@@ -33,7 +33,7 @@
33#include <stdio.h> 33#include <stdio.h>
34#include <stdlib.h> 34#include <stdlib.h>
35#include <string.h> 35#include <string.h>
36#include "rbassert.h" 36#include <assert.h>
37#include <ctype.h> 37#include <ctype.h>
38#include <math.h> 38#include <math.h>
39 39
@@ -2702,7 +2702,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
2702const struct game thegame = { 2702const struct game thegame = {
2703 "Undead", "games.undead", "undead", 2703 "Undead", "games.undead", "undead",
2704 default_params, 2704 default_params,
2705 game_fetch_preset, 2705 game_fetch_preset, NULL,
2706 decode_params, 2706 decode_params,
2707 encode_params, 2707 encode_params,
2708 free_params, 2708 free_params,
diff --git a/apps/plugins/puzzles/src/undead.html b/apps/plugins/puzzles/src/undead.html
new file mode 100644
index 0000000000..f7a66c8a52
--- /dev/null
+++ b/apps/plugins/puzzles/src/undead.html
@@ -0,0 +1,84 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Undead</title>
7<link rel="previous" href="pearl.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="unruly.html">
12</head>
13<body>
14<p><a href="pearl.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="unruly.html">Next</a></p>
15<h1><a name="C37"></a>Chapter 37: <a name="i0"></a>Undead</h1>
16<p>
17You are given a grid of squares, some of which contain diagonal mirrors. Every square which is not a mirror must be filled with one of three types of undead monster: a ghost, a vampire, or a zombie.
18</p>
19<p>
20Vampires can be seen directly, but are invisible when reflected in mirrors. Ghosts are the opposite way round: they can be seen in mirrors, but are invisible when looked at directly. Zombies are visible by any means.
21</p>
22<p>
23You are also told the total number of each type of monster in the grid. Also around the edge of the grid are written numbers, which indicate how many monsters can be seen if you look into the grid along a row or column starting from that position. (The diagonal mirrors are reflective on both sides. If your reflected line of sight crosses the same monster more than once, the number will count it each time it is visible, not just once.)
24</p>
25<p>
26This puzzle type was invented by David Millar, under the name &#8216;Haunted Mirror Maze&#8217;. See <a href="#p0">[20]</a> for more details.
27</p>
28<p>
29Undead was contributed to this collection by Steffen Bauer.
30</p>
31<p><a name="p0"></a>
32[20] <a href="http://www.janko.at/Raetsel/Spukschloss/index.htm"><code>http://www.janko.at/Raetsel/Spukschloss/index.htm</code></a>
33</p>
34<h2><a name="S37.1"></a>37.1 <a name="i1"></a>Undead controls</h2>
35<p>
36Undead has a similar control system to Solo, Unequal and Keen.
37</p>
38<p>
39To play Undead, click the mouse in any empty square and then type a letter on the keyboard indicating the type of monster: &#8216;G&#8217; for a ghost, &#8216;V&#8217; for a vampire, or &#8216;Z&#8217; for a zombie. If you make a mistake, click the mouse in the incorrect square and press Space to clear it again (or use the Undo feature).
40</p>
41<p>
42If you <em>right</em>-click in a square and then type a letter, the corresponding monster will be shown in reduced size in that square, as a &#8216;pencil mark&#8217;. You can have pencil marks for multiple monsters in the same square. A square containing a full-size monster cannot also contain pencil marks.
43</p>
44<p>
45The game pays no attention to pencil marks, so exactly what you use them for is up to you: you can use them as reminders that a particular square needs to be re-examined once you know more about a particular monster, or you can use them as lists of the possible monster in a given square, or anything else you feel like.
46</p>
47<p>
48To erase a single pencil mark, right-click in the square and type the same letter again.
49</p>
50<p>
51All pencil marks in a square are erased when you left-click and type a monster letter, or when you left-click and press Space. Right-clicking and pressing space will also erase pencil marks.
52</p>
53<p>
54As for Solo, the cursor keys can be used in conjunction with the letter keys to place monsters or pencil marks. Use the cursor keys to move a highlight around the grid, and type a monster letter to enter it in the highlighted square. Pressing return toggles the highlight into a mode in which you can enter or remove pencil marks.
55</p>
56<p>
57If you prefer plain letters of the alphabet to cute monster pictures, you can press &#8216;A&#8217; to toggle between showing the monsters as monsters or showing them as letters.
58</p>
59<p>
60Left-clicking a clue will mark it as done (grey it out), or unmark it if it is already marked.
61</p>
62<p>
63(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
64</p>
65<h2><a name="S37.2"></a>37.2 <a name="i2"></a>Undead parameters</h2>
66<p>
67These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
68</p>
69<dl><dt>
70<em>Width</em>, <em>Height</em>
71</dt>
72<dd>
73Size of grid in squares.
74</dd>
75<dt>
76<em>Difficulty</em>
77</dt>
78<dd>
79Controls the difficulty of the generated puzzle.
80</dd>
81</dl>
82
83<hr><address></address></body>
84</html>
diff --git a/apps/plugins/puzzles/unequal.R b/apps/plugins/puzzles/src/unequal.R
index a061582768..a061582768 100644
--- a/apps/plugins/puzzles/unequal.R
+++ b/apps/plugins/puzzles/src/unequal.R
diff --git a/apps/plugins/puzzles/unequal.c b/apps/plugins/puzzles/src/unequal.c
index 1293de28e8..a63b7d8ed0 100644
--- a/apps/plugins/puzzles/unequal.c
+++ b/apps/plugins/puzzles/src/unequal.c
@@ -19,7 +19,7 @@
19#include <stdio.h> 19#include <stdio.h>
20#include <stdlib.h> 20#include <stdlib.h>
21#include <string.h> 21#include <string.h>
22#include "rbassert.h" 22#include <assert.h>
23#include <ctype.h> 23#include <ctype.h>
24#include <math.h> 24#include <math.h>
25 25
@@ -1993,7 +1993,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
1993const struct game thegame = { 1993const struct game thegame = {
1994 "Unequal", "games.unequal", "unequal", 1994 "Unequal", "games.unequal", "unequal",
1995 default_params, 1995 default_params,
1996 game_fetch_preset, 1996 game_fetch_preset, NULL,
1997 decode_params, 1997 decode_params,
1998 encode_params, 1998 encode_params,
1999 free_params, 1999 free_params,
diff --git a/apps/plugins/puzzles/src/unequal.html b/apps/plugins/puzzles/src/unequal.html
new file mode 100644
index 0000000000..8337695c17
--- /dev/null
+++ b/apps/plugins/puzzles/src/unequal.html
@@ -0,0 +1,103 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Unequal</title>
7<link rel="previous" href="bridges.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="galaxies.html">
12</head>
13<body>
14<p><a href="bridges.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="galaxies.html">Next</a></p>
15<h1><a name="C27"></a>Chapter 27: <a name="i0"></a>Unequal</h1>
16<p>
17You have a square grid; each square may contain a digit from 1 to the size of the grid, and some squares have clue signs between them. Your aim is to fully populate the grid with numbers such that:
18</p>
19<ul><li>
20Each row contains only one occurrence of each digit
21</li>
22<li>
23Each column contains only one occurrence of each digit
24</li>
25<li>
26All the clue signs are satisfied.
27</li>
28</ul>
29<p>
30There are two modes for this game, &#8216;Unequal&#8217; and &#8216;Adjacent&#8217;.
31</p>
32<p>
33In &#8216;Unequal&#8217; mode, the clue signs are greater-than symbols indicating one square's value is greater than its neighbour's. In this mode not all clues may be visible, particularly at higher difficulty levels.
34</p>
35<p>
36In &#8216;Adjacent&#8217; mode, the clue signs are bars indicating one square's value is numerically adjacent (i.e. one higher or one lower) than its neighbour. In this mode all clues are always visible: absence of a bar thus means that a square's value is definitely not numerically adjacent to that neighbour's.
37</p>
38<p>
39In &#8216;Trivial&#8217; difficulty level (available via the &#8216;Custom&#8217; game type selector), there are no greater-than signs in &#8216;Unequal&#8217; mode; the puzzle is to solve the <a name="i1"></a>Latin square only.
40</p>
41<p>
42At the time of writing, the &#8216;Unequal&#8217; mode of this puzzle is appearing in the Guardian weekly under the name &#8216;<a name="i2"></a>Futoshiki&#8217;.
43</p>
44<p>
45Unequal was contributed to this collection by James Harvey.
46</p>
47<h2><a name="S27.1"></a>27.1 <a name="i3"></a>Unequal controls</h2>
48<p>
49Unequal shares much of its control system with Solo.
50</p>
51<p>
52To play Unequal, simply click the mouse in any empty square and then type a digit or letter on the keyboard to fill that square. If you make a mistake, click the mouse in the incorrect square and press Space to clear it again (or use the Undo feature).
53</p>
54<p>
55If you <em>right</em>-click in a square and then type a number, that number will be entered in the square as a &#8216;pencil mark&#8217;. You can have pencil marks for multiple numbers in the same square. Squares containing filled-in numbers cannot also contain pencil marks.
56</p>
57<p>
58The game pays no attention to pencil marks, so exactly what you use them for is up to you: you can use them as reminders that a particular square needs to be re-examined once you know more about a particular number, or you can use them as lists of the possible numbers in a given square, or anything else you feel like.
59</p>
60<p>
61To erase a single pencil mark, right-click in the square and type the same number again.
62</p>
63<p>
64All pencil marks in a square are erased when you left-click and type a number, or when you left-click and press space. Right-clicking and pressing space will also erase pencil marks.
65</p>
66<p>
67As for Solo, the cursor keys can be used in conjunction with the digit keys to set numbers or pencil marks. You can also use the &#8216;M&#8217; key to auto-fill every numeric hint, ready for removal as required, or the &#8216;H&#8217; key to do the same but also to remove all obvious hints.
68</p>
69<p>
70Alternatively, use the cursor keys to move the mark around the grid. Pressing the return key toggles the mark (from a normal mark to a pencil mark), and typing a number in is entered in the square in the appropriate way; typing in a 0 or using the space bar will clear a filled square.
71</p>
72<p>
73Left-clicking a clue will mark it as done (grey it out), or unmark it if it is already marked. Holding Control or Shift and pressing an arrow key likewise marks any clue adjacent to the cursor in the given direction.
74</p>
75<p>
76(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
77</p>
78<h2><a name="S27.2"></a>27.2 <a name="i4"></a>Unequal parameters</h2>
79<p>
80These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
81</p>
82<dl><dt>
83<em>Mode</em>
84</dt>
85<dd>
86Mode of the puzzle (&#8216;Unequal&#8217; or &#8216;Adjacent&#8217;)
87</dd>
88<dt>
89<em>Size (s*s)</em>
90</dt>
91<dd>
92Size of grid.
93</dd>
94<dt>
95<em>Difficulty</em>
96</dt>
97<dd>
98Controls the difficulty of the generated puzzle. At Trivial level, there are no greater-than signs; the puzzle is to solve the Latin square only. At Recursive level (only available via the &#8216;Custom&#8217; game type selector) backtracking will be required, but the solution should still be unique. The levels in between require increasingly complex reasoning to avoid having to backtrack.
99</dd>
100</dl>
101
102<hr><address></address></body>
103</html>
diff --git a/apps/plugins/puzzles/unfinished/README b/apps/plugins/puzzles/src/unfinished/README
index 0f8bb41d7c..0f8bb41d7c 100644
--- a/apps/plugins/puzzles/unfinished/README
+++ b/apps/plugins/puzzles/src/unfinished/README
diff --git a/apps/plugins/puzzles/unfinished/group.R b/apps/plugins/puzzles/src/unfinished/group.R
index a11d22e9b9..a11d22e9b9 100644
--- a/apps/plugins/puzzles/unfinished/group.R
+++ b/apps/plugins/puzzles/src/unfinished/group.R
diff --git a/apps/plugins/puzzles/unfinished/group.c b/apps/plugins/puzzles/src/unfinished/group.c
index bec826e367..4a4ad6ce53 100644
--- a/apps/plugins/puzzles/unfinished/group.c
+++ b/apps/plugins/puzzles/src/unfinished/group.c
@@ -2067,7 +2067,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
2067const struct game thegame = { 2067const struct game thegame = {
2068 "Group", NULL, NULL, 2068 "Group", NULL, NULL,
2069 default_params, 2069 default_params,
2070 game_fetch_preset, 2070 game_fetch_preset, NULL,
2071 decode_params, 2071 decode_params,
2072 encode_params, 2072 encode_params,
2073 free_params, 2073 free_params,
diff --git a/apps/plugins/puzzles/unfinished/group.gap b/apps/plugins/puzzles/src/unfinished/group.gap
index 280adf4664..280adf4664 100644
--- a/apps/plugins/puzzles/unfinished/group.gap
+++ b/apps/plugins/puzzles/src/unfinished/group.gap
diff --git a/apps/plugins/puzzles/unfinished/numgame.c b/apps/plugins/puzzles/src/unfinished/numgame.c
index aed5c17347..aed5c17347 100644
--- a/apps/plugins/puzzles/unfinished/numgame.c
+++ b/apps/plugins/puzzles/src/unfinished/numgame.c
diff --git a/apps/plugins/puzzles/unfinished/path.c b/apps/plugins/puzzles/src/unfinished/path.c
index 61d6c61c6a..61d6c61c6a 100644
--- a/apps/plugins/puzzles/unfinished/path.c
+++ b/apps/plugins/puzzles/src/unfinished/path.c
diff --git a/apps/plugins/puzzles/unfinished/separate.R b/apps/plugins/puzzles/src/unfinished/separate.R
index f861c8f4fe..f861c8f4fe 100644
--- a/apps/plugins/puzzles/unfinished/separate.R
+++ b/apps/plugins/puzzles/src/unfinished/separate.R
diff --git a/apps/plugins/puzzles/unfinished/separate.c b/apps/plugins/puzzles/src/unfinished/separate.c
index 898304a0e6..a7b4fc96e1 100644
--- a/apps/plugins/puzzles/unfinished/separate.c
+++ b/apps/plugins/puzzles/src/unfinished/separate.c
@@ -823,7 +823,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
823const struct game thegame = { 823const struct game thegame = {
824 "Separate", NULL, NULL, 824 "Separate", NULL, NULL,
825 default_params, 825 default_params,
826 game_fetch_preset, 826 game_fetch_preset, NULL,
827 decode_params, 827 decode_params,
828 encode_params, 828 encode_params,
829 free_params, 829 free_params,
diff --git a/apps/plugins/puzzles/unfinished/slide.R b/apps/plugins/puzzles/src/unfinished/slide.R
index 189ed652d1..189ed652d1 100644
--- a/apps/plugins/puzzles/unfinished/slide.R
+++ b/apps/plugins/puzzles/src/unfinished/slide.R
diff --git a/apps/plugins/puzzles/unfinished/slide.c b/apps/plugins/puzzles/src/unfinished/slide.c
index b1aa04bc90..9d4fce1461 100644
--- a/apps/plugins/puzzles/unfinished/slide.c
+++ b/apps/plugins/puzzles/src/unfinished/slide.c
@@ -2320,7 +2320,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
2320const struct game thegame = { 2320const struct game thegame = {
2321 "Slide", NULL, NULL, 2321 "Slide", NULL, NULL,
2322 default_params, 2322 default_params,
2323 game_fetch_preset, 2323 game_fetch_preset, NULL,
2324 decode_params, 2324 decode_params,
2325 encode_params, 2325 encode_params,
2326 free_params, 2326 free_params,
diff --git a/apps/plugins/puzzles/unfinished/sokoban.R b/apps/plugins/puzzles/src/unfinished/sokoban.R
index 3b6dab56ba..3b6dab56ba 100644
--- a/apps/plugins/puzzles/unfinished/sokoban.R
+++ b/apps/plugins/puzzles/src/unfinished/sokoban.R
diff --git a/apps/plugins/puzzles/unfinished/sokoban.c b/apps/plugins/puzzles/src/unfinished/sokoban.c
index b5533c9034..2f0af35bc2 100644
--- a/apps/plugins/puzzles/unfinished/sokoban.c
+++ b/apps/plugins/puzzles/src/unfinished/sokoban.c
@@ -1443,7 +1443,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
1443const struct game thegame = { 1443const struct game thegame = {
1444 "Sokoban", NULL, NULL, 1444 "Sokoban", NULL, NULL,
1445 default_params, 1445 default_params,
1446 game_fetch_preset, 1446 game_fetch_preset, NULL,
1447 decode_params, 1447 decode_params,
1448 encode_params, 1448 encode_params,
1449 free_params, 1449 free_params,
diff --git a/apps/plugins/puzzles/unruly.R b/apps/plugins/puzzles/src/unruly.R
index 064ccc35ba..064ccc35ba 100644
--- a/apps/plugins/puzzles/unruly.R
+++ b/apps/plugins/puzzles/src/unruly.R
diff --git a/apps/plugins/puzzles/unruly.c b/apps/plugins/puzzles/src/unruly.c
index aea4cdf789..f418efa776 100644
--- a/apps/plugins/puzzles/unruly.c
+++ b/apps/plugins/puzzles/src/unruly.c
@@ -45,7 +45,7 @@
45#include <stdio.h> 45#include <stdio.h>
46#include <stdlib.h> 46#include <stdlib.h>
47#include <string.h> 47#include <string.h>
48#include "rbassert.h" 48#include <assert.h>
49#include <ctype.h> 49#include <ctype.h>
50#include <math.h> 50#include <math.h>
51 51
@@ -1912,7 +1912,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
1912const struct game thegame = { 1912const struct game thegame = {
1913 "Unruly", "games.unruly", "unruly", 1913 "Unruly", "games.unruly", "unruly",
1914 default_params, 1914 default_params,
1915 game_fetch_preset, 1915 game_fetch_preset, NULL,
1916 decode_params, 1916 decode_params,
1917 encode_params, 1917 encode_params,
1918 free_params, 1918 free_params,
diff --git a/apps/plugins/puzzles/src/unruly.html b/apps/plugins/puzzles/src/unruly.html
new file mode 100644
index 0000000000..92d19ad50a
--- /dev/null
+++ b/apps/plugins/puzzles/src/unruly.html
@@ -0,0 +1,63 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Unruly</title>
7<link rel="previous" href="undead.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="flood.html">
12</head>
13<body>
14<p><a href="undead.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="flood.html">Next</a></p>
15<h1><a name="C38"></a>Chapter 38: <a name="i0"></a>Unruly</h1>
16<p>
17You are given a grid of squares, which you must colour either black or white. Some squares are provided as clues; the rest are left for you to fill in. Each row and column must contain the same number of black and white squares, and no row or column may contain three consecutive squares of the same colour.
18</p>
19<p>
20This puzzle type was invented by Adolfo Zanellati, under the name &#8216;Tohu wa Vohu&#8217;. See <a href="#p0">[21]</a> for more details.
21</p>
22<p>
23Unruly was contributed to this collection by Lennard Sprong.
24</p>
25<p><a name="p0"></a>
26[21] <a href="http://www.janko.at/Raetsel/Tohu-Wa-Vohu/index.htm"><code>http://www.janko.at/Raetsel/Tohu-Wa-Vohu/index.htm</code></a>
27</p>
28<h2><a name="S38.1"></a>38.1 <a name="i1"></a>Unruly controls</h2>
29<p>
30To play Unruly, click the mouse in a square to change its colour. Left-clicking an empty square will turn it black, and right-clicking will turn it white. Keep clicking the same button to cycle through the three possible states for the square. If you middle-click in a square it will be reset to empty.
31</p>
32<p>
33You can also use the cursor keys to move around the grid. Pressing the return or space keys will turn an empty square black or white respectively (and then cycle the colours in the same way as the mouse buttons), and pressing Backspace will reset a square to empty.
34</p>
35<p>
36(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
37</p>
38<h2><a name="S38.2"></a>38.2 <a name="i2"></a>Unruly parameters</h2>
39<p>
40These parameters are available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu.
41</p>
42<dl><dt>
43<em>Width</em>, <em>Height</em>
44</dt>
45<dd>
46Size of grid in squares. (Note that the rules of the game require both the width and height to be even numbers.)
47</dd>
48<dt>
49<em>Difficulty</em>
50</dt>
51<dd>
52Controls the difficulty of the generated puzzle.
53</dd>
54<dt>
55<em>Unique rows and columns</em>
56</dt>
57<dd>
58If enabled, no two rows are permitted to have exactly the same pattern, and likewise columns. (A row and a column can match, though.)
59</dd>
60</dl>
61
62<hr><address></address></body>
63</html>
diff --git a/apps/plugins/puzzles/untangle.R b/apps/plugins/puzzles/src/untangle.R
index a57f1e56fd..a57f1e56fd 100644
--- a/apps/plugins/puzzles/untangle.R
+++ b/apps/plugins/puzzles/src/untangle.R
diff --git a/apps/plugins/puzzles/untangle.c b/apps/plugins/puzzles/src/untangle.c
index d46afcbe66..47e839e875 100644
--- a/apps/plugins/puzzles/untangle.c
+++ b/apps/plugins/puzzles/src/untangle.c
@@ -29,7 +29,7 @@
29#include <stdio.h> 29#include <stdio.h>
30#include <stdlib.h> 30#include <stdlib.h>
31#include <string.h> 31#include <string.h>
32#include "rbassert.h" 32#include <assert.h>
33#include <ctype.h> 33#include <ctype.h>
34#include <math.h> 34#include <math.h>
35 35
@@ -1601,7 +1601,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
1601const struct game thegame = { 1601const struct game thegame = {
1602 "Untangle", "games.untangle", "untangle", 1602 "Untangle", "games.untangle", "untangle",
1603 default_params, 1603 default_params,
1604 game_fetch_preset, 1604 game_fetch_preset, NULL,
1605 decode_params, 1605 decode_params,
1606 encode_params, 1606 encode_params,
1607 free_params, 1607 free_params,
diff --git a/apps/plugins/puzzles/src/untangle.html b/apps/plugins/puzzles/src/untangle.html
new file mode 100644
index 0000000000..340c0095cf
--- /dev/null
+++ b/apps/plugins/puzzles/src/untangle.html
@@ -0,0 +1,45 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2"http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=US-ASCII">
6<title>Untangle</title>
7<link rel="previous" href="dominosa.html">
8<link rel="ToC" href="index.html">
9<link rel="up" href="index.html">
10<link rel="index" href="docindex.html">
11<link rel="next" href="blackbox.html">
12</head>
13<body>
14<p><a href="dominosa.html">Previous</a> | <a href="index.html">Contents</a> | <a href="docindex.html">Index</a> | <a href="blackbox.html">Next</a></p>
15<h1><a name="C18"></a>Chapter 18: <a name="i0"></a>Untangle</h1>
16<p>
17You are given a number of points, some of which have lines drawn between them. You can move the points about arbitrarily; your aim is to position the points so that no line crosses another.
18</p>
19<p>
20I originally saw this in the form of a Flash game called <a name="i1"></a>Planarity <a href="#p0">[7]</a>, written by John Tantalo.
21</p>
22<p><a name="p0"></a>
23[7] <a href="http://planarity.net"><code>http://planarity.net</code></a>
24</p>
25<h2><a name="S18.1"></a>18.1 <a name="i2"></a>Untangle controls</h2>
26<p>
27To move a point, click on it with the left mouse button and drag it into a new position.
28</p>
29<p>
30(All the actions described in <a href="common.html#S2.1">section 2.1</a> are also available.)
31</p>
32<h2><a name="S18.2"></a>18.2 <a name="i3"></a>Untangle parameters</h2>
33<p>
34There is only one parameter available from the &#8216;Custom...&#8217; option on the &#8216;Type&#8217; menu:
35</p>
36<dl><dt>
37<em>Number of points</em>
38</dt>
39<dd>
40Controls the size of the puzzle, by specifying the number of points in the generated graph.
41</dd>
42</dl>
43
44<hr><address></address></body>
45</html>
diff --git a/apps/plugins/puzzles/version.c b/apps/plugins/puzzles/src/version.c
index 1cef29feb7..1cef29feb7 100644
--- a/apps/plugins/puzzles/version.c
+++ b/apps/plugins/puzzles/src/version.c
diff --git a/apps/plugins/puzzles/version.h b/apps/plugins/puzzles/src/version.h
index 997e00592b..997e00592b 100644
--- a/apps/plugins/puzzles/version.h
+++ b/apps/plugins/puzzles/src/version.h
diff --git a/apps/plugins/puzzles/wceinf.pl b/apps/plugins/puzzles/src/wceinf.pl
index 4756f3c2b8..4756f3c2b8 100644
--- a/apps/plugins/puzzles/wceinf.pl
+++ b/apps/plugins/puzzles/src/wceinf.pl
diff --git a/apps/plugins/puzzles/webpage.pl b/apps/plugins/puzzles/src/webpage.pl
index 3a0779ef0a..3a0779ef0a 100755
--- a/apps/plugins/puzzles/webpage.pl
+++ b/apps/plugins/puzzles/src/webpage.pl
diff --git a/apps/plugins/puzzles/website.url b/apps/plugins/puzzles/src/website.url
index 2ab37f6faf..2ab37f6faf 100644
--- a/apps/plugins/puzzles/website.url
+++ b/apps/plugins/puzzles/src/website.url
diff --git a/apps/plugins/puzzles/windows.c b/apps/plugins/puzzles/src/windows.c
index 492e37ceac..d4b30386a6 100644
--- a/apps/plugins/puzzles/windows.c
+++ b/apps/plugins/puzzles/src/windows.c
@@ -14,7 +14,7 @@
14#endif 14#endif
15 15
16#include <stdio.h> 16#include <stdio.h>
17#include "rbassert.h" 17#include <assert.h>
18#include <ctype.h> 18#include <ctype.h>
19#include <stdarg.h> 19#include <stdarg.h>
20#include <stdlib.h> 20#include <stdlib.h>
@@ -195,6 +195,11 @@ struct blitter {
195 195
196enum { CFG_PRINT = CFG_FRONTEND_SPECIFIC }; 196enum { CFG_PRINT = CFG_FRONTEND_SPECIFIC };
197 197
198struct preset_menuitemref {
199 HMENU which_menu;
200 int item_index;
201};
202
198struct frontend { 203struct frontend {
199 const game *game; 204 const game *game;
200 midend *me; 205 midend *me;
@@ -213,8 +218,9 @@ struct frontend {
213 HMENU gamemenu, typemenu; 218 HMENU gamemenu, typemenu;
214 UINT timer; 219 UINT timer;
215 DWORD timer_last_tickcount; 220 DWORD timer_last_tickcount;
216 int npresets; 221 struct preset_menu *preset_menu;
217 game_params **presets; 222 struct preset_menuitemref *preset_menuitems;
223 int n_preset_menuitems;
218 struct font *fonts; 224 struct font *fonts;
219 int nfonts, fontsize; 225 int nfonts, fontsize;
220 config_item *cfg; 226 config_item *cfg;
@@ -244,7 +250,6 @@ void frontend_free(frontend *fe)
244 sfree(fe->colours); 250 sfree(fe->colours);
245 sfree(fe->brushes); 251 sfree(fe->brushes);
246 sfree(fe->pens); 252 sfree(fe->pens);
247 sfree(fe->presets);
248 sfree(fe->fonts); 253 sfree(fe->fonts);
249 254
250 sfree(fe); 255 sfree(fe);
@@ -1530,12 +1535,12 @@ static frontend *frontend_new(HINSTANCE inst)
1530 NULL, NULL, inst, NULL); 1535 NULL, NULL, inst, NULL);
1531 if (!fe->hwnd) { 1536 if (!fe->hwnd) {
1532 DWORD lerr = GetLastError(); 1537 DWORD lerr = GetLastError();
1533 printf("no window: 0x%x\n", lerr); 1538 printf("no window: 0x%x\n", (unsigned)lerr);
1534 } 1539 }
1535#endif 1540#endif
1536 1541
1537 fe->gamemenu = NULL; 1542 fe->gamemenu = NULL;
1538 fe->presets = NULL; 1543 fe->preset_menu = NULL;
1539 1544
1540 fe->statusbar = NULL; 1545 fe->statusbar = NULL;
1541 fe->bitmap = NULL; 1546 fe->bitmap = NULL;
@@ -1658,6 +1663,46 @@ static midend *midend_for_new_game(frontend *fe, const game *cgame,
1658 return me; 1663 return me;
1659} 1664}
1660 1665
1666static void populate_preset_menu(frontend *fe,
1667 struct preset_menu *menu, HMENU winmenu)
1668{
1669 int i;
1670 for (i = 0; i < menu->n_entries; i++) {
1671 struct preset_menu_entry *entry = &menu->entries[i];
1672 UINT_PTR id_or_sub;
1673 UINT flags = MF_ENABLED;
1674
1675 if (entry->params) {
1676 id_or_sub = (UINT_PTR)(IDM_PRESETS + 0x10 * entry->id);
1677
1678 fe->preset_menuitems[entry->id].which_menu = winmenu;
1679 fe->preset_menuitems[entry->id].item_index =
1680 GetMenuItemCount(winmenu);
1681 } else {
1682 HMENU winsubmenu = CreateMenu();
1683 id_or_sub = (UINT_PTR)winsubmenu;
1684 flags |= MF_POPUP;
1685
1686 populate_preset_menu(fe, entry->submenu, winsubmenu);
1687 }
1688
1689 /*
1690 * FIXME: we ought to go through and do something with ampersands
1691 * here.
1692 */
1693
1694#ifndef _WIN32_WCE
1695 AppendMenu(winmenu, flags, id_or_sub, entry->title);
1696#else
1697 {
1698 TCHAR wName[255];
1699 MultiByteToWideChar(CP_ACP, 0, entry->title, -1, wName, 255);
1700 AppendMenu(winmenu, flags, id_or_sub, wName);
1701 }
1702#endif
1703 }
1704}
1705
1661/* 1706/*
1662 * Populate a frontend structure with a new midend structure, and 1707 * Populate a frontend structure with a new midend structure, and
1663 * create any window furniture that it needs. 1708 * create any window furniture that it needs.
@@ -1799,11 +1844,16 @@ static int fe_set_midend(frontend *fe, midend *me)
1799 AppendMenu(menu, MF_ENABLED, IDM_SEED, TEXT("Rando&m Seed...")); 1844 AppendMenu(menu, MF_ENABLED, IDM_SEED, TEXT("Rando&m Seed..."));
1800#endif 1845#endif
1801 1846
1802 if (fe->presets) 1847 if (!fe->preset_menu) {
1803 sfree(fe->presets); 1848 int i;
1804 if ((fe->npresets = midend_num_presets(fe->me)) > 0 || 1849 fe->preset_menu = midend_get_presets(
1805 fe->game->can_configure) { 1850 fe->me, &fe->n_preset_menuitems);
1806 int i; 1851 fe->preset_menuitems = snewn(fe->n_preset_menuitems,
1852 struct preset_menuitemref);
1853 for (i = 0; i < fe->n_preset_menuitems; i++)
1854 fe->preset_menuitems[i].which_menu = NULL;
1855 }
1856 if (fe->preset_menu->n_entries > 0 || fe->game->can_configure) {
1807#ifndef _WIN32_WCE 1857#ifndef _WIN32_WCE
1808 HMENU sub = CreateMenu(); 1858 HMENU sub = CreateMenu();
1809 1859
@@ -1812,28 +1862,9 @@ static int fe_set_midend(frontend *fe, midend *me)
1812 HMENU sub = SHGetSubMenu(SHFindMenuBar(fe->hwnd), ID_TYPE); 1862 HMENU sub = SHGetSubMenu(SHFindMenuBar(fe->hwnd), ID_TYPE);
1813 DeleteMenu(sub, 0, MF_BYPOSITION); 1863 DeleteMenu(sub, 0, MF_BYPOSITION);
1814#endif 1864#endif
1815 fe->presets = snewn(fe->npresets, game_params *);
1816
1817 for (i = 0; i < fe->npresets; i++) {
1818 char *name;
1819#ifdef _WIN32_WCE
1820 TCHAR wName[255];
1821#endif
1822
1823 midend_fetch_preset(fe->me, i, &name, &fe->presets[i]);
1824 1865
1825 /* 1866 populate_preset_menu(fe, fe->preset_menu, sub);
1826 * FIXME: we ought to go through and do something
1827 * with ampersands here.
1828 */
1829 1867
1830#ifndef _WIN32_WCE
1831 AppendMenu(sub, MF_ENABLED, IDM_PRESETS + 0x10 * i, name);
1832#else
1833 MultiByteToWideChar (CP_ACP, 0, name, -1, wName, 255);
1834 AppendMenu(sub, MF_ENABLED, IDM_PRESETS + 0x10 * i, wName);
1835#endif
1836 }
1837 if (fe->game->can_configure) { 1868 if (fe->game->can_configure) {
1838 AppendMenu(sub, MF_ENABLED, IDM_CONFIG, TEXT("&Custom...")); 1869 AppendMenu(sub, MF_ENABLED, IDM_CONFIG, TEXT("&Custom..."));
1839 } 1870 }
@@ -1841,7 +1872,6 @@ static int fe_set_midend(frontend *fe, midend *me)
1841 fe->typemenu = sub; 1872 fe->typemenu = sub;
1842 } else { 1873 } else {
1843 fe->typemenu = INVALID_HANDLE_VALUE; 1874 fe->typemenu = INVALID_HANDLE_VALUE;
1844 fe->presets = NULL;
1845 } 1875 }
1846 1876
1847#ifdef COMBINED 1877#ifdef COMBINED
@@ -2893,14 +2923,22 @@ static void update_type_menu_tick(frontend *fe)
2893 if (fe->typemenu == INVALID_HANDLE_VALUE) 2923 if (fe->typemenu == INVALID_HANDLE_VALUE)
2894 return; 2924 return;
2895 2925
2896 total = GetMenuItemCount(fe->typemenu);
2897 n = midend_which_preset(fe->me); 2926 n = midend_which_preset(fe->me);
2898 if (n < 0)
2899 n = total - 1; /* "Custom" item */
2900 2927
2901 for (i = 0; i < total; i++) { 2928 for (i = 0; i < fe->n_preset_menuitems; i++) {
2902 int flag = (i == n ? MF_CHECKED : MF_UNCHECKED); 2929 if (fe->preset_menuitems[i].which_menu) {
2903 CheckMenuItem(fe->typemenu, i, MF_BYPOSITION | flag); 2930 int flag = (i == n ? MF_CHECKED : MF_UNCHECKED);
2931 CheckMenuItem(fe->preset_menuitems[i].which_menu,
2932 fe->preset_menuitems[i].item_index,
2933 MF_BYPOSITION | flag);
2934 }
2935 }
2936
2937 if (fe->game->can_configure) {
2938 int flag = (n < 0 ? MF_CHECKED : MF_UNCHECKED);
2939 /* "Custom" menu item is at the bottom of the top-level Type menu */
2940 total = GetMenuItemCount(fe->typemenu);
2941 CheckMenuItem(fe->typemenu, total - 1, MF_BYPOSITION | flag);
2904 } 2942 }
2905 2943
2906 DrawMenuBar(fe->hwnd); 2944 DrawMenuBar(fe->hwnd);
@@ -3146,10 +3184,12 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
3146 } else 3184 } else
3147#endif 3185#endif
3148 { 3186 {
3149 int p = ((wParam &~ 0xF) - IDM_PRESETS) / 0x10; 3187 game_params *preset = preset_menu_lookup_by_id(
3188 fe->preset_menu,
3189 ((wParam &~ 0xF) - IDM_PRESETS) / 0x10);
3150 3190
3151 if (p >= 0 && p < fe->npresets) { 3191 if (preset) {
3152 midend_set_params(fe->me, fe->presets[p]); 3192 midend_set_params(fe->me, preset);
3153 new_game_type(fe); 3193 new_game_type(fe);
3154 } 3194 }
3155 } 3195 }
@@ -3653,7 +3693,7 @@ void split_into_argv(char *cmdline, int *argc, char ***argv,
3653int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) 3693int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
3654{ 3694{
3655 MSG msg; 3695 MSG msg;
3656 char *error; 3696 char *error = NULL;
3657 const game *gg; 3697 const game *gg;
3658 frontend *fe; 3698 frontend *fe;
3659 midend *me; 3699 midend *me;
diff --git a/apps/plugins/puzzles/winiss.pl b/apps/plugins/puzzles/src/winiss.pl
index eca02d3b15..eca02d3b15 100755
--- a/apps/plugins/puzzles/winiss.pl
+++ b/apps/plugins/puzzles/src/winiss.pl
diff --git a/apps/plugins/puzzles/winwix.mc b/apps/plugins/puzzles/src/winwix.mc
index 1a1e620b82..1a1e620b82 100644
--- a/apps/plugins/puzzles/winwix.mc
+++ b/apps/plugins/puzzles/src/winwix.mc