Mercurial > hg > xemacs-beta
diff src/sunplay.c @ 442:abe6d1db359e r21-2-36
Import from CVS: tag r21-2-36
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:35:02 +0200 |
parents | 3ecd8885ac67 |
children | 183866b06e0b |
line wrap: on
line diff
--- a/src/sunplay.c Mon Aug 13 11:33:40 2007 +0200 +++ b/src/sunplay.c Mon Aug 13 11:35:02 2007 +0200 @@ -33,20 +33,15 @@ #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)) @@ -63,13 +58,11 @@ #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) @@ -104,11 +97,12 @@ audio_flush_play (audio_fd); - if (0 != audio_cmp_hdr (&dev_hdr, &file_hdr)) + if (!initialized_device_p || (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]; @@ -233,15 +227,16 @@ } -void +int 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; + if (length == 0) return 0; /* this is just to get a better error message */ if (strncmp (".snd\0", (char *) data, 4)) @@ -257,10 +252,7 @@ audio_fd = audio_open (); if (audio_fd < 0) - { - perror ("open /dev/audio"); - return; - } + return 0; /* where to find the proto for signal()... */ sighup_handler = (SIGTYPE (*) (int)) signal (SIGHUP, sighandler); @@ -298,6 +290,8 @@ goto END_OF_PLAY; } + result = 1; + END_OF_PLAY: if (audio_fd > 0) @@ -308,11 +302,13 @@ 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 void +static SIGTYPE sighandler (int sig) { if (audio_fd > 0)