/* This file is in the public domain. */ #include #include #include #include #include extern const char *__progname; static void dispdig(int dig, int x, int y) { static const char ulc[10] = "+ --|++-++"; static const char top[10] = "- -- -----"; static const char urc[10] = "+|++|--+++"; static const char ulv[10] = "| ||| ||"; static const char urv[10] = "||||| |||"; static const char lmd[10] = "| + +++ ++"; static const char mid[10] = " ----- --"; static const char rmd[10] = "||+++++|++"; static const char llv[10] = "| | | | "; static const char lrv[10] = "|| |||||||"; static const char llc[10] = "+ +- -+ +-"; static const char bot[10] = "- -- -- --"; static const char lrc[10] = "+|-+|++|++"; int i; move(y,x); addch(ulc[dig]); for (i=0;i<7;i++) addch(top[dig]); addch(urc[dig]); move(y+4,x); addch(lmd[dig]); for (i=0;i<7;i++) addch(mid[dig]); addch(rmd[dig]); move(y+8,x); addch(llc[dig]); for (i=0;i<7;i++) addch(bot[dig]); addch(lrc[dig]); for (i=0;i<3;i++) { move(y+i+1,x); addch(ulv[dig]); move(y+i+1,x+8); addch(urv[dig]); move(y+i+5,x); addch(llv[dig]); move(y+i+5,x+8); addch(lrv[dig]); } } static void dispcolon(int x, int y) { move(y+2,x); addch('O'); move(y+6,x); addch('O'); } int main(void); int main(void) { int ox; int oy; int i; initscr(); if ((LINES < 9) || (COLS < 67)) { endwin(); fprintf(stderr,"%s: screen too small (must be at least 67x9)\n",__progname); exit(1); } ox = (COLS - 67) / 2; oy = (LINES - 9) / 2; clear(); while (1) { struct timeval now; time_t nowtt; struct tm *nowtm; struct timeval interval; gettimeofday(&now,0); nowtt = now.tv_sec; nowtm = localtime(&nowtt); for (i=0;i<9;i++) { move(0,oy+i); clrtoeol(); } dispdig(nowtm->tm_hour/10,ox,oy); dispdig(nowtm->tm_hour%10,ox+11,oy); dispcolon(ox+21,oy); dispdig(nowtm->tm_min/10,ox+24,oy); dispdig(nowtm->tm_min%10,ox+35,oy); dispcolon(ox+45,oy); dispdig(nowtm->tm_sec/10,ox+48,oy); dispdig(nowtm->tm_sec%10,ox+59,oy); move(LINES-1,COLS-1); refresh(); if (now.tv_usec) { interval.tv_sec = 0; interval.tv_usec = 1000000 - now.tv_usec; } else { interval.tv_sec = 1; interval.tv_usec = 0; } select(0,0,0,0,&interval); } }