summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2009-07-09 15:33:20 +0000
committerDimitri Sokolyuk <demon@dim13.org>2009-07-09 15:33:20 +0000
commit76473dfc9a158cfb758489e344353eaaab2b844b (patch)
treea836461fb9aae96fa8b8e10e8d0959cd821ccb6b
parent9366cc90b9547fa1e7d803576c23d9cbc5d74d38 (diff)
add resize & timer
-rw-r--r--aclock.c71
1 files changed, 44 insertions, 27 deletions
diff --git a/aclock.c b/aclock.c
index 6cb7805..d7db4ca 100644
--- a/aclock.c
+++ b/aclock.c
@@ -1,20 +1,49 @@
-/* $Id$ */
/*
* aclock - ascii clock for UNIX Console
*
* Copyright (c) 2002 Antoni Sawicki <tenox@tenox.tc>
* 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 <unistd.h>
+#include <sys/ioctl.h>
#include <curses.h>
#include <math.h>
+#include <unistd.h>
+#include <signal.h>
#include <time.h>
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)
{
int x, y, r;
@@ -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();