erc@pai.UUCP (Eric Johnson) (07/13/90)
A few days ago, I saw a Hobbes bitmap (the face of the tiger Hobbes from the comic strip Calvin and Hobbes), apparently from: "David McFadzean <david@hpcpdcc>". Since I liked the bitmap, I threw together a program to make the root window cursor be the Hobbes bitmap, mainly because I had never had reason to use XCreatePixmapCursor() before. The program is a throw-away, so don't waste much (if any) time on it. Here it is--note that the artwork is all McFadzean's, not mine (I claim no artistic abilities). hobbes.c just uses the X library, so you can compile (on UNIX) with something akin to: cc -o hobbes hobbes.c -lX11 For Interactive's 386/ix, add in a -linet after the -lX11. For SCO Open Desktop, add in -ltlisock -lsocket -lnsl_s after the -lX11 (SCO didn't like the large bitmap size for this cursor, though). You can pass a -display DisplayName to the program. Have fun, -Eric ------------------------cut here------------------------------------------ /* * hobbes.c * Program to make the root window's cursor be * the Hobbes (a la Calvin and Hobbes) cursor from: * "David McFadzean <david@hpcpdcc>" * * Link this program with the X library, e.g. * * cc -o hobbes hobbes.c -lX11 * * 13 July 90 * * E F Johnson * erc@pai.mn.org * Have fun. * * Note: since it is a "weird" bitmap size (25x25), * I'd seen occasions on a Sun SPARC where the * whole picture isn't drawn. I don't really think * its worth it to track down, though. * * Tested on: * Sun SPARCStation-1, X11R4, colour * HP 375, X11R3, colour * 386 PC, X11R3 (SCO Open DeskTop), colour--cursor is too big, sorry. */ #include <stdio.h> #include <X11/Xlib.h> #include <X11/Xutil.h> /* * Hobbes cursor from * "David McFadzean <david@hpcpdcc>" */ #define hobbes_width 25 #define hobbes_height 25 #define hobbes_x_hot 16 #define hobbes_y_hot 15 static char hobbes_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x78, 0xe0, 0x07, 0x00, 0xfc, 0xf8, 0x07, 0x00, 0xcc, 0x07, 0x04, 0x00, 0x0c, 0xf0, 0x0b, 0x00, 0x7c, 0x1c, 0x06, 0x00, 0x38, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x10, 0x00, 0xe0, 0x41, 0x11, 0x00, 0x20, 0x40, 0x11, 0x00, 0xe0, 0x07, 0x10, 0x00, 0xe0, 0xc1, 0x17, 0x00, 0x10, 0xe0, 0x2f, 0x00, 0x20, 0xe0, 0x6f, 0x00, 0x18, 0xe0, 0x2f, 0x00, 0x20, 0xc6, 0x67, 0x00, 0x18, 0x84, 0x2b, 0x00, 0x20, 0x08, 0x64, 0x00, 0x70, 0xf0, 0x13, 0x00, 0x80, 0x01, 0x08, 0x00, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; /* * Hobbes cursor mask from * "David McFadzean <david@hpcpdcc>" */ #define hobbesmask_width 25 #define hobbesmask_height 25 static char hobbesmask_bits[] = { 0x00, 0x00, 0x00, 0xfe, 0x00, 0xe0, 0x07, 0xfe, 0xfc, 0xf0, 0x0f, 0xfe, 0xfe, 0xfd, 0x0f, 0xfe, 0xfe, 0xff, 0x0f, 0xfe, 0xfe, 0xff, 0x1f, 0xfe, 0xfe, 0xff, 0x1f, 0xfe, 0xfe, 0xff, 0x1f, 0xfe, 0xfe, 0xff, 0x3f, 0xfe, 0xfc, 0xff, 0x3f, 0xfe, 0xf0, 0xff, 0x3f, 0xfe, 0xf0, 0xff, 0x3f, 0xfe, 0xf0, 0xff, 0x3f, 0xfe, 0xf8, 0xff, 0x7f, 0xfe, 0xf8, 0xff, 0xff, 0xfe, 0xfc, 0xff, 0xff, 0xfe, 0xfc, 0xff, 0xff, 0xfe, 0xfc, 0xff, 0xff, 0xfe, 0xfc, 0xff, 0xff, 0xfe, 0xfc, 0xff, 0xff, 0xfe, 0xf8, 0xff, 0xff, 0xfe, 0xf8, 0xff, 0x3f, 0xfe, 0xc0, 0xff, 0x1f, 0xfe, 0x00, 0xff, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0xfe, }; main( argc, argv ) int argc; char *argv[]; { /* main */ char display_name[ 256 ]; int i; Display *display; int screen; Window rootwindow; Pixmap hobbes_pix, mask_pix; Colormap cmap; XColor black, white, tmp; Cursor cursor; /* * Determine display name */ display_name[0] = '\0'; i = 1; while( i < argc ) { if ( strncmp( argv[i], "-disp", 5 ) == 0 ) { i++; if ( i < argc ) { strcpy( display_name, argv[i] ); } } i++; } /* * Open display connection */ display = XOpenDisplay( display_name ); if ( display == (Display *) NULL ) { fprintf( stderr, "Error in opening display connection\n" ); exit( 1 ); } screen = DefaultScreen( display ); rootwindow = RootWindow( display, screen ); /* * Create pixmaps for the cursor and the cursor mask */ hobbes_pix = XCreateBitmapFromData( display, rootwindow, hobbes_bits, hobbes_width, hobbes_height ); mask_pix = XCreateBitmapFromData( display, rootwindow, hobbesmask_bits, hobbesmask_width, hobbesmask_height ); /* * Get XColor structs * for black and white. * We assume the default * colormap has entries * for black and white. */ cmap = DefaultColormap( display, screen ); XLookupColor( display, cmap, "black", &tmp, &black ); XLookupColor( display, cmap, "white", &tmp, &white ); /* * Now, create cursor from the pixmaps */ cursor = XCreatePixmapCursor( display, hobbes_pix, mask_pix, &black, &white, hobbes_x_hot, hobbes_y_hot ); /* * Set root window to use hobbes cursor */ XDefineCursor( display, rootwindow, cursor ); XFlush( display ); /* * Clean up and exit */ XFreePixmap( display, hobbes_pix ); XFreePixmap( display, mask_pix ); XCloseDisplay( display ); exit( 0 ); } /* main */ /* * end of file */ ------------------------cut here------------------------------------------ -- Eric F. Johnson phone: +1 612 894 0313 BTI: Industrial Boulware Technologies, Inc. fax: +1 612 894 0316 automation systems 415 W. Travelers Trail email: erc@pai.mn.org and services Burnsville, MN 55337 USA