No need to reduce the size by one since this is done in copystring()
[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("-b      Ring a bell when a new set of mails arrived\n");
32   printf("-i <n>  Interval between checking the mailbox(es)\n");
33   printf("-r      Raw output, i.e. no character conversion\n");
34   printf("-w      Run as window application in foreground\n");
35 }
36
37 int main(int argc, char *argv[])
38 {
39   int opt_bell = 0;
40   unsigned int opt_interval = 60;
41   int opt_window = 0;
42   int opt_raw = 0;
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_bell = 1;
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_raw = 1;
63       break;
64     case 'w':
65       opt_window = 1;
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_window) {
78     if (fork())
79       return 0;
80
81     signal(SIGINT, SIG_IGN);
82     signal(SIGQUIT, SIG_IGN);
83   }
84
85   while (1) {
86     /* Loop over all files */
87     watch_folders(opt_bell);
88
89     /* wait for the next incarnation */
90     sleep(opt_interval);
91   }
92
93   /* Not reached */
94   return 0;
95 }