Fix type-in of hit-and-run captures
[xboard.git] / backend.c
index 3f673a5..a4f7852 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -5556,6 +5556,7 @@ ParseOneMove (char *move, int moveNum, ChessMove *moveType, int *fromX, int *fro
         *toX = currentMoveString[2] - AAA;
         *toY = currentMoveString[3] - ONE;
        *promoChar = currentMoveString[4];
+       if(*promoChar == ';') *promoChar = NULLCHAR;
         if (*fromX < BOARD_LEFT || *fromX >= BOARD_RGHT || *fromY < 0 || *fromY >= BOARD_HEIGHT ||
             *toX < BOARD_LEFT || *toX >= BOARD_RGHT || *toY < 0 || *toY >= BOARD_HEIGHT) {
     if (appData.debugMode) {
@@ -6003,7 +6004,7 @@ ptclen (const char *s, char *escapes)
 {
     int n = 0;
     if(!*escapes) return strlen(s);
-    while(*s) n += (*s != '/' && *s != '-' && *s != '^' && *s != '*' && !strchr(escapes, *s)), s++;
+    while(*s) n += (*s != '/' && *s != '-' && *s != '^' && *s != '*' && !strchr(escapes, *s)) - 2*(*s == '='), s++;
     return n;
 }
 
@@ -6027,6 +6028,7 @@ SetCharTableEsc (unsigned char *table, const char * map, char * escapes)
             table[i+offs] = map[j++];
             if(p = strchr(escapes, map[j])) j++, table[i+offs] += 64*(p - escapes + 1);
             if(c) partner[i+offs] = table[i+offs], table[i+offs] = c;
+            if(*escapes && map[j] == '=') pieceNickName[i+offs] = map[++j], j++;
         }
         table[(int) WhiteKing]  = map[j++];
         for( ii=offs=0; ii<NrPieces/2-1; ii++ ) {
@@ -6037,6 +6039,7 @@ SetCharTableEsc (unsigned char *table, const char * map, char * escapes)
             table[i+offs] = map[j++];
             if(p = strchr(escapes, map[j])) j++, table[i+offs] += 64*(p - escapes + 1);
             if(c) partner[i+offs] = table[i+offs], table[i+offs] = c;
+            if(*escapes && map[j] == '=') pieceNickName[i+offs] = map[++j], j++;
         }
         table[(int) BlackKing]  = map[j++];