/* Newsbase message codes */

#ifndef __newsbase_h
#define __newsbase_h

#include "wimp.h"

enum NewsBase_MessageCodes {
  Wimp_MNewsBaseCommand = 0x83580,
  Wimp_MNewsBaseReply,
  Wimp_MNewsBaseUpdate
};

enum NewsBase_ReasonCodes {
  NewsBase_StartUp =		0,
  NewsBase_ShutDown =		10,
  NewsBase_SetUser =		20,
  NewsBase_ListGroups =		100,
  NewsBase_GetArticle =		220,
  NewsBase_DeleteArticle =	250,
  NewsBase_CopyArticle =	270,
  NewsBase_Overview =		290
};

enum NewsBase_UpdateReasons {
  NewsBase_GroupCreated,
  NewsBase_GroupDeleted
};

typedef struct {
  int    size;
  int    sender;
  int    my_ref;
  int    your_ref;
  int    action_code;
  int    newsbase_action;
} NewsBaseMessageHeader;

typedef struct {
  NewsBaseMessageHeader hdr;
  int version, revision;
} NewsBaseStartUp;

typedef struct {
  NewsBaseMessageHeader hdr;
  int encryption;
  int blank;
  char username[256-32];
} NewsBaseSetUser;

typedef struct {
  NewsBaseMessageHeader hdr;
  int list_type;
  int dummy;
  char groupname[256-32];
} NewsBaseListGroups;

typedef struct {
  NewsBaseMessageHeader hdr;
  unsigned first, last;
  unsigned estimated_number;
  char groupname[256-36];
} NewsBaseGroupList;

typedef struct {
  NewsBaseMessageHeader hdr;
  unsigned article;
  int flags;
  char groupname[256-32];
} NewsBaseGetArticle;

typedef struct {
  NewsBaseMessageHeader hdr;
  unsigned article;
  int size;
  char groupname[256-32];
} NewsBaseGotArticle;

typedef struct {
  NewsBaseMessageHeader hdr;
  unsigned first, last;
  char groupandfolder[256-32];
} NewsBaseCopyArticle;

typedef struct {
  NewsBaseMessageHeader hdr;
  unsigned first, last;
  char groupname[256-32];
} NewsBaseGetOverview;

typedef struct {
  NewsBaseMessageHeader hdr;
  int scrap;
  int blank;
  char filename[256-32];
} NewsBaseOverview;

typedef struct {
  NewsBaseMessageHeader hdr;
  unsigned first, last;
  char groupname[256-32];
} NewsBaseDeleteArticle;

extern void newsbase_initialise(void);

extern int newsbase_send(int newsbase_action, void *block);

extern int newsbase_isready(void);

#endif
