wip: add clipboard support

This commit is contained in:
2026-04-09 20:44:52 +02:00
parent b7b810e2a4
commit 906828f3ec
11 changed files with 582 additions and 0 deletions
+17
View File
@@ -35,6 +35,7 @@
#include "IpcSyscall.hpp" // SYS_DUPHANDLE, SYS_WAIT_HANDLE, SYS_STREAM_CREATE, SYS_STREAM_READ, SYS_STREAM_WRITE, SYS_MAILBOX_CREATE, SYS_MAILBOX_SEND, SYS_MAILBOX_RECV, SYS_WAITSET_CREATE, SYS_WAITSET_ADD, SYS_WAITSET_REMOVE, SYS_WAITSET_WAIT, SYS_PROC_OPEN, SYS_SURFACE_CREATE, SYS_SURFACE_MAP, SYS_SURFACE_RESIZE
#include "LibSyscall.hpp" // SYS_LOAD_LIB, SYS_UNLOAD_LIB, SYS_DLSYM
#include "CrashReportSyscall.hpp" // SYS_CRASH_REPORT
#include "Clipboard.hpp" // SYS_CLIPBOARD_*
// Assembly entry point
extern "C" void SyscallEntry();
@@ -422,6 +423,22 @@ namespace Montauk {
return (int64_t)Sys_GetLibBase(frame->arg1);
case SYS_CRASH_REPORT:
return Sys_CrashReport((CrashReportInfo*)frame->arg1);
case SYS_CLIPBOARD_SET_TEXT:
if (frame->arg2 > 0 && !ValidUserPtr(frame->arg1)) return -1;
return Sys_ClipboardSetText((const char*)frame->arg1, (uint32_t)frame->arg2);
case SYS_CLIPBOARD_GET_INFO:
if (!ValidUserPtr(frame->arg1)) return -1;
return Sys_ClipboardGetInfo((ClipboardInfo*)frame->arg1);
case SYS_CLIPBOARD_GET_TEXT:
if (frame->arg2 > 0 && !ValidUserPtr(frame->arg1)) return -1;
if (!ValidUserPtr(frame->arg3)) return -1;
if (frame->arg4 != 0 && !IsUserPtr(frame->arg4)) return -1;
return Sys_ClipboardGetText(IsUserPtr(frame->arg1) ? (char*)frame->arg1 : nullptr,
(uint32_t)frame->arg2,
(uint32_t*)frame->arg3,
IsUserPtr(frame->arg4) ? (uint64_t*)frame->arg4 : nullptr);
case SYS_CLIPBOARD_CLEAR:
return Sys_ClipboardClear();
default:
return -1;
}