summaryrefslogtreecommitdiff
path: root/app/xwininfo/dsimple.c
diff options
context:
space:
mode:
Diffstat (limited to 'app/xwininfo/dsimple.c')
-rw-r--r--app/xwininfo/dsimple.c339
1 files changed, 28 insertions, 311 deletions
diff --git a/app/xwininfo/dsimple.c b/app/xwininfo/dsimple.c
index c84ac3b51..171795b79 100644
--- a/app/xwininfo/dsimple.c
+++ b/app/xwininfo/dsimple.c
@@ -41,13 +41,11 @@ from The Open Group.
* Written by Mark Lillibridge. Last updated 7/1/87
*/
-#ifdef BUILD_PRINTSUPPORT
-#include <X11/XprintUtil/xprintutil.h>
-#endif /* BUILD_PRINTSUPPORT */
+#include "clientwin.h"
#include "dsimple.h"
/*
- * Just_display: A group of routines designed to make the writting of simple
+ * Just_display: A group of routines designed to make the writing of simple
* X11 applications which open a display but do not open
* any windows much faster and easier. Unless a routine says
* otherwise, it may be assumed to require program_name, dpy,
@@ -61,54 +59,15 @@ from The Open Group.
char *program_name = "unknown_program";
Display *dpy = NULL;
int screen = 0;
-Bool printer_output = False; /* Video or printer output ? */
-#ifdef BUILD_PRINTSUPPORT
-XPContext pcontext = None;
-#endif /* BUILD_PRINTSUPPORT */
-
-static void _bitmap_error(int, char *);
-
-/*
- * Malloc: like malloc but handles out of memory using Fatal_Error.
- */
-char *Malloc(size)
- unsigned size;
-{
- char *data;
-
- if (!(data = malloc(size)))
- Fatal_Error("Out of memory!");
-
- return(data);
-}
-
-
-/*
- * Realloc: like Malloc except for realloc, handles NULL using Malloc.
- */
-char *Realloc(ptr, size)
- char *ptr;
- int size;
-{
- char *new_ptr;
-
- if (!ptr)
- return(Malloc(size));
-
- if (!(new_ptr = realloc(ptr, size)))
- Fatal_Error("Out of memory!");
-
- return(new_ptr);
-}
/*
* Get_Display_Name (argc, argv) Look for -display, -d, or host:dpy (obselete)
* If found, remove it from command line. Don't go past a lone -.
*/
-char *Get_Display_Name(pargc, argv)
- int *pargc; /* MODIFIED */
- char **argv; /* MODIFIED */
+char *Get_Display_Name(
+ int *pargc, /* MODIFIED */
+ char **argv) /* MODIFIED */
{
int argc = *pargc;
char **pargv = argv+1;
@@ -138,49 +97,12 @@ char *Get_Display_Name(pargc, argv)
}
-#ifdef BUILD_PRINTSUPPORT
-/*
- * Get_Printer_Name (argc, argv) Look for -printer, -p,
- * If found, remove it from command line. Don't go past a lone -.
- */
-char *Get_Printer_Name(pargc, argv)
- int *pargc; /* MODIFIED */
- char **argv; /* MODIFIED */
-{
- int argc = *pargc;
- char **pargv = argv+1;
- char *printername = NULL;
- int i;
-
- for (i = 1; i < argc; i++) {
- char *arg = argv[i];
-
- if (!strcmp (arg, "-printer") || !strcmp (arg, "-p")) {
- if (++i >= argc) usage ();
-
- printername = argv[i];
- *pargc -= 2;
- continue;
- }
- if (!strcmp(arg,"-")) {
- while (i<argc)
- *pargv++ = argv[i++];
- break;
- }
- *pargv++ = arg;
- }
-
- *pargv = NULL;
- return (printername);
-}
-#endif /* BUILD_PRINTSUPPORT */
/*
* Open_Display: Routine to open a display with correct error handling.
* Does not require dpy or screen defined on entry.
*/
-Display *Open_Display(display_name)
-char *display_name;
+Display *Open_Display(char *display_name)
{
Display *d;
@@ -203,41 +125,15 @@ char *display_name;
* for this display is then stored in screen.
* Does not require dpy or screen defined.
*/
-void Setup_Display_And_Screen(argc, argv)
-int *argc; /* MODIFIED */
-char **argv; /* MODIFIED */
+void Setup_Display_And_Screen(
+ int *argc, /* MODIFIED */
+ char **argv) /* MODIFIED */
{
- char *displayname = NULL,
- *printername = NULL;
+ char *displayname = NULL;
displayname = Get_Display_Name(argc, argv);
-#ifdef BUILD_PRINTSUPPORT
- printername = Get_Printer_Name(argc, argv);
-
- if (displayname && printername) {
- fprintf (stderr, "%s: you cannot specify -printer (-p) and -display (-d) at the same time.\n",
- program_name);
- usage ();
- }
-
- if (printername) {
- printer_output = True;
-
- if (XpuGetPrinter(printername, &dpy, &pcontext) != 1) {
- fprintf(stderr, "%s: Cannot open printer '%s'.\n", program_name, printername);
- exit(EXIT_FAILURE);
- }
-
- screen = XScreenNumberOfScreen(XpGetScreenOfContext(dpy, pcontext));
- }
- else
-#endif /* BUILD_PRINTSUPPORT */
- {
- printer_output = False;
-
- dpy = Open_Display (displayname);
- screen = XDefaultScreen(dpy);
- }
+ dpy = Open_Display (displayname);
+ screen = XDefaultScreen(dpy);
}
/*
@@ -248,95 +144,8 @@ void Close_Display(void)
if (dpy == NULL)
return;
-#ifdef BUILD_PRINTSUPPORT
- if (printer_output) {
- XpuClosePrinterDisplay(dpy, pcontext);
- dpy = NULL;
- pcontext = None;
- printer_output = False;
- }
- else
-#endif /* BUILD_PRINTSUPPORT */
- {
- XCloseDisplay(dpy);
- dpy = NULL;
- }
-}
-
-
-/*
- * Open_Font: This routine opens a font with error handling.
- */
-XFontStruct *Open_Font(name)
-char *name;
-{
- XFontStruct *font;
-
- if (!(font=XLoadQueryFont(dpy, name)))
- Fatal_Error("Unable to open font %s!", name);
-
- return(font);
-}
-
-
-/*
- * Beep: Routine to beep the display.
- */
-void Beep()
-{
- XBell(dpy, 50);
-}
-
-
-/*
- * ReadBitmapFile: same as XReadBitmapFile except it returns the bitmap
- * directly and handles errors using Fatal_Error.
- */
-static void _bitmap_error(status, filename)
- int status;
- char *filename;
-{
- if (status == BitmapOpenFailed)
- Fatal_Error("Can't open file %s!", filename);
- else if (status == BitmapFileInvalid)
- Fatal_Error("file %s: Bad bitmap format.", filename);
- else
- Fatal_Error("Out of memory!");
-}
-
-Pixmap ReadBitmapFile(d, filename, width, height, x_hot, y_hot)
- Drawable d;
- char *filename;
- int *width, *height, *x_hot, *y_hot;
-{
- Pixmap bitmap;
- int status;
-
- status = XReadBitmapFile(dpy, RootWindow(dpy, screen), filename,
- (unsigned int *)width, (unsigned int *)height,
- &bitmap, x_hot, y_hot);
- if (status != BitmapSuccess)
- _bitmap_error(status, filename);
-
- return(bitmap);
-}
-
-
-/*
- * WriteBitmapFile: same as XWriteBitmapFile except it handles errors
- * using Fatal_Error.
- */
-void WriteBitmapFile(filename, bitmap, width, height, x_hot, y_hot)
- char *filename;
- Pixmap bitmap;
- int width, height, x_hot, y_hot;
-{
- int status;
-
- status= XWriteBitmapFile(dpy, filename, bitmap, width, height, x_hot,
- y_hot);
- if (status != BitmapSuccess)
- _bitmap_error(status, filename);
+ XCloseDisplay(dpy);
+ dpy = NULL;
}
@@ -362,9 +171,9 @@ void WriteBitmapFile(filename, bitmap, width, height, x_hot, y_hot)
* all command line arguments, and other setup is done.
* For examples of usage, see xwininfo, xwd, or xprop.
*/
-Window Select_Window_Args(rargc, argv)
- int *rargc;
- char **argv;
+Window Select_Window_Args(
+ int *rargc,
+ char **argv)
#define ARGC (*rargc)
{
int nargc=1;
@@ -420,91 +229,12 @@ Window Select_Window_Args(rargc, argv)
* Written by Mark Lillibridge. Last updated 7/1/87
*/
-/*
- * Resolve_Color: This routine takes a color name and returns the pixel #
- * that when used in the window w will be of color name.
- * (WARNING: The colormap of w MAY be modified! )
- * If colors are run out of, only the first n colors will be
- * as correct as the hardware can make them where n depends
- * on the display. This routine does not require wind to
- * be defined.
- */
-unsigned long Resolve_Color(w, name)
- Window w;
- char *name;
-{
- XColor c;
- Colormap colormap;
- XWindowAttributes wind_info;
-
- /*
- * The following is a hack to insure machines without a rgb table
- * handle at least white & black right.
- */
- if (!strcmp(name, "white"))
- name="#ffffffffffff";
- if (!strcmp(name, "black"))
- name="#000000000000";
-
- XGetWindowAttributes(dpy, w, &wind_info);
- colormap = wind_info.colormap;
-
- if (!XParseColor(dpy, colormap, name, &c))
- Fatal_Error("Bad color format '%s'.", name);
-
- if (!XAllocColor(dpy, colormap, &c))
- Fatal_Error("XAllocColor failed!");
-
- return(c.pixel);
-}
-
-
-/*
- * Bitmap_To_Pixmap: Convert a bitmap to a 2 colored pixmap. The colors come
- * from the foreground and background colors of the gc.
- * Width and height are required solely for efficiency.
- * If needed, they can be obtained via. XGetGeometry.
- */
-Pixmap Bitmap_To_Pixmap(dpy, d, gc, bitmap, width, height)
- Display *dpy;
- Drawable d;
- GC gc;
- Pixmap bitmap;
- int width, height;
-{
- Pixmap pix;
- int x;
- unsigned int i, depth;
- Drawable root;
-
- if (!XGetGeometry(dpy, d, &root, &x, &x, &i, &i, &i, &depth))
- return(0);
-
- pix = XCreatePixmap(dpy, d, width, height, (int)depth);
-
- XCopyPlane(dpy, bitmap, pix, gc, 0, 0, width, height, 0, 0, 1);
-
- return(pix);
-}
-
-
-/*
- * blip: a debugging routine. Prints Blip! on stderr with flushing.
- */
-void blip()
-{
- fflush(stdout);
- fprintf(stderr, "blip!\n");
- fflush(stderr);
-}
-
/*
* Routine to let user select a window using the mouse
*/
-Window Select_Window(dpy)
- Display *dpy;
+Window Select_Window(Display *dpy, int descend)
{
int status;
Cursor cursor;
@@ -543,6 +273,11 @@ Window Select_Window(dpy)
XUngrabPointer(dpy, CurrentTime); /* Done with pointer */
+ if (!descend || (target_win == root))
+ return(target_win);
+
+ target_win = Find_Client(dpy, root, target_win);
+
return(target_win);
}
@@ -554,10 +289,10 @@ Window Select_Window(dpy)
* one found will be returned. Only top and its subwindows
* are looked at. Normally, top should be the RootWindow.
*/
-Window Window_With_Name(dpy, top, name)
- Display *dpy;
- Window top;
- char *name;
+Window Window_With_Name(
+ Display *dpy,
+ Window top,
+ char *name)
{
Window *children, dummy;
unsigned int nchildren;
@@ -580,27 +315,9 @@ Window Window_With_Name(dpy, top, name)
return(w);
}
-/*
- * outl: a debugging routine. Flushes stdout then prints a message on stderr
- * and flushes stderr. Used to print messages when past certain points
- * in code so we can tell where we are. Outl may be invoked like
- * printf with up to 7 arguments.
- */
-void
-outl(char *msg, ...)
-{
- va_list args;
- fflush(stdout);
- va_start(args, msg);
- vfprintf(stderr, msg, args);
- va_end(args);
- fprintf(stderr, "\n");
- fflush(stderr);
-}
-
/*
- * Standard fatal error routine - call like printf but maximum of 7 arguments.
+ * Standard fatal error routine - call like printf
* Does not require dpy or screen defined.
*/
void Fatal_Error(char *msg, ...)