-from Text import class Text(join,toUpperCase), instance Text String
-
-toByteVal :: BC -> String
-toByteVal a = undef
-
-derive gPrint BC, AnalogPin
-derive consIndex BC
-derive consName BC
+from Text import class Text(concat,join,toUpperCase), instance Text String
+
+toByteVal :: BC -> [Char]
+toByteVal b
+# bt = toByteCode b
+= [bt:case b of
+ (BCPush i) = [toChar i]
+ (BCAnalogRead i) = [toChar i]
+ (BCAnalogWrite i) = [toChar i]
+ (BCDigitalRead i) = [toChar i]
+ (BCDigitalWrite i) = [toChar i]
+ (BCJmp i) = [toChar i]
+ (BCJmpT i) = [toChar i]
+ (BCJmpF i) = [toChar i]
+ _ = []]
+ where
+ toByteCode b = toChar $ consIndex{|*|} b + 1
+
+instance toByteCode Bool where
+ toByteCode True = [toChar 1]
+ toByteCode False = [toChar 0]
+instance toByteCode Int where toByteCode n = map toChar [n/(2<<7),n rem 265]
+instance toByteCode Long where toByteCode (L n) = toByteCode n
+instance toByteCode Char where toByteCode c = [c]
+instance toByteCode String where toByteCode s = undef
+instance toByteCode Button where toByteCode s = [toChar $ consIndex{|*|} s]
+
+instance toChar Pin where
+ toChar (Digital p) = toChar $ consIndex{|*|} p + 1
+ toChar (Analog p) = toChar $ consIndex{|*|} p + 1
+
+derive gPrint BC, AnalogPin, Pin, DigitalPin
+derive consIndex BC, Pin, Button
+derive consName BC, Pin, Button