module Lua.Bytecode5_1.Header where import Debug.Trace import Data.Word import Data.Int import Data.Bits import Data.ByteString import System.IO import Data.Serialize.Get import Lua.Bytecode5_1.Types data Header = Header { versionMajor :: Word8, versionMinor :: Word8, formatVersion :: Word8, bigEndian :: Bool, intBytes :: Word8, size_tBytes :: Word8, instructionBytes :: Word8, lua_NumberBytes :: Word8, floatNums :: Bool } deriving (Show) headerAssert :: Get () headerAssert = do b <- getBytes 4 if pack [0x1b,0x4c,0x75,0x61] /= b then fail "The LUA Signature Header is missing." else return () getHeader :: Get Header getHeader = do --trace "getHeader" (return ()) headerAssert headerBS <- getBytes 8 return $ Header { versionMajor = index headerBS 0 `shiftR` 4 , versionMinor = index headerBS 0 .&. 0xf , formatVersion = index headerBS 1 , bigEndian = index headerBS 2 == 0 , intBytes = index headerBS 3 , size_tBytes = index headerBS 4 , instructionBytes = index headerBS 5 , lua_NumberBytes = index headerBS 6 , floatNums = index headerBS 7 == 0 } instance LuaGet Header where luaGet = getHeader