ReactOS  0.4.13-dev-651-g5dbc677
console.c
Go to the documentation of this file.
1 
2 /* INCLUDES *******************************************************************/
3 
4 // #include "ntvdm.h"
5 
6 // #define NDEBUG
7 // #include <debug.h>
8 
9 // #include "emulator.h"
10 #include "resource.h"
11 
12 /* VARIABLES ******************************************************************/
13 
15 
19 
22 static INT VdmMenuPos = -1;
24 
25 /*
26  * Those menu helpers were taken from the GUI frontend in winsrv.dll
27  */
28 typedef struct _VDM_MENUITEM
29 {
31  const struct _VDM_MENUITEM *SubMenu;
34 
35 static const VDM_MENUITEM VdmMenuItems[] =
36 {
39  { -1, NULL, 0 }, /* Separator */
40  // { IDS_VDM_MOUNT_FLOPPY, NULL, ID_VDM_DRIVES },
41  // { IDS_VDM_EJECT_FLOPPY, NULL, ID_VDM_DRIVES },
42  { -1, NULL, 0 }, /* Separator */
44 
45  { 0, NULL, 0 } /* End of list */
46 };
47 
49 {
50  { -1, NULL, 0 }, /* Separator */
51  { IDS_CAPTURE_MOUSE, NULL, ID_CAPTURE_MOUSE }, /* "Capture mouse"; can be renamed to "Release mouse" */
52  { IDS_VDM_MENU , VdmMenuItems, 0 }, /* ReactOS VDM Menu */
53 
54  { 0, NULL, 0 } /* End of list */
55 };
56 
57 static VOID
59  const VDM_MENUITEM *Items)
60 {
61  UINT i = 0;
62  WCHAR szMenuString[256];
63  HMENU hSubMenu;
64 
65  do
66  {
67  if (Items[i].uID != (UINT)-1)
68  {
70  Items[i].uID,
71  szMenuString,
72  ARRAYSIZE(szMenuString)) > 0)
73  {
74  if (Items[i].SubMenu != NULL)
75  {
76  hSubMenu = CreatePopupMenu();
77  if (hSubMenu != NULL)
78  {
79  AppendMenuItems(hSubMenu, Items[i].SubMenu);
80 
81  if (!AppendMenuW(hMenu,
83  (UINT_PTR)hSubMenu,
84  szMenuString))
85  {
86  DestroyMenu(hSubMenu);
87  }
88  }
89  }
90  else
91  {
92  AppendMenuW(hMenu,
93  MF_STRING,
94  Items[i].uCmdID,
95  szMenuString);
96  }
97  }
98  }
99  else
100  {
101  AppendMenuW(hMenu,
102  MF_SEPARATOR,
103  0,
104  NULL);
105  }
106  i++;
107  } while (!(Items[i].uID == 0 && Items[i].SubMenu == NULL && Items[i].uCmdID == 0));
108 }
109 
110 static BOOL
112 {
113  INT MenuPos, i;
114  MenuPos = GetMenuItemCount(hConsoleMenu);
115 
116  /* Check for the presence of one of the VDM menu items */
117  for (i = 0; i <= MenuPos; i++)
118  {
120  {
121  /* Set VdmMenuPos to the position of the existing menu */
122  VdmMenuPos = i - 1;
123  return TRUE;
124  }
125  }
126  return FALSE;
127 }
128 
129 static VOID
131 {
132  WCHAR szMenuString[256];
133 
134  /* Update "Capture/Release mouse" menu item */
137  szMenuString,
138  ARRAYSIZE(szMenuString)) > 0)
139  {
141  MF_BYCOMMAND, ID_CAPTURE_MOUSE, szMenuString);
142  }
143 }
144 
145 /*static*/ VOID
147 {
148  UINT_PTR ItemID;
149  USHORT i;
150 
151  WCHAR szNoMedia[100];
152  WCHAR szMenuString1[256], szMenuString2[256];
153 
154  /* Update the disks menu items */
155 
157  IDS_NO_MEDIA,
158  szNoMedia,
159  ARRAYSIZE(szNoMedia));
160 
163  szMenuString1,
164  ARRAYSIZE(szMenuString1));
165 
166  for (i = 0; i < ARRAYSIZE(GlobalSettings.FloppyDisks); ++i)
167  {
168  ItemID = ID_VDM_DRIVES + (2 * i);
169 
170  if (GlobalSettings.FloppyDisks[i].Length != 0 &&
173  {
174  /* Update item text */
175  _snwprintf(szMenuString2, ARRAYSIZE(szMenuString2), szMenuString1, i, GlobalSettings.FloppyDisks[i].Buffer);
176  szMenuString2[ARRAYSIZE(szMenuString2) - 1] = UNICODE_NULL;
177  ModifyMenuW(hConsoleMenu, ItemID, MF_BYCOMMAND | MF_STRING, ItemID, szMenuString2);
178 
179  /* Enable the eject item */
181  }
182  else
183  {
184  /* Update item text */
185  _snwprintf(szMenuString2, ARRAYSIZE(szMenuString2), szMenuString1, i, szNoMedia);
186  szMenuString2[ARRAYSIZE(szMenuString2) - 1] = UNICODE_NULL;
187  ModifyMenuW(hConsoleMenu, ItemID, MF_BYCOMMAND | MF_STRING, ItemID, szMenuString2);
188 
189  /* Disable the eject item */
191  }
192  }
193 }
194 
195 static VOID
197 {
200 }
201 
202 static VOID
203 CreateVdmMenu(HANDLE ConOutHandle)
204 {
205  HMENU hVdmSubMenu;
206  UINT_PTR ItemID;
207  UINT Pos;
208  USHORT i;
209  WCHAR szNoMedia[100];
210  WCHAR szMenuString1[256], szMenuString2[256];
211 
212  hConsoleMenu = ConsoleMenuControl(ConOutHandle,
215  if (hConsoleMenu == NULL) return;
216 
217  /* Get the position where we are going to insert our menu items */
219 
220  /* Really add the menu if it doesn't already exist (in case eg. NTVDM crashed) */
222  {
223  /* Add all the menu entries */
225 
226  /* Add the removable drives menu entries */
227  hVdmSubMenu = GetSubMenu(hConsoleMenu, VdmMenuPos + 2); // VdmMenuItems
228  Pos = 3; // After the 2 items and the separator in VdmMenuItems
229 
231  IDS_NO_MEDIA,
232  szNoMedia,
233  ARRAYSIZE(szNoMedia));
234 
237  szMenuString1,
238  ARRAYSIZE(szMenuString1));
239 
240  /* Drive 'x' -- Mount */
241  for (i = 0; i < ARRAYSIZE(GlobalSettings.FloppyDisks); ++i)
242  {
243  ItemID = ID_VDM_DRIVES + (2 * i);
244 
245  /* Add the item */
246  _snwprintf(szMenuString2, ARRAYSIZE(szMenuString2), szMenuString1, i, szNoMedia);
247  szMenuString2[ARRAYSIZE(szMenuString2) - 1] = UNICODE_NULL;
248  InsertMenuW(hVdmSubMenu, Pos++, MF_STRING | MF_BYPOSITION, ItemID, szMenuString2);
249  }
250 
253  szMenuString1,
254  ARRAYSIZE(szMenuString1));
255 
256  /* Drive 'x' -- Eject */
257  for (i = 0; i < ARRAYSIZE(GlobalSettings.FloppyDisks); ++i)
258  {
259  ItemID = ID_VDM_DRIVES + (2 * i);
260 
261  /* Add the item */
262  _snwprintf(szMenuString2, ARRAYSIZE(szMenuString2), szMenuString1, i);
263  szMenuString2[ARRAYSIZE(szMenuString2) - 1] = UNICODE_NULL;
264  InsertMenuW(hVdmSubMenu, Pos++, MF_STRING | MF_BYPOSITION, ItemID + 1, szMenuString2);
265  }
266 
267  /* Refresh the menu state */
268  UpdateVdmMenu();
270  }
271 }
272 
273 static VOID
275 {
276  UINT i = 0;
277  const VDM_MENUITEM *Items = VdmMainMenuItems;
278 
279  do
280  {
282  i++;
283  } while (!(Items[i].uID == 0 && Items[i].SubMenu == NULL && Items[i].uCmdID == 0));
284 
286 }
287 
288 static VOID CaptureMousePointer(HANDLE ConOutHandle, BOOLEAN Capture)
289 {
290  static BOOL IsClipped = FALSE; // For debugging purposes
291  UNREFERENCED_PARAMETER(IsClipped);
292 
293  if (Capture)
294  {
295  RECT rcClip;
296 
297  // if (IsClipped) return;
298 
299  /* Be sure the cursor will be hidden */
300  while (ShowConsoleCursor(ConOutHandle, FALSE) >= 0) ;
301 
302  GetClientRect(hConsoleWnd, &rcClip);
303  MapWindowPoints(hConsoleWnd, HWND_DESKTOP /*NULL*/, (LPPOINT)&rcClip, 2 /* Magic value when the LPPOINT parameter is a RECT */);
304  IsClipped = ClipCursor(&rcClip);
305  }
306  else
307  {
308  // if (!IsClipped) return;
309 
310  ClipCursor(NULL);
311  IsClipped = FALSE;
312 
313  /* Be sure the cursor will be shown */
314  while (ShowConsoleCursor(ConOutHandle, TRUE) < 0) ;
315  }
316 }
317 
319 {
320  DWORD ConInMode;
321 
322  if (GetConsoleMode(ConsoleInput, &ConInMode))
323  {
324 #if 0
325  // GetNumberOfConsoleMouseButtons();
326  // GetSystemMetrics(SM_CMOUSEBUTTONS);
327  // GetSystemMetrics(SM_MOUSEPRESENT);
328  if (MousePresent)
329  {
330 #endif
331  /* Support mouse input events if there is a mouse on the system */
332  ConInMode |= ENABLE_MOUSE_INPUT;
333 #if 0
334  }
335  else
336  {
337  /* Do not support mouse input events if there is no mouse on the system */
338  ConInMode &= ~ENABLE_MOUSE_INPUT;
339  }
340 #endif
341 
342  SetConsoleMode(ConsoleInput, ConInMode);
343  }
344 }
345 
346 
347 
348 
349 
350 
351 
352 /* PUBLIC FUNCTIONS ***********************************************************/
353 
354 /*static*/ VOID
355 VdmShutdown(BOOLEAN Immediate);
356 
357 static BOOL
358 WINAPI
360 {
361  switch (ControlType)
362  {
364  {
365  /* Delayed shutdown */
366  DPRINT1("NTVDM delayed killing in the CTRL_LAST_CLOSE_EVENT CtrlHandler!\n");
368  break;
369  }
370 
371  default:
372  {
373  /* Stop the VDM if the user logs out or closes the console */
374  DPRINT1("Killing NTVDM in the 'default' CtrlHandler!\n");
375  VdmShutdown(TRUE);
376  }
377  }
378  return TRUE;
379 }
380 
381 static VOID
383 {
386 }
387 
388 static VOID
390 {
391  /* Display again properly the mouse pointer */
393 
394  DestroyVdmMenu();
395 }
396 
397 BOOL
399 {
400  /* Save the original input and output console modes */
403  {
406  wprintf(L"FATAL: Cannot save console in/out modes\n");
407  return FALSE;
408  }
409 
410  /* Set the console input mode */
413 
414  /* Set the console output mode */
415  // SetConsoleMode(ConsoleOutput, ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT);
416 
417  /* Initialize the UI */
418  ConsoleInitUI();
419 
420  return TRUE;
421 }
422 
423 VOID
425 {
426  /* Cleanup the UI */
428 
429  /* Restore the original input and output console modes */
432 }
433 
434 VOID
435 ConsoleReattach(HANDLE ConOutHandle)
436 {
437  DestroyVdmMenu();
438  CurrentConsoleOutput = ConOutHandle;
439  CreateVdmMenu(ConOutHandle);
440 
441  /* Synchronize mouse cursor display with console screenbuffer switches */
443 }
444 
445 static BOOL
447 {
448  /* Set the handler routine */
450 
451  /* Enable the CTRL_LAST_CLOSE_EVENT */
453 
454  /*
455  * NOTE: The CONIN$ and CONOUT$ "virtual" files
456  * always point to non-redirected console handles.
457  */
458 
459  /* Get the input handle to the real console, and check for success */
460  ConsoleInput = CreateFileW(L"CONIN$",
463  NULL,
465  0,
466  NULL);
468  {
469  wprintf(L"FATAL: Cannot retrieve a handle to the console input\n");
470  return FALSE;
471  }
472 
473  /* Get the output handle to the real console, and check for success */
474  ConsoleOutput = CreateFileW(L"CONOUT$",
477  NULL,
479  0,
480  NULL);
482  {
484  wprintf(L"FATAL: Cannot retrieve a handle to the console output\n");
485  return FALSE;
486  }
487 
488  /* Effectively attach to the console */
489  return ConsoleAttach();
490 }
491 
492 static VOID
494 {
495  /* Detach from the console */
496  ConsoleDetach();
497 
498  /* Close the console handles */
501 }
502 
504 {
505  DWORD dwMode;
506 
507  /* Check whether the handle may be that of a console... */
508  if ((GetFileType(hHandle) & ~FILE_TYPE_REMOTE) != FILE_TYPE_CHAR)
509  return FALSE;
510 
511  /*
512  * It may be. Perform another test... The idea comes from the
513  * MSDN description of the WriteConsole API:
514  *
515  * "WriteConsole fails if it is used with a standard handle
516  * that is redirected to a file. If an application processes
517  * multilingual output that can be redirected, determine whether
518  * the output handle is a console handle (one method is to call
519  * the GetConsoleMode function and check whether it succeeds).
520  * If the handle is a console handle, call WriteConsole. If the
521  * handle is not a console handle, the output is redirected and
522  * you should call WriteFile to perform the I/O."
523  */
524  return GetConsoleMode(hHandle, &dwMode);
525 }
526 
528 {
529  switch (MenuEvent->dwCommandId)
530  {
531  /*
532  * System-defined menu commands
533  */
534 
535  case WM_INITMENU:
536  case WM_MENUSELECT:
537  {
538  /*
539  * If the mouse is captured, release it or recapture it
540  * when the menu opens or closes, respectively.
541  */
542  if (!CaptureMouse) break;
544  break;
545  }
546 
547 
548  /*
549  * User-defined menu commands
550  */
551 
552  case ID_CAPTURE_MOUSE:
556  break;
557 
558  case ID_VDM_DUMPMEM_TXT:
559  DumpMemory(TRUE);
560  break;
561 
562  case ID_VDM_DUMPMEM_BIN:
563  DumpMemory(FALSE);
564  break;
565 
566  /* Drive 0 -- Mount */
567  /* Drive 1 -- Mount */
568  case ID_VDM_DRIVES + 0:
569  case ID_VDM_DRIVES + 2:
570  {
571  ULONG DiskNumber = (MenuEvent->dwCommandId - ID_VDM_DRIVES) / 2;
572  MountFloppy(DiskNumber);
573  break;
574  }
575 
576  /* Drive 0 -- Eject */
577  /* Drive 1 -- Eject */
578  case ID_VDM_DRIVES + 1:
579  case ID_VDM_DRIVES + 3:
580  {
581  ULONG DiskNumber = (MenuEvent->dwCommandId - ID_VDM_DRIVES - 1) / 2;
582  EjectFloppy(DiskNumber);
583  break;
584  }
585 
586  case ID_VDM_QUIT:
587  /* Stop the VDM */
588  // EmulatorTerminate();
589 
590  /* Nothing runs, so exit immediately */
591  DPRINT1("Killing NTVDM via console menu!\n");
592  VdmShutdown(TRUE);
593  break;
594 
595  default:
596  break;
597  }
598 }
599 
601 {
602  /*
603  * If the mouse is captured, release it or recapture it
604  * when we lose or regain focus, respectively.
605  */
606  if (!CaptureMouse) return;
608 }
#define ID_VDM_DUMPMEM_BIN
Definition: resource.h:6
static DWORD OrgConsoleOutputMode
Definition: console.c:18
#define IDS_VDM_DUMPMEM_BIN
Definition: resource.h:18
#define TRUE
Definition: types.h:120
VOID EjectFloppy(IN ULONG DiskNumber)
Definition: emulator.c:467
#define CloseHandle
Definition: compat.h:398
BOOL WINAPI DrawMenuBar(_In_ HWND)
BOOL WINAPI ModifyMenuW(_In_ HMENU, _In_ UINT, _In_ UINT, _In_ UINT_PTR, _In_opt_ LPCWSTR)
#define MF_BYCOMMAND
Definition: winuser.h:202
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
HWND hConsoleWnd
Definition: console.c:20
BOOL WINAPI InsertMenuW(_In_ HMENU, _In_ UINT, _In_ UINT, _In_ UINT_PTR, _In_opt_ LPCWSTR)
BOOL WINAPI ClipCursor(_In_opt_ LPCRECT)
struct _VDM_MENUITEM VDM_MENUITEM
static VOID ConsoleInitUI(VOID)
Definition: console.c:382
#define FILE_TYPE_REMOTE
Definition: winbase.h:259
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:323
BOOL WINAPI GetConsoleMode(HANDLE hConsoleHandle, LPDWORD lpMode)
Definition: console.c:1571
ush Pos
Definition: deflate.h:92
#define MF_STRING
Definition: winuser.h:138
#define IDS_VDM_MOUNT_FLOPPY
Definition: resource.h:19
#define ID_VDM_DUMPMEM_TXT
Definition: resource.h:5
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
#define INVALID_HANDLE_VALUE
Definition: compat.h:391
#define ID_VDM_DRIVES
Definition: resource.h:10
static VOID ConsoleCleanupUI(VOID)
Definition: console.c:389
DWORD WINAPI GetFileType(HANDLE hFile)
Definition: fileinfo.c:419
#define FILE_SHARE_WRITE
Definition: nt_native.h:681
#define wprintf(...)
Definition: whoami.c:18
VOID VdmShutdown(BOOLEAN Immediate)
Definition: ntvdm.c:310
#define IDS_NO_MEDIA
Definition: resource.h:23
UINT_PTR uCmdID
Definition: console.c:32
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
int32_t INT
Definition: typedefs.h:56
#define FILE_SHARE_READ
Definition: compat.h:125
static INT VdmMenuPos
Definition: console.c:22
#define ID_VDM_QUIT
Definition: resource.h:7
BOOL WINAPI AppendMenuW(_In_ HMENU, _In_ UINT, _In_ UINT_PTR, _In_opt_ LPCWSTR)
static BOOL VdmMenuExists(HMENU hConsoleMenu)
Definition: console.c:111
static BOOL CaptureMouse
Definition: console.c:23
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
BOOL WINAPI EnableMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define UNICODE_NULL
unsigned int BOOL
Definition: ntddk_ex.h:94
#define FILE_TYPE_CHAR
Definition: winbase.h:257
BOOL WINAPI DECLSPEC_HOTPATCH SetConsoleMode(HANDLE hConsoleHandle, DWORD dwMode)
Definition: console.c:1608
static HANDLE CurrentConsoleOutput
Definition: console.c:14
#define MF_BYPOSITION
Definition: winuser.h:203
VOID MenuEventHandler(PMENU_EVENT_RECORD MenuEvent)
Definition: console.c:527
BOOL WINAPI DECLSPEC_HOTPATCH SetConsoleCtrlHandler(PHANDLER_ROUTINE HandlerRoutine, BOOL Add)
Definition: console.c:2111
#define GENERIC_WRITE
Definition: nt_native.h:90
#define WM_MENUSELECT
Definition: winuser.h:1729
int WINAPI GetMenuItemCount(_In_opt_ HMENU)
static HMENU hConsoleMenu
Definition: console.c:21
unsigned char BOOLEAN
#define IDS_VDM_EJECT_FLOPPY
Definition: resource.h:20
static const VDM_MENUITEM VdmMenuItems[]
Definition: console.c:35
int _snwprintf(wchar_t *buffer, size_t count, const wchar_t *format,...)
smooth NULL
Definition: ftsmooth.c:416
#define MF_SEPARATOR
Definition: winuser.h:137
VOID DumpMemory(BOOLEAN TextFormat)
Definition: emulator.c:369
#define IDS_VDM_MENU
Definition: resource.h:15
#define IDS_VDM_QUIT
Definition: resource.h:21
#define OPEN_EXISTING
Definition: compat.h:426
static VOID AppendMenuItems(HMENU hMenu, const VDM_MENUITEM *Items)
Definition: console.c:58
#define IDS_RELEASE_MOUSE
Definition: resource.h:14
UNICODE_STRING FloppyDisks[2]
Definition: ntvdm.h:78
static VOID UpdateVdmMenuMouse(VOID)
Definition: console.c:130
static const VDM_MENUITEM VdmMainMenuItems[]
Definition: console.c:48
HMENU WINAPI DECLSPEC_HOTPATCH ConsoleMenuControl(HANDLE hConsoleOutput, DWORD dwCmdIdLow, DWORD dwCmdIdHigh)
Definition: console.c:396
__wchar_t WCHAR
Definition: xmlstorage.h:180
VOID FocusEventHandler(PFOCUS_EVENT_RECORD FocusEvent)
Definition: console.c:600
BOOL WINAPI DeleteMenu(_In_ HMENU, _In_ UINT, _In_ UINT)
BOOL ConsoleAttach(VOID)
Definition: console.c:398
VOID ConsoleDetach(VOID)
Definition: console.c:424
#define MF_ENABLED
Definition: winuser.h:128
#define WINAPI
Definition: msvc.h:8
static VOID EnableExtraHardware(HANDLE ConsoleInput)
Definition: console.c:318
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
static VOID ConsoleCleanup(VOID)
Definition: console.c:493
#define ENABLE_MOUSE_INPUT
Definition: wincon.h:79
#define MF_POPUP
Definition: winuser.h:136
static const WCHAR L[]
Definition: oid.c:1250
#define ENABLE_WINDOW_INPUT
Definition: wincon.h:78
#define GENERIC_READ
Definition: compat.h:124
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
static VOID CreateVdmMenu(HANDLE ConOutHandle)
Definition: console.c:203
BOOL WINAPI DestroyMenu(_In_ HMENU)
#define IDS_CAPTURE_MOUSE
Definition: resource.h:13
INT WINAPI DECLSPEC_HOTPATCH ShowConsoleCursor(HANDLE hConsoleOutput, BOOL bShow)
Definition: console.c:1073
VOID ConsoleReattach(HANDLE ConOutHandle)
Definition: console.c:435
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define WM_INITMENU
Definition: winuser.h:1727
static BOOL WINAPI ConsoleCtrlHandler(DWORD ControlType)
Definition: console.c:359
#define GetModuleHandle
Definition: winbase.h:3641
const struct _VDM_MENUITEM * SubMenu
Definition: console.c:31
unsigned short USHORT
Definition: pedump.c:61
static VOID UpdateVdmMenu(VOID)
Definition: console.c:196
static BOOL ConsoleInit(VOID)
Definition: console.c:446
VOID MountFloppy(IN ULONG DiskNumber)
Definition: emulator.c:413
#define HWND_DESKTOP
Definition: winuser.h:1195
unsigned int UINT
Definition: ndis.h:50
DWORD WINAPI SetLastConsoleEventActive(VOID)
Definition: console.c:3142
#define CTRL_LAST_CLOSE_EVENT
Definition: wincon.h:68
UINT WINAPI GetMenuItemID(_In_ HMENU, _In_ int)
#define DPRINT1
Definition: precomp.h:8
#define CreateFileW
Definition: compat.h:400
HMENU WINAPI CreatePopupMenu(void)
Definition: menu.c:846
static HANDLE ConsoleOutput
Definition: console.c:17
static VOID DestroyVdmMenu(VOID)
Definition: console.c:274
#define IDS_VDM_DUMPMEM_TXT
Definition: resource.h:17
#define ID_CAPTURE_MOUSE
Definition: resource.h:4
unsigned int ULONG
Definition: retypes.h:1
UINT uID
Definition: console.c:30
struct _VDM_MENUITEM * PVDM_MENUITEM
#define MF_GRAYED
Definition: winuser.h:129
BOOL IsConsoleHandle(HANDLE hHandle)
Definition: console.c:503
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
static DWORD OrgConsoleInputMode
Definition: console.c:18
static VOID CaptureMousePointer(HANDLE ConOutHandle, BOOLEAN Capture)
Definition: console.c:288
NTVDM_SETTINGS GlobalSettings
Definition: ntvdm.c:25
VOID UpdateVdmMenuDisks(VOID)
Definition: console.c:146
HWND WINAPI DECLSPEC_HOTPATCH GetConsoleWindow(VOID)
Definition: console.c:2730