diff options
author | rsc <devnull@localhost> | 2005-07-13 03:54:55 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2005-07-13 03:54:55 +0000 |
commit | 871e83a03e50fc9bc4edde914d7f7ee6c4d1c18e (patch) | |
tree | e7864bac0e6aa611f73453b2479bad266023f57d /src/cmd/rio | |
parent | ac33a34a29f96ada24895ee56364eab27533143f (diff) | |
download | plan9port-871e83a03e50fc9bc4edde914d7f7ee6c4d1c18e.tar.gz plan9port-871e83a03e50fc9bc4edde914d7f7ee6c4d1c18e.tar.bz2 plan9port-871e83a03e50fc9bc4edde914d7f7ee6c4d1c18e.zip |
add printevent
Diffstat (limited to 'src/cmd/rio')
-rw-r--r-- | src/cmd/rio/printevent.c | 986 | ||||
-rw-r--r-- | src/cmd/rio/printevent.h | 2 |
2 files changed, 988 insertions, 0 deletions
diff --git a/src/cmd/rio/printevent.c b/src/cmd/rio/printevent.c new file mode 100644 index 00000000..05cc5ad7 --- /dev/null +++ b/src/cmd/rio/printevent.c @@ -0,0 +1,986 @@ +/* + * Original code posted to comp.sources.x + * Modifications by Russ Cox <rsc@swtch.com>. + */ + +/* +Path: uunet!wyse!mikew +From: mikew@wyse.wyse.com (Mike Wexler) +Newsgroups: comp.sources.x +Subject: v02i056: subroutine to print events in human readable form, Part01/01 +Message-ID: <1935@wyse.wyse.com> +Date: 22 Dec 88 19:28:25 GMT +Organization: Wyse Technology, San Jose +Lines: 1093 +Approved: mikew@wyse.com + +Submitted-by: richsun!darkstar!ken +Posting-number: Volume 2, Issue 56 +Archive-name: showevent/part01 + + +There are times during debugging when it would be real useful to be able to +print the fields of an event in a human readable form. Too many times I found +myself scrounging around in section 8 of the Xlib manual looking for the valid +fields for the events I wanted to see, then adding printf's to display the +numeric values of the fields, and then scanning through X.h trying to decode +the cryptic detail and state fields. After playing with xev, I decided to +write a couple of standard functions that I could keep in a library and call +on whenever I needed a little debugging verbosity. The first function, +GetType(), is useful for returning the string representation of the type of +an event. The second function, ShowEvent(), is used to display all the fields +of an event in a readable format. The functions are not complicated, in fact, +they are mind-numbingly boring - but that's just the point nobody wants to +spend the time writing functions like this, they just want to have them when +they need them. + +A simple, sample program is included which does little else but to demonstrate +the use of these two functions. These functions have saved me many an hour +during debugging and I hope you find some benefit to these. If you have any +comments, suggestions, improvements, or if you find any blithering errors you +can get it touch with me at the following location: + + ken@richsun.UUCP +*/ + +#include <stdio.h> +#include <X11/Intrinsic.h> +#include <X11/Xproto.h> +#include "printevent.h" + +static char* sep = " "; + +/******************************************************************************/ +/**** Miscellaneous routines to convert values to their string equivalents ****/ +/******************************************************************************/ + +/* Returns the string equivalent of a boolean parameter */ +static char* +TorF(int bool) +{ + switch (bool) { + case True: + return ("True"); + + case False: + return ("False"); + + default: + return ("?"); + } +} + +/* Returns the string equivalent of a property notify state */ +static char* +PropertyState(int state) +{ + switch (state) { + case PropertyNewValue: + return ("PropertyNewValue"); + + case PropertyDelete: + return ("PropertyDelete"); + + default: + return ("?"); + } +} + +/* Returns the string equivalent of a visibility notify state */ +static char* +VisibilityState(int state) +{ + switch (state) { + case VisibilityUnobscured: + return ("VisibilityUnobscured"); + + case VisibilityPartiallyObscured: + return ("VisibilityPartiallyObscured"); + + case VisibilityFullyObscured: + return ("VisibilityFullyObscured"); + + default: + return ("?"); + } +} + +/* Returns the string equivalent of a timestamp */ +static char* +ServerTime(Time time) +{ + unsigned long msec; + unsigned long sec; + unsigned long min; + unsigned long hr; + unsigned long day; + static char buffer[32]; + + msec = time % 1000; + time /= 1000; + sec = time % 60; + time /= 60; + min = time % 60; + time /= 60; + hr = time % 24; + time /= 24; + day = time; + +if(0) + sprintf(buffer, "%lu day%s %02lu:%02lu:%02lu.%03lu", + day, day == 1 ? "" : "(s)", hr, min, sec, msec); + + sprintf(buffer, "%lud%luh%lum%lu.%03lds", day, hr, min, sec, msec); + return (buffer); +} + +/* Simple structure to ease the interpretation of masks */ +typedef struct MaskType MaskType; +struct MaskType +{ + unsigned int value; + char *string; +}; + +/* Returns the string equivalent of a mask of buttons and/or modifier keys */ +static char* +ButtonAndOrModifierState(unsigned int state) +{ + static char buffer[256]; + static MaskType masks[] = { + {Button1Mask, "Button1Mask"}, + {Button2Mask, "Button2Mask"}, + {Button3Mask, "Button3Mask"}, + {Button4Mask, "Button4Mask"}, + {Button5Mask, "Button5Mask"}, + {ShiftMask, "ShiftMask"}, + {LockMask, "LockMask"}, + {ControlMask, "ControlMask"}, + {Mod1Mask, "Mod1Mask"}, + {Mod2Mask, "Mod2Mask"}, + {Mod3Mask, "Mod3Mask"}, + {Mod4Mask, "Mod4Mask"}, + {Mod5Mask, "Mod5Mask"}, + }; + int num_masks = sizeof(masks) / sizeof(MaskType); + int i; + Boolean first = True; + + buffer[0] = 0; + + for (i = 0; i < num_masks; i++) + if (state & masks[i].value) + if (first) { + first = False; + strcpy(buffer, masks[i].string); + } else { + strcat(buffer, " | "); + strcat(buffer, masks[i].string); + } + return (buffer); +} + +/* Returns the string equivalent of a mask of configure window values */ +static char* +ConfigureValueMask(unsigned int valuemask) +{ + static char buffer[256]; + static MaskType masks[] = { + {CWX, "CWX"}, + {CWY, "CWY"}, + {CWWidth, "CWWidth"}, + {CWHeight, "CWHeight"}, + {CWBorderWidth, "CWBorderWidth"}, + {CWSibling, "CWSibling"}, + {CWStackMode, "CWStackMode"}, + }; + int num_masks = sizeof(masks) / sizeof(MaskType); + int i; + Boolean first = True; + + buffer[0] = 0; + + for (i = 0; i < num_masks; i++) + if (valuemask & masks[i].value) + if (first) { + first = False; + strcpy(buffer, masks[i].string); + } else { + strcat(buffer, " | "); + strcat(buffer, masks[i].string); + } + + return (buffer); +} + +/* Returns the string equivalent of a motion hint */ +static char* +IsHint(char is_hint) +{ + switch (is_hint) { + case NotifyNormal: + return ("NotifyNormal"); + + case NotifyHint: + return ("NotifyHint"); + + default: + return ("?"); + } +} + +/* Returns the string equivalent of an id or the value "None" */ +static char* +MaybeNone(int value) +{ + static char buffer[16]; + + if (value == None) + return ("None"); + else { + sprintf(buffer, "0x%x", value); + return (buffer); + } +} + +/* Returns the string equivalent of a colormap state */ +static char* +ColormapState(int state) +{ + switch (state) { + case ColormapInstalled: + return ("ColormapInstalled"); + + case ColormapUninstalled: + return ("ColormapUninstalled"); + + default: + return ("?"); + } +} + +/* Returns the string equivalent of a crossing detail */ +static char* +CrossingDetail(int detail) +{ + switch (detail) { + case NotifyAncestor: + return ("NotifyAncestor"); + + case NotifyInferior: + return ("NotifyInferior"); + + case NotifyVirtual: + return ("NotifyVirtual"); + + case NotifyNonlinear: + return ("NotifyNonlinear"); + + case NotifyNonlinearVirtual: + return ("NotifyNonlinearVirtual"); + + default: + return ("?"); + } +} + +/* Returns the string equivalent of a focus change detail */ +static char* +FocusChangeDetail(int detail) +{ + switch (detail) { + case NotifyAncestor: + return ("NotifyAncestor"); + + case NotifyInferior: + return ("NotifyInferior"); + + case NotifyVirtual: + return ("NotifyVirtual"); + + case NotifyNonlinear: + return ("NotifyNonlinear"); + + case NotifyNonlinearVirtual: + return ("NotifyNonlinearVirtual"); + + case NotifyPointer: + return ("NotifyPointer"); + + case NotifyPointerRoot: + return ("NotifyPointerRoot"); + + case NotifyDetailNone: + return ("NotifyDetailNone"); + + default: + return ("?"); + } +} + +/* Returns the string equivalent of a configure detail */ +static char* +ConfigureDetail(int detail) +{ + switch (detail) { + case Above: + return ("Above"); + + case Below: + return ("Below"); + + case TopIf: + return ("TopIf"); + + case BottomIf: + return ("BottomIf"); + + case Opposite: + return ("Opposite"); + + default: + return ("?"); + } +} + +/* Returns the string equivalent of a grab mode */ +static char* +GrabMode(int mode) +{ + switch (mode) { + case NotifyNormal: + return ("NotifyNormal"); + + case NotifyGrab: + return ("NotifyGrab"); + + case NotifyUngrab: + return ("NotifyUngrab"); + + case NotifyWhileGrabbed: + return ("NotifyWhileGrabbed"); + + default: + return ("?"); + } +} + +/* Returns the string equivalent of a mapping request */ +static char* +MappingRequest(int request) +{ + switch (request) { + case MappingModifier: + return ("MappingModifier"); + + case MappingKeyboard: + return ("MappingKeyboard"); + + case MappingPointer: + return ("MappingPointer"); + + default: + return ("?"); + } +} + +/* Returns the string equivalent of a stacking order place */ +static char* +Place(int place) +{ + switch (place) { + case PlaceOnTop: + return ("PlaceOnTop"); + + case PlaceOnBottom: + return ("PlaceOnBottom"); + + default: + return ("?"); + } +} + +/* Returns the string equivalent of a major code */ +static char* +MajorCode(int code) +{ + static char buffer[32]; + + switch (code) { + case X_CopyArea: + return ("X_CopyArea"); + + case X_CopyPlane: + return ("X_CopyPlane"); + + default: + sprintf(buffer, "0x%x", code); + return (buffer); + } +} + +/* Returns the string equivalent the keycode contained in the key event */ +static char* +Keycode(XKeyEvent *ev) +{ + static char buffer[256]; + KeySym keysym_str; + char *keysym_name; + char string[256]; + + XLookupString(ev, string, 64, &keysym_str, NULL); + + if (keysym_str == NoSymbol) + keysym_name = "NoSymbol"; + else if (!(keysym_name = XKeysymToString(keysym_str))) + keysym_name = "(no name)"; + sprintf(buffer, "%u (keysym 0x%x \"%s\")", + (int)ev->keycode, (int)keysym_str, keysym_name); + return (buffer); +} + +/* Returns the string equivalent of an atom or "None"*/ +static char* +AtomName(Display *dpy, Atom atom) +{ + static char buffer[256]; + char *atom_name; + + if (atom == None) + return ("None"); + + atom_name = XGetAtomName(dpy, atom); + strncpy(buffer, atom_name, 256); + XFree(atom_name); + return (buffer); +} + +/******************************************************************************/ +/**** Routines to print out readable values for the field of various events ***/ +/******************************************************************************/ + +static void +VerbMotion(XMotionEvent *ev) +{ + printf("window=0x%x%s", (int)ev->window, sep); + printf("root=0x%x%s", (int)ev->root, sep); + printf("subwindow=0x%x%s", (int)ev->subwindow, sep); + printf("time=%s%s", ServerTime(ev->time), sep); + printf("x=%d y=%d%s", ev->x, ev->y, sep); + printf("x_root=%d y_root=%d%s", ev->x_root, ev->y_root, sep); + printf("state=%s%s", ButtonAndOrModifierState(ev->state), sep); + printf("is_hint=%s%s", IsHint(ev->is_hint), sep); + printf("same_screen=%s\n", TorF(ev->same_screen)); +} + +static void +VerbButton(XButtonEvent *ev) +{ + printf("window=0x%x%s", (int)ev->window, sep); + printf("root=0x%x%s", (int)ev->root, sep); + printf("subwindow=0x%x%s", (int)ev->subwindow, sep); + printf("time=%s%s", ServerTime(ev->time), sep); + printf("x=%d y=%d%s", ev->x, ev->y, sep); + printf("x_root=%d y_root=%d%s", ev->x_root, ev->y_root, sep); + printf("state=%s%s", ButtonAndOrModifierState(ev->state), sep); + printf("button=%s%s", ButtonAndOrModifierState(ev->button), sep); + printf("same_screen=%s\n", TorF(ev->same_screen)); +} + +static void +VerbColormap(XColormapEvent *ev) +{ + printf("window=0x%x%s", (int)ev->window, sep); + printf("colormap=%s%s", MaybeNone(ev->colormap), sep); + printf("new=%s%s", TorF(ev->new), sep); + printf("state=%s\n", ColormapState(ev->state)); +} + +static void +VerbCrossing(XCrossingEvent *ev) +{ + printf("window=0x%x%s", (int)ev->window, sep); + printf("root=0x%x%s", (int)ev->root, sep); + printf("subwindow=0x%x%s", (int)ev->subwindow, sep); + printf("time=%s%s", ServerTime(ev->time), sep); + printf("x=%d y=%d%s", ev->x, ev->y, sep); + printf("x_root=%d y_root=%d%s", ev->x_root, ev->y_root, sep); + printf("mode=%s%s", GrabMode(ev->mode), sep); + printf("detail=%s%s", CrossingDetail(ev->detail), sep); + printf("same_screen=%s%s", TorF(ev->same_screen), sep); + printf("focus=%s%s", TorF(ev->focus), sep); + printf("state=%s\n", ButtonAndOrModifierState(ev->state)); +} + +static void +VerbExpose(XExposeEvent *ev) +{ + printf("window=0x%x%s", (int)ev->window, sep); + printf("x=%d y=%d%s", ev->x, ev->y, sep); + printf("width=%d height=%d%s", ev->width, ev->height, sep); + printf("count=%d\n", ev->count); +} + +static void +VerbGraphicsExpose(XGraphicsExposeEvent *ev) +{ + printf("drawable=0x%x%s", (int)ev->drawable, sep); + printf("x=%d y=%d%s", ev->x, ev->y, sep); + printf("width=%d height=%d%s", ev->width, ev->height, sep); + printf("major_code=%s%s", MajorCode(ev->major_code), sep); + printf("minor_code=%d\n", ev->minor_code); +} + +static void +VerbNoExpose(XNoExposeEvent *ev) +{ + printf("drawable=0x%x%s", (int)ev->drawable, sep); + printf("major_code=%s%s", MajorCode(ev->major_code), sep); + printf("minor_code=%d\n", ev->minor_code); +} + +static void +VerbFocus(XFocusChangeEvent *ev) +{ + printf("window=0x%x%s", (int)ev->window, sep); + printf("mode=%s%s", GrabMode(ev->mode), sep); + printf("detail=%s\n", FocusChangeDetail(ev->detail)); +} + +static void +VerbKeymap(XKeymapEvent *ev) +{ + int i; + + printf("window=0x%x%s", (int)ev->window, sep); + printf("key_vector="); + for (i = 0; i < 32; i++) + printf("%02x", ev->key_vector[i]); + printf("\n"); +} + +static void +VerbKey(XKeyEvent *ev) +{ + printf("window=0x%x%s", (int)ev->window, sep); + printf("root=0x%x%s", (int)ev->root, sep); + if(ev->subwindow) + printf("subwindow=0x%x%s", (int)ev->subwindow, sep); + printf("time=%s%s", ServerTime(ev->time), sep); + printf("[%d,%d]%s", ev->x, ev->y, sep); + printf("root=[%d,%d]%s", ev->x_root, ev->y_root, sep); + if(ev->state) + printf("state=%s%s", ButtonAndOrModifierState(ev->state), sep); + printf("keycode=%s%s", Keycode(ev), sep); + if(!ev->same_screen) + printf("!same_screen", TorF(ev->same_screen)); + printf("\n"); + return; + + printf("window=0x%x%s", (int)ev->window, sep); + printf("root=0x%x%s", (int)ev->root, sep); + printf("subwindow=0x%x%s", (int)ev->subwindow, sep); + printf("time=%s%s", ServerTime(ev->time), sep); + printf("x=%d y=%d%s", ev->x, ev->y, sep); + printf("x_root=%d y_root=%d%s", ev->x_root, ev->y_root, sep); + printf("state=%s%s", ButtonAndOrModifierState(ev->state), sep); + printf("keycode=%s%s", Keycode(ev), sep); + printf("same_screen=%s\n", TorF(ev->same_screen)); +} + +static void +VerbProperty(XPropertyEvent *ev) +{ + printf("window=0x%x%s", (int)ev->window, sep); + printf("atom=%s%s", AtomName(ev->display, ev->atom), sep); + printf("time=%s%s", ServerTime(ev->time), sep); + printf("state=%s\n", PropertyState(ev->state)); +} + +static void +VerbResizeRequest(XResizeRequestEvent *ev) +{ + printf("window=0x%x%s", (int)ev->window, sep); + printf("width=%d height=%d\n", ev->width, ev->height); +} + +static void +VerbCirculate(XCirculateEvent *ev) +{ + printf("event=0x%x%s", (int)ev->event, sep); + printf("window=0x%x%s", (int)ev->window, sep); + printf("place=%s\n", Place(ev->place)); +} + +static void +VerbConfigure(XConfigureEvent *ev) +{ + printf("event=0x%x%s", (int)ev->event, sep); + printf("window=0x%x%s", (int)ev->window, sep); + printf("x=%d y=%d%s", ev->x, ev->y, sep); + printf("width=%d height=%d%s", ev->width, ev->height, sep); + printf("border_width=%d%s", ev->border_width, sep); + printf("above=%s%s", MaybeNone(ev->above), sep); + printf("override_redirect=%s\n", TorF(ev->override_redirect)); +} + +static void +VerbCreateWindow(XCreateWindowEvent *ev) +{ + printf("parent=0x%x%s", (int)ev->parent, sep); + printf("window=0x%x%s", (int)ev->window, sep); + printf("x=%d y=%d%s", ev->x, ev->y, sep); + printf("width=%d height=%d%s", ev->width, ev->height, sep); + printf("border_width=%d%s", ev->border_width, sep); + printf("override_redirect=%s\n", TorF(ev->override_redirect)); +} + +static void +VerbDestroyWindow(XDestroyWindowEvent *ev) +{ + printf("event=0x%x%s", (int)ev->event, sep); + printf("window=0x%x\n", (int)ev->window); +} + +static void +VerbGravity(XGravityEvent *ev) +{ + printf("event=0x%x%s", (int)ev->event, sep); + printf("window=0x%x%s", (int)ev->window, sep); + printf("x=%d y=%d\n", ev->x, ev->y); +} + +static void +VerbMap(XMapEvent *ev) +{ + printf("event=0x%x%s", (int)ev->event, sep); + printf("window=0x%x%s", (int)ev->window, sep); + printf("override_redirect=%s\n", TorF(ev->override_redirect)); +} + +static void +VerbReparent(XReparentEvent *ev) +{ + printf("event=0x%x%s", (int)ev->event, sep); + printf("window=0x%x%s", (int)ev->window, sep); + printf("parent=0x%x%s", (int)ev->parent, sep); + printf("x=%d y=%d%s", ev->x, ev->y, sep); + printf("override_redirect=%s\n", TorF(ev->override_redirect)); +} + +static void +VerbUnmap(XUnmapEvent *ev) +{ + printf("event=0x%x%s", (int)ev->event, sep); + printf("window=0x%x%s", (int)ev->window, sep); + printf("from_configure=%s\n", TorF(ev->from_configure)); +} + +static void +VerbCirculateRequest(XCirculateRequestEvent *ev) +{ + printf("parent=0x%x%s", (int)ev->parent, sep); + printf("window=0x%x%s", (int)ev->window, sep); + printf("place=%s\n", Place(ev->place)); +} + +static void +VerbConfigureRequest(XConfigureRequestEvent *ev) +{ + printf("parent=0x%x%s", (int)ev->parent, sep); + printf("window=0x%x%s", (int)ev->window, sep); + printf("x=%d y=%d%s", ev->x, ev->y, sep); + printf("width=%d height=%d%s", ev->width, ev->height, sep); + printf("border_width=%d%s", ev->border_width, sep); + printf("above=%s%s", MaybeNone(ev->above), sep); + printf("detail=%s%s", ConfigureDetail(ev->detail), sep); + printf("value_mask=%s\n", ConfigureValueMask(ev->value_mask)); +} + +static void +VerbMapRequest(XMapRequestEvent *ev) +{ + printf("parent=0x%x%s", (int)ev->parent, sep); + printf("window=0x%x\n", (int)ev->window); +} + +static void +VerbClient(XClientMessageEvent *ev) +{ + int i; + + printf("window=0x%x%s", (int)ev->window, sep); + printf("message_type=%s%s", AtomName(ev->display, ev->message_type), sep); + printf("format=%d\n", ev->format); + printf("data (shown as longs)="); + for (i = 0; i < 5; i++) + printf(" 0x%08lx", ev->data.l[i]); + printf("\n"); +} + +static void +VerbMapping(XMappingEvent *ev) +{ + printf("window=0x%x%s", (int)ev->window, sep); + printf("request=%s%s", MappingRequest(ev->request), sep); + printf("first_keycode=0x%x%s", ev->first_keycode, sep); + printf("count=0x%x\n", ev->count); +} + +static void +VerbSelectionClear(XSelectionClearEvent *ev) +{ + printf("window=0x%x%s", (int)ev->window, sep); + printf("selection=%s%s", AtomName(ev->display, ev->selection), sep); + printf("time=%s\n", ServerTime(ev->time)); +} + +static void +VerbSelection(XSelectionEvent *ev) +{ + printf("requestor=0x%x%s", (int)ev->requestor, sep); + printf("selection=%s%s", AtomName(ev->display, ev->selection), sep); + printf("target=%s%s", AtomName(ev->display, ev->target), sep); + printf("property=%s%s", AtomName(ev->display, ev->property), sep); + printf("time=%s\n", ServerTime(ev->time)); +} + +static void +VerbSelectionRequest(XSelectionRequestEvent *ev) +{ + printf("owner=0x%x%s", (int)ev->owner, sep); + printf("requestor=0x%x%s", (int)ev->requestor, sep); + printf("selection=%s%s", AtomName(ev->display, ev->selection), sep); + printf("target=%s%s", AtomName(ev->display, ev->target), sep); + printf("property=%s%s", AtomName(ev->display, ev->property), sep); + printf("time=%s\n", ServerTime(ev->time)); +} + +static void +VerbVisibility(XVisibilityEvent *ev) +{ + printf("window=0x%x%s", (int)ev->window, sep); + printf("state=%s\n", VisibilityState(ev->state)); +} + +/******************************************************************************/ +/************ Return the string representation for type of an event ***********/ +/******************************************************************************/ + +char *eventtype(XEvent *ev) +{ + static char buffer[20]; + + switch (ev->type) { + case KeyPress: + return ("KeyPress"); + case KeyRelease: + return ("KeyRelease"); + case ButtonPress: + return ("ButtonPress"); + case ButtonRelease: + return ("ButtonRelease"); + case MotionNotify: + return ("MotionNotify"); + case EnterNotify: + return ("EnterNotify"); + case LeaveNotify: + return ("LeaveNotify"); + case FocusIn: + return ("FocusIn"); + case FocusOut: + return ("FocusOut"); + case KeymapNotify: + return ("KeymapNotify"); + case Expose: + return ("Expose"); + case GraphicsExpose: + return ("GraphicsExpose"); + case NoExpose: + return ("NoExpose"); + case VisibilityNotify: + return ("VisibilityNotify"); + case CreateNotify: + return ("CreateNotify"); + case DestroyNotify: + return ("DestroyNotify"); + case UnmapNotify: + return ("UnmapNotify"); + case MapNotify: + return ("MapNotify"); + case MapRequest: + return ("MapRequest"); + case ReparentNotify: + return ("ReparentNotify"); + case ConfigureNotify: + return ("ConfigureNotify"); + case ConfigureRequest: + return ("ConfigureRequest"); + case GravityNotify: + return ("GravityNotify"); + case ResizeRequest: + return ("ResizeRequest"); + case CirculateNotify: + return ("CirculateNotify"); + case CirculateRequest: + return ("CirculateRequest"); + case PropertyNotify: + return ("PropertyNotify"); + case SelectionClear: + return ("SelectionClear"); + case SelectionRequest: + return ("SelectionRequest"); + case SelectionNotify: + return ("SelectionNotify"); + case ColormapNotify: + return ("ColormapNotify"); + case ClientMessage: + return ("ClientMessage"); + case MappingNotify: + return ("MappingNotify"); + } + sprintf(buffer, "%d", ev->type); + return buffer; +} + +/******************************************************************************/ +/**************** Print the values of all fields for any event ****************/ +/******************************************************************************/ + +void printevent(XEvent *e) +{ + XAnyEvent *ev = (void*)e; + + printf("%3ld %-20s ", ev->serial, eventtype(e)); + if(ev->send_event) + printf("(sendevent) "); + if(0){ + printf("type=%s%s", eventtype(e), sep); + printf("serial=%lu%s", ev->serial, sep); + printf("send_event=%s%s", TorF(ev->send_event), sep); + printf("display=0x%p%s", ev->display, sep); + } + + switch (ev->type) { + case MotionNotify: + VerbMotion((void*)ev); + break; + + case ButtonPress: + case ButtonRelease: + VerbButton((void*)ev); + break; + + case ColormapNotify: + VerbColormap((void*)ev); + break; + + case EnterNotify: + case LeaveNotify: + VerbCrossing((void*)ev); + break; + + case Expose: + VerbExpose((void*)ev); + break; + + case GraphicsExpose: + VerbGraphicsExpose((void*)ev); + break; + + case NoExpose: + VerbNoExpose((void*)ev); + break; + + case FocusIn: + case FocusOut: + VerbFocus((void*)ev); + break; + + case KeymapNotify: + VerbKeymap((void*)ev); + break; + + case KeyPress: + case KeyRelease: + VerbKey((void*)ev); + break; + + case PropertyNotify: + VerbProperty((void*)ev); + break; + + case ResizeRequest: + VerbResizeRequest((void*)ev); + break; + + case CirculateNotify: + VerbCirculate((void*)ev); + break; + + case ConfigureNotify: + VerbConfigure((void*)ev); + break; + + case CreateNotify: + VerbCreateWindow((void*)ev); + break; + + case DestroyNotify: + VerbDestroyWindow((void*)ev); + break; + + case GravityNotify: + VerbGravity((void*)ev); + break; + + case MapNotify: + VerbMap((void*)ev); + break; + + case ReparentNotify: + VerbReparent((void*)ev); + break; + + case UnmapNotify: + VerbUnmap((void*)ev); + break; + + case CirculateRequest: + VerbCirculateRequest((void*)ev); + break; + + case ConfigureRequest: + VerbConfigureRequest((void*)ev); + break; + + case MapRequest: + VerbMapRequest((void*)ev); + break; + + case ClientMessage: + VerbClient((void*)ev); + break; + + case MappingNotify: + VerbMapping((void*)ev); + break; + + case SelectionClear: + VerbSelectionClear((void*)ev); + break; + + case SelectionNotify: + VerbSelection((void*)ev); + break; + + case SelectionRequest: + VerbSelectionRequest((void*)ev); + break; + + case VisibilityNotify: + VerbVisibility((void*)ev); + break; + } +} + diff --git a/src/cmd/rio/printevent.h b/src/cmd/rio/printevent.h new file mode 100644 index 00000000..0a419363 --- /dev/null +++ b/src/cmd/rio/printevent.h @@ -0,0 +1,2 @@ +char *eventtype(XEvent*); +void printevent(XEvent*); |