cfa574e1f8dd415593834b38fa4f5887ecb2b4cb
[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 "version.h"
25
26 void usage()
27 {
28   printf("%s %s -- %s\n", PROGNAME, VERSION, COPYRIGHT);
29
30   printf("\n%s [options] [mailbox [mailbox [..]]]\n", PROGNAME);
31   printf("-w      Run as window application in foreground\n");
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 }
35
36 int main(int argc, char *argv[])
37 {
38   int opt_bell = 0;
39   unsigned int opt_interval = 60;
40   int opt_window = 0;
41   int c;
42   int tmp_i;
43
44   while ((c = getopt(argc, argv, "bhi:w")) != -1) {
45     switch (c) {
46     case 'b':
47       opt_bell = 1;
48       break;
49     case 'h':
50       usage();
51       return 0;
52     case 'i':
53       tmp_i = atoi(optarg);
54       if (tmp_i > 0)
55         opt_interval = tmp_i;
56       else
57         fprintf(stderr, "Interval not greater as zero, ignoring\n");
58       break;
59     case 'w':
60       opt_window = 1;
61       break;
62     }
63   }
64
65   if (optind == argc)
66     add_default_folder();
67   else
68     while (optind < argc)
69       add_folder(argv[optind++]);
70   fix_prefix();
71
72   if (!opt_window) {
73     if (fork())
74       return 0;
75
76     signal(SIGINT, SIG_IGN);
77     signal(SIGQUIT, SIG_IGN);
78   }
79
80   while (1) {
81     /* Loop over all files */
82     watch_folders(opt_bell);
83
84     /* wait for the next incarnation */
85     sleep(opt_interval);
86   }
87
88   /* Not reached */
89   return 0;
90 }