Added support for multi-line header lines
[infodrom/newmail] / newmail.c
1 /*
2     Copyright (c) 2004  Joey Schulze <joey@infodrom.org>
3
4     This program is free software; you can redistribute it and/or modify
5     it under the terms of the GNU General Public License as published by
6     the Free Software Foundation; either version 2 of the License, or
7     (at your option) any later version.
8
9     This program is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12     GNU General Public License for more details.
13
14     You should have received a copy of the GNU General Public License
15     along with this program; if not, write to the Free Software
16     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17 */
18
19 #include <stdio.h>
20 #include <stdlib.h>
21 #include <unistd.h>
22 #include <signal.h>
23 #include "folder.h"
24 #include "optdefs.h"
25 #include "version.h"
26
27 void usage()
28 {
29   printf("%s %s -- %s\n", PROGNAME, VERSION, COPYRIGHT);
30
31   printf("\n%s [options] [mailbox [mailbox [..]]]\n", PROGNAME);
32   printf("-b      Ring a bell when a new set of mails arrived\n");
33   printf("-i <n>  Interval between checking the mailbox(es)\n");
34   printf("-r      Raw output, i.e. no character conversion\n");
35   printf("-w      Run as window application in foreground\n");
36 }
37
38 int main(int argc, char *argv[])
39 {
40   int opt_flags = 0;
41   unsigned int opt_interval = 60;
42   int c;
43   int tmp_i;
44
45   while ((c = getopt(argc, argv, "bhi:rw")) != -1) {
46     switch (c) {
47     case 'b':
48       opt_flags |= OPT_BELL;
49       break;
50     case 'h':
51       usage();
52       return 0;
53     case 'i':
54       tmp_i = atoi(optarg);
55       if (tmp_i > 0)
56         opt_interval = tmp_i;
57       else
58         fprintf(stderr, "Interval not greater as zero, ignoring\n");
59       break;
60     case 'r':
61       opt_flags |= OPT_RAW;
62       break;
63     case 'w':
64       opt_flags |= OPT_WINDOW;
65       break;
66     }
67   }
68
69   if (optind == argc)
70     add_default_folder();
71   else
72     while (optind < argc)
73       add_folder(argv[optind++]);
74   fix_prefix();
75
76   if (!(opt_flags & OPT_WINDOW)) {
77     if (fork())
78       return 0;
79
80     signal(SIGINT, SIG_IGN);
81     signal(SIGQUIT, SIG_IGN);
82   }
83
84   while (1) {
85     /* Loop over all files */
86     watch_folders(opt_flags);
87
88     /* wait for the next incarnation */
89     sleep(opt_interval);
90   }
91
92   /* Not reached */
93   return 0;
94 }