Win32 2.2.2.0 → 2.3.0.0
raw patch · 41 files changed
+626/−532 lines, 41 filesdep ~basenew-uploader
Dependency ranges changed: base
Files
- Graphics/Win32/Control.hsc +6/−4
- Graphics/Win32/Dialogue.hsc +21/−19
- Graphics/Win32/GDI/Bitmap.hsc +13/−11
- Graphics/Win32/GDI/Brush.hsc +7/−5
- Graphics/Win32/GDI/Clip.hsc +24/−18
- Graphics/Win32/GDI/Font.hsc +4/−3
- Graphics/Win32/GDI/Graphics2D.hs +26/−24
- Graphics/Win32/GDI/HDC.hs +42/−40
- Graphics/Win32/GDI/Palette.hsc +3/−2
- Graphics/Win32/GDI/Path.hs +11/−9
- Graphics/Win32/GDI/Pen.hsc +5/−3
- Graphics/Win32/GDI/Region.hs +18/−16
- Graphics/Win32/GDI/Types.hsc +5/−5
- Graphics/Win32/Icon.hs +5/−3
- Graphics/Win32/Key.hsc +8/−6
- Graphics/Win32/Menu.hsc +33/−31
- Graphics/Win32/Message.hsc +3/−1
- Graphics/Win32/Misc.hsc +33/−32
- Graphics/Win32/Resource.hsc +30/−28
- Graphics/Win32/Window.hsc +56/−52
- System/Win32/Console.hsc +7/−5
- System/Win32/DLL.hsc +9/−7
- System/Win32/DebugApi.hsc +36/−17
- System/Win32/File.hsc +35/−33
- System/Win32/FileMapping.hsc +6/−4
- System/Win32/Info.hsc +10/−9
- System/Win32/Mem.hsc +28/−26
- System/Win32/NLS.hsc +16/−14
- System/Win32/Process.hsc +8/−6
- System/Win32/Registry.hsc +30/−28
- System/Win32/Security.hsc +17/−15
- System/Win32/Shell.hsc +3/−1
- System/Win32/SimpleMAPI.hsc +16/−5
- System/Win32/Time.hsc +23/−21
- System/Win32/Types.hs +11/−10
- Win32.cabal +2/−2
- cbits/WndProc.c +1/−1
- cbits/dumpBMP.c +0/−8
- include/HsWin32.h +2/−3
- include/gettime.h +0/−5
- include/windows_cconv.h +13/−0
Graphics/Win32/Control.hsc view
@@ -25,6 +25,8 @@ import Foreign hiding (unsafePerformIO) import System.IO.Unsafe +##include "windows_cconv.h"+ #include <windows.h> #include <commctrl.h> @@ -73,20 +75,20 @@ checkDlgButton :: HWND -> Int -> ButtonState -> IO () checkDlgButton dialog button check = failIfFalse_ "CheckDlgButton" $ c_CheckDlgButton dialog button check-foreign import stdcall unsafe "windows.h CheckDlgButton"+foreign import WINDOWS_CCONV unsafe "windows.h CheckDlgButton" c_CheckDlgButton :: HWND -> Int -> ButtonState -> IO Bool checkRadioButton :: HWND -> Int -> Int -> Int -> IO () checkRadioButton dialog first_button last_button check = failIfFalse_ "CheckRadioButton" $ c_CheckRadioButton dialog first_button last_button check-foreign import stdcall unsafe "windows.h CheckRadioButton"+foreign import WINDOWS_CCONV unsafe "windows.h CheckRadioButton" c_CheckRadioButton :: HWND -> Int -> Int -> Int -> IO Bool isDlgButtonChecked :: HWND -> Int -> IO ButtonState isDlgButtonChecked wnd button = failIfZero "IsDlgButtonChecked" $ c_IsDlgButtonChecked wnd button-foreign import stdcall unsafe "windows.h IsDlgButtonChecked"+foreign import WINDOWS_CCONV unsafe "windows.h IsDlgButtonChecked" c_IsDlgButtonChecked :: HWND -> Int -> IO ButtonState @@ -324,7 +326,7 @@ (maybePos mb_x) (maybePos mb_y) (maybePos mb_w) (maybePos mb_h) (maybePtr mb_parent) (maybePtr mb_menu) h nullPtr -foreign import stdcall unsafe "windows.h InitCommonControls"+foreign import WINDOWS_CCONV unsafe "windows.h InitCommonControls" initCommonControls :: IO () #endif
Graphics/Win32/Dialogue.hsc view
@@ -26,6 +26,8 @@ import Foreign import Foreign.C +##include "windows_cconv.h"+ #include <windows.h> type DTemplate = LPCTSTR@@ -43,7 +45,7 @@ type ResourceID = Int mkResource :: ResourceID -> IO (Ptr a)-mkResource res = return (castUINTToPtr (fromIntegral res))+mkResource res = return (castUINTPtrToPtr (fromIntegral res)) mkDialogTemplateFromResource :: Int -> IO DTemplate mkDialogTemplateFromResource = mkResource@@ -67,7 +69,7 @@ c_dia_fn <- mkDialogClosure dia_fn failIf (== -1) "DialogBoxParam" $ c_DialogBoxParam inst template (maybePtr mb_parent) c_dia_fn init_val-foreign import stdcall "windows.h DialogBoxParamW"+foreign import WINDOWS_CCONV "windows.h DialogBoxParamW" c_DialogBoxParam :: HINSTANCE -> DTemplate -> HWND -> FunPtr DialogProc -> LPARAM -> IO Int dialogBoxIndirect :: HINSTANCE -> DTemplateMem -> Maybe HWND -> DialogProc -> IO Int@@ -79,7 +81,7 @@ c_dia_fn <- mkDialogClosure dia_fn failIf (== -1) "DialogBoxIndirectParam" $ c_DialogBoxIndirectParam inst template (maybePtr mb_parent) c_dia_fn init_val-foreign import stdcall "windows.h DialogBoxIndirectParamW"+foreign import WINDOWS_CCONV "windows.h DialogBoxIndirectParamW" c_DialogBoxIndirectParam :: HINSTANCE -> DTemplateMem -> HWND -> FunPtr DialogProc -> LPARAM -> IO Int @@ -207,7 +209,7 @@ c_dia_fn <- mkDialogClosure dia_fn failIfNull "CreateDialogParam" $ c_CreateDialogParam inst template (maybePtr mb_parent) c_dia_fn init_val-foreign import stdcall "windows.h CreateDialogParamW"+foreign import WINDOWS_CCONV "windows.h CreateDialogParamW" c_CreateDialogParam :: HINSTANCE -> DTemplate -> HWND -> FunPtr DialogProc -> LPARAM -> IO HWND createDialogIndirect :: HINSTANCE -> DTemplateMem -> Maybe HWND -> DialogProc -> IO HWND@@ -219,31 +221,31 @@ c_dia_fn <- mkDialogClosure dia_fn failIfNull "CreateDialogIndirectParam" $ c_CreateDialogIndirectParam inst template (maybePtr mb_parent) c_dia_fn init_val-foreign import stdcall "windows.h CreateDialogIndirectParamW"+foreign import WINDOWS_CCONV "windows.h CreateDialogIndirectParamW" c_CreateDialogIndirectParam :: HINSTANCE -> DTemplateMem -> HWND -> FunPtr DialogProc -> LPARAM -> IO HWND -foreign import stdcall "windows.h DefDlgProcW"+foreign import WINDOWS_CCONV "windows.h DefDlgProcW" defDlgProc :: HWND -> WindowMessage -> WPARAM -> LPARAM -> IO LRESULT endDialog :: HWND -> Int -> IO () endDialog dlg res = failIfFalse_ "EndDialog" $ c_EndDialog dlg res-foreign import stdcall "windows.h EndDialog"+foreign import WINDOWS_CCONV "windows.h EndDialog" c_EndDialog :: HWND -> Int -> IO BOOL -foreign import stdcall unsafe "windows.h GetDialogBaseUnits"+foreign import WINDOWS_CCONV unsafe "windows.h GetDialogBaseUnits" getDialogBaseUnits :: IO LONG getDlgCtrlID :: HWND -> IO Int getDlgCtrlID ctl = failIfZero "GetDlgCtrlID" $ c_GetDlgCtrlID ctl-foreign import stdcall unsafe "windows.h GetDlgCtrlID"+foreign import WINDOWS_CCONV unsafe "windows.h GetDlgCtrlID" c_GetDlgCtrlID :: HWND -> IO Int getDlgItem :: HWND -> Int -> IO HWND getDlgItem dlg item = failIfNull "GetDlgItem" $ c_GetDlgItem dlg item-foreign import stdcall unsafe "windows.h GetDlgItem"+foreign import WINDOWS_CCONV unsafe "windows.h GetDlgItem" c_GetDlgItem :: HWND -> Int -> IO HWND getDlgItemInt :: HWND -> Int -> Bool -> IO Int@@ -252,7 +254,7 @@ res <- c_GetDlgItemInt dlg item p_trans signed failIfFalse_ "GetDlgItemInt" $ peek p_trans return (fromIntegral res)-foreign import stdcall "windows.h GetDlgItemInt"+foreign import WINDOWS_CCONV "windows.h GetDlgItemInt" c_GetDlgItemInt :: HWND -> Int -> Ptr Bool -> Bool -> IO UINT getDlgItemText :: HWND -> Int -> Int -> IO String@@ -260,46 +262,46 @@ allocaArray size $ \ p_buf -> do _ <- failIfZero "GetDlgItemInt" $ c_GetDlgItemText dlg item p_buf size peekTString p_buf-foreign import stdcall "windows.h GetDlgItemTextW"+foreign import WINDOWS_CCONV "windows.h GetDlgItemTextW" c_GetDlgItemText :: HWND -> Int -> LPTSTR -> Int -> IO Int getNextDlgGroupItem :: HWND -> HWND -> BOOL -> IO HWND getNextDlgGroupItem dlg ctl previous = failIfNull "GetNextDlgGroupItem" $ c_GetNextDlgGroupItem dlg ctl previous-foreign import stdcall unsafe "windows.h GetNextDlgGroupItem"+foreign import WINDOWS_CCONV unsafe "windows.h GetNextDlgGroupItem" c_GetNextDlgGroupItem :: HWND -> HWND -> BOOL -> IO HWND getNextDlgTabItem :: HWND -> HWND -> BOOL -> IO HWND getNextDlgTabItem dlg ctl previous = failIfNull "GetNextDlgTabItem" $ c_GetNextDlgTabItem dlg ctl previous-foreign import stdcall unsafe "windows.h GetNextDlgTabItem"+foreign import WINDOWS_CCONV unsafe "windows.h GetNextDlgTabItem" c_GetNextDlgTabItem :: HWND -> HWND -> BOOL -> IO HWND -foreign import stdcall "windows.h IsDialogMessageW"+foreign import WINDOWS_CCONV "windows.h IsDialogMessageW" isDialogMessage :: HWND -> LPMSG -> IO BOOL mapDialogRect :: HWND -> LPRECT -> IO () mapDialogRect dlg p_rect = failIfFalse_ "MapDialogRect" $ c_MapDialogRect dlg p_rect-foreign import stdcall unsafe "windows.h MapDialogRect"+foreign import WINDOWS_CCONV unsafe "windows.h MapDialogRect" c_MapDialogRect :: HWND -> LPRECT -> IO Bool -- No MessageBox* funs in here just yet. -foreign import stdcall "windows.h SendDlgItemMessageW"+foreign import WINDOWS_CCONV "windows.h SendDlgItemMessageW" sendDlgItemMessage :: HWND -> Int -> WindowMessage -> WPARAM -> LPARAM -> IO LONG setDlgItemInt :: HWND -> Int -> UINT -> BOOL -> IO () setDlgItemInt dlg item value signed = failIfFalse_ "SetDlgItemInt" $ c_SetDlgItemInt dlg item value signed-foreign import stdcall "windows.h SetDlgItemInt"+foreign import WINDOWS_CCONV "windows.h SetDlgItemInt" c_SetDlgItemInt :: HWND -> Int -> UINT -> BOOL -> IO Bool setDlgItemText :: HWND -> Int -> String -> IO () setDlgItemText dlg item str = withTString str $ \ c_str -> failIfFalse_ "SetDlgItemText" $ c_SetDlgItemText dlg item c_str-foreign import stdcall "windows.h SetDlgItemTextW"+foreign import WINDOWS_CCONV "windows.h SetDlgItemTextW" c_SetDlgItemText :: HWND -> Int -> LPCTSTR -> IO Bool #{enum WindowStyle,
Graphics/Win32/GDI/Bitmap.hsc view
@@ -89,6 +89,8 @@ import Foreign.C #include "Win32Aux.h"+##include "windows_cconv.h"+ #include <windows.h> ----------------------------------------------------------------@@ -212,32 +214,32 @@ deleteBitmap :: HBITMAP -> IO () deleteBitmap bitmap = failIfFalse_ "DeleteBitmap" $ c_DeleteBitmap bitmap-foreign import stdcall unsafe "windows.h DeleteObject"+foreign import WINDOWS_CCONV unsafe "windows.h DeleteObject" c_DeleteBitmap :: HBITMAP -> IO Bool createBitmap :: INT -> INT -> UINT -> UINT -> Maybe LPVOID -> IO HBITMAP createBitmap w h planes bits mb_color_data = failIfNull "CreateBitmap" $ c_CreateBitmap w h planes bits (maybePtr mb_color_data)-foreign import stdcall unsafe "windows.h CreateBitmap"+foreign import WINDOWS_CCONV unsafe "windows.h CreateBitmap" c_CreateBitmap :: INT -> INT -> UINT -> UINT -> LPVOID -> IO HBITMAP createBitmapIndirect :: LPBITMAP -> IO HBITMAP createBitmapIndirect p_bm = failIfNull "CreateBitmapIndirect" $ c_CreateBitmapIndirect p_bm-foreign import stdcall unsafe "windows.h CreateBitmapIndirect"+foreign import WINDOWS_CCONV unsafe "windows.h CreateBitmapIndirect" c_CreateBitmapIndirect :: LPBITMAP -> IO HBITMAP createCompatibleBitmap :: HDC -> Int32 -> Int32 -> IO HBITMAP createCompatibleBitmap dc w h = failIfNull "CreateCompatibleBitmap" $ c_CreateCompatibleBitmap dc w h-foreign import stdcall unsafe "windows.h CreateCompatibleBitmap"+foreign import WINDOWS_CCONV unsafe "windows.h CreateCompatibleBitmap" c_CreateCompatibleBitmap :: HDC -> Int32 -> Int32 -> IO HBITMAP createDIBPatternBrushPt :: LPVOID -> ColorFormat -> IO HBRUSH createDIBPatternBrushPt bm usage = failIfNull "CreateDIBPatternBrushPt" $ c_CreateDIBPatternBrushPt bm usage-foreign import stdcall unsafe "windows.h CreateDIBPatternBrushPt"+foreign import WINDOWS_CCONV unsafe "windows.h CreateDIBPatternBrushPt" c_CreateDIBPatternBrushPt :: LPVOID -> ColorFormat -> IO HBRUSH ----------------------------------------------------------------@@ -249,7 +251,7 @@ allocaSIZE $ \ p_size -> do failIfFalse_ "GetBitmapDimensionEx" $ c_GetBitmapDimensionEx bm p_size peekSIZE p_size-foreign import stdcall unsafe "windows.h GetBitmapDimensionEx"+foreign import WINDOWS_CCONV unsafe "windows.h GetBitmapDimensionEx" c_GetBitmapDimensionEx :: HBITMAP -> Ptr SIZE -> IO Bool setBitmapDimensionEx :: HBITMAP -> SIZE -> IO SIZE@@ -258,7 +260,7 @@ failIfFalse_ "SetBitmapDimensionEx" $ do c_SetBitmapDimensionEx bm cx cy p_size peekSIZE p_size-foreign import stdcall unsafe "windows.h SetBitmapDimensionEx"+foreign import WINDOWS_CCONV unsafe "windows.h SetBitmapDimensionEx" c_SetBitmapDimensionEx :: HBITMAP -> LONG -> LONG -> Ptr SIZE -> IO Bool getBitmapInfo :: HBITMAP -> IO BITMAP@@ -266,7 +268,7 @@ allocaBytes (fromIntegral sizeofBITMAP) $ \ p_bm -> do failIfFalse_ "GetBitmapInfo" $ c_GetBitmapInfo bm sizeofBITMAP p_bm peekBITMAP p_bm-foreign import stdcall unsafe "windows.h GetObjectW"+foreign import WINDOWS_CCONV unsafe "windows.h GetObjectW" c_GetBitmapInfo :: HBITMAP -> DWORD -> LPBITMAP -> IO Bool ----------------------------------------------------------------@@ -398,20 +400,20 @@ getDIBits dc bm start nlines mb_bits info usage = failIfZero "GetDIBits" $ c_GetDIBits dc bm start nlines (maybePtr mb_bits) info usage-foreign import stdcall unsafe "windows.h GetDIBits"+foreign import WINDOWS_CCONV unsafe "windows.h GetDIBits" c_GetDIBits :: HDC -> HBITMAP -> INT -> INT -> LPVOID -> LPBITMAPINFO -> ColorFormat -> IO INT setDIBits :: HDC -> HBITMAP -> INT -> INT -> LPVOID -> LPBITMAPINFO -> ColorFormat -> IO INT setDIBits dc bm start nlines bits info use = failIfZero "SetDIBits" $ c_SetDIBits dc bm start nlines bits info use-foreign import stdcall unsafe "windows.h SetDIBits"+foreign import WINDOWS_CCONV unsafe "windows.h SetDIBits" c_SetDIBits :: HDC -> HBITMAP -> INT -> INT -> LPVOID -> LPBITMAPINFO -> ColorFormat -> IO INT createDIBitmap :: HDC -> LPBITMAPINFOHEADER -> DWORD -> LPVOID -> LPBITMAPINFO -> ColorFormat -> IO HBITMAP createDIBitmap dc hdr option init_val info usage = failIfNull "CreateDIBitmap" $ c_CreateDIBitmap dc hdr option init_val info usage-foreign import stdcall unsafe "windows.h CreateDIBitmap"+foreign import WINDOWS_CCONV unsafe "windows.h CreateDIBitmap" c_CreateDIBitmap :: HDC -> LPBITMAPINFOHEADER -> DWORD -> LPVOID -> LPBITMAPINFO -> ColorFormat -> IO HBITMAP ----------------------------------------------------------------
Graphics/Win32/GDI/Brush.hsc view
@@ -20,6 +20,8 @@ import System.Win32.Types import Graphics.Win32.GDI.Types +##include "windows_cconv.h"+ #include <windows.h> ----------------------------------------------------------------@@ -29,25 +31,25 @@ createSolidBrush :: COLORREF -> IO HBRUSH createSolidBrush color = failIfNull "CreateSolidBrush" $ c_CreateSolidBrush color-foreign import stdcall unsafe "windows.h CreateSolidBrush"+foreign import WINDOWS_CCONV unsafe "windows.h CreateSolidBrush" c_CreateSolidBrush :: COLORREF -> IO HBRUSH createHatchBrush :: HatchStyle -> COLORREF -> IO HBRUSH createHatchBrush style color = failIfNull "CreateHatchBrush" $ c_CreateHatchBrush style color-foreign import stdcall unsafe "windows.h CreateHatchBrush"+foreign import WINDOWS_CCONV unsafe "windows.h CreateHatchBrush" c_CreateHatchBrush :: HatchStyle -> COLORREF -> IO HBRUSH createPatternBrush :: HBITMAP -> IO HBRUSH createPatternBrush bitmap = failIfNull "CreatePatternBrush" $ c_CreatePatternBrush bitmap-foreign import stdcall unsafe "windows.h CreatePatternBrush"+foreign import WINDOWS_CCONV unsafe "windows.h CreatePatternBrush" c_CreatePatternBrush :: HBITMAP -> IO HBRUSH deleteBrush :: HBRUSH -> IO () deleteBrush brush = failIfFalse_ "DeleteBrush" $ c_DeleteBrush brush-foreign import stdcall unsafe "windows.h DeleteObject"+foreign import WINDOWS_CCONV unsafe "windows.h DeleteObject" c_DeleteBrush :: HBRUSH -> IO Bool ----------------------------------------------------------------@@ -67,7 +69,7 @@ getStockBrush :: StockBrush -> IO HBRUSH getStockBrush sb = failIfNull "GetStockBrush" $ c_GetStockBrush sb-foreign import stdcall unsafe "windows.h GetStockObject"+foreign import WINDOWS_CCONV unsafe "windows.h GetStockObject" c_GetStockBrush :: StockBrush -> IO HBRUSH ----------------------------------------------------------------
Graphics/Win32/GDI/Clip.hsc view
@@ -17,11 +17,14 @@ module Graphics.Win32.GDI.Clip where +import Control.Monad import Graphics.Win32.GDI.Types import System.Win32.Types import Foreign +##include "windows_cconv.h"+ #include <windows.h> type ClipboardFormat = UINT@@ -54,36 +57,39 @@ -- % , CF_UNICODETEXT -- WinNT only -foreign import stdcall unsafe "windows.h ChangeClipboardChain"+foreign import WINDOWS_CCONV unsafe "windows.h ChangeClipboardChain" changeClipboardChain :: HWND -> HWND -> IO Bool closeClipboard :: IO () closeClipboard = failIfFalse_ "CloseClipboard" c_CloseClipboard-foreign import stdcall unsafe "windows.h CloseClipboard"+foreign import WINDOWS_CCONV unsafe "windows.h CloseClipboard" c_CloseClipboard :: IO BOOL -foreign import stdcall unsafe "windows.h CountClipboardFormats"+foreign import WINDOWS_CCONV unsafe "windows.h CountClipboardFormats" countClipboardFormats :: IO Int emptyClipboard :: IO () emptyClipboard = failIfFalse_ "EmptyClipboard" c_EmptyClipboard-foreign import stdcall unsafe "windows.h EmptyClipboard"+foreign import WINDOWS_CCONV unsafe "windows.h EmptyClipboard" c_EmptyClipboard :: IO BOOL -- original also tested GetLastError() != NO_ERROR enumClipboardFormats :: ClipboardFormat -> IO ClipboardFormat-enumClipboardFormats format =- failIfZero "EnumClipboardFormats" $ c_EnumClipboardFormats format-foreign import stdcall unsafe "windows.h EnumClipboardFormats"+enumClipboardFormats format = do+ format' <- c_EnumClipboardFormats format+ when (format' == 0) $+ failUnlessSuccess "EnumClipboardFormats" getLastError+ return format'+foreign import WINDOWS_CCONV unsafe "windows.h EnumClipboardFormats" c_EnumClipboardFormats :: ClipboardFormat -> IO ClipboardFormat getClipboardData :: ClipboardFormat -> IO HANDLE getClipboardData format = failIfNull "GetClipboardData" $ c_GetClipboardData format-foreign import stdcall unsafe "windows.h GetClipboardData"+foreign import WINDOWS_CCONV unsafe "windows.h GetClipboardData" c_GetClipboardData :: ClipboardFormat -> IO HANDLE getClipboardFormatName :: ClipboardFormat -> IO String@@ -92,25 +98,25 @@ len <- failIfZero "GetClipboardFormatName" $ c_GetClipboardFormatName format c_name 256 peekTStringLen (c_name, len)-foreign import stdcall unsafe "windows.h GetClipboardFormatNameW"+foreign import WINDOWS_CCONV unsafe "windows.h GetClipboardFormatNameW" c_GetClipboardFormatName :: ClipboardFormat -> LPTSTR -> Int -> IO Int getClipboardOwner :: IO HWND getClipboardOwner = failIfNull "GetClipboardOwner" c_GetClipboardOwner-foreign import stdcall unsafe "windows.h GetClipboardOwner"+foreign import WINDOWS_CCONV unsafe "windows.h GetClipboardOwner" c_GetClipboardOwner :: IO HWND getClipboardViewer :: IO HWND getClipboardViewer = failIfNull "GetClipboardViewer" c_GetClipboardViewer-foreign import stdcall unsafe "windows.h GetClipboardViewer"+foreign import WINDOWS_CCONV unsafe "windows.h GetClipboardViewer" c_GetClipboardViewer :: IO HWND getOpenClipboardWindow :: IO HWND getOpenClipboardWindow = failIfNull "GetClipboardWindow" c_GetOpenClipboardWindow-foreign import stdcall unsafe "windows.h GetOpenClipboardWindow"+foreign import WINDOWS_CCONV unsafe "windows.h GetOpenClipboardWindow" c_GetOpenClipboardWindow :: IO HWND getPriorityClipboardFormat :: [ClipboardFormat] -> IO Int@@ -118,16 +124,16 @@ withArray formats $ \ format_array -> failIf (== -1) "GetPriorityClipboardFormat" $ c_GetPriorityClipboardFormat format_array (length formats)-foreign import stdcall unsafe "windows.h GetPriorityClipboardFormat"+foreign import WINDOWS_CCONV unsafe "windows.h GetPriorityClipboardFormat" c_GetPriorityClipboardFormat :: Ptr UINT -> Int -> IO Int -foreign import stdcall unsafe "windows.h IsClipboardFormatAvailable"+foreign import WINDOWS_CCONV unsafe "windows.h IsClipboardFormatAvailable" isClipboardFormatAvailable :: ClipboardFormat -> IO BOOL openClipboard :: HWND -> IO () openClipboard wnd = failIfFalse_ "OpenClipboard" $ c_OpenClipboard wnd-foreign import stdcall unsafe "windows.h OpenClipboard"+foreign import WINDOWS_CCONV unsafe "windows.h OpenClipboard" c_OpenClipboard :: HWND -> IO BOOL registerClipboardFormat :: String -> IO ClipboardFormat@@ -135,17 +141,17 @@ withTString name $ \ c_name -> failIfZero "RegisterClipboardFormat" $ c_RegisterClipboardFormat c_name-foreign import stdcall unsafe "windows.h RegisterClipboardFormatW"+foreign import WINDOWS_CCONV unsafe "windows.h RegisterClipboardFormatW" c_RegisterClipboardFormat :: LPCTSTR -> IO ClipboardFormat setClipboardData :: ClipboardFormat -> HANDLE -> IO HANDLE setClipboardData format mem = failIfNull "SetClipboardData" $ c_SetClipboardData format mem-foreign import stdcall unsafe "windows.h SetClipboardData"+foreign import WINDOWS_CCONV unsafe "windows.h SetClipboardData" c_SetClipboardData :: ClipboardFormat -> HANDLE -> IO HANDLE setClipboardViewer :: HWND -> IO HWND setClipboardViewer wnd = failIfNull "SetClipboardViewer" $ c_SetClipboardViewer wnd-foreign import stdcall unsafe "windows.h SetClipboardViewer"+foreign import WINDOWS_CCONV unsafe "windows.h SetClipboardViewer" c_SetClipboardViewer :: HWND -> IO HWND
Graphics/Win32/GDI/Font.hsc view
@@ -38,6 +38,7 @@ import Foreign +##include "windows_cconv.h" #include <windows.h> ----------------------------------------------------------------@@ -148,7 +149,7 @@ withTString face $ \ c_face -> failIfNull "CreateFont" $ c_CreateFont h w esc orient wt ital under strike cset out clip q pf c_face-foreign import stdcall unsafe "windows.h CreateFontW"+foreign import WINDOWS_CCONV unsafe "windows.h CreateFontW" c_CreateFont :: INT -> INT -> INT -> INT -> FontWeight -> Bool -> Bool -> Bool@@ -182,7 +183,7 @@ -- missing CreateFontIndirect from WinFonts.ss; GSL ??? -foreign import stdcall unsafe "windows.h DeleteObject"+foreign import WINDOWS_CCONV unsafe "windows.h DeleteObject" deleteFont :: HFONT -> IO () ----------------------------------------------------------------@@ -198,7 +199,7 @@ , sYSTEM_FIXED_FONT = SYSTEM_FIXED_FONT } -foreign import stdcall unsafe "windows.h GetStockObject"+foreign import WINDOWS_CCONV unsafe "windows.h GetStockObject" getStockFont :: StockFont -> IO HFONT ----------------------------------------------------------------
Graphics/Win32/GDI/Graphics2D.hs view
@@ -23,6 +23,8 @@ import Foreign +#include "windows_cconv.h"+ ---------------------------------------------------------------- -- Lines and Curves ----------------------------------------------------------------@@ -32,66 +34,66 @@ allocaPOINT $ \ p_point -> do failIfFalse_ "MoveToEx" $ c_MoveToEx dc x y p_point peekPOINT p_point-foreign import stdcall unsafe "windows.h MoveToEx"+foreign import WINDOWS_CCONV unsafe "windows.h MoveToEx" c_MoveToEx :: HDC -> Int32 -> Int32 -> Ptr POINT -> IO Bool lineTo :: HDC -> Int32 -> Int32 -> IO () lineTo dc x y = failIfFalse_ "LineTo" $ c_LineTo dc x y-foreign import stdcall unsafe "windows.h LineTo"+foreign import WINDOWS_CCONV unsafe "windows.h LineTo" c_LineTo :: HDC -> Int32 -> Int32 -> IO Bool polyline :: HDC -> [POINT] -> IO () polyline dc points = withPOINTArray points $ \ pount_array npoints -> failIfFalse_ "Polyline" $ c_Polyline dc pount_array npoints-foreign import stdcall unsafe "windows.h Polyline"+foreign import WINDOWS_CCONV unsafe "windows.h Polyline" c_Polyline :: HDC -> Ptr POINT -> Int -> IO Bool polylineTo :: HDC -> [POINT] -> IO () polylineTo dc points = withPOINTArray points $ \ pount_array npoints -> failIfFalse_ "PolylineTo" $ c_PolylineTo dc pount_array npoints-foreign import stdcall unsafe "windows.h PolylineTo"+foreign import WINDOWS_CCONV unsafe "windows.h PolylineTo" c_PolylineTo :: HDC -> Ptr POINT -> Int -> IO Bool polygon :: HDC -> [POINT] -> IO () polygon dc points = withPOINTArray points $ \ pount_array npoints -> failIfFalse_ "Polygon" $ c_Polygon dc pount_array npoints-foreign import stdcall unsafe "windows.h Polygon"+foreign import WINDOWS_CCONV unsafe "windows.h Polygon" c_Polygon :: HDC -> Ptr POINT -> Int -> IO Bool polyBezier :: HDC -> [POINT] -> IO () polyBezier dc points = withPOINTArray points $ \ pount_array npoints -> failIfFalse_ "PolyBezier" $ c_PolyBezier dc pount_array npoints-foreign import stdcall unsafe "windows.h PolyBezier"+foreign import WINDOWS_CCONV unsafe "windows.h PolyBezier" c_PolyBezier :: HDC -> Ptr POINT -> Int -> IO Bool polyBezierTo :: HDC -> [POINT] -> IO () polyBezierTo dc points = withPOINTArray points $ \ pount_array npoints -> failIfFalse_ "PolyBezierTo" $ c_PolyBezierTo dc pount_array npoints-foreign import stdcall unsafe "windows.h PolyBezierTo"+foreign import WINDOWS_CCONV unsafe "windows.h PolyBezierTo" c_PolyBezierTo :: HDC -> Ptr POINT -> Int -> IO Bool arc :: HDC -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> IO () arc dc left top right bottom x1 y1 x2 y2 = failIfFalse_ "Arc" $ c_Arc dc left top right bottom x1 y1 x2 y2-foreign import stdcall unsafe "windows.h Arc"+foreign import WINDOWS_CCONV unsafe "windows.h Arc" c_Arc :: HDC -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> IO Bool arcTo :: HDC -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> IO () arcTo dc left top right bottom x1 y1 x2 y2 = failIfFalse_ "ArcTo" $ c_ArcTo dc left top right bottom x1 y1 x2 y2-foreign import stdcall unsafe "windows.h ArcTo"+foreign import WINDOWS_CCONV unsafe "windows.h ArcTo" c_ArcTo :: HDC -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> IO Bool angleArc :: HDC -> Int32 -> Int32 -> WORD -> Float -> Float -> IO () angleArc dc x y r start sweep = failIfFalse_ "AngleArc" $ c_AngleArc dc x y r start sweep-foreign import stdcall unsafe "windows.h AngleArc"+foreign import WINDOWS_CCONV unsafe "windows.h AngleArc" c_AngleArc :: HDC -> Int32 -> Int32 -> WORD -> Float -> Float -> IO Bool ----------------------------------------------------------------@@ -105,51 +107,51 @@ fillRect dc rect brush = withRECT rect $ \ c_rect -> failIfFalse_ "FillRect" $ c_FillRect dc c_rect brush-foreign import stdcall unsafe "windows.h FillRect"+foreign import WINDOWS_CCONV unsafe "windows.h FillRect" c_FillRect :: HDC -> Ptr RECT -> HBRUSH -> IO Bool frameRect :: HDC -> RECT -> HBRUSH -> IO () frameRect dc rect brush = withRECT rect $ \ c_rect -> failIfFalse_ "FrameRect" $ c_FrameRect dc c_rect brush-foreign import stdcall unsafe "windows.h FrameRect"+foreign import WINDOWS_CCONV unsafe "windows.h FrameRect" c_FrameRect :: HDC -> Ptr RECT -> HBRUSH -> IO Bool invertRect :: HDC -> RECT -> IO () invertRect dc rect = withRECT rect $ \ c_rect -> failIfFalse_ "InvertRect" $ c_InvertRect dc c_rect-foreign import stdcall unsafe "windows.h InvertRect"+foreign import WINDOWS_CCONV unsafe "windows.h InvertRect" c_InvertRect :: HDC -> Ptr RECT -> IO Bool rectangle :: HDC -> Int32 -> Int32 -> Int32 -> Int32 -> IO () rectangle dc left top right bottom = failIfFalse_ "Rectangle" $ c_Rectangle dc left top right bottom-foreign import stdcall unsafe "windows.h Rectangle"+foreign import WINDOWS_CCONV unsafe "windows.h Rectangle" c_Rectangle :: HDC -> Int32 -> Int32 -> Int32 -> Int32 -> IO Bool roundRect :: HDC -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> IO () roundRect dc left top right bottom w h = failIfFalse_ "RoundRect" $ c_RoundRect dc left top right bottom w h-foreign import stdcall unsafe "windows.h RoundRect"+foreign import WINDOWS_CCONV unsafe "windows.h RoundRect" c_RoundRect :: HDC -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> IO Bool ellipse :: HDC -> Int32 -> Int32 -> Int32 -> Int32 -> IO () ellipse dc left top right bottom = failIfFalse_ "Ellipse" $ c_Ellipse dc left top right bottom-foreign import stdcall unsafe "windows.h Ellipse"+foreign import WINDOWS_CCONV unsafe "windows.h Ellipse" c_Ellipse :: HDC -> Int32 -> Int32 -> Int32 -> Int32 -> IO Bool chord :: HDC -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> IO () chord dc left top right bottom x1 y1 x2 y2 = failIfFalse_ "Chord" $ c_Chord dc left top right bottom x1 y1 x2 y2-foreign import stdcall unsafe "windows.h Chord"+foreign import WINDOWS_CCONV unsafe "windows.h Chord" c_Chord :: HDC -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> IO Bool pie :: HDC -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> IO () pie dc left top right bottom x1 y1 x2 y2 = failIfFalse_ "Pie" $ c_Pie dc left top right bottom x1 y1 x2 y2-foreign import stdcall unsafe "windows.h Pie"+foreign import WINDOWS_CCONV unsafe "windows.h Pie" c_Pie :: HDC -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> IO Bool ----------------------------------------------------------------@@ -159,21 +161,21 @@ bitBlt :: HDC -> INT -> INT -> INT -> INT -> HDC -> INT -> INT -> RasterOp3 -> IO () bitBlt dcDest xDest yDest w h dcSrc xSrc ySrc rop = failIfFalse_ "BitBlt" $ c_BitBlt dcDest xDest yDest w h dcSrc xSrc ySrc rop-foreign import stdcall unsafe "windows.h BitBlt"+foreign import WINDOWS_CCONV unsafe "windows.h BitBlt" c_BitBlt :: HDC -> INT -> INT -> INT -> INT -> HDC -> INT -> INT -> RasterOp3 -> IO Bool maskBlt :: HDC -> INT -> INT -> INT -> INT -> HDC -> INT -> INT -> HBITMAP -> INT -> INT -> RasterOp4 -> IO () maskBlt dcDest xDest yDest w h dcSrc xSrc ySrc bm xMask yMask rop = failIfFalse_ "MaskBlt" $ c_MaskBlt dcDest xDest yDest w h dcSrc xSrc ySrc bm xMask yMask rop-foreign import stdcall unsafe "windows.h MaskBlt"+foreign import WINDOWS_CCONV unsafe "windows.h MaskBlt" c_MaskBlt :: HDC -> INT -> INT -> INT -> INT -> HDC -> INT -> INT -> HBITMAP -> INT -> INT -> RasterOp4 -> IO Bool stretchBlt :: HDC -> INT -> INT -> INT -> INT -> HDC -> INT -> INT -> INT -> INT -> RasterOp3 -> IO () stretchBlt dcDest xDest yDest wDest hDest hdcSrc xSrc ySrc wSrc hSrc rop = failIfFalse_ "StretchBlt" $ c_StretchBlt dcDest xDest yDest wDest hDest hdcSrc xSrc ySrc wSrc hSrc rop-foreign import stdcall unsafe "windows.h StretchBlt"+foreign import WINDOWS_CCONV unsafe "windows.h StretchBlt" c_StretchBlt :: HDC -> INT -> INT -> INT -> INT -> HDC -> INT -> INT -> INT -> INT -> RasterOp3 -> IO Bool -- We deviate slightly from the Win32 interface@@ -188,7 +190,7 @@ withPOINTArray [p1,p2,p3] $ \ vertices _ -> failIfFalse_ "PlgBlt" $ c_PlgBlt hdDest vertices hdSrc x y w h (maybePtr mb_bm) xMask yMask-foreign import stdcall unsafe "windows.h PlgBlt"+foreign import WINDOWS_CCONV unsafe "windows.h PlgBlt" c_PlgBlt :: HDC -> Ptr POINT -> HDC -> INT -> INT -> INT -> INT -> HBITMAP -> INT -> INT -> IO Bool ----------------------------------------------------------------@@ -199,7 +201,7 @@ textOut dc x y str = withTStringLen str $ \ (c_str, len) -> failIfFalse_ "TextOut" $ c_TextOut dc x y c_str len-foreign import stdcall unsafe "windows.h TextOutW"+foreign import WINDOWS_CCONV unsafe "windows.h TextOutW" c_TextOut :: HDC -> INT -> INT -> LPCTSTR -> Int -> IO Bool -- missing TabbedTextOut from WinFonts.ss; GSL ???@@ -211,7 +213,7 @@ failIfFalse_ "GetTextExtentPoint32" $ c_GetTextExtentPoint32 dc c_str len p_size peekSIZE p_size-foreign import stdcall unsafe "windows.h GetTextExtentPoint32W"+foreign import WINDOWS_CCONV unsafe "windows.h GetTextExtentPoint32W" c_GetTextExtentPoint32 :: HDC -> LPCTSTR -> Int -> Ptr SIZE -> IO Bool -- missing getTabbedTextExtent from WinFonts.ss; GSL ???
Graphics/Win32/GDI/HDC.hs view
@@ -24,90 +24,92 @@ import Foreign +#include "windows_cconv.h"+ ---------------------------------------------------------------- setArcDirection :: HDC -> ArcDirection -> IO ArcDirection setArcDirection dc dir = failIfZero "SetArcDirection" $ c_SetArcDirection dc dir-foreign import stdcall unsafe "windows.h SetArcDirection"+foreign import WINDOWS_CCONV unsafe "windows.h SetArcDirection" c_SetArcDirection :: HDC -> ArcDirection -> IO ArcDirection getArcDirection :: HDC -> IO ArcDirection getArcDirection dc = failIfZero "GetArcDirection" $ c_GetArcDirection dc-foreign import stdcall unsafe "windows.h GetArcDirection"+foreign import WINDOWS_CCONV unsafe "windows.h GetArcDirection" c_GetArcDirection :: HDC -> IO ArcDirection setPolyFillMode :: HDC -> PolyFillMode -> IO PolyFillMode setPolyFillMode dc mode = failIfZero "SetPolyFillMode" $ c_SetPolyFillMode dc mode-foreign import stdcall unsafe "windows.h SetPolyFillMode"+foreign import WINDOWS_CCONV unsafe "windows.h SetPolyFillMode" c_SetPolyFillMode :: HDC -> PolyFillMode -> IO PolyFillMode getPolyFillMode :: HDC -> IO PolyFillMode getPolyFillMode dc = failIfZero "GetPolyFillMode" $ c_GetPolyFillMode dc-foreign import stdcall unsafe "windows.h GetPolyFillMode"+foreign import WINDOWS_CCONV unsafe "windows.h GetPolyFillMode" c_GetPolyFillMode :: HDC -> IO PolyFillMode setGraphicsMode :: HDC -> GraphicsMode -> IO GraphicsMode setGraphicsMode dc mode = failIfZero "SetGraphicsMode" $ c_SetGraphicsMode dc mode-foreign import stdcall unsafe "windows.h SetGraphicsMode"+foreign import WINDOWS_CCONV unsafe "windows.h SetGraphicsMode" c_SetGraphicsMode :: HDC -> GraphicsMode -> IO GraphicsMode getGraphicsMode :: HDC -> IO GraphicsMode getGraphicsMode dc = failIfZero "GetGraphicsMode" $ c_GetGraphicsMode dc-foreign import stdcall unsafe "windows.h GetGraphicsMode"+foreign import WINDOWS_CCONV unsafe "windows.h GetGraphicsMode" c_GetGraphicsMode :: HDC -> IO GraphicsMode setStretchBltMode :: HDC -> StretchBltMode -> IO StretchBltMode setStretchBltMode dc mode = failIfZero "SetStretchBltMode" $ c_SetStretchBltMode dc mode-foreign import stdcall unsafe "windows.h SetStretchBltMode"+foreign import WINDOWS_CCONV unsafe "windows.h SetStretchBltMode" c_SetStretchBltMode :: HDC -> StretchBltMode -> IO StretchBltMode getStretchBltMode :: HDC -> IO StretchBltMode getStretchBltMode dc = failIfZero "GetStretchBltMode" $ c_GetStretchBltMode dc-foreign import stdcall unsafe "windows.h GetStretchBltMode"+foreign import WINDOWS_CCONV unsafe "windows.h GetStretchBltMode" c_GetStretchBltMode :: HDC -> IO StretchBltMode setBkColor :: HDC -> COLORREF -> IO COLORREF setBkColor dc color = failIfZero "SetBkColor" $ c_SetBkColor dc color-foreign import stdcall unsafe "windows.h SetBkColor"+foreign import WINDOWS_CCONV unsafe "windows.h SetBkColor" c_SetBkColor :: HDC -> COLORREF -> IO COLORREF getBkColor :: HDC -> IO COLORREF getBkColor dc = failIfZero "GetBkColor" $ c_GetBkColor dc-foreign import stdcall unsafe "windows.h GetBkColor"+foreign import WINDOWS_CCONV unsafe "windows.h GetBkColor" c_GetBkColor :: HDC -> IO COLORREF setTextColor :: HDC -> COLORREF -> IO COLORREF setTextColor dc color = failIf (== cLR_INVALID) "SetTextColor" $ c_SetTextColor dc color-foreign import stdcall unsafe "windows.h SetTextColor"+foreign import WINDOWS_CCONV unsafe "windows.h SetTextColor" c_SetTextColor :: HDC -> COLORREF -> IO COLORREF getTextColor :: HDC -> IO COLORREF getTextColor dc = failIf (== cLR_INVALID) "GetTextColor" $ c_GetTextColor dc-foreign import stdcall unsafe "windows.h GetTextColor"+foreign import WINDOWS_CCONV unsafe "windows.h GetTextColor" c_GetTextColor :: HDC -> IO COLORREF setBkMode :: HDC -> BackgroundMode -> IO BackgroundMode setBkMode dc mode = failIfZero "SetBkMode" $ c_SetBkMode dc mode-foreign import stdcall unsafe "windows.h SetBkMode"+foreign import WINDOWS_CCONV unsafe "windows.h SetBkMode" c_SetBkMode :: HDC -> BackgroundMode -> IO BackgroundMode getBkMode :: HDC -> IO BackgroundMode getBkMode dc = failIfZero "GetBkMode" $ c_GetBkMode dc-foreign import stdcall unsafe "windows.h GetBkMode"+foreign import WINDOWS_CCONV unsafe "windows.h GetBkMode" c_GetBkMode :: HDC -> IO BackgroundMode setBrushOrgEx :: HDC -> Int -> Int -> IO POINT@@ -115,7 +117,7 @@ allocaPOINT $ \ pt -> do failIfFalse_ "SetBrushOrgEx" $ c_SetBrushOrgEx dc x y pt peekPOINT pt-foreign import stdcall unsafe "windows.h SetBrushOrgEx"+foreign import WINDOWS_CCONV unsafe "windows.h SetBrushOrgEx" c_SetBrushOrgEx :: HDC -> Int -> Int -> Ptr POINT -> IO Bool getBrushOrgEx :: HDC -> IO POINT@@ -123,32 +125,32 @@ allocaPOINT $ \ pt -> do failIfFalse_ "GetBrushOrgEx" $ c_GetBrushOrgEx dc pt peekPOINT pt-foreign import stdcall unsafe "windows.h GetBrushOrgEx"+foreign import WINDOWS_CCONV unsafe "windows.h GetBrushOrgEx" c_GetBrushOrgEx :: HDC -> Ptr POINT -> IO Bool setTextAlign :: HDC -> TextAlignment -> IO TextAlignment setTextAlign dc align = failIf (== gDI_ERROR) "SetTextAlign" $ c_SetTextAlign dc align-foreign import stdcall unsafe "windows.h SetTextAlign"+foreign import WINDOWS_CCONV unsafe "windows.h SetTextAlign" c_SetTextAlign :: HDC -> TextAlignment -> IO TextAlignment getTextAlign :: HDC -> IO TextAlignment getTextAlign dc = failIf (== gDI_ERROR) "GetTextAlign" $ c_GetTextAlign dc-foreign import stdcall unsafe "windows.h GetTextAlign"+foreign import WINDOWS_CCONV unsafe "windows.h GetTextAlign" c_GetTextAlign :: HDC -> IO TextAlignment setTextCharacterExtra :: HDC -> Int -> IO Int setTextCharacterExtra dc extra = failIf (== 0x80000000) "SetTextCharacterExtra" $ c_SetTextCharacterExtra dc extra-foreign import stdcall unsafe "windows.h SetTextCharacterExtra"+foreign import WINDOWS_CCONV unsafe "windows.h SetTextCharacterExtra" c_SetTextCharacterExtra :: HDC -> Int -> IO Int getTextCharacterExtra :: HDC -> IO Int getTextCharacterExtra dc = failIf (== 0x80000000) "GetTextCharacterExtra" $ c_GetTextCharacterExtra dc-foreign import stdcall unsafe "windows.h GetTextCharacterExtra"+foreign import WINDOWS_CCONV unsafe "windows.h GetTextCharacterExtra" c_GetTextCharacterExtra :: HDC -> IO Int getMiterLimit :: HDC -> IO Float@@ -156,7 +158,7 @@ alloca $ \ p_res -> do failIfFalse_ "GetMiterLimit" $ c_GetMiterLimit dc p_res peek p_res-foreign import stdcall unsafe "windows.h GetMiterLimit"+foreign import WINDOWS_CCONV unsafe "windows.h GetMiterLimit" c_GetMiterLimit :: HDC -> Ptr FLOAT -> IO Bool setMiterLimit :: HDC -> Float -> IO Float@@ -164,7 +166,7 @@ alloca $ \ p_old_limit -> do failIfFalse_ "SetMiterLimit" $ c_SetMiterLimit dc new_limit p_old_limit peek p_old_limit-foreign import stdcall unsafe "windows.h SetMiterLimit"+foreign import WINDOWS_CCONV unsafe "windows.h SetMiterLimit" c_SetMiterLimit :: HDC -> FLOAT -> Ptr FLOAT -> IO Bool ----------------------------------------------------------------@@ -172,13 +174,13 @@ saveDC :: HDC -> IO Int saveDC dc = failIfZero "SaveDC" $ c_SaveDC dc-foreign import stdcall unsafe "windows.h SaveDC"+foreign import WINDOWS_CCONV unsafe "windows.h SaveDC" c_SaveDC :: HDC -> IO Int restoreDC :: HDC -> Int -> IO () restoreDC dc saved = failIfFalse_ "RestoreDC" $ c_RestoreDC dc saved-foreign import stdcall unsafe "windows.h RestoreDC"+foreign import WINDOWS_CCONV unsafe "windows.h RestoreDC" c_RestoreDC :: HDC -> Int -> IO Bool ----------------------------------------------------------------@@ -186,55 +188,55 @@ getCurrentBitmap :: HDC -> IO HBITMAP getCurrentBitmap dc = failIfNull "GetCurrentBitmap" $ c_GetCurrentBitmap dc oBJ_BITMAP-foreign import stdcall unsafe "windows.h GetCurrentObject"+foreign import WINDOWS_CCONV unsafe "windows.h GetCurrentObject" c_GetCurrentBitmap :: HDC -> UINT -> IO HBITMAP getCurrentBrush :: HDC -> IO HBRUSH getCurrentBrush dc = failIfNull "GetCurrentBrush" $ c_GetCurrentBrush dc oBJ_BRUSH-foreign import stdcall unsafe "windows.h GetCurrentObject"+foreign import WINDOWS_CCONV unsafe "windows.h GetCurrentObject" c_GetCurrentBrush :: HDC -> UINT -> IO HBRUSH getCurrentFont :: HDC -> IO HFONT getCurrentFont dc = failIfNull "GetCurrentFont" $ c_GetCurrentFont dc oBJ_FONT-foreign import stdcall unsafe "windows.h GetCurrentObject"+foreign import WINDOWS_CCONV unsafe "windows.h GetCurrentObject" c_GetCurrentFont :: HDC -> UINT -> IO HFONT getCurrentPalette :: HDC -> IO HPALETTE getCurrentPalette dc = failIfNull "GetCurrentPalette" $ c_GetCurrentPalette dc oBJ_PAL-foreign import stdcall unsafe "windows.h GetCurrentObject"+foreign import WINDOWS_CCONV unsafe "windows.h GetCurrentObject" c_GetCurrentPalette :: HDC -> UINT -> IO HPALETTE getCurrentPen :: HDC -> IO HPEN getCurrentPen dc = failIfNull "GetCurrentPen" $ c_GetCurrentPen dc oBJ_PEN-foreign import stdcall unsafe "windows.h GetCurrentObject"+foreign import WINDOWS_CCONV unsafe "windows.h GetCurrentObject" c_GetCurrentPen :: HDC -> UINT -> IO HPEN selectBitmap :: HDC -> HBITMAP -> IO HBITMAP selectBitmap dc bitmap = failIfNull "SelectBitmap" $ c_SelectBitmap dc bitmap-foreign import stdcall unsafe "windows.h SelectObject"+foreign import WINDOWS_CCONV unsafe "windows.h SelectObject" c_SelectBitmap :: HDC -> HBITMAP -> IO HBITMAP selectBrush :: HDC -> HBRUSH -> IO HBRUSH selectBrush dc brush = failIfNull "SelectBrush" $ c_SelectBrush dc brush-foreign import stdcall unsafe "windows.h SelectObject"+foreign import WINDOWS_CCONV unsafe "windows.h SelectObject" c_SelectBrush :: HDC -> HBRUSH -> IO HBRUSH selectFont :: HDC -> HFONT -> IO HFONT selectFont dc font = failIfNull "SelectFont" $ c_SelectFont dc font-foreign import stdcall unsafe "windows.h SelectObject"+foreign import WINDOWS_CCONV unsafe "windows.h SelectObject" c_SelectFont :: HDC -> HFONT -> IO HFONT selectPen :: HDC -> HPEN -> IO HPEN selectPen dc pen = failIfNull "SelectPen" $ c_SelectPen dc pen-foreign import stdcall unsafe "windows.h SelectObject"+foreign import WINDOWS_CCONV unsafe "windows.h SelectObject" c_SelectPen :: HDC -> HPEN -> IO HPEN ----------------------------------------------------------------@@ -244,7 +246,7 @@ selectPalette :: HDC -> HPALETTE -> Bool -> IO HPALETTE selectPalette dc palette force_bg = failIfNull "SelectPalette" $ c_SelectPalette dc palette force_bg-foreign import stdcall unsafe "windows.h SelectPalette"+foreign import WINDOWS_CCONV unsafe "windows.h SelectPalette" c_SelectPalette :: HDC -> HPALETTE -> Bool -> IO HPALETTE selectRgn :: HDC -> HRGN -> IO RegionType@@ -260,20 +262,20 @@ selectClipRgn dc mb_rgn = maybeWith withForeignPtr mb_rgn $ \ p_rgn -> failIfZero "SelectClipRgn" $ c_SelectClipRgn dc p_rgn-foreign import stdcall unsafe "windows.h SelectClipRgn"+foreign import WINDOWS_CCONV unsafe "windows.h SelectClipRgn" c_SelectClipRgn :: HDC -> PRGN -> IO RegionType extSelectClipRgn :: HDC -> Maybe HRGN -> ClippingMode -> IO RegionType extSelectClipRgn dc mb_rgn mode = maybeWith withForeignPtr mb_rgn $ \ p_rgn -> failIfZero "ExtSelectClipRgn" $ c_ExtSelectClipRgn dc p_rgn mode-foreign import stdcall unsafe "windows.h ExtSelectClipRgn"+foreign import WINDOWS_CCONV unsafe "windows.h ExtSelectClipRgn" c_ExtSelectClipRgn :: HDC -> PRGN -> ClippingMode -> IO RegionType selectClipPath :: HDC -> ClippingMode -> IO RegionType selectClipPath dc mode = failIfZero "SelectClipPath" $ c_SelectClipPath dc mode-foreign import stdcall unsafe "windows.h SelectClipPath"+foreign import WINDOWS_CCONV unsafe "windows.h SelectClipPath" c_SelectClipPath :: HDC -> ClippingMode -> IO RegionType ----------------------------------------------------------------@@ -283,19 +285,19 @@ cancelDC :: HDC -> IO () cancelDC dc = failIfFalse_ "CancelDC" $ c_CancelDC dc-foreign import stdcall unsafe "windows.h CancelDC"+foreign import WINDOWS_CCONV unsafe "windows.h CancelDC" c_CancelDC :: HDC -> IO Bool createCompatibleDC :: Maybe HDC -> IO HDC createCompatibleDC mb_dc = failIfNull "CreateCompatibleDC" $ c_CreateCompatibleDC (maybePtr mb_dc)-foreign import stdcall unsafe "windows.h CreateCompatibleDC"+foreign import WINDOWS_CCONV unsafe "windows.h CreateCompatibleDC" c_CreateCompatibleDC :: HDC -> IO HDC deleteDC :: HDC -> IO () deleteDC dc = failIfFalse_ "DeleteDC" $ c_DeleteDC dc-foreign import stdcall unsafe "windows.h DeleteDC"+foreign import WINDOWS_CCONV unsafe "windows.h DeleteDC" c_DeleteDC :: HDC -> IO Bool ----------------------------------------------------------------
Graphics/Win32/GDI/Palette.hsc view
@@ -20,6 +20,7 @@ import System.Win32.Types import Graphics.Win32.GDI.Types +##include "windows_cconv.h" #include <windows.h> ----------------------------------------------------------------@@ -35,13 +36,13 @@ getStockPalette :: StockPalette -> IO HPALETTE getStockPalette sp = failIfNull "GetStockPalette" $ c_GetStockPalette sp-foreign import stdcall unsafe "windows.h GetStockObject"+foreign import WINDOWS_CCONV unsafe "windows.h GetStockObject" c_GetStockPalette :: StockPalette -> IO HPALETTE deletePalette :: HPALETTE -> IO () deletePalette p = failIfFalse_ "DeletePalette" $ c_DeletePalette p-foreign import stdcall unsafe "windows.h DeleteObject"+foreign import WINDOWS_CCONV unsafe "windows.h DeleteObject" c_DeletePalette :: HPALETTE -> IO Bool ----------------------------------------------------------------
Graphics/Win32/GDI/Path.hs view
@@ -23,6 +23,8 @@ import Graphics.Win32.GDI.Types import System.Win32.Types +#include "windows_cconv.h"+ ---------------------------------------------------------------- -- Paths ----------------------------------------------------------------@@ -32,56 +34,56 @@ beginPath :: HDC -> IO () beginPath dc = failIfFalse_ "BeginPath" $ c_BeginPath dc-foreign import stdcall unsafe "windows.h BeginPath"+foreign import WINDOWS_CCONV unsafe "windows.h BeginPath" c_BeginPath :: HDC -> IO Bool closeFigure :: HDC -> IO () closeFigure dc = failIfFalse_ "CloseFigure" $ c_CloseFigure dc-foreign import stdcall unsafe "windows.h CloseFigure"+foreign import WINDOWS_CCONV unsafe "windows.h CloseFigure" c_CloseFigure :: HDC -> IO Bool endPath :: HDC -> IO () endPath dc = failIfFalse_ "EndPath" $ c_EndPath dc-foreign import stdcall unsafe "windows.h EndPath"+foreign import WINDOWS_CCONV unsafe "windows.h EndPath" c_EndPath :: HDC -> IO Bool fillPath :: HDC -> IO () fillPath dc = failIfFalse_ "FillPath" $ c_FillPath dc-foreign import stdcall unsafe "windows.h FillPath"+foreign import WINDOWS_CCONV unsafe "windows.h FillPath" c_FillPath :: HDC -> IO Bool flattenPath :: HDC -> IO () flattenPath dc = failIfFalse_ "FlattenPath" $ c_FlattenPath dc-foreign import stdcall unsafe "windows.h FlattenPath"+foreign import WINDOWS_CCONV unsafe "windows.h FlattenPath" c_FlattenPath :: HDC -> IO Bool pathToRegion :: HDC -> IO HRGN pathToRegion dc = do ptr <- failIfNull "PathToRegion" $ c_PathToRegion dc newForeignHANDLE ptr-foreign import stdcall unsafe "windows.h PathToRegion"+foreign import WINDOWS_CCONV unsafe "windows.h PathToRegion" c_PathToRegion :: HDC -> IO PRGN strokeAndFillPath :: HDC -> IO () strokeAndFillPath dc = failIfFalse_ "StrokeAndFillPath" $ c_StrokeAndFillPath dc-foreign import stdcall unsafe "windows.h StrokeAndFillPath"+foreign import WINDOWS_CCONV unsafe "windows.h StrokeAndFillPath" c_StrokeAndFillPath :: HDC -> IO Bool strokePath :: HDC -> IO () strokePath dc = failIfFalse_ "StrokePath" $ c_StrokePath dc-foreign import stdcall unsafe "windows.h StrokePath"+foreign import WINDOWS_CCONV unsafe "windows.h StrokePath" c_StrokePath :: HDC -> IO Bool widenPath :: HDC -> IO () widenPath dc = failIfFalse_ "WidenPath" $ c_WidenPath dc-foreign import stdcall unsafe "windows.h WidenPath"+foreign import WINDOWS_CCONV unsafe "windows.h WidenPath" c_WidenPath :: HDC -> IO Bool ----------------------------------------------------------------
Graphics/Win32/GDI/Pen.hsc view
@@ -20,6 +20,8 @@ import System.Win32.Types import Graphics.Win32.GDI.Types +##include "windows_cconv.h"+ #include <windows.h> ----------------------------------------------------------------@@ -37,13 +39,13 @@ getStockPen :: StockPen -> IO HPEN getStockPen stockpen = failIfNull "GetStockPen" $ c_GetStockPen stockpen-foreign import stdcall unsafe "windows.h GetStockObject"+foreign import WINDOWS_CCONV unsafe "windows.h GetStockObject" c_GetStockPen :: StockPen -> IO HPEN deletePen :: HPEN -> IO () deletePen pen = failIfFalse_ "DeletePen" $ c_DeletePen pen-foreign import stdcall unsafe "windows.h DeleteObject"+foreign import WINDOWS_CCONV unsafe "windows.h DeleteObject" c_DeletePen :: HPEN -> IO Bool ----------------------------------------------------------------@@ -92,7 +94,7 @@ createPen :: PenStyle -> INT -> COLORREF -> IO HPEN createPen style n color = failIfNull "CreatePen" $ c_CreatePen style n color-foreign import stdcall unsafe "windows.h CreatePen"+foreign import WINDOWS_CCONV unsafe "windows.h CreatePen" c_CreatePen :: PenStyle -> INT -> COLORREF -> IO HPEN -- Not very well supported on Win'95
Graphics/Win32/GDI/Region.hs view
@@ -22,6 +22,8 @@ import Foreign +#include "windows_cconv.h"+ ---------------------------------------------------------------- -- Regions ----------------------------------------------------------------@@ -35,56 +37,56 @@ withForeignPtr src1 $ \ p_src1 -> withForeignPtr src2 $ \ p_src2 -> failIf badRegion "CombineRgn" $ c_CombineRgn p_dest p_src1 p_src2 mode-foreign import stdcall unsafe "windows.h CombineRgn"+foreign import WINDOWS_CCONV unsafe "windows.h CombineRgn" c_CombineRgn :: PRGN -> PRGN -> PRGN -> ClippingMode -> IO RegionType offsetRgn :: HRGN -> INT -> INT -> IO RegionType offsetRgn rgn xoff yoff = withForeignPtr rgn $ \ p_rgn -> failIf badRegion "OffsetRgn" $ c_OffsetRgn p_rgn xoff yoff-foreign import stdcall unsafe "windows.h OffsetRgn"+foreign import WINDOWS_CCONV unsafe "windows.h OffsetRgn" c_OffsetRgn :: PRGN -> INT -> INT -> IO RegionType getRgnBox :: HRGN -> LPRECT -> IO RegionType getRgnBox rgn p_rect = withForeignPtr rgn $ \ p_rgn -> failIf badRegion "GetRgnBox" $ c_GetRgnBox p_rgn p_rect-foreign import stdcall unsafe "windows.h GetRgnBox"+foreign import WINDOWS_CCONV unsafe "windows.h GetRgnBox" c_GetRgnBox :: PRGN -> LPRECT -> IO RegionType createEllipticRgn :: INT -> INT -> INT -> INT -> IO HRGN createEllipticRgn x0 y0 x1 y1 = do ptr <- failIfNull "CreateEllipticRgn" $ c_CreateEllipticRgn x0 y0 x1 y1 newForeignHANDLE ptr-foreign import stdcall unsafe "windows.h CreateEllipticRgn"+foreign import WINDOWS_CCONV unsafe "windows.h CreateEllipticRgn" c_CreateEllipticRgn :: INT -> INT -> INT -> INT -> IO PRGN createEllipticRgnIndirect :: LPRECT -> IO HRGN createEllipticRgnIndirect rp = do ptr <- failIfNull "CreateEllipticRgnIndirect" $ c_CreateEllipticRgnIndirect rp newForeignHANDLE ptr-foreign import stdcall unsafe "windows.h CreateEllipticRgnIndirect"+foreign import WINDOWS_CCONV unsafe "windows.h CreateEllipticRgnIndirect" c_CreateEllipticRgnIndirect :: LPRECT -> IO PRGN createRectRgn :: INT -> INT -> INT -> INT -> IO HRGN createRectRgn x0 y0 x1 y1 = do ptr <- failIfNull "CreateRectRgn" $ c_CreateRectRgn x0 y0 x1 y1 newForeignHANDLE ptr-foreign import stdcall unsafe "windows.h CreateRectRgn"+foreign import WINDOWS_CCONV unsafe "windows.h CreateRectRgn" c_CreateRectRgn :: INT -> INT -> INT -> INT -> IO PRGN createRectRgnIndirect :: LPRECT -> IO HRGN createRectRgnIndirect rp = do ptr <- failIfNull "CreateRectRgnIndirect" $ c_CreateRectRgnIndirect rp newForeignHANDLE ptr-foreign import stdcall unsafe "windows.h CreateRectRgnIndirect"+foreign import WINDOWS_CCONV unsafe "windows.h CreateRectRgnIndirect" c_CreateRectRgnIndirect :: LPRECT -> IO PRGN createRoundRectRgn :: INT -> INT -> INT -> INT -> INT -> INT -> IO HRGN createRoundRectRgn x0 y0 x1 y1 h w = do ptr <- failIfNull "CreateRoundRectRgn" $ c_CreateRoundRectRgn x0 y0 x1 y1 h w newForeignHANDLE ptr-foreign import stdcall unsafe "windows.h CreateRoundRectRgn"+foreign import WINDOWS_CCONV unsafe "windows.h CreateRoundRectRgn" c_CreateRoundRectRgn :: INT -> INT -> INT -> INT -> INT -> INT -> IO PRGN createPolygonRgn :: [POINT] -> PolyFillMode -> IO HRGN@@ -93,54 +95,54 @@ ptr <- failIfNull "CreatePolygonRgn" $ c_CreatePolygonRgn point_array npoints mode newForeignHANDLE ptr-foreign import stdcall unsafe "windows.h CreatePolygonRgn"+foreign import WINDOWS_CCONV unsafe "windows.h CreatePolygonRgn" c_CreatePolygonRgn :: Ptr POINT -> Int -> PolyFillMode -> IO PRGN -- Needs to do proper error test for EqualRgn; GSL ??? -foreign import stdcall unsafe "windows.h EqualRgn"+foreign import WINDOWS_CCONV unsafe "windows.h EqualRgn" equalRgn :: PRGN -> PRGN -> IO Bool fillRgn :: HDC -> HRGN -> HBRUSH -> IO () fillRgn dc rgn brush = withForeignPtr rgn $ \ p_rgn -> failIfFalse_ "FillRgn" $ c_FillRgn dc p_rgn brush-foreign import stdcall unsafe "windows.h FillRgn"+foreign import WINDOWS_CCONV unsafe "windows.h FillRgn" c_FillRgn :: HDC -> PRGN -> HBRUSH -> IO Bool invertRgn :: HDC -> HRGN -> IO () invertRgn dc rgn = withForeignPtr rgn $ \ p_rgn -> failIfFalse_ "InvertRgn" $ c_InvertRgn dc p_rgn-foreign import stdcall unsafe "windows.h InvertRgn"+foreign import WINDOWS_CCONV unsafe "windows.h InvertRgn" c_InvertRgn :: HDC -> PRGN -> IO Bool paintRgn :: HDC -> HRGN -> IO () paintRgn dc rgn = withForeignPtr rgn $ \ p_rgn -> failIfFalse_ "PaintRgn" $ c_PaintRgn dc p_rgn-foreign import stdcall unsafe "windows.h PaintRgn"+foreign import WINDOWS_CCONV unsafe "windows.h PaintRgn" c_PaintRgn :: HDC -> PRGN -> IO Bool frameRgn :: HDC -> HRGN -> HBRUSH -> Int -> Int -> IO () frameRgn dc rgn brush w h = withForeignPtr rgn $ \ p_rgn -> failIfFalse_ "FrameRgn" $ c_FrameRgn dc p_rgn brush w h-foreign import stdcall unsafe "windows.h FrameRgn"+foreign import WINDOWS_CCONV unsafe "windows.h FrameRgn" c_FrameRgn :: HDC -> PRGN -> HBRUSH -> Int -> Int -> IO Bool ptInRegion :: HRGN -> Int -> Int -> IO Bool ptInRegion rgn x y = withForeignPtr rgn $ \ p_rgn -> c_PtInRegion p_rgn x y-foreign import stdcall unsafe "windows.h PtInRegion"+foreign import WINDOWS_CCONV unsafe "windows.h PtInRegion" c_PtInRegion :: PRGN -> Int -> Int -> IO Bool rectInRegion :: HRGN -> RECT -> IO Bool rectInRegion rgn rect = withForeignPtr rgn $ \ p_rgn -> withRECT rect $ c_RectInRegion p_rgn-foreign import stdcall unsafe "windows.h RectInRegion"+foreign import WINDOWS_CCONV unsafe "windows.h RectInRegion" c_RectInRegion :: PRGN -> Ptr RECT -> IO Bool ----------------------------------------------------------------
Graphics/Win32/GDI/Types.hsc view
@@ -215,11 +215,11 @@ type HWND = HANDLE type MbHWND = Maybe HWND -#{enum HWND, castUINTToPtr- , hWND_BOTTOM = HWND_BOTTOM- , hWND_NOTOPMOST = HWND_NOTOPMOST- , hWND_TOP = HWND_TOP- , hWND_TOPMOST = HWND_TOPMOST+#{enum HWND, castUINTPtrToPtr+ , hWND_BOTTOM = (UINT_PTR)HWND_BOTTOM+ , hWND_NOTOPMOST = (UINT_PTR)HWND_NOTOPMOST+ , hWND_TOP = (UINT_PTR)HWND_TOP+ , hWND_TOPMOST = (UINT_PTR)HWND_TOPMOST } type HMENU = HANDLE
Graphics/Win32/Icon.hs view
@@ -20,6 +20,8 @@ import Graphics.Win32.GDI.Types import System.Win32.Types +#include "windows_cconv.h"+ ---------------------------------------------------------------- -- Icons ----------------------------------------------------------------@@ -27,19 +29,19 @@ copyIcon :: HICON -> IO HICON copyIcon icon = failIfNull "CopyIcon" $ c_CopyIcon icon-foreign import stdcall unsafe "windows.h CopyIcon"+foreign import WINDOWS_CCONV unsafe "windows.h CopyIcon" c_CopyIcon :: HICON -> IO HICON drawIcon :: HDC -> Int -> Int -> HICON -> IO () drawIcon dc x y icon = failIfFalse_ "DrawIcon" $ c_DrawIcon dc x y icon-foreign import stdcall unsafe "windows.h DrawIcon"+foreign import WINDOWS_CCONV unsafe "windows.h DrawIcon" c_DrawIcon :: HDC -> Int -> Int -> HICON -> IO Bool destroyIcon :: HICON -> IO () destroyIcon icon = failIfFalse_ "DestroyIcon" $ c_DestroyIcon icon-foreign import stdcall unsafe "windows.h DestroyIcon"+foreign import WINDOWS_CCONV unsafe "windows.h DestroyIcon" c_DestroyIcon :: HICON -> IO Bool ----------------------------------------------------------------
Graphics/Win32/Key.hsc view
@@ -22,6 +22,8 @@ import Control.Monad (liftM) +##include "windows_cconv.h"+ #include <windows.h> type VKey = DWORD@@ -100,24 +102,24 @@ , vK_SCROLL = VK_SCROLL } -foreign import stdcall unsafe "windows.h EnableWindow"+foreign import WINDOWS_CCONV unsafe "windows.h EnableWindow" enableWindow :: HWND -> Bool -> IO Bool getActiveWindow :: IO (Maybe HWND) getActiveWindow = liftM ptrToMaybe c_GetActiveWindow-foreign import stdcall unsafe "windows.h GetActiveWindow"+foreign import WINDOWS_CCONV unsafe "windows.h GetActiveWindow" c_GetActiveWindow :: IO HWND -foreign import stdcall unsafe "windows.h GetAsyncKeyState"+foreign import WINDOWS_CCONV unsafe "windows.h GetAsyncKeyState" getAsyncKeyState :: Int -> IO WORD getFocus :: IO (Maybe HWND) getFocus = liftM ptrToMaybe c_GetFocus-foreign import stdcall unsafe "windows.h GetFocus"+foreign import WINDOWS_CCONV unsafe "windows.h GetFocus" c_GetFocus :: IO HWND -foreign import stdcall unsafe "windows.h GetKBCodePage"+foreign import WINDOWS_CCONV unsafe "windows.h GetKBCodePage" getKBCodePage :: IO UINT -foreign import stdcall unsafe "windows.h IsWindowEnabled"+foreign import WINDOWS_CCONV unsafe "windows.h IsWindowEnabled" isWindowEnabled :: HWND -> IO Bool
Graphics/Win32/Menu.hsc view
@@ -69,6 +69,8 @@ import Foreign import Control.Monad (liftM) +##include "windows_cconv.h"+ #include <windows.h> type MenuName = LPCTSTR@@ -77,32 +79,32 @@ checkMenuItem menu item check = do rv <- failIf (== -1) "CheckMenuItem" $ c_CheckMenuItem menu item check return (rv == mF_CHECKED)-foreign import stdcall unsafe "windows.h CheckMenuItem"+foreign import WINDOWS_CCONV unsafe "windows.h CheckMenuItem" c_CheckMenuItem :: HMENU -> UINT -> UINT -> IO DWORD checkMenuRadioItem :: HMENU -> MenuItem -> MenuItem -> MenuItem -> MenuFlag -> IO () checkMenuRadioItem menu first_id last_id check flags = failIfFalse_ "CheckMenuRadioItem" $ c_CheckMenuRadioItem menu first_id last_id check flags-foreign import stdcall unsafe "windows.h CheckMenuRadioItem"+foreign import WINDOWS_CCONV unsafe "windows.h CheckMenuRadioItem" c_CheckMenuRadioItem :: HMENU -> UINT -> UINT -> UINT -> UINT -> IO Bool createMenu :: IO HMENU createMenu = failIfNull "CreateMenu" $ c_CreateMenu-foreign import stdcall unsafe "windows.h CreateMenu"+foreign import WINDOWS_CCONV unsafe "windows.h CreateMenu" c_CreateMenu :: IO HMENU createPopupMenu :: IO HMENU createPopupMenu = failIfNull "CreatePopupMenu" $ c_CreatePopupMenu-foreign import stdcall unsafe "windows.h CreatePopupMenu"+foreign import WINDOWS_CCONV unsafe "windows.h CreatePopupMenu" c_CreatePopupMenu :: IO HMENU drawMenuBar :: HWND -> IO () drawMenuBar wnd = failIfFalse_ "DrawMenuBar" $ c_DrawMenuBar wnd-foreign import stdcall unsafe "windows.h DrawMenuBar"+foreign import WINDOWS_CCONV unsafe "windows.h DrawMenuBar" c_DrawMenuBar :: HWND -> IO Bool type MenuState = MenuFlag@@ -110,7 +112,7 @@ enableMenuItem :: HMENU -> MenuItem -> MenuFlag -> IO MenuState enableMenuItem menu item flag = failIf (== 0xffffffff) "EnableMenuItem" $ c_EnableMenuItem menu item flag-foreign import stdcall unsafe "windows.h EnableMenuItem"+foreign import WINDOWS_CCONV unsafe "windows.h EnableMenuItem" c_EnableMenuItem :: HMENU -> UINT -> UINT -> IO MenuState type GMDIFlag = UINT@@ -210,48 +212,48 @@ , sC_SEPARATOR = SC_SEPARATOR } -foreign import stdcall unsafe "windows.h IsMenu" isMenu :: HMENU -> IO Bool+foreign import WINDOWS_CCONV unsafe "windows.h IsMenu" isMenu :: HMENU -> IO Bool getSystemMenu :: HWND -> Bool -> IO (Maybe HMENU) getSystemMenu wnd revert = liftM ptrToMaybe $ c_GetSystemMenu wnd revert-foreign import stdcall unsafe "windows.h GetSystemMenu"+foreign import WINDOWS_CCONV unsafe "windows.h GetSystemMenu" c_GetSystemMenu :: HWND -> Bool -> IO HMENU getMenu :: HWND -> IO (Maybe HMENU) getMenu wnd = liftM ptrToMaybe $ c_GetMenu wnd-foreign import stdcall unsafe "windows.h GetMenu"+foreign import WINDOWS_CCONV unsafe "windows.h GetMenu" c_GetMenu :: HWND -> IO HMENU getMenuDefaultItem :: HMENU -> Bool -> GMDIFlag -> IO MenuItem getMenuDefaultItem menu bypos flags = failIf (== -1) "GetMenuDefaultItem" $ c_GetMenuDefaultItem menu bypos flags-foreign import stdcall unsafe "windows.h GetMenuDefaultItem"+foreign import WINDOWS_CCONV unsafe "windows.h GetMenuDefaultItem" c_GetMenuDefaultItem :: HMENU -> Bool -> UINT -> IO UINT getMenuState :: HMENU -> MenuItem -> MenuFlag -> IO MenuState getMenuState menu item flags = failIf (== -1) "GetMenuState" $ c_GetMenuState menu item flags-foreign import stdcall unsafe "windows.h GetMenuState"+foreign import WINDOWS_CCONV unsafe "windows.h GetMenuState" c_GetMenuState :: HMENU -> UINT -> UINT -> IO MenuState getSubMenu :: HMENU -> MenuItem -> IO (Maybe HMENU) getSubMenu menu pos = liftM ptrToMaybe $ c_GetSubMenu menu pos-foreign import stdcall unsafe "windows.h GetSubMenu"+foreign import WINDOWS_CCONV unsafe "windows.h GetSubMenu" c_GetSubMenu :: HMENU -> UINT -> IO HMENU setMenu :: HWND -> HMENU -> IO () setMenu wnd menu = failIfFalse_ "SetMenu" $ c_SetMenu wnd menu-foreign import stdcall unsafe "windows.h SetMenu"+foreign import WINDOWS_CCONV unsafe "windows.h SetMenu" c_SetMenu :: HWND -> HMENU -> IO Bool getMenuItemCount :: HMENU -> IO Int getMenuItemCount menu = failIf (== -1) "GetMenuItemCount" $ c_GetMenuItemCount menu-foreign import stdcall unsafe "windows.h GetMenuItemCount"+foreign import WINDOWS_CCONV unsafe "windows.h GetMenuItemCount" c_GetMenuItemCount :: HMENU -> IO Int type MenuID = UINT@@ -259,7 +261,7 @@ getMenuItemID :: HMENU -> MenuItem -> IO MenuID getMenuItemID menu item = failIf (== -1) "GetMenuItemID" $ c_GetMenuItemID menu item-foreign import stdcall unsafe "windows.h GetMenuItemID"+foreign import WINDOWS_CCONV unsafe "windows.h GetMenuItemID" c_GetMenuItemID :: HMENU -> UINT -> IO MenuID data MenuItemInfo@@ -341,7 +343,7 @@ pokeFMask p_info mask failIfFalse_ "GetMenuItemInfo" $ c_GetMenuItemInfo menu item bypos p_info peekMenuItemInfo p_info-foreign import stdcall unsafe "windows.h GetMenuItemInfoW"+foreign import WINDOWS_CCONV unsafe "windows.h GetMenuItemInfoW" c_GetMenuItemInfo :: HMENU -> UINT -> Bool -> Ptr MenuItemInfo -> IO Bool getMenuItemRect :: HWND -> HMENU -> MenuItem -> IO RECT@@ -349,17 +351,17 @@ allocaRECT $ \ p_rect -> do failIfFalse_ "GetMenuItemRect" $ c_GetMenuItemRect wnd menu item p_rect peekRECT p_rect-foreign import stdcall unsafe "windows.h GetMenuItemRect"+foreign import WINDOWS_CCONV unsafe "windows.h GetMenuItemRect" c_GetMenuItemRect :: HWND -> HMENU -> UINT -> LPRECT -> IO Bool -foreign import stdcall unsafe "windows.h HiliteMenuItem"+foreign import WINDOWS_CCONV unsafe "windows.h HiliteMenuItem" hiliteMenuItem :: HWND -> HMENU -> MenuItem -> MenuFlag -> IO Bool insertMenuItem :: HMENU -> MenuItem -> Bool -> MenuItemInfo -> IO () insertMenuItem menu item bypos info = withMenuItemInfo info $ \ p_info -> failIfFalse_ "InsertMenuItem" $ c_InsertMenuItem menu item bypos p_info-foreign import stdcall unsafe "windows.h InsertMenuItemW"+foreign import WINDOWS_CCONV unsafe "windows.h InsertMenuItemW" c_InsertMenuItem :: HMENU -> UINT -> Bool -> Ptr MenuItemInfo -> IO Bool type Menu = LPCTSTR@@ -369,7 +371,7 @@ loadMenu :: Maybe HINSTANCE -> Menu -> IO HMENU loadMenu mb_inst menu = failIfNull "LoadMenu" $ c_LoadMenu (maybePtr mb_inst) menu-foreign import stdcall unsafe "windows.h LoadMenuW"+foreign import WINDOWS_CCONV unsafe "windows.h LoadMenuW" c_LoadMenu :: HINSTANCE -> Menu -> IO HMENU -- Dealing with mappings to/from structs is a pain in GC,@@ -385,26 +387,26 @@ setMenuDefaultItem :: HMENU -> MenuItem -> Bool -> IO () setMenuDefaultItem menu item bypos = failIfFalse_ "SetMenuDefaultItem" $ c_SetMenuDefaultItem menu item bypos-foreign import stdcall unsafe "windows.h SetMenuDefaultItem"+foreign import WINDOWS_CCONV unsafe "windows.h SetMenuDefaultItem" c_SetMenuDefaultItem :: HMENU -> MenuItem -> Bool -> IO Bool setMenuItemBitmaps :: HMENU -> MenuItem -> MenuFlag -> HBITMAP -> HBITMAP -> IO () setMenuItemBitmaps menu pos flags bm_unchecked bm_checked = failIfFalse_ "SetMenuItemBitmaps" $ c_SetMenuItemBitmaps menu pos flags bm_unchecked bm_checked-foreign import stdcall unsafe "windows.h SetMenuItemBitmaps"+foreign import WINDOWS_CCONV unsafe "windows.h SetMenuItemBitmaps" c_SetMenuItemBitmaps :: HMENU -> UINT -> UINT -> HBITMAP -> HBITMAP -> IO Bool destroyMenu :: HMENU -> IO () destroyMenu menu = failIfFalse_ "DestroyMenu" $ c_DestroyMenu menu-foreign import stdcall unsafe "windows.h DestroyMenu"+foreign import WINDOWS_CCONV unsafe "windows.h DestroyMenu" c_DestroyMenu :: HMENU -> IO Bool deleteMenu :: HMENU -> MenuItem -> MenuFlag -> IO () deleteMenu menu item flag = failIfFalse_ "DeleteMenu" $ c_DeleteMenu menu item flag-foreign import stdcall unsafe "windows.h DeleteMenu"+foreign import WINDOWS_CCONV unsafe "windows.h DeleteMenu" c_DeleteMenu :: HMENU -> UINT -> UINT -> IO Bool setMenuItemInfo :: HMENU -> MenuItem -> Bool -> MenuItemMask -> MenuItemInfo -> IO ()@@ -412,14 +414,14 @@ withMenuItemInfo info $ \ p_info -> do pokeFMask p_info mask failIfFalse_ "SetMenuItemInfo" $ c_SetMenuItemInfo menu item bypos p_info-foreign import stdcall unsafe "windows.h SetMenuItemInfoW"+foreign import WINDOWS_CCONV unsafe "windows.h SetMenuItemInfoW" c_SetMenuItemInfo :: HMENU -> UINT -> Bool -> Ptr MenuItemInfo -> IO Bool trackPopupMenu :: HMENU -> TrackMenuFlag -> Int -> Int -> HWND -> RECT -> IO () trackPopupMenu menu flags x y wnd rect = withRECT rect $ \ p_rect -> failIfFalse_ "TrackPopupMenu" $ c_TrackPopupMenu menu flags x y 0 wnd p_rect-foreign import stdcall unsafe "windows.h TrackPopupMenu"+foreign import WINDOWS_CCONV unsafe "windows.h TrackPopupMenu" c_TrackPopupMenu :: HMENU -> TrackMenuFlag -> Int -> Int -> Int -> HWND -> LPRECT -> IO Bool type TPMPARAMS = ()@@ -436,7 +438,7 @@ trackPopupMenuEx menu flags x y wnd mb_p_rect = maybeWith withTPMPARAMS mb_p_rect $ \ p_ptmp -> failIfFalse_ "TrackPopupMenuEx" $ c_TrackPopupMenuEx menu flags x y wnd p_ptmp-foreign import stdcall unsafe "windows.h TrackPopupMenuEx"+foreign import WINDOWS_CCONV unsafe "windows.h TrackPopupMenuEx" c_TrackPopupMenuEx :: HMENU -> TrackMenuFlag -> Int -> Int -> HWND -> Ptr TPMPARAMS -> IO Bool -- Note: these 3 assume the flags don't include MF_BITMAP or MF_OWNERDRAW@@ -446,27 +448,27 @@ appendMenu menu flags id_item name = withTString name $ \ c_name -> failIfFalse_ "AppendMenu" $ c_AppendMenu menu flags id_item c_name-foreign import stdcall unsafe "windows.h AppendMenuW"+foreign import WINDOWS_CCONV unsafe "windows.h AppendMenuW" c_AppendMenu :: HMENU -> UINT -> MenuID -> LPCTSTR -> IO Bool insertMenu :: HMENU -> MenuItem -> MenuFlag -> MenuID -> String -> IO () insertMenu menu item flags id_item name = withTString name $ \ c_name -> failIfFalse_ "InsertMenu" $ c_InsertMenu menu item flags id_item c_name-foreign import stdcall unsafe "windows.h InsertMenuW"+foreign import WINDOWS_CCONV unsafe "windows.h InsertMenuW" c_InsertMenu :: HMENU -> UINT -> UINT -> MenuID -> LPCTSTR -> IO Bool modifyMenu :: HMENU -> MenuItem -> MenuFlag -> MenuID -> String -> IO () modifyMenu menu item flags id_item name = withTString name $ \ c_name -> failIfFalse_ "ModifyMenu" $ c_ModifyMenu menu item flags id_item c_name-foreign import stdcall unsafe "windows.h ModifyMenuW"+foreign import WINDOWS_CCONV unsafe "windows.h ModifyMenuW" c_ModifyMenu :: HMENU -> UINT -> UINT -> MenuID -> LPCTSTR -> IO Bool removeMenu :: HMENU -> MenuItem -> MenuFlag -> IO () removeMenu menu pos flags = failIfFalse_ "RemoveMenu" $ c_RemoveMenu menu pos flags-foreign import stdcall unsafe "windows.h RemoveMenu"+foreign import WINDOWS_CCONV unsafe "windows.h RemoveMenu" c_RemoveMenu :: HMENU -> UINT -> UINT -> IO Bool ----------------------------------------------------------------
Graphics/Win32/Message.hsc view
@@ -19,6 +19,8 @@ import System.Win32.Types +##include "windows_cconv.h"+ #include <windows.h> type WindowMessage = DWORD@@ -159,7 +161,7 @@ registerWindowMessage :: String -> IO WindowMessage registerWindowMessage msg = withTString msg c_RegisterWindowMessage-foreign import stdcall unsafe "windows.h RegisterWindowMessageW"+foreign import WINDOWS_CCONV unsafe "windows.h RegisterWindowMessageW" c_RegisterWindowMessage :: LPCTSTR -> IO WindowMessage -- These are WM_SIZE specific
Graphics/Win32/Misc.hsc view
@@ -23,8 +23,9 @@ import Data.Maybe import Foreign +##include "windows_cconv.h"+ #include <windows.h>-#include "gettime.h" ---------------------------------------------------------------- -- Resources@@ -48,39 +49,39 @@ loadAccelerators :: Maybe HINSTANCE -> Accelerator -> IO HACCEL loadAccelerators mb_inst accel = failIfNull "LoadAccelerators" $ c_LoadAccelerators (maybePtr mb_inst) accel-foreign import stdcall unsafe "windows.h LoadAcceleratorsW"+foreign import WINDOWS_CCONV unsafe "windows.h LoadAcceleratorsW" c_LoadAccelerators :: HINSTANCE -> Accelerator -> IO HACCEL loadCursor :: Maybe HINSTANCE -> Cursor -> IO HCURSOR loadCursor mb_inst cursor = failIfNull "LoadCursor" $ c_LoadCursor (maybePtr mb_inst) cursor-foreign import stdcall unsafe "windows.h LoadCursorW"+foreign import WINDOWS_CCONV unsafe "windows.h LoadCursorW" c_LoadCursor :: HINSTANCE -> Cursor -> IO HCURSOR loadIcon :: Maybe HINSTANCE -> Icon -> IO HICON loadIcon mb_inst icon = failIfNull "LoadIcon" $ c_LoadIcon (maybePtr mb_inst) icon-foreign import stdcall unsafe "windows.h LoadIconW"+foreign import WINDOWS_CCONV unsafe "windows.h LoadIconW" c_LoadIcon :: HINSTANCE -> Icon -> IO HICON -#{enum Cursor, castUINTToPtr- , iDC_ARROW = (UINT)IDC_ARROW- , iDC_IBEAM = (UINT)IDC_IBEAM- , iDC_WAIT = (UINT)IDC_WAIT- , iDC_CROSS = (UINT)IDC_CROSS- , iDC_UPARROW = (UINT)IDC_UPARROW- , iDC_SIZENWSE = (UINT)IDC_SIZENWSE- , iDC_SIZENESW = (UINT)IDC_SIZENESW- , iDC_SIZEWE = (UINT)IDC_SIZEWE- , iDC_SIZENS = (UINT)IDC_SIZENS+#{enum Cursor, castUINTPtrToPtr+ , iDC_ARROW = (UINT_PTR)IDC_ARROW+ , iDC_IBEAM = (UINT_PTR)IDC_IBEAM+ , iDC_WAIT = (UINT_PTR)IDC_WAIT+ , iDC_CROSS = (UINT_PTR)IDC_CROSS+ , iDC_UPARROW = (UINT_PTR)IDC_UPARROW+ , iDC_SIZENWSE = (UINT_PTR)IDC_SIZENWSE+ , iDC_SIZENESW = (UINT_PTR)IDC_SIZENESW+ , iDC_SIZEWE = (UINT_PTR)IDC_SIZEWE+ , iDC_SIZENS = (UINT_PTR)IDC_SIZENS } -#{enum Icon, castUINTToPtr- , iDI_APPLICATION = (UINT)IDI_APPLICATION- , iDI_HAND = (UINT)IDI_HAND- , iDI_QUESTION = (UINT)IDI_QUESTION- , iDI_EXCLAMATION = (UINT)IDI_EXCLAMATION- , iDI_ASTERISK = (UINT)IDI_ASTERISK+#{enum Icon, castUINTPtrToPtr+ , iDI_APPLICATION = (UINT_PTR)IDI_APPLICATION+ , iDI_HAND = (UINT_PTR)IDI_HAND+ , iDI_QUESTION = (UINT_PTR)IDI_QUESTION+ , iDI_EXCLAMATION = (UINT_PTR)IDI_EXCLAMATION+ , iDI_ASTERISK = (UINT_PTR)IDI_ASTERISK } ----------------------------------------------------------------@@ -130,7 +131,7 @@ withTString text $ \ c_text -> withTString caption $ \ c_caption -> failIfZero "MessageBox" $ c_MessageBox wnd c_text c_caption style-foreign import stdcall unsafe "windows.h MessageBoxW"+foreign import WINDOWS_CCONV unsafe "windows.h MessageBoxW" c_MessageBox :: HWND -> LPCTSTR -> LPCTSTR -> MBStyle -> IO MBStatus ----------------------------------------------------------------@@ -148,7 +149,7 @@ getStdHandle :: StdHandleId -> IO HANDLE getStdHandle hid = failIf (== iNVALID_HANDLE_VALUE) "GetStdHandle" $ c_GetStdHandle hid-foreign import stdcall unsafe "windows.h GetStdHandle"+foreign import WINDOWS_CCONV unsafe "windows.h GetStdHandle" c_GetStdHandle :: StdHandleId -> IO HANDLE ----------------------------------------------------------------@@ -181,20 +182,20 @@ allocaPOINT $ \ p_pt -> do failIfFalse_ "GetCursorPos" $ c_GetCursorPos p_pt peekPOINT p_pt-foreign import stdcall unsafe "windows.h GetCursorPos"+foreign import WINDOWS_CCONV unsafe "windows.h GetCursorPos" c_GetCursorPos :: Ptr POINT -> IO Bool setCursorPos :: POINT -> IO () setCursorPos (x,y) = failIfFalse_ "setCursorPos" $ c_SetCursorPos x y-foreign import stdcall unsafe "windows.h SetCursorPos"+foreign import WINDOWS_CCONV unsafe "windows.h SetCursorPos" c_SetCursorPos :: LONG -> LONG -> IO Bool clipCursor :: RECT -> IO () clipCursor rect = withRECT rect $ \ p_rect -> failIfFalse_ "ClipCursor" $ c_ClipCursor p_rect-foreign import stdcall unsafe "windows.h ClipCursor"+foreign import WINDOWS_CCONV unsafe "windows.h ClipCursor" c_ClipCursor :: Ptr RECT -> IO Bool getClipCursor :: IO RECT@@ -202,7 +203,7 @@ allocaRECT $ \ p_rect -> do failIfFalse_ "GetClipCursor" $ c_GetClipCursor p_rect peekRECT p_rect-foreign import stdcall unsafe "windows.h GetClipCursor"+foreign import WINDOWS_CCONV unsafe "windows.h GetClipCursor" c_GetClipCursor :: Ptr RECT -> IO Bool ----------------------------------------------------------------@@ -222,7 +223,7 @@ exitWindowsEx :: ExitOption -> IO () exitWindowsEx opt = failIfFalse_ "ExitWindowsEx" $ c_ExitWindowsEx opt 0-foreign import stdcall unsafe "windows.h ExitWindowsEx"+foreign import WINDOWS_CCONV unsafe "windows.h ExitWindowsEx" c_ExitWindowsEx :: ExitOption -> DWORD -> IO Bool exitWindows :: IO ()@@ -248,13 +249,13 @@ messageBeep :: Maybe Beep -> IO () messageBeep mb_beep = c_MessageBeep (maybeBeep mb_beep)-foreign import stdcall unsafe "windows.h MessageBeep"+foreign import WINDOWS_CCONV unsafe "windows.h MessageBeep" c_MessageBeep :: Beep -> IO () beep :: WORD -> MbDuration -> IO () beep freq mb_dur = failIfFalse_ "Beep" $ c_Beep freq (maybeDuration mb_dur)-foreign import stdcall unsafe "windows.h Beep"+foreign import WINDOWS_CCONV unsafe "windows.h Beep" c_Beep :: WORD -> Duration -> IO Bool ----------------------------------------------------------------@@ -272,19 +273,19 @@ setWinTimer :: HWND -> TimerId -> UINT -> IO TimerId setWinTimer wnd timer elapse = failIfZero "SetTimer" $ c_SetTimer wnd timer elapse nullFunPtr-foreign import stdcall unsafe "windows.h SetTimer"+foreign import WINDOWS_CCONV unsafe "windows.h SetTimer" c_SetTimer :: HWND -> TimerId -> UINT -> TIMERPROC -> IO TimerId killTimer :: Maybe HWND -> TimerId -> IO () killTimer mb_wnd timer = failIfFalse_ "KillTimer" $ c_KillTimer (maybePtr mb_wnd) timer-foreign import stdcall unsafe "windows.h KillTimer"+foreign import WINDOWS_CCONV unsafe "windows.h KillTimer" c_KillTimer :: HWND -> TimerId -> IO Bool -- For documentation purposes: type MilliSeconds = DWORD -foreign import stdcall unsafe "windows.h timeGetTime"+foreign import WINDOWS_CCONV unsafe "windows.h timeGetTime" timeGetTime :: IO MilliSeconds ----------------------------------------------------------------
Graphics/Win32/Resource.hsc view
@@ -21,13 +21,15 @@ import Foreign +##include "windows_cconv.h"+ #include <windows.h> beginUpdateResource :: String -> Bool -> IO HANDLE beginUpdateResource name del = withTString name $ \ c_name -> failIfNull "BeginUpdateResource" $ c_BeginUpdateResource c_name del-foreign import stdcall unsafe "windows.h BeginUpdateResourceW"+foreign import WINDOWS_CCONV unsafe "windows.h BeginUpdateResourceW" c_BeginUpdateResource :: LPCTSTR -> Bool -> IO HANDLE type ResourceImageType = UINT@@ -45,42 +47,42 @@ copyImage :: HANDLE -> ResourceImageType -> Int -> Int -> UINT -> IO HANDLE copyImage h ty x y flags = failIfNull "CopyImage" $ c_CopyImage h ty x y flags-foreign import stdcall unsafe "windows.h CopyImage"+foreign import WINDOWS_CCONV unsafe "windows.h CopyImage" c_CopyImage :: HANDLE -> ResourceImageType -> Int -> Int -> UINT -> IO HANDLE endUpdateResource :: HANDLE -> BOOL -> IO () endUpdateResource h discard = failIfFalse_ "EndUpdateResource" $ c_EndUpdateResource h discard-foreign import stdcall unsafe "windows.h EndUpdateResourceW"+foreign import WINDOWS_CCONV unsafe "windows.h EndUpdateResourceW" c_EndUpdateResource :: HANDLE -> BOOL -> IO Bool type ResourceType = LPCTSTR -#{enum ResourceType, castUINTToPtr- , rT_ACCELERATOR = (UINT)RT_ACCELERATOR // Accelerator table- , rT_ANICURSOR = (UINT)RT_ANICURSOR // Animated cursor- , rT_ANIICON = (UINT)RT_ANIICON // Animated icon- , rT_BITMAP = (UINT)RT_BITMAP // Bitmap resource- , rT_CURSOR = (UINT)RT_CURSOR // Hardware-dependent cursor resource- , rT_DIALOG = (UINT)RT_DIALOG // Dialog box- , rT_FONT = (UINT)RT_FONT // Font resource- , rT_FONTDIR = (UINT)RT_FONTDIR // Font directory resource- , rT_GROUP_CURSOR = (UINT)RT_GROUP_CURSOR // Hardware-independent cursor resource- , rT_GROUP_ICON = (UINT)RT_GROUP_ICON // Hardware-independent icon resource- , rT_HTML = (UINT)RT_HTML // HTML document- , rT_ICON = (UINT)RT_ICON // Hardware-dependent icon resource- , rT_MENU = (UINT)RT_MENU // Menu resource- , rT_MESSAGETABLE = (UINT)RT_MESSAGETABLE // Message-table entry- , rT_RCDATA = (UINT)RT_RCDATA // Application-defined resource (raw data)- , rT_STRING = (UINT)RT_STRING // String-table entry- , rT_VERSION = (UINT)RT_VERSION // Version resource+#{enum ResourceType, castUINTPtrToPtr+ , rT_ACCELERATOR = (UINT_PTR)RT_ACCELERATOR // Accelerator table+ , rT_ANICURSOR = (UINT_PTR)RT_ANICURSOR // Animated cursor+ , rT_ANIICON = (UINT_PTR)RT_ANIICON // Animated icon+ , rT_BITMAP = (UINT_PTR)RT_BITMAP // Bitmap resource+ , rT_CURSOR = (UINT_PTR)RT_CURSOR // Hardware-dependent cursor resource+ , rT_DIALOG = (UINT_PTR)RT_DIALOG // Dialog box+ , rT_FONT = (UINT_PTR)RT_FONT // Font resource+ , rT_FONTDIR = (UINT_PTR)RT_FONTDIR // Font directory resource+ , rT_GROUP_CURSOR = (UINT_PTR)RT_GROUP_CURSOR // Hardware-independent cursor resource+ , rT_GROUP_ICON = (UINT_PTR)RT_GROUP_ICON // Hardware-independent icon resource+ , rT_HTML = (UINT_PTR)RT_HTML // HTML document+ , rT_ICON = (UINT_PTR)RT_ICON // Hardware-dependent icon resource+ , rT_MENU = (UINT_PTR)RT_MENU // Menu resource+ , rT_MESSAGETABLE = (UINT_PTR)RT_MESSAGETABLE // Message-table entry+ , rT_RCDATA = (UINT_PTR)RT_RCDATA // Application-defined resource (raw data)+ , rT_STRING = (UINT_PTR)RT_STRING // String-table entry+ , rT_VERSION = (UINT_PTR)RT_VERSION // Version resource } findResource :: HMODULE -> String -> ResourceType -> IO HRSRC findResource hmod name ty = withTString name $ \ c_name -> failIfNull "FindResource" $ c_FindResource hmod c_name ty-foreign import stdcall unsafe "windows.h FindResourceW"+foreign import WINDOWS_CCONV unsafe "windows.h FindResourceW" c_FindResource :: HMODULE -> LPCTSTR -> LPCTSTR -> IO HRSRC -- was: LPCTSTR_@@ -88,7 +90,7 @@ findResourceEx hmod name ty lang = withTString name $ \ c_name -> failIfNull "FindResourceEx" $ c_FindResourceEx hmod c_name ty lang-foreign import stdcall unsafe "windows.h FindResourceExW"+foreign import WINDOWS_CCONV unsafe "windows.h FindResourceExW" c_FindResourceEx :: HMODULE -> LPCTSTR -> LPCTSTR -> WORD -> IO HRSRC type ResourceSize = Int@@ -115,25 +117,25 @@ loadImage inst name ty x y load = withTString name $ \ c_name -> failIfNull "LoadImage" $ c_LoadImage inst c_name ty x y load-foreign import stdcall unsafe "windows.h LoadImageW"+foreign import WINDOWS_CCONV unsafe "windows.h LoadImageW" c_LoadImage :: HINSTANCE -> LPCTSTR -> ResourceImageType -> ResourceSize -> ResourceSize -> LoadImageFlags -> IO HANDLE loadResource :: HMODULE -> HRSRC -> IO HGLOBAL loadResource hmod res = failIfNull "LoadResource" $ c_LoadResource hmod res-foreign import stdcall unsafe "windows.h LoadResource"+foreign import WINDOWS_CCONV unsafe "windows.h LoadResource" c_LoadResource :: HMODULE -> HRSRC -> IO HGLOBAL lockResource :: HGLOBAL -> IO Addr lockResource res = failIfNull "LockResource" $ c_LockResource res-foreign import stdcall unsafe "windows.h LockResource"+foreign import WINDOWS_CCONV unsafe "windows.h LockResource" c_LockResource :: HGLOBAL -> IO Addr sizeofResource :: HMODULE -> HRSRC -> IO DWORD sizeofResource hmod res = failIfZero "SizeofResource" $ c_SizeofResource hmod res-foreign import stdcall unsafe "windows.h SizeofResource"+foreign import WINDOWS_CCONV unsafe "windows.h SizeofResource" c_SizeofResource :: HMODULE -> HRSRC -> IO DWORD -- was: LPCTSTR_@@ -142,5 +144,5 @@ withTString name $ \ c_name -> failIfFalse_ "UpdateResource" $ c_UpdateResource h ty c_name lang p_data data_len-foreign import stdcall unsafe "windows.h UpdateResourceW"+foreign import WINDOWS_CCONV unsafe "windows.h UpdateResourceW" c_UpdateResource :: HANDLE -> LPCTSTR -> LPCTSTR -> WORD -> Addr -> DWORD -> IO Bool
Graphics/Win32/Window.hsc view
@@ -1,3 +1,4 @@+{-# LANGUAGE CApiFFI #-} #if __GLASGOW_HASKELL__ >= 701 {-# LANGUAGE Trustworthy #-} #endif@@ -26,6 +27,8 @@ import Foreign hiding (unsafePerformIO) import System.IO.Unsafe +##include "windows_cconv.h"+ #include <windows.h> ----------------------------------------------------------------@@ -91,7 +94,7 @@ #{poke WNDCLASS,lpszClassName} p cls f p -foreign import stdcall unsafe "WndProc.h &genericWndProc"+foreign import WINDOWS_CCONV unsafe "WndProc.h &genericWndProc" genericWndProc_p :: FunPtr WindowClosure {-# CFILES cbits/WndProc.c #-}@@ -100,10 +103,10 @@ registerClass cls = withWNDCLASS cls $ \ p -> liftM numToMaybe $ c_RegisterClass p-foreign import stdcall unsafe "windows.h RegisterClassW"+foreign import WINDOWS_CCONV unsafe "windows.h RegisterClassW" c_RegisterClass :: Ptr WNDCLASS -> IO ATOM -foreign import stdcall unsafe "windows.h UnregisterClassW"+foreign import WINDOWS_CCONV unsafe "windows.h UnregisterClassW" unregisterClass :: ClassName -> HINSTANCE -> IO () ----------------------------------------------------------------@@ -180,16 +183,17 @@ type WindowClosure = HWND -> WindowMessage -> WPARAM -> LPARAM -> IO LRESULT -foreign import stdcall "wrapper"+foreign import WINDOWS_CCONV "wrapper" mkWindowClosure :: WindowClosure -> IO (FunPtr WindowClosure) setWindowClosure :: HWND -> WindowClosure -> IO () setWindowClosure wnd closure = do fp <- mkWindowClosure closure- _ <- c_SetWindowLong wnd (#{const GWL_USERDATA}) (castFunPtrToLONG fp)+ _ <- c_SetWindowLongPtr wnd (#{const GWLP_USERDATA})+ (castPtr (castFunPtrToPtr fp)) return ()-foreign import stdcall unsafe "windows.h SetWindowLongW"- c_SetWindowLong :: HWND -> INT -> LONG -> IO LONG+foreign import capi unsafe "windows.h SetWindowLongPtrW"+ c_SetWindowLongPtr :: HWND -> INT -> Ptr LONG -> IO (Ptr LONG) createWindow :: ClassName -> String -> WindowStyle ->@@ -215,7 +219,7 @@ (maybePtr mb_parent) (maybePtr mb_menu) inst nullPtr setWindowClosure wnd closure return wnd-foreign import stdcall "windows.h CreateWindowExW"+foreign import WINDOWS_CCONV "windows.h CreateWindowExW" c_CreateWindowEx :: WindowStyle -> ClassName -> LPCTSTR -> WindowStyle -> Pos -> Pos -> Pos -> Pos@@ -227,7 +231,7 @@ defWindowProc :: Maybe HWND -> WindowMessage -> WPARAM -> LPARAM -> IO LRESULT defWindowProc mb_wnd msg w l = c_DefWindowProc (maybePtr mb_wnd) msg w l-foreign import stdcall "windows.h DefWindowProcW"+foreign import WINDOWS_CCONV "windows.h DefWindowProcW" c_DefWindowProc :: HWND -> WindowMessage -> WPARAM -> LPARAM -> IO LRESULT ----------------------------------------------------------------@@ -237,7 +241,7 @@ allocaRECT $ \ p_rect -> do failIfFalse_ "GetClientRect" $ c_GetClientRect wnd p_rect peekRECT p_rect-foreign import stdcall unsafe "windows.h GetClientRect"+foreign import WINDOWS_CCONV unsafe "windows.h GetClientRect" c_GetClientRect :: HWND -> Ptr RECT -> IO Bool getWindowRect :: HWND -> IO RECT@@ -245,7 +249,7 @@ allocaRECT $ \ p_rect -> do failIfFalse_ "GetWindowRect" $ c_GetWindowRect wnd p_rect peekRECT p_rect-foreign import stdcall unsafe "windows.h GetWindowRect"+foreign import WINDOWS_CCONV unsafe "windows.h GetWindowRect" c_GetWindowRect :: HWND -> Ptr RECT -> IO Bool -- Should it be Maybe RECT instead?@@ -254,7 +258,7 @@ invalidateRect wnd p_mb_rect erase = failIfFalse_ "InvalidateRect" $ c_InvalidateRect (maybePtr wnd) (maybePtr p_mb_rect) erase-foreign import stdcall "windows.h InvalidateRect"+foreign import WINDOWS_CCONV "windows.h InvalidateRect" c_InvalidateRect :: HWND -> LPRECT -> Bool -> IO Bool screenToClient :: HWND -> POINT -> IO POINT@@ -262,7 +266,7 @@ withPOINT pt $ \ p_pt -> do failIfFalse_ "ScreenToClient" $ c_ScreenToClient wnd p_pt peekPOINT p_pt-foreign import stdcall unsafe "windows.h ScreenToClient"+foreign import WINDOWS_CCONV unsafe "windows.h ScreenToClient" c_ScreenToClient :: HWND -> Ptr POINT -> IO Bool clientToScreen :: HWND -> POINT -> IO POINT@@ -270,7 +274,7 @@ withPOINT pt $ \ p_pt -> do failIfFalse_ "ClientToScreen" $ c_ClientToScreen wnd p_pt peekPOINT p_pt-foreign import stdcall unsafe "windows.h ClientToScreen"+foreign import WINDOWS_CCONV unsafe "windows.h ClientToScreen" c_ClientToScreen :: HWND -> Ptr POINT -> IO Bool ----------------------------------------------------------------@@ -282,7 +286,7 @@ setWindowText wnd text = withTString text $ \ c_text -> failIfFalse_ "SetWindowText" $ c_SetWindowText wnd c_text-foreign import stdcall "windows.h SetWindowTextW"+foreign import WINDOWS_CCONV "windows.h SetWindowTextW" c_SetWindowText :: HWND -> LPCTSTR -> IO Bool ----------------------------------------------------------------@@ -306,10 +310,10 @@ beginPaint :: HWND -> LPPAINTSTRUCT -> IO HDC beginPaint wnd paint = failIfNull "BeginPaint" $ c_BeginPaint wnd paint-foreign import stdcall "windows.h BeginPaint"+foreign import WINDOWS_CCONV "windows.h BeginPaint" c_BeginPaint :: HWND -> LPPAINTSTRUCT -> IO HDC -foreign import stdcall "windows.h EndPaint"+foreign import WINDOWS_CCONV "windows.h EndPaint" endPaint :: HWND -> LPPAINTSTRUCT -> IO () -- Apparently always succeeds (return non-zero) @@ -333,7 +337,7 @@ , sW_RESTORE = SW_RESTORE } -foreign import stdcall "windows.h ShowWindow"+foreign import WINDOWS_CCONV "windows.h ShowWindow" showWindow :: HWND -> ShowWindowControl -> IO Bool ----------------------------------------------------------------@@ -345,7 +349,7 @@ withRECT rect $ \ p_rect -> do failIfFalse_ "AdjustWindowRect" $ c_AdjustWindowRect p_rect style menu peekRECT p_rect-foreign import stdcall unsafe "windows.h AdjustWindowRect"+foreign import WINDOWS_CCONV unsafe "windows.h AdjustWindowRect" c_AdjustWindowRect :: Ptr RECT -> WindowStyle -> Bool -> IO Bool adjustWindowRectEx :: RECT -> WindowStyle -> Bool -> WindowStyleEx -> IO RECT@@ -354,7 +358,7 @@ failIfFalse_ "AdjustWindowRectEx" $ c_AdjustWindowRectEx p_rect style menu exstyle peekRECT p_rect-foreign import stdcall unsafe "windows.h AdjustWindowRectEx"+foreign import WINDOWS_CCONV unsafe "windows.h AdjustWindowRectEx" c_AdjustWindowRectEx :: Ptr RECT -> WindowStyle -> Bool -> WindowStyleEx -> IO Bool -- Win2K and later:@@ -381,25 +385,25 @@ -- %code BOOL success = AnimateWindow(arg1,arg2,arg3) -- %fail { !success } { ErrorWin("AnimateWindow") } -foreign import stdcall unsafe "windows.h AnyPopup"+foreign import WINDOWS_CCONV unsafe "windows.h AnyPopup" anyPopup :: IO Bool arrangeIconicWindows :: HWND -> IO () arrangeIconicWindows wnd = failIfFalse_ "ArrangeIconicWindows" $ c_ArrangeIconicWindows wnd-foreign import stdcall unsafe "windows.h ArrangeIconicWindows"+foreign import WINDOWS_CCONV unsafe "windows.h ArrangeIconicWindows" c_ArrangeIconicWindows :: HWND -> IO Bool beginDeferWindowPos :: Int -> IO HDWP beginDeferWindowPos n = failIfNull "BeginDeferWindowPos" $ c_BeginDeferWindowPos n-foreign import stdcall unsafe "windows.h BeginDeferWindowPos"+foreign import WINDOWS_CCONV unsafe "windows.h BeginDeferWindowPos" c_BeginDeferWindowPos :: Int -> IO HDWP bringWindowToTop :: HWND -> IO () bringWindowToTop wnd = failIfFalse_ "BringWindowToTop" $ c_BringWindowToTop wnd-foreign import stdcall "windows.h BringWindowToTop"+foreign import WINDOWS_CCONV "windows.h BringWindowToTop" c_BringWindowToTop :: HWND -> IO Bool -- Can't pass structs with current FFI, so use a C wrapper (in Types)@@ -421,19 +425,19 @@ deferWindowPos :: HDWP -> HWND -> HWND -> Int -> Int -> Int -> Int -> SetWindowPosFlags -> IO HDWP deferWindowPos wp wnd after x y cx cy flags = failIfNull "DeferWindowPos" $ c_DeferWindowPos wp wnd after x y cx cy flags-foreign import stdcall unsafe "windows.h DeferWindowPos"+foreign import WINDOWS_CCONV unsafe "windows.h DeferWindowPos" c_DeferWindowPos :: HDWP -> HWND -> HWND -> Int -> Int -> Int -> Int -> SetWindowPosFlags -> IO HDWP destroyWindow :: HWND -> IO () destroyWindow wnd = failIfFalse_ "DestroyWindow" $ c_DestroyWindow wnd-foreign import stdcall "windows.h DestroyWindow"+foreign import WINDOWS_CCONV "windows.h DestroyWindow" c_DestroyWindow :: HWND -> IO Bool endDeferWindowPos :: HDWP -> IO () endDeferWindowPos pos = failIfFalse_ "EndDeferWindowPos" $ c_EndDeferWindowPos pos-foreign import stdcall unsafe "windows.h EndDeferWindowPos"+foreign import WINDOWS_CCONV unsafe "windows.h EndDeferWindowPos" c_EndDeferWindowPos :: HDWP -> IO Bool findWindow :: String -> String -> IO (Maybe HWND)@@ -441,7 +445,7 @@ withTString cname $ \ c_cname -> withTString wname $ \ c_wname -> liftM ptrToMaybe $ c_FindWindow c_cname c_wname-foreign import stdcall unsafe "windows.h FindWindowW"+foreign import WINDOWS_CCONV unsafe "windows.h FindWindowW" c_FindWindow :: LPCTSTR -> LPCTSTR -> IO HWND findWindowEx :: HWND -> HWND -> String -> String -> IO (Maybe HWND)@@ -449,35 +453,35 @@ withTString cname $ \ c_cname -> withTString wname $ \ c_wname -> liftM ptrToMaybe $ c_FindWindowEx parent after c_cname c_wname-foreign import stdcall unsafe "windows.h FindWindowExW"+foreign import WINDOWS_CCONV unsafe "windows.h FindWindowExW" c_FindWindowEx :: HWND -> HWND -> LPCTSTR -> LPCTSTR -> IO HWND -foreign import stdcall unsafe "windows.h FlashWindow"+foreign import WINDOWS_CCONV unsafe "windows.h FlashWindow" flashWindow :: HWND -> Bool -> IO Bool -- No error code moveWindow :: HWND -> Int -> Int -> Int -> Int -> Bool -> IO () moveWindow wnd x y w h repaint = failIfFalse_ "MoveWindow" $ c_MoveWindow wnd x y w h repaint-foreign import stdcall "windows.h MoveWindow"+foreign import WINDOWS_CCONV "windows.h MoveWindow" c_MoveWindow :: HWND -> Int -> Int -> Int -> Int -> Bool -> IO Bool -foreign import stdcall unsafe "windows.h GetDesktopWindow"+foreign import WINDOWS_CCONV unsafe "windows.h GetDesktopWindow" getDesktopWindow :: IO HWND -foreign import stdcall unsafe "windows.h GetForegroundWindow"+foreign import WINDOWS_CCONV unsafe "windows.h GetForegroundWindow" getForegroundWindow :: IO HWND getParent :: HWND -> IO HWND getParent wnd = failIfNull "GetParent" $ c_GetParent wnd-foreign import stdcall unsafe "windows.h GetParent"+foreign import WINDOWS_CCONV unsafe "windows.h GetParent" c_GetParent :: HWND -> IO HWND getTopWindow :: HWND -> IO HWND getTopWindow wnd = failIfNull "GetTopWindow" $ c_GetTopWindow wnd-foreign import stdcall unsafe "windows.h GetTopWindow"+foreign import WINDOWS_CCONV unsafe "windows.h GetTopWindow" c_GetTopWindow :: HWND -> IO HWND @@ -522,25 +526,25 @@ getDCEx wnd rgn flags = withForeignPtr rgn $ \ p_rgn -> failIfNull "GetDCEx" $ c_GetDCEx wnd p_rgn flags-foreign import stdcall unsafe "windows.h GetDCEx"+foreign import WINDOWS_CCONV unsafe "windows.h GetDCEx" c_GetDCEx :: HWND -> PRGN -> GetDCExFlags -> IO HDC getDC :: Maybe HWND -> IO HDC getDC mb_wnd = failIfNull "GetDC" $ c_GetDC (maybePtr mb_wnd)-foreign import stdcall unsafe "windows.h GetDC"+foreign import WINDOWS_CCONV unsafe "windows.h GetDC" c_GetDC :: HWND -> IO HDC getWindowDC :: Maybe HWND -> IO HDC getWindowDC mb_wnd = failIfNull "GetWindowDC" $ c_GetWindowDC (maybePtr mb_wnd)-foreign import stdcall unsafe "windows.h GetWindowDC"+foreign import WINDOWS_CCONV unsafe "windows.h GetWindowDC" c_GetWindowDC :: HWND -> IO HDC releaseDC :: Maybe HWND -> HDC -> IO () releaseDC mb_wnd dc = failIfFalse_ "ReleaseDC" $ c_ReleaseDC (maybePtr mb_wnd) dc-foreign import stdcall unsafe "windows.h ReleaseDC"+foreign import WINDOWS_CCONV unsafe "windows.h ReleaseDC" c_ReleaseDC :: HWND -> HDC -> IO Bool getDCOrgEx :: HDC -> IO POINT@@ -548,7 +552,7 @@ allocaPOINT $ \ p_pt -> do failIfFalse_ "GetDCOrgEx" $ c_GetDCOrgEx dc p_pt peekPOINT p_pt-foreign import stdcall unsafe "windows.h GetDCOrgEx"+foreign import WINDOWS_CCONV unsafe "windows.h GetDCOrgEx" c_GetDCOrgEx :: HDC -> Ptr POINT -> IO Bool ----------------------------------------------------------------@@ -558,13 +562,13 @@ hideCaret :: HWND -> IO () hideCaret wnd = failIfFalse_ "HideCaret" $ c_HideCaret wnd-foreign import stdcall unsafe "windows.h HideCaret"+foreign import WINDOWS_CCONV unsafe "windows.h HideCaret" c_HideCaret :: HWND -> IO Bool showCaret :: HWND -> IO () showCaret wnd = failIfFalse_ "ShowCaret" $ c_ShowCaret wnd-foreign import stdcall unsafe "windows.h ShowCaret"+foreign import WINDOWS_CCONV unsafe "windows.h ShowCaret" c_ShowCaret :: HWND -> IO Bool -- ToDo: allow arg2 to be NULL or {(HBITMAP)1}@@ -573,13 +577,13 @@ createCaret wnd bm mb_w mb_h = failIfFalse_ "CreateCaret" $ c_CreateCaret wnd bm (maybeNum mb_w) (maybeNum mb_h)-foreign import stdcall unsafe "windows.h CreateCaret"+foreign import WINDOWS_CCONV unsafe "windows.h CreateCaret" c_CreateCaret :: HWND -> HBITMAP -> INT -> INT -> IO Bool destroyCaret :: IO () destroyCaret = failIfFalse_ "DestroyCaret" $ c_DestroyCaret-foreign import stdcall unsafe "windows.h DestroyCaret"+foreign import WINDOWS_CCONV unsafe "windows.h DestroyCaret" c_DestroyCaret :: IO Bool getCaretPos :: IO POINT@@ -587,13 +591,13 @@ allocaPOINT $ \ p_pt -> do failIfFalse_ "GetCaretPos" $ c_GetCaretPos p_pt peekPOINT p_pt-foreign import stdcall unsafe "windows.h GetCaretPos"+foreign import WINDOWS_CCONV unsafe "windows.h GetCaretPos" c_GetCaretPos :: Ptr POINT -> IO Bool setCaretPos :: POINT -> IO () setCaretPos (x,y) = failIfFalse_ "SetCaretPos" $ c_SetCaretPos x y-foreign import stdcall unsafe "windows.h SetCaretPos"+foreign import WINDOWS_CCONV unsafe "windows.h SetCaretPos" c_SetCaretPos :: LONG -> LONG -> IO Bool -- The remarks on SetCaretBlinkTime are either highly risible or very sad -@@ -643,7 +647,7 @@ res <- failIf (== -1) "GetMessage" $ c_GetMessage msg (maybePtr mb_wnd) 0 0 return (res /= 0)-foreign import stdcall "windows.h GetMessageW"+foreign import WINDOWS_CCONV "windows.h GetMessageW" c_GetMessage :: LPMSG -> HWND -> UINT -> UINT -> IO LONG -- A NULL window requests messages for any window belonging to this thread.@@ -654,26 +658,26 @@ peekMessage msg mb_wnd filterMin filterMax remove = do failIf_ (== -1) "PeekMessage" $ c_PeekMessage msg (maybePtr mb_wnd) filterMin filterMax remove-foreign import stdcall "windows.h PeekMessageW"+foreign import WINDOWS_CCONV "windows.h PeekMessageW" c_PeekMessage :: LPMSG -> HWND -> UINT -> UINT -> UINT -> IO LONG -- Note: you're not supposed to call this if you're using accelerators -foreign import stdcall "windows.h TranslateMessage"+foreign import WINDOWS_CCONV "windows.h TranslateMessage" translateMessage :: LPMSG -> IO BOOL updateWindow :: HWND -> IO () updateWindow wnd = failIfFalse_ "UpdateWindow" $ c_UpdateWindow wnd-foreign import stdcall "windows.h UpdateWindow"+foreign import WINDOWS_CCONV "windows.h UpdateWindow" c_UpdateWindow :: HWND -> IO Bool -- Return value of DispatchMessage is usually ignored -foreign import stdcall "windows.h DispatchMessageW"+foreign import WINDOWS_CCONV "windows.h DispatchMessageW" dispatchMessage :: LPMSG -> IO LONG -foreign import stdcall "windows.h SendMessageW"+foreign import WINDOWS_CCONV "windows.h SendMessageW" sendMessage :: HWND -> WindowMessage -> WPARAM -> LPARAM -> IO LRESULT ----------------------------------------------------------------
System/Win32/Console.hsc view
@@ -26,18 +26,20 @@ generateConsoleCtrlEvent ) where +##include "windows_cconv.h" + import System.Win32.Types -foreign import stdcall unsafe "windows.h GetConsoleCP" +foreign import WINDOWS_CCONV unsafe "windows.h GetConsoleCP" getConsoleCP :: IO UINT -foreign import stdcall unsafe "windows.h SetConsoleCP" +foreign import WINDOWS_CCONV unsafe "windows.h SetConsoleCP" setConsoleCP :: UINT -> IO () -foreign import stdcall unsafe "windows.h GetConsoleOutputCP" +foreign import WINDOWS_CCONV unsafe "windows.h GetConsoleOutputCP" getConsoleOutputCP :: IO UINT -foreign import stdcall unsafe "windows.h SetConsoleOutputCP" +foreign import WINDOWS_CCONV unsafe "windows.h SetConsoleOutputCP" setConsoleOutputCP :: UINT -> IO () type CtrlEvent = DWORD @@ -52,7 +54,7 @@ "generateConsoleCtrlEvent" $ c_GenerateConsoleCtrlEvent e p -foreign import stdcall safe "windows.h GenerateConsoleCtrlEvent" +foreign import WINDOWS_CCONV safe "windows.h GenerateConsoleCtrlEvent" c_GenerateConsoleCtrlEvent :: CtrlEvent -> DWORD -> IO BOOL -- ToDo: lots more
System/Win32/DLL.hsc view
@@ -22,18 +22,20 @@ import Foreign import Foreign.C +##include "windows_cconv.h"+ #include <windows.h> disableThreadLibraryCalls :: HMODULE -> IO () disableThreadLibraryCalls hmod = failIfFalse_ "DisableThreadLibraryCalls" $ c_DisableThreadLibraryCalls hmod-foreign import stdcall unsafe "windows.h DisableThreadLibraryCalls"+foreign import WINDOWS_CCONV unsafe "windows.h DisableThreadLibraryCalls" c_DisableThreadLibraryCalls :: HMODULE -> IO Bool freeLibrary :: HMODULE -> IO () freeLibrary hmod = failIfFalse_ "FreeLibrary" $ c_FreeLibrary hmod-foreign import stdcall unsafe "windows.h FreeLibrary"+foreign import WINDOWS_CCONV unsafe "windows.h FreeLibrary" c_FreeLibrary :: HMODULE -> IO Bool {-# CFILES cbits/HsWin32.c #-}@@ -45,28 +47,28 @@ allocaArray 512 $ \ c_str -> do failIfFalse_ "GetModuleFileName" $ c_GetModuleFileName hmod c_str 512 peekTString c_str-foreign import stdcall unsafe "windows.h GetModuleFileNameW"+foreign import WINDOWS_CCONV unsafe "windows.h GetModuleFileNameW" c_GetModuleFileName :: HMODULE -> LPTSTR -> Int -> IO Bool getModuleHandle :: Maybe String -> IO HMODULE getModuleHandle mb_name = maybeWith withTString mb_name $ \ c_name -> failIfNull "GetModuleHandle" $ c_GetModuleHandle c_name-foreign import stdcall unsafe "windows.h GetModuleHandleW"+foreign import WINDOWS_CCONV unsafe "windows.h GetModuleHandleW" c_GetModuleHandle :: LPCTSTR -> IO HMODULE getProcAddress :: HMODULE -> String -> IO Addr getProcAddress hmod procname = withCAString procname $ \ c_procname -> failIfNull "GetProcAddress" $ c_GetProcAddress hmod c_procname-foreign import stdcall unsafe "windows.h GetProcAddress"+foreign import WINDOWS_CCONV unsafe "windows.h GetProcAddress" c_GetProcAddress :: HMODULE -> LPCSTR -> IO Addr loadLibrary :: String -> IO HINSTANCE loadLibrary name = withTString name $ \ c_name -> failIfNull "LoadLibrary" $ c_LoadLibrary c_name-foreign import stdcall unsafe "windows.h LoadLibraryW"+foreign import WINDOWS_CCONV unsafe "windows.h LoadLibraryW" c_LoadLibrary :: LPCTSTR -> IO HINSTANCE type LoadLibraryFlags = DWORD@@ -80,5 +82,5 @@ loadLibraryEx name h flags = withTString name $ \ c_name -> failIfNull "LoadLibraryEx" $ c_LoadLibraryEx c_name h flags-foreign import stdcall unsafe "windows.h LoadLibraryExW"+foreign import WINDOWS_CCONV unsafe "windows.h LoadLibraryExW" c_LoadLibraryEx :: LPCTSTR -> HANDLE -> LoadLibraryFlags -> IO HINSTANCE
System/Win32/DebugApi.hsc view
@@ -25,6 +25,7 @@ import System.Win32.Types ( HANDLE, BOOL, WORD, DWORD, failIf_, failWith , getLastError, failIf, LPTSTR, withTString ) +##include "windows_cconv.h" #include "windows.h" type PID = DWORD@@ -287,12 +288,10 @@ (act buf) +#if __i386__ eax, ebx, ecx, edx :: Int esi, edi :: Int ebp, eip, esp :: Int-segCs, segDs, segEs, segFs, segGs :: Int-eFlags :: Int- eax = (#offset CONTEXT, Eax) ebx = (#offset CONTEXT, Ebx) ecx = (#offset CONTEXT, Ecx)@@ -302,11 +301,31 @@ ebp = (#offset CONTEXT, Ebp) eip = (#offset CONTEXT, Eip) esp = (#offset CONTEXT, Esp)+#elif __x86_64__+rax, rbx, rcx, rdx :: Int+rsi, rdi :: Int+rbp, rip, rsp :: Int+rax = (#offset CONTEXT, Rax)+rbx = (#offset CONTEXT, Rbx)+rcx = (#offset CONTEXT, Rcx)+rdx = (#offset CONTEXT, Rdx)+rsi = (#offset CONTEXT, Rsi)+rdi = (#offset CONTEXT, Rdi)+rbp = (#offset CONTEXT, Rbp)+rip = (#offset CONTEXT, Rip)+rsp = (#offset CONTEXT, Rsp)+#else+#error Unsupported architecture+#endif++segCs, segDs, segEs, segFs, segGs :: Int segCs = (#offset CONTEXT, SegCs) segDs = (#offset CONTEXT, SegDs) segEs = (#offset CONTEXT, SegEs) segFs = (#offset CONTEXT, SegFs) segGs = (#offset CONTEXT, SegGs)++eFlags :: Int eFlags = (#offset CONTEXT, EFlags) dr :: Int -> Int@@ -346,45 +365,45 @@ -------------------------------------------------------------------------- -- Raw imports -foreign import stdcall "windows.h SuspendThread"+foreign import WINDOWS_CCONV "windows.h SuspendThread" c_SuspendThread :: THANDLE -> IO DWORD -foreign import stdcall "windows.h ResumeThread"+foreign import WINDOWS_CCONV "windows.h ResumeThread" c_ResumeThread :: THANDLE -> IO DWORD -foreign import stdcall "windows.h WaitForDebugEvent"+foreign import WINDOWS_CCONV "windows.h WaitForDebugEvent" c_WaitForDebugEvent :: Ptr () -> DWORD -> IO BOOL -foreign import stdcall "windows.h ContinueDebugEvent"+foreign import WINDOWS_CCONV "windows.h ContinueDebugEvent" c_ContinueDebugEvent :: DWORD -> DWORD -> DWORD -> IO BOOL -foreign import stdcall "windows.h DebugActiveProcess"+foreign import WINDOWS_CCONV "windows.h DebugActiveProcess" c_DebugActiveProcess :: DWORD -> IO Bool -- Windows XP--- foreign import stdcall "windows.h DebugActiveProcessStop"+-- foreign import WINDOWS_CCONV "windows.h DebugActiveProcessStop" -- c_DebugActiveProcessStop :: DWORD -> IO Bool -foreign import stdcall "windows.h ReadProcessMemory" c_ReadProcessMemory :: +foreign import WINDOWS_CCONV "windows.h ReadProcessMemory" c_ReadProcessMemory :: PHANDLE -> Ptr () -> Ptr Word8 -> DWORD -> Ptr DWORD -> IO BOOL -foreign import stdcall "windows.h WriteProcessMemory" c_WriteProcessMemory ::+foreign import WINDOWS_CCONV "windows.h WriteProcessMemory" c_WriteProcessMemory :: PHANDLE -> Ptr () -> Ptr Word8 -> DWORD -> Ptr DWORD -> IO BOOL -foreign import stdcall "windows.h GetThreadContext"+foreign import WINDOWS_CCONV "windows.h GetThreadContext" c_GetThreadContext :: THANDLE -> Ptr () -> IO BOOL -foreign import stdcall "windows.h SetThreadContext"+foreign import WINDOWS_CCONV "windows.h SetThreadContext" c_SetThreadContext :: THANDLE -> Ptr () -> IO BOOL ---foreign import stdcall "windows.h GetThreadId"+--foreign import WINDOWS_CCONV "windows.h GetThreadId" -- c_GetThreadId :: THANDLE -> IO TID -foreign import stdcall "windows.h OutputDebugStringW"+foreign import WINDOWS_CCONV "windows.h OutputDebugStringW" c_OutputDebugString :: LPTSTR -> IO () -foreign import stdcall "windows.h IsDebuggerPresent"+foreign import WINDOWS_CCONV "windows.h IsDebuggerPresent" isDebuggerPresent :: IO BOOL -foreign import stdcall "windows.h DebugBreak"+foreign import WINDOWS_CCONV "windows.h DebugBreak" debugBreak :: IO ()
System/Win32/File.hsc view
@@ -31,6 +31,8 @@ import Control.Monad import Control.Concurrent +##include "windows_cconv.h"+ #include <windows.h> ----------------------------------------------------------------@@ -292,7 +294,7 @@ withTString name $ \ c_name -> failIfFalseWithRetry_ (unwords ["DeleteFile",show name]) $ c_DeleteFile c_name-foreign import stdcall unsafe "windows.h DeleteFileW"+foreign import WINDOWS_CCONV unsafe "windows.h DeleteFileW" c_DeleteFile :: LPCTSTR -> IO Bool copyFile :: String -> String -> Bool -> IO ()@@ -301,7 +303,7 @@ withTString dest $ \ c_dest -> failIfFalseWithRetry_ (unwords ["CopyFile",show src,show dest]) $ c_CopyFile c_src c_dest over-foreign import stdcall unsafe "windows.h CopyFileW"+foreign import WINDOWS_CCONV unsafe "windows.h CopyFileW" c_CopyFile :: LPCTSTR -> LPCTSTR -> Bool -> IO Bool moveFile :: String -> String -> IO ()@@ -310,7 +312,7 @@ withTString dest $ \ c_dest -> failIfFalseWithRetry_ (unwords ["MoveFile",show src,show dest]) $ c_MoveFile c_src c_dest-foreign import stdcall unsafe "windows.h MoveFileW"+foreign import WINDOWS_CCONV unsafe "windows.h MoveFileW" c_MoveFile :: LPCTSTR -> LPCTSTR -> IO Bool moveFileEx :: String -> String -> MoveFileFlag -> IO ()@@ -319,7 +321,7 @@ withTString dest $ \ c_dest -> failIfFalseWithRetry_ (unwords ["MoveFileEx",show src,show dest]) $ c_MoveFileEx c_src c_dest flags-foreign import stdcall unsafe "windows.h MoveFileExW"+foreign import WINDOWS_CCONV unsafe "windows.h MoveFileExW" c_MoveFileEx :: LPCTSTR -> LPCTSTR -> MoveFileFlag -> IO Bool setCurrentDirectory :: String -> IO ()@@ -327,7 +329,7 @@ withTString name $ \ c_name -> failIfFalse_ (unwords ["SetCurrentDirectory",show name]) $ c_SetCurrentDirectory c_name-foreign import stdcall unsafe "windows.h SetCurrentDirectoryW"+foreign import WINDOWS_CCONV unsafe "windows.h SetCurrentDirectoryW" c_SetCurrentDirectory :: LPCTSTR -> IO Bool createDirectory :: String -> Maybe LPSECURITY_ATTRIBUTES -> IO ()@@ -335,7 +337,7 @@ withTString name $ \ c_name -> failIfFalseWithRetry_ (unwords ["CreateDirectory",show name]) $ c_CreateDirectory c_name (maybePtr mb_attr)-foreign import stdcall unsafe "windows.h CreateDirectoryW"+foreign import WINDOWS_CCONV unsafe "windows.h CreateDirectoryW" c_CreateDirectory :: LPCTSTR -> LPSECURITY_ATTRIBUTES -> IO Bool createDirectoryEx :: String -> String -> Maybe LPSECURITY_ATTRIBUTES -> IO ()@@ -344,7 +346,7 @@ withTString name $ \ c_name -> failIfFalseWithRetry_ (unwords ["CreateDirectoryEx",show template,show name]) $ c_CreateDirectoryEx c_template c_name (maybePtr mb_attr)-foreign import stdcall unsafe "windows.h CreateDirectoryExW"+foreign import WINDOWS_CCONV unsafe "windows.h CreateDirectoryExW" c_CreateDirectoryEx :: LPCTSTR -> LPCTSTR -> LPSECURITY_ATTRIBUTES -> IO Bool removeDirectory :: String -> IO ()@@ -352,7 +354,7 @@ withTString name $ \ c_name -> failIfFalseWithRetry_ (unwords ["RemoveDirectory",show name]) $ c_RemoveDirectory c_name-foreign import stdcall unsafe "windows.h RemoveDirectoryW"+foreign import WINDOWS_CCONV unsafe "windows.h RemoveDirectoryW" c_RemoveDirectory :: LPCTSTR -> IO Bool getBinaryType :: String -> IO BinaryType@@ -362,7 +364,7 @@ failIfFalse_ (unwords ["GetBinaryType",show name]) $ c_GetBinaryType c_name p_btype peek p_btype-foreign import stdcall unsafe "windows.h GetBinaryTypeW"+foreign import WINDOWS_CCONV unsafe "windows.h GetBinaryTypeW" c_GetBinaryType :: LPCTSTR -> Ptr DWORD -> IO Bool ----------------------------------------------------------------@@ -374,33 +376,33 @@ withTString name $ \ c_name -> failIfWithRetry (==iNVALID_HANDLE_VALUE) (unwords ["CreateFile",show name]) $ c_CreateFile c_name access share (maybePtr mb_attr) mode flag (maybePtr mb_h)-foreign import stdcall unsafe "windows.h CreateFileW"+foreign import WINDOWS_CCONV unsafe "windows.h CreateFileW" c_CreateFile :: LPCTSTR -> AccessMode -> ShareMode -> LPSECURITY_ATTRIBUTES -> CreateMode -> FileAttributeOrFlag -> HANDLE -> IO HANDLE closeHandle :: HANDLE -> IO () closeHandle h = failIfFalse_ "CloseHandle" $ c_CloseHandle h-foreign import stdcall unsafe "windows.h CloseHandle"+foreign import WINDOWS_CCONV unsafe "windows.h CloseHandle" c_CloseHandle :: HANDLE -> IO Bool {-# CFILES cbits/HsWin32.c #-} foreign import ccall "HsWin32.h &CloseHandleFinaliser" c_CloseHandleFinaliser :: FunPtr (Ptr a -> IO ()) -foreign import stdcall unsafe "windows.h GetFileType"+foreign import WINDOWS_CCONV unsafe "windows.h GetFileType" getFileType :: HANDLE -> IO FileType --Apparently no error code flushFileBuffers :: HANDLE -> IO () flushFileBuffers h = failIfFalse_ "FlushFileBuffers" $ c_FlushFileBuffers h-foreign import stdcall unsafe "windows.h FlushFileBuffers"+foreign import WINDOWS_CCONV unsafe "windows.h FlushFileBuffers" c_FlushFileBuffers :: HANDLE -> IO Bool setEndOfFile :: HANDLE -> IO () setEndOfFile h = failIfFalse_ "SetEndOfFile" $ c_SetEndOfFile h-foreign import stdcall unsafe "windows.h SetEndOfFile"+foreign import WINDOWS_CCONV unsafe "windows.h SetEndOfFile" c_SetEndOfFile :: HANDLE -> IO Bool setFileAttributes :: String -> FileAttributeOrFlag -> IO ()@@ -408,7 +410,7 @@ withTString name $ \ c_name -> failIfFalseWithRetry_ (unwords ["SetFileAttributes",show name]) $ c_SetFileAttributes c_name attr-foreign import stdcall unsafe "windows.h SetFileAttributesW"+foreign import WINDOWS_CCONV unsafe "windows.h SetFileAttributesW" c_SetFileAttributes :: LPCTSTR -> FileAttributeOrFlag -> IO Bool getFileAttributes :: String -> IO FileAttributeOrFlag@@ -416,14 +418,14 @@ withTString name $ \ c_name -> failIfWithRetry (== 0xFFFFFFFF) (unwords ["GetFileAttributes",show name]) $ c_GetFileAttributes c_name-foreign import stdcall unsafe "windows.h GetFileAttributesW"+foreign import WINDOWS_CCONV unsafe "windows.h GetFileAttributesW" c_GetFileAttributes :: LPCTSTR -> IO FileAttributeOrFlag getFileInformationByHandle :: HANDLE -> IO BY_HANDLE_FILE_INFORMATION getFileInformationByHandle h = alloca $ \res -> do failIfFalseWithRetry_ "GetFileInformationByHandle" $ c_GetFileInformationByHandle h res peek res-foreign import stdcall unsafe "windows.h GetFileInformationByHandle"+foreign import WINDOWS_CCONV unsafe "windows.h GetFileInformationByHandle" c_GetFileInformationByHandle :: HANDLE -> Ptr BY_HANDLE_FILE_INFORMATION -> IO BOOL ----------------------------------------------------------------@@ -448,7 +450,7 @@ alloca $ \ p_n -> do failIfFalse_ "ReadFile" $ c_ReadFile h buf n p_n (maybePtr mb_over) peek p_n-foreign import stdcall unsafe "windows.h ReadFile"+foreign import WINDOWS_CCONV unsafe "windows.h ReadFile" c_ReadFile :: HANDLE -> Ptr a -> DWORD -> Ptr DWORD -> LPOVERLAPPED -> IO Bool win32_WriteFile :: HANDLE -> Ptr a -> DWORD -> Maybe LPOVERLAPPED -> IO DWORD@@ -456,7 +458,7 @@ alloca $ \ p_n -> do failIfFalse_ "WriteFile" $ c_WriteFile h buf n p_n (maybePtr mb_over) peek p_n-foreign import stdcall unsafe "windows.h WriteFile"+foreign import WINDOWS_CCONV unsafe "windows.h WriteFile" c_WriteFile :: HANDLE -> Ptr a -> DWORD -> Ptr DWORD -> LPOVERLAPPED -> IO Bool -- missing Seek functioinality; GSL ???@@ -475,19 +477,19 @@ withTString path $ \ c_path -> failIfNull (unwords ["FindFirstChangeNotification",show path]) $ c_FindFirstChangeNotification c_path watch flag-foreign import stdcall unsafe "windows.h FindFirstChangeNotificationW"+foreign import WINDOWS_CCONV unsafe "windows.h FindFirstChangeNotificationW" c_FindFirstChangeNotification :: LPCTSTR -> Bool -> FileNotificationFlag -> IO HANDLE findNextChangeNotification :: HANDLE -> IO () findNextChangeNotification h = failIfFalse_ "FindNextChangeNotification" $ c_FindNextChangeNotification h-foreign import stdcall unsafe "windows.h FindNextChangeNotification"+foreign import WINDOWS_CCONV unsafe "windows.h FindNextChangeNotification" c_FindNextChangeNotification :: HANDLE -> IO Bool findCloseChangeNotification :: HANDLE -> IO () findCloseChangeNotification h = failIfFalse_ "FindCloseChangeNotification" $ c_FindCloseChangeNotification h-foreign import stdcall unsafe "windows.h FindCloseChangeNotification"+foreign import WINDOWS_CCONV unsafe "windows.h FindCloseChangeNotification" c_FindCloseChangeNotification :: HANDLE -> IO Bool ----------------------------------------------------------------@@ -511,7 +513,7 @@ failIf (== iNVALID_HANDLE_VALUE) "findFirstFile" $ c_FindFirstFile tstr p_finddata return (handle, FindData fp_finddata)-foreign import stdcall unsafe "windows.h FindFirstFileW"+foreign import WINDOWS_CCONV unsafe "windows.h FindFirstFileW" c_FindFirstFile :: LPCTSTR -> Ptr WIN32_FIND_DATA -> IO HANDLE findNextFile :: HANDLE -> FindData -> IO Bool -- False -> no more files@@ -525,12 +527,12 @@ if err_code == (# const ERROR_NO_MORE_FILES ) then return False else failWith "findNextFile" err_code-foreign import stdcall unsafe "windows.h FindNextFileW"+foreign import WINDOWS_CCONV unsafe "windows.h FindNextFileW" c_FindNextFile :: HANDLE -> Ptr WIN32_FIND_DATA -> IO BOOL findClose :: HANDLE -> IO () findClose h = failIfFalse_ "findClose" $ c_FindClose h-foreign import stdcall unsafe "windows.h FindClose"+foreign import WINDOWS_CCONV unsafe "windows.h FindClose" c_FindClose :: HANDLE -> IO BOOL ----------------------------------------------------------------@@ -542,7 +544,7 @@ withTString path $ \ c_path -> withTString name $ \ c_name -> failIfFalse_ "DefineDosDevice" $ c_DefineDosDevice flags c_name c_path-foreign import stdcall unsafe "windows.h DefineDosDeviceW"+foreign import WINDOWS_CCONV unsafe "windows.h DefineDosDeviceW" c_DefineDosDevice :: DefineDosDeviceFlags -> LPCTSTR -> LPCTSTR -> IO Bool ----------------------------------------------------------------@@ -550,16 +552,16 @@ -- These functions are very unusual in the Win32 API: -- They dont return error codes -foreign import stdcall unsafe "windows.h AreFileApisANSI"+foreign import WINDOWS_CCONV unsafe "windows.h AreFileApisANSI" areFileApisANSI :: IO Bool -foreign import stdcall unsafe "windows.h SetFileApisToOEM"+foreign import WINDOWS_CCONV unsafe "windows.h SetFileApisToOEM" setFileApisToOEM :: IO () -foreign import stdcall unsafe "windows.h SetFileApisToANSI"+foreign import WINDOWS_CCONV unsafe "windows.h SetFileApisToANSI" setFileApisToANSI :: IO () -foreign import stdcall unsafe "windows.h SetHandleCount"+foreign import WINDOWS_CCONV unsafe "windows.h SetHandleCount" setHandleCount :: UINT -> IO UINT ----------------------------------------------------------------@@ -567,7 +569,7 @@ getLogicalDrives :: IO DWORD getLogicalDrives = failIfZero "GetLogicalDrives" $ c_GetLogicalDrives-foreign import stdcall unsafe "windows.h GetLogicalDrives"+foreign import WINDOWS_CCONV unsafe "windows.h GetLogicalDrives" c_GetLogicalDrives :: IO DWORD -- %fun GetDriveType :: Maybe String -> IO DriveType@@ -586,7 +588,7 @@ nfree <- peek p_nfree nclusters <- peek p_nclusters return (sectors, bytes, nfree, nclusters)-foreign import stdcall unsafe "windows.h GetDiskFreeSpaceW"+foreign import WINDOWS_CCONV unsafe "windows.h GetDiskFreeSpaceW" c_GetDiskFreeSpace :: LPCTSTR -> Ptr DWORD -> Ptr DWORD -> Ptr DWORD -> Ptr DWORD -> IO Bool setVolumeLabel :: String -> String -> IO ()@@ -594,7 +596,7 @@ withTString path $ \ c_path -> withTString name $ \ c_name -> failIfFalse_ "SetVolumeLabel" $ c_SetVolumeLabel c_path c_name-foreign import stdcall unsafe "windows.h SetVolumeLabelW"+foreign import WINDOWS_CCONV unsafe "windows.h SetVolumeLabelW" c_SetVolumeLabel :: LPCTSTR -> LPCTSTR -> IO Bool ----------------------------------------------------------------
System/Win32/FileMapping.hsc view
@@ -29,6 +29,8 @@ import Foreign ( Ptr, nullPtr, plusPtr, maybeWith, FunPtr , ForeignPtr, newForeignPtr ) +##include "windows_cconv.h"+ #include "windows.h" ---------------------------------------------------------------------------@@ -155,16 +157,16 @@ --------------------------------------------------------------------------- -- Imports ----------------------------------------------------------------------------foreign import stdcall "windows.h OpenFileMappingW"+foreign import WINDOWS_CCONV "windows.h OpenFileMappingW" c_OpenFileMapping :: DWORD -> BOOL -> LPCTSTR -> IO HANDLE -foreign import stdcall "windows.h CreateFileMappingW"+foreign import WINDOWS_CCONV "windows.h CreateFileMappingW" c_CreateFileMapping :: HANDLE -> Ptr () -> DWORD -> DWORD -> DWORD -> LPCTSTR -> IO HANDLE -foreign import stdcall "windows.h MapViewOfFileEx"+foreign import WINDOWS_CCONV "windows.h MapViewOfFileEx" c_MapViewOfFileEx :: HANDLE -> DWORD -> DWORD -> DWORD -> SIZE_T -> Ptr a -> IO (Ptr b) -foreign import stdcall "windows.h UnmapViewOfFile"+foreign import WINDOWS_CCONV "windows.h UnmapViewOfFile" c_UnmapViewOfFile :: Ptr a -> IO BOOL {-# CFILES cbits/HsWin32.c #-}
System/Win32/Info.hsc view
@@ -19,13 +19,14 @@ import System.Win32.Types -import Prelude hiding (catch) import Control.Exception (catch)-import System.IO.Error hiding (catch, try)+import System.IO.Error import Foreign ( Storable(sizeOf, alignment, peekByteOff, pokeByteOff, peek, poke) , Ptr, alloca, allocaArray ) +##include "windows_cconv.h"+ #include <windows.h> ----------------------------------------------------------------@@ -137,22 +138,22 @@ Left n -> try loc f n Right str -> return str -foreign import stdcall unsafe "GetWindowsDirectoryW"+foreign import WINDOWS_CCONV unsafe "GetWindowsDirectoryW" c_getWindowsDirectory :: LPTSTR -> UINT -> IO UINT -foreign import stdcall unsafe "GetSystemDirectoryW"+foreign import WINDOWS_CCONV unsafe "GetSystemDirectoryW" c_getSystemDirectory :: LPTSTR -> UINT -> IO UINT -foreign import stdcall unsafe "GetCurrentDirectoryW"+foreign import WINDOWS_CCONV unsafe "GetCurrentDirectoryW" c_getCurrentDirectory :: DWORD -> LPTSTR -> IO UINT -foreign import stdcall unsafe "GetTempPathW"+foreign import WINDOWS_CCONV unsafe "GetTempPathW" c_getTempPath :: DWORD -> LPTSTR -> IO UINT -foreign import stdcall unsafe "GetFullPathNameW"+foreign import WINDOWS_CCONV unsafe "GetFullPathNameW" c_GetFullPathName :: LPCTSTR -> DWORD -> LPTSTR -> Ptr LPTSTR -> IO DWORD -foreign import stdcall unsafe "SearchPathW"+foreign import WINDOWS_CCONV unsafe "SearchPathW" c_SearchPath :: LPCTSTR -> LPCTSTR -> LPCTSTR -> DWORD -> LPTSTR -> Ptr LPTSTR -> IO DWORD @@ -246,7 +247,7 @@ siProcessorRevision = processorRevision } -foreign import stdcall unsafe "windows.h GetSystemInfo"+foreign import WINDOWS_CCONV unsafe "windows.h GetSystemInfo" c_GetSystemInfo :: Ptr SYSTEM_INFO -> IO () getSystemInfo :: IO SYSTEM_INFO
System/Win32/Mem.hsc view
@@ -22,6 +22,8 @@ import Foreign import Foreign.C.Types +##include "windows_cconv.h"+ #include <windows.h> copyMemory :: Ptr a -> Ptr a -> DWORD -> IO ()@@ -39,11 +41,11 @@ foreign import ccall unsafe "string.h" memset :: Ptr a -> CInt -> CSize -> IO () -foreign import stdcall unsafe "windows.h GetProcessHeap"+foreign import WINDOWS_CCONV unsafe "windows.h GetProcessHeap" getProcessHeap :: IO HANDLE #ifndef __WINE_WINDOWS_H-foreign import stdcall unsafe "windows.h GetProcessHeaps"+foreign import WINDOWS_CCONV unsafe "windows.h GetProcessHeaps" getProcessHeaps :: DWORD -> Addr -> IO DWORD #endif @@ -72,7 +74,7 @@ globalAlloc :: GlobalAllocFlags -> DWORD -> IO HGLOBAL globalAlloc flags size = failIfNull "GlobalAlloc" $ c_GlobalAlloc flags size-foreign import stdcall unsafe "windows.h GlobalAlloc"+foreign import WINDOWS_CCONV unsafe "windows.h GlobalAlloc" c_GlobalAlloc :: GlobalAllocFlags -> DWORD -> IO HGLOBAL -- %fun GlobalDiscard :: HGLOBAL -> IO HGLOBAL@@ -81,25 +83,25 @@ globalFlags :: HGLOBAL -> IO GlobalAllocFlags globalFlags mem = failIf (== gMEM_INVALID_HANDLE) "GlobalFlags" $ c_GlobalFlags mem-foreign import stdcall unsafe "windows.h GlobalFlags"+foreign import WINDOWS_CCONV unsafe "windows.h GlobalFlags" c_GlobalFlags :: HGLOBAL -> IO GlobalAllocFlags globalFree :: HGLOBAL -> IO HGLOBAL globalFree mem = failIfNull "GlobalFree" $ c_GlobalFree mem-foreign import stdcall unsafe "windows.h GlobalFree"+foreign import WINDOWS_CCONV unsafe "windows.h GlobalFree" c_GlobalFree :: HGLOBAL -> IO HGLOBAL globalHandle :: Addr -> IO HGLOBAL globalHandle addr = failIfNull "GlobalHandle" $ c_GlobalHandle addr-foreign import stdcall unsafe "windows.h GlobalHandle"+foreign import WINDOWS_CCONV unsafe "windows.h GlobalHandle" c_GlobalHandle :: Addr -> IO HGLOBAL globalLock :: HGLOBAL -> IO Addr globalLock mem = failIfNull "GlobalLock" $ c_GlobalLock mem-foreign import stdcall unsafe "windows.h GlobalLock"+foreign import WINDOWS_CCONV unsafe "windows.h GlobalLock" c_GlobalLock :: HGLOBAL -> IO Addr -- %fun GlobalMemoryStatus :: IO MEMORYSTATUS@@ -107,19 +109,19 @@ globalReAlloc :: HGLOBAL -> DWORD -> GlobalAllocFlags -> IO HGLOBAL globalReAlloc mem size flags = failIfNull "GlobalReAlloc" $ c_GlobalReAlloc mem size flags-foreign import stdcall unsafe "windows.h GlobalReAlloc"+foreign import WINDOWS_CCONV unsafe "windows.h GlobalReAlloc" c_GlobalReAlloc :: HGLOBAL -> DWORD -> GlobalAllocFlags -> IO HGLOBAL globalSize :: HGLOBAL -> IO DWORD globalSize mem = failIfZero "GlobalSize" $ c_GlobalSize mem-foreign import stdcall unsafe "windows.h GlobalSize"+foreign import WINDOWS_CCONV unsafe "windows.h GlobalSize" c_GlobalSize :: HGLOBAL -> IO DWORD globalUnlock :: HGLOBAL -> IO () globalUnlock mem = failIfFalse_ "GlobalUnlock" $ c_GlobalUnlock mem-foreign import stdcall unsafe "windows.h GlobalUnlock"+foreign import WINDOWS_CCONV unsafe "windows.h GlobalUnlock" c_GlobalUnlock :: HGLOBAL -> IO Bool type HeapAllocFlags = DWORD@@ -133,58 +135,58 @@ heapAlloc :: HANDLE -> HeapAllocFlags -> DWORD -> IO Addr heapAlloc heap flags size = failIfNull "HeapAlloc" $ c_HeapAlloc heap flags size-foreign import stdcall unsafe "windows.h HeapAlloc"+foreign import WINDOWS_CCONV unsafe "windows.h HeapAlloc" c_HeapAlloc :: HANDLE -> HeapAllocFlags -> DWORD -> IO Addr heapCompact :: HANDLE -> HeapAllocFlags -> IO UINT heapCompact heap flags = failIfZero "HeapCompact" $ c_HeapCompact heap flags-foreign import stdcall unsafe "windows.h HeapCompact"+foreign import WINDOWS_CCONV unsafe "windows.h HeapCompact" c_HeapCompact :: HANDLE -> HeapAllocFlags -> IO UINT heapCreate :: HeapAllocFlags -> DWORD -> DWORD -> IO HANDLE heapCreate flags initSize maxSize = failIfNull "HeapCreate" $ c_HeapCreate flags initSize maxSize-foreign import stdcall unsafe "windows.h HeapCreate"+foreign import WINDOWS_CCONV unsafe "windows.h HeapCreate" c_HeapCreate :: HeapAllocFlags -> DWORD -> DWORD -> IO HANDLE heapDestroy :: HANDLE -> IO () heapDestroy heap = failIfFalse_ "HeapDestroy" $ c_HeapDestroy heap-foreign import stdcall unsafe "windows.h HeapDestroy"+foreign import WINDOWS_CCONV unsafe "windows.h HeapDestroy" c_HeapDestroy :: HANDLE -> IO Bool heapFree :: HANDLE -> HeapAllocFlags -> Addr -> IO () heapFree heap flags addr = failIfFalse_ "HeapFree" $ c_HeapFree heap flags addr-foreign import stdcall unsafe "windows.h HeapFree"+foreign import WINDOWS_CCONV unsafe "windows.h HeapFree" c_HeapFree :: HANDLE -> HeapAllocFlags -> Addr -> IO Bool heapLock :: HANDLE -> IO () heapLock heap = failIfFalse_ "HeapLock" $ c_HeapLock heap-foreign import stdcall unsafe "windows.h HeapLock"+foreign import WINDOWS_CCONV unsafe "windows.h HeapLock" c_HeapLock :: HANDLE -> IO Bool heapReAlloc :: HANDLE -> HeapAllocFlags -> Addr -> DWORD -> IO Addr heapReAlloc heap flags addr size = failIfNull "HeapReAlloc" $ c_HeapReAlloc heap flags addr size-foreign import stdcall unsafe "windows.h HeapReAlloc"+foreign import WINDOWS_CCONV unsafe "windows.h HeapReAlloc" c_HeapReAlloc :: HANDLE -> HeapAllocFlags -> Addr -> DWORD -> IO Addr heapSize :: HANDLE -> HeapAllocFlags -> Addr -> IO DWORD heapSize heap flags addr = failIfZero "HeapSize" $ c_HeapSize heap flags addr-foreign import stdcall unsafe "windows.h HeapSize"+foreign import WINDOWS_CCONV unsafe "windows.h HeapSize" c_HeapSize :: HANDLE -> HeapAllocFlags -> Addr -> IO DWORD heapUnlock :: HANDLE -> IO () heapUnlock heap = failIfFalse_ "HeapUnlock" $ c_HeapUnlock heap-foreign import stdcall unsafe "windows.h HeapUnlock"+foreign import WINDOWS_CCONV unsafe "windows.h HeapUnlock" c_HeapUnlock :: HANDLE -> IO Bool -foreign import stdcall unsafe "windows.h HeapValidate"+foreign import WINDOWS_CCONV unsafe "windows.h HeapValidate" heapValidate :: HANDLE -> HeapAllocFlags -> Addr -> IO Bool type VirtualAllocFlags = DWORD@@ -219,7 +221,7 @@ virtualAlloc :: Addr -> DWORD -> VirtualAllocFlags -> ProtectFlags -> IO Addr virtualAlloc addt size ty flags = failIfNull "VirtualAlloc" $ c_VirtualAlloc addt size ty flags-foreign import stdcall unsafe "windows.h VirtualAlloc"+foreign import WINDOWS_CCONV unsafe "windows.h VirtualAlloc" c_VirtualAlloc :: Addr -> DWORD -> DWORD -> DWORD -> IO Addr -- %fun VirtualAllocEx :: HANDLE -> Addr -> DWORD -> VirtualAllocFlags -> ProtectFlags ->IO Addr@@ -230,7 +232,7 @@ virtualFree :: Addr -> DWORD -> FreeFlags -> IO () virtualFree addr size flags = failIfFalse_ "VirtualFree" $ c_VirtualFree addr size flags-foreign import stdcall unsafe "windows.h VirtualFree"+foreign import WINDOWS_CCONV unsafe "windows.h VirtualFree" c_VirtualFree :: Addr -> DWORD -> FreeFlags -> IO Bool -- %fun VirtualFreeEx :: HANDLE -> Addr -> DWORD -> FreeFlags -> IO ()@@ -241,7 +243,7 @@ virtualLock :: Addr -> DWORD -> IO () virtualLock addr size = failIfFalse_ "VirtualLock" $ c_VirtualLock addr size-foreign import stdcall unsafe "windows.h VirtualLock"+foreign import WINDOWS_CCONV unsafe "windows.h VirtualLock" c_VirtualLock :: Addr -> DWORD -> IO Bool virtualProtect :: Addr -> DWORD -> ProtectFlags -> IO ProtectFlags@@ -249,7 +251,7 @@ alloca $ \ p_old -> do failIfFalse_ "VirtualProtect" $ c_VirtualProtect addr size new_prot p_old peek p_old-foreign import stdcall unsafe "windows.h VirtualProtect"+foreign import WINDOWS_CCONV unsafe "windows.h VirtualProtect" c_VirtualProtect :: Addr -> DWORD -> DWORD -> Ptr DWORD -> IO Bool virtualProtectEx :: HANDLE -> Addr -> DWORD -> ProtectFlags -> IO ProtectFlags@@ -258,7 +260,7 @@ failIfFalse_ "VirtualProtectEx" $ c_VirtualProtectEx proc addr size new_prot p_old peek p_old-foreign import stdcall unsafe "windows.h VirtualProtectEx"+foreign import WINDOWS_CCONV unsafe "windows.h VirtualProtectEx" c_VirtualProtectEx :: HANDLE -> Addr -> DWORD -> DWORD -> Ptr DWORD -> IO Bool -- No VirtualQuery..()@@ -266,5 +268,5 @@ virtualUnlock :: Addr -> DWORD -> IO () virtualUnlock addr size = failIfFalse_ "VirtualUnlock" $ c_VirtualUnlock addr size-foreign import stdcall unsafe "windows.h VirtualUnlock"+foreign import WINDOWS_CCONV unsafe "windows.h VirtualUnlock" c_VirtualUnlock :: Addr -> DWORD -> IO Bool
System/Win32/NLS.hsc view
@@ -29,6 +29,8 @@ import Foreign import Foreign.C +##include "windows_cconv.h"+ #include <windows.h> #include "errors.h" #include "win32debug.h"@@ -39,7 +41,7 @@ , lOCALE_NEUTRAL = LOCALE_NEUTRAL } -foreign import stdcall unsafe "windows.h ConvertDefaultLocale"+foreign import WINDOWS_CCONV unsafe "windows.h ConvertDefaultLocale" convertDefaultLocale :: LCID -> IO LCID -- ToDo: various enum functions.@@ -52,10 +54,10 @@ , cP_OEMCP = CP_OEMCP } -foreign import stdcall unsafe "windows.h GetACP"+foreign import WINDOWS_CCONV unsafe "windows.h GetACP" getACP :: IO CodePage -foreign import stdcall unsafe "windows.h SetThreadLocale"+foreign import WINDOWS_CCONV unsafe "windows.h SetThreadLocale" setThreadLocale :: LCID -> IO () type LCTYPE = UINT@@ -95,7 +97,7 @@ setLocaleInfo locale ty info = withTString info $ \ c_info -> failIfFalse_ "SetLocaleInfo" $ c_SetLocaleInfo locale ty c_info-foreign import stdcall unsafe "windows.h SetLocaleInfoW"+foreign import WINDOWS_CCONV unsafe "windows.h SetLocaleInfoW" c_SetLocaleInfo :: LCID -> LCTYPE -> LPCTSTR -> IO Bool type LCMapFlags = DWORD@@ -127,7 +129,7 @@ _ <- failIfZero "LCMapString" $ c_LCMapString locale flags c_src src_len c_dest dest_size peekTString c_dest-foreign import stdcall unsafe "windows.h LCMapStringW"+foreign import WINDOWS_CCONV unsafe "windows.h LCMapStringW" c_LCMapString :: LCID -> LCMapFlags -> LPCTSTR -> Int -> LPCTSTR -> Int -> IO Int type LocaleTestFlags = DWORD@@ -137,28 +139,28 @@ , lCID_SUPPORTED = LCID_SUPPORTED } -foreign import stdcall unsafe "windows.h IsValidLocale"+foreign import WINDOWS_CCONV unsafe "windows.h IsValidLocale" isValidLocale :: LCID -> LocaleTestFlags -> IO Bool -foreign import stdcall unsafe "windows.h IsValidCodePage"+foreign import WINDOWS_CCONV unsafe "windows.h IsValidCodePage" isValidCodePage :: CodePage -> IO Bool -foreign import stdcall unsafe "windows.h GetUserDefaultLCID"+foreign import WINDOWS_CCONV unsafe "windows.h GetUserDefaultLCID" getUserDefaultLCID :: LCID -foreign import stdcall unsafe "windows.h GetUserDefaultLangID"+foreign import WINDOWS_CCONV unsafe "windows.h GetUserDefaultLangID" getUserDefaultLangID :: LANGID -foreign import stdcall unsafe "windows.h GetThreadLocale"+foreign import WINDOWS_CCONV unsafe "windows.h GetThreadLocale" getThreadLocale :: IO LCID -foreign import stdcall unsafe "windows.h GetSystemDefaultLCID"+foreign import WINDOWS_CCONV unsafe "windows.h GetSystemDefaultLCID" getSystemDefaultLCID :: LCID -foreign import stdcall unsafe "windows.h GetSystemDefaultLangID"+foreign import WINDOWS_CCONV unsafe "windows.h GetSystemDefaultLangID" getSystemDefaultLangID :: LANGID -foreign import stdcall unsafe "windows.h GetOEMCP"+foreign import WINDOWS_CCONV unsafe "windows.h GetOEMCP" getOEMCP :: CodePage #{enum PrimaryLANGID,@@ -370,7 +372,7 @@ cwstr wchars peekCWStringLen (cwstr,fromIntegral wchars) -- converts UTF-16 to [Char] -foreign import stdcall unsafe "MultiByteToWideChar"+foreign import WINDOWS_CCONV unsafe "MultiByteToWideChar" multiByteToWideChar :: CodePage -> DWORD -- dwFlags,
System/Win32/Process.hsc view
@@ -23,6 +23,8 @@ import System.Win32.File ( closeHandle ) import System.Win32.Types +##include "windows_cconv.h"+ #include <windows.h> #include <tlhelp32.h> @@ -30,7 +32,7 @@ iNFINITE :: DWORD iNFINITE = #{const INFINITE} -foreign import stdcall unsafe "windows.h Sleep"+foreign import WINDOWS_CCONV unsafe "windows.h Sleep" sleep :: DWORD -> IO () @@ -52,14 +54,14 @@ , sYNCHORNIZE = SYNCHRONIZE } -foreign import stdcall unsafe "windows.h OpenProcess"+foreign import WINDOWS_CCONV unsafe "windows.h OpenProcess" c_OpenProcess :: ProcessAccessRights -> BOOL -> ProcessId -> IO ProcessHandle openProcess :: ProcessAccessRights -> BOOL -> ProcessId -> IO ProcessHandle openProcess r inh i = failIfNull "OpenProcess" $ c_OpenProcess r inh i -foreign import stdcall unsafe "windows.h GetProcessId"+foreign import WINDOWS_CCONV unsafe "windows.h GetProcessId" c_GetProcessId :: ProcessHandle -> IO ProcessId getProcessId :: ProcessHandle -> IO ProcessId@@ -82,13 +84,13 @@ , tH32CS_SNAPNOHEAPS = TH32CS_SNAPNOHEAPS -} -foreign import stdcall unsafe "tlhelp32.h CreateToolhelp32Snapshot"+foreign import WINDOWS_CCONV unsafe "tlhelp32.h CreateToolhelp32Snapshot" c_CreateToolhelp32Snapshot :: Th32SnapFlags -> ProcessId -> IO Th32SnapHandle -foreign import stdcall unsafe "tlhelp32.h Process32FirstW"+foreign import WINDOWS_CCONV unsafe "tlhelp32.h Process32FirstW" c_Process32First :: Th32SnapHandle -> Ptr ProcessEntry32 -> IO BOOL -foreign import stdcall unsafe "tlhelp32.h Process32NextW"+foreign import WINDOWS_CCONV unsafe "tlhelp32.h Process32NextW" c_Process32Next :: Th32SnapHandle -> Ptr ProcessEntry32 -> IO BOOL -- | Create a snapshot of specified resources. Call closeHandle to close snapshot.
System/Win32/Registry.hsc view
@@ -67,14 +67,16 @@ import System.IO.Unsafe import Foreign hiding (unsafePerformIO) +##include "windows_cconv.h"+ #include <windows.h> -#{enum HKEY, (unsafePerformIO . newForeignHANDLE . castUINTToPtr)- , hKEY_CLASSES_ROOT = (UINT)HKEY_CLASSES_ROOT- , hKEY_CURRENT_CONFIG = (UINT)HKEY_CURRENT_CONFIG- , hKEY_CURRENT_USER = (UINT)HKEY_CURRENT_USER- , hKEY_LOCAL_MACHINE = (UINT)HKEY_LOCAL_MACHINE- , hKEY_USERS = (UINT)HKEY_USERS+#{enum HKEY, (unsafePerformIO . newForeignHANDLE . castUINTPtrToPtr)+ , hKEY_CLASSES_ROOT = (UINT_PTR)HKEY_CLASSES_ROOT+ , hKEY_CURRENT_CONFIG = (UINT_PTR)HKEY_CURRENT_CONFIG+ , hKEY_CURRENT_USER = (UINT_PTR)HKEY_CURRENT_USER+ , hKEY_LOCAL_MACHINE = (UINT_PTR)HKEY_LOCAL_MACHINE+ , hKEY_USERS = (UINT_PTR)HKEY_USERS } -- , PKEYERFORMANCE_DATA NT only -- , HKEY_DYN_DATA 95/98 only@@ -83,7 +85,7 @@ regCloseKey key = withForeignPtr key $ \ p_key -> failUnlessSuccess "RegCloseKey" $ c_RegCloseKey p_key-foreign import stdcall unsafe "windows.h RegCloseKey"+foreign import WINDOWS_CCONV unsafe "windows.h RegCloseKey" c_RegCloseKey :: PKEY -> IO ErrCode -- Connects to a predefined registry handle on another computer.@@ -97,7 +99,7 @@ c_RegConnectRegistry c_machine p_key p_out_key p_new_key <- peek p_out_key newForeignHANDLE p_new_key-foreign import stdcall unsafe "windows.h RegConnectRegistryW"+foreign import WINDOWS_CCONV unsafe "windows.h RegConnectRegistryW" c_RegConnectRegistry :: LPCTSTR -> PKEY -> Ptr PKEY -> IO ErrCode regCreateKey :: HKEY -> String -> IO HKEY@@ -109,7 +111,7 @@ c_RegCreateKey p_key c_subkey p_out_key p_new_key <- peek p_out_key newForeignHANDLE p_new_key-foreign import stdcall unsafe "windows.h RegCreateKeyW"+foreign import WINDOWS_CCONV unsafe "windows.h RegCreateKeyW" c_RegCreateKey :: PKEY -> LPCTSTR -> Ptr PKEY -> IO ErrCode type RegCreateOptions = DWORD@@ -147,7 +149,7 @@ out_key <- newForeignHANDLE p_out_key disp <- peek p_disp return (out_key, disp == #{const REG_CREATED_NEW_KEY})-foreign import stdcall unsafe "windows.h RegCreateKeyExW"+foreign import WINDOWS_CCONV unsafe "windows.h RegCreateKeyExW" c_RegCreateKeyEx :: PKEY -> LPCTSTR -> DWORD -> LPCTSTR -> RegCreateOptions -> REGSAM -> LPSECURITY_ATTRIBUTES -> Ptr PKEY -> Ptr DWORD -> IO ErrCode regDeleteKey :: HKEY -> String -> IO ()@@ -155,7 +157,7 @@ withForeignPtr key $ \ p_key -> withTString subkey $ \ c_subkey -> failUnlessSuccess "RegDeleteKey" $ c_RegDeleteKey p_key c_subkey-foreign import stdcall unsafe "windows.h RegDeleteKeyW"+foreign import WINDOWS_CCONV unsafe "windows.h RegDeleteKeyW" c_RegDeleteKey :: PKEY -> LPCTSTR -> IO ErrCode regDeleteValue :: HKEY -> String -> IO ()@@ -163,7 +165,7 @@ withForeignPtr key $ \ p_key -> withTString name $ \ c_name -> failUnlessSuccess "RegDeleteValue" $ c_RegDeleteValue p_key c_name-foreign import stdcall unsafe "windows.h RegDeleteValueW"+foreign import WINDOWS_CCONV unsafe "windows.h RegDeleteValueW" c_RegDeleteValue :: PKEY -> LPCTSTR -> IO ErrCode -- XXX Not 100% sure this is right, but I think it is.@@ -225,7 +227,7 @@ c_RegEnumKey p_key index c_name len str <- peekTString c_name return (str, fromEnum no_more)-foreign import stdcall unsafe "windows.h RegEnumKeyW"+foreign import WINDOWS_CCONV unsafe "windows.h RegEnumKeyW" c_RegEnumKey :: PKEY -> DWORD -> LPTSTR -> DWORD -> IO ErrCode regEnumValue :: HKEY -> DWORD -> LPTSTR -> DWORD -> LPBYTE -> DWORD -> IO (RegValueType, String, Int)@@ -239,7 +241,7 @@ reg_ty <- peek p_reg_ty str <- peekTString name return (reg_ty, str, fromEnum no_more)-foreign import stdcall unsafe "windows.h RegEnumValueW"+foreign import WINDOWS_CCONV unsafe "windows.h RegEnumValueW" c_RegEnumValue :: PKEY -> DWORD -> LPTSTR -> Ptr DWORD -> Ptr DWORD -> Ptr DWORD -> LPBYTE -> Ptr DWORD -> IO ErrCode eRROR_NO_MORE_ITEMS :: ErrCode@@ -249,7 +251,7 @@ regFlushKey key = withForeignPtr key $ \ p_key -> failUnlessSuccess "RegFlushKey" $ c_RegFlushKey p_key-foreign import stdcall unsafe "windows.h RegFlushKey"+foreign import WINDOWS_CCONV unsafe "windows.h RegFlushKey" c_RegFlushKey :: PKEY -> IO ErrCode -- ifdef FOR_WINDOWS_NT@@ -263,7 +265,7 @@ withTString subkey $ \ c_subkey -> withTString file $ \ c_file -> failUnlessSuccess "RegLoadKey" $ c_RegLoadKey p_key c_subkey c_file-foreign import stdcall unsafe "windows.h RegLoadKeyW"+foreign import WINDOWS_CCONV unsafe "windows.h RegLoadKeyW" c_RegLoadKey :: PKEY -> LPCTSTR -> LPCTSTR -> IO ErrCode -- ifdef FOR_WINDOWS_NT@@ -282,7 +284,7 @@ withForeignPtr key $ \ p_key -> failUnlessSuccess "RegNotifyChangeKeyValue" $ c_RegNotifyChangeKeyValue p_key watch notifyFilter event async-foreign import stdcall unsafe "windows.h RegNotifyChangeKeyValue"+foreign import WINDOWS_CCONV unsafe "windows.h RegNotifyChangeKeyValue" c_RegNotifyChangeKeyValue :: PKEY -> Bool -> RegNotifyOptions -> HANDLE -> Bool -> IO ErrCode -- endif@@ -297,7 +299,7 @@ failUnlessSuccess "RegOpenKey" $ c_RegOpenKey p_key c_subkey p_res p_res_key <- peek p_res newForeignHANDLE p_res_key-foreign import stdcall unsafe "windows.h RegOpenKeyW"+foreign import WINDOWS_CCONV unsafe "windows.h RegOpenKeyW" c_RegOpenKey :: PKEY -> LPCTSTR -> Ptr PKEY -> IO ErrCode regOpenKeyEx :: HKEY -> String -> REGSAM -> IO HKEY@@ -308,7 +310,7 @@ failUnlessSuccess "RegOpenKeyEx" $ c_RegOpenKeyEx p_key c_subkey 0 sam p_res p_res_key <- peek p_res newForeignHANDLE p_res_key-foreign import stdcall unsafe "windows.h RegOpenKeyExW"+foreign import WINDOWS_CCONV unsafe "windows.h RegOpenKeyExW" c_RegOpenKeyEx :: PKEY -> LPCTSTR -> DWORD -> REGSAM -> Ptr PKEY -> IO ErrCode data RegInfoKey =@@ -367,7 +369,7 @@ , lastWrite_lo = lastWrite_lo , lastWrite_hi = lastWrite_hi }-foreign import stdcall unsafe "windows.h RegQueryInfoKeyW"+foreign import WINDOWS_CCONV unsafe "windows.h RegQueryInfoKeyW" c_RegQueryInfoKey :: PKEY -> LPTSTR -> Ptr DWORD -> Ptr DWORD -> Ptr DWORD -> Ptr DWORD -> Ptr DWORD -> Ptr DWORD -> Ptr DWORD -> Ptr DWORD -> Ptr DWORD -> Ptr FILETIME -> IO ErrCode -- RegQueryMultipleValues :: HKEY -> IO ([VALENT],String)@@ -389,7 +391,7 @@ failUnlessSuccess "RegQueryValue" $ c_RegQueryValue p_key c_subkey c_value p_value_len peekTString c_value-foreign import stdcall unsafe "windows.h RegQueryValueW"+foreign import WINDOWS_CCONV unsafe "windows.h RegQueryValueW" c_RegQueryValue :: PKEY -> LPCTSTR -> LPTSTR -> Ptr LONG -> IO ErrCode regQueryValue :: HKEY -> Maybe String -> IO String@@ -417,7 +419,7 @@ failUnlessSuccess "RegQueryValueEx" $ c_RegQueryValueEx p_key c_name nullPtr p_ty value p_value_len peek p_ty-foreign import stdcall unsafe "windows.h RegQueryValueExW"+foreign import WINDOWS_CCONV unsafe "windows.h RegQueryValueExW" c_RegQueryValueEx :: PKEY -> LPCTSTR -> Ptr DWORD -> Ptr DWORD -> LPBYTE -> Ptr DWORD -> IO ErrCode regReplaceKey :: HKEY -> String -> String -> String -> IO ()@@ -428,7 +430,7 @@ withTString oldfile $ \ c_oldfile -> failUnlessSuccess "RegReplaceKey" $ c_RegReplaceKey p_key c_subkey c_newfile c_oldfile-foreign import stdcall unsafe "windows.h RegReplaceKeyW"+foreign import WINDOWS_CCONV unsafe "windows.h RegReplaceKeyW" c_RegReplaceKey :: PKEY -> LPCTSTR -> LPCTSTR -> LPCTSTR -> IO ErrCode type RegRestoreFlags = DWORD@@ -444,7 +446,7 @@ withForeignPtr key $ \ p_key -> withTString file $ \ c_file -> failUnlessSuccess "RegRestoreKey" $ c_RegRestoreKey p_key c_file flags-foreign import stdcall unsafe "windows.h RegRestoreKeyW"+foreign import WINDOWS_CCONV unsafe "windows.h RegRestoreKeyW" c_RegRestoreKey :: PKEY -> LPCTSTR -> RegRestoreFlags -> IO ErrCode regSaveKey :: HKEY -> String -> Maybe LPSECURITY_ATTRIBUTES -> IO ()@@ -452,7 +454,7 @@ withForeignPtr key $ \ p_key -> withTString file $ \ c_file -> failUnlessSuccess "RegSaveKey" $ c_RegSaveKey p_key c_file (maybePtr mb_attr)-foreign import stdcall unsafe "windows.h RegSaveKeyW"+foreign import WINDOWS_CCONV unsafe "windows.h RegSaveKeyW" c_RegSaveKey :: PKEY -> LPCTSTR -> LPSECURITY_ATTRIBUTES -> IO ErrCode -- ifdef FOR_WINDOWS_NT@@ -470,7 +472,7 @@ withTStringLen value $ \ (c_value, value_len) -> failUnlessSuccess "RegSetValue" $ c_RegSetValue p_key c_subkey rEG_SZ c_value value_len-foreign import stdcall unsafe "windows.h RegSetValueW"+foreign import WINDOWS_CCONV unsafe "windows.h RegSetValueW" c_RegSetValue :: PKEY -> LPCTSTR -> DWORD -> LPCTSTR -> Int -> IO ErrCode @@ -503,7 +505,7 @@ withTString subkey $ \ c_subkey -> failUnlessSuccess "RegSetValueEx" $ c_RegSetValueEx p_key c_subkey 0 ty value value_len-foreign import stdcall unsafe "windows.h RegSetValueExW"+foreign import WINDOWS_CCONV unsafe "windows.h RegSetValueExW" c_RegSetValueEx :: PKEY -> LPCTSTR -> DWORD -> RegValueType -> LPTSTR -> Int -> IO ErrCode regUnLoadKey :: HKEY -> String -> IO ()@@ -511,5 +513,5 @@ withForeignPtr key $ \ p_key -> withTString subkey $ \ c_subkey -> failUnlessSuccess "RegUnLoadKey" $ c_RegUnLoadKey p_key c_subkey-foreign import stdcall unsafe "windows.h RegUnLoadKeyW"+foreign import WINDOWS_CCONV unsafe "windows.h RegUnLoadKeyW" c_RegUnLoadKey :: PKEY -> LPCTSTR -> IO ErrCode
System/Win32/Security.hsc view
@@ -57,6 +57,8 @@ -- import Foreign.C import System.Win32.Types +##include "windows_cconv.h"+ #include <windows.h> -- --------------------------------------------------------------------------@@ -89,14 +91,14 @@ newtype SID = SID SID type PSID = Ptr SID -foreign import stdcall unsafe "windows.h GetSecurityDescriptorControl"+foreign import WINDOWS_CCONV unsafe "windows.h GetSecurityDescriptorControl" c_getSecurityDescriptorControl :: PSECURITY_DESCRIPTOR -- pSecurityDescriptor -> Ptr SECURITY_DESCRIPTOR_CONTROL -- pControl -> LPDWORD -- lpdwRevision -> IO BOOL -foreign import stdcall unsafe "windows.h GetSecurityDescriptorDacl"+foreign import WINDOWS_CCONV unsafe "windows.h GetSecurityDescriptorDacl" c_getSecurityDescriptorDacl :: PSECURITY_DESCRIPTOR -- pSecurityDescriptor -> LPBOOL -- lpbDaclPresent@@ -104,26 +106,26 @@ -> LPBOOL -- lpbDaclDefaulted -> IO BOOL -foreign import stdcall unsafe "windows.h GetSecurityDescriptorGroup"+foreign import WINDOWS_CCONV unsafe "windows.h GetSecurityDescriptorGroup" c_getSecurityDescriptorGroup :: PSECURITY_DESCRIPTOR -- pSecurityDescriptor -> Ptr PSID -- pGroup -> LPBOOL -- lpbGroupDefaulted -> IO BOOL -foreign import stdcall unsafe "windows.h GetSecurityDescriptorLength"+foreign import WINDOWS_CCONV unsafe "windows.h GetSecurityDescriptorLength" c_getSecurityDescriptorLength :: PSECURITY_DESCRIPTOR -- pSecurityDescriptor -> IO DWORD -foreign import stdcall unsafe "windows.h GetSecurityDescriptorOwner"+foreign import WINDOWS_CCONV unsafe "windows.h GetSecurityDescriptorOwner" c_getSecurityDescriptorOwner :: PSECURITY_DESCRIPTOR -- pSecurityDescriptor -> Ptr PSID -- pOwner -> LPBOOL -- lpbOwnerDefaulted -> IO BOOL -foreign import stdcall unsafe "windows.h GetSecurityDescriptorSacl"+foreign import WINDOWS_CCONV unsafe "windows.h GetSecurityDescriptorSacl" c_getSecurityDescriptorSacl :: PSECURITY_DESCRIPTOR -- pSecurityDescriptor -> LPBOOL -- lpbSaclPresent@@ -131,18 +133,18 @@ -> LPBOOL -- lpbSaclDefaulted -> IO BOOL -foreign import stdcall unsafe "windows.h InitializeSecurityDescriptor"+foreign import WINDOWS_CCONV unsafe "windows.h InitializeSecurityDescriptor" c_initializeSecurityDescriptor :: PSECURITY_DESCRIPTOR -- pSecurityDescriptor -> DWORD -- dwRevision -> IO BOOL -foreign import stdcall unsafe "windows.h IsValidSecurityDescriptor"+foreign import WINDOWS_CCONV unsafe "windows.h IsValidSecurityDescriptor" c_isValidSecurityDescriptor :: PSECURITY_DESCRIPTOR -- pSecurityDescriptor -> IO BOOL -foreign import stdcall unsafe "windows.h SetSecurityDescriptorDacl"+foreign import WINDOWS_CCONV unsafe "windows.h SetSecurityDescriptorDacl" c_setSecurityDescriptorDacl :: PSECURITY_DESCRIPTOR -- pSecurityDescriptor -> BOOL -- bDaclPresent@@ -150,21 +152,21 @@ -> BOOL -- bDaclDefaulted -> IO BOOL -foreign import stdcall unsafe "windows.h SetSecurityDescriptorGroup"+foreign import WINDOWS_CCONV unsafe "windows.h SetSecurityDescriptorGroup" c_setSecurityDescriptorGroup :: PSECURITY_DESCRIPTOR -- pSecurityDescriptor -> PSID -- pGroup -> BOOL -- bGroupDefaulted -> IO BOOL -foreign import stdcall unsafe "windows.h SetSecurityDescriptorOwner"+foreign import WINDOWS_CCONV unsafe "windows.h SetSecurityDescriptorOwner" c_setSecurityDescriptorOwner :: PSECURITY_DESCRIPTOR -- pSecurityDescriptor -> PSID -- pOwner -> BOOL -- bOwnerDefaulted -> IO BOOL -foreign import stdcall unsafe "windows.h SetSecurityDescriptorSacl"+foreign import WINDOWS_CCONV unsafe "windows.h SetSecurityDescriptorSacl" c_setSecurityDescriptorSacl :: PSECURITY_DESCRIPTOR -- pSecurityDescriptor -> BOOL -- bSaclPresent@@ -205,7 +207,7 @@ c_GetFileSecurity lpFileName si pSd needed lpnLengthNeeded return (SecurityDescriptor fpSd) -foreign import stdcall unsafe "windows.h GetFileSecurityW"+foreign import WINDOWS_CCONV unsafe "windows.h GetFileSecurityW" c_GetFileSecurity :: LPCWSTR -- lpFileName -> SECURITY_INFORMATION -- RequestedInformation@@ -214,7 +216,7 @@ -> LPDWORD -- lpnLengthNeeded -> IO BOOL ---foreign import stdcall unsafe "windows.h AccessCheck"+--foreign import WINDOWS_CCONV unsafe "windows.h AccessCheck" -- c_AccessCheck -- :: PSECURITY_DESCRIPTOR -- pSecurityDescriptor -- -> HANDLE -- ClientToken@@ -226,7 +228,7 @@ -- -> LPBOOL -- AccessStatus -- -> IO BOOL --- foreign import stdcall unsafe "windows.h OpenThreadToken"+-- foreign import WINDOWS_CCONV unsafe "windows.h OpenThreadToken" -- OpenThreadToken -- :: HANDLE -- ThreadHandle -- -> DWORD -- DesiredAccess
System/Win32/Shell.hsc view
@@ -36,6 +36,8 @@ import Control.Monad import System.IO.Error +##include "windows_cconv.h" + -- for SHGetFolderPath stuff #define _WIN32_IE 0x500 #include <windows.h> @@ -76,6 +78,6 @@ raiseUnsupported loc = ioError (ioeSetErrorString (mkIOError illegalOperationErrorType loc Nothing Nothing) "unsupported operation") -foreign import stdcall unsafe "SHGetFolderPathW" +foreign import WINDOWS_CCONV unsafe "SHGetFolderPathW" c_SHGetFolderPath :: HWND -> CInt -> HANDLE -> DWORD -> LPTSTR -> IO HRESULT
System/Win32/SimpleMAPI.hsc view
@@ -16,6 +16,14 @@ ----------------------------------------------------------------------------- module System.Win32.SimpleMAPI where++-- I am not sure why exactly, but with mingw64 mapi.h does not define+-- some of the values we use, e.g. MAPI_LOGOFF_SHARED.+-- mapix.h does define MAPI_LOGOFF_SHARED, but the various flags+-- clash with each other.+-- So for now we only define the module content on i386.+#if __i386__+ import Control.Exception ( bracket, handle, finally, onException , IOException ) import Control.Monad ( liftM5 )@@ -31,6 +39,8 @@ , c_FreeLibraryFinaliser ) import System.Win32.Types ( DWORD, LPSTR, HMODULE, failIfNull ) +##include "windows_cconv.h"+ #include "windows.h" #include "mapi.h" @@ -109,21 +119,21 @@ mapiFail_ n a = mapiFail n a >> return () type MapiLogonType = ULONG -> LPSTR -> LPSTR -> MapiFlag -> ULONG -> Ptr LHANDLE -> IO ULONG-foreign import stdcall "dynamic" mkMapiLogon :: FunPtr MapiLogonType -> MapiLogonType+foreign import WINDOWS_CCONV "dynamic" mkMapiLogon :: FunPtr MapiLogonType -> MapiLogonType type MapiLogoffType = LHANDLE -> ULONG -> MapiFlag -> ULONG -> IO ULONG-foreign import stdcall "dynamic" mkMapiLogoff :: FunPtr MapiLogoffType -> MapiLogoffType+foreign import WINDOWS_CCONV "dynamic" mkMapiLogoff :: FunPtr MapiLogoffType -> MapiLogoffType type MapiResolveNameType = LHANDLE -> ULONG -> LPSTR -> MapiFlag -> ULONG -> Ptr (Ptr MapiRecipDesc) -> IO ULONG-foreign import stdcall "dynamic" mkMapiResolveName :: FunPtr MapiResolveNameType -> MapiResolveNameType+foreign import WINDOWS_CCONV "dynamic" mkMapiResolveName :: FunPtr MapiResolveNameType -> MapiResolveNameType type MapiFreeBufferType = Ptr () -> IO ULONG-foreign import stdcall "dynamic" mkMapiFreeBuffer :: FunPtr MapiFreeBufferType -> MapiFreeBufferType+foreign import WINDOWS_CCONV "dynamic" mkMapiFreeBuffer :: FunPtr MapiFreeBufferType -> MapiFreeBufferType type MapiSendMailType = LHANDLE -> ULONG -> Ptr Message -> MapiFlag -> ULONG -> IO ULONG-foreign import stdcall "dynamic" mkMapiSendMail :: FunPtr MapiSendMailType -> MapiSendMailType+foreign import WINDOWS_CCONV "dynamic" mkMapiSendMail :: FunPtr MapiSendMailType -> MapiSendMailType data MapiFuncs = MapiFuncs { mapifLogon :: MapiLogonType@@ -398,3 +408,4 @@ handleIOException :: (IOException -> IO a) -> IO a -> IO a handleIOException = handle +#endif
System/Win32/Time.hsc view
@@ -29,6 +29,8 @@ import Foreign.C ( CInt(..), CWchar(..) , peekCWString, withCWStringLen, withCWString ) +##include "windows_cconv.h"+ #include "windows.h" ----------------------------------------------------------------@@ -121,40 +123,40 @@ dnam <- peekCWString (plusPtr buf (#offset TIME_ZONE_INFORMATION, DaylightName)) return $ TIME_ZONE_INFORMATION bias snam sdat sbia dnam ddat dbia -foreign import stdcall "windows.h GetSystemTime"+foreign import WINDOWS_CCONV "windows.h GetSystemTime" c_GetSystemTime :: Ptr SYSTEMTIME -> IO () getSystemTime :: IO SYSTEMTIME getSystemTime = alloca $ \res -> do c_GetSystemTime res peek res -foreign import stdcall "windows.h SetSystemTime"+foreign import WINDOWS_CCONV "windows.h SetSystemTime" c_SetSystemTime :: Ptr SYSTEMTIME -> IO BOOL setSystemTime :: SYSTEMTIME -> IO () setSystemTime st = with st $ \st -> failIf_ not "setSystemTime: SetSystemTime" $ c_SetSystemTime st -foreign import stdcall "windows.h GetSystemTimeAsFileTime"+foreign import WINDOWS_CCONV "windows.h GetSystemTimeAsFileTime" c_GetSystemTimeAsFileTime :: Ptr FILETIME -> IO () getSystemTimeAsFileTime :: IO FILETIME getSystemTimeAsFileTime = alloca $ \ret -> do c_GetSystemTimeAsFileTime ret peek ret -foreign import stdcall "windows.h GetLocalTime"+foreign import WINDOWS_CCONV "windows.h GetLocalTime" c_GetLocalTime :: Ptr SYSTEMTIME -> IO () getLocalTime :: IO SYSTEMTIME getLocalTime = alloca $ \res -> do c_GetLocalTime res peek res -foreign import stdcall "windows.h SetLocalTime"+foreign import WINDOWS_CCONV "windows.h SetLocalTime" c_SetLocalTime :: Ptr SYSTEMTIME -> IO BOOL setLocalTime :: SYSTEMTIME -> IO () setLocalTime st = with st $ \st -> failIf_ not "setLocalTime: SetLocalTime" $ c_SetLocalTime st -foreign import stdcall "windows.h GetSystemTimeAdjustment"+foreign import WINDOWS_CCONV "windows.h GetSystemTimeAdjustment" c_GetSystemTimeAdjustment :: Ptr DWORD -> Ptr DWORD -> Ptr BOOL -> IO BOOL getSystemTimeAdjustment :: IO (Maybe (Int, Int)) getSystemTimeAdjustment = alloca $ \ta -> alloca $ \ti -> alloca $ \enabled -> do@@ -168,9 +170,9 @@ return $ Just (fromIntegral ta, fromIntegral ti) else return Nothing -foreign import stdcall "windows.h GetTickCount" getTickCount :: IO DWORD+foreign import WINDOWS_CCONV "windows.h GetTickCount" getTickCount :: IO DWORD -foreign import stdcall "windows.h SetSystemTimeAdjustment"+foreign import WINDOWS_CCONV "windows.h SetSystemTimeAdjustment" c_SetSystemTimeAdjustment :: DWORD -> BOOL -> IO BOOL setSystemTimeAdjustment :: Maybe Int -> IO () setSystemTimeAdjustment ta =@@ -181,7 +183,7 @@ Nothing -> (0,True) Just x -> (fromIntegral x,False) -foreign import stdcall "windows.h GetTimeZoneInformation"+foreign import WINDOWS_CCONV "windows.h GetTimeZoneInformation" c_GetTimeZoneInformation :: Ptr TIME_ZONE_INFORMATION -> IO DWORD getTimeZoneInformation :: IO (TimeZoneId, TIME_ZONE_INFORMATION) getTimeZoneInformation = alloca $ \tzi -> do@@ -194,7 +196,7 @@ (#const TIME_ZONE_ID_DAYLIGHT) -> TzIdDaylight _ -> TzIdUnknown -- to remove warning -foreign import stdcall "windows.h SystemTimeToFileTime"+foreign import WINDOWS_CCONV "windows.h SystemTimeToFileTime" c_SystemTimeToFileTime :: Ptr SYSTEMTIME -> Ptr FILETIME -> IO BOOL systemTimeToFileTime :: SYSTEMTIME -> IO FILETIME systemTimeToFileTime s = with s $ \s -> alloca $ \ret -> do@@ -202,7 +204,7 @@ c_SystemTimeToFileTime s ret peek ret -foreign import stdcall "windows.h FileTimeToSystemTime"+foreign import WINDOWS_CCONV "windows.h FileTimeToSystemTime" c_FileTimeToSystemTime :: Ptr FILETIME -> Ptr SYSTEMTIME -> IO BOOL fileTimeToSystemTime :: FILETIME -> IO SYSTEMTIME fileTimeToSystemTime s = with s $ \s -> alloca $ \ret -> do@@ -210,20 +212,20 @@ c_FileTimeToSystemTime s ret peek ret -foreign import stdcall "windows.h GetFileTime"+foreign import WINDOWS_CCONV "windows.h GetFileTime" c_GetFileTime :: HANDLE -> Ptr FILETIME -> Ptr FILETIME -> Ptr FILETIME -> IO BOOL getFileTime :: HANDLE -> IO (FILETIME,FILETIME,FILETIME) getFileTime h = alloca $ \crt -> alloca $ \acc -> alloca $ \wrt -> do failIf_ not "getFileTime: GetFileTime" $ c_GetFileTime h crt acc wrt liftM3 (,,) (peek crt) (peek acc) (peek wrt) -foreign import stdcall "windows.h SetFileTime"+foreign import WINDOWS_CCONV "windows.h SetFileTime" c_SetFileTime :: HANDLE -> Ptr FILETIME -> Ptr FILETIME -> Ptr FILETIME -> IO BOOL setFileTime :: HANDLE -> FILETIME -> FILETIME -> FILETIME -> IO () setFileTime h crt acc wrt = with crt $ \crt -> with acc $ \acc -> with wrt $ \wrt -> do failIf_ not "setFileTime: SetFileTime" $ c_SetFileTime h crt acc wrt -foreign import stdcall "windows.h FileTimeToLocalFileTime"+foreign import WINDOWS_CCONV "windows.h FileTimeToLocalFileTime" c_FileTimeToLocalFileTime :: Ptr FILETIME -> Ptr FILETIME -> IO BOOL fileTimeToLocalFileTime :: FILETIME -> IO FILETIME fileTimeToLocalFileTime ft = with ft $ \ft -> alloca $ \res -> do@@ -231,7 +233,7 @@ $ c_FileTimeToLocalFileTime ft res peek res -foreign import stdcall "windows.h LocalFileTimeToFileTime"+foreign import WINDOWS_CCONV "windows.h LocalFileTimeToFileTime" c_LocalFileTimeToFileTime :: Ptr FILETIME -> Ptr FILETIME -> IO BOOL localFileTimeToFileTime :: FILETIME -> IO FILETIME localFileTimeToFileTime ft = with ft $ \ft -> alloca $ \res -> do@@ -241,7 +243,7 @@ {- -- Windows XP SP1-foreign import stdcall "windows.h GetSystemTimes"+foreign import WINDOWS_CCONV "windows.h GetSystemTimes" c_GetSystemTimes :: Ptr FILETIME -> Ptr FILETIME -> Ptr FILETIME -> IO BOOL getSystemTimes :: IO (FILETIME,FILETIME,FILETIME) getSystemTimes = alloca $ \idle -> alloca $ \kernel -> alloca $ \user -> do@@ -251,7 +253,7 @@ {- -- Windows XP-foreign import stdcall "windows.h SystemTimeToTzSpecificLocalTime"+foreign import WINDOWS_CCONV "windows.h SystemTimeToTzSpecificLocalTime" c_SystemTimeToTzSpecificLocalTime :: Ptr TIME_ZONE_INFORMATION -> Ptr SYSTEMTIME -> Ptr SYSTEMTIME -> IO BOOL systemTimeToTzSpecificLocalTime :: TIME_ZONE_INFORMATION -> SYSTEMTIME -> IO SYSTEMTIME systemTimeToTzSpecificLocalTime tzi st = with tzi $ \tzi -> with st $ \st -> alloca $ \res -> do@@ -259,7 +261,7 @@ c_SystemTimeToTzSpecificLocalTime tzi st res peek res -foreign import stdcall "windows.h TzSpecificLocalTimeToSystemTime"+foreign import WINDOWS_CCONV "windows.h TzSpecificLocalTimeToSystemTime" c_TzSpecificLocalTimeToSystemTime :: Ptr TIME_ZONE_INFORMATION -> Ptr SYSTEMTIME -> Ptr SYSTEMTIME -> IO BOOL tzSpecificLocalTimeToSystemTime :: TIME_ZONE_INFORMATION -> SYSTEMTIME -> IO SYSTEMTIME tzSpecificLocalTimeToSystemTime tzi st = with tzi $ \tzi -> with st $ \st -> alloca $ \res -> do@@ -268,7 +270,7 @@ peek res -} -foreign import stdcall "windows.h QueryPerformanceFrequency"+foreign import WINDOWS_CCONV "windows.h QueryPerformanceFrequency" c_QueryPerformanceFrequency :: Ptr LARGE_INTEGER -> IO BOOL queryPerformanceFrequency :: IO Integer queryPerformanceFrequency = alloca $ \res -> do@@ -276,7 +278,7 @@ c_QueryPerformanceFrequency res liftM fromIntegral $ peek res -foreign import stdcall "windows.h QueryPerformanceCounter"+foreign import WINDOWS_CCONV "windows.h QueryPerformanceCounter" c_QueryPerformanceCounter:: Ptr LARGE_INTEGER -> IO BOOL queryPerformanceCounter:: IO Integer queryPerformanceCounter= alloca $ \res -> do@@ -294,7 +296,7 @@ , tIME_FORCE24HOURFORMAT= TIME_FORCE24HOURFORMAT } -foreign import stdcall "windows.h GetTimeFormatW"+foreign import WINDOWS_CCONV "windows.h GetTimeFormatW" c_GetTimeFormat :: LCID -> GetTimeFormatFlags -> Ptr SYSTEMTIME -> LPCTSTR -> LPTSTR -> CInt -> IO CInt getTimeFormat :: LCID -> GetTimeFormatFlags -> SYSTEMTIME -> String -> IO String getTimeFormat locale flags st fmt =
System/Win32/Types.hs view
@@ -29,6 +29,8 @@ import Data.Char import Numeric (showHex) +#include "windows_cconv.h"+ ---------------------------------------------------------------- -- Platform specific definitions --@@ -49,6 +51,8 @@ type FLOAT = Float type LARGE_INTEGER = Int64 +type UINT_PTR = Word+ -- Not really a basic type, but used in many places type DDWORD = Word64 @@ -141,8 +145,8 @@ newForeignHANDLE :: HANDLE -> IO ForeignHANDLE newForeignHANDLE = newForeignPtr deleteObjectFinaliser -handleToWord :: HANDLE -> UINT-handleToWord = castPtrToUINT+handleToWord :: HANDLE -> UINT_PTR+handleToWord = castPtrToUINTPtr type HKEY = ForeignHANDLE type PKEY = HANDLE@@ -162,7 +166,7 @@ nullFinalHANDLE = unsafePerformIO (newForeignPtr_ nullPtr) iNVALID_HANDLE_VALUE :: HANDLE-iNVALID_HANDLE_VALUE = castUINTToPtr 0xffffffff+iNVALID_HANDLE_VALUE = castUINTPtrToPtr (-1) ---------------------------------------------------------------- -- Errors@@ -248,10 +252,10 @@ foreign import ccall "HsWin32.h &DeleteObjectFinaliser" deleteObjectFinaliser :: FunPtr (Ptr a -> IO ()) -foreign import stdcall unsafe "windows.h LocalFree"+foreign import WINDOWS_CCONV unsafe "windows.h LocalFree" localFree :: Ptr a -> IO (Ptr a) -foreign import stdcall unsafe "windows.h GetLastError"+foreign import WINDOWS_CCONV unsafe "windows.h GetLastError" getLastError :: IO ErrCode {-# CFILES cbits/errors.c #-}@@ -268,13 +272,10 @@ hIWORD :: DWORD -> WORD foreign import ccall unsafe "HsWin32.h"- castUINTToPtr :: UINT -> Ptr a--foreign import ccall unsafe "HsWin32.h"- castPtrToUINT :: Ptr s -> UINT+ castUINTPtrToPtr :: UINT_PTR -> Ptr a foreign import ccall unsafe "HsWin32.h"- castFunPtrToLONG :: FunPtr a -> LONG+ castPtrToUINTPtr :: Ptr s -> UINT_PTR type LCID = DWORD
Win32.cabal view
@@ -1,5 +1,5 @@ name: Win32-version: 2.2.2.0+version: 2.3.0.0 license: BSD3 license-file: LICENSE author: Alastair Reid@@ -14,7 +14,7 @@ cabal-version: >=1.6 extra-source-files: include/diatemp.h include/dumpBMP.h include/ellipse.h include/errors.h- include/gettime.h include/Win32Aux.h include/win32debug.h+ include/Win32Aux.h include/win32debug.h include/windows_cconv.h Library build-depends: base >= 3 && < 5, bytestring
cbits/WndProc.c view
@@ -71,7 +71,7 @@ LRESULT lr; if (hwnd) {- LONG wndprocptr = GetWindowLong(hwnd,GWL_USERDATA);+ LONG_PTR wndprocptr = GetWindowLongPtr(hwnd,GWLP_USERDATA); if (wndprocptr) { lr = ((LRESULT (*)(HWND,UINT,WPARAM,LPARAM))(wndprocptr))(hwnd,msg,wParam,lParam); #if 0
cbits/dumpBMP.c view
@@ -38,7 +38,6 @@ { HANDLE hFile; HBITMAP hTmpBmp, hBmpOld;- BOOL bSuccess; BITMAPFILEHEADER bfh; LPBITMAPINFO pbmi; PBYTE pBits;@@ -48,7 +47,6 @@ DWORD dwBytesWritten; - bSuccess = TRUE; #if 0 if (ghPal) { SelectPalette(hDC, ghPal, FALSE);@@ -112,7 +110,6 @@ // if ((pbmi = (LPBITMAPINFO)GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT, sizBMI )) == NULL) { fprintf(stderr, "Failed in Memory Allocation for pbmi!");- bSuccess = FALSE; goto ErrExit1; } //@@ -153,7 +150,6 @@ // if (WriteFile(hFile, (LPCVOID)&bfh, sizeof(BITMAPFILEHEADER), &dwBytesWritten, NULL) == -1) { fprintf(stderr, "Failed in WriteFile!");- bSuccess = FALSE; goto ErrExit3; } @@ -167,12 +163,10 @@ hBmpOld = SelectObject(hDC, hTmpBmp); if ((GetDIBits(hDC, hBmp, 0, pbmi->bmiHeader.biHeight, (LPSTR)pBits, pbmi, DIB_RGB_COLORS))==0){ fprintf(stderr, "Failed in GetDIBits!");- bSuccess = FALSE; goto ErrExit4; } } else { fprintf(stderr, "Failed in creating bitmap!");- bSuccess = FALSE; goto ErrExit3; } @@ -181,7 +175,6 @@ // if (WriteFile(hFile, (LPCVOID)pbmi, sizBMI, &dwBytesWritten, NULL) == -1) { fprintf(stderr, "Failed in WriteFile!");- bSuccess = FALSE; goto ErrExit4; } @@ -190,7 +183,6 @@ // if (WriteFile(hFile, (LPCVOID)pBits, pbmi->bmiHeader.biSizeImage, &dwBytesWritten, NULL) == -1) { fprintf(stderr, "Failed in WriteFile!");- bSuccess = FALSE; goto ErrExit4; }
include/HsWin32.h view
@@ -12,9 +12,8 @@ # endif #endif -INLINE UINT castPtrToUINT(void *p) { return (UINT)p; }-INLINE void *castUINTToPtr(UINT n) { return (void *)n; }-INLINE LONG castFunPtrToLONG(void *p) { return (LONG)p; }+INLINE UINT_PTR castPtrToUINTPtr(void *p) { return (UINT_PTR)p; }+INLINE void *castUINTPtrToPtr(UINT_PTR n) { return (void *)n; } INLINE WORD hIWORD(DWORD w) { return HIWORD(w); } INLINE WORD lOWORD(DWORD w) { return LOWORD(w); }
− include/gettime.h
@@ -1,5 +0,0 @@-#include <windows.h>--/* Prototype missing from Cygwin B20.1 */--extern DWORD WINAPI timeGetTime();
+ include/windows_cconv.h view
@@ -0,0 +1,13 @@+#ifndef __WINDOWS_CCONV_H+#define __WINDOWS_CCONV_H++#if defined(i386_HOST_ARCH)+# define WINDOWS_CCONV stdcall+#elif defined(x86_64_HOST_ARCH)+# define WINDOWS_CCONV ccall+#else+# error Unknown mingw32 arch+#endif++#endif+