Plan 9 from Bell Labs’s /usr/web/sources/contrib/fernan/nhc98/tests/nofib/real/compress2/Main.hs

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


-- The current version of compress acts as a filter: the data to be
-- compressed is taken from standard input, and the result is placed on
-- the standard output. 

module Main (main)
where

import Encode
import WriteRoutines

main = getContents >>= \ i ->
	putStr (compress i)
           
-- The output is given by a magic header consisting of two fixed numbers,
-- and a third representing the maximum number of bits used per code and
-- whether or not block compression is being used. There is currently no
-- option for turning off block compression in this program. The maximum
-- number of bits is imported from the encode module.

compress = magic_header . processInput

magic_header cs
     = "\o037\o235" ++ [toEnum third_byte] ++ cs
       where
       third_byte = block_compress + maxBits
       block_compress = 128  -- 0   if block compression is not required

-- The two phases of the compression technique are joined together in a
-- pipeline with a feedback loop. This is because the encoding function
-- needs to know how many characters have been output at any time so it
-- can determine whether or not the compression ratio has fallen. This is
-- known, however, only when the codes are combined. Therefore the result
-- of the output function is a string containing the output, and a list
-- of integers representing the size of the output.

processInput cs 
     = fst output
       where
       output = outputCodes codes
       codes = encode (snd output) cs

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to webmaster@9p.io.