diff -uNr crafty-19.8-vanilla/Makefile crafty-19.8/Makefile
--- crafty-19.8-vanilla/Makefile	2003-12-20 05:52:00.000000000 +0100
+++ crafty-19.8/Makefile	2004-01-05 11:10:18.000000000 +0100
@@ -238,11 +238,9 @@
 linux-icc:
 	$(MAKE) target=LINUX \
 		CC=icc CXX=icc \
-		CFLAGS='$(CFLAGS) -D_REENTRANT -O2 -march=pentiumiii \
-                        -mcpu=pentiumpro -prof_use -prof_dir ./profdir \
+		CFLAGS='$(CFLAGS) -D_REENTRANT -O2 \
                         -fno-alias -tpp6' \
-		CXFLAGS='$(CFLAGS) -D_REENTRANT -O2 -march=pentiumiii \
-                        -mcpu=pentiumpro -prof_use -prof_dir ./profdir \
+		CXFLAGS='$(CFLAGS) -D_REENTRANT -O2 \
                         -tpp6' \
 		LDFLAGS='$(LDFLAGS) -lpthread' \
 		opt='$(opt) -DCOMPACT_ATTACKS -DUSE_ATTACK_FUNCTIONS \
diff -uNr crafty-19.8-vanilla/annotate.c crafty-19.8/annotate.c
--- crafty-19.8-vanilla/annotate.c	2003-12-27 05:06:31.000000000 +0100
+++ crafty-19.8/annotate.c	2004-01-05 12:19:00.000000000 +0100
@@ -85,6 +85,7 @@
   char html_br[5]={""};
   int save_swindle_mode, save_asymmetry;
   int html_mode=0;
+  int latex_mode=0;
 /*
  ----------------------------------------------------------
 |                                                          |
@@ -99,6 +100,12 @@
     html_mode = 1;
     strcpy(html_br,"<br>");
   }
+  /* LaTeX */
+  if (!strcmp(args[0],"annotatet")) {
+    latex_mode = 1;
+    strcpy(html_br,"\\\\");
+  }
+
   strcpy(tbuffer,buffer);
   nargs=ReadParse(tbuffer,args," 	;");
   if (nargs < 6) {
@@ -112,14 +119,22 @@
   }
   nargs=ReadParse(tbuffer,args," 	;");
   strcpy(text,args[1]);
-  if (strlen(html_br)) strcpy(text+strlen(text),".html");
+  if (html_mode == 1) strcpy(text+strlen(text),".html");
+
+  /* LaTeX */
+  else if (latex_mode == 1) strcpy(text+strlen(text),".tex");
   else strcpy(text+strlen(text),".can");
+
   annotate_out = fopen(text,"w");
   if (annotate_out == NULL) {
     Print(4095,"unable to open %s for output\n", text);
     return;
   }
-  if (strlen(html_br)) AnnotateHeaderHTML(text,annotate_out);
+  if (html_mode == 1) AnnotateHeaderHTML(text,annotate_out);
+
+  /* LaTeX */
+  if (latex_mode == 1) AnnotateHeaderTeX(text,annotate_out);
+
   if (strlen(args[2]) <= 2) strcpy(colors,args[2]);
   else strcpy(pname,args[2]);
   line1=1;
@@ -177,30 +192,41 @@
       read_status=ReadPGN(annotate_in,0);
     while(read_status==1);
     if (read_status == -1) break;
-    fprintf(annotate_out,"[Event \"%s\"]%s\n",pgn_event,html_br);
-    fprintf(annotate_out,"[Site \"%s\"]%s\n",pgn_site,html_br);
-    fprintf(annotate_out,"[Date \"%s\"]%s\n",pgn_date,html_br);
-    fprintf(annotate_out,"[Round \"%s\"]%s\n",pgn_round,html_br);
-    fprintf(annotate_out,"[White \"%s\"]%s\n",pgn_white,html_br);
-    fprintf(annotate_out,"[WhiteElo \"%s\"]%s\n",pgn_white_elo,html_br);
-    fprintf(annotate_out,"[Black \"%s\"]%s\n",pgn_black,html_br);
-    fprintf(annotate_out,"[BlackElo \"%s\"]%s\n",pgn_black_elo,html_br);
-    fprintf(annotate_out,"[Result \"%s\"]%s\n",pgn_result,html_br);
-
-    fprintf(annotate_out,"[Annotator \"Crafty v%s\"]%s\n",version,html_br);
-    if (strlen(colors) != 0) {
-      if (!strcmp(colors,"bw") || !strcmp(colors,"wb"))
-        fprintf(annotate_out,"{annotating both black and white moves.}%s\n",html_br);
-      else if (strchr(colors,'b'))
-        fprintf(annotate_out,"{annotating only black moves.}%s\n",html_br);
-      else if (strchr(colors,'w'))
-        fprintf(annotate_out,"{annotating only white moves.}%s\n",html_br);
-    }
-    else fprintf(annotate_out,"{annotating for player %s}%s\n",pname,html_br);
-    fprintf(annotate_out,"{using a scoring margin of %s pawns.}%s\n",
-            DisplayEvaluationKibitz(annotate_margin,wtm),html_br);
-    fprintf(annotate_out,"{search time limit is %s}%s\n%s\n",
-            DisplayTimeKibitz(annotate_search_time_limit),html_br,html_br);
+
+	 if (latex_mode == 0)
+	 {
+		 fprintf(annotate_out,"[Event \"%s\"]%s\n",pgn_event,html_br);
+		 fprintf(annotate_out,"[Site \"%s\"]%s\n",pgn_site,html_br);
+		 fprintf(annotate_out,"[Date \"%s\"]%s\n",pgn_date,html_br);
+		 fprintf(annotate_out,"[Round \"%s\"]%s\n",pgn_round,html_br);
+		 fprintf(annotate_out,"[White \"%s\"]%s\n",pgn_white,html_br);
+		 fprintf(annotate_out,"[WhiteElo \"%s\"]%s\n",pgn_white_elo,html_br);
+		 fprintf(annotate_out,"[Black \"%s\"]%s\n",pgn_black,html_br);
+		 fprintf(annotate_out,"[BlackElo \"%s\"]%s\n",pgn_black_elo,html_br);
+		 fprintf(annotate_out,"[Result \"%s\"]%s\n",pgn_result,html_br);
+
+		 fprintf(annotate_out,"[Annotator \"Crafty v%s\"]%s\n",version,html_br);
+		 if (strlen(colors) != 0) {
+			if (!strcmp(colors,"bw") || !strcmp(colors,"wb"))
+			  fprintf(annotate_out,"{annotating both black and white moves.}%s\n",html_br);
+			else if (strchr(colors,'b'))
+			  fprintf(annotate_out,"{annotating only black moves.}%s\n",html_br);
+			else if (strchr(colors,'w'))
+			  fprintf(annotate_out,"{annotating only white moves.}%s\n",html_br);
+		 }
+		 else fprintf(annotate_out,"{annotating for player %s}%s\n",pname,html_br);
+		 fprintf(annotate_out,"{using a scoring margin of %s pawns.}%s\n",
+					DisplayEvaluationKibitz(annotate_margin,wtm),html_br);
+		 fprintf(annotate_out,"{search time limit is %s}%s\n%s\n",
+					DisplayTimeKibitz(annotate_search_time_limit),html_br,html_br);
+	 }
+	 else {
+	 /* LaTeX */
+		 fprintf(annotate_out,"\\textbf{\\sc %s %s -- %s %s}%s\n", pgn_white, pgn_white_elo, pgn_black, pgn_black_elo, html_br);
+		 fprintf(annotate_out,"{\\em %s, %s}%s\n", pgn_site, pgn_date,html_br);
+		 fprintf(annotate_out,"{\\small %s, Round: %s}%s\n",pgn_event, pgn_round,html_br);
+		 fprintf(annotate_out,"\\begin{mainline}{%s}{Crafty v%s}\n",pgn_result,version);
+	 }
     if (strlen(colors)) {
       if (!strcmp(colors,"w")) annotate_wtm=1;
       else if (!strcmp(colors,"b")) annotate_wtm=0;
@@ -210,6 +236,7 @@
         Print(4095, "invalid color specification, retry\n");
         fclose(annotate_out);
         return;
+		  
       }
     }
     else {
@@ -325,26 +352,53 @@
               analysis_printed=1;
               fprintf(annotate_out,"%s\n",html_br);
             }
-            if (strlen(html_br)) AnnotatePositionHTML(tree,wtm,annotate_out);
-            fprintf(annotate_out,"                ({%d:%s}",
-                    player_pv.pathd,
-                    DisplayEvaluationKibitz(player_score,wtm)); 
+            if (html_mode == 1) AnnotatePositionHTML(tree,wtm,annotate_out);
+				/* LaTeX */
+				if (latex_mode == 1) 
+				{
+					AnnotatePositionTeX(tree,wtm,annotate_out);
+					fprintf(annotate_out,"   \\begin{variation}\\{%d:%s\\}",
+							  player_pv.pathd,
+							  DisplayEvaluationKibitz(player_score,wtm));
+				}
+				else
+					fprintf(annotate_out,"                ({%d:%s}",
+							  player_pv.pathd,
+							  DisplayEvaluationKibitz(player_score,wtm)); 
             path_len=player_pv.pathl;
             fprintf(annotate_out," %s", FormatPV(tree,wtm, player_pv));
-            fprintf(annotate_out," %s)%s\n",
-                    AnnotateValueToNAG(player_score,wtm,html_mode), html_br);
+
+				/* LaTeX */
+				if (latex_mode == 1)
+					fprintf(annotate_out," %s\n   \\end{variation}\n",
+							  AnnotateValueToNAG(player_score,wtm,html_mode,latex_mode));
+				else
+					fprintf(annotate_out," %s)%s\n",
+							  AnnotateValueToNAG(player_score,wtm,html_mode,latex_mode), html_br);
             for (move_num=0;move_num<searches_done;move_num++) {
               if (move != temp[move_num].path[1]) {
-                fprintf(annotate_out,"                ({%d:%s}",
-                        temp[move_num].pathd,
-                        DisplayEvaluationKibitz(annotate_score[move_num],wtm)); 
+					 if (latex_mode == 1)
+						 fprintf(annotate_out,"   \\begin{variation}\\{%d:%s\\}",
+									temp[move_num].pathd,
+									DisplayEvaluationKibitz(annotate_score[move_num],wtm)); 
+					 else 
+						 fprintf(annotate_out,"                ({%d:%s}",
+									temp[move_num].pathd,
+									DisplayEvaluationKibitz(annotate_score[move_num],wtm)); 
                 path_len=temp[move_num].pathl;
                 fprintf(annotate_out," %s", FormatPV(tree,wtm, temp[move_num]));
-                fprintf(annotate_out," %s)%s\n", 
-                        AnnotateValueToNAG(annotate_score[move_num],wtm,html_mode), html_br);
+
+					 if (latex_mode == 1)
+						 fprintf(annotate_out," %s\n   \\end{variation}\n", 
+									AnnotateValueToNAG(annotate_score[move_num],wtm,html_mode,latex_mode));
+					 else
+						 fprintf(annotate_out," %s)%s\n", 
+									AnnotateValueToNAG(annotate_score[move_num],wtm,html_mode,latex_mode), html_br);
               }
             }
-            if (strlen(html_br)) fprintf(annotate_out,"<br>\n");
+            if (html_mode == 1) fprintf(annotate_out,"<br>\n");
+				/* LaTeX 
+            if (latex_mode == 1) fprintf(annotate_out,"\\\\\n"); */
             if (line2 < 0) line2--;
           }
         }
@@ -396,13 +450,13 @@
               UnmakeMove(tree,i,tree->pv[0].path[i],twtm);
             }
             fprintf(annotate_out," %s)%s\n",
-                    AnnotateValueToNAG(annotate_score[0],wtm,html_mode), html_br);
+                    AnnotateValueToNAG(annotate_score[0],wtm,html_mode,latex_mode), html_br);
           }
         }
         read_status=ReadPGN(annotate_in,1);
         if (read_status != 2) break;
       }
-      if (analysis_printed) fprintf(annotate_out,"%s\n",html_br);
+      if ((analysis_printed) && (latex_mode == 0)) fprintf(annotate_out,"%s\n",html_br);
       MakeMoveRoot(tree,move,wtm);
       wtm=Flip(wtm);
       if (wtm) move_number++;
@@ -410,15 +464,36 @@
       if (line2 < -1) break;
     } while (1);
     fprintf(annotate_out,"\n       %s %s\n", pgn_result, html_br);     
-    fprintf(annotate_out,"%s\n",html_br);
-    if (read_status == -1) break;
-    do
-      read_status=ReadPGN(annotate_in,0);
-    while(read_status==0);
-    if (read_status == -1) break;
+	 if (latex_mode == 1)
+	 {
+  }
+  if (html_mode == 1 )
+  {
+	  fprintf(annotate_out,"%s\n",html_br);
+	  AnnotateFooterHTML(annotate_out);
   }
-  fprintf(annotate_out,"%s\n",html_br);
-  if (strlen(html_br)) AnnotateFooterHTML(annotate_out);
+  if (latex_mode == 1)
+	{
+		AnnotatePositionTeX(tree,wtm,annotate_out);
+		fprintf(annotate_out,"\\end{mainline}\n");
+	 if (strlen(colors) != 0) {
+		fprintf(annotate_out, "\\begin{flushright}{\\small ");
+		if (!strcmp(colors,"bw") || !strcmp(colors,"wb"))
+		  fprintf(annotate_out,"annotating both black and white moves.%s\n",html_br);
+		else if (strchr(colors,'b'))
+		  fprintf(annotate_out,"annotating only black moves.%s\n",html_br);
+		else if (strchr(colors,'w'))
+			  fprintf(annotate_out,"annotating only white moves.%s\n",html_br);
+		 }
+		 else fprintf(annotate_out,"annotating for player %s%s\n",pname,html_br);
+		 fprintf(annotate_out,"using a scoring margin of %s pawns.%s\n",
+					DisplayEvaluationKibitz(annotate_margin,wtm),html_br);
+		 fprintf(annotate_out,"search time limit is %s%s\n",
+					DisplayTimeKibitz(annotate_search_time_limit),html_br);
+		 fprintf(annotate_out, " } \\end{flushright}");
+		 AnnotateFooterTeX(annotate_out);
+	 }
+	}
   if (annotate_out) fclose(annotate_out);
   if (annotate_in) fclose(annotate_in);
   search_time_limit=0;
@@ -546,7 +621,134 @@
   fprintf(annotate_out,"<BR>\n");
 }
 
-char *AnnotateValueToNAG(int value, int wtm, int html_mode) {
+
+
+
+/*
+********************************************************************************
+ * Author         : Alexander Wagner
+ *                                      University of Michigan                 *
+ * Date           : 03.01.04                                                   *
+ * Report bugs to : 
+ *                                                                             *
+ * Last Modified  : 03.01.04 
+********************************************************************************
+ *                                                                             *
+ * Based upon the HTML-Code above                                              *
+ *                                                                             *
+ * These functions provide LaTeX output capability to Crafty.                  *
+ *                                                                             *
+********************************************************************************
+*/
+void AnnotateHeaderTeX(char *title_text, FILE *annotate_out) {
+	fprintf(annotate_out, "\\documentclass[12pt,twocolumn]{article}\n");
+	fprintf(annotate_out, "%% This is a LaTeX file generated by Crafty \n");
+	fprintf(annotate_out, "%% You must have the \"chess12\" package installed to typeset this file.\n");
+
+	fprintf(annotate_out, "\n");
+	fprintf(annotate_out, "\\usepackage{times}\n");
+	fprintf(annotate_out, "\\usepackage{a4wide}\n");
+	fprintf(annotate_out, "\\usepackage{chess}\n");
+	fprintf(annotate_out, "\\usepackage{bdfchess}\n");
+	fprintf(annotate_out, "\\usepackage[T1]{fontenc}\n");
+	fprintf(annotate_out, "\n");
+	fprintf(annotate_out, "\\setlength{\\columnsep}{7mm}\n");
+	fprintf(annotate_out, "\\setlength{\\parindent}{0pt}\n");
+	fprintf(annotate_out, "\n");
+	fprintf(annotate_out, "%% Macros for variations and diagrams:\n");
+
+	fprintf(annotate_out, "\\newenvironment{mainline}[2]{\\bf\\newcommand{\\result}{#1}%%\n");
+   fprintf(annotate_out, "\\newcommand{\\commentator}{#2}\\begin{chess}}%%\n");
+   fprintf(annotate_out, "{\\end{chess}\\finito{\\result}{\\commentator}}\n");
+
+   fprintf(annotate_out, "\\newenvironment{variation}{[\\begingroup\\rm\\ignorespaces}%%\n");
+   fprintf(annotate_out, "{\\endgroup]\\ignorespaces\\newline}\n");
+	fprintf(annotate_out, "\\newcommand{\\finito}[2]{{\\bf\\hfill#1\\hfill[#2]\\par}}\n");
+	fprintf(annotate_out, "\\setlength{\\parindent}{0pt}\n");
+			
+	fprintf(annotate_out, "\\newenvironment{diagram}{\\begin{nochess}}{$$\\showboard$$\\end{nochess}}\n");
+	fprintf(annotate_out, "\n\n\\begin{document}\n\n");
+
+}
+
+void AnnotateFooterTeX(FILE *annotate_out) {
+  fprintf(annotate_out,"\n\n\\end{document}\n");
+}
+
+void AnnotatePositionTeX(TREE *tree, int wtm, FILE *annotate_out) {
+  char filename[32], html_piece;
+  char xlate[15]={'q','r','b',0,'k','n','p',0,'P','N','K',0,'B','R','Q'};
+  int rank, file;
+  
+/*  Display the board in LaTeX using picture notation, similar to html */
+  fprintf(annotate_out,"\\begin{diagram}\n\\board\n");
+
+  for (rank=RANK8;rank>=RANK1; rank--) {
+    fprintf(annotate_out,"   {");
+    for (file=FILEA; file<=FILEH; file++) {
+      if ((rank+file) % 2) (void)strcpy(filename," ");
+      else (void)strcpy(filename,"*");
+      html_piece=xlate[PcOnSq((rank<<3)+file)+7];
+      switch(html_piece) {
+      case 'p':
+        strcpy(filename,"p");
+        break;
+      case 'r':
+        strcpy(filename,"r");
+        break;
+      case 'n':
+        strcpy(filename,"n");
+        break;
+      case 'b':
+        strcpy(filename,"b");
+        break;
+      case 'q':
+        strcpy(filename,"q");
+        break;
+      case 'k':
+        strcpy(filename,"k");
+        break;
+      case 'P':
+        strcpy(filename,"P");
+        break;
+      case 'R':
+        strcpy(filename,"R");
+        break;
+      case 'N':
+        strcpy(filename,"N");
+        break;
+      case 'B':
+        strcpy(filename,"B");
+        break;
+      case 'Q':
+        strcpy(filename,"Q");
+        break;
+      case 'K':
+        strcpy(filename,"K");
+        break;
+      default:
+        break;
+      }
+      fprintf(annotate_out,"%s",filename);
+    }
+    fprintf(annotate_out,"}\n");
+  }
+  fprintf(annotate_out,"\\end{diagram}\n");
+  fprintf(annotate_out,"\\begin{center} \\begin{nochess}\n  {\\small ");
+  if (wtm)
+    fprintf(annotate_out,"White to move.\n");
+  else
+    fprintf(annotate_out,"Black to move.\n");
+
+  fprintf(annotate_out,"}\n \\end{nochess}\\end{center} \n\n");
+
+
+  fprintf(annotate_out,"\n");
+}
+
+/********************************************************************************/
+
+char *AnnotateValueToNAG(int value, int wtm, int html_mode, int latex_mode) {
   static char buf[5];
 
   if(!wtm) value = -value;
@@ -558,5 +760,17 @@
   else if(value < -MIN_MODERATE_ADV) strcpy(buf, html_mode ? "-/+" : "$17");
   else if(value < -MIN_SLIGHT_ADV) strcpy(buf, html_mode ? "=+" : "$15");
   else strcpy(buf, html_mode ? "=" : "$10");
+
+  /* LaTeX */
+  if (latex_mode == 1)
+  {
+	  if(value > MIN_DECISIVE_ADV) strcpy(buf, "\\wdecisive");
+	  else if(value > MIN_MODERATE_ADV) strcpy(buf, "\\wupperhand");
+	  else if(value > MIN_SLIGHT_ADV) strcpy(buf, "\\wbetter");
+	  else if(value < -MIN_DECISIVE_ADV) strcpy(buf, "\\bdecisive");
+	  else if(value < -MIN_MODERATE_ADV) strcpy(buf, "\\bupperhand");
+	  else if(value < -MIN_SLIGHT_ADV) strcpy(buf, "\\bbetter");
+	  else strcpy(buf, "\\equal");
+	}
   return buf;
 }
diff -uNr crafty-19.8-vanilla/chess.h crafty-19.8/chess.h
--- crafty-19.8-vanilla/chess.h	2003-12-27 05:06:31.000000000 +0100
+++ crafty-19.8/chess.h	2004-01-05 11:13:26.000000000 +0100
@@ -538,7 +538,15 @@
 void           AnnotateHeaderHTML(char*, FILE*);
 void           AnnotateFooterHTML(FILE*);
 void           AnnotatePositionHTML(TREE*, int, FILE*);
-char           *AnnotateValueToNAG(int, int, int);
+
+/* LaTeX */
+char           *AnnotateValueToNAG(int, int, int, int);
+
+/* LaTeX */
+void           AnnotateHeaderTeX(char*, FILE*);
+void           AnnotateFooterTeX(FILE*);
+void           AnnotatePositionTeX(TREE*, int, FILE*);
+
 int            Attacked(TREE*RESTRICT, int, int);
 BITBOARD       AttacksTo(TREE*RESTRICT, int);
 void           Bench(void);
diff -uNr crafty-19.8-vanilla/craftyspeak crafty-19.8/craftyspeak
--- crafty-19.8-vanilla/craftyspeak	1970-01-01 01:00:00.000000000 +0100
+++ crafty-19.8/craftyspeak	2004-01-05 11:59:59.000000000 +0100
@@ -0,0 +1,68 @@
+#!/usr/local/bin/perl -w
+#
+# Announce a move from Crafty using some soundfiles
+#
+
+# The program used for Sound Output
+my $playprg   = "/usr/bin/esdplay";
+
+# Where the sound files are located
+my $soundpath = "/opt/chess/share/sound";
+# Which language to use (each supported language is in a separate
+# subdir of $soundpath)
+my $language  = "english";
+
+# Delay between the announcements (only full seconds, 1 is ok)
+my $delay     = 1;
+
+# The move sent by crafty
+my $move      = $ARGV[0];
+
+# Set soundpath to the correct language
+$soundpath = $soundpath . "/" . $language;
+
+# First check some specials
+if (  ($move =~ m/O-O/) 
+   || ($move eq "Stalemate")
+   || ($move eq "Drawaccept")
+   || ($move eq "Drawoffer")
+	|| ($move eq "Resign")
+	|| ($move eq "Checkmate")
+	)
+{
+	system("$playprg $soundpath/$move.wav");
+}
+else
+{
+	# Handle all normal moves. All that needs to be done is announced
+	# each character sent by crafty alone. Set some pause beteween each
+	# char for clearer understanding.
+	#
+	# NOTE 1: Crafty uses short notation, so short notation is
+	# announced. For long notation announcements the crafty engine has
+	# to be hacked and pgn output as well as logging would get broken.
+	#
+	# NOTE 2: There has to exist a sound file named for each row,
+	# column and piece. That is there has to be sound files like a.wav,
+	# 1.wav, R.wav and so on. One can easily rename the files
+	# distributed for free eg. at the "Arena" Website
+	# (http://www.playwitharena.com). Soundfiles from Fritz are not
+	# suitable, at the moment, but the script can easily be rewritten
+	# to handle them as well.
+
+	for (my $i=0; $i<length($move); $i++)
+	{
+		my $char = substr $move, $i, 1;
+		if ($char =~ m/[^=+]/)
+		{
+			if ($char =~ m/#/)
+			{
+				system("$playprg $soundpath/Checkmate.wav");
+			}
+			else {
+				system("$playprg $soundpath/$char".".wav");
+				sleep($delay);
+			}
+		}
+	}
+}
diff -uNr crafty-19.8-vanilla/main.c crafty-19.8/main.c
--- crafty-19.8-vanilla/main.c	2003-12-27 05:06:31.000000000 +0100
+++ crafty-19.8/main.c	2004-01-05 11:52:51.000000000 +0100
@@ -2981,6 +2981,9 @@
   int move, presult, readstat;
   int value=0, i, cont=0, result;
   TREE *tree;
+  char ANNOUNCE[256];
+  char MOVELONG[128];
+  char *MOVE;
 #  if defined(NT_i386)
   extern void _cdecl SignalInterrupt(int);
 #  else
@@ -3295,7 +3298,17 @@
       if (value<=drawsc && (tc_increment!=0 ||
           tc_time_remaining_opponent>=1000)) {
         if (xboard) Print(4095,"tellics draw\n");
-        else Print(128,"Draw accepted.\n");
+        else
+		  {
+			 Print(128,"Draw accepted.\n");
+		    if (audible_alarm)
+			 {
+				 printf("%c",audible_alarm);
+				 strcpy(ANNOUNCE, "./craftyspeak Drawaccept");
+				 system(ANNOUNCE);
+				
+			 }
+		  }
         Print(4095,"1/2-1/2 {Draw agreed}\n");
         strcpy(pgn_result,"1/2-1/2");
       }
@@ -3330,12 +3343,24 @@
           Print(4095,"1-0 {White mates}\n");
           strcpy(pgn_result,"1-0");
         }
+		  if (audible_alarm)
+		  {
+		 	 strcpy(ANNOUNCE, "./craftyspeak Checkmate");
+		 	 system(ANNOUNCE);
+		 	
+		  }
       }
       else {
         over=1;
         if (!xboard) {
           printf("%s",Reverse());
           Print(128,"stalemate\n");
+          if (audible_alarm)
+			 {
+				 strcpy(ANNOUNCE, "./craftyspeak Stalemate");
+				 system(ANNOUNCE);
+				
+			 }
           printf("%s",Normal());
         }
         else Print(4095,"1/2-1/2 {stalemate}\n");
@@ -3395,7 +3420,16 @@
         if (!xboard && !ics) {
           Print(128,"\n");
           printf("%s",Reverse());
-          if (audible_alarm) printf("%c",audible_alarm);
+          if (audible_alarm)
+			 {
+				 printf("%c",audible_alarm);
+				 MOVE = OutputMove(tree,last_pv.path[1],0,wtm);
+				 strcpy(ANNOUNCE, "./craftyspeak ");
+				 strcpy(MOVELONG, MOVE);
+
+				 strcat(ANNOUNCE, MOVELONG);
+				 system(ANNOUNCE);
+			 }
           Print(128,"White(%d): %s ",move_number,
                 OutputMove(tree,last_pv.path[1],0,wtm));
           printf("%s",Normal());
@@ -3412,7 +3446,16 @@
         if (!xboard && !ics) {
           Print(128,"\n");
           printf("%s",Reverse());
-          if (audible_alarm) printf("%c",audible_alarm);
+          if (audible_alarm) 
+			 {
+				 printf("%c",audible_alarm);
+				 MOVE = OutputMove(tree,last_pv.path[1],0,wtm);
+				 strcpy(ANNOUNCE, "./craftyspeak ");
+				 strcpy(MOVELONG, MOVE);
+
+				 strcat(ANNOUNCE, MOVELONG);
+				 system(ANNOUNCE);
+			 }
           Print(128,"Black(%d): %s ",move_number,
                 OutputMove(tree,last_pv.path[1],0,wtm));
           printf("%s",Normal());
diff -uNr crafty-19.8-vanilla/option.c crafty-19.8/option.c
--- crafty-19.8-vanilla/option.c	2003-12-27 05:06:31.000000000 +0100
+++ crafty-19.8/option.c	2004-01-05 11:16:04.000000000 +0100
@@ -182,6 +182,12 @@
     if (thinking || pondering) return(2);
     Annotate();
   }
+  /* LaTeX */
+  else if (OptionMatch("annotatet",*args)) {
+    if (thinking || pondering) return(2);
+    Annotate();
+  }
+
 /*
  ----------------------------------------------------------
 |                                                          |
diff -uNr crafty-19.8-vanilla/resign.c crafty-19.8/resign.c
--- crafty-19.8-vanilla/resign.c	2003-12-27 05:06:31.000000000 +0100
+++ crafty-19.8/resign.c	2004-01-05 11:17:17.000000000 +0100
@@ -23,6 +23,7 @@
 */
 void ResignOrDraw(TREE *tree, int value) {
   int result=0;
+  char ANNOUNCE[256];
 /*
  ----------------------------------------------------------
 |                                                          |
@@ -95,6 +96,12 @@
     int val=(crafty_is_white)?-300:300;
     LearnBook(tree,crafty_is_white,val,0,1,2);
     if (xboard) Print(4095,"tellics resign\n");
+	 if (audible_alarm)
+	 {
+		 printf("%c",audible_alarm);
+		 strcpy(ANNOUNCE, "./craftyspeak Resign");
+		 system(ANNOUNCE);
+	 }
     if (crafty_is_white) {
       Print(4095,"0-1 {White resigns}\n");
       strcpy(pgn_result,"0-1");
@@ -105,7 +112,16 @@
     }
   }
   if (offer_draws && result==2) {
-    if (!ics && !xboard) Print(128,"\nI offer a draw.\n\n");
+    if (!ics && !xboard)
+	 {
+		Print(128,"\nI offer a draw.\n\n");
+		 if (audible_alarm)
+		 {
+			 printf("%c",audible_alarm);
+			 strcpy(ANNOUNCE, "./craftyspeak Drawoffer");
+			 system(ANNOUNCE);
+		 }
+	 }
     else if (xboard) Print(4095,"offer draw\n");
     else Print(4095,"\n*draw\n");
   }
