    {-# INCLUDE <windows.h> #-}
    {-# LINE 1 "Graphics\Win32\GDI\Pen.hsc" #-}
    -----------------------------------------------------------------------------
    {-# LINE 2 "Graphics\Win32\GDI\Pen.hsc" #-}
    -- |
    -- Module      :  Graphics.Win32.GDI.Pen
    -- Copyright   :  (c) Alastair Reid, 1997-2003
    -- License     :  BSD-style (see the file libraries/base/LICENSE)
    --
    -- Maintainer  :  Esa Ilari Vuokko <ei@vuokko.info>
    -- Stability   :  provisional
    -- Portability :  portable
    --
    -- A collection of FFI declarations for interfacing with Win32.
    --
    -----------------------------------------------------------------------------

    module Graphics.Win32.GDI.Pen where

    import System.Win32.Types
    import Graphics.Win32.GDI.Types

    {-# LINE 21 "Graphics\Win32\GDI\Pen.hsc" #-}

    ----------------------------------------------------------------
    -- Stock Objects
    ----------------------------------------------------------------

    type StockPen   = INT

    wHITE_PEN     :: StockPen
    wHITE_PEN     =  6
    bLACK_PEN     :: StockPen
    bLACK_PEN     =  7
    nULL_PEN      :: StockPen
    nULL_PEN      =  8

    {-# LINE 33 "Graphics\Win32\GDI\Pen.hsc" #-}

    getStockPen :: StockPen -> IO HPEN
    getStockPen stockpen =
      failIfNull "GetStockPen" $ c_GetStockPen stockpen
    foreign import stdcall 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"
      c_DeletePen :: HPEN -> IO Bool

    ----------------------------------------------------------------
    -- Creating pens
    ----------------------------------------------------------------

    type PenStyle   = INT

    pS_SOLID              :: PenStyle
    pS_SOLID              =  0
    pS_DASH               :: PenStyle
    pS_DASH               =  1
    pS_DOT                :: PenStyle
    pS_DOT                =  2
    pS_DASHDOT            :: PenStyle
    pS_DASHDOT            =  3
    pS_DASHDOTDOT         :: PenStyle
    pS_DASHDOTDOT         =  4
    pS_NULL               :: PenStyle
    pS_NULL               =  5
    pS_INSIDEFRAME        :: PenStyle
    pS_INSIDEFRAME        =  6
    pS_USERSTYLE          :: PenStyle
    pS_USERSTYLE          =  7
    pS_ALTERNATE          :: PenStyle
    pS_ALTERNATE          =  8
    pS_STYLE_MASK         :: PenStyle
    pS_STYLE_MASK         =  15

    {-# LINE 64 "Graphics\Win32\GDI\Pen.hsc" #-}

    pS_ENDCAP_ROUND       :: PenStyle
    pS_ENDCAP_ROUND       =  0
    pS_ENDCAP_SQUARE      :: PenStyle
    pS_ENDCAP_SQUARE      =  256
    pS_ENDCAP_FLAT        :: PenStyle
    pS_ENDCAP_FLAT        =  512
    pS_ENDCAP_MASK        :: PenStyle
    pS_ENDCAP_MASK        =  3840

    {-# LINE 71 "Graphics\Win32\GDI\Pen.hsc" #-}

    pS_JOIN_ROUND         :: PenStyle
    pS_JOIN_ROUND         =  0
    pS_JOIN_BEVEL         :: PenStyle
    pS_JOIN_BEVEL         =  4096
    pS_JOIN_MITER         :: PenStyle
    pS_JOIN_MITER         =  8192

    {-# LINE 77 "Graphics\Win32\GDI\Pen.hsc" #-}
    -- , pS_JOIN_MASK         = PS_JOIN_MASK
    {-
    If PS_JOIN_MASK is not defined with your GNU Windows32 header files,
    you'll have to define it.
    -}

    pS_COSMETIC           :: PenStyle
    pS_COSMETIC           =  0
    pS_GEOMETRIC          :: PenStyle
    pS_GEOMETRIC          =  65536
    pS_TYPE_MASK          :: PenStyle
    pS_TYPE_MASK          =  983040

    {-# LINE 88 "Graphics\Win32\GDI\Pen.hsc" #-}

    createPen :: PenStyle -> INT -> COLORREF -> IO HPEN
    createPen style n color =
      failIfNull "CreatePen" $ c_CreatePen style n color
    foreign import stdcall unsafe "windows.h CreatePen"
      c_CreatePen :: PenStyle -> INT -> COLORREF -> IO HPEN

    -- Not very well supported on Win'95
    -- %fun NullHANDLE ExtCreatePen :: PenStyle -> INT -> LOGBRUSH -> [StyleBit] -> IO HPEN

    -- ToDo: CreatePenIndirect

    ----------------------------------------------------------------
    -- End
    ----------------------------------------------------------------