/* DRW Action Data Header File. */

#ifndef drwacnh_H
 #define drwacnh_H

#ifndef wimp_H
 #include "OSlib/wimp.h"
#endif

#if defined NAMESPACE_DRWIMPC
  namespace DrWimpC {
#endif

#if defined NAMESPACE_OSLIB
  using namespace OSLib;
#endif

typedef struct drw_action_data           drw_action_data;
typedef struct drw_user_action_data      drw_user_action_data;

typedef struct drw_msg_action_data       drw_msg_action_data;
typedef struct drw_user_msg_action_data  drw_user_msg_action_data;
typedef struct drw_msgaction_data        drw_msgaction_data;

typedef struct drw_msgack_data         drw_msgack_data;
typedef struct drw_user_msg_ack_data     drw_user_msg_ack_data;

typedef void (*drw_action_fn)(wimp_block *wb,
                              wimp_event_no action,
                              void *actiondata);

typedef int (*drw_user_action_fn)(wimp_block *wb,
                                  wimp_event_no action,
                                  void *actiondata);

typedef void (*drw_msg_action_fn)(wimp_message *wmsg,
                                  bits msgactioncode,
                                  wimp_event_no action,
                                  void *actiondata);

typedef int (*drw_user_msg_action_fn)(wimp_message *wmsg,
                                      bits msgactioncode,
                                      wimp_event_no action,
                                      void *actiondata);

typedef void (*drw_msgack_fn)(wimp_message *msg,
                              bits msgack,
                              wimp_event_no action,
                              void *actiondata);

struct drw_action_data {

wimp_event_no action;
drw_action_fn actionfn;
void *actiondata;

};


struct drw_user_action_data {

wimp_w whan;
wimp_i icon;
drw_user_action_fn actionfn;
void *actiondata;

};


struct drw_msg_action_data {

bits               msgaction;
drw_msg_action_fn  msgactionfn;
void               *actiondata;

};


struct drw_user_msg_action_data {

bits msgactioncode;
drw_user_msg_action_fn msgactionfn;
void *actiondata;

};


struct drw_msgaction_data {

wimp_message *wmsg;
wimp_event_no reason;
int result;

};


struct drw_msgack_data {

bits               msgack;
drw_msgack_fn      msgackfn;
void               *actiondata;

};


struct drw_user_msg_ack_data {

bits msgactioncode;
drw_user_msg_action_fn msgackfn;
void *actiondata;

};


#ifdef __cplusplus
extern "C" {
#endif

extern void drw_set_action(wimp_event_no action,
                           drw_action_fn actionfn,
                           void *actiondata);
extern void drw_set_msg_action(bits msgaction,
                               drw_msg_action_fn actionfn,
                               void *actiondata);
extern void drw_set_msgack(bits msgackcode,
                           drw_msgack_fn msgackfn,
                           void *actiondata);
extern int drw_set_user_action(wimp_event_no actioncode,
                               wimp_w whan,
                               wimp_i icon,
                               char *iconname,
                               int objectid,
                               int occno,
                               drw_user_action_fn actionfn,
                               void *actiondata);

#ifdef __cplusplus
}
#endif

#if defined NAMESPACE_DRWIMPC
  }
#endif

#ifndef drwacnIfn_H
 #include "DRW/drwacnIfn.h"
#endif

#include "DRW/drwaddmsgsh.h"

#endif


/* End of DRW Action Header Files. */
