-#define CHAR_CHARSET(c) \
- (SINGLE_BYTE_CHAR_P (c) \
- ? CHARSET_ASCII \
- : ((c) < MIN_CHAR_OFFICIAL_DIMENSION2 \
- ? CHAR_FIELD2 (c) + 0x70 \
- : ((c) < MIN_CHAR_PRIVATE_DIMENSION2 \
- ? CHAR_FIELD1 (c) + 0x8F \
- : ((c) < MIN_CHAR_COMPOSITION \
- ? CHAR_FIELD1 (c) + 0xE0 \
- : ((c) <= MAX_CHAR_COMPOSITION \
- ? CHARSET_COMPOSITION \
- : CHARSET_ASCII)))))
-
-/* Return charset at the place pointed by P. */
-#define CHARSET_AT(p) \
- (*(p) < 0x80 \
- ? CHARSET_ASCII \
- : (*(p) == LEADING_CODE_COMPOSITION \
- ? CHARSET_COMPOSITION \
- : (*(p) < LEADING_CODE_PRIVATE_11 \
- ? (int)*(p) \
- : (*(p) <= LEADING_CODE_PRIVATE_22 \
- ? (int)*((p) + 1) \
- : -1))))
-
-/* Same as `CHARSET_AT ()' but perhaps runs faster because of an
- additional argument C which is the code (byte) at P. */
-#define FIRST_CHARSET_AT(p, c) \
- ((c) < 0x80 \
- ? CHARSET_ASCII \
- : ((c) == LEADING_CODE_COMPOSITION \
- ? CHARSET_COMPOSITION \
- : ((c) < LEADING_CODE_PRIVATE_11 \
- ? (int)(c) \
- : ((c) <= LEADING_CODE_PRIVATE_22 \
- ? (int)*((p) + 1) \
- : -1))))
-
-/* Check if two characters C1 and C2 belong to the same charset.
- Always return 0 for composite characters. */
-#define SAME_CHARSET_P(c1, c2) \
- (c1 < MIN_CHAR_COMPOSITION \
- && (SINGLE_BYTE_CHAR_P (c1) \
- ? SINGLE_BYTE_CHAR_P (c2) \
- : (c1 < MIN_CHAR_OFFICIAL_DIMENSION2 \
- ? (c1 & CHAR_FIELD2_MASK) == (c2 & CHAR_FIELD2_MASK) \
- : (c1 & CHAR_FIELD1_MASK) == (c2 & CHAR_FIELD1_MASK))))
-
-/* Return a non-ASCII character of which charset is CHARSET and
- position-codes are C1 and C2. DIMENSION1 character ignores C2. */
-#define MAKE_NON_ASCII_CHAR(charset, c1, c2) \
- ((charset) == CHARSET_COMPOSITION \
- ? ((c2) < 0 \
- ? (((charset) - 0x70) << 7) + (c1) \
- : MAKE_COMPOSITE_CHAR (((c1) << 7) + (c2))) \
- : (! CHARSET_DEFINED_P (charset) || CHARSET_DIMENSION (charset) == 1 \
- ? (((charset) - 0x70) << 7) | ((c1) <= 0 ? 0 : (c1)) \
- : ((charset) < MIN_CHARSET_PRIVATE_DIMENSION2 \
- ? ((((charset) - 0x8F) << 14) \
- | ((c1) <= 0 ? 0 : ((c1) << 7)) | ((c2) <= 0 ? 0 : (c2))) \
- : ((((charset) - 0xE0) << 14) \
- | ((c1) <= 0 ? 0 : ((c1) << 7)) | ((c2) <= 0 ? 0 : (c2))))))
-
-/* Return a composite character of which CMPCHAR-ID is ID. */
-#define MAKE_COMPOSITE_CHAR(id) (MIN_CHAR_COMPOSITION + (id))
-
-/* Return CMPCHAR-ID of a composite character C. */
-#define COMPOSITE_CHAR_ID(c) ((c) - MIN_CHAR_COMPOSITION)
+#define CHAR_CHARSET(c) \
+ (SINGLE_BYTE_CHAR_P (c) \
+ ? (ASCII_BYTE_P (c) \
+ ? CHARSET_ASCII \
+ : (c) < 0xA0 ? CHARSET_8_BIT_CONTROL : CHARSET_8_BIT_GRAPHIC) \
+ : ((c) < MIN_CHAR_OFFICIAL_DIMENSION2 \
+ ? CHAR_FIELD2 (c) + 0x70 \
+ : ((c) < MIN_CHAR_PRIVATE_DIMENSION2 \
+ ? CHAR_FIELD1 (c) + 0x8F \
+ : CHAR_FIELD1 (c) + 0xE0)))
+
+/* Check if two characters C1 and C2 belong to the same charset. */
+#define SAME_CHARSET_P(c1, c2) \
+ (c1 < MIN_CHAR_OFFICIAL_DIMENSION2 \
+ ? (c1 & CHAR_FIELD2_MASK) == (c2 & CHAR_FIELD2_MASK) \
+ : (c1 & CHAR_FIELD1_MASK) == (c2 & CHAR_FIELD1_MASK))