-void beep(int errorbeep) {
- static long last_beep = 0;
- long now, beep_diff;
-
- now = GetTickCount();
- beep_diff = now-last_beep;
-
- /* Make sure we only respond to one beep per packet or so */
- if (beep_diff>=0 && beep_diff<50)
- return;
-
- if(errorbeep)
- MessageBeep(MB_ICONHAND);
- else
- MessageBeep(MB_OK);
-
- last_beep = GetTickCount();
+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];
+ sprintf(buf, "Unable to play sound file\n%s\n"
+ "Using default sound instead", cfg.bell_wavefile);
+ MessageBox(hwnd, buf, "PuTTY Sound Error", MB_OK | MB_ICONEXCLAMATION);
+ cfg.beep = BELL_DEFAULT;
+ }
+ }