Add forgotten files 1.4.70b
[polyglot.git] / line.c
diff --git a/line.c b/line.c
index 0e71079..2532859 100644 (file)
--- a/line.c
+++ b/line.c
-\r
-// line.c\r
-\r
-// includes\r
-\r
-#include <string.h>\r
-\r
-#include "board.h"\r
-#include "line.h"\r
-#include "move.h"\r
-#include "move_do.h"\r
-#include "move_legal.h"\r
-#include "san.h"\r
-#include "util.h"\r
-\r
-// constants\r
-\r
-static const bool Strict = FALSE; // FALSE\r
-static const bool UseDebug = FALSE; // FALSE\r
-\r
-#define StringSize ((int)1024)\r
-\r
-// functions\r
-\r
-// line_is_ok()\r
-\r
-bool line_is_ok(const move_t line[]) {\r
-\r
-   int move;\r
-\r
-   if (line == NULL) return FALSE;\r
-\r
-   while ((move = *line++) != MoveNone) {\r
-      if (!move_is_ok(move)) return FALSE;\r
-   }\r
-\r
-   return TRUE;\r
-}\r
-\r
-// line_clear()\r
-\r
-void line_clear(move_t line[]) {\r
-\r
-   ASSERT(line!=NULL);\r
-\r
-   *line = MoveNone;\r
-}\r
-\r
-// line_copy()\r
-\r
-void line_copy(move_t dst[], const move_t src[]) {\r
-\r
-   ASSERT(dst!=NULL);\r
-   ASSERT(src!=NULL);\r
-\r
-   ASSERT(dst!=src);\r
-\r
-   while ((*dst++ = *src++) != MoveNone)\r
-      ;\r
-}\r
-\r
-// line_from_can()\r
-\r
-bool line_from_can (move_t line[], const board_t * board, const char string[], int size) {\r
-\r
-   int pos;\r
-   char new_string[StringSize], *p;\r
-   int move;\r
-   board_t new_board[1];\r
-\r
-   ASSERT(line!=NULL);\r
-   ASSERT(board_is_ok(board));\r
-   ASSERT(string!=NULL);\r
-   ASSERT(size>=LineSize);\r
-\r
-   // init\r
-\r
-   pos = 0;\r
-   board_copy(new_board,board);\r
-\r
-   // loop\r
-\r
-   strcpy(new_string,string); // HACK\r
-\r
-   for (p = strtok(new_string," "); p != NULL; p = strtok(NULL," ")) {\r
-\r
-      move = move_from_can(p,new_board);\r
-\r
-      ASSERT(move!=MoveNone);\r
-      ASSERT(move_is_legal(move,new_board));\r
-\r
-      if (move == MoveNone || !move_is_legal(move,new_board)) break; // HACK: ignore illegal moves\r
-\r
-      if (pos >= size) return FALSE;\r
-      line[pos++] = move;\r
-\r
-      move_do(new_board,move);\r
-   }\r
-\r
-   if (pos >= size) return FALSE;\r
-   line[pos] = MoveNone;\r
-\r
-   return TRUE;\r
-}\r
-\r
-// line_to_can()\r
-\r
-bool line_to_can(const move_t line[], const board_t * board, char string[], int size) {\r
-\r
-   board_t new_board[1];\r
-   int pos;\r
-   int move;\r
-\r
-   ASSERT(line_is_ok(line));\r
-   ASSERT(board_is_ok(board));\r
-   ASSERT(string!=NULL);\r
-   ASSERT(size>=StringSize);\r
-\r
-   // init\r
-\r
-   if (size < StringSize) return FALSE;\r
-\r
-   board_copy(new_board,board);\r
-   pos = 0;\r
-\r
-   // loop\r
-\r
-   while ((move = *line++) != MoveNone) {\r
-\r
-      if (pos != 0) {\r
-         if (pos >= size) return FALSE;\r
-         string[pos++] = ' ';\r
-      }\r
-\r
-      if (!move_to_can(move,new_board,&string[pos],size-pos)) return FALSE;\r
-      pos += strlen(&string[pos]);\r
-\r
-      move_do(new_board,move);\r
-   }\r
-\r
-   if (pos >= size) return FALSE;\r
-   string[pos] = '\0';\r
-\r
-   return TRUE;\r
-}\r
-\r
-// line_to_san()\r
-\r
-bool line_to_san(const move_t line[], const board_t * board, char string[], int size) {\r
-\r
-   board_t new_board[1];\r
-   int pos;\r
-   int move;\r
-   char move_string[256];\r
-\r
-   ASSERT(line_is_ok(line));\r
-   ASSERT(board_is_ok(board));\r
-   ASSERT(string!=NULL);\r
-   ASSERT(size>=StringSize);\r
-\r
-   // init\r
-\r
-   if (size < StringSize) return FALSE;\r
-\r
-   board_copy(new_board,board);\r
-   pos = 0;\r
-\r
-   // loop\r
-\r
-   while ((move = *line++) != MoveNone) {\r
-\r
-      if (pos != 0) {\r
-         if (pos >= size) return FALSE;\r
-         string[pos++] = ' ';\r
-      }\r
-\r
-      if (!move_is_legal(move,new_board)\r
-       || !move_to_san(move,new_board,&string[pos],size-pos)) {\r
-\r
-         if (Strict || UseDebug) {\r
-\r
-            move_to_can(move,new_board,move_string,256);\r
-            my_log("POLYGLOT ILLEGAL MOVE IN LINE %s\n",move_string);\r
-\r
-            board_disp(new_board);\r
-         }\r
-\r
-         if (Strict) my_fatal("line_to_san(): illegal move\n");\r
-\r
-         break;\r
-      }\r
-\r
-      pos += strlen(&string[pos]);\r
-\r
-      move_do(new_board,move);\r
-   }\r
-\r
-   if (pos >= size) return FALSE;\r
-   string[pos] = '\0';\r
-\r
-   return TRUE;\r
-}\r
-\r
-// end of line.cpp\r
-\r
+
+// line.c
+
+// includes
+
+#include <string.h>
+
+#include "board.h"
+#include "line.h"
+#include "move.h"
+#include "move_do.h"
+#include "move_legal.h"
+#include "san.h"
+#include "util.h"
+
+// constants
+
+static const bool Strict = FALSE; // FALSE
+static const bool UseDebug = FALSE; // FALSE
+
+// functions
+
+// line_is_ok()
+
+bool line_is_ok(const move_t line[]) {
+
+   int move;
+
+   if (line == NULL) return FALSE;
+
+   while ((move = *line++) != MoveNone) {
+      if (!move_is_ok(move)) return FALSE;
+   }
+
+   return TRUE;
+}
+
+// line_clear()
+
+void line_clear(move_t line[]) {
+
+   ASSERT(line!=NULL);
+
+   *line = MoveNone;
+}
+
+// line_copy()
+
+void line_copy(move_t dst[], const move_t src[]) {
+
+   ASSERT(dst!=NULL);
+   ASSERT(src!=NULL);
+
+   ASSERT(dst!=src);
+
+   while ((*dst++ = *src++) != MoveNone)
+      ;
+}
+
+// line_from_can()
+
+bool line_from_can (move_t line[], const board_t * board, const char string[], int size) {
+
+   int pos;
+   char new_string[StringSize], *p;
+   int move;
+   board_t new_board[1];
+
+   ASSERT(line!=NULL);
+   ASSERT(board_is_ok(board));
+   ASSERT(string!=NULL);
+   ASSERT(size>=LineSize);
+
+   // init
+
+   pos = 0;
+   board_copy(new_board,board);
+
+   // loop
+
+   strcpy(new_string,string); // HACK
+
+   for (p = strtok(new_string," "); p != NULL; p = strtok(NULL," ")) {
+
+      move = move_from_can(p,new_board);
+
+      ASSERT(move!=MoveNone);
+      ASSERT(move_is_legal(move,new_board));
+
+      if (move == MoveNone || !move_is_legal(move,new_board)) break; // HACK: ignore illegal moves
+
+      if (pos >= size) return FALSE;
+      line[pos++] = move;
+
+      move_do(new_board,move);
+   }
+
+   if (pos >= size) return FALSE;
+   line[pos] = MoveNone;
+
+   return TRUE;
+}
+
+// line_to_can()
+
+bool line_to_can(const move_t line[], const board_t * board, char string[], int size) {
+
+   board_t new_board[1];
+   int pos;
+   int move;
+
+   ASSERT(line_is_ok(line));
+   ASSERT(board_is_ok(board));
+   ASSERT(string!=NULL);
+   ASSERT(size>=StringSize);
+
+   // init
+
+   if (size < StringSize) return FALSE;
+
+   board_copy(new_board,board);
+   pos = 0;
+
+   // loop
+
+   while ((move = *line++) != MoveNone) {
+
+      if (pos != 0) {
+         if (pos >= size) return FALSE;
+         string[pos++] = ' ';
+      }
+
+      if (!move_to_can(move,new_board,&string[pos],size-pos)) return FALSE;
+      pos += strlen(&string[pos]);
+
+      move_do(new_board,move);
+   }
+
+   if (pos >= size) return FALSE;
+   string[pos] = '\0';
+
+   return TRUE;
+}
+
+// line_to_san()
+
+bool line_to_san(const move_t line[], const board_t * board, char string[], int size) {
+
+   board_t new_board[1];
+   int pos;
+   int move;
+   char move_string[256];
+
+   ASSERT(line_is_ok(line));
+   ASSERT(board_is_ok(board));
+   ASSERT(string!=NULL);
+   ASSERT(size>=StringSize);
+
+   // init
+
+   if (size < StringSize) return FALSE;
+
+   board_copy(new_board,board);
+   pos = 0;
+
+   // loop
+
+   while ((move = *line++) != MoveNone) {
+
+      if (pos != 0) {
+         if (pos >= size) return FALSE;
+         string[pos++] = ' ';
+      }
+
+      if (!move_is_legal(move,new_board)
+       || !move_to_san(move,new_board,&string[pos],size-pos)) {
+
+         if (Strict || UseDebug) {
+
+            move_to_can(move,new_board,move_string,256);
+            my_log("POLYGLOT ILLEGAL MOVE IN LINE %s\n",move_string);
+
+            board_disp(new_board);
+         }
+
+         if (Strict) my_fatal("line_to_san(): illegal move\n");
+
+         break;
+      }
+
+      pos += strlen(&string[pos]);
+
+      move_do(new_board,move);
+   }
+
+   if (pos >= size) return FALSE;
+   string[pos] = '\0';
+
+   return TRUE;
+}
+
+// end of line.cpp
+