2b873214c9ab511bbca437c036371ab664aedaceChristian Maeder{-# LANGUAGE CPP #-}
f66fcd981f556c238df7dd6dfa42123745e3b1d2Christian Maeder{- |
c63ebf815c8a874525cf18670ad74847f7fc7b26Christian MaederModule : $Id$
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian MaederCopyright : (c) Uni Bremen 2003-2005
54ed6a6b1a6c7d27fadb39ec5b59d0806c81f7c8Christian MaederLicense : GPLv2 or higher, see LICENSE.txt
75a6279dbae159d018ef812185416cf6df386c10Till Mossakowski
3f69b6948966979163bdfe8331c38833d5d90ecdChristian MaederMaintainer : Christian.Maeder@dfki.de
75a6279dbae159d018ef812185416cf6df386c10Till MossakowskiStability : provisional
75a6279dbae159d018ef812185416cf6df386c10Till MossakowskiPortability : non-portable (imports Logic.Logic)
f66fcd981f556c238df7dd6dfa42123745e3b1d2Christian Maeder
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian MaederThe Main module of the Heterogeneous Tool Set.
dda5ab793f1615c1ba1dcaa97a4346b0878da6b1Christian Maeder It provides the main function to call (and not much more).
f66fcd981f556c238df7dd6dfa42123745e3b1d2Christian Maeder
f66fcd981f556c238df7dd6dfa42123745e3b1d2Christian Maeder-}
da955132262baab309a50fdffe228c9efe68251dCui Jian
dda5ab793f1615c1ba1dcaa97a4346b0878da6b1Christian Maeder-- for interactice purposes use Test.hs
dda5ab793f1615c1ba1dcaa97a4346b0878da6b1Christian Maeder
f66fcd981f556c238df7dd6dfa42123745e3b1d2Christian Maedermodule Main where
f66fcd981f556c238df7dd6dfa42123745e3b1d2Christian Maeder
0799b5dc3f06d2640e66e9ab54b8b217348fd719Christian Maederimport System.Environment (getArgs)
0799b5dc3f06d2640e66e9ab54b8b217348fd719Christian Maeder
52d922076b89f12234f721974e82531bc69a6f69Christian Maederimport Control.Monad
52d922076b89f12234f721974e82531bc69a6f69Christian Maeder
43b4c41fbb07705c9df321221ab9cb9832460407Christian Maederimport Driver.Options
4c8d3c5a9e938633f6147b5a595b9b93bfca99e6Christian Maederimport Driver.AnaLib
91eeff7b19b22d7e5c5d83fa6e357496e291c718Christian Maederimport Driver.ReadFn (showFileType)
fbc4f8708092d571a45cb483f37cc6b674da45a7Christian Maederimport Driver.WriteFn
fbc4f8708092d571a45cb483f37cc6b674da45a7Christian Maeder
fbc4f8708092d571a45cb483f37cc6b674da45a7Christian Maederimport Static.DevGraph
31bc219bae758272d0f064281b8ce7740a4553e9Till Mossakowskiimport Logic.PrintLogics
b10d6cef708b7a659f2d3b367e8e0db0d03ae3f5Till Mossakowski
f77f29e84b3f6e791c82e61b13fbf76582bedd2fChristian Maeder#ifdef UNI_PACKAGE
dda5ab793f1615c1ba1dcaa97a4346b0878da6b1Christian Maederimport GUI.ShowGraph
9175e29c044318498a40f323f189f9dfd50378efChristian Maederimport GUI.ShowLogicGraph
f77f29e84b3f6e791c82e61b13fbf76582bedd2fChristian Maeder#endif
f66fcd981f556c238df7dd6dfa42123745e3b1d2Christian Maeder
c0c2380bced8159ff0297ece14eba948bd236471Christian Maeder#ifdef PROGRAMATICA
da333ffa6336cf59a4071fcddad358c5eafd3e61Sonja Gröningimport Haskell.Haskell2DG
c0c2380bced8159ff0297ece14eba948bd236471Christian Maeder#endif
6352f3c31da3043783a13be6594aacb2147378baRazvan Pascanu
8ef91a173e69219fc2ebd45c76a35891c7785abdMarkus Grossimport Common.LibName
fc1a590cd3ee36797c0a032ff41e07f8e2469341Christian Maederimport Interfaces.DataTypes
a2b04db3e156312a8596d8084f7f0f51acf8a96bChristian Maederimport CMDL.ProcessScript
0c885f1348fd58f7cb706472a3ff20b52dbef0a7Jonathan von Schroederimport CMDL.Interface (cmdlRunShell)
fc1a590cd3ee36797c0a032ff41e07f8e2469341Christian Maederimport CMDL.DataTypes
66a774f13272fde036481edd2298081ab3d04678Razvan Pascanuimport PGIP.XMLparsing
834c2e71b8e390e5b05c8d02bb6eb22621125133Markus Grossimport PGIP.XMLstate (isRemote)
d27b1887e61f1dc53d77c37f59dbf5019242a686Christian Maeder#ifdef SERVER
d27b1887e61f1dc53d77c37f59dbf5019242a686Christian Maederimport PGIP.Server
d27b1887e61f1dc53d77c37f59dbf5019242a686Christian Maeder#endif
6e52f1dfc0da4bc4a7701cf856641c9dce08fc7dChristian Maeder
923e25bb8c7cf9f2978c7844ad173704482cc3b0Martin Kühlimport Maude.Maude2DG (anaMaudeFile)
9f85afecbd79b3df5a0bb17bd28cd0b288dc3213Kristina Sojakovaimport LF.Twelf2DG (anaTwelfFile)
63da71bfb4226f504944b293fb77177ebcaea7d4Ewaryst Schulzimport OMDoc.Import (anaOMDocFile)
e1ea9a046e9640148ca876dfe47e391559a9fdf3Christian Maeder#ifdef HEXPAT
14c89b2d830777bf4db2850f038c9f60acaca486Christian Maederimport HolLight.HolLight2DG (anaHolLightFile)
57026bc09337d158b89775048a9bcc9c17d825caChristian Maeder#endif
57026bc09337d158b89775048a9bcc9c17d825caChristian Maeder
57026bc09337d158b89775048a9bcc9c17d825caChristian Maeder#ifdef HAXML
9175e29c044318498a40f323f189f9dfd50378efChristian Maederimport Isabelle.Isa2DG (anaIsaFile, anaThyFile)
e1ea9a046e9640148ca876dfe47e391559a9fdf3Christian Maeder#endif
923e25bb8c7cf9f2978c7844ad173704482cc3b0Martin Kühl
f66fcd981f556c238df7dd6dfa42123745e3b1d2Christian Maedermain :: IO ()
2b873214c9ab511bbca437c036371ab664aedaceChristian Maedermain =
52d922076b89f12234f721974e82531bc69a6f69Christian Maeder getArgs >>= hetcatsOpts >>= \ opts -> let imode = interactive opts in
fe495a0978e5aa70776103c37fb0eb2bd6abea69Eugen Kuksa printOptionsWarnings opts >>
d27b1887e61f1dc53d77c37f59dbf5019242a686Christian Maeder#ifdef SERVER
d27b1887e61f1dc53d77c37f59dbf5019242a686Christian Maeder if serve opts then hetsServer opts else
d27b1887e61f1dc53d77c37f59dbf5019242a686Christian Maeder#endif
52d922076b89f12234f721974e82531bc69a6f69Christian Maeder if isRemote opts || imode
8ef91a173e69219fc2ebd45c76a35891c7785abdMarkus Gross then cmdlRun opts >>= displayGraph "" opts . getMaybeLib . intState
8ef91a173e69219fc2ebd45c76a35891c7785abdMarkus Gross else do
9175e29c044318498a40f323f189f9dfd50378efChristian Maeder putIfVerbose opts 3 $ "Options: " ++ show opts
31bc219bae758272d0f064281b8ce7740a4553e9Till Mossakowski if outputLogicList opts
31bc219bae758272d0f064281b8ce7740a4553e9Till Mossakowski then printLogics
31bc219bae758272d0f064281b8ce7740a4553e9Till Mossakowski else
31bc219bae758272d0f064281b8ce7740a4553e9Till Mossakowski case (infiles opts, outputLogicGraph opts) of
a31430de8b0632d29f42634d6395e982bf31b14dChristian Maeder ([], lg) -> case guiType opts of
a31430de8b0632d29f42634d6395e982bf31b14dChristian Maeder UseGui ->
a31430de8b0632d29f42634d6395e982bf31b14dChristian Maeder#ifdef UNI_PACKAGE
a31430de8b0632d29f42634d6395e982bf31b14dChristian Maeder showPlainLG
a31430de8b0632d29f42634d6395e982bf31b14dChristian Maeder#else
a31430de8b0632d29f42634d6395e982bf31b14dChristian Maeder noUniPkg
a31430de8b0632d29f42634d6395e982bf31b14dChristian Maeder#endif
a31430de8b0632d29f42634d6395e982bf31b14dChristian Maeder NoGui | lg -> writeLG opts
a31430de8b0632d29f42634d6395e982bf31b14dChristian Maeder _ -> hetsIOError "supply option -G or -g and/or file arguments"
a31430de8b0632d29f42634d6395e982bf31b14dChristian Maeder (fs, False) -> mapM_ (processFile opts) fs
a31430de8b0632d29f42634d6395e982bf31b14dChristian Maeder _ -> hetsIOError
a31430de8b0632d29f42634d6395e982bf31b14dChristian Maeder "option -G is illegal together with file arguments (use -g)"
9175e29c044318498a40f323f189f9dfd50378efChristian Maeder
9175e29c044318498a40f323f189f9dfd50378efChristian MaedernoUniPkg :: IO ()
9175e29c044318498a40f323f189f9dfd50378efChristian MaedernoUniPkg = fail $ "No graph display interface; \n"
9175e29c044318498a40f323f189f9dfd50378efChristian Maeder ++ "UNI_PACKAGE option has been "
9175e29c044318498a40f323f189f9dfd50378efChristian Maeder ++ "disabled during compilation of Hets"
9175e29c044318498a40f323f189f9dfd50378efChristian Maeder
ee1c7c5796832536932d7b06cbfb1ca13f9a0d7bMartin KühlprocessFile :: HetcatsOpts -> FilePath -> IO ()
f63e7684d8db7503c22e5d8d499c94a9405f8f9eChristian MaederprocessFile opts file =
91eeff7b19b22d7e5c5d83fa6e357496e291c718Christian Maeder if fileType opts then showFileType opts file else do
a3a7d8b3cdf05c8040c62dbcf9a15dc5042cd721Christian Maeder putIfVerbose opts 3 ("Processing input: " ++ file)
f63e7684d8db7503c22e5d8d499c94a9405f8f9eChristian Maeder let doExit = guiType opts == UseGui
a3a7d8b3cdf05c8040c62dbcf9a15dc5042cd721Christian Maeder res <- case guess file (intype opts) of
c0c2380bced8159ff0297ece14eba948bd236471Christian Maeder#ifdef PROGRAMATICA
bdc103981a28a51938de98a956d8a3767f6cf43dAivaras Jakubauskas HaskellIn -> putStr "this is HaskellIn" >> anaHaskellFile opts file
c0c2380bced8159ff0297ece14eba948bd236471Christian Maeder#endif
e1ea9a046e9640148ca876dfe47e391559a9fdf3Christian Maeder#ifdef HEXPAT
e1ea9a046e9640148ca876dfe47e391559a9fdf3Christian Maeder HolLightIn -> anaHolLightFile opts file
57026bc09337d158b89775048a9bcc9c17d825caChristian Maeder#endif
57026bc09337d158b89775048a9bcc9c17d825caChristian Maeder#ifdef HAXML
22b772f8753f0cdb4508ba460356c238de2ee375Jonathan von Schroeder IsaIn -> anaIsaFile opts file
7bbfb15142ab4286dfc6fcde2fc94a5512297e41Jonathan von Schroeder ThyIn -> anaThyFile opts file
fa388aea9cef5f9734fec346159899a74432ce26Christian Maeder#endif
63719301448519453f66383f4e583d9fd5b89ecbChristian Maeder PrfIn -> anaLibReadPrfs opts file
a3a7d8b3cdf05c8040c62dbcf9a15dc5042cd721Christian Maeder ProofCommand -> do
0c885f1348fd58f7cb706472a3ff20b52dbef0a7Jonathan von Schroeder st <- cmdlProcessFile doExit opts file
52d922076b89f12234f721974e82531bc69a6f69Christian Maeder liftM (getMaybeLib . intState)
52d922076b89f12234f721974e82531bc69a6f69Christian Maeder $ (if interactive opts then cmdlRunShell else return) st
923e25bb8c7cf9f2978c7844ad173704482cc3b0Martin Kühl MaudeIn -> anaMaudeFile opts file
9f85afecbd79b3df5a0bb17bd28cd0b288dc3213Kristina Sojakova TwelfIn -> anaTwelfFile opts file
72079df98b3cb7cc1fd82a0a24984893dcd05ecaEwaryst Schulz OmdocIn -> anaOMDocFile opts file
a3a7d8b3cdf05c8040c62dbcf9a15dc5042cd721Christian Maeder _ -> anaLib opts file
fbc4f8708092d571a45cb483f37cc6b674da45a7Christian Maeder case res of
8a77240a809197c92c0736c431b4b88947a7bac1Christian Maeder Just (ln, nEnv) ->
8a77240a809197c92c0736c431b4b88947a7bac1Christian Maeder writeSpecFiles opts file nEnv ln $ lookupDGraph ln nEnv
1c4dfa148603d4fcf4cdd2ed66c8b6e1de0dd696Till Mossakowski _ -> hetsIOError ""
bb63f684c4f5f33ffcd1dcc02c58d6a703900fafJonathan von Schroeder if guess file (intype opts) /= ProofCommand && interactive opts
b0234f0a84fcd3587073fbc11d38759108997c3cChristian Maeder then cmdlRun opts >> return ()
b0234f0a84fcd3587073fbc11d38759108997c3cChristian Maeder else displayGraph file opts res
8ef91a173e69219fc2ebd45c76a35891c7785abdMarkus Gross
8ef91a173e69219fc2ebd45c76a35891c7785abdMarkus GrossdisplayGraph :: FilePath -> HetcatsOpts -> Maybe (LibName, LibEnv) -> IO ()
d56ece59c372cb887355825901222b9f3377f7e6Thiemo WiedemeyerdisplayGraph file opts res = case guiType opts of
d56ece59c372cb887355825901222b9f3377f7e6Thiemo Wiedemeyer NoGui -> return ()
9175e29c044318498a40f323f189f9dfd50378efChristian Maeder UseGui ->
9175e29c044318498a40f323f189f9dfd50378efChristian Maeder#ifdef UNI_PACKAGE
9175e29c044318498a40f323f189f9dfd50378efChristian Maeder showGraph file opts res
f1dec6898638ba1131a9fadbc4d1544c93dfabb0Klaus Luettich#else
9175e29c044318498a40f323f189f9dfd50378efChristian Maeder noUniPkg
f77f29e84b3f6e791c82e61b13fbf76582bedd2fChristian Maeder#endif