DEADSOFTWARE

sound: move sound/music configuration to sound driver
authorDeaDDooMER <deaddoomer@deadsoftware.ru>
Fri, 24 Apr 2020 08:44:48 +0000 (12:44 +0400)
committerDeaDDooMER <deaddoomer@deadsoftware.ru>
Fri, 24 Apr 2020 08:44:48 +0000 (12:44 +0400)
12 files changed:
src/config.c
src/game.c
src/map.c
src/menu.c
src/music.h
src/openal/sound.c
src/save.c
src/sdl/main.c
src/sdl2/main.c
src/sdlmixer/sound.c
src/sound.h
src/stubsnd/sound.c

index 80c94bf3c85613e268342fc1eba88e42075ab582..1980bc61ec2986f13e9d82bfe4100a47abecfa9e 100644 (file)
@@ -35,15 +35,20 @@ static int ch;
 
 const cfg_t *CFG_find_entry (const char *key, const cfg_t *cfg) {
   assert(key != NULL);
-  assert(cfg != NULL);
-  int i = 0;
-  while (cfg[i].cfg && strcasecmp(cfg[i].cfg, key) != 0) {
-    i++;
+  if (cfg != NULL) {
+    int i = 0;
+    while (cfg[i].cfg && strcasecmp(cfg[i].cfg, key) != 0) {
+      i++;
+    }
+    return cfg[i].cfg ? &cfg[i] : NULL;
+  } else {
+    return NULL;
   }
-  return cfg[i].cfg ? &cfg[i] : NULL;
 }
 
 int CFG_update_key (const char *key, const char *value, const cfg_t *cfg) {
+  assert(key != NULL);
+  assert(value != NULL);
   const cfg_t *entry = CFG_find_entry(key, cfg);
   if (entry != NULL) {
     void *p = entry->p;
@@ -58,6 +63,7 @@ int CFG_update_key (const char *key, const char *value, const cfg_t *cfg) {
       case Y_KEY: *(int*)p = I_string_to_key(value); break;
       default: assert(0); // unknown type -> something broken
     }
+    //logo("CFG_update_key: [%s] = [%s]\n", key, value);
     return 1;
   } else {
     return 0;
@@ -244,9 +250,11 @@ int CFG_update_config (const char *old, const char *new, int n, const cfg_t **cf
       CFG_close_iterator();
     }
     for (j = 0; j < n; j++) {
-      i = 0;
-      while (CFG_write_entry(nf, &cfg[j][i])) {
-        i++;
+      if (cfg[j] != NULL) {
+        i = 0;
+        while (CFG_write_entry(nf, &cfg[j][i])) {
+          i++;
+        }
       }
     }
     fclose(nf);
index 85108333d617a5508dba067bebb48510e2ad34a5..e952a6c319a042ab3bd5d5bc39ba38296da26e4c 100644 (file)
@@ -96,7 +96,7 @@ static void set_trans(int st) {
 }
 
 void load_game (int n) {
-  F_freemus();
+  MUS_free();
   W_init();
   F_loadgame(n);
   set_trans(GS_GAME);
@@ -107,13 +107,13 @@ void load_game (int n) {
   BM_mark(&pl1.o,BM_PLR1);
   if(_2pl) BM_mark(&pl2.o,BM_PLR2);
   MN_mark();
-  S_startmusic(music_time);
+  //MUS_start(music_time);
+  MUS_start(0);
 }
 
 void G_start (void) {
   char s[8];
-
-  F_freemus();
+  MUS_free();
   sprintf(s,"MAP%02u",(word)g_map);
   F_loadmap(s);
   set_trans(GS_GAME);
@@ -131,7 +131,8 @@ void G_start (void) {
   BM_mark(&pl1.o,BM_PLR1);
   if(_2pl) BM_mark(&pl2.o,BM_PLR2);
   MN_mark();
-  S_startmusic(music_time);
+  //MUS_start(music_time);
+  MUS_start(0);
 }
 
 #define GGAS_TOTAL (MN__LAST-MN_DEMON+16+10)
@@ -263,7 +264,7 @@ void G_act (void) {
         G_start();
       } else {
              g_st = GS_BVIDEO;
-        F_freemus();
+        MUS_free();
            }
     }
 #endif
@@ -319,7 +320,7 @@ void G_act (void) {
   if(g_exit==1) {
 
        if(G_end_video()) {
-         F_freemus();
+         MUS_free();
          g_st=GS_EVIDEO;
          return;
        }
@@ -330,20 +331,23 @@ inter:
          case 31: case 32: g_map=16;set_trans(GS_INTER);break;
          default: ++g_map;set_trans(GS_INTER);break;
        }
-       F_freemus();
-       if(g_st==GS_INTER) {
-         F_loadmus("INTERMUS");
-        }else {F_loadmus("\x8a\x8e\x8d\x85\x96\x0");if(mus_vol>0) {S_volumemusic(128);} }
-       S_startmusic(0);
+       MUS_free();
+       if (g_st == GS_INTER) {
+         MUS_load("INTERMUS");
+  } else {
+    MUS_load("\x8a\x8e\x8d\x85\x96\x0");
+    MUS_volume(128);
+  }
+       MUS_start(0);
   }else if(g_exit==2) {
        switch(g_map) {
          case 31: g_map=32;set_trans(GS_INTER);break;
          case 32: g_map=16;set_trans(GS_INTER);break;
          default: g_map=31;set_trans(GS_INTER);break;
        }
-       F_freemus();
-       F_loadmus("INTERMUS");
-       S_startmusic(0);
+       MUS_free();
+       MUS_load("INTERMUS");
+       MUS_start(0);
   }
   
 #ifdef DEMO
index dfc7b7071c0a9744264c2fef70438415ae74bcf9..7071dd4fe5fd0dcc6583e7a6f89b4a7afc6a8a76 100644 (file)
--- a/src/map.c
+++ b/src/map.c
@@ -47,10 +47,10 @@ static int G_load (FILE *h) {
   switch (blk.t) {
     case MB_MUSIC:
       myfread(g_music, 8, 1, h);
-      if (music_random) {
-        F_randmus(g_music);
-      }
-      F_loadmus(g_music);
+      //if (music_random) {
+      //  F_randmus(g_music);
+      //}
+      MUS_load(g_music);
       return 1;
   }
   return 0;
index 639fed9cfddeed963cc9862a5316f4d59c1ca989..7286a45375a11e4a271996357ad3b9150b93f9d6 100644 (file)
@@ -238,78 +238,27 @@ static const menu_t save_game_menu = {
   NULL, &save_game_menu_handler
 };
 
-static int sound_menu_handler (menu_msg_t *msg, const menu_t *m, void *data, int i) {
-  static int cur;
-  enum { VOLUME, __NUM__ };
-  static const simple_menu_t sm = {
-    GM_BIG, "Sound", NULL,
-    {
-      { "Volume", NULL },
-    }
-  };
-  if (i == VOLUME) {
-    switch (msg->type) {
-      case GM_GETENTRY: return GM_init_int0(msg, GM_SCROLLER, 0, 0, 0);
-      case GM_GETINT: return GM_init_int(msg, snd_vol, 0, 128, 8);
-      case GM_SETINT: S_volume(msg->integer.i); return 1;
-    }
-  }
-  return simple_menu_handler(msg, i, __NUM__, &sm, &cur);
-}
-
-static const menu_t sound_menu = {
-  NULL, &sound_menu_handler
-};
-
-static int music_menu_handler (menu_msg_t *msg, const menu_t *m, void *data, int i) {
-  static int cur;
-  enum { VOLUME, MUSIC, __NUM__ };
-  static const simple_menu_t sm = {
-    GM_BIG, "Music", NULL,
-    {
-      { "Volume", NULL },
-      { "Music: ", NULL },
-    }
-  };
-  if (i == VOLUME) {
-    switch (msg->type) {
-      case GM_GETENTRY: return GM_init_int0(msg, GM_SCROLLER, 0, 0, 0);
-      case GM_GETINT: return GM_init_int(msg, mus_vol, 0, 128, 8);
-      case GM_SETINT: S_volumemusic(msg->integer.i); return 1;
-    }
-  } else if (i == MUSIC) {
-    switch (msg->type) {
-      case GM_GETSTR: return GM_init_str(msg, g_music, strlen(g_music));
-      case GM_SELECT:
-        F_freemus();
-        F_nextmus(g_music);
-        F_loadmus(g_music);
-        S_startmusic(music_time * 2); // ???
-        return 1;
-    }
-  }
-  return simple_menu_handler(msg, i, __NUM__, &sm, &cur);
-}
-
-static const menu_t music_menu = {
-  NULL, &music_menu_handler
-};
-
 static int options_menu_handler (menu_msg_t *msg, const menu_t *m, void *data, int i) {
   static int cur;
+  const menu_t *mm;
   enum { VIDEO, SOUND, MUSIC, __NUM__ };
   static const simple_menu_t sm = {
     GM_BIG, "Options", NULL,
     {
       { "Video", NULL },
-      { "Sound", &sound_menu },
-      { "Music", &music_menu },
+      { "Sound", NULL },
+      { "Music", NULL },
     }
   };
   if (msg->type == GM_SELECT) {
-    if (i == VIDEO) {
-      const menu_t *mm = R_menu();
-      return mm ? GM_push(mm) : 1;
+    switch (i) {
+      case VIDEO: mm = R_menu(); break;
+      case SOUND: mm = S_menu(); break;
+      case MUSIC: mm = MUS_menu(); break;
+      default: mm = NULL;
+    }
+    if (mm != NULL) {
+      return GM_push(mm);
     }
   }
   return simple_menu_handler(msg, i, __NUM__, &sm, &cur);
@@ -334,7 +283,7 @@ static int exit_menu_handler (menu_msg_t *msg, const menu_t *m, void *data, int
   } else if (msg->type == GM_SELECT) {
     switch (i) {
       case YES:
-        F_freemus();
+        MUS_free();
         GM_stop();
         Z_sound(S_get(qsnd[myrand(QSND_NUM)]), 255);
         S_wait();
@@ -656,6 +605,6 @@ void GM_init (void) {
   msnd4 = Z_getsnd("SWTCHX");
   msnd5 = Z_getsnd("SUDI");
   msnd6 = Z_getsnd("TUDI");
-  F_loadmus("MENU");
-  S_startmusic(0);
+  MUS_load("MENU");
+  MUS_start(0);
 }
index ab1d3e78868fae62e9a6b62f7cc08fa4912577e3..7681d7f6dd4d9ead9ceba77f00ebeb3f4208dba1 100644 (file)
@@ -1,18 +1,20 @@
 #ifndef MUSIC_H_INCLUDED
 #define MUSIC_H_INCLUDED
 
-extern short mus_vol;
-extern char music_random;
-extern int music_time;
-extern int music_fade;
+#include "menu.h"
+#include "system.h"
 
-void S_initmusic (void);
-void S_donemusic (void);
-void S_startmusic (int time);
-void S_stopmusic (void);
-void S_volumemusic (int v);
-void F_loadmus (char n[8]);
-void F_freemus (void);
-void S_updatemusic (void);
+const cfg_t *MUS_args (void);
+const cfg_t *MUS_conf (void);
+const menu_t *MUS_menu (void);
+
+void MUS_init (void);
+void MUS_done (void);
+void MUS_start (int time);
+void MUS_stop (void);
+void MUS_volume (int v);
+void MUS_load (char n[8]);
+void MUS_free (void);
+void MUS_update (void);
 
 #endif /* MUSIC_H_INCLUDED */
index 73d36a42968a46e87f3548c900257a0dd84635a8..ef9afdab2b09c6d8fb26bda6d4f74b09947f55c0 100644 (file)
@@ -41,11 +41,7 @@ typedef struct openal_channel {
   ALuint source;
 } openal_channel;
 
-short snd_vol;
-short mus_vol;
-char music_random;
-int music_time;
-int music_fade;
+static short snd_vol;
 
 static ALCdevice *device;
 static ALCcontext *context;
@@ -53,40 +49,94 @@ static ALuint sources[MAX_CHANNELS];
 
 /* Music */
 
-void S_initmusic (void) {
+const cfg_t *MUS_args (void) {
+  return NULL;
+}
+
+const cfg_t *MUS_conf (void) {
+  return NULL;
+}
 
+const menu_t *MUS_menu (void) {
+  return NULL;
 }
 
-void S_donemusic (void) {
+void MUS_init (void) {
 
 }
 
-void S_startmusic (int time) {
+void MUS_done (void) {
 
 }
 
-void S_stopmusic (void) {
+void MUS_start (int time) {
 
 }
 
-void S_volumemusic (int v) {
+void MUS_stop (void) {
 
 }
 
-void F_loadmus (char n[8]) {
+void MUS_volume (int v) {
 
 }
 
-void F_freemus (void) {
+void MUS_load (char n[8]) {
 
 }
 
-void S_updatemusic (void) {
+void MUS_free (void) {
+
+}
+
+void MUS_update (void) {
 
 }
 
 /* Sound */
 
+static int sound_menu_handler (menu_msg_t *msg, const menu_t *m, void *data, int i) {
+  static int cur;
+  enum { VOLUME, __NUM__ };
+  static const simple_menu_t sm = {
+    GM_BIG, "Sound", NULL,
+    {
+      { "Volume", NULL },
+    }
+  };
+  if (i == VOLUME) {
+    switch (msg->type) {
+      case GM_GETENTRY: return GM_init_int0(msg, GM_SCROLLER, 0, 0, 0);
+      case GM_GETINT: return GM_init_int(msg, snd_vol, 0, 128, 8);
+      case GM_SETINT: S_volume(msg->integer.i); return 1;
+    }
+  }
+  return simple_menu_handler(msg, i, __NUM__, &sm, &cur);
+}
+
+const menu_t *S_menu (void) {
+  static const menu_t m = {
+    NULL, &sound_menu_handler
+  };
+  return &m;
+}
+
+const cfg_t *S_args (void) {
+  static const cfg_t args[] = {
+    { "sndvol", &snd_vol, Y_WORD },
+    { NULL, NULL, 0 }
+  };
+  return args;
+}
+
+const cfg_t *S_conf (void) {
+  static const cfg_t conf[] = {
+    { "sound_volume", &snd_vol, Y_WORD },
+    { NULL, NULL, 0 }
+  };
+  return conf;
+}
+
 static void convert_this_ext (Uint32 src_format, int src_chan, int src_rate, Uint32 dst_format, int dst_chan, int dst_rate, const void *buf, int len, void **maxbuf, int *maxlen) {
   SDL_AudioCVT cvt;
   *maxlen = 0;
index 4ffb554521c490f7e198b70d056bdd48ecdff84f..1e87b4b208144adcf273b8b4f491af73d6219ddf 100644 (file)
@@ -135,7 +135,7 @@ static void G_loadgame (FILE *h) {
   }
   cheat = myfread8(h);
   myfread(g_music, 8, 1, h);
-  F_loadmus(g_music);
+  MUS_load(g_music);
 }
 
 static void IT_savegame (FILE *h) {
index 1c16dc33307100048c40af58c3a38ee2060b7319..057c82ec2123842550a3ab41bf69df1e14b86aed 100644 (file)
@@ -62,8 +62,7 @@ static const cfg_t arg[] = {
   {"file", NULL, Y_FILES},
   {"cheat", &cheat, Y_SW_ON},
 //  {"vga", &shot_vga, Y_SW_ON},
-  {"sndvol", &snd_vol, Y_WORD},
-  {"musvol", &mus_vol, Y_WORD},
+//  {"musvol", &mus_vol, Y_WORD},
   {"mon", &nomon, Y_SW_OFF},
   {"warp", &_warp, Y_BYTE},
 //  {"config", NULL, cfg_file, Y_STRING},
@@ -72,11 +71,10 @@ static const cfg_t arg[] = {
 
 static const cfg_t cfg[] = {
 //  {"screenshot", &shot_vga, Y_SW_ON},
-  {"sound_volume", &snd_vol, Y_WORD},
-  {"music_volume", &mus_vol, Y_WORD},
-  {"music_random", &music_random, Y_SW_ON},
-  {"music_time", &music_time, Y_DWORD},
-  {"music_fade", &music_fade, Y_DWORD},
+//  {"music_volume", &mus_vol, Y_WORD},
+//  {"music_random", &music_random, Y_SW_ON},
+//  {"music_time", &music_time, Y_DWORD},
+//  {"music_fade", &music_fade, Y_DWORD},
   {"pl1_left", &pl1.kl, Y_KEY},
   {"pl1_right",&pl1.kr, Y_KEY},
   {"pl1_up", &pl1.ku, Y_KEY},
@@ -99,19 +97,19 @@ static const cfg_t cfg[] = {
 };
 
 static void CFG_args (int argc, char **argv) {
-  const cfg_t *list[] = { arg, R_args() };
-  ARG_parse(argc, argv, 2, list);
+  const cfg_t *list[] = { arg, R_args(), S_args(), MUS_args() };
+  ARG_parse(argc, argv, 4, list);
 }
 
 static void CFG_load (void) {
-  const cfg_t *list[] = { cfg, R_conf() };
-  CFG_read_config("default.cfg", 2, list);
-  CFG_read_config("doom2d.cfg", 2, list);
+  const cfg_t *list[] = { cfg, R_conf(), S_conf(), MUS_conf() };
+  CFG_read_config("default.cfg", 4, list);
+  CFG_read_config("doom2d.cfg", 4, list);
 }
 
 static void CFG_save (void) {
-  const cfg_t *list[] = { cfg, R_conf() };
-  CFG_update_config("doom2d.cfg", "doom2d.cfg", 2, list, "generated by doom2d, do not modify");
+  const cfg_t *list[] = { cfg, R_conf(), S_conf(), MUS_conf() };
+  CFG_update_config("doom2d.cfg", "doom2d.cfg", 4, list, "generated by doom2d, do not modify");
 }
 
 /* --- error.h --- */
@@ -140,8 +138,8 @@ void ERR_failinit (char *s, ...) {
 void ERR_fatal (char *s, ...) {
   va_list ap;
   R_done();
+  MUS_done();
   S_done();
-  S_donemusic();
   M_shutdown();
   SDL_Quit();
   puts("\nКРИТИЧЕСКАЯ ОШИБКА:");
@@ -481,7 +479,7 @@ static void poll_events (void) {
 
 static void step (void) {
   poll_events();
-  S_updatemusic();
+  MUS_update();
   Uint32 t = SDL_GetTicks();
   if (t - ticks > DELAY) {
     ticks = t;
@@ -536,7 +534,7 @@ int main (int argc, char *argv[]) {
   M_startup();
   F_allocres();
   S_init();
-  S_initmusic();
+  MUS_init();
   R_init();
   G_init();
   ticks = SDL_GetTicks();
@@ -549,7 +547,7 @@ int main (int argc, char *argv[]) {
 #endif
   CFG_save();
   R_done();
-  S_donemusic();
+  MUS_done();
   S_done();
   M_shutdown();
   SDL_Quit();
index f9eb159fe7b7342c1ab28cd2fd9a9a9a5ed783c7..6044bfc7ecad9e6be1359b507714b3e2040a9422 100644 (file)
@@ -41,8 +41,7 @@ static const cfg_t arg[] = {
   {"file", NULL, Y_FILES},
   {"cheat", &cheat, Y_SW_ON},
 //  {"vga", &shot_vga, Y_SW_ON},
-  {"sndvol", &snd_vol, Y_WORD},
-  {"musvol", &mus_vol, Y_WORD},
+//  {"musvol", &mus_vol, Y_WORD},
   {"mon", &nomon, Y_SW_OFF},
   {"warp", &_warp, Y_BYTE},
 //  {"config", NULL, cfg_file, Y_STRING},
@@ -51,11 +50,10 @@ static const cfg_t arg[] = {
 
 static const cfg_t cfg[] = {
 //  {"screenshot", &shot_vga, Y_SW_ON},
-  {"sound_volume", &snd_vol, Y_WORD},
-  {"music_volume", &mus_vol, Y_WORD},
-  {"music_random", &music_random, Y_SW_ON},
-  {"music_time", &music_time, Y_DWORD},
-  {"music_fade", &music_fade, Y_DWORD},
+//  {"music_volume", &mus_vol, Y_WORD},
+//  {"music_random", &music_random, Y_SW_ON},
+//  {"music_time", &music_time, Y_DWORD},
+//  {"music_fade", &music_fade, Y_DWORD},
   {"pl1_left", &pl1.kl, Y_KEY},
   {"pl1_right",&pl1.kr, Y_KEY},
   {"pl1_up", &pl1.ku, Y_KEY},
@@ -78,19 +76,19 @@ static const cfg_t cfg[] = {
 };
 
 static void CFG_args (int argc, char **argv) {
-  const cfg_t *list[] = { arg, R_args() };
-  ARG_parse(argc, argv, 2, list);
+  const cfg_t *list[] = { arg, R_args(), S_args(), MUS_args() };
+  ARG_parse(argc, argv, 4, list);
 }
 
 static void CFG_load (void) {
-  const cfg_t *list[] = { cfg, R_conf() };
-  CFG_read_config("default.cfg", 2, list);
-  CFG_read_config("doom2d.cfg", 2, list);
+  const cfg_t *list[] = { cfg, R_conf(), S_conf(), MUS_conf() };
+  CFG_read_config("default.cfg", 4, list);
+  CFG_read_config("doom2d.cfg", 4, list);
 }
 
 static void CFG_save (void) {
-  const cfg_t *list[] = { cfg, R_conf() };
-  CFG_update_config("doom2d.cfg", "doom2d.cfg", 2, list, "generated by doom2d, do not modify");
+  const cfg_t *list[] = { cfg, R_conf(), S_conf(), MUS_conf() };
+  CFG_update_config("doom2d.cfg", "doom2d.cfg", 4, list, "generated by doom2d, do not modify");
 }
 
 /* --- error.h --- */
@@ -119,8 +117,8 @@ void ERR_failinit (char *s, ...) {
 void ERR_fatal (char *s, ...) {
   va_list ap;
   R_done();
+  MUS_done();
   S_done();
-  S_donemusic();
   M_shutdown();
   SDL_Quit();
   puts("\nКРИТИЧЕСКАЯ ОШИБКА:");
@@ -545,7 +543,7 @@ static void poll_events (void) {
 
 static void step (void) {
   poll_events();
-  S_updatemusic();
+  MUS_update();
   Uint32 t = SDL_GetTicks();
   if (t - ticks > DELAY) {
     ticks = t;
@@ -599,7 +597,7 @@ int main (int argc, char **argv) {
   M_startup();
   F_allocres();
   S_init();
-  S_initmusic();
+  MUS_init();
   R_init();
   G_init();
   ticks = SDL_GetTicks();
@@ -612,7 +610,7 @@ int main (int argc, char **argv) {
 #endif
   CFG_save();
   R_done();
-  S_donemusic();
+  MUS_done();
   S_done();
   M_shutdown();
   SDL_Quit();
index f8ef47efa7f1f7b41737091c62deb0fdb46860e4..ddacddf2497ff55556609a01a2303242de686649 100644 (file)
@@ -28,7 +28,7 @@ typedef struct sdlmixer_snd {
   Mix_Chunk *c;
 } sdlmixer_snd;
 
-short snd_vol; // public 0..128
+static short snd_vol;
 
 static int devfreq = MIX_DEFAULT_FREQUENCY;
 static Uint32 devformat = AUDIO_S16SYS; // MIX_DEFAULT_FORMAT
@@ -39,45 +39,94 @@ static int devinit;
 
 /* music */
 
-short mus_vol;
-char music_random;
-int music_time;
-int music_fade;
+const cfg_t *MUS_args (void) {
+  return NULL;
+}
+
+const cfg_t *MUS_conf (void) {
+  return NULL;
+}
+
+const menu_t *MUS_menu (void) {
+  return NULL;
+}
 
-void S_initmusic (void) {
+void MUS_init (void) {
 
 }
 
-void S_donemusic (void) {
+void MUS_done (void) {
 
 }
 
-void S_startmusic (int time) {
+void MUS_start (int time) {
 
 }
 
-void S_stopmusic (void) {
+void MUS_stop (void) {
 
 }
 
-void S_volumemusic (int v) {
+void MUS_volume (int v) {
 
 }
 
-void F_loadmus (char n[8]) {
+void MUS_load (char n[8]) {
 
 }
 
-void F_freemus (void) {
+void MUS_free (void) {
 
 }
 
-void S_updatemusic (void) {
+void MUS_update (void) {
 
 }
 
 /* Sound */
 
+static int sound_menu_handler (menu_msg_t *msg, const menu_t *m, void *data, int i) {
+  static int cur;
+  enum { VOLUME, __NUM__ };
+  static const simple_menu_t sm = {
+    GM_BIG, "Sound", NULL,
+    {
+      { "Volume", NULL },
+    }
+  };
+  if (i == VOLUME) {
+    switch (msg->type) {
+      case GM_GETENTRY: return GM_init_int0(msg, GM_SCROLLER, 0, 0, 0);
+      case GM_GETINT: return GM_init_int(msg, snd_vol, 0, 128, 8);
+      case GM_SETINT: S_volume(msg->integer.i); return 1;
+    }
+  }
+  return simple_menu_handler(msg, i, __NUM__, &sm, &cur);
+}
+
+const menu_t *S_menu (void) {
+  static const menu_t m = {
+    NULL, &sound_menu_handler
+  };
+  return &m;
+}
+
+const cfg_t *S_args (void) {
+  static const cfg_t args[] = {
+    { "sndvol", &snd_vol, Y_WORD },
+    { NULL, NULL, 0 }
+  };
+  return args;
+}
+
+const cfg_t *S_conf (void) {
+  static const cfg_t conf[] = {
+    { "sound_volume", &snd_vol, Y_WORD },
+    { NULL, NULL, 0 }
+  };
+  return conf;
+}
+
 void S_init (void) {
   assert(devinit == 0);
   logo("S_init: initialize sound\n");
index 8851b8513320a4d6870faeebee0b6b24473edda1..81c7dca486257c37c983a8194bbc68d8710f22de 100644 (file)
 #ifndef SOUND_H_INCLUDED
 #define SOUND_H_INCLUDED
 
+#include "menu.h"
+#include "system.h"
+
 typedef struct {
   int tag;
 } snd_t;
 
-// Sound volume 0..128
-extern short snd_vol;
+const cfg_t *S_args (void);
+const cfg_t *S_conf (void);
+const menu_t *S_menu (void);
 
 // Get sound handle for resource <id>
 snd_t *S_get (int id);
index 58435f177f03fa4a7bc348a74eeb24a192c3e52a..b47ba0c3473950d7577f650237ccdadcd941d1eb 100644 (file)
@@ -2,49 +2,66 @@
 #include "sound.h"
 #include "music.h"
 
-short snd_vol;
+/* Music */
 
-short mus_vol;
-char music_random;
-int music_time;
-int music_fade;
+const cfg_t *MUS_args (void) {
+  return NULL;
+}
 
-/* Music */
+const cfg_t *MUS_conf (void) {
+  return NULL;
+}
+
+const menu_t *MUS_menu (void) {
+  return NULL;
+}
 
-void S_initmusic (void) {
+void MUS_init (void) {
 
 }
 
-void S_donemusic (void) {
+void MUS_done (void) {
 
 }
 
-void S_startmusic (int time) {
+void MUS_start (int time) {
 
 }
 
-void S_stopmusic (void) {
+void MUS_stop (void) {
 
 }
 
-void S_volumemusic (int v) {
+void MUS_volume (int v) {
 
 }
 
-void F_loadmus (char n[8]) {
+void MUS_load (char n[8]) {
 
 }
 
-void F_freemus (void) {
+void MUS_free (void) {
 
 }
 
-void S_updatemusic (void) {
+void MUS_update (void) {
 
 }
 
 /* Sound */
 
+const cfg_t *S_args (void) {
+  return NULL;
+}
+
+const cfg_t *S_conf (void) {
+  return NULL;
+}
+
+const menu_t *S_menu (void) {
+  return NULL;
+}
+
 snd_t *S_get (int id) {
   return NULL;
 }