Mercurial > hg > xemacs-beta
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)