changeset 96133:e7d9b9d2e1ef

[OLD_FONT]: Remove obsolete font code.
author Jason Rumney <jasonr@gnu.org>
date Fri, 20 Jun 2008 21:46:05 +0000
parents 94707ef52511
children d143e6de14ec
files src/ChangeLog src/w32fns.c src/w32gui.h src/w32term.c src/w32term.h
diffstat 5 files changed, 3 insertions(+), 2062 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Fri Jun 20 20:00:14 2008 +0000
+++ b/src/ChangeLog	Fri Jun 20 21:46:05 2008 +0000
@@ -1,5 +1,8 @@
 2008-06-20  Jason Rumney  <jasonr@gnu.org>
 
+        * w32fns.c, w32term.c, w32term.h, w32gui.h [OLD_FONT]: Remove
+        obsolete font code.
+
         * w32font.c (font_matches_spec): Use csb bitfield from font signature
         to determine language support.
 
--- a/src/w32fns.c	Fri Jun 20 20:00:14 2008 +0000
+++ b/src/w32fns.c	Fri Jun 20 21:46:05 2008 +0000
@@ -71,9 +71,6 @@
 extern int w32_console_toggle_lock_key P_ ((int, Lisp_Object));
 extern void w32_menu_display_help P_ ((HWND, HMENU, UINT, UINT));
 extern void w32_free_menu_strings P_ ((HWND));
-#if OLD_FONT
-extern XCharStruct *w32_per_char_metric P_ ((XFontStruct *, wchar_t *, int));
-#endif
 
 extern int quit_char;
 
@@ -4647,335 +4644,6 @@
 }
 
 
-#if OLD_FONT
-
-/* Return the charset portion of a font name.  */
-char *
-xlfd_charset_of_font (char * fontname)
-{
-  char *charset, *encoding;
-
-  encoding = strrchr (fontname, '-');
-  if (!encoding || encoding == fontname)
-    return NULL;
-
-  for (charset = encoding - 1; charset >= fontname; charset--)
-    if (*charset == '-')
-      break;
-
-  if (charset == fontname || strcmp (charset, "-*-*") == 0)
-    return NULL;
-
-  return charset + 1;
-}
-
-struct font_info *w32_load_bdf_font (struct frame *f, char *fontname,
-                                     int size, char* filename);
-static Lisp_Object w32_list_bdf_fonts (Lisp_Object pattern, int max_names);
-static BOOL w32_to_x_font (LOGFONT * lplf, char * lpxstr, int len,
-			   char * charset);
-static BOOL x_to_w32_font (char *lpxstr, LOGFONT *lplogfont);
-
-static struct font_info *
-w32_load_system_font (f, fontname, size)
-     struct frame *f;
-     char * fontname;
-     int size;
-{
-  struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f);
-  Lisp_Object font_names;
-
-  /* Get a list of all the fonts that match this name.  Once we
-     have a list of matching fonts, we compare them against the fonts
-     we already have loaded by comparing names.  */
-  font_names = w32_list_fonts (f, build_string (fontname), size, 100);
-
-  if (!NILP (font_names))
-  {
-      Lisp_Object tail;
-      int i;
-
-      /* First check if any are already loaded, as that is cheaper
-         than loading another one. */
-      for (i = 0; i < dpyinfo->n_fonts; i++)
-	for (tail = font_names; CONSP (tail); tail = XCDR (tail))
-	  if (dpyinfo->font_table[i].name
-              && (!strcmp (dpyinfo->font_table[i].name,
-                           SDATA (XCAR (tail)))
-                  || !strcmp (dpyinfo->font_table[i].full_name,
-                              SDATA (XCAR (tail)))))
-	    return (dpyinfo->font_table + i);
-
-      fontname = (char *) SDATA (XCAR (font_names));
-    }
-  else if (w32_strict_fontnames)
-    {
-      /* If EnumFontFamiliesEx was available, we got a full list of
-         fonts back so stop now to avoid the possibility of loading a
-         random font.  If we had to fall back to EnumFontFamilies, the
-         list is incomplete, so continue whether the font we want was
-         listed or not. */
-      HMODULE gdi32 = GetModuleHandle ("gdi32.dll");
-      FARPROC enum_font_families_ex
-        = GetProcAddress (gdi32, "EnumFontFamiliesExA");
-      if (enum_font_families_ex)
-        return NULL;
-    }
-
-  /* Load the font and add it to the table. */
-  {
-    char *full_name, *encoding, *charset;
-    XFontStruct *font;
-    struct font_info *fontp;
-    LOGFONT lf;
-    BOOL ok;
-    int codepage;
-    int i;
-
-    if (!fontname || !x_to_w32_font (fontname, &lf))
-      return (NULL);
-
-    if (!*lf.lfFaceName)
-        /* If no name was specified for the font, we get a random font
-           from CreateFontIndirect - this is not particularly
-           desirable, especially since CreateFontIndirect does not
-           fill out the missing name in lf, so we never know what we
-           ended up with. */
-      return NULL;
-
-    lf.lfQuality = DEFAULT_QUALITY;
-
-    font = (XFontStruct *) xmalloc (sizeof (XFontStruct));
-    bzero (font, sizeof (*font));
-
-    /* Set bdf to NULL to indicate that this is a Windows font.  */
-    font->bdf = NULL;
-
-    BLOCK_INPUT;
-
-    font->hfont = CreateFontIndirect (&lf);
-
-    if (font->hfont == NULL)
-      {
-	ok = FALSE;
-      }
-    else
-      {
-	HDC hdc;
-	HANDLE oldobj;
-
-        codepage = w32_codepage_for_font (fontname);
-
-	hdc = GetDC (dpyinfo->root_window);
-	oldobj = SelectObject (hdc, font->hfont);
-
-	ok = GetTextMetrics (hdc, &font->tm);
-        if (codepage == CP_UNICODE)
-          font->double_byte_p = 1;
-        else
-	  {
-	    /* Unfortunately, some fonts (eg. MingLiU, a big5 ttf font)
-               don't report themselves as double byte fonts, when
-               patently they are.  So instead of trusting
-               GetFontLanguageInfo, we check the properties of the
-               codepage directly, since that is ultimately what we are
-               working from anyway.  */
-	    /* font->double_byte_p = GetFontLanguageInfo (hdc) & GCP_DBCS; */
-	    CPINFO cpi = {0};
-	    GetCPInfo (codepage, &cpi);
-	    font->double_byte_p = cpi.MaxCharSize > 1;
-	  }
-
-	SelectObject (hdc, oldobj);
-	ReleaseDC (dpyinfo->root_window, hdc);
-        /* Fill out details in lf according to the font that was
-           actually loaded.  */
-        lf.lfHeight = font->tm.tmInternalLeading - font->tm.tmHeight;
-        lf.lfWidth = font->tm.tmMaxCharWidth;
-        lf.lfWeight = font->tm.tmWeight;
-        lf.lfItalic = font->tm.tmItalic;
-        lf.lfCharSet = font->tm.tmCharSet;
-        lf.lfPitchAndFamily = ((font->tm.tmPitchAndFamily & TMPF_FIXED_PITCH)
-                               ? VARIABLE_PITCH : FIXED_PITCH);
-        lf.lfOutPrecision = ((font->tm.tmPitchAndFamily & TMPF_VECTOR)
-                             ? OUT_STROKE_PRECIS : OUT_STRING_PRECIS);
-
-	w32_cache_char_metrics (font);
-      }
-
-    UNBLOCK_INPUT;
-
-    if (!ok)
-      {
-	w32_unload_font (dpyinfo, font);
-	return (NULL);
-      }
-
-    /* Find a free slot in the font table.  */
-    for (i = 0; i < dpyinfo->n_fonts; ++i)
-      if (dpyinfo->font_table[i].name == NULL)
-	break;
-
-    /* If no free slot found, maybe enlarge the font table.  */
-    if (i == dpyinfo->n_fonts
-	&& dpyinfo->n_fonts == dpyinfo->font_table_size)
-      {
-	int sz;
-	dpyinfo->font_table_size = max (16, 2 * dpyinfo->font_table_size);
-	sz = dpyinfo->font_table_size * sizeof *dpyinfo->font_table;
-	dpyinfo->font_table
-	  = (struct font_info *) xrealloc (dpyinfo->font_table, sz);
-      }
-
-    fontp = dpyinfo->font_table + i;
-    if (i == dpyinfo->n_fonts)
-      ++dpyinfo->n_fonts;
-
-    /* Now fill in the slots of *FONTP.  */
-    BLOCK_INPUT;
-    bzero (fontp, sizeof (*fontp));
-    fontp->font = font;
-    fontp->font_idx = i;
-    fontp->name = (char *) xmalloc (strlen (fontname) + 1);
-    bcopy (fontname, fontp->name, strlen (fontname) + 1);
-
-    if ((lf.lfPitchAndFamily & 0x03) == FIXED_PITCH)
-      {
-	/* Fixed width font.  */
-	fontp->average_width = fontp->space_width = FONT_AVG_WIDTH (font);
-      }
-    else
-      {
-	wchar_t space = 32;
-	XCharStruct* pcm;
-	pcm = w32_per_char_metric (font, &space, ANSI_FONT);
-	if (pcm)
-	  fontp->space_width = pcm->width;
-	else
-	  fontp->space_width = FONT_AVG_WIDTH (font);
-
-	fontp->average_width = font->tm.tmAveCharWidth;
-      }
-
-    fontp->charset = -1;
-    charset = xlfd_charset_of_font (fontname);
-
-  /* Cache the W32 codepage for a font.  This makes w32_encode_char
-     (called for every glyph during redisplay) much faster.  */
-    fontp->codepage = codepage;
-
-    /* Work out the font's full name.  */
-    full_name = (char *)xmalloc (100);
-    if (full_name && w32_to_x_font (&lf, full_name, 100, charset))
-        fontp->full_name = full_name;
-    else
-      {
-        /* If all else fails - just use the name we used to load it.  */
-        xfree (full_name);
-        fontp->full_name = fontp->name;
-      }
-
-    fontp->size = FONT_WIDTH (font);
-    fontp->height = FONT_HEIGHT (font);
-
-    /* The slot `encoding' specifies how to map a character
-       code-points (0x20..0x7F or 0x2020..0x7F7F) of each charset to
-       the font code-points (0:0x20..0x7F, 1:0xA0..0xFF), or
-       (0:0x20..0x7F, 1:0xA0..0xFF,
-       (0:0x2020..0x7F7F, 1:0xA0A0..0xFFFF, 3:0x20A0..0x7FFF,
-       2:0xA020..0xFF7F).  For the moment, we don't know which charset
-       uses this font.  So, we set information in fontp->encoding_type
-       which is never used by any charset.  If mapping can't be
-       decided, set FONT_ENCODING_NOT_DECIDED.  */
-
-    /* SJIS fonts need to be set to type 4, all others seem to work as
-       type FONT_ENCODING_NOT_DECIDED.  */
-    encoding = strrchr (fontp->name, '-');
-    if (encoding && strnicmp (encoding+1, "sjis", 4) == 0)
-      fontp->encoding_type = 4;
-    else
-      fontp->encoding_type = FONT_ENCODING_NOT_DECIDED;
-
-    /* The following three values are set to 0 under W32, which is
-       what they get set to if XGetFontProperty fails under X.  */
-    fontp->baseline_offset = 0;
-    fontp->relative_compose = 0;
-    fontp->default_ascent = 0;
-
-    /* Set global flag fonts_changed_p to non-zero if the font loaded
-       has a character with a smaller width than any other character
-       before, or if the font loaded has a smaller height than any
-       other font loaded before.  If this happens, it will make a
-       glyph matrix reallocation necessary.  */
-    fonts_changed_p |= x_compute_min_glyph_bounds (f);
-    UNBLOCK_INPUT;
-    return fontp;
-  }
-}
-
-/* Load font named FONTNAME of size SIZE for frame F, and return a
-   pointer to the structure font_info while allocating it dynamically.
-   If loading fails, return NULL. */
-struct font_info *
-w32_load_font (f, fontname, size)
-     struct frame *f;
-     char * fontname;
-     int size;
-{
-  Lisp_Object bdf_fonts;
-  struct font_info *retval = NULL;
-  struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f);
-
-  bdf_fonts = w32_list_bdf_fonts (build_string (fontname), 1);
-
-  while (!retval && CONSP (bdf_fonts))
-    {
-      char *bdf_name, *bdf_file;
-      Lisp_Object bdf_pair;
-      int i;
-
-      bdf_name = SDATA (XCAR (bdf_fonts));
-      bdf_pair = Fassoc (XCAR (bdf_fonts), Vw32_bdf_filename_alist);
-      bdf_file = SDATA (XCDR (bdf_pair));
-
-      /* If the font is already loaded, do not load it again.  */
-      for (i = 0; i < dpyinfo->n_fonts; i++)
-	{
-	  if ((dpyinfo->font_table[i].name
-	       && !strcmp (dpyinfo->font_table[i].name, bdf_name))
-	      || (dpyinfo->font_table[i].full_name
-		  && !strcmp (dpyinfo->font_table[i].full_name, bdf_name)))
-	    return dpyinfo->font_table + i;
-	}
-
-      retval = w32_load_bdf_font (f, bdf_name, size, bdf_file);
-
-      bdf_fonts = XCDR (bdf_fonts);
-    }
-
-  if (retval)
-    return retval;
-
-  return w32_load_system_font (f, fontname, size);
-}
-
-
-void
-w32_unload_font (dpyinfo, font)
-     struct w32_display_info *dpyinfo;
-     XFontStruct * font;
-{
-  if (font)
-    {
-      xfree (font->per_char);
-      if (font->bdf) w32_free_bdf_font (font->bdf);
-
-      if (font->hfont) DeleteObject (font->hfont);
-      xfree (font);
-    }
-}
-#endif	/* OLD_FONT */
-
 /* The font conversion stuff between x and w32 */
 
 /* X font string is as follows (from faces.el)
@@ -5473,65 +5141,6 @@
   }
 }
 
-#if OLD_FONT
-
-/* Get the Windows codepage corresponding to the specified font.  The
-   charset info in the font name is used to look up
-   w32-charset-to-codepage-alist.  */
-int
-w32_codepage_for_font (char *fontname)
-{
-  Lisp_Object codepage, entry;
-  char *charset_str, *charset, *end;
-
-  /* Extract charset part of font string.  */
-  charset = xlfd_charset_of_font (fontname);
-
-  if (!charset)
-    return CP_UNKNOWN;
-
-  charset_str = (char *) alloca (strlen (charset) + 1);
-  strcpy (charset_str, charset);
-
-#if 0
-  /* Remove leading "*-".  */
-  if (strncmp ("*-", charset_str, 2) == 0)
-    charset = charset_str + 2;
-  else
-#endif
-    charset = charset_str;
-
-  /* Stop match at wildcard (including preceding '-'). */
-  if (end = strchr (charset, '*'))
-      {
-        if (end > charset && *(end-1) == '-')
-          end--;
-        *end = '\0';
-      }
-
-  if (!strcmp (charset, "iso10646"))
-    return CP_UNICODE;
-
-  if (NILP (Vw32_charset_info_alist))
-    return CP_DEFAULT;
-
-  entry = Fassoc (build_string(charset), Vw32_charset_info_alist);
-  if (NILP (entry))
-    return CP_UNKNOWN;
-
-  codepage = Fcdr (Fcdr (entry));
-
-  if (NILP (codepage))
-    return CP_8BIT;
-  else if (XFASTINT (codepage) == XFASTINT (Qt))
-    return CP_UNICODE;
-  else if (INTEGERP (codepage))
-    return XINT (codepage);
-  else
-    return CP_UNKNOWN;
-}
-#endif	/* OLD_FONT */
-
 static BOOL
 w32_to_x_font (lplogfont, lpxstr, len, specific_charset)
      LOGFONT * lplogfont;
@@ -5816,780 +5425,6 @@
   return (TRUE);
 }
 
-#if OLD_FONT
-
-/* Strip the pixel height and point height from the given xlfd, and
-   return the pixel height. If no pixel height is specified, calculate
-   one from the point height, or if that isn't defined either, return
-   0 (which usually signifies a scalable font).
-*/
-static int
-xlfd_strip_height (char *fontname)
-{
-  int pixel_height, field_number;
-  char *read_from, *write_to;
-
-  xassert (fontname);
-
-  pixel_height = field_number = 0;
-  write_to = NULL;
-
-  /* Look for height fields.  */
-  for (read_from = fontname; *read_from; read_from++)
-    {
-      if (*read_from == '-')
-        {
-          field_number++;
-          if (field_number == 7) /* Pixel height.  */
-            {
-              read_from++;
-              write_to = read_from;
-
-              /* Find end of field.  */
-              for (;*read_from && *read_from != '-'; read_from++)
-                ;
-
-              /* Split the fontname at end of field.  */
-              if (*read_from)
-                {
-                  *read_from = '\0';
-                  read_from++;
-                }
-              pixel_height = atoi (write_to);
-              /* Blank out field. */
-              if (read_from > write_to)
-                {
-                  *write_to = '-';
-                  write_to++;
-                }
-              /* If the pixel height field is at the end (partial xlfd),
-                 return now.  */
-              else
-                return pixel_height;
-
-              /* If we got a pixel height, the point height can be
-                 ignored. Just blank it out and break now.  */
-              if (pixel_height)
-                {
-                  /* Find end of point size field.  */
-                  for (; *read_from && *read_from != '-'; read_from++)
-                    ;
-
-                  if (*read_from)
-                    read_from++;
-
-                  /* Blank out the point size field.  */
-                  if (read_from > write_to)
-                    {
-                      *write_to = '-';
-                      write_to++;
-                    }
-                  else
-                    return pixel_height;
-
-                  break;
-                }
-              /* If the point height is already blank, break now.  */
-              if (*read_from == '-')
-                {
-                  read_from++;
-                  break;
-                }
-            }
-          else if (field_number == 8)
-            {
-              /* If we didn't get a pixel height, try to get the point
-                 height and convert that.  */
-              int point_size;
-              char *point_size_start = read_from++;
-
-              /* Find end of field.  */
-              for (; *read_from && *read_from != '-'; read_from++)
-                ;
-
-              if (*read_from)
-                {
-                  *read_from = '\0';
-                  read_from++;
-                }
-
-              point_size = atoi (point_size_start);
-
-              /* Convert to pixel height. */
-              pixel_height = point_size
-                           * one_w32_display_info.height_in / 720;
-
-              /* Blank out this field and break.  */
-              *write_to = '-';
-              write_to++;
-              break;
-            }
-        }
-    }
-
-  /* Shift the rest of the font spec into place.  */
-  if (write_to && read_from > write_to)
-    {
-      for (; *read_from; read_from++, write_to++)
-        *write_to = *read_from;
-      *write_to = '\0';
-    }
-
-  return pixel_height;
-}
-
-/* Assume parameter 1 is fully qualified, no wildcards. */
-static BOOL
-w32_font_match (fontname, pattern)
-    char * fontname;
-    char * pattern;
-{
-  char *ptr;
-  char *font_name_copy;
-  char *regex = alloca (strlen (pattern) * 2 + 3);
-
-  font_name_copy = alloca (strlen (fontname) + 1);
-  strcpy (font_name_copy, fontname);
-
-  ptr = regex;
-  *ptr++ = '^';
-
-  /* Turn pattern into a regexp and do a regexp match.  */
-  for (; *pattern; pattern++)
-    {
-      if (*pattern == '?')
-        *ptr++ = '.';
-      else if (*pattern == '*')
-        {
-          *ptr++ = '.';
-          *ptr++ = '*';
-        }
-      else
-        *ptr++ = *pattern;
-    }
-  *ptr = '$';
-  *(ptr + 1) = '\0';
-
-  /* Strip out font heights and compare them seperately, since
-     rounding error can cause mismatches. This also allows a
-     comparison between a font that declares only a pixel height and a
-     pattern that declares the point height.
-  */
-  {
-    int font_height, pattern_height;
-
-    font_height = xlfd_strip_height (font_name_copy);
-    pattern_height = xlfd_strip_height (regex);
-
-    /* Compare now, and don't bother doing expensive regexp matching
-       if the heights differ.  */
-    if (font_height && pattern_height && (font_height != pattern_height))
-      return FALSE;
-  }
-
-  return (fast_string_match_ignore_case (build_string (regex),
-                                         build_string (font_name_copy)) >= 0);
-}
-
-/* Callback functions, and a structure holding info they need, for
-   listing system fonts on W32. We need one set of functions to do the
-   job properly, but these don't work on NT 3.51 and earlier, so we
-   have a second set which don't handle character sets properly to
-   fall back on.
-
-   In both cases, there are two passes made. The first pass gets one
-   font from each family, the second pass lists all the fonts from
-   each family.  */
-
-typedef struct enumfont_t
-{
-  HDC hdc;
-  int numFonts;
-  LOGFONT logfont;
-  XFontStruct *size_ref;
-  Lisp_Object pattern;
-  Lisp_Object list;
-} enumfont_t;
-
-
-static void
-enum_font_maybe_add_to_list (enumfont_t *, LOGFONT *, char *, Lisp_Object);
-
-
-static int CALLBACK
-enum_font_cb2 (lplf, lptm, FontType, lpef)
-    ENUMLOGFONT * lplf;
-    NEWTEXTMETRIC * lptm;
-    int FontType;
-    enumfont_t * lpef;
-{
-  /* Ignore struck out and underlined versions of fonts.  */
-  if (lplf->elfLogFont.lfStrikeOut || lplf->elfLogFont.lfUnderline)
-    return 1;
-
-  /* Only return fonts with names starting with @ if they were
-     explicitly specified, since Microsoft uses an initial @ to
-     denote fonts for vertical writing, without providing a more
-     convenient way of identifying them.  */
-  if (lplf->elfLogFont.lfFaceName[0] == '@'
-      && lpef->logfont.lfFaceName[0] != '@')
-    return 1;
-
-  /* Check that the character set matches if it was specified */
-  if (lpef->logfont.lfCharSet != DEFAULT_CHARSET &&
-      lplf->elfLogFont.lfCharSet != lpef->logfont.lfCharSet)
-    return 1;
-
-  if (FontType == RASTER_FONTTYPE)
-    {
-      /* DBCS raster fonts have problems displaying, so skip them.  */
-      int charset = lplf->elfLogFont.lfCharSet;
-      if (charset == SHIFTJIS_CHARSET
-	  || charset == HANGEUL_CHARSET
-	  || charset == CHINESEBIG5_CHARSET
-	  || charset == GB2312_CHARSET
-#ifdef JOHAB_CHARSET
-	  || charset == JOHAB_CHARSET
-#endif
-	  )
-	return 1;
-    }
-
-  {
-    char buf[100];
-    Lisp_Object width = Qnil;
-    Lisp_Object charset_list = Qnil;
-    char *charset = NULL;
-
-    /* Truetype fonts do not report their true metrics until loaded */
-    if (FontType != RASTER_FONTTYPE)
-      {
-	if (!NILP (lpef->pattern))
-	  {
-	    /* Scalable fonts are as big as you want them to be.  */
-	    lplf->elfLogFont.lfHeight = lpef->logfont.lfHeight;
-	    lplf->elfLogFont.lfWidth = lpef->logfont.lfWidth;
-	    width = make_number (lpef->logfont.lfWidth);
-	  }
-	else
-	  {
-	    lplf->elfLogFont.lfHeight = 0;
-	    lplf->elfLogFont.lfWidth = 0;
-	  }
-      }
-
-    /* Make sure the height used here is the same as everywhere
-       else (ie character height, not cell height).  */
-    if (lplf->elfLogFont.lfHeight > 0)
-      {
-        /* lptm can be trusted for RASTER fonts, but not scalable ones. */
-        if (FontType == RASTER_FONTTYPE)
-          lplf->elfLogFont.lfHeight = lptm->tmInternalLeading - lptm->tmHeight;
-        else
-          lplf->elfLogFont.lfHeight = -lplf->elfLogFont.lfHeight;
-      }
-
-    if (!NILP (lpef->pattern))
-      {
-        charset = xlfd_charset_of_font (SDATA (lpef->pattern));
-
-	/* We already checked charsets above, but DEFAULT_CHARSET
-           slipped through.  So only allow exact matches for DEFAULT_CHARSET.  */
-	if (charset
-	    && strncmp (charset, "*-*", 3) != 0
-	    && lpef->logfont.lfCharSet == DEFAULT_CHARSET
-	    && strcmp (charset, w32_to_x_charset (DEFAULT_CHARSET, NULL)) != 0)
-	  return 1;
-
-        /* Reject raster fonts if we are looking for a unicode font.  */
-        if (charset
-            && FontType == RASTER_FONTTYPE
-            && strncmp (charset, "iso10646", 8) == 0)
-          return 1;
-      }
-
-    if (charset)
-      charset_list = Fcons (build_string (charset), Qnil);
-    else
-      /* Always prefer unicode.  */
-      charset_list
-	= Fcons (build_string ("iso10646-1"),
-		 w32_to_all_x_charsets (lplf->elfLogFont.lfCharSet));
-
-    /* Loop through the charsets.  */
-    for ( ; CONSP (charset_list); charset_list = Fcdr (charset_list))
-      {
-	Lisp_Object this_charset = Fcar (charset_list);
-	charset = SDATA (this_charset);
-
-	/* Don't list  raster fonts as unicode.	 */
-	if (charset
-	    && FontType == RASTER_FONTTYPE
-	    && strncmp (charset, "iso10646", 8) == 0)
-	  continue;
-
-	enum_font_maybe_add_to_list (lpef, &(lplf->elfLogFont),
-				     charset, width);
-
-	/* List bold and italic variations if w32-enable-synthesized-fonts
-	   is non-nil and this is a plain font.  */
-	if (w32_enable_synthesized_fonts
-	    && lplf->elfLogFont.lfWeight == FW_NORMAL
-	    && lplf->elfLogFont.lfItalic == FALSE)
-	  {
-	    /* bold.  */
-	    lplf->elfLogFont.lfWeight = FW_BOLD;
-	    enum_font_maybe_add_to_list (lpef, &(lplf->elfLogFont),
-					 charset, width);
-	    /* bold italic.  */
-	    lplf->elfLogFont.lfItalic = TRUE;
-	    enum_font_maybe_add_to_list (lpef, &(lplf->elfLogFont),
-					 charset, width);
-	    /* italic.  */
-	    lplf->elfLogFont.lfWeight = FW_NORMAL;
-	    enum_font_maybe_add_to_list (lpef, &(lplf->elfLogFont),
-					 charset, width);
-	  }
-      }
-  }
-
-  return 1;
-}
-
-static void
-enum_font_maybe_add_to_list (lpef, logfont, match_charset, width)
-     enumfont_t * lpef;
-     LOGFONT * logfont;
-     char * match_charset;
-     Lisp_Object width;
-{
-  char buf[100];
-
-  if (!w32_to_x_font (logfont, buf, 100, match_charset))
-    return;
-
-  if (NILP (lpef->pattern)
-      || w32_font_match (buf, SDATA (lpef->pattern)))
-    {
-      /* Check if we already listed this font.  This may happen if
-         w32_enable_synthesized_fonts is non-nil, and there are real
-         bold and italic versions of the font.  */
-      Lisp_Object font_name = build_string (buf);
-      if (NILP (Fmember (font_name, lpef->list)))
-	{
-	  Lisp_Object entry = Fcons (font_name, width);
-	  lpef->list = Fcons (entry, lpef->list);
-	  lpef->numFonts++;
-	}
-    }
-}
-
-
-static int CALLBACK
-enum_font_cb1 (lplf, lptm, FontType, lpef)
-     ENUMLOGFONT * lplf;
-     NEWTEXTMETRIC * lptm;
-     int FontType;
-     enumfont_t * lpef;
-{
-  return EnumFontFamilies (lpef->hdc,
-			   lplf->elfLogFont.lfFaceName,
-			   (FONTENUMPROC) enum_font_cb2,
-			   (LPARAM) lpef);
-}
-
-
-static int CALLBACK
-enum_fontex_cb2 (lplf, lptm, font_type, lpef)
-     ENUMLOGFONTEX * lplf;
-     NEWTEXTMETRICEX * lptm;
-     int font_type;
-     enumfont_t * lpef;
-{
-  /* We are not interested in the extra info we get back from the 'Ex
-     version - only the fact that we get character set variations
-     enumerated seperately.  */
-  return enum_font_cb2 ((ENUMLOGFONT *) lplf, (NEWTEXTMETRIC *) lptm,
-                        font_type, lpef);
-}
-
-static int CALLBACK
-enum_fontex_cb1 (lplf, lptm, font_type, lpef)
-     ENUMLOGFONTEX * lplf;
-     NEWTEXTMETRICEX * lptm;
-     int font_type;
-     enumfont_t * lpef;
-{
-  HMODULE gdi32 = GetModuleHandle ("gdi32.dll");
-  FARPROC enum_font_families_ex
-    = GetProcAddress ( gdi32, "EnumFontFamiliesExA");
-  /* We don't really expect EnumFontFamiliesEx to disappear once we
-     get here, so don't bother handling it gracefully.  */
-  if (enum_font_families_ex == NULL)
-    error ("gdi32.dll has disappeared!");
-  return enum_font_families_ex (lpef->hdc,
-                                &lplf->elfLogFont,
-                                (FONTENUMPROC) enum_fontex_cb2,
-                                (LPARAM) lpef, 0);
-}
-
-/* Interface to fontset handler. (adapted from mw32font.c in Meadow
-   and xterm.c in Emacs 20.3) */
-
-static Lisp_Object
-w32_list_bdf_fonts (Lisp_Object pattern, int max_names)
-{
-  char *fontname, *ptnstr;
-  Lisp_Object list, tem, newlist = Qnil;
-  int n_fonts = 0;
-
-  list = Vw32_bdf_filename_alist;
-  ptnstr = SDATA (pattern);
-
-  for ( ; CONSP (list); list = XCDR (list))
-    {
-      tem = XCAR (list);
-      if (CONSP (tem))
-        fontname = SDATA (XCAR (tem));
-      else if (STRINGP (tem))
-        fontname = SDATA (tem);
-      else
-        continue;
-
-      if (w32_font_match (fontname, ptnstr))
-        {
-          newlist = Fcons (XCAR (tem), newlist);
-          n_fonts++;
-          if (max_names >= 0 && n_fonts >= max_names)
-            break;
-        }
-    }
-
-  return newlist;
-}
-
-
-/* Return a list of names of available fonts matching PATTERN on frame
-   F.  If SIZE is not 0, it is the size (maximum bound width) of fonts
-   to be listed.  Frame F NULL means we have not yet created any
-   frame, which means we can't get proper size info, as we don't have
-   a device context to use for GetTextMetrics.
-   MAXNAMES sets a limit on how many fonts to match.  If MAXNAMES is
-   negative, then all matching fonts are returned.  */
-
-Lisp_Object
-w32_list_fonts (f, pattern, size, maxnames)
-     struct frame *f;
-     Lisp_Object pattern;
-     int size;
-     int maxnames;
-{
-  Lisp_Object patterns, key = Qnil, tem, tpat;
-  Lisp_Object list = Qnil, newlist = Qnil, second_best = Qnil;
-  struct w32_display_info *dpyinfo = &one_w32_display_info;
-  int n_fonts = 0;
-
-  patterns = Fassoc (pattern, Valternate_fontname_alist);
-  if (NILP (patterns))
-    patterns = Fcons (pattern, Qnil);
-
-  for (; CONSP (patterns); patterns = XCDR (patterns))
-    {
-      enumfont_t ef;
-      int codepage;
-
-      tpat = XCAR (patterns);
-
-      if (!STRINGP (tpat))
-        continue;
-
-      /* Avoid expensive EnumFontFamilies functions if we are not
-         going to be able to output one of these anyway. */
-      codepage = w32_codepage_for_font (SDATA (tpat));
-      if (codepage != CP_8BIT && codepage != CP_UNICODE
-          && codepage != CP_DEFAULT && codepage != CP_UNKNOWN
-	  && !IsValidCodePage (codepage))
-        continue;
-
-      /* See if we cached the result for this particular query.
-         The cache is an alist of the form:
-           ((PATTERN (FONTNAME . WIDTH) ...) ...)
-      */
-      if (tem = XCDR (dpyinfo->name_list_element),
-          !NILP (list = Fassoc (tpat, tem)))
-        {
-          list = Fcdr_safe (list);
-          /* We have a cached list. Don't have to get the list again.  */
-          goto label_cached;
-        }
-
-      BLOCK_INPUT;
-      /* At first, put PATTERN in the cache.  */
-      ef.pattern = tpat;
-      ef.list = Qnil;
-      ef.numFonts = 0;
-
-      /* Use EnumFontFamiliesEx where it is available, as it knows
-         about character sets.  Fall back to EnumFontFamilies for
-         older versions of NT that don't support the 'Ex function.  */
-      x_to_w32_font (SDATA (tpat), &ef.logfont);
-      {
-        LOGFONT font_match_pattern;
-        HMODULE gdi32 = GetModuleHandle ("gdi32.dll");
-        FARPROC enum_font_families_ex
-          = GetProcAddress ( gdi32, "EnumFontFamiliesExA");
-
-        /* We do our own pattern matching so we can handle wildcards.  */
-        font_match_pattern.lfFaceName[0] = 0;
-        font_match_pattern.lfPitchAndFamily = 0;
-        /* We can use the charset, because if it is a wildcard it will
-           be DEFAULT_CHARSET anyway.  */
-        font_match_pattern.lfCharSet = ef.logfont.lfCharSet;
-
-        ef.hdc = GetDC (dpyinfo->root_window);
-
-        if (enum_font_families_ex)
-          enum_font_families_ex (ef.hdc,
-                                 &font_match_pattern,
-                                 (FONTENUMPROC) enum_fontex_cb1,
-                                 (LPARAM) &ef, 0);
-        else
-          EnumFontFamilies (ef.hdc, NULL, (FONTENUMPROC) enum_font_cb1,
-                            (LPARAM)&ef);
-
-        ReleaseDC (dpyinfo->root_window, ef.hdc);
-      }
-
-      UNBLOCK_INPUT;
-      list = ef.list;
-
-      /* Make a list of the fonts we got back.
-         Store that in the font cache for the display. */
-      XSETCDR (dpyinfo->name_list_element,
-	       Fcons (Fcons (tpat, list),
-		      XCDR (dpyinfo->name_list_element)));
-
-    label_cached:
-      if (NILP (list)) continue; /* Try the remaining alternatives.  */
-
-      newlist = second_best = Qnil;
-
-      /* Make a list of the fonts that have the right width.  */
-      for (; CONSP (list); list = XCDR (list))
-        {
-          int found_size;
-          tem = XCAR (list);
-
-          if (!CONSP (tem))
-            continue;
-          if (NILP (XCAR (tem)))
-            continue;
-          if (!size)
-            {
-              newlist = Fcons (XCAR (tem), newlist);
-              n_fonts++;
-              if (maxnames >= 0 && n_fonts >= maxnames)
-                break;
-              else
-                continue;
-            }
-          if (!INTEGERP (XCDR (tem)))
-            {
-              /* Since we don't yet know the size of the font, we must
-                 load it and try GetTextMetrics.  */
-              W32FontStruct thisinfo;
-              LOGFONT lf;
-              HDC hdc;
-              HANDLE oldobj;
-
-              if (!x_to_w32_font (SDATA (XCAR (tem)), &lf))
-                continue;
-
-              BLOCK_INPUT;
-              thisinfo.bdf = NULL;
-              thisinfo.hfont = CreateFontIndirect (&lf);
-              if (thisinfo.hfont == NULL)
-                continue;
-
-              hdc = GetDC (dpyinfo->root_window);
-              oldobj = SelectObject (hdc, thisinfo.hfont);
-              if (GetTextMetrics (hdc, &thisinfo.tm))
-                XSETCDR (tem, make_number (FONT_AVG_WIDTH (&thisinfo)));
-              else
-                XSETCDR (tem, make_number (0));
-              SelectObject (hdc, oldobj);
-              ReleaseDC (dpyinfo->root_window, hdc);
-              DeleteObject (thisinfo.hfont);
-              UNBLOCK_INPUT;
-            }
-          found_size = XINT (XCDR (tem));
-          if (found_size == size)
-            {
-              newlist = Fcons (XCAR (tem), newlist);
-              n_fonts++;
-              if (maxnames >= 0 && n_fonts >= maxnames)
-                break;
-            }
-          /* keep track of the closest matching size in case
-             no exact match is found.  */
-          else if (found_size > 0)
-            {
-              if (NILP (second_best))
-                second_best = tem;
-
-              else if (found_size < size)
-                {
-                  if (XINT (XCDR (second_best)) > size
-                      || XINT (XCDR (second_best)) < found_size)
-                    second_best = tem;
-                }
-              else
-                {
-                  if (XINT (XCDR (second_best)) > size
-                      && XINT (XCDR (second_best)) >
-                      found_size)
-                    second_best = tem;
-                }
-            }
-        }
-
-      if (!NILP (newlist))
-        break;
-      else if (!NILP (second_best))
-        {
-          newlist = Fcons (XCAR (second_best), Qnil);
-          break;
-        }
-    }
-
-  /* Include any bdf fonts.  */
-  if (n_fonts < maxnames || maxnames < 0)
-  {
-    Lisp_Object combined[2];
-    combined[0] = w32_list_bdf_fonts (pattern, maxnames - n_fonts);
-    combined[1] = newlist;
-    newlist = Fnconc (2, combined);
-  }
-
-  return newlist;
-}
-
-
-/* Return a pointer to struct font_info of font FONT_IDX of frame F.  */
-struct font_info *
-w32_get_font_info (f, font_idx)
-     FRAME_PTR f;
-     int font_idx;
-{
-  return (FRAME_W32_FONT_TABLE (f) + font_idx);
-}
-
-
-struct font_info*
-w32_query_font (struct frame *f, char *fontname)
-{
-  int i;
-  struct font_info *pfi;
-
-  pfi = FRAME_W32_FONT_TABLE (f);
-
-  for (i = 0; i < one_w32_display_info.n_fonts ;i++, pfi++)
-    {
-      if (xstrcasecmp (pfi->name, fontname) == 0) return pfi;
-    }
-
-  return NULL;
-}
-
-/* Find a CCL program for a font specified by FONTP, and set the member
- `encoder' of the structure.  */
-
-void
-w32_find_ccl_program (fontp)
-     struct font_info *fontp;
-{
-  Lisp_Object list, elt;
-
-  for (list = Vfont_ccl_encoder_alist; CONSP (list); list = XCDR (list))
-    {
-      elt = XCAR (list);
-      if (CONSP (elt)
-	  && STRINGP (XCAR (elt))
-	  && (fast_c_string_match_ignore_case (XCAR (elt), fontp->name)
-	      >= 0))
-	break;
-    }
-  if (! NILP (list))
-    {
-      struct ccl_program *ccl
-	= (struct ccl_program *) xmalloc (sizeof (struct ccl_program));
-
-      if (setup_ccl_program (ccl, XCDR (elt)) < 0)
-	xfree (ccl);
-      else
-	fontp->font_encoder = ccl;
-    }
-}
-
-#endif	/* OLD_FONT */
-
-/* directory-files from dired.c.  */
-Lisp_Object Fdirectory_files P_ ((Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object));
-
-
-#if OLD_FONT
-
-/* Find BDF files in a specified directory.  (use GCPRO when calling,
-   as this calls lisp to get a directory listing).  */
-static Lisp_Object
-w32_find_bdf_fonts_in_dir (Lisp_Object directory)
-{
-  Lisp_Object filelist, list = Qnil;
-  char fontname[100];
-
-  if (!STRINGP (directory))
-    return Qnil;
-
-  filelist = Fdirectory_files (directory, Qt,
-			       build_string (".*\\.[bB][dD][fF]"), Qt);
-
-  for ( ; CONSP (filelist); filelist = XCDR (filelist))
-    {
-      Lisp_Object filename = XCAR (filelist);
-      if (w32_BDF_to_x_font (SDATA (filename), fontname, 100))
-          store_in_alist (&list, build_string (fontname), filename);
-    }
-  return list;
-}
-
-DEFUN ("w32-find-bdf-fonts", Fw32_find_bdf_fonts, Sw32_find_bdf_fonts,
-       1, 1, 0,
-       doc: /* Return a list of BDF fonts in DIRECTORY.
-The list is suitable for appending to `w32-bdf-filename-alist'.
-Fonts which do not contain an xlfd description will not be included
-in the list.  DIRECTORY may be a list of directories.  */)
-     (directory)
-     Lisp_Object directory;
-{
-  Lisp_Object list = Qnil;
-  struct gcpro gcpro1, gcpro2;
-
-  if (!CONSP (directory))
-    return w32_find_bdf_fonts_in_dir (directory);
-
-  for ( ; CONSP (directory); directory = XCDR (directory))
-    {
-      Lisp_Object pair[2];
-      pair[0] = list;
-      pair[1] = Qnil;
-      GCPRO2 (directory, list);
-      pair[1] = w32_find_bdf_fonts_in_dir ( XCAR (directory) );
-      list = Fnconc ( 2, pair );
-      UNGCPRO;
-    }
-  return list;
-}
-#endif	/* OLD_FONT */
 
 
 DEFUN ("xw-color-defined-p", Fxw_color_defined_p, Sxw_color_defined_p, 1, 2, 0,
@@ -7060,17 +5895,6 @@
     error ("Display still has frames on it");
 
   BLOCK_INPUT;
-#if OLD_FONT
-  /* Free the fonts in the font table.  */
-  for (i = 0; i < dpyinfo->n_fonts; i++)
-    if (dpyinfo->font_table[i].name)
-      {
-        if (dpyinfo->font_table[i].name != dpyinfo->font_table[i].full_name)
-          xfree (dpyinfo->font_table[i].full_name);
-        xfree (dpyinfo->font_table[i].name);
-        w32_unload_font (dpyinfo, dpyinfo->font_table[i].font);
-      }
-#endif
   x_destroy_all_bitmaps (dpyinfo);
 
   x_delete_display (dpyinfo);
@@ -9276,29 +8100,11 @@
   defsubr (&Sw32_reconstruct_hot_key);
   defsubr (&Sw32_toggle_lock_key);
   defsubr (&Sw32_window_exists_p);
-#if OLD_FONT
-  defsubr (&Sw32_find_bdf_fonts);
-#endif
   defsubr (&Sw32_battery_status);
 
   defsubr (&Sfile_system_info);
   defsubr (&Sdefault_printer_name);
 
-#if OLD_FONT
-  /* Setting callback functions for fontset handler.  */
-  get_font_info_func = w32_get_font_info;
-
-#if 0 /* This function pointer doesn't seem to be used anywhere.
-	 And the pointer assigned has the wrong type, anyway.  */
-  list_fonts_func = w32_list_fonts;
-#endif
-
-  load_font_func = w32_load_font;
-  find_ccl_program_func = w32_find_ccl_program;
-  query_font_func = w32_query_font;
-  set_frame_fontset_func = x_set_font;
-  get_font_repertory_func = x_get_font_repertory;
-#endif
   check_window_system_func = check_w32;
 
 
--- a/src/w32gui.h	Fri Jun 20 20:00:14 2008 +0000
+++ b/src/w32gui.h	Fri Jun 20 21:46:05 2008 +0000
@@ -129,9 +129,6 @@
 {
   COLORREF foreground;
   COLORREF background;
-#if OLD_FONT
-  XFontStruct * font;
-#endif
   struct font *font;
 } XGCValues;
 
--- a/src/w32term.c	Fri Jun 20 20:00:14 2008 +0000
+++ b/src/w32term.c	Fri Jun 20 21:46:05 2008 +0000
@@ -892,596 +892,6 @@
 
 /* Function prototypes of this page.  */
 
-#if OLD_FONT
-
-XCharStruct *w32_per_char_metric P_ ((XFontStruct *, wchar_t *, int));
-static int w32_encode_char P_ ((int, wchar_t *, struct font_info *,
-				struct charset *, int *));
-
-
-/* Get metrics of character CHAR2B in FONT.  Value is always non-null.
-   If CHAR2B is not contained in FONT, the font's default character
-   metric is returned. */
-
-static int
-w32_bdf_per_char_metric (font, char2b, dim, pcm)
-     XFontStruct *font;
-     wchar_t *char2b;
-     int dim;
-     XCharStruct * pcm;
-{
-  glyph_metric * bdf_metric;
-  char buf[2];
-
-  if (dim == 1)
-    buf[0] = (char)(*char2b);
-  else
-    {
-      buf[0] = XCHAR2B_BYTE1 (char2b);
-      buf[1] = XCHAR2B_BYTE2 (char2b);
-    }
-
-  bdf_metric = w32_BDF_TextMetric (font->bdf, buf, dim);
-
-  if (bdf_metric)
-    {
-      pcm->width = bdf_metric->dwidth;
-      pcm->lbearing = bdf_metric->bbox;
-      pcm->rbearing = bdf_metric->dwidth
-                    - (bdf_metric->bbox + bdf_metric->bbw);
-      pcm->ascent = bdf_metric->bboy + bdf_metric->bbh;
-      pcm->descent = -bdf_metric->bboy;
-
-      return 1;
-    }
-  return 0;
-}
-
-
-static int
-w32_native_per_char_metric (font, char2b, font_type, pcm)
-     XFontStruct *font;
-     wchar_t *char2b;
-     enum w32_char_font_type font_type;
-     XCharStruct * pcm;
-{
-  HDC hdc = GetDC (NULL);
-  HFONT old_font;
-  BOOL retval = FALSE;
-
-  xassert (font && char2b);
-  xassert (font->hfont);
-  xassert (font_type == UNICODE_FONT || font_type == ANSI_FONT);
-
-  old_font = SelectObject (hdc, font->hfont);
-
-  if ((font->tm.tmPitchAndFamily & TMPF_TRUETYPE) != 0)
-    {
-      ABC char_widths;
-
-      if (font_type == UNICODE_FONT)
-	retval = GetCharABCWidthsW (hdc, *char2b, *char2b, &char_widths);
-      else
-	retval = GetCharABCWidthsA (hdc, *char2b, *char2b, &char_widths);
-
-      if (retval)
-	{
-#if 0
-	  /* Disabled until we can find a way to get the right results
-	     on all versions of Windows.  */
-
-	  /* Don't trust the ABC widths.  For synthesized fonts they are
-	     wrong, and so is the result of GetCharWidth()!  */
-	  int real_width;
-	  GetCharWidth (hdc, *char2b, *char2b, &real_width);
-#endif
-	  if (cleartype_active)
-	    {
-	      /* Cleartype antialiasing causes characters to overhang
-		 by a pixel on each side compared with what GetCharABCWidths
-		 reports.  */
-	      char_widths.abcA -= 1;
-	      char_widths.abcC -= 1;
-	      char_widths.abcB += 2;
-	    }
-
-	  pcm->width = char_widths.abcA + char_widths.abcB + char_widths.abcC;
-#if 0
-	  /* As far as I can tell, this is the best way to determine what
-	     ExtTextOut will do with the broken font.  */
-	  if (pcm->width != real_width)
-	    pcm->width = (pcm->width + real_width) / 2;
-#endif
-	  pcm->lbearing = char_widths.abcA;
-	  pcm->rbearing = char_widths.abcA + char_widths.abcB;
-	  pcm->ascent = FONT_BASE (font);
-	  pcm->descent = FONT_DESCENT (font);
-	}
-    }
-
-  if (!retval)
-    {
-      /* Either font is not a True-type font, or GetCharABCWidthsW
-	 failed (it is not supported on Windows 9x for instance), so we
-	 can't determine the full info we would like.  All is not lost
-	 though - we can call GetTextExtentPoint32 to get rbearing and
-	 deduce width based on the font's per-string overhang.  lbearing
-	 is assumed to be zero.  */
-
-      /* TODO: Some Thai characters (and other composites if Windows
-         supports them) do have lbearing, and report their total width
-         as zero. Need some way of handling them when
-         GetCharABCWidthsW fails. */
-      SIZE sz;
-
-      if (font_type == UNICODE_FONT)
-	retval = GetTextExtentPoint32W (hdc, char2b, 1, &sz);
-      else
-	retval = GetTextExtentPoint32A (hdc, (char*)char2b, 1, &sz);
-
-      if (retval)
-	{
-	  pcm->width = sz.cx;
-	  pcm->rbearing = sz.cx + font->tm.tmOverhang;
-	  pcm->lbearing = 0;
-	  pcm->ascent = FONT_BASE (font);
-	  pcm->descent = FONT_DESCENT (font);
-	}
-    }
-
-
-  if (pcm->width == 0 && (pcm->rbearing - pcm->lbearing) == 0)
-    {
-      retval = FALSE;
-    }
-
-  SelectObject (hdc, old_font);
-  ReleaseDC (NULL, hdc);
-
-  return retval;
-}
-
-
-XCharStruct *
-w32_per_char_metric (font, char2b, font_type)
-     XFontStruct *font;
-     wchar_t *char2b;
-     int /* enum w32_char_font_type */ font_type;
-{
-  /* The result metric information.  */
-  XCharStruct *pcm;
-  BOOL retval;
-
-  xassert (font && char2b);
-
-  /* TODO: This function is currently called through the RIF, and in
-     some cases font_type is UNKNOWN_FONT. We currently allow the
-     cached metrics to be used, which seems to work, but in cases
-     where font_type is UNKNOWN_FONT, we probably haven't encoded
-     char2b appropriately. All callers need checking to see what they
-     are passing.  This is most likely to affect variable width fonts
-     outside the Latin-1 range, particularly in languages like Thai
-     that rely on rbearing and lbearing to provide composition. I
-     don't think that is working currently anyway, but we don't seem
-     to have anyone testing such languages on Windows.  */
-
-  /* Handle the common cases quickly.  */
-  if (!font->bdf && font->per_char == NULL)
-    /* TODO: determine whether char2b exists in font?  */
-    return &font->max_bounds;
-  else if (!font->bdf && *char2b < 128)
-    return &font->per_char[*char2b];
-
-  xassert (font_type != UNKNOWN_FONT);
-
-  pcm = &font->scratch;
-
-  if (font_type == BDF_1D_FONT)
-    retval = w32_bdf_per_char_metric (font, char2b, 1, pcm);
-  else if (font_type == BDF_2D_FONT)
-    retval = w32_bdf_per_char_metric (font, char2b, 2, pcm);
-  else
-    retval = w32_native_per_char_metric (font, char2b, font_type, pcm);
-
-  if (retval)
-    return pcm;
-
-  return NULL;
-}
-
-void
-w32_cache_char_metrics (font)
-     XFontStruct *font;
-{
-  wchar_t char2b = L'x';
-
-  /* Cache char metrics for the common cases.  */
-  if (font->bdf)
-    {
-      /* TODO: determine whether font is fixed-pitch.  */
-      if (!w32_bdf_per_char_metric (font, &char2b, 1, &font->max_bounds))
-        {
-          /* Use the font width and height as max bounds, as not all BDF
-             fonts contain the letter 'x'. */
-          font->max_bounds.width = FONT_WIDTH (font);
-          font->max_bounds.lbearing = -font->bdf->llx;
-          font->max_bounds.rbearing = FONT_WIDTH (font) - font->bdf->urx;
-          font->max_bounds.ascent = FONT_BASE (font);
-          font->max_bounds.descent = FONT_DESCENT (font);
-        }
-    }
-  else
-    {
-      if (((font->tm.tmPitchAndFamily & TMPF_FIXED_PITCH) != 0)
-          /* Some fonts (eg DBCS fonts) are marked as fixed width even
-             though they contain characters of different widths. */
-          || (font->tm.tmMaxCharWidth != font->tm.tmAveCharWidth))
-	{
-	  /* Font is not fixed pitch, so cache per_char info for the
-             ASCII characters.  It would be much more work, and probably
-             not worth it, to cache other chars, since we may change
-             between using Unicode and ANSI text drawing functions at
-             run-time.  */
-	  int i;
-
-	  font->per_char = xmalloc (128 * sizeof(XCharStruct));
-	  for (i = 0; i < 128; i++)
-	    {
-	      char2b = i;
-	      w32_native_per_char_metric (font, &char2b, ANSI_FONT,
-					  &font->per_char[i]);
-	    }
-	}
-      else
-	w32_native_per_char_metric (font, &char2b, ANSI_FONT,
-				    &font->max_bounds);
-    }
-}
-
-/* Determine if a font is double byte. */
-static int
-w32_font_is_double_byte (XFontStruct *font)
-{
-  return font->double_byte_p;
-}
-
-
-static BOOL
-w32_use_unicode_for_codepage (codepage)
-     int codepage;
-{
-  /* If the current codepage is supported, use Unicode for output. */
-  return (w32_enable_unicode_output
-          && codepage != CP_8BIT
-          && (codepage == CP_UNICODE || IsValidCodePage (codepage)));
-}
-
-/* Encode CHAR2B using encoding information from FONT_INFO.  CHAR2B is
-   the two-byte form of C.  Encoding is returned in *CHAR2B.  */
-
-static int /* enum w32_char_font_type */
-w32_encode_char (c, char2b, font_info, charset, two_byte_p)
-     int c;
-     wchar_t *char2b;
-     struct font_info *font_info;
-     struct charset *charset;
-     int * two_byte_p;
-{
-  int codepage;
-  int unicode_p = 0;
-  int internal_two_byte_p = 0;
-
-  XFontStruct *font = font_info->font;
-
-  internal_two_byte_p = w32_font_is_double_byte (font);
-  codepage = font_info->codepage;
-
-  /* If font can output unicode, use the original unicode character.  */
-  if ( font && !font->bdf && w32_use_unicode_for_codepage (codepage)
-       && c >= 0x100)
-    {
-      *char2b = c;
-      unicode_p = 1;
-      internal_two_byte_p = 1;
-    }
-
-  /* FONT_INFO may define a scheme by which to encode byte1 and byte2.
-     This may be either a program in a special encoder language or a
-     fixed encoding.  */
-  else if (font_info->font_encoder)
-    {
-      /* It's a program.  */
-      struct ccl_program *ccl = font_info->font_encoder;
-
-      if (CHARSET_DIMENSION (charset) == 1)
-	{
-	  ccl->reg[0] = CHARSET_ID (charset);
-	  ccl->reg[1] = XCHAR2B_BYTE2 (char2b);
-	  ccl->reg[2] = -1;
-	}
-      else
-	{
-	  ccl->reg[0] = CHARSET_ID (charset);
-	  ccl->reg[1] = XCHAR2B_BYTE1 (char2b);
-	  ccl->reg[2] = XCHAR2B_BYTE2 (char2b);
-	}
-
-      ccl_driver (ccl, NULL, NULL, 0, 0, Qnil);
-
-      /* We assume that MSBs are appropriately set/reset by CCL
-	 program.  */
-      if (!internal_two_byte_p)	/* 1-byte font */
-	STORE_XCHAR2B (char2b, 0, ccl->reg[1]);
-      else
-	STORE_XCHAR2B (char2b, ccl->reg[1], ccl->reg[2]);
-    }
-  else if (font_info->encoding_type)
-    {
-      /* Fixed encoding scheme.  See fontset.h for the meaning of the
-	 encoding numbers.  */
-      unsigned char enc = font_info->encoding_type;
-
-      if ((enc == 1 || enc == 2)
-	  && CHARSET_DIMENSION (charset) == 2)
-	STORE_XCHAR2B (char2b, XCHAR2B_BYTE1 (char2b) | 0x80, XCHAR2B_BYTE2 (char2b));
-
-      if (enc == 1 || enc == 3          || (enc == 4 && CHARSET_DIMENSION (charset) == 1))
-	STORE_XCHAR2B (char2b, XCHAR2B_BYTE1 (char2b), XCHAR2B_BYTE2 (char2b) | 0x80);
-      else if (enc == 4)
-        {
-          int code = (int) (*char2b);
-
-	  JIS_TO_SJIS (code);
-          STORE_XCHAR2B (char2b, (code >> 8), (code & 0xFF));
-        }
-    }
-
-  if (two_byte_p)
-    *two_byte_p = internal_two_byte_p;
-
-  if (!font)
-    return UNKNOWN_FONT;
-  else if (font->bdf && CHARSET_DIMENSION (charset) == 1)
-    return BDF_1D_FONT;
-  else if (font->bdf)
-    return BDF_2D_FONT;
-  else if (unicode_p)
-    return UNICODE_FONT;
-  else
-    return ANSI_FONT;
-}
-
-
-/* Return a char-table whose elements are t if the font FONT_INFO
-   contains a glyph for the corresponding character, and nil if not.
-
-   Fixme: For the moment, this function works only for fonts whose
-   glyph encoding is the same as Unicode (e.g. ISO10646-1 fonts).  */
-
-Lisp_Object
-x_get_font_repertory (f, font_info)
-     FRAME_PTR f;
-     struct font_info *font_info;
-{
-  XFontStruct *font = (XFontStruct *) font_info->font;
-  Lisp_Object table;
-  int min_byte1, max_byte1, min_byte2, max_byte2;
-  int c;
-  struct charset *charset = CHARSET_FROM_ID (font_info->charset);
-  int offset = CHARSET_OFFSET (charset);
-
-  table = Fmake_char_table (Qnil, Qnil);
-
-  if (!font->bdf && pfnGetFontUnicodeRanges)
-    {
-      GLYPHSET *glyphset;
-      DWORD glyphset_size;
-      HDC display = get_frame_dc (f);
-      HFONT prev_font;
-      int i;
-
-      prev_font = SelectObject (display, font->hfont);
-
-      /* First call GetFontUnicodeRanges to find out how big a structure
-	 we need.  */
-      glyphset_size = pfnGetFontUnicodeRanges (display, NULL);
-      if (glyphset_size)
-	{
-	  glyphset = (GLYPHSET *) alloca (glyphset_size);
-	  glyphset->cbThis = glyphset_size;
-
-	  /* Now call it again to get the ranges.  */
-	  glyphset_size = pfnGetFontUnicodeRanges (display, glyphset);
-
-	  if (glyphset_size)
-	    {
-	      /* Store the ranges in TABLE.  */
-	      for (i = 0; i < glyphset->cRanges; i++)
-		{
-		  int from = glyphset->ranges[i].wcLow;
-		  int to = from + glyphset->ranges[i].cGlyphs - 1;
-		  char_table_set_range (table, from, to, Qt);
-		}
-	    }
-	}
-
-      SelectObject (display, prev_font);
-      release_frame_dc (f, display);
-
-      /* If we got the information we wanted above, then return it.  */
-      if (glyphset_size)
-	return table;
-    }
-
-#if 0 /* TODO: Convert to work on Windows so BDF and older platforms work.  */
-  /* When GetFontUnicodeRanges is not available or does not work,
-     work it out manually.  */
-  min_byte1 = font->min_byte1;
-  max_byte1 = font->max_byte1;
-  min_byte2 = font->min_char_or_byte2;
-  max_byte2 = font->max_char_or_byte2;
-  if (min_byte1 == 0 && max_byte1 == 0)
-    {
-      if (! font->per_char || font->all_chars_exist == True)
-        {
-          if (offset >= 0)
-            char_table_set_range (table, offset + min_byte2,
-                                  offset + max_byte2, Qt);
-          else
-            for (; min_byte2 <= max_byte2; min_byte2++)
-              {
-                c = DECODE_CHAR (charset, min_byte2);
-                CHAR_TABLE_SET (table, c, Qt);
-              }
-        }
-      else
-	{
-	  XCharStruct *pcm = font->per_char;
-	  int from = -1;
-	  int i;
-
-	  for (i = min_byte2; i <= max_byte2; i++, pcm++)
-	    {
-	      if (pcm->width == 0 && pcm->rbearing == pcm->lbearing)
-		{
-		  if (from >= 0)
-		    {
-                      if (offset >= 0)
-                        char_table_set_range (table, offset + from,
-                                              offset + i - 1, Qt);
-                      else
-                        for (; from < i; from++)
-                          {
-                            c = DECODE_CHAR (charset, from);
-                            CHAR_TABLE_SET (table, c, Qt);
-                          }
-		      from = -1;
-		    }
-		}
-	      else if (from < 0)
-		from = i;
-	    }
-	  if (from >= 0)
-            {
-              if (offset >= 0)
-                char_table_set_range (table, offset + from, offset + i - 1,
-                                      Qt);
-              else
-                for (; from < i; from++)
-                  {
-                    c = DECODE_CHAR (charset, from);
-                    CHAR_TABLE_SET (table, c, Qt);
-                  }
-            }
-	}
-    }
-  else
-    {
-      if (! font->per_char || font->all_chars_exist == True)
-	{
-	  int i, j;
-
-          if (offset >= 0)
-            for (i = min_byte1; i <= max_byte1; i++)
-              char_table_set_range
-                (table, offset + ((i << 8) | min_byte2),
-                 offset + ((i << 8) | max_byte2), Qt);
-          else
-            for (i = min_byte1; i <= max_byte1; i++)
-              for (j = min_byte2; j <= max_byte2; j++)
-                {
-                  unsiged code = (i << 8) | j;
-                  c = DECODE_CHAR (charset, code);
-                  CHAR_TABLE_SET (table, c, Qt);
-                }
-	}
-      else
-	{
-	  XCharStruct *pcm = font->per_char;
-	  int i;
-
-	  for (i = min_byte1; i <= max_byte1; i++)
-	    {
-	      int from = -1;
-	      int j;
-
-	      for (j = min_byte2; j <= max_byte2; j++, pcm++)
-		{
-		  if (pcm->width == 0 && pcm->rbearing == pcm->lbearing)
-		    {
-		      if (from >= 0)
-			{
-                          if (offset >= 0)
-                            char_table_set_range
-                              (table, offset + ((i << 8) | from),
-                               offset + ((i << 8) | (j - 1)), Qt);
-                          else
-                            {
-                              for (; from < j; from++)
-                                {
-                                  unsigned code = (i << 8) | from;
-                                  c = ENCODE_CHAR (charset, code);
-                                  CHAR_TABLE_SET (table, c, Qt);
-                                }
-                            }
-			  from = -1;
-			}
-		    }
-		  else if (from < 0)
-		    from = j;
-		}
-	      if (from >= 0)
-                {
-                  if (offset >= 0)
-                    char_table_set_range
-                      (table, offset + ((i << 8) | from),
-                       offset + ((i << 8) | (j - 1)), Qt);
-                  else
-                    {
-                      for (; from < j; from++)
-                        {
-                          unsigned code = (i << 8) | from;
-                          c = DECODE_CHAR (charset, code);
-                          CHAR_TABLE_SET (table, c, Qt);
-                        }
-                    }
-                }
-	    }
-	}
-    }
-#endif
-  return table;
-}
-
-
-/***********************************************************************
-			    Glyph display
- ***********************************************************************/
-
-
-/* Encapsulate the different ways of displaying text under W32.  */
-
-static void
-w32_text_out (s, x, y,chars,nchars)
-     struct glyph_string * s;
-     int x, y;
-     wchar_t * chars;
-     int nchars;
-{
-  int charset_dim = w32_font_is_double_byte (s->font) ? 2 : 1;
-  if (s->font->bdf)
-    w32_BDF_TextOut (s->font->bdf, s->hdc,
-                     x, y, (char *) chars, charset_dim,
-                     nchars * charset_dim, 0);
-  else if (s->first_glyph->font_type == UNICODE_FONT)
-    ExtTextOutW (s->hdc, x, y, 0, NULL, chars, nchars, NULL);
-  else
-    ExtTextOutA (s->hdc, x, y, 0, NULL, (char *) chars,
-		 nchars * charset_dim, NULL);
-}
-
-#endif	/* OLD_FONT */
-
 static void x_set_glyph_string_clipping P_ ((struct glyph_string *));
 static void x_set_glyph_string_gc P_ ((struct glyph_string *));
 static void x_draw_glyph_string_background P_ ((struct glyph_string *,
@@ -1509,10 +919,6 @@
 static void w32_draw_box_rect P_ ((struct glyph_string *, int, int, int, int,
 				 int, int, int, RECT *));
 
-#if GLYPH_DEBUG
-static void x_check_font P_ ((struct frame *, XFontStruct *));
-#endif
-
 
 /* Set S->gc to a suitable GC for drawing glyph string S in cursor
    face.  */
@@ -1722,17 +1128,6 @@
   r.bottom = r.top + src->height;
   dst->clip[0] = r;
   dst->num_clips = 1;
-#if OLD_FONT
-    {
-  struct glyph_string *clip_head = src->clip_head;
-  struct glyph_string *clip_tail = src->clip_tail;
-
-  /* This foces clipping just this glyph string.  */
-  src->clip_head = src->clip_tail = src;
-  get_glyph_string_clip_rect (src, &r);
-  src->clip_head = clip_head, src->clip_tail = clip_tail;
-    }
-#endif	/* OLD_FONT */
   w32_set_clip_rectangle (dst->hdc, &r);
 }
 
@@ -5770,109 +5165,6 @@
 
 /* Changing the font of the frame.  */
 
-#if OLD_FONT
-
-/* Give frame F the font named FONTNAME as its default font, and
-   return the full name of that font.  FONTNAME may be a wildcard
-   pattern; in that case, we choose some font that fits the pattern.
-   The return value shows which font we chose.  */
-
-Lisp_Object
-x_new_font (f, fontname)
-     struct frame *f;
-     register char *fontname;
-{
-  struct font_info *fontp
-    = FS_LOAD_FONT (f, fontname);
-
-  if (!fontp)
-    return Qnil;
-
-  if (FRAME_FONT (f) == (XFontStruct *) (fontp->font))
-    /* This font is already set in frame F.  There's nothing more to
-       do.  */
-    return build_string (fontp->full_name);
-
-  FRAME_FONT (f) = (XFontStruct *) (fontp->font);
-  FRAME_BASELINE_OFFSET (f) = fontp->baseline_offset;
-  FRAME_FONTSET (f) = -1;
-
-  FRAME_COLUMN_WIDTH (f) = fontp->average_width;
-  FRAME_SPACE_WIDTH (f) = fontp->space_width;
-  FRAME_LINE_HEIGHT (f) = FONT_HEIGHT (FRAME_FONT (f));
-
-  compute_fringe_widths (f, 1);
-
-  /* Compute the scroll bar width in character columns.  */
-  if (FRAME_CONFIG_SCROLL_BAR_WIDTH (f) > 0)
-    {
-      int wid = FRAME_COLUMN_WIDTH (f);
-      FRAME_CONFIG_SCROLL_BAR_COLS (f)
-	= (FRAME_CONFIG_SCROLL_BAR_WIDTH (f) + wid-1) / wid;
-    }
-  else
-    {
-      int wid = FRAME_COLUMN_WIDTH (f);
-      FRAME_CONFIG_SCROLL_BAR_COLS (f) = (14 + wid - 1) / wid;
-    }
-
-  /* Now make the frame display the given font.  */
-  if (FRAME_W32_WINDOW (f) != 0)
-    {
-      if (NILP (tip_frame) || XFRAME (tip_frame) != f)
-        x_set_window_size (f, 0, FRAME_COLS (f), FRAME_LINES (f));
-    }
-
-  return build_string (fontp->full_name);
-}
-
-/* Give frame F the fontset named FONTSETNAME as its default fontset,
-   and return the full name of that fontset.  FONTSETNAME may be a
-   wildcard pattern; in that case, we choose some fontset that fits
-   the pattern.  FONTSETNAME may be a font name for ASCII characters;
-   in that case, we create a fontset from that font name.
-
-   The return value shows which fontset we chose.
-   If FONTSETNAME specifies the default fontset, return Qt.
-   If an ASCII font in the specified fontset can't be loaded, return
-   Qnil.  */
-
-Lisp_Object
-x_new_fontset (f, fontsetname)
-     struct frame *f;
-     Lisp_Object fontsetname;
-{
-  int fontset = fs_query_fontset (fontsetname, 0);
-  Lisp_Object result;
-
-  if (fontset > 0 && FRAME_FONTSET(f) == fontset)
-    /* This fontset is already set in frame F.  There's nothing more
-       to do.  */
-    return fontset_name (fontset);
-  else if (fontset == 0)
-    /* The default fontset can't be the default font.   */
-    return Qt;
-
-  if (fontset > 0)
-    result = x_new_font (f, (SDATA (fontset_ascii (fontset))));
-  else
-    result = x_new_font (f, SDATA (fontsetname));
-
-  if (!STRINGP (result))
-    /* Can't load ASCII font.  */
-    return Qnil;
-
-  if (fontset < 0)
-    fontset = new_fontset_from_font_name (result);
-
-  /* Since x_new_font doesn't update any fontset information, do it now.  */
-  FRAME_FONTSET(f) = fontset;
-
-  return fontset_name (fontset);
-}
-#endif	/* OLD_FONT */
-
-
 Lisp_Object
 x_new_font (f, font_object, fontset)
      struct frame *f;
@@ -6601,118 +5893,6 @@
 
 
 /***********************************************************************
-				Fonts
- ***********************************************************************/
-
-#if OLD_FONT
-
-/* The following functions are listed here to help diff stay in step
-   with xterm.c.  See w32fns.c for definitions.
-
-x_get_font_info (f, font_idx)
-x_list_fonts (f, pattern, size, maxnames)
-
- */
-
-#if GLYPH_DEBUG
-
-/* Check that FONT is valid on frame F.  It is if it can be found in F's
-   font table.  */
-
-static void
-x_check_font (f, font)
-     struct frame *f;
-     XFontStruct *font;
-{
-  int i;
-  struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f);
-
-  xassert (font != NULL);
-
-  for (i = 0; i < dpyinfo->n_fonts; i++)
-    if (dpyinfo->font_table[i].name
-	&& font == dpyinfo->font_table[i].font)
-      break;
-
-  xassert (i < dpyinfo->n_fonts);
-}
-
-#endif /* GLYPH_DEBUG != 0 */
-
-/* Set *W to the minimum width, *H to the minimum font height of FONT.
-   Note: There are (broken) X fonts out there with invalid XFontStruct
-   min_bounds contents.  For example, handa@etl.go.jp reports that
-   "-adobe-courier-medium-r-normal--*-180-*-*-m-*-iso8859-1" fonts
-   have font->min_bounds.width == 0.  */
-
-static INLINE void
-x_font_min_bounds (font, w, h)
-     XFontStruct *font;
-     int *w, *h;
-{
-  /*
-   * TODO: Windows does not appear to offer min bound, only
-   * average and maximum width, and maximum height.
-   */
-  *h = FONT_HEIGHT (font);
-  *w = FONT_AVG_WIDTH (font);
-}
-
-
-/* Compute the smallest character width and smallest font height over
-   all fonts available on frame F.  Set the members smallest_char_width
-   and smallest_font_height in F's x_display_info structure to
-   the values computed.  Value is non-zero if smallest_font_height or
-   smallest_char_width become smaller than they were before.  */
-
-int
-x_compute_min_glyph_bounds (f)
-     struct frame *f;
-{
-  int i;
-  struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f);
-  XFontStruct *font;
-  int old_width = dpyinfo->smallest_char_width;
-  int old_height = dpyinfo->smallest_font_height;
-
-  dpyinfo->smallest_font_height = 100000;
-  dpyinfo->smallest_char_width = 100000;
-
-  for (i = 0; i < dpyinfo->n_fonts; ++i)
-    if (dpyinfo->font_table[i].name)
-      {
-	struct font_info *fontp = dpyinfo->font_table + i;
-	int w, h;
-
-	font = (XFontStruct *) fontp->font;
-	xassert (font != (XFontStruct *) ~0);
-	x_font_min_bounds (font, &w, &h);
-
-	dpyinfo->smallest_font_height = min (dpyinfo->smallest_font_height, h);
-	dpyinfo->smallest_char_width = min (dpyinfo->smallest_char_width, w);
-      }
-
-  xassert (dpyinfo->smallest_char_width > 0
-	   && dpyinfo->smallest_font_height > 0);
-
-  return (dpyinfo->n_fonts == 1
-	  || dpyinfo->smallest_char_width < old_width
-	  || dpyinfo->smallest_font_height < old_height);
-}
-
-/* The following functions are listed here to help diff stay in step
-   with xterm.c.  See w32fns.c for definitions.
-
-x_load_font (f, fontname, size)
-x_query_font (f, fontname)
-x_find_ccl_program (fontp)
-
-*/
-
-#endif	/* OLD_FONT */
-
-
-/***********************************************************************
 			    Initialization
  ***********************************************************************/
 
@@ -6844,10 +6024,6 @@
   w32_draw_fringe_bitmap,
   w32_define_fringe_bitmap,
   w32_destroy_fringe_bitmap,
-#if OLD_FONT
-  w32_per_char_metric,
-  w32_encode_char,
-#endif
   w32_compute_glyph_string_overhangs,
   x_draw_glyph_string,
   w32_define_frame_cursor,
@@ -6935,14 +6111,6 @@
     return;
 
   BLOCK_INPUT;
-#if OLD_FONT
-  /* Free the fonts in the font table.  */
-  for (i = 0; i < dpyinfo->n_fonts; i++)
-    if (dpyinfo->font_table[i].name)
-      {
-        DeleteObject (((XFontStruct*)(dpyinfo->font_table[i].font))->hfont);
-      }
-#endif
 
   x_delete_display (dpyinfo);
   UNBLOCK_INPUT;
@@ -7071,9 +6239,6 @@
     if (dpyinfo->palette)
       DeleteObject(dpyinfo->palette);
   }
-#if OLD_FONT
-  xfree (dpyinfo->font_table);
-#endif
   xfree (dpyinfo->w32_id_name);
 
   w32_reset_fringes ();
--- a/src/w32term.h	Fri Jun 20 20:00:14 2008 +0000
+++ b/src/w32term.h	Fri Jun 20 21:46:05 2008 +0000
@@ -145,14 +145,6 @@
      received; value is reset after key is received.  */
   int faked_key;
 
-#if OLD_FONT
-  /* A table of all the fonts we have already loaded.  */
-  struct font_info *font_table;
-
-  /* The current capacity of font_table.  */
-  int font_table_size;
-#endif
-
   /* Minimum width over all characters in all fonts in font_table.  */
   int smallest_char_width;
 
@@ -251,15 +243,6 @@
 
 extern struct w32_display_info *w32_term_init ();
 
-#if OLD_FONT
-extern Lisp_Object w32_list_fonts P_ ((struct frame *, Lisp_Object, int, int));
-extern struct font_info *w32_get_font_info (), *w32_query_font ();
-extern void w32_cache_char_metrics (XFontStruct *font);
-extern void w32_find_ccl_program();
-extern Lisp_Object x_get_font_repertory P_ ((struct frame *,
-					     struct font_info *));
-#endif
-
 #define PIX_TYPE COLORREF
 
 /* Each W32 frame object points to its own struct w32_display object
@@ -321,9 +304,6 @@
   Window parent_desc;
 
   /* Default ASCII font of this frame. */
-#if OLD_FONT
-  XFontStruct *font;
-#endif
   struct font *font;
 
   /* The baseline offset of the default ASCII font.  */
@@ -419,11 +399,6 @@
 /* This is the `Display *' which frame F is on.  */
 #define FRAME_X_DISPLAY(f) (0)
 
-#if OLD_FONT
-/* This is the 'font_info *' which frame F has.  */
-#define FRAME_W32_FONT_TABLE(f) (FRAME_W32_DISPLAY_INFO (f)->font_table)
-#endif
-
 /* Value is the smallest width of any character in any font on frame F.  */
 
 #define FRAME_SMALLEST_CHAR_WIDTH(F) \
@@ -593,11 +568,6 @@
 #define w32_clear_area(f,hdc,px,py,nx,ny) \
   w32_fill_area (f, hdc, FRAME_BACKGROUND_PIXEL (f), px, py, nx, ny)
 
-#if OLD_FONT
-extern struct font_info *w32_load_font ();
-extern void w32_unload_font ();
-#endif
-
 /* Define for earlier versions of Visual C */
 #ifndef WM_MOUSEWHEEL
 #define WM_MOUSEWHEEL 		       (WM_MOUSELAST + 1)