- Emchar code;
-
- if (XCHARSET_DIMENSION (ccs) == 1)
- {
- Lisp_Object eb1 = Fcar (Fcdr (cell));
- int b1;
-
- if (!INTP (eb1))
- signal_simple_error ("Invalid argument", attributes);
- b1 = XINT (eb1);
- switch (XCHARSET_CHARS (ccs))
- {
- case 94:
- code = MIN_CHAR_94
- + (XCHARSET_FINAL (ccs) - '0') * 94 + (b1 - 33);
- break;
- case 96:
- code = MIN_CHAR_96
- + (XCHARSET_FINAL (ccs) - '0') * 96 + (b1 - 32);
- break;
- default:
- abort ();
- }
- }
- else if (XCHARSET_DIMENSION (ccs) == 2)
- {
- Lisp_Object eb1 = Fcar (Fcdr (cell));
- Lisp_Object eb2 = Fcar (Fcdr (Fcdr (cell)));
- int b1, b2;
-
- if (!INTP (eb1))
- signal_simple_error ("Invalid argument", attributes);
- b1 = XINT (eb1);
- if (!INTP (eb2))
- signal_simple_error ("Invalid argument", attributes);
- b2 = XINT (eb2);
- switch (XCHARSET_CHARS (ccs))
- {
- case 94:
- code = MIN_CHAR_94x94
- + (XCHARSET_FINAL (ccs) - '0') * 94 * 94
- + (b1 - 33) * 94 + (b2 - 33);
- break;
- case 96:
- code = MIN_CHAR_96x96
- + (XCHARSET_FINAL (ccs) - '0') * 96 * 96
- + (b1 - 32) * 96 + (b2 - 32);
- break;
- default:
- abort ();
- }
- }
- else
- {
- rest = Fcdr (rest);
- continue;
- }
- character = make_char (code);