+#else
+
+int
+run_flt (MText *mt, int from, int to, MFLTFont *font, char *flt_name)
+{
+ static MFLT *flt = NULL;
+ MCharTable *coverage;
+ static MFLTGlyphString gstring;
+
+ if (! flt
+ && ! (flt = mflt_get (flt_name)))
+ {
+ fprintf (stderr, "Invalid FLT name: %s\n", flt_name);
+ exit (1);
+ }
+ coverage = mflt_coverage (flt);
+ while (from < to)
+ {
+ int len = 0, i;
+
+ for (; from < to; from++)
+ if (mchartable_lookup (coverage, mtext_ref_char (mt, from)))
+ {
+ for (i = from + 1; i < to; i++)
+ if (! mchartable_lookup (coverage, mtext_ref_char (mt, i)))
+ break;
+ len = i - from;
+ break;
+ }
+ if (len > 0)
+ {
+ if (gstring.allocated < len)
+ {
+ gstring.allocated = len * 2;
+ gstring.glyphs = realloc (gstring.glyphs,
+ sizeof (MFLTGlyph) * len * 2);
+ }
+ gstring.glyph_size = sizeof (MFLTGlyph);
+ for (i = 0; i < len; i++)
+ gstring.glyphs[i].c = mtext_ref_char (mt, from + i);
+ gstring.used = len;
+ i = mflt_run (&gstring, 0, len, font, flt);
+ if (i < 0)
+ return i;
+ from += len;
+ }
+ }
+ return to;
+}