From 886a2b4f5ce9b849ae102311a7e29beed421d35e Mon Sep 17 00:00:00 2001 From: Niv Sardi Date: Fri, 8 Jun 2007 16:44:50 +0200 Subject: Added getopt and size options --- von-wait.c | 99 +++++++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 73 insertions(+), 26 deletions(-) diff --git a/von-wait.c b/von-wait.c index 60a263c..83bd2a1 100644 --- a/von-wait.c +++ b/von-wait.c @@ -8,6 +8,8 @@ #include #include #include +#define _GNU_SOURCE +#include #define SECOND_INTERVAL 1000 @@ -20,6 +22,7 @@ struct private { struct timeval tv_now; gchar *ts; gchar *msg; + gfloat s; }; static gboolean time_handler (GtkWidget* w) @@ -83,7 +86,7 @@ static void paint (GtkWidget *widget, GdkEventExpose *eev, struct private *p) { CAIRO_FONT_WEIGHT_BOLD); cairo_save (cr); - cairo_set_font_size (cr, 10); + cairo_set_font_size (cr, 10*p->s); cairo_move_to (cr, 10, 10); cairo_set_source_rgba (cr, 0.0f, 0.0f, 0.0f, 1.0f); cairo_show_text (cr, p->ts); @@ -103,18 +106,49 @@ static void install_colormap (GtkWidget *w) { } +inline int parse_time (char *time, char *fmt, struct tm *tm) { + char *s_res = NULL; + if (time) { + if ((s_res = strptime(time, fmt, tm)) == NULL) { + printf("WARNING: couldn't parse time '%s' with format '%s'.\n", + time, fmt); + return -1; + } if (*s_res != '\0') { + printf("WARNING: processing stoped at '%s'\n", s_res); + return time - s_res; + } + return 0; + } + return -2; +} + gint usage (char *name) { return printf ("usage: %s [TIME[+FMT]].\n", name); } +#define DFMT "%Y-%m-%d" +#define SFMT "%H:%M" + gint main (gint argc, gchar **argv) { - int c; + int c, option_index = 0; + static struct option long_options[] ={ + {"date", 1, 0, 'd'}, + {"time", 1, 0, 't'}, + {"format", 1, 0, 'f'}, + {"size", 1, 0, 's'}, + {"help", 0, 0, 'h'}, + {0, 0, 0, 0} + }; char *s_time = NULL; - char *s_res = NULL; - char *fmt = "%Y-%m-%d"; + char *s_full = NULL; + char *s_date = NULL; + + char *s_dfmt = DFMT; + char *s_tfmt = SFMT; + char *s_fmt = DFMT "-" SFMT; /* HACK HERE */ - GtkWidget *window; + GtkWidget *window; struct private *p = malloc(sizeof(struct private)); @@ -125,35 +159,48 @@ gint main (gint argc, gchar **argv) { .tm_mon = 1, .tm_year = 107, }; + + while ((c = getopt_long (argc, argv, "d:t:f:s:h", + long_options, &option_index)) != -1) { + switch (c) { + case 'd': + s_date = optarg; + break; + case 't': + s_time = optarg; + break; + case 'f': + s_fmt = optarg; + break; + case 's': + p->s = optarg; + case 'h': + case '?': + return usage(argv[0]); + default: + printf ("given %d (%c)\n", c, c); + } + } - for (c = 1; c < argc; c++) { - switch (*argv[c]) { + for (;optind < argc; optind++) { + switch (*argv[optind]) { case '+': - fmt = argv[c] + 1; - break; - case '-': - switch (*(argv[c] + 1)) { - case 'h': - return usage(argv[0]); - case '-': - break; - } + s_fmt = argv[optind] + 1; break; default: if (s_time != NULL) printf ("WARNING: overriding previously given time \n" "'%s'\n" - "with '%s'.\n", s_time, argv[c]); - s_time = argv[c]; + "with '%s'.\n", s_time, argv[optind]); + s_full = argv[optind]; } } - - if (s_time) { - s_res = strptime(s_time, fmt, &von_time); - if (*s_res != '\0') - printf("WARNING: processing stoped at '%s'\n", s_res); - } + + parse_time(s_date, s_dfmt, &von_time); + parse_time(s_time, s_tfmt, &von_time); + parse_time(s_full, s_fmt, &von_time); + if (time(NULL) > mktime(&von_time)) printf("WARNING: given a date in the past !\n"); @@ -177,8 +224,8 @@ gint main (gint argc, gchar **argv) { gtk_widget_set_app_paintable (window, TRUE); gtk_window_set_default_size (GTK_WINDOW (window), - DEFAULT_WIDTH, - DEFAULT_HEIGHT); + DEFAULT_WIDTH*p->s, + DEFAULT_HEIGHT*p->s); install_colormap(window); -- cgit v1.2.3