{-# LANGUAGE CPP #-} {- | Module : Media.Win32 Copyright : 2012 shelarcy License : BSD-style Maintainer : shelarcy@gmail.com Stability : Provisional Portability : Non-portable (Win32 API) Multimedia API. TODO: provide more functions ... -} module Media.Win32 ( module Media.Win32 ) where import Control.Monad ( unless ) import Prelude hiding ( ioError, userError ) import System.IO.Error ( ioError, userError ) import System.Win32.Encoding ( encodeMultiByte, getCurrentCodePage ) import System.Win32.Types import System.Win32.String ( withTStringBufferLen ) type MCIERROR = DWORD #include "windows_cconv.h" mciSendString :: String -> IO () mciSendString cmd = withTString cmd $ \sendCmd -> do err <- c_mciSendString sendCmd nullPtr 0 nullPtr unless (err == 0) $ mciGetErrorString err foreign import WINDOWS_CCONV safe "windows.h mciSendStringW" c_mciSendString :: LPCTSTR -> LPTSTR -> UINT -> HANDLE -> IO MCIERROR mciGetErrorString :: MCIERROR -> IO () mciGetErrorString err = withTStringBufferLen 256 $ \(cstr, len) -> do failIfFalse_ (unwords ["mciGetErrorString", show err]) $ c_mciGetErrorString err cstr $ fromIntegral len msg <- peekTString cstr cp <- getCurrentCodePage ioError $ userError $ encodeMultiByte cp msg foreign import WINDOWS_CCONV unsafe "windows.h mciGetErrorStringW" c_mciGetErrorString :: MCIERROR -> LPTSTR -> UINT -> IO BOOL