Make the `vtmode' config option work under X. In the process I've
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sat, 26 Apr 2003 14:22:42 +0000 (14:22 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sat, 26 Apr 2003 14:22:42 +0000 (14:22 +0000)
had to move another of its values out into wincfg.c - paradoxically,
this was the `font has X encoding' option! (Because the Unix font
handling code expects to be able to tell for _itself_ whether it has
a font with X-encoded line drawing glyphs.)

git-svn-id: svn://svn.tartarus.org/sgt/putty@3145 cda61777-01e9-0310-a592-d414129be87e

config.c
unix/pterm.c
unix/unix.h
unix/uxputty.c
unix/uxucs.c
wincfg.c

index 43012e6..987b962 100644 (file)
--- a/config.c
+++ b/config.c
@@ -1143,9 +1143,9 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
                      HELPCTX(translation_linedraw),
                      dlg_stdradiobutton_handler,
                      I(offsetof(Config, vtmode)),
-                     "Font has XWindows encoding", 'x', I(VT_XWINDOWS),
+                     "Use Unicode line drawing code points",'u',I(VT_UNICODE),
                      "Poor man's line drawing (+, - and |)",'p',I(VT_POORMAN),
-                     "Unicode mode", 'u', I(VT_UNICODE), NULL);
+                     NULL);
 
     /*
      * The Window/Selection panel.
index 235c2d1..e34208c 100644 (file)
@@ -2394,7 +2394,8 @@ void setup_fonts_ucs(struct gui_data *inst)
     inst->font_height = inst->fonts[0]->ascent + inst->fonts[0]->descent;
 
     inst->direct_to_font = init_ucs(&inst->ucsdata,
-                                   inst->cfg.line_codepage, font_charset);
+                                   inst->cfg.line_codepage, font_charset,
+                                   inst->cfg.vtmode);
 }
 
 void set_geom_hints(struct gui_data *inst)
@@ -2531,7 +2532,8 @@ void change_settings_menuitem(GtkMenuItem *item, gpointer data)
             strcmp(oldcfg.boldfont.name, cfg2.boldfont.name) ||
             strcmp(oldcfg.widefont.name, cfg2.widefont.name) ||
             strcmp(oldcfg.wideboldfont.name, cfg2.wideboldfont.name) ||
-            strcmp(oldcfg.line_codepage, cfg2.line_codepage)) {
+            strcmp(oldcfg.line_codepage, cfg2.line_codepage) ||
+           oldcfg.vtmode != cfg2.vtmode) {
             setup_fonts_ucs(inst);
             need_size = 1;
         } else
index bb35a11..843655e 100644 (file)
@@ -115,7 +115,7 @@ void (*putty_signal(int sig, void (*func)(int)))(int);
  */
 struct unicode_data;
 int init_ucs(struct unicode_data *ucsdata,
-            char *line_codepage, int font_charset);
+            char *line_codepage, int font_charset, int vtmode);
 
 /*
  * Spare function exported directly from uxnet.c.
index ca1208d..a205f27 100644 (file)
 
 /*
  * TODO:
- * 
- *  - Go through all the config options and ensure they can all be
- *    configured and reconfigured properly.
- *     + icon title appears to be a non-option on Unix.
- *     + Why the hell did I faff about disabling two of the vtmode
- *      options? The rest aren't used either in pterm! Work out
- *      whether they should be, and how they can be.
- *     + Refresh in the codepage combo is badly broken.
- *     + `Don't translate line drawing chars' ?? What is this crap?
- *      It does nothing at all, and where's the option to paste as
- *      lqqqk? What was I smoking?
  *
  *  - Better control of the individual config box features.
  *     + SSH packet logging shouldn't be mentioned in pterm, and in
index f3d6a89..601b35d 100644 (file)
@@ -107,7 +107,7 @@ int wc_to_mb(int codepage, int flags, wchar_t *wcstr, int wclen,
  * Return value is TRUE if pterm is to run in direct-to-font mode.
  */
 int init_ucs(struct unicode_data *ucsdata, 
-            char *linecharset, int font_charset)
+            char *linecharset, int font_charset, int vtmode)
 {
     int i, ret = 0;
 
@@ -176,8 +176,18 @@ int init_ucs(struct unicode_data *ucsdata,
            0x23bb, 0x2500, 0x23bc, 0x23bd, 0x251c, 0x2524, 0x2534, 0x252c,
            0x2502, 0x2264, 0x2265, 0x03c0, 0x2260, 0x00a3, 0x00b7, 0x0020
        };
+       static const wchar_t unitab_xterm_poorman[32] =
+           L"*#****o~**+++++-----++++|****L. ";
+
+       const wchar_t *ptr;
+
+       if (vtmode == VT_POORMAN)
+           ptr = unitab_xterm_poorman;
+       else
+           ptr = unitab_xterm_std;
+
        if (i >= 0x5F && i < 0x7F)
-           ucsdata->unitab_xterm[i] = unitab_xterm_std[i & 0x1F];
+           ucsdata->unitab_xterm[i] = ptr[i & 0x1F];
        else
            ucsdata->unitab_xterm[i] = ucsdata->unitab_line[i];
     }
index 20eccfe..7e3d5c0 100644 (file)
--- a/wincfg.c
+++ b/wincfg.c
@@ -197,15 +197,18 @@ 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 =
                    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 =
                    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) {
@@ -217,6 +220,7 @@ void win_setup_config_box(struct controlbox *b, HWND *hwndp, int has_help,
                    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;