allow msgs as parameters for whom
[mmh] / sbr / parse_msgs.c
diff --git a/sbr/parse_msgs.c b/sbr/parse_msgs.c
new file mode 100644 (file)
index 0000000..00d9fb8
--- /dev/null
@@ -0,0 +1,50 @@
+#include <h/mh.h>
+#include <h/utils.h>
+
+int
+parse_msgs(const struct msgs_array *msgs, char *folder, struct msgs_array *files)
+{
+       int ret = 0;
+       char *msgnam;
+       struct msgs *f;
+       char *path;
+
+       if (folder) {
+               path = toabsdir(folder);
+       } else {
+               path = toabsdir(getcurfol());
+       }
+
+       path = mh_xstrdup(path);
+       path = add("/", path);
+
+       f = folder_read(path);
+
+       if (f == NULL) {
+               return -1;
+       }
+
+       for (size_t i = 0; i < msgs->size; i++) {
+
+               if (*(msgs->msgs[i]) == '.' || *(msgs->msgs[i]) == '/') {
+                               app_msgarg(files, msgs->msgs[i]);
+                               continue;
+               }
+
+               if (!m_convert(f, msgs->msgs[i])) {
+                       ret++;
+               }
+       }
+
+       for (size_t i = f->lowsel; i <= f->hghsel; i++) {
+               if (is_selected(f, i)) {
+                       msgnam = mh_xstrdup(path);
+                       msgnam = add(m_name(i), msgnam);
+                       app_msgarg(files, msgnam);
+               }
+       }
+
+       folder_free(f);
+
+       return ret;
+}