Subversion Repositories Games.Chess Giants

Rev

Rev 33 | Rev 154 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 33 Rev 108
Line 25... Line 25...
25
 *   comment using (move) or {move}.  Crafty will search that move in addition *
25
 *   comment using (move) or {move}.  Crafty will search that move in addition *
26
 *   to the move actually played and the move it thinks is best.               *
26
 *   to the move actually played and the move it thinks is best.               *
27
 *                                                                             *
27
 *                                                                             *
28
 *   The format of the command is as follows:                                  *
28
 *   The format of the command is as follows:                                  *
29
 *                                                                             *
29
 *                                                                             *
30
 *       annotate filename b|w|bw|name moves margin time [n]                   *
30
 *        annotate filename b|w|bw|name moves margin time [n]                  *
31
 *                                                                             *
31
 *                                                                             *
32
 *   Filename is the input file where Crafty will obtain the moves to          *
32
 *   Filename is the input file where Crafty will obtain the moves to          *
33
 *   annotate, and output will be written to file "filename.can".              *
33
 *   annotate, and output will be written to file "filename.can".              *
34
 *                                                                             *
34
 *                                                                             *
35
 *       annotateh filename b|w|bw|name moves margin time [n]                  *
35
 *        annotateh filename b|w|bw|name moves margin time [n]                 *
36
 *                                                                             *
36
 *                                                                             *
37
 *   Can be used to produce an HTML-compatible file that includes bitmapped    *
37
 *   Can be used to produce an HTML-compatible file that includes bitmapped    *
38
 *   diagrams of the positions where Crafty provides analysis.  This file can  *
38
 *   diagrams of the positions where Crafty provides analysis.  This file can  *
39
 *   be opened by a browser to provide much easier 'reading'.                  *
39
 *   be opened by a browser to provide much easier 'reading'.                  *
40
 *                                                                             *
40
 *                                                                             *
41
 *       annotatet filename b|w|bw|name moves margin time [n]                  *
41
 *        annotatet filename b|w|bw|name moves margin time [n]                 *
42
 *                                                                             *
42
 *                                                                             *
43
 *   Can be used to produce a LaTeX-compatible file that includes LaTeX chess  *
43
 *   Can be used to produce a LaTeX-compatible file that includes LaTeX chess  *
44
 *   fonts.  This file can be read/printed by any program that can handle      *
44
 *   fonts.  This file can be read/printed by any program that can handle      *
45
 *   LaTeX input.                                                              *
45
 *   LaTeX input.                                                              *
46
 *                                                                             *
46
 *                                                                             *
Line 105... Line 105...
105
  if (!strcmp(args[0], "annotatet")) {
105
  if (!strcmp(args[0], "annotatet")) {
106
    latex = 1;
106
    latex = 1;
107
    strcpy(html_br, "\\\\");
107
    strcpy(html_br, "\\\\");
108
  }
108
  }
109
  strcpy(tbuffer, buffer);
109
  strcpy(tbuffer, buffer);
110
  nargs = ReadParse(tbuffer, args, "    ;");
110
  nargs = ReadParse(tbuffer, args, " \t;");
111
  if (nargs < 6) {
111
  if (nargs < 6) {
112
    printf
112
    printf
113
        ("usage: annotate <file> <color> <moves> <margin> <time> [nmoves]\n");
113
        ("usage: annotate <file> <color> <moves> <margin> <time> [nmoves]\n");
114
    return;
114
    return;
115
  }
115
  }
116
  annotate_in = fopen(args[1], "r");
116
  annotate_in = fopen(args[1], "r");
117
  if (annotate_in == NULL) {
117
  if (annotate_in == NULL) {
118
    Print(4095, "unable to open %s for input\n", args[1]);
118
    Print(4095, "unable to open %s for input\n", args[1]);
119
    return;
119
    return;
120
  }
120
  }
121
  nargs = ReadParse(tbuffer, args, "    ;");
121
  nargs = ReadParse(tbuffer, args, " \t;");
122
  strcpy(text, args[1]);
122
  strcpy(text, args[1]);
123
  if (html_mode == 1)
123
  if (html_mode == 1)
124
    strcpy(text + strlen(text), ".html");
124
    strcpy(text + strlen(text), ".html");
125
  else if (latex == 1)
125
  else if (latex == 1)
126
    strcpy(text + strlen(text), ".tex");
126
    strcpy(text + strlen(text), ".tex");
Line 266... Line 266...
266
    do {
266
    do {
267
      fflush(annotate_out);
267
      fflush(annotate_out);
268
      move = ReadNextMove(tree, buffer, 0, wtm);
268
      move = ReadNextMove(tree, buffer, 0, wtm);
269
      if (move <= 0)
269
      if (move <= 0)
270
        break;
270
        break;
271
      strcpy(text, OutputMove(tree, move, 0, wtm));
271
      strcpy(text, OutputMove(tree, 0, wtm, move));
272
      if (history_file) {
272
      if (history_file) {
273
        fseek(history_file, ((move_number - 1) * 2 + 1 - wtm) * 10, SEEK_SET);
273
        fseek(history_file, ((move_number - 1) * 2 + 1 - wtm) * 10, SEEK_SET);
274
        fprintf(history_file, "%9s\n", text);
274
        fprintf(history_file, "%9s\n", text);
275
      }
275
      }
276
      if (wtm)
276
      if (wtm)
Line 314... Line 314...
314
              search_depth = temp[0].pathd;
314
              search_depth = temp[0].pathd;
315
            }
315
            }
316
            Print(4095, "\n              Searching all legal moves.");
316
            Print(4095, "\n              Searching all legal moves.");
317
            Print(4095, "----------------------------------\n");
317
            Print(4095, "----------------------------------\n");
318
            tree->status[1] = tree->status[0];
318
            tree->status[1] = tree->status[0];
319
            InitializeHashTables();
319
            InitializeHashTables(0);
320
            annotate_score[searches_done] = Iterate(wtm, annotate, 1);
320
            annotate_score[searches_done] = Iterate(wtm, annotate, 1);
321
            if (tree->pv[0].path[1] == move) {
321
            if (tree->pv[0].path[1] == move) {
322
              player_score = annotate_score[searches_done];
322
              player_score = annotate_score[searches_done];
323
              player_pv = tree->pv[0];
323
              player_pv = tree->pv[0];
324
              search_player = 0;
324
              search_player = 0;
Line 352... Line 352...
352
            n_root_moves = 1;
352
            n_root_moves = 1;
353
            search_time_limit = 3 * annotate_search_time_limit;
353
            search_time_limit = 3 * annotate_search_time_limit;
354
            search_depth = temp[0].pathd;
354
            search_depth = temp[0].pathd;
355
            if (search_depth == temp_search_depth)
355
            if (search_depth == temp_search_depth)
356
              search_time_limit = annotate_search_time_limit;
356
              search_time_limit = annotate_search_time_limit;
357
            InitializeHashTables();
357
            InitializeHashTables(0);
358
            player_score = Iterate(wtm, annotate, 1);
358
            player_score = Iterate(wtm, annotate, 1);
359
            player_pv = tree->pv[0];
359
            player_pv = tree->pv[0];
360
            search_depth = temp_search_depth;
360
            search_depth = temp_search_depth;
361
            search_time_limit = annotate_search_time_limit;
361
            search_time_limit = annotate_search_time_limit;
362
            search_move = 0;
362
            search_move = 0;
Line 438... Line 438...
438
 *                                                          *
438
 *                                                          *
439
 ************************************************************
439
 ************************************************************
440
 */
440
 */
441
      read_status = ReadPGN(annotate_in, 1);
441
      read_status = ReadPGN(annotate_in, 1);
442
      while (read_status == 2) {
442
      while (read_status == 2) {
443
        suggested = InputMove(tree, buffer, 0, wtm, 1, 0);
443
        suggested = InputMove(tree, 0, wtm, 1, 0, buffer);
444
        if (suggested > 0) {
444
        if (suggested > 0) {
445
          thinking = 1;
445
          thinking = 1;
446
          Print(4095, "\n              Searching only the move suggested.");
446
          Print(4095, "\n              Searching only the move suggested.");
447
          Print(4095, "--------------------\n");
447
          Print(4095, "--------------------\n");
448
          tree->status[1] = tree->status[0];
448
          tree->status[1] = tree->status[0];
449
          search_move = suggested;
449
          search_move = suggested;
450
          search_time_limit = 3 * annotate_search_time_limit;
450
          search_time_limit = 3 * annotate_search_time_limit;
451
          search_depth = temp[0].pathd;
451
          search_depth = temp[0].pathd;
452
          InitializeHashTables();
452
          InitializeHashTables(0);
453
          annotate_score[0] = Iterate(wtm, annotate, 0);
453
          annotate_score[0] = Iterate(wtm, annotate, 0);
454
          search_depth = temp_search_depth;
454
          search_depth = temp_search_depth;
455
          search_time_limit = annotate_search_time_limit;
455
          search_time_limit = annotate_search_time_limit;
456
          search_move = 0;
456
          search_move = 0;
457
          thinking = 0;
457
          thinking = 0;
Line 464... Line 464...
464
            }
464
            }
465
            fprintf(annotate_out, "                ({suggested %d:%s}",
465
            fprintf(annotate_out, "                ({suggested %d:%s}",
466
                tree->pv[0].pathd, DisplayEvaluationKibitz(annotate_score[0],
466
                tree->pv[0].pathd, DisplayEvaluationKibitz(annotate_score[0],
467
                    wtm));
467
                    wtm));
468
            for (i = 1; i <= path_len; i++) {
468
            for (i = 1; i <= path_len; i++) {
469
              fprintf(annotate_out, " %s", OutputMove(tree,
469
              fprintf(annotate_out, " %s", OutputMove(tree, i, twtm,
470
                      tree->pv[0].path[i], i, twtm));
470
                      tree->pv[0].path[i]));
471
              MakeMove(tree, i, tree->pv[0].path[i], twtm);
471
              MakeMove(tree, i, twtm, tree->pv[0].path[i]);
472
              twtm = Flip(twtm);
472
              twtm = Flip(twtm);
473
            }
473
            }
474
            for (i = path_len; i > 0; i--) {
474
            for (i = path_len; i > 0; i--) {
475
              twtm = Flip(twtm);
475
              twtm = Flip(twtm);
476
              UnmakeMove(tree, i, tree->pv[0].path[i], twtm);
476
              UnmakeMove(tree, i, twtm, tree->pv[0].path[i]);
477
            }
477
            }
478
            fprintf(annotate_out, " %s)%s\n",
478
            fprintf(annotate_out, " %s)%s\n",
479
                AnnotateVtoNAG(annotate_score[0], wtm, html_mode, latex),
479
                AnnotateVtoNAG(annotate_score[0], wtm, html_mode, latex),
480
                html_br);
480
                html_br);
481
          }
481
          }
Line 484... Line 484...
484
        if (read_status != 2)
484
        if (read_status != 2)
485
          break;
485
          break;
486
      }
486
      }
487
      if ((analysis_printed) && (latex == 0))
487
      if ((analysis_printed) && (latex == 0))
488
        fprintf(annotate_out, "%s\n", html_br);
488
        fprintf(annotate_out, "%s\n", html_br);
489
      MakeMoveRoot(tree, move, wtm);
489
      MakeMoveRoot(tree, wtm, move);
490
      wtm = Flip(wtm);
490
      wtm = Flip(wtm);
491
      if (wtm)
491
      if (wtm)
492
        move_number++;
492
        move_number++;
493
      if (read_status != 0)
493
      if (read_status != 0)
494
        break;
494
        break;
495
      if (line2 < -1)
495
      if (line2 < -1)
496
        break;
496
        break;
497
    } while (1);
497
    } while (1);
498
    fprintf(annotate_out, "\n       %s %s\n", pgn_result, html_br);
498
    fprintf(annotate_out, "  %s %s\n\n", pgn_result, html_br);
499
    if (html_mode == 1) {
499
    if (html_mode == 1) {
500
      fprintf(annotate_out, "%s\n", html_br);
500
      fprintf(annotate_out, "%s\n", html_br);
501
      AnnotateFooterHTML(annotate_out);
501
      AnnotateFooterHTML(annotate_out);
502
    }
502
    }
503
    if (latex == 1) {
503
    if (latex == 1) {
Line 565... Line 565...
565
  fprintf(annotate_out, "<br>\n");
565
  fprintf(annotate_out, "<br>\n");
566
  fprintf(annotate_out, "<TABLE Border=1 CellSpacing=0 CellPadding=0>\n\n");
566
  fprintf(annotate_out, "<TABLE Border=1 CellSpacing=0 CellPadding=0>\n\n");
567
  for (rank = RANK8; rank >= RANK1; rank--) {
567
  for (rank = RANK8; rank >= RANK1; rank--) {
568
    fprintf(annotate_out, "<TR>\n");
568
    fprintf(annotate_out, "<TR>\n");
569
    for (file = FILEA; file <= FILEH; file++) {
569
    for (file = FILEA; file <= FILEH; file++) {
570
      (void) strcpy_s(filename, sizeof (filename), "bitmaps/"); // Pierre-Marie Baty -- use safe version
570
      strcpy(filename, "bitmaps/");
571
      if ((rank + file) % 2)
571
      if ((rank + file) % 2)
572
        (void) strcat_s(filename, sizeof (filename), "w"); // Pierre-Marie Baty -- use safe version
572
        strcat(filename, "w");
573
      else
573
      else
574
        (void) strcat_s(filename, sizeof (filename), "b"); // Pierre-Marie Baty -- use safe version
574
        strcat(filename, "b");
575
      html_piece = translate[PcOnSq((rank << 3) + file) + 6];
575
      html_piece = translate[PcOnSq((rank << 3) + file) + 6];
576
      switch (html_piece) {
576
      switch (html_piece) {
577
        case 'p':
577
        case 'p':
578
          strcat_s(filename, sizeof (filename), "bp"); // Pierre-Marie Baty -- use safe version
578
          strcat(filename, "bp");
579
          strcpy_s(alt, sizeof (alt), "*P"); // Pierre-Marie Baty -- use safe version
579
          strcpy(alt, "*P");
580
          break;
580
          break;
581
        case 'r':
581
        case 'r':
582
          strcat_s(filename, sizeof (filename), "br"); // Pierre-Marie Baty -- use safe version
582
          strcat(filename, "br");
583
          strcpy_s(alt, sizeof (alt), "*R"); // Pierre-Marie Baty -- use safe version
583
          strcpy(alt, "*R");
584
          break;
584
          break;
585
        case 'n':
585
        case 'n':
586
          strcat_s(filename, sizeof (filename), "bn"); // Pierre-Marie Baty -- use safe version
586
          strcat(filename, "bn");
587
          strcpy_s(alt, sizeof (alt), "*N"); // Pierre-Marie Baty -- use safe version
587
          strcpy(alt, "*N");
588
          break;
588
          break;
589
        case 'b':
589
        case 'b':
590
          strcat_s(filename, sizeof (filename), "bb"); // Pierre-Marie Baty -- use safe version
590
          strcat(filename, "bb");
591
          strcpy_s(alt, sizeof (alt), "*B"); // Pierre-Marie Baty -- use safe version
591
          strcpy(alt, "*B");
592
          break;
592
          break;
593
        case 'q':
593
        case 'q':
594
          strcat_s(filename, sizeof (filename), "bq"); // Pierre-Marie Baty -- use safe version
594
          strcat(filename, "bq");
595
          strcpy_s(alt, sizeof (alt), "*Q"); // Pierre-Marie Baty -- use safe version
595
          strcpy(alt, "*Q");
596
          break;
596
          break;
597
        case 'k':
597
        case 'k':
598
          strcat_s(filename, sizeof (filename), "bk"); // Pierre-Marie Baty -- use safe version
598
          strcat(filename, "bk");
599
          strcpy_s(alt, sizeof (alt), "*K"); // Pierre-Marie Baty -- use safe version
599
          strcpy(alt, "*K");
600
          break;
600
          break;
601
        case 'P':
601
        case 'P':
602
          strcat_s(filename, sizeof (filename), "wp"); // Pierre-Marie Baty -- use safe version
602
          strcat(filename, "wp");
603
          strcpy_s(alt, sizeof (alt), "P"); // Pierre-Marie Baty -- use safe version
603
          strcpy(alt, "P");
604
          break;
604
          break;
605
        case 'R':
605
        case 'R':
606
          strcat_s(filename, sizeof (filename), "wr"); // Pierre-Marie Baty -- use safe version
606
          strcat(filename, "wr");
607
          strcpy_s(alt, sizeof (alt), "R"); // Pierre-Marie Baty -- use safe version
607
          strcpy(alt, "R");
608
          break;
608
          break;
609
        case 'N':
609
        case 'N':
610
          strcat_s(filename, sizeof (filename), "wn"); // Pierre-Marie Baty -- use safe version
610
          strcat(filename, "wn");
611
          strcpy_s(alt, sizeof (alt), "N"); // Pierre-Marie Baty -- use safe version
611
          strcpy(alt, "N");
612
          break;
612
          break;
613
        case 'B':
613
        case 'B':
614
          strcat_s(filename, sizeof (filename), "wb"); // Pierre-Marie Baty -- use safe version
614
          strcat(filename, "wb");
615
          strcpy_s(alt, sizeof (alt), "B"); // Pierre-Marie Baty -- use safe version
615
          strcpy(alt, "B");
616
          break;
616
          break;
617
        case 'Q':
617
        case 'Q':
618
          strcat_s(filename, sizeof (filename), "wq"); // Pierre-Marie Baty -- use safe version
618
          strcat(filename, "wq");
619
          strcpy_s(alt, sizeof (alt), "Q"); // Pierre-Marie Baty -- use safe version
619
          strcpy(alt, "Q");
620
          break;
620
          break;
621
        case 'K':
621
        case 'K':
622
          strcat_s(filename, sizeof (filename), "wk"); // Pierre-Marie Baty -- use safe version
622
          strcat(filename, "wk");
623
          strcpy_s(alt, sizeof (alt), "K"); // Pierre-Marie Baty -- use safe version
623
          strcpy(alt, "K");
624
          break;
624
          break;
625
        default:
625
        default:
626
          strcat_s(filename, sizeof (filename), "sq"); // Pierre-Marie Baty -- use safe version
626
          strcat(filename, "sq");
627
          strcpy_s(alt, sizeof (alt), " "); // Pierre-Marie Baty -- use safe version
627
          strcpy(alt, " ");
628
          break;
628
          break;
629
      }
629
      }
630
      strcat_s(filename, sizeof (filename), ".gif"); // Pierre-Marie Baty -- use safe version
630
      strcat(filename, ".gif");
631
      fprintf(annotate_out, "<TD><IMG ALT=\"%s\" SRC=\"%s\"></TD>\n", alt,
631
      fprintf(annotate_out, "<TD><IMG ALT=\"%s\" SRC=\"%s\"></TD>\n", alt,
632
          filename);
632
          filename);
633
    }
633
    }
634
    fprintf(annotate_out, "</TR>\n\n");
634
    fprintf(annotate_out, "</TR>\n\n");
635
  }
635
  }
Line 642... Line 642...
642
}
642
}
643
 
643
 
644
/*
644
/*
645
 *******************************************************************************
645
 *******************************************************************************
646
 * Author         : Alexander Wagner                                           *
646
 * Author         : Alexander Wagner                                           *
647
 *                                      University of Michigan                 *
647
 *                  University of Michigan                                     *
648
 * Date           : 03.01.04                                                   *
648
 * Date           : 03.01.04                                                   *
649
 *                                                                             *
649
 *                                                                             *
650
 * Last Modified  : 03.01.04                                                   *
650
 * Last Modified  : 03.01.04                                                   *
651
 *                                                                             *
651
 *                                                                             *
652
 * Based upon the HTML-Code above                                              *
652
 * Based upon the HTML-Code above                                              *
Line 698... Line 698...
698
  fprintf(annotate_out, "\\begin{diagram}\n\\board\n");
698
  fprintf(annotate_out, "\\begin{diagram}\n\\board\n");
699
  for (rank = RANK8; rank >= RANK1; rank--) {
699
  for (rank = RANK8; rank >= RANK1; rank--) {
700
    fprintf(annotate_out, "   {");
700
    fprintf(annotate_out, "   {");
701
    for (file = FILEA; file <= FILEH; file++) {
701
    for (file = FILEA; file <= FILEH; file++) {
702
      if ((rank + file) % 2)
702
      if ((rank + file) % 2)
703
        (void) strcpy(filename, " ");
703
        strcpy(filename, " ");
704
      else
704
      else
705
        (void) strcpy(filename, "*");
705
        strcpy(filename, "*");
706
      html_piece = translate[PcOnSq((rank << 3) + file) + 6];
706
      html_piece = translate[PcOnSq((rank << 3) + file) + 6];
707
      switch (html_piece) {
707
      switch (html_piece) {
708
        case 'p':
708
        case 'p':
709
          strcpy(filename, "p");
709
          strcpy(filename, "p");
710
          break;
710
          break;