------------------------------------------------------------------------------- -- $Id: PutTreeNetlist.hs#1 2009/10/01 10:31:09 REDMOND\\satnams $ ------------------------------------------------------------------------------- module Lava.PutTreeNetlist where import Lava.Instance import Lava.Netlist import Lava.Primitives import System.IO import Control.Monad.State ------------------------------------------------------------------------------- displayTreeNetlist :: String -> Out () -> IO () displayTreeNetlist filename circuit = do file <- openFile (filename ++ ".tree") WriteMode putTreeNetlists file instTree hClose file where (netCount, instCount, ports, instTree, dl) = execState circuit (1, 1, [], [], []) ------------------------------------------------------------------------------- putTreeNetlists :: Handle -> [InstanceTree] -> IO () putTreeNetlists handle treeInstances = putTreeNetlists' 0 handle treeInstances ------------------------------------------------------------------------------- putTreeNetlists' :: Int -> Handle -> [InstanceTree] -> IO () putTreeNetlists' indent handle treeInstances = mapM_ (putTreeNetlist indent handle) treeInstances ------------------------------------------------------------------------------- putTreeNetlist :: Int -> Handle -> InstanceTree -> IO () putTreeNetlist indent handle (Inst inst) = do displayIndent indent handle hPutStrLn handle (showInstance inst) putTreeNetlist indent handle (LeftOf t1 t2) = do displayIndent indent handle hPutStrLn handle "LeftOf" putTreeNetlists' (indent+2) handle t1 hPutStrLn handle "" putTreeNetlists' (indent+2) handle t2 ------------------------------------------------------------------------------- displayIndent :: Int -> Handle -> IO () displayIndent indent handle = hPutStr handle (replicate indent ' ') -------------------------------------------------------------------------------