--- /dev/null
+diff -crN -x Makefile xc/lib/font/FreeType/ft.h xc.new/lib/font/FreeType/ft.h
+*** xc/lib/font/FreeType/ft.h Sun Apr 25 18:32:21 1999
+--- xc.new/lib/font/FreeType/ft.h Sun Oct 10 01:48:10 1999
+***************
+*** 64,69 ****
+--- 64,70 ----
+ {
+ int has_cmap;
+ TT_CharMap cmap;
++ int base;
+ struct font_encoding *encoding;
+ struct font_encoding_mapping *mapping;
+ };
+***************
+*** 78,83 ****
+--- 79,85 ----
+
+ int ttf_pick_cmap(char*, int, char*, TT_Face, struct ttf_mapping *);
+ int ftstrcasecmp(const char *s1, const char *s2);
++ unsigned ttf_remap(unsigned code, struct ttf_mapping *tm);
+
+ /* ftutil.c */
+
+***************
+*** 85,90 ****
+ int ttf_u2a(int, char*, char*, int);
+ int FTtoXReturnCode(int);
+ int ttf_GetEnglishName(TT_Face, char *, int);
+!
+!
+
+--- 87,91 ----
+ int ttf_u2a(int, char*, char*, int);
+ int FTtoXReturnCode(int);
+ int ttf_GetEnglishName(TT_Face, char *, int);
+! int ttf_checkForTTCName(char*, char**, int*);
+
+diff -crN -x Makefile xc/lib/font/FreeType/ftenc.c xc.new/lib/font/FreeType/ftenc.c
+*** xc/lib/font/FreeType/ftenc.c Sun Apr 25 18:32:21 1999
+--- xc.new/lib/font/FreeType/ftenc.c Sun Oct 10 02:51:55 1999
+***************
+*** 23,28 ****
+--- 23,29 ----
+ */
+
+ /* TrueType-dependent encoding code */
++ #include <string.h>
+
+ #include "fontmisc.h" /* defines xalloc and friends */
+ #include "fontenc.h"
+***************
+*** 41,46 ****
+--- 42,48 ----
+ struct font_encoding *encoding;
+ struct font_encoding_mapping *mapping;
+ TT_CharMap cmap;
++
+
+ char *encoding_name=0;
+
+***************
+*** 51,56 ****
+--- 53,59 ----
+
+ if(!strcasecmp(encoding_name, "truetype-raw")) {
+ tm->has_cmap=0;
++ tm->base=0;
+ tm->encoding=0;
+ tm->mapping=0;
+ return 0;
+***************
+*** 61,66 ****
+--- 64,79 ----
+ &cmap)) {
+ tm->has_cmap=1;
+ tm->cmap=cmap;
++ if(!strcasecmp(encoding_name, "microsoft-symbol")) {
++ /* deal with undocumented lossage */
++ TT_Face_Properties properties;
++ if(!TT_Get_Face_Properties(face, &properties) &&
++ properties.os2!=0)
++ tm->base=properties.os2->usFirstCharIndex-0x20;
++ else
++ tm->base=0;
++ } else
++ tm->base=0;
+ tm->encoding=encoding;
+ tm->mapping=mapping;
+ return 0;
+***************
+*** 82,87 ****
+--- 95,101 ----
+ if(!find_cmap(FONT_ENCODING_UNICODE, 0, 0, face, &cmap)) {
+ tm->has_cmap=1;
+ tm->cmap=cmap;
++ tm->base=0;
+ tm->encoding=0;
+ tm->mapping=0;
+ return 0;
+***************
+*** 91,96 ****
+--- 105,111 ----
+ if(!TT_Get_CharMap(face, 0, &cmap)) {
+ tm->has_cmap=1;
+ tm->cmap=cmap;
++ tm->base=0;
+ tm->encoding=0;
+ tm->mapping=0;
+ return 0;
+***************
+*** 98,103 ****
+--- 113,119 ----
+
+ /* Tough. */
+ tm->has_cmap=0;
++ tm->base=0;
+ tm->encoding=0;
+ tm->mapping=0;
+ return 0;
+***************
+*** 170,175 ****
+--- 186,192 ----
+ else
+ return 0;
+ }
++ index += tm->base;
+ if(tm->has_cmap)
+ return TT_Char_Index(tm->cmap, index);
+ else
+diff -crN -x Makefile xc/lib/font/FreeType/ftfuncs.c xc.new/lib/font/FreeType/ftfuncs.c
+*** xc/lib/font/FreeType/ftfuncs.c Sun Jun 13 19:06:17 1999
+--- xc.new/lib/font/FreeType/ftfuncs.c Sun Oct 10 01:49:04 1999
+***************
+*** 23,28 ****
+--- 23,30 ----
+
+ /* $XFree86: xc/lib/font/FreeType/ftfuncs.c,v 1.11 1999/06/13 13:47:29 dawes Exp $ */
+
++ #include <string.h>
++
+ #include "fontmisc.h"
+ #include "fntfilst.h"
+ #include "fontutil.h"
+***************
+*** 134,140 ****
+
+ face->instances=0;
+
+! if(ttc_checkForTTCName(fileName, &realFileName, &faceNumber)) {
+ ftrc=TT_Open_Collection(ftypeEngine, realFileName, faceNumber,
+ &face->face);
+ } else {
+--- 136,142 ----
+
+ face->instances=0;
+
+! if(ttf_checkForTTCName(fileName, &realFileName, &faceNumber)) {
+ ftrc=TT_Open_Collection(ftypeEngine, realFileName, faceNumber,
+ &face->face);
+ } else {
+***************
+*** 775,781 ****
+ static void
+ FreeTypeFreeXFont(FontPtr pFont, int freeProps)
+ {
+- int i;
+ TTFFont *tf;
+
+ if(pFont) {
+--- 777,782 ----
+***************
+*** 812,818 ****
+ int rawAverageWidth)
+ {
+ int i, j, maxprops;
+- unsigned long code;
+ char *sp, *ep, val[256];
+ TT_Instance_Metrics imetrics;
+ int upm; /* units per em */
+--- 813,818 ----
+***************
+*** 1573,1579 ****
+ FontEncoding charEncoding, unsigned long *glyphCount,
+ CharInfoPtr *glyphs, int nlevels)
+ {
+- int idx;
+ unsigned code;
+ TTFFont *tf;
+ CharInfoPtr *gp;
+--- 1573,1578 ----
+diff -crN -x Makefile xc/lib/font/FreeType/ftfuncs.h xc.new/lib/font/FreeType/ftfuncs.h
+*** xc/lib/font/FreeType/ftfuncs.h Sun Apr 25 18:32:22 1999
+--- xc.new/lib/font/FreeType/ftfuncs.h Sun Oct 10 01:45:15 1999
+***************
+*** 6,14 ****
+ /* Glyphs are held in segments of this size */
+ #define FONTSEGMENTSIZE 16
+
+- /* defined in atom.c */
+- Atom MakeAtom(char *, unsigned, int);
+-
+ /* A structure that holds bitmap order and padding info. */
+
+ typedef struct {
+--- 6,11 ----
+diff -crN -x Makefile xc/lib/font/FreeType/ftutil.c xc.new/lib/font/FreeType/ftutil.c
+*** xc/lib/font/FreeType/ftutil.c Sun Apr 25 18:32:22 1999
+--- xc.new/lib/font/FreeType/ftutil.c Sun Oct 10 01:50:22 1999
+***************
+*** 161,167 ****
+ int
+ ttf_GetEnglishName(TT_Face face, char *name, int nameID)
+ {
+! int i, j, nrec;
+ unsigned short slen;
+ unsigned short nrPlatformID, nrEncodingID, nrLanguageID, nrNameID;
+ char *s;
+--- 161,167 ----
+ int
+ ttf_GetEnglishName(TT_Face face, char *name, int nameID)
+ {
+! int i, nrec;
+ unsigned short slen;
+ unsigned short nrPlatformID, nrEncodingID, nrLanguageID, nrNameID;
+ char *s;
+***************
+*** 179,185 ****
+ nrLanguageID==0x0c09 || nrLanguageID==0x1009 ||
+ nrLanguageID==0x1409 || nrLanguageID==0x1809)) ||
+ /* or for Apple, Unicode, English */
+! ((nrPlatformID==0 && nrNameID==nameID &
+ nrLanguageID==0))) {
+ if(!TT_Get_Name_String(face, i, &s, &slen))
+ return ttf_u2a(slen, s, name, MSBFirst);
+--- 179,185 ----
+ nrLanguageID==0x0c09 || nrLanguageID==0x1009 ||
+ nrLanguageID==0x1409 || nrLanguageID==0x1809)) ||
+ /* or for Apple, Unicode, English */
+! ((nrPlatformID==0 && nrNameID==nameID &&
+ nrLanguageID==0))) {
+ if(!TT_Get_Name_String(face, i, &s, &slen))
+ return ttf_u2a(slen, s, name, MSBFirst);
+***************
+*** 206,212 ****
+ }
+
+ int
+! ttc_checkForTTCName(char *fileName, char **realFileName, int *faceNumber)
+ {
+ int length;
+ int fn;
+--- 206,212 ----
+ }
+
+ int
+! ttf_checkForTTCName(char *fileName, char **realFileName, int *faceNumber)
+ {
+ int length;
+ int fn;
+diff -crN -x Makefile xc/lib/font/fontfile/fontenc.c xc.new/lib/font/fontfile/fontenc.c
+*** xc/lib/font/fontfile/fontenc.c Sun Oct 10 03:03:10 1999
+--- xc.new/lib/font/fontfile/fontenc.c Sun Oct 10 02:24:00 1999
+***************
+*** 518,537 ****
+ {0,0,0,0,0,0,0}
+ };
+
+! /* Apparently, Microsoft Symbol aims at being compatible with Unicode
+! * by using the 16 columns of the Private Use Area starting at code
+! * 0xF000. */
+!
+! static unsigned
+! eight_bit_to_microsoft_symbol(unsigned code, void *client_data)
+! {
+! return code+0xF000;
+! }
+
+ static struct font_encoding_mapping microsoft_symbol[]=
+! {{FONT_ENCODING_TRUETYPE,3,0,eight_bit_to_microsoft_symbol,0,0,0},
+ /* You never know */
+! {FONT_ENCODING_TRUETYPE,3,1,eight_bit_to_microsoft_symbol,0,0,0},
+ {0,0,0,0,0,0,0}};
+
+ static struct font_encoding_mapping apple_roman[]=
+--- 518,531 ----
+ {0,0,0,0,0,0,0}
+ };
+
+! /* Microsoft Symbol is treated specially in ftenc.c, where we add
+! * usFirstCharIndex-0x20 to the glyph index before applying the
+! * cmap. */
+
+ static struct font_encoding_mapping microsoft_symbol[]=
+! {{FONT_ENCODING_TRUETYPE,3,0,0,0,0,0},
+ /* You never know */
+! {FONT_ENCODING_TRUETYPE,3,1,0,0,0,0},
+ {0,0,0,0,0,0,0}};
+
+ static struct font_encoding_mapping apple_roman[]=