]> diplodocus.org Git - nmh/blobdiff - uip/scan.c
Support for sequence file locking in inc(1).
[nmh] / uip / scan.c
index 8ea61eeb74e770280d59cfea3bcbe4253796dcb2..2996a2b5fc7bb2c86cdcc8ec41b042dd41b506c9 100644 (file)
 #include <h/utils.h>
 #include <errno.h>
 
 #include <h/utils.h>
 #include <errno.h>
 
-static struct swit switches[] = {
-#define        CLRSW   0
-    { "clear", 0 },
-#define        NCLRSW  1
-    { "noclear", 0 },
-#define        FORMSW  2
-    { "form formatfile", 0 },
-#define        FMTSW   3
-    { "format string", 5 },
-#define        HEADSW  4
-    { "header", 0 },
-#define        NHEADSW 5
-    { "noheader", 0 },
-#define        WIDTHSW 6
-    { "width columns", 0 },
-#define        REVSW   7
-    { "reverse", 0 },
-#define        NREVSW  8
-    { "noreverse", 0 },
-#define        FILESW  9
-    { "file file", 4 },
-#define VERSIONSW 10
-    { "version", 0 },
-#define        HELPSW  11
-    { "help", 0 },
-    { NULL, 0 }
-};
+#define SCAN_SWITCHES \
+    X("clear", 0, CLRSW) \
+    X("noclear", 0, NCLRSW) \
+    X("form formatfile", 0, FORMSW) \
+    X("format string", 5, FMTSW) \
+    X("header", 0, HEADSW) \
+    X("noheader", 0, NHEADSW) \
+    X("width columns", 0, WIDTHSW) \
+    X("reverse", 0, REVSW) \
+    X("noreverse", 0, NREVSW) \
+    X("file file", 4, FILESW) \
+    X("version", 0, VERSIONSW) \
+    X("help", 0, HELPSW) \
+
+#define X(sw, minchars, id) id,
+DEFINE_SWITCH_ENUM(SCAN);
+#undef X
+
+#define X(sw, minchars, id) { sw, minchars, id },
+DEFINE_SWITCH_ARRAY(SCAN, switches);
+#undef X
 
 
 
 
-/*
- * global for sbr/formatsbr.c - yech!
- */
-#ifdef LBL
-extern struct msgs *fmt_current_folder;        
-#endif
-
-extern m_getfld_state_t gstate;
-
 /*
  * prototypes
  */
 /*
  * prototypes
  */
@@ -190,15 +175,14 @@ main (int argc, char **argv)
            printf ("FOLDER %s\t%s\n", file, dtimenow (1));
        }
 
            printf ("FOLDER %s\t%s\n", file, dtimenow (1));
        }
 
-       m_getfld_state_init (&gstate);
-       m_unknown (gstate, in);
+       scan_detect_mbox_style (in);
        for (msgnum = 1; ; ++msgnum) {
            state = scan (in, msgnum, -1, nfs, width, 0, 0,
                    hdrflag ? file : NULL, 0L, 1);
            if (state != SCNMSG && state != SCNENC)
                break;
        }
        for (msgnum = 1; ; ++msgnum) {
            state = scan (in, msgnum, -1, nfs, width, 0, 0,
                    hdrflag ? file : NULL, 0L, 1);
            if (state != SCNMSG && state != SCNENC)
                break;
        }
-       m_getfld_state_destroy (&gstate);
+       scan_finished ();
        fclose (in);
        done (0);
     }
        fclose (in);
        done (0);
     }
@@ -217,7 +201,7 @@ main (int argc, char **argv)
        adios (maildir, "unable to change directory to");
 
     /* read folder and create message structure */
        adios (maildir, "unable to change directory to");
 
     /* read folder and create message structure */
-    if (!(mp = folder_read (folder)))
+    if (!(mp = folder_read (folder, 1)))
        adios (NULL, "unable to read folder %s", folder);
 
     /* check for empty folder */
        adios (NULL, "unable to read folder %s", folder);
 
     /* check for empty folder */
@@ -253,11 +237,6 @@ main (int argc, char **argv)
 
     ontty = isatty (fileno (stdout));
 
 
     ontty = isatty (fileno (stdout));
 
-#ifdef LBL
-    else
-       fmt_current_folder = mp;
-#endif
-
     for (msgnum = revflag ? mp->hghsel : mp->lowsel;
         (revflag ? msgnum >= mp->lowsel : msgnum <= mp->hghsel);
         msgnum += (revflag ? -1 : 1)) {
     for (msgnum = revflag ? mp->hghsel : mp->lowsel;
         (revflag ? msgnum >= mp->lowsel : msgnum <= mp->hghsel);
         msgnum += (revflag ? -1 : 1)) {
@@ -283,7 +262,6 @@ main (int argc, char **argv)
                }
            }
 
                }
            }
 
-           m_getfld_state_init (&gstate);
            switch (state = scan (in, msgnum, 0, nfs, width,
                        msgnum == mp->curmsg, unseen,
                        folder, 0L, 1)) {
            switch (state = scan (in, msgnum, 0, nfs, width,
                        msgnum == mp->curmsg, unseen,
                        folder, 0L, 1)) {
@@ -299,7 +277,7 @@ main (int argc, char **argv)
                    advise (NULL, "message %d: empty", msgnum);
                    break;
            }
                    advise (NULL, "message %d: empty", msgnum);
                    break;
            }
-           m_getfld_state_destroy (&gstate);
+           scan_finished ();
            hdrflag = 0;
            fclose (in);
            if (ontty)
            hdrflag = 0;
            fclose (in);
            if (ontty)
@@ -307,10 +285,6 @@ main (int argc, char **argv)
        }
     }
 
        }
     }
 
-#ifdef LBL
-    seq_save (mp);     /* because formatsbr might have made changes */
-#endif
-
     folder_free (mp);  /* free folder/message structure */
     if (clearflag)
        clear_screen ();
     folder_free (mp);  /* free folder/message structure */
     if (clearflag)
        clear_screen ();