From 85f6b361b444e7e5cec4e25d7c06aece2e932ae8 Mon Sep 17 00:00:00 2001 From: simon Date: Sat, 24 May 2003 12:31:32 +0000 Subject: [PATCH] Modified form of Jim Lucas's PC speaker patch. I don't like discriminating on the Windows version in order to decide whether to call MessageBeep(-1) or Beep() - I'd prefer to directly test the specific OS property in any given case - but it looks as if this is the best available option. git-svn-id: svn://svn.tartarus.org/sgt/putty@3208 cda61777-01e9-0310-a592-d414129be87e --- putty.h | 2 +- wincfg.c | 14 +++++++++----- window.c | 17 +++++++++++++++++ 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/putty.h b/putty.h index 6d5a0a21..46d6dc6d 100644 --- a/putty.h +++ b/putty.h @@ -243,7 +243,7 @@ enum { enum { /* Bell settings (cfg.beep) */ - BELL_DISABLED, BELL_DEFAULT, BELL_VISUAL, BELL_WAVEFILE + BELL_DISABLED, BELL_DEFAULT, BELL_VISUAL, BELL_WAVEFILE, BELL_PCSPEAKER }; enum { diff --git a/wincfg.c b/wincfg.c index 7e3d5c0a..c094eb77 100644 --- a/wincfg.c +++ b/wincfg.c @@ -103,10 +103,10 @@ void win_setup_config_box(struct controlbox *b, HWND *hwndp, int has_help, dlg_stdcheckbox_handler, I(offsetof(Config,ctrlaltkeys))); /* - * Windows allows an arbitrary .WAV to be played as a bell. For - * this we must search the existing controlset for the - * radio-button set controlling the `beep' option, and add an - * extra button to it. + * Windows allows an arbitrary .WAV to be played as a bell, and + * also the use of the PC speaker. For this we must search the + * existing controlset for the radio-button set controlling the + * `beep' option, and add extra buttons to it. * * Note that although this _looks_ like a hideous hack, it's * actually all above board. The well-defined interface to the @@ -127,18 +127,22 @@ void win_setup_config_box(struct controlbox *b, HWND *hwndp, int has_help, if (c->generic.type == CTRL_RADIO && c->generic.context.i == offsetof(Config, beep)) { assert(c->generic.handler == dlg_stdradiobutton_handler); - c->radio.nbuttons++; + c->radio.nbuttons += 2; c->radio.buttons = sresize(c->radio.buttons, c->radio.nbuttons, char *); c->radio.buttons[c->radio.nbuttons-1] = dupstr("Play a custom sound file"); + c->radio.buttons[c->radio.nbuttons-2] = + dupstr("Beep using the PC speaker"); c->radio.buttondata = sresize(c->radio.buttondata, c->radio.nbuttons, intorptr); c->radio.buttondata[c->radio.nbuttons-1] = I(BELL_WAVEFILE); + c->radio.buttondata[c->radio.nbuttons-2] = I(BELL_PCSPEAKER); if (c->radio.shortcuts) { c->radio.shortcuts = sresize(c->radio.shortcuts, c->radio.nbuttons, char); c->radio.shortcuts[c->radio.nbuttons-1] = NO_SHORTCUT; + c->radio.shortcuts[c->radio.nbuttons-2] = NO_SHORTCUT; } break; } diff --git a/window.c b/window.c index c9d8df55..e11b2b92 100644 --- a/window.c +++ b/window.c @@ -4406,6 +4406,23 @@ void beep(void *frontend, int mode) MB_OK | MB_ICONEXCLAMATION); cfg.beep = BELL_DEFAULT; } + } else if (mode == BELL_PCSPEAKER) { + static long lastbeep = 0; + long beepdiff; + + beepdiff = GetTickCount() - lastbeep; + if (beepdiff >= 0 && beepdiff < 50) + return; + + /* + * We must beep in different ways depending on whether this + * is a 95-series or NT-series OS. + */ + if(osVersion.dwPlatformId == VER_PLATFORM_WIN32_NT) + Beep(800, 100); + else + MessageBeep(-1); + lastbeep = GetTickCount(); } /* Otherwise, either visual bell or disabled; do nothing here */ if (!term->has_focus) { -- 2.11.0