# HG changeset patch # User unc0rr # Date 1403121191 -14400 # Node ID e2dba215655ad8febac451adec4bb2b6707a566d # Parent 1eaae604d7a43537edf6cfaa097fa66b37c76c41 Compressing and encoding diff -r 1eaae604d7a4 -r e2dba215655a tools/hwmap.hs --- a/tools/hwmap.hs Wed Jun 18 17:23:43 2014 +0200 +++ b/tools/hwmap.hs Wed Jun 18 23:53:11 2014 +0400 @@ -1,11 +1,16 @@ module Main where +import qualified Data.ByteString.Char8 as B +import qualified Data.ByteString as BW import qualified Data.ByteString.Lazy as BL +import qualified Codec.Binary.Base64 as Base64 import Data.Word import Data.Int import Data.Binary +import Data.Binary.Put import Data.Bits import Control.Monad +import qualified Codec.Compression.Zlib as Z data LineType = Solid | Erasing deriving Eq @@ -15,18 +20,25 @@ instance Binary Chunk where put (Line lt r ((x1, y1):ps)) = do let flags = r .|. (if lt == Solid then 0 else (1 `shift` 6)) - putWord8 $ flags .|. (1 `shift` 7) put x1 put y1 + putWord8 $ flags .|. (1 `shift` 7) forM_ ps $ \(x, y) -> do - putWord8 flags put x put y + putWord8 flags get = undefined -mapString = BL.drop 8 . encode $ - [ +compressWithLength :: BL.ByteString -> BL.ByteString +compressWithLength b = BL.drop 8 . encode . runPut $ do + put $ ((fromIntegral $ BL.length b)::Word32) + mapM_ putWord8 $ BW.unpack $ BL.toStrict $ Z.compress b + +mapString :: B.ByteString +mapString = B.pack . Base64.encode . BW.unpack . BL.toStrict . compressWithLength . BL.drop 8 . encode $ drawnMap + +main = B.writeFile "out.hwmap" mapString + +drawnMap = [ Line Solid 7 [(0, 0), (2048, 1024), (1024, 768)] ] - -main = BL.writeFile "out.hwmap" mapString