{-# LANGUAGE Trustworthy #-}
{-# LANGUAGE NoImplicitPrelude, ForeignFunctionInterface #-}
-----------------------------------------------------------------------------
-- |
-- Module      :  GHC.Windows
-- Copyright   :  (c) The University of Glasgow, 2009
-- License     :  see libraries/base/LICENSE
-- 
-- Maintainer  :  libraries@haskell.org
-- Stability   :  internal
-- Portability :  non-portable
--
-- Windows functionality used by several modules.
--
-- ToDo: this just duplicates part of System.Win32.Types, which isn't
-- available yet.  We should move some Win32 functionality down here,
-- maybe as part of the grand reorganisation of the base package...
--
-----------------------------------------------------------------------------

module GHC.Windows (
        HANDLE, DWORD, LPTSTR, iNFINITE,
        throwGetLastError, c_maperrno
    ) where

import GHC.Base
import GHC.Ptr

import Data.Word

import Foreign.C.Error (throwErrno)
import Foreign.C.Types


type HANDLE       = Ptr ()
type DWORD        = Word32

type LPTSTR = Ptr CWchar

iNFINITE :: DWORD
iNFINITE = 0xFFFFFFFF -- urgh

throwGetLastError :: String -> IO a
throwGetLastError where_from = c_maperrno >> throwErrno where_from

foreign import ccall unsafe "maperrno"             -- in Win32Utils.c
   c_maperrno :: IO ()