#define USE_JIFFIES FALSE // Set FALSE for less smooth but more accurate time. #define CLOCK_CENTER 70 #define CLOCK_RADIUS (CLOCK_CENTER-2) #define SECOND_HAND_LEN CLOCK_RADIUS #define MINUTE_HAND_LEN 8 * CLOCK_RADIUS / 10 #define HOUR_HAND_LEN CLOCK_RADIUS / 2 #define CLOCK_BASE_COLOR BLACK #define SECOND_HAND_COLOR DKGRAY #define MINUTE_HAND_COLOR DKGRAY #define HOUR_HAND_COLOR BLACK // set this either 24 or 12 #define HOUR_MAX 12 #define . 2*pi //EST NY -> India: 9.5 //EST NY -> China: 12 CDate clock_time_offset = 0 * 60 * 60 * CDATE_FREQ; CDateStruct *ds = CAlloc(sizeof(CDateStruct)); CDate d = Now + clock_time_offset; Date2Struct(ds, d); I64 init_jiff = counts.jiffies; I64 cur_jiff; F64 sec, min, hr; U0 ClockDrawIt(CTask *, CDC *dc) { if (USE_JIFFIES) { cur_jiff = counts.jiffies - init_jiff; sec = ds->sec + cur_jiff/1000.0; min = ds->min + cur_jiff/1000.0/60; hr = (ds->hour % HOUR_MAX) + cur_jiff/1000.0/60/60; } else { d = Now + clock_time_offset; Date2Struct(ds, d); sec = ds->sec; min = ds->min; hr = ds->hour % HOUR_MAX; } /* public Bool GrLine3(CDC *dc=gr.dc,I64 x1,I64 y1,I64 z1, I64 x2, I64 y2, I64 z2, I64 step=1,I64 start=0) */ //draw second hand dc->thick = 1; dc->color = SECOND_HAND_COLOR; GrLine3(dc, CLOCK_CENTER, CLOCK_CENTER, GR_Z_ALL, (CLOCK_CENTER + SECOND_HAND_LEN * Cos(3*./4 + sec * ./60)), (CLOCK_CENTER + SECOND_HAND_LEN * Sin(3*./4 + sec * ./60)), GR_Z_ALL); // draw minute hand dc->thick = 2; dc->color = MINUTE_HAND_COLOR; GrLine3(dc, CLOCK_CENTER, CLOCK_CENTER, GR_Z_ALL, (CLOCK_CENTER + MINUTE_HAND_LEN * Cos(3*./4 + min * ./60)), (CLOCK_CENTER + MINUTE_HAND_LEN * Sin(3*./4 + min * ./60)), GR_Z_ALL); // draw hour hand dc->thick = 3; dc->color = HOUR_HAND_COLOR; GrLine3(dc, CLOCK_CENTER, CLOCK_CENTER, GR_Z_ALL, (CLOCK_CENTER + HOUR_HAND_LEN * Cos(3*./4 + hr * ./HOUR_MAX)), (CLOCK_CENTER + HOUR_HAND_LEN * Sin(3*./4 + hr * ./HOUR_MAX)), GR_Z_ALL); dc->color = CLOCK_BASE_COLOR; //GrPrint(dc, 0, 0, "%d", ds->sec); //draw clock base GrCircle(dc, CLOCK_CENTER, CLOCK_CENTER, CLOCK_RADIUS); } U0 ClockDemo() { SettingsPush; DocClear; DocCursor; Fs->draw_it = &ClockDrawIt; StrCopy(Fs->task_title, "Time"); while (CharGet(,FALSE) != CH_SHIFT_ESC) {}; SettingsPop; }; ClockDemo;