diff options
Diffstat (limited to 'assignment-13/uFPL/Sim.icl')
-rw-r--r-- | assignment-13/uFPL/Sim.icl | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/assignment-13/uFPL/Sim.icl b/assignment-13/uFPL/Sim.icl index 5fccd8e..892708c 100644 --- a/assignment-13/uFPL/Sim.icl +++ b/assignment-13/uFPL/Sim.icl @@ -1,5 +1,6 @@ implementation module uFPL.Sim +import StdFile from StdFunc import flip, seq from Data.Func import $ @@ -8,6 +9,7 @@ from Data.List import concatMap import qualified Data.Map as M import Data.Maybe import Data.Tuple +import System.File from Text import <+ import Text.HTML @@ -289,8 +291,8 @@ where , display = st.State.display } -simulate :: [NamedRule] -> *World -> *World -simulate rs = startEngine $ +simulate :: (String, [NamedRule]) -> *World -> *World +simulate (progName, rs) = startEngine $ (setupShares >>| sim) -&&- (( whileUnchanged (irules >*< ishares) (uncurry newShares) @@ -369,9 +371,14 @@ where millisActions shrs ++ [ action "Step" $ step , OnAction (Action "Generate code") $ ifOk $ get irules >>= lift >>= \rs -> case rs of - (rs :: [NamedRule]) -> viewInformation (Title "Generated code") - [ViewUsing id (textArea <<@ sizeAttr (ExactSize 500) (ExactSize 600) <<@ styleAttr "font-size:11px;")] - (printToString (genp rs)) >>| check + (rs :: [NamedRule]) -> let prog = printToString (genp rs) in + viewInformation (Title "Generated code") + [ViewUsing id (textArea <<@ sizeAttr (ExactSize 500) (ExactSize 600) <<@ styleAttr "font-size:11px;")] + prog >>* + [ OnAction ActionContinue $ always check + , OnAction ActionSaveAs $ always $ updateInformation (Title "Filename") [] (progName +++ ".ino") >>= \fn -> + appWorld (snd o writeFile fn prog) >>| check + ] ]) <<@ ApplyLayout (sequenceLayouts finalizeStep |