[MPLAY32]
authorDaniel Reimer <reimer.daniel@freenet.de>
Wed, 15 Jan 2014 23:59:44 +0000 (23:59 +0000)
committerDaniel Reimer <reimer.daniel@freenet.de>
Wed, 15 Jan 2014 23:59:44 +0000 (23:59 +0000)
Three patches for mplay32 by Ricardo Hanke. Some more or less heavy tabs->spaces fixing and removing of spaces which are too much by myself
CORE-7590 #resolve
CORE-7594 #resolve
CORE-7613 #resolve

svn path=/trunk/; revision=61640

25 files changed:
reactos/base/applications/mplay32/lang/bg-BG.rc
reactos/base/applications/mplay32/lang/cs-CZ.rc
reactos/base/applications/mplay32/lang/de-DE.rc
reactos/base/applications/mplay32/lang/en-US.rc
reactos/base/applications/mplay32/lang/es-ES.rc
reactos/base/applications/mplay32/lang/fr-FR.rc
reactos/base/applications/mplay32/lang/he-IL.rc
reactos/base/applications/mplay32/lang/it-IT.rc
reactos/base/applications/mplay32/lang/ja-JP.rc
reactos/base/applications/mplay32/lang/nl-NL.rc
reactos/base/applications/mplay32/lang/no-NO.rc
reactos/base/applications/mplay32/lang/pl-PL.rc
reactos/base/applications/mplay32/lang/pt-BR.rc
reactos/base/applications/mplay32/lang/ro-RO.rc
reactos/base/applications/mplay32/lang/ru-RU.rc
reactos/base/applications/mplay32/lang/sk-SK.rc
reactos/base/applications/mplay32/lang/sq-AL.rc
reactos/base/applications/mplay32/lang/sv-SE.rc
reactos/base/applications/mplay32/lang/tr-TR.rc
reactos/base/applications/mplay32/lang/uk-UA.rc
reactos/base/applications/mplay32/lang/zh-CN.rc
reactos/base/applications/mplay32/lang/zh-TW.rc
reactos/base/applications/mplay32/mplay32.c
reactos/base/applications/mplay32/mplay32.h
reactos/base/applications/mplay32/resource.h

index cc4d89e..094f82d 100644 (file)
@@ -13,6 +13,12 @@ BEGIN
         MENUITEM SEPARATOR
         MENUITEM "Из&ход", IDM_EXIT
     END
+    POPUP "&Device"
+    BEGIN
+        MENUITEM "&Properties", IDM_DEVPROPS
+        MENUITEM SEPARATOR
+        MENUITEM "&Volume Control", IDM_VOLUMECTL
+    END
     POPUP "Помо&щ"
     BEGIN
         MENUITEM "&За...", IDM_ABOUT
@@ -31,4 +37,5 @@ BEGIN
     IDS_TOOLTIP_FORWARD "Търсене напред"
     IDS_APPTITLE "Мултимедийният възпроизводител на РеактОС"
     IDS_PLAY "Възпроизвеждане"
+    IDS_DEFAULTMCIERRMSG "No description is available for this error"
 END
index 2074b40..54b2642 100644 (file)
@@ -14,6 +14,12 @@ BEGIN
         MENUITEM SEPARATOR
         MENUITEM "&Ukončit", IDM_EXIT
     END
+    POPUP "&Device"
+    BEGIN
+        MENUITEM "&Properties", IDM_DEVPROPS
+        MENUITEM SEPARATOR
+        MENUITEM "&Volume Control", IDM_VOLUMECTL
+    END
     POPUP "&Nápověda"
     BEGIN
         MENUITEM "&O programu...", IDM_ABOUT
@@ -32,4 +38,5 @@ BEGIN
     IDS_TOOLTIP_FORWARD "Přeskočit vpřed"
     IDS_APPTITLE "ReactOS Přehrávač multimédií"
     IDS_PLAY "Přehrát"
+    IDS_DEFAULTMCIERRMSG "No description is available for this error"
 END
index 4d08873..da98130 100644 (file)
@@ -9,6 +9,12 @@ BEGIN
         MENUITEM SEPARATOR
         MENUITEM "&Beenden", IDM_EXIT
     END
+    POPUP "&Gerät"
+    BEGIN
+        MENUITEM "&Eigenschaften", IDM_DEVPROPS
+        MENUITEM SEPARATOR
+        MENUITEM "&Lautstärkeregelung", IDM_VOLUMECTL
+    END
     POPUP "&Hilfe"
     BEGIN
         MENUITEM "&Über...", IDM_ABOUT
@@ -27,4 +33,5 @@ BEGIN
     IDS_TOOLTIP_FORWARD "Weiter"
     IDS_APPTITLE "ReactOS Multimedia Player"
     IDS_PLAY "Abspielen"
+    IDS_DEFAULTMCIERRMSG "Für diesen Fehler steht keine Beschreibung zur Verfügung"
 END
index fc72ee5..1d051ca 100644 (file)
@@ -9,6 +9,12 @@ BEGIN
         MENUITEM SEPARATOR
         MENUITEM "&Exit", IDM_EXIT
     END
+    POPUP "&Device"
+    BEGIN
+        MENUITEM "&Properties", IDM_DEVPROPS
+        MENUITEM SEPARATOR
+        MENUITEM "&Volume Control", IDM_VOLUMECTL
+    END
     POPUP "&Help"
     BEGIN
         MENUITEM "&About...", IDM_ABOUT
@@ -27,4 +33,5 @@ BEGIN
     IDS_TOOLTIP_FORWARD "Skip Forward"
     IDS_APPTITLE "ReactOS Multimedia Player"
     IDS_PLAY "Play"
+    IDS_DEFAULTMCIERRMSG "No description is available for this error"
 END
index 5ffe585..32820ed 100644 (file)
@@ -9,6 +9,12 @@ BEGIN
         MENUITEM SEPARATOR
         MENUITEM "&Salir", IDM_EXIT
     END
+    POPUP "&Device"
+    BEGIN
+        MENUITEM "&Properties", IDM_DEVPROPS
+        MENUITEM SEPARATOR
+        MENUITEM "&Volume Control", IDM_VOLUMECTL
+    END
     POPUP "Ay&uda"
     BEGIN
         MENUITEM "&Acerca de...", IDM_ABOUT
@@ -27,4 +33,5 @@ BEGIN
     IDS_TOOLTIP_FORWARD "Marca siguiente"
     IDS_APPTITLE "Reproductor Multimedia de ReactOS"
     IDS_PLAY "Reproducir"
+    IDS_DEFAULTMCIERRMSG "No description is available for this error"
 END
index b683ae6..9a16e97 100644 (file)
@@ -9,6 +9,12 @@ BEGIN
         MENUITEM SEPARATOR
         MENUITEM "&Quitter", IDM_EXIT
     END
+    POPUP "&Device"
+    BEGIN
+        MENUITEM "&Properties", IDM_DEVPROPS
+        MENUITEM SEPARATOR
+        MENUITEM "&Volume Control", IDM_VOLUMECTL
+    END
     POPUP "&Aide"
     BEGIN
         MENUITEM "&À propos...", IDM_ABOUT
@@ -27,4 +33,5 @@ BEGIN
     IDS_TOOLTIP_FORWARD "Suivant"
     IDS_APPTITLE "ReactOS Multimedia Player"
     IDS_PLAY "Lire"
+    IDS_DEFAULTMCIERRMSG "No description is available for this error"
 END
index 03a06db..b4509ea 100644 (file)
@@ -9,6 +9,12 @@ BEGIN
         MENUITEM SEPARATOR
         MENUITEM "&יציאה", IDM_EXIT
     END
+    POPUP "&Device"
+    BEGIN
+        MENUITEM "&Properties", IDM_DEVPROPS
+        MENUITEM SEPARATOR
+        MENUITEM "&Volume Control", IDM_VOLUMECTL
+    END
     POPUP "&עזרה"
     BEGIN
         MENUITEM "&אודות", IDM_ABOUT
@@ -27,4 +33,5 @@ BEGIN
     IDS_TOOLTIP_FORWARD "דלג קדימה"
     IDS_APPTITLE "נגן המולטימדיה של ReactOS"
     IDS_PLAY "נגן"
+    IDS_DEFAULTMCIERRMSG "No description is available for this error"
 END
index d254ea7..3787b5f 100644 (file)
@@ -9,6 +9,12 @@ BEGIN
         MENUITEM SEPARATOR
         MENUITEM "&Esci", IDM_EXIT
     END
+    POPUP "&Device"
+    BEGIN
+        MENUITEM "&Properties", IDM_DEVPROPS
+        MENUITEM SEPARATOR
+        MENUITEM "&Volume Control", IDM_VOLUMECTL
+    END
     POPUP "&Aiuto"
     BEGIN
         MENUITEM "&Informazioni...", IDM_ABOUT
@@ -27,4 +33,5 @@ BEGIN
     IDS_TOOLTIP_FORWARD "Successivo"
     IDS_APPTITLE "Riproduttore multimediale ReactOS"
     IDS_PLAY "Riproduci"
+    IDS_DEFAULTMCIERRMSG "No description is available for this error"
 END
index 2bfbe8d..cb620a0 100644 (file)
@@ -9,6 +9,12 @@ BEGIN
         MENUITEM SEPARATOR
         MENUITEM "終了(&E)", IDM_EXIT
     END
+    POPUP "&Device"
+    BEGIN
+        MENUITEM "&Properties", IDM_DEVPROPS
+        MENUITEM SEPARATOR
+        MENUITEM "&Volume Control", IDM_VOLUMECTL
+    END
     POPUP "ヘルプ(&H)"
     BEGIN
         MENUITEM "バージョン情報(&A)...", IDM_ABOUT
@@ -27,4 +33,5 @@ BEGIN
     IDS_TOOLTIP_FORWARD "前へスキップ"
     IDS_APPTITLE "ReactOS マルチメディア プレーヤー"
     IDS_PLAY "再生"
+    IDS_DEFAULTMCIERRMSG "No description is available for this error"
 END
index 18ee7a3..228f59d 100644 (file)
@@ -9,6 +9,12 @@ BEGIN
         MENUITEM SEPARATOR
         MENUITEM "&Afsluiten", IDM_EXIT
     END
+    POPUP "&Device"
+    BEGIN
+        MENUITEM "&Properties", IDM_DEVPROPS
+        MENUITEM SEPARATOR
+        MENUITEM "&Volume Control", IDM_VOLUMECTL
+    END
     POPUP "&Help"
     BEGIN
         MENUITEM "&Over...", IDM_ABOUT
@@ -27,4 +33,5 @@ BEGIN
     IDS_TOOLTIP_FORWARD "Volgende"
     IDS_APPTITLE "ReactOS Multimedia Player"
     IDS_PLAY "Play"
+    IDS_DEFAULTMCIERRMSG "No description is available for this error"
 END
index b998b4e..558d512 100644 (file)
@@ -9,6 +9,12 @@ BEGIN
         MENUITEM SEPARATOR
         MENUITEM "&Avslutt", IDM_EXIT
     END
+    POPUP "&Device"
+    BEGIN
+        MENUITEM "&Properties", IDM_DEVPROPS
+        MENUITEM SEPARATOR
+        MENUITEM "&Volume Control", IDM_VOLUMECTL
+    END
     POPUP "&Hjelp"
     BEGIN
         MENUITEM "&Om...", IDM_ABOUT
@@ -27,4 +33,5 @@ BEGIN
     IDS_TOOLTIP_FORWARD "Spole fremover"
     IDS_APPTITLE "ReactOS Multimedia avspiller"
     IDS_PLAY "Spill"
+    IDS_DEFAULTMCIERRMSG "No description is available for this error"
 END
index b7f9877..1b89df3 100644 (file)
@@ -16,6 +16,12 @@ BEGIN
         MENUITEM SEPARATOR
         MENUITEM "&Wyjdź", IDM_EXIT
     END
+    POPUP "&Device"
+    BEGIN
+        MENUITEM "&Properties", IDM_DEVPROPS
+        MENUITEM SEPARATOR
+        MENUITEM "&Volume Control", IDM_VOLUMECTL
+    END
     POPUP "&Pomoc"
     BEGIN
         MENUITEM "&O programie...", IDM_ABOUT
@@ -34,4 +40,5 @@ BEGIN
     IDS_TOOLTIP_FORWARD "Przeskocz do przodu"
     IDS_APPTITLE "ReactOS Multimedia Player"
     IDS_PLAY "Odtwórz"
+    IDS_DEFAULTMCIERRMSG "No description is available for this error"
 END
index 06dadb4..5724bfb 100644 (file)
@@ -11,6 +11,12 @@ BEGIN
         MENUITEM SEPARATOR
         MENUITEM "&Sair", IDM_EXIT
     END
+    POPUP "&Device"
+    BEGIN
+        MENUITEM "&Properties", IDM_DEVPROPS
+        MENUITEM SEPARATOR
+        MENUITEM "&Volume Control", IDM_VOLUMECTL
+    END
     POPUP "A&juda"
     BEGIN
         MENUITEM "&Sobre...", IDM_ABOUT
@@ -29,4 +35,5 @@ BEGIN
     IDS_TOOLTIP_FORWARD "Pular Próxima"
     IDS_APPTITLE "ReactOS Multimedia Player"
     IDS_PLAY "Executar"
+    IDS_DEFAULTMCIERRMSG "No description is available for this error"
 END
index fa982ad..b690107 100644 (file)
@@ -16,6 +16,12 @@ BEGIN
         MENUITEM SEPARATOR
         MENUITEM "I&eșire", IDM_EXIT
     END
+    POPUP "&Device"
+    BEGIN
+        MENUITEM "&Properties", IDM_DEVPROPS
+        MENUITEM SEPARATOR
+        MENUITEM "&Volume Control", IDM_VOLUMECTL
+    END
     POPUP "&?"
     BEGIN
         MENUITEM "&Despre…", IDM_ABOUT
@@ -34,4 +40,5 @@ BEGIN
     IDS_TOOLTIP_FORWARD "Salt la următor"
     IDS_APPTITLE "Lector multimedia"
     IDS_PLAY "Lecturare"
+    IDS_DEFAULTMCIERRMSG "No description is available for this error"
 END
index 9b76726..58355bd 100644 (file)
@@ -9,6 +9,12 @@ BEGIN
         MENUITEM SEPARATOR
         MENUITEM "&Выход", IDM_EXIT
     END
+    POPUP "&Device"
+    BEGIN
+        MENUITEM "&Properties", IDM_DEVPROPS
+        MENUITEM SEPARATOR
+        MENUITEM "&Volume Control", IDM_VOLUMECTL
+    END
     POPUP "&Помощь"
     BEGIN
         MENUITEM "&О программе...", IDM_ABOUT
@@ -27,4 +33,5 @@ BEGIN
     IDS_TOOLTIP_FORWARD "Вперед"
     IDS_APPTITLE "Проигрыватель ReactOS"
     IDS_PLAY "Воспроизвести"
+    IDS_DEFAULTMCIERRMSG "No description is available for this error"
 END
index 59f226f..06786d6 100644 (file)
@@ -14,6 +14,12 @@ BEGIN
         MENUITEM SEPARATOR
         MENUITEM "S&končiť", IDM_EXIT
     END
+    POPUP "&Device"
+    BEGIN
+        MENUITEM "&Properties", IDM_DEVPROPS
+        MENUITEM SEPARATOR
+        MENUITEM "&Volume Control", IDM_VOLUMECTL
+    END
     POPUP "&Pomocník"
     BEGIN
         MENUITEM "Č&o je...", IDM_ABOUT
@@ -32,4 +38,5 @@ BEGIN
     IDS_TOOLTIP_FORWARD "Preskočiť dopredu"
     IDS_APPTITLE "Multimediálny prehrávač systému ReactOS"
     IDS_PLAY "Prehrať"
+    IDS_DEFAULTMCIERRMSG "No description is available for this error"
 END
index 8543fe0..60f1ace 100644 (file)
@@ -13,6 +13,12 @@ BEGIN
         MENUITEM SEPARATOR
         MENUITEM "&Dil", IDM_EXIT
     END
+    POPUP "&Device"
+    BEGIN
+        MENUITEM "&Properties", IDM_DEVPROPS
+        MENUITEM SEPARATOR
+        MENUITEM "&Volume Control", IDM_VOLUMECTL
+    END
     POPUP "&Ndihmë"
     BEGIN
         MENUITEM "&Rreth...", IDM_ABOUT
@@ -31,4 +37,5 @@ BEGIN
     IDS_TOOLTIP_FORWARD "Kalo para"
     IDS_APPTITLE "Programi muzikor i ReactOS"
     IDS_PLAY "Fillo"
+    IDS_DEFAULTMCIERRMSG "No description is available for this error"
 END
index 8221a7d..da17bec 100644 (file)
@@ -16,6 +16,12 @@ BEGIN
         MENUITEM SEPARATOR
         MENUITEM "&Avsluta", IDM_EXIT
     END
+    POPUP "&Device"
+    BEGIN
+        MENUITEM "&Properties", IDM_DEVPROPS
+        MENUITEM SEPARATOR
+        MENUITEM "&Volume Control", IDM_VOLUMECTL
+    END
     POPUP "&Hjälp"
     BEGIN
         MENUITEM "&Om...", IDM_ABOUT
@@ -34,4 +40,5 @@ BEGIN
     IDS_TOOLTIP_FORWARD "Spola fremåt"
     IDS_APPTITLE "ReactOS Multimediaspelare"
     IDS_PLAY "Play"
+    IDS_DEFAULTMCIERRMSG "No description is available for this error"
 END
index ebd1bc0..187004c 100644 (file)
@@ -11,6 +11,12 @@ BEGIN
         MENUITEM SEPARATOR
         MENUITEM "&Çıkış", IDM_EXIT
     END
+    POPUP "&Device"
+    BEGIN
+        MENUITEM "&Properties", IDM_DEVPROPS
+        MENUITEM SEPARATOR
+        MENUITEM "&Volume Control", IDM_VOLUMECTL
+    END
     POPUP "&Yardım"
     BEGIN
         MENUITEM "&Hakkında", IDM_ABOUT
@@ -29,4 +35,5 @@ BEGIN
     IDS_TOOLTIP_FORWARD "Bir Sonraki"
     IDS_APPTITLE "Ortam Oynatıcısı"
     IDS_PLAY "Çal"
+    IDS_DEFAULTMCIERRMSG "No description is available for this error"
 END
index da6e2fb..395a693 100644 (file)
@@ -17,6 +17,12 @@ BEGIN
         MENUITEM SEPARATOR
         MENUITEM "&Вихід", IDM_EXIT
     END
+    POPUP "&Device"
+    BEGIN
+        MENUITEM "&Properties", IDM_DEVPROPS
+        MENUITEM SEPARATOR
+        MENUITEM "&Volume Control", IDM_VOLUMECTL
+    END
     POPUP "&Довідка"
     BEGIN
         MENUITEM "&Про програму...", IDM_ABOUT
@@ -35,4 +41,5 @@ BEGIN
     IDS_TOOLTIP_FORWARD "Вперед"
     IDS_APPTITLE "Програвач ReactOS"
     IDS_PLAY "Відтворити"
+    IDS_DEFAULTMCIERRMSG "No description is available for this error"
 END
index 59e7bb7..3c3068d 100644 (file)
@@ -11,6 +11,12 @@ BEGIN
         MENUITEM SEPARATOR
         MENUITEM "退出(&E)", IDM_EXIT
     END
+    POPUP "&Device"
+    BEGIN
+        MENUITEM "&Properties", IDM_DEVPROPS
+        MENUITEM SEPARATOR
+        MENUITEM "&Volume Control", IDM_VOLUMECTL
+    END
     POPUP "帮助(&H)"
     BEGIN
         MENUITEM "关于... (&A)", IDM_ABOUT
@@ -29,4 +35,5 @@ BEGIN
     IDS_TOOLTIP_FORWARD "向前跳过"
     IDS_APPTITLE "ReactOS 多媒体播放器"
     IDS_PLAY "播放"
+    IDS_DEFAULTMCIERRMSG "No description is available for this error"
 END
index e9a2d90..a2a8bde 100644 (file)
@@ -17,6 +17,12 @@ BEGIN
         MENUITEM SEPARATOR
         MENUITEM "結束(&E)", IDM_EXIT
     END
+    POPUP "&Device"
+    BEGIN
+        MENUITEM "&Properties", IDM_DEVPROPS
+        MENUITEM SEPARATOR
+        MENUITEM "&Volume Control", IDM_VOLUMECTL
+    END
     POPUP "說明(&H)"
     BEGIN
         MENUITEM "關於(&A)...", IDM_ABOUT
@@ -35,4 +41,5 @@ BEGIN
     IDS_TOOLTIP_FORWARD "快轉"
     IDS_APPTITLE "ReactOS 多媒體播放器"
     IDS_PLAY "播放"
+    IDS_DEFAULTMCIERRMSG "No description is available for this error"
 END
index 5c6d047..e5dc330 100644 (file)
@@ -12,6 +12,7 @@
 HINSTANCE hInstance = NULL;
 HWND hTrackBar = NULL;
 HWND hToolBar = NULL;
+HMENU hMainMenu = NULL;
 TCHAR szAppTitle[256] = _T("");
 TCHAR szPrevFile[MAX_PATH] = _T("\0");
 WORD wDeviceId;
@@ -19,17 +20,6 @@ BOOL bIsOpened = FALSE;
 BOOL bIsPaused = FALSE;
 UINT MaxFilePos = 0;
 
-/* Known types table */
-static const TYPEBYEXT ExtTypes[] =
-{
-    { _T(".wav"),  WAVE_FILE    },
-    { _T(".wave"), WAVE_FILE    },
-    { _T(".mid"),  MIDI_FILE    },
-    { _T(".midi"), MIDI_FILE    },
-    { _T(".cda"),  AUDIOCD_FILE },
-    { _T(".avi"),  AVI_FILE     },
-    { _T("\0"),        0        }
-};
 
 /* ToolBar Buttons */
 static const TBBUTTON Buttons[] =
@@ -44,6 +34,26 @@ static const TBBUTTON Buttons[] =
     {TBICON_FORWARD,   IDC_FORWARD,  TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0}
 };
 
+void EnableMenuItems(void)
+{
+    MCI_GENERIC_PARMS mciGeneric;
+    DWORD dwError;
+
+    EnableMenuItem(hMainMenu, IDM_CLOSE_FILE, MF_BYCOMMAND | MF_ENABLED);
+
+    dwError = mciSendCommand(wDeviceId, MCI_CONFIGURE, MCI_TEST, (DWORD_PTR)&mciGeneric);
+    if (dwError == 0)
+    {
+        EnableMenuItem(hMainMenu, IDM_DEVPROPS, MF_BYCOMMAND | MF_ENABLED);
+    }
+}
+
+void DisableMenuItems(void)
+{
+    EnableMenuItem(hMainMenu, IDM_CLOSE_FILE, MF_BYCOMMAND | MF_GRAYED);
+    EnableMenuItem(hMainMenu, IDM_DEVPROPS, MF_BYCOMMAND | MF_GRAYED);
+}
+
 static VOID
 SetImageList(HWND hwnd)
 {
@@ -91,6 +101,21 @@ SetImageList(HWND hwnd)
                                               (LPARAM)hImageList));
 }
 
+static VOID
+ShowMCIError(HWND hwnd, DWORD dwError)
+{
+    TCHAR szErrorMessage[256];
+    TCHAR szTempMessage[300];
+    
+    if (mciGetErrorString(dwError, szErrorMessage, sizeof(szErrorMessage) / sizeof(TCHAR)) == FALSE)
+    {
+        LoadString(hInstance, IDS_DEFAULTMCIERRMSG, szErrorMessage, sizeof(szErrorMessage) / sizeof(TCHAR));
+    }
+
+    _stprintf(szTempMessage, _T("MMSYS%u: %s"), dwError, szErrorMessage);
+    MessageBox(hwnd, szTempMessage, szAppTitle, MB_OK | MB_ICONEXCLAMATION);
+}
+
 static VOID
 InitControls(HWND hwnd)
 {
@@ -141,43 +166,39 @@ InitControls(HWND hwnd)
     SendMessage(hToolBar, TB_ADDBUTTONS, NumButtons, (LPARAM)Buttons);
 }
 
-static UINT
-IsSupportedFileExtension(LPTSTR lpFileName)
+static BOOL
+IsSupportedFileExtension(LPTSTR lpFileName, LPTSTR lpDeviceName, LPDWORD dwSize)
 {
-    TCHAR szExt[MAX_PATH];
-    INT DotPos = 0, i, j;
-
-    for (i = _tcslen(lpFileName); i >= 0; --i)
-    {
-        if (lpFileName[i] == '.')
-        {
-            DotPos = _tcslen(lpFileName) - i;
-            break;
-        }
-    }
+    HKEY hKey;
+    DWORD dwType;
+    TCHAR *pathend;
 
-    if (!DotPos) return UNSUPPORTED_FILE;
+    pathend = _tcsrchr(lpFileName, '.');
 
-    szExt[DotPos + 1] = _T('\0');
-    for (i = _tcslen(lpFileName), j = DotPos; j >= 0; --i, --j)
+    if (pathend == NULL)
     {
-        szExt[j] = lpFileName[i];
+        return FALSE;
     }
 
-    for (i = 0; ; i++)
+    pathend++;
+
+    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\MCI Extensions"), 0, KEY_READ, &hKey) == ERROR_SUCCESS)
     {
-        if (ExtTypes[i].uType == UNSUPPORTED_FILE)
+        if (RegQueryValueEx(hKey, pathend, NULL, &dwType, (LPBYTE)lpDeviceName, dwSize) == ERROR_SUCCESS)
         {
-            return UNSUPPORTED_FILE;
-        }
+            RegCloseKey(hKey);
+            if (dwType != REG_SZ)
+            {
+                return FALSE;
+            }
 
-        if (_tcscmp(ExtTypes[i].szExt, szExt) == 0)
-        {
-            return ExtTypes[i].uType;
+            return TRUE;
         }
+        
+        RegCloseKey(hKey);
     }
 
-    return UNSUPPORTED_FILE;
+    return FALSE;
 }
 
 static DWORD
@@ -193,6 +214,8 @@ CloseMciDevice(VOID)
         bIsOpened = FALSE;
     }
 
+    DisableMenuItems();
+
     return TRUE;
 }
 
@@ -218,7 +241,7 @@ OpenMciDevice(HWND hwnd, LPTSTR lpType, LPTSTR lpFileName)
     dwError = mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT | MCI_WAIT, (DWORD_PTR)&mciOpen);
     if (dwError != 0)
     {
-        MessageBox(0, _T("Can't open device! (1)"), NULL, MB_OK);
+        ShowMCIError(hwnd, dwError);
         return dwError;
     }
 
@@ -227,7 +250,7 @@ OpenMciDevice(HWND hwnd, LPTSTR lpType, LPTSTR lpFileName)
     dwError = mciSendCommand(mciOpen.wDeviceID, MCI_STATUS, MCI_STATUS_ITEM | MCI_WAIT, (DWORD_PTR)&mciStatus);
     if (dwError != 0)
     {
-        MessageBox(0, _T("Can't open device! (2)"), NULL, MB_OK);
+        ShowMCIError(hwnd, dwError);
         return dwError;
     }
 
@@ -261,6 +284,9 @@ OpenMciDevice(HWND hwnd, LPTSTR lpType, LPTSTR lpFileName)
     wDeviceId = mciOpen.wDeviceID;
     bIsOpened = TRUE;
     _tcscpy(szPrevFile, lpFileName);
+
+    EnableMenuItems();
+
     return TRUE;
 }
 
@@ -288,14 +314,14 @@ SeekPlayback(HWND hwnd, DWORD dwNewPos)
         dwError = mciSendCommand(wDeviceId, MCI_SEEK, MCI_WAIT | MCI_TO, (DWORD_PTR)&mciSeek);
         if (dwError != 0)
         {
-            MessageBox(hwnd, _T("SeekPlayback: Can't seek!"), NULL, MB_OK);
+            ShowMCIError(hwnd, dwError);
         }
 
         mciPlay.dwCallback = (DWORD_PTR)hwnd;
         dwError = mciSendCommand(wDeviceId, MCI_PLAY, MCI_NOTIFY, (DWORD_PTR)&mciPlay);
         if (dwError != 0)
         {
-            MessageBox(hwnd, _T("SeekPlayback: Can't play!"), NULL, MB_OK);
+            ShowMCIError(hwnd, dwError);
         }
     }
 }
@@ -357,7 +383,7 @@ PausePlayback(HWND hwnd)
         dwError = mciSendCommand(wDeviceId, MCI_PAUSE, MCI_WAIT, (DWORD_PTR)&mciGeneric);
         if (dwError != 0)
         {
-            MessageBox(hwnd, _T("Can't pause!"), NULL, MB_OK);
+            ShowMCIError(hwnd, dwError);
         }
         bIsPaused = TRUE;
     }
@@ -374,12 +400,25 @@ ResumePlayback(HWND hwnd)
         dwError = mciSendCommand(wDeviceId, MCI_RESUME, MCI_WAIT, (DWORD_PTR)&mciGeneric);
         if (dwError != 0)
         {
-            MessageBox(hwnd, _T("Can't resume!"), NULL, MB_OK);
+            ShowMCIError(hwnd, dwError);
         }
         bIsPaused = FALSE;
     }
 }
 
+static VOID
+ShowDeviceProperties(HWND hwnd)
+{
+    MCI_GENERIC_PARMS mciGeneric;
+    DWORD dwError;
+
+    dwError = mciSendCommand(wDeviceId, MCI_CONFIGURE, MCI_WAIT, (DWORD_PTR)&mciGeneric);
+    if (dwError != 0)
+    {
+        MessageBox(0, _T("Can't display the device properties!"), NULL, MB_OK);
+    }
+}
+
 VOID CALLBACK
 PlayTimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
 {
@@ -407,7 +446,9 @@ PlayFile(HWND hwnd, LPTSTR lpFileName)
 {
     MCI_PLAY_PARMS mciPlay;
     TCHAR szLocalFileName[MAX_PATH];
-    UINT FileType;
+    TCHAR szDeviceName[MAX_PATH];
+    DWORD dwSize;
+    BOOL IsSupported;
     MCIERROR mciError;
 
     if (lpFileName == NULL)
@@ -427,25 +468,13 @@ PlayFile(HWND hwnd, LPTSTR lpFileName)
         return;
     }
 
-    FileType = IsSupportedFileExtension(szLocalFileName);
+    dwSize = sizeof(szDeviceName) - 2;
+    _tcsnset(szDeviceName, _T('\0'), dwSize / sizeof(TCHAR));
+    IsSupported = IsSupportedFileExtension(szLocalFileName, szDeviceName, &dwSize);
 
-    switch (FileType)
+    if (IsSupported == TRUE)
     {
-        case UNSUPPORTED_FILE:
-            MessageBox(hwnd, _T("Unsupported format!"), NULL, MB_OK);
-            return;
-        case WAVE_FILE:
-            OpenMciDevice(hwnd, _T("waveaudio"), szLocalFileName);
-            break;
-        case MIDI_FILE:
-            OpenMciDevice(hwnd, _T("sequencer"), szLocalFileName);
-            break;
-        case AUDIOCD_FILE:
-            OpenMciDevice(hwnd, _T("cdaudio"), szLocalFileName);
-            break;
-        case AVI_FILE:
-            OpenMciDevice(hwnd, _T("avivideo"), szLocalFileName);
-            break;
+        OpenMciDevice(hwnd, szDeviceName, szLocalFileName);
     }
 
     SetTimer(hwnd, IDT_PLAYTIMER, 100, (TIMERPROC) PlayTimerProc);
@@ -459,7 +488,7 @@ PlayFile(HWND hwnd, LPTSTR lpFileName)
     mciError = mciSendCommand(wDeviceId, MCI_PLAY, MCI_NOTIFY | MCI_FROM /*| MCI_TO*/, (DWORD_PTR)&mciPlay);
     if (mciError != 0)
     {
-        MessageBox(hwnd, _T("Can't play!"), NULL, MB_OK);
+        ShowMCIError(hwnd, mciError);
     }
 }
 
@@ -502,7 +531,20 @@ MainWndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
     {
         case WM_CREATE:
             InitControls(hwnd);
+            hMainMenu = GetMenu(hwnd);
+            break;
+
+        case WM_DROPFILES:
+        {
+            HDROP drophandle;
+            TCHAR droppedfile[MAX_PATH];
+            
+            drophandle = (HDROP)wParam;
+            DragQueryFile(drophandle, 0, droppedfile, sizeof(droppedfile));
+            DragFinish(drophandle);
+            PlayFile(hwnd, droppedfile);
             break;
+        }
 
         case WM_NOTIFY:
         {
@@ -641,6 +683,14 @@ MainWndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
                     _tcscpy(szPrevFile, _T("\0"));
                     break;
 
+                case IDM_DEVPROPS:
+                    ShowDeviceProperties(hwnd);
+                    break;
+                
+                case IDM_VOLUMECTL:
+                    ShellExecute(hwnd, NULL, _T("SNDVOL32.EXE"), NULL, NULL, SW_SHOWNORMAL);
+                    break;
+
                 case IDM_ABOUT:
         {
                     HICON mplayIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MAIN));
@@ -670,6 +720,7 @@ _tWinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPTSTR lpCmdLine, INT nCmdShow)
     TCHAR szClassName[] = _T("ROSMPLAY32");
     HWND hwnd;
     MSG msg;
+    DWORD dwError;
 
     hInstance = hInst;
 
@@ -699,6 +750,16 @@ _tWinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPTSTR lpCmdLine, INT nCmdShow)
                         hInstance,
                         NULL);
 
+    DragAcceptFiles(hwnd, TRUE);
+
+    DisableMenuItems();
+
+    dwError = SearchPath(NULL, _T("SNDVOL32.EXE"), NULL, 0, NULL, NULL);
+    if (dwError == 0)
+    {
+        EnableMenuItem(hMainMenu, IDM_VOLUMECTL, MF_BYCOMMAND | MF_GRAYED);
+    }
+
     /* Show it */
     ShowWindow(hwnd, SW_SHOW);
     UpdateWindow(hwnd);
index 2e5cc51..77c68ae 100644 (file)
@@ -3,9 +3,11 @@
 #include <winbase.h>
 #include <winuser.h>
 #include <wingdi.h>
+#include <winreg.h>
 #include <commdlg.h>
 #include <shellapi.h>
 #include <mmsystem.h>
+#include <digitalv.h>
 #include <commctrl.h>
 #include <tchar.h>
 
index ed3a11a..ea75885 100644 (file)
@@ -24,6 +24,7 @@
 #define IDS_TOOLTIP_FORWARD  107
 #define IDS_ALL_TYPES_FILTER 108
 #define IDS_PLAY             109
+#define IDS_DEFAULTMCIERRMSG 110
 
 /* Menu */
 #define IDR_MAINMENU 500
@@ -33,6 +34,8 @@
 #define IDM_CLOSE_FILE 1001
 #define IDM_EXIT       1002
 #define IDM_ABOUT      1003
+#define IDM_VOLUMECTL  1004
+#define IDM_DEVPROPS   1005
 
 /* ToolBar Icons */
 #define TBICON_PLAY     0