2 * aclock - ascii clock for UNIX Console - termcap port
4 * Copyright (c) 1994-2013 Antoni Sawicki <as@tenoware.com>
5 * Version 2.3 (unix-termcap); Mountain View, July 2013
7 * Compilation: cc aclock-unix-termcap.c -o aclock -ltermcap -lm
8 * Built on: BeOS, Zeta, SkyOS, Haiku, Amiga-GG, UnixWare, Risc/OS
20 #define M_PI 3.14159265358979323846
23 #define FontWH_Ratio 2
27 void my_putchar(int c) {
32 tputs(tgoto(cl, 0, 0), 1, (void*)my_putchar);
35 void draw_point(int x, int y, char c) {
36 tputs(tgoto(cm, x, y), 1, (void*)my_putchar);
40 void draw_text(int x, int y, char *string) {
41 tputs(tgoto(cm, x, y), 1, (void*)my_putchar);
46 void draw_circle(int hand_max, int sYcen, int sXcen){
51 x=cos(r*M_PI/180*6)*hand_max*FontWH_Ratio+sXcen;
52 y=sin(r*M_PI/180*6)*hand_max+sYcen;
76 void draw_hand(int minute, int hlenght, char c, int sXcen, int sYcen){
78 float r=(minute-15)*(M_PI/180)*6;
80 for(n=1; n<hlenght; n++){
81 x=cos(r)*n*FontWH_Ratio+sXcen;
88 int main(int argc, char **argv){
89 char INFO[]="Copyright (c) 1994-2013 Antoni Sawicki <as@tenoware.com>\n"
90 "Version 2.3 (unix-termcap); Mountain View, July 2013\n";
91 char digital_time[32];
92 int sXmax, sYmax, sXmaxo, sYmaxo, smax, hand_max, sXcen, sYcen;
96 char term_buffer[2048];
102 term_env=getenv("TERM");
105 fprintf(stderr, "no terminal type defined\n");
109 if(!tgetent(NULL, term_env)) {
110 fprintf(stderr, "unknown terminal type\n");
114 cm=(char*)tgetstr("cm", NULL);
115 cl=(char*)tgetstr("cl", NULL);
117 sXmaxo=sYmaxo=sXmax=sYmax=0;
123 ioctl(1, TIOCGWINSZ, &ws);
128 if((sXmax!=sXmaxo) || (sYmax!=sYmaxo)) {
134 hand_max = (smax/2)-1;
140 draw_circle(hand_max, sYcen, sXcen);
146 draw_hand((ltime->tm_hour*5)+(ltime->tm_min/10), 2*hand_max/3, 'h', sXcen, sYcen);
147 draw_hand(ltime->tm_min, hand_max-2, 'm', sXcen, sYcen);
148 draw_hand(ltime->tm_sec, hand_max-1, '.', sXcen, sYcen);
150 draw_text(sXcen-5, sYcen-(3*hand_max/5), ".:ACLOCK:.");
151 sprintf(digital_time, "[%02d:%02d:%02d]", ltime->tm_hour, ltime->tm_min, ltime->tm_sec);
152 draw_text(sXcen-5, sYcen+(3*hand_max/5), digital_time);
157 draw_hand((ltime->tm_hour*5)+(ltime->tm_min/10), 2*hand_max/3, ' ', sXcen, sYcen);
158 draw_hand(ltime->tm_min, hand_max-2, ' ', sXcen, sYcen);
159 draw_hand(ltime->tm_sec, hand_max-1, ' ', sXcen, sYcen);