1 module riverd.ncurses.inline;
2 
3 import riverd.ncurses.types;
4 
5 version(RiverD_NCurses_Static) {
6 	import riverd.ncurses.statfun;
7 	alias nclear = riverd.ncurses.statfun.clear;
8 } else {
9 	import riverd.ncurses.dynload;
10 	alias nclear = riverd.ncurses.dynload.clear;
11 }
12 
13 alias fixterm = reset_prog_mode;
14 alias resetterm = reset_shell_mode;
15 alias saveterm = def_prog_mode;
16 alias crmode = cbreak;
17 alias nocrmode = nocbreak;
18 
19 alias vw_printw = vwprintw;
20 alias vw_scanw = vwscanw;
21 
22 alias _tracech_t = _tracechtype;
23 alias _tracech_t2 = _tracechtype2;
24 
25 extern (D) auto clear()
26 {
27 	return wclear(stdscr);
28 }
29 
30 extern (D) auto clrtobot()
31 {
32 	return wclrtobot(stdscr);
33 }
34 
35 extern (D) auto clrtoeol()
36 {
37 	return wclrtoeol(stdscr);
38 }
39 
40 extern (D) auto delch()
41 {
42 	return wdelch(stdscr);
43 }
44 
45 extern (D) auto deleteln()
46 {
47 	return winsdelln(stdscr, -1);
48 }
49 
50 
51 extern (D) auto erase()
52 {
53 	return werase(stdscr);
54 }
55 
56 extern (D) auto getch()
57 {
58 	return wgetch(stdscr);
59 }
60 
61 extern (D) auto inch()
62 {
63 	return winch(stdscr);
64 }
65 
66 extern (D) auto insertln()
67 {
68 	return winsdelln(stdscr, 1);
69 }
70 
71 extern (D) auto scrl(T)(auto ref T n)
72 {
73 	return wscrl(stdscr, n);
74 }
75 
76 extern (D) auto refresh()
77 {
78 	return wrefresh(stdscr);
79 }
80 
81 extern (D) auto wstandout(T)(auto ref T win)
82 {
83 	return wattrset(win, A_STANDOUT);
84 }
85 
86 extern (D) auto wstandend(T)(auto ref T win)
87 {
88 	return wattrset(win, A_NORMAL);
89 }
90 
91 extern (D) auto standend()
92 {
93 	return wstandend(stdscr);
94 }
95 
96 extern (D) auto standout()
97 {
98 	return wstandout(stdscr);
99 }
100 
101 extern (D) auto wattron(T0, T1)(auto ref T0 win, auto ref T1 at)
102 {
103 	return wattr_on(win, NCURSES_CAST!attr_t(at), null);
104 }
105 
106 extern (D) auto wattroff(T0, T1)(auto ref T0 win, auto ref T1 at)
107 {
108 	return wattr_off(win, NCURSES_CAST!attr_t(at), null);
109 }
110 
111 extern (D) auto border(T0, T1, T2, T3, T4, T5, T6, T7)(auto ref T0 ls, auto ref T1 rs, auto ref T2 ts, auto ref T3 bs, auto ref T4 tl, auto ref T5 tr, auto ref T6 bl, auto ref T7 br)
112 {
113 	return wborder(stdscr, ls, rs, ts, bs, tl, tr, bl, br);
114 }
115 
116 /*
117  * X/Open says this returns a bool; SVr4 also checked for out-of-range line.
118  * The macro provides compatibility:
119  */
120 extern (D) auto is_linetouched(T0, T1)(auto ref T0 w, auto ref T1 l)
121 {
122 	return (!w || (l > getmaxy(w)) || (l < 0)) ? ERR : is_linetouched(w, l);
123 }
124 
125 /*
126  * vid_attr() was implemented originally based on a draft of X/Open curses.
127  */
128 extern (D) auto vid_attr(T0, T1, T2)(auto ref T0 a, auto ref T1 pair, auto ref T2 opts)
129 {
130 	return vidattr(a);
131 }
132 
133 /*
134  * Most of the pseudo functions are macros that either provide compatibility
135  * with older versions of curses, or provide inline functionality to improve
136  * performance.
137  */
138 
139 /*
140  * These pseudo functions are always implemented as macros:
141  */
142 
143 /*
144  * These miscellaneous pseudo functions are provided for compatibility:
145  */
146 
147 extern (D) auto wgetstr(T0, T1)(auto ref T0 w, auto ref T1 s)
148 {
149 	return wgetnstr(w, s, -1);
150 }
151 
152 extern (D) auto getnstr(T0, T1)(auto ref T0 s, auto ref T1 n)
153 {
154 	return wgetnstr(stdscr, s, n);
155 }
156 
157 extern (D) auto setterm(T)(auto ref T term)
158 {
159 	return setupterm(term, 1, cast(int*) 0);
160 }
161 
162 extern (D) auto scroll(T)(auto ref T win)
163 {
164 	return wscrl(win, 1);
165 }
166 
167 extern (D) auto touchwin(T)(auto ref T win)
168 {
169 	return wtouchln(win, 0, getmaxy(win), 1);
170 }
171 
172 extern (D) auto touchline(T0, T1, T2)(auto ref T0 win, auto ref T1 s, auto ref T2 c)
173 {
174 	return wtouchln(win, s, c, 1);
175 }
176 
177 extern (D) auto untouchwin(T)(auto ref T win)
178 {
179 	return wtouchln(win, 0, getmaxy(win), 0);
180 }
181 
182 extern (D) auto box(T0, T1, T2)(auto ref T0 win, auto ref T1 v, auto ref T2 h)
183 {
184 	return wborder(win, v, v, h, h, 0, 0, 0, 0);
185 }
186 
187 extern (D) auto border(T0, T1, T2, T3, T4, T5, T6, T7)(auto ref T0 ls, auto ref T1 rs, auto ref T2 ts, auto ref T3 bs, auto ref T4 tl, auto ref T5 tr, auto ref T6 bl, auto ref T7 br)
188 {
189 	return wborder(stdscr, ls, rs, ts, bs, tl, tr, bl, br);
190 }
191 
192 extern (D) auto hline(T0, T1)(auto ref T0 ch, auto ref T1 n)
193 {
194 	return whline(stdscr, ch, n);
195 }
196 
197 extern (D) auto vline(T0, T1)(auto ref T0 ch, auto ref T1 n)
198 {
199 	return wvline(stdscr, ch, n);
200 }
201 
202 extern (D) auto winstr(T0, T1)(auto ref T0 w, auto ref T1 s)
203 {
204 	return winnstr(w, s, -1);
205 }
206 
207 extern (D) auto winchstr(T0, T1)(auto ref T0 w, auto ref T1 s)
208 {
209 	return winchnstr(w, s, -1);
210 }
211 
212 extern (D) auto winsstr(T0, T1)(auto ref T0 w, auto ref T1 s)
213 {
214 	return winsnstr(w, s, -1);
215 }
216 
217 extern (D) auto redrawwin(T)(auto ref T win)
218 {
219 	return wredrawln(win, 0, NCURSES_OK_ADDR(win) ? win._maxy + 1 : -1);
220 }
221 
222 /* NCURSES_OPAQUE */
223 
224 extern (D) auto waddstr(T0, T1)(auto ref T0 win, auto ref T1 str)
225 {
226 	return waddnstr(win, str, -1);
227 }
228 
229 extern (D) auto waddchstr(T0, T1)(auto ref T0 win, auto ref T1 str)
230 {
231 	return waddchnstr(win, str, -1);
232 }
233 
234 /*
235  * pseudo functions for standard screen
236  */
237 
238 extern (D) auto addch(T)(auto ref T ch)
239 {
240 	return waddch(stdscr, ch);
241 }
242 
243 extern (D) auto addchnstr(T0, T1)(auto ref T0 str, auto ref T1 n)
244 {
245 	return waddchnstr(stdscr, str, n);
246 }
247 
248 extern (D) auto addchstr(T)(auto ref T str)
249 {
250 	return waddchstr(stdscr, str);
251 }
252 
253 extern (D) auto addnstr(T0, T1)(auto ref T0 str, auto ref T1 n)
254 {
255 	return waddnstr(stdscr, str, n);
256 }
257 
258 extern (D) auto addstr(T)(auto ref T str)
259 {
260 	return waddnstr(stdscr, str, -1);
261 }
262 
263 extern (D) auto attr_get(T0, T1, T2)(auto ref T0 ap, auto ref T1 cp, auto ref T2 o)
264 {
265 	return wattr_get(stdscr, ap, cp, o);
266 }
267 
268 extern (D) auto attr_off(T0, T1)(auto ref T0 a, auto ref T1 o)
269 {
270 	return wattr_off(stdscr, a, o);
271 }
272 
273 extern (D) auto attr_on(T0, T1)(auto ref T0 a, auto ref T1 o)
274 {
275 	return wattr_on(stdscr, a, o);
276 }
277 
278 extern (D) auto attr_set(T0, T1, T2)(auto ref T0 a, auto ref T1 c, auto ref T2 o)
279 {
280 	return wattr_set(stdscr, a, c, o);
281 }
282 
283 extern (D) auto attroff(T)(auto ref T at)
284 {
285 	return wattroff(stdscr, at);
286 }
287 
288 extern (D) auto attron(T)(auto ref T at)
289 {
290 	return wattron(stdscr, at);
291 }
292 
293 extern (D) auto attrset(T)(auto ref T at)
294 {
295 	return wattrset(stdscr, at);
296 }
297 
298 extern (D) auto bkgd(T)(auto ref T ch)
299 {
300 	return wbkgd(stdscr, ch);
301 }
302 
303 extern (D) auto bkgdset(T)(auto ref T ch)
304 {
305 	return wbkgdset(stdscr, ch);
306 }
307 
308 extern (D) auto chgat(T0, T1, T2, T3)(auto ref T0 n, auto ref T1 a, auto ref T2 c, auto ref T3 o)
309 {
310 	return wchgat(stdscr, n, a, c, o);
311 }
312 
313 extern (D) auto color_set(T0, T1)(auto ref T0 c, auto ref T1 o)
314 {
315 	return wcolor_set(stdscr, c, o);
316 }
317 
318 extern (D) auto echochar(T)(auto ref T c)
319 {
320 	return wechochar(stdscr, c);
321 }
322 
323 extern (D) auto getstr(T)(auto ref T str)
324 {
325 	return wgetstr(stdscr, str);
326 }
327 
328 extern (D) auto inchnstr(T0, T1)(auto ref T0 s, auto ref T1 n)
329 {
330 	return winchnstr(stdscr, s, n);
331 }
332 
333 extern (D) auto inchstr(T)(auto ref T s)
334 {
335 	return winchstr(stdscr, s);
336 }
337 
338 extern (D) auto innstr(T0, T1)(auto ref T0 s, auto ref T1 n)
339 {
340 	return winnstr(stdscr, s, n);
341 }
342 
343 extern (D) auto insch(T)(auto ref T c)
344 {
345 	return winsch(stdscr, c);
346 }
347 
348 extern (D) auto insdelln(T)(auto ref T n)
349 {
350 	return winsdelln(stdscr, n);
351 }
352 
353 extern (D) auto insnstr(T0, T1)(auto ref T0 s, auto ref T1 n)
354 {
355 	return winsnstr(stdscr, s, n);
356 }
357 
358 extern (D) auto insstr(T)(auto ref T s)
359 {
360 	return winsstr(stdscr, s);
361 }
362 
363 extern (D) auto instr(T)(auto ref T s)
364 {
365 	return winstr(stdscr, s);
366 }
367 
368 extern (D) auto move(T0, T1)(auto ref T0 y, auto ref T1 x)
369 {
370 	return wmove(stdscr, y, x);
371 }
372 
373 extern (D) auto setscrreg(T0, T1)(auto ref T0 t, auto ref T1 b)
374 {
375 	return wsetscrreg(stdscr, t, b);
376 }
377 
378 extern (D) auto timeout(T)(auto ref T delay)
379 {
380 	return wtimeout(stdscr, delay);
381 }
382 
383 extern (D) auto wdeleteln(T)(auto ref T win)
384 {
385 	return winsdelln(win, -1);
386 }
387 
388 extern (D) auto winsertln(T)(auto ref T win)
389 {
390 	return winsdelln(win, 1);
391 }
392 
393 /*
394  * mv functions
395  */
396 
397 extern (D) auto mvwaddch(T0, T1, T2, T3)(auto ref T0 win, auto ref T1 y, auto ref T2 x, auto ref T3 ch)
398 {
399 	return wmove(win, y, x) == ERR ? ERR : waddch(win, ch);
400 }
401 
402 extern (D) auto mvwaddchnstr(T0, T1, T2, T3, T4)(auto ref T0 win, auto ref T1 y, auto ref T2 x, auto ref T3 str, auto ref T4 n)
403 {
404 	return wmove(win, y, x) == ERR ? ERR : waddchnstr(win, str, n);
405 }
406 
407 extern (D) auto mvwaddchstr(T0, T1, T2, T3)(auto ref T0 win, auto ref T1 y, auto ref T2 x, auto ref T3 str)
408 {
409 	return wmove(win, y, x) == ERR ? ERR : waddchnstr(win, str, -1);
410 }
411 
412 extern (D) auto mvwaddnstr(T0, T1, T2, T3, T4)(auto ref T0 win, auto ref T1 y, auto ref T2 x, auto ref T3 str, auto ref T4 n)
413 {
414 	return wmove(win, y, x) == ERR ? ERR : waddnstr(win, str, n);
415 }
416 
417 extern (D) auto mvwaddstr(T0, T1, T2, T3)(auto ref T0 win, auto ref T1 y, auto ref T2 x, auto ref T3 str)
418 {
419 	return wmove(win, y, x) == ERR ? ERR : waddnstr(win, str, -1);
420 }
421 
422 extern (D) auto mvwchgat(T0, T1, T2, T3, T4, T5, T6)(auto ref T0 win, auto ref T1 y, auto ref T2 x, auto ref T3 n, auto ref T4 a, auto ref T5 c, auto ref T6 o)
423 {
424 	return wmove(win, y, x) == ERR ? ERR : wchgat(win, n, a, c, o);
425 }
426 
427 extern (D) auto mvwdelch(T0, T1, T2)(auto ref T0 win, auto ref T1 y, auto ref T2 x)
428 {
429 	return wmove(win, y, x) == ERR ? ERR : wdelch(win);
430 }
431 
432 extern (D) auto mvwgetch(T0, T1, T2)(auto ref T0 win, auto ref T1 y, auto ref T2 x)
433 {
434 	return wmove(win, y, x) == ERR ? ERR : wgetch(win);
435 }
436 
437 extern (D) auto mvwgetnstr(T0, T1, T2, T3, T4)(auto ref T0 win, auto ref T1 y, auto ref T2 x, auto ref T3 str, auto ref T4 n)
438 {
439 	return wmove(win, y, x) == ERR ? ERR : wgetnstr(win, str, n);
440 }
441 
442 extern (D) auto mvwgetstr(T0, T1, T2, T3)(auto ref T0 win, auto ref T1 y, auto ref T2 x, auto ref T3 str)
443 {
444 	return wmove(win, y, x) == ERR ? ERR : wgetstr(win, str);
445 }
446 
447 extern (D) auto mvwhline(T0, T1, T2, T3, T4)(auto ref T0 win, auto ref T1 y, auto ref T2 x, auto ref T3 c, auto ref T4 n)
448 {
449 	return wmove(win, y, x) == ERR ? ERR : whline(win, c, n);
450 }
451 
452 extern (D) auto mvwinch(T0, T1, T2)(auto ref T0 win, auto ref T1 y, auto ref T2 x)
453 {
454 	return wmove(win, y, x) == ERR ? NCURSES_CAST!chtype(ERR) : winch(win);
455 }
456 
457 extern (D) auto mvwinchnstr(T0, T1, T2, T3, T4)(auto ref T0 win, auto ref T1 y, auto ref T2 x, auto ref T3 s, auto ref T4 n)
458 {
459 	return wmove(win, y, x) == ERR ? ERR : winchnstr(win, s, n);
460 }
461 
462 extern (D) auto mvwinchstr(T0, T1, T2, T3)(auto ref T0 win, auto ref T1 y, auto ref T2 x, auto ref T3 s)
463 {
464 	return wmove(win, y, x) == ERR ? ERR : winchstr(win, s);
465 }
466 
467 extern (D) auto mvwinnstr(T0, T1, T2, T3, T4)(auto ref T0 win, auto ref T1 y, auto ref T2 x, auto ref T3 s, auto ref T4 n)
468 {
469 	return wmove(win, y, x) == ERR ? ERR : winnstr(win, s, n);
470 }
471 
472 extern (D) auto mvwinsch(T0, T1, T2, T3)(auto ref T0 win, auto ref T1 y, auto ref T2 x, auto ref T3 c)
473 {
474 	return wmove(win, y, x) == ERR ? ERR : winsch(win, c);
475 }
476 
477 extern (D) auto mvwinsnstr(T0, T1, T2, T3, T4)(auto ref T0 win, auto ref T1 y, auto ref T2 x, auto ref T3 s, auto ref T4 n)
478 {
479 	return wmove(win, y, x) == ERR ? ERR : winsnstr(win, s, n);
480 }
481 
482 extern (D) auto mvwinsstr(T0, T1, T2, T3)(auto ref T0 win, auto ref T1 y, auto ref T2 x, auto ref T3 s)
483 {
484 	return wmove(win, y, x) == ERR ? ERR : winsstr(win, s);
485 }
486 
487 extern (D) auto mvwinstr(T0, T1, T2, T3)(auto ref T0 win, auto ref T1 y, auto ref T2 x, auto ref T3 s)
488 {
489 	return wmove(win, y, x) == ERR ? ERR : winstr(win, s);
490 }
491 
492 extern (D) auto mvwvline(T0, T1, T2, T3, T4)(auto ref T0 win, auto ref T1 y, auto ref T2 x, auto ref T3 c, auto ref T4 n)
493 {
494 	return wmove(win, y, x) == ERR ? ERR : wvline(win, c, n);
495 }
496 
497 extern (D) auto mvaddch(T0, T1, T2)(auto ref T0 y, auto ref T1 x, auto ref T2 ch)
498 {
499 	return mvwaddch(stdscr, y, x, ch);
500 }
501 
502 extern (D) auto mvaddchnstr(T0, T1, T2, T3)(auto ref T0 y, auto ref T1 x, auto ref T2 str, auto ref T3 n)
503 {
504 	return mvwaddchnstr(stdscr, y, x, str, n);
505 }
506 
507 extern (D) auto mvaddchstr(T0, T1, T2)(auto ref T0 y, auto ref T1 x, auto ref T2 str)
508 {
509 	return mvwaddchstr(stdscr, y, x, str);
510 }
511 
512 extern (D) auto mvaddnstr(T0, T1, T2, T3)(auto ref T0 y, auto ref T1 x, auto ref T2 str, auto ref T3 n)
513 {
514 	return mvwaddnstr(stdscr, y, x, str, n);
515 }
516 
517 extern (D) auto mvaddstr(T0, T1, T2)(auto ref T0 y, auto ref T1 x, auto ref T2 str)
518 {
519 	return mvwaddstr(stdscr, y, x, str);
520 }
521 
522 extern (D) auto mvchgat(T0, T1, T2, T3, T4, T5)(auto ref T0 y, auto ref T1 x, auto ref T2 n, auto ref T3 a, auto ref T4 c, auto ref T5 o)
523 {
524 	return mvwchgat(stdscr, y, x, n, a, c, o);
525 }
526 
527 extern (D) auto mvdelch(T0, T1)(auto ref T0 y, auto ref T1 x)
528 {
529 	return mvwdelch(stdscr, y, x);
530 }
531 
532 extern (D) auto mvgetch(T0, T1)(auto ref T0 y, auto ref T1 x)
533 {
534 	return mvwgetch(stdscr, y, x);
535 }
536 
537 extern (D) auto mvgetnstr(T0, T1, T2, T3)(auto ref T0 y, auto ref T1 x, auto ref T2 str, auto ref T3 n)
538 {
539 	return mvwgetnstr(stdscr, y, x, str, n);
540 }
541 
542 extern (D) auto mvgetstr(T0, T1, T2)(auto ref T0 y, auto ref T1 x, auto ref T2 str)
543 {
544 	return mvwgetstr(stdscr, y, x, str);
545 }
546 
547 extern (D) auto mvhline(T0, T1, T2, T3)(auto ref T0 y, auto ref T1 x, auto ref T2 c, auto ref T3 n)
548 {
549 	return mvwhline(stdscr, y, x, c, n);
550 }
551 
552 extern (D) auto mvinch(T0, T1)(auto ref T0 y, auto ref T1 x)
553 {
554 	return mvwinch(stdscr, y, x);
555 }
556 
557 extern (D) auto mvinchnstr(T0, T1, T2, T3)(auto ref T0 y, auto ref T1 x, auto ref T2 s, auto ref T3 n)
558 {
559 	return mvwinchnstr(stdscr, y, x, s, n);
560 }
561 
562 extern (D) auto mvinchstr(T0, T1, T2)(auto ref T0 y, auto ref T1 x, auto ref T2 s)
563 {
564 	return mvwinchstr(stdscr, y, x, s);
565 }
566 
567 extern (D) auto mvinnstr(T0, T1, T2, T3)(auto ref T0 y, auto ref T1 x, auto ref T2 s, auto ref T3 n)
568 {
569 	return mvwinnstr(stdscr, y, x, s, n);
570 }
571 
572 extern (D) auto mvinsch(T0, T1, T2)(auto ref T0 y, auto ref T1 x, auto ref T2 c)
573 {
574 	return mvwinsch(stdscr, y, x, c);
575 }
576 
577 extern (D) auto mvinsnstr(T0, T1, T2, T3)(auto ref T0 y, auto ref T1 x, auto ref T2 s, auto ref T3 n)
578 {
579 	return mvwinsnstr(stdscr, y, x, s, n);
580 }
581 
582 extern (D) auto mvinsstr(T0, T1, T2)(auto ref T0 y, auto ref T1 x, auto ref T2 s)
583 {
584 	return mvwinsstr(stdscr, y, x, s);
585 }
586 
587 extern (D) auto mvinstr(T0, T1, T2)(auto ref T0 y, auto ref T1 x, auto ref T2 s)
588 {
589 	return mvwinstr(stdscr, y, x, s);
590 }
591 
592 extern (D) auto mvvline(T0, T1, T2, T3)(auto ref T0 y, auto ref T1 x, auto ref T2 c, auto ref T3 n)
593 {
594 	return mvwvline(stdscr, y, x, c, n);
595 }
596 
597 /* NCURSES_OPAQUE */
598 
599 extern (D) auto slk_attr_off(T0, T1)(auto ref T0 a, auto ref T1 v)
600 {
601 	return v ? ERR : slk_attroff(a);
602 }
603 
604 extern (D) auto slk_attr_on(T0, T1)(auto ref T0 a, auto ref T1 v)
605 {
606 	return v ? ERR : slk_attron(a);
607 }
608 
609 extern (D) auto mouse_trafo(T0, T1, T2)(auto ref T0 y, auto ref T1 x, auto ref T2 to_screen)
610 {
611 	return wmouse_trafo(stdscr, y, x, to_screen);
612 }
613 
614 extern (D) void getyx(U:WINDOW*, T: int)(U win, ref T y, ref T x)
615 {
616 	y = getcury(win);
617 	x = getcurx(win);
618 }
619 
620 extern (D) void getparyx(U:WINDOW*, T: int)(U win, ref T y, ref T x)
621 {
622 	y = getpary(win);
623 	x = getparx(win);
624 }
625 extern (D) void getmaxyx(U:WINDOW*, T: int)(U win, ref T y, ref T x)
626 {
627 	y = getmaxy(win);
628 	x = getmaxx(win);
629 }
630 extern (D) void getbegyx(U:WINDOW*, T: int)(U win, ref T y, ref T x)
631 {
632 	y = getbegy(win);
633 	x = getbegx(win);
634 }