Author: Mike Byrne
Date: 18:28:57 04/24/04
This is the Windows source for "C" for move annoucnement. It's a separate
program that Crafty/windows calls for move annoucnement. I would like to embed
this program into Crafty so a user would not need two separate programs.
Any ideas the best way to do this - I have tried - but not knowing enough about
programming, all my attempls have failed.
////////////////////////////////////////////////////////////////////////////////////////////
// Speak.c
//
// Crafty 19.9 introduced "speaking" of moves by calling
// external program speak with the move as its only argument.
//
// This program parses the move and plays it using English .wav files
// obtained from http://www.playwitharena.com
//
//
// Developed and compiled under MSVC 6 (SP5)
//
// History
// -------
// Jan. 10, 2004 - ver 1.00
// Jan. 13, 2004 - ver 1.01 fix strcat of from / to strings
// was strcat(cWork + 1, ...)
////////////////////////////////////////////////////////////////////////////////////////////
/******************************************************************************************/
#include <string.h>
#include <windows.h>
#include <mmsystem.h>
/******************************************************************************************/
void SpeakMove(char *strFilename)
{
char cWork[255];
strcpy(cWork, ".\\Sounds\\Eng\\");
strcat(cWork, strFilename);
strcat(cWork, ".wav");
PlaySound(cWork, NULL, SND_SYNC);
}
/******************************************************************************************/
int main(int argc, char* argv[])
{
if (argc == 2)
{
int x;
char cMove[255], cWork[255];
strcpy(cMove, argv[1]);
if (
(!strcmp(cMove, "O-O")) ||
(!strcmp(cMove, "O-O-O")) ||
(!strcmp(cMove, "Stalemate")) ||
(!strcmp(cMove, "Drawaccept")) ||
(!strcmp(cMove, "Drawoffer")) ||
(!strcmp(cMove, "Resign")) ||
(!strcmp(cMove, "Checkmate"))
) SpeakMove(cMove);
else
{
for (x = 0; x < (int)strlen(cMove); x++)
{
switch(cMove[x])
{
case 'R' :
SpeakMove("Rook");
break;
case 'N' :
SpeakMove("Knight");
break;
case 'B' :
SpeakMove("Bishop");
break;
case 'Q' :
SpeakMove("Queen");
break;
case 'K' :
SpeakMove("King");
break;
case 'P' :
SpeakMove("Pawn");
break;
case 'x':
SpeakMove("Takes");
break;
case '#':
SpeakMove("Checkmate");
break;
case 'a' :
case 'b' :
case 'c' :
case 'd' :
case 'e' :
case 'f' :
case 'g' :
case 'h' :
cWork[0] = cMove[x];
cWork[1] = '\0';
strcat(cWork, "from");
SpeakMove(cWork);
break;
case '1' :
case '2' :
case '3' :
case '4' :
case '5' :
case '6' :
case '7' :
case '8' :
cWork[0] = cMove[x];
cWork[1] = '\0';
strcat(cWork, "to");
SpeakMove(cWork);
break;
} // switch
} // for
} // else
} // if argc
return 0;
}
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.