]> git.zerfleddert.de Git - micropolis/blobdiff - src/sim/w_sound.c
Makefile: Micropolis build fixes for recent macOS
[micropolis] / src / sim / w_sound.c
index a7dae7836d2d85030efd8d56d0cfd9ea5ee0df7b..a903ae764ed5f75821cac2b03ec71571c4a7d473 100644 (file)
@@ -145,7 +145,8 @@ static int SoundInitialized = 0;
 Mix_Chunk *rumble;
 
 
-InitializeSound()
+void
+InitializeSound(void)
 {
   int reserved_chans;
   char buf[256];
@@ -184,6 +185,7 @@ InitializeSound()
 }
 
 
+void
 ShutDownSound()
 {
   int i;
@@ -204,6 +206,7 @@ ShutDownSound()
 }
 
 
+void
 MakeSound(char *channel, char *id)
 {
   char buf[256];
@@ -237,6 +240,7 @@ MakeSound(char *channel, char *id)
     fprintf(stderr, "Mix_PlayChannel: %s\n", Mix_GetError());
 }
 
+void
 StartBulldozer(void)
 {
   if (!UserSoundOn) return;
@@ -249,6 +253,7 @@ StartBulldozer(void)
 }
 
 
+void
 StopBulldozer(void)
 {
   if (!UserSoundOn) return;
@@ -258,22 +263,38 @@ StopBulldozer(void)
 }
 
 #else /* WITH_SDL_MIXER */
+void
 InitializeSound()
 {
   SoundInitialized = 1;
 }
 
+void
 ShutDownSound()
 {
   SoundInitialized = 0;
 }
 
+void
 MakeSound(char *channel, char *id)
 {
   char filename[256], player[256];
+  static struct timeval last = {0, 0};
+  struct timeval now;
+  unsigned int diff;
   int i;
   pid_t pid;
 
+  gettimeofday(&now, NULL);
+
+  diff = ((now.tv_sec - last.tv_sec) * 1000000) +
+    (now.tv_usec - last.tv_usec);
+  
+  if (diff < 100000)
+    return;
+
+  last = now;
+
   if (!UserSoundOn) return;
   if (!SoundInitialized) return;
 
@@ -292,6 +313,7 @@ MakeSound(char *channel, char *id)
   switch(pid) {
     case 0:
       execl(player, player, filename, NULL);
+      exit(1);
       break;
     case -1:
       perror("fork failed");
@@ -301,17 +323,20 @@ MakeSound(char *channel, char *id)
   }
 }
 
+void
 StartBulldozer(void)
 {
   MakeSound(0, "Rumble");
 }
 
+void
 StopBulldozer(void)
 {
 }
 #endif
 
 
+void
 MakeSoundOn(SimView *view, char *channel, char *id)
 {
   if (!UserSoundOn) return;
@@ -322,22 +347,26 @@ MakeSoundOn(SimView *view, char *channel, char *id)
 
 
 /* XXX comefrom: doKeyEvent */
+void
 SoundOff(void)
 {
   ShutDownSound();
 }
 
 
+void
 DoStartSound(char *channel, char *id)
 {
   MakeSound(channel, id);
 }
 
+void
 DoStopSound(char *id)
 {
   StopBulldozer();
 }
 
+int
 SoundCmd(CLIENT_ARGS)
 {
   if (!strcmp(argv[2], "Rumble"))
@@ -347,13 +376,15 @@ SoundCmd(CLIENT_ARGS)
   return 0;
 }
 
+int
 DozerCmd(CLIENT_ARGS)
 {
   StopBulldozer();
   return 0;
 }
 
-sound_command_init()
+void
+sound_command_init(void)
 {
   Tcl_CreateCommand(tk_mainInterp, "playsound", SoundCmd,
                    (ClientData)NULL, (void (*)()) NULL);
Impressum, Datenschutz