diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-12-13 15:24:03 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-12-13 15:24:11 +0100 |
| commit | fa3db3df11f0d10a4a46f5ec5b0aaeaf34656d72 (patch) | |
| tree | 74dacd24ef44f155a2b6f0ab517bfe25c2e48dc2 /src/libtools | |
| parent | 4b4c0143d951b6aa18e2102136b4b72e165459d4 (diff) | |
| download | box64-fa3db3df11f0d10a4a46f5ec5b0aaeaf34656d72.tar.gz box64-fa3db3df11f0d10a4a46f5ec5b0aaeaf34656d72.zip | |
[BOX32][WRAPPER] Added a arge batch of 32bits wrapped function to X11 and friends
Diffstat (limited to 'src/libtools')
| -rw-r--r-- | src/libtools/my_x11_conv.c | 216 | ||||
| -rw-r--r-- | src/libtools/my_x11_conv.h | 16 | ||||
| -rw-r--r-- | src/libtools/my_x11_defs.h | 81 | ||||
| -rw-r--r-- | src/libtools/my_x11_defs_32.h | 92 |
4 files changed, 396 insertions, 9 deletions
diff --git a/src/libtools/my_x11_conv.c b/src/libtools/my_x11_conv.c index c9efd6e3..dec9b3b1 100644 --- a/src/libtools/my_x11_conv.c +++ b/src/libtools/my_x11_conv.c @@ -150,6 +150,11 @@ my_Visual_t* getVisual64(int N, my_Visual_32_t* a) khint_t k = kh_get(visuals, my32_Displays_Visuals[N], key); Visuals_t* ret = NULL; if(k==kh_end(my32_Displays_Visuals[N])) { + // workaround for already "64" Visual + // needed for retrocityrampge (probably other) + // TODO: fix the underlying issue + if(!a->ext_data && !a->visualid) + return (my_Visual_t*)a; int r; k = kh_put(visuals, my32_Displays_Visuals[N], key, &r); ret = &kh_value(my32_Displays_Visuals[N], k); @@ -1005,25 +1010,53 @@ int inplace_XIDeviceInfo_enlarge(void* a) return n; } -void inplace_XDevice_shrink(void* a) +void* inplace_XDevice_shrink(void* a) { - if(!a) return; + if(!a) return a; my_XDevice_t* src = a; my_XDevice_32_t* dst = a; - dst->device_id = src->device_id; + dst->device_id = to_ulong(src->device_id); dst->num_classes = src->num_classes; dst->classes = to_ptrv(src->classes); + + return a; } -void inplace_XDevice_enlarge(void* a) +void* inplace_XDevice_enlarge(void* a) { - if(!a) return; + if(!a) return a; my_XDevice_32_t* src = a; my_XDevice_t* dst = a; dst->classes = from_ptrv(src->classes); dst->num_classes = src->num_classes; - dst->device_id = src->device_id; + dst->device_id = from_ulong(src->device_id); + + return a; +} +void* inplace_XDeviceState_shrink(void* a) +{ + if(!a) return a; + my_XDeviceState_t* src = a; + my_XDeviceState_32_t* dst = a; + + dst->device_id = to_ulong(src->device_id); + dst->num_classes = src->num_classes; + dst->data = to_ptrv(src->data); + + return a; +} +void* inplace_XDeviceState_enlarge(void* a) +{ + if(!a) return a; + my_XDeviceState_32_t* src = a; + my_XDeviceState_t* dst = a; + + dst->data = from_ptrv(src->data); + dst->num_classes = src->num_classes; + dst->device_id = from_ulong(src->device_id); + + return a; } void convert_XShmSegmentInfo_to_32(void* d, void* s) @@ -1043,4 +1076,173 @@ void convert_XShmSegmentInfo_to_64(void* d, void* s) dst->shmaddr = from_ptrv(src->shmaddr); dst->shmid = src->shmid; dst->shmseg = from_ulong(src->shmseg); -} \ No newline at end of file +} +void* inplace_XkbNamesRec_shrink(void* a) +{ + if(a) { + my_XkbNamesRec_t* src = a; + my_XkbNamesRec_32_t* dst = a; + + for(int i=0; i<src->num_rg; ++i) + src->radio_groups[i] = to_ulong(src->radio_groups[i]); + dst->keycodes = to_ulong(src->keycodes); + dst->geometry = to_ulong(src->geometry); + dst->symbols = to_ulong(src->symbols); + dst->types = to_ulong(src->types); + dst->compat = to_ulong(src->compat); + for(int i=0; i<16; ++i) + dst->vmods[i] = to_ulong(src->vmods[i]); + for(int i=0; i<32; ++i) + dst->indicators[i] = to_ulong(src->indicators[i]); + for(int i=0; i<4; ++i) + dst->groups[i] = to_ulong(src->groups[i]); + dst->keys = to_ptrv(src->keys); + dst->key_aliases = to_ptrv(src->key_aliases); + dst->radio_groups = to_ptrv(src->radio_groups); + dst->phys_symbols = to_ulong(src->phys_symbols); + dst->num_keys = src->num_keys; + dst->num_key_aliases = src->num_key_aliases; + dst->num_rg = src->num_rg; + } + return a; +} +void* inplace_XkbNamesRec_enlarge(void* a) +{ + if(a) { + my_XkbNamesRec_32_t* src = a; + my_XkbNamesRec_t* dst = a; + + dst->num_rg = src->num_rg; + dst->num_key_aliases = src->num_key_aliases; + dst->num_keys = src->num_keys; + dst->phys_symbols = from_ulong(src->phys_symbols); + dst->radio_groups = from_ptrv(src->radio_groups); + dst->key_aliases = from_ptrv(src->key_aliases); + for(int i=4-1; i>=0; --i) + dst->groups[i] = from_ulong(src->groups[i]); + for(int i=32-1; i>=0; --i) + dst->indicators[i] = from_ulong(src->indicators[i]); + for(int i=16-1; i>=0; --i) + dst->vmods[i] = from_ulong(src->vmods[i]); + dst->compat = from_ulong(src->compat); + dst->types = from_ulong(src->types); + dst->symbols = from_ulong(src->symbols); + dst->geometry = from_ulong(src->geometry); + dst->keys = from_ptrv(src->keys); + dst->keycodes = from_ulong(src->keycodes); + + for(int i=src->num_rg-1; i>=0; --i) + dst->radio_groups[i] = from_ulong(dst->radio_groups[i]); + } + return a; +} + +void* inplace_XkbDescRec_shrink(void* a) +{ + if(a) { + my_XkbDescRec_t* src = a; + my_XkbDescRec_32_t* dst = a; + + dst->display = to_ptrv(FindDisplay(src->display)); + dst->flags = src->flags; + dst->device_spec = src->device_spec; + dst->min_key_code = src->min_key_code; + dst->max_key_code = src->max_key_code; + dst->ctrls = to_ptrv(src->ctrls); + dst->server = to_ptrv(src->server); + dst->map = to_ptrv(src->map); + dst->indicators = to_ptrv(src->indicators); + dst->names = to_ptrv(inplace_XkbNamesRec_shrink(src->names)); + dst->compat = to_ptrv(src->compat); + dst->geom = to_ptrv(src->geom); + } + return a; +} +void* inplace_XkbDescRec_enlarge(void* a) +{ + if(a) { + my_XkbDescRec_32_t* src = a; + my_XkbDescRec_t* dst = a; + + dst->geom = from_ptrv(src->geom); + dst->compat = from_ptrv(src->compat); + dst->names = inplace_XkbNamesRec_enlarge(from_ptrv(src->names)); + dst->indicators = from_ptrv(src->indicators); + dst->map = from_ptrv(src->map); + dst->server = from_ptrv(src->server); + dst->ctrls = from_ptrv(src->ctrls); + dst->max_key_code = src->max_key_code; + dst->min_key_code = src->min_key_code; + dst->device_spec = src->device_spec; + dst->flags = src->flags; + dst->display = getDisplay(from_ptrv(src->display)); + } + return a; +} + +void convert_XAnyClassInfo_to_32(void* d, void* s) +{ + if(!d || !s) return; + my_XAnyClassInfo_t* src = s; + my_XAnyClassInfo_32_t* dst = d; + + dst->c_class = to_ulong(src->c_class); + dst->length = src->length; + +} +void convert_XAnyClassInfo_to_64(void* d, void* s) +{ + if(!d || !s) return; + my_XAnyClassInfo_32_t* src = s; + my_XAnyClassInfo_t* dst = d; + + dst->length = src->length; + dst->c_class = from_ulong(src->c_class); +} +void* inplace_XAnyClassInfo_shrink(void* a) +{ + if(a) + convert_XAnyClassInfo_to_32(a, a); + return a; +} +void* inplace_XAnyClassInfo_enlarge(void* a) +{ + if(a) + convert_XAnyClassInfo_to_64(a, a); + return a; +} + +void* inplace_XDeviceInfo_shrink(void* a) +{ + if(a) { + my_XDeviceInfo_t* src = a; + my_XDeviceInfo_32_t* dst = a; + + for(int i=0; i<src->num_classes; ++i) + convert_XAnyClassInfo_to_32(&((my_XAnyClassInfo_32_t*)src->inputclassinfo)[i], &src->inputclassinfo[i]); + dst->id = to_ulong(src->id); + dst->type = to_ulong(src->type); + dst->name = to_ptrv(src->name); + dst->num_classes = src->num_classes; + dst->use = src->use; + dst->inputclassinfo = to_ptrv(src->inputclassinfo); + } + return a; +} +void* inplace_XDeviceInfo_enlarge(void* a) +{ + if(a) { + my_XDeviceInfo_32_t* src = a; + my_XDeviceInfo_t* dst = a; + + dst->inputclassinfo = from_ptrv(src->inputclassinfo); + dst->use = src->use; + dst->num_classes = src->num_classes; + dst->name = from_ptrv(src->name); + dst->type = from_ulong(src->type); + dst->id = from_ulong(src->id); + for(int i=dst->num_classes-1; i>=0; --i) + convert_XAnyClassInfo_to_64(&dst->inputclassinfo[i], &((my_XAnyClassInfo_32_t*)dst->inputclassinfo)[i]); + } + return a; +} diff --git a/src/libtools/my_x11_conv.h b/src/libtools/my_x11_conv.h index 01b37d5d..d119e9e4 100644 --- a/src/libtools/my_x11_conv.h +++ b/src/libtools/my_x11_conv.h @@ -86,8 +86,10 @@ void* inplace_XRRPropertyInfo_shrink(void* a); void inplace_XIDeviceInfo_shrink(void* a, int n); int inplace_XIDeviceInfo_enlarge(void* a); -void inplace_XDevice_shrink(void* a); -void inplace_XDevice_enlarge(void* a); +void* inplace_XDevice_shrink(void* a); +void* inplace_XDevice_enlarge(void* a); +void* inplace_XDeviceState_shrink(void* a); +void* inplace_XDeviceState_enlarge(void* a); void register_XDevice_events(my_XDevice_t* a); void unregister_XDevice_events(my_XDevice_t* a); @@ -98,4 +100,14 @@ void unregister_XRandR_events(); void convert_XShmSegmentInfo_to_32(void* d, void* s); void convert_XShmSegmentInfo_to_64(void* d, void* s); + +void* inplace_XkbDescRec_shrink(void* a); +void* inplace_XkbDescRec_enlarge(void* a); + +void convert_XAnyClassInfo_to_32(void* d, void* s); +void convert_XAnyClassInfo_to_64(void* d, void* s); +void* inplace_XAnyClassInfo_shrink(void* a); +void* inplace_XAnyClassInfo_enlarge(void* a); +void* inplace_XDeviceInfo_shrink(void* a); +void* inplace_XDeviceInfo_enlarge(void* a); #endif//MY_X11_CONV \ No newline at end of file diff --git a/src/libtools/my_x11_defs.h b/src/libtools/my_x11_defs.h index 97b328eb..adc82b56 100644 --- a/src/libtools/my_x11_defs.h +++ b/src/libtools/my_x11_defs.h @@ -1101,6 +1101,15 @@ typedef struct my_XDevicePropertyNotifyEvent_s XID atom; int state; } my_XDevicePropertyNotifyEvent_t; +typedef struct my_XInputClass_s { + unsigned char class; + unsigned char length; +} my_XInputClass_t; +typedef struct my_XDeviceState_s { + XID device_id; + int num_classes; + my_XInputClass_t* data; +} my_XDeviceState_t; typedef struct my_XFixesSelectionNotifyEvent_s { @@ -1339,4 +1348,76 @@ typedef struct my_XShmSegmentInfo_s { int readOnly; } my_XShmSegmentInfo_t; +typedef struct my_XkbNamesRec_s { + XID keycodes; + XID geometry; + XID symbols; + XID types; + XID compat; + XID vmods[16]; + XID indicators[32]; + XID groups[4]; + void* keys; //XkbKeyNameRec* as array[xkb->max_key_code + 1] + void* key_aliases; //XkbKeyAliasRec* as array[num_key_aliases] + XID* radio_groups; + XID phys_symbols; + unsigned char num_keys; + unsigned char num_key_aliases; + unsigned short num_rg; +} my_XkbNamesRec_t; + +typedef struct my_XkbDescRec_s { + my_XDisplay_t* display; + unsigned short flags; + unsigned short device_spec; + uint8_t min_key_code; + uint8_t max_key_code; + void* ctrls; //XkbControlsPtr + void* server; //XkbServerMapPtr + void* map; //XkbClientMapPtr + void* indicators; //XkbIndicatorPtr + my_XkbNamesRec_t* names; + void* compat; //XkbCompatMapPtr + void* geom; //XkbGeometryPtr +} my_XkbDescRec_t; + +typedef struct my_XmbTextItem_s { + void* chars; //char* + int nchars; + int delta; + void* font_set; //XFontSet +} my_XmbTextItem_t; + +typedef struct my_XwcTextItem_s { + void* chars; //wchar_t* + int nchars; + int delta; + void* font_set; //XFontSet +} my_XwcTextItem_t; + +typedef struct my_XAnyClassinfo_s { + XID c_class; + int length; +} my_XAnyClassInfo_t; + +typedef struct my_XDeviceInfo_s +{ + XID id; + XID type; + char* name; + int num_classes; + int use; + my_XAnyClassInfo_t* inputclassinfo; +} my_XDeviceInfo_t; + +typedef struct my_XTimeCoord_s { + unsigned long time; + short x, y; +} my_XTimeCoord_t; + +typedef struct my_XDeviceTimeCoord_s { + unsigned long time; + int* data; +} my_XDeviceTimeCoord_t; + #endif//MY_X11_DEFS \ No newline at end of file diff --git a/src/libtools/my_x11_defs_32.h b/src/libtools/my_x11_defs_32.h index 8e131848..51c2e923 100644 --- a/src/libtools/my_x11_defs_32.h +++ b/src/libtools/my_x11_defs_32.h @@ -1034,6 +1034,16 @@ typedef struct my_XDevicePropertyNotifyEvent_32_s XID_32 atom; int state; } my_XDevicePropertyNotifyEvent_32_t; +typedef struct my_XInputClass_32_s { + unsigned char class; + unsigned char length; +} my_XInputClass_32_t; +typedef struct my_XDeviceState_32_s { + XID_32 device_id; + int num_classes; + ptr_t data; //my_XInputClass_32_t* +} my_XDeviceState_32_t; + typedef struct my_XFixesSelectionNotifyEvent_32_s { int type; @@ -1271,4 +1281,86 @@ typedef struct my_XShmSegmentInfo_32_s { int readOnly; } my_XShmSegmentInfo_32_t; +typedef struct my_XkbNamesRec_32_s { + XID_32 keycodes; + XID_32 geometry; + XID_32 symbols; + XID_32 types; + XID_32 compat; + XID_32 vmods[16]; + XID_32 indicators[32]; + XID_32 groups[4]; + ptr_t keys; //XkbKeyNameRec* as array[xkb->max_key_code + 1] + ptr_t key_aliases; //XkbKeyAliasRec* as array[num_key_aliases] + ptr_t radio_groups; //XID* + XID_32 phys_symbols; + unsigned char num_keys; + unsigned char num_key_aliases; + unsigned short num_rg; +} my_XkbNamesRec_32_t; + +typedef struct my_XkbDescRec_32_s { + ptr_t display; //my_XDisplay_32_t* + unsigned short flags; + unsigned short device_spec; + uint8_t min_key_code; + uint8_t max_key_code; + ptr_t ctrls; //XkbControlsPtr + ptr_t server; //XkbServerMapPtr + ptr_t map; //XkbClientMapPtr + ptr_t indicators; //XkbIndicatorPtr + ptr_t names; //my_XkbNamesRec_32_t* + ptr_t compat; //XkbCompatMapPtr + ptr_t geom; //XkbGeometryPtr +} my_XkbDescRec_32_t; + +typedef struct my_XmbTextItem_32_s { + ptr_t chars; //char* + int nchars; + int delta; + ptr_t font_set; //XFontSet +} my_XmbTextItem_32_t; + +typedef struct my_XwcTextItem_32_s { + ptr_t chars; //wchar_t* + int nchars; + int delta; + ptr_t font_set; //XFontSet +} my_XwcTextItem_32_t; + +// virtual structure +typedef struct my_XFontSet_32_s { + void* fontset; // the actual fontset + ptr_t** names; // arrays of array of names + int names_size; // size of names + ptr_t** fonts; // array of array of fonts + int fonts_size; // soze of fonts +} my_XFontSet_32_t; + +typedef struct my_XAnyClassinfo_32_s { + XID_32 c_class; + int length; +} my_XAnyClassInfo_32_t; + +typedef struct my_XDeviceInfo_32_s +{ + XID_32 id; + XID_32 type; + ptr_t name; //char* + int num_classes; + int use; + ptr_t inputclassinfo; //my_XAnyClassInfo_32_t* +} my_XDeviceInfo_32_t; + +typedef struct my_XTimeCoord_32_s { + ulong_t time; + short x, y; +} my_XTimeCoord_32_t; + +typedef struct my_XDeviceTimeCoord_32_s { + ulong_t time; + ptr_t data; //int* +} my_XDeviceTimeCoord_32_t; + + #endif//MY_X11_DEFS_32 \ No newline at end of file |