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); +}
- Follow-Ups:
- Re: [ethereal-dev] [patch] code for dissecting X11 requests
- From: Guy Harris
- Re: [ethereal-dev] [patch] code for dissecting X11 requests
- Prev by Date: Re: [ethereal-dev] Win32 version of Ethereal 0.8.6 hangs
- Next by Date: Re: [ethereal-dev] [patch] code for dissecting X11 requests
- Previous by thread: Re: [ethereal-dev] Win32 version of Ethereal 0.8.6 hangs
- Next by thread: Re: [ethereal-dev] [patch] code for dissecting X11 requests
- Index(es):