X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=pattern.c;h=10621d1f0d45bd462640ac66780f33ba202a0b76;hb=7478275c8b46c24eb457dd3458ace3a31263295b;hp=0688f33e4272e6d7a7fdb144a7351c6fa1f428dc;hpb=9e1a7d87cd30e1f3fde7eedf1439b48ce1610009;p=sgt-puzzles.git diff --git a/pattern.c b/pattern.c index 0688f33..10621d1 100644 --- a/pattern.c +++ b/pattern.c @@ -1056,6 +1056,7 @@ static char *interpret_move(const game_state *state, game_ui *ui, const game_drawstate *ds, int x, int y, int button) { + int control = button & MOD_CTRL, shift = button & MOD_SHFT; button &= ~MOD_MASK; x = FROMCOORD(state->w, x); @@ -1156,10 +1157,23 @@ static char *interpret_move(const game_state *state, game_ui *ui, } if (IS_CURSOR_MOVE(button)) { + int x = ui->cur_x, y = ui->cur_y, newstate; + char buf[80]; move_cursor(button, &ui->cur_x, &ui->cur_y, state->w, state->h, 0); ui->cur_visible = 1; - return ""; + if (!control && !shift) return ""; + + newstate = control ? shift ? GRID_UNKNOWN : GRID_FULL : GRID_EMPTY; + if (state->grid[y * state->w + x] == newstate && + state->grid[ui->cur_y * state->w + ui->cur_x] == newstate) + return ""; + + sprintf(buf, "%c%d,%d,%d,%d", control ? shift ? 'U' : 'F' : 'E', + min(x, ui->cur_x), min(y, ui->cur_y), + abs(x - ui->cur_x) + 1, abs(y - ui->cur_y) + 1); + return dupstr(buf); } + if (IS_CURSOR_SELECT(button)) { int currstate = state->grid[ui->cur_y * state->w + ui->cur_x]; int newstate;