#endif
#ifdef USE_NNTP
if (option(OPTNEWS))
- (state->entry)[state->entrylen].nd = (NNTP_DATA *) data;
+ (state->entry)[state->entrylen].nd = (struct NntpData *) data;
#endif
(state->entrylen)++;
}
for (i = 0; i < nserv->groups_num; i++)
{
- NNTP_DATA *nntp_data = nserv->groups_list[i];
+ struct NntpData *nntp_data = nserv->groups_list[i];
if (!nntp_data)
continue;
if (prefix && *prefix && (strncmp(prefix, nntp_data->group, strlen(prefix)) != 0))
for (i = 0; i < nserv->groups_num; i++)
{
- NNTP_DATA *nntp_data = nserv->groups_list[i];
+ struct NntpData *nntp_data = nserv->groups_list[i];
if (nntp_data &&
(nntp_data->new || (nntp_data->subscribed &&
(nntp_data->unread || !option(OPTSHOWONLYUNREAD)))))
buffy = 0;
for (j = 0; j < nserv->groups_num; j++)
{
- NNTP_DATA *nntp_data = nserv->groups_list[j];
+ struct NntpData *nntp_data = nserv->groups_list[j];
if (nntp_data && nntp_data->subscribed)
{
buffy = 1;
{
struct folder_file *ff = &state.entry[menu->current];
int rc;
- NNTP_DATA *nntp_data = NULL;
+ struct NntpData *nntp_data = NULL;
rc = nntp_newsrc_parse(CurrentNewsSrv);
if (rc < 0)
for (j = 0; j < nserv->groups_num; j++)
{
- NNTP_DATA *nntp_data = nserv->groups_list[j];
+ struct NntpData *nntp_data = nserv->groups_list[j];
if (nntp_data)
nntp_data->deleted = true;
}
for (k = 0; nserv && k < nserv->groups_num; k++)
{
- NNTP_DATA *nntp_data = nserv->groups_list[k];
+ struct NntpData *nntp_data = nserv->groups_list[k];
if (nntp_data && nntp_data->group && !nntp_data->subscribed)
{
if (regexec(rx, nntp_data->group, 0, NULL, 0) == 0)
#endif
bool has_buffy : 1;
#ifdef USE_NNTP
- NNTP_DATA *nd;
+ struct NntpData *nd;
#endif
bool local : 1; /* folder is on local filesystem */
bool tagged : 1;
{
for (; n < nserv->groups_num; n++)
{
- NNTP_DATA *nntp_data = nserv->groups_list[n];
+ struct NntpData *nntp_data = nserv->groups_list[n];
if (nntp_data && nntp_data->subscribed)
{
for (; n < nserv->groups_num; n++)
{
- NNTP_DATA *nntp_data = nserv->groups_list[n];
+ struct NntpData *nntp_data = nserv->groups_list[n];
if (nntp_data && nntp_data->subscribed &&
(mutt_strncmp(nntp_data->group, filepart, len) == 0))
CHECK_ATTACH
if (Context && Context->magic == MUTT_NNTP)
{
- NNTP_DATA *nntp_data = Context->data;
+ struct NntpData *nntp_data = Context->data;
if (mutt_newsgroup_catchup(nntp_data->nserv, nntp_data->group))
menu->redraw = REDRAW_INDEX | REDRAW_STATUS;
}
_("Reply by mail as poster prefers?")) != MUTT_YES)
{
if (Context && Context->magic == MUTT_NNTP &&
- !((NNTP_DATA *) Context->data)->allowed && query_quadoption(OPT_TOMODERATED, _("Posting to this group not allowed, may be moderated. Continue?")) != MUTT_YES)
+ !((struct NntpData *) Context->data)->allowed && query_quadoption(OPT_TOMODERATED, _("Posting to this group not allowed, may be moderated. Continue?")) != MUTT_YES)
break;
if (op == OP_POST)
ci_send_message(SENDNEWS, NULL, NULL, Context, NULL);
#ifdef USE_NNTP
if (ctx->unread && ctx->magic == MUTT_NNTP)
{
- NNTP_DATA *nntp_data = ctx->data;
+ struct NntpData *nntp_data = ctx->data;
if (nntp_data && nntp_data->nserv && nntp_data->group)
{
#include "hcache/hcache.h"
#endif
-/* Find NNTP_DATA for given newsgroup or add it */
-static NNTP_DATA *nntp_data_find(NNTP_SERVER *nserv, const char *group)
+/* Find NntpData for given newsgroup or add it */
+static struct NntpData *nntp_data_find(NNTP_SERVER *nserv, const char *group)
{
- NNTP_DATA *nntp_data = hash_find(nserv->groups_hash, group);
+ struct NntpData *nntp_data = hash_find(nserv->groups_hash, group);
if (!nntp_data)
{
int len = strlen(group) + 1;
- /* create NNTP_DATA structure and add it to hash */
- nntp_data = safe_calloc(1, sizeof(NNTP_DATA) + len);
- nntp_data->group = (char *) nntp_data + sizeof(NNTP_DATA);
+ /* create NntpData structure and add it to hash */
+ nntp_data = safe_calloc(1, sizeof(struct NntpData) + len);
+ nntp_data->group = (char *) nntp_data + sizeof(struct NntpData);
strfcpy(nntp_data->group, group, len);
nntp_data->nserv = nserv;
nntp_data->deleted = true;
hash_resize(nserv->groups_hash, nserv->groups_hash->nelem * 2, 0);
hash_insert(nserv->groups_hash, nntp_data->group, nntp_data);
- /* add NNTP_DATA to list */
+ /* add NntpData to list */
if (nserv->groups_num >= nserv->groups_max)
{
nserv->groups_max *= 2;
}
/* Remove all temporarily cache files */
-void nntp_acache_free(NNTP_DATA *nntp_data)
+void nntp_acache_free(struct NntpData *nntp_data)
{
int i;
}
}
-/* Free NNTP_DATA, used to destroy hash elements */
+/* Free NntpData, used to destroy hash elements */
void nntp_data_free(void *data)
{
- NNTP_DATA *nntp_data = data;
+ struct NntpData *nntp_data = data;
if (!nntp_data)
return;
}
/* calculate number of unread articles using .newsrc data */
-void nntp_group_unread_stat(NNTP_DATA *nntp_data)
+void nntp_group_unread_stat(struct NntpData *nntp_data)
{
unsigned int i;
anum_t first, last;
/* .newsrc has been externally modified or hasn't been loaded yet */
for (i = 0; i < nserv->groups_num; i++)
{
- NNTP_DATA *nntp_data = nserv->groups_list[i];
+ struct NntpData *nntp_data = nserv->groups_list[i];
if (!nntp_data)
continue;
char *b = NULL, *h = NULL, *p = NULL;
unsigned int j = 1;
bool subs = false;
- NNTP_DATA *nntp_data = NULL;
+ struct NntpData *nntp_data = NULL;
/* find end of newsgroup name */
p = strpbrk(line, ":!");
/* Generate array of .newsrc entries */
void nntp_newsrc_gen_entries(struct Context *ctx)
{
- NNTP_DATA *nntp_data = ctx->data;
+ struct NntpData *nntp_data = ctx->data;
anum_t last = 0, first = 1;
int series, i;
int save_sort = SORT_ORDER;
/* we will generate full newsrc here */
for (i = 0; i < nserv->groups_num; i++)
{
- NNTP_DATA *nntp_data = nserv->groups_list[i];
+ struct NntpData *nntp_data = nserv->groups_list[i];
unsigned int n;
if (!nntp_data || !nntp_data->newsrc_ent)
int nntp_add_group(char *line, void *data)
{
NNTP_SERVER *nserv = data;
- NNTP_DATA *nntp_data = NULL;
+ struct NntpData *nntp_data = NULL;
char group[LONG_STRING];
char desc[HUGE_STRING] = "";
char mod;
for (i = 0; i < nserv->groups_num; i++)
{
- NNTP_DATA *nntp_data = nserv->groups_list[i];
+ struct NntpData *nntp_data = nserv->groups_list[i];
if (!nntp_data || nntp_data->deleted)
continue;
}
/* Open newsgroup hcache */
-header_cache_t *nntp_hcache_open(NNTP_DATA *nntp_data)
+header_cache_t *nntp_hcache_open(struct NntpData *nntp_data)
{
struct CissUrl url;
char file[_POSIX_PATH_MAX];
}
/* Remove stale cached headers */
-void nntp_hcache_update(NNTP_DATA *nntp_data, header_cache_t *hc)
+void nntp_hcache_update(struct NntpData *nntp_data, header_cache_t *hc)
{
char buf[16];
int old = 0;
/* Remove bcache file */
static int nntp_bcache_delete(const char *id, struct BodyCache *bcache, void *data)
{
- NNTP_DATA *nntp_data = data;
+ struct NntpData *nntp_data = data;
anum_t anum;
char c;
}
/* Remove stale cached messages */
-void nntp_bcache_update(NNTP_DATA *nntp_data)
+void nntp_bcache_update(struct NntpData *nntp_data)
{
mutt_bcache_list(nntp_data->bcache, nntp_bcache_delete, nntp_data);
}
/* Remove hcache and bcache of newsgroup */
-void nntp_delete_group_cache(NNTP_DATA *nntp_data)
+void nntp_delete_group_cache(struct NntpData *nntp_data)
{
if (!nntp_data || !nntp_data->nserv || !nntp_data->nserv->cacheable)
return;
{
char *group = entry->d_name;
struct stat sb;
- NNTP_DATA *nntp_data = NULL;
- NNTP_DATA nntp_tmp;
+ struct NntpData *nntp_data = NULL;
+ struct NntpData nntp_tmp;
if ((mutt_strcmp(group, ".") == 0) || (mutt_strcmp(group, "..") == 0))
continue;
int rc;
struct Account acct;
NNTP_SERVER *nserv = NULL;
- NNTP_DATA *nntp_data = NULL;
+ struct NntpData *nntp_data = NULL;
struct Connection *conn = NULL;
struct CissUrl url;
* Old = not read but cached */
void nntp_article_status(struct Context *ctx, struct Header *hdr, char *group, anum_t anum)
{
- NNTP_DATA *nntp_data = ctx->data;
+ struct NntpData *nntp_data = ctx->data;
unsigned int i;
if (group)
}
/* Subscribe newsgroup */
-NNTP_DATA *mutt_newsgroup_subscribe(NNTP_SERVER *nserv, char *group)
+struct NntpData *mutt_newsgroup_subscribe(NNTP_SERVER *nserv, char *group)
{
- NNTP_DATA *nntp_data = NULL;
+ struct NntpData *nntp_data = NULL;
if (!nserv || !nserv->groups_hash || !group || !*group)
return NULL;
}
/* Unsubscribe newsgroup */
-NNTP_DATA *mutt_newsgroup_unsubscribe(NNTP_SERVER *nserv, char *group)
+struct NntpData *mutt_newsgroup_unsubscribe(NNTP_SERVER *nserv, char *group)
{
- NNTP_DATA *nntp_data = NULL;
+ struct NntpData *nntp_data = NULL;
if (!nserv || !nserv->groups_hash || !group || !*group)
return NULL;
}
/* Catchup newsgroup */
-NNTP_DATA *mutt_newsgroup_catchup(NNTP_SERVER *nserv, char *group)
+struct NntpData *mutt_newsgroup_catchup(NNTP_SERVER *nserv, char *group)
{
- NNTP_DATA *nntp_data = NULL;
+ struct NntpData *nntp_data = NULL;
if (!nserv || !nserv->groups_hash || !group || !*group)
return NULL;
}
/* Uncatchup newsgroup */
-NNTP_DATA *mutt_newsgroup_uncatchup(NNTP_SERVER *nserv, char *group)
+struct NntpData *mutt_newsgroup_uncatchup(NNTP_SERVER *nserv, char *group)
{
- NNTP_DATA *nntp_data = NULL;
+ struct NntpData *nntp_data = NULL;
if (!nserv || !nserv->groups_hash || !group || !*group)
return NULL;
for (i = 0; i < CurrentNewsSrv->groups_num; i++)
{
- NNTP_DATA *nntp_data = CurrentNewsSrv->groups_list[i];
+ struct NntpData *nntp_data = CurrentNewsSrv->groups_list[i];
if (!nntp_data || !nntp_data->subscribed || !nntp_data->unread)
continue;
if (Context && Context->magic == MUTT_NNTP &&
- (mutt_strcmp(nntp_data->group, ((NNTP_DATA *) Context->data)->group) == 0))
+ (mutt_strcmp(nntp_data->group, ((struct NntpData *) Context->data)->group) == 0))
{
unsigned int j, unread = 0;
}
/* Send data from buffer and receive answer to same buffer */
-static int nntp_query(NNTP_DATA *nntp_data, char *line, size_t linelen)
+static int nntp_query(struct NntpData *nntp_data, char *line, size_t linelen)
{
NNTP_SERVER *nserv = nntp_data->nserv;
char buf[LONG_STRING];
* 1 - bad response (answer in query buffer)
* -1 - connection lost
* -2 - error in funct(*line, *data) */
-static int nntp_fetch_lines(NNTP_DATA *nntp_data, char *query, size_t qlen,
+static int nntp_fetch_lines(struct NntpData *nntp_data, char *query, size_t qlen,
char *msg, int (*funct)(char *, void *), void *data)
{
int done = false;
static int fetch_description(char *line, void *data)
{
NNTP_SERVER *nserv = data;
- NNTP_DATA *nntp_data = NULL;
+ struct NntpData *nntp_data = NULL;
char *desc = NULL;
if (!line)
/* Fetch newsgroups descriptions.
* Returns the same code as nntp_fetch_lines() */
-static int get_description(NNTP_DATA *nntp_data, char *wildmat, char *msg)
+static int get_description(struct NntpData *nntp_data, char *wildmat, char *msg)
{
NNTP_SERVER *nserv = NULL;
char buf[STRING];
/* Update read flag and set article number if empty */
static void nntp_parse_xref(struct Context *ctx, struct Header *hdr)
{
- NNTP_DATA *nntp_data = ctx->data;
+ struct NntpData *nntp_data = ctx->data;
char *buf = NULL, *p = NULL;
buf = p = safe_strdup(hdr->env->xref);
{
struct FetchCtx *fc = data;
struct Context *ctx = fc->ctx;
- NNTP_DATA *nntp_data = ctx->data;
+ struct NntpData *nntp_data = ctx->data;
struct Header *hdr = NULL;
FILE *fp = NULL;
char tempfile[_POSIX_PATH_MAX];
/* Fetch headers */
static int nntp_fetch_headers(struct Context *ctx, void *hc, anum_t first, anum_t last, int restore)
{
- NNTP_DATA *nntp_data = ctx->data;
+ struct NntpData *nntp_data = ctx->data;
struct FetchCtx fc;
struct Header *hdr = NULL;
char buf[HUGE_STRING];
static int nntp_open_mailbox(struct Context *ctx)
{
NNTP_SERVER *nserv = NULL;
- NNTP_DATA *nntp_data = NULL;
+ struct NntpData *nntp_data = NULL;
char buf[HUGE_STRING];
char server[LONG_STRING];
char *group = NULL;
/* Fetch message */
static int nntp_fetch_message(struct Context *ctx, struct Message *msg, int msgno)
{
- NNTP_DATA *nntp_data = ctx->data;
+ struct NntpData *nntp_data = ctx->data;
struct NntpAcache *acache = NULL;
struct Header *hdr = ctx->hdrs[msgno];
char buf[_POSIX_PATH_MAX];
/* Post article */
int nntp_post(const char *msg)
{
- NNTP_DATA *nntp_data, nntp_tmp;
+ struct NntpData *nntp_data, nntp_tmp;
FILE *fp = NULL;
char buf[LONG_STRING];
size_t len;
* 1 - new articles found
* 0 - no change
* -1 - lost connection */
-static int nntp_group_poll(NNTP_DATA *nntp_data, int update_stat)
+static int nntp_group_poll(struct NntpData *nntp_data, int update_stat)
{
char buf[LONG_STRING] = "";
anum_t count, first, last;
* -1 - lost connection */
static int nntp_check_mailbox(struct Context *ctx, int *index_hint)
{
- NNTP_DATA *nntp_data = ctx->data;
+ struct NntpData *nntp_data = ctx->data;
NNTP_SERVER *nserv = nntp_data->nserv;
time_t now = time(NULL);
int i, j;
/* Save changes to .newsrc and cache */
static int nntp_sync_mailbox(struct Context *ctx, int *index_hint)
{
- NNTP_DATA *nntp_data = ctx->data;
+ struct NntpData *nntp_data = ctx->data;
int rc, i;
#ifdef USE_HCACHE
header_cache_t *hc = NULL;
/* Free up memory associated with the newsgroup context */
static int nntp_fastclose_mailbox(struct Context *ctx)
{
- NNTP_DATA *nntp_data = ctx->data, *nntp_tmp = NULL;
+ struct NntpData *nntp_data = ctx->data, *nntp_tmp = NULL;
if (!nntp_data)
return 0;
{
if (nserv->hasDATE)
{
- NNTP_DATA nntp_data;
+ struct NntpData nntp_data;
char buf[LONG_STRING];
struct tm tm;
memset(&tm, 0, sizeof(tm));
/* Fetch list of all newsgroups from server */
int nntp_active_fetch(NNTP_SERVER *nserv)
{
- NNTP_DATA nntp_data;
+ struct NntpData nntp_data;
char msg[SHORT_STRING];
char buf[LONG_STRING];
unsigned int i;
for (i = 0; i < nserv->groups_num; i++)
{
- NNTP_DATA *data = nserv->groups_list[i];
+ struct NntpData *data = nserv->groups_list[i];
if (data && data->deleted && !data->newsrc_ent)
{
* -1 - error */
int nntp_check_new_groups(NNTP_SERVER *nserv)
{
- NNTP_DATA nntp_data;
+ struct NntpData nntp_data;
time_t now;
struct tm *tm = NULL;
char buf[LONG_STRING];
mutt_message(_("Checking for new messages..."));
for (i = 0; i < nserv->groups_num; i++)
{
- NNTP_DATA *data = nserv->groups_list[i];
+ struct NntpData *data = nserv->groups_list[i];
if (data && data->subscribed)
{
if (Context && Context->magic == MUTT_NNTP)
{
buf[0] = '\0';
- if (nntp_query((NNTP_DATA *) Context->data, buf, sizeof(buf)) < 0)
+ if (nntp_query((struct NntpData *) Context->data, buf, sizeof(buf)) < 0)
return -1;
}
}
return -1;
nntp_data.nserv = nserv;
if (Context && Context->magic == MUTT_NNTP)
- nntp_data.group = ((NNTP_DATA *) Context->data)->group;
+ nntp_data.group = ((struct NntpData *) Context->data)->group;
else
nntp_data.group = NULL;
i = nserv->groups_num;
MUTT_PROGRESS_MSG, ReadInc, nserv->groups_num - i);
for (; i < nserv->groups_num; i++)
{
- NNTP_DATA *data = nserv->groups_list[i];
+ struct NntpData *data = nserv->groups_list[i];
if (get_description(data, NULL, NULL) < 0)
return -1;
* -1 - error */
int nntp_check_msgid(struct Context *ctx, const char *msgid)
{
- NNTP_DATA *nntp_data = ctx->data;
+ struct NntpData *nntp_data = ctx->data;
struct Header *hdr = NULL;
FILE *fp = NULL;
char tempfile[_POSIX_PATH_MAX];
/* Fetch children of article with the Message-ID */
int nntp_check_children(struct Context *ctx, const char *msgid)
{
- NNTP_DATA *nntp_data = ctx->data;
+ struct NntpData *nntp_data = ctx->data;
struct ChildCtx cc;
char buf[STRING];
int i, rc;
char *path;
};
-typedef struct
+struct NntpData
{
char *group;
char *desc;
NNTP_SERVER *nserv;
struct NntpAcache acache[NNTP_ACACHE_LEN];
struct BodyCache *bcache;
-} NNTP_DATA;
+};
typedef struct
{
int nntp_check_new_groups(NNTP_SERVER *nserv);
int nntp_open_connection(NNTP_SERVER *nserv);
void nntp_newsrc_gen_entries(struct Context *ctx);
-void nntp_bcache_update(NNTP_DATA *nntp_data);
+void nntp_bcache_update(struct NntpData *nntp_data);
void nntp_article_status(struct Context *ctx, struct Header *hdr, char *group, anum_t anum);
-void nntp_group_unread_stat(NNTP_DATA *nntp_data);
+void nntp_group_unread_stat(struct NntpData *nntp_data);
void nntp_data_free(void *data);
-void nntp_acache_free(NNTP_DATA *nntp_data);
-void nntp_delete_group_cache(NNTP_DATA *nntp_data);
+void nntp_acache_free(struct NntpData *nntp_data);
+void nntp_delete_group_cache(struct NntpData *nntp_data);
/* exposed interface */
NNTP_SERVER *nntp_select_server(char *server, int leave_lock);
-NNTP_DATA *mutt_newsgroup_subscribe(NNTP_SERVER *nserv, char *group);
-NNTP_DATA *mutt_newsgroup_unsubscribe(NNTP_SERVER *nserv, char *group);
-NNTP_DATA *mutt_newsgroup_catchup(NNTP_SERVER *nserv, char *group);
-NNTP_DATA *mutt_newsgroup_uncatchup(NNTP_SERVER *nserv, char *group);
+struct NntpData *mutt_newsgroup_subscribe(NNTP_SERVER *nserv, char *group);
+struct NntpData *mutt_newsgroup_unsubscribe(NNTP_SERVER *nserv, char *group);
+struct NntpData *mutt_newsgroup_catchup(NNTP_SERVER *nserv, char *group);
+struct NntpData *mutt_newsgroup_uncatchup(NNTP_SERVER *nserv, char *group);
int nntp_active_fetch(NNTP_SERVER *nserv);
int nntp_newsrc_update(NNTP_SERVER *nserv);
int nntp_post(const char *msg);
NNTP_SERVER *CurrentNewsSrv INITVAL(NULL);
#ifdef USE_HCACHE
-header_cache_t *nntp_hcache_open(NNTP_DATA *nntp_data);
-void nntp_hcache_update(NNTP_DATA *nntp_data, header_cache_t *hc);
+header_cache_t *nntp_hcache_open(struct NntpData *nntp_data);
+void nntp_hcache_update(struct NntpData *nntp_data, header_cache_t *hc);
#endif
extern struct mx_ops mx_nntp_ops;
CHECK_MODE(IsHeader(extra) && !IsAttach(extra));
CHECK_ATTACH;
if (extra->ctx && extra->ctx->magic == MUTT_NNTP &&
- !((NNTP_DATA *) extra->ctx->data)->allowed && query_quadoption(OPT_TOMODERATED, _("Posting to this group not allowed, may be moderated. Continue?")) != MUTT_YES)
+ !((struct NntpData *) extra->ctx->data)->allowed && query_quadoption(OPT_TOMODERATED, _("Posting to this group not allowed, may be moderated. Continue?")) != MUTT_YES)
break;
ci_send_message(SENDNEWS, NULL, NULL, extra->ctx, NULL);
pager_menu->redraw = REDRAW_FULL;
CHECK_MODE(IsHeader(extra) || IsMsgAttach(extra));
CHECK_ATTACH;
if (extra->ctx && extra->ctx->magic == MUTT_NNTP &&
- !((NNTP_DATA *) extra->ctx->data)->allowed && query_quadoption(OPT_TOMODERATED, _("Posting to this group not allowed, may be moderated. Continue?")) != MUTT_YES)
+ !((struct NntpData *) extra->ctx->data)->allowed && query_quadoption(OPT_TOMODERATED, _("Posting to this group not allowed, may be moderated. Continue?")) != MUTT_YES)
break;
if (IsMsgAttach(extra))
mutt_attach_forward(extra->fp, extra->hdr, extra->idx, extra->idxlen,
_("Reply by mail as poster prefers?")) != MUTT_YES)
{
if (extra->ctx && extra->ctx->magic == MUTT_NNTP &&
- !((NNTP_DATA *) extra->ctx->data)->allowed && query_quadoption(OPT_TOMODERATED, _("Posting to this group not allowed, may be moderated. Continue?")) != MUTT_YES)
+ !((struct NntpData *) extra->ctx->data)->allowed && query_quadoption(OPT_TOMODERATED, _("Posting to this group not allowed, may be moderated. Continue?")) != MUTT_YES)
break;
if (IsMsgAttach(extra))
mutt_attach_reply(extra->fp, extra->hdr, extra->idx, extra->idxlen,
#ifdef USE_NNTP
if ((flags & SENDNEWS) && ctx && ctx->magic == MUTT_NNTP && !msg->env->newsgroups)
- msg->env->newsgroups = safe_strdup(((NNTP_DATA *) ctx->data)->group);
+ msg->env->newsgroups = safe_strdup(((struct NntpData *) ctx->data)->group);
#endif
if (!(flags & (SENDMAILX | SENDBATCH)) && !(option(OPTAUTOEDIT) && option(OPTEDITHDRS)) &&