1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Console Server DLL
4 * FILE: win32ss/user/winsrv/consrv/condrv/dummyterm.c
5 * PURPOSE: Dummy Terminal used when no terminal
6 * is attached to the specified console.
7 * PROGRAMMERS: Hermes Belusca-Maito (hermes.belusca@sfr.fr)
8 */
9
10 /* INCLUDES *******************************************************************/
11
12 #include <consrv.h>
13
14 /* DUMMY TERMINAL INTERFACE ***************************************************/
15
16 static NTSTATUS NTAPI
DummyInitTerminal(IN OUT PTERMINAL This,IN PCONSOLE Console)17 DummyInitTerminal(IN OUT PTERMINAL This,
18 IN PCONSOLE Console)
19 {
20 return STATUS_SUCCESS;
21 }
22
23 static VOID NTAPI
DummyDeinitTerminal(IN OUT PTERMINAL This)24 DummyDeinitTerminal(IN OUT PTERMINAL This)
25 {
26 }
27
28
29
30 /************ Line discipline ***************/
31
32 static NTSTATUS NTAPI
DummyReadStream(IN OUT PTERMINAL This,IN BOOLEAN Unicode,OUT PVOID Buffer,IN OUT PCONSOLE_READCONSOLE_CONTROL ReadControl,IN PVOID Parameter OPTIONAL,IN ULONG NumCharsToRead,OUT PULONG NumCharsRead OPTIONAL)33 DummyReadStream(IN OUT PTERMINAL This,
34 IN BOOLEAN Unicode,
35 /**PWCHAR Buffer,**/
36 OUT PVOID Buffer,
37 IN OUT PCONSOLE_READCONSOLE_CONTROL ReadControl,
38 IN PVOID Parameter OPTIONAL,
39 IN ULONG NumCharsToRead,
40 OUT PULONG NumCharsRead OPTIONAL)
41 {
42 /*
43 * We were called because the console was in cooked mode.
44 * There is nothing to read, wait until a real terminal
45 * is plugged into the console.
46 */
47 return STATUS_PENDING;
48 }
49
50 static NTSTATUS NTAPI
DummyWriteStream(IN OUT PTERMINAL This,PTEXTMODE_SCREEN_BUFFER Buff,PWCHAR Buffer,DWORD Length,BOOL Attrib)51 DummyWriteStream(IN OUT PTERMINAL This,
52 PTEXTMODE_SCREEN_BUFFER Buff,
53 PWCHAR Buffer,
54 DWORD Length,
55 BOOL Attrib)
56 {
57 /*
58 * We were called because the console was in cooked mode.
59 * There is nothing to write, wait until a real terminal
60 * is plugged into the console.
61 */
62
63 // /* Stop here if the console is paused */
64 // if (Console->ConsolePaused) return STATUS_PENDING;
65
66 return STATUS_PENDING;
67 }
68
69 /************ Line discipline ***************/
70
71
72
73 static VOID NTAPI
DummyDrawRegion(IN OUT PTERMINAL This,SMALL_RECT * Region)74 DummyDrawRegion(IN OUT PTERMINAL This,
75 SMALL_RECT* Region)
76 {
77 }
78
79 static BOOL NTAPI
DummySetCursorInfo(IN OUT PTERMINAL This,PCONSOLE_SCREEN_BUFFER ScreenBuffer)80 DummySetCursorInfo(IN OUT PTERMINAL This,
81 PCONSOLE_SCREEN_BUFFER ScreenBuffer)
82 {
83 return TRUE;
84 }
85
86 static BOOL NTAPI
DummySetScreenInfo(IN OUT PTERMINAL This,PCONSOLE_SCREEN_BUFFER ScreenBuffer,SHORT OldCursorX,SHORT OldCursorY)87 DummySetScreenInfo(IN OUT PTERMINAL This,
88 PCONSOLE_SCREEN_BUFFER ScreenBuffer,
89 SHORT OldCursorX,
90 SHORT OldCursorY)
91 {
92 return TRUE;
93 }
94
95 static VOID NTAPI
DummyResizeTerminal(IN OUT PTERMINAL This)96 DummyResizeTerminal(IN OUT PTERMINAL This)
97 {
98 }
99
100 static VOID NTAPI
DummySetActiveScreenBuffer(IN OUT PTERMINAL This)101 DummySetActiveScreenBuffer(IN OUT PTERMINAL This)
102 {
103 }
104
105 static VOID NTAPI
DummyReleaseScreenBuffer(IN OUT PTERMINAL This,IN PCONSOLE_SCREEN_BUFFER ScreenBuffer)106 DummyReleaseScreenBuffer(IN OUT PTERMINAL This,
107 IN PCONSOLE_SCREEN_BUFFER ScreenBuffer)
108 {
109 }
110
111 static VOID NTAPI
DummyGetLargestConsoleWindowSize(IN OUT PTERMINAL This,PCOORD pSize)112 DummyGetLargestConsoleWindowSize(IN OUT PTERMINAL This,
113 PCOORD pSize)
114 {
115 /* Return a standard size */
116 if (!pSize) return;
117 pSize->X = 80;
118 pSize->Y = 25;
119 }
120
121 static BOOL NTAPI
DummySetPalette(IN OUT PTERMINAL This,HPALETTE PaletteHandle,UINT PaletteUsage)122 DummySetPalette(IN OUT PTERMINAL This,
123 HPALETTE PaletteHandle,
124 UINT PaletteUsage)
125 {
126 return TRUE;
127 }
128
129 static BOOL NTAPI
DummySetCodePage(IN OUT PTERMINAL This,UINT CodePage)130 DummySetCodePage(IN OUT PTERMINAL This,
131 UINT CodePage)
132 {
133 return TRUE;
134 }
135
136 static INT NTAPI
DummyShowMouseCursor(IN OUT PTERMINAL This,BOOL Show)137 DummyShowMouseCursor(IN OUT PTERMINAL This,
138 BOOL Show)
139 {
140 return 0;
141 }
142
143 static TERMINAL_VTBL DummyVtbl =
144 {
145 DummyInitTerminal,
146 DummyDeinitTerminal,
147
148 DummyReadStream,
149 DummyWriteStream,
150
151 DummyDrawRegion,
152 DummySetCursorInfo,
153 DummySetScreenInfo,
154 DummyResizeTerminal,
155 DummySetActiveScreenBuffer,
156 DummyReleaseScreenBuffer,
157 DummyGetLargestConsoleWindowSize,
158 DummySetPalette,
159 DummySetCodePage,
160 DummyShowMouseCursor,
161 };
162
163 VOID
ResetTerminal(IN PCONSOLE Console)164 ResetTerminal(IN PCONSOLE Console)
165 {
166 if (!Console) return;
167
168 /* Reinitialize the terminal interface */
169 RtlZeroMemory(&Console->TermIFace, sizeof(Console->TermIFace));
170 Console->TermIFace.Vtbl = &DummyVtbl;
171 }
172
173 /* EOF */
174