X-Git-Url: https://git.deb.at/?a=blobdiff_plain;f=debian%2Fpatches%2F06_event-option;fp=debian%2Fpatches%2F06_event-option;h=0000000000000000000000000000000000000000;hb=5fa1146af48a9a037736581e400431c71bd93b29;hp=f6b7895c3ea7ee7b0ea1282145df7cecf52d013d;hpb=0e17115ad50cd24d1a805661ab54dcf442f70abf;p=pkg%2Fbeep.git diff --git a/debian/patches/06_event-option b/debian/patches/06_event-option deleted file mode 100644 index f6b7895..0000000 --- a/debian/patches/06_event-option +++ /dev/null @@ -1,154 +0,0 @@ -Author: Alessandro Zummo vim:ft=diff: -Description: evdev and general device node support (BTS #350214) - -Index: beep-1.2.2/beep.c -=================================================================== ---- beep-1.2.2.orig/beep.c -+++ beep-1.2.2/beep.c -@@ -26,6 +26,7 @@ - #include - #include - #include -+#include - - /* I don't know where this number comes from, I admit that freely. A - wonderful human named Raine M. Ekman used it in a program that played -@@ -87,18 +88,48 @@ typedef struct beep_parms_t { - struct beep_parms_t *next; /* in case -n/--new is used. */ - } beep_parms_t; - -+enum { BEEP_TYPE_CONSOLE, BEEP_TYPE_EVDEV }; -+ - /* Momma taught me never to use globals, but we need something the signal - handlers can get at.*/ - int console_fd = -1; -+int console_type = BEEP_TYPE_CONSOLE; -+char *console_device = NULL; -+ -+ -+void do_beep(int freq) { -+ if (console_type == BEEP_TYPE_CONSOLE) { -+ if(ioctl(console_fd, KIOCSOUND, freq != 0 -+ ? (int)(CLOCK_TICK_RATE/freq) -+ : freq) < 0) { -+ printf("\a"); /* Output the only beep we can, in an effort to fall back on usefulness */ -+ perror("ioctl"); -+ } -+ } else { -+ /* BEEP_TYPE_EVDEV */ -+ struct input_event e; -+ -+ e.type = EV_SND; -+ e.code = SND_TONE; -+ e.value = freq; -+ -+ write(console_fd, &e, sizeof(struct input_event)); -+ } -+} -+ - - /* 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: - if(console_fd >= 0) { - /* Kill the sound, quit gracefully */ -- ioctl(console_fd, KIOCSOUND, 0); -+ do_beep(0); - close(console_fd); - exit(signum); - } else { -@@ -111,7 +142,7 @@ void handle_signal(int signum) { - /* print usage and exit */ - void usage_bail(const char *executable_name) { - printf("Usage:\n%s [-f freq] [-l length] [-r reps] [-d delay] " -- "[-D delay] [-s] [-c] [--verbose | --debug]\n", -+ "[-D delay] [-s] [-c] [--verbose | --debug] [-e device]\n", - executable_name); - printf("%s [Options...] [-n] [--new] [Options...] ... \n", executable_name); - printf("%s [-h] [--help]\n", executable_name); -@@ -143,13 +174,14 @@ void usage_bail(const char *executable_n - void parse_command_line(int argc, char **argv, beep_parms_t *result) { - int c; - -- struct option opt_list[6] = {{"help", 0, NULL, 'h'}, -+ struct option opt_list[7] = {{"help", 0, NULL, 'h'}, - {"version", 0, NULL, 'V'}, - {"new", 0, NULL, 'n'}, - {"verbose", 0, NULL, 'X'}, - {"debug", 0, NULL, 'X'}, -+ {"device", 1, NULL, 'e'}, - {0,0,0,0}}; -- while((c = getopt_long(argc, argv, "f:l:r:d:D:schvVn", opt_list, NULL)) -+ while((c = getopt_long(argc, argv, "f:l:r:d:D:schvVne:", opt_list, NULL)) - != EOF) { - int argval = -1; /* handle parsed numbers for various arguments */ - float argfreq = -1; -@@ -220,6 +252,9 @@ void parse_command_line(int argc, char * - case 'X' : /* --debug / --verbose */ - result->verbose = 1; - break; -+ case 'e' : /* also --device */ -+ console_device = strdup(optarg); -+ break; - case 'h' : /* notice that this is also --help */ - default : - usage_bail(argv[0]); -@@ -238,24 +273,31 @@ void play_beep(beep_parms_t parms) { - parms.reps, parms.length, parms.delay, parms.end_delay, parms.freq); - - /* try to snag the console */ -- if((console_fd = open("/dev/tty0", O_WRONLY)) == -1) { -- if((console_fd = open("/dev/vc/0", O_WRONLY)) == -1) { -- fprintf(stderr, "Could not open /dev/tty0 or /dev/vc/0 for writing.\n"); -- printf("\a"); /* Output the only beep we can, in an effort to fall back on usefulness */ -- perror("open"); -- exit(1); -- } -+ 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 */ -- if(ioctl(console_fd, KIOCSOUND, (int)(CLOCK_TICK_RATE/parms.freq)) < 0) { -- printf("\a"); /* Output the only beep we can, in an effort to fall back on usefulness */ -- perror("ioctl"); -- } -+ do_beep(parms.freq); - /* Look ma, I'm not ansi C compatible! */ - usleep(1000*parms.length); /* wait... */ -- ioctl(console_fd, KIOCSOUND, 0); /* stop beep */ -+ do_beep(0); /* stop beep */ - if(parms.end_delay || (i+1 < parms.reps)) - usleep(1000*parms.delay); /* wait... */ - } /* repeat. */ -@@ -318,5 +360,8 @@ int main(int argc, char **argv) { - parms = next; - } - -+ if(console_device) -+ free(console_device); -+ - return EXIT_SUCCESS; - }