aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/3rdparty/winpty/src/include/winpty_constants.h
blob: 11e34cf171c9c40def5437bfebd732af7c5438fd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/*
 * Copyright (c) 2016 Ryan Prichard
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to
 * deal in the Software without restriction, including without limitation the
 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 * sell copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 * IN THE SOFTWARE.
 */

#ifndef WINPTY_CONSTANTS_H
#define WINPTY_CONSTANTS_H

/*
 * You may want to include winpty.h instead, which includes this header.
 *
 * This file is split out from winpty.h so that the agent can access the
 * winpty flags without also declaring the libwinpty APIs.
 */

/*****************************************************************************
 * Error codes. */

#define WINPTY_ERROR_SUCCESS                        0
#define WINPTY_ERROR_OUT_OF_MEMORY                  1
#define WINPTY_ERROR_SPAWN_CREATE_PROCESS_FAILED    2
#define WINPTY_ERROR_LOST_CONNECTION                3
#define WINPTY_ERROR_AGENT_EXE_MISSING              4
#define WINPTY_ERROR_UNSPECIFIED                    5
#define WINPTY_ERROR_AGENT_DIED                     6
#define WINPTY_ERROR_AGENT_TIMEOUT                  7
#define WINPTY_ERROR_AGENT_CREATION_FAILED          8



/*****************************************************************************
 * Configuration of a new agent. */

/* Create a new screen buffer (connected to the "conerr" terminal pipe) and
 * pass it to child processes as the STDERR handle.  This flag also prevents
 * the agent from reopening CONOUT$ when it polls -- regardless of whether the
 * active screen buffer changes, winpty continues to monitor the original
 * primary screen buffer. */
#define WINPTY_FLAG_CONERR              0x1ull

/* Don't output escape sequences. */
#define WINPTY_FLAG_PLAIN_OUTPUT        0x2ull

/* Do output color escape sequences.  These escapes are output by default, but
 * are suppressed with WINPTY_FLAG_PLAIN_OUTPUT.  Use this flag to reenable
 * them. */
#define WINPTY_FLAG_COLOR_ESCAPES       0x4ull

/* On XP and Vista, winpty needs to put the hidden console on a desktop in a
 * service window station so that its polling does not interfere with other
 * (visible) console windows.  To create this desktop, it must change the
 * process' window station (i.e. SetProcessWindowStation) for the duration of
 * the winpty_open call.  In theory, this change could interfere with the
 * winpty client (e.g. other threads, spawning children), so winpty by default
 * spawns a special agent process to create the hidden desktop.  Spawning
 * processes on Windows is slow, though, so if
 * WINPTY_FLAG_ALLOW_CURPROC_DESKTOP_CREATION is set, winpty changes this
 * process' window station instead.
 * See https://github.com/rprichard/winpty/issues/58. */
#define WINPTY_FLAG_ALLOW_CURPROC_DESKTOP_CREATION 0x8ull

#define WINPTY_FLAG_MASK (0ull \
    | WINPTY_FLAG_CONERR \
    | WINPTY_FLAG_PLAIN_OUTPUT \
    | WINPTY_FLAG_COLOR_ESCAPES \
    | WINPTY_FLAG_ALLOW_CURPROC_DESKTOP_CREATION \
)

/* QuickEdit mode is initially disabled, and the agent does not send mouse
 * mode sequences to the terminal.  If it receives mouse input, though, it
 * still writes MOUSE_EVENT_RECORD values into CONIN. */
#define WINPTY_MOUSE_MODE_NONE          0

/* QuickEdit mode is initially enabled.  As CONIN enters or leaves mouse
 * input mode (i.e. where ENABLE_MOUSE_INPUT is on and ENABLE_QUICK_EDIT_MODE
 * is off), the agent enables or disables mouse input on the terminal.
 *
 * This is the default mode. */
#define WINPTY_MOUSE_MODE_AUTO          1

/* QuickEdit mode is initially disabled, and the agent enables the terminal's
 * mouse input mode.  It does not disable terminal mouse mode (until exit). */
#define WINPTY_MOUSE_MODE_FORCE         2



/*****************************************************************************
 * winpty agent RPC call: process creation. */

/* If the spawn is marked "auto-shutdown", then the agent shuts down console
 * output once the process exits.  The agent stops polling for new console
 * output, and once all pending data has been written to the output pipe, the
 * agent closes the pipe.  (At that point, the pipe may still have data in it,
 * which the client may read.  Once all the data has been read, further reads
 * return EOF.) */
#define WINPTY_SPAWN_FLAG_AUTO_SHUTDOWN 1ull

/* After the agent shuts down output, and after all output has been written
 * into the pipe(s), exit the agent by closing the console.  If there any
 * surviving processes still attached to the console, they are killed.
 *
 * Note: With this flag, an RPC call (e.g. winpty_set_size) issued after the
 * agent exits will fail with an I/O or dead-agent error. */
#define WINPTY_SPAWN_FLAG_EXIT_AFTER_SHUTDOWN 2ull

/* All the spawn flags. */
#define WINPTY_SPAWN_FLAG_MASK (0ull \
    | WINPTY_SPAWN_FLAG_AUTO_SHUTDOWN \
    | WINPTY_SPAWN_FLAG_EXIT_AFTER_SHUTDOWN \
)



#endif /* WINPTY_CONSTANTS_H */