Skip to content

Commit

Permalink
DO some more binding
Browse files Browse the repository at this point in the history
  • Loading branch information
PPKFS committed May 21, 2024
1 parent 3ae581b commit aec73ec
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 10 deletions.
2 changes: 1 addition & 1 deletion bearmonadterminal/bearmonadterminal.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ library
hs-source-dirs: src
other-modules:
BearMonadTerminal
BearMonadTerminal.Raw
BearLibTerminal.Raw
extra-libraries: stdc++ BearLibTerminal
include-dirs:
cbits/
Expand Down
5 changes: 5 additions & 0 deletions bearmonadterminal/cbits/BearMonadTerminal.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@
#include "BearLibTerminal.h"
#include <string.h>

void terminal_color_from_name(const char* name)
{
terminal_color(color_from_name(name));
}

void terminal_print_ptr(int x, int y, const char* s, dimensions_t* dim)
{
dimensions_t d = terminal_print(x, y, s);
Expand Down
Empty file.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{-# LANGUAGE CApiFFI #-}
{-# LANGUAGE RecordWildCards #-}

module BearMonadTerminal.Raw where
module BearLibTerminal.Raw where

import Foreign.C.Types
import Foreign.C.String
Expand All @@ -10,6 +10,8 @@ import Foreign.Storable
import Control.Monad.IO.Class
import Data.ByteString
import qualified Data.ByteString as BS
import Data.Text (Text)
import qualified Data.Text.Foreign as TF

data Dimensions = Dimensions
{ width :: Int
Expand Down Expand Up @@ -42,13 +44,23 @@ terminalClose = liftIO c_terminal_close

foreign import capi safe "BearLibTerminal.h terminal_set" c_terminal_set :: CString -> IO CInt

bsToCString :: MonadIO m => (CString -> IO Bool) -> ByteString -> m Bool
bsToCString f = liftIO . flip BS.useAsCString f

textToCString :: MonadIO m => (CString -> IO Bool) -> Text -> m Bool
textToCString f = liftIO . flip TF.withCString f

terminalSetCString :: MonadIO m => CString -> m Bool
terminalSetCString = liftIO . (fmap asBool . c_terminal_set)

terminalSetBS :: MonadIO m => ByteString -> m Bool
terminalSetBS = liftIO . flip BS.useAsCString terminalSetCString
terminalSetBS = bsToCString terminalSetCString

terminalSetText :: MonadIO m => Text -> m Bool
terminalSetText = textToCString terminalSetCString

foreign import capi safe "BearLibTerminal.h terminal_color" c_terminal_color :: CUInt -> IO ()
foreign import capi safe "BearLibTerminal.h terminal_color" c_terminal_color_uint :: CUInt -> IO ()
foreign import capi safe "BearLibTerminal.h terminal_color" c_terminal_color_from_name :: CString -> IO ()

--terminalColorUInt ::
foreign import capi safe "BearLibTerminal.h terminal_bkcolor" c_terminal_bkcolor :: CUInt -> IO ()
Expand Down Expand Up @@ -80,7 +92,7 @@ foreign import capi safe "BearLibTerminal.h terminal_has_input" c_terminal_has_i
foreign import capi safe "BearLibTerminal.h terminal_read" c_terminal_read :: IO CInt
foreign import capi safe "BearLibTerminal.h terminal_peek" c_terminal_peek :: IO CInt
-- also read_wstr
foreign import capi safe "BearLibTerminal.h terminal_read_str" c_read_str :: CInt -> CInt -> Ptr CUChar -> CInt -> IO CUInt
foreign import capi safe "BearLibTerminal.h terminal_read_str" c_read_str :: CInt -> CInt -> Ptr CChar -> CInt -> IO CUInt
foreign import capi safe "BearLibTerminal.h terminal_delay" c_terminal_delay :: CInt -> IO ()

-- not bothering with: color_from_name, color_from_argb
Expand Down
23 changes: 18 additions & 5 deletions bearmonadterminal/src/BearMonadTerminal.hs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import Foreign.Marshal.Alloc
import Foreign.Storable
import qualified Data.Text.Lazy.Encoding as LT
import qualified Data.ByteString as BS
import qualified Data.Text.Internal.StrictBuilder as B
import qualified Data.Text.Lazy as TL

class BearLibConfigString s where
toConfigString :: s -> LT.Builder
Expand Down Expand Up @@ -49,6 +49,9 @@ instance BearLibConfigString ConfigOption where
toByteString :: BearLibConfigString c => c -> BS.ByteString
toByteString = BS.toStrict . LT.encodeUtf8 . LT.toLazyText . toConfigString

terminalSet :: MonadIO m => BearLibConfigString c => c -> m Bool
terminalSet = terminalSetText . TL.toStrict . LT.toLazyText . toConfigString

data WindowOptions = WindowOptions
{ size :: Maybe (Int, Int)
, cellsize :: Maybe Cellsize
Expand Down Expand Up @@ -100,10 +103,20 @@ makeWindow = void $ runInBoundThread $ do
c_terminal_close
return ()

initWindow :: MonadIO m => m ()
initWindow = do
initWindow :: MonadIO m => WindowOptions -> m ()
initWindow opts = do
terminalOpen
terminalSet defaultWindowOptions
terminalSet opts
return ()

{-}
liftIO $ c_terminal_refresh
liftIO $ c_terminal_refresh
liftIO $ c_terminal_delay 5000
liftIO $ c_terminal_delay 5000
-}

omniMain :: MonadIO m => m ()
omniMain = do
-- todo: font:default, input filter to keyboard
initWindow defaultWindowOptions { title = Just "Omni: menu" }
terminalColor "white"

0 comments on commit aec73ec

Please sign in to comment.