summaryrefslogtreecommitdiff
path: root/src/haiku_support.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/haiku_support.h')
-rw-r--r--src/haiku_support.h746
1 files changed, 746 insertions, 0 deletions
diff --git a/src/haiku_support.h b/src/haiku_support.h
new file mode 100644
index 00000000000..d66dbc5fa60
--- /dev/null
+++ b/src/haiku_support.h
@@ -0,0 +1,746 @@
+/* Haiku window system support. Hey Emacs, this is -*- C++ -*-
+ Copyright (C) 2021-2022 Free Software Foundation, Inc.
+
+This file is part of GNU Emacs.
+
+GNU Emacs 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 3 of the License, or (at
+your option) any later version.
+
+GNU Emacs 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 GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _HAIKU_SUPPORT_H
+#define _HAIKU_SUPPORT_H
+
+#include <stdint.h>
+
+#ifdef HAVE_FREETYPE
+#include <ft2build.h>
+#include <fontconfig/fontconfig.h>
+#include FT_FREETYPE_H
+#include FT_SIZES_H
+#endif
+
+#ifdef USE_BE_CAIRO
+#include <cairo.h>
+#endif
+
+#include <math.h>
+
+#include <kernel/OS.h>
+
+enum haiku_cursor
+ {
+ CURSOR_ID_SYSTEM_DEFAULT = 1,
+ CURSOR_ID_CONTEXT_MENU = 3,
+ CURSOR_ID_COPY = 4,
+ CURSOR_ID_CREATE_LINK = 29,
+ CURSOR_ID_CROSS_HAIR = 5,
+ CURSOR_ID_FOLLOW_LINK = 6,
+ CURSOR_ID_GRAB = 7,
+ CURSOR_ID_GRABBING = 8,
+ CURSOR_ID_HELP = 9,
+ CURSOR_ID_I_BEAM = 2,
+ CURSOR_ID_I_BEAM_HORIZONTAL = 10,
+ CURSOR_ID_MOVE = 11,
+ CURSOR_ID_NO_CURSOR = 12,
+ CURSOR_ID_NOT_ALLOWED = 13,
+ CURSOR_ID_PROGRESS = 14,
+ CURSOR_ID_RESIZE_NORTH = 15,
+ CURSOR_ID_RESIZE_EAST = 16,
+ CURSOR_ID_RESIZE_SOUTH = 17,
+ CURSOR_ID_RESIZE_WEST = 18,
+ CURSOR_ID_RESIZE_NORTH_EAST = 19,
+ CURSOR_ID_RESIZE_NORTH_WEST = 20,
+ CURSOR_ID_RESIZE_SOUTH_EAST = 21,
+ CURSOR_ID_RESIZE_SOUTH_WEST = 22,
+ CURSOR_ID_RESIZE_NORTH_SOUTH = 23,
+ CURSOR_ID_RESIZE_EAST_WEST = 24,
+ CURSOR_ID_RESIZE_NORTH_EAST_SOUTH_WEST = 25,
+ CURSOR_ID_RESIZE_NORTH_WEST_SOUTH_EAST = 26,
+ CURSOR_ID_ZOOM_IN = 27,
+ CURSOR_ID_ZOOM_OUT = 28
+ };
+
+enum haiku_z_group
+ {
+ Z_GROUP_ABOVE,
+ Z_GROUP_NONE,
+ Z_GROUP_BELOW,
+ };
+
+enum haiku_alert_type
+ {
+ HAIKU_EMPTY_ALERT = 0,
+ HAIKU_INFO_ALERT,
+ HAIKU_IDEA_ALERT,
+ HAIKU_WARNING_ALERT,
+ HAIKU_STOP_ALERT
+ };
+
+enum haiku_event_type
+ {
+ QUIT_REQUESTED,
+ FRAME_RESIZED,
+ FRAME_EXPOSED,
+ KEY_DOWN,
+ KEY_UP,
+ ACTIVATION,
+ MOUSE_MOTION,
+ BUTTON_DOWN,
+ BUTTON_UP,
+ ICONIFICATION,
+ MOVE_EVENT,
+ SCROLL_BAR_VALUE_EVENT,
+ SCROLL_BAR_PART_EVENT,
+ SCROLL_BAR_DRAG_EVENT,
+ WHEEL_MOVE_EVENT,
+ MENU_BAR_RESIZE,
+ MENU_BAR_CLICK,
+ MENU_BAR_OPEN,
+ MENU_BAR_SELECT_EVENT,
+ MENU_BAR_CLOSE,
+ MENU_BAR_HELP_EVENT,
+ ZOOM_EVENT,
+ DRAG_AND_DROP_EVENT,
+ APP_QUIT_REQUESTED_EVENT,
+ DUMMY_EVENT,
+ SCREEN_CHANGED_EVENT,
+ MENU_BAR_LEFT,
+ CLIPBOARD_CHANGED_EVENT,
+ };
+
+struct haiku_clipboard_changed_event
+{
+ char dummy;
+};
+
+struct haiku_screen_changed_event
+{
+ bigtime_t when;
+};
+
+struct haiku_quit_requested_event
+{
+ void *window;
+};
+
+struct haiku_resize_event
+{
+ void *window;
+ float width;
+ float height;
+};
+
+struct haiku_expose_event
+{
+ void *window;
+ int x;
+ int y;
+ int width;
+ int height;
+};
+
+struct haiku_drag_and_drop_event
+{
+ void *window;
+ int x, y;
+ void *message;
+};
+
+struct haiku_app_quit_requested_event
+{
+ char dummy;
+};
+
+struct haiku_dummy_event
+{
+ char dummy;
+};
+
+enum haiku_modifier_specification
+ {
+ HAIKU_MODIFIER_ALT = 1,
+ HAIKU_MODIFIER_CTRL = (1 << 1),
+ HAIKU_MODIFIER_SHIFT = (1 << 2),
+ HAIKU_MODIFIER_SUPER = (1 << 3),
+ };
+
+struct haiku_key_event
+{
+ void *window;
+ int modifiers;
+ unsigned keysym;
+ uint32_t multibyte_char;
+
+ /* Time the keypress occurred, in microseconds. */
+ bigtime_t time;
+};
+
+struct haiku_activation_event
+{
+ void *window;
+ int activated_p;
+};
+
+struct haiku_mouse_motion_event
+{
+ void *window;
+ bool just_exited_p;
+ int x;
+ int y;
+ bigtime_t time;
+ bool dnd_message;
+};
+
+struct haiku_menu_bar_left_event
+{
+ void *window;
+ int x, y;
+};
+
+struct haiku_menu_bar_click_event
+{
+ void *window;
+ int x, y;
+};
+
+struct haiku_button_event
+{
+ void *window;
+ void *scroll_bar;
+ int btn_no;
+ int modifiers;
+ int x;
+ int y;
+ bigtime_t time;
+};
+
+struct haiku_iconification_event
+{
+ void *window;
+ int iconified_p;
+};
+
+struct haiku_move_event
+{
+ void *window;
+ int x, y;
+ int decorator_width;
+ int decorator_height;
+};
+
+struct haiku_wheel_move_event
+{
+ void *window;
+ int modifiers;
+ float delta_x;
+ float delta_y;
+};
+
+struct haiku_menu_bar_select_event
+{
+ void *window;
+ void *ptr;
+};
+
+struct haiku_menu_bar_help_event
+{
+ void *window;
+ int mb_idx;
+ void *data;
+ bool highlight_p;
+};
+
+struct haiku_zoom_event
+{
+ void *window;
+ int fullscreen_mode;
+};
+
+enum haiku_font_specification
+ {
+ FSPEC_FAMILY = 1,
+ FSPEC_STYLE = 1 << 1,
+ FSPEC_SLANT = 1 << 2,
+ FSPEC_WEIGHT = 1 << 3,
+ FSPEC_SPACING = 1 << 4,
+ FSPEC_WANTED = 1 << 5,
+ FSPEC_NEED_ONE_OF = 1 << 6,
+ FSPEC_WIDTH = 1 << 7,
+ FSPEC_LANGUAGE = 1 << 8,
+ FSPEC_INDICES = 1 << 9,
+ FSPEC_ANTIALIAS = 1 << 10,
+ };
+
+typedef char haiku_font_family_or_style[64];
+
+enum haiku_font_slant
+ {
+ NO_SLANT = -1,
+ SLANT_OBLIQUE,
+ SLANT_REGULAR,
+ SLANT_ITALIC
+ };
+
+enum haiku_font_width
+ {
+ NO_WIDTH = -1,
+ ULTRA_CONDENSED,
+ EXTRA_CONDENSED,
+ CONDENSED,
+ SEMI_CONDENSED,
+ NORMAL_WIDTH,
+ SEMI_EXPANDED,
+ EXPANDED,
+ EXTRA_EXPANDED,
+ ULTRA_EXPANDED
+ };
+
+enum haiku_font_language
+ {
+ LANGUAGE_CN,
+ LANGUAGE_KO,
+ LANGUAGE_JP,
+ MAX_LANGUAGE /* This isn't a language. */
+ };
+
+enum haiku_font_weight
+ {
+ NO_WEIGHT = -1,
+ HAIKU_THIN = 0,
+ HAIKU_EXTRALIGHT = 40,
+ HAIKU_LIGHT = 50,
+ HAIKU_SEMI_LIGHT = 75,
+ HAIKU_REGULAR = 100,
+ HAIKU_SEMI_BOLD = 180,
+ HAIKU_BOLD = 200,
+ HAIKU_EXTRA_BOLD = 205,
+ HAIKU_BOOK = 400,
+ HAIKU_HEAVY = 800,
+ HAIKU_ULTRA_HEAVY = 900,
+ HAIKU_BLACK = 1000,
+ HAIKU_MEDIUM = 2000,
+ };
+
+enum haiku_fullscreen_mode
+ {
+ FULLSCREEN_MODE_NONE,
+ FULLSCREEN_MODE_WIDTH,
+ FULLSCREEN_MODE_HEIGHT,
+ FULLSCREEN_MODE_BOTH,
+ FULLSCREEN_MODE_MAXIMIZED,
+ };
+
+struct haiku_font_pattern
+{
+ /* Bitmask indicating which fields are set. */
+ int specified;
+
+ /* The next font in this list. */
+ struct haiku_font_pattern *next;
+
+ /* The last font in the list during font lookup. */
+ struct haiku_font_pattern *last;
+
+ /* The next font in the list whose family differs from this one.
+ Only valid during font lookup. */
+ struct haiku_font_pattern *next_family;
+
+ /* The family of the font. */
+ haiku_font_family_or_style family;
+
+ /* The style of the font. */
+ haiku_font_family_or_style style;
+
+ /* Whether or the font is monospace. */
+ int mono_spacing_p;
+
+ /* The slant of the font. */
+ enum haiku_font_slant slant;
+
+ /* The width of the font. */
+ enum haiku_font_width width;
+
+ /* The language of the font. Used during font lookup. */
+ enum haiku_font_language language;
+
+ /* The weight of the font. */
+ enum haiku_font_weight weight;
+
+ /* List of characters that must be present in the font for the match
+ to succeed. */
+ int *wanted_chars;
+
+ /* The number of characters in `wanted_chars'. */
+ int want_chars_len;
+
+ /* List of characters. The font must fullfill at least one of
+ them for the match to succeed. */
+ int *need_one_of;
+
+ /* The number of characters in `need_one_of'. */
+ int need_one_of_len;
+
+ /* The index of the family of the font this pattern represents. */
+ int family_index;
+
+ /* The index of the style of the font this pattern represents. */
+ int style_index;
+
+ /* Temporary field used during font enumeration. */
+ int oblique_seen_p;
+
+ /* Whether or not to enable antialiasing in the font. This field is
+ special in that it's not handled by `BFont_open_pattern'. */
+ int use_antialiasing;
+};
+
+struct haiku_scroll_bar_value_event
+{
+ void *scroll_bar;
+ void *window;
+ int position;
+};
+
+struct haiku_scroll_bar_drag_event
+{
+ void *scroll_bar;
+ void *window;
+ int dragging_p;
+};
+
+enum haiku_scroll_bar_part
+ {
+ HAIKU_SCROLL_BAR_UP_BUTTON,
+ HAIKU_SCROLL_BAR_DOWN_BUTTON
+ };
+
+struct haiku_scroll_bar_part_event
+{
+ void *scroll_bar;
+ void *window;
+ enum haiku_scroll_bar_part part;
+};
+
+struct haiku_menu_bar_resize_event
+{
+ void *window;
+ int width;
+ int height;
+};
+
+struct haiku_menu_bar_state_event
+{
+ void *window;
+};
+
+struct haiku_session_manager_reply
+{
+ bool quit_reply;
+};
+
+#ifdef __cplusplus
+/* Haiku's built in Height and Width functions for calculating
+ rectangle sizes are broken, probably for compatibility with BeOS:
+ they do not round up in a reasonable fashion, and they return the
+ numerical difference between the end and start sides in both
+ directions, instead of the actual size.
+
+ For example:
+
+ BRect (1, 1, 5, 5).IntegerWidth ()
+
+ Will return 4, when in reality the rectangle is 5 pixels wide,
+ since the left corner is also a pixel!
+
+ All code in Emacs should use the macros below to calculate the
+ dimensions of a BRect, instead of relying on the broken Width and
+ Height functions. */
+
+#define BE_RECT_HEIGHT(rect) (ceil (((rect).bottom - (rect).top) + 1))
+#define BE_RECT_WIDTH(rect) (ceil (((rect).right - (rect).left) + 1))
+#endif /* __cplusplus */
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+#include <OS.h>
+
+#ifdef __cplusplus
+typedef void *haiku;
+
+extern void haiku_put_pixel (haiku, int, int, unsigned long);
+extern unsigned long haiku_get_pixel (haiku, int, int);
+#endif
+
+extern port_id port_application_to_emacs;
+extern port_id port_popup_menu_to_emacs;
+extern port_id port_emacs_to_session_manager;
+
+extern void haiku_io_init (void);
+extern void haiku_io_init_in_app_thread (void);
+
+extern void haiku_read_size (ssize_t *, bool);
+
+extern int haiku_read (enum haiku_event_type *, void *, ssize_t);
+extern int haiku_read_with_timeout (enum haiku_event_type *, void *, ssize_t,
+ bigtime_t, bool);
+extern int haiku_write (enum haiku_event_type, void *);
+extern int haiku_write_without_signal (enum haiku_event_type, void *, bool);
+
+extern void rgb_color_hsl (uint32_t, double *, double *, double *);
+extern void hsl_color_rgb (double, double, double, uint32_t *);
+
+extern void *BBitmap_new (int, int, int);
+extern void *BBitmap_data (void *);
+extern int BBitmap_convert (void *, void **);
+extern void be_draw_cross_on_pixmap (void *, int, int, int, int,
+ uint32_t);
+
+extern void BBitmap_free (void *);
+
+extern void BBitmap_dimensions (void *, int *, int *, int *, int *,
+ int32_t *, int *);
+extern void *BApplication_setup (void);
+extern void *BWindow_new (void **);
+extern void BWindow_quit (void *);
+
+extern void BWindow_set_offset (void *, int, int);
+extern void BWindow_iconify (void *);
+extern void BWindow_set_visible (void *, int);
+extern void BWindow_retitle (void *, const char *);
+extern void BWindow_resize (void *, int, int);
+extern void BWindow_activate (void *);
+extern void BWindow_center_on_screen (void *);
+extern void BWindow_change_decoration (void *, int);
+extern void BWindow_set_tooltip_decoration (void *);
+extern void BWindow_set_avoid_focus (void *, int);
+extern void BWindow_set_size_alignment (void *, int, int);
+extern void BWindow_sync (void *);
+extern void BWindow_send_behind (void *, void *);
+extern bool BWindow_is_active (void *);
+extern void BWindow_set_override_redirect (void *, bool);
+extern void BWindow_dimensions (void *, int *, int *);
+extern void BWindow_set_z_group (void *, enum haiku_z_group);
+extern void BWindow_set_sticky (void *, bool);
+extern void BWindow_Flush (void *);
+
+extern void BFont_close (void *);
+extern void BFont_metrics (void *, int *, int *, int *, int *,
+ int *, int *, int *, int *, int *, int *);
+extern int BFont_have_char_p (void *, int32_t);
+extern int BFont_have_char_block (void *, int32_t, int32_t);
+extern void BFont_char_bounds (void *, const char *, int *, int *, int *);
+extern void BFont_nchar_bounds (void *, const char *, int *, int *,
+ int *, int32_t);
+extern struct haiku_font_pattern *BFont_find (struct haiku_font_pattern *);
+
+extern void BView_StartClip (void *);
+extern void BView_EndClip (void *);
+extern void BView_SetHighColor (void *, uint32_t);
+extern void BView_SetLowColor (void *, uint32_t);
+extern void BView_SetPenSize (void *, int);
+extern void BView_SetFont (void *, void *);
+extern void BView_MovePenTo (void *, int, int);
+extern void BView_DrawString (void *, const char *, ptrdiff_t);
+extern void BView_DrawChar (void *, char);
+extern void BView_FillRectangle (void *, int, int, int, int);
+extern void BView_FillRectangleAbs (void *, int, int, int, int);
+extern void BView_FillTriangle (void *, int, int, int, int, int, int);
+extern void BView_StrokeRectangle (void *, int, int, int, int);
+extern void BView_SetViewColor (void *, uint32_t);
+extern void BView_ClipToRect (void *, int, int, int, int);
+extern void BView_ClipToInverseRect (void *, int, int, int, int);
+extern void BView_StrokeLine (void *, int, int, int, int);
+extern void BView_CopyBits (void *, int, int, int, int, int, int, int, int);
+extern void BView_InvertRect (void *, int, int, int, int);
+extern void BView_DrawBitmap (void *, void *, int, int, int, int, int, int,
+ int, int, bool);
+extern void BView_DrawBitmapWithEraseOp (void *, void *, int, int, int, int);
+extern void BView_DrawBitmapTiled (void *, void *, int, int,
+ int, int, int, int, int, int);
+
+extern void BView_resize_to (void *, int, int);
+extern void BView_set_view_cursor (void *, void *);
+extern void BView_move_frame (void *, int, int, int, int);
+extern void BView_scroll_bar_update (void *, int, int, int, int, bool);
+
+extern void *be_transform_bitmap (void *, void *, uint32_t, double,
+ int, int, bool);
+extern void be_apply_affine_transform (void *, double, double, double,
+ double, double, double);
+extern void be_apply_inverse_transform (double (*)[3], int, int, int *, int *);
+extern void be_draw_image_mask (void *, void *, int, int, int, int, int, int,
+ int, int, uint32_t);
+extern void be_draw_bitmap_with_mask (void *, void *, void *, int, int, int,
+ int, int, int, int, int, bool);
+
+extern void be_get_display_resolution (double *, double *);
+extern void be_get_screen_dimensions (int *, int *);
+
+/* Functions for creating and freeing cursors. */
+extern void *be_create_cursor_from_id (int);
+extern void *be_create_pixmap_cursor (void *, int, int);
+extern void be_delete_cursor (void *);
+
+extern void *be_make_scroll_bar_for_view (void *, int, int, int, int, int);
+extern void BScrollBar_delete (void *);
+extern int BScrollBar_default_size (int);
+
+extern void BView_invalidate (void *);
+extern void BView_draw_lock (void *, bool, int, int, int, int);
+extern void BView_invalidate_region (void *, int, int, int, int);
+extern void BView_draw_unlock (void *);
+extern void BBitmap_import_fringe_bitmap (void *, unsigned short *, int, int);
+
+extern void haiku_font_pattern_free (struct haiku_font_pattern *);
+
+extern int BFont_open_pattern (struct haiku_font_pattern *, void **, float);
+extern void BFont_populate_fixed_family (struct haiku_font_pattern *);
+extern void BFont_populate_plain_family (struct haiku_font_pattern *);
+
+extern void BView_publish_scroll_bar (void *, int, int, int, int);
+extern void BView_forget_scroll_bar (void *, int, int, int, int);
+extern bool BView_inside_scroll_bar (void *, int, int);
+extern void BView_get_mouse (void *, int *, int *);
+extern void BView_convert_to_screen (void *, int *, int *);
+extern void BView_convert_from_screen (void *, int *, int *);
+
+extern void BView_emacs_delete (void *);
+
+extern void *BPopUpMenu_new (const char *);
+
+extern void BMenu_add_item (void *, const char *, void *, bool,
+ bool, bool, void *, const char *,
+ const char *);
+extern void BMenu_add_separator (void *);
+extern void *BMenu_new_submenu (void *, const char *, bool);
+extern void *BMenu_new_menu_bar_submenu (void *, const char *);
+extern int BMenu_count_items (void *);
+extern void *BMenu_item_at (void *, int);
+extern void *BMenu_run (void *, int, int, void (*) (void *, void *),
+ void (*) (void), void (*) (void),
+ struct timespec (*) (void), void *);
+extern void BPopUpMenu_delete (void *);
+extern void *BMenuBar_new (void *);
+extern void BMenu_delete_all (void *);
+extern void BMenuBar_delete (void *);
+extern void BMenu_item_set_label (void *, const char *);
+extern void *BMenu_item_get_menu (void *);
+extern void BMenu_delete_from (void *, int, int);
+
+extern void haiku_ring_bell (void);
+
+extern void *BAlert_new (const char *, enum haiku_alert_type);
+extern void *BAlert_add_button (void *, const char *);
+extern void BAlert_set_offset_spacing (void *);
+extern int32 BAlert_go (void *, void (*) (void), void (*) (void),
+ void (*) (void));
+extern void BButton_set_enabled (void *, int);
+extern void BView_set_tooltip (void *, const char *);
+extern void BView_show_tooltip (void *);
+extern void be_show_sticky_tooltip (void *, const char *, int, int);
+
+extern void BAlert_delete (void *);
+
+extern void EmacsWindow_parent_to (void *, void *);
+extern void EmacsWindow_unparent (void *);
+extern void EmacsWindow_move_weak_child (void *, void *, int, int);
+
+extern void be_get_version_string (char *, int);
+extern int be_get_display_planes (void);
+extern int be_get_display_color_cells (void);
+extern bool be_is_display_grayscale (void);
+extern void be_warp_pointer (int, int);
+
+extern void EmacsView_set_up_double_buffering (void *);
+extern void EmacsView_disable_double_buffering (void *);
+extern void EmacsView_flip_and_blit (void *);
+extern int EmacsView_double_buffered_p (void *);
+
+extern char *be_popup_file_dialog (int, const char *, int,
+ int, void *, const char *,
+ const char *, void (*) (void));
+
+#ifdef HAVE_NATIVE_IMAGE_API
+extern int be_can_translate_type_to_bitmap_p (const char *);
+extern void *be_translate_bitmap_from_file_name (const char *);
+extern void *be_translate_bitmap_from_memory (const void *, size_t);
+#endif
+
+extern bool BMenuBar_start_tracking (void *);
+extern size_t BBitmap_bytes_length (void *);
+
+#ifdef USE_BE_CAIRO
+extern cairo_t *EmacsView_cairo_context (void *);
+extern void BView_cr_dump_clipping (void *, cairo_t *);
+extern void EmacsWindow_begin_cr_critical_section (void *);
+extern void EmacsWindow_end_cr_critical_section (void *);
+#endif
+
+extern void BMenu_add_title (void *, const char *);
+
+extern int be_plain_font_height (void);
+extern int be_string_width_with_plain_font (const char *);
+extern void be_init_font_data (void);
+extern void be_evict_font_cache (void);
+extern int be_get_display_screens (void);
+extern bool be_use_subpixel_antialiasing (void);
+extern const char *be_find_setting (const char *);
+extern haiku_font_family_or_style *be_list_font_families (size_t *);
+extern void be_font_style_to_flags (char *, struct haiku_font_pattern *);
+extern void *be_open_font_at_index (int, int, float);
+extern void be_set_font_antialiasing (void *, bool);
+extern int be_get_ui_color (const char *, uint32_t *);
+
+extern void BMessage_delete (void *);
+
+extern bool be_drag_message (void *, void *, bool, void (*) (void),
+ void (*) (void), void (*) (void),
+ bool (*) (void));
+extern bool be_drag_and_drop_in_progress (void);
+
+extern bool be_replay_menu_bar_event (void *, struct haiku_menu_bar_click_event *);
+extern bool be_select_font (void (*) (void), bool (*) (void),
+ haiku_font_family_or_style *,
+ haiku_font_family_or_style *,
+ int *, bool, int, int, int,
+ bool, bool *);
+
+extern int be_find_font_indices (struct haiku_font_pattern *, int *, int *);
+extern status_t be_roster_launch (const char *, const char *, char **,
+ ptrdiff_t, void *, team_id *);
+extern void be_get_window_decorator_dimensions (void *, int *, int *, int *, int *);
+extern void be_get_window_decorator_frame (void *, int *, int *, int *, int *);
+extern void be_send_move_frame_event (void *);
+extern void be_set_window_fullscreen_mode (void *, enum haiku_fullscreen_mode);
+
+extern status_t be_write_node_message (const char *, const char *, void *);
+extern void be_send_message (const char *, void *);
+
+extern void be_lock_window (void *);
+extern void be_unlock_window (void *);
+extern bool be_get_explicit_workarea (int *, int *, int *, int *);
+extern void be_clear_grab_view (void);
+extern void be_set_use_frame_synchronization (void *, bool);
+#ifdef __cplusplus
+}
+
+extern _Noreturn void gui_abort (const char *);
+extern void *find_appropriate_view_for_draw (void *);
+#endif /* _cplusplus */
+
+#endif /* _HAIKU_SUPPORT_H_ */
+
+// Local Variables:
+// eval: (setf (alist-get 'inextern-lang c-offsets-alist) 0)
+// End: