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, |
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 |
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] |
470 | tree->pv[0].path[i])); |
471 | MakeMove(tree, i, tree->pv[0].path[i] |
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] |
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, |
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, " |
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 |
|
570 | strcpy(filename, "bitmaps/"); |
571 | if ((rank + file) % 2) |
571 | if ((rank + file) % 2) |
572 |
|
572 | strcat(filename, "w"); |
573 | else |
573 | else |
574 |
|
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 |
|
578 | strcat(filename, "bp"); |
579 |
|
579 | strcpy(alt, "*P"); |
580 | break; |
580 | break; |
581 | case 'r': |
581 | case 'r': |
582 |
|
582 | strcat(filename, "br"); |
583 |
|
583 | strcpy(alt, "*R"); |
584 | break; |
584 | break; |
585 | case 'n': |
585 | case 'n': |
586 |
|
586 | strcat(filename, "bn"); |
587 |
|
587 | strcpy(alt, "*N"); |
588 | break; |
588 | break; |
589 | case 'b': |
589 | case 'b': |
590 |
|
590 | strcat(filename, "bb"); |
591 |
|
591 | strcpy(alt, "*B"); |
592 | break; |
592 | break; |
593 | case 'q': |
593 | case 'q': |
594 |
|
594 | strcat(filename, "bq"); |
595 |
|
595 | strcpy(alt, "*Q"); |
596 | break; |
596 | break; |
597 | case 'k': |
597 | case 'k': |
598 |
|
598 | strcat(filename, "bk"); |
599 |
|
599 | strcpy(alt, "*K"); |
600 | break; |
600 | break; |
601 | case 'P': |
601 | case 'P': |
602 |
|
602 | strcat(filename, "wp"); |
603 |
|
603 | strcpy(alt, "P"); |
604 | break; |
604 | break; |
605 | case 'R': |
605 | case 'R': |
606 |
|
606 | strcat(filename, "wr"); |
607 |
|
607 | strcpy(alt, "R"); |
608 | break; |
608 | break; |
609 | case 'N': |
609 | case 'N': |
610 |
|
610 | strcat(filename, "wn"); |
611 |
|
611 | strcpy(alt, "N"); |
612 | break; |
612 | break; |
613 | case 'B': |
613 | case 'B': |
614 |
|
614 | strcat(filename, "wb"); |
615 |
|
615 | strcpy(alt, "B"); |
616 | break; |
616 | break; |
617 | case 'Q': |
617 | case 'Q': |
618 |
|
618 | strcat(filename, "wq"); |
619 |
|
619 | strcpy(alt, "Q"); |
620 | break; |
620 | break; |
621 | case 'K': |
621 | case 'K': |
622 |
|
622 | strcat(filename, "wk"); |
623 |
|
623 | strcpy(alt, "K"); |
624 | break; |
624 | break; |
625 | default: |
625 | default: |
626 |
|
626 | strcat(filename, "sq"); |
627 |
|
627 | strcpy(alt, " "); |
628 | break; |
628 | break; |
629 | } |
629 | } |
630 |
|
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 | * |
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 |
|
703 | strcpy(filename, " "); |
704 | else |
704 | else |
705 |
|
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; |