From bb99924b24fdb2d3256095251294e226ce8f7180 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sat, 21 May 2011 20:32:53 +0200 Subject: [PATCH] Curses support across platforms! --- CMake/Modules/FindCurses.cmake | 190 +--- CMakeLists.txt | 41 + library/CMakeLists.txt | 1 + library/include/dfhack/extra/termutil.h | 2 +- pdcurses/curses.h | 1384 +++++++++++++++++++++++ pdcurses/panel.h | 58 + pdcurses/pdcurses.dll | Bin 0 -> 118784 bytes pdcurses/pdcurses.lib | Bin 0 -> 82782 bytes tools/playground/CMakeLists.txt | 4 + tools/supported/CMakeLists.txt | 32 +- tools/supported/veinlook.cpp | 5 +- 11 files changed, 1511 insertions(+), 206 deletions(-) create mode 100644 pdcurses/curses.h create mode 100644 pdcurses/panel.h create mode 100644 pdcurses/pdcurses.dll create mode 100644 pdcurses/pdcurses.lib diff --git a/CMake/Modules/FindCurses.cmake b/CMake/Modules/FindCurses.cmake index 468eff8e2..44e8ec3e3 100644 --- a/CMake/Modules/FindCurses.cmake +++ b/CMake/Modules/FindCurses.cmake @@ -1,177 +1,23 @@ -# - Find the curses include file and library -# -# CURSES_FOUND - system has Curses -# CURSES_INCLUDE_DIR - the Curses include directory -# CURSES_LIBRARIES - The libraries needed to use Curses -# CURSES_HAVE_CURSES_H - true if curses.h is available -# CURSES_HAVE_NCURSES_H - true if ncurses.h is available -# CURSES_HAVE_NCURSES_NCURSES_H - true if ncurses/ncurses.h is available -# CURSES_HAVE_NCURSES_CURSES_H - true if ncurses/curses.h is available -# CURSES_LIBRARY - set for backwards compatibility with 2.4 CMake -# -# Set CURSES_NEED_NCURSES to TRUE before the FIND_PACKAGE() command if NCurses -# functionality is required. +IF(Curses_FOUND) + SET(Curses_FIND_QUIETLY TRUE) +ENDIF() -# Set CURSES_NEED_WIDE to TRUE before the FIND_PACKAGE() command if unicode -# functionality is required +FIND_PATH(Curses_INCLUDE_PATH + NAMES ncurses.h curses.h + PATH_SUFFIXES ncurses + PATHS /usr/include /usr/local/include /usr/pkg/include +) -SET(CURSES_LIBRARY_NAME "curses") -SET(NCURSES_LIBRARY_NAME "ncurses") -IF(CURSES_NEED_WIDE) - SET(CURSES_LIBRARY_NAME "cursesw") - SET(NCURSES_LIBRARY_NAME "ncursesw") -ENDIF(CURSES_NEED_WIDE) +FIND_LIBRARY(Curses_LIBRARY + NAMES ncursesw + PATHS /lib /usr/lib /usr/local/lib /usr/pkg/lib +) -FIND_LIBRARY(CURSES_CURSES_LIBRARY "${CURSES_LIBRARY_NAME}") -#MESSAGE(STATUS "CURSES! " ${CURSES_CURSES_LIBRARY}) - -FIND_LIBRARY(CURSES_NCURSES_LIBRARY "${NCURSES_LIBRARY_NAME}") -#MESSAGE(STATUS "NCURSES! " ${CURSES_NCURSES_LIBRARY}) - -SET(CURSES_USE_NCURSES FALSE) - -IF(CURSES_NCURSES_LIBRARY AND NOT CURSES_CURSES_LIBRARY) - SET(CURSES_USE_NCURSES TRUE) -ENDIF(CURSES_NCURSES_LIBRARY AND NOT CURSES_CURSES_LIBRARY) - - -# Not sure the logic is correct here. -# If NCurses is required, use the function wsyncup() to check if the library -# has NCurses functionality (at least this is where it breaks on NetBSD). -# If wsyncup is in curses, use this one. -# If not, try to find ncurses and check if this has the symbol. -# Once the ncurses library is found, search the ncurses.h header first, but -# some web pages also say that even with ncurses there is not always a ncurses.h: -# http://osdir.com/ml/gnome.apps.mc.devel/2002-06/msg00029.html -# So at first try ncurses.h, if not found, try to find curses.h under the same -# prefix as the library was found, if still not found, try curses.h with the -# default search paths. -IF(CURSES_CURSES_LIBRARY AND CURSES_NEED_NCURSES) - INCLUDE(CheckLibraryExists) - CHECK_LIBRARY_EXISTS("${CURSES_CURSES_LIBRARY}" - wsyncup "" CURSES_CURSES_HAS_WSYNCUP) - - IF(CURSES_NCURSES_LIBRARY AND NOT CURSES_CURSES_HAS_WSYNCUP) - CHECK_LIBRARY_EXISTS("${CURSES_NCURSES_LIBRARY}" - wsyncup "" CURSES_NCURSES_HAS_WSYNCUP) - IF( CURSES_NCURSES_HAS_WSYNCUP) - SET(CURSES_USE_NCURSES TRUE) - ENDIF( CURSES_NCURSES_HAS_WSYNCUP) - ENDIF(CURSES_NCURSES_LIBRARY AND NOT CURSES_CURSES_HAS_WSYNCUP) -ENDIF(CURSES_CURSES_LIBRARY AND CURSES_NEED_NCURSES) - - -IF(NOT CURSES_USE_NCURSES) - FIND_FILE(CURSES_HAVE_CURSES_H curses.h ) - FIND_FILE(CURSES_HAVE_CURSESW_H cursesw.h ) - FIND_PATH(CURSES_CURSES_H_PATH curses.h ) - FIND_PATH(CURSES_CURSESW_H_PATH cursesw.h ) - GET_FILENAME_COMPONENT(_cursesLibDir "${CURSES_CURSES_LIBRARY}" PATH) - GET_FILENAME_COMPONENT(_cursesParentDir "${_cursesLibDir}" PATH) - - # for compatibility with older FindCurses.cmake this has to be in the cache - # FORCE must not be used since this would break builds which preload a cache wqith these variables set - SET(CURSES_INCLUDE_PATH "${CURSES_CURSES_H_PATH} ${CURSES_CURSESW_H_PATH}" - CACHE FILEPATH "The curses include path") - SET(CURSES_LIBRARY "${CURSES_CURSES_LIBRARY}" - CACHE FILEPATH "The curses library") -ELSE(NOT CURSES_USE_NCURSES) -# we need to find ncurses - GET_FILENAME_COMPONENT(_cursesLibDir "${CURSES_NCURSES_LIBRARY}" PATH) - GET_FILENAME_COMPONENT(_cursesParentDir "${_cursesLibDir}" PATH) - - FIND_FILE(CURSES_HAVE_NCURSES_H ncurses.h) - FIND_FILE(CURSES_HAVE_NCURSES_NCURSES_H ncurses/ncurses.h) - FIND_FILE(CURSES_HAVE_NCURSES_CURSES_H ncurses/curses.h) - FIND_FILE(CURSES_HAVE_CURSES_H curses.h - HINTS "${_cursesParentDir}/include") - - FIND_FILE(CURSES_HAVE_NCURSESW_H ncursesw.h) - FIND_FILE(CURSES_HAVE_NCURSESW_NCURSES_H ncursesw/ncurses.h) - FIND_FILE(CURSES_HAVE_NCURSESW_CURSES_H ncursesw/curses.h) - FIND_FILE(CURSES_HAVE_CURSESW_H cursesw.h - HINTS "${_cursesParentDir}/include") - - FIND_PATH(CURSES_NCURSES_INCLUDE_PATH ncurses.h ncurses/ncurses.h - ncurses/curses.h ncursesw.h ncursesw/ncurses.h ncursesw/curses.h cursesw.h) - FIND_PATH(CURSES_NCURSES_INCLUDE_PATH curses.h - HINTS "${_cursesParentDir}/include") - - # for compatibility with older FindCurses.cmake this has to be in the cache - # FORCE must not be used since this would break builds which preload - # a cache wqith these variables set - # only put ncurses include and library into - # variables if they are found - IF(CURSES_NCURSES_INCLUDE_PATH AND CURSES_NCURSES_LIBRARY) - SET(CURSES_INCLUDE_PATH "${CURSES_NCURSES_INCLUDE_PATH} ${CURSES_NCURSESW_INCLUDE_PATH}" - CACHE FILEPATH "The curses include path") - SET(CURSES_LIBRARY "${CURSES_NCURSES_LIBRARY}" - CACHE FILEPATH "The curses library") - ENDIF(CURSES_NCURSES_INCLUDE_PATH AND CURSES_NCURSES_LIBRARY) - -ENDIF(NOT CURSES_USE_NCURSES) - - - -FIND_LIBRARY(CURSES_EXTRA_LIBRARY cur_colr HINTS "${_cursesLibDir}") -FIND_LIBRARY(CURSES_EXTRA_LIBRARY cur_colr ) - -SET(CURSES_FORM_LIBRARY_NAME "form") -IF(CURSES_NEED_WIDE) - SET(CURSES_FORM_LIBRARY_NAME "formw") -ENDIF(CURSES_NEED_WIDE) - -FIND_LIBRARY(CURSES_CURSES_LIBRARY "${CURSES_LIBRARY_NAME}") -FIND_LIBRARY(CURSES_FORM_LIBRARY "${CURSES_FORM_LIBRARY_NAME}" HINTS "${_cursesLibDir}") -FIND_LIBRARY(CURSES_FORM_LIBRARY "${CURSES_FORM_LIBRARY_NAME}" ) - -# for compatibility with older FindCurses.cmake this has to be in the cache -# FORCE must not be used since this would break builds which preload a cache -# qith these variables set -SET(FORM_LIBRARY "${CURSES_FORM_LIBRARY}" - CACHE FILEPATH "The curses form library") - -# Need to provide the *_LIBRARIES -SET(CURSES_LIBRARIES ${CURSES_LIBRARY}) - -IF(CURSES_EXTRA_LIBRARY) - SET(CURSES_LIBRARIES ${CURSES_LIBRARIES} ${CURSES_EXTRA_LIBRARY}) -ENDIF(CURSES_EXTRA_LIBRARY) - -IF(CURSES_FORM_LIBRARY) - SET(CURSES_LIBRARIES ${CURSES_LIBRARIES} ${CURSES_FORM_LIBRARY}) -ENDIF(CURSES_FORM_LIBRARY) - -# Proper name is *_INCLUDE_DIR -SET(CURSES_INCLUDE_DIR ${CURSES_INCLUDE_PATH}) - -# handle the QUIETLY and REQUIRED arguments and set CURSES_FOUND to TRUE if -# all listed variables are TRUE -INCLUDE(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(Curses DEFAULT_MSG - CURSES_LIBRARY CURSES_INCLUDE_PATH) +IF (Curses_INCLUDE_PATH AND Curses_LIBRARY) + SET(Curses_FOUND TRUE) +ENDIF() MARK_AS_ADVANCED( - CURSES_INCLUDE_PATH - CURSES_LIBRARY - CURSES_CURSES_INCLUDE_PATH - CURSES_CURSES_LIBRARY - CURSES_NCURSES_INCLUDE_PATH - CURSES_NCURSES_LIBRARY - CURSES_EXTRA_LIBRARY - FORM_LIBRARY - CURSES_FORM_LIBRARY - CURSES_LIBRARIES - CURSES_INCLUDE_DIR - CURSES_CURSES_HAS_WSYNCUP - CURSES_NCURSES_HAS_WSYNCUP - CURSES_HAVE_CURSESW_H - CURSES_HAVE_CURSES_H - CURSES_HAVE_NCURSESW_CURSES_H - CURSES_HAVE_NCURSESW_H - CURSES_HAVE_NCURSESW_NCURSES_H - CURSES_HAVE_NCURSES_CURSES_H - CURSES_HAVE_NCURSES_H - CURSES_HAVE_NCURSES_NCURSES_H - ) - + Curses_INCLUDE_PATH + Curses_LIBRARY +) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6b8e7ab2e..d676741d2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,6 +51,7 @@ IF(WIN32) ELSE() set (DFHACK_INST_DEFAULT "linux") ENDIF() + SET( DFHACK_INSTALL ${DFHACK_INST_DEFAULT} CACHE STRING "Choose the install type: 'portable' for a portable zip or tar.gz package (windows default) @@ -150,6 +151,26 @@ include_directories (${dfhack_SOURCE_DIR}/library/shm/) include_directories (${dfhack_SOURCE_DIR}/library/depends/argstream/) include_directories (${dfhack_SOURCE_DIR}/library/depends/xgetopt/) +# handle curses library bull**** on multiple platforms. +IF(UNIX) + find_package(Curses QUIET) + if(Curses_FOUND) + add_library(curses SHARED IMPORTED) + set_property(TARGET curses PROPERTY IMPORTED_LOCATION ${Curses_LIBRARY}) + include_directories (${Curses_INCLUDE_PATH}) + endif() +ELSE() + add_library(curses SHARED IMPORTED) + set_property(TARGET curses PROPERTY IMPORTED_LOCATION ${dfhack_SOURCE_DIR}/pdcurses/pdcurses.dll) + set_property(TARGET curses PROPERTY IMPORTED_IMPLIB ${dfhack_SOURCE_DIR}/pdcurses/pdcurses.lib) + include_directories (${dfhack_SOURCE_DIR}/pdcurses) + add_custom_target( curses-copy + COMMAND "${CMAKE_COMMAND}" -E copy "${dfhack_SOURCE_DIR}/pdcurses/pdcurses.dll" ${dfhack_BINARY_DIR}/bin/${CMAKE_CFG_INTDIR}/ + DEPENDS "${dfhack_SOURCE_DIR}/pdcurses/pdcurses.dll") + SET(Curses_FOUND TRUE) + INSTALL(FILES "${dfhack_SOURCE_DIR}/pdcurses/pdcurses.dll" DESTINATION ${DFHACK_BINARY_DESTINATION}) +ENDIF() + # macro to save on typing in the tool subdirs # builds a tool, links it to the dfhack lib and makes sure the dependency # LOCAL_DEPNAME is built first, in case there is one @@ -164,6 +185,26 @@ MACRO(DFHACK_TOOL TOOL_NAME TOOL_SOURCES) RUNTIME DESTINATION ${DFHACK_BINARY_DESTINATION}) ENDMACRO() +# same as above builds a curses tool instead of plain terminal one. +MACRO(DFHACK_CURSES_TOOL TOOL_NAME TOOL_SOURCES) + IF(Curses_FOUND) + ADD_EXECUTABLE(${TOOL_NAME} ${TOOL_SOURCES}) + TARGET_LINK_LIBRARIES(${TOOL_NAME} dfhack curses) + if(DEFINED LOCAL_DEPNAME) + ADD_DEPENDENCIES(${TOOL_NAME} ${LOCAL_DEPNAME}) + endif() + if(WIN32) + ADD_DEPENDENCIES(${TOOL_NAME} curses-copy) + ENDIF() + install(TARGETS + ${TOOL_NAME} + RUNTIME DESTINATION ${DFHACK_BINARY_DESTINATION}) + ELSE() + MESSAGE(STATUS "Wide-character ncurses library not found - " ${TOOL_NAME} "can't be built") + ENDIF() +ENDMACRO() + + IF(BUILD_DFHACK_LIBRARY) add_subdirectory (library) diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt index de8e1dae4..740c89dc0 100644 --- a/library/CMakeLists.txt +++ b/library/CMakeLists.txt @@ -38,6 +38,7 @@ include/dfhack/DFVector.h include/dfhack/VersionInfoFactory.h include/dfhack/VersionInfo.h include/dfhack/extra/MapExtras.h +include/dfhack/extra/termutil.h include/dfhack/modules/Buildings.h include/dfhack/modules/Constructions.h include/dfhack/modules/Creatures.h diff --git a/library/include/dfhack/extra/termutil.h b/library/include/dfhack/extra/termutil.h index 2055152f1..7a54be6ab 100644 --- a/library/include/dfhack/extra/termutil.h +++ b/library/include/dfhack/extra/termutil.h @@ -2,7 +2,7 @@ #define TERMUTIL_H #ifdef LINUX_BUILD -// FIXME: is this ever false? +// FIXME: is this ever true? bool TemporaryTerminal () { return false; diff --git a/pdcurses/curses.h b/pdcurses/curses.h new file mode 100644 index 000000000..0d4e92988 --- /dev/null +++ b/pdcurses/curses.h @@ -0,0 +1,1384 @@ +#ifndef PDC_DLL_BUILD +# define PDC_DLL_BUILD +#endif +#ifndef PDC_WIDE +# define PDC_WIDE +#endif + +/* Public Domain Curses */ + +/* $Id: curses.h,v 1.295 2008/07/15 17:13:25 wmcbrine Exp $ */ + +/*----------------------------------------------------------------------* + * PDCurses * + *----------------------------------------------------------------------*/ + +#ifndef __PDCURSES__ +#define __PDCURSES__ 1 + +/*man-start************************************************************** + +PDCurses definitions list: (Only define those needed) + + XCURSES True if compiling for X11. + PDC_RGB True if you want to use RGB color definitions + (Red = 1, Green = 2, Blue = 4) instead of BGR. + PDC_WIDE True if building wide-character support. + PDC_DLL_BUILD True if building a Win32 DLL. + NCURSES_MOUSE_VERSION Use the ncurses mouse API instead + of PDCurses' traditional mouse API. + +PDCurses portable platform definitions list: + + PDC_BUILD Defines API build version. + 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. + +**man-end****************************************************************/ + +#define PDC_BUILD 3401 +#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 */ + +/*----------------------------------------------------------------------*/ + +#include +#include +#include /* Required by X/Open usage below */ + +#ifdef PDC_WIDE +# include +#endif + +#if defined(__cplusplus) || defined(__cplusplus__) || defined(__CPLUSPLUS) +extern "C" +{ +# define bool _bool +#endif + +/*---------------------------------------------------------------------- + * + * PDCurses Manifest Constants + * + */ + +#ifndef FALSE +# define FALSE 0 +#endif +#ifndef TRUE +# define TRUE 1 +#endif +#ifndef NULL +# define NULL (void *)0 +#endif +#ifndef ERR +# define ERR (-1) +#endif +#ifndef OK +# define OK 0 +#endif + +/*---------------------------------------------------------------------- + * + * PDCurses Type Declarations + * + */ + +typedef unsigned char bool; /* PDCurses Boolean type */ + +#ifdef CHTYPE_LONG +# if _LP64 +typedef unsigned int chtype; +# else +typedef unsigned long chtype; /* 16-bit attr + 16-bit char */ +# endif +#else +typedef unsigned short chtype; /* 8-bit attr + 8-bit char */ +#endif + +#ifdef PDC_WIDE +typedef chtype cchar_t; +#endif + +typedef chtype attr_t; + +/*---------------------------------------------------------------------- + * + * PDCurses Mouse Interface -- 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 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) + +/* + * Bits associated with the .changes field: + * 3 2 1 0 + * 210987654321098765432109876543210 + * 1 <- button 1 has changed + * 10 <- button 2 has changed + * 100 <- button 3 has changed + * 1000 <- mouse has moved + * 10000 <- mouse position report + * 100000 <- mouse wheel up + * 1000000 <- mouse wheel down + */ + +#define PDC_MOUSE_MOVED 0x0008 +#define PDC_MOUSE_POSITION 0x0010 +#define PDC_MOUSE_WHEEL_UP 0x0020 +#define PDC_MOUSE_WHEEL_DOWN 0x0040 + +#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) + +/* 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 unsigned long mmask_t; + +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; + +#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 + +/*---------------------------------------------------------------------- + * + * 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 _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; /* synchronise 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 */ +} WINDOW; + +/* 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 */ + unsigned long _trap_mbe; /* trap these mouse button events */ + unsigned long _map_mbe_to_key; /* map mouse buttons to slk */ + 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 */ + 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 */ + bool key_code; /* TRUE if last key is a special key; + used internally by get_wch() */ +#ifdef 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 + short line_color; /* color of line attributes - default -1 */ +} SCREEN; + +/*---------------------------------------------------------------------- + * + * PDCurses External Variables + * + */ + +#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************************************************************** + +PDCurses Text Attributes +======================== + +Originally, PDCurses used a short (16 bits) for its chtype. To include +color, a number of things had to be sacrificed from the strict Unix and +System V support. The main problem was fitting all character attributes +and color into an unsigned char (all 8 bits!). + +Today, PDCurses by default uses a long (32 bits) for its chtype, as in +System V. The short chtype is still available, by undefining CHTYPE_LONG +and rebuilding the library. + +The following is the structure of a win->_attrs chtype: + +short form: + +------------------------------------------------- +|15|14|13|12|11|10| 9| 8| 7| 6| 5| 4| 3| 2| 1| 0| +------------------------------------------------- + color number | attrs | character eg 'a' + +The available non-color attributes are bold, reverse and blink. Others +have no effect. The high order char is an index into an array of +physical colors (defined in color.c) -- 32 foreground/background color +pairs (5 bits) plus 3 bits for other attributes. + +long form: + +---------------------------------------------------------------------------- +|31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|..| 3| 2| 1| 0| +---------------------------------------------------------------------------- + color number | modifiers | character eg 'a' + +The available non-color attributes are bold, underline, invisible, +right-line, left-line, protect, reverse and blink. 256 color pairs (8 +bits), 8 bits for other attributes, and 16 bits for character data. + +**man-end****************************************************************/ + +/*** Video attribute macros ***/ + +#define A_NORMAL (chtype)0 + +#ifdef CHTYPE_LONG +# define A_ALTCHARSET (chtype)0x00010000 +# define A_RIGHTLINE (chtype)0x00020000 +# define A_LEFTLINE (chtype)0x00040000 +# define A_INVIS (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 A_ITALIC A_INVIS +# define A_PROTECT (A_UNDERLINE | A_LEFTLINE | A_RIGHTLINE) + +# define PDC_ATTR_SHIFT 19 +# define PDC_COLOR_SHIFT 24 +#else +# define A_BOLD (chtype)0x0100 /* X/Open */ +# define A_REVERSE (chtype)0x0200 /* X/Open */ +# define A_BLINK (chtype)0x0400 /* X/Open */ + +# define A_ATTRIBUTES (chtype)0xff00 /* X/Open */ +# define A_CHARTEXT (chtype)0x00ff /* X/Open */ +# define A_COLOR (chtype)0xf800 /* System V */ + +# define A_ALTCHARSET A_NORMAL /* X/Open */ +# define A_PROTECT A_NORMAL /* X/Open */ +# define A_UNDERLINE A_NORMAL /* X/Open */ + +# define A_LEFTLINE A_NORMAL +# define A_RIGHTLINE A_NORMAL +# define A_ITALIC A_NORMAL +# define A_INVIS A_NORMAL + +# define PDC_ATTR_SHIFT 8 +# define PDC_COLOR_SHIFT 11 +#endif + +#define A_STANDOUT (A_REVERSE | A_BOLD) /* X/Open */ +#define A_DIM 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_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_LEFT A_LEFTLINE +#define WA_PROTECT A_PROTECT +#define WA_REVERSE A_REVERSE +#define WA_RIGHT A_RIGHTLINE +#define WA_STANDOUT A_STANDOUT +#define WA_UNDERLINE A_UNDERLINE + +#define WA_HORIZONTAL A_NORMAL +#define WA_LOW A_NORMAL +#define WA_TOP A_NORMAL +#define WA_VERTICAL A_NORMAL + +/*** Alternate character set macros ***/ + +/* 'w' = 32-bit chtype; acs_map[] index | A_ALTCHARSET + 'n' = 16-bit chtype; it gets the fallback set because no bit is + available for A_ALTCHARSET */ + +#ifdef CHTYPE_LONG +# define ACS_PICK(w, n) ((chtype)w | A_ALTCHARSET) +#else +# define ACS_PICK(w, n) ((chtype)n) +#endif + +/* VT100-compatible symbols -- box chars */ + +#define ACS_ULCORNER ACS_PICK('l', '+') +#define ACS_LLCORNER ACS_PICK('m', '+') +#define ACS_URCORNER ACS_PICK('k', '+') +#define ACS_LRCORNER ACS_PICK('j', '+') +#define ACS_RTEE ACS_PICK('u', '+') +#define ACS_LTEE ACS_PICK('t', '+') +#define ACS_BTEE ACS_PICK('v', '+') +#define ACS_TTEE ACS_PICK('w', '+') +#define ACS_HLINE ACS_PICK('q', '-') +#define ACS_VLINE ACS_PICK('x', '|') +#define ACS_PLUS ACS_PICK('n', '+') + +/* VT100-compatible symbols -- other */ + +#define ACS_S1 ACS_PICK('o', '-') +#define ACS_S9 ACS_PICK('s', '_') +#define ACS_DIAMOND ACS_PICK('`', '+') +#define ACS_CKBOARD ACS_PICK('a', ':') +#define ACS_DEGREE ACS_PICK('f', '\'') +#define ACS_PLMINUS ACS_PICK('g', '#') +#define ACS_BULLET ACS_PICK('~', 'o') + +/* 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 ACS_PICK(',', '<') +#define ACS_RARROW ACS_PICK('+', '>') +#define ACS_DARROW ACS_PICK('.', 'v') +#define ACS_UARROW ACS_PICK('-', '^') +#define ACS_BOARD ACS_PICK('h', '#') +#define ACS_LANTERN ACS_PICK('i', '*') +#define ACS_BLOCK ACS_PICK('0', '#') + +/* That goes double for these -- undocumented SysV symbols. Don't use + them. */ + +#define ACS_S3 ACS_PICK('p', '-') +#define ACS_S7 ACS_PICK('r', '-') +#define ACS_LEQUAL ACS_PICK('y', '<') +#define ACS_GEQUAL ACS_PICK('z', '>') +#define ACS_PI ACS_PICK('{', 'n') +#define ACS_NEQUAL ACS_PICK('|', '+') +#define ACS_STERLING ACS_PICK('}', 'L') + +/* 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 + +/*---------------------------------------------------------------------- + * + * Function and Keypad Key Definitions. + * Many are just for compatibility. + * + */ + +#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 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 +#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 /* 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_MIN KEY_BREAK /* Minimum curses key value */ +#define KEY_MAX KEY_SDOWN /* Maximum curses key */ + +#define KEY_F(n) (KEY_F0 + (n)) + +/*---------------------------------------------------------------------- + * + * PDCurses Function Declarations + * + */ + +/* Standard */ + +int addch(const chtype); +int addchnstr(const chtype *, int); +int addchstr(const chtype *); +int addnstr(const char *, int); +int addstr(const char *); +int attroff(chtype); +int attron(chtype); +int attrset(chtype); +int attr_get(attr_t *, short *, void *); +int attr_off(attr_t, void *); +int attr_on(attr_t, void *); +int attr_set(attr_t, short, void *); +int baudrate(void); +int beep(void); +int bkgd(chtype); +void bkgdset(chtype); +int border(chtype, chtype, chtype, chtype, chtype, chtype, chtype, chtype); +int box(WINDOW *, chtype, chtype); +bool can_change_color(void); +int cbreak(void); +int chgat(int, attr_t, short, const void *); +int clearok(WINDOW *, bool); +int clear(void); +int clrtobot(void); +int clrtoeol(void); +int color_content(short, short *, short *, short *); +int color_set(short, void *); +int copywin(const WINDOW *, WINDOW *, int, int, int, int, int, int, int); +int curs_set(int); +int def_prog_mode(void); +int def_shell_mode(void); +int delay_output(int); +int delch(void); +int deleteln(void); +void delscreen(SCREEN *); +int delwin(WINDOW *); +WINDOW *derwin(WINDOW *, int, int, int, int); +int doupdate(void); +WINDOW *dupwin(WINDOW *); +int echochar(const chtype); +int echo(void); +int endwin(void); +char erasechar(void); +int erase(void); +void filter(void); +int flash(void); +int flushinp(void); +chtype getbkgd(WINDOW *); +int getnstr(char *, int); +int getstr(char *); +WINDOW *getwin(FILE *); +int halfdelay(int); +bool has_colors(void); +bool has_ic(void); +bool has_il(void); +int hline(chtype, int); +void idcok(WINDOW *, bool); +int idlok(WINDOW *, bool); +void immedok(WINDOW *, bool); +int inchnstr(chtype *, int); +int inchstr(chtype *); +chtype inch(void); +int init_color(short, short, short, short); +int init_pair(short, short, short); +WINDOW *initscr(void); +int innstr(char *, int); +int insch(chtype); +int insdelln(int); +int insertln(void); +int insnstr(const char *, int); +int insstr(const char *); +int instr(char *); +int intrflush(WINDOW *, bool); +bool isendwin(void); +bool is_linetouched(WINDOW *, int); +bool is_wintouched(WINDOW *); +char *keyname(int); +int keypad(WINDOW *, bool); +char killchar(void); +int leaveok(WINDOW *, bool); +char *longname(void); +int meta(WINDOW *, bool); +int move(int, int); +int mvaddch(int, int, const chtype); +int mvaddchnstr(int, int, const chtype *, int); +int mvaddchstr(int, int, const chtype *); +int mvaddnstr(int, int, const char *, int); +int mvaddstr(int, int, const char *); +int mvchgat(int, int, int, attr_t, short, const void *); +int mvcur(int, int, int, int); +int mvdelch(int, int); +int mvderwin(WINDOW *, int, int); +int mvgetch(int, int); +int mvgetnstr(int, int, char *, int); +int mvgetstr(int, int, char *); +int mvhline(int, int, chtype, int); +chtype mvinch(int, int); +int mvinchnstr(int, int, chtype *, int); +int mvinchstr(int, int, chtype *); +int mvinnstr(int, int, char *, int); +int mvinsch(int, int, chtype); +int mvinsnstr(int, int, const char *, int); +int mvinsstr(int, int, const char *); +int mvinstr(int, int, char *); +int mvprintw(int, int, const char *, ...); +int mvscanw(int, int, const char *, ...); +int mvvline(int, int, chtype, int); +int mvwaddchnstr(WINDOW *, int, int, const chtype *, int); +int mvwaddchstr(WINDOW *, int, int, const chtype *); +int mvwaddch(WINDOW *, int, int, const chtype); +int mvwaddnstr(WINDOW *, int, int, const char *, int); +int mvwaddstr(WINDOW *, int, int, const char *); +int mvwchgat(WINDOW *, int, int, int, attr_t, short, const void *); +int mvwdelch(WINDOW *, int, int); +int mvwgetch(WINDOW *, int, int); +int mvwgetnstr(WINDOW *, int, int, char *, int); +int mvwgetstr(WINDOW *, int, int, char *); +int mvwhline(WINDOW *, int, int, chtype, int); +int mvwinchnstr(WINDOW *, int, int, chtype *, int); +int mvwinchstr(WINDOW *, int, int, chtype *); +chtype mvwinch(WINDOW *, int, int); +int mvwinnstr(WINDOW *, int, int, char *, int); +int mvwinsch(WINDOW *, int, int, chtype); +int mvwinsnstr(WINDOW *, int, int, const char *, int); +int mvwinsstr(WINDOW *, int, int, const char *); +int mvwinstr(WINDOW *, int, int, char *); +int mvwin(WINDOW *, int, int); +int mvwprintw(WINDOW *, int, int, const char *, ...); +int mvwscanw(WINDOW *, int, int, const char *, ...); +int mvwvline(WINDOW *, int, int, chtype, int); +int napms(int); +WINDOW *newpad(int, int); +SCREEN *newterm(const char *, FILE *, FILE *); +WINDOW *newwin(int, int, int, int); +int nl(void); +int nocbreak(void); +int nodelay(WINDOW *, bool); +int noecho(void); +int nonl(void); +void noqiflush(void); +int noraw(void); +int notimeout(WINDOW *, bool); +int overlay(const WINDOW *, WINDOW *); +int overwrite(const WINDOW *, WINDOW *); +int pair_content(short, short *, short *); +int pechochar(WINDOW *, chtype); +int pnoutrefresh(WINDOW *, int, int, int, int, int, int); +int prefresh(WINDOW *, int, int, int, int, int, int); +int printw(const char *, ...); +int putwin(WINDOW *, FILE *); +void qiflush(void); +int raw(void); +int redrawwin(WINDOW *); +int refresh(void); +int reset_prog_mode(void); +int reset_shell_mode(void); +int resetty(void); +int ripoffline(int, int (*)(WINDOW *, int)); +int savetty(void); +int scanw(const char *, ...); +int scr_dump(const char *); +int scr_init(const char *); +int scr_restore(const char *); +int scr_set(const char *); +int scrl(int); +int scroll(WINDOW *); +int scrollok(WINDOW *, bool); +SCREEN *set_term(SCREEN *); +int setscrreg(int, int); +int slk_attroff(const chtype); +int slk_attr_off(const attr_t, void *); +int slk_attron(const chtype); +int slk_attr_on(const attr_t, void *); +int slk_attrset(const chtype); +int slk_attr_set(const attr_t, short, void *); +int slk_clear(void); +int slk_color(short); +int slk_init(int); +char *slk_label(int); +int slk_noutrefresh(void); +int slk_refresh(void); +int slk_restore(void); +int slk_set(int, const char *, int); +int slk_touch(void); +int standend(void); +int standout(void); +int start_color(void); +WINDOW *subpad(WINDOW *, int, int, int, int); +WINDOW *subwin(WINDOW *, int, int, int, int); +int syncok(WINDOW *, bool); +chtype termattrs(void); +attr_t term_attrs(void); +char *termname(void); +void timeout(int); +int touchline(WINDOW *, int, int); +int touchwin(WINDOW *); +int typeahead(int); +int untouchwin(WINDOW *); +void use_env(bool); +int vidattr(chtype); +int vid_attr(attr_t, short, void *); +int vidputs(chtype, int (*)(int)); +int vid_puts(attr_t, short, void *, int (*)(int)); +int vline(chtype, int); +int vw_printw(WINDOW *, const char *, va_list); +int vwprintw(WINDOW *, const char *, va_list); +int vw_scanw(WINDOW *, const char *, va_list); +int vwscanw(WINDOW *, const char *, va_list); +int waddchnstr(WINDOW *, const chtype *, int); +int waddchstr(WINDOW *, const chtype *); +int waddch(WINDOW *, const chtype); +int waddnstr(WINDOW *, const char *, int); +int waddstr(WINDOW *, const char *); +int wattroff(WINDOW *, chtype); +int wattron(WINDOW *, chtype); +int wattrset(WINDOW *, chtype); +int wattr_get(WINDOW *, attr_t *, short *, void *); +int wattr_off(WINDOW *, attr_t, void *); +int wattr_on(WINDOW *, attr_t, void *); +int wattr_set(WINDOW *, attr_t, short, void *); +void wbkgdset(WINDOW *, chtype); +int wbkgd(WINDOW *, chtype); +int wborder(WINDOW *, chtype, chtype, chtype, chtype, + chtype, chtype, chtype, chtype); +int wchgat(WINDOW *, int, attr_t, short, const void *); +int wclear(WINDOW *); +int wclrtobot(WINDOW *); +int wclrtoeol(WINDOW *); +int wcolor_set(WINDOW *, short, void *); +void wcursyncup(WINDOW *); +int wdelch(WINDOW *); +int wdeleteln(WINDOW *); +int wechochar(WINDOW *, const chtype); +int werase(WINDOW *); +int wgetch(WINDOW *); +int wgetnstr(WINDOW *, char *, int); +int wgetstr(WINDOW *, char *); +int whline(WINDOW *, chtype, int); +int winchnstr(WINDOW *, chtype *, int); +int winchstr(WINDOW *, chtype *); +chtype winch(WINDOW *); +int winnstr(WINDOW *, char *, int); +int winsch(WINDOW *, chtype); +int winsdelln(WINDOW *, int); +int winsertln(WINDOW *); +int winsnstr(WINDOW *, const char *, int); +int winsstr(WINDOW *, const char *); +int winstr(WINDOW *, char *); +int wmove(WINDOW *, int, int); +int wnoutrefresh(WINDOW *); +int wprintw(WINDOW *, const char *, ...); +int wredrawln(WINDOW *, int, int); +int wrefresh(WINDOW *); +int wscanw(WINDOW *, const char *, ...); +int wscrl(WINDOW *, int); +int wsetscrreg(WINDOW *, int, int); +int wstandend(WINDOW *); +int wstandout(WINDOW *); +void wsyncdown(WINDOW *); +void wsyncup(WINDOW *); +void wtimeout(WINDOW *, int); +int wtouchln(WINDOW *, int, int, int); +int wvline(WINDOW *, chtype, int); + +/* Wide-character functions */ + +#ifdef PDC_WIDE +int addnwstr(const wchar_t *, int); +int addwstr(const wchar_t *); +int add_wch(const cchar_t *); +int add_wchnstr(const cchar_t *, int); +int add_wchstr(const cchar_t *); +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 *); +int box_set(WINDOW *, const cchar_t *, const cchar_t *); +int echo_wchar(const cchar_t *); +int erasewchar(wchar_t *); +int getbkgrnd(cchar_t *); +int getcchar(const cchar_t *, wchar_t *, attr_t *, short *, void *); +int getn_wstr(wint_t *, int); +int get_wch(wint_t *); +int get_wstr(wint_t *); +int hline_set(const cchar_t *, int); +int innwstr(wchar_t *, int); +int ins_nwstr(const wchar_t *, int); +int ins_wch(const cchar_t *); +int ins_wstr(const wchar_t *); +int inwstr(wchar_t *); +int in_wch(cchar_t *); +int in_wchnstr(cchar_t *, int); +int in_wchstr(cchar_t *); +char *key_name(wchar_t); +int killwchar(wchar_t *); +int mvaddnwstr(int, int, const wchar_t *, int); +int mvaddwstr(int, int, const wchar_t *); +int mvadd_wch(int, int, const cchar_t *); +int mvadd_wchnstr(int, int, const cchar_t *, int); +int mvadd_wchstr(int, int, const cchar_t *); +int mvgetn_wstr(int, int, wint_t *, int); +int mvget_wch(int, int, wint_t *); +int mvget_wstr(int, int, wint_t *); +int mvhline_set(int, int, const cchar_t *, int); +int mvinnwstr(int, int, wchar_t *, int); +int mvins_nwstr(int, int, const wchar_t *, int); +int mvins_wch(int, int, const cchar_t *); +int mvins_wstr(int, int, const wchar_t *); +int mvinwstr(int, int, wchar_t *); +int mvin_wch(int, int, cchar_t *); +int mvin_wchnstr(int, int, cchar_t *, int); +int mvin_wchstr(int, int, cchar_t *); +int mvvline_set(int, int, const cchar_t *, int); +int mvwaddnwstr(WINDOW *, int, int, const wchar_t *, int); +int mvwaddwstr(WINDOW *, int, int, const wchar_t *); +int mvwadd_wch(WINDOW *, int, int, const cchar_t *); +int mvwadd_wchnstr(WINDOW *, int, int, const cchar_t *, int); +int mvwadd_wchstr(WINDOW *, int, int, const cchar_t *); +int mvwgetn_wstr(WINDOW *, int, int, wint_t *, int); +int mvwget_wch(WINDOW *, int, int, wint_t *); +int mvwget_wstr(WINDOW *, int, int, wint_t *); +int mvwhline_set(WINDOW *, int, int, const cchar_t *, int); +int mvwinnwstr(WINDOW *, int, int, wchar_t *, int); +int mvwins_nwstr(WINDOW *, int, int, const wchar_t *, int); +int mvwins_wch(WINDOW *, int, int, const cchar_t *); +int mvwins_wstr(WINDOW *, int, int, const wchar_t *); +int mvwin_wch(WINDOW *, int, int, cchar_t *); +int mvwin_wchnstr(WINDOW *, int, int, cchar_t *, int); +int mvwin_wchstr(WINDOW *, int, int, cchar_t *); +int mvwinwstr(WINDOW *, int, int, wchar_t *); +int mvwvline_set(WINDOW *, int, int, const cchar_t *, int); +int pecho_wchar(WINDOW *, const cchar_t*); +int setcchar(cchar_t*, const wchar_t*, const attr_t, short, const void*); +int slk_wset(int, const wchar_t *, int); +int unget_wch(const wchar_t); +int vline_set(const cchar_t *, int); +int waddnwstr(WINDOW *, const wchar_t *, int); +int waddwstr(WINDOW *, const wchar_t *); +int wadd_wch(WINDOW *, const cchar_t *); +int wadd_wchnstr(WINDOW *, const cchar_t *, int); +int wadd_wchstr(WINDOW *, const cchar_t *); +int wbkgrnd(WINDOW *, const cchar_t *); +void wbkgrndset(WINDOW *, const cchar_t *); +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 *); +int wecho_wchar(WINDOW *, const cchar_t *); +int wgetbkgrnd(WINDOW *, cchar_t *); +int wgetn_wstr(WINDOW *, wint_t *, int); +int wget_wch(WINDOW *, wint_t *); +int wget_wstr(WINDOW *, wint_t *); +int whline_set(WINDOW *, const cchar_t *, int); +int winnwstr(WINDOW *, wchar_t *, int); +int wins_nwstr(WINDOW *, const wchar_t *, int); +int wins_wch(WINDOW *, const cchar_t *); +int wins_wstr(WINDOW *, const wchar_t *); +int winwstr(WINDOW *, wchar_t *); +int win_wch(WINDOW *, cchar_t *); +int win_wchnstr(WINDOW *, cchar_t *, int); +int win_wchstr(WINDOW *, cchar_t *); +wchar_t *wunctrl(cchar_t *); +int wvline_set(WINDOW *, const cchar_t *, int); +#endif + +/* Quasi-standard */ + +chtype getattrs(WINDOW *); +int getbegx(WINDOW *); +int getbegy(WINDOW *); +int getmaxx(WINDOW *); +int getmaxy(WINDOW *); +int getparx(WINDOW *); +int getpary(WINDOW *); +int getcurx(WINDOW *); +int getcury(WINDOW *); +void traceoff(void); +void traceon(void); +char *unctrl(chtype); + +int crmode(void); +int nocrmode(void); +int draino(int); +int resetterm(void); +int fixterm(void); +int saveterm(void); +int setsyx(int, int); + +int mouse_set(unsigned long); +int mouse_on(unsigned long); +int mouse_off(unsigned long); +int request_mouse_pos(void); +int map_button(unsigned long); +void wmouse_position(WINDOW *, int *, int *); +unsigned long getmouse(void); +unsigned long getbmap(void); + +/* ncurses */ + +int assume_default_colors(int, int); +const char *curses_version(void); +bool has_key(int); +int use_default_colors(void); +int wresize(WINDOW *, int, int); + +int mouseinterval(int); +mmask_t mousemask(mmask_t, mmask_t *); +bool mouse_trafo(int *, int *, bool); +int nc_getmouse(MEVENT *); +int ungetmouse(MEVENT *); +bool wenclose(const WINDOW *, int, int); +bool wmouse_trafo(const WINDOW *, int *, int *, bool); + +/* PDCurses */ + +int addrawch(chtype); +int insrawch(chtype); +bool is_termresized(void); +int mvaddrawch(int, int, chtype); +int mvdeleteln(int, int); +int mvinsertln(int, int); +int mvinsrawch(int, int, chtype); +int mvwaddrawch(WINDOW *, int, int, chtype); +int mvwdeleteln(WINDOW *, int, int); +int mvwinsertln(WINDOW *, int, int); +int mvwinsrawch(WINDOW *, int, int, chtype); +int raw_output(bool); +int resize_term(int, int); +WINDOW *resize_window(WINDOW *, int, int); +int waddrawch(WINDOW *, chtype); +int winsrawch(WINDOW *, chtype); +char wordchar(void); + +#ifdef PDC_WIDE +wchar_t *slk_wlabel(int); +#endif + +void PDC_debug(const char *, ...); +int PDC_ungetch(int); +int PDC_set_blink(bool); +int PDC_set_line_color(short); +void PDC_set_title(const char *); + +int PDC_clearclipboard(void); +int PDC_freeclipboard(char *); +int PDC_getclipboard(char **, long *); +int PDC_setclipboard(const char *, long); + +unsigned long PDC_get_input_fd(void); +unsigned long PDC_get_key_modifiers(void); +int PDC_return_key_modifiers(bool); +int PDC_save_key_modifiers(bool); + +#ifdef XCURSES +WINDOW *Xinitscr(int, char **); +void XCursesExit(void); +int sb_init(void); +int sb_set_horz(int, int, int); +int sb_set_vert(int, int, int); +int sb_get_horz(int *, int *, int *); +int sb_get_vert(int *, int *, int *); +int sb_refresh(void); +#endif + +/*** 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 + +/* 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 + +#if defined(__cplusplus) || defined(__cplusplus__) || defined(__CPLUSPLUS) +# undef bool +} +#endif + +#endif /* __PDCURSES__ */ diff --git a/pdcurses/panel.h b/pdcurses/panel.h new file mode 100644 index 000000000..1d7cacef9 --- /dev/null +++ b/pdcurses/panel.h @@ -0,0 +1,58 @@ +/* Public Domain Curses */ + +/* $Id: panel.h,v 1.19 2008/07/13 16:08:16 wmcbrine Exp $ */ + +/*----------------------------------------------------------------------* + * Panels for PDCurses * + *----------------------------------------------------------------------*/ + +#ifndef __PDCURSES_PANEL_H__ +#define __PDCURSES_PANEL_H__ 1 + +#include + +#if defined(__cplusplus) || defined(__cplusplus__) || defined(__CPLUSPLUS) +extern "C" +{ +#endif + +typedef struct panelobs +{ + struct panelobs *above; + struct panel *pan; +} PANELOBS; + +typedef struct panel +{ + WINDOW *win; + int wstarty; + int wendy; + int wstartx; + int wendx; + struct panel *below; + struct panel *above; + const void *user; + struct panelobs *obscure; +} PANEL; + +int bottom_panel(PANEL *pan); +int del_panel(PANEL *pan); +int hide_panel(PANEL *pan); +int move_panel(PANEL *pan, int starty, int startx); +PANEL *new_panel(WINDOW *win); +PANEL *panel_above(const PANEL *pan); +PANEL *panel_below(const PANEL *pan); +int panel_hidden(const PANEL *pan); +const void *panel_userptr(const PANEL *pan); +WINDOW *panel_window(const PANEL *pan); +int replace_panel(PANEL *pan, WINDOW *win); +int set_panel_userptr(PANEL *pan, const void *uptr); +int show_panel(PANEL *pan); +int top_panel(PANEL *pan); +void update_panels(void); + +#if defined(__cplusplus) || defined(__cplusplus__) || defined(__CPLUSPLUS) +} +#endif + +#endif /* __PDCURSES_PANEL_H__ */ diff --git a/pdcurses/pdcurses.dll b/pdcurses/pdcurses.dll new file mode 100644 index 0000000000000000000000000000000000000000..550c7a250067b1e761fd746ec620e6f6d25ae85f GIT binary patch literal 118784 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 TPN%@>6gZs%r&Hj6KnnaXv{ocO literal 0 HcmV?d00001 diff --git a/pdcurses/pdcurses.lib b/pdcurses/pdcurses.lib new file mode 100644 index 0000000000000000000000000000000000000000..3b9eb70aa431b782c5b22417991a592c0196f830 GIT binary patch literal 82782 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 // the header name comes from the build system. -#define INCLUDE_NAME() -#include INCLUDE_NAME() +#include #include #include #include @@ -807,7 +806,7 @@ int main(int argc, char *argv[]) Maps->ReadTemperatures(cursorX+i,cursorY+j,cursorZ,&b_temp1, &b_temp2 ); if(dotwiddle) { - bitset<32> bs = Block->designation[0][0].whole; + bitset<32> bs ((int)Block->designation[0][0].whole); bs.flip(twiddle); Block->designation[0][0].whole = bs.to_ulong(); Maps->WriteDesignations(cursorX+i,cursorY+j,cursorZ, &(Block->designation));