#ifndef _MSGBASE_HPP_
#define _MSGBASE_HPP_

#include <time.h>
#include "a_list.hpp"
#include "utils.hpp"
#include "fidoaddr.h"
#include "msg.hpp"
#include "ufmtypes.h"

#define  BASE_IN 0x0001
#define  BASE_OUT 0x0002
#define  BASE_ECHO 0x0004

class MSGBASE {
public:
//   MSGBASE();
   virtual int Rewind(void) = 0;
   virtual int Set(char *c, int BaseType) = 0;
   virtual int Next(void) = 0;
   virtual int ReadMsg(cMSG &m) = 0;
   virtual int WriteMsg(cMSG &m) = 0;
   virtual int DeleteMsg(void) = 0;
   virtual int WriteNewMsg(cMSG &m) = 0;
   virtual void Clear(void) = 0;
   virtual void Print(void) = 0;
   virtual char *ReadToMem(void) = 0;
   virtual int WriteFromMem(char *Buff) = 0;
   virtual char *MessageName(void) = 0;
   virtual char *BaseName(void) = 0;
   virtual int  Renumber(void) = 0;
   virtual int  CheckOut(void) = 0;
   virtual int  CheckIn(void) = 0;
   virtual int  Open(void) = 0;
   virtual int  Close(void) = 0;
   virtual ~MSGBASE();
};


class MSGASMSG: public MSGBASE {
   char *DirName;
   unsigned int MsgNum;
   unsigned int MaxNum;
   char         *MsgMask;
// private:
public:
   void AddToMask(unsigned int Num);
   int WriteOneMsg(unsigned int Num, cMSG &m);   
   MSGASMSG();
   ~MSGASMSG();
   void Print(void);
   int Set(char *c, int BaseType);
   void Clear(void);
   int Next(void);
   int Rewind(void);
   int DeleteMsg(void);
   int ReadMsg(cMSG &m);
   int WriteMsg(cMSG &m);
   int WriteNewMsg(cMSG &m);
   char *ReadToMem(void);
   int WriteFromMem(char *Buff);
   char *MessageName(void);
   char *BaseName(void) { return DirName; };
   int  Renumber(void);
   int CheckOut(void) { return TRUE; };
   int CheckIn(void) { return TRUE; };
   int Open(void) { return TRUE; };
   int Close(void) { return TRUE; };
};

MSGBASE *MakeBase(char *BName);
void SetMsgAttr(cMSG &m,unsigned short int &Attr);
void SetMsgAttr(unsigned short int &Attr,cMSG &m);
int WriteMsgBody(cMSG &m,FILE *fh);
void PrepKluChain(char *&cl, cMSG &m, int IsKludge);
void AddKluToChain(char *&cl, char *Kn, char *Kb);


#endif



syntax highlighted by Code2HTML, v. 0.9.1