X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/puzzles/blobdiff_plain/66a74a18d3d3e5a143aaccd3740a570ab171548a..be39fd6df763fafcc07131d46fa4a3bd59245b64:/puzzles.h diff --git a/puzzles.h b/puzzles.h index 4b977a5..3785772 100644 --- a/puzzles.h +++ b/puzzles.h @@ -67,8 +67,20 @@ enum { #define BUTTON_BEATS(x,y) ( 1 << (((x)-LEFT_BUTTON)*3+(y)-LEFT_BUTTON) ) /* Flag indicating that Solve operations should be animated */ #define SOLVE_ANIMATES ( 1 << 9 ) +/* Pocket PC: Game requires right mouse button emulation */ +#define REQUIRE_RBUTTON ( 1 << 10 ) +/* Pocket PC: Game requires numeric input */ +#define REQUIRE_NUMPAD ( 1 << 11 ) /* end of `flags' word definitions */ +#ifdef _WIN32_WCE + /* Pocket PC devices have small, portrait screen that requires more vivid colours */ + #define SMALL_SCREEN + #define PORTRAIT_SCREEN + #define VIVID_COLOURS + #define STYLUS_BASED +#endif + #define IGNOREARG(x) ( (x) = (x) ) typedef struct frontend frontend; @@ -207,7 +219,7 @@ midend *midend_new(frontend *fe, const game *ourgame, void midend_free(midend *me); void midend_set_params(midend *me, game_params *params); game_params *midend_get_params(midend *me); -void midend_size(midend *me, int *x, int *y, int expand); +void midend_size(midend *me, int *x, int *y, int user_size); void midend_new_game(midend *me); void midend_restart_game(midend *me); void midend_stop_anim(midend *me); @@ -215,6 +227,7 @@ int midend_process_key(midend *me, int x, int y, int button); void midend_force_redraw(midend *me); void midend_redraw(midend *me); float *midend_colours(midend *me, int *ncolours); +void midend_freeze_timer(midend *me, float tprop); void midend_timer(midend *me, float tplus); int midend_num_presets(midend *me); void midend_fetch_preset(midend *me, int n, @@ -278,7 +291,23 @@ void draw_rect_outline(drawing *dr, int x, int y, int w, int h, /* * dsf.c */ +int *snew_dsf(int size); + +void print_dsf(int *dsf, int size); + +/* Return the canonical element of the equivalence class containing element + * val. If 'inverse' is non-NULL, this function will put into it a flag + * indicating whether the canonical element is inverse to val. */ +int edsf_canonify(int *dsf, int val, int *inverse); int dsf_canonify(int *dsf, int val); +int dsf_size(int *dsf, int val); + +/* Allow the caller to specify that two elements should be in the same + * equivalence class. If 'inverse' is TRUE, the elements are actually opposite + * to one another in some sense. This function will fail an assertion if the + * caller gives it self-contradictory data, ie if two elements are claimed to + * be both opposite and non-opposite. */ +void edsf_merge(int *dsf, int v1, int v2, int inverse); void dsf_merge(int *dsf, int v1, int v2); void dsf_init(int *dsf, int len); @@ -349,7 +378,7 @@ void free_combi(combi_ctx *combi); */ struct game { const char *name; - const char *winhelp_topic; + const char *winhelp_topic, *htmlhelp_topic; game_params *(*default_params)(void); int (*fetch_preset)(int i, char **name, game_params **params); void (*decode_params)(game_params *, char const *string);