-# The Windows Net shouldn't be called `net.exe' since Windows
-# already has a reasonably important utility program by that name!
-netgame : [G] WINDOWS COMMON NET
-netslide : [G] WINDOWS COMMON NETSLIDE
-cube : [G] WINDOWS COMMON cube
-fifteen : [G] WINDOWS COMMON fifteen
-sixteen : [G] WINDOWS COMMON sixteen
-rect : [G] WINDOWS COMMON rect
-pattern : [G] WINDOWS COMMON pattern
-solo : [G] WINDOWS COMMON solo
-twiddle : [G] WINDOWS COMMON twiddle
-mines : [G] WINDOWS COMMON MINES
-samegame : [G] WINDOWS COMMON samegame
-flip : [G] WINDOWS COMMON FLIP
-guess : [G] WINDOWS COMMON guess
-pegs : [G] WINDOWS COMMON PEGS
+# First half of list.c.
+!begin >list.c
+/*
+ * list.c: List of pointers to puzzle structures, for monolithic
+ * platforms.
+ *
+ * This file is automatically generated by mkfiles.pl. Do not edit
+ * it directly, or the changes will be lost next time mkfiles.pl runs.
+ * Instead, edit Recipe and/or its *.R subfiles.
+ */
+#include "puzzles.h"
+#define GAMELIST(A) \
+!end
+
+# Now each .R file adds part of the macro definition of GAMELIST to list.c.
+!include *.R
+
+# Then we finish up list.c as follows:
+!begin >list.c
+
+#define DECL(x) extern const game x;
+#define REF(x) &x,
+GAMELIST(DECL)
+const game *gamelist[] = { GAMELIST(REF) };
+const int gamecount = lenof(gamelist);
+!end