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
 |