From 3e2c46ac069c0c5d80ffdba2aa802f7c1687132f Mon Sep 17 00:00:00 2001
From: nehalmistry <>
Date: Sat, 15 Feb 2003 01:55:51 +0000
Subject: [PATCH] converted CDMode to enum

---
 src/game/intro.cpp          |   2 +-
 src/include/sound.h         |   2 -
 src/include/sound_server.h  |  10 +-
 src/sound/music.cpp         | 192 +++++++++++++++++-------------------
 src/sound/script_sound.cpp  |  19 +++-
 src/sound/sound_server.cpp  |  38 +++----
 src/stratagus/script.cpp    |   2 +-
 src/stratagus/stratagus.cpp |   2 +-
 src/ui/menus.cpp            |  32 +++---
 9 files changed, 154 insertions(+), 145 deletions(-)

diff --git a/src/game/intro.cpp b/src/game/intro.cpp
index 9c6b8bf4d..1c7260221 100644
--- a/src/game/intro.cpp
+++ b/src/game/intro.cpp
@@ -540,7 +540,7 @@ global void ShowIntro(const Intro *intro)
     CallbackMusicOn();
     StopMusic();
     // FIXME: should this be GameMusic?
-    if( !strcmp(CDMode, ":off") ) {
+    if (CDMode == CDModeOff || CDMode == CDModeStopped) {
 	PlayMusic(MenuMusic);
     } else {
 	CDRomCheck(NULL);
diff --git a/src/include/sound.h b/src/include/sound.h
index 855470753..cc6d97287 100644
--- a/src/include/sound.h
+++ b/src/include/sound.h
@@ -123,8 +123,6 @@ extern void PlayMusic(const char* name);
     /// Stop music playing
 extern void StopMusic(void);
 
-extern int PlayCDRom(const char* name);
-
     /// Turn music stopped callback on
 #define CallbackMusicOn() \
 	CallbackMusic=1;
diff --git a/src/include/sound_server.h b/src/include/sound_server.h
index 817bfdf11..a0b774d6b 100644
--- a/src/include/sound_server.h
+++ b/src/include/sound_server.h
@@ -235,7 +235,13 @@ extern unsigned CompressedSoundMemory;
 #endif
 
     /// cd play mode, ":off" ":random" ":all" or ":defined"
-extern char *CDMode;
+enum _cd_mode_ {
+    CDModeStopped = -1,
+    CDModeOff,
+    CDModeAll,
+    CDModeRandom,
+    CDModeDefined,
+} CDMode;
     /// FIXME: docu
 enum _play_section_ {
     PlaySectionMainMenu,
@@ -246,6 +252,8 @@ enum _play_section_ {
 #if defined(USE_SDLCD) || defined(USE_LIBCDA) || defined(USE_CDDA)
     /// FIXME: docu
 extern int CDTrack;
+
+extern int PlayCDRom(int name);
 #endif
 
 #if defined(USE_SDLCD)
diff --git a/src/sound/music.cpp b/src/sound/music.cpp
index 641a47343..531146664 100644
--- a/src/sound/music.cpp
+++ b/src/sound/music.cpp
@@ -66,8 +66,6 @@
 global Sample* MusicSample;		/// Music samples
 #endif
 
-global char *CDMode = ":off";	/// cd play mode, ":off" ":random" ":all" or ":defined"
-//global char *CDPlaySection = "menu";
 #if defined(USE_SDLCD) || defined(USE_LIBCDA) || defined(USE_CDDA)
 global int CDTrack = 0;			/// Current cd track
 #endif
@@ -242,16 +240,16 @@ local Sample* LoadMod(const char* name,int flags __attribute__((unused)))
 **
 **	@return		True if name is handled by the cdrom module.
 */
-global int PlayCDRom(const char* name)
+global int PlayCDRom(int name)
 {
     // Old mode off, starting cdrom play.
-    if (!strcmp(CDMode, ":off")) {
+    if (CDMode == CDModeOff) {
 	if (!strncmp(name, ":", 1)) {
 	    if (SDL_Init(SDL_INIT_CDROM) < 0)
 		return 1;
 	    CDRom = SDL_CDOpen(0);
 	    if (!SDL_CDStatus(CDRom)) {
-		CDMode = ":off";
+		CDMode = CDModeOff;
 		return 1;
 	    }
 	}
@@ -264,22 +262,22 @@ global int PlayCDRom(const char* name)
 
 	if (!CDRom) {
 	    fprintf(stderr, "Couldn't open cdrom drive: %s\n", SDL_GetError());
-	    CDMode = ":stopped";
+	    CDMode = CDModeStopped;
 	    return 1;
 	}
 	// if mode is play all tracks
 	if (!strcmp(name, ":all")) {
-	    CDMode = ":all";
+	    CDMode = CDModeAll;
 	    if (SDL_CDPlayTracks(CDRom, 0, 0, 0, 0) < 0)
-		CDMode = ":stopped";
+		CDMode = CDModeStopped;
 	    return 1;
 	}
 	// if mode is play random tracks
 	if (!strcmp(name, ":random")) {
-	    CDMode = ":random";
+	    CDMode = CDModeRandom;
 	    CDTrack = MyRand() % CDRom->numtracks;
 	    if (SDL_CDPlayTracks(CDRom, CDTrack, 0, 0, 0) < 0)
-		CDMode = ":stopped";
+		CDMode = CDModeStopped;
 	}
 	return 1;
     }
@@ -297,105 +295,99 @@ global int PlayCDRom(const char* name)
 **
 **	@return		True if name is handled by the cdrom module.
 */
-global int PlayCDRom(const char* name)
+global int PlayCDRom(int name)
 {
     int i;
     int data_cd;
     int track;
 
-    if (!strcmp(CDMode, ":off")) {
-	if (!strncmp(name, ":", 1)) {
-	    if (cd_init()) {
-		fprintf(stderr, "Error initialising libcda \n");
-		CDMode = ":off";
-		return 1;
-	    }
-	    if (cd_get_tracks(&CDTrack, &NumCDTracks)) {
-		CDMode = ":off";
-		return 1;
-	    }
-	    data_cd = 1;
-	    for (i = 1; i <= NumCDTracks; ++i) {
-		if (cd_is_audio(i) > 0) {
-		    data_cd = 0;
-		    break;
-		}
-	    }
-	    if (data_cd || !NumCDTracks) {
-		CDMode = ":off";
-		return 1;
+    if (CDMode == CDModeOff) {
+        if (cd_init()) {
+	    fprintf(stderr, "Error initialising libcda \n");
+	    CDMode = CDModeOff;
+	    return 1;
+	}
+	if (cd_get_tracks(&CDTrack, &NumCDTracks)) {
+	    CDMode = CDModeOff;
+	    return 1;
+	}
+	data_cd = 1;
+	for (i = 1; i <= NumCDTracks; ++i) {
+	    if (cd_is_audio(i) > 0) {
+	        data_cd = 0;
+	        break;
 	    }
 	}
-	--CDTrack;
+	if (data_cd || !NumCDTracks) {
+	    CDMode = CDModeOff;
+	    return 1;
+	}
+    }
+    --CDTrack;
+
+    StopMusic();
+
+    if (cd_get_tracks(NULL, NULL) == -1)
+        return 1;
+
+    // if mode is play all tracks
+    if (name == CDModeAll) {
+        CDMode = CDModeAll;
+	do {
+	    if (CDTrack >= NumCDTracks)
+	        CDTrack = 0;
+	} while (cd_is_audio(++CDTrack) < 1);
+	if (cd_play(CDTrack))
+	    CDMode = CDModeStopped;
+	return 1;
+    }
+    // if mode is play random tracks
+    if (name == CDModeRandom) {
+        CDMode = CDModeRandom;
+        do {
+	    CDTrack = MyRand() % NumCDTracks;
+	} while (cd_is_audio(CDTrack) < 1);
+	if (cd_play(CDTrack))
+	    CDMode = CDModeStopped;
+	return 1;
     }
 
-    if (!strncmp(name, ":", 1)) {
-
-	StopMusic();
-
-	if (cd_get_tracks(NULL, NULL) == -1)
-	    return 1;
-
-	// if mode is play all tracks
-	if (!strcmp(name, ":all")) {
-	    CDMode = ":all";
-	    do {
-		if (CDTrack >= NumCDTracks)
-		    CDTrack = 0;
-	    } while (cd_is_audio(++CDTrack) < 1);
-	    if (cd_play(CDTrack))
-		CDMode = ":stopped";
-	    return 1;
-	}
-	// if mode is play random tracks
-	if (!strcmp(name, ":random")) {
-	    CDMode = ":random";
-	    do {
-		CDTrack = MyRand() % NumCDTracks;
-	    } while (cd_is_audio(CDTrack) < 1);
-	    if (cd_play(CDTrack))
-		CDMode = ":stopped";
-	    return 1;
-	}
-	// FIXME: remove :defined
-	if (!strcmp(name, ":defined")) {
-	    CDMode = ":defined";
-	    track = cd_current_track();
-	    if (PlaySection == PlaySectionStats) {
-		if (GameResult == GameVictory) {
-		    if (!ThisPlayer->Race && track != 8) {
-			cd_play(8);
-		    } else if (ThisPlayer->Race && track != 16) {
-			cd_play(16);
-		    }
-		} else {
-		    if (!ThisPlayer->Race && track != 9) {
-			cd_play(9);
-		    } else if (ThisPlayer->Race && track != 17) {
-			cd_play(17);
-		    }
+    if (name == CDModeDefined) {
+        CDMode = CDModeDefined;
+        track = cd_current_track();
+        if (PlaySection == PlaySectionStats) {
+	    if (GameResult == GameVictory) {
+		if (!ThisPlayer->Race && track != 8) {
+		    cd_play(8);
+		} else if (ThisPlayer->Race && track != 16) {
+		    cd_play(16);
 		}
-	    } else if (PlaySection == PlaySectionBriefing) {
-		if (!ThisPlayer->Race && track != 7) {
-		    cd_play(7);
-		} else if (ThisPlayer->Race && track != 15) {
-		    cd_play(15);
+	    } else {
+		if (!ThisPlayer->Race && track != 9) {
+		    cd_play(9);
+		} else if (ThisPlayer->Race && track != 17) {
+		    cd_play(17);
 		}
-	    } else if ((PlaySection == PlaySectionMainMenu) && track != 15) {
-		cd_play(15);
-	    } else if ((PlaySection == PlaySectionGame) && 
-		       !ThisPlayer->Race && (track < 3 || track > 6)) {
-		do CDTrack = (MyRand() % NumCDTracks) + 3;
-		while (CDTrack < 3 || CDTrack > 7); 
-		cd_play(CDTrack);
-	    } else if ((PlaySection == PlaySectionGame) && 
-		       ThisPlayer->Race && (track < 10 || track > 14)) {
-		do CDTrack = (MyRand() % NumCDTracks) + 9;
-		while (CDTrack < 11 || CDTrack > 14); 
-		cd_play(CDTrack);
 	    }
+	} else if (PlaySection == PlaySectionBriefing) {
+	    if (!ThisPlayer->Race && track != 7) {
+	        cd_play(7);
+	    } else if (ThisPlayer->Race && track != 15) {
+	        cd_play(15);
+	    }
+	} else if ((PlaySection == PlaySectionMainMenu) && track != 15) {
+	    cd_play(15);
+	} else if ((PlaySection == PlaySectionGame) && 
+		    !ThisPlayer->Race && (track < 3 || track > 6)) {
+	    do CDTrack = (MyRand() % NumCDTracks) + 3;
+	    while (CDTrack < 3 || CDTrack > 7); 
+	    cd_play(CDTrack);
+	} else if ((PlaySection == PlaySectionGame) && 
+		    ThisPlayer->Race && (track < 10 || track > 14)) {
+	    do CDTrack = (MyRand() % NumCDTracks) + 9;
+	    while (CDTrack < 11 || CDTrack > 14); 
+	    cd_play(CDTrack);
 	}
-	return 1;
     }
 
     return 0;
@@ -415,7 +407,7 @@ local int PlayCDRom(const char* name)
     int i;
     Sample *sample;
 
-    if (!strcmp(CDMode, ":off")) {
+    if (CDMode == CDModeOff) {
 	if (!strncmp(name, ":", 1)) {
 	    CDDrive = open("/dev/cdrom", O_RDONLY | O_NONBLOCK);
 	    ioctl(CDDrive, CDROMRESET);
@@ -430,7 +422,7 @@ local int PlayCDRom(const char* name)
 	    NumCDTracks = i - 1;
 
 	    if (NumCDTracks == 0) {
-		CDMode = ":off";
+		CDMode = CDModeOff;
 		return 1;
 	    }
 	}
@@ -442,7 +434,7 @@ local int PlayCDRom(const char* name)
 
 	// if mode is play all tracks
 	if (!strcmp(name, ":all")) {
-	    CDMode = ":all";
+	    CDMode = CDModeAll;
 	    do {
 		if (CDTrack >= NumCDTracks)
 		    CDTrack = 0;
@@ -450,7 +442,7 @@ local int PlayCDRom(const char* name)
 	}
 	// if mode is play random tracks
 	if (!strcmp(name, ":random")) {
-	    CDMode = ":random";
+	    CDMode = CDModeRanom;
 	    do {
 		CDTrack = MyRand() % NumCDTracks;
 	    } while (CDtocentry[CDTrack].cdte_ctrl&CDROM_DATA_TRACK);
diff --git a/src/sound/script_sound.cpp b/src/sound/script_sound.cpp
index 752796cbf..e66c8ca43 100644
--- a/src/sound/script_sound.cpp
+++ b/src/sound/script_sound.cpp
@@ -376,12 +376,23 @@ local SCM CclSetMusicVolume(SCM volume)
 local SCM CclSetCdMode(SCM mode)
 {
 #if defined(USE_SDLCD) || defined(USE_LIBCDA) || defined(USE_CDDA)
-    char *str;
+    int cdmode;
+    char *str = gh_scm2newstr(mode, NULL);
 
-    if ( !gh_null_p(mode) ) {
-        PlayCDRom(str = gh_scm2newstr(mode,NULL));
-        free(str);
+    if (!strcmp(str, "all")) {
+	cdmode = CDModeAll;
+    } else if (!strcmp(str, "random")) {
+	cdmode = CDModeRandom;
+    } else if (!strcmp(str, "defined")) {
+	cdmode = CDModeDefined;
+    } else {
+	free(str);
+	return mode;
     }
+
+    free(str);
+
+    PlayCDRom(cdmode);
 #endif
     return mode;
 }
diff --git a/src/sound/sound_server.cpp b/src/sound/sound_server.cpp
index c078abefa..237ca8124 100644
--- a/src/sound/sound_server.cpp
+++ b/src/sound/sound_server.cpp
@@ -230,22 +230,22 @@ global void StopMusic(void)
 global int CDRomCheck(void *unused __attribute__ ((unused)))
 {
 #if defined(USE_SDLCD)
-    if (strcmp(CDMode, ":off") && strcmp(CDMode, ":stopped")
+    if (CDMode != CDModeOff && CDMode != CDModeStopped)
 	    && SDL_CDStatus(CDRom) == 1) {
 	DebugLevel0Fn("Playing new track\n");
-	if (!strcmp(CDMode, ":all")) {
+	if (CDMode == CDModeAll) {
 	    PlayCDRom(":all");
-	} else if (!strcmp(CDMode, ":random")) {
+	} else if (CDMode == CDModeRandom) {
 	    PlayCDRom(":random");
 	}
     }
 #elif defined(USE_LIBCDA)
-    if (strcmp(CDMode, ":off") && strcmp(CDMode, ":stopped")
-	    && !cd_current_track() && strcmp(CDMode, ":defined")) {
+    if (CDMode != CDModeRandom && CDMode != CDModeStopped
+	    && !cd_current_track() && CDMode != CDModeDefined) {
 	DebugLevel0Fn("Playing new track\n");
 	PlayCDRom(CDMode);
-    } else if (strcmp(CDMode, ":off") && strcmp(CDMode, ":stopped")) {
-	if (!strcmp(CDMode, ":defined")) {
+    } else if (CDMode != CDModeOff && CDMode != CDModeStopped) {
+	if (CDMode == CDModeDefined) {
 	    PlayCDRom(CDMode);
 	}
 	DebugLevel0Fn("get track\n");
@@ -255,12 +255,12 @@ global int CDRomCheck(void *unused __attribute__ ((unused)))
 	}
     }
 #elif defined(USE_CDDA)
-    if (strcmp(CDMode, ":off") && strcmp(CDMode, ":stopped")
+    if (CDMode != CDModeOff && CDMode != CDModeStopped)
 	    && !PlayingMusic) {
 	DebugLevel0Fn("Playing new track\n");
-	if (!strcmp(CDMode, ":all")) {
+	if (CDMode == CDModeAll) {
 	    PlayCDRom(":all");
-	} else if (!strcmp(CDMode, ":random")) {
+	} else if (CDMode == CDModeRandom) {
 	    PlayCDRom(":random");
 	}
     }
@@ -1199,7 +1199,7 @@ global int InitSound(void)
     DebugLevel0Fn("FIXME: must write non GLIB hash functions\n");
 #endif
 
-    if( TitleMusic && (!strcmp(CDMode, ":off")) ) {
+    if( TitleMusic && (CDMode == CDModeOff || CDMode == CDModeStopped) ) {
 	PlayMusic(TitleMusic);
     }
 
@@ -1272,21 +1272,21 @@ global void QuitSound(void)
 global void QuitCD(void)
 {
 #if defined(USE_SDLCD)
-    if (strcmp(CDMode,":off") && strcmp(CDMode,":stopped"))
+    if (CDMode != CDModeOff && CDMode != CDModeStopped)
 	SDL_CDStop(CDRom);
-	CDMode = ":stopped";
-    if (strcmp(CDMode,":off")) {
+	CDMode = CDModeStopped;
+    if (CDMode != CDModeStopped) {
         SDL_CDClose(CDRom);
-	CDMode = ":off";
+	CDMode = CDModeOff;
     }
 #elif defined(USE_LIBCDA)
-    if (strcmp(CDMode,":off") && strcmp(CDMode,":stopped"))
+    if (CDMode != CDModeOff && CDMode != CDModeStopped)
         cd_stop();
-	CDMode = ":stopped";
-    if (strcmp(CDMode,":off")) {
+	CDMode = CDModeStopped;
+    if (CDMode == CDModeStopped) {
         cd_close();
         cd_exit();
-	CDMode = ":off";
+	CDMode = CDModeOff;
     }
 #elif defined(USE_CDDA)
     close(CDDrive);
diff --git a/src/stratagus/script.cpp b/src/stratagus/script.cpp
index fff0c9058..9879ee649 100644
--- a/src/stratagus/script.cpp
+++ b/src/stratagus/script.cpp
@@ -904,7 +904,7 @@ global void SavePreferences(void)
     }
     fprintf(fd,"(set-music-volume! %d)\n", MusicVolume);
 #if defined(USE_SDLCD) || defined(USE_LIBCDA) || defined(USE_CDDA)
-    fprintf(fd,"(set-cd-mode! \"%s\")\n", CDMode);
+    fprintf(fd,"(set-cd-mode! \"%d\")\n", CDMode);
 #endif
 #endif
 
diff --git a/src/stratagus/stratagus.cpp b/src/stratagus/stratagus.cpp
index bbbf5e00c..d16ae7bf3 100644
--- a/src/stratagus/stratagus.cpp
+++ b/src/stratagus/stratagus.cpp
@@ -1075,7 +1075,7 @@ global void MenuLoop(char* filename, WorldMap* map)
 	    // FIXME: If second loop?
 
 	    if( !PlayingMusic && strcmp(TitleMusic,MenuMusic) ) {
-		if (!strcmp(CDMode, ":off")) {
+		if (CDMode == CDModeOff) {
 		    PlayMusic(MenuMusic);
 		} else {
 		    CDRomCheck(NULL);
diff --git a/src/ui/menus.cpp b/src/ui/menus.cpp
index 1e20a5216..7490a2708 100644
--- a/src/ui/menus.cpp
+++ b/src/ui/menus.cpp
@@ -1562,7 +1562,7 @@ local void SoundOptionsInit(Menuitem *mi __attribute__((unused)))
 	menu->items[11].flags = 0;
     }
 #if defined(USE_LIBCDA) || defined(USE_SDLCD) || defined(USE_CDDA)
-    if (strcmp(":off", CDMode) && strcmp(":stopped", CDMode)) {
+    if (CDMode != CDModeStopped && CDMode != CDModeOff) {
 	menu->items[8].flags = MenuButtonDisabled;
 	menu->items[11].flags = MenuButtonDisabled;
     }
@@ -1580,7 +1580,7 @@ local void SoundOptionsInit(Menuitem *mi __attribute__((unused)))
     menu->items[21].flags = MenuButtonDisabled;		// random tracks button
 #if defined(USE_LIBCDA) || defined(USE_SDLCD) || defined(USE_CDDA)
     menu->items[17].flags = 0;			// cd power
-    if (strcmp(":off", CDMode) && strcmp(":stopped", CDMode)) {
+    if (CDMode != CDModeStopped && CDMode != CDModeOff) {
 #if (!defined(USE_WIN32) && defined(USE_LIBCDA)) || defined(USE_CDDA)
 	int i = 0;
 #ifdef USE_LIBCDA
@@ -1595,10 +1595,10 @@ local void SoundOptionsInit(Menuitem *mi __attribute__((unused)))
 	menu->items[19].flags = 0;
 	menu->items[21].flags = 0;
 
-	if (!strcmp(":all", CDMode)) {
+	if (CDMode == CDModeAll) {
 	    menu->items[19].d.gem.state = MI_GSTATE_CHECKED;
 	    menu->items[21].d.gem.state = MI_GSTATE_UNCHECKED;
-	} else if (!strcmp(":random", CDMode)) {
+	} else if (CDMode == CDModeRandom) {
 	    menu->items[19].d.gem.state = MI_GSTATE_UNCHECKED;
 	    menu->items[21].d.gem.state = MI_GSTATE_CHECKED;
 	}
@@ -1814,36 +1814,36 @@ local void SetCdPower(Menuitem *mi __attribute__((unused)))
 #ifdef WITH_SOUND
 #ifdef USE_SDLCD
     // Start Playing CD
-    if (!strcmp(":off", CDMode) || !strcmp(":stopped", CDMode)) {
+    if (CDMode == CDModeOff || CDMode == CDModeStopped) {
 #ifdef USE_WIN32
 	SDL_CDResume(CDRom);
 #endif
-	PlayCDRom(":random");
+	PlayCDRom(CDModeRandom);
     } else {
     // Stop Playing CD
         SDL_CDPause(CDRom);
-	CDMode = ":stopped";
+	CDMode = CDModeStopped;
     }
-    if (strcmp(":off", CDMode) && strcmp(":stopped", CDMode)) {
+    if (CDMode != CDModeOff && CDMode != CDModeStopped) {
 	StopMusic();
     }
 #elif defined(USE_LIBCDA)
     // Start Playing CD
-    if (!strcmp(":off", CDMode) || !strcmp(":stopped", CDMode)) {
-	PlayCDRom(":random");
+    if (CDMode == CDModeOff || CDMode == CDModeStopped) {
+	PlayCDRom(CDModeRandom);
     } else {
     // Stop Playing CD
         cd_pause();
-	CDMode = ":stopped";
+	CDMode = CDModeStopped;
     }
 #elif defined(USE_CDDA)
     // Start Playing CD
-    if (!strcmp(":off", CDMode) || !strcmp(":stopped", CDMode)) {
-	PlayCDRom(":random");
+    if (CDMode == CDModeOff || CDMode == CDModeStopped) {
+	PlayCDRom(CDModeRandom);
     } else {
     // Stop Playing CD
 	StopMusic();
-	CDMode = ":stopped";
+	CDMode = CDModeStopped;
     }
 #endif
 #endif
@@ -1889,7 +1889,7 @@ local void SetCommandKey(Menuitem *mi __attribute__((unused)))
 local void SetCdModeAll(Menuitem *mi __attribute__((unused)))
 {
 #if defined(WITH_SOUND) && (defined(USE_LIBCDA) || defined(USE_SDLCD))
-    CDMode = ":all";
+    CDMode = CDModeAll;
 #endif
     SoundOptionsInit(NULL);
 }
@@ -1900,7 +1900,7 @@ local void SetCdModeAll(Menuitem *mi __attribute__((unused)))
 local void SetCdModeRandom(Menuitem *mi __attribute__((unused)))
 {
 #if defined(WITH_SOUND) && (defined(USE_LIBCDA) || defined(USE_SDLCD))
-    CDMode = ":random";
+    CDMode = CDModeRandom;
 #endif
     SoundOptionsInit(NULL);
 }