9398065bc09211f54103cbb9e1af7a52750d0f2e
[reactos.git] / win32ss / user / winsrv / consrv / include / conio_winsrv.h
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Console Server DLL
4 * FILE: win32ss/user/winsrv/consrv/include/conio_winsrv.h
5 * PURPOSE: Public Console I/O Interface - Offers wrap-up structures
6 * over the console objects exposed by the console driver.
7 * PROGRAMMERS: Gé van Geldorp
8 * Jeffrey Morlan
9 * Hermes Belusca-Maito (hermes.belusca@sfr.fr)
10 */
11
12 #pragma once
13
14 #include "rect.h"
15
16 // This is ALMOST a HACK!!!!!!!
17 // Helpers for code refactoring
18 #ifdef USE_NEW_CONSOLE_WAY
19
20 #define _CONSRV_CONSOLE _WINSRV_CONSOLE
21 #define CONSRV_CONSOLE WINSRV_CONSOLE
22 #define PCONSRV_CONSOLE PWINSRV_CONSOLE
23
24 #else
25
26 #define _CONSRV_CONSOLE _CONSOLE
27 #define CONSRV_CONSOLE CONSOLE
28 #define PCONSRV_CONSOLE PCONSOLE
29
30 #endif
31
32 #define CSR_DEFAULT_CURSOR_SIZE 25
33
34 /* VGA character cell */
35 typedef struct _CHAR_CELL
36 {
37 CHAR Char;
38 BYTE Attributes;
39 } CHAR_CELL, *PCHAR_CELL;
40 C_ASSERT(sizeof(CHAR_CELL) == 2);
41
42 // HACK!!
43 struct _WINSRV_CONSOLE;
44 /* HACK: */ typedef struct _WINSRV_CONSOLE *PWINSRV_CONSOLE;
45 #ifdef USE_NEW_CONSOLE_WAY
46 #include "conio.h"
47 #endif
48
49 typedef struct _FRONTEND FRONTEND, *PFRONTEND;
50
51 typedef struct _FRONTEND_VTBL
52 {
53 // NTSTATUS (NTAPI *UnloadFrontEnd)(IN OUT PFRONTEND This);
54
55 /*
56 * Internal interface (functions called by the console server only)
57 */
58 NTSTATUS (NTAPI *InitFrontEnd)(IN OUT PFRONTEND This,
59 IN struct _CONSRV_CONSOLE* Console);
60 VOID (NTAPI *DeinitFrontEnd)(IN OUT PFRONTEND This);
61
62 /* Interface used for both text-mode and graphics screen buffers */
63 VOID (NTAPI *DrawRegion)(IN OUT PFRONTEND This,
64 SMALL_RECT* Region);
65 /* Interface used only for text-mode screen buffers */
66 VOID (NTAPI *WriteStream)(IN OUT PFRONTEND This,
67 SMALL_RECT* Region,
68 SHORT CursorStartX,
69 SHORT CursorStartY,
70 UINT ScrolledLines,
71 PWCHAR Buffer,
72 UINT Length);
73 VOID (NTAPI *RingBell)(IN OUT PFRONTEND This);
74 BOOL (NTAPI *SetCursorInfo)(IN OUT PFRONTEND This,
75 PCONSOLE_SCREEN_BUFFER ScreenBuffer);
76 BOOL (NTAPI *SetScreenInfo)(IN OUT PFRONTEND This,
77 PCONSOLE_SCREEN_BUFFER ScreenBuffer,
78 SHORT OldCursorX,
79 SHORT OldCursorY);
80 VOID (NTAPI *ResizeTerminal)(IN OUT PFRONTEND This);
81 VOID (NTAPI *SetActiveScreenBuffer)(IN OUT PFRONTEND This);
82 VOID (NTAPI *ReleaseScreenBuffer)(IN OUT PFRONTEND This,
83 IN PCONSOLE_SCREEN_BUFFER ScreenBuffer);
84 VOID (NTAPI *RefreshInternalInfo)(IN OUT PFRONTEND This);
85
86 /*
87 * External interface (functions corresponding to the Console API)
88 */
89 VOID (NTAPI *ChangeTitle)(IN OUT PFRONTEND This);
90 BOOL (NTAPI *ChangeIcon)(IN OUT PFRONTEND This,
91 HICON IconHandle);
92 HWND (NTAPI *GetConsoleWindowHandle)(IN OUT PFRONTEND This);
93 VOID (NTAPI *GetLargestConsoleWindowSize)(IN OUT PFRONTEND This,
94 PCOORD pSize);
95 BOOL (NTAPI *GetSelectionInfo)(IN OUT PFRONTEND This,
96 PCONSOLE_SELECTION_INFO pSelectionInfo);
97 BOOL (NTAPI *SetPalette)(IN OUT PFRONTEND This,
98 HPALETTE PaletteHandle,
99 UINT PaletteUsage);
100 ULONG (NTAPI *GetDisplayMode)(IN OUT PFRONTEND This);
101 BOOL (NTAPI *SetDisplayMode)(IN OUT PFRONTEND This,
102 ULONG NewMode);
103 INT (NTAPI *ShowMouseCursor)(IN OUT PFRONTEND This,
104 BOOL Show);
105 BOOL (NTAPI *SetMouseCursor)(IN OUT PFRONTEND This,
106 HCURSOR CursorHandle);
107 HMENU (NTAPI *MenuControl)(IN OUT PFRONTEND This,
108 UINT CmdIdLow,
109 UINT CmdIdHigh);
110 BOOL (NTAPI *SetMenuClose)(IN OUT PFRONTEND This,
111 BOOL Enable);
112 } FRONTEND_VTBL, *PFRONTEND_VTBL;
113
114 struct _FRONTEND
115 {
116 PFRONTEND_VTBL Vtbl; /* Virtual table */
117 NTSTATUS (NTAPI *UnloadFrontEnd)(IN OUT PFRONTEND This);
118
119 struct _CONSRV_CONSOLE* Console; /* Console to which the frontend is attached to */
120 PVOID Context; /* Private context */
121 PVOID Context2; /* Private context */
122 };
123
124 /* PauseFlags values (internal only) */
125 #define PAUSED_FROM_KEYBOARD 0x1
126 #define PAUSED_FROM_SCROLLBAR 0x2
127 #define PAUSED_FROM_SELECTION 0x4
128
129 typedef struct _WINSRV_CONSOLE
130 {
131 /******************************* Console Set-up *******************************/
132 /* This **MUST** be FIRST!! */
133 #ifdef USE_NEW_CONSOLE_WAY
134 CONSOLE;
135 // CONSOLE Console;
136 // // PCONSOLE Console;
137 #endif
138
139 // LONG ReferenceCount; /* Is incremented each time a handle to something in the console (a screen-buffer or the input buffer of this console) gets referenced */
140 // CRITICAL_SECTION Lock;
141 // CONSOLE_STATE State; /* State of the console */
142
143 HANDLE InitEvents[MAX_INIT_EVENTS]; /* Initialization events */
144
145 FRONTEND FrontEndIFace; /* Frontend-specific interface */
146
147 /******************************* Process support ******************************/
148 LIST_ENTRY ProcessList; /* List of processes owning the console. The first one is the so-called "Console Leader Process" */
149 PCONSOLE_PROCESS_DATA NotifiedLastCloseProcess; /* Pointer to the unique process that needs to be notified when the console leader process is killed */
150 BOOLEAN NotifyLastClose; /* TRUE if the console should send a control event when the console leader process is killed */
151 BOOLEAN HasFocus; /* TRUE if the console has focus (is in the foreground) */
152
153 /******************************* Pausing support ******************************/
154 BYTE PauseFlags;
155 LIST_ENTRY ReadWaitQueue; /* List head for the queue of unique input buffer read wait blocks */
156 LIST_ENTRY WriteWaitQueue; /* List head for the queue of current screen-buffer write wait blocks */
157
158 /**************************** Aliases and Histories ***************************/
159 struct _ALIAS_HEADER *Aliases;
160 LIST_ENTRY HistoryBuffers;
161 ULONG HistoryBufferSize; /* Size for newly created history buffers */
162 ULONG NumberOfHistoryBuffers; /* Maximum number of history buffers allowed */
163 BOOLEAN HistoryNoDup; /* Remove old duplicate history entries */
164
165 /**************************** Input Line Discipline ***************************/
166 PWCHAR LineBuffer; /* Current line being input, in line buffered mode */
167 ULONG LineMaxSize; /* Maximum size of line in characters (including CR+LF) */
168 ULONG LineSize; /* Current size of line */
169 ULONG LinePos; /* Current position within line */
170 BOOLEAN LineComplete; /* User pressed enter, ready to send back to client */
171 BOOLEAN LineUpPressed;
172 BOOLEAN LineInsertToggle; /* Replace character over cursor instead of inserting */
173 ULONG LineWakeupMask; /* Bitmap of which control characters will end line input */
174
175 BOOLEAN InsertMode;
176 BOOLEAN QuickEdit;
177
178 /************************ Virtual DOS Machine support *************************/
179 COORD VDMBufferSize; /* Real size of the VDM buffer, in units of ??? */
180 HANDLE VDMBufferSection; /* Handle to the memory shared section for the VDM buffer */
181 PVOID VDMBuffer; /* Our VDM buffer */
182 PVOID ClientVDMBuffer; /* A copy of the client view of our VDM buffer */
183 HANDLE VDMClientProcess; /* Handle to the client process who opened the buffer, to unmap the view */
184
185 HANDLE StartHardwareEvent;
186 HANDLE EndHardwareEvent;
187 HANDLE ErrorHardwareEvent;
188
189 /****************************** Other properties ******************************/
190 LIST_ENTRY PopupWindows; /* List of popup windows */
191 UNICODE_STRING OriginalTitle; /* Original title of console, the one defined when the console leader is launched; it never changes. Always NULL-terminated */
192 UNICODE_STRING Title; /* Title of console. Always NULL-terminated */
193 COLORREF Colors[16]; /* Colour palette */
194
195 } WINSRV_CONSOLE; // , *PWINSRV_CONSOLE;
196
197 /* console.c */
198 VOID ConioPause(PCONSRV_CONSOLE Console, UINT Flags);
199 VOID ConioUnpause(PCONSRV_CONSOLE Console, UINT Flags);
200
201 PCONSOLE_PROCESS_DATA NTAPI
202 ConSrvGetConsoleLeaderProcess(IN PCONSRV_CONSOLE Console);
203 NTSTATUS
204 ConSrvConsoleCtrlEvent(IN ULONG CtrlEvent,
205 IN PCONSOLE_PROCESS_DATA ProcessData);
206 NTSTATUS NTAPI
207 ConSrvConsoleProcessCtrlEvent(IN PCONSRV_CONSOLE Console,
208 IN ULONG ProcessGroupId,
209 IN ULONG CtrlEvent);
210 VOID
211 ConSrvSetProcessFocus(IN PCSR_PROCESS CsrProcess,
212 IN BOOLEAN SetForeground);
213 NTSTATUS NTAPI
214 ConSrvSetConsoleProcessFocus(IN PCONSRV_CONSOLE Console,
215 IN BOOLEAN SetForeground);
216
217 /* coninput.c */
218 VOID NTAPI ConioProcessKey(PCONSRV_CONSOLE Console, MSG* msg);
219 DWORD ConioEffectiveCursorSize(PCONSRV_CONSOLE Console,
220 DWORD Scale);
221
222 NTSTATUS
223 ConioProcessInputEvent(PCONSRV_CONSOLE Console,
224 PINPUT_RECORD InputEvent);
225
226 /* conoutput.c */
227 PCHAR_INFO ConioCoordToPointer(PTEXTMODE_SCREEN_BUFFER Buff, ULONG X, ULONG Y);
228 NTSTATUS ConioResizeBuffer(PCONSOLE /*PCONSRV_CONSOLE*/ Console,
229 PTEXTMODE_SCREEN_BUFFER ScreenBuffer,
230 COORD Size);
231
232 /* terminal.c */
233 VOID ConioDrawConsole(PCONSRV_CONSOLE Console);
234
235 /* EOF */