aboutsummaryrefslogtreecommitdiff
path: root/solo.c
diff options
context:
space:
mode:
authorFranklin Wei <me@fwei.tk>2018-04-17 16:18:16 -0400
committerSimon Tatham <anakin@pobox.com>2018-04-22 17:04:50 +0100
commit60a929a250cf4f7f87ac082e5705f9a838a7f8c8 (patch)
tree33a8a715f6320d2a2d58532b04e33ef111f31507 /solo.c
parent3d04dd3335a2c4c6007ff4e2a58a2855c7a9c52a (diff)
downloadpuzzles-60a929a250cf4f7f87ac082e5705f9a838a7f8c8.zip
puzzles-60a929a250cf4f7f87ac082e5705f9a838a7f8c8.tar.gz
puzzles-60a929a250cf4f7f87ac082e5705f9a838a7f8c8.tar.bz2
puzzles-60a929a250cf4f7f87ac082e5705f9a838a7f8c8.tar.xz
Add a request_keys() function with a midend wrapper.
This function gives the front end a way to find out what keys the back end requires; and as such it is mostly useful for ports without a keyboard. It is based on changes originally found in Chris Boyle's Android port, though some modifications were needed to make it more flexible.
Diffstat (limited to 'solo.c')
-rw-r--r--solo.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/solo.c b/solo.c
index dae0998..69fd85b 100644
--- a/solo.c
+++ b/solo.c
@@ -3608,6 +3608,26 @@ static struct block_structure *gen_killer_cages(int cr, random_state *rs,
return b;
}
+static key_label *game_request_keys(const game_params *params, int *nkeys)
+{
+ int i;
+ int cr = params->c * params->r;
+ key_label *keys = snewn(cr+1, key_label);
+ *nkeys = cr + 1;
+
+ for (i = 0; i < cr; i++) {
+ if (i<9) keys[i].button = '1' + i;
+ else keys[i].button = 'a' + i - 9;
+
+ keys[i].label = NULL;
+ }
+ keys[cr].button = '\b';
+ keys[cr].label = NULL;
+
+
+ return keys;
+}
+
static char *new_game_desc(const game_params *params, random_state *rs,
char **aux, int interactive)
{
@@ -5579,6 +5599,7 @@ const struct game thegame = {
free_ui,
encode_ui,
decode_ui,
+ game_request_keys,
game_changed_state,
interpret_move,
execute_move,