Subversion Repositories Kolibri OS

Rev

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

  1. #include <sys/ksys.h>
  2.  
  3. #define B_SZ  10
  4.  
  5. static char* title = "BinClock";
  6.  
  7. static void draw_small_box(int x, int y, int is_on)
  8. {
  9.    _ksys_draw_bar(x, y, B_SZ, B_SZ, is_on ? 0xFF0000 : 0x103000);
  10. }
  11.  
  12. static void draw_box_group(int x, int y, int num)
  13. {
  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);
  24. }
  25.  
  26. static void draw_bcd_num(int x,int y,int num)
  27. {
  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);
  33. }
  34.  
  35. static void draw_hms(int x,int y)
  36. {
  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);
  48. }
  49.  
  50. static void draw_h(void)
  51. {
  52.     draw_hms(22, 28);
  53. }
  54.  
  55. static void paint(void)
  56. {
  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();
  62. }
  63.  
  64. int main(void)
  65. {
  66.     int i;
  67.     paint();
  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.     }
  84. }
  85.  
  86.