Now that we have `appname', make much wider use of it. In
[u/mdw/putty] / config.c
index 7204a6c..184023d 100644 (file)
--- a/config.c
+++ b/config.c
@@ -133,12 +133,18 @@ static void printerbox_handler(union control *ctrl, void *dlg,
        printer_enum *pe;
 
        dlg_update_start(ctrl, dlg);
-       dlg_listbox_clear(ctrl, dlg);
-       dlg_listbox_add(ctrl, dlg, PRINTER_DISABLED_STRING);
-       pe = printer_start_enum(&nprinters);
-       for (i = 0; i < nprinters; i++)
-           dlg_listbox_add(ctrl, dlg, printer_get_name(pe, i));
-       printer_finish_enum(pe);
+       /*
+        * Some backends may wish to disable the drop-down list on
+        * this edit box. Be prepared for this.
+        */
+       if (ctrl->editbox.has_list) {
+           dlg_listbox_clear(ctrl, dlg);
+           dlg_listbox_add(ctrl, dlg, PRINTER_DISABLED_STRING);
+           pe = printer_start_enum(&nprinters);
+           for (i = 0; i < nprinters; i++)
+               dlg_listbox_add(ctrl, dlg, printer_get_name(pe, i));
+           printer_finish_enum(pe);
+       }
        dlg_editbox_set(ctrl, dlg,
                        (*cfg->printer ? cfg->printer :
                         PRINTER_DISABLED_STRING));
@@ -156,7 +162,7 @@ static void codepage_handler(union control *ctrl, void *dlg,
     Config *cfg = (Config *)data;
     if (event == EVENT_REFRESH) {
        int i;
-       char *cp;
+       const char *cp;
        dlg_update_start(ctrl, dlg);
        strcpy(cfg->line_codepage,
               cp_name(decode_codepage(cfg->line_codepage)));
@@ -634,24 +640,31 @@ static void portfwd_handler(union control *ctrl, void *dlg,
        if (ctrl == pfd->addbutton) {
            char str[sizeof(cfg->portfwd)];
            char *p;
-           if (dlg_radiobutton_get(pfd->direction, dlg) == 0)
+           int whichbutton = dlg_radiobutton_get(pfd->direction, dlg);
+           if (whichbutton == 0)
                str[0] = 'L';
-           else
+           else if (whichbutton == 1)
                str[0] = 'R';
+           else
+               str[0] = 'D';
            dlg_editbox_get(pfd->sourcebox, dlg, str+1, sizeof(str) - 2);
            if (!str[1]) {
                dlg_error_msg(dlg, "You need to specify a source port number");
                return;
            }
            p = str + strlen(str);
-           *p++ = '\t';
-           dlg_editbox_get(pfd->destbox, dlg, p, sizeof(str)-1 - (p - str));
-           if (!*p || !strchr(p, ':')) {
-               dlg_error_msg(dlg,
-                             "You need to specify a destination address\n"
-                             "in the form \"host.name:port\"");
-               return;
-           }
+           if (str[0] != 'D') {
+               *p++ = '\t';
+               dlg_editbox_get(pfd->destbox, dlg, p,
+                               sizeof(str)-1 - (p - str));
+               if (!*p || !strchr(p, ':')) {
+                   dlg_error_msg(dlg,
+                                 "You need to specify a destination address\n"
+                                 "in the form \"host.name:port\"");
+                   return;
+               }
+           } else
+               *p = '\0';
            p = cfg->portfwd;
            while (*p) {
                while (*p)
@@ -713,6 +726,7 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
     struct environ_data *ed;
     struct portfwd_data *pfd;
     union control *c;
+    char *str;
 
     ssd = (struct sessionsaver_data *)
        ctrl_alloc(b, sizeof(struct sessionsaver_data));
@@ -741,7 +755,9 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
     /*
      * The Session panel.
      */
-    ctrl_settitle(b, "Session", "Basic options for your PuTTY session");
+    str = dupprintf("Basic options for your %s session", appname);
+    ctrl_settitle(b, "Session", str);
+    sfree(str);
 
     if (!midsession) {
        s = ctrl_getset(b, "Session", "hostport",
@@ -998,7 +1014,9 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
     /*
      * The Window panel.
      */
-    ctrl_settitle(b, "Window", "Options controlling PuTTY's window");
+    str = dupprintf("Options controlling %s's window", appname);
+    ctrl_settitle(b, "Window", str);
+    sfree(str);
 
     s = ctrl_getset(b, "Window", "size", "Set the size of the window");
     ctrl_columns(s, 2, 50, 50);
@@ -1034,8 +1052,9 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
     /*
      * The Window/Appearance panel.
      */
-    ctrl_settitle(b, "Window/Appearance",
-                 "Configure the appearance of PuTTY's window");
+    str = dupprintf("Configure the appearance of %s's window", appname);
+    ctrl_settitle(b, "Window/Appearance", str);
+    sfree(str);
 
     s = ctrl_getset(b, "Window/Appearance", "cursor",
                    "Adjust the use of the cursor");
@@ -1072,8 +1091,9 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
     /*
      * The Window/Behaviour panel.
      */
-    ctrl_settitle(b, "Window/Behaviour",
-                 "Configure the behaviour of PuTTY's window");
+    str = dupprintf("Configure the behaviour of %s's window", appname);
+    ctrl_settitle(b, "Window/Behaviour", str);
+    sfree(str);
 
     s = ctrl_getset(b, "Window/Behaviour", "title",
                    "Adjust the behaviour of the window title");
@@ -1103,8 +1123,9 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
                  'r', 100, HELPCTX(translation_codepage),
                  codepage_handler, P(NULL), P(NULL));
 
-    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);
     ctrl_radiobuttons(s, "Handling of line drawing characters:", NO_SHORTCUT,1,
                      HELPCTX(translation_linedraw),
                      dlg_stdradiobutton_handler,
@@ -1174,8 +1195,9 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
                  HELPCTX(colours_bold),
                  dlg_stdcheckbox_handler, I(offsetof(Config,bold_colour)));
 
-    s = ctrl_getset(b, "Window/Colours", "adjust",
-                   "Adjust the precise colours PuTTY displays");
+    str = dupprintf("Adjust the precise colours %s displays", appname);
+    s = ctrl_getset(b, "Window/Colours", "adjust", str);
+    sfree(str);
     ctrl_text(s, "Select a colour from the list, and then click the"
              " Modify button to change its appearance.",
              HELPCTX(colours_config));
@@ -1550,11 +1572,13 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
        pfd->destbox = ctrl_editbox(s, "Destination", 'i', 67,
                                    HELPCTX(ssh_tunnels_portfwd),
                                    portfwd_handler, P(pfd), P(NULL));
-       pfd->direction = ctrl_radiobuttons(s, NULL, NO_SHORTCUT, 2,
+       pfd->direction = ctrl_radiobuttons(s, NULL, NO_SHORTCUT, 3,
                                           HELPCTX(ssh_tunnels_portfwd),
                                           portfwd_handler, P(pfd),
                                           "Local", 'l', P(NULL),
-                                          "Remote", 'm', P(NULL), NULL);
+                                          "Remote", 'm', P(NULL),
+                                          "Dynamic", 'y', P(NULL),
+                                          NULL);
        ctrl_tabdelay(s, pfd->addbutton);
        ctrl_columns(s, 1, 100);