346bd0c19630762f8ed114072e646f86d60feffb
[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 "charset.h"
24 #include "folder.h"
25 #include "optdefs.h"
26 #include "version.h"
27
28 void usage()
29 {
30   printf("%s %s -- %s\n", PROGNAME, VERSION, COPYRIGHT);
31
32   printf("\n%s [options] [mailbox [mailbox [..]]]\n", PROGNAME);
33   printf("-b      Ring a bell when a new set of mails arrived\n");
34   printf("-i <n>  Interval between checking the mailbox(es)\n");
35   printf("-r      Raw output, i.e. no character conversion\n");
36   printf("-w      Run as window application in foreground\n");
37 }
38
39 int main(int argc, char *argv[])
40 {
41   int opt_flags = 0;
42   unsigned int opt_interval = 60;
43   int c;
44   int tmp_i;
45
46   while ((c = getopt(argc, argv, "bhi:rw")) != -1) {
47     switch (c) {
48     case 'b':
49       opt_flags |= OPT_BELL;
50       break;
51     case 'h':
52       usage();
53       return 0;
54     case 'i':
55       tmp_i = atoi(optarg);
56       if (tmp_i > 0)
57         opt_interval = tmp_i;
58       else
59         fprintf (stderr, "Interval not greater as zero, ignoring\n");
60       break;
61     case 'r':
62       opt_flags |= OPT_RAW;
63       break;
64     case 'w':
65       opt_flags |= OPT_WINDOW;
66       break;
67     }
68   }
69
70   if (optind == argc)
71     add_default_folder();
72   else
73     while (optind < argc)
74       add_folder (argv[optind++]);
75   fix_prefix();
76
77   if (!(opt_flags & OPT_WINDOW)) {
78     if (fork())
79       return 0;
80
81     signal (SIGINT, SIG_IGN);
82     signal (SIGQUIT, SIG_IGN);
83   }
84
85   set_charset();
86
87   while (1) {
88     /* Loop over all files */
89     watch_folders (opt_flags);
90
91     /* wait for the next incarnation */
92     sleep (opt_interval);
93   }
94
95   /* Not reached */
96   return 0;
97 }