Fix for `hostname-whitespace'; thanks to Justin Bradford.
[u/mdw/putty] / window.c
index 42c42b5..ddd7aa9 100644 (file)
--- a/window.c
+++ b/window.c
@@ -430,6 +430,21 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
         * Trim a colon suffix off the hostname if it's there.
         */
        cfg.host[strcspn(cfg.host, ":")] = '\0';
+
+       /*
+        * Remove any remaining whitespace from the hostname.
+        */
+       {
+           int p1 = 0, p2 = 0;
+           while (cfg.host[p2] != '\0') {
+               if (cfg.host[p2] != ' ' && cfg.host[p2] != '\t') {
+                   cfg.host[p1] = cfg.host[p2];
+                   p1++;
+               }
+               p2++;
+           }
+           cfg.host[p1] = '\0';
+       }
     }
 
     /*
@@ -2061,6 +2076,17 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
                                    colours[(ATTR_DEFBG>>ATTR_BGSHIFT)*2]);
                oldpen = SelectObject(hdc, edge);
 
+               /*
+                * Jordan Russell reports that this apparently
+                * ineffectual IntersectClipRect() call masks a
+                * Windows NT/2K bug causing strange display
+                * problems when the PuTTY window is taller than
+                * the primary monitor. It seems harmless enough...
+                */
+               IntersectClipRect(hdc,
+                       p.rcPaint.left, p.rcPaint.top,
+                       p.rcPaint.right, p.rcPaint.bottom);
+
                ExcludeClipRect(hdc, 
                        offset_width, offset_height,
                        offset_width+font_width*cols,
@@ -3393,6 +3419,12 @@ static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam,
            *p++ = 0;
            return -2;
        }
+       if (wParam == VK_BACK && shift_state == 1) {    /* Shift Backspace */
+           /* We do the opposite of what is configured */
+           *p++ = (cfg.bksp_is_delete ? 0x08 : 0x7F);
+           *p++ = 0;
+           return -2;
+       }
        if (wParam == VK_TAB && shift_state == 1) {     /* Shift tab */
            *p++ = 0x1B;
            *p++ = '[';
@@ -3806,6 +3838,16 @@ static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam,
     return -1;
 }
 
+void request_paste(void)
+{
+    /*
+     * In Windows, pasting is synchronous: we can read the
+     * clipboard with no difficulty, so request_paste() can just go
+     * ahead and paste.
+     */
+    term_do_paste();
+}
+
 void set_title(char *title)
 {
     sfree(window_name);
@@ -4191,6 +4233,22 @@ void fatalbox(char *fmt, ...)
 }
 
 /*
+ * Print a modal (Really Bad) message box and perform a fatal exit.
+ */
+void modalfatalbox(char *fmt, ...)
+{
+    va_list ap;
+    char stuff[200];
+
+    va_start(ap, fmt);
+    vsprintf(stuff, fmt, ap);
+    va_end(ap);
+    MessageBox(hwnd, stuff, "PuTTY Fatal Error",
+              MB_SYSTEMMODAL | MB_ICONERROR | MB_OK);
+    cleanup_exit(1);
+}
+
+/*
  * Manage window caption / taskbar flashing, if enabled.
  * 0 = stop, 1 = maintain, 2 = start
  */