Simplify code.
[reactos.git] / win32ss / user / winsrv / consrv / condrv / text.c
index 41b5ce7..bef1bf0 100644 (file)
@@ -829,8 +829,7 @@ ConDrvWriteConsole(IN PCONSOLE Console,
 
     /* Validity checks */
     ASSERT(Console == ScreenBuffer->Header.Console);
-    ASSERT( (StringBuffer != NULL && NumCharsToWrite >  0) ||
-            (StringBuffer == NULL && NumCharsToWrite == 0) );
+    ASSERT((StringBuffer != NULL) || (StringBuffer == NULL && NumCharsToWrite == 0));
 
     // if (Console->PauseFlags & (PAUSED_FROM_KEYBOARD | PAUSED_FROM_SCROLLBAR | PAUSED_FROM_SELECTION))
     if (Console->PauseFlags && Console->UnpauseEvent != NULL)
@@ -892,7 +891,7 @@ ConDrvReadConsoleOutputString(IN PCONSOLE Console,
                               OUT PVOID StringBuffer,
                               IN ULONG NumCodesToRead,
                               IN PCOORD ReadCoord,
-                              OUT PCOORD EndCoord,
+                              // OUT PCOORD EndCoord,
                               OUT PULONG CodesRead)
 {
     SHORT Xpos, Ypos;
@@ -902,28 +901,27 @@ ConDrvReadConsoleOutputString(IN PCONSOLE Console,
     PCHAR_INFO Ptr;
 
     if (Console == NULL || Buffer == NULL ||
-        ReadCoord == NULL || EndCoord == NULL || CodesRead == NULL)
+        ReadCoord == NULL || /* EndCoord == NULL || */ CodesRead == NULL)
     {
         return STATUS_INVALID_PARAMETER;
     }
 
     /* Validity checks */
     ASSERT(Console == Buffer->Header.Console);
-    ASSERT( (StringBuffer != NULL && NumCodesToRead >  0) ||
-            (StringBuffer == NULL && NumCodesToRead == 0) );
+    ASSERT((StringBuffer != NULL) || (StringBuffer == NULL && NumCodesToRead == 0));
 
     switch (CodeType)
     {
         case CODE_ASCII:
-            CodeSize = sizeof(CHAR);
+            CodeSize = RTL_FIELD_SIZE(CODE_ELEMENT, AsciiChar);
             break;
 
         case CODE_UNICODE:
-            CodeSize = sizeof(WCHAR);
+            CodeSize = RTL_FIELD_SIZE(CODE_ELEMENT, UnicodeChar);
             break;
 
         case CODE_ATTRIBUTE:
-            CodeSize = sizeof(WORD);
+            CodeSize = RTL_FIELD_SIZE(CODE_ELEMENT, Attribute);
             break;
 
         default:
@@ -984,23 +982,8 @@ ConDrvReadConsoleOutputString(IN PCONSOLE Console,
         }
     }
 
-    // switch (CodeType)
-    // {
-        // case CODE_UNICODE:
-            // *(PWCHAR)ReadBuffer = 0;
-            // break;
-
-        // case CODE_ASCII:
-            // *(PCHAR)ReadBuffer = 0;
-            // break;
-
-        // case CODE_ATTRIBUTE:
-            // *(PWORD)ReadBuffer = 0;
-            // break;
-    // }
-
-    EndCoord->X = Xpos;
-    EndCoord->Y = (Ypos - Buffer->VirtualY + Buffer->ScreenBufferSize.Y) % Buffer->ScreenBufferSize.Y;
+    // EndCoord->X = Xpos;
+    // EndCoord->Y = (Ypos - Buffer->VirtualY + Buffer->ScreenBufferSize.Y) % Buffer->ScreenBufferSize.Y;
 
     *CodesRead = (ULONG)((ULONG_PTR)ReadBuffer - (ULONG_PTR)StringBuffer) / CodeSize;
     // <= NumCodesToRead
@@ -1033,21 +1016,20 @@ ConDrvWriteConsoleOutputString(IN PCONSOLE Console,
 
     /* Validity checks */
     ASSERT(Console == Buffer->Header.Console);
-    ASSERT( (StringBuffer != NULL && NumCodesToWrite >  0) ||
-            (StringBuffer == NULL && NumCodesToWrite == 0) );
+    ASSERT((StringBuffer != NULL) || (StringBuffer == NULL && NumCodesToWrite == 0));
 
     switch (CodeType)
     {
         case CODE_ASCII:
-            CodeSize = sizeof(CHAR);
+            CodeSize = RTL_FIELD_SIZE(CODE_ELEMENT, AsciiChar);
             break;
 
         case CODE_UNICODE:
-            CodeSize = sizeof(WCHAR);
+            CodeSize = RTL_FIELD_SIZE(CODE_ELEMENT, UnicodeChar);
             break;
 
         case CODE_ATTRIBUTE:
-            CodeSize = sizeof(WORD);
+            CodeSize = RTL_FIELD_SIZE(CODE_ELEMENT, Attribute);
             break;
 
         default:
@@ -1140,7 +1122,7 @@ NTSTATUS NTAPI
 ConDrvFillConsoleOutput(IN PCONSOLE Console,
                         IN PTEXTMODE_SCREEN_BUFFER Buffer,
                         IN CODE_TYPE CodeType,
-                        IN PVOID Code,
+                        IN CODE_ELEMENT Code,
                         IN ULONG NumCodesToWrite,
                         IN PCOORD WriteCoord /*,
                         OUT PULONG CodesWritten */)
@@ -1148,8 +1130,7 @@ ConDrvFillConsoleOutput(IN PCONSOLE Console,
     DWORD X, Y, Length; // , Written = 0;
     PCHAR_INFO Ptr;
 
-    if (Console == NULL || Buffer == NULL || Code == NULL ||
-        WriteCoord == NULL /* || CodesWritten == NULL */)
+    if (Console == NULL || Buffer == NULL || WriteCoord == NULL /* || CodesWritten == NULL */)
     {
         return STATUS_INVALID_PARAMETER;
     }
@@ -1157,29 +1138,13 @@ ConDrvFillConsoleOutput(IN PCONSOLE Console,
     /* Validity check */
     ASSERT(Console == Buffer->Header.Console);
 
-#if 0
-    switch (CodeType)
-    {
-        case CODE_ASCII:
-            /* On-place conversion from the ASCII char to the UNICODE char */
-            ConsoleAnsiCharToUnicodeChar(Console, &Code->UnicodeChar, &Code->AsciiChar);
-        /* Fall through */
-        case CODE_UNICODE:
-            Code = &Code->UnicodeChar;
-            break;
-
-        case CODE_ATTRIBUTE:
-            Code = &Code->Attribute;
-            break;
-    }
-#else
     if (CodeType == CODE_ASCII)
     {
-        /* On-place conversion from the ASCII char to the UNICODE char */
-        // FIXME: What if Code points to an invalid memory zone ??
-        ConsoleAnsiCharToUnicodeChar(Console, (PWCHAR)Code, (PCHAR)Code);
+        /* Conversion from the ASCII char to the UNICODE char */
+        CODE_ELEMENT tmp;
+        ConsoleAnsiCharToUnicodeChar(Console, &tmp.UnicodeChar, &Code.AsciiChar);
+        Code = tmp;
     }
-#endif
 
     X = WriteCoord->X;
     Y = (WriteCoord->Y + Buffer->VirtualY) % Buffer->ScreenBufferSize.Y;
@@ -1196,11 +1161,11 @@ ConDrvFillConsoleOutput(IN PCONSOLE Console,
         {
             case CODE_ASCII:
             case CODE_UNICODE:
-                Ptr->Char.UnicodeChar = *(PWCHAR)Code;
+                Ptr->Char.UnicodeChar = Code.UnicodeChar;
                 break;
 
             case CODE_ATTRIBUTE:
-                Ptr->Attributes = *(PWORD)Code;
+                Ptr->Attributes = Code.Attribute;
                 break;
         }
         // ++Ptr;