diff options
| author | Simon Tatham <anakin@pobox.com> | 2005-05-18 09:04:47 +0000 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2005-05-18 09:04:47 +0000 |
| commit | 90e42d4cdedf999a5c996ff4ac1353ecee280ea5 (patch) | |
| tree | ad790b59cd1cc8b64ab0ef7492ec440f28763376 /midend.c | |
| parent | 1304e07d7460aee9994f05bb5dc718e157ca07d6 (diff) | |
| download | puzzles-90e42d4cdedf999a5c996ff4ac1353ecee280ea5.zip puzzles-90e42d4cdedf999a5c996ff4ac1353ecee280ea5.tar.gz puzzles-90e42d4cdedf999a5c996ff4ac1353ecee280ea5.tar.bz2 puzzles-90e42d4cdedf999a5c996ff4ac1353ecee280ea5.tar.xz | |
Move the colour configuration into midend.c so that it becomes
cross-platform, and rename the environment variables so that they
follow the puzzle name. Should allow a static environment
configuration for each puzzle. Also introduced a <game>_PRESETS
variable for people whose favourite configuration isn't on the Type
menu by default.
[originally from svn r5801]
Diffstat (limited to 'midend.c')
| -rw-r--r-- | midend.c | 75 |
1 files changed, 75 insertions, 0 deletions
@@ -8,6 +8,8 @@ #include <stdio.h> #include <string.h> #include <assert.h> +#include <stdlib.h> +#include <ctype.h> #include "puzzles.h" @@ -498,6 +500,32 @@ float *midend_colours(midend_data *me, int *ncolours) ret = me->ourgame->colours(me->frontend, state, ncolours); + { + int i; + + /* + * Allow environment-based overrides for the standard + * colours by defining variables along the lines of + * `NET_COLOUR_4=6000c0'. + */ + + for (i = 0; i < *ncolours; i++) { + char buf[80], *e; + unsigned int r, g, b; + int j; + + sprintf(buf, "%s_COLOUR_%d", me->ourgame->name, i); + for (j = 0; buf[j]; j++) + buf[j] = toupper((unsigned char)buf[j]); + if ((e = getenv(buf)) != NULL && + sscanf(e, "%2x%2x%2x", &r, &g, &b) == 3) { + ret[i*3 + 0] = r / 255.0; + ret[i*3 + 1] = g / 255.0; + ret[i*3 + 2] = b / 255.0; + } + } + } + if (me->nstates == 0) me->ourgame->free_game(state); @@ -525,6 +553,53 @@ int midend_num_presets(midend_data *me) } } + { + /* + * Allow environment-based extensions to the preset list by + * defining a variable along the lines of `SOLO_PRESETS=2x3 + * Advanced:2x3da'. Colon-separated list of items, + * alternating between textual titles in the menu and + * encoded parameter strings. + */ + char buf[80], *e, *p; + int j; + + sprintf(buf, "%s_PRESETS", me->ourgame->name); + for (j = 0; buf[j]; j++) + buf[j] = toupper((unsigned char)buf[j]); + + if ((e = getenv(buf)) != NULL) { + p = e = dupstr(e); + + while (*p) { + char *name, *val; + game_params *preset; + + name = p; + while (*p && *p != ':') p++; + if (*p) *p++ = '\0'; + val = p; + while (*p && *p != ':') p++; + if (*p) *p++ = '\0'; + + preset = me->ourgame->default_params(); + me->ourgame->decode_params(preset, val); + + 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; } |