

#ifndef _bindings_h
#define _bindings_h

#define ANY_MODE -1
#define DEFAULT_MODE -2

#define do_binding(bi,ev) (*(bi)->func)((bi), (ev))

typedef struct bind_info_s {
  void (*func)();
  int whatmode;
  int type;
  unsigned int keycode;
  unsigned int modifiers;
  unsigned int button;
  union {
    struct {
      char *win_name;
    } find;
    struct {
      int x, y;
    } warpto;
    struct {
      int dx, dy;
    } warp;
    struct {
      int dx, dy;
    } move;
    struct {
      int x, y;
    } moveto;
    struct {
      int dx, dy;
    } screen;
    struct {
      int x, y;
    } screento;
    struct {
      int dx, dy;
    } carry;
    struct {
      int x, y;
    } carryto;
    struct {
      int dx, dy;
    } size;
    struct {
      int x, y;
    } sizeto;
    struct {
      int mode;
    } setmode;
    struct {
      int mode;
      int x;
    } setx;
    struct {
      int mode;
      int y;
    } sety;
    struct {
      int mode;
    } setmaker;
    struct {
      Window window_id;
    } goto_window;
    struct {
      unsigned int modifiers;
      unsigned int button;
      int x, y;
    } mouseclick;
    struct {
      char *cmd;
    } system;
  } data;
} BindInfo_S, *BindInfo;

BindInfo realloc_binding();

#endif
