projects
/
u
/
mdw
/
putty
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Deglobalise the Unicode module. Despite all my grand plans, I've
[u/mdw/putty]
/
window.c
diff --git
a/window.c
b/window.c
index
77f4598
..
aac6ac6
100644
(file)
--- a/
window.c
+++ b/
window.c
@@
-120,6
+120,7
@@
static void *ldisc;
static Backend *back;
static void *backhandle;
static Backend *back;
static void *backhandle;
+static struct unicode_data ucsdata;
static int session_closed;
Config cfg; /* exported to windlg.c */
static int session_closed;
Config cfg; /* exported to windlg.c */
@@
-508,7
+509,9
@@
int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
hwnd = NULL;
hwnd = NULL;
- term = term_init(&cfg, NULL);
+ memset(&ucsdata, 0, sizeof(ucsdata));
+
+ term = term_init(&cfg, &ucsdata, NULL);
logctx = log_init(NULL, &cfg);
term_provide_logctx(term, logctx);
logctx = log_init(NULL, &cfg);
term_provide_logctx(term, logctx);
@@
-1112,16
+1115,15
@@
static void init_fonts(int pick_width, int pick_height)
/* !!! Yes the next line is right */
if (cset == OEM_CHARSET)
/* !!! Yes the next line is right */
if (cset == OEM_CHARSET)
- font_codepage = GetOEMCP();
+
ucsdata.
font_codepage = GetOEMCP();
else
else
- if (TranslateCharsetInfo
- ((DWORD *) cset, &info, TCI_SRCCHARSET)) font_codepage =
- info.ciACP;
+ if (TranslateCharsetInfo ((DWORD *) cset, &info, TCI_SRCCHARSET))
+ ucsdata.font_codepage = info.ciACP;
else
else
- font_codepage = -1;
+
ucsdata.
font_codepage = -1;
- GetCPInfo(font_codepage, &cpinfo);
- dbcs_screenfont = (cpinfo.MaxCharSize > 1);
+ GetCPInfo(
ucsdata.
font_codepage, &cpinfo);
+
ucsdata.
dbcs_screenfont = (cpinfo.MaxCharSize > 1);
}
f(FONT_UNDERLINE, cfg.fontcharset, fw_dontcare, TRUE);
}
f(FONT_UNDERLINE, cfg.fontcharset, fw_dontcare, TRUE);
@@
-1209,7
+1211,7
@@
static void init_fonts(int pick_width, int pick_height)
}
fontflag[0] = fontflag[1] = fontflag[2] = 1;
}
fontflag[0] = fontflag[1] = fontflag[2] = 1;
- init_ucs(&cfg);
+ init_ucs(&cfg
, &ucsdata
);
}
static void another_font(int fontno)
}
static void another_font(int fontno)
@@
-2760,8
+2762,8
@@
void do_text(Context ctx, int x, int y, char *text, int len,
if (lattr == LATTR_TOP || lattr == LATTR_BOT)
text_adjust *= 2;
attr &= ~CSET_MASK;
if (lattr == LATTR_TOP || lattr == LATTR_BOT)
text_adjust *= 2;
attr &= ~CSET_MASK;
- text[0] = (char) (unitab_xterm['q'] & CHAR_MASK);
- attr |= (unitab_xterm['q'] & CSET_MASK);
+ text[0] = (char) (u
csdata.u
nitab_xterm['q'] & CHAR_MASK);
+ attr |= (u
csdata.u
nitab_xterm['q'] & CSET_MASK);
if (attr & ATTR_UNDER) {
attr &= ~ATTR_UNDER;
force_manual_underline = 1;
if (attr & ATTR_UNDER) {
attr &= ~ATTR_UNDER;
force_manual_underline = 1;
@@
-2822,7
+2824,7
@@
void do_text(Context ctx, int x, int y, char *text, int len,
line_box.right = font_width*term->cols+offset_width;
/* We're using a private area for direct to font. (512 chars.) */
line_box.right = font_width*term->cols+offset_width;
/* We're using a private area for direct to font. (512 chars.) */
- if (dbcs_screenfont && (attr & CSET_MASK) == ATTR_ACP) {
+ if (
ucsdata.
dbcs_screenfont && (attr & CSET_MASK) == ATTR_ACP) {
/* Ho Hum, dbcs fonts are a PITA! */
/* To display on W9x I have to convert to UCS */
static wchar_t *uni_buf = 0;
/* Ho Hum, dbcs fonts are a PITA! */
/* To display on W9x I have to convert to UCS */
static wchar_t *uni_buf = 0;
@@
-2835,15
+2837,15
@@
void do_text(Context ctx, int x, int y, char *text, int len,
for(nlen = mptr = 0; mptr<len; mptr++) {
uni_buf[nlen] = 0xFFFD;
for(nlen = mptr = 0; mptr<len; mptr++) {
uni_buf[nlen] = 0xFFFD;
- if (IsDBCSLeadByteEx(font_codepage, (BYTE) text[mptr])) {
+ if (IsDBCSLeadByteEx(
ucsdata.
font_codepage, (BYTE) text[mptr])) {
IpDx[nlen] += char_width;
IpDx[nlen] += char_width;
- MultiByteToWideChar(font_codepage, MB_USEGLYPHCHARS,
+ MultiByteToWideChar(
ucsdata.
font_codepage, MB_USEGLYPHCHARS,
text+mptr, 2, uni_buf+nlen, 1);
mptr++;
}
else
{
text+mptr, 2, uni_buf+nlen, 1);
mptr++;
}
else
{
- MultiByteToWideChar(font_codepage, MB_USEGLYPHCHARS,
+ MultiByteToWideChar(
ucsdata.
font_codepage, MB_USEGLYPHCHARS,
text+mptr, 1, uni_buf+nlen, 1);
}
nlen++;
text+mptr, 1, uni_buf+nlen, 1);
}
nlen++;
@@
-3012,17
+3014,17
@@
int char_width(Context ctx, int uc) {
switch (uc & CSET_MASK) {
case ATTR_ASCII:
switch (uc & CSET_MASK) {
case ATTR_ASCII:
- uc = unitab_line[uc & 0xFF];
+ uc = u
csdata.u
nitab_line[uc & 0xFF];
break;
case ATTR_LINEDRW:
break;
case ATTR_LINEDRW:
- uc = unitab_xterm[uc & 0xFF];
+ uc = u
csdata.u
nitab_xterm[uc & 0xFF];
break;
case ATTR_SCOACS:
break;
case ATTR_SCOACS:
- uc = unitab_scoacs[uc & 0xFF];
+ uc = u
csdata.u
nitab_scoacs[uc & 0xFF];
break;
}
if (DIRECT_FONT(uc)) {
break;
}
if (DIRECT_FONT(uc)) {
- if (dbcs_screenfont) return 1;
+ if (
ucsdata.
dbcs_screenfont) return 1;
/* Speedup, I know of no font where ascii is the wrong width */
if ((uc&CHAR_MASK) >= ' ' && (uc&CHAR_MASK)<= '~')
/* Speedup, I know of no font where ascii is the wrong width */
if ((uc&CHAR_MASK) >= ' ' && (uc&CHAR_MASK)<= '~')
@@
-3767,7
+3769,7
@@
static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam,
#ifdef SHOW_TOASCII_RESULT
if (r == 1 && !key_down) {
if (alt_sum) {
#ifdef SHOW_TOASCII_RESULT
if (r == 1 && !key_down) {
if (alt_sum) {
- if (in_utf(term) || dbcs_screenfont)
+ if (in_utf(term) ||
ucsdata.
dbcs_screenfont)
debug((", (U+%04x)", alt_sum));
else
debug((", LCH(%d)", alt_sum));
debug((", (U+%04x)", alt_sum));
else
debug((", LCH(%d)", alt_sum));
@@
-3820,7
+3822,7
@@
static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam,
if (!key_down) {
if (alt_sum) {
if (!key_down) {
if (alt_sum) {
- if (in_utf(term) || dbcs_screenfont) {
+ if (in_utf(term) ||
ucsdata.
dbcs_screenfont) {
keybuf = alt_sum;
term_seen_key_event(term);
luni_send(ldisc, &keybuf, 1, 1);
keybuf = alt_sum;
term_seen_key_event(term);
luni_send(ldisc, &keybuf, 1, 1);
@@
-3870,7
+3872,7
@@
static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam,
if (!left_alt)
keys[0] = 0;
/* If we will be using alt_sum fix the 256s */
if (!left_alt)
keys[0] = 0;
/* If we will be using alt_sum fix the 256s */
- else if (keys[0] && (in_utf(term) || dbcs_screenfont))
+ else if (keys[0] && (in_utf(term) ||
ucsdata.
dbcs_screenfont))
keys[0] = 10;
}
keys[0] = 10;
}