/* cache.h
*/
/* This software is copyrighted as detailed in the LICENSE file. */
/* Subjects get their own structure */
struct subject {
SUBJECT* next;
SUBJECT* prev;
ARTICLE* articles;
ARTICLE* thread;
SUBJECT* thread_link;
char* str;
time_t date;
short flags;
short misc; /* used for temporary totals and subject numbers */
};
/* subject flags */
#define SF_SEL 0x0001
#define SF_DEL 0x0002
#define SF_DELSEL 0x0004
#define SF_OLDVISIT 0x0008
#define SF_INCLUDED 0x0010
#define SF_VISIT 0x0200
#define SF_WASSELECTED 0x0400
#define SF_SUBJTRUNCED 0x1000
#define SF_ISOSUBJ 0x2000
/* This is our article-caching structure */
struct article {
ART_NUM num;
time_t date;
SUBJECT* subj;
char* from;
char* msgid;
char* xrefs;
#ifdef USE_FILTER
char* refs;
#endif
ARTICLE* parent; /* parent article */
ARTICLE* child1; /* first child of a chain */
ARTICLE* sibling; /* our next sibling */
ARTICLE* subj_next; /* next article in subject order */
long bytes;
long lines;
#ifdef SCORE
int score;
unsigned short scoreflags;
#endif
unsigned short flags; /* article state flags */
unsigned short flags2; /* more state flags */
unsigned short autofl; /* auto-processing flags */
};
/* article flags */
#define AF_SEL 0x0001
#define AF_DEL 0x0002
#define AF_DELSEL 0x0004
#define AF_OLDSEL 0x0008
#define AF_INCLUDED 0x0010
#define AF_UNREAD 0x0020
#define AF_CACHED 0x0040
#define AF_THREADED 0x0080
#define AF_EXISTS 0x0100
#define AF_HAS_RE 0x0200
#define AF_KCHASE 0x0400
#define AF_MCHASE 0x0800
#define AF_YANKBACK 0x1000
#define AF_FROMTRUNCED 0x2000
#define AF_TMPMEM 0x4000
#define AF_FAKE 0x8000
#define AF2_WASUNREAD 0x0001
#define AF2_NODEDRAWN 0x0002
#define AF2_CHANGED 0x0004
#define AF2_BOGUS 0x0008
/* See kfile.h for the AUTO_* flags */
#define article_ptr(an) ((ARTICLE*)listnum2listitem(article_list,(long)(an)))
#define article_num(ap) ((ap)->num)
#define article_find(an) ((an) <= lastart && article_hasdata(an)? \
article_ptr(an) : NULL)
#define article_walk(cb,ag) walk_list(article_list,cb,ag)
#define article_hasdata(an) existing_listnum(article_list,(long)(an),0)
#define article_first(an) existing_listnum(article_list,(long)(an),1)
#define article_next(an) existing_listnum(article_list,(long)(an)+1,1)
#define article_last(an) existing_listnum(article_list,(long)(an),-1)
#define article_prev(an) existing_listnum(article_list,(long)(an)-1,-1)
#define article_nextp(ap) ((ARTICLE*)next_listitem(article_list,(char*)(ap)))
#define article_exists(an) (article_ptr(an)->flags & AF_EXISTS)
#define article_unread(an) (article_ptr(an)->flags & AF_UNREAD)
#define was_read(an) (!article_hasdata(an) || !article_unread(an))
#define is_available(an) ((an) <= lastart && article_hasdata(an) \
&& article_exists(an))
#define is_unavailable(an) (!is_available(an))
EXT LIST* article_list INIT(0); /* a list of ARTICLEs */
EXT ARTICLE** artptr_list INIT(0); /* the article-selector creates this */
EXT ARTICLE** artptr; /* ditto -- used for article order */
EXT ART_NUM artptr_list_size INIT(0);
#ifdef ARTSEARCH
EXT ART_NUM srchahead INIT(0); /* are we in subject scan mode? */
/* (if so, contains art # found or -1) */
#endif
EXT ART_NUM first_cached;
EXT ART_NUM last_cached;
EXT bool cached_all_in_range;
EXT ARTICLE* sentinel_artp;
#define DONT_FILL_CACHE 0
#define FILL_CACHE 1
EXT SUBJECT* first_subject INIT(0);
EXT SUBJECT* last_subject INIT(0);
EXT bool untrim_cache INIT(FALSE);
#ifdef PENDING
EXT ART_NUM subj_to_get;
EXT ART_NUM xref_to_get;
#endif
/* DON'T EDIT BELOW THIS LINE OR YOUR CHANGES WILL BE LOST! */
void cache_init _((void));
void build_cache _((void));
void close_cache _((void));
void cache_article _((ARTICLE*));
void check_for_near_subj _((ARTICLE*));
void change_join_subject_len _((int));
void check_poster _((ARTICLE*));
void uncache_article _((ARTICLE*,bool_int));
char* fetchcache _((ART_NUM,int,bool_int));
char* get_cached_line _((ARTICLE*,int,bool_int));
void set_subj_line _((ARTICLE*,char*,int));
int decode_header _((char*,char*,int));
void dectrl _((char*));
void set_cached_line _((ARTICLE*,int,char*));
int subject_cmp _((char*,int,HASHDATUM));
#ifdef PENDING
void look_ahead _((void));
#endif
void cache_until_key _((void));
#ifdef PENDING
bool cache_subjects _((void));
#endif
bool cache_xrefs _((void));
bool cache_all_arts _((void));
bool cache_unread_arts _((void));
bool art_data _((ART_NUM,ART_NUM,bool_int,bool_int));
bool cache_range _((ART_NUM,ART_NUM));
void clear_article _((ARTICLE*));
syntax highlighted by Code2HTML, v. 0.9.1