diff --git a/beep.1.gz b/beep.1.gz index 800f92c..008217c 100644 Binary files a/beep.1.gz and b/beep.1.gz differ diff --git a/beep.c b/beep.c index 14fac3e..5ef88b7 100644 --- a/beep.c +++ b/beep.c @@ -66,6 +66,9 @@ char *copyright = #define NO_END_DELAY 0 #define YES_END_DELAY 1 +#define NO_INFINITE 0 +#define YES_INFINITE 1 + #define NO_STDIN_BEEP 0 #define LINE_STDIN_BEEP 1 #define CHAR_STDIN_BEEP 2 @@ -130,6 +133,7 @@ void handle_signal(int signum) { switch(signum) { case SIGINT: + case SIGTERM: if(console_fd >= 0) { /* Kill the sound, quit gracefully */ do_beep(0); @@ -166,6 +170,7 @@ void usage_bail(const char *executable_name) { * "-D " (similar to -d, but delay after last repetition as well) * "-s" (beep after each line of input from stdin, echo line to stdout) * "-c" (beep after each char of input from stdin, echo char to stdout) + * "-i/--infinite" next = first_parm; if (result->freq == 0) result->freq = DEFAULT_FREQ; } @@ -312,6 +324,8 @@ void play_beep(beep_parms_t parms) { int main(int argc, char **argv) { char sin[4096], *ptr; + int infinite = NO_INFINITE; + int save_reps = 0; beep_parms_t *parms = (beep_parms_t *)malloc(sizeof(beep_parms_t)); parms->freq = 0; @@ -324,7 +338,8 @@ int main(int argc, char **argv) { parms->next = NULL; signal(SIGINT, handle_signal); - parse_command_line(argc, argv, parms); + signal(SIGTERM, handle_signal); + parse_command_line(argc, argv, parms, &infinite); /* this outermost while loop handles the possibility that -n/--new has been used, i.e. that we have multiple beeps specified. Each iteration will @@ -332,6 +347,9 @@ int main(int argc, char **argv) { while(parms) { beep_parms_t *next = parms->next; + if (infinite) + save_reps = parms->reps; + if(parms->stdin_beep) { /* in this case, beep is probably part of a pipe, in which case POSIX says stdin and out should be fuly buffered. This however means very @@ -359,7 +377,10 @@ int main(int argc, char **argv) { } /* Junk each parms struct after playing it */ - free(parms); + if (infinite) + parms->reps = save_reps; + else + free(parms); parms = next; } @@ -368,3 +389,4 @@ int main(int argc, char **argv) { return EXIT_SUCCESS; } +