/* *************************************************************************** * This file comprises part of PDCurses. PDCurses is Public Domain software. * You may use this code for whatever purposes you desire. This software * is provided AS IS with NO WARRANTY whatsoever. * Should this software be used in another application, an acknowledgement * that PDCurses code is used would be appreciated, but is not mandatory. * * Any changes which you make to this software which may improve or enhance * it, should be forwarded to the current maintainer for the benefit of * other users. * * The only restriction placed on this code is that no distribution of * modified PDCurses code be made under the PDCurses name, by anyone * other than the current maintainer. * * See the file maintain.er for details of the current maintainer. *************************************************************************** */ /* $Id: curses.h,v 1.15 2002/11/27 11:22:46 mark Exp $ */ /* *---------------------------------------------------------------------- * PDCurses *---------------------------------------------------------------------- * MH * 991212 2.4 * Key modifiers pressed by themselves are now returned as keys * KEY_SHIFT_L KEY_SHIFT_R * KEY_CONTROL_L KEY_CONTROL_R * KEY_ALT_L KEY_ALT_R * This works on Win32 and X11 ports only * Added support for lcc-win32, supplied by Matthias Burian * Added support for MingW32, and CygnusW32 compilers * Added clipboard support for X11, Win32 and OS/2 ports * Added ability to get to the input file descriptor * New function for X11; Xinitscr() which allows standard X11 * switches to be passed to the application * Added X11 shared library support * * MH * 960920 2.3 Added more System V R4 functions * * Rewrote X11 port * * Added Win32 port - original port by Chris Szurgot * some updates by Mark Hessling * some updates by Gurusamy Sarathy * * slk() functions added by Kim Huron * * Support for more and newer versions of compilers * * Added mouse support for X11 and Win32 ports * * Size of chtype now long * * MH * 950126 2.2 Added more System V R4 functions * * Added beta Xwindows port * * Changed chtype to long * * Incorporated panels library * * Support for more and newer versions of compilers * * MH * 930531 2.1 Added support for djgpp * * Added beta Unix version * * Added OS/2 DLL support. * * Changed behaviour of overlay(), overwrite() and typeahead() * * 921120 2.0 Changed #if to #ifdef/#if defined to make it * easier to add new platforms/compilers. * * Added System V colour support. * * Added OS/2 port. *------- * Frotz * 911221 2.0 pre-beta Changed back from short to int. (int is the * correct size for the default platform. Short * might be too short on some platforms. This * is more portable. I, also, made this mistake.) * * Many functions are now macros. If you want * the real thing, #undef the macro. (X/Open * requirement.) * * Merged many sources into current release. * * Added many X/Open routines (not quite all yet). * * Added internal documentation to all routines. * * Added a HISTORY file to the environment. * * Added a CONTRIB file to the environment. *------- * bl 900114 1.4 Window origin mod in overlay() and overwrite(), on * public (and very reasonable) request. Swapped * #define'd values of OK and ERR; OK now 1, and * ERR is 0/NULL. Conforms better to UNIX * versions. borderchars[] removed from WINDOW * struct since the border() functions were * redefined. Use of short wherever possible. * Portability improvements, mispelled name of * [w]setscrreg(). * * 881005 1.3 All modules lint-checked with MSC '-W3' and * turbo'C' '-w -w-pro' switches. Support for * border(), wborder() functions. * * 881002 1.2 Rcsid[] string in all modules, for maintenance. * * 880306 1.1 'Raw' output routines, revision info in curses.h. * * 870515 1.0 Initial Release. * *---------------------------------------------------------------------- */ #if defined(__cplusplus) || defined(__cplusplus__) || defined(__CPLUSPLUS) extern "C" { # define bool _bool #endif #ifndef __PDCURSES__ #define __PDCURSES__ 1 /*man-start********************************************************************* All defines are "defined" here. All compiler and environment specific definitions are defined into generic class defines. These defines are to be given values so that the code can rely on #if, rather than a complicated set of #if defined() or #ifdefs... PDCurses definitions list: (Only define those needed) REGISTERWINDOWS True for auto window update registery. FAST_VIDEO True if display is memory mapped, or we can utilize the fast video update routines. DOS True if compiling for DOS. OS2 True if compiling for OS/2. WIN32 True if compiling for Windoze 95 or Windoze NT FLEXOS True if compiling for Flexos. HC True if using a Metaware compiler. TC True if using a Borland compiler. MSC True if using a Microsoft compiler. HAVE_PROTO True if the compiler supports ANSI prototypes. CPLUSPLUS True if the compiler supports C++. PDC_BUILD???? Defines API build version. PDCurses portable platform definitions list: PDCURSES Enables access to PDCurses-only routines. XOPEN Always true. SYSVcurses True if you are compiling for SYSV portability. BSDcurses True if you are compiling for BSD portability. PDCURSES_WCLR Makes behaviour of wclrtoeol() and wclrtoeof() unique to PDCurses. By default Unix behavior is set. See notes in wclrtoeol() and wclrtoeof(). **man-end**********************************************************************/ #define PDC_BUILD 2601 #define PDCURSES 1 /* PDCurses-only routines */ #define XOPEN 1 /* X/Open Curses routines */ #define SYSVcurses 1 /* System V Curses routines */ #define BSDcurses 1 /* BSD Curses routines */ #define CHTYPE_LONG 1 /* size of chtype; long */ #define PDC_CDECL /* default define this as empty */ /*---------------------------------------- * BORLAND COMPILERS Turbo C[++], Borland C[++] * * Borland definitions: * TC * DOS * OS2 * CPLUSPLUS * * __TURBOC__, __MSDOS__, * __OS2__ and __WIN32__ * are predefined by compiler. */ #ifdef __TURBOC__ /* Borland gives defines this as a value*/ # define TC __TURBOC__ /* Define a value for TC */ # ifndef HAVE_PROTO # define HAVE_PROTO 1 /* Borland supports ANSI C prototypes */ # endif # ifdef __MSDOS__ # define DOS 6 /* Major release of DOS supported */ # include # include # endif # ifdef __OS2__ # define OS2 3 /* Major release of OS/2 supported */ # define INCL_VIO # define INCL_KBD # include # endif # ifdef __WIN32__ # ifdef INCLUDE_WINDOWS_H /* only include for WIN32 files */ # include # ifdef MOUSE_MOVED /* get rid of Windows #define */ # undef MOUSE_MOVED # endif # endif # ifndef WIN32 # define WIN32 1 # endif # endif # if __TURBOC__ >= 0x290 # ifdef __BCPLUSPLUS__ # define CPLUSPLUS 1 /* Define that we are compiling C++. */ # endif # ifdef __TCPLUSPLUS__ # define CPLUSPLUS 1 /* Define that we are compiling C++. */ # endif # ifdef __CPLUSPLUS__ # define CPLUSPLUS 1 /* Define that we are compiling C++. */ # endif # endif # ifndef HAVE_LIMITS_H # define HAVE_LIMITS_H /* have */ # endif # ifndef HAVE_MEMORY_H # define HAVE_MEMORY_H /* have */ # endif # ifndef HAVE_STDARG_H # define HAVE_STDARG_H /* have */ # endif # ifndef HAVE_MEMMOVE # define HAVE_MEMMOVE /* have memmove() */ # endif # ifndef HAVE_VSSCANF # define HAVE_VSSCANF /* have vsscanf() */ # endif #endif /*---------------------------------------- * METAWARE COMPILERS High C * * Metaware definitions: * HC * DOS * FLEXOS */ #ifdef __HIGHC__ # define HC 1 # pragma off(prototype_override_warnings) # ifndef HAVE_PROTO # define HAVE_PROTO 1 /* Metaware supports ANSI C prototypes */ # endif # ifdef __MSDOS__ # define DOS 6 /* Major release of DOS supported */ # include # include # endif # ifdef __FLEXOS__ /* define this on the command line */ # define FLEXOS 2 /* or latest major release value. */ # endif #endif /*---------------------------------------- * MICROSOFT COMPILERS MSC * * Microsoft definitions: * MSC * DOS || OS2 */ #ifdef _MSC_VER /* defined by compiler */ # define MSC 1 # ifndef HAVE_PROTO # define HAVE_PROTO 1 /* Microsoft supports ANSI C prototypes */ # endif # ifdef __OS2__ /* You will have to define in makefile */ # define USE_OS2_H 1 /* Use the os2.h for the compiler */ # define OS2 3 /* Major release of OS/2 supported */ # define INCL_VIO # define INCL_KBD # include # define FARKeyword far # define APIRET USHORT # else /* no __OS2__ define, so assume DOS */ # ifdef _WIN32 # ifndef WIN32 # define WIN32 # endif # ifdef INCLUDE_WINDOWS_H /* only include for WIN32 files */ # include # ifdef MOUSE_MOVED /* get rid of Windows #define */ # undef MOUSE_MOVED # endif # endif # ifndef HAVE_MEMORY_H # define HAVE_MEMORY_H /* have */ # endif # ifndef HAVE_STDARG_H # define HAVE_STDARG_H /* have */ # endif # else # define DOS 6 /* Major release of DOS supported */ # include # include # undef HAVE_VSSCANF /* vsscanf() function NOT in library */ # endif # endif # ifndef HAVE_LIMITS_H # define HAVE_LIMITS_H /* have */ # endif # ifndef HAVE_MEMMOVE # define HAVE_MEMMOVE /* have memmove() */ # endif #endif /*---------------------------------------- * MICROSOFT QUICK C COMPILERS QC * */ #ifdef _QC /* defined by compiler */ # define MSC 1 # ifndef HAVE_PROTO # define HAVE_PROTO 1 /* QuickC supports ANSI C prototypes */ # endif # define DOS 6 /* Major release of DOS supported */ # include # include # undef HAVE_VSSCANF /* vsscanf() function NOT in library */ # ifndef HAVE_LIMITS_H # define HAVE_LIMITS_H /* have */ # endif #endif /*---------------------------------------- * TOPSPEED compilers TSC * * TOPSPEED definitions: * TSC * DOS || OS2 */ #ifdef __TSC__ /* You may have to define in makefile */ # define TSC 1 # ifndef HAVE_PROTO # define HAVE_PROTO 1 /* TopSpeed supports ANSI C prototypes */ # endif # ifdef __OS2__ # define OS2 3 /* Major release of OS/2 supported */ # define INCL_VIO # define INCL_KBD # include # endif # ifndef HAVE_LIMITS_H # define HAVE_LIMITS_H /* have */ # endif #endif /*---------------------------------------- * IBM C Set/2 Compiler CSET2 * * IBM definitions: * CSET2 * OS2 */ #ifdef __IBMC__ # define CSET2 1 # ifndef HAVE_PROTO # define HAVE_PROTO 1 /* C Set/2 supports ANSI C prototypes */ # endif # ifndef HAVE_STDARG_H # define HAVE_STDARG_H /* have */ # endif # ifndef HAVE_LIMITS_H # define HAVE_LIMITS_H /* have */ # endif # ifndef HAVE_MEMORY_H # define HAVE_MEMORY_H /* have */ # endif # ifndef HAVE_MEMMOVE # define HAVE_MEMMOVE /* have memmove() */ # endif # ifdef __OS2__ # define OS2 3 /* Major release of OS/2 supported */ # define INCL_VIO # define INCL_KBD # include # endif #endif /*---------------------------------------- * GNU compilers emx * * emx definitions: * EMX * OS2 */ #ifdef __EMX__ /* You may have to define in makefile */ # define EMX 1 # ifndef HAVE_PROTO # define HAVE_PROTO 1 /* emx supports ANSI C prototypes */ # endif # define __OS2__ /* EMX does not define this :-( */ # define OS2 3 /* Major release of OS/2 supported */ # define CURSES__32BIT__ # ifndef HAVE_STDARG_H # define HAVE_STDARG_H /* have */ # endif # ifndef HAVE_LIMITS_H # define HAVE_LIMITS_H /* have */ # endif # ifndef HAVE_MEMORY_H # define HAVE_MEMORY_H /* have */ # endif # ifndef HAVE_UNISTD_H # define HAVE_UNISTD_H /* have */ # endif # ifndef HAVE_MEMMOVE # define HAVE_MEMMOVE /* have memmove() */ # endif # ifndef HAVE_VSSCANF # define HAVE_VSSCANF /* have vsscanf() */ # endif # if defined(EMXVIDEO) # include # include # else # define INCL_VIO # define INCL_KBD # include # endif #endif /*---------------------------------------- * GNU compilers djgpp * * djgpp definitions: * GO32 * DOS */ #ifdef GO32 /* You may have to define in makefile */ # ifndef HAVE_PROTO # define HAVE_PROTO 1 /* DJGPP supports ANSI C prototypes */ # endif # define DOS 6 # include # ifdef __FLEXOS__ /* define this on the command line */ # define FLEXOS 2 /* or latest major release value. */ # endif # define CURSES__32BIT__ # ifdef _cplusplus # define CPLUSPLUS 1 # endif # ifndef HAVE_STDARG_H # define HAVE_STDARG_H /* have */ # endif # ifndef HAVE_LIMITS_H # define HAVE_LIMITS_H /* have */ # endif # ifndef HAVE_MEMORY_H # define HAVE_MEMORY_H /* have */ # endif # ifndef HAVE_UNISTD_H # define HAVE_UNISTD_H /* have */ # endif # ifndef HAVE_MEMMOVE # define HAVE_MEMMOVE /* have memmove() */ # endif # ifndef HAVE_USLEEP # define HAVE_USLEEP /* have usleep() */ # endif #endif /*---------------------------------------- * GNU compilers Cygnus Win32 * * cygnus definitions: * WIN32 */ #ifdef __CYGWIN32__ /* You may have to define in makefile */ # ifndef HAVE_PROTO # define HAVE_PROTO 1 /* Cygnuc GCC supports ANSI C prototypes */ # endif # ifdef INCLUDE_WINDOWS_H # include # ifdef MOUSE_MOVED # undef MOUSE_MOVED # endif # endif # ifndef WIN32 # define WIN32 # endif # ifndef INT_MAX # define INT_MAX 32762 # endif # define CURSES__32BIT__ # ifndef HAVE_LIMITS_H # define HAVE_LIMITS_H /* have */ # endif # ifndef HAVE_MEMORY_H # define HAVE_MEMORY_H /* have */ # endif # ifndef HAVE_STDARG_H # define HAVE_STDARG_H /* have */ # endif # ifndef HAVE_UNISTD_H # define HAVE_UNISTD_H /* have */ # endif # ifndef HAVE_MEMMOVE # define HAVE_MEMMOVE /* have memmove() */ # endif # ifndef HAVE_USLEEP # define HAVE_USLEEP /* have usleep() */ # endif #endif /*---------------------------------------- * GNU compilers Ming Win32 * * Ming definitions: * WIN32 */ #ifdef __MINGW32__ # ifndef HAVE_PROTO # define HAVE_PROTO 1 /* Ming GCC supports ANSI C prototypes */ # endif # ifdef INCLUDE_WINDOWS_H # include # ifdef MOUSE_MOVED # undef MOUSE_MOVED # endif # endif # ifndef WIN32 # define WIN32 # endif # define CURSES__32BIT__ # ifndef HAVE_LIMITS_H # define HAVE_LIMITS_H /* have */ # endif # ifndef HAVE_MEMORY_H # define HAVE_MEMORY_H /* have */ # endif # ifndef HAVE_STDARG_H # define HAVE_STDARG_H /* have */ # endif # ifndef HAVE_UNISTD_H # define HAVE_UNISTD_H /* have */ # endif # ifndef HAVE_MEMMOVE # define HAVE_MEMMOVE /* have memmove() */ # endif #endif /*---------------------------------------- * LCC WIN32 * */ #ifdef __LCC__ /* should already be defined by the compiler */ # ifndef HAVE_PROTO # define HAVE_PROTO 1 /* LCC-Win32 supports ANSI C prototypes */ # endif # ifdef INCLUDE_WINDOWS_H # include # ifdef MOUSE_MOVED # undef MOUSE_MOVED # endif # endif # ifndef WIN32 # define WIN32 # endif # ifndef INT_MAX # define INT_MAX 32762 # endif # ifndef HAVE_LIMITS_H # define HAVE_LIMITS_H /* have */ # endif # ifndef HAVE_MEMORY_H # define HAVE_MEMORY_H /* have */ # endif # ifndef HAVE_STDARG_H # define HAVE_STDARG_H /* have */ # endif # ifndef HAVE_MEMMOVE # define HAVE_MEMMOVE /* have memmove() */ # endif #endif /*---------------------------------------- * Watcom C/C++ 10.6 compiler * * WATCOM definitions: * WATCOMC * OS2 * WIN32 */ #ifdef __WATCOMC__ # define WATCOMC 1 # ifndef HAVE_PROTO # define HAVE_PROTO 1 /* Watcom C supports ANSI C prototypes */ # endif # define CURSES__32BIT__ # if defined( __DOS__ ) || defined( __DOS4G__ ) # define DOS 7 /* Major release of DOS supported */ # include # include # include # ifdef __386__ # define int86 int386 # define int86x int386x # endif # endif # if defined( __OS2__ ) || defined( __OS2V2__ ) # define OS2 3 /* Major release of OS/2 supported */ # define CURSES__32BIT__ # define INCL_VIO # define INCL_KBD # include # endif # ifdef __NT__ /* This specifies WIN32 target */ # ifdef INCLUDE_WINDOWS_H # include # ifdef MOUSE_MOVED # undef MOUSE_MOVED # endif # endif # ifndef WIN32 # define WIN32 # endif /* # ifdef PDC_CDECL # undef PDC_CDECL # define PDC_CDECL cdecl # endif */ # endif # ifndef HAVE_LIMITS_H # define HAVE_LIMITS_H /* have */ # endif # ifndef HAVE_MEMORY_H # define HAVE_MEMORY_H /* have */ # endif # ifndef HAVE_STDARG_H # define HAVE_STDARG_H /* have */ # endif # ifndef HAVE_MEMMOVE # define HAVE_MEMMOVE /* have memmove() */ # endif # ifndef HAVE_VSSCANF # define HAVE_VSSCANF /* have vsscanf() */ # endif #endif #if 0 /*---------------------------------------- * gcc under UNIX * * GNU definitions: * UNIX */ #ifdef UNIX # define HAVE_PROTO 1 /* GNU C supports ANSI C prototypes */ # ifdef SUNOS # define NO_VSSCANF # define NO_MEMMOVE # undef BSD # endif # ifdef linux # undef BSD # endif #endif #endif /*---------------------------------------- * MicroWay NDP C/C++ 386 4.2.0 compiler */ #ifdef MX386 # define HAVE_PROTO 1 # define NDP 1 # include # ifdef DOS # define MK_FP(seg,ofs) ( (((int) (seg)) << 4) + ((int) (ofs)) ) # ifdef __i860 typedef void _int; # else typedef int _int; # endif # endif # undef NO_VSSCANF /* vsscanf() function NOT in library */ # ifndef HAVE_LIMITS_H # define HAVE_LIMITS_H /* have */ # endif #endif /*---------------------------------------------------------------------*/ #include /* Required by X/Open usage below */ /*---------------------------------------------------------------------- * * PDCurses Manifest Constants * */ #ifndef FALSE /* booleans */ # define FALSE 0 #endif #ifndef TRUE /* booleans */ # define TRUE !FALSE #endif #ifndef NULL # define NULL 0 /* Null pointer */ #endif #ifndef ERR # define ERR 0 /* general error flag */ #endif #ifndef OK # define OK 1 /* general OK flag */ #endif /*---------------------------------------------------------------------- * * PDCurses Type Declarations * */ typedef unsigned char bool; /* PDCurses Boolean type */ #ifdef CHTYPE_LONG typedef unsigned long chtype; /* 16-bit attr + 16-bit char */ #else typedef unsigned short chtype; /* 8-bit attr + 8-bit char */ #endif /*---------------------------------------------------------------------- * This defines a new type for attributes. * */ typedef chtype attr_t; /*---------------------------------------------------------------------- * Define our mouse interface - same as SYSVR4 (with extensions) */ 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 0000 #define BUTTON_PRESSED 0001 #define BUTTON_CLICKED 0002 #define BUTTON_DOUBLE_CLICKED 0003 #define BUTTON_TRIPLE_CLICKED 0004 #define BUTTON_MOVED 0005 /* PDCurses enhancement */ #define BUTTON_ACTION_MASK 0007 /* PDCurses enhancement */ #define BUTTON_SHIFT 0010 /* PDCurses enhancement */ #define BUTTON_CONTROL 0020 /* PDCurses enhancement */ #define BUTTON_ALT 0040 /* PDCurses enhancement */ #define BUTTON_MODIFIER_MASK 0070 /* PDCurses enhancement */ #define MOUSE_X_POS (Mouse_status.x) #define MOUSE_Y_POS (Mouse_status.y) #define A_BUTTON_CHANGED (Mouse_status.changes & 7) #define MOUSE_MOVED (Mouse_status.changes & 8) #define MOUSE_POS_REPORT (Mouse_status.changes & 16) #define BUTTON_CHANGED(x) (Mouse_status.changes & (1 << ((x) - 1))) #define BUTTON_STATUS(x) (Mouse_status.button[(x)-1]) /* mouse bit-masks */ #define BUTTON1_RELEASED 000000000001L #define BUTTON1_PRESSED 000000000002L #define BUTTON1_CLICKED 000000000004L #define BUTTON1_DOUBLE_CLICKED 000000000010L #define BUTTON1_TRIPLE_CLICKED 000000000020L #define BUTTON1_MOVED 000000000020L /* PDCurses enhancement */ #define BUTTON2_RELEASED 000000000040L #define BUTTON2_PRESSED 000000000100L #define BUTTON2_CLICKED 000000000200L #define BUTTON2_DOUBLE_CLICKED 000000000400L #define BUTTON2_TRIPLE_CLICKED 000000001000L #define BUTTON2_MOVED 000000001000L /* PDCurses enhancement */ #define BUTTON3_RELEASED 000000002000L #define BUTTON3_PRESSED 000000004000L #define BUTTON3_CLICKED 000000010000L #define BUTTON3_DOUBLE_CLICKED 000000020000L #define BUTTON3_TRIPLE_CLICKED 000000040000L #define BUTTON3_MOVED 000000040000L /* PDCurses enhancement */ #define BUTTON_MODIFIER_SHIFT 000000100000L /* PDCurses enhancement */ #define BUTTON_MODIFIER_CONTROL 000000200000L /* PDCurses enhancement */ #define BUTTON_MODIFIER_ALT 000000400000L /* PDCurses enhancement */ #define ALL_MOUSE_EVENTS 000000777777L #define REPORT_MOUSE_POSITION 000001000000L /*---------------------------------------------------------------------- * * PDCurses Structure Definitions: * */ typedef struct _win /* definition of a window. */ { int _cury; /* current pseudo-cursor */ int _curx; int _maxy; /* max window coordinates */ int _maxx; int _pmaxy; /* max physical size */ int _pmaxx; int _begy; /* origin on screen */ int _begx; int _lastpy; /* last y coordinate of upper left pad display area */ int _lastpx; /* last x coordinate of upper left pad display area */ int _lastsy1; /* last upper y coordinate of screen window for pad */ int _lastsx1; /* last upper x coordinate of screen window for pad */ int _lastsy2; /* last lower y coordinate of screen window for pad */ int _lastsx2; /* last lower x coordinate of screen window for pad */ int _flags; /* window properties */ attr_t _attrs; /* standard A_STANDOUT attributes and colors */ chtype _bkgd; /* wrs(4/6/93) background, normally blank */ int _tabsize; /* tab character size */ 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; /* synchronise window ancestors */ bool _use_keypad; /* flags keypad key mode active */ bool _use_idl; /* True if Ins/Del line can be used*/ bool _use_idc; /* True if Ins/Del character can be used*/ 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 */ char* _title; /* window title */ char _title_ofs; /* window title offset from left */ attr_t _title_attr; /* window title attributes */ chtype _blank; /* window's blank character */ int _parx, _pary; /* coords relative to parent (0,0) */ struct _win* _parent; /* subwin's pointer to parent win */ } WINDOW; /*---------------------------------------------------------------------- * * Private structures that are necessary for correct * macro construction. * */ #ifdef REGISTERWINDOWS typedef struct _ref /* Refresh Window Structure */ { WINDOW* win; struct _ref* next; struct _ref* tail; } ACTIVE; typedef struct _wins { WINDOW* w; /* pointer to a visible window */ struct _wins* next; /* Next visible window pointer */ struct _wins* prev; /* Next visible window pointer */ struct _wins* tail; /* Last visible window pointer */ /* Only head window (stdscr) has */ /* a valid tail pointer. */ } WINDS; #endif typedef struct /* structure for ripped off lines */ { int line; int (*init)(); } RIPPEDOFFLINE; typedef struct { bool alive; /* if initscr() called */ bool autocr; /* if lf -> crlf */ 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 refrbrk; /* if premature refresh brk allowed */ bool orgcbr; /* original MSDOS ^-BREAK setting */ bool visible_cursor; /* TRUE if cursor is visible */ bool audible; /* FALSE if the bell is visual */ bool full_redraw; /* TRUE for bad performance */ bool direct_video; /* Allow Direct Screen Memory writes*/ bool mono; /* TRUE if current screen is mono. */ bool sizeable; /* TRUE if adapter is resizeable. */ bool resized; /* TRUE if TERM has been resized */ bool bogus_adapter; /* TRUE if adapter has insane values*/ bool shell; /* TRUE if reset_prog_mode() needs */ /* to be called. */ chtype blank; /* Background character */ attr_t orig_attr; /* Original screen attributes */ int cursrow; /* position of physical cursor */ int curscol; /* position of physical cursor */ int cursor; /* Current Cursor definition */ int visibility; /* Visibility of cursor */ int video_page; /* Current PC video page */ int orig_emulation; /* Original cursor emulation value */ int orig_cursor; /* Original cursor size */ int font; /* default font size */ int orig_font; /* Original font size */ int lines; /* New value for LINES */ int cols; /* New value for COLS */ unsigned long _trap_mbe; /* trap these mouse button events */ unsigned long _map_mbe_to_key; /* map mouse buttons to slk */ 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 */ bool _restore; /* TRUE if screen background to be restored */ bool save_key_modifiers; /* TRUE if each key modifiers saved with each key press */ bool return_key_modifiers; /* TRUE if modifier keys are returned as "real" keys */ #ifdef OS2 # ifdef EMXVIDEO /* nop if using EMX builtins */ int tahead; /* Type-ahead value */ int adapter; /* Screen type */ # else VIOMODEINFO scrnmode; /* default screen mode */ VIOCONFIGINFO adapter; /* Screen type */ KBDINFO kbdinfo; /* keyboard info */ # endif #else int adapter; /* Screen type */ #endif #if defined(DOS) || defined(WIN32) int scrnmode; /* default screen mode */ unsigned video_seg; /* video base segment */ unsigned video_ofs; /* video base offset */ #endif #if defined(OS2) || defined(WIN32) int num_mouse_buttons; /* number of mouse buttons */ #endif #if defined (XCURSES) int XcurscrSize; /* size of Xcurscr shared memory block */ bool sb_on; int sb_viewport_y; int sb_viewport_x; int sb_total_y; int sb_total_x; int sb_cur_y; int sb_cur_x; #endif #ifdef REGISTERWINDOWS WINDS* visible; /* List of visible windows */ bool refreshall; /* Refresh all registered windows? */ #endif short line_color; /* Color of line attributes - default white */ } SCREEN; /* external variables */ #if !defined(PDC_STATIC_BUILD) && defined(_MSC_VER) && defined(WIN32) && !defined(CURSES_LIBRARY) __declspec(dllimport) int LINES; /* terminal height */ __declspec(dllimport) int COLS; /* terminal width */ __declspec(dllimport) WINDOW* stdscr; /* the default screen window */ __declspec(dllimport) WINDOW* curscr; /* the current screen image */ __declspec(dllimport) SCREEN *SP; /* curses variables */ __declspec(dllimport) int use_emalloc; /* set to true to use your own malloc,etc */ __declspec(dllimport) MOUSE_STATUS Mouse_status; __declspec(dllimport) int COLORS; __declspec(dllimport) int COLOR_PAIRS; #else # if !defined(PDC_STATIC_BUILD) && defined(_MSC_VER) && defined(WIN32) __declspec(dllexport) extern int LINES; /* terminal height */ __declspec(dllexport) extern int COLS; /* terminal width */ __declspec(dllexport) extern WINDOW* stdscr; /* the default screen window */ __declspec(dllexport) extern WINDOW* curscr; /* the current screen image */ __declspec(dllexport) extern SCREEN *SP; /* curses variables */ __declspec(dllexport) extern int use_emalloc; /* set to true to use your own malloc,etc */ __declspec(dllexport) extern MOUSE_STATUS Mouse_status; __declspec(dllexport) extern int COLORS; __declspec(dllexport) extern int COLOR_PAIRS; # else extern int LINES; /* terminal height */ extern int COLS; /* terminal width */ extern WINDOW* stdscr; /* the default screen window */ extern WINDOW* curscr; /* the current screen image */ extern SCREEN *SP; /* curses variables */ extern int use_emalloc; /* set to true to use your own malloc,etc */ extern MOUSE_STATUS Mouse_status; extern int COLORS,COLOR_PAIRS; # endif #endif #if defined (CURSES_LIBRARY) extern int _default_lines; /* For presetting maximum lines */ #endif #ifdef REGISTERWINDOWS extern ACTIVE* CurWins; /* Currently Visible Windows */ #endif /*man-start********************************************************************* PDCurses Text Attributes: To include colour in PDCurses, a number of things had to be sacrificed from the strict Unix and System V support. The main problem is fitting all character attributes and colour into an unsigned char (all 8 bits!). On System V, chtype is a long on PDCurses it is a short int. The following is the structure of a win->_attrs chtype: ------------------------------------------------------------------------------------------------- |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10| 9| 8| 7| 6| 5| 4| 3| 2| 1| 0| ------------------------------------------------------------------------------------------------- colour number | modifiers | character eg 'a' (potential for DBCS) The available attribute modifiers are bold, underline, invisible, protect, reverse and blink. **man-end**********************************************************************/ /* Video attribute definitions. */ #ifdef CHTYPE_LONG # define A_NORMAL 0x00000000L # define A_UNDERLINE 0x00100000L # define A_REVERSE 0x00200000L # define A_BLINK 0x00400000L # define A_BOLD 0x00800000L # define A_RIGHTLINE 0x00010000L # define A_DIM 0x00020000L # define A_ALTCHARSET 0x00040000L # define A_INVIS 0x00080000L # define A_ATTRIBUTES 0xFFFF0000L # define A_CHARTEXT 0x0000FFFFL # define A_COLOR 0xFF000000L # define A_LEFTLINE A_DIM # define A_ITALIC A_INVIS # define A_STANDOUT ( A_BOLD | A_REVERSE ) # define A_PROTECT ( A_UNDERLINE | A_LEFTLINE | A_RIGHTLINE ) #else # define A_NORMAL (chtype)0x0000 /* System V */ # define A_ALTCHARSET (chtype)0x0000 /* X/Open */ # define A_BLINK (chtype)0x0400 /* X/Open */ # define A_BLANK (chtype)0x0000 /* X/Open */ # define A_BOLD (chtype)0x0100 /* X/Open */ # define A_DIM (chtype)0x0000 /* X/Open */ # define A_PROTECT (chtype)0x0000 /* X/Open */ # define A_REVERSE (chtype)0x0200 /* X/Open */ # define A_STANDOUT ((chtype)(A_REVERSE | A_BOLD)) /* X/Open */ # define A_UNDERLINE (chtype)0x0000 /* X/Open */ # define A_COLOR (chtype)0xF800 /* System V */ # define A_CHARTEXT (chtype)(0xFF) /* X/Open */ # define A_ATTRIBUTES (chtype)(~A_CHARTEXT) /* X/Open */ #endif #define CHR_MSK A_CHARTEXT /* Obsolete */ #define ATR_MSK A_ATTRIBUTES /* Obsolete */ #define ATR_NRM A_NORMAL /* Obsolete */ #ifdef XCURSES extern chtype *acs_map; # define ACS_BSSB (acs_map['l']) # define ACS_SSBB (acs_map['m']) # define ACS_BBSS (acs_map['k']) # define ACS_SBBS (acs_map['j']) # define ACS_SBSS (acs_map['u']) # define ACS_SSSB (acs_map['t']) # define ACS_SSBS (acs_map['v']) # define ACS_BSSS (acs_map['w']) # define ACS_BSBS (acs_map['q']) # define ACS_SBSB (acs_map['x']) # define ACS_SSSS (acs_map['n']) # define ACS_ULCORNER ACS_BSSB # define ACS_LLCORNER ACS_SSBB # define ACS_URCORNER ACS_BBSS # define ACS_LRCORNER ACS_SBBS # define ACS_RTEE ACS_SBSS # define ACS_LTEE ACS_SSSB # define ACS_BTEE ACS_SSBS # define ACS_TTEE ACS_BSSS # define ACS_HLINE ACS_BSBS # define ACS_VLINE ACS_SBSB # define ACS_PLUS ACS_SSSS # define ACS_S1 (acs_map['o']) # define ACS_S9 (acs_map['s']) # define ACS_DIAMOND (acs_map['\'']) # define ACS_CKBOARD (acs_map['a']) # define ACS_DEGREE (acs_map['f']) # define ACS_PLMINUS (acs_map['g']) # define ACS_BULLET (acs_map['~']) # define ACS_LARROW (acs_map[',']) # define ACS_RARROW (acs_map['+']) # define ACS_DARROW (acs_map['.']) # define ACS_UARROW (acs_map['-']) # define ACS_BOARD (acs_map['h']) # define ACS_LANTERN (acs_map['i']) # define ACS_BLOCK (acs_map['0']) # define ACS_S3 (acs_map['p']) # define ACS_S7 (acs_map['r']) # define ACS_LEQUAL (acs_map['y']) # define ACS_GEQUAL (acs_map['z']) # define ACS_PI (acs_map['{']) # define ACS_NEQUAL (acs_map['|']) # define ACS_STERLING (acs_map['}']) #endif #if defined(DOS) || defined(OS2) || defined(WIN32) /* ALTCHARSET definitions from jshumate@wrdis01.robins.af.mil */ # define ACS_ULCORNER (chtype)0xda /* SysV */ # define ACS_LLCORNER (chtype)0xc0 /* SysV */ # define ACS_URCORNER (chtype)0xbf /* SysV */ # define ACS_LRCORNER (chtype)0xd9 /* SysV */ # define ACS_RTEE (chtype)0xb4 /* SysV */ # define ACS_LTEE (chtype)0xc3 /* SysV */ # define ACS_BTEE (chtype)0xc1 /* SysV */ # define ACS_TTEE (chtype)0xc2 /* SysV */ # define ACS_HLINE (chtype)0xc4 /* SysV */ # define ACS_VLINE (chtype)0xb3 /* SysV */ # define ACS_PLUS (chtype)0xc5 /* SysV */ # define ACS_S1 (chtype)0x2d /* SysV */ # define ACS_S9 (chtype)0x5f /* SysV */ # define ACS_DIAMOND (chtype)0xc5 /* SysV */ # define ACS_CKBOARD (chtype)0xb2 /* SysV */ # define ACS_DEGREE (chtype)0xf8 /* SysV */ # define ACS_PLMINUS (chtype)0xf1 /* SysV */ # define ACS_BULLET (chtype)0xf9 /* SysV */ # define ACS_LARROW (chtype)0x3c /* SysV */ # define ACS_RARROW (chtype)0x3e /* SysV */ # define ACS_DARROW (chtype)0x76 /* SysV */ # define ACS_UARROW (chtype)0x5e /* SysV */ # define ACS_BOARD (chtype)0x23 /* SysV */ # define ACS_LANTERN (chtype)0x23 /* SysV */ # define ACS_BLOCK (chtype)0x23 /* SysV */ /* the following definitions can be used if you have set raw_output() or are using the PDCurses *raw*() functions */ # if 0 # define ACS_DIAMOND (chtype)0x04 /* SysV */ # define ACS_LARROW (chtype)0x1b /* SysV */ # define ACS_RARROW (chtype)0x1a /* SysV */ # define ACS_DARROW (chtype)0x19 /* SysV */ # define ACS_UARROW (chtype)0x18 /* SysV */ # define ACS_BOARD (chtype)0xb0 /* SysV */ # define ACS_LANTERN (chtype)0x0f /* SysV */ # define ACS_BLOCK (chtype)0xdb /* SysV */ # endif #endif /* colour attributes */ #if defined (XCURSES) # define COLOR_BLACK 0 # define COLOR_RED 1 # define COLOR_GREEN 2 # define COLOR_YELLOW 3 # define COLOR_BLUE 4 # define COLOR_MAGENTA 5 # define COLOR_CYAN 6 # define COLOR_WHITE 7 #endif #if defined(DOS) || defined(OS2) # define COLOR_BLACK 0 # define COLOR_BLUE 1 # define COLOR_GREEN 2 # define COLOR_CYAN 3 # define COLOR_RED 4 # define COLOR_MAGENTA 5 # define COLOR_YELLOW 6 # define COLOR_WHITE 7 #endif #if defined(WIN32) # define MS_MOUSE_MOVED 0x0001 /* * These defines taken directly from windows.h to reduce * compilation time by only #include'ing * when absolutely necesssary. Cygnus-W32 #defines all of these * so we need to check for that. */ # ifndef FOREGROUND_BLUE # define FOREGROUND_BLUE 0x0001 # endif # ifndef FOREGROUND_GREEN # define FOREGROUND_GREEN 0x0002 # endif # ifndef FOREGROUND_RED # define FOREGROUND_RED 0x0004 # endif # ifndef FOREGROUND_INTENSITY # define FOREGROUND_INTENSITY 0x0008 /* BOLD */ # endif # ifndef BACKGROUND_BLUE # define BACKGROUND_BLUE 0x0010 # endif # ifndef BACKGROUND_GREEN # define BACKGROUND_GREEN 0x0020 # endif # ifndef BACKGROUND_RED # define BACKGROUND_RED 0x0040 # endif # ifndef BACKGROUND_INTENSITY # define BACKGROUND_INTENSITY 0x0080 /* BLINK */ # endif # define COLOR_BLACK 0 # define COLOR_BLUE FOREGROUND_BLUE # define COLOR_RED FOREGROUND_RED # define COLOR_GREEN FOREGROUND_GREEN # define COLOR_CYAN FOREGROUND_BLUE | FOREGROUND_GREEN # define COLOR_MAGENTA FOREGROUND_RED | FOREGROUND_BLUE # define COLOR_YELLOW FOREGROUND_RED | FOREGROUND_GREEN # define COLOR_WHITE FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE #endif #ifdef CHTYPE_LONG #define COLOR_PAIR(n) ((chtype)(n) << 24) #define PAIR_NUMBER(n) (((n) & A_COLOR) >> 24) #else #define COLOR_PAIR(n) (((n) << 11) & A_ATTRIBUTES) #define PAIR_NUMBER(n) (((n) & A_COLOR) >> 11) #endif /*---------------------------------------------------------------------- * * Function and Keypad Key Definitions. * Many are just for compatibility. * */ #define KEY_MIN 0x101 /* Minimum curses key value */ #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. space for */ #define KEY_F(n) (KEY_F0+(n))/* 64 keys are 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 */ #define ALT_0 0x197 /* Alt-0 PC only */ #define ALT_1 0x198 /* Alt-1 PC only */ #define ALT_2 0x199 /* Alt-2 PC only */ #define ALT_3 0x19a /* Alt-3 PC only */ #define ALT_4 0x19b /* Alt-4 PC only */ #define ALT_5 0x19c /* Alt-5 PC only */ #define ALT_6 0x19d /* Alt-6 PC only */ #define ALT_7 0x19e /* Alt-7 PC only */ #define ALT_8 0x19f /* Alt-8 PC only */ #define ALT_9 0x1a0 /* Alt-9 PC only */ #define ALT_A 0x1a1 /* Alt-A PC only */ #define ALT_B 0x1a2 /* Alt-B PC only */ #define ALT_C 0x1a3 /* Alt-C PC only */ #define ALT_D 0x1a4 /* Alt-D PC only */ #define ALT_E 0x1a5 /* Alt-E PC only */ #define ALT_F 0x1a6 /* Alt-F PC only */ #define ALT_G 0x1a7 /* Alt-G PC only */ #define ALT_H 0x1a8 /* Alt-H PC only */ #define ALT_I 0x1a9 /* Alt-I PC only */ #define ALT_J 0x1aa /* Alt-J PC only */ #define ALT_K 0x1ab /* Alt-K PC only */ #define ALT_L 0x1ac /* Alt-L PC only */ #define ALT_M 0x1ad /* Alt-M PC only */ #define ALT_N 0x1ae /* Alt-N PC only */ #define ALT_O 0x1af /* Alt-O PC only */ #define ALT_P 0x1b0 /* Alt-P PC only */ #define ALT_Q 0x1b1 /* Alt-Q PC only */ #define ALT_R 0x1b2 /* Alt-R PC only */ #define ALT_S 0x1b3 /* Alt-S PC only */ #define ALT_T 0x1b4 /* Alt-T PC only */ #define ALT_U 0x1b5 /* Alt-U PC only */ #define ALT_V 0x1b6 /* Alt-V PC only */ #define ALT_W 0x1b7 /* Alt-W PC only */ #define ALT_X 0x1b8 /* Alt-X PC only */ #define ALT_Y 0x1b9 /* Alt-Y PC only */ #define ALT_Z 0x1ba /* Alt-Z PC only */ #define CTL_LEFT 0x1bb /* Control-Left-Arrow PC only */ #define CTL_RIGHT 0x1bc /* Control-Right-Arrow PC only */ #define CTL_PGUP 0x1bd /* Control-PgUp PC only */ #define CTL_PGDN 0x1be /* Control-PgDn PC only */ #define CTL_HOME 0x1bf /* Control-Home PC only */ #define CTL_END 0x1c0 /* Control-End PC only */ #if defined(FLEXOS) # define KEY_MOUSE 0x1c1 /* "mouse" key */ # define KEY_A1 KEY_HOME/* upper left on Virtual keypad */ # define KEY_A2 KEY_UP /* upper middle on Virt. keypad */ # define KEY_A3 KEY_PPAGE/* upper right on Vir. keypad */ # define KEY_B1 KEY_LEFT/* middle left on Virt. keypad */ # define KEY_B2 0x00 /* center on Virt. keypad */ # define KEY_B3 KEY_RIGHT/* middle right on Vir. keypad */ # define KEY_C1 KEY_LL /* lower left on Virt. keypad */ # define KEY_C2 KEY_DOWN /* lower middle on Virt. keypad */ # define KEY_C3 KEY_NPAGE /* lower right on Vir. keypad */ # define KEY_MAX KEY_MOUSE /* Maximum curses key */ #endif #if defined(DOS) || defined (OS2) || defined(XCURSES) || defined(WIN32) # 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 Vir. 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 Vir. 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 Vir. 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 /* alt-tab */ # define ALT_MINUS 0x1e4 /* alt-minus */ # define ALT_EQUAL 0x1e5 /* alt-equal */ # define ALT_HOME 0x1e6 /* alt-home */ # define ALT_PGUP 0x1e7 /* alt-pgup */ # define ALT_PGDN 0x1e8 /* alt-pgdn */ # define ALT_END 0x1e9 /* alt-end */ # 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 /* ctl-keypad 0 */ # define CTL_PAD0 0x1fb /* ctl-keypad 0 */ # define CTL_PAD1 0x1fc /* ctl-keypad 1 */ # define CTL_PAD2 0x1fd /* ctl-keypad 2 */ # define CTL_PAD3 0x1fe /* ctl-keypad 3 */ # define CTL_PAD4 0x1ff /* ctl-keypad 4 */ # define CTL_PAD5 0x200 /* ctl-keypad 5 */ # define CTL_PAD6 0x201 /* ctl-keypad 6 */ # define CTL_PAD7 0x202 /* ctl-keypad 7 */ # define CTL_PAD8 0x203 /* ctl-keypad 8 */ # define CTL_PAD9 0x204 /* ctl-keypad 9 */ # define ALT_PAD0 0x205 /* ctl-keypad 0 */ # define ALT_PAD1 0x206 /* ctl-keypad 1 */ # define ALT_PAD2 0x207 /* ctl-keypad 2 */ # define ALT_PAD3 0x208 /* ctl-keypad 3 */ # define ALT_PAD4 0x209 /* ctl-keypad 4 */ # define ALT_PAD5 0x20a /* ctl-keypad 5 */ # define ALT_PAD6 0x20b /* ctl-keypad 6 */ # define ALT_PAD7 0x20c /* ctl-keypad 7 */ # define ALT_PAD8 0x20d /* ctl-keypad 8 */ # define ALT_PAD9 0x20e /* ctl-keypad 9 */ # define CTL_DEL 0x20f /* clt-delete */ # define ALT_BSLASH 0x210 /* alt-back slash */ # 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_MAX 0x224 /* Maximum curses key */ #endif /*---------------------------------------------------------------------- * PDCurses function declarations */ #ifdef HAVE_PROTO int PDC_CDECL addchnstr( chtype *, int ); int PDC_CDECL baudrate( void ); int PDC_CDECL beep( void ); int PDC_CDECL border( chtype, chtype, chtype, chtype, chtype, chtype, chtype, chtype ); int PDC_CDECL can_change_color ( void ); int PDC_CDECL clearok( WINDOW*, bool ); int PDC_CDECL color_content( short, short*, short*, short* ); int PDC_CDECL copywin( WINDOW*, WINDOW*, int, int, int, int, int, int, int ); int PDC_CDECL curs_set( int ); int PDC_CDECL def_prog_mode( void ); int PDC_CDECL def_shell_mode( void ); int PDC_CDECL delay_output( int ); int PDC_CDECL delwin( WINDOW* ); WINDOW* PDC_CDECL derwin( WINDOW*, int, int, int, int ); int PDC_CDECL doupdate( void ); WINDOW* PDC_CDECL dupwin( WINDOW* ); int PDC_CDECL endwin( void ); int PDC_CDECL erase( void ); char PDC_CDECL erasechar( void ); int PDC_CDECL flash( void ); int PDC_CDECL flushinp( void ); int PDC_CDECL getsyx( int*, int* ); int PDC_CDECL halfdelay( int ); bool PDC_CDECL has_colors( void ); int PDC_CDECL hline( chtype, int ); int PDC_CDECL immedok( WINDOW*, bool ); int PDC_CDECL inchnstr( chtype *, int ); int PDC_CDECL init_color( short, short, short, short ); int PDC_CDECL init_pair( short, short, short ); WINDOW* PDC_CDECL initscr( void ); #ifdef XCURSES WINDOW* PDC_CDECL Xinitscr( int, char ** ); #endif int PDC_CDECL intrflush( WINDOW*, bool ); int PDC_CDECL is_linetouched(WINDOW *,int); int PDC_CDECL is_wintouched(WINDOW *); char* PDC_CDECL keyname( int ); char PDC_CDECL killchar( void ); char* PDC_CDECL longname( void ); int PDC_CDECL meta( WINDOW*, bool ); int PDC_CDECL mvcur( int, int, int, int ); int PDC_CDECL mvderwin( WINDOW*, int, int ); #ifdef HAVE_STDARG_H int PDC_CDECL mvprintw( int, int, char*,... ); int PDC_CDECL mvscanw( int, int, char*,... ); #endif int PDC_CDECL mvwaddnstr( WINDOW*,int,int,char*,int ); int PDC_CDECL mvwin( WINDOW*, int, int ); int PDC_CDECL mvwinsertln( WINDOW*, int, int ); #ifdef HAVE_STDARG_H int PDC_CDECL mvwprintw( WINDOW*, int, int, char*,... ); int PDC_CDECL mvwscanw( WINDOW*, int, int, char*,... ); #endif WINDOW* PDC_CDECL newpad( int, int ); SCREEN* PDC_CDECL newterm( char*, FILE*, FILE* ); WINDOW* PDC_CDECL newwin( int, int, int, int ); int PDC_CDECL noraw( void ); int PDC_CDECL notimeout( WINDOW *, bool ); int PDC_CDECL overlay( WINDOW*, WINDOW* ); int PDC_CDECL overwrite( WINDOW*, WINDOW* ); int PDC_CDECL pair_content( int, short*, short* ); int PDC_CDECL pechochar( WINDOW *, chtype ); int PDC_CDECL pnoutrefresh( WINDOW*, int, int, int, int, int, int ); int PDC_CDECL prefresh( WINDOW*, int, int, int, int, int, int ); #ifdef HAVE_STDARG_H int PDC_CDECL printw( char*,... ); int PDC_CDECL scanw( char*,... ); #endif int PDC_CDECL raw( void ); int PDC_CDECL refresh( void ); int PDC_CDECL reset_prog_mode( void ); int PDC_CDECL reset_shell_mode( void ); int PDC_CDECL resetty( void ); int PDC_CDECL ripoffline(int, int (*)(WINDOW *, int)); int PDC_CDECL savetty( void ); int PDC_CDECL sb_init(void); int PDC_CDECL sb_set_horz(int, int, int); int PDC_CDECL sb_set_vert(int, int, int); int PDC_CDECL sb_get_horz(int *, int *, int *); int PDC_CDECL sb_get_vert(int *, int *, int *); int PDC_CDECL sb_refresh(void); int PDC_CDECL scroll( WINDOW* ); SCREEN* PDC_CDECL set_term( SCREEN* ); int PDC_CDECL setsyx( int, int ); int PDC_CDECL start_color( void ); int PDC_CDECL slk_init(int); int PDC_CDECL slk_set(int, char *, int); int PDC_CDECL slk_refresh(void); int PDC_CDECL slk_noutrefresh(void); char* PDC_CDECL slk_label(int); int PDC_CDECL slk_clear(void); int PDC_CDECL slk_restore(void); int PDC_CDECL slk_touch(void); int PDC_CDECL slk_attron(attr_t); int PDC_CDECL slk_attrset(attr_t); int PDC_CDECL slk_attroff(attr_t); WINDOW* PDC_CDECL subpad( WINDOW*, int, int, int, int ); WINDOW* PDC_CDECL subwin( WINDOW*, int, int, int, int ); int PDC_CDECL syncok(WINDOW*, bool); attr_t PDC_CDECL termattrs( void ); char* PDC_CDECL termname( void ); int PDC_CDECL touchline( WINDOW*, int ,int ); int PDC_CDECL touchwin( WINDOW* ); #if !defined (CURSES_LIBRARY) void PDC_CDECL traceoff( void ); void PDC_CDECL traceon( void ); #endif int PDC_CDECL typeahead( int ); char* PDC_CDECL unctrl( chtype ); int PDC_CDECL vline( chtype, int ); int PDC_CDECL waddchnstr( WINDOW*, chtype*, int ); int PDC_CDECL waddnstr( WINDOW*, char*, int ); int PDC_CDECL waddstr( WINDOW*, char* ); int PDC_CDECL wattroff( WINDOW*, attr_t ); int PDC_CDECL wattron( WINDOW*, attr_t ); int PDC_CDECL wattrset( WINDOW*, attr_t ); int PDC_CDECL wbkgd(WINDOW*, chtype); void PDC_CDECL wbkgdset(WINDOW*, chtype); int PDC_CDECL wborder( WINDOW*, chtype, chtype, chtype, chtype, chtype, chtype, chtype, chtype ); int PDC_CDECL wclear( WINDOW* ); int PDC_CDECL wclrtobot( WINDOW* ); int PDC_CDECL wclrtoeol( WINDOW* ); void PDC_CDECL wcursyncup(WINDOW*); int PDC_CDECL wdelch( WINDOW* ); int PDC_CDECL wdeleteln( WINDOW* ); int PDC_CDECL werase( WINDOW* ); int PDC_CDECL wgetch( WINDOW* ); int PDC_CDECL wgetnstr( WINDOW*, char*, int ); int PDC_CDECL wgetstr( WINDOW*, char* ); int PDC_CDECL whline( WINDOW*, chtype, int ); int PDC_CDECL winchnstr( WINDOW*, chtype*, int ); int PDC_CDECL winnstr( WINDOW*, char*, int ); int PDC_CDECL winsch( WINDOW*, chtype ); int PDC_CDECL winsdelln( WINDOW*, int ); int PDC_CDECL winsertln( WINDOW* ); int PDC_CDECL winsnstr( WINDOW*, char*, int ); int PDC_CDECL wmove( WINDOW*, int, int ); int PDC_CDECL wnoutrefresh( WINDOW* ); char PDC_CDECL wordchar( void ); #ifdef HAVE_STDARG_H int PDC_CDECL wprintw( WINDOW*, char*,... ); int PDC_CDECL wscanw( WINDOW*, char*,... ); #endif int PDC_CDECL wredrawln( WINDOW*, int ,int ); int PDC_CDECL wrefresh( WINDOW* ); int PDC_CDECL wscrl( WINDOW*, int ); int PDC_CDECL wsetscrreg( WINDOW*, int, int ); int PDC_CDECL wtimeout( WINDOW *, int ); int PDC_CDECL wtouchln(WINDOW *, int, int, int); void PDC_CDECL wsyncdown(WINDOW*); void PDC_CDECL wsyncup(WINDOW*); int PDC_CDECL wvline( WINDOW*, chtype, int ); #ifdef PDCURSES int PDC_CDECL raw_output( bool ); int PDC_CDECL resize_term( int, int ); WINDOW* PDC_CDECL resize_window( WINDOW*, int, int ); #endif #ifdef OBSOLETE_OR_TBD char PDC_CDECL breakchar( /* void */ ); int PDC_CDECL cursoff( /* void */ ); int PDC_CDECL curson( /* void */ ); int PDC_CDECL gettmode( /* void */ ); int PDC_CDECL mvaddrawch( /* int, int, chtype */ ); int PDC_CDECL mvaddrawstr( /* int, int, char* */ ); int PDC_CDECL mvwinsrawch( /* WINDOW*, int, int, chtype */ ); int PDC_CDECL mvinsrawch( /* int, int, chtype */ ); int PDC_CDECL saveoldterm( /* void */ ); int PDC_CDECL tabsize( /* int */ ); int PDC_CDECL waddrawstr( /* WINDOW*, char* */ ); int PDC_CDECL wtabsize( /* WINDOW*, int */ ); int PDC_CDECL win_print( /* WINDOW*, int */ ); #endif #ifdef XCURSES void XCursesExit( void ); int nocbreak( void ); int cbreak( void ); int nocrmode( void ); int crmode( void ); int noecho( void ); int echo( void ); int nodelay( WINDOW *,bool ); #endif int PDC_CDECL mouse_set( unsigned long ); int PDC_CDECL mouse_on( unsigned long ); int PDC_CDECL mouse_off( unsigned long ); int PDC_CDECL request_mouse_pos( void ); int PDC_CDECL map_button( unsigned long ); void PDC_CDECL wmouse_position( WINDOW *, int *, int * ); unsigned long PDC_CDECL getmouse( void ); unsigned long PDC_CDECL getbmap( void ); /* * Keep the compiler happy with our macros below... */ int PDC_CDECL PDC_chadd( WINDOW*, chtype, bool, bool ); int PDC_CDECL PDC_chins( WINDOW*, chtype, bool ); int PDC_CDECL PDC_ungetch( int ); void PDC_CDECL PDC_set_title( char * ); int PDC_CDECL PDC_getclipboard( char **, long * ); int PDC_CDECL PDC_setclipboard( char *, long ); int PDC_CDECL PDC_freeclipboard( char * ); int PDC_CDECL PDC_clearclipboard( void ); unsigned long PDC_CDECL PDC_get_input_fd( void ); int PDC_CDECL PDC_curs_set( int ); unsigned long PDC_CDECL PDC_get_key_modifiers( void ); int PDC_CDECL PDC_wunderline( WINDOW*, int, bool ); int PDC_CDECL PDC_wleftline( WINDOW*, int, bool ); int PDC_CDECL PDC_wrightline( WINDOW*, int, bool ); int PDC_CDECL PDC_set_line_color( short ); #else int PDC_CDECL addchnstr( /* chtype *, int */ ); int PDC_CDECL baudrate( /* void */ ); int PDC_CDECL beep( /* void */ ); int PDC_CDECL border( /* chtype, chtype, chtype, chtype, chtype, chtype, chtype, chtype */ ); int PDC_CDECL can_change_color ( /* void */ ); int PDC_CDECL clearok( /* WINDOW*, bool */ ); int PDC_CDECL color_content( /* int, short*, short*, short* */ ); int PDC_CDECL copywin( /* WINDOW*, WINDOW*, int, int, int, int, int, int, int */ ); int PDC_CDECL curs_set( /* int */ ); int PDC_CDECL def_prog_mode( /* void */ ); int PDC_CDECL def_shell_mode( /* void */ ); int PDC_CDECL delay_output( /* int */ ); int PDC_CDECL delwin( /* WINDOW* */ ); WINDOW* PDC_CDECL derwin( /* WINDOW*, int, int, int, int */ ); int PDC_CDECL doupdate( /* void */ ); WINDOW* PDC_CDECL dupwin( /* WINDOW* */ ); int PDC_CDECL endwin( /* void */ ); int PDC_CDECL erase( /* void */ ); char PDC_CDECL erasechar( /* void */ ); int PDC_CDECL flash( /* void */ ); int PDC_CDECL flushinp( /* void */ ); int PDC_CDECL getsyx( /* int*, int* */ ); int PDC_CDECL halfdelay( /* int */ ); bool PDC_CDECL has_colors( /* void */ ); int PDC_CDECL hline( /* chtype, int */ ); int PDC_CDECL immedok( /* WINDOW*, bool */ ); int PDC_CDECL inchnstr( /* chtype *, int */ ); int PDC_CDECL init_color( /* short, short, short, short */ ); int PDC_CDECL init_pair( /* short, short, short */ ); WINDOW* PDC_CDECL initscr( /* void */ ); #ifdef XCURSES WINDOW* PDC_CDECL Xinitscr( /* int, char ** */ ); #endif int PDC_CDECL intrflush( /* WINDOW*, bool */ ); int PDC_CDECL is_linetouched( /*WINDOW *,int*/ ); int PDC_CDECL is_wintouched( /*WINDOW **/ ); char* PDC_CDECL keyname( /* int */ ); char PDC_CDECL killchar( /* void */ ); char* PDC_CDECL longname( /* void */ ); int PDC_CDECL meta( /* WINDOW*, bool */ ); int PDC_CDECL mvcur( /* int, int, int, int */ ); int PDC_CDECL mvderwin( /* WINDOW*, int, int */ ); int PDC_CDECL mvprintw( /* int, int, char*,... */ ); int PDC_CDECL mvscanw( /* int, int, char*,... */ ); int PDC_CDECL mvwaddnstr(/* WINDOW*,int,int,char*,int */ ); int PDC_CDECL mvwin( /* WINDOW*, int, int */ ); int PDC_CDECL mvwinsertln( /* WINDOW*, int, int */ ); int PDC_CDECL mvwprintw( /* WINDOW*, int, int, char*,... */ ); int PDC_CDECL mvwscanw( /* WINDOW*, int, int, char*,... */ ); WINDOW* PDC_CDECL newpad( /* int, int */ ); SCREEN* PDC_CDECL newterm( /* char*, FILE*, FILE* */ ); WINDOW* PDC_CDECL newwin( /* int, int, int, int */ ); int PDC_CDECL noraw( /* void */ ); int PDC_CDECL notimeout( /* WINDOW *, bool */ ); int PDC_CDECL overlay( /* WINDOW*, WINDOW* */ ); int PDC_CDECL overwrite( /* WINDOW*, WINDOW* */ ); int PDC_CDECL pair_content( /* int, short*, short* */ ); int PDC_CDECL pechochar( /* WINDOW *pad, chtype ch */ ); int PDC_CDECL pnoutrefresh( /* WINDOW*, int, int, int, int, int, int */ ); int PDC_CDECL prefresh( /* WINDOW*, int, int, int, int, int, int */ ); int PDC_CDECL printw( /* char*,... */ ); int PDC_CDECL raw( /* void */ ); int PDC_CDECL refresh( /* void */ ); int PDC_CDECL reset_prog_mode( /* void */ ); int PDC_CDECL reset_shell_mode( /* void */ ); int PDC_CDECL resetty( /* void */ ); int PDC_CDECL ripoffline( /* int, int (*)(WINDOW *, int) */); int PDC_CDECL savetty( /* void */ ); int PDC_CDECL sb_init( /* void */ ); int PDC_CDECL sb_set_horz( /* int, int, int */ ); int PDC_CDECL sb_set_vert( /* int, int, int */ ); int PDC_CDECL sb_get_horz( /* int *, int *, int * */ ); int PDC_CDECL sb_get_vert( /* int *, int *, int * */ ); int PDC_CDECL sb_refresh( /* void */ ); int PDC_CDECL scanw( /* char*,... */ ); int PDC_CDECL scroll( /* WINDOW* */ ); int PDC_CDECL setsyx( /* int, int */ ); SCREEN* PDC_CDECL set_term( /* SCREEN* */ ); int PDC_CDECL slk_init(/* int */); int PDC_CDECL slk_set(/* int, char *, int */); int PDC_CDECL slk_refresh(/* void */); int PDC_CDECL slk_noutrefresh(/* void */); char* PDC_CDECL slk_label(/* int */); int PDC_CDECL slk_clear(/* void */); int PDC_CDECL slk_restore(/* void */); int PDC_CDECL slk_touch(/* void */); int PDC_CDECL slk_attron(/* attr_t */); int PDC_CDECL slk_attrset(/* attr_t */); int PDC_CDECL slk_attroff(/* attr_t */); int PDC_CDECL start_color( /* void */ ); WINDOW* PDC_CDECL subpad( /* WINDOW*, int, int, int, int */ ); WINDOW* PDC_CDECL subwin( /* WINDOW*, int, int, int, int */ ); int PDC_CDECL syncok(/* WINDOW*, bool */); attr_t PDC_CDECL termattrs( /* void */ ); char* PDC_CDECL termname( /* void */ ); int PDC_CDECL touchline( /* WINDOW*, int ,int */ ); int PDC_CDECL touchwin( /* WINDOW* */ ); #if !defined (CURSES_LIBRARY) void PDC_CDECL traceoff(/* void */); void PDC_CDECL traceon(/* void */); #endif int PDC_CDECL typeahead( /* int */ ); char* PDC_CDECL unctrl( /* chtype */ ); int PDC_CDECL vline( /* chtype, int */ ); int PDC_CDECL waddchnstr( /* WINDOW*, chtype*, int */ ); int PDC_CDECL waddnstr( /* WINDOW*, char*, int */ ); int PDC_CDECL waddstr( /* WINDOW*, char* */ ); int PDC_CDECL wattroff( /* WINDOW*, attr_t */ ); int PDC_CDECL wattron( /* WINDOW*, attr_t */ ); int PDC_CDECL wattrset( /* WINDOW*, attr_t */ ); int PDC_CDECL wbkgd( /*WINDOW*, chtype*/ ); void PDC_CDECL wbkgdset( /*WINDOW*, chtype*/ ); int PDC_CDECL wborder( /* WINDOW*, chtype, chtype, chtype, chtype, chtype, chtype, chtype, chtype */ ); int PDC_CDECL wclear( /* WINDOW* */ ); int PDC_CDECL wclrtobot( /* WINDOW* */ ); int PDC_CDECL wclrtoeol( /* WINDOW* */ ); void PDC_CDECL wcursyncup(/* WINDOW* */); int PDC_CDECL wdelch( /* WINDOW* */ ); int PDC_CDECL wdeleteln( /* WINDOW* */ ); int PDC_CDECL werase( /* WINDOW* */ ); int PDC_CDECL wgetch( /* WINDOW* */ ); int PDC_CDECL wgetnstr( /* WINDOW*, char*, int */ ); int PDC_CDECL wgetstr( /* WINDOW*, char* */ ); int PDC_CDECL whline( /* WINDOW*, chtype, int */ ); int PDC_CDECL winchnstr( /* WINDOW*, chtype*, int */ ); int PDC_CDECL winnstr( /* WINDOW*, char*, int */ ); int PDC_CDECL winsch( /* WINDOW*, chtype */ ); int PDC_CDECL winsdelln( /* WINDOW*, int */ ); int PDC_CDECL winsertln( /* WINDOW* */ ); int PDC_CDECL winsnstr( /* WINDOW*, char*, int */ ); int PDC_CDECL wmove( /* WINDOW*, int, int */ ); int PDC_CDECL wnoutrefresh( /* WINDOW* */ ); char PDC_CDECL wordchar( /* void */ ); int PDC_CDECL wprintw( /* WINDOW*, char*,... */ ); int PDC_CDECL wredrawln( /* WINDOW*, int ,int */ ); int PDC_CDECL wrefresh( /* WINDOW* */ ); int PDC_CDECL wscanw( /* WINDOW*, char*,... */ ); int PDC_CDECL wscrl( /* WINDOW*, int */ ); int PDC_CDECL wsetscrreg( /* WINDOW*, int, int */ ); int PDC_CDECL wtimeout( /* WINDOW *, int */ ); int PDC_CDECL wtouchln( /*WINDOW *, int, int, int*/ ); void PDC_CDECL wsyncdown(/* WINDOW* */); void PDC_CDECL wsyncup(/* WINDOW* */); int PDC_CDECL wvline( /* WINDOW*, chtype, int */ ); #ifdef PDCURSES int PDC_CDECL raw_output( /* bool */ ); int PDC_CDECL resize_term( /* int, int */ ); WINDOW* PDC_CDECL resize_window( /* WINDOW*, int, int */ ); #endif #ifdef OBSOLETE_OR_TBD char PDC_CDECL breakchar( /* void */ ); int PDC_CDECL cursoff( /* void */ ); int PDC_CDECL curson( /* void */ ); int PDC_CDECL gettmode( /* void */ ); int PDC_CDECL mvaddrawch( /* int, int, chtype */ ); int PDC_CDECL mvaddrawstr( /* int, int, char* */ ); int PDC_CDECL mvwinsrawch( /* WINDOW*, int, int, chtype */ ); int PDC_CDECL mvinsrawch( /* int, int, chtype */ ); int PDC_CDECL saveoldterm( /* void */ ); int PDC_CDECL tabsize( /* int */ ); int PDC_CDECL waddrawstr( /* WINDOW*, char* */ ); int PDC_CDECL wtabsize( /* WINDOW*, int */ ); int PDC_CDECL win_print( /* WINDOW*, int */ ); #endif #ifdef XCURSES void XCursesExit(/* void */); int nocbreak( /* void */ ); int cbreak( /* void */ ); int nocrmode( /* void */ ); int crmode( /* void */ ); int noecho( /* void */ ); int echo( /* void */ ); int nodelay( /* WINDOW *,bool */ ); #endif int PDC_CDECL mouse_set( /* long */ ); int PDC_CDECL mouse_on( /* long */ ); int PDC_CDECL mouse_off( /* long */ ); int PDC_CDECL request_mouse_pos( /* void */ ); int PDC_CDECL map_button( /* unsigned long */ ); void PDC_CDECL wmouse_position( /* WINDOW *, int *, int * */ ); unsigned long PDC_CDECL getmouse( /* void */ ); unsigned long PDC_CDECL getbmap( /* void */ ); /* * Keep the compiler happy with our macros below... */ int PDC_CDECL PDC_chadd( /* WINDOW*, chtype, bool, bool */ ); int PDC_CDECL PDC_chins( /* WINDOW*, chtype, bool */ ); int PDC_CDECL PDC_ungetch( /* int */ ); void PDC_CDECL PDC_set_title( /* char * */ ); int PDC_CDECL PDC_getclipboard( /* char **, long * */ ); int PDC_CDECL PDC_setclipboard( /* char *, long */ ); int PDC_CDECL PDC_clearclipboard( /* void */ ); unsigned long PDC_CDECL PDC_get_input_fd( /* void */ ); int PDC_CDECL PDC_curs_set( /* int */ ); unsigned long PDC_CDECL PDC_get_key_modifiers( /* void */ ); int PDC_CDECL PDC_wunderline( /* WINDOW*, int, bool */ ); int PDC_CDECL PDC_wleftline( /* WINDOW*, int, bool */ ); int PDC_CDECL PDC_wrightline( /* WINDOW*, int, bool */ ); int PDC_CDECL PDC_set_line_color( /* short */ ); #endif #ifndef max # define max(a,b) (((a) > (b)) ? (a) : (b)) #endif #ifndef min # define min(a,b) (((a) < (b)) ? (a) : (b)) #endif /* * Functions defined as macros */ #define addch( c ) waddch( stdscr, c ) #define addchstr( c ) addchnstr( c, -1 ) #define addstr(str) waddstr( stdscr, str ) #define addnstr(str, n) waddnstr( stdscr, str, n ) #define attroff(attr) wattroff( stdscr, attr ) #define attron(attr) wattron( stdscr, attr ) #define attrset(attr) wattrset( stdscr, attr ) #define bkgd(c) wbkgd(stdscr,c) #define bkgdset(c) wbkgdset(stdscr,c) #define border(ls,rs,ts,bs,tl,tr,bl,br) wborder(stdscr,ls,rs,ts,bs,tl,tr,bl,br) #define box( w, v, h ) wborder( w, v, v, h, h, 0, 0, 0, 0 ) #define clear() wclear( stdscr ) #define clrtobot() wclrtobot( stdscr ) #define clrtoeol() wclrtoeol( stdscr ) #define delch() wdelch( stdscr ) #define deleteln() wdeleteln( stdscr ) #define derwin(w,nl,nc,by,bx) subwin((w),(nl),(nc),(by+(w)->_begy),(bx+(w)->_begx)) #define draino(ms) delay_output(ms) #define echochar(c) (addch((chtype)c)==ERR?ERR:refresh()) #define erase() werase( stdscr ) #define fixterm() reset_prog_mode() #define getbegx(w) (w)->_begx #define getbegy(w) (w)->_begy #define getbegyx(w,y,x) ( y = (w)->_begy, x = (w)->_begx ) #define getbkgd(w) ((w)->_bkgd) #define getch() wgetch(stdscr) #define getmaxx(w) (w)->_maxx #define getmaxy(w) (w)->_maxy #define getmaxyx(w,y,x) ( y = (w)->_maxy, x = (w)->_maxx ) #define getparx(w) (w)->_parx #define getpary(w) (w)->_pary #define getparyx(w,y,x) ( y = (w)->_pary, x = (w)->_parx ) #define getstr(str) wgetstr( stdscr, str ) #define getnstr(str,num) wgetnstr( stdscr, str, num ) #define getsyx(y,x) { if( curscr->_leaveit) (y)=(x)=-1; else getyx(curscr,(y),(x)); } #define getyx(w,y,x) ( y = (w)->_cury, x = (w)->_curx ) #define has_colors() ((SP->mono) ? FALSE : TRUE) #define idcok(w,flag) OK #define idlok(w,flag) OK #define inch() (stdscr->_y[stdscr->_cury][stdscr->_curx]) #define inchstr( c ) inchnstr( c, stdscr->_maxx-stdscr->_curx ) #define innstr(str,n) winnstr(stdscr,(str),(n)) #define insch( c ) winsch( stdscr, c ) #define insdelln(n) winsdelln(stdscr,n) #define insertln() winsertln( stdscr ) #define insnstr(s,n) winsnstr(stdscr,s,n) #define insstr(s) winsnstr(stdscr,s,(-1)) #define instr(str) winnstr(stdscr,(str),stdscr->_maxx) #define isendwin() ((SP->alive) ? FALSE : TRUE) #define is_termresized() (SP->resized) #define keypad(w,flag) (w->_use_keypad = flag, OK) #define leaveok(w,flag) (w->_leaveit = flag, OK) #define move(y,x) wmove( stdscr, y, x ) #define mvaddch(y,x,c) (move( y, x )==ERR?ERR:addch( c )) #define mvaddchstr(y,x,c) (move( y, x )==ERR?ERR:addchnstr( c, -1 )) #define mvaddchnstr(y,x,c,n) (move( y, x )==ERR?ERR:addchnstr( c, n )) #define mvaddstr(y,x,str) (move( y, x )==ERR?ERR:addstr( str )) #define mvaddnstr(y,x,str,n) (move( y, x )==ERR?ERR:addnstr( str, n )) #define mvdelch(y,x) (move( y, x )==ERR?ERR:wdelch( stdscr )) #define mvgetch(y,x) (move( y, x )==ERR?ERR:wgetch(stdscr)) #define mvgetstr(y,x,str) (move( y, x )==ERR?ERR:wgetstr( stdscr, str )) #define mvinch(y,x) (move( y, x )==ERR?ERR:(stdscr->_y[y][x])) #define mvinchstr(y,x,c) (move( y, x )==ERR?ERR:inchnstr( c, stdscr->_maxx-stdscr->_curx )) #define mvinchnstr(y,x,c,n) (move( y, x )==ERR?ERR:inchnstr( c, n )) #define mvinsch(y,x,c) (move( y, x )==ERR?ERR:winsch( stdscr, c )) #define mvinsnstr(y,x,s,n) (move( y, x )==ERR?ERR:winsnstr(stdscr,s,n)) #define mvinsstr(y,x,s) (move( y, x )==ERR?ERR:winsnstr(stdscr,s,(-1))) #define mvinstr(y,x,str) (move( y, x )==ERR?ERR:winnstr(stdscr,(str),stdscr->_maxx)) #define mvinnstr(y,x,str,n) (move( y, x )==ERR?ERR:winnstr(stdscr,(str),(n))) #define mvwaddch(w,y,x,c) (wmove( w, y, x )==ERR?ERR:waddch( w, c )) #define mvwaddchstr(w,y,x,c) (wmove( w, y, x )==ERR?ERR:waddchnstr( w, c, -1 )) #define mvwaddchnstr(w,y,x,c,n) (wmove( w, y, x )==ERR?ERR:waddchnstr( w, c, n )) #define mvwaddrawch(w,y,x,c) (wmove( w, y, x )==ERR?ERR:waddrawch( w, c )) #define mvwaddrawstr(w,y,x,str) (wmove( w, y, x )==ERR?ERR:waddrawstr( w, str )) #define mvwaddstr(w,y,x,str) (wmove( w, y, x )==ERR?ERR:waddstr( w, str )) #define mvwdelch(w,y,x) (wmove( w, y, x )==ERR?ERR:wdelch( w )) #define mvwgetch(w,y,x) (wmove( w, y, x )==ERR?ERR:wgetch( w )) #define mvwgetstr(w,y,x,str) (wmove( w, y, x )==ERR?ERR:wgetstr( w, str )) #define mvwinch(w,y,x) (wmove( w, y, x )==ERR?ERR:((w)->_y[y][x])) #define mvwinchstr(w,y,x,c) (wmove( w, y, x )==ERR?ERR:winchnstr( w, c, (w)->_maxx-(w)->_curx )) #define mvwinchnstr(w,y,x,c,n) (wmove( w, y, x )==ERR?ERR:winchnstr( w, c, n )) #define mvwinsch(w,y,x,c) (wmove( w, y, x )==ERR?ERR:winsch( w, c )) #define mvwinstr(w,y,x,str) (wmove( w, y, x )==ERR?ERR:winnstr(w,str,(w)->_maxx)) #define mvwinnstr(w,y,x,str,n) (wmove( w, y, x )==ERR?ERR:winnstr(w,str,n)) #define mvwinsnstr(w,y,x,s,n) (wmove( w, y, x )==ERR?ERR:winsnstr(w,s,n)) #define mvwinsstr(w,y,x,s) (wmove( w, y, x )==ERR?ERR:winsnstr(w,s,(-1))) #define napms(ms) delay_output(ms) #define nl() (SP->autocr = TRUE) #define nonl() (SP->autocr = FALSE) #define redrawwin(w) wredrawln((w),0,(w)->_maxy) #define refresh() wrefresh( stdscr ) #define resetterm() reset_shell_mode() #define saveterm() def_prog_mode() #define scrl(n) wscrl(stdscr,n) #define scroll(w) wscrl((w),1) #define scrollok(w,flag) ((w)->_scroll = flag) #define setscrreg(top, bot) wsetscrreg( stdscr, top, bot ) #define setsyx(y,x) { if( (y)==-1 && (x)==-1) curscr->_leaveit=TRUE; else { curscr->_leaveit=FALSE;wmove(curscr,(y),(x));} } #define standend() wattrset(stdscr, A_NORMAL) #define standout() wattrset(stdscr, A_STANDOUT) #define timeout(n) wtimeout( stdscr, n ) #define touchline(w,y,n) wtouchln((w),(y),(n),TRUE) #define touchwin(w) wtouchln((w),0,(w)->_maxy,TRUE) #if defined (CURSES_LIBRARY) # define traceoff() {trace_on = FALSE;} # define traceon() {trace_on = TRUE;} #endif #define ungetch(ch) PDC_ungetch(ch) #define untouchwin(w) wtouchln((w),0,((w)->_maxy),FALSE) #define waddch(w, c) PDC_chadd( w, (chtype)c, (bool)!(SP->raw_out), TRUE ) #define waddchstr(w, c) (waddchnstr( w, c, -1 )) #define werase(w) (wmove((w),0,0), wclrtobot(w)) #define wclear(w) ((w)->_clear = TRUE , werase(w)) #define wechochar(w,c) (waddch(w,(chtype)c)==ERR?ERR:wrefresh(w)) #define winch(w) ((w)->_y[(w)->_cury][(w)->_curx]) #define winchstr(w, c) (winchnstr( w, c, (w)->_maxx-(w)->_curx ) ) #define winsstr(w,str) winsnstr((w),(str),(-1)) #define winstr(w,str) winnstr((w),str,(w)->_maxx) #define wstandend(w) wattrset(w, A_NORMAL) #define wstandout(w) wattrset(w, A_STANDOUT) #if !defined(UNIX) && !defined(XCURSES) /* set delaytenths = 0 added - William McBrine */ # define nocbreak() (SP->cbreak = FALSE, SP->delaytenths = 0) # define cbreak() (SP->cbreak = TRUE) # define nocrmode() (SP->cbreak = FALSE) # define crmode() (SP->cbreak = TRUE) # define noecho() (SP->echo = FALSE,OK) # define echo() (SP->echo = TRUE,OK) # define nodelay(w,flag) (w->_nodelay = flag) #endif #if defined(PDCURSES) # define addrawch( c ) waddrawch( stdscr, c ) # define addrawstr(str) waddrawstr( stdscr, str ) # define insrawch( c ) winsrawch( stdscr, c ) # define waddrawch(w, c) PDC_chadd( w, (chtype)c, FALSE, TRUE ) # define winsrawch(w, c) PDC_chins( w, (chtype)c, FALSE ) # define PDC_save_key_modifiers(flag) (SP->save_key_modifiers = flag) # define PDC_return_key_modifiers(flag) (SP->return_key_modifiers = flag) /* * FYI: Need to document these functions... */ # define title(s,a) wtitle( stdscr, s, (chtype)a ) # define titleofs(ofs) wtitleofs( stdscr, ofs ) # define wtitle(w,s,a) (w->_title = s, w->_title_attr = (chtype)a) # define wtitleofs(w,ofs) (w->_title_ofs = ofs) #endif /* * 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 << 0) #define PDC_KEY_MODIFIER_CONTROL (1 << 1) #define PDC_KEY_MODIFIER_ALT (1 << 2) #define PDC_KEY_MODIFIER_NUMLOCK (1 << 3) /* * Load up curspriv.h. This should be in the same place as * stdlib.h. We allow anyone who defines CURSES_LIBRARY to have * access to our internal routines. This provides quick * PC applications at the expense of portability. */ #if defined(CURSES_LIBRARY) # include #endif #include #endif /* __PDCURSES__ */ #if defined(__cplusplus) || defined(__cplusplus__) || defined(__CPLUSPLUS) # undef bool } #endif