Implement Spartan Chess
[capablanca.git] / lasker-2.2.3 / src / board.c
index 40e7037..f2fa5f0 100644 (file)
 
 
 const char *wpstring[] = {" ", "P", "N", "B", "R", "A", "C", "M", "Q", "E", "B", "Q", "W", "H", "N", "D", "H", "L", 
-                         "C", "S", "G", "H", "A", "F", "E", "H", "M", "S", "E", "W", "O", "G", "V", "S", "E", "A", "K", "H", "E"};
+                         "C", "S", "G", "H", "A", "F", "E", "H", "M", "S", "E", "W", "O", "G", "V", "S", "E", "A",
+                         "K", "H", "E", "W", "G", "L", "C", "H"};
 const char *bpstring[] = {" ", "p", "n", "b", "r", "a", "c", "m", "q", "e", "b", "q", "w", "h", "n", "d", "h", "l", 
-                         "c", "s", "g", "h", "a", "f", "e", "h", "m", "s", "e", "w", "o", "g", "v", "s", "e", "a", "k", "h", "e"};
+                         "c", "s", "g", "h", "a", "f", "e", "h", "m", "s", "e", "w", "o", "g", "v", "s", "e", "a",
+                         "k", "h", "e", "w", "g", "l", "c", "h"};
 
-int pieceValues[PIECES] = {0, 1, 3, 3, 5, 8, 9, 3, 9, 1, 1, 2, 2, 2, 1, 6, 5, 2, 3, 3, 3, 1, 5, 2, 1, 7, 7, 3, 3, 3, 7, 7, 7, 8, 9, 12, 0, 8, 9};
+int pieceValues[PIECES] = {0, 1, 3, 3, 5, 8, 9, 3, 9, 1, 1, 2, 2, 2, 1, 6, 5, 2, 3, 3, 3, 1, 5, 2, 1, 7, 7, 3, 3, 3, 7, 7, 7, 8, 9, 12,
+                          0, 8, 9, 8, 7, 3, 3, 1};
 
 static const int mach_type = (1<<7) | (1<<8) | (1<<9) | (1<<10) | (1<<11);
 #define IsMachineStyle(n) (((1<<(n)) & mach_type) != 0)
@@ -574,10 +577,12 @@ static int style1(struct game_state_t *b, struct move_t *ml)
 {
   static const char *wp[] = {"   |", " P |", " N |", " B |", " R |", " A |", " C |", " M |", " Q |", " E |", " B |", " Q |", 
                             " W |", " H |", " N |", " D |", " H |", " L |", " C |", " S |", " G |", " H |", " A |", " F |",
-                            " E |", " H |", " M |", " S |", " E |", " W |", " O |", " G |", " V |", " S |", " E |", " A |", " K |", " H |", " E |"};
+                            " E |", " H |", " M |", " S |", " E |", " W |", " O |", " G |", " V |", " S |", " E |", " A |",
+                            " K |", " H |", " E |", " W |", " G |", " L |", " C |", " H |"};
   static const char *bp[] = {"   |", " *P|", " *N|", " *B|", " *R|", " *A|", " *C|", " *M|", " *Q|", " *E|", " *B|", " *Q|", 
                             " *W|", " *H|", " *N|", " *D|", " *H|", " *L|", " *C|", " *S|", " *G|", " *H|", " *A|", " *F|",
-                            " *E|", " *H|", " *M|", " *S|", " *E|", " *W|", " *O|", " *G|", " *V|", " *S|", " *E|", " *A|", " *K|", " *H|", " *E|"};
+                            " *E|", " *H|", " *M|", " *S|", " *E|", " *W|", " *O|", " *G|", " *V|", " *S|", " *E|", " *A|",
+                            " *K|", " *H|", " *E|", " *W|", " *G|", " *L|", " *C|", " *H|"};
   static char *wsqr = "";
   static char *bsqr = "";
   static char *top = "\t---------------------------------\n";
@@ -595,10 +600,12 @@ static int style2(struct game_state_t *b, struct move_t *ml)
 {
   static const char *wp[] = {"-  ", "P  ", "N  ", "B  ", "R  ", "A  ", "C  ", "M  ", "Q  ", "E  ", "B  ", "Q  ",
                             "W  ", "H  ", "N  ", "D  ", "H  ", "L  ", "C  ", "S  ", "G  ", "H  ", "A  ", "F  ",
-                            "E  ", "H  ", "M  ", "S  ", "E  ", "W  ", "O  ", "G  ", "V  ", "S  ", "E  ", "A  ", "K  ", "H  ", "E  "};
+                            "E  ", "H  ", "M  ", "S  ", "E  ", "W  ", "O  ", "G  ", "V  ", "S  ", "E  ", "A  ",
+                            "K  ", "H  ", "E  ", "W  ", "G  ", "L  ", "C  ", "H  "};
   static const char *bp[] = {"+  ", "p' ", "n' ", "b' ", "r' ", "a' ", "c' ", "m' ", "q' ", "e' ", "b' ", "q' ",
                             "w' ", "h' ", "n' ", "d' ", "h' ", "l' ", "c' ", "s' ", "g' ", "h' ", "a' ", "f' ",
-                            "e' ", "h' ", "m' ", "s' ", "e' ", "w' ", "o' ", "g' ", "v' ", "s' ", "e' ", "a' ", "k' ", "h' ", "e' "};
+                            "e' ", "h' ", "m' ", "s' ", "e' ", "w' ", "o' ", "g' ", "v' ", "s' ", "e' ", "a' ",
+                            "k' ", "h' ", "e' ", "w' ", "g' ", "l' ", "c' ", "h' "};
   static char *wsqr = "";
   static char *bsqr = "";
   static char *top = "";
@@ -616,10 +623,12 @@ static int style3(struct game_state_t *b, struct move_t *ml)
 {
   static const char *wp[] = {"   ", " P ", " N ", " B ", " R ", " A ", " C ", " M ", " Q ", " E ", " B ", " Q ", 
                             " W ", " H ", " N ", " D ", " H ", " L ", " C ", " S ", " G ", " H ", " A ", " F ",
-                            " E ", " H ", " M ", " S ", " E ", " W ", " O ", " G ", " V ", " S ", " E ", " A ", " K ", " H ", " E "};
+                            " E ", " H ", " M ", " S ", " E ", " W ", " O ", " G ", " V ", " S ", " E ", " A ",
+                            " K ", " H ", " E ", " W ", " G ", " L ", " C ", " H "};
   static const char *bp[] = {"   ", " *P", " *N", " *B", " *R", " *A", " *C", " *M", " *Q", " *E", " *B", " *Q", 
                             " *W", " *H", " *N", " *D", " *H", " *L", " *C", " *S", " *G", " *H", " *A", " *F",
-                            " *E", " *H", " *M", " *S", " *E", " *W", " *O", " *G", " *V", " *S", " *E", " *A", " *K", " *H", " *E"};
+                            " *E", " *H", " *M", " *S", " *E", " *W", " *O", " *G", " *V", " *S", " *E", " *A",
+                            " *K", " *H", " *E", " *W", " *G", " *L", " *C", " *H"};
   static char *wsqr = "\033[0m";
   static char *bsqr = "\033[7m";
   static char *top = "\t+------------------------+\n";
@@ -637,10 +646,12 @@ static int style4(struct game_state_t *b, struct move_t *ml)
 {
   static const char *wp[] = {"   ", " P ", " N ", " B ", " R ", " A ", " C ", " M ", " Q ", " E ", " B ", " Q ", 
                             " W ", " H ", " N ", " D ", " H ", " L ", " C ", " S ", " G ", " H ", " A ", " F ",
-                            " E ", " H ", " M ", " S ", " E ", " W ", " O ", " G ", " V ", " S ", " E ", " A ", " K ", " H ", " E "};
+                            " E ", " H ", " M ", " S ", " E ", " W ", " O ", " G ", " V ", " S ", " E ", " A ",
+                            " K ", " H ", " E ", " W ", " G ", " L ", " C ", " H "};
   static const char *bp[] = {"   ", " *P", " *N", " *B", " *R", " *A", " *C", " *M", " *Q", " *E", " *B", " *Q", 
                             " *W", " *H", " *N", " *D", " *H", " *L", " *C", " *S", " *G", " *H", " *A", " *F",
-                            " *E", " *H", " *M", " *S", " *E", " *W", " *O", " *G", " *V", " *S", " *E", " *A", " *K", " *H", " *E"};
+                            " *E", " *H", " *M", " *S", " *E", " *W", " *O", " *G", " *V", " *S", " *E", " *A",
+                            " *K", " *H", " *E", " *W", " *G", " *L", " *C", " *H"};
   static char *wsqr = "\033[7m";
   static char *bsqr = "\033[0m";
   static char *top = "\t+------------------------+\n";
@@ -659,11 +670,13 @@ static int style5(struct game_state_t *b, struct move_t *ml)
   static const char *wp[] = {"    ", "  o ", " :N:", " <B>", " |R|", " (A)", " [C]", " :M:", " {Q}", " !E!",
                             " <B>", " {Q}", " .W.", " :H:", " :N:", " <H>", " |D|", " |L|", 
                             " |C|", " !S!", " :G:", " :H:", " {A}", " {F}", " !E!", " (H)", " [M]", " :S:",
-                            " !E!", " |W|", " *O*", " {G}", " :V:", " (S)", " [E]", " &A&", " =K=", " (H)", " [E]"};
+                            " !E!", " |W|", " *O*", " {G}", " :V:", " (S)", " [E]", " &A&",
+                            " =K=", " (H)", " [E]", " (W)", " [G]", " <L>", " |C|", "  h "};
   static const char *bp[] = {"    ", "  p ", " :n:", " <b>", " |r|", " (a)", " [c]", " :m:", " {q}", " !e!",
                             " <b>", " {q}", " .w.", " :h:", " :n:", " <h>", " |d|", " |l|", 
                             " |c|", " !s!", " :g:", " :h:", " {a}", " {f}", " !e!", " (h)", " [m]", " :s:",
-                            " !e!", " |w|", " *o*", " {g}", " :v:", " (s)", " [e]", " &a&", " =k=", " (f)", " [e]"};
+                            " !e!", " |w|", " *o*", " {g}", " :v:", " (s)", " [e]", " &a&",
+                            " =k=", " (f)", " [e]", " (w)", " [g]", " <l>", " |c|", "  h "};
   static char *wsqr = "";
   static char *bsqr = "";
   static char *top = "        .   .   .   .   .   .   .   .   .\n";
@@ -682,11 +695,13 @@ static int style6(struct game_state_t *b, struct move_t *ml)
   static const char *wp[] = {"    |", " wp |", " WN |", " WB |", " WR |", " WA |", " WC |", " WM |", " WQ |", 
                             " WE |", " WB |", " WQ |", " WW |", " WH |", " WN |", " WD |", " WH |", " WL |", 
                             " WC |", " WS |", " WG |", " WH |", " WA |", " WF |", " WE |", " WH |", " WM |", 
-                            " WS |", " WE |", " WW |", " WO |", " WG |", " WV |", " WS |", " WE |", " WA |", " WK |", " WH |", " WE |"};
+                            " WS |", " WE |", " WW |", " WO |", " WG |", " WV |", " WS |", " WE |", " WA |",
+                            " WK |", " WH |", " WE |", " WW |", " WG |", " WL |", " WC |", " Wh |"};
   static const char *bp[] = {"    |", " bp |", " BN |", " BB |", " BR |", " BA |", " BC |", " BM |", " BQ |", 
                             " BE |", " BB |", " BQ |", " BW |", " BH |", " BN |", " BD |", " BH |", " BL |", 
                             " BC |", " BS |", " BG |", " BH |", " BA |", " BF |", " BE |", " BH |", " BM |", 
-                            " BS |", " BE |", " BW |", " BO |", " BG |", " BV |", " BS |", " BE |", " BA |", " BK |", " BH |", " BE |"};
+                            " BS |", " BE |", " BW |", " BO |", " BG |", " BV |", " BS |", " BE |", " BA |",
+                            " BK |", " BH |", " BE |", " BW |", " BG |", " BL |", " BC |", " Bh |"};
   static char *wsqr = "";
   static char *bsqr = "";
   static char *top = "\t-----------------------------------------\n";
@@ -704,9 +719,11 @@ static int style6(struct game_state_t *b, struct move_t *ml)
 static int style7(struct game_state_t *b, struct move_t *ml)
 {
   static const char *wp[] = {"  ", " P", " N", " B", " R", " A", " C", " M", " Q", " E", " B", " Q", " W", " H", " N", " D", " H", " L", 
-                            " C", " S", " G", " H", " A", " F", " E", " H", " M", " S", " E", " W", " O", " G", " V", " S", " E", " A", " K", " H", " E"};
+                            " C", " S", " G", " H", " A", " F", " E", " H", " M", " S", " E", " W", " O", " G", " V", " S", " E", " A",
+                            " K", " H", " E", " W", " G", " L", " C", " H"};
   static const char *bp[] = {" -", " p", " n", " b", " r", " a", " c", " m", " q", " e", " b", " q", " w", " h", " n", " d", " h", " l", 
-                            " c", " s", " g", " h", " a", " f", " e", " h", " m", " s", " e", " w", " o", " g", " v", " s", " e", " a", " k", " h", " e"};
+                            " c", " s", " g", " h", " a", " f", " e", " h", " m", " s", " e", " w", " o", " g", " v", " s", " e", " a",
+                            " k", " h", " e", " w", " g", " l", " c", " h"};
   static char *wsqr = "";
   static char *bsqr = "";
   static char *top = "\t:::::::::::::::::::::\n";
@@ -1081,110 +1098,125 @@ static int board_read_file(char *category, char *gname, struct game_state_t *gs)
       onNewLine = 0;
     } else {
       switch (c) {
-      case 'P':
-       onPiece = PAWN;
-       break;
-      case 'R':
-       onPiece = ROOK;
-       break;
-      case 'N':
-       onPiece = KNIGHT;
+      case 'A':
+       onPiece = CARDINAL;
        break;
       case 'B':
        onPiece = BISHOP;
        break;
-      case 'A':
-       onPiece = CARDINAL;
-       break;
       case 'C':
        onPiece = MARSHALL;
        break;
-      case 'M':
-       onPiece = MAN;
-       break;
-      case 'Q':
-       onPiece = QUEEN;
-       break;
-      case 'T':
-       onPiece = ELEPHANT;
+      case 'D':
+       onPiece = SELEPHANT;
        break;
       case 'E':
        onPiece = ALFIL;
        break;
-      case 't':
-       onPiece = ALFIL2;
-       break;
-      case 'q':
-       onPiece = FERZ;
-       break;
       case 'F':
        onPiece = FERZ2;
        break;
-      case 'W':
-       onPiece = WAZIR;
+      case 'G':
+       onPiece = GOLD;
        break;
-      case 'w':
-       onPiece = WOODY;
+      case 'H':
+       onPiece = HORSE;
        break;
-      case 'p':
-       onPiece = PRIESTESS;
+      case 'I':
+       onPiece = DRAGONHORSE;
        break;
-      case 'r':
-       onPiece = MINISTER;
+      case 'J':
+       onPiece = DRAGONKING;
        break;
-      case 'z':
-       onPiece = MAN2;
+      case 'K':
+       onPiece = KING;
        break;
-      case 'u':
-       onPiece = NIGHTRIDER;
+      case 'L':
+       onPiece = LANCE;
        break;
-      case 'o':
-       onPiece = MODERNELEPHANT;
+      case 'M':
+       onPiece = MAN;
        break;
-      case 's':
-       onPiece = MASTODON;
+      case 'N':
+       onPiece = KNIGHT;
        break;
-      case 'Z':
-       onPiece = AMAZON;
+      case 'O':
+       onPiece = CANNON;
+       break;
+      case 'P':
+       onPiece = PAWN;
+       break;
+      case 'Q':
+       onPiece = QUEEN;
+       break;
+      case 'R':
+       onPiece = ROOK;
+       break;
+      case 'S':
+       onPiece = SILVER;
+       break;
+      case 'T':
+       onPiece = ELEPHANT;
+       break;
+      case 'U':
+       onPiece = HAWK;
        break;
       case 'V':
        onPiece = CENTAUR;
        break;
-      case 'H':
-       onPiece = HORSE;
+      case 'W':
+       onPiece = WAZIR;
+       break;
+      case 'X':
+       onPiece = WARLORD;
+       break;
+      case 'Y':
+       onPiece = GENERAL;
+       break;
+      case 'Z':
+       onPiece = AMAZON;
+       break;
+      case 'm':
+       onPiece = MANDARIN;
        break;
       case 'n':
        onPiece = HONORABLEHORSE;
        break;
-      case 'J':
-       onPiece = DRAGONKING;
+      case 'o':
+       onPiece = MODERNELEPHANT;
        break;
-      case 'I':
-       onPiece = DRAGONHORSE;
+      case 'p':
+       onPiece = PRIESTESS;
        break;
-      case 'L':
-       onPiece = LANCE;
+      case 'q':
+       onPiece = FERZ;
        break;
-      case 'O':
-       onPiece = CANNON;
+      case 'r':
+       onPiece = MINISTER;
        break;
-      case 'S':
-       onPiece = SILVER;
+      case 's':
+       onPiece = MASTODON;
        break;
-      case 'G':
-       onPiece = GOLD;
+      case 't':
+       onPiece = ALFIL2;
        break;
-      case 'm':
-       onPiece = MANDARIN;
+      case 'u':
+       onPiece = NIGHTRIDER;
        break;
-      case 'K':
-       onPiece = KING;
+      case 'v':
+       onPiece = HOPLITE;
        break;
-      case 'D':
-       onPiece = SELEPHANT;
+      case 'w':
+       onPiece = WOODY;
        break;
-      case 'U':
-       onPiece = HAWK;
+      case 'x':
+       onPiece = LIEUTENANT;
+       break;
+      case 'y':
+       onPiece = CAPTAIN;
+       break;
+      case 'z':
+       onPiece = MAN2;
        break;
       case 'a':
       case 'b':