tools/pas2c/Main.hs
author nemo
Fri, 09 Nov 2012 12:29:24 -0500
branchwebgl
changeset 8001 379063958821
parent 7979 a3974abc62d3
child 8836 7a474fcc343d
permissions -rw-r--r--
Fix why my first attempt to compile main had failed, causing me to ask koda what the secret was. apparently using an OS that ignores case...

module Main( main ) where

import System.Console.GetOpt
import System.Environment
import System.Exit
import System.IO
import Data.Maybe( fromMaybe )
import Pas2C

main = do
    args <- getArgs
    if length args == 0
    then do
        name <- getProgName
        hPutStrLn stderr $ usageInfo header options
        exitFailure
    else do
        case getOpt RequireOrder options args of
          (flags, [],      [])     ->
            if length args == 8 then do
                hPutStrLn stdout $ "--------Pas2C Config--------"
                hPutStrLn stdout $ "Main module: " ++ (args !! 1)
                hPutStrLn stdout $ "Input path : " ++ (args !! 3)
                hPutStrLn stdout $ "Output path: " ++ (args !! 5)
                hPutStrLn stdout $ "Altern path: " ++ (args !! 7)
                hPutStrLn stdout $ "----------------------------"
                pas2C (args !! 1) ((args !! 3)++"/") ((args !! 5)++"/") ((args !! 7)++"/")
                hPutStrLn stdout $ "----------------------------"
            else do
                if length args == 6 then do
                    hPutStrLn stdout $ "--------Pas2C Config--------"
                    hPutStrLn stdout $ "Main module: " ++ (args !! 1)
                    hPutStrLn stdout $ "Input path : " ++ (args !! 3)
                    hPutStrLn stdout $ "Output path: " ++ (args !! 5)
                    hPutStrLn stdout $ "Altern path: " ++ "./"
                    hPutStrLn stdout $ "----------------------------"
                    pas2C (args !! 1) ((args !! 3)++"/") ((args !! 5)++"/") "./"
                    hPutStrLn stdout $ "----------------------------"
                else do
                    error $ usageInfo header options
          (_,     nonOpts, [])     -> error $ "unrecognized arguments: " ++ unwords nonOpts
          (_,     _,       msgs)   -> error $ usageInfo header options
    where header = "Freepascal to C conversion! Please use -n -i -o -a options in this order.\n"


data Flag = HelpMessage | Name String | Input String | Output String | Alternate String

options :: [OptDescr Flag]
options = [
    Option ['h'] ["help"]      (NoArg HelpMessage)      "print this help message",
    Option ['n'] ["name"]      (ReqArg Name "MAIN")     "name of the main Pascal module",
    Option ['i'] ["input"]     (ReqArg Input "DIR")     "input directory, where .pas files will be read",
    Option ['o'] ["output"]    (ReqArg Output "DIR")    "output directory, where .c/.h files will be written",
    Option ['a'] ["alternate"] (ReqArg Alternate "DIR") "alternate input directory, for out of source builds"
  ]