Annotation of 43BSD/contrib/X/xwininfo/xwininfo.c, revision 1.1

1.1     ! root        1: #include <X/mit-copyright.h>
        !             2: 
        !             3: /* Copyright 1985, Massachusetts Institute of Technology */
        !             4: 
        !             5: /*
        !             6:  * xwininfo.c  - MIT Project Athena, X Window system window
        !             7:  *               information utility.
        !             8:  *
        !             9:  *     This program will report all relavent information
        !            10:  *     about a specific window.
        !            11:  *
        !            12:  *  Author:    Tony Della Fera, DEC
        !            13:  *             27-Nov-84
        !            14:  */
        !            15: #ifndef lint
        !            16: static char *rcsid_xhost_c = "$Header: xwininfo.c,v 10.5 86/02/01 16:08:18 tony Rel $";
        !            17: #endif
        !            18: 
        !            19: #include <X/Xlib.h>
        !            20: #include <stdio.h>
        !            21: #include "../cursors/target.cursor"
        !            22: #include "../cursors/target_mask.cursor"
        !            23: #include <strings.h>
        !            24: 
        !            25: typedef enum _bool {FALSE, TRUE} Bool;
        !            26: 
        !            27: #define MAX(a, b) (a) > (b) ? (a) : (b)
        !            28: #define MIN(a, b) (a) < (b) ? (a) : (b)
        !            29: #define ABS(a) (a) < 0 ? -(a) : (a)
        !            30: 
        !            31: #define FAILURE 0
        !            32: 
        !            33: char *index();
        !            34: 
        !            35: extern int errno;
        !            36: 
        !            37: main(argc, argv)
        !            38:     int argc;
        !            39:     char **argv;
        !            40: {
        !            41:     int mse_x, mse_y;
        !            42:     int rel_mse_x, rel_mse_y;
        !            43:     int w0, h0, w_inc, h_inc;
        !            44:     int lr_rel_x, lr_rel_y;
        !            45:     int root_w, root_h;
        !            46:     int num_children;
        !            47:     int status;
        !            48:     char display[256];
        !            49:     char *strind = NULL;
        !            50:     char *win_name = NULL;
        !            51:     char *id = NULL;
        !            52:     char *win_fmt = " 0x%x\n";
        !            53:     Bool children = FALSE;
        !            54:     Bool root_switch = FALSE;
        !            55:     register int i;
        !            56: 
        !            57:     Window target_win;
        !            58:     Window temp_win;
        !            59:     Window parent_win;
        !            60:     Window *child_list;
        !            61:     WindowInfo win_info;
        !            62:     Cursor cursor;
        !            63:     XButtonPressedEvent event;
        !            64: 
        !            65:     display[0] = '\0';
        !            66:     
        !            67:     for (i = 1; i < argc; i++) {
        !            68:        strind = index(argv[i], ':');
        !            69:        if (strind != NULL) {
        !            70:            (void) strncpy(display, argv[i], sizeof(display));
        !            71:            continue;
        !            72:        }
        !            73:        strind = index (argv [i], '-');
        !            74:        if (strind == NULL) Syntax(argv[0]);
        !            75:        if (strncmp(argv [i], "-children", 9) == 0) {
        !            76:            children = TRUE;
        !            77:            continue;
        !            78:        }
        !            79:        if (strncmp(argv [i], "-help", 5) == 0) {
        !            80:            Syntax(argv[0]);
        !            81:        }
        !            82:        if (strncmp(argv [i], "-id", 3) == 0) {
        !            83:            if (++i >= argc) Syntax(argv[0]);
        !            84:            id = argv[i];
        !            85:            continue;
        !            86:        }
        !            87:        if (strncmp(argv [i], "-int", 4) == 0) {
        !            88:            win_fmt = " %d\n";
        !            89:            continue;
        !            90:        }
        !            91:        if (strncmp(argv [i], "-root", 5) == 0) {
        !            92:            root_switch = TRUE;
        !            93:            continue;
        !            94:        }
        !            95:        Syntax(argv[0]);
        !            96:     }
        !            97:     
        !            98:     if (XOpenDisplay(display) == NULL) Error("Couldn't Open display.");
        !            99: 
        !           100:     /*
        !           101:      * Store the target cursor incase we need it.
        !           102:      */
        !           103:     cursor = XCreateCursor(
        !           104:        target_width, target_height, 
        !           105:        target_bits, target_mask_bits, 
        !           106:        8, 8,
        !           107:        BlackPixel, WhitePixel,
        !           108:        GXcopy
        !           109:     ); 
        !           110:     if (cursor == FAILURE) {
        !           111:        Error("Error occured while trying to store target cursor.");
        !           112:     }
        !           113: 
        !           114:     /*
        !           115:      * Depending on the state of the root and id switches, get the
        !           116:      * target window from the user.
        !           117:      */
        !           118:     if (root_switch) {
        !           119:        /*
        !           120:         * The root window selected on the command line.
        !           121:         */
        !           122:        target_win = RootWindow;
        !           123:     }
        !           124:     else {
        !           125:        if (id != NULL) {
        !           126:            /*
        !           127:             * A window id was provided on the command line.
        !           128:             */
        !           129:            (void) sscanf(id, "0x%x", &target_win);
        !           130:            if (target_win == 0) {
        !           131:                /*
        !           132:                 * Then the target was entered in decimal.
        !           133:                 */
        !           134:                (void) sscanf(id, "%d", &target_win);
        !           135:                if (target_win == 0) {
        !           136:                    Error("Invalid window id format.");
        !           137:                }
        !           138:            }
        !           139:        }
        !           140:        else {
        !           141:            /*
        !           142:             * No selection was provided on the command line.
        !           143:             * Allow the user to select a window with the mouse.
        !           144:             */
        !           145:            status = XGrabMouse(RootWindow, cursor, ButtonPressed);
        !           146:            if (status == FAILURE) Error("Can't grab the mouse.");
        !           147: 
        !           148:            printf("\n");
        !           149:            printf("xwininfo ==> Please select the window you wish\n");
        !           150:            printf("         ==> information on by clicking the\n");
        !           151:            printf("         ==> mouse in that window.\n");
        !           152: 
        !           153:            XNextEvent(&event);
        !           154:            target_win = event.subwindow;
        !           155: 
        !           156:            XUngrabMouse();
        !           157: 
        !           158:            if (target_win == 0) {
        !           159:                /*
        !           160:                 * The user must have indicated the root window.
        !           161:                 */
        !           162:                target_win = RootWindow;
        !           163:            }
        !           164:        }
        !           165:     }
        !           166:     
        !           167:     status = XQueryMouse(RootWindow, &mse_x, &mse_y, &temp_win);
        !           168:     if (status == FAILURE) Error("Can't query mouse on Root Window.");
        !           169:     if (target_win == RootWindow){
        !           170:        rel_mse_x = mse_x;
        !           171:        rel_mse_y = mse_y;
        !           172:     }
        !           173:     else {
        !           174:        status = XQueryMouse(target_win, &rel_mse_x, &rel_mse_y, &temp_win);
        !           175:        if (status == FAILURE) Error("Can't query mouse on target window.");
        !           176:     }
        !           177: 
        !           178:     status = XQueryWindow(RootWindow, &win_info);
        !           179:     if (status == FAILURE) Error("Couldn't query root window.");    
        !           180:     root_w = win_info.width;
        !           181:     root_h = win_info.height;
        !           182:     
        !           183:     status = XQueryWindow(target_win, &win_info);
        !           184:     if (status == FAILURE) Error("Couldn't query target window.");
        !           185:     lr_rel_x = root_w - (win_info.x + win_info.width +
        !           186:        (win_info.bdrwidth << 1));
        !           187:     lr_rel_y = root_h - (win_info.y + win_info.height +
        !           188:        (win_info.bdrwidth << 1));
        !           189: 
        !           190:     status = XFetchName(target_win, &win_name);
        !           191:     if (status == FAILURE) Error("Can't fetch window name.");
        !           192: 
        !           193:     status = XQueryTree(target_win, &parent_win, &num_children, &child_list);
        !           194:     if (status == FAILURE) Error("Can't query window tree.");
        !           195: 
        !           196:     (void) XGetResizeHint(target_win, &w0, &h0, &w_inc, &h_inc);
        !           197: 
        !           198:     printf("\nxwininfo ==> Window name: '%s'\n", win_name);
        !           199:     printf("         ==> Window id:");
        !           200:     printf(win_fmt, target_win);
        !           201:     printf("         ==> Parent window id:");
        !           202:     printf(win_fmt, parent_win);
        !           203:     printf("         ==> Number of children: %d\n", num_children);
        !           204:     if (children) {
        !           205:         for (i = num_children - 1; i >= 0; i--) {
        !           206:             printf("             ==> Child window id:"); 
        !           207:            printf(win_fmt, child_list[i]);
        !           208:         }
        !           209:     }
        !           210:     printf("         ==> Associated window id:");
        !           211:     printf(win_fmt, win_info.assoc_wind);
        !           212:     printf("         ==> Window type: ");
        !           213:     switch (win_info.type) {
        !           214:         case IsTransparent:
        !           215:             printf("IsTransparent\n");
        !           216:             break;
        !           217:         case IsOpaque:
        !           218:             printf("IsOpaque\n");
        !           219:             break;
        !           220:         case IsIcon:
        !           221:             printf("IsIcon\n");
        !           222:             break;
        !           223:         default:
        !           224:             printf("Unknown %d?\n", win_info.type);
        !           225:             break;
        !           226:     }
        !           227:     printf("         ==> Window state: ");
        !           228:     switch (win_info.mapped) {
        !           229:         case IsMapped:
        !           230:             printf("IsMapped\n");
        !           231:             break;
        !           232:         case IsUnmapped:
        !           233:             printf("IsUnmapped\n");
        !           234:             break;
        !           235:         case IsInvisible:
        !           236:             printf("IsInvisible\n");
        !           237:             break;
        !           238:         default:
        !           239:             printf("Unknown %d?\n", win_info.mapped);
        !           240:             break;
        !           241:     }
        !           242:     printf("         ==> Upper left X: %d\n", win_info.x);
        !           243:     printf("         ==> Upper left Y: %d\n", win_info.y);
        !           244:     printf("         ==> Width: %d\n", win_info.width);
        !           245:     printf("         ==> Height: %d\n", win_info.height);
        !           246:     printf("         ==> Border width: %d\n", win_info.bdrwidth);
        !           247:     printf("         ==> Geometry specification:\n");
        !           248:     printf("             ==> Upper left  =%dx%d+%d+%d\n",
        !           249:        win_info.width, win_info.height, win_info.x, win_info.y);
        !           250:     printf("             ==> Lower right =%dx%d-%d-%d\n",
        !           251:        win_info.width, win_info.height, lr_rel_x, lr_rel_y);
        !           252:     printf("         ==> Resize base width: %d\n", w0);
        !           253:     printf("         ==> Resize base height: %d\n", h0);
        !           254:     printf("         ==> Resize width increment: %d\n", w_inc);
        !           255:     printf("         ==> Resize height increment: %d\n", h_inc);
        !           256:     printf("         ==> Root absolute mouse X Position: %d\n", mse_x);
        !           257:     printf("         ==> Root absolute mouse Y Position: %d\n", mse_y);
        !           258:     printf("         ==> Target relative mouse X Position: %d\n", rel_mse_x);
        !           259:     printf("         ==> Target relative mouse Y Position: %d\n", rel_mse_y);
        !           260:     printf("\n");
        !           261: 
        !           262:     exit(0);
        !           263: }
        !           264: 
        !           265: 
        !           266: /*
        !           267:  * Report the syntax for calling xwininfo.
        !           268:  */
        !           269: Syntax(call)
        !           270:     char *call;
        !           271: {
        !           272:     fprintf(stderr, "\n");
        !           273:     fprintf(stderr, "Usage: %s [-children] [-help] [-id <id>] [-int] ", call);
        !           274:     fprintf(stderr, "[-root] [[host]:vs]\n\n");
        !           275:     exit(0);
        !           276: }
        !           277: 
        !           278: 
        !           279: /*
        !           280:  * Error - Fatal xwininfo error.
        !           281:  */
        !           282: Error(string)
        !           283:        char *string;   /* Error description string. */
        !           284: {
        !           285:        fprintf(stderr, "\nxwininfo: %s", string);
        !           286:        fprintf(stderr, "\n\n");
        !           287: 
        !           288:        if (errno != 0) {
        !           289:                perror("xwininfo");
        !           290:                fprintf(stderr, "\n");
        !           291:        }
        !           292: 
        !           293:        exit(1);
        !           294: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.