Ethereal-dev: [ethereal-dev] [patch] code for dissecting X11 requests

Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.

From: "Christophe Tronche" <ch.tronche@xxxxxxxxxxxx>
Date: Sun, 11 Jun 2000 18:01:23 +0200
A bit long, sorry about that. I haven't tested it thoroughly on
big-endian architecture, but it should work.

-- 
Christophe Tronche	ch.tronche@xxxxxxxxxxxx
marchFIRST (France)	http://tronche.com/

diff -uN ethereal.current/AUTHORS ethereal.new/AUTHORS
--- ethereal.current/AUTHORS	Wed Jun  7 23:58:20 2000
+++ ethereal.new/AUTHORS	Sun Jun 11 15:04:46 2000
@@ -157,7 +157,9 @@
 }
 
 Christophe Tronche <ch.tronche@xxxxxxxxxxxx> {
+	http://tronche.com/
 	BPDU (spanning tree protocol) support
+	X11 requests support
 }
 
 Nathan Neulinger <nneul@xxxxxxx> {
diff -uN ethereal.current/Makefile.am ethereal.new/Makefile.am
--- ethereal.current/Makefile.am	Sun Jun 11 06:19:21 2000
+++ ethereal.new/Makefile.am	Sun Jun 11 16:13:19 2000
@@ -153,6 +151,7 @@
 	packet-vtp.c  \
 	packet-wccp.c \
 	packet-who.c  \
+	packet-x11.c   \
 	packet-x25.c   \
 	packet-yhoo.c  \
 	packet-ypbind.c \
@@ -231,6 +230,10 @@
 	packet-vines.h \
 	packet-vlan.h \
 	packet-vtp.h  \
+	packet-x11.h   \
+	packet-x11-declarations.h	\
+	packet-x11-register-info.h	\
+	packet-x11-keysym.h	\
 	packet-x25.h   \
 	packet-yhoo.h  \
 	packet-ypbind.h \
diff -uN ethereal.current/Makefile.nmake ethereal.new/Makefile.nmake
--- ethereal.current/Makefile.nmake	Sun Jun 11 08:49:36 2000
+++ ethereal.new/Makefile.nmake	Sun Jun 11 16:47:25 2000
@@ -139,6 +138,7 @@
 	packet-vtp.c  \
 	packet-wccp.c \
 	packet-who.c  \
+	packet-x11.c	\
 	packet-x25.c   \
 	packet-yhoo.c  \
 	packet-ypbind.c \
diff -uN ethereal.current/packet-x11-declarations.h ethereal.new/packet-x11-declarations.h
--- ethereal.current/packet-x11-declarations.h	Thu Jan  1 01:00:00 1970
+++ ethereal.new/packet-x11-declarations.h	Sun Jun 11 16:18:03 2000
@@ -0,0 +1,375 @@
+/* packet-x11-declarations.h
+ *
+ * $Id:$
+ *
+ * Put there so as to make packet-x11.c lighter. Generated from
+ * x11-list. See packet-x11.c
+ */
+
+static int hf_x11_acceleration_denominator = -1;
+static int hf_x11_acceleration_numerator = -1;
+static int hf_x11_access_mode = -1;
+static int hf_x11_address = -1;
+static int hf_x11_address_length = -1;
+static int hf_x11_alloc = -1;
+static int hf_x11_allow_events_mode = -1;
+static int hf_x11_allow_exposures = -1;
+static int hf_x11_arcs = -1;
+static int hf_x11_arc = -1;
+static int hf_x11_arc_x = -1;
+static int hf_x11_arc_y = -1;
+static int hf_x11_arc_width = -1;
+static int hf_x11_arc_height = -1;
+static int hf_x11_arc_angle1 = -1;
+static int hf_x11_arc_angle2 = -1;
+static int hf_x11_arc_mode = -1;
+static int hf_x11_atom = -1;
+static int hf_x11_auto_repeat_mode = -1;
+static int hf_x11_back_blue = -1;
+static int hf_x11_back_green = -1;
+static int hf_x11_back_red = -1;
+static int hf_x11_background = -1;
+static int hf_x11_background_pixel = -1;
+static int hf_x11_background_pixmap = -1;
+static int hf_x11_backing_pixel = -1;
+static int hf_x11_backing_planes = -1;
+static int hf_x11_backing_store = -1;
+static int hf_x11_bell_duration = -1;
+static int hf_x11_bell_percent = -1;
+static int hf_x11_bell_pitch = -1;
+static int hf_x11_bit_gravity = -1;
+static int hf_x11_bit_plane = -1;
+static int hf_x11_blue = -1;
+static int hf_x11_blues = -1;
+static int hf_x11_border_pixel = -1;
+static int hf_x11_border_pixmap = -1;
+static int hf_x11_border_width = -1;
+static int hf_x11_button = -1;
+static int hf_x11_cap_style = -1;
+static int hf_x11_change_host_mode = -1;
+static int hf_x11_cid = -1;
+static int hf_x11_class = -1;
+static int hf_x11_clip_mask = -1;
+static int hf_x11_clip_x_origin = -1;
+static int hf_x11_clip_y_origin = -1;
+static int hf_x11_close_down_mode = -1;
+static int hf_x11_cmap = -1;
+static int hf_x11_colormap = -1;
+static int hf_x11_color_items = -1;
+static int hf_x11_coloritem = -1;
+static int hf_x11_coloritem_pixel = -1;
+static int hf_x11_coloritem_red = -1;
+static int hf_x11_coloritem_green = -1;
+static int hf_x11_coloritem_blue = -1;
+static int hf_x11_coloritem_flags = -1;
+static int hf_x11_coloritem_flags_do_red = -1;
+static int hf_x11_coloritem_flags_do_green = -1;
+static int hf_x11_coloritem_flags_do_blue = -1;
+static int hf_x11_coloritem_flags_unused = -1;
+static int hf_x11_coloritem_unused = -1;
+static int hf_x11_colors = -1;
+static int hf_x11_configure_window_mask = -1;
+static int hf_x11_configure_window_mask_x = -1;
+static int hf_x11_configure_window_mask_y = -1;
+static int hf_x11_configure_window_mask_width = -1;
+static int hf_x11_configure_window_mask_height = -1;
+static int hf_x11_configure_window_mask_border_width = -1;
+static int hf_x11_configure_window_mask_sibling = -1;
+static int hf_x11_configure_window_mask_stack_mode = -1;
+static int hf_x11_confine_to = -1;
+static int hf_x11_contiguous = -1;
+static int hf_x11_coordinate_mode = -1;
+static int hf_x11_count = -1;
+static int hf_x11_cursor = -1;
+static int hf_x11_dash_offset = -1;
+static int hf_x11_dashes = -1;
+static int hf_x11_dashes_length = -1;
+static int hf_x11_do_acceleration = -1;
+static int hf_x11_do_threshold = -1;
+static int hf_x11_do_not_propagate_mask = -1;
+static int hf_x11_do_not_propagate_mask_KeyPress = -1;
+static int hf_x11_do_not_propagate_mask_KeyRelease = -1;
+static int hf_x11_do_not_propagate_mask_ButtonPress = -1;
+static int hf_x11_do_not_propagate_mask_ButtonRelease = -1;
+static int hf_x11_do_not_propagate_mask_PointerMotion = -1;
+static int hf_x11_do_not_propagate_mask_Button1Motion = -1;
+static int hf_x11_do_not_propagate_mask_Button2Motion = -1;
+static int hf_x11_do_not_propagate_mask_Button3Motion = -1;
+static int hf_x11_do_not_propagate_mask_Button4Motion = -1;
+static int hf_x11_do_not_propagate_mask_Button5Motion = -1;
+static int hf_x11_do_not_propagate_mask_ButtonMotion = -1;
+static int hf_x11_do_not_propagate_mask_erroneous_bits = -1;
+static int hf_x11_gc_dashes = -1;
+static int hf_x11_gc_value_mask = -1;
+static int hf_x11_gc_value_mask_function = -1;
+static int hf_x11_gc_value_mask_plane_mask = -1;
+static int hf_x11_gc_value_mask_foreground = -1;
+static int hf_x11_gc_value_mask_background = -1;
+static int hf_x11_gc_value_mask_line_width = -1;
+static int hf_x11_gc_value_mask_line_style = -1;
+static int hf_x11_gc_value_mask_cap_style = -1;
+static int hf_x11_gc_value_mask_join_style = -1;
+static int hf_x11_gc_value_mask_fill_style = -1;
+static int hf_x11_gc_value_mask_fill_rule = -1;
+static int hf_x11_gc_value_mask_tile = -1;
+static int hf_x11_gc_value_mask_stipple = -1;
+static int hf_x11_gc_value_mask_tile_stipple_x_origin = -1;
+static int hf_x11_gc_value_mask_tile_stipple_y_origin = -1;
+static int hf_x11_gc_value_mask_font = -1;
+static int hf_x11_gc_value_mask_subwindow_mode = -1;
+static int hf_x11_gc_value_mask_graphics_exposures = -1;
+static int hf_x11_gc_value_mask_clip_x_origin = -1;
+static int hf_x11_gc_value_mask_clip_y_origin = -1;
+static int hf_x11_gc_value_mask_clip_mask = -1;
+static int hf_x11_gc_value_mask_dash_offset = -1;
+static int hf_x11_gc_value_mask_gc_dashes = -1;
+static int hf_x11_gc_value_mask_arc_mode = -1;
+static int hf_x11_green = -1;
+static int hf_x11_greens = -1;
+static int hf_x11_data = -1;
+static int hf_x11_data_length = -1;
+static int hf_x11_delete = -1;
+static int hf_x11_delta = -1;
+static int hf_x11_depth = -1;
+static int hf_x11_direction = -1;
+static int hf_x11_drawable = -1;
+static int hf_x11_dst_drawable = -1;
+static int hf_x11_dst_gc = -1;
+static int hf_x11_dst_window = -1;
+static int hf_x11_dst_x = -1;
+static int hf_x11_dst_y = -1;
+static int hf_x11_event_mask = -1;
+static int hf_x11_event_mask_KeyPress = -1;
+static int hf_x11_event_mask_KeyRelease = -1;
+static int hf_x11_event_mask_ButtonPress = -1;
+static int hf_x11_event_mask_ButtonRelease = -1;
+static int hf_x11_event_mask_EnterWindow = -1;
+static int hf_x11_event_mask_LeaveWindow = -1;
+static int hf_x11_event_mask_PointerMotion = -1;
+static int hf_x11_event_mask_PointerMotionHint = -1;
+static int hf_x11_event_mask_Button1Motion = -1;
+static int hf_x11_event_mask_Button2Motion = -1;
+static int hf_x11_event_mask_Button3Motion = -1;
+static int hf_x11_event_mask_Button4Motion = -1;
+static int hf_x11_event_mask_Button5Motion = -1;
+static int hf_x11_event_mask_ButtonMotion = -1;
+static int hf_x11_event_mask_KeymapState = -1;
+static int hf_x11_event_mask_Exposure = -1;
+static int hf_x11_event_mask_VisibilityChange = -1;
+static int hf_x11_event_mask_StructureNotify = -1;
+static int hf_x11_event_mask_ResizeRedirect = -1;
+static int hf_x11_event_mask_SubstructureNotify = -1;
+static int hf_x11_event_mask_SubstructureRedirect = -1;
+static int hf_x11_event_mask_FocusChange = -1;
+static int hf_x11_event_mask_PropertyChange = -1;
+static int hf_x11_event_mask_ColormapChange = -1;
+static int hf_x11_event_mask_OwnerGrabButton = -1;
+static int hf_x11_event_mask_erroneous_bits = -1;
+static int hf_x11_exposures = -1;
+static int hf_x11_family = -1;
+static int hf_x11_fid = -1;
+static int hf_x11_fill_rule = -1;
+static int hf_x11_fill_style = -1;
+static int hf_x11_first_keycode = -1;
+static int hf_x11_focus = -1;
+static int hf_x11_font = -1;
+static int hf_x11_fore_blue = -1;
+static int hf_x11_fore_green = -1;
+static int hf_x11_fore_red = -1;
+static int hf_x11_foreground = -1;
+static int hf_x11_format = -1;
+static int hf_x11_function = -1;
+static int hf_x11_gc = -1;
+static int hf_x11_get_property_type = -1;
+static int hf_x11_grab_window = -1;
+static int hf_x11_graphics_exposures = -1;
+static int hf_x11_height = -1;
+static int hf_x11_image_format = -1;
+static int hf_x11_image_pixmap_format = -1;
+static int hf_x11_interval = -1;
+static int hf_x11_items = -1;
+static int hf_x11_join_style = -1;
+static int hf_x11_key = -1;
+static int hf_x11_key_click_percent = -1;
+static int hf_x11_keyboard_key = -1;
+static int hf_x11_keyboard_mode = -1;
+static int hf_x11_keyboard_value_mask = -1;
+static int hf_x11_keyboard_value_mask_key_click_percent = -1;
+static int hf_x11_keyboard_value_mask_bell_percent = -1;
+static int hf_x11_keyboard_value_mask_bell_pitch = -1;
+static int hf_x11_keyboard_value_mask_bell_duration = -1;
+static int hf_x11_keyboard_value_mask_led = -1;
+static int hf_x11_keyboard_value_mask_led_mode = -1;
+static int hf_x11_keyboard_value_mask_keyboard_key = -1;
+static int hf_x11_keyboard_value_mask_auto_repeat_mode = -1;
+static int hf_x11_keycode_count = -1;
+static int hf_x11_keycodes = -1;
+static int hf_x11_keycodes_item = -1;
+static int hf_x11_keycodes_per_modifier = -1;
+static int hf_x11_keysyms = -1;
+static int hf_x11_keysyms_item = -1;
+static int hf_x11_keysyms_item_keysym = -1;
+static int hf_x11_keysyms_per_keycode = -1;
+static int hf_x11_led = -1;
+static int hf_x11_led_mode = -1;
+static int hf_x11_left_pad = -1;
+static int hf_x11_line_style = -1;
+static int hf_x11_line_width = -1;
+static int hf_x11_long_length = -1;
+static int hf_x11_long_offset = -1;
+static int hf_x11_map = -1;
+static int hf_x11_map_length = -1;
+static int hf_x11_mask = -1;
+static int hf_x11_mask_char = -1;
+static int hf_x11_mask_font = -1;
+static int hf_x11_max_names = -1;
+static int hf_x11_mid = -1;
+static int hf_x11_mode = -1;
+static int hf_x11_modifiers_mask = -1;
+static int hf_x11_modifiers_mask_Shift = -1;
+static int hf_x11_modifiers_mask_Lock = -1;
+static int hf_x11_modifiers_mask_Control = -1;
+static int hf_x11_modifiers_mask_Mod1 = -1;
+static int hf_x11_modifiers_mask_Mod2 = -1;
+static int hf_x11_modifiers_mask_Mod3 = -1;
+static int hf_x11_modifiers_mask_Mod4 = -1;
+static int hf_x11_modifiers_mask_Mod5 = -1;
+static int hf_x11_modifiers_mask_AnyModifier = -1;
+static int hf_x11_modifiers_mask_erroneous_bits = -1;
+static int hf_x11_name = -1;
+static int hf_x11_name_length = -1;
+static int hf_x11_odd_length = -1;
+static int hf_x11_only_if_exists = -1;
+static int hf_x11_opcode = -1;
+static int hf_x11_ordering = -1;
+static int hf_x11_override_redirect = -1;
+static int hf_x11_owner = -1;
+static int hf_x11_owner_events = -1;
+static int hf_x11_parent = -1;
+static int hf_x11_path = -1;
+static int hf_x11_path_string = -1;
+static int hf_x11_pattern = -1;
+static int hf_x11_pattern_length = -1;
+static int hf_x11_percent = -1;
+static int hf_x11_pid = -1;
+static int hf_x11_pixel = -1;
+static int hf_x11_pixels = -1;
+static int hf_x11_pixels_item = -1;
+static int hf_x11_pixmap = -1;
+static int hf_x11_plane_mask = -1;
+static int hf_x11_planes = -1;
+static int hf_x11_point = -1;
+static int hf_x11_points = -1;
+static int hf_x11_point_x = -1;
+static int hf_x11_point_y = -1;
+static int hf_x11_pointer_event_mask = -1;
+static int hf_x11_pointer_event_mask_ButtonPress = -1;
+static int hf_x11_pointer_event_mask_ButtonRelease = -1;
+static int hf_x11_pointer_event_mask_EnterWindow = -1;
+static int hf_x11_pointer_event_mask_LeaveWindow = -1;
+static int hf_x11_pointer_event_mask_PointerMotion = -1;
+static int hf_x11_pointer_event_mask_PointerMotionHint = -1;
+static int hf_x11_pointer_event_mask_Button1Motion = -1;
+static int hf_x11_pointer_event_mask_Button2Motion = -1;
+static int hf_x11_pointer_event_mask_Button3Motion = -1;
+static int hf_x11_pointer_event_mask_Button4Motion = -1;
+static int hf_x11_pointer_event_mask_Button5Motion = -1;
+static int hf_x11_pointer_event_mask_ButtonMotion = -1;
+static int hf_x11_pointer_event_mask_KeymapState = -1;
+static int hf_x11_pointer_event_mask_erroneous_bits = -1;
+static int hf_x11_pointer_mode = -1;
+static int hf_x11_prefer_blanking = -1;
+static int hf_x11_properties = -1;
+static int hf_x11_properties_item = -1;
+static int hf_x11_property = -1;
+static int hf_x11_property_number = -1;
+static int hf_x11_rectangle_height = -1;
+static int hf_x11_rectangles = -1;
+static int hf_x11_rectangle = -1;
+static int hf_x11_rectangle_width = -1;
+static int hf_x11_rectangle_x = -1;
+static int hf_x11_rectangle_y = -1;
+static int hf_x11_red = -1;
+static int hf_x11_reds = -1;
+static int hf_x11_request = -1;
+static int hf_x11_requestor = -1;
+static int hf_x11_request_length = -1;
+static int hf_x11_resource = -1;
+static int hf_x11_revert_to = -1;
+static int hf_x11_save_set_mode = -1;
+static int hf_x11_save_under = -1;
+static int hf_x11_screen_saver_mode = -1;
+static int hf_x11_segment = -1;
+static int hf_x11_segments = -1;
+static int hf_x11_segment_x1 = -1;
+static int hf_x11_segment_x2 = -1;
+static int hf_x11_segment_y1 = -1;
+static int hf_x11_segment_y2 = -1;
+static int hf_x11_selection = -1;
+static int hf_x11_shape = -1;
+static int hf_x11_sibling = -1;
+static int hf_x11_source_pixmap = -1;
+static int hf_x11_source_font = -1;
+static int hf_x11_source_char = -1;
+static int hf_x11_src_cmap = -1;
+static int hf_x11_src_drawable = -1;
+static int hf_x11_src_gc = -1;
+static int hf_x11_src_height = -1;
+static int hf_x11_src_width = -1;
+static int hf_x11_src_window = -1;
+static int hf_x11_src_x = -1;
+static int hf_x11_src_y = -1;
+static int hf_x11_start = -1;
+static int hf_x11_stack_mode = -1;
+static int hf_x11_stipple = -1;
+static int hf_x11_stop = -1;
+static int hf_x11_str_number_in_path = -1;
+static int hf_x11_string = -1;
+static int hf_x11_string16 = -1;
+static int hf_x11_string16_bytes = -1;
+static int hf_x11_string_length = -1;
+static int hf_x11_subwindow_mode = -1;
+static int hf_x11_target = -1;
+static int hf_x11_textitem = -1;
+static int hf_x11_textitem_font = -1;
+static int hf_x11_textitem_string = -1;
+static int hf_x11_textitem_string_delta = -1;
+static int hf_x11_textitem_string_string8 = -1;
+static int hf_x11_textitem_string_string16 = -1;
+static int hf_x11_textitem_string_string16_bytes = -1;
+static int hf_x11_threshold = -1;
+static int hf_x11_tile = -1;
+static int hf_x11_tile_stipple_x_origin = -1;
+static int hf_x11_tile_stipple_y_origin = -1;
+static int hf_x11_time = -1;
+static int hf_x11_timeout = -1;
+static int hf_x11_type = -1;
+static int hf_x11_undecoded = -1;
+static int hf_x11_unused = -1;
+static int hf_x11_visual = -1;
+static int hf_x11_visualid = -1;
+static int hf_x11_warp_pointer_dst_window = -1;
+static int hf_x11_warp_pointer_src_window = -1;
+static int hf_x11_wid = -1;
+static int hf_x11_width = -1;
+static int hf_x11_win_gravity = -1;
+static int hf_x11_window = -1;
+static int hf_x11_window_class = -1;
+static int hf_x11_window_value_mask = -1;
+static int hf_x11_window_value_mask_background_pixmap = -1;
+static int hf_x11_window_value_mask_background_pixel = -1;
+static int hf_x11_window_value_mask_border_pixmap = -1;
+static int hf_x11_window_value_mask_border_pixel = -1;
+static int hf_x11_window_value_mask_bit_gravity = -1;
+static int hf_x11_window_value_mask_win_gravity = -1;
+static int hf_x11_window_value_mask_backing_store = -1;
+static int hf_x11_window_value_mask_backing_planes = -1;
+static int hf_x11_window_value_mask_backing_pixel = -1;
+static int hf_x11_window_value_mask_override_redirect = -1;
+static int hf_x11_window_value_mask_save_under = -1;
+static int hf_x11_window_value_mask_event_mask = -1;
+static int hf_x11_window_value_mask_do_not_propagate_mask = -1;
+static int hf_x11_window_value_mask_colormap = -1;
+static int hf_x11_window_value_mask_cursor = -1;
+static int hf_x11_x = -1;
+static int hf_x11_y = -1;
diff -uN ethereal.current/packet-x11-keysym.h ethereal.new/packet-x11-keysym.h
--- ethereal.current/packet-x11-keysym.h	Thu Jan  1 01:00:00 1970
+++ ethereal.new/packet-x11-keysym.h	Sun Jun 11 16:20:41 2000
@@ -0,0 +1,343 @@
+/* packet-x11-keysym.h
+ *
+ * $Id:$
+ *
+ * Put there so as to make packet-x11.c lighter. See packet-x11.c
+ */
+
+static const value_string keysym_vals_source[] = {
+      { 0, "NoSymbol" }, { 0x020, "space" }, { 0x021, "!" }, { 0x022, "\"" },
+      { 0x023, "#" }, { 0x024, "$" }, { 0x025, "%" }, { 0x026, "&" },
+      { 0x027, "'" }, { 0x028, "(" }, { 0x029, ")" }, { 0x02a, "*" },
+      { 0x02b, "+" }, { 0x02c, "," }, { 0x02d, "-" }, { 0x02e, "." },
+      { 0x02f, "/" }, { 0x030, "0" }, { 0x031, "1" }, { 0x032, "2" },
+      { 0x033, "3" }, { 0x034, "4" }, { 0x035, "5" }, { 0x036, "6" },
+      { 0x037, "7" }, { 0x038, "8" }, { 0x039, "9" }, { 0x03a, ":" },
+      { 0x03b, ";" }, { 0x03c, "<" }, { 0x03d, "=" }, { 0x03e, ">" },
+      { 0x03f, "?" }, { 0x040, "@" }, { 0x041, "A" }, { 0x042, "B" },
+      { 0x043, "C" }, { 0x044, "D" }, { 0x045, "E" }, { 0x046, "F" },
+      { 0x047, "G" }, { 0x048, "H" }, { 0x049, "I" }, { 0x04a, "J" },
+      { 0x04b, "K" }, { 0x04c, "L" }, { 0x04d, "M" }, { 0x04e, "N" },
+      { 0x04f, "O" }, { 0x050, "P" }, { 0x051, "Q" }, { 0x052, "R" },
+      { 0x053, "S" }, { 0x054, "T" }, { 0x055, "U" }, { 0x056, "V" },
+      { 0x057, "W" }, { 0x058, "X" }, { 0x059, "Y" }, { 0x05a, "Z" },
+      { 0x05b, "[" }, { 0x05c, "\\" }, { 0x05d, "]" }, { 0x05e, "^" },
+      { 0x05f, "_" }, { 0x060, "`" }, { 0x061, "a" }, { 0x062, "b" },
+      { 0x063, "c" }, { 0x064, "d" }, { 0x065, "e" }, { 0x066, "f" },
+      { 0x067, "g" }, { 0x068, "h" }, { 0x069, "i" }, { 0x06a, "j" },
+      { 0x06b, "k" }, { 0x06c, "l" }, { 0x06d, "m" }, { 0x06e, "n" },
+      { 0x06f, "o" }, { 0x070, "p" }, { 0x071, "q" }, { 0x072, "r" },
+      { 0x073, "s" }, { 0x074, "t" }, { 0x075, "u" }, { 0x076, "v" },
+      { 0x077, "w" }, { 0x078, "x" }, { 0x079, "y" }, { 0x07a, "z" },
+      { 0x07b, "{" }, { 0x07c, "|" }, { 0x07d, "}" }, { 0x07e, "~" },
+      { 0x0a0, "nobreakspace" }, { 0x0a1, "¡" }, { 0x0a2, "¢" }, { 0x0a3, "£" },
+      { 0x0a4, "¤" }, { 0x0a5, "¥" }, { 0x0a6, "¦" }, { 0x0a7, "§" },
+      { 0x0a8, "¨" }, { 0x0a9, "©" }, { 0x0aa, "ª" }, { 0x0ab, "«" },
+      { 0x0ac, "¬" }, { 0x0ad, "­" }, { 0x0ae, "®" }, { 0x0af, "¯" },
+      { 0x0b0, "°" }, { 0x0b1, "±" }, { 0x0b2, "²" }, { 0x0b3, "³" },
+      { 0x0b4, "´" }, { 0x0b5, "µ" }, { 0x0b6, "¶" }, { 0x0b7, "·" },
+      { 0x0b8, "¸" }, { 0x0b9, "¹" }, { 0x0ba, "º" }, { 0x0bb, "»" },
+      { 0x0bc, "¼" }, { 0x0bd, "½" }, { 0x0be, "¾" }, { 0x0bf, "¿" },
+      { 0x0c0, "À" }, { 0x0c1, "Á" }, { 0x0c2, "Â" }, { 0x0c3, "Ã" },
+      { 0x0c4, "Ä" }, { 0x0c5, "Å" }, { 0x0c6, "Æ" }, { 0x0c7, "Ç" },
+      { 0x0c8, "È" }, { 0x0c9, "É" }, { 0x0ca, "Ê" }, { 0x0cb, "Ë" },
+      { 0x0cc, "Ì" }, { 0x0cd, "Í" }, { 0x0ce, "Î" }, { 0x0cf, "Ï" },
+      { 0x0d0, "Ð" }, { 0x0d0, "Ñ" }, { 0x0d1, "Ñ" }, { 0x0d2, "Ò" },
+      { 0x0d3, "Ó" }, { 0x0d4, "Ô" }, { 0x0d5, "Õ" }, { 0x0d6, "Ö" },
+      { 0x0d7, "×" }, { 0x0d8, "Ø" }, { 0x0d9, "Ù" }, { 0x0da, "Ú" },
+      { 0x0db, "Û" }, { 0x0dc, "Ü" }, { 0x0dd, "Ý" }, { 0x0de, "Þ" },
+      { 0x0df, "ß" }, { 0x0e0, "à" }, { 0x0e1, "á" }, { 0x0e2, "â" },
+      { 0x0e3, "ã" }, { 0x0e4, "ä" }, { 0x0e5, "å" }, { 0x0e6, "æ" },
+      { 0x0e7, "ç" }, { 0x0e8, "è" }, { 0x0e9, "é" }, { 0x0ea, "ê" },
+      { 0x0eb, "ë" }, { 0x0ec, "ì" }, { 0x0ed, "í" }, { 0x0ee, "î" },
+      { 0x0ef, "ï" }, { 0x0f0, "ð" }, { 0x0f1, "ñ" }, { 0x0f2, "ò" },
+      { 0x0f3, "ó" }, { 0x0f4, "ô" }, { 0x0f5, "õ" }, { 0x0f6, "ö" },
+      { 0x0f7, "÷" }, { 0x0f8, "ø" }, { 0x0f9, "ù" }, { 0x0fa, "ú" },
+      { 0x0fb, "û" }, { 0x0fc, "ü" }, { 0x0fd, "ý" }, { 0x0fe, "þ" },
+      { 0x0ff, "ÿ" }, { 0x13bc, "OE" }, { 0x13bd, "oe" }, { 0x13be, "Ydiaeresis" },
+      { 0x1a1, "Aogonek" }, { 0x1a2, "breve" }, { 0x1a3, "Lstroke" }, { 0x1a5, "Lcaron" },
+      { 0x1a6, "Sacute" }, { 0x1a9, "Scaron" }, { 0x1aa, "Scedilla" }, { 0x1ab, "Tcaron" },
+      { 0x1ac, "Zacute" }, { 0x1ae, "Zcaron" }, { 0x1af, "Zabovedot" }, { 0x1b1, "aogonek" },
+      { 0x1b2, "ogonek" }, { 0x1b3, "lstroke" }, { 0x1b5, "lcaron" }, { 0x1b6, "sacute" },
+      { 0x1b7, "caron" }, { 0x1b9, "scaron" }, { 0x1ba, "scedilla" }, { 0x1bb, "tcaron" },
+      { 0x1bc, "zacute" }, { 0x1bd, "doubleacute" }, { 0x1be, "zcaron" }, { 0x1bf, "zabovedot" },
+      { 0x1c0, "Racute" }, { 0x1c3, "Abreve" }, { 0x1c5, "Lacute" }, { 0x1c6, "Cacute" },
+      { 0x1c8, "Ccaron" }, { 0x1ca, "Eogonek" }, { 0x1cc, "Ecaron" }, { 0x1cf, "Dcaron" },
+      { 0x1d0, "Dstroke" }, { 0x1d1, "Nacute" }, { 0x1d2, "Ncaron" }, { 0x1d5, "Odoubleacute" },
+      { 0x1d8, "Rcaron" }, { 0x1d9, "Uring" }, { 0x1db, "Udoubleacute" }, { 0x1de, "Tcedilla" },
+      { 0x1e0, "racute" }, { 0x1e3, "abreve" }, { 0x1e5, "lacute" }, { 0x1e6, "cacute" },
+      { 0x1e8, "ccaron" }, { 0x1ea, "eogonek" }, { 0x1ec, "ecaron" }, { 0x1ef, "dcaron" },
+      { 0x1f0, "dstroke" }, { 0x1f1, "nacute" }, { 0x1f2, "ncaron" }, { 0x1f5, "odoubleacute" },
+      { 0x1f8, "rcaron" }, { 0x1f9, "uring" }, { 0x1fb, "udoubleacute" }, { 0x1fe, "tcedilla" },
+      { 0x1ff, "abovedot" }, { 0x20a0, "EcuSign" }, { 0x20a1, "ColonSign" }, { 0x20a2, "CruzeiroSign" },
+      { 0x20a3, "FFrancSign" }, { 0x20a4, "LiraSign" }, { 0x20a5, "MillSign" }, { 0x20a6, "NairaSign" },
+      { 0x20a7, "PesetaSign" }, { 0x20a8, "RupeeSign" }, { 0x20a9, "WonSign" }, { 0x20aa, "NewSheqelSign" },
+      { 0x20ab, "DongSign" }, { 0x20ac, "EuroSign" }, { 0x2a1, "Hstroke" }, { 0x2a6, "Hcircumflex" },
+      { 0x2a9, "Iabovedot" }, { 0x2ab, "Gbreve" }, { 0x2ac, "Jcircumflex" }, { 0x2b1, "hstroke" },
+      { 0x2b6, "hcircumflex" }, { 0x2b9, "idotless" }, { 0x2bb, "gbreve" }, { 0x2bc, "jcircumflex" },
+      { 0x2c5, "Cabovedot" }, { 0x2c6, "Ccircumflex" }, { 0x2d5, "Gabovedot" }, { 0x2d8, "Gcircumflex" },
+      { 0x2dd, "Ubreve" }, { 0x2de, "Scircumflex" }, { 0x2e5, "cabovedot" }, { 0x2e6, "ccircumflex" },
+      { 0x2f5, "gabovedot" }, { 0x2f8, "gcircumflex" }, { 0x2fd, "ubreve" }, { 0x2fe, "scircumflex" },
+      { 0x3a2, "kappa" }, { 0x3a2, "kra" }, { 0x3a3, "Rcedilla" }, { 0x3a5, "Itilde" },
+      { 0x3a6, "Lcedilla" }, { 0x3aa, "Emacron" }, { 0x3ab, "Gcedilla" }, { 0x3ac, "Tslash" },
+      { 0x3b3, "rcedilla" }, { 0x3b5, "itilde" }, { 0x3b6, "lcedilla" }, { 0x3ba, "emacron" },
+      { 0x3bb, "gcedilla" }, { 0x3bc, "tslash" }, { 0x3bd, "ENG" }, { 0x3bf, "eng" },
+      { 0x3c0, "Amacron" }, { 0x3c7, "Iogonek" }, { 0x3cc, "Eabovedot" }, { 0x3cf, "Imacron" },
+      { 0x3d1, "Ncedilla" }, { 0x3d2, "Omacron" }, { 0x3d3, "Kcedilla" }, { 0x3d9, "Uogonek" },
+      { 0x3dd, "Utilde" }, { 0x3de, "Umacron" }, { 0x3e0, "amacron" }, { 0x3e7, "iogonek" },
+      { 0x3ec, "eabovedot" }, { 0x3ef, "imacron" }, { 0x3f1, "ncedilla" }, { 0x3f2, "omacron" },
+      { 0x3f3, "kcedilla" }, { 0x3f9, "uogonek" }, { 0x3fd, "utilde" }, { 0x3fe, "umacron" },
+      { 0x47e, "overline" }, { 0x4a1, "kana_fullstop" }, { 0x4a2, "kana_openingbracket" }, { 0x4a3, "kana_closingbracket" },
+      { 0x4a4, "kana_comma" }, { 0x4a5, "kana_conjunctive" }, { 0x4a5, "kana_middledot" }, { 0x4a6, "kana_WO" },
+      { 0x4a7, "kana_a" }, { 0x4a8, "kana_i" }, { 0x4a9, "kana_u" }, { 0x4aa, "kana_e" },
+      { 0x4ab, "kana_o" }, { 0x4ac, "kana_ya" }, { 0x4ad, "kana_yu" }, { 0x4ae, "kana_yo" },
+      { 0x4af, "kana_tsu" }, { 0x4af, "kana_tu" }, { 0x4b0, "prolongedsound" }, { 0x4b1, "kana_A" },
+      { 0x4b2, "kana_I" }, { 0x4b3, "kana_U" }, { 0x4b4, "kana_E" }, { 0x4b5, "kana_O" },
+      { 0x4b6, "kana_KA" }, { 0x4b7, "kana_KI" }, { 0x4b8, "kana_KU" }, { 0x4b9, "kana_KE" },
+      { 0x4ba, "kana_KO" }, { 0x4bb, "kana_SA" }, { 0x4bc, "kana_SHI" }, { 0x4bd, "kana_SU" },
+      { 0x4be, "kana_SE" }, { 0x4bf, "kana_SO" }, { 0x4c0, "kana_TA" }, { 0x4c1, "kana_CHI" },
+      { 0x4c1, "kana_TI" }, { 0x4c2, "kana_TSU" }, { 0x4c2, "kana_TU" }, { 0x4c3, "kana_TE" },
+      { 0x4c4, "kana_TO" }, { 0x4c5, "kana_NA" }, { 0x4c6, "kana_NI" }, { 0x4c7, "kana_NU" },
+      { 0x4c8, "kana_NE" }, { 0x4c9, "kana_NO" }, { 0x4ca, "kana_HA" }, { 0x4cb, "kana_HI" },
+      { 0x4cc, "kana_FU" }, { 0x4cc, "kana_HU" }, { 0x4cd, "kana_HE" }, { 0x4ce, "kana_HO" },
+      { 0x4cf, "kana_MA" }, { 0x4d0, "kana_MI" }, { 0x4d1, "kana_MU" }, { 0x4d2, "kana_ME" },
+      { 0x4d3, "kana_MO" }, { 0x4d4, "kana_YA" }, { 0x4d5, "kana_YU" }, { 0x4d6, "kana_YO" },
+      { 0x4d7, "kana_RA" }, { 0x4d8, "kana_RI" }, { 0x4d9, "kana_RU" }, { 0x4da, "kana_RE" },
+      { 0x4db, "kana_RO" }, { 0x4dc, "kana_WA" }, { 0x4dd, "kana_N" }, { 0x4de, "voicedsound" },
+      { 0x4df, "semivoicedsound" }, { 0x5ac, "Arabic_comma" }, { 0x5bb, "Arabic_semicolon" }, { 0x5bf, "Arabic_question_mark" },
+      { 0x5c1, "Arabic_hamza" }, { 0x5c2, "Arabic_maddaonalef" }, { 0x5c3, "Arabic_hamzaonalef" }, { 0x5c4, "Arabic_hamzaonwaw" },
+      { 0x5c5, "Arabic_hamzaunderalef" }, { 0x5c6, "Arabic_hamzaonyeh" }, { 0x5c7, "Arabic_alef" }, { 0x5c8, "Arabic_beh" },
+      { 0x5c9, "Arabic_tehmarbuta" }, { 0x5ca, "Arabic_teh" }, { 0x5cb, "Arabic_theh" }, { 0x5cc, "Arabic_jeem" },
+      { 0x5cd, "Arabic_hah" }, { 0x5ce, "Arabic_khah" }, { 0x5cf, "Arabic_dal" }, { 0x5d0, "Arabic_thal" },
+      { 0x5d1, "Arabic_ra" }, { 0x5d2, "Arabic_zain" }, { 0x5d3, "Arabic_seen" }, { 0x5d4, "Arabic_sheen" },
+      { 0x5d5, "Arabic_sad" }, { 0x5d6, "Arabic_dad" }, { 0x5d7, "Arabic_tah" }, { 0x5d8, "Arabic_zah" },
+      { 0x5d9, "Arabic_ain" }, { 0x5da, "Arabic_ghain" }, { 0x5e0, "Arabic_tatweel" }, { 0x5e1, "Arabic_feh" },
+      { 0x5e2, "Arabic_qaf" }, { 0x5e3, "Arabic_kaf" }, { 0x5e4, "Arabic_lam" }, { 0x5e5, "Arabic_meem" },
+      { 0x5e6, "Arabic_noon" }, { 0x5e7, "Arabic_ha" }, { 0x5e7, "Arabic_heh" }, { 0x5e8, "Arabic_waw" },
+      { 0x5e9, "Arabic_alefmaksura" }, { 0x5ea, "Arabic_yeh" }, { 0x5eb, "Arabic_fathatan" }, { 0x5ec, "Arabic_dammatan" },
+      { 0x5ed, "Arabic_kasratan" }, { 0x5ee, "Arabic_fatha" }, { 0x5ef, "Arabic_damma" }, { 0x5f0, "Arabic_kasra" },
+      { 0x5f1, "Arabic_shadda" }, { 0x5f2, "Arabic_sukun" }, { 0x6a1, "Serbian_dje" }, { 0x6a2, "Macedonia_gje" },
+      { 0x6a3, "Cyrillic_io" }, { 0x6a4, "Ukrainian_ie" }, { 0x6a4, "Ukranian_je" }, { 0x6a5, "Macedonia_dse" },
+      { 0x6a6, "Ukrainian_i" }, { 0x6a6, "Ukranian_i" }, { 0x6a7, "Ukrainian_yi" }, { 0x6a7, "Ukranian_yi" },
+      { 0x6a8, "Cyrillic_je" }, { 0x6a8, "Serbian_je" }, { 0x6a9, "Cyrillic_lje" }, { 0x6a9, "Serbian_lje" },
+      { 0x6aa, "Cyrillic_nje" }, { 0x6aa, "Serbian_nje" }, { 0x6ab, "Serbian_tshe" }, { 0x6ac, "Macedonia_kje" },
+      { 0x6ae, "Byelorussian_shortu" }, { 0x6af, "Cyrillic_dzhe" }, { 0x6af, "Serbian_dze" }, { 0x6b0, "numerosign" },
+      { 0x6b1, "Serbian_DJE" }, { 0x6b2, "Macedonia_GJE" }, { 0x6b3, "Cyrillic_IO" }, { 0x6b4, "Ukrainian_IE" },
+      { 0x6b4, "Ukranian_JE" }, { 0x6b5, "Macedonia_DSE" }, { 0x6b6, "Ukrainian_I" }, { 0x6b6, "Ukranian_I" },
+      { 0x6b7, "Ukrainian_YI" }, { 0x6b7, "Ukranian_YI" }, { 0x6b8, "Cyrillic_JE" }, { 0x6b8, "Serbian_JE" },
+      { 0x6b9, "Cyrillic_LJE" }, { 0x6b9, "Serbian_LJE" }, { 0x6ba, "Cyrillic_NJE" }, { 0x6ba, "Serbian_NJE" },
+      { 0x6bb, "Serbian_TSHE" }, { 0x6bc, "Macedonia_KJE" }, { 0x6be, "Byelorussian_SHORTU" }, { 0x6bf, "Cyrillic_DZHE" },
+      { 0x6bf, "Serbian_DZE" }, { 0x6c0, "Cyrillic_yu" }, { 0x6c1, "Cyrillic_a" }, { 0x6c2, "Cyrillic_be" },
+      { 0x6c3, "Cyrillic_tse" }, { 0x6c4, "Cyrillic_de" }, { 0x6c5, "Cyrillic_ie" }, { 0x6c6, "Cyrillic_ef" },
+      { 0x6c7, "Cyrillic_ghe" }, { 0x6c8, "Cyrillic_ha" }, { 0x6c9, "Cyrillic_i" }, { 0x6ca, "Cyrillic_shorti" },
+      { 0x6cb, "Cyrillic_ka" }, { 0x6cc, "Cyrillic_el" }, { 0x6cd, "Cyrillic_em" }, { 0x6ce, "Cyrillic_en" },
+      { 0x6cf, "Cyrillic_o" }, { 0x6d0, "Cyrillic_pe" }, { 0x6d1, "Cyrillic_ya" }, { 0x6d2, "Cyrillic_er" },
+      { 0x6d3, "Cyrillic_es" }, { 0x6d4, "Cyrillic_te" }, { 0x6d5, "Cyrillic_u" }, { 0x6d6, "Cyrillic_zhe" },
+      { 0x6d7, "Cyrillic_ve" }, { 0x6d8, "Cyrillic_softsign" }, { 0x6d9, "Cyrillic_yeru" }, { 0x6da, "Cyrillic_ze" },
+      { 0x6db, "Cyrillic_sha" }, { 0x6dc, "Cyrillic_e" }, { 0x6dd, "Cyrillic_shcha" }, { 0x6de, "Cyrillic_che" },
+      { 0x6df, "Cyrillic_hardsign" }, { 0x6e0, "Cyrillic_YU" }, { 0x6e1, "Cyrillic_A" }, { 0x6e2, "Cyrillic_BE" },
+      { 0x6e3, "Cyrillic_TSE" }, { 0x6e4, "Cyrillic_DE" }, { 0x6e5, "Cyrillic_IE" }, { 0x6e6, "Cyrillic_EF" },
+      { 0x6e7, "Cyrillic_GHE" }, { 0x6e8, "Cyrillic_HA" }, { 0x6e9, "Cyrillic_I" }, { 0x6ea, "Cyrillic_SHORTI" },
+      { 0x6eb, "Cyrillic_KA" }, { 0x6ec, "Cyrillic_EL" }, { 0x6ed, "Cyrillic_EM" }, { 0x6ee, "Cyrillic_EN" },
+      { 0x6ef, "Cyrillic_O" }, { 0x6f0, "Cyrillic_PE" }, { 0x6f1, "Cyrillic_YA" }, { 0x6f2, "Cyrillic_ER" },
+      { 0x6f3, "Cyrillic_ES" }, { 0x6f4, "Cyrillic_TE" }, { 0x6f5, "Cyrillic_U" }, { 0x6f6, "Cyrillic_ZHE" },
+      { 0x6f7, "Cyrillic_VE" }, { 0x6f8, "Cyrillic_SOFTSIGN" }, { 0x6f9, "Cyrillic_YERU" }, { 0x6fa, "Cyrillic_ZE" },
+      { 0x6fb, "Cyrillic_SHA" }, { 0x6fc, "Cyrillic_E" }, { 0x6fd, "Cyrillic_SHCHA" }, { 0x6fe, "Cyrillic_CHE" },
+      { 0x6ff, "Cyrillic_HARDSIGN" }, { 0x7a1, "Greek_ALPHAaccent" }, { 0x7a2, "Greek_EPSILONaccent" }, { 0x7a3, "Greek_ETAaccent" },
+      { 0x7a4, "Greek_IOTAaccent" }, { 0x7a5, "Greek_IOTAdiaeresis" }, { 0x7a7, "Greek_OMICRONaccent" }, { 0x7a8, "Greek_UPSILONaccent" },
+      { 0x7a9, "Greek_UPSILONdieresis" }, { 0x7ab, "Greek_OMEGAaccent" }, { 0x7ae, "Greek_accentdieresis" }, { 0x7af, "Greek_horizbar" },
+      { 0x7b1, "Greek_alphaaccent" }, { 0x7b2, "Greek_epsilonaccent" }, { 0x7b3, "Greek_etaaccent" }, { 0x7b4, "Greek_iotaaccent" },
+      { 0x7b5, "Greek_iotadieresis" }, { 0x7b6, "Greek_iotaaccentdieresis" }, { 0x7b7, "Greek_omicronaccent" }, { 0x7b8, "Greek_upsilonaccent" },
+      { 0x7b9, "Greek_upsilondieresis" }, { 0x7ba, "Greek_upsilonaccentdieresis" }, { 0x7bb, "Greek_omegaaccent" }, { 0x7c1, "Greek_ALPHA" },
+      { 0x7c2, "Greek_BETA" }, { 0x7c3, "Greek_GAMMA" }, { 0x7c4, "Greek_DELTA" }, { 0x7c5, "Greek_EPSILON" },
+      { 0x7c6, "Greek_ZETA" }, { 0x7c7, "Greek_ETA" }, { 0x7c8, "Greek_THETA" }, { 0x7c9, "Greek_IOTA" },
+      { 0x7ca, "Greek_KAPPA" }, { 0x7cb, "Greek_LAMBDA" }, { 0x7cb, "Greek_LAMDA" }, { 0x7cc, "Greek_MU" },
+      { 0x7cd, "Greek_NU" }, { 0x7ce, "Greek_XI" }, { 0x7cf, "Greek_OMICRON" }, { 0x7d0, "Greek_PI" },
+      { 0x7d1, "Greek_RHO" }, { 0x7d2, "Greek_SIGMA" }, { 0x7d4, "Greek_TAU" }, { 0x7d5, "Greek_UPSILON" },
+      { 0x7d6, "Greek_PHI" }, { 0x7d7, "Greek_CHI" }, { 0x7d8, "Greek_PSI" }, { 0x7d9, "Greek_OMEGA" },
+      { 0x7e1, "Greek_alpha" }, { 0x7e2, "Greek_beta" }, { 0x7e3, "Greek_gamma" }, { 0x7e4, "Greek_delta" },
+      { 0x7e5, "Greek_epsilon" }, { 0x7e6, "Greek_zeta" }, { 0x7e7, "Greek_eta" }, { 0x7e8, "Greek_theta" },
+      { 0x7e9, "Greek_iota" }, { 0x7ea, "Greek_kappa" }, { 0x7eb, "Greek_lambda" }, { 0x7eb, "Greek_lamda" },
+      { 0x7ec, "Greek_mu" }, { 0x7ed, "Greek_nu" }, { 0x7ee, "Greek_xi" }, { 0x7ef, "Greek_omicron" },
+      { 0x7f0, "Greek_pi" }, { 0x7f1, "Greek_rho" }, { 0x7f2, "Greek_sigma" }, { 0x7f3, "Greek_finalsmallsigma" },
+      { 0x7f4, "Greek_tau" }, { 0x7f5, "Greek_upsilon" }, { 0x7f6, "Greek_phi" }, { 0x7f7, "Greek_chi" },
+      { 0x7f8, "Greek_psi" }, { 0x7f9, "Greek_omega" }, { 0x8a1, "leftradical" }, { 0x8a2, "topleftradical" },
+      { 0x8a3, "horizconnector" }, { 0x8a4, "topintegral" }, { 0x8a5, "botintegral" }, { 0x8a6, "vertconnector" },
+      { 0x8a7, "topleftsqbracket" }, { 0x8a8, "botleftsqbracket" }, { 0x8a9, "toprightsqbracket" }, { 0x8aa, "botrightsqbracket" },
+      { 0x8ab, "topleftparens" }, { 0x8ac, "botleftparens" }, { 0x8ad, "toprightparens" }, { 0x8ae, "botrightparens" },
+      { 0x8af, "leftmiddlecurlybrace" }, { 0x8b0, "rightmiddlecurlybrace" }, { 0x8b1, "topleftsummation" }, { 0x8b2, "botleftsummation" },
+      { 0x8b3, "topvertsummationconnector" }, { 0x8b4, "botvertsummationconnector" }, { 0x8b5, "toprightsummation" }, { 0x8b6, "botrightsummation" },
+      { 0x8b7, "rightmiddlesummation" }, { 0x8bc, "lessthanequal" }, { 0x8bd, "notequal" }, { 0x8be, "greaterthanequal" },
+      { 0x8bf, "integral" }, { 0x8c0, "therefore" }, { 0x8c1, "variation" }, { 0x8c2, "infinity" },
+      { 0x8c5, "nabla" }, { 0x8c8, "approximate" }, { 0x8c9, "similarequal" }, { 0x8cd, "ifonlyif" },
+      { 0x8ce, "implies" }, { 0x8cf, "identical" }, { 0x8d6, "radical" }, { 0x8da, "includedin" },
+      { 0x8db, "includes" }, { 0x8dc, "intersection" }, { 0x8dd, "union" }, { 0x8de, "logicaland" },
+      { 0x8df, "logicalor" }, { 0x8ef, "partialderivative" }, { 0x8f6, "function" }, { 0x8fb, "leftarrow" },
+      { 0x8fc, "uparrow" }, { 0x8fd, "rightarrow" }, { 0x8fe, "downarrow" }, { 0x9df, "blank" },
+      { 0x9e0, "soliddiamond" }, { 0x9e1, "checkerboard" }, { 0x9e2, "ht" }, { 0x9e3, "ff" },
+      { 0x9e4, "cr" }, { 0x9e5, "lf" }, { 0x9e8, "nl" }, { 0x9e9, "vt" },
+      { 0x9ea, "lowrightcorner" }, { 0x9eb, "uprightcorner" }, { 0x9ec, "upleftcorner" }, { 0x9ed, "lowleftcorner" },
+      { 0x9ee, "crossinglines" }, { 0x9ef, "horizlinescan1" }, { 0x9f0, "horizlinescan3" }, { 0x9f1, "horizlinescan5" },
+      { 0x9f2, "horizlinescan7" }, { 0x9f3, "horizlinescan9" }, { 0x9f4, "leftt" }, { 0x9f5, "rightt" },
+      { 0x9f6, "bott" }, { 0x9f7, "topt" }, { 0x9f8, "vertbar" }, { 0xaa1, "emspace" },
+      { 0xaa2, "enspace" }, { 0xaa3, "em3space" }, { 0xaa4, "em4space" }, { 0xaa5, "digitspace" },
+      { 0xaa6, "punctspace" }, { 0xaa7, "thinspace" }, { 0xaa8, "hairspace" }, { 0xaa9, "emdash" },
+      { 0xaaa, "endash" }, { 0xaac, "signifblank" }, { 0xaae, "ellipsis" }, { 0xaaf, "doubbaselinedot" },
+      { 0xab0, "onethird" }, { 0xab1, "twothirds" }, { 0xab2, "onefifth" }, { 0xab3, "twofifths" },
+      { 0xab4, "threefifths" }, { 0xab5, "fourfifths" }, { 0xab6, "onesixth" }, { 0xab7, "fivesixths" },
+      { 0xab8, "careof" }, { 0xabb, "figdash" }, { 0xabc, "leftanglebracket" }, { 0xabd, "decimalpoint" },
+      { 0xabe, "rightanglebracket" }, { 0xabf, "marker" }, { 0xac3, "oneeighth" }, { 0xac4, "threeeighths" },
+      { 0xac5, "fiveeighths" }, { 0xac6, "seveneighths" }, { 0xac9, "trademark" }, { 0xaca, "signaturemark" },
+      { 0xacb, "trademarkincircle" }, { 0xacc, "leftopentriangle" }, { 0xacd, "rightopentriangle" }, { 0xace, "emopencircle" },
+      { 0xacf, "emopenrectangle" }, { 0xad0, "leftsinglequotemark" }, { 0xad1, "rightsinglequotemark" }, { 0xad2, "leftdoublequotemark" },
+      { 0xad3, "rightdoublequotemark" }, { 0xad4, "prescription" }, { 0xad6, "minutes" }, { 0xad7, "seconds" },
+      { 0xad9, "latincross" }, { 0xada, "hexagram" }, { 0xadb, "filledrectbullet" }, { 0xadc, "filledlefttribullet" },
+      { 0xadd, "filledrighttribullet" }, { 0xade, "emfilledcircle" }, { 0xadf, "emfilledrect" }, { 0xae0, "enopencircbullet" },
+      { 0xae1, "enopensquarebullet" }, { 0xae2, "openrectbullet" }, { 0xae3, "opentribulletup" }, { 0xae4, "opentribulletdown" },
+      { 0xae5, "openstar" }, { 0xae6, "enfilledcircbullet" }, { 0xae7, "enfilledsqbullet" }, { 0xae8, "filledtribulletup" },
+      { 0xae9, "filledtribulletdown" }, { 0xaea, "leftpointer" }, { 0xaeb, "rightpointer" }, { 0xaec, "club" },
+      { 0xaed, "diamond" }, { 0xaee, "heart" }, { 0xaf0, "maltesecross" }, { 0xaf1, "dagger" },
+      { 0xaf2, "doubledagger" }, { 0xaf3, "checkmark" }, { 0xaf4, "ballotcross" }, { 0xaf5, "musicalsharp" },
+      { 0xaf6, "musicalflat" }, { 0xaf7, "malesymbol" }, { 0xaf8, "femalesymbol" }, { 0xaf9, "telephone" },
+      { 0xafa, "telephonerecorder" }, { 0xafb, "phonographcopyright" }, { 0xafc, "caret" }, { 0xafd, "singlelowquotemark" },
+      { 0xafe, "doublelowquotemark" }, { 0xaff, "cursor" }, { 0xba3, "leftcaret" }, { 0xba6, "rightcaret" },
+      { 0xba8, "downcaret" }, { 0xba9, "upcaret" }, { 0xbc0, "overbar" }, { 0xbc2, "downtack" },
+      { 0xbc3, "upshoe" }, { 0xbc4, "downstile" }, { 0xbc6, "underbar" }, { 0xbca, "jot" },
+      { 0xbcc, "quad" }, { 0xbce, "uptack" }, { 0xbcf, "circle" }, { 0xbd3, "upstile" },
+      { 0xbd6, "downshoe" }, { 0xbd8, "rightshoe" }, { 0xbda, "leftshoe" }, { 0xbdc, "lefttack" },
+      { 0xbfc, "righttack" }, { 0xcdf, "hebrew_doublelowline" }, { 0xce0, "hebrew_aleph" }, { 0xce1, "hebrew_bet" },
+      { 0xce1, "hebrew_beth" }, { 0xce2, "hebrew_gimel" }, { 0xce2, "hebrew_gimmel" }, { 0xce3, "hebrew_dalet" },
+      { 0xce3, "hebrew_daleth" }, { 0xce4, "hebrew_he" }, { 0xce5, "hebrew_waw" }, { 0xce6, "hebrew_zain" },
+      { 0xce6, "hebrew_zayin" }, { 0xce7, "hebrew_chet" }, { 0xce7, "hebrew_het" }, { 0xce8, "hebrew_tet" },
+      { 0xce8, "hebrew_teth" }, { 0xce9, "hebrew_yod" }, { 0xcea, "hebrew_finalkaph" }, { 0xceb, "hebrew_kaph" },
+      { 0xcec, "hebrew_lamed" }, { 0xced, "hebrew_finalmem" }, { 0xcee, "hebrew_mem" }, { 0xcef, "hebrew_finalnun" },
+      { 0xcf0, "hebrew_nun" }, { 0xcf1, "hebrew_samech" }, { 0xcf1, "hebrew_samekh" }, { 0xcf2, "hebrew_ayin" },
+      { 0xcf3, "hebrew_finalpe" }, { 0xcf4, "hebrew_pe" }, { 0xcf5, "hebrew_finalzade" }, { 0xcf5, "hebrew_finalzadi" },
+      { 0xcf6, "hebrew_zade" }, { 0xcf6, "hebrew_zadi" }, { 0xcf7, "hebrew_kuf" }, { 0xcf7, "hebrew_qoph" },
+      { 0xcf8, "hebrew_resh" }, { 0xcf9, "hebrew_shin" }, { 0xcfa, "hebrew_taf" }, { 0xcfa, "hebrew_taw" },
+      { 0xda1, "Thai_kokai" }, { 0xda2, "Thai_khokhai" }, { 0xda3, "Thai_khokhuat" }, { 0xda4, "Thai_khokhwai" },
+      { 0xda5, "Thai_khokhon" }, { 0xda6, "Thai_khorakhang" }, { 0xda7, "Thai_ngongu" }, { 0xda8, "Thai_chochan" },
+      { 0xda9, "Thai_choching" }, { 0xdaa, "Thai_chochang" }, { 0xdab, "Thai_soso" }, { 0xdac, "Thai_chochoe" },
+      { 0xdad, "Thai_yoying" }, { 0xdae, "Thai_dochada" }, { 0xdaf, "Thai_topatak" }, { 0xdb0, "Thai_thothan" },
+      { 0xdb1, "Thai_thonangmontho" }, { 0xdb2, "Thai_thophuthao" }, { 0xdb3, "Thai_nonen" }, { 0xdb4, "Thai_dodek" },
+      { 0xdb5, "Thai_totao" }, { 0xdb6, "Thai_thothung" }, { 0xdb7, "Thai_thothahan" }, { 0xdb8, "Thai_thothong" },
+      { 0xdb9, "Thai_nonu" }, { 0xdba, "Thai_bobaimai" }, { 0xdbb, "Thai_popla" }, { 0xdbc, "Thai_phophung" },
+      { 0xdbd, "Thai_fofa" }, { 0xdbe, "Thai_phophan" }, { 0xdbf, "Thai_fofan" }, { 0xdc0, "Thai_phosamphao" },
+      { 0xdc1, "Thai_moma" }, { 0xdc2, "Thai_yoyak" }, { 0xdc3, "Thai_rorua" }, { 0xdc4, "Thai_ru" },
+      { 0xdc5, "Thai_loling" }, { 0xdc6, "Thai_lu" }, { 0xdc7, "Thai_wowaen" }, { 0xdc8, "Thai_sosala" },
+      { 0xdc9, "Thai_sorusi" }, { 0xdca, "Thai_sosua" }, { 0xdcb, "Thai_hohip" }, { 0xdcc, "Thai_lochula" },
+      { 0xdcd, "Thai_oang" }, { 0xdce, "Thai_honokhuk" }, { 0xdcf, "Thai_paiyannoi" }, { 0xdd0, "Thai_saraa" },
+      { 0xdd1, "Thai_maihanakat" }, { 0xdd2, "Thai_saraaa" }, { 0xdd3, "Thai_saraam" }, { 0xdd4, "Thai_sarai" },
+      { 0xdd5, "Thai_saraii" }, { 0xdd6, "Thai_saraue" }, { 0xdd7, "Thai_sarauee" }, { 0xdd8, "Thai_sarau" },
+      { 0xdd9, "Thai_sarauu" }, { 0xdda, "Thai_phinthu" }, { 0xdde, "Thai_maihanakat_maitho" }, { 0xddf, "Thai_baht" },
+      { 0xde0, "Thai_sarae" }, { 0xde1, "Thai_saraae" }, { 0xde2, "Thai_sarao" }, { 0xde3, "Thai_saraaimaimuan" },
+      { 0xde4, "Thai_saraaimaimalai" }, { 0xde5, "Thai_lakkhangyao" }, { 0xde6, "Thai_maiyamok" }, { 0xde7, "Thai_maitaikhu" },
+      { 0xde8, "Thai_maiek" }, { 0xde9, "Thai_maitho" }, { 0xdea, "Thai_maitri" }, { 0xdeb, "Thai_maichattawa" },
+      { 0xdec, "Thai_thanthakhat" }, { 0xded, "Thai_nikhahit" }, { 0xdf0, "Thai_leksun" }, { 0xdf1, "Thai_leknung" },
+      { 0xdf2, "Thai_leksong" }, { 0xdf3, "Thai_leksam" }, { 0xdf4, "Thai_leksi" }, { 0xdf5, "Thai_lekha" },
+      { 0xdf6, "Thai_lekhok" }, { 0xdf7, "Thai_lekchet" }, { 0xdf8, "Thai_lekpaet" }, { 0xdf9, "Thai_lekkao" },
+      { 0xea1, "Hangul_Kiyeog" }, { 0xea2, "Hangul_SsangKiyeog" }, { 0xea3, "Hangul_KiyeogSios" }, { 0xea4, "Hangul_Nieun" },
+      { 0xea5, "Hangul_NieunJieuj" }, { 0xea6, "Hangul_NieunHieuh" }, { 0xea7, "Hangul_Dikeud" }, { 0xea8, "Hangul_SsangDikeud" },
+      { 0xea9, "Hangul_Rieul" }, { 0xeaa, "Hangul_RieulKiyeog" }, { 0xeab, "Hangul_RieulMieum" }, { 0xeac, "Hangul_RieulPieub" },
+      { 0xead, "Hangul_RieulSios" }, { 0xeae, "Hangul_RieulTieut" }, { 0xeaf, "Hangul_RieulPhieuf" }, { 0xeb0, "Hangul_RieulHieuh" },
+      { 0xeb1, "Hangul_Mieum" }, { 0xeb2, "Hangul_Pieub" }, { 0xeb3, "Hangul_SsangPieub" }, { 0xeb4, "Hangul_PieubSios" },
+      { 0xeb5, "Hangul_Sios" }, { 0xeb6, "Hangul_SsangSios" }, { 0xeb7, "Hangul_Ieung" }, { 0xeb8, "Hangul_Jieuj" },
+      { 0xeb9, "Hangul_SsangJieuj" }, { 0xeba, "Hangul_Cieuc" }, { 0xebb, "Hangul_Khieuq" }, { 0xebc, "Hangul_Tieut" },
+      { 0xebd, "Hangul_Phieuf" }, { 0xebe, "Hangul_Hieuh" }, { 0xebf, "Hangul_A" }, { 0xec0, "Hangul_AE" },
+      { 0xec1, "Hangul_YA" }, { 0xec2, "Hangul_YAE" }, { 0xec3, "Hangul_EO" }, { 0xec4, "Hangul_E" },
+      { 0xec5, "Hangul_YEO" }, { 0xec6, "Hangul_YE" }, { 0xec7, "Hangul_O" }, { 0xec8, "Hangul_WA" },
+      { 0xec9, "Hangul_WAE" }, { 0xeca, "Hangul_OE" }, { 0xecb, "Hangul_YO" }, { 0xecc, "Hangul_U" },
+      { 0xecd, "Hangul_WEO" }, { 0xece, "Hangul_WE" }, { 0xecf, "Hangul_WI" }, { 0xed0, "Hangul_YU" },
+      { 0xed1, "Hangul_EU" }, { 0xed2, "Hangul_YI" }, { 0xed3, "Hangul_I" }, { 0xed4, "Hangul_J_Kiyeog" },
+      { 0xed5, "Hangul_J_SsangKiyeog" }, { 0xed6, "Hangul_J_KiyeogSios" }, { 0xed7, "Hangul_J_Nieun" }, { 0xed8, "Hangul_J_NieunJieuj" },
+      { 0xed9, "Hangul_J_NieunHieuh" }, { 0xeda, "Hangul_J_Dikeud" }, { 0xedb, "Hangul_J_Rieul" }, { 0xedc, "Hangul_J_RieulKiyeog" },
+      { 0xedd, "Hangul_J_RieulMieum" }, { 0xede, "Hangul_J_RieulPieub" }, { 0xedf, "Hangul_J_RieulSios" }, { 0xee0, "Hangul_J_RieulTieut" },
+      { 0xee1, "Hangul_J_RieulPhieuf" }, { 0xee2, "Hangul_J_RieulHieuh" }, { 0xee3, "Hangul_J_Mieum" }, { 0xee4, "Hangul_J_Pieub" },
+      { 0xee5, "Hangul_J_PieubSios" }, { 0xee6, "Hangul_J_Sios" }, { 0xee7, "Hangul_J_SsangSios" }, { 0xee8, "Hangul_J_Ieung" },
+      { 0xee9, "Hangul_J_Jieuj" }, { 0xeea, "Hangul_J_Cieuc" }, { 0xeeb, "Hangul_J_Khieuq" }, { 0xeec, "Hangul_J_Tieut" },
+      { 0xeed, "Hangul_J_Phieuf" }, { 0xeee, "Hangul_J_Hieuh" }, { 0xeef, "Hangul_RieulYeorinHieuh" }, { 0xef0, "Hangul_SunkyeongeumMieum" },
+      { 0xef1, "Hangul_SunkyeongeumPieub" }, { 0xef2, "Hangul_PanSios" }, { 0xef3, "Hangul_KkogjiDalrinIeung" }, { 0xef4, "Hangul_SunkyeongeumPhieuf" },
+      { 0xef5, "Hangul_YeorinHieuh" }, { 0xef6, "Hangul_AraeA" }, { 0xef7, "Hangul_AraeAE" }, { 0xef8, "Hangul_J_PanSios" },
+      { 0xef9, "Hangul_J_KkogjiDalrinIeung" }, { 0xefa, "Hangul_J_YeorinHieuh" }, { 0xeff, "Korean_Won" }, { 0xFD01, "3270_Duplicate" },
+      { 0xFD02, "3270_FieldMark" }, { 0xFD03, "3270_Right2" }, { 0xFD04, "3270_Left2" }, { 0xFD05, "3270_BackTab" },
+      { 0xFD06, "3270_EraseEOF" }, { 0xFD07, "3270_EraseInput" }, { 0xFD08, "3270_Reset" }, { 0xFD09, "3270_Quit" },
+      { 0xFD0A, "3270_PA1" }, { 0xFD0B, "3270_PA2" }, { 0xFD0C, "3270_PA3" }, { 0xFD0D, "3270_Test" },
+      { 0xFD0E, "3270_Attn" }, { 0xFD0F, "3270_CursorBlink" }, { 0xFD10, "3270_AltCursor" }, { 0xFD11, "3270_KeyClick" },
+      { 0xFD12, "3270_Jump" }, { 0xFD13, "3270_Ident" }, { 0xFD14, "3270_Rule" }, { 0xFD15, "3270_Copy" },
+      { 0xFD16, "3270_Play" }, { 0xFD17, "3270_Setup" }, { 0xFD18, "3270_Record" }, { 0xFD19, "3270_ChangeScreen" },
+      { 0xFD1A, "3270_DeleteWord" }, { 0xFD1B, "3270_ExSelect" }, { 0xFD1C, "3270_CursorSelect" }, { 0xFD1D, "3270_PrintScreen" },
+      { 0xFD1E, "3270_Enter" }, { 0xFE01, "ISO_Lock" }, { 0xFE02, "ISO_Level2_Latch" }, { 0xFE03, "ISO_Level3_Shift" },
+      { 0xFE04, "ISO_Level3_Latch" }, { 0xFE05, "ISO_Level3_Lock" }, { 0xFE06, "ISO_Group_Latch" }, { 0xFE07, "ISO_Group_Lock" },
+      { 0xFE08, "ISO_Next_Group" }, { 0xFE09, "ISO_Next_Group_Lock" }, { 0xFE0A, "ISO_Prev_Group" }, { 0xFE0B, "ISO_Prev_Group_Lock" },
+      { 0xFE0C, "ISO_First_Group" }, { 0xFE0D, "ISO_First_Group_Lock" }, { 0xFE0E, "ISO_Last_Group" }, { 0xFE0F, "ISO_Last_Group_Lock" },
+      { 0xFE20, "ISO_Left_Tab" }, { 0xFE21, "ISO_Move_Line_Up" }, { 0xFE22, "ISO_Move_Line_Down" }, { 0xFE23, "ISO_Partial_Line_Up" },
+      { 0xFE24, "ISO_Partial_Line_Down" }, { 0xFE25, "ISO_Partial_Space_Left" }, { 0xFE26, "ISO_Partial_Space_Right" }, { 0xFE27, "ISO_Set_Margin_Left" },
+      { 0xFE28, "ISO_Set_Margin_Right" }, { 0xFE29, "ISO_Release_Margin_Left" }, { 0xFE2A, "ISO_Release_Margin_Right" }, { 0xFE2B, "ISO_Release_Both_Margins" },
+      { 0xFE2C, "ISO_Fast_Cursor_Left" }, { 0xFE2D, "ISO_Fast_Cursor_Right" }, { 0xFE2E, "ISO_Fast_Cursor_Up" }, { 0xFE2F, "ISO_Fast_Cursor_Down" },
+      { 0xFE30, "ISO_Continuous_Underline" }, { 0xFE31, "ISO_Discontinuous_Underline" }, { 0xFE32, "ISO_Emphasize" }, { 0xFE33, "ISO_Center_Object" },
+      { 0xFE34, "ISO_Enter" }, { 0xFE50, "dead_grave" }, { 0xFE51, "dead_acute" }, { 0xFE52, "dead_circumflex" },
+      { 0xFE53, "dead_tilde" }, { 0xFE54, "dead_macron" }, { 0xFE55, "dead_breve" }, { 0xFE56, "dead_abovedot" },
+      { 0xFE57, "dead_diaeresis" }, { 0xFE58, "dead_abovering" }, { 0xFE59, "dead_doubleacute" }, { 0xFE5A, "dead_caron" },
+      { 0xFE5B, "dead_cedilla" }, { 0xFE5C, "dead_ogonek" }, { 0xFE5D, "dead_iota" }, { 0xFE5E, "dead_voiced_sound" },
+      { 0xFE5F, "dead_semivoiced_sound" }, { 0xFE60, "dead_belowdot" }, { 0xFE70, "AccessX_Enable" }, { 0xFE71, "AccessX_Feedback_Enable" },
+      { 0xFE72, "RepeatKeys_Enable" }, { 0xFE73, "SlowKeys_Enable" }, { 0xFE74, "BounceKeys_Enable" }, { 0xFE75, "StickyKeys_Enable" },
+      { 0xFE76, "MouseKeys_Enable" }, { 0xFE77, "MouseKeys_Accel_Enable" }, { 0xFE78, "Overlay1_Enable" }, { 0xFE79, "Overlay2_Enable" },
+      { 0xFE7A, "AudibleBell_Enable" }, { 0xFED0, "First_Virtual_Screen" }, { 0xFED1, "Prev_Virtual_Screen" }, { 0xFED2, "Next_Virtual_Screen" },
+      { 0xFED4, "Last_Virtual_Screen" }, { 0xFED5, "Terminate_Server" }, { 0xFEE0, "Pointer_Left" }, { 0xFEE1, "Pointer_Right" },
+      { 0xFEE2, "Pointer_Up" }, { 0xFEE3, "Pointer_Down" }, { 0xFEE4, "Pointer_UpLeft" }, { 0xFEE5, "Pointer_UpRight" },
+      { 0xFEE6, "Pointer_DownLeft" }, { 0xFEE7, "Pointer_DownRight" }, { 0xFEE8, "Pointer_Button_Dflt" }, { 0xFEE9, "Pointer_Button1" },
+      { 0xFEEA, "Pointer_Button2" }, { 0xFEEB, "Pointer_Button3" }, { 0xFEEC, "Pointer_Button4" }, { 0xFEED, "Pointer_Button5" },
+      { 0xFEEE, "Pointer_DblClick_Dflt" }, { 0xFEEF, "Pointer_DblClick1" }, { 0xFEF0, "Pointer_DblClick2" }, { 0xFEF1, "Pointer_DblClick3" },
+      { 0xFEF2, "Pointer_DblClick4" }, { 0xFEF3, "Pointer_DblClick5" }, { 0xFEF4, "Pointer_Drag_Dflt" }, { 0xFEF5, "Pointer_Drag1" },
+      { 0xFEF6, "Pointer_Drag2" }, { 0xFEF7, "Pointer_Drag3" }, { 0xFEF8, "Pointer_Drag4" }, { 0xFEF9, "Pointer_EnableKeys" },
+      { 0xFEFA, "Pointer_Accelerate" }, { 0xFEFB, "Pointer_DfltBtnNext" }, { 0xFEFC, "Pointer_DfltBtnPrev" }, { 0xFEFD, "Pointer_Drag5" },
+      { 0xFF08, "BackSpace" }, { 0xFF09, "Tab" }, { 0xFF0A, "Linefeed" }, { 0xFF0B, "Clear" },
+      { 0xFF0D, "Return" }, { 0xFF13, "Pause" }, { 0xFF14, "Scroll_Lock" }, { 0xFF15, "Sys_Req" },
+      { 0xFF1B, "Escape" }, { 0xFF20, "Multi_key" }, { 0xFF21, "Kanji" }, { 0xFF22, "Muhenkan" },
+      { 0xFF23, "Henkan" }, { 0xFF23, "Henkan_Mode" }, { 0xFF24, "Romaji" }, { 0xFF25, "Hiragana" },
+      { 0xFF26, "Katakana" }, { 0xFF27, "Hiragana_Katakana" }, { 0xFF28, "Zenkaku" }, { 0xFF29, "Hankaku" },
+      { 0xFF2A, "Zenkaku_Hankaku" }, { 0xFF2B, "Touroku" }, { 0xFF2C, "Massyo" }, { 0xFF2D, "Kana_Lock" },
+      { 0xFF2E, "Kana_Shift" }, { 0xFF2F, "Eisu_Shift" }, { 0xFF30, "Eisu_toggle" }, { 0xff31, "Hangul" },
+      { 0xff32, "Hangul_Start" }, { 0xff33, "Hangul_End" }, { 0xff34, "Hangul_Hanja" }, { 0xff35, "Hangul_Jamo" },
+      { 0xff36, "Hangul_Romaja" }, { 0xFF37, "Codeinput" }, { 0xff37, "Hangul_Codeinput" }, { 0xFF37, "Kanji_Bangou" },
+      { 0xff38, "Hangul_Jeonja" }, { 0xff39, "Hangul_Banja" }, { 0xff3a, "Hangul_PreHanja" }, { 0xff3b, "Hangul_PostHanja" },
+      { 0xff3c, "Hangul_SingleCandidate" }, { 0xFF3C, "SingleCandidate" }, { 0xff3d, "Hangul_MultipleCandidate" }, { 0xFF3D, "MultipleCandidate" },
+      { 0xFF3D, "Zen_Koho" }, { 0xff3e, "Hangul_PreviousCandidate" }, { 0xFF3E, "Mae_Koho" }, { 0xFF3E, "PreviousCandidate" },
+      { 0xff3f, "Hangul_Special" }, { 0xFF50, "Home" }, { 0xFF51, "Left" }, { 0xFF52, "Up" },
+      { 0xFF53, "Right" }, { 0xFF54, "Down" }, { 0xFF55, "Page_Up" }, { 0xFF55, "Prior" },
+      { 0xFF56, "Next" }, { 0xFF56, "Page_Down" }, { 0xFF57, "End" }, { 0xFF58, "Begin" },
+      { 0xFF60, "Select" }, { 0xFF61, "Print" }, { 0xFF62, "Execute" }, { 0xFF63, "Insert" },
+      { 0xFF65, "Undo" }, { 0xFF66, "Redo" }, { 0xFF67, "Menu" }, { 0xFF68, "Find" },
+      { 0xFF69, "Cancel" }, { 0xFF6A, "Help" }, { 0xFF6B, "Break" }, { 0xFF7E, "Arabic_switch" },
+      { 0xFF7E, "Greek_switch" }, { 0xFF7E, "Hangul_switch" }, { 0xFF7E, "Hebrew_switch" }, { 0xFF7E, "ISO_Group_Shift" },
+      { 0xFF7E, "kana_switch" }, { 0xFF7E, "Mode_switch" }, { 0xFF7E, "script_switch" }, { 0xFF7F, "Num_Lock" },
+      { 0xFF80, "KP_Space" }, { 0xFF89, "KP_Tab" }, { 0xFF8D, "KP_Enter" }, { 0xFF91, "KP_F1" },
+      { 0xFF92, "KP_F2" }, { 0xFF93, "KP_F3" }, { 0xFF94, "KP_F4" }, { 0xFF95, "KP_Home" },
+      { 0xFF96, "KP_Left" }, { 0xFF97, "KP_Up" }, { 0xFF98, "KP_Right" }, { 0xFF99, "KP_Down" },
+      { 0xFF9A, "KP_Page_Up" }, { 0xFF9A, "KP_Prior" }, { 0xFF9B, "KP_Next" }, { 0xFF9B, "KP_Page_Down" },
+      { 0xFF9C, "KP_End" }, { 0xFF9D, "KP_Begin" }, { 0xFF9E, "KP_Insert" }, { 0xFF9F, "KP_Delete" },
+      { 0xFFAA, "KP_Multiply" }, { 0xFFAB, "KP_Add" }, { 0xFFAC, "KP_Separator" }, { 0xFFAD, "KP_Subtract" },
+      { 0xFFAE, "KP_Decimal" }, { 0xFFAF, "KP_Divide" }, { 0xFFB0, "KP_0" }, { 0xFFB1, "KP_1" },
+      { 0xFFB2, "KP_2" }, { 0xFFB3, "KP_3" }, { 0xFFB4, "KP_4" }, { 0xFFB5, "KP_5" },
+      { 0xFFB6, "KP_6" }, { 0xFFB7, "KP_7" }, { 0xFFB8, "KP_8" }, { 0xFFB9, "KP_9" },
+      { 0xFFBD, "KP_Equal" }, { 0xFFBE, "F1" }, { 0xFFBF, "F2" }, { 0xFFC0, "F3" },
+      { 0xFFC1, "F4" }, { 0xFFC2, "F5" }, { 0xFFC3, "F6" }, { 0xFFC4, "F7" },
+      { 0xFFC5, "F8" }, { 0xFFC6, "F9" }, { 0xFFC7, "F10" }, { 0xFFC8, "F11" },
+      { 0xFFC8, "L1" }, { 0xFFC9, "F12" }, { 0xFFC9, "L2" }, { 0xFFCA, "F13" },
+      { 0xFFCA, "L3" }, { 0xFFCB, "F14" }, { 0xFFCB, "L4" }, { 0xFFCC, "F15" },
+      { 0xFFCC, "L5" }, { 0xFFCD, "F16" }, { 0xFFCD, "L6" }, { 0xFFCE, "F17" },
+      { 0xFFCE, "L7" }, { 0xFFCF, "F18" }, { 0xFFCF, "L8" }, { 0xFFD0, "F19" },
+      { 0xFFD0, "L9" }, { 0xFFD1, "F20" }, { 0xFFD1, "L10" }, { 0xFFD2, "F21" },
+      { 0xFFD2, "R1" }, { 0xFFD3, "F22" }, { 0xFFD3, "R2" }, { 0xFFD4, "F23" },
+      { 0xFFD4, "R3" }, { 0xFFD5, "F24" }, { 0xFFD5, "R4" }, { 0xFFD6, "F25" },
+      { 0xFFD6, "R5" }, { 0xFFD7, "F26" }, { 0xFFD7, "R6" }, { 0xFFD8, "F27" },
+      { 0xFFD8, "R7" }, { 0xFFD9, "F28" }, { 0xFFD9, "R8" }, { 0xFFDA, "F29" },
+      { 0xFFDA, "R9" }, { 0xFFDB, "F30" }, { 0xFFDB, "R10" }, { 0xFFDC, "F31" },
+      { 0xFFDC, "R11" }, { 0xFFDD, "F32" }, { 0xFFDD, "R12" }, { 0xFFDE, "F33" },
+      { 0xFFDE, "R13" }, { 0xFFDF, "F34" }, { 0xFFDF, "R14" }, { 0xFFE0, "F35" },
+      { 0xFFE0, "R15" }, { 0xFFE1, "Shift_L" }, { 0xFFE2, "Shift_R" }, { 0xFFE3, "Control_L" },
+      { 0xFFE4, "Control_R" }, { 0xFFE5, "Caps_Lock" }, { 0xFFE6, "Shift_Lock" }, { 0xFFE7, "Meta_L" },
+      { 0xFFE8, "Meta_R" }, { 0xFFE9, "Alt_L" }, { 0xFFEA, "Alt_R" }, { 0xFFEB, "Super_L" },
+      { 0xFFEC, "Super_R" }, { 0xFFED, "Hyper_L" }, { 0xFFEE, "Hyper_R" }, { 0xFFFF, "Delete" },
+      { 0xFFFFFF, "VoidSymbol" }, { 0, NULL }
+};
diff -uN ethereal.current/packet-x11-register-info.h ethereal.new/packet-x11-register-info.h
--- ethereal.current/packet-x11-register-info.h	Thu Jan  1 01:00:00 1970
+++ ethereal.new/packet-x11-register-info.h	Sun Jun 11 16:20:27 2000
@@ -0,0 +1,375 @@
+/* packet-x11-register-info.h
+ *
+ * $Id:$
+ *
+ * Put there so as to make packet-x11.c lighter. Generated from
+ * x11-list. See packet-x11.c
+ */
+
+{ &hf_x11_acceleration_denominator, { "acceleration-denominator", "x11.acceleration-denominator", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_acceleration_numerator, { "acceleration-numerator", "x11.acceleration-numerator", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_access_mode, { "access-mode", "x11.access-mode", FT_UINT8, BASE_NONE, VALS(access_mode_vals), 0, "" } },
+{ &hf_x11_address, { "address", "x11.address", FT_BYTES, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_address_length, { "address-length", "x11.address-length", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_alloc, { "alloc", "x11.alloc", FT_UINT8, BASE_NONE, VALS(alloc_vals), 0, "" } },
+{ &hf_x11_allow_events_mode, { "allow-events-mode", "x11.allow-events-mode", FT_UINT8, BASE_NONE, VALS(allow_events_mode_vals), 0, "" } },
+{ &hf_x11_allow_exposures, { "allow-exposures", "x11.allow-exposures", FT_UINT8, BASE_NONE, VALS(yes_no_default_vals), 0, "" } },
+{ &hf_x11_arcs, { "arcs", "x11.arcs", FT_NONE, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_arc, { "arc", "x11.arc", FT_NONE, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_arc_x, { "x", "x11.arc.x", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_arc_y, { "y", "x11.arc.y", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_arc_width, { "width", "x11.arc.width", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_arc_height, { "height", "x11.arc.height", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_arc_angle1, { "angle1", "x11.arc.angle1", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_arc_angle2, { "angle2", "x11.arc.angle2", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_arc_mode, { "mode", "x11.arc.mode", FT_UINT8, BASE_NONE, VALS(mode_vals), 0, "" } },
+{ &hf_x11_atom, { "atom", "x11.atom", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_auto_repeat_mode, { "auto-repeat-mode", "x11.auto-repeat-mode", FT_UINT8, BASE_NONE, VALS(auto_repeat_mode_vals), 0, "" } },
+{ &hf_x11_back_blue, { "back-blue", "x11.back-blue", FT_UINT16, BASE_DEC, NULL, 0, "Background" } },
+{ &hf_x11_back_green, { "back-green", "x11.back-green", FT_UINT16, BASE_DEC, NULL, 0, "Background" } },
+{ &hf_x11_back_red, { "back-red", "x11.back-red", FT_UINT16, BASE_DEC, NULL, 0, "Background" } },
+{ &hf_x11_background, { "background", "x11.background", FT_UINT32, BASE_HEX, NULL, 0, "Background" } },
+{ &hf_x11_background_pixel, { "background-pixel", "x11.background-pixel", FT_UINT32, BASE_HEX, NULL, 0, "Background" } },
+{ &hf_x11_background_pixmap, { "background-pixmap", "x11.background-pixmap", FT_UINT32, BASE_NONE, VALS(background_pixmap_vals), 0, "Background" } },
+{ &hf_x11_backing_pixel, { "backing-pixel", "x11.backing-pixel", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_backing_planes, { "backing-planes", "x11.backing-planes", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_backing_store, { "backing-store", "x11.backing-store", FT_UINT8, BASE_NONE, VALS(backing_store_vals), 0, "" } },
+{ &hf_x11_bell_duration, { "bell-duration", "x11.bell-duration", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_bell_percent, { "bell-percent", "x11.bell-percent", FT_INT8, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_bell_pitch, { "bell-pitch", "x11.bell-pitch", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_bit_gravity, { "bit-gravity", "x11.bit-gravity", FT_UINT8, BASE_NONE, VALS(gravity_vals), 0, "" } },
+{ &hf_x11_bit_plane, { "bit-plane", "x11.bit-plane", FT_UINT32, BASE_BIN, NULL, 0, "" } },
+{ &hf_x11_blue, { "blue", "x11.blue", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_blues, { "blues", "x11.blues", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_border_pixel, { "border-pixel", "x11.border-pixel", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_border_pixmap, { "border-pixmap", "x11.border-pixmap", FT_UINT32, BASE_NONE, VALS(border_pixmap_vals), 0, "" } },
+{ &hf_x11_border_width, { "border-width", "x11.border-width", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_button, { "button", "x11.button", FT_UINT8, BASE_NONE, VALS(button_vals), 0, "" } },
+{ &hf_x11_cap_style, { "cap-style", "x11.cap-style", FT_UINT8, BASE_NONE, VALS(cap_style_vals), 0, "" } },
+{ &hf_x11_change_host_mode, { "change-host-mode", "x11.change-host-mode", FT_UINT8, BASE_NONE, VALS(insert_delete_vals), 0, "" } },
+{ &hf_x11_cid, { "cid", "x11.cid", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_class, { "class", "x11.class", FT_UINT8, BASE_NONE, VALS(class_vals), 0, "" } },
+{ &hf_x11_clip_mask, { "clip-mask", "x11.clip-mask", FT_UINT32, BASE_NONE, VALS(zero_is_none_vals), 0, "" } },
+{ &hf_x11_clip_x_origin, { "clip-x-origin", "x11.clip-x-origin", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_clip_y_origin, { "clip-y-origin", "x11.clip-y-origin", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_close_down_mode, { "close-down-mode", "x11.close-down-mode", FT_UINT8, BASE_NONE, VALS(close_down_mode_vals), 0, "" } },
+{ &hf_x11_cmap, { "cmap", "x11.cmap", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_colormap, { "colormap", "x11.colormap", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_color_items, { "color-items", "x11.color-items", FT_NONE, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_coloritem, { "coloritem", "x11.coloritem", FT_NONE, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_coloritem_pixel, { "pixel", "x11.coloritem.pixel", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_coloritem_red, { "red", "x11.coloritem.red", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_coloritem_green, { "green", "x11.coloritem.green", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_coloritem_blue, { "blue", "x11.coloritem.blue", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_coloritem_flags, { "flags", "x11.coloritem.flags", FT_UINT8, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_coloritem_flags_do_red, { "do-red", "x11.coloritem.flags.do-red", FT_BOOLEAN, 8, NULL, 0x01, "" } },
+{ &hf_x11_coloritem_flags_do_green, { "do-green", "x11.coloritem.flags.do-green", FT_BOOLEAN, 8, NULL, 0x02, "" } },
+{ &hf_x11_coloritem_flags_do_blue, { "do-blue", "x11.coloritem.flags.do-blue", FT_BOOLEAN, 8, NULL, 0x04, "" } },
+{ &hf_x11_coloritem_flags_unused, { "unused", "x11.coloritem.flags.unused", FT_BOOLEAN, 8, NULL, 0xf8, "" } },
+{ &hf_x11_coloritem_unused, { "unused", "x11.coloritem.unused", FT_NONE, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_colors, { "colors", "x11.colors", FT_UINT16, BASE_DEC, NULL, 0, "The" } },
+{ &hf_x11_configure_window_mask, { "configure-window-mask", "x11.configure-window-mask", FT_UINT16, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_configure_window_mask_x, { "x", "x11.configure-window-mask.x", FT_BOOLEAN, 16, NULL, 0x0001, "" } },
+{ &hf_x11_configure_window_mask_y, { "y", "x11.configure-window-mask.y", FT_BOOLEAN, 16, NULL, 0x0002, "" } },
+{ &hf_x11_configure_window_mask_width, { "width", "x11.configure-window-mask.width", FT_BOOLEAN, 16, NULL, 0x0004, "" } },
+{ &hf_x11_configure_window_mask_height, { "height", "x11.configure-window-mask.height", FT_BOOLEAN, 16, NULL, 0x0008, "" } },
+{ &hf_x11_configure_window_mask_border_width, { "border-width", "x11.configure-window-mask.border-width", FT_BOOLEAN, 16, NULL, 0x0010, "" } },
+{ &hf_x11_configure_window_mask_sibling, { "sibling", "x11.configure-window-mask.sibling", FT_BOOLEAN, 16, NULL, 0x0020, "" } },
+{ &hf_x11_configure_window_mask_stack_mode, { "stack-mode", "x11.configure-window-mask.stack-mode", FT_BOOLEAN, 16, NULL, 0x0040, "" } },
+{ &hf_x11_confine_to, { "confine-to", "x11.confine-to", FT_UINT32, BASE_NONE, VALS(zero_is_none_vals), 0, "" } },
+{ &hf_x11_contiguous, { "contiguous", "x11.contiguous", FT_BOOLEAN, 8, NULL, 0, "" } },
+{ &hf_x11_coordinate_mode, { "coordinate-mode", "x11.coordinate-mode", FT_UINT8, BASE_NONE, VALS(coordinate_mode_vals), 0, "" } },
+{ &hf_x11_count, { "count", "x11.count", FT_UINT8, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_cursor, { "cursor", "x11.cursor", FT_UINT32, BASE_NONE, VALS(zero_is_none_vals), 0, "" } },
+{ &hf_x11_dash_offset, { "dash-offset", "x11.dash-offset", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_dashes, { "dashes", "x11.dashes", FT_BYTES, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_dashes_length, { "dashes-length", "x11.dashes-length", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_do_acceleration, { "do-acceleration", "x11.do-acceleration", FT_BOOLEAN, 8, NULL, 0, "" } },
+{ &hf_x11_do_threshold, { "do-threshold", "x11.do-threshold", FT_BOOLEAN, 8, NULL, 0, "" } },
+{ &hf_x11_do_not_propagate_mask, { "do-not-propagate-mask", "x11.do-not-propagate-mask", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_do_not_propagate_mask_KeyPress, { "KeyPress", "x11.do-not-propagate-mask.KeyPress", FT_BOOLEAN, 32, NULL, 0x00000001, "" } },
+{ &hf_x11_do_not_propagate_mask_KeyRelease, { "KeyRelease", "x11.do-not-propagate-mask.KeyRelease", FT_BOOLEAN, 32, NULL, 0x00000002, "" } },
+{ &hf_x11_do_not_propagate_mask_ButtonPress, { "ButtonPress", "x11.do-not-propagate-mask.ButtonPress", FT_BOOLEAN, 32, NULL, 0x00000004, "" } },
+{ &hf_x11_do_not_propagate_mask_ButtonRelease, { "ButtonRelease", "x11.do-not-propagate-mask.ButtonRelease", FT_BOOLEAN, 32, NULL, 0x00000008, "" } },
+{ &hf_x11_do_not_propagate_mask_PointerMotion, { "PointerMotion", "x11.do-not-propagate-mask.PointerMotion", FT_BOOLEAN, 32, NULL, 0x00000040, "" } },
+{ &hf_x11_do_not_propagate_mask_Button1Motion, { "Button1Motion", "x11.do-not-propagate-mask.Button1Motion", FT_BOOLEAN, 32, NULL, 0x00000100, "" } },
+{ &hf_x11_do_not_propagate_mask_Button2Motion, { "Button2Motion", "x11.do-not-propagate-mask.Button2Motion", FT_BOOLEAN, 32, NULL, 0x00000200, "" } },
+{ &hf_x11_do_not_propagate_mask_Button3Motion, { "Button3Motion", "x11.do-not-propagate-mask.Button3Motion", FT_BOOLEAN, 32, NULL, 0x00000400, "" } },
+{ &hf_x11_do_not_propagate_mask_Button4Motion, { "Button4Motion", "x11.do-not-propagate-mask.Button4Motion", FT_BOOLEAN, 32, NULL, 0x00000800, "" } },
+{ &hf_x11_do_not_propagate_mask_Button5Motion, { "Button5Motion", "x11.do-not-propagate-mask.Button5Motion", FT_BOOLEAN, 32, NULL, 0x00001000, "" } },
+{ &hf_x11_do_not_propagate_mask_ButtonMotion, { "ButtonMotion", "x11.do-not-propagate-mask.ButtonMotion", FT_BOOLEAN, 32, NULL, 0x00002000, "" } },
+{ &hf_x11_do_not_propagate_mask_erroneous_bits, { "erroneous-bits", "x11.do-not-propagate-mask.erroneous-bits", FT_BOOLEAN, 32, NULL, 0xffffc0b0, "" } },
+{ &hf_x11_gc_dashes, { "gc-dashes", "x11.gc-dashes", FT_UINT8, BASE_BIN, NULL, 0, "" } },
+{ &hf_x11_gc_value_mask, { "gc-value-mask", "x11.gc-value-mask", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_gc_value_mask_function, { "function", "x11.gc-value-mask.function", FT_BOOLEAN, 32, NULL, 0x00000001, "" } },
+{ &hf_x11_gc_value_mask_plane_mask, { "plane-mask", "x11.gc-value-mask.plane-mask", FT_BOOLEAN, 32, NULL, 0x00000002, "" } },
+{ &hf_x11_gc_value_mask_foreground, { "foreground", "x11.gc-value-mask.foreground", FT_BOOLEAN, 32, NULL, 0x00000004, "" } },
+{ &hf_x11_gc_value_mask_background, { "background", "x11.gc-value-mask.background", FT_BOOLEAN, 32, NULL, 0x00000008, "" } },
+{ &hf_x11_gc_value_mask_line_width, { "line-width", "x11.gc-value-mask.line-width", FT_BOOLEAN, 32, NULL, 0x00000010, "" } },
+{ &hf_x11_gc_value_mask_line_style, { "line-style", "x11.gc-value-mask.line-style", FT_BOOLEAN, 32, NULL, 0x00000020, "" } },
+{ &hf_x11_gc_value_mask_cap_style, { "cap-style", "x11.gc-value-mask.cap-style", FT_BOOLEAN, 32, NULL, 0x00000040, "" } },
+{ &hf_x11_gc_value_mask_join_style, { "join-style", "x11.gc-value-mask.join-style", FT_BOOLEAN, 32, NULL, 0x00000080, "" } },
+{ &hf_x11_gc_value_mask_fill_style, { "fill-style", "x11.gc-value-mask.fill-style", FT_BOOLEAN, 32, NULL, 0x00000100, "" } },
+{ &hf_x11_gc_value_mask_fill_rule, { "fill-rule", "x11.gc-value-mask.fill-rule", FT_BOOLEAN, 32, NULL, 0x00000200, "" } },
+{ &hf_x11_gc_value_mask_tile, { "tile", "x11.gc-value-mask.tile", FT_BOOLEAN, 32, NULL, 0x00000400, "" } },
+{ &hf_x11_gc_value_mask_stipple, { "stipple", "x11.gc-value-mask.stipple", FT_BOOLEAN, 32, NULL, 0x00000800, "" } },
+{ &hf_x11_gc_value_mask_tile_stipple_x_origin, { "tile-stipple-x-origin", "x11.gc-value-mask.tile-stipple-x-origin", FT_BOOLEAN, 32, NULL, 0x00001000, "" } },
+{ &hf_x11_gc_value_mask_tile_stipple_y_origin, { "tile-stipple-y-origin", "x11.gc-value-mask.tile-stipple-y-origin", FT_BOOLEAN, 32, NULL, 0x00002000, "" } },
+{ &hf_x11_gc_value_mask_font, { "font", "x11.gc-value-mask.font", FT_BOOLEAN, 32, NULL, 0x00004000, "" } },
+{ &hf_x11_gc_value_mask_subwindow_mode, { "subwindow-mode", "x11.gc-value-mask.subwindow-mode", FT_BOOLEAN, 32, NULL, 0x00008000, "" } },
+{ &hf_x11_gc_value_mask_graphics_exposures, { "graphics-exposures", "x11.gc-value-mask.graphics-exposures", FT_BOOLEAN, 32, NULL, 0x00010000, "" } },
+{ &hf_x11_gc_value_mask_clip_x_origin, { "clip-x-origin", "x11.gc-value-mask.clip-x-origin", FT_BOOLEAN, 32, NULL, 0x00020000, "" } },
+{ &hf_x11_gc_value_mask_clip_y_origin, { "clip-y-origin", "x11.gc-value-mask.clip-y-origin", FT_BOOLEAN, 32, NULL, 0x00040000, "" } },
+{ &hf_x11_gc_value_mask_clip_mask, { "clip-mask", "x11.gc-value-mask.clip-mask", FT_BOOLEAN, 32, NULL, 0x00080000, "" } },
+{ &hf_x11_gc_value_mask_dash_offset, { "dash-offset", "x11.gc-value-mask.dash-offset", FT_BOOLEAN, 32, NULL, 0x00100000, "" } },
+{ &hf_x11_gc_value_mask_gc_dashes, { "gc-dashes", "x11.gc-value-mask.gc-dashes", FT_BOOLEAN, 32, NULL, 0x00200000, "" } },
+{ &hf_x11_gc_value_mask_arc_mode, { "arc-mode", "x11.gc-value-mask.arc-mode", FT_BOOLEAN, 32, NULL, 0x00400000, "" } },
+{ &hf_x11_green, { "green", "x11.green", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_greens, { "greens", "x11.greens", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_data, { "data", "x11.data", FT_BYTES, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_data_length, { "data-length", "x11.data-length", FT_UINT32, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_delete, { "delete", "x11.delete", FT_BOOLEAN, 8, NULL, 0, "Delete" } },
+{ &hf_x11_delta, { "delta", "x11.delta", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_depth, { "depth", "x11.depth", FT_UINT8, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_direction, { "direction", "x11.direction", FT_UINT8, BASE_NONE, VALS(direction_vals), 0, "" } },
+{ &hf_x11_drawable, { "drawable", "x11.drawable", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_dst_drawable, { "dst-drawable", "x11.dst-drawable", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_dst_gc, { "dst-gc", "x11.dst-gc", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_dst_window, { "dst-window", "x11.dst-window", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_dst_x, { "dst-x", "x11.dst-x", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_dst_y, { "dst-y", "x11.dst-y", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_event_mask, { "event-mask", "x11.event-mask", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_event_mask_KeyPress, { "KeyPress", "x11.event-mask.KeyPress", FT_BOOLEAN, 32, NULL, 0x00000001, "" } },
+{ &hf_x11_event_mask_KeyRelease, { "KeyRelease", "x11.event-mask.KeyRelease", FT_BOOLEAN, 32, NULL, 0x00000002, "" } },
+{ &hf_x11_event_mask_ButtonPress, { "ButtonPress", "x11.event-mask.ButtonPress", FT_BOOLEAN, 32, NULL, 0x00000004, "" } },
+{ &hf_x11_event_mask_ButtonRelease, { "ButtonRelease", "x11.event-mask.ButtonRelease", FT_BOOLEAN, 32, NULL, 0x00000008, "" } },
+{ &hf_x11_event_mask_EnterWindow, { "EnterWindow", "x11.event-mask.EnterWindow", FT_BOOLEAN, 32, NULL, 0x00000010, "" } },
+{ &hf_x11_event_mask_LeaveWindow, { "LeaveWindow", "x11.event-mask.LeaveWindow", FT_BOOLEAN, 32, NULL, 0x00000020, "" } },
+{ &hf_x11_event_mask_PointerMotion, { "PointerMotion", "x11.event-mask.PointerMotion", FT_BOOLEAN, 32, NULL, 0x00000040, "" } },
+{ &hf_x11_event_mask_PointerMotionHint, { "PointerMotionHint", "x11.event-mask.PointerMotionHint", FT_BOOLEAN, 32, NULL, 0x00000080, "" } },
+{ &hf_x11_event_mask_Button1Motion, { "Button1Motion", "x11.event-mask.Button1Motion", FT_BOOLEAN, 32, NULL, 0x00000100, "" } },
+{ &hf_x11_event_mask_Button2Motion, { "Button2Motion", "x11.event-mask.Button2Motion", FT_BOOLEAN, 32, NULL, 0x00000200, "" } },
+{ &hf_x11_event_mask_Button3Motion, { "Button3Motion", "x11.event-mask.Button3Motion", FT_BOOLEAN, 32, NULL, 0x00000400, "" } },
+{ &hf_x11_event_mask_Button4Motion, { "Button4Motion", "x11.event-mask.Button4Motion", FT_BOOLEAN, 32, NULL, 0x00000800, "" } },
+{ &hf_x11_event_mask_Button5Motion, { "Button5Motion", "x11.event-mask.Button5Motion", FT_BOOLEAN, 32, NULL, 0x00001000, "" } },
+{ &hf_x11_event_mask_ButtonMotion, { "ButtonMotion", "x11.event-mask.ButtonMotion", FT_BOOLEAN, 32, NULL, 0x00002000, "" } },
+{ &hf_x11_event_mask_KeymapState, { "KeymapState", "x11.event-mask.KeymapState", FT_BOOLEAN, 32, NULL, 0x00004000, "" } },
+{ &hf_x11_event_mask_Exposure, { "Exposure", "x11.event-mask.Exposure", FT_BOOLEAN, 32, NULL, 0x00008000, "" } },
+{ &hf_x11_event_mask_VisibilityChange, { "VisibilityChange", "x11.event-mask.VisibilityChange", FT_BOOLEAN, 32, NULL, 0x00010000, "" } },
+{ &hf_x11_event_mask_StructureNotify, { "StructureNotify", "x11.event-mask.StructureNotify", FT_BOOLEAN, 32, NULL, 0x00020000, "" } },
+{ &hf_x11_event_mask_ResizeRedirect, { "ResizeRedirect", "x11.event-mask.ResizeRedirect", FT_BOOLEAN, 32, NULL, 0x00040000, "" } },
+{ &hf_x11_event_mask_SubstructureNotify, { "SubstructureNotify", "x11.event-mask.SubstructureNotify", FT_BOOLEAN, 32, NULL, 0x00080000, "" } },
+{ &hf_x11_event_mask_SubstructureRedirect, { "SubstructureRedirect", "x11.event-mask.SubstructureRedirect", FT_BOOLEAN, 32, NULL, 0x00100000, "" } },
+{ &hf_x11_event_mask_FocusChange, { "FocusChange", "x11.event-mask.FocusChange", FT_BOOLEAN, 32, NULL, 0x00200000, "" } },
+{ &hf_x11_event_mask_PropertyChange, { "PropertyChange", "x11.event-mask.PropertyChange", FT_BOOLEAN, 32, NULL, 0x00400000, "" } },
+{ &hf_x11_event_mask_ColormapChange, { "ColormapChange", "x11.event-mask.ColormapChange", FT_BOOLEAN, 32, NULL, 0x00800000, "" } },
+{ &hf_x11_event_mask_OwnerGrabButton, { "OwnerGrabButton", "x11.event-mask.OwnerGrabButton", FT_BOOLEAN, 32, NULL, 0x01000000, "" } },
+{ &hf_x11_event_mask_erroneous_bits, { "erroneous-bits", "x11.event-mask.erroneous-bits", FT_BOOLEAN, 32, NULL, 0xfe000000, "" } },
+{ &hf_x11_exposures, { "exposures", "x11.exposures", FT_BOOLEAN, 8, NULL, 0, "" } },
+{ &hf_x11_family, { "family", "x11.family", FT_UINT8, BASE_NONE, VALS(family_vals), 0, "" } },
+{ &hf_x11_fid, { "fid", "x11.fid", FT_UINT32, BASE_HEX, NULL, 0, "Font" } },
+{ &hf_x11_fill_rule, { "fill-rule", "x11.fill-rule", FT_UINT8, BASE_NONE, VALS(fill_rule_vals), 0, "" } },
+{ &hf_x11_fill_style, { "fill-style", "x11.fill-style", FT_UINT8, BASE_NONE, VALS(fill_style_vals), 0, "" } },
+{ &hf_x11_first_keycode, { "first-keycode", "x11.first-keycode", FT_UINT8, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_focus, { "focus", "x11.focus", FT_UINT8, BASE_NONE, VALS(focus_vals), 0, "" } },
+{ &hf_x11_font, { "font", "x11.font", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_fore_blue, { "fore-blue", "x11.fore-blue", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_fore_green, { "fore-green", "x11.fore-green", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_fore_red, { "fore-red", "x11.fore-red", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_foreground, { "foreground", "x11.foreground", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_format, { "format", "x11.format", FT_UINT8, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_function, { "function", "x11.function", FT_UINT8, BASE_NONE, VALS(function_vals), 0, "" } },
+{ &hf_x11_gc, { "gc", "x11.gc", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_get_property_type, { "get-property-type", "x11.get-property-type", FT_UINT32, BASE_NONE, VALS(zero_is_any_property_type_vals), 0, "" } },
+{ &hf_x11_grab_window, { "grab_window", "x11.grab_window", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_graphics_exposures, { "graphics-exposures", "x11.graphics-exposures", FT_BOOLEAN, 8, NULL, 0, "" } },
+{ &hf_x11_height, { "height", "x11.height", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_image_format, { "image-format", "x11.image-format", FT_UINT8, BASE_NONE, VALS(image_format_vals), 0, "" } },
+{ &hf_x11_image_pixmap_format, { "image-pixmap-format", "x11.image-pixmap-format", FT_UINT8, BASE_NONE, VALS(image_pixmap_format_vals), 0, "" } },
+{ &hf_x11_interval, { "interval", "x11.interval", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_items, { "items", "x11.items", FT_NONE, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_join_style, { "join-style", "x11.join-style", FT_UINT8, BASE_NONE, VALS(join_style_vals), 0, "" } },
+{ &hf_x11_key, { "key", "x11.key", FT_UINT8, BASE_NONE, VALS(key_vals), 0, "" } },
+{ &hf_x11_key_click_percent, { "key-click-percent", "x11.key-click-percent", FT_INT8, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_keyboard_key, { "keyboard-key", "x11.keyboard-key", FT_UINT8, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_keyboard_mode, { "keyboard-mode", "x11.keyboard-mode", FT_UINT8, BASE_NONE, VALS(pointer_keyboard_mode_vals), 0, "" } },
+{ &hf_x11_keyboard_value_mask, { "keyboard-value-mask", "x11.keyboard-value-mask", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_keyboard_value_mask_key_click_percent, { "key-click-percent", "x11.keyboard-value-mask.key-click-percent", FT_BOOLEAN, 32, NULL, 0x0001, "" } },
+{ &hf_x11_keyboard_value_mask_bell_percent, { "bell-percent", "x11.keyboard-value-mask.bell-percent", FT_BOOLEAN, 32, NULL, 0x0002, "" } },
+{ &hf_x11_keyboard_value_mask_bell_pitch, { "bell-pitch", "x11.keyboard-value-mask.bell-pitch", FT_BOOLEAN, 32, NULL, 0x0004, "" } },
+{ &hf_x11_keyboard_value_mask_bell_duration, { "bell-duration", "x11.keyboard-value-mask.bell-duration", FT_BOOLEAN, 32, NULL, 0x0008, "" } },
+{ &hf_x11_keyboard_value_mask_led, { "led", "x11.keyboard-value-mask.led", FT_BOOLEAN, 32, NULL, 0x0010, "" } },
+{ &hf_x11_keyboard_value_mask_led_mode, { "led-mode", "x11.keyboard-value-mask.led-mode", FT_BOOLEAN, 32, NULL, 0x0020, "" } },
+{ &hf_x11_keyboard_value_mask_keyboard_key, { "keyboard-key", "x11.keyboard-value-mask.keyboard-key", FT_BOOLEAN, 32, NULL, 0x0040, "" } },
+{ &hf_x11_keyboard_value_mask_auto_repeat_mode, { "auto-repeat-mode", "x11.keyboard-value-mask.auto-repeat-mode", FT_BOOLEAN, 32, NULL, 0x0080, "" } },
+{ &hf_x11_keycode_count, { "keycode-count", "x11.keycode-count", FT_UINT8, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_keycodes, { "keycodes", "x11.keycodes", FT_NONE, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_keycodes_item, { "item", "x11.keycodes.item", FT_BYTES, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_keycodes_per_modifier, { "keycodes-per-modifier", "x11.keycodes-per-modifier", FT_UINT8, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_keysyms, { "keysyms", "x11.keysyms", FT_NONE, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_keysyms_item, { "item", "x11.keysyms.item", FT_NONE, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_keysyms_item_keysym, { "keysym", "x11.keysyms.item.keysym", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_keysyms_per_keycode, { "keysyms-per-keycode", "x11.keysyms-per-keycode", FT_UINT8, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_led, { "led", "x11.led", FT_UINT8, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_led_mode, { "led-mode", "x11.led-mode", FT_UINT8, BASE_NONE, VALS(on_off_vals), 0, "" } },
+{ &hf_x11_left_pad, { "left-pad", "x11.left-pad", FT_UINT8, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_line_style, { "line-style", "x11.line-style", FT_UINT8, BASE_NONE, VALS(line_style_vals), 0, "" } },
+{ &hf_x11_line_width, { "line-width", "x11.line-width", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_long_length, { "long-length", "x11.long-length", FT_UINT32, BASE_DEC, NULL, 0, "The" } },
+{ &hf_x11_long_offset, { "long-offset", "x11.long-offset", FT_UINT32, BASE_DEC, NULL, 0, "The" } },
+{ &hf_x11_map, { "map", "x11.map", FT_BYTES, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_map_length, { "map-length", "x11.map-length", FT_UINT8, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_mask, { "mask", "x11.mask", FT_UINT32, BASE_NONE, VALS(zero_is_none_vals), 0, "" } },
+{ &hf_x11_mask_char, { "mask-char", "x11.mask-char", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_mask_font, { "mask-font", "x11.mask-font", FT_UINT32, BASE_NONE, VALS(zero_is_none_vals), 0, "" } },
+{ &hf_x11_max_names, { "max-names", "x11.max-names", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_mid, { "mid", "x11.mid", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_mode, { "mode", "x11.mode", FT_UINT8, BASE_NONE, VALS(mode_vals), 0, "" } },
+{ &hf_x11_modifiers_mask, { "modifiers-mask", "x11.modifiers-mask", FT_UINT16, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_modifiers_mask_Shift, { "Shift", "x11.modifiers-mask.Shift", FT_BOOLEAN, 16, NULL, 0x0001, "" } },
+{ &hf_x11_modifiers_mask_Lock, { "Lock", "x11.modifiers-mask.Lock", FT_BOOLEAN, 16, NULL, 0x0002, "" } },
+{ &hf_x11_modifiers_mask_Control, { "Control", "x11.modifiers-mask.Control", FT_BOOLEAN, 16, NULL, 0x0004, "" } },
+{ &hf_x11_modifiers_mask_Mod1, { "Mod1", "x11.modifiers-mask.Mod1", FT_BOOLEAN, 16, NULL, 0x0008, "" } },
+{ &hf_x11_modifiers_mask_Mod2, { "Mod2", "x11.modifiers-mask.Mod2", FT_BOOLEAN, 16, NULL, 0x0010, "" } },
+{ &hf_x11_modifiers_mask_Mod3, { "Mod3", "x11.modifiers-mask.Mod3", FT_BOOLEAN, 16, NULL, 0x0020, "" } },
+{ &hf_x11_modifiers_mask_Mod4, { "Mod4", "x11.modifiers-mask.Mod4", FT_BOOLEAN, 16, NULL, 0x0040, "" } },
+{ &hf_x11_modifiers_mask_Mod5, { "Mod5", "x11.modifiers-mask.Mod5", FT_BOOLEAN, 16, NULL, 0x0080, "" } },
+{ &hf_x11_modifiers_mask_AnyModifier, { "AnyModifier", "x11.modifiers-mask.AnyModifier", FT_UINT16, BASE_HEX, NULL, 0x8000, "" } },
+{ &hf_x11_modifiers_mask_erroneous_bits, { "erroneous-bits", "x11.modifiers-mask.erroneous-bits", FT_BOOLEAN, 16, NULL, 0xff00, "" } },
+{ &hf_x11_name, { "name", "x11.name", FT_STRING, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_name_length, { "name-length", "x11.name-length", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_odd_length, { "odd-length", "x11.odd-length", FT_BOOLEAN, 8, NULL, 0, "" } },
+{ &hf_x11_only_if_exists, { "only-if-exists", "x11.only-if-exists", FT_BOOLEAN, 8, NULL, 0, "" } },
+{ &hf_x11_opcode, { "opcode", "x11.opcode", FT_UINT8, BASE_NONE, VALS(opcode_vals), 0, "" } },
+{ &hf_x11_ordering, { "ordering", "x11.ordering", FT_UINT8, BASE_NONE, VALS(ordering_vals), 0, "" } },
+{ &hf_x11_override_redirect, { "override-redirect", "x11.override-redirect", FT_BOOLEAN, 8, NULL, 0, "Window" } },
+{ &hf_x11_owner, { "owner", "x11.owner", FT_UINT32, BASE_NONE, VALS(zero_is_none_vals), 0, "" } },
+{ &hf_x11_owner_events, { "owner-events", "x11.owner-events", FT_BOOLEAN, 8, NULL, 0, "" } },
+{ &hf_x11_parent, { "parent", "x11.parent", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_path, { "path", "x11.path", FT_NONE, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_path_string, { "string", "x11.path.string", FT_STRING, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_pattern, { "pattern", "x11.pattern", FT_STRING, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_pattern_length, { "pattern-length", "x11.pattern-length", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_percent, { "percent", "x11.percent", FT_UINT8, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_pid, { "pid", "x11.pid", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_pixel, { "pixel", "x11.pixel", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_pixels, { "pixels", "x11.pixels", FT_NONE, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_pixels_item, { "pixels_item", "x11.pixels_item", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_pixmap, { "pixmap", "x11.pixmap", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_plane_mask, { "plane-mask", "x11.plane-mask", FT_UINT32, BASE_NONE, VALS(plane_mask_vals), 0, "" } },
+{ &hf_x11_planes, { "planes", "x11.planes", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_point, { "point", "x11.point", FT_NONE, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_points, { "points", "x11.points", FT_NONE, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_point_x, { "point-x", "x11.point-x", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_point_y, { "point-y", "x11.point-y", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_pointer_event_mask, { "pointer-event-mask", "x11.pointer-event-mask", FT_UINT16, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_pointer_event_mask_ButtonPress, { "ButtonPress", "x11.pointer-event-mask.ButtonPress", FT_BOOLEAN, 16, NULL, 0x0004, "" } },
+{ &hf_x11_pointer_event_mask_ButtonRelease, { "ButtonRelease", "x11.pointer-event-mask.ButtonRelease", FT_BOOLEAN, 16, NULL, 0x0008, "" } },
+{ &hf_x11_pointer_event_mask_EnterWindow, { "EnterWindow", "x11.pointer-event-mask.EnterWindow", FT_BOOLEAN, 16, NULL, 0x0010, "" } },
+{ &hf_x11_pointer_event_mask_LeaveWindow, { "LeaveWindow", "x11.pointer-event-mask.LeaveWindow", FT_BOOLEAN, 16, NULL, 0x0020, "" } },
+{ &hf_x11_pointer_event_mask_PointerMotion, { "PointerMotion", "x11.pointer-event-mask.PointerMotion", FT_BOOLEAN, 16, NULL, 0x0040, "" } },
+{ &hf_x11_pointer_event_mask_PointerMotionHint, { "PointerMotionHint", "x11.pointer-event-mask.PointerMotionHint", FT_BOOLEAN, 16, NULL, 0x0080, "" } },
+{ &hf_x11_pointer_event_mask_Button1Motion, { "Button1Motion", "x11.pointer-event-mask.Button1Motion", FT_BOOLEAN, 16, NULL, 0x0100, "" } },
+{ &hf_x11_pointer_event_mask_Button2Motion, { "Button2Motion", "x11.pointer-event-mask.Button2Motion", FT_BOOLEAN, 16, NULL, 0x0200, "" } },
+{ &hf_x11_pointer_event_mask_Button3Motion, { "Button3Motion", "x11.pointer-event-mask.Button3Motion", FT_BOOLEAN, 16, NULL, 0x0400, "" } },
+{ &hf_x11_pointer_event_mask_Button4Motion, { "Button4Motion", "x11.pointer-event-mask.Button4Motion", FT_BOOLEAN, 16, NULL, 0x0800, "" } },
+{ &hf_x11_pointer_event_mask_Button5Motion, { "Button5Motion", "x11.pointer-event-mask.Button5Motion", FT_BOOLEAN, 16, NULL, 0x1000, "" } },
+{ &hf_x11_pointer_event_mask_ButtonMotion, { "ButtonMotion", "x11.pointer-event-mask.ButtonMotion", FT_BOOLEAN, 16, NULL, 0x2000, "" } },
+{ &hf_x11_pointer_event_mask_KeymapState, { "KeymapState", "x11.pointer-event-mask.KeymapState", FT_BOOLEAN, 16, NULL, 0x4000, "" } },
+{ &hf_x11_pointer_event_mask_erroneous_bits, { "erroneous-bits", "x11.pointer-event-mask.erroneous-bits", FT_BOOLEAN, 16, NULL, 0x8003, "" } },
+{ &hf_x11_pointer_mode, { "pointer-mode", "x11.pointer-mode", FT_UINT8, BASE_NONE, VALS(pointer_keyboard_mode_vals), 0, "" } },
+{ &hf_x11_prefer_blanking, { "prefer-blanking", "x11.prefer-blanking", FT_UINT8, BASE_NONE, VALS(yes_no_default_vals), 0, "" } },
+{ &hf_x11_properties, { "properties", "x11.properties", FT_NONE, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_properties_item, { "item", "x11.properties.item", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_property, { "property", "x11.property", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_property_number, { "property-number", "x11.property-number", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_rectangle_height, { "rectangle-height", "x11.rectangle-height", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_rectangles, { "rectangles", "x11.rectangles", FT_NONE, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_rectangle, { "rectangle", "x11.rectangle", FT_NONE, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_rectangle_width, { "rectangle-width", "x11.rectangle-width", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_rectangle_x, { "rectangle-x", "x11.rectangle-x", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_rectangle_y, { "rectangle-y", "x11.rectangle-y", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_red, { "red", "x11.red", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_reds, { "reds", "x11.reds", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_request, { "request", "x11.request", FT_UINT8, BASE_NONE, VALS(opcode_vals), 0, "" } },
+{ &hf_x11_requestor, { "requestor", "x11.requestor", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_request_length, { "request-length", "x11.request-length", FT_UINT16, BASE_DEC, NULL, 0, "Request" } },
+{ &hf_x11_resource, { "resource", "x11.resource", FT_UINT32, BASE_NONE, VALS(all_temporary_vals), 0, "" } },
+{ &hf_x11_revert_to, { "revert-to", "x11.revert-to", FT_UINT8, BASE_NONE, VALS(revert_to_vals), 0, "" } },
+{ &hf_x11_save_set_mode, { "save-set-mode", "x11.save-set-mode", FT_UINT8, BASE_NONE, VALS(insert_delete_vals), 0, "" } },
+{ &hf_x11_save_under, { "save-under", "x11.save-under", FT_BOOLEAN, 8, NULL, 0, "" } },
+{ &hf_x11_screen_saver_mode, { "screen-saver-mode", "x11.screen-saver-mode", FT_UINT8, BASE_NONE, VALS(screen_saver_mode_vals), 0, "" } },
+{ &hf_x11_segment, { "segment", "x11.segment", FT_NONE, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_segments, { "segments", "x11.segments", FT_NONE, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_segment_x1, { "segment_x1", "x11.segment_x1", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_segment_x2, { "segment_x2", "x11.segment_x2", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_segment_y1, { "segment_y1", "x11.segment_y1", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_segment_y2, { "segment_y2", "x11.segment_y2", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_selection, { "selection", "x11.selection", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_shape, { "shape", "x11.shape", FT_UINT8, BASE_NONE, VALS(shape_vals), 0, "" } },
+{ &hf_x11_sibling, { "sibling", "x11.sibling", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_source_pixmap, { "source-pixmap", "x11.source-pixmap", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_source_font, { "source-font", "x11.source-font", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_source_char, { "source-char", "x11.source-char", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_src_cmap, { "src-cmap", "x11.src-cmap", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_src_drawable, { "src-drawable", "x11.src-drawable", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_src_gc, { "src-gc", "x11.src-gc", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_src_height, { "src-height", "x11.src-height", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_src_width, { "src-width", "x11.src-width", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_src_window, { "src-window", "x11.src-window", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_src_x, { "src-x", "x11.src-x", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_src_y, { "src-y", "x11.src-y", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_start, { "start", "x11.start", FT_UINT32, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_stack_mode, { "stack-mode", "x11.stack-mode", FT_UINT8, BASE_NONE, VALS(stack_mode_vals), 0, "" } },
+{ &hf_x11_stipple, { "stipple", "x11.stipple", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_stop, { "stop", "x11.stop", FT_UINT32, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_str_number_in_path, { "str-number-in-path", "x11.str-number-in-path", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_string, { "string", "x11.string", FT_STRING, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_string16, { "string16", "x11.string16", FT_STRING, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_string16_bytes, { "bytes", "x11.string16.bytes", FT_BYTES, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_string_length, { "string-length", "x11.string-length", FT_UINT32, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_subwindow_mode, { "subwindow-mode", "x11.subwindow-mode", FT_UINT8, BASE_NONE, VALS(subwindow_mode_vals), 0, "" } },
+{ &hf_x11_target, { "target", "x11.target", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_textitem, { "textitem", "x11.textitem", FT_NONE, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_textitem_font, { "font", "x11.textitem.font", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_textitem_string, { "string", "x11.textitem.string", FT_NONE, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_textitem_string_delta, { "delta", "x11.textitem.string.delta", FT_INT8, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_textitem_string_string8, { "string8", "x11.textitem.string.string8", FT_STRING, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_textitem_string_string16, { "string16", "x11.textitem.string.string16", FT_STRING, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_textitem_string_string16_bytes, { "bytes", "x11.textitem.string.string16.bytes", FT_BYTES, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_threshold, { "threshold", "x11.threshold", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_tile, { "tile", "x11.tile", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_tile_stipple_x_origin, { "tile-stipple-x-origin", "x11.tile-stipple-x-origin", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_tile_stipple_y_origin, { "tile-stipple-y-origin", "x11.tile-stipple-y-origin", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_time, { "time", "x11.time", FT_UINT32, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_timeout, { "timeout", "x11.timeout", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_type, { "type", "x11.type", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_undecoded, { "undecoded", "x11.undecoded", FT_NONE, BASE_NONE, NULL, 0, "Yet" } },
+{ &hf_x11_unused, { "unused", "x11.unused", FT_NONE, BASE_NONE, NULL, 0, "" } },
+{ &hf_x11_visual, { "visual", "x11.visual", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_visualid, { "visualid", "x11.visualid", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_warp_pointer_dst_window, { "warp-pointer-dst-window", "x11.warp-pointer-dst-window", FT_UINT32, BASE_HEX, NULL, 0, "VALS(zero_is_none)" } },
+{ &hf_x11_warp_pointer_src_window, { "warp-pointer-src-window", "x11.warp-pointer-src-window", FT_UINT32, BASE_HEX, NULL, 0, "VALS(zero_is_none)" } },
+{ &hf_x11_wid, { "wid", "x11.wid", FT_UINT32, BASE_HEX, NULL, 0, "Window" } },
+{ &hf_x11_width, { "width", "x11.width", FT_UINT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_win_gravity, { "win-gravity", "x11.win-gravity", FT_UINT8, BASE_NONE, VALS(gravity_vals), 0, "" } },
+{ &hf_x11_window, { "window", "x11.window", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_window_class, { "window-class", "x11.window-class", FT_UINT16, BASE_NONE, VALS(window_class_vals), 0, "Window" } },
+{ &hf_x11_window_value_mask, { "window-value-mask", "x11.window-value-mask", FT_UINT32, BASE_HEX, NULL, 0, "" } },
+{ &hf_x11_window_value_mask_background_pixmap, { "background-pixmap", "x11.window-value-mask.background-pixmap", FT_BOOLEAN, 32, NULL, 0x00000001, "" } },
+{ &hf_x11_window_value_mask_background_pixel, { "background-pixel", "x11.window-value-mask.background-pixel", FT_BOOLEAN, 32, NULL, 0x00000002, "" } },
+{ &hf_x11_window_value_mask_border_pixmap, { "border-pixmap", "x11.window-value-mask.border-pixmap", FT_BOOLEAN, 32, NULL, 0x00000004, "" } },
+{ &hf_x11_window_value_mask_border_pixel, { "border-pixel", "x11.window-value-mask.border-pixel", FT_BOOLEAN, 32, NULL, 0x00000008, "" } },
+{ &hf_x11_window_value_mask_bit_gravity, { "bit-gravity", "x11.window-value-mask.bit-gravity", FT_BOOLEAN, 32, NULL, 0x00000010, "" } },
+{ &hf_x11_window_value_mask_win_gravity, { "win-gravity", "x11.window-value-mask.win-gravity", FT_BOOLEAN, 32, NULL, 0x00000020, "" } },
+{ &hf_x11_window_value_mask_backing_store, { "backing-store", "x11.window-value-mask.backing-store", FT_BOOLEAN, 32, NULL, 0x00000040, "" } },
+{ &hf_x11_window_value_mask_backing_planes, { "backing-planes", "x11.window-value-mask.backing-planes", FT_BOOLEAN, 32, NULL, 0x00000080, "" } },
+{ &hf_x11_window_value_mask_backing_pixel, { "backing-pixel", "x11.window-value-mask.backing-pixel", FT_BOOLEAN, 32, NULL, 0x00000100, "" } },
+{ &hf_x11_window_value_mask_override_redirect, { "override-redirect", "x11.window-value-mask.override-redirect", FT_BOOLEAN, 32, NULL, 0x00000200, "" } },
+{ &hf_x11_window_value_mask_save_under, { "save-under", "x11.window-value-mask.save-under", FT_BOOLEAN, 32, NULL, 0x00000400, "" } },
+{ &hf_x11_window_value_mask_event_mask, { "event-mask", "x11.window-value-mask.event-mask", FT_BOOLEAN, 32, NULL, 0x00000800, "" } },
+{ &hf_x11_window_value_mask_do_not_propagate_mask, { "do-not-propagate-mask", "x11.window-value-mask.do-not-propagate-mask", FT_BOOLEAN, 32, NULL, 0x00001000, "" } },
+{ &hf_x11_window_value_mask_colormap, { "colormap", "x11.window-value-mask.colormap", FT_BOOLEAN, 32, NULL, 0x00002000, "" } },
+{ &hf_x11_window_value_mask_cursor, { "cursor", "x11.window-value-mask.cursor", FT_BOOLEAN, 32, NULL, 0x00004000, "" } },
+{ &hf_x11_x, { "x", "x11.x", FT_INT16, BASE_DEC, NULL, 0, "" } },
+{ &hf_x11_y, { "y", "x11.y", FT_INT16, BASE_DEC, NULL, 0, "" } },
diff -uN ethereal.current/packet-x11.c ethereal.new/packet-x11.c
--- ethereal.current/packet-x11.c	Thu Jan  1 01:00:00 1970
+++ ethereal.new/packet-x11.c	Sun Jun 11 16:04:55 2000
@@ -0,0 +1,2952 @@
+/* packet-x11.c
+ * Routines for X11 dissection
+ * Copyright 2000, Christophe Tronche <ch.tronche@xxxxxxxxxxxx>
+ *
+ * $Id:$
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@xxxxxxxxxx>
+ * Copyright 1998 Gerald Combs
+ *
+ * Copied from README.developer
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/* TODO (in no particular order):
+ *
+ * - keep track of Atom creation by server to be able to display non predefined atoms
+ * - Idem for keysym <-> keycode ???
+ * - Idem for fonts 
+ * - Subtree the request ids (that is x11.create-window.window and x11.change-window.window should be 
+ *   distinct), and add hidden fields (so we still have x11.window).
+ * - add hidden fields so we can have x11.circulate-window in addition to x11.opcode == 13
+ * - add hidden fields so we have x11.listOfStuff.length
+ * - use a faster scheme that linear list searching for the opcode.
+ * - correct display of unicode chars.
+ * - Not everything is homogeneous, in particular the handling of items in list is a total mess.
+ */
+
+/* By the way, I wrote a program to generate every request and test
+ * that stuff. If you're interested, you can get it at
+ * http://tronche.com/gui/x/
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <X11/Xlib.h>
+#include <assert.h>
+#include <ctype.h>
+#include <gdk/gdk.h>
+#include <gdk/gdkx.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+
+#ifdef HAVE_NETINET_IN_H
+# include <netinet/in.h>
+#endif
+
+#ifdef NEED_SNPRINTF_H
+# ifdef HAVE_STDARG_H
+#  include <stdarg.h>
+# else
+#  include <varargs.h>
+# endif
+# include "snprintf.h"
+#endif
+
+#include <string.h>
+#include <glib.h>
+#include "packet.h"
+#include "packet-x11.h"
+
+#define cVALS(x) (const value_string*)(x)
+
+/* Initialize the protocol and registered fields */
+static int proto_x11 = -1;
+
+#include "packet-x11-declarations.h"
+
+/* Initialize the subtree pointers */
+static gint ett_x11 = -1;
+static gint ett_x11_request = -1;
+
+#define TCP_PORT_X11			6000
+#define TCP_PORT_X11_2			6001
+#define TCP_PORT_X11_3			6002
+
+/************************************************************************
+ ***                                                                  ***
+ ***         E N U M   T A B L E S   D E F I N I T I O N S            ***
+ ***                                                                  ***
+ ************************************************************************/
+
+static const value_string access_mode_vals[] = {
+      { 0, "Disable" },
+      { 1, "Enable" },
+      { 0, NULL }
+};
+
+static const value_string all_temporary_vals[] = {
+      { 0, "AllTemporary" },
+      { 0, NULL }
+};
+
+static const value_string alloc_vals[] = {
+      { 0, "None" },
+      { 1, "All" },
+      { 0, NULL }
+};
+
+static const value_string allow_events_mode_vals[] = {
+      { 0, "AsyncPointer" },
+      { 1, "SyncPointer" },
+      { 2, "ReplayPointer" },
+      { 3, "AsyncKeyboard" },
+      { 4, "SyncKeyboard" },
+      { 5, "ReplayKeyboard" },
+      { 6, "AsyncBoth" },
+      { 7, "SyncBoth" },
+      { 0, NULL }
+};
+
+static const value_string arc_mode_vals[] = {
+      { 0, "Chord" },
+      { 1, "PieSlice" },
+      { 0, NULL }
+};
+
+static const char *atom_predefined_interpretation[] = {
+      "<error>",
+      "PRIMARY",
+      "SECONDARY",
+      "ARC",
+      "ATOM",
+      "BITMAP",
+      "CARDINAL",
+      "COLORMAP",
+      "CURSOR",
+      "CUT_BUFFER0",
+      "CUT_BUFFER1",
+      "CUT_BUFFER2",
+      "CUT_BUFFER3",
+      "CUT_BUFFER4",
+      "CUT_BUFFER5",
+      "CUT_BUFFER6",
+      "CUT_BUFFER7",
+      "DRAWABLE",
+      "FONT",
+      "INTEGER",
+      "PIXMAP",
+      "POINT",
+      "RECTANGLE",
+      "RESOURCE_MANAGER",
+      "RGB_COLOR_MAP",
+      "RGB_BEST_MAP",
+      "RGB_BLUE_MAP",
+      "RGB_DEFAULT_MAP",
+      "RGB_GRAY_MAP",
+      "RGB_GREEN_MAP",
+      "RGB_RED_MAP",
+      "STRING",
+      "VISUALID",
+      "WINDOW",
+      "WM_COMMAND",
+      "WM_HINTS",
+      "WM_CLIENT_MACHINE",
+      "WM_ICON_NAME",
+      "WM_ICON_SIZE",
+      "WM_NAME",
+      "WM_NORMAL_HINTS",
+      "WM_SIZE_HINTS",
+      "WM_ZOOM_HINTS",
+      "MIN_SPACE",
+      "NORM_SPACE",
+      "MAX_SPACE",
+      "END_SPACE",
+      "SUPERSCRIPT_X",
+      "SUPERSCRIPT_Y",
+      "SUBSCRIPT_X",
+      "SUBSCRIPT_Y",
+      "UNDERLINE_POSITION",
+      "UNDERLINE_THICKNESS",
+      "STRIKEOUT_ASCENT",
+      "STRIKEOUT_DESCENT",
+      "ITALIC_ANGLE",
+      "X_HEIGHT",
+      "QUAD_WIDTH",
+      "WEIGHT",
+      "POINT_SIZE",
+      "RESOLUTION",
+      "COPYRIGHT",
+      "NOTICE",
+      "FONT_NAME",
+      "FAMILY_NAME",
+      "FULL_NAME",
+      "CAP_HEIGHT",
+      "WM_CLASS",
+      "WM_TRANSIENT_FOR",
+};
+
+static const value_string auto_repeat_mode_vals[] = {
+      { 0, "Off" },
+      { 1, "On" },
+      { 2, "Default" },
+      { 0, NULL }
+};
+
+static const value_string background_pixmap_vals[] = { 
+      { 0, "None" },
+      { 1, "ParentRelative" },
+      { 0, NULL }
+};
+
+static const value_string backing_store_vals[] = {
+      { 0, "NotUseful" },
+      { 1, "WhenMapped" },
+      { 2, "Always" },
+      { 0, NULL }
+};
+
+static const value_string border_pixmap_vals[] = { 
+      { 0, "CopyFromParent" },
+      { 0, NULL }
+};
+
+static const value_string button_vals[] = {
+      { 0x8000, "AnyButton" },
+      { 0, NULL }
+};
+
+static const value_string cap_style_vals[] = {
+      { 0, "NotLast" },
+      { 1, "Butt" },
+      { 2, "Round" },
+      { 3, "Projecting" },
+      { 0, NULL }
+};
+
+static const value_string class_vals[] = {
+      { 0, "Cursor" },
+      { 1, "Tile" },
+      { 2, "Stipple" },
+      { 0, NULL }
+};
+
+static const value_string close_down_mode_vals[] = {
+      { 0, "Destroy" },
+      { 1, "RetainPermanent" },
+      { 2, "RetainTemporary" },
+      { 0, NULL }
+};
+
+static const value_string coordinate_mode_vals[] = {
+      { 0, "Origin" },
+      { 1, "Previous" },
+      { 0, NULL }
+};
+
+static const value_string direction_vals[] = { 
+      { 0, "RaiseLowest" },
+      { 1, "LowerHighest" },
+      { 0, NULL }
+};
+
+static const value_string family_vals[] = {
+      { 0, "Internet" },
+      { 1, "DECnet" },
+      { 2, "Chaos" },
+      { 0, NULL }
+};
+
+static const value_string fill_rule_vals[] = {
+      { 0, "EvenOdd" },
+      { 1, "Winding" },
+      { 0, NULL }
+};
+
+static const value_string fill_style_vals[] = {
+      { 0, "Solid" },
+      { 1, "Tiled" },
+      { 2, "Stippled" },
+      { 3, "OpaqueStippled" },
+      { 0, NULL }
+};
+
+static const value_string focus_vals[] = {
+      { 0, "None" },
+      { 1, "PointerRoot" },
+      { 0, NULL }
+};
+
+static const value_string function_vals[] = {
+      {  0, "Clear" },
+      {  1, "And" },
+      {  2, "AndReverse" },
+      {  3, "Copy" },
+      {  4, "AndInverted" },
+      {  5, "NoOp" },
+      {  6, "Xor" },
+      {  7, "Or" },
+      {  8, "Nor" },
+      {  9, "Equiv" },
+      { 10, "Invert" },
+      { 11, "OrReverse" },
+      { 12, "CopyInverted" },
+      { 13, "OrInverted" },
+      { 14, "Nand" },
+      { 15, "Set" },  
+      {  0, NULL }
+};
+
+static const value_string gravity_vals[] = {
+      {  1, "NorthWest" },
+      {  2, "North" },
+      {  3, "NorthEast" },
+      {  4, "West" },
+      {  5, "Center" },
+      {  6, "East" },
+      {  7, "SouthWest" },
+      {  8, "South" },
+      {  9, "SouthEast" },
+      { 10, "Static" },
+      {  0, NULL }
+};
+
+static const value_string image_format_vals[] = {
+      { 0, "Bitmap" },
+      { 1, "XYPixmap" },
+      { 2, "ZPixmap" },
+      { 0, NULL }
+};
+
+static const value_string image_pixmap_format_vals[] = {
+      { 1, "XYPixmap" },
+      { 2, "ZPixmap" },
+      { 0, NULL }
+};
+
+static const value_string join_style_vals[] = {
+      { 0, "Miter" },
+      { 1, "Round" },
+      { 2, "Bevel" },
+      { 0, NULL }
+};
+
+static const value_string key_vals[] = {
+      { 0, "AnyKey" },
+      { 0, NULL }
+};
+
+#include "packet-x11-keysym.h"
+
+static const value_string line_style_vals[] = {
+      { 0, "Solid" },
+      { 1, "OnOffDash" },
+      { 2, "DoubleDash" },
+      { 0, NULL }
+};
+
+static const value_string mode_vals[] = {
+      { 0, "Replace" },
+      { 1, "Prepend" },
+      { 2, "Append" },
+      { 0, NULL }
+};
+
+static const value_string on_off_vals[] = {
+      { 0, "Off" },
+      { 1, "On" },
+      { 0, NULL }
+};
+
+static const value_string opcode_vals[] = {
+      {   1, "CreateWindow" },
+      {   2, "ChangeWindowAttributes" },
+      {   3, "GetWindowAttributes" }, 
+      {   4, "DestroyWindow" },
+      {   5, "DestroySubwindows" },
+      {   6, "ChangeSaveSet" },
+      {   7, "ReparentWindow" },
+      {   8, "MapWindow" },
+      {   9, "MapSubwindows" },
+      {  10, "UnmapWindow" },
+      {  11, "UnmapSubwindows" },
+      {  12, "ConfigureWindow" },
+      {  13, "CirculateWindow" },
+      {  14, "GetGeometry" },
+      {  15, "QueryTree" },
+      {  16, "InternAtom" },
+      {  17, "GetAtomName" },
+      {  18, "ChangeProperty" },
+      {  19, "DeleteProperty" },
+      {  20, "GetProperty" },
+      {  21, "ListProperties" },
+      {  22, "SetSelectionOwner" },
+      {  23, "GetSelectionOwner" },
+      {  24, "ConvertSelection" },
+
+      {  26, "GrabPointer" },
+      {  27, "UngrabPointer" },
+      {  28, "GrabButton" },
+      {  29, "UngrabButton" },
+      {  30, "ChangeActivePointerGrab" },
+      {  31, "GrabKeyboard" },
+      {  32, "UngrabKeyboard" },
+      {  33, "GrabKey" },
+      {  34, "UngrabKey" },
+      {  35, "AllowEvents" },
+      {  36, "GrabServer" },
+      {  37, "UngrabServer" },
+      {  38, "QueryPointer" },
+      {  39, "GetMotionEvents" },
+      {  40, "TranslateCoordinates" },
+      {  41, "WarpPointer" },
+      {  42, "SetInputFocus" },
+      {  43, "GetInputFocus" },
+      {  44, "QueryKeymap" },
+      {  45, "OpenFont" },
+      {  46, "CloseFont" },
+      {  47, "QueryFont" },
+      {  48, "QueryTextExtents" },
+      {  49, "ListFonts" },
+      {  50, "ListFontsWithInfo" },
+      {  51, "SetFontPath" },
+      {  52, "GetFontPath" },
+      {  53, "CreatePixmap" },
+      {  54, "FreePixmap" },
+      {  55, "CreateGC" },
+      {  56, "ChangeGC" },
+      {  57, "CopyGC" },
+      {  58, "SetDashes" },
+      {  59, "SetClipRectangles" },
+      {  60, "FreeGC" },
+      {  61, "ClearArea" },
+      {  62, "CopyArea" },
+      {  63, "CopyPlane" },
+      {  64, "PolyPoint" },
+      {  65, "PolyLine" },
+      {  66, "PolySegment" },
+      {  67, "PolyRectangle" },
+      {  68, "PolyArc" },
+      {  69, "FillPoly" },
+      {  70, "PolyFillRectangle" },
+      {  71, "PolyFillArc" },
+      {  72, "PutImage" },
+      {  73, "GetImage" },
+      {  74, "PolyText8" },
+      {  75, "PolyText16" },
+      {  76, "ImageText8" },
+      {  77, "ImageText16" },
+      {  78, "CreateColormap" },
+      {  79, "FreeColormap" },
+      {  80, "CopyColormapAndFree" },
+      {  81, "InstallColormap" },
+      {  82, "UninstallColormap" },
+      {  83, "ListInstalledColormaps" },
+      {  84, "AllocColor" },
+      {  85, "AllocNamedColor" },
+      {  86, "AllocColorCells" },
+      {  87, "AllocColorPlanes" },
+      {  88, "FreeColors" },
+      {  89, "StoreColors" },
+      {  90, "StoreNamedColor" },
+      {  91, "QueryColors" },
+      {  92, "LookupColor" },
+      {  93, "CreateCursor" },
+      {  94, "CreateGlyphCursor" },
+      {  95, "FreeCursor" },
+      {  96, "RecolorCursor" },
+      {  97, "QueryBestSize" },
+      {  98, "QueryExtension" },
+      {  99, "ListExtensions" },
+      { 100, "ChangeKeyboardMapping" },
+      { 101, "GetKeyboardMapping" },
+      { 102, "ChangeKeyboardControl" },
+      { 103, "GetKeyboardControl" },
+      { 104, "Bell" },
+      { 105, "ChangePointerControl" },
+      { 106, "GetPointerControl" },
+      { 107, "SetScreenSaver" },
+      { 108, "GetScreenSaver" },
+      { 109, "ChangeHosts" },
+      { 110, "ListHosts" },
+      { 111, "SetAccessControl" },
+      { 112, "SetCloseDownMode" },
+      { 113, "KillClient" },
+      { 114, "RotateProperties" },
+      { 115, "ForceScreenSaver" },
+      { 116, "SetPointerMapping" },
+      { 117, "GetPointerMapping" },
+      { 118, "SetModifierMapping" },
+      { 119, "GetModifierMapping" },
+      { 127, "NoOperation" },
+      { 0, NULL }
+};
+
+static const value_string ordering_vals[] = {
+      { 0, "UnSorted" },
+      { 1, "YSorted" },
+      { 2, "YXSorted" },
+      { 3, "YXBanded" },
+      { 0, NULL }
+};
+
+static const value_string plane_mask_vals[] = {
+      { AllPlanes, "AllPlanes" },
+      { 0, NULL }
+};
+
+static const value_string pointer_keyboard_mode_vals[] = {
+      { 0, "Synchronous" },
+      { 1, "Asynchronous" },
+      { 0, NULL }
+};
+
+static const value_string revert_to_vals[] = {
+      { 0, "None" },
+      { 1, "PointerRoot" },
+      { 2, "Parent" },
+      { 0, NULL }
+};
+
+static const value_string insert_delete_vals[] = {
+      { 0, "Insert" },
+      { 1, "Delete" },
+      { 0, NULL }
+};
+
+static const value_string screen_saver_mode_vals[] = {
+      { 0, "Reset" },
+      { 1, "Activate" },
+      { 0, NULL }
+};
+
+static const value_string shape_vals[] = {
+      { 0, "Complex" },
+      { 1, "Nonconvex" },
+      { 2, "Convex" },
+      { 0, NULL }
+};
+
+static const value_string stack_mode_vals[] = {
+      { 0, "Above" },
+      { 1, "Below" },
+      { 2, "TopIf" },
+      { 3, "BottomIf" },
+      { 4, "Opposite" },
+      { 0, NULL }
+};
+
+static const value_string subwindow_mode_vals[] = {
+      { 0, "ClipByChildren" },
+      { 1, "IncludeInferiors" },
+      { 0, NULL }
+};
+
+static const value_string window_class_vals[] = {
+      { 0, "CopyFromParent" },
+      { 1, "InputOutput" },
+      { 2, "InputOnly" },
+      { 0, NULL }
+};
+
+static const value_string yes_no_default_vals[] = {
+      { 0, "No" },
+      { 1, "Yes" },
+      { 2, "Default" },
+      { 0, NULL }
+};
+
+static const value_string zero_is_any_property_type_vals[] = {
+      { 0, "AnyPropertyType" },
+      { 0, NULL }
+};
+
+static const value_string zero_is_none_vals[] = {
+      { 0, "None" },
+      { 0, NULL }
+};
+
+/************************************************************************
+ ***                                                                  ***
+ ***         G L O B A L   V A R I A B L E S   ( A R G H H ! )        ***
+ ***                                                                  ***
+ ************************************************************************/
+
+static const u_char *pp = NULL;    /* The pd exported so it's visible to every routines */
+static const u_char *p = NULL;     /* The current data pointer in the pd buffer */
+static const u_char *nextp = NULL; /* Pointer to the next request in the pd buffer */    
+static int left = 0;               /* The number of bytes left in the pd buffer (may span several requests) */
+static tvbuff_t *tvb = NULL;
+static gboolean little_endian = TRUE;
+static proto_tree *t = NULL;
+
+static struct maskStruct {
+      guint32 _value;
+      int _offset;
+      int _zone;
+      proto_tree *_tree;
+} lastMask = { 0, 0, 0, NULL };
+
+/************************************************************************
+ ***                                                                  ***
+ ***           F I E L D   D E C O D I N G   M A C R O S              ***
+ ***                                                                  ***
+ ************************************************************************/
+
+#define VALUE16_LITTLE_ENDIAN(p) (((p)[0] | (p)[1] << 8))
+#define VALUE32_LITTLE_ENDIAN(p) (((p)[0] | (p)[1] << 8 | (p)[2] << 16 | (p)[3] << 24))
+#define VALUE16_BIG_ENDIAN(p) (((p)[1] | (p)[0] << 8))
+#define VALUE32_BIG_ENDIAN(p) (((p)[3] | (p)[2] << 8 | (p)[1] << 16 | (p)[0] << 24))
+
+#define VALUE8(p) ((p)[0])
+#define VALUE16(p) (little_endian ? VALUE16_LITTLE_ENDIAN(p) : VALUE16_BIG_ENDIAN(p))
+#define VALUE32(p) (little_endian ? VALUE32_LITTLE_ENDIAN(p) : VALUE32_BIG_ENDIAN(p))
+
+#define FIELD8(name)  (field8(hf_x11_##name))
+#define FIELD16(name) (field16(hf_x11_##name))
+#define FIELD32(name) (field32(hf_x11_##name))
+
+#define BITFIELD(TYPE, position, name) {\
+  if (lastMask._value & proto_registrar_get_nth(hf_x11_##position##_##name) -> bitmask) {\
+       int unused;\
+       const u_char *save = p;\
+       proto_tree_add_item(lastMask._tree, hf_x11_##position##_##name, tvb, lastMask._offset, \
+                           lastMask._zone, little_endian); \
+       TYPE(name);\
+       unused = save + 4 - p;\
+       if (unused)\
+           proto_tree_add_item(t, hf_x11_unused, tvb, p - pp, unused, little_endian);\
+       p = save + 4;\
+ }\
+}
+
+#define FLAG(position, name) {\
+  if (lastMask._value & proto_registrar_get_nth(hf_x11_##position##_mask##_##name) -> bitmask)\
+       proto_tree_add_boolean(lastMask._tree, hf_x11_##position##_mask##_##name, tvb, lastMask._offset, lastMask._zone, lastMask._value); }
+
+#define ATOM(name)     { atom(t, hf_x11_##name); }
+#define BITGRAVITY(name) { gravity(#name, hf_x11_##name, "Forget"); }
+#define BITMASK8(name) { bitmask(hf_x11_##name##_mask, 1); }
+#define BITMASK16(name) { bitmask(hf_x11_##name##_mask, 2); }
+#define BITMASK32(name)  { bitmask(hf_x11_##name##_mask, 4); }
+#define BOOL(name)     (boolean(#name, hf_x11_##name))
+#define BUTTON(name)   { FIELD8(name); }
+#define CARD8(name)    { FIELD8(name); }
+#define CARD16(name)   (FIELD16(name))
+#define CARD32(name)   (FIELD32(name))
+#define COLOR_FLAGS(name) { colorFlags(t); }
+#define COLORMAP(name) { FIELD32(name); }
+#define CURSOR(name)   { FIELD32(name); }
+#define DRAWABLE(name) { FIELD32(name); }
+#define ENUM8(name)    { FIELD8(name); }
+#define ENUM16(name)   { FIELD16(name); }
+#define FONT(name)     { FIELD32(name); }
+#define FONTABLE(name) { FIELD32(name); }
+#define GCONTEXT(name) { FIELD32(name); }
+#define INT8(name)     { FIELD8(name); }
+#define INT16(name)    { FIELD16(name); }
+#define KEYCODE(name)  { FIELD8(name); }
+#define LISTofARC(name) { listOfArc(hf_x11_##name, (nextp - p) / 12); }
+#define LISTofATOM(name, length) { listOfAtom(hf_x11_##name, (length) / 4); }
+#define LISTofBYTE(name, length) { listOfByte(hf_x11_##name, (length)); }
+#define LISTofCARD8(name, length) { listOfByte(hf_x11_##name, (length)); }
+#define LISTofCARD32(name, length) { listOfCard32(hf_x11_##name, hf_x11_##name##_item, (length) / 4); }
+#define LISTofCOLORITEM(name, length) { listOfColorItem(hf_x11_##name, (length) / 12); }
+#define LISTofKEYCODE(name, length) { listOfKeycode(hf_x11_##name, (length)); }
+#define LISTofKEYSYM(name, keycode_count, keysyms_per_keycode) { \
+      listOfKeysyms(hf_x11_##name, hf_x11_##name##_item, (keycode_count), (keysyms_per_keycode)); }
+#define LISTofPOINT(name, length) { listOfPoint(hf_x11_##name, (length) / 4); }
+#define LISTofRECTANGLE(name) { listOfRectangle(hf_x11_##name, (nextp - p) / 8); }
+#define LISTofSEGMENT(name) { listOfSegment(hf_x11_##name, (nextp - p) / 8); }
+#define LISTofSTRING8(name, length) { listOfString8(hf_x11_##name, hf_x11_##name##_string, (length)); }
+#define LISTofTEXTITEM8(name) { listOfTextItem(hf_x11_##name, FALSE); }
+#define LISTofTEXTITEM16(name) { listOfTextItem(hf_x11_##name, TRUE); }
+#define OPCODE()       { FIELD8(opcode); }
+#define PIXMAP(name)   { FIELD32(name); }
+#define REQUEST_LENGTH() (requestLength())
+#define SETofEVENT(name) { setOfEvent(); }
+#define SETofDEVICEEVENT(name) { setOfDeviceEvent();}
+#define SETofKEYMASK(name) { setOfKeyMask(); }
+#define SETofPOINTEREVENT(name) { setOfPointerEvent(); }
+#define STRING8(name, length)  { string8(#name, hf_x11_##name, length); }
+#define STRING16(name, length)  { string16(hf_x11_##name, hf_x11_##name##_bytes, length); }
+#define TIMESTAMP(name){ timestamp(#name, hf_x11_##name); }
+#define UNDECODED(x)   { proto_tree_add_item(t, hf_x11_undecoded, tvb, p - pp,  x, little_endian); p += x; }
+#define UNUSED(x)      { proto_tree_add_item(t, hf_x11_unused, tvb, p - pp,  x, little_endian); p += x; }
+#define PAD()          { if (nextp - p > 0) proto_tree_add_item(t, hf_x11_unused, tvb, p - pp, nextp - p, little_endian); p = nextp; }
+#define WINDOW(name)   { FIELD32(name); }
+#define WINGRAVITY(name) { gravity(#name, hf_x11_##name, "Unmap"); }
+
+#define VISUALID(name) { gint32 v = VALUE32(p); \
+    proto_tree_add_uint_format(t, hf_x11_##name, tvb, p - pp, 4, v, "Visualid: 0x%08x%s", v, \
+			       v ? "" : " (CopyFromParent)"); p += 4; }
+
+/************************************************************************
+ ***                                                                  ***
+ ***                  D E C O D I N G   F I E L D S                   ***
+ ***                                                                  ***
+ ************************************************************************/
+
+static void atom(proto_tree *t, int hf)
+{
+      const char *interpretation = NULL;
+
+      guint32 v = VALUE32(p);
+      if (v >= 1 && v < array_length(atom_predefined_interpretation))
+	    interpretation = atom_predefined_interpretation[v];
+      else if (v)
+	    interpretation = "Not a predefined atom";
+      else {
+	    struct header_field_info *hfi = proto_registrar_get_nth(hf);
+	    if (hfi -> strings)
+		  interpretation = match_strval(v, cVALS(hfi -> strings));
+      }
+      if (!interpretation) interpretation = "error in Xlib client program ?";
+      proto_tree_add_uint_format(t, hf, tvb, p - pp, 4, v, "%s: %d (%s)", 
+				 proto_registrar_get_nth(hf) -> name, v, interpretation);
+      p += 4;
+}
+
+static void bitmask(int hf, int size)
+{
+      lastMask._value = size == 2 ? VALUE16(p) : VALUE32(p);
+      lastMask._offset = p - pp;
+      lastMask._zone = size;
+      lastMask._tree = proto_tree_add_uint(t, hf, tvb, p - pp, size, lastMask._value);
+      p += size; 
+}
+
+static guint32 boolean(const char *nameAsChar, int hf)
+{
+      guint32 v = VALUE8(p);
+      proto_tree_add_boolean(t, hf, tvb, p - pp, 1, v);
+      p += 1;
+      return v;
+}
+
+static void colorFlags(proto_tree *t)
+{
+      unsigned do_red_green_blue = VALUE8(p);
+      proto_tree *tt;
+      
+      if (do_red_green_blue) {
+	    int sep = FALSE;
+	    char buffer[512];
+	    char *bp = buffer + sprintf(buffer, "flags: ");
+
+	    if (do_red_green_blue & 0x1) {
+		  bp += sprintf(bp, "DoRed");
+		  sep = TRUE;
+	    }
+
+	    if (do_red_green_blue & 0x2) {
+		  if (sep) bp += sprintf(bp, " | ");
+		  bp += sprintf(bp, "DoGreen");
+		  sep = TRUE;
+	    }
+
+	    if (do_red_green_blue & 0x4) {
+		  if (sep) bp += sprintf(bp, " | ");
+		  bp += sprintf(bp, "DoBlue");
+		  sep = TRUE;
+	    }
+
+	    if (do_red_green_blue & 0xf8) {
+		  if (sep) bp += sprintf(bp, " + ");
+		  sprintf(bp, "trash");
+	    }
+
+	    tt = proto_tree_add_uint_format(t, hf_x11_coloritem_flags, tvb, p - pp, 1, do_red_green_blue,
+					    "%s", buffer);
+	    if (do_red_green_blue & 0x1)
+		  proto_tree_add_boolean(tt, hf_x11_coloritem_flags_do_red, tvb, p - pp, 1, 
+					 do_red_green_blue & 0x1);
+	    if (do_red_green_blue & 0x2)
+		  proto_tree_add_boolean(tt, hf_x11_coloritem_flags_do_green, tvb, p - pp, 1, 
+					 do_red_green_blue & 0x2);
+	    if (do_red_green_blue & 0x4)
+		  proto_tree_add_boolean(tt, hf_x11_coloritem_flags_do_blue, tvb, p - pp, 1, 
+					 do_red_green_blue & 0x4);
+	    if (do_red_green_blue & 0xf8)
+		  proto_tree_add_boolean(tt, hf_x11_coloritem_flags_unused, tvb, p - pp, 1, 
+					 do_red_green_blue & 0xf8);
+      } else
+	    proto_tree_add_uint_format(t, hf_x11_coloritem_flags, tvb, p - pp, 1, do_red_green_blue,
+				       "flags: none");
+      p++;
+}
+
+static void gravity(const char *nameAsChar, int hf, const char *nullInterpretation)
+{
+      guint8 v = VALUE8(p);
+      if (!v)
+	    proto_tree_add_uint_format(t, hf, tvb, p - pp, 1, v, "%s: 0 (%s)", nameAsChar, 
+				       nullInterpretation);
+      else
+	    proto_tree_add_uint(t, hf, tvb, p - pp, 1, v);
+      p += 1;
+}
+
+static void listOfArc(int hf, int length)
+{
+      proto_tree *tt = proto_tree_add_item(t, hf, tvb, p - pp, length * 8, little_endian);
+      while(length--) {
+	    gint16 x = VALUE16(p);
+	    gint16 y = VALUE16(p + 2);
+	    guint16 width = VALUE16(p + 4);
+	    guint16 height = VALUE16(p + 6);
+	    gint16 angle1 = VALUE16(p + 8);
+	    gint16 angle2 = VALUE16(p + 10);
+
+	    proto_tree *ttt = proto_tree_add_protocol_format(tt, hf_x11_arc, tvb, p - pp, 12, 
+							     "arc: %dx%d%+d%+d, angle %d -> %d (%f° -> %f°)",
+							     width, height, x, y, angle1, angle2,
+							     angle1 / 64.0, angle2 / 64.0);
+	    proto_tree_add_int(ttt, hf_x11_arc_x, tvb, p - pp, 2, x); p += 2;
+	    proto_tree_add_int(ttt, hf_x11_arc_y, tvb, p - pp, 2, y); p += 2;
+	    proto_tree_add_uint(ttt, hf_x11_arc_width, tvb, p - pp, 2, y); p += 2;
+	    proto_tree_add_uint(ttt, hf_x11_arc_height, tvb, p - pp, 2, y); p += 2;
+	    proto_tree_add_int(ttt, hf_x11_arc_angle1, tvb, p - pp, 2, y); p += 2;
+	    proto_tree_add_int(ttt, hf_x11_arc_angle2, tvb, p - pp, 2, y); p += 2;
+      }
+}
+
+static void listOfAtom(int hf, int length)
+{
+      proto_tree *tt = proto_tree_add_item(t, hf, tvb, p - pp, length * 4, little_endian);
+      while(length--) {
+	    if (p + 4 > nextp) return;
+	    atom(tt, hf_x11_properties_item);
+      }
+}
+
+static void listOfByte(int hf, int length)
+{
+      if (p + length > nextp) length = nextp -  p;
+      if (length <= 0) length = 1;
+      proto_tree_add_bytes(t, hf, tvb, p - pp, length, p);
+      p += length;
+}
+
+static void listOfCard32(int hf, int hf_item, int length)
+{
+      proto_tree *tt = proto_tree_add_item(t, hf, tvb, p - pp, length * 4, little_endian);
+      while(length--) {
+	    if (p + 4 > nextp) return;
+	    proto_tree_add_uint(tt, hf_item, tvb, p - pp, 4, VALUE32(p));
+	    p += 4;
+      }
+}
+
+static void listOfColorItem(int hf, int length)
+{
+      proto_tree *tt = proto_tree_add_item(t, hf, tvb, p - pp, length * 8, little_endian);
+      while(length--) {
+	    proto_tree *ttt;
+	    unsigned do_red_green_blue;
+	    guint16 red, green, blue;
+	    char buffer[1024];
+	    char *bp;
+	    const char *sep;
+
+	    if (p + 12 > nextp) return;
+	    red = VALUE16(p + 4);
+	    green = VALUE16(p + 6);
+	    blue = VALUE16(p + 8);
+	    do_red_green_blue = VALUE8(p + 10);
+
+	    bp = buffer + sprintf(buffer, "colorItem: ");
+	    sep = "";
+	    if (do_red_green_blue & 0x1) { bp += sprintf(bp, "red = %d", red); sep = ", "; }
+	    if (do_red_green_blue & 0x2) { bp += sprintf(bp, "%sgreen = %d", sep, green); sep = ", "; }
+	    if (do_red_green_blue & 0x4) bp += sprintf(bp, "%sblue = %d", sep, blue);
+
+	    ttt = proto_tree_add_protocol_format(tt, hf_x11_coloritem, tvb, p - pp, 12, "%s", buffer);
+	    proto_tree_add_item(ttt, hf_x11_coloritem_pixel, tvb, p - pp, 4, little_endian); p += 4;
+	    proto_tree_add_item(ttt, hf_x11_coloritem_red, tvb, p - pp, 2, little_endian); p += 2;
+	    proto_tree_add_item(ttt, hf_x11_coloritem_green, tvb, p - pp, 2, little_endian); p += 2;
+	    proto_tree_add_item(ttt, hf_x11_coloritem_blue, tvb, p - pp, 2, little_endian); p += 2;
+	    colorFlags(ttt);
+	    proto_tree_add_item(ttt, hf_x11_coloritem_unused, tvb, p - pp, 1, little_endian); p++;
+      }
+}
+
+static GTree *keysymTable = NULL;
+
+static gint compareGuint32(gconstpointer a, gconstpointer b)
+{
+      return GPOINTER_TO_INT(b) - GPOINTER_TO_INT(a);;
+}
+
+static const char *keysymString(guint32 v)
+{
+      gpointer res;
+      if (!keysymTable) {
+
+            /* This table is so big that we built it only if necessary */
+
+	    const value_string *p = keysym_vals_source;
+	    keysymTable = g_tree_new(compareGuint32);
+	    for(; p -> strptr; p++)
+		  g_tree_insert(keysymTable, GINT_TO_POINTER(p -> value), p -> strptr);
+      }
+      res = g_tree_lookup(keysymTable, GINT_TO_POINTER(v));
+      return res ? res : "Unknown";
+}
+
+static const char *modifiers[] = { "Shift", "Lock", "Control", "Mod1", "Mod2", "Mod3", "Mod4", "Mod5" };
+
+static void listOfKeycode(int hf, int length)
+{
+      char buffer[1024];
+      proto_tree *tt = proto_tree_add_item(t, hf, tvb, p - pp, length * 8, little_endian);
+
+      while(length--) {
+	    char *bp = buffer;
+	    const char **m;
+	    int i;
+
+	    if (p + 8 > nextp) return;
+	    for(i = 8, m = modifiers; i; i--, m++) {
+		  u_char c = *p++;
+		  if (c) bp += sprintf(bp, "  %s=%d", *m, c);
+	    }
+
+	    proto_tree_add_bytes_format(tt, hf_x11_keycodes_item, tvb, p - 8 - pp, 8, p - 8,	"item: %s", buffer);
+      }
+}
+
+static void listOfKeysyms(int hf, int hf_item, int keycode_count, int keysyms_per_keycode)
+{
+      proto_tree *tt = proto_tree_add_item(t, hf, tvb, p - pp, keycode_count * keysyms_per_keycode * 4, little_endian);
+      proto_tree *ttt;
+      int i;
+      char buffer[128];
+      char *bp;
+
+      while(keycode_count--) {
+	    if (p + keysyms_per_keycode * 4 > nextp) return;
+	    bp = buffer + sprintf(buffer, "keysyms:");
+	    for(i = 0; i < keysyms_per_keycode; i++) {
+		  bp += sprintf(bp, " %s", keysymString(VALUE32(p + i * 4)));
+	    }
+	    *bp = '\0';
+	    ttt = proto_tree_add_protocol_format(tt, hf_item, tvb, p - pp, keysyms_per_keycode * 4,
+						 "%s", buffer);
+	    for(i = keysyms_per_keycode; i; i--) {
+		  guint32 v = VALUE32(p);
+		  proto_tree_add_uint_format(ttt, hf_x11_keysyms_item_keysym, tvb, p - pp, 4, v,
+					     "keysym: 0x%08x (%s)", v, keysymString(v));
+		  p += 4;
+	    }
+      }
+}
+
+static void listOfPoint(int hf, int length)
+{
+      proto_tree *tt = proto_tree_add_item(t, hf, tvb, p - pp, length * 4, little_endian);
+      while(length--) {
+	    gint16 x, y;
+	    proto_tree *ttt;
+
+	    if (p + 4 > nextp) return;
+	    x = VALUE16(p);
+	    y = VALUE16(p + 2);
+
+	    ttt = proto_tree_add_protocol_format(tt, hf_x11_point, tvb, p - pp, 4, "point: (%d,%d)", x, y);
+	    proto_tree_add_int(ttt, hf_x11_point_x, tvb, p - pp, 2, x); p += 2;
+	    proto_tree_add_int(ttt, hf_x11_point_y, tvb, p - pp, 2, y); p += 2;
+      }
+}
+
+static void listOfRectangle(int hf, int length)
+{
+      proto_tree *tt = proto_tree_add_item(t, hf, tvb, p - pp, length * 8, little_endian);
+      while(length--) {
+	    gint16 x, y;
+	    unsigned width, height;
+	    proto_tree *ttt;
+
+	    if (p + 8 > nextp) return;
+	    x = VALUE16(p);
+	    y = VALUE16(p + 2);
+	    width = VALUE16(p + 4);
+	    height = VALUE16(p + 6);
+
+	    ttt = proto_tree_add_protocol_format(tt, hf_x11_rectangle, tvb, p - pp, 8, 
+						 "rectangle: %dx%d%+d%+d", width, height, x, y);
+	    proto_tree_add_int(ttt, hf_x11_rectangle_x, tvb, p - pp, 2, x); p += 2;
+	    proto_tree_add_int(ttt, hf_x11_rectangle_y, tvb, p - pp, 2, y); p += 2;
+	    proto_tree_add_uint(ttt, hf_x11_rectangle_width, tvb, p - pp, 2, width); p += 2;
+	    proto_tree_add_uint(ttt, hf_x11_rectangle_height, tvb, p - pp, 2, height); p += 2;
+      }
+}
+
+static void listOfSegment(int hf, int length)
+{
+      proto_tree *tt = proto_tree_add_item(t, hf, tvb, p - pp, length * 8, little_endian);
+      while(length--) {
+	    gint16 x1, y1, x2, y2;
+	    proto_tree *ttt;
+	    if (p + 8 > nextp) return;
+	    x1 = VALUE16(p);
+	    y1 = VALUE16(p + 2);
+	    x2 = VALUE16(p + 4);
+	    y2 = VALUE16(p + 6);
+
+	    ttt = proto_tree_add_protocol_format(tt, hf_x11_segment, tvb, p - pp, 8, 
+						 "segment: (%d,%d)-(%d,%d)", x1, y1, x2, y2);
+	    proto_tree_add_item(ttt, hf_x11_segment_x1, tvb, p - pp, 2, little_endian); p += 2;
+	    proto_tree_add_item(ttt, hf_x11_segment_y1, tvb, p - pp, 2, little_endian); p += 2;
+	    proto_tree_add_item(ttt, hf_x11_segment_x2, tvb, p - pp, 2, little_endian); p += 2;
+	    proto_tree_add_item(ttt, hf_x11_segment_y2, tvb, p - pp, 2, little_endian); p += 2;
+      }
+}
+
+static void stringCopy(char *dest, const char *source, int length)
+{
+      char c;
+      while(length--) {
+	    c = *source++;
+	    if (!isgraph(c) && c != ' ') c = '.';
+	    *dest++ = c;
+      }
+      *dest++ = '\0';
+}
+
+static void listOfString8(int hf, int hf_item, int length)
+{
+      char *s = NULL;
+      int allocated = 0;
+      proto_tree *tt;
+      int i;
+
+      /* Compute total length */
+      
+      const unsigned char *xp = p;
+      int l;
+      for(i = length; i; i--) {
+	    l = *xp++;
+	    xp += l;
+      }
+
+      tt = proto_tree_add_item(t, hf, tvb, p - pp, xp - p, little_endian);
+
+      while(length--) {
+	    unsigned l = VALUE8(p);
+	    if (allocated < l + 1) {
+		  /* g_realloc doesn't work ??? */
+		  g_free(s);
+		  s = g_malloc(l + 1);
+		  allocated = l + 1;
+	    }
+	    stringCopy(s, p + 1, l); /* Nothing better for now. We need a better string handling API. */
+	    proto_tree_add_string_format(tt, hf_item, tvb, p - pp, l + 1, s, "\"%s\"", s);
+	    p += l + 1;
+      }
+      g_free(s);
+}
+
+#define STRING16_MAX_DISPLAYED_LENGTH 150
+
+static int stringIsActuallyAn8BitString(const char *p, unsigned length)
+{
+      if (length > STRING16_MAX_DISPLAYED_LENGTH) length = STRING16_MAX_DISPLAYED_LENGTH;
+      for(; length > 0; p += 2, length--) if (*p) return FALSE;
+      return TRUE;
+}
+
+/* length is the length of the _byte_zone_ (that is, twice the length of the string) */
+
+static void string16_with_buffer_preallocated(proto_tree *t, int hf, int hf_bytes,
+					      const unsigned char *p, unsigned length,
+					      char **s, int *sLength)
+{
+      int truncated = FALSE;
+      unsigned l = length / 2;
+
+      if (stringIsActuallyAn8BitString(p, l)) {
+	    char *dp;
+	    const char *sp = p;
+
+	    if (l > STRING16_MAX_DISPLAYED_LENGTH) {
+		  truncated = TRUE;
+		  l = STRING16_MAX_DISPLAYED_LENGTH;
+	    }
+	    if (*sLength < l + 3) {
+		  g_free(*s);
+		  *s = g_malloc(l + 3);
+		  *sLength = l + 3;
+	    }
+	    dp = *s;
+	    *dp++ = '"';
+	    if (truncated) l -= 3;
+
+	    while(l--) {
+		  sp++;
+		  *dp++ = *sp++;
+	    }
+	    *dp++ = '"';
+
+	    /* If truncated, add an ellipsis */
+	    if (truncated) { *dp++ = '.'; *dp++ = '.'; *dp++ = '.'; }
+
+	    *dp++ = '\0';
+	    proto_tree_add_string_format(t, hf, tvb, p - pp, length, p, "%s: %s", 
+					proto_registrar_get_nth(hf) -> name, *s);
+      } else
+	    proto_tree_add_bytes(t, hf_bytes, tvb, p - pp, length, p);
+
+}
+
+static void listOfTextItem(int hf, int sizeIs16)
+{
+      int allocated = 0;
+      char *s = NULL;
+      proto_tree *tt;
+      guint32 fid;
+
+      /* Compute total length */
+      
+      const unsigned char *xp = p; /* Scanning pointer */
+      int l;                       /* Length of an individual item */
+      int n = 0;                   /* Number of items */
+      while(xp < nextp) {
+	    l = *xp++;
+	    if (!l) break;
+	    n++;
+	    xp += l == 255 ? 4 : l + (sizeIs16 ? l : 0) + 1;
+      }
+
+      tt = proto_tree_add_item(t, hf, tvb, p - pp, xp - p, little_endian);
+
+      while(n--) {
+	    unsigned l = VALUE8(p);
+	    if (l == 255) { /* Item is a font */
+		  fid = VALUE32_BIG_ENDIAN(p + 1);
+		  proto_tree_add_uint(tt, hf_x11_textitem_font, tvb, p - pp, 5, fid);
+		  p += 5;
+	    } else { /* Item is a string */
+		  proto_tree *ttt;
+		  gint8 delta = VALUE8(p + 1);
+		  if (sizeIs16) l += l;
+		  if (allocated < l + 1) {
+			/* g_realloc doesn't work ??? */
+			g_free(s);
+			s = g_malloc(l + 1);
+			allocated = l + 1;
+		  }
+		  stringCopy(s, p + 2, l);
+		  ttt = proto_tree_add_protocol_format(tt, hf_x11_textitem_string, tvb, p - pp, l + 2,
+						       "textitem (string): delta = %d, \"%s\"",
+						       delta, s);
+		  proto_tree_add_item(ttt, hf_x11_textitem_string_delta, tvb, p - pp + 1, 1, little_endian);
+		  if (sizeIs16)
+			string16_with_buffer_preallocated(ttt, hf_x11_textitem_string_string16, 
+							  hf_x11_textitem_string_string16_bytes,
+							  p + 2, l,
+							   &s, &allocated);
+		  else
+			proto_tree_add_string_format(ttt, hf_x11_textitem_string_string8, tvb, 
+						     p - pp + 2, l, s, "\"%s\"", s);
+		  p += l + 2;
+	    }
+      }
+      g_free(s);
+}
+
+static guint32 field8(int hf)
+{
+      guint32 v = VALUE8(p);
+      struct header_field_info *hfi = proto_registrar_get_nth(hf);
+      gchar *enumValue = NULL;
+      gchar *nameAsChar = hfi -> name;
+
+      if (hfi -> strings)
+	    enumValue = match_strval(v, cVALS(hfi -> strings));
+      if (enumValue)
+	    proto_tree_add_uint_format(t, hf, tvb, p - pp, 1, v, "%s: %d (%s)", nameAsChar, v, enumValue);
+      else
+	    proto_tree_add_item(t, hf, tvb, p - pp, 1, little_endian);
+      p += 1;
+      return v;
+}
+
+static guint32 field16(int hf)
+{
+      guint32 v = VALUE16(p);
+      proto_tree_add_item(t, hf, tvb, p - pp, 2, v);
+      p += 2;
+      return v;
+}
+
+static guint32 field32(int hf)
+{
+      guint32 v = VALUE32(p);
+      struct header_field_info *hfi = proto_registrar_get_nth(hf);
+      gchar *enumValue = NULL;
+      gchar *nameAsChar = hfi -> name;
+
+      if (hfi -> strings)
+	    enumValue = match_strval(v, cVALS(hfi -> strings));
+      if (enumValue)
+	    proto_tree_add_uint_format(t, hf, tvb, p - pp, 4, v, "%s: 0x%08x (%s)", nameAsChar, v, enumValue);
+      else
+	    proto_tree_add_uint_format(t, hf, tvb, p - pp, 4, v, 
+				       hfi -> display == BASE_DEC ? "%s: %d" : "%s : 0x%08x",
+				       nameAsChar, v);
+      p += 4;
+      return v;
+}
+
+static void gcAttributes()
+{
+      BITMASK32(gc_value);
+      BITFIELD(ENUM8,  gc_value_mask, function);
+      BITFIELD(CARD32, gc_value_mask, plane_mask);
+      BITFIELD(CARD32, gc_value_mask, foreground);
+      BITFIELD(CARD32, gc_value_mask, background);
+      BITFIELD(CARD16, gc_value_mask, line_width);
+      BITFIELD(ENUM8,  gc_value_mask, line_style);
+      BITFIELD(ENUM8,  gc_value_mask, cap_style);
+      BITFIELD(ENUM8,  gc_value_mask, join_style);
+      BITFIELD(ENUM8,  gc_value_mask, fill_style);
+      BITFIELD(ENUM8,  gc_value_mask, fill_rule);
+      BITFIELD(PIXMAP, gc_value_mask, tile);
+      BITFIELD(PIXMAP, gc_value_mask, stipple);
+      BITFIELD(INT16,  gc_value_mask, tile_stipple_x_origin);
+      BITFIELD(INT16,  gc_value_mask, tile_stipple_y_origin);
+      BITFIELD(FONT,   gc_value_mask, font);
+      BITFIELD(ENUM8,  gc_value_mask, subwindow_mode);
+      BITFIELD(BOOL,   gc_value_mask, graphics_exposures);
+      BITFIELD(INT16,  gc_value_mask, clip_x_origin);
+      BITFIELD(INT16,  gc_value_mask, clip_y_origin);
+      BITFIELD(PIXMAP, gc_value_mask, clip_mask);
+      BITFIELD(CARD16, gc_value_mask, dash_offset);
+      BITFIELD(CARD8,  gc_value_mask, gc_dashes);
+      BITFIELD(ENUM8,  gc_value_mask, arc_mode);
+}
+
+static void gcMask()
+{
+      BITMASK32(gc_value);
+      FLAG(gc_value, function);
+      FLAG(gc_value, plane_mask);
+      FLAG(gc_value, foreground);
+      FLAG(gc_value, background);
+      FLAG(gc_value, line_width);
+      FLAG(gc_value, line_style);
+      FLAG(gc_value, cap_style);
+      FLAG(gc_value, join_style);
+      FLAG(gc_value, fill_style);
+      FLAG(gc_value, fill_rule);
+      FLAG(gc_value, tile);
+      FLAG(gc_value, stipple);
+      FLAG(gc_value, tile_stipple_x_origin);
+      FLAG(gc_value, tile_stipple_y_origin);
+      FLAG(gc_value, font);
+      FLAG(gc_value, subwindow_mode);
+      FLAG(gc_value, graphics_exposures);
+      FLAG(gc_value, clip_x_origin);
+      FLAG(gc_value, clip_y_origin);
+      FLAG(gc_value, clip_mask);
+      FLAG(gc_value, dash_offset);
+      FLAG(gc_value, gc_dashes);
+      FLAG(gc_value, arc_mode);
+}
+
+static guint32 requestLength()
+{
+      guint32 res = VALUE16(p) * 4;
+      proto_tree_add_uint(t, hf_x11_request_length, tvb, p - pp, 2, res);
+      p += 2;
+      return res;
+}
+
+static void setOfEvent() {
+      struct maskStruct save = lastMask;
+      BITMASK32(event);
+      FLAG(event, KeyPress);
+      FLAG(event, KeyRelease);
+      FLAG(event, ButtonPress);
+      FLAG(event, ButtonRelease);
+      FLAG(event, EnterWindow);
+      FLAG(event, LeaveWindow);
+      FLAG(event, PointerMotion);
+      FLAG(event, PointerMotionHint);
+      FLAG(event, Button1Motion);
+      FLAG(event, Button2Motion);
+      FLAG(event, Button3Motion);
+      FLAG(event, Button4Motion);
+      FLAG(event, Button5Motion);
+      FLAG(event, ButtonMotion);
+      FLAG(event, KeymapState);
+      FLAG(event, Exposure);
+      FLAG(event, VisibilityChange);
+      FLAG(event, StructureNotify);
+      FLAG(event, ResizeRedirect);
+      FLAG(event, SubstructureNotify);
+      FLAG(event, SubstructureRedirect);
+      FLAG(event, FocusChange);
+      FLAG(event, PropertyChange);
+      FLAG(event, ColormapChange);
+      FLAG(event, OwnerGrabButton);
+      FLAG(event, erroneous_bits);
+      lastMask = save;
+}
+
+static void setOfDeviceEvent() {
+      struct maskStruct save = lastMask;
+      BITMASK32(do_not_propagate);
+      FLAG(do_not_propagate, KeyPress);
+      FLAG(do_not_propagate, KeyRelease);
+      FLAG(do_not_propagate, ButtonPress);
+      FLAG(do_not_propagate, ButtonRelease);
+      FLAG(do_not_propagate, PointerMotion);
+      FLAG(do_not_propagate, Button1Motion);
+      FLAG(do_not_propagate, Button2Motion);
+      FLAG(do_not_propagate, Button3Motion);
+      FLAG(do_not_propagate, Button4Motion);
+      FLAG(do_not_propagate, Button5Motion);
+      FLAG(do_not_propagate, ButtonMotion);
+      FLAG(do_not_propagate, erroneous_bits);
+      lastMask = save;
+}
+
+static void setOfKeyMask()
+{
+      struct maskStruct save = lastMask;
+      lastMask._value = VALUE16(p);
+      lastMask._offset = p - pp;
+      lastMask._zone = 2;
+      if (lastMask._value == 0x8000)
+	    proto_tree_add_uint_format(t, hf_x11_modifiers_mask_AnyModifier, tvb, p - pp, 2, 0x8000,
+				       "modifiers-masks: 0x8000 (AnyModifier)");
+      else {
+	    lastMask._tree = proto_tree_add_uint(t, hf_x11_modifiers_mask, tvb, p - pp, 2, 
+						 lastMask._value);
+	    FLAG(modifiers, Shift);
+	    FLAG(modifiers, Lock);
+	    FLAG(modifiers, Control);
+	    FLAG(modifiers, Mod1);
+	    FLAG(modifiers, Mod2);
+	    FLAG(modifiers, Mod3);
+	    FLAG(modifiers, Mod4);
+	    FLAG(modifiers, Mod5);
+	    FLAG(modifiers, erroneous_bits);
+      }
+      lastMask = save;
+      p += 2; 
+}
+
+static void setOfPointerEvent() {
+      struct maskStruct save = lastMask;
+      BITMASK16(pointer_event);
+      FLAG(pointer_event, ButtonPress);
+      FLAG(pointer_event, ButtonRelease);
+      FLAG(pointer_event, EnterWindow);
+      FLAG(pointer_event, LeaveWindow);
+      FLAG(pointer_event, PointerMotion);
+      FLAG(pointer_event, PointerMotionHint);
+      FLAG(pointer_event, Button1Motion);
+      FLAG(pointer_event, Button2Motion);
+      FLAG(pointer_event, Button3Motion);
+      FLAG(pointer_event, Button4Motion);
+      FLAG(pointer_event, Button5Motion);
+      FLAG(pointer_event, ButtonMotion);
+      FLAG(pointer_event, KeymapState);
+      FLAG(pointer_event, erroneous_bits);
+      lastMask = save;
+}
+
+static void string8(const char *nameAsChar, int hf, unsigned length)
+{
+      char *s = g_malloc(length + 1);
+      stringCopy(s, p, length);
+      proto_tree_add_string_format(t, hf, tvb, p - pp, length, s, "%s: %s", nameAsChar, s);
+      g_free(s);
+      p += length;
+}
+
+/* The length is the length of the _byte_zone_ (twice the length of the string) */
+
+static void string16(int hf, int hf_bytes, unsigned length)
+{
+      char *s = NULL;
+      unsigned l = 0;
+      length += length;
+      string16_with_buffer_preallocated(t, hf, hf_bytes, p, length, &s, &l);
+      g_free(s);
+      p += length;
+}
+
+static void timestamp(const char *nameAsChar, int hf)
+{
+      guint32 v = VALUE32(p);
+      if (!v)
+	    proto_tree_add_uint_format(t, hf, tvb, p - pp, 4, 0, "%s: 0 (CurrentTime)", nameAsChar);
+      else
+	    proto_tree_add_uint(t, hf, tvb, p - pp, 4, v);
+      p += 4;
+}
+
+static void windowAttributes()
+{
+      BITMASK32(window_value);
+      BITFIELD(PIXMAP, window_value_mask, background_pixmap);
+      BITFIELD(CARD32, window_value_mask, background_pixel);
+      BITFIELD(PIXMAP, window_value_mask, border_pixmap);
+      BITFIELD(CARD32, window_value_mask, border_pixel);
+      BITFIELD(BITGRAVITY, window_value_mask, bit_gravity);
+      BITFIELD(WINGRAVITY, window_value_mask, win_gravity);
+      BITFIELD(ENUM8, window_value_mask, backing_store);
+      BITFIELD(CARD32, window_value_mask, backing_planes);
+      BITFIELD(CARD32, window_value_mask, backing_pixel);
+      BITFIELD(BOOL,   window_value_mask, override_redirect);
+      BITFIELD(BOOL,   window_value_mask, save_under);
+      BITFIELD(SETofEVENT, window_value_mask, event_mask);
+      BITFIELD(SETofDEVICEEVENT, window_value_mask, do_not_propagate_mask);
+      BITFIELD(COLORMAP, window_value_mask, colormap);
+      BITFIELD(CURSOR, window_value_mask, cursor);
+}
+
+/************************************************************************
+ ***                                                                  ***
+ ***              D E C O D I N G   O N E   P A C K E T               ***
+ ***                                                                  ***
+ ************************************************************************/
+
+static void dissect_x11_request_loop(proto_tree *root)
+{
+      int nextLeft;
+      proto_item *ti;
+      guint8 v8, v8_2;
+      guint16 v16;
+      guint32 v32;
+
+      for(;;) {
+	    int length, opcode;
+	    
+	    /* fprintf(stderr, "Starting loop, left = %d, offset = %d\n", left, p - pp); */
+	    if (left < 4) return;
+	    length = VALUE16(p + 2) * 4;
+	    /*	    fprintf(stderr, "length = %d\n", length);*/
+	    if (left < length || length < 4) return;
+
+	    ti = proto_tree_add_uint(root, hf_x11_request, tvb, p - pp, length, *p);
+	    t = proto_item_add_subtree(ti, ett_x11_request);
+
+	    nextp = p + length;
+	    nextLeft = left - length;
+	    opcode = *p;
+
+	    OPCODE();
+	    switch(opcode) {
+		case 1: /* CreateWindow */
+		  CARD8(depth);
+		  REQUEST_LENGTH();
+		  WINDOW(wid);
+		  WINDOW(parent);
+		  INT16(x);
+		  INT16(y);
+		  CARD16(width);
+		  CARD16(height);
+		  CARD16(border_width);
+		  ENUM16(window_class);
+		  VISUALID(visual);
+		  windowAttributes();
+		  break;
+
+		case 2: /* ChangeWindowAttributes */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  WINDOW(window);
+		  windowAttributes();
+		  break;
+
+		case 3: /* GetWindowAttributes */
+		case 4: /* DestroyWindow */
+		case 5: /* DestroySubwindows */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  WINDOW(window);
+		  break;
+
+		case 6: /* ChangeSaveSet */
+		  ENUM8(save_set_mode);
+		  REQUEST_LENGTH();
+		  WINDOW(window);
+		  break;
+
+		case 7: /* ReparentWindow */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  WINDOW(window);
+		  WINDOW(parent);
+		  INT16(x);
+		  INT16(y);
+		  break;
+
+		case 8: /* MapWindow */
+		case 9: /* MapSubWindow */
+		case 10: /* UnmapWindow */
+		case 11: /* UnmapSubwindows */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  WINDOW(window);
+		  break;
+
+		case 12: /* ConfigureWindow */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  WINDOW(window);
+		  BITMASK16(configure_window);
+		  UNUSED(2); 
+		  BITFIELD(INT16,  configure_window_mask, x);
+		  BITFIELD(INT16,  configure_window_mask, y);
+		  BITFIELD(CARD16, configure_window_mask, width);
+		  BITFIELD(CARD16, configure_window_mask, height);
+		  BITFIELD(CARD16, configure_window_mask, border_width);
+		  BITFIELD(WINDOW, configure_window_mask, sibling);
+		  BITFIELD(ENUM8,  configure_window_mask, stack_mode);
+		  PAD();
+		  break;
+
+		case 13: /* CirculateWindow */
+		  ENUM8(direction);
+		  REQUEST_LENGTH();
+		  WINDOW(window);
+		  break;
+
+		case 14: /* GetGeometry */
+		case 15: /* QueryTree */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  DRAWABLE(drawable);
+		  break;
+
+		case 16: /* InternAtom */
+		  BOOL(only_if_exists);
+		  REQUEST_LENGTH();
+		  v16 = FIELD16(name_length);
+		  UNUSED(2);
+		  STRING8(name, v16);
+		  PAD();
+		  break;
+
+		case 17: /* GetAtomName */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  ATOM(atom);
+		  break;
+
+		case 18: /* ChangeProperty */
+		  ENUM8(mode);
+		  REQUEST_LENGTH();
+		  WINDOW(window);
+		  ATOM(property);
+		  ATOM(type);
+		  CARD8(format);
+		  UNUSED(3);
+		  v32 = CARD32(data_length);
+		  LISTofBYTE(data, v32);
+		  PAD();
+		  break;
+
+		case 19: /* DeleteProperty */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  WINDOW(window);
+		  ATOM(property);
+		  break;
+
+		case 20: /* GetProperty */
+		  BOOL(delete);
+		  REQUEST_LENGTH();
+		  WINDOW(window);
+		  ATOM(property);
+		  ATOM(get_property_type);
+		  CARD32(long_offset);
+		  CARD32(long_length);
+		  break;
+
+		case 21: /* ListProperties */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  WINDOW(window);
+		  break;
+
+		case 22: /* SetSelectionOwner */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  WINDOW(owner);
+		  ATOM(selection);
+		  TIMESTAMP(time);
+		  break;
+
+		case 23: /* GetSelectionOwner */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  ATOM(selection);
+		  break;
+
+		case 24: /* ConvertSelection */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  WINDOW(requestor);
+		  ATOM(selection);
+		  ATOM(target);
+		  ATOM(property);
+		  TIMESTAMP(time);
+		  break;
+
+		case 26: /* GrabPointer */
+		  BOOL(owner_events);
+		  REQUEST_LENGTH();
+		  WINDOW(grab_window);
+		  SETofPOINTEREVENT(pointer_event_mask);
+		  ENUM8(pointer_mode);
+		  ENUM8(keyboard_mode);
+		  WINDOW(confine_to);
+		  CURSOR(cursor);
+		  TIMESTAMP(time);
+		  break;
+
+		case 27: /* UngrabPointer */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  TIMESTAMP(time);
+		  break;
+
+		case 28: /* GrabButton */
+		  BOOL(owner_events);
+		  REQUEST_LENGTH();
+		  WINDOW(grab_window);
+		  SETofPOINTEREVENT(event_mask);
+		  ENUM8(pointer_mode);
+		  ENUM8(keyboard_mode);
+		  WINDOW(confine_to);
+		  CURSOR(cursor);
+		  BUTTON(button);
+		  UNUSED(1);
+		  SETofKEYMASK(modifiers);
+		  break;
+
+		case 29: /* UngrabButton */
+		  BUTTON(button);
+		  REQUEST_LENGTH();
+		  WINDOW(grab_window);
+		  SETofKEYMASK(modifiers);
+		  UNUSED(2);
+		  break;
+
+		case 30: /* ChangeActivePointerGrab */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  CURSOR(cursor);
+		  TIMESTAMP(time);
+		  SETofPOINTEREVENT(event_mask);
+		  UNUSED(2);
+		  break;
+
+		case 31: /* GrabKeyboard */
+		  BOOL(owner_events);
+		  REQUEST_LENGTH();
+		  WINDOW(grab_window);
+		  TIMESTAMP(time);
+		  ENUM8(pointer_mode);
+		  ENUM8(keyboard_mode);
+		  UNUSED(2);
+		  break;
+
+		case 32: /* UngrabKeyboard */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  TIMESTAMP(time);
+		  break;
+
+		case 33: /* GrabKey */
+		  BOOL(owner_events);
+		  REQUEST_LENGTH();
+		  WINDOW(grab_window);
+		  SETofKEYMASK(modifiers);
+		  KEYCODE(key);
+		  ENUM8(pointer_mode);
+		  ENUM8(keyboard_mode);
+		  UNUSED(3);
+		  break;
+
+		case 34: /* UngrabKey */
+		  KEYCODE(key);
+		  REQUEST_LENGTH();
+		  WINDOW(grab_window);
+		  SETofKEYMASK(modifiers);
+		  UNUSED(2);
+		  break;
+
+		case 35: /* AllowEvents */
+		  ENUM8(allow_events_mode);
+		  REQUEST_LENGTH();
+		  TIMESTAMP(time);
+		  break;
+
+		case 36: /* GrabServer */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  break;
+
+		case 37: /* UngrabServer */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  break;
+
+		case 38: /* QueryPointer */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  WINDOW(window);
+		  break;
+
+		case 39: /* GetMotionEvents */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  WINDOW(window);
+		  TIMESTAMP(start);
+		  TIMESTAMP(stop);
+		  break;
+
+		case 40: /* TranslateCoordinates */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  WINDOW(src_window);
+		  WINDOW(dst_window);
+		  INT16(src_x);
+		  INT16(src_y);
+		  break;
+
+		case 41: /* WarpPointer */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  WINDOW(warp_pointer_src_window);
+		  WINDOW(warp_pointer_dst_window);
+		  INT16(src_x);
+		  INT16(src_y);
+		  CARD16(src_width);
+		  CARD16(src_height);
+		  INT16(dst_x);
+		  INT16(dst_y);
+		  break;
+
+		case 42: /* SetInputFocus */
+		  ENUM8(revert_to);
+		  REQUEST_LENGTH();
+		  WINDOW(focus);
+		  TIMESTAMP(time);
+		  break;
+
+		case 43: /* GetInputFocus */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  break;
+
+		case 44: /* QueryKeymap */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  break;
+
+		case 45: /* OpenFont */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  FONT(fid);
+		  v16 = FIELD16(name_length);
+		  UNUSED(2);
+		  STRING8(name, v16);
+		  PAD();
+		  break;
+
+		case 46: /* CloseFont */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  FONT(font);
+		  break;
+
+		case 47: /* QueryFont */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  FONTABLE(font);
+		  break;
+
+		case 48: /* QueryTextExtents */
+		  v8 = BOOL(odd_length);
+		  REQUEST_LENGTH();
+		  FONTABLE(font);
+		  STRING16(string16, (nextp - p - (v8 ? 2 : 0)) / 2);
+		  PAD();
+		  break;
+
+		case 49: /* ListFonts */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  CARD16(max_names);
+		  v16 = FIELD16(pattern_length);
+		  STRING8(pattern, v16);
+		  PAD();
+		  break;
+
+		case 50: /* ListFontsWithInfo */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  CARD16(max_names);
+		  v16 = FIELD16(pattern_length);
+		  STRING8(pattern, v16);
+		  PAD();
+		  break;
+
+		case 51: /* SetFontPath */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  v16 = CARD16(str_number_in_path);
+		  UNUSED(2);
+		  LISTofSTRING8(path, v16);
+		  PAD();
+		  break;
+
+		case 52: /* GetFontPath */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  break;
+
+		case 53: /* CreatePixmap */
+		  CARD8(depth);
+		  REQUEST_LENGTH();
+		  PIXMAP(pid);
+		  DRAWABLE(drawable);
+		  CARD16(width);
+		  CARD16(height);
+		  break;
+
+		case 54: /* FreePixmap */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  PIXMAP(pixmap);
+		  break;
+
+		case 55: /* CreateGC */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  GCONTEXT(cid);
+		  DRAWABLE(drawable);
+		  gcAttributes();
+		  break;
+
+		case 56: /* ChangeGC */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  GCONTEXT(gc);
+		  gcAttributes();
+		  break;
+
+		case 57: /* CopyGC */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  GCONTEXT(src_gc);
+		  GCONTEXT(dst_gc);
+		  gcMask();
+		  break;
+
+		case 58: /* SetDashes */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  GCONTEXT(gc);
+		  CARD16(dash_offset);
+		  v16 = FIELD16(dashes_length);
+		  LISTofCARD8(dashes, v16);
+		  PAD();
+		  break;
+
+		case 59: /* SetClipRectangles */
+		  ENUM8(ordering);
+		  REQUEST_LENGTH();
+		  GCONTEXT(gc);
+		  INT16(clip_x_origin);
+		  INT16(clip_y_origin);
+		  LISTofRECTANGLE(rectangles);
+		  break;
+
+		case 60: /* FreeGC */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  GCONTEXT(gc);
+		  break;
+
+		case 61: /* ClearArea */
+		  BOOL(exposures);
+		  REQUEST_LENGTH();
+		  WINDOW(window);
+		  INT16(x);
+		  INT16(y);
+		  CARD16(width);
+		  CARD16(height);
+		  break;
+
+		case 62: /* CopyArea */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  DRAWABLE(src_drawable);
+		  DRAWABLE(dst_drawable);
+		  GCONTEXT(gc);
+		  INT16(src_x);
+		  INT16(src_y);
+		  INT16(dst_x);
+		  INT16(dst_y);
+		  CARD16(width);
+		  CARD16(height);
+		  break;
+
+		case 63: /* CopyPlane */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  DRAWABLE(src_drawable);
+		  DRAWABLE(dst_drawable);
+		  GCONTEXT(gc);
+		  INT16(src_x);
+		  INT16(src_y);
+		  INT16(dst_x);
+		  INT16(dst_y);
+		  CARD16(width);
+		  CARD16(height);
+		  CARD32(bit_plane);
+		  break;
+
+		case 64: /* PolyPoint */
+		  ENUM8(coordinate_mode);
+		  v16 = REQUEST_LENGTH();
+		  DRAWABLE(drawable);
+		  GCONTEXT(gc);
+		  LISTofPOINT(points, v16 - 12);
+		  break;
+
+		case 65: /* PolyLine */
+		  ENUM8(coordinate_mode);
+		  v16 = REQUEST_LENGTH();
+		  DRAWABLE(drawable);
+		  GCONTEXT(gc);
+		  LISTofPOINT(points, v16 - 12);
+		  break;
+
+		case 66: /* PolySegment */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  DRAWABLE(drawable);
+		  GCONTEXT(gc);
+		  LISTofSEGMENT(segments);
+		  break;
+
+		case 67: /* PolyRectangle */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  DRAWABLE(drawable);
+		  GCONTEXT(gc);
+		  LISTofRECTANGLE(rectangles);
+		  break;
+
+		case 68: /* PolyArc */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  DRAWABLE(drawable);
+		  GCONTEXT(gc);
+		  LISTofARC(arcs);
+		  break;
+
+		case 69: /* FillPoly */
+		  UNUSED(1);
+		  v16 = REQUEST_LENGTH();
+		  DRAWABLE(drawable);
+		  GCONTEXT(gc);
+		  ENUM8(shape);
+		  ENUM8(coordinate_mode);
+		  UNUSED(2);
+		  LISTofPOINT(points, v16 - 16);
+		  break;
+
+		case 70: /* PolyFillRectangle */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  DRAWABLE(drawable);
+		  GCONTEXT(gc);
+		  LISTofRECTANGLE(rectangles);
+		  break;
+
+		case 71: /* PolyFillArc */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  DRAWABLE(drawable);
+		  GCONTEXT(gc);
+		  LISTofARC(arcs);
+		  break;
+
+		case 72: /* PutImage */
+		  ENUM8(image_format);
+		  v16 = REQUEST_LENGTH();
+		  DRAWABLE(drawable);
+		  GCONTEXT(gc);
+		  CARD16(width);
+		  CARD16(height);
+		  INT16(dst_x);
+		  INT16(dst_y);
+		  CARD8(left_pad);
+		  CARD8(depth);
+		  UNUSED(2);
+		  LISTofBYTE(data, v16 - 24);
+		  PAD();
+		  break;
+
+		case 73: /* GetImage */
+		  ENUM8(image_pixmap_format);
+		  REQUEST_LENGTH();
+		  DRAWABLE(drawable);
+		  INT16(x);
+		  INT16(y);
+		  CARD16(width);
+		  CARD16(height);
+		  CARD32(plane_mask);
+		  break;
+
+		case 74: /* PolyText8 */
+		  UNUSED(1);
+		  v16 = REQUEST_LENGTH();
+		  DRAWABLE(drawable);
+		  GCONTEXT(gc);
+		  INT16(x);
+		  INT16(y);
+		  LISTofTEXTITEM8(items);
+		  PAD();
+		  break;
+
+		case 75: /* PolyText16 */
+		  UNUSED(1);
+		  v16 = REQUEST_LENGTH();
+		  DRAWABLE(drawable);
+		  GCONTEXT(gc);
+		  INT16(x);
+		  INT16(y);
+		  LISTofTEXTITEM16(items);
+		  PAD();
+		  break;
+
+		case 76: /* ImageText8 */
+		  v8 = FIELD8(string_length);
+		  REQUEST_LENGTH();
+		  DRAWABLE(drawable);
+		  GCONTEXT(gc);
+		  INT16(x);
+		  INT16(y);
+		  STRING8(string, v8);
+		  PAD();
+		  break;
+
+		case 77: /* ImageText16 */
+		  v8 = FIELD8(string_length);
+		  REQUEST_LENGTH();
+		  DRAWABLE(drawable);
+		  GCONTEXT(gc);
+		  INT16(x);
+		  INT16(y);
+		  STRING16(string16, v8);
+		  PAD();
+		  break;
+
+		case 78: /* CreateColormap */
+		  ENUM8(alloc);
+		  REQUEST_LENGTH();
+		  COLORMAP(mid);
+		  WINDOW(window);
+		  VISUALID(visual);
+		  break;
+
+		case 79: /* FreeColormap */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  COLORMAP(cmap);
+		  break;
+
+		case 80: /* CopyColormapAndFree */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  COLORMAP(mid);
+		  COLORMAP(src_cmap);
+		  break;
+
+		case 81: /* InstallColormap */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  COLORMAP(cmap);
+		  break;
+
+		case 82: /* UninstallColormap */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  COLORMAP(cmap);
+		  break;
+
+		case 83: /* ListInstalledColormaps */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  WINDOW(window);
+		  break;
+
+		case 84: /* AllocColor */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  COLORMAP(cmap);
+		  CARD16(red);
+		  CARD16(green);
+		  CARD16(blue);
+		  UNUSED(2);
+		  break;
+
+		case 85: /* AllocNamedColor */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  COLORMAP(cmap);
+		  v16 = FIELD16(name_length);
+		  UNUSED(2);
+		  STRING8(name, v16);
+		  PAD();
+		  break;
+
+		case 86: /* AllocColorCells */
+		  BOOL(contiguous);
+		  REQUEST_LENGTH();
+		  COLORMAP(cmap);
+		  CARD16(colors);
+		  CARD16(planes);
+		  break;
+
+		case 87: /* AllocColorPlanes */
+		  BOOL(contiguous);
+		  REQUEST_LENGTH();
+		  COLORMAP(cmap);
+		  CARD16(colors);
+		  CARD16(reds);
+		  CARD16(greens);
+		  CARD16(blues);
+		  break;
+
+		case 88: /* FreeColors */
+		  UNUSED(1);
+		  v16 = REQUEST_LENGTH();
+		  COLORMAP(cmap);
+		  CARD32(plane_mask);
+		  LISTofCARD32(pixels, v16 - 12);
+		  break;
+
+		case 89: /* StoreColors */
+		  UNUSED(1);
+		  v16 = REQUEST_LENGTH();
+		  COLORMAP(cmap);
+		  LISTofCOLORITEM(color_items, v16 - 8);
+		  break;
+
+		case 90: /* StoreNamedColor */
+		  COLOR_FLAGS(color);
+		  REQUEST_LENGTH();
+		  COLORMAP(cmap);
+		  CARD32(pixel);	
+		  v16 = FIELD16(name_length);
+		  UNUSED(2);
+		  STRING8(name, v16);
+		  PAD();
+		  break;
+
+		case 91: /* QueryColors */
+		  UNUSED(1);
+		  v16 = REQUEST_LENGTH();
+		  COLORMAP(cmap);
+		  LISTofCARD32(pixels, v16 - 8);
+		  break;
+
+		case 92: /* LookupColor */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  COLORMAP(cmap);
+		  v16 = FIELD16(name_length);
+		  UNUSED(2);
+		  STRING8(name, v16);
+		  PAD();
+		  break;
+
+		case 93: /* CreateCursor */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  CURSOR(cid);
+		  PIXMAP(source_pixmap);
+		  PIXMAP(mask);
+		  CARD16(fore_red);
+		  CARD16(fore_green);
+		  CARD16(fore_blue);
+		  CARD16(back_red);
+		  CARD16(back_green);
+		  CARD16(back_blue);
+		  CARD16(x);
+		  CARD16(y);
+		  break;
+
+		case 94: /* CreateGlyphCursor */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  CURSOR(cid);
+		  FONT(source_font);
+		  FONT(mask_font);
+		  CARD16(source_char);
+		  CARD16(mask_char);
+		  CARD16(fore_red);
+		  CARD16(fore_green);
+		  CARD16(fore_blue);
+		  CARD16(back_red);
+		  CARD16(back_green);
+		  CARD16(back_blue);
+		  break;
+
+		case 95: /* FreeCursor */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  CURSOR(cursor);
+		  break;
+
+		case 96: /* RecolorCursor */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  CURSOR(cursor);
+		  CARD16(fore_red);
+		  CARD16(fore_green);
+		  CARD16(fore_blue);
+		  CARD16(back_red);
+		  CARD16(back_green);
+		  CARD16(back_blue);
+		  break;
+
+		case 97: /* QueryBestSize */
+		  ENUM8(class);
+		  REQUEST_LENGTH();
+		  DRAWABLE(drawable);
+		  CARD16(width);
+		  CARD16(height);
+		  break;
+
+		case 98: /* QueryExtension */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  v16 = FIELD16(name_length);
+		  UNUSED(2);
+		  STRING8(name, v16);
+		  PAD();
+		  break;
+
+		case 99: /* ListExtensions */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  break;
+
+		case 100: /* ChangeKeyboardMapping */
+		  v8 = FIELD8(keycode_count);
+		  REQUEST_LENGTH();
+		  KEYCODE(first_keycode);
+		  v8_2 = FIELD8(keysyms_per_keycode);
+		  UNUSED(2);
+		  LISTofKEYSYM(keysyms, v8, v8_2);
+		  break;
+
+		case 101: /* GetKeyboardMapping */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  KEYCODE(first_keycode);
+		  FIELD8(count);
+		  UNUSED(2);
+		  break;
+
+		case 102: /* ChangeKeyboardControl */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  BITMASK32(keyboard_value);
+		  BITFIELD(INT8, keyboard_value_mask, key_click_percent);
+		  BITFIELD(INT8, keyboard_value_mask, bell_percent);
+		  BITFIELD(INT16, keyboard_value_mask, bell_pitch);
+		  BITFIELD(INT16, keyboard_value_mask, bell_duration);
+		  BITFIELD(INT16, keyboard_value_mask, led);
+		  BITFIELD(ENUM8, keyboard_value_mask, led_mode);
+		  BITFIELD(KEYCODE, keyboard_value_mask, keyboard_key);
+		  BITFIELD(ENUM8, keyboard_value_mask, auto_repeat_mode);
+		  break;
+
+		case 103: /* GetKeyboardControl */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  break;
+
+		case 104: /* Bell */
+		  INT8(percent);
+		  REQUEST_LENGTH();
+		  break;
+
+		case 105: /* ChangePointerControl */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  INT16(acceleration_numerator);
+		  INT16(acceleration_denominator);
+		  INT16(threshold);
+		  BOOL(do_acceleration);
+		  BOOL(do_threshold);
+		  break;
+
+		case 106: /* GetPointerControl */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  break;
+
+		case 107: /* SetScreenSaver */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  INT16(timeout);
+		  INT16(interval);
+		  ENUM8(prefer_blanking);
+		  ENUM8(allow_exposures);
+		  UNUSED(2);
+		  break;
+
+		case 108: /* GetScreenSaver */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  break;
+
+		case 109: /* ChangeHosts */
+		  ENUM8(change_host_mode);
+		  REQUEST_LENGTH();
+		  ENUM8(family);
+		  UNUSED(1);
+		  v16 = CARD16(address_length);
+		  LISTofCARD8(address, v16);
+		  break;
+
+		case 110: /* ListHosts */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  break;
+
+		case 111: /* SetAccessControl */
+		  ENUM8(access_mode);
+		  REQUEST_LENGTH();
+		  break;
+
+		case 112: /* SetCloseDownMode */
+		  ENUM8(close_down_mode);
+		  REQUEST_LENGTH();
+		  break;
+
+		case 113: /* KillClient */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  CARD32(resource);
+		  break;
+
+		case 114: /* RotateProperties */
+		  UNUSED(1);
+		  v16 = REQUEST_LENGTH();
+		  WINDOW(window);
+		  CARD16(property_number);
+		  INT16(delta);
+		  LISTofATOM(properties, (v16 - 12));
+		  break;
+
+		case 115: /* ForceScreenSaver */
+		  ENUM8(screen_saver_mode);
+		  REQUEST_LENGTH();
+		  break;
+
+		case 116: /* SetPointerMapping */
+		  v8 = FIELD8(map_length);
+		  REQUEST_LENGTH();
+		  LISTofCARD8(map, v8);
+		  PAD();
+		  break;
+
+		case 117: /* GetPointerMapping */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  break;
+
+		case 118: /* SetModifierMapping */
+		  v8 = FIELD8(keycodes_per_modifier);
+		  REQUEST_LENGTH();
+		  LISTofKEYCODE(keycodes, v8);
+		  break;
+
+		case 119: /* GetModifierMapping */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  break;
+		  
+		case 127: /* NoOperation */
+		  UNUSED(1);
+		  REQUEST_LENGTH();
+		  break;
+	    }
+	    if (p < nextp)
+		  proto_tree_add_item(t, hf_x11_undecoded, tvb, p - pp, nextp - p, little_endian);
+	    p = nextp;
+	    left = nextLeft;
+      }
+}
+
+/************************************************************************
+ ***                                                                  ***
+ ***         G U E S S I N G   T H E   B Y T E   O R D E R I N G      ***
+ ***                                                                  ***
+ ************************************************************************/
+
+static GTree *byte_ordering_cache = NULL;
+static GMemChunk *address_chunk = NULL;
+static GMemChunk *ipv4_chunk = NULL;
+static GMemChunk *ipv6_chunk = NULL;
+
+static gint compareAddresses(gconstpointer aa, gconstpointer bb)
+{
+      const address *a = (const address *)aa;
+      const address *b = (const address *)bb;
+      int c = b -> type - a -> type;
+      if (c) return c;
+      c = b -> len - a -> len;
+      if (c) return c;
+      return memcmp(b -> data, a -> data, a -> len);
+}
+
+/* If we can't guess, we return TRUE (that is little_endian), cause
+   I'm developing on a Linux box :-). The (non-)guess isn't cached
+   however, so we may have more luck next time. I'm quite conservative
+   in my assertions, cause once it's cached, it's stay in cache, and
+   we may be fooled up by a packet starting with the end of a request
+   started in a previous packet...
+*/
+
+static int little_endian_value_16(const u_char *p)
+{
+      return p[0] + p[1] * 256;
+}
+
+static int big_endian_value_16(const u_char *p)
+{
+      return p[0] * 256 + p[1];
+}
+
+static int little_endian_value_32(const u_char *p)
+{
+      return p[0] | p[1] << 8 | p[2] << 16 | p[3] << 24;
+}
+
+static int big_endian_value_32(const u_char *p)
+{
+      return p[3] | p[2] << 8 | p[1] << 16 | p[0] << 24;
+}
+
+int numberOfBitSetTable[] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 };
+
+int numberOfBitSet(const u_char *p, int maskLength)
+{
+      int res = 0;
+      while(maskLength--) {
+	    int c = *p++;
+	    res += numberOfBitSetTable[c & 0xf] + numberOfBitSetTable[c >> 4];
+      }
+      return res;
+}
+
+static int listOfStringLengthConsistent(const u_char *p, int length, int listLength, int left)
+{
+      if (listLength > length) return FALSE;
+      while(listLength--) {
+	    int l;
+	    if (left <= 0) return TRUE;
+	    l = *p;
+	    if (!l) break;
+	    l++;
+	    if (l > length) return FALSE;
+	    if (l > left) return TRUE;
+	    p += l;
+	    length -= l;
+	    left -= l;
+      }
+      if (length > 3) return FALSE;
+      return TRUE;
+}
+
+static int rounded4(int n)
+{
+      int remainder = n % 4;
+      int res = n / 4;
+      if (remainder) res++;
+      return res;
+}
+
+/* We assume the order to be consistent, until proven wrong. */
+
+static gboolean consistentWithOrder(int length, int left, const u_char *p, int (*v16)(const u_char *))
+{
+      switch(*p) {
+	  case 1: /* CreateWindow */
+	    return left < 32 || length == 8 + numberOfBitSet(p + 7 * 4, 4);
+
+	  case 2: /* ChangeWindowAttributes */
+	  case 56: /* ChangeGC */
+	    return left < 12 || length == 3 + numberOfBitSet(p + 8, 4);
+
+	  case 3: /* GetWindowAttributes */
+	  case 4: /* DestroyWindow */
+	  case 5: /* DestroySubwindows */
+	  case 6: /* ChangeSaveSet */
+	  case 8: /* MapWindow */
+	  case 9: /* MapSubWindow */
+	  case 10: /* UnmapWindow */
+	  case 11: /* UnmapSubwindows */
+	  case 13: /* CirculateWindow */
+	  case 14: /* GetGeometry */
+	  case 15: /* QueryTree */
+	  case 17: /* GetAtomName */
+	  case 21: /* ListProperties */
+	  case 23: /* GetSelectionOwner */
+	  case 27: /* UngrabPointer */
+	  case 32: /* UngrabKeyboard */
+	  case 35: /* AllowEvents */
+	  case 38: /* QueryPointer */
+	  case 46: /* CloseFont */
+	  case 47: /* QueryFont */
+	  case 54: /* FreePixmap */
+	  case 60: /* FreeGC */
+	  case 79: /* FreeColormap */
+	  case 81: /* InstallColormap */
+	  case 82: /* UninstallColormap */
+	  case 83: /* ListInstalledColormaps */
+	  case 95: /* FreeCursor */
+	  case 101: /* GetKeyboardMapping */
+	  case 113: /* KillClient */
+	    return length == 2;
+
+	  case 7: /* ReparentWindow */
+	  case 22: /* SetSelectionOwner */
+	  case 30: /* ChangeActivePointerGrab */
+	  case 31: /* GrabKeyboard */
+	  case 33: /* GrabKey */
+	  case 39: /* GetMotionEvents */
+	  case 40: /* TranslateCoordinates */
+	  case 53: /* CreatePixmap */
+	  case 57: /* CopyGC */
+	  case 61: /* ClearArea */
+	  case 78: /* CreateColormap */
+	  case 84: /* AllocColor */
+	  case 87: /* AllocColorPlanes */
+	    return length == 4;
+
+	  case 12: /* ConfigureWindow */
+	    return left < 10 || length == 3 + numberOfBitSet(p + 8, 2);
+
+	  case 16: /* InternAtom */
+	  case 98: /* QueryExtension */
+	    return left < 6 || length == 2 + rounded4(v16(p + 4));
+
+	  case 18: /* ChangeProperty */
+	    {
+		  int multiplier, type;
+		  if (left < 17) return TRUE;
+		  type = p[16];
+		  if (type != 8 && type != 16 && type != 32) return FALSE;
+		  multiplier = type == 8 ? 1 : type == 16 ? 2 : 4;
+		  if (left < 24) return TRUE;
+		  return length == 6 + rounded4((v16 == little_endian_value_16 ? little_endian_value_32 : big_endian_value_32)(p + 20) * multiplier);
+	    }
+
+	  case 19: /* DeleteProperty */
+	  case 29: /* UngrabButton */
+	  case 34: /* UngrabKey */
+	  case 42: /* SetInputFocus */
+	  case 80: /* CopyColormapAndFree */
+	  case 86: /* AllocColorCells */
+	  case 97: /* QueryBestSize */
+	  case 105: /* ChangePointerControl */
+	  case 107: /* SetScreenSaver */
+	    return length == 3;
+
+	  case 20: /* GetProperty */
+	  case 24: /* ConvertSelection */
+	  case 26: /* GrabPointer */
+	  case 28: /* GrabButton */
+	  case 41: /* WarpPointer */
+	    return length == 6;
+
+	  case 25: /* SendEvent */
+	    return length == 11;
+
+	  case 36: /* GrabServer */
+	  case 37: /* UngrabServer */
+	  case 43: /* GetInputFocus */
+	  case 44: /* QueryKeymap */
+	  case 52: /* GetFontPath */
+	  case 99: /* ListExtensions */
+	  case 103: /* GetKeyboardControl */
+	  case 104: /* Bell */
+	  case 106: /* GetPointerControl */
+	  case 108: /* GetScreenSaver */
+	  case 110: /* ListHosts */
+	  case 111: /* SetAccessControl */
+	  case 112: /* SetCloseDownMode */
+	  case 115: /* ForceScreenSaver */
+	  case 117: /* GetPointerMapping */
+	  case 119: /* GetModifierMapping */
+	    return length == 1;
+
+	  case 45: /* OpenFont */
+	  case 85: /* AllocNamedColor */
+	  case 92: /* LookupColor */
+	    return left < 10 || length == 3 + rounded4(v16(p + 8));
+
+	  case 48: /* QueryTextExtents */
+	    return length >= 2;
+
+	  case 49: /* ListFonts */
+	  case 50: /* ListFontsWithInfo */
+	  case 109: /* ChangeHosts */
+	    return left < 8 || length == 2 + rounded4(v16(p + 6));
+
+	  case 51: /* SetFontPath */
+	    if (length < 2) return FALSE;
+	    if (left < 8) return TRUE;
+	    return listOfStringLengthConsistent(p + 8, (length - 2) * 4, v16(p + 4), left);
+
+	  case 55: /* CreateGC */
+	    return left < 16 || length == 4 + numberOfBitSet(p + 12, 4);
+
+	  case 58: /* SetDashes */
+	    return left < 12 || length == 3 + rounded4(v16(p + 10));
+
+	  case 59: /* SetClipRectangles */
+	  case 66: /* PolySegment */
+	  case 67: /* PolyRectangle */
+	  case 70: /* PolyFillRectangle */
+	    return length >= 3 && (length - 3) % 2 == 0;
+
+	  case 62: /* CopyArea */
+	    return length == 7;
+
+	  case 63: /* CopyPlane */
+	  case 93: /* CreateCursor */
+	  case 94: /* CreateGlyphCursor */
+	    return length == 8;
+
+	  case 64: /* PolyPoint */
+	  case 65: /* PolyLine */
+	  case 88: /* FreeColors */
+	    return length >= 3;
+
+	  case 68: /* PolyArc */
+	  case 71: /* PolyFillArc */
+	    return length >= 3 && (length - 3) % 3 == 0;
+
+	  case 69: /* FillPoly */
+	  case 76: /* ImageText8 */
+	    return length >= 4;
+
+	  case 72: /* PutImage */
+	    return length >= 6;
+
+	  case 73: /* GetImage */
+	  case 96: /* RecolorCursor */
+	    return length == 5;
+
+	  case 74: /* PolyText8 */
+	    if (length < 4) return FALSE;
+	    return TRUE; /* We don't perform many controls on this one */
+
+	  case 75: /* PolyText16 */
+	    if (length < 4) return FALSE;
+	    return TRUE; /* We don't perform many controls on this one */
+
+	  case 77: /* ImageText16 */
+	    return length >= 4;
+
+	  case 89: /* StoreColors */
+	    return length > 2 && (length - 2) % 3 == 0;
+
+	  case 90: /* StoreNamedColor */
+	    return left < 14 || length == 4 + rounded4(v16(p + 12));
+
+	  case 91: /* QueryColors */
+	    return length >= 2;
+
+	  case 100: /* ChangeKeyboardMapping */
+	    return left < 6 || length == 2 + p[1] * p[5];
+
+	  case 102: /* ChangeKeyboardControl */
+	    return left < 6 || length == 2 + numberOfBitSet(p + 4, 2);
+
+	  case 114: /* RotateProperties */
+	    return left < 10 || length == 3 + v16(p + 8);
+
+	  case 116: /* SetPointerMapping */
+	    return length == 1 + rounded4(p[1]);
+
+	  case 118: /* SetModifierMapping */
+	    return length == 1 + p[1] * 2;
+	    
+	  case 127: /* NoOperation */
+	    return length >= 1;
+
+	  default:
+	    return TRUE;
+      }
+}
+
+/* -1 means doesn't match, +1 means match, 0 means don't know */
+
+static int x_endian_match(const u_char *p, int left, int (*v16)(const u_char *))
+{
+      int nextLeft;
+      const u_char *nextp;
+      int atLeastOne = 0;
+
+      for(;; p = nextp, left = nextLeft) {
+	    int length;
+	    if (left < 4) return atLeastOne;
+	    length = v16(p + 2);
+	    if (!length) return -1;
+	    nextp = p + length * 4;
+	    nextLeft = left - length * 4;
+	    if (!consistentWithOrder(length, left, p, v16)) return -1;
+	    atLeastOne = 1;
+      }
+}
+
+static gboolean
+guess_byte_ordering(const u_char *p, int left)
+{
+      /* With X the client gives the byte ordering for the protocol,
+	 and the port on the server tells us we're speaking X. */
+
+      int le, be, decision, decisionToCache;
+
+      address *addr = pi.srcport == pi.match_port ? &pi.net_dst : &pi.net_src;
+      gint32 cache = GPOINTER_TO_INT(g_tree_lookup(byte_ordering_cache, addr));
+      if (cache) return cache > 0 ? TRUE : FALSE;
+      if (pi.srcport == pi.match_port) return TRUE; /* We don't try to guess on a reply / event for now */
+
+      le = x_endian_match(p, left, little_endian_value_16);
+      be = x_endian_match(p, left, big_endian_value_16);
+
+      /* remember that "decision" really means "little_endian". */
+      if (le == be)
+	    /* We have no reason to believe it's little- rather than
+	       big-endian, so we guess the shortest length is the
+	       right one.
+	    */
+	    if (left < 4) /* Not even a way to get the length. We're biased
+			     toward little endianness here (essentially the
+			     x86 world right now). Decoding won't go very far
+			     anyway.
+			  */
+		  decision = TRUE;
+	    else
+		  decision = little_endian_value_16(p + 2) <= big_endian_value_16(p + 2);
+      else
+	  decision = le >= be;
+
+      decisionToCache = (le < 0 && be > 0) || (le > 0 && be < 0);
+      if (decisionToCache) {
+	    /* We encode the decision as 1 for TRUE and -1 for FALSE
+	       to be able to distinguish between FALSE and no value in
+	       the cache when recalling the value.
+	    */
+	    int address_length;
+	    char *address_data;
+	    address *cached;
+	    if (addr -> type == AT_IPv4) {
+		  address_length = 4;
+		  address_data = g_mem_chunk_alloc(ipv4_chunk);
+	    } else if (addr -> type == AT_IPv6) {
+		  address_length = 16;
+		  address_data = g_mem_chunk_alloc(ipv6_chunk);
+	    } else {
+		  address_length = addr -> len;
+		  address_data = g_malloc(address_length);
+	    }
+	    cached = g_mem_chunk_alloc(address_chunk);
+	    memcpy(address_data, addr -> data, address_length);
+	    SET_ADDRESS(cached, addr -> type, addr -> len, address_data);
+	    g_tree_insert(byte_ordering_cache, cached, GINT_TO_POINTER(decision ? 1 : -1));
+      }
+	    
+      /*
+      fprintf(stderr, "packet %d\tle %d\tbe %d\tlittle_endian %d\tcache %d\n", 
+	      pi.fd -> num, le, be, decision, decisionToCache);
+      */
+      return decision;
+}
+
+/************************************************************************
+ ***                                                                  ***
+ ***         I N I T I A L I Z A T I O N   A N D   M A I N            ***
+ ***                                                                  ***
+ ************************************************************************/
+
+static void
+dissect_x11_request(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
+{
+/* Set up structures we will need to add the protocol subtree and manage it */
+      proto_item *ti;
+      proto_tree *x11_tree;
+	
+/* Make entries in Protocol column and Info column on summary display */
+      if (check_col(fd, COL_PROTOCOL)) 
+	    col_add_str(fd, COL_PROTOCOL, "X11");
+    
+/* This field shows up as the "Info" column in the display; you should make
+   it, if possible, summarize what's in the packet, so that a user looking
+   at the list of packets can tell what type of packet it is.
+
+   "col_add_fstr()" can be used instead of "col_add_str()"; it takes
+   "printf()"-like arguments. */
+      if (check_col(fd, COL_INFO)) 
+	    col_add_str(fd, COL_INFO, "X11 request");
+
+/* In the interest of speed, if "tree" is NULL, don't do any work not
+   necessary to generate protocol tree items. */
+      if (!tree) return;
+/* NOTE: The offset and length values in the previous call to
+   "proto_tree_add_item()" define what data bytes to highlight in the hex
+   display window when the line in the protocol tree display
+   corresponding to that item is selected.
+
+   END_OF_FRAME is a handy way to highlight all data from the offset to
+   the end of the packet. */
+      ti = proto_tree_add_item(tree, proto_x11, tvb, offset, END_OF_FRAME, FALSE);
+      x11_tree = proto_item_add_subtree(ti, ett_x11);
+
+/* Code to process the packet goes here */
+
+      p = pd + offset;
+      left = fd -> cap_len - offset;
+      pp = pd;
+      tvb = pi.compat_top_tvb;
+      little_endian = guess_byte_ordering(pd + offset, left);
+      dissect_x11_request_loop(x11_tree);
+      if (left)
+	    dissect_data(pp, p - pp, fd, x11_tree);
+}
+
+static void
+dissect_x11_event(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
+{
+/* Set up structures we will need to add the protocol subtree and manage it */
+      proto_item *ti;
+      proto_tree *x11_tree;
+	
+/* Make entries in Protocol column and Info column on summary display */
+      if (check_col(fd, COL_PROTOCOL)) 
+	    col_add_str(fd, COL_PROTOCOL, "X11");
+    
+/* This field shows up as the "Info" column in the display; you should make
+   it, if possible, summarize what's in the packet, so that a user looking
+   at the list of packets can tell what type of packet it is.
+
+   "col_add_fstr()" can be used instead of "col_add_str()"; it takes
+   "printf()"-like arguments. */
+      if (check_col(fd, COL_INFO)) 
+	    col_add_str(fd, COL_INFO, "X11 event");
+
+/* In the interest of speed, if "tree" is NULL, don't do any work not
+   necessary to generate protocol tree items. */
+      if (tree) {
+/* NOTE: The offset and length values in the previous call to
+   "proto_tree_add_item()" define what data bytes to highlight in the hex
+   display window when the line in the protocol tree display
+   corresponding to that item is selected.
+
+   END_OF_FRAME is a handy way to highlight all data from the offset to
+   the end of the packet. */
+	    ti = proto_tree_add_item(tree, proto_x11, tvb, offset, END_OF_FRAME, FALSE);
+	    x11_tree = proto_item_add_subtree(ti, ett_x11);
+
+/* Code to process the packet goes here */
+
+	    dissect_data(pd, offset, fd, tree);
+      }
+}
+
+static void
+dissect_x11(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
+{
+      if (pi.destport == TCP_PORT_X11 || pi.destport == TCP_PORT_X11_2 || pi.destport == TCP_PORT_X11_3)
+	    dissect_x11_request(pd, offset, fd, tree);
+      else
+	    dissect_x11_event(pd, offset, fd, tree);
+}
+
+/* Register the protocol with Ethereal */
+void proto_register_x11(void)
+{                 
+
+/* Setup list of header fields */
+      static hf_register_info hf[] = {
+/*
+  { &hf_x11_FIELDABBREV,
+  { "FIELDNAME",           "x11.FIELDABBREV",
+  FIELDTYPE, FIELDBASE, FIELDCONVERT, BITMASK,          
+  "FIELDDESCR" }
+  },
+*/
+#include "packet-x11-register-info.h"
+      };
+
+/* Setup protocol subtree array */
+      static gint *ett[] = {
+	    &ett_x11,
+	    &ett_x11_request,
+      };
+
+/* Register the protocol name and description */
+      proto_x11 = proto_register_protocol("X11", "x11");
+
+/* Required function calls to register the header fields and subtrees used */
+      proto_register_field_array(proto_x11, hf, array_length(hf));
+      proto_register_subtree_array(ett, array_length(ett));
+
+      byte_ordering_cache = g_tree_new(compareAddresses);
+      address_chunk = g_mem_chunk_new("x11 byte ordering address cache", sizeof(address), 
+				      sizeof(address) * 128, G_ALLOC_ONLY);
+      ipv4_chunk = g_mem_chunk_new("x11 byte ordering ipv4 address cache", 4, 4 * 128, G_ALLOC_ONLY);
+      ipv6_chunk = g_mem_chunk_new("x11 byte ordering ipv6 address cache", 16, 16 * 128, G_ALLOC_ONLY);
+};
+
+
+void
+proto_reg_handoff_x11(void)
+{
+  dissector_add("tcp.port", TCP_PORT_X11, dissect_x11);
+  dissector_add("tcp.port", TCP_PORT_X11_2, dissect_x11);
+  dissector_add("tcp.port", TCP_PORT_X11_3, dissect_x11);
+}