#define IDM_TEL_EOF 0x0130
#define IDM_ABOUT 0x0140
#define IDM_SAVEDSESS 0x0150
+#define IDM_COPYALL 0x0160
#define IDM_SAVED_MIN 0x1000
#define IDM_SAVED_MAX 0x2000
}
}
+ /* Check for invalid Port number (i.e. zero) */
+ if (cfg.port == 0) {
+ MessageBox(NULL, "Invalid Port Number",
+ "PuTTY Internal Error", MB_OK |MB_ICONEXCLAMATION);
+ WSACleanup();
+ return 1;
+ }
+
real_ldisc = (cfg.ldisc_term ? &ldisc_term : &ldisc_simple);
/* To start with, we use the simple line discipline, so we can
* type passwords etc without fear of them being echoed... */
{
char *bits;
int size = (font_width+15)/16 * 2 * font_height;
- bits = calloc(size, 1);
+ bits = smalloc(size);
+ memset(bits, 0, size);
caretbm = CreateBitmap(font_width, font_height, 1, 1, bits);
- free(bits);
+ sfree(bits);
}
+ CreateCaret(hwnd, caretbm, font_width, font_height);
/*
* Initialise the scroll bar.
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);
+ AppendMenu (m, MF_ENABLED, IDM_COPYALL, "C&opy All to Clipboard");
AppendMenu (m, MF_ENABLED, IDM_CLRSB, "C&lear Scrollback");
AppendMenu (m, MF_ENABLED, IDM_RESET, "Rese&t Terminal");
AppendMenu (m, MF_SEPARATOR, 0, 0);
if (!has_focus)
timer_id = SetTimer(hwnd, 1, 59500, NULL);
else
- timer_id = SetTimer(hwnd, 1, 250, NULL);
+ timer_id = SetTimer(hwnd, 1, 100, NULL);
long_timer = 1;
/* There's no point rescanning everything in the message queue
cl = c;
} else if (wParam == IDM_SAVEDSESS) {
char *session = sessions[(lParam - IDM_SAVED_MIN) / 16];
- cl = malloc(16 + strlen(session)); /* 8, but play safe */
+ cl = smalloc(16 + strlen(session)); /* 8, but play safe */
if (!cl)
cl = NULL; /* not a very important failure mode */
else {
if (filemap)
CloseHandle(filemap);
if (freecl)
- free(cl);
+ sfree(cl);
}
break;
case IDM_RECONF:
{
int prev_alwaysontop = cfg.alwaysontop;
+ int need_setwpos = FALSE;
+ cfg.width = cols;
+ cfg.height = rows;
if (!do_reconfig(hwnd))
break;
just_reconfigged = TRUE;
SetWindowLong(hwnd, GWL_EXSTYLE, nexflag);
SendMessage (hwnd, WM_IGNORE_SIZE, 0, 0);
+
SetWindowPos(hwnd, NULL, 0,0,0,0,
SWP_NOACTIVATE|SWP_NOCOPYBITS|
SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER|
}
}
+ if (cfg.height != rows ||
+ cfg.width != cols ||
+ cfg.savelines != savelines)
+ need_setwpos = TRUE;
term_size(cfg.height, cfg.width, cfg.savelines);
InvalidateRect(hwnd, NULL, TRUE);
- SetWindowPos (hwnd, NULL, 0, 0,
- extra_width + font_width * cfg.width,
- extra_height + font_height * cfg.height,
- SWP_NOACTIVATE | SWP_NOCOPYBITS |
- SWP_NOMOVE | SWP_NOZORDER);
+ if (need_setwpos) {
+ force_normal(hwnd);
+ SetWindowPos (hwnd, NULL, 0, 0,
+ extra_width + font_width * cfg.width,
+ extra_height + font_height * cfg.height,
+ SWP_NOACTIVATE | SWP_NOCOPYBITS |
+ SWP_NOMOVE | SWP_NOZORDER);
+ }
if (IsIconic(hwnd)) {
SetWindowText (hwnd,
cfg.win_name_always ? window_name : icon_name);
}
}
break;
+ case IDM_COPYALL:
+ term_copyall();
+ break;
case IDM_CLRSB:
term_clrsb();
break;
return 0;
case WM_SETFOCUS:
has_focus = TRUE;
- CreateCaret(hwnd, caretbm, 0, 0);
+ CreateCaret(hwnd, caretbm, font_width, font_height);
ShowCaret(hwnd);
compose_state = 0;
term_out();
}
#endif
+ if (wParam == VK_MENU && (HIWORD(lParam)&KF_EXTENDED)) {
+ keystate[VK_RMENU] = keystate[VK_MENU];
+ }
+
/* Note if AltGr was pressed and if it was used as a compose key */
if (cfg.compose_key) {
if (wParam == VK_MENU && (HIWORD(lParam)&KF_EXTENDED))
{
- keystate[VK_RMENU] = keystate[VK_MENU];
if (!compose_state) compose_key = wParam;
}
if (wParam == VK_APPS && !compose_state)
}
else if (compose_state==1 && wParam != VK_CONTROL)
compose_state = 0;
- } else
+ } else {
compose_state = 0;
+ }
/* Nastyness with NUMLock - Shift-NUMLock is left alone though */
if ( (cfg.funky_type == 3 ||