[CONSRV]: Implement the skeleton for the console server font APIs; reduces kernel32...
[reactos.git] / reactos / win32ss / user / winsrv / consrv / frontendctl.c
index 7294fa7..7d4cd84 100644 (file)
@@ -30,8 +30,8 @@
  *      with NT's, but values are not.
  */
 #if 0
-static NTSTATUS FASTCALL
-SetConsoleHardwareState(PCONSOLE Console, ULONG ConsoleHwState)
+static NTSTATUS
+SetConsoleHardwareState(PCONSRV_CONSOLE Console, ULONG ConsoleHwState)
 {
     DPRINT1("Console Hardware State: %d\n", ConsoleHwState);
 
@@ -58,7 +58,7 @@ CSR_API(SrvGetConsoleHardwareState)
     NTSTATUS Status;
     PCONSOLE_GETSETHWSTATE HardwareStateRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.HardwareStateRequest;
     PCONSOLE_SCREEN_BUFFER Buff;
-    PCONSOLE Console;
+    PCONSRV_CONSOLE Console;
 
     Status = ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
                                    HardwareStateRequest->OutputHandle,
@@ -88,7 +88,7 @@ CSR_API(SrvSetConsoleHardwareState)
     NTSTATUS Status;
     PCONSOLE_GETSETHWSTATE HardwareStateRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.HardwareStateRequest;
     PCONSOLE_SCREEN_BUFFER Buff;
-    PCONSOLE Console;
+    PCONSRV_CONSOLE Console;
 
     Status = ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
                                    HardwareStateRequest->OutputHandle,
@@ -117,7 +117,7 @@ CSR_API(SrvGetConsoleDisplayMode)
 {
     NTSTATUS Status;
     PCONSOLE_GETDISPLAYMODE GetDisplayModeRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetDisplayModeRequest;
-    PCONSOLE Console;
+    PCONSRV_CONSOLE Console;
 
     Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
                               &Console, TRUE);
@@ -133,7 +133,7 @@ CSR_API(SrvSetConsoleDisplayMode)
 {
     NTSTATUS Status;
     PCONSOLE_SETDISPLAYMODE SetDisplayModeRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetDisplayModeRequest;
-    PCONSOLE Console;
+    PCONSRV_CONSOLE Console;
     PCONSOLE_SCREEN_BUFFER Buff;
 
     Status = ConSrvGetScreenBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
@@ -143,7 +143,7 @@ CSR_API(SrvSetConsoleDisplayMode)
                                    TRUE);
     if (!NT_SUCCESS(Status)) return Status;
 
-    Console = Buff->Header.Console;
+    Console = (PCONSRV_CONSOLE)Buff->Header.Console;
 
     if (TermSetDisplayMode(Console, SetDisplayModeRequest->DisplayMode))
     {
@@ -163,14 +163,14 @@ CSR_API(SrvGetLargestConsoleWindowSize)
 {
     NTSTATUS Status;
     PCONSOLE_GETLARGESTWINDOWSIZE GetLargestWindowSizeRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetLargestWindowSizeRequest;
+    PCONSOLE /*PCONSRV_CONSOLE*/ Console;
     PCONSOLE_SCREEN_BUFFER Buff;
-    PCONSOLE Console;
 
     Status = ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
-                                   GetLargestWindowSizeRequest->OutputHandle,
-                                   &Buff,
-                                   GENERIC_READ,
-                                   TRUE);
+                                     GetLargestWindowSizeRequest->OutputHandle,
+                                     &Buff,
+                                     GENERIC_READ,
+                                     TRUE);
     if (!NT_SUCCESS(Status)) return Status;
 
     Console = Buff->Header.Console;
@@ -184,7 +184,7 @@ CSR_API(SrvShowConsoleCursor)
 {
     NTSTATUS Status;
     PCONSOLE_SHOWCURSOR ShowCursorRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ShowCursorRequest;
-    PCONSOLE Console;
+    PCONSOLE /*PCONSRV_CONSOLE*/ Console;
     PCONSOLE_SCREEN_BUFFER Buff;
 
     Status = ConSrvGetScreenBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
@@ -207,12 +207,12 @@ CSR_API(SrvSetConsoleCursor)
     NTSTATUS Status;
     BOOL Success;
     PCONSOLE_SETCURSOR SetCursorRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetCursorRequest;
-    PCONSOLE Console;
+    PCONSRV_CONSOLE Console;
     PCONSOLE_SCREEN_BUFFER Buff;
 
-    // FIXME: Tests show that this function is used only for graphics screen buffers
-    // and otherwise it returns FALSE + sets last error to invalid handle.
-    // NOTE: I find that behaviour is ridiculous but ok, let's accept that at the moment...
+    // 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,
@@ -220,7 +220,7 @@ CSR_API(SrvSetConsoleCursor)
                                      TRUE);
     if (!NT_SUCCESS(Status)) return Status;
 
-    Console = Buff->Header.Console;
+    Console = (PCONSRV_CONSOLE)Buff->Header.Console;
 
     Success = TermSetMouseCursor(Console, SetCursorRequest->CursorHandle);
 
@@ -232,7 +232,7 @@ CSR_API(SrvConsoleMenuControl)
 {
     NTSTATUS Status;
     PCONSOLE_MENUCONTROL MenuControlRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.MenuControlRequest;
-    PCONSOLE Console;
+    PCONSRV_CONSOLE Console;
     PCONSOLE_SCREEN_BUFFER Buff;
 
     Status = ConSrvGetScreenBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
@@ -242,7 +242,7 @@ CSR_API(SrvConsoleMenuControl)
                                    TRUE);
     if (!NT_SUCCESS(Status)) return Status;
 
-    Console = Buff->Header.Console;
+    Console = (PCONSRV_CONSOLE)Buff->Header.Console;
 
     MenuControlRequest->MenuHandle = TermMenuControl(Console,
                                                      MenuControlRequest->CmdIdLow,
@@ -257,7 +257,7 @@ CSR_API(SrvSetConsoleMenuClose)
     NTSTATUS Status;
     BOOL Success;
     PCONSOLE_SETMENUCLOSE SetMenuCloseRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetMenuCloseRequest;
-    PCONSOLE Console;
+    PCONSRV_CONSOLE Console;
 
     Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
                               &Console, TRUE);
@@ -273,9 +273,10 @@ CSR_API(SrvGetConsoleWindow)
 {
     NTSTATUS Status;
     PCONSOLE_GETWINDOW GetWindowRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetWindowRequest;
-    PCONSOLE Console;
+    PCONSRV_CONSOLE Console;
 
-    Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console, TRUE);
+    Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
+                              &Console, TRUE);
     if (!NT_SUCCESS(Status)) return Status;
 
     GetWindowRequest->WindowHandle = TermGetConsoleWindowHandle(Console);
@@ -288,9 +289,10 @@ CSR_API(SrvSetConsoleIcon)
 {
     NTSTATUS Status;
     PCONSOLE_SETICON SetIconRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetIconRequest;
-    PCONSOLE Console;
+    PCONSRV_CONSOLE Console;
 
-    Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console, TRUE);
+    Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
+                              &Console, TRUE);
     if (!NT_SUCCESS(Status)) return Status;
 
     Status = (TermChangeIcon(Console, SetIconRequest->IconHandle)
@@ -305,17 +307,17 @@ CSR_API(SrvGetConsoleSelectionInfo)
 {
     NTSTATUS Status;
     PCONSOLE_GETSELECTIONINFO GetSelectionInfoRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetSelectionInfoRequest;
-    PCONSOLE Console;
+    PCONSRV_CONSOLE Console;
 
-    Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console, TRUE);
-    if (NT_SUCCESS(Status))
-    {
-        memset(&GetSelectionInfoRequest->Info, 0, sizeof(CONSOLE_SELECTION_INFO));
-        if (Console->Selection.dwFlags != 0)
-            GetSelectionInfoRequest->Info = Console->Selection;
-        ConSrvReleaseConsole(Console, TRUE);
-    }
+    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;
 }
 
@@ -323,32 +325,115 @@ CSR_API(SrvGetConsoleSelectionInfo)
 
 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__);
-    return STATUS_NOT_IMPLEMENTED;
+    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__);
-    return STATUS_NOT_IMPLEMENTED;
+    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__);
-    return STATUS_NOT_IMPLEMENTED;
+
+    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__);
-    return STATUS_NOT_IMPLEMENTED;
+    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__);
-    return STATUS_NOT_IMPLEMENTED;
+
+    ConSrvReleaseScreenBuffer(Buff, TRUE);
+    return STATUS_SUCCESS;
 }
 
 /* EOF */