diff options
author | Nicholas Marriott <nicholas.marriott@gmail.com> | 2009-01-11 00:48:42 +0000 |
---|---|---|
committer | Nicholas Marriott <nicholas.marriott@gmail.com> | 2009-01-11 00:48:42 +0000 |
commit | e3feb067a503b53da253e4ed877d212d6d73842c (patch) | |
tree | f0ebedf15d81253ae1d0437b6dc9f47cbccdc291 /window-clock.c | |
parent | ee0a7cda880f01771470b2902839c5d6396057c3 (diff) | |
download | rtmux-e3feb067a503b53da253e4ed877d212d6d73842c.tar.gz rtmux-e3feb067a503b53da253e4ed877d212d6d73842c.tar.bz2 rtmux-e3feb067a503b53da253e4ed877d212d6d73842c.zip |
Server locking. set-password and lock-server commands, plus automatic locking.
Diffstat (limited to 'window-clock.c')
-rw-r--r-- | window-clock.c | 152 |
1 files changed, 19 insertions, 133 deletions
diff --git a/window-clock.c b/window-clock.c index 9e075000..0462142d 100644 --- a/window-clock.c +++ b/window-clock.c @@ -1,4 +1,4 @@ -/* $Id: window-clock.c,v 1.2 2009-01-10 19:40:01 nicm Exp $ */ +/* $Id: window-clock.c,v 1.3 2009-01-11 00:48:42 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net> @@ -41,6 +41,7 @@ const struct window_mode window_clock_mode = { struct window_clock_mode_data { struct screen screen; + time_t tim; }; struct screen * @@ -50,6 +51,7 @@ window_clock_init(struct window *w) struct screen *s; w->modedata = data = xmalloc(sizeof *data); + data->tim = time(NULL); s = &data->screen; screen_init(s, screen_size_x(&w->base), screen_size_y(&w->base), 0); @@ -88,6 +90,17 @@ window_clock_key(struct window *w, unused struct client *c, unused int key) void window_clock_timer(struct window *w) { + struct window_clock_mode_data *data = w->modedata; + struct tm *now, *then; + time_t t; + + t = time(NULL); + now = gmtime(&t); + then = gmtime(&data->tim); + if (now->tm_min == then->tm_min) + return; + data->tim = t; + window_clock_draw_screen(w); server_redraw_window(w); } @@ -96,141 +109,14 @@ void window_clock_draw_screen(struct window *w) { struct window_clock_mode_data *data = w->modedata; - struct screen *s = &data->screen; struct screen_write_ctx ctx; - struct grid_cell gc; - char tim[64], *ptr; - time_t t; - u_int colour, i, j, x, y, idx; - char table[14][5][5] = { - { { 1,1,1,1,1 }, /* 0 */ - { 1,0,0,0,1 }, - { 1,0,0,0,1 }, - { 1,0,0,0,1 }, - { 1,1,1,1,1 } }, - { { 0,0,0,0,1 }, /* 1 */ - { 0,0,0,0,1 }, - { 0,0,0,0,1 }, - { 0,0,0,0,1 }, - { 0,0,0,0,1 } }, - { { 1,1,1,1,1 }, /* 2 */ - { 0,0,0,0,1 }, - { 1,1,1,1,1 }, - { 1,0,0,0,0 }, - { 1,1,1,1,1 } }, - { { 1,1,1,1,1 }, /* 3 */ - { 0,0,0,0,1 }, - { 1,1,1,1,1 }, - { 0,0,0,0,1 }, - { 1,1,1,1,1 } }, - { { 1,0,0,0,1 }, /* 4 */ - { 1,0,0,0,1 }, - { 1,1,1,1,1 }, - { 0,0,0,0,1 }, - { 0,0,0,0,1 } }, - { { 1,1,1,1,1 }, /* 5 */ - { 1,0,0,0,0 }, - { 1,1,1,1,1 }, - { 0,0,0,0,1 }, - { 1,1,1,1,1 } }, - { { 1,1,1,1,1 }, /* 6 */ - { 1,0,0,0,0 }, - { 1,1,1,1,1 }, - { 1,0,0,0,1 }, - { 1,1,1,1,1 } }, - { { 1,1,1,1,1 }, /* 7 */ - { 0,0,0,0,1 }, - { 0,0,0,0,1 }, - { 0,0,0,0,1 }, - { 0,0,0,0,1 } }, - { { 1,1,1,1,1 }, /* 8 */ - { 1,0,0,0,1 }, - { 1,1,1,1,1 }, - { 1,0,0,0,1 }, - { 1,1,1,1,1 } }, - { { 1,1,1,1,1 }, /* 9 */ - { 1,0,0,0,1 }, - { 1,1,1,1,1 }, - { 0,0,0,0,1 }, - { 1,1,1,1,1 } }, - { { 0,0,0,0,0 }, /* : */ - { 0,0,1,0,0 }, - { 0,0,0,0,0 }, - { 0,0,1,0,0 }, - { 0,0,0,0,0 } }, - { { 1,1,1,1,1 }, /* A */ - { 1,0,0,0,1 }, - { 1,1,1,1,1 }, - { 1,0,0,0,1 }, - { 1,0,0,0,1 } }, - { { 1,1,1,1,1 }, /* P */ - { 1,0,0,0,1 }, - { 1,1,1,1,1 }, - { 1,0,0,0,0 }, - { 1,0,0,0,0 } }, - { { 1,0,0,0,1 }, /* M */ - { 1,1,0,1,1 }, - { 1,0,1,0,1 }, - { 1,0,0,0,1 }, - { 1,0,0,0,1 } }, - }; + u_int colour; + int style; colour = options_get_number(&w->options, "clock-mode-colour"); + style = options_get_number(&w->options, "clock-mode-style"); - t = time(NULL); - if (options_get_number(&w->options, "clock-mode-style") == 0) - strftime(tim, sizeof tim, "%l:%M %p", localtime(&t)); - else - strftime(tim, sizeof tim, "%H:%M", localtime(&t)); - - screen_write_start(&ctx, s, NULL, NULL); - screen_write_clearscreen(&ctx); - memcpy(&gc, &grid_default_cell, sizeof gc); - - if (screen_size_x(s) < 6 * strlen(tim) || screen_size_y(s) < 6) { - if (screen_size_x(s) >= strlen(tim) && screen_size_y(s) != 0) { - x = (screen_size_x(s) / 2) - (strlen(tim) / 2); - y = screen_size_y(s) / 2; - screen_write_cursormove(&ctx, x, y); - - gc.fg = colour; - screen_write_puts(&ctx, &gc, "%s", tim); - } - screen_write_stop(&ctx); - return; - } - - x = (screen_size_x(s) / 2) - 3 * strlen(tim); - y = (screen_size_y(s) / 2) - 3; - - for (ptr = tim; *ptr != '\0'; ptr++) { - if (*ptr >= '0' && *ptr <= '9') - idx = *ptr - '0'; - else if (*ptr == ':') - idx = 10; - else if (*ptr == 'A') - idx = 11; - else if (*ptr == 'P') - idx = 12; - else if (*ptr == 'M') - idx = 13; - else { - x += 6; - continue; - } - - for (j = 0; j < 5; j++) { - screen_write_cursormove(&ctx, x, y + j); - for (i = 0; i < 5; i++) { - if (table[idx][j][i]) - gc.bg = colour; - else - gc.bg = 0; - screen_write_putc(&ctx, &gc, ' '); - } - } - x += 6; - } - + screen_write_start(&ctx, &data->screen, NULL, NULL); + clock_draw(&ctx, colour, style); screen_write_stop(&ctx); } |