X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/puzzles/blobdiff_plain/de344430a27759d3ca9a9ca695ef171a0b24bfcb..a36a26d73183965c4286f71ede896ccdbf8d5102:/puzzles.h diff --git a/puzzles.h b/puzzles.h index 9b69d1b..1b1f013 100644 --- a/puzzles.h +++ b/puzzles.h @@ -7,6 +7,7 @@ #include /* for FILE */ #include /* for size_t */ +#include /* for UINT_MAX */ #ifndef TRUE #define TRUE 1 @@ -109,14 +110,12 @@ typedef struct psdata psdata; #define FONT_VARIABLE 1 /* For printing colours */ -#define HATCH_SOLID 0 -#define HATCH_CLEAR 1 -#define HATCH_SLASH 2 -#define HATCH_BACKSLASH 3 -#define HATCH_HORIZ 4 -#define HATCH_VERT 5 -#define HATCH_PLUS 6 -#define HATCH_X 7 +#define HATCH_SLASH 1 +#define HATCH_BACKSLASH 2 +#define HATCH_HORIZ 3 +#define HATCH_VERT 4 +#define HATCH_PLUS 5 +#define HATCH_X 6 /* * Structure used to pass configuration data between frontend and @@ -204,11 +203,15 @@ void print_begin_puzzle(drawing *dr, float xm, float xc, void print_end_puzzle(drawing *dr); void print_end_page(drawing *dr, int number); void print_end_doc(drawing *dr); -void print_get_colour(drawing *dr, int colour, int *hatch, - float *r, float *g, float *b); +void print_get_colour(drawing *dr, int colour, int printing_in_colour, + int *hatch, float *r, float *g, float *b); int print_mono_colour(drawing *dr, int grey); /* 0==black, 1==white */ -int print_grey_colour(drawing *dr, int hatch, float grey); -int print_rgb_colour(drawing *dr, int hatch, float r, float g, float b); +int print_grey_colour(drawing *dr, float grey); +int print_hatched_colour(drawing *dr, int hatch); +int print_rgb_mono_colour(drawing *dr, float r, float g, float b, int mono); +int print_rgb_grey_colour(drawing *dr, float r, float g, float b, float grey); +int print_rgb_hatched_colour(drawing *dr, float r, float g, float b, + int hatch); void print_line_width(drawing *dr, int width); /* @@ -232,12 +235,14 @@ void midend_timer(midend *me, float tplus); int midend_num_presets(midend *me); void midend_fetch_preset(midend *me, int n, char **name, game_params **params); +int midend_which_preset(midend *me); int midend_wants_statusbar(midend *me); enum { CFG_SETTINGS, CFG_SEED, CFG_DESC, CFG_FRONTEND_SPECIFIC }; config_item *midend_get_config(midend *me, int which, char **wintitle); char *midend_set_config(midend *me, int which, config_item *cfg); char *midend_game_id(midend *me, char *id); char *midend_get_game_id(midend *me); +int midend_can_format_as_text_now(midend *me); char *midend_text_format(midend *me); char *midend_solve(midend *me); void midend_supersede_game_desc(midend *me, char *desc, char *privdesc); @@ -331,7 +336,14 @@ void random_free(random_state *state); char *random_state_encode(random_state *state); random_state *random_state_decode(char *input); /* random.c also exports SHA, which occasionally comes in useful. */ +#if __STDC_VERSION__ >= 199901L +#include +typedef uint32_t uint32; +#elif UINT_MAX >= 4294967295L +typedef unsigned int uint32; +#else typedef unsigned long uint32; +#endif typedef struct { uint32 h[5]; unsigned char block[64]; @@ -374,6 +386,12 @@ combi_ctx *next_combi(combi_ctx *combi); /* returns NULL for end */ void free_combi(combi_ctx *combi); /* + * divvy.c + */ +/* divides w*h rectangle into pieces of size k. Returns w*h dsf. */ +int *divvy_rectangle(int w, int h, int k, random_state *rs); + +/* * 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 @@ -402,7 +420,8 @@ struct game { int can_solve; char *(*solve)(game_state *orig, game_state *curr, char *aux, char **error); - int can_format_as_text; + int can_format_as_text_ever; + int (*can_format_as_text_now)(game_params *params); char *(*text_format)(game_state *state); game_ui *(*new_ui)(game_state *state); void (*free_ui)(game_ui *ui);