module Language.Cap.Debug.TraceMode (TraceMode(..),DebugMode(..) ,MapMode(..),FileType(..) ,Options(..),options) where import List (isSuffixOf) -- | Dictates what mode tracing should occur in data TraceMode = Stat | AlgorithmicDebug DebugMode deriving Show data DebugMode = FDT MapMode | EDT deriving Show data MapMode = OnTheFly | Index | IndexFunctions deriving Show data FileType = Program | Trace deriving (Show,Eq) -- | The different options the program can be started with data Options = Options { mode :: TraceMode , fileType :: FileType , fileName :: String} deriving Show {- | Works out what options the user called the program with. -} options :: [String] -> Options options [] = Options {mode=Stat, fileType=Program, fileName="trace.cap"} options [x] = Options {mode=Stat, fileType=inferType x, fileName=x} options ("-s":xs) = (options xs) {mode=Stat} options ("-ad":xs) = case xs of ("fdt":xs') -> case xs' of "-o":xs'' -> (options xs'') {mode=AlgorithmicDebug (FDT OnTheFly)} _ -> (options xs') {mode=AlgorithmicDebug (FDT Index)} ("edt":xs') -> (options xs') {mode=AlgorithmicDebug EDT} _ -> (options xs) {mode=AlgorithmicDebug (FDT Index)} options ("-p":x:xs) = (options xs) {fileType=Program, fileName=x} options ("-t":x:xs) = (options xs) {fileType=Trace, fileName=x} options (x:xs) = options xs {- | Attempts to infer whether the program has been given a trace file or program file based on the extension. -} inferType :: String -> FileType inferType x | ".cat" `isSuffixOf` x = Trace | ".cap" `isSuffixOf` x = Program | otherwise = Program