/* $Id: def_readmsg.h,v 1.3 2006/05/30 16:33:21 hurtta Exp $ */

/******************************************************************************
 *  The Elm (ME+) Mail System  -  $Revision: 1.3 $   $State: Exp $
 *
 *  Author: Kari Hurtta <hurtta+elm@posti.FMI.FI>
 *      or  Kari Hurtta <elm@elmme-mailer.org>
 *****************************************************************************/

#include "defs.h"
#include <setjmp.h>

#include "elmlib.h"
#include "mboxlib.h"
#include "melib.h"

enum hdr_disp_level { 
    BADLEV   =     0,
    ALL	  =	1,
    WEED  =	2,
    NONE  = 	3
};


#define FOLDER_HANDLER_magic	0xF50B


struct folder_handler {
    unsigned short            magic;   /*  FOLDER_HANDLER_magic */

    int                       num_messages;

    struct folder_routines  * handler;


    union {
	void               * dummy;
	struct fstate_data * fstate;
	struct folder_data * normal;
    } d;

};

enum message_error { error_none  = 0,
		     error_seek  = 1,
		     error_start = 2 };



typedef void free_folder_handler_f P_((struct folder_handler *H));
typedef void init_folder_handler_f P_((struct folder_handler *H));
typedef FILE * give_message_from_folder_f P_((struct folder_handler *folder,
					      int idx,
					      long *content_length,
					      enum message_error *err,
					      int print_separator,
					      char **env_buffer,
					      struct header_rec **entryret));
/* Return 1 on succeed */
typedef int parse_folder_handler_f P_((struct folder_handler *H));

#define FOLDER_ROUTINES_magic	0xF50C

struct folder_routines {
    unsigned short            magic;   /*  FOLDER_ROUTINES_magic */

    init_folder_handler_f      * init_it;
    free_folder_handler_f      * free_it;
    give_message_from_folder_f * give_message_from_it;
    parse_folder_handler_f     * parse_it;
};

/* wrapper.c */

extern struct folder_handler * malloc_folder_handler P_((struct folder_routines *routines));
extern void free_folder_handler P_((struct folder_handler **ptr));

extern FILE * give_message_from_folder P_((struct folder_handler *folder,
					   int idx,
					   long *content_length,
					   enum message_error *errret,
					   int print_separator,
					   char **env_buffer,
					   struct header_rec **entryret));
/* Return 1 on succeed */
extern  int parse_folder P_((struct folder_handler *H));


/* folder.c */

extern struct folder_handler * open_normal_folder P_((const char * 
						      folder_name));

extern void free_header_helper P_((struct header_rec **entry));
extern struct header_rec * malloc_header_helper P_((void));

/* fstate.c */

extern int have_fstate P_((void));
extern struct folder_handler * open_fstate P_((void));

extern int process_fstate_print P_((enum hdr_disp_level hdr_display_level,
				    int do_page_breaks, int do_raw_output));


extern long separator_helper P_((struct header_rec * entry, enum message_error *errret,
				 int print_separator,
				 char **env_buffer,FILE * F));

/* readmsg.c */

/* Return 1 on success */
extern int print_number_message P_((struct folder_handler  * folder,
				    int num,
				    enum hdr_disp_level hdr_disp_level, 
				    int do_page_breaks,
				    int do_raw_output));


/*
 * Local Variables:
 *  mode:c
 *  c-basic-offset:4
 *  buffer-file-coding-system: iso-8859-1
 * End:
 */


syntax highlighted by Code2HTML, v. 0.9.1