+++ /dev/null
-/*
- * COPYRIGHT: See COPYING in the top level directory
- * PROJECT: ReactOS Console Server DLL
- * FILE: win32ss/user/winsrv/consrv/frontendctl.c
- * PURPOSE: Terminal Front-Ends Control
- * PROGRAMMERS: Hermes Belusca-Maito (hermes.belusca@sfr.fr)
- */
-
-/* INCLUDES *******************************************************************/
-
-#include "consrv.h"
-
-#define NDEBUG
-#include <debug.h>
-
-/* PUBLIC SERVER APIS *********************************************************/
-
-/**********************************************************************
- * HardwareStateProperty
- *
- * DESCRIPTION
- * Set/Get the value of the HardwareState and switch
- * between direct video buffer ouput and GDI windowed
- * output.
- * ARGUMENTS
- * Client hands us a CONSOLE_GETSETHWSTATE object.
- * We use the same object to Request.
- * NOTE
- * ConsoleHwState has the correct size to be compatible
- * with NT's, but values are not.
- */
-#if 0
-static NTSTATUS
-SetConsoleHardwareState(PCONSRV_CONSOLE Console, ULONG ConsoleHwState)
-{
- DPRINT1("Console Hardware State: %d\n", ConsoleHwState);
-
- if ((CONSOLE_HARDWARE_STATE_GDI_MANAGED == ConsoleHwState)
- ||(CONSOLE_HARDWARE_STATE_DIRECT == ConsoleHwState))
- {
- if (Console->HardwareState != ConsoleHwState)
- {
- /* TODO: implement switching from full screen to windowed mode */
- /* TODO: or back; now simply store the hardware state */
- Console->HardwareState = ConsoleHwState;
- }
-
- return STATUS_SUCCESS;
- }
-
- return STATUS_INVALID_PARAMETER_3; /* Client: (handle, set_get, [mode]) */
-}
-#endif
-
-CSR_API(SrvGetConsoleHardwareState)
-{
-#if 0
- NTSTATUS Status;
- PCONSOLE_GETSETHWSTATE HardwareStateRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.HardwareStateRequest;
- PCONSOLE_SCREEN_BUFFER Buff;
- PCONSRV_CONSOLE Console;
-
- Status = ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
- HardwareStateRequest->OutputHandle,
- &Buff,
- GENERIC_READ,
- TRUE);
- if (!NT_SUCCESS(Status))
- {
- DPRINT1("Failed to get console handle in SrvGetConsoleHardwareState\n");
- return Status;
- }
-
- Console = Buff->Header.Console;
- HardwareStateRequest->State = Console->HardwareState;
-
- ConSrvReleaseScreenBuffer(Buff, TRUE);
- return Status;
-#else
- UNIMPLEMENTED;
- return STATUS_NOT_IMPLEMENTED;
-#endif
-}
-
-CSR_API(SrvSetConsoleHardwareState)
-{
-#if 0
- NTSTATUS Status;
- PCONSOLE_GETSETHWSTATE HardwareStateRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.HardwareStateRequest;
- PCONSOLE_SCREEN_BUFFER Buff;
- PCONSRV_CONSOLE Console;
-
- Status = ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
- HardwareStateRequest->OutputHandle,
- &Buff,
- GENERIC_WRITE,
- TRUE);
- if (!NT_SUCCESS(Status))
- {
- DPRINT1("Failed to get console handle in SrvSetConsoleHardwareState\n");
- return Status;
- }
-
- DPRINT("Setting console hardware state.\n");
- Console = Buff->Header.Console;
- Status = SetConsoleHardwareState(Console, HardwareStateRequest->State);
-
- ConSrvReleaseScreenBuffer(Buff, TRUE);
- return Status;
-#else
- UNIMPLEMENTED;
- return STATUS_NOT_IMPLEMENTED;
-#endif
-}
-
-CSR_API(SrvGetConsoleDisplayMode)
-{
- NTSTATUS Status;
- PCONSOLE_GETDISPLAYMODE GetDisplayModeRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetDisplayModeRequest;
- PCONSRV_CONSOLE Console;
-
- Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
- &Console, TRUE);
- if (!NT_SUCCESS(Status)) return Status;
-
- GetDisplayModeRequest->DisplayMode = TermGetDisplayMode(Console);
-
- ConSrvReleaseConsole(Console, TRUE);
- return STATUS_SUCCESS;
-}
-
-CSR_API(SrvSetConsoleDisplayMode)
-{
- NTSTATUS Status;
- PCONSOLE_SETDISPLAYMODE SetDisplayModeRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetDisplayModeRequest;
- PCONSRV_CONSOLE Console;
- PCONSOLE_SCREEN_BUFFER Buff;
-
- Status = ConSrvGetScreenBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
- SetDisplayModeRequest->OutputHandle,
- &Buff,
- GENERIC_WRITE,
- TRUE);
- if (!NT_SUCCESS(Status)) return Status;
-
- Console = (PCONSRV_CONSOLE)Buff->Header.Console;
-
- if (TermSetDisplayMode(Console, SetDisplayModeRequest->DisplayMode))
- {
- SetDisplayModeRequest->NewSBDim = Buff->ScreenBufferSize;
- Status = STATUS_SUCCESS;
- }
- else
- {
- Status = STATUS_INVALID_PARAMETER;
- }
-
- ConSrvReleaseScreenBuffer(Buff, TRUE);
- return Status;
-}
-
-CSR_API(SrvGetLargestConsoleWindowSize)
-{
- NTSTATUS Status;
- PCONSOLE_GETLARGESTWINDOWSIZE GetLargestWindowSizeRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetLargestWindowSizeRequest;
- PCONSOLE /*PCONSRV_CONSOLE*/ Console;
- PCONSOLE_SCREEN_BUFFER Buff;
-
- Status = ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
- GetLargestWindowSizeRequest->OutputHandle,
- &Buff,
- GENERIC_READ,
- TRUE);
- if (!NT_SUCCESS(Status)) return Status;
-
- Console = Buff->Header.Console;
-
- /*
- * Retrieve the largest possible console window size, without
- * taking into account the size of the console screen buffer
- * (thus differs from ConDrvGetConsoleScreenBufferInfo).
- */
- TermGetLargestConsoleWindowSize(Console, &GetLargestWindowSizeRequest->Size);
-
- ConSrvReleaseScreenBuffer(Buff, TRUE);
- return STATUS_SUCCESS;
-}
-
-CSR_API(SrvShowConsoleCursor)
-{
- NTSTATUS Status;
- PCONSOLE_SHOWCURSOR ShowCursorRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ShowCursorRequest;
- PCONSOLE /*PCONSRV_CONSOLE*/ Console;
- PCONSOLE_SCREEN_BUFFER Buff;
-
- Status = ConSrvGetScreenBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
- ShowCursorRequest->OutputHandle,
- &Buff,
- GENERIC_WRITE,
- TRUE);
- if (!NT_SUCCESS(Status)) return Status;
-
- Console = Buff->Header.Console;
-
- ShowCursorRequest->RefCount = TermShowMouseCursor(Console, ShowCursorRequest->Show);
-
- ConSrvReleaseScreenBuffer(Buff, TRUE);
- return STATUS_SUCCESS;
-}
-
-CSR_API(SrvSetConsoleCursor)
-{
- NTSTATUS Status;
- BOOL Success;
- PCONSOLE_SETCURSOR SetCursorRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetCursorRequest;
- PCONSRV_CONSOLE Console;
- PCONSOLE_SCREEN_BUFFER Buff;
-
- // NOTE: Tests show that this function is used only for graphics screen buffers
- // and otherwise it returns FALSE and sets last error to ERROR_INVALID_HANDLE.
- // I find that behaviour is ridiculous but ok, let's accept it at the moment...
- Status = ConSrvGetGraphicsBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
- SetCursorRequest->OutputHandle,
- &Buff,
- GENERIC_WRITE,
- TRUE);
- if (!NT_SUCCESS(Status)) return Status;
-
- Console = (PCONSRV_CONSOLE)Buff->Header.Console;
-
- Success = TermSetMouseCursor(Console, SetCursorRequest->CursorHandle);
-
- ConSrvReleaseScreenBuffer(Buff, TRUE);
- return (Success ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL);
-}
-
-CSR_API(SrvConsoleMenuControl)
-{
- NTSTATUS Status;
- PCONSOLE_MENUCONTROL MenuControlRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.MenuControlRequest;
- PCONSRV_CONSOLE Console;
- PCONSOLE_SCREEN_BUFFER Buff;
-
- Status = ConSrvGetScreenBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
- MenuControlRequest->OutputHandle,
- &Buff,
- GENERIC_WRITE,
- TRUE);
- if (!NT_SUCCESS(Status)) return Status;
-
- Console = (PCONSRV_CONSOLE)Buff->Header.Console;
-
- MenuControlRequest->MenuHandle = TermMenuControl(Console,
- MenuControlRequest->CmdIdLow,
- MenuControlRequest->CmdIdHigh);
-
- ConSrvReleaseScreenBuffer(Buff, TRUE);
- return STATUS_SUCCESS;
-}
-
-CSR_API(SrvSetConsoleMenuClose)
-{
- NTSTATUS Status;
- BOOL Success;
- PCONSOLE_SETMENUCLOSE SetMenuCloseRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetMenuCloseRequest;
- PCONSRV_CONSOLE Console;
-
- Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
- &Console, TRUE);
- if (!NT_SUCCESS(Status)) return Status;
-
- Success = TermSetMenuClose(Console, SetMenuCloseRequest->Enable);
-
- ConSrvReleaseConsole(Console, TRUE);
- return (Success ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL);
-}
-
-CSR_API(SrvGetConsoleWindow)
-{
- NTSTATUS Status;
- PCONSOLE_GETWINDOW GetWindowRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetWindowRequest;
- PCONSRV_CONSOLE Console;
-
- Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
- &Console, TRUE);
- if (!NT_SUCCESS(Status)) return Status;
-
- GetWindowRequest->WindowHandle = TermGetConsoleWindowHandle(Console);
-
- ConSrvReleaseConsole(Console, TRUE);
- return STATUS_SUCCESS;
-}
-
-CSR_API(SrvSetConsoleIcon)
-{
- NTSTATUS Status;
- PCONSOLE_SETICON SetIconRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetIconRequest;
- PCONSRV_CONSOLE Console;
-
- Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
- &Console, TRUE);
- if (!NT_SUCCESS(Status)) return Status;
-
- Status = (TermChangeIcon(Console, SetIconRequest->IconHandle)
- ? STATUS_SUCCESS
- : STATUS_UNSUCCESSFUL);
-
- ConSrvReleaseConsole(Console, TRUE);
- return Status;
-}
-
-CSR_API(SrvGetConsoleSelectionInfo)
-{
- NTSTATUS Status;
- PCONSOLE_GETSELECTIONINFO GetSelectionInfoRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetSelectionInfoRequest;
- PCONSRV_CONSOLE Console;
-
- Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
- &Console, TRUE);
- if (!NT_SUCCESS(Status)) return Status;
-
- Status = (TermGetSelectionInfo(Console, &GetSelectionInfoRequest->Info)
- ? STATUS_SUCCESS
- : STATUS_UNSUCCESSFUL);
-
- ConSrvReleaseConsole(Console, TRUE);
- return Status;
-}
-
-
-
-CSR_API(SrvGetConsoleNumberOfFonts)
-{
- NTSTATUS Status;
- PCONSOLE_GETNUMFONTS GetNumFontsRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetNumFontsRequest;
- PCONSOLE /*PCONSRV_CONSOLE*/ Console;
-
- Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
- &Console, TRUE);
- if (!NT_SUCCESS(Status)) return Status;
-
- // FIXME!
- // TermGetNumberOfFonts(Console, ...);
- DPRINT1("%s not yet implemented\n", __FUNCTION__);
- GetNumFontsRequest->NumFonts = 0;
-
- ConSrvReleaseConsole(Console, TRUE);
- return STATUS_SUCCESS;
-}
-
-CSR_API(SrvGetConsoleFontInfo)
-{
- NTSTATUS Status;
- PCONSOLE_GETFONTINFO GetFontInfoRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetFontInfoRequest;
- // PCONSOLE /*PCONSRV_CONSOLE*/ Console;
- PCONSOLE_SCREEN_BUFFER Buff;
-
- Status = ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
- GetFontInfoRequest->OutputHandle,
- &Buff,
- GENERIC_READ,
- TRUE);
- if (!NT_SUCCESS(Status)) return Status;
-
- // FIXME!
- // Console = Buff->Header.Console;
- // TermGetFontInfo(Console, ...);
- DPRINT1("%s not yet implemented\n", __FUNCTION__);
- GetFontInfoRequest->NumFonts = 0;
-
- ConSrvReleaseScreenBuffer(Buff, TRUE);
- return STATUS_SUCCESS;
-}
-
-CSR_API(SrvGetConsoleFontSize)
-{
- NTSTATUS Status;
- PCONSOLE_GETFONTSIZE GetFontSizeRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetFontSizeRequest;
- // PCONSOLE /*PCONSRV_CONSOLE*/ Console;
- PCONSOLE_SCREEN_BUFFER Buff;
-
- Status = ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
- GetFontSizeRequest->OutputHandle,
- &Buff,
- GENERIC_READ,
- TRUE);
- if (!NT_SUCCESS(Status)) return Status;
-
- // FIXME!
- // Console = Buff->Header.Console;
- // TermGetFontSize(Console, ...);
- DPRINT1("%s not yet implemented\n", __FUNCTION__);
-
- ConSrvReleaseScreenBuffer(Buff, TRUE);
- return STATUS_SUCCESS;
-}
-
-CSR_API(SrvGetConsoleCurrentFont)
-{
- NTSTATUS Status;
- PCONSOLE_GETCURRENTFONT GetCurrentFontRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetCurrentFontRequest;
- // PCONSOLE /*PCONSRV_CONSOLE*/ Console;
- PCONSOLE_SCREEN_BUFFER Buff;
-
- Status = ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
- GetCurrentFontRequest->OutputHandle,
- &Buff,
- GENERIC_READ,
- TRUE);
- if (!NT_SUCCESS(Status)) return Status;
-
- // FIXME!
- // Console = Buff->Header.Console;
- // TermGetCurrentFont(Console, ...);
- DPRINT1("%s not yet implemented\n", __FUNCTION__);
- GetCurrentFontRequest->FontIndex = 0;
-
- ConSrvReleaseScreenBuffer(Buff, TRUE);
- return STATUS_SUCCESS;
-}
-
-CSR_API(SrvSetConsoleFont)
-{
- NTSTATUS Status;
- PCONSOLE_SETFONT SetFontRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetFontRequest;
- // PCONSOLE /*PCONSRV_CONSOLE*/ Console;
- PCONSOLE_SCREEN_BUFFER Buff;
-
- Status = ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
- SetFontRequest->OutputHandle,
- &Buff,
- GENERIC_WRITE,
- TRUE);
- if (!NT_SUCCESS(Status)) return Status;
-
- // FIXME!
- // Console = Buff->Header.Console;
- // TermSetFont(Console, ...);
- DPRINT1("%s not yet implemented\n", __FUNCTION__);
-
- ConSrvReleaseScreenBuffer(Buff, TRUE);
- return STATUS_SUCCESS;
-}
-
-/* EOF */