*** ../pstwm2.patchlevel-1.dist/Imakefile	Mon Aug 31 11:29:35 1992
--- Imakefile	Wed Sep  2 10:22:41 1992
***************
*** 80,87 ****
  	echo '    (char *) 0 };' >>$@
  
  install::
! 	MakeDir($(LIBDIR)/wr_WR.ct/twm)
! 	$(INSTALL) -c $(INSTAPPFLAGS) sys.pstwmrc-ct $(LIBDIR)/wr_WR.ct/twm/system.pstwmrc
! 	MakeDir($(LIBDIR)/ja_JP.ujis/twm)
! 	$(INSTALL) -c $(INSTAPPFLAGS) sys.pstwmrc-uj $(LIBDIR)/ja_JP.ujis/twm/system.pstwmrc
  
--- 80,87 ----
  	echo '    (char *) 0 };' >>$@
  
  install::
! 	MakeDir($(DESTDIR)$(LIBDIR)/wr_WR.ct/twm)
! 	$(INSTALL) -c $(INSTAPPFLAGS) sys.twmrc-ct $(DESTDIR)$(LIBDIR)/wr_WR.ct/twm/system.twmrc
! 	MakeDir($(DESTDIR)$(LIBDIR)/ja_JP.ujis/twm)
! 	$(INSTALL) -c $(INSTAPPFLAGS) sys.twmrc-uj $(DESTDIR)$(LIBDIR)/ja_JP.ujis/twm/system.twmrc
  
*** ../pstwm2.patchlevel-1.dist/add_window.c	Mon Aug 31 11:21:41 1992
--- add_window.c	Wed Sep  2 10:19:26 1992
***************
*** 1,4 ****
! /* $Id: add_window.c,v 1.2 1991/10/28 06:37:41 takashi Exp $ */
  
  /*****************************************************************************/
  /**       Copyright 1988 by Evans & Sutherland Computer Corporation,        **/
--- 1,4 ----
! /* $Id: add_window.c,v 1.3 1991/11/20 08:14:37 takashi Exp $ */
  
  /*****************************************************************************/
  /**       Copyright 1988 by Evans & Sutherland Computer Corporation,        **/
***************
*** 181,187 ****
      else {
  	if (text_prop.value) text_prop.nitems = strlen(text_prop.value);
  	if (XmbTextPropertyToTextList(dpy, &text_prop, &list, &count)
! 	    != Success)
  	    tmp_win->name = NoName;
  	else {
  	    if (!(*list)) tmp_win->name = NoName;
--- 181,187 ----
      else {
  	if (text_prop.value) text_prop.nitems = strlen(text_prop.value);
  	if (XmbTextPropertyToTextList(dpy, &text_prop, &list, &count)
! 	    < Success)
  	    tmp_win->name = NoName;
  	else {
  	    if (!(*list)) tmp_win->name = NoName;
***************
*** 671,677 ****
      else {
  	if (text_prop.value) text_prop.nitems = strlen(text_prop.value);
  	if (XmbTextPropertyToTextList(dpy, &text_prop, &list, &count)
! 	    != Success)
  	    tmp_win->icon_name = tmp_win->name;
  	else {
  	    if (!(*list)) tmp_win->icon_name = tmp_win->name;
--- 671,677 ----
      else {
  	if (text_prop.value) text_prop.nitems = strlen(text_prop.value);
  	if (XmbTextPropertyToTextList(dpy, &text_prop, &list, &count)
! 	    < Success)
  	    tmp_win->icon_name = tmp_win->name;
  	else {
  	    if (!(*list)) tmp_win->icon_name = tmp_win->name;
*** ../pstwm2.patchlevel-1.dist/events.c	Mon Aug 31 11:21:42 1992
--- events.c	Wed Sep  2 10:19:26 1992
***************
*** 1,4 ****
! /* $Id: events.c,v 1.2 1991/10/28 06:37:48 takashi Exp $ */
  
  /*****************************************************************************/
  /**       Copyright 1988 by Evans & Sutherland Computer Corporation,        **/
--- 1,4 ----
! /* $Id: events.c,v 1.3 1991/11/20 08:15:39 takashi Exp $ */
  
  /*****************************************************************************/
  /**       Copyright 1988 by Evans & Sutherland Computer Corporation,        **/
***************
*** 854,860 ****
  	if (text_prop.encoding == None) return;
  	if (text_prop.value) text_prop.nitems = strlen(text_prop.value);
  	if (XmbTextPropertyToTextList(dpy, &text_prop, &list, &count)
! 	    != Success)
  	    return;
  	if (!(*list)) {
  	    prop = NoName;
--- 854,860 ----
  	if (text_prop.encoding == None) return;
  	if (text_prop.value) text_prop.nitems = strlen(text_prop.value);
  	if (XmbTextPropertyToTextList(dpy, &text_prop, &list, &count)
! 	    < Success)
  	    return;
  	if (!(*list)) {
  	    prop = NoName;
***************
*** 890,896 ****
  	if (text_prop.encoding == None) return;
  	if (text_prop.value) text_prop.nitems = strlen(text_prop.value);
  	if (XmbTextPropertyToTextList(dpy, &text_prop, &list, &count)
! 	    != Success)
  	    return;
  	if (!(*list)) {
  	    prop = NoName;
--- 890,896 ----
  	if (text_prop.encoding == None) return;
  	if (text_prop.value) text_prop.nitems = strlen(text_prop.value);
  	if (XmbTextPropertyToTextList(dpy, &text_prop, &list, &count)
! 	    < Success)
  	    return;
  	if (!(*list)) {
  	    prop = NoName;
*** ../pstwm2.patchlevel-1.dist/gram.y	Mon Aug 31 11:21:43 1992
--- gram.y	Wed Sep  2 10:19:27 1992
***************
*** 1,4 ****
! /* $Id: gram.y,v 1.2 1991/10/28 06:37:53 takashi Exp $ */
  
  /*****************************************************************************/
  /**       Copyright 1988 by Evans & Sutherland Computer Corporation,        **/
--- 1,4 ----
! /* $Id: gram.y,v 1.3 1991/11/11 08:49:43 proj Exp $ */
  
  /*****************************************************************************/
  /**       Copyright 1988 by Evans & Sutherland Computer Corporation,        **/
***************
*** 640,646 ****
  string		: WC_STRING		{ wc_ptr = (wchar_t *)malloc((wcslen($1)+1) * sizeof(wchar_t));
  					  wcscpy(wc_ptr, $1);
  					  RemoveDQuote(wc_ptr);
! 					  ptr = convert_wctomb(wc_ptr);
  					  free(wc_ptr);
  					  $$ = ptr;
  					}
--- 640,651 ----
  string		: WC_STRING		{ wc_ptr = (wchar_t *)malloc((wcslen($1)+1) * sizeof(wchar_t));
  					  wcscpy(wc_ptr, $1);
  					  RemoveDQuote(wc_ptr);
! 					  if ((ptr = convert_wctomb(wc_ptr))
! 					      == NULL) {
! 					      yyerror("unable to convert widecharacter to multibyte");
! 					      ptr = (unsigned char *)malloc(sizeof(unsigned char));
! 					      ptr[0] = '\0';
! 					  }
  					  free(wc_ptr);
  					  $$ = ptr;
  					}
*** ../pstwm2.patchlevel-1.dist/lex.c	Mon Aug 31 11:21:44 1992
--- lex.c	Wed Sep  2 10:19:27 1992
***************
*** 1,10 ****
! /* $Id: lex.c,v 1.2 1991/10/28 06:42:16 takashi Exp $ */
  
  /*
   * lexcal analyzer for Internationalized window manager       
-  *
   * X11R5 Internationalized Window Manger                     
-  * lex.c ver.1.0  Tue Sep 17 10:36:18 JST 1991              
   */
                                                            
  /* Copyright 1991 by OMRON Corporation                      
--- 1,8 ----
! /* $Id: lex.c,v 1.6 1992/01/08 12:36:44 takashi Exp $ */
  
  /*
   * lexcal analyzer for Internationalized window manager       
   * X11R5 Internationalized Window Manger                     
   */
                                                            
  /* Copyright 1991 by OMRON Corporation                      
***************
*** 38,43 ****
--- 36,42 ----
  
  extern wchar_t getnext();
  extern unsigned char *convert_wctoct();
+ extern unsigned char *convert_wctomb();
  
  int yylex()
  {
***************
*** 47,97 ****
  
      ptr = 0;
      while ((retchar = input()) != 0) {
! 	if (retchar == _atowc('\n') || retchar == _atowc('\t') ||
! 	    retchar == _atowc(' ')) { /* [\n\t ] */
! 	    ;
! 	} else if (_iswalpha(retchar) || retchar == _atowc('.') ||
! 	    retchar == _atowc('\\')) { /* [a-zA-Z\.]+ */
! 	    do {
! 		retchar = getnext(retchar);
! 	    } while (_iswalpha(retchar) || retchar == _atowc('.') ||
! 		     retchar == _atowc('\\'));
! 	    backch(retchar);
! 	    keyword = convert_wctoct(yytext);
! 	    token = parse_keyword(keyword, &yylval.num);
! 	    if (token == ERRORTOKEN) {
! 		twmrc_error_prefix();
! 		fprintf(stderr,
! 			"ignoring unknown keyword:  %s\n",
! 			yytext);
! 		ParseError = 1;
! 	    } else {
! 		return (token);
! 	    }
! 	} else if (_iswdigit(retchar)) { /* {number} -> [0-9]+ */
! 	    do {
! 		retchar = getnext(retchar);
! 	    } while (_iswdigit(retchar));
! 	    backch(retchar);
! 	    keyword = convert_wctoct(yytext);
! 	    (void)sscanf(keyword, "%d", &yylval.num);
! 	    return(NUMBER);
! 	} else if (retchar == _atowc('#')) { /* \#[^\n]*\n */
! 	    do {
! 		retchar = getnext(retchar);
! 	    } while (retchar != _atowc('\n'));
! 	    ptr = 0;
! 	    ;
! 	} else if (retchar == _atowc('"')) {
! 				/* {string} -> \"(^"]|\\.)*\" */
! 	    do {
! 		retchar = getnext(retchar);
! 	    } while (retchar != _atowc('"'));
! 	    yytext[ptr++] = retchar;
! 	    yytext[ptr] = _atowc('\0');
! 	    yylval.wc_ptr = yytext;
! 	    return (WC_STRING);
! 	} else if (retchar == _atowc('{')) { /* "{" */
  	    return (LB);
  	} else if (retchar == _atowc('}')) { /* "}" */
  	    return (RB);
--- 46,52 ----
  
      ptr = 0;
      while ((retchar = input()) != 0) {
! 	if (retchar == _atowc('{')) { 	     /* "{" */
  	    return (LB);
  	} else if (retchar == _atowc('}')) { /* "}" */
  	    return (RB);
***************
*** 109,114 ****
--- 64,93 ----
  	    return (MINUS);
  	} else if (retchar == _atowc('|')) { /* "|" */
  	    return (OR);
+ 	} else if (_iswalpha(retchar) || retchar == _atowc('.')) {
+ 					     /* [a-zA-Z\.]+ */
+ 	    do {
+ 		retchar = getnext(retchar);
+ 	    } while ((_iswalpha(retchar) || retchar == _atowc('.'))
+ 		     && retchar != 0);
+ 	    backch(retchar);
+ 	    if ((keyword = convert_wctoct(yytext)) == NULL) {
+ 		twmrc_error_prefix();
+ 		fprintf(stderr,
+ 			"unable to convert widecharcter to compoundtext\n");
+ 		ParseError = 1;
+ 		continue;
+ 	    }
+ 	    token = parse_keyword(keyword, &yylval.num);
+ 	    if (token == ERRORTOKEN) {
+ 		twmrc_error_prefix();
+ 		fprintf(stderr,
+ 			"ignoring unknown keyword:  %s\n",
+ 			convert_wctomb(yytext));
+ 		ParseError = 1;
+ 	    } else {
+ 		return (token);
+ 	    }
  	} else if (retchar == _atowc('!')) { /* "!" */
  	    yylval.num = F_EXEC;
  	    return (FSKEYWORD);
***************
*** 115,120 ****
--- 94,137 ----
  	} else if (retchar == _atowc('^')) { /* "^" */
  	    yylval.num = F_CUT;
  	    return (FSKEYWORD);
+ 	} else if (retchar == _atowc('"')) {
+ 				/* {string} -> \"([^"]|\\.)*\" */
+ 	    do {
+ 		do {
+ 		    retchar = getnext(retchar);
+ 		    next_chk:
+ 		    if (retchar == _atowc('"')) {
+ 			yytext[ptr++] = retchar;
+ 			yytext[ptr] = _atowc('\0');
+ 			yylval.wc_ptr = yytext;
+ 			return (WC_STRING);
+ 		    }
+ 		} while (retchar != _atowc('\\') && retchar != 0);
+ 		retchar = getnext(retchar);
+ 	    } while (retchar != _atowc('\n') && retchar != 0);
+ 	    ptr--;
+ 	    retchar = input();
+ 	    goto next_chk;
+ 	} else  if (_iswdigit(retchar)) { /* {number} -> [0-9]+ */
+ 	    do {
+ 		retchar = getnext(retchar);
+ 	    } while (_iswdigit(retchar) && retchar != 0);
+ 	    backch(retchar);
+ 	    keyword = convert_wctoct(yytext);
+ 	    (void)sscanf(keyword, "%d", &yylval.num);
+ 	    return(NUMBER);
+ 	} else if (retchar == _atowc('#')) { /* \#[^\n]*\n */
+ 	    do {
+ 		retchar = getnext(retchar);
+ 	    } while (retchar != _atowc('\n') && retchar != 0);
+ 	    ptr = 0;
+ 	} else if (retchar == _atowc('\n') || retchar == _atowc('\t') ||
+ 		   retchar == _atowc(' ')) { /* [\n\t ] */
+ 	    ;
+ 	} else {
+ 	    twmrc_error_prefix();
+ 	    fprintf (stderr, "ignoring character \"%s\"\n", yytext);
+ 	    ParseError = 1;
  	}
      }
  }
*** ../pstwm2.patchlevel-1.dist/parse.c	Mon Aug 31 11:21:45 1992
--- parse.c	Wed Sep  2 10:19:28 1992
***************
*** 1,4 ****
! /* $Id: parse.c,v 1.2 1991/10/28 06:42:02 takashi Exp $ */
  
  /*****************************************************************************/
  /**       Copyright 1988 by Evans & Sutherland Computer Corporation,        **/
--- 1,4 ----
! /* $Id: parse.c,v 1.5 1992/01/08 12:35:08 takashi Exp $ */
  
  /*****************************************************************************/
  /**       Copyright 1988 by Evans & Sutherland Computer Corporation,        **/
***************
*** 76,82 ****
  int ConstrainedMoveTime = 400;		/* milliseconds, event times */
  
  static wchar_t twmFileInput();
! static int twmStringListInput();
  void twmUnput();
  int (*twmInputFunc)();
  
--- 76,82 ----
  int ConstrainedMoveTime = 400;		/* milliseconds, event times */
  
  static wchar_t twmFileInput();
! static wchar_t twmStringListInput();
  void twmUnput();
  int (*twmInputFunc)();
  
***************
*** 316,337 ****
  
      while (ptr == len)
      {
! 	if (wcbuff)
  	    free(wcbuff);
  	if (fgets(buff, BUF_LEN, twmrc) == NULL)
  	    return 0;
  
! 	wcbuff = convert_mbtowc(buff);
  	yylineno++;
- 
  	ptr = 0;
- 	len = wcslen(wcbuff); 
      }
      return (wcbuff[ptr++]);
  }
  
! static int twmStringListInput()
  {
      if (overflowlen) return (int) overflowbuff[--overflowlen];
  
      /*
--- 316,346 ----
  
      while (ptr == len)
      {
! 	if (wcbuff) {
  	    free(wcbuff);
+ 	    *wcbuff = NULL;
+ 	}
  	if (fgets(buff, BUF_LEN, twmrc) == NULL)
  	    return 0;
  
! 	if ((wcbuff = convert_mbtowc(buff)) == NULL) {
! 	    twmrc_error_prefix();
! 	    fprintf (stderr, "unable to convert multibyte to widecharacter\n");
! 	    len = 0;
! 	    ParseError = 1;
! 	} else {
! 	    len = wcslen(wcbuff); 
! 	}
  	yylineno++;
  	ptr = 0;
      }
      return (wcbuff[ptr++]);
  }
  
! static wchar_t twmStringListInput()
  {
+     wchar_t	*wc = NULL;
+ 
      if (overflowlen) return (int) overflowbuff[--overflowlen];
  
      /*
***************
*** 338,348 ****
       * return the character currently pointed to
       */
      if (currentString) {
! 	unsigned int c = (unsigned int) *currentString++;
! 
! 	if (c) return c;		/* if non-nul char */
  	currentString = *++stringListSource;  /* advance to next bol */
! 	return '\n';			/* but say that we hit last eol */
      }
      return 0;				/* eof */
  }
--- 347,359 ----
       * return the character currently pointed to
       */
      if (currentString) {
! 	if ((wc = convert_mbtowc(currentString++)) == NULL) {
! 	    twmrc_error_prefix();
! 	    fprintf (stderr, "unable to convert multibyte to widecharacter\n");
! 	}
! 	if (*wc) return *wc;		/* if non-nul char */
  	currentString = *++stringListSource;  /* advance to next bol */
! 	return atowc('\n');		/* but say that we hit last eol */
      }
      return 0;				/* eof */
  }
*** ../pstwm2.patchlevel-1.dist/patchlevel.h	Mon Aug 31 11:21:45 1992
--- patchlevel.h	Wed Sep  2 10:19:29 1992
***************
*** 1 ****
! #define PATCHLEVEL 1
--- 1 ----
! #define PATCHLEVEL 2
*** ../pstwm2.patchlevel-1.dist/strutil.c	Mon Aug 31 11:21:49 1992
--- strutil.c	Wed Sep  2 10:19:30 1992
***************
*** 1,4 ****
! /* $Id: strutil.c,v 1.2 1991/10/28 06:42:13 takashi Exp $ */
  
  /*
   * string utility file for Internationalized window manager       
--- 1,4 ----
! /* $Id: strutil.c,v 1.3 1991/11/11 08:49:51 proj Exp $ */
  
  /*
   * string utility file for Internationalized window manager       
***************
*** 28,35 ****
      
      wc_len = mb_len = strlen(mb_str);
      wc_str = (wchar_t *)malloc((wc_len + 1) * sizeof(wchar_t));
!     _XConvertMBToWC(NULL, (unsigned char *)mb_str, mb_len,
! 		    (wchar *)wc_str, &wc_len, &scanned_bytes, (_State *)NULL);
      wc_str[wc_len] = WNULL;
      return (wc_str);
  }
--- 28,39 ----
      
      wc_len = mb_len = strlen(mb_str);
      wc_str = (wchar_t *)malloc((wc_len + 1) * sizeof(wchar_t));
!     if (_XConvertMBToWC(NULL, (unsigned char *)mb_str, mb_len,
! 			(wchar *)wc_str, &wc_len, &scanned_bytes,
! 			(_State *)NULL) < 0) {
! 	free((char *)wc_str);
! 	return(NULL);
!     }
      wc_str[wc_len] = WNULL;
      return (wc_str);
  }
***************
*** 45,52 ****
      wc_len = wcslen(wc_str);
      mb_len = wc_len * 6 + 1;
      mb_str = (char *)malloc(mb_len * sizeof(char));
!     _XConvertWCToMB(NULL, (wchar *)wc_str, wc_len,
! 		    (unsigned char *)mb_str, &mb_len, &scanned_len);
      mb_str[mb_len] = '\0';
      return (mb_str);
  }
--- 49,59 ----
      wc_len = wcslen(wc_str);
      mb_len = wc_len * 6 + 1;
      mb_str = (char *)malloc(mb_len * sizeof(char));
!     if (_XConvertWCToMB(NULL, (wchar *)wc_str, wc_len,
! 			(unsigned char *)mb_str, &mb_len, &scanned_len) < 0) {
! 	free(mb_str);
! 	return(NULL);
!     }
      mb_str[mb_len] = '\0';
      return (mb_str);
  }
***************
*** 62,69 ****
      wc_len = wcslen(wc_str);
      ct_bytes = wc_len * 6 + 1;
      ct_str = (char *)malloc(ct_bytes * sizeof(char));
!     _XConvertWCToCT(NULL, (wchar *)wc_str, wc_len,
! 		    (unsigned char *)ct_str, &ct_bytes, &scanned_len);
      ct_str[ct_bytes] = '\0';
      return (ct_str);
  }
--- 69,79 ----
      wc_len = wcslen(wc_str);
      ct_bytes = wc_len * 6 + 1;
      ct_str = (char *)malloc(ct_bytes * sizeof(char));
!     if (_XConvertWCToCT(NULL, (wchar *)wc_str, wc_len,
! 			(unsigned char *)ct_str, &ct_bytes, &scanned_len) < 0) {
! 	free(ct_str);
! 	return(NULL);
!     }
      ct_str[ct_bytes] = '\0';
      return (ct_str);
  }
*** ../pstwm2.patchlevel-1.dist/twm.c	Mon Aug 31 11:21:53 1992
--- twm.c	Wed Sep  2 10:19:31 1992
***************
*** 1,4 ****
! /* $Id: twm.c,v 1.2 1991/10/28 06:42:59 takashi Exp $ */
  
  /*****************************************************************************/
  /**       Copyright 1988 by Evans & Sutherland Computer Corporation,        **/
--- 1,4 ----
! /* $Id: twm.c,v 1.3 1992/03/06 14:48:14 takashi Exp $ */
  
  /*****************************************************************************/
  /**       Copyright 1988 by Evans & Sutherland Computer Corporation,        **/
***************
*** 783,793 ****
  
  CreateFonts ()
  {
!     GetFont(&Scr->TitleBarFontSet);
!     GetFont(&Scr->MenuFontSet);
!     GetFont(&Scr->IconFontSet);
!     GetFont(&Scr->SizeFontSet);
!     GetFont(&Scr->IconManagerFontSet);
      GetFont(&Scr->DefaultFontSet);
      GetFont(&Scr->PSTitleFontSet);
      GetFont(&Scr->PSCBFontSet);
--- 783,793 ----
  
  CreateFonts ()
  {
!     GetFontSet(&Scr->TitleBarFontSet);
!     GetFontSet(&Scr->MenuFontSet);
!     GetFontSet(&Scr->IconFontSet);
!     GetFontSet(&Scr->SizeFontSet);
!     GetFontSet(&Scr->IconManagerFontSet);
      GetFont(&Scr->DefaultFontSet);
      GetFont(&Scr->PSTitleFontSet);
      GetFont(&Scr->PSCBFontSet);
*** ../pstwm2.patchlevel-1.dist/util.c	Mon Aug 31 11:21:54 1992
--- util.c	Wed Sep  2 10:19:31 1992
***************
*** 1,4 ****
! /* $Id: util.c,v 1.2 1991/10/28 06:38:09 takashi Exp $ */
  
  /*****************************************************************************/
  /**       Copyright 1988 by Evans & Sutherland Computer Corporation,        **/
--- 1,4 ----
! /* $Id: util.c,v 1.6 1992/03/17 02:09:41 takashi Exp $ */
  
  /*****************************************************************************/
  /**       Copyright 1988 by Evans & Sutherland Computer Corporation,        **/
***************
*** 654,686 ****
      *what = color.pixel;
  }
  
! GetFont(font)
  MyFontSet *font;
  {
      if (font->font != NULL)
  	XFreeFont(dpy, font->font);
  
!     GetFontSet(font);
!     if (font->font == NULL) {
! 	fprintf (stderr, "%s:  unable to open font list \"%s\"\n",
! 		 ProgramName, font->name);
! 	if (Scr->DefaultFontSet.name)
! 	    font->name = Scr->DefaultFontSet.name;
! 	else
! 	    font->name = "fixed";
! 	GetFontSet(font);
! 	if (font->font == NULL) {
! 	    fprintf (stderr, "%s:  unable to open font list \"%s\"\n",
! 		     ProgramName, font->name);
  	    exit(1);
  	}
      }
! 
      font->height = font->font->ascent + font->font->descent;
      font->y = font->font->ascent;
  }
  
! GetFontSet(font)
  MyFontSet *font;
  {
      char	**missing_charset_list, *def_string;
--- 654,713 ----
      *what = color.pixel;
  }
  
! GetFontSet(font)
  MyFontSet *font;
  {
+     char	**missing_charset_list, *def_string;
+     int		missing_charset_count;
+     char	**dummy;
+     XFontStruct **fs_list;
+     char 	*deffontname = "fixed";
+     int		namecnt;
+ 
      if (font->font != NULL)
  	XFreeFont(dpy, font->font);
  
!     namecnt = strlen(ProgramName);
!     if ((font->fontset = XCreateFontSet(dpy, font->name,
!                         &missing_charset_list, &missing_charset_count,
! 			&def_string)) == NULL) {
! 	if (Scr->DefaultFontSet.name) {
! 	    deffontname = Scr->DefaultFontSet.name;
! 	}
! 	fprintf(stderr, 
! 		"%s :\n  unable to create fontset \"%s\".\n  And %s retry to create fontset using \"%s\".\n",
! 		ProgramName, font->name, ProgramName, deffontname);
! 	if ((font->fontset = XCreateFontSet(dpy, deffontname,
! 					    &missing_charset_list,
! 					    &missing_charset_count,
! 					    &def_string)) == NULL) {
! 	    fprintf (stderr, "%s: unable to create fontset \"%s\".\n",
! 		     ProgramName, deffontname);
  	    exit(1);
  	}
+ 	if (missing_charset_count) {
+ 	    XFreeStringList(missing_charset_list);
+ 	}
+     } else {
+ 	if (missing_charset_count) {
+ 	    int i;
+ 	    fprintf(stderr,
+ 		    "%s :\n  The following charset%sn\'t found in a list\n  of the base font names \"%s\".\n",
+ 		    ProgramName, missing_charset_count == 1 ? " is" : "s are",
+ 		    font->name);
+ 	    for (i = 0; i < missing_charset_count; i++) {
+ 		fprintf(stderr, "\t\"%s\"\n", missing_charset_list[i]);
+ 	    }
+ 	    XFreeStringList(missing_charset_list);
+ 	}
      }
!     XFontsOfFontSet(font->fontset, &fs_list, &dummy);
!     font->font = fs_list[0];
      font->height = font->font->ascent + font->font->descent;
      font->y = font->font->ascent;
  }
  
! GetFont(font)
  MyFontSet *font;
  {
      char	**missing_charset_list, *def_string;
***************
*** 688,709 ****
      char	**dummy;
      XFontStruct **fs_list;
  
!     font->fontset = XCreateFontSet(dpy, font->name,
                          &missing_charset_list, &missing_charset_count,
! 			&def_string);
!     if(missing_charset_count) {
! 	int i;
! 	for (i = 0; i < missing_charset_count; i++) {
! 	    fprintf(stderr,
! 		    "%s : unable to open font \"%s\".... \n",
! 		    ProgramName, missing_charset_list[i]);
! 	}
  	XFreeStringList(missing_charset_list);
      }
      XFontsOfFontSet(font->fontset, &fs_list, &dummy);
      font->font = fs_list[0];
  }
- 
  
  /*
   * SetFocus - separate routine to set focus to make things more understandable
--- 715,738 ----
      char	**dummy;
      XFontStruct **fs_list;
  
!     if (font->font != NULL)
! 	XFreeFont(dpy, font->font);
! 
!     if ((font->fontset = XCreateFontSet(dpy, font->name,
                          &missing_charset_list, &missing_charset_count,
! 			&def_string)) == NULL) {
! 	fprintf (stderr, "%s:  unable to create fontset \"%s\"\n",
! 		 ProgramName, font->name);
! 	exit(1);
!     }
!     if (missing_charset_count) {
  	XFreeStringList(missing_charset_list);
      }
      XFontsOfFontSet(font->fontset, &fs_list, &dummy);
      font->font = fs_list[0];
+     font->height = font->font->ascent + font->font->descent;
+     font->y = font->font->ascent;
  }
  
  /*
   * SetFocus - separate routine to set focus to make things more understandable
