BSD 4_3_Tahoe development
authorCSRG <csrg@ucbvax.Berkeley.EDU>
Mon, 1 Dec 1986 10:19:02 +0000 (02:19 -0800)
committerCSRG <csrg@ucbvax.Berkeley.EDU>
Mon, 1 Dec 1986 10:19:02 +0000 (02:19 -0800)
Work on file usr/src/new/X/xwininfo/Makefile
Work on file usr/src/new/X/xwininfo/xwininfo.c

Synthesized-from: CSRG/cd2/4.3tahoe

usr/src/new/X/xwininfo/Makefile [new file with mode: 0644]
usr/src/new/X/xwininfo/xwininfo.c [new file with mode: 0644]

diff --git a/usr/src/new/X/xwininfo/Makefile b/usr/src/new/X/xwininfo/Makefile
new file mode 100644 (file)
index 0000000..9663cf6
--- /dev/null
@@ -0,0 +1,43 @@
+# Copyright 1985, Massachusetts Institute of Technology
+#
+#      xwininfo - makefile for the Athena X window system window
+#                 information utility.
+#
+#              Written by:     Tony Della Fera, DEC
+#                              10-May-85
+#
+
+DESTDIR =
+INCLUDES = -I../include
+
+CONFDIR = /usr/new
+XLIB = ../Xlib/libX.a
+XH = ../Xlib/Xlib.h
+CFLAGS = -O $(INCLUDES)
+CLIBS =
+
+.SUFFIXES: .o .h .c .a
+
+OBJS = xwininfo.o
+
+all: xwininfo
+
+xwininfo: $(OBJS) $(XLIB)
+       $(CC) $(CFLAGS) -O -o xwininfo $(OBJS) $(XLIB) $(CLIBS)
+
+xwininfo.o: ../cursors/target.cursor ../cursors/target_mask.cursor $(XH)
+
+link:
+       $(CC) $(CFLAGS) -O -o xwininfo $(OBJS) $(XLIB) $(CLIBS)
+
+
+install: all
+       install xwininfo $(DESTDIR)$(CONFDIR)
+
+clean: 
+       rm -f *~* *.bak core \#* xwininfo.o xwininfo
+       rm -f xwininfo.c.[0-9]* Makefile.[0-9]* xwininfo.1.[0-9]*
+
+igrind:
+       igrind xwininfo.c
+
diff --git a/usr/src/new/X/xwininfo/xwininfo.c b/usr/src/new/X/xwininfo/xwininfo.c
new file mode 100644 (file)
index 0000000..5f39427
--- /dev/null
@@ -0,0 +1,298 @@
+#include <X/mit-copyright.h>
+
+/* Copyright 1985, Massachusetts Institute of Technology */
+
+/*
+ * xwininfo.c  - MIT Project Athena, X Window system window
+ *               information utility.
+ *
+ *     This program will report all relavent information
+ *     about a specific window.
+ *
+ *  Author:    Tony Della Fera, DEC
+ *             27-Nov-84
+ */
+#ifndef lint
+static char *rcsid_xhost_c = "$Header: xwininfo.c,v 10.6 86/11/19 19:59:23 jg Rel $";
+#endif
+
+#include <X/Xlib.h>
+#include <stdio.h>
+#include "../cursors/target.cursor"
+#include "../cursors/target_mask.cursor"
+#include <strings.h>
+
+typedef enum _bool {FALSE, TRUE} Bool;
+
+#define MAX(a, b) (a) > (b) ? (a) : (b)
+#define MIN(a, b) (a) < (b) ? (a) : (b)
+#define ABS(a) (a) < 0 ? -(a) : (a)
+
+#define FAILURE 0
+
+char *index();
+
+extern int errno;
+
+main(argc, argv)
+    int argc;
+    char **argv;
+{
+    int mse_x, mse_y;
+    int rel_mse_x, rel_mse_y;
+    int w0, h0, w_inc, h_inc;
+    int lr_rel_x, lr_rel_y;
+    int root_w, root_h;
+    int num_children;
+    int status;
+    char display[256];
+    char *strind = NULL;
+    char *win_name = NULL;
+    char *id = NULL;
+    char *win_fmt = " 0x%x\n";
+    Bool children = FALSE;
+    Bool root_switch = FALSE;
+    register int i;
+
+    Window target_win;
+    Window temp_win;
+    Window parent_win;
+    Window *child_list;
+    WindowInfo win_info;
+    Cursor cursor;
+    XButtonPressedEvent event;
+
+    display[0] = '\0';
+    
+    for (i = 1; i < argc; i++) {
+       strind = index(argv[i], ':');
+       if (strind != NULL) {
+           (void) strncpy(display, argv[i], sizeof(display));
+           continue;
+       }
+       strind = index (argv [i], '-');
+       if (strind == NULL) Syntax(argv[0]);
+       if (strncmp(argv [i], "-children", 9) == 0) {
+           children = TRUE;
+           continue;
+       }
+       if (strncmp(argv [i], "-help", 5) == 0) {
+           Syntax(argv[0]);
+       }
+       if (strncmp(argv [i], "-id", 3) == 0) {
+           if (++i >= argc) Syntax(argv[0]);
+           id = argv[i];
+           continue;
+       }
+       if (strncmp(argv [i], "-int", 4) == 0) {
+           win_fmt = " %d\n";
+           continue;
+       }
+       if (strncmp(argv [i], "-root", 5) == 0) {
+           root_switch = TRUE;
+           continue;
+       }
+       Syntax(argv[0]);
+    }
+    
+    if (XOpenDisplay(display) == NULL) {
+           fprintf(stderr, "%s: Can't open display '%s'\n",
+                   argv[0], XDisplayName(display));
+           exit(1);
+         }
+
+    /*
+     * Store the target cursor incase we need it.
+     */
+    cursor = XCreateCursor(
+       target_width, target_height, 
+       target_bits, target_mask_bits, 
+       8, 8,
+       BlackPixel, WhitePixel,
+       GXcopy
+    ); 
+    if (cursor == FAILURE) {
+       Error("Error occured while trying to store target cursor.");
+    }
+
+    /*
+     * Depending on the state of the root and id switches, get the
+     * target window from the user.
+     */
+    if (root_switch) {
+       /*
+        * The root window selected on the command line.
+        */
+       target_win = RootWindow;
+    }
+    else {
+       if (id != NULL) {
+           /*
+            * A window id was provided on the command line.
+            */
+           (void) sscanf(id, "0x%x", &target_win);
+           if (target_win == 0) {
+               /*
+                * Then the target was entered in decimal.
+                */
+               (void) sscanf(id, "%d", &target_win);
+               if (target_win == 0) {
+                   Error("Invalid window id format.");
+               }
+           }
+       }
+       else {
+           /*
+            * No selection was provided on the command line.
+            * Allow the user to select a window with the mouse.
+            */
+           status = XGrabMouse(RootWindow, cursor, ButtonPressed);
+           if (status == FAILURE) Error("Can't grab the mouse.");
+
+           printf("\n");
+           printf("xwininfo ==> Please select the window you wish\n");
+           printf("         ==> information on by clicking the\n");
+           printf("         ==> mouse in that window.\n");
+
+           XNextEvent(&event);
+           target_win = event.subwindow;
+
+           XUngrabMouse();
+
+           if (target_win == 0) {
+               /*
+                * The user must have indicated the root window.
+                */
+               target_win = RootWindow;
+           }
+       }
+    }
+    
+    status = XQueryMouse(RootWindow, &mse_x, &mse_y, &temp_win);
+    if (status == FAILURE) Error("Can't query mouse on Root Window.");
+    if (target_win == RootWindow){
+       rel_mse_x = mse_x;
+       rel_mse_y = mse_y;
+    }
+    else {
+       status = XQueryMouse(target_win, &rel_mse_x, &rel_mse_y, &temp_win);
+       if (status == FAILURE) Error("Can't query mouse on target window.");
+    }
+
+    status = XQueryWindow(RootWindow, &win_info);
+    if (status == FAILURE) Error("Couldn't query root window.");    
+    root_w = win_info.width;
+    root_h = win_info.height;
+    
+    status = XQueryWindow(target_win, &win_info);
+    if (status == FAILURE) Error("Couldn't query target window.");
+    lr_rel_x = root_w - (win_info.x + win_info.width +
+       (win_info.bdrwidth << 1));
+    lr_rel_y = root_h - (win_info.y + win_info.height +
+       (win_info.bdrwidth << 1));
+
+    status = XFetchName(target_win, &win_name);
+    if (status == FAILURE) Error("Can't fetch window name.");
+
+    status = XQueryTree(target_win, &parent_win, &num_children, &child_list);
+    if (status == FAILURE) Error("Can't query window tree.");
+
+    (void) XGetResizeHint(target_win, &w0, &h0, &w_inc, &h_inc);
+
+    printf("\nxwininfo ==> Window name: '%s'\n", win_name);
+    printf("         ==> Window id:");
+    printf(win_fmt, target_win);
+    printf("         ==> Parent window id:");
+    printf(win_fmt, parent_win);
+    printf("         ==> Number of children: %d\n", num_children);
+    if (children) {
+        for (i = num_children - 1; i >= 0; i--) {
+            printf("             ==> Child window id:"); 
+           printf(win_fmt, child_list[i]);
+        }
+    }
+    printf("         ==> Associated window id:");
+    printf(win_fmt, win_info.assoc_wind);
+    printf("         ==> Window type: ");
+    switch (win_info.type) {
+        case IsTransparent:
+            printf("IsTransparent\n");
+            break;
+        case IsOpaque:
+            printf("IsOpaque\n");
+            break;
+        case IsIcon:
+            printf("IsIcon\n");
+            break;
+        default:
+            printf("Unknown %d?\n", win_info.type);
+            break;
+    }
+    printf("         ==> Window state: ");
+    switch (win_info.mapped) {
+        case IsMapped:
+            printf("IsMapped\n");
+            break;
+        case IsUnmapped:
+            printf("IsUnmapped\n");
+            break;
+        case IsInvisible:
+            printf("IsInvisible\n");
+            break;
+        default:
+            printf("Unknown %d?\n", win_info.mapped);
+            break;
+    }
+    printf("         ==> Upper left X: %d\n", win_info.x);
+    printf("         ==> Upper left Y: %d\n", win_info.y);
+    printf("         ==> Width: %d\n", win_info.width);
+    printf("         ==> Height: %d\n", win_info.height);
+    printf("         ==> Border width: %d\n", win_info.bdrwidth);
+    printf("         ==> Geometry specification:\n");
+    printf("             ==> Upper left  =%dx%d+%d+%d\n",
+       win_info.width, win_info.height, win_info.x, win_info.y);
+    printf("             ==> Lower right =%dx%d-%d-%d\n",
+       win_info.width, win_info.height, lr_rel_x, lr_rel_y);
+    printf("         ==> Resize base width: %d\n", w0);
+    printf("         ==> Resize base height: %d\n", h0);
+    printf("         ==> Resize width increment: %d\n", w_inc);
+    printf("         ==> Resize height increment: %d\n", h_inc);
+    printf("         ==> Root absolute mouse X Position: %d\n", mse_x);
+    printf("         ==> Root absolute mouse Y Position: %d\n", mse_y);
+    printf("         ==> Target relative mouse X Position: %d\n", rel_mse_x);
+    printf("         ==> Target relative mouse Y Position: %d\n", rel_mse_y);
+    printf("\n");
+
+    exit(0);
+}
+
+
+/*
+ * Report the syntax for calling xwininfo.
+ */
+Syntax(call)
+    char *call;
+{
+    fprintf(stderr, "\n");
+    fprintf(stderr, "Usage: %s [-children] [-help] [-id <id>] [-int] ", call);
+    fprintf(stderr, "[-root] [[host]:vs]\n\n");
+    exit(0);
+}
+
+
+/*
+ * Error - Fatal xwininfo error.
+ */
+Error(string)
+       char *string;   /* Error description string. */
+{
+       fprintf(stderr, "\nxwininfo: %s", string);
+       fprintf(stderr, "\n\n");
+
+       if (errno != 0) {
+               perror("xwininfo");
+               fprintf(stderr, "\n");
+       }
+
+       exit(1);
+}