Subversion Repositories Kolibri OS

Rev

Rev 5132 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
9952 turbocat 1
#include 
4973 right-hear 2
 
9952 turbocat 3
#define B_SZ  10
4973 right-hear 4
 
9952 turbocat 5
static char* title = "BinClock";
4973 right-hear 6
 
9952 turbocat 7
static void draw_small_box(int x, int y, int is_on)
4973 right-hear 8
{
9952 turbocat 9
   _ksys_draw_bar(x, y, B_SZ, B_SZ, is_on ? 0xFF0000 : 0x103000);
4973 right-hear 10
}
11
 
9952 turbocat 12
static void draw_box_group(int x, int y, int num)
4973 right-hear 13
{
9952 turbocat 14
    int i, j;
15
    char buf[2];
16
    buf[0] = (num&(1+2+4+8))+'0';
17
    buf[1] = '\0';
18
    for(i = 0; i < 4; i++) {
19
        j = (B_SZ+2)*i;
20
        draw_small_box(x,y+((B_SZ+2)*i),num & (1<<(3-i)) ? 1 : 0);
21
    }
22
    _ksys_draw_bar(x, y+((B_SZ+2)*4),B_SZ,B_SZ, 0x800000);
23
    _ksys_draw_text(buf, x+2, y+((B_SZ+2)*4)+3, 1, 0xFFFFFF);
4973 right-hear 24
}
25
 
5098 clevermous 26
static void draw_bcd_num(int x,int y,int num)
4973 right-hear 27
{
9952 turbocat 28
    int v1, v2;
29
    v1 = (num>>4)&(1+2+4+8);
30
    v2 = num&(1+2+4+8);
31
    draw_box_group(x, y, v1);
32
    draw_box_group(x+B_SZ+2, y ,v2);
4973 right-hear 33
}
34
 
5098 clevermous 35
static void draw_hms(int x,int y)
4973 right-hear 36
{
9952 turbocat 37
    unsigned t;
38
    int h, m, s;
39
    __asm__ __volatile__("int $0x40" : "=a"(t) : "a"(3));
40
    s = (t & 0x00FF0000)>>16;
41
    m = (t & 0x0000FF00)>>8;
42
    h = (t & 0x000000FF);
43
    draw_bcd_num(x,y,h);
44
    x+=((B_SZ+2)<<1)+2;
45
    draw_bcd_num(x,y,m);
46
    x+=((B_SZ+2)<<1)+2;
47
    draw_bcd_num(x,y,s);
4973 right-hear 48
}
49
 
5098 clevermous 50
static void draw_h(void)
4973 right-hear 51
{
9952 turbocat 52
    draw_hms(22, 28);
4973 right-hear 53
}
54
 
5098 clevermous 55
static void paint(void)
4973 right-hear 56
{
9952 turbocat 57
    _ksys_start_draw();
58
    _ksys_create_window(100, 100, 40+((B_SZ+2)*6)+4,30+((B_SZ+2)*4)+16, title, 0x80, 0x13);
59
    _ksys_draw_bar(20, 26, ((B_SZ+2)*6)+4+2,4+((B_SZ+1)*4)+2, 0);
60
    draw_h();
61
    _ksys_end_draw();
4973 right-hear 62
}
63
 
5132 clevermous 64
int main(void)
4973 right-hear 65
{
9952 turbocat 66
    int i;
4973 right-hear 67
    paint();
9952 turbocat 68
 
69
    for(;;) {
70
        i = _ksys_wait_event_timeout(20);
71
        draw_h();
72
        switch(i) {
73
            case 1:
74
                paint();
75
                continue;
76
            case 2:
77
                _ksys_get_key();
78
                continue;
79
            case 3:
80
                if (_ksys_get_button() == 1) return 0;
81
                continue;
82
        }
83
    }
4973 right-hear 84
}
9952 turbocat 85