wmcbrine / PDCurses

A curses library for environments that don't fit the termcap/terminfo model.
https://pdcurses.org/
1.03k stars 171 forks source link

printw.c - for Unicode? #160

Closed waltje closed 9 months ago

waltje commented 9 months ago

Hi:

Is it me, or are there no 'w' variants for the printw() series of functions?

I have a Unicode (wide-char) mode application that wants to write wchart strings to the screen, using vw[]printw, but that of course won't work; the strings will eventually be sent to the regular, narrow-character functions (waddch et al.)

Shouldn't there be a wprintw.c module that handles these?

Just checking before I dive in too deep...

wmcbrine commented 9 months ago

Interesting. Well, it wouldn't be wprintw() -- that already exists, but it means window-printw() -- but I get what you mean. It seems this is a gap in the X/Open Curses standard.

You could use swprintf() to format the string to a buffer, and then addwstr() to render that to curses.

waltje commented 9 months ago

I cloned the printw.c module into a printww.c module, added defs to curses.h and this works as expected. so, all these are like    printww()   wprintww() etc, because of confusion that would ensue if I'd use wprintw() :P I can do a PR so you can see what I did.  It's in my local version of PDCurses for now, but I may simplymerge that code into my application.

You could use swprintf() to format the string to a buffer, and then addwstr() to render that to curses.That is what I did initially, just to see if the wchar_t's were even working.

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

/ PDCurses /

include

/*man-start**

printww

Synopsis

int printww(const wchar_t *fmt, ...);
int wprintww(WINDOW *win, const wchar_t *fmt, ...);
int mvprintww(int y, int x, const wchar_t *fmt, ...);
int mvwprintww(WINDOW *win, int y, int x, const wchar_t *fmt,...);
int vwprintww(WINDOW *win, const wchar_t *fmt, va_list varglist);
int vw_printww(WINDOW *win, const wchar_t *fmt, va_list varglist);

Description

The printww() functions add a formatted string to the window at the current or specified cursor position. The format strings are the same as used in the standard C library's printf(). (printw() can be used as a drop-in replacement for printf().)

The duplication between vwprintww() and vw_printww() is for historic reasons. In PDCurses, they're the same.

Return Value

All functions return the number of characters printed, or ERR on error.

Portability

                         X/Open  ncurses  NetBSD
printww                     ?       ?       ?
wprintww                    ?       ?       ?
mvprintww                   ?       ?       ?
mvwprintww                  ?       ?       ?
vwprintww                   ?       ?       ?
vw_printww                  ?       ?       ?

man-end**/

include

int vwprintww(WINDOW win, const wchar_t fmt, va_list varglist) { wchar_t printbuf[513]; int len;

PDC_LOG(("vwprintww() - called\n"));

len = vswprintf(printbuf, 512, fmt, varglist);

return (waddwstr(win, printbuf) == ERR) ? ERR : len;

}

int printww(const wchar_t *fmt, ...) { va_list args; int retval;

PDC_LOG(("printww() - called\n"));

va_start(args, fmt);
retval = vwprintww(stdscr, fmt, args);
va_end(args);

return retval;

}

int wprintww(WINDOW win, const wchar_t fmt, ...) { va_list args; int retval;

PDC_LOG(("wprintww() - called\n"));

va_start(args, fmt);
retval = vwprintww(win, fmt, args);
va_end(args);

return retval;

}

int mvprintww(int y, int x, const wchar_t *fmt, ...) { va_list args; int retval;

PDC_LOG(("mvprintww() - called\n"));

if (move(y, x) == ERR)
    return ERR;

va_start(args, fmt);
retval = vwprintww(stdscr, fmt, args);
va_end(args);

return retval;

}

int mvwprintww(WINDOW win, int y, int x, const wchar_t fmt, ...) { va_list args; int retval;

PDC_LOG(("mvwprintww() - called\n"));

if (wmove(win, y, x) == ERR)
    return ERR;

va_start(args, fmt);
retval = vwprintww(win, fmt, args);
va_end(args);

return retval;

}

int vw_wprintw(WINDOW win, const wchar_t fmt, va_list varglist) { PDC_LOG(("vw_wprintw() - called\n"));

return vwprintww(win, fmt, varglist);

}

/----------------------------------------------------------------------

ifndef PDCURSES

define PDCURSES 1

/*man-start**

Define before inclusion (only those needed):

XCURSES         if building / built for X11
PDC_RGB         if you want to use RGB color definitions
                (Red = 1, Green = 2, Blue = 4) instead of BGR
PDC_WIDE        if building / built with wide-character support
PDC_DLL_BUILD   if building / built as a Windows DLL
PDC_NCMOUSE     to use the ncurses mouse API instead
                of PDCurses' traditional mouse API

Defined by this header:

PDCURSES        PDCurses-only features are available
PDC_BUILD       API build version
PDC_VER_MAJOR   major version number
PDC_VER_MINOR   minor version number
PDC_VERDOT      version string

man-end**/

define PDCURSES 1

define PDC_BUILD 3907

define PDC_VER_MAJOR 3

define PDC_VER_MINOR 9

define PDC_VERDOT "3.9"

define CHTYPE_LONG 1 / chtype >= 32 bits /

if defined(STDC_VERSION) && STDC_VERSION >= 199901L

define PDC_99 1

endif

if defined(cplusplus) && cplusplus >= 199711L

define PDC_PP98 1

endif

/----------------------------------------------------------------------/

include

include

include

ifdef PDC_WIDE

include

endif

if defined(PDC_99) && !defined(__bool_true_false_are_defined)

include

endif

ifdef __cplusplus

extern "C" {

ifndef PDC_PP98

define bool _bool

endif

endif

/----------------------------------------------------------------------

undef FALSE

define FALSE 0

undef TRUE

define TRUE 1

undef ERR

define ERR (-1)

undef OK

define OK 0

if !defined(PDC_PP98) && !defined(__bool_true_false_are_defined)

typedef unsigned char bool;

endif

if _LP64

typedef unsigned int chtype;

else

typedef unsigned long chtype; / 16-bit attr + 16-bit char /

endif

ifdef PDC_WIDE

typedef chtype cchar_t;

endif

typedef chtype attr_t;

/----------------------------------------------------------------------

/ Use this structure with PDC_get_version() for run-time info about the way the library was built, in case it doesn't match the header. /

typedef struct { short flags; / flags OR'd together (see below) / short build; / PDC_BUILD at compile time / unsigned char major; / PDC_VER_MAJOR / unsigned char minor; / PDC_VER_MINOR / unsigned char csize; / sizeof chtype / unsigned char bsize; / sizeof bool / } PDC_VERSION;

enum { PDC_VFLAG_DEBUG = 1, / set if built with -DPDCDEBUG / PDC_VFLAG_WIDE = 2, / -DPDC_WIDE / PDC_VFLAG_UTF8 = 4, / -DPDC_FORCE_UTF8 / PDC_VFLAG_DLL = 8, / -DPDC_DLL_BUILD / PDC_VFLAG_RGB = 16 / -DPDC_RGB / };

/----------------------------------------------------------------------

if _LP64

typedef unsigned int mmask_t;

else

typedef unsigned long mmask_t;

endif

typedef struct { int x; / absolute column, 0 based, measured in characters / int y; / absolute row, 0 based, measured in characters / short button[3]; / state of each button / int changes; / flags indicating what has changed with the mouse / } MOUSE_STATUS;

define BUTTON_RELEASED 0x0000

define BUTTON_PRESSED 0x0001

define BUTTON_CLICKED 0x0002

define BUTTON_DOUBLE_CLICKED 0x0003

define BUTTON_TRIPLE_CLICKED 0x0004

define BUTTON_MOVED 0x0005 / PDCurses /

define WHEEL_SCROLLED 0x0006 / PDCurses /

define BUTTON_ACTION_MASK 0x0007 / PDCurses /

define PDC_BUTTON_SHIFT 0x0008 / PDCurses /

define PDC_BUTTON_CONTROL 0x0010 / PDCurses /

define PDC_BUTTON_ALT 0x0020 / PDCurses /

define BUTTON_MODIFIER_MASK 0x0038 / PDCurses /

define MOUSE_X_POS (Mouse_status.x)

define MOUSE_Y_POS (Mouse_status.y)

/*

define PDC_MOUSE_MOVED 0x0008

define PDC_MOUSE_POSITION 0x0010

define PDC_MOUSE_WHEEL_UP 0x0020

define PDC_MOUSE_WHEEL_DOWN 0x0040

define PDC_MOUSE_WHEEL_LEFT 0x0080

define PDC_MOUSE_WHEEL_RIGHT 0x0100

define A_BUTTON_CHANGED (Mouse_status.changes & 7)

define MOUSE_MOVED (Mouse_status.changes & PDC_MOUSE_MOVED)

define MOUSE_POS_REPORT (Mouse_status.changes & PDC_MOUSE_POSITION)

define BUTTON_CHANGED(x) (Mouse_status.changes & (1 << ((x) - 1)))

define BUTTON_STATUS(x) (Mouse_status.button[(x) - 1])

define MOUSE_WHEEL_UP (Mouse_status.changes & PDC_MOUSE_WHEEL_UP)

define MOUSE_WHEEL_DOWN (Mouse_status.changes & PDC_MOUSE_WHEEL_DOWN)

define MOUSE_WHEEL_LEFT (Mouse_status.changes & PDC_MOUSE_WHEEL_LEFT)

define MOUSE_WHEEL_RIGHT (Mouse_status.changes & PDC_MOUSE_WHEEL_RIGHT)

/ mouse bit-masks /

define BUTTON1_RELEASED 0x00000001L

define BUTTON1_PRESSED 0x00000002L

define BUTTON1_CLICKED 0x00000004L

define BUTTON1_DOUBLE_CLICKED 0x00000008L

define BUTTON1_TRIPLE_CLICKED 0x00000010L

define BUTTON1_MOVED 0x00000010L / PDCurses /

define BUTTON2_RELEASED 0x00000020L

define BUTTON2_PRESSED 0x00000040L

define BUTTON2_CLICKED 0x00000080L

define BUTTON2_DOUBLE_CLICKED 0x00000100L

define BUTTON2_TRIPLE_CLICKED 0x00000200L

define BUTTON2_MOVED 0x00000200L / PDCurses /

define BUTTON3_RELEASED 0x00000400L

define BUTTON3_PRESSED 0x00000800L

define BUTTON3_CLICKED 0x00001000L

define BUTTON3_DOUBLE_CLICKED 0x00002000L

define BUTTON3_TRIPLE_CLICKED 0x00004000L

define BUTTON3_MOVED 0x00004000L / PDCurses /

/ For the ncurses-compatible functions only, BUTTON4_PRESSED and BUTTON5_PRESSED are returned for mouse scroll wheel up and down; otherwise PDCurses doesn't support buttons 4 and 5 /

define BUTTON4_RELEASED 0x00008000L

define BUTTON4_PRESSED 0x00010000L

define BUTTON4_CLICKED 0x00020000L

define BUTTON4_DOUBLE_CLICKED 0x00040000L

define BUTTON4_TRIPLE_CLICKED 0x00080000L

define BUTTON5_RELEASED 0x00100000L

define BUTTON5_PRESSED 0x00200000L

define BUTTON5_CLICKED 0x00400000L

define BUTTON5_DOUBLE_CLICKED 0x00800000L

define BUTTON5_TRIPLE_CLICKED 0x01000000L

define MOUSE_WHEEL_SCROLL 0x02000000L / PDCurses /

define BUTTON_MODIFIER_SHIFT 0x04000000L / PDCurses /

define BUTTON_MODIFIER_CONTROL 0x08000000L / PDCurses /

define BUTTON_MODIFIER_ALT 0x10000000L / PDCurses /

define ALL_MOUSE_EVENTS 0x1fffffffL

define REPORT_MOUSE_POSITION 0x20000000L

/ ncurses mouse interface /

typedef struct { short id; / unused, always 0 / int x, y, z; / x, y same as MOUSE_STATUS; z unused / mmask_t bstate; / equivalent to changes + button[], but in the same format as used for mousemask() / } MEVENT;

if defined(PDC_NCMOUSE) && !defined(NCURSES_MOUSE_VERSION)

define NCURSES_MOUSE_VERSION 2

endif

ifdef NCURSES_MOUSE_VERSION

define BUTTON_SHIFT BUTTON_MODIFIER_SHIFT

define BUTTON_CONTROL BUTTON_MODIFIER_CONTROL

define BUTTON_CTRL BUTTON_MODIFIER_CONTROL

define BUTTON_ALT BUTTON_MODIFIER_ALT

else

define BUTTON_SHIFT PDC_BUTTON_SHIFT

define BUTTON_CONTROL PDC_BUTTON_CONTROL

define BUTTON_ALT PDC_BUTTON_ALT

endif

/----------------------------------------------------------------------

typedef struct _win / definition of a window / { int _cury; / current pseudo-cursor / int _curx; int _maxy; / max window coordinates / int _maxx; int _begy; / origin on screen / int _begx; int _flags; / window properties / chtype _attrs; / standard attributes and colors / chtype _bkgd; / background, normally blank / bool _clear; / causes clear at next refresh / bool _leaveit; / leaves cursor where it is / bool _scroll; / allows window scrolling / bool _nodelay; / input character wait flag / bool _immed; / immediate update flag / bool _sync; / synchronize window ancestors / bool _use_keypad; / flags keypad key mode active / chtype *_y; / pointer to line pointer array / int _firstch; / first changed character in line / int _lastch; / last changed character in line / int _tmarg; / top of scrolling region / int _bmarg; / bottom of scrolling region / int _delayms; / milliseconds of delay for getch() / int _parx, _pary; / coords relative to parent (0,0) / struct _win _parent; / subwin's pointer to parent win /

/* these are used only if this is a pad */
struct pdat
{
    int _pad_y;
    int _pad_x;
    int _pad_top;
    int _pad_left;
    int _pad_bottom;
    int _pad_right;
} _pad;               /* Pad-properties structure */

} WINDOW;

/ Color pair structure /

typedef struct { short f; / foreground color / short b; / background color / int count; / allocation order / bool set; / pair has been set / } PDC_PAIR;

/ Avoid using the SCREEN struct directly -- use the corresponding functions if possible. This struct may eventually be made private. /

typedef struct { bool alive; / if initscr() called, and not endwin() / bool autocr; / if cr -> lf / bool cbreak; / if terminal unbuffered / bool echo; / if terminal echo / bool raw_inp; / raw input mode (v. cooked input) / bool raw_out; / raw output mode (7 v. 8 bits) / bool audible; / FALSE if the bell is visual / bool mono; / TRUE if current screen is mono / bool resized; / TRUE if TERM has been resized / bool orig_attr; / TRUE if we have the original colors / short orig_fore; / original screen foreground color / short orig_back; / original screen foreground color / int cursrow; / position of physical cursor / int curscol; / position of physical cursor / int visibility; / visibility of cursor / int orig_cursor; / original cursor size / int lines; / new value for LINES / int cols; / new value for COLS / mmask_t _trap_mbe; / trap these mouse button events / int mouse_wait; / time to wait (in ms) for a button release after a press, in order to count it as a click / int slklines; / lines in use by slk_init() / WINDOW slk_winptr; / window for slk / int linesrippedoff; / lines ripped off via ripoffline() / int linesrippedoffontop; / lines ripped off on top via ripoffline() / int delaytenths; / 1/10ths second to wait block getch() for / bool _preserve; / TRUE if screen background to be preserved / int _restore; / specifies if screen background to be restored, and how / unsigned long key_modifiers; / key modifiers (SHIFT, CONTROL, etc.) on last key press / bool return_key_modifiers; / TRUE if modifier keys are returned as "real" keys / bool key_code; / TRUE if last key is a special key; used internally by get_wch() / MOUSE_STATUS mouse_status; / last returned mouse status / short line_color; / color of line attributes - default -1 / attr_t termattrs; / attribute capabilities / WINDOW lastscr; / the last screen image / FILE dbfp; / debug trace file pointer / bool color_started; / TRUE after start_color() / bool dirty; / redraw on napms() after init_color() / int sel_start; / start of selection (y COLS + x) / int sel_end; / end of selection / int c_buffer; / character buffer / int c_pindex; / putter index / int c_gindex; / getter index / int c_ungch; / array of ungotten chars / int c_ungind; / ungetch() push index / int c_ungmax; / allocated size of ungetch() buffer / PDC_PAIR atrtab; / table of color pairs */ } SCREEN;

/----------------------------------------------------------------------

ifdef PDC_DLL_BUILD

ifdef CURSES_LIBRARY

define PDCEX __declspec(dllexport) extern

else

define PDCEX __declspec(dllimport)

endif

else

define PDCEX extern

endif

PDCEX int LINES; / terminal height / PDCEX int COLS; / terminal width / PDCEX WINDOW stdscr; / the default screen window / PDCEX WINDOW curscr; / the current screen image / PDCEX SCREEN SP; / curses variables / PDCEX MOUSE_STATUS Mouse_status; PDCEX int COLORS; PDCEX int COLOR_PAIRS; PDCEX int TABSIZE; PDCEX chtype acs_map[]; / alternate character set map / PDCEX char ttytype[]; / terminal name/description */

/*man-start**

Text Attributes

PDCurses uses a 32-bit integer for its chtype:

+--------------------------------------------------------------------+
|31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|..| 2| 1| 0|
+--------------------------------------------------------------------+
      color pair        |     modifiers         |   character eg 'a'

There are 256 color pairs (8 bits), 8 bits for modifiers, and 16 bits for character data. The modifiers are bold, underline, right-line, left-line, italic, reverse and blink, plus the alternate character set indicator.

man-end**/

/ Video attribute macros /

define A_NORMAL (chtype)0

define A_ALTCHARSET (chtype)0x00010000

define A_RIGHT (chtype)0x00020000

define A_LEFT (chtype)0x00040000

define A_ITALIC (chtype)0x00080000

define A_UNDERLINE (chtype)0x00100000

define A_REVERSE (chtype)0x00200000

define A_BLINK (chtype)0x00400000

define A_BOLD (chtype)0x00800000

define A_ATTRIBUTES (chtype)0xffff0000

define A_CHARTEXT (chtype)0x0000ffff

define A_COLOR (chtype)0xff000000

define PDC_COLOR_SHIFT 24

define A_LEFTLINE A_LEFT

define A_RIGHTLINE A_RIGHT

define A_STANDOUT (A_REVERSE | A_BOLD) / X/Open /

define A_DIM A_NORMAL

define A_INVIS A_NORMAL

define A_PROTECT A_NORMAL

define A_HORIZONTAL A_NORMAL

define A_LOW A_NORMAL

define A_TOP A_NORMAL

define A_VERTICAL A_NORMAL

define CHR_MSK A_CHARTEXT / Obsolete /

define ATR_MSK A_ATTRIBUTES / Obsolete /

define ATR_NRM A_NORMAL / Obsolete /

/ For use with attr_t -- X/Open says, "these shall be distinct", so this is a non-conforming implementation. /

define WA_NORMAL A_NORMAL

define WA_ALTCHARSET A_ALTCHARSET

define WA_BLINK A_BLINK

define WA_BOLD A_BOLD

define WA_DIM A_DIM

define WA_INVIS A_INVIS

define WA_ITALIC A_ITALIC

define WA_LEFT A_LEFT

define WA_PROTECT A_PROTECT

define WA_REVERSE A_REVERSE

define WA_RIGHT A_RIGHT

define WA_STANDOUT A_STANDOUT

define WA_UNDERLINE A_UNDERLINE

define WA_HORIZONTAL A_HORIZONTAL

define WA_LOW A_LOW

define WA_TOP A_TOP

define WA_VERTICAL A_VERTICAL

define WA_ATTRIBUTES A_ATTRIBUTES

/ Alternate character set macros /

define PDC_ACS(w) ((chtype)w | A_ALTCHARSET)

/ VT100-compatible symbols -- box chars /

define ACS_ULCORNER PDC_ACS('l')

define ACS_LLCORNER PDC_ACS('m')

define ACS_URCORNER PDC_ACS('k')

define ACS_LRCORNER PDC_ACS('j')

define ACS_RTEE PDC_ACS('u')

define ACS_LTEE PDC_ACS('t')

define ACS_BTEE PDC_ACS('v')

define ACS_TTEE PDC_ACS('w')

define ACS_HLINE PDC_ACS('q')

define ACS_VLINE PDC_ACS('x')

define ACS_PLUS PDC_ACS('n')

/ VT100-compatible symbols -- other /

define ACS_S1 PDC_ACS('o')

define ACS_S9 PDC_ACS('s')

define ACS_DIAMOND PDC_ACS('`')

define ACS_CKBOARD PDC_ACS('a')

define ACS_DEGREE PDC_ACS('f')

define ACS_PLMINUS PDC_ACS('g')

define ACS_BULLET PDC_ACS('~')

/ Teletype 5410v1 symbols -- these are defined in SysV curses, but are not well-supported by most terminals. Stick to VT100 characters for optimum portability. /

define ACS_LARROW PDC_ACS(',')

define ACS_RARROW PDC_ACS('+')

define ACS_DARROW PDC_ACS('.')

define ACS_UARROW PDC_ACS('-')

define ACS_BOARD PDC_ACS('h')

define ACS_LANTERN PDC_ACS('i')

define ACS_BLOCK PDC_ACS('0')

/ That goes double for these -- undocumented SysV symbols. Don't use them. /

define ACS_S3 PDC_ACS('p')

define ACS_S7 PDC_ACS('r')

define ACS_LEQUAL PDC_ACS('y')

define ACS_GEQUAL PDC_ACS('z')

define ACS_PI PDC_ACS('{')

define ACS_NEQUAL PDC_ACS('|')

define ACS_STERLING PDC_ACS('}')

/ Box char aliases /

define ACS_BSSB ACS_ULCORNER

define ACS_SSBB ACS_LLCORNER

define ACS_BBSS ACS_URCORNER

define ACS_SBBS ACS_LRCORNER

define ACS_SBSS ACS_RTEE

define ACS_SSSB ACS_LTEE

define ACS_SSBS ACS_BTEE

define ACS_BSSS ACS_TTEE

define ACS_BSBS ACS_HLINE

define ACS_SBSB ACS_VLINE

define ACS_SSSS ACS_PLUS

/ cchar_t aliases /

ifdef PDC_WIDE

define WACS_ULCORNER (&(acs_map['l']))

define WACS_LLCORNER (&(acs_map['m']))

define WACS_URCORNER (&(acs_map['k']))

define WACS_LRCORNER (&(acs_map['j']))

define WACS_RTEE (&(acs_map['u']))

define WACS_LTEE (&(acs_map['t']))

define WACS_BTEE (&(acs_map['v']))

define WACS_TTEE (&(acs_map['w']))

define WACS_HLINE (&(acs_map['q']))

define WACS_VLINE (&(acs_map['x']))

define WACS_PLUS (&(acs_map['n']))

define WACS_S1 (&(acs_map['o']))

define WACS_S9 (&(acs_map['s']))

define WACS_DIAMOND (&(acs_map['`']))

define WACS_CKBOARD (&(acs_map['a']))

define WACS_DEGREE (&(acs_map['f']))

define WACS_PLMINUS (&(acs_map['g']))

define WACS_BULLET (&(acs_map['~']))

define WACS_LARROW (&(acs_map[',']))

define WACS_RARROW (&(acs_map['+']))

define WACS_DARROW (&(acs_map['.']))

define WACS_UARROW (&(acs_map['-']))

define WACS_BOARD (&(acs_map['h']))

define WACS_LANTERN (&(acs_map['i']))

define WACS_BLOCK (&(acs_map['0']))

define WACS_S3 (&(acs_map['p']))

define WACS_S7 (&(acs_map['r']))

define WACS_LEQUAL (&(acs_map['y']))

define WACS_GEQUAL (&(acs_map['z']))

define WACS_PI (&(acs_map['{']))

define WACS_NEQUAL (&(acs_map['|']))

define WACS_STERLING (&(acs_map['}']))

define WACS_BSSB WACS_ULCORNER

define WACS_SSBB WACS_LLCORNER

define WACS_BBSS WACS_URCORNER

define WACS_SBBS WACS_LRCORNER

define WACS_SBSS WACS_RTEE

define WACS_SSSB WACS_LTEE

define WACS_SSBS WACS_BTEE

define WACS_BSSS WACS_TTEE

define WACS_BSBS WACS_HLINE

define WACS_SBSB WACS_VLINE

define WACS_SSSS WACS_PLUS

endif

/ Color macros /

define COLOR_BLACK 0

ifdef PDC_RGB / RGB /

define COLOR_RED 1

define COLOR_GREEN 2

define COLOR_BLUE 4

else / BGR /

define COLOR_BLUE 1

define COLOR_GREEN 2

define COLOR_RED 4

endif

define COLOR_CYAN (COLOR_BLUE | COLOR_GREEN)

define COLOR_MAGENTA (COLOR_RED | COLOR_BLUE)

define COLOR_YELLOW (COLOR_RED | COLOR_GREEN)

define COLOR_WHITE 7

/----------------------------------------------------------------------

define KEY_CODE_YES 0x100 / If get_wch() gives a key code /

define KEY_BREAK 0x101 / Not on PC KBD /

define KEY_DOWN 0x102 / Down arrow key /

define KEY_UP 0x103 / Up arrow key /

define KEY_LEFT 0x104 / Left arrow key /

define KEY_RIGHT 0x105 / Right arrow key /

define KEY_HOME 0x106 / home key /

define KEY_BACKSPACE 0x107 / not on pc /

define KEY_F0 0x108 / function keys; 64 reserved /

define KEY_DL 0x148 / delete line /

define KEY_IL 0x149 / insert line /

define KEY_DC 0x14a / delete character /

define KEY_IC 0x14b / insert char or enter ins mode /

define KEY_EIC 0x14c / exit insert char mode /

define KEY_CLEAR 0x14d / clear screen /

define KEY_EOS 0x14e / clear to end of screen /

define KEY_EOL 0x14f / clear to end of line /

define KEY_SF 0x150 / scroll 1 line forward /

define KEY_SR 0x151 / scroll 1 line back (reverse) /

define KEY_NPAGE 0x152 / next page /

define KEY_PPAGE 0x153 / previous page /

define KEY_STAB 0x154 / set tab /

define KEY_CTAB 0x155 / clear tab /

define KEY_CATAB 0x156 / clear all tabs /

define KEY_ENTER 0x157 / enter or send (unreliable) /

define KEY_SRESET 0x158 / soft/reset (partial/unreliable) /

define KEY_RESET 0x159 / reset/hard reset (unreliable) /

define KEY_PRINT 0x15a / print/copy /

define KEY_LL 0x15b / home down/bottom (lower left) /

define KEY_ABORT 0x15c / abort/terminate key (any) /

define KEY_SHELP 0x15d / short help /

define KEY_LHELP 0x15e / long help /

define KEY_BTAB 0x15f / Back tab key /

define KEY_BEG 0x160 / beg(inning) key /

define KEY_CANCEL 0x161 / cancel key /

define KEY_CLOSE 0x162 / close key /

define KEY_COMMAND 0x163 / cmd (command) key /

define KEY_COPY 0x164 / copy key /

define KEY_CREATE 0x165 / create key /

define KEY_END 0x166 / end key /

define KEY_EXIT 0x167 / exit key /

define KEY_FIND 0x168 / find key /

define KEY_HELP 0x169 / help key /

define KEY_MARK 0x16a / mark key /

define KEY_MESSAGE 0x16b / message key /

define KEY_MOVE 0x16c / move key /

define KEY_NEXT 0x16d / next object key /

define KEY_OPEN 0x16e / open key /

define KEY_OPTIONS 0x16f / options key /

define KEY_PREVIOUS 0x170 / previous object key /

define KEY_REDO 0x171 / redo key /

define KEY_REFERENCE 0x172 / ref(erence) key /

define KEY_REFRESH 0x173 / refresh key /

define KEY_REPLACE 0x174 / replace key /

define KEY_RESTART 0x175 / restart key /

define KEY_RESUME 0x176 / resume key /

define KEY_SAVE 0x177 / save key /

define KEY_SBEG 0x178 / shifted beginning key /

define KEY_SCANCEL 0x179 / shifted cancel key /

define KEY_SCOMMAND 0x17a / shifted command key /

define KEY_SCOPY 0x17b / shifted copy key /

define KEY_SCREATE 0x17c / shifted create key /

define KEY_SDC 0x17d / shifted delete char key /

define KEY_SDL 0x17e / shifted delete line key /

define KEY_SELECT 0x17f / select key /

define KEY_SEND 0x180 / shifted end key /

define KEY_SEOL 0x181 / shifted clear line key /

define KEY_SEXIT 0x182 / shifted exit key /

define KEY_SFIND 0x183 / shifted find key /

define KEY_SHOME 0x184 / shifted home key /

define KEY_SIC 0x185 / shifted input key /

define KEY_SLEFT 0x187 / shifted left arrow key /

define KEY_SMESSAGE 0x188 / shifted message key /

define KEY_SMOVE 0x189 / shifted move key /

define KEY_SNEXT 0x18a / shifted next key /

define KEY_SOPTIONS 0x18b / shifted options key /

define KEY_SPREVIOUS 0x18c / shifted prev key /

define KEY_SPRINT 0x18d / shifted print key /

define KEY_SREDO 0x18e / shifted redo key /

define KEY_SREPLACE 0x18f / shifted replace key /

define KEY_SRIGHT 0x190 / shifted right arrow /

define KEY_SRSUME 0x191 / shifted resume key /

define KEY_SSAVE 0x192 / shifted save key /

define KEY_SSUSPEND 0x193 / shifted suspend key /

define KEY_SUNDO 0x194 / shifted undo key /

define KEY_SUSPEND 0x195 / suspend key /

define KEY_UNDO 0x196 / undo key /

/ PDCurses-specific key definitions -- PC only /

define ALT_0 0x197

define ALT_1 0x198

define ALT_2 0x199

define ALT_3 0x19a

define ALT_4 0x19b

define ALT_5 0x19c

define ALT_6 0x19d

define ALT_7 0x19e

define ALT_8 0x19f

define ALT_9 0x1a0

define ALT_A 0x1a1

define ALT_B 0x1a2

define ALT_C 0x1a3

define ALT_D 0x1a4

define ALT_E 0x1a5

define ALT_F 0x1a6

define ALT_G 0x1a7

define ALT_H 0x1a8

define ALT_I 0x1a9

define ALT_J 0x1aa

define ALT_K 0x1ab

define ALT_L 0x1ac

define ALT_M 0x1ad

define ALT_N 0x1ae

define ALT_O 0x1af

define ALT_P 0x1b0

define ALT_Q 0x1b1

define ALT_R 0x1b2

define ALT_S 0x1b3

define ALT_T 0x1b4

define ALT_U 0x1b5

define ALT_V 0x1b6

define ALT_W 0x1b7

define ALT_X 0x1b8

define ALT_Y 0x1b9

define ALT_Z 0x1ba

define CTL_LEFT 0x1bb / Control-Left-Arrow /

define CTL_RIGHT 0x1bc

define CTL_PGUP 0x1bd

define CTL_PGDN 0x1be

define CTL_HOME 0x1bf

define CTL_END 0x1c0

define KEY_A1 0x1c1 / upper left on Virtual keypad /

define KEY_A2 0x1c2 / upper middle on Virt. keypad /

define KEY_A3 0x1c3 / upper right on Virt. keypad /

define KEY_B1 0x1c4 / middle left on Virt. keypad /

define KEY_B2 0x1c5 / center on Virt. keypad /

define KEY_B3 0x1c6 / middle right on Virt. keypad /

define KEY_C1 0x1c7 / lower left on Virt. keypad /

define KEY_C2 0x1c8 / lower middle on Virt. keypad /

define KEY_C3 0x1c9 / lower right on Virt. keypad /

define PADSLASH 0x1ca / slash on keypad /

define PADENTER 0x1cb / enter on keypad /

define CTL_PADENTER 0x1cc / ctl-enter on keypad /

define ALT_PADENTER 0x1cd / alt-enter on keypad /

define PADSTOP 0x1ce / stop on keypad /

define PADSTAR 0x1cf / star on keypad /

define PADMINUS 0x1d0 / minus on keypad /

define PADPLUS 0x1d1 / plus on keypad /

define CTL_PADSTOP 0x1d2 / ctl-stop on keypad /

define CTL_PADCENTER 0x1d3 / ctl-enter on keypad /

define CTL_PADPLUS 0x1d4 / ctl-plus on keypad /

define CTL_PADMINUS 0x1d5 / ctl-minus on keypad /

define CTL_PADSLASH 0x1d6 / ctl-slash on keypad /

define CTL_PADSTAR 0x1d7 / ctl-star on keypad /

define ALT_PADPLUS 0x1d8 / alt-plus on keypad /

define ALT_PADMINUS 0x1d9 / alt-minus on keypad /

define ALT_PADSLASH 0x1da / alt-slash on keypad /

define ALT_PADSTAR 0x1db / alt-star on keypad /

define ALT_PADSTOP 0x1dc / alt-stop on keypad /

define CTL_INS 0x1dd / ctl-insert /

define ALT_DEL 0x1de / alt-delete /

define ALT_INS 0x1df / alt-insert /

define CTL_UP 0x1e0 / ctl-up arrow /

define CTL_DOWN 0x1e1 / ctl-down arrow /

define CTL_TAB 0x1e2 / ctl-tab /

define ALT_TAB 0x1e3

define ALT_MINUS 0x1e4

define ALT_EQUAL 0x1e5

define ALT_HOME 0x1e6

define ALT_PGUP 0x1e7

define ALT_PGDN 0x1e8

define ALT_END 0x1e9

define ALT_UP 0x1ea / alt-up arrow /

define ALT_DOWN 0x1eb / alt-down arrow /

define ALT_RIGHT 0x1ec / alt-right arrow /

define ALT_LEFT 0x1ed / alt-left arrow /

define ALT_ENTER 0x1ee / alt-enter /

define ALT_ESC 0x1ef / alt-escape /

define ALT_BQUOTE 0x1f0 / alt-back quote /

define ALT_LBRACKET 0x1f1 / alt-left bracket /

define ALT_RBRACKET 0x1f2 / alt-right bracket /

define ALT_SEMICOLON 0x1f3 / alt-semi-colon /

define ALT_FQUOTE 0x1f4 / alt-forward quote /

define ALT_COMMA 0x1f5 / alt-comma /

define ALT_STOP 0x1f6 / alt-stop /

define ALT_FSLASH 0x1f7 / alt-forward slash /

define ALT_BKSP 0x1f8 / alt-backspace /

define CTL_BKSP 0x1f9 / ctl-backspace /

define PAD0 0x1fa / keypad 0 /

define CTL_PAD0 0x1fb / ctl-keypad 0 /

define CTL_PAD1 0x1fc

define CTL_PAD2 0x1fd

define CTL_PAD3 0x1fe

define CTL_PAD4 0x1ff

define CTL_PAD5 0x200

define CTL_PAD6 0x201

define CTL_PAD7 0x202

define CTL_PAD8 0x203

define CTL_PAD9 0x204

define ALT_PAD0 0x205 / alt-keypad 0 /

define ALT_PAD1 0x206

define ALT_PAD2 0x207

define ALT_PAD3 0x208

define ALT_PAD4 0x209

define ALT_PAD5 0x20a

define ALT_PAD6 0x20b

define ALT_PAD7 0x20c

define ALT_PAD8 0x20d

define ALT_PAD9 0x20e

define CTL_DEL 0x20f / ctl-delete /

define ALT_BSLASH 0x210 / alt-backslash /

define CTL_ENTER 0x211 / ctl-enter /

define SHF_PADENTER 0x212 / shift-enter on keypad /

define SHF_PADSLASH 0x213 / shift-slash on keypad /

define SHF_PADSTAR 0x214 / shift-star on keypad /

define SHF_PADPLUS 0x215 / shift-plus on keypad /

define SHF_PADMINUS 0x216 / shift-minus on keypad /

define SHF_UP 0x217 / shift-up on keypad /

define SHF_DOWN 0x218 / shift-down on keypad /

define SHF_IC 0x219 / shift-insert on keypad /

define SHF_DC 0x21a / shift-delete on keypad /

define KEY_MOUSE 0x21b / "mouse" key /

define KEY_SHIFT_L 0x21c / Left-shift /

define KEY_SHIFT_R 0x21d / Right-shift /

define KEY_CONTROL_L 0x21e / Left-control /

define KEY_CONTROL_R 0x21f / Right-control /

define KEY_ALT_L 0x220 / Left-alt /

define KEY_ALT_R 0x221 / Right-alt /

define KEY_RESIZE 0x222 / Window resize /

define KEY_SUP 0x223 / Shifted up arrow /

define KEY_SDOWN 0x224 / Shifted down arrow /

define KEY_MIN KEY_BREAK / Minimum curses key value /

define KEY_MAX KEY_SDOWN / Maximum curses key /

define KEY_F(n) (KEY_F0 + (n))

/----------------------------------------------------------------------

/ Standard /

PDCEX int addch(const chtype); PDCEX int addchnstr(const chtype , int); PDCEX int addchstr(const chtype ); PDCEX int addnstr(const char , int); PDCEX int addstr(const char ); PDCEX int attroff(chtype); PDCEX int attron(chtype); PDCEX int attrset(chtype); PDCEX int attr_get(attr_t , short , void ); PDCEX int attr_off(attr_t, void ); PDCEX int attr_on(attr_t, void ); PDCEX int attr_set(attr_t, short, void ); PDCEX int baudrate(void); PDCEX int beep(void); PDCEX int bkgd(chtype); PDCEX void bkgdset(chtype); PDCEX int border(chtype, chtype, chtype, chtype, chtype, chtype, chtype, chtype); PDCEX int box(WINDOW , chtype, chtype); PDCEX bool can_change_color(void); PDCEX int cbreak(void); PDCEX int chgat(int, attr_t, short, const void ); PDCEX int clearok(WINDOW , bool); PDCEX int clear(void); PDCEX int clrtobot(void); PDCEX int clrtoeol(void); PDCEX int color_content(short, short , short , short ); PDCEX int color_set(short, void ); PDCEX int copywin(const WINDOW , WINDOW , int, int, int, int, int, int, int); PDCEX int curs_set(int); PDCEX int def_prog_mode(void); PDCEX int def_shell_mode(void); PDCEX int delay_output(int); PDCEX int delch(void); PDCEX int deleteln(void); PDCEX void delscreen(SCREEN ); PDCEX int delwin(WINDOW ); PDCEX WINDOW derwin(WINDOW , int, int, int, int); PDCEX int doupdate(void); PDCEX WINDOW dupwin(WINDOW ); PDCEX int echochar(const chtype); PDCEX int echo(void); PDCEX int endwin(void); PDCEX char erasechar(void); PDCEX int erase(void); PDCEX void filter(void); PDCEX int flash(void); PDCEX int flushinp(void); PDCEX chtype getbkgd(WINDOW ); PDCEX int getnstr(char , int); PDCEX int getstr(char ); PDCEX WINDOW getwin(FILE ); PDCEX int halfdelay(int); PDCEX bool has_colors(void); PDCEX bool has_ic(void); PDCEX bool has_il(void); PDCEX int hline(chtype, int); PDCEX void idcok(WINDOW , bool); PDCEX int idlok(WINDOW , bool); PDCEX void immedok(WINDOW , bool); PDCEX int inchnstr(chtype , int); PDCEX int inchstr(chtype ); PDCEX chtype inch(void); PDCEX int init_color(short, short, short, short); PDCEX int init_pair(short, short, short); PDCEX WINDOW initscr(void); PDCEX int innstr(char , int); PDCEX int insch(chtype); PDCEX int insdelln(int); PDCEX int insertln(void); PDCEX int insnstr(const char , int); PDCEX int insstr(const char ); PDCEX int instr(char ); PDCEX int intrflush(WINDOW , bool); PDCEX bool isendwin(void); PDCEX bool is_linetouched(WINDOW , int); PDCEX bool is_wintouched(WINDOW ); PDCEX char keyname(int); PDCEX int keypad(WINDOW , bool); PDCEX char killchar(void); PDCEX int leaveok(WINDOW , bool); PDCEX char longname(void); PDCEX int meta(WINDOW , bool); PDCEX int move(int, int); PDCEX int mvaddch(int, int, const chtype); PDCEX int mvaddchnstr(int, int, const chtype , int); PDCEX int mvaddchstr(int, int, const chtype ); PDCEX int mvaddnstr(int, int, const char , int); PDCEX int mvaddstr(int, int, const char ); PDCEX int mvchgat(int, int, int, attr_t, short, const void ); PDCEX int mvcur(int, int, int, int); PDCEX int mvdelch(int, int); PDCEX int mvderwin(WINDOW , int, int); PDCEX int mvgetch(int, int); PDCEX int mvgetnstr(int, int, char , int); PDCEX int mvgetstr(int, int, char ); PDCEX int mvhline(int, int, chtype, int); PDCEX chtype mvinch(int, int); PDCEX int mvinchnstr(int, int, chtype , int); PDCEX int mvinchstr(int, int, chtype ); PDCEX int mvinnstr(int, int, char , int); PDCEX int mvinsch(int, int, chtype); PDCEX int mvinsnstr(int, int, const char , int); PDCEX int mvinsstr(int, int, const char ); PDCEX int mvinstr(int, int, char ); PDCEX int mvprintw(int, int, const char , ...); PDCEX int mvscanw(int, int, const char , ...); PDCEX int mvvline(int, int, chtype, int); PDCEX int mvwaddchnstr(WINDOW , int, int, const chtype , int); PDCEX int mvwaddchstr(WINDOW , int, int, const chtype ); PDCEX int mvwaddch(WINDOW , int, int, const chtype); PDCEX int mvwaddnstr(WINDOW , int, int, const char , int); PDCEX int mvwaddstr(WINDOW , int, int, const char ); PDCEX int mvwchgat(WINDOW , int, int, int, attr_t, short, const void ); PDCEX int mvwdelch(WINDOW , int, int); PDCEX int mvwgetch(WINDOW , int, int); PDCEX int mvwgetnstr(WINDOW , int, int, char , int); PDCEX int mvwgetstr(WINDOW , int, int, char ); PDCEX int mvwhline(WINDOW , int, int, chtype, int); PDCEX int mvwinchnstr(WINDOW , int, int, chtype , int); PDCEX int mvwinchstr(WINDOW , int, int, chtype ); PDCEX chtype mvwinch(WINDOW , int, int); PDCEX int mvwinnstr(WINDOW , int, int, char , int); PDCEX int mvwinsch(WINDOW , int, int, chtype); PDCEX int mvwinsnstr(WINDOW , int, int, const char , int); PDCEX int mvwinsstr(WINDOW , int, int, const char ); PDCEX int mvwinstr(WINDOW , int, int, char ); PDCEX int mvwin(WINDOW , int, int); PDCEX int mvwprintw(WINDOW , int, int, const char , ...); PDCEX int mvwscanw(WINDOW , int, int, const char , ...); PDCEX int mvwvline(WINDOW , int, int, chtype, int); PDCEX int napms(int); PDCEX WINDOW newpad(int, int); PDCEX SCREEN newterm(const char , FILE , FILE ); PDCEX WINDOW newwin(int, int, int, int); PDCEX int nl(void); PDCEX int nocbreak(void); PDCEX int nodelay(WINDOW , bool); PDCEX int noecho(void); PDCEX int nonl(void); PDCEX void noqiflush(void); PDCEX int noraw(void); PDCEX int notimeout(WINDOW , bool); PDCEX int overlay(const WINDOW , WINDOW ); PDCEX int overwrite(const WINDOW , WINDOW ); PDCEX int pair_content(short, short , short ); PDCEX int pechochar(WINDOW , chtype); PDCEX int pnoutrefresh(WINDOW , int, int, int, int, int, int); PDCEX int prefresh(WINDOW , int, int, int, int, int, int); PDCEX int printw(const char , ...); PDCEX int putwin(WINDOW , FILE ); PDCEX void qiflush(void); PDCEX int raw(void); PDCEX int redrawwin(WINDOW ); PDCEX int refresh(void); PDCEX int reset_prog_mode(void); PDCEX int reset_shell_mode(void); PDCEX int resetty(void); PDCEX int ripoffline(int, int ()(WINDOW , int)); PDCEX int savetty(void); PDCEX int scanw(const char , ...); PDCEX int scr_dump(const char ); PDCEX int scr_init(const char ); PDCEX int scr_restore(const char ); PDCEX int scr_set(const char ); PDCEX int scrl(int); PDCEX int scroll(WINDOW ); PDCEX int scrollok(WINDOW , bool); PDCEX SCREEN set_term(SCREEN ); PDCEX int setscrreg(int, int); PDCEX int slk_attroff(const chtype); PDCEX int slk_attr_off(const attr_t, void ); PDCEX int slk_attron(const chtype); PDCEX int slk_attr_on(const attr_t, void ); PDCEX int slk_attrset(const chtype); PDCEX int slk_attr_set(const attr_t, short, void ); PDCEX int slk_clear(void); PDCEX int slk_color(short); PDCEX int slk_init(int); PDCEX char slk_label(int); PDCEX int slk_noutrefresh(void); PDCEX int slk_refresh(void); PDCEX int slk_restore(void); PDCEX int slk_set(int, const char , int); PDCEX int slk_touch(void); PDCEX int standend(void); PDCEX int standout(void); PDCEX int start_color(void); PDCEX WINDOW subpad(WINDOW , int, int, int, int); PDCEX WINDOW subwin(WINDOW , int, int, int, int); PDCEX int syncok(WINDOW , bool); PDCEX chtype termattrs(void); PDCEX attr_t term_attrs(void); PDCEX char termname(void); PDCEX void timeout(int); PDCEX int touchline(WINDOW , int, int); PDCEX int touchwin(WINDOW ); PDCEX int typeahead(int); PDCEX int untouchwin(WINDOW ); PDCEX void use_env(bool); PDCEX int vidattr(chtype); PDCEX int vid_attr(attr_t, short, void ); PDCEX int vidputs(chtype, int ()(int)); PDCEX int vid_puts(attr_t, short, void , int ()(int)); PDCEX int vline(chtype, int); PDCEX int vw_printw(WINDOW , const char , va_list); PDCEX int vwprintw(WINDOW , const char , va_list); PDCEX int vw_scanw(WINDOW , const char , va_list); PDCEX int vwscanw(WINDOW , const char , va_list); PDCEX int waddchnstr(WINDOW , const chtype , int); PDCEX int waddchstr(WINDOW , const chtype ); PDCEX int waddch(WINDOW , const chtype); PDCEX int waddnstr(WINDOW , const char , int); PDCEX int waddstr(WINDOW , const char ); PDCEX int wattroff(WINDOW , chtype); PDCEX int wattron(WINDOW , chtype); PDCEX int wattrset(WINDOW , chtype); PDCEX int wattr_get(WINDOW , attr_t , short , void ); PDCEX int wattr_off(WINDOW , attr_t, void ); PDCEX int wattr_on(WINDOW , attr_t, void ); PDCEX int wattr_set(WINDOW , attr_t, short, void ); PDCEX void wbkgdset(WINDOW , chtype); PDCEX int wbkgd(WINDOW , chtype); PDCEX int wborder(WINDOW , chtype, chtype, chtype, chtype, chtype, chtype, chtype, chtype); PDCEX int wchgat(WINDOW , int, attr_t, short, const void ); PDCEX int wclear(WINDOW ); PDCEX int wclrtobot(WINDOW ); PDCEX int wclrtoeol(WINDOW ); PDCEX int wcolor_set(WINDOW , short, void ); PDCEX void wcursyncup(WINDOW ); PDCEX int wdelch(WINDOW ); PDCEX int wdeleteln(WINDOW ); PDCEX int wechochar(WINDOW , const chtype); PDCEX int werase(WINDOW ); PDCEX int wgetch(WINDOW ); PDCEX int wgetnstr(WINDOW , char , int); PDCEX int wgetstr(WINDOW , char ); PDCEX int whline(WINDOW , chtype, int); PDCEX int winchnstr(WINDOW , chtype , int); PDCEX int winchstr(WINDOW , chtype ); PDCEX chtype winch(WINDOW ); PDCEX int winnstr(WINDOW , char , int); PDCEX int winsch(WINDOW , chtype); PDCEX int winsdelln(WINDOW , int); PDCEX int winsertln(WINDOW ); PDCEX int winsnstr(WINDOW , const char , int); PDCEX int winsstr(WINDOW , const char ); PDCEX int winstr(WINDOW , char ); PDCEX int wmove(WINDOW , int, int); PDCEX int wnoutrefresh(WINDOW ); PDCEX int wprintw(WINDOW , const char , ...); PDCEX int wredrawln(WINDOW , int, int); PDCEX int wrefresh(WINDOW ); PDCEX int wscanw(WINDOW , const char , ...); PDCEX int wscrl(WINDOW , int); PDCEX int wsetscrreg(WINDOW , int, int); PDCEX int wstandend(WINDOW ); PDCEX int wstandout(WINDOW ); PDCEX void wsyncdown(WINDOW ); PDCEX void wsyncup(WINDOW ); PDCEX void wtimeout(WINDOW , int); PDCEX int wtouchln(WINDOW , int, int, int); PDCEX int wvline(WINDOW , chtype, int);

/ Wide-character functions /

ifdef PDC_WIDE

PDCEX int addnwstr(const wchar_t , int); PDCEX int addwstr(const wchar_t ); PDCEX int add_wch(const cchar_t ); PDCEX int add_wchnstr(const cchar_t , int); PDCEX int add_wchstr(const cchar_t ); PDCEX int bkgrnd(const cchar_t ); PDCEX void bkgrndset(const cchar_t ); PDCEX int border_set(const cchar_t , const cchar_t , const cchar_t , const cchar_t , const cchar_t , const cchar_t , const cchar_t , const cchar_t ); PDCEX int box_set(WINDOW , const cchar_t , const cchar_t ); PDCEX int echo_wchar(const cchar_t ); PDCEX int erasewchar(wchar_t ); PDCEX int getbkgrnd(cchar_t ); PDCEX int getcchar(const cchar_t , wchar_t , attr_t , short , void ); PDCEX int getn_wstr(wint_t , int); PDCEX int get_wch(wint_t ); PDCEX int get_wstr(wint_t ); PDCEX int hline_set(const cchar_t , int); PDCEX int innwstr(wchar_t , int); PDCEX int ins_nwstr(const wchar_t , int); PDCEX int ins_wch(const cchar_t ); PDCEX int ins_wstr(const wchar_t ); PDCEX int inwstr(wchar_t ); PDCEX int in_wch(cchar_t ); PDCEX int in_wchnstr(cchar_t , int); PDCEX int in_wchstr(cchar_t ); PDCEX char key_name(wchar_t); PDCEX int killwchar(wchar_t ); PDCEX int mvaddnwstr(int, int, const wchar_t , int); PDCEX int mvaddwstr(int, int, const wchar_t ); PDCEX int mvadd_wch(int, int, const cchar_t ); PDCEX int mvadd_wchnstr(int, int, const cchar_t , int); PDCEX int mvadd_wchstr(int, int, const cchar_t ); PDCEX int mvgetn_wstr(int, int, wint_t , int); PDCEX int mvget_wch(int, int, wint_t ); PDCEX int mvget_wstr(int, int, wint_t ); PDCEX int mvhline_set(int, int, const cchar_t , int); PDCEX int mvinnwstr(int, int, wchar_t , int); PDCEX int mvins_nwstr(int, int, const wchar_t , int); PDCEX int mvins_wch(int, int, const cchar_t ); PDCEX int mvins_wstr(int, int, const wchar_t ); PDCEX int mvinwstr(int, int, wchar_t ); PDCEX int mvin_wch(int, int, cchar_t ); PDCEX int mvin_wchnstr(int, int, cchar_t , int); PDCEX int mvin_wchstr(int, int, cchar_t ); PDCEX int mvprintww(int, int, const wchar_t , ...); PDCEX int mvvline_set(int, int, const cchar_t , int); PDCEX int mvwaddnwstr(WINDOW , int, int, const wchar_t , int); PDCEX int mvwaddwstr(WINDOW , int, int, const wchar_t ); PDCEX int mvwadd_wch(WINDOW , int, int, const cchar_t ); PDCEX int mvwadd_wchnstr(WINDOW , int, int, const cchar_t , int); PDCEX int mvwadd_wchstr(WINDOW , int, int, const cchar_t ); PDCEX int mvwgetn_wstr(WINDOW , int, int, wint_t , int); PDCEX int mvwget_wch(WINDOW , int, int, wint_t ); PDCEX int mvwget_wstr(WINDOW , int, int, wint_t ); PDCEX int mvwhline_set(WINDOW , int, int, const cchar_t , int); PDCEX int mvwinnwstr(WINDOW , int, int, wchar_t , int); PDCEX int mvwins_nwstr(WINDOW , int, int, const wchar_t , int); PDCEX int mvwins_wch(WINDOW , int, int, const cchar_t ); PDCEX int mvwins_wstr(WINDOW , int, int, const wchar_t ); PDCEX int mvwin_wch(WINDOW , int, int, cchar_t ); PDCEX int mvwin_wchnstr(WINDOW , int, int, cchar_t , int); PDCEX int mvwin_wchstr(WINDOW , int, int, cchar_t ); PDCEX int mvwinwstr(WINDOW , int, int, wchar_t ); PDCEX int mvwvline_set(WINDOW , int, int, const cchar_t , int); PDCEX int mvwprintww(WINDOW , int, int, const wchar_t , ...); PDCEX int pecho_wchar(WINDOW , const cchar_t); PDCEX int printww(const wchar_t , ...); PDCEX int setcchar(cchar_t, const wchar_t, const attr_t, short, const void); PDCEX int slk_wset(int, const wchar_t , int); PDCEX int unget_wch(const wchar_t); PDCEX int vline_set(const cchar_t , int); PDCEX int vw_printww(WINDOW , const wchar_t , va_list); PDCEX int vwprintww(WINDOW , const wchar_t , va_list); PDCEX int waddnwstr(WINDOW , const wchar_t , int); PDCEX int waddwstr(WINDOW , const wchar_t ); PDCEX int wadd_wch(WINDOW , const cchar_t ); PDCEX int wadd_wchnstr(WINDOW , const cchar_t , int); PDCEX int wadd_wchstr(WINDOW , const cchar_t ); PDCEX int wbkgrnd(WINDOW , const cchar_t ); PDCEX void wbkgrndset(WINDOW , const cchar_t ); PDCEX int wborder_set(WINDOW , const cchar_t , const cchar_t , const cchar_t , const cchar_t , const cchar_t , const cchar_t , const cchar_t , const cchar_t ); PDCEX int wecho_wchar(WINDOW , const cchar_t ); PDCEX int wgetbkgrnd(WINDOW , cchar_t ); PDCEX int wgetn_wstr(WINDOW , wint_t , int); PDCEX int wget_wch(WINDOW , wint_t ); PDCEX int wget_wstr(WINDOW , wint_t ); PDCEX int whline_set(WINDOW , const cchar_t , int); PDCEX int winnwstr(WINDOW , wchar_t , int); PDCEX int wins_nwstr(WINDOW , const wchar_t , int); PDCEX int wins_wch(WINDOW , const cchar_t ); PDCEX int wins_wstr(WINDOW , const wchar_t ); PDCEX int winwstr(WINDOW , wchar_t ); PDCEX int win_wch(WINDOW , cchar_t ); PDCEX int win_wchnstr(WINDOW , cchar_t , int); PDCEX int win_wchstr(WINDOW , cchar_t ); PDCEX int wprintww(WINDOW , const wchar_t , ...); PDCEX wchar_t wunctrl(cchar_t ); PDCEX int wvline_set(WINDOW , const cchar_t , int);

endif

/ Quasi-standard /

PDCEX chtype getattrs(WINDOW ); PDCEX int getbegx(WINDOW ); PDCEX int getbegy(WINDOW ); PDCEX int getmaxx(WINDOW ); PDCEX int getmaxy(WINDOW ); PDCEX int getparx(WINDOW ); PDCEX int getpary(WINDOW ); PDCEX int getcurx(WINDOW ); PDCEX int getcury(WINDOW ); PDCEX void traceoff(void); PDCEX void traceon(void); PDCEX char unctrl(chtype);

PDCEX int crmode(void); PDCEX int nocrmode(void); PDCEX int draino(int); PDCEX int resetterm(void); PDCEX int fixterm(void); PDCEX int saveterm(void); PDCEX void setsyx(int, int);

PDCEX int mouse_set(mmask_t); PDCEX int mouse_on(mmask_t); PDCEX int mouse_off(mmask_t); PDCEX int request_mouse_pos(void); PDCEX void wmouse_position(WINDOW , int , int *); PDCEX mmask_t getmouse(void);

/ ncurses /

PDCEX int alloc_pair(int, int); PDCEX int assume_default_colors(int, int); PDCEX const char curses_version(void); PDCEX int find_pair(int, int); PDCEX int free_pair(int); PDCEX bool has_key(int); PDCEX bool is_cleared(const WINDOW ); PDCEX bool is_idcok(const WINDOW ); PDCEX bool is_idlok(const WINDOW ); PDCEX bool is_immedok(const WINDOW ); PDCEX bool is_keypad(const WINDOW ); PDCEX bool is_leaveok(const WINDOW ); PDCEX bool is_nodelay(const WINDOW ); PDCEX bool is_notimeout(const WINDOW ); PDCEX bool is_pad(const WINDOW ); PDCEX bool is_scrollok(const WINDOW ); PDCEX bool is_subwin(const WINDOW ); PDCEX bool is_syncok(const WINDOW ); PDCEX int set_tabsize(int); PDCEX int use_default_colors(void); PDCEX int wgetdelay(const WINDOW ); PDCEX WINDOW wgetparent(const WINDOW ); PDCEX int wgetscrreg(const WINDOW , int , int ); PDCEX int wresize(WINDOW , int, int);

PDCEX bool has_mouse(void); PDCEX int mouseinterval(int); PDCEX mmask_t mousemask(mmask_t, mmask_t ); PDCEX bool mouse_trafo(int , int , bool); PDCEX int nc_getmouse(MEVENT ); PDCEX int ungetmouse(MEVENT ); PDCEX bool wenclose(const WINDOW , int, int); PDCEX bool wmouse_trafo(const WINDOW , int , int *, bool);

/ PDCurses /

PDCEX int addrawch(chtype); PDCEX int insrawch(chtype); PDCEX bool is_termresized(void); PDCEX int mvaddrawch(int, int, chtype); PDCEX int mvdeleteln(int, int); PDCEX int mvinsertln(int, int); PDCEX int mvinsrawch(int, int, chtype); PDCEX int mvwaddrawch(WINDOW , int, int, chtype); PDCEX int mvwdeleteln(WINDOW , int, int); PDCEX int mvwinsertln(WINDOW , int, int); PDCEX int mvwinsrawch(WINDOW , int, int, chtype); PDCEX int raw_output(bool); PDCEX int resize_term(int, int); PDCEX WINDOW resize_window(WINDOW , int, int); PDCEX int waddrawch(WINDOW , chtype); PDCEX int winsrawch(WINDOW , chtype); PDCEX char wordchar(void);

ifdef PDC_WIDE

PDCEX wchar_t *slk_wlabel(int);

endif

PDCEX void PDC_debug(const char , ...); PDCEX void PDC_get_version(PDC_VERSION ); PDCEX int PDC_ungetch(int); PDCEX int PDC_set_blink(bool); PDCEX int PDC_set_bold(bool); PDCEX int PDC_set_line_color(short); PDCEX void PDC_set_title(const char *);

PDCEX int PDC_clearclipboard(void); PDCEX int PDC_freeclipboard(char *); PDCEX int PDC_getclipboard(char *, long ); PDCEX int PDC_setclipboard(const char *, long);

PDCEX unsigned long PDC_get_key_modifiers(void); PDCEX int PDC_return_key_modifiers(bool);

ifdef XCURSES

PDCEX WINDOW *Xinitscr(int, char *); PDCEX void XCursesExit(void); PDCEX int sb_init(void); PDCEX int sb_set_horz(int, int, int); PDCEX int sb_set_vert(int, int, int); PDCEX int sb_get_horz(int , int , int ); PDCEX int sb_get_vert(int , int , int *); PDCEX int sb_refresh(void);

endif

/ NetBSD /

PDCEX int touchoverlap(const WINDOW , WINDOW ); PDCEX int underend(void); PDCEX int underscore(void); PDCEX int wunderend(WINDOW ); PDCEX int wunderscore(WINDOW );

/ Functions defined as macros /

/ getch() and ungetch() conflict with some DOS libraries /

define getch() wgetch(stdscr)

define ungetch(ch) PDC_ungetch(ch)

define COLOR_PAIR(n) (((chtype)(n) << PDC_COLOR_SHIFT) & A_COLOR)

define PAIR_NUMBER(n) (((n) & A_COLOR) >> PDC_COLOR_SHIFT)

/ These will only work as macros /

define getbegyx(w, y, x) (y = getbegy(w), x = getbegx(w))

define getmaxyx(w, y, x) (y = getmaxy(w), x = getmaxx(w))

define getparyx(w, y, x) (y = getpary(w), x = getparx(w))

define getyx(w, y, x) (y = getcury(w), x = getcurx(w))

define getsyx(y, x) { if (curscr->_leaveit) (y)=(x)=-1; \

                         else getyx(curscr,(y),(x)); }

ifdef NCURSES_MOUSE_VERSION

define getmouse(x) nc_getmouse(x)

endif

/ Deprecated /

define PDC_save_key_modifiers(x) (OK)

define PDC_get_input_fd() 0

/ return codes from PDC_getclipboard() and PDC_setclipboard() calls /

define PDC_CLIP_SUCCESS 0

define PDC_CLIP_ACCESS_ERROR 1

define PDC_CLIP_EMPTY 2

define PDC_CLIP_MEMORY_ERROR 3

/ PDCurses key modifier masks /

define PDC_KEY_MODIFIER_SHIFT 1

define PDC_KEY_MODIFIER_CONTROL 2

define PDC_KEY_MODIFIER_ALT 4

define PDC_KEY_MODIFIER_NUMLOCK 8

ifdef __cplusplus

ifndef PDC_PP98

undef bool

endif

}

endif

endif / PDCURSES /

wmcbrine commented 9 months ago

Eh, thanks, but I prefer not to extend PDCurses in this way. Unless you got X/Open to adopt it...