diff -u vdr-1.4.2/channels.h vdr-1.4.2-kw/channels.h
--- vdr-1.4.2/channels.h	2006-05-28 17:03:56.000000000 +0200
+++ vdr-1.4.2-kw/channels.h	2006-06-19 13:55:24.000000000 +0200
@@ -184,6 +184,10 @@
   int Tid(void) const { return tid; }
   int Sid(void) const { return sid; }
   int Rid(void) const { return rid; }
+  bool IsTV(void)    const { return (vpid > 0)  && (Apid(0)>0); }  //kw
+  bool IsRadio(void) const { return (vpid == 0) && (Apid(0)>0); }  //kw
+  bool IsDolby(void) const { return (Dpid(0) > 0); }               //kw
+  bool IsCrypted(void) const { return (Ca() > 4); }                //kw
   int Number(void) const { return number; }
   void SetNumber(int Number) { number = Number; }
   bool GroupSep(void) const { return groupSep; }
diff -u vdr-1.4.2/config.c vdr-1.4.2-kw/config.c
--- vdr-1.4.2/config.c	2006-07-22 13:57:51.000000000 +0200
+++ vdr-1.4.2-kw/config.c	2006-08-29 19:43:36.000000000 +0200
@@ -217,6 +217,7 @@
   OSDLanguage = 0;
   strcpy(OSDSkin, "sttng");
   strcpy(OSDTheme, "default");
+  WarEagleIcons = 1;
   PrimaryDVB = 1;
   ShowInfoOnChSwitch = 1;
   TimeoutRequChInfo = 1;
@@ -235,6 +236,8 @@
   TimeTransponder = 0;
   MarginStart = 2;
   MarginStop = 10;
+  JumpSeconds = 60;
+  JumpSecondsRepeat = 300;
   AudioLanguages[0] = -1;
   EPGLanguages[0] = -1;
   EPGScanTimeout = 5;
@@ -275,6 +278,12 @@
   CurrentDolby = 0;
   InitialChannel = 0;
   InitialVolume = -1;
+  ShowRecDate = 1;
+  ShowRecTime = 1;
+  ShowRecLength = 0;
+  ShowRecNew = 1;
+  MenuCmdPosition = 0;
+  ShowProgressBar = 0;
 }
 
 cSetup& cSetup::operator= (const cSetup &s)
@@ -378,6 +387,7 @@
   if      (!strcasecmp(Name, "OSDLanguage"))         OSDLanguage        = atoi(Value);
   else if (!strcasecmp(Name, "OSDSkin"))             strn0cpy(OSDSkin, Value, MaxSkinName);
   else if (!strcasecmp(Name, "OSDTheme"))            strn0cpy(OSDTheme, Value, MaxThemeName);
+  else if (!strcasecmp(Name, "WarEagleIcons"))       WarEagleIcons      = atoi(Value);
   else if (!strcasecmp(Name, "PrimaryDVB"))          PrimaryDVB         = atoi(Value);
   else if (!strcasecmp(Name, "ShowInfoOnChSwitch"))  ShowInfoOnChSwitch = atoi(Value);
   else if (!strcasecmp(Name, "TimeoutRequChInfo"))   TimeoutRequChInfo  = atoi(Value);
@@ -396,6 +406,8 @@
   else if (!strcasecmp(Name, "TimeTransponder"))     TimeTransponder    = atoi(Value);
   else if (!strcasecmp(Name, "MarginStart"))         MarginStart        = atoi(Value);
   else if (!strcasecmp(Name, "MarginStop"))          MarginStop         = atoi(Value);
+  else if (!strcasecmp(Name, "JumpSeconds"))         JumpSeconds        = atoi(Value);  
+  else if (!strcasecmp(Name, "JumpSecondsRepeat"))   JumpSecondsRepeat  = atoi(Value);  
   else if (!strcasecmp(Name, "AudioLanguages"))      return ParseLanguages(Value, AudioLanguages);
   else if (!strcasecmp(Name, "EPGLanguages"))        return ParseLanguages(Value, EPGLanguages);
   else if (!strcasecmp(Name, "EPGScanTimeout"))      EPGScanTimeout     = atoi(Value);
@@ -436,6 +448,12 @@
   else if (!strcasecmp(Name, "CurrentDolby"))        CurrentDolby       = atoi(Value);
   else if (!strcasecmp(Name, "InitialChannel"))      InitialChannel     = atoi(Value);
   else if (!strcasecmp(Name, "InitialVolume"))       InitialVolume      = atoi(Value);
+  else if (!strcasecmp(Name, "ShowRecDate"))         ShowRecDate        = atoi(Value);
+  else if (!strcasecmp(Name, "ShowRecTime"))         ShowRecTime        = atoi(Value);
+  else if (!strcasecmp(Name, "ShowRecLength"))       ShowRecLength      = atoi(Value);
+  else if (!strcasecmp(Name, "ShowRecNew"))          ShowRecNew         = atoi(Value);
+  else if (!strcasecmp(Name, "MenuCmdPosition"))     MenuCmdPosition    = atoi(Value);
+  else if (!strcasecmp(Name, "ShowProgressBar"))     ShowProgressBar    = atoi(Value);
   else
      return false;
   return true;
@@ -446,6 +464,7 @@
   Store("OSDLanguage",        OSDLanguage);
   Store("OSDSkin",            OSDSkin);
   Store("OSDTheme",           OSDTheme);
+  Store("WarEagleIcons",      WarEagleIcons);
   Store("PrimaryDVB",         PrimaryDVB);
   Store("ShowInfoOnChSwitch", ShowInfoOnChSwitch);
   Store("TimeoutRequChInfo",  TimeoutRequChInfo);
@@ -464,6 +483,8 @@
   Store("TimeTransponder",    TimeTransponder);
   Store("MarginStart",        MarginStart);
   Store("MarginStop",         MarginStop);
+  Store("JumpSeconds",        JumpSeconds);  
+  Store("JumpSecondsRepeat",  JumpSecondsRepeat);  
   StoreLanguages("AudioLanguages", AudioLanguages);
   StoreLanguages("EPGLanguages", EPGLanguages);
   Store("EPGScanTimeout",     EPGScanTimeout);
@@ -504,6 +525,12 @@
   Store("CurrentDolby",       CurrentDolby);
   Store("InitialChannel",     InitialChannel);
   Store("InitialVolume",      InitialVolume);
+  Store("ShowRecDate",        ShowRecDate);
+  Store("ShowRecTime",        ShowRecTime);
+  Store("ShowRecLength",      ShowRecLength);
+  Store("ShowRecNew",         ShowRecNew);
+  Store("MenuCmdPosition",    MenuCmdPosition);
+  Store("ShowProgressBar",    ShowProgressBar);
 
   Sort();
 
diff -u vdr-1.4.2/config.h vdr-1.4.2-kw/config.h
--- vdr-1.4.2/config.h	2006-08-26 16:16:34.000000000 +0200
+++ vdr-1.4.2-kw/config.h	2006-09-03 19:21:37.000000000 +0200
@@ -201,6 +201,7 @@
   int OSDLanguage;
   char OSDSkin[MaxSkinName];
   char OSDTheme[MaxThemeName];
+  int WarEagleIcons;
   int PrimaryDVB;
   int ShowInfoOnChSwitch;
   int TimeoutRequChInfo;
@@ -218,6 +219,7 @@
   int TimeSource;
   int TimeTransponder;
   int MarginStart, MarginStop;
+  int JumpSeconds, JumpSecondsRepeat;
   int AudioLanguages[I18nNumLanguages + 1];
   int EPGLanguages[I18nNumLanguages + 1];
   int EPGScanTimeout;
@@ -252,6 +254,7 @@
   int CurrentDolby;
   int InitialChannel;
   int InitialVolume;
+  int ShowRecDate, ShowRecTime, ShowRecLength, ShowRecNew, MenuCmdPosition, ShowProgressBar;
   int __EndData__;
   cSetup(void);
   cSetup& operator= (const cSetup &s);
diff -u vdr-1.4.2/fontosd-iso8859-15.c vdr-1.4.2-kw/fontosd-iso8859-15.c
--- vdr-1.4.2/fontosd-iso8859-15.c	2006-02-05 14:49:48.000000000 +0100
+++ vdr-1.4.2-kw/fontosd-iso8859-15.c	2006-04-09 19:27:43.000000000 +0200
@@ -2879,36 +2879,66 @@
      0x00000000,  //
      0x00000000,  //
   },
-  {             // 128
-     0, 27,
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-  },
+  {             // 128  //Kw
+     6, 27,
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+  },  
+//  {             // 128
+//     0, 27,
+//     0x00000000,  //
+//     0x00000000,  //
+//     0x00000000,  //
+//     0x00000000,  //
+//     0x00000000,  //
+//     0x00000000,  //
+//     0x00000000,  //
+//     0x00000000,  //
+//     0x00000000,  //
+//     0x00000000,  //
+//     0x00000000,  //
+//     0x00000000,  //
+//     0x00000000,  //
+//     0x00000000,  //
+//     0x00000000,  //
+//     0x00000000,  //
+//     0x00000000,  //
+//     0x00000000,  //
+//     0x00000000,  //
+//     0x00000000,  //
+//     0x00000000,  //
+//     0x00000000,  //
+//     0x00000000,  //
+//     0x00000000,  //
+//     0x00000000,  //
+//     0x00000000,  //
+//     0x00000000,  //
+//  },
   {             // 129
      0, 27,
      0x00000000,  //
@@ -6217,8 +6247,8 @@
      0x00000000,  // ......
      0x00000000,  // ......
      0x00000000,  // ......
-     0x00000033,  // **..**
-     0x00000033,  // **..**
+     0x00000000,  // ......
+     0x00000000,  // ......
      0x00000000,  // ......
      0x00000000,  // ......
      0x0000000C,  // ..**..
@@ -6239,6 +6269,66 @@
      0x00000000,  // ......
      0x00000000,  // ......
   },
+//  {             // 239
+//       16, 27,
+//       0x0,    // ................................
+//       0x0,    // ................................
+//       0x0,    // ................................
+//       0x0,    // ................................
+//       0x6006, // .................##..........##.
+//       0x700e, // .................###........###.
+//       0x381c, // ..................###......###..
+//       0x1c38, // ...................###....###...
+//       0xe70,  // ....................###..###....
+//       0x7e0,  // .....................######.....
+//       0x3ffc, // ..................############..
+//       0x7ffe, // .................##############.
+//       0x700e, // .................###........###.
+//       0x6006, // .................##..........##.
+//       0x6c06, // .................##.##.......##.
+//       0x6ff6, // .................##.########.##.
+//       0x6ff6, // .................##.########.##.
+//       0x6db6, // .................##.##.##.##.##.
+//       0x61b6, // .................##....##.##.##.
+//       0x61b6, // .................##....##.##.##.
+//       0x6006, // .................##..........##.
+//       0x700e, // .................###........###.
+//       0x7ffe, // .................##############.
+//       0x3ffc, // ..................############..
+//       0x0,    // ................................
+//       0x0,    // ................................
+//       0x0,    // ................................
+//  },
+//  {             // 239
+//     6, 27,
+//     0x00000000,  // ......
+//     0x00000000,  // ......
+//     0x00000000,  // ......
+//     0x00000000,  // ......
+//     0x00000000,  // ......
+//     0x00000000,  // ......
+//     0x00000033,  // **..**
+//     0x00000033,  // **..**
+//     0x00000000,  // ......
+//     0x00000000,  // ......
+//     0x0000000C,  // ..**..
+//     0x0000000C,  // ..**..
+//     0x0000000C,  // ..**..
+//     0x0000000C,  // ..**..
+//     0x0000000C,  // ..**..
+//     0x0000000C,  // ..**..
+//     0x0000000C,  // ..**..
+//     0x0000000C,  // ..**..
+//     0x0000000C,  // ..**..
+//     0x0000000C,  // ..**..
+//     0x0000000C,  // ..**..
+//     0x0000000C,  // ..**..
+//     0x00000000,  // ......
+//     0x00000000,  // ......
+//     0x00000000,  // ......
+//     0x00000000,  // ......
+//     0x00000000,  // ......
+//  },
   {             // 240
      13, 27,
      0x00000000,  // .............
@@ -6359,66 +6449,126 @@
      0x00000000,  // .............
      0x00000000,  // .............
   },
-  {             // 244
-     13, 27,
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x000000E0,  // .....***.....
-     0x000001A0,  // ....**.*.....
-     0x00000130,  // ....*..**....
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x000001F0,  // ....*****....
-     0x000007F8,  // ..********...
-     0x0000061C,  // ..**....***..
-     0x00000C0E,  // .**......***.
-     0x00000C06,  // .**.......**.
-     0x00000C06,  // .**.......**.
-     0x00000C06,  // .**.......**.
-     0x00000C06,  // .**.......**.
-     0x00000C0E,  // .**......***.
-     0x0000061C,  // ..**....***..
-     0x000007F8,  // ..********...
-     0x000001F0,  // ....*****....
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-  },
-  {             // 245
-     13, 27,
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000180,  // ....**.......
-     0x000003F8,  // ...*******...
-     0x00000270,  // ...*..***....
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x000001F0,  // ....*****....
-     0x000007F8,  // ..********...
-     0x0000061C,  // ..**....***..
-     0x00000C0E,  // .**......***.
-     0x00000C06,  // .**.......**.
-     0x00000C06,  // .**.......**.
-     0x00000C06,  // .**.......**.
-     0x00000C06,  // .**.......**.
-     0x00000C0E,  // .**......***.
-     0x0000061C,  // ..**....***..
-     0x000007F8,  // ..********...
-     0x000001F0,  // ....*****....
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-  },
+  {             // 244   Radio
+    16, 27,
+    0x0,       // ................................
+    0x0,       // ................................
+    0x0,       // ................................
+    0x0,       // ................................
+    0x0,       // ................................
+    0x0,       // ................................
+    0x0,       // ................................
+    0x0,       // ................................
+    0x0,       // ................................
+    0x0,       // ................................
+    0x0,       // ................................
+    0x0,       // ................................
+    0x0,       // ................................
+    0xe0,      // ........................###.....
+    0x1c0,     // .......................###......
+    0x380,     // ......................###.......
+    0x300,     // ......................##........
+    0x300,     // ......................##........
+    0x7ffe,    // .................##############.
+    0x6006,    // .................##..........##.
+    0x6006,    // .................##..........##.
+    0x6006,    // .................##..........##.
+    0x7ffe,    // .................##############.
+    0x0,       // ................................
+    0x0,       // ................................
+    0x0,       // ................................
+    0x0,       // ................................
+  },
+//  {             // 244
+//     13, 27,
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x000000E0,  // .....***.....
+//     0x000001A0,  // ....**.*.....
+//     0x00000130,  // ....*..**....
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x000001F0,  // ....*****....
+//     0x000007F8,  // ..********...
+//     0x0000061C,  // ..**....***..
+//     0x00000C0E,  // .**......***.
+//     0x00000C06,  // .**.......**.
+//     0x00000C06,  // .**.......**.
+//     0x00000C06,  // .**.......**.
+//     0x00000C06,  // .**.......**.
+//     0x00000C0E,  // .**......***.
+//     0x0000061C,  // ..**....***..
+//     0x000007F8,  // ..********...
+//     0x000001F0,  // ....*****....
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//  },
+  {             // 245   TV
+    16, 27,
+    0x0,       // ................................
+    0x0,       // ................................
+    0x0,       // ................................
+    0x0,       // ................................
+    0x0,       // ................................
+    0x6006,    // .................##..........##.
+    0x700e,    // .................###........###.
+    0x381c,    // ..................###......###..
+    0x1c38,    // ...................###....###...
+    0xe70,     // ....................###..###....
+    0x7e0,     // .....................######.....
+    0x3ffc,    // ..................############..
+    0x700e,    // .................###........###.
+    0x6006,    // .................##..........##.
+    0x6006,    // .................##..........##.
+    0x6006,    // .................##..........##.
+    0x6006,    // .................##..........##.
+    0x6006,    // .................##..........##.
+    0x6006,    // .................##..........##.
+    0x6006,    // .................##..........##.
+    0x6006,    // .................##..........##.
+    0x700e,    // .................###........###.
+    0x3ffc,    // ..................############..
+    0x0,       // ................................
+    0x0,       // ................................
+    0x0,       // ................................
+    0x0,       // ................................
+  },
+//  {             // 245
+//     13, 27,
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000180,  // ....**.......
+//     0x000003F8,  // ...*******...
+//     0x00000270,  // ...*..***....
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x000001F0,  // ....*****....
+//     0x000007F8,  // ..********...
+//     0x0000061C,  // ..**....***..
+//     0x00000C0E,  // .**......***.
+//     0x00000C06,  // .**.......**.
+//     0x00000C06,  // .**.......**.
+//     0x00000C06,  // .**.......**.
+//     0x00000C06,  // .**.......**.
+//     0x00000C0E,  // .**......***.
+//     0x0000061C,  // ..**....***..
+//     0x000007F8,  // ..********...
+//     0x000001F0,  // ....*****....
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//  },
   {             // 246
      13, 27,
      0x00000000,  // .............
@@ -6510,95 +6660,185 @@
      0x00000000,  // ..............
   },
   {             // 249
-     13, 27,
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000380,  // ...***.......
-     0x000000C0,  // .....**......
-     0x00000040,  // ......*......
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000C0C,  // .**......**..
-     0x00000C0C,  // .**......**..
-     0x00000C0C,  // .**......**..
-     0x00000C0C,  // .**......**..
-     0x00000C0C,  // .**......**..
-     0x00000C0C,  // .**......**..
-     0x00000C0C,  // .**......**..
-     0x00000C0C,  // .**......**..
-     0x00000C0C,  // .**......**..
-     0x00000C1C,  // .**.....***..
-     0x00000FFC,  // .**********..
-     0x000003E0,  // ...*****.....
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-  },
+     16, 27,
+       0x0,    // ................
+       0xf800, // #####...........
+       0xfc00, // ######..........
+       0xcc00, // ##..##..........
+       0xfc00, // ######..........
+       0xf000, // ####............
+       0xf800, // #####...........
+       0xfc00, // ######..........
+       0xdc00, // ##.###..........
+       0x0,    // ................
+       0x1f80, // ...######.......
+       0x1f80, // ...######.......
+       0x1800, // ...##...........
+       0x1e00, // ...####.........
+       0x1e00, // ...####.........
+       0x1800, // ...##...........
+       0x1f80, // ...######.......
+       0x1f80, // ...######.......
+       0x0,    // ................
+       0x3c0,  // ......####......
+       0x7e0,  // .....######.....
+       0xe60,  // ....###..##.....
+       0xc00,  // ....##..........
+       0xc00,  // ....##..........
+       0xe60,  // ....###..##.....
+       0x7e0,  // .....######.....
+       0x3c0,  // ......####......
+  },
+//  {             // 249
+//     13, 27,
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000380,  // ...***.......
+//     0x000000C0,  // .....**......
+//     0x00000040,  // ......*......
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000C0C,  // .**......**..
+//     0x00000C0C,  // .**......**..
+//     0x00000C0C,  // .**......**..
+//     0x00000C0C,  // .**......**..
+//     0x00000C0C,  // .**......**..
+//     0x00000C0C,  // .**......**..
+//     0x00000C0C,  // .**......**..
+//     0x00000C0C,  // .**......**..
+//     0x00000C0C,  // .**......**..
+//     0x00000C1C,  // .**.....***..
+//     0x00000FFC,  // .**********..
+//     0x000003E0,  // ...*****.....
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//  },
   {             // 250
-     13, 27,
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000070,  // ......***....
-     0x00000060,  // ......**.....
-     0x000000C0,  // .....**......
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000C0C,  // .**......**..
-     0x00000C0C,  // .**......**..
-     0x00000C0C,  // .**......**..
-     0x00000C0C,  // .**......**..
-     0x00000C0C,  // .**......**..
-     0x00000C0C,  // .**......**..
-     0x00000C0C,  // .**......**..
-     0x00000C0C,  // .**......**..
-     0x00000C0C,  // .**......**..
-     0x00000C1C,  // .**.....***..
-     0x00000FFC,  // .**********..
-     0x000003E0,  // ...*****.....
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-  },
+       16, 27,
+       0x0,    // ................
+       0xc600, // ##...##.........
+       0xe600, // ###..##.........
+       0xf600, // ####.##.........
+       0xf600, // ####.##.........
+       0xde00, // ##.####.........
+       0xde00, // ##.####.........
+       0xce00, // ##..###.........
+       0xc600, // ##...##.........
+       0x0,    // ................
+       0x1fc0, // ...#######......
+       0x1fc0, // ...#######......
+       0x1800, // ...##...........
+       0x1f00, // ...#####........
+       0x1f00, // ...#####........
+       0x1800, // ...##...........
+       0x1fc0, // ...#######......
+       0x1fc0, // ...#######......
+       0x0,    // ................
+       0x318,  // ......##...##...
+       0x318,  // ......##...##...
+       0x318,  // ......##...##...
+       0x318,  // ......##...##...
+       0x318,  // ......##...##...
+       0x318,  // ......##...##...
+       0x3f8,  // ......#######...
+       0x1f0,  // .......#####....
+  },
+//  {             // 250
+//     13, 27,
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000070,  // ......***....
+//     0x00000060,  // ......**.....
+//     0x000000C0,  // .....**......
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000C0C,  // .**......**..
+//     0x00000C0C,  // .**......**..
+//     0x00000C0C,  // .**......**..
+//     0x00000C0C,  // .**......**..
+//     0x00000C0C,  // .**......**..
+//     0x00000C0C,  // .**......**..
+//     0x00000C0C,  // .**......**..
+//     0x00000C0C,  // .**......**..
+//     0x00000C0C,  // .**......**..
+//     0x00000C1C,  // .**.....***..
+//     0x00000FFC,  // .**********..
+//     0x000003E0,  // ...*****.....
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//  },
   {             // 251
-     13, 27,
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x000000E0,  // .....***.....
-     0x000001A0,  // ....**.*.....
-     0x00000130,  // ....*..**....
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000C0C,  // .**......**..
-     0x00000C0C,  // .**......**..
-     0x00000C0C,  // .**......**..
-     0x00000C0C,  // .**......**..
-     0x00000C0C,  // .**......**..
-     0x00000C0C,  // .**......**..
-     0x00000C0C,  // .**......**..
-     0x00000C0C,  // .**......**..
-     0x00000C0C,  // .**......**..
-     0x00000C1C,  // .**.....***..
-     0x00000FFC,  // .**********..
-     0x000003E0,  // ...*****.....
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-  },
+       16, 27,
+       0x0,    // ................
+       0x0,    // ................
+       0x78,   // ..........####..
+       0xfc,   // .........######.
+       0x1e6,  // ........####..##
+       0x1fe,  // ........########
+       0x1de,  // ........###.####
+       0x1e0,  // ........####....
+       0x70f8, // ..###....#####..
+       0xf8c0, // .#####...##.....
+       0x19dc0,// ##..###.###.....
+       0x18f80,// ##...#####......
+       0x1c780,// ###...####......
+       0xcf00, // .##..####.......
+       0x1f98, // ....######..##..
+       0x39f0, // ...###..#####...
+       0x70e0, // ..###....###....
+       0xe000, // .###............
+       0x1e000,// ####............
+       0x1b000,// ##.##...........
+       0x19800,// ##..##..........
+       0xcc00, // .##..##.........
+       0x6600, // ..##..##........
+       0x3b80, // ...###.###......
+       0x3b80, // ...###.###......
+       0x0,    // ................
+       0x0,    // ................
+  },
+//  {             // 251
+//     13, 27,
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x000000E0,  // .....***.....
+//     0x000001A0,  // ....**.*.....
+//     0x00000130,  // ....*..**....
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000C0C,  // .**......**..
+//     0x00000C0C,  // .**......**..
+//     0x00000C0C,  // .**......**..
+//     0x00000C0C,  // .**......**..
+//     0x00000C0C,  // .**......**..
+//     0x00000C0C,  // .**......**..
+//     0x00000C0C,  // .**......**..
+//     0x00000C0C,  // .**......**..
+//     0x00000C0C,  // .**......**..
+//     0x00000C1C,  // .**.....***..
+//     0x00000FFC,  // .**********..
+//     0x000003E0,  // ...*****.....
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//  },
   {             // 252
      13, 27,
      0x00000000,  // .............
@@ -6630,93 +6870,197 @@
      0x00000000,  // .............
   },
   {             // 253
-     12, 27,
-     0x00000000,  // ............
-     0x00000000,  // ............
-     0x00000000,  // ............
-     0x00000000,  // ............
-     0x00000000,  // ............
-     0x00000038,  // ......***...
-     0x00000070,  // .....***....
-     0x00000040,  // .....*......
-     0x00000000,  // ............
-     0x00000000,  // ............
-     0x00000606,  // .**......**.
-     0x0000060E,  // .**.....***.
-     0x0000060C,  // .**.....**..
-     0x0000030C,  // ..**....**..
-     0x00000318,  // ..**...**...
-     0x00000318,  // ..**...**...
-     0x00000198,  // ...**..**...
-     0x000001B0,  // ...**.**....
-     0x000001B0,  // ...**.**....
-     0x000000F0,  // ....****....
-     0x000000E0,  // ....***.....
-     0x000000E0,  // ....***.....
-     0x000000C0,  // ....**......
-     0x000000C0,  // ....**......
-     0x000001C0,  // ...***......
-     0x00000780,  // .****.......
-     0x00000700,  // .***........
-  },
+        16, 27,
+        0x0,    // ................
+        0x0,    // ................
+        0x0,    // ................
+        0x0,    // ................
+        0x0,    // ................
+        0x6006, // .##..........##.
+        0xf3cf, // ####..####..####
+        0xf7ef, // ####.######.####
+        0x3c3c, // ..####....####..
+        0x1998, // ...##..##..##...
+        0x318c, // ..##...##...##..
+        0x318c, // ..##...##...##..
+        0x30cc, // ..##....##..##..
+        0x38dc, // ..###...##.###..
+        0x1c38, // ...###....###...
+        0xff0,  // ....########....
+        0xff0,  // ....########....
+        0xc30,  // ....##....##....
+        0x1818, // ...##......##...
+        0x381c, // ..###......###..
+        0xfc3f, // ######....######
+        0xfc3f, // ######....######
+        0x0,    // ................
+        0x0,    // ................
+        0x0,    // ................
+        0x0,    // ................
+        0x0,    // ................
+  },
+//  {             // 253
+//     12, 27,
+//     0x00000000,  // ............
+//     0x00000000,  // ............
+//     0x00000000,  // ............
+//     0x00000000,  // ............
+//     0x00000000,  // ............
+//     0x00000038,  // ......***...
+//     0x00000070,  // .....***....
+//     0x00000040,  // .....*......
+//     0x00000000,  // ............
+//     0x00000000,  // ............
+//     0x00000606,  // .**......**.
+//     0x0000060E,  // .**.....***.
+//     0x0000060C,  // .**.....**..
+//     0x0000030C,  // ..**....**..
+//     0x00000318,  // ..**...**...
+//     0x00000318,  // ..**...**...
+//     0x00000198,  // ...**..**...
+//     0x000001B0,  // ...**.**....
+//     0x000001B0,  // ...**.**....
+//     0x000000F0,  // ....****....
+//     0x000000E0,  // ....***.....
+//     0x000000E0,  // ....***.....
+//     0x000000C0,  // ....**......
+//     0x000000C0,  // ....**......
+//     0x000001C0,  // ...***......
+//     0x00000780,  // .****.......
+//     0x00000700,  // .***........
+//  },
   {             // 254
-     13, 27,
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000C00,  // .**..........
-     0x00000C00,  // .**..........
-     0x00000C00,  // .**..........
-     0x00000C00,  // .**..........
-     0x00000DF0,  // .**.*****....
-     0x00000FFC,  // .**********..
-     0x00000F1C,  // .****...***..
-     0x00000E0E,  // .***.....***.
-     0x00000C06,  // .**.......**.
-     0x00000C06,  // .**.......**.
-     0x00000C06,  // .**.......**.
-     0x00000C06,  // .**.......**.
-     0x00000E0E,  // .***.....***.
-     0x00000F1C,  // .****...***..
-     0x00000FFC,  // .**********..
-     0x00000CF0,  // .**..****....
-     0x00000C00,  // .**..........
-     0x00000C00,  // .**..........
-     0x00000C00,  // .**..........
-     0x00000C00,  // .**..........
-     0x00000C00,  // .**..........
-  },
+        16, 27,
+        0x0,    // ................
+        0x0,    // ................
+        0x0,    // ................
+        0x0,    // ................
+        0x0,    // ................
+        0x4,    // ..............#.
+        0x1180c,// #...##.......##.
+        0x19c18,// ##..###.....##..
+        0xd630, // .##.#.##...##...
+        0x7360, // ..###..##.##....
+        0x31c0, // ...##...###.....
+        0x19f0, // ....##..#####...
+        0x1f50, // ....#####.#.#...
+        0x1650, // ....#.##..#.#...
+        0x1f50, // ....#####.#.#...
+        0x19f0, // ....##..#####...
+        0x31c0, // ...##...###.....
+        0x7360, // ..###..##.##....
+        0xd630, // .##.#.##...##...
+        0x19c18,// ##..###.....##..
+        0x1180c,// #...##.......##.
+        0x4,    // ..............#.
+        0x0,    // ................
+        0x0,    // ................
+        0x0,    // ................
+        0x0,    // ................
+        0x0,    // ................
+  },
+//  {             // 254
+//     13, 27,
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000000,  // .............
+//     0x00000C00,  // .**..........
+//     0x00000C00,  // .**..........
+//     0x00000C00,  // .**..........
+//     0x00000C00,  // .**..........
+//     0x00000DF0,  // .**.*****....
+//     0x00000FFC,  // .**********..
+//     0x00000F1C,  // .****...***..
+//     0x00000E0E,  // .***.....***.
+//     0x00000C06,  // .**.......**.
+//     0x00000C06,  // .**.......**.
+//     0x00000C06,  // .**.......**.
+//     0x00000C06,  // .**.......**.
+//     0x00000E0E,  // .***.....***.
+//     0x00000F1C,  // .****...***..
+//     0x00000FFC,  // .**********..
+//     0x00000CF0,  // .**..****....
+//     0x00000C00,  // .**..........
+//     0x00000C00,  // .**..........
+//     0x00000C00,  // .**..........
+//     0x00000C00,  // .**..........
+//     0x00000C00,  // .**..........
+//  },
   {             // 255
-     12, 27,
-     0x00000000,  // ............
-     0x00000000,  // ............
-     0x00000000,  // ............
-     0x00000000,  // ............
-     0x00000000,  // ............
-     0x00000000,  // ............
-     0x000001B8,  // ...**.***...
-     0x000001B8,  // ...**.***...
-     0x00000000,  // ............
-     0x00000000,  // ............
-     0x00000606,  // .**......**.
-     0x0000060E,  // .**.....***.
-     0x0000060C,  // .**.....**..
-     0x0000030C,  // ..**....**..
-     0x00000318,  // ..**...**...
-     0x00000318,  // ..**...**...
-     0x00000198,  // ...**..**...
-     0x000001B0,  // ...**.**....
-     0x000001B0,  // ...**.**....
-     0x000000F0,  // ....****....
-     0x000000E0,  // ....***.....
-     0x000000E0,  // ....***.....
-     0x000000C0,  // ....**......
-     0x000000C0,  // ....**......
-     0x000001C0,  // ...***......
-     0x00000780,  // .****.......
-     0x00000700,  // .***........
-  },
+     16, 27,
+        0x0,    // ................
+        0x0,    // ................
+        0x7f80, // ..########......
+        0xffc0, // .##########.....
+        0x1ffe0,        // ############....
+        0x1f3e0,        // #####..#####....
+        0x1e1e0,        // ####....####....
+        0x1c0e0,        // ###......###....
+        0x1c0e0,        // ###......###....
+        0x1c0e0,        // ###......###....
+        0x1c0e0,        // ###......###....
+        0x1c0e0,        // ###......###....
+        0x1c0e0,        // ###......###....
+        0x1c0e0,        // ###......###....
+        0x1c0e0,        // ###......###....
+        0x1c0e0,        // ###......###....
+        0x1c7fc,        // ###...#########.
+        0x1c3f8,        // ###....#######..
+        0x1c1f0,        // ###.....#####...
+        0x1c0e0,        // ###......###....
+        0x40,   // ..........#.....
+        0x0,    // ................
+        0x0,    // ................
+        0x0,    // ................
+        0x0,    // ................
+        0x0,    // ................
+        0x0,    // ................
+  },
+//  {             // 255
+//     12, 27,
+//     0x00000000,  // ............
+//     0x00000000,  // ............
+//     0x00000000,  // ............
+//     0x00000000,  // ............
+//     0x00000000,  // ............
+//     0x00000000,  // ............
+//     0x000001B8,  // ...**.***...
+//     0x000001B8,  // ...**.***...
+//     0x00000000,  // ............
+//     0x00000000,  // ............
+//     0x00000606,  // .**......**.
+//     0x0000060E,  // .**.....***.
+//     0x0000060C,  // .**.....**..
+//     0x0000030C,  // ..**....**..
+//     0x00000318,  // ..**...**...
+//     0x00000318,  // ..**...**...
+//     0x00000198,  // ...**..**...
+//     0x000001B0,  // ...**.**....
+//     0x000001B0,  // ...**.**....
+//     0x000000F0,  // ....****....
+//     0x000000E0,  // ....***.....
+//     0x000000E0,  // ....***.....
+//     0x000000C0,  // ....**......
+//     0x000000C0,  // ....**......
+//     0x000001C0,  // ...***......
+//     0x00000780,  // .****.......
+//     0x00000700,  // .***........
+//  },
   };
+
+// WarEagle-Symbol-Patch
+// Zeichen     Symbol
+//
+//     255     Pfeil
+//     254     Lautsprecher
+//     253     Wecker
+//     251     Maennchen
+//     250     "NEU"
+//     249     "REC"
+//     244     Weiter-Links
+//     245     TV
+//     239     TV-verschluesselt   // Schmales Verschlüsselt (kw)
+//     128     Leerspalte (kw)
diff -u vdr-1.4.2/fontsml-iso8859-15.c vdr-1.4.2-kw/fontsml-iso8859-15.c
--- vdr-1.4.2/fontsml-iso8859-15.c	2006-02-05 14:50:13.000000000 +0100
+++ vdr-1.4.2-kw/fontsml-iso8859-15.c	2006-04-09 19:10:50.000000000 +0200
@@ -2399,30 +2399,30 @@
      0x00000000,  //
      0x00000000,  //
   },
-  {             // 128
-     0, 22,
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
-     0x00000000,  //
+  {             // 128  unVerschlüsselt
+     6, 22,
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
   },
   {             // 129
      0, 22,
@@ -5174,31 +5174,56 @@
      0x00000000,  // ......
      0x00000000,  // ......
   },
-  {             // 239
-     5, 22,
-     0x00000000,  // .....
-     0x00000000,  // .....
-     0x00000000,  // .....
-     0x00000000,  // .....
-     0x0000001B,  // **.**
-     0x0000001B,  // **.**
-     0x00000000,  // .....
-     0x00000000,  // .....
-     0x0000000C,  // .**..
-     0x0000000C,  // .**..
-     0x0000000C,  // .**..
-     0x0000000C,  // .**..
-     0x0000000C,  // .**..
-     0x0000000C,  // .**..
-     0x0000000C,  // .**..
-     0x0000000C,  // .**..
-     0x0000000C,  // .**..
-     0x0000000C,  // .**..
-     0x00000000,  // .....
-     0x00000000,  // .....
-     0x00000000,  // .....
-     0x00000000,  // .....
+  {             // 239  Verschlüsselt
+     6, 22,
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x0000000C,  // ..**..
+     0x0000000C,  // ..**..
+     0x0000000C,  // ..**..
+     0x0000000C,  // ..**..
+     0x0000000C,  // ..**..
+     0x0000000C,  // ..**..
+     0x0000000C,  // ..**..
+     0x0000000C,  // ..**..
+     0x0000000C,  // ..**..
+     0x0000000C,  // ..**..
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
+     0x00000000,  // ......
   },
+//  {             // 239
+//     5, 22,
+//     0x00000000,  // .....
+//     0x00000000,  // .....
+//     0x00000000,  // .....
+//     0x00000000,  // .....
+//     0x0000001B,  // **.**
+//     0x0000001B,  // **.**
+//     0x00000000,  // .....
+//     0x00000000,  // .....
+//     0x0000000C,  // .**..
+//     0x0000000C,  // .**..
+//     0x0000000C,  // .**..
+//     0x0000000C,  // .**..
+//     0x0000000C,  // .**..
+//     0x0000000C,  // .**..
+//     0x0000000C,  // .**..
+//     0x0000000C,  // .**..
+//     0x0000000C,  // .**..
+//     0x0000000C,  // .**..
+//     0x00000000,  // .....
+//     0x00000000,  // .....
+//     0x00000000,  // .....
+//     0x00000000,  // .....
+//  },
   {             // 240
      11, 22,
      0x00000000,  // ...........
@@ -5300,55 +5325,105 @@
      0x00000000,  // ...........
   },
   {             // 244
-     11, 22,
-     0x00000000,  // ...........
-     0x00000000,  // ...........
-     0x00000000,  // ...........
-     0x00000000,  // ...........
-     0x00000060,  // ....**.....
-     0x000000F0,  // ...****....
-     0x00000198,  // ..**..**...
-     0x00000000,  // ...........
-     0x000000F8,  // ...*****...
-     0x000001FC,  // ..*******..
-     0x0000018C,  // ..**...**..
-     0x00000306,  // .**.....**.
-     0x00000306,  // .**.....**.
-     0x00000306,  // .**.....**.
-     0x00000306,  // .**.....**.
-     0x0000018C,  // ..**...**..
-     0x000001FC,  // ..*******..
-     0x000000F8,  // ...*****...
-     0x00000000,  // ...........
-     0x00000000,  // ...........
-     0x00000000,  // ...........
-     0x00000000,  // ...........
-  },
-  {             // 245
-     11, 22,
-     0x00000000,  // ...........
-     0x00000000,  // ...........
-     0x00000000,  // ...........
-     0x00000000,  // ...........
-     0x000000C8,  // ...**..*...
-     0x00000168,  // ..*.**.*...
-     0x00000130,  // ..*..**....
-     0x00000000,  // ...........
-     0x000000F8,  // ...*****...
-     0x000001FC,  // ..*******..
-     0x0000018C,  // ..**...**..
-     0x00000306,  // .**.....**.
-     0x00000306,  // .**.....**.
-     0x00000306,  // .**.....**.
-     0x00000306,  // .**.....**.
-     0x0000018C,  // ..**...**..
-     0x000001FC,  // ..*******..
-     0x000000F8,  // ...*****...
-     0x00000000,  // ...........
-     0x00000000,  // ...........
-     0x00000000,  // ...........
-     0x00000000,  // ...........
-  },
+    16, 22,
+    0x0,        // ................................
+    0x0,        // ................................
+    0x0,        // ................................
+    0x0,        // ................................
+    0x0,        // ................................
+    0x0,        // ................................
+    0x0,        // ................................
+    0x0,        // ................................
+    0x70,       // .........................###....
+    0xe0,       // ........................###.....
+    0x1c0,      // .......................###......
+    0x380,      // ......................###.......
+    0x300,      // ......................##........
+    0x300,      // ......................##........
+    0x7ffe,     // .................##############.
+    0x6006,     // .................##..........##.
+    0x6006,     // .................##..........##.
+    0x6006,     // .................##..........##.
+    0x6006,     // .................##..........##.
+    0x7ffe,     // .................##############.
+    0x0,        // ................................
+    0x0,        // ................................
+  },
+//  {             // 244
+//     11, 22,
+//     0x00000000,  // ...........
+//     0x00000000,  // ...........
+//     0x00000000,  // ...........
+//     0x00000000,  // ...........
+//     0x00000060,  // ....**.....
+//     0x000000F0,  // ...****....
+//     0x00000198,  // ..**..**...
+//     0x00000000,  // ...........
+//     0x000000F8,  // ...*****...
+//     0x000001FC,  // ..*******..
+//     0x0000018C,  // ..**...**..
+//     0x00000306,  // .**.....**.
+//     0x00000306,  // .**.....**.
+//     0x00000306,  // .**.....**.
+//     0x00000306,  // .**.....**.
+//     0x0000018C,  // ..**...**..
+//     0x000001FC,  // ..*******..
+//     0x000000F8,  // ...*****...
+//     0x00000000,  // ...........
+//     0x00000000,  // ...........
+//     0x00000000,  // ...........
+//     0x00000000,  // ...........
+//  },
+  {             // 245    TV
+    16, 22,
+    0x0,        // ................................
+    0x0,        // ................................
+    0x0,        // ................................
+    0x0,        // ................................
+    0x6006,     // .................##..........##.
+    0x700e,     // .................###........###.
+    0x381c,     // ..................###......###..
+    0x1c38,     // ...................###....###...
+    0xe70,      // ....................###..###....
+    0x7ffe,     // .................##############.
+    0x700e,     // .................###........###.
+    0x6006,     // .................##..........##.
+    0x6006,     // .................##..........##.
+    0x6006,     // .................##..........##.
+    0x6006,     // .................##..........##.
+    0x6006,     // .................##..........##.
+    0x6006,     // .................##..........##.
+    0x6006,     // .................##..........##.
+    0x6006,     // .................##..........##.
+    0x700e,     // .................###........###.
+    0x7ffe,     // .................##############.
+    0x0,        // ................................
+  },
+//  {             // 245
+//     11, 22,
+//     0x00000000,  // ...........
+//     0x00000000,  // ...........
+//     0x00000000,  // ...........
+//     0x00000000,  // ...........
+//     0x000000C8,  // ...**..*...
+//     0x00000168,  // ..*.**.*...
+//     0x00000130,  // ..*..**....
+//     0x00000000,  // ...........
+//     0x000000F8,  // ...*****...
+//     0x000001FC,  // ..*******..
+//     0x0000018C,  // ..**...**..
+//     0x00000306,  // .**.....**.
+//     0x00000306,  // .**.....**.
+//     0x00000306,  // .**.....**.
+//     0x00000306,  // .**.....**.
+//     0x0000018C,  // ..**...**..
+//     0x000001FC,  // ..*******..
+//     0x000000F8,  // ...*****...
+//     0x00000000,  // ...........
+//     0x00000000,  // ...........
+//     0x00000000,  // ...........
+//     0x00000000,  // ...........
+//  },
   {             // 246
      11, 22,
      0x00000000,  // ...........
@@ -5425,80 +5500,155 @@
      0x00000000,  // ...........
   },
   {             // 249
-     10, 22,
-     0x00000000,  // ..........
-     0x00000000,  // ..........
-     0x00000000,  // ..........
-     0x00000000,  // ..........
-     0x00000060,  // ...**.....
-     0x00000030,  // ....**....
-     0x00000018,  // .....**...
-     0x00000000,  // ..........
-     0x00000186,  // .**....**.
-     0x00000186,  // .**....**.
-     0x00000186,  // .**....**.
-     0x00000186,  // .**....**.
-     0x00000186,  // .**....**.
-     0x00000186,  // .**....**.
-     0x00000186,  // .**....**.
-     0x0000018E,  // .**...***.
-     0x000001FE,  // .********.
-     0x000000F6,  // ..****.**.
-     0x00000000,  // ..........
-     0x00000000,  // ..........
-     0x00000000,  // ..........
-     0x00000000,  // ..........
-  },
+     16, 22,
+     0x0,    // ................
+     0xf800, // #####...........
+     0xcc00, // ##..##..........
+     0xfc00, // ######..........
+     0xf800, // #####...........
+     0xdc00, // ##.###..........
+     0x0,    // ................
+     0x1f80, // ...######.......
+     0x1f80, // ...######.......
+     0x1800, // ...##...........
+     0x1e00, // ...####.........
+     0x1800, // ...##...........
+     0x1f80, // ...######.......
+     0x1f80, // ...######.......
+     0x0,    // ................
+     0x3c0,  // ......####......
+     0x7e0,  // .....######.....
+     0xe60,  // ....###..##.....
+     0xc00,  // ....##..........
+     0xe60,  // ....###..##.....
+     0x7e0,  // .....######.....
+     0x3c0,  // ......####......
+  },
+//  {             // 249
+//     10, 22,
+//     0x00000000,  // ..........
+//     0x00000000,  // ..........
+//     0x00000000,  // ..........
+//     0x00000000,  // ..........
+//     0x00000060,  // ...**.....
+//     0x00000030,  // ....**....
+//     0x00000018,  // .....**...
+//     0x00000000,  // ..........
+//     0x00000186,  // .**....**.
+//     0x00000186,  // .**....**.
+//     0x00000186,  // .**....**.
+//     0x00000186,  // .**....**.
+//     0x00000186,  // .**....**.
+//     0x00000186,  // .**....**.
+//     0x00000186,  // .**....**.
+//     0x0000018E,  // .**...***.
+//     0x000001FE,  // .********.
+//     0x000000F6,  // ..****.**.
+//     0x00000000,  // ..........
+//     0x00000000,  // ..........
+//     0x00000000,  // ..........
+//     0x00000000,  // ..........
+//  },
   {             // 250
-     10, 22,
-     0x00000000,  // ..........
-     0x00000000,  // ..........
-     0x00000000,  // ..........
-     0x00000000,  // ..........
-     0x0000000C,  // ......**..
-     0x00000018,  // .....**...
-     0x00000030,  // ....**....
-     0x00000000,  // ..........
-     0x00000186,  // .**....**.
-     0x00000186,  // .**....**.
-     0x00000186,  // .**....**.
-     0x00000186,  // .**....**.
-     0x00000186,  // .**....**.
-     0x00000186,  // .**....**.
-     0x00000186,  // .**....**.
-     0x0000018E,  // .**...***.
-     0x000001FE,  // .********.
-     0x000000F6,  // ..****.**.
-     0x00000000,  // ..........
-     0x00000000,  // ..........
-     0x00000000,  // ..........
-     0x00000000,  // ..........
-  },
+        16, 22,
+        0x0,    // ................
+        0xc600, // ##...##.........
+        0xe600, // ###..##.........
+        0xf600, // ####.##.........
+        0xde00, // ##.####.........
+        0xce00, // ##..###.........
+        0xc600, // ##...##.........
+        0x0,    // ................
+        0x1fc0, // ...#######......
+        0x1fc0, // ...#######......
+        0x1800, // ...##...........
+        0x1f00, // ...#####........
+        0x1800, // ...##...........
+        0x1fc0, // ...#######......
+        0x1fc0, // ...#######......
+        0x0,    // ................
+        0x318,  // ......##...##...
+        0x318,  // ......##...##...
+        0x318,  // ......##...##...
+        0x318,  // ......##...##...
+        0x3f8,  // ......#######...
+        0x1f0,  // .......#####....
+  },
+//  {             // 250
+//     10, 22,
+//     0x00000000,  // ..........
+//     0x00000000,  // ..........
+//     0x00000000,  // ..........
+//     0x00000000,  // ..........
+//     0x0000000C,  // ......**..
+//     0x00000018,  // .....**...
+//     0x00000030,  // ....**....
+//     0x00000000,  // ..........
+//     0x00000186,  // .**....**.
+//     0x00000186,  // .**....**.
+//     0x00000186,  // .**....**.
+//     0x00000186,  // .**....**.
+//     0x00000186,  // .**....**.
+//     0x00000186,  // .**....**.
+//     0x00000186,  // .**....**.
+//     0x0000018E,  // .**...***.
+//     0x000001FE,  // .********.
+//     0x000000F6,  // ..****.**.
+//     0x00000000,  // ..........
+//     0x00000000,  // ..........
+//     0x00000000,  // ..........
+//     0x00000000,  // ..........
+//  },
   {             // 251
-     10, 22,
-     0x00000000,  // ..........
-     0x00000000,  // ..........
-     0x00000000,  // ..........
-     0x00000000,  // ..........
-     0x00000030,  // ....**....
-     0x00000078,  // ...****...
-     0x000000CC,  // ..**..**..
-     0x00000000,  // ..........
-     0x00000186,  // .**....**.
-     0x00000186,  // .**....**.
-     0x00000186,  // .**....**.
-     0x00000186,  // .**....**.
-     0x00000186,  // .**....**.
-     0x00000186,  // .**....**.
-     0x00000186,  // .**....**.
-     0x0000018E,  // .**...***.
-     0x000001FE,  // .********.
-     0x000000F6,  // ..****.**.
-     0x00000000,  // ..........
-     0x00000000,  // ..........
-     0x00000000,  // ..........
-     0x00000000,  // ..........
-  },
+        16, 22,
+        0x0,            // ................
+        0x78,           // ..........####..
+        0xfc,           // .........######.
+        0x1e6,          // ........####..##
+        0x1de,          // ........###.####
+        0x1e0,          // ........####....
+        0x70f8,         // ..###....#####..
+        0xf8c0,         // .#####...##.....
+        0x19dc0,        // ##..###.###.....
+        0x18f80,        // ##...#####......
+        0x1c780,        // ###...####......
+        0xcf00,         // .##..####.......
+        0x1f98,         // ....######..##..
+        0x39f0,         // ...###..#####...
+        0x70e0,         // ..###....###....
+        0xe000,         // .###............
+        0x1e000,        // ####............
+        0x1b000,        // ##.##...........
+        0x19800,        // ##..##..........
+        0x6600,         // ..##..##........
+        0x3b80,         // ...###.###......
+        0x0,            // ................
+  },
+//  {             // 251
+//     10, 22,
+//     0x00000000,  // ..........
+//     0x00000000,  // ..........
+//     0x00000000,  // ..........
+//     0x00000000,  // ..........
+//     0x00000030,  // ....**....
+//     0x00000078,  // ...****...
+//     0x000000CC,  // ..**..**..
+//     0x00000000,  // ..........
+//     0x00000186,  // .**....**.
+//     0x00000186,  // .**....**.
+//     0x00000186,  // .**....**.
+//     0x00000186,  // .**....**.
+//     0x00000186,  // .**....**.
+//     0x00000186,  // .**....**.
+//     0x00000186,  // .**....**.
+//     0x0000018E,  // .**...***.
+//     0x000001FE,  // .********.
+//     0x000000F6,  // ..****.**.
+//     0x00000000,  // ..........
+//     0x00000000,  // ..........
+//     0x00000000,  // ..........
+//     0x00000000,  // ..........
+//  },
   {             // 252
      10, 22,
      0x00000000,  // ..........
@@ -5525,78 +5675,165 @@
      0x00000000,  // ..........
   },
   {             // 253
-     10, 22,
-     0x00000000,  // ..........
-     0x00000000,  // ..........
-     0x00000000,  // ..........
-     0x00000000,  // ..........
-     0x0000000C,  // ......**..
-     0x00000018,  // .....**...
-     0x00000030,  // ....**....
-     0x00000000,  // ..........
-     0x00000186,  // .**....**.
-     0x00000186,  // .**....**.
-     0x00000186,  // .**....**.
-     0x000000CC,  // ..**..**..
-     0x000000CC,  // ..**..**..
-     0x000000CC,  // ..**..**..
-     0x00000048,  // ...*..*...
-     0x00000078,  // ...****...
-     0x00000030,  // ....**....
-     0x00000030,  // ....**....
-     0x00000030,  // ....**....
-     0x00000030,  // ....**....
-     0x000000E0,  // ..***.....
-     0x000000E0,  // ..***.....
-  },
+        16, 22,
+        0x0,    // ................
+        0x0,    // ................
+        0x0,    // ................
+        0x6006, // .##..........##.
+        0xf3cf, // ####..####..####
+        0xf7ef, // ####.######.####
+        0x3c3c, // ..####....####..
+        0x1998, // ...##..##..##...
+        0x318c, // ..##...##...##..
+        0x318c, // ..##...##...##..
+        0x30cc, // ..##....##..##..
+        0x38dc, // ..###...##.###..
+        0x1c38, // ...###....###...
+        0xff0,  // ....########....
+        0xff0,  // ....########....
+        0xc30,  // ....##....##....
+        0x1818, // ...##......##...
+        0x381c, // ..###......###..
+        0xfc3f, // ######....######
+        0xfc3f, // ######....######
+        0x0,    // ................
+        0x0,    // ................
+  },
+//  {             // 253
+//     10, 22,
+//     0x00000000,  // ..........
+//     0x00000000,  // ..........
+//     0x00000000,  // ..........
+//     0x00000000,  // ..........
+//     0x0000000C,  // ......**..
+//     0x00000018,  // .....**...
+//     0x00000030,  // ....**....
+//     0x00000000,  // ..........
+//     0x00000186,  // .**....**.
+//     0x00000186,  // .**....**.
+//     0x00000186,  // .**....**.
+//     0x000000CC,  // ..**..**..
+//     0x000000CC,  // ..**..**..
+//     0x000000CC,  // ..**..**..
+//     0x00000048,  // ...*..*...
+//     0x00000078,  // ...****...
+//     0x00000030,  // ....**....
+//     0x00000030,  // ....**....
+//     0x00000030,  // ....**....
+//     0x00000030,  // ....**....
+//     0x000000E0,  // ..***.....
+//     0x000000E0,  // ..***.....
+//  },
   {             // 254
-     11, 22,
-     0x00000000,  // ...........
-     0x00000000,  // ...........
-     0x00000000,  // ...........
-     0x00000000,  // ...........
-     0x00000300,  // .**........
-     0x00000300,  // .**........
-     0x00000300,  // .**........
-     0x00000300,  // .**........
-     0x00000378,  // .**.****...
-     0x000003FC,  // .********..
-     0x0000038C,  // .***...**..
-     0x00000306,  // .**.....**.
-     0x00000306,  // .**.....**.
-     0x00000306,  // .**.....**.
-     0x00000306,  // .**.....**.
-     0x0000038C,  // .***...**..
-     0x000003FC,  // .********..
-     0x00000378,  // .**.****...
-     0x00000300,  // .**........
-     0x00000300,  // .**........
-     0x00000300,  // .**........
-     0x00000300,  // .**........
-  },
-  {             // 255
-     10, 22,
-     0x00000000,  // ..........
-     0x00000000,  // ..........
-     0x00000000,  // ..........
-     0x00000000,  // ..........
-     0x000000CC,  // ..**..**..
-     0x000000CC,  // ..**..**..
-     0x00000000,  // ..........
-     0x00000000,  // ..........
-     0x00000186,  // .**....**.
-     0x00000186,  // .**....**.
-     0x00000186,  // .**....**.
-     0x000000CC,  // ..**..**..
-     0x000000CC,  // ..**..**..
-     0x000000CC,  // ..**..**..
-     0x00000048,  // ...*..*...
-     0x00000078,  // ...****...
-     0x00000030,  // ....**....
-     0x00000030,  // ....**....
-     0x00000030,  // ....**....
-     0x00000030,  // ....**....
-     0x000000E0,  // ..***.....
-     0x000000E0,  // ..***.....
-  },
+        16, 22,
+        0x0,    // ................
+        0x0,    // ................
+        0x0,    // ................
+        0x4,    // ..............#.
+        0x1180c,        // #...##.......##.
+        0x19c18,        // ##..###.....##..
+        0xd630, // .##.#.##...##...
+        0x7360, // ..###..##.##....
+        0x31c0, // ...##...###.....
+        0x19f0, // ....##..#####...
+        0x1f50, // ....#####.#.#...
+        0x1650, // ....#.##..#.#...
+        0x1f50, // ....#####.#.#...
+        0x19f0, // ....##..#####...
+        0x31c0, // ...##...###.....
+        0x7360, // ..###..##.##....
+        0xd630, // .##.#.##...##...
+        0x19c18,        // ##..###.....##..
+        0x1180c,        // #...##.......##.
+        0x4,    // ..............#.
+        0x0,    // ................
+        0x0,    // ................
+  },
+//  {             // 254
+//     11, 22,
+//     0x00000000,  // ...........
+//     0x00000000,  // ...........
+//     0x00000000,  // ...........
+//     0x00000000,  // ...........
+//     0x00000300,  // .**........
+//     0x00000300,  // .**........
+//     0x00000300,  // .**........
+//     0x00000300,  // .**........
+//     0x00000378,  // .**.****...
+//     0x000003FC,  // .********..
+//     0x0000038C,  // .***...**..
+//     0x00000306,  // .**.....**.
+//     0x00000306,  // .**.....**.
+//     0x00000306,  // .**.....**.
+//     0x00000306,  // .**.....**.
+//     0x0000038C,  // .***...**..
+//     0x000003FC,  // .********..
+//     0x00000378,  // .**.****...
+//     0x00000300,  // .**........
+//     0x00000300,  // .**........
+//     0x00000300,  // .**........
+//     0x00000300,  // .**........
+//  },
+   {             // 255
+     16, 22,
+     0x0,            // ................
+     0x7f80,         // ..########......
+     0xffc0,         // .##########.....
+     0x1ffe0,        // ############....
+     0x1f3e0,        // #####..#####....
+     0x1e1e0,        // ####....####....
+     0x1c0e0,        // ###......###....
+     0x1c0e0,        // ###......###....
+     0x1c0e0,        // ###......###....
+     0x1c0e0,        // ###......###....
+     0x1c0e0,        // ###......###....
+     0x1c0e0,        // ###......###....
+     0x1c0e0,        // ###......###....
+     0x1c0e0,        // ###......###....
+     0x1c0e0,        // ###......###....
+     0x1c7fc,        // ###...#########.
+     0x1c3f8,        // ###....#######..
+     0x1c1f0,        // ###.....#####...
+     0x1c0e0,        // ###......###....
+     0x40,           // ..........#.....
+     0x0,            // ................
+     0x0,            // ................
+  },
+//  {             // 255
+//     10, 22,
+//     0x00000000,  // ..........
+//     0x00000000,  // ..........
+//     0x00000000,  // ..........
+//     0x00000000,  // ..........
+//     0x000000CC,  // ..**..**..
+//     0x000000CC,  // ..**..**..
+//     0x00000000,  // ..........
+//     0x00000000,  // ..........
+//     0x00000186,  // .**....**.
+//     0x00000186,  // .**....**.
+//     0x00000186,  // .**....**.
+//     0x000000CC,  // ..**..**..
+//     0x000000CC,  // ..**..**..
+//     0x000000CC,  // ..**..**..
+//     0x00000048,  // ...*..*...
+//     0x00000078,  // ...****...
+//     0x00000030,  // ....**....
+//     0x00000030,  // ....**....
+//     0x00000030,  // ....**....
+//     0x00000030,  // ....**....
+//     0x000000E0,  // ..***.....
+//     0x000000E0,  // ..***.....
+//  },
   };
+
+// WarEagle-Symbol-Patch
+// Zeichen     Symbol
+//
+//     255     Pfeil
+//     254     Lautsprecher
+//     253     Wecker
+//     251     Maennchen
+//     250     "NEU"
+//     249     "REC"
+//     244     Weiter-Links
+//     245     TV
diff -u vdr-1.4.2/i18n.c vdr-1.4.2-kw/i18n.c
--- vdr-1.4.2/i18n.c	2006-05-05 15:26:09.000000000 +0200
+++ vdr-1.4.2-kw/i18n.c	2006-06-11 15:34:19.000000000 +0200
@@ -4316,6 +4316,95 @@
     "Opdel redigerede filer",
     "Dìlit editované soubory",
   },
+  { "Setup.Recording$Show date",
+    "Aufnahmedatum anzeigen",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+  },
+  { "Setup.Recording$Show time",
+    "Aufnahnezeit anzeigen",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+  },
+  { "Setup.Recording$Show length",
+    "Aufnahmedauer anzeigen",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+  },
+  { "Setup.Recording$Show 'New' indicator",
+    "Aufnahmeneumarkierung anzeigen",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+  },
+  
   { "Setup.Replay$Multi speed mode",
     "Mehrstufiger Vor-/Rücklauf",
     "Re¾im z veè hitrostmi",
diff -u vdr-1.4.2/iconpatch.h vdr-1.4.2-kw/iconpatch.h
--- vdr-1.4.2/iconpatch.h	2006-09-03 20:42:20.000000000 +0200
+++ vdr-1.4.2-kw/iconpatch.h	2006-04-09 18:40:32.000000000 +0200
@@ -0,0 +1,26 @@
+/*
+ * iconpatch.h: Information of iconpatch
+ *
+ * Diese Datei ist die Übersichtsdatei für den Iconpatch.
+ * Hier werden kleine Infos abgelegt.
+ * Der Iconpatch ändert die Dateien:
+ *   iconpatch.h
+ *   menu.c
+ *   recording.c
+ *   fontosd.c
+ *
+ */
+
+//Iconpatch-Variablen - Anfang
+#define ICON_RADIO         char(244)
+#define ICON_TV            char(245)
+//#define ICON_TV_VERSCHL    char(239)
+#define ICON_VERSCHL       char(239)
+#define ICON_UNVERSCHL     char(128)
+#define ICON_REC           char(249)
+#define ICON_NEU           char(250)
+#define ICON_RENNER        char(251)
+#define ICON_UHR           char(253)
+#define ICON_LAUTSPRECHER  char(254)
+#define ICON_PFEIL         char(255)
+//Iconpatch-Variablen - Ende
Gemeinsame Unterverzeichnisse: vdr-1.4.2/libsi und vdr-1.4.2-kw/libsi.
diff -u vdr-1.4.2/menu.c vdr-1.4.2-kw/menu.c
--- vdr-1.4.2/menu.c	2006-07-23 11:23:11.000000000 +0200
+++ vdr-1.4.2-kw/menu.c	2006-09-03 19:29:50.000000000 +0200
@@ -8,11 +8,13 @@
  */
 
 #include "menu.h"
+#include "iconpatch.h"
 #include <ctype.h>
 #include <limits.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <math.h>
 #include "channels.h"
 #include "config.h"
 #include "cutter.h"
@@ -363,8 +365,32 @@
   if (!channel->GroupSep()) {
      if (sortMode == csmProvider)
         asprintf(&buffer, "%d\t%s - %s", channel->Number(), channel->Provider(), channel->Name());
+//     else if (Setup.WarEagleIcons) {
+//        if (channel->Vpid() == 1 || channel->Vpid() == 0)
+//            asprintf(&buffer, "%d\t%c %-30s", channel->Number(), ICON_RADIO, channel->Name());
+//        else if (channel->Ca() == 0)
+//            asprintf(&buffer, "%d\t%c %-30s", channel->Number(), ICON_TV, channel->Name());
+//        else
+//            asprintf(&buffer, "%d\t%c %-30s", channel->Number(), ICON_TV_VERSCHL, channel->Name());
+//        }
+
+//        asprintf(&buffer, "%d\t%c %c %-30s", 
+//                    channel->Number(), 
+//                    channel->IsCrypted() ? ICON_VERSCHL : ICON_UNVERSCHL,
+//                    channel->IsTV()      ? ICON_TV      : ICON_RADIO, 
+//                    channel->Name()                    
+//        );
+//        }
      else
-        asprintf(&buffer, "%d\t%s", channel->Number(), channel->Name());
+        asprintf(&buffer, "%d\t%s%s%s%s  %s\t\t%s %s", channel->Number(), 
+                  channel->IsTV()      ? "t":" ", // TV         //kw
+                  channel->IsRadio()   ? "r":" ", // Radio      //kw
+                  channel->IsDolby()   ? "d":" ", // Dolby      //kw
+                  channel->IsCrypted() ? "x":" ", // encrypted  //kw
+                  channel->Name(),
+                  channel->Alang(0),
+                  channel->Alang(1)
+              );
      }
   else
      asprintf(&buffer, "---\t%s ----------------------------------------------------------------", channel->Name());
@@ -382,9 +408,14 @@
   void Setup(void);
   cChannel *GetChannel(int Index);
   void Propagate(void);
+  
+  bool IsFiltered(void);                      // kw-cfp 
+  void MessageFilterState(void);              // kw-cfp 
+  static int onlyTV, onlyRadio, onlyUncrypt;  // kw-cfp 
+  
 protected:
   eOSState Number(eKeys Key);
-  eOSState Switch(void);
+  eOSState Switch(eOSState returnVal);
   eOSState Edit(void);
   eOSState New(void);
   eOSState Delete(void);
@@ -395,6 +426,11 @@
   virtual eOSState ProcessKey(eKeys Key);
   };
 
+int cMenuChannels::onlyTV = 0;          // kw-cfp 
+int cMenuChannels::onlyRadio = 0;       // kw-cfp 
+int cMenuChannels::onlyUncrypt = 0;     // kw-cfp 
+  
+
 cMenuChannels::cMenuChannels(void)
 :cOsdMenu(tr("Channels"), CHNUMWIDTH)
 {
@@ -414,20 +450,40 @@
   if (!currentChannel)
      currentChannel = Channels.GetByNumber(cDevice::CurrentChannel());
   cMenuChannelItem *currentItem = NULL;
+  cMenuChannelItem *lastUsedItem = NULL;
+  cMenuChannelItem *firstUsedItem = NULL;
   Clear();
+
   for (cChannel *channel = Channels.First(); channel; channel = Channels.Next(channel)) {
-      if (!channel->GroupSep() || cMenuChannelItem::SortMode() == cMenuChannelItem::csmNumber && *channel->Name()) {
-         cMenuChannelItem *item = new cMenuChannelItem(channel);
-         Add(item);
-         if (channel == currentChannel)
-            currentItem = item;
-         }
+      if ((!channel->GroupSep() || cMenuChannelItem::SortMode() == cMenuChannelItem::csmNumber)
+            && *channel->Name()  //Channel must have a name
+	    && (channel->GroupSep() || //Do not filter Groupseperators
+        (  !(onlyTV      && !channel->IsTV()     )  //kw
+  		&& !(onlyRadio   && !channel->IsRadio()  )  //kw
+		&& !(onlyUncrypt && channel->IsCrypted() )  //kw
+	    ))) {
+            cMenuChannelItem *item = new cMenuChannelItem(channel);
+            Add(item);
+            if (channel == currentChannel)
+        	    currentItem = item;
+	    if (!channel->GroupSep()) {
+		    lastUsedItem = item;
+		if( !firstUsedItem )
+		    firstUsedItem = item;
+	    }
+      } else {
+            if (channel == currentChannel)
+              	currentItem = lastUsedItem; // current channel is now invisible, so we use the nearest channel
       }
+  }
   if (cMenuChannelItem::SortMode() != cMenuChannelItem::csmNumber)
      Sort();
+  if (!currentItem) // happens, if after filtering the first line is a groupsep
+     currentItem = firstUsedItem;
   SetCurrent(currentItem);
   SetHelp(tr("Button$Edit"), tr("Button$New"), tr("Button$Delete"), tr("Button$Mark"));
   Display();
+  MessageFilterState();
 }
 
 cChannel *cMenuChannels::GetChannel(int Index)
@@ -445,38 +501,61 @@
   Channels.SetModified(true);
 }
 
-eOSState cMenuChannels::Number(eKeys Key)
-{
-  if (HasSubMenu())
-     return osContinue;
-  if (numberTimer.TimedOut())
-     number = 0;
-  if (!number && Key == k0) {
-     cMenuChannelItem::IncSortMode();
-     Setup();
-     }
-  else {
-     number = number * 10 + Key - k0;
-     for (cMenuChannelItem *ci = (cMenuChannelItem *)First(); ci; ci = (cMenuChannelItem *)ci->Next()) {
-         if (!ci->Channel()->GroupSep() && ci->Channel()->Number() == number) {
-            SetCurrent(ci);
-            Display();
-            break;
-            }
-         }
-     numberTimer.Set(CHANNELNUMBERTIMEOUT);
-     }
-  return osContinue;
-}
+// kw-cfp  start
+bool cMenuChannels::IsFiltered(void)  
+{                                     
+  return onlyTV || onlyRadio || onlyUncrypt; 
+}                                            
+
+void cMenuChannels::MessageFilterState(void)    
+{
+   char *buffer = NULL;
+   if( IsFiltered() )
+      asprintf(&buffer, "Filter: only  %s  %s  %s",
+            onlyTV      ? "tv"          : "" ,
+            onlyRadio   ? "radio"       : "" ,
+            onlyUncrypt ? "free to air" : ""
+      );
+   else 
+      asprintf(&buffer, "unfiltered");
+   Skins.Message(mtStatus, buffer); 
+}
+// kw-cfp  end
+
+
+eOSState cMenuChannels::Number(eKeys Key)                                                                
+{                                                                                                        
+  if (HasSubMenu())                                                                                      
+     return osContinue;                                                                                  
+  if (numberTimer.TimedOut())                                                                            
+     number = 0;                                                                                         
+  if (!number && Key == k0) {                                                                            
+     cMenuChannelItem::IncSortMode();                                                                    
+     Setup();                                                                                            
+     }                                                                                                   
+  else {                                                                                                 
+     number = number * 10 + Key - k0;                                                                    
+     for (cMenuChannelItem *ci = (cMenuChannelItem *)First(); ci; ci = (cMenuChannelItem *)ci->Next()) { 
+         if (!ci->Channel()->GroupSep() && ci->Channel()->Number() == number) {                          
+            SetCurrent(ci);                                                                              
+            Display();                                                                                   
+            break;                                                                                       
+            }                                                                                            
+         }                                                                                               
+     numberTimer.Set(CHANNELNUMBERTIMEOUT);                                                              
+     }                                                                                                   
+  return osContinue;   
+}                                                                                                        
+
 
-eOSState cMenuChannels::Switch(void)
+eOSState cMenuChannels::Switch(eOSState returnVal)
 {
   if (HasSubMenu())
      return osContinue;
   cChannel *ch = GetChannel(Current());
   if (ch)
-     return cDevice::PrimaryDevice()->SwitchChannel(ch, true) ? osEnd : osContinue;
-  return osEnd;
+     return cDevice::PrimaryDevice()->SwitchChannel(ch, true) ? returnVal : osContinue;
+  return returnVal;
 }
 
 eOSState cMenuChannels::Edit(void)
@@ -554,8 +633,11 @@
      }
 }
 
+
 eOSState cMenuChannels::ProcessKey(eKeys Key)
 {
+    static int inSubMenu = 0;  // kw-cfp
+
   eOSState state = cOsdMenu::ProcessKey(Key);
 
   switch (state) {
@@ -567,21 +649,74 @@
             }
          }
          break;
-    default:
-         if (state == osUnknown) {
-            switch (Key) {
-              case k0 ... k9:
-                            return Number(Key);
-              case kOk:     return Switch();
-              case kRed:    return Edit();
-              case kGreen:  return New();
-              case kYellow: return Delete();
-              case kBlue:   if (!HasSubMenu())
-                               Mark();
-                            break;
-              default: break;
-              }
-            }
+         
+    case osUnknown:		            // kw-cfp
+         if( inSubMenu == 0 ) {             // kw-cfp
+             switch (Key) {                 // kw-cfp
+               case k0:      inSubMenu = 1; // kw-cfp
+                             Skins.Message(mtStatus, "0=Sort -- 1=TV - 2=Radio - 3=free to air - 9=unfiltered -- 8=switch"); // kw-cfp
+                             return state;
+               case k1 ... k9:
+                             return Number(Key);
+               case kOk:     return Switch(osEnd);
+               case kRed:    return Edit();
+               case kGreen:  return New();
+               case kYellow: return Delete();
+               case kBlue:   if (!HasSubMenu())
+                             Mark();
+                             break;
+                    default: break;
+               }
+// kw-cfp start               
+          } else {    
+              switch (Key) { 
+                case k0: // Sorting (Number -> Name -> Transponder)
+                             cMenuChannelItem::IncSortMode();                                                                    
+                             Setup();
+                             inSubMenu = 0;
+                             state = osContinue; 
+                             break;
+                case k1: // toggle   only TV-channels (those with sound)
+                             onlyTV = !onlyTV;
+                             if (onlyTV) onlyRadio = 0;
+                             Setup();
+                             inSubMenu = 0;
+                             state = osContinue; 
+                             break;
+                case k2: // show only radio/broadcast
+                             onlyRadio = !onlyRadio;
+                             if (onlyRadio) onlyTV = 0;
+                             Setup();
+                             inSubMenu = 0;
+                             state = osContinue; 
+                             break;
+                case k3: // toggle crypt
+                             onlyUncrypt = !onlyUncrypt;
+                             Setup();
+                             inSubMenu = 0;
+                             state = osContinue;     
+                             break;
+                case k8: //kw Switch without quitting OSD    
+                             inSubMenu = 0;
+                             MessageFilterState();
+                             return Switch(osContinue); 
+
+                case k9: // no filter
+                             onlyRadio = onlyTV = onlyUncrypt = 0;
+                             Setup();
+                             inSubMenu = 0;
+                             state = osContinue; 
+                             break;
+
+                default:     state = osContinue; 
+                             break;
+                } //switch    
+            } //if inSubMenu  
+
+          break;
+           
+     default: break;     
+// kw-cfp end
     }
   return state;
 }
@@ -773,7 +908,7 @@
      }
   char *buffer = NULL;
   asprintf(&buffer, "%c\t%d\t%s%s%s\t%02d:%02d\t%02d:%02d\t%s",
-                    !(timer->HasFlags(tfActive)) ? ' ' : timer->FirstDay() ? '!' : timer->Recording() ? '#' : '>',
+                    !(timer->HasFlags(tfActive)) ? ' ' : timer->FirstDay() ? Setup.WarEagleIcons ? ICON_PFEIL : '!' : timer->Recording() ? Setup.WarEagleIcons ? ICON_REC : '#' : Setup.WarEagleIcons ? ICON_UHR : '>',
                     timer->Channel()->Number(),
                     *name,
                     *name && **name ? " " : "",
@@ -995,12 +1130,13 @@
   return state;
 }
 
-// --- cMenuScheduleItem -----------------------------------------------------
+// --- cMenuScheduleItem ------------------------------------------------------
 
 class cMenuScheduleItem : public cOsdItem {
 public:
   enum eScheduleSortMode { ssmAllThis, ssmThisThis, ssmThisAll, ssmAllAll }; // "which event(s) on which channel(s)"
 private:
+  static const char * const ProgressBar[7];
   static eScheduleSortMode sortMode;
 public:
   const cEvent *event;
@@ -1008,6 +1144,8 @@
   bool withDate;
   int timerMatch;
   cMenuScheduleItem(const cEvent *Event, cChannel *Channel = NULL, bool WithDate = false);
+//  cMenuScheduleItem(const cEvent *Event, cChannel *Channel = NULL);
+//  cMenuScheduleItem(const cEvent *Event, cChannel *Channel, bool Now);
   static void SetSortMode(eScheduleSortMode SortMode) { sortMode = SortMode; }
   static void IncSortMode(void) { sortMode = eScheduleSortMode((sortMode == ssmAllAll) ? ssmAllThis : sortMode + 1); }
   static eScheduleSortMode SortMode(void) { return sortMode; }
@@ -1015,6 +1153,25 @@
   bool Update(bool Force = false);
   };
 
+
+const char * const cMenuScheduleItem::ProgressBar[7] =
+{
+  "[      ]",
+  "[|     ]",
+  "[||    ]",
+  "[|||   ]",
+  "[||||  ]",
+  "[||||| ]",
+  "[||||||]"
+};
+
+//cMenuScheduleItem::cMenuScheduleItem(const cEvent *Event, cChannel *Channel)
+//{
+//  cMenuScheduleItem(Event, Channel, false);
+//}
+
+//cMenuScheduleItem::cMenuScheduleItem(const cEvent *Event, cChannel *Channel, bool Now)
+
 cMenuScheduleItem::eScheduleSortMode cMenuScheduleItem::sortMode = ssmAllThis;
 
 cMenuScheduleItem::cMenuScheduleItem(const cEvent *Event, cChannel *Channel, bool WithDate)
@@ -1025,7 +1182,7 @@
   timerMatch = tmNone;
   Update(true);
 }
-
+  
 int cMenuScheduleItem::Compare(const cListObject &ListObject) const
 {
   cMenuScheduleItem *p = (cMenuScheduleItem *)&ListObject;
@@ -1036,29 +1193,48 @@
      r = event->StartTime() - p->event->StartTime();
   return r;
 }
-
+ 
 static char *TimerMatchChars = " tT";
-
+ 
 bool cMenuScheduleItem::Update(bool Force)
 {
-  bool result = false;
-  int OldTimerMatch = timerMatch;
-  Timers.GetMatch(event, &timerMatch);
-  if (Force || timerMatch != OldTimerMatch) {
-     char *buffer = NULL;
-     char t = TimerMatchChars[timerMatch];
-     char v = event->Vps() && (event->Vps() - event->StartTime()) ? 'V' : ' ';
-     char r = event->SeenWithin(30) && event->IsRunning() ? '*' : ' ';
-     if (channel && withDate)
-        asprintf(&buffer, "%d\t%.*s\t%.*s\t%s\t%c%c%c\t%s", channel->Number(), 6, channel->ShortName(true), 6, *event->GetDateString(), *event->GetTimeString(), t, v, r, event->Title());
-     else if (channel)
-        asprintf(&buffer, "%d\t%.*s\t%s\t%c%c%c\t%s", channel->Number(), 6, channel->ShortName(true), *event->GetTimeString(), t, v, r, event->Title());
-     else
-        asprintf(&buffer, "%.*s\t%s\t%c%c%c\t%s", 6, *event->GetDateString(), *event->GetTimeString(), t, v, r, event->Title());
-     SetText(buffer, false);
-     result = true;
-     }
-  return result;
+   bool result = false;
+   int OldTimerMatch = timerMatch;
+   Timers.GetMatch(event, &timerMatch);
+   if (Force || timerMatch != OldTimerMatch) {
+      char *buffer = NULL;
+      char t = TimerMatchChars[timerMatch];
+      char v = event->Vps() && (event->Vps() - event->StartTime()) ? 'V' : ' ';
+      char r = event->SeenWithin(30) && event->IsRunning() ? '*' : ' ';
+      if (channel && withDate )
+         asprintf(&buffer, "%d\t%.*s\t%.*s\t%s\t%c%c%c\t%s", channel->Number(), 6, channel->ShortName(true), 6, *event->GetDateString(), *event->GetTimeString(), t, v, r, event->Title());
+      else if (channel)
+         asprintf(&buffer, "%d\t%.*s\t%s\t%c%c%c\t%s", channel->Number(), 6, channel->ShortName(true), *event->GetTimeString(), t, v, r, event->Title());
+      else
+         asprintf(&buffer, "%.*s\t%s\t%c%c%c\t%s", 6, *event->GetDateString(), *event->GetTimeString(), t, v, r, event->Title());
+      SetText(buffer, false);
+      result = true;
+      }
+   return result;
+  
+//  int TimerMatch;
+//  char t = Timers.GetMatch(Event, &TimerMatch) ? (TimerMatch == tmFull) ? 'T' : 't' : ' ';
+//  char v = event->Vps() && (event->Vps() - event->StartTime()) ? 'V' : ' ';
+//  char r = event->IsRunning() ? '*' : ' ';
+//  if (Now && Setup.ShowProgressBar) {
+//     int progress = (int)roundf( (float)(time(NULL) - event->StartTime()) / (float)(event->Duration()) * 6.0 );
+//     if (progress < 0) progress = 0;
+//     else if (progress > 6) progress = 6;
+//    asprintf(&buffer, "%.*s\t%.*s\t%s\t %c%c%c\t%s", 10, channel->ShortName(true), 5, *event->GetTimeString(), ProgressBar[progress], t, v, r, event->Title());
+//     }
+//  else
+//     asprintf(&buffer, "%.*s\t%.*s\t%c%c%c\t%s", 10, channel->ShortName(true), 5, *event->GetTimeString(), t, v, r, event->Title());
+//  SetText(buffer, false);
+
+//+      if (channel && withDate)
+//+         asprintf(&buffer, "%d\t%.*s\t%.*s\t%s\t%c%c%c\t%s", channel->Number(), 6, channel->ShortName(true), 6, *event->GetDateString(), *event->GetTimeString(), t, v, r, event->Title());
+//+      else if (channel)
+
 }
 
 // --- cMenuWhatsOn ----------------------------------------------------------
@@ -1840,25 +2016,111 @@
   if (New)
      newEntries++;
   char *buffer = NULL;
-  asprintf(&buffer, "%d\t%d\t%s", totalEntries, newEntries, name);
+
+  if( Setup.ShowRecNew )  //kw
+     asprintf(&buffer, "%7d\t%d\t%s", totalEntries, newEntries, name); //kw
+  else                                                                //kw
+     asprintf(&buffer, "%7d\t%s", totalEntries, name);                 //kw
+
+
+#if 0 // kw 
+  switch (Setup.ShowRecTime + Setup.ShowRecDate + Setup.ShowRecLength) {
+    case 0:
+         asprintf(&buffer, "%s", name);
+         break;
+    case 1:
+         asprintf(&buffer, "%d\t%s", totalEntries, name);
+         break;
+    case 2:
+    default:
+         asprintf(&buffer, "%d\t%d\t%s", totalEntries, newEntries, name);
+         break;
+    case 3:
+         asprintf(&buffer, "%d\t%d\t\t%s", totalEntries, newEntries, name);
+         break;
+    }
+#endif  //kw    
   SetText(buffer, false);
 }
 
+// --- cMenuRenameRecording --------------------------------------------------
+
+class cMenuRenameRecording : public cOsdMenu {
+private:
+  int lifetime;
+  int priority;
+  char name[MaxFileName];
+  char path[MaxFileName];
+  cRecording *recording;
+public:
+  cMenuRenameRecording(cRecording *Recording);
+  virtual eOSState ProcessKey(eKeys Key);
+};
+
+cMenuRenameRecording::cMenuRenameRecording(cRecording *Recording)
+:cOsdMenu(tr("Rename recording"), 12)
+{
+  recording = Recording;
+  priority = recording->priority;
+  lifetime = recording->lifetime;
+
+  char* p = strrchr(recording->Name(), '~');
+  if (p) {
+     p++;
+     strn0cpy(name, p, sizeof(name));
+     strn0cpy(path, recording->Name(), sizeof(path));
+     p = strrchr(path, '~');
+     if (p)
+        p[0] = 0;
+     }   
+  else {
+     strn0cpy(name, recording->Name(), sizeof(name));
+     strn0cpy(path, "", sizeof(path));
+     }
+  Add(new cMenuEditStrItem(tr("Name"),      name,     sizeof(name), tr(FileNameChars)));
+  Add(new cMenuEditRecPathItem(tr("Path"),  path,     sizeof(path)                   ));
+  Add(new cMenuEditIntItem(tr("Priority"), &priority, 0,            MAXPRIORITY      ));
+  Add(new cMenuEditIntItem(tr("Lifetime"), &lifetime, 0,            MAXLIFETIME      ));
+}
+
+eOSState cMenuRenameRecording::ProcessKey(eKeys Key)
+{
+  eOSState state = cOsdMenu::ProcessKey(Key);
+
+  if (state == osUnknown) {
+     if (Key == kOk) {
+        char buffer[MaxFileName];
+        snprintf(buffer, sizeof(buffer), "%s~%s", path, name);
+        if (recording->Rename(buffer, &priority, &lifetime)) {
+           Recordings.Load();
+           return osRecordings;
+           }
+        else
+           Skins.Message(mtError, tr("Error while accessing recording!"));
+        }
+     return osContinue;
+     }
+  return state;
+}
+
 // --- cMenuRecordings -------------------------------------------------------
 
-cMenuRecordings::cMenuRecordings(const char *Base, int Level, bool OpenSubMenus)
-:cOsdMenu(Base ? Base : tr("Recordings"), 9, 7)
+
+  cMenuRecordings::cMenuRecordings(const char *Base, int Level, bool OpenSubMenus)
+:cOsdMenu(Base ? Base : tr("Recordings"), 8, 6, 6)
 {
   base = Base ? strdup(Base) : NULL;
   level = Setup.RecordingDirs ? Level : -1;
   Recordings.StateChanged(recordingsState); // just to get the current state
   helpKeys = -1;
+  dirOrderAlpha = !true;
   Display(); // this keeps the higher level menus from showing up briefly when pressing 'Back' during replay
   Set();
   if (Current() < 0)
-     SetCurrent(First());
+     SetCurrent(First());     
   else if (OpenSubMenus && cReplayControl::LastReplayed() && Open(true))
      return;
+     
   Display();
   SetHelpKeys();
 }
@@ -1909,6 +2171,7 @@
         }
      }
   Clear();
+  DirOrderState = dirOrderAlpha; //kw records sorting
   Recordings.Sort();
   for (cRecording *recording = Recordings.First(); recording; recording = Recordings.Next(recording)) {
       if (!base || (strstr(recording->Name(), base) == recording->Name() && recording->Name()[strlen(base)] == '~')) {
@@ -2067,6 +2330,19 @@
   return osContinue;
 }
 
+eOSState cMenuRecordings::Rename(void)
+{
+  if (HasSubMenu() || Count() == 0)
+     return osContinue;
+  cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current());
+  if (ri && !ri->IsDirectory()) {
+     cRecording *recording = GetRecording(ri);
+     if (recording)
+        return AddSubMenu(new cMenuRenameRecording(recording));
+     }
+  return osContinue;
+}
+
 eOSState cMenuRecordings::ProcessKey(eKeys Key)
 {
   bool HadSubMenu = HasSubMenu();
@@ -2079,7 +2355,19 @@
        case kGreen:  return Rewind();
        case kYellow: return Delete();
        case kBlue:   return Info();
-       case k1...k9: return Commands(Key);
+       case k0:      dirOrderAlpha = !dirOrderAlpha ; //kw records sorting
+                     DirOrderState = dirOrderAlpha;
+                     Set(true);                       //kw records sorting
+                     Skins.Message(mtStatus,          //kw records sorting
+                        dirOrderAlpha ? "alphabetisch sortiert" : "chronologisch" //kw records sorting
+                     );
+                     return osContinue;        //kw records sorting
+                     
+       case k1...k7: return Commands(Key);     //kw records sorting
+       case k8:      return Rename();          //kw records sorting
+       case k9:      Recordings.TouchUpdate(); //kw records sorting
+                     Skins.Message(mtStatus, "Rescanning recordings..."); //kw records sorting
+                     return osBack;            //kw records sorting
        case kNone:   if (Recordings.StateChanged(recordingsState))
                         Set(true);
                      break;
@@ -2167,6 +2455,7 @@
   Add(new cMenuEditStraItem(tr("Setup.OSD$Skin"),                   &skinIndex, numSkins, skinDescriptions));
   if (themes.NumThemes())
   Add(new cMenuEditStraItem(tr("Setup.OSD$Theme"),                  &themeIndex, themes.NumThemes(), themes.Descriptions()));
+  Add(new cMenuEditBoolItem(tr("Setup.OSD$WarEagle icons"),         &data.WarEagleIcons));
   Add(new cMenuEditIntItem( tr("Setup.OSD$Left"),                   &data.OSDLeft, 0, MAXOSDWIDTH));
   Add(new cMenuEditIntItem( tr("Setup.OSD$Top"),                    &data.OSDTop, 0, MAXOSDHEIGHT));
   Add(new cMenuEditIntItem( tr("Setup.OSD$Width"),                  &data.OSDWidth, MINOSDWIDTH, MAXOSDWIDTH));
@@ -2181,6 +2470,7 @@
   Add(new cMenuEditBoolItem(tr("Setup.OSD$Scroll wraps"),           &data.MenuScrollWrap));
   Add(new cMenuEditBoolItem(tr("Setup.OSD$Menu button closes"),     &data.MenuButtonCloses));
   Add(new cMenuEditBoolItem(tr("Setup.OSD$Recording directories"),  &data.RecordingDirs));
+  Add(new cMenuEditBoolItem(tr("Setup.OSD$Main Menu command position"), &data.MenuCmdPosition, tr("bottom"), tr("top")));
   SetCurrent(Get(current));
   Display();
 }
@@ -2257,6 +2547,7 @@
   Add(new cMenuEditIntItem( tr("Setup.EPG$EPG scan timeout (h)"),      &data.EPGScanTimeout));
   Add(new cMenuEditIntItem( tr("Setup.EPG$EPG bugfix level"),          &data.EPGBugfixLevel, 0, MAXEPGBUGFIXLEVEL));
   Add(new cMenuEditIntItem( tr("Setup.EPG$EPG linger time (min)"),     &data.EPGLinger, 0));
+  Add(new cMenuEditBoolItem(tr("Setup.EPG$Show progress bar"),         &data.ShowProgressBar));
   Add(new cMenuEditBoolItem(tr("Setup.EPG$Set system time"),           &data.SetSystemTime));
   if (data.SetSystemTime)
      Add(new cMenuEditTranItem(tr("Setup.EPG$Use time from transponder"), &data.TimeTransponder, &data.TimeSource));
@@ -2572,6 +2863,10 @@
   Add(new cMenuEditIntItem( tr("Setup.Recording$Instant rec. time (min)"),   &data.InstantRecordTime, 1, MAXINSTANTRECTIME));
   Add(new cMenuEditIntItem( tr("Setup.Recording$Max. video file size (MB)"), &data.MaxVideoFileSize, MINVIDEOFILESIZE, MAXVIDEOFILESIZE));
   Add(new cMenuEditBoolItem(tr("Setup.Recording$Split edited files"),        &data.SplitEditedFiles));
+  Add(new cMenuEditBoolItem(tr("Setup.Recording$Show date"),                 &data.ShowRecDate));
+  Add(new cMenuEditBoolItem(tr("Setup.Recording$Show time"),                 &data.ShowRecTime));
+  Add(new cMenuEditBoolItem(tr("Setup.Recording$Show length"),               &data.ShowRecLength));
+  Add(new cMenuEditBoolItem(tr("Setup.Recording$Show 'New' indicator"),      &data.ShowRecNew));
 }
 
 // --- cMenuSetupReplay ------------------------------------------------------
@@ -2589,6 +2884,8 @@
   Add(new cMenuEditBoolItem(tr("Setup.Replay$Multi speed mode"), &data.MultiSpeedMode));
   Add(new cMenuEditBoolItem(tr("Setup.Replay$Show replay mode"), &data.ShowReplayMode));
   Add(new cMenuEditIntItem(tr("Setup.Replay$Resume ID"), &data.ResumeID, 0, 99));
+  Add(new cMenuEditIntItem( tr("Setup.Recording$Jump Seconds"),            &data.JumpSeconds));
+  Add(new cMenuEditIntItem( tr("Setup.Recording$Jump Seconds (repeated)"), &data.JumpSecondsRepeat));
 }
 
 void cMenuSetupReplay::Store(void)
@@ -2793,7 +3090,14 @@
   // Initial submenus:
 
   switch (State) {
-    case osSchedule:   AddSubMenu(new cMenuSchedule); break;
+    case osSchedule:   // AddSubMenu(new cMenuSchedule); break;
+                       //EPGSEARCH-Plugin-Patch-Begin
+                    {        
+			            cPlugin *p = cPluginManager::GetPlugin("epgsearch");
+    			        (p && !p->SetupParse("IsOrgSchedule", "0")) ? AddSubMenu((cOsdMenu *)p->MainMenuAction()) : AddSubMenu(new cMenuSchedule);
+		            }			
+		            break;
+                       //EPGSEARCH-Plugin-Patch-end
     case osChannels:   AddSubMenu(new cMenuChannels); break;
     case osTimers:     AddSubMenu(new cMenuTimers); break;
     case osRecordings: AddSubMenu(new cMenuRecordings(NULL, 0, true)); break;
@@ -2813,9 +3117,13 @@
 void cMenuMain::Set(void)
 {
   Clear();
-  SetTitle("VDR");
+  SetTitle("VDR"); 
   SetHasHotkeys();
 
+  if (Setup.MenuCmdPosition) {
+        Update(true);
+  }
+
   // Basic menu items:
 
   Add(new cOsdItem(hk(tr("Schedule")),   osSchedule));
@@ -2842,11 +3150,14 @@
   if (Commands.Count())
      Add(new cOsdItem(hk(tr("Commands")),  osCommands));
 
-  Update(true);
+  if (!Setup.MenuCmdPosition) {
+        Update(true);
+  }
 
   Display();
 }
 
+
 #define MB_PER_MINUTE 25.75 // this is just an estimate!
 
 bool cMenuMain::Update(bool Force)
@@ -2883,7 +3194,7 @@
      // Color buttons:
      SetHelp(!replaying ? tr("Button$Record") : NULL, tr("Button$Audio"), replaying ? NULL : tr("Button$Pause"), replaying ? tr("Button$Stop") : cReplayControl::LastReplayed() ? tr("Button$Resume") : NULL);
      result = true;
-     }
+     }                     
 
   // Editing control:
   bool CutterActive = cCutter::Active();
@@ -2916,7 +3227,7 @@
            }
      result = true;
      }
-
+     
   return result;
 }
 
@@ -2928,7 +3239,16 @@
   HadSubMenu |= HasSubMenu();
 
   switch (state) {
-    case osSchedule:   return AddSubMenu(new cMenuSchedule);
+    case osSchedule:   {
+			cPlugin *p = cPluginManager::GetPlugin("epgsearch");
+            		if (p && !p->SetupParse("IsOrgSchedule", "0")) {
+			    return AddSubMenu((cOsdMenu *)p->MainMenuAction());
+			    state = osEnd;
+			    }
+			else 
+			    return AddSubMenu(new cMenuSchedule);
+		       }			
+		       break;
     case osChannels:   return AddSubMenu(new cMenuChannels);
     case osTimers:     return AddSubMenu(new cMenuTimers);
     case osRecordings: return AddSubMenu(new cMenuRecordings);
@@ -4128,6 +4448,9 @@
 
 eOSState cReplayControl::ProcessKey(eKeys Key)
 {
+  static int jmpWidth = 1;
+  int pkw = 0;
+
   if (!Active())
      return osEnd;
   if (visible) {
@@ -4165,14 +4488,42 @@
     case kFastFwd:
     case kRight:   Forward(); break;
     case kRed:     TimeSearch(); break;
-    case kGreen|k_Repeat:
-    case kGreen:   SkipSeconds(-60); break;
-    case kYellow|k_Repeat:
-    case kYellow:  SkipSeconds( 60); break;
+    case kGreen|k_Repeat: 
+                   SkipSeconds(-(Setup.JumpSecondsRepeat)); break;
+    case kGreen:   SkipSeconds(-(Setup.JumpSeconds)); break;
+    case kYellow|k_Repeat: 
+                   SkipSeconds(Setup.JumpSecondsRepeat); break;
+    case kYellow:  SkipSeconds(Setup.JumpSeconds); break;
     case kStop:
-    case kBlue:    Hide();
+    case kBlue:    Hide();   
                    Stop();
                    return osEnd;
+     case k1|k_Repeat:
+            jmpWidth+= 25;
+   		    displayFrames = false;
+ 		    pkw = SkipFrames(-jmpWidth); 
+ 		    Goto(pkw, true);
+ 		    break;
+     case k1:	   
+            jmpWidth = 1;
+     		displayFrames = true;
+ 		    pkw = SkipFrames(-1); 
+ 		    Goto(pkw, true);
+ 		    break;
+
+     case k3|k_Repeat:
+            jmpWidth+=25;
+   		    displayFrames = false;
+ 		    pkw = SkipFrames(jmpWidth); 
+ 		    Goto(pkw, true);
+ 		    break;
+     case k3:	   
+            jmpWidth = 1;
+ 		    displayFrames = true;
+ 		    pkw = SkipFrames( jmpWidth); 
+ 		    Goto(pkw, true);
+ 		    break;
+         
     default: {
       DoShowMode = false;
       switch (Key) {
diff -u vdr-1.4.2/menu.h vdr-1.4.2-kw/menu.h
--- vdr-1.4.2/menu.h	2006-03-25 13:15:19.000000000 +0100
+++ vdr-1.4.2-kw/menu.h	2006-04-09 17:38:38.000000000 +0200
@@ -171,7 +171,9 @@
   eOSState Delete(void);
   eOSState Info(void);
   eOSState Commands(eKeys Key = kNone);
-protected:
+  eOSState Rename(void);
+  bool dirOrderAlpha;   //kw simple-record-sort-patch
+protected:  
   cRecording *GetRecording(cMenuRecordingItem *Item);
 public:
   cMenuRecordings(const char *Base = NULL, int Level = 0, bool OpenSubMenus = false);
diff -u vdr-1.4.2/menuitems.c vdr-1.4.2-kw/menuitems.c
--- vdr-1.4.2/menuitems.c	2006-07-30 11:09:30.000000000 +0200
+++ vdr-1.4.2-kw/menuitems.c	2006-08-29 19:43:36.000000000 +0200
@@ -15,6 +15,8 @@
 #include "skins.h"
 #include "status.h"
 
+#define SHIFTTIMEOUT 2
+
 #define AUTO_ADVANCE_TIMEOUT  1500 // ms before auto advance when entering characters via numeric keys
 
 const char *FileNameChars = " abcdefghijklmnopqrstuvwxyz0123456789-.#~,/_@";
@@ -259,9 +261,11 @@
   pos = -1;
   insert = uppercase = false;
   newchar = true;
-  charMap = tr(" 0\t-.#~,/_@1\tabc2\tdef3\tghi4\tjkl5\tmno6\tpqrs7\ttuv8\twxyz9");
-  currentChar = NULL;
-  lastKey = kNone;
+  charMap = tr(" 0\t-.#~,/_@1\tabc2\tdef3\tghi4\tjkl5\tmno6\tpqrs7\ttuv8\twxyz9");  
+  currentChar = NULL;                                                               
+  lastKey = kNone;                                                                  
+  lastActivity = time(NULL);
+  ieCurChr = 0;
   Set();
 }
 
@@ -388,6 +392,7 @@
                     }
                  else
                     return osUnknown;
+		 lastKey = Key;
                  break;
     case kYellow|k_Repeat:
     case kYellow: // Remove the character at current position; in insert mode it is the character to the right of cursor
@@ -409,6 +414,7 @@
                     }
                  else
                     return osUnknown;
+		 lastKey = Key;
                  break;
     case kBlue|k_Repeat:
     case kBlue:  // consume the key only if in edit-mode
@@ -425,6 +431,7 @@
                     }
                  if (!insert && isalpha(value[pos]))
                     uppercase = isupper(value[pos]);
+                 lastKey = Key;
                  break;
     case kRight|k_Repeat:
     case kRight: AdvancePos();
@@ -432,7 +439,7 @@
                     orgValue = strdup(value);
                     SetHelpKeys();
                     }
-                 break;
+                   break;
     case kUp|k_Repeat:
     case kUp:
     case kDown|k_Repeat:
@@ -452,6 +459,7 @@
                     }
                  else
                     return cMenuEditItem::ProcessKey(Key);
+                 lastKey = Key;
                  break;
     case k0|k_Repeat ... k9|k_Repeat:
     case k0 ... k9: {
@@ -498,6 +506,7 @@
                        orgValue = NULL;
                        }
                     pos = -1;
+                    lastKey = Key;
                     newchar = true;
                     stripspace(value);
                     SetHelpKeys();
@@ -547,6 +556,158 @@
   return osContinue;
 }
 
+// --- cMenuEditRecPathItem --------------------------------------------------
+
+cMenuEditRecPathItem::cMenuEditRecPathItem(const char* Name, char* Path,
+   int Length): cMenuEditStrItem(Name, Path, Length, tr(FileNameChars))
+{
+  SetBase(Path);
+}
+
+cMenuEditRecPathItem::~cMenuEditRecPathItem()
+{
+}
+
+void cMenuEditRecPathItem::SetBase(const char* Path)
+{
+  if (!Path)
+      base[0] = 0;
+  strn0cpy(base, Path, sizeof(base));
+  char* p = strrchr(base, '~');
+  if (p)
+     p[0] = 0; 
+  else
+     base[0] = 0;
+}
+
+void cMenuEditRecPathItem::FindNextLevel()
+{
+  char item[MaxFileName];
+
+  for (cRecording *recording = Recordings.First(); recording; recording = Recordings.Next(recording))
+  {
+     char* p;
+     strn0cpy(item, recording->Name(), sizeof(item));
+     stripspace(value);
+     if (!strlen(value))
+        p = strchr(item, '~');
+     else {
+        if (strstr(item, value) != item)
+           continue;
+        if (item[strlen(value)] != '~')
+           continue;
+        p = strchr(item + strlen(value) + 1, '~');
+        }
+     if (!p)
+        continue;
+     p[0] = 0;
+     strn0cpy(base, value, length);
+     strn0cpy(value, item, length);
+     return;
+     }
+}
+
+void cMenuEditRecPathItem::Find(bool Next)
+{
+  char item[MaxFileName];
+  char lastItem[MaxFileName] = "";
+
+  for (cRecording *recording = Recordings.First(); recording; recording = Recordings.Next(recording))
+  {
+     const char* recName = recording->Name();
+     if (strlen(base) && strstr(recName, base) != recName)
+        continue;
+     if (strlen(base) && recName[strlen(base)] != '~')
+        continue;
+     strn0cpy(item, recName, sizeof(item));
+     char* p = strchr(item + strlen(base) + 1, '~');
+     if (!p)
+        continue;
+     p[0] = 0;
+
+     esyslog("item: %s (%s)", item, lastItem);
+     if (!Next && (strcmp(item, value) == 0)) {
+        if (strlen(lastItem))
+           strn0cpy(value, lastItem, length);
+        return;
+        }
+     if (strcmp(lastItem, item) != 0) {
+        if(Next && strlen(lastItem) && strcmp(lastItem, value) == 0) {
+           strn0cpy(value, item, length);
+           return;
+           }
+        strn0cpy(lastItem, item, sizeof(lastItem));
+        }
+     }
+}
+
+void cMenuEditRecPathItem::SetHelpKeys(void)
+{
+  cSkinDisplay::Current()->SetButtons(tr("Rename$Up"), tr("Rename$Down"), tr("Rename$Previous"), tr("Rename$Next"));
+}
+
+eOSState cMenuEditRecPathItem::ProcessKey(eKeys Key)
+{
+  switch (Key) {
+    case kLeft:
+    case kRed:    // one level up
+                  if (pos<0)
+                     return cMenuEditItem::ProcessKey(Key);
+                  strn0cpy(value, base, length);
+                  SetBase(base);
+                  pos = strlen(base);
+                  if (pos)
+                     pos++;
+                  if (!strlen(value))
+                     strn0cpy(value, " ", length);
+                  break;
+    case kRight:
+    case kGreen:  // one level down
+                  if (pos>=0)
+                     FindNextLevel();
+                  if (!strlen(value))
+                     strn0cpy(value, " ", length);
+                  pos = strlen(base);
+                  if (pos)
+                     pos++;
+                  SetHelpKeys();
+                  break;
+    case kUp|k_Repeat:
+    case kUp:
+    case kYellow|k_Repeat:
+    case kYellow: // previous directory in list
+                  if (pos<0)
+                     return cMenuEditItem::ProcessKey(Key);
+                  Find(false);
+                  pos = strlen(base);
+                  if (pos)
+                     pos++;
+                  break;
+    case kDown|k_Repeat:
+    case kDown:
+    case kBlue|k_Repeat:
+    case kBlue:   // next directory in list
+                  if (pos<0)
+                     return cMenuEditItem::ProcessKey(Key);
+                  Find(true);
+                  pos = strlen(base);
+                  if (pos)
+                     pos++;
+                  break;
+    case kOk:     // done
+                  if (pos<0)
+                     return cMenuEditItem::ProcessKey(Key);
+                  stripspace(value);
+                  cSkinDisplay::Current()->SetButtons(NULL);
+                  pos = -1;
+                  break;
+    default:
+                  return cMenuEditItem::ProcessKey(Key);
+    }
+  Set();
+  return osContinue;
+}
+
 // --- cMenuEditStraItem -----------------------------------------------------
 
 cMenuEditStraItem::cMenuEditStraItem(const char *Name, int *Value, int NumStrings, const char * const *Strings)
diff -u vdr-1.4.2/menuitems.h vdr-1.4.2-kw/menuitems.h
--- vdr-1.4.2/menuitems.h	2006-04-14 12:01:47.000000000 +0200
+++ vdr-1.4.2-kw/menuitems.h	2006-04-22 16:39:56.000000000 +0200
@@ -76,22 +76,30 @@
   };
 
 class cMenuEditStrItem : public cMenuEditItem {
-private:
+private:   
   char *orgValue;
+  /* //kw  those are moved to protected; the stay commented because of diff
   char *value;
   int length;
   char *allowed;
   int pos;
+  */
   bool insert, newchar, uppercase;
-  const char *charMap;
-  const char *currentChar;
-  eKeys lastKey;
-  cTimeMs autoAdvanceTimeout;
-  void SetHelpKeys(void);
+  const char *charMap;     
+  const char *currentChar; 
+  eKeys lastKey;           
+  cTimeMs autoAdvanceTimeout;  
   void AdvancePos(void);
-  virtual void Set(void);
   char Inc(char c, bool Up);
+  int ieCurChr;     //kw
+  time_t lastActivity;  //kw
 protected:
+  char *value; //kw  mv from private
+  int length;  //kw  mv from private
+  char *allowed; //kw  mv from private
+  int pos;       //kw  mv from private
+  virtual void SetHelpKeys(void);  //kw  mv from private
+  virtual void Set(void);           //kw  mv from private
   bool InEditMode(void) { return pos >= 0; }
 public:
   cMenuEditStrItem(const char *Name, char *Value, int Length, const char *Allowed);
@@ -99,6 +107,19 @@
   virtual eOSState ProcessKey(eKeys Key);
   };
 
+class cMenuEditRecPathItem : public cMenuEditStrItem {
+protected:
+  char base[MaxFileName];
+  virtual void SetHelpKeys(void);
+  void SetBase(const char* Path);
+  void FindNextLevel();
+  void Find(bool Next);
+public:
+  cMenuEditRecPathItem(const char* Name, char* Path, int Length);
+  ~cMenuEditRecPathItem();
+  virtual eOSState ProcessKey(eKeys Key);
+  };
+
 class cMenuEditStraItem : public cMenuEditIntItem {
 private:
   const char * const *strings;
diff -u vdr-1.4.2/osdbase.c vdr-1.4.2-kw/osdbase.c
--- vdr-1.4.2/osdbase.c	2006-02-05 15:37:03.000000000 +0100
+++ vdr-1.4.2-kw/osdbase.c	2006-02-19 17:45:47.000000000 +0100
@@ -77,6 +77,8 @@
 {
   isMenu = true;
   digit = 0;
+  key_nr = -1;
+  lastActivity = time(NULL);
   hasHotkeys = false;
   title = NULL;
   SetTitle(Title);
@@ -111,7 +113,7 @@
         digit = -1; // prevents automatic hotkeys - input already has them
      if (digit >= 0) {
         digit++;
-        snprintf(buffer, sizeof(buffer), " %c %s", (digit < 10) ? '0' + digit : ' ' , s);
+        snprintf(buffer, sizeof(buffer), " %2d%s %s", digit, (digit > 9) ? "" : " ", s);
         s = buffer;
         }
      }
@@ -425,18 +427,60 @@
      }
 }
 
+#define MENUKEYTIMEOUT 1
+
 eOSState cOsdMenu::HotKey(eKeys Key)
 {
-  for (cOsdItem *item = First(); item; item = Next(item)) {
+  bool match = false;
+  bool highlight = false;
+  int  item_nr;
+  int  i;
+
+  if (Key == kNone) {
+     if ((time(NULL) - lastActivity) >= MENUKEYTIMEOUT)
+        Key = kOk;
+     else
+        return osContinue;
+     }
+  else {
+     lastActivity = time(NULL);
+     }
+  for (cOsdItem *item = Last(); item; item = Prev(item)) {
       const char *s = item->Text();
-      if (s && (s = skipspace(s)) != NULL) {
-         if (*s == Key - k1 + '1') {
+      i = 0;
+      item_nr = 0;
+      if (s && (s = skipspace(s)) != '\0' && '0' <= s[i] && s[i] <= '9') {
+         do {
+            item_nr = item_nr * 10 + (s[i] - '0');
+            }
+         while ( !((s[++i] == '\t')||(s[i] == ' ')) && (s[i] != '\0') && ('0' <= s[i]) && (s[i] <= '9'));
+         if ((Key == kOk) && (item_nr == key_nr)) {
             current = item->Index();
             cRemote::Put(kOk, true);
+            key_nr = -1;
             break;
             }
+         else if (Key != kOk) {
+            if (!highlight && (item_nr == (Key - k0))) {
+               highlight = true;
+               current = item->Index();
+               }
+            if (!match && (key_nr == -1) && ((item_nr / 10) == (Key - k0))) {
+               match = true;
+               key_nr = (Key - k0);
+               }
+            else if (((key_nr == -1) && (item_nr == (Key - k0))) || (!match && (key_nr >= 0) && (item_nr == (10 * key_nr + Key - k0)))) {
+               current = item->Index();
+               cRemote::Put(kOk, true);
+               key_nr = -1;
+               break;
+               }
+            }
          }
       }
+  if ((!match) && (Key != kNone)) {
+     key_nr = -1;
+     }
   return osContinue;
 }
 
@@ -475,7 +519,8 @@
         }
      }
   switch (Key) {
-    case k0:      return osUnknown;
+    case kNone:
+    case k0: return osUnknown;
     case k1...k9: return hasHotkeys ? HotKey(Key) : osUnknown;
     case kUp|k_Repeat:
     case kUp:   CursorUp();   break;
diff -u vdr-1.4.2/osdbase.h vdr-1.4.2-kw/osdbase.h
--- vdr-1.4.2/osdbase.h	2006-01-06 12:55:30.000000000 +0100
+++ vdr-1.4.2-kw/osdbase.h	2006-01-08 20:30:29.000000000 +0100
@@ -94,6 +94,8 @@
   char *status;
   int digit;
   bool hasHotkeys;
+  int key_nr;
+  time_t lastActivity;
 protected:
   cSkinDisplayMenu *DisplayMenu(void) { return displayMenu; }
   const char *hk(const char *s);
Gemeinsame Unterverzeichnisse: vdr-1.4.2/PLUGINS und vdr-1.4.2-kw/PLUGINS.
diff -u vdr-1.4.2/README.kw vdr-1.4.2-kw/README.kw
--- vdr-1.4.2/README.kw	2006-09-03 20:42:20.000000000 +0200
+++ vdr-1.4.2-kw/README.kw	2006-09-03 20:41:32.000000000 +0200
@@ -0,0 +1,156 @@
+kw-Patches
+==========
+
+Hier die Patches, die ich für mich zusammengestellt bzw. erstellt habe
+und die ich selbst nutze. Die erste Version basierte auf dem enAIO-Patch,
+der seinerseits diverse Patches zusammenfasste.
+
+Derzeit (vdr 1.4.2) sind folgende Patches enthalten:
+
+  * Rename Recordings Patch von Torsten Kunkel ( // tk-rrp )
+    (http://www.vdr-wiki.de/wiki/index.php/Renamerecordings-patch)
+    Umbennen von Aufzeichnungen per Fernbedienung
+
+  * Menu Selection Patch von Peter Dittmann 
+    (http://www.vdr-wiki.de/wiki/index.php/Menuselection-patch)
+    Es können alle Menüpunkte, auch die größer 9,
+    per Zahleneingabe angesprungen werden.
+
+  * Recording-Length-Patch von Tobias Faust ( // tf-rlp )
+    Zeigt die Länge von Aufzeichnungen an. Zusätzlicher Fix von mir: 
+    Keine wirren Zeichen mehr, falls die Aufnahme nicht mehr vorhanden
+    ist (weil sie z.B. per Konsole verschoben wurde).
+    
+  * Channelfilter-Patch 0.3.0 von Walter Koch ( // kw-cfp )
+    Filtern der Kanalliste.
+
+  * Singlestep/JumpingSecond-Patch von Tobias Faust und Walter Koch
+
+  * Einfaches Aufzeichnungssortieren-Patch (simple record sort patch) 
+    von Walter Koch ( //kw-srsp )
+
+  * Patch zum Ersetzen des Menüpunktes "Programm" durch das EPGSEARCH-Plugin
+    falls vorhanden. Dieser Patch stammt aus dem EPGSEARCH-Plugin.
+
+  * Wareagle-Iconpatch 
+    (http://www.vdr-wiki.de/wiki/index.php/Wareagleicon-patch)
+    Mit willkürlichen Änderungen meinerseits.
+  
+  * Diverse kleine Layoutänderungen von OSD-Listen u.ä.  
+
+Der Status des Show Weekdays Patch by Oskar Signell
+ist mir derzeit unklar ... 
+
+Der ursprünglich enthaltene Easy-Input-Patch ist seit vdr 1.3.38 in
+vdr integriert und daher nicht mehr drin.
+
+"kw" ist übrigens das Kürzel, welches ich seit Urzeiten für
+Quellcodekommentare nutze. 
+
+Gruss,
+  Walter
+
+==============================================================================
+simple-record-sort-patch (Aufnahmesortierung)
+==============================================================================
+Durch Betätigen der Taste "0" wird das aktuelle Aufnahmeverzeichnis sofort 
+umsortiert: Beim ersten Male wird es alphabetisch sortiert, beim zweiten 
+Male chronologisch, beim dritten Male wieder alphabetisch etc. Die neue 
+Sortierart wird bei Änderungen in der Statuszeile unten angezeigt.
+
+Die aktuelle Sortierart wird für jedes andere Aufnahmeverzeichnis, in das
+man danach wechselt beibehalten. Ausnahme: Das Hauptverzeichnis ist immer 
+chronologisch geordnet.
+
+Die Taste Null wurde in Analogie zur Kanalliste gewählt - auch dort dient 
+die Null der Sortierung. Das kollidiert zwar bei einigen Patchsammlungen 
+mit der Belegung der 0 zum Umbenennen von Aufnahmen. Aber einheitliche 
+Bedienung ist m.E. wichtiger. 
+
+Der Patch ist gegen ein originales vdr 1.3.37, sollte aber auch gegen 
+frühere Versionen funktionieren, da der Patch nur wenig ändert.
+
+==============================================================================
+Channelfilter 0.3
+==============================================================================
+ english text see below
+ 
+ Dieser Patch filtert in der Kanalliste (Punkt 2 im Hauptmenü)
+ bei Bedarf unerwünschte Einträge, was die Übersichtlichkeit erhöhen kann.
+ Ausserdem werden in der Liste Kanalattribute angezeigt:
+  "t" = TV
+  "r" = Radio
+  "d" = Dolby
+  "x" = verschlüsselt
+ 
+ Drückt man in der Liste die Taste "0 und dann die Taste "1", so werden nur noch Fernsehsender 
+ angezeigt (also keine Radiosender, keine veraltete Einträge, keine reine
+ Datenkanäle und keine Standbildersender). Nochmaliges "0" "1" blendet sie wieder ein.
+ 
+ Drückt man die Tasten "0" und dann "2" so werden nur noch Radiosender angezeigt.
+ Nochmaliges "0" "2" blendet sie wieder ein.
+ 
+ Drückt man die "0" und dann die "3", so werden alle verschlüsselten 
+ Kanäle (caid>4) ausgeblendet. Somit sind nur noch die sogenannten "free to air"-Sender sichtbar.
+ 
+ Drückt man die "0" "3" nochmal, so werden die verschlüsselten Kanäle 
+ wieder eingeblendet. Das funktioniert auch im Zusammenhang mit den 
+ anderen Filtern: Drückt man z.B. die "0" "1" und dann die "0" "3", so werden nur
+ unverschlüsselte TV-Kanäle aufgelistet.
+ 
+ Das Filtern funktioniert auch zusammen mit dem vdr-eigenen 
+ Sortieren, das mit diesem Patch aber auch den 0-Prefix-0: 
+ Drücken von "0" "0" sortiert die Sender alphabetisch. Nochmaliges
+ "0" "0" sortiert nach Transponder und ein weiteres "0" "0" 
+ sortiert wieder original nach Kanalnummern.
+ 
+ Die Taste "0" "9" stellt jederzeit den originalen Zustand wieder her.
+ 
+ Der Patch ist auf vdr 1.4.0 nis vdr 1.4.2 getestet. 
+ Es fehlen allerdings noch die Übersetzungen; die 
+ liefere ich nach, wenn etwaige Fehler beseitigt sind. 
+ 
+ Eine Header-Datei wurde geändert, daher müssen die Plugins auch 
+ neu übersetzt werden: "make plugins".
+ 
+ Homepage www.u32.de/vdr.html#patches
+ Fehlerberichte an  vdrpatch [at] u32.de
+ 
+ ----------- english ---------------------
+ 
+ (out of date; only valid for channelfilter 0.0.2)
+ 
+ This patch filters the channel list on demand. 
+ A additional column of channel attributes is also added:
+  "t" = TV
+  "r" = radio
+  "d" = dolby
+  "x" = encrypted
+ 
+ Pressing the key "2" in the channel list hides all non TV channels.
+ 
+ Pressing the key "3" hides all non radio channels.
+ 
+ Pressing the key "4" hides all encrypted channesls (caid>4) 
+ Pressing the "4" again shows the encrypted channels again.
+ This works also in conjunction with the other filters.
+ e.g. pressing "2" and then "4", results in a list containing only 
+ unencrypted tv channels.
+ 
+ The filtering works also together with vdr's own sorting (key "0")
+ 
+ Pressing "1" or closing and reopening the channel list
+ resets any filtering.
+ 
+ I tested the patch against vdr 1.3.31 and vdr 1.3.33. It should 
+ also works with older 1.3.x-Versions. There are no translations yet. I'll 
+ add them after final bugfixing.
+ 
+ Install it as usual in the source directory of vdr
+   patch -p1 < vdr-1.3.xx-channelfilter-0.1.diff
+   make
+   make plugins
+ (a header file was changed, so plugin needs to be rebuild too)
+ 
+ Homepage www.u32.de/vdr.html#patches
+ Reports Bugs to  vdrpatch [at] u32.de
diff -u vdr-1.4.2/recording.c vdr-1.4.2-kw/recording.c
--- vdr-1.4.2/recording.c	2006-07-30 12:23:46.000000000 +0200
+++ vdr-1.4.2-kw/recording.c	2006-09-03 19:13:57.000000000 +0200
@@ -8,6 +8,7 @@
  */
 
 #include "recording.h"
+#include "iconpatch.h"
 #include <dirent.h>
 #include <errno.h>
 #include <fcntl.h>
@@ -45,6 +46,7 @@
 #endif
 #define INFOFILESUFFIX    "/info.vdr"
 #define MARKSFILESUFFIX   "/marks.vdr"
+#define INDEXFILESUFFIX   "/index.vdr"   // tf-rlp   // moved up from cIndexFile (Line 1147, unpatched)
 
 #define MINDISKSPACE 1024 // MB
 
@@ -61,6 +63,7 @@
 #define MAX_LINK_LEVEL  6
 
 bool VfatFileSystem = false;
+bool DirOrderState = false; // kw-srsp
 
 cRecordings DeletedRecordings(true);
 
@@ -645,6 +648,8 @@
 
 char *cRecording::StripEpisodeName(char *s)
 {
+// In:   Ein_Herz_und_eine_Seele/Der_Ofen_ist_aus/2005-11-25.20.55.43.99.rec
+// Out:  Ein_Herz_und_eine_Seele//2005-11-25.20.55.43.99.rec
   char *t = s, *s1 = NULL, *s2 = NULL;
   while (*t) {
         if (*t == '/') {
@@ -657,9 +662,10 @@
               s1 = t;
            }
         t++;
-        }
+        } 
   if (s1 && s2)
-     memmove(s1 + 1, s2, t - s2 + 1);
+      memmove(s1 + 1, s2, t - s2 + 1);	
+      
   return s;
 }
 
@@ -688,7 +694,9 @@
 int cRecording::Compare(const cListObject &ListObject) const
 {
   cRecording *r = (cRecording *)&ListObject;
-  return strcasecmp(SortName(), r->SortName());
+  if (!DirOrderState)  // kw-srsp
+     return strcasecmp(SortName(), r->SortName()) ;
+  return strcasecmp(FileName(), r->FileName()) ; // kw-srsp
 }
 
 const char *cRecording::FileName(void) const
@@ -701,11 +709,11 @@
      name = ExchangeChars(name, false);
      }
   return fileName;
-}
+}                                                                             
 
-const char *cRecording::Title(char Delimiter, bool NewIndicator, int Level) const
+const char *cRecording::Title(char Delimiter, bool NewIndicator, int Level, bool Original) const
 {
-  char New = NewIndicator && IsNew() ? '*' : ' ';
+  char New = NewIndicator && IsNew() && Setup.ShowRecNew ? Setup.WarEagleIcons ? ICON_NEU : '*' : ' ';
   free(titleBuffer);
   titleBuffer = NULL;
   if (Level < 0 || Level == HierarchyLevels()) {
@@ -716,7 +724,8 @@
         s++;
      else
         s = name;
-     asprintf(&titleBuffer, "%02d.%02d.%02d%c%02d:%02d%c%c%s",
+     if (Original) { // tf-rlp 
+         asprintf(&titleBuffer, "%02d.%02d.%02d%c%02d:%02d%c%c%s",
                             t->tm_mday,
                             t->tm_mon + 1,
                             t->tm_year % 100,
@@ -726,6 +735,59 @@
                             New,
                             Delimiter,
                             s);
+// Start tf-rlp                             
+        }
+     else {
+        struct tIndex { int offset; uchar type; uchar number; short reserved; };
+        tIndex *index;
+        char RecLength[21], RecDate[9], RecTime[6], RecDelimiter[2];
+        if (Setup.ShowRecLength) {
+           char *filename = NULL;
+           int last = -1;
+           strcpy(RecLength,"?"); //Default  //Fixed by kw
+           index = NULL;
+           if (FileName()) {
+              filename = MALLOC(char, strlen(FileName()) + strlen(INDEXFILESUFFIX) + 1);
+              if (filename) {
+                 strcpy(filename, FileName());
+                 char *pFileExt = filename + strlen(filename);
+                 strcpy(pFileExt, INDEXFILESUFFIX);
+                 int delta = 0;
+                 if (access(filename, R_OK) == 0) {
+                    struct stat buf;
+                    if (stat(filename, &buf) == 0) {
+                       delta = buf.st_size % sizeof(tIndex);
+                       if (delta) {
+                          delta = sizeof(tIndex) - delta;
+                          esyslog("ERROR: invalid file size (%ld) in '%s'", buf.st_size, filename);
+                          }
+                       last = (buf.st_size + delta) / sizeof(tIndex) - 1;
+                       char hour[2], min[3];
+                       snprintf(RecLength, sizeof(RecLength), "%s", *IndexToHMSF(last, true));
+                       snprintf(hour, sizeof(hour), "%c", RecLength[0]);
+                       snprintf(min, sizeof(min), "%c%c", RecLength[2], RecLength[3]);	  
+                       snprintf(RecLength, sizeof(RecLength), "%d'", (atoi(hour) * 60) + atoi(min));
+                       }
+                    }
+                 free(filename);
+                 }
+              }
+           }
+        snprintf(RecDate, sizeof(RecDate), "%02d.%02d.%02d", t->tm_mday, t->tm_mon + 1, t->tm_year % 100);
+        snprintf(RecTime, sizeof(RecTime), "%02d:%02d", t->tm_hour, t->tm_min);
+        snprintf(RecDelimiter, sizeof(RecDelimiter), "%c", Delimiter);
+        asprintf(&titleBuffer, "%s%s%s%c%s%s%s%s",  
+                               (Setup.ShowRecDate ? RecDate                               : ""),
+                               (Setup.ShowRecDate ? Setup.ShowRecTime ? RecDelimiter : "" : ""),
+                               (Setup.ShowRecTime ? RecTime                               : ""),
+                               New,
+                               (Setup.ShowRecTime   ? RecDelimiter : Setup.ShowRecDate ? RecDelimiter : ""),
+                               (Setup.ShowRecLength ? RecLength    : ""),
+                               (Setup.ShowRecLength ? RecDelimiter : ""),
+                               s);
+        }
+// end tf-rlp         
+
      // let's not display a trailing '~':
      if (!NewIndicator)
         stripspace(titleBuffer);
@@ -830,7 +892,7 @@
      return false;
      }
   isyslog("removing recording %s", FileName());
-  return RemoveVideoFile(FileName());
+  return RemoveVideoFile(FileName());          
 }
 
 void cRecording::ResetResume(void) const
@@ -838,6 +900,38 @@
   resume = RESUME_NOT_INITIALIZED;
 }
 
+bool cRecording::Rename(char *newName, int *newPriority, int *newLifetime)
+{
+  bool result = true;
+  char *newFileName;
+  struct tm tm_r;
+  struct tm *t = localtime_r(&start, &tm_r);
+#ifdef VFAT
+  char *localNewName = ExchangeChars(strdup(newName), true);
+  asprintf(&newFileName, NAMEFORMAT, VideoDirectory, localNewName, t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, *newPriority, *newLifetime);
+  free (localNewName);
+#else
+  asprintf(&newFileName, NAMEFORMAT, VideoDirectory, ExchangeChars(newName, true), t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, *newPriority, *newLifetime);
+#endif
+  if (strcmp(FileName(), newFileName)) {
+     if (access(newFileName, F_OK) == 0) {
+        isyslog("recording %s already exists", newFileName);
+        }
+     else {
+        isyslog("renaming recording %s to %s", FileName(), newFileName);
+        result = MakeDirs(newFileName, true);
+        if (result)
+           result = RenameVideoFile(FileName(), newFileName);
+        if (result) {
+           free(fileName);
+           fileName = strdup(newFileName);
+           }
+        }
+     }
+  free(newFileName);
+  return result;
+}
+
 // --- cRecordings -----------------------------------------------------------
 
 cRecordings Recordings;
@@ -1144,8 +1238,6 @@
 //XXX+ somewhere else???
 // --- cIndexFile ------------------------------------------------------------
 
-#define INDEXFILESUFFIX     "/index.vdr"
-
 // The number of frames to stay off the end in case of time shift:
 #define INDEXSAFETYLIMIT 150 // frames
 
diff -u vdr-1.4.2/recording.h vdr-1.4.2-kw/recording.h
--- vdr-1.4.2/recording.h	2006-07-30 12:24:07.000000000 +0200
+++ vdr-1.4.2-kw/recording.h	2006-09-03 19:14:26.000000000 +0200
@@ -19,6 +19,7 @@
 #include "tools.h"
 
 extern bool VfatFileSystem;
+extern bool DirOrderState;  // kw-srsp
 
 void RemoveDeletedRecordings(void);
 void AssertFreeDiskSpace(int Priority = 0, bool Force = false);
@@ -84,7 +85,7 @@
   virtual int Compare(const cListObject &ListObject) const;
   const char *Name(void) const { return name; }
   const char *FileName(void) const;
-  const char *Title(char Delimiter = ' ', bool NewIndicator = false, int Level = -1) const;
+  const char *Title(char Delimiter = ' ', bool NewIndicator = false, int Level = -1, bool Original = false) const;
   const cRecordingInfo *Info(void) const { return info; }
   const char *PrefixFileName(char Prefix);
   int HierarchyLevels(void) const;
@@ -98,6 +99,9 @@
   bool Remove(void);
        // Actually removes the file from the disk
        // Returns false in case of error
+  bool Rename(char *newName, int *newPriority, int *newLifetime);
+       // Changes the file name
+       // Returns false in case of error
   };
 
 class cRecordings : public cList<cRecording>, public cThread {
diff -u vdr-1.4.2/svdrp.c vdr-1.4.2-kw/svdrp.c
--- vdr-1.4.2/svdrp.c	2006-08-12 11:09:55.000000000 +0200
+++ vdr-1.4.2-kw/svdrp.c	2006-09-03 19:17:26.000000000 +0200
@@ -290,6 +290,8 @@
   "    format defined in vdr(5) for the 'epg.data' file.  A '.' on a line\n"
   "    by itself terminates the input and starts processing of the data (all\n"
   "    entered data is buffered until the terminating '.' is seen).",
+  "RENR <number> <new name>\n"                                                     // tk-rrp
+  "    Rename recording. Number must be the Number as returned by LSTR command.",  // tk-rrp
   "SCAN\n"
   "    Forces an EPG scan. If this is a single DVB device system, the scan\n"
   "    will be done on the primary device unless it is currently recording.",
@@ -1015,7 +1017,7 @@
   else if (recordings) {
      cRecording *recording = Recordings.First();
      while (recording) {
-           Reply(recording == Recordings.Last() ? 250 : -250, "%d %s", recording->Index() + 1, recording->Title(' ', true));
+           Reply(recording == Recordings.Last() ? 250 : -250, "%d %s", recording->Index() + 1, recording->Title(' ', true, -1, true));
            recording = Recordings.Next(recording);
            }
      }
@@ -1412,6 +1414,33 @@
   Reply(250, "EPG scan triggered");
 }
 
+// start tk-rrp
+void cSVDRP::CmdRENR(const char *Option)
+{
+  bool recordings = Recordings.Load();
+  if (recordings) {
+     if (*Option) {
+        char *tail;
+        int n = strtol(Option, &tail, 10);
+        cRecording *recording = Recordings.Get(n - 1);
+        if (recording && tail && tail != Option) {
+           int priority = recording->priority;
+           int lifetime = recording->lifetime;
+           tail = skipspace(tail);
+           recording->Rename(tail, &priority, &lifetime);
+           Reply(250, "Renamed \"%s\" to \"%s\"", recording->Name(), tail);
+           }
+        else
+          Reply(501, "Recording not found or wrong syntax");
+        }
+     else
+        Reply(501, "Missing Input settings");
+     }
+  else
+     Reply(550, "No recordings available");
+}
+// end tk-rrp
+						
 void cSVDRP::CmdSTAT(const char *Option)
 {
   if (*Option) {
@@ -1526,6 +1555,7 @@
   else if (CMD("PLAY"))  CmdPLAY(s);
   else if (CMD("PLUG"))  CmdPLUG(s);
   else if (CMD("PUTE"))  CmdPUTE(s);
+  else if (CMD("RENR"))  CmdRENR(s);  // tk-rrp
   else if (CMD("SCAN"))  CmdSCAN(s);
   else if (CMD("STAT"))  CmdSTAT(s);
   else if (CMD("UPDT"))  CmdUPDT(s);
diff -u vdr-1.4.2/svdrp.h vdr-1.4.2-kw/svdrp.h
--- vdr-1.4.2/svdrp.h	2006-08-06 10:51:09.000000000 +0200
+++ vdr-1.4.2-kw/svdrp.h	2006-09-03 19:15:40.000000000 +0200
@@ -78,6 +78,7 @@
   void CmdPLAY(const char *Option);
   void CmdPLUG(const char *Option);
   void CmdPUTE(const char *Option);
+  void CmdRENR(const char *Option);  // tk-rrp
   void CmdSCAN(const char *Option);
   void CmdSTAT(const char *Option);
   void CmdUPDT(const char *Option);
Gemeinsame Unterverzeichnisse: vdr-1.4.2/symbols und vdr-1.4.2-kw/symbols.
