From 524bc3960e6a6e5645ce904e20f72479e24e0a23 Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Mon, 11 Jun 2018 05:10:19 +0600 Subject: improved Emscripten support: fixed configure-checks, generate *.js and detect EMCurses * Emscripten can be used (theoretically) to build a host-only platform-independant version of SciTECO (running under node.js instead of the browser). * I ported netbsd-curses with Emscripten for that purpose. Therefore, adaptions for running in the browser are restricted to EMcurses now. --- src/cmdline.cpp | 6 ++++++ src/interface-curses/interface-curses.cpp | 13 +++++++++++-- src/parser.h | 8 +------- 3 files changed, 18 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/cmdline.cpp b/src/cmdline.cpp index daf1a9b..9262e27 100644 --- a/src/cmdline.cpp +++ b/src/cmdline.cpp @@ -47,6 +47,12 @@ #include "error.h" #include "cmdline.h" +extern "C" { +#if defined(HAVE_MALLOC_TRIM) && !HAVE_DECL_MALLOC_TRIM +int malloc_trim(size_t pad); +#endif +} + namespace SciTECO { static gchar *filename_complete(const gchar *filename, gchar completed = ' ', diff --git a/src/interface-curses/interface-curses.cpp b/src/interface-curses/interface-curses.cpp index 96ce0d4..a06fe30 100644 --- a/src/interface-curses/interface-curses.cpp +++ b/src/interface-curses/interface-curses.cpp @@ -89,6 +89,15 @@ #define A_UNDERLINE 0 #endif +/** + * Whether we're on EMCurses. + * Could be replaced with a configure-time check for + * PDC_emscripten_set_handler(). + */ +#if defined(__PDCURSES__) && defined(EMSCRIPTEN) +#define EMCURSES +#endif + #ifdef NCURSES_VERSION #if defined(G_OS_UNIX) || defined(G_OS_HAIKU) /** @@ -630,7 +639,7 @@ InterfaceCurses::init_interactive(void) cmdline_window = newwin(0, 0, LINES - 1, 0); keypad(cmdline_window, TRUE); -#ifdef EMSCRIPTEN +#ifdef EMCURSES nodelay(cmdline_window, TRUE); #endif @@ -1533,7 +1542,7 @@ InterfaceCurses::event_loop_impl(void) wnoutrefresh(cmdline_window); doupdate(); -#ifdef EMSCRIPTEN +#ifdef EMCURSES PDC_emscripten_set_handler(event_loop_iter, TRUE); /* * We must not block emscripten's main loop, diff --git a/src/parser.h b/src/parser.h index f61d335..9255268 100644 --- a/src/parser.h +++ b/src/parser.h @@ -149,13 +149,7 @@ protected: MicroState state; -#ifdef EMSCRIPTEN - /* FIXME: Shouldn't be required! */ - __attribute__((noinline)) -#else - inline -#endif - void + inline void set(MicroState next) { if (next != state) -- cgit v1.2.3