diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-06-03 15:21:29 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-06-03 15:21:33 +0200 |
| commit | 506f78eb32b94a6c553440317303c988cbdc0621 (patch) | |
| tree | 74698fe484860550470549c0a67cb4d5d45867cb /src | |
| parent | 1336ddfad70607906180391a74cf9e61ece43ced (diff) | |
| download | box64-506f78eb32b94a6c553440317303c988cbdc0621.tar.gz box64-506f78eb32b94a6c553440317303c988cbdc0621.zip | |
Some work around libncurses and friends
Diffstat (limited to 'src')
| -rwxr-xr-x | src/library_list.h | 2 | ||||
| -rw-r--r-- | src/wrapped/generated/functions_list.txt | 1 | ||||
| -rw-r--r-- | src/wrapped/generated/wrappedlibncurses6types.h | 2 | ||||
| -rw-r--r-- | src/wrapped/generated/wrappedlibncursestypes.h | 4 | ||||
| -rw-r--r-- | src/wrapped/generated/wrappedlibncurseswtypes.h | 2 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.c | 2 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.h | 1 | ||||
| -rw-r--r-- | src/wrapped/wrappedlibform.c | 17 | ||||
| -rw-r--r-- | src/wrapped/wrappedlibform_private.h | 80 | ||||
| -rwxr-xr-x | src/wrapped/wrappedlibncurses.c | 19 | ||||
| -rwxr-xr-x | src/wrapped/wrappedlibncurses_private.h | 2 | ||||
| -rwxr-xr-x | src/wrapped/wrappedlibpanel.c | 24 | ||||
| -rwxr-xr-x | src/wrapped/wrappedlibpanel_private.h | 19 |
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 |