/*
* parser.c --
*
- * Copyright 2011, 2012, 2013 Free Software Foundation, Inc.
+ * Copyright 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
* ------------------------------------------------------------------------
*
* GNU XBoard is free software: you can redistribute it and/or modify
return *p != start;
}
-inline int
+static inline int
Match (char *pattern, char **ptr)
{
char *p = pattern, *s = *ptr;
return 0; // no match, no ptr update
}
-inline int
+static inline int
Word (char *pattern, char **p)
{
if(Match(pattern, p)) return 1;
if(fromString) return 0; // we are parsing string, so the end is really the end
*p = inPtr = inputBuf;
if(!ReadLine()) return 0; // EOF
+ } else if(inPtr > inputBuf + PARSEBUFSIZE/2) { // buffer fills up with already parsed stuff
+ char *q = *p, *r = inputBuf;
+ while(*r++ = *q++);
+ *p = inputBuf; inPtr = r - 1;
}
parseStart = oldp = *p; // remember where we begin
fromY = DROP_RANK; fromX = cl.pieceIn;
currentMoveString[0] = piece;
currentMoveString[1] = '@';
+ currentMoveString[4] = NULLCHAR;
return LegalityTest(boards[yyboardindex], PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, fromY, fromX, toY, toX, NULLCHAR);
}
if(type[1] == NOTHING && type[0] != NOTHING) { // there is a disambiguator