X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/bfab7c6ec74dc55d640ef36f8cb1790a1420f991..f3b3be74dee8407688fafa69109d78c2cd59f8f1:/src/sound.c diff --git a/src/sound.c b/src/sound.c index 8aaef9d746..2c723a4f99 100644 --- a/src/sound.c +++ b/src/sound.c @@ -1,13 +1,13 @@ /* sound.c -- sound support. Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004, - 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GNU Emacs. -GNU Emacs is free software; you can redistribute it and/or modify +GNU Emacs is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -15,9 +15,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with GNU Emacs; see the file COPYING. If not, write to -the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -Boston, MA 02110-1301, USA. */ +along with GNU Emacs. If not, see . */ /* Written by Gerd Moellmann . Tested with Luigi's driver on FreeBSD 2.2.7 with a SoundBlaster 16. */ @@ -1217,7 +1215,7 @@ alsa_write (sd, buffer, nbytes) { snd_pcm_uframes_t frames = (nbytes - nwritten)/fact; if (frames == 0) break; - + err = snd_pcm_writei (p->handle, buffer + nwritten, frames); if (err < 0) { @@ -1303,6 +1301,16 @@ alsa_init (sd) /* BEGIN: Windows specific functions */ +#define SOUND_WARNING(fun, error, text) \ + { \ + char buf[1024]; \ + char err_string[MAXERRORLENGTH]; \ + fun (error, err_string, sizeof (err_string)); \ + _snprintf (buf, sizeof (buf), "%s\nError: %s", \ + text, err_string); \ + sound_warning (buf); \ + } + static int do_play_sound (psz_file, ui_volume) const char *psz_file; @@ -1316,16 +1324,17 @@ do_play_sound (psz_file, ui_volume) unsigned long ui_volume_org = 0; BOOL b_reset_volume = FALSE; - memset (sz_cmd_buf, 0, sizeof(sz_cmd_buf)); - memset (sz_ret_buf, 0, sizeof(sz_ret_buf)); + memset (sz_cmd_buf, 0, sizeof (sz_cmd_buf)); + memset (sz_ret_buf, 0, sizeof (sz_ret_buf)); sprintf (sz_cmd_buf, "open \"%s\" alias GNUEmacs_PlaySound_Device wait", psz_file); - mci_error = mciSendString (sz_cmd_buf, sz_ret_buf, 520, NULL); + mci_error = mciSendString (sz_cmd_buf, sz_ret_buf, sizeof (sz_ret_buf), NULL); if (mci_error != 0) { - sound_warning ("The open mciSendString command failed to open\n" - "the specified sound file"); + SOUND_WARNING (mciGetErrorString, mci_error, + "The open mciSendString command failed to open " + "the specified sound file."); i_result = (int) mci_error; return i_result; } @@ -1336,42 +1345,46 @@ do_play_sound (psz_file, ui_volume) { b_reset_volume = TRUE; mm_result = waveOutSetVolume ((HWAVEOUT) WAVE_MAPPER, ui_volume); - if ( mm_result != MMSYSERR_NOERROR) + if (mm_result != MMSYSERR_NOERROR) { - sound_warning ("waveOutSetVolume failed to set the volume level\n" - "of the WAVE_MAPPER device.\n" - "As a result, the user selected volume level will\n" - "not be used."); + SOUND_WARNING (waveOutGetErrorText, mm_result, + "waveOutSetVolume failed to set the volume level " + "of the WAVE_MAPPER device.\n" + "As a result, the user selected volume level will " + "not be used."); } } else { - sound_warning ("waveOutGetVolume failed to obtain the original\n" + SOUND_WARNING (waveOutGetErrorText, mm_result, + "waveOutGetVolume failed to obtain the original " "volume level of the WAVE_MAPPER device.\n" - "As a result, the user selected volume level will\n" + "As a result, the user selected volume level will " "not be used."); } } - memset (sz_cmd_buf, 0, sizeof(sz_cmd_buf)); - memset (sz_ret_buf, 0, sizeof(sz_ret_buf)); + memset (sz_cmd_buf, 0, sizeof (sz_cmd_buf)); + memset (sz_ret_buf, 0, sizeof (sz_ret_buf)); strcpy (sz_cmd_buf, "play GNUEmacs_PlaySound_Device wait"); - mci_error = mciSendString (sz_cmd_buf, sz_ret_buf, 520, NULL); + mci_error = mciSendString (sz_cmd_buf, sz_ret_buf, sizeof (sz_ret_buf), NULL); if (mci_error != 0) { - sound_warning ("The play mciSendString command failed to play the\n" - "opened sound file."); + SOUND_WARNING (mciGetErrorString, mci_error, + "The play mciSendString command failed to play the " + "opened sound file."); i_result = (int) mci_error; } - memset (sz_cmd_buf, 0, sizeof(sz_cmd_buf)); - memset (sz_ret_buf, 0, sizeof(sz_ret_buf)); + memset (sz_cmd_buf, 0, sizeof (sz_cmd_buf)); + memset (sz_ret_buf, 0, sizeof (sz_ret_buf)); strcpy (sz_cmd_buf, "close GNUEmacs_PlaySound_Device wait"); - mci_error = mciSendString (sz_cmd_buf, sz_ret_buf, 520, NULL); + mci_error = mciSendString (sz_cmd_buf, sz_ret_buf, sizeof (sz_ret_buf), NULL); if (b_reset_volume == TRUE) { - mm_result=waveOutSetVolume ((HWAVEOUT) WAVE_MAPPER, ui_volume_org); + mm_result = waveOutSetVolume ((HWAVEOUT) WAVE_MAPPER, ui_volume_org); if (mm_result != MMSYSERR_NOERROR) { - sound_warning ("waveOutSetVolume failed to reset the original volume\n" + SOUND_WARNING (waveOutGetErrorText, mm_result, + "waveOutSetVolume failed to reset the original volume " "level of the WAVE_MAPPER device."); } }