packages feed

lhc-0.6.20081210.1: lib/base/src/Foreign/C/OldString.hs

module Foreign.C.String where

import Char
import Foreign.C.Types
import Foreign.Marshal.Array
import Foreign.Ptr
import Data.Word

type CString = Ptr CChar
type CStringLen = (Ptr CChar, Int)

nUL :: CChar
nUL = 0

peekCString :: CString -> IO String
peekCString cp = do
    cs <- peekArray0 nUL cp
    return (cCharsToChars cs)

-- TODO UTF8
-- cast [CChar] to [Char]
--
cCharsToChars :: [CChar] -> [Char]
cCharsToChars xs  = map castCCharToChar xs

-- cast [Char] to [CChar]
--
charsToCChars :: [Char] -> [CChar]
charsToCChars xs  = map castCharToCChar xs

castCCharToChar :: CChar -> Char
castCCharToChar ch = chr (fromIntegral (fromIntegral ch :: Word8))

castCharToCChar :: Char -> CChar
castCharToCChar ch = fromIntegral (ord ch)