diff --git a/win32ss/user/consrv/conio.h b/win32ss/user/consrv/conio.h index f2e152942fc..b578d479a1d 100644 --- a/win32ss/user/consrv/conio.h +++ b/win32ss/user/consrv/conio.h @@ -44,18 +44,20 @@ typedef struct _CONSOLE_SCREEN_BUFFER typedef struct _CONSOLE { Object_t Header; /* Object header */ - LONG ReferenceCount; + LONG ReferenceCount; /* Is incremented each time a handle to a screen-buffer or the input buffer of this console gets referenced, or the console gets locked */ CRITICAL_SECTION Lock; - struct _CONSOLE *Prev, *Next; /* Next and Prev consoles in console wheel */ - struct _CONSOLE_VTBL *Vtbl; /* Using CUI or GUI consoles */ + struct _CONSOLE *Prev, *Next; /* Next and Prev consoles in console wheel */ + struct _CONSOLE_VTBL *Vtbl; /* Using CUI or GUI consoles */ - CLIENT_ID ConsoleLeaderCID; /* Contains the Console Leader Process CID */ + CLIENT_ID ConsoleLeaderCID; /* Contains the Console Leader Process CID for this console. TODO: Is it possible to compute it via the contents of the ProcessList list ?? */ LIST_ENTRY ProcessList; +/**************************** Input buffer and data ***************************/ LIST_ENTRY InputEvents; /* List head for input event queue */ HANDLE ActiveEvent; /* Event set when an input event is added in its queue */ LIST_ENTRY ReadWaitQueue; /* List head for the queue of read wait blocks */ + WORD Mode; /* Console Input Buffer mode flags */ PWCHAR LineBuffer; /* current line being input, in line buffered mode */ WORD LineMaxSize; /* maximum size of line in characters (including CR+LF) */ @@ -66,29 +68,33 @@ typedef struct _CONSOLE BOOLEAN LineInsertToggle; /* replace character over cursor instead of inserting */ ULONG LineWakeupMask; /* bitmap of which control characters will end line input */ + UINT CodePage; + UINT OutputCodePage; + + CONSOLE_SELECTION_INFO Selection; + +/**************************** Aliases and Histories ***************************/ struct _ALIAS_HEADER *Aliases; LIST_ENTRY HistoryBuffers; UINT HistoryBufferSize; /* size for newly created history buffers */ UINT NumberOfHistoryBuffers; /* maximum number of history buffers allowed */ BOOLEAN HistoryNoDup; /* remove old duplicate history entries */ +/******************************* Screen buffers *******************************/ LIST_ENTRY BufferList; /* List of all screen buffers for this console */ - PCONSOLE_SCREEN_BUFFER ActiveBuffer; /* Pointer to currently active screen buffer */ + PCONSOLE_SCREEN_BUFFER ActiveBuffer; /* Pointer to currently active screen buffer */ BYTE PauseFlags; HANDLE UnpauseEvent; LIST_ENTRY WriteWaitQueue; /* List head for the queue of write wait blocks */ - WORD Mode; /* Console mode flags */ - UNICODE_STRING Title; /* Title of console */ DWORD HardwareState; /* _GDI_MANAGED, _DIRECT */ + +/****************************** GUI-related data ******************************/ + UNICODE_STRING Title; /* Title of console */ HWND hWindow; COORD Size; PVOID PrivateData; - UINT CodePage; - UINT OutputCodePage; - - CONSOLE_SELECTION_INFO Selection; } CONSOLE, *PCONSOLE; /**************************************************************\ diff --git a/win32ss/user/consrv/consrv.h b/win32ss/user/consrv/consrv.h index b60f4839cf6..3d73cde96ce 100644 --- a/win32ss/user/consrv/consrv.h +++ b/win32ss/user/consrv/consrv.h @@ -62,8 +62,8 @@ typedef struct _CONSOLE_IO_HANDLE } CONSOLE_IO_HANDLE, *PCONSOLE_IO_HANDLE; -#define ConsoleGetPerProcessData(pcsrprocess) \ - ((PCONSOLE_PROCESS_DATA)((pcsrprocess)->ServerData[CONSRV_SERVERDLL_INDEX])) +#define ConsoleGetPerProcessData(Process) \ + ((PCONSOLE_PROCESS_DATA)((Process)->ServerData[CONSRV_SERVERDLL_INDEX])) typedef struct _CONSOLE_PROCESS_DATA { @@ -78,6 +78,7 @@ typedef struct _CONSOLE_PROCESS_DATA RTL_CRITICAL_SECTION HandleTableLock; ULONG HandleTableSize; PCONSOLE_IO_HANDLE HandleTable; // Length-varying table + LPTHREAD_START_ROUTINE CtrlDispatcher; } CONSOLE_PROCESS_DATA, *PCONSOLE_PROCESS_DATA; diff --git a/win32ss/user/consrv/guiconsole.c b/win32ss/user/consrv/guiconsole.c index 215b6af0ad4..50a0402bc49 100644 --- a/win32ss/user/consrv/guiconsole.c +++ b/win32ss/user/consrv/guiconsole.c @@ -1590,6 +1590,7 @@ GuiConsoleShowConsoleProperties(HWND hWnd, BOOL Defaults, PGUI_CONSOLE_DATA GuiD } CPLFunc(hWnd, CPL_DBLCLK, (LPARAM)&SharedInfo, Defaults); + CPLFunc(hWnd, CPL_EXIT , 0, 0); } static LRESULT GuiConsoleHandleSysMenuCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) diff --git a/win32ss/user/consrv/init.c b/win32ss/user/consrv/init.c index 25b9b19ad85..a2fa5ed3ecf 100644 --- a/win32ss/user/consrv/init.c +++ b/win32ss/user/consrv/init.c @@ -116,47 +116,47 @@ PCSR_API_ROUTINE ConsoleServerApiDispatchTable[ConsolepMaxApiNumber] = BOOLEAN ConsoleServerApiServerValidTable[ConsolepMaxApiNumber] = { - FALSE, // SrvOpenConsole, - FALSE, // SrvGetConsoleInput, - FALSE, // SrvWriteConsoleInput, - FALSE, // SrvReadConsoleOutput, - FALSE, // SrvWriteConsoleOutput, - FALSE, // SrvReadConsoleOutputString, - FALSE, // SrvWriteConsoleOutputString, - FALSE, // SrvFillConsoleOutput, - FALSE, // SrvGetConsoleMode, + TRUE /* FALSE */, // SrvOpenConsole, + TRUE /* FALSE */, // SrvGetConsoleInput, + TRUE /* FALSE */, // SrvWriteConsoleInput, + TRUE /* FALSE */, // SrvReadConsoleOutput, + TRUE /* FALSE */, // SrvWriteConsoleOutput, + TRUE /* FALSE */, // SrvReadConsoleOutputString, + TRUE /* FALSE */, // SrvWriteConsoleOutputString, + TRUE /* FALSE */, // SrvFillConsoleOutput, + TRUE /* FALSE */, // SrvGetConsoleMode, // FALSE, // SrvGetConsoleNumberOfFonts, - FALSE, // SrvGetConsoleNumberOfInputEvents, - FALSE, // SrvGetConsoleScreenBufferInfo, - FALSE, // SrvGetConsoleCursorInfo, + TRUE /* FALSE */, // SrvGetConsoleNumberOfInputEvents, + TRUE /* FALSE */, // SrvGetConsoleScreenBufferInfo, + TRUE /* FALSE */, // SrvGetConsoleCursorInfo, // FALSE, // SrvGetConsoleMouseInfo, // FALSE, // SrvGetConsoleFontInfo, // FALSE, // SrvGetConsoleFontSize, // FALSE, // SrvGetConsoleCurrentFont, - FALSE, // SrvSetConsoleMode, - FALSE, // SrvSetConsoleActiveScreenBuffer, - FALSE, // SrvFlushConsoleInputBuffer, + TRUE /* FALSE */, // SrvSetConsoleMode, + TRUE /* FALSE */, // SrvSetConsoleActiveScreenBuffer, + TRUE /* FALSE */, // SrvFlushConsoleInputBuffer, // FALSE, // SrvGetLargestConsoleWindowSize, - FALSE, // SrvSetConsoleScreenBufferSize, - FALSE, // SrvSetConsoleCursorPosition, - FALSE, // SrvSetConsoleCursorInfo, + TRUE /* FALSE */, // SrvSetConsoleScreenBufferSize, + TRUE /* FALSE */, // SrvSetConsoleCursorPosition, + TRUE /* FALSE */, // SrvSetConsoleCursorInfo, // FALSE, // SrvSetConsoleWindowInfo, - FALSE, // SrvScrollConsoleScreenBuffer, - FALSE, // SrvSetConsoleTextAttribute, + TRUE /* FALSE */, // SrvScrollConsoleScreenBuffer, + TRUE /* FALSE */, // SrvSetConsoleTextAttribute, // FALSE, // SrvSetConsoleFont, - FALSE, // SrvSetConsoleIcon, - FALSE, // SrvReadConsole, - FALSE, // SrvWriteConsole, - FALSE, // SrvDuplicateHandle, + TRUE /* FALSE */, // SrvSetConsoleIcon, + TRUE /* FALSE */, // SrvReadConsole, + TRUE /* FALSE */, // SrvWriteConsole, + TRUE /* FALSE */, // SrvDuplicateHandle, // FALSE, // SrvGetHandleInformation, // FALSE, // SrvSetHandleInformation, - FALSE, // SrvCloseHandle, - FALSE, // SrvVerifyConsoleIoHandle, - FALSE, // SrvAllocConsole, - FALSE, // SrvFreeConsole, - FALSE, // SrvGetConsoleTitle, - FALSE, // SrvSetConsoleTitle, - FALSE, // SrvCreateConsoleScreenBuffer, + TRUE /* FALSE */, // SrvCloseHandle, + TRUE /* FALSE */, // SrvVerifyConsoleIoHandle, + TRUE /* FALSE */, // SrvAllocConsole, + TRUE /* FALSE */, // SrvFreeConsole, + TRUE /* FALSE */, // SrvGetConsoleTitle, + TRUE /* FALSE */, // SrvSetConsoleTitle, + TRUE /* FALSE */, // SrvCreateConsoleScreenBuffer, // FALSE, // SrvInvalidateBitMapRect, // FALSE, // SrvVDMConsoleOperation, // FALSE, // SrvSetConsoleCursor, @@ -165,28 +165,28 @@ BOOLEAN ConsoleServerApiServerValidTable[ConsolepMaxApiNumber] = // FALSE, // SrvSetConsolePalette, // FALSE, // SrvSetConsoleDisplayMode, // FALSE, // SrvRegisterConsoleVDM, - FALSE, // SrvGetConsoleHardwareState, - FALSE, // SrvSetConsoleHardwareState, + TRUE /* FALSE */, // SrvGetConsoleHardwareState, + TRUE /* FALSE */, // SrvSetConsoleHardwareState, // TRUE, // SrvGetConsoleDisplayMode, - FALSE, // SrvAddConsoleAlias, - FALSE, // SrvGetConsoleAlias, - FALSE, // SrvGetConsoleAliasesLength, - FALSE, // SrvGetConsoleAliasExesLength, - FALSE, // SrvGetConsoleAliases, - FALSE, // SrvGetConsoleAliasExes, - FALSE, // SrvExpungeConsoleCommandHistory, - FALSE, // SrvSetConsoleNumberOfCommands, - FALSE, // SrvGetConsoleCommandHistoryLength, - FALSE, // SrvGetConsoleCommandHistory, + TRUE /* FALSE */, // SrvAddConsoleAlias, + TRUE /* FALSE */, // SrvGetConsoleAlias, + TRUE /* FALSE */, // SrvGetConsoleAliasesLength, + TRUE /* FALSE */, // SrvGetConsoleAliasExesLength, + TRUE /* FALSE */, // SrvGetConsoleAliases, + TRUE /* FALSE */, // SrvGetConsoleAliasExes, + TRUE /* FALSE */, // SrvExpungeConsoleCommandHistory, + TRUE /* FALSE */, // SrvSetConsoleNumberOfCommands, + TRUE /* FALSE */, // SrvGetConsoleCommandHistoryLength, + TRUE /* FALSE */, // SrvGetConsoleCommandHistory, // FALSE, // SrvSetConsoleCommandHistoryMode, - FALSE, // SrvGetConsoleCP, - FALSE, // SrvSetConsoleCP, + TRUE /* FALSE */, // SrvGetConsoleCP, + TRUE /* FALSE */, // SrvSetConsoleCP, // FALSE, // SrvSetConsoleKeyShortcuts, // FALSE, // SrvSetConsoleMenuClose, // FALSE, // SrvConsoleNotifyLastClose, - FALSE, // SrvGenerateConsoleCtrlEvent, + TRUE /* FALSE */, // SrvGenerateConsoleCtrlEvent, // FALSE, // SrvGetConsoleKeyboardLayoutName, - FALSE, // SrvGetConsoleWindow, + TRUE /* FALSE */, // SrvGetConsoleWindow, // FALSE, // SrvGetConsoleCharType, // FALSE, // SrvSetConsoleLocalEUDC, // FALSE, // SrvSetConsoleCursorMode, @@ -198,11 +198,11 @@ BOOLEAN ConsoleServerApiServerValidTable[ConsolepMaxApiNumber] = // FALSE, // SrvRegisterConsoleIME, // FALSE, // SrvUnregisterConsoleIME, // FALSE, // SrvGetConsoleLangId, - FALSE, // SrvAttachConsole, - FALSE, // SrvGetConsoleSelectionInfo, - FALSE, // SrvGetConsoleProcessList, - FALSE, // SrvGetConsoleHistory, - FALSE, // SrvSetConsoleHistory + TRUE /* FALSE */, // SrvAttachConsole, + TRUE /* FALSE */, // SrvGetConsoleSelectionInfo, + TRUE /* FALSE */, // SrvGetConsoleProcessList, + TRUE /* FALSE */, // SrvGetConsoleHistory, + TRUE /* FALSE */, // SrvSetConsoleHistory // FALSE };