#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) )
/*
* drawing.c
*/
-drawing *drawing_init(const drawing_api *api, void *handle);
+drawing *drawing_new(const drawing_api *api, midend *me, void *handle);
void drawing_free(drawing *dr);
void draw_text(drawing *dr, int x, int y, int fonttype, int fontsize,
int align, int colour, char *text);
/*
* 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);
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
void (*compute_size)(game_params *params, int tilesize, int *x, int *y);
void (*set_size)(drawing *dr, game_drawstate *ds,
game_params *params, int tilesize);
- float *(*colours)(frontend *fe, game_state *state, int *ncolours);
+ float *(*colours)(frontend *fe, int *ncolours);
game_drawstate *(*new_drawstate)(drawing *dr, game_state *state);
void (*free_drawstate)(drawing *dr, game_drawstate *ds);
void (*redraw)(drawing *dr, game_drawstate *ds, game_state *oldstate,
int can_print, can_print_in_colour;
void (*print_size)(game_params *params, float *x, float *y);
void (*print)(drawing *dr, game_state *state, int tilesize);
- int (*wants_statusbar)(void);
+ int wants_statusbar;
int is_timed;
int (*timing_state)(game_state *state, game_ui *ui);
- int mouse_priorities;
+ int flags;
};
/*