XEmacs 21.2.28 "Hermes".
[chise/xemacs-chise.git.1] / src / sound.c
index 0260728..bb214f5 100644 (file)
@@ -45,6 +45,12 @@ Boston, MA 02111-1307, USA.  */
 # include <netdb.h>
 #endif
 
+#ifdef HAVE_ESD_SOUND
+extern int esd_play_sound_file (char *file, int vol);
+extern int esd_play_sound_data (unsigned char *data, size_t length, int vol);
+# define DEVICE_CONNECTED_TO_ESD_P(x) 1 /* FIXME: better check */
+#endif
+
 int bell_volume;
 int bell_inhibit_time;
 Lisp_Object Vsound_alist;
@@ -79,7 +85,8 @@ Windows the sound file must be in WAV format.
 {
   /* This function can call lisp */
   int vol;
-#if defined (HAVE_NATIVE_SOUND) || defined (HAVE_NAS_SOUND)
+#if defined (HAVE_NATIVE_SOUND) || defined (HAVE_NAS_SOUND) \
+       || defined (HAVE_ESD_SOUND)
   struct device *d = decode_device (device);
 #endif
   struct gcpro gcpro1;
@@ -119,19 +126,36 @@ Windows the sound file must be in WAV format.
     {
       char *fileext;
 
-      GET_C_STRING_FILENAME_DATA_ALLOCA (file, fileext);
+      TO_EXTERNAL_FORMAT (LISP_STRING, file,
+                         C_STRING_ALLOCA, fileext,
+                         Qfile_name);
       /* #### NAS code should allow specification of a device. */
       if (nas_play_sound_file (fileext, vol))
        return Qnil;
     }
 #endif /* HAVE_NAS_SOUND */
 
+#ifdef HAVE_ESD_SOUND
+  if (DEVICE_CONNECTED_TO_ESD_P (d))
+    {
+      char *fileext;
+
+      TO_EXTERNAL_FORMAT (LISP_STRING, file,
+                         C_STRING_ALLOCA, fileext,
+                         Qfile_name);
+      if (esd_play_sound_file (fileext, vol))
+       return Qnil;
+    }
+#endif /* HAVE_ESD_SOUND */
+
 #ifdef HAVE_NATIVE_SOUND
   if (NILP (Vnative_sound_only_on_console) || DEVICE_ON_CONSOLE_P (d))
     {
       CONST char *fileext;
 
-      GET_C_STRING_FILENAME_DATA_ALLOCA (file, fileext);
+      TO_EXTERNAL_FORMAT (LISP_STRING, file,
+                         C_STRING_ALLOCA, fileext,
+                         Qfile_name);
       /* The sound code doesn't like getting SIGIO interrupts.
         Unix sucks! */
       stop_interrupts ();
@@ -296,12 +320,27 @@ See the variable `sound-alist'.
       CONST Extbyte *soundext;
       Extcount soundextlen;
 
-      GET_STRING_BINARY_DATA_ALLOCA (sound, soundext, soundextlen);
+      TO_EXTERNAL_FORMAT (LISP_STRING, sound,
+                         ALLOCA, (soundext, soundextlen),
+                         Qbinary);
       if (nas_play_sound_data ((unsigned char*)soundext, soundextlen, vol))
        return Qnil;
     }
 #endif /* HAVE_NAS_SOUND */
 
+#ifdef HAVE_ESD_SOUND
+  if (DEVICE_CONNECTED_TO_ESD_P (d) && STRINGP (sound))
+    {
+      Extbyte *soundext;
+      Extcount soundextlen;
+
+      TO_EXTERNAL_FORMAT (LISP_STRING, sound, ALLOCA, (soundext, soundextlen),
+                         Qbinary);
+      if (esd_play_sound_data (soundext, soundextlen, vol))
+       return Qnil;
+    }
+#endif /* HAVE_ESD_SOUND */
+
 #ifdef HAVE_NATIVE_SOUND
   if ((NILP (Vnative_sound_only_on_console) || DEVICE_ON_CONSOLE_P (d))
       && STRINGP (sound))
@@ -309,7 +348,9 @@ See the variable `sound-alist'.
       CONST Extbyte *soundext;
       Extcount soundextlen;
 
-      GET_STRING_BINARY_DATA_ALLOCA (sound, soundext, soundextlen);
+      TO_EXTERNAL_FORMAT (LISP_STRING, sound,
+                         ALLOCA, (soundext, soundextlen),
+                         Qbinary);
       /* The sound code doesn't like getting SIGIO interrupts. Unix sucks! */
       stop_interrupts ();
       play_sound_data ((unsigned char*)soundext, soundextlen, vol);
@@ -349,8 +390,8 @@ device).
 */
        (arg, sound, device))
 {
-  static time_t last_bell_time = (time_t) 0;
-  static struct device *last_bell_device = (struct device*) 0;
+  static time_t last_bell_time;
+  static struct device *last_bell_device;
   time_t now;
   struct device *d = decode_device (device);     
 
@@ -532,6 +573,9 @@ vars_of_sound (void)
 #ifdef HAVE_NAS_SOUND
   Fprovide (intern ("nas-sound"));
 #endif
+#ifdef HAVE_ESD_SOUND
+  Fprovide (intern ("esd-sound"));
+#endif
 
   DEFVAR_INT ("bell-volume", &bell_volume /*
 *How loud to be, from 0 to 100.