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