X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=cd_win.c;h=a79a24d4ec7f1d92373ba6a3e99f3dd2277cb7ed;hp=8d9f56841fa1a305412fcd5fd9b7f707986eb24a;hb=ac947d2fbb445473c266390a1fca26c8be8611c4;hpb=55ed30ad15c72f52aea124389b9997745d4dbf02 diff --git a/cd_win.c b/cd_win.c index 8d9f5684..a79a24d4 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. @@ -21,61 +21,47 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // rights reserved. #include + #include "quakedef.h" +#include "cdaudio.h" -extern HWND mainwindow; -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 playLooping = false; -static float cdvolume; -static qbyte remap[100]; -static qbyte playTrack; -static qbyte maxTrack; +extern HWND mainwindow; UINT wDeviceID; - -static void CDAudio_Eject(void) +void CDAudio_SysEject(void) { DWORD dwReturn; if ((dwReturn = mciSendCommand(wDeviceID, MCI_SET, MCI_SET_DOOR_OPEN, (DWORD)NULL))) - Con_DPrintf("MCI_SET_DOOR_OPEN failed (%i)\n", dwReturn); + Con_Printf("MCI_SET_DOOR_OPEN failed (%i)\n", dwReturn); } -static void CDAudio_CloseDoor(void) +void CDAudio_SysCloseDoor(void) { DWORD dwReturn; if ((dwReturn = mciSendCommand(wDeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, (DWORD)NULL))) - Con_DPrintf("MCI_SET_DOOR_CLOSED failed (%i)\n", dwReturn); + Con_Printf("MCI_SET_DOOR_CLOSED failed (%i)\n", dwReturn); } - -static int CDAudio_GetAudioDiskInfo(void) +int CDAudio_SysGetAudioDiskInfo(void) { DWORD dwReturn; MCI_STATUS_PARMS mciStatusParms; - - cdValid = false; - mciStatusParms.dwItem = MCI_STATUS_READY; 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"); + Con_Print("CDAudio: drive ready test - get status failed\n"); return -1; } if (!mciStatusParms.dwReturn) { - Con_DPrintf("CDAudio: drive not ready\n"); + Con_Print("CDAudio: drive not ready\n"); return -1; } @@ -83,76 +69,64 @@ static int CDAudio_GetAudioDiskInfo(void) dwReturn = mciSendCommand(wDeviceID, MCI_STATUS, MCI_STATUS_ITEM | MCI_WAIT, (DWORD) (LPVOID) &mciStatusParms); if (dwReturn) { - Con_DPrintf("CDAudio: get tracks - status failed\n"); + Con_Print("CDAudio: get tracks - status failed\n"); return -1; } if (mciStatusParms.dwReturn < 1) { - Con_DPrintf("CDAudio: no music tracks\n"); + Con_Print("CDAudio: no music tracks\n"); return -1; } - cdValid = true; - maxTrack = mciStatusParms.dwReturn; + return mciStatusParms.dwReturn; +} - return 0; + +float CDAudio_SysGetVolume (void) +{ + // IMPLEMENTME + return -1.0f; +} + + +void CDAudio_SysSetVolume (float volume) +{ + // IMPLEMENTME } -void CDAudio_Play(qbyte track, qboolean looping) +int CDAudio_SysPlay (qbyte track) { DWORD dwReturn; MCI_PLAY_PARMS mciPlayParms; MCI_STATUS_PARMS mciStatusParms; - if (!enabled) - return; - - if (!cdValid) - { - CDAudio_GetAudioDiskInfo(); - if (!cdValid) - return; - } - - track = remap[track]; - - if (track < 1 || track > maxTrack) - { - Con_DPrintf("CDAudio: Bad track number %u.\n", track); - return; - } - // 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); if (dwReturn) { - Con_DPrintf("MCI_STATUS failed (%i)\n", dwReturn); - return; + Con_Printf("MCI_STATUS failed (%i)\n", dwReturn); + return -1; } if (mciStatusParms.dwReturn != MCI_CDA_TRACK_AUDIO) { Con_Printf("CDAudio: track %i is not audio\n", track); - return; + return -1; } + if (cdPlaying) + CDAudio_Stop(); + // 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); if (dwReturn) { - Con_DPrintf("MCI_STATUS failed (%i)\n", dwReturn); - return; - } - - if (playing) - { - if (playTrack == track) - return; - CDAudio_Stop(); + Con_Printf("MCI_STATUS failed (%i)\n", dwReturn); + return -1; } mciPlayParms.dwFrom = MCI_MAKE_TMSF(track, 0, 0, 0); @@ -161,216 +135,71 @@ void CDAudio_Play(qbyte track, qboolean looping) 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); - return; + Con_Printf("CDAudio: MCI_PLAY failed (%i)\n", dwReturn); + return -1; } - playLooping = looping; - playTrack = track; - playing = true; - - if (cdvolume == 0.0) - CDAudio_Pause (); + return 0; } -void CDAudio_Stop(void) +int CDAudio_SysStop (void) { DWORD dwReturn; - if (!enabled) - return; - - if (!playing) - return; - if ((dwReturn = mciSendCommand(wDeviceID, MCI_STOP, 0, (DWORD)NULL))) - Con_DPrintf("MCI_STOP failed (%i)", dwReturn); - - wasPlaying = false; - playing = false; + { + Con_Printf("MCI_STOP failed (%i)\n", dwReturn); + return -1; + } + return 0; } - -void CDAudio_Pause(void) +int CDAudio_SysPause (void) { DWORD dwReturn; MCI_GENERIC_PARMS mciGenericParms; - if (!enabled) - return; - - if (!playing) - return; - mciGenericParms.dwCallback = (DWORD)mainwindow; if ((dwReturn = mciSendCommand(wDeviceID, MCI_PAUSE, 0, (DWORD)(LPVOID) &mciGenericParms))) - Con_DPrintf("MCI_PAUSE failed (%i)", dwReturn); - - wasPlaying = playing; - playing = false; + { + Con_Printf("MCI_PAUSE failed (%i)\n", dwReturn); + return -1; + } + return 0; } -void CDAudio_Resume(void) +int CDAudio_SysResume (void) { DWORD dwReturn; 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.dwFrom = MCI_MAKE_TMSF(cdPlayTrack, 0, 0, 0); + mciPlayParms.dwTo = MCI_MAKE_TMSF(cdPlayTrack + 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); - return; - } - playing = true; -} - - -static void CD_f (void) -{ - const char *command; - int ret; - int n; - - if (Cmd_Argc() < 2) - return; - - command = Cmd_Argv (1); - - if (Q_strcasecmp(command, "on") == 0) - { - enabled = true; - return; - } - - if (Q_strcasecmp(command, "off") == 0) - { - if (playing) - CDAudio_Stop(); - enabled = false; - return; - } - - if (Q_strcasecmp(command, "reset") == 0) - { - enabled = true; - if (playing) - CDAudio_Stop(); - for (n = 0; n < 100; n++) - remap[n] = n; - CDAudio_GetAudioDiskInfo(); - return; - } - - if (Q_strcasecmp(command, "remap") == 0) - { - ret = Cmd_Argc() - 2; - if (ret <= 0) - { - for (n = 1; n < 100; n++) - if (remap[n] != n) - Con_Printf(" %u -> %u\n", n, remap[n]); - return; - } - for (n = 1; n <= ret; n++) - remap[n] = atoi(Cmd_Argv (n+1)); - return; - } - - if (Q_strcasecmp(command, "close") == 0) - { - CDAudio_CloseDoor(); - return; - } - - if (!cdValid) - { - CDAudio_GetAudioDiskInfo(); - if (!cdValid) - { - Con_Printf("No CD in player.\n"); - return; - } - } - - if (Q_strcasecmp(command, "play") == 0) - { - CDAudio_Play((qbyte)atoi(Cmd_Argv (2)), false); - return; - } - - if (Q_strcasecmp(command, "loop") == 0) - { - CDAudio_Play((qbyte)atoi(Cmd_Argv (2)), true); - return; - } - - if (Q_strcasecmp(command, "stop") == 0) - { - CDAudio_Stop(); - return; - } - - if (Q_strcasecmp(command, "pause") == 0) - { - CDAudio_Pause(); - return; - } - - if (Q_strcasecmp(command, "resume") == 0) - { - CDAudio_Resume(); - return; - } - - if (Q_strcasecmp(command, "eject") == 0) - { - if (playing) - CDAudio_Stop(); - CDAudio_Eject(); - cdValid = false; - return; - } - - if (Q_strcasecmp(command, "info") == 0) - { - Con_Printf("%u tracks\n", maxTrack); - if (playing) - Con_Printf("Currently %s track %u\n", playLooping ? "looping" : "playing", playTrack); - else if (wasPlaying) - Con_Printf("Paused %s track %u\n", playLooping ? "looping" : "playing", playTrack); - Con_Printf("Volume is %f\n", cdvolume); - return; + Con_Printf("CDAudio: MCI_PLAY failed (%i)\n", dwReturn); + return -1; } + return 0; } - -LONG CDAudio_MessageHandler(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +LONG CDAudio_MessageHandler (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { - if (lParam != wDeviceID) + if (lParam != (LPARAM)wDeviceID) return 1; switch (wParam) { case MCI_NOTIFY_SUCCESSFUL: - if (playing) + if (cdPlaying) { - playing = false; - if (playLooping) - CDAudio_Play(playTrack, true); + cdPlaying = false; + if (cdPlayLooping) + CDAudio_Play(cdPlayTrack, true); } break; @@ -379,13 +208,13 @@ LONG CDAudio_MessageHandler(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) break; case MCI_NOTIFY_FAILURE: - Con_DPrintf("MCI_NOTIFY_FAILURE\n"); + Con_Print("MCI_NOTIFY_FAILURE\n"); CDAudio_Stop (); cdValid = false; break; default: - Con_DPrintf("Unexpected MM_MCINOTIFY type (%i)\n", wParam); + Con_Printf("Unexpected MM_MCINOTIFY type (%i)\n", wParam); return 1; } @@ -393,41 +222,20 @@ LONG CDAudio_MessageHandler(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) } -void CDAudio_Update(void) +int CDAudio_SysUpdate (void) { - if (!enabled) - return; - - if (bgmvolume.value != cdvolume) - { - if (cdvolume) - { - Cvar_SetValueQuick (&bgmvolume, 0.0); - cdvolume = bgmvolume.value; - CDAudio_Pause (); - } - else - { - Cvar_SetValueQuick (&bgmvolume, 1.0); - cdvolume = bgmvolume.value; - CDAudio_Resume (); - } - } + return 0; } +void CDAudio_SysInit (void) +{ +} -int CDAudio_Init(void) +int CDAudio_SysStartup (void) { DWORD dwReturn; MCI_OPEN_PARMS mciOpenParms; MCI_SET_PARMS mciSetParms; - int n; - - if (cls.state == ca_dedicated) - return -1; - - if (COM_CheckParm("-nocdaudio") || COM_CheckParm("-safe")) - return -1; mciOpenParms.lpstrDeviceType = "cdaudio"; if ((dwReturn = mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_SHAREABLE, (DWORD) (LPVOID) &mciOpenParms))) @@ -446,40 +254,11 @@ int CDAudio_Init(void) return -1; } - for (n = 0; n < 100; n++) - remap[n] = n; - cdaudioinitialized = true; - initialized = true; - enabled = true; - - if (CDAudio_GetAudioDiskInfo()) - { - Con_Printf("CDAudio_Init: No CD in player.\n"); - cdValid = false; - } - - Cmd_AddCommand ("cd", CD_f); - - Con_Printf("CD Audio Initialized\n"); - return 0; } - -void CDAudio_Shutdown(void) +void CDAudio_SysShutdown (void) { - if (!initialized) - return; - CDAudio_Stop(); if (mciSendCommand(wDeviceID, MCI_CLOSE, MCI_WAIT, (DWORD)NULL)) - Con_DPrintf("CDAudio_Shutdown: MCI_CLOSE failed\n"); -} - - -void CDAudio_Open(void) -{ -} - -void CDAudio_Close(void) -{ + Con_Print("CDAudio_Shutdown: MCI_CLOSE failed\n"); }