/*
  wimp.h - Riscos Wimp definitions

  created  2/2022
*/

#ifndef wimp_h
#define wimp_h


typedef struct win_data_s
{
  int win_handle;
  unsigned char *buffer;
  unsigned char *workspace;
} win_data_t;

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 // CD audio track

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

// mouse buttons
#define MOUSE_ADJUST    1
#define MOUSE_MENU      2
#define MOUSE_SELECT    4

// window handles
#define ICONBAR         -2

// icon handles
#define WORKAREA        -1

// 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
