XEmacs 21.2.33 "Melpomene".
[chise/xemacs-chise.git.1] / src / sound.c
index ccf6b41..9bdedb9 100644 (file)
@@ -43,6 +43,7 @@ Boston, MA 02111-1307, USA.  */
 
 #ifdef HAVE_NATIVE_SOUND
 # include <netdb.h>
+# include "nativesound.h"
 #endif
 
 #ifdef HAVE_ESD_SOUND
@@ -58,11 +59,6 @@ Lisp_Object Vsynchronous_sounds;
 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 @@ Windows the sound file must be in WAV format.
   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 @@ See the variable `sound-alist'.
   /* 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 @@ See the variable `sound-alist'.
 
       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 @@ See the variable `sound-alist'.
                          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 */