xref: /freebsd/contrib/ncurses/include/nc_win32.h.in (revision 68ad2b0d7af2a3571c4abac9afa712f9b09b721c)
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