From 3900c2d642c2960fdac52a9afea854a375441fcc Mon Sep 17 00:00:00 2001 From: simon Date: Sat, 26 Apr 2003 14:22:42 +0000 Subject: [PATCH] Make the `vtmode' config option work under X. In the process I've 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 | 4 ++-- unix/pterm.c | 6 ++++-- unix/unix.h | 2 +- unix/uxputty.c | 11 ----------- unix/uxucs.c | 14 ++++++++++++-- wincfg.c | 6 +++++- 6 files changed, 24 insertions(+), 19 deletions(-) diff --git a/config.c b/config.c index 43012e64..987b9623 100644 --- 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. diff --git a/unix/pterm.c b/unix/pterm.c index 235c2d1e..e34208c5 100644 --- a/unix/pterm.c +++ b/unix/pterm.c @@ -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 diff --git a/unix/unix.h b/unix/unix.h index bb35a116..843655ef 100644 --- a/unix/unix.h +++ b/unix/unix.h @@ -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. diff --git a/unix/uxputty.c b/unix/uxputty.c index ca1208d6..a205f276 100644 --- a/unix/uxputty.c +++ b/unix/uxputty.c @@ -13,17 +13,6 @@ /* * 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 diff --git a/unix/uxucs.c b/unix/uxucs.c index f3d6a89a..601b35da 100644 --- a/unix/uxucs.c +++ b/unix/uxucs.c @@ -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]; } diff --git a/wincfg.c b/wincfg.c index 20eccfed..7e3d5c0a 100644 --- 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; -- 2.11.0