refactoors
[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 mTaskInterpret
9 import StdEnum
10
11 import StdFile
12 import StdString
13
14 from StdFunc import o
15 import StdBool
16 import StdTuple
17 import Data.Tuple
18 import StdList
19 from Data.Func import $
20 import Data.List
21 from Text import class Text(join,toUpperCase), instance Text String
22
23 derive consName BC
24 derive conses BC
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