Ejemplo n.º 1
0
int main( int argc, char * argv[] )
{

  EbcdicToAscii( junk, 4 );

  {
    unsigned char c;
    for( c = 0; c < 129; ++ c ) {
      if( isprint( c ) ) {
	printf( "#define E_%c %04o /* '%c' - %d */\n", c, A2E( c ), c, c );
      }
    }
  }
  return( 0 );
}
Ejemplo n.º 2
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;
}