+ pts[1].y = pts[2].y = y + font_height - 1;
+ oldpen = SelectObject(hdc, CreatePen(PS_SOLID, 0, colours[23]));
+ Polyline(hdc, pts, 5);
+ oldpen = SelectObject(hdc, oldpen);
+ DeleteObject(oldpen);
+ }
+ if ((attr & (ATTR_ACTCURS | ATTR_PASCURS)) && cfg.cursor_type != 0) {
+ int startx, starty, dx, dy, length, i;
+ if (cfg.cursor_type == 1) {
+ startx = x;
+ starty = y + descent;
+ dx = 1;
+ dy = 0;
+ length = fnt_width;
+ } else {
+ int xadjust = 0;
+ if (attr & ATTR_RIGHTCURS)
+ xadjust = fnt_width - 1;
+ startx = x + xadjust;
+ starty = y;
+ dx = 0;
+ dy = 1;
+ length = font_height;
+ }
+ if (attr & ATTR_ACTCURS) {
+ HPEN oldpen;
+ oldpen =
+ SelectObject(hdc, CreatePen(PS_SOLID, 0, colours[23]));
+ MoveToEx(hdc, startx, starty, NULL);
+ LineTo(hdc, startx + dx * length, starty + dy * length);
+ oldpen = SelectObject(hdc, oldpen);
+ DeleteObject(oldpen);
+ } else {
+ for (i = 0; i < length; i++) {
+ if (i % 2 == 0) {
+ SetPixel(hdc, startx, starty, colours[23]);
+ }
+ startx += dx;
+ starty += dy;
+ }
+ }
+ }
+}
+
+static int check_compose(int first, int second)
+{
+
+ static char *composetbl[] = {
+ "++#", "AA@", "(([", "//\\", "))]", "(-{", "-)}", "/^|", "!!¡",
+ "C/¢",
+ "C|¢", "L-£", "L=£", "XO¤", "X0¤", "Y-¥", "Y=¥", "||¦", "SO§",
+ "S!§",
+ "S0§", "\"\"¨", "CO©", "C0©", "A_ª", "<<«", ",-¬", "--", "RO®",
+ "-^¯", "0^°", "+-±", "2^²", "3^³", "''´", "/Uµ", "P!¶", ".^·",
+ ",,¸",
+ "1^¹", "O_º", ">>»", "14¼", "12½", "34¾", "??¿", "`AÀ", "'AÁ",
+ "^AÂ",
+ "~AÃ", "\"AÄ", "*AÅ", "AEÆ", ",CÇ", "`EÈ", "'EÉ", "^EÊ", "\"EË",
+ "`IÌ", "'IÍ", "^IÎ", "\"IÏ", "-DÐ", "~NÑ", "`OÒ", "'OÓ", "^OÔ",
+ "~OÕ", "\"OÖ", "XX×", "/OØ", "`UÙ", "'UÚ", "^UÛ", "\"UÜ", "'YÝ",
+ "HTÞ", "ssß", "`aà", "'aá", "^aâ", "~aã", "\"aä", "*aå", "aeæ",
+ ",cç",
+ "`eè", "'eé", "^eê", "\"eë", "`iì", "'ií", "^iî", "\"iï", "-dð",
+ "~nñ",
+ "`oò", "'oó", "^oô", "~oõ", "\"oö", ":-÷", "o/ø", "`uù", "'uú",
+ "^uû",
+ "\"uü", "'yý", "htþ", "\"yÿ",
+ 0
+ };
+
+ char **c;
+ static int recurse = 0;
+ int nc = -1;
+
+ for (c = composetbl; *c; c++) {
+ if ((*c)[0] == first && (*c)[1] == second) {
+ return (*c)[2] & 0xFF;
+ }
+ }
+
+ if (recurse == 0) {
+ recurse = 1;
+ nc = check_compose(second, first);
+ if (nc == -1)
+ nc = check_compose(toupper(first), toupper(second));
+ if (nc == -1)
+ nc = check_compose(toupper(second), toupper(first));
+ recurse = 0;