Mercurial > hg > xemacs-beta
diff src/sound.c @ 406:b8cc9ab3f761 r21-2-33
Import from CVS: tag r21-2-33
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:17:09 +0200 |
parents | 2f8bb876ab1d |
children | de805c49cfc1 |
line wrap: on
line diff
--- a/src/sound.c Mon Aug 13 11:16:09 2007 +0200 +++ b/src/sound.c Mon Aug 13 11:17:09 2007 +0200 @@ -43,6 +43,7 @@ #ifdef HAVE_NATIVE_SOUND # include <netdb.h> +# include "nativesound.h" #endif #ifdef HAVE_ESD_SOUND @@ -58,11 +59,6 @@ Lisp_Object Vnative_sound_only_on_console; Lisp_Object Q_volume, Q_pitch, Q_duration, Q_sound; -/* These are defined in the appropriate file (sunplay.c, sgiplay.c, - or hpplay.c). */ - -extern void play_sound_file (char *name, int volume); -extern void play_sound_data (unsigned char *data, int length, int volume); #ifdef HAVE_NAS_SOUND extern int nas_play_sound_file (char *name, int volume); @@ -139,11 +135,17 @@ if (DEVICE_CONNECTED_TO_ESD_P (d)) { char *fileext; + int result; TO_EXTERNAL_FORMAT (LISP_STRING, file, C_STRING_ALLOCA, fileext, Qfile_name); - if (esd_play_sound_file (fileext, vol)) + + /* #### ESD uses alarm(). But why should we also stop SIGIO? */ + stop_interrupts (); + result = esd_play_sound_file (fileext, vol); + start_interrupts (); + if (result) return Qnil; } #endif /* HAVE_ESD_SOUND */ @@ -277,7 +279,7 @@ /* variable `sound' is anything that can be a cdr in sound-alist */ Lisp_Object new_volume, pitch, duration, data; int loop_count = 0; - int vol, pit, dur; + int vol, pit, dur, succes; struct device *d = decode_device (device); /* NOTE! You'd better not signal an error in here. */ @@ -336,8 +338,14 @@ TO_EXTERNAL_FORMAT (LISP_STRING, sound, ALLOCA, (soundext, soundextlen), Qbinary); - if (esd_play_sound_data (soundext, soundextlen, vol)) - return Qnil; + + /* #### ESD uses alarm(). But why should we also stop SIGIO? */ + stop_interrupts (); + succes = esd_play_sound_data (soundext, soundextlen, vol); + start_interrupts (); + QUIT; + if(succes) + return Qnil; } #endif /* HAVE_ESD_SOUND */ @@ -353,10 +361,11 @@ Qbinary); /* The sound code doesn't like getting SIGIO interrupts. Unix sucks! */ stop_interrupts (); - play_sound_data ((unsigned char*)soundext, soundextlen, vol); + succes = play_sound_data ((unsigned char*)soundext, soundextlen, vol); start_interrupts (); QUIT; - return Qnil; + if (succes) + return Qnil; } #endif /* HAVE_NATIVE_SOUND */