Curses: shift board one char to the right to leave enough space for captures.
[gnushogi.git] / gnushogi / cursesdsp.c
index 127f6b4..98cec52 100644 (file)
@@ -64,6 +64,7 @@
 
 int mycnt1, mycnt2;
 
+#define MARGIN (5)
 #define TAB (58)
 
 #define VIR_C(s)  ((flag.reverse) ? (NO_COLS - 1 - column(s)) : column(s))
@@ -466,11 +467,11 @@ 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: ");
@@ -478,12 +479,13 @@ Curses_EditBoard(void)
 
     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;
@@ -519,24 +521,26 @@ Curses_EditBoard(void)
                     break;
                 }
             }
-
+            if (!found)
+                AlwaysShowMessage("Invalid piece type '%c'", s[0]);
             continue;
         }
 
         c = COL_NUM(s[1]);
         r = ROW_NUM(s[2]);
 
-        if ((c < 0) || (c >= NO_COLS) || (r < 0) || (r >= NO_ROWS))
+        if ((c < 0) || (c >= NO_COLS) || (r < 0) || (r >= NO_ROWS)) {
+            AlwaysShowMessage("Out-of-board '%c%c'", s[1], s[2]);
             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]))
             {
+                color[sq] = a;
                 if (s[3] == '+')
                     board[sq] = promoted[i];
                 else
@@ -547,9 +551,8 @@ Curses_EditBoard(void)
             }
         }
 
-
-        if (found == 0)
-            color[sq] = neutral;
+        if (!found)
+            AlwaysShowMessage("Invalid piece type '%c'", s[0]);
 
         DrawPiece(sq);
     }
@@ -723,9 +726,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); 
@@ -770,7 +773,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);
 }
 
@@ -835,42 +838,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<NO_COLS; j++)
            printw("----+");
 
         while (i <= 1 + 2*NO_ROWS)
         {
-            gotoXY(1, ++i);
+            gotoXY(MARGIN, ++i);
 
             if (flag.reverse)
                 z = (i / 2) - 1;
             else
                 z = NO_ROWS + 2 - ((i + 1) / 2);
 
-            printw("    %c |", ROW_NAME(z+1));
+            printw("%c |", ROW_NAME(z+1));
            for (j=0; j<NO_COLS; j++)
                printw("    |");
 
-            gotoXY(3, ++i);
+            gotoXY(MARGIN, ++i);
 
             if (i < 2 + 2*NO_ROWS)
             {
-               printw("    +");
+               printw("  +");
                for (j=0; j<NO_COLS; j++)
                    printw("----+");
             }
         }
 
-       printw("    +");
+       printw("  +");
        for (j=0; j<NO_COLS; j++)
            printw("----+");
 
-        gotoXY(3, 4 + 2*NO_ROWS);
-        printw("    ");
-
+        gotoXY(MARGIN, 4 + 2*NO_ROWS);
+        printw("  ");
 #ifndef MINISHOGI
         if (flag.reverse)
             printw("  1    2    3    4    5    6    7    8    9");
@@ -880,7 +882,7 @@ Curses_UpdateDisplay(short f, short t, short redraw, short isspec)
         if (flag.reverse)
             printw("  1    2    3    4    5");
         else
-            printw("  1    2    3    4    5");
+            printw("  5    4    3    2    1");
 #endif
 
         for (sq = 0; sq < NO_SQUARES; sq++)