diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2002-09-12 09:55:03 +0000 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2002-09-12 09:55:03 +0000 |
commit | 011de7c8220790db66632e091e893cee4fc6aa2f (patch) | |
tree | 28641c26821f01cecb56eba6530caee498218691 /libmu_scm | |
parent | c7963338dddac353d1d97c0ae2990fa86dfb6ad7 (diff) | |
download | mailutils-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.c | 104 |
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 (®list); + 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); } |