diff src/objects-msw.c @ 213:78f53ef88e17 r20-4b5

Import from CVS: tag r20-4b5
author cvs
date Mon, 13 Aug 2007 10:06:47 +0200
parents
children d44af0c54775
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/objects-msw.c	Mon Aug 13 10:06:47 2007 +0200
@@ -0,0 +1,1095 @@
+/* mswindows-specific Lisp objects.
+   Copyright (C) 1993, 1994 Free Software Foundation, Inc.
+   Copyright (C) 1995 Board of Trustees, University of Illinois.
+   Copyright (C) 1995 Tinker Systems.
+   Copyright (C) 1995, 1996 Ben Wing.
+   Copyright (C) 1995 Sun Microsystems, Inc.
+   Copyright (C) 1997 Jonathan Harris.
+
+This file is part of XEmacs.
+
+XEmacs is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+XEmacs is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with XEmacs; see the file COPYING.  If not, write to
+the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+/* Synched up with: Not in FSF. */
+
+/* Authorship:
+
+   Jamie Zawinski, Chuck Thompson, Ben Wing
+   Rewritten for mswindows by Jonathan Harris, November 1997 for 20.4.
+ */
+
+
+/* TODO: palette handling */
+
+#include <config.h>
+#include "lisp.h"
+
+#include "console-msw.h"
+#include "objects-msw.h"
+
+#ifdef MULE
+#include "mule-charset.h"
+#endif
+
+#include "buffer.h"
+#include "device.h"
+#include "insdel.h"
+
+#include "windows.h"
+
+typedef struct colormap_t 
+{
+  char *name;
+  COLORREF colorref;
+} colormap_t;
+
+static CONST colormap_t mswindows_X_color_map[] = 
+{
+  {"Black"			, PALETTERGB (  0,  0,  0)},
+  {"Gray0"			, PALETTERGB (  0,  0,  0)},
+  {"Grey0"			, PALETTERGB (  0,  0,  0)},
+  {"Transparent"			, PALETTERGB (  0,  0,  1)},
+  {"NavyBlue"			, PALETTERGB (  0,  0,128)},
+  {"navy"			, PALETTERGB (  0,  0,128)},
+  {"blue4"			, PALETTERGB (  0,  0,139)},
+  {"MediumBlue"			, PALETTERGB (  0,  0,205)},
+  {"blue3"			, PALETTERGB (  0,  0,205)},
+  {"blue2"			, PALETTERGB (  0,  0,238)},
+  {"Blue"			, PALETTERGB (  0,  0,255)},
+  {"blue1"			, PALETTERGB (  0,  0,255)},
+  {"DarkGreen"			, PALETTERGB (  0, 86, 45)},
+  {"DeepSkyBlue4"			, PALETTERGB (  0,104,139)},
+  {"turquoise4"			, PALETTERGB (  0,134,139)},
+  {"green4"			, PALETTERGB (  0,139,  0)},
+  {"SpringGreen4"			, PALETTERGB (  0,139, 69)},
+  {"cyan4"			, PALETTERGB (  0,139,139)},
+  {"MediumAquamarine"			, PALETTERGB (  0,147,143)},
+  {"DeepSkyBlue3"			, PALETTERGB (  0,154,205)},
+  {"DarkTurquoise"			, PALETTERGB (  0,166,166)},
+  {"LimeGreen"			, PALETTERGB (  0,175, 20)},
+  {"DeepSkyBlue2"			, PALETTERGB (  0,178,238)},
+  {"DeepSkyBlue"			, PALETTERGB (  0,191,255)},
+  {"DeepSkyBlue1"			, PALETTERGB (  0,191,255)},
+  {"turquoise3"			, PALETTERGB (  0,197,205)},
+  {"green3"			, PALETTERGB (  0,205,  0)},
+  {"SpringGreen3"			, PALETTERGB (  0,205,102)},
+  {"cyan3"			, PALETTERGB (  0,205,205)},
+  {"MediumTurquoise"			, PALETTERGB (  0,210,210)},
+  {"turquoise2"			, PALETTERGB (  0,229,238)},
+  {"green2"			, PALETTERGB (  0,238,  0)},
+  {"SpringGreen2"			, PALETTERGB (  0,238,118)},
+  {"cyan2"			, PALETTERGB (  0,238,238)},
+  {"turquoise1"			, PALETTERGB (  0,245,255)},
+  {"MediumSpringGreen"			, PALETTERGB (  0,250,154)},
+  {"Green"			, PALETTERGB (  0,255,  0)},
+  {"green1"			, PALETTERGB (  0,255,  0)},
+  {"SpringGreen"			, PALETTERGB (  0,255,127)},
+  {"SpringGreen1"			, PALETTERGB (  0,255,127)},
+  {"Cyan"			, PALETTERGB (  0,255,255)},
+  {"cyan1"			, PALETTERGB (  0,255,255)},
+  {"Gray1"			, PALETTERGB (  3,  3,  3)},
+  {"Grey1"			, PALETTERGB (  3,  3,  3)},
+  {"Gray2"			, PALETTERGB (  5,  5,  5)},
+  {"Grey2"			, PALETTERGB (  5,  5,  5)},
+  {"Gray3"			, PALETTERGB (  8,  8,  8)},
+  {"Grey3"			, PALETTERGB (  8,  8,  8)},
+  {"Gray4"			, PALETTERGB ( 10, 10, 10)},
+  {"Grey4"			, PALETTERGB ( 10, 10, 10)},
+  {"Gray5"			, PALETTERGB ( 13, 13, 13)},
+  {"Grey5"			, PALETTERGB ( 13, 13, 13)},
+  {"Gray6"			, PALETTERGB ( 15, 15, 15)},
+  {"Grey6"			, PALETTERGB ( 15, 15, 15)},
+  {"DodgerBlue4"			, PALETTERGB ( 16, 78,139)},
+  {"Gray7"			, PALETTERGB ( 18, 18, 18)},
+  {"Grey7"			, PALETTERGB ( 18, 18, 18)},
+  {"Gray8"			, PALETTERGB ( 20, 20, 20)},
+  {"Grey8"			, PALETTERGB ( 20, 20, 20)},
+  {"Gray9"			, PALETTERGB ( 23, 23, 23)},
+  {"Grey9"			, PALETTERGB ( 23, 23, 23)},
+  {"DodgerBlue3"			, PALETTERGB ( 24,116,205)},
+  {"MidnightBlue"			, PALETTERGB ( 25, 25,112)},
+  {"Turquoise"			, PALETTERGB ( 25,204,223)},
+  {"Gray10"			, PALETTERGB ( 26, 26, 26)},
+  {"Grey10"			, PALETTERGB ( 26, 26, 26)},
+  {"Gray11"			, PALETTERGB ( 28, 28, 28)},
+  {"Grey11"			, PALETTERGB ( 28, 28, 28)},
+  {"DodgerBlue2"			, PALETTERGB ( 28,134,238)},
+  {"DodgerBlue"			, PALETTERGB ( 30,144,255)},
+  {"DodgerBlue1"			, PALETTERGB ( 30,144,255)},
+  {"Gray12"			, PALETTERGB ( 31, 31, 31)},
+  {"Grey12"			, PALETTERGB ( 31, 31, 31)},
+  {"LightSeaGreen"			, PALETTERGB ( 32,178,170)},
+  {"Gray13"			, PALETTERGB ( 33, 33, 33)},
+  {"Grey13"			, PALETTERGB ( 33, 33, 33)},
+  {"Indigo2"			, PALETTERGB ( 33,136,104)},
+  {"CornflowerBlue"			, PALETTERGB ( 34, 34,152)},
+  {"ForestGreen"			, PALETTERGB ( 34,139, 34)},
+  {"Gray14"			, PALETTERGB ( 36, 36, 36)},
+  {"Grey14"			, PALETTERGB ( 36, 36, 36)},
+  {"Gray15"			, PALETTERGB ( 38, 38, 38)},
+  {"Grey15"			, PALETTERGB ( 38, 38, 38)},
+  {"RoyalBlue4"			, PALETTERGB ( 39, 64,139)},
+  {"Gray16"			, PALETTERGB ( 41, 41, 41)},
+  {"Grey16"			, PALETTERGB ( 41, 41, 41)},
+  {"Gray17"			, PALETTERGB ( 43, 43, 43)},
+  {"Grey17"			, PALETTERGB ( 43, 43, 43)},
+  {"Gray18"			, PALETTERGB ( 46, 46, 46)},
+  {"Grey18"			, PALETTERGB ( 46, 46, 46)},
+  {"SeaGreen"			, PALETTERGB ( 46,139, 87)},
+  {"SeaGreen4"			, PALETTERGB ( 46,139, 87)},
+  {"DarkSlateGray"			, PALETTERGB ( 47, 79, 79)},
+  {"DarkSlateGrey"			, PALETTERGB ( 47, 79, 79)},
+  {"Gray19"			, PALETTERGB ( 48, 48, 48)},
+  {"Grey19"			, PALETTERGB ( 48, 48, 48)},
+  {"MediumForestGreen"			, PALETTERGB ( 50,129, 75)},
+  {"Aquamarine"			, PALETTERGB ( 50,191,193)},
+  {"YellowGreen"			, PALETTERGB ( 50,216, 56)},
+  {"Gray20"			, PALETTERGB ( 51, 51, 51)},
+  {"Grey20"			, PALETTERGB ( 51, 51, 51)},
+  {"MediumSeaGreen"			, PALETTERGB ( 52,119,102)},
+  {"Gray21"			, PALETTERGB ( 54, 54, 54)},
+  {"Grey21"			, PALETTERGB ( 54, 54, 54)},
+  {"SteelBlue4"			, PALETTERGB ( 54,100,139)},
+  {"Gray22"			, PALETTERGB ( 56, 56, 56)},
+  {"Grey22"			, PALETTERGB ( 56, 56, 56)},
+  {"DarkSlateBlue"			, PALETTERGB ( 56, 75,102)},
+  {"RoyalBlue3"			, PALETTERGB ( 58, 95,205)},
+  {"Gray23"			, PALETTERGB ( 59, 59, 59)},
+  {"Grey23"			, PALETTERGB ( 59, 59, 59)},
+  {"Gray24"			, PALETTERGB ( 61, 61, 61)},
+  {"Grey24"			, PALETTERGB ( 61, 61, 61)},
+  {"Gray25"			, PALETTERGB ( 64, 64, 64)},
+  {"Grey25"			, PALETTERGB ( 64, 64, 64)},
+  {"RoyalBlue"			, PALETTERGB ( 65,105,225)},
+  {"Gray26"			, PALETTERGB ( 66, 66, 66)},
+  {"Grey26"			, PALETTERGB ( 66, 66, 66)},
+  {"RoyalBlue2"			, PALETTERGB ( 67,110,238)},
+  {"SeaGreen3"			, PALETTERGB ( 67,205,128)},
+  {"Gray27"			, PALETTERGB ( 69, 69, 69)},
+  {"Grey27"			, PALETTERGB ( 69, 69, 69)},
+  {"chartreuse4"			, PALETTERGB ( 69,139,  0)},
+  {"aquamarine4"			, PALETTERGB ( 69,139,116)},
+  {"SteelBlue"			, PALETTERGB ( 70,130,180)},
+  {"SlateBlue4"			, PALETTERGB ( 71, 60,139)},
+  {"Gray28"			, PALETTERGB ( 71, 71, 71)},
+  {"Grey28"			, PALETTERGB ( 71, 71, 71)},
+  {"RoyalBlue1"			, PALETTERGB ( 72,118,255)},
+  {"Gray29"			, PALETTERGB ( 74, 74, 74)},
+  {"Grey29"			, PALETTERGB ( 74, 74, 74)},
+  {"SkyBlue4"			, PALETTERGB ( 74,112,139)},
+  {"Indigo"			, PALETTERGB ( 75,  0,130)},
+  {"Gray30"			, PALETTERGB ( 77, 77, 77)},
+  {"Grey30"			, PALETTERGB ( 77, 77, 77)},
+  {"SeaGreen2"			, PALETTERGB ( 78,238,148)},
+  {"Gray31"			, PALETTERGB ( 79, 79, 79)},
+  {"Grey31"			, PALETTERGB ( 79, 79, 79)},
+  {"SteelBlue3"			, PALETTERGB ( 79,148,205)},
+  {"Gray32"			, PALETTERGB ( 82, 82, 82)},
+  {"Grey32"			, PALETTERGB ( 82, 82, 82)},
+  {"DarkSlateGray4"			, PALETTERGB ( 82,139,139)},
+  {"CadetBlue4"			, PALETTERGB ( 83,134,139)},
+  {"DimGray"			, PALETTERGB ( 84, 84, 84)},
+  {"DimGrey"			, PALETTERGB ( 84, 84, 84)},
+  {"Gray33"			, PALETTERGB ( 84, 84, 84)},
+  {"Grey33"			, PALETTERGB ( 84, 84, 84)},
+  {"PaleGreen4"			, PALETTERGB ( 84,139, 84)},
+  {"SeaGreen1"			, PALETTERGB ( 84,255,159)},
+  {"purple4"			, PALETTERGB ( 85, 26,139)},
+  {"DarkOliveGreen"			, PALETTERGB ( 85, 86, 47)},
+  {"Gray34"			, PALETTERGB ( 87, 87, 87)},
+  {"Grey34"			, PALETTERGB ( 87, 87, 87)},
+  {"Gray35"			, PALETTERGB ( 89, 89, 89)},
+  {"Grey35"			, PALETTERGB ( 89, 89, 89)},
+  {"Gray36"			, PALETTERGB ( 92, 92, 92)},
+  {"Grey36"			, PALETTERGB ( 92, 92, 92)},
+  {"SteelBlue2"			, PALETTERGB ( 92,172,238)},
+  {"MediumPurple4"			, PALETTERGB ( 93, 71,139)},
+  {"Gray37"			, PALETTERGB ( 94, 94, 94)},
+  {"Grey37"			, PALETTERGB ( 94, 94, 94)},
+  {"CadetBlue"			, PALETTERGB ( 95,146,158)},
+  {"LightSkyBlue4"			, PALETTERGB ( 96,123,139)},
+  {"Gray38"			, PALETTERGB ( 97, 97, 97)},
+  {"Grey38"			, PALETTERGB ( 97, 97, 97)},
+  {"Gray39"			, PALETTERGB ( 99, 99, 99)},
+  {"Grey39"			, PALETTERGB ( 99, 99, 99)},
+  {"SteelBlue1"			, PALETTERGB ( 99,184,255)},
+  {"Gray40"			, PALETTERGB (102,102,102)},
+  {"Grey40"			, PALETTERGB (102,102,102)},
+  {"PaleTurquoise4"			, PALETTERGB (102,139,139)},
+  {"chartreuse3"			, PALETTERGB (102,205,  0)},
+  {"aquamarine3"			, PALETTERGB (102,205,170)},
+  {"DarkOrchid4"			, PALETTERGB (104, 34,139)},
+  {"LightBlue4"			, PALETTERGB (104,131,139)},
+  {"SlateBlue3"			, PALETTERGB (105, 89,205)},
+  {"Gray41"			, PALETTERGB (105,105,105)},
+  {"Grey41"			, PALETTERGB (105,105,105)},
+  {"OliveDrab4"			, PALETTERGB (105,139, 34)},
+  {"DarkSeaGreen4"			, PALETTERGB (105,139,105)},
+  {"SlateBlue"			, PALETTERGB (106, 90,205)},
+  {"MediumSlateBlue"			, PALETTERGB (106,106,141)},
+  {"IndianRed"			, PALETTERGB (107, 57, 57)},
+  {"Gray42"			, PALETTERGB (107,107,107)},
+  {"Grey42"			, PALETTERGB (107,107,107)},
+  {"OliveDrab"			, PALETTERGB (107,142, 35)},
+  {"SlateGray4"			, PALETTERGB (108,123,139)},
+  {"SkyBlue3"			, PALETTERGB (108,166,205)},
+  {"Gray43"			, PALETTERGB (110,110,110)},
+  {"Grey43"			, PALETTERGB (110,110,110)},
+  {"LightSteelBlue4"			, PALETTERGB (110,123,139)},
+  {"DarkOliveGreen4"			, PALETTERGB (110,139, 61)},
+  {"Gray44"			, PALETTERGB (112,112,112)},
+  {"Grey44"			, PALETTERGB (112,112,112)},
+  {"SlateGray"			, PALETTERGB (112,128,144)},
+  {"SlateGrey"			, PALETTERGB (112,128,144)},
+  {"SkyBlue"			, PALETTERGB (114,159,255)},
+  {"Gray45"			, PALETTERGB (115,115,115)},
+  {"Grey45"			, PALETTERGB (115,115,115)},
+  {"PaleGreen"			, PALETTERGB (115,222,120)},
+  {"Gray46"			, PALETTERGB (117,117,117)},
+  {"Grey46"			, PALETTERGB (117,117,117)},
+  {"chartreuse2"			, PALETTERGB (118,238,  0)},
+  {"aquamarine2"			, PALETTERGB (118,238,198)},
+  {"LightSlateGray"			, PALETTERGB (119,136,153)},
+  {"LightSlateGrey"			, PALETTERGB (119,136,153)},
+  {"Gray47"			, PALETTERGB (120,120,120)},
+  {"Grey47"			, PALETTERGB (120,120,120)},
+  {"DarkSlateGray3"			, PALETTERGB (121,205,205)},
+  {"MediumOrchid4"			, PALETTERGB (122, 55,139)},
+  {"SlateBlue2"			, PALETTERGB (122,103,238)},
+  {"Gray48"			, PALETTERGB (122,122,122)},
+  {"Grey48"			, PALETTERGB (122,122,122)},
+  {"LightCyan4"			, PALETTERGB (122,139,139)},
+  {"CadetBlue3"			, PALETTERGB (122,197,205)},
+  {"LightSteelBlue"			, PALETTERGB (124,152,211)},
+  {"PaleGreen3"			, PALETTERGB (124,205,124)},
+  {"LawnGreen"			, PALETTERGB (124,252,  0)},
+  {"purple3"			, PALETTERGB (125, 38,205)},
+  {"Gray49"			, PALETTERGB (125,125,125)},
+  {"Grey49"			, PALETTERGB (125,125,125)},
+  {"Gray"			, PALETTERGB (126,126,126)},
+  {"Grey"			, PALETTERGB (126,126,126)},
+  {"SkyBlue2"			, PALETTERGB (126,192,238)},
+  {"Gray50"			, PALETTERGB (127,127,127)},
+  {"Grey50"			, PALETTERGB (127,127,127)},
+  {"chartreuse"			, PALETTERGB (127,255,  0)},
+  {"chartreuse1"			, PALETTERGB (127,255,  0)},
+  {"aquamarine1"			, PALETTERGB (127,255,212)},
+  {"Gray51"			, PALETTERGB (130,130,130)},
+  {"Grey51"			, PALETTERGB (130,130,130)},
+  {"SlateBlue1"			, PALETTERGB (131,111,255)},
+  {"honeydew4"			, PALETTERGB (131,139,131)},
+  {"azure4"			, PALETTERGB (131,139,139)},
+  {"LightSlateBlue"			, PALETTERGB (132,112,255)},
+  {"Gray52"			, PALETTERGB (133,133,133)},
+  {"Grey52"			, PALETTERGB (133,133,133)},
+  {"Gray53"			, PALETTERGB (135,135,135)},
+  {"Grey53"			, PALETTERGB (135,135,135)},
+  {"LightSkyBlue"			, PALETTERGB (135,206,250)},
+  {"SkyBlue1"			, PALETTERGB (135,206,255)},
+  {"MediumPurple3"			, PALETTERGB (137,104,205)},
+  {"BlueViolet"			, PALETTERGB (138, 43,226)},
+  {"Gray54"			, PALETTERGB (138,138,138)},
+  {"Grey54"			, PALETTERGB (138,138,138)},
+  {"red4"			, PALETTERGB (139,  0,  0)},
+  {"magenta4"			, PALETTERGB (139,  0,139)},
+  {"DeepPink4"			, PALETTERGB (139, 10, 80)},
+  {"firebrick4"			, PALETTERGB (139, 26, 26)},
+  {"maroon4"			, PALETTERGB (139, 28, 98)},
+  {"DarkOrchid"			, PALETTERGB (139, 32,139)},
+  {"VioletRed4"			, PALETTERGB (139, 34, 82)},
+  {"brown4"			, PALETTERGB (139, 35, 35)},
+  {"OrangeRed4"			, PALETTERGB (139, 37,  0)},
+  {"tomato4"			, PALETTERGB (139, 54, 38)},
+  {"IndianRed4"			, PALETTERGB (139, 58, 58)},
+  {"HotPink4"			, PALETTERGB (139, 58, 98)},
+  {"coral4"			, PALETTERGB (139, 62, 47)},
+  {"DarkOrange4"			, PALETTERGB (139, 69,  0)},
+  {"SaddleBrown"			, PALETTERGB (139, 69, 19)},
+  {"chocolate4"			, PALETTERGB (139, 69, 19)},
+  {"sienna4"			, PALETTERGB (139, 71, 38)},
+  {"PaleVioletRed4"			, PALETTERGB (139, 71, 93)},
+  {"orchid4"			, PALETTERGB (139, 71,137)},
+  {"salmon4"			, PALETTERGB (139, 76, 57)},
+  {"LightSalmon4"			, PALETTERGB (139, 87, 66)},
+  {"orange4"			, PALETTERGB (139, 90,  0)},
+  {"tan4"			, PALETTERGB (139, 90, 43)},
+  {"LightPink4"			, PALETTERGB (139, 95,101)},
+  {"pink4"			, PALETTERGB (139, 99,108)},
+  {"DarkGoldenrod4"			, PALETTERGB (139,101,  8)},
+  {"plum4"			, PALETTERGB (139,102,139)},
+  {"goldenrod4"			, PALETTERGB (139,105, 20)},
+  {"RosyBrown4"			, PALETTERGB (139,105,105)},
+  {"burlywood4"			, PALETTERGB (139,115, 85)},
+  {"gold4"			, PALETTERGB (139,117,  0)},
+  {"PeachPuff4"			, PALETTERGB (139,119,101)},
+  {"NavajoWhite4"			, PALETTERGB (139,121, 94)},
+  {"thistle4"			, PALETTERGB (139,123,139)},
+  {"bisque4"			, PALETTERGB (139,125,107)},
+  {"MistyRose4"			, PALETTERGB (139,125,123)},
+  {"wheat4"			, PALETTERGB (139,126,102)},
+  {"LightGoldenrod4"			, PALETTERGB (139,129, 76)},
+  {"AntiqueWhite4"			, PALETTERGB (139,131,120)},
+  {"LavenderBlush4"			, PALETTERGB (139,131,134)},
+  {"khaki4"			, PALETTERGB (139,134, 78)},
+  {"seashell4"			, PALETTERGB (139,134,130)},
+  {"cornsilk4"			, PALETTERGB (139,136,120)},
+  {"LemonChiffon4"			, PALETTERGB (139,137,112)},
+  {"snow4"			, PALETTERGB (139,137,137)},
+  {"yellow4"			, PALETTERGB (139,139,  0)},
+  {"LightYellow4"			, PALETTERGB (139,139,122)},
+  {"ivory4"			, PALETTERGB (139,139,131)},
+  {"Gray55"			, PALETTERGB (140,140,140)},
+  {"Grey55"			, PALETTERGB (140,140,140)},
+  {"LightSkyBlue3"			, PALETTERGB (141,182,205)},
+  {"DarkSlateGray2"			, PALETTERGB (141,238,238)},
+  {"Firebrick"			, PALETTERGB (142, 35, 35)},
+  {"CadetBlue2"			, PALETTERGB (142,229,238)},
+  {"Maroon"			, PALETTERGB (143,  0, 82)},
+  {"Gray56"			, PALETTERGB (143,143,143)},
+  {"Grey56"			, PALETTERGB (143,143,143)},
+  {"DarkSeaGreen"			, PALETTERGB (143,188,143)},
+  {"PaleGreen2"			, PALETTERGB (144,238,144)},
+  {"purple2"			, PALETTERGB (145, 44,238)},
+  {"Gray57"			, PALETTERGB (145,145,145)},
+  {"Grey57"			, PALETTERGB (145,145,145)},
+  {"MediumPurple"			, PALETTERGB (147,112,219)},
+  {"DarkViolet"			, PALETTERGB (148,  0,211)},
+  {"Gray58"			, PALETTERGB (148,148,148)},
+  {"Grey58"			, PALETTERGB (148,148,148)},
+  {"Sienna"			, PALETTERGB (150, 82, 45)},
+  {"Gray59"			, PALETTERGB (150,150,150)},
+  {"Grey59"			, PALETTERGB (150,150,150)},
+  {"PaleTurquoise3"			, PALETTERGB (150,205,205)},
+  {"DarkSlateGray1"			, PALETTERGB (151,255,255)},
+  {"CadetBlue1"			, PALETTERGB (152,245,255)},
+  {"Gray60"			, PALETTERGB (153,153,153)},
+  {"Grey60"			, PALETTERGB (153,153,153)},
+  {"DarkOrchid3"			, PALETTERGB (154, 50,205)},
+  {"LightBlue3"			, PALETTERGB (154,192,205)},
+  {"OliveDrab3"			, PALETTERGB (154,205, 50)},
+  {"PaleGreen1"			, PALETTERGB (154,255,154)},
+  {"purple1"			, PALETTERGB (155, 48,255)},
+  {"DarkSeaGreen3"			, PALETTERGB (155,205,155)},
+  {"Violet"			, PALETTERGB (156, 62,206)},
+  {"Gray61"			, PALETTERGB (156,156,156)},
+  {"Grey61"			, PALETTERGB (156,156,156)},
+  {"Gray62"			, PALETTERGB (158,158,158)},
+  {"Grey62"			, PALETTERGB (158,158,158)},
+  {"MediumPurple2"			, PALETTERGB (159,121,238)},
+  {"SlateGray3"			, PALETTERGB (159,182,205)},
+  {"purple"			, PALETTERGB (160, 32,240)},
+  {"Gray63"			, PALETTERGB (161,161,161)},
+  {"Grey63"			, PALETTERGB (161,161,161)},
+  {"LightSteelBlue3"			, PALETTERGB (162,181,205)},
+  {"DarkOliveGreen3"			, PALETTERGB (162,205, 90)},
+  {"Gray64"			, PALETTERGB (163,163,163)},
+  {"Grey64"			, PALETTERGB (163,163,163)},
+  {"LightSkyBlue2"			, PALETTERGB (164,211,238)},
+  {"Brown"			, PALETTERGB (165, 42, 42)},
+  {"Gray65"			, PALETTERGB (166,166,166)},
+  {"Grey65"			, PALETTERGB (166,166,166)},
+  {"Gray66"			, PALETTERGB (168,168,168)},
+  {"Grey66"			, PALETTERGB (168,168,168)},
+  {"LightGray"			, PALETTERGB (168,168,168)},
+  {"LightGrey"			, PALETTERGB (168,168,168)},
+  {"MediumPurple1"			, PALETTERGB (171,130,255)},
+  {"Gray67"			, PALETTERGB (171,171,171)},
+  {"Grey67"			, PALETTERGB (171,171,171)},
+  {"Gray68"			, PALETTERGB (173,173,173)},
+  {"Grey68"			, PALETTERGB (173,173,173)},
+  {"LightBlue"			, PALETTERGB (173,216,230)},
+  {"GreenYellow"			, PALETTERGB (173,255, 47)},
+  {"PaleTurquoise2"			, PALETTERGB (174,238,238)},
+  {"PaleTurquoise"			, PALETTERGB (175,238,238)},
+  {"Gray69"			, PALETTERGB (176,176,176)},
+  {"Grey69"			, PALETTERGB (176,176,176)},
+  {"PowderBlue"			, PALETTERGB (176,224,230)},
+  {"LightSkyBlue1"			, PALETTERGB (176,226,255)},
+  {"DarkOrchid2"			, PALETTERGB (178, 58,238)},
+  {"LightBlue2"			, PALETTERGB (178,223,238)},
+  {"Khaki"			, PALETTERGB (179,179,126)},
+  {"Gray70"			, PALETTERGB (179,179,179)},
+  {"Grey70"			, PALETTERGB (179,179,179)},
+  {"OliveDrab2"			, PALETTERGB (179,238, 58)},
+  {"MediumOrchid3"			, PALETTERGB (180, 82,205)},
+  {"LightCyan3"			, PALETTERGB (180,205,205)},
+  {"DarkSeaGreen2"			, PALETTERGB (180,238,180)},
+  {"Gray71"			, PALETTERGB (181,181,181)},
+  {"Grey71"			, PALETTERGB (181,181,181)},
+  {"DarkGoldenrod"			, PALETTERGB (184,134, 11)},
+  {"Gray72"			, PALETTERGB (184,184,184)},
+  {"Grey72"			, PALETTERGB (184,184,184)},
+  {"SlateGray2"			, PALETTERGB (185,211,238)},
+  {"MediumOrchid"			, PALETTERGB (186, 85,211)},
+  {"Gray73"			, PALETTERGB (186,186,186)},
+  {"Grey73"			, PALETTERGB (186,186,186)},
+  {"PaleTurquoise1"			, PALETTERGB (187,255,255)},
+  {"RosyBrown"			, PALETTERGB (188,143,143)},
+  {"LightSteelBlue2"			, PALETTERGB (188,210,238)},
+  {"DarkOliveGreen2"			, PALETTERGB (188,238,104)},
+  {"DarkKhaki"			, PALETTERGB (189,183,107)},
+  {"Gray74"			, PALETTERGB (189,189,189)},
+  {"Grey74"			, PALETTERGB (189,189,189)},
+  {"DarkOrchid1"			, PALETTERGB (191, 62,255)},
+  {"Gray75"			, PALETTERGB (191,191,191)},
+  {"Grey75"			, PALETTERGB (191,191,191)},
+  {"LightBlue1"			, PALETTERGB (191,239,255)},
+  {"OliveDrab1"			, PALETTERGB (192,255, 62)},
+  {"honeydew3"			, PALETTERGB (193,205,193)},
+  {"azure3"			, PALETTERGB (193,205,205)},
+  {"DarkSeaGreen1"			, PALETTERGB (193,255,193)},
+  {"Gray76"			, PALETTERGB (194,194,194)},
+  {"Grey76"			, PALETTERGB (194,194,194)},
+  {"Gray77"			, PALETTERGB (196,196,196)},
+  {"Grey77"			, PALETTERGB (196,196,196)},
+  {"Plum"			, PALETTERGB (197, 72,155)},
+  {"SlateGray1"			, PALETTERGB (198,226,255)},
+  {"MediumVioletRed"			, PALETTERGB (199, 21,133)},
+  {"Gray78"			, PALETTERGB (199,199,199)},
+  {"Grey78"			, PALETTERGB (199,199,199)},
+  {"Gray79"			, PALETTERGB (201,201,201)},
+  {"Grey79"			, PALETTERGB (201,201,201)},
+  {"LightSteelBlue1"			, PALETTERGB (202,225,255)},
+  {"DarkOliveGreen1"			, PALETTERGB (202,255,112)},
+  {"Gray80"			, PALETTERGB (204,204,204)},
+  {"Grey80"			, PALETTERGB (204,204,204)},
+  {"red3"			, PALETTERGB (205,  0,  0)},
+  {"magenta3"			, PALETTERGB (205,  0,205)},
+  {"DeepPink3"			, PALETTERGB (205, 16,118)},
+  {"firebrick3"			, PALETTERGB (205, 38, 38)},
+  {"maroon3"			, PALETTERGB (205, 41,144)},
+  {"VioletRed3"			, PALETTERGB (205, 50,120)},
+  {"brown3"			, PALETTERGB (205, 51, 51)},
+  {"OrangeRed3"			, PALETTERGB (205, 55,  0)},
+  {"tomato3"			, PALETTERGB (205, 79, 57)},
+  {"IndianRed3"			, PALETTERGB (205, 85, 85)},
+  {"coral3"			, PALETTERGB (205, 91, 69)},
+  {"HotPink3"			, PALETTERGB (205, 96,144)},
+  {"DarkOrange3"			, PALETTERGB (205,102,  0)},
+  {"chocolate3"			, PALETTERGB (205,102, 29)},
+  {"sienna3"			, PALETTERGB (205,104, 57)},
+  {"PaleVioletRed3"			, PALETTERGB (205,104,137)},
+  {"orchid3"			, PALETTERGB (205,105,201)},
+  {"salmon3"			, PALETTERGB (205,112, 84)},
+  {"LightSalmon3"			, PALETTERGB (205,129, 98)},
+  {"orange3"			, PALETTERGB (205,133,  0)},
+  {"peru"			, PALETTERGB (205,133, 63)},
+  {"tan3"			, PALETTERGB (205,133, 63)},
+  {"LightPink3"			, PALETTERGB (205,140,149)},
+  {"pink3"			, PALETTERGB (205,145,158)},
+  {"DarkGoldenrod3"			, PALETTERGB (205,149, 12)},
+  {"plum3"			, PALETTERGB (205,150,205)},
+  {"goldenrod3"			, PALETTERGB (205,155, 29)},
+  {"RosyBrown3"			, PALETTERGB (205,155,155)},
+  {"burlywood3"			, PALETTERGB (205,170,125)},
+  {"gold3"			, PALETTERGB (205,173,  0)},
+  {"PeachPuff3"			, PALETTERGB (205,175,149)},
+  {"NavajoWhite3"			, PALETTERGB (205,179,139)},
+  {"thistle3"			, PALETTERGB (205,181,205)},
+  {"bisque3"			, PALETTERGB (205,183,158)},
+  {"MistyRose3"			, PALETTERGB (205,183,181)},
+  {"wheat3"			, PALETTERGB (205,186,150)},
+  {"LightGoldenrod3"			, PALETTERGB (205,190,112)},
+  {"AntiqueWhite3"			, PALETTERGB (205,192,176)},
+  {"LavenderBlush3"			, PALETTERGB (205,193,197)},
+  {"seashell3"			, PALETTERGB (205,197,191)},
+  {"khaki3"			, PALETTERGB (205,198,115)},
+  {"cornsilk3"			, PALETTERGB (205,200,177)},
+  {"LemonChiffon3"			, PALETTERGB (205,201,165)},
+  {"snow3"			, PALETTERGB (205,201,201)},
+  {"yellow3"			, PALETTERGB (205,205,  0)},
+  {"LightYellow3"			, PALETTERGB (205,205,180)},
+  {"ivory3"			, PALETTERGB (205,205,193)},
+  {"Gray81"			, PALETTERGB (207,207,207)},
+  {"Grey81"			, PALETTERGB (207,207,207)},
+  {"VioletRed"			, PALETTERGB (208, 32,144)},
+  {"MediumOrchid2"			, PALETTERGB (209, 95,238)},
+  {"MediumGoldenrod"			, PALETTERGB (209,193,102)},
+  {"Gray82"			, PALETTERGB (209,209,209)},
+  {"Grey82"			, PALETTERGB (209,209,209)},
+  {"LightCyan2"			, PALETTERGB (209,238,238)},
+  {"chocolate"			, PALETTERGB (210,105, 30)},
+  {"tan"			, PALETTERGB (210,180,140)},
+  {"Gray83"			, PALETTERGB (212,212,212)},
+  {"Grey83"			, PALETTERGB (212,212,212)},
+  {"Gray84"			, PALETTERGB (214,214,214)},
+  {"Grey84"			, PALETTERGB (214,214,214)},
+  {"Thistle"			, PALETTERGB (216,191,216)},
+  {"Gray85"			, PALETTERGB (217,217,217)},
+  {"Grey85"			, PALETTERGB (217,217,217)},
+  {"orchid"			, PALETTERGB (218,112,214)},
+  {"goldenrod"			, PALETTERGB (218,165, 32)},
+  {"Gold"			, PALETTERGB (218,170,  0)},
+  {"PaleVioletRed"			, PALETTERGB (219,112,147)},
+  {"Gray86"			, PALETTERGB (219,219,219)},
+  {"Grey86"			, PALETTERGB (219,219,219)},
+  {"Crimson"			, PALETTERGB (220, 20, 60)},
+  {"gainsboro"			, PALETTERGB (220,220,220)},
+  {"burlywood"			, PALETTERGB (222,184,135)},
+  {"Gray87"			, PALETTERGB (222,222,222)},
+  {"Grey87"			, PALETTERGB (222,222,222)},
+  {"MediumOrchid1"			, PALETTERGB (224,102,255)},
+  {"Gray88"			, PALETTERGB (224,224,224)},
+  {"Grey88"			, PALETTERGB (224,224,224)},
+  {"honeydew2"			, PALETTERGB (224,238,224)},
+  {"azure2"			, PALETTERGB (224,238,238)},
+  {"LightCyan"			, PALETTERGB (224,255,255)},
+  {"LightCyan1"			, PALETTERGB (224,255,255)},
+  {"Gray89"			, PALETTERGB (227,227,227)},
+  {"Grey89"			, PALETTERGB (227,227,227)},
+  {"Gray90"			, PALETTERGB (229,229,229)},
+  {"Grey90"			, PALETTERGB (229,229,229)},
+  {"lavender"			, PALETTERGB (230,230,250)},
+  {"Gray91"			, PALETTERGB (232,232,232)},
+  {"Grey91"			, PALETTERGB (232,232,232)},
+  {"DarkSalmon"			, PALETTERGB (233,150,122)},
+  {"Salmon"			, PALETTERGB (233,150,122)},
+  {"Gray92"			, PALETTERGB (235,235,235)},
+  {"Grey92"			, PALETTERGB (235,235,235)},
+  {"Gray93"			, PALETTERGB (237,237,237)},
+  {"Grey93"			, PALETTERGB (237,237,237)},
+  {"red2"			, PALETTERGB (238,  0,  0)},
+  {"magenta2"			, PALETTERGB (238,  0,238)},
+  {"DeepPink2"			, PALETTERGB (238, 18,137)},
+  {"firebrick2"			, PALETTERGB (238, 44, 44)},
+  {"maroon2"			, PALETTERGB (238, 48,167)},
+  {"VioletRed2"			, PALETTERGB (238, 58,140)},
+  {"brown2"			, PALETTERGB (238, 59, 59)},
+  {"OrangeRed2"			, PALETTERGB (238, 64,  0)},
+  {"tomato2"			, PALETTERGB (238, 92, 66)},
+  {"IndianRed2"			, PALETTERGB (238, 99, 99)},
+  {"coral2"			, PALETTERGB (238,106, 80)},
+  {"HotPink2"			, PALETTERGB (238,106,167)},
+  {"DarkOrange2"			, PALETTERGB (238,118,  0)},
+  {"chocolate2"			, PALETTERGB (238,118, 33)},
+  {"sienna2"			, PALETTERGB (238,121, 66)},
+  {"PaleVioletRed2"			, PALETTERGB (238,121,159)},
+  {"orchid2"			, PALETTERGB (238,122,233)},
+  {"salmon2"			, PALETTERGB (238,130, 98)},
+  {"LightSalmon2"			, PALETTERGB (238,149,114)},
+  {"orange2"			, PALETTERGB (238,154,  0)},
+  {"tan2"			, PALETTERGB (238,154, 73)},
+  {"LightPink2"			, PALETTERGB (238,162,173)},
+  {"pink2"			, PALETTERGB (238,169,184)},
+  {"DarkGoldenrod2"			, PALETTERGB (238,173, 14)},
+  {"plum2"			, PALETTERGB (238,174,238)},
+  {"goldenrod2"			, PALETTERGB (238,180, 34)},
+  {"RosyBrown2"			, PALETTERGB (238,180,180)},
+  {"burlywood2"			, PALETTERGB (238,197,145)},
+  {"gold2"			, PALETTERGB (238,201,  0)},
+  {"PeachPuff2"			, PALETTERGB (238,203,173)},
+  {"NavajoWhite2"			, PALETTERGB (238,207,161)},
+  {"thistle2"			, PALETTERGB (238,210,238)},
+  {"bisque2"			, PALETTERGB (238,213,183)},
+  {"MistyRose2"			, PALETTERGB (238,213,210)},
+  {"wheat2"			, PALETTERGB (238,216,174)},
+  {"LightGoldenrod2"			, PALETTERGB (238,220,130)},
+  {"LightGoldenrod"			, PALETTERGB (238,221,130)},
+  {"AntiqueWhite2"			, PALETTERGB (238,223,204)},
+  {"LavenderBlush2"			, PALETTERGB (238,224,229)},
+  {"seashell2"			, PALETTERGB (238,229,222)},
+  {"khaki2"			, PALETTERGB (238,230,133)},
+  {"PaleGoldenrod"			, PALETTERGB (238,232,170)},
+  {"cornsilk2"			, PALETTERGB (238,232,205)},
+  {"LemonChiffon2"			, PALETTERGB (238,233,191)},
+  {"snow2"			, PALETTERGB (238,233,233)},
+  {"yellow2"			, PALETTERGB (238,238,  0)},
+  {"LightYellow2"			, PALETTERGB (238,238,209)},
+  {"ivory2"			, PALETTERGB (238,238,224)},
+  {"LightCoral"			, PALETTERGB (240,128,128)},
+  {"Gray94"			, PALETTERGB (240,240,240)},
+  {"Grey94"			, PALETTERGB (240,240,240)},
+  {"AliceBlue"			, PALETTERGB (240,248,255)},
+  {"honeydew"			, PALETTERGB (240,255,240)},
+  {"honeydew1"			, PALETTERGB (240,255,240)},
+  {"azure"			, PALETTERGB (240,255,255)},
+  {"azure1"			, PALETTERGB (240,255,255)},
+  {"Gray95"			, PALETTERGB (242,242,242)},
+  {"Grey95"			, PALETTERGB (242,242,242)},
+  {"SandyBrown"			, PALETTERGB (244,164, 96)},
+  {"Wheat"			, PALETTERGB (245,222,179)},
+  {"beige"			, PALETTERGB (245,245,220)},
+  {"Gray96"			, PALETTERGB (245,245,245)},
+  {"Grey96"			, PALETTERGB (245,245,245)},
+  {"WhiteSmoke"			, PALETTERGB (245,245,245)},
+  {"MintCream"			, PALETTERGB (245,255,250)},
+  {"Gray97"			, PALETTERGB (247,247,247)},
+  {"Grey97"			, PALETTERGB (247,247,247)},
+  {"GhostWhite"			, PALETTERGB (248,248,255)},
+  {"AntiqueWhite"			, PALETTERGB (250,235,215)},
+  {"linen"			, PALETTERGB (250,240,230)},
+  {"LightGoldenrodYellow"			, PALETTERGB (250,250,210)},
+  {"Gray98"			, PALETTERGB (250,250,250)},
+  {"Grey98"			, PALETTERGB (250,250,250)},
+  {"Gray99"			, PALETTERGB (252,252,252)},
+  {"Grey99"			, PALETTERGB (252,252,252)},
+  {"OldLace"			, PALETTERGB (253,245,230)},
+  {"Red"			, PALETTERGB (255,  0,  0)},
+  {"red1"			, PALETTERGB (255,  0,  0)},
+  {"Magenta"			, PALETTERGB (255,  0,255)},
+  {"magenta1"			, PALETTERGB (255,  0,255)},
+  {"DeepPink"			, PALETTERGB (255, 20,147)},
+  {"DeepPink1"			, PALETTERGB (255, 20,147)},
+  {"firebrick1"			, PALETTERGB (255, 48, 48)},
+  {"maroon1"			, PALETTERGB (255, 52,179)},
+  {"VioletRed1"			, PALETTERGB (255, 62,150)},
+  {"brown1"			, PALETTERGB (255, 64, 64)},
+  {"OrangeRed"			, PALETTERGB (255, 69,  0)},
+  {"OrangeRed1"			, PALETTERGB (255, 69,  0)},
+  {"tomato"			, PALETTERGB (255, 99, 71)},
+  {"tomato1"			, PALETTERGB (255, 99, 71)},
+  {"HotPink"			, PALETTERGB (255,105,180)},
+  {"IndianRed1"			, PALETTERGB (255,106,106)},
+  {"HotPink1"			, PALETTERGB (255,110,180)},
+  {"Coral"			, PALETTERGB (255,114, 86)},
+  {"coral1"			, PALETTERGB (255,114, 86)},
+  {"DarkOrange1"			, PALETTERGB (255,127,  0)},
+  {"chocolate1"			, PALETTERGB (255,127, 36)},
+  {"sienna1"			, PALETTERGB (255,130, 71)},
+  {"PaleVioletRed1"			, PALETTERGB (255,130,171)},
+  {"orchid1"			, PALETTERGB (255,131,250)},
+  {"Orange"			, PALETTERGB (255,135,  0)},
+  {"DarkOrange"			, PALETTERGB (255,140,  0)},
+  {"salmon1"			, PALETTERGB (255,140,105)},
+  {"LightSalmon"			, PALETTERGB (255,160,122)},
+  {"LightSalmon1"			, PALETTERGB (255,160,122)},
+  {"orange1"			, PALETTERGB (255,165,  0)},
+  {"tan1"			, PALETTERGB (255,165, 79)},
+  {"LightPink1"			, PALETTERGB (255,174,185)},
+  {"Pink"			, PALETTERGB (255,181,197)},
+  {"pink1"			, PALETTERGB (255,181,197)},
+  {"LightPink"			, PALETTERGB (255,182,193)},
+  {"DarkGoldenrod1"			, PALETTERGB (255,185, 15)},
+  {"plum1"			, PALETTERGB (255,187,255)},
+  {"goldenrod1"			, PALETTERGB (255,193, 37)},
+  {"RosyBrown1"			, PALETTERGB (255,193,193)},
+  {"burlywood1"			, PALETTERGB (255,211,155)},
+  {"gold1"			, PALETTERGB (255,215,  0)},
+  {"PeachPuff"			, PALETTERGB (255,218,185)},
+  {"PeachPuff1"			, PALETTERGB (255,218,185)},
+  {"NavajoWhite"			, PALETTERGB (255,222,173)},
+  {"NavajoWhite1"			, PALETTERGB (255,222,173)},
+  {"thistle1"			, PALETTERGB (255,225,255)},
+  {"moccasin"			, PALETTERGB (255,228,181)},
+  {"bisque"			, PALETTERGB (255,228,196)},
+  {"bisque1"			, PALETTERGB (255,228,196)},
+  {"MistyRose"			, PALETTERGB (255,228,225)},
+  {"MistyRose1"			, PALETTERGB (255,228,225)},
+  {"wheat1"			, PALETTERGB (255,231,186)},
+  {"BlanchedAlmond"			, PALETTERGB (255,235,205)},
+  {"LightGoldenrod1"			, PALETTERGB (255,236,139)},
+  {"PapayaWhip"			, PALETTERGB (255,239,213)},
+  {"AntiqueWhite1"			, PALETTERGB (255,239,219)},
+  {"LavenderBlush"			, PALETTERGB (255,240,245)},
+  {"LavenderBlush1"			, PALETTERGB (255,240,245)},
+  {"seashell"			, PALETTERGB (255,245,238)},
+  {"seashell1"			, PALETTERGB (255,245,238)},
+  {"khaki1"			, PALETTERGB (255,246,143)},
+  {"cornsilk"			, PALETTERGB (255,248,220)},
+  {"cornsilk1"			, PALETTERGB (255,248,220)},
+  {"LemonChiffon"			, PALETTERGB (255,250,205)},
+  {"LemonChiffon1"			, PALETTERGB (255,250,205)},
+  {"FloralWhite"			, PALETTERGB (255,250,240)},
+  {"snow"			, PALETTERGB (255,250,250)},
+  {"snow1"			, PALETTERGB (255,250,250)},
+  {"Yellow"			, PALETTERGB (255,255,  0)},
+  {"yellow1"			, PALETTERGB (255,255,  0)},
+  {"LightYellow"			, PALETTERGB (255,255,224)},
+  {"LightYellow1"			, PALETTERGB (255,255,224)},
+  {"ivory"			, PALETTERGB (255,255,240)},
+  {"ivory1"			, PALETTERGB (255,255,240)},
+  {"Gray100"			, PALETTERGB (255,255,255)},
+  {"Grey100"			, PALETTERGB (255,255,255)},
+  {"White"			, PALETTERGB (255,255,255)}
+};
+
+static COLORREF
+mswindows_string_to_color(CONST char *name)
+{
+  int color, i;
+
+  if (*name == '#')
+  {
+    /* mswindows numeric names look like "#BBGGRR" */
+    if (strlen(name)!=7)
+      return (-1);
+    for (i=1; i<7; i++)
+      if (!isxdigit(name[i]))
+	return(-1);
+    if (sscanf(name+1, "%x", &color) == 1)
+      return(0x02000000 | color);	/* See PALETTERGB in docs */
+  }
+  else
+  {
+    for(i=0; i<(sizeof(mswindows_X_color_map)/sizeof(colormap_t)); i++)
+      if (!stricmp(name, mswindows_X_color_map[i].name))
+	return (mswindows_X_color_map[i].colorref);
+  }
+  return(-1);
+}
+
+static int
+mswindows_initialize_color_instance (struct Lisp_Color_Instance *c, Lisp_Object name,
+			       Lisp_Object device, Error_behavior errb)
+{
+  CONST char *extname;
+  COLORREF color;
+
+  GET_C_STRING_CTEXT_DATA_ALLOCA (name, extname);
+  color = mswindows_string_to_color(extname);
+  if (color != -1)
+    {
+      c->data = xnew (struct mswindows_color_instance_data);
+      COLOR_INSTANCE_MSWINDOWS_COLOR (c) = color;
+      COLOR_INSTANCE_MSWINDOWS_BRUSH (c) = CreateSolidBrush (color);
+      return 1;
+    }
+  maybe_signal_simple_error ("unrecognized color", name, Qcolor, errb);
+  return(0);
+}
+
+static void
+mswindows_mark_color_instance (struct Lisp_Color_Instance *c,
+			 void (*markobj) (Lisp_Object))
+{
+}
+
+static void
+mswindows_print_color_instance (struct Lisp_Color_Instance *c,
+			  Lisp_Object printcharfun,
+			  int escapeflag)
+{
+  char buf[32];
+  COLORREF color = COLOR_INSTANCE_MSWINDOWS_COLOR (c);
+  sprintf (buf, " %06ld=(%02X,%02X,%02X)", color & 0xffffff,
+	   GetRValue(color), GetGValue(color), GetBValue(color));
+  write_c_string (buf, printcharfun);
+}
+
+static void
+mswindows_finalize_color_instance (struct Lisp_Color_Instance *c)
+{
+  if (c->data)
+    {
+      DeleteObject (COLOR_INSTANCE_MSWINDOWS_BRUSH (c));
+      xfree (c->data);
+      c->data = 0;
+    }
+}
+
+static int
+mswindows_color_instance_equal (struct Lisp_Color_Instance *c1,
+			  struct Lisp_Color_Instance *c2,
+			  int depth)
+{
+  return (COLOR_INSTANCE_MSWINDOWS_COLOR(c1) == COLOR_INSTANCE_MSWINDOWS_COLOR(c2));
+}
+
+static unsigned long
+mswindows_color_instance_hash (struct Lisp_Color_Instance *c, int depth)
+{
+  return LISP_HASH (COLOR_INSTANCE_MSWINDOWS_COLOR(c));
+}
+
+static Lisp_Object
+mswindows_color_instance_rgb_components (struct Lisp_Color_Instance *c)
+{
+  COLORREF color = COLOR_INSTANCE_MSWINDOWS_COLOR (c);
+  return (list3 (make_int (GetRValue(color)),
+		 make_int (GetGValue(color)),
+		 make_int (GetBValue(color))));
+}
+
+static int
+mswindows_valid_color_name_p (struct device *d, Lisp_Object color)
+{
+  CONST char *extname;
+
+  GET_C_STRING_CTEXT_DATA_ALLOCA (color, extname);
+  return (mswindows_string_to_color(extname)!=-1);
+}
+
+
+
+static void
+mswindows_finalize_font_instance (struct Lisp_Font_Instance *f)
+{
+  if (f->data)
+    {
+      DeleteObject(f->data);
+      f->data=0;
+    }
+}
+
+static int
+mswindows_initialize_font_instance (struct Lisp_Font_Instance *f, Lisp_Object name,
+			      Lisp_Object device, Error_behavior errb)
+{
+  CONST char *extname;
+  LOGFONT logfont;
+  int fields;
+  int pt;
+  char fontname[LF_FACESIZE], weight[32], *style, points[8], effects[32], charset[32];
+
+  GET_C_STRING_CTEXT_DATA_ALLOCA (f->name, extname);
+
+  /*
+   * mswindows fonts look like:
+   *	fontname[:[weight ][style][:pointsize[:effects[:charset]]]]
+   * The font name field shouldn't be empty.
+   * XXX Windows will substitute a default (monospace) font if the font name
+   * specifies a non-existent font. We don't catch this.
+   * effects and charset are currently ignored.
+   *
+   * ie:
+   *	Lucida Console:Regular:10
+   * minimal:
+   *	Courier New
+   * maximal:
+   *	Courier New:Bold Italic:10:underline strikeout:ansi
+   */
+  fields = sscanf (extname, "%31[^:]:%31[^:]:%7[^:]:%31[^:]:%31s",
+		   fontname, weight, points, effects, charset);
+
+  if (fields<0)
+  {
+    maybe_signal_simple_error ("Invalid font", f->name, Qfont, errb);
+    return (0);
+  }
+
+  if (fields>0 && strlen(fontname))
+  {
+    strncpy (logfont.lfFaceName, fontname, LF_FACESIZE);
+    logfont.lfFaceName[LF_FACESIZE-1] = 0;
+  }
+  else
+  {
+    maybe_signal_simple_error ("Must specify a font name", f->name, Qfont, errb);
+    return (0);
+  }
+
+  if (fields > 1 && strlen(weight))
+  {
+    char *c;
+    /* Maybe split weight into weight and style */
+    if (c=strchr(weight, ' '))
+    {
+      *c = '\0';
+      style = c+1;
+    }
+    else
+      style = NULL;
+
+    /* weight: Most-often used (maybe) first */
+    if (stricmp (weight,"regular") == 0)
+      logfont.lfWeight = FW_REGULAR;
+    else if (stricmp (weight,"normal") == 0)
+      logfont.lfWeight = FW_NORMAL;
+    else if (stricmp (weight,"bold") == 0)
+      logfont.lfWeight = FW_BOLD;
+    else if (stricmp (weight,"medium") == 0)
+      logfont.lfWeight = FW_MEDIUM;
+    else if (stricmp (weight,"italic") == 0)	/* Hack for early exit */
+    {
+      logfont.lfWeight = FW_NORMAL;
+      style=weight;
+    }
+    /* the rest */
+    else if (stricmp (weight,"black") == 0)
+      logfont.lfWeight = FW_BLACK;
+    else if (stricmp (weight,"heavy") == 0)
+      logfont.lfWeight = FW_HEAVY;
+    else if (stricmp (weight,"ultrabold") == 0)
+      logfont.lfWeight = FW_ULTRABOLD;
+    else if (stricmp (weight,"extrabold") == 0)
+      logfont.lfWeight = FW_EXTRABOLD;
+    else if (stricmp (weight,"demibold") == 0)
+      logfont.lfWeight = FW_SEMIBOLD;
+    else if (stricmp (weight,"semibold") == 0)
+      logfont.lfWeight = FW_SEMIBOLD;
+    else if (stricmp (weight,"light") == 0)
+      logfont.lfWeight = FW_LIGHT;
+    else if (stricmp (weight,"ultralight") == 0)
+      logfont.lfWeight = FW_ULTRALIGHT;
+    else if (stricmp (weight,"extralight") == 0)
+      logfont.lfWeight = FW_EXTRALIGHT;
+    else if (stricmp (weight,"thin") == 0)
+      logfont.lfWeight = FW_THIN;
+    else
+    {
+      logfont.lfWeight = FW_NORMAL;
+      if (!style)
+	style = weight;	/* May have specified a style without a weight */
+      else
+      {
+        maybe_signal_simple_error ("Invalid font weight", f->name, Qfont, errb);
+	return (0);	/* Invalid weight */
+      }
+    }
+
+    if (style)
+    {
+      /* XXX what about oblique? */
+      if (stricmp (style,"italic") == 0)
+	logfont.lfItalic = TRUE;
+      else if (stricmp (style,"roman") == 0)
+	logfont.lfItalic = FALSE;
+      else
+      {
+        maybe_signal_simple_error ("Invalid font weight or style", f->name, Qfont, errb);
+	return (0);	/* Invalid weight or style */
+      }
+    }
+    else
+    {
+      logfont.lfItalic = FALSE;
+    }
+
+  }
+  else
+  {
+    logfont.lfWeight = FW_NORMAL;
+    logfont.lfItalic = FALSE;
+  }
+
+  /* XXX Should we reject strings that don't specify a size? */
+  if (fields < 3 || !strlen(points) || (pt=atoi(points))==0)
+    pt = 10;
+
+  /* Formula for pointsize->height from LOGFONT docs in MSVC5 Platform SDK */
+  logfont.lfHeight = -MulDiv(pt, DEVICE_MSWINDOWS_LOGPIXELSY(XDEVICE (device)), 72);
+  logfont.lfWidth = 0;
+
+  /* Default to monospaced if the specified font name is not found */
+  logfont.lfPitchAndFamily = FF_MODERN;
+
+  /* XXX: FIXME? */
+  logfont.lfUnderline = FALSE;
+  logfont.lfStrikeOut = FALSE;
+
+  /* XXX: FIXME: we ignore charset */
+  logfont.lfCharSet = DEFAULT_CHARSET;
+
+  /* Misc crud */
+  logfont.lfEscapement = logfont.lfOrientation = 0;
+#if 1
+  logfont.lfOutPrecision = OUT_DEFAULT_PRECIS;
+  logfont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
+  logfont.lfQuality = DEFAULT_QUALITY;
+#else
+  logfont.lfOutPrecision = OUT_STROKE_PRECIS;
+  logfont.lfClipPrecision = CLIP_STROKE_PRECIS;
+  logfont.lfQuality = PROOF_QUALITY;
+#endif
+
+  if ((f->data = CreateFontIndirect(&logfont)) == NULL)
+  {
+    maybe_signal_simple_error ("Couldn't create font", f->name, Qfont, errb);
+    return 0;
+  }
+
+  /* Have to apply Font to a GC to get its values.
+   * We'll borrow the desktop window becuase its the only window that we
+   * know about that is guaranteed to exist when this gets called
+   */ 
+  {
+    HWND hwnd;
+    HDC hdc;
+    HFONT holdfont;
+    TEXTMETRIC metrics;
+
+    hwnd = GetDesktopWindow();
+    assert(hdc = GetDC(hwnd));	/* XXX FIXME: can this temporarily fail? */
+    holdfont = SelectObject(hdc, f->data);
+    if (!holdfont)
+    {
+      mswindows_finalize_font_instance (f);
+      maybe_signal_simple_error ("Couldn't map font", f->name, Qfont, errb);
+      return 0;
+    }
+    GetTextMetrics(hdc, &metrics);
+    SelectObject(hdc, holdfont);
+    ReleaseDC(hwnd, hdc);
+    f->width = metrics.tmAveCharWidth;
+    f->height = metrics.tmHeight;
+    f->ascent = metrics.tmAscent;
+    f->descent = metrics.tmDescent;
+    f->proportional_p = (metrics.tmPitchAndFamily & TMPF_FIXED_PITCH);
+  }
+
+  return 1;
+}
+
+static void
+mswindows_mark_font_instance (struct Lisp_Font_Instance *f,
+			void (*markobj) (Lisp_Object))
+{
+}
+
+static void
+mswindows_print_font_instance (struct Lisp_Font_Instance *f,
+			 Lisp_Object printcharfun,
+			 int escapeflag)
+{
+}
+
+static Lisp_Object
+mswindows_list_fonts (Lisp_Object pattern, Lisp_Object device)
+{
+  /* XXX Implement me */
+  return list1 (build_string ("Courier New:Regular:10"));
+}
+
+
+
+/************************************************************************/
+/*                            initialization                            */
+/************************************************************************/
+
+void
+syms_of_objects_mswindows (void)
+{
+}
+
+void
+console_type_create_objects_mswindows (void)
+{
+  /* object methods */
+  CONSOLE_HAS_METHOD (mswindows, initialize_color_instance);
+/*  CONSOLE_HAS_METHOD (mswindows, mark_color_instance); */
+  CONSOLE_HAS_METHOD (mswindows, print_color_instance);
+  CONSOLE_HAS_METHOD (mswindows, finalize_color_instance);
+  CONSOLE_HAS_METHOD (mswindows, color_instance_equal);
+  CONSOLE_HAS_METHOD (mswindows, color_instance_hash);
+  CONSOLE_HAS_METHOD (mswindows, color_instance_rgb_components);
+  CONSOLE_HAS_METHOD (mswindows, valid_color_name_p);
+
+  CONSOLE_HAS_METHOD (mswindows, initialize_font_instance);
+/*  CONSOLE_HAS_METHOD (mswindows, mark_font_instance); */
+  CONSOLE_HAS_METHOD (mswindows, print_font_instance);
+  CONSOLE_HAS_METHOD (mswindows, finalize_font_instance);
+/*  CONSOLE_HAS_METHOD (mswindows, font_instance_truename); */
+  CONSOLE_HAS_METHOD (mswindows, list_fonts);
+#ifdef MULE
+  CONSOLE_HAS_METHOD (mswindows, font_spec_matches_charset);
+  CONSOLE_HAS_METHOD (mswindows, find_charset_font);
+#endif
+}
+
+void
+vars_of_objects_mswindows (void)
+{
+}