X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=test%2Ftclock.c;h=96e1d19f6669e21b131be0984078b6f0cfbb99f1;hp=0c79568411be3c99dbd99e72c265457235996b54;hb=21c8ffa0edf2e389f3f674f0c08009002c6f357d;hpb=0eb88fc5281804773e2a0c7a488a4452463535ce diff --git a/test/tclock.c b/test/tclock.c index 0c795684..96e1d19f 100644 --- a/test/tclock.c +++ b/test/tclock.c @@ -1,7 +1,21 @@ -#include "test.priv.h" +/* $Id: tclock.c,v 1.34 2014/08/02 16:37:03 tom Exp $ */ + +#include + +#if HAVE_MATH_H #include -#include + +#if TIME_WITH_SYS_TIME +# include +# include +#else +# if HAVE_SYS_TIME_H +# include +# else +# include +# endif +#endif /* tclock - analog/digital clock for curses. @@ -39,14 +53,14 @@ /* Plot a point */ static void -plot(int x, int y, char col) +plot(int x, int y, int col) { - mvaddch(y, x, (chtype) col); + MvAddCh(y, x, (chtype) col); } /* Draw a diagonal(arbitrary) line using Bresenham's alogrithm. */ static void -dline(int pair, int from_x, int from_y, int x2, int y2, char ch) +dline(int pair, int from_x, int from_y, int x2, int y2, int ch) { int dx, dy; int ax, ay; @@ -55,7 +69,7 @@ dline(int pair, int from_x, int from_y, int x2, int y2, char ch) int d; if (has_colors()) - attrset(COLOR_PAIR(pair)); + (void) attrset(AttrArg(COLOR_PAIR(pair), 0)); dx = x2 - from_x; dy = y2 - from_y; @@ -103,22 +117,28 @@ dline(int pair, int from_x, int from_y, int x2, int y2, char ch) } int -main( - int argc GCC_UNUSED, - char *argv[]GCC_UNUSED) +main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { int i, cx, cy; - double mradius, hradius, mangle, hangle; + double cr, mradius, hradius, mangle, hangle; double sangle, sradius, hours; int hdx, hdy; int mdx, mdy; int sdx, sdy; int ch; int lastbeep = -1; + bool odd = FALSE; time_t tim; struct tm *t; char szChar[10]; - int my_bg = COLOR_BLACK; + char *text; + short my_bg = COLOR_BLACK; +#if HAVE_GETTIMEOFDAY + struct timeval current; +#endif + double fraction = 0.0; + + setlocale(LC_ALL, ""); initscr(); noecho(); @@ -128,13 +148,14 @@ main( if (has_colors()) { start_color(); -#ifdef NCURSES_VERSION +#if HAVE_USE_DEFAULT_COLORS if (use_default_colors() == OK) my_bg = -1; #endif init_pair(1, COLOR_RED, my_bg); init_pair(2, COLOR_MAGENTA, my_bg); init_pair(3, COLOR_GREEN, my_bg); + init_pair(4, COLOR_WHITE, COLOR_BLUE); } #ifdef KEY_RESIZE keypad(stdscr, TRUE); @@ -142,26 +163,28 @@ main( #endif cx = (COLS - 1) / 2; /* 39 */ cy = LINES / 2; /* 12 */ - ch = (cx > cy) ? cy : cx; /* usually cy */ - mradius = (3 * cy) / 4; /* 9 */ - hradius = cy / 2; /* 6 */ - sradius = (2 * cy) / 3; /* 8 */ + if (cx / ASPECT < cy) + cr = cx / ASPECT; + else + cr = cy; + sradius = (5 * cr) / 6; /* 10 */ + mradius = (3 * cr) / 4; /* 9 */ + hradius = cr / 2; /* 6 */ for (i = 0; i < 12; i++) { sangle = (i + 1) * (2.0 * PI) / 12.0; - sradius = (5 * cy) / 6; /* 10 */ sdx = A2X(sangle, sradius); sdy = A2Y(sangle, sradius); sprintf(szChar, "%d", i + 1); - mvaddstr(cy - sdy, cx + sdx, szChar); + MvAddStr(cy - sdy, cx + sdx, szChar); } - mvaddstr(0, 0, "ASCII Clock by Howard Jones (ha.jones@ic.ac.uk),1994"); + MvAddStr(0, 0, "ASCII Clock by Howard Jones (ha.jones@ic.ac.uk),1994"); - sradius = 8; + sradius = (4 * sradius) / 5; for (;;) { - napms(1000); + napms(100); tim = time(0); t = localtime(&tim); @@ -170,7 +193,7 @@ main( if (hours > 12.0) hours -= 12.0; - mangle = ((t->tm_min) * (2 * PI) / 60.0); + mangle = ((t->tm_min + (t->tm_sec / 60.0)) * (2 * PI) / 60.0); mdx = A2X(mangle, mradius); mdy = A2Y(mangle, mradius); @@ -178,49 +201,68 @@ main( hdx = A2X(hangle, hradius); hdy = A2Y(hangle, hradius); - sangle = ((t->tm_sec) * (2.0 * PI) / 60.0); +#if HAVE_GETTIMEOFDAY + gettimeofday(¤t, 0); + fraction = ((double) current.tv_usec / 1.0e6); +#endif + sangle = ((t->tm_sec + fraction) * (2.0 * PI) / 60.0); sdx = A2X(sangle, sradius); sdy = A2Y(sangle, sradius); dline(3, cx, cy, cx + mdx, cy - mdy, '#'); - attrset(A_REVERSE); + (void) attrset(A_REVERSE); dline(2, cx, cy, cx + hdx, cy - hdy, '.'); attroff(A_REVERSE); if (has_colors()) - attrset(COLOR_PAIR(1)); + (void) attrset(AttrArg(COLOR_PAIR(1), 0)); - plot(cx + sdx, cy - sdy, 'O'); + dline(1, cx, cy, cx + sdx, cy - sdy, 'O'); if (has_colors()) - attrset(COLOR_PAIR(0)); + (void) attrset(AttrArg(COLOR_PAIR(0), 0)); - mvaddstr(LINES - 2, 0, ctime(&tim)); + text = ctime(&tim); + MvPrintw(2, 0, "%.*s", (int) (strlen(text) - 1), text); refresh(); if ((t->tm_sec % 5) == 0 - && t->tm_sec != lastbeep) { + && t->tm_sec != lastbeep) { lastbeep = t->tm_sec; + if (has_colors()) { + odd = !odd; + bkgd((chtype) (odd ? COLOR_PAIR(4) : COLOR_PAIR(0))); + } beep(); } if ((ch = getch()) != ERR) { #ifdef KEY_RESIZE if (ch == KEY_RESIZE) { + flash(); erase(); + wrefresh(curscr); goto restart; } #endif break; } - plot(cx + sdx, cy - sdy, ' '); dline(0, cx, cy, cx + hdx, cy - hdy, ' '); dline(0, cx, cy, cx + mdx, cy - mdy, ' '); + dline(0, cx, cy, cx + sdx, cy - sdy, ' '); } curs_set(1); endwin(); - return 0; + ExitProgram(EXIT_SUCCESS); +} +#else +int +main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) +{ + printf("This program requires the development header math.h\n"); + ExitProgram(EXIT_FAILURE); } +#endif