+ static const wchar_t unitab_xterm_std[32] = {
+ 0x2666, 0x2592, 0x2409, 0x240c, 0x240d, 0x240a, 0x00b0, 0x00b1,
+ 0x2424, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c, 0x23ba,
+ 0x23bb, 0x2500, 0x23bc, 0x23bd, 0x251c, 0x2524, 0x2534, 0x252c,
+ 0x2502, 0x2264, 0x2265, 0x03c0, 0x2260, 0x00a3, 0x00b7, 0x0020
+ };
+ static const wchar_t unitab_xterm_poorman[32] =
+ L"*#****o~**+++++-----++++|****L. ";
+
+ const wchar_t *ptr;
+
+ if (vtmode == VT_POORMAN)
+ ptr = unitab_xterm_poorman;
+ else
+ ptr = unitab_xterm_std;
+
+ if (i >= 0x5F && i < 0x7F)
+ ucsdata->unitab_xterm[i] = ptr[i & 0x1F];
+ else
+ ucsdata->unitab_xterm[i] = ucsdata->unitab_line[i];
+ }
+
+ /*
+ * Set up unitab_scoacs. The SCO Alternate Character Set is
+ * simply CP437.
+ */
+ for (i = 0; i < 256; i++) {
+ char c[1], *p;
+ wchar_t wc[1];
+ int len;
+ c[0] = i;
+ p = c;
+ len = 1;
+ if (1 == charset_to_unicode(&p, &len, wc, 1, CS_CP437, NULL, L"", 0))
+ ucsdata->unitab_scoacs[i] = wc[0];
+ else
+ ucsdata->unitab_scoacs[i] = 0xFFFD;
+ }
+
+ /*
+ * Find the control characters in the line codepage. For
+ * direct-to-font mode using the D800 hack, we assume 00-1F and
+ * 7F are controls, but allow 80-9F through. (It's as good a
+ * guess as anything; and my bet is that half the weird fonts
+ * used in this way will be IBM or MS code pages anyway.)
+ */
+ for (i = 0; i < 256; i++) {
+ int lineval = ucsdata->unitab_line[i];
+ if (lineval < ' ' || (lineval >= 0x7F && lineval < 0xA0) ||
+ (lineval >= 0xD800 && lineval < 0xD820) || (lineval == 0xD87F))
+ ucsdata->unitab_ctrl[i] = i;
+ else
+ ucsdata->unitab_ctrl[i] = 0xFF;