about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-06-03 15:21:29 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-06-03 15:21:33 +0200
commit506f78eb32b94a6c553440317303c988cbdc0621 (patch)
tree74698fe484860550470549c0a67cb4d5d45867cb /src
parent1336ddfad70607906180391a74cf9e61ece43ced (diff)
downloadbox64-506f78eb32b94a6c553440317303c988cbdc0621.tar.gz
box64-506f78eb32b94a6c553440317303c988cbdc0621.zip
Some work around libncurses and friends
Diffstat (limited to 'src')
-rwxr-xr-xsrc/library_list.h2
-rw-r--r--src/wrapped/generated/functions_list.txt1
-rw-r--r--src/wrapped/generated/wrappedlibncurses6types.h2
-rw-r--r--src/wrapped/generated/wrappedlibncursestypes.h4
-rw-r--r--src/wrapped/generated/wrappedlibncurseswtypes.h2
-rw-r--r--src/wrapped/generated/wrapper.c2
-rw-r--r--src/wrapped/generated/wrapper.h1
-rw-r--r--src/wrapped/wrappedlibform.c17
-rw-r--r--src/wrapped/wrappedlibform_private.h80
-rwxr-xr-xsrc/wrapped/wrappedlibncurses.c19
-rwxr-xr-xsrc/wrapped/wrappedlibncurses_private.h2
-rwxr-xr-xsrc/wrapped/wrappedlibpanel.c24
-rwxr-xr-xsrc/wrapped/wrappedlibpanel_private.h19
13 files changed, 173 insertions, 2 deletions
diff --git a/src/library_list.h b/src/library_list.h
index 4bc89d78..7d856f8e 100755
--- a/src/library_list.h
+++ b/src/library_list.h
@@ -132,9 +132,11 @@ GO("libSM.so.6", libsm)
 GO("libICE.so.6", libice)
 //GO("libusb-1.0.so.0", libusb1)
 GO("libncursesw.so.5", libncursesw)
+GO("libform.so.5", libform)
 GO("libformw.so.5", libformw)
 GO("libncurses.so.5", libncurses)
 GO("libtinfo.so.5", libtinfo)
+GO("libpanel.so.5", libpanel)
 GO("libncurses.so.6", libncurses6)
 GO("libtinfo.so.6", libtinfo6)
 //GO("libtcmalloc_minimal.so.4", tcmallocminimal)
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt
index d91c8c1f..f5216c4f 100644
--- a/src/wrapped/generated/functions_list.txt
+++ b/src/wrapped/generated/functions_list.txt
@@ -705,6 +705,7 @@
 #() vFpppip
 #() vFppppi
 #() vFppppp
+#() iFEiipV
 #() iFEippp
 #() iFEpiii
 #() iFEpipi
diff --git a/src/wrapped/generated/wrappedlibncurses6types.h b/src/wrapped/generated/wrappedlibncurses6types.h
index 9e6f065c..b95fa86e 100644
--- a/src/wrapped/generated/wrappedlibncurses6types.h
+++ b/src/wrapped/generated/wrappedlibncurses6types.h
@@ -12,10 +12,12 @@
 #endif
 
 typedef int64_t (*iFpV_t)(void*, void*);
+typedef int64_t (*iFppp_t)(void*, void*, void*);
 typedef int64_t (*iFpiipV_t)(void*, int64_t, int64_t, void*, void*);
 
 #define SUPER() ADDED_FUNCTIONS() \
 	GO(printw, iFpV_t) \
+	GO(vwprintw, iFppp_t) \
 	GO(mvwprintw, iFpiipV_t)
 
 #endif // __wrappedlibncurses6TYPES_H_
diff --git a/src/wrapped/generated/wrappedlibncursestypes.h b/src/wrapped/generated/wrappedlibncursestypes.h
index 822e884e..6eb59de9 100644
--- a/src/wrapped/generated/wrappedlibncursestypes.h
+++ b/src/wrapped/generated/wrappedlibncursestypes.h
@@ -12,10 +12,14 @@
 #endif
 
 typedef int64_t (*iFpV_t)(void*, void*);
+typedef int64_t (*iFppp_t)(void*, void*, void*);
+typedef int64_t (*iFiipV_t)(int64_t, int64_t, void*, void*);
 typedef int64_t (*iFpiipV_t)(void*, int64_t, int64_t, void*, void*);
 
 #define SUPER() ADDED_FUNCTIONS() \
 	GO(printw, iFpV_t) \
+	GO(vwprintw, iFppp_t) \
+	GO(mvprintw, iFiipV_t) \
 	GO(mvwprintw, iFpiipV_t)
 
 #endif // __wrappedlibncursesTYPES_H_
diff --git a/src/wrapped/generated/wrappedlibncurseswtypes.h b/src/wrapped/generated/wrappedlibncurseswtypes.h
index a32a1831..3e84b20f 100644
--- a/src/wrapped/generated/wrappedlibncurseswtypes.h
+++ b/src/wrapped/generated/wrappedlibncurseswtypes.h
@@ -12,10 +12,12 @@
 #endif
 
 typedef int64_t (*iFpV_t)(void*, void*);
+typedef int64_t (*iFppp_t)(void*, void*, void*);
 typedef int64_t (*iFpiipV_t)(void*, int64_t, int64_t, void*, void*);
 
 #define SUPER() ADDED_FUNCTIONS() \
 	GO(printw, iFpV_t) \
+	GO(vwprintw, iFppp_t) \
 	GO(mvwprintw, iFpiipV_t)
 
 #endif // __wrappedlibncurseswTYPES_H_
diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c
index 90acead3..e047339e 100644
--- a/src/wrapped/generated/wrapper.c
+++ b/src/wrapped/generated/wrapper.c
@@ -739,6 +739,7 @@ typedef void (*vFpppii_t)(void*, void*, void*, int64_t, int64_t);
 typedef void (*vFpppip_t)(void*, void*, void*, int64_t, void*);
 typedef void (*vFppppi_t)(void*, void*, void*, void*, int64_t);
 typedef void (*vFppppp_t)(void*, void*, void*, void*, void*);
+typedef int64_t (*iFEiipV_t)(x64emu_t*, int64_t, int64_t, void*, void*);
 typedef int64_t (*iFEippp_t)(x64emu_t*, int64_t, void*, void*, void*);
 typedef int64_t (*iFEpiii_t)(x64emu_t*, void*, int64_t, int64_t, int64_t);
 typedef int64_t (*iFEpipi_t)(x64emu_t*, void*, int64_t, void*, int64_t);
@@ -2031,6 +2032,7 @@ void vFpppii(x64emu_t *emu, uintptr_t fcn) { vFpppii_t fn = (vFpppii_t)fcn; fn((
 void vFpppip(x64emu_t *emu, uintptr_t fcn) { vFpppip_t fn = (vFpppip_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int64_t)R_RCX, (void*)R_R8); }
 void vFppppi(x64emu_t *emu, uintptr_t fcn) { vFppppi_t fn = (vFppppi_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int64_t)R_R8); }
 void vFppppp(x64emu_t *emu, uintptr_t fcn) { vFppppp_t fn = (vFppppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); }
+void iFEiipV(x64emu_t *emu, uintptr_t fcn) { iFEiipV_t fn = (iFEiipV_t)fcn; R_RAX=(int64_t)fn(emu, (int64_t)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); }
 void iFEippp(x64emu_t *emu, uintptr_t fcn) { iFEippp_t fn = (iFEippp_t)fcn; R_RAX=(int64_t)fn(emu, (int64_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); }
 void iFEpiii(x64emu_t *emu, uintptr_t fcn) { iFEpiii_t fn = (iFEpiii_t)fcn; R_RAX=(int64_t)fn(emu, (void*)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX); }
 void iFEpipi(x64emu_t *emu, uintptr_t fcn) { iFEpipi_t fn = (iFEpipi_t)fcn; R_RAX=(int64_t)fn(emu, (void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (int64_t)R_RCX); }
diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h
index 89294b87..6f5c2078 100644
--- a/src/wrapped/generated/wrapper.h
+++ b/src/wrapped/generated/wrapper.h
@@ -734,6 +734,7 @@ void vFpppii(x64emu_t *emu, uintptr_t fnc);
 void vFpppip(x64emu_t *emu, uintptr_t fnc);
 void vFppppi(x64emu_t *emu, uintptr_t fnc);
 void vFppppp(x64emu_t *emu, uintptr_t fnc);
+void iFEiipV(x64emu_t *emu, uintptr_t fnc);
 void iFEippp(x64emu_t *emu, uintptr_t fnc);
 void iFEpiii(x64emu_t *emu, uintptr_t fnc);
 void iFEpipi(x64emu_t *emu, uintptr_t fnc);
diff --git a/src/wrapped/wrappedlibform.c b/src/wrapped/wrappedlibform.c
new file mode 100644
index 00000000..8b888e88
--- /dev/null
+++ b/src/wrapped/wrappedlibform.c
@@ -0,0 +1,17 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#define _GNU_SOURCE         /* See feature_test_macros(7) */
+#include <dlfcn.h>
+
+#include "wrappedlibs.h"
+
+#include "wrapper.h"
+#include "bridge.h"
+#include "librarian/library_private.h"
+#include "x64emu.h"
+
+const char* libformName = "libform.so.5";
+#define LIBNAME libform
+
+#include "wrappedlib_init.h"
diff --git a/src/wrapped/wrappedlibform_private.h b/src/wrapped/wrappedlibform_private.h
new file mode 100644
index 00000000..d204dffc
--- /dev/null
+++ b/src/wrapped/wrappedlibform_private.h
@@ -0,0 +1,80 @@
+#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA))
+#error Meh....
+#endif
+
+//GOM(new_fieldtype, pFPP)
+GO(link_fieldtype, pFpp)
+GO(free_fieldtype, iFp)
+//GOM(set_fieldtype_arg, iFpPPP)
+//GOM(set_fieldtype_choice, iFpPP)
+GO(new_field, pFiiiiii)
+GO(dup_field, pFpii)
+GO(link_field, pFpii)
+GO(free_field, iFp)
+GO(field_info, iFppppppp)
+GO(dynamic_field_info, iFpppp)
+GO(set_max_field, iFpi)
+GO(move_field, iFpii)
+//GO(set_field_type, iFpp,...)
+GO(set_new_page, iFpi)
+GO(set_field_just, iFpi)
+GO(field_just, iFp)
+GO(set_field_fore, iFpL)
+GO(set_field_back, iFpL)
+GO(set_field_pad, iFpi)
+GO(field_pad, iFp)
+GO(set_field_buffer, iFpip)
+GO(set_field_status, iFpi)
+GO(set_field_userptr, iFpp)
+GO(set_field_opts, iFpi)
+GO(field_opts_on, iFpi)
+GO(field_opts_off, iFpi)
+GO(field_fore, LFp)
+GO(field_back, LFp)
+GO(new_page, iFp)
+GO(field_status, iFp)
+GO(field_arg, pFp)
+GO(field_userptr, pFp)
+GO(field_type, pFp)
+GO(field_buffer, pFpi)
+GO(field_opts, iFp)
+GO(new_form, pFp)
+GO(form_fields, pFp)
+GO(current_field, pFp)
+GO(form_win, pFp)
+GO(form_sub, pFp)
+//GOM(form_init, PFp)
+//GOM(form_term, PFp)
+//GOM(field_init, PFp)
+//GOM(field_term, PFp)
+GO(free_form, iFp)
+GO(set_form_fields, iFpp)
+GO(field_count, iFp)
+GO(set_form_win, iFpp)
+GO(set_form_sub, iFpp)
+GO(set_current_field, iFpp)
+GO(unfocus_current_field, iFp)
+GO(field_index, iFp)
+GO(set_form_page, iFpi)
+GO(form_page, iFp)
+GO(scale_form, iFppp)
+//GOM(set_form_init, iFpP)
+//GOM(set_form_term, iFpP)
+//GOM(set_field_init, iFpP)
+//GOM(set_field_term, iFpP)
+GO(post_form, iFp)
+GO(unpost_form, iFp)
+GO(pos_form_cursor, iFp)
+GO(form_driver, iFpi)
+GO(form_driver_w, iFpiu)
+GO(set_form_userptr, iFpp)
+GO(set_form_opts, iFpi)
+GO(form_opts_on, iFpi)
+GO(form_opts_off, iFpi)
+GO(form_request_by_name, iFp)
+GO(form_request_name, pFi)
+GO(form_userptr, pFp)
+GO(form_opts, iFp)
+GO(data_ahead, iFp)
+GO(data_behind, iFp)
+GO(new_form_sp, pFpp)
diff --git a/src/wrapped/wrappedlibncurses.c b/src/wrapped/wrappedlibncurses.c
index 204e1145..c7a876b1 100755
--- a/src/wrapped/wrappedlibncurses.c
+++ b/src/wrapped/wrappedlibncurses.c
@@ -27,11 +27,13 @@ static library_t* my_lib = NULL;
 
 typedef int         (*iFppV_t)(void*, void*, va_list);
 typedef int         (*iFpiip_t)(void*, int32_t, int32_t, void*);
+typedef int         (*iFiipV_t)(int, int, void*, ...);
 
 #define SUPER() \
     GO(mvwprintw, iFpiip_t) \
     GO(vwprintw, iFppV_t)   \
-    GO(stdscr, void*)
+    GO(stdscr, void*)       \
+    GO(mvprintw, iFiipV_t)
 
 typedef struct libncurses_my_s {
     // functions
@@ -87,6 +89,21 @@ EXPORT int my_vwprintw(x64emu_t* emu, void* p, void* fmt, x64_va_list_t b)
     return my->vwprintw(p, fmt, VARARGS);
 }
 
+EXPORT int my_mvprintw(x64emu_t* emu, int x, int y, void* fmt, void* b)
+{
+    libncurses_my_t *my = (libncurses_my_t*)my_lib->priv.w.p2;
+
+    char* buf = NULL;
+    myStackAlign(emu, (const char*)fmt, b, emu->scratch, R_EAX, 3);
+    PREPARE_VALIST;
+    int ret = vasprintf(&buf, (const char*)fmt, VARARGS);
+    (void)ret;
+    // pre-bake the fmt/vaarg, because there is no "va_list" version of this function
+    ret = my->mvprintw(x, y, buf);
+    free(buf);
+    return ret;
+}
+
 
 #define CUSTOM_INIT \
     lib->priv.w.p2 = getNCursesMy(lib); \
diff --git a/src/wrapped/wrappedlibncurses_private.h b/src/wrapped/wrappedlibncurses_private.h
index b204cfc2..82165dd0 100755
--- a/src/wrapped/wrappedlibncurses_private.h
+++ b/src/wrapped/wrappedlibncurses_private.h
@@ -91,7 +91,7 @@ GO(mvinsch, iFiiL)
 GO(mvinsnstr, iFiipi)
 GO(mvinsstr, iFiip)
 GO(mvinstr, iFiip)
-//GO(mvprintw, i(i,i,p,...)
+GOM(mvprintw, iFEiipV)
 //GO(mvscanw, i(i,i,p,...)
 GO(mvvline, iFiiLi)
 GO(mvwaddch, iFpiiL)
diff --git a/src/wrapped/wrappedlibpanel.c b/src/wrapped/wrappedlibpanel.c
new file mode 100755
index 00000000..9d706b59
--- /dev/null
+++ b/src/wrapped/wrappedlibpanel.c
@@ -0,0 +1,24 @@
+#define _GNU_SOURCE         /* See feature_test_macros(7) */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <dlfcn.h>
+
+#include "wrappedlibs.h"
+
+#include "debug.h"
+#include "wrapper.h"
+#include "bridge.h"
+#include "librarian/library_private.h"
+#include "x64emu.h"
+#include "emu/x64emu_private.h"
+#include "callback.h"
+#include "librarian.h"
+#include "box64context.h"
+#include "emu/x64emu_private.h"
+#include "myalign.h"
+
+const char* libpanelName = "libpanel.so.5";
+#define LIBNAME libpanel
+
+#include "wrappedlib_init.h"
diff --git a/src/wrapped/wrappedlibpanel_private.h b/src/wrapped/wrappedlibpanel_private.h
new file mode 100755
index 00000000..31a74311
--- /dev/null
+++ b/src/wrapped/wrappedlibpanel_private.h
@@ -0,0 +1,19 @@
+#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA))
+#error Meh....
+#endif
+
+GO(bottom_panel, iFp)
+GO(del_panel, iFp)
+GO(hide_panel, iFp)
+GO(move_panel, iFpii)
+GO(new_panel, pFp)
+GO(panel_above, pFp)
+GO(panel_below, pFp)
+GO(panel_hidden, iFp)
+GO(panel_userptr, pFp)
+GO(panel_window, pFp)
+GO(replace_panel, iFpp)
+GO(set_panel_userptr, iFpp)
+GO(show_panel, iFp)
+GO(top_panel, iFp)
+GO(update_panels, vFv)
\ No newline at end of file