#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include extern "C" { #include } #include template struct fex_gen_config { unsigned version = 6; }; template struct fex_gen_type {}; template<> struct fex_gen_type<_X11XCBPrivate> : fexgen::opaque_type {}; template<> struct fex_gen_type<_XContextDB> : fexgen::opaque_type {}; template<> struct fex_gen_type<_XDisplayAtoms> : fexgen::opaque_type {}; template<> struct fex_gen_type<_XIMFilter> : fexgen::opaque_type {}; template<> struct fex_gen_type<_XkbInfoRec> : fexgen::opaque_type {}; template<> struct fex_gen_type<_XKeytrans> : fexgen::opaque_type {}; template<> struct fex_gen_type<_XLockInfo> : fexgen::opaque_type {}; template<> struct fex_gen_type<_XrmHashBucketRec> : fexgen::opaque_type {}; #ifndef IS_32BIT_THUNK // Union types template<> struct fex_gen_type : fexgen::assume_compatible_data_layout {}; template<> struct fex_gen_type : fexgen::assume_compatible_data_layout {}; // Linked-list types template<> struct fex_gen_type<_XtransConnFd> : fexgen::assume_compatible_data_layout {}; template<> struct fex_gen_type<_XQEvent> : fexgen::assume_compatible_data_layout {}; // TODO: These are largely compatible, *but* contain function pointer members that need adjustment! template<> struct fex_gen_type<_XConnectionInfo> : fexgen::assume_compatible_data_layout {}; // Also contains linked-list pointers template<> struct fex_gen_type<_XConnWatchInfo> : fexgen::assume_compatible_data_layout {}; template<> struct fex_gen_type<_XDisplay> : fexgen::assume_compatible_data_layout {}; template<> struct fex_gen_type : fexgen::assume_compatible_data_layout {}; template<> struct fex_gen_type : fexgen::assume_compatible_data_layout {}; template<> struct fex_gen_type<_XExtension> : fexgen::assume_compatible_data_layout {}; // Also contains linked-list pointers template<> struct fex_gen_type<_XInternalAsync> : fexgen::assume_compatible_data_layout {}; // Also contains linked-list pointers // Contains nontrivial circular pointer relationships template<> struct fex_gen_type : fexgen::assume_compatible_data_layout {}; // TODO: This contains a nested struct type of function pointer members template<> struct fex_gen_type : fexgen::assume_compatible_data_layout {}; template<> struct fex_gen_type : fexgen::assume_compatible_data_layout {}; #endif template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config {}; template<> struct fex_gen_config<_XGetRequest> {}; template<> struct fex_gen_config<_XFlushGCCache> {}; #if __SIZEOF_POINTER__ == 8 template<> struct fex_gen_config<_XData32> {}; template<> struct fex_gen_config<_XRead32> {}; #endif template<> struct fex_gen_config<_XDeqAsyncHandler> {}; template<> struct fex_gen_config<_XError> {}; template<> struct fex_gen_config<_XIOError> {}; template<> struct fex_gen_config<_XAllocScratch> {}; template<> struct fex_gen_config<_XAllocTemp> {}; template<> struct fex_gen_config<_XFreeTemp> {}; template<> struct fex_gen_config<_XVIDtoVisual> {}; template<> struct fex_gen_config<_XSetLastRequestRead> {}; template<> struct fex_gen_config<_XGetHostname> {}; template<> struct fex_gen_config<_XScreenOfWindow> {}; template<> struct fex_gen_config<_XAsyncErrorHandler> {}; template<> struct fex_gen_config<_XGetAsyncReply> {}; template<> struct fex_gen_config<_XGetAsyncData> {}; template<> struct fex_gen_config<_XFlush> {}; template<> struct fex_gen_config<_XEventsQueued> {}; template<> struct fex_gen_config<_XReadEvents> {}; template<> struct fex_gen_config<_XRead> {}; template<> struct fex_gen_config<_XReadPad> {}; template<> struct fex_gen_config<_XSend> {}; template<> struct fex_gen_config<_XReply> {}; template<> struct fex_gen_config<_XEnq> {}; template<> struct fex_gen_config<_XDeq> {}; template<> struct fex_gen_config<_XUnknownWireEvent> {}; template<> struct fex_gen_config<_XUnknownWireEventCookie> {}; template<> struct fex_gen_config<_XUnknownCopyEventCookie> {}; template<> struct fex_gen_config<_XUnknownNativeEvent> {}; template<> struct fex_gen_config<_XWireToEvent> {}; template<> struct fex_gen_config<_XDefaultWireError> {}; template<> struct fex_gen_config<_XPollfdCacheInit> {}; template<> struct fex_gen_config<_XPollfdCacheAdd> {}; template<> struct fex_gen_config<_XPollfdCacheDel> {}; template<> struct fex_gen_config<_XAllocID> {}; template<> struct fex_gen_config<_XAllocIDs> {}; template<> struct fex_gen_config<_XFreeExtData> {}; template<> struct fex_gen_config<_XRegisterInternalConnection> {}; template<> struct fex_gen_config<_XUnregisterInternalConnection> {}; template<> struct fex_gen_config<_XProcessInternalConnection> {}; template<> struct fex_gen_config<_XTextHeight> {}; template<> struct fex_gen_config<_XTextHeight16> {}; template<> struct fex_gen_config<_XEventToWire> {}; template<> struct fex_gen_config<_XF86LoadQueryLocaleFont> {}; template<> struct fex_gen_config<_XProcessWindowAttributes> {}; template<> struct fex_gen_config<_XDefaultError> {}; template<> struct fex_gen_config<_XDefaultIOError> {}; #if !(X11_VERSION_MAJOR >= 1 && X11_VERSION_MINOR >= 7 && X11_VERSION_PATCH >= 0) // Doesn't exist on older X11 extern void _XDefaultIOErrorExit(Display* dpy, void* user_data); #endif template<> struct fex_gen_config<_XDefaultIOErrorExit> {}; template<> struct fex_gen_config<_XSetClipRectangles> {}; template<> struct fex_gen_config<_XGetWindowAttributes> {}; template<> struct fex_gen_config<_XPutBackEvent> {}; template<> struct fex_gen_config<_XIsEventCookie> {}; template<> struct fex_gen_config<_XFreeEventCookies> {}; template<> struct fex_gen_config<_XStoreEventCookie> {}; template<> struct fex_gen_config<_XFetchEventCookie> {}; template<> struct fex_gen_config<_XCopyEventCookie> {}; template<> struct fex_gen_config {};