home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Unix System Administration Handbook 1997 October
/
usah_oct97.iso
/
news
/
nn.tar
/
nn-6.5.1
/
data.h
< prev
next >
Wrap
C/C++ Source or Header
|
1995-04-29
|
7KB
|
204 lines
/*
* (c) Copyright 1990, Kim Fabricius Storm. All rights reserved.
*
* Internal representation of the master, group, and article
* information read from the database.
*
* For each article read from the database, an article_header
* structure is initialized.
*/
#ifndef _NN_DATA_H
#define _NN_DATA_H 1
/*
* The magic number allows us to change the format of the database
* and tell the users about it
*/
#define NNDB_MAGIC 0x4e4e2302 /* NN#2 */
/*
* global master data
*/
#define DB_LOCK_MESSAGE 80
typedef struct {
int32 db_magic;
char db_lock[DB_LOCK_MESSAGE];
time_t db_created; /* when database was last built */
time_t last_scan; /* age of active file at last scan */
off_t last_size; /* size of active file at last scan */
group_number number_of_groups;
int free_groups;
} master_header;
/*
* group information
*/
typedef struct group_header {
/* this part of the header is read from the MASTER file */
flag_type master_flag; /* master's flags */
# define M_VALID FLAG(1) /* group present in active file */
# define M_CONTROL FLAG(2) /* group is control group */
# define M_NO_DIRECTORY FLAG(3) /* group directory not found */
# define M_ALWAYS_DIGEST FLAG(4) /* D in GROUPS */
# define M_NEVER_DIGEST FLAG(5) /* N in GROUPS */
# define M_EXPIRE FLAG(6) /* expire in progress or pending */
# define M_BLOCKED FLAG(7) /* don't trust this entry */
# define M_MUST_CLEAN FLAG(8) /* group should be cleaned */
# define M_MODERATED FLAG(9) /* group is moderated */
# define M_ALIASED FLAG(10) /* =xxx in active file */
# define M_NOPOST FLAG(11) /* 'n' in active file */
# define M_AUTO_RECOLLECT FLAG(12) /* R in GROUPS */
# define M_AUTO_ARCHIVE FLAG(13) /* >file in GROUPS */
# define M_INCLUDE_OLD FLAG(14) /* O in GROUPS */
# define M_IGNORE_G FLAG(15) /* ignore this group (GROUPS X) */
# define M_IGNORE_A FLAG(16) /* ignore this group (ACTIVE x) */
# define M_IGNORE_GROUP (M_IGNORE_G | M_IGNORE_A)
article_number first_db_article; /* min article in db */
article_number last_db_article; /* max article in db */
article_number first_a_article; /* min article in active */
article_number last_a_article; /* max article in active */
off_t index_write_offset;
off_t data_write_offset;
time_t creation_time; /* when group was created */
int group_name_length;
/* this part is initialized during reading of the GROUPS file */
/* DO NOT CHANGE THE POSITION OF group_flag AS THE FIRST FIELD */
/* AFTER THE PART WHICH IS SAVED IN THE MASTER FILE */
flag_type group_flag; /* client's flags */
# define G_UNSUBSCRIBED FLAG(1) /* ! in .newsrc */
# define G_READ FLAG(2) /* group has been visited */
# define G_FAKED FLAG(3) /* faked group - not in .newsrc */
# define G_NEW FLAG(5) /* new group */
# define G_FOLDER FLAG(6) /* "group" is a folder file */
# define G_DIRECTORY FLAG(7) /* "group" is directory */
# define G_SEQUENCE FLAG(8) /* in presentation sequence */
# define G_DONE FLAG(9) /* sequence is done with group */
# define G_MAILBOX FLAG(10) /* user's mail box file */
# define G_MERGE_HEAD FLAG(11) /* merged group head */
# define G_MERGE_SUB FLAG(12) /* merged group sub element */
# define G_MERGED (G_MERGE_HEAD | G_MERGE_SUB)
# define G_COUNTED FLAG(13) /* counted in unread_count */
group_number group_num;
group_number preseq_index;
char * group_name;
char * archive_file;
article_number first_article;
article_number last_article;
article_number current_first; /* first article currently read in */
struct group_header *next_group; /* group sequence */
struct group_header *prev_group;
struct group_header *merge_with; /* merged groups */
char *kill_list;
char *save_file; /* default save file from init */
char *enter_macro;
struct group_header *newsrc_seq; /* .newsrc sequence */
char *newsrc_line; /* .newsrc line for this group */
char *newsrc_orig; /* original newsrc_line if changed */
char *select_line; /* .nn/select line for this group */
char *select_orig; /* original select_line if changed */
int32 unread_count; /* number of unread articles */
} group_header;
/* size of the part of the group header placed on backing storage */
#define SAVED_GROUP_HEADER_SIZE(group) \
(((char *)(&((group).group_flag))) - ((char *)(&(group))))
/*
* Internal article header information.
*/
typedef struct {
union {
article_number au_number; /* article number in the group */
char *au_string;
} au_union;
group_header *a_group; /* if merged article menu */
/* indexes to header line text */
off_t hpos; /* first byte of header */
off_t fpos; /* first byte in article text */
off_t lpos; /* last pos of article */
time_stamp t_stamp; /* encoded time_stamp */
time_stamp root_t_stamp; /* subject's time_stamp */
char * sender; /* sender's name */
char * subject; /* subject (w/o Re:) */
int16 lines; /* no of lines */
int8 replies; /* no of Re: */
int8 subj_length; /* length of subject */
int8 name_length; /* length of sender */
int8 menu_line; /* current line on menu */
attr_type attr; /* attributes: */
attr_type disp_attr; /* currently displayed attr. */
/* warning: notice relation between A_SELECT and A_AUTO_SELECT */
# define A_READ 0x01 /* article has been read */
# define A_SEEN 0x02 /* article presented on menu */
# define A_LEAVE 0x03 /* marked for later activity */
# define A_LEAVE_NEXT 0x04 /* marked for next invokation */
# define A_CANCEL 0x05 /* folder entry cancelled */
# define A_KILL 0x06 /* eliminate article */
# define A_SELECT 0x08 /* article has been selected */
# define A_AUTO_SELECT 0x09 /* will match & A_SELECT */
# define A_NOT_DISPLAYED 0x7f /* not currently on menu */
flag_type flag; /* attributes and flags: */
# define A_SAME FLAG(1) /* same subject as prev. article */
# define A_ALMOST_SAME FLAG(2) /* A_SAME (match-limit) */
# define A_ROOT_ART FLAG(3) /* root article in subject */
# define A_NEXT_SAME FLAG(4) /* next is same subject */
# define A_DIGEST FLAG(5) /* digest sub article */
# define A_FULL_DIGEST FLAG(6) /* full digest */
# define A_FOLDER FLAG(7) /* article file = "folder_path" */
# define A_FAKED FLAG(8) /* only 'number' is valid */
# define A_ST_FILED FLAG(10) /* articles is saved */
# define A_ST_REPLY FLAG(11) /* sent reply to article */
# define A_ST_FOLLOW FLAG(12) /* sent followup to article */
# define A_CLOSED FLAG(13) /* subject closed on menu */
# define A_HIDE FLAG(14) /* hide subject on menu */
} article_header;
#define a_number au_union.au_number
#define a_string au_union.au_string
#endif /* _NN_DATA_H */