The WinSock library is now loaded at run-time, which means we can
[u/mdw/putty] / wincfg.c
index 38e36ab..4c3d8a9 100644 (file)
--- a/wincfg.c
+++ b/wincfg.c
@@ -3,8 +3,6 @@
  * box.
  */
 
-#include <windows.h>
-
 #include <assert.h>
 #include <stdlib.h>
 
@@ -37,6 +35,7 @@ void win_setup_config_box(struct controlbox *b, HWND *hwndp, int has_help,
 {
     struct controlset *s;
     union control *c;
+    char *str;
 
     if (!midsession) {
        /*
@@ -102,10 +101,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
@@ -126,22 +125,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 =
-                   srealloc(c->radio.buttons,
-                            c->radio.nbuttons * sizeof(*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 =
-                   srealloc(c->radio.buttondata,
-                            c->radio.nbuttons * sizeof(*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 =
-                       srealloc(c->radio.shortcuts,
-                                (c->radio.nbuttons *
-                                 sizeof(*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;
            }
@@ -190,8 +189,9 @@ void win_setup_config_box(struct controlbox *b, HWND *hwndp, int has_help,
      * additional options when working with line-drawing
      * characters.
      */
-    s = ctrl_getset(b, "Window/Translation", "linedraw",
-                   "Adjust how PuTTY displays line drawing characters");
+    str = dupprintf("Adjust how %s displays line drawing characters", appname);
+    s = ctrl_getset(b, "Window/Translation", "linedraw", str);
+    sfree(str);
     {
        int i;
        for (i = 0; i < s->ncontrols; i++) {
@@ -199,32 +199,30 @@ 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, vtmode)) {
                assert(c->generic.handler == dlg_stdradiobutton_handler);
-               c->radio.nbuttons += 2;
+               c->radio.nbuttons += 3;
                c->radio.buttons =
-                   srealloc(c->radio.buttons,
-                            c->radio.nbuttons * sizeof(*c->radio.buttons));
+                   sresize(c->radio.buttons, c->radio.nbuttons, char *);
+               c->radio.buttons[c->radio.nbuttons-3] =
+                   dupstr("Font has XWindows encoding");
                c->radio.buttons[c->radio.nbuttons-2] =
                    dupstr("Use font in both ANSI and OEM modes");
                c->radio.buttons[c->radio.nbuttons-1] =
                    dupstr("Use font in OEM mode only");
                c->radio.buttondata =
-                   srealloc(c->radio.buttondata,
-                            c->radio.nbuttons * sizeof(*c->radio.buttondata));
+                   sresize(c->radio.buttondata, c->radio.nbuttons, intorptr);
+               c->radio.buttondata[c->radio.nbuttons-3] = I(VT_XWINDOWS);
                c->radio.buttondata[c->radio.nbuttons-2] = I(VT_OEMANSI);
                c->radio.buttondata[c->radio.nbuttons-1] = I(VT_OEMONLY);
                if (!c->radio.shortcuts) {
                    int j;
-                   c->radio.shortcuts =
-                       smalloc((c->radio.nbuttons *
-                                sizeof(*c->radio.shortcuts)));
+                   c->radio.shortcuts = snewn(c->radio.nbuttons, char);
                    for (j = 0; j < c->radio.nbuttons; j++)
                        c->radio.shortcuts[j] = NO_SHORTCUT;
                } else {
-                   c->radio.shortcuts =
-                       srealloc(c->radio.shortcuts,
-                                (c->radio.nbuttons *
-                                 sizeof(*c->radio.shortcuts)));
+                   c->radio.shortcuts = sresize(c->radio.shortcuts,
+                                                c->radio.nbuttons, char);
                }
+               c->radio.shortcuts[c->radio.nbuttons-3] = 'x';
                c->radio.shortcuts[c->radio.nbuttons-2] = 'b';
                c->radio.shortcuts[c->radio.nbuttons-1] = 'e';
                break;
@@ -271,6 +269,10 @@ void win_setup_config_box(struct controlbox *b, HWND *hwndp, int has_help,
     ctrl_checkbox(s, "Attempt to use logical palettes", 'l',
                  HELPCTX(colours_logpal),
                  dlg_stdcheckbox_handler, I(offsetof(Config,try_palette)));
+    ctrl_checkbox(s, "Use system colours", 's',
+                  HELPCTX(colours_system),
+                  dlg_stdcheckbox_handler, I(offsetof(Config,system_colour)));
+
 
     /*
      * Resize-by-changing-font is a Windows insanity.