#ifndef _foldMHP_h_
#define _fileMHP_h_ 1

#include <sys/types.h>
#include <sys/dir.h>

#include "memory.h"
#include "darray.h"
#include "foldMH.h"
#include "folder.h"

typedef struct AlFoldMH_st {
  const char *file_name;
  DIR *dirp;
  long initial_telldir_value;
  AlFolder generic_folder;
  int iter_count;
} AlFoldMH_rep;

typedef struct AlFoldMHIter_st {
  AlFoldMH_rep *the_folder;
  long telldir_value;
  Darray prev_context;		/* Used to recursively decend folders */
  Msg cur_msg;
  char *cur_buf;
} AlFoldMHIter_rep;

#define raise(p_to_rep) ((AlFoldMH)p_to_rep)
#define lower(obj) ((AlFoldMH_rep *)obj)
#define create() ((AlFoldMH_rep *)Memory_allocate(sizeof(AlFoldMH_rep)))
#define destroy(p_to_rep) (Memory_free((VOIDP)p_to_rep))

#define raise_iter(p_to_rep) ((AlFoldMHIter)p_to_rep)
#define lower_iter(obj) ((AlFoldMHIter_rep *)obj)
#define create_iter() ((AlFoldMHIter_rep *)Memory_allocate(sizeof(AlFoldMHIter_rep)))
#define destroy_iter(p_to_rep) (Memory_free((VOIDP)p_to_rep))



#endif
