From 3d8e7585b7a9d215e4b40d9f83f7fa5a0fd79b43 Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Wed, 28 Apr 2004 12:07:15 +0000 Subject: Add a menu bar, in both Windows and GTK. In particular, game modules are now expected to provide a list of `presets' (game_params plus a name) which are selectable from the menu. This means I can play both Octahedron and Cube without recompiling in between :-) While I'm here, also enabled a Cygwin makefile, which Just Worked. [originally from svn r4158] --- midend.c | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) (limited to 'midend.c') diff --git a/midend.c b/midend.c index d309068..cafc8ea 100644 --- a/midend.c +++ b/midend.c @@ -14,6 +14,11 @@ struct midend_data { frontend *frontend; char *seed; int nstates, statesize, statepos; + + game_params **presets; + char **preset_names; + int npresets, presetsize; + game_params *params; game_state **states; game_drawstate *drawstate; @@ -39,6 +44,9 @@ midend_data *midend_new(frontend *frontend) me->seed = NULL; me->drawstate = NULL; me->oldstate = NULL; + me->presets = NULL; + me->preset_names = NULL; + me->npresets = me->presetsize = 0; return me; } @@ -59,7 +67,7 @@ void midend_size(midend_data *me, int *x, int *y) void midend_set_params(midend_data *me, game_params *params) { free_params(me->params); - me->params = params; + me->params = dup_params(params); } void midend_new_game(midend_data *me, char *seed) @@ -227,3 +235,35 @@ float *midend_colours(midend_data *me, int *ncolours) return ret; } + +int midend_num_presets(midend_data *me) +{ + if (!me->npresets) { + char *name; + game_params *preset; + + while (game_fetch_preset(me->npresets, &name, &preset)) { + if (me->presetsize <= me->npresets) { + me->presetsize = me->npresets + 10; + me->presets = sresize(me->presets, me->presetsize, + game_params *); + me->preset_names = sresize(me->preset_names, me->presetsize, + char *); + } + + me->presets[me->npresets] = preset; + me->preset_names[me->npresets] = name; + me->npresets++; + } + } + + return me->npresets; +} + +void midend_fetch_preset(midend_data *me, int n, + char **name, game_params **params) +{ + assert(n >= 0 && n < me->npresets); + *name = me->preset_names[n]; + *params = me->presets[n]; +} -- cgit v1.1