summaryrefslogtreecommitdiffabout
path: root/libmu_scm
authorSergey Poznyakoff <gray@gnu.org.ua>2002-09-12 09:55:03 (GMT)
committer Sergey Poznyakoff <gray@gnu.org.ua>2002-09-12 09:55:03 (GMT)
commit011de7c8220790db66632e091e893cee4fc6aa2f (patch) (side-by-side diff)
tree28641c26821f01cecb56eba6530caee498218691 /libmu_scm
parentc7963338dddac353d1d97c0ae2990fa86dfb6ad7 (diff)
downloadmailutils-011de7c8220790db66632e091e893cee4fc6aa2f.tar.gz
mailutils-011de7c8220790db66632e091e893cee4fc6aa2f.tar.bz2
(mu-register-format): New primitive. Registers desired mailbox/mailer formats.
(mu_scm_init): Unconditionally register path_record format.
Diffstat (limited to 'libmu_scm') (more/less context) (ignore whitespace changes)
-rw-r--r--libmu_scm/mu_scm.c104
1 files changed, 97 insertions, 7 deletions
diff --git a/libmu_scm/mu_scm.c b/libmu_scm/mu_scm.c
index ab69623..a5767a0 100644
--- a/libmu_scm/mu_scm.c
+++ b/libmu_scm/mu_scm.c
@@ -16,6 +16,7 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "mu_scm.h"
+#include <mailutils/registrar.h>
#ifndef _PATH_SENDMAIL
# define _PATH_SENDMAIL "/usr/lib/sendmail"
@@ -43,19 +44,104 @@ scm_makenum (unsigned long val)
void
mu_set_variable (const char *name, SCM value)
{
-#if GUILE_VERSION == 14
- scm_c_define (name, value); /*FIXME*/
-#else
scm_c_define (name, value);
-#endif
}
-
SCM _mu_scm_package; /* STRING: PACKAGE */
SCM _mu_scm_version; /* STRING: VERSION */
SCM _mu_scm_mailer; /* STRING: Default mailer path. */
SCM _mu_scm_debug; /* NUM: Default debug level. */
+struct format_record {
+ char *name;
+ record_t *record;
+};
+
+static struct format_record format_table[] = {
+ { "mbox", &mbox_record },
+ { "mh", &mh_record },
+ { "pop", &pop_record },
+ { "imap", &imap_record },
+ { "sendmail", &sendmail_record },
+ { "smtp", &smtp_record },
+ { NULL, NULL },
+};
+
+static record_t *
+find_format (const struct format_record *table, const char *name)
+{
+ for (; table->name; table++)
+ if (strcmp (table->name, name) == 0)
+ break;
+ return table->record;
+}
+
+static int
+register_format (const char *name)
+{
+ int status = 0;
+ list_t reglist = NULL;
+
+ status = registrar_get_list (&reglist);
+ if (status)
+ return status;
+
+ if (!name)
+ {
+ struct format_record *table;
+ for (table = format_table; table->name; table++)
+ list_append (reglist, *table->record);
+ status = 0;
+ }
+ else
+ {
+ record_t *record = find_format (format_table, name);
+ if (record)
+ status = list_append (reglist, *record);
+ else
+ status = EINVAL;
+ }
+ return status;
+}
+
+
+SCM_DEFINE (mu_register_format, "mu-register-format", 0, 0, 1,
+ (SCM REST),
+"Registers desired mailutils formats. Takes any number of arguments.\n"
+"Allowed arguments are:\n"
+" \"mbox\" Regular UNIX mbox format\n"
+" \"mh\" MH mailbox format\n"
+" \"pop\" POP mailbox format\n"
+" \"imap\" IMAP mailbox format\n"
+" \"sendmail\" sendmail mailer\n"
+" \"smtp\" smtp mailer\n"
+"\n"
+"If called without arguments, registers all available formats\n")
+#define FUNC_NAME s_mu_register_format
+{
+ SCM status;
+
+ if (REST == SCM_EOL)
+ {
+ register_format (NULL);
+ status = SCM_BOOL_T;
+ }
+ else
+ {
+ status = SCM_BOOL_T;
+ for (; REST != SCM_EOL; REST = SCM_CDR (REST))
+ {
+ SCM scm = SCM_CAR (REST);
+ SCM_ASSERT (SCM_NIMP (scm) && SCM_STRINGP (scm),
+ scm, SCM_ARGn, FUNC_NAME);
+ if (register_format (SCM_STRING_CHARS (scm)))
+ status = SCM_BOOL_F;
+ }
+ }
+ return status;
+}
+#undef FUNC_NAME
+
static struct
{
char *name;
@@ -71,7 +157,6 @@ static struct
{ "MU-ATTRIBUTE-RECENT", MU_ATTRIBUTE_RECENT },
{ NULL, 0 }
};
-
/* Initialize the library */
void
@@ -79,7 +164,8 @@ mu_scm_init ()
{
char *defmailer;
int i;
-
+ list_t lst;
+
asprintf (&defmailer, "sendmail:%s", _PATH_SENDMAIL);
_mu_scm_mailer = scm_makfrom0str (defmailer);
mu_set_variable ("mu-mailer", _mu_scm_mailer);
@@ -105,4 +191,8 @@ mu_scm_init ()
mu_scm_logger_init ();
mu_scm_port_init ();
mu_scm_mime_init ();
+#include "mu_scm.x"
+
+ registrar_get_list (&lst);
+ list_append (lst, path_record);
}

Return to:

Send suggestions and report system problems to the System administrator.