master
1/**
2 * This file has no copyright assigned and is placed in the Public Domain.
3 * This file is part of the mingw-w64 runtime package.
4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5 */
6
7#ifndef _APISETCONSOLE_
8#define _APISETCONSOLE_
9
10#include <_mingw_unicode.h>
11
12#include <apiset.h>
13#include <apisetcconv.h>
14#include <minwinbase.h>
15#include <minwindef.h>
16
17#include <wincontypes.h>
18
19#ifdef __cplusplus
20extern "C" {
21#endif
22
23#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
24
25WINBASEAPI WINBOOL WINAPI AllocConsole(void);
26
27#if (NTDDI_VERSION >= NTDDI_WIN11_GE)
28
29typedef enum ALLOC_CONSOLE_MODE {
30 ALLOC_CONSOLE_MODE_DEFAULT = 0,
31 ALLOC_CONSOLE_MODE_NEW_WINDOW = 1,
32 ALLOC_CONSOLE_MODE_NO_WINDOW = 2
33} ALLOC_CONSOLE_MODE;
34
35typedef struct ALLOC_CONSOLE_OPTIONS {
36 ALLOC_CONSOLE_MODE mode;
37 WINBOOL useShowWindow;
38 WORD showWindow;
39} ALLOC_CONSOLE_OPTIONS, *PALLOC_CONSOLE_OPTIONS;
40
41typedef enum ALLOC_CONSOLE_RESULT {
42 ALLOC_CONSOLE_RESULT_NO_CONSOLE = 0,
43 ALLOC_CONSOLE_RESULT_NEW_CONSOLE = 1,
44 ALLOC_CONSOLE_RESULT_EXISTING_CONSOLE = 2
45} ALLOC_CONSOLE_RESULT, *PALLOC_CONSOLE_RESULT;
46
47WINBASEAPI HRESULT WINAPI AllocConsoleWithOptions(PALLOC_CONSOLE_OPTIONS options, PALLOC_CONSOLE_RESULT result);
48
49#endif /* NTDDI_VERSION >= NTDDI_WIN11_GE */
50
51WINBASEAPI WINBOOL WINAPI FreeConsole(void);
52
53#if (_WIN32_WINNT >= 0x0500)
54
55WINBASEAPI WINBOOL WINAPI AttachConsole(DWORD process_id);
56
57#define ATTACH_PARENT_PROCESS ((DWORD)-1)
58
59#endif /* _WIN32_WINNT >= 0x0500 */
60
61WINBASEAPI UINT WINAPI GetConsoleCP(void);
62WINBASEAPI UINT WINAPI GetConsoleOutputCP(void);
63
64#define ENABLE_PROCESSED_INPUT 0x0001
65#define ENABLE_LINE_INPUT 0x0002
66#define ENABLE_ECHO_INPUT 0x0004
67#define ENABLE_WINDOW_INPUT 0x0008
68#define ENABLE_MOUSE_INPUT 0x0010
69#define ENABLE_INSERT_MODE 0x0020
70#define ENABLE_QUICK_EDIT_MODE 0x0040
71#define ENABLE_EXTENDED_FLAGS 0x0080
72#define ENABLE_AUTO_POSITION 0x0100
73#define ENABLE_VIRTUAL_TERMINAL_INPUT 0x0200
74
75#define ENABLE_PROCESSED_OUTPUT 0x0001
76#define ENABLE_WRAP_AT_EOL_OUTPUT 0x0002
77#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
78#define DISABLE_NEWLINE_AUTO_RETURN 0x0008
79#define ENABLE_LVB_GRID_WORLDWIDE 0x0010
80
81WINBASEAPI WINBOOL WINAPI GetConsoleMode(HANDLE console_handle, LPDWORD mode);
82WINBASEAPI WINBOOL WINAPI SetConsoleMode(HANDLE console_handle, DWORD mode);
83WINBASEAPI WINBOOL WINAPI GetNumberOfConsoleInputEvents(HANDLE console_input, LPDWORD number_of_events);
84
85WINBASEAPI WINBOOL WINAPI ReadConsoleInputA(HANDLE console_input, PINPUT_RECORD buffer, DWORD length, LPDWORD number_of_events_read);
86WINBASEAPI WINBOOL WINAPI ReadConsoleInputW(HANDLE console_input, PINPUT_RECORD buffer, DWORD length, LPDWORD number_of_events_read);
87#define ReadConsoleInput __MINGW_NAME_AW(ReadConsoleInput)
88
89WINBASEAPI WINBOOL WINAPI PeekConsoleInputA(HANDLE console_input, PINPUT_RECORD buffer, DWORD length, LPDWORD number_of_events_read);
90WINBASEAPI WINBOOL WINAPI PeekConsoleInputW(HANDLE console_input, PINPUT_RECORD buffer, DWORD length, LPDWORD number_of_events_read);
91#define PeekConsoleInput __MINGW_NAME_AW(PeekConsoleInput)
92
93typedef struct _CONSOLE_READCONSOLE_CONTROL {
94 ULONG nLength;
95 ULONG nInitialChars;
96 ULONG dwCtrlWakeupMask;
97 ULONG dwControlKeyState;
98} CONSOLE_READCONSOLE_CONTROL, *PCONSOLE_READCONSOLE_CONTROL;
99
100WINBASEAPI WINBOOL WINAPI ReadConsoleA(HANDLE console_input, LPVOID buffer, DWORD number_of_chars_to_read, LPDWORD number_of_chars_read, PCONSOLE_READCONSOLE_CONTROL input_control);
101WINBASEAPI WINBOOL WINAPI ReadConsoleW(HANDLE console_input, LPVOID buffer, DWORD number_of_chars_to_read, LPDWORD number_of_chars_read, PCONSOLE_READCONSOLE_CONTROL input_control);
102#define ReadConsole __MINGW_NAME_AW(ReadConsole)
103
104WINBASEAPI WINBOOL WINAPI WriteConsoleA(HANDLE console_output, const void *buffer, DWORD number_of_chars_to_write, LPDWORD number_of_chars_written, LPVOID reserved);
105WINBASEAPI WINBOOL WINAPI WriteConsoleW(HANDLE console_output, const void *buffer, DWORD number_of_chars_to_write, LPDWORD number_of_chars_written, LPVOID reserved);
106#define WriteConsole __MINGW_NAME_AW(WriteConsole)
107
108#define CTRL_C_EVENT 0
109#define CTRL_BREAK_EVENT 1
110#define CTRL_CLOSE_EVENT 2
111#define CTRL_LOGOFF_EVENT 5
112#define CTRL_SHUTDOWN_EVENT 6
113
114typedef WINBOOL (WINAPI *PHANDLER_ROUTINE)(DWORD ctrl_type);
115WINBASEAPI WINBOOL WINAPI SetConsoleCtrlHandler(PHANDLER_ROUTINE handler_routine, WINBOOL add);
116
117#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */
118
119#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
120
121#if (NTDDI_VERSION >= NTDDI_WIN10_RS5)
122#define PSEUDOCONSOLE_INHERIT_CURSOR (0x1)
123
124WINBASEAPI HRESULT WINAPI CreatePseudoConsole(COORD size, HANDLE input, HANDLE output, DWORD flags, HPCON *pc);
125WINBASEAPI HRESULT WINAPI ResizePseudoConsole(HPCON pc, COORD size);
126WINBASEAPI void WINAPI ClosePseudoConsole(HPCON pc);
127#endif
128
129#if (NTDDI_VERSION >= NTDDI_WIN11_GE)
130WINBASEAPI HRESULT WINAPI ReleasePseudoConsole(HPCON pc);
131#endif
132
133#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
134
135#ifdef __cplusplus
136}
137#endif
138
139#endif /* _APISETCONSOLE_ */