+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;
+
+ if(0)
+ {
+ char buf[256];
+ char * p;
+ sprintf(buf, "cc(%d,%d)", first, second);
+ for(p=buf; *p; p++)
+ c_write1(*p);
+ }
+
+ 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;
+}
+
+