From 13c5d120fc89e35407b0092bef93c809a0b715fd Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Wed, 4 Feb 2004 01:20:27 +0000 Subject: [PATCH] (Fset_char_table_range): Handle charsets ascii, eight-bit-control, and eight-bit-graphic correctly. --- src/ChangeLog | 5 +++++ src/fns.c | 24 ++++++++++++++++++------ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 1e44a98d42d..f96f7740548 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2004-02-04 Kenichi Handa + + * fns.c (Fset_char_table_range): Handle charsets ascii, + eight-bit-control, and eight-bit-graphic correctly. + 2004-02-03 Jason Rumney * w32select.c (Fw32_set_clipboard_data): Make coding iso2022 safe. diff --git a/src/fns.c b/src/fns.c index 493d7ba2897..c9e25ecf547 100644 --- a/src/fns.c +++ b/src/fns.c @@ -2512,14 +2512,26 @@ character set, or a character code. Return VALUE. */) else if (SYMBOLP (range)) { Lisp_Object charset_info; + int charset_id; charset_info = Fget (range, Qcharset); - CHECK_VECTOR (charset_info); - - return Faset (char_table, - make_number (XINT (XVECTOR (charset_info)->contents[0]) - + 128), - value); + if (! VECTORP (charset_info) + || ! NATNUMP (AREF (charset_info, 0)) + || (charset_id = XINT (AREF (charset_info, 0)), + ! CHARSET_DEFINED_P (charset_id))) + error ("Invalid charset: %s", SYMBOL_NAME (range)); + + if (charset_id == CHARSET_ASCII) + for (i = 0; i < 128; i++) + XCHAR_TABLE (char_table)->contents[i] = value; + else if (charset_id == CHARSET_8_BIT_CONTROL) + for (i = 128; i < 160; i++) + XCHAR_TABLE (char_table)->contents[i] = value; + else if (charset_id == CHARSET_8_BIT_GRAPHIC) + for (i = 160; i < 256; i++) + XCHAR_TABLE (char_table)->contents[i] = value; + else + XCHAR_TABLE (char_table)->contents[charset_id + 128] = value; } else if (INTEGERP (range)) Faset (char_table, range, value); -- 2.39.2