Fix multi-leg promotions
[xboard.git] / parser.c
index c2eda2b..4c634ca 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -285,7 +285,7 @@ KifuMove (char **p)
 int
 ReadLine ()
 {   // Read one line from the input file, and append to the buffer
-    char c, *start = inPtr;
+    int c; char *start = inPtr;
     if(fromString) return 0; // parsing string, so the end is a hard end
     if(!inputFile) return 0;
     while((c = fgetc(inputFile)) != EOF) {
@@ -404,7 +404,7 @@ NextUnit (char **p)
 
        if(**p == NULLCHAR) { // make sure there is something to parse
            if(fromString) return 0; // we are parsing string, so the end is really the end
-           *p = inPtr = inputBuf;
+           *p = inPtr = parseStart = inputBuf;
            if(!ReadLine()) return 0; // EOF
        } else if(inPtr > inputBuf + PARSEBUFSIZE/2) { // buffer fills up with already parsed stuff
            char *q = *p, *r = inputBuf;
@@ -585,7 +585,7 @@ NextUnit (char **p)
                if(killX < 0) // [HGM] lion: do not overwrite kill-square suffix
                currentMoveString[4] = cl.promoChar;
 
-               if((cl.kind == WhiteCapturesEnPassant || cl.kind == BlackCapturesEnPassant) && (Match("ep", p) || Match("e.p.", p)));
+               if((cl.kind == WhiteCapturesEnPassant || cl.kind == BlackCapturesEnPassant) && !Match("ep", p)) Match("e.p.", p);
 
                return (int) cl.kind;
            }