blob: e67b8e0455064807fee8fa643b42a344c37567c4 [file] [log] [blame]
micky3879b9f5e72025-07-08 18:04:53 -04001/****************************************************************************
2 * Copyright 2018-2020,2023 Thomas E. Dickey *
3 * Copyright 2008-2010,2017 Free Software Foundation, Inc. *
4 * *
5 * Permission is hereby granted, free of charge, to any person obtaining a *
6 * copy of this software and associated documentation files (the *
7 * "Software"), to deal in the Software without restriction, including *
8 * without limitation the rights to use, copy, modify, merge, publish, *
9 * distribute, distribute with modifications, sublicense, and/or sell *
10 * copies of the Software, and to permit persons to whom the Software is *
11 * furnished to do so, subject to the following conditions: *
12 * *
13 * The above copyright notice and this permission notice shall be included *
14 * in all copies or substantial portions of the Software. *
15 * *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
19 * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
20 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
21 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
22 * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
23 * *
24 * Except as contained in this notice, the name(s) of the above copyright *
25 * holders shall not be used in advertising or otherwise to promote the *
26 * sale, use or other dealings in this Software without prior written *
27 * authorization. *
28 ****************************************************************************/
29
30/****************************************************************************
31 * Author: Thomas Dickey, 2008-on *
32 ****************************************************************************/
33
34/* $Id: nc_win32.h,v 1.10 2023/02/25 20:09:23 tom Exp $ */
35
36#ifndef NC_WIN32_H
37#define NC_WIN32_H 1
38
39#if defined(_WIN32) || defined(_WIN64)
40
41#ifndef _NC_WINDOWS
42#define _NC_WINDOWS
43#endif
44
45#ifdef TERMIOS
46#error TERMIOS must not be defined on Windows
47#endif
48
49/* We no longer support WindowsXP.
50 Minimum requirement is Windows Vista or Server2008,
51 aka Windows NT 6.0
52*/
53#ifdef WINVER
54# if WINVER < 0x0600
55# error WINVER must at least be 0x0600
56# endif
57#else
58# define WINVER 0x0600
59#endif
60
61#undef _NC_CHECK_MINTTY
62#if WINVER >= 0x0600
63#define _NC_CHECK_MINTTY
64#endif
65
66#include <windows.h>
67
68#if HAVE_SYS_TIME_H
69#include <sys/time.h> /* for struct timeval */
70#endif
71
72#ifdef _NC_MSC
73#include <winsock2.h> /* for struct timeval */
74#endif
75
76#ifdef __cplusplus
77extern "C" {
78#endif
79
80#include <ncurses_dll.h>
81
82#if !HAVE_CLOCK_GETTIME && !HAVE_GETTIMEOFDAY
83#undef HAVE_GETTIMEOFDAY
84#define HAVE_GETTIMEOFDAY 2
85extern NCURSES_EXPORT(int) _nc_gettimeofday(struct timeval *, void *);
86#endif
87
88#undef wcwidth
89#define wcwidth(ucs) _nc_wcwidth((wchar_t)(ucs))
90extern NCURSES_EXPORT(int) _nc_wcwidth(wchar_t);
91
92#ifdef EVENTLIST_2nd /* test.priv.h just needs the preceding */
93
94extern NCURSES_EXPORT(void) _nc_console_size(int* Lines, int* Cols);
95extern NCURSES_EXPORT(HANDLE) _nc_console_handle(int fd);
96extern NCURSES_EXPORT(int) _nc_console_isatty(int fd);
97extern NCURSES_EXPORT(int) _nc_console_test(int fd);
98extern NCURSES_EXPORT(int) _nc_console_read(SCREEN *sp,HANDLE hdl,int *buf);
99extern NCURSES_EXPORT(int) _nc_console_twait(SCREEN *, HANDLE,int,int,int * EVENTLIST_2nd(_nc_eventlist * evl));
100extern NCURSES_EXPORT(WORD) _nc_console_MapColor(bool fore, int color);
101extern NCURSES_EXPORT(void) _nc_console_selectActiveHandle(void);
102extern NCURSES_EXPORT(bool) _nc_console_get_SBI(void);
103extern NCURSES_EXPORT(void) _nc_console_set_scrollback(bool normal, CONSOLE_SCREEN_BUFFER_INFO * info);
104extern NCURSES_EXPORT(int) _nc_console_testmouse(SCREEN *,HANDLE,int EVENTLIST_2nd(_nc_eventlist*));
105extern NCURSES_EXPORT(int) _nc_console_keyok(int keycode,int flag);
106extern NCURSES_EXPORT(bool) _nc_console_keyExist(int keycode);
107extern NCURSES_EXPORT(bool) _nc_console_checkinit(bool initFlag, bool assumeTermInfo);
108extern NCURSES_EXPORT(int) _nc_console_vt_supported(void);
109
110#ifdef _NC_CHECK_MINTTY
111extern NCURSES_EXPORT(int) _nc_console_checkmintty(int fd, LPHANDLE pMinTTY);
112#endif
113
114#undef VALID_TERM_ENV
115#define MS_TERMINAL "ms-terminal"
116#define VALID_TERM_ENV(term_env, no_terminal) \
117 (term_env = (NonEmpty(term_env) \
118 ? term_env \
119 : (_nc_console_vt_supported() \
120 ? MS_TERMINAL \
121 : no_terminal)), \
122 NonEmpty(term_env))
123
124 /*
125 * Various Console mode definitions
126 */
127
128 /* Flags to enable virtual Terminal processing */
129#define VT_FLAG_OUT ENABLE_VIRTUAL_TERMINAL_PROCESSING
130#define VT_FLAG_IN ENABLE_VIRTUAL_TERMINAL_INPUT
131
132 /* Default flags for input/output modes */
133#define CONMODE_IN_DEFAULT (ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT | ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT)
134#define CONMODE_OUT_DEFAULT (ENABLE_PROCESSED_OUTPUT | DISABLE_NEWLINE_AUTO_RETURN | ENABLE_LVB_GRID_WORLDWIDE)
135
136 /* Flags to reset from RAW/CBREAK */
137#define CONMODE_NORAW (ENABLE_PROCESSED_INPUT|ENABLE_LINE_INPUT)
138#define CONMODE_NOCBREAK (ENABLE_LINE_INPUT)
139
140
141#if defined(USE_TERM_DRIVER) && defined(USE_WIN32CON_DRIVER)
142extern NCURSES_EXPORT_VAR(TERM_DRIVER) _nc_WIN_DRIVER;
143#endif
144
145#define CON_NUMPAIRS 64
146typedef struct {
147 BOOL initialized;
148 BOOL buffered;
149 BOOL window_only;
150 BOOL progMode;
151 BOOL isMinTTY;
152 BOOL isTermInfoConsole;
153 HANDLE out;
154 HANDLE inp;
155 HANDLE hdl;
156 HANDLE lastOut;
157 int numButtons;
158 LPDWORD ansi_map;
159 LPDWORD map;
160 LPDWORD rmap;
161 WORD pairs[CON_NUMPAIRS];
162 COORD origin;
163 CHAR_INFO *save_screen;
164 COORD save_size;
165 SMALL_RECT save_region;
166 CONSOLE_SCREEN_BUFFER_INFO SBI;
167 CONSOLE_SCREEN_BUFFER_INFO save_SBI;
168 CONSOLE_CURSOR_INFO save_CI;
169 TTY originalMode;
170} ConsoleInfo;
171
172extern NCURSES_EXPORT_VAR(ConsoleInfo) _nc_CONSOLE;
173#define WINCONSOLE _nc_CONSOLE
174
175#define TypeAlloca(type,count)(type*) _alloca(sizeof(type)*(size_t)(count))
176
177#endif /* EVENTLIST_2nd */
178
179#ifdef __cplusplus
180}
181#endif
182
183#endif /* _WIN32 || _WIN64 */
184
185#endif /* NC_WIN32_H */