This commit was generated by cvs2svn to compensate for changes in r1705,
[chise/xemacs-chise.git.1] / src / nas.c
index 0c7f428..bc473aa 100644 (file)
--- a/src/nas.c
+++ b/src/nas.c
 #ifdef emacs
 #include <config.h>
 #include "lisp.h"
+#include "sysdep.h"
+#include "syssignal.h"
 #endif
 
-#if __STDC__ || defined (STDC_HEADERS)
-#    include <stdlib.h>
-#    include <stdarg.h>
-#    include <string.h>
-#endif
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <stdio.h>
 
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
 
-#include <stdio.h>
-#include "syssignal.h"
+/* NAS <= 1.2p5 defines {BIG,LITTLE}_ENDIAN in <audio/fileutil.h>,
+   conflicting with GNU libc (at least); newer versions avoid this
+   name space pollution.
+
+   DO NOT USE THOSE MACROS in this file.  Use NAS_{BIG,LITTLE}_ENDIAN.
 
+   It would be slightly more reliable to do this via configure, but that
+   seems unnecessarily complex.
+*/
 #undef LITTLE_ENDIAN
 #undef BIG_ENDIAN
+
 #include <audio/audiolib.h>
 #include <audio/soundlib.h>
 #include <audio/snd.h>
 #include <audio/wave.h>
 #include <audio/fileutil.h>
 
+/* NAS <= 1.2p5 <audio/fileutil.h> doesn't define the NAS_ versions */
+#ifndef NAS_LITTLE_ENDIAN
+#define NAS_LITTLE_ENDIAN LITTLE_ENDIAN
+#define NAS_BIG_ENDIAN BIG_ENDIAN
+#endif
+
 #ifdef emacs
 
 #    define XTOOLKIT
 
 #else /* !emacs */
 #    define warn(str) fprintf (stderr, "%s\n", (str))
-#    define CONST const
 #endif /* emacs */
 
 #ifdef XTOOLKIT
@@ -147,10 +160,18 @@ init_play (
 #else
           char *server
 #endif
+          );
+char *
+init_play (
+#ifdef XTOOLKIT
+          Display *display
+#else
+          char *server
+#endif
           )
 {
   char *err_message;
-  SIGTYPE (*old_sigpipe) ();
+  SIGTYPE (*old_sigpipe) (int);
 
 #ifdef XTOOLKIT
   char * server = DisplayString (display);
@@ -224,7 +245,7 @@ init_play (
   return NULL;
 }
 
-void
+static void
 close_down_play (void)
 
 {
@@ -239,7 +260,7 @@ close_down_play (void)
  \********************************************************************/
 
 static void
-doneCB (AuServer       *aud,
+doneCB (AuServer       *auserver,
        AuEventHandlerRec *handler,
        AuEvent        *ev,
        AuPointer       data)
@@ -275,23 +296,23 @@ do_caching_play (Sound s,
 
   if (list == NULL)
     {
-      unsigned char *my_buf;
+      AuPointer my_buf;
 
       if (buf==NULL)
        {
-         if ((my_buf=malloc (SoundNumBytes (s)))==NULL)
+         if ((my_buf= (AuPointer) malloc (SoundNumBytes (s)))==NULL)
            {
              return;
            }
 
-         if (SoundReadFile (my_buf, SoundNumBytes (s), s) != SoundNumBytes (s))
+         if (SoundReadFile ((char *) my_buf, SoundNumBytes (s), s) != SoundNumBytes (s))
            {
              free (my_buf);
              return;
            }
        }
       else
-       my_buf=buf;
+       my_buf = (AuPointer) buf;
 
       id = AuSoundCreateBucketFromData (aud, 
                                        s,
@@ -323,6 +344,7 @@ do_caching_play (Sound s,
 #endif /* CACHE_SOUNDS */
 
 
+void wait_for_sounds (void);
 void 
 wait_for_sounds (void)
 
@@ -336,11 +358,12 @@ wait_for_sounds (void)
     }
 }
 
+int play_sound_file (char *sound_file, int volume);
 int
 play_sound_file (char *sound_file,
                 int volume)
 {
-  SIGTYPE (*old_sigpipe) ();
+  SIGTYPE (*old_sigpipe) (int);
 
 #ifdef ROBUST_PLAY
   old_sigpipe=signal (SIGPIPE, sigpipe_handle);
@@ -428,6 +451,7 @@ play_sound_file (char *sound_file,
   return 1;
 }
 
+int play_sound_data (unsigned char *data, int length, int volume);
 int
 play_sound_data (unsigned char *data,
                 int length, 
@@ -435,7 +459,7 @@ play_sound_data (unsigned char *data,
 {
   Sound s;
   int offset;
-  SIGTYPE (*old_sigpipe) ();
+  SIGTYPE (*old_sigpipe) (int);
 
 #if !defined (XTEVENTS)
   AuEvent         ev;
@@ -614,11 +638,11 @@ CatchErrorAndJump (AuServer *old_aud,
 /* Create a name from the sound. */
 
 static char *
-NameFromData (CONST unsigned char *buf,
+NameFromData (const char *buf,
              int len)
 
 {
-  unsigned char name[9];
+  char name[9];
   int i;
   char *s;
 
@@ -643,11 +667,11 @@ NameFromData (CONST unsigned char *buf,
 
   if (i==8)
     {
-      strcpy (s=malloc (10), name);
+      strcpy (s = (char *) malloc (10), name);
     }
   else 
     {
-      strcpy (s=malloc (15), "short sound");
+      strcpy (s = (char *) malloc (15), "short sound");
     }
 
   return s;
@@ -658,7 +682,7 @@ NameFromData (CONST unsigned char *buf,
  */
 
 static SndInfo *
-SndOpenDataForReading (CONST char *data,
+SndOpenDataForReading (const char *data,
                       int length)
 
 {
@@ -673,7 +697,7 @@ SndOpenDataForReading (CONST char *data,
 
   memcpy (&si->h, data, sizeof (SndHeader));
 
-  if (LITTLE_ENDIAN)
+  if (NAS_LITTLE_ENDIAN)
     {
       char            n;
     
@@ -730,15 +754,15 @@ SndOpenDataForReading (CONST char *data,
 /* These functions here are for faking file I/O from buffer. */
 
 /* The "file" position */
-static int file_posn;
+static size_t file_posn;
 /* The length of the "file" */
-static int file_len;
+static size_t file_len;
 /* The actual "file" data. */
-CONST static char* file_data;
+static const void* file_data;
 
 /* Like fopen, but for a buffer in memory */
 static void
-dopen(CONST char* data, int length)
+dopen (const void* data, size_t length)
 {
    file_data = data;
    file_len = length;
@@ -747,15 +771,13 @@ dopen(CONST char* data, int length)
 
 /* Like fread, but for a buffer in memory */
 static int
-dread(char* buf, int size, int nitems)
+dread (void* buf, size_t size, size_t nitems)
 {
-  int nread;
-
-  nread = size * nitems;
+  size_t nread = size * nitems;
   
   if (file_posn + nread <= file_len)
     {
-      memcpy(buf, file_data + file_posn, size * nitems);
+      memcpy(buf, (char *) file_data + file_posn, size * nitems);
       file_posn += nread;
       return nitems;
     }
@@ -767,19 +789,17 @@ dread(char* buf, int size, int nitems)
 
 /* Like fgetc, but for a buffer in memory */
 static int
-dgetc()
+dgetc (void)
 {
-  int ch;
-  
   if (file_posn < file_len)
-    return file_data[file_posn++];
+    return ((char *)file_data)[file_posn++];
   else
     return -1;
 }
 
 /* Like fseek, but for a buffer in memory */
 static int
-dseek(long offset, int from)
+dseek (long offset, int from)
 {
   if (from == 0)
     file_posn = offset;
@@ -792,8 +812,8 @@ dseek(long offset, int from)
 }
 
 /* Like ftell, but for a buffer in memory */
-static int
-dtell()
+static long
+dtell (void)
 {
   return file_posn;
 }
@@ -801,7 +821,7 @@ dtell()
 /* Data buffer analogs for FileReadS and FileReadL in NAS. */
 
 static unsigned short
-DataReadS(int swapit)
+DataReadS (int swapit)
 {
     unsigned short us;
 
@@ -812,7 +832,7 @@ DataReadS(int swapit)
 }
 
 static AuUint32
-DataReadL(int swapit)
+DataReadL (int swapit)
 {
     AuUint32 ul;
 
@@ -823,13 +843,13 @@ DataReadL(int swapit)
 }
 
 static int
-readChunk(RiffChunk *c)
+readChunk (RiffChunk *c)
 {
     int             status;
     char            n;
 
     if ((status = dread(c, sizeof(RiffChunk), 1)))
-       if (BIG_ENDIAN)
+       if (NAS_BIG_ENDIAN)
            swapl(&c->ckSize, n);
 
     return status;
@@ -839,8 +859,8 @@ readChunk(RiffChunk *c)
    read the wave data from a buffer in memory. */
 
 static WaveInfo *
-WaveOpenDataForReading(CONST char *data,
-                      int length)
+WaveOpenDataForReading (const char *data,
+                       int length)
 {
     RiffChunk       ck;
     RIFF_FOURCC     fourcc;
@@ -915,18 +935,18 @@ WaveOpenDataForReading(CONST char *data,
        {
            AuInt32            dummy;
 
-           wi->format = DataReadS(BIG_ENDIAN);
-           wi->channels = DataReadS(BIG_ENDIAN);
-           wi->sampleRate = DataReadL(BIG_ENDIAN);
+           wi->format = DataReadS(NAS_BIG_ENDIAN);
+           wi->channels = DataReadS(NAS_BIG_ENDIAN);
+           wi->sampleRate = DataReadL(NAS_BIG_ENDIAN);
 
            /* we don't care about the next two fields */
-           dummy = DataReadL(BIG_ENDIAN);
-           dummy = DataReadS(BIG_ENDIAN);
+           dummy = DataReadL(NAS_BIG_ENDIAN);
+           dummy = DataReadS(NAS_BIG_ENDIAN);
 
            if (wi->format != RIFF_WAVE_FORMAT_PCM)
                Err();
 
-           wi->bitsPerSample = DataReadS(BIG_ENDIAN);
+           wi->bitsPerSample = DataReadS(NAS_BIG_ENDIAN);
 
            /* skip any other format specific fields */
            dseek(PAD2(ck.ckSize - 16), 1);
@@ -982,20 +1002,20 @@ SoundOpenDataForReading (unsigned char *data,
   if (!(s = (Sound) malloc (sizeof (SoundRec))))
     return NULL;
 
-  if ((s->formatInfo = SndOpenDataForReading (data, length)) != NULL)
+  if ((s->formatInfo = SndOpenDataForReading ((char *) data, length)) != NULL)
     {
-      if (!(SoundFileInfo[SoundFileFormatSnd].toSound) (s))
+      if (!((int(*)(Sound))(SoundFileInfo[SoundFileFormatSnd].toSound)) (s))
        {
-         SndCloseFile (s->formatInfo);
+         SndCloseFile ((SndInfo *) (s->formatInfo));
          free (s);
          return NULL;
        }
     }
-  else if ((s->formatInfo = WaveOpenDataForReading (data, length)) != NULL)
+  else if ((s->formatInfo = WaveOpenDataForReading ((char *) data, length)) != NULL)
     {
-      if (!(SoundFileInfo[SoundFileFormatWave].toSound) (s))
+      if (!((int(*)(Sound))(SoundFileInfo[SoundFileFormatWave].toSound)) (s))
        {
-         WaveCloseFile (s->formatInfo);
+         WaveCloseFile ((WaveInfo *) (s->formatInfo));
          free (s);
          return NULL;
        }
@@ -1003,4 +1023,3 @@ SoundOpenDataForReading (unsigned char *data,
 
   return s;
 }
-