Noticed recently that bitcount16() isn't 16-bit clean due to signed
[sgt/puzzles] / puzzles.h
index ebe6839..f4fc67f 100644 (file)
--- a/puzzles.h
+++ b/puzzles.h
@@ -60,12 +60,14 @@ enum {
 #define IS_MOUSE_RELEASE(m) ( (unsigned)((m) - LEFT_RELEASE) <= \
                                (unsigned)(RIGHT_RELEASE - LEFT_RELEASE))
 
+/*
+ * Flags in the back end's `flags' word.
+ */
 /* Bit flags indicating mouse button priorities */
 #define BUTTON_BEATS(x,y) ( 1 << (((x)-LEFT_BUTTON)*3+(y)-LEFT_BUTTON) )
-
-/* Another random flag that goes in the mouse priorities section for want
- * of a better place to put it */
+/* Flag indicating that Solve operations should be animated */
 #define SOLVE_ANIMATES ( 1 << 9 )
+/* end of `flags' word definitions */
 
 #define IGNOREARG(x) ( (x) = (x) )
 
@@ -287,7 +289,7 @@ extern char ver[];
 /*
  * random.c
  */
-random_state *random_init(char *seed, int len);
+random_state *random_new(char *seed, int len);
 random_state *random_copy(random_state *tocopy);
 unsigned long random_bits(random_state *state, int bits);
 unsigned long random_upto(random_state *state, unsigned long limit);
@@ -324,6 +326,20 @@ void ps_free(psdata *ps);
 drawing *ps_drawing_api(psdata *ps);
 
 /*
+ * combi.c: provides a structure and functions for iterating over
+ * combinations (i.e. choosing r things out of n).
+ */
+typedef struct _combi_ctx {
+  int r, n, nleft, total;
+  int *a;
+} combi_ctx;
+
+combi_ctx *new_combi(int r, int n);
+void reset_combi(combi_ctx *combi);
+combi_ctx *next_combi(combi_ctx *combi); /* returns NULL for end */
+void free_combi(combi_ctx *combi);
+
+/*
  * Data structure containing the function calls and data specific
  * to a particular game. This is enclosed in a data structure so
  * that a particular platform can choose, if it wishes, to compile
@@ -383,7 +399,7 @@ struct game {
     int (*wants_statusbar)(void);
     int is_timed;
     int (*timing_state)(game_state *state, game_ui *ui);
-    int mouse_priorities;
+    int flags;
 };
 
 /*