diff src/sunplay.c @ 412:697ef44129c6 r21-2-14

Import from CVS: tag r21-2-14
author cvs
date Mon, 13 Aug 2007 11:20:41 +0200
parents b8cc9ab3f761
children
line wrap: on
line diff
--- a/src/sunplay.c	Mon Aug 13 11:19:22 2007 +0200
+++ b/src/sunplay.c	Mon Aug 13 11:20:41 2007 +0200
@@ -33,15 +33,20 @@
 #include <sys/fcntl.h>
 #include <sys/file.h>
 
+/* libaudio.h includes a header which defines CONST.  We temporarily
+   undefine it in order to eliminate a compiler warning.  Yes, this is
+   a gross hack. */
+#undef CONST
 #include <multimedia/libaudio.h>
 #include <multimedia/audio_device.h>
+#undef CONST
+#define CONST const
 
 #ifdef emacs
 # include <config.h>
 # include "lisp.h"
 # include "sysdep.h"
 # include <errno.h>
-# include "nativesound.h"
 #include "syssignal.h"
 # define perror(string) \
     message("audio: %s, %s ", string, strerror (errno))
@@ -58,11 +63,13 @@
 
 #define audio_open()	open ("/dev/audio", (O_WRONLY | O_NONBLOCK), 0)
 
-static int initialized_device_p;
 static int reset_volume_p, reset_device_p;
 static double old_volume;
 static Audio_hdr dev_hdr;
 
+void play_sound_file (char *name, int volume);
+void play_sound_data (unsigned char *data, int length, int volume);
+
 static int
 init_device (int volume, unsigned char *data, int fd,
 	     unsigned int *header_length)
@@ -97,12 +104,11 @@
 
   audio_flush_play (audio_fd);
 
-  if (!initialized_device_p || (0 != audio_cmp_hdr (&dev_hdr, &file_hdr)))
+  if (0 != audio_cmp_hdr (&dev_hdr, &file_hdr))
     {
       Audio_hdr new_hdr;
       new_hdr = file_hdr;
       reset_device_p = 1;
-      initialized_device_p = 1;
       if (AUDIO_SUCCESS != audio_set_play_config (audio_fd, &new_hdr))
 	{
 	  char buf1 [100], buf2 [100], buf3 [250];
@@ -227,16 +233,15 @@
 }
 
 
-int
+void
 play_sound_data (unsigned char *data, int length, int volume)
 {
   int wrtn, start = 0;
   unsigned int ilen;
-  int result = 0;
 
   audio_fd = -1;
 
-  if (length == 0) return 0;
+  if (length == 0) return;
 
   /* this is just to get a better error message */
   if (strncmp (".snd\0", (char *) data, 4))
@@ -252,7 +257,10 @@
 
   audio_fd = audio_open ();
   if (audio_fd < 0)
-      return 0;
+    {
+      perror ("open /dev/audio");
+      return;
+    }
 
   /* where to find the proto for signal()... */
   sighup_handler = (SIGTYPE (*) (int)) signal (SIGHUP, sighandler);
@@ -290,8 +298,6 @@
       goto END_OF_PLAY;
     }
 
- result = 1;
-  
  END_OF_PLAY:
 
   if (audio_fd > 0)
@@ -302,13 +308,11 @@
 
   signal (SIGHUP, sighup_handler);
   signal (SIGINT, sigint_handler);
-
-  return result;
 }
 
 /* #### sigcontext doesn't exist in Solaris.  This should be updated
    to be correct for Solaris. */
-static SIGTYPE
+static void
 sighandler (int sig)
 {
   if (audio_fd > 0)