2 * Copyright (c) 1997, 1999 Hellmuth Michaelis. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 *---------------------------------------------------------------------------
27 * isdntel - isdn4bsd telephone answering machine support
28 * ======================================================
30 * $Id: main.c,v 1.7 2009/04/16 05:56:33 lukem Exp $
34 * last edit-date: [Mon Dec 13 21:54:26 1999]
36 *----------------------------------------------------------------------------*/
43 static void usage( void );
45 static int top_dis
= 0;
46 static int bot_dis
= 0;
47 static int cur_pos_scr
= 0;
49 static void makecurrent(int cur_pos
, struct onefile
*cur_file
, int cold
);
51 /*---------------------------------------------------------------------------*
53 *---------------------------------------------------------------------------*/
55 main(int argc
, char **argv
)
62 const char *aliasfile
= ALIASFILE
;
63 int rrtimeout
= REREADTIMEOUT
;
67 setlocale( LC_ALL
, "");
69 while ((i
= getopt(argc
, argv
, "a:d:p:t:")) != -1)
86 rrtimeout
= strtoul(optarg
, &ncp
, 10);
101 if ((chdir(spooldir
)) != 0)
102 fatal("cannot change directory to spooldir %s!", spooldir
);
104 init_alias(aliasfile
);
112 set
[0].fd
= STDIN_FILENO
;
113 set
[0].events
= POLLIN
;
116 /* if no char is available within timeout, reread spool */
118 if ((poll(set
, 1, rrtimeout
* 1000)) <= 0)
124 kchar
= wgetch(main_w
); /* get char */
136 case KEY_UP
: /* up-move cursor */
137 if (cur_file
&& cur_file
->prev
)
139 cur_file
= cur_file
->prev
;
146 case KEY_DOWN
: /* down-move cursor */
147 if (cur_file
&& cur_file
->next
)
149 cur_file
= cur_file
->next
;
154 case KEY_HOME
: /* move cursor to first dir */
157 case KEY_LL
: /* move cursor to last file */
164 case CNTRL_L
: /* refresh */
170 makecurrent(cur_pos
, cur_file
, 0);
178 /*---------------------------------------------------------------------------*
179 * handle horizontal selection bar movement
180 *---------------------------------------------------------------------------*/
182 makecurrent(int mc_cur_pos
, struct onefile
*mc_cur_file
, int cold
)
185 static struct onefile
*lastfile
;
188 /* un-higlight current horizontal bar */
190 if (!cold
&& lastfile
&& mc_cur_file
)
192 snprintf(buffer
, sizeof(buffer
),
193 "%s %s %-16s %-16s %-20s %-6s%*s",
194 lastfile
->date
, lastfile
->time
,
195 lastfile
->dstnumber
, lastfile
->srcnumber
,
196 lastfile
->alias
== NULL
? "-/-" : lastfile
->alias
,
197 lastfile
->seconds
, COLS
- LAST_POS
- 2, "");
199 wattroff(main_w
, A_REVERSE
);
200 mvwprintw(main_w
, lastpos
, 0, "%s", buffer
);
201 wattroff(main_w
, A_REVERSE
);
204 if (mc_cur_file
== NULL
)
206 lastpos
= cur_pos_scr
;
207 lastfile
= mc_cur_file
;
211 /* have to scroll up or down ? */
213 if (mc_cur_pos
>= bot_dis
)
221 cur_pos_scr
= LINES
-START_O
-3;
223 else if (mc_cur_pos
< top_dis
)
235 cur_pos_scr
= mc_cur_pos
- top_dis
;
238 snprintf(buffer
, sizeof(buffer
), "%s %s %-16s %-16s %-20s %-6s%*s",
239 mc_cur_file
->date
, mc_cur_file
->time
,
240 mc_cur_file
->dstnumber
, mc_cur_file
->srcnumber
,
241 mc_cur_file
->alias
== NULL
? "-/-" : mc_cur_file
->alias
,
242 mc_cur_file
->seconds
,
243 COLS
- LAST_POS
- 2, "");
245 wattron(main_w
, A_REVERSE
);
246 mvwprintw(main_w
, cur_pos_scr
, 0, "%s", buffer
);
247 wattroff(main_w
, A_REVERSE
);
249 lastpos
= cur_pos_scr
;
250 lastfile
= mc_cur_file
;
255 /*---------------------------------------------------------------------------*
257 *---------------------------------------------------------------------------*/
268 /*---------------------------------------------------------------------------*
269 * usage display and exit
270 *---------------------------------------------------------------------------*/
274 fprintf(stderr
, "\n");
275 fprintf(stderr
, "isdntel - isdn telephone answering management support utility (version %d.%d.%d)\n", VERSION
, REL
, STEP
);
276 fprintf(stderr
, " usage: isdntel -a <filename> -d <directory> -p <command> -t <timeout>\n");
277 fprintf(stderr
, " -a <filename> use filename as alias file\n");
278 fprintf(stderr
, " -d <directory> use directory as spool directory\n");
279 fprintf(stderr
, " -p <command> specify commandline for play command\n");
280 fprintf(stderr
, " -t <timeout> spool directory reread timeout in seconds\n");
281 fprintf(stderr
, "\n");
285 /*---------------------------------------------------------------------------*
287 *---------------------------------------------------------------------------*/
289 fatal(const char *fmt
, ...)
303 fprintf(stderr
, "\nFatal error: ");
304 vfprintf(stderr
, fmt
, ap
);
305 fprintf(stderr
, "\n\n");
312 /*---------------------------------------------------------------------------*
314 *---------------------------------------------------------------------------*/
316 error(const char *fmt
, ...)
324 wprintw(main_w
, "ERROR: ");
325 vwprintw(main_w
, fmt
, ap
);
326 wprintw(main_w
, "\n");
331 fprintf(stderr
, "ERROR: ");
332 vfprintf(stderr
, fmt
, ap
);
333 fprintf(stderr
, "\n");
339 /*---------------------------------------------------------------------------*
340 * read files and fill display
341 *---------------------------------------------------------------------------*/
343 init_files(int inipos
)
347 nofiles
= fill_list();
360 for (i
=0; (i
< nofiles
) && (i
< (LINES
-START_O
-2)); i
++)
362 mvwprintw(main_w
, i
, 0, "%s %s", cur_file
->date
, cur_file
->time
);
363 mvwprintw(main_w
, i
, DST_POS
, "%s", cur_file
->dstnumber
);
364 mvwprintw(main_w
, i
, SRC_POS
, "%s", cur_file
->srcnumber
);
365 mvwprintw(main_w
, i
, ALI_POS
,"%s", cur_file
->alias
== NULL
? "-/-" : cur_file
->alias
);
366 mvwprintw(main_w
, i
, SEC_POS
,"%s", cur_file
->seconds
);
370 if ((cur_file
= cur_file
->next
) == NULL
)
378 for (i
= 0; i
< inipos
; i
++)
380 if (cur_file
->next
!= NULL
)
381 cur_file
= cur_file
->next
;
386 makecurrent(cur_pos
, cur_file
, 1);