X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/03169ad0902dcea0737ad7c92a9248e9fe6022e7..7af9fa7f957710190d184d85e43bf917f71f84a9:/window.c diff --git a/window.c b/window.c index 84550eb6..865ff805 100644 --- a/window.c +++ b/window.c @@ -1,6 +1,7 @@ #include #include #include +#include #ifndef AUTO_WINSOCK #ifdef WINSOCK_TWO #include @@ -42,6 +43,9 @@ #define IDM_SAVEDSESS 0x0150 #define IDM_COPYALL 0x0160 +#define IDM_SESSLGP 0x0250 /* log type printable */ +#define IDM_SESSLGA 0x0260 /* log type all chars */ +#define IDM_SESSLGE 0x0270 /* log end */ #define IDM_SAVED_MIN 0x1000 #define IDM_SAVED_MAX 0x2000 @@ -441,7 +445,9 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) { error = back->init (cfg.host, cfg.port, &realhost); if (error) { - sprintf(msg, "Unable to open connection:\n%s", error); + sprintf(msg, "Unable to open connection to\n" + "%.800s\n" + "%s", cfg.host, error); MessageBox(NULL, msg, "PuTTY Error", MB_ICONERROR | MB_OK); return 0; } @@ -2063,7 +2069,7 @@ static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam, /* Note if AltGr was pressed and if it was used as a compose key */ if (!compose_state) { - compose_key = -1; + compose_key = 0x100; if (cfg.compose_key) { if (wParam == VK_MENU && (HIWORD(lParam)&KF_EXTENDED)) compose_key = wParam; @@ -2318,6 +2324,24 @@ static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam, /* Reorder edit keys to physical order */ if (cfg.funky_type == 3 && code <= 6 ) code = "\0\2\1\4\5\3\6"[code]; + if (vt52_mode && code > 0 && code <= 6) { + p += sprintf((char *)p, "\x1B%c", " HLMEIG"[code]); + return p - output; + } + + if (cfg.funky_type == 5 && code >= 11 && code <= 24) { + p += sprintf((char *)p, "\x1B[%c", code + 'M' - 11); + return p - output; + } + if ((vt52_mode || cfg.funky_type == 4) && code >= 11 && code <= 24) { + int offt = 0; + if (code>15) offt++; if (code>21) offt++; + if (vt52_mode) + p += sprintf((char *)p, "\x1B%c", code + 'P' - 11 - offt); + else + p += sprintf((char *)p, "\x1BO%c", code + 'P' - 11 - offt); + return p - output; + } if (cfg.funky_type == 1 && code >= 11 && code <= 15) { p += sprintf((char *)p, "\x1B[[%c", code + 'A' - 11); return p - output; @@ -2427,6 +2451,8 @@ static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam, return p-output; } + /* If we're definitly not building up an ALT-54321 then clear it */ + if (!left_alt) keys[0] = 0; } /* ALT alone may or may not want to bring up the System menu */ @@ -2638,7 +2664,21 @@ void fatalbox(char *fmt, ...) { */ void beep(int mode) { if (mode == BELL_DEFAULT) { + /* + * For MessageBeep style bells, we want to be careful of + * timing, because they don't have the nice property of + * PlaySound bells that each one cancels the previous + * active one. So we limit the rate to one per 50ms or so. + */ + static long lastbeep = 0; + long now, beepdiff; + + now = GetTickCount(); + beepdiff = now - lastbeep; + if (beepdiff >= 0 && beepdiff < 50) + return; MessageBeep(MB_OK); + lastbeep = now; } else if (mode == BELL_WAVEFILE) { if (!PlaySound(cfg.bell_wavefile, NULL, SND_ASYNC | SND_FILENAME)) { char buf[sizeof(cfg.bell_wavefile)+80];