eb702b54c1335700d6d7ea1f9b1aa0a529144748
[gpxe.git] / src / include / curses.h
1 #ifndef CURSES_H
2 #define CURSES_H
3
4 #include <stdint.h>
5 #include <stdarg.h>
6
7 /** @file
8  *
9  * MuCurses header file
10  *
11  */
12
13 #undef  ERR
14 #define ERR     (1)
15
16 #undef  FALSE
17 #define FALSE   (0)
18
19 #undef  OK
20 #define OK      (0)
21
22 #undef  TRUE
23 #define TRUE    (1)
24
25 typedef uint32_t bool;
26 typedef uint32_t chtype;
27 typedef chtype attr_t;
28
29 /** Curses SCREEN object */
30 typedef struct _curses_screen {
31         /**
32          * Move cursor to position specified by x,y coords
33          *
34          * @v scr       screen on which to operate
35          * @v y         Y position
36          * @v x         X position
37          */
38         void ( * movetoyx ) ( struct _curses_screen *scr,
39                               unsigned int y, unsigned int x );
40         /**
41          * Write character to current cursor position
42          *
43          * @v scr       screen on which to operate
44          * @v c         character to be written
45          */
46         void ( * putc ) ( struct _curses_screen *scr, chtype c );
47         /**
48          * Read a character
49          *
50          * @v scr       screen on which to operate
51          * @ret c       character
52          */
53         int ( * getc ) ( struct _curses_screen *scr );
54 } SCREEN;
55
56 /** Curses Window struct */
57 typedef struct _curses_window {
58         /** screen with which window associates */
59         SCREEN *scr;
60         /** window attributes */
61         attr_t attrs;
62         /** window origin coordinates */
63         unsigned int ori_x, ori_y;
64         /** window cursor position */
65         unsigned int curs_x, curs_y;
66         /** window dimensions */
67         unsigned int width, height;
68 } WINDOW;
69
70 extern WINDOW _stdscr;
71 extern SCREEN _curscr;
72 extern unsigned short _COLS;
73 extern unsigned short _LINES;
74 extern unsigned short _COLOURS;
75 extern unsigned int *_COLOUR_PAIRS;
76
77 #define stdscr ( &_stdscr )
78 #define curscr ( &_curscr )
79 #define COLS _COLS
80 #define LINES _LINES
81 #define COLORS _COLOURS
82 #define COLOR_PAIRS COLOUR_PAIRS
83
84 #define MUCURSES_BITS( mask, shift ) (( mask ) << (shift))
85 #define CPAIR_SHIFT     8
86 #define ATTRS_SHIFT     16
87
88 #define A_DEFAULT       ( 1UL - 1UL )
89 #define A_ALTCHARSET    MUCURSES_BITS( 1UL, ATTRS_SHIFT + 0 )
90 #define A_BLINK         MUCURSES_BITS( 1UL, ATTRS_SHIFT + 1 )
91 #define A_BOLD          MUCURSES_BITS( 1UL, ATTRS_SHIFT + 2 )
92 #define A_DIM           MUCURSES_BITS( 1UL, ATTRS_SHIFT + 3 )
93 #define A_INVIS         MUCURSES_BITS( 1UL, ATTRS_SHIFT + 4 )
94 #define A_PROTECT       MUCURSES_BITS( 1UL, ATTRS_SHIFT + 5 )
95 #define A_REVERSE       MUCURSES_BITS( 1UL, ATTRS_SHIFT + 6 )
96 #define A_STANDOUT      MUCURSES_BITS( 1UL, ATTRS_SHIFT + 7 )
97 #define A_UNDERLINE     MUCURSES_BITS( 1UL, ATTRS_SHIFT + 8 )
98
99 #define WA_ALTCHARSET   A_ALTCHARSET
100 #define WA_BLINK        A_BLINK
101 #define WA_BOLD         A_BOLD
102 #define WA_DIM          A_DIM
103 #define WA_INVIS        A_INVIS
104 #define WA_PROTECT      A_PROTECT
105 #define WA_REVERSE      A_REVERSE
106 #define WA_STANDOUT     A_STANDOUT
107 #define WA_UNDERLINE    A_UNDERLINE
108 #define WA_HORIZONTAL   MUCURSES_BITS( 1UL, ATTRS_SHIFT + 9 )
109 #define WA_VERTICAL     MUCURSES_BITS( 1UL, ATTRS_SHIFT + 10 )
110 #define WA_LEFT         MUCURSES_BITS( 1UL, ATTRS_SHIFT + 11 )
111 #define WA_RIGHT        MUCURSES_BITS( 1UL, ATTRS_SHIFT + 12 )
112 #define WA_LOW          MUCURSES_BITS( 1UL, ATTRS_SHIFT + 13 )
113 #define WA_TOP          MUCURSES_BITS( 1UL, ATTRS_SHIFT + 14 )
114
115 #define A_ATTRIBUTES    ( MUCURSES_BITS( 1UL, ATTRS_SHIFT ) - 1UL )
116 #define A_CHARTEXT      ( MUCURSES_BITS( 1UL, 0 ) - 1UL )
117 #define A_COLOR         MUCURSES_BITS( ( 1UL << 8 ) - 1UL, CPAIR_SHIFT )
118
119 #define ACS_ULCORNER    '+'
120 #define ACS_LLCORNER    '+'
121 #define ACS_URCORNER    '+'
122 #define ACS_LRCORNER    '+'
123 #define ACS_RTEE        '+'
124 #define ACS_LTEE        '+'
125 #define ACS_BTEE        '+'
126 #define ACS_TTEE        '+'
127 #define ACS_HLINE       '-'
128 #define ACS_VLINE       '|'
129 #define ACS_PLUS        '+'
130 #define ACS_S1          '-'
131 #define ACS_S9          '_'
132 #define ACS_DIAMOND     '+'
133 #define ACS_CKBOARD     ':'
134 #define ACS_DEGREE      '\''
135 #define ACS_PLMINUS     '#'
136 #define ACS_BULLET      'o'
137 #define ACS_LARROW      '<'
138 #define ACS_RARROW      '>'
139 #define ACS_DARROW      'v'
140 #define ACS_UARROW      '^'
141 #define ACS_BOARD       '#'
142 #define ACS_LANTERN     '#'
143 #define ACS_BLOCK       '#'
144
145 #define COLOUR_BLACK    0
146 #define COLOUR_BLUE     1
147 #define COLOUR_GREEN    2
148 #define COLOUR_CYAN     3
149 #define COLOUR_RED      4
150 #define COLOUR_MAGENTA  5
151 #define COLOUR_YELLOW   6
152 #define COLOUR_WHITE    7
153
154 #define COLOR_BLACK     COLOUR_BLACK
155 #define COLOR_BLUE      COLOUR_BLUE
156 #define COLOR_GREEN     COLOUR_GREEN
157 #define COLOR_CYAN      COLOUR_CYAN
158 #define COLOR_RED       COLOUR_RED
159 #define COLOR_MAGENTA   COLOUR_MAGENTA
160 #define COLOR_YELLOW    COLOUR_YELLOW
161 #define COLOR_WHITE     COLOUR_WHITE
162
163 /*
164  * KEY code constants
165  */
166 #define KEY_BREAK       0401            /**< Break key */
167 #define KEY_DOWN        0402            /**< down-arrow key */
168 #define KEY_UP          0403            /**< up-arrow key */
169 #define KEY_LEFT        0404            /**< left-arrow key */
170 #define KEY_RIGHT       0405            /**< right-arrow key */
171 #define KEY_HOME        0406            /**< home key */
172 #define KEY_BACKSPACE   0407            /**< backspace key */
173 #define KEY_F0          0410            /**< Function keys.  Space for 64 */
174 #define KEY_F(n)        (KEY_F0+(n))    /**< Value of function key n */
175 #define KEY_DL          0510            /**< delete-line key */
176 #define KEY_IL          0511            /**< insert-line key */
177 #define KEY_DC          0512            /**< delete-character key */
178 #define KEY_IC          0513            /**< insert-character key */
179 #define KEY_EIC         0514            /**< sent by rmir or smir in insert mode */
180 #define KEY_CLEAR       0515            /**< clear-screen or erase key */
181 #define KEY_EOS         0516            /**< clear-to-end-of-screen key */
182 #define KEY_EOL         0517            /**< clear-to-end-of-line key */
183 #define KEY_SF          0520            /**< scroll-forward key */
184 #define KEY_SR          0521            /**< scroll-backward key */
185 #define KEY_NPAGE       0522            /**< next-page key */
186 #define KEY_PPAGE       0523            /**< previous-page key */
187 #define KEY_STAB        0524            /**< set-tab key */
188 #define KEY_CTAB        0525            /**< clear-tab key */
189 #define KEY_CATAB       0526            /**< clear-all-tabs key */
190 #define KEY_ENTER       0527            /**< enter/send key */
191 #define KEY_PRINT       0532            /**< print key */
192 #define KEY_LL          0533            /**< lower-left key (home down) */
193 #define KEY_A1          0534            /**< upper left of keypad */
194 #define KEY_A3          0535            /**< upper right of keypad */
195 #define KEY_B2          0536            /**< center of keypad */
196 #define KEY_C1          0537            /**< lower left of keypad */
197 #define KEY_C3          0540            /**< lower right of keypad */
198 #define KEY_BTAB        0541            /**< back-tab key */
199 #define KEY_BEG         0542            /**< begin key */
200 #define KEY_CANCEL      0543            /**< cancel key */
201 #define KEY_CLOSE       0544            /**< close key */
202 #define KEY_COMMAND     0545            /**< command key */
203 #define KEY_COPY        0546            /**< copy key */
204 #define KEY_CREATE      0547            /**< create key */
205 #define KEY_END         0550            /**< end key */
206 #define KEY_EXIT        0551            /**< exit key */
207 #define KEY_FIND        0552            /**< find key */
208 #define KEY_HELP        0553            /**< help key */
209 #define KEY_MARK        0554            /**< mark key */
210 #define KEY_MESSAGE     0555            /**< message key */
211 #define KEY_MOVE        0556            /**< move key */
212 #define KEY_NEXT        0557            /**< next key */
213 #define KEY_OPEN        0560            /**< open key */
214 #define KEY_OPTIONS     0561            /**< options key */
215 #define KEY_PREVIOUS    0562            /**< previous key */
216 #define KEY_REDO        0563            /**< redo key */
217 #define KEY_REFERENCE   0564            /**< reference key */
218 #define KEY_REFRESH     0565            /**< refresh key */
219 #define KEY_REPLACE     0566            /**< replace key */
220 #define KEY_RESTART     0567            /**< restart key */
221 #define KEY_RESUME      0570            /**< resume key */
222 #define KEY_SAVE        0571            /**< save key */
223 #define KEY_SBEG        0572            /**< shifted begin key */
224 #define KEY_SCANCEL     0573            /**< shifted cancel key */
225 #define KEY_SCOMMAND    0574            /**< shifted command key */
226 #define KEY_SCOPY       0575            /**< shifted copy key */
227 #define KEY_SCREATE     0576            /**< shifted create key */
228 #define KEY_SDC         0577            /**< shifted delete-character key */
229 #define KEY_SDL         0600            /**< shifted delete-line key */
230 #define KEY_SELECT      0601            /**< select key */
231 #define KEY_SEND        0602            /**< shifted end key */
232 #define KEY_SEOL        0603            /**< shifted clear-to-end-of-line key */
233 #define KEY_SEXIT       0604            /**< shifted exit key */
234 #define KEY_SFIND       0605            /**< shifted find key */
235 #define KEY_SHELP       0606            /**< shifted help key */
236 #define KEY_SHOME       0607            /**< shifted home key */
237 #define KEY_SIC         0610            /**< shifted insert-character key */
238 #define KEY_SLEFT       0611            /**< shifted left-arrow key */
239 #define KEY_SMESSAGE    0612            /**< shifted message key */
240 #define KEY_SMOVE       0613            /**< shifted move key */
241 #define KEY_SNEXT       0614            /**< shifted next key */
242 #define KEY_SOPTIONS    0615            /**< shifted options key */
243 #define KEY_SPREVIOUS   0616            /**< shifted previous key */
244 #define KEY_SPRINT      0617            /**< shifted print key */
245 #define KEY_SREDO       0620            /**< shifted redo key */
246 #define KEY_SREPLACE    0621            /**< shifted replace key */
247 #define KEY_SRIGHT      0622            /**< shifted right-arrow key */
248 #define KEY_SRSUME      0623            /**< shifted resume key */
249 #define KEY_SSAVE       0624            /**< shifted save key */
250 #define KEY_SSUSPEND    0625            /**< shifted suspend key */
251 #define KEY_SUNDO       0626            /**< shifted undo key */
252 #define KEY_SUSPEND     0627            /**< suspend key */
253 #define KEY_UNDO        0630            /**< undo key */
254 #define KEY_RESIZE      0632            /**< Terminal resize event */
255 #define KEY_EVENT       0633            /**< We were interrupted by an event */
256
257 #define KEY_MAX         0777            /* Maximum key value is 0633 */
258
259 /*extern int addch ( const chtype * );*/
260 /*extern int addchnstr ( const chtype *, int );*/
261 /*extern int addchstr ( const chtype * );*/
262 /*extern int addnstr ( const char *, int );*/
263 /*extern int addstr ( const char * );*/
264 /*extern int attroff ( int );*/
265 /*extern int attron ( int );*/
266 /*extern int attrset ( int );*/
267 extern int attr_get ( attr_t *, short *, void * );
268 extern int attr_off ( attr_t, void * );
269 extern int attr_on ( attr_t, void * );
270 extern int attr_set ( attr_t, short, void * );
271 extern int baudrate ( void );
272 extern int beep ( void );
273 /*extern void bkgdset ( chtype );*/
274 /*extern int border ( chtype, chtype, chtype, chtype, chtype, chtype, chtype,
275   chtype );*/
276 extern int box ( WINDOW *, chtype, chtype );
277 extern bool can_change_colour ( void );
278 #define can_change_color() can_change_colour()
279 extern int cbreak ( void ); 
280 /*extern int clrtobot ( void );*/
281 /*extern int clrtoeol ( void );*/
282 extern int colour_content ( short, short *, short *, short * );
283 #define color_content( col, r, g, b ) colour_content( (col), (r), (g), (b) )
284 /*extern int colour_set ( short, void * );*/
285 /*#define color_set( cpno, opts ) colour_set( (cpno), (opts) )*/
286 extern int copywin ( const WINDOW *, WINDOW *, int, int, int, 
287                      int, int, int, int );
288 extern int curs_set ( int );
289 extern int def_prog_mode ( void );
290 extern int def_shell_mode ( void );
291 extern int delay_output ( int );
292 extern int delch ( void );
293 extern int deleteln ( void );
294 extern void delscreen ( SCREEN * ); 
295 extern int delwin ( WINDOW * );
296 extern WINDOW *derwin ( WINDOW *, int, int, int, int );
297 extern int doupdate ( void );
298 extern WINDOW *dupwin ( WINDOW * );
299 extern int echo ( void );
300 extern int echochar ( const chtype );
301 extern int endwin ( void );
302 extern char erasechar ( void );
303 extern int erase ( void );
304 extern void filter ( void );
305 extern int flash ( void );
306 extern int flushinp ( void );
307 extern chtype getbkgd ( WINDOW * );
308 extern int getch ( void );
309 extern int getnstr ( char *, int );
310 extern int getstr ( char * );
311 extern int halfdelay ( int );
312 extern bool has_colors ( void );
313 extern bool has_ic ( void );
314 extern bool has_il ( void );
315 extern int hline ( chtype, int );
316 extern void idcok ( WINDOW *, bool );
317 extern int idlok ( WINDOW *, bool );
318 extern void immedok ( WINDOW *, bool );
319 extern chtype inch ( void );
320 extern int inchnstr ( chtype *, int );
321 extern int inchstr ( chtype * );
322 extern WINDOW *initscr ( void );
323 extern int init_color ( short, short, short, short );
324 extern int init_pair ( short, short, short );
325 extern int innstr ( char *, int );
326 extern int insch ( chtype );
327 extern int insdelln ( int );
328 extern int insertln ( void );
329 extern int insnstr ( const char *, int );
330 extern int insstr ( const char * );
331 extern int instr ( char * );
332 extern int intrflush ( WINDOW *, bool );
333 extern bool isendwin ( void );
334 extern bool is_linetouched ( WINDOW *, int );
335 extern bool is_wintouched ( WINDOW * );
336 extern char *keyname ( int );
337 extern int keypad ( WINDOW *, bool );
338 extern char killchar ( void );
339 extern int leaveok ( WINDOW *, bool );
340 extern char *longname ( void );
341 extern int meta ( WINDOW *, bool );
342 /*extern int move ( int, int );*/
343 /*extern int mvaddch ( int, int, const chtype );*/
344 /*extern int mvaddchnstr ( int, int, const chtype *, int );*/
345 /*extern int mvaddchstr ( int, int, const chtype * );*/
346 /*extern int mvaddnstr ( int, int, const char *, int );*/
347 /*extern int mvaddstr ( int, int, const char * );*/
348 extern int mvcur ( int, int, int, int );
349 extern int mvdelch ( int, int );
350 extern int mvderwin ( WINDOW *, int, int );
351 extern int mvgetch ( int, int );
352 extern int mvgetnstr ( int, int, char *, int );
353 extern int mvgetstr ( int, int, char * );
354 extern int mvhline ( int, int, chtype, int );
355 extern chtype mvinch ( int, int );
356 extern int mvinchnstr ( int, int, chtype *, int );
357 extern int mvinchstr ( int, int, chtype * );
358 extern int mvinnstr ( int, int, char *, int );
359 extern int mvinsch ( int, int, chtype );
360 extern int mvinsnstr ( int, int, const char *, int );
361 extern int mvinsstr ( int, int, const char * );
362 extern int mvinstr ( int, int, char * );
363 extern int mvprintw ( int, int, char *,  ... );
364 extern int mvscanw ( int, int, char *, ... );
365 extern int mvvline ( int, int, chtype, int );
366 /*extern int mvwaddch ( WINDOW *, int, int, const chtype );*/
367 /*extern int mvwaddchnstr ( WINDOW *, int, int, const chtype *, int );*/
368 /*extern int mvwaddchstr ( WINDOW *, int, int, const chtype * );*/
369 /*extern int mvwaddnstr ( WINDOW *, int, int, const char *, int );*/
370 /*extern int mvwaddstr ( WINDOW *, int, int, const char * );*/
371 extern int mvwdelch ( WINDOW *, int, int );
372 extern int mvwgetch ( WINDOW *, int, int );
373 extern int mvwgetnstr ( WINDOW *, int, int, char *, int );
374 extern int mvwgetstr ( WINDOW *, int, int, char * );
375 extern int mvwhline ( WINDOW *, int, int, chtype, int );
376 extern int mvwin ( WINDOW *, int, int );
377 extern chtype mvwinch ( WINDOW *, int, int );
378 extern int mvwinchnstr ( WINDOW *, int, int, chtype *, int );
379 extern int mvwinchstr ( WINDOW *, int, int, chtype * );
380 extern int mvwinnstr ( WINDOW *, int, int, char *, int );
381 extern int mvwinsch ( WINDOW *, int, int, chtype );
382 extern int mvwinsnstr ( WINDOW *, int, int, const char *, int );
383 extern int mvwinsstr ( WINDOW *, int, int, const char * );
384 extern int mvwinstr ( WINDOW *, int, int, char * );
385 extern int mvwprintw ( WINDOW *, int, int, char *, ... );
386 extern int mvwscanw ( WINDOW *, int, int, char *, ... );
387 extern int mvwvline ( WINDOW *, int, int, chtype, int );
388 extern int napms ( int );
389 extern WINDOW *newpad ( int, int );
390 extern WINDOW *newwin ( int, int, int, int );
391 extern int nl ( void );
392 extern int nocbreak ( void );
393 extern int nodelay ( WINDOW *, bool );
394 extern int noecho ( void );
395 extern int nonl ( void );
396 extern void noqiflush ( void );
397 extern int noraw ( void );
398 extern int notimeout ( WINDOW *, bool );
399 extern int overlay ( const WINDOW *, WINDOW * );
400 extern int overwrite ( const WINDOW *, WINDOW * );
401 extern int pair_content ( short, short *, short * );
402 extern int PAIR_NUMBER ( int );
403 extern int pechochar ( WINDOW *, chtype );
404 extern int pnoutrefresh ( WINDOW *, int, int, int, int, int, int );
405 extern int prefresh ( WINDOW *, int, int, int, int, int, int );
406 extern int printw ( char *, ... );
407 extern int putp ( const char * );
408 extern void qiflush ( void );
409 extern int raw ( void );
410 extern int redrawwin ( WINDOW * );
411 extern int refresh ( void );
412 extern int reset_prog_mode ( void );
413 extern int reset_shell_mode ( void );
414 extern int resetty ( void );
415 extern int ripoffline ( int, int  ( *) ( WINDOW *, int) );
416 extern int savetty ( void );
417 extern int scanw ( char *, ... );
418 extern int scr_dump ( const char * );
419 extern int scr_init ( const char * );
420 extern int scrl ( int );
421 extern int scroll ( WINDOW * );
422 extern int scrollok ( WINDOW *, bool );
423 extern int scr_restore ( const char * );
424 extern int scr_set ( const char * );
425 extern int setscrreg ( int, int );
426 extern SCREEN *set_term ( SCREEN * );
427 extern int setupterm ( char *, int, int * );
428 extern int slk_attr_off ( const attr_t, void * );
429 extern int slk_attroff ( const chtype );
430 extern int slk_attr_on ( const attr_t, void * );
431 extern int slk_attron ( const chtype );
432 extern int slk_attr_set ( const attr_t, short, void * );
433 extern int slk_attrset ( const chtype );
434 extern int slk_clear ( void );
435 extern int slk_color ( short );
436 extern int slk_init ( int );
437 extern char *slk_label ( int );
438 extern int slk_noutrefresh ( void );
439 extern int slk_refresh ( void );
440 extern int slk_restore ( void );
441 extern int slk_set ( int, const char *, int );
442 extern int slk_touch ( void );
443 extern int standend ( void );
444 extern int standout ( void );
445 extern int start_color ( void );
446 extern WINDOW *subpad ( WINDOW *, int, int, int, int );
447 extern WINDOW *subwin ( WINDOW *, int, int, int, int );
448 extern int syncok ( WINDOW *, bool );
449 extern chtype termattrs ( void );
450 extern attr_t term_attrs ( void );
451 extern char *termname ( void );
452 extern int tigetflag ( char * );
453 extern int tigetnum ( char * );
454 extern char *tigetstr ( char * );
455 extern void timeout ( int );
456 extern int touchline ( WINDOW *, int, int );
457 extern int touchwin ( WINDOW * );
458 extern char *tparm ( char *, long, long, long, long, long, long, long, long,
459                    long );
460 extern int typeahead ( int );
461 extern int ungetch ( int );
462 extern int untouchwin ( WINDOW * );
463 extern void use_env ( bool );
464 extern int vid_attr ( attr_t, short, void * );
465 extern int vidattr ( chtype );
466 extern int vid_puts ( attr_t, short, void *, int  ( *) ( int) );
467 extern int vidputs ( chtype, int  ( *) ( int) );
468 extern int vline ( chtype, int );
469 extern int vwprintw ( WINDOW *, char *, va_list * );
470 extern int vw_printw ( WINDOW *, char *, va_list * );
471 extern int vwscanw ( WINDOW *, char *, va_list * );
472 extern int vw_scanw ( WINDOW *, char *, va_list * );
473 extern int waddch ( WINDOW *, const chtype );
474 extern int waddchnstr ( WINDOW *, const chtype *, int );
475 /*extern int waddchstr ( WINDOW *, const chtype * );*/
476 extern int waddnstr ( WINDOW *, const char *, int );
477 /*extern int waddstr ( WINDOW *, const char * );*/
478 extern int wattroff ( WINDOW *, int );
479 extern int wattron ( WINDOW *, int );
480 extern int wattrset ( WINDOW *, int );
481 extern int wattr_get ( WINDOW *, attr_t *, short *, void * );
482 extern int wattr_off ( WINDOW *, attr_t, void * );
483 extern int wattr_on ( WINDOW *, attr_t, void * );
484 extern int wattr_set ( WINDOW *, attr_t, short, void * );
485 /*extern void wbkgdset ( WINDOW *, chtype );*/
486 extern int wborder ( WINDOW *, chtype, chtype, chtype, chtype, chtype, chtype,
487                    chtype, chtype );
488 extern int wclrtobot ( WINDOW * );
489 extern int wclrtoeol ( WINDOW * );
490 extern void wcursyncup ( WINDOW * );
491 /*extern int wcolor_set ( WINDOW *, short, void * );*/
492 #define wcolor_set(w,s,v) wcolour_set((w),(s),(v))
493 extern int wdelch ( WINDOW * );
494 extern int wdeleteln ( WINDOW * );
495 extern int wechochar ( WINDOW *, const chtype );
496 extern int werase ( WINDOW * );
497 extern int wgetch ( WINDOW * );
498 extern int wgetnstr ( WINDOW *, char *, int );
499 extern int wgetstr ( WINDOW *, char * );
500 extern int whline ( WINDOW *, chtype, int );
501 extern chtype winch ( WINDOW * );
502 extern int winchnstr ( WINDOW *, chtype *, int );
503 extern int winchstr ( WINDOW *, chtype * );
504 extern int winnstr ( WINDOW *, char *, int );
505 extern int winsch ( WINDOW *, chtype );
506 extern int winsdelln ( WINDOW *, int );
507 extern int winsertln ( WINDOW * );
508 extern int winsnstr ( WINDOW *, const char *, int );
509 extern int winsstr ( WINDOW *, const char * );
510 extern int winstr ( WINDOW *, char * );
511 extern int wmove ( WINDOW *, int, int );
512 extern int wnoutrefresh ( WINDOW * );
513 extern int wprintw ( WINDOW *, char *, ... );
514 extern int wredrawln ( WINDOW *, int, int );
515 extern int wrefresh ( WINDOW * );
516 extern int wscanw ( WINDOW *, char *, ... );
517 extern int wscrl ( WINDOW *, int );
518 extern int wsetscrreg ( WINDOW *, int, int );
519 extern int wstandend ( WINDOW * );
520 extern int wstandout ( WINDOW * );
521 extern void wsyncup ( WINDOW * );
522 extern void wsyncdown ( WINDOW * );
523 extern void wtimeout ( WINDOW *, int );
524 extern int wtouchln ( WINDOW *, int, int, int );
525 extern int wvline ( WINDOW *, chtype, int );
526
527 /*
528  * There is frankly a ridiculous amount of redundancy within the
529  * curses API - ncurses decided to get around this by using #define
530  * macros, but I've decided to be type-safe and implement them all as
531  * static inlines instead...
532  */
533
534 static inline int addch ( const chtype ch ) {
535         return waddch( stdscr, ch );
536 }
537
538 static inline int addchnstr ( const chtype *chstr, int n ) {
539         return waddchnstr ( stdscr, chstr, n );
540 }
541
542 static inline int addchstr ( const chtype *chstr ) {
543         return waddchnstr ( stdscr, chstr, -1 );
544 }
545
546 static inline int addnstr ( const char *str, int n ) {
547         return waddnstr ( stdscr, str, n );
548 }
549
550 static inline int addstr ( const char *str ) {
551         return waddnstr ( stdscr, str, -1 );
552 }
553
554 static inline int attroff ( int attrs ) {
555         return wattroff ( stdscr, attrs );
556 }
557
558 static inline int attron ( int attrs ) {
559         return wattron ( stdscr, attrs );
560 }
561
562 static inline int attrset ( int attrs ) {
563         return wattrset ( stdscr, attrs );
564 }
565
566 static inline void bkgdset ( chtype ch ) {
567         wattrset ( stdscr, ch );
568 }
569
570 static inline int border ( chtype ls, chtype rs, chtype ts, chtype bs,
571                            chtype tl, chtype tr, chtype bl, chtype br ) {
572         return wborder ( stdscr, ls, rs, ts, bs, tl, tr, bl, br );
573 }
574
575 static inline int clrtobot ( void ) {
576         return wclrtobot( stdscr );
577 }
578
579 static inline int clrtoeol ( void ) {
580         return wclrtoeol( stdscr );
581 }
582
583 static inline int move ( int y, int x ) {
584         return wmove ( stdscr, y, x );
585 }
586
587 static inline int mvaddch ( int y, int x, const chtype ch ) {
588         return ( wmove ( stdscr, y, x ) == ERR 
589                  ? ERR : waddch( stdscr, ch ) );
590 }
591
592 static inline int mvaddchnstr ( int y, int x, const chtype *chstr, int n ) {
593         return ( wmove ( stdscr, y, x ) == ERR
594                  ? ERR : waddchnstr ( stdscr, chstr, n ) );
595 }
596
597 static inline int mvaddchstr ( int y, int x, const chtype *chstr ) {
598         return ( wmove ( stdscr, y, x ) == ERR
599                  ? ERR : waddchnstr ( stdscr, chstr, -1 ) );
600 }
601
602 static inline int mvaddnstr ( int y, int x, const char *str, int n ) {
603         return ( wmove ( stdscr, y, x ) == ERR
604                  ? ERR : waddnstr ( stdscr, str, n ) );
605 }
606
607 static inline int mvaddstr ( int y, int x, const char *str ) {
608         return ( wmove ( stdscr, y, x ) == ERR
609                  ? ERR : waddnstr ( stdscr, str, -1 ) );
610 }
611
612 static inline int mvwaddch ( WINDOW *win, int y, int x, const chtype ch ) {
613         return ( wmove( win, y, x ) == ERR 
614                  ? ERR : waddch ( win, ch ) );
615 }
616
617 static inline int mvwaddchnstr ( WINDOW *win, int y, int x, const chtype *chstr, int n ) {
618         return ( wmove ( win, y, x ) == ERR 
619                  ? ERR : waddchnstr ( win, chstr, n ) );
620 }
621
622 static inline int mvwaddchstr ( WINDOW *win, int y, int x, const chtype *chstr ) {
623         return ( wmove ( win, y, x ) == ERR 
624                  ? ERR : waddchnstr ( win, chstr, -1 ) );
625 }
626
627 static inline int mvwaddnstr ( WINDOW *win, int y, int x, const char *str, int n ) {
628         return ( wmove ( win, y, x ) == ERR
629                  ? ERR : waddnstr ( win, str, n ) );
630 }
631
632 static inline int mvwaddstr ( WINDOW *win, int y, int x, const char *str ) {
633         return ( wmove ( win, y, x ) == ERR
634                  ? ERR : waddnstr ( win, str, -1 ) );
635 }
636
637 static inline int waddchstr ( WINDOW *win, const chtype *chstr ) {
638         return waddchnstr ( win, chstr, -1 );
639 }
640
641 static inline int waddstr ( WINDOW *win, const char *str ) {
642         return waddnstr ( win, str, -1 );
643 }
644
645 static inline int wbkgdset ( WINDOW *win, chtype ch ) {
646         return wattrset( win, ch );
647 }
648
649 #endif /* CURSES_H */