1*68ad2b0dSBaptiste Daroussin/**************************************************************************** 2*68ad2b0dSBaptiste Daroussin * Copyright 2018-2024,2025 Thomas E. Dickey * 3*68ad2b0dSBaptiste Daroussin * Copyright 2008-2010,2017 Free Software Foundation, Inc. * 4*68ad2b0dSBaptiste Daroussin * * 5*68ad2b0dSBaptiste Daroussin * Permission is hereby granted, free of charge, to any person obtaining a * 6*68ad2b0dSBaptiste Daroussin * copy of this software and associated documentation files (the * 7*68ad2b0dSBaptiste Daroussin * "Software"), to deal in the Software without restriction, including * 8*68ad2b0dSBaptiste Daroussin * without limitation the rights to use, copy, modify, merge, publish, * 9*68ad2b0dSBaptiste Daroussin * distribute, distribute with modifications, sublicense, and/or sell * 10*68ad2b0dSBaptiste Daroussin * copies of the Software, and to permit persons to whom the Software is * 11*68ad2b0dSBaptiste Daroussin * furnished to do so, subject to the following conditions: * 12*68ad2b0dSBaptiste Daroussin * * 13*68ad2b0dSBaptiste Daroussin * The above copyright notice and this permission notice shall be included * 14*68ad2b0dSBaptiste Daroussin * in all copies or substantial portions of the Software. * 15*68ad2b0dSBaptiste Daroussin * * 16*68ad2b0dSBaptiste Daroussin * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * 17*68ad2b0dSBaptiste Daroussin * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * 18*68ad2b0dSBaptiste Daroussin * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * 19*68ad2b0dSBaptiste Daroussin * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * 20*68ad2b0dSBaptiste Daroussin * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * 21*68ad2b0dSBaptiste Daroussin * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * 22*68ad2b0dSBaptiste Daroussin * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * 23*68ad2b0dSBaptiste Daroussin * * 24*68ad2b0dSBaptiste Daroussin * Except as contained in this notice, the name(s) of the above copyright * 25*68ad2b0dSBaptiste Daroussin * holders shall not be used in advertising or otherwise to promote the * 26*68ad2b0dSBaptiste Daroussin * sale, use or other dealings in this Software without prior written * 27*68ad2b0dSBaptiste Daroussin * authorization. * 28*68ad2b0dSBaptiste Daroussin ****************************************************************************/ 29*68ad2b0dSBaptiste Daroussin 30*68ad2b0dSBaptiste Daroussin/**************************************************************************** 31*68ad2b0dSBaptiste Daroussin * Author: Thomas Dickey, 2008-on * 32*68ad2b0dSBaptiste Daroussin ****************************************************************************/ 33*68ad2b0dSBaptiste Daroussin 34*68ad2b0dSBaptiste Daroussin/* $Id: nc_win32.h.in,v 1.19 2025/12/26 23:32:43 tom Exp $ */ 35*68ad2b0dSBaptiste Daroussin 36*68ad2b0dSBaptiste Daroussin#ifndef NC_WIN32_H 37*68ad2b0dSBaptiste Daroussin#define NC_WIN32_H 1 38*68ad2b0dSBaptiste Daroussin 39*68ad2b0dSBaptiste Daroussin#include <ncurses_cfg.h> 40*68ad2b0dSBaptiste Daroussin 41*68ad2b0dSBaptiste Daroussin#if defined(_WIN32) || defined(_WIN64) || defined(USE_WIN32CON_DRIVER) 42*68ad2b0dSBaptiste Daroussin 43*68ad2b0dSBaptiste Daroussin#if @USE_NAMED_PIPES@ /* USE_NAMED_PIPES */ 44*68ad2b0dSBaptiste Daroussin 45*68ad2b0dSBaptiste Daroussin#ifndef _NC_WINDOWS_NATIVE 46*68ad2b0dSBaptiste Daroussin#define _NC_WINDOWS_NATIVE 47*68ad2b0dSBaptiste Daroussin#endif 48*68ad2b0dSBaptiste Daroussin 49*68ad2b0dSBaptiste Daroussin#ifdef TERMIOS 50*68ad2b0dSBaptiste Daroussin#error TERMIOS must not be defined on Windows 51*68ad2b0dSBaptiste Daroussin#endif 52*68ad2b0dSBaptiste Daroussin 53*68ad2b0dSBaptiste Daroussin/* 54*68ad2b0dSBaptiste Daroussin Minimum requirement for named pipes is Windows Vista or Server2008, 55*68ad2b0dSBaptiste Daroussin aka Windows NT 6.0 56*68ad2b0dSBaptiste Daroussin*/ 57*68ad2b0dSBaptiste Daroussin#ifdef WINVER 58*68ad2b0dSBaptiste Daroussin# if WINVER < 0x0600 59*68ad2b0dSBaptiste Daroussin# error WINVER must at least be 0x0600 60*68ad2b0dSBaptiste Daroussin# endif 61*68ad2b0dSBaptiste Daroussin#else 62*68ad2b0dSBaptiste Daroussin# define WINVER 0x0600 63*68ad2b0dSBaptiste Daroussin#endif 64*68ad2b0dSBaptiste Daroussin 65*68ad2b0dSBaptiste Daroussin#undef _NC_CHECK_MINTTY 66*68ad2b0dSBaptiste Daroussin#if WINVER >= 0x0600 67*68ad2b0dSBaptiste Daroussin#define _NC_CHECK_MINTTY 68*68ad2b0dSBaptiste Daroussin#endif 69*68ad2b0dSBaptiste Daroussin 70*68ad2b0dSBaptiste Daroussin#include <windows.h> 71*68ad2b0dSBaptiste Daroussin 72*68ad2b0dSBaptiste Daroussin#else /* !USE_NAMED_PIPES */ 73*68ad2b0dSBaptiste Daroussin 74*68ad2b0dSBaptiste Daroussin#ifdef WINVER 75*68ad2b0dSBaptiste Daroussin# if WINVER < 0x0501 76*68ad2b0dSBaptiste Daroussin# error WINVER must at least be 0x0501 77*68ad2b0dSBaptiste Daroussin# endif 78*68ad2b0dSBaptiste Daroussin#else 79*68ad2b0dSBaptiste Daroussin# define WINVER 0x0501 80*68ad2b0dSBaptiste Daroussin#endif 81*68ad2b0dSBaptiste Daroussin 82*68ad2b0dSBaptiste Daroussin#include <windows.h> 83*68ad2b0dSBaptiste Daroussin 84*68ad2b0dSBaptiste Daroussin#undef sleep 85*68ad2b0dSBaptiste Daroussin#define sleep(n) Sleep((n) * 1000) 86*68ad2b0dSBaptiste Daroussin 87*68ad2b0dSBaptiste Daroussin#endif /* USE_NAMED_PIPES */ 88*68ad2b0dSBaptiste Daroussin 89*68ad2b0dSBaptiste Daroussin#if HAVE_SYS_TIME_H 90*68ad2b0dSBaptiste Daroussin#include <sys/time.h> /* for struct timeval */ 91*68ad2b0dSBaptiste Daroussin#endif 92*68ad2b0dSBaptiste Daroussin 93*68ad2b0dSBaptiste Daroussin#ifdef _MSC_VER 94*68ad2b0dSBaptiste Daroussin#include <winsock2.h> /* for struct timeval */ 95*68ad2b0dSBaptiste Daroussin#endif 96*68ad2b0dSBaptiste Daroussin 97*68ad2b0dSBaptiste Daroussin#include <stdint.h> /* for uint32_t */ 98*68ad2b0dSBaptiste Daroussin 99*68ad2b0dSBaptiste Daroussin/* 100*68ad2b0dSBaptiste Daroussin * Allow for build-override, e.g., MinGW used "cygwin". 101*68ad2b0dSBaptiste Daroussin */ 102*68ad2b0dSBaptiste Daroussin#ifndef DEFAULT_TERM_ENV 103*68ad2b0dSBaptiste Daroussin#define DEFAULT_TERM_ENV "ms-terminal" 104*68ad2b0dSBaptiste Daroussin#endif 105*68ad2b0dSBaptiste Daroussin 106*68ad2b0dSBaptiste Daroussin#undef VALID_TERM_ENV 107*68ad2b0dSBaptiste Daroussin#define VALID_TERM_ENV(term_env, no_terminal) \ 108*68ad2b0dSBaptiste Daroussin (term_env = (NonEmpty(term_env) \ 109*68ad2b0dSBaptiste Daroussin ? term_env \ 110*68ad2b0dSBaptiste Daroussin : (_nc_console_vt_supported() \ 111*68ad2b0dSBaptiste Daroussin ? DEFAULT_TERM_ENV \ 112*68ad2b0dSBaptiste Daroussin : no_terminal)), \ 113*68ad2b0dSBaptiste Daroussin NonEmpty(term_env)) 114*68ad2b0dSBaptiste Daroussin 115*68ad2b0dSBaptiste Daroussin /* 116*68ad2b0dSBaptiste Daroussin * Various Console mode definitions 117*68ad2b0dSBaptiste Daroussin */ 118*68ad2b0dSBaptiste Daroussin 119*68ad2b0dSBaptiste Daroussin /* Flags to enable virtual Terminal processing */ 120*68ad2b0dSBaptiste Daroussin#define VT_FLAG_OUT ENABLE_VIRTUAL_TERMINAL_PROCESSING 121*68ad2b0dSBaptiste Daroussin#define VT_FLAG_IN ENABLE_VIRTUAL_TERMINAL_INPUT 122*68ad2b0dSBaptiste Daroussin 123*68ad2b0dSBaptiste Daroussin /* Default flags for input/output modes */ 124*68ad2b0dSBaptiste Daroussin#define CONMODE_IN_DEFAULT (ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT | ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT) 125*68ad2b0dSBaptiste Daroussin#define CONMODE_OUT_DEFAULT (ENABLE_PROCESSED_OUTPUT | DISABLE_NEWLINE_AUTO_RETURN | ENABLE_LVB_GRID_WORLDWIDE) 126*68ad2b0dSBaptiste Daroussin 127*68ad2b0dSBaptiste Daroussin /* Flags to reset from RAW/CBREAK */ 128*68ad2b0dSBaptiste Daroussin#define CONMODE_NORAW (ENABLE_PROCESSED_INPUT|ENABLE_LINE_INPUT) 129*68ad2b0dSBaptiste Daroussin#define CONMODE_NOCBREAK (ENABLE_LINE_INPUT) 130*68ad2b0dSBaptiste Daroussin 131*68ad2b0dSBaptiste Daroussin#include <ncurses_dll.h> 132*68ad2b0dSBaptiste Daroussin 133*68ad2b0dSBaptiste Daroussin#ifdef __cplusplus 134*68ad2b0dSBaptiste Daroussinextern "C" { 135*68ad2b0dSBaptiste Daroussin#endif 136*68ad2b0dSBaptiste Daroussin 137*68ad2b0dSBaptiste Daroussin#if defined(CURSES_PRIV_H) || defined(TEST_PRIV_H) 138*68ad2b0dSBaptiste Daroussin 139*68ad2b0dSBaptiste Daroussin#if !HAVE_CLOCK_GETTIME && !HAVE_GETTIMEOFDAY 140*68ad2b0dSBaptiste Daroussinextern NCURSES_EXPORT(int) _nc_gettimeofday(struct timeval *, void *); 141*68ad2b0dSBaptiste Daroussin#undef HAVE_GETTIMEOFDAY 142*68ad2b0dSBaptiste Daroussin#define HAVE_GETTIMEOFDAY 2 143*68ad2b0dSBaptiste Daroussin#define gettimeofday(tv,tz) _nc_gettimeofday(tv,tz) 144*68ad2b0dSBaptiste Daroussin#endif 145*68ad2b0dSBaptiste Daroussin 146*68ad2b0dSBaptiste Daroussin#endif /* defined(CURSES_PRIV_H) || defined(TEST_PRIV_H) */ 147*68ad2b0dSBaptiste Daroussin 148*68ad2b0dSBaptiste Daroussin#if !HAVE_WCWIDTH 149*68ad2b0dSBaptiste Daroussin#undef wcwidth 150*68ad2b0dSBaptiste Daroussin#define wcwidth(ucs) _nc_wcwidth((wchar_t)(ucs)) 151*68ad2b0dSBaptiste Daroussinextern NCURSES_EXPORT(int) _nc_wcwidth(uint32_t); 152*68ad2b0dSBaptiste Daroussin#endif 153*68ad2b0dSBaptiste Daroussin 154*68ad2b0dSBaptiste Daroussintypedef struct 155*68ad2b0dSBaptiste Daroussin{ 156*68ad2b0dSBaptiste Daroussin DWORD dwFlagIn; 157*68ad2b0dSBaptiste Daroussin DWORD dwFlagOut; 158*68ad2b0dSBaptiste Daroussin} ConsoleMode; 159*68ad2b0dSBaptiste Daroussin 160*68ad2b0dSBaptiste Daroussin#define CON_NUMPAIRS 64 161*68ad2b0dSBaptiste Daroussintypedef struct { 162*68ad2b0dSBaptiste Daroussin BOOL initialized; 163*68ad2b0dSBaptiste Daroussin BOOL buffered; 164*68ad2b0dSBaptiste Daroussin BOOL window_only; 165*68ad2b0dSBaptiste Daroussin BOOL progMode; 166*68ad2b0dSBaptiste Daroussin BOOL isMinTTY; 167*68ad2b0dSBaptiste Daroussin BOOL isTermInfoConsole; 168*68ad2b0dSBaptiste Daroussin HANDLE out; 169*68ad2b0dSBaptiste Daroussin HANDLE inp; 170*68ad2b0dSBaptiste Daroussin HANDLE hdl; 171*68ad2b0dSBaptiste Daroussin HANDLE lastOut; 172*68ad2b0dSBaptiste Daroussin int numButtons; 173*68ad2b0dSBaptiste Daroussin LPDWORD ansi_map; 174*68ad2b0dSBaptiste Daroussin LPDWORD map; 175*68ad2b0dSBaptiste Daroussin LPDWORD rmap; 176*68ad2b0dSBaptiste Daroussin WORD pairs[CON_NUMPAIRS]; 177*68ad2b0dSBaptiste Daroussin COORD origin; 178*68ad2b0dSBaptiste Daroussin CHAR_INFO *save_screen; 179*68ad2b0dSBaptiste Daroussin COORD save_size; 180*68ad2b0dSBaptiste Daroussin SMALL_RECT save_region; 181*68ad2b0dSBaptiste Daroussin CONSOLE_SCREEN_BUFFER_INFO SBI; 182*68ad2b0dSBaptiste Daroussin CONSOLE_SCREEN_BUFFER_INFO save_SBI; 183*68ad2b0dSBaptiste Daroussin CONSOLE_CURSOR_INFO save_CI; 184*68ad2b0dSBaptiste Daroussin ConsoleMode originalMode; 185*68ad2b0dSBaptiste Daroussin} ConsoleInfo; 186*68ad2b0dSBaptiste Daroussin 187*68ad2b0dSBaptiste Daroussinextern NCURSES_EXPORT_VAR(ConsoleInfo) _nc_CONSOLE; 188*68ad2b0dSBaptiste Daroussin#define WINCONSOLE _nc_CONSOLE 189*68ad2b0dSBaptiste Daroussin 190*68ad2b0dSBaptiste Daroussin#ifdef __cplusplus 191*68ad2b0dSBaptiste Daroussin} 192*68ad2b0dSBaptiste Daroussin#endif 193*68ad2b0dSBaptiste Daroussin 194*68ad2b0dSBaptiste Daroussin#ifdef CURSES_PRIV_H /* test.priv.h just needs the preceding */ 195*68ad2b0dSBaptiste Daroussin#include <term.h> 196*68ad2b0dSBaptiste Daroussin#endif 197*68ad2b0dSBaptiste Daroussin 198*68ad2b0dSBaptiste Daroussin#if USE_DOS_PATHS 199*68ad2b0dSBaptiste DaroussinNCURSES_EXPORT(const char *) _nc_to_dospath(const char *, char *); 200*68ad2b0dSBaptiste Daroussin#define FixupPathname(path) \ 201*68ad2b0dSBaptiste Daroussin char fixed_pathname[PATH_MAX]; \ 202*68ad2b0dSBaptiste Daroussin path = _nc_to_dospath(path, fixed_pathname) 203*68ad2b0dSBaptiste Daroussin#define FixupPathname2(path,buffer) \ 204*68ad2b0dSBaptiste Daroussin path = _nc_to_dospath(path, buffer) 205*68ad2b0dSBaptiste Daroussin#endif 206*68ad2b0dSBaptiste Daroussin 207*68ad2b0dSBaptiste Daroussin#undef ttyname 208*68ad2b0dSBaptiste Daroussin#define ttyname(fd) NULL 209*68ad2b0dSBaptiste Daroussin 210*68ad2b0dSBaptiste Daroussin#endif /* _WIN32 || _WIN64 */ 211*68ad2b0dSBaptiste Daroussin 212*68ad2b0dSBaptiste Daroussin#endif /* NC_WIN32_H */ 213