summaryrefslogtreecommitdiffstats
path: root/window-clock.c
diff options
context:
space:
mode:
authornicm <nicm>2014-03-31 21:34:08 +0000
committernicm <nicm>2014-03-31 21:34:08 +0000
commit175f215187b1c978ca4cc4988a78d067122e2b0c (patch)
tree991dff5cd936e3d61ec8d00a59e828b6d72deb20 /window-clock.c
parent18cb13521840f678290b0a78d4e058c92795fabb (diff)
Having three *clock* files is ridiculous, remove clock.c.
Diffstat (limited to 'window-clock.c')
-rw-r--r--window-clock.c143
1 files changed, 141 insertions, 2 deletions
diff --git a/window-clock.c b/window-clock.c
index 8ec1671e..ede8df5b 100644
--- a/window-clock.c
+++ b/window-clock.c
@@ -46,6 +46,79 @@ struct window_clock_mode_data {
time_t tim;
};
+const char window_clock_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 } },
+};
+
struct screen *
window_clock_init(struct window_pane *wp)
{
@@ -114,11 +187,77 @@ window_clock_draw_screen(struct window_pane *wp)
struct window_clock_mode_data *data = wp->modedata;
struct screen_write_ctx ctx;
int colour, style;
+ struct screen *s = &data->screen;
+ struct grid_cell gc;
+ char tim[64], *ptr;
+ time_t t;
+ struct tm *tm;
+ u_int i, j, x, y, idx;
colour = options_get_number(&wp->window->options, "clock-mode-colour");
style = options_get_number(&wp->window->options, "clock-mode-style");
- screen_write_start(&ctx, NULL, &data->screen);
- clock_draw(&ctx, colour, style);
+ screen_write_start(&ctx, NULL, s);
+
+ t = time(NULL);
+ tm = localtime(&t);
+ if (style == 0) {
+ strftime(tim, sizeof tim, "%l:%M ", localtime(&t));
+ if (tm->tm_hour >= 12)
+ strlcat(tim, "PM", sizeof tim);
+ else
+ strlcat(tim, "AM", sizeof tim);
+ } else
+ strftime(tim, sizeof tim, "%H:%M", tm);
+
+ screen_write_clearscreen(&ctx);
+
+ 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);
+
+ memcpy(&gc, &grid_default_cell, sizeof gc);
+ colour_set_fg(&gc, 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;
+
+ memcpy(&gc, &grid_default_cell, sizeof gc);
+ colour_set_bg(&gc, colour);
+ 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++) {
+ for (i = 0; i < 5; i++) {
+ screen_write_cursormove(&ctx, x + i, y + j);
+ if (window_clock_table[idx][j][i])
+ screen_write_putc(&ctx, &gc, ' ');
+ }
+ }
+ x += 6;
+ }
+
screen_write_stop(&ctx);
}