Author: hbelusca
Date: Sun Jun 23 18:20:39 2013
New Revision: 59322
URL:
http://svn.reactos.org/svn/reactos?rev=59322&view=rev
Log:
[CONSRV]
Finish to move some text functions to condrv.
Modified:
trunk/reactos/win32ss/user/consrv/condrv/text.c
trunk/reactos/win32ss/user/consrv/conoutput.c
Modified: trunk/reactos/win32ss/user/consrv/condrv/text.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/consrv/condrv…
==============================================================================
--- trunk/reactos/win32ss/user/consrv/condrv/text.c [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/consrv/condrv/text.c [iso-8859-1] Sun Jun 23 18:20:39 2013
@@ -438,7 +438,7 @@
}
static VOID FASTCALL
-ConioNextLine(PTEXTMODE_SCREEN_BUFFER Buff, SMALL_RECT* UpdateRect, UINT *ScrolledLines)
+ConioNextLine(PTEXTMODE_SCREEN_BUFFER Buff, PSMALL_RECT UpdateRect, PUINT ScrolledLines)
{
/* If we hit bottom, slide the viewable screen */
if (++Buff->CursorPosition.Y == Buff->ScreenBufferSize.Y)
@@ -1099,157 +1099,144 @@
return STATUS_SUCCESS;
}
-
-
-CSR_API(SrvGetConsoleScreenBufferInfo)
+NTSTATUS NTAPI
+ConDrvGetConsoleScreenBufferInfo(IN PCONSOLE Console,
+ IN PTEXTMODE_SCREEN_BUFFER Buffer,
+ OUT PCONSOLE_SCREEN_BUFFER_INFO ScreenBufferInfo)
+{
+ if (Console == NULL || Buffer == NULL || ScreenBufferInfo == NULL)
+ return STATUS_INVALID_PARAMETER;
+
+ /* Validity check */
+ ASSERT(Console == Buffer->Header.Console);
+
+ ScreenBufferInfo->dwSize = Buffer->ScreenBufferSize;
+ ScreenBufferInfo->dwCursorPosition = Buffer->CursorPosition;
+ ScreenBufferInfo->wAttributes = Buffer->ScreenDefaultAttrib;
+ ScreenBufferInfo->srWindow.Left = Buffer->ViewOrigin.X;
+ ScreenBufferInfo->srWindow.Top = Buffer->ViewOrigin.Y;
+ ScreenBufferInfo->srWindow.Right = Buffer->ViewOrigin.X +
Buffer->ViewSize.X - 1;
+ ScreenBufferInfo->srWindow.Bottom = Buffer->ViewOrigin.Y +
Buffer->ViewSize.Y - 1;
+
+ // FIXME: Refine the computation
+ ScreenBufferInfo->dwMaximumWindowSize = Buffer->ScreenBufferSize;
+
+ return STATUS_SUCCESS;
+}
+
+NTSTATUS NTAPI
+ConDrvSetConsoleTextAttribute(IN PCONSOLE Console,
+ IN PTEXTMODE_SCREEN_BUFFER Buffer,
+ IN WORD Attribute)
+{
+ if (Console == NULL || Buffer == NULL)
+ return STATUS_INVALID_PARAMETER;
+
+ /* Validity check */
+ ASSERT(Console == Buffer->Header.Console);
+
+ Buffer->ScreenDefaultAttrib = Attribute;
+ return STATUS_SUCCESS;
+}
+
+NTSTATUS NTAPI
+ConDrvSetConsoleScreenBufferSize(IN PCONSOLE Console,
+ IN PTEXTMODE_SCREEN_BUFFER Buffer,
+ IN PCOORD Size)
{
NTSTATUS Status;
- PCONSOLE_GETSCREENBUFFERINFO ScreenBufferInfoRequest =
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ScreenBufferInfoRequest;
- // PCONSOLE Console;
- PTEXTMODE_SCREEN_BUFFER Buff;
- PCONSOLE_SCREEN_BUFFER_INFO pInfo = &ScreenBufferInfoRequest->Info;
-
- DPRINT("SrvGetConsoleScreenBufferInfo\n");
-
- Status =
ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
ScreenBufferInfoRequest->OutputHandle, &Buff, GENERIC_READ, TRUE);
- if (!NT_SUCCESS(Status)) return Status;
-
- // Console = Buff->Header.Console;
-
- pInfo->dwSize = Buff->ScreenBufferSize;
- pInfo->dwCursorPosition = Buff->CursorPosition;
- pInfo->wAttributes = Buff->ScreenDefaultAttrib;
- pInfo->srWindow.Left = Buff->ViewOrigin.X;
- pInfo->srWindow.Top = Buff->ViewOrigin.Y;
- pInfo->srWindow.Right = Buff->ViewOrigin.X + Buff->ViewSize.X - 1;
- pInfo->srWindow.Bottom = Buff->ViewOrigin.Y + Buff->ViewSize.Y - 1;
- pInfo->dwMaximumWindowSize = Buff->ScreenBufferSize; // TODO: Refine the
computation
-
- ConSrvReleaseScreenBuffer(Buff, TRUE);
- return STATUS_SUCCESS;
-}
-
-CSR_API(SrvSetConsoleTextAttribute)
-{
- NTSTATUS Status;
- PCONSOLE_SETTEXTATTRIB SetTextAttribRequest =
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetTextAttribRequest;
- PTEXTMODE_SCREEN_BUFFER Buff;
-
- DPRINT("SrvSetConsoleTextAttribute\n");
-
- Status =
ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
SetTextAttribRequest->OutputHandle, &Buff, GENERIC_WRITE, TRUE);
- if (!NT_SUCCESS(Status)) return Status;
-
- Buff->ScreenDefaultAttrib = SetTextAttribRequest->Attrib;
-
- ConSrvReleaseScreenBuffer(Buff, TRUE);
- return STATUS_SUCCESS;
-}
-
-CSR_API(SrvSetConsoleScreenBufferSize)
-{
- NTSTATUS Status;
- PCONSOLE_SETSCREENBUFFERSIZE SetScreenBufferSizeRequest =
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetScreenBufferSizeRequest;
- PCONSOLE Console;
- PTEXTMODE_SCREEN_BUFFER Buff;
-
- Status =
ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
SetScreenBufferSizeRequest->OutputHandle, &Buff, GENERIC_WRITE, TRUE);
- if (!NT_SUCCESS(Status)) return Status;
-
- Console = Buff->Header.Console;
-
- Status = ConioResizeBuffer(Console, Buff, SetScreenBufferSizeRequest->Size);
+
+ if (Console == NULL || Buffer == NULL || Size == NULL)
+ return STATUS_INVALID_PARAMETER;
+
+ /* Validity check */
+ ASSERT(Console == Buffer->Header.Console);
+
+ Status = ConioResizeBuffer(Console, Buffer, *Size);
if (NT_SUCCESS(Status)) ConioResizeTerminal(Console);
- ConSrvReleaseScreenBuffer(Buff, TRUE);
return Status;
}
-CSR_API(SrvScrollConsoleScreenBuffer)
-{
- PCONSOLE_SCROLLSCREENBUFFER ScrollScreenBufferRequest =
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ScrollScreenBufferRequest;
- PCONSOLE Console;
- PTEXTMODE_SCREEN_BUFFER Buff;
+NTSTATUS NTAPI
+ConDrvScrollConsoleScreenBuffer(IN PCONSOLE Console,
+ IN PTEXTMODE_SCREEN_BUFFER Buffer,
+ IN BOOL Unicode,
+ IN PSMALL_RECT ScrollRectangle,
+ IN BOOL UseClipRectangle,
+ IN PSMALL_RECT ClipRectangle OPTIONAL,
+ IN PCOORD DestinationOrigin,
+ IN CHAR_INFO FillChar)
+{
+ COORD CapturedDestinationOrigin;
SMALL_RECT ScreenBuffer;
SMALL_RECT SrcRegion;
SMALL_RECT DstRegion;
SMALL_RECT UpdateRegion;
- SMALL_RECT ScrollRectangle;
- SMALL_RECT ClipRectangle;
- NTSTATUS Status;
- HANDLE OutputHandle;
- BOOLEAN UseClipRectangle;
- COORD DestinationOrigin;
- CHAR_INFO FillChar;
-
- DPRINT("SrvScrollConsoleScreenBuffer\n");
-
- OutputHandle = ScrollScreenBufferRequest->OutputHandle;
- UseClipRectangle = ScrollScreenBufferRequest->UseClipRectangle;
- DestinationOrigin = ScrollScreenBufferRequest->DestinationOrigin;
- FillChar = ScrollScreenBufferRequest->Fill;
-
- Status =
ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
OutputHandle, &Buff, GENERIC_WRITE, TRUE);
- if (!NT_SUCCESS(Status)) return Status;
-
- Console = Buff->Header.Console;
-
- ScrollRectangle = ScrollScreenBufferRequest->ScrollRectangle;
-
- /* Make sure source rectangle is inside the screen buffer */
- ConioInitRect(&ScreenBuffer, 0, 0, Buff->ScreenBufferSize.Y - 1,
Buff->ScreenBufferSize.X - 1);
- if (!ConioGetIntersection(&SrcRegion, &ScreenBuffer, &ScrollRectangle))
- {
- ConSrvReleaseScreenBuffer(Buff, TRUE);
+ SMALL_RECT CapturedClipRectangle;
+
+ if (Console == NULL || Buffer == NULL || ScrollRectangle == NULL ||
+ (UseClipRectangle ? ClipRectangle == NULL : FALSE) || DestinationOrigin == NULL)
+ {
+ return STATUS_INVALID_PARAMETER;
+ }
+
+ /* Validity check */
+ ASSERT(Console == Buffer->Header.Console);
+
+ CapturedDestinationOrigin = *DestinationOrigin;
+
+ /* Make sure the source rectangle is inside the screen buffer */
+ ConioInitRect(&ScreenBuffer, 0, 0, Buffer->ScreenBufferSize.Y - 1,
Buffer->ScreenBufferSize.X - 1);
+ if (!ConioGetIntersection(&SrcRegion, &ScreenBuffer, ScrollRectangle))
+ {
return STATUS_SUCCESS;
}
/* If the source was clipped on the left or top, adjust the destination accordingly
*/
- if (ScrollRectangle.Left < 0)
- {
- DestinationOrigin.X -= ScrollRectangle.Left;
- }
- if (ScrollRectangle.Top < 0)
- {
- DestinationOrigin.Y -= ScrollRectangle.Top;
+ if (ScrollRectangle->Left < 0)
+ {
+ CapturedDestinationOrigin.X -= ScrollRectangle->Left;
+ }
+ if (ScrollRectangle->Top < 0)
+ {
+ CapturedDestinationOrigin.Y -= ScrollRectangle->Top;
}
if (UseClipRectangle)
{
- ClipRectangle = ScrollScreenBufferRequest->ClipRectangle;
- if (!ConioGetIntersection(&ClipRectangle, &ClipRectangle,
&ScreenBuffer))
- {
- ConSrvReleaseScreenBuffer(Buff, TRUE);
+ CapturedClipRectangle = *ClipRectangle;
+ if (!ConioGetIntersection(&CapturedClipRectangle, &CapturedClipRectangle,
&ScreenBuffer))
+ {
return STATUS_SUCCESS;
}
}
else
{
- ClipRectangle = ScreenBuffer;
+ CapturedClipRectangle = ScreenBuffer;
}
ConioInitRect(&DstRegion,
- DestinationOrigin.Y,
- DestinationOrigin.X,
- DestinationOrigin.Y + ConioRectHeight(&SrcRegion) - 1,
- DestinationOrigin.X + ConioRectWidth(&SrcRegion) - 1);
-
- if (!ScrollScreenBufferRequest->Unicode)
+ CapturedDestinationOrigin.Y,
+ CapturedDestinationOrigin.X,
+ CapturedDestinationOrigin.Y + ConioRectHeight(&SrcRegion) - 1,
+ CapturedDestinationOrigin.X + ConioRectWidth(&SrcRegion ) - 1);
+
+ if (!Unicode)
ConsoleAnsiCharToUnicodeChar(Console, &FillChar.Char.UnicodeChar,
&FillChar.Char.AsciiChar);
- ConioMoveRegion(Buff, &SrcRegion, &DstRegion, &ClipRectangle, FillChar);
-
- if ((PCONSOLE_SCREEN_BUFFER)Buff == Console->ActiveBuffer)
+ ConioMoveRegion(Buffer, &SrcRegion, &DstRegion, &CapturedClipRectangle,
FillChar);
+
+ if ((PCONSOLE_SCREEN_BUFFER)Buffer == Console->ActiveBuffer)
{
ConioGetUnion(&UpdateRegion, &SrcRegion, &DstRegion);
- if (ConioGetIntersection(&UpdateRegion, &UpdateRegion,
&ClipRectangle))
+ if (ConioGetIntersection(&UpdateRegion, &UpdateRegion,
&CapturedClipRectangle))
{
/* Draw update region */
ConioDrawRegion(Console, &UpdateRegion);
}
}
- ConSrvReleaseScreenBuffer(Buff, TRUE);
return STATUS_SUCCESS;
}
Modified: trunk/reactos/win32ss/user/consrv/conoutput.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/consrv/conout…
==============================================================================
--- trunk/reactos/win32ss/user/consrv/conoutput.c [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/consrv/conoutput.c [iso-8859-1] Sun Jun 23 18:20:39 2013
@@ -684,160 +684,114 @@
return Status;
}
-#if 0000
-
+NTSTATUS NTAPI
+ConDrvGetConsoleScreenBufferInfo(IN PCONSOLE Console,
+ IN PTEXTMODE_SCREEN_BUFFER Buffer,
+ OUT PCONSOLE_SCREEN_BUFFER_INFO ScreenBufferInfo);
CSR_API(SrvGetConsoleScreenBufferInfo)
{
NTSTATUS Status;
PCONSOLE_GETSCREENBUFFERINFO ScreenBufferInfoRequest =
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ScreenBufferInfoRequest;
- // PCONSOLE Console;
- PTEXTMODE_SCREEN_BUFFER Buff;
- PCONSOLE_SCREEN_BUFFER_INFO pInfo = &ScreenBufferInfoRequest->Info;
+ PTEXTMODE_SCREEN_BUFFER Buffer;
DPRINT("SrvGetConsoleScreenBufferInfo\n");
- Status =
ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
ScreenBufferInfoRequest->OutputHandle, &Buff, GENERIC_READ, TRUE);
- if (!NT_SUCCESS(Status)) return Status;
-
- // Console = Buff->Header.Console;
-
- pInfo->dwSize = Buff->ScreenBufferSize;
- pInfo->dwCursorPosition = Buff->CursorPosition;
- pInfo->wAttributes = Buff->ScreenDefaultAttrib;
- pInfo->srWindow.Left = Buff->ViewOrigin.X;
- pInfo->srWindow.Top = Buff->ViewOrigin.Y;
- pInfo->srWindow.Right = Buff->ViewOrigin.X + Buff->ViewSize.X - 1;
- pInfo->srWindow.Bottom = Buff->ViewOrigin.Y + Buff->ViewSize.Y - 1;
- pInfo->dwMaximumWindowSize = Buff->ScreenBufferSize; // TODO: Refine the
computation
-
- ConSrvReleaseScreenBuffer(Buff, TRUE);
- return STATUS_SUCCESS;
-}
-
+ Status =
ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
+ ScreenBufferInfoRequest->OutputHandle,
+ &Buffer, GENERIC_READ, TRUE);
+ if (!NT_SUCCESS(Status)) return Status;
+
+ Status = ConDrvGetConsoleScreenBufferInfo(Buffer->Header.Console,
+ Buffer,
+ &ScreenBufferInfoRequest->Info);
+
+ ConSrvReleaseScreenBuffer(Buffer, TRUE);
+ return Status;
+}
+
+NTSTATUS NTAPI
+ConDrvSetConsoleTextAttribute(IN PCONSOLE Console,
+ IN PTEXTMODE_SCREEN_BUFFER Buffer,
+ IN WORD Attribute);
CSR_API(SrvSetConsoleTextAttribute)
{
NTSTATUS Status;
PCONSOLE_SETTEXTATTRIB SetTextAttribRequest =
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetTextAttribRequest;
- PTEXTMODE_SCREEN_BUFFER Buff;
+ PTEXTMODE_SCREEN_BUFFER Buffer;
DPRINT("SrvSetConsoleTextAttribute\n");
- Status =
ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
SetTextAttribRequest->OutputHandle, &Buff, GENERIC_WRITE, TRUE);
- if (!NT_SUCCESS(Status)) return Status;
-
- Buff->ScreenDefaultAttrib = SetTextAttribRequest->Attrib;
-
- ConSrvReleaseScreenBuffer(Buff, TRUE);
- return STATUS_SUCCESS;
-}
-
+ Status =
ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
+ SetTextAttribRequest->OutputHandle,
+ &Buffer, GENERIC_WRITE, TRUE);
+ if (!NT_SUCCESS(Status)) return Status;
+
+ Status = ConDrvSetConsoleTextAttribute(Buffer->Header.Console,
+ Buffer,
+ SetTextAttribRequest->Attrib);
+
+ ConSrvReleaseScreenBuffer(Buffer, TRUE);
+ return Status;
+}
+
+NTSTATUS NTAPI
+ConDrvSetConsoleScreenBufferSize(IN PCONSOLE Console,
+ IN PTEXTMODE_SCREEN_BUFFER Buffer,
+ IN PCOORD Size);
CSR_API(SrvSetConsoleScreenBufferSize)
{
NTSTATUS Status;
PCONSOLE_SETSCREENBUFFERSIZE SetScreenBufferSizeRequest =
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetScreenBufferSizeRequest;
- PCONSOLE Console;
- PTEXTMODE_SCREEN_BUFFER Buff;
-
- Status =
ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
SetScreenBufferSizeRequest->OutputHandle, &Buff, GENERIC_WRITE, TRUE);
- if (!NT_SUCCESS(Status)) return Status;
-
- Console = Buff->Header.Console;
-
- Status = ConioResizeBuffer(Console, Buff, SetScreenBufferSizeRequest->Size);
- if (NT_SUCCESS(Status)) ConioResizeTerminal(Console);
-
- ConSrvReleaseScreenBuffer(Buff, TRUE);
- return Status;
-}
-
+ PTEXTMODE_SCREEN_BUFFER Buffer;
+
+ DPRINT("SrvSetConsoleScreenBufferSize\n");
+
+ Status =
ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
+ SetScreenBufferSizeRequest->OutputHandle,
+ &Buffer, GENERIC_WRITE, TRUE);
+ if (!NT_SUCCESS(Status)) return Status;
+
+ Status = ConDrvSetConsoleScreenBufferSize(Buffer->Header.Console,
+ Buffer,
+ &SetScreenBufferSizeRequest->Size);
+
+ ConSrvReleaseScreenBuffer(Buffer, TRUE);
+ return Status;
+}
+
+NTSTATUS NTAPI
+ConDrvScrollConsoleScreenBuffer(IN PCONSOLE Console,
+ IN PTEXTMODE_SCREEN_BUFFER Buffer,
+ IN BOOL Unicode,
+ IN PSMALL_RECT ScrollRectangle,
+ IN BOOL UseClipRectangle,
+ IN PSMALL_RECT ClipRectangle OPTIONAL,
+ IN PCOORD DestinationOrigin,
+ IN CHAR_INFO FillChar);
CSR_API(SrvScrollConsoleScreenBuffer)
{
+ NTSTATUS Status;
PCONSOLE_SCROLLSCREENBUFFER ScrollScreenBufferRequest =
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ScrollScreenBufferRequest;
- PCONSOLE Console;
- PTEXTMODE_SCREEN_BUFFER Buff;
- SMALL_RECT ScreenBuffer;
- SMALL_RECT SrcRegion;
- SMALL_RECT DstRegion;
- SMALL_RECT UpdateRegion;
- SMALL_RECT ScrollRectangle;
- SMALL_RECT ClipRectangle;
- NTSTATUS Status;
- HANDLE OutputHandle;
- BOOLEAN UseClipRectangle;
- COORD DestinationOrigin;
- CHAR_INFO FillChar;
+ PTEXTMODE_SCREEN_BUFFER Buffer;
DPRINT("SrvScrollConsoleScreenBuffer\n");
- OutputHandle = ScrollScreenBufferRequest->OutputHandle;
- UseClipRectangle = ScrollScreenBufferRequest->UseClipRectangle;
- DestinationOrigin = ScrollScreenBufferRequest->DestinationOrigin;
- FillChar = ScrollScreenBufferRequest->Fill;
-
- Status =
ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
OutputHandle, &Buff, GENERIC_WRITE, TRUE);
- if (!NT_SUCCESS(Status)) return Status;
-
- Console = Buff->Header.Console;
-
- ScrollRectangle = ScrollScreenBufferRequest->ScrollRectangle;
-
- /* Make sure source rectangle is inside the screen buffer */
- ConioInitRect(&ScreenBuffer, 0, 0, Buff->ScreenBufferSize.Y - 1,
Buff->ScreenBufferSize.X - 1);
- if (!ConioGetIntersection(&SrcRegion, &ScreenBuffer, &ScrollRectangle))
- {
- ConSrvReleaseScreenBuffer(Buff, TRUE);
- return STATUS_SUCCESS;
- }
-
- /* If the source was clipped on the left or top, adjust the destination accordingly
*/
- if (ScrollRectangle.Left < 0)
- {
- DestinationOrigin.X -= ScrollRectangle.Left;
- }
- if (ScrollRectangle.Top < 0)
- {
- DestinationOrigin.Y -= ScrollRectangle.Top;
- }
-
- if (UseClipRectangle)
- {
- ClipRectangle = ScrollScreenBufferRequest->ClipRectangle;
- if (!ConioGetIntersection(&ClipRectangle, &ClipRectangle,
&ScreenBuffer))
- {
- ConSrvReleaseScreenBuffer(Buff, TRUE);
- return STATUS_SUCCESS;
- }
- }
- else
- {
- ClipRectangle = ScreenBuffer;
- }
-
- ConioInitRect(&DstRegion,
- DestinationOrigin.Y,
- DestinationOrigin.X,
- DestinationOrigin.Y + ConioRectHeight(&SrcRegion) - 1,
- DestinationOrigin.X + ConioRectWidth(&SrcRegion) - 1);
-
- if (!ScrollScreenBufferRequest->Unicode)
- ConsoleAnsiCharToUnicodeChar(Console, &FillChar.Char.UnicodeChar,
&FillChar.Char.AsciiChar);
-
- ConioMoveRegion(Buff, &SrcRegion, &DstRegion, &ClipRectangle, FillChar);
-
- if ((PCONSOLE_SCREEN_BUFFER)Buff == Console->ActiveBuffer)
- {
- ConioGetUnion(&UpdateRegion, &SrcRegion, &DstRegion);
- if (ConioGetIntersection(&UpdateRegion, &UpdateRegion,
&ClipRectangle))
- {
- /* Draw update region */
- ConioDrawRegion(Console, &UpdateRegion);
- }
- }
-
- ConSrvReleaseScreenBuffer(Buff, TRUE);
- return STATUS_SUCCESS;
-}
-
-#endif
+ Status =
ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
+ ScrollScreenBufferRequest->OutputHandle,
+ &Buffer, GENERIC_WRITE, TRUE);
+ if (!NT_SUCCESS(Status)) return Status;
+
+ Status = ConDrvScrollConsoleScreenBuffer(Buffer->Header.Console,
+ Buffer,
+ ScrollScreenBufferRequest->Unicode,
+
&ScrollScreenBufferRequest->ScrollRectangle,
+
ScrollScreenBufferRequest->UseClipRectangle,
+
&ScrollScreenBufferRequest->ClipRectangle,
+
&ScrollScreenBufferRequest->DestinationOrigin,
+ ScrollScreenBufferRequest->Fill);
+
+ ConSrvReleaseScreenBuffer(Buffer, TRUE);
+ return Status;
+}
/* EOF */