+ 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;
+ }
+ return nc;