plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

cursor.c (12716B)


      1 /* Copyright (c) 1994-1996 David Hogan, see README for licence details */
      2 #include <stdio.h>
      3 #include <X11/X.h>
      4 #include <X11/Xlib.h>
      5 #include <X11/Xutil.h>
      6 #include "dat.h"
      7 #include "fns.h"
      8 
      9 typedef struct {
     10 	int		width;
     11 	int		hot[2];
     12 	unsigned char	mask[64];
     13 	unsigned char	fore[64];
     14 } Cursordata;
     15 
     16 Cursordata bigarrow = {
     17 	16,
     18 	{0, 0},
     19 	{ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0x3F,
     20 	  0xFF, 0x0F, 0xFF, 0x0F, 0xFF, 0x1F, 0xFF, 0x3F,
     21 	  0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0x3F,
     22 	  0xCF, 0x1F, 0x8F, 0x0F, 0x07, 0x07, 0x03, 0x02,
     23 	},
     24 	{ 0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x3F, 0xFE, 0x0F,
     25 	  0xFE, 0x07, 0xFE, 0x07, 0xFE, 0x0F, 0xFE, 0x1F,
     26 	  0xFE, 0x3F, 0xFE, 0x7F, 0xFE, 0x3F, 0xCE, 0x1F,
     27 	  0x86, 0x0F, 0x06, 0x07, 0x02, 0x02, 0x00, 0x00,
     28 	}
     29 };
     30 
     31 Cursordata sweep0data = {
     32 	16,
     33 	{7, 7},
     34 	{0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03,
     35 	 0xC0, 0x03, 0xC0, 0x03, 0xFF, 0xFF, 0xFF, 0xFF,
     36 	 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0xC0, 0x03,
     37 	 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03},
     38 	{0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,
     39 	 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xFE, 0x7F,
     40 	 0xFE, 0x7F, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,
     41 	 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00}
     42 };
     43 
     44 Cursordata boxcursdata = {
     45 	16,
     46 	{7, 7},
     47 	{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
     48 	 0xFF, 0xFF, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8,
     49 	 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0xFF, 0xFF,
     50 	 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
     51 	{0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0xFE, 0x7F,
     52 	 0x0E, 0x70, 0x0E, 0x70, 0x0E, 0x70, 0x0E, 0x70,
     53 	 0x0E, 0x70, 0x0E, 0x70, 0x0E, 0x70, 0x0E, 0x70,
     54 	 0xFE, 0x7F, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x00}
     55 };
     56 
     57 Cursordata sightdata = {
     58 	16,
     59 	{7, 7},
     60 	{0xF8, 0x1F, 0xFC, 0x3F, 0xFE, 0x7F, 0xDF, 0xFB,
     61 	 0xCF, 0xF3, 0xC7, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF,
     62 	 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0xE3, 0xCF, 0xF3,
     63 	 0xDF, 0x7B, 0xFE, 0x7F, 0xFC, 0x3F, 0xF8, 0x1F,},
     64 	{0x00, 0x00, 0xF0, 0x0F, 0x8C, 0x31, 0x84, 0x21,
     65 	 0x82, 0x41, 0x82, 0x41, 0x82, 0x41, 0xFE, 0x7F,
     66 	 0xFE, 0x7F, 0x82, 0x41, 0x82, 0x41, 0x82, 0x41,
     67 	 0x84, 0x21, 0x8C, 0x31, 0xF0, 0x0F, 0x00, 0x00,}
     68 };
     69 
     70 Cursordata arrowdata = {
     71 	16,
     72 	{1, 1},
     73 	{0xFF, 0x07, 0xFF, 0x07, 0xFF, 0x03, 0xFF, 0x00,
     74 	 0xFF, 0x00, 0xFF, 0x01, 0xFF, 0x03, 0xFF, 0x07,
     75 	 0xE7, 0x0F, 0xC7, 0x1F, 0x83, 0x3F, 0x00, 0x7F,
     76 	 0x00, 0xFE, 0x00, 0x7C, 0x00, 0x38, 0x00, 0x10,},
     77 	{0x00, 0x00, 0xFE, 0x03, 0xFE, 0x00, 0x3E, 0x00,
     78 	 0x7E, 0x00, 0xFE, 0x00, 0xF6, 0x01, 0xE6, 0x03,
     79 	 0xC2, 0x07, 0x82, 0x0F, 0x00, 0x1F, 0x00, 0x3E,
     80 	 0x00, 0x7C, 0x00, 0x38, 0x00, 0x10, 0x00, 0x00,}
     81 };
     82 
     83 Cursordata whitearrow = {
     84 	16,
     85 	{0, 0},
     86 	{0xFF, 0x07, 0xFF, 0x07, 0xFF, 0x03, 0xFF, 0x00,
     87 	 0xFF, 0x00, 0xFF, 0x01, 0xFF, 0x03, 0xFF, 0x07,
     88 	 0xE7, 0x0F, 0xC7, 0x1F, 0x83, 0x3F, 0x00, 0x7F,
     89 	 0x00, 0xFE, 0x00, 0x7C, 0x00, 0x38, 0x00, 0x10,},
     90 	{0xFF, 0x07, 0xFF, 0x07, 0x83, 0x03, 0xC3, 0x00,
     91 	 0xC3, 0x00, 0x83, 0x01, 0x1B, 0x03, 0x3F, 0x06,
     92 	 0x67, 0x0C, 0xC7, 0x18, 0x83, 0x31, 0x00, 0x63,
     93 	 0x00, 0xC6, 0x00, 0x6C, 0x00, 0x38, 0x00, 0x10,}
     94 };
     95 
     96 Cursordata blittarget = {
     97 	18,
     98 	{8, 8},
     99 	{0xe0, 0x1f, 0x00, 0xf0, 0x3f, 0x00, 0xf8, 0x7f, 0x00,
    100 	 0xfc, 0xff, 0x00, 0xfe, 0xff, 0x01, 0xff, 0xff, 0x03,
    101 	 0xff, 0xff, 0x03, 0xff, 0xff, 0x03, 0xff, 0xff, 0x03,
    102 	 0xff, 0xff, 0x03, 0xff, 0xff, 0x03, 0xff, 0xff, 0x03,
    103 	 0xff, 0xff, 0x03, 0xfe, 0xff, 0x01, 0xfc, 0xff, 0x00,
    104 	 0xf8, 0x7f, 0x00, 0xf0, 0x3f, 0x00, 0xe0, 0x1f, 0x00},
    105 	{0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0xf0, 0x3f, 0x00,
    106 	 0x38, 0x73, 0x00, 0x8c, 0xc7, 0x00, 0xec, 0xdf, 0x00,
    107 	 0x66, 0x9b, 0x01, 0x36, 0xb3, 0x01, 0xfe, 0xff, 0x01,
    108 	 0xfe, 0xff, 0x01, 0x36, 0xb3, 0x01, 0x66, 0x9b, 0x01,
    109 	 0xec, 0xdf, 0x00, 0x8c, 0xc7, 0x00, 0x38, 0x73, 0x00,
    110 	 0xf0, 0x3f, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00}
    111 };
    112 
    113 Cursordata blitarrow = {
    114 	18,
    115 	{1, 1},
    116 	{0xff, 0x0f, 0x00, 0xff, 0x07, 0x00, 0xff, 0x03, 0x00,
    117 	 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x01, 0x00,
    118 	 0xff, 0x03, 0x00, 0xff, 0x07, 0x00, 0xe7, 0x0f, 0x00,
    119 	 0xc7, 0x1f, 0x00, 0x87, 0x3f, 0x00, 0x03, 0x7f, 0x00,
    120 	 0x01, 0xfe, 0x00, 0x00, 0xfc, 0x01, 0x00, 0xf8, 0x03,
    121 	 0x00, 0xf0, 0x01, 0x00, 0xe0, 0x00, 0x00, 0x40, 0x00},
    122 	{0x00, 0x00, 0x00, 0xfe, 0x03, 0x00, 0xfe, 0x00, 0x00,
    123 	 0x3e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0xfe, 0x00, 0x00,
    124 	 0xf6, 0x01, 0x00, 0xe6, 0x03, 0x00, 0xc2, 0x07, 0x00,
    125 	 0x82, 0x0f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x3e, 0x00,
    126 	 0x00, 0x7c, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xf0, 0x01,
    127 	 0x00, 0xe0, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00}
    128 };
    129 
    130 Cursordata blitsweep = {
    131 	18,
    132 	{8, 8},
    133 	{0xc4, 0xff, 0x03, 0xce, 0xff, 0x03, 0xdf, 0xff, 0x03,
    134 	 0x3e, 0x80, 0x03, 0x7c, 0x83, 0x03, 0xf8, 0x83, 0x03,
    135 	 0xf7, 0x83, 0x03, 0xe7, 0x83, 0x03, 0xf7, 0x83, 0x03,
    136 	 0xf7, 0x83, 0x03, 0x07, 0x80, 0x03, 0x07, 0x80, 0x03,
    137 	 0x07, 0x80, 0x03, 0x07, 0x80, 0x03, 0x07, 0x80, 0x03,
    138 	 0xff, 0xff, 0x03, 0xff, 0xff, 0x03, 0xff, 0xff, 0x03},
    139 	{0x00, 0x00, 0x00, 0x84, 0xff, 0x01, 0x0e, 0x00, 0x01,
    140 	 0x1c, 0x00, 0x01, 0x38, 0x00, 0x01, 0x70, 0x01, 0x01,
    141 	 0xe0, 0x01, 0x01, 0xc2, 0x01, 0x01, 0xe2, 0x01, 0x01,
    142 	 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01,
    143 	 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01,
    144 	 0x02, 0x00, 0x01, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00}
    145 };
    146 
    147 /*
    148  *	Grey tile pattern for root background
    149  */
    150 
    151 #define grey_width 4
    152 #define grey_height 2
    153 static char grey_bits[] = {
    154 	0x01, 0x04
    155 };
    156 
    157 static XColor	bl, wh;
    158 
    159 Cursor
    160 getcursor(c, s)
    161 Cursordata *c;
    162 ScreenInfo *s;
    163 {
    164 	Pixmap f, m;
    165 
    166 	f = XCreatePixmapFromBitmapData(dpy, s->root, (char *)c->fore,
    167 		c->width, c->width, 1, 0, 1);
    168 	m = XCreatePixmapFromBitmapData(dpy, s->root, (char *)c->mask,
    169 		c->width, c->width, 1, 0, 1);
    170 	return XCreatePixmapCursor(dpy, f, m, &bl, &wh,
    171 			c->hot[0], c->hot[1]);
    172 }
    173 
    174 void
    175 initcurs(s)
    176 ScreenInfo *s;
    177 {
    178 	XColor dummy;
    179 
    180 	XAllocNamedColor(dpy, DefaultColormap(dpy, s->num),
    181 			"black", &bl, &dummy);
    182 	XAllocNamedColor(dpy, DefaultColormap(dpy, s->num),
    183 			"white", &wh, &dummy);
    184 
    185 	if(nostalgia){
    186 		s->arrow = getcursor(&blitarrow, s);
    187 		s->target = getcursor(&blittarget, s);
    188 		s->sweep0 = getcursor(&blitsweep, s);
    189 		s->boxcurs = getcursor(&blitsweep, s);
    190 	}
    191 	else {
    192 		s->arrow = getcursor(&bigarrow, s);
    193 		s->target = getcursor(&sightdata, s);
    194 		s->sweep0 = getcursor(&sweep0data, s);
    195 		s->boxcurs = getcursor(&boxcursdata, s);
    196 	}
    197 
    198 	s->root_pixmap = XCreatePixmapFromBitmapData(dpy,
    199 		s->root, grey_bits, grey_width, grey_height,
    200 		s->black, s->white, s->depth);
    201 
    202 	s->bordcurs[BorderN] = XCreateFontCursor(dpy, 138);
    203 	s->bordcurs[BorderNNE] = XCreateFontCursor(dpy, 136);
    204 	s->bordcurs[BorderENE] = s->bordcurs[BorderNNE] ;
    205 	s->bordcurs[BorderE] = XCreateFontCursor(dpy, 96);
    206 	s->bordcurs[BorderESE] = XCreateFontCursor(dpy, 14);
    207 	s->bordcurs[BorderSSE] = s->bordcurs[BorderESE];
    208 	s->bordcurs[BorderS] = XCreateFontCursor(dpy, 16);
    209 	s->bordcurs[BorderSSW] = XCreateFontCursor(dpy, 12);
    210 	s->bordcurs[BorderWSW] = s->bordcurs[BorderSSW];
    211 	s->bordcurs[BorderW] = XCreateFontCursor(dpy, 70);
    212 	s->bordcurs[BorderWNW] = XCreateFontCursor(dpy, 134);
    213 	s->bordcurs[BorderNNW] = s->bordcurs[BorderWNW];
    214 }
    215 
    216 
    217 /* RIO
    218 
    219 Cursor crosscursor = {
    220 	{-7, -7},
    221 	{0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0,
    222 	 0x03, 0xC0, 0x03, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF,
    223 	 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xC0, 0x03, 0xC0,
    224 	 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, },
    225 	{0x00, 0x00, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80,
    226 	 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x7F, 0xFE,
    227 	 0x7F, 0xFE, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80,
    228 	 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0x00, }
    229 };
    230 
    231 Cursor boxcursor = {
    232 	{-7, -7},
    233 	{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    234 	 0xFF, 0xFF, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F,
    235 	 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xFF, 0xFF,
    236 	 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, },
    237 	{0x00, 0x00, 0x7F, 0xFE, 0x7F, 0xFE, 0x7F, 0xFE,
    238 	 0x70, 0x0E, 0x70, 0x0E, 0x70, 0x0E, 0x70, 0x0E,
    239 	 0x70, 0x0E, 0x70, 0x0E, 0x70, 0x0E, 0x70, 0x0E,
    240 	 0x7F, 0xFE, 0x7F, 0xFE, 0x7F, 0xFE, 0x00, 0x00, }
    241 };
    242 
    243 Cursor sightcursor = {
    244 	{-7, -7},
    245 	{0x1F, 0xF8, 0x3F, 0xFC, 0x7F, 0xFE, 0xFB, 0xDF,
    246 	 0xF3, 0xCF, 0xE3, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF,
    247 	 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xC7, 0xF3, 0xCF,
    248 	 0x7B, 0xDF, 0x7F, 0xFE, 0x3F, 0xFC, 0x1F, 0xF8, },
    249 	{0x00, 0x00, 0x0F, 0xF0, 0x31, 0x8C, 0x21, 0x84,
    250 	 0x41, 0x82, 0x41, 0x82, 0x41, 0x82, 0x7F, 0xFE,
    251 	 0x7F, 0xFE, 0x41, 0x82, 0x41, 0x82, 0x41, 0x82,
    252 	 0x21, 0x84, 0x31, 0x8C, 0x0F, 0xF0, 0x00, 0x00, }
    253 };
    254 
    255 Cursor whitearrow = {
    256 	{0, 0},
    257 	{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFC,
    258 	 0xFF, 0xF0, 0xFF, 0xF0, 0xFF, 0xF8, 0xFF, 0xFC,
    259 	 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFC,
    260 	 0xF3, 0xF8, 0xF1, 0xF0, 0xE0, 0xE0, 0xC0, 0x40, },
    261 	{0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x06, 0xC0, 0x1C,
    262 	 0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x38, 0xC0, 0x1C,
    263 	 0xC0, 0x0E, 0xC0, 0x07, 0xCE, 0x0E, 0xDF, 0x1C,
    264 	 0xD3, 0xB8, 0xF1, 0xF0, 0xE0, 0xE0, 0xC0, 0x40, }
    265 };
    266 
    267 Cursor query = {
    268 	{-7,-7},
    269 	{0x0f, 0xf0, 0x1f, 0xf8, 0x3f, 0xfc, 0x7f, 0xfe,
    270 	 0x7c, 0x7e, 0x78, 0x7e, 0x00, 0xfc, 0x01, 0xf8,
    271 	 0x03, 0xf0, 0x07, 0xe0, 0x07, 0xc0, 0x07, 0xc0,
    272 	 0x07, 0xc0, 0x07, 0xc0, 0x07, 0xc0, 0x07, 0xc0, },
    273 	{0x00, 0x00, 0x0f, 0xf0, 0x1f, 0xf8, 0x3c, 0x3c,
    274 	 0x38, 0x1c, 0x00, 0x3c, 0x00, 0x78, 0x00, 0xf0,
    275 	 0x01, 0xe0, 0x03, 0xc0, 0x03, 0x80, 0x03, 0x80,
    276 	 0x00, 0x00, 0x03, 0x80, 0x03, 0x80, 0x00, 0x00, }
    277 };
    278 
    279 Cursor tl = {
    280 	{-4, -4},
    281 	{0xfe, 0x00, 0x82, 0x00, 0x8c, 0x00, 0x87, 0xff,
    282 	 0xa0, 0x01, 0xb0, 0x01, 0xd0, 0x01, 0x11, 0xff,
    283 	 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00,
    284 	 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x1f, 0x00, },
    285 	{0x00, 0x00, 0x7c, 0x00, 0x70, 0x00, 0x78, 0x00,
    286 	 0x5f, 0xfe, 0x4f, 0xfe, 0x0f, 0xfe, 0x0e, 0x00,
    287 	 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00,
    288 	 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x00, 0x00, }
    289 };
    290 
    291 Cursor t = {
    292 	{-7, -8},
    293 	{0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x06, 0xc0,
    294 	 0x1c, 0x70, 0x10, 0x10, 0x0c, 0x60, 0xfc, 0x7f,
    295 	 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xff, 0xff,
    296 	 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, },
    297 	{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
    298 	 0x03, 0x80, 0x0f, 0xe0, 0x03, 0x80, 0x03, 0x80,
    299 	 0x7f, 0xfe, 0x7f, 0xfe, 0x7f, 0xfe, 0x00, 0x00,
    300 	 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }
    301 };
    302 
    303 Cursor tr = {
    304 	{-11, -4},
    305 	{0x00, 0x7f, 0x00, 0x41, 0x00, 0x31, 0xff, 0xe1,
    306 	 0x80, 0x05, 0x80, 0x0d, 0x80, 0x0b, 0xff, 0x88,
    307 	 0x00, 0x88, 0x0, 0x88, 0x00, 0x88, 0x00, 0x88,
    308 	 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0xf8, },
    309 	{0x00, 0x00, 0x00, 0x3e, 0x00, 0x0e, 0x00, 0x1e,
    310 	 0x7f, 0xfa, 0x7f, 0xf2, 0x7f, 0xf0, 0x00, 0x70,
    311 	 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70,
    312 	 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x00, }
    313 };
    314 
    315 Cursor r = {
    316 	{-8, -7},
    317 	{0x07, 0xc0, 0x04, 0x40, 0x04, 0x40, 0x04, 0x58,
    318 	 0x04, 0x68, 0x04, 0x6c, 0x04, 0x06, 0x04, 0x02,
    319 	 0x04, 0x06, 0x04, 0x6c, 0x04, 0x68, 0x04, 0x58,
    320 	 0x04, 0x40, 0x04, 0x40, 0x04, 0x40, 0x07, 0xc0, },
    321 	{0x00, 0x00, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80,
    322 	 0x03, 0x90, 0x03, 0x90, 0x03, 0xf8, 0x03, 0xfc,
    323 	 0x03, 0xf8, 0x03, 0x90, 0x03, 0x90, 0x03, 0x80,
    324 	 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x00, 0x00, }
    325 };
    326 
    327 Cursor br = {
    328 	{-11, -11},
    329 	{0x00, 0xf8, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88,
    330 	 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88,
    331 	 0xff, 0x88, 0x80, 0x0b, 0x80, 0x0d, 0x80, 0x05,
    332 	 0xff, 0xe1, 0x00, 0x31, 0x00, 0x41, 0x00, 0x7f, },
    333 	{0x00, 0x00, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70,
    334 	 0x0, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70,
    335 	 0x00, 0x70, 0x7f, 0xf0, 0x7f, 0xf2, 0x7f, 0xfa,
    336 	 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x3e, 0x00, 0x00, }
    337 };
    338 
    339 Cursor b = {
    340 	{-7, -7},
    341 	{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    342 	 0xff, 0xff, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,
    343 	 0xfc, 0x7f, 0x0c, 0x60, 0x10, 0x10, 0x1c, 0x70,
    344 	 0x06, 0xc0, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, },
    345 	{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    346 	 0x00, 0x00, 0x7f, 0xfe, 0x7f, 0xfe, 0x7f, 0xfe,
    347 	 0x03, 0x80, 0x03, 0x80, 0x0f, 0xe0, 0x03, 0x80,
    348 	 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }
    349 };
    350 
    351 Cursor bl = {
    352 	{-4, -11},
    353 	{0x1f, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00,
    354 	 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00,
    355 	 0x11, 0xff, 0xd0, 0x01, 0xb0, 0x01, 0xa0, 0x01,
    356 	 0x87, 0xff, 0x8c, 0x00, 0x82, 0x00, 0xfe, 0x00, },
    357 	{0x00, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00,
    358 	 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00,
    359 	 0x0e, 0x00, 0x0f, 0xfe, 0x4f, 0xfe, 0x5f, 0xfe,
    360 	 0x78, 0x00, 0x70, 0x00, 0x7c, 0x00, 0x00, 0x0, }
    361 };
    362 
    363 Cursor l = {
    364 	{-7, -7},
    365 	{0x03, 0xe0, 0x02, 0x20, 0x02, 0x20, 0x1a, 0x20,
    366 	 0x16, 0x20, 0x36, 0x20, 0x60, 0x20, 0x40, 0x20,
    367 	 0x60, 0x20, 0x36, 0x20, 0x16, 0x20, 0x1a, 0x20,
    368 	 0x02, 0x20, 0x02, 0x20, 0x02, 0x20, 0x03, 0xe0, },
    369 	{0x00, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0,
    370 	 0x09, 0xc0, 0x09, 0xc0, 0x1f, 0xc0, 0x3f, 0xc0,
    371 	 0x1f, 0xc0, 0x09, 0xc0, 0x09, 0xc0, 0x01, 0xc0,
    372 	 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, }
    373 };
    374 
    375 Cursor *corners[9] = {
    376 	&tl,	&t,	&tr,
    377 	&l,	nil,	&r,
    378 	&bl,	&b,	&br
    379 };
    380 
    381 */