1 module tcod.c.types;
2 
3 import tcod.c.all;
4 
5 extern (C):
6 
7 // --- List ---
8 alias void* TCOD_list_t;
9 
10 
11 // --- Colour ---
12 struct TCOD_color_t {
13     ubyte r,g,b;
14 }
15 
16 // color names
17 enum {
18     TCOD_COLOR_RED,
19     TCOD_COLOR_FLAME,
20     TCOD_COLOR_ORANGE,
21     TCOD_COLOR_AMBER,
22     TCOD_COLOR_YELLOW,
23     TCOD_COLOR_LIME,
24     TCOD_COLOR_CHARTREUSE,
25     TCOD_COLOR_GREEN,
26     TCOD_COLOR_SEA,
27     TCOD_COLOR_TURQUOISE,
28     TCOD_COLOR_CYAN,
29     TCOD_COLOR_SKY,
30     TCOD_COLOR_AZURE,
31     TCOD_COLOR_BLUE,
32     TCOD_COLOR_HAN,
33     TCOD_COLOR_VIOLET,
34     TCOD_COLOR_PURPLE,
35     TCOD_COLOR_FUCHSIA,
36     TCOD_COLOR_MAGENTA,
37     TCOD_COLOR_PINK,
38     TCOD_COLOR_CRIMSON,
39     TCOD_COLOR_NB,
40 }
41 
42 // color levels
43 enum {
44     TCOD_COLOR_DESATURATED,
45     TCOD_COLOR_LIGHTEST,
46     TCOD_COLOR_LIGHTER,
47     TCOD_COLOR_LIGHT,
48     TCOD_COLOR_NORMAL,
49     TCOD_COLOR_DARK,
50     TCOD_COLOR_DARKER,
51     TCOD_COLOR_DARKEST,
52     TCOD_COLOR_LEVELS,
53 }
54 
55 // color array
56 const TCOD_color_t[TCOD_COLOR_LEVELS][TCOD_COLOR_NB] TCOD_colors;
57 
58 // grey levels
59 const TCOD_color_t TCOD_black = TCOD_color_t(0, 0, 0);
60 const TCOD_color_t TCOD_darkest_grey = TCOD_color_t(31, 31, 31);
61 const TCOD_color_t TCOD_darkest_gray = TCOD_color_t(31, 31, 31);
62 const TCOD_color_t TCOD_darker_grey = TCOD_color_t(63, 63, 63);
63 const TCOD_color_t TCOD_darker_gray = TCOD_color_t(63, 63, 63);
64 const TCOD_color_t TCOD_dark_grey = TCOD_color_t(95, 95, 95);
65 const TCOD_color_t TCOD_dark_gray = TCOD_color_t(95, 95, 95);
66 const TCOD_color_t TCOD_grey = TCOD_color_t(127, 127, 127);
67 const TCOD_color_t TCOD_gray = TCOD_color_t(127, 127, 127);
68 const TCOD_color_t TCOD_light_grey = TCOD_color_t(159, 159, 159);
69 const TCOD_color_t TCOD_light_gray = TCOD_color_t(159, 159, 159);
70 const TCOD_color_t TCOD_lighter_grey = TCOD_color_t(191, 191, 191);
71 const TCOD_color_t TCOD_lighter_gray = TCOD_color_t(191, 191, 191);
72 const TCOD_color_t TCOD_lightest_grey = TCOD_color_t(223, 223, 223);
73 const TCOD_color_t TCOD_lightest_gray = TCOD_color_t(223, 223, 223);
74 const TCOD_color_t TCOD_white = TCOD_color_t(255, 255, 255);
75 
76 /* sepia */
77 const TCOD_color_t TCOD_darkest_sepia = TCOD_color_t(31, 24, 15);
78 const TCOD_color_t TCOD_darker_sepia = TCOD_color_t(63, 50, 31);
79 const TCOD_color_t TCOD_dark_sepia = TCOD_color_t(94, 75, 47);
80 const TCOD_color_t TCOD_sepia = TCOD_color_t(127, 101, 63);
81 const TCOD_color_t TCOD_light_sepia = TCOD_color_t(158, 134, 100);
82 const TCOD_color_t TCOD_lighter_sepia = TCOD_color_t(191, 171, 143);
83 const TCOD_color_t TCOD_lightest_sepia = TCOD_color_t(222, 211, 195);
84 
85 // standard colors
86 const TCOD_color_t TCOD_red = TCOD_color_t(255, 0, 0);
87 const TCOD_color_t TCOD_flame = TCOD_color_t(255, 63, 0);
88 const TCOD_color_t TCOD_orange = TCOD_color_t(255, 127, 0);
89 const TCOD_color_t TCOD_amber = TCOD_color_t(255, 191, 0);
90 const TCOD_color_t TCOD_yellow = TCOD_color_t(255, 255, 0);
91 const TCOD_color_t TCOD_lime = TCOD_color_t(191, 255, 0);
92 const TCOD_color_t TCOD_chartreuse = TCOD_color_t(127, 255, 0);
93 const TCOD_color_t TCOD_green = TCOD_color_t(0, 255, 0);
94 const TCOD_color_t TCOD_sea = TCOD_color_t(0, 255, 127);
95 const TCOD_color_t TCOD_turquoise = TCOD_color_t(0, 255, 191);
96 const TCOD_color_t TCOD_cyan = TCOD_color_t(0, 255, 255);
97 const TCOD_color_t TCOD_sky = TCOD_color_t(0, 127, 255);
98 const TCOD_color_t TCOD_azure = TCOD_color_t(0, 127, 255);
99 const TCOD_color_t TCOD_blue = TCOD_color_t(0, 0, 255);
100 const TCOD_color_t TCOD_han = TCOD_color_t(63, 0, 255);
101 const TCOD_color_t TCOD_violet = TCOD_color_t(127, 0, 255);
102 const TCOD_color_t TCOD_purple = TCOD_color_t(191, 0, 255);
103 const TCOD_color_t TCOD_fuchsia = TCOD_color_t(255, 0, 191);
104 const TCOD_color_t TCOD_magenta = TCOD_color_t(255, 0, 255);
105 const TCOD_color_t TCOD_pink = TCOD_color_t(255, 0, 127);
106 const TCOD_color_t TCOD_crimson = TCOD_color_t(255, 0, 63);
107 
108 // dark colors
109 const TCOD_color_t TCOD_dark_red = TCOD_color_t(191, 0, 0);
110 const TCOD_color_t TCOD_dark_flame = TCOD_color_t(191, 47, 0);
111 const TCOD_color_t TCOD_dark_orange = TCOD_color_t(191, 95, 0);
112 const TCOD_color_t TCOD_dark_amber = TCOD_color_t(191, 143, 0);
113 const TCOD_color_t TCOD_dark_yellow = TCOD_color_t(191, 191, 0);
114 const TCOD_color_t TCOD_dark_lime = TCOD_color_t(143, 191, 0);
115 const TCOD_color_t TCOD_dark_chartreuse = TCOD_color_t(95, 191, 0);
116 const TCOD_color_t TCOD_dark_green = TCOD_color_t(0, 191, 0);
117 const TCOD_color_t TCOD_dark_sea = TCOD_color_t(0, 191, 95);
118 const TCOD_color_t TCOD_dark_turquoise = TCOD_color_t(0, 191, 143);
119 const TCOD_color_t TCOD_dark_cyan = TCOD_color_t(0, 191, 191);
120 const TCOD_color_t TCOD_dark_sky = TCOD_color_t(0, 143, 191);
121 const TCOD_color_t TCOD_dark_azure = TCOD_color_t(0, 95, 191);
122 const TCOD_color_t TCOD_dark_blue = TCOD_color_t(0, 0, 191);
123 const TCOD_color_t TCOD_dark_han = TCOD_color_t(47, 0, 191);
124 const TCOD_color_t TCOD_dark_violet = TCOD_color_t(95, 0, 191);
125 const TCOD_color_t TCOD_dark_purple = TCOD_color_t(143, 0, 191);
126 const TCOD_color_t TCOD_dark_fuchsia = TCOD_color_t(191, 0, 191);
127 const TCOD_color_t TCOD_dark_magenta = TCOD_color_t(191, 0, 143);
128 const TCOD_color_t TCOD_dark_pink = TCOD_color_t(191, 0, 95);
129 const TCOD_color_t TCOD_dark_crimson = TCOD_color_t(191, 0, 47);
130 
131 // darker colors
132 const TCOD_color_t TCOD_darker_red = TCOD_color_t(127, 0, 0);
133 const TCOD_color_t TCOD_darker_flame = TCOD_color_t(127, 31, 0);
134 const TCOD_color_t TCOD_darker_orange = TCOD_color_t(127, 63, 0);
135 const TCOD_color_t TCOD_darker_amber = TCOD_color_t(127, 95, 0);
136 const TCOD_color_t TCOD_darker_yellow = TCOD_color_t(127, 127, 0);
137 const TCOD_color_t TCOD_darker_lime = TCOD_color_t(95, 127, 0);
138 const TCOD_color_t TCOD_darker_chartreuse = TCOD_color_t(62, 127, 0);
139 const TCOD_color_t TCOD_darker_green = TCOD_color_t(0, 127, 0);
140 const TCOD_color_t TCOD_darker_sea = TCOD_color_t(0, 127, 63);
141 const TCOD_color_t TCOD_darker_turquoise = TCOD_color_t(0, 127, 95);
142 const TCOD_color_t TCOD_darker_cyan = TCOD_color_t(0, 127, 127);
143 const TCOD_color_t TCOD_darker_sky = TCOD_color_t(0, 95, 127);
144 const TCOD_color_t TCOD_darker_azure = TCOD_color_t(0, 63, 127);
145 const TCOD_color_t TCOD_darker_blue = TCOD_color_t(0, 0, 127);
146 const TCOD_color_t TCOD_darker_han = TCOD_color_t(31, 0, 127);
147 const TCOD_color_t TCOD_darker_violet = TCOD_color_t(63, 0, 127);
148 const TCOD_color_t TCOD_darker_purple = TCOD_color_t(95, 0, 127);
149 const TCOD_color_t TCOD_darker_fuchsia = TCOD_color_t(127, 0, 127);
150 const TCOD_color_t TCOD_darker_magenta = TCOD_color_t(127, 0, 95);
151 const TCOD_color_t TCOD_darker_pink = TCOD_color_t(127, 0, 63);
152 const TCOD_color_t TCOD_darker_crimson = TCOD_color_t(127, 0, 31);
153 
154 // darkest colors
155 const TCOD_color_t TCOD_darkest_red = TCOD_color_t(63, 0, 0);
156 const TCOD_color_t TCOD_darkest_flame = TCOD_color_t(63, 15, 0);
157 const TCOD_color_t TCOD_darkest_orange = TCOD_color_t(63, 31, 0);
158 const TCOD_color_t TCOD_darkest_amber = TCOD_color_t(63, 47, 0);
159 const TCOD_color_t TCOD_darkest_yellow = TCOD_color_t(63, 63, 0);
160 const TCOD_color_t TCOD_darkest_lime = TCOD_color_t(47, 63, 0);
161 const TCOD_color_t TCOD_darkest_chartreuse = TCOD_color_t(31, 63, 0);
162 const TCOD_color_t TCOD_darkest_green = TCOD_color_t(0, 63, 0);
163 const TCOD_color_t TCOD_darkest_sea = TCOD_color_t(0, 63, 31);
164 const TCOD_color_t TCOD_darkest_turquoise = TCOD_color_t(0, 63, 47);
165 const TCOD_color_t TCOD_darkest_cyan = TCOD_color_t(0, 63, 63);
166 const TCOD_color_t TCOD_darkest_sky = TCOD_color_t(0, 47, 63);
167 const TCOD_color_t TCOD_darkest_azure = TCOD_color_t(0, 31, 63);
168 const TCOD_color_t TCOD_darkest_blue = TCOD_color_t(0, 0, 63);
169 const TCOD_color_t TCOD_darkest_han = TCOD_color_t(15, 0, 63);
170 const TCOD_color_t TCOD_darkest_violet = TCOD_color_t(31, 0, 63);
171 const TCOD_color_t TCOD_darkest_purple = TCOD_color_t(47, 0, 63);
172 const TCOD_color_t TCOD_darkest_fuchsia = TCOD_color_t(63, 0, 63);
173 const TCOD_color_t TCOD_darkest_magenta = TCOD_color_t(63, 0, 47);
174 const TCOD_color_t TCOD_darkest_pink = TCOD_color_t(63, 0, 31);
175 const TCOD_color_t TCOD_darkest_crimson = TCOD_color_t(63, 0, 15);
176 
177 // light colors
178 const TCOD_color_t TCOD_light_red = TCOD_color_t(255, 63, 63);
179 const TCOD_color_t TCOD_light_flame = TCOD_color_t(255, 111, 63);
180 const TCOD_color_t TCOD_light_orange = TCOD_color_t(255, 159, 63);
181 const TCOD_color_t TCOD_light_amber = TCOD_color_t(255, 207, 63);
182 const TCOD_color_t TCOD_light_yellow = TCOD_color_t(255, 255, 63);
183 const TCOD_color_t TCOD_light_lime = TCOD_color_t(207, 255, 63);
184 const TCOD_color_t TCOD_light_chartreuse = TCOD_color_t(159, 255, 63);
185 const TCOD_color_t TCOD_light_green = TCOD_color_t(63, 255, 159);
186 const TCOD_color_t TCOD_light_sea = TCOD_color_t(63, 255, 159);
187 const TCOD_color_t TCOD_light_turquoise = TCOD_color_t(63, 255, 207);
188 const TCOD_color_t TCOD_light_cyan = TCOD_color_t(63, 255, 255);
189 const TCOD_color_t TCOD_light_sky = TCOD_color_t(63, 207, 255);
190 const TCOD_color_t TCOD_light_azure = TCOD_color_t(63, 159, 255);
191 const TCOD_color_t TCOD_light_blue = TCOD_color_t(63, 63, 255);
192 const TCOD_color_t TCOD_light_han = TCOD_color_t(111, 63, 255);
193 const TCOD_color_t TCOD_light_violet = TCOD_color_t(159, 63, 255);
194 const TCOD_color_t TCOD_light_purple = TCOD_color_t(207, 63, 255);
195 const TCOD_color_t TCOD_light_fuchsia = TCOD_color_t(255, 63, 255);
196 const TCOD_color_t TCOD_light_magenta = TCOD_color_t(255, 63, 207);
197 const TCOD_color_t TCOD_light_pink = TCOD_color_t(255, 63, 159);
198 const TCOD_color_t TCOD_light_crimson = TCOD_color_t(255, 63, 111);
199 
200 // lighter colors
201 const TCOD_color_t TCOD_lighter_red = TCOD_color_t(255, 127, 127);
202 const TCOD_color_t TCOD_lighter_flame = TCOD_color_t(255, 159, 127);
203 const TCOD_color_t TCOD_lighter_orange = TCOD_color_t(255, 191, 127);
204 const TCOD_color_t TCOD_lighter_amber = TCOD_color_t(255, 223, 127);
205 const TCOD_color_t TCOD_lighter_yellow = TCOD_color_t(255, 255, 127);
206 const TCOD_color_t TCOD_lighter_lime = TCOD_color_t(223, 255, 127);
207 const TCOD_color_t TCOD_lighter_chartreuse = TCOD_color_t(191, 255, 127);
208 const TCOD_color_t TCOD_lighter_green = TCOD_color_t(127, 255, 127);
209 const TCOD_color_t TCOD_lighter_sea = TCOD_color_t(127, 255, 191);
210 const TCOD_color_t TCOD_lighter_turquoise = TCOD_color_t(127, 255, 223);
211 const TCOD_color_t TCOD_lighter_cyan = TCOD_color_t(127, 255, 255);
212 const TCOD_color_t TCOD_lighter_sky = TCOD_color_t(127, 223, 255);
213 const TCOD_color_t TCOD_lighter_azure = TCOD_color_t(127, 191, 255);
214 const TCOD_color_t TCOD_lighter_blue = TCOD_color_t(127, 127, 255);
215 const TCOD_color_t TCOD_lighter_han = TCOD_color_t(159, 127, 255);
216 const TCOD_color_t TCOD_lighter_violet = TCOD_color_t(191, 127, 255);
217 const TCOD_color_t TCOD_lighter_purple = TCOD_color_t(223, 127, 255);
218 const TCOD_color_t TCOD_lighter_fuchsia = TCOD_color_t(255, 127, 255);
219 const TCOD_color_t TCOD_lighter_magenta = TCOD_color_t(255, 127, 223);
220 const TCOD_color_t TCOD_lighter_pink = TCOD_color_t(255, 127, 191);
221 const TCOD_color_t TCOD_lighter_crimson = TCOD_color_t(255, 127, 159);
222 
223 // lightest colors
224 const TCOD_color_t TCOD_lightest_red = TCOD_color_t(255, 191, 191);
225 const TCOD_color_t TCOD_lightest_flame = TCOD_color_t(255, 207, 191);
226 const TCOD_color_t TCOD_lightest_orange = TCOD_color_t(255, 223, 191);
227 const TCOD_color_t TCOD_lightest_amber = TCOD_color_t(255, 239, 191);
228 const TCOD_color_t TCOD_lightest_yellow = TCOD_color_t(255, 255, 191);
229 const TCOD_color_t TCOD_lightest_lime = TCOD_color_t(239, 255, 191);
230 const TCOD_color_t TCOD_lightest_chartreuse = TCOD_color_t(223, 255, 191);
231 const TCOD_color_t TCOD_lightest_green = TCOD_color_t(191, 255, 191);
232 const TCOD_color_t TCOD_lightest_sea = TCOD_color_t(191, 255, 223);
233 const TCOD_color_t TCOD_lightest_turquoise = TCOD_color_t(191, 255, 239);
234 const TCOD_color_t TCOD_lightest_cyan = TCOD_color_t(191, 255, 255);
235 const TCOD_color_t TCOD_lightest_sky = TCOD_color_t(191, 239, 255);
236 const TCOD_color_t TCOD_lightest_azure = TCOD_color_t(191, 223, 255);
237 const TCOD_color_t TCOD_lightest_blue = TCOD_color_t(191, 191, 255);
238 const TCOD_color_t TCOD_lightest_han = TCOD_color_t(207, 191, 255);
239 const TCOD_color_t TCOD_lightest_violet = TCOD_color_t(223, 191, 255);
240 const TCOD_color_t TCOD_lightest_purple = TCOD_color_t(239, 191, 255);
241 const TCOD_color_t TCOD_lightest_fuchsia = TCOD_color_t(255, 191, 255);
242 const TCOD_color_t TCOD_lightest_magenta = TCOD_color_t(255, 191, 239);
243 const TCOD_color_t TCOD_lightest_pink = TCOD_color_t(255, 191, 223);
244 const TCOD_color_t TCOD_lightest_crimson = TCOD_color_t(255, 191, 207);
245 
246 // desaturated
247 const TCOD_color_t TCOD_desaturated_red = TCOD_color_t(127, 63, 63);
248 const TCOD_color_t TCOD_desaturated_flame = TCOD_color_t(127, 79, 63);
249 const TCOD_color_t TCOD_desaturated_orange = TCOD_color_t(127, 95, 63);
250 const TCOD_color_t TCOD_desaturated_amber = TCOD_color_t(127, 111, 63);
251 const TCOD_color_t TCOD_desaturated_yellow = TCOD_color_t(127, 127, 63);
252 const TCOD_color_t TCOD_desaturated_lime = TCOD_color_t(111, 127, 63);
253 const TCOD_color_t TCOD_desaturated_chartreuse = TCOD_color_t(95, 127, 63);
254 const TCOD_color_t TCOD_desaturated_green = TCOD_color_t(63, 127, 63);
255 const TCOD_color_t TCOD_desaturated_sea = TCOD_color_t(63, 127, 95);
256 const TCOD_color_t TCOD_desaturated_turquoise = TCOD_color_t(63, 127, 111);
257 const TCOD_color_t TCOD_desaturated_cyan = TCOD_color_t(63, 127, 127);
258 const TCOD_color_t TCOD_desaturated_sky = TCOD_color_t(63, 111, 127);
259 const TCOD_color_t TCOD_desaturated_azure = TCOD_color_t(63, 95, 127);
260 const TCOD_color_t TCOD_desaturated_blue = TCOD_color_t(63, 63, 127);
261 const TCOD_color_t TCOD_desaturated_han = TCOD_color_t(79, 63, 127);
262 const TCOD_color_t TCOD_desaturated_violet = TCOD_color_t(95, 63, 127);
263 const TCOD_color_t TCOD_desaturated_purple = TCOD_color_t(111, 63, 127);
264 const TCOD_color_t TCOD_desaturated_fuchsia = TCOD_color_t(127, 63, 127);
265 const TCOD_color_t TCOD_desaturated_magenta = TCOD_color_t(127, 63, 111);
266 const TCOD_color_t TCOD_desaturated_pink = TCOD_color_t(127, 63, 95);
267 const TCOD_color_t TCOD_desaturated_crimson = TCOD_color_t(127, 63, 79);
268 
269 // metallic
270 const TCOD_color_t TCOD_brass = TCOD_color_t(191, 151, 96);
271 const TCOD_color_t TCOD_copper = TCOD_color_t(197, 136, 124);
272 const TCOD_color_t TCOD_gold = TCOD_color_t(229, 191, 0);
273 const TCOD_color_t TCOD_silver = TCOD_color_t(203, 203, 203);
274 
275 // miscellaneous
276 const TCOD_color_t TCOD_celadon = TCOD_color_t(172, 255, 175);
277 const TCOD_color_t TCOD_peach = TCOD_color_t(255, 159, 127);
278 
279 // --- Console ---
280 
281 alias int TCOD_keycode_t;
282 enum : TCOD_keycode_t {
283     TCODK_NONE,
284     TCODK_ESCAPE,
285     TCODK_BACKSPACE,
286     TCODK_TAB,
287     TCODK_ENTER,
288     TCODK_SHIFT,
289     TCODK_CONTROL,
290     TCODK_ALT,
291     TCODK_PAUSE,
292     TCODK_CAPSLOCK,
293     TCODK_PAGEUP,
294     TCODK_PAGEDOWN,
295     TCODK_END,
296     TCODK_HOME,
297     TCODK_UP,
298     TCODK_LEFT,
299     TCODK_RIGHT,
300     TCODK_DOWN,
301     TCODK_PRINTSCREEN,
302     TCODK_INSERT,
303     TCODK_DELETE,
304     TCODK_LWIN,
305     TCODK_RWIN,
306     TCODK_APPS,
307     TCODK_0,
308     TCODK_1,
309     TCODK_2,
310     TCODK_3,
311     TCODK_4,
312     TCODK_5,
313     TCODK_6,
314     TCODK_7,
315     TCODK_8,
316     TCODK_9,
317     TCODK_KP0,
318     TCODK_KP1,
319     TCODK_KP2,
320     TCODK_KP3,
321     TCODK_KP4,
322     TCODK_KP5,
323     TCODK_KP6,
324     TCODK_KP7,
325     TCODK_KP8,
326     TCODK_KP9,
327     TCODK_KPADD,
328     TCODK_KPSUB,
329     TCODK_KPDIV,
330     TCODK_KPMUL,
331     TCODK_KPDEC,
332     TCODK_KPENTER,
333     TCODK_F1,
334     TCODK_F2,
335     TCODK_F3,
336     TCODK_F4,
337     TCODK_F5,
338     TCODK_F6,
339     TCODK_F7,
340     TCODK_F8,
341     TCODK_F9,
342     TCODK_F10,
343     TCODK_F11,
344     TCODK_F12,
345     TCODK_NUMLOCK,
346     TCODK_SCROLLLOCK,
347     TCODK_SPACE,
348     TCODK_CHAR,
349     TCODK_TEXT
350 }
351 
352 immutable TCOD_KEY_TEXT_SIZE = 32;
353 
354 /* key data : special code or character or text */
355 struct TCOD_key_t {
356     TCOD_keycode_t vk; /*  key code */
357     char c; /* character if vk == TCODK_CHAR else 0 */
358     char[TCOD_KEY_TEXT_SIZE] text; /* text if vk == TCODK_TEXT else text[0] == '\0' */
359     bool pressed;
360     bool lalt;
361     bool lctrl;
362     bool lmeta;
363     bool ralt;
364     bool rctrl;
365     bool rmeta;
366     bool shift;
367 }
368 
369 enum {
370     // single walls
371     TCOD_CHAR_HLINE=196,
372     TCOD_CHAR_VLINE=179,
373     TCOD_CHAR_NE=191,
374     TCOD_CHAR_NW=218,
375     TCOD_CHAR_SE=217,
376     TCOD_CHAR_SW=192,
377     TCOD_CHAR_TEEW=180,
378     TCOD_CHAR_TEEE=195,
379     TCOD_CHAR_TEEN=193,
380     TCOD_CHAR_TEES=194,
381     TCOD_CHAR_CROSS=197,
382     // double walls
383     TCOD_CHAR_DHLINE=205,
384     TCOD_CHAR_DVLINE=186,
385     TCOD_CHAR_DNE=187,
386     TCOD_CHAR_DNW=201,
387     TCOD_CHAR_DSE=188,
388     TCOD_CHAR_DSW=200,
389     TCOD_CHAR_DTEEW=185,
390     TCOD_CHAR_DTEEE=204,
391     TCOD_CHAR_DTEEN=202,
392     TCOD_CHAR_DTEES=203,
393     TCOD_CHAR_DCROSS=206,
394     // blocks
395     TCOD_CHAR_BLOCK1=176,
396     TCOD_CHAR_BLOCK2=177,
397     TCOD_CHAR_BLOCK3=178,
398     // arrows
399     TCOD_CHAR_ARROW_N=24,
400     TCOD_CHAR_ARROW_S=25,
401     TCOD_CHAR_ARROW_E=26,
402     TCOD_CHAR_ARROW_W=27,
403     // arrows without tail
404     TCOD_CHAR_ARROW2_N=30,
405     TCOD_CHAR_ARROW2_S=31,
406     TCOD_CHAR_ARROW2_E=16,
407     TCOD_CHAR_ARROW2_W=17,
408     // double arrows
409     TCOD_CHAR_DARROW_H=29,
410     TCOD_CHAR_DARROW_V=18,
411     // GUI stuff
412     TCOD_CHAR_CHECKBOX_UNSET=224,
413     TCOD_CHAR_CHECKBOX_SET=225,
414     TCOD_CHAR_RADIO_UNSET=9,
415     TCOD_CHAR_RADIO_SET=10,
416     // sub-pixel resolution kit
417     TCOD_CHAR_SUBP_NW=226,
418     TCOD_CHAR_SUBP_NE=227,
419     TCOD_CHAR_SUBP_N=228,
420     TCOD_CHAR_SUBP_SE=229,
421     TCOD_CHAR_SUBP_DIAG=230,
422     TCOD_CHAR_SUBP_E=231,
423     TCOD_CHAR_SUBP_SW=232,
424     /* miscellaneous */
425     TCOD_CHAR_SMILIE = 1,
426     TCOD_CHAR_SMILIE_INV = 2,
427     TCOD_CHAR_HEART = 3,
428     TCOD_CHAR_DIAMOND = 4,
429     TCOD_CHAR_CLUB = 5,
430     TCOD_CHAR_SPADE = 6,
431     TCOD_CHAR_BULLET = 7,
432     TCOD_CHAR_BULLET_INV = 8,
433     TCOD_CHAR_MALE = 11,
434     TCOD_CHAR_FEMALE = 12,
435     TCOD_CHAR_NOTE = 13,
436     TCOD_CHAR_NOTE_DOUBLE = 14,
437     TCOD_CHAR_LIGHT = 15,
438     TCOD_CHAR_EXCLAM_DOUBLE = 19,
439     TCOD_CHAR_PILCROW = 20,
440     TCOD_CHAR_SECTION = 21,
441     TCOD_CHAR_POUND = 156,
442     TCOD_CHAR_MULTIPLICATION = 158,
443     TCOD_CHAR_FUNCTION = 159,
444     TCOD_CHAR_RESERVED = 169,
445     TCOD_CHAR_HALF = 171,
446     TCOD_CHAR_ONE_QUARTER = 172,
447     TCOD_CHAR_COPYRIGHT = 184,
448     TCOD_CHAR_CENT = 189,
449     TCOD_CHAR_YEN = 190,
450     TCOD_CHAR_CURRENCY = 207,
451     TCOD_CHAR_THREE_QUARTERS = 243,
452     TCOD_CHAR_DIVISION = 246,
453     TCOD_CHAR_GRADE = 248,
454     TCOD_CHAR_UMLAUT = 249,
455     TCOD_CHAR_POW1 = 251,
456     TCOD_CHAR_POW3 = 252,
457     TCOD_CHAR_POW2 = 253,
458     TCOD_CHAR_BULLET_SQUARE = 254,
459 }
460 
461 alias int TCOD_colctrl_t;
462 enum : TCOD_colctrl_t {
463     TCOD_COLCTRL_1 = 1,
464     TCOD_COLCTRL_2,
465     TCOD_COLCTRL_3,
466     TCOD_COLCTRL_4,
467     TCOD_COLCTRL_5,
468     TCOD_COLCTRL_NUMBER=5,
469     TCOD_COLCTRL_FORE_RGB,
470     TCOD_COLCTRL_BACK_RGB,
471     TCOD_COLCTRL_STOP
472 }
473 
474 alias int TCOD_bkgnd_flag_t;
475 enum : TCOD_bkgnd_flag_t {
476     TCOD_BKGND_NONE,
477     TCOD_BKGND_SET,
478     TCOD_BKGND_MULTIPLY,
479     TCOD_BKGND_LIGHTEN,
480     TCOD_BKGND_DARKEN,
481     TCOD_BKGND_SCREEN,
482     TCOD_BKGND_COLOR_DODGE,
483     TCOD_BKGND_COLOR_BURN,
484     TCOD_BKGND_ADD,
485     TCOD_BKGND_ADDA,
486     TCOD_BKGND_BURN,
487     TCOD_BKGND_OVERLAY,
488     TCOD_BKGND_ALPH,
489     TCOD_BKGND_DEFAULT
490 }
491 
492 pure TCOD_bkgnd_flag_t TCOD_BKGND_ALPHA(T)(T alpha)
493 {
494     return (TCOD_BKGND_ALPH | (cast(ubyte)(alpha * 255) << 8));
495 }
496 
497 pure TCOD_bkgnd_flag_t TCOD_BKGND_ADDALPHA(T)(T alpha)
498 {
499     return (TCOD_BKGND_ADDA | (cast(ubyte)(alpha * 255) << 8));
500 }
501 
502 enum {
503     TCOD_KEY_PRESSED=1,
504     TCOD_KEY_RELEASED=2,
505 }
506 
507 /**
508  *  These font flags can be OR'd together into a bit-field and passed to
509  *  TCOD_console_set_custom_font
510  */
511 enum {
512     /** Tiles are arranged in column-major order.
513      *
514      *       0 3 6
515      *       1 4 7
516      *       2 5 8
517      */
518     TCOD_FONT_LAYOUT_ASCII_INCOL=1,
519     /** Tiles are arranged in row-major order.
520      *
521      *       0 1 2
522      *       3 4 5
523      *       6 7 8
524      */
525     TCOD_FONT_LAYOUT_ASCII_INROW=2,
526     /** Converts all tiles into a monochrome gradient. */
527     TCOD_FONT_TYPE_GREYSCALE=4,
528     TCOD_FONT_TYPE_GRAYSCALE=4,
529     /** A unique layout used by some of libtcod's fonts. */
530     TCOD_FONT_LAYOUT_TCOD=8,
531 }
532 
533 alias int TCOD_renderer_t;
534 /**
535  *  The available renderers.
536  */
537 enum : TCOD_renderer_t {
538     /** An OpenGL implementation using a shader. */
539     TCOD_RENDERER_GLSL,
540     /**
541      *  An OpenGL implementation without a shader.
542      *
543      *  Performs worse than TCOD_RENDERER_GLSL without many benefits.
544      */
545     TCOD_RENDERER_OPENGL,
546     /**
547      *  A software based renderer.
548      *
549      *  The font file is loaded into RAM instead of VRAM in this implementation.
550      */
551     TCOD_RENDERER_SDL,
552     TCOD_NB_RENDERERS,
553 }
554 
555 alias int TCOD_alignment_t;
556 enum : TCOD_alignment_t {
557     TCOD_LEFT,
558     TCOD_RIGHT,
559     TCOD_CENTER,
560 }
561 
562 alias void* TCOD_console_t;
563 
564 // --- Image. ---
565 alias void* TCOD_image_t;
566 
567 // --- Sys. ---
568 
569 alias int TCOD_event_t;
570 
571 enum : TCOD_event_t {
572     TCOD_EVENT_NONE=0,
573     TCOD_EVENT_KEY_PRESS = 1,
574     TCOD_EVENT_KEY_RELEASE = 2,
575     TCOD_EVENT_KEY = TCOD_EVENT_KEY_PRESS | TCOD_EVENT_KEY_RELEASE,
576     TCOD_EVENT_MOUSE_MOVE = 4,
577     TCOD_EVENT_MOUSE_PRESS = 8,
578     TCOD_EVENT_MOUSE_RELEASE = 16,
579     TCOD_EVENT_MOUSE = TCOD_EVENT_MOUSE_MOVE | TCOD_EVENT_MOUSE_PRESS | TCOD_EVENT_MOUSE_RELEASE,
580     TCOD_EVENT_FINGER_MOVE=32,
581     TCOD_EVENT_FINGER_PRESS=64,
582     TCOD_EVENT_FINGER_RELEASE=128,
583     TCOD_EVENT_FINGER=TCOD_EVENT_FINGER_MOVE|TCOD_EVENT_FINGER_PRESS|TCOD_EVENT_FINGER_RELEASE,
584     TCOD_EVENT_ANY=TCOD_EVENT_KEY|TCOD_EVENT_MOUSE|TCOD_EVENT_FINGER,
585 }
586 
587 alias void* TCOD_thread_t;
588 alias void* TCOD_semaphore_t;
589 alias void* TCOD_mutex_t;
590 alias void* TCOD_cond_t;
591 alias void* TCOD_library_t;
592 
593 alias void function(void* sdl_surface) SDL_renderer_t;
594 
595 // --- Mersenne. ---
596 alias void* TCOD_random_t;
597 alias int TCOD_random_algo_t;
598 enum : TCOD_random_algo_t
599 {
600     TCOD_RNG_MT,
601     TCOD_RNG_CMWC,
602 }
603 
604 alias int TCOD_distribution_t;
605 enum : TCOD_distribution_t
606 {
607     TCOD_DISTRIBUTION_LINEAR,
608     TCOD_DISTRIBUTION_GAUSSIAN,
609     TCOD_DISTRIBUTION_GAUSSIAN_RANGE,
610     TCOD_DISTRIBUTION_GAUSSIAN_INVERSE,
611     TCOD_DISTRIBUTION_GAUSSIAN_RANGE_INVERSE,
612 }
613 
614 // --- Mouse. ---
615 struct TCOD_mouse_t {
616     int x,y; /* absolute position */
617     int dx,dy; /* movement since last update in pixels */
618     int cx,cy; /* cell coordinates in the root console */
619     int dcx,dcy; /* movement since last update in console cells */
620     bool lbutton;
621     bool rbutton;
622     bool mbutton;
623     bool lbutton_pressed;
624     bool rbutton_pressed;
625     bool mbutton_pressed;
626     bool wheel_up;
627     bool wheel_down;
628 }
629 
630 // --- Bresenham. ---
631 alias bool function(int x, int y) TCOD_line_listener_t;
632 
633 struct TCOD_bresenham_data_t {
634     int stepx;
635     int stepy;
636     int e;
637     int deltax;
638     int deltay;
639     int origx;
640     int origy;
641     int destx;
642     int desty;
643 }
644 
645 // --- BSP. ---
646 struct TCOD_bsp_t {
647     TCOD_tree_t tree; /* pseudo oop : bsp inherit tree */
648     int x,y,w,h; /* node position & size */
649     int position; /* position of splitting */
650     ubyte level; /* level in the tree */
651     bool horizontal; /* horizontal splitting ? */
652 }
653 
654 alias bool function(TCOD_bsp_t* node, void* userData) TCOD_bsp_callback_t;
655 
656 // --- Noise. ---
657 alias void* TCOD_noise_t;
658 
659 const int TCOD_NOISE_MAX_OCTAVES = 128;
660 const int TCOD_NOISE_MAX_DIMENSIONS = 4;
661 const float TCOD_NOISE_DEFAULT_HURST = 0.5f;
662 const float TCOD_NOISE_DEFAULT_LACUNARITY = 2.0f;
663 
664 alias int TCOD_noise_type_t;
665 enum : TCOD_noise_type_t {
666     TCOD_NOISE_PERLIN = 1,
667     TCOD_NOISE_SIMPLEX = 2,
668     TCOD_NOISE_WAVELET = 4,
669     TCOD_NOISE_DEFAULT = 0,
670 }
671 
672 // --- FOV. ---
673 alias void* TCOD_map_t;
674 
675 // FOV_BASIC : http://roguebasin.roguelikedevelopment.org/index.php?title=Ray_casting
676 // FOV_DIAMOND : http://www.geocities.com/temerra/los_rays.html
677 // FOV_SHADOW : http://roguebasin.roguelikedevelopment.org/index.php?title=FOV_using_recursive_shadowcasting
678 // FOV_PERMISSIVE : http://roguebasin.roguelikedevelopment.org/index.php?title=Precise_Permissive_Field_of_View
679 // FOV_RESTRICTIVE : Mingos' Restrictive Precise Angle Shadowcasting (contribution by Mingos)
680 
681 alias int TCOD_fov_algorithm_t;
682 enum : TCOD_fov_algorithm_t {
683     FOV_BASIC,
684     FOV_DIAMOND,
685     FOV_SHADOW,
686     FOV_PERMISSIVE_0,
687     FOV_PERMISSIVE_1,
688     FOV_PERMISSIVE_2,
689     FOV_PERMISSIVE_3,
690     FOV_PERMISSIVE_4,
691     FOV_PERMISSIVE_5,
692     FOV_PERMISSIVE_6,
693     FOV_PERMISSIVE_7,
694     FOV_PERMISSIVE_8,
695     FOV_RESTRICTIVE,
696     NB_FOV_ALGORITHMS
697 }
698 
699 TCOD_fov_algorithm_t FOV_PERMISSIVE(int x) { return FOV_PERMISSIVE_0 + x; }
700 
701 // --- Path. ---
702 alias float function(int xFrom, int yFrom, int xTo, int yTo, void* user_data) TCOD_path_func_t;
703 alias void *TCOD_path_t;
704 alias void* TCOD_dijkstra_t;
705 
706 // --- Lex. ---
707 const int TCOD_LEX_FLAG_NOCASE = 1;
708 const int TCOD_LEX_FLAG_NESTING_COMMENT = 2;
709 const int TCOD_LEX_FLAG_TOKENIZE_COMMENTS = 4;
710 
711 const int TCOD_LEX_ERROR = -1;
712 const int TCOD_LEX_UNKNOWN = 0;
713 const int TCOD_LEX_SYMBOL = 1;
714 const int TCOD_LEX_KEYWORD = 2;
715 const int TCOD_LEX_IDEN = 3;
716 const int TCOD_LEX_STRING = 4;
717 const int TCOD_LEX_INTEGER = 5;
718 const int TCOD_LEX_FLOAT = 6;
719 const int TCOD_LEX_CHAR = 7;
720 const int TCOD_LEX_EOF = 8;
721 const int TCOD_LEX_COMMENT = 9;
722 
723 const int TCOD_LEX_MAX_SYMBOLS = 100;
724 const int TCOD_LEX_SYMBOL_SIZE = 5;
725 const int TCOD_LEX_MAX_KEYWORDS = 100;
726 const int TCOD_LEX_KEYWORD_SIZE = 20;
727 
728 struct TCOD_lex_t {
729     int file_line, token_type, token_int_val, token_idx;
730     float token_float_val;
731     char *tok;
732     int toklen;
733     char lastStringDelim;
734     char *pos;
735     char *buf;
736     char *filename;
737     char *last_javadoc_comment;
738     // private stuff
739     int nb_symbols, nb_keywords, flags;
740     char[TCOD_LEX_SYMBOL_SIZE][TCOD_LEX_MAX_SYMBOLS] symbols;
741     char[TCOD_LEX_KEYWORD_SIZE][TCOD_LEX_MAX_KEYWORDS] keywords;
742     charptr simpleCmt;
743     charptr cmtStart, cmtStop, javadocCmtStart;
744     charptr stringDelim;
745     bool javadoc_read;
746     bool allocBuf;
747     bool savept; // is this object a savepoint (no free in destructor)
748 }
749 
750 
751 // --- Parser. ---
752 /* generic type */
753 alias int TCOD_value_type_t;
754 enum : TCOD_value_type_t {
755     TCOD_TYPE_NONE,
756     TCOD_TYPE_BOOL,
757     TCOD_TYPE_CHAR,
758     TCOD_TYPE_INT,
759     TCOD_TYPE_FLOAT,
760     TCOD_TYPE_STRING,
761     TCOD_TYPE_COLOR,
762     TCOD_TYPE_DICE,
763     TCOD_TYPE_VALUELIST00,
764     TCOD_TYPE_VALUELIST01,
765     TCOD_TYPE_VALUELIST02,
766     TCOD_TYPE_VALUELIST03,
767     TCOD_TYPE_VALUELIST04,
768     TCOD_TYPE_VALUELIST05,
769     TCOD_TYPE_VALUELIST06,
770     TCOD_TYPE_VALUELIST07,
771     TCOD_TYPE_VALUELIST08,
772     TCOD_TYPE_VALUELIST09,
773     TCOD_TYPE_VALUELIST10,
774     TCOD_TYPE_VALUELIST11,
775     TCOD_TYPE_VALUELIST12,
776     TCOD_TYPE_VALUELIST13,
777     TCOD_TYPE_VALUELIST14,
778     TCOD_TYPE_VALUELIST15,
779     TCOD_TYPE_CUSTOM00,
780     TCOD_TYPE_CUSTOM01,
781     TCOD_TYPE_CUSTOM02,
782     TCOD_TYPE_CUSTOM03,
783     TCOD_TYPE_CUSTOM04,
784     TCOD_TYPE_CUSTOM05,
785     TCOD_TYPE_CUSTOM06,
786     TCOD_TYPE_CUSTOM07,
787     TCOD_TYPE_CUSTOM08,
788     TCOD_TYPE_CUSTOM09,
789     TCOD_TYPE_CUSTOM10,
790     TCOD_TYPE_CUSTOM11,
791     TCOD_TYPE_CUSTOM12,
792     TCOD_TYPE_CUSTOM13,
793     TCOD_TYPE_CUSTOM14,
794     TCOD_TYPE_CUSTOM15,
795     TCOD_TYPE_LIST=1024
796 }
797 
798 /* dice roll */
799 struct TCOD_dice_t {
800     int nb_dices;
801     int nb_faces;
802     float multiplier;
803     float addsub;
804 }
805 
806 /* generic value */
807 union TCOD_value_t {
808     bool b;
809     char c;
810     int i;
811     float f;
812     char *s;
813     TCOD_color_t col;
814     TCOD_dice_t dice;
815     TCOD_list_t list;
816     void *custom;
817 }
818 
819 /* parser structures */
820 alias void *TCOD_parser_struct_t;
821 
822 /* parser listener */
823 struct TCOD_parser_listener_t {
824     bool function(TCOD_parser_struct_t str, charptr name) new_struct;
825     bool function(charptr name) new_flag;
826     bool function(charptr propname, TCOD_value_type_t type, TCOD_value_t value) new_property;
827     bool function(TCOD_parser_struct_t str, charptr name) end_struct;
828     void function(charptr msg) error;
829 }
830 
831 /* a custom type parser */
832 alias TCOD_value_t function(TCOD_lex_t* lex, TCOD_parser_listener_t* listener, TCOD_parser_struct_t str, charptr propname) TCOD_parser_custom_t;
833 
834 /* the parser */
835 alias void *TCOD_parser_t;
836 
837 /* parser internals (may be used by custom type parsers) */
838 /* parser structures */
839 struct TCOD_struct_int_t {
840     charptr name; /* entity type name */
841     /* list of flags */
842     TCOD_list_t flags;
843     /* list of properties (name, type, mandatory) */
844     TCOD_list_t props;
845     /* list of value lists */
846     TCOD_list_t lists;
847     /* list of sub-structures */
848     TCOD_list_t structs;
849 }
850 
851 /* the parser */
852 struct TCOD_parser_int_t {
853     /* list of structures */
854     TCOD_list_t structs;
855     /* list of custom type parsers */
856     TCOD_parser_custom_t[16] customs;
857     /* fatal error occurred */
858     bool fatal;
859     // list of properties if default listener is used
860     TCOD_list_t props;
861 }
862 
863 
864 // --- Tree. ---
865 struct TCOD_tree_t {
866     TCOD_tree_t *next;
867     TCOD_tree_t *father;
868     TCOD_tree_t *sons;
869 }
870 
871 
872 // --- Heightmap. ---
873 struct TCOD_heightmap_t {
874     int w,h;
875     float *values;
876 }
877 
878 
879 // --- Zip. ---
880 alias void* TCOD_zip_t;
881 
882 
883 // --- Namegen. ---
884 alias void* TCOD_namegen_t;
885 
886 
887 // --- Txtfield. ---
888 alias void* TCOD_text_t;