Index: apps/plugins/clock.c
===================================================================
RCS file: /cvsroot/rockbox/apps/plugins/clock.c,v
retrieving revision 1.29
diff -u -b -B -r1.29 clock.c
--- apps/plugins/clock.c	7 Apr 2006 00:17:34 -0000	1.29
+++ apps/plugins/clock.c	24 Jun 2006 08:30:16 -0000
@@ -104,8 +104,10 @@
 
 /* we need to "fake" the LCD width/height, because this plugin isn't
  * yet adapted to other screen sizes */
-#define LCDWIDTH  112
-#define LCDHEIGHT 64
+#define LCDWIDTH  LCD_WIDTH
+#define LCDHEIGHT LCD_HEIGHT
+#define CENTERX   LCD_WIDTH/2
+#define CENTERY   LCD_HEIGHT/2
 
 #if (CONFIG_KEYPAD == RECORDER_PAD)
 
@@ -224,32 +226,26 @@
 /***********************************************************
  * Used for hands to define lengths at a given time - ANALOG
  **********************************************************/
-unsigned char xminute[61];
-static const unsigned char yminute[] = {
-55,54,54,53,53,51,50,49,47,45,43,41,39,36,34,32,30,28,25,23,21,19,17,15,14,13,
-11,11,10,10, 9,10,10,11,11,13,14,15,17,19,21,23,25,28,30,32,34,36,39,41,43,45,
-47,49,50,51,53,53,54,54 };
-static const unsigned char yhour[] = {
-47,47,46,46,46,45,44,43,42,41,39,38,36,35,33,32,31,29,28,26,25,23,22,21,20,19,
-18,18,18,17,17,17,18,18,18,19,20,21,22,23,25,26,28,29,31,32,33,35,36,38,39,41,
-42,43,44,45,46,46,46,47 };
-unsigned char xhour[61];
+unsigned int xminute[61];
+unsigned int yminute[61];
+unsigned int yhour[61];
+unsigned int xhour[61];
 
 /**************************************************************
  * Used for hands to define lengths at a give time - FULLSCREEN
  *************************************************************/
-static const unsigned char xminute_full[] = {
+unsigned int xminute_full[61] = {
 56,58,61,65,69,74,79,84,91,100,110,110,110,110,110,110,110,110,110,110,110,100,
 91,84,79,74,69,65,61,58,56,54,51,47,43,38,33,28,21,12,1,1,1,1,1,1,1,1,1,1,1,12,
 21,28,33,38,43,47,51,54 };
-static const unsigned char yminute_full[] = {
+unsigned int yminute_full[61] = {
 62,62,62,62,62,62,62,62,62,62,62,53,45,40,36,32,28,24,19,11,1,1,1,1,1,1,1,1,1,1,
 1,1,1,1,1,1,1,1,1,1,1,11,19,24,28,32,36,40,45,53,62,62,62,62,62,62,62,62,62,62 };
-static const unsigned char xhour_full[] = {
+unsigned int xhour_full[61] = {
 56,58,60,63,66,69,73,78,84,91,100,100,100,100,100,100,100,100,100,100,100,91,84,
 78,73,69,66,63,60,58,56,54,52,49,46,43,39,34,28,21,12,12,12,12,12,12,12,12,12,
 12,12,21,28,34,39,43,46,49,52,54 };
-static const unsigned char yhour_full[] = {
+unsigned int yhour_full[61] = {
 52,52,52,52,52,52,52,52,52,52,52,46,41,37,34,32,30,27,23,18,12,12,12,12,12,12,
 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,18,23,27,30,32,34,37,41,46,52,52,
 52,52,52,52,52,52,52,52 };
@@ -877,9 +873,9 @@
         if(interface)
         {
             rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
-            rb->lcd_fillrect(0, 56, 112, 8);
+            rb->lcd_fillrect(0, LCD_HEIGHT-8, LCD_WIDTH, 8);
             rb->lcd_set_drawmode(DRMODE_SOLID);
-            center_text(56, "Saved Settings");
+            center_text(LCD_HEIGHT-8, "Saved Settings");
         }
     }
     else /* couldn't save for some reason */
@@ -887,9 +883,9 @@
         if(interface)
         {
             rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
-            rb->lcd_fillrect(0, 56, 112, 8);
+            rb->lcd_fillrect(0, LCD_HEIGHT-8, LCD_WIDTH, 8);
             rb->lcd_set_drawmode(DRMODE_SOLID);
-            center_text(56, "Save Failed!");
+            center_text(LCD_HEIGHT-8, "Save Failed!");
         }
     }
 
@@ -912,8 +908,8 @@
     int fd;
     fd = rb->open(default_filename, O_RDONLY);
 
-    center_text(48, "Clock " CLOCK_VERSION);
-    center_text(56, "Loading Settings");
+    center_text(LCD_HEIGHT-16, "Clock " CLOCK_VERSION);
+    center_text(LCD_HEIGHT-8, "Loading Settings");
 
     show_clock_logo(true, true);
     rb->lcd_update();
@@ -926,25 +922,25 @@
             rb->close(fd);
 
             rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
-            rb->lcd_fillrect(0, 56, 112, 8);
+            rb->lcd_fillrect(0, LCD_HEIGHT-8, LCD_WIDTH, 8);
             rb->lcd_set_drawmode(DRMODE_SOLID);
-            center_text(56, "Loaded Settings");
+            center_text(LCD_HEIGHT-8, "Loaded Settings");
         }
         else /* must be invalid, bail out */
         {
             rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
-            rb->lcd_fillrect(0, 56, 112, 8);
+            rb->lcd_fillrect(0, LCD_HEIGHT-8, LCD_WIDTH, 8);
             rb->lcd_set_drawmode(DRMODE_SOLID);
-            center_text(56, "Old Settings File");
+            center_text(LCD_HEIGHT-8, "Old Settings File");
             reset_settings();
         }
     }
     else /* must be missing, bail out */
     {
         rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
-        rb->lcd_fillrect(0, 56, 112, 8);
+        rb->lcd_fillrect(0, LCD_HEIGHT-8, LCD_WIDTH, 8);
         rb->lcd_set_drawmode(DRMODE_SOLID);
-        center_text(56, "No Settings File");
+        center_text(LCD_HEIGHT-8, "No Settings File");
 
         /* use the default in this case */
         reset_settings();
@@ -967,9 +963,11 @@
 void init_clock(void)
 {
     #define ANALOG_VALUES 60
-    #define ANALOG_MIN_RADIUS 28
-    #define ANALOG_HR_RADIUS 20
-    #define ANALOG_CENTER 56
+    #define ANALOG_YCENTER (LCD_HEIGHT/2)
+    #define ANALOG_XCENTER (LCD_WIDTH/2)
+    #define ANALOG_MIN_RADIUS (LCD_HEIGHT/2 -10)
+    #define ANALOG_HR_RADIUS (ANALOG_MIN_RADIUS-8)
+
     #define PI 3.141592
     int i;
 
@@ -988,9 +986,13 @@
     for(i=0; i<ANALOG_VALUES; i++)
     {
         xminute[i] = (sin(360 * i / ANALOG_VALUES) * ANALOG_MIN_RADIUS / 16384) +
-                      ANALOG_CENTER;
+                        ANALOG_XCENTER;
+        yminute[i] = (sin(360*i/ ANALOG_VALUES+90) * ANALOG_MIN_RADIUS / 16384) + 
+                        ANALOG_YCENTER;
         xhour[i] = (sin(360 * i / ANALOG_VALUES) * ANALOG_HR_RADIUS / 16384) +
-                      ANALOG_CENTER;
+                    ANALOG_XCENTER;
+        yhour[i] = (sin(360 * i / ANALOG_VALUES+90) * ANALOG_HR_RADIUS / 16384) +
+                    ANALOG_YCENTER;
     }
 }
 
@@ -1281,9 +1283,9 @@
         if(settings.digital[digital_12h])
         {
             if(hour > 12)
-                rb->lcd_mono_bitmap(pm, 97, 55, 15, 8);
+                rb->lcd_mono_bitmap(pm, 97, LCD_HEIGHT-9, 15, 8);
             else
-                rb->lcd_mono_bitmap(am, 1, 55, 15, 8);
+                rb->lcd_mono_bitmap(am, 1, LCD_HEIGHT-9, 15, 8);
         }
     }
     else
@@ -1291,9 +1293,9 @@
         if(settings.lcd[lcd_12h])
         {
             if(hour > 12)
-                rb->lcd_mono_bitmap(pm, 97, 55, 15, 8);
+                rb->lcd_mono_bitmap(pm, 97, LCD_HEIGHT-9, 15, 8);
             else
-                rb->lcd_mono_bitmap(am, 1, 55, 15, 8);
+                rb->lcd_mono_bitmap(am, 1, LCD_HEIGHT-9, 15, 8);
         }
     }
 
@@ -1493,11 +1495,11 @@
         for(y_position = -74; y_position <= 20; y_position+=(40-y_position)/20)
         {
             rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
-            rb->lcd_fillrect(0, 0, 112, 48);
+            rb->lcd_fillrect(0, 0, LCD_WIDTH, LCD_HEIGHT-16);
             rb->lcd_set_drawmode(DRMODE_SOLID);
             rb->lcd_mono_bitmap(clocklogo, 0, y_position/2, 112, 37);
             if(show_clock_text)
-                center_text(48, "Clock " CLOCK_VERSION);
+                center_text(LCD_HEIGHT-16, "Clock " CLOCK_VERSION);
             rb->lcd_update();
         }
     }
@@ -1505,7 +1507,7 @@
     {
         rb->lcd_mono_bitmap(clocklogo, 0, 10, 112, 37);
         if(show_clock_text)
-            center_text(48, "Clock " CLOCK_VERSION);
+            center_text(LCD_HEIGHT-16, "Clock " CLOCK_VERSION);
         rb->lcd_update();
     }
 }
@@ -1517,10 +1519,10 @@
 {
     int y_position;
 
-    for(y_position = 20; y_position <= 128; y_position+=y_position/20)
+    for(y_position = 20; y_position <= LCD_HEIGHT*2; y_position+=y_position/20)
     {
         rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
-        rb->lcd_fillrect(0, 10, 112, (y_position/2));
+        rb->lcd_fillrect(0, 10, LCD_WIDTH, (y_position/2));
         rb->lcd_set_drawmode(DRMODE_SOLID);
         rb->lcd_mono_bitmap(clocklogo, 0, y_position/2, 112, 37);
         rb->lcd_update();
@@ -1558,6 +1560,7 @@
         credits_pos += (credits_targetpos-credits_pos + 14) / 7)
     {
         rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
+        rb->lcd_fillrect(0, 0, LCD_WIDTH, 8); /* clear any trails left behind */
         rb->lcd_drawline(credits_pos-1, 0, credits_pos-1, 8);
         rb->lcd_set_drawmode(DRMODE_SOLID);
         rb->lcd_putsxy(credits_pos, 0, elapsednames);
@@ -1589,9 +1592,9 @@
             namepos += (name_targetpos - namepos + 14) / 7)
         {
             rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
-            rb->lcd_fillrect(0, 48, 112, 8); /* clear any trails left behind */
+            rb->lcd_fillrect(0, LCD_HEIGHT-16, LCD_WIDTH, 8); /* clear any trails left behind */
             rb->lcd_set_drawmode(DRMODE_SOLID);
-            rb->lcd_putsxy(namepos, 48, name);
+            rb->lcd_putsxy(namepos, LCD_HEIGHT-16, name);
             rb->lcd_update();
 
             /* exit on keypress */
@@ -1605,10 +1608,10 @@
             jobpos -= (jobpos - job_targetpos + 14) / 7, namepos++)
         {
             rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
-            rb->lcd_fillrect(0, 48, 112+job_w, 16); /* clear trails */
+            rb->lcd_fillrect(0, LCD_HEIGHT-16, LCD_WIDTH+job_w, 16); /* clear trails */
             rb->lcd_set_drawmode(DRMODE_SOLID);
-            rb->lcd_putsxy(namepos, 48, name);
-            rb->lcd_putsxy(jobpos, 56, job);
+            rb->lcd_putsxy(namepos, LCD_HEIGHT-16, name);
+            rb->lcd_putsxy(jobpos, LCD_HEIGHT-8, job);
             rb->lcd_update();
 
             /* exit on keypress */
@@ -1621,10 +1624,10 @@
         for(pause = 0; pause < 30; pause++)
         {
             rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
-            rb->lcd_fillrect(0, 48, 112, 16);
+            rb->lcd_fillrect(0, LCD_HEIGHT-16, LCD_WIDTH, 16);
             rb->lcd_set_drawmode(DRMODE_SOLID);
-            rb->lcd_putsxy(namepos, 48, name);
-            rb->lcd_putsxy(jobpos, 56, job);
+            rb->lcd_putsxy(namepos, LCD_HEIGHT-16, name);
+            rb->lcd_putsxy(jobpos, LCD_HEIGHT-8, job);
             rb->lcd_update();
 
             btn = rb->button_get(false);
@@ -1643,10 +1646,10 @@
         while(namepos<LCDWIDTH+10 || jobpos > 0-job_w)
         {
             rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
-            rb->lcd_fillrect(0, 48, 112, 16); /* clear trails */
+            rb->lcd_fillrect(0, LCD_HEIGHT-16, LCD_WIDTH, 16); /* clear trails */
             rb->lcd_set_drawmode(DRMODE_SOLID);
-            rb->lcd_putsxy(namepos, 48, name);
-            rb->lcd_putsxy(jobpos, 56, job);
+            rb->lcd_putsxy(namepos, LCD_HEIGHT-16, name);
+            rb->lcd_putsxy(jobpos, LCD_HEIGHT-8, job);
             rb->lcd_update();
 
             /* exit on keypress */
@@ -1672,11 +1675,12 @@
     offset_dummy = 1;
 
     /* now make the text exit to the right */
-    for(credits_pos = (LCDWIDTH/2)-(credits_w/2); credits_pos <= 122;
+    for(credits_pos = (LCDWIDTH/2)-(credits_w/2); credits_pos <= LCD_WIDTH+10;
         credits_pos += offset_dummy, offset_dummy++)
     {
         rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
-        rb->lcd_fillrect(0, 0, 112, 8);
+        rb->lcd_fillrect(0, 0, LCD_WIDTH, 8); /* clear any trails left behind */
+        rb->lcd_fillrect(0, 0, LCD_WIDTH, 8);
         rb->lcd_set_drawmode(DRMODE_SOLID);
         rb->lcd_putsxy(credits_pos, 0, elapsednames);
         rb->lcd_update();
@@ -1697,7 +1701,7 @@
 
     rb->lcd_clear_display();
 
-    center_text(56, "Credits");
+    center_text(LCD_HEIGHT-8, "Credits");
 
     /* show the logo with an animation and the clock version text */
     show_clock_logo(true, true);
@@ -2025,10 +2029,10 @@
                     for(; cursor_y>=cursor_dummy-8; cursor_y-=2)
                     {
                         rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
-                        rb->lcd_fillrect(0, 8, 112, 56);
+                        rb->lcd_fillrect(0, 8, LCD_WIDTH, LCD_HEIGHT-8);
                         rb->lcd_set_drawmode(DRMODE_SOLID);
                         draw_settings();
-                        cursor(0, cursor_y, 112, 8);
+                        cursor(0, cursor_y, LCD_WIDTH, 8);
                         rb->lcd_update();
                     }
                     cursorpos--;
@@ -2043,10 +2047,10 @@
                     for(; cursor_y<=cursor_dummy+8; cursor_y+=2)
                     {
                         rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
-                        rb->lcd_fillrect(0, 8, 112, 56);
+                        rb->lcd_fillrect(0, 8, LCD_WIDTH, LCD_HEIGHT-8);
                         rb->lcd_set_drawmode(DRMODE_SOLID);
                         draw_settings();
-                        cursor(0, cursor_y, 112, 8);
+                        cursor(0, cursor_y, LCD_WIDTH, 8);
                         rb->lcd_update();
                     }
                     cursorpos++;
@@ -2172,7 +2176,7 @@
                     for(; cursor_y>cursor_dummy-8; cursor_y-=2)
                     {
                         rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
-                        rb->lcd_fillrect(0, 8, 112, 56);
+                        rb->lcd_fillrect(0, 8, LCD_WIDTH, LCD_HEIGHT-8);
                         rb->lcd_set_drawmode(DRMODE_SOLID);
 
                         rb->lcd_puts(2, 1, general_reset_text);
@@ -2190,7 +2194,7 @@
                         draw_checkbox(settings.general[general_backlight], 0, 3, 1, 41);
                         draw_checkbox(idle_poweroff, 0, 1, 1, 49);
 
-                        cursor(0, cursor_y, 112, 8);
+                        cursor(0, cursor_y, LCD_WIDTH, 8);
                         rb->lcd_update();
                     }
                     cursorpos--;
@@ -2205,7 +2209,7 @@
                     for(; cursor_y<cursor_dummy+8; cursor_y+=2)
                     {
                         rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
-                        rb->lcd_fillrect(0, 8, 112, 56);
+                        rb->lcd_fillrect(0, 8, LCD_WIDTH, LCD_HEIGHT-8);
                         rb->lcd_set_drawmode(DRMODE_SOLID);
 
                         rb->lcd_puts(2, 1, general_reset_text);
@@ -2223,7 +2227,7 @@
                         draw_checkbox(settings.general[general_backlight], 0, 3, 1, 41);
                         draw_checkbox(idle_poweroff, 0, 1, 1, 49);
 
-                        cursor(0, cursor_y, 112, 8);
+                        cursor(0, cursor_y, LCD_WIDTH, 8);
                         rb->lcd_update();
                     }
                     cursorpos++;
@@ -2294,9 +2298,9 @@
         if(settings.analog[analog_digits]) /* Digits around the face */
         {
             rb->lcd_putsxy((LCDWIDTH/2)-6, 0, "12");
-            rb->lcd_putsxy(20, (LCDHEIGHT/2)-4, "9");
-            rb->lcd_putsxy((LCDWIDTH/2)-4, 56, "6");
-            rb->lcd_putsxy(86, (LCDHEIGHT/2)-4, "3");
+            rb->lcd_putsxy(LCD_WIDTH/2-(ANALOG_MIN_RADIUS+8), (LCDHEIGHT/2)-4, "9");
+            rb->lcd_putsxy((LCDWIDTH/2)-4, LCD_HEIGHT-8, "6");
+            rb->lcd_putsxy(LCD_WIDTH/2+(ANALOG_MIN_RADIUS+2), (LCDHEIGHT/2)-4, "3");
         }
         if(settings.analog[analog_time] != 0) /* Digital readout */
         {
@@ -2309,16 +2313,16 @@
             if(settings.analog[analog_time] == 2)
             {
                 if(current_time->tm_hour > 12) /* PM */
-                    rb->lcd_mono_bitmap(pm, 96, 1, 15, 8);
+                    rb->lcd_mono_bitmap(pm, LCD_WIDTH-16, 1, 15, 8);
                 else /* AM */
-                    rb->lcd_mono_bitmap(am, 96, 1, 15, 8);
+                    rb->lcd_mono_bitmap(am, LCD_WIDTH-16, 1, 15, 8);
             }
         }
         if(settings.analog[analog_date] != 0) /* Date readout */
         {
             /* MM-DD (or DD.MM) */
-            rb->lcd_putsxy(1, 48, moday);
-            rb->lcd_putsxy(3, 56, dateyr);
+            rb->lcd_putsxy(1, LCD_HEIGHT-16, moday);
+            rb->lcd_putsxy(3, LCD_HEIGHT-8, dateyr);
         }
     }
     else if(settings.clock == DIGITAL)
@@ -2328,13 +2332,13 @@
         {
             rb->snprintf(buf, sizeof(buf), "%d/%d/%d", month, day, year);
             rb->lcd_getstringsize(buf, &w, &h);
-            rb->lcd_putsxy((LCDWIDTH/2)-(w/2), 56, buf);
+            rb->lcd_putsxy((LCDWIDTH/2)-(w/2), LCD_HEIGHT-8, buf);
         }
         else if(settings.digital[digital_date] == 2) /* European mode */
         {
             rb->snprintf(buf, sizeof(buf), "%d.%d.%d", day, month, year);
             rb->lcd_getstringsize(buf, &w, &h);
-            rb->lcd_putsxy((LCDWIDTH/2)-(w/2), 56, buf);
+            rb->lcd_putsxy((LCDWIDTH/2)-(w/2), LCD_HEIGHT-8, buf);
         }
         if(settings.digital[digital_seconds] == 1) /* Second readout */
         {
@@ -2343,11 +2347,11 @@
             rb->lcd_putsxy((LCDWIDTH/2)-(w/2), 5, buf);
         }
         else if(settings.digital[digital_seconds] == 2) /* Second progressbar */
-            rb->scrollbar(0, 0, 112, 4, 60, 0, second, HORIZONTAL);
+            rb->scrollbar(0, 0, LCD_WIDTH, 4, 60, 0, second, HORIZONTAL);
         else if(settings.digital[digital_seconds] == 3) /* Invert the LCD as seconds pass */
         {
             rb->lcd_set_drawmode(DRMODE_COMPLEMENT);
-            rb->lcd_fillrect(0, 0, fill, 64);
+            rb->lcd_fillrect(0, 0, fill, LCD_HEIGHT);
             rb->lcd_set_drawmode(DRMODE_SOLID);
         }
     }
@@ -2358,13 +2362,13 @@
         {
             rb->snprintf(buf, sizeof(buf), "%d/%d/%d", month, day, year);
             rb->lcd_getstringsize(buf, &w, &h);
-            rb->lcd_putsxy((LCDWIDTH/2)-(w/2), 56, buf);
+            rb->lcd_putsxy((LCDWIDTH/2)-(w/2), LCD_HEIGHT-8, buf);
         }
         else if(settings.lcd[lcd_date] == 2) /* european mode */
         {
             rb->snprintf(buf, sizeof(buf), "%d.%d.%d", day, month, year);
             rb->lcd_getstringsize(buf, &w, &h);
-            rb->lcd_putsxy((LCDWIDTH/2)-(w/2), 56, buf);
+            rb->lcd_putsxy((LCDWIDTH/2)-(w/2), LCD_HEIGHT-8, buf);
         }
         if(settings.lcd[lcd_seconds] == 1) /* Second readout */
         {
@@ -2374,12 +2378,12 @@
         }
         else if(settings.lcd[lcd_seconds] == 2) /* Second progressbar */
         {
-            rb->scrollbar(0, 0, 112, 4, 60, 0, second, HORIZONTAL);
+            rb->scrollbar(0, 0, LCD_WIDTH, 4, 60, 0, second, HORIZONTAL);
         }
         else if(settings.lcd[lcd_seconds] == 3) /* Invert the LCD as seconds pass */
         {
             rb->lcd_set_drawmode(DRMODE_COMPLEMENT);
-            rb->lcd_fillrect(0, 0, fill, 64);
+            rb->lcd_fillrect(0, 0, fill, LCD_HEIGHT);
             rb->lcd_set_drawmode(DRMODE_SOLID);
         }
     }
@@ -2393,7 +2397,7 @@
         if(settings.fullscreen[fullscreen_invertseconds]) /* Invert the LCD as seconds pass */
         {
             rb->lcd_set_drawmode(DRMODE_COMPLEMENT);
-            rb->lcd_fillrect(0, 0, fill, 64);
+            rb->lcd_fillrect(0, 0, fill, LCD_HEIGHT);
             rb->lcd_set_drawmode(DRMODE_SOLID);
         }
     }
@@ -2403,12 +2407,12 @@
         if(settings.plain[plain_date] == 1) /* american mode */
         {
             rb->snprintf(buf, sizeof(buf), "%d/%d/%d", month, day, year);
-            rb->lcd_putsxy(0, 38, buf);
+            rb->lcd_putsxy(0, LCD_HEIGHT-28, buf);
         }
         else if(settings.plain[plain_date] == 2) /* european mode */
         {
             rb->snprintf(buf, sizeof(buf), "%d.%d.%d", day, month, year);
-            rb->lcd_putsxy(0, 38, buf);
+            rb->lcd_putsxy(0, LCD_HEIGHT-28, buf);
         }
     }
 }
@@ -2435,7 +2439,7 @@
             rb->lcd_mono_bitmap(arrow, 1, 8*(i+1)+1, 8, 6);
         }
 
-        cursor(0, 8*cursorpos, 112, 8); /* draw cursor */
+        cursor(0, 8*cursorpos, LCD_WIDTH, 8); /* draw cursor */
 
         rb->lcd_update();
 
@@ -2449,7 +2453,7 @@
                         for(; cursor_y>cursor_dummy-8; cursor_y-=2)
                         {
                             rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
-                            rb->lcd_fillrect(0, 8, 112, 56);
+                            rb->lcd_fillrect(0, 8, LCD_WIDTH, LCD_HEIGHT-8);
                             rb->lcd_set_drawmode(DRMODE_SOLID);
 
                             for(i=0; i<6; i++)
@@ -2458,7 +2462,7 @@
                                 rb->lcd_mono_bitmap(arrow, 1, 8*(i+1)+1, 8, 6);
                             }
 
-                            cursor(0, cursor_y, 112, 8);
+                            cursor(0, cursor_y, LCD_WIDTH, 8);
                             rb->lcd_update();
                         }
                         cursorpos--;
@@ -2473,7 +2477,7 @@
                         for(; cursor_y<cursor_dummy+8; cursor_y+=2)
                         {
                             rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
-                            rb->lcd_fillrect(0, 8, 112, 56);
+                            rb->lcd_fillrect(0, 8, LCD_WIDTH, LCD_HEIGHT-8);
                             rb->lcd_set_drawmode(DRMODE_SOLID);
 
                             for(i=0; i<6; i++)
@@ -2482,7 +2486,7 @@
                                 rb->lcd_mono_bitmap(arrow, 1, 8*(i+1)+1, 8, 6);
                             }
 
-                            cursor(0, cursor_y, 112, 8);
+                            cursor(0, cursor_y, LCD_WIDTH, 8);
                             rb->lcd_update();
                         }
                         cursorpos++;
@@ -2526,7 +2530,7 @@
 
         /* invert lcd */
         rb->lcd_set_drawmode(DRMODE_COMPLEMENT);
-        rb->lcd_fillrect(0, 0, 112, 64);
+        rb->lcd_fillrect(0, 0, LCD_WIDTH, LCD_HEIGHT);
         rb->lcd_set_drawmode(DRMODE_SOLID);
 
         rb->lcd_update();
@@ -2641,7 +2645,7 @@
     if(settings.general[general_counter])
     {
         if(settings.clock == ANALOG)
-            rb->lcd_putsxy(69, 56, count_text);
+            rb->lcd_putsxy(LCD_WIDTH/2+13, LCD_HEIGHT-8, count_text);
         else if(settings.clock == DIGITAL)
             rb->lcd_putsxy(1, 5, count_text);
         else if(settings.clock == LCD)
@@ -2649,7 +2653,7 @@
         else if(settings.clock == FULLSCREEN)
             rb->lcd_puts(6, 6, count_text);
         else if(settings.clock == PLAIN)
-            rb->lcd_putsxy(0, 50, count_text);
+            rb->lcd_putsxy(0, LCD_HEIGHT-14, count_text);
     }
 }
 
@@ -2856,7 +2860,7 @@
             rb->lcd_mono_bitmap(arrow, 1, 8*(i+1)+1, 8, 6);
         }
 
-        cursor(0, 8*menupos, 112, 8); /* draw cursor */
+        cursor(0, 8*menupos, LCD_WIDTH, 8); /* draw cursor */
 
         rb->lcd_update();
 
@@ -2869,7 +2873,7 @@
                         for(cursor_dummy = cursor_y; cursor_y>cursor_dummy-8; cursor_y-=2)
                         {
                             rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
-                            rb->lcd_fillrect(0, 8, 112, 56);
+                            rb->lcd_fillrect(0, 8, LCD_WIDTH, LCD_HEIGHT-8);
                             rb->lcd_set_drawmode(DRMODE_SOLID);
 
                             for(i=0; i<7; i++) /* draw menu items and icons */
@@ -2878,7 +2882,7 @@
                                 rb->lcd_mono_bitmap(arrow, 1, 8*(i+1)+1, 8, 6);
                             }
 
-                            cursor(0, cursor_y, 112, 8); /* draw cursor */
+                            cursor(0, cursor_y, LCD_WIDTH, 8); /* draw cursor */
                             rb->lcd_update();
                         }
                         menupos--;
@@ -2894,7 +2898,7 @@
                         for(cursor_dummy = cursor_y; cursor_y<cursor_dummy+8; cursor_y+=2)
                         {
                             rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
-                            rb->lcd_fillrect(0, 8, 112, 56);
+                            rb->lcd_fillrect(0, 8, LCD_WIDTH, LCD_HEIGHT-8);
                             rb->lcd_set_drawmode(DRMODE_SOLID);
 
                             for(i=0; i<7; i++) /* draw menu items and icons */
@@ -2903,7 +2907,7 @@
                                 rb->lcd_mono_bitmap(arrow, 1, 8*(i+1)+1, 8, 6);
                             }
 
-                            cursor(0, cursor_y, 112, 8); /* draw cursor */
+                            cursor(0, cursor_y, LCD_WIDTH, 8); /* draw cursor */
                             rb->lcd_update();
                         }
                         menupos++;
@@ -3014,17 +3018,17 @@
             else if(settings.clock == DIGITAL)
             {
                 if(settings.digital[digital_blinkcolon])
-                    draw_7seg_time(hour, minute, 8, 16, 16, 32, second & 1, false);
+                    draw_7seg_time(hour, minute, 8, 16, (LCD_WIDTH-48)/4, LCD_HEIGHT-32, second & 1, false);
                 else
-                    draw_7seg_time(hour, minute, 8, 16, 16, 32, true, false);
+                    draw_7seg_time(hour, minute, 8, 16, (LCD_WIDTH-48)/4, LCD_HEIGHT-32, true, false);
             }
             /* LCD mode */
             else if(settings.clock == LCD)
             {
                 if(settings.lcd[lcd_blinkcolon])
-                    draw_7seg_time(hour, minute, 8, 16, 16, 32, second & 1, true);
+                    draw_7seg_time(hour, minute, 8, 16, (LCD_WIDTH-48)/4, LCD_HEIGHT-32, second & 1, true);
                 else
-                    draw_7seg_time(hour, minute, 8, 16, 16, 32, true, true);
+                    draw_7seg_time(hour, minute, 8, 16, (LCD_WIDTH-48)/4, LCD_HEIGHT-32, true, true);
             }
             /* Fullscreen mode */
             else if(settings.clock == FULLSCREEN)
