void TraceClose(void) { if (trace_fp != 0) { (void) fclose(trace_fp); (void) fflush(stdout); (void) fflush(stderr); (void) visibleChars(NULL, 0); (void) visibleIChars(NULL, 0); (void) visibleIChar(NULL, 0); trace_fp = 0; } }
/* * Translate a string to the display form. This assumes the font has the * DEC graphic characters in cells 0-31, and otherwise is ISO-8859-1. */ int xtermCharSetOut(IChar *buf, IChar *ptr, char leftset) { IChar *s; register TScreen *screen = &term->screen; int count = 0; int rightset = screen->gsets[(int)(screen->curgr)]; TRACE(("CHARSET GL=%c(G%d) GR=%c(G%d) %s\n", leftset, screen->curss ? screen->curss : screen->curgl, rightset, screen->curgr, visibleIChar(buf, ptr-buf))); for (s = buf; s < ptr; ++s) { int eight = CharOf(E2A(*s)); int seven = eight & 0x7f; int cs = (eight >= 128) ? rightset : leftset; int chr = eight; count++; switch (cs) { case 'A': /* United Kingdom set (or Latin 1) */ if ((term->flags & NATIONAL) || (screen->ansi_level <= 1)) { if (chr == 0x23) chr = XPOUND; /* UK pound sign*/ } else { chr = (seven | 0x80); } break; #if OPT_XMC_GLITCH case '?': #endif case '1': /* Alternate Character ROM standard characters */ case '2': /* Alternate Character ROM special graphics */ case 'B': /* ASCII set */ break; case '0': /* special graphics (line drawing) */ if (chr >= 0x5f && chr <= 0x7e) { #if OPT_WIDE_CHARS if (screen->utf8_mode) chr = dec2ucs[chr - 0x5f]; else #endif chr = (chr == 0x5f) ? 0x7f : (chr - 0x5f); } break; case '4': /* Dutch */ switch (chr = seven) { case 0x23: chr = XK_sterling; break; case 0x40: chr = XK_threequarters; break; case 0x5b: chr = XK_ydiaeresis; break; case 0x5c: chr = XK_onehalf; break; case 0x5d: chr = XK_bar; break; case 0x7b: chr = XK_diaeresis; break; case 0x7c: chr = XK_f; break; case 0x7d: chr = XK_onequarter; break; case 0x7e: chr = XK_acute; break; } break; case 'C': case '5': /* Finnish */ switch (chr = seven) { case 0x5b: chr = XK_Adiaeresis; break; case 0x5c: chr = XK_Odiaeresis; break; case 0x5d: chr = XK_Aring; break; case 0x5e: chr = XK_Udiaeresis; break; case 0x60: chr = XK_eacute; break; case 0x7b: chr = XK_adiaeresis; break; case 0x7c: chr = XK_odiaeresis; break; case 0x7d: chr = XK_aring; break; case 0x7e: chr = XK_udiaeresis; break; } break; case 'R': /* French */ switch (chr = seven) { case 0x23: chr = XK_sterling; break; case 0x40: chr = XK_agrave; break; case 0x5b: chr = XK_degree; break; case 0x5c: chr = XK_ccedilla; break; case 0x5d: chr = XK_section; break; case 0x7b: chr = XK_eacute; break; case 0x7c: chr = XK_ugrave; break; case 0x7d: chr = XK_egrave; break; case 0x7e: chr = XK_diaeresis; break; } break; case 'Q': /* French Canadian */ switch (chr = seven) { case 0x40: chr = XK_agrave; break; case 0x5b: chr = XK_acircumflex; break; case 0x5c: chr = XK_ccedilla; break; case 0x5d: chr = XK_ecircumflex; break; case 0x5e: chr = XK_icircumflex; break; case 0x60: chr = XK_ocircumflex; break; case 0x7b: chr = XK_eacute; break; case 0x7c: chr = XK_ugrave; break; case 0x7d: chr = XK_egrave; break; case 0x7e: chr = XK_ucircumflex; break; } break; case 'K': /* German */ switch (chr = seven) { case 0x40: chr = XK_section; break; case 0x5b: chr = XK_Adiaeresis; break; case 0x5c: chr = XK_Odiaeresis; break; case 0x5d: chr = XK_Udiaeresis; break; case 0x7b: chr = XK_adiaeresis; break; case 0x7c: chr = XK_odiaeresis; break; case 0x7d: chr = XK_udiaeresis; break; case 0x7e: chr = XK_ssharp; break; } break; case 'Y': /* Italian */ switch (chr = seven) { case 0x23: chr = XK_sterling; break; case 0x40: chr = XK_section; break; case 0x5b: chr = XK_degree; break; case 0x5c: chr = XK_ccedilla; break; case 0x5d: chr = XK_eacute; break; case 0x60: chr = XK_ugrave; break; case 0x7b: chr = XK_agrave; break; case 0x7c: chr = XK_ograve; break; case 0x7d: chr = XK_egrave; break; case 0x7e: chr = XK_igrave; break; } break; case 'E': case '6': /* Norwegian/Danish */ switch (chr = seven) { case 0x40: chr = XK_Adiaeresis; break; case 0x5b: chr = XK_AE; break; case 0x5c: chr = XK_Ooblique; break; case 0x5d: chr = XK_Aring; break; case 0x5e: chr = XK_Udiaeresis; break; case 0x60: chr = XK_adiaeresis; break; case 0x7b: chr = XK_ae; break; case 0x7c: chr = XK_oslash; break; case 0x7d: chr = XK_aring; break; case 0x7e: chr = XK_udiaeresis; break; } break; case 'Z': /* Spanish */ switch (chr = seven) { case 0x23: chr = XK_sterling; break; case 0x40: chr = XK_section; break; case 0x5b: chr = XK_exclamdown; break; case 0x5c: chr = XK_Ntilde; break; case 0x5d: chr = XK_questiondown; break; case 0x7b: chr = XK_degree; break; case 0x7c: chr = XK_ntilde; break; case 0x7d: chr = XK_ccedilla; break; } break; case 'H': case '7': /* Swedish */ switch (chr = seven) { case 0x40: chr = XK_Eacute; break; case 0x5b: chr = XK_Adiaeresis; break; case 0x5c: chr = XK_Odiaeresis; break; case 0x5d: chr = XK_Aring; break; case 0x5e: chr = XK_Udiaeresis; break; case 0x60: chr = XK_eacute; break; case 0x7b: chr = XK_adiaeresis; break; case 0x7c: chr = XK_odiaeresis; break; case 0x7d: chr = XK_aring; break; case 0x7e: chr = XK_udiaeresis; break; } break; case '=': /* Swiss */ switch (chr = seven) { case 0x23: chr = XK_ugrave; break; case 0x40: chr = XK_agrave; break; case 0x5b: chr = XK_eacute; break; case 0x5c: chr = XK_ccedilla; break; case 0x5d: chr = XK_ecircumflex; break; case 0x5e: chr = XK_icircumflex; break; case 0x5f: chr = XK_egrave; break; case 0x60: chr = XK_ocircumflex; break; case 0x7b: chr = XK_adiaeresis; break; case 0x7c: chr = XK_odiaeresis; break; case 0x7d: chr = XK_udiaeresis; break; case 0x7e: chr = XK_ucircumflex; break; } break; default: /* any character sets we don't recognize*/ count --; break; } *s = A2E(chr); } return count; }