mail-search.c revision f923659c0e5298263d80622c99f4dc4132b4675b
/* Copyright (C) 2002 Timo Sirainen */
#include "lib.h"
#include "mail-search.h"
struct search_build_data {
const char *error;
};
static struct mail_search_arg *
{
struct mail_search_arg *arg;
return arg;
}
struct mail_search_arg **next_sarg,
{
struct mail_search_arg *sarg;
if (value == 0)
return TRUE;
/* first arg */
return FALSE;
}
return FALSE;
}
*args += 1;
/* second arg */
if (value == 2) {
return FALSE;
}
return FALSE;
}
*args += 1;
}
return TRUE;
}
struct mail_search_arg **next_sarg)
{
struct mail_search_arg **subargs;
char *str;
return FALSE;
}
/* NIL not allowed */
return FALSE;
}
return FALSE;
}
*args += 1;
return TRUE;
}
/* string argument - get the name and jump to next */
*args += 1;
switch (*str) {
case 'A':
return ARG_NEW(SEARCH_ANSWERED, 0);
return ARG_NEW(SEARCH_ALL, 0);
break;
case 'B':
/* <string> */
/* <date> */
/* <string> */
}
break;
case 'C':
/* <string> */
}
break;
case 'D':
return ARG_NEW(SEARCH_DELETED, 0);
return ARG_NEW(SEARCH_DRAFT, 0);
break;
case 'F':
return ARG_NEW(SEARCH_FLAGGED, 0);
/* <string> */
}
break;
case 'H':
/* <field-name> <string> */
const char *key;
return FALSE;
}
return FALSE;
}
*args += 1;
*args += 1;
*args += 1;
*args += 1;
*args += 1;
*args += 1;
*args += 1;
} else {
}
}
break;
case 'K':
/* <flag> */
}
break;
case 'L':
/* <n> */
}
break;
case 'N':
return FALSE;
return TRUE;
/* NEW == (RECENT UNSEEN) */
return TRUE;
}
break;
case 'O':
/* <search-key1> <search-key2> */
for (;;) {
return FALSE;
/* <key> OR <key> OR ... <key> - put them all
under one SEARCH_OR list. */
break;
break;
*args += 1;
}
return FALSE;
return TRUE;
/* <date> */
/* OLD == NOT RECENT */
if (!ARG_NEW(SEARCH_RECENT, 0))
return FALSE;
return TRUE;
}
break;
case 'R':
return ARG_NEW(SEARCH_RECENT, 0);
break;
case 'S':
return ARG_NEW(SEARCH_SEEN, 0);
/* <string> */
/* <date> */
/* <date> */
/* <date> */
/* <date> */
/* <n> */
}
break;
case 'T':
/* <string> */
/* <string> */
}
break;
case 'U':
/* <message set> */
if (!ARG_NEW(SEARCH_ANSWERED, 0))
return FALSE;
return TRUE;
if (!ARG_NEW(SEARCH_DELETED, 0))
return FALSE;
return TRUE;
if (!ARG_NEW(SEARCH_DRAFT, 0))
return FALSE;
return TRUE;
if (!ARG_NEW(SEARCH_FLAGGED, 0))
return FALSE;
return TRUE;
if (!ARG_NEW(SEARCH_KEYWORD, 0))
return FALSE;
return TRUE;
if (!ARG_NEW(SEARCH_SEEN, 0))
return FALSE;
return TRUE;
}
break;
default:
/* <message-set> */
if (!ARG_NEW(SEARCH_SET, 0))
return FALSE;
return TRUE;
}
break;
}
return FALSE;
}
struct mail_search_arg *
{
struct search_build_data data;
/* get the first arg */
return NULL;
}
}
return first_sarg;
}
{
}
}
void *context)
{
struct mail_search_arg *subarg;
return;
/* sublist of conditions */
/* failed */
break;
}
}
/* OR-list of conditions */
/* matched */
break;
}
}
} else {
/* just a single condition */
}
}
void *context)
{
int result;
result = 1;
/* failed, abort */
return -1;
}
result = 0;
}
return result;
}
{
struct mail_search_arg *subarg;
return;
case SEARCH_OR:
case SEARCH_SUB:
}
}
break;
case SEARCH_SENTBEFORE:
case SEARCH_SENTON:
case SEARCH_SENTSINCE:
case SEARCH_FROM:
case SEARCH_TO:
case SEARCH_CC:
case SEARCH_BCC:
case SEARCH_SUBJECT:
case SEARCH_IN_REPLY_TO:
case SEARCH_MESSAGE_ID:
case SEARCH_HEADER:
*have_headers = TRUE;
break;
case SEARCH_BODY:
break;
case SEARCH_TEXT:
break;
default:
break;
}
}
{
}