x_find_ccl_program (fontp)
struct font_info *fontp;
{
- extern Lisp_Object Vfont_ccl_encoder_alist, Vccl_program_table;
- extern Lisp_Object Qccl_program_idx;
- extern Lisp_Object resolve_symbol_ccl_program ();
- Lisp_Object list, elt, ccl_prog, ccl_id;
+ Lisp_Object list, elt;
for (list = Vfont_ccl_encoder_alist; CONSP (list); list = XCONS (list)->cdr)
{
&& STRINGP (XCONS (elt)->car)
&& (fast_c_string_match_ignore_case (XCONS (elt)->car, fontp->name)
>= 0))
- {
- if (SYMBOLP (XCONS (elt)->cdr) &&
- (!NILP (ccl_id = Fget (XCONS (elt)->cdr, Qccl_program_idx))))
- {
- ccl_prog = XVECTOR (Vccl_program_table)->contents[XUINT (ccl_id)];
- if (!CONSP (ccl_prog)) continue;
- ccl_prog = XCONS (ccl_prog)->cdr;
- }
- else
- {
- ccl_prog = XCONS (elt)->cdr;
- if (!VECTORP (ccl_prog)) continue;
- }
-
- fontp->font_encoder
- = (struct ccl_program *) xmalloc (sizeof (struct ccl_program));
- setup_ccl_program (fontp->font_encoder,
- resolve_symbol_ccl_program (ccl_prog));
- break;
- }
+ break;
+ }
+ if (! NILP (list))
+ {
+ struct ccl_program *ccl = xmalloc (sizeof (struct ccl_program));
+
+ if (setup_ccl_program (ccl, XCONS (elt)->cdr) < 0)
+ xfree (ccl);
+ else
+ fontp->font_encoder = ccl;
}
}