{-# LINE 1 "src/Stopgap/Graphics/UI/Gtk.hsc" #-}
{-# LANGUAGE BlockArguments #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module Stopgap.Graphics.UI.Gtk where

import Foreign.Ptr
import Foreign.Marshal.Alloc
import Foreign.Marshal.Array
import Foreign.Storable
import Foreign.C.Types
import Foreign.C.String

init :: String -> [String] -> IO ()
init :: String -> [String] -> IO ()
init String
cmd [String]
as = String
-> [String] -> (Ptr CInt -> Ptr (Ptr CString) -> IO ()) -> IO ()
forall a.
String
-> [String] -> (Ptr CInt -> Ptr (Ptr CString) -> IO a) -> IO a
withArgcArgv String
cmd [String]
as Ptr CInt -> Ptr (Ptr CString) -> IO ()
c_gtk_init

withArgcArgv :: String -> [String] -> (Ptr CInt -> Ptr (Ptr CString) -> IO a) -> IO a
withArgcArgv :: forall a.
String
-> [String] -> (Ptr CInt -> Ptr (Ptr CString) -> IO a) -> IO a
withArgcArgv String
cmd [String]
as Ptr CInt -> Ptr (Ptr CString) -> IO a
f = [String] -> ([CString] -> IO a) -> IO a
forall a. [String] -> ([CString] -> IO a) -> IO a
withCStringList (String
cmd String -> [String] -> [String]
forall a. a -> [a] -> [a]
: [String]
as) \[CString]
cas ->
	[CString] -> (Int -> Ptr CString -> IO a) -> IO a
forall a b. Storable a => [a] -> (Int -> Ptr a -> IO b) -> IO b
withArrayLen [CString]
cas \Int
argc Ptr CString
argv ->
		(Ptr CInt -> IO a) -> IO a
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca \Ptr CInt
pargc -> (Ptr (Ptr CString) -> IO a) -> IO a
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca \Ptr (Ptr CString)
pargv -> do
			Ptr CInt -> CInt -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke Ptr CInt
pargc (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
argc)
			Ptr (Ptr CString) -> Ptr CString -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke Ptr (Ptr CString)
pargv Ptr CString
argv
			Ptr CInt -> Ptr (Ptr CString) -> IO a
f Ptr CInt
pargc Ptr (Ptr CString)
pargv

withCStringList :: [String] -> ([CString] -> IO a) -> IO a
withCStringList :: forall a. [String] -> ([CString] -> IO a) -> IO a
withCStringList [] [CString] -> IO a
f = [CString] -> IO a
f []
withCStringList (String
a : [String]
as) [CString] -> IO a
f =
	String -> (CString -> IO a) -> IO a
forall a. String -> (CString -> IO a) -> IO a
withCString String
a \CString
ca -> [String] -> ([CString] -> IO a) -> IO a
forall a. [String] -> ([CString] -> IO a) -> IO a
withCStringList [String]
as \[CString]
cas -> [CString] -> IO a
f ([CString] -> IO a) -> [CString] -> IO a
forall a b. (a -> b) -> a -> b
$ CString
ca CString -> [CString] -> [CString]
forall a. a -> [a] -> [a]
: [CString]
cas

foreign import ccall "gtk_init" c_gtk_init :: Ptr CInt -> Ptr (Ptr CString) -> IO ()

main :: IO ()
main :: IO ()
main = IO ()
c_gtk_main

foreign import ccall "gtk_main" c_gtk_main :: IO ()

mainQuit :: IO ()
mainQuit :: IO ()
mainQuit = IO ()
c_gtk_main_quit

foreign import ccall "gtk_main_quit" c_gtk_main_quit :: IO ()