Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ MAN_DIR=/usr/share/man/man1
default : beep

clean :
rm ${EXEC_NAME}
-rm ${EXEC_NAME}

beep : beep.c
${CC} ${FLAGS} -o ${EXEC_NAME} beep.c
Expand Down
59 changes: 27 additions & 32 deletions beep.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
*
* This code is copyright (C) Johnathan Nightingale, 2000.
*
* This code may distributed only under the terms of the GNU Public License
* which can be found at http://www.gnu.org/copyleft or in the file COPYING
* supplied with this code.
* This code may distributed only under the terms of the GNU General Public
* License which can be found at http://www.gnu.org/copyleft or in the file
* COPYING supplied with this code.
*
* This code is not distributed with warranties of any kind, including implied
* warranties of merchantability or fitness for a particular use or ability to
Expand Down Expand Up @@ -109,6 +109,7 @@ void do_beep(int freq) {
/* BEEP_TYPE_EVDEV */
struct input_event e;

memset(&e, 0, sizeof(e));
e.type = EV_SND;
e.code = SND_TONE;
e.value = freq;
Expand All @@ -124,10 +125,6 @@ void do_beep(int freq) {
/* If we get interrupted, it would be nice to not leave the speaker beeping in
perpetuity. */
void handle_signal(int signum) {

if(console_device)
free(console_device);

switch(signum) {
case SIGINT:
case SIGTERM:
Expand Down Expand Up @@ -257,7 +254,7 @@ void parse_command_line(int argc, char **argv, beep_parms_t *result) {
result->verbose = 1;
break;
case 'e' : /* also --device */
console_device = strdup(optarg);
console_device = optarg;
break;
case 'h' : /* notice that this is also --help */
default :
Expand All @@ -276,26 +273,6 @@ void play_beep(beep_parms_t parms) {
"%d delay after) @ %.2f Hz\n",
parms.reps, parms.length, parms.delay, parms.end_delay, parms.freq);

/* try to snag the console */
if(console_device)
console_fd = open(console_device, O_WRONLY);
else
if((console_fd = open("/dev/tty0", O_WRONLY)) == -1)
console_fd = open("/dev/vc/0", O_WRONLY);

if(console_fd == -1) {
fprintf(stderr, "Could not open %s for writing\n",
console_device != NULL ? console_device : "/dev/tty0 or /dev/vc/0");
printf("\a"); /* Output the only beep we can, in an effort to fall back on usefulness */
perror("open");
exit(1);
}

if (ioctl(console_fd, EVIOCGSND(0)) != -1)
console_type = BEEP_TYPE_EVDEV;
else
console_type = BEEP_TYPE_CONSOLE;

/* Beep */
for (i = 0; i < parms.reps; i++) { /* start beep */
do_beep(parms.freq);
Expand All @@ -305,8 +282,6 @@ void play_beep(beep_parms_t parms) {
if(parms.end_delay || (i+1 < parms.reps))
usleep(1000*parms.delay); /* wait... */
} /* repeat. */

close(console_fd);
}


Expand All @@ -328,6 +303,26 @@ int main(int argc, char **argv) {
signal(SIGTERM, handle_signal);
parse_command_line(argc, argv, parms);

/* try to snag the console */
if(console_device)
console_fd = open(console_device, O_WRONLY);
else
if((console_fd = open("/dev/tty0", O_WRONLY)) == -1)
console_fd = open("/dev/vc/0", O_WRONLY);

if(console_fd == -1) {
fprintf(stderr, "Could not open %s for writing\n",
console_device != NULL ? console_device : "/dev/tty0 or /dev/vc/0");
printf("\a"); /* Output the only beep we can, in an effort to fall back on usefulness */
perror("open");
exit(1);
}

if (ioctl(console_fd, EVIOCGSND(0)) != -1)
console_type = BEEP_TYPE_EVDEV;
else
console_type = BEEP_TYPE_CONSOLE;

/* this outermost while loop handles the possibility that -n/--new has been
used, i.e. that we have multiple beeps specified. Each iteration will
play, then free() one parms instance. */
Expand Down Expand Up @@ -365,8 +360,8 @@ int main(int argc, char **argv) {
parms = next;
}

if(console_device)
free(console_device);
close(console_fd);
console_fd = -1;

return EXIT_SUCCESS;
}