From 7d6028a6195e8774fb09dcbaade86c02dcfa258a Mon Sep 17 00:00:00 2001 From: SarahW Date: Wed, 8 Mar 2017 20:03:32 +0000 Subject: [PATCH] Store sound card in config file as name rather than number. --- src/pc.c | 8 ++++++-- src/sound.c | 48 ++++++++++++++++++++++++++++++++++-------------- src/sound.h | 2 ++ 3 files changed, 42 insertions(+), 16 deletions(-) diff --git a/src/pc.c b/src/pc.c index ea86731..ad18e3e 100644 --- a/src/pc.c +++ b/src/pc.c @@ -600,7 +600,11 @@ void loadconfig(char *fn) else gfxcard = 0; video_speed = config_get_int(NULL, "video_speed", 3); - sound_card_current = config_get_int(NULL, "sndcard", SB2); + p = (char *)config_get_string(NULL, "sndcard", ""); + if (p) + sound_card_current = sound_card_get_from_internal_name(p); + else + sound_card_current = 0; p = (char *)config_get_string(NULL, "disc_a", ""); if (p) strcpy(discfns[0], p); @@ -711,7 +715,7 @@ void saveconfig() config_set_string(NULL, "gfxcard", video_get_internal_name(video_old_to_new(gfxcard))); config_set_int(NULL, "video_speed", video_speed); - config_set_int(NULL, "sndcard", sound_card_current); + config_set_string(NULL, "sndcard", sound_card_get_internal_name(sound_card_current)); config_set_int(NULL, "cpu_speed", cpuspeed); config_set_int(NULL, "has_fpu", hasfpu); config_set_string(NULL, "disc_a", discfns[0]); diff --git a/src/sound.c b/src/sound.c index 578ddfd..b69b6bd 100644 --- a/src/sound.c +++ b/src/sound.c @@ -23,25 +23,26 @@ static int sound_card_last = 0; typedef struct { - char name[32]; + char name[64]; + char internal_name[24]; device_t *device; } SOUND_CARD; static SOUND_CARD sound_cards[] = { - {"None", NULL}, - {"Adlib", &adlib_device}, - {"Sound Blaster 1.0", &sb_1_device}, - {"Sound Blaster 1.5", &sb_15_device}, - {"Sound Blaster 2.0", &sb_2_device}, - {"Sound Blaster Pro v1", &sb_pro_v1_device}, - {"Sound Blaster Pro v2", &sb_pro_v2_device}, - {"Sound Blaster 16", &sb_16_device}, - {"Sound Blaster AWE32", &sb_awe32_device}, - {"Adlib Gold", &adgold_device}, - {"Windows Sound System", &wss_device}, - {"Pro Audio Spectrum 16", &pas16_device}, - {"", NULL} + {"None", "none", NULL}, + {"Adlib", "adlib", &adlib_device}, + {"Sound Blaster 1.0", "sb", &sb_1_device}, + {"Sound Blaster 1.5", "sb1.5", &sb_15_device}, + {"Sound Blaster 2.0", "sb2.0", &sb_2_device}, + {"Sound Blaster Pro v1", "sbprov1", &sb_pro_v1_device}, + {"Sound Blaster Pro v2", "sbprov2", &sb_pro_v2_device}, + {"Sound Blaster 16", "sb16", &sb_16_device}, + {"Sound Blaster AWE32", "sbawe32", &sb_awe32_device}, + {"Adlib Gold", "adlibgold", &adgold_device}, + {"Windows Sound System", "wss", &wss_device}, + {"Pro Audio Spectrum 16", "pas16", &pas16_device}, + {"", "", NULL} }; int sound_card_available(int card) @@ -69,6 +70,25 @@ int sound_card_has_config(int card) return sound_cards[card].device->config ? 1 : 0; } +char *sound_card_get_internal_name(int card) +{ + return sound_cards[card].internal_name; +} + +int sound_card_get_from_internal_name(char *s) +{ + int c = 0; + + while (strlen(sound_cards[c].internal_name)) + { + if (!strcmp(sound_cards[c].internal_name, s)) + return c; + c++; + } + + return 0; +} + void sound_card_init() { if (sound_cards[sound_card_current].device) diff --git a/src/sound.h b/src/sound.h index 47a72fd..e142e40 100644 --- a/src/sound.h +++ b/src/sound.h @@ -8,6 +8,8 @@ int sound_card_available(int card); char *sound_card_getname(int card); struct device_t *sound_card_getdevice(int card); int sound_card_has_config(int card); +char *sound_card_get_internal_name(int card); +int sound_card_get_from_internal_name(char *s); void sound_card_init(); void sound_set_cd_volume(unsigned int vol_l, unsigned int vol_r);