layout is working, now up to the communication
[mTask.git] / mTaskInterpret.dcl
index 667f26b..319ffb3 100644 (file)
@@ -2,8 +2,28 @@ definition module mTaskInterpret
 
 from Data.Functor.Identity import :: Identity
 from Control.Monad.State import :: State, :: StateT
+from Data.Monoid import class Semigroup, class Monoid
 import mTask
 
+:: MTaskMSGRecv
+       = MTTaskAck Int
+       | MTTaskDelAck Int
+       | MTSDSAck Int
+       | MTSDSDelAck Int
+       | MTPub Int String
+       | MTMessage String
+       | MTEmpty
+
+:: MTaskMSGSend
+       = MTTask Int String
+       | MTSds Int String
+       | MTUpd Int String
+
+instance toString MTaskMSGRecv
+instance toString MTaskMSGSend
+encode :: MTaskMSGSend -> String
+decode :: String -> MTaskMSGRecv
+
 :: BC
        = BCNop
        | BCLab Int
@@ -33,6 +53,9 @@ import mTask
        | BCJmp Int
        | BCJmpT Int
        | BCJmpF Int
+       //UserLED
+       | BCLedOn [Char]
+       | BCLedOff [Char]
        //Serial
        | BCSerialAvail
        | BCSerialPrint
@@ -47,12 +70,15 @@ import mTask
        | BCTest AnalogPin
 
 :: ByteCode a p = BC (BCState -> ([BC], BCState))
-//:: ByteCode a p = BC [BC]
-//:: ByteCode a p = BC ((ReadWrite (ByteCode a Expr)) BCState -> ([BC], BCState))
+instance Semigroup (ByteCode a p)
+instance Monoid (ByteCode a p)
+
 :: BCState = {
                freshl :: [Int],
-               freshs :: [Int]
+               freshs :: [Int],
+               sdss :: [(Int, [Char])]
        }
+instance zero BCState
 
 class toByteCode a :: a -> [Char]
 instance toByteCode Int
@@ -61,5 +87,31 @@ instance toByteCode Char
 instance toByteCode String
 instance toByteCode Long
 instance toByteCode Button
+instance toByteCode UserLED
+
+instance toChar Pin
+instance arith ByteCode
+instance boolExpr ByteCode
+instance analogIO ByteCode
+instance digitalIO ByteCode
+instance userLed ByteCode
+//instance If ByteCode Stmt Stmt Stmt
+//instance If ByteCode e Stmt Stmt
+//instance If ByteCode Stmt e Stmt
+instance If ByteCode x y Stmt
+instance IF ByteCode
+instance noOp ByteCode
+
+instance sds ByteCode
+instance assign ByteCode
+instance seq ByteCode
+instance serial ByteCode
+
+//pub :: (ByteCode a b) -> ByteCode a b
+
+toMessages :: Int (String, BCState) -> ([MTaskMSGSend], BCState)
+toSDSUpdate :: Int Int -> [MTaskMSGSend]
 
 toByteVal :: BC -> [Char]
+toReadableByteCode :: (ByteCode a b) -> (String, BCState)
+toRealByteCode :: (ByteCode a b) -> (String, BCState)