Lisp_Object Qucs;
 
 EXFUN (Fmake_char, 3);
+EXFUN (Fdecode_char, 2);
 
 DEFUN ("define-char", Fdefine_char, 1, 1, 0, /*
 Store character's ATTRIBUTES.
          if (!NILP (ccs = Ffind_charset (Fcar (cell))))
            {
              cell = Fcdr (cell);
-             character = Fmake_char (ccs, Fcar (cell),
-                                     Fcar (Fcdr (cell)));
+             if (CONSP (cell))
+               character = Fmake_char (ccs, Fcar (cell), Fcar (Fcdr (cell)));
+             else
+               character = Fdecode_char (ccs, cell);
              goto setup_attributes;
            }
          rest = Fcdr (rest);
 */
        (charset, code))
 {
+  int c;
+
   charset = Fget_charset (charset);
-  return make_char (DECODE_CHAR (charset, XINT (code)));
+  c = XINT (code);
+  if (XCHARSET_GRAPHIC (charset) == 1)
+    c &= 0x7F7F7F7F;
+  return make_char (DECODE_CHAR (charset, c));
 }
 #endif
 
                  build_string ("ISO8859-5 (Cyrillic)"),
                  build_string ("ISO8859-5 (Cyrillic)"),
                  build_string ("iso8859-5"),
-                 Qnil, MIN_CHAR_CYRILLIC, MAX_CHAR_CYRILLIC, 0, 32);
+                 Qnil,
+                 0 /* MIN_CHAR_CYRILLIC */,
+                 0 /* MAX_CHAR_CYRILLIC */, 0, 32);
   staticpro (&Vcharset_latin_iso8859_9);
   Vcharset_latin_iso8859_9 =
     make_charset (LEADING_BYTE_LATIN_ISO8859_9, Qlatin_iso8859_9, 96, 1,