summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--von-wait.c99
1 files 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 <gdk/gdkkeysyms.h>
#include <gtk/gtk.h>
#include <cairo.h>
+#define _GNU_SOURCE
+#include <getopt.h>
#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);