/*
 * resource file for DISPLAY driver dll
 *
 * Copyright 1999 Andreas Mohr
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

1 OEMBIN
{ 
	0x11,			/* vertical thumb height (in pixels)  */
	0x11,			/* horizontal thumb width (in pixels) */
	0x02,			/* icon width (in pixels)             */
	0x02,			/* icon height (in pixels)            */
	0x01,			/* cursor width (in pixels)           */
	0x01,			/* cursor height (in pixels)          */
	0x00,			/* reserved                           */
	0x01,			/* vertical-line width                */
	0x01,			/* horizontal-line width              */

	/* default system color values */
	0x00c0c0c0L,	/* scrollbar */
	0x00c0c0c0L,	/* desktop */
	0x00800000L,	/* active caption */
	0x00ffffffL,	/* inactive caption */
	0x00ffffffL,	/* menu */
	0x00ffffffL,	/* window */
	0x00000000L,	/* window frame */
	0x00000000L,	/* menu text */
	0x00000000L,	/* window text */
	0x00ffffffL,	/* caption text */
	0x00c0c0c0L,	/* active border */
	0x00c0c0c0L,	/* inactive border */
	0x00ffffffL,	/* app workspace */
	0x00800000L,	/* hilite bk */
	0x00ffffffL,	/* hilite text */
	0x00c0c0c0L,	/* btn face */
	0x00808080L,	/* btn shadow */
	0x00c0c0c0L,	/* gray text */
	0x00000000L,	/* btn text */
	0x00000000L		/* inactive caption text */
}

/* this is an icon */
DUMMY1 1
{
	0x0
}


