X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=osdd.c;h=98a35a6d09d23285afed741cc992664e8b264b32;hb=a883082ba08cf9e8acb0360056b240ebd77ab110;hp=4659493ad074cf00df8783d961c6b9ddcc401688;hpb=7a69401dada55e2d4935ce3a37f04f8c9331402f;p=osdd.git diff --git a/osdd.c b/osdd.c index 4659493..98a35a6 100644 --- a/osdd.c +++ b/osdd.c @@ -20,13 +20,79 @@ static xosd *osd; +typedef uint64_t timestamp_t; +static timestamp_t now; + +/*** Options ***/ + static int num_lines = 4; static char *font_name = "-bitstream-bitstream vera sans-bold-r-normal-*-*-320-*-*-p-*-*"; static char *default_color = "green"; static char *default_outline_color = "black"; +static int default_duration = 1000; +static int default_min_duration = 1000; -typedef uint64_t timestamp_t; -static timestamp_t now; +static const char short_opts[] = "c:d:f:l:m:o:"; + +static const struct option long_opts[] = { + { "color", required_argument, NULL, 'c' }, + { "duration", required_argument, NULL, 'd' }, + { "font", required_argument, NULL, 'f' }, + { "lines", required_argument, NULL, 'l' }, + { "min-duration", required_argument, NULL, 'm' }, + { "outline-color", required_argument, NULL, 'o' }, + { NULL, 0, NULL, 0 }, +}; + +static void NONRET +usage(void) +{ + fprintf(stderr, "Usage: osdd \n\n\ +Options:\n\ +-c, --color=\t\tDefault color (#rgb, #rrggbb or a name from rgb.txt)\n\ +-d, --duration=\tDefault message duration in milliseconds\n\ +-f, --font=\t\tFont to use for the OSD\n\ +-l, --lines=\t\tNumber of lines of the OSD\n\ +-m, --min-duration=\tDefault minimum message duration in milliseconds\n\ +-o, --outline-color=\tDefault outline color\n\ +"); + exit(1); +} + +static void +parse_opts(int argc, char **argv) +{ + int opt; + while ((opt = getopt_long(argc, argv, short_opts, long_opts, NULL)) >= 0) + switch (opt) + { + case 'c': + default_color = optarg; + break; + case 'd': + default_duration = atoi(optarg); + break; + case 'f': + font_name = optarg; + break; + case 'l': + num_lines = atoi(optarg); + if (num_lines < 1) + usage(); + break; + case 'm': + default_min_duration = atoi(optarg); + break; + case 'o': + default_outline_color = optarg; + break; + default: + usage(); + } + + if (optind < argc) + usage(); +} /*** Displaying of messages ***/ @@ -39,7 +105,9 @@ struct msg { static void display_msg(struct msg *msg) { - msg->min_light = msg->max_light = now + 1000; + DBG("## Displaying message\n"); + msg->min_light = now + default_min_duration; + msg->max_light = now + default_duration; xosd_set_colour(osd, default_color); xosd_set_outline_colour(osd, default_outline_color); @@ -63,6 +131,7 @@ display_msg(struct msg *msg) key = ""; val = line; } + DBG("\t%s:%s\n", key, val); if (!key[0]) { @@ -87,6 +156,8 @@ display_msg(struct msg *msg) xosd_set_colour(osd, val); else if (!strcmp(key, "outline-color")) xosd_set_outline_colour(osd, val); + else + DBG("\tPARSE ERROR\n"); line = nl; } @@ -98,6 +169,7 @@ display_msg(struct msg *msg) static void hide_msg(struct msg *msg) { + DBG("## Hiding message\n"); for (int i=0; i\n\n\ -Options:\n\ --c, --color=\t\tDefault color (#rgb, #rrggbb or a name from rgb.txt)\n\ --f, --font=\t\tFont to use for the OSD\n\ --l, --lines=\t\tNumber of lines of the OSD\n\ --o, --outline-color=\tDefault outline color\n\ -"); - exit(1); -} - -static void -parse_opts(int argc, char **argv) -{ - int opt; - while ((opt = getopt_long(argc, argv, short_opts, long_opts, NULL)) >= 0) - switch (opt) - { - case 'c': - default_color = optarg; - break; - case 'f': - font_name = optarg; - break; - case 'l': - num_lines = atoi(optarg); - if (num_lines < 1) - usage(); - break; - case 'o': - default_outline_color = optarg; - break; - default: - usage(); - } - - if (optind < argc) - usage(); -} - /*** Main loop ***/ int @@ -261,7 +279,7 @@ main(int argc, char **argv) } } - DBG("Waiting for %d ms\n", (int)(wait_until - now)); + DBG("... waiting for %d ms\n", (int)(wait_until - now)); poll(&pfd, 1, wait_until - now); if (pfd.revents & POLLIN) {