Half-plement SetConsolePalette.
svn path=/trunk/; revision=59711
/*
- * @unimplemented (Undocumented)
+ * @implemented (Undocumented)
* @note See http://comments.gmane.org/gmane.comp.lang.harbour.devel/27844
* Usage example: https://github.com/harbour/core/commit/d79a1b7b812cbde6ddf718ebfd6939a24f633e52
*/
HPALETTE hPalette,
UINT dwUsage)
{
- DPRINT1("SetConsolePalette(0x%x, 0x%x, %d) UNIMPLEMENTED!\n", hConsoleOutput, hPalette, dwUsage);
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- // Return TRUE so that we don't fail when being used by NTVDM even if not implemented.
+ NTSTATUS Status;
+ CONSOLE_API_MESSAGE ApiMessage;
+ PCONSOLE_SETPALETTE SetPaletteRequest = &ApiMessage.Data.SetPaletteRequest;
+
+ SetPaletteRequest->OutputHandle = hConsoleOutput;
+ SetPaletteRequest->PaletteHandle = hPalette;
+ SetPaletteRequest->Usage = dwUsage;
+
+ Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
+ NULL,
+ CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetPalette),
+ sizeof(CONSOLE_SETPALETTE));
+ if (!NT_SUCCESS(Status))
+ {
+ BaseSetLastNTError(Status);
+ return FALSE;
+ }
+
return TRUE;
}
/* conoutput.c */
CSR_API(SrvInvalidateBitMapRect);
+CSR_API(SrvSetConsolePalette);
CSR_API(SrvReadConsoleOutput);
CSR_API(SrvWriteConsole);
CSR_API(SrvWriteConsoleOutput);
return STATUS_SUCCESS;
}
+NTSTATUS NTAPI
+ConDrvSetConsolePalette(IN PCONSOLE Console,
+ IN PGRAPHICS_SCREEN_BUFFER Buffer,
+ IN HPALETTE PaletteHandle,
+ IN UINT Usage)
+{
+ DPRINT1("ConDrvSetConsolePalette is UNIMPLEMENTED but returns STATUS_SUCCESS\n");
+ return STATUS_SUCCESS;
+}
+
NTSTATUS NTAPI
ConDrvGetConsoleCursorInfo(IN PCONSOLE Console,
IN PTEXTMODE_SCREEN_BUFFER Buffer,
return Status;
}
+NTSTATUS NTAPI
+ConDrvSetConsolePalette(IN PCONSOLE Console,
+ IN PGRAPHICS_SCREEN_BUFFER Buffer,
+ IN HPALETTE PaletteHandle,
+ IN UINT Usage);
+CSR_API(SrvSetConsolePalette)
+{
+ NTSTATUS Status;
+ PCONSOLE_SETPALETTE SetPaletteRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetPaletteRequest;
+ // PCONSOLE_SCREEN_BUFFER Buffer;
+ PGRAPHICS_SCREEN_BUFFER Buffer;
+
+ 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.
+ Status = ConSrvGetGraphicsBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
+ SetPaletteRequest->OutputHandle,
+ &Buffer, GENERIC_WRITE, TRUE);
+ if (!NT_SUCCESS(Status)) return Status;
+
+ Status = ConDrvSetConsolePalette(Buffer->Header.Console,
+ Buffer,
+ SetPaletteRequest->PaletteHandle,
+ SetPaletteRequest->Usage);
+
+ ConSrvReleaseScreenBuffer(Buffer, TRUE);
+ return Status;
+}
+
NTSTATUS NTAPI
ConDrvGetConsoleCursorInfo(IN PCONSOLE Console,
IN PTEXTMODE_SCREEN_BUFFER Buffer,
PCONSOLE_SCREEN_BUFFER Buff;
// FIXME: Tests show that this function is used only for graphics screen buffers
- // and otherwise it returns false + set last error to invalid handle.
+ // 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...
Status = ConSrvGetGraphicsBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
SetCursorRequest->OutputHandle,
SrvSetConsoleCursor,
SrvShowConsoleCursor,
SrvConsoleMenuControl,
- // SrvSetConsolePalette,
+ SrvSetConsolePalette,
SrvSetConsoleDisplayMode,
// SrvRegisterConsoleVDM,
SrvGetConsoleHardwareState,
FALSE, // SrvSetConsoleCursor,
FALSE, // SrvShowConsoleCursor,
FALSE, // SrvConsoleMenuControl,
- // FALSE, // SrvSetConsolePalette,
+ FALSE, // SrvSetConsolePalette,
FALSE, // SrvSetConsoleDisplayMode,
// FALSE, // SrvRegisterConsoleVDM,
FALSE, // SrvGetConsoleHardwareState,
"SetConsoleCursor",
"ShowConsoleCursor",
"ConsoleMenuControl",
- // "SetConsolePalette",
+ "SetConsolePalette",
"SetConsoleDisplayMode",
// "RegisterConsoleVDM",
"GetConsoleHardwareState",