URI:
       tcursor.c - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tcursor.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 */