diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,29 @@
+Copyright (c) <2009>, <Maurício C. Antunes>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the author nor the names of contributors
+    may be used to endorse or promote products derived from this
+    software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,6 @@
+#!/usr/bin/env runhaskell
+
+module Main (main) where
+import Distribution.Simple
+
+main = defaultMain
diff --git a/bindings-directfb.cabal b/bindings-directfb.cabal
new file mode 100644
--- /dev/null
+++ b/bindings-directfb.cabal
@@ -0,0 +1,41 @@
+cabal-version: >= 1.2.3
+name: bindings-directfb
+homepage: http://bitbucket.org/mauricio/bindings-directfb
+synopsis:
+  Low level bindings to DirectFB
+version: 0.0.1
+license: BSD3
+license-file: LICENSE
+maintainer: Maurício C. Antunes <mauricio.antunes@gmail.com>
+author: Maurício C. Antunes
+build-type: Simple
+bug-reports: http://bitbucket.org/mauricio/bindings-directfb/issues
+category: FFI
+stability: Affected by GHC ticket #2615
+library
+  hs-source-dirs: src
+  extensions:
+    ForeignFunctionInterface
+  build-depends:
+    base >=3 && <5,
+    bindings-common >=1 && <2,
+    bindings-posix >=1.2 && <1.3
+  exposed-modules:
+    Bindings.DirectFB
+    Bindings.DirectFB.Types
+    Bindings.DirectFB.IDirectFB
+    Bindings.DirectFB.IDirectFBSurface
+    Bindings.DirectFB.IDirectFBPalette
+    Bindings.DirectFB.IDirectFBInputDevice
+    Bindings.DirectFB.IDirectFBDisplayLayer
+    Bindings.DirectFB.IDirectFBWindow
+    Bindings.DirectFB.IDirectFBEventBuffer
+    Bindings.DirectFB.IDirectFBFont
+    Bindings.DirectFB.IDirectFBImageProvider
+    Bindings.DirectFB.IDirectFBVideoProvider
+    Bindings.DirectFB.IDirectFBDataBuffer
+    Bindings.DirectFB.IDirectFBScreen
+    Bindings.DirectFB.IDirectFBGL
+  pkgconfig-depends:
+    directfb >=1.2.7 && <2
+  c-sources: src/inlines.c
diff --git a/src/Bindings/DirectFB.hs b/src/Bindings/DirectFB.hs
new file mode 100644
--- /dev/null
+++ b/src/Bindings/DirectFB.hs
@@ -0,0 +1,33 @@
+-- | <http://directfb.org>
+
+module Bindings.DirectFB (
+  module Bindings.DirectFB.IDirectFBDataBuffer,
+  module Bindings.DirectFB.IDirectFBDisplayLayer,
+  module Bindings.DirectFB.IDirectFBEventBuffer,
+  module Bindings.DirectFB.IDirectFBFont,
+  module Bindings.DirectFB.IDirectFBGL,
+  module Bindings.DirectFB.IDirectFB,
+  module Bindings.DirectFB.IDirectFBImageProvider,
+  module Bindings.DirectFB.IDirectFBInputDevice,
+  module Bindings.DirectFB.IDirectFBPalette,
+  module Bindings.DirectFB.IDirectFBScreen,
+  module Bindings.DirectFB.IDirectFBSurface,
+  module Bindings.DirectFB.IDirectFBVideoProvider,
+  module Bindings.DirectFB.IDirectFBWindow,
+  module Bindings.DirectFB.Types,
+ ) where
+import Prelude ()
+import Bindings.DirectFB.IDirectFBDataBuffer
+import Bindings.DirectFB.IDirectFBDisplayLayer
+import Bindings.DirectFB.IDirectFBEventBuffer
+import Bindings.DirectFB.IDirectFBFont
+import Bindings.DirectFB.IDirectFBGL
+import Bindings.DirectFB.IDirectFB
+import Bindings.DirectFB.IDirectFBImageProvider
+import Bindings.DirectFB.IDirectFBInputDevice
+import Bindings.DirectFB.IDirectFBPalette
+import Bindings.DirectFB.IDirectFBScreen
+import Bindings.DirectFB.IDirectFBSurface
+import Bindings.DirectFB.IDirectFBVideoProvider
+import Bindings.DirectFB.IDirectFBWindow
+import Bindings.DirectFB.Types
diff --git a/src/Bindings/DirectFB/IDirectFB.hsc b/src/Bindings/DirectFB/IDirectFB.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/DirectFB/IDirectFB.hsc
@@ -0,0 +1,79 @@
+#include <bindings.macros.h>
+#include <directfb.h>
+
+-- | <http://directfb.org/docs/DirectFB_Reference_1_4/IDirectFB.html>
+
+module Bindings.DirectFB.IDirectFB where
+#strict_import
+import Bindings.Posix.Sys.Select
+import Bindings.DirectFB.Types
+import Bindings.DirectFB.IDirectFBImageProvider
+import Bindings.DirectFB.IDirectFBFont
+import Bindings.DirectFB.IDirectFBEventBuffer
+import Bindings.DirectFB.IDirectFBInputDevice
+import Bindings.DirectFB.IDirectFBDisplayLayer
+import Bindings.DirectFB.IDirectFBDataBuffer
+import Bindings.DirectFB.IDirectFBPalette
+import Bindings.DirectFB.IDirectFBVideoProvider
+import Bindings.DirectFB.IDirectFBSurface
+import Bindings.DirectFB.IDirectFBScreen
+
+#ccall DirectFBCreate , Ptr (Ptr <IDirectFB>) -> IO <DFBResult>
+
+#starttype IDirectFB
+#field SetCooperativeLevel , FunPtr ( Ptr <IDirectFB> -> \
+    <DFBCooperativeLevel> -> IO <DFBResult>)
+#field SetVideoMode , FunPtr ( Ptr <IDirectFB> -> CInt -> \
+    CInt -> CInt -> IO <DFBResult>)
+#field GetDeviceDescription , FunPtr ( Ptr <IDirectFB> -> \
+    Ptr <DFBGraphicsDeviceDescription> -> IO <DFBResult>)
+#field EnumVideoModes , FunPtr ( Ptr <IDirectFB> -> \
+    <DFBVideoModeCallback> -> Ptr () -> IO <DFBResult>)
+#field CreateSurface , FunPtr ( Ptr <IDirectFB> -> \
+    Ptr <DFBSurfaceDescription> -> Ptr (Ptr <IDirectFBSurface>) -> \
+    IO <DFBResult>)
+#field CreatePalette , FunPtr ( Ptr <IDirectFB> -> \
+    Ptr <DFBPaletteDescription> -> Ptr (Ptr <IDirectFBPalette>) -> \
+    IO <DFBResult>)
+-- #field EnumScreens , FunPtr ( Ptr <IDirectFB> -> \
+--     <DFBScreenCallback> -> Ptr () -> IO <DFBResult>)
+#field GetScreen , FunPtr ( Ptr <IDirectFB> -> <DFBScreenID> -> \
+    Ptr (Ptr <IDirectFBScreen>) -> IO <DFBResult>)
+-- #field EnumDisplayLayers , FunPtr ( Ptr <IDirectFB> -> \
+--     <DFBDisplayLayerCallback> -> Ptr () -> IO <DFBResult>)
+#field GetDisplayLayer , FunPtr ( Ptr <IDirectFB> -> \
+    <DFBDisplayLayerID> -> Ptr (Ptr <IDirectFBDisplayLayer>) -> \
+    IO <DFBResult>)
+-- #field EnumInputDevices , FunPtr ( Ptr <IDirectFB> -> \
+--     <DFBInputDeviceCallback> -> Ptr () -> IO <DFBResult>)
+#field GetInputDevice , FunPtr ( Ptr <IDirectFB> -> \
+    <DFBInputDeviceID> -> Ptr (Ptr <IDirectFBInputDevice>) -> \
+    IO <DFBResult>)
+#field CreateEventBuffer , FunPtr ( Ptr <IDirectFB> -> \
+    Ptr (Ptr <IDirectFBEventBuffer>) -> IO <DFBResult>)
+#field CreateInputEventBuffer , FunPtr ( Ptr <IDirectFB> -> \
+    <DFBInputDeviceCapabilities> -> <DFBBoolean> -> \
+    Ptr (Ptr <IDirectFBEventBuffer>) -> IO <DFBResult>)
+#field CreateImageProvider , FunPtr ( Ptr <IDirectFB> -> \
+    CString -> Ptr (Ptr <IDirectFBImageProvider>) -> IO <DFBResult>)
+#field CreateVideoProvider , FunPtr ( Ptr <IDirectFB> -> \
+    CString -> Ptr (Ptr <IDirectFBVideoProvider>) -> IO <DFBResult>)
+#field CreateFont , FunPtr ( Ptr <IDirectFB> -> CString -> \
+    Ptr <DFBFontDescription> -> Ptr (Ptr <IDirectFBFont>) -> \
+    IO <DFBResult>)
+#field CreateDataBuffer , FunPtr ( Ptr <IDirectFB> -> \
+    Ptr <DFBDataBufferDescription> -> \
+    Ptr (Ptr <IDirectFBDataBuffer>) -> IO <DFBResult>)
+#field SetClipboardData , FunPtr ( Ptr <IDirectFB> -> CString -> \
+    Ptr () -> CUInt -> Ptr <timeval> -> IO <DFBResult>)
+#field GetClipboardData , FunPtr ( Ptr <IDirectFB> -> Ptr CString -> \
+    Ptr (Ptr ()) -> Ptr CUInt -> IO <DFBResult>)
+#field GetClipboardTimeStamp , FunPtr ( Ptr <IDirectFB> -> \
+    Ptr <timeval> -> IO <DFBResult>)
+#field Suspend , FunPtr ( Ptr <IDirectFB> -> IO <DFBResult>)
+#field Resume , FunPtr ( Ptr <IDirectFB> -> IO <DFBResult>)
+#field WaitIdle , FunPtr ( Ptr <IDirectFB> -> IO <DFBResult>)
+#field WaitForSync , FunPtr ( Ptr <IDirectFB> -> IO <DFBResult>)
+#field GetInterface , FunPtr ( Ptr <IDirectFB> -> CString -> \
+    CString -> Ptr () -> Ptr (Ptr ()) -> IO <DFBResult>)
+#stoptype
diff --git a/src/Bindings/DirectFB/IDirectFBDataBuffer.hsc b/src/Bindings/DirectFB/IDirectFBDataBuffer.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/DirectFB/IDirectFBDataBuffer.hsc
@@ -0,0 +1,36 @@
+#include <bindings.macros.h>
+#include <directfb.h>
+
+-- | <http://directfb.org/docs/DirectFB_Reference_1_4/IDirectFBDataBuffer.html>
+
+module Bindings.DirectFB.IDirectFBDataBuffer where
+#strict_import
+import Bindings.DirectFB.Types
+import Bindings.DirectFB.IDirectFBImageProvider
+import Bindings.DirectFB.IDirectFBVideoProvider
+
+#starttype IDirectFBDataBuffer
+#field Flush , FunPtr (Ptr <IDirectFBDataBuffer> -> IO <DFBResult>)
+#field Finish , FunPtr (Ptr <IDirectFBDataBuffer> -> IO <DFBResult>)
+#field SeekTo , FunPtr (Ptr <IDirectFBDataBuffer> -> \
+    CInt -> IO <DFBResult>)
+#field GetPosition , FunPtr (Ptr <IDirectFBDataBuffer> -> \
+    Ptr CInt -> IO <DFBResult>)
+#field GetLength , FunPtr (Ptr <IDirectFBDataBuffer> -> \
+    Ptr CInt -> IO <DFBResult>)
+#field WaitForData , FunPtr (Ptr <IDirectFBDataBuffer> -> \
+    CInt -> IO <DFBResult>)
+#field WaitForDataWithTimeout , FunPtr (Ptr <IDirectFBDataBuffer> -> \
+    CInt -> CInt -> CInt -> IO <DFBResult>)
+#field GetData , FunPtr (Ptr <IDirectFBDataBuffer> -> CInt -> Ptr () -> \
+    Ptr CInt -> IO <DFBResult>)
+#field PeekData , FunPtr (Ptr <IDirectFBDataBuffer> -> CInt -> CInt -> \
+    Ptr () -> Ptr CInt -> IO <DFBResult>)
+#field HasData , FunPtr (Ptr <IDirectFBDataBuffer> -> IO <DFBResult>)
+#field PutData , FunPtr (Ptr <IDirectFBDataBuffer> -> Ptr () -> \
+    CInt -> IO <DFBResult>)
+#field CreateImageProvider , FunPtr (Ptr <IDirectFBDataBuffer> -> \
+    Ptr (Ptr <IDirectFBImageProvider>) -> IO <DFBResult>)
+#field CreateVideoProvider , FunPtr (Ptr <IDirectFBDataBuffer> -> \
+    Ptr (Ptr <IDirectFBVideoProvider>) -> IO <DFBResult>)
+#stoptype
diff --git a/src/Bindings/DirectFB/IDirectFBDisplayLayer.hsc b/src/Bindings/DirectFB/IDirectFBDisplayLayer.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/DirectFB/IDirectFBDisplayLayer.hsc
@@ -0,0 +1,92 @@
+#include <bindings.macros.h>
+#include <directfb.h>
+
+-- | <http://directfb.org/docs/DirectFB_Reference_1_4/IDirectFBDisplayLayer.html>
+
+module Bindings.DirectFB.IDirectFBDisplayLayer where
+#strict_import
+import Bindings.DirectFB.Types
+import Bindings.DirectFB.IDirectFBSurface
+import Bindings.DirectFB.IDirectFBWindow
+import Bindings.DirectFB.IDirectFBScreen
+
+#starttype IDirectFBDisplayLayer
+#field GetID , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    Ptr <DFBDisplayLayerID> -> IO <DFBResult>)
+#field GetDescription , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    Ptr <DFBDisplayLayerDescription> -> IO <DFBResult>)
+#field GetSourceDescriptions , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    Ptr <DFBDisplayLayerSourceDescription> -> IO <DFBResult>)
+#field GetCurrentOutputField , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    Ptr CInt -> IO <DFBResult>)
+#field GetSurface , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    Ptr (Ptr <IDirectFBSurface>) -> IO <DFBResult>)
+#field GetScreen , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    Ptr (Ptr <IDirectFBScreen>) -> IO <DFBResult>)
+#field SetCooperativeLevel , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    <DFBDisplayLayerCooperativeLevel> -> IO <DFBResult>)
+#field GetConfiguration , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    Ptr <DFBDisplayLayerConfig> -> IO <DFBResult>)
+#field TestConfiguration , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    Ptr <DFBDisplayLayerConfig> -> \
+    Ptr <DFBDisplayLayerConfigFlags> -> IO <DFBResult>)
+#field SetConfiguration , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    Ptr <DFBDisplayLayerConfig> -> IO <DFBResult>)
+#field SetScreenLocation , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    CFloat -> CFloat -> CFloat -> CFloat -> IO <DFBResult>)
+#field SetScreenPosition , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    CInt -> CInt -> IO <DFBResult>)
+#field SetScreenRectangle , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    CInt -> CInt -> CInt -> CInt -> IO <DFBResult>)
+#field SetOpacity , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    Word8 -> IO <DFBResult>)
+#field SetSourceRectangle , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    CInt -> CInt -> CInt -> CInt -> IO <DFBResult>)
+#field SetFieldParity , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    CInt -> IO <DFBResult>)
+#field SetClipRegions , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    Ptr <DFBRegion> -> CInt -> <DFBBoolean> -> IO <DFBResult>)
+#field SetSrcColorKey , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    Word8 -> Word8 -> Word8 -> IO <DFBResult>)
+#field SetDstColorKey , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    Word8 -> Word8 -> Word8 -> IO <DFBResult>)
+#field GetLevel , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    Ptr CInt -> IO <DFBResult>)
+#field SetLevel , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    CInt -> IO <DFBResult>)
+#field SetBackgroundMode , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    <DFBDisplayLayerBackgroundMode> -> IO <DFBResult>)
+#field SetBackgroundImage , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    Ptr <IDirectFBSurface> -> IO <DFBResult>)
+#field SetBackgroundColor , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    Word8 -> Word8 -> Word8 -> Word8 -> IO <DFBResult>)
+#field GetColorAdjustment , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    Ptr <DFBColorAdjustment> -> IO <DFBResult>)
+#field SetColorAdjustment , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    Ptr <DFBColorAdjustment> -> IO <DFBResult>)
+#field CreateWindow , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    Ptr <DFBWindowDescription> -> Ptr (Ptr <IDirectFBWindow>) -> \
+    IO <DFBResult>)
+#field GetWindow , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    <DFBWindowID> -> Ptr (Ptr <IDirectFBWindow>) -> IO <DFBResult>)
+#field EnableCursor , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    CInt -> IO <DFBResult>)
+#field GetCursorPosition , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    Ptr CInt -> Ptr CInt -> IO <DFBResult>)
+#field WarpCursor , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    CInt -> CInt -> IO <DFBResult>)
+#field SetCursorAcceleration , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    CInt -> CInt -> CInt -> IO <DFBResult>)
+#field SetCursorShape , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    Ptr <IDirectFBSurface> -> CInt -> CInt -> IO <DFBResult>)
+#field SetCursorOpacity , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    Word8 -> IO <DFBResult>)
+#field WaitForSync , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    IO <DFBResult>)
+#field SwitchContext , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    <DFBBoolean> -> IO <DFBResult>)
+#field SetRotation , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+    CInt -> IO <DFBResult>)
+-- #field GetRotation , FunPtr (Ptr <IDirectFBDisplayLayer> -> \
+--     Ptr CInt -> IO <DFBResult>)
+#stoptype
diff --git a/src/Bindings/DirectFB/IDirectFBEventBuffer.hsc b/src/Bindings/DirectFB/IDirectFBEventBuffer.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/DirectFB/IDirectFBEventBuffer.hsc
@@ -0,0 +1,31 @@
+#include <bindings.macros.h>
+#include <directfb.h>
+
+-- | <http://directfb.org/docs/DirectFB_Reference_1_4/IDirectFBEventBuffer.html>
+
+module Bindings.DirectFB.IDirectFBEventBuffer where
+#strict_import
+import Bindings.DirectFB.Types
+
+#starttype IDirectFBEventBuffer
+#field Reset , FunPtr (Ptr <IDirectFBEventBuffer> -> IO <DFBResult>)
+#field WaitForEvent , FunPtr (Ptr <IDirectFBEventBuffer> -> \
+    IO <DFBResult>)
+#field WaitForEventWithTimeout , FunPtr (Ptr <IDirectFBEventBuffer> -> \
+    CUInt -> CUInt -> IO <DFBResult>)
+#field GetEvent , FunPtr (Ptr <IDirectFBEventBuffer> -> \
+    Ptr <DFBEvent> -> IO <DFBResult>)
+#field PeekEvent , FunPtr (Ptr <IDirectFBEventBuffer> -> \
+    Ptr <DFBEvent> -> IO <DFBResult>)
+#field HasEvent , FunPtr (Ptr <IDirectFBEventBuffer> -> \
+    IO <DFBResult>)
+#field PostEvent , FunPtr (Ptr <IDirectFBEventBuffer> -> \
+    Ptr <DFBEvent> -> IO <DFBResult>)
+#field WakeUp , FunPtr (Ptr <IDirectFBEventBuffer> -> IO <DFBResult>)
+#field CreateFileDescriptor , FunPtr (Ptr <IDirectFBEventBuffer> -> \
+    Ptr CInt -> IO <DFBResult>)
+#field EnableStatistics , FunPtr (Ptr <IDirectFBEventBuffer> -> \
+    <DFBBoolean> -> IO <DFBResult>)
+#field GetStatistics , FunPtr (Ptr <IDirectFBEventBuffer> -> \
+    Ptr <DFBEventBufferStats> -> IO <DFBResult>)
+#stoptype
diff --git a/src/Bindings/DirectFB/IDirectFBFont.hsc b/src/Bindings/DirectFB/IDirectFBFont.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/DirectFB/IDirectFBFont.hsc
@@ -0,0 +1,37 @@
+#include <bindings.macros.h>
+#include <directfb.h>
+
+-- | <http://directfb.org/docs/DirectFB_Reference_1_4/IDirectFBFont.html>
+
+module Bindings.DirectFB.IDirectFBFont where
+#strict_import
+import Bindings.DirectFB.Types
+
+#starttype IDirectFBFont
+#field GetAscender , FunPtr (Ptr <IDirectFBFont> -> \
+    Ptr CInt -> IO <DFBResult>)
+#field GetDescender , FunPtr (Ptr <IDirectFBFont> -> \
+    Ptr CInt -> IO <DFBResult>)
+#field GetHeight , FunPtr (Ptr <IDirectFBFont> -> \
+    Ptr CInt -> IO <DFBResult>)
+#field GetMaxAdvance , FunPtr (Ptr <IDirectFBFont> -> \
+    Ptr CInt -> IO <DFBResult>)
+#field GetKerning , FunPtr (Ptr <IDirectFBFont> -> CUInt -> \
+    CUInt -> Ptr CInt -> Ptr CInt -> IO <DFBResult>)
+#field GetStringWidth , FunPtr (Ptr <IDirectFBFont> -> \
+    Ptr CString -> CInt -> Ptr CInt -> IO <DFBResult>)
+#field GetStringExtents , FunPtr (Ptr <IDirectFBFont> -> \
+    Ptr CString -> CInt -> Ptr <DFBRectangle> -> \
+    Ptr <DFBRectangle> -> IO <DFBResult>)
+#field GetGlyphExtents , FunPtr (Ptr <IDirectFBFont> -> CUInt -> \
+    Ptr <DFBRectangle> -> Ptr CInt -> IO <DFBResult>)
+#field GetStringBreak , FunPtr (Ptr <IDirectFBFont> -> \
+    Ptr CString -> CInt -> CInt -> Ptr CInt -> Ptr CInt -> \
+    Ptr CString -> IO <DFBResult>)
+#field SetEncoding , FunPtr (Ptr <IDirectFBFont> -> \
+    <DFBTextEncodingID> -> IO <DFBResult>)
+#field EnumEncodings , FunPtr (Ptr <IDirectFBFont> -> \
+    <DFBTextEncodingCallback> -> Ptr () -> IO <DFBResult>)
+#field FindEncoding , FunPtr (Ptr <IDirectFBFont> -> \
+    Ptr CString -> Ptr <DFBTextEncodingID> -> IO <DFBResult>)
+#stoptype
diff --git a/src/Bindings/DirectFB/IDirectFBGL.hsc b/src/Bindings/DirectFB/IDirectFBGL.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/DirectFB/IDirectFBGL.hsc
@@ -0,0 +1,18 @@
+#include <bindings.macros.h>
+#include <directfb.h>
+#include <directfbgl.h>
+
+-- | <http://directfb.org/docs/DirectFB_Reference_1_4/IDirectFBGL.html>
+
+module Bindings.DirectFB.IDirectFBGL where
+#strict_import
+import Bindings.DirectFB.Types
+
+#starttype IDirectFBGL
+#field Lock , FunPtr ( Ptr <IDirectFBGL> -> IO <DFBResult>)
+#field Unlock , FunPtr ( Ptr <IDirectFBGL> -> IO <DFBResult>)
+#field GetAttributes , FunPtr ( Ptr <IDirectFBGL> -> \
+    <DFBGLAttributes> -> IO <DFBResult>)
+#field GetProcAddress , FunPtr ( Ptr <IDirectFBGL> -> CString -> \
+    Ptr (Ptr ()) -> IO <DFBResult>)
+#stoptype
diff --git a/src/Bindings/DirectFB/IDirectFBImageProvider.hsc b/src/Bindings/DirectFB/IDirectFBImageProvider.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/DirectFB/IDirectFBImageProvider.hsc
@@ -0,0 +1,23 @@
+#include <bindings.macros.h>
+#include <directfb.h>
+
+-- | <http://directfb.org/docs/DirectFB_Reference_1_4/IDirectFBImageProvider.html>
+
+module Bindings.DirectFB.IDirectFBImageProvider where
+#strict_import
+import Bindings.DirectFB.Types
+import Bindings.DirectFB.IDirectFBSurface
+
+#starttype IDirectFBImageProvider
+#field GetSurfaceDescription , FunPtr (Ptr <IDirectFBImageProvider> -> \
+    Ptr <DFBSurfaceDescription> -> IO <DFBResult>)
+#field GetImageDescription , FunPtr (Ptr <IDirectFBImageProvider> -> \
+    Ptr <DFBImageDescription> -> IO <DFBResult>)
+#field RenderTo , FunPtr (Ptr <IDirectFBImageProvider> -> \
+    Ptr <IDirectFBSurface> -> Ptr <DFBRectangle> -> IO <DFBResult>)
+#field SetRenderCallback , FunPtr (Ptr <IDirectFBImageProvider> -> \
+    <DIRenderCallback> -> Ptr () -> IO <DFBResult>)
+#field WriteBack , FunPtr (Ptr <IDirectFBImageProvider> -> \
+    Ptr <IDirectFBSurface> -> Ptr <DFBRectangle> -> \
+    CString -> IO <DFBResult>)
+#stoptype
diff --git a/src/Bindings/DirectFB/IDirectFBInputDevice.hsc b/src/Bindings/DirectFB/IDirectFBInputDevice.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/DirectFB/IDirectFBInputDevice.hsc
@@ -0,0 +1,44 @@
+#include <bindings.macros.h>
+#include <directfb.h>
+
+-- | <http://directfb.org/docs/DirectFB_Reference_1_4/IDirectFBInputDevice.html>
+
+module Bindings.DirectFB.IDirectFBInputDevice where
+#strict_import
+import Bindings.DirectFB.Types
+import Bindings.DirectFB.IDirectFBEventBuffer
+
+#starttype IDirectFBInputDevice
+#field GetID , FunPtr (Ptr <IDirectFBInputDevice> -> \
+    Ptr <DFBInputDeviceID> -> IO <DFBResult>)
+#field GetDescription , FunPtr (Ptr <IDirectFBInputDevice> -> \
+    Ptr <DFBInputDeviceDescription> -> IO <DFBResult>)
+#field GetKeymapEntry , FunPtr (Ptr <IDirectFBInputDevice> -> \
+    CInt -> Ptr <DFBInputDeviceKeymapEntry> -> IO <DFBResult>)
+-- #field SetKeymapEntry , FunPtr (Ptr <IDirectFBInputDevice> -> \
+--     CInt -> Ptr <DFBInputDeviceKeymapEntry> -> IO <DFBResult>)
+-- #field LoadKeymap , FunPtr (Ptr <IDirectFBInputDevice> -> \
+--     CString -> IO <DFBResult>)
+#field CreateEventBuffer , FunPtr (Ptr <IDirectFBInputDevice> -> \
+    Ptr (Ptr <IDirectFBEventBuffer>) -> IO <DFBResult>)
+#field AttachEventBuffer , FunPtr (Ptr <IDirectFBInputDevice> -> \
+    Ptr <IDirectFBEventBuffer> -> IO <DFBResult>)
+#field DetachEventBuffer , FunPtr (Ptr <IDirectFBInputDevice> -> \
+    Ptr <IDirectFBEventBuffer> -> IO <DFBResult>)
+#field GetKeyState , FunPtr (Ptr <IDirectFBInputDevice> -> \
+    <DFBInputDeviceKeyIdentifier> -> \
+    Ptr <DFBInputDeviceKeyState> -> IO <DFBResult>)
+#field GetModifiers , FunPtr (Ptr <IDirectFBInputDevice> -> \
+    Ptr <DFBInputDeviceModifierMask> -> IO <DFBResult>)
+#field GetLockState , FunPtr (Ptr <IDirectFBInputDevice> -> \
+    Ptr <DFBInputDeviceLockState> -> IO <DFBResult>)
+#field GetButtons , FunPtr (Ptr <IDirectFBInputDevice> -> \
+    Ptr <DFBInputDeviceButtonMask> -> IO <DFBResult>)
+#field GetButtonState , FunPtr (Ptr <IDirectFBInputDevice> -> \
+    <DFBInputDeviceButtonIdentifier> -> \
+    Ptr <DFBInputDeviceButtonState> -> IO <DFBResult>)
+#field GetAxis , FunPtr (Ptr <IDirectFBInputDevice> -> \
+    <DFBInputDeviceAxisIdentifier> -> Ptr CInt -> IO <DFBResult>)
+#field GetXY , FunPtr (Ptr <IDirectFBInputDevice> -> Ptr CInt -> \
+    Ptr CInt -> IO <DFBResult>)
+#stoptype
diff --git a/src/Bindings/DirectFB/IDirectFBPalette.hsc b/src/Bindings/DirectFB/IDirectFBPalette.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/DirectFB/IDirectFBPalette.hsc
@@ -0,0 +1,29 @@
+#include <bindings.macros.h>
+#include <directfb.h>
+
+-- | <http://directfb.org/docs/DirectFB_Reference_1_4/IDirectFBPalette.html>
+
+module Bindings.DirectFB.IDirectFBPalette where
+#strict_import
+import Bindings.DirectFB.Types
+
+#starttype IDirectFBPalette
+#field GetCapabilities , FunPtr (Ptr <IDirectFBPalette> -> \
+    Ptr <DFBPaletteCapabilities> -> IO <DFBResult>)
+#field GetSize , FunPtr (Ptr <IDirectFBPalette> -> \
+    Ptr CUInt -> IO <DFBResult>)
+#field SetEntries , FunPtr (Ptr <IDirectFBPalette> -> \
+    Ptr <DFBColor> -> CUInt -> CUInt -> IO <DFBResult>)
+#field GetEntries , FunPtr (Ptr <IDirectFBPalette> -> \
+    Ptr <DFBColor> -> CUInt -> CUInt -> IO <DFBResult>)
+#field FindBestMatch , FunPtr (Ptr <IDirectFBPalette> -> Word8 -> \
+    Word8 -> Word8 -> Word8 -> Ptr CUInt -> IO <DFBResult>)
+#field CreateCopy , FunPtr (Ptr <IDirectFBPalette> -> \
+    Ptr (Ptr <IDirectFBPalette>) -> IO <DFBResult>)
+#field SetEntriesYUV , FunPtr (Ptr <IDirectFBPalette> -> \
+    Ptr <DFBColorYUV> -> CUInt -> CUInt -> IO <DFBResult>)
+#field GetEntriesYUV , FunPtr (Ptr <IDirectFBPalette> -> \
+    Ptr <DFBColorYUV> -> CUInt -> CUInt -> IO <DFBResult>)
+#field FindBestMatchYUV , FunPtr (Ptr <IDirectFBPalette> -> \
+    Word8 -> Word8 -> Word8 -> Word8 -> Ptr CUInt -> IO <DFBResult>)
+#stoptype
diff --git a/src/Bindings/DirectFB/IDirectFBScreen.hsc b/src/Bindings/DirectFB/IDirectFBScreen.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/DirectFB/IDirectFBScreen.hsc
@@ -0,0 +1,49 @@
+#include <bindings.macros.h>
+#include <directfb.h>
+
+-- | <http://directfb.org/docs/DirectFB_Reference_1_4/IDirectFBScreen.html>
+
+module Bindings.DirectFB.IDirectFBScreen where
+#strict_import
+import Bindings.DirectFB.Types
+
+#starttype IDirectFBScreen
+#field GetID , FunPtr (Ptr <IDirectFBScreen> -> \
+    Ptr <DFBScreenID> -> IO <DFBResult>)
+#field GetDescription , FunPtr (Ptr <IDirectFBScreen> -> \
+    Ptr <DFBScreenDescription> -> IO <DFBResult>)
+#field GetSize , FunPtr (Ptr <IDirectFBScreen> -> Ptr CInt -> \
+    Ptr CInt -> IO <DFBResult>)
+-- #field EnumDisplayLayers , FunPtr (Ptr <IDirectFBScreen> -> \
+--     <DFBDisplayLayerCallback> -> Ptr () -> IO <DFBResult>)
+#field SetPowerMode , FunPtr (Ptr <IDirectFBScreen> -> \
+    <DFBScreenPowerMode> -> IO <DFBResult>)
+#field WaitForSync , FunPtr (Ptr <IDirectFBScreen> -> IO <DFBResult>)
+#field GetMixerDescriptions , FunPtr (Ptr <IDirectFBScreen> -> \
+    Ptr <DFBScreenMixerDescription> -> IO <DFBResult>)
+#field GetMixerConfiguration , FunPtr (Ptr <IDirectFBScreen> -> \
+    CInt -> Ptr <DFBScreenMixerConfig> -> IO <DFBResult>)
+#field TestMixerConfiguration , FunPtr (Ptr <IDirectFBScreen> -> \
+    CInt -> Ptr <DFBScreenMixerConfig> -> \
+    Ptr <DFBScreenMixerConfigFlags> -> IO <DFBResult>)
+#field SetMixerConfiguration , FunPtr (Ptr <IDirectFBScreen> -> \
+    CInt -> Ptr <DFBScreenMixerConfig> -> IO <DFBResult>)
+#field GetEncoderDescriptions , FunPtr (Ptr <IDirectFBScreen> -> \
+    Ptr <DFBScreenEncoderDescription> -> IO <DFBResult>)
+#field GetEncoderConfiguration , FunPtr (Ptr <IDirectFBScreen> -> \
+    CInt -> Ptr <DFBScreenEncoderConfig> -> IO <DFBResult>)
+#field TestEncoderConfiguration , FunPtr (Ptr <IDirectFBScreen> -> \
+    CInt -> Ptr <DFBScreenEncoderConfig> -> \
+    Ptr <DFBScreenEncoderConfigFlags> -> IO <DFBResult>)
+#field SetEncoderConfiguration , FunPtr (Ptr <IDirectFBScreen> -> \
+    CInt -> Ptr <DFBScreenEncoderConfig> -> IO <DFBResult>)
+#field GetOutputDescriptions , FunPtr (Ptr <IDirectFBScreen> -> \
+    Ptr <DFBScreenOutputDescription> -> IO <DFBResult>)
+#field GetOutputConfiguration , FunPtr (Ptr <IDirectFBScreen> -> \
+    CInt -> Ptr <DFBScreenOutputConfig> -> IO <DFBResult>)
+#field TestOutputConfiguration , FunPtr (Ptr <IDirectFBScreen> -> \
+    CInt -> Ptr <DFBScreenOutputConfig> -> \
+    Ptr <DFBScreenOutputConfigFlags> -> IO <DFBResult>)
+#field SetOutputConfiguration , FunPtr (Ptr <IDirectFBScreen> -> \
+    CInt -> Ptr <DFBScreenOutputConfig> -> IO <DFBResult>)
+#stoptype
diff --git a/src/Bindings/DirectFB/IDirectFBSurface.hsc b/src/Bindings/DirectFB/IDirectFBSurface.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/DirectFB/IDirectFBSurface.hsc
@@ -0,0 +1,139 @@
+#include <bindings.macros.h>
+#include <directfb.h>
+
+-- | <http://directfb.org/docs/DirectFB_Reference_1_4/IDirectFBSurface.html>
+
+module Bindings.DirectFB.IDirectFBSurface where
+#strict_import
+import Bindings.DirectFB.Types
+import Bindings.DirectFB.IDirectFBGL
+import Bindings.DirectFB.IDirectFBPalette
+import Bindings.DirectFB.IDirectFBFont
+
+#starttype IDirectFBSurface
+#field GetCapabilities , FunPtr (Ptr <IDirectFBSurface> -> \
+    Ptr <DFBSurfaceCapabilities> -> IO <DFBResult>)
+#field GetPosition , FunPtr (Ptr <IDirectFBSurface> -> \
+    Ptr CInt -> Ptr CInt -> IO <DFBResult>)
+#field GetSize , FunPtr (Ptr <IDirectFBSurface> -> Ptr CInt -> \
+    Ptr CInt -> IO <DFBResult>)
+#field GetVisibleRectangle , FunPtr (Ptr <IDirectFBSurface> -> \
+    Ptr <DFBRectangle> -> IO <DFBResult>)
+#field GetPixelFormat , FunPtr (Ptr <IDirectFBSurface> -> \
+    Ptr <DFBSurfacePixelFormat> -> IO <DFBResult>)
+#field GetAccelerationMask , FunPtr (Ptr <IDirectFBSurface> -> \
+    Ptr <IDirectFBSurface> -> Ptr <DFBAccelerationMask> -> \
+    IO <DFBResult>)
+#field GetPalette , FunPtr (Ptr <IDirectFBSurface> -> \
+    Ptr (Ptr <IDirectFBPalette>) -> IO <DFBResult>)
+#field SetPalette , FunPtr (Ptr <IDirectFBSurface> -> \
+    Ptr <IDirectFBPalette> -> IO <DFBResult>)
+#field SetAlphaRamp , FunPtr (Ptr <IDirectFBSurface> -> Word8 -> \
+    Word8 -> Word8 -> Word8 -> IO <DFBResult>)
+#field Lock , FunPtr (Ptr <IDirectFBSurface> -> \
+    <DFBSurfaceLockFlags> -> Ptr (Ptr ()) -> \
+    Ptr CInt -> IO <DFBResult>)
+#field GetFramebufferOffset , FunPtr (Ptr <IDirectFBSurface> -> \
+    Ptr CInt -> IO <DFBResult>)
+#field Unlock , FunPtr (Ptr <IDirectFBSurface> -> IO <DFBResult>)
+#field Flip , FunPtr (Ptr <IDirectFBSurface> -> Ptr <DFBRegion> -> \
+    <DFBSurfaceFlipFlags> -> IO <DFBResult>)
+#field SetField , FunPtr (Ptr <IDirectFBSurface> -> CInt -> IO <DFBResult>)
+#field Clear , FunPtr (Ptr <IDirectFBSurface> -> Word8 -> \
+    Word8 -> Word8 -> Word8 -> IO <DFBResult>)
+#field SetClip , FunPtr (Ptr <IDirectFBSurface> -> \
+    Ptr <DFBRegion> -> IO <DFBResult>)
+#field GetClip , FunPtr (Ptr <IDirectFBSurface> -> \
+    Ptr <DFBRegion> -> IO <DFBResult>)
+#field SetColor , FunPtr (Ptr <IDirectFBSurface> -> Word8 -> \
+    Word8 -> Word8 -> Word8 -> IO <DFBResult>)
+#field SetColorIndex , FunPtr (Ptr <IDirectFBSurface> -> \
+    CUInt -> IO <DFBResult>)
+#field SetSrcBlendFunction , FunPtr (Ptr <IDirectFBSurface> -> \
+    <DFBSurfaceBlendFunction> -> IO <DFBResult>)
+#field SetDstBlendFunction , FunPtr (Ptr <IDirectFBSurface> -> \
+    <DFBSurfaceBlendFunction> -> IO <DFBResult>)
+#field SetPorterDuff , FunPtr (Ptr <IDirectFBSurface> -> \
+    <DFBSurfacePorterDuffRule> -> IO <DFBResult>)
+#field SetSrcColorKey , FunPtr (Ptr <IDirectFBSurface> -> Word8 -> \
+    Word8 -> Word8 -> IO <DFBResult>)
+#field SetSrcColorKeyIndex , FunPtr (Ptr <IDirectFBSurface> -> \
+    CUInt -> IO <DFBResult>)
+#field SetDstColorKey , FunPtr (Ptr <IDirectFBSurface> -> \
+    Word8 -> Word8 -> Word8 -> IO <DFBResult>)
+#field SetDstColorKeyIndex , FunPtr (Ptr <IDirectFBSurface> -> \
+    CUInt -> IO <DFBResult>)
+#field SetBlittingFlags , FunPtr (Ptr <IDirectFBSurface> -> \
+    <DFBSurfaceBlittingFlags> -> IO <DFBResult>)
+#field Blit , FunPtr (Ptr <IDirectFBSurface> -> \
+    Ptr <IDirectFBSurface> -> Ptr <DFBRectangle> -> CInt -> \
+    CInt -> IO <DFBResult>)
+#field TileBlit , FunPtr (Ptr <IDirectFBSurface> -> \
+    Ptr <IDirectFBSurface> -> Ptr <DFBRectangle> -> CInt -> \
+    CInt -> IO <DFBResult>)
+#field BatchBlit , FunPtr (Ptr <IDirectFBSurface> -> \
+    Ptr <IDirectFBSurface> -> Ptr <DFBRectangle> -> \
+    Ptr <DFBPoint> -> CInt -> IO <DFBResult>)
+#field StretchBlit , FunPtr (Ptr <IDirectFBSurface> -> \
+    Ptr <IDirectFBSurface> -> Ptr <DFBRectangle> -> \
+    Ptr <DFBRectangle> -> IO <DFBResult>)
+#field TextureTriangles , FunPtr (Ptr <IDirectFBSurface> -> \
+    Ptr <IDirectFBSurface> -> Ptr <DFBVertex> -> Ptr CInt -> \
+    CInt -> <DFBTriangleFormation> -> IO <DFBResult>)
+#field SetDrawingFlags , FunPtr (Ptr <IDirectFBSurface> -> \
+    <DFBSurfaceDrawingFlags> -> IO <DFBResult>)
+#field FillRectangle , FunPtr (Ptr <IDirectFBSurface> -> \
+    CInt -> CInt -> CInt -> CInt -> IO <DFBResult>)
+#field DrawRectangle , FunPtr (Ptr <IDirectFBSurface> -> \
+    CInt -> CInt -> CInt -> CInt -> IO <DFBResult>)
+#field DrawLine , FunPtr (Ptr <IDirectFBSurface> -> CInt -> \
+    CInt -> CInt -> CInt -> IO <DFBResult>)
+#field DrawLines , FunPtr (Ptr <IDirectFBSurface> -> \
+    Ptr <DFBRegion> -> CUInt -> IO <DFBResult>)
+#field FillTriangle , FunPtr (Ptr <IDirectFBSurface> -> CInt -> \
+    CInt -> CInt -> CInt -> CInt -> CInt -> IO <DFBResult>)
+#field FillRectangles , FunPtr (Ptr <IDirectFBSurface> -> \
+    Ptr <DFBRectangle> -> CUInt -> IO <DFBResult>)
+#field FillSpans , FunPtr (Ptr <IDirectFBSurface> -> CInt -> \
+    Ptr <DFBSpan> -> CUInt -> IO <DFBResult>)
+#field FillTriangles , FunPtr (Ptr <IDirectFBSurface> -> \
+    Ptr <DFBTriangle> -> CUInt -> IO <DFBResult>)
+#field SetFont , FunPtr (Ptr <IDirectFBSurface> -> \
+    Ptr <IDirectFBFont> -> IO <DFBResult>)
+#field GetFont , FunPtr (Ptr <IDirectFBSurface> -> \
+    Ptr (Ptr <IDirectFBFont>) -> IO <DFBResult>)
+#field DrawString , FunPtr (Ptr <IDirectFBSurface> -> \
+    CString -> CInt -> CInt -> CInt -> \
+    <DFBSurfaceTextFlags> -> IO <DFBResult>)
+#field DrawGlyph , FunPtr (Ptr <IDirectFBSurface> -> CUInt -> \
+    CInt -> CInt -> <DFBSurfaceTextFlags> -> IO <DFBResult>)
+#field SetEncoding , FunPtr (Ptr <IDirectFBSurface> -> \
+    <DFBTextEncodingID> -> IO <DFBResult>)
+#field GetSubSurface , FunPtr (Ptr <IDirectFBSurface> -> \
+    Ptr <DFBRectangle> -> Ptr (Ptr <IDirectFBSurface>) -> \
+    IO <DFBResult>)
+#field GetGL , FunPtr (Ptr <IDirectFBSurface> -> \
+    Ptr (Ptr <IDirectFBGL>) -> IO <DFBResult>)
+#field Dump , FunPtr (Ptr <IDirectFBSurface> -> CString -> \
+    CString -> IO <DFBResult>)
+#field DisableAcceleration , FunPtr (Ptr <IDirectFBSurface> -> \
+    <DFBAccelerationMask> -> IO <DFBResult>)
+#field ReleaseSource , FunPtr (Ptr <IDirectFBSurface> -> IO <DFBResult>)
+#field SetIndexTranslation , FunPtr (Ptr <IDirectFBSurface> -> \
+    Ptr CInt -> CInt -> IO <DFBResult>)
+#field SetRenderOptions , FunPtr (Ptr <IDirectFBSurface> -> \
+    <DFBSurfaceRenderOptions> -> IO <DFBResult>)
+#field SetMatrix , FunPtr (Ptr <IDirectFBSurface> -> \
+    Ptr Int32 -> IO <DFBResult>)
+#field SetSourceMask , FunPtr (Ptr <IDirectFBSurface> -> \
+    Ptr <IDirectFBSurface> -> CInt -> CInt -> \
+    <DFBSurfaceMaskFlags> -> IO <DFBResult>)
+#field MakeSubSurface , FunPtr (Ptr <IDirectFBSurface> -> \
+    Ptr <IDirectFBSurface> -> Ptr <DFBRectangle> -> IO <DFBResult>)
+-- #field Write , FunPtr (Ptr <IDirectFBSurface> -> \
+--     Ptr <DFBRectangle> -> Ptr () -> CInt -> IO <DFBResult>)
+-- #field Read , FunPtr (Ptr <IDirectFBSurface> -> \
+--     Ptr <DFBRectangle> -> Ptr () -> CInt -> IO <DFBResult>)
+-- #field SetColors , FunPtr (Ptr <IDirectFBSurface> -> \
+--     Ptr <DFBColorID> -> Ptr <DFBColor> -> CUInt -> IO <DFBResult>)
+#stoptype
diff --git a/src/Bindings/DirectFB/IDirectFBVideoProvider.hsc b/src/Bindings/DirectFB/IDirectFBVideoProvider.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/DirectFB/IDirectFBVideoProvider.hsc
@@ -0,0 +1,72 @@
+#include <bindings.macros.h>
+#include <directfb.h>
+
+-- | <http://directfb.org/docs/DirectFB_Reference_1_4/IDirectFBVideoProvider.html>
+
+module Bindings.DirectFB.IDirectFBVideoProvider where
+#strict_import
+import Bindings.DirectFB.Types
+import Bindings.DirectFB.IDirectFBSurface
+import Bindings.DirectFB.IDirectFBEventBuffer
+
+#starttype IDirectFBVideoProvider
+#field GetCapabilities , FunPtr (Ptr <IDirectFBVideoProvider> -> \
+    Ptr <DFBVideoProviderCapabilities> -> IO <DFBResult>)
+#field GetSurfaceDescription , FunPtr (Ptr <IDirectFBVideoProvider> -> \
+    Ptr <DFBSurfaceDescription> -> IO <DFBResult>)
+#field GetStreamDescription , FunPtr (Ptr <IDirectFBVideoProvider> -> \
+    Ptr <DFBStreamDescription> -> IO <DFBResult>)
+#field PlayTo , FunPtr (Ptr <IDirectFBVideoProvider> -> \
+    Ptr <IDirectFBSurface> -> Ptr <DFBRectangle> -> \
+    <DVFrameCallback> -> Ptr () -> IO <DFBResult>)
+#field Stop , FunPtr (Ptr <IDirectFBVideoProvider> -> IO <DFBResult>)
+#field GetStatus , FunPtr (Ptr <IDirectFBVideoProvider> -> \
+    Ptr <DFBVideoProviderStatus> -> IO <DFBResult>)
+#field SeekTo , FunPtr (Ptr <IDirectFBVideoProvider> -> \
+    CDouble -> IO <DFBResult>)
+#field GetPos , FunPtr (Ptr <IDirectFBVideoProvider> -> \
+    Ptr CDouble -> IO <DFBResult>)
+#field GetLength , FunPtr (Ptr <IDirectFBVideoProvider> -> \
+    Ptr CDouble -> IO <DFBResult>)
+#field GetColorAdjustment , FunPtr (Ptr <IDirectFBVideoProvider> -> \
+    Ptr <DFBColorAdjustment> -> IO <DFBResult>)
+#field SetColorAdjustment , FunPtr (Ptr <IDirectFBVideoProvider> -> \
+    Ptr <DFBColorAdjustment> -> IO <DFBResult>)
+#field SendEvent , FunPtr (Ptr <IDirectFBVideoProvider> -> \
+    Ptr <DFBEvent> -> IO <DFBResult>)
+#field SetPlaybackFlags , FunPtr (Ptr <IDirectFBVideoProvider> -> \
+    <DFBVideoProviderPlaybackFlags> -> IO <DFBResult>)
+#field SetSpeed , FunPtr (Ptr <IDirectFBVideoProvider> -> \
+    CDouble -> IO <DFBResult>)
+#field GetSpeed , FunPtr (Ptr <IDirectFBVideoProvider> -> \
+    Ptr CDouble -> IO <DFBResult>)
+#field SetVolume , FunPtr (Ptr <IDirectFBVideoProvider> -> \
+    Ptr CFloat -> IO <DFBResult>)
+#field GetVolume , FunPtr (Ptr <IDirectFBVideoProvider> -> \
+    Ptr CFloat -> IO <DFBResult>)
+#field SetStreamAttributes , FunPtr (Ptr <IDirectFBVideoProvider> -> \
+    <DFBStreamAttributes> -> IO <DFBResult>)
+#field SetAudioOutputs , FunPtr (Ptr <IDirectFBVideoProvider> -> \
+    Ptr <DFBVideoProviderAudioUnits> -> IO <DFBResult>)
+#field GetAudioOutputs , FunPtr (Ptr <IDirectFBVideoProvider> -> \
+    Ptr <DFBVideoProviderAudioUnits> -> IO <DFBResult>)
+#field SetAudioDelay , FunPtr (Ptr <IDirectFBVideoProvider> -> \
+    CLong -> IO <DFBResult>)
+#field CreateEventBuffer , FunPtr (Ptr <IDirectFBVideoProvider> -> \
+    Ptr (Ptr <IDirectFBEventBuffer>) -> IO <DFBResult>)
+#field AttachEventBuffer , FunPtr (Ptr <IDirectFBVideoProvider> -> \
+    Ptr <IDirectFBEventBuffer> -> IO <DFBResult>)
+#field EnableEvents , FunPtr (Ptr <IDirectFBVideoProvider> -> \
+    <DFBVideoProviderEventType> -> IO <DFBResult>)
+#field DisableEvents , FunPtr (Ptr <IDirectFBVideoProvider> -> \
+    <DFBVideoProviderEventType> -> IO <DFBResult>)
+#field DetachEventBuffer , FunPtr (Ptr <IDirectFBVideoProvider> -> \
+    Ptr <IDirectFBEventBuffer> -> IO <DFBResult>)
+#field GetBufferOccupancy , FunPtr (Ptr <IDirectFBVideoProvider> -> \
+    Ptr <DFBBufferOccupancy> -> IO <DFBResult>)
+#field SetBufferThresholds , FunPtr (Ptr <IDirectFBVideoProvider> -> \
+    <DFBBufferThresholds> -> IO <DFBResult>)
+#field GetBufferThresholds , FunPtr (Ptr <IDirectFBVideoProvider> -> \
+    Ptr <DFBBufferThresholds> -> IO <DFBResult>)
+#stoptype
+
diff --git a/src/Bindings/DirectFB/IDirectFBWindow.hsc b/src/Bindings/DirectFB/IDirectFBWindow.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/DirectFB/IDirectFBWindow.hsc
@@ -0,0 +1,111 @@
+#include <bindings.macros.h>
+#include <directfb.h>
+
+-- | <http://directfb.org/docs/DirectFB_Reference_1_4/IDirectFBWindow.html>
+
+module Bindings.DirectFB.IDirectFBWindow where
+#strict_import
+import Bindings.DirectFB.Types
+import Bindings.DirectFB.IDirectFBSurface
+import Bindings.DirectFB.IDirectFBEventBuffer
+
+#starttype IDirectFBWindow
+#field GetID , FunPtr ( Ptr <IDirectFBWindow> -> \
+    Ptr <DFBWindowID> -> IO <DFBResult>)
+#field GetPosition , FunPtr ( Ptr <IDirectFBWindow> -> \
+    Ptr CInt -> Ptr CInt -> IO <DFBResult>)
+#field GetSize , FunPtr ( Ptr <IDirectFBWindow> -> Ptr CInt -> \
+    Ptr CInt -> IO <DFBResult>)
+#field Close , FunPtr ( Ptr <IDirectFBWindow> -> IO <DFBResult>)
+#field Destroy , FunPtr ( Ptr <IDirectFBWindow> -> IO <DFBResult>)
+#field GetSurface , FunPtr ( Ptr <IDirectFBWindow> -> \
+    Ptr (Ptr <IDirectFBSurface>) -> IO <DFBResult>)
+#field ResizeSurface , FunPtr ( Ptr <IDirectFBWindow> -> \
+    CInt -> CInt -> IO <DFBResult>)
+#field CreateEventBuffer , FunPtr ( Ptr <IDirectFBWindow> -> \
+    Ptr (Ptr <IDirectFBEventBuffer>) -> IO <DFBResult>)
+#field AttachEventBuffer , FunPtr ( Ptr <IDirectFBWindow> -> \
+    Ptr <IDirectFBEventBuffer> -> IO <DFBResult>)
+#field DetachEventBuffer , FunPtr ( Ptr <IDirectFBWindow> -> \
+    Ptr <IDirectFBEventBuffer> -> IO <DFBResult>)
+#field EnableEvents , FunPtr ( Ptr <IDirectFBWindow> -> \
+    <DFBWindowEventType> -> IO <DFBResult>)
+#field DisableEvents , FunPtr ( Ptr <IDirectFBWindow> -> \
+    <DFBWindowEventType> -> IO <DFBResult>)
+#field SetOptions , FunPtr ( Ptr <IDirectFBWindow> -> \
+    <DFBWindowOptions> -> IO <DFBResult>)
+#field GetOptions , FunPtr ( Ptr <IDirectFBWindow> -> \
+    Ptr <DFBWindowOptions> -> IO <DFBResult>)
+-- #field SetColor , FunPtr ( Ptr <IDirectFBWindow> -> Word8 -> \
+--     Word8 -> Word8 -> Word8 -> IO <DFBResult>)
+#field SetColorKey , FunPtr ( Ptr <IDirectFBWindow> -> \
+    Word8 -> Word8 -> Word8 -> IO <DFBResult>)
+#field SetColorKeyIndex , FunPtr ( Ptr <IDirectFBWindow> -> \
+    CUInt -> IO <DFBResult>)
+#field SetOpacity , FunPtr ( Ptr <IDirectFBWindow> -> \
+    Word8 -> IO <DFBResult>)
+#field SetOpaqueRegion , FunPtr ( Ptr <IDirectFBWindow> -> \
+    CInt -> CInt -> CInt -> CInt -> IO <DFBResult>)
+#field GetOpacity , FunPtr ( Ptr <IDirectFBWindow> -> \
+    Ptr Word8 -> IO <DFBResult>)
+#field SetCursorShape , FunPtr ( Ptr <IDirectFBWindow> -> \
+    Ptr <IDirectFBSurface> -> CInt -> CInt -> IO <DFBResult>)
+#field Move , FunPtr ( Ptr <IDirectFBWindow> -> CInt -> \
+    CInt -> IO <DFBResult>)
+#field MoveTo , FunPtr ( Ptr <IDirectFBWindow> -> \
+    CInt -> CInt -> IO <DFBResult>)
+#field Resize , FunPtr ( Ptr <IDirectFBWindow> -> \
+    CInt -> CInt -> IO <DFBResult>)
+#field SetBounds , FunPtr ( Ptr <IDirectFBWindow> -> \
+    CInt -> CInt -> CInt -> CInt -> IO <DFBResult>)
+#field SetStackingClass , FunPtr ( Ptr <IDirectFBWindow> -> \
+    <DFBWindowStackingClass> -> IO <DFBResult>)
+#field Raise , FunPtr ( Ptr <IDirectFBWindow> -> IO <DFBResult>)
+#field Lower , FunPtr ( Ptr <IDirectFBWindow> -> IO <DFBResult>)
+#field RaiseToTop , FunPtr ( Ptr <IDirectFBWindow> -> IO <DFBResult>)
+#field LowerToBottom , FunPtr ( Ptr <IDirectFBWindow> -> IO <DFBResult>)
+#field PutAtop , FunPtr ( Ptr <IDirectFBWindow> -> \
+    Ptr <IDirectFBWindow> -> IO <DFBResult>)
+#field PutBelow , FunPtr ( Ptr <IDirectFBWindow> -> \
+    Ptr <IDirectFBWindow> -> IO <DFBResult>)
+#field Bind , FunPtr ( Ptr <IDirectFBWindow> -> \
+    Ptr <IDirectFBWindow> -> CInt -> CInt -> IO <DFBResult>)
+#field Unbind , FunPtr ( Ptr <IDirectFBWindow> -> \
+    Ptr <IDirectFBWindow> -> IO <DFBResult>)
+#field RequestFocus , FunPtr ( Ptr <IDirectFBWindow> -> IO <DFBResult>)
+#field GrabKeyboard , FunPtr ( Ptr <IDirectFBWindow> -> IO <DFBResult>)
+#field UngrabKeyboard , FunPtr ( Ptr <IDirectFBWindow> -> IO <DFBResult>)
+#field GrabPointer , FunPtr ( Ptr <IDirectFBWindow> -> IO <DFBResult>)
+#field UngrabPointer , FunPtr ( Ptr <IDirectFBWindow> -> IO <DFBResult>)
+#field GrabKey , FunPtr ( Ptr <IDirectFBWindow> -> \
+    <DFBInputDeviceKeySymbol> -> <DFBInputDeviceModifierMask> -> \
+    IO <DFBResult>)
+#field UngrabKey , FunPtr ( Ptr <IDirectFBWindow> -> \
+    <DFBInputDeviceKeySymbol> -> <DFBInputDeviceModifierMask> -> \
+    IO <DFBResult>)
+#field SetKeySelection , FunPtr ( Ptr <IDirectFBWindow> -> \
+    <DFBWindowKeySelection> -> Ptr <DFBInputDeviceKeySymbol> -> \
+    CUInt -> IO <DFBResult>)
+#field GrabUnselectedKeys , FunPtr ( Ptr <IDirectFBWindow> -> \
+    IO <DFBResult>)
+#field UngrabUnselectedKeys , FunPtr ( Ptr <IDirectFBWindow> -> \
+    IO <DFBResult>)
+#field SetSrcGeometry , FunPtr ( Ptr <IDirectFBWindow> -> \
+    Ptr <DFBWindowGeometry> -> IO <DFBResult>)
+#field SetDstGeometry , FunPtr ( Ptr <IDirectFBWindow> -> \
+    Ptr <DFBWindowGeometry> -> IO <DFBResult>)
+#field SetProperty , FunPtr ( Ptr <IDirectFBWindow> -> \
+    CString -> Ptr () -> Ptr (Ptr ()) -> IO <DFBResult>)
+#field GetProperty , FunPtr ( Ptr <IDirectFBWindow> -> \
+    CString -> Ptr (Ptr ()) -> IO <DFBResult>)
+#field RemoveProperty , FunPtr ( Ptr <IDirectFBWindow> -> \
+    CString -> Ptr (Ptr ()) -> IO <DFBResult>)
+-- #field SetRotation , FunPtr ( Ptr <IDirectFBWindow> -> \
+--     CInt -> IO <DFBResult>)
+-- #field SetAssociation , FunPtr ( Ptr <IDirectFBWindow> -> \
+--     <DFBWindowID> -> IO <DFBResult>)
+-- #field SetApplicationID , FunPtr ( Ptr <IDirectFBWindow> -> \
+--     CLong application_id -> IO <DFBResult>)
+-- #field GetApplicationID , FunPtr ( Ptr <IDirectFBWindow> -> \
+--     Ptr CLong -> IO <DFBResult>)
+#stoptype
diff --git a/src/Bindings/DirectFB/Types.hsc b/src/Bindings/DirectFB/Types.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/DirectFB/Types.hsc
@@ -0,0 +1,2040 @@
+#include <bindings.macros.h>
+#include <directfb.h>
+#include <directfb_version.h>
+#include <directfbgl.h>
+
+-- | <http://directfb.org/docs/DirectFB_Reference_1_4/types.html>
+
+module Bindings.DirectFB.Types where
+#strict_import
+import Bindings.Posix.Sys.Select
+
+#globalvar directfb_major_version , CUInt
+#globalvar directfb_minor_version , CUInt
+#globalvar directfb_micro_version , CUInt
+#globalvar directfb_binary_age , CUInt
+#globalvar directfb_interface_age , CUInt
+
+#ccall DirectFBCheckVersion , CUInt -> CUInt -> CUInt -> IO CString
+#ccall DirectFBError , CString -> <DFBResult> -> IO <DFBResult>
+#ccall DirectFBErrorFatal , CString -> <DFBResult> -> IO <DFBResult>
+#ccall DirectFBErrorString , <DFBResult> -> IO CString
+#ccall DirectFBUsageString , IO CString
+#ccall DirectFBInit , Ptr CInt -> Ptr (Ptr (CString)) -> IO <DFBResult>
+#ccall DirectFBSetOption , CString -> CString -> IO <DFBResult>
+
+#integral_t DFBResult
+
+#num DFB_OK
+#num DFB_FAILURE
+#num DFB_INIT
+#num DFB_BUG
+#num DFB_DEAD
+#num DFB_UNSUPPORTED
+#num DFB_UNIMPLEMENTED
+#num DFB_ACCESSDENIED
+#num DFB_INVAREA
+#num DFB_INVARG
+#num DFB_NOSYSTEMMEMORY
+#num DFB_NOSHAREDMEMORY
+#num DFB_LOCKED
+#num DFB_BUFFEREMPTY
+#num DFB_FILENOTFOUND
+#num DFB_IO
+#num DFB_BUSY
+#num DFB_NOIMPL
+#num DFB_TIMEOUT
+#num DFB_THIZNULL
+#num DFB_IDNOTFOUND
+#num DFB_DESTROYED
+#num DFB_FUSION
+#num DFB_BUFFERTOOLARGE
+#num DFB_INTERRUPTED
+#num DFB_NOCONTEXT
+#num DFB_TEMPUNAVAIL
+#num DFB_LIMITEXCEEDED
+#num DFB_NOSUCHMETHOD
+#num DFB_NOSUCHINSTANCE
+#num DFB_ITEMNOTFOUND
+#num DFB_VERSIONMISMATCH
+#num DFB_EOF
+#num DFB_SUSPENDED
+#num DFB_INCOMPLETE
+#num DFB_NOCORE
+#num DFB_NOVIDEOMEMORY
+#num DFB_MISSINGFONT
+#num DFB_MISSINGIMAGE
+
+#integral_t DFBBoolean
+
+#num DFB_FALSE
+#num DFB_TRUE
+
+#starttype DFBPoint
+#field x , CInt
+#field y , CInt
+#stoptype
+
+#starttype DFBSpan
+#field x , CInt
+#field w , CInt
+#stoptype
+
+#starttype DFBDimension
+#field w , CInt
+#field h , CInt
+#stoptype
+
+#starttype DFBRectangle
+#field x , CInt
+#field y , CInt
+#field w , CInt
+#field h , CInt
+#stoptype
+
+#starttype DFBLocation
+#field x , CFloat
+#field y , CFloat
+#field w , CFloat
+#field h , CFloat
+#stoptype
+
+
+#starttype DFBRegion
+#field x1 , CInt
+#field y1 , CInt
+#field x2 , CInt
+#field y2 , CInt
+#stoptype
+
+
+#starttype DFBInsets
+#field l , CInt
+#field t , CInt
+#field r , CInt
+#field b , CInt
+#stoptype
+
+
+#starttype DFBTriangle
+#field x1 , CInt
+#field y1 , CInt
+#field x2 , CInt
+#field y2 , CInt
+#field x3 , CInt
+#field y3 , CInt
+#stoptype
+
+#starttype DFBColor
+#field a , Word8
+#field r , Word8
+#field g , Word8
+#field b , Word8
+#stoptype
+
+#starttype DFBColorKey
+#field index , Word8
+#field r , Word8
+#field g , Word8
+#field b , Word8
+#stoptype
+
+#starttype DFBColorYUV
+#field a , Word8
+#field y , Word8
+#field u , Word8
+#field v , Word8
+#stoptype
+
+#if defined(DCID_PRIMARY)
+  #num DCID_PRIMARY
+#endif
+#if defined(DFB_COLOR_IDS_MAX)
+  #num DFB_COLOR_IDS_MAX
+#endif
+#num DFB_DISPLAYLAYER_IDS_MAX
+
+#integral_t DFBScreenID
+#integral_t DFBDisplayLayerID
+#integral_t DFBDisplayLayerSourceID
+#integral_t DFBWindowID
+#integral_t DFBInputDeviceID
+#integral_t DFBTextEncodingID
+#integral_t DFBDisplayLayerIDs
+
+#num DTEID_UTF8
+
+#integral_t DFBCooperativeLevel
+
+#num DFSCL_NORMAL
+#num DFSCL_FULLSCREEN
+#num DFSCL_EXCLUSIVE
+
+
+#integral_t DFBDisplayLayerCapabilities
+
+#num DLCAPS_NONE
+#num DLCAPS_SURFACE
+#num DLCAPS_OPACITY
+#num DLCAPS_ALPHACHANNEL
+#num DLCAPS_SCREEN_LOCATION
+#num DLCAPS_FLICKER_FILTERING
+#num DLCAPS_DEINTERLACING
+#num DLCAPS_SRC_COLORKEY
+#num DLCAPS_DST_COLORKEY
+#num DLCAPS_BRIGHTNESS
+#num DLCAPS_CONTRAST
+#num DLCAPS_HUE
+#num DLCAPS_SATURATION
+#num DLCAPS_LEVELS
+#num DLCAPS_FIELD_PARITY
+#num DLCAPS_WINDOWS
+#num DLCAPS_SOURCES
+#num DLCAPS_ALPHA_RAMP
+#num DLCAPS_PREMULTIPLIED
+#num DLCAPS_SCREEN_POSITION
+#num DLCAPS_SCREEN_SIZE
+#num DLCAPS_CLIP_REGIONS
+#num DLCAPS_ALL
+
+#integral_t DFBScreenCapabilities
+
+#num DSCCAPS_NONE
+#num DSCCAPS_VSYNC
+#num DSCCAPS_POWER_MANAGEMENT
+#num DSCCAPS_MIXERS
+#num DSCCAPS_ENCODERS
+#num DSCCAPS_OUTPUTS
+#num DSCCAPS_ALL
+
+
+#integral_t DFBDisplayLayerOptions
+
+#num DLOP_NONE
+#num DLOP_ALPHACHANNEL
+#num DLOP_FLICKER_FILTERING
+#num DLOP_DEINTERLACING
+#num DLOP_SRC_COLORKEY
+#num DLOP_DST_COLORKEY
+#num DLOP_OPACITY
+#num DLOP_FIELD_PARITY
+
+#integral_t DFBDisplayLayerBufferMode
+
+#num DLBM_UNKNOWN
+#num DLBM_FRONTONLY
+#num DLBM_BACKVIDEO
+#num DLBM_BACKSYSTEM
+#num DLBM_TRIPLE
+#num DLBM_WINDOWS
+
+#integral_t DFBSurfaceDescriptionFlags
+
+#num DSDESC_NONE
+#num DSDESC_CAPS
+#num DSDESC_WIDTH
+#num DSDESC_HEIGHT
+#num DSDESC_PIXELFORMAT
+#num DSDESC_PREALLOCATED
+#num DSDESC_PALETTE
+#num DSDESC_RESOURCE_ID
+#if defined(DSDESC_HINTS)
+  #num DSDESC_HINTS
+#endif
+#num DSDESC_ALL
+
+
+#integral_t DFBPaletteDescriptionFlags
+
+#num DPDESC_CAPS
+#num DPDESC_SIZE
+#num DPDESC_ENTRIES
+
+
+#integral_t DFBSurfaceCapabilities
+
+#num DSCAPS_NONE
+#num DSCAPS_PRIMARY
+#num DSCAPS_SYSTEMONLY
+#num DSCAPS_VIDEOONLY
+#num DSCAPS_DOUBLE
+#num DSCAPS_SUBSURFACE
+#num DSCAPS_INTERLACED
+#num DSCAPS_SEPARATED
+#num DSCAPS_STATIC_ALLOC
+#num DSCAPS_TRIPLE
+#num DSCAPS_PREMULTIPLIED
+#num DSCAPS_DEPTH
+#num DSCAPS_SHARED
+#if defined(DSCAPS_ROTATED)
+  #num DSCAPS_ROTATED
+#endif
+#num DSCAPS_ALL
+#num DSCAPS_FLIPPING
+
+#integral_t DFBPaletteCapabilities
+
+#num DPCAPS_NONE
+
+
+#integral_t DFBSurfaceDrawingFlags
+
+#num DSDRAW_NOFX
+#num DSDRAW_BLEND
+#num DSDRAW_DST_COLORKEY
+#num DSDRAW_SRC_PREMULTIPLY
+#num DSDRAW_DST_PREMULTIPLY
+#num DSDRAW_DEMULTIPLY
+#num DSDRAW_XOR
+
+
+#integral_t DFBSurfaceBlittingFlags
+
+#num DSBLIT_NOFX
+#num DSBLIT_BLEND_ALPHACHANNEL
+#num DSBLIT_BLEND_COLORALPHA
+#num DSBLIT_COLORIZE
+#num DSBLIT_SRC_COLORKEY
+#num DSBLIT_DST_COLORKEY
+#num DSBLIT_SRC_PREMULTIPLY
+#num DSBLIT_DST_PREMULTIPLY
+#num DSBLIT_DEMULTIPLY
+#num DSBLIT_DEINTERLACE
+#num DSBLIT_SRC_PREMULTCOLOR
+#num DSBLIT_XOR
+#num DSBLIT_INDEX_TRANSLATION
+#if defined(DSBLIT_ROTATE90)
+  #num DSBLIT_ROTATE90
+#endif
+#num DSBLIT_ROTATE180
+#if defined(DSBLIT_ROTATE270)
+  #num DSBLIT_ROTATE270
+#endif
+#num DSBLIT_COLORKEY_PROTECT
+#num DSBLIT_SRC_MASK_ALPHA
+#num DSBLIT_SRC_MASK_COLOR
+
+
+#integral_t DFBSurfaceRenderOptions
+
+#num DSRO_NONE
+#num DSRO_SMOOTH_UPSCALE
+#num DSRO_SMOOTH_DOWNSCALE
+#num DSRO_MATRIX
+#num DSRO_ANTIALIAS
+#num DSRO_ALL
+
+
+#integral_t DFBAccelerationMask
+
+#num DFXL_NONE
+#num DFXL_FILLRECTANGLE
+#num DFXL_DRAWRECTANGLE
+#num DFXL_DRAWLINE
+#num DFXL_FILLTRIANGLE
+#num DFXL_BLIT
+#num DFXL_STRETCHBLIT
+#num DFXL_TEXTRIANGLES
+#num DFXL_DRAWSTRING
+#num DFXL_ALL
+#num DFXL_ALL_DRAW
+#num DFXL_ALL_BLIT
+
+#integral_t DFBDisplayLayerTypeFlags
+
+#num DLTF_NONE
+#num DLTF_GRAPHICS
+#num DLTF_VIDEO
+#num DLTF_STILL_PICTURE
+#num DLTF_BACKGROUND
+#num DLTF_ALL
+
+
+#integral_t DFBInputDeviceTypeFlags
+
+#num DIDTF_NONE
+#num DIDTF_KEYBOARD
+#num DIDTF_MOUSE
+#num DIDTF_JOYSTICK
+#num DIDTF_REMOTE
+#num DIDTF_VIRTUAL
+#num DIDTF_ALL
+
+
+#integral_t DFBInputDeviceCapabilities
+
+#num DICAPS_KEYS
+#num DICAPS_AXES
+#num DICAPS_BUTTONS
+#num DICAPS_ALL
+
+#integral_t DFBInputDeviceButtonIdentifier
+
+#num DIBI_LEFT
+#num DIBI_RIGHT
+#num DIBI_MIDDLE
+#num DIBI_FIRST
+#num DIBI_LAST
+
+#integral_t DFBInputDeviceAxisIdentifier
+
+#num DIAI_X
+#num DIAI_Y
+#num DIAI_Z
+#num DIAI_FIRST
+#num DIAI_LAST
+
+#integral_t DFBWindowDescriptionFlags
+
+#num DWDESC_CAPS
+#num DWDESC_WIDTH
+#num DWDESC_HEIGHT
+#num DWDESC_PIXELFORMAT
+#num DWDESC_POSX
+#num DWDESC_POSY
+#num DWDESC_SURFACE_CAPS
+#num DWDESC_PARENT
+#num DWDESC_OPTIONS
+#num DWDESC_STACKING
+#if defined(DWDESC_TOPLEVEL_ID)
+  #num DWDESC_TOPLEVEL_ID
+#endif
+#num DWDESC_RESOURCE_ID
+
+#integral_t DFBDataBufferDescriptionFlags
+
+#num DBDESC_FILE
+#num DBDESC_MEMORY
+
+#integral_t DFBWindowCapabilities
+
+#num DWCAPS_NONE
+#num DWCAPS_ALPHACHANNEL
+#num DWCAPS_DOUBLEBUFFER
+#num DWCAPS_INPUTONLY
+#num DWCAPS_NODECORATION
+#if defined(DWCAPS_SUBWINDOW)
+  #num DWCAPS_SUBWINDOW
+#endif
+#if defined(DWCAPS_COLOR)
+  #num DWCAPS_COLOR
+#endif
+#num DWCAPS_NOFOCUS
+#num DWCAPS_ALL
+
+#integral_t DFBWindowOptions
+
+#num DWOP_NONE
+#num DWOP_COLORKEYING
+#num DWOP_ALPHACHANNEL
+#num DWOP_OPAQUE_REGION
+#num DWOP_SHAPED
+#num DWOP_KEEP_POSITION
+#num DWOP_KEEP_SIZE
+#num DWOP_KEEP_STACKING
+#num DWOP_GHOST
+#num DWOP_INDESTRUCTIBLE
+#num DWOP_SCALE
+#num DWOP_KEEP_ABOVE
+#num DWOP_KEEP_UNDER
+#if defined(DWOP_FOLLOW_BOUNDS)
+  #num DWOP_FOLLOW_BOUNDS
+#endif
+#num DWOP_ALL
+
+#integral_t DFBWindowStackingClass
+
+#num DWSC_MIDDLE
+#num DWSC_UPPER
+#num DWSC_LOWER
+
+#integral_t DFBFontAttributes
+
+#num DFFA_NONE
+#num DFFA_NOKERNING
+#num DFFA_NOHINTING
+#num DFFA_MONOCHROME
+#num DFFA_NOCHARMAP
+#num DFFA_FIXEDCLIP
+#if defined(DFFA_NOBITMAP)
+  #num DFFA_NOBITMAP
+#endif
+#if defined(DFFA_OUTLINED)
+  #num DFFA_OUTLINED
+#endif
+
+#integral_t DFBFontDescriptionFlags
+
+#num DFDESC_ATTRIBUTES
+#num DFDESC_HEIGHT
+#num DFDESC_WIDTH
+#num DFDESC_INDEX
+#num DFDESC_FIXEDADVANCE
+#num DFDESC_FRACT_HEIGHT
+#num DFDESC_FRACT_WIDTH
+#if defined(DFDESC_OUTLINE_WIDTH)
+  #num DFDESC_OUTLINE_WIDTH
+#endif
+#if defined(DFDESC_OUTLINE_OPACITY)
+  #num DFDESC_OUTLINE_OPACITY
+#endif
+
+#starttype DFBFontDescription
+#field flags , <DFBFontDescriptionFlags>
+#field attributes , <DFBFontAttributes>
+#field height , CInt
+#field width , CInt
+#field index , CUInt
+#field fixed_advance , CInt
+#field fract_height , CInt
+#field fract_width , CInt
+#if DIRECTFB_MINOR_VERSION >= 4
+  #field outline_width , CInt
+  #field outline_opacity , CInt
+#endif
+#stoptype
+
+#integral_t DFBSurfacePixelFormat
+
+#num DSPF_UNKNOWN
+#num DSPF_ARGB1555
+#num DSPF_RGB16
+#num DSPF_RGB24
+#num DSPF_RGB32
+#num DSPF_ARGB
+#num DSPF_A8
+#num DSPF_YUY2
+#num DSPF_RGB332
+#num DSPF_UYVY
+#num DSPF_I420
+#num DSPF_YV12
+#num DSPF_LUT8
+#num DSPF_ALUT44
+#num DSPF_AiRGB
+#num DSPF_A1
+#num DSPF_NV12
+#num DSPF_NV16
+#num DSPF_ARGB2554
+#num DSPF_ARGB4444
+#if defined(DSPF_RGBA4444)
+  #num DSPF_RGBA4444
+#endif
+#num DSPF_NV21
+#num DSPF_AYUV
+#num DSPF_A4
+#num DSPF_ARGB1666
+#num DSPF_ARGB6666
+#num DSPF_RGB18
+#num DSPF_LUT2
+#num DSPF_RGB444
+#num DSPF_RGB555
+#num DSPF_BGR555
+#if defined(DSPF_RGBA5551)
+  #num DSPF_RGBA5551
+#endif
+#num DFB_NUM_PIXELFORMATS
+
+#cinline DFB_PIXELFORMAT_INDEX , <DFBSurfacePixelFormat> -> CInt
+#cinline DFB_COLOR_BITS_PER_PIXEL , <DFBSurfacePixelFormat> -> CInt
+#cinline DFB_ALPHA_BITS_PER_PIXEL , <DFBSurfacePixelFormat> -> CInt
+#cinline DFB_PIXELFORMAT_HAS_ALPHA , <DFBSurfacePixelFormat> -> CInt
+#cinline DFB_BITS_PER_PIXEL , <DFBSurfacePixelFormat> -> CInt
+#cinline DFB_BYTES_PER_PIXEL , <DFBSurfacePixelFormat> -> CInt
+#cinline DFB_BYTES_PER_LINE , <DFBSurfacePixelFormat> -> CInt -> CInt
+#cinline DFB_PIXELFORMAT_ALIGNMENT , <DFBSurfacePixelFormat> -> CInt
+#cinline DFB_PLANE_MULTIPLY , <DFBSurfacePixelFormat> -> CInt -> CInt
+#cinline DFB_PIXELFORMAT_IS_INDEXED , <DFBSurfacePixelFormat> -> CInt
+#cinline DFB_PLANAR_PIXELFORMAT , <DFBSurfacePixelFormat> -> CInt
+#cinline DFB_PIXELFORMAT_INV_ALPHA , <DFBSurfacePixelFormat> -> CInt
+
+#if DIRECTFB_MINOR_VERSION >= 3
+  #integral_t DFBSurfaceHintFlags
+  #num DSHF_NONE
+  #num DSHF_LAYER
+  #num DSHF_WINDOW
+  #num DSHF_CURSOR
+  #num DSHF_FONT
+  #num DSHF_ALL
+#endif
+
+#starttype DFBSurfaceDescription
+#field flags , <DFBSurfaceDescriptionFlags>
+#field caps , <DFBSurfaceCapabilities>
+#field width , CInt
+#field height , CInt
+#field pixelformat , <DFBSurfacePixelFormat>
+#field preallocated[0].data , Ptr ()
+#field preallocated[0].pitch , CInt
+#field preallocated[1].data , Ptr ()
+#field preallocated[1].pitch , CInt
+#field palette.entries , Ptr <DFBColor>
+#field palette.size , CUInt
+#field resource_id , CULong
+#if DIRECTFB_MINOR_VERSION >= 3
+  #field hints , <DFBSurfaceHintFlags>
+#endif
+#stoptype
+
+#starttype DFBPaletteDescription
+#field caps , <DFBPaletteCapabilities>
+#field size , CUInt
+#field entries , Ptr <DFBColor>
+#stoptype
+
+#num DFB_DISPLAY_LAYER_DESC_NAME_LENGTH
+
+#starttype DFBDisplayLayerDescription
+#field type , <DFBDisplayLayerTypeFlags>
+#field caps , <DFBDisplayLayerCapabilities>
+#array_field name , CChar
+#field level , CInt
+#field regions , CInt
+#field sources , CInt
+#field clip_regions , CInt
+#stoptype
+
+#integral_t DFBDisplayLayerSourceCaps
+
+#num DDLSCAPS_NONE
+#num DDLSCAPS_SURFACE
+#num DDLSCAPS_ALL
+
+#num DFB_DISPLAY_LAYER_SOURCE_DESC_NAME_LENGTH
+
+#starttype DFBDisplayLayerSourceDescription
+#field source_id , <DFBDisplayLayerSourceID>
+#array_field name , CChar
+#field caps , <DFBDisplayLayerSourceCaps>
+#stoptype
+
+#num DFB_SCREEN_DESC_NAME_LENGTH
+
+#starttype DFBScreenDescription
+#field caps , <DFBScreenCapabilities>
+#array_field name , CChar
+#field mixers , CInt
+#field encoders , CInt
+#field outputs , CInt
+#stoptype
+
+#num DFB_INPUT_DEVICE_DESC_NAME_LENGTH
+
+#starttype DFBInputDeviceDescription
+#field type , <DFBInputDeviceTypeFlags>
+#field caps , <DFBInputDeviceCapabilities>
+#field min_keycode , CInt
+#field max_keycode , CInt
+#field max_axis , <DFBInputDeviceAxisIdentifier>
+#field max_button , <DFBInputDeviceButtonIdentifier>
+#array_field name , CChar
+#array_field vendor , CChar
+#stoptype
+
+#integral_t DFBInputDeviceAxisInfoFlags
+
+#num DIAIF_NONE
+#num DIAIF_ABS_MIN
+#num DIAIF_ABS_MAX
+#num DIAIF_ALL
+
+#starttype DFBInputDeviceAxisInfo
+#field flags , <DFBInputDeviceAxisInfoFlags>
+#field abs_min , CInt
+#field abs_max , CInt
+#stoptype
+
+#num DFB_GRAPHICS_DRIVER_INFO_NAME_LENGTH
+
+#starttype DFBGraphicsDriverInfo
+#field major , CInt
+#field minor , CInt
+#array_field name , CChar
+#array_field vendor , CChar
+#stoptype
+
+#num DFB_GRAPHICS_DEVICE_DESC_NAME_LENGTH
+
+#starttype DFBGraphicsDeviceDescription
+#field acceleration_mask , <DFBAccelerationMask>
+#field blitting_flags , <DFBSurfaceBlittingFlags>
+#field drawing_flags , <DFBSurfaceDrawingFlags>
+#field video_memory , CUInt
+#array_field name , CChar
+#array_field vendor , CChar
+#field driver , <DFBGraphicsDriverInfo>
+#stoptype
+
+#starttype DFBWindowDescription
+#field flags , <DFBWindowDescriptionFlags>
+#field caps , <DFBWindowCapabilities>
+#field width , CInt
+#field height , CInt
+#field pixelformat , <DFBSurfacePixelFormat>
+#field posx , CInt
+#field posy , CInt
+#field surface_caps , <DFBSurfaceCapabilities>
+#field parent_id , <DFBWindowID>
+#field options , <DFBWindowOptions>
+#field stacking , <DFBWindowStackingClass>
+#field resource_id , CULong
+#if DIRECTFB_MINOR_VERSION >= 3
+  #field toplevel_id , <DFBWindowID>
+#endif
+#stoptype
+
+#starttype DFBDataBufferDescription
+#field flags , <DFBDataBufferDescriptionFlags>
+#field file , CString
+#field memory.data , Ptr ()
+#field memory.length , CUInt
+#stoptype
+
+#integral_t DFBEnumerationResult
+
+#num DFENUM_OK
+#num DFENUM_CANCEL
+
+#callback DFBVideoModeCallback , CInt -> CInt -> CInt -> \
+  Ptr () -> IO <DFBEnumerationResult>
+-- callback DFBScreenCallback , <DFBScreenID> -> \
+--   <DFBScreenDescription> -> Ptr () -> \
+--   IO <DFBEnumerationResult>
+-- callback DFBDisplayLayerCallback , <DFBDisplayLayerID> -> \
+--   <DFBDisplayLayerDescription> -> Ptr () -> \
+--   IO <DFBEnumerationResult>
+-- callback DFBInputDeviceCallback , <DFBInputDeviceID> -> \
+--   <DFBInputDeviceDescription> -> Ptr () -> \
+--   IO <DFBEnumerationResult>
+#callback DFBGetDataCallback , Ptr () -> CUInt -> Ptr () -> IO CInt
+
+#integral_t DFBVideoProviderCapabilities
+
+#num DVCAPS_BASIC
+#num DVCAPS_SEEK
+#num DVCAPS_SCALE
+#num DVCAPS_INTERLACED
+#num DVCAPS_SPEED
+#num DVCAPS_BRIGHTNESS
+#num DVCAPS_CONTRAST
+#num DVCAPS_HUE
+#num DVCAPS_SATURATION
+#num DVCAPS_INTERACTIVE
+#num DVCAPS_VOLUME
+#num DVCAPS_EVENT
+#num DVCAPS_ATTRIBUTES
+#num DVCAPS_AUDIO_SEL
+
+#integral_t DFBVideoProviderStatus
+
+#num DVSTATE_UNKNOWN
+#num DVSTATE_PLAY
+#num DVSTATE_STOP
+#num DVSTATE_FINISHED
+#num DVSTATE_BUFFERING
+
+#integral_t DFBVideoProviderPlaybackFlags
+
+#num DVPLAY_NOFX
+#num DVPLAY_REWIND
+#num DVPLAY_LOOPING
+
+#integral_t DFBVideoProviderAudioUnits
+
+#num DVAUDIOUNIT_NONE
+#num DVAUDIOUNIT_ONE
+#num DVAUDIOUNIT_TWO
+#num DVAUDIOUNIT_THREE
+#num DVAUDIOUNIT_FOUR
+#num DVAUDIOUNIT_ALL
+
+#integral_t DFBColorAdjustmentFlags
+
+#num DCAF_NONE
+#num DCAF_BRIGHTNESS
+#num DCAF_CONTRAST
+#num DCAF_HUE
+#num DCAF_SATURATION
+#num DCAF_ALL
+
+#starttype DFBColorAdjustment
+#field flags , <DFBColorAdjustmentFlags>
+#field brightness , Word16
+#field contrast , Word16
+#field hue , Word16
+#field saturation , Word16
+#stoptype
+
+#num DLID_PRIMARY
+#num DLSID_SURFACE
+#num DSCID_PRIMARY
+#num DIDID_KEYBOARD
+#num DIDID_JOYSTICK
+#num DIDID_ANY
+
+#integral_t DFBDisplayLayerCooperativeLevel
+
+#num DLSCL_SHARED
+#num DLSCL_EXCLUSIVE
+#num DLSCL_ADMINISTRATIVE
+
+#integral_t DFBDisplayLayerBackgroundMode
+
+#num DLBM_DONTCARE
+#num DLBM_COLOR
+#num DLBM_IMAGE
+#num DLBM_TILE
+
+#integral_t DFBDisplayLayerConfigFlags
+
+#num DLCONF_NONE
+#num DLCONF_WIDTH
+#num DLCONF_HEIGHT
+#num DLCONF_PIXELFORMAT
+#num DLCONF_BUFFERMODE
+#num DLCONF_OPTIONS
+#num DLCONF_SOURCE
+#num DLCONF_SURFACE_CAPS
+#num DLCONF_ALL
+
+#starttype DFBDisplayLayerConfig
+#field flags , <DFBDisplayLayerConfigFlags>
+#field width , CInt
+#field height , CInt
+#field pixelformat , <DFBSurfacePixelFormat>
+#field buffermode , <DFBDisplayLayerBufferMode>
+#field options , <DFBDisplayLayerOptions>
+#field source , <DFBDisplayLayerSourceID>
+#field surface_caps , <DFBSurfaceCapabilities>
+#stoptype
+
+#integral_t DFBScreenPowerMode
+
+#num DSPM_ON
+#num DSPM_STANDBY
+#num DSPM_SUSPEND
+#num DSPM_OFF
+
+#integral_t DFBScreenMixerCapabilities
+
+#num DSMCAPS_NONE
+#num DSMCAPS_FULL
+#num DSMCAPS_SUB_LEVEL
+#num DSMCAPS_SUB_LAYERS
+#num DSMCAPS_BACKGROUND
+
+#num DFB_SCREEN_MIXER_DESC_NAME_LENGTH
+
+#starttype DFBScreenMixerDescription
+#field caps , <DFBScreenMixerCapabilities>
+#field layers , <DFBDisplayLayerIDs>
+#field sub_num , CInt
+#field sub_layers , <DFBDisplayLayerIDs>
+#array_field name , CChar
+#stoptype
+
+#integral_t DFBScreenMixerConfigFlags
+
+#num DSMCONF_NONE
+#num DSMCONF_TREE
+#num DSMCONF_LEVEL
+#num DSMCONF_LAYERS
+#num DSMCONF_BACKGROUND
+#num DSMCONF_ALL
+
+#integral_t DFBScreenMixerTree
+
+#num DSMT_UNKNOWN
+#num DSMT_FULL
+#num DSMT_SUB_LEVEL
+#num DSMT_SUB_LAYERS
+
+#starttype DFBScreenMixerConfig
+#field flags , <DFBScreenMixerConfigFlags>
+#field tree , <DFBScreenMixerTree>
+#field level , CInt
+#field layers , <DFBDisplayLayerIDs>
+#field background , <DFBColor>
+#stoptype
+
+#integral_t DFBScreenOutputCapabilities
+
+#num DSOCAPS_NONE
+#num DSOCAPS_CONNECTORS
+#num DSOCAPS_ENCODER_SEL
+#num DSOCAPS_SIGNAL_SEL
+#num DSOCAPS_CONNECTOR_SEL
+#num DSOCAPS_SLOW_BLANKING
+#num DSOCAPS_RESOLUTION
+#num DSOCAPS_ALL
+
+#integral_t DFBScreenOutputConnectors
+
+#num DSOC_UNKNOWN
+#num DSOC_VGA
+#num DSOC_SCART
+#num DSOC_YC
+#num DSOC_CVBS
+#num DSOC_SCART2
+#num DSOC_COMPONENT
+#num DSOC_HDMI
+
+#integral_t DFBScreenOutputSignals
+
+#num DSOS_NONE
+#num DSOS_VGA
+#num DSOS_YC
+#num DSOS_CVBS
+#num DSOS_RGB
+#num DSOS_YCBCR
+#num DSOS_HDMI
+#num DSOS_656
+
+#integral_t DFBScreenOutputSlowBlankingSignals
+
+#num DSOSB_OFF
+#num DSOSB_16x9
+#num DSOSB_4x3
+#num DSOSB_FOLLOW
+#num DSOSB_MONITOR
+
+#integral_t DFBScreenOutputResolution
+
+#num DSOR_UNKNOWN
+#num DSOR_640_480
+#num DSOR_720_480
+#num DSOR_720_576
+#num DSOR_800_600
+#num DSOR_1024_768
+#num DSOR_1152_864
+#num DSOR_1280_720
+#num DSOR_1280_768
+#num DSOR_1280_960
+#num DSOR_1280_1024
+#num DSOR_1400_1050
+#num DSOR_1600_1200
+#num DSOR_1920_1080
+#num DSOR_ALL
+
+#num DFB_SCREEN_OUTPUT_DESC_NAME_LENGTH
+
+#starttype DFBScreenOutputDescription
+#field caps , <DFBScreenOutputCapabilities>
+#field all_connectors , <DFBScreenOutputConnectors>
+#field all_signals , <DFBScreenOutputSignals>
+#field all_resolutions , <DFBScreenOutputResolution>
+#array_field name , CChar
+#stoptype
+
+#integral_t DFBScreenOutputConfigFlags
+
+#num DSOCONF_NONE
+#num DSOCONF_ENCODER
+#num DSOCONF_SIGNALS
+#num DSOCONF_CONNECTORS
+#num DSOCONF_SLOW_BLANKING
+#num DSOCONF_RESOLUTION
+#num DSOCONF_ALL
+
+#starttype DFBScreenOutputConfig
+#field flags , <DFBScreenOutputConfigFlags>
+#field encoder , CInt
+#field out_signals , <DFBScreenOutputSignals>
+#field out_connectors , <DFBScreenOutputConnectors>
+#field slow_blanking , <DFBScreenOutputSlowBlankingSignals>
+#field resolution , <DFBScreenOutputResolution>
+#stoptype
+
+#integral_t DFBScreenEncoderCapabilities
+
+#num DSECAPS_NONE
+#num DSECAPS_TV_STANDARDS
+#num DSECAPS_TEST_PICTURE
+#num DSECAPS_MIXER_SEL
+#num DSECAPS_OUT_SIGNALS
+#num DSECAPS_SCANMODE
+#num DSECAPS_FREQUENCY
+#num DSECAPS_BRIGHTNESS
+#num DSECAPS_CONTRAST
+#num DSECAPS_HUE
+#num DSECAPS_SATURATION
+#num DSECAPS_CONNECTORS
+#num DSECAPS_SLOW_BLANKING
+#num DSECAPS_RESOLUTION
+#num DSECAPS_ALL
+
+#integral_t DFBScreenEncoderType
+
+#num DSET_UNKNOWN
+#num DSET_CRTC
+#num DSET_TV
+#num DSET_DIGITAL
+
+#integral_t DFBScreenEncoderTVStandards
+
+#num DSETV_UNKNOWN
+#num DSETV_PAL
+#num DSETV_NTSC
+#num DSETV_SECAM
+#num DSETV_PAL_60
+#num DSETV_PAL_BG
+#num DSETV_PAL_I
+#num DSETV_PAL_M
+#num DSETV_PAL_N
+#num DSETV_PAL_NC
+#num DSETV_NTSC_M_JPN
+#if DIRECTFB_MINOR_VERSION >= 4
+  #num DSETV_NTSC_443
+#endif
+#num DSETV_DIGITAL
+#num DSETV_ALL
+
+#integral_t DFBScreenEncoderScanMode
+
+#num DSESM_UNKNOWN
+#num DSESM_INTERLACED
+#num DSESM_PROGRESSIVE
+
+#integral_t DFBScreenEncoderFrequency
+
+#num DSEF_UNKNOWN
+#num DSEF_25HZ
+#num DSEF_29_97HZ
+#num DSEF_50HZ
+#num DSEF_59_94HZ
+#num DSEF_60HZ
+#num DSEF_75HZ
+#if DIRECTFB_MINOR_VERSION >= 4
+  #num DSEF_30HZ
+  #num DSEF_24HZ
+  #num DSEF_23_976HZ
+#endif
+
+#num DFB_SCREEN_ENCODER_DESC_NAME_LENGTH
+
+#starttype DFBScreenEncoderDescription
+#field caps , <DFBScreenEncoderCapabilities>
+#field type , <DFBScreenEncoderType>
+#field tv_standards , <DFBScreenEncoderTVStandards>
+#field out_signals , <DFBScreenOutputSignals>
+#field all_connectors , <DFBScreenOutputConnectors>
+#field all_resolutions , <DFBScreenOutputResolution>
+#array_field name , CChar
+#stoptype
+
+#integral_t DFBScreenEncoderConfigFlags
+
+#num DSECONF_NONE
+#num DSECONF_TV_STANDARD
+#num DSECONF_TEST_PICTURE
+#num DSECONF_MIXER
+#num DSECONF_OUT_SIGNALS
+#num DSECONF_SCANMODE
+#num DSECONF_TEST_COLOR
+#num DSECONF_ADJUSTMENT
+#num DSECONF_FREQUENCY
+#num DSECONF_CONNECTORS
+#num DSECONF_SLOW_BLANKING
+#num DSECONF_RESOLUTION
+#num DSECONF_ALL
+
+#integral_t DFBScreenEncoderTestPicture
+
+#num DSETP_OFF
+#num DSETP_MULTI
+#num DSETP_SINGLE
+#num DSETP_WHITE
+#num DSETP_YELLOW
+#num DSETP_CYAN
+#num DSETP_GREEN
+#num DSETP_MAGENTA
+#num DSETP_RED
+#num DSETP_BLUE
+#num DSETP_BLACK
+
+#starttype DFBScreenEncoderConfig
+#field flags , <DFBScreenEncoderConfigFlags>
+#field tv_standard , <DFBScreenEncoderTVStandards>
+#field test_picture , <DFBScreenEncoderTestPicture>
+#field mixer , CInt
+#field out_signals , <DFBScreenOutputSignals>
+#field out_connectors , <DFBScreenOutputConnectors>
+#field slow_blanking , <DFBScreenOutputSlowBlankingSignals>
+#field scanmode , <DFBScreenEncoderScanMode>
+#field test_color , <DFBColor>
+#field adjustment , <DFBColorAdjustment>
+#field frequency , <DFBScreenEncoderFrequency>
+#field resolution , <DFBScreenOutputResolution>
+#stoptype
+
+#integral_t DFBSurfaceFlipFlags
+
+#num DSFLIP_NONE
+#num DSFLIP_WAIT
+#num DSFLIP_BLIT
+#num DSFLIP_ONSYNC
+#num DSFLIP_PIPELINE
+#num DSFLIP_WAITFORSYNC
+
+#integral_t DFBSurfaceTextFlags
+
+#num DSTF_LEFT
+#num DSTF_CENTER
+#num DSTF_RIGHT
+#num DSTF_TOP
+#num DSTF_BOTTOM
+#if DIRECTFB_MINOR_VERSION >= 4
+  #num DSTF_OUTLINE
+#endif
+#num DSTF_TOPLEFT
+#num DSTF_TOPCENTER
+#num DSTF_TOPRIGHT
+#num DSTF_BOTTOMLEFT
+#num DSTF_BOTTOMCENTER
+#num DSTF_BOTTOMRIGHT
+
+#integral_t DFBSurfaceLockFlags
+
+#num DSLF_READ
+#num DSLF_WRITE
+
+#integral_t DFBSurfacePorterDuffRule
+
+#num DSPD_NONE
+#num DSPD_CLEAR
+#num DSPD_SRC
+#num DSPD_SRC_OVER
+#num DSPD_DST_OVER
+#num DSPD_SRC_IN
+#num DSPD_DST_IN
+#num DSPD_SRC_OUT
+#num DSPD_DST_OUT
+#num DSPD_SRC_ATOP
+#num DSPD_DST_ATOP
+#num DSPD_ADD
+#num DSPD_XOR
+#if defined(DSPD_DST)
+  #num DSPD_DST
+#endif
+
+#integral_t DFBSurfaceBlendFunction
+
+#num DSBF_UNKNOWN
+#num DSBF_ZERO
+#num DSBF_ONE
+#num DSBF_SRCCOLOR
+#num DSBF_INVSRCCOLOR
+#num DSBF_SRCALPHA
+#num DSBF_INVSRCALPHA
+#num DSBF_DESTALPHA
+#num DSBF_INVDESTALPHA
+#num DSBF_DESTCOLOR
+#num DSBF_INVDESTCOLOR
+#num DSBF_SRCALPHASAT
+
+#starttype DFBVertex
+#field x , CFloat
+#field y , CFloat
+#field z , CFloat
+#field w , CFloat
+#field s , CFloat
+#field t , CFloat
+#stoptype
+
+#integral_t DFBTriangleFormation
+
+#num DTTF_LIST
+#num DTTF_STRIP
+#num DTTF_FAN
+
+#integral_t DFBSurfaceMaskFlags
+
+#num DSMF_NONE
+#num DSMF_STENCIL
+#num DSMF_ALL
+
+#integral_t DFBInputDeviceKeyState
+
+#num DIKS_UP
+#num DIKS_DOWN
+
+#integral_t DFBInputDeviceButtonState
+
+#num DIBS_UP
+#num DIBS_DOWN
+
+#integral_t DFBInputDeviceButtonMask
+
+#num DIBM_LEFT
+#num DIBM_RIGHT
+#num DIBM_MIDDLE
+
+#integral_t DFBInputDeviceModifierMask
+
+#num DIMM_SHIFT
+#num DIMM_CONTROL
+#num DIMM_ALT
+#num DIMM_ALTGR
+#num DIMM_META
+#num DIMM_SUPER
+#num DIMM_HYPER
+
+#integral_t DFBEventClass
+
+#num DFEC_NONE
+#num DFEC_INPUT
+#num DFEC_WINDOW
+#num DFEC_USER
+#num DFEC_UNIVERSAL
+#num DFEC_VIDEOPROVIDER
+
+#integral_t DFBInputEventType
+
+#num DIET_UNKNOWN
+#num DIET_KEYPRESS
+#num DIET_KEYRELEASE
+#num DIET_BUTTONPRESS
+#num DIET_BUTTONRELEASE
+#num DIET_AXISMOTION
+
+#integral_t DFBInputEventFlags
+
+#num DIEF_NONE
+#num DIEF_TIMESTAMP
+#num DIEF_AXISABS
+#num DIEF_AXISREL
+#num DIEF_KEYCODE
+#num DIEF_KEYID
+#num DIEF_KEYSYMBOL
+#num DIEF_MODIFIERS
+#num DIEF_LOCKS
+#num DIEF_BUTTONS
+#num DIEF_GLOBAL
+#num DIEF_REPEAT
+#num DIEF_FOLLOW
+#num DIEF_MIN
+#num DIEF_MAX
+
+#starttype DFBInputEvent
+#field clazz , <DFBEventClass>
+#field type , <DFBInputEventType>
+#field device_id , <DFBInputDeviceID>
+#field flags , <DFBInputEventFlags>
+#field timestamp , <timeval>
+#field key_code , CInt
+#field key_id , <DFBInputDeviceKeyIdentifier>
+#field key_symbol , <DFBInputDeviceKeySymbol>
+#field modifiers , <DFBInputDeviceModifierMask>
+#field locks , <DFBInputDeviceLockState>
+#field button , <DFBInputDeviceButtonIdentifier>
+#field buttons , <DFBInputDeviceButtonMask>
+#field axis , <DFBInputDeviceAxisIdentifier>
+#field axisabs , CInt
+#field axisrel , CInt
+#field min , CInt
+#field max , CInt
+#stoptype
+
+#integral_t DFBWindowEventType
+
+#num DWET_NONE
+#num DWET_POSITION
+#num DWET_SIZE
+#num DWET_CLOSE
+#num DWET_DESTROYED
+#num DWET_GOTFOCUS
+#num DWET_LOSTFOCUS
+#num DWET_KEYDOWN
+#num DWET_KEYUP
+#num DWET_BUTTONDOWN
+#num DWET_BUTTONUP
+#num DWET_MOTION
+#num DWET_ENTER
+#num DWET_LEAVE
+#num DWET_WHEEL
+#num DWET_POSITION_SIZE
+#num DWET_ALL
+
+#integral_t DFBWindowEventFlags
+
+#num DWEF_NONE
+#num DWEF_RETURNED
+#num DWEF_ALL
+
+#integral_t DFBVideoProviderEventType
+
+#num DVPET_NONE
+#num DVPET_STARTED
+#num DVPET_STOPPED
+#num DVPET_SPEEDCHANGE
+#num DVPET_STREAMCHANGE
+#num DVPET_FATALERROR
+#num DVPET_FINISHED
+#num DVPET_SURFACECHANGE
+#num DVPET_FRAMEDECODED
+#num DVPET_FRAMEDISPLAYED
+#num DVPET_DATAEXHAUSTED
+#num DVPET_VIDEOACTION
+#num DVPET_DATALOW
+#num DVPET_DATAHIGH
+#num DVPET_BUFFERTIMELOW
+#num DVPET_BUFFERTIMEHIGH
+#num DVPET_ALL
+
+#starttype DFBWindowEvent
+#field clazz , <DFBEventClass>
+#field type , <DFBWindowEventType>
+#field flags , <DFBWindowEventFlags>
+#field window_id , <DFBWindowID>
+#field x , CInt
+#field y , CInt
+#field cx , CInt
+#field cy , CInt
+#field step , CInt
+#field w , CInt
+#field h , CInt
+#field key_code , CInt
+#field key_id , <DFBInputDeviceKeyIdentifier>
+#field key_symbol , <DFBInputDeviceKeySymbol>
+#field modifiers , <DFBInputDeviceModifierMask>
+#field locks , <DFBInputDeviceLockState>
+#field button , <DFBInputDeviceButtonIdentifier>
+#field buttons , <DFBInputDeviceButtonMask>
+#field timestamp , <timeval>
+#stoptype
+
+#integral_t DFBVideoProviderEventDataSubType
+
+#num DVPEDST_UNKNOWN
+#num DVPEDST_AUDIO
+#num DVPEDST_VIDEO
+#num DVPEDST_DATA
+#num DVPEDST_ALL
+
+#starttype DFBVideoProviderEvent
+#field clazz , <DFBEventClass>
+#field type , <DFBVideoProviderEventType>
+#field data_type , <DFBVideoProviderEventDataSubType>
+#flexible_array_member data , CInt
+#stoptype
+
+#starttype DFBUserEvent
+#field clazz , <DFBEventClass>
+#field type , CUInt
+#field data , Ptr ()
+#stoptype
+
+#starttype DFBUniversalEvent
+#field clazz , <DFBEventClass>
+#field size , CUInt
+#stoptype
+
+#starttype DFBEvent
+#field clazz , <DFBEventClass>
+#field input , <DFBInputEvent>
+#field window , <DFBWindowEvent>
+#field user , <DFBUserEvent>
+#field universal , <DFBUniversalEvent>
+#field videoprovider , <DFBVideoProviderEvent>
+#stoptype
+
+#starttype DFBEventBufferStats
+#field num_events , CUInt
+#field DFEC_INPUT , CUInt
+#field DFEC_WINDOW , CUInt
+#field DFEC_USER , CUInt
+#field DFEC_UNIVERSAL , CUInt
+#field DFEC_VIDEOPROVIDER , CUInt
+#field DIET_KEYPRESS , CUInt
+#field DIET_KEYRELEASE , CUInt
+#field DIET_BUTTONPRESS , CUInt
+#field DIET_BUTTONRELEASE , CUInt
+#field DIET_AXISMOTION , CUInt
+#field DWET_POSITION , CUInt
+#field DWET_SIZE , CUInt
+#field DWET_CLOSE , CUInt
+#field DWET_DESTROYED , CUInt
+#field DWET_GOTFOCUS , CUInt
+#field DWET_LOSTFOCUS , CUInt
+#field DWET_KEYDOWN , CUInt
+#field DWET_KEYUP , CUInt
+#field DWET_BUTTONDOWN , CUInt
+#field DWET_BUTTONUP , CUInt
+#field DWET_MOTION , CUInt
+#field DWET_ENTER , CUInt
+#field DWET_LEAVE , CUInt
+#field DWET_WHEEL , CUInt
+#field DWET_POSITION_SIZE , CUInt
+#field DVPET_STARTED , CUInt
+#field DVPET_STOPPED , CUInt
+#field DVPET_SPEEDCHANGE , CUInt
+#field DVPET_STREAMCHANGE , CUInt
+#field DVPET_FATALERROR , CUInt
+#field DVPET_FINISHED , CUInt
+#field DVPET_SURFACECHANGE , CUInt
+#field DVPET_FRAMEDECODED , CUInt
+#field DVPET_FRAMEDISPLAYED , CUInt
+#field DVPET_DATAEXHAUSTED , CUInt
+#field DVPET_DATALOW , CUInt
+#field DVPET_VIDEOACTION , CUInt
+#field DVPET_DATAHIGH , CUInt
+#field DVPET_BUFFERTIMELOW , CUInt
+#field DVPET_BUFFERTIMEHIGH , CUInt
+#stoptype
+
+#integral_t DFBWindowKeySelection
+
+#num DWKS_ALL
+#num DWKS_NONE
+#num DWKS_LIST
+
+#integral_t DFBWindowGeometryMode
+
+#num DWGM_DEFAULT
+#num DWGM_FOLLOW
+#num DWGM_RECTANGLE
+#num DWGM_LOCATION
+
+#starttype DFBWindowGeometry
+#field mode , <DFBWindowGeometryMode>
+#field rectangle , <DFBRectangle>
+#field location , <DFBLocation>
+#stoptype
+
+#callback DFBTextEncodingCallback , <DFBTextEncodingID> -> \
+  CString -> Ptr () -> IO <DFBEnumerationResult>
+
+#integral_t DFBImageCapabilities
+
+#num DICAPS_NONE
+#num DICAPS_ALPHACHANNEL
+#num DICAPS_COLORKEY
+
+#starttype DFBImageDescription
+#field caps , <DFBImageCapabilities>
+#field colorkey_r , Word8
+#field colorkey_g , Word8
+#field colorkey_b , Word8
+#stoptype
+
+#integral_t DIRenderCallbackResult
+
+#num DIRCR_OK
+#num DIRCR_ABORT
+
+#callback DIRenderCallback , Ptr <DFBRectangle> -> \
+    Ptr () -> IO <DIRenderCallbackResult>
+
+#integral_t DFBStreamCapabilities
+
+#num DVSCAPS_NONE
+#num DVSCAPS_VIDEO
+#num DVSCAPS_AUDIO
+
+#num DFB_STREAM_DESC_ENCODING_LENGTH
+#num DFB_STREAM_DESC_TITLE_LENGTH
+#num DFB_STREAM_DESC_AUTHOR_LENGTH
+#num DFB_STREAM_DESC_ALBUM_LENGTH
+#num DFB_STREAM_DESC_GENRE_LENGTH
+#num DFB_STREAM_DESC_COMMENT_LENGTH
+
+#starttype DFBStreamDescription
+#field caps , <DFBStreamCapabilities>
+#array_field video.encoding , CChar
+#field video.framerate , CDouble
+#field video.aspect , CDouble
+#field video.bitrate , CInt
+#field video.afd , CInt
+#field video.width , CInt
+#field video.height , CInt
+#array_field audio.encoding , CChar
+#field audio.samplerate , CInt
+#field audio.channels , CInt
+#field audio.bitrate , CInt
+#array_field title , CChar
+#array_field author , CChar
+#array_field album , CChar
+#field year , CShort
+#array_field genre , CChar
+#array_field comment , CChar
+#stoptype
+
+#integral_t DFBStreamFormat
+
+#num DSF_ES
+#num DSF_PES
+
+#starttype DFBStreamAttributes
+#array_field video.encoding , CChar
+#field video.format , <DFBStreamFormat>
+#array_field audio.encoding , CChar
+#field audio.format , <DFBStreamFormat>
+#stoptype
+
+#starttype DFBBufferOccupancy
+#field valid , <DFBStreamCapabilities>
+#field video.buffer_size , CUInt
+#field video.minimum_level , CUInt
+#field video.maximum_level , CUInt
+#field video.current_level , CUInt
+#field audio.buffer_size , CUInt
+#field audio.minimum_level , CUInt
+#field audio.maximum_level , CUInt
+#field audio.current_level , CUInt
+#stoptype
+
+#starttype DFBBufferThresholds
+#field selection , <DFBStreamCapabilities>
+#field video.minimum_level , CUInt
+#field video.maximum_level , CUInt
+#field video.minimum_time , CUInt
+#field video.maximum_time , CUInt
+#field audio.minimum_level , CUInt
+#field audio.maximum_level , CUInt
+#field audio.minimum_time , CUInt
+#field audio.maximum_time , CUInt
+#stoptype
+
+#callback DVFrameCallback , Ptr () -> IO ()
+
+#integral_t DFBInputDeviceKeyType
+
+#num DIKT_UNICODE
+#num DIKT_SPECIAL
+#num DIKT_FUNCTION
+#num DIKT_MODIFIER
+#num DIKT_LOCK
+#num DIKT_DEAD
+#num DIKT_CUSTOM
+#num DIKT_IDENTIFIER
+
+#cinline DFB_KEY , <DFBInputDeviceKeyType> -> CInt -> \
+  <DFBInputDeviceKeySymbol>
+#cinline DFB_KEY_TYPE , <DFBInputDeviceKeySymbol> -> \
+  <DFBInputDeviceKeyType>
+#cinline DFB_KEY_IS_ASCII , <DFBInputDeviceKeySymbol> -> CInt
+#cinline DFB_FUNCTION_KEY , CInt -> <DFBInputDeviceKeySymbol>
+#cinline DFB_CUSTOM_KEY , CInt -> <DFBInputDeviceKeySymbol>
+#cinline DFB_LOWER_CASE , <DFBInputDeviceKeySymbol> -> CInt
+#cinline DFB_UPPER_CASE , <DFBInputDeviceKeySymbol> -> CInt
+
+#integral_t DFBInputDeviceModifierKeyIdentifier
+
+#num DIMKI_SHIFT
+#num DIMKI_CONTROL
+#num DIMKI_ALT
+#num DIMKI_ALTGR
+#num DIMKI_META
+#num DIMKI_SUPER
+#num DIMKI_HYPER
+#num DIMKI_FIRST
+#num DIMKI_LAST
+
+#integral_t DFBInputDeviceKeyIdentifier
+
+#num DIKI_UNKNOWN
+#num DIKI_A
+#num DIKI_B
+#num DIKI_C
+#num DIKI_D
+#num DIKI_E
+#num DIKI_F
+#num DIKI_G
+#num DIKI_H
+#num DIKI_I
+#num DIKI_J
+#num DIKI_K
+#num DIKI_L
+#num DIKI_M
+#num DIKI_N
+#num DIKI_O
+#num DIKI_P
+#num DIKI_Q
+#num DIKI_R
+#num DIKI_S
+#num DIKI_T
+#num DIKI_U
+#num DIKI_V
+#num DIKI_W
+#num DIKI_X
+#num DIKI_Y
+#num DIKI_Z
+#num DIKI_0
+#num DIKI_1
+#num DIKI_2
+#num DIKI_3
+#num DIKI_4
+#num DIKI_5
+#num DIKI_6
+#num DIKI_7
+#num DIKI_8
+#num DIKI_9
+#num DIKI_F1
+#num DIKI_F2
+#num DIKI_F3
+#num DIKI_F4
+#num DIKI_F5
+#num DIKI_F6
+#num DIKI_F7
+#num DIKI_F8
+#num DIKI_F9
+#num DIKI_F10
+#num DIKI_F11
+#num DIKI_F12
+#num DIKI_SHIFT_L
+#num DIKI_SHIFT_R
+#num DIKI_CONTROL_L
+#num DIKI_CONTROL_R
+#num DIKI_ALT_L
+#num DIKI_ALT_R
+#num DIKI_META_L
+#num DIKI_META_R
+#num DIKI_SUPER_L
+#num DIKI_SUPER_R
+#num DIKI_HYPER_L
+#num DIKI_HYPER_R
+#num DIKI_CAPS_LOCK
+#num DIKI_NUM_LOCK
+#num DIKI_SCROLL_LOCK
+#num DIKI_ESCAPE
+#num DIKI_LEFT
+#num DIKI_RIGHT
+#num DIKI_UP
+#num DIKI_DOWN
+#num DIKI_TAB
+#num DIKI_ENTER
+#num DIKI_SPACE
+#num DIKI_BACKSPACE
+#num DIKI_INSERT
+#num DIKI_DELETE
+#num DIKI_HOME
+#num DIKI_END
+#num DIKI_PAGE_UP
+#num DIKI_PAGE_DOWN
+#num DIKI_PRINT
+#num DIKI_PAUSE
+#num DIKI_QUOTE_LEFT
+#num DIKI_MINUS_SIGN
+#num DIKI_EQUALS_SIGN
+#num DIKI_BRACKET_LEFT
+#num DIKI_BRACKET_RIGHT
+#num DIKI_BACKSLASH
+#num DIKI_SEMICOLON
+#num DIKI_QUOTE_RIGHT
+#num DIKI_COMMA
+#num DIKI_PERIOD
+#num DIKI_SLASH
+#num DIKI_LESS_SIGN
+#num DIKI_KP_DIV
+#num DIKI_KP_MULT
+#num DIKI_KP_MINUS
+#num DIKI_KP_PLUS
+#num DIKI_KP_ENTER
+#num DIKI_KP_SPACE
+#num DIKI_KP_TAB
+#num DIKI_KP_F1
+#num DIKI_KP_F2
+#num DIKI_KP_F3
+#num DIKI_KP_F4
+#num DIKI_KP_EQUAL
+#num DIKI_KP_SEPARATOR
+#num DIKI_KP_DECIMAL
+#num DIKI_KP_0
+#num DIKI_KP_1
+#num DIKI_KP_2
+#num DIKI_KP_3
+#num DIKI_KP_4
+#num DIKI_KP_5
+#num DIKI_KP_6
+#num DIKI_KP_7
+#num DIKI_KP_8
+#num DIKI_KP_9
+#num DIKI_KEYDEF_END
+
+#integral_t DFBInputDeviceKeySymbol
+
+#num DIKS_NULL
+#num DIKS_BACKSPACE
+#num DIKS_TAB
+#num DIKS_RETURN
+#num DIKS_CANCEL
+#num DIKS_ESCAPE
+#num DIKS_SPACE
+#num DIKS_EXCLAMATION_MARK
+#num DIKS_QUOTATION
+#num DIKS_NUMBER_SIGN
+#num DIKS_DOLLAR_SIGN
+#num DIKS_PERCENT_SIGN
+#num DIKS_AMPERSAND
+#num DIKS_APOSTROPHE
+#num DIKS_PARENTHESIS_LEFT
+#num DIKS_PARENTHESIS_RIGHT
+#num DIKS_ASTERISK
+#num DIKS_PLUS_SIGN
+#num DIKS_COMMA
+#num DIKS_MINUS_SIGN
+#num DIKS_PERIOD
+#num DIKS_SLASH
+#num DIKS_0
+#num DIKS_1
+#num DIKS_2
+#num DIKS_3
+#num DIKS_4
+#num DIKS_5
+#num DIKS_6
+#num DIKS_7
+#num DIKS_8
+#num DIKS_9
+#num DIKS_COLON
+#num DIKS_SEMICOLON
+#num DIKS_LESS_THAN_SIGN
+#num DIKS_EQUALS_SIGN
+#num DIKS_GREATER_THAN_SIGN
+#num DIKS_QUESTION_MARK
+#num DIKS_AT
+#num DIKS_CAPITAL_A
+#num DIKS_CAPITAL_B
+#num DIKS_CAPITAL_C
+#num DIKS_CAPITAL_D
+#num DIKS_CAPITAL_E
+#num DIKS_CAPITAL_F
+#num DIKS_CAPITAL_G
+#num DIKS_CAPITAL_H
+#num DIKS_CAPITAL_I
+#num DIKS_CAPITAL_J
+#num DIKS_CAPITAL_K
+#num DIKS_CAPITAL_L
+#num DIKS_CAPITAL_M
+#num DIKS_CAPITAL_N
+#num DIKS_CAPITAL_O
+#num DIKS_CAPITAL_P
+#num DIKS_CAPITAL_Q
+#num DIKS_CAPITAL_R
+#num DIKS_CAPITAL_S
+#num DIKS_CAPITAL_T
+#num DIKS_CAPITAL_U
+#num DIKS_CAPITAL_V
+#num DIKS_CAPITAL_W
+#num DIKS_CAPITAL_X
+#num DIKS_CAPITAL_Y
+#num DIKS_CAPITAL_Z
+#num DIKS_SQUARE_BRACKET_LEFT
+#num DIKS_BACKSLASH
+#num DIKS_SQUARE_BRACKET_RIGHT
+#num DIKS_CIRCUMFLEX_ACCENT
+#num DIKS_UNDERSCORE
+#num DIKS_GRAVE_ACCENT
+#num DIKS_SMALL_A
+#num DIKS_SMALL_B
+#num DIKS_SMALL_C
+#num DIKS_SMALL_D
+#num DIKS_SMALL_E
+#num DIKS_SMALL_F
+#num DIKS_SMALL_G
+#num DIKS_SMALL_H
+#num DIKS_SMALL_I
+#num DIKS_SMALL_J
+#num DIKS_SMALL_K
+#num DIKS_SMALL_L
+#num DIKS_SMALL_M
+#num DIKS_SMALL_N
+#num DIKS_SMALL_O
+#num DIKS_SMALL_P
+#num DIKS_SMALL_Q
+#num DIKS_SMALL_R
+#num DIKS_SMALL_S
+#num DIKS_SMALL_T
+#num DIKS_SMALL_U
+#num DIKS_SMALL_V
+#num DIKS_SMALL_W
+#num DIKS_SMALL_X
+#num DIKS_SMALL_Y
+#num DIKS_SMALL_Z
+#num DIKS_CURLY_BRACKET_LEFT
+#num DIKS_VERTICAL_BAR
+#num DIKS_CURLY_BRACKET_RIGHT
+#num DIKS_TILDE
+#num DIKS_DELETE
+#num DIKS_ENTER
+#num DIKS_CURSOR_LEFT
+#num DIKS_CURSOR_RIGHT
+#num DIKS_CURSOR_UP
+#num DIKS_CURSOR_DOWN
+#num DIKS_INSERT
+#num DIKS_HOME
+#num DIKS_END
+#num DIKS_PAGE_UP
+#num DIKS_PAGE_DOWN
+#num DIKS_PRINT
+#num DIKS_PAUSE
+#num DIKS_OK
+#num DIKS_SELECT
+#num DIKS_GOTO
+#num DIKS_CLEAR
+#num DIKS_POWER
+#num DIKS_POWER2
+#num DIKS_OPTION
+#num DIKS_MENU
+#num DIKS_HELP
+#num DIKS_INFO
+#num DIKS_TIME
+#num DIKS_VENDOR
+#num DIKS_ARCHIVE
+#num DIKS_PROGRAM
+#num DIKS_CHANNEL
+#num DIKS_FAVORITES
+#num DIKS_EPG
+#num DIKS_PVR
+#num DIKS_MHP
+#num DIKS_LANGUAGE
+#num DIKS_TITLE
+#num DIKS_SUBTITLE
+#num DIKS_ANGLE
+#num DIKS_ZOOM
+#num DIKS_MODE
+#num DIKS_KEYBOARD
+#num DIKS_PC
+#num DIKS_SCREEN
+#num DIKS_TV
+#num DIKS_TV2
+#num DIKS_VCR
+#num DIKS_VCR2
+#num DIKS_SAT
+#num DIKS_SAT2
+#num DIKS_CD
+#num DIKS_TAPE
+#num DIKS_RADIO
+#num DIKS_TUNER
+#num DIKS_PLAYER
+#num DIKS_TEXT
+#num DIKS_DVD
+#num DIKS_AUX
+#num DIKS_MP3
+#num DIKS_PHONE
+#num DIKS_AUDIO
+#num DIKS_VIDEO
+#num DIKS_INTERNET
+#num DIKS_MAIL
+#num DIKS_NEWS
+#num DIKS_DIRECTORY
+#num DIKS_LIST
+#num DIKS_CALCULATOR
+#num DIKS_MEMO
+#num DIKS_CALENDAR
+#num DIKS_EDITOR
+#num DIKS_RED
+#num DIKS_GREEN
+#num DIKS_YELLOW
+#num DIKS_BLUE
+#num DIKS_CHANNEL_UP
+#num DIKS_CHANNEL_DOWN
+#num DIKS_BACK
+#num DIKS_FORWARD
+#num DIKS_FIRST
+#num DIKS_LAST
+#num DIKS_VOLUME_UP
+#num DIKS_VOLUME_DOWN
+#num DIKS_MUTE
+#num DIKS_AB
+#num DIKS_PLAYPAUSE
+#num DIKS_PLAY
+#num DIKS_STOP
+#num DIKS_RESTART
+#num DIKS_SLOW
+#num DIKS_FAST
+#num DIKS_RECORD
+#num DIKS_EJECT
+#num DIKS_SHUFFLE
+#num DIKS_REWIND
+#num DIKS_FASTFORWARD
+#num DIKS_PREVIOUS
+#num DIKS_NEXT
+#num DIKS_BEGIN
+#num DIKS_DIGITS
+#num DIKS_TEEN
+#num DIKS_TWEN
+#num DIKS_BREAK
+#num DIKS_EXIT
+#num DIKS_SETUP
+#num DIKS_CURSOR_LEFT_UP
+#num DIKS_CURSOR_LEFT_DOWN
+#num DIKS_CURSOR_UP_RIGHT
+#num DIKS_CURSOR_DOWN_RIGHT
+#num DIKS_F1
+#num DIKS_F2
+#num DIKS_F3
+#num DIKS_F4
+#num DIKS_F5
+#num DIKS_F6
+#num DIKS_F7
+#num DIKS_F8
+#num DIKS_F9
+#num DIKS_F10
+#num DIKS_F11
+#num DIKS_F12
+#num DIKS_SHIFT
+#num DIKS_CONTROL
+#num DIKS_ALT
+#num DIKS_ALTGR
+#num DIKS_META
+#num DIKS_SUPER
+#num DIKS_HYPER
+#num DIKS_CAPS_LOCK
+#num DIKS_NUM_LOCK
+#num DIKS_SCROLL_LOCK
+#num DIKS_DEAD_ABOVEDOT
+#num DIKS_DEAD_ABOVERING
+#num DIKS_DEAD_ACUTE
+#num DIKS_DEAD_BREVE
+#num DIKS_DEAD_CARON
+#num DIKS_DEAD_CEDILLA
+#num DIKS_DEAD_CIRCUMFLEX
+#num DIKS_DEAD_DIAERESIS
+#num DIKS_DEAD_DOUBLEACUTE
+#num DIKS_DEAD_GRAVE
+#num DIKS_DEAD_IOTA
+#num DIKS_DEAD_MACRON
+#num DIKS_DEAD_OGONEK
+#num DIKS_DEAD_SEMIVOICED_SOUND
+#num DIKS_DEAD_TILDE
+#num DIKS_DEAD_VOICED_SOUND
+#num DIKS_CUSTOM0
+#num DIKS_CUSTOM1
+#num DIKS_CUSTOM2
+#num DIKS_CUSTOM3
+#num DIKS_CUSTOM4
+#num DIKS_CUSTOM5
+#num DIKS_CUSTOM6
+#num DIKS_CUSTOM7
+#num DIKS_CUSTOM8
+#num DIKS_CUSTOM9
+#num DIKS_CUSTOM10
+#num DIKS_CUSTOM11
+#num DIKS_CUSTOM12
+#num DIKS_CUSTOM13
+#num DIKS_CUSTOM14
+#num DIKS_CUSTOM15
+#num DIKS_CUSTOM16
+#num DIKS_CUSTOM17
+#num DIKS_CUSTOM18
+#num DIKS_CUSTOM19
+#num DIKS_CUSTOM20
+#num DIKS_CUSTOM21
+#num DIKS_CUSTOM22
+#num DIKS_CUSTOM23
+#num DIKS_CUSTOM24
+#num DIKS_CUSTOM25
+#num DIKS_CUSTOM26
+#num DIKS_CUSTOM27
+#num DIKS_CUSTOM28
+#num DIKS_CUSTOM29
+#num DIKS_CUSTOM30
+#num DIKS_CUSTOM31
+#num DIKS_CUSTOM32
+#num DIKS_CUSTOM33
+#num DIKS_CUSTOM34
+#num DIKS_CUSTOM35
+#num DIKS_CUSTOM36
+#num DIKS_CUSTOM37
+#num DIKS_CUSTOM38
+#num DIKS_CUSTOM39
+#num DIKS_CUSTOM40
+#num DIKS_CUSTOM41
+#num DIKS_CUSTOM42
+#num DIKS_CUSTOM43
+#num DIKS_CUSTOM44
+#num DIKS_CUSTOM45
+#num DIKS_CUSTOM46
+#num DIKS_CUSTOM47
+#num DIKS_CUSTOM48
+#num DIKS_CUSTOM49
+#num DIKS_CUSTOM50
+#num DIKS_CUSTOM51
+#num DIKS_CUSTOM52
+#num DIKS_CUSTOM53
+#num DIKS_CUSTOM54
+#num DIKS_CUSTOM55
+#num DIKS_CUSTOM56
+#num DIKS_CUSTOM57
+#num DIKS_CUSTOM58
+#num DIKS_CUSTOM59
+#num DIKS_CUSTOM60
+#num DIKS_CUSTOM61
+#num DIKS_CUSTOM62
+#num DIKS_CUSTOM63
+#num DIKS_CUSTOM64
+#num DIKS_CUSTOM65
+#num DIKS_CUSTOM66
+#num DIKS_CUSTOM67
+#num DIKS_CUSTOM68
+#num DIKS_CUSTOM69
+#num DIKS_CUSTOM70
+#num DIKS_CUSTOM71
+#num DIKS_CUSTOM72
+#num DIKS_CUSTOM73
+#num DIKS_CUSTOM74
+#num DIKS_CUSTOM75
+#num DIKS_CUSTOM76
+#num DIKS_CUSTOM77
+#num DIKS_CUSTOM78
+#num DIKS_CUSTOM79
+#num DIKS_CUSTOM80
+#num DIKS_CUSTOM81
+#num DIKS_CUSTOM82
+#num DIKS_CUSTOM83
+#num DIKS_CUSTOM84
+#num DIKS_CUSTOM85
+#num DIKS_CUSTOM86
+#num DIKS_CUSTOM87
+#num DIKS_CUSTOM88
+#num DIKS_CUSTOM89
+#num DIKS_CUSTOM90
+#num DIKS_CUSTOM91
+#num DIKS_CUSTOM92
+#num DIKS_CUSTOM93
+#num DIKS_CUSTOM94
+#num DIKS_CUSTOM95
+#num DIKS_CUSTOM96
+#num DIKS_CUSTOM97
+#num DIKS_CUSTOM98
+#num DIKS_CUSTOM99
+
+#integral_t DFBInputDeviceLockState
+
+#num DILS_SCROLL
+#num DILS_NUM
+#num DILS_CAPS
+
+#integral_t DFBInputDeviceKeymapSymbolIndex
+
+#num DIKSI_BASE
+#num DIKSI_BASE_SHIFT
+#num DIKSI_ALT
+#num DIKSI_ALT_SHIFT
+#num DIKSI_LAST
+
+#starttype DFBInputDeviceKeymapEntry
+#field code , CInt
+#field locks , <DFBInputDeviceLockState>
+#field identifier , <DFBInputDeviceKeyIdentifier>
+#array_field symbols , <DFBInputDeviceKeySymbol>
+#stoptype
+
+#num DIRECTFBGL_INTERFACE_VERSION
+
+#starttype DFBGLAttributes
+#field buffer_size , CInt
+#field depth_size , CInt
+#field stencil_size , CInt
+#field aux_buffers , CInt
+#field red_size , CInt
+#field green_size , CInt
+#field blue_size , CInt
+#field alpha_size , CInt
+#field accum_red_size , CInt
+#field accum_green_size , CInt
+#field accum_blue_size , CInt
+#field accum_alpha_size , CInt
+#field double_buffer , <DFBBoolean>
+#field stereo , <DFBBoolean>
+#stoptype
+
diff --git a/src/inlines.c b/src/inlines.c
new file mode 100644
--- /dev/null
+++ b/src/inlines.c
@@ -0,0 +1,2 @@
+#include <directfb.h>
+
