98 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
** $Id$
 | 
						|
*/
 | 
						|
#ifndef	imaprefs_h
 | 
						|
#define	imaprefs_h
 | 
						|
 | 
						|
/*
 | 
						|
** Copyright 2000 Double Precision, Inc.
 | 
						|
** See COPYING for distribution information.
 | 
						|
*/
 | 
						|
 | 
						|
#if	HAVE_CONFIG_H
 | 
						|
#include	"config.h"
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef  __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
/*
 | 
						|
** Implement REFERENCES threading.
 | 
						|
*/
 | 
						|
 | 
						|
/* The data structures */
 | 
						|
 | 
						|
struct imap_refmsg {
 | 
						|
	struct imap_refmsg *next, *last;	/* Link list of all msgs */
 | 
						|
	struct imap_refmsg *parent;		/* my parent */
 | 
						|
	struct imap_refmsg *firstchild, *lastchild; /* Children link list */
 | 
						|
	struct imap_refmsg *prevsib, *nextsib;	/* Link list of siblings */
 | 
						|
 | 
						|
	char isdummy;			/* this is a dummy node (for now) */
 | 
						|
	char flag2;			/* Additional flag */
 | 
						|
 | 
						|
	char *msgid;			/* msgid of this message */
 | 
						|
 | 
						|
	char *subj;			/* dynalloced subject of this msg */
 | 
						|
	time_t timestamp;		/* Timestamp */
 | 
						|
	unsigned long seqnum;		/* Sequence number */
 | 
						|
} ;
 | 
						|
 | 
						|
struct imap_refmsgtable {
 | 
						|
        struct imap_refmsg *firstmsg, *lastmsg; /* Link list of all msgs */
 | 
						|
 | 
						|
        /* hash table message id lookup */
 | 
						|
 | 
						|
        struct imap_refmsghash *hashtable[512];
 | 
						|
 | 
						|
        struct imap_subjlookup *subjtable[512];
 | 
						|
 | 
						|
        struct imap_refmsg *rootptr;            /* The root */
 | 
						|
} ;
 | 
						|
 | 
						|
struct imap_refmsgtable *rfc822_threadalloc(void);
 | 
						|
void rfc822_threadfree(struct imap_refmsgtable *);
 | 
						|
struct imap_refmsg *rfc822_threadmsg(struct imap_refmsgtable *mt,
 | 
						|
				     const char *msgidhdr,
 | 
						|
				     const char *refhdr,
 | 
						|
				     const char *subjheader,
 | 
						|
				     const char *dateheader,
 | 
						|
				     unsigned long seqnum);
 | 
						|
 | 
						|
struct imap_refmsg *rfc822_thread(struct imap_refmsgtable *mt);
 | 
						|
 | 
						|
	/* INTERNAL FUNCTIONS FOLLOW */
 | 
						|
 | 
						|
 | 
						|
struct imap_refmsghash {
 | 
						|
	struct imap_refmsghash *nexthash;
 | 
						|
	struct imap_refmsg *msg;
 | 
						|
} ;
 | 
						|
 | 
						|
struct imap_subjlookup {
 | 
						|
	struct imap_subjlookup *nextsubj;
 | 
						|
	char *subj;
 | 
						|
	struct imap_refmsg *msg;
 | 
						|
	int msgisrefwd;
 | 
						|
} ;
 | 
						|
 | 
						|
struct imap_refmsg *rfc822_threadallocmsg(struct imap_refmsgtable *mt,
 | 
						|
					  const char *msgid);
 | 
						|
void rfc822_threadprune(struct imap_refmsgtable *mt);
 | 
						|
struct imap_refmsg *rfc822_threadgetroot(struct imap_refmsgtable *mt);
 | 
						|
struct imap_refmsg *rfc822_threadsearchmsg(struct imap_refmsgtable *mt,
 | 
						|
					   const char *msgid);
 | 
						|
int rfc822_threadsortsubj(struct imap_refmsgtable *mt,
 | 
						|
			  struct imap_refmsg *root);
 | 
						|
int rfc822_threadmergesubj(struct imap_refmsgtable *mt,
 | 
						|
			   struct imap_refmsg *root);
 | 
						|
int rfc822_threadsortbydate(struct imap_refmsgtable *mt);
 | 
						|
 | 
						|
 | 
						|
#ifdef  __cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif
 |