};
 
 void app_msgarg(struct msgs_array *, char *);
+int open_form(char **, char *);
 
 #include <h/mh.h>
 #include <h/utils.h>
 #include <stdlib.h>
+#include <fcntl.h>
 #include <errno.h>
 
 /*
                msgs->msgs = mh_xrealloc(msgs->msgs, (msgs->max+=MAXMSGS)*sizeof(*msgs->msgs));
        msgs->msgs[msgs->size++] = cp;
 }
+
+/* Open a form or components file */
+int
+open_form(char **form, char *def)
+{
+       int in;
+       if (*form) {
+               if ((in = open (etcpath (*form), O_RDONLY)) == NOTOK)
+                       adios (*form, "unable to open form file");
+       } else {
+               if ((in = open (etcpath (def), O_RDONLY)) == NOTOK)
+                       adios (def, "unable to open default components file");
+               *form = def;
+       }
+       return in;
+}
 
  */
 
 #include <h/mh.h>
+#include <h/utils.h>
 #include <fcntl.h>
 
 static struct swit switches[] = {
 
        if ((in = open (form = getcpy (m_name (mp->lowsel)), O_RDONLY)) == NOTOK)
            adios (form, "unable to open message");
-    } else {
-       /*
-        * Open a component or forms file
-        */
-       if (form) {
-           if ((in = open (etcpath (form), O_RDONLY)) == NOTOK)
-               adios (form, "unable to open form file");
-       } else {
-           if ((in = open (etcpath (components), O_RDONLY)) == NOTOK)
-               adios (components, "unable to open default components file");
-           form = components;
-       }
-    }
+    } else
+       in = open_form(&form, components);
 
 try_it_again:
     strncpy (drft, m_draft (dfolder, file, use, &isdf), sizeof(drft));
 
  */
 
 #include <h/mh.h>
+#include <h/utils.h>
 #include <fcntl.h>
 
 static struct swit switches[] = {
     if (file && (msg || folder))
        adios (NULL, "can't mix files and folders/msgs");
 
-    if (form) {
-       if ((in = open (etcpath (form), O_RDONLY)) == NOTOK)
-           adios (form, "unable to open form file");
-    } else {
-       if ((in = open (etcpath (distcomps), O_RDONLY)) == NOTOK)
-           adios (distcomps, "unable to open default components file");
-       form = distcomps;
-    }
+    in = open_form(&form, distcomps);
 
 try_it_again:
     strncpy (drft, m_draft (dfolder, dmsg, NOUSE, &isdf), sizeof(drft));
 
        if (!form)
            form = digestcomps;
        in = build_form (form, digest, volume, issue);
-    } else {
-       if (form) {
-           if ((in = open (etcpath (form), O_RDONLY)) == NOTOK)
-               adios (form, "unable to open form file");
-       } else {
-           if ((in = open (etcpath (forwcomps), O_RDONLY)) == NOTOK)
-               adios (forwcomps, "unable to open default components file");
-           form = forwcomps;
-       }
-    }
+    } else
+       in = open_form(&form, forwcomps);
 
     if ((out = creat (drft, m_gmprot ())) == NOTOK)
        adios (drft, "unable to create");