/* Copyright 1996 Acorn Computers Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/*
 * wimplib.h
 * veneers onto the wimp SWIs
 */

#ifndef __wimplib_h
#define __wimplib_h

#ifndef __kernel_h
#include "kernel.h"
#endif

#ifndef __wimp_h
#include "wimp.h"
#endif

#ifdef __cplusplus
extern "C"
{
#endif


_kernel_oserror *wimp_initialise        (int version,
                                        char *name,
                                        int *messages,
                                        int *cversion,
                                        int *task);

_kernel_oserror *wimp_create_window     (WimpWindow *defn, int *handle);

_kernel_oserror *wimp_create_icon       (int priority,
                                        WimpCreateIconBlock *defn,
                                        int *handle);

_kernel_oserror *wimp_delete_window     (WimpDeleteWindowBlock *block);

_kernel_oserror *wimp_delete_icon       (WimpDeleteIconBlock *block);

_kernel_oserror *wimp_open_window       (WimpOpenWindowBlock *show);

_kernel_oserror *wimp_open_window2      (WimpOpenWindowBlock *show,
                                        int parent_handle,
                                        unsigned int flags);

_kernel_oserror *wimp_close_window      (int *window_handle);

_kernel_oserror *wimp_poll              (int mask,
                                        WimpPollBlock *block,
                                        int *pollword,
                                        int *event_code);

_kernel_oserror *wimp_redraw_window     (WimpRedrawWindowBlock *block, int *more);

_kernel_oserror *wimp_update_window     (WimpRedrawWindowBlock *block, int *more);

_kernel_oserror *wimp_get_rectangle     (WimpRedrawWindowBlock *block, int *more);

_kernel_oserror *wimp_get_window_state  (WimpGetWindowStateBlock *state);

_kernel_oserror *wimp_get_window_state2 (WimpGetWindowStateBlock *state,
                                         int *parent_handle,
                                         unsigned int *flags);

_kernel_oserror *wimp_get_window_info   (WimpGetWindowInfoBlock *block);

_kernel_oserror *wimp_get_window_info_no_icon_data (WimpGetWindowInfoBlock *block);

_kernel_oserror *wimp_set_icon_state    (WimpSetIconStateBlock *block);

_kernel_oserror *wimp_get_icon_state    (WimpGetIconStateBlock *block);

_kernel_oserror *wimp_get_pointer_info  (WimpGetPointerInfoBlock *block);

#define CancelDrag 0

_kernel_oserror *wimp_drag_box          (WimpDragBox *block);

_kernel_oserror *wimp_force_redraw      (int window_handle,
                                        int xmin,
                                        int ymin,
                                        int xmax,
                                        int ymax);

_kernel_oserror *wimp_force_title_redraw (int window_handle);

_kernel_oserror *wimp_set_caret_position (int window_handle,
                                        int icon_handle,
                                        int xoffset,
                                        int yoffset,
                                        int height,
                                        int index);

_kernel_oserror *wimp_get_caret_position (WimpGetCaretPositionBlock *block);

#define CloseMenu ((void *) -1)
_kernel_oserror *wimp_create_menu       (void * handle,
                                        int x,int y);

_kernel_oserror *wimp_decode_menu       (WimpMenu *data,
                                        int *selections,
                                        char *buffer);

_kernel_oserror *wimp_which_icon        (int window_handle,
                                        int *icons,
                                        unsigned int mask,
                                        unsigned int match);

_kernel_oserror *wimp_set_extent        (int window_handle, BBox *area);

_kernel_oserror *wimp_set_pointer_shape (int shape,
                                        void *data,
                                        int width,
                                        int height,
                                        int activex,
                                        int activey);

_kernel_oserror *wimp_open_template     (char *name);

_kernel_oserror *wimp_close_template    (void);

_kernel_oserror *wimp_load_template     (_kernel_swi_regs *regs);

_kernel_oserror *wimp_process_key       (int keycode);

_kernel_oserror *wimp_close_down        (int th);

_kernel_oserror *wimp_start_task        (char *cl, int *handle);

int             wimp_report_error       (_kernel_oserror *er,
                                        int flags,
                                        const char *name, ...);

/*
 * On 3.50 onwards we can have additional parameters:
 *                                      char *sprite
 *                                      void *area
 *                                      char *buttons
 */

_kernel_oserror *wimp_get_window_outline (WimpGetWindowOutlineBlock *block);

_kernel_oserror *wimp_pollidle          (int mask,
                                        WimpPollBlock *block,
                                        int time,
                                        int *pollword,
                                        int *event_code);

_kernel_oserror *wimp_plot_icon         (WimpPlotIconBlock *block);

_kernel_oserror *wimp_set_mode          (int mode);

typedef struct {
   unsigned int colours[16];
   unsigned int border;
   unsigned int pointer1;
   unsigned int pointer2;
   unsigned int pointer3;
} Palette;

_kernel_oserror *wimp_set_palette       (Palette *palette);

_kernel_oserror *wimp_read_palette      (Palette *palette);

#define Wimp_BackgroundColour (128)
_kernel_oserror *wimp_set_colour        (int colour);

_kernel_oserror *wimp_send_message      (int code,
                                        void *block,
                                        int handle,
                                        int icon,
                                        int *th);

_kernel_oserror *wimp_create_submenu    (void * handle,
                                        int x,int y);

typedef struct {
   int r2;         /* ignored on entry */
   int r3;
   int r4;
   int r5;
   int r6;
   int r7;
}SpriteParams;

_kernel_oserror *wimp_sprite_op         (int code,
                                        char *name,
                                        SpriteParams *p);

_kernel_oserror *wimp_base_of_sprites   (void **rom,
                                        void **ram);

_kernel_oserror *wimp_block_copy        (int handle,
                                        int sxmin,
                                        int symin,
                                        int sxmax,
                                        int symax,
                                        int dxmin,
                                        int dymin);

_kernel_oserror *wimp_slot_size         (int current,
                                        int next,
                                        int *current_out,
                                        int *next_out,
                                        int *free);

/* readpixtrans and claimfreememory not supported */

_kernel_oserror *wimp_command_window    (int type);

_kernel_oserror *wimp_text_colour       (int colour);

_kernel_oserror *wimp_transfer_block    (int sh,
                                        void *sbuf,
                                        int dh,
                                        void *dbuf,
                                        int size);

typedef struct {
   int r0;
   int r1;
} WimpSysInfo;

_kernel_oserror *wimp_read_sys_info     (int reason,
                                        WimpSysInfo *results);

_kernel_oserror *wimp_set_font_colours  (int fore,
                                        int back);

_kernel_oserror *wimp_get_menu_state    (int report,
                                        int *state,
                                        int window,
                                        int icon);

/* no filter manager interface */

/* do not use the following two functions in toolbox applications */
_kernel_oserror *wimp_add_messages      (int *list);

_kernel_oserror *wimp_remove_messages   (int *list);

_kernel_oserror *wimp_set_colour_mapping (int which_palette,
                                        int *bpp1,
                                        int *bpp2,
                                        int *bpp4);

_kernel_oserror *wimp_text_op           (_kernel_swi_regs *regs);

/* no extend or set watchdog state */

_kernel_oserror *wimp_resize_icon       (int window,
                                        int icon,
                                        int xmin,
                                        int ymin,
                                        int xmax,
                                        int ymax);


#ifdef __cplusplus
}
#endif


#endif
