    {-# LINE 2 "./Media/Streaming/GStreamer/Core/Init.chs" #-}
    -- GIMP Toolkit (GTK) Binding for Haskell: binding to gstreamer -*-haskell-*-
    --
    -- Author : Peter Gavin
    -- Created: 1-Apr-2007
    --
    -- Copyright (c) 2007 Peter Gavin
    --
    -- This library is free software: you can redistribute it and/or
    -- modify it under the terms of the GNU Lesser General Public License
    -- as published by the Free Software Foundation, either version 3 of
    -- the License, or (at your option) any later version.
    --
    -- This library is distributed in the hope that it will be useful,
    -- but WITHOUT ANY WARRANTY; without even the implied warranty of
    -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    -- Lesser General Public License for more details.
    --
    -- You should have received a copy of the GNU Lesser General Public
    -- License along with this program. If not, see
    -- <http:
    --
    -- GStreamer, the C library which this Haskell library depends on, is
    -- available under LGPL Version 2. The documentation included with
    -- this library is based on the original GStreamer documentation.
    --
    -- | Maintainer : gtk2hs-devel@lists.sourceforge.net
    -- Stability : alpha
    -- Portability : portable (depends on GHC)
    module Media.Streaming.GStreamer.Core.Init (
      init,
      initCheck,
      deinit,
      version,
      versionString,

      segtrapIsEnabled,
      segtrapSetEnabled,
      registryForkIsEnabled,
      registryForkSetEnabled,

      updateRegistry

      ) where

    import Control.Exception ( assert )
    import Control.Monad ( liftM )
    import Prelude hiding ( init )
    import System.Glib.FFI
    import System.Glib.GError
    import System.Glib.UTFString ( peekUTFString, withUTFString )
    import Control.Applicative
    import System.Environment

    {-# LINE 57 "./Media/Streaming/GStreamer/Core/Init.chs" #-}

    init :: IO ()
    init = do
      allArgs <- (:) <$> getProgName <*> getArgs
      withMany withUTFString allArgs $ \addrs ->
        withArrayLen addrs $ \argc argv ->
        with argv $ \argvp ->
        with argc $ \argcp -> do
          gst_init (castPtr argcp) (castPtr argvp)

    initCheck :: IO ()
    initCheck =
        propagateGError $ \gErrorPtr ->
            do succeeded <- liftM toBool $
                            gst_init_check nullPtr nullPtr gErrorPtr
               assert (if succeeded
                          then gErrorPtr == nullPtr
                          else gErrorPtr /= nullPtr) $ return ()

    deinit :: IO ()
    deinit =
        gst_deinit
    {-# LINE 80 "./Media/Streaming/GStreamer/Core/Init.chs" #-}

    version :: (Word, Word, Word, Word)
    version =
        unsafePerformIO $
        alloca $ \majorPtr ->
            alloca $ \minorPtr ->
                alloca $ \microPtr ->
                    alloca $ \nanoPtr ->
                        do gst_version majorPtr minorPtr microPtr nanoPtr
                           major <- peek majorPtr
                           minor <- peek minorPtr
                           micro <- peek microPtr
                           nano <- peek nanoPtr
                           return (fromIntegral major,
                                   fromIntegral minor,
                                   fromIntegral micro,
                                   fromIntegral nano)

    versionString :: String
    versionString =
        unsafePerformIO $
        gst_version_string >>= peekUTFString

    segtrapIsEnabled :: IO Bool
    segtrapIsEnabled =
        liftM toBool gst_segtrap_is_enabled
    {-# LINE 107 "./Media/Streaming/GStreamer/Core/Init.chs" #-}

    segtrapSetEnabled :: Bool
                      -> IO ()
    segtrapSetEnabled enabled =
        gst_segtrap_set_enabled $ fromBool enabled

    registryForkIsEnabled :: IO Bool
    registryForkIsEnabled =
        liftM toBool gst_registry_fork_is_enabled
    {-# LINE 116 "./Media/Streaming/GStreamer/Core/Init.chs" #-}

    registryForkSetEnabled :: Bool
                           -> IO ()
    registryForkSetEnabled enabled =
        gst_registry_fork_set_enabled $ fromBool enabled

    updateRegistry :: IO Bool
    updateRegistry =
        liftM toBool gst_update_registry
    {-# LINE 127 "./Media/Streaming/GStreamer/Core/Init.chs" #-}

    foreign import ccall safe "gst_init"
      gst_init :: ((Ptr CInt) -> ((Ptr (Ptr (Ptr CChar))) -> (IO ())))

    foreign import ccall safe "gst_init_check"
      gst_init_check :: ((Ptr CInt) -> ((Ptr (Ptr (Ptr CChar))) -> ((Ptr (Ptr ())) -> (IO CInt))))

    foreign import ccall safe "gst_deinit"
      gst_deinit :: (IO ())

    foreign import ccall safe "gst_version"
      gst_version :: ((Ptr CUInt) -> ((Ptr CUInt) -> ((Ptr CUInt) -> ((Ptr CUInt) -> (IO ())))))

    foreign import ccall safe "gst_version_string"
      gst_version_string :: (IO (Ptr CChar))

    foreign import ccall safe "gst_segtrap_is_enabled"
      gst_segtrap_is_enabled :: (IO CInt)

    foreign import ccall safe "gst_segtrap_set_enabled"
      gst_segtrap_set_enabled :: (CInt -> (IO ()))

    foreign import ccall safe "gst_registry_fork_is_enabled"
      gst_registry_fork_is_enabled :: (IO CInt)

    foreign import ccall safe "gst_registry_fork_set_enabled"
      gst_registry_fork_set_enabled :: (CInt -> (IO ()))

    foreign import ccall safe "gst_update_registry"
      gst_update_registry :: (IO CInt)