mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-23 00:42:13 -07:00
Copy-to-clipboard facility for Fifteen, Sixteen and Twiddle.
[originally from svn r5725]
This commit is contained in:
38
sixteen.c
38
sixteen.c
@ -381,7 +381,41 @@ static void free_game(game_state *state)
|
||||
|
||||
static char *game_text_format(game_state *state)
|
||||
{
|
||||
return NULL;
|
||||
char *ret, *p, buf[80];
|
||||
int x, y, col, maxlen;
|
||||
|
||||
/*
|
||||
* First work out how many characters we need to display each
|
||||
* number.
|
||||
*/
|
||||
col = sprintf(buf, "%d", state->n);
|
||||
|
||||
/*
|
||||
* Now we know the exact total size of the grid we're going to
|
||||
* produce: it's got h rows, each containing w lots of col, w-1
|
||||
* spaces and a trailing newline.
|
||||
*/
|
||||
maxlen = state->h * state->w * (col+1);
|
||||
|
||||
ret = snewn(maxlen, char);
|
||||
p = ret;
|
||||
|
||||
for (y = 0; y < state->h; y++) {
|
||||
for (x = 0; x < state->w; x++) {
|
||||
int v = state->tiles[state->w*y+x];
|
||||
sprintf(buf, "%*d", col, v);
|
||||
memcpy(p, buf, col);
|
||||
p += col;
|
||||
if (x+1 == state->w)
|
||||
*p++ = '\n';
|
||||
else
|
||||
*p++ = ' ';
|
||||
}
|
||||
}
|
||||
|
||||
assert(p - ret == maxlen);
|
||||
*p = '\0';
|
||||
return ret;
|
||||
}
|
||||
|
||||
static game_ui *new_ui(game_state *state)
|
||||
@ -793,7 +827,7 @@ const struct game thegame = {
|
||||
new_game,
|
||||
dup_game,
|
||||
free_game,
|
||||
FALSE, game_text_format,
|
||||
TRUE, game_text_format,
|
||||
new_ui,
|
||||
free_ui,
|
||||
make_move,
|
||||
|
Reference in New Issue
Block a user