home *** CD-ROM | disk | FTP | other *** search
- Path: uunet!island!argv
- From: argv@island.uu.net (Dan Heller)
- Newsgroups: comp.sources.x
- Subject: v04i002: xcursor -- set the cursor for a window, Part01/01
- Message-ID: <753@island.uu.net>
- Date: 17 May 89 05:00:55 GMT
- Sender: news@island.uu.net
- Organization: Island Graphics, Marin County, California
- Lines: 274
- Approved: island!argv@sun.com
-
- Submitted-by: Richard Neitzel <thor@thor.ucar.edu>
- Posting-number: Volume 4, Issue 2
- Archive-name: xcursor/part01
-
- # This is a shell archive.
- # Remove everything above and including the cut line.
- # Then run the rest of the file through sh.
- #----cut here-----cut here-----cut here-----cut here----#
- #!/bin/sh
- # shar: Shell Archiver
- # Run the following text with /bin/sh to create:
- # Makefile
- # README
- # xcursor.c
- # xcursor.h
- # xcursor.l
- # This archive created: Mon May 15 09:12:25 1989
- cat << \SHAR_EOF > Makefile
- XLIB = -lX11
- CDEBUGOPTIONS = -O4
-
- xcursor:
- cc -o xcursor $(CDEBUGOPTIONS) xcursor.c $(XLIB)
- SHAR_EOF
- cat << \SHAR_EOF > README
- xcursor is small tool that lets one set the cursor for a window. Note
- that not all windows will allow this type of change. To make, edit
- xcursor.h to reflect the location of cursorfont.h and the local
- default cursor type and make any local changes to Makefile.
-
- This program has been tested on the following:
-
- Sun-3/260
- Sun-3E
-
- all running SunOS 4.0.1 and X11r3.
-
- Send comments, flames, etc. to:
-
- Richard Neitzel
- National Center for Atmospheric Research
- Box 3000
- Boulder, CO 80307
-
- thor@thor.ucar.edu
- SHAR_EOF
- cat << \SHAR_EOF > xcursor.c
- /*
- Module: xcursor.c
- Author: Richard Neitzel
- Date: 12 May 1989
-
- revision history
- ----------------
- 1.0,12may89,rekn Written.
-
- This is a quick program that reads the header file defining cursors
- and lets one change the cursor for a specified window. Window
- defaults to root, cursor to what's in xcursor.h.
- */
-
- #include "xcursor.h"
-
- main(argc,argv)
- int argc;
- char **argv;
- {
- register int opt; /* Parsed option letter */
- char *id_str; /* Window id in ASCII */
- extern int optind;
- extern char *optarg;
-
- if ((display = XOpenDisplay(NULL)) == NULL)
- {
- perror("xcursor - no display");
- exit(1);
- }
-
- while ((opt = getopt(argc,argv,"lvw:")) != -1)
- {
- switch(opt)
- {
- case 'l': /* Just list cursors */
- lflg++;
- break;
-
- case 'v': /* Print version */
- print_vers();
- break;
-
- case 'w': /* Do this window */
- wflg++;
- id_str = optarg;
- break;
-
- case '?':
- local_help();
- break;
- }
- }
-
- if (optind < argc) /* check for user requested cursor */
- find_cursor = argv[optind];
- else
- find_cursor = default_cursor;
-
- if (wflg) /* Use strtol to handle hex */
- window = (Window)strtol(id_str,(char **)NULL,0);
- else
- window = DefaultRootWindow(display);
-
- work();
-
- exit(0);
- }
-
- void print_vers()
- {
- fprintf(stderr,"xcursor version %s\n",version_number);
- exit(0);
- }
-
-
- char *help_text[] = {
- "xcursor is a small tool to set the cursor for a specified window.",
- "The syntax is:",
- "",
- " xcursor [-l][-w id] [cursor]",
- "",
- "the -l flag lists all known cursors, the -w flag sets the cursor for",
- "window id (defaults to root window) and cursor is the name of the",
- "cursor you want (defaults to whatever local builder desired)",
- 0};
-
- void local_help()
- {
- register char **ptr;
-
- for (ptr = help_text; *ptr; ptr++)
- fprintf(stderr,"%s\n",*ptr);
-
- exit(1);
- }
-
-
- void work()
- {
- register FILE *fp; /* Source file */
- register char *start; /* Cursor name */
- register char *middle; /* Value in ASCII */
- register Cursor curs; /* Selected cursor */
- register unsigned int cursor; /* Converted middle */
- register int flag = 0; /* OK flag */
- char buffer[BUFSIZE]; /* Read buffer */
-
- if ((fp = fopen(cursor_file,"r")) == (FILE *)NULL)
- {
- perror("xcursor");
- exit(1);
- }
-
- while (fgets(buffer,BUFSIZE,fp))
- {
- if ((start = strchr(buffer,'X')) != NULL)
- {
- if (!strncmp(start,"XC_",3))
- {
- middle = strchr(start,' ');
- *middle++ = 0;
- cursor = (unsigned int)strtol(middle,(char **)NULL,0);
-
- if (lflg)
- {
- flag++;
- printf("%s\n",start);
- }
- else if (!strcmp(start,find_cursor))
- {
- curs = XCreateFontCursor(display,cursor);
- XDefineCursor(display,window,curs);
- XCloseDisplay(display);
- flag++;
- break;
- }
- }
- }
- }
- if (!flag)
- fprintf(stderr,"xcursor - Cannot find %s\n",find_cursor);
-
- fclose(fp);
- }
- SHAR_EOF
- cat << \SHAR_EOF > xcursor.h
- /*
-
- */
-
- #ifndef INCxcursor
- #define INCxcursor
-
- #include <stdio.h>
- #include <string.h>
- #include <X11/Xlib.h>
-
-
- Display *display;
- Window window;
-
- char cursor_file[] = "/usr/include/X11/cursorfont.h";
-
- char default_cursor[] = "XC_gumby";
-
- char version_number[] = "1.0";
-
- char *find_cursor;
-
- int lflg = 0;
-
- int wflg = 0;
-
- #define BUFSIZE 100
-
- void print_vers(), local_help(), work();
-
- #endif
- SHAR_EOF
- cat << \SHAR_EOF > xcursor.l
- .TH xcursor 1 "12 May 1989"
- .SH NAME
- xcursor \- set cursor in an X window
- .SH SYNOPSIS
- xcursor [-v][-l][-w id] [cursor]
- .SH DESCRIPTION
- .I Xcursor
- allows the cursor for a window to be set to one of the standard X
- cursors or lists the available cursors. If no window id is specified,
- .I xcursor
- will act on the root window by default. If no cursor name is given,
- the default cursor selected at the time
- .I xcursor
- was built will be used. Cursors are extracted from the file
- cursorfont.h.
- .SH OPTIONS
- .nf
- \-l This causes a list of the standard X cursors to be
- given on standard output.
-
- \-v Prints the version number.
-
- \-w Denotes that the next option is the window id of the
- window whose cursor will be effected. May be entered
- in decimal, octal or hexadecimal.
- .fi
- .SH FILES
- Requires read access to the cursorfonts.h file (located in the X
- includes path).
- .SH BUGS
- Not all windows will allow their cursor to be reset in this fashion.
- Does not understand user defined cursors.
- .SH AUTHOR
- .nf
- Richard Neitzel
- National Center for Atmospheric Research
- Box 3000
- Boulder, CO 80307
- thor@thor.ucar.edu
- SHAR_EOF
- # End of shell archive
- exit 0
-
-
-
- -------------------------------------------------------------------------------
-