1 /* Haiku window system support.  Hey Emacs, this is -*- C++ -*-
2    Copyright (C) 2021 Free Software Foundation, Inc.
3 
4 This file is part of GNU Emacs.
5 
6 GNU Emacs is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or (at
9 your option) any later version.
10 
11 GNU Emacs is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15 
16 You should have received a copy of the GNU General Public License
17 along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.  */
18 
19 #ifndef _HAIKU_SUPPORT_H
20 #define _HAIKU_SUPPORT_H
21 
22 #include <stdint.h>
23 
24 #ifdef HAVE_FREETYPE
25 #include <ft2build.h>
26 #include <fontconfig/fontconfig.h>
27 #include FT_FREETYPE_H
28 #include FT_SIZES_H
29 #endif
30 
31 #ifdef USE_BE_CAIRO
32 #include <cairo.h>
33 #endif
34 
35 enum haiku_cursor
36   {
37     CURSOR_ID_NO_CURSOR = 12,
38     CURSOR_ID_RESIZE_NORTH = 15,
39     CURSOR_ID_RESIZE_EAST = 16,
40     CURSOR_ID_RESIZE_SOUTH = 17,
41     CURSOR_ID_RESIZE_WEST = 18,
42     CURSOR_ID_RESIZE_NORTH_EAST = 19,
43     CURSOR_ID_RESIZE_NORTH_WEST = 20,
44     CURSOR_ID_RESIZE_SOUTH_EAST = 21,
45     CURSOR_ID_RESIZE_SOUTH_WEST = 22,
46     CURSOR_ID_RESIZE_NORTH_SOUTH = 23,
47     CURSOR_ID_RESIZE_EAST_WEST = 24,
48     CURSOR_ID_RESIZE_NORTH_EAST_SOUTH_WEST = 25,
49     CURSOR_ID_RESIZE_NORTH_WEST_SOUTH_EAST = 26
50   };
51 
52 enum haiku_alert_type
53   {
54     HAIKU_EMPTY_ALERT = 0,
55     HAIKU_INFO_ALERT,
56     HAIKU_IDEA_ALERT,
57     HAIKU_WARNING_ALERT,
58     HAIKU_STOP_ALERT
59   };
60 
61 enum haiku_event_type
62   {
63     QUIT_REQUESTED,
64     FRAME_RESIZED,
65     FRAME_EXPOSED,
66     KEY_DOWN,
67     KEY_UP,
68     ACTIVATION,
69     MOUSE_MOTION,
70     BUTTON_DOWN,
71     BUTTON_UP,
72     ICONIFICATION,
73     MOVE_EVENT,
74     SCROLL_BAR_VALUE_EVENT,
75     SCROLL_BAR_DRAG_EVENT,
76     WHEEL_MOVE_EVENT,
77     MENU_BAR_RESIZE,
78     MENU_BAR_OPEN,
79     MENU_BAR_SELECT_EVENT,
80     MENU_BAR_CLOSE,
81     FILE_PANEL_EVENT,
82     MENU_BAR_HELP_EVENT,
83     ZOOM_EVENT,
84     REFS_EVENT,
85     APP_QUIT_REQUESTED_EVENT
86   };
87 
88 struct haiku_quit_requested_event
89 {
90   void *window;
91 };
92 
93 struct haiku_resize_event
94 {
95   void *window;
96   float px_heightf;
97   float px_widthf;
98 };
99 
100 struct haiku_expose_event
101 {
102   void *window;
103   int x;
104   int y;
105   int width;
106   int height;
107 };
108 
109 struct haiku_refs_event
110 {
111   void *window;
112   int x, y;
113   /* Free this with free! */
114   char *ref;
115 };
116 
117 struct haiku_app_quit_requested_event
118 {
119   char dummy;
120 };
121 
122 #define HAIKU_MODIFIER_ALT (1)
123 #define HAIKU_MODIFIER_CTRL (1 << 1)
124 #define HAIKU_MODIFIER_SHIFT (1 << 2)
125 #define HAIKU_MODIFIER_SUPER (1 << 3)
126 
127 struct haiku_key_event
128 {
129   void *window;
130   int modifiers;
131   uint32_t mb_char;
132   uint32_t unraw_mb_char;
133   short kc;
134 };
135 
136 struct haiku_activation_event
137 {
138   void *window;
139   int activated_p;
140 };
141 
142 struct haiku_mouse_motion_event
143 {
144   void *window;
145   bool just_exited_p;
146   int x;
147   int y;
148   uint32_t be_code;
149 };
150 
151 struct haiku_button_event
152 {
153   void *window;
154   int btn_no;
155   int modifiers;
156   int x;
157   int y;
158 };
159 
160 struct haiku_iconification_event
161 {
162   void *window;
163   int iconified_p;
164 };
165 
166 struct haiku_move_event
167 {
168   void *window;
169   int x;
170   int y;
171 };
172 
173 struct haiku_wheel_move_event
174 {
175   void *window;
176   int modifiers;
177   float delta_x;
178   float delta_y;
179 };
180 
181 struct haiku_menu_bar_select_event
182 {
183   void *window;
184   void *ptr;
185 };
186 
187 struct haiku_file_panel_event
188 {
189   void *ptr;
190 };
191 
192 struct haiku_menu_bar_help_event
193 {
194   void *window;
195   int mb_idx;
196 };
197 
198 struct haiku_zoom_event
199 {
200   void *window;
201   int x;
202   int y;
203   int width;
204   int height;
205 };
206 
207 #define FSPEC_FAMILY 1
208 #define FSPEC_STYLE (1 << 1)
209 #define FSPEC_SLANT (1 << 2)
210 #define FSPEC_WEIGHT (1 << 3)
211 #define FSPEC_SPACING (1 << 4)
212 #define FSPEC_WANTED (1 << 5)
213 #define FSPEC_NEED_ONE_OF (1 << 6)
214 #define FSPEC_WIDTH (1 << 7)
215 #define FSPEC_LANGUAGE (1 << 8)
216 
217 typedef char haiku_font_family_or_style[64];
218 
219 enum haiku_font_slant
220   {
221     NO_SLANT = -1,
222     SLANT_OBLIQUE,
223     SLANT_REGULAR,
224     SLANT_ITALIC
225   };
226 
227 enum haiku_font_width
228   {
229     NO_WIDTH = -1,
230     ULTRA_CONDENSED,
231     EXTRA_CONDENSED,
232     CONDENSED,
233     SEMI_CONDENSED,
234     NORMAL_WIDTH,
235     SEMI_EXPANDED,
236     EXPANDED,
237     EXTRA_EXPANDED,
238     ULTRA_EXPANDED
239   };
240 
241 enum haiku_font_language
242   {
243     LANGUAGE_CN,
244     LANGUAGE_KO,
245     LANGUAGE_JP,
246     MAX_LANGUAGE /* This isn't a language. */
247   };
248 
249 struct haiku_font_pattern
250 {
251   int specified;
252   struct haiku_font_pattern *next;
253   /* The next two fields are only temporarily used during the font
254      discovery process! Do not rely on them being correct outside
255      BFont_find.  */
256   struct haiku_font_pattern *last;
257   struct haiku_font_pattern *next_family;
258   haiku_font_family_or_style family;
259   haiku_font_family_or_style style;
260   int weight;
261   int mono_spacing_p;
262   int want_chars_len;
263   int need_one_of_len;
264   enum haiku_font_slant slant;
265   enum haiku_font_width width;
266   enum haiku_font_language language;
267   uint32_t *wanted_chars;
268   uint32_t *need_one_of;
269 
270   int oblique_seen_p;
271 };
272 
273 struct haiku_scroll_bar_value_event
274 {
275   void *scroll_bar;
276   int position;
277 };
278 
279 struct haiku_scroll_bar_drag_event
280 {
281   void *scroll_bar;
282   int dragging_p;
283 };
284 
285 struct haiku_menu_bar_resize_event
286 {
287   void *window;
288   int width;
289   int height;
290 };
291 
292 struct haiku_menu_bar_state_event
293 {
294   void *window;
295 };
296 
297 #define HAIKU_THIN 0
298 #define HAIKU_ULTRALIGHT 20
299 #define HAIKU_EXTRALIGHT 40
300 #define HAIKU_LIGHT 50
301 #define HAIKU_SEMI_LIGHT 75
302 #define HAIKU_REGULAR 100
303 #define HAIKU_SEMI_BOLD 180
304 #define HAIKU_BOLD 200
305 #define HAIKU_EXTRA_BOLD 205
306 #define HAIKU_ULTRA_BOLD 210
307 #define HAIKU_BOOK 400
308 #define HAIKU_HEAVY 800
309 #define HAIKU_ULTRA_HEAVY 900
310 #define HAIKU_BLACK 1000
311 #define HAIKU_MEDIUM 2000
312 
313 #ifdef __cplusplus
314 extern "C"
315 {
316 #endif
317 #include <pthread.h>
318 #include <OS.h>
319 
320 #ifdef __cplusplus
321   typedef void *haiku;
322 
323   extern void
324   haiku_put_pixel (haiku bitmap, int x, int y, unsigned long pixel);
325 
326   extern unsigned long
327   haiku_get_pixel (haiku bitmap, int x, int y);
328 #endif
329 
330   extern port_id port_application_to_emacs;
331 
332   extern void haiku_io_init (void);
333   extern void haiku_io_init_in_app_thread (void);
334 
335   extern void
336   haiku_read_size (ssize_t *len);
337 
338   extern int
339   haiku_read (enum haiku_event_type *type, void *buf, ssize_t len);
340 
341   extern int
342   haiku_read_with_timeout (enum haiku_event_type *type, void *buf, ssize_t len,
343 			   time_t timeout);
344 
345   extern int
346   haiku_write (enum haiku_event_type type, void *buf);
347 
348   extern int
349   haiku_write_without_signal (enum haiku_event_type type, void *buf);
350 
351   extern void
352   rgb_color_hsl (uint32_t rgb, double *h, double *s, double *l);
353 
354   extern void
355   hsl_color_rgb (double h, double s, double l, uint32_t *rgb);
356 
357   extern void *
358   BBitmap_new (int width, int height, int mono_p);
359 
360   extern void *
361   BBitmap_data (void *bitmap);
362 
363   extern int
364   BBitmap_convert (void *bitmap, void **new_bitmap);
365 
366   extern void
367   BBitmap_free (void *bitmap);
368 
369   extern void
370   BBitmap_dimensions (void *bitmap, int *left, int *top,
371 		      int *right, int *bottom, int32_t *bytes_per_row,
372 		      int *mono_p);
373 
374   extern void *
375   BApplication_setup (void);
376 
377   extern void *
378   BWindow_new (void *view);
379 
380   extern void
381   BWindow_quit (void *window);
382 
383   extern void
384   BWindow_set_offset (void *window, int x, int y);
385 
386   extern void
387   BWindow_iconify (void *window);
388 
389   extern void
390   BWindow_set_visible (void *window, int visible_p);
391 
392   extern void
393   BFont_close (void *font);
394 
395   extern void
396   BFont_dat (void *font, int *px_size, int *min_width, int *max_width,
397 	     int *avg_width, int *height, int *space_width, int *ascent,
398 	     int *descent, int *underline_position, int *underline_thickness);
399 
400   extern int
401   BFont_have_char_p (void *font, int32_t chr);
402 
403   extern int
404   BFont_have_char_block (void *font, int32_t beg, int32_t end);
405 
406   extern void
407   BFont_char_bounds (void *font, const char *mb_str, int *advance,
408 		     int *lb, int *rb);
409 
410   extern void
411   BFont_nchar_bounds (void *font, const char *mb_str, int *advance,
412 		      int *lb, int *rb, int32_t n);
413 
414   extern void
415   BWindow_retitle (void *window, const char *title);
416 
417   extern void
418   BWindow_resize (void *window, int width, int height);
419 
420   extern void
421   BWindow_activate (void *window);
422 
423   extern void
424   BView_StartClip (void *view);
425 
426   extern void
427   BView_EndClip (void *view);
428 
429   extern void
430   BView_SetHighColor (void *view, uint32_t color);
431 
432   extern void
433   BView_SetHighColorForVisibleBell (void *view, uint32_t color);
434 
435   extern void
436   BView_FillRectangleForVisibleBell (void *view, int x, int y, int width,
437 				     int height);
438 
439   extern void
440   BView_SetLowColor (void *view, uint32_t color);
441 
442   extern void
443   BView_SetPenSize (void *view, int u);
444 
445   extern void
446   BView_SetFont (void *view, void *font);
447 
448   extern void
449   BView_MovePenTo (void *view, int x, int y);
450 
451   extern void
452   BView_DrawString (void *view, const char *chr, ptrdiff_t len);
453 
454   extern void
455   BView_DrawChar (void *view, char chr);
456 
457   extern void
458   BView_FillRectangle (void *view, int x, int y, int width, int height);
459 
460   extern void
461   BView_FillRectangleAbs (void *view, int x, int y, int x1, int y1);
462 
463   extern void
464   BView_FillTriangle (void *view, int x1, int y1,
465 		      int x2, int y2, int x3, int y3);
466 
467   extern void
468   BView_StrokeRectangle (void *view, int x, int y, int width, int height);
469 
470   extern void
471   BView_SetViewColor (void *view, uint32_t color);
472 
473   extern void
474   BView_ClipToRect (void *view, int x, int y, int width, int height);
475 
476   extern void
477   BView_ClipToInverseRect (void *view, int x, int y, int width, int height);
478 
479   extern void
480   BView_StrokeLine (void *view, int sx, int sy, int tx, int ty);
481 
482   extern void
483   BView_CopyBits (void *view, int x, int y, int width, int height,
484 		  int tox, int toy, int towidth, int toheight);
485 
486   extern void
487   BView_DrawBitmap (void *view, void *bitmap, int x, int y,
488 		    int width, int height, int vx, int vy, int vwidth,
489 		    int vheight);
490 
491   extern void
492   BView_DrawBitmapWithEraseOp (void *view, void *bitmap, int x,
493 			       int y, int width, int height);
494 
495   extern void
496   BView_DrawMask (void *src, void *view,
497 		  int x, int y, int width, int height,
498 		  int vx, int vy, int vwidth, int vheight,
499 		  uint32_t color);
500 
501   extern void *
502   BBitmap_transform_bitmap (void *bitmap, void *mask, uint32_t m_color,
503 			    double rot, int desw, int desh);
504 
505   extern void
506   BScreen_px_dim (int *width, int *height);
507 
508   extern void
509   BView_resize_to (void *view, int width, int height);
510 
511   /* Functions for creating and freeing cursors.  */
512   extern void *
513   BCursor_create_default (void);
514 
515   extern void *
516   BCursor_from_id (enum haiku_cursor cursor);
517 
518   extern void *
519   BCursor_create_modeline (void);
520 
521   extern void *
522   BCursor_create_i_beam (void);
523 
524   extern void *
525   BCursor_create_progress_cursor (void);
526 
527   extern void *
528   BCursor_create_grab (void);
529 
530   extern void
531   BCursor_delete (void *cursor);
532 
533   extern void
534   BView_set_view_cursor (void *view, void *cursor);
535 
536   extern void
537   BWindow_Flush (void *window);
538 
539   extern void
540   BMapKey (uint32_t kc, int *non_ascii_p, unsigned *code);
541 
542   extern void *
543   BScrollBar_make_for_view (void *view, int horizontal_p,
544 			    int x, int y, int x1, int y1,
545 			    void *scroll_bar_ptr);
546 
547   extern void
548   BScrollBar_delete (void *sb);
549 
550   extern void
551   BView_move_frame (void *view, int x, int y, int x1, int y1);
552 
553   extern void
554   BView_scroll_bar_update (void *sb, int portion, int whole, int position);
555 
556   extern int
557   BScrollBar_default_size (int horizontal_p);
558 
559   extern void
560   BView_invalidate (void *view);
561 
562   extern void
563   BView_draw_lock (void *view);
564 
565   extern void
566   BView_draw_unlock (void *view);
567 
568   extern void
569   BWindow_center_on_screen (void *window);
570 
571   extern void
572   BView_mouse_moved (void *view, int x, int y, uint32_t transit);
573 
574   extern void
575   BView_mouse_down (void *view, int x, int y);
576 
577   extern void
578   BView_mouse_up (void *view, int x, int y);
579 
580   extern void
581   BBitmap_import_mono_bits (void *bitmap, void *bits, int wd, int h);
582 
583   extern void
584   haiku_font_pattern_free (struct haiku_font_pattern *pt);
585 
586   extern struct haiku_font_pattern *
587   BFont_find (struct haiku_font_pattern *pt);
588 
589   extern int
590   BFont_open_pattern (struct haiku_font_pattern *pat, void **font, float size);
591 
592   extern void
593   BFont_populate_fixed_family (struct haiku_font_pattern *ptn);
594 
595   extern void
596   BFont_populate_plain_family (struct haiku_font_pattern *ptn);
597 
598   extern void
599   BView_publish_scroll_bar (void *view, int x, int y, int width, int height);
600 
601   extern void
602   BView_forget_scroll_bar (void *view, int x, int y, int width, int height);
603 
604   extern void
605   BView_get_mouse (void *view, int *x, int *y);
606 
607   extern void
608   BView_convert_to_screen (void *view, int *x, int *y);
609 
610   extern void
611   BView_convert_from_screen (void *view, int *x, int *y);
612 
613   extern void
614   BWindow_change_decoration (void *window, int decorate_p);
615 
616   extern void
617   BWindow_set_tooltip_decoration (void *window);
618 
619   extern void
620   BWindow_set_avoid_focus (void *window, int avoid_focus_p);
621 
622   extern void
623   BView_emacs_delete (void *view);
624 
625   extern uint32_t
626   haiku_current_workspace (void);
627 
628   extern uint32_t
629   BWindow_workspaces (void *window);
630 
631   extern void *
632   BPopUpMenu_new (const char *name);
633 
634   extern void
635   BMenu_add_item (void *menu, const char *label, void *ptr, bool enabled_p,
636 		  bool marked_p, bool mbar_p, void *mbw_ptr, const char *key,
637 		  const char *help);
638 
639   extern void
640   BMenu_add_separator (void *menu);
641 
642   extern void *
643   BMenu_new_submenu (void *menu, const char *label, bool enabled_p);
644 
645   extern void *
646   BMenu_new_menu_bar_submenu (void *menu, const char *label);
647 
648   extern int
649   BMenu_count_items (void *menu);
650 
651   extern void *
652   BMenu_item_at (void *menu, int idx);
653 
654   extern void *
655   BMenu_run (void *menu, int x, int y);
656 
657   extern void
658   BPopUpMenu_delete (void *menu);
659 
660   extern void *
661   BMenuBar_new (void *view);
662 
663   extern void
664   BMenu_delete_all (void *menu);
665 
666   extern void
667   BMenuBar_delete (void *menubar);
668 
669   extern void
670   BMenu_item_set_label (void *item, const char *label);
671 
672   extern void *
673   BMenu_item_get_menu (void *item);
674 
675   extern void
676   BMenu_delete_from (void *menu, int start, int count);
677 
678   extern void
679   haiku_ring_bell (void);
680 
681   extern void *
682   BAlert_new (const char *text, enum haiku_alert_type type);
683 
684   extern void *
685   BAlert_add_button (void *alert, const char *text);
686 
687   extern int32_t
688   BAlert_go (void *alert);
689 
690   extern void
691   BButton_set_enabled (void *button, int enabled_p);
692 
693   extern void
694   BView_set_tooltip (void *view, const char *tooltip);
695 
696   extern void
697   BAlert_delete (void *alert);
698 
699   extern void
700   BScreen_res (double *rrsx, double *rrsy);
701 
702   extern void
703   EmacsWindow_parent_to (void *window, void *other_window);
704 
705   extern void
706   EmacsWindow_unparent (void *window);
707 
708   extern int
709   BFont_string_width (void *font, const char *utf8);
710 
711   extern void
712   be_get_version_string (char *version, int len);
713 
714   extern int
715   be_get_display_planes (void);
716 
717   extern int
718   be_get_display_color_cells (void);
719 
720   extern void
721   be_warp_pointer (int x, int y);
722 
723   extern void
724   EmacsWindow_move_weak_child (void *window, void *child, int xoff, int yoff);
725 
726   extern void
727   EmacsView_set_up_double_buffering (void *vw);
728 
729   extern void
730   EmacsView_disable_double_buffering (void *vw);
731 
732   extern void
733   EmacsView_flip_and_blit (void *vw);
734 
735   extern int
736   EmacsView_double_buffered_p (void *vw);
737 
738   extern char *
739   be_popup_file_dialog (int open_p, const char *default_dir, int must_match_p,
740 			int dir_only_p,	void *window, const char *save_text,
741 			const char *prompt,
742 			void (*block_input_function) (void),
743 			void (*unblock_input_function) (void));
744 
745   extern void
746   record_c_unwind_protect_from_cxx (void (*) (void *), void *);
747 
748   extern ptrdiff_t
749   c_specpdl_idx_from_cxx (void);
750 
751   extern void
752   c_unbind_to_nil_from_cxx (ptrdiff_t idx);
753 
754   extern void
755   EmacsView_do_visible_bell (void *view, uint32_t color);
756 
757   extern void
758   BWindow_zoom (void *window);
759 
760   extern void
761   EmacsWindow_make_fullscreen (void *window, int fullscreen_p);
762 
763   extern void
764   EmacsWindow_unzoom (void *window);
765 
766 #ifdef HAVE_NATIVE_IMAGE_API
767   extern int
768   be_can_translate_type_to_bitmap_p (const char *mime);
769 
770   extern void *
771   be_translate_bitmap_from_file_name (const char *filename);
772 
773   extern void *
774   be_translate_bitmap_from_memory (const void *buf, size_t bytes);
775 #endif
776 
777   extern void
778   BMenuBar_start_tracking (void *mbar);
779 
780   extern size_t
781   BBitmap_bytes_length (void *bitmap);
782 
783   extern void
784   BView_show_tooltip (void *view);
785 
786 #ifdef USE_BE_CAIRO
787   extern cairo_surface_t *
788   EmacsView_cairo_surface (void *view);
789 
790   extern void
791   BView_cr_dump_clipping (void *view, cairo_t *ctx);
792 
793   extern void
794   EmacsWindow_begin_cr_critical_section (void *window);
795 
796   extern void
797   EmacsWindow_end_cr_critical_section (void *window);
798 #endif
799 
800   extern void
801   BView_set_and_show_sticky_tooltip (void *view, const char *tooltip,
802 				     int x, int y);
803 
804   extern void
805   BMenu_add_title (void *menu, const char *text);
806 
807   extern int
808   be_plain_font_height (void);
809 
810   extern int
811   be_string_width_with_plain_font (const char *str);
812 
813   extern int
814   be_get_display_screens (void);
815 
816   extern void
817   BWindow_set_min_size (void *window, int width, int height);
818 
819   extern void
820   BWindow_set_size_alignment (void *window, int align_width, int align_height);
821 
822   extern void
823   BWindow_sync (void *window);
824 
825 #ifdef __cplusplus
826   extern void *
827   find_appropriate_view_for_draw (void *vw);
828 }
829 
830 extern _Noreturn void
831 gui_abort (const char *msg);
832 #endif /* _cplusplus */
833 
834 /* Borrowed from X.Org keysymdef.h */
835 #define XK_BackSpace                     0xff08  /* Back space, back char */
836 #define XK_Tab                           0xff09
837 #define XK_Linefeed                      0xff0a  /* Linefeed, LF */
838 #define XK_Clear                         0xff0b
839 #define XK_Return                        0xff0d  /* Return, enter */
840 #define XK_Pause                         0xff13  /* Pause, hold */
841 #define XK_Scroll_Lock                   0xff14
842 #define XK_Sys_Req                       0xff15
843 #define XK_Escape                        0xff1b
844 #define XK_Delete                        0xffff  /* Delete, rubout */
845 #define XK_Home                          0xff50
846 #define XK_Left                          0xff51  /* Move left, left arrow */
847 #define XK_Up                            0xff52  /* Move up, up arrow */
848 #define XK_Right                         0xff53  /* Move right, right arrow */
849 #define XK_Down                          0xff54  /* Move down, down arrow */
850 #define XK_Prior                         0xff55  /* Prior, previous */
851 #define XK_Page_Up                       0xff55
852 #define XK_Next                          0xff56  /* Next */
853 #define XK_Page_Down                     0xff56
854 #define XK_End                           0xff57  /* EOL */
855 #define XK_Begin                         0xff58  /* BOL */
856 #define XK_Select                        0xff60  /* Select, mark */
857 #define XK_Print                         0xff61
858 #define XK_Execute                       0xff62  /* Execute, run, do */
859 #define XK_Insert                        0xff63  /* Insert, insert here */
860 #define XK_Undo                          0xff65
861 #define XK_Redo                          0xff66  /* Redo, again */
862 #define XK_Menu                          0xff67
863 #define XK_Find                          0xff68  /* Find, search */
864 #define XK_Cancel                        0xff69  /* Cancel, stop, abort, exit */
865 #define XK_Help                          0xff6a  /* Help */
866 #define XK_Break                         0xff6b
867 #define XK_Mode_switch                   0xff7e  /* Character set switch */
868 #define XK_script_switch                 0xff7e  /* Alias for mode_switch */
869 #define XK_Num_Lock                      0xff7f
870 #define XK_F1                            0xffbe
871 
872 #endif /* _HAIKU_SUPPORT_H_ */
873