]> asedeno.scripts.mit.edu Git - PuTTY.git/blobdiff - window.c
Added saved sessions submenu from system menu.
[PuTTY.git] / window.c
index 0d2ddb660b57ac34bcd3b4bbeb12ca31f7e18548..4adb682ba09572675011fb4bfb38f12780e8fe23 100644 (file)
--- a/window.c
+++ b/window.c
 #define IDM_TEL_EOR   518
 #define IDM_TEL_EOF   519
 #define IDM_ABOUT     520
+#define IDM_SAVEDSESS 521
+
+#define IDM_SAVED_MIN 4096
+#define IDM_SAVED_MAX 8192
 
 #define WM_IGNORE_SIZE (WM_USER + 2)
 #define WM_IGNORE_CLIP (WM_USER + 3)
@@ -100,11 +104,32 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) {
     {
        char *p;
 
+       default_protocol = DEFAULT_PROTOCOL;
+       default_port = DEFAULT_PORT;
+
        do_defaults(NULL);
 
        p = cmdline;
        while (*p && isspace(*p)) p++;
 
+       /*
+        * Process command line options first. Yes, this can be
+        * done better, and it will be as soon as I have the
+        * energy...
+        */
+       while (*p == '-') {
+           char *q = p + strcspn(p, " \t");
+           p++;
+           if (q == p + 3 &&
+               tolower(p[0]) == 's' &&
+               tolower(p[1]) == 's' &&
+               tolower(p[2]) == 'h') {
+               default_protocol = cfg.protocol = PROT_SSH;
+               default_port = cfg.port = 22;
+           }
+           p = q + strspn(q, " \t");
+       }
+
        /*
         * An initial @ means to activate a saved session.
         */
@@ -267,7 +292,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) {
            return 0;
        }
        window_name = icon_name = NULL;
-       sprintf(msg, "PuTTY: %s", realhost);
+       sprintf(msg, "%s - PuTTY", realhost);
        set_title (msg);
        set_icon (msg);
     }
@@ -290,7 +315,8 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) {
      */
     {
        HMENU m = GetSystemMenu (hwnd, FALSE);
-       HMENU p;
+       HMENU p,s;
+       int i;
 
        AppendMenu (m, MF_SEPARATOR, 0, 0);
        if (cfg.protocol == PROT_TELNET) {
@@ -317,6 +343,11 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) {
        }
        AppendMenu (m, MF_ENABLED, IDM_NEWSESS, "New Session");
        AppendMenu (m, MF_ENABLED, IDM_DUPSESS, "Duplicate Session");
+       s = CreateMenu();
+       get_sesslist(TRUE);
+       for (i = 1 ; i < ((nsessions < 256) ? nsessions : 256) ; i++)
+         AppendMenu (s, MF_ENABLED, IDM_SAVED_MIN + (16 * i) , sessions[i]);
+       AppendMenu (m, MF_POPUP | MF_ENABLED, (UINT) s, "Saved Sessions");
        AppendMenu (m, MF_ENABLED, IDM_RECONF, "Change Settings");
        AppendMenu (m, MF_SEPARATOR, 0, 0);
        AppendMenu (m, MF_ENABLED, IDM_CLRSB, "Clear Scrollback");
@@ -584,13 +615,14 @@ static int WINAPI WndProc (HWND hwnd, UINT message,
       case WM_DESTROY:
        PostQuitMessage (0);
        return 0;
-      case WM_SYSCOMMAND:
+    case WM_SYSCOMMAND:
        switch (wParam) {
          case IDM_SHOWLOG:
            shownegot(hwnd);
            break;
          case IDM_NEWSESS:
          case IDM_DUPSESS:
+       case IDM_SAVEDSESS:
            {
                char b[2048];
                char c[30], *cl;
@@ -626,8 +658,11 @@ static int WINAPI WndProc (HWND hwnd, UINT message,
                    }
                    sprintf(c, "putty &%08x", filemap);
                    cl = c;
+               } else if (wParam == IDM_SAVEDSESS) {
+                 sprintf(c, "putty @%s", sessions[(lParam - IDM_SAVED_MIN) / 16]);
+                 cl = c;
                } else
-                   cl = NULL;
+                 cl = NULL;
 
                GetModuleFileName (NULL, b, sizeof(b)-1);
                si.cb = sizeof(si);
@@ -698,6 +733,10 @@ static int WINAPI WndProc (HWND hwnd, UINT message,
          case IDM_ABOUT:
            showabout (hwnd);
            break;
+       default:
+         if (wParam >= IDM_SAVED_MIN && wParam <= IDM_SAVED_MAX) {
+           SendMessage(hwnd, WM_SYSCOMMAND, IDM_SAVEDSESS, wParam);
+         }
        }
        break;
 
@@ -727,8 +766,8 @@ static int WINAPI WndProc (HWND hwnd, UINT message,
        term_mouse (cfg.mouse_is_xterm ? MB_PASTE : MB_EXTEND,
                    MA_RELEASE, TO_CHR_X(X_POS(lParam)),
                    TO_CHR_Y(Y_POS(lParam)));
-       return 0;
         ReleaseCapture();
+       return 0;
       case WM_RBUTTONDOWN:
         SetCapture(hwnd);
        click (cfg.mouse_is_xterm ? MB_EXTEND : MB_PASTE,
@@ -1412,7 +1451,7 @@ void set_sbar (int total, int start, int page) {
         SetScrollInfo (hwnd, SB_VERT, &si, TRUE);
 }
 
-Context get_ctx() {
+Context get_ctx(void) {
     HDC hdc;
     if (hwnd) {
        hdc = GetDC (hwnd);
@@ -1540,11 +1579,10 @@ void get_clip (void **p, int *len) {
  */
 void optimised_move (int to, int from, int lines) {
     RECT r;
-    int min, max, d;
+    int min, max;
 
     min = (to < from ? to : from);
     max = to + from - min;
-    d = max - min;
 
     r.left = 0; r.right = cols * font_width;
     r.top = min * font_height; r.bottom = (max+lines) * font_height;