1 /* Public Domain Curses */
2 
3 /*----------------------------------------------------------------------*
4  *                              PDCurses                                *
5  *----------------------------------------------------------------------*/
6 
7 #ifndef __PDCURSES__
8 #define __PDCURSES__ 1
9 
10 /*man-start**************************************************************
11 
12 PDCurses definitions list:  (Only define those needed)
13 
14     XCURSES         True if compiling for X11.
15     PDC_RGB         True if you want to use RGB color definitions
16                     (Red = 1, Green = 2, Blue = 4) instead of BGR.
17     PDC_WIDE        True if building wide-character support.
18     PDC_DLL_BUILD   True if building a Win32 DLL.
19     NCURSES_MOUSE_VERSION   Use the ncurses mouse API instead
20                             of PDCurses' traditional mouse API.
21 
22 PDCurses portable platform definitions list:
23 
24     PDC_BUILD       Defines API build version.
25     PDCURSES        Enables access to PDCurses-only routines.
26     XOPEN           Always true.
27     SYSVcurses      True if you are compiling for SYSV portability.
28     BSDcurses       True if you are compiling for BSD portability.
29 
30 **man-end****************************************************************/
31 
32 #define PDCURSES        1      /* PDCurses-only routines */
33 #define XOPEN           1      /* X/Open Curses routines */
34 #define SYSVcurses      1      /* System V Curses routines */
35 #define BSDcurses       1      /* BSD Curses routines */
36 #if defined( CHTYPE_32)
37    #define CHTYPE_LONG     1      /* chtypes will be 32 bits */
38 #elif !defined( CHTYPE_16)
39    #define CHTYPE_LONG     2      /* chtypes will be (default) 64 bits */
40 #endif
41 
42 /*----------------------------------------------------------------------*/
43 
44 #include <stdarg.h>
45 #include <stdint.h>
46 #include <stddef.h>
47 #include <stdio.h>             /* Required by X/Open usage below */
48 
49 #ifdef PDC_WIDE
50 # include <wchar.h>
51 #endif
52 
53 #if defined(__cplusplus) || defined(__cplusplus__) || defined(__CPLUSPLUS)
54 extern "C"
55 {
56 # define bool _bool
57 #endif
58 
59 /*----------------------------------------------------------------------
60  *
61  *  PDCurses Manifest Constants
62  *
63  */
64 
65 #ifndef FALSE
66 # define FALSE 0
67 #endif
68 #ifndef TRUE
69 # define TRUE 1
70 #endif
71 #ifndef NULL
72 # define NULL (void *)0
73 #endif
74 #ifndef ERR
75 # define ERR (-1)
76 #endif
77 #ifndef OK
78 # define OK 0
79 #endif
80 
81 /*----------------------------------------------------------------------
82  *
83  *  PDCurses Type Declarations
84  *
85  */
86 
87 typedef unsigned char bool;    /* PDCurses Boolean type */
88 
89 #ifdef CHTYPE_LONG
90     #if(CHTYPE_LONG >= 2)       /* "non-standard" 64-bit chtypes     */
91         typedef uint64_t chtype;
92     #else                        /* "Standard" CHTYPE_LONG case,  32-bit: */
93         typedef uint32_t chtype;
94     # endif
95 #else
96 typedef uint16_t chtype; /* 8-bit attr + 8-bit char */
97 #endif
98 
99 #ifdef PDC_WIDE
100 typedef chtype cchar_t;
101 #endif
102 
103 typedef chtype attr_t;
104 
105 /* Version constants,  available as of version 4.0 : */
106 /* Don't forget to update 'version.mif' if MAJOR/MINOR changes! */
107 
108 #define PDC_VER_MAJOR    4
109 #define PDC_VER_MINOR    0
110 #define PDC_VER_CHANGE   2
111 #define PDC_VER_YEAR   2017
112 #define PDC_VER_MONTH   07
113 #define PDC_VER_DAY     26
114 
115 #define PDC_BUILD (PDC_VER_MAJOR*1000 + PDC_VER_MINOR *100 + PDC_VER_CHANGE)
116 
117 /* When using PDCurses as a DLL (Windows) or shared library (BSD or *nix),
118 it's possible to switch the DLL or shared library.  One may therefore want
119 to inquire of the DLL/shared library the port,  version numbers,  and
120 chtype_size used, and make sure they're what one was expecting.  The
121 'PDC_version' structure lets you do just that. */
122 
123 enum PDC_port
124 {
125     PDC_PORT_X11 = 0,
126     PDC_PORT_WIN32 = 1,
127     PDC_PORT_WIN32A = 2,
128     PDC_PORT_DOS = 3,
129     PDC_PORT_OS2 = 4,
130     PDC_PORT_SDL1 = 5,
131     PDC_PORT_SDL2 = 6
132 };
133 
134 /* Detailed PDC version information */
135 
136 typedef struct
137 {
138    const enum PDC_port port;
139    const int ver_major;
140    const int ver_minor;
141    const int ver_change;
142    const size_t chtype_size;
143    const bool is_wide;
144    const bool is_forced_utf8;
145 } PDC_version_info;
146 
147 /*----------------------------------------------------------------------
148  *
149  *  PDCurses Mouse Interface -- SYSVR4, with extensions
150  *
151  */
152 
153 /* Most flavors of PDCurses support three buttons.  Win32a supports    */
154 /* these plus two "extended" buttons.  But we'll set this macro to     */
155 /* six,  allowing future versions to support up to nine total buttons. */
156 /* (The button states are broken up into two arrays to allow for the   */
157 /* possibility of backward compatibility to DLLs compiled with only    */
158 /* three mouse buttons.)                                               */
159 
160 #define PDC_MAX_MOUSE_BUTTONS          9
161 #define PDC_N_EXTENDED_MOUSE_BUTTONS   6
162 
163 typedef struct
164 {
165     int x;           /* absolute column, 0 based, measured in characters */
166     int y;           /* absolute row, 0 based, measured in characters    */
167     short button[3]; /* state of three "normal" buttons                  */
168     int changes;     /* flags indicating what has changed with the mouse */
169     short xbutton[PDC_N_EXTENDED_MOUSE_BUTTONS]; /* state of ext buttons */
170 } MOUSE_STATUS;
171 
172 #define BUTTON_RELEASED         0x0000
173 #define BUTTON_PRESSED          0x0001
174 #define BUTTON_CLICKED          0x0002
175 #define BUTTON_DOUBLE_CLICKED   0x0003
176 #define BUTTON_TRIPLE_CLICKED   0x0004
177 #define BUTTON_MOVED            0x0005  /* PDCurses */
178 #define WHEEL_SCROLLED          0x0006  /* PDCurses */
179 #define BUTTON_ACTION_MASK      0x0007  /* PDCurses */
180 
181 #define PDC_BUTTON_SHIFT        0x0008  /* PDCurses */
182 #define PDC_BUTTON_CONTROL      0x0010  /* PDCurses */
183 #define PDC_BUTTON_ALT          0x0020  /* PDCurses */
184 #define BUTTON_MODIFIER_MASK    0x0038  /* PDCurses */
185 
186 #define MOUSE_X_POS             (Mouse_status.x)
187 #define MOUSE_Y_POS             (Mouse_status.y)
188 
189 /*
190  * Bits associated with the .changes field:
191  *   3         2         1         0
192  * 210987654321098765432109876543210
193  *                                 1 <- button 1 has changed   0
194  *                                10 <- button 2 has changed   1
195  *                               100 <- button 3 has changed   2
196  *                              1000 <- mouse has moved        3
197  *                             10000 <- mouse position report  4
198  *                            100000 <- mouse wheel up         5
199  *                           1000000 <- mouse wheel down       6
200  *                          10000000 <- mouse wheel left       7
201  *                         100000000 <- mouse wheel right      8
202  *                        1000000000 <- button 4 has changed   9
203  * (NOTE: buttons 6 to   10000000000 <- button 5 has changed  10
204  * 9 aren't implemented 100000000000 <- button 6 has changed  11
205  * in any flavor of    1000000000000 <- button 7 has changed  12
206  * PDCurses yet!)     10000000000000 <- button 8 has changed  13
207  *                   100000000000000 <- button 9 has changed  14
208  */
209 
210 #define PDC_MOUSE_MOVED         0x0008
211 #define PDC_MOUSE_POSITION      0x0010
212 #define PDC_MOUSE_WHEEL_UP      0x0020
213 #define PDC_MOUSE_WHEEL_DOWN    0x0040
214 #define PDC_MOUSE_WHEEL_LEFT    0x0080
215 #define PDC_MOUSE_WHEEL_RIGHT   0x0100
216 
217 #define A_BUTTON_CHANGED        (Mouse_status.changes & 7)
218 #define MOUSE_MOVED             (Mouse_status.changes & PDC_MOUSE_MOVED)
219 #define MOUSE_POS_REPORT        (Mouse_status.changes & PDC_MOUSE_POSITION)
220 #define BUTTON_CHANGED(x)       (Mouse_status.changes & (1 << ((x) - ((x)<4 ? 1 : -5))))
221 #define BUTTON_STATUS(x)        (Mouse_status.button[(x) - 1])
222 #define MOUSE_WHEEL_UP          (Mouse_status.changes & PDC_MOUSE_WHEEL_UP)
223 #define MOUSE_WHEEL_DOWN        (Mouse_status.changes & PDC_MOUSE_WHEEL_DOWN)
224 #define MOUSE_WHEEL_LEFT        (Mouse_status.changes & PDC_MOUSE_WHEEL_LEFT)
225 #define MOUSE_WHEEL_RIGHT       (Mouse_status.changes & PDC_MOUSE_WHEEL_RIGHT)
226 
227 /* mouse bit-masks */
228 
229 #define BUTTON1_RELEASED        0x00000001L
230 #define BUTTON1_PRESSED         0x00000002L
231 #define BUTTON1_CLICKED         0x00000004L
232 #define BUTTON1_DOUBLE_CLICKED  0x00000008L
233 #define BUTTON1_TRIPLE_CLICKED  0x00000010L
234 #define BUTTON1_MOVED           0x00000010L /* PDCurses */
235 
236 #define BUTTON2_RELEASED        0x00000020L
237 #define BUTTON2_PRESSED         0x00000040L
238 #define BUTTON2_CLICKED         0x00000080L
239 #define BUTTON2_DOUBLE_CLICKED  0x00000100L
240 #define BUTTON2_TRIPLE_CLICKED  0x00000200L
241 #define BUTTON2_MOVED           0x00000200L /* PDCurses */
242 
243 #define BUTTON3_RELEASED        0x00000400L
244 #define BUTTON3_PRESSED         0x00000800L
245 #define BUTTON3_CLICKED         0x00001000L
246 #define BUTTON3_DOUBLE_CLICKED  0x00002000L
247 #define BUTTON3_TRIPLE_CLICKED  0x00004000L
248 #define BUTTON3_MOVED           0x00004000L /* PDCurses */
249 
250 /* For the ncurses-compatible functions only, BUTTON4_PRESSED and
251    BUTTON5_PRESSED are returned for mouse scroll wheel up and down;
252    otherwise PDCurses doesn't support buttons 4 and 5... except
253    as described above for Win32a,  and perhaps to be extended to
254    other PDCurses flavors  */
255 
256 #define BUTTON4_RELEASED        0x00008000L
257 #define BUTTON4_PRESSED         0x00010000L
258 #define BUTTON4_CLICKED         0x00020000L
259 #define BUTTON4_DOUBLE_CLICKED  0x00040000L
260 #define BUTTON4_TRIPLE_CLICKED  0x00080000L
261 
262 #define BUTTON5_RELEASED        0x00100000L
263 #define BUTTON5_PRESSED         0x00200000L
264 #define BUTTON5_CLICKED         0x00400000L
265 #define BUTTON5_DOUBLE_CLICKED  0x00800000L
266 #define BUTTON5_TRIPLE_CLICKED  0x01000000L
267 
268 #define MOUSE_WHEEL_SCROLL      0x02000000L /* PDCurses */
269 #define BUTTON_MODIFIER_SHIFT   0x04000000L /* PDCurses */
270 #define BUTTON_MODIFIER_CONTROL 0x08000000L /* PDCurses */
271 #define BUTTON_MODIFIER_ALT     0x10000000L /* PDCurses */
272 
273 #define ALL_MOUSE_EVENTS        0x1fffffffL
274 #define REPORT_MOUSE_POSITION   0x20000000L
275 
276 /* ncurses mouse interface */
277 
278 typedef unsigned long mmask_t;
279 
280 typedef struct
281 {
282     short id;       /* unused, always 0 */
283     int x, y, z;    /* x, y same as MOUSE_STATUS; z unused */
284     mmask_t bstate; /* equivalent to changes + button[], but
285                        in the same format as used for mousemask() */
286 } MEVENT;
287 
288 #ifdef NCURSES_MOUSE_VERSION
289 # define BUTTON_SHIFT   BUTTON_MODIFIER_SHIFT
290 # define BUTTON_CONTROL BUTTON_MODIFIER_CONTROL
291 # define BUTTON_CTRL    BUTTON_MODIFIER_CONTROL
292 # define BUTTON_ALT     BUTTON_MODIFIER_ALT
293 #else
294 # define BUTTON_SHIFT   PDC_BUTTON_SHIFT
295 # define BUTTON_CONTROL PDC_BUTTON_CONTROL
296 # define BUTTON_ALT     PDC_BUTTON_ALT
297 #endif
298 
299 /*----------------------------------------------------------------------
300  *
301  *  PDCurses Structure Definitions
302  *
303  */
304 
305 typedef struct _win       /* definition of a window */
306 {
307     int   _cury;          /* current pseudo-cursor */
308     int   _curx;
309     int   _maxy;          /* max window coordinates */
310     int   _maxx;
311     int   _begy;          /* origin on screen */
312     int   _begx;
313     int   _flags;         /* window properties */
314     chtype _attrs;        /* standard attributes and colors */
315     chtype _bkgd;         /* background, normally blank */
316     bool  _clear;         /* causes clear at next refresh */
317     bool  _leaveit;       /* leaves cursor where it is */
318     bool  _scroll;        /* allows window scrolling */
319     bool  _nodelay;       /* input character wait flag */
320     bool  _immed;         /* immediate update flag */
321     bool  _sync;          /* synchronise window ancestors */
322     bool  _use_keypad;    /* flags keypad key mode active */
323     chtype **_y;          /* pointer to line pointer array */
324     int   *_firstch;      /* first changed character in line */
325     int   *_lastch;       /* last changed character in line */
326     int   _tmarg;         /* top of scrolling region */
327     int   _bmarg;         /* bottom of scrolling region */
328     int   _delayms;       /* milliseconds of delay for getch() */
329     int   _parx, _pary;   /* coords relative to parent (0,0) */
330     struct _win *_parent; /* subwin's pointer to parent win */
331 } WINDOW;
332 
333 /* Avoid using the SCREEN struct directly -- use the corresponding
334    functions if possible. This struct may eventually be made private. */
335 
336 typedef struct
337 {
338     bool  alive;          /* if initscr() called, and not endwin() */
339     bool  autocr;         /* if cr -> lf */
340     bool  cbreak;         /* if terminal unbuffered */
341     bool  echo;           /* if terminal echo */
342     bool  raw_inp;        /* raw input mode (v. cooked input) */
343     bool  raw_out;        /* raw output mode (7 v. 8 bits) */
344     bool  audible;        /* FALSE if the bell is visual */
345     bool  mono;           /* TRUE if current screen is mono */
346     bool  resized;        /* TRUE if TERM has been resized */
347     bool  orig_attr;      /* TRUE if we have the original colors */
348     short orig_fore;      /* original screen foreground color */
349     short orig_back;      /* original screen foreground color */
350     int   cursrow;        /* position of physical cursor */
351     int   curscol;        /* position of physical cursor */
352     int   visibility;     /* visibility of cursor */
353     int   orig_cursor;    /* original cursor size */
354     int   lines;          /* new value for LINES */
355     int   cols;           /* new value for COLS */
356     unsigned long _trap_mbe;       /* trap these mouse button events */
357     unsigned long _map_mbe_to_key; /* map mouse buttons to slk */
358     int   mouse_wait;              /* time to wait (in ms) for a
359                                       button release after a press, in
360                                       order to count it as a click */
361     int   slklines;                /* lines in use by slk_init() */
362     WINDOW *slk_winptr;            /* window for slk */
363     int   linesrippedoff;          /* lines ripped off via ripoffline() */
364     int   linesrippedoffontop;     /* lines ripped off on
365                                       top via ripoffline() */
366     int   delaytenths;             /* 1/10ths second to wait block
367                                       getch() for */
368     bool  _preserve;               /* TRUE if screen background
369                                       to be preserved */
370     int   _restore;                /* specifies if screen background
371                                       to be restored, and how */
372     bool  save_key_modifiers;      /* TRUE if each key modifiers saved
373                                       with each key press */
374     bool  return_key_modifiers;    /* TRUE if modifier keys are
375                                       returned as "real" keys */
376     bool  key_code;                /* TRUE if last key is a special key;
377                                       used internally by get_wch() */
378 #ifdef XCURSES
379     int   XcurscrSize;    /* size of Xcurscr shared memory block */
380     bool  sb_on;
381     int   sb_viewport_y;
382     int   sb_viewport_x;
383     int   sb_total_y;
384     int   sb_total_x;
385     int   sb_cur_y;
386     int   sb_cur_x;
387     int   exit_key;
388 #endif
389     short line_color;     /* color of line attributes - default -1 */
390 } SCREEN;
391 
392 /*----------------------------------------------------------------------
393  *
394  *  PDCurses External Variables
395  *
396  */
397 
398 #ifdef PDC_DLL_BUILD
399 # ifdef CURSES_LIBRARY
400 #  define PDCEX __declspec(dllexport) extern
401 # else
402 #  define PDCEX __declspec(dllimport)
403 # endif
404 #else
405 # define PDCEX extern
406 #endif
407 
408 PDCEX  int          LINES;        /* terminal height */
409 PDCEX  int          COLS;         /* terminal width */
410 PDCEX  WINDOW       *stdscr;      /* the default screen window */
411 PDCEX  WINDOW       *curscr;      /* the current screen image */
412 PDCEX  SCREEN       *SP;          /* curses variables */
413 PDCEX  MOUSE_STATUS Mouse_status;
414 PDCEX  int          COLORS;
415 PDCEX  int          COLOR_PAIRS;
416 PDCEX  int          TABSIZE;
417 PDCEX  chtype       acs_map[];    /* alternate character set map */
418 PDCEX  char         ttytype[];    /* terminal name/description */
419 PDCEX PDC_version_info PDC_version;
420 
421 /*man-start**************************************************************
422 
423 PDCurses Text Attributes
424 ========================
425 
426 Originally, PDCurses used a short (16 bits) for its chtype. To include
427 color, a number of things had to be sacrificed from the strict Unix and
428 System V support. The main problem was fitting all character attributes
429 and color into an unsigned char (all 8 bits!).
430 
431 Today, PDCurses by default uses a long (32 bits) for its chtype, as in
432 System V. The short chtype is still available, by undefining CHTYPE_LONG
433 and rebuilding the library.
434 
435 The following is the structure of a win->_attrs chtype:
436 
437 short form:
438 
439     +-----------------------------------------------+
440     |15|14|13|12|11|10| 9| 8| 7| 6| 5| 4| 3| 2| 1| 0|
441     +-----------------------------------------------+
442       color number |  attrs |   character eg 'a'
443 
444 The available non-color attributes are bold, reverse and blink. Others
445 have no effect. The high order char is an index into an array of
446 physical colors (defined in color.c) -- 32 foreground/background color
447 pairs (5 bits) plus 3 bits for other attributes.
448 
449 long form:
450 
451     +--------------------------------------------------------------------+
452     |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|..| 2| 1| 0|
453     +--------------------------------------------------------------------+
454           color number      |     modifiers         |   character eg 'a'
455 
456 The available non-color attributes are bold, underline, invisible,
457 right-line, left-line, protect, reverse and blink. 256 color pairs (8
458 bits), 8 bits for other attributes, and 16 bits for character data.
459 
460    Note that there is now a "super-long" 64-bit form,  available by
461 defining CHTYPE_LONG to be 2:
462 
463 -------------------------------------------------------------------------------
464 |63|62|61|60|59|..|34|33|32|31|30|29|28|..|22|21|20|19|18|17|16|..| 3| 2| 1| 0|
465 -------------------------------------------------------------------------------
466          color number   |        modifiers      |         character eg 'a'
467 
468 
469    We take five more bits for the character (thus allowing Unicode values
470 past 64K;  UTF-16 can go up to 0x10ffff,  requiring 21 bits total),  and
471 four more bits for attributes.  Three are currently used as A_OVERLINE, A_DIM,
472 and A_STRIKEOUT;  one more is reserved for future use.  31 bits are then used
473 for color.  These are usually just treated as the usual palette
474 indices,  and range from 0 to 255.   However,  if bit 63 is
475 set,  the remaining 30 bits are interpreted as foreground RGB (first
476 fifteen bits,  five bits for each of the three channels) and background RGB
477 (same scheme using the remaining 15 bits.)
478 
479 **man-end****************************************************************/
480 
481 /*** Video attribute macros ***/
482 
483 #define A_NORMAL      (chtype)0
484 
485 #ifdef CHTYPE_LONG
486 
487 # if(CHTYPE_LONG >= 2)     /* 64-bit chtypes */
488     # define PDC_CHARTEXT_BITS   21
489     # define A_CHARTEXT   (chtype)( ((chtype)0x1 << PDC_CHARTEXT_BITS) - 1)
490     # define A_ALTCHARSET ((chtype)0x001 << PDC_CHARTEXT_BITS)
491     # define A_RIGHTLINE  ((chtype)0x002 << PDC_CHARTEXT_BITS)
492     # define A_LEFTLINE   ((chtype)0x004 << PDC_CHARTEXT_BITS)
493     # define A_INVIS      ((chtype)0x008 << PDC_CHARTEXT_BITS)
494     # define A_UNDERLINE  ((chtype)0x010 << PDC_CHARTEXT_BITS)
495     # define A_REVERSE    ((chtype)0x020 << PDC_CHARTEXT_BITS)
496     # define A_BLINK      ((chtype)0x040 << PDC_CHARTEXT_BITS)
497     # define A_BOLD       ((chtype)0x080 << PDC_CHARTEXT_BITS)
498     # define A_OVERLINE   ((chtype)0x100 << PDC_CHARTEXT_BITS)
499     # define A_STRIKEOUT  ((chtype)0x200 << PDC_CHARTEXT_BITS)
500     # define A_DIM        ((chtype)0x400 << PDC_CHARTEXT_BITS)
501 #if 0
502                   /* May come up with a use for this bit    */
503                   /* someday; reserved for the future: */
504     # define A_FUTURE_2   ((chtype)0x800 << PDC_CHARTEXT_BITS)
505 #endif
506     # define PDC_COLOR_SHIFT (PDC_CHARTEXT_BITS + 12)
507     # define A_COLOR      ((chtype)0x7fffffff << PDC_COLOR_SHIFT)
508     # define A_RGB_COLOR  ((chtype)0x40000000 << PDC_COLOR_SHIFT)
509     # define A_ATTRIBUTES (((chtype)0xfff << PDC_CHARTEXT_BITS) | A_COLOR)
510     # define A_RGB( rfore, gfore, bfore, rback, gback, bback)       \
511         (( (((chtype)(bfore) << 25) \
512          | ((chtype)(gfore) << 20) \
513          | ((chtype)(rfore) << 15) \
514          | ((chtype)(bback) << 10) \
515          | ((chtype)(gback) <<  5) \
516          | ((chtype)(rback)      )) << PDC_COLOR_SHIFT) | A_RGB_COLOR)
517 # else         /* plain ol' 32-bit chtypes */
518     # define A_ALTCHARSET (chtype)0x00010000
519     # define A_RIGHTLINE  (chtype)0x00020000
520     # define A_LEFTLINE   (chtype)0x00040000
521     # define A_INVIS      (chtype)0x00080000
522     # define A_UNDERLINE  (chtype)0x00100000
523     # define A_REVERSE    (chtype)0x00200000
524     # define A_BLINK      (chtype)0x00400000
525     # define A_BOLD       (chtype)0x00800000
526     # define A_COLOR      (chtype)0xff000000
527     # define A_RGB_COLOR  A_NORMAL
528 #ifdef PDC_WIDE
529     # define A_CHARTEXT   (chtype)0x0000ffff
530     # define A_ATTRIBUTES (chtype)0xffff0000
531     # define A_DIM        A_NORMAL
532     # define A_OVERLINE   A_NORMAL
533     # define A_STRIKEOUT  A_NORMAL
534 #else          /* with 8-bit chars,  we have bits for these attribs : */
535     # define A_CHARTEXT   (chtype)0x000000ff
536     # define A_ATTRIBUTES (chtype)0xffffe000
537     # define A_DIM        (chtype)0x00008000
538     # define A_OVERLINE   (chtype)0x00004000
539     # define A_STRIKEOUT  (chtype)0x00002000
540 #endif
541     # define PDC_COLOR_SHIFT 24
542 #endif
543 
544 
545 # define A_ITALIC     A_INVIS
546 # define A_PROTECT    (A_UNDERLINE | A_LEFTLINE | A_RIGHTLINE)
547 
548 #else                   /* 16-bit chtypes */
549 # define A_BOLD       (chtype)0x0100  /* X/Open */
550 # define A_REVERSE    (chtype)0x0200  /* X/Open */
551 # define A_BLINK      (chtype)0x0400  /* X/Open */
552 
553 # define A_ATTRIBUTES (chtype)0xff00  /* X/Open */
554 # define A_CHARTEXT   (chtype)0x00ff  /* X/Open */
555 # define A_COLOR      (chtype)0xf800  /* System V */
556 
557 # define A_ALTCHARSET A_NORMAL        /* X/Open */
558 # define A_PROTECT    A_NORMAL        /* X/Open */
559 # define A_UNDERLINE  A_NORMAL        /* X/Open */
560 # define A_OVERLINE   A_NORMAL        /* X/Open */
561 # define A_STRIKEOUT  A_NORMAL        /* X/Open */
562 
563 # define A_LEFTLINE   A_NORMAL
564 # define A_RIGHTLINE  A_NORMAL
565 # define A_ITALIC     A_NORMAL
566 # define A_INVIS      A_NORMAL
567 # define A_RGB_COLOR  A_NORMAL
568 # define A_DIM        A_NORMAL
569 
570 # define PDC_COLOR_SHIFT 11
571 #endif
572 
573 #define A_STANDOUT    (A_REVERSE | A_BOLD) /* X/Open */
574 
575 #define CHR_MSK       A_CHARTEXT           /* Obsolete */
576 #define ATR_MSK       A_ATTRIBUTES         /* Obsolete */
577 #define ATR_NRM       A_NORMAL             /* Obsolete */
578 
579 /* For use with attr_t -- X/Open says, "these shall be distinct", so
580    this is a non-conforming implementation. */
581 
582 #define WA_NORMAL     A_NORMAL
583 
584 #define WA_ALTCHARSET A_ALTCHARSET
585 #define WA_BLINK      A_BLINK
586 #define WA_BOLD       A_BOLD
587 #define WA_DIM        A_DIM
588 #define WA_INVIS      A_INVIS
589 #define WA_LEFT       A_LEFTLINE
590 #define WA_PROTECT    A_PROTECT
591 #define WA_REVERSE    A_REVERSE
592 #define WA_RIGHT      A_RIGHTLINE
593 #define WA_STANDOUT   A_STANDOUT
594 #define WA_UNDERLINE  A_UNDERLINE
595 
596 #define WA_HORIZONTAL A_NORMAL
597 #define WA_LOW        A_NORMAL
598 #define WA_TOP        A_NORMAL
599 #define WA_VERTICAL   A_NORMAL
600 
601 #define WA_ATTRIBUTES A_ATTRIBUTES
602 
603 /*** Alternate character set macros ***/
604 
605 /* 'w' = 32-bit chtype; acs_map[] index | A_ALTCHARSET
606    'n' = 16-bit chtype; it gets the fallback set because no bit is
607          available for A_ALTCHARSET */
608 
609 #ifdef CHTYPE_LONG
610 # define ACS_PICK(w, n) ((chtype)w | A_ALTCHARSET)
611 #else
612 # define ACS_PICK(w, n) ((chtype)n)
613 #endif
614 
615 /* VT100-compatible symbols -- box chars */
616 
617 #define ACS_LRCORNER      ACS_PICK('V', '+')
618 #define ACS_URCORNER      ACS_PICK('W', '+')
619 #define ACS_ULCORNER      ACS_PICK('X', '+')
620 #define ACS_LLCORNER      ACS_PICK('Y', '+')
621 #define ACS_PLUS          ACS_PICK('Z', '+')
622 #define ACS_LTEE          ACS_PICK('[', '+')
623 #define ACS_RTEE          ACS_PICK('\\', '+')
624 #define ACS_BTEE          ACS_PICK(']', '+')
625 #define ACS_TTEE          ACS_PICK('^', '+')
626 #define ACS_HLINE         ACS_PICK('_', '-')
627 #define ACS_VLINE         ACS_PICK('`', '|')
628 
629 /* PDCurses-only ACS chars.  Don't use if ncurses compatibility matters.
630 Some won't work in non-wide X11 builds (see 'acs_defs.h' for details). */
631 
632 #define ACS_CENT          ACS_PICK('{', 'c')
633 #define ACS_YEN           ACS_PICK('|', 'y')
634 #define ACS_PESETA        ACS_PICK('}', 'p')
635 #define ACS_HALF          ACS_PICK('&', '/')
636 #define ACS_QUARTER       ACS_PICK('\'', '/')
637 #define ACS_LEFT_ANG_QU   ACS_PICK(')',  '<')
638 #define ACS_RIGHT_ANG_QU  ACS_PICK('*',  '>')
639 #define ACS_D_HLINE       ACS_PICK('a', '-')
640 #define ACS_D_VLINE       ACS_PICK('b', '|')
641 #define ACS_CLUB          ACS_PICK( 11, 'C')
642 #define ACS_HEART         ACS_PICK( 12, 'H')
643 #define ACS_SPADE         ACS_PICK( 13, 'S')
644 #define ACS_SMILE         ACS_PICK( 14, 'O')
645 #define ACS_REV_SMILE     ACS_PICK( 15, 'O')
646 #define ACS_MED_BULLET    ACS_PICK( 16, '.')
647 #define ACS_WHITE_BULLET  ACS_PICK( 17, 'O')
648 #define ACS_PILCROW       ACS_PICK( 18, 'O')
649 #define ACS_SECTION       ACS_PICK( 19, 'O')
650 
651 #define ACS_SUP2          ACS_PICK(',', '2')
652 #define ACS_ALPHA         ACS_PICK('.', 'a')
653 #define ACS_BETA          ACS_PICK('/', 'b')
654 #define ACS_GAMMA         ACS_PICK('0', 'y')
655 #define ACS_UP_SIGMA      ACS_PICK('1', 'S')
656 #define ACS_LO_SIGMA      ACS_PICK('2', 's')
657 #define ACS_MU            ACS_PICK('4', 'u')
658 #define ACS_TAU           ACS_PICK('5', 't')
659 #define ACS_UP_PHI        ACS_PICK('6', 'F')
660 #define ACS_THETA         ACS_PICK('7', 't')
661 #define ACS_OMEGA         ACS_PICK('8', 'w')
662 #define ACS_DELTA         ACS_PICK('9', 'd')
663 #define ACS_INFINITY      ACS_PICK('-', 'i')
664 #define ACS_LO_PHI        ACS_PICK( 22, 'f')
665 #define ACS_EPSILON       ACS_PICK(':', 'e')
666 #define ACS_INTERSECT     ACS_PICK('e', 'u')
667 #define ACS_TRIPLE_BAR    ACS_PICK('f', '=')
668 #define ACS_DIVISION      ACS_PICK('c', '/')
669 #define ACS_APPROX_EQ     ACS_PICK('d', '~')
670 #define ACS_SM_BULLET     ACS_PICK('g', '.')
671 #define ACS_SQUARE_ROOT   ACS_PICK('i', '!')
672 #define ACS_UBLOCK        ACS_PICK('p', '^')
673 #define ACS_BBLOCK        ACS_PICK('q', '_')
674 #define ACS_LBLOCK        ACS_PICK('r', '<')
675 #define ACS_RBLOCK        ACS_PICK('s', '>')
676 
677 #define ACS_A_ORDINAL     ACS_PICK(20,  'a')
678 #define ACS_O_ORDINAL     ACS_PICK(21,  'o')
679 #define ACS_INV_QUERY     ACS_PICK(24,  '?')
680 #define ACS_REV_NOT       ACS_PICK(25,  '!')
681 #define ACS_NOT           ACS_PICK(26,  '!')
682 #define ACS_INV_BANG      ACS_PICK(23,  '!')
683 #define ACS_UP_INTEGRAL   ACS_PICK(27,  '|')
684 #define ACS_LO_INTEGRAL   ACS_PICK(28,  '|')
685 #define ACS_SUP_N         ACS_PICK(29,  'n')
686 #define ACS_CENTER_SQU    ACS_PICK(30,  'x')
687 #define ACS_F_WITH_HOOK   ACS_PICK(31,  'f')
688 
689 #define ACS_SD_LRCORNER   ACS_PICK(';', '+')
690 #define ACS_SD_URCORNER   ACS_PICK('<', '+')
691 #define ACS_SD_ULCORNER   ACS_PICK('=', '+')
692 #define ACS_SD_LLCORNER   ACS_PICK('>', '+')
693 #define ACS_SD_PLUS       ACS_PICK('?', '+')
694 #define ACS_SD_LTEE       ACS_PICK('@', '+')
695 #define ACS_SD_RTEE       ACS_PICK('A', '+')
696 #define ACS_SD_BTEE       ACS_PICK('B', '+')
697 #define ACS_SD_TTEE       ACS_PICK('C', '+')
698 
699 #define ACS_D_LRCORNER    ACS_PICK('D', '+')
700 #define ACS_D_URCORNER    ACS_PICK('E', '+')
701 #define ACS_D_ULCORNER    ACS_PICK('F', '+')
702 #define ACS_D_LLCORNER    ACS_PICK('G', '+')
703 #define ACS_D_PLUS        ACS_PICK('H', '+')
704 #define ACS_D_LTEE        ACS_PICK('I', '+')
705 #define ACS_D_RTEE        ACS_PICK('J', '+')
706 #define ACS_D_BTEE        ACS_PICK('K', '+')
707 #define ACS_D_TTEE        ACS_PICK('L', '+')
708 
709 #define ACS_DS_LRCORNER   ACS_PICK('M', '+')
710 #define ACS_DS_URCORNER   ACS_PICK('N', '+')
711 #define ACS_DS_ULCORNER   ACS_PICK('O', '+')
712 #define ACS_DS_LLCORNER   ACS_PICK('P', '+')
713 #define ACS_DS_PLUS       ACS_PICK('Q', '+')
714 #define ACS_DS_LTEE       ACS_PICK('R', '+')
715 #define ACS_DS_RTEE       ACS_PICK('S', '+')
716 #define ACS_DS_BTEE       ACS_PICK('T', '+')
717 #define ACS_DS_TTEE       ACS_PICK('U', '+')
718 
719 /* VT100-compatible symbols -- other */
720 
721 #define ACS_S1            ACS_PICK('l', '-')
722 #define ACS_S9            ACS_PICK('o', '_')
723 #define ACS_DIAMOND       ACS_PICK('j', '+')
724 #define ACS_CKBOARD       ACS_PICK('k', ':')
725 #define ACS_DEGREE        ACS_PICK('w', '\'')
726 #define ACS_PLMINUS       ACS_PICK('x', '#')
727 #define ACS_BULLET        ACS_PICK('h', 'o')
728 
729 /* Teletype 5410v1 symbols -- these are defined in SysV curses, but
730    are not well-supported by most terminals. Stick to VT100 characters
731    for optimum portability. */
732 
733 #define ACS_LARROW        ACS_PICK('!', '<')
734 #define ACS_RARROW        ACS_PICK(' ', '>')
735 #define ACS_DARROW        ACS_PICK('#', 'v')
736 #define ACS_UARROW        ACS_PICK('"', '^')
737 #define ACS_BOARD         ACS_PICK('+', '#')
738 #define ACS_LTBOARD       ACS_PICK('y', '#')
739 #define ACS_LANTERN       ACS_PICK('z', '*')
740 #define ACS_BLOCK         ACS_PICK('t', '#')
741 
742 /* That goes double for these -- undocumented SysV symbols. Don't use
743    them. */
744 
745 #define ACS_S3            ACS_PICK('m', '-')
746 #define ACS_S7            ACS_PICK('n', '-')
747 #define ACS_LEQUAL        ACS_PICK('u', '<')
748 #define ACS_GEQUAL        ACS_PICK('v', '>')
749 #define ACS_PI            ACS_PICK('$', 'n')
750 #define ACS_NEQUAL        ACS_PICK('%', '+')
751 #define ACS_STERLING      ACS_PICK('~', 'L')
752 
753 /* Box char aliases */
754 
755 #define ACS_BSSB      ACS_ULCORNER
756 #define ACS_SSBB      ACS_LLCORNER
757 #define ACS_BBSS      ACS_URCORNER
758 #define ACS_SBBS      ACS_LRCORNER
759 #define ACS_SBSS      ACS_RTEE
760 #define ACS_SSSB      ACS_LTEE
761 #define ACS_SSBS      ACS_BTEE
762 #define ACS_BSSS      ACS_TTEE
763 #define ACS_BSBS      ACS_HLINE
764 #define ACS_SBSB      ACS_VLINE
765 #define ACS_SSSS      ACS_PLUS
766 
767 /* cchar_t aliases */
768 
769 #ifdef PDC_WIDE
770 # define WACS_LRCORNER      (&(acs_map['V']))
771 # define WACS_URCORNER      (&(acs_map['W']))
772 # define WACS_ULCORNER      (&(acs_map['X']))
773 # define WACS_LLCORNER      (&(acs_map['Y']))
774 # define WACS_PLUS          (&(acs_map['Z']))
775 # define WACS_LTEE          (&(acs_map['[']))
776 # define WACS_RTEE          (&(acs_map['\\']))
777 # define WACS_BTEE          (&(acs_map[']']))
778 # define WACS_TTEE          (&(acs_map['^']))
779 # define WACS_HLINE         (&(acs_map['_']))
780 # define WACS_VLINE         (&(acs_map['`']))
781 
782 # define WACS_CENT          (&(acs_map['{']))
783 # define WACS_YEN           (&(acs_map['|']))
784 # define WACS_PESETA        (&(acs_map['}']))
785 # define WACS_HALF          (&(acs_map['&']))
786 # define WACS_QUARTER       (&(acs_map['\'']))
787 # define WACS_LEFT_ANG_QU   (&(acs_map[')']))
788 # define WACS_RIGHT_ANG_QU  (&(acs_map['*']))
789 # define WACS_D_HLINE       (&(acs_map['a']))
790 # define WACS_D_VLINE       (&(acs_map['b']))
791 # define WACS_CLUB          (&(acs_map[ 11]))
792 # define WACS_HEART         (&(acs_map[ 12]))
793 # define WACS_SPADE         (&(acs_map[ 13]))
794 # define WACS_SMILE         (&(acs_map[ 14]))
795 # define WACS_REV_SMILE     (&(acs_map[ 15]))
796 # define WACS_MED_BULLET    (&(acs_map[ 16]))
797 # define WACS_WHITE_BULLET  (&(acs_map[ 17]))
798 # define WACS_PILCROW       (&(acs_map[ 18]))
799 # define WACS_SECTION       (&(acs_map[ 19]))
800 
801 # define WACS_SUP2          (&(acs_map[',']))
802 # define WACS_ALPHA         (&(acs_map['.']))
803 # define WACS_BETA          (&(acs_map['/']))
804 # define WACS_GAMMA         (&(acs_map['0']))
805 # define WACS_UP_SIGMA      (&(acs_map['1']))
806 # define WACS_LO_SIGMA      (&(acs_map['2']))
807 # define WACS_MU            (&(acs_map['4']))
808 # define WACS_TAU           (&(acs_map['5']))
809 # define WACS_UP_PHI        (&(acs_map['6']))
810 # define WACS_THETA         (&(acs_map['7']))
811 # define WACS_OMEGA         (&(acs_map['8']))
812 # define WACS_DELTA         (&(acs_map['9']))
813 # define WACS_INFINITY      (&(acs_map['-']))
814 # define WACS_LO_PHI        (&(acs_map[ 22]))
815 # define WACS_EPSILON       (&(acs_map[':']))
816 # define WACS_INTERSECT     (&(acs_map['e']))
817 # define WACS_TRIPLE_BAR    (&(acs_map['f']))
818 # define WACS_DIVISION      (&(acs_map['c']))
819 # define WACS_APPROX_EQ     (&(acs_map['d']))
820 # define WACS_SM_BULLET     (&(acs_map['g']))
821 # define WACS_SQUARE_ROOT   (&(acs_map['i']))
822 # define WACS_UBLOCK        (&(acs_map['p']))
823 # define WACS_BBLOCK        (&(acs_map['q']))
824 # define WACS_LBLOCK        (&(acs_map['r']))
825 # define WACS_RBLOCK        (&(acs_map['s']))
826 
827 # define WACS_A_ORDINAL     (&(acs_map[20]))
828 # define WACS_O_ORDINAL     (&(acs_map[21]))
829 # define WACS_INV_QUERY     (&(acs_map[24]))
830 # define WACS_REV_NOT       (&(acs_map[25]))
831 # define WACS_NOT           (&(acs_map[26]))
832 # define WACS_INV_BANG      (&(acs_map[23]))
833 # define WACS_UP_INTEGRAL   (&(acs_map[27]))
834 # define WACS_LO_INTEGRAL   (&(acs_map[28]))
835 # define WACS_SUP_N         (&(acs_map[29]))
836 # define WACS_CENTER_SQU    (&(acs_map[30]))
837 # define WACS_F_WITH_HOOK   (&(acs_map[31]))
838 
839 # define WACS_SD_LRCORNER   (&(acs_map[';']))
840 # define WACS_SD_URCORNER   (&(acs_map['<']))
841 # define WACS_SD_ULCORNER   (&(acs_map['=']))
842 # define WACS_SD_LLCORNER   (&(acs_map['>']))
843 # define WACS_SD_PLUS       (&(acs_map['?']))
844 # define WACS_SD_LTEE       (&(acs_map['@']))
845 # define WACS_SD_RTEE       (&(acs_map['A']))
846 # define WACS_SD_BTEE       (&(acs_map['B']))
847 # define WACS_SD_TTEE       (&(acs_map['C']))
848 
849 # define WACS_D_LRCORNER    (&(acs_map['D']))
850 # define WACS_D_URCORNER    (&(acs_map['E']))
851 # define WACS_D_ULCORNER    (&(acs_map['F']))
852 # define WACS_D_LLCORNER    (&(acs_map['G']))
853 # define WACS_D_PLUS        (&(acs_map['H']))
854 # define WACS_D_LTEE        (&(acs_map['I']))
855 # define WACS_D_RTEE        (&(acs_map['J']))
856 # define WACS_D_BTEE        (&(acs_map['K']))
857 # define WACS_D_TTEE        (&(acs_map['L']))
858 
859 # define WACS_DS_LRCORNER   (&(acs_map['M']))
860 # define WACS_DS_URCORNER   (&(acs_map['N']))
861 # define WACS_DS_ULCORNER   (&(acs_map['O']))
862 # define WACS_DS_LLCORNER   (&(acs_map['P']))
863 # define WACS_DS_PLUS       (&(acs_map['Q']))
864 # define WACS_DS_LTEE       (&(acs_map['R']))
865 # define WACS_DS_RTEE       (&(acs_map['S']))
866 # define WACS_DS_BTEE       (&(acs_map['T']))
867 # define WACS_DS_TTEE       (&(acs_map['U']))
868 
869 # define WACS_S1            (&(acs_map['l']))
870 # define WACS_S9            (&(acs_map['o']))
871 # define WACS_DIAMOND       (&(acs_map['j']))
872 # define WACS_CKBOARD       (&(acs_map['k']))
873 # define WACS_DEGREE        (&(acs_map['w']))
874 # define WACS_PLMINUS       (&(acs_map['x']))
875 # define WACS_BULLET        (&(acs_map['h']))
876 
877 
878 # define WACS_LARROW        (&(acs_map['!']))
879 # define WACS_RARROW        (&(acs_map[' ']))
880 # define WACS_DARROW        (&(acs_map['#']))
881 # define WACS_UARROW        (&(acs_map['"']))
882 # define WACS_BOARD         (&(acs_map['+']))
883 # define WACS_LTBOARD       (&(acs_map['y']))
884 # define WACS_LANTERN       (&(acs_map['z']))
885 # define WACS_BLOCK         (&(acs_map['t']))
886 
887 # define WACS_S3            (&(acs_map['m']))
888 # define WACS_S7            (&(acs_map['n']))
889 # define WACS_LEQUAL        (&(acs_map['u']))
890 # define WACS_GEQUAL        (&(acs_map['v']))
891 # define WACS_PI            (&(acs_map['$']))
892 # define WACS_NEQUAL        (&(acs_map['%']))
893 # define WACS_STERLING      (&(acs_map['~']))
894 
895 # define WACS_BSSB     WACS_ULCORNER
896 # define WACS_SSBB     WACS_LLCORNER
897 # define WACS_BBSS     WACS_URCORNER
898 # define WACS_SBBS     WACS_LRCORNER
899 # define WACS_SBSS     WACS_RTEE
900 # define WACS_SSSB     WACS_LTEE
901 # define WACS_SSBS     WACS_BTEE
902 # define WACS_BSSS     WACS_TTEE
903 # define WACS_BSBS     WACS_HLINE
904 # define WACS_SBSB     WACS_VLINE
905 # define WACS_SSSS     WACS_PLUS
906 #endif
907 
908 /*** Color macros ***/
909 
910 #define COLOR_BLACK   0
911 
912 #ifdef PDC_RGB        /* RGB */
913 # define COLOR_RED    1
914 # define COLOR_GREEN  2
915 # define COLOR_BLUE   4
916 #else                 /* BGR */
917 # define COLOR_BLUE   1
918 # define COLOR_GREEN  2
919 # define COLOR_RED    4
920 #endif
921 
922 #define COLOR_CYAN    (COLOR_BLUE | COLOR_GREEN)
923 #define COLOR_MAGENTA (COLOR_RED | COLOR_BLUE)
924 #define COLOR_YELLOW  (COLOR_RED | COLOR_GREEN)
925 
926 #define COLOR_WHITE   7
927 
928 /*----------------------------------------------------------------------
929  *
930  *  Function and Keypad Key Definitions.
931  *  Many are just for compatibility.
932  *
933  */
934 
935 #ifdef PDC_WIDE
936    #define KEY_OFFSET 0xec00
937 #else
938    #define KEY_OFFSET 0x100
939 #endif
940 
941 #define KEY_CODE_YES     (KEY_OFFSET + 0x00) /* If get_wch() gives a key code */
942 
943 #define KEY_BREAK        (KEY_OFFSET + 0x01) /* Not on PC KBD */
944 #define KEY_DOWN         (KEY_OFFSET + 0x02) /* Down arrow key */
945 #define KEY_UP           (KEY_OFFSET + 0x03) /* Up arrow key */
946 #define KEY_LEFT         (KEY_OFFSET + 0x04) /* Left arrow key */
947 #define KEY_RIGHT        (KEY_OFFSET + 0x05) /* Right arrow key */
948 #define KEY_HOME         (KEY_OFFSET + 0x06) /* home key */
949 #define KEY_BACKSPACE    (KEY_OFFSET + 0x07) /* not on pc */
950 #define KEY_F0           (KEY_OFFSET + 0x08) /* function keys; 64 reserved */
951 
952 #define KEY_DL           (KEY_OFFSET + 0x48) /* delete line */
953 #define KEY_IL           (KEY_OFFSET + 0x49) /* insert line */
954 #define KEY_DC           (KEY_OFFSET + 0x4a) /* delete character */
955 #define KEY_IC           (KEY_OFFSET + 0x4b) /* insert char or enter ins mode */
956 #define KEY_EIC          (KEY_OFFSET + 0x4c) /* exit insert char mode */
957 #define KEY_CLEAR        (KEY_OFFSET + 0x4d) /* clear screen */
958 #define KEY_EOS          (KEY_OFFSET + 0x4e) /* clear to end of screen */
959 #define KEY_EOL          (KEY_OFFSET + 0x4f) /* clear to end of line */
960 #define KEY_SF           (KEY_OFFSET + 0x50) /* scroll 1 line forward */
961 #define KEY_SR           (KEY_OFFSET + 0x51) /* scroll 1 line back (reverse) */
962 #define KEY_NPAGE        (KEY_OFFSET + 0x52) /* next page */
963 #define KEY_PPAGE        (KEY_OFFSET + 0x53) /* previous page */
964 #define KEY_STAB         (KEY_OFFSET + 0x54) /* set tab */
965 #define KEY_CTAB         (KEY_OFFSET + 0x55) /* clear tab */
966 #define KEY_CATAB        (KEY_OFFSET + 0x56) /* clear all tabs */
967 #define KEY_ENTER        (KEY_OFFSET + 0x57) /* enter or send (unreliable) */
968 #define KEY_SRESET       (KEY_OFFSET + 0x58) /* soft/reset (partial/unreliable) */
969 #define KEY_RESET        (KEY_OFFSET + 0x59) /* reset/hard reset (unreliable) */
970 #define KEY_PRINT        (KEY_OFFSET + 0x5a) /* print/copy */
971 #define KEY_LL           (KEY_OFFSET + 0x5b) /* home down/bottom (lower left) */
972 #define KEY_ABORT        (KEY_OFFSET + 0x5c) /* abort/terminate key (any) */
973 #define KEY_SHELP        (KEY_OFFSET + 0x5d) /* short help */
974 #define KEY_LHELP        (KEY_OFFSET + 0x5e) /* long help */
975 #define KEY_BTAB         (KEY_OFFSET + 0x5f) /* Back tab key */
976 #define KEY_BEG          (KEY_OFFSET + 0x60) /* beg(inning) key */
977 #define KEY_CANCEL       (KEY_OFFSET + 0x61) /* cancel key */
978 #define KEY_CLOSE        (KEY_OFFSET + 0x62) /* close key */
979 #define KEY_COMMAND      (KEY_OFFSET + 0x63) /* cmd (command) key */
980 #define KEY_COPY         (KEY_OFFSET + 0x64) /* copy key */
981 #define KEY_CREATE       (KEY_OFFSET + 0x65) /* create key */
982 #define KEY_END          (KEY_OFFSET + 0x66) /* end key */
983 #define KEY_EXIT         (KEY_OFFSET + 0x67) /* exit key */
984 #define KEY_FIND         (KEY_OFFSET + 0x68) /* find key */
985 #define KEY_HELP         (KEY_OFFSET + 0x69) /* help key */
986 #define KEY_MARK         (KEY_OFFSET + 0x6a) /* mark key */
987 #define KEY_MESSAGE      (KEY_OFFSET + 0x6b) /* message key */
988 #define KEY_MOVE         (KEY_OFFSET + 0x6c) /* move key */
989 #define KEY_NEXT         (KEY_OFFSET + 0x6d) /* next object key */
990 #define KEY_OPEN         (KEY_OFFSET + 0x6e) /* open key */
991 #define KEY_OPTIONS      (KEY_OFFSET + 0x6f) /* options key */
992 #define KEY_PREVIOUS     (KEY_OFFSET + 0x70) /* previous object key */
993 #define KEY_REDO         (KEY_OFFSET + 0x71) /* redo key */
994 #define KEY_REFERENCE    (KEY_OFFSET + 0x72) /* ref(erence) key */
995 #define KEY_REFRESH      (KEY_OFFSET + 0x73) /* refresh key */
996 #define KEY_REPLACE      (KEY_OFFSET + 0x74) /* replace key */
997 #define KEY_RESTART      (KEY_OFFSET + 0x75) /* restart key */
998 #define KEY_RESUME       (KEY_OFFSET + 0x76) /* resume key */
999 #define KEY_SAVE         (KEY_OFFSET + 0x77) /* save key */
1000 #define KEY_SBEG         (KEY_OFFSET + 0x78) /* shifted beginning key */
1001 #define KEY_SCANCEL      (KEY_OFFSET + 0x79) /* shifted cancel key */
1002 #define KEY_SCOMMAND     (KEY_OFFSET + 0x7a) /* shifted command key */
1003 #define KEY_SCOPY        (KEY_OFFSET + 0x7b) /* shifted copy key */
1004 #define KEY_SCREATE      (KEY_OFFSET + 0x7c) /* shifted create key */
1005 #define KEY_SDC          (KEY_OFFSET + 0x7d) /* shifted delete char key */
1006 #define KEY_SDL          (KEY_OFFSET + 0x7e) /* shifted delete line key */
1007 #define KEY_SELECT       (KEY_OFFSET + 0x7f) /* select key */
1008 #define KEY_SEND         (KEY_OFFSET + 0x80) /* shifted end key */
1009 #define KEY_SEOL         (KEY_OFFSET + 0x81) /* shifted clear line key */
1010 #define KEY_SEXIT        (KEY_OFFSET + 0x82) /* shifted exit key */
1011 #define KEY_SFIND        (KEY_OFFSET + 0x83) /* shifted find key */
1012 #define KEY_SHOME        (KEY_OFFSET + 0x84) /* shifted home key */
1013 #define KEY_SIC          (KEY_OFFSET + 0x85) /* shifted input key */
1014 
1015 #define KEY_SLEFT        (KEY_OFFSET + 0x87) /* shifted left arrow key */
1016 #define KEY_SMESSAGE     (KEY_OFFSET + 0x88) /* shifted message key */
1017 #define KEY_SMOVE        (KEY_OFFSET + 0x89) /* shifted move key */
1018 #define KEY_SNEXT        (KEY_OFFSET + 0x8a) /* shifted next key */
1019 #define KEY_SOPTIONS     (KEY_OFFSET + 0x8b) /* shifted options key */
1020 #define KEY_SPREVIOUS    (KEY_OFFSET + 0x8c) /* shifted prev key */
1021 #define KEY_SPRINT       (KEY_OFFSET + 0x8d) /* shifted print key */
1022 #define KEY_SREDO        (KEY_OFFSET + 0x8e) /* shifted redo key */
1023 #define KEY_SREPLACE     (KEY_OFFSET + 0x8f) /* shifted replace key */
1024 #define KEY_SRIGHT       (KEY_OFFSET + 0x90) /* shifted right arrow */
1025 #define KEY_SRSUME       (KEY_OFFSET + 0x91) /* shifted resume key */
1026 #define KEY_SSAVE        (KEY_OFFSET + 0x92) /* shifted save key */
1027 #define KEY_SSUSPEND     (KEY_OFFSET + 0x93) /* shifted suspend key */
1028 #define KEY_SUNDO        (KEY_OFFSET + 0x94) /* shifted undo key */
1029 #define KEY_SUSPEND      (KEY_OFFSET + 0x95) /* suspend key */
1030 #define KEY_UNDO         (KEY_OFFSET + 0x96) /* undo key */
1031 
1032 /* PDCurses-specific key definitions -- PC only */
1033 
1034 #define ALT_0                 (KEY_OFFSET + 0x97)
1035 #define ALT_1                 (KEY_OFFSET + 0x98)
1036 #define ALT_2                 (KEY_OFFSET + 0x99)
1037 #define ALT_3                 (KEY_OFFSET + 0x9a)
1038 #define ALT_4                 (KEY_OFFSET + 0x9b)
1039 #define ALT_5                 (KEY_OFFSET + 0x9c)
1040 #define ALT_6                 (KEY_OFFSET + 0x9d)
1041 #define ALT_7                 (KEY_OFFSET + 0x9e)
1042 #define ALT_8                 (KEY_OFFSET + 0x9f)
1043 #define ALT_9                 (KEY_OFFSET + 0xa0)
1044 #define ALT_A                 (KEY_OFFSET + 0xa1)
1045 #define ALT_B                 (KEY_OFFSET + 0xa2)
1046 #define ALT_C                 (KEY_OFFSET + 0xa3)
1047 #define ALT_D                 (KEY_OFFSET + 0xa4)
1048 #define ALT_E                 (KEY_OFFSET + 0xa5)
1049 #define ALT_F                 (KEY_OFFSET + 0xa6)
1050 #define ALT_G                 (KEY_OFFSET + 0xa7)
1051 #define ALT_H                 (KEY_OFFSET + 0xa8)
1052 #define ALT_I                 (KEY_OFFSET + 0xa9)
1053 #define ALT_J                 (KEY_OFFSET + 0xaa)
1054 #define ALT_K                 (KEY_OFFSET + 0xab)
1055 #define ALT_L                 (KEY_OFFSET + 0xac)
1056 #define ALT_M                 (KEY_OFFSET + 0xad)
1057 #define ALT_N                 (KEY_OFFSET + 0xae)
1058 #define ALT_O                 (KEY_OFFSET + 0xaf)
1059 #define ALT_P                 (KEY_OFFSET + 0xb0)
1060 #define ALT_Q                 (KEY_OFFSET + 0xb1)
1061 #define ALT_R                 (KEY_OFFSET + 0xb2)
1062 #define ALT_S                 (KEY_OFFSET + 0xb3)
1063 #define ALT_T                 (KEY_OFFSET + 0xb4)
1064 #define ALT_U                 (KEY_OFFSET + 0xb5)
1065 #define ALT_V                 (KEY_OFFSET + 0xb6)
1066 #define ALT_W                 (KEY_OFFSET + 0xb7)
1067 #define ALT_X                 (KEY_OFFSET + 0xb8)
1068 #define ALT_Y                 (KEY_OFFSET + 0xb9)
1069 #define ALT_Z                 (KEY_OFFSET + 0xba)
1070 
1071 #define CTL_LEFT              (KEY_OFFSET + 0xbb) /* Control-Left-Arrow */
1072 #define CTL_RIGHT             (KEY_OFFSET + 0xbc)
1073 #define CTL_PGUP              (KEY_OFFSET + 0xbd)
1074 #define CTL_PGDN              (KEY_OFFSET + 0xbe)
1075 #define CTL_HOME              (KEY_OFFSET + 0xbf)
1076 #define CTL_END               (KEY_OFFSET + 0xc0)
1077 
1078 #define KEY_A1                (KEY_OFFSET + 0xc1) /* upper left on Virtual keypad */
1079 #define KEY_A2                (KEY_OFFSET + 0xc2) /* upper middle on Virt. keypad */
1080 #define KEY_A3                (KEY_OFFSET + 0xc3) /* upper right on Vir. keypad */
1081 #define KEY_B1                (KEY_OFFSET + 0xc4) /* middle left on Virt. keypad */
1082 #define KEY_B2                (KEY_OFFSET + 0xc5) /* center on Virt. keypad */
1083 #define KEY_B3                (KEY_OFFSET + 0xc6) /* middle right on Vir. keypad */
1084 #define KEY_C1                (KEY_OFFSET + 0xc7) /* lower left on Virt. keypad */
1085 #define KEY_C2                (KEY_OFFSET + 0xc8) /* lower middle on Virt. keypad */
1086 #define KEY_C3                (KEY_OFFSET + 0xc9) /* lower right on Vir. keypad */
1087 
1088 #define PADSLASH              (KEY_OFFSET + 0xca) /* slash on keypad */
1089 #define PADENTER              (KEY_OFFSET + 0xcb) /* enter on keypad */
1090 #define CTL_PADENTER          (KEY_OFFSET + 0xcc) /* ctl-enter on keypad */
1091 #define ALT_PADENTER          (KEY_OFFSET + 0xcd) /* alt-enter on keypad */
1092 #define PADSTOP               (KEY_OFFSET + 0xce) /* stop on keypad */
1093 #define PADSTAR               (KEY_OFFSET + 0xcf) /* star on keypad */
1094 #define PADMINUS              (KEY_OFFSET + 0xd0) /* minus on keypad */
1095 #define PADPLUS               (KEY_OFFSET + 0xd1) /* plus on keypad */
1096 #define CTL_PADSTOP           (KEY_OFFSET + 0xd2) /* ctl-stop on keypad */
1097 #define CTL_PADCENTER         (KEY_OFFSET + 0xd3) /* ctl-enter on keypad */
1098 #define CTL_PADPLUS           (KEY_OFFSET + 0xd4) /* ctl-plus on keypad */
1099 #define CTL_PADMINUS          (KEY_OFFSET + 0xd5) /* ctl-minus on keypad */
1100 #define CTL_PADSLASH          (KEY_OFFSET + 0xd6) /* ctl-slash on keypad */
1101 #define CTL_PADSTAR           (KEY_OFFSET + 0xd7) /* ctl-star on keypad */
1102 #define ALT_PADPLUS           (KEY_OFFSET + 0xd8) /* alt-plus on keypad */
1103 #define ALT_PADMINUS          (KEY_OFFSET + 0xd9) /* alt-minus on keypad */
1104 #define ALT_PADSLASH          (KEY_OFFSET + 0xda) /* alt-slash on keypad */
1105 #define ALT_PADSTAR           (KEY_OFFSET + 0xdb) /* alt-star on keypad */
1106 #define ALT_PADSTOP           (KEY_OFFSET + 0xdc) /* alt-stop on keypad */
1107 #define CTL_INS               (KEY_OFFSET + 0xdd) /* ctl-insert */
1108 #define ALT_DEL               (KEY_OFFSET + 0xde) /* alt-delete */
1109 #define ALT_INS               (KEY_OFFSET + 0xdf) /* alt-insert */
1110 #define CTL_UP                (KEY_OFFSET + 0xe0) /* ctl-up arrow */
1111 #define CTL_DOWN              (KEY_OFFSET + 0xe1) /* ctl-down arrow */
1112 #define CTL_TAB               (KEY_OFFSET + 0xe2) /* ctl-tab */
1113 #define ALT_TAB               (KEY_OFFSET + 0xe3)
1114 #define ALT_MINUS             (KEY_OFFSET + 0xe4)
1115 #define ALT_EQUAL             (KEY_OFFSET + 0xe5)
1116 #define ALT_HOME              (KEY_OFFSET + 0xe6)
1117 #define ALT_PGUP              (KEY_OFFSET + 0xe7)
1118 #define ALT_PGDN              (KEY_OFFSET + 0xe8)
1119 #define ALT_END               (KEY_OFFSET + 0xe9)
1120 #define ALT_UP                (KEY_OFFSET + 0xea) /* alt-up arrow */
1121 #define ALT_DOWN              (KEY_OFFSET + 0xeb) /* alt-down arrow */
1122 #define ALT_RIGHT             (KEY_OFFSET + 0xec) /* alt-right arrow */
1123 #define ALT_LEFT              (KEY_OFFSET + 0xed) /* alt-left arrow */
1124 #define ALT_ENTER             (KEY_OFFSET + 0xee) /* alt-enter */
1125 #define ALT_ESC               (KEY_OFFSET + 0xef) /* alt-escape */
1126 #define ALT_BQUOTE            (KEY_OFFSET + 0xf0) /* alt-back quote */
1127 #define ALT_LBRACKET          (KEY_OFFSET + 0xf1) /* alt-left bracket */
1128 #define ALT_RBRACKET          (KEY_OFFSET + 0xf2) /* alt-right bracket */
1129 #define ALT_SEMICOLON         (KEY_OFFSET + 0xf3) /* alt-semi-colon */
1130 #define ALT_FQUOTE            (KEY_OFFSET + 0xf4) /* alt-forward quote */
1131 #define ALT_COMMA             (KEY_OFFSET + 0xf5) /* alt-comma */
1132 #define ALT_STOP              (KEY_OFFSET + 0xf6) /* alt-stop */
1133 #define ALT_FSLASH            (KEY_OFFSET + 0xf7) /* alt-forward slash */
1134 #define ALT_BKSP              (KEY_OFFSET + 0xf8) /* alt-backspace */
1135 #define CTL_BKSP              (KEY_OFFSET + 0xf9) /* ctl-backspace */
1136 #define PAD0                  (KEY_OFFSET + 0xfa) /* keypad 0 */
1137 
1138 #define CTL_PAD0              (KEY_OFFSET + 0xfb) /* ctl-keypad 0 */
1139 #define CTL_PAD1              (KEY_OFFSET + 0xfc)
1140 #define CTL_PAD2              (KEY_OFFSET + 0xfd)
1141 #define CTL_PAD3              (KEY_OFFSET + 0xfe)
1142 #define CTL_PAD4              (KEY_OFFSET + 0xff)
1143 #define CTL_PAD5              (KEY_OFFSET + 0x100)
1144 #define CTL_PAD6              (KEY_OFFSET + 0x101)
1145 #define CTL_PAD7              (KEY_OFFSET + 0x102)
1146 #define CTL_PAD8              (KEY_OFFSET + 0x103)
1147 #define CTL_PAD9              (KEY_OFFSET + 0x104)
1148 
1149 #define ALT_PAD0              (KEY_OFFSET + 0x105) /* alt-keypad 0 */
1150 #define ALT_PAD1              (KEY_OFFSET + 0x106)
1151 #define ALT_PAD2              (KEY_OFFSET + 0x107)
1152 #define ALT_PAD3              (KEY_OFFSET + 0x108)
1153 #define ALT_PAD4              (KEY_OFFSET + 0x109)
1154 #define ALT_PAD5              (KEY_OFFSET + 0x10a)
1155 #define ALT_PAD6              (KEY_OFFSET + 0x10b)
1156 #define ALT_PAD7              (KEY_OFFSET + 0x10c)
1157 #define ALT_PAD8              (KEY_OFFSET + 0x10d)
1158 #define ALT_PAD9              (KEY_OFFSET + 0x10e)
1159 
1160 #define CTL_DEL               (KEY_OFFSET + 0x10f) /* clt-delete */
1161 #define ALT_BSLASH            (KEY_OFFSET + 0x110) /* alt-back slash */
1162 #define CTL_ENTER             (KEY_OFFSET + 0x111) /* ctl-enter */
1163 
1164 #define SHF_PADENTER          (KEY_OFFSET + 0x112) /* shift-enter on keypad */
1165 #define SHF_PADSLASH          (KEY_OFFSET + 0x113) /* shift-slash on keypad */
1166 #define SHF_PADSTAR           (KEY_OFFSET + 0x114) /* shift-star  on keypad */
1167 #define SHF_PADPLUS           (KEY_OFFSET + 0x115) /* shift-plus  on keypad */
1168 #define SHF_PADMINUS          (KEY_OFFSET + 0x116) /* shift-minus on keypad */
1169 #define SHF_UP                (KEY_OFFSET + 0x117) /* shift-up on keypad */
1170 #define SHF_DOWN              (KEY_OFFSET + 0x118) /* shift-down on keypad */
1171 #define SHF_IC                (KEY_OFFSET + 0x119) /* shift-insert on keypad */
1172 #define SHF_DC                (KEY_OFFSET + 0x11a) /* shift-delete on keypad */
1173 
1174 #define KEY_MOUSE             (KEY_OFFSET + 0x11b) /* "mouse" key */
1175 #define KEY_SHIFT_L           (KEY_OFFSET + 0x11c) /* Left-shift */
1176 #define KEY_SHIFT_R           (KEY_OFFSET + 0x11d) /* Right-shift */
1177 #define KEY_CONTROL_L         (KEY_OFFSET + 0x11e) /* Left-control */
1178 #define KEY_CONTROL_R         (KEY_OFFSET + 0x11f) /* Right-control */
1179 #define KEY_ALT_L             (KEY_OFFSET + 0x120) /* Left-alt */
1180 #define KEY_ALT_R             (KEY_OFFSET + 0x121) /* Right-alt */
1181 #define KEY_RESIZE            (KEY_OFFSET + 0x122) /* Window resize */
1182 #define KEY_SUP               (KEY_OFFSET + 0x123) /* Shifted up arrow */
1183 #define KEY_SDOWN             (KEY_OFFSET + 0x124) /* Shifted down arrow */
1184 
1185          /* The following were added 2011 Sep 14,  and are */
1186          /* not returned by most flavors of PDCurses:      */
1187 
1188 #define CTL_SEMICOLON         (KEY_OFFSET + 0x125)
1189 #define CTL_EQUAL             (KEY_OFFSET + 0x126)
1190 #define CTL_COMMA             (KEY_OFFSET + 0x127)
1191 #define CTL_MINUS             (KEY_OFFSET + 0x128)
1192 #define CTL_STOP              (KEY_OFFSET + 0x129)
1193 #define CTL_FSLASH            (KEY_OFFSET + 0x12a)
1194 #define CTL_BQUOTE            (KEY_OFFSET + 0x12b)
1195 
1196 #define KEY_APPS              (KEY_OFFSET + 0x12c)
1197 #define KEY_SAPPS             (KEY_OFFSET + 0x12d)
1198 #define CTL_APPS              (KEY_OFFSET + 0x12e)
1199 #define ALT_APPS              (KEY_OFFSET + 0x12f)
1200 
1201 #define KEY_PAUSE             (KEY_OFFSET + 0x130)
1202 #define KEY_SPAUSE            (KEY_OFFSET + 0x131)
1203 #define CTL_PAUSE             (KEY_OFFSET + 0x132)
1204 
1205 #define KEY_PRINTSCREEN       (KEY_OFFSET + 0x133)
1206 #define ALT_PRINTSCREEN       (KEY_OFFSET + 0x134)
1207 #define KEY_SCROLLLOCK        (KEY_OFFSET + 0x135)
1208 #define ALT_SCROLLLOCK        (KEY_OFFSET + 0x136)
1209 
1210 #define CTL_0                 (KEY_OFFSET + 0x137)
1211 #define CTL_1                 (KEY_OFFSET + 0x138)
1212 #define CTL_2                 (KEY_OFFSET + 0x139)
1213 #define CTL_3                 (KEY_OFFSET + 0x13a)
1214 #define CTL_4                 (KEY_OFFSET + 0x13b)
1215 #define CTL_5                 (KEY_OFFSET + 0x13c)
1216 #define CTL_6                 (KEY_OFFSET + 0x13d)
1217 #define CTL_7                 (KEY_OFFSET + 0x13e)
1218 #define CTL_8                 (KEY_OFFSET + 0x13f)
1219 #define CTL_9                 (KEY_OFFSET + 0x140)
1220 
1221 #define KEY_BROWSER_BACK      (KEY_OFFSET + 0x141)
1222 #define KEY_SBROWSER_BACK     (KEY_OFFSET + 0x142)
1223 #define KEY_CBROWSER_BACK     (KEY_OFFSET + 0x143)
1224 #define KEY_ABROWSER_BACK     (KEY_OFFSET + 0x144)
1225 #define KEY_BROWSER_FWD       (KEY_OFFSET + 0x145)
1226 #define KEY_SBROWSER_FWD      (KEY_OFFSET + 0x146)
1227 #define KEY_CBROWSER_FWD      (KEY_OFFSET + 0x147)
1228 #define KEY_ABROWSER_FWD      (KEY_OFFSET + 0x148)
1229 #define KEY_BROWSER_REF       (KEY_OFFSET + 0x149)
1230 #define KEY_SBROWSER_REF      (KEY_OFFSET + 0x14A)
1231 #define KEY_CBROWSER_REF      (KEY_OFFSET + 0x14B)
1232 #define KEY_ABROWSER_REF      (KEY_OFFSET + 0x14C)
1233 #define KEY_BROWSER_STOP      (KEY_OFFSET + 0x14D)
1234 #define KEY_SBROWSER_STOP     (KEY_OFFSET + 0x14E)
1235 #define KEY_CBROWSER_STOP     (KEY_OFFSET + 0x14F)
1236 #define KEY_ABROWSER_STOP     (KEY_OFFSET + 0x150)
1237 #define KEY_SEARCH            (KEY_OFFSET + 0x151)
1238 #define KEY_SSEARCH           (KEY_OFFSET + 0x152)
1239 #define KEY_CSEARCH           (KEY_OFFSET + 0x153)
1240 #define KEY_ASEARCH           (KEY_OFFSET + 0x154)
1241 #define KEY_FAVORITES         (KEY_OFFSET + 0x155)
1242 #define KEY_SFAVORITES        (KEY_OFFSET + 0x156)
1243 #define KEY_CFAVORITES        (KEY_OFFSET + 0x157)
1244 #define KEY_AFAVORITES        (KEY_OFFSET + 0x158)
1245 #define KEY_BROWSER_HOME      (KEY_OFFSET + 0x159)
1246 #define KEY_SBROWSER_HOME     (KEY_OFFSET + 0x15A)
1247 #define KEY_CBROWSER_HOME     (KEY_OFFSET + 0x15B)
1248 #define KEY_ABROWSER_HOME     (KEY_OFFSET + 0x15C)
1249 #define KEY_VOLUME_MUTE       (KEY_OFFSET + 0x15D)
1250 #define KEY_SVOLUME_MUTE      (KEY_OFFSET + 0x15E)
1251 #define KEY_CVOLUME_MUTE      (KEY_OFFSET + 0x15F)
1252 #define KEY_AVOLUME_MUTE      (KEY_OFFSET + 0x160)
1253 #define KEY_VOLUME_DOWN       (KEY_OFFSET + 0x161)
1254 #define KEY_SVOLUME_DOWN      (KEY_OFFSET + 0x162)
1255 #define KEY_CVOLUME_DOWN      (KEY_OFFSET + 0x163)
1256 #define KEY_AVOLUME_DOWN      (KEY_OFFSET + 0x164)
1257 #define KEY_VOLUME_UP         (KEY_OFFSET + 0x165)
1258 #define KEY_SVOLUME_UP        (KEY_OFFSET + 0x166)
1259 #define KEY_CVOLUME_UP        (KEY_OFFSET + 0x167)
1260 #define KEY_AVOLUME_UP        (KEY_OFFSET + 0x168)
1261 #define KEY_NEXT_TRACK        (KEY_OFFSET + 0x169)
1262 #define KEY_SNEXT_TRACK       (KEY_OFFSET + 0x16A)
1263 #define KEY_CNEXT_TRACK       (KEY_OFFSET + 0x16B)
1264 #define KEY_ANEXT_TRACK       (KEY_OFFSET + 0x16C)
1265 #define KEY_PREV_TRACK        (KEY_OFFSET + 0x16D)
1266 #define KEY_SPREV_TRACK       (KEY_OFFSET + 0x16E)
1267 #define KEY_CPREV_TRACK       (KEY_OFFSET + 0x16F)
1268 #define KEY_APREV_TRACK       (KEY_OFFSET + 0x170)
1269 #define KEY_MEDIA_STOP        (KEY_OFFSET + 0x171)
1270 #define KEY_SMEDIA_STOP       (KEY_OFFSET + 0x172)
1271 #define KEY_CMEDIA_STOP       (KEY_OFFSET + 0x173)
1272 #define KEY_AMEDIA_STOP       (KEY_OFFSET + 0x174)
1273 #define KEY_PLAY_PAUSE        (KEY_OFFSET + 0x175)
1274 #define KEY_SPLAY_PAUSE       (KEY_OFFSET + 0x176)
1275 #define KEY_CPLAY_PAUSE       (KEY_OFFSET + 0x177)
1276 #define KEY_APLAY_PAUSE       (KEY_OFFSET + 0x178)
1277 #define KEY_LAUNCH_MAIL       (KEY_OFFSET + 0x179)
1278 #define KEY_SLAUNCH_MAIL      (KEY_OFFSET + 0x17A)
1279 #define KEY_CLAUNCH_MAIL      (KEY_OFFSET + 0x17B)
1280 #define KEY_ALAUNCH_MAIL      (KEY_OFFSET + 0x17C)
1281 #define KEY_MEDIA_SELECT      (KEY_OFFSET + 0x17D)
1282 #define KEY_SMEDIA_SELECT     (KEY_OFFSET + 0x17E)
1283 #define KEY_CMEDIA_SELECT     (KEY_OFFSET + 0x17F)
1284 #define KEY_AMEDIA_SELECT     (KEY_OFFSET + 0x180)
1285 #define KEY_LAUNCH_APP1       (KEY_OFFSET + 0x181)
1286 #define KEY_SLAUNCH_APP1      (KEY_OFFSET + 0x182)
1287 #define KEY_CLAUNCH_APP1      (KEY_OFFSET + 0x183)
1288 #define KEY_ALAUNCH_APP1      (KEY_OFFSET + 0x184)
1289 #define KEY_LAUNCH_APP2       (KEY_OFFSET + 0x185)
1290 #define KEY_SLAUNCH_APP2      (KEY_OFFSET + 0x186)
1291 #define KEY_CLAUNCH_APP2      (KEY_OFFSET + 0x187)
1292 #define KEY_ALAUNCH_APP2      (KEY_OFFSET + 0x188)
1293 
1294 #define KEY_MIN       KEY_BREAK         /* Minimum curses key value */
1295 #define KEY_MAX       KEY_ALAUNCH_APP2  /* Maximum curses key */
1296 
1297 #define KEY_F(n)      (KEY_F0 + (n))
1298 
1299 /*----------------------------------------------------------------------
1300  *
1301  *  PDCurses Function Declarations
1302  *
1303  */
1304 
1305 /* Standard */
1306 
1307 PDCEX int     addch(const chtype);
1308 PDCEX int     addchnstr(const chtype *, int);
1309 PDCEX int     addchstr(const chtype *);
1310 PDCEX int     addnstr(const char *, int);
1311 PDCEX int     addstr(const char *);
1312 PDCEX int     attroff(chtype);
1313 PDCEX int     attron(chtype);
1314 PDCEX int     attrset(chtype);
1315 PDCEX int     attr_get(attr_t *, short *, void *);
1316 PDCEX int     attr_off(attr_t, void *);
1317 PDCEX int     attr_on(attr_t, void *);
1318 PDCEX int     attr_set(attr_t, short, void *);
1319 PDCEX int     baudrate(void);
1320 PDCEX int     beep(void);
1321 PDCEX int     bkgd(chtype);
1322 PDCEX void    bkgdset(chtype);
1323 PDCEX int     border(chtype, chtype, chtype, chtype, chtype, chtype, chtype, chtype);
1324 PDCEX int     box(WINDOW *, chtype, chtype);
1325 PDCEX bool    can_change_color(void);
1326 PDCEX int     cbreak(void);
1327 PDCEX int     chgat(int, attr_t, short, const void *);
1328 PDCEX int     clearok(WINDOW *, bool);
1329 PDCEX int     clear(void);
1330 PDCEX int     clrtobot(void);
1331 PDCEX int     clrtoeol(void);
1332 PDCEX int     color_content(short, short *, short *, short *);
1333 PDCEX int     color_set(short, void *);
1334 PDCEX int     copywin(const WINDOW *, WINDOW *, int, int, int, int, int, int, int);
1335 PDCEX int     curs_set(int);
1336 PDCEX int     def_prog_mode(void);
1337 PDCEX int     def_shell_mode(void);
1338 PDCEX int     delay_output(int);
1339 PDCEX int     delch(void);
1340 PDCEX int     deleteln(void);
1341 PDCEX void    delscreen(SCREEN *);
1342 PDCEX int     delwin(WINDOW *);
1343 PDCEX WINDOW *derwin(WINDOW *, int, int, int, int);
1344 PDCEX int     doupdate(void);
1345 PDCEX WINDOW *dupwin(WINDOW *);
1346 PDCEX int     echochar(const chtype);
1347 PDCEX int     echo(void);
1348 PDCEX int     endwin(void);
1349 PDCEX char    erasechar(void);
1350 PDCEX int     erase(void);
1351 PDCEX void    filter(void);
1352 PDCEX int     flash(void);
1353 PDCEX int     flushinp(void);
1354 PDCEX chtype  getbkgd(WINDOW *);
1355 PDCEX int     getnstr(char *, int);
1356 PDCEX int     getstr(char *);
1357 PDCEX WINDOW *getwin(FILE *);
1358 PDCEX int     halfdelay(int);
1359 PDCEX bool    has_colors(void);
1360 PDCEX bool    has_ic(void);
1361 PDCEX bool    has_il(void);
1362 PDCEX int     hline(chtype, int);
1363 PDCEX void    idcok(WINDOW *, bool);
1364 PDCEX int     idlok(WINDOW *, bool);
1365 PDCEX void    immedok(WINDOW *, bool);
1366 PDCEX int     inchnstr(chtype *, int);
1367 PDCEX int     inchstr(chtype *);
1368 PDCEX chtype  inch(void);
1369 PDCEX int     init_color(short, short, short, short);
1370 PDCEX int     init_pair(short, short, short);
1371 PDCEX WINDOW *initscr(void);
1372 PDCEX int     innstr(char *, int);
1373 PDCEX int     insch(chtype);
1374 PDCEX int     insdelln(int);
1375 PDCEX int     insertln(void);
1376 PDCEX int     insnstr(const char *, int);
1377 PDCEX int     insstr(const char *);
1378 PDCEX int     instr(char *);
1379 PDCEX int     intrflush(WINDOW *, bool);
1380 PDCEX bool    isendwin(void);
1381 PDCEX bool    is_linetouched(WINDOW *, int);
1382 PDCEX bool    is_wintouched(WINDOW *);
1383 PDCEX char   *keyname(int);
1384 PDCEX int     keypad(WINDOW *, bool);
1385 PDCEX char    killchar(void);
1386 PDCEX int     leaveok(WINDOW *, bool);
1387 PDCEX char   *longname(void);
1388 PDCEX int     meta(WINDOW *, bool);
1389 PDCEX int     move(int, int);
1390 PDCEX int     mvaddch(int, int, const chtype);
1391 PDCEX int     mvaddchnstr(int, int, const chtype *, int);
1392 PDCEX int     mvaddchstr(int, int, const chtype *);
1393 PDCEX int     mvaddnstr(int, int, const char *, int);
1394 PDCEX int     mvaddstr(int, int, const char *);
1395 PDCEX int     mvchgat(int, int, int, attr_t, short, const void *);
1396 PDCEX int     mvcur(int, int, int, int);
1397 PDCEX int     mvdelch(int, int);
1398 PDCEX int     mvderwin(WINDOW *, int, int);
1399 PDCEX int     mvgetch(int, int);
1400 PDCEX int     mvgetnstr(int, int, char *, int);
1401 PDCEX int     mvgetstr(int, int, char *);
1402 PDCEX int     mvhline(int, int, chtype, int);
1403 PDCEX chtype  mvinch(int, int);
1404 PDCEX int     mvinchnstr(int, int, chtype *, int);
1405 PDCEX int     mvinchstr(int, int, chtype *);
1406 PDCEX int     mvinnstr(int, int, char *, int);
1407 PDCEX int     mvinsch(int, int, chtype);
1408 PDCEX int     mvinsnstr(int, int, const char *, int);
1409 PDCEX int     mvinsstr(int, int, const char *);
1410 PDCEX int     mvinstr(int, int, char *);
1411 PDCEX int     mvprintw(int, int, const char *, ...);
1412 PDCEX int     mvscanw(int, int, const char *, ...);
1413 PDCEX int     mvvline(int, int, chtype, int);
1414 PDCEX int     mvwaddchnstr(WINDOW *, int, int, const chtype *, int);
1415 PDCEX int     mvwaddchstr(WINDOW *, int, int, const chtype *);
1416 PDCEX int     mvwaddch(WINDOW *, int, int, const chtype);
1417 PDCEX int     mvwaddnstr(WINDOW *, int, int, const char *, int);
1418 PDCEX int     mvwaddstr(WINDOW *, int, int, const char *);
1419 PDCEX int     mvwchgat(WINDOW *, int, int, int, attr_t, short, const void *);
1420 PDCEX int     mvwdelch(WINDOW *, int, int);
1421 PDCEX int     mvwgetch(WINDOW *, int, int);
1422 PDCEX int     mvwgetnstr(WINDOW *, int, int, char *, int);
1423 PDCEX int     mvwgetstr(WINDOW *, int, int, char *);
1424 PDCEX int     mvwhline(WINDOW *, int, int, chtype, int);
1425 PDCEX int     mvwinchnstr(WINDOW *, int, int, chtype *, int);
1426 PDCEX int     mvwinchstr(WINDOW *, int, int, chtype *);
1427 PDCEX chtype  mvwinch(WINDOW *, int, int);
1428 PDCEX int     mvwinnstr(WINDOW *, int, int, char *, int);
1429 PDCEX int     mvwinsch(WINDOW *, int, int, chtype);
1430 PDCEX int     mvwinsnstr(WINDOW *, int, int, const char *, int);
1431 PDCEX int     mvwinsstr(WINDOW *, int, int, const char *);
1432 PDCEX int     mvwinstr(WINDOW *, int, int, char *);
1433 PDCEX int     mvwin(WINDOW *, int, int);
1434 PDCEX int     mvwprintw(WINDOW *, int, int, const char *, ...);
1435 PDCEX int     mvwscanw(WINDOW *, int, int, const char *, ...);
1436 PDCEX int     mvwvline(WINDOW *, int, int, chtype, int);
1437 PDCEX int     napms(int);
1438 PDCEX WINDOW *newpad(int, int);
1439 PDCEX SCREEN *newterm(const char *, FILE *, FILE *);
1440 PDCEX WINDOW *newwin(int, int, int, int);
1441 PDCEX int     nl(void);
1442 PDCEX int     nocbreak(void);
1443 PDCEX int     nodelay(WINDOW *, bool);
1444 PDCEX int     noecho(void);
1445 PDCEX int     nonl(void);
1446 PDCEX void    noqiflush(void);
1447 PDCEX int     noraw(void);
1448 PDCEX int     notimeout(WINDOW *, bool);
1449 PDCEX int     overlay(const WINDOW *, WINDOW *);
1450 PDCEX int     overwrite(const WINDOW *, WINDOW *);
1451 PDCEX int     pair_content(short, short *, short *);
1452 PDCEX int     pechochar(WINDOW *, chtype);
1453 PDCEX int     pnoutrefresh(WINDOW *, int, int, int, int, int, int);
1454 PDCEX int     prefresh(WINDOW *, int, int, int, int, int, int);
1455 PDCEX int     printw(const char *, ...);
1456 PDCEX int     putwin(WINDOW *, FILE *);
1457 PDCEX void    qiflush(void);
1458 PDCEX int     raw(void);
1459 PDCEX int     redrawwin(WINDOW *);
1460 PDCEX int     refresh(void);
1461 PDCEX int     reset_prog_mode(void);
1462 PDCEX int     reset_shell_mode(void);
1463 PDCEX int     resetty(void);
1464 PDCEX int     ripoffline(int, int (*)(WINDOW *, int));
1465 PDCEX int     savetty(void);
1466 PDCEX int     scanw(const char *, ...);
1467 PDCEX int     scr_dump(const char *);
1468 PDCEX int     scr_init(const char *);
1469 PDCEX int     scr_restore(const char *);
1470 PDCEX int     scr_set(const char *);
1471 PDCEX int     scrl(int);
1472 PDCEX int     scroll(WINDOW *);
1473 PDCEX int     scrollok(WINDOW *, bool);
1474 PDCEX SCREEN *set_term(SCREEN *);
1475 PDCEX int     setscrreg(int, int);
1476 PDCEX int     slk_attroff(const chtype);
1477 PDCEX int     slk_attr_off(const attr_t, void *);
1478 PDCEX int     slk_attron(const chtype);
1479 PDCEX int     slk_attr_on(const attr_t, void *);
1480 PDCEX int     slk_attrset(const chtype);
1481 PDCEX int     slk_attr_set(const attr_t, short, void *);
1482 PDCEX int     slk_clear(void);
1483 PDCEX int     slk_color(short);
1484 PDCEX int     slk_init(int);
1485 PDCEX char   *slk_label(int);
1486 PDCEX int     slk_noutrefresh(void);
1487 PDCEX int     slk_refresh(void);
1488 PDCEX int     slk_restore(void);
1489 PDCEX int     slk_set(int, const char *, int);
1490 PDCEX int     slk_touch(void);
1491 PDCEX int     standend(void);
1492 PDCEX int     standout(void);
1493 PDCEX int     start_color(void);
1494 PDCEX WINDOW *subpad(WINDOW *, int, int, int, int);
1495 PDCEX WINDOW *subwin(WINDOW *, int, int, int, int);
1496 PDCEX int     syncok(WINDOW *, bool);
1497 PDCEX chtype  termattrs(void);
1498 PDCEX attr_t  term_attrs(void);
1499 PDCEX char   *termname(void);
1500 PDCEX void    timeout(int);
1501 PDCEX int     touchline(WINDOW *, int, int);
1502 PDCEX int     touchwin(WINDOW *);
1503 PDCEX int     typeahead(int);
1504 PDCEX int     untouchwin(WINDOW *);
1505 PDCEX void    use_env(bool);
1506 PDCEX int     vidattr(chtype);
1507 PDCEX int     vid_attr(attr_t, short, void *);
1508 PDCEX int     vidputs(chtype, int (*)(int));
1509 PDCEX int     vid_puts(attr_t, short, void *, int (*)(int));
1510 PDCEX int     vline(chtype, int);
1511 PDCEX int     vw_printw(WINDOW *, const char *, va_list);
1512 PDCEX int     vwprintw(WINDOW *, const char *, va_list);
1513 PDCEX int     vw_scanw(WINDOW *, const char *, va_list);
1514 PDCEX int     vwscanw(WINDOW *, const char *, va_list);
1515 PDCEX int     waddchnstr(WINDOW *, const chtype *, int);
1516 PDCEX int     waddchstr(WINDOW *, const chtype *);
1517 PDCEX int     waddch(WINDOW *, const chtype);
1518 PDCEX int     waddnstr(WINDOW *, const char *, int);
1519 PDCEX int     waddstr(WINDOW *, const char *);
1520 PDCEX int     wattroff(WINDOW *, chtype);
1521 PDCEX int     wattron(WINDOW *, chtype);
1522 PDCEX int     wattrset(WINDOW *, chtype);
1523 PDCEX int     wattr_get(WINDOW *, attr_t *, short *, void *);
1524 PDCEX int     wattr_off(WINDOW *, attr_t, void *);
1525 PDCEX int     wattr_on(WINDOW *, attr_t, void *);
1526 PDCEX int     wattr_set(WINDOW *, attr_t, short, void *);
1527 PDCEX void    wbkgdset(WINDOW *, chtype);
1528 PDCEX int     wbkgd(WINDOW *, chtype);
1529 PDCEX int     wborder(WINDOW *, chtype, chtype, chtype, chtype,
1530                        chtype, chtype, chtype, chtype);
1531 PDCEX int     wchgat(WINDOW *, int, attr_t, short, const void *);
1532 PDCEX int     wclear(WINDOW *);
1533 PDCEX int     wclrtobot(WINDOW *);
1534 PDCEX int     wclrtoeol(WINDOW *);
1535 PDCEX int     wcolor_set(WINDOW *, short, void *);
1536 PDCEX void    wcursyncup(WINDOW *);
1537 PDCEX int     wdelch(WINDOW *);
1538 PDCEX int     wdeleteln(WINDOW *);
1539 PDCEX int     wechochar(WINDOW *, const chtype);
1540 PDCEX int     werase(WINDOW *);
1541 PDCEX int     wgetch(WINDOW *);
1542 PDCEX int     wgetnstr(WINDOW *, char *, int);
1543 PDCEX int     wgetstr(WINDOW *, char *);
1544 PDCEX int     whline(WINDOW *, chtype, int);
1545 PDCEX int     winchnstr(WINDOW *, chtype *, int);
1546 PDCEX int     winchstr(WINDOW *, chtype *);
1547 PDCEX chtype  winch(WINDOW *);
1548 PDCEX int     winnstr(WINDOW *, char *, int);
1549 PDCEX int     winsch(WINDOW *, chtype);
1550 PDCEX int     winsdelln(WINDOW *, int);
1551 PDCEX int     winsertln(WINDOW *);
1552 PDCEX int     winsnstr(WINDOW *, const char *, int);
1553 PDCEX int     winsstr(WINDOW *, const char *);
1554 PDCEX int     winstr(WINDOW *, char *);
1555 PDCEX int     wmove(WINDOW *, int, int);
1556 PDCEX int     wnoutrefresh(WINDOW *);
1557 PDCEX int     wprintw(WINDOW *, const char *, ...);
1558 PDCEX int     wredrawln(WINDOW *, int, int);
1559 PDCEX int     wrefresh(WINDOW *);
1560 PDCEX int     wscanw(WINDOW *, const char *, ...);
1561 PDCEX int     wscrl(WINDOW *, int);
1562 PDCEX int     wsetscrreg(WINDOW *, int, int);
1563 PDCEX int     wstandend(WINDOW *);
1564 PDCEX int     wstandout(WINDOW *);
1565 PDCEX void    wsyncdown(WINDOW *);
1566 PDCEX void    wsyncup(WINDOW *);
1567 PDCEX void    wtimeout(WINDOW *, int);
1568 PDCEX int     wtouchln(WINDOW *, int, int, int);
1569 PDCEX int     wvline(WINDOW *, chtype, int);
1570 
1571 /* Wide-character functions */
1572 
1573 #ifdef PDC_WIDE
1574 PDCEX int     addnwstr(const wchar_t *, int);
1575 PDCEX int     addwstr(const wchar_t *);
1576 PDCEX int     add_wch(const cchar_t *);
1577 PDCEX int     add_wchnstr(const cchar_t *, int);
1578 PDCEX int     add_wchstr(const cchar_t *);
1579 PDCEX int     border_set(const cchar_t *, const cchar_t *, const cchar_t *,
1580                    const cchar_t *, const cchar_t *, const cchar_t *,
1581                    const cchar_t *, const cchar_t *);
1582 PDCEX int     box_set(WINDOW *, const cchar_t *, const cchar_t *);
1583 PDCEX int     echo_wchar(const cchar_t *);
1584 PDCEX int     erasewchar(wchar_t *);
1585 PDCEX int     getbkgrnd(cchar_t *);
1586 PDCEX int     getcchar(const cchar_t *, wchar_t *, attr_t *, short *, void *);
1587 PDCEX int     getn_wstr(wint_t *, int);
1588 PDCEX int     get_wch(wint_t *);
1589 PDCEX int     get_wstr(wint_t *);
1590 PDCEX int     hline_set(const cchar_t *, int);
1591 PDCEX int     innwstr(wchar_t *, int);
1592 PDCEX int     ins_nwstr(const wchar_t *, int);
1593 PDCEX int     ins_wch(const cchar_t *);
1594 PDCEX int     ins_wstr(const wchar_t *);
1595 PDCEX int     inwstr(wchar_t *);
1596 PDCEX int     in_wch(cchar_t *);
1597 PDCEX int     in_wchnstr(cchar_t *, int);
1598 PDCEX int     in_wchstr(cchar_t *);
1599 PDCEX char   *key_name(wchar_t);
1600 PDCEX int     killwchar(wchar_t *);
1601 PDCEX int     mvaddnwstr(int, int, const wchar_t *, int);
1602 PDCEX int     mvaddwstr(int, int, const wchar_t *);
1603 PDCEX int     mvadd_wch(int, int, const cchar_t *);
1604 PDCEX int     mvadd_wchnstr(int, int, const cchar_t *, int);
1605 PDCEX int     mvadd_wchstr(int, int, const cchar_t *);
1606 PDCEX int     mvgetn_wstr(int, int, wint_t *, int);
1607 PDCEX int     mvget_wch(int, int, wint_t *);
1608 PDCEX int     mvget_wstr(int, int, wint_t *);
1609 PDCEX int     mvhline_set(int, int, const cchar_t *, int);
1610 PDCEX int     mvinnwstr(int, int, wchar_t *, int);
1611 PDCEX int     mvins_nwstr(int, int, const wchar_t *, int);
1612 PDCEX int     mvins_wch(int, int, const cchar_t *);
1613 PDCEX int     mvins_wstr(int, int, const wchar_t *);
1614 PDCEX int     mvinwstr(int, int, wchar_t *);
1615 PDCEX int     mvin_wch(int, int, cchar_t *);
1616 PDCEX int     mvin_wchnstr(int, int, cchar_t *, int);
1617 PDCEX int     mvin_wchstr(int, int, cchar_t *);
1618 PDCEX int     mvvline_set(int, int, const cchar_t *, int);
1619 PDCEX int     mvwaddnwstr(WINDOW *, int, int, const wchar_t *, int);
1620 PDCEX int     mvwaddwstr(WINDOW *, int, int, const wchar_t *);
1621 PDCEX int     mvwadd_wch(WINDOW *, int, int, const cchar_t *);
1622 PDCEX int     mvwadd_wchnstr(WINDOW *, int, int, const cchar_t *, int);
1623 PDCEX int     mvwadd_wchstr(WINDOW *, int, int, const cchar_t *);
1624 PDCEX int     mvwgetn_wstr(WINDOW *, int, int, wint_t *, int);
1625 PDCEX int     mvwget_wch(WINDOW *, int, int, wint_t *);
1626 PDCEX int     mvwget_wstr(WINDOW *, int, int, wint_t *);
1627 PDCEX int     mvwhline_set(WINDOW *, int, int, const cchar_t *, int);
1628 PDCEX int     mvwinnwstr(WINDOW *, int, int, wchar_t *, int);
1629 PDCEX int     mvwins_nwstr(WINDOW *, int, int, const wchar_t *, int);
1630 PDCEX int     mvwins_wch(WINDOW *, int, int, const cchar_t *);
1631 PDCEX int     mvwins_wstr(WINDOW *, int, int, const wchar_t *);
1632 PDCEX int     mvwin_wch(WINDOW *, int, int, cchar_t *);
1633 PDCEX int     mvwin_wchnstr(WINDOW *, int, int, cchar_t *, int);
1634 PDCEX int     mvwin_wchstr(WINDOW *, int, int, cchar_t *);
1635 PDCEX int     mvwinwstr(WINDOW *, int, int, wchar_t *);
1636 PDCEX int     mvwvline_set(WINDOW *, int, int, const cchar_t *, int);
1637 PDCEX int     pecho_wchar(WINDOW *, const cchar_t*);
1638 PDCEX int     setcchar(cchar_t*, const wchar_t*, const attr_t, short, const void*);
1639 PDCEX int     slk_wset(int, const wchar_t *, int);
1640 PDCEX int     unget_wch(const wchar_t);
1641 PDCEX int     vline_set(const cchar_t *, int);
1642 PDCEX int     waddnwstr(WINDOW *, const wchar_t *, int);
1643 PDCEX int     waddwstr(WINDOW *, const wchar_t *);
1644 PDCEX int     wadd_wch(WINDOW *, const cchar_t *);
1645 PDCEX int     wadd_wchnstr(WINDOW *, const cchar_t *, int);
1646 PDCEX int     wadd_wchstr(WINDOW *, const cchar_t *);
1647 PDCEX int     wbkgrnd(WINDOW *, const cchar_t *);
1648 PDCEX void    wbkgrndset(WINDOW *, const cchar_t *);
1649 PDCEX int     wborder_set(WINDOW *, const cchar_t *, const cchar_t *,
1650                      const cchar_t *, const cchar_t *, const cchar_t *,
1651                      const cchar_t *, const cchar_t *, const cchar_t *);
1652 PDCEX int     wecho_wchar(WINDOW *, const cchar_t *);
1653 PDCEX int     wgetbkgrnd(WINDOW *, cchar_t *);
1654 PDCEX int     wgetn_wstr(WINDOW *, wint_t *, int);
1655 PDCEX int     wget_wch(WINDOW *, wint_t *);
1656 PDCEX int     wget_wstr(WINDOW *, wint_t *);
1657 PDCEX int     whline_set(WINDOW *, const cchar_t *, int);
1658 PDCEX int     winnwstr(WINDOW *, wchar_t *, int);
1659 PDCEX int     wins_nwstr(WINDOW *, const wchar_t *, int);
1660 PDCEX int     wins_wch(WINDOW *, const cchar_t *);
1661 PDCEX int     wins_wstr(WINDOW *, const wchar_t *);
1662 PDCEX int     winwstr(WINDOW *, wchar_t *);
1663 PDCEX int     win_wch(WINDOW *, cchar_t *);
1664 PDCEX int     win_wchnstr(WINDOW *, cchar_t *, int);
1665 PDCEX int     win_wchstr(WINDOW *, cchar_t *);
1666 PDCEX wchar_t *wunctrl(cchar_t *);
1667 PDCEX int     wvline_set(WINDOW *, const cchar_t *, int);
1668 #endif
1669 
1670 /* Quasi-standard */
1671 
1672 PDCEX chtype  getattrs(WINDOW *);
1673 PDCEX int     getbegx(WINDOW *);
1674 PDCEX int     getbegy(WINDOW *);
1675 PDCEX int     getmaxx(WINDOW *);
1676 PDCEX int     getmaxy(WINDOW *);
1677 PDCEX int     getparx(WINDOW *);
1678 PDCEX int     getpary(WINDOW *);
1679 PDCEX int     getcurx(WINDOW *);
1680 PDCEX int     getcury(WINDOW *);
1681 PDCEX void    traceoff(void);
1682 PDCEX void    traceon(void);
1683 PDCEX char   *unctrl(chtype);
1684 
1685 PDCEX int     crmode(void);
1686 PDCEX int     nocrmode(void);
1687 PDCEX int     draino(int);
1688 PDCEX int     resetterm(void);
1689 PDCEX int     fixterm(void);
1690 PDCEX int     saveterm(void);
1691 PDCEX int     setsyx(int, int);
1692 
1693 PDCEX int     mouse_set(unsigned long);
1694 PDCEX int     mouse_on(unsigned long);
1695 PDCEX int     mouse_off(unsigned long);
1696 PDCEX int     request_mouse_pos(void);
1697 PDCEX int     map_button(unsigned long);
1698 PDCEX void    wmouse_position(WINDOW *, int *, int *);
1699 PDCEX unsigned long getmouse(void);
1700 PDCEX unsigned long getbmap(void);
1701 
1702 /* ncurses */
1703 
1704 PDCEX int     assume_default_colors(int, int);
1705 PDCEX const char *curses_version(void);
1706 PDCEX bool    has_key(int);
1707 PDCEX int     use_default_colors(void);
1708 PDCEX int     wresize(WINDOW *, int, int);
1709 
1710 PDCEX int     mouseinterval(int);
1711 PDCEX mmask_t mousemask(mmask_t, mmask_t *);
1712 PDCEX bool    mouse_trafo(int *, int *, bool);
1713 PDCEX int     nc_getmouse(MEVENT *);
1714 PDCEX int     ungetmouse(MEVENT *);
1715 PDCEX bool    wenclose(const WINDOW *, int, int);
1716 PDCEX bool    wmouse_trafo(const WINDOW *, int *, int *, bool);
1717 
1718 /* PDCurses */
1719 
1720 PDCEX int     addrawch(chtype);
1721 PDCEX int     insrawch(chtype);
1722 PDCEX bool    is_termresized(void);
1723 PDCEX int     mvaddrawch(int, int, chtype);
1724 PDCEX int     mvdeleteln(int, int);
1725 PDCEX int     mvinsertln(int, int);
1726 PDCEX int     mvinsrawch(int, int, chtype);
1727 PDCEX int     mvwaddrawch(WINDOW *, int, int, chtype);
1728 PDCEX int     mvwdeleteln(WINDOW *, int, int);
1729 PDCEX int     mvwinsertln(WINDOW *, int, int);
1730 PDCEX int     mvwinsrawch(WINDOW *, int, int, chtype);
1731 PDCEX int     raw_output(bool);
1732 PDCEX int     resize_term(int, int);
1733 PDCEX WINDOW *resize_window(WINDOW *, int, int);
1734 PDCEX int     waddrawch(WINDOW *, chtype);
1735 PDCEX int     winsrawch(WINDOW *, chtype);
1736 PDCEX char    wordchar(void);
1737 
1738 #ifdef PDC_WIDE
1739 PDCEX wchar_t *slk_wlabel(int);
1740 #endif
1741 
1742 PDCEX void    PDC_debug(const char *, ...);
1743 PDCEX int     PDC_ungetch(int);
1744 PDCEX int     PDC_set_blink(bool);
1745 PDCEX int     PDC_set_line_color(short);
1746 PDCEX void    PDC_set_title(const char *);
1747 
1748 PDCEX int     PDC_clearclipboard(void);
1749 PDCEX int     PDC_freeclipboard(char *);
1750 PDCEX int     PDC_getclipboard(char **, long *);
1751 PDCEX int     PDC_setclipboard(const char *, long);
1752 
1753 PDCEX unsigned long PDC_get_input_fd(void);
1754 PDCEX unsigned long PDC_get_key_modifiers(void);
1755 PDCEX int     PDC_return_key_modifiers(bool);
1756 PDCEX int     PDC_save_key_modifiers(bool);
1757 PDCEX void    PDC_set_resize_limits( const int new_min_lines,
1758                                const int new_max_lines,
1759                                const int new_min_cols,
1760                                const int new_max_cols);
1761 
1762 #define FUNCTION_KEY_SHUT_DOWN        0
1763 #define FUNCTION_KEY_PASTE            1
1764 #define FUNCTION_KEY_ENLARGE_FONT     2
1765 #define FUNCTION_KEY_SHRINK_FONT      3
1766 #define FUNCTION_KEY_CHOOSE_FONT      4
1767 #define FUNCTION_KEY_ABORT            5
1768 #define PDC_MAX_FUNCTION_KEYS         6
1769 
1770 PDCEX int     PDC_set_function_key( const unsigned function,
1771                               const int new_key);
1772 
1773 PDCEX WINDOW *Xinitscr(int, char **);
1774 #ifdef XCURSES
1775 void    XCursesExit(void);
1776 int     sb_init(void);
1777 int     sb_set_horz(int, int, int);
1778 int     sb_set_vert(int, int, int);
1779 int     sb_get_horz(int *, int *, int *);
1780 int     sb_get_vert(int *, int *, int *);
1781 int     sb_refresh(void);
1782 #endif
1783 
1784 /*** Functions defined as macros ***/
1785 
1786 /* getch() and ungetch() conflict with some DOS libraries */
1787 
1788 #define getch()            wgetch(stdscr)
1789 #define ungetch(ch)        PDC_ungetch(ch)
1790 
1791 #define COLOR_PAIR(n)      (((chtype)(n) << PDC_COLOR_SHIFT) & A_COLOR)
1792 #define PAIR_NUMBER(n)     ((((n) & A_COLOR) >> PDC_COLOR_SHIFT) & 0xff)
1793 
1794 /* These will _only_ work as macros */
1795 
1796 #define getbegyx(w, y, x)  (y = getbegy(w), x = getbegx(w))
1797 #define getmaxyx(w, y, x)  (y = getmaxy(w), x = getmaxx(w))
1798 #define getparyx(w, y, x)  (y = getpary(w), x = getparx(w))
1799 #define getyx(w, y, x)     (y = getcury(w), x = getcurx(w))
1800 
1801 #define getsyx(y, x)       { if (curscr->_leaveit) (y)=(x)=-1; \
1802                              else getyx(curscr,(y),(x)); }
1803 
1804 #ifdef NCURSES_MOUSE_VERSION
1805 # define getmouse(x) nc_getmouse(x)
1806 #endif
1807 
1808 /* return codes from PDC_getclipboard() and PDC_setclipboard() calls */
1809 
1810 #define PDC_CLIP_SUCCESS         0
1811 #define PDC_CLIP_ACCESS_ERROR    1
1812 #define PDC_CLIP_EMPTY           2
1813 #define PDC_CLIP_MEMORY_ERROR    3
1814 
1815 /* PDCurses key modifier masks */
1816 
1817 #define PDC_KEY_MODIFIER_SHIFT   1
1818 #define PDC_KEY_MODIFIER_CONTROL 2
1819 #define PDC_KEY_MODIFIER_ALT     4
1820 #define PDC_KEY_MODIFIER_NUMLOCK 8
1821 
1822 #if defined(__cplusplus) || defined(__cplusplus__) || defined(__CPLUSPLUS)
1823 # undef bool
1824 }
1825 #endif
1826 
1827 #endif  /* __PDCURSES__ */
1828