started communication from scratch
[mTask.git] / mTaskMakeSymbols.icl
1 module mTaskMakeSymbols
2
3 //import iTasks
4 import gdynamic, gCons, GenEq, StdMisc, StdArray, GenBimap
5 import GenPrint
6 import mTask
7 import StdEnum
8
9 import StdFile
10 import StdString
11
12 from StdFunc import o
13 import StdBool
14 import StdTuple
15 import Data.Tuple
16 import StdList
17 from Data.Func import $
18 import Data.List
19 from Text import class Text(join,toUpperCase), instance Text String
20
21 derive consIndex BC, Pin
22 derive consName BC, Pin
23 derive conses BC, AnalogPin, DigitalPin, Pin
24
25 (<+) infixr 5 :: a b -> String | toString a & toString b
26 (<+) a b = toString a +++ toString b
27
28 toDefine :: Int BC -> String
29 toDefine i b = "#define " <+ toUpperCase (consName{|*|} b) <+ " " <+ i
30
31 Start w
32 # (io, w) = stdio w
33 # io = io <<< "#ifndef MTASK_H\n#define MTASK_H\n"
34 # io = io <<< join "\n" (zipWith toDefine [0..] conses{|*|})
35 # (ok, w) = fclose (io <<< "\n#endif\n") w
36 | not ok = abort "Couldn't close stdio"
37 = w