~ubuntu-branches/ubuntu/quantal/mutt/quantal-security

« back to all changes in this revision

Viewing changes to query.c

  • Committer: Bazaar Package Importer
  • Author(s): Michael Vogt
  • Date: 2008-06-19 10:29:06 UTC
  • mfrom: (1.1.9 upstream)
  • Revision ID: james.westby@ubuntu.com-20080619102906-qw80cgc0ave6ifj8
Tags: 1.5.18-2ubuntu1
* Merge from debian unstable, remaining changes:
  - Build-depend on elinks (elinks doesn't provide links anymore).

Show diffs side-by-side

added added

removed removed

Lines of Context:
32
32
 
33
33
typedef struct query
34
34
{
 
35
  int num;
35
36
  ADDRESS *addr;
36
37
  char *name;
37
38
  char *other;
180
181
  return REG_NOMATCH;
181
182
}
182
183
 
183
 
/* This is the callback routine from mutt_menuLoop() which is used to generate
184
 
 * a menu entry for the requested item number.
185
 
 */
186
 
#define QUERY_MIN_COLUMN_LENGHT 20 /* Must be < 70/2 */
 
184
static const char * query_format_str (char *dest, size_t destlen, size_t col,
 
185
                                      char op, const char *src,
 
186
                                      const char *fmt, const char *ifstring,
 
187
                                      const char *elsestring,
 
188
                                      unsigned long data, format_flag flags)
 
189
{
 
190
  ENTRY *entry = (ENTRY *)data;
 
191
  QUERY *query = entry->data;
 
192
  char tmp[SHORT_STRING];
 
193
  char buf2[STRING] = "";
 
194
  int optional = (flags & M_FORMAT_OPTIONAL);
 
195
 
 
196
  switch (op)
 
197
  {
 
198
  case 'a':
 
199
    rfc822_write_address (buf2, sizeof (buf2), query->addr, 1);
 
200
    snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
 
201
    snprintf (dest, destlen, tmp, buf2);
 
202
    break;
 
203
  case 'c':
 
204
    snprintf (tmp, sizeof (tmp), "%%%sd", fmt);
 
205
    snprintf (dest, destlen, tmp, query->num);
 
206
    break;
 
207
  case 'e':
 
208
    if (!optional)
 
209
    {
 
210
      snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
 
211
      snprintf (dest, destlen, tmp, NONULL (query->other));
 
212
    }
 
213
    else if (!query->other || !*query->other)
 
214
      optional = 0;
 
215
    break;
 
216
  case 'n':
 
217
    snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
 
218
    snprintf (dest, destlen, tmp, NONULL (query->name));
 
219
    break;
 
220
  case 't':
 
221
    snprintf (tmp, sizeof (tmp), "%%%sc", fmt);
 
222
    snprintf (dest, destlen, tmp, entry->tagged ? '*' : ' ');
 
223
    break;
 
224
  default:
 
225
    snprintf (tmp, sizeof (tmp), "%%%sc", fmt);
 
226
    snprintf (dest, destlen, tmp, op);
 
227
    break;
 
228
  }
 
229
 
 
230
  if (optional)
 
231
    mutt_FormatString (dest, destlen, col, ifstring, query_format_str, data, 0);
 
232
  else if (flags & M_FORMAT_OPTIONAL)
 
233
    mutt_FormatString (dest, destlen, col, elsestring, query_format_str, data, 0);
 
234
 
 
235
  return src;
 
236
}
 
237
 
187
238
static void query_entry (char *s, size_t slen, MUTTMENU *m, int num)
188
239
{
189
 
  ENTRY *table = (ENTRY *) m->data;
190
 
  char buf2[SHORT_STRING], buf[SHORT_STRING] = "";
191
 
 
192
 
  /* need a query format ... hard coded constants are not good */
193
 
  while (FirstColumn + SecondColumn > 70)
194
 
  {
195
 
    FirstColumn = FirstColumn * 3 / 4;
196
 
    SecondColumn = SecondColumn * 3 / 4;
197
 
    if (FirstColumn < QUERY_MIN_COLUMN_LENGHT)
198
 
      FirstColumn = QUERY_MIN_COLUMN_LENGHT;
199
 
    if (SecondColumn < QUERY_MIN_COLUMN_LENGHT)
200
 
      SecondColumn = QUERY_MIN_COLUMN_LENGHT;
201
 
  }
202
 
 
203
 
  rfc822_write_address (buf, sizeof (buf), table[num].data->addr, 1);
204
 
 
205
 
  mutt_format_string (buf2, sizeof (buf2),
206
 
                      FirstColumn + 2, FirstColumn + 2,
207
 
                      FMT_LEFT, ' ', table[num].data->name,
208
 
                      mutt_strlen (table[num].data->name), 0);
209
 
 
210
 
  snprintf (s, slen, " %c %3d %s %-*.*s %s", 
211
 
            table[num].tagged ? '*':' ',
212
 
            num+1,
213
 
            buf2,
214
 
            SecondColumn+2,
215
 
            SecondColumn+2,
216
 
            buf,
217
 
            NONULL (table[num].data->other));
 
240
  ENTRY *entry = &((ENTRY *) m->data)[num];
 
241
 
 
242
  entry->data->num = num;
 
243
  mutt_FormatString (s, slen, 0, NONULL (QueryFormat), query_format_str,
 
244
                     (unsigned long) entry, M_FORMAT_ARROWCURSOR);
218
245
}
219
246
 
220
247
static int query_tag (MUTTMENU *menu, int n, int m)