where
(ex, newls) = splitAt (bclength b - 1) ls
-toMessages :: MTaskInterval (String, BCState) -> ([MTaskMSGSend], BCState)
-toMessages interval (bytes, st=:{sdss}) = (
- [MTSds sdsi $ toByteCode e\\{sdsi,sdsval=(BCValue e)}<-sdss] ++
- [MTTask interval bytes], st)
+toMessages :: MTaskInterval (Main (ByteCode a b)) BCState -> ([MTaskMSGSend], BCState)
+toMessages interval x s
+# (bc, newstate) = toRealByteCode (unMain x) s
+# newsdss = 'DL'.difference s.sdss newstate.sdss
+= ([MTSds sdsi $ toByteCode e\\{sdsi,sdsval=(BCValue e)}<-newsdss] ++
+ [MTTask interval bc], newstate)
+
+instance == BCShare where (==) a b = a.sdsi == b.sdsi
toSDSUpdate :: Int Int -> [MTaskMSGSend]
toSDSUpdate i v = [MTUpd i (to16bit v)]