#ifndef _NODELIST_HPP_
#define _NODELIST_HPP_

#include <time.h>
#include "fidoaddr.h"

#define DefaultIndex   "ftrack.ndl"            // default index file
#define NdlSign        0xfeda3033U             // Signature of nodelist index
#define A_NONE         0x00000000U
#define A_DOWN         0x01000000U
#define A_HOLD         0x02000000U
#define A_HUB          0x03000000U
#define A_HOST         0x04000000U
#define A_PVT          0x05000000U
#define A_REGION       0x06000000U
#define A_NONODE       0xffffffffU
#define A_MASK         0xffff0000U

extern char *NodelistPath;

typedef struct {
   char Name[512];
   time_t  Time;
   dword   StartZone;
} NodeListElem;

typedef struct _Nch {
   dword         Number;
   struct _Nch  *Sub;
} Nch;


class NodeLists {
   NodeListElem *NList;
   int          Lists;
   char         *IndexName;
   Nch          *Index;
   int          StartZone;
private:
   int CompileNeed(void);
   int Compile(void);
   int LoadOneIndex(FILE *fh, Nch *&Ind);
   Nch *Srch(Nch *Addr, unsigned int Number);
public:
   NodeLists();
   ~NodeLists();
   int AddNodelist(char *tmt, int TempZone);
   void IndexFile(char *Name);
   void Print(void);
   int Load(void);
   unsigned int ExistInNodelist(FA const &f);
   unsigned int GetFlags(FA const &f);
   int InSubHubs(FA const &Addr, FA const &Mask);
   int Enabled(void) { return (Lists != 0); };
   char *Names(char *Buf);
};

int SetMaxNodelistAge(int tmt);
int SetNodelist(char *tmt, int TempZone);
void SayNodelistFlags(FA const &f);



#endif



syntax highlighted by Code2HTML, v. 0.9.1