#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)
{
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.
*/
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");
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;
}
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);
case IDM_ABOUT:
showabout (hwnd);
break;
+ default:
+ if (wParam >= IDM_SAVED_MIN && wParam <= IDM_SAVED_MAX) {
+ SendMessage(hwnd, WM_SYSCOMMAND, IDM_SAVEDSESS, wParam);
+ }
}
break;
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,
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;