crackNum 2.0 → 2.1
raw patch · 5 files changed
+144/−12 lines, 5 filesdep ~data-binary-ieee754PVP ok
version bump matches the API change (PVP)
Dependency ranges changed: data-binary-ieee754
API changes (from Hackage documentation)
Files
- CHANGES.md +9/−1
- Data/Numbers/CrackNum/Main.hs +46/−7
- README.md +4/−1
- crackNum.cabal +5/−3
- crackNum.vim +80/−0
CHANGES.md view
@@ -1,7 +1,15 @@ * Hackage: <http://hackage.haskell.org/package/crackNum> * GitHub: <http://github.com/LeventErkok/crackNum/> -* Latest Hackage released version: 2.0, 2018-03-17+* Latest Hackage released version: 2.1, 2018-07-20++### Version 2.1, 2018-07-20++ * Support for vi-editor bindings. See the file "crackNum.vim" in the+ distribution or in the github repo You can put "so ~/.vim/crackNum.vim"+ (use the correct path!) and have vi crack numbers directly from inside+ your editor. Simply locate your cursor on a binary/hex stream of digits+ and type ":CrackNum". See the "crackNum.vim" file for binding details. ### Version 2.0, 2018-03-17
Data/Numbers/CrackNum/Main.hs view
@@ -36,6 +36,7 @@ | ToIEEE String -- ^ Convert to IEEE SP/DP value | Lanes String -- ^ Number of lanes present in the input, crackNum can guess but it can also be specified. | Help -- ^ Help+ | VIM -- ^ Are we being called from VIM? | Version -- ^ Version deriving Eq @@ -54,6 +55,7 @@ , Option "" ["uq"] (NoArg (IType W64)) "64 bit unsigned quad" , Option "" ["toIEEE"] (ReqArg ToIEEE "n") "Convert from decimal to IEEE SP/DP formats." , Option "l" ["lanes"] (ReqArg Lanes "n") "number of lanes"+ , Option "" ["vim"] (NoArg VIM) "output in vim friendly format" , Option "h?" ["help"] (NoArg Help) "print help, with examples" , Option "v" ["version"] (NoArg Version) "print version info" ]@@ -95,9 +97,42 @@ putStrLn " * ulp: The minimum subnormal value" exitFailure +-- instead of dealing with vimscript, munge our args here.. heh+vimpret :: [String] -> [String]+vimpret args = case break (== "--bv") args of+ ([p], "--bv":rest) -> case mkArgs p of+ Nothing -> ["--help"]+ Just pr -> ("--" ++ pr) : rest+ _ -> ["--help"]+ where bad = (`elem` ["lanes", "vim", "help"])+ validPrecs = filter (not . bad) $ concat [xs | Option _ xs _ _ <- options]+ dvalidPrecs = map ('-':) validPrecs+ ddvalidPrecs = map ('-':) dvalidPrecs+ mkArgs p+ | p `elem` validPrecs = Just p+ | p `elem` dvalidPrecs = Just (drop 1 p)+ | p `elem` ddvalidPrecs = Just (drop 2 p)+ | True = Nothing+ main :: IO ()-main = do argv <- getArgs- pn <- getProgName+main = do origArgs <- getArgs+ origPN <- getProgName++ let -- bugger.. make the args a bit more friendly+ friendly :: String -> String+ friendly ('-':ns) -- -2/-3 etc become lane stuff+ | all isDigit ns+ = "-l" ++ ns+ friendly ('-':c:cs)+ | c `notElem` "-l" = "--" ++ (c:cs)+ friendly s = s++ cleanArgs = map friendly origArgs+++ (argv, pn) | "--vim" `elem` cleanArgs = ("--vim" : vimpret (filter (/= "--vim") cleanArgs), "CrackNum")+ | True = (cleanArgs, origPN)+ case getOpt Permute options argv of (os, rs, []) -> if Version `elem` os then putStrLn $ pn ++ " v" ++ showVersion version ++ ", " ++ copyRight@@ -114,7 +149,7 @@ | Just v <- listToMaybe [s | ToIEEE s <- os], null rs, Just (FPType p) <- mbPrec = putStrLn $ displayFP $ stringToFP p v | all isDigit lcs && lc > 0, Just p <- mbPrec- = lane pn lc p rs+ = lane pn (VIM `elem` os) lc p rs | True = putStr $ helpStr pn where mbPrec = getChosenPrec os@@ -153,9 +188,9 @@ (q, r) = l `quotRem` sz -- | Do the lane..-lane :: String -> Int -> Flag -> [String] -> IO ()-lane pn 1 f rs = dispatch pn f rs-lane pn n f rs+lane :: String -> Bool -> Int -> Flag -> [String] -> IO ()+lane pn _ 1 f rs = dispatch pn f rs+lane pn vim n f rs | ls `mod` n /= 0 = help $ "Input length " ++ show ls ++ " is not a multiple of lane count: " ++ show n | True@@ -164,8 +199,12 @@ ls = length s help m = do putStrLn $ pn ++ ": " ++ m usage pn- cvt i r = do putStrLn $ mkHeader (Just i) f+ cvt i r = do putStrLn $ vimMarker vim ++ mkHeader (Just i) f dispatch pn f [r]++vimMarker :: Bool -> String+vimMarker False = ""+vimMarker True = "VIM " -- | Display the ruler.. mkHeader :: Maybe Int -> Flag -> String
README.md view
@@ -3,9 +3,11 @@ [](http://hackage.haskell.org/package/crackNum) [](http://travis-ci.org/LeventErkok/crackNum) +CrackNum now comes with vim bindings, see http://github.com/LeventErkok/crackNum/blob/master/crackNum.vim+ ### Command line options: - crackNum v1.9, (c) Levent Erkok. Released with a BSD3 license.+ crackNum v2.1, (c) Levent Erkok. Released with a BSD3 license. Usage: crackNum precision bit/hex-pattern --hp 16 bit half precision --sp 32 bit single precision@@ -20,6 +22,7 @@ --uq 64 bit unsigned quad --toIEEE=n Convert from decimal to IEEE SP/DP formats. -l n --lanes=n number of lanes+ --vim output in vim friendly format -h, -? --help print help, with examples -v --version print version info
crackNum.cabal view
@@ -1,5 +1,5 @@ Name: crackNum-Version: 2.0+Version: 2.1 Synopsis: Crack various integer, floating-point data formats Description: Crack HP, SP and DP floats and 8, 16, 32, 64 bit words and integers. .@@ -7,12 +7,13 @@ License: BSD3 License-file: LICENSE Author: Levent Erkok+Homepage: http://github.com/LeventErkok/CrackNum Maintainer: erkokl@gmail.com Copyright: Levent Erkok Category: Tools Build-type: Simple-Cabal-version: >= 1.10-Extra-Source-Files: INSTALL, README.md, COPYRIGHT, CHANGES.md+Cabal-version: 1.14+Extra-Source-Files: INSTALL, README.md, COPYRIGHT, CHANGES.md, crackNum.vim source-repository head type: git@@ -26,6 +27,7 @@ other-modules: Data.Numbers.CrackNum , Data.Numbers.CrackNum.Utils , Data.Numbers.CrackNum.Data+ , Paths_crackNum Library ghc-options : -Wall
+ crackNum.vim view
@@ -0,0 +1,80 @@+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""+" VI interface to crackNum+"+" Copyright : (c) Levent Erkok+" License : BSD3+" Maintainer : erkokl@gmail.com+"+" INSTALLATION: Put this file in a convenient location (typically your .vim directory),+" and put "so crackNum.vim" in your .vimrc file. (With the appropriate path.)+"+" Once you restart vim, locate your cursor over a stream of binary/hex digits, and+" enter the command :CrackNum to see further options.+"+" See https://github.com/LeventErkok/CrackNum for details.++let g:crackNumPrecisions = ["hp","sp","dp","sb","sw","sd","sq","ub","uw","ud","uq"]+function! CrackNumComplete(A, L, P)+ if empty(a:A)+ return g:crackNumPrecisions+ else+ let out = filter(copy(g:crackNumPrecisions), 'v:val =~ "^' . a:A . '.*"')+ if empty(out)+ return g:crackNumPrecisions+ else+ return out+ endif+endfunction+function! CrackNum(...)+ redraw+ let curWord = expand("<cword>")+ if empty(curWord)+ echoerr "Place the cursor on a bin/hex number to crack!"+ return+ endif+ if empty(a:000)+ echo "Cracking \"" . curWord . "\".. Use TAB to see precisions supported."+ call inputsave()+ let prec = input("Precision> ", "", "customlist,CrackNumComplete")+ call inputrestore()+ let args = [prec] + copy(a:000)+ else+ echo "Cracking \"" . curWord . "\".."+ let prec = a:1+ let args = copy(a:000)+ endif++ if index(g:crackNumPrecisions, prec) < 0+ echoerr "Unknown precision: \"" . prec . "\"" . ". Must be one of: " . join(g:crackNumPrecisions, ' ')+ return+ endif++ let l:grepargs = join(['--vim'] + copy(args) + ['--bv', curWord], ' ')+ let grepprg_bak=&grepprg+ let grepformat_bak=&grepformat+ try+ let &grepprg="crackNum"+ let &grepformat="VIM %m"+ silent execute "grep" . " " . l:grepargs+ finally+ let &grepprg=grepprg_bak+ let &grepformat=grepformat_bak+ endtry++ botright copen++ redraw!+endfunction+command! -nargs=* -complete=customlist,CrackNumComplete CrackNum call CrackNum(<f-args>)+map @nhp :silent call CrackNum('hp')<CR>+map @nsp :silent call CrackNum('sp')<CR>+map @ndp :silent call CrackNum('dp')<CR>+map @nsb :silent call CrackNum('sb')<CR>+map @nsw :silent call CrackNum('sw')<CR>+map @nsd :silent call CrackNum('sd')<CR>+map @nsq :silent call CrackNum('sq')<CR>+map @nub :silent call CrackNum('ub')<CR>+map @nuw :silent call CrackNum('uw')<CR>+map @nud :silent call CrackNum('ud')<CR>+map @nuq :silent call CrackNum('uq')<CR>+" end crackNum interface