diff -uwbr --exclude=CVS firmware.orig/drivers/lcd.c firmware/drivers/lcd.c
--- firmware.orig/drivers/lcd.c	2002-08-01 08:59:44.000000000 +0200
+++ firmware/drivers/lcd.c	2002-08-01 09:43:00.000000000 +0200
@@ -1046,6 +1046,144 @@
     }
 }
 
+/*
+ * Print a progress bar
+ */
+void lcd_progressbar(int x, int y, int width, int height, int percent, int direction)
+{
+    int pos;
+    int i,j;
+
+    /* draw horizontal lines */
+    for(i=x+1;i<=x+width-2;i++) {
+        DRAW_PIXEL(i,y);
+        DRAW_PIXEL(i,(y+height-1));
+    }
+
+    /* draw vertical lines */
+    for(i=1;i<height;i++) {
+        DRAW_PIXEL(x,(y+i));
+        DRAW_PIXEL((x+width-1),(y+i));
+    }
+
+    /* clear edge pixels */
+    CLEAR_PIXEL(x,y);
+    CLEAR_PIXEL((x+width-1),y);
+    CLEAR_PIXEL(x,(y+height-1));
+    CLEAR_PIXEL((x+width-1),(y+height-1));
+
+    /* clear pixels in progress bar */
+    for(i=1;i<=width-2;i++) {
+        for(j=1;j<=height-2;j++) {
+            CLEAR_PIXEL((x+i),(y+j));
+            CLEAR_PIXEL((x+i),(y+j));
+        }
+    }
+
+    /* draw bar */
+    pos=percent;
+    if(pos<0)
+        pos=0;
+    if(pos>100)
+        pos=100;
+
+    switch (direction)
+    {
+        case BAR_RIGHT:
+            pos=(width-2)*pos/100;
+            for(i=1;i<=pos;i++)
+                for(j=1;j<height-1;j++)
+                    DRAW_PIXEL((x+i),(y+j));
+            break;
+        case BAR_LEFT:
+            pos=(width-2)*(100-pos)/100;
+            for(i=pos+1;i<=width-2;i++)
+                for(j=1;j<height-1;j++)
+                    DRAW_PIXEL((x+i),(y+j));
+            break;
+        case BAR_DOWN:
+            pos=(height-2)*pos/100;
+            for(i=1;i<=pos;i++)
+                for(j=1;j<width-1;j++)
+                    DRAW_PIXEL((x+j),(y+i));
+            break;
+        case BAR_UP:
+            pos=(height-2)*(100-pos)/100;
+            for(i=pos+1;i<=height-2;i++)
+                for(j=1;j<width-1;j++)
+                    DRAW_PIXEL((x+j),(y+i));
+            break;
+    }
+
+}
+
+
+/*
+ * Print a slidebar bar
+ */
+void lcd_slidebar(int x, int y, int width, int height, int percent, int direction)
+{
+    int pos;
+    int i,j;
+
+    /* draw horizontal lines */
+    for(i=x+1;i<=x+width-2;i++) {
+        DRAW_PIXEL(i,y);
+        DRAW_PIXEL(i,(y+height-1));
+    }
+
+    /* draw vertical lines */
+    for(i=1;i<height;i++) {
+        DRAW_PIXEL(x,(y+i));
+        DRAW_PIXEL((x+width-1),(y+i));
+    }
+
+    /* clear edge pixels */
+    CLEAR_PIXEL(x,y);
+    CLEAR_PIXEL((x+width-1),y);
+    CLEAR_PIXEL(x,(y+height-1));
+    CLEAR_PIXEL((x+width-1),(y+height-1));
+
+    /* clear pixels in progress bar */
+    for(i=1;i<=width-2;i++)
+        for(j=1;j<=height-2;j++) {
+            CLEAR_PIXEL((x+i),(y+j));
+            CLEAR_PIXEL((x+i),(y+j));
+        }
+
+    /* draw point */
+    pos=percent;
+    if(pos<0)
+        pos=0;
+    if(pos>100)
+        pos=100;
+
+    switch (direction)
+    {
+        case BAR_RIGHT:
+            pos=(width-height-1)*pos/100;
+            break;
+        case BAR_LEFT:
+            pos=(width-height-1)*(100-pos)/100;
+            break;
+        case BAR_DOWN:
+            pos=(height-width-1)*pos/100;
+            break;
+        case BAR_UP:
+            pos=(height-width-1)*(100-pos)/100;
+            break;
+    }
+
+    if(direction == BAR_LEFT || direction == BAR_RIGHT)
+        for(i=1;i<height;i++)
+            for(j=1;j<height;j++)
+                DRAW_PIXEL((x+pos+i),(y+j));
+    else
+        for(i=1;i<width;i++)
+            for(j=1;j<width;j++)
+                DRAW_PIXEL((x+i),(y+pos+j));
+}
+
 #else
 /* no LCD defined, no code to use */
 #endif
diff -uwbr --exclude=CVS firmware.orig/drivers/lcd.h firmware/drivers/lcd.h
--- firmware.orig/drivers/lcd.h	2002-08-01 08:59:44.000000000 +0200
+++ firmware/drivers/lcd.h	2002-08-01 09:05:17.000000000 +0200
@@ -74,6 +74,15 @@
 #define LCD_WIDTH       112   /* Display width in pixels */
 #define LCD_HEIGHT      64    /* Display height in pixels */
 
+/* Directions for progressbar and scrollbar */
+enum
+{
+    BAR_RIGHT = 0,
+    BAR_LEFT,
+    BAR_DOWN,
+    BAR_UP
+};
+
 extern void lcd_putsxy(int x, int y, unsigned char *string, int font);
 extern void lcd_setfont(int font);
 extern void lcd_getfontsize(unsigned int font, int *width, int *height);
@@ -88,6 +97,8 @@
 extern void lcd_clearline( int x1, int y1, int x2, int y2 );
 extern void lcd_drawpixel(int x, int y);
 extern void lcd_clearpixel(int x, int y);
+extern void lcd_progressbar(int x, int y, int width, int height, int percent, int direction);
+extern void lcd_slidebar(int x, int y, int width, int height, int percent, int direction);
 
 #endif /* CHARCELLS / BITMAP */
 
diff -uwbr --exclude=CVS apps.orig/wps.c apps/wps.c
--- apps.orig/wps.c	2002-08-01 08:59:56.000000000 +0200
+++ apps/wps.c	2002-08-01 09:07:11.000000000 +0200
@@ -202,6 +202,9 @@
                      id3->length % 60000 / 1000 );
 
             lcd_puts(0, 6, buffer);
+
+            lcd_slidebar(1,LCD_HEIGHT-7,LCD_WIDTH-2,5,id3->elapsed*100/id3->length,BAR_RIGHT);
+
             lcd_update();
 #else
             /* Display time with the filename scroll only because

