summaryrefslogtreecommitdiff
path: root/libmu_scm
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2002-09-12 09:55:03 +0000
committerSergey Poznyakoff <gray@gnu.org.ua>2002-09-12 09:55:03 +0000
commit011de7c8220790db66632e091e893cee4fc6aa2f (patch)
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')
-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 ab69623bb..a5767a0de 100644
--- a/libmu_scm/mu_scm.c
+++ b/libmu_scm/mu_scm.c
@@ -18,2 +18,3 @@
#include "mu_scm.h"
+#include <mailutils/registrar.h>
@@ -45,10 +46,5 @@ 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 */
@@ -58,2 +54,92 @@ 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
@@ -73,3 +159,2 @@ static struct
};
-
@@ -81,3 +166,4 @@ mu_scm_init ()
int i;
-
+ list_t lst;
+
asprintf (&defmailer, "sendmail:%s", _PATH_SENDMAIL);
@@ -107,2 +193,6 @@ mu_scm_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.