[KERNEL32][CONSRV]
[reactos.git] / reactos / win32ss / user / winsrv / consrv / conoutput.c
index bca67fd..e8c55c7 100644 (file)
@@ -63,38 +63,7 @@ CSR_API(SrvSetConsolePalette)
     // PGRAPHICS_SCREEN_BUFFER Buffer;
     PCONSOLE_SCREEN_BUFFER Buffer;
 
-
-/******************************************************************************\
-|************** HACK! HACK! HACK! HACK! HACK! HACK! HACK! HACK! ***************|
-\******************************************************************************/
-
-#define PALETTESIZE 256
-
-    LPLOGPALETTE LogPalette;                  /* Pointer to logical palette */
-    PALETTEENTRY MyPalette[] =
-    { {0,   0,   0x80,0} ,       // 1
-      {0,   0x80,0,   0} ,       // 2
-      {0,   0,   0,   0} ,       // 0
-      {0,   0x80,0x80,0} ,       // 3
-      {0x80,0,   0,   0} ,       // 4
-      {0x80,0,   0x80,0} ,       // 5
-      {0x80,0x80,0,   0} ,       // 6
-      {0xC0,0xC0,0xC0,0} ,       // 7
-      {0x80,0x80,0x80,0} ,       // 8
-      {0,   0,   0xFF,0} ,       // 9
-      {0,   0xFF,0,   0} ,       // 10
-      {0,   0xFF,0xFF,0} ,       // 11
-      {0xFF,0,   0,   0} ,       // 12
-      {0xFF,0,   0xFF,0} ,       // 13
-      {0xFF,0xFF,0,   0} ,       // 14
-      {0xFF,0xFF,0xFF,0} };      // 15
-
-/******************************************************************************\
-|************** HACK! HACK! HACK! HACK! HACK! HACK! HACK! HACK! ***************|
-\******************************************************************************/
-
-
-    DPRINT1("SrvSetConsolePalette\n");
+    DPRINT("SrvSetConsolePalette\n");
 
     // NOTE: Tests show that this function is used only for graphics screen buffers
     // and otherwise it returns FALSE + sets last error to invalid handle.
@@ -111,51 +80,21 @@ CSR_API(SrvSetConsolePalette)
                                    &Buffer, GENERIC_WRITE, TRUE);
     if (!NT_SUCCESS(Status)) return Status;
 
-
-/******************************************************************************\
-|************** HACK! HACK! HACK! HACK! HACK! HACK! HACK! HACK! ***************|
-\******************************************************************************/
-
-    DPRINT1("HACK: FIXME: SrvSetConsolePalette - Use hacked palette for testing purposes!!\n");
-
-    LogPalette = (LPLOGPALETTE)ConsoleAllocHeap(HEAP_ZERO_MEMORY,
-                                                (sizeof(LOGPALETTE) +
-                                                (sizeof(PALETTEENTRY) * PALETTESIZE)));
-    if (LogPalette)
-    {
-        UINT i;
-
-        LogPalette->palVersion = 0x300;
-        LogPalette->palNumEntries = PALETTESIZE;
-
-        for (i = 0 ; i < PALETTESIZE ; i++)
-        {
-            LogPalette->palPalEntry[i] = MyPalette[i % sizeof(MyPalette)/sizeof(MyPalette[0])];
-        }
-
-        SetPaletteRequest->PaletteHandle = CreatePalette(LogPalette);
-        SetPaletteRequest->Usage = SYSPAL_NOSTATIC256;
-        ConsoleFreeHeap(LogPalette);
-    }
-    else
-    {
-        DPRINT1("SrvSetConsolePalette - Hacked LogPalette is NULL\n");
-    }
-
-/******************************************************************************\
-|************** HACK! HACK! HACK! HACK! HACK! HACK! HACK! HACK! ***************|
-\******************************************************************************/
-
-
-    DPRINT1("ConDrvSetConsolePalette calling...\n");
+    /*
+     * Make the palette handle public, so that it can be
+     * used by other threads calling GDI functions on it.
+     * Indeed, the palette handle comes from a console app
+     * calling ourselves, running in CSRSS.
+     */
+    NtUserConsoleControl(ConsoleMakePalettePublic,
+                         &SetPaletteRequest->PaletteHandle,
+                         sizeof(SetPaletteRequest->PaletteHandle));
 
     Status = ConDrvSetConsolePalette(Buffer->Header.Console,
                                      Buffer,
                                      SetPaletteRequest->PaletteHandle,
                                      SetPaletteRequest->Usage);
 
-    DPRINT1("ConDrvSetConsolePalette returned Status 0x%08lx\n", Status);
-
     ConSrvReleaseScreenBuffer(Buffer, TRUE);
     return Status;
 }
@@ -384,7 +323,7 @@ CSR_API(SrvSetConsoleActiveScreenBuffer)
 static NTSTATUS
 DoWriteConsole(IN PCSR_API_MESSAGE ApiMessage,
                IN PCSR_THREAD ClientThread,
-               IN BOOL CreateWaitBlock OPTIONAL);
+               IN BOOLEAN CreateWaitBlock OPTIONAL);
 
 // Wait function CSR_WAIT_FUNCTION
 static BOOLEAN
@@ -412,9 +351,7 @@ WriteConsoleThread(IN PLIST_ENTRY WaitList,
         goto Quit;
     }
 
-    Status = DoWriteConsole(WaitApiMessage,
-                            WaitThread,
-                            FALSE);
+    Status = DoWriteConsole(WaitApiMessage, WaitThread, FALSE);
 
 Quit:
     if (Status != STATUS_PENDING)
@@ -435,7 +372,7 @@ ConDrvWriteConsole(IN PCONSOLE Console,
 static NTSTATUS
 DoWriteConsole(IN PCSR_API_MESSAGE ApiMessage,
                IN PCSR_THREAD ClientThread,
-               IN BOOL CreateWaitBlock OPTIONAL)
+               IN BOOLEAN CreateWaitBlock OPTIONAL)
 {
     NTSTATUS Status;
     PCONSOLE_WRITECONSOLE WriteConsoleRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.WriteConsoleRequest;
@@ -578,9 +515,7 @@ CSR_API(SrvWriteConsole)
         return STATUS_INVALID_PARAMETER;
     }
 
-    Status = DoWriteConsole(ApiMessage,
-                            CsrGetClientThread(),
-                            TRUE);
+    Status = DoWriteConsole(ApiMessage, CsrGetClientThread(), TRUE);
 
     if (Status == STATUS_PENDING) *ReplyCode = CsrReplyPending;