Author: hbelusca
Date: Wed Jul  3 22:40:58 2013
New Revision: 59420

URL: http://svn.reactos.org/svn/reactos?rev=59420&view=rev
Log:
[CONSRV]
- Move SrvSetConsoleWindowInfo to a better place.
- When enlarging the console buffer, use the attributes of the last cell of 
each line to fill the new cells for each line.
- Remove usage of HAVE_WMEMSET / wmemset for resizing the buffer (NOTE: maybe 
it will be needed again later on...)

Modified:
    trunk/reactos/win32ss/user/consrv/condrv/text.c
    trunk/reactos/win32ss/user/consrv/conoutput.c
    trunk/reactos/win32ss/user/consrv/frontendctl.c

Modified: trunk/reactos/win32ss/user/consrv/condrv/text.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/consrv/condrv/text.c?rev=59420&r1=59419&r2=59420&view=diff
==============================================================================
--- trunk/reactos/win32ss/user/consrv/condrv/text.c     [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/consrv/condrv/text.c     [iso-8859-1] Wed Jul  3 
22:40:58 2013
@@ -17,12 +17,6 @@
 
 #define NDEBUG
 #include <debug.h>
-
-/*
-// Define wmemset(...)
-#include <wchar.h>
-#define HAVE_WMEMSET
-*/
 
 
 /* GLOBALS 
********************************************************************/
@@ -323,13 +317,10 @@
     PCHAR_INFO Buffer;
     DWORD Offset = 0;
     PCHAR_INFO ptr;
+    WORD CurrentAttribute;
     USHORT CurrentY;
     PCHAR_INFO OldBuffer;
-#ifdef HAVE_WMEMSET
-    USHORT value = MAKEWORD(' ', ScreenBuffer->ScreenDefaultAttrib);
-#else
     DWORD i;
-#endif
     DWORD diff;
 
     /* Buffer size is not allowed to be smaller than the view size */
@@ -374,28 +365,29 @@
             RtlCopyMemory(Buffer + Offset, ptr, 
ScreenBuffer->ScreenBufferSize.X * sizeof(CHAR_INFO));
             Offset += ScreenBuffer->ScreenBufferSize.X;
 
+            /* The attribute to be used is the one of the last cell of the 
current line */
+            CurrentAttribute = ConioCoordToPointer(ScreenBuffer,
+                                                   
ScreenBuffer->ScreenBufferSize.X - 1,
+                                                   CurrentY)->Attributes;
+
             diff = Size.X - ScreenBuffer->ScreenBufferSize.X;
-            /* Zero new part of it */
-#ifdef HAVE_WMEMSET
-            wmemset((PWCHAR)&Buffer[Offset], value, diff);
-#else
+
+            /* Zero-out the new part of the buffer */
             for (i = 0; i < diff; i++)
             {
                 ptr = Buffer + Offset;
                 ptr->Char.UnicodeChar = L' ';
-                ptr->Attributes = ScreenBuffer->ScreenDefaultAttrib;
+                ptr->Attributes = CurrentAttribute;
                 ++Offset;
             }
-#endif
         }
     }
 
     if (Size.Y > ScreenBuffer->ScreenBufferSize.Y)
     {
         diff = Size.X * (Size.Y - ScreenBuffer->ScreenBufferSize.Y);
-#ifdef HAVE_WMEMSET
-        wmemset((PWCHAR)&Buffer[Offset], value, diff);
-#else
+
+        /* Zero-out the new part of the buffer */
         for (i = 0; i < diff; i++)
         {
             ptr = Buffer + Offset;
@@ -403,7 +395,6 @@
             ptr->Attributes = ScreenBuffer->ScreenDefaultAttrib;
             ++Offset;
         }
-#endif
     }
 
     (void)InterlockedExchangePointer((PVOID volatile*)&ScreenBuffer->Buffer, 
Buffer);

Modified: trunk/reactos/win32ss/user/consrv/conoutput.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/consrv/conoutput.c?rev=59420&r1=59419&r2=59420&view=diff
==============================================================================
--- trunk/reactos/win32ss/user/consrv/conoutput.c       [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/consrv/conoutput.c       [iso-8859-1] Wed Jul  3 
22:40:58 2013
@@ -756,4 +756,56 @@
     return Status;
 }
 
+
+
+
+
+CSR_API(SrvSetConsoleWindowInfo)
+{
+    NTSTATUS Status;
+    PCONSOLE_SETWINDOWINFO SetWindowInfoRequest = 
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetWindowInfoRequest;
+    PCONSOLE_SCREEN_BUFFER Buff;
+    SMALL_RECT WindowRect = SetWindowInfoRequest->WindowRect;
+
+    DPRINT("SrvSetConsoleWindowInfo(0x%08x, %d, {L%d, T%d, R%d, B%d}) 
called\n",
+            SetWindowInfoRequest->OutputHandle, SetWindowInfoRequest->Absolute,
+            WindowRect.Left, WindowRect.Top, WindowRect.Right, 
WindowRect.Bottom);
+
+    Status = 
ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
+                                     SetWindowInfoRequest->OutputHandle,
+                                     &Buff,
+                                     GENERIC_READ,
+                                     TRUE);
+    if (!NT_SUCCESS(Status)) return Status;
+
+    if (SetWindowInfoRequest->Absolute == FALSE)
+    {
+        /* Relative positions given. Transform them to absolute ones */
+        WindowRect.Left   += Buff->ViewOrigin.X;
+        WindowRect.Top    += Buff->ViewOrigin.Y;
+        WindowRect.Right  += Buff->ViewOrigin.X + Buff->ViewSize.X - 1;
+        WindowRect.Bottom += Buff->ViewOrigin.Y + Buff->ViewSize.Y - 1;
+    }
+
+    /* See MSDN documentation on SetConsoleWindowInfo about the performed 
checks */
+    if ( (WindowRect.Left < 0) || (WindowRect.Top < 0)   ||
+         (WindowRect.Right  >= Buff->ScreenBufferSize.X) ||
+         (WindowRect.Bottom >= Buff->ScreenBufferSize.Y) ||
+         (WindowRect.Right  <= WindowRect.Left)          ||
+         (WindowRect.Bottom <= WindowRect.Top) )
+    {
+        ConSrvReleaseScreenBuffer(Buff, TRUE);
+        return STATUS_INVALID_PARAMETER;
+    }
+
+    Buff->ViewOrigin.X = WindowRect.Left;
+    Buff->ViewOrigin.Y = WindowRect.Top;
+
+    Buff->ViewSize.X = WindowRect.Right - WindowRect.Left + 1;
+    Buff->ViewSize.Y = WindowRect.Bottom - WindowRect.Top + 1;
+
+    ConSrvReleaseScreenBuffer(Buff, TRUE);
+    return STATUS_SUCCESS;
+}
+
 /* EOF */

Modified: trunk/reactos/win32ss/user/consrv/frontendctl.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/consrv/frontendctl.c?rev=59420&r1=59419&r2=59420&view=diff
==============================================================================
--- trunk/reactos/win32ss/user/consrv/frontendctl.c     [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/consrv/frontendctl.c     [iso-8859-1] Wed Jul  3 
22:40:58 2013
@@ -278,54 +278,6 @@
     return (Success ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL);
 }
 
-CSR_API(SrvSetConsoleWindowInfo)
-{
-    NTSTATUS Status;
-    PCONSOLE_SETWINDOWINFO SetWindowInfoRequest = 
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetWindowInfoRequest;
-    PCONSOLE_SCREEN_BUFFER Buff;
-    SMALL_RECT WindowRect = SetWindowInfoRequest->WindowRect;
-
-    DPRINT("SrvSetConsoleWindowInfo(0x%08x, %d, {L%d, T%d, R%d, B%d}) 
called\n",
-            SetWindowInfoRequest->OutputHandle, SetWindowInfoRequest->Absolute,
-            WindowRect.Left, WindowRect.Top, WindowRect.Right, 
WindowRect.Bottom);
-
-    Status = 
ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
-                                     SetWindowInfoRequest->OutputHandle,
-                                     &Buff,
-                                     GENERIC_READ,
-                                     TRUE);
-    if (!NT_SUCCESS(Status)) return Status;
-
-    if (SetWindowInfoRequest->Absolute == FALSE)
-    {
-        /* Relative positions given. Transform them to absolute ones */
-        WindowRect.Left   += Buff->ViewOrigin.X;
-        WindowRect.Top    += Buff->ViewOrigin.Y;
-        WindowRect.Right  += Buff->ViewOrigin.X + Buff->ViewSize.X - 1;
-        WindowRect.Bottom += Buff->ViewOrigin.Y + Buff->ViewSize.Y - 1;
-    }
-
-    /* See MSDN documentation on SetConsoleWindowInfo about the performed 
checks */
-    if ( (WindowRect.Left < 0) || (WindowRect.Top < 0)   ||
-         (WindowRect.Right  >= Buff->ScreenBufferSize.X) ||
-         (WindowRect.Bottom >= Buff->ScreenBufferSize.Y) ||
-         (WindowRect.Right  <= WindowRect.Left)          ||
-         (WindowRect.Bottom <= WindowRect.Top) )
-    {
-        ConSrvReleaseScreenBuffer(Buff, TRUE);
-        return STATUS_INVALID_PARAMETER;
-    }
-
-    Buff->ViewOrigin.X = WindowRect.Left;
-    Buff->ViewOrigin.Y = WindowRect.Top;
-
-    Buff->ViewSize.X = WindowRect.Right - WindowRect.Left + 1;
-    Buff->ViewSize.Y = WindowRect.Bottom - WindowRect.Top + 1;
-
-    ConSrvReleaseScreenBuffer(Buff, TRUE);
-    return STATUS_SUCCESS;
-}
-
 CSR_API(SrvGetConsoleWindow)
 {
     NTSTATUS Status;


Reply via email to