From 76473dfc9a158cfb758489e344353eaaab2b844b Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Thu, 9 Jul 2009 15:33:20 +0000 Subject: add resize & timer --- aclock.c | 71 ++++++++++++++++++++++++++++++++++++++++------------------------ 1 file changed, 44 insertions(+), 27 deletions(-) diff --git a/aclock.c b/aclock.c index 6cb7805..d7db4ca 100644 --- a/aclock.c +++ b/aclock.c @@ -1,19 +1,48 @@ -/* $Id$ */ /* * aclock - ascii clock for UNIX Console * * Copyright (c) 2002 Antoni Sawicki * Version 1.8 (unix-curses); Dublin, June 2002 * - * Copmpilation: cc aclock-unix-curses.c -o aclock -lcurses -lm + * Copmpilation: cc aclock.c -o aclock -lcurses -lm * */ -#include +#include #include #include +#include +#include #include +void +catch(int sig) +{ + struct winsize ws; + + switch (sig) { + case SIGWINCH: + if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws) != -1) + resizeterm(ws.ws_row, ws.ws_col); + clear(); + break; + default: + break; + } +} + +void +settimer(int sec) +{ + struct itimerval itv; + + itv.it_value.tv_sec = sec; + itv.it_value.tv_usec = 0; + itv.it_interval = itv.it_value; + + setitimer(ITIMER_REAL, &itv, NULL); +} + void draw_circle(int hand_max, int sYcen, int sXcen, int FontHW) { @@ -23,25 +52,7 @@ draw_circle(int hand_max, int sYcen, int sXcen, int FontHW) for (r = 0; r < 60; r++) { x = cos(r * M_PI / 180 * 6) * hand_max * FontHW + sXcen; y = sin(r * M_PI / 180 * 6) * hand_max + sYcen; - switch (r) { - case 0: - case 5: - case 10: - case 15: - case 20: - case 25: - case 30: - case 35: - case 40: - case 45: - case 50: - case 55: - c = 'o'; - break; - default: - c = '.'; - break; - } + c = ".o"[!(r%5)]; mvaddch(y, x, c); } } @@ -70,9 +81,13 @@ main(void) int sXmax, sYmax, smax, hand_max, sXcen, sYcen; time_t t; struct tm *ltime; + + signal(SIGWINCH, catch); + signal(SIGALRM, catch); + settimer(1); initscr(); - while (1) { + for (;;) { time(&t); ltime = localtime(&t); sXmax = COLS; @@ -91,15 +106,17 @@ main(void) erase(); draw_circle(hand_max, sYcen, sXcen, FontHW); - draw_hand((ltime->tm_hour * 5) + (ltime->tm_min / 10), 2 * hand_max / 3, 'h', sXcen, sYcen, FontHW); - draw_hand(ltime->tm_min, hand_max - 2, 'm', sXcen, sYcen, FontHW); + draw_hand((ltime->tm_hour * 5) + (ltime->tm_min / 10), + 2 * hand_max / 3, '#', sXcen, sYcen, FontHW); + draw_hand(ltime->tm_min, hand_max - 2, '*', sXcen, sYcen, FontHW); draw_hand(ltime->tm_sec, hand_max - 1, '.', sXcen, sYcen, FontHW); mvaddstr(sYmax / 4, sXcen - 5, ".:ACLOCK:."); - mvprintw(4 * sYmax / 5, sXcen - 5, "[%02d:%02d:%02d]", ltime->tm_hour, ltime->tm_min, ltime->tm_sec); + mvprintw(4 * sYmax / 5, sXcen - 5, "[%02d:%02d:%02d]", + ltime->tm_hour, ltime->tm_min, ltime->tm_sec); refresh(); - sleep(1); + pause(); } endwin(); -- cgit v1.2.3