content: 
  module Main where
  
  import Char ( isSpace )
  
  {- Compares a .sorted file with a raw printout of instructions
     and shows differences.
  
     First file (REF) is has lines of format
  
        hex-digits  SPACEs  insn(possibly with spaces)
  
     Second file (TEST) has lines of format
  
        insn(possibly with spaces)
  
     Purpose is to extract the insn (text), remove spaces, and compare.
  
     How to use:
  (cd .. && make) && (../vex test1.orig | grep LALALA | cut -b 22- > out.txt)
  /home/sewardj/Tools/HugsInst/bin/runhugs Compare.hs | grep FAIL 
  -}
  
  main = mayn "test2.sorted" "out.txt"
  
  mayn :: String -> String -> IO ()
  
  mayn sorted_fn dump_fn
     = do sorted <- readFile sorted_fn
          dump   <- readFile dump_fn
          let ress = zipWith check (lines (deTab sorted))
                                   (lines (deTab dump))
          putStrLn (unlines ress)
  
  
  check :: String -> String -> String
  check ref test 
     = let ref_clean = dropWhile isHex ref
           ok        = compere ref_clean test
           summary   = grok ("REF: " ++ trim ref_clean) 
                       ++ "   " ++ grok ("TEST: " ++ trim test)
       in
       if  ok
       then "pass:    " ++ summary
       else "FAIL:    " ++ summary
  
  trim = reverse . dropWhile isSpace . reverse . dropWhile isSpace
  
  compere s1 s2 = filter (not . isSpace) s1 == filter (not . isSpace) s2
  
  isHex c = c `elem` "ABCDEF0123456789abcdef"
  
  grok str 
     = let n = length str
           limit = 40
       in
       if   n >= limit
       then str
       else take limit (str ++ repeat ' ')
  
  deTab [] = []
  deTab (c:cs) = if c == '\t' then "  " ++ deTab cs
                 else c: deTab cs
  