extern Lisp_Object Vcharacter_attribute_table;
 
+Lisp_Object range_charset_code_point (Lisp_Object charset, Emchar ch);
+
 unsigned char charset_get_byte1 (Lisp_Object charset, Emchar ch);
 unsigned char charset_get_byte2 (Lisp_Object charset, Emchar ch);
 
          *charset = Ffind_charset (Fcar (charsets));
          if (!EQ (*charset, Qnil))
            {
-             if (!EQ (field = Fcdr (Fassq (*charset, cdef)), Qnil))
+             if (!EQ (field = Fcdr (Fassq (*charset, cdef)), Qnil) ||
+                 !EQ (field = range_charset_code_point (*charset, c), Qnil))
                {
                  Lisp_Object ret = Fcar (field);
                  if (INTP (ret))
                      return;
                    }
                }
-             else if ((*c1 = charset_get_byte1 (*charset, c)))
-               {
-                 *c2 = charset_get_byte2 (*charset, c);
-                 return;
-               }
            }
          charsets = Fcdr (charsets);         
        }
     }
+  
+  /* otherwise --- maybe for bootstrap */
   if (c < MIN_CHAR_OBS_94x94)
     {
-#if 0
-      Lisp_Object charsets = Vdefault_coded_charset_priority_list;
-      while (!EQ (charsets, Qnil))
-       {
-         *charset = Ffind_charset (Fcar (charsets));
-         if (!EQ (*charset, Qnil)
-             && (*c1 = charset_get_byte1 (*charset, c)) )
-           {
-             *c2 = charset_get_byte2 (*charset, c);
-             return;
-           }
-         charsets = Fcdr (charsets);         
-       }
-#endif
-      /* otherwise --- maybe for bootstrap */
       if (c <= MAX_CHAR_BASIC_LATIN)
        {
          *charset = Vcharset_ascii;