summaryrefslogtreecommitdiff
path: root/assignment-13/uFPL/Sim.icl
diff options
context:
space:
mode:
authorCamil Staps2018-01-07 11:51:01 +0100
committerCamil Staps2018-01-07 11:51:01 +0100
commit8ecc7a12c6d898199d86ef3bb1ef4bd1d325d32b (patch)
tree5a16bf2abcd28026815dfd0c0f5bc038094313db /assignment-13/uFPL/Sim.icl
parentGenerate code from iTasks (diff)
Finish generation of setup/loop/system functions; save files
Diffstat (limited to 'assignment-13/uFPL/Sim.icl')
-rw-r--r--assignment-13/uFPL/Sim.icl17
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