diff src/nas.c @ 1097:26274e0d7794

[xemacs-hg @ 2002-11-11 16:03:12 by stephent] crash message <87of8wyy85.fsf@tleepslib.sk.tsukuba.ac.jp> nas 1.6 <87isz4yy0o.fsf@tleepslib.sk.tsukuba.ac.jp> warning fixes <87el9syvg4.fsf@tleepslib.sk.tsukuba.ac.jp>
author stephent
date Mon, 11 Nov 2002 16:03:57 +0000
parents 6728e641994e
children 01c57eb70ae9
line wrap: on
line diff
--- a/src/nas.c	Mon Nov 11 15:56:21 2002 +0000
+++ b/src/nas.c	Mon Nov 11 16:03:57 2002 +0000
@@ -52,6 +52,12 @@
  *      4/11/94, rjc    Added wait_for_sounds to be called when user wants to
  *			be sure all play has finished.
  *      1998-10-01 rlt  Added support for WAVE files.
+ *      2002-10-16      Jon Trulson modifed this to work with NAS releases
+ *                      1.5f and higher.  We were using the private variable
+ *                      SoundFileInfo that doesn't exist anymore.  But preserve
+ *                      backward compatibility.  This will not work for some
+ *                      versions of NAS around 1.5b to 1.5f or so.  Known to
+ *                      work on 1.2p5 and 1.6.
  */
 
 #include <config.h>
@@ -960,13 +966,28 @@
 
 {
   Sound s;
+#if (AudioLibraryVersionMajor >= 2 ) && (AudioLibraryVersionMinor >= 3)
+  SoundFileInfoProc toProc;
+#endif
 
   if (!(s = (Sound) malloc (sizeof (SoundRec))))
     return NULL;
 
   if ((s->formatInfo = SndOpenDataForReading ((Char_Binary *) data, length)) != NULL)
     {
+#if (AudioLibraryVersionMajor >= 2 ) && (AudioLibraryVersionMinor >= 3)
+      if ((toProc = SoundFileGetProc(SoundFileFormatSnd, 
+				     SoundFileInfoProcTo)) == NULL)
+	{
+	  SndCloseFile ((SndInfo *) (s->formatInfo));
+	  free (s);
+
+	  return NULL;
+	}
+      if (!((*toProc)(s)))
+#else
       if (!((int(*)(Sound))(SoundFileInfo[SoundFileFormatSnd].toSound)) (s))
+#endif
 	{
 	  SndCloseFile ((SndInfo *) (s->formatInfo));
 	  free (s);
@@ -975,7 +996,19 @@
     }
   else if ((s->formatInfo = WaveOpenDataForReading ((Char_Binary *) data, length)) != NULL)
     {
+#if (AudioLibraryVersionMajor >= 2 ) && (AudioLibraryVersionMinor >= 3)
+      if ((toProc = SoundFileGetProc(SoundFileFormatWave, 
+				     SoundFileInfoProcTo)) == NULL)
+	{
+	  WaveCloseFile ((WaveInfo *) (s->formatInfo));
+	  free (s);
+
+	  return NULL;
+	}
+      if (!((*toProc)(s)))
+#else
       if (!((int(*)(Sound))(SoundFileInfo[SoundFileFormatWave].toSound)) (s))
+#endif
 	{
 	  WaveCloseFile ((WaveInfo *) (s->formatInfo));
 	  free (s);