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
19 #include <sys/ioctl.h>
22 #define M_PI 3.14159265358979323846
25 #define FontWH_Ratio 2
29 void my_putchar(int c) {
34 tputs(tgoto(cl, 0, 0), 1, (void*)my_putchar);
37 void draw_point(int x, int y, char c) {
38 tputs(tgoto(cm, x, y), 1, (void*)my_putchar);
42 void draw_text(int x, int y, char *string) {
43 tputs(tgoto(cm, x, y), 1, (void*)my_putchar);
48 void draw_circle(int hand_max, int sYcen, int sXcen){
53 x=cos(r*M_PI/180*6)*hand_max*FontWH_Ratio+sXcen;
54 y=sin(r*M_PI/180*6)*hand_max+sYcen;
78 void draw_hand(int minute, int hlenght, char c, int sXcen, int sYcen){
80 float r=(minute-15)*(M_PI/180)*6;
82 for(n=1; n<hlenght; n++){
83 x=cos(r)*n*FontWH_Ratio+sXcen;
90 int main(int argc, char **argv){
91 char INFO[]="Copyright (c) 1994-2013 Antoni Sawicki <as@tenoware.com>\n"
92 "Version 2.3 (unix-termcap); Mountain View, July 2013\n";
93 char digital_time[32];
94 int sXmax, sYmax, sXmaxo, sYmaxo, smax, hand_max, sXcen, sYcen;
98 char term_buffer[2048];
104 term_env=getenv("TERM");
107 fprintf(stderr, "no terminal type defined\n");
111 if(!tgetent(NULL, term_env)) {
112 fprintf(stderr, "unknown terminal type\n");
116 cm=(char*)tgetstr("cm", NULL);
117 cl=(char*)tgetstr("cl", NULL);
119 sXmaxo=sYmaxo=sXmax=sYmax=0;
125 ioctl(1, TIOCGWINSZ, &ws);
130 if((sXmax!=sXmaxo) || (sYmax!=sYmaxo)) {
136 hand_max = (smax/2)-1;
142 draw_circle(hand_max, sYcen, sXcen);
148 draw_hand((ltime->tm_hour*5)+(ltime->tm_min/10), 2*hand_max/3, 'h', sXcen, sYcen);
149 draw_hand(ltime->tm_min, hand_max-2, 'm', sXcen, sYcen);
150 draw_hand(ltime->tm_sec, hand_max-1, '.', sXcen, sYcen);
152 draw_text(sXcen-5, sYcen-(3*hand_max/5), ".:ACLOCK:.");
153 sprintf(digital_time, "[%02d:%02d:%02d]", ltime->tm_hour, ltime->tm_min, ltime->tm_sec);
154 draw_text(sXcen-5, sYcen+(3*hand_max/5), digital_time);
159 draw_hand((ltime->tm_hour*5)+(ltime->tm_min/10), 2*hand_max/3, ' ', sXcen, sYcen);
160 draw_hand(ltime->tm_min, hand_max-2, ' ', sXcen, sYcen);
161 draw_hand(ltime->tm_sec, hand_max-1, ' ', sXcen, sYcen);