Add a "Config *" argument to term_init(), and use that instead of the global
[u/mdw/putty] / window.c
index 1aa2090..4bfec69 100644 (file)
--- a/window.c
+++ b/window.c
@@ -108,12 +108,23 @@ static LPARAM pend_netevent_lParam = 0;
 static void enact_pending_netevent(void);
 static void flash_window(int mode);
 static void sys_cursor_update(void);
+static int is_shift_pressed(void);
 static int get_fullscreen_rect(RECT * ss);
 
 static time_t last_movement = 0;
 
 static int caret_x = -1, caret_y = -1;
 
+static int kbd_codepage;
+
+static void *ldisc;
+static Backend *back;
+static void *backhandle;
+
+static int session_closed;
+
+extern struct sesslist sesslist;       /* imported from windlg.c */
+
 #define FONT_NORMAL 0
 #define FONT_BOLD 1
 #define FONT_UNDERLINE 2
@@ -168,7 +179,7 @@ static OSVERSIONINFO osVersion;
 static UINT wm_mousewheel = WM_MOUSEWHEEL;
 
 /* Dummy routine, only required in plink. */
-void ldisc_update(int echo, int edit)
+void ldisc_update(void *frontend, int echo, int edit)
 {
 }
 
@@ -395,6 +406,8 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
                        cfg.host[sizeof(cfg.host) - 1] = '\0';
                        got_host = 1;
                    }
+               } else {
+                   cmdline_error("unknown option \"%s\"", p);
                }
            }
        }
@@ -493,7 +506,9 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
 
     hwnd = NULL;
 
-    term = term_init();
+    term = term_init(&cfg, NULL);
+    logctx = log_init(NULL);
+    term_provide_logctx(term, logctx);
 
     cfgtopalette();
 
@@ -600,8 +615,9 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
        char msg[1024], *title;
        char *realhost;
 
-       error = back->init((void *)term,
+       error = back->init((void *)term, &backhandle,
                           cfg.host, cfg.port, &realhost, cfg.tcp_nodelay);
+       back->provide_logctx(backhandle, logctx);
        if (error) {
            sprintf(msg, "Unable to open connection to\n"
                    "%.800s\n" "%s", cfg.host, error);
@@ -616,10 +632,20 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
            title = msg;
        }
        sfree(realhost);
-       set_title(title);
-       set_icon(title);
+       set_title(NULL, title);
+       set_icon(NULL, title);
     }
 
+    /*
+     * Connect the terminal to the backend for resize purposes.
+     */
+    term_provide_resize_fn(term, back->size, backhandle);
+
+    /*
+     * Set up a line discipline.
+     */
+    ldisc = ldisc_create(term, back, backhandle, NULL);
+
     session_closed = FALSE;
 
     /*
@@ -665,10 +691,12 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
        AppendMenu(m, MF_ENABLED, IDM_NEWSESS, "Ne&w Session...");
        AppendMenu(m, MF_ENABLED, IDM_DUPSESS, "&Duplicate Session");
        s = CreateMenu();
-       get_sesslist(TRUE);
-       for (i = 1; i < ((nsessions < 256) ? nsessions : 256); i++)
+       get_sesslist(&sesslist, TRUE);
+       for (i = 1;
+            i < ((sesslist.nsessions < 256) ? sesslist.nsessions : 256);
+            i++)
            AppendMenu(s, MF_ENABLED, IDM_SAVED_MIN + (16 * i),
-                      sessions[i]);
+                      sesslist.sessions[i]);
        AppendMenu(m, MF_POPUP | MF_ENABLED, (UINT) s, "Sa&ved Sessions");
        AppendMenu(m, MF_ENABLED, IDM_RECONF, "Chan&ge Settings...");
        AppendMenu(m, MF_SEPARATOR, 0, 0);
@@ -692,7 +720,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
     /*
      * Open the initial log file if there is one.
      */
-    logfopen();
+    logfopen(logctx);
 
     /*
      * Finally show the window!
@@ -850,7 +878,7 @@ char *do_select(SOCKET skt, int startup)
 /*
  * set or clear the "raw mouse message" mode
  */
-void set_raw_mouse_mode(int activate)
+void set_raw_mouse_mode(void *frontend, int activate)
 {
     activate = activate && !cfg.no_mouse_rep;
     send_raw_mouse = activate;
@@ -860,7 +888,7 @@ void set_raw_mouse_mode(int activate)
 /*
  * Print a message box and close the connection.
  */
-void connection_fatal(char *fmt, ...)
+void connection_fatal(void *frontend, char *fmt, ...)
 {
     va_list ap;
     char stuff[200];
@@ -1179,7 +1207,7 @@ static void init_fonts(int pick_width, int pick_height)
     }
     fontflag[0] = fontflag[1] = fontflag[2] = 1;
 
-    init_ucs_tables();
+    init_ucs();
 }
 
 static void another_font(int fontno)
@@ -1241,7 +1269,7 @@ static void deinit_fonts(void)
     }
 }
 
-void request_resize(int w, int h)
+void request_resize(void *frontend, int w, int h)
 {
     int width, height;
 
@@ -1538,7 +1566,7 @@ static void click(Mouse_Button b, int x, int y, int shift, int ctrl, int alt)
  * Translate a raw mouse button designation (LEFT, MIDDLE, RIGHT)
  * into a cooked one (SELECT, EXTEND, PASTE).
  */
-Mouse_Button translate_button(Mouse_Button button)
+Mouse_Button translate_button(void *frontend, Mouse_Button button)
 {
     if (button == MBT_LEFT)
        return MBT_SELECT;
@@ -1610,7 +1638,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
            time_t now;
            time(&now);
            if (now - last_movement > cfg.ping_interval) {
-               back->special(TS_PING);
+               back->special(backhandle, TS_PING);
                last_movement = now;
            }
        }
@@ -1674,9 +1702,9 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
                    sprintf(c, "putty &%p", filemap);
                    cl = c;
                } else if (wParam == IDM_SAVEDSESS) {
-                   if ((lParam - IDM_SAVED_MIN) / 16 < nsessions) {
+                   if ((lParam - IDM_SAVED_MIN) / 16 < sesslist.nsessions) {
                        char *session =
-                           sessions[(lParam - IDM_SAVED_MIN) / 16];
+                           sesslist.sessions[(lParam - IDM_SAVED_MIN) / 16];
                        cl = smalloc(16 + strlen(session));
                                       /* 8, but play safe */
                        if (!cl)
@@ -1734,8 +1762,8 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
 
                if (strcmp(prev_cfg.logfilename, cfg.logfilename) ||
                    prev_cfg.logtype != cfg.logtype) {
-                   logfclose();       /* reset logging */
-                   logfopen();
+                   logfclose(logctx); /* reset logging */
+                   logfopen(logctx);
                }
 
                sfree(logpal);
@@ -1743,7 +1771,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
                 * Flush the line discipline's edit buffer in the
                 * case where local editing has just been disabled.
                 */
-               ldisc_send(NULL, 0, 0);
+               ldisc_send(ldisc, NULL, 0, 0);
                if (pal)
                    DeleteObject(pal);
                logpal = NULL;
@@ -1825,7 +1853,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
                    init_lvl = 2;
                }
 
-               set_title(cfg.wintitle);
+               set_title(NULL, cfg.wintitle);
                if (IsIconic(hwnd)) {
                    SetWindowText(hwnd,
                                  cfg.win_name_always ? window_name :
@@ -1857,58 +1885,58 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
            break;
          case IDM_RESET:
            term_pwron(term);
-           ldisc_send(NULL, 0, 0);
+           ldisc_send(ldisc, NULL, 0, 0);
            break;
          case IDM_TEL_AYT:
-           back->special(TS_AYT);
+           back->special(backhandle, TS_AYT);
            net_pending_errors();
            break;
          case IDM_TEL_BRK:
-           back->special(TS_BRK);
+           back->special(backhandle, TS_BRK);
            net_pending_errors();
            break;
          case IDM_TEL_SYNCH:
-           back->special(TS_SYNCH);
+           back->special(backhandle, TS_SYNCH);
            net_pending_errors();
            break;
          case IDM_TEL_EC:
-           back->special(TS_EC);
+           back->special(backhandle, TS_EC);
            net_pending_errors();
            break;
          case IDM_TEL_EL:
-           back->special(TS_EL);
+           back->special(backhandle, TS_EL);
            net_pending_errors();
            break;
          case IDM_TEL_GA:
-           back->special(TS_GA);
+           back->special(backhandle, TS_GA);
            net_pending_errors();
            break;
          case IDM_TEL_NOP:
-           back->special(TS_NOP);
+           back->special(backhandle, TS_NOP);
            net_pending_errors();
            break;
          case IDM_TEL_ABORT:
-           back->special(TS_ABORT);
+           back->special(backhandle, TS_ABORT);
            net_pending_errors();
            break;
          case IDM_TEL_AO:
-           back->special(TS_AO);
+           back->special(backhandle, TS_AO);
            net_pending_errors();
            break;
          case IDM_TEL_IP:
-           back->special(TS_IP);
+           back->special(backhandle, TS_IP);
            net_pending_errors();
            break;
          case IDM_TEL_SUSP:
-           back->special(TS_SUSP);
+           back->special(backhandle, TS_SUSP);
            net_pending_errors();
            break;
          case IDM_TEL_EOR:
-           back->special(TS_EOR);
+           back->special(backhandle, TS_EOR);
            net_pending_errors();
            break;
          case IDM_TEL_EOF:
-           back->special(TS_EOF);
+           back->special(backhandle, TS_EOF);
            net_pending_errors();
            break;
          case IDM_ABOUT:
@@ -2064,7 +2092,8 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
                       (p.rcPaint.left-offset_width)/font_width,
                       (p.rcPaint.top-offset_height)/font_height,
                       (p.rcPaint.right-offset_width-1)/font_width,
-                      (p.rcPaint.bottom-offset_height-1)/font_height);
+                      (p.rcPaint.bottom-offset_height-1)/font_height,
+                      is_alt_pressed());
 
            if (p.fErase ||
                p.rcPaint.left  < offset_width  ||
@@ -2171,7 +2200,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
         * 1) Keep the sizetip uptodate
         * 2) Make sure the window size is _stepped_ in units of the font size.
         */
-       if (cfg.resize_action != RESIZE_FONT && !alt_pressed) {
+       if (cfg.resize_action != RESIZE_FONT && !is_alt_pressed()) {
            int width, height, w, h, ew, eh;
            LPRECT r = (LPRECT) lParam;
 
@@ -2332,7 +2361,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
             * down the connection during an NT opaque drag.)
             */
            if (resizing) {
-               if (cfg.resize_action != RESIZE_FONT && !alt_pressed) {
+               if (cfg.resize_action != RESIZE_FONT && !is_alt_pressed()) {
                    need_backend_resize = TRUE;
                    w = (width-cfg.window_border*2) / font_width;
                    if (w < 1) w = 1;
@@ -2375,7 +2404,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
        break;
       case WM_PALETTECHANGED:
        if ((HWND) wParam != hwnd && pal != NULL) {
-           HDC hdc = get_ctx();
+           HDC hdc = get_ctx(NULL);
            if (hdc) {
                if (RealizePalette(hdc) > 0)
                    UpdateColors(hdc);
@@ -2385,7 +2414,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
        break;
       case WM_QUERYNEWPALETTE:
        if (pal != NULL) {
-           HDC hdc = get_ctx();
+           HDC hdc = get_ctx(NULL);
            if (hdc) {
                if (RealizePalette(hdc) > 0)
                    UpdateColors(hdc);
@@ -2445,7 +2474,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
                     * we're sent.
                     */
                    term_seen_key_event(term);
-                   ldisc_send(buf, len, 1);
+                   ldisc_send(ldisc, buf, len, 1);
                    show_mouseptr(0);
                }
            }
@@ -2493,7 +2522,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
                 */
                term_seen_key_event(term);
                for (i = 0; i < n; i += 2) {
-                   luni_send((unsigned short *)(buff+i), 1, 1);
+                   luni_send(ldisc, (unsigned short *)(buff+i), 1, 1);
                }
                free(buff);
            }
@@ -2508,11 +2537,11 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
            buf[1] = wParam;
            buf[0] = wParam >> 8;
            term_seen_key_event(term);
-           lpage_send(kbd_codepage, buf, 2, 1);
+           lpage_send(ldisc, kbd_codepage, buf, 2, 1);
        } else {
            char c = (unsigned char) wParam;
            term_seen_key_event(term);
-           lpage_send(kbd_codepage, &c, 1, 1);
+           lpage_send(ldisc, kbd_codepage, &c, 1, 1);
        }
        return (0);
       case WM_CHAR:
@@ -2526,7 +2555,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
        {
            char c = (unsigned char)wParam;
            term_seen_key_event(term);
-           lpage_send(CP_ACP, &c, 1, 1);
+           lpage_send(ldisc, CP_ACP, &c, 1, 1);
        }
        return 0;
       case WM_SETCURSOR:
@@ -2536,7 +2565,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
        }
       default:
        if (message == wm_mousewheel || message == WM_MOUSEWHEEL) {
-           int shift_pressed=0, control_pressed=0, alt_pressed=0;
+           int shift_pressed=0, control_pressed=0;
 
            if (message == WM_MOUSEWHEEL) {
                wheel_accumulator += (short)HIWORD(wParam);
@@ -2596,7 +2625,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
  * helper software tracks the system caret, so we should arrange to
  * have one.)
  */
-void sys_cursor(int x, int y)
+void sys_cursor(void *frontend, int x, int y)
 {
     int cx, cy;
 
@@ -2970,7 +2999,7 @@ void do_cursor(Context ctx, int x, int y, char *text, int len,
 
 /* This function gets the actual width of a character in the normal font.
  */
-int CharWidth(Context ctx, int uc) {
+int char_width(Context ctx, int uc) {
     HDC hdc = ctx;
     int ibuf = 0;
 
@@ -3170,8 +3199,6 @@ static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam,
        }
     }
 
-    alt_pressed = (left_alt && key_down);
-
     scan = (HIWORD(lParam) & (KF_UP | KF_EXTENDED | 0xFF));
     shift_state = ((keystate[VK_SHIFT] & 0x80) != 0)
        + ((keystate[VK_CONTROL] & 0x80) != 0) * 2;
@@ -3775,7 +3802,7 @@ static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam,
                    }
                    keybuf = nc;
                    term_seen_key_event(term);
-                   luni_send(&keybuf, 1, 1);
+                   luni_send(ldisc, &keybuf, 1, 1);
                    continue;
                }
 
@@ -3786,7 +3813,7 @@ static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam,
                        if (in_utf(term) || dbcs_screenfont) {
                            keybuf = alt_sum;
                            term_seen_key_event(term);
-                           luni_send(&keybuf, 1, 1);
+                           luni_send(ldisc, &keybuf, 1, 1);
                        } else {
                            ch = (char) alt_sum;
                            /*
@@ -3799,25 +3826,26 @@ static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam,
                             * everything we're sent.
                             */
                            term_seen_key_event(term);
-                           ldisc_send(&ch, 1, 1);
+                           ldisc_send(ldisc, &ch, 1, 1);
                        }
                        alt_sum = 0;
                    } else
                        term_seen_key_event(term);
-                       lpage_send(kbd_codepage, &ch, 1, 1);
+                       lpage_send(ldisc, kbd_codepage, &ch, 1, 1);
                } else {
                    if(capsOn && ch < 0x80) {
                        WCHAR cbuf[2];
                        cbuf[0] = 27;
                        cbuf[1] = xlat_uskbd2cyrllic(ch);
                        term_seen_key_event(term);
-                       luni_send(cbuf+!left_alt, 1+!!left_alt, 1);
+                       luni_send(ldisc, cbuf+!left_alt, 1+!!left_alt, 1);
                    } else {
                        char cbuf[2];
                        cbuf[0] = '\033';
                        cbuf[1] = ch;
                        term_seen_key_event(term);
-                       lpage_send(kbd_codepage, cbuf+!left_alt, 1+!!left_alt, 1);
+                       lpage_send(ldisc, kbd_codepage,
+                                  cbuf+!left_alt, 1+!!left_alt, 1);
                    }
                }
                show_mouseptr(0);
@@ -3849,7 +3877,7 @@ static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam,
     return -1;
 }
 
-void request_paste(void)
+void request_paste(void *frontend)
 {
     /*
      * In Windows, pasting is synchronous: we can read the
@@ -3859,7 +3887,7 @@ void request_paste(void)
     term_do_paste(term);
 }
 
-void set_title(char *title)
+void set_title(void *frontend, char *title)
 {
     sfree(window_name);
     window_name = smalloc(1 + strlen(title));
@@ -3868,7 +3896,7 @@ void set_title(char *title)
        SetWindowText(hwnd, title);
 }
 
-void set_icon(char *title)
+void set_icon(void *frontend, char *title)
 {
     sfree(icon_name);
     icon_name = smalloc(1 + strlen(title));
@@ -3877,7 +3905,7 @@ void set_icon(char *title)
        SetWindowText(hwnd, title);
 }
 
-void set_sbar(int total, int start, int page)
+void set_sbar(void *frontend, int total, int start, int page)
 {
     SCROLLINFO si;
 
@@ -3894,7 +3922,7 @@ void set_sbar(int total, int start, int page)
        SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
 }
 
-Context get_ctx(void)
+Context get_ctx(void *frontend)
 {
     HDC hdc;
     if (hwnd) {
@@ -3925,7 +3953,7 @@ static void real_palette_set(int n, int r, int g, int b)
        colours[n] = RGB(r, g, b);
 }
 
-void palette_set(int n, int r, int g, int b)
+void palette_set(void *frontend, int n, int r, int g, int b)
 {
     static const int first[21] = {
        0, 2, 4, 6, 8, 10, 12, 14,
@@ -3936,14 +3964,14 @@ void palette_set(int n, int r, int g, int b)
     if (first[n] >= 18)
        real_palette_set(first[n] + 1, r, g, b);
     if (pal) {
-       HDC hdc = get_ctx();
+       HDC hdc = get_ctx(frontend);
        UnrealizeObject(pal);
        RealizePalette(hdc);
        free_ctx(hdc);
     }
 }
 
-void palette_reset(void)
+void palette_reset(void *frontend)
 {
     int i;
 
@@ -3964,13 +3992,13 @@ void palette_reset(void)
     if (pal) {
        HDC hdc;
        SetPaletteEntries(pal, 0, NCOLOURS, logpal->palPalEntry);
-       hdc = get_ctx();
+       hdc = get_ctx(frontend);
        RealizePalette(hdc);
        free_ctx(hdc);
     }
 }
 
-void write_aclip(char *data, int len, int must_deselect)
+void write_aclip(void *frontend, char *data, int len, int must_deselect)
 {
     HGLOBAL clipdata;
     void *lock;
@@ -4002,7 +4030,7 @@ void write_aclip(char *data, int len, int must_deselect)
 /*
  * Note: unlike write_aclip() this will not append a nul.
  */
-void write_clip(wchar_t * data, int len, int must_deselect)
+void write_clip(void *frontend, wchar_t * data, int len, int must_deselect)
 {
     HGLOBAL clipdata, clipdata2, clipdata3;
     int len2;
@@ -4165,7 +4193,7 @@ void write_clip(wchar_t * data, int len, int must_deselect)
        SendMessage(hwnd, WM_IGNORE_CLIP, FALSE, 0);
 }
 
-void get_clip(wchar_t ** p, int *len)
+void get_clip(void *frontend, wchar_t ** p, int *len)
 {
     static HGLOBAL clipdata = NULL;
     static wchar_t *converted = 0;
@@ -4212,7 +4240,7 @@ void get_clip(wchar_t ** p, int *len)
  * Move `lines' lines from position `from' to position `to' in the
  * window.
  */
-void optimised_move(int to, int from, int lines)
+void optimised_move(void *frontend, int to, int from, int lines)
 {
     RECT r;
     int min, max;
@@ -4298,7 +4326,7 @@ static void flash_window(int mode)
 /*
  * Beep.
  */
-void beep(int mode)
+void beep(void *frontend, int mode)
 {
     if (mode == BELL_DEFAULT) {
        /*
@@ -4339,7 +4367,7 @@ void beep(int mode)
  * Minimise or restore the window in response to a server-side
  * request.
  */
-void set_iconic(int iconic)
+void set_iconic(void *frontend, int iconic)
 {
     if (IsIconic(hwnd)) {
        if (!iconic)
@@ -4353,7 +4381,7 @@ void set_iconic(int iconic)
 /*
  * Move the window in response to a server-side request.
  */
-void move_window(int x, int y)
+void move_window(void *frontend, int x, int y)
 {
     if (cfg.resize_action == RESIZE_DISABLED || 
         cfg.resize_action == RESIZE_FONT ||
@@ -4367,7 +4395,7 @@ void move_window(int x, int y)
  * Move the window to the top or bottom of the z-order in response
  * to a server-side request.
  */
-void set_zorder(int top)
+void set_zorder(void *frontend, int top)
 {
     if (cfg.alwaysontop)
        return;                        /* ignore */
@@ -4378,7 +4406,7 @@ void set_zorder(int top)
 /*
  * Refresh the window in response to a server-side request.
  */
-void refresh_window(void)
+void refresh_window(void *frontend)
 {
     InvalidateRect(hwnd, NULL, TRUE);
 }
@@ -4387,7 +4415,7 @@ void refresh_window(void)
  * Maximise or restore the window in response to a server-side
  * request.
  */
-void set_zoomed(int zoomed)
+void set_zoomed(void *frontend, int zoomed)
 {
     if (IsZoomed(hwnd)) {
         if (!zoomed)
@@ -4401,7 +4429,7 @@ void set_zoomed(int zoomed)
 /*
  * Report whether the window is iconic, for terminal reports.
  */
-int is_iconic(void)
+int is_iconic(void *frontend)
 {
     return IsIconic(hwnd);
 }
@@ -4409,7 +4437,7 @@ int is_iconic(void)
 /*
  * Report the window's position, for terminal reports.
  */
-void get_window_pos(int *x, int *y)
+void get_window_pos(void *frontend, int *x, int *y)
 {
     RECT r;
     GetWindowRect(hwnd, &r);
@@ -4420,7 +4448,7 @@ void get_window_pos(int *x, int *y)
 /*
  * Report the window's pixel size, for terminal reports.
  */
-void get_window_pixels(int *x, int *y)
+void get_window_pixels(void *frontend, int *x, int *y)
 {
     RECT r;
     GetWindowRect(hwnd, &r);
@@ -4431,7 +4459,7 @@ void get_window_pixels(int *x, int *y)
 /*
  * Return the window or icon title.
  */
-char *get_window_title(int icon)
+char *get_window_title(void *frontend, int icon)
 {
     return icon ? icon_name : window_name;
 }
@@ -4554,7 +4582,7 @@ void flip_full_screen()
     }
 }
 
-void frontend_keypress(void)
+void frontend_keypress(void *handle)
 {
     /*
      * Keypress termination in non-Close-On-Exit mode is not