#ifndef I_CHAN
#define I_CHAN

extern void raw_dump_channel(chan_ptr clist);
extern void recreate_chan_mode(chan_ptr clist, int chan, char *mode);
extern void set_chan_mode(chan_ptr clist, char *chan, char *mode);
extern void user_chan_nick(chan_ptr clist, char *old, char *new, int nick);
extern int user_on_chan(chan_ptr clist, char *chan, char *nick);
extern int is_chanop(chan_ptr clist, char *chan, char *nick);
extern void remove_from_chan(chan_ptr clist, char *chan, char *nick);
extern void add_users_to_chan(chan_ptr clist, char *chan, char *users);
extern void get_channels_from_server(server_ptr srv, char *str, int maxlen);
extern void free_chan(chan_ptr clist, int chan_index);
extern int find_chan_free(chan_ptr clist, win_ptr win);
extern int set_chan_used(chan_ptr clist, int chan_index, win_ptr win);
extern char *get_chan_name(chan_ptr clist, int index, char *name);
extern int get_chan_num(chan_ptr clist, char *name, win_ptr *win);
extern int push_chan(chan_ptr *clist, char *chan_name, win_ptr win);
extern chan_ptr kill_server_channels(chan_ptr clist, char **to_join);
extern win_ptr delete_channel(chan_ptr *clist, char *chan);

typedef struct user_struct *user_ptr;
struct user_struct {
  char *nick;
  char chanop, padd[3];
  user_ptr next;
};

#define C_INVITE    1
#define C_KEY       2
#define C_LIMIT     4
#define C_MODERATED 8
#define C_NOOUTSIDE 16
#define C_PRIVATE   32
#define C_SECRET    64
#define C_TOPIC     128
#define C_OP        256

struct chan_node {
  char *str;
  int index;
  win_ptr window;
  int mode;
  char *key;
  int limit;
  user_ptr user_list;
  chan_ptr next;
};

#endif
