/*
  wimp.h - Riscos Wimp definitions

  created  2/2022
*/

#ifndef wimp_h
#define wimp_h

#include "kernel.h"
#include "swis.h"

typedef struct menu_item_s
{
  int item_flags;
  int sub;
  int icon_flags;

  char *text;
  char *val;
  int len;
} menu_item_t;

typedef struct menu_s
{
  char *text;
  char *val;
  int len;

  char title_fore;
  char title_back;
  char work_fore;
  char work_back;
  int width;
  int height;
  int gap;
  menu_item_t item[];
} menu_t;


typedef struct sprite_header_s
{
  /* control block */
  int area_size;   /* size of area in bytes */
  int num;         /* number of sprites in file */
  int offset;      /* offset to 1st sprite */
  int size_1;      /* offset to 1st free word */
  /* sprite */
  int size_2;      /* offset to next sprite */
  char name[12];   /* sprite name */
  int width;       /* width in words -1 */
  int height;      /* height in lines - 1 */
  int first;       /* first bit used (left) */
  int last;        /* last bit used (right) */
  int s_offset;    /* offset to sprite image */
  int m_offset;    /* offset to mask, or sprite if none */
  int mode;        /* sprite type */
} sprite_header_t;


/* message numbers */
#define MESSAGE_QUIT          0
#define MESSAGE_DATASAVE      1
#define MESSAGE_DATASAVEACK   2
#define MESSAGE_DATALOAD      3
#define MESSAGE_DATALOADACK   4
#define MESSAGE_PALETTECHANGE 9
#define MESSAGE_HELPREQUEST   0x502
#define MESSAGE_HELPREPLY     0x503
#define MESSAGE_MODECHANGE    0x400c1

/* filetypes */
#define DIRECTORY       0x1000
#define TEXT            0xfff
#define DATA            0xffd
#define SPRITE          0xff9
#define OBEY            0xfeb
#define MIDI            0xfd4
#define WAVE            0xfb1
#define CSV             0xdfe
#define MPEG            0xbf8
#define AMPEG           0x1ad
#define RAW             0x0cd

/* OS_file bits */
#define OS_FILE         8
#define READ_CATINFO    17
#define WRITE_CATINFO   18
#define IS_FILE         1

#define MOUSE_ADJUST    1
#define MOUSE_MENU      2
#define MOUSE_SELECT    4

/* window handles */
#define ICONBAR         -2

// icon flags
#define IC_DEF       0x07000121
#define IC_SELECTED  (1<<21)
#define IC_SHADED    (1<<22)

// item flags
#define IT_TICKED       1
#define IT_DOTTED       2

#endif
