Skip to content

Instantly share code, notes, and snippets.

@coreyoconnor
Created November 20, 2008 20:08
Show Gist options
  • Save coreyoconnor/27168 to your computer and use it in GitHub Desktop.
Save coreyoconnor/27168 to your computer and use it in GitHub Desktop.
module Main where
import Language.C
import Language.C.System.GCC
import Control.Monad
import Data.Maybe
import Data.IORef
main = do
r <- parseCFile (newGCC "gcc") Nothing [] "raw_data_dump.h"
client_data_ref <- newIORef []
server_data_ref <- newIORef []
case r of
Left error -> putStrLn $ show error
Right (CTranslUnit ext_decls node_info) -> do
forM_ ext_decls $ \ext_decl -> do
case ext_decl of
CDeclExt (CDecl _ v_specs _) -> do
forM_ v_specs $ \(Just d, Just i,_ ) -> do
let value_def = show $ pretty i
value_def' = drop 2 value_def
value_def'' = take (length value_def' - 2) value_def' ++ ",\n"
case (show $ pretty d) of
"peer0_0[]" -> modifyIORef client_data_ref $ \client_data -> client_data ++ value_def''
"peer1_0[]" -> modifyIORef server_data_ref $ \server_data -> server_data ++ value_def''
_ -> error "Crap"
client_data <- readIORef client_data_ref
server_data <- readIORef server_data_ref
putStrLn $ "#include <stdint.h>\n"
putStrLn $ "uint8_t client_data [] = {\n" ++ client_data ++ "\n};"
putStrLn $ "uint8_t server_data [] = {\n" ++ server_data ++ "\n};"
return ()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment