#include "putty.h"
#include "win_res.h"
-#define IDM_SHOWLOG 501
-#define IDM_NEWSESS 502
-#define IDM_DUPSESS 503
-#define IDM_RECONF 504
-#define IDM_CLRSB 505
-#define IDM_RESET 506
-#define IDM_TEL_AYT 507
-#define IDM_TEL_BRK 508
-#define IDM_TEL_SYNCH 509
-#define IDM_TEL_EC 510
-#define IDM_TEL_EL 511
-#define IDM_TEL_GA 512
-#define IDM_TEL_NOP 513
-#define IDM_TEL_ABORT 514
-#define IDM_TEL_AO 515
-#define IDM_TEL_IP 516
-#define IDM_TEL_SUSP 517
-#define IDM_TEL_EOR 518
-#define IDM_TEL_EOF 519
-#define IDM_ABOUT 520
+#define IDM_SHOWLOG 0x0010
+#define IDM_NEWSESS 0x0020
+#define IDM_DUPSESS 0x0030
+#define IDM_RECONF 0x0040
+#define IDM_CLRSB 0x0050
+#define IDM_RESET 0x0060
+#define IDM_TEL_AYT 0x0070
+#define IDM_TEL_BRK 0x0080
+#define IDM_TEL_SYNCH 0x0090
+#define IDM_TEL_EC 0x00a0
+#define IDM_TEL_EL 0x00b0
+#define IDM_TEL_GA 0x00c0
+#define IDM_TEL_NOP 0x00d0
+#define IDM_TEL_ABORT 0x00e0
+#define IDM_TEL_AO 0x00f0
+#define IDM_TEL_IP 0x0100
+#define IDM_TEL_SUSP 0x0110
+#define IDM_TEL_EOR 0x0120
+#define IDM_TEL_EOF 0x0130
+#define IDM_ABOUT 0x0140
+#define IDM_SAVEDSESS 0x0150
+
+#define IDM_SAVED_MIN 0x1000
+#define IDM_SAVED_MAX 0x2000
#define WM_IGNORE_SIZE (WM_USER + 2)
#define WM_IGNORE_CLIP (WM_USER + 3)
{
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.
*/
if (*p == '@') {
return 0;
}
window_name = icon_name = NULL;
- sprintf(msg, "PuTTY: %s", realhost);
+ sprintf(msg, "%s - PuTTY", realhost);
set_title (msg);
set_icon (msg);
}
*/
{
HMENU m = GetSystemMenu (hwnd, FALSE);
- HMENU p;
+ HMENU p,s;
+ int i;
AppendMenu (m, MF_SEPARATOR, 0, 0);
if (cfg.protocol == PROT_TELNET) {
}
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");
PostQuitMessage (0);
return 0;
case WM_SYSCOMMAND:
- switch (wParam) {
+ switch (wParam & ~0xF) { /* low 4 bits reserved to Windows */
case IDM_SHOWLOG:
shownegot(hwnd);
break;
case IDM_NEWSESS:
case IDM_DUPSESS:
+ case IDM_SAVEDSESS:
{
char b[2048];
char c[30], *cl;
}
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;
case IDM_ABOUT:
showabout (hwnd);
break;
+ default:
+ if (wParam >= IDM_SAVED_MIN && wParam <= IDM_SAVED_MAX) {
+ SendMessage(hwnd, WM_SYSCOMMAND, IDM_SAVEDSESS, wParam);
+ }
}
break;
SetScrollInfo (hwnd, SB_VERT, &si, TRUE);
}
-Context get_ctx() {
+Context get_ctx(void) {
HDC hdc;
if (hwnd) {
hdc = GetDC (hwnd);
*/
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;