1 /*
2 * usounds.c -- sound handling for XBoard (through external player)
3 *
4 * Copyright 1991 by Digital Equipment Corporation, Maynard,
5 * Massachusetts.
6 *
7 * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,
8 * 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Free Software Foundation, Inc.
9 *
10 * The following terms apply to Digital Equipment Corporation's copyright
11 * interest in XBoard:
12 * ------------------------------------------------------------------------
13 * All Rights Reserved
14 *
15 * Permission to use, copy, modify, and distribute this software and its
16 * documentation for any purpose and without fee is hereby granted,
17 * provided that the above copyright notice appear in all copies and that
18 * both that copyright notice and this permission notice appear in
19 * supporting documentation, and that the name of Digital not be
20 * used in advertising or publicity pertaining to distribution of the
21 * software without specific, written prior permission.
22 *
23 * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
24 * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
25 * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
26 * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
27 * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
28 * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
29 * SOFTWARE.
30 * ------------------------------------------------------------------------
31 *
32 * The following terms apply to the enhanced version of XBoard
33 * distributed by the Free Software Foundation:
34 * ------------------------------------------------------------------------
35 *
36 * GNU XBoard is free software: you can redistribute it and/or modify
37 * it under the terms of the GNU General Public License as published by
38 * the Free Software Foundation, either version 3 of the License, or (at
39 * your option) any later version.
40 *
41 * GNU XBoard is distributed in the hope that it will be useful, but
42 * WITHOUT ANY WARRANTY; without even the implied warranty of
43 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
44 * General Public License for more details.
45 *
46 * You should have received a copy of the GNU General Public License
47 * along with this program. If not, see http://www.gnu.org/licenses/. *
48 *
49 *------------------------------------------------------------------------
50 ** See the file ChangeLog for a revision history. */
51
52 #include "config.h"
53
54 #include <stdio.h>
55 #include <ctype.h>
56 #include <sys/types.h>
57 #include <sys/stat.h>
58
59 #if STDC_HEADERS
60 # include <stdlib.h>
61 # include <string.h>
62 #else /* not STDC_HEADERS */
63 extern char *getenv();
64 # if HAVE_STRING_H
65 # include <string.h>
66 # else /* not HAVE_STRING_H */
67 # include <strings.h>
68 # endif /* not HAVE_STRING_H */
69 #endif /* not STDC_HEADERS */
70
71 #if HAVE_UNISTD_H
72 # include <unistd.h>
73 #endif
74
75 #include "common.h"
76 #include "frontend.h"
77
78
79 int
PlaySoundFile(char * name)80 PlaySoundFile (char *name)
81 {
82 if (*name == NULLCHAR) {
83 return 0;
84 } else if (strcmp(name, "$") == 0) {
85 putc(BELLCHAR, stderr);
86 } else {
87 char buf[2048];
88 char *prefix = "", *sep = "";
89 if(appData.soundProgram[0] == NULLCHAR) return 1;
90 if(!strchr(name, '/')) { prefix = appData.soundDirectory; sep = "/"; }
91 snprintf(buf, sizeof(buf), "%s '%s%s%s' &", appData.soundProgram, prefix, sep, name);
92 system(buf);
93 }
94 return 1;
95 }
96
97 void
RingBell()98 RingBell ()
99 {
100 PlaySoundFile(appData.soundMove);
101 }
102
103 void
PlayIcsWinSound()104 PlayIcsWinSound ()
105 {
106 PlaySoundFile(appData.soundIcsWin);
107 }
108
109 void
PlayIcsLossSound()110 PlayIcsLossSound ()
111 {
112 PlaySoundFile(appData.soundIcsLoss);
113 }
114
115 void
PlayIcsDrawSound()116 PlayIcsDrawSound ()
117 {
118 PlaySoundFile(appData.soundIcsDraw);
119 }
120
121 void
PlayIcsUnfinishedSound()122 PlayIcsUnfinishedSound ()
123 {
124 PlaySoundFile(appData.soundIcsUnfinished);
125 }
126
127 void
PlayAlarmSound()128 PlayAlarmSound ()
129 {
130 PlaySoundFile(appData.soundIcsAlarm);
131 }
132
133 void
PlayTellSound()134 PlayTellSound ()
135 {
136 PlaySoundFile(appData.soundTell);
137 }
138
139 int
Roar()140 Roar ()
141 {
142 return PlaySoundFile(appData.soundRoar);
143 }
144
145 void
PlaySoundForColor(ColorClass cc)146 PlaySoundForColor (ColorClass cc)
147 {
148 switch (cc) {
149 case ColorShout:
150 PlaySoundFile(appData.soundShout);
151 break;
152 case ColorSShout:
153 PlaySoundFile(appData.soundSShout);
154 break;
155 case ColorChannel1:
156 PlaySoundFile(appData.soundChannel1);
157 break;
158 case ColorChannel:
159 PlaySoundFile(appData.soundChannel);
160 break;
161 case ColorKibitz:
162 PlaySoundFile(appData.soundKibitz);
163 break;
164 case ColorTell:
165 PlaySoundFile(appData.soundTell);
166 break;
167 case ColorChallenge:
168 PlaySoundFile(appData.soundChallenge);
169 break;
170 case ColorRequest:
171 PlaySoundFile(appData.soundRequest);
172 break;
173 case ColorSeek:
174 PlaySoundFile(appData.soundSeek);
175 break;
176 case ColorNormal:
177 case ColorNone:
178 default:
179 break;
180 }
181 }
182