extend gcons and make symbol generating smaller
[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
22 derive consName BC
23 derive gconses BC, AnalogPin
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 [1..] conses
35 # (ok, w) = fclose (io <<< "\n#endif\n") w
36 | not ok = abort "Couldn't close stdio"
37 = w