X-Git-Url: http://winboard.nl/cgi-bin?p=gnushogi.git;a=blobdiff_plain;f=gnushogi%2Fcursesdsp.c;h=2ee21ae030de4bd64f9835f2d1ed9847a99d41b9;hp=bf379994cd019800afdfa632764aa5f9b5e40d52;hb=7496586755298a8115a3988a8b52b32d41a4dcb7;hpb=cc242a46a66fc6579360f3257f9b7f295a7e7996 diff --git a/gnushogi/cursesdsp.c b/gnushogi/cursesdsp.c index bf37999..2ee21ae 100644 --- a/gnushogi/cursesdsp.c +++ b/gnushogi/cursesdsp.c @@ -62,6 +62,7 @@ #define FLUSH_SCANW fflush(stdout), scanw +#define MARGIN (5) #define TAB (58) #define VIR_C(s) ((flag.reverse) ? (NO_COLS - 1 - column(s)) : column(s)) @@ -107,6 +108,13 @@ gotoXY(short x, short y) static void +ClearMessage(void) +{ + gotoXY(TAB, 6); + ClearEoln(); +} + +static void Curses_ShowCurrentMove(short pnt, short f, short t) { algbr(f, t, false); @@ -442,8 +450,8 @@ Curses_help(void) } -static const short x0[2] = { 54, 2 }; -static const short y0[2] = { 20, 4 }; +static const short x0[2] = { MARGIN + 5*NO_COLS + 4, 2 }; +static const short y0[2] = { 4 + 2 * (NO_ROWS - 1), 4 }; /* @@ -455,7 +463,7 @@ static const short y0[2] = { 20, 4 }; static void Curses_EditBoard(void) { - short a, c, sq, i; + short a, c, sq, i, found; short r = 0; char s[80]; @@ -463,23 +471,28 @@ Curses_EditBoard(void) Book = BOOKFAIL; Curses_ClearScreen(); Curses_UpdateDisplay(0, 0, 1, 0); - gotoXY(TAB, 3); + gotoXY(TAB, 11); printw(". Exit to main\n"); - gotoXY(TAB, 4); + gotoXY(TAB, 12); printw("# Clear board\n"); - gotoXY(TAB, 5); + gotoXY(TAB, 13); printw("c Change sides\n"); gotoXY(TAB, 7); printw("Enter piece & location: "); a = black; - do + while(1) { - gotoXY(TAB, 6); + gotoXY(TAB, 4); printw("Editing: %s", ColorStr[a]); - gotoXY(TAB + 24, 7); + gotoXY(TAB + 2, 8); ClearEoln(); FLUSH_SCANW("%s", s); + found = 0; + ClearMessage(); + + if (s[0] == '.') + break; if (s[0] == '#') { @@ -492,50 +505,61 @@ 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; + if (!found) + dsp->AlwaysShowMessage("Invalid piece type '%c'", s[0]); + continue; } - else - { - c = COL_NAME(s[1]); - r = ROW_NAME(s[2]); + + c = COL_NUM(s[1]); + r = ROW_NUM(s[2]); + + if ((c < 0) || (c >= NO_COLS) || (r < 0) || (r >= NO_ROWS)) { + dsp->AlwaysShowMessage("Out-of-board '%c%c'", s[1], s[2]); + continue; } - if ((c >= 0) && (c < NO_COLS) && (r >= 0) && (r < NO_ROWS)) - { - sq = locn(r, c); + sq = locn(r, c); - for (i = NO_PIECES; i > no_piece; i--) + 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; + color[sq] = a; + 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]; + if (!found) + dsp->AlwaysShowMessage("Invalid piece type '%c'", s[0]); - board[sq] = i; - color[sq] = ((board[sq] == no_piece) ? neutral : a); - DrawPiece(sq); - } + DrawPiece(sq); } - while (s[0] != '.'); for (sq = 0; sq < NO_SQUARES; sq++) Mvboard[sq] = ((board[sq] != Stboard[sq]) ? 10 : 0); @@ -706,9 +730,9 @@ Curses_UpdateClocks(void) s = 0; if (player == black) - gotoXY(20, (flag.reverse) ? 2 : 23); + gotoXY(20, (flag.reverse) ? 2 : (5 + 2*NO_ROWS)); else - gotoXY(20, (flag.reverse) ? 23 : 2); + gotoXY(20, (flag.reverse) ? (5 + 2*NO_ROWS) : 2); /* printw("%d:%02d %ld ", m, s, dt); */ printw("%d:%02d ", m, s); @@ -753,7 +777,7 @@ DrawPiece(short sq) y = pxx[(int)piece]; } - gotoXY(8 + 5 * VIR_C(sq), 4 + 2 * ((NO_ROWS - 1) - VIR_R(sq))); + gotoXY(MARGIN + 3 + 5 * VIR_C(sq), 4 + 2 * ((NO_ROWS - 1) - VIR_R(sq))); printw("%c%c%c%c", l, p, y, r); } @@ -816,42 +840,41 @@ Curses_UpdateDisplay(short f, short t, short redraw, short isspec) ShowPlayers(); i = 2; - gotoXY(3, ++i); + gotoXY(MARGIN, ++i); - printw(" +"); + printw(" +"); for (j=0; j