Advertisement
Guest User

Untitled

a guest
Oct 2nd, 2011
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.10 KB | None | 0 0
  1. #include <cstring>
  2. #include <cstdio>
  3. #include <cassert>
  4.  
  5. #include "xbrd.hpp"
  6. #include "prto.hpp"
  7.  
  8. int XBRD_Parse(char str[200])
  9. {
  10.     char str2[200], str3[200];
  11.    
  12.     if (!strcmp(str, "xboard")) {
  13.         return 1;
  14.     }
  15.     if (!strcmp(str, "protover")) {
  16.         printf("feature done=0\n");
  17.         printf("feature ping=0\n");
  18.         printf("feature setboard=1\n");
  19.         printf("feature playother=1\n");
  20.         printf("feature san=0\n");
  21.         printf("feature usermove=0\n");
  22.         printf("feature time=1\n");
  23.         printf("feature draw=1\n");
  24.         printf("feature sigint=0\n");
  25.         printf("feature sigterm=0\n");
  26.         printf("feature reuse=1\n");
  27.         printf("feature analyze=0\n");
  28.         printf("feature myname=\"Magic Chess 1.6\"\n");
  29.         printf("feature variants=\"normal\"\n");
  30.         printf("feature colors=0\n");
  31.         printf("feature ics=0\n");
  32.         printf("feature name=0\n");
  33.         printf("feature pause=0\n");
  34.         printf("feature nps=0\n");
  35.         printf("feature debug=1\n");
  36.         printf("feature memory=0\n");
  37.         printf("feature smp=0\n");
  38.         printf("feature egt=\"\"\n");
  39.         printf("feature done=1\n");
  40.         return 1;
  41.     }
  42.     if (!strcmp(str, "quit")) {
  43.         exit(0);
  44.     }
  45.     if (!strcmp(str, "?")) {
  46.         abortFlag = true;
  47.         return 2;
  48.     }
  49.     if (!strcmp(str, "time"))
  50.         sscanf(str, "time %d", searchTime);
  51.        
  52.     if (!strcmp(str, "go")) {
  53.         printf("tellall I can't play as white :(\n");
  54.         printf("telluser I can't play as white :(\n");
  55.         printf("resign\n");
  56.         return 3;
  57.     }
  58.     if (!strcmp(str, "d")) {
  59.         PrintBoard();
  60.         return 4;
  61.     }
  62.     /* THIS IS THE PROBLEM AREA */
  63.     if (!strcmp(str, "setboard")) {
  64.         sscanf(str, "setboard %s", str2);
  65.         int j = 0;
  66.         for (int i = 63; i > 0; i--) {
  67.             switch (str2[j]) {
  68.                 case '/':
  69.                     j++;
  70.                     break;
  71.                 case 'r':
  72.                     piece[i] = ROOK;
  73.                     color[i] = BLACK;
  74.                     j++;
  75.                     break;
  76.                 case 'n':
  77.                     piece[i] = KNIGHT;
  78.                     color[i] = BLACK;
  79.                     j++;
  80.                     break;
  81.                 case 'b':
  82.                     piece[i] = BISHOP;
  83.                     color[i] = BLACK;
  84.                     j++;
  85.                     break;
  86.                 case 'q':
  87.                     piece[i] = QUEEN;
  88.                     color[i] = BLACK;
  89.                     j++;
  90.                     break;
  91.                 case 'k':
  92.                     piece[i] = KING;
  93.                     color[i] = BLACK;
  94.                     j++;
  95.                     break;
  96.                 case 'p':
  97.                     piece[i] = PAWN;
  98.                     color[i] = BLACK;
  99.                     j++;
  100.                     break;
  101.                 case 'P':
  102.                     piece[i] = PAWN;
  103.                     color[i] = WHITE;
  104.                     j++;
  105.                     break;
  106.                 case 'K':
  107.                     piece[i] = KING;
  108.                     color[i] = WHITE;
  109.                     j++;
  110.                     break;
  111.                 case 'Q':
  112.                     piece[i] = QUEEN;
  113.                     color[i] = WHITE;
  114.                     j++;
  115.                     break;
  116.                 case 'B':
  117.                     piece[i] = BISHOP;
  118.                     color[i] = WHITE;
  119.                     j++;
  120.                     break;
  121.                 case 'N':
  122.                     piece[i] = KNIGHT;
  123.                     color[i] = WHITE;
  124.                     j++;
  125.                     break;
  126.                 case 8:
  127.                     i += 8;
  128.                     j++;
  129.                     break;
  130.                 case 7:
  131.                     i += 7;
  132.                     j++;
  133.                     break;
  134.                 case 6:
  135.                     i += 6;
  136.                     j++;
  137.                     break;
  138.                 case 5:
  139.                     i += 5;
  140.                     j++;
  141.                     break;
  142.                 case 4:
  143.                     i += 4;
  144.                     j++;
  145.                     break;
  146.                 case 3:
  147.                     i += 3;
  148.                     j++;
  149.                     break;
  150.                 case 2:
  151.                     i += 2;
  152.                     j++;
  153.                     break;
  154.                 case 1:
  155.                     i++;
  156.                     j++;
  157.                     break;
  158.                 default:
  159.                     assert(false);
  160.                     break;
  161.             }
  162.            
  163.             j++;
  164.            
  165.             switch (str2[j]) {
  166.                 case 'w':
  167.                     side = WHITE;
  168.                     break;
  169.                 case 'b':
  170.                     side = BLACK;
  171.                     break;
  172.                 default:
  173.                     assert(false);
  174.                     break;
  175.             }
  176.            
  177.             j++;
  178.            
  179.             for (i = 0; i != 1;) { // only way I can think of for a breakable loop
  180.                 switch (str2[j]) {
  181.                     case 'K':
  182.                         j++;
  183.                         break;
  184.                     case 'Q':
  185.                         j++;
  186.                         break;
  187.                     case 'k':
  188.                         j++;
  189.                         break;
  190.                     case 'q':
  191.                         j++;
  192.                         break;
  193.                     case '-':
  194.                         j++;
  195.                         i++;
  196.                         break;
  197.                     default:
  198.                         j++;
  199.                         i++;
  200.                         break;
  201.                 }
  202.             }
  203.            
  204.             for (i = 0; i != 1;) {
  205.                 switch (str2[j]) {
  206.                     case '-':
  207.                         j++;
  208.                         break;
  209.                     case 'a':
  210.                     case 'b':
  211.                     case 'c':
  212.                     case 'd':
  213.                     case 'e':
  214.                     case 'f':
  215.                     case 'g':
  216.                     case 'h':
  217.                     case 1:
  218.                     case 2:
  219.                     case 3:
  220.                     case 4:
  221.                     case 5:
  222.                     case 6:
  223.                     case 7:
  224.                     case 8:
  225.                         j++;
  226.                         break;
  227.                     default:
  228.                         j++;
  229.                         break;
  230.                 }
  231.             }
  232.            
  233.         }
  234.         return 2;
  235.     /* END PROBLEM AREA */
  236.     }
  237.     return -1;
  238. }
  239.  
  240.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement