aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/Input/in_cdda/MCI.Cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Plugins/Input/in_cdda/MCI.Cpp')
-rw-r--r--Src/Plugins/Input/in_cdda/MCI.Cpp152
1 files changed, 152 insertions, 0 deletions
diff --git a/Src/Plugins/Input/in_cdda/MCI.Cpp b/Src/Plugins/Input/in_cdda/MCI.Cpp
new file mode 100644
index 00000000..26132b12
--- /dev/null
+++ b/Src/Plugins/Input/in_cdda/MCI.Cpp
@@ -0,0 +1,152 @@
+#include "main.h"
+
+MCIERROR MCISendCommand(MCIDEVICEID IDDevice, UINT uMsg, DWORD fdwCommand, DWORD_PTR dwParam)
+{
+ MCIERROR nErr = mciSendCommand(IDDevice, uMsg, fdwCommand, dwParam);
+#if 0
+ if (nErr)
+ {
+ wchar_t szError[256] = {0};
+ mciGetErrorString(nErr, szError, 256);
+ MessageBox(NULL,szError,L"MCI CD Error",MB_OK);
+ }
+#endif
+ return nErr;
+}
+
+int isMediaPresent(MCIDEVICEID wDeviceID)
+{
+ MCI_STATUS_PARMS p;
+ p.dwItem=MCI_STATUS_MEDIA_PRESENT;
+ if (MCISendCommand(wDeviceID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD_PTR)&p)) return 1;
+ return p.dwReturn?1:0;
+}
+
+BOOL CDOpen(MCIDEVICEID* lpDeviceID, int device, const wchar_t *alias)
+{
+ //OutputDebugString("Calling cdopen()\n");
+ MCI_OPEN_PARMS sMCIOpen;
+ MCI_SET_PARMS sMCISet;
+ wchar_t zDevice[3]={(wchar_t)device,':',0};
+ DWORD nErr;
+
+ sMCIOpen.dwCallback = 0;
+ sMCIOpen.wDeviceID = 0;
+ sMCIOpen.lpstrAlias = alias;
+ sMCIOpen.lpstrDeviceType = (LPCTSTR) MCI_DEVTYPE_CD_AUDIO;
+ sMCIOpen.lpstrElementName = zDevice;
+ nErr = MCISendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_SHAREABLE |
+ MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT |
+ (alias ? MCI_OPEN_ALIAS : 0), (DWORD_PTR) &sMCIOpen);
+ if (nErr)
+ {
+ nErr = MCISendCommand(0, MCI_OPEN, MCI_OPEN_TYPE |
+ MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT |
+ (alias ? MCI_OPEN_ALIAS : 0), (DWORD_PTR) &sMCIOpen);
+ if (nErr)
+ {
+ return FALSE;
+ }
+ }
+
+ sMCISet.dwTimeFormat = MCI_FORMAT_TMSF;
+ MCISendCommand (sMCIOpen.wDeviceID, MCI_SET, MCI_SET_TIME_FORMAT, (DWORD_PTR) &sMCISet);
+
+ *lpDeviceID = sMCIOpen.wDeviceID;
+
+ return TRUE;
+}
+
+void CDClose(MCIDEVICEID* lpDeviceID)
+{
+ MCI_GENERIC_PARMS sMCIGeneric;
+
+ sMCIGeneric.dwCallback = (DWORD_PTR) line.hMainWindow;
+ MCISendCommand(*lpDeviceID, MCI_CLOSE, MCI_WAIT, (DWORD_PTR) &sMCIGeneric);
+
+ *lpDeviceID = 0;
+}
+
+void CDEject(MCIDEVICEID wDeviceID)
+{
+ MCI_SET_PARMS mciset;
+ MCISendCommand (wDeviceID, MCI_SET, MCI_SET_DOOR_OPEN,(DWORD_PTR) &mciset);
+}
+
+unsigned int CDGetTracks(MCIDEVICEID wDeviceID)
+{
+ MCI_STATUS_PARMS sMCIStatus;
+ sMCIStatus.dwItem = MCI_STATUS_NUMBER_OF_TRACKS;
+ if (MCISendCommand (wDeviceID, MCI_STATUS, MCI_STATUS_ITEM | MCI_WAIT,(DWORD_PTR) &sMCIStatus)) return -1;
+ return sMCIStatus.dwReturn;
+}
+
+unsigned int CDGetCurrTrack(MCIDEVICEID wDeviceID)
+{
+ MCI_STATUS_PARMS sMCIStatus;
+
+ sMCIStatus.dwItem = MCI_STATUS_POSITION;
+ MCISendCommand (wDeviceID, MCI_STATUS, MCI_STATUS_ITEM | MCI_WAIT,(DWORD_PTR) &sMCIStatus);
+
+ return ((int) MCI_TMSF_TRACK (sMCIStatus.dwReturn));
+}
+
+int CDPlay(MCIDEVICEID wDeviceID, unsigned int nTrack, BOOL bResume, unsigned int nMin, unsigned int nSec, unsigned int endms)
+{
+ MCI_PLAY_PARMS sMCIPlay;
+ unsigned int nActualTrack = nTrack;
+
+ sMCIPlay.dwFrom = MCI_MAKE_TMSF (nActualTrack, nMin, nSec, 0);
+ sMCIPlay.dwTo = MCI_MAKE_TMSF (nActualTrack, endms/60000, (endms/1000)%60,0);
+ if (!bResume)
+ {
+ return MCISendCommand (wDeviceID, MCI_PLAY, MCI_FROM | MCI_TO ,(DWORD_PTR) &sMCIPlay);
+ }
+ else
+ {
+ return MCISendCommand (wDeviceID, MCI_PLAY, MCI_FROM | MCI_TO, (DWORD_PTR) (LPVOID) &sMCIPlay);
+ }
+}
+
+void CDStop(MCIDEVICEID wDeviceID)
+{
+ MCISendCommand(wDeviceID, MCI_STOP, 0, 0);
+}
+
+void CDPause(MCIDEVICEID wDeviceID)
+{
+ MCISendCommand(wDeviceID, MCI_PAUSE, 0,0);
+}
+
+unsigned int CDGetTrackLength(MCIDEVICEID wDeviceID, unsigned int nTrack)
+{
+ MCI_STATUS_PARMS sMCIStatus;
+ int r;
+
+ sMCIStatus.dwItem = MCI_STATUS_POSITION ;
+ sMCIStatus.dwTrack = nTrack+1;
+ if (MCISendCommand (wDeviceID, MCI_STATUS, MCI_STATUS_ITEM | MCI_TRACK | MCI_WAIT,(DWORD_PTR) &sMCIStatus)) // if error than last track
+ {
+ sMCIStatus.dwItem = MCI_STATUS_LENGTH;
+ sMCIStatus.dwTrack = nTrack;
+ if (MCISendCommand (wDeviceID, MCI_STATUS, MCI_STATUS_ITEM | MCI_TRACK | MCI_WAIT,(DWORD_PTR) &sMCIStatus)) return -1000;
+ return sMCIStatus.dwReturn;
+ }
+
+ r=sMCIStatus.dwReturn;
+ sMCIStatus.dwItem = MCI_STATUS_POSITION ;
+ sMCIStatus.dwTrack = nTrack;
+ if (MCISendCommand (wDeviceID, MCI_STATUS, MCI_STATUS_ITEM | MCI_TRACK | MCI_WAIT,(DWORD_PTR) &sMCIStatus)) return -1000;
+ return r-sMCIStatus.dwReturn;
+}
+
+BOOL CDID(MCIDEVICEID wDeviceID, wchar_t *id, size_t len)
+{
+ MCI_INFO_PARMS sMCIInfo;
+ sMCIInfo.dwCallback=0;
+ sMCIInfo.dwRetSize=len;
+ sMCIInfo.lpstrReturn=id;
+ DWORD nErr= MCISendCommand(wDeviceID, MCI_INFO, MCI_INFO_MEDIA_IDENTITY, (DWORD_PTR)&sMCIInfo);
+
+ return !nErr;
+} \ No newline at end of file