#ifndef riscoswimp_H
#define riscoswimp_H

#include <stdbool.h>

#ifdef wimp_H
extern wimp_w ScreenW;
extern wimp_t our_task;
#endif
extern bool hiresmode;
extern char StoryName[1024];
extern bool grab_fkeys;
extern bool showcaret;
extern bool warn_overwrite;
extern bool pauseexit;
extern bool smartquotes;
extern bool line_editing;
extern bool command_recall;
extern bool line_editing;
extern int default_path[4];
extern int log2bpp;
#ifdef toolbox_H
extern toolbox_o mainmenu;
#endif
extern int awaiting_file;
extern int last_menu, last_item;
extern int caret_enabled;
extern os_colour true_default_fg, true_default_bg;
extern void *pollword;
extern const char *const file_ext[4];
extern bool file_prompt[4];
extern bool file_savebox[4];

#define action_GameMenu 16

/* Auxiliary non-ZSCII input codes */
#define key_CTRL_U 0x100
#define key_CTRL_LEFT 0x101
#define key_CTRL_RIGHT 0x102
#define key_SHIFT_LEFT 0x103
#define key_SHIFT_RIGHT 0x104
#define key_COPY 0x105
#define key_CTRL_COPY 0x106
#define key_FILE 0x107

int NextKey(void);
void load_choices(void);
void initialise_wimp(void);
void do_update_window(os_box *area);
void setup_mouse(int use_mouse);
void setup_save_box(char *filename, int type, bool silent, bool persist);
void open_save_box(bool persist);
void finish_save_box(void);
#ifdef wimp_H
bool modechange_handler(wimp_message *message, void *handle);
bool palettechange_handler(wimp_message *message, void *handle);
wimp_event_no poll(void);
wimp_event_no poll_noswitch(void);
wimp_event_no poll_idle(os_t earliest);
#endif
void update_mouse_info(void);
void SetTitle(void);
void SetBorder(int fs);
const char *GameTitle(void);
const char *TaskName(void);
void pre_initialise_wimp(void);
void error(const os_error *);

void initialise_flex(void);

int claim_null_events(void);
int release_null_events(void);

#endif
