module CString16 where
import Marshall

-- A quick hack...

type CString16 = CString -- !!

marshallString16 :: [a] -> IO CString
marshallString16 [a]
s = [a] -> Int -> IO CString
forall a. Enum a => [a] -> Int -> IO CString
marshallString16' [a]
s ([a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
s)

marshallString16' :: [a] -> Int -> IO CString
marshallString16' [a]
s Int
n = String -> Int -> IO CString
marshallString' ([a] -> String
forall a a. (Enum a, Enum a) => [a] -> [a]
split [a]
s) (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
  where
    split :: [a] -> [a]
split [] = []
    split (a
c:[a]
cs) = Int -> a
forall a. Enum a => Int -> a
toEnum (Int
i Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` Int
256)a -> [a] -> [a]
forall a. a -> [a] -> [a]
:Int -> a
forall a. Enum a => Int -> a
toEnum (Int
i Int -> Int -> Int
forall a. Integral a => a -> a -> a
`mod` Int
256)a -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a] -> [a]
split [a]
cs
      where i :: Int
i = a -> Int
forall a. Enum a => a -> Int
fromEnum a
c

-- unmarshallString16 = ...