mirror of
https://github.com/FEX-Emu/FEX.git
synced 2026-10-09 01:00:17 +02:00
103 lines
3.6 KiB
C++
103 lines
3.6 KiB
C++
#include <stdio.h>
|
|
|
|
#include <X11/Xlib.h>
|
|
#include <X11/Xutil.h>
|
|
#include <X11/Xresource.h>
|
|
#include "common/Host.h"
|
|
#include <dlfcn.h>
|
|
|
|
#include "callback_structs.inl"
|
|
#include "callback_typedefs.inl"
|
|
|
|
struct {
|
|
#include "callback_unpacks_header.inl"
|
|
} *callback_unpacks;
|
|
|
|
#include "ldr_ptrs.inl"
|
|
|
|
_XIC *fexfn_impl_libX11_XCreateIC_internal(XIM a_0, size_t count, unsigned long *list) {
|
|
switch(count) {
|
|
case 0: return fexldr_ptr_libX11_XCreateIC(a_0, nullptr); break;
|
|
case 1: return fexldr_ptr_libX11_XCreateIC(a_0, list[0], nullptr); break;
|
|
case 2: return fexldr_ptr_libX11_XCreateIC(a_0, list[0], list[1], nullptr); break;
|
|
case 3: return fexldr_ptr_libX11_XCreateIC(a_0, list[0], list[1], list[2], nullptr); break;
|
|
case 4: return fexldr_ptr_libX11_XCreateIC(a_0, list[0], list[1], list[2], list[3], nullptr); break;
|
|
case 5: return fexldr_ptr_libX11_XCreateIC(a_0, list[0], list[1], list[2], list[3], list[4], nullptr); break;
|
|
case 6: return fexldr_ptr_libX11_XCreateIC(a_0, list[0], list[1], list[2], list[3], list[4], list[5], nullptr); break;
|
|
case 7: return fexldr_ptr_libX11_XCreateIC(a_0, list[0], list[1], list[2], list[3], list[4], list[5], list[6], nullptr); break;
|
|
default:
|
|
printf("XCreateIC_internal FAILURE\n");
|
|
return nullptr;
|
|
}
|
|
}
|
|
|
|
static char ErrorReply[] = "FEX: Unable to match arg count";
|
|
|
|
char* fexfn_impl_libX11_XGetICValues_internal(XIC a_0, size_t count, unsigned long *list) {
|
|
switch(count) {
|
|
case 0: return fexldr_ptr_libX11_XGetICValues(a_0, nullptr); break;
|
|
case 1: return fexldr_ptr_libX11_XGetICValues(a_0, list[0], nullptr); break;
|
|
case 2: return fexldr_ptr_libX11_XGetICValues(a_0, list[0], list[1], nullptr); break;
|
|
case 3: return fexldr_ptr_libX11_XGetICValues(a_0, list[0], list[1], list[2], nullptr); break;
|
|
case 4: return fexldr_ptr_libX11_XGetICValues(a_0, list[0], list[1], list[2], list[3], nullptr); break;
|
|
case 5: return fexldr_ptr_libX11_XGetICValues(a_0, list[0], list[1], list[2], list[3], list[4], nullptr); break;
|
|
case 6: return fexldr_ptr_libX11_XGetICValues(a_0, list[0], list[1], list[2], list[3], list[4], list[5], nullptr); break;
|
|
case 7: return fexldr_ptr_libX11_XGetICValues(a_0, list[0], list[1], list[2], list[3], list[4], list[5], list[6], nullptr); break;
|
|
default:
|
|
printf("XCreateIC_internal FAILURE\n");
|
|
return ErrorReply;
|
|
}
|
|
}
|
|
|
|
struct XIfEventCB_args {
|
|
XIfEventCBFN *fn;
|
|
XPointer arg;
|
|
};
|
|
|
|
static int XIfEventCB(Display* a0, XEvent* a1, XPointer a2) {
|
|
|
|
XIfEventCB_args *arg = (XIfEventCB_args*)a2;
|
|
|
|
XIfEventCB_Args argsrv { a0, a1, arg->arg};
|
|
|
|
call_guest(callback_unpacks->libX11_XIfEventCB, (void*) arg->fn, &argsrv);
|
|
|
|
return argsrv.rv;
|
|
}
|
|
|
|
int fexfn_impl_libX11_XIfEvent_internal(Display* a0, XEvent* a1, XIfEventCBFN* a2, XPointer a3) {
|
|
XIfEventCB_args args = { a2, a3 };
|
|
|
|
return fexldr_ptr_libX11_XIfEvent(a0, a1, &XIfEventCB, (XPointer)&args);
|
|
}
|
|
|
|
XErrorHandler guest_handler;
|
|
|
|
int XSetErrorHandlerCB(Display* a_0, XErrorEvent* a_1) {
|
|
XSetErrorHandlerCB_Args argsrv { a_0, a_1};
|
|
|
|
call_guest(callback_unpacks->libX11_XSetErrorHandlerCB, (void*) guest_handler, &argsrv);
|
|
|
|
return argsrv.rv;
|
|
}
|
|
|
|
XSetErrorHandlerCBFN* fexfn_impl_libX11_XSetErrorHandler_internal(XErrorHandler a_0) {
|
|
auto old = guest_handler;
|
|
guest_handler = a_0;
|
|
|
|
fexldr_ptr_libX11_XSetErrorHandler(&XSetErrorHandlerCB);
|
|
return old;
|
|
}
|
|
|
|
#include "function_unpacks.inl"
|
|
|
|
static ExportEntry exports[] = {
|
|
#include "tab_function_unpacks.inl"
|
|
{ nullptr, nullptr }
|
|
};
|
|
|
|
#include "ldr.inl"
|
|
|
|
EXPORTS_WITH_CALLBACKS(libX11)
|
|
|