HARM-0.1.2: Arm/Format.hs
----------------------------------------------------------------------
-- FILE: Format.hs
-- DATE: 03/30/2001
-- PROJECT:
-- LANGUAGE PLATFORM:
-- OS PLATFORM: RedHat Linux 6.2
-- AUTHOR: Jeffrey A. Meunier
-- EMAIL: jeffm@cse.uconn.edu
-- MAINTAINER: Alex Mason
-- EMAIL: axman6@gmail.com
----------------------------------------------------------------------
module Arm.Format
where
----------------------------------------------------------------------
-- Standard libraries.
----------------------------------------------------------------------
import Data.Array
import Data.Word
----------------------------------------------------------------------
-- Local libraries.
----------------------------------------------------------------------
----------------------------------------------------------------------
-- Number base data type.
----------------------------------------------------------------------
data Radix
= Dec
| Hex
deriving (Show)
----------------------------------------------------------------------
-- Format a number in a specific number base.
----------------------------------------------------------------------
formatNum base
= case base of
Dec -> formatDec 10 '0'
Hex -> formatHex 8 '0' ""
----------------------------------------------------------------------
-- Convert a number to a hex string.
----------------------------------------------------------------------
formatHex
:: Int
-> Char
-> String
-> Word32
-> String
formatHex places fillChar accum n
= if places == 0
then accum
else let digIndex = n `mod` 16
dig = if n == 0
then fillChar
else hexChars ! digIndex
in formatHex (places - 1) fillChar (dig : accum) (n `div` 16)
----------------------------------------------------------------------
-- Array of hex characters.
----------------------------------------------------------------------
hexChars
:: Array Word32 Char
hexChars
= listArray (0, 15) "0123456789ABCDEF"
----------------------------------------------------------------------
-- Format a decimal integer
----------------------------------------------------------------------
formatDec
:: Int
-> Char
-> Word32
-> String
formatDec places fillChar n
= let s = show n
pad = places - (length s)
in (take pad (repeat fillChar)) ++ s
----------------------------------------------------------------------
-- eof
----------------------------------------------------------------------