about summary refs log tree commit diff stats
path: root/src/libtools
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-12-13 15:24:03 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-12-13 15:24:11 +0100
commitfa3db3df11f0d10a4a46f5ec5b0aaeaf34656d72 (patch)
tree74dacd24ef44f155a2b6f0ab517bfe25c2e48dc2 /src/libtools
parent4b4c0143d951b6aa18e2102136b4b72e165459d4 (diff)
downloadbox64-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.c216
-rw-r--r--src/libtools/my_x11_conv.h16
-rw-r--r--src/libtools/my_x11_defs.h81
-rw-r--r--src/libtools/my_x11_defs_32.h92
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