packages feed

binsm-0.1.1: Maps.hs

module Maps where

import Data.Int
import Data.Maybe
import Numeric
import Text.Parsec

data Part = Part
	{ start :: Int64
	, end :: Int64
	, name :: String
	} deriving Show

rh = fst . head . readHex

dmesgLine = do
	string "0x"
	st <- many1 hexDigit
	string "-0x"
	en <- many1 hexDigit
	string " : \""
	name <- many $ noneOf "\""
	string "\""
	newline
	return $ Just $ Part (rh st) (rh en) name

emptyLine = newline >> pure Nothing

dmesg :: String -> [Part]
dmesg s = catMaybes $ either (error . show) id $ parse (many1 (dmesgLine <|> emptyLine)) "" s