- else if (c <= MAX_CHAR_OBS_94x94)
- {
- *charset
- = CHARSET_BY_ATTRIBUTES (CHARSET_TYPE_94X94,
- ((c - MIN_CHAR_OBS_94x94) / (94 * 94)) + '@',
- CHARSET_LEFT_TO_RIGHT);
- *c1 = (((c - MIN_CHAR_OBS_94x94) / 94) % 94) + 33;
- *c2 = ((c - MIN_CHAR_OBS_94x94) % 94) + 33;
- }
- else if (c <= MAX_CHAR_94)
- {
- *charset
- = CHARSET_BY_ATTRIBUTES (CHARSET_TYPE_94,
- ((c - MIN_CHAR_94) / 94) + '0',
- CHARSET_LEFT_TO_RIGHT);
- *c1 = ((c - MIN_CHAR_94) % 94) + 33;
- *c2 = 0;
- }
- else if (c <= MAX_CHAR_96)
- {
- *charset
- = CHARSET_BY_ATTRIBUTES (CHARSET_TYPE_96,
- ((c - MIN_CHAR_96) / 96) + '0',
- CHARSET_LEFT_TO_RIGHT);
- *c1 = ((c - MIN_CHAR_96) % 96) + 32;
- *c2 = 0;
- }
- else if (c <= MAX_CHAR_94x94)
- {
- *charset
- = CHARSET_BY_ATTRIBUTES (CHARSET_TYPE_94X94,
- ((c - MIN_CHAR_94x94) / (94 * 94)) + '0',
- CHARSET_LEFT_TO_RIGHT);
- *c1 = (((c - MIN_CHAR_94x94) / 94) % 94) + 33;
- *c2 = ((c - MIN_CHAR_94x94) % 94) + 33;
- }
- else if (c <= MAX_CHAR_96x96)
- {
- *charset
- = CHARSET_BY_ATTRIBUTES (CHARSET_TYPE_96X96,
- ((c - MIN_CHAR_96x96) / (96 * 96)) + '0',
- CHARSET_LEFT_TO_RIGHT);
- *c1 = (((c - MIN_CHAR_96x96) / 96) % 96) + 32;
- *c2 = ((c - MIN_CHAR_96x96) % 96) + 32;
- }
- else
+
+ /* otherwise --- maybe for bootstrap */
+ return encode_builtin_char_1 (ch, charset);
+}
+
+#define ENCODE_CHAR(ch, charset) encode_char_1 (ch, &(charset))
+
+INLINE_HEADER void
+breakup_char_1 (Emchar c, Lisp_Object *charset, int *c1, int *c2);
+INLINE_HEADER void
+breakup_char_1 (Emchar c, Lisp_Object *charset, int *c1, int *c2)
+{
+ int code_point = encode_char_1 (c, charset);
+
+ if (code_point >= 0)