X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=gnushogi%2Fcursesdsp.c;h=127f6b41e426b6acd376da10e94a5fcb508556ff;hb=ff70bcfb13c2a38180a93d689baccd6828dfda90;hp=3e85a94226e63fc5d11d317a2edbc2715edda44f;hpb=5ea6210573f345d63d7aafeb125726d3dc9b2238;p=gnushogi.git diff --git a/gnushogi/cursesdsp.c b/gnushogi/cursesdsp.c index 3e85a94..127f6b4 100644 --- a/gnushogi/cursesdsp.c +++ b/gnushogi/cursesdsp.c @@ -458,7 +458,7 @@ static const short y0[2] = { 20, 4 }; void Curses_EditBoard(void) { - short a, c, sq, i; + short a, c, sq, i, found; short r = 0; char s[80]; @@ -476,13 +476,17 @@ Curses_EditBoard(void) printw("Enter piece & location: "); a = black; - do + while(1) { gotoXY(TAB, 6); printw("Editing: %s", ColorStr[a]); gotoXY(TAB + 24, 7); ClearEoln(); FLUSH_SCANW("%s", s); + found = 0; + + if (s[0] == '.') + break; if (s[0] == '#') { @@ -495,50 +499,60 @@ Curses_EditBoard(void) ClearCaptured(); UpdateCatched(); + continue; } - if (s[0] == 'c') + if (s[0] == 'c') { a = otherside[a]; + continue; + } if (s[1] == '*') { for (i = NO_PIECES; i > no_piece; i--) { if ((s[0] == pxx[i]) || (s[0] == qxx[i])) + { + Captured[a][unpromoted[i]]++; + UpdateCatched(); + found = 1; break; + } } - Captured[a][unpromoted[i]]++; - UpdateCatched(); - c = -1; - } - else - { - c = COL_NUM(s[1]); - r = ROW_NUM(s[2]); + continue; } - if ((c >= 0) && (c < NO_COLS) && (r >= 0) && (r < NO_ROWS)) - { - sq = locn(r, c); + c = COL_NUM(s[1]); + r = ROW_NUM(s[2]); - for (i = NO_PIECES; i > no_piece; i--) + if ((c < 0) || (c >= NO_COLS) || (r < 0) || (r >= NO_ROWS)) + continue; + + sq = locn(r, c); + color[sq] = a; + board[sq] = no_piece; + + for (i = NO_PIECES; i > no_piece; i--) + { + if ((s[0] == pxx[i]) || (s[0] == qxx[i])) { - if ((s[0] == pxx[i]) || (s[0] == qxx[i])) - break; + if (s[3] == '+') + board[sq] = promoted[i]; + else + board[sq] = unpromoted[i]; + + found = 1; + break; } + } - if (s[3] == '+') - i = promoted[i]; - else - i = unpromoted[i]; - board[sq] = i; - color[sq] = ((board[sq] == no_piece) ? neutral : a); - DrawPiece(sq); - } + if (found == 0) + color[sq] = neutral; + + DrawPiece(sq); } - while (s[0] != '.'); for (sq = 0; sq < NO_SQUARES; sq++) Mvboard[sq] = ((board[sq] != Stboard[sq]) ? 10 : 0);