X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=cd_win.c;h=e3359487ff4365be89808dde7d0da11ee3d4e802;hb=d873365280b22b93ed9a530c856e32ca37a7acd9;hp=3e249d13015d51502818d22ac2023b862f0808a6;hpb=8dcce44300385b12c46d494c06aadcfa35a8bc14;p=xonotic%2Fdarkplaces.git diff --git a/cd_win.c b/cd_win.c index 3e249d13..e3359487 100644 --- a/cd_win.c +++ b/cd_win.c @@ -8,7 +8,7 @@ of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -24,19 +24,18 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "quakedef.h" extern HWND mainwindow; -extern cvar_t bgmvolume; +qboolean cdaudioinitialized = false; static qboolean cdValid = false; -static qboolean playing = false; -static qboolean wasPlaying = false; -static qboolean initialized = false; -static qboolean enabled = false; +static qboolean playing = false; +static qboolean wasPlaying = false; +static qboolean initialized = false; +static qboolean enabled = false; static qboolean playLooping = false; -static float cdvolume; -static byte remap[100]; -static byte cdrom; -static byte playTrack; -static byte maxTrack; +static float cdvolume; +static qbyte remap[100]; +static qbyte playTrack; +static qbyte maxTrack; UINT wDeviceID; @@ -45,7 +44,7 @@ static void CDAudio_Eject(void) { DWORD dwReturn; - if (dwReturn = mciSendCommand(wDeviceID, MCI_SET, MCI_SET_DOOR_OPEN, (DWORD)NULL)) + if ((dwReturn = mciSendCommand(wDeviceID, MCI_SET, MCI_SET_DOOR_OPEN, (DWORD)NULL))) Con_DPrintf("MCI_SET_DOOR_OPEN failed (%i)\n", dwReturn); } @@ -54,7 +53,7 @@ static void CDAudio_CloseDoor(void) { DWORD dwReturn; - if (dwReturn = mciSendCommand(wDeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, (DWORD)NULL)) + if ((dwReturn = mciSendCommand(wDeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, (DWORD)NULL))) Con_DPrintf("MCI_SET_DOOR_CLOSED failed (%i)\n", dwReturn); } @@ -68,7 +67,7 @@ static int CDAudio_GetAudioDiskInfo(void) cdValid = false; mciStatusParms.dwItem = MCI_STATUS_READY; - dwReturn = mciSendCommand(wDeviceID, MCI_STATUS, MCI_STATUS_ITEM | MCI_WAIT, (DWORD) (LPVOID) &mciStatusParms); + dwReturn = mciSendCommand(wDeviceID, MCI_STATUS, MCI_STATUS_ITEM | MCI_WAIT, (DWORD) (LPVOID) &mciStatusParms); if (dwReturn) { Con_DPrintf("CDAudio: drive ready test - get status failed\n"); @@ -81,7 +80,7 @@ static int CDAudio_GetAudioDiskInfo(void) } mciStatusParms.dwItem = MCI_STATUS_NUMBER_OF_TRACKS; - dwReturn = mciSendCommand(wDeviceID, MCI_STATUS, MCI_STATUS_ITEM | MCI_WAIT, (DWORD) (LPVOID) &mciStatusParms); + dwReturn = mciSendCommand(wDeviceID, MCI_STATUS, MCI_STATUS_ITEM | MCI_WAIT, (DWORD) (LPVOID) &mciStatusParms); if (dwReturn) { Con_DPrintf("CDAudio: get tracks - status failed\n"); @@ -100,15 +99,15 @@ static int CDAudio_GetAudioDiskInfo(void) } -void CDAudio_Play(byte track, qboolean looping) +void CDAudio_Play(qbyte track, qboolean looping) { DWORD dwReturn; - MCI_PLAY_PARMS mciPlayParms; + MCI_PLAY_PARMS mciPlayParms; MCI_STATUS_PARMS mciStatusParms; if (!enabled) return; - + if (!cdValid) { CDAudio_GetAudioDiskInfo(); @@ -127,7 +126,7 @@ void CDAudio_Play(byte track, qboolean looping) // don't try to play a non-audio track mciStatusParms.dwItem = MCI_CDA_STATUS_TYPE_TRACK; mciStatusParms.dwTrack = track; - dwReturn = mciSendCommand(wDeviceID, MCI_STATUS, MCI_STATUS_ITEM | MCI_TRACK | MCI_WAIT, (DWORD) (LPVOID) &mciStatusParms); + dwReturn = mciSendCommand(wDeviceID, MCI_STATUS, MCI_STATUS_ITEM | MCI_TRACK | MCI_WAIT, (DWORD) (LPVOID) &mciStatusParms); if (dwReturn) { Con_DPrintf("MCI_STATUS failed (%i)\n", dwReturn); @@ -142,7 +141,7 @@ void CDAudio_Play(byte track, qboolean looping) // get the length of the track to be played mciStatusParms.dwItem = MCI_STATUS_LENGTH; mciStatusParms.dwTrack = track; - dwReturn = mciSendCommand(wDeviceID, MCI_STATUS, MCI_STATUS_ITEM | MCI_TRACK | MCI_WAIT, (DWORD) (LPVOID) &mciStatusParms); + dwReturn = mciSendCommand(wDeviceID, MCI_STATUS, MCI_STATUS_ITEM | MCI_TRACK | MCI_WAIT, (DWORD) (LPVOID) &mciStatusParms); if (dwReturn) { Con_DPrintf("MCI_STATUS failed (%i)\n", dwReturn); @@ -156,10 +155,10 @@ void CDAudio_Play(byte track, qboolean looping) CDAudio_Stop(); } - mciPlayParms.dwFrom = MCI_MAKE_TMSF(track, 0, 0, 0); + mciPlayParms.dwFrom = MCI_MAKE_TMSF(track, 0, 0, 0); mciPlayParms.dwTo = (mciStatusParms.dwReturn << 8) | track; - mciPlayParms.dwCallback = (DWORD)mainwindow; - dwReturn = mciSendCommand(wDeviceID, MCI_PLAY, MCI_NOTIFY | MCI_FROM | MCI_TO, (DWORD)(LPVOID) &mciPlayParms); + mciPlayParms.dwCallback = (DWORD)mainwindow; + dwReturn = mciSendCommand(wDeviceID, MCI_PLAY, MCI_NOTIFY | MCI_FROM | MCI_TO, (DWORD)(LPVOID) &mciPlayParms); if (dwReturn) { Con_DPrintf("CDAudio: MCI_PLAY failed (%i)\n", dwReturn); @@ -181,11 +180,11 @@ void CDAudio_Stop(void) if (!enabled) return; - + if (!playing) return; - if (dwReturn = mciSendCommand(wDeviceID, MCI_STOP, 0, (DWORD)NULL)) + if ((dwReturn = mciSendCommand(wDeviceID, MCI_STOP, 0, (DWORD)NULL))) Con_DPrintf("MCI_STOP failed (%i)", dwReturn); wasPlaying = false; @@ -205,7 +204,7 @@ void CDAudio_Pause(void) return; mciGenericParms.dwCallback = (DWORD)mainwindow; - if (dwReturn = mciSendCommand(wDeviceID, MCI_PAUSE, 0, (DWORD)(LPVOID) &mciGenericParms)) + if ((dwReturn = mciSendCommand(wDeviceID, MCI_PAUSE, 0, (DWORD)(LPVOID) &mciGenericParms))) Con_DPrintf("MCI_PAUSE failed (%i)", dwReturn); wasPlaying = playing; @@ -216,21 +215,21 @@ void CDAudio_Pause(void) void CDAudio_Resume(void) { DWORD dwReturn; - MCI_PLAY_PARMS mciPlayParms; + MCI_PLAY_PARMS mciPlayParms; if (!enabled) return; - + if (!cdValid) return; if (!wasPlaying) return; - - mciPlayParms.dwFrom = MCI_MAKE_TMSF(playTrack, 0, 0, 0); - mciPlayParms.dwTo = MCI_MAKE_TMSF(playTrack + 1, 0, 0, 0); - mciPlayParms.dwCallback = (DWORD)mainwindow; - dwReturn = mciSendCommand(wDeviceID, MCI_PLAY, MCI_TO | MCI_NOTIFY, (DWORD)(LPVOID) &mciPlayParms); + + mciPlayParms.dwFrom = MCI_MAKE_TMSF(playTrack, 0, 0, 0); + mciPlayParms.dwTo = MCI_MAKE_TMSF(playTrack + 1, 0, 0, 0); + mciPlayParms.dwCallback = (DWORD)mainwindow; + dwReturn = mciSendCommand(wDeviceID, MCI_PLAY, MCI_TO | MCI_NOTIFY, (DWORD)(LPVOID) &mciPlayParms); if (dwReturn) { Con_DPrintf("CDAudio: MCI_PLAY failed (%i)\n", dwReturn); @@ -242,22 +241,22 @@ void CDAudio_Resume(void) static void CD_f (void) { - char *command; - int ret; - int n; + const char *command; + int ret; + int n; if (Cmd_Argc() < 2) return; command = Cmd_Argv (1); - if (Q_strcasecmp(command, "on") == 0) + if (strcasecmp(command, "on") == 0) { enabled = true; return; } - if (Q_strcasecmp(command, "off") == 0) + if (strcasecmp(command, "off") == 0) { if (playing) CDAudio_Stop(); @@ -265,7 +264,7 @@ static void CD_f (void) return; } - if (Q_strcasecmp(command, "reset") == 0) + if (strcasecmp(command, "reset") == 0) { enabled = true; if (playing) @@ -276,7 +275,7 @@ static void CD_f (void) return; } - if (Q_strcasecmp(command, "remap") == 0) + if (strcasecmp(command, "remap") == 0) { ret = Cmd_Argc() - 2; if (ret <= 0) @@ -291,7 +290,7 @@ static void CD_f (void) return; } - if (Q_strcasecmp(command, "close") == 0) + if (strcasecmp(command, "close") == 0) { CDAudio_CloseDoor(); return; @@ -307,37 +306,37 @@ static void CD_f (void) } } - if (Q_strcasecmp(command, "play") == 0) + if (strcasecmp(command, "play") == 0) { - CDAudio_Play((byte)atoi(Cmd_Argv (2)), false); + CDAudio_Play((qbyte)atoi(Cmd_Argv (2)), false); return; } - if (Q_strcasecmp(command, "loop") == 0) + if (strcasecmp(command, "loop") == 0) { - CDAudio_Play((byte)atoi(Cmd_Argv (2)), true); + CDAudio_Play((qbyte)atoi(Cmd_Argv (2)), true); return; } - if (Q_strcasecmp(command, "stop") == 0) + if (strcasecmp(command, "stop") == 0) { CDAudio_Stop(); return; } - if (Q_strcasecmp(command, "pause") == 0) + if (strcasecmp(command, "pause") == 0) { CDAudio_Pause(); return; } - if (Q_strcasecmp(command, "resume") == 0) + if (strcasecmp(command, "resume") == 0) { CDAudio_Resume(); return; } - if (Q_strcasecmp(command, "eject") == 0) + if (strcasecmp(command, "eject") == 0) { if (playing) CDAudio_Stop(); @@ -346,7 +345,7 @@ static void CD_f (void) return; } - if (Q_strcasecmp(command, "info") == 0) + if (strcasecmp(command, "info") == 0) { Con_Printf("%u tracks\n", maxTrack); if (playing) @@ -361,7 +360,7 @@ static void CD_f (void) LONG CDAudio_MessageHandler(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { - if (lParam != wDeviceID) + if (lParam != (LPARAM)wDeviceID) return 1; switch (wParam) @@ -403,13 +402,13 @@ void CDAudio_Update(void) { if (cdvolume) { - Cvar_SetValue ("bgmvolume", 0.0); + Cvar_SetValueQuick (&bgmvolume, 0.0); cdvolume = bgmvolume.value; CDAudio_Pause (); } else { - Cvar_SetValue ("bgmvolume", 1.0); + Cvar_SetValueQuick (&bgmvolume, 1.0); cdvolume = bgmvolume.value; CDAudio_Resume (); } @@ -419,48 +418,56 @@ void CDAudio_Update(void) int CDAudio_Init(void) { - DWORD dwReturn; - MCI_OPEN_PARMS mciOpenParms; - MCI_SET_PARMS mciSetParms; - int n; + int n; if (cls.state == ca_dedicated) return -1; - if (COM_CheckParm("-nocdaudio")) + if (COM_CheckParm("-nocdaudio") || COM_CheckParm("-safe")) return -1; + for (n = 0; n < 100; n++) + remap[n] = n; + cdaudioinitialized = true; + enabled = true; + + Cmd_AddCommand("cd", CD_f); + + return 0; +} + +int CDAudio_Startup(void) +{ + DWORD dwReturn; + MCI_OPEN_PARMS mciOpenParms; + MCI_SET_PARMS mciSetParms; + mciOpenParms.lpstrDeviceType = "cdaudio"; - if (dwReturn = mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_SHAREABLE, (DWORD) (LPVOID) &mciOpenParms)) + if ((dwReturn = mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_SHAREABLE, (DWORD) (LPVOID) &mciOpenParms))) { Con_Printf("CDAudio_Init: MCI_OPEN failed (%i)\n", dwReturn); return -1; } wDeviceID = mciOpenParms.wDeviceID; - // Set the time format to track/minute/second/frame (TMSF). - mciSetParms.dwTimeFormat = MCI_FORMAT_TMSF; - if (dwReturn = mciSendCommand(wDeviceID, MCI_SET, MCI_SET_TIME_FORMAT, (DWORD)(LPVOID) &mciSetParms)) - { + // Set the time format to track/minute/second/frame (TMSF). + mciSetParms.dwTimeFormat = MCI_FORMAT_TMSF; + if ((dwReturn = mciSendCommand(wDeviceID, MCI_SET, MCI_SET_TIME_FORMAT, (DWORD)(LPVOID) &mciSetParms))) + { Con_Printf("MCI_SET_TIME_FORMAT failed (%i)\n", dwReturn); - mciSendCommand(wDeviceID, MCI_CLOSE, 0, (DWORD)NULL); + mciSendCommand(wDeviceID, MCI_CLOSE, 0, (DWORD)NULL); return -1; - } - - for (n = 0; n < 100; n++) - remap[n] = n; - initialized = true; - enabled = true; + } if (CDAudio_GetAudioDiskInfo()) { - Con_Printf("CDAudio_Init: No CD in player.\n"); + Con_DPrintf("CDAudio_Init: No CD in player.\n"); cdValid = false; } - Cmd_AddCommand ("cd", CD_f); + initialized = true; - Con_Printf("CD Audio Initialized\n"); + Con_DPrintf("CD Audio Initialized\n"); return 0; } @@ -473,4 +480,6 @@ void CDAudio_Shutdown(void) CDAudio_Stop(); if (mciSendCommand(wDeviceID, MCI_CLOSE, MCI_WAIT, (DWORD)NULL)) Con_DPrintf("CDAudio_Shutdown: MCI_CLOSE failed\n"); + initialized = false; } +