rnd-19990203-1
authorHolger Schemel <info@artsoft.org>
Wed, 3 Feb 1999 00:26:14 +0000 (01:26 +0100)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:33:26 +0000 (10:33 +0200)
src/Makefile
src/game.c
src/screens.c
src/sound.c
src/sound.h

index 3735291679c09be9eb9a0e84331b1bf06ec0b814..4c0a427baea5f9e3ab285213d2227e6449084447 100644 (file)
@@ -69,9 +69,9 @@ CONFIG = $(CONFIG_GAME_DIR) $(SOUNDS) $(JOYSTICK)     \
         $(CONFIG_SCORE_ENTRIES) $(XPM_INCLUDE_FILE)
 
 # DEBUG = -DDEBUG -g -Wall -ansi -pedantic
-DEBUG = -DDEBUG -g -Wall
+DEBUG = -DDEBUG -g -Wall
 # DEBUG = -O3 -Wall -ansi -pedantic
-DEBUG = -O3 -Wall
+DEBUG = -O3 -Wall
 # DEBUG = -O3
 
 # SYSTEM = -Aa -D_HPUX_SOURCE -Dhpux   # for HP-UX (obsolete)
index 52255c85d375483a062323e8a14af45c270c2161..f51b2dc48ab3d13ed1bddd881935af1974ba8e7b 100644 (file)
@@ -617,6 +617,7 @@ void InitGame()
   game_gadget[SOUND_CTRL_ID_LOOPS]->checked = setup.sound_loops;
   game_gadget[SOUND_CTRL_ID_SIMPLE]->checked = setup.sound_simple;
   MapGameButtons();
+  MapTapeButtons();
 #endif
 
   XCopyArea(display, drawto, pix[PIX_DB_DOOR], gc,
index 0e3954499aaf684f334f356771501335fb2df96d..a27dcba819af1910a6d8a9afc81a167fb7d6059b 100644 (file)
@@ -58,6 +58,8 @@ void DrawMainMenu()
   int i;
   char *name_text = (!options.network && setup.team_mode ? "Team:" : "Name:");
 
+  UnmapAllGadgets();
+  FadeSounds();
   XAutoRepeatOn(display);
 
   /* needed if last screen was the playing screen, invoked from level editor */
@@ -68,11 +70,9 @@ void DrawMainMenu()
     return;
   }
 
-  /* unmap gadgets from last screen, map gadgets for main menu screen */
-  UnmapAllGadgets();
+  /* map gadgets for main menu screen */
   MapTapeButtons();
 
-  FadeSounds();
   GetPlayerConfig();
   LoadLevel(level_nr);
 
index c9e13525dc94a1aa061f86c20a31c1805d387c54..51a75c88dbe5e6a9d7d5f9d1d63e462cd7cc4ff7 100644 (file)
@@ -134,7 +134,10 @@ void SoundServer()
       long sample_size;
       static long max_sample_size = 0;
       static long fragment_size = 0;
-      boolean stereo;
+      /* Even if the stereo flag is used as being boolean, it must be
+        defined as an integer, else 'ioctl()' will fail! */
+      int stereo = TRUE;
+      int sample_rate = 8000;
 
       if (playing_sounds || (sound_device=open(sound_device_name,O_WRONLY))>=0)
       {
@@ -143,12 +146,35 @@ void SoundServer()
          /* 2 buffers / 512 bytes, giving 1/16 second resolution */
          /* (with stereo the effective buffer size will shrink to 256) */
          fragment_size = 0x00020009;
-         ioctl(sound_device, SNDCTL_DSP_SETFRAGMENT, &fragment_size);
+
+         if (ioctl(sound_device, SNDCTL_DSP_SETFRAGMENT, &fragment_size) < 0)
+           Error(ERR_EXIT_SOUND_SERVER,
+                 "cannot set fragment size of /dev/dsp - no sounds");
+
          /* try if we can use stereo sound */
-         stereo = TRUE;
-         ioctl(sound_device, SNDCTL_DSP_STEREO, &stereo);
+         if (ioctl(sound_device, SNDCTL_DSP_STEREO, &stereo) < 0)
+         {
+#ifdef DEBUG
+           static boolean reported = FALSE;
+
+           if (!reported)
+           {
+             Error(ERR_RETURN, "cannot get stereo sound on /dev/dsp");
+             reported = TRUE;
+           }
+#endif
+           stereo = FALSE;
+         }
+
+         if (ioctl(sound_device, SNDCTL_DSP_SPEED, &sample_rate) < 0)
+           Error(ERR_EXIT_SOUND_SERVER,
+                 "cannot set sample rate of /dev/dsp - no sounds");
+
          /* get the real fragmentation size; this should return 512 */
-         ioctl(sound_device, SNDCTL_DSP_GETBLKSIZE, &fragment_size);
+         if (ioctl(sound_device, SNDCTL_DSP_GETBLKSIZE, &fragment_size) < 0)
+           Error(ERR_EXIT_SOUND_SERVER,
+                 "cannot get fragment size of /dev/dsp - no sounds");
+
          max_sample_size = fragment_size / (stereo ? 2 : 1);
        }
 
index ca97ff0a39f735a7cccb6ce700b8ee949cb20f71..0811e5a21bb2c00f50f9149bea01400f1897be5c 100644 (file)
 #ifndef VOXWARE
 #define VOXWARE
 #endif
+
+#if 0
 /* where is the right declaration for 'ioctl'? */
 extern void ioctl(long, long, void *);
+#else
+#include <sys/ioctl.h>
+#endif
+
 #endif
 
 #ifdef __FreeBSD__