+void parse_local_mail_args(struct text_object *obj, const char *arg)
+{
+ float n1;
+ char mbox[256], dst[256];
+ struct local_mail_s *locmail;
+
+ if (!arg) {
+ n1 = 9.5;
+ /* Kapil: Changed from MAIL_FILE to
+ current_mail_spool since the latter
+ is a copy of the former if undefined
+ but the latter should take precedence
+ if defined */
+ strncpy(mbox, current_mail_spool, sizeof(mbox));
+ } else {
+ if (sscanf(arg, "%s %f", mbox, &n1) != 2) {
+ n1 = 9.5;
+ strncpy(mbox, arg, sizeof(mbox));
+ }
+ }
+
+ variable_substitute(mbox, dst, sizeof(dst));
+
+ locmail = malloc(sizeof(struct local_mail_s));
+ memset(locmail, 0, sizeof(struct local_mail_s));
+ locmail->mbox = strndup(dst, text_buffer_size);
+ locmail->interval = n1;
+ obj->data.opaque = locmail;
+}
+
+#define PRINT_MAILS_GENERATOR(x) \
+void print_##x##mails(struct text_object *obj, char *p, int p_max_size) \
+{ \
+ struct local_mail_s *locmail = obj->data.opaque; \
+ if (!locmail) \
+ return; \
+ update_mail_count(locmail); \
+ snprintf(p, p_max_size, "%d", locmail->x##mail_count); \
+}
+
+PRINT_MAILS_GENERATOR()
+PRINT_MAILS_GENERATOR(new_)
+PRINT_MAILS_GENERATOR(seen_)
+PRINT_MAILS_GENERATOR(unseen_)
+PRINT_MAILS_GENERATOR(flagged_)
+PRINT_MAILS_GENERATOR(unflagged_)
+PRINT_MAILS_GENERATOR(forwarded_)
+PRINT_MAILS_GENERATOR(unforwarded_)
+PRINT_MAILS_GENERATOR(replied_)
+PRINT_MAILS_GENERATOR(unreplied_)
+PRINT_MAILS_GENERATOR(draft_)
+PRINT_MAILS_GENERATOR(trashed_)
+
+void free_local_mails(struct text_object *obj)
+{
+ struct local_mail_s *locmail = obj->data.opaque;
+
+ if (!locmail)
+ return;
+
+ if (locmail->mbox)
+ free(locmail->mbox);
+ free(obj->data.opaque);
+ obj->data.opaque = 0;
+}
+